summary refs log tree commit diff
path: root/gnu
diff options
context:
space:
mode:
authorMaxim Cournoyer <maxim.cournoyer@gmail.com>2022-01-25 22:07:13 -0500
committerMaxim Cournoyer <maxim.cournoyer@gmail.com>2022-01-25 22:07:13 -0500
commit1a5302435ff0d2822b823f5a6fe01faa7a85c629 (patch)
treeac7810c88b560532f22d2bab2e59609cd7305c21 /gnu
parent3ff2ac4980dacf10087e4b42bd9fbc490591900c (diff)
parent070b8a893febd6e7d8b2b7c8c4dcebacf7845aa9 (diff)
downloadguix-1a5302435ff0d2822b823f5a6fe01faa7a85c629.tar.gz
Merge branch 'master' into staging.
With "conflicts" solved (all in favor of master except git) in:
	gnu/local.mk
	gnu/packages/databases.scm
	gnu/packages/glib.scm
	gnu/packages/gnome.scm
	gnu/packages/gnupg.scm
	gnu/packages/gnuzilla.scm
	gnu/packages/graphics.scm
	gnu/packages/gstreamer.scm
	gnu/packages/gtk.scm
	gnu/packages/linux.scm
	gnu/packages/machine-learning.scm
	gnu/packages/networking.scm
	gnu/packages/polkit.scm
	gnu/packages/pulseaudio.scm
	gnu/packages/rpc.scm
	gnu/packages/rust.scm
	gnu/packages/version-control.scm
	gnu/packages/w3m.scm
Diffstat (limited to 'gnu')
-rw-r--r--gnu/bootloader.scm16
-rw-r--r--gnu/bootloader/grub.scm59
-rw-r--r--gnu/build/accounts.scm8
-rw-r--r--gnu/build/bootloader.scm1
-rw-r--r--gnu/build/chromium-extension.scm173
-rw-r--r--gnu/build/file-systems.scm36
-rw-r--r--gnu/build/hurd-boot.scm12
-rw-r--r--gnu/build/image.scm39
-rw-r--r--gnu/build/linux-container.scm3
-rw-r--r--gnu/build/linux-modules.scm10
-rw-r--r--gnu/build/marionette.scm84
-rw-r--r--gnu/build/secret-service.scm17
-rw-r--r--gnu/build/vm.scm500
-rw-r--r--gnu/ci.scm142
-rw-r--r--gnu/home-services/configuration.scm109
-rw-r--r--gnu/home.scm20
-rw-r--r--gnu/home/services.scm (renamed from gnu/home-services.scm)88
-rw-r--r--gnu/home/services/fontutils.scm (renamed from gnu/home-services/fontutils.scm)4
-rw-r--r--gnu/home/services/mcron.scm (renamed from gnu/home-services/mcron.scm)6
-rw-r--r--gnu/home/services/shells.scm (renamed from gnu/home-services/shells.scm)171
-rw-r--r--gnu/home/services/shepherd.scm (renamed from gnu/home-services/shepherd.scm)4
-rw-r--r--gnu/home/services/symlink-manager.scm (renamed from gnu/home-services/symlink-manager.scm)46
-rw-r--r--gnu/home/services/utils.scm (renamed from gnu/home-services/utils.scm)4
-rw-r--r--gnu/home/services/xdg.scm (renamed from gnu/home-services/xdg.scm)9
-rw-r--r--gnu/image.scm22
-rw-r--r--gnu/installer.scm3
-rw-r--r--gnu/installer/final.scm61
-rw-r--r--gnu/installer/keymap.scm17
-rw-r--r--gnu/installer/newt/network.scm21
-rw-r--r--gnu/installer/newt/partition.scm15
-rw-r--r--gnu/installer/newt/services.scm41
-rw-r--r--gnu/installer/parted.scm87
-rw-r--r--gnu/installer/services.scm12
-rw-r--r--gnu/installer/tests.scm11
-rw-r--r--gnu/installer/utils.scm18
-rw-r--r--gnu/local.mk397
-rw-r--r--gnu/machine/ssh.scm78
-rw-r--r--gnu/packages.scm3
-rw-r--r--gnu/packages/accessibility.scm131
-rw-r--r--gnu/packages/acl.scm30
-rw-r--r--gnu/packages/ada.scm17
-rw-r--r--gnu/packages/admin.scm1115
-rw-r--r--gnu/packages/adns.scm59
-rw-r--r--gnu/packages/agda.scm93
-rw-r--r--gnu/packages/aidc.scm131
-rw-r--r--gnu/packages/algebra.scm374
-rw-r--r--gnu/packages/android.scm439
-rw-r--r--gnu/packages/animation.scm23
-rw-r--r--gnu/packages/antivirus.scm10
-rw-r--r--gnu/packages/apr.scm7
-rw-r--r--gnu/packages/arcan.scm42
-rw-r--r--gnu/packages/aspell.scm22
-rw-r--r--gnu/packages/assembly.scm74
-rw-r--r--gnu/packages/astronomy.scm623
-rw-r--r--gnu/packages/attr.scm21
-rw-r--r--gnu/packages/audio.scm1701
-rw-r--r--gnu/packages/augeas.scm6
-rw-r--r--gnu/packages/authentication.scm102
-rw-r--r--gnu/packages/autogen.scm6
-rw-r--r--gnu/packages/autotools.scm138
-rw-r--r--gnu/packages/aux-files/emacs/guix-emacs.el34
-rw-r--r--gnu/packages/aux-files/guile-launcher.c7
-rw-r--r--gnu/packages/aux-files/linux-libre/4.14-i686.conf10
-rw-r--r--gnu/packages/aux-files/linux-libre/4.14-x86_64.conf10
-rw-r--r--gnu/packages/aux-files/linux-libre/4.19-i686.conf10
-rw-r--r--gnu/packages/aux-files/linux-libre/4.19-x86_64.conf10
-rw-r--r--gnu/packages/aux-files/linux-libre/4.4-i686.conf10
-rw-r--r--gnu/packages/aux-files/linux-libre/4.4-x86_64.conf10
-rw-r--r--gnu/packages/aux-files/linux-libre/5.10-i686.conf10
-rw-r--r--gnu/packages/aux-files/linux-libre/5.10-x86_64.conf10
-rw-r--r--gnu/packages/aux-files/linux-libre/5.15-arm.conf (renamed from gnu/packages/aux-files/linux-libre/5.14-arm.conf)247
-rw-r--r--gnu/packages/aux-files/linux-libre/5.15-arm64.conf (renamed from gnu/packages/aux-files/linux-libre/5.14-arm64.conf)312
-rw-r--r--gnu/packages/aux-files/linux-libre/5.15-i686.conf (renamed from gnu/packages/aux-files/linux-libre/5.14-i686.conf)292
-rw-r--r--gnu/packages/aux-files/linux-libre/5.15-x86_64.conf (renamed from gnu/packages/aux-files/linux-libre/5.14-x86_64.conf)317
-rw-r--r--gnu/packages/aux-files/linux-libre/5.4-i686.conf10
-rw-r--r--gnu/packages/aux-files/linux-libre/5.4-x86_64.conf10
-rw-r--r--gnu/packages/aux-files/python/sanity-check.py92
-rw-r--r--gnu/packages/aux-files/python/sitecustomize.py65
-rw-r--r--gnu/packages/aux-files/renpy/renpy.in48
-rw-r--r--gnu/packages/avahi.scm58
-rw-r--r--gnu/packages/avr.scm3
-rw-r--r--gnu/packages/axoloti.scm28
-rw-r--r--gnu/packages/backup.scm403
-rw-r--r--gnu/packages/base.scm605
-rw-r--r--gnu/packages/bash.scm80
-rw-r--r--gnu/packages/batik.scm11
-rw-r--r--gnu/packages/bdw-gc.scm25
-rw-r--r--gnu/packages/benchmark.scm160
-rw-r--r--gnu/packages/bioconductor.scm9693
-rw-r--r--gnu/packages/bioinformatics.scm6213
-rw-r--r--gnu/packages/bison.scm27
-rw-r--r--gnu/packages/bittorrent.scm267
-rw-r--r--gnu/packages/boost.scm63
-rw-r--r--gnu/packages/bootloaders.scm145
-rw-r--r--gnu/packages/bootstrap.scm267
-rw-r--r--gnu/packages/browser-extensions.scm7
-rw-r--r--gnu/packages/build-tools.scm142
-rw-r--r--gnu/packages/busybox.scm64
-rw-r--r--gnu/packages/c.scm320
-rw-r--r--gnu/packages/calcurse.scm8
-rw-r--r--gnu/packages/calendar.scm96
-rw-r--r--gnu/packages/ccache.scm46
-rw-r--r--gnu/packages/cdrom.scm162
-rw-r--r--gnu/packages/cedille.scm9
-rw-r--r--gnu/packages/certs.scm150
-rw-r--r--gnu/packages/check.scm794
-rw-r--r--gnu/packages/chemistry.scm95
-rw-r--r--gnu/packages/chez.scm74
-rw-r--r--gnu/packages/chicken.scm15
-rw-r--r--gnu/packages/chromium.scm888
-rw-r--r--gnu/packages/ci.scm85
-rw-r--r--gnu/packages/cinnamon.scm34
-rw-r--r--gnu/packages/clojure.scm256
-rw-r--r--gnu/packages/cluster.scm37
-rw-r--r--gnu/packages/cmake.scm215
-rw-r--r--gnu/packages/cobol.scm8
-rw-r--r--gnu/packages/code.scm283
-rw-r--r--gnu/packages/commencement.scm1477
-rw-r--r--gnu/packages/compression.scm610
-rw-r--r--gnu/packages/compton.scm62
-rw-r--r--gnu/packages/configuration-management.scm100
-rw-r--r--gnu/packages/conky.scm26
-rw-r--r--gnu/packages/connman.scm40
-rw-r--r--gnu/packages/containers.scm346
-rw-r--r--gnu/packages/convmv.scm2
-rw-r--r--gnu/packages/cook.scm22
-rw-r--r--gnu/packages/coq.scm371
-rw-r--r--gnu/packages/cpio.scm10
-rw-r--r--gnu/packages/cpp.scm484
-rw-r--r--gnu/packages/cran.scm9957
-rw-r--r--gnu/packages/crates-graphics.scm345
-rw-r--r--gnu/packages/crates-gtk.scm899
-rw-r--r--gnu/packages/crates-io.scm15321
-rw-r--r--gnu/packages/cross-base.scm59
-rw-r--r--gnu/packages/crypto.scm411
-rw-r--r--gnu/packages/cryptsetup.scm18
-rw-r--r--gnu/packages/cups.scm422
-rw-r--r--gnu/packages/curl.scm112
-rw-r--r--gnu/packages/cvassistant.scm4
-rw-r--r--gnu/packages/cybersecurity.scm106
-rw-r--r--gnu/packages/cyrus-sasl.scm11
-rw-r--r--gnu/packages/databases.scm1431
-rw-r--r--gnu/packages/datamash.scm108
-rw-r--r--gnu/packages/datastructures.scm19
-rw-r--r--gnu/packages/dav.scm65
-rw-r--r--gnu/packages/dbm.scm60
-rw-r--r--gnu/packages/dc.scm14
-rw-r--r--gnu/packages/debian.scm135
-rw-r--r--gnu/packages/debug.scm159
-rw-r--r--gnu/packages/dejagnu.scm2
-rw-r--r--gnu/packages/dhall.scm116
-rw-r--r--gnu/packages/dico.scm2
-rw-r--r--gnu/packages/dictionaries.scm42
-rw-r--r--gnu/packages/diffoscope.scm230
-rw-r--r--gnu/packages/digest.scm36
-rw-r--r--gnu/packages/direct-connect.scm34
-rw-r--r--gnu/packages/disk.scm311
-rw-r--r--gnu/packages/display-managers.scm175
-rw-r--r--gnu/packages/distributed.scm23
-rw-r--r--gnu/packages/django.scm543
-rw-r--r--gnu/packages/djvu.scm67
-rw-r--r--gnu/packages/dlang.scm544
-rw-r--r--gnu/packages/dns.scm570
-rw-r--r--gnu/packages/docbook.scm207
-rw-r--r--gnu/packages/docker.scm71
-rw-r--r--gnu/packages/documentation.scm46
-rw-r--r--gnu/packages/dunst.scm38
-rw-r--r--gnu/packages/dvtm.scm2
-rw-r--r--gnu/packages/easyrpg.scm48
-rw-r--r--gnu/packages/ebook.scm120
-rw-r--r--gnu/packages/ed.scm6
-rw-r--r--gnu/packages/education.scm273
-rw-r--r--gnu/packages/efi.scm22
-rw-r--r--gnu/packages/electronics.scm206
-rw-r--r--gnu/packages/elf.scm57
-rw-r--r--gnu/packages/elixir.scm19
-rw-r--r--gnu/packages/elm.scm56
-rw-r--r--gnu/packages/emacs-xyz.scm6271
-rw-r--r--gnu/packages/emacs.scm88
-rw-r--r--gnu/packages/embedded.scm279
-rw-r--r--gnu/packages/emulators.scm972
-rw-r--r--gnu/packages/enchant.scm23
-rw-r--r--gnu/packages/engineering.scm810
-rw-r--r--gnu/packages/enlightenment.scm176
-rw-r--r--gnu/packages/entr.scm10
-rw-r--r--gnu/packages/erlang.scm4
-rw-r--r--gnu/packages/esolangs.scm9
-rw-r--r--gnu/packages/fabric-management.scm49
-rw-r--r--gnu/packages/fcitx.scm11
-rw-r--r--gnu/packages/fcitx5.scm61
-rw-r--r--gnu/packages/file-systems.scm482
-rw-r--r--gnu/packages/file.scm19
-rw-r--r--gnu/packages/finance.scm875
-rw-r--r--gnu/packages/firmware.scm172
-rw-r--r--gnu/packages/flashing-tools.scm131
-rw-r--r--gnu/packages/flex.scm5
-rw-r--r--gnu/packages/fltk.scm8
-rw-r--r--gnu/packages/fonts.scm455
-rw-r--r--gnu/packages/fontutils.scm325
-rw-r--r--gnu/packages/forth.scm2
-rw-r--r--gnu/packages/fpga.scm101
-rw-r--r--gnu/packages/freedesktop.scm856
-rw-r--r--gnu/packages/freeipmi.scm2
-rw-r--r--gnu/packages/fribidi.scm2
-rw-r--r--gnu/packages/ftp.scm58
-rw-r--r--gnu/packages/fvwm.scm20
-rw-r--r--gnu/packages/game-development.scm666
-rw-r--r--gnu/packages/games.scm3269
-rw-r--r--gnu/packages/gawk.scm58
-rw-r--r--gnu/packages/gcc.scm267
-rw-r--r--gnu/packages/gd.scm29
-rw-r--r--gnu/packages/gdb.scm159
-rw-r--r--gnu/packages/genealogy.scm44
-rw-r--r--gnu/packages/genimage.scm249
-rw-r--r--gnu/packages/geo.scm1103
-rw-r--r--gnu/packages/gettext.scm186
-rw-r--r--gnu/packages/ghostscript.scm54
-rw-r--r--gnu/packages/gimp.scm202
-rw-r--r--gnu/packages/gkrellm.scm2
-rw-r--r--gnu/packages/gl.scm282
-rw-r--r--gnu/packages/glib.scm955
-rw-r--r--gnu/packages/gnome-xyz.scm569
-rw-r--r--gnu/packages/gnome.scm6535
-rw-r--r--gnu/packages/gnu-pw-mgr.scm2
-rw-r--r--gnu/packages/gnucash.scm38
-rw-r--r--gnu/packages/gnunet.scm33
-rw-r--r--gnu/packages/gnupg.scm402
-rw-r--r--gnu/packages/gnustep.scm37
-rw-r--r--gnu/packages/gnuzilla.scm751
-rw-r--r--gnu/packages/gobby.scm36
-rw-r--r--gnu/packages/golang.scm1646
-rw-r--r--gnu/packages/gpodder.scm60
-rw-r--r--gnu/packages/gps.scm79
-rw-r--r--gnu/packages/graph.scm265
-rw-r--r--gnu/packages/graphics.scm701
-rw-r--r--gnu/packages/graphviz.scm267
-rw-r--r--gnu/packages/groff.scm8
-rw-r--r--gnu/packages/groovy.scm4
-rw-r--r--gnu/packages/gsasl.scm16
-rw-r--r--gnu/packages/gstreamer.scm180
-rw-r--r--gnu/packages/gtk.scm2016
-rw-r--r--gnu/packages/guile-wm.scm12
-rw-r--r--gnu/packages/guile-xyz.scm1479
-rw-r--r--gnu/packages/guile.scm344
-rw-r--r--gnu/packages/gv.scm2
-rw-r--r--gnu/packages/gxmessage.scm5
-rw-r--r--gnu/packages/hardware.scm403
-rw-r--r--gnu/packages/haskell-apps.scm624
-rw-r--r--gnu/packages/haskell-check.scm592
-rw-r--r--gnu/packages/haskell-crypto.scm291
-rw-r--r--gnu/packages/haskell-web.scm1461
-rw-r--r--gnu/packages/haskell-xyz.scm7394
-rw-r--r--gnu/packages/haskell.scm50
-rw-r--r--gnu/packages/hexedit.scm11
-rw-r--r--gnu/packages/hugs.scm2
-rw-r--r--gnu/packages/hurd.scm83
-rw-r--r--gnu/packages/hyperledger.scm29
-rw-r--r--gnu/packages/i2p.scm5
-rw-r--r--gnu/packages/ibus.scm206
-rw-r--r--gnu/packages/icu4c.scm72
-rw-r--r--gnu/packages/idris.scm86
-rw-r--r--gnu/packages/idutils.scm12
-rw-r--r--gnu/packages/image-processing.scm439
-rw-r--r--gnu/packages/image-viewers.scm344
-rw-r--r--gnu/packages/image.scm543
-rw-r--r--gnu/packages/imagemagick.scm12
-rw-r--r--gnu/packages/inklingreader.scm8
-rw-r--r--gnu/packages/inkscape.scm112
-rw-r--r--gnu/packages/installers.scm4
-rw-r--r--gnu/packages/instrumentation.scm346
-rw-r--r--gnu/packages/ipfs.scm170
-rw-r--r--gnu/packages/irc.scm377
-rw-r--r--gnu/packages/irods.scm19
-rw-r--r--gnu/packages/iso-codes.scm15
-rw-r--r--gnu/packages/jami.scm464
-rw-r--r--gnu/packages/java-compression.scm9
-rw-r--r--gnu/packages/java-graphics.scm13
-rw-r--r--gnu/packages/java-maths.scm2
-rw-r--r--gnu/packages/java.scm2617
-rw-r--r--gnu/packages/javascript.scm169
-rw-r--r--gnu/packages/jemalloc.scm42
-rw-r--r--gnu/packages/jose.scm6
-rw-r--r--gnu/packages/jrnl.scm18
-rw-r--r--gnu/packages/julia-jll.scm682
-rw-r--r--gnu/packages/julia-xyz.scm1929
-rw-r--r--gnu/packages/julia.scm246
-rw-r--r--gnu/packages/jupyter.scm249
-rw-r--r--gnu/packages/kawa.scm2
-rw-r--r--gnu/packages/kde-frameworks.scm1587
-rw-r--r--gnu/packages/kde-internet.scm421
-rw-r--r--gnu/packages/kde-multimedia.scm622
-rw-r--r--gnu/packages/kde-pim.scm1748
-rw-r--r--gnu/packages/kde-plasma.scm102
-rw-r--r--gnu/packages/kde-systemtools.scm282
-rw-r--r--gnu/packages/kde-utils.scm406
-rw-r--r--gnu/packages/kde.scm816
-rw-r--r--gnu/packages/kerberos.scm151
-rw-r--r--gnu/packages/key-mon.scm4
-rw-r--r--gnu/packages/kodi.scm20
-rw-r--r--gnu/packages/language.scm93
-rw-r--r--gnu/packages/ld-wrapper.in3
-rw-r--r--gnu/packages/lean.scm2
-rw-r--r--gnu/packages/lego.scm11
-rw-r--r--gnu/packages/less.scm23
-rw-r--r--gnu/packages/lesstif.scm5
-rw-r--r--gnu/packages/libcanberra.scm6
-rw-r--r--gnu/packages/libdaemon.scm42
-rw-r--r--gnu/packages/libedit.scm2
-rw-r--r--gnu/packages/libevent.scm77
-rw-r--r--gnu/packages/libffi.scm89
-rw-r--r--gnu/packages/libftdi.scm2
-rw-r--r--gnu/packages/libidn.scm17
-rw-r--r--gnu/packages/libphidget.scm2
-rw-r--r--gnu/packages/libreoffice.scm254
-rw-r--r--gnu/packages/libsigsegv.scm4
-rw-r--r--gnu/packages/libusb.scm103
-rw-r--r--gnu/packages/license.scm53
-rw-r--r--gnu/packages/lighting.scm19
-rw-r--r--gnu/packages/linphone.scm57
-rw-r--r--gnu/packages/linux.scm2625
-rw-r--r--gnu/packages/lirc.scm10
-rw-r--r--gnu/packages/lisp-check.scm822
-rw-r--r--gnu/packages/lisp-xyz.scm5217
-rw-r--r--gnu/packages/lisp.scm178
-rw-r--r--gnu/packages/llvm.scm836
-rw-r--r--gnu/packages/logging.scm194
-rw-r--r--gnu/packages/logo.scm2
-rw-r--r--gnu/packages/lout.scm2
-rw-r--r--gnu/packages/lsof.scm140
-rw-r--r--gnu/packages/lua.scm129
-rw-r--r--gnu/packages/lxde.scm207
-rw-r--r--gnu/packages/lxqt.scm533
-rw-r--r--gnu/packages/machine-learning.scm825
-rw-r--r--gnu/packages/magic-wormhole.scm52
-rw-r--r--gnu/packages/mail.scm1492
-rw-r--r--gnu/packages/make-bootstrap.scm515
-rw-r--r--gnu/packages/man.scm202
-rw-r--r--gnu/packages/markup.scm193
-rw-r--r--gnu/packages/mastodon.scm112
-rw-r--r--gnu/packages/mate.scm730
-rw-r--r--gnu/packages/maths.scm1928
-rw-r--r--gnu/packages/matrix.scm245
-rw-r--r--gnu/packages/maven-parent-pom.scm35
-rw-r--r--gnu/packages/maven.scm962
-rw-r--r--gnu/packages/mc.scm17
-rw-r--r--gnu/packages/mcrypt.scm6
-rw-r--r--gnu/packages/medical.scm4
-rw-r--r--gnu/packages/mercury.scm6
-rw-r--r--gnu/packages/mes.scm293
-rw-r--r--gnu/packages/messaging.scm1246
-rw-r--r--gnu/packages/microcom.scm9
-rw-r--r--gnu/packages/minetest.scm87
-rw-r--r--gnu/packages/moe.scm4
-rw-r--r--gnu/packages/monitoring.scm104
-rw-r--r--gnu/packages/mono.scm2
-rw-r--r--gnu/packages/moreutils.scm50
-rw-r--r--gnu/packages/mp3.scm83
-rw-r--r--gnu/packages/mpd.scm201
-rw-r--r--gnu/packages/mpi.scm80
-rw-r--r--gnu/packages/mtools.scm4
-rw-r--r--gnu/packages/multiprecision.scm72
-rw-r--r--gnu/packages/music.scm2141
-rw-r--r--gnu/packages/myrddin.scm65
-rw-r--r--gnu/packages/nano.scm7
-rw-r--r--gnu/packages/ncdu.scm2
-rw-r--r--gnu/packages/ncurses.scm55
-rw-r--r--gnu/packages/netpbm.scm8
-rw-r--r--gnu/packages/nettle.scm34
-rw-r--r--gnu/packages/networking.scm1029
-rw-r--r--gnu/packages/nfs.scm8
-rw-r--r--gnu/packages/nickle.scm2
-rw-r--r--gnu/packages/nicotine.scm4
-rw-r--r--gnu/packages/nim.scm5
-rw-r--r--gnu/packages/ninja.scm10
-rw-r--r--gnu/packages/node-xyz.scm944
-rw-r--r--gnu/packages/node.scm396
-rw-r--r--gnu/packages/notcurses.scm77
-rw-r--r--gnu/packages/noweb.scm2
-rw-r--r--gnu/packages/nss.scm130
-rw-r--r--gnu/packages/ntp.scm22
-rw-r--r--gnu/packages/nvi.scm5
-rw-r--r--gnu/packages/ocaml.scm2285
-rw-r--r--gnu/packages/ocr.scm6
-rw-r--r--gnu/packages/onc-rpc.scm29
-rw-r--r--gnu/packages/openbox.scm27
-rw-r--r--gnu/packages/opencl.scm32
-rw-r--r--gnu/packages/opencog.scm31
-rw-r--r--gnu/packages/openkinect.scm14
-rw-r--r--gnu/packages/openldap.scm143
-rw-r--r--gnu/packages/openpgp.scm14
-rw-r--r--gnu/packages/openstack.scm370
-rw-r--r--gnu/packages/orange.scm120
-rw-r--r--gnu/packages/orpheus.scm23
-rw-r--r--gnu/packages/ots.scm5
-rw-r--r--gnu/packages/package-management.scm782
-rw-r--r--gnu/packages/pantheon.scm44
-rw-r--r--gnu/packages/parallel.scm48
-rw-r--r--gnu/packages/pascal.scm77
-rw-r--r--gnu/packages/password-utils.scm190
-rw-r--r--gnu/packages/patches/agg-2.5-gcc8.patch14
-rw-r--r--gnu/packages/patches/alpine-fix-privacy-policy-crash.patch39
-rw-r--r--gnu/packages/patches/atlas-gfortran-compat.patch37
-rw-r--r--gnu/packages/patches/audacity-add-include.patch15
-rw-r--r--gnu/packages/patches/audacity-build-with-system-portaudio.patch62
-rw-r--r--gnu/packages/patches/awesome-4.3-fno-common.patch178
-rw-r--r--gnu/packages/patches/aws-c-auth-install-private-headers.patch19
-rw-r--r--gnu/packages/patches/aws-c-cal-cmake-prefix.patch13
-rw-r--r--gnu/packages/patches/aws-c-event-stream-cmake-prefix.patch13
-rw-r--r--gnu/packages/patches/aws-c-io-cmake-prefix.patch13
-rw-r--r--gnu/packages/patches/aws-c-io-disable-networking-tests.patch81
-rw-r--r--gnu/packages/patches/aws-checksums-cmake-prefix.patch13
-rw-r--r--gnu/packages/patches/bdb-5.3-atomics-on-gcc-9.patch22
-rw-r--r--gnu/packages/patches/bear-disable-preinstall-tests.patch40
-rw-r--r--gnu/packages/patches/behave-skip-a-couple-of-tests.patch462
-rw-r--r--gnu/packages/patches/biber-fix-encoding-write.patch31
-rw-r--r--gnu/packages/patches/biber-sortinithash.patch1666
-rw-r--r--gnu/packages/patches/bind-re-add-attr-constructor-priority.patch57
-rw-r--r--gnu/packages/patches/binutils-2.37-file-descriptor-leak.patch231
-rw-r--r--gnu/packages/patches/binutils-CVE-2021-45078.patch257
-rw-r--r--gnu/packages/patches/binutils-loongson-workaround.patch14
-rw-r--r--gnu/packages/patches/binutils-mingw-w64-timestamp.patch39
-rw-r--r--gnu/packages/patches/blender-2.79-gcc8.patch36
-rw-r--r--gnu/packages/patches/blender-2.79-gcc9.patch53
-rw-r--r--gnu/packages/patches/blender-2.79-newer-ffmpeg.patch80
-rw-r--r--gnu/packages/patches/blender-2.79-oiio2.patch284
-rw-r--r--gnu/packages/patches/blender-2.79-python-3.7-fix.patch43
-rw-r--r--gnu/packages/patches/blender-2.79-python-3.8-fix.patch204
-rw-r--r--gnu/packages/patches/bubblewrap-fix-locale-in-tests.patch34
-rw-r--r--gnu/packages/patches/c++-gsl-move-array-bounds-tests.patch126
-rw-r--r--gnu/packages/patches/cabal-install-base16-bytestring1.0.patch29
-rw-r--r--gnu/packages/patches/cabal-install-ghc8.10.patch393
-rw-r--r--gnu/packages/patches/calibre-fix-zeroconf.patch38
-rw-r--r--gnu/packages/patches/ccache-fix-basedir-test.patch26
-rw-r--r--gnu/packages/patches/cdrkit-libre-cross-compile.patch32
-rw-r--r--gnu/packages/patches/ceph-boost-compat.patch18
-rw-r--r--gnu/packages/patches/ceph-rocksdb-compat.patch303
-rw-r--r--gnu/packages/patches/cheese-vala-update.patch180
-rw-r--r--gnu/packages/patches/chez-scheme-build-util-paths-backport.patch780
-rw-r--r--gnu/packages/patches/clang-10.0-libc-search-path.patch93
-rw-r--r--gnu/packages/patches/clang-11.0-libc-search-path.patch101
-rw-r--r--gnu/packages/patches/clang-12.0-libc-search-path.patch84
-rw-r--r--gnu/packages/patches/clang-13.0-libc-search-path.patch96
-rw-r--r--gnu/packages/patches/clang-7.0-libc-search-path.patch82
-rw-r--r--gnu/packages/patches/clang-8.0-libc-search-path.patch94
-rw-r--r--gnu/packages/patches/clang-9.0-libc-search-path.patch90
-rw-r--r--gnu/packages/patches/classpath-miscompilation.patch71
-rw-r--r--gnu/packages/patches/cling-use-shared-library.patch329
-rw-r--r--gnu/packages/patches/cool-retro-term-wctype.patch13
-rw-r--r--gnu/packages/patches/coq-fix-envvars.patch139
-rw-r--r--gnu/packages/patches/coreutils-gnulib-tests.patch45
-rw-r--r--gnu/packages/patches/cpufrequtils-fix-aclocal.patch46
-rw-r--r--gnu/packages/patches/cups-CVE-2020-10001.patch47
-rw-r--r--gnu/packages/patches/curl-7.76-use-ssl-cert-env.patch64
-rw-r--r--gnu/packages/patches/curl-7.77-tls-priority-string.patch98
-rw-r--r--gnu/packages/patches/curl-use-ssl-cert-env.patch4
-rw-r--r--gnu/packages/patches/dbus-CVE-2020-12049.patch58
-rw-r--r--gnu/packages/patches/dealii-fix-compiliation-with-boost-1.78.patch40
-rw-r--r--gnu/packages/patches/dealii-fix-sundials.patch60
-rw-r--r--gnu/packages/patches/diffoscope-fix-llvm-test.patch28
-rw-r--r--gnu/packages/patches/diffutils-fix-signal-processing.patch58
-rw-r--r--gnu/packages/patches/diffutils-gets-undeclared.patch71
-rw-r--r--gnu/packages/patches/disarchive-cross-compilation.patch77
-rw-r--r--gnu/packages/patches/docbook-xsl-nonrecursive-string-subst.patch11
-rw-r--r--gnu/packages/patches/docbook-xsl-support-old-url.patch17
-rw-r--r--gnu/packages/patches/doxygen-1.8.17-runtests.patch73
-rw-r--r--gnu/packages/patches/doxygen-test.patch60
-rw-r--r--gnu/packages/patches/dune-istl-2.7-fix-non-mpi-tests.patch82
-rw-r--r--gnu/packages/patches/dynaconf-unvendor-deps.patch179
-rw-r--r--gnu/packages/patches/elogind-revert-polkit-detection.patch41
-rw-r--r--gnu/packages/patches/emacs-exwm-fix-fullscreen-states.patch39
-rw-r--r--gnu/packages/patches/emacs-telega-path-placeholder.patch49
-rw-r--r--gnu/packages/patches/emacs-telega-test-env.patch30
-rw-r--r--gnu/packages/patches/enlightenment-fix-setuid-path.patch33
-rw-r--r--gnu/packages/patches/eog-update-libportal-usage.patch40
-rw-r--r--gnu/packages/patches/epiphany-update-libportal-usage.patch53
-rw-r--r--gnu/packages/patches/evolution-CVE-2020-11879.patch122
-rw-r--r--gnu/packages/patches/evolution-data-server-CVE-2020-14928.patch115
-rw-r--r--gnu/packages/patches/evolution-data-server-CVE-2020-16117.patch28
-rw-r--r--gnu/packages/patches/evolution-data-server-libical-compat.patch36
-rw-r--r--gnu/packages/patches/evolution-data-server-locales.patch33
-rw-r--r--gnu/packages/patches/fifengine-boost-compat.patch17
-rw-r--r--gnu/packages/patches/findutils-test-rwlock-threads.patch38
-rw-r--r--gnu/packages/patches/flatpak-fix-path.patch29
-rw-r--r--gnu/packages/patches/fontconfig-cache-ignore-mtime.patch15
-rw-r--r--gnu/packages/patches/fontconfig-hurd-path-max.patch17
-rw-r--r--gnu/packages/patches/freecad-boost-serialization.patch27
-rw-r--r--gnu/packages/patches/freecad-vtk9.patch827
-rw-r--r--gnu/packages/patches/freeglut-gcc-compat.patch53
-rw-r--r--gnu/packages/patches/ganeti-deterministic-manual.patch16
-rw-r--r--gnu/packages/patches/ganeti-drbd-compat.patch166
-rw-r--r--gnu/packages/patches/ganeti-haskell-compat.patch18
-rw-r--r--gnu/packages/patches/ganeti-os-disk-size.patch17
-rw-r--r--gnu/packages/patches/ganeti-preserve-PYTHONPATH.patch21
-rw-r--r--gnu/packages/patches/ganeti-sphinx-compat.patch24
-rw-r--r--gnu/packages/patches/gcc-10-cross-environment-variables.patch51
-rw-r--r--gnu/packages/patches/gcc-5-fix-powerpc64le-build.patch64
-rw-r--r--gnu/packages/patches/gcc-cross-gxx-include-dir.patch73
-rw-r--r--gnu/packages/patches/gd-Revert-fix-303-gdlib.pc.patch179
-rw-r--r--gnu/packages/patches/gdb-fix-gnu-nat-build.patch254
-rw-r--r--gnu/packages/patches/gdb-hurd.patch69
-rw-r--r--gnu/packages/patches/gdk-pixbuf-CVE-2020-29385.patch53
-rw-r--r--gnu/packages/patches/gdm-default-session.patch37
-rw-r--r--gnu/packages/patches/gdm-elogind-support.patch211
-rw-r--r--gnu/packages/patches/gdm-pass-gdk-pixbuf-loader-env.patch24
-rw-r--r--gnu/packages/patches/gdm-remove-hardcoded-xwayland-path.patch22
-rw-r--r--gnu/packages/patches/gdm-wayland-session-wrapper-from-env.patch35
-rw-r--r--gnu/packages/patches/geary-CVE-2020-24661.patch133
-rw-r--r--gnu/packages/patches/geeqie-clutter.patch35
-rw-r--r--gnu/packages/patches/genimage-mke2fs-test.patch40
-rw-r--r--gnu/packages/patches/genimage-signedness.patch24
-rw-r--r--gnu/packages/patches/ghc-diff-swap-cover-args.patch20
-rw-r--r--gnu/packages/patches/ghc-haddock-api-fix-haddock.patch54
-rw-r--r--gnu/packages/patches/ghc-hpack-fix-tests.patch193
-rw-r--r--gnu/packages/patches/ghc-language-haskell-extract-ghc-8.10.patch27
-rw-r--r--gnu/packages/patches/ghc-microlens-aeson-fix-tests.patch27
-rw-r--r--gnu/packages/patches/ghc-pandoc-fix-html-tests.patch92
-rw-r--r--gnu/packages/patches/ghc-pandoc-fix-latex-test.patch31
-rw-r--r--gnu/packages/patches/ghostscript-CVE-2020-15900.patch36
-rw-r--r--gnu/packages/patches/ghostscript-freetype-compat.patch35
-rw-r--r--gnu/packages/patches/ghostscript-no-header-creationdate.patch22
-rw-r--r--gnu/packages/patches/glade-gls-set-script-name.patch32
-rw-r--r--gnu/packages/patches/glade-test-widget-null-icon.patch30
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27218.patch132
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-01.patch176
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-02.patch264
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-03.patch136
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-04.patch308
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-05.patch47
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-06.patch94
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-07.patch118
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-08.patch94
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-09.patch98
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-10.patch52
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-11.patch57
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-12.patch30
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-13.patch32
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-14.patch32
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-15.patch95
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-16.patch43
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-17.patch37
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-18.patch232
-rw-r--r--gnu/packages/patches/glib-CVE-2021-28153.patch283
-rw-r--r--gnu/packages/patches/glib-networking-32-bit-time.patch61
-rw-r--r--gnu/packages/patches/glib-networking-gnutls-binding.patch21
-rw-r--r--gnu/packages/patches/glib-skip-failing-test.patch27
-rw-r--r--gnu/packages/patches/glib-tests-timer.patch15
-rw-r--r--gnu/packages/patches/glibc-2.27-git-fixes.patch702
-rw-r--r--gnu/packages/patches/glibc-2.27-supported-locales.patch33
-rw-r--r--gnu/packages/patches/glibc-2.28-git-fixes.patch248
-rw-r--r--gnu/packages/patches/glibc-2.28-supported-locales.patch33
-rw-r--r--gnu/packages/patches/glibc-2.31-hurd-clock_gettime_monotonic.patch84
-rw-r--r--gnu/packages/patches/glibc-bootstrap-system.patch37
-rw-r--r--gnu/packages/patches/glibc-cross-objcopy.patch159
-rw-r--r--gnu/packages/patches/glibc-cross-objdump.patch159
-rw-r--r--gnu/packages/patches/glibc-dl-cache.patch140
-rw-r--r--gnu/packages/patches/glibc-hurd-clock_gettime_monotonic.patch19
-rw-r--r--gnu/packages/patches/glibc-skip-c++.patch31
-rw-r--r--gnu/packages/patches/glibc-static-nss.patch1244
-rw-r--r--gnu/packages/patches/gnome-boxes-add-guix-logo.patch32
-rw-r--r--gnu/packages/patches/gnome-builder-update-libportal.patch93
-rw-r--r--gnu/packages/patches/gnome-control-center-libexecdir.patch58
-rw-r--r--gnu/packages/patches/gnome-online-miners-tracker-3.patch1505
-rw-r--r--gnu/packages/patches/gnome-screenshot-meson-0.60.patch39
-rw-r--r--gnu/packages/patches/gnome-session-support-elogind.patch73
-rw-r--r--gnu/packages/patches/gnome-shell-CVE-2020-17489.patch46
-rw-r--r--gnu/packages/patches/gnome-shell-disable-test.patch25
-rw-r--r--gnu/packages/patches/gnome-shell-theme.patch51
-rw-r--r--gnu/packages/patches/gnome-todo-delete-esource-duplicate.patch10
-rw-r--r--gnu/packages/patches/gnome-todo-libportal.patch54
-rw-r--r--gnu/packages/patches/gnupg-1-build-with-gcc10.patch64
-rw-r--r--gnu/packages/patches/gnutls-CVE-2021-20231.patch62
-rw-r--r--gnu/packages/patches/gnutls-CVE-2021-20232.patch60
-rw-r--r--gnu/packages/patches/gnutls-guile-eintr-eagain.patch56
-rw-r--r--gnu/packages/patches/go-github-com-golang-snappy-32bit-test.patch53
-rw-r--r--gnu/packages/patches/gpaste-fix-paths.patch24
-rw-r--r--gnu/packages/patches/graphviz-CVE-2020-18032.patch49
-rw-r--r--gnu/packages/patches/grfcodec-gcc-compat.patch31
-rw-r--r--gnu/packages/patches/gtk-doc-respect-xml-catalog.patch16
-rw-r--r--gnu/packages/patches/gtk-introspection-test.patch22
-rw-r--r--gnu/packages/patches/gtk2-fix-builder-test.patch94
-rw-r--r--gnu/packages/patches/gtk4-respect-GUIX_GTK4_PATH.patch51
-rw-r--r--gnu/packages/patches/guile-email-fix-tests.patch35
-rw-r--r--gnu/packages/patches/guile-git-adjust-for-libgit2-1.2.0.patch78
-rw-r--r--gnu/packages/patches/guile-ssh-fix-test-suite.patch217
-rw-r--r--gnu/packages/patches/guile-ssh-read-error.patch18
-rw-r--r--gnu/packages/patches/gvfs-add-support-for-libplist-2.2.patch34
-rw-r--r--gnu/packages/patches/hedgewars-network-bsd.patch150
-rw-r--r--gnu/packages/patches/helm-fix-gcc-9-build.patch140
-rw-r--r--gnu/packages/patches/hexchat-add-libera-chat.patch76
-rw-r--r--gnu/packages/patches/htslib-for-stringtie.patch26
-rw-r--r--gnu/packages/patches/hueplusplus-mbedtls.patch20
-rw-r--r--gnu/packages/patches/i3status-rust-enable-unstable-features.patch20
-rw-r--r--gnu/packages/patches/i7z-gcc-10.patch23
-rw-r--r--gnu/packages/patches/icecat-makeicecat.patch133
-rw-r--r--gnu/packages/patches/icedtea-6-extend-hotspot-aarch64-support.patch1831
-rw-r--r--gnu/packages/patches/icu4c-CVE-2020-10531.patch127
-rw-r--r--gnu/packages/patches/idris-build-with-haskeline-0.8.patch85
-rw-r--r--gnu/packages/patches/idris-build-with-megaparsec-9.patch27
-rw-r--r--gnu/packages/patches/inetutils-hurd.patch583
-rw-r--r--gnu/packages/patches/inkscape-1.1-fix-build-witch-gcc7.5.patch24
-rw-r--r--gnu/packages/patches/jacal-fix-texinfo.patch92
-rw-r--r--gnu/packages/patches/jami-fix-crash-on-quit.patch34
-rw-r--r--gnu/packages/patches/jsoncpp-fix-inverted-case.patch22
-rw-r--r--gnu/packages/patches/jsoncpp-pkg-config-version.patch24
-rw-r--r--gnu/packages/patches/julia-allow-parallel-build.patch32
-rw-r--r--gnu/packages/patches/lcms-CVE-2018-16435.patch171
-rw-r--r--gnu/packages/patches/ldc-bootstrap-disable-tests.patch72
-rw-r--r--gnu/packages/patches/ldc-disable-phobos-tests.patch22
-rw-r--r--gnu/packages/patches/libblockdev-glib-compat.patch61
-rw-r--r--gnu/packages/patches/libcacard-unknown-variable.patch50
-rw-r--r--gnu/packages/patches/libmicrohttpd-0.9.73-test-ssl3.patch35
-rw-r--r--gnu/packages/patches/librime-fix-build-with-gcc10.patch41
-rw-r--r--gnu/packages/patches/libsequoia-fix-ffi-Makefile.patch32
-rw-r--r--gnu/packages/patches/libsequoia-remove-store.patch432
-rw-r--r--gnu/packages/patches/libsigrokdecode-python3.9-fix.patch19
-rw-r--r--gnu/packages/patches/libtirpc-hurd-client.patch50
-rw-r--r--gnu/packages/patches/libtool-skip-tests2.patch8
-rw-r--r--gnu/packages/patches/libunwind-julia-fix-GCC10-fno-common.patch40
-rw-r--r--gnu/packages/patches/libxml2-parent-pointers.patch228
-rw-r--r--gnu/packages/patches/libxml2-terminating-newline.patch33
-rw-r--r--gnu/packages/patches/libxml2-xpath-recursion-limit.patch20
-rw-r--r--gnu/packages/patches/libxt-guix-search-paths.patch13
-rw-r--r--gnu/packages/patches/linuxdcpp-openssl-1.1.patch26
-rw-r--r--gnu/packages/patches/llvm-3.6-fix-build-with-gcc-10.patch13
-rw-r--r--gnu/packages/patches/lua-5.4-liblua-so.patch33
-rw-r--r--gnu/packages/patches/lua-5.4-pkgconfig.patch110
-rw-r--r--gnu/packages/patches/mariadb-CVE-2021-27928.patch642
-rw-r--r--gnu/packages/patches/mathjax-disable-webpack.patch23
-rw-r--r--gnu/packages/patches/mathjax-no-a11y.patch286
-rw-r--r--gnu/packages/patches/mesa-opencl-all-targets.patch25
-rw-r--r--gnu/packages/patches/mesa-skip-tests.patch48
-rw-r--r--gnu/packages/patches/meson-allow-dirs-outside-of-prefix.patch20
-rw-r--r--gnu/packages/patches/meson-for-build-rpath.patch24
-rw-r--r--gnu/packages/patches/metabat-fix-compilation.patch39
-rw-r--r--gnu/packages/patches/mit-krb5-hurd.patch15
-rw-r--r--gnu/packages/patches/mit-krb5-qualify-short-hostnames.patch29
-rw-r--r--gnu/packages/patches/mixxx-link-qtscriptbytearray-qtscript.patch25
-rw-r--r--gnu/packages/patches/mixxx-system-googletest-benchmark.patch43
-rw-r--r--gnu/packages/patches/monero-use-system-miniupnpc.patch12
-rw-r--r--gnu/packages/patches/mpg321-gcc-10.patch83
-rw-r--r--gnu/packages/patches/mupdf-CVE-2021-3407.patch51
-rw-r--r--gnu/packages/patches/mupdf-fix-linkage.patch27
-rw-r--r--gnu/packages/patches/nautilus-add-libportal-gtk3.patch61
-rw-r--r--gnu/packages/patches/network-manager-meson.patch21
-rw-r--r--gnu/packages/patches/network-manager-plugin-path.patch69
-rw-r--r--gnu/packages/patches/ngless-unliftio.patch66
-rw-r--r--gnu/packages/patches/nix-dont-build-html-doc.diff26
-rw-r--r--gnu/packages/patches/nss-getcwd-nonnull.patch30
-rw-r--r--gnu/packages/patches/ocaml-4.09-multiple-definitions.patch41
-rw-r--r--gnu/packages/patches/ocaml-cairo2-caml_ba_array-fix.patch68
-rw-r--r--gnu/packages/patches/ocaml-multiple-definitions.patch43
-rw-r--r--gnu/packages/patches/ocaml-ppx-variants-ppxlib-api-change.patch42
-rw-r--r--gnu/packages/patches/ocaml-qcheck-fix-test-whitespace.patch24
-rw-r--r--gnu/packages/patches/opencv-fix-build-of-grfmt_jpeg2000.cpp.patch39
-rw-r--r--gnu/packages/patches/opencv-rgbd-aarch64-test-fix.patch40
-rw-r--r--gnu/packages/patches/openrgb-unbundle-hueplusplus.patch58
-rw-r--r--gnu/packages/patches/p11-kit-hurd.patch46
-rw-r--r--gnu/packages/patches/password-store-tree-compat.patch29
-rw-r--r--gnu/packages/patches/passwordsafe-meson-remove-extra-argument.patch20
-rw-r--r--gnu/packages/patches/perl-cross.patch60
-rw-r--r--gnu/packages/patches/perl-deterministic-ordering.patch29
-rw-r--r--gnu/packages/patches/perl-io-socket-ssl-openssl-1.0.2f-fix.patch33
-rw-r--r--gnu/packages/patches/perl-no-sys-dirs.patch99
-rw-r--r--gnu/packages/patches/php-bug-74093-test.patch48
-rw-r--r--gnu/packages/patches/php-openssl_x509_checkpurpose_basic.patch108
-rw-r--r--gnu/packages/patches/pigx-bsseq-no-citeproc.patch33
-rw-r--r--gnu/packages/patches/pigx-chipseq-no-citeproc.patch33
-rw-r--r--gnu/packages/patches/pigx-rnaseq-no-citeproc.patch33
-rw-r--r--gnu/packages/patches/pigx-sars-cov2-ww-no-citeproc.patch33
-rw-r--r--gnu/packages/patches/pigx-scrnaseq-no-citeproc.patch33
-rw-r--r--gnu/packages/patches/pipewire-0.2.7-fno-common.patch51
-rw-r--r--gnu/packages/patches/pitivi-fix-build-with-meson-0.60.patch46
-rw-r--r--gnu/packages/patches/pjproject-correct-the-cflags-field.patch121
-rw-r--r--gnu/packages/patches/pjproject-fix-pkg-config-ldflags.patch79
-rw-r--r--gnu/packages/patches/pjproject-install-libpjsua2.patch19
-rw-r--r--gnu/packages/patches/polkit-configure-elogind.patch15
-rw-r--r--gnu/packages/patches/polkit-use-duktape.patch5030
-rw-r--r--gnu/packages/patches/ppsspp-disable-upgrade-and-gold.patch234
-rw-r--r--gnu/packages/patches/pulseview-glib-2.68.patch54
-rw-r--r--gnu/packages/patches/purescript-relax-dependencies.patch40
-rw-r--r--gnu/packages/patches/python-2.7-no-static-lib.patch70
-rw-r--r--gnu/packages/patches/python-3-fix-tests.patch194
-rw-r--r--gnu/packages/patches/python-3-hurd-configure.patch27
-rw-r--r--gnu/packages/patches/python-3-no-static-lib.patch75
-rw-r--r--gnu/packages/patches/python-3.8-CVE-2021-3177.patch194
-rw-r--r--gnu/packages/patches/python-3.8-fix-tests.patch42
-rw-r--r--gnu/packages/patches/python-3.9-fix-tests.patch370
-rw-r--r--gnu/packages/patches/python-babel-fix-parse-future-test.patch68
-rw-r--r--gnu/packages/patches/python-chai-drop-python2.patch32
-rw-r--r--gnu/packages/patches/python-docopt-pytest6-compat.patch29
-rw-r--r--gnu/packages/patches/python-fixtures-remove-monkeypatch-test.patch59
-rw-r--r--gnu/packages/patches/python-magic-python-bytecode.patch19
-rw-r--r--gnu/packages/patches/python-pdoc3-tests.patch42
-rw-r--r--gnu/packages/patches/python-peachpy-determinism.patch25
-rw-r--r--gnu/packages/patches/python-piexif-fix-tests-with-pillow-7.2.patch44
-rw-r--r--gnu/packages/patches/python-poppler-qt5-fix-build.patch116
-rw-r--r--gnu/packages/patches/python-pydot-regression-test.patch79
-rw-r--r--gnu/packages/patches/python-pyflakes-test-location.patch42
-rw-r--r--gnu/packages/patches/python-pytorch-system-libraries.patch164
-rw-r--r--gnu/packages/patches/python-random2-getrandbits-test.patch23
-rw-r--r--gnu/packages/patches/python-testtools.patch57
-rw-r--r--gnu/packages/patches/python-typing-inspect-fix.patch38
-rw-r--r--gnu/packages/patches/python-versioneer-guix-support.patch35
-rw-r--r--gnu/packages/patches/python-werkzeug-tests.patch58
-rw-r--r--gnu/packages/patches/qemu-CVE-2021-20203.patch172
-rw-r--r--gnu/packages/patches/qemu-fix-agent-paths.patch66
-rw-r--r--gnu/packages/patches/qemu-meson-compat.patch27
-rw-r--r--gnu/packages/patches/qemu-sphinx-compat.patch18
-rw-r--r--gnu/packages/patches/qtwebkit-fix-building-with-bison-3.7.patch54
-rw-r--r--gnu/packages/patches/qtwebkit-fix-building-with-glib-2.68.patch21
-rw-r--r--gnu/packages/patches/qtwebkit-fix-building-with-icu-68.patch152
-rw-r--r--gnu/packages/patches/qtwebkit-fix-building-with-python-3.9.patch35
-rw-r--r--gnu/packages/patches/quassel-qt-514-compat.patch130
-rw-r--r--gnu/packages/patches/r-httpuv-1.5.5-unvendor-libuv.patch34
-rw-r--r--gnu/packages/patches/racket-minimal-backport-1629887.patch28
-rw-r--r--gnu/packages/patches/ragel-char-signedness.patch42
-rw-r--r--gnu/packages/patches/range-v3-build-with-gcc10.patch122
-rw-r--r--gnu/packages/patches/retroarch-LIBRETRO_DIRECTORY.patch32
-rw-r--r--gnu/packages/patches/rust-1.19-mrustc.patch28
-rw-r--r--gnu/packages/patches/rust-1.25-accept-more-detailed-gdb-lines.patch111
-rw-r--r--gnu/packages/patches/rust-1.30-gdb-llvm.patch89
-rw-r--r--gnu/packages/patches/rust-1.45-linker-locale.patch14
-rw-r--r--gnu/packages/patches/rust-1.48-linker-locale.patch14
-rw-r--r--gnu/packages/patches/rust-adblock-ignore-live-tests.patch69
-rw-r--r--gnu/packages/patches/rust-bootstrap-stage0-test.patch55
-rw-r--r--gnu/packages/patches/rust-openssl-sys-no-vendor.patch2
-rw-r--r--gnu/packages/patches/rust-reproducible-builds.patch25
-rw-r--r--gnu/packages/patches/rust-shell2batch-lint-fix.patch25
-rw-r--r--gnu/packages/patches/rust-wl-clipboard-rs-newer-wl.patch26
-rw-r--r--gnu/packages/patches/rustc-1.39.0-src.patch99
-rw-r--r--gnu/packages/patches/sbcl-aserve-add-HTML-5-elements.patch63
-rw-r--r--gnu/packages/patches/sbcl-aserve-fix-rfe12668.patch43
-rw-r--r--gnu/packages/patches/scalapack-blacs-mpi-deprecations.patch170
-rw-r--r--gnu/packages/patches/scalapack-gcc-10-compilation.patch5684
-rw-r--r--gnu/packages/patches/sendgmail-accept-ignored-gsuite-flag.patch39
-rw-r--r--gnu/packages/patches/sendgmail-remove-domain-restriction.patch34
-rw-r--r--gnu/packages/patches/shadow-hurd-pctrl.patch16
-rw-r--r--gnu/packages/patches/spice-vdagent-glib-2.68.patch112
-rw-r--r--gnu/packages/patches/sssd-collision-with-external-nss-symbol.patch71
-rw-r--r--gnu/packages/patches/sssd-fix-samba-4.15.3.patch523
-rw-r--r--gnu/packages/patches/strace-readlink-tests.patch46
-rw-r--r--gnu/packages/patches/supertux-unbundle-squirrel.patch17
-rw-r--r--gnu/packages/patches/syslinux-gcc10.patch87
-rw-r--r--gnu/packages/patches/syslinux-strip-gnu-property.patch31
-rw-r--r--gnu/packages/patches/tcl-fix-cross-compilation.patch39
-rw-r--r--gnu/packages/patches/tcsh-fix-autotest.patch11
-rw-r--r--gnu/packages/patches/telepathy-glib-channel-memory-leak.patch19
-rw-r--r--gnu/packages/patches/tensorflow-c-api-fix.patch312
-rw-r--r--gnu/packages/patches/texlive-bin-poppler-0.83.patch52
-rw-r--r--gnu/packages/patches/texlive-bin-poppler-0.86.patch17
-rw-r--r--gnu/packages/patches/tootle-glib-object-naming.patch66
-rw-r--r--gnu/packages/patches/tootle-reason-phrase.patch48
-rw-r--r--gnu/packages/patches/tor-sandbox-i686.patch36
-rw-r--r--gnu/packages/patches/transmission-remote-gtk-fix-appstream.patch61
-rw-r--r--gnu/packages/patches/tremc-fix-decodestring.patch25
-rw-r--r--gnu/packages/patches/trytond-add-egg-modules-to-path.patch22
-rw-r--r--gnu/packages/patches/trytond-add-guix_trytond_path.patch26
-rw-r--r--gnu/packages/patches/u-boot-allow-disabling-openssl.patch164
-rw-r--r--gnu/packages/patches/u-boot-rk3399-enable-emmc-phy.patch26
-rw-r--r--gnu/packages/patches/udiskie-no-appindicator.patch155
-rw-r--r--gnu/packages/patches/ungoogled-chromium-RUNPATH.patch22
-rw-r--r--gnu/packages/patches/ungoogled-chromium-accelerated-video-decode.patch18
-rw-r--r--gnu/packages/patches/ungoogled-chromium-system-ffmpeg.patch18
-rw-r--r--gnu/packages/patches/vigra-python-compat.patch18
-rw-r--r--gnu/packages/patches/widelands-add-missing-map-include.patch28
-rw-r--r--gnu/packages/patches/wpa-supplicant-CVE-2021-27803.patch50
-rw-r--r--gnu/packages/patches/wpa-supplicant-CVE-2021-30004.patch115
-rw-r--r--gnu/packages/patches/xdg-desktop-portal-wlr-harcoded-length.patch28
-rw-r--r--gnu/packages/patches/xf86-video-mach64-bool-to-boolean.patch79
-rw-r--r--gnu/packages/patches/xf86-video-nouveau-fixup-ABI.patch64
-rw-r--r--gnu/packages/patches/xf86-video-qxl-fix-build.patch101
-rw-r--r--gnu/packages/patches/xgboost-use-system-dmlc-core.patch53
-rw-r--r--gnu/packages/patches/xmonad-next-dynamic-linking.patch16
-rw-r--r--gnu/packages/patches/xpra-4.2-install_libs.patch29
-rw-r--r--gnu/packages/patches/xygrib-fix-finding-data.patch131
-rw-r--r--gnu/packages/patches/yggdrasil-extra-config.patch78
-rw-r--r--gnu/packages/patches/zig-disable-libc-note-test.patch31
-rw-r--r--gnu/packages/patches/zig-use-system-paths.patch148
-rw-r--r--gnu/packages/patches/zstd-CVE-2021-24031_CVE-2021-24032.patch68
-rw-r--r--gnu/packages/patches/zziplib-CVE-2018-16548.patch49
-rw-r--r--gnu/packages/patchutils.scm53
-rw-r--r--gnu/packages/patool.scm38
-rw-r--r--gnu/packages/pciutils.scm10
-rw-r--r--gnu/packages/pcre.scm58
-rw-r--r--gnu/packages/pdf.scm291
-rw-r--r--gnu/packages/pem.scm2
-rw-r--r--gnu/packages/pep.scm31
-rw-r--r--gnu/packages/perl-check.scm242
-rw-r--r--gnu/packages/perl-compression.scm11
-rw-r--r--gnu/packages/perl-maths.scm10
-rw-r--r--gnu/packages/perl-web.scm11
-rw-r--r--gnu/packages/perl.scm1863
-rw-r--r--gnu/packages/perl6.scm46
-rw-r--r--gnu/packages/phabricator.scm16
-rw-r--r--gnu/packages/photo.scm192
-rw-r--r--gnu/packages/php.scm32
-rw-r--r--gnu/packages/piet.scm13
-rw-r--r--gnu/packages/pkg-config.scm37
-rw-r--r--gnu/packages/plan9.scm3
-rw-r--r--gnu/packages/plotutils.scm235
-rw-r--r--gnu/packages/poedit.scm21
-rw-r--r--gnu/packages/polkit.scm98
-rw-r--r--gnu/packages/popt.scm2
-rw-r--r--gnu/packages/presentation.scm21
-rw-r--r--gnu/packages/pretty-print.scm43
-rw-r--r--gnu/packages/profiling.scm157
-rw-r--r--gnu/packages/protobuf.scm72
-rw-r--r--gnu/packages/pth.scm22
-rw-r--r--gnu/packages/pulseaudio.scm156
-rw-r--r--gnu/packages/pumpio.scm10
-rw-r--r--gnu/packages/pure.scm4
-rw-r--r--gnu/packages/purescript.scm216
-rw-r--r--gnu/packages/pv.scm23
-rw-r--r--gnu/packages/python-build.scm272
-rw-r--r--gnu/packages/python-check.scm798
-rw-r--r--gnu/packages/python-compression.scm178
-rw-r--r--gnu/packages/python-crypto.scm411
-rw-r--r--gnu/packages/python-science.scm437
-rw-r--r--gnu/packages/python-web.scm2672
-rw-r--r--gnu/packages/python-xyz.scm10257
-rw-r--r--gnu/packages/python.scm645
-rw-r--r--gnu/packages/qt.scm377
-rw-r--r--gnu/packages/racket.scm21
-rw-r--r--gnu/packages/radio.scm803
-rw-r--r--gnu/packages/ragel.scm29
-rw-r--r--gnu/packages/rails.scm179
-rw-r--r--gnu/packages/ratpoison.scm3
-rw-r--r--gnu/packages/rcm.scm3
-rw-r--r--gnu/packages/rdesktop.scm25
-rw-r--r--gnu/packages/rdf.scm157
-rw-r--r--gnu/packages/re2c.scm2
-rw-r--r--gnu/packages/readline.scm27
-rw-r--r--gnu/packages/rednotebook.scm6
-rw-r--r--gnu/packages/robotics.scm35
-rw-r--r--gnu/packages/rocm.scm23
-rw-r--r--gnu/packages/rpc.scm35
-rw-r--r--gnu/packages/rpm.scm50
-rw-r--r--gnu/packages/rrdtool.scm22
-rw-r--r--gnu/packages/rsync.scm52
-rw-r--r--gnu/packages/ruby.scm2063
-rw-r--r--gnu/packages/rush.scm5
-rw-r--r--gnu/packages/rust-apps.scm790
-rw-r--r--gnu/packages/rust.scm1881
-rw-r--r--gnu/packages/sagemath.scm46
-rw-r--r--gnu/packages/samba.scm244
-rw-r--r--gnu/packages/sawfish.scm32
-rw-r--r--gnu/packages/scanner.scm112
-rw-r--r--gnu/packages/scheme.scm151
-rw-r--r--gnu/packages/screen.scm8
-rw-r--r--gnu/packages/scribus.scm64
-rw-r--r--gnu/packages/scsi.scm7
-rw-r--r--gnu/packages/sdl.scm146
-rw-r--r--gnu/packages/search.scm260
-rw-r--r--gnu/packages/security-token.scm385
-rw-r--r--gnu/packages/selinux.scm87
-rw-r--r--gnu/packages/sequoia.scm635
-rw-r--r--gnu/packages/serialization.scm136
-rw-r--r--gnu/packages/serveez.scm13
-rw-r--r--gnu/packages/shells.scm1060
-rw-r--r--gnu/packages/shellutils.scm368
-rw-r--r--gnu/packages/simh.scm2
-rw-r--r--gnu/packages/simulation.scm82
-rw-r--r--gnu/packages/skarnet.scm66
-rw-r--r--gnu/packages/skribilo.scm24
-rw-r--r--gnu/packages/slang.scm22
-rw-r--r--gnu/packages/smalltalk.scm34
-rw-r--r--gnu/packages/sml.scm267
-rw-r--r--gnu/packages/solidity.scm90
-rw-r--r--gnu/packages/speech.scm82
-rw-r--r--gnu/packages/sphinx.scm432
-rw-r--r--gnu/packages/spice.scm145
-rw-r--r--gnu/packages/spreadsheet.scm119
-rw-r--r--gnu/packages/sqlite.scm80
-rw-r--r--gnu/packages/ssh.scm211
-rw-r--r--gnu/packages/sssd.scm145
-rw-r--r--gnu/packages/stalonetray.scm2
-rw-r--r--gnu/packages/statistics.scm1832
-rw-r--r--gnu/packages/stb.scm2
-rw-r--r--gnu/packages/stenography.scm20
-rw-r--r--gnu/packages/storage.scm103
-rw-r--r--gnu/packages/suckless.scm258
-rw-r--r--gnu/packages/swig.scm28
-rw-r--r--gnu/packages/sync.scm123
-rw-r--r--gnu/packages/syncthing.scm128
-rw-r--r--gnu/packages/syndication.scm245
-rw-r--r--gnu/packages/synergy.scm2
-rw-r--r--gnu/packages/task-management.scm93
-rw-r--r--gnu/packages/task-runners.scm2
-rw-r--r--gnu/packages/tbb.scm47
-rw-r--r--gnu/packages/tcl.scm154
-rw-r--r--gnu/packages/telegram.scm150
-rw-r--r--gnu/packages/telephony.scm191
-rw-r--r--gnu/packages/terminals.scm290
-rw-r--r--gnu/packages/tex.scm4079
-rw-r--r--gnu/packages/texinfo.scm59
-rw-r--r--gnu/packages/text-editors.scm222
-rw-r--r--gnu/packages/textutils.scm160
-rw-r--r--gnu/packages/time.scm142
-rw-r--r--gnu/packages/tls.scm700
-rw-r--r--gnu/packages/tmux.scm20
-rw-r--r--gnu/packages/tor.scm182
-rw-r--r--gnu/packages/toys.scm33
-rw-r--r--gnu/packages/tryton.scm1599
-rw-r--r--gnu/packages/tv.scm26
-rw-r--r--gnu/packages/uglifyjs.scm3
-rw-r--r--gnu/packages/uml.scm3
-rw-r--r--gnu/packages/unicode.scm64
-rw-r--r--gnu/packages/upnp.scm8
-rw-r--r--gnu/packages/usb-modeswitch.scm9
-rw-r--r--gnu/packages/uucp.scm23
-rw-r--r--gnu/packages/valgrind.scm6
-rw-r--r--gnu/packages/version-control.scm638
-rw-r--r--gnu/packages/video.scm1456
-rw-r--r--gnu/packages/vim.scm427
-rw-r--r--gnu/packages/virtualization.scm981
-rw-r--r--gnu/packages/visidata.scm64
-rw-r--r--gnu/packages/vlang.scm42
-rw-r--r--gnu/packages/vnc.scm212
-rw-r--r--gnu/packages/vpn.scm245
-rw-r--r--gnu/packages/vulkan.scm64
-rw-r--r--gnu/packages/w3m.scm14
-rw-r--r--gnu/packages/wdiff.scm6
-rw-r--r--gnu/packages/web-browsers.scm290
-rw-r--r--gnu/packages/web.scm1898
-rw-r--r--gnu/packages/webkit.scm79
-rw-r--r--gnu/packages/wget.scm27
-rw-r--r--gnu/packages/wicd.scm5
-rw-r--r--gnu/packages/wine.scm127
-rw-r--r--gnu/packages/wireservice.scm30
-rw-r--r--gnu/packages/wm.scm917
-rw-r--r--gnu/packages/wordnet.scm3
-rw-r--r--gnu/packages/wv.scm9
-rw-r--r--gnu/packages/wxwidgets.scm67
-rw-r--r--gnu/packages/xdisorg.scm794
-rw-r--r--gnu/packages/xfce.scm587
-rw-r--r--gnu/packages/xfig.scm11
-rw-r--r--gnu/packages/xiph.scm138
-rw-r--r--gnu/packages/xml.scm401
-rw-r--r--gnu/packages/xnee.scm18
-rw-r--r--gnu/packages/xorg.scm1907
-rw-r--r--gnu/packages/zig.scm105
-rw-r--r--gnu/packages/zile.scm4
-rw-r--r--gnu/packages/zwave.scm73
-rw-r--r--gnu/platform.scm38
-rw-r--r--gnu/platforms/arm.scm36
-rw-r--r--gnu/platforms/hurd.scm28
-rw-r--r--gnu/services.scm8
-rw-r--r--gnu/services/admin.scm2
-rw-r--r--gnu/services/auditd.scm2
-rw-r--r--gnu/services/authentication.scm4
-rw-r--r--gnu/services/avahi.scm2
-rw-r--r--gnu/services/base.scm585
-rw-r--r--gnu/services/cgit.scm4
-rw-r--r--gnu/services/ci.scm4
-rw-r--r--gnu/services/configuration.scm96
-rw-r--r--gnu/services/cuirass.scm6
-rw-r--r--gnu/services/cups.scm11
-rw-r--r--gnu/services/databases.scm10
-rw-r--r--gnu/services/dbus.scm23
-rw-r--r--gnu/services/desktop.scm48
-rw-r--r--gnu/services/dns.scm12
-rw-r--r--gnu/services/docker.scm14
-rw-r--r--gnu/services/file-sharing.scm2
-rw-r--r--gnu/services/ganeti.scm24
-rw-r--r--gnu/services/getmail.scm2
-rw-r--r--gnu/services/guix.scm2
-rw-r--r--gnu/services/hurd.scm4
-rw-r--r--gnu/services/lirc.scm2
-rw-r--r--gnu/services/mail.scm6
-rw-r--r--gnu/services/mcron.scm2
-rw-r--r--gnu/services/messaging.scm4
-rw-r--r--gnu/services/monitoring.scm6
-rw-r--r--gnu/services/networking.scm12
-rw-r--r--gnu/services/nfs.scm4
-rw-r--r--gnu/services/nix.scm2
-rw-r--r--gnu/services/pam-mount.scm2
-rw-r--r--gnu/services/pm.scm4
-rw-r--r--gnu/services/rsync.scm173
-rw-r--r--gnu/services/science.scm2
-rw-r--r--gnu/services/shepherd.scm2
-rw-r--r--gnu/services/sound.scm2
-rw-r--r--gnu/services/ssh.scm15
-rw-r--r--gnu/services/syncthing.scm2
-rw-r--r--gnu/services/telephony.scm14
-rw-r--r--gnu/services/version-control.scm4
-rw-r--r--gnu/services/virtualization.scm99
-rw-r--r--gnu/services/vpn.scm19
-rw-r--r--gnu/services/web.scm24
-rw-r--r--gnu/services/xorg.scm58
-rw-r--r--gnu/system.scm82
-rw-r--r--gnu/system/examples/desktop.tmpl43
-rw-r--r--gnu/system/examples/vm-image.tmpl6
-rw-r--r--gnu/system/file-systems.scm71
-rw-r--r--gnu/system/hurd.scm16
-rw-r--r--gnu/system/image.scm233
-rw-r--r--gnu/system/images/hurd.scm9
-rw-r--r--gnu/system/images/novena.scm6
-rw-r--r--gnu/system/images/pine64.scm6
-rw-r--r--gnu/system/images/pinebook-pro.scm6
-rw-r--r--gnu/system/images/rock64.scm8
-rw-r--r--gnu/system/install.scm5
-rw-r--r--gnu/system/linux-initrd.scm6
-rw-r--r--gnu/system/locale.scm1
-rw-r--r--gnu/system/mapped-devices.scm10
-rw-r--r--gnu/system/pam.scm4
-rw-r--r--gnu/system/shadow.scm8
-rw-r--r--gnu/system/vm.scm573
-rw-r--r--gnu/tests/audio.scm7
-rw-r--r--gnu/tests/base.scm45
-rw-r--r--gnu/tests/ci.scm9
-rw-r--r--gnu/tests/cups.scm7
-rw-r--r--gnu/tests/databases.scm24
-rw-r--r--gnu/tests/desktop.scm9
-rw-r--r--gnu/tests/dict.scm9
-rw-r--r--gnu/tests/docker.scm65
-rw-r--r--gnu/tests/file-sharing.scm7
-rw-r--r--gnu/tests/ganeti.scm39
-rw-r--r--gnu/tests/guix.scm14
-rw-r--r--gnu/tests/install.scm24
-rw-r--r--gnu/tests/ldap.scm7
-rw-r--r--gnu/tests/linux-modules.scm11
-rw-r--r--gnu/tests/mail.scm30
-rw-r--r--gnu/tests/messaging.scm23
-rw-r--r--gnu/tests/monitoring.scm15
-rw-r--r--gnu/tests/networking.scm179
-rw-r--r--gnu/tests/nfs.scm204
-rw-r--r--gnu/tests/package-management.scm8
-rw-r--r--gnu/tests/reconfigure.scm25
-rw-r--r--gnu/tests/rsync.scm47
-rw-r--r--gnu/tests/security-token.scm7
-rw-r--r--gnu/tests/singularity.scm9
-rw-r--r--gnu/tests/ssh.scm9
-rw-r--r--gnu/tests/telephony.scm11
-rw-r--r--gnu/tests/version-control.scm33
-rw-r--r--gnu/tests/virtualization.scm16
-rw-r--r--gnu/tests/web.scm43
1036 files changed, 154384 insertions, 109901 deletions
diff --git a/gnu/bootloader.scm b/gnu/bootloader.scm
index d1c72c0c85..9cf5457873 100644
--- a/gnu/bootloader.scm
+++ b/gnu/bootloader.scm
@@ -183,8 +183,13 @@ record."
 ;; The <bootloader-configuration> record contains bootloader independant
 ;; configuration used to fill bootloader configuration file.
 
-(define-syntax-rule (warn-target-field-deprecation value)
-  (%warn-target-field-deprecation value (current-source-location)))
+(define-with-syntax-properties (warn-target-field-deprecation
+                                (value properties))
+  (when value
+    (warning (source-properties->location properties)
+             (G_ "the 'target' field is deprecated, please use 'targets' \
+instead~%")))
+  value)
 
 (define-record-type* <bootloader-configuration>
   bootloader-configuration make-bootloader-configuration
@@ -213,13 +218,6 @@ record."
   (serial-speed       bootloader-configuration-serial-speed ;integer | #f
                       (default #f)))
 
-(define (%warn-target-field-deprecation value location)
-  (when value
-    (warning (source-properties->location location)
-             (G_ "the 'target' field is deprecated, please use 'targets' \
-instead~%")))
-  value)
-
 (define-deprecated (bootloader-configuration-target config)
   bootloader-configuration-targets
   (%bootloader-configuration-target config))
diff --git a/gnu/bootloader/grub.scm b/gnu/bootloader/grub.scm
index d8e888ff40..120cd55012 100644
--- a/gnu/bootloader/grub.scm
+++ b/gnu/bootloader/grub.scm
@@ -264,36 +264,38 @@ is a string that can be inserted in grub.cfg."
                          at_keyboard usb_keyboard))
 
          (io (string-append
-               "terminal_output "
-               (symbols->string
-                 (map
-                   (lambda (output)
-                     (if (memq output valid-outputs) output #f)) outputs)) "\n"
-               (if (null? inputs)
-                 ""
-                 (string-append
-                   "terminal_input "
-                   (symbols->string
-                     (map
-                       (lambda (input)
-                         (if (memq input valid-inputs) input #f)) inputs)) "\n"))
-               ;; UNIT and SPEED are arguments to the same GRUB command
-               ;; ("serial"), so we process them together.
-               (if (or unit speed)
-                 (string-append
+              ;; UNIT and SPEED are arguments to the same GRUB command
+              ;; ("serial"), so we process them together.
+              (if (or unit speed)
+                  (string-append
                    "serial"
                    (if unit
-                     ;; COM ports 1 through 4
-                     (if (and (exact-integer? unit) (<= unit 3) (>= unit 0))
-                       (string-append " --unit=" (number->string unit))
-                       #f)
-                     "")
+                       ;; COM ports 1 through 4
+                       (if (and (exact-integer? unit) (<= unit 3) (>= unit 0))
+                           (string-append " --unit=" (number->string unit))
+                           #f)
+                       "")
                    (if speed
-                     (if (exact-integer? speed)
-                       (string-append " --speed=" (number->string speed))
-                       #f)
-                     ""))
-                 ""))))
+                       (if (exact-integer? speed)
+                           (string-append " --speed=" (number->string speed))
+                           #f)
+                       "")
+                   "\n")
+                  "")
+              (if (null? inputs)
+                  ""
+                  (string-append
+                   "terminal_input "
+                   (symbols->string
+                    (map
+                     (lambda (input)
+                       (if (memq input valid-inputs) input #f)) inputs))
+                   "\n"))
+              "terminal_output "
+              (symbols->string
+               (map
+                (lambda (output)
+                  (if (memq output valid-outputs) output #f)) outputs)))))
     (format #f "~a" io)))
 
 (define (grub-root-search device file)
@@ -415,8 +417,7 @@ menuentry ~s {
           ;; Other type of devices aren't implemented.
           #~()))
     (let ((devices (map crypto-device->cryptomount store-crypto-devices))
-          ;; XXX: Add luks2 when grub 2.06 is packaged.
-          (modules #~(format port "insmod luks~%")))
+          (modules #~(format port "insmod luks~%insmod luks2~%")))
       (if (null? devices)
           devices
           (cons modules devices))))
diff --git a/gnu/build/accounts.scm b/gnu/build/accounts.scm
index f60d68d9b3..1247fc640c 100644
--- a/gnu/build/accounts.scm
+++ b/gnu/build/accounts.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2019, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -490,7 +490,11 @@ new UIDs."
                                (uid id)
                                (directory directory)
                                (gid (if (number? group) group (group-id group)))
-                               (real-name (if previous
+
+                               ;; Users might change their name to something
+                               ;; other than what the sysadmin chose, with
+                               ;; 'chfn'.  Thus consider it "stateful".
+                               (real-name (if (and previous (not system?))
                                               (password-entry-real-name previous)
                                               real-name))
 
diff --git a/gnu/build/bootloader.scm b/gnu/build/bootloader.scm
index 3916930c89..9a89fe55cb 100644
--- a/gnu/build/bootloader.scm
+++ b/gnu/build/bootloader.scm
@@ -94,6 +94,7 @@ load the Grub bootloader located in the 'Guix_image' root partition."
         ;; (not eliminate it).
         (format port
                 "insmod part_msdos~@
+               insmod part_gpt~@
                search --set=root --label Guix_image~@
                configfile /boot/grub/grub.cfg~%")))
     (install-efi grub-efi grub-config esp)
diff --git a/gnu/build/chromium-extension.scm b/gnu/build/chromium-extension.scm
index d65df09f37..8ca5251957 100644
--- a/gnu/build/chromium-extension.scm
+++ b/gnu/build/chromium-extension.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2020 Marius Bakke <marius@gnu.org>
+;;; Copyright © 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -17,13 +17,8 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu build chromium-extension)
-  #:use-module (gcrypt base16)
-  #:use-module ((gcrypt hash) #:prefix hash:)
-  #:use-module (ice-9 iconv)
   #:use-module (guix gexp)
   #:use-module (guix packages)
-  #:use-module (gnu packages base)
-  #:use-module (gnu packages check)
   #:use-module (gnu packages chromium)
   #:use-module (gnu packages gnupg)
   #:use-module (gnu packages tls)
@@ -39,28 +34,30 @@
 
 (define (make-signing-key seed)
   "Return a derivation for a deterministic PKCS #8 private key using SEED."
+  (computed-file
+   (string-append seed "-signing-key.pem")
+   (with-extensions (list guile-gcrypt)
+     #~(begin
+         (use-modules (gcrypt base16) (gcrypt hash) (ice-9 iconv))
+         (let* ((sha256sum (bytevector->base16-string
+                            (sha256 (string->bytevector #$seed "UTF-8"))))
+                ;; certtool.c wants a 56 byte seed for a 2048 bit key.
+                (key-size 2048)
+                (normalized-seed (string-take sha256sum 56)))
 
-  (define sha256sum
-    (bytevector->base16-string (hash:sha256 (string->bytevector seed "UTF-8"))))
-
-  ;; certtool.c wants a 56 byte seed for a 2048 bit key.
-  (define size 2048)
-  (define normalized-seed (string-take sha256sum 56))
-
-  (computed-file (string-append seed "-signing-key.pem")
-                 #~(system* #$(file-append gnutls "/bin/certtool")
-                            "--generate-privkey"
-                            "--key-type=rsa"
-                            "--pkcs8"
-                            ;; Use the provable FIPS-PUB186-4 algorithm for
-                            ;; deterministic results.
-                            "--provable"
-                            "--password="
-                            "--no-text"
-                            (string-append "--bits=" #$(number->string size))
-                            (string-append "--seed=" #$normalized-seed)
-                            "--outfile" #$output)
-                 #:local-build? #t))
+           (system* #$(file-append gnutls "/bin/certtool")
+                    "--generate-privkey"
+                    "--key-type=rsa"
+                    "--pkcs8"
+                    ;; Use the provable FIPS-PUB186-4 algorithm for
+                    ;; deterministic results.
+                    "--provable"
+                    "--password="
+                    "--no-text"
+                    (string-append "--bits=" (number->string key-size))
+                    (string-append "--seed=" normalized-seed)
+                    "--outfile" #$output))))
+   #:local-build? #t))
 
 (define* (make-crx signing-key package #:optional (package-output "out"))
   "Create a signed \".crx\" file from the unpacked Chromium extension residing
@@ -68,9 +65,9 @@ in PACKAGE-OUTPUT of PACKAGE.  The extension will be signed with SIGNING-KEY."
   (define name (package-name package))
   (define version (package-version package))
 
-  (with-imported-modules '((guix build utils))
-    (computed-file
-     (string-append name "-" version ".crx")
+  (computed-file
+   (string-append name "-" version ".crx")
+   (with-imported-modules '((guix build utils))
      #~(begin
          ;; This is not great.  We pull Xorg and Chromium just to Zip and
          ;; sign an extension.  This should be implemented with something
@@ -78,27 +75,22 @@ in PACKAGE-OUTPUT of PACKAGE.  The extension will be signed with SIGNING-KEY."
          (use-modules (guix build utils))
          (let ((chromium #$(file-append ungoogled-chromium "/bin/chromium"))
                (xvfb #$(file-append xorg-server "/bin/Xvfb"))
-               (packdir "/tmp/extension"))
-           (mkdir-p (dirname packdir))
-           (copy-recursively (ungexp package package-output) packdir)
+               (packdir (string-append (getcwd) "/extension")))
+           (mkdir packdir)
+           (copy-recursively (ungexp package package-output) packdir
+                             ;; Ensure consistent file modification times.
+                             #:keep-mtime? #t)
            (system (string-append xvfb " :1 &"))
            (setenv "DISPLAY" ":1")
            (sleep 2)                    ;give Xorg some time to initialize...
-           ;; Chromium stores the current time in the .crx Zip archive.
-           ;; Use a fixed timestamp for deterministic behavior.
-           ;; FIXME (core-updates): faketime is missing an absolute reference
-           ;; to 'date', hence the need to set PATH.
-           (setenv "PATH" #$(file-append coreutils "/bin"))
-           (invoke #$(file-append libfaketime "/bin/faketime")
-                   "2000-01-01 00:00:00"
-                   chromium
-                   "--user-data-dir=/tmp/signing-profile"
+           (invoke chromium
+                   "--user-data-dir=chromium-profile"
                    (string-append "--pack-extension=" packdir)
                    (string-append "--pack-extension-key=" #$signing-key))
-           (copy-file (string-append packdir ".crx") #$output)))
-     #:local-build? #t)))
+           (copy-file (string-append packdir ".crx") #$output))))
+   #:local-build? #t))
 
-(define* (crx->chromium-json crx version)
+(define (crx->chromium-json crx version)
   "Return a derivation that creates a Chromium JSON settings file for the
 extension given as CRX.  VERSION is used to signify the CRX version, and
 must match the version listed in the extension manifest.json."
@@ -127,66 +119,47 @@ format."
                             "--outder")
                  #:local-build? #t))
 
-(define (chromium-json->profile-object json signing-key)
-  "Return a derivation that installs JSON to the directory searched by
-Chromium, using a file name (aka extension ID) derived from SIGNING-KEY."
-  (define der (signing-key->public-der signing-key))
-
+(define (file-sha256sum file)
   (with-extensions (list guile-gcrypt)
-    (with-imported-modules '((guix build utils))
-      (computed-file
-       "chromium-extension"
-       #~(begin
-           (use-modules (guix build utils)
-                        (gcrypt base16)
-                        (gcrypt hash))
-           (define (base16-string->chromium-base16 str)
-             ;; Translate STR, a hexadecimal string, to a Chromium-style
-             ;; representation using the letters a-p (where a=0, p=15).
-             (define s1 "0123456789abcdef")
-             (define s2 "abcdefghijklmnop")
-             (let loop ((chars (string->list str))
-                        (converted '()))
-               (if (null? chars)
-                   (list->string (reverse converted))
-                   (loop (cdr chars)
-                         (cons (string-ref s2 (string-index s1 (car chars)))
-                               converted)))))
-
-           (let* ((checksum (bytevector->base16-string (file-sha256 #$der)))
-                  (file-name (base16-string->chromium-base16
-                              (string-take checksum 32)))
-                  (extension-directory (string-append #$output
-                                                      "/share/chromium/extensions")))
-             (mkdir-p extension-directory)
-             (symlink #$json (string-append extension-directory "/"
-                                            file-name ".json"))))
-       #:local-build? #t))))
+    #~(begin
+        (use-modules (gcrypt base16) (gcrypt hash))
+        (bytevector->base16-string (file-sha256 #$file)))))
 
-(define* (make-chromium-extension p #:optional (output "out"))
-  "Create a Chromium extension from package P and return a package that,
-when installed, will make the extension contained in P available as a
-Chromium browser extension.  OUTPUT specifies which output of P to use."
-  (let* ((pname (package-name p))
-         (version (package-version p))
-         (signing-key (make-signing-key pname)))
+(define* (make-chromium-extension pkg #:optional (pkg-output "out"))
+  "Create a Chromium extension from package PKG and return a package that,
+when installed, will make the extension contained in PKG available as a
+Chromium browser extension.  PKG-OUTPUT specifies which output of PKG to use."
+  (let* ((name (package-name pkg))
+         (version (package-version pkg))
+         (private-key (make-signing-key name))
+         (public-key (signing-key->public-der private-key))
+         (checksum (file-sha256sum public-key))
+         (crx (make-crx private-key pkg pkg-output))
+         (json (crx->chromium-json crx version)))
     (package
-      (inherit p)
-      (name (string-append pname "-chromium"))
+      (inherit pkg)
+      (name (string-append name "-chromium"))
       (source #f)
-      (build-system trivial-build-system)
       (native-inputs '())
-      (inputs
-       `(("extension" ,(chromium-json->profile-object
-                        (crx->chromium-json (make-crx signing-key p output)
-                                            version)
-                        signing-key))))
+      (inputs '())
       (propagated-inputs '())
       (outputs '("out"))
+      (build-system trivial-build-system)
       (arguments
-       '(#:modules ((guix build utils))
-         #:builder
-         (begin
-           (use-modules (guix build utils))
-           (copy-recursively (assoc-ref %build-inputs "extension")
-                             (assoc-ref %outputs "out"))))))))
+       (list #:modules '((guix build utils))
+             #:builder
+             #~(begin
+                 (use-modules (guix build utils))
+                 (define (base16-char->chromium-base16 char)
+                   ;; Translate CHAR, a hexadecimal character, to a Chromium-style
+                   ;; representation using the letters a-p (where a=0, p=15).
+                   (string-ref "abcdefghijklmnop"
+                               (string-index "0123456789abcdef" char)))
+                 (let ((file-name (string-map base16-char->chromium-base16
+                                              (string-take #$checksum 32)))
+                       (extension-directory
+                        (string-append #$output
+                                       "/share/chromium/extensions")))
+                   (mkdir-p extension-directory)
+                   (symlink #$json (string-append extension-directory "/"
+                                                  file-name ".json")))))))))
diff --git a/gnu/build/file-systems.scm b/gnu/build/file-systems.scm
index d8a5ddf1e5..d95340df83 100644
--- a/gnu/build/file-systems.scm
+++ b/gnu/build/file-systems.scm
@@ -29,6 +29,8 @@
   #:use-module (guix build bournish)
   #:use-module ((guix build syscalls)
                 #:hide (file-system-type))
+  #:use-module (guix diagnostics)
+  #:use-module (guix i18n)
   #:use-module (rnrs io ports)
   #:use-module (rnrs bytevectors)
   #:use-module (ice-9 match)
@@ -54,7 +56,9 @@
 
             mount-flags->bit-mask
             check-file-system
-            mount-file-system))
+            mount-file-system
+
+            swap-space->flags-bit-mask))
 
 ;;; Commentary:
 ;;;
@@ -227,6 +231,36 @@ if DEVICE does not contain an linux-swap file system."
   "Return the label of Linux-swap superblock SBLOCK as a string."
   (null-terminated-latin1->string
    (sub-bytevector sblock (+ 1024 4 4 4 16) 16)))
+
+(define (swap-space->flags-bit-mask swap)
+  "Return the number suitable for the 'flags' argument of 'mount'
+that corresponds to the swap-space SWAP."
+  (define prio-flag
+    (let ((p (swap-space-priority swap))
+          (max (ash SWAP_FLAG_PRIO_MASK (- SWAP_FLAG_PRIO_SHIFT))))
+      (if p
+          (logior SWAP_FLAG_PREFER
+                  (ash (cond
+                        ((< p 0)
+                         (begin (warning
+                                 (G_ "Given swap priority ~a is
+negative, defaulting to 0.~%") p)
+                                0))
+                        ((> p max)
+                         (begin (warning
+                                 (G_ "Limiting swap priority ~a to
+~a.~%")
+                                 p max)
+                                max))
+                        (else p))
+                       SWAP_FLAG_PRIO_SHIFT))
+          0)))
+  (define delayed-flag
+    (if (swap-space-discard? swap)
+        SWAP_FLAG_DISCARD
+        0))
+  (logior prio-flag delayed-flag))
+
 
 
 ;;;
diff --git a/gnu/build/hurd-boot.scm b/gnu/build/hurd-boot.scm
index e66d4d1ba8..ac36bd17d4 100644
--- a/gnu/build/hurd-boot.scm
+++ b/gnu/build/hurd-boot.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -185,13 +185,9 @@ set."
       ("servers/crash-suspend"   ("/hurd/crash" "--suspend"))
       ("servers/password"        ("/hurd/password"))
       ("servers/socket/1"        ("/hurd/pflocal"))
-      ("servers/socket/2"        ("/hurd/pfinet"
-                                  "--interface" "eth0"
-                                  "--address"
-                                  "10.0.2.15" ;the default QEMU guest IP
-                                  "--netmask" "255.255.255.0"
-                                  "--gateway" "10.0.2.2"
-                                  "--ipv6" "/servers/socket/16"))
+      ;; /servers/socket/2 and /26 are created by 'static-networking-service'.
+      ;; XXX: Spawn pfinet without arguments on these nodes so that a DHCP
+      ;; client has someone to talk to?
       ("proc"                    ("/hurd/procfs" "--stat-mode=444"))))
 
   (define devices
diff --git a/gnu/build/image.scm b/gnu/build/image.scm
index 6eb0290256..bdd5ec25a9 100644
--- a/gnu/build/image.scm
+++ b/gnu/build/image.scm
@@ -166,6 +166,7 @@ produced by #:references-graphs.  Pass WAL-MODE? to call-with-database."
                                     bootcfg-location
                                     bootloader-package
                                     bootloader-installer
+                                    (copy-closures? #t)
                                     (deduplicate? #t)
                                     references-graphs
                                     (register-closures? #t)
@@ -176,30 +177,50 @@ produced by #:references-graphs.  Pass WAL-MODE? to call-with-database."
   "Initialize the given ROOT directory. Use BOOTCFG and BOOTCFG-LOCATION to
 install the bootloader configuration.
 
-If REGISTER-CLOSURES? is true, register REFERENCES-GRAPHS in the store.  If
+If COPY-CLOSURES? is true, copy all of REFERENCES-GRAPHS to the partition.  If
+REGISTER-CLOSURES? is true, register REFERENCES-GRAPHS in the store.  If
 DEDUPLICATE? is true, then also deduplicate files common to CLOSURES and the
 rest of the store when registering the closures.  SYSTEM-DIRECTORY is the name
 of the directory of the 'system' derivation.  Pass WAL-MODE? to
 register-closure."
+  (define root-store
+    (string-append root (%store-directory)))
+
+  (define tmp-store ".tmp-store")
+
   (populate-root-file-system system-directory root)
-  (populate-store references-graphs root
-                  #:deduplicate? deduplicate?)
+
+  (when copy-closures?
+    (populate-store references-graphs root
+                    #:deduplicate? deduplicate?))
 
   ;; Populate /dev.
   (when make-device-nodes
     (make-device-nodes root))
 
   (when register-closures?
+    (unless copy-closures?
+      ;; XXX: 'register-closure' wants to palpate the things it registers, so
+      ;; create a symlink to the store.
+      (rename-file root-store tmp-store)
+      (symlink (%store-directory) root-store))
+
     (for-each (lambda (closure)
                 (register-closure root closure
                                   #:wal-mode? wal-mode?))
-              references-graphs))
+              references-graphs)
+
+    (unless copy-closures?
+      (delete-file root-store)
+      (rename-file tmp-store root-store)))
 
-  (when bootloader-installer
-    (display "installing bootloader...\n")
-    (bootloader-installer bootloader-package #f root))
-  (when bootcfg
-    (install-boot-config bootcfg bootcfg-location root)))
+  ;; There's no point installing a bootloader if we do not populate the store.
+  (when copy-closures?
+    (when bootloader-installer
+      (display "installing bootloader...\n")
+      (bootloader-installer bootloader-package #f root))
+    (when bootcfg
+      (install-boot-config bootcfg bootcfg-location root))))
 
 (define* (make-iso9660-image xorriso grub-mkrescue-environment
                              grub bootcfg system-directory root target
diff --git a/gnu/build/linux-container.scm b/gnu/build/linux-container.scm
index 4a8bed5a9a..bdeca2cdb9 100644
--- a/gnu/build/linux-container.scm
+++ b/gnu/build/linux-container.scm
@@ -52,7 +52,7 @@ exists."
   (file-exists? "/proc/self/setgroups"))
 
 (define %namespaces
-  '(mnt pid ipc uts user net))
+  '(cgroup mnt pid ipc uts user net))
 
 (define (call-with-clean-exit thunk)
   "Apply THUNK, but exit with a status code of 1 if it fails."
@@ -210,6 +210,7 @@ corresponds to the symbols in NAMESPACES."
   ;; Use the same flags as fork(3) in addition to the namespace flags.
   (apply logior SIGCHLD
          (map (match-lambda
+               ('cgroup  CLONE_NEWCGROUP)
                ('mnt  CLONE_NEWNS)
                ('uts  CLONE_NEWUTS)
                ('ipc  CLONE_NEWIPC)
diff --git a/gnu/build/linux-modules.scm b/gnu/build/linux-modules.scm
index 3a47322065..053720574b 100644
--- a/gnu/build/linux-modules.scm
+++ b/gnu/build/linux-modules.scm
@@ -354,11 +354,13 @@ appears in BLACK-LIST are not loaded."
              (close-fdes fd)
              #t)
            (lambda args
-             ;; If this module was already loaded and we're in modprobe style, ignore
-             ;; the error.
              (when fd (close-fdes fd))
-             (or (and recursive? (= EEXIST (system-error-errno args)))
-                 (apply throw args)))))))
+             (let ((errno (system-error-errno args)))
+               (or (and recursive?      ; we're operating in ‘modprobe’ style
+                        (member errno
+                                (list EEXIST    ; already loaded
+                                      EINVAL))) ; unsupported by hardware
+                   (apply throw args))))))))
 
 (define (load-linux-modules-from-directory modules directory)
   "Load MODULES and their dependencies from DIRECTORY, a directory containing
diff --git a/gnu/build/marionette.scm b/gnu/build/marionette.scm
index fe754cd147..b336024610 100644
--- a/gnu/build/marionette.scm
+++ b/gnu/build/marionette.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; 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 © 2018 Chris Marusich <cmmarusich@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -20,9 +20,11 @@
 (define-module (gnu build marionette)
   #:use-module (srfi srfi-9)
   #:use-module (srfi srfi-26)
+  #:use-module (srfi srfi-64)
   #:use-module (rnrs io ports)
   #:use-module (ice-9 match)
   #:use-module (ice-9 popen)
+  #:use-module (ice-9 regex)
   #:export (marionette?
             make-marionette
             marionette-eval
@@ -33,7 +35,10 @@
             marionette-screen-text
             wait-for-screen-text
             %qwerty-us-keystrokes
-            marionette-type))
+            marionette-type
+
+            system-test-runner
+            qemu-command))
 
 ;;; Commentary:
 ;;;
@@ -358,4 +363,79 @@ to actual keystrokes."
   (for-each (cut marionette-control <> marionette)
             (string->keystroke-commands str keystrokes)))
 
+
+;;;
+;;; Test helper.
+;;;
+
+(define* (system-test-runner #:optional log-directory)
+  "Return a SRFI-64 test runner that calls 'exit' upon 'test-end'.  When
+LOG-DIRECTORY is specified, create log file within it."
+  (let ((runner  (test-runner-simple)))
+    ;; Log to a file under LOG-DIRECTORY.
+    (test-runner-on-group-begin! runner
+      (let ((on-begin (test-runner-on-group-begin runner)))
+        (lambda (runner suite-name count)
+          (when log-directory
+            (catch 'system-error
+              (lambda ()
+                (mkdir log-directory))
+              (lambda args
+                (unless (= (system-error-errno args) EEXIST)
+                  (apply throw args))))
+            (set! test-log-to-file
+                  (string-append log-directory "/" suite-name ".log")))
+          (on-begin runner suite-name count))))
+
+    ;; The default behavior on 'test-end' is to only write a line if the test
+    ;; failed.  Arrange to also write a line on success.
+    (test-runner-on-test-end! runner
+      (let ((on-end (test-runner-on-test-end runner)))
+        (lambda (runner)
+          (let* ((kind      (test-result-ref runner 'result-kind))
+                 (results   (test-result-alist runner))
+                 (test-name (assq-ref results 'test-name)))
+            (unless (memq kind '(fail xpass))
+              (format (current-output-port) "~a: ~a~%"
+                      (string-upcase (symbol->string kind))
+                      test-name)))
+
+          (on-end runner))))
+
+    ;; On 'test-end', display test results and exit with zero if and only if
+    ;; there were no test failures.
+    (test-runner-on-final! runner
+      (lambda (runner)
+        (let ((success? (= (test-runner-fail-count runner) 0)))
+          (test-on-final-simple runner)
+
+          (when (not success?)
+            (let* ((log-port (test-runner-aux-value runner))
+                   (log-file (port-filename log-port)))
+              (format (current-error-port)
+                      "\nTests failed, dumping log file '~a'.\n\n"
+                      log-file)
+
+              ;; At this point LOG-PORT is not closed yet; flush it.
+              (force-output log-port)
+
+              ;; Brute force to avoid dependency on (guix build utils) for
+              ;; 'dump-port'.
+              (let ((content (call-with-input-file log-file
+                               get-bytevector-all)))
+                (put-bytevector (current-error-port) content))))
+
+          (exit success?))))
+    runner))
+
+(define* (qemu-command #:optional (system %host-type))
+  "Return the default name of the QEMU command for SYSTEM."
+  (let ((cpu (substring system 0
+                        (string-index system #\-))))
+    (string-append "qemu-system-"
+                   (cond
+                    ((string-match "^i[3456]86$" cpu) "i386")
+                    ((string-match "armhf" cpu) "arm")
+                    (else cpu)))))
+
 ;;; marionette.scm ends here
diff --git a/gnu/build/secret-service.scm b/gnu/build/secret-service.scm
index 46dcf1b9c3..4e183e11e8 100644
--- a/gnu/build/secret-service.scm
+++ b/gnu/build/secret-service.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -111,6 +111,15 @@ wait for at most HANDSHAKE-TIMEOUT seconds for handshake to complete.  Return
        (close-port sock)
        #f))))
 
+(define (delete-file* file)
+  "Ensure FILE does not exist."
+  (catch 'system-error
+    (lambda ()
+      (delete-file file))
+    (lambda args
+      (unless (= ENOENT (system-error-errno args))
+        (apply throw args)))))
+
 (define (secret-service-receive-secrets port)
   "Listen to local PORT and wait for a secret service client to send secrets.
 Write them to the file system.  Return the list of files installed on success,
@@ -170,6 +179,12 @@ and #f otherwise."
                    (log "installing file '~a' (~a bytes)...~%"
                         file size)
                    (mkdir-p (dirname file))
+
+                   ;; It could be that FILE already exists, for instance
+                   ;; because it has been created by a service's activation
+                   ;; snippet (e.g., SSH host keys).  Delete it.
+                   (delete-file* file)
+
                    (call-with-output-file file
                      (lambda (output)
                        (dump port output size)
diff --git a/gnu/build/vm.scm b/gnu/build/vm.scm
deleted file mode 100644
index 7b55127599..0000000000
--- a/gnu/build/vm.scm
+++ /dev/null
@@ -1,500 +0,0 @@
-;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2016 Christine Lemmer-Webber <cwebber@dustycloud.org>
-;;; Copyright © 2016, 2017 Leo Famulari <leo@famulari.name>
-;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
-;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
-;;; Copyright © 2018 Chris Marusich <cmmarusich@gmail.com>
-;;; Copyright © 2020 Tobias Geerinckx-Rice <me@tobias.gr>
-;;;
-;;; 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 build vm)
-  #:use-module (guix build utils)
-  #:use-module (guix build store-copy)
-  #:use-module (guix build syscalls)
-  #:use-module (guix store database)
-  #:use-module (gnu build bootloader)
-  #:use-module (gnu build linux-boot)
-  #:use-module (gnu build install)
-  #:use-module (gnu system uuid)
-  #:use-module (guix records)
-  #:use-module ((guix combinators) #:select (fold2))
-  #:use-module (ice-9 format)
-  #:use-module (ice-9 ftw)
-  #:use-module (ice-9 match)
-  #:use-module (ice-9 regex)
-  #:use-module (ice-9 popen)
-  #:use-module (srfi srfi-1)
-  #:use-module (srfi srfi-9)
-  #:use-module (srfi srfi-19)
-  #:use-module (srfi srfi-26)
-  #:export (qemu-command
-            load-in-linux-vm
-            format-partition
-
-            partition
-            partition?
-            partition-device
-            partition-size
-            partition-file-system
-            partition-label
-            partition-flags
-            partition-initializer
-
-            estimated-partition-size
-            root-partition-initializer
-            initialize-partition-table
-            initialize-hard-disk))
-
-;;; Commentary:
-;;;
-;;; This module provides supporting code to run virtual machines and build
-;;; virtual machine images using QEMU.
-;;;
-;;; Code:
-
-(define* (qemu-command #:optional (system %host-type))
-  "Return the default name of the QEMU command for SYSTEM."
-  (let ((cpu (substring system 0
-                        (string-index system #\-))))
-    (string-append "qemu-system-"
-                   (cond
-                    ((string-match "^i[3456]86$" cpu) "i386")
-                    ((string-match "armhf" cpu) "arm")
-                    (else cpu)))))
-
-(define* (load-in-linux-vm builder
-                           #:key
-                           output
-                           (qemu (qemu-command)) (memory-size 512)
-                           linux initrd
-                           make-disk-image?
-                           single-file-output?
-                           (disk-image-size (* 100 (expt 2 20)))
-                           (disk-image-format "qcow2")
-                           (references-graphs '()))
-  "Run BUILDER, a Scheme file, into a VM running LINUX with INITRD, and copy
-the result to OUTPUT.  If SINGLE-FILE-OUTPUT? is true, copy a single file from
-/xchg to OUTPUT.  Otherwise, copy the contents of /xchg to a new directory
-OUTPUT.
-
-When MAKE-DISK-IMAGE? is true, OUTPUT will contain a VM image of
-DISK-IMAGE-SIZE bytes resulting from the execution of BUILDER, which may
-access it via /dev/hda.
-
-REFERENCES-GRAPHS can specify a list of reference-graph files as produced by
-the #:references-graphs parameter of 'derivation'."
-
-  (define target-arm32?
-    (string-prefix? "arm-" %host-type))
-
-  (define target-aarch64?
-    (string-prefix? "aarch64-" %host-type))
-
-  (define target-arm?
-    (or target-arm32? target-aarch64?))
-
-  (define arch-specific-flags
-    `(;; On ARM, a machine has to be specified. Use "virt" machine to avoid
-      ;; hardware limits imposed by other machines.
-      ,@(if target-arm?
-            '("-M" "virt")
-            '())
-
-      ;; On ARM32, if the kernel is built without LPAE support, ECAM conflicts
-      ;; with VIRT_PCIE_MMIO causing PCI devices not to show up.  Disable
-      ;; explicitely highmem to fix it.
-      ;; See: https://bugs.launchpad.net/qemu/+bug/1790975.
-      ,@(if target-arm32?
-            '("-machine" "highmem=off")
-            '())
-
-      ;; Only enable kvm if we see /dev/kvm exists.  This allows users without
-      ;; hardware virtualization to still use these commands.  KVM support is
-      ;; still buggy on some ARM boards. Do not use it even if available.
-      ,@(if (and (file-exists? "/dev/kvm")
-                 (not target-arm?))
-            '("-enable-kvm")
-            '())
-
-      ;; Pass "panic=1" so that the guest dies upon error.
-      "-append"
-      ,(string-append "panic=1 --load=" builder
-
-                      ;; The serial port name differs between emulated
-                      ;; architectures/machines.
-                      " console="
-                      (if target-arm? "ttyAMA0" "ttyS0"))))
-
-  (when make-disk-image?
-    (format #t "creating ~a image of ~,2f MiB...~%"
-            disk-image-format (/ disk-image-size (expt 2 20)))
-    (force-output)
-    (invoke "qemu-img" "create" "-f" disk-image-format output
-             (number->string disk-image-size)))
-
-  (mkdir "xchg")
-  (mkdir "tmp")
-
-  (match references-graphs
-    ((graph-files ...)
-     ;; Copy the reference-graph files under xchg/ so EXP can access it.
-     (map (lambda (file)
-            (copy-file file (string-append "xchg/" file)))
-          graph-files))
-    (_ #f))
-
-  (apply invoke qemu "-nographic" "-no-reboot"
-         ;; CPU "max" behaves as "host" when KVM is enabled, and like a system
-         ;; CPU with the maximum possible feature set otherwise.
-         "-cpu" "max"
-         "-m" (number->string memory-size)
-         "-nic" "user,model=virtio-net-pci"
-         "-object" "rng-random,filename=/dev/urandom,id=guixsd-vm-rng"
-         "-device" "virtio-rng-pci,rng=guixsd-vm-rng"
-         "-virtfs"
-         (string-append "local,id=store_dev,path="
-                        (%store-directory)
-                        ",security_model=none,mount_tag=store")
-         "-virtfs"
-         (string-append "local,id=xchg_dev,path=xchg"
-                        ",security_model=none,mount_tag=xchg")
-         "-virtfs"
-         ;; Some programs require more space in /tmp than is normally
-         ;; available in the guest.  Accommodate such programs by sharing a
-         ;; temporary directory.
-         (string-append "local,id=tmp_dev,path=tmp"
-                        ",security_model=none,mount_tag=tmp")
-         "-kernel" linux
-         "-initrd" initrd
-         (append
-          (if make-disk-image?
-              `("-device" "virtio-blk,drive=myhd"
-                "-drive" ,(string-append "if=none,file=" output
-                                         ",format=" disk-image-format
-                                         ",id=myhd"))
-              '())
-          arch-specific-flags))
-
-  (unless (file-exists? "xchg/.exit-status")
-    (error "VM did not produce an exit code"))
-
-  (match (call-with-input-file "xchg/.exit-status" read)
-    (0 #t)
-    (status (error "guest VM code exited with a non-zero status" status)))
-
-  (delete-file "xchg/.exit-status")
-
-  ;; When MAKE-DISK-IMAGE? is true, the image is in OUTPUT already.
-  (unless make-disk-image?
-    (if single-file-output?
-        (let ((graph? (lambda (name stat)
-                        (member (basename name) references-graphs))))
-          (match (find-files "xchg" (negate graph?))
-            ((result)
-             (copy-file result output))
-            (x
-             (error "did not find a single result file" x))))
-        (begin
-          (mkdir output)
-          (copy-recursively "xchg" output)))))
-
-(define* (register-closure prefix closure
-                           #:key
-                           (schema (sql-schema)))
-  "Register CLOSURE in PREFIX, where PREFIX is the directory name of the
-target store and CLOSURE is the name of a file containing a reference graph as
-produced by #:references-graphs."
-  (let ((items (call-with-input-file closure read-reference-graph)))
-    (parameterize ((sql-schema schema))
-      (with-database (store-database-file #:prefix prefix) db
-        (register-items db items
-                        #:prefix prefix
-                        #:registration-time %epoch)))))
-
-
-;;;
-;;; Partitions.
-;;;
-
-(define-record-type* <partition> partition make-partition
-  partition?
-  (device      partition-device (default #f))
-  (size        partition-size)
-  (file-system partition-file-system (default "ext4"))
-  (file-system-options partition-file-system-options ;passed to 'mkfs.FS'
-                       (default '()))
-  (label       partition-label (default #f))
-  (uuid        partition-uuid (default #f))
-  (flags       partition-flags (default '()))
-  (initializer partition-initializer (default (const #t))))
-
-(define (estimated-partition-size graphs)
-  "Return the estimated size of a partition that can store the store items
-given by GRAPHS, a list of file names produced by #:references-graphs."
-  ;; Simply add a 25% overhead.
-  (round (* 1.25 (closure-size graphs))))
-
-(define* (initialize-partition-table device partitions
-                                     #:key
-                                     (label-type "msdos")
-                                     (offset (expt 2 20)))
-  "Create on DEVICE a partition table of type LABEL-TYPE, containing the given
-PARTITIONS (a list of <partition> objects), starting at OFFSET bytes.  On
-success, return PARTITIONS with their 'device' field changed to reflect their
-actual /dev name based on DEVICE."
-  (define (partition-options part offset index)
-    (cons* "mkpart" "primary" "ext2"
-           (format #f "~aB" offset)
-           (format #f "~aB" (+ offset (partition-size part)))
-           (append-map (lambda (flag)
-                         (list "set" (number->string index)
-                               (symbol->string flag) "on"))
-                       (partition-flags part))))
-
-  (define (options partitions offset)
-    (let loop ((partitions partitions)
-               (offset     offset)
-               (index      1)
-               (result     '()))
-      (match partitions
-        (()
-         (concatenate (reverse result)))
-        ((head tail ...)
-         (loop tail
-               ;; Leave one sector (512B) between partitions to placate
-               ;; Parted.
-               (+ offset 512 (partition-size head))
-               (+ 1 index)
-               (cons (partition-options head offset index)
-                     result))))))
-
-  (format #t "creating partition table with ~a partitions (~a)...\n"
-          (length partitions)
-          (string-join (map (compose (cut string-append <> " MiB")
-                                     number->string
-                                     (lambda (size)
-                                       (round (/ size (expt 2. 20))))
-                                     partition-size)
-                            partitions)
-                       ", "))
-  (apply invoke "parted" "--script"
-         device "mklabel" label-type
-         (options partitions offset))
-
-  ;; Set the 'device' field of each partition.
-  (reverse
-   (fold2 (lambda (part result index)
-            (values (cons  (partition
-                            (inherit part)
-                            (device (string-append device
-                                                   (number->string index))))
-                           result)
-                    (+ 1 index)))
-          '()
-          1
-          partitions)))
-
-(define MS_BIND 4096)                             ; <sys/mounts.h> again!
-
-(define* (create-ext-file-system partition type
-                                 #:key label uuid (options '()))
-  "Create an ext-family file system of TYPE on PARTITION.  If LABEL is true,
-use that as the volume name.  If UUID is true, use it as the partition UUID."
-  (format #t "creating ~a partition... ~@[label: ~s~] ~@[uuid: ~s~]\n"
-          type label (and uuid (uuid->string uuid)))
-  (apply invoke (string-append "mkfs." type)
-         "-F" partition
-         `(,@(if label
-                 `("-L" ,label)
-                 '())
-           ,@(if uuid
-                 `("-U" ,(uuid->string uuid))
-                 '())
-           ,@options)))
-
-(define* (create-fat-file-system partition
-                                 #:key label uuid (options '()))
-  "Create a FAT file system on PARTITION.  The number of File Allocation Tables
-will be determined based on file system size.  If LABEL is true, use that as the
-volume name."
-  ;; FIXME: UUID is ignored!
-  (format #t "creating FAT partition...\n")
-  (apply invoke "mkfs.fat" partition
-         (append (if label `("-n" ,label) '()) options)))
-
-(define* (format-partition partition type
-                           #:key label uuid (options '()))
-  "Create a file system TYPE on PARTITION.  If LABEL is true, use that as the
-volume name.  Options is a list of command-line options passed to 'mkfs.FS'."
-  (cond ((string-prefix? "ext" type)
-         (create-ext-file-system partition type #:label label #:uuid uuid
-                                 #:options options))
-        ((or (string-prefix? "fat" type) (string= "vfat" type))
-         (create-fat-file-system partition #:label label #:uuid uuid
-                                 #:options options))
-        (else (error "Unsupported file system."))))
-
-(define (initialize-partition partition)
-  "Format PARTITION, a <partition> object with a non-#f 'device' field, mount
-it, run its initializer, and unmount it."
-  (let ((target "/fs"))
-   (format-partition (partition-device partition)
-                     (partition-file-system partition)
-                     #:label (partition-label partition)
-                     #:uuid (partition-uuid partition)
-                     #:options (partition-file-system-options partition))
-   (mkdir-p target)
-   (mount (partition-device partition) target
-          (partition-file-system partition))
-
-   ((partition-initializer partition) target)
-
-   (umount target)
-   partition))
-
-(define* (root-partition-initializer #:key (closures '())
-                                     copy-closures?
-                                     (register-closures? #t)
-                                     system-directory
-                                     (deduplicate? #t)
-                                     (make-device-nodes
-                                      make-essential-device-nodes)
-                                     (extra-directives '()))
-  "Return a procedure to initialize a root partition.
-
-If REGISTER-CLOSURES? is true, register all of CLOSURES in the partition's
-store.  If DEDUPLICATE? is true, then also deduplicate files common to
-CLOSURES and the rest of the store when registering the closures.  If
-COPY-CLOSURES? is true, copy all of CLOSURES to the partition.
-SYSTEM-DIRECTORY is the name of the directory of the 'system' derivation.
-
-EXTRA-DIRECTIVES is an optional list of directives to populate the root file
-system that is passed to 'populate-root-file-system'."
-  (lambda (target)
-    (define target-store
-      (string-append target (%store-directory)))
-
-    (when copy-closures?
-      ;; Populate the store.
-      (populate-store (map (cut string-append "/xchg/" <>) closures)
-                      target
-                      #:deduplicate? deduplicate?))
-
-    ;; Populate /dev.
-    (make-device-nodes target)
-
-    ;; Optionally, register the inputs in the image's store.
-    (when register-closures?
-      (unless copy-closures?
-        ;; XXX: 'register-closure' wants to palpate the things it registers, so
-        ;; bind-mount the store on the target.
-        (mkdir-p target-store)
-        (mount (%store-directory) target-store "" MS_BIND))
-
-      (display "registering closures...\n")
-      (for-each (lambda (closure)
-                  (register-closure target
-                                    (string-append "/xchg/" closure)))
-                closures)
-      (unless copy-closures?
-        (umount target-store)))
-
-    ;; Add the non-store directories and files.
-    (display "populating...\n")
-    (populate-root-file-system system-directory target
-                               #:extras extra-directives)
-
-    ;; 'register-closure' resets timestamps and everything, so no need to do it
-    ;; once more in that case.
-    (unless register-closures?
-      ;; 'reset-timestamps' also resets file permissions; do that everywhere
-      ;; except on /dev so that /dev/null remains writable, etc.
-      (for-each (lambda (directory)
-                  (reset-timestamps (string-append target "/" directory)))
-                (scandir target
-                         (match-lambda
-                           ((or "." ".." "dev") #f)
-                           (_ #t))))
-      (reset-timestamps (string-append target "/dev")
-                        #:preserve-permissions? #t))))
-
-(define (register-bootcfg-root target bootcfg)
-  "On file system TARGET, register BOOTCFG as a GC root."
-  (let ((directory (string-append target "/var/guix/gcroots")))
-    (mkdir-p directory)
-    (symlink bootcfg (string-append directory "/bootcfg"))))
-
-(define* (initialize-hard-disk device
-                               #:key
-                               bootloader-package
-                               bootcfg
-                               bootcfg-location
-                               bootloader-installer
-                               (grub-efi #f)
-                               (partitions '()))
-  "Initialize DEVICE as a disk containing all the <partition> objects listed
-in PARTITIONS, and using BOOTCFG as its bootloader configuration file.
-
-Each partition is initialized by calling its 'initializer' procedure,
-passing it a directory name where it is mounted."
-
-  (define (partition-bootable? partition)
-    "Return the first partition found with the boot flag set."
-    (member 'boot (partition-flags partition)))
-
-  (define (partition-esp? partition)
-    "Return the first EFI System Partition."
-    (member 'esp (partition-flags partition)))
-
-  (let* ((partitions (initialize-partition-table device partitions))
-         (root       (find partition-bootable? partitions))
-         (esp        (find partition-esp? partitions))
-         (target     "/fs"))
-    (unless root
-      (error "no bootable partition specified" partitions))
-
-    (for-each initialize-partition partitions)
-
-    (display "mounting root partition...\n")
-    (mkdir-p target)
-    (mount (partition-device root) target (partition-file-system root))
-    (install-boot-config bootcfg bootcfg-location target)
-    (when bootloader-installer
-      (display "installing bootloader...\n")
-      (bootloader-installer bootloader-package device target))
-
-    (when esp
-      ;; Mount the ESP somewhere and install GRUB UEFI image.
-      (let ((mount-point (string-append target "/boot/efi")))
-        (display "mounting EFI system partition...\n")
-        (mkdir-p mount-point)
-        (mount (partition-device esp) mount-point
-               (partition-file-system esp))
-
-        (display "creating EFI firmware image...")
-        (install-efi-loader grub-efi mount-point)
-        (display "done.\n")
-
-        (umount mount-point)))
-
-    ;; Register BOOTCFG as a GC root.
-    (register-bootcfg-root target bootcfg)
-
-    (umount target)))
-
-;;; vm.scm ends here
diff --git a/gnu/ci.scm b/gnu/ci.scm
index ceb1b94af9..35fd583f75 100644
--- a/gnu/ci.scm
+++ b/gnu/ci.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012-2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017, 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2018, 2019 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2020 Julien Lepiller <julien@lepiller.eu>
@@ -28,6 +28,7 @@
   #:use-module (guix grafts)
   #:use-module (guix profiles)
   #:use-module (guix packages)
+  #:autoload   (guix transformations) (tunable-package? tuned-package)
   #:use-module (guix channels)
   #:use-module (guix config)
   #:use-module (guix derivations)
@@ -69,7 +70,6 @@
   #:export (derivation->job
             image->job
 
-            %bootstrap-packages
             %core-packages
             %cross-targets
             channel-source->package
@@ -86,7 +86,7 @@
 (define* (derivation->job name drv
                           #:key
                           (max-silent-time 3600)
-                          (timeout 3600))
+                          (timeout (* 5 3600)))
   "Return a Cuirass job called NAME and describing DRV.
 
 MAX-SILENT-TIME and TIMEOUT are build options passed to the daemon when
@@ -108,9 +108,9 @@ building the derivation."
     (#:timeout . ,timeout)))
 
 (define* (package-job store job-name package system
-                      #:key cross? target)
+                      #:key cross? target (suffix ""))
   "Return a job called JOB-NAME that builds PACKAGE on SYSTEM."
-  (let ((job-name (string-append job-name "." system)))
+  (let ((job-name (string-append job-name "." system suffix)))
     (parameterize ((%graft? #f))
       (let* ((drv (if cross?
                       (package-cross-derivation store package target system
@@ -130,7 +130,7 @@ building the derivation."
 (define (package-cross-job store job-name package target system)
   "Return a job called TARGET.JOB-NAME that cross-builds PACKAGE for TARGET on
 SYSTEM."
-  (let ((name (string-append target "." job-name "." system)))
+  (let ((name (string-append target "." job-name)))
     (package-job store name package system
                  #:cross? #t
                  #:target target)))
@@ -139,9 +139,9 @@ SYSTEM."
   ;; Note: Don't put the '-final' package variants because (1) that's
   ;; implicit, and (2) they cannot be cross-built (due to the explicit input
   ;; chain.)
-  (list gcc-7 gcc-8 gcc-9 gcc-10 glibc binutils
+  (list gcc-8 gcc-9 gcc-10 gcc-11 glibc binutils
         gmp mpfr mpc coreutils findutils diffutils patch sed grep
-        gawk gnu-gettext hello guile-2.0 guile-2.2 zlib gzip xz
+        gawk gnu-gettext hello guile-2.2 guile-3.0 zlib gzip xz guix
         %bootstrap-binaries-tarball
         %binutils-bootstrap-tarball
         (%glibc-bootstrap-tarball)
@@ -149,13 +149,18 @@ SYSTEM."
         %guile-bootstrap-tarball
         %bootstrap-tarballs))
 
-(define %bootstrap-packages
-  ;; Return the list of bootstrap packages from the commencement module.
-  (filter package?
-          (module-map
-           (lambda (sym var)
-             (variable-ref var))
-           (resolve-module '(gnu packages commencement)))))
+(define (commencement-packages system)
+  "Return the list of bootstrap packages from the commencement module for
+SYSTEM."
+  ;; Only include packages supported on SYSTEM.  For example, the Mes
+  ;; bootstrap graph is currently not supported on ARM so it should be
+  ;; excluded.
+  (filter (lambda (obj)
+            (and (package? obj)
+                 (supported-package? obj system)))
+          (module-map (lambda (sym var)
+                        (variable-ref var))
+                      (resolve-module '(gnu packages commencement)))))
 
 (define (packages-to-cross-build target)
   "Return the list of packages to cross-build for TARGET."
@@ -297,20 +302,16 @@ otherwise use the IMAGE name."
 
 (define channel-build-system
   ;; Build system used to "convert" a channel instance to a package.
-  (let* ((build (lambda* (store name inputs
-                                #:key source commit system
-                                #:allow-other-keys)
-                  (run-with-store store
-                    ;; SOURCE can be a lowerable object such as <local-file>
-                    ;; or a file name.  Adjust accordingly.
-                    (mlet* %store-monad ((source (if (string? source)
-                                                     (return source)
-                                                     (lower-object source)))
-                                         (instance
-                                          -> (checkout->channel-instance
-                                              source #:commit commit)))
-                      (channel-instances->derivation (list instance)))
-                    #:system system)))
+  (let* ((build (lambda* (name inputs
+                               #:key source commit system
+                               #:allow-other-keys)
+                  (mlet* %store-monad ((source (if (string? source)
+                                                   (return source)
+                                                   (lower-object source)))
+                                       (instance
+                                        -> (checkout->channel-instance
+                                            source #:commit commit)))
+                    (channel-instances->derivation (list instance)))))
          (lower (lambda* (name #:key system source commit
                                #:allow-other-keys)
                   (bag
@@ -395,21 +396,39 @@ otherwise use the IMAGE name."
                            (((_ inputs _ ...) ...)
                             inputs))))
                       (%final-inputs)))))
-    (lambda (store package system)
+    (lambda* (store package system #:key (suffix ""))
       "Return a job for PACKAGE on SYSTEM, or #f if this combination is not
-valid."
+valid.  Append SUFFIX to the job name."
       (cond ((member package base-packages)
              (package-job store (string-append "base." (job-name package))
-                          package system))
+                          package system #:suffix suffix))
             ((supported-package? package system)
              (let ((drv (package-derivation store package system
                                             #:graft? #f)))
                (and (substitutable-derivation? drv)
                     (package-job store (job-name package)
-                                 package system))))
+                                 package system #:suffix suffix))))
             (else
              #f)))))
 
+(define %x86-64-micro-architectures
+  ;; Micro-architectures for which we build tuned variants.
+  '("westmere" "ivybridge" "haswell" "skylake" "skylake-avx512"))
+
+(define (tuned-package-jobs store package system)
+  "Return a list of jobs for PACKAGE tuned for SYSTEM's micro-architectures."
+  (filter-map (lambda (micro-architecture)
+                (define suffix
+                  (string-append "." micro-architecture))
+
+                (package->job store
+                              (tuned-package package micro-architecture)
+                              system
+                              #:suffix suffix))
+              (match system
+                ("x86_64-linux" %x86-64-micro-architectures)
+                (_ '()))))
+
 (define (all-packages)
   "Return the list of packages to build."
   (define (adjust package result)
@@ -443,19 +462,40 @@ valid."
               (map channel-url channels)))
        arguments))
 
-(define (manifests->packages store manifests)
-  "Return the list of packages found in MANIFESTS."
+(define (manifests->jobs store manifests)
+  "Return the list of jobs for the entries in MANIFESTS, a list of file
+names."
   (define (load-manifest manifest)
     (save-module-excursion
      (lambda ()
        (set-current-module (make-user-module '((guix profiles) (gnu))))
        (primitive-load manifest))))
 
-  (delete-duplicates!
-   (map manifest-entry-item
-        (append-map (compose manifest-entries
-                             load-manifest)
-                    manifests))))
+  (define (manifest-entry-job-name entry)
+    (string-append (manifest-entry-name entry) "-"
+                   (manifest-entry-version entry)))
+
+  (define (manifest-entry->job entry)
+    (let* ((obj (manifest-entry-item entry))
+           (drv (parameterize ((%graft? #f))
+                  (run-with-store store
+                    (lower-object obj))))
+           (max-silent-time (or (and (package? obj)
+                                     (assoc-ref (package-properties obj)
+                                                'max-silent-time))
+                                3600))
+           (timeout (or (and (package? obj)
+                             (assoc-ref (package-properties obj) 'timeout))
+                        (* 5 3600))))
+      (derivation->job (manifest-entry-job-name entry) drv
+                       #:max-silent-time max-silent-time
+                       #:timeout timeout)))
+
+  (map manifest-entry->job
+       (delete-duplicates
+        (append-map (compose manifest-entries load-manifest)
+                    manifests)
+        manifest-entry=?)))
 
 (define (arguments->systems arguments)
   "Return the systems list from ARGUMENTS."
@@ -506,10 +546,16 @@ valid."
          ('all
           ;; Build everything, including replacements.
           (let ((all (all-packages))
-                (job (lambda (package)
-                       (package->job store package system))))
+                (jobs (lambda (package)
+                        (match (package->job store package system)
+                          (#f '())
+                          (main-job
+                           (cons main-job
+                                 (if (tunable-package? package)
+                                     (tuned-package-jobs store package system)
+                                     '())))))))
             (append
-             (filter-map job all)
+             (append-map jobs all)
              (cross-jobs store system))))
          ('core
           ;; Build core packages only.
@@ -517,7 +563,7 @@ valid."
            (map (lambda (package)
                   (package-job store (job-name package)
                                package system))
-                (append %bootstrap-packages %core-packages))
+                (append (commencement-packages system) %core-packages))
            (cross-jobs store system)))
          ('guix
           ;; Build Guix modules only.
@@ -568,12 +614,8 @@ valid."
                  packages)))
          (('manifests . rest)
           ;; Build packages in the list of manifests.
-          (let* ((manifests (arguments->manifests rest channels))
-                 (packages (manifests->packages store manifests)))
-            (map (lambda (package)
-                   (package-job store (job-name package)
-                                package system))
-                 packages)))
+          (let ((manifests (arguments->manifests rest channels)))
+            (manifests->jobs store manifests)))
          (else
           (error "unknown subset" subset))))
      systems)))
diff --git a/gnu/home-services/configuration.scm b/gnu/home-services/configuration.scm
deleted file mode 100644
index e8f4bc77ec..0000000000
--- a/gnu/home-services/configuration.scm
+++ /dev/null
@@ -1,109 +0,0 @@
-;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2021 Andrew Tropin <andrew@trop.in>
-;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
-;;;
-;;; This file is part of GNU Guix.
-;;;
-;;; GNU Guix is free software; you can redistribute it and/or modify it
-;;; under the terms of the GNU General Public License as published by
-;;; the Free Software Foundation; either version 3 of the License, or (at
-;;; your option) any later version.
-;;;
-;;; GNU Guix is distributed in the hope that it will be useful, but
-;;; WITHOUT ANY WARRANTY; without even the implied warranty of
-;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;;; GNU General Public License for more details.
-;;;
-;;; You should have received a copy of the GNU General Public License
-;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
-
-(define-module (gnu home-services configuration)
-  #:use-module (gnu services configuration)
-  #:use-module (guix gexp)
-  #:use-module (srfi srfi-1)
-  #:use-module (ice-9 curried-definitions)
-  #:use-module (ice-9 match)
-  #:use-module (guix i18n)
-  #:use-module (guix diagnostics)
-
-  #:export (filter-configuration-fields
-
-            interpose
-            list-of
-
-            list-of-strings?
-            alist?
-            string-or-gexp?
-	    serialize-string-or-gexp
-	    text-config?
-            serialize-text-config
-            generic-serialize-alist-entry
-            generic-serialize-alist))
-
-(define* (filter-configuration-fields configuration-fields fields
-				      #:optional negate?)
-  "Retrieve the fields listed in FIELDS from CONFIGURATION-FIELDS.
-If NEGATE? is @code{#t}, retrieve all fields except FIELDS."
-  (filter (lambda (field)
-            (let ((member? (member (configuration-field-name field) fields)))
-              (if (not negate?) member? (not member?))))
-          configuration-fields))
-
-
-(define* (interpose ls  #:optional (delimiter "\n") (grammar 'infix))
-  "Same as @code{string-join}, but without join and string, returns an
-DELIMITER interposed LS.  Support 'infix and 'suffix GRAMMAR values."
-  (when (not (member grammar '(infix suffix)))
-    (raise
-     (formatted-message
-      (G_ "The GRAMMAR value must be 'infix or 'suffix, but ~a provided.")
-      grammar)))
-  (fold-right (lambda (e acc)
-		(cons e
-		      (if (and (null? acc) (eq? grammar 'infix))
-			  acc
-			  (cons delimiter acc))))
-	      '() ls))
-
-(define (list-of pred?)
-  "Return a procedure that takes a list and check if all the elements of
-the list result in @code{#t} when applying PRED? on them."
-    (lambda (x)
-      (if (list? x)
-          (every pred? x)
-          #f)))
-
-
-(define list-of-strings?
-  (list-of string?))
-
-(define alist? list?)
-
-(define (string-or-gexp? sg) (or (string? sg) (gexp? sg)))
-(define (serialize-string-or-gexp field-name val) "")
-
-(define (text-config? config)
-  (and (list? config) (every string-or-gexp? config)))
-(define (serialize-text-config field-name val)
-  #~(string-append #$@(interpose val "\n" 'suffix)))
-
-(define ((generic-serialize-alist-entry serialize-field) entry)
-  "Apply the SERIALIZE-FIELD procedure on the field and value of ENTRY."
-  (match entry
-    ((field . val) (serialize-field field val))))
-
-(define (generic-serialize-alist combine serialize-field fields)
-  "Generate a configuration from an association list FIELDS.
-
-SERIALIZE-FIELD is a procedure that takes two arguments, it will be
-applied on the fields and values of FIELDS using the
-@code{generic-serialize-alist-entry} procedure.
-
-COMBINE is a procedure that takes one or more arguments and combines
-all the alist entries into one value, @code{string-append} or
-@code{append} are usually good candidates for this.
-
-See the @code{serialize-alist} procedure in `@code{(gnu home-services
-version-control}' for an example usage.)}"
-  (apply combine
-         (map (generic-serialize-alist-entry serialize-field) fields)))
diff --git a/gnu/home.scm b/gnu/home.scm
index f4c9359e25..a9f0a469a5 100644
--- a/gnu/home.scm
+++ b/gnu/home.scm
@@ -17,14 +17,16 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu home)
-  #:use-module (gnu home-services)
-  #:use-module (gnu home-services symlink-manager)
-  #:use-module (gnu home-services shells)
-  #:use-module (gnu home-services xdg)
-  #:use-module (gnu home-services fontutils)
+  #:use-module (gnu home services)
+  #:use-module (gnu home services symlink-manager)
+  #:use-module (gnu home services shells)
+  #:use-module (gnu home services xdg)
+  #:use-module (gnu home services fontutils)
   #:use-module (gnu services)
   #:use-module (guix records)
   #:use-module (guix diagnostics)
+  #:use-module (guix gexp)
+  #:use-module (guix store)
 
   #:export (home-environment
             home-environment?
@@ -104,3 +106,11 @@ of HOME-PROVENANCE-SERVICE-TYPE to its services."
     (inherit he)
     (services (cons (service home-provenance-service-type config-file)
                     (home-environment-user-services he)))))
+
+(define-gexp-compiler (home-environment-compiler (he <home-environment>)
+                                                 system target)
+  ((store-lift
+    (lambda (store)
+      (run-with-store store (home-environment-derivation he)
+                      #:system system
+                      #:target target)))))
diff --git a/gnu/home-services.scm b/gnu/home/services.scm
index 9f1e986616..2a3cb44952 100644
--- a/gnu/home-services.scm
+++ b/gnu/home/services.scm
@@ -17,8 +17,9 @@
 ;;; You should have received a copy of the GNU General Public License
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
-(define-module (gnu home-services)
+(define-module (gnu home services)
   #:use-module (gnu services)
+  #:use-module ((gnu packages package-management) #:select (guix))
   #:use-module (guix channels)
   #:use-module (guix monads)
   #:use-module (guix store)
@@ -28,7 +29,7 @@
   #:use-module (guix ui)
   #:use-module (guix discovery)
   #:use-module (guix diagnostics)
-
+  #:use-module (guix i18n)
   #:use-module (srfi srfi-1)
   #:use-module (ice-9 match)
 
@@ -41,7 +42,9 @@
             home-run-on-change-service-type
             home-provenance-service-type
 
-            fold-home-service-types)
+            fold-home-service-types
+
+            %initialize-gettext)
 
   #:re-export (service
                service-type
@@ -274,26 +277,44 @@ directory containing FILES."
                 (description "Configuration files for programs that
 will be put in @file{~/.guix-home/files}.")))
 
+(define %initialize-gettext
+  #~(begin
+      (bindtextdomain %gettext-domain
+                      (string-append #$guix "/share/locale"))
+      (textdomain %gettext-domain)
+      (setlocale LC_ALL "")))
+
 (define (compute-on-first-login-script _ gexps)
-  (gexp->script
+  (program-file
    "on-first-login"
-   #~(let* ((xdg-runtime-dir (or (getenv "XDG_RUNTIME_DIR")
-                                 (format #f "/run/user/~a" (getuid))))
-            (flag-file-path (string-append
-                             xdg-runtime-dir "/on-first-login-executed"))
-            (touch (lambda (file-name)
-                     (call-with-output-file file-name (const #t)))))
-       ;; XDG_RUNTIME_DIR dissapears on logout, that means such trick
-       ;; allows to launch on-first-login script on first login only
-       ;; after complete logout/reboot.
-       (when (not (file-exists? flag-file-path))
-         (begin #$@gexps (touch flag-file-path))))))
-
-(define (on-first-login-script-entry m-on-first-login)
+   #~(begin
+       (use-modules (guix i18n))
+       #$%initialize-gettext
+
+       (let* ((xdg-runtime-dir (or (getenv "XDG_RUNTIME_DIR")
+                                   (format #f "/run/user/~a" (getuid))))
+              (flag-file-path (string-append
+                               xdg-runtime-dir "/on-first-login-executed"))
+              (touch (lambda (file-name)
+                       (call-with-output-file file-name (const #t)))))
+         ;; XDG_RUNTIME_DIR dissapears on logout, that means such trick
+         ;; allows to launch on-first-login script on first login only
+         ;; after complete logout/reboot.
+         (if (file-exists? xdg-runtime-dir)
+             (unless (file-exists? flag-file-path)
+               (begin #$@gexps (touch flag-file-path)))
+             ;; TRANSLATORS: 'on-first-login' is the name of a service and
+             ;; shouldn't be translated
+             (display (G_ "XDG_RUNTIME_DIR doesn't exists, on-first-login script
+won't execute anything.  You can check if xdg runtime directory exists,
+XDG_RUNTIME_DIR variable is set to appropriate value and manually execute the
+script by running '$HOME/.guix-home/on-first-login'")))))))
+
+(define (on-first-login-script-entry on-first-login)
   "Return, as a monadic value, an entry for the on-first-login script
 in the home environment directory."
-  (mlet %store-monad ((on-first-login m-on-first-login))
-        (return `(("on-first-login" ,on-first-login)))))
+  (with-monad %store-monad
+    (return `(("on-first-login" ,on-first-login)))))
 
 (define home-run-on-first-login-service-type
   (service-type (name 'home-run-on-first-login)
@@ -346,7 +367,7 @@ extended with one gexp.")))
              (unless new-home-env (setenv "GUIX_NEW_HOME" #f))
              (unless old-home-env (setenv "GUIX_OLD_HOME" #f)))
            (format #t "\
-Activation script was either called or loaded by file from this direcotry:
+Activation script was either called or loaded by file from this directory:
 ~a
 It doesn't seem that home environment is somewhere around.
 Make sure that you call ./activate by symlink from -home store item.\n"
@@ -380,6 +401,10 @@ with one gexp, but many times, and all gexps must be idempotent.")))
 
 (define (compute-on-change-gexp eval-gexps? pattern-gexp-tuples)
   #~(begin
+      (use-modules (guix i18n))
+
+      #$%initialize-gettext
+
       (define (equal-regulars? file1 file2)
         "Check if FILE1 and FILE2 are bit for bit identical."
         (let* ((cmp-binary #$(file-append
@@ -444,21 +469,23 @@ with one gexp, but many times, and all gexps must be idempotent.")))
                               "/gnu/store/non-existing-generation")
                           "/" (car x)))
                   (file2 (string-append (getenv "GUIX_NEW_HOME") "/" (car x)))
-                  (_ (format #t "Comparing ~a and\n~10t~a..." file1 file2))
+                  (_ (format #t (G_ "Comparing ~a and\n~10t~a...") file1 file2))
                   (any-changes? (something-changed? file1 file2))
-                  (_ (format #t " done (~a)\n"
+                  (_ (format #t (G_ " done (~a)\n")
                              (if any-changes? "changed" "same"))))
              (if any-changes? (cadr x) "")))
          '#$pattern-gexp-tuples))
 
       (if #$eval-gexps?
           (begin
-            (display "Evaling on-change gexps.\n\n")
+            ;;; TRANSLATORS: 'on-change' is the name of a service type, it
+            ;;; probably shouldn't be translated.
+            (display (G_ "Evaluating on-change gexps.\n\n"))
             (for-each primitive-eval expressions-to-eval)
-            (display "On-change gexps evaluation finished.\n\n"))
+            (display (G_ "On-change gexps evaluation finished.\n\n")))
           (display "\
-On-change gexps won't be evaluated, disabled by service
-configuration.\n"))))
+On-change gexps won't be evaluated; evaluation has been disabled in the
+service configuration"))))
 
 (define home-run-on-change-service-type
   (service-type (name 'home-run-on-change)
@@ -508,15 +535,16 @@ environment, and its configuration file, when available.")))
 
 (define %guix-home-root-directory
   ;; Absolute file name of the module hierarchy.
-  (parent-directory (dirname (search-path %load-path "gnu/home-services.scm"))))
+  (parent-directory
+   (dirname (dirname (search-path %load-path "gnu/home/services.scm")))))
 
 (define %service-type-path
   ;; Search path for service types.
-  (make-parameter `((,%guix-home-root-directory . "gnu/home-services"))))
+  (make-parameter `((,%guix-home-root-directory . "gnu/home/services"))))
 
 (define (all-home-service-modules)
-  "Return the default set of home-service modules."
-  (cons (resolve-interface '(gnu home-services))
+  "Return the default set of `home service' modules."
+  (cons (resolve-interface '(gnu home services))
         (all-modules (%service-type-path)
                      #:warn warn-about-load-error)))
 
diff --git a/gnu/home-services/fontutils.scm b/gnu/home/services/fontutils.scm
index 28bfc3d3f7..772904367d 100644
--- a/gnu/home-services/fontutils.scm
+++ b/gnu/home/services/fontutils.scm
@@ -17,8 +17,8 @@
 ;;; You should have received a copy of the GNU General Public License
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
-(define-module (gnu home-services fontutils)
-  #:use-module (gnu home-services)
+(define-module (gnu home services fontutils)
+  #:use-module (gnu home services)
   #:use-module (gnu packages fontutils)
   #:use-module (guix gexp)
 
diff --git a/gnu/home-services/mcron.scm b/gnu/home/services/mcron.scm
index fdfde179a5..0b3dbb810b 100644
--- a/gnu/home-services/mcron.scm
+++ b/gnu/home/services/mcron.scm
@@ -17,11 +17,11 @@
 ;;; You should have received a copy of the GNU General Public License
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
-(define-module (gnu home-services mcron)
+(define-module (gnu home services mcron)
   #:use-module (gnu packages guile-xyz)
-  #:use-module (gnu home-services)
-  #:use-module (gnu home-services shepherd)
+  #:use-module (gnu home services)
   #:use-module (gnu services shepherd)
+  #:use-module (gnu home services shepherd)
   #:use-module (guix records)
   #:use-module (guix gexp)
   #:use-module (srfi srfi-1)
diff --git a/gnu/home-services/shells.scm b/gnu/home/services/shells.scm
index ecb02098f7..ca7f4ac0ad 100644
--- a/gnu/home-services/shells.scm
+++ b/gnu/home/services/shells.scm
@@ -17,11 +17,10 @@
 ;;; You should have received a copy of the GNU General Public License
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
-(define-module (gnu home-services shells)
+(define-module (gnu home services shells)
   #:use-module (gnu services configuration)
-  #:use-module (gnu home-services configuration)
-  #:use-module (gnu home-services utils)
-  #:use-module (gnu home-services)
+  #:use-module (gnu home services utils)
+  #:use-module (gnu home services)
   #:use-module (gnu packages shells)
   #:use-module (gnu packages bash)
   #:use-module (guix gexp)
@@ -67,10 +66,10 @@
 @code{home-environment}, DO NOT create this service manually, it can
 only be extended.
 
-@code{profile} is a list of strings or gexps, which will go to
+@code{profile} is a list of file-like objects, which will go to
 @file{~/.profile}.  By default @file{~/.profile} contains the
 initialization code, which have to be evaluated by login shell to make
-home-environment's profile avaliable to the user, but other commands
+home-environment's profile available to the user, but other commands
 can be added to the file if it is really necessary.
 
 In most cases shell's configuration files are preferred places for
@@ -108,7 +107,7 @@ $HOME_ENVIRONMENT/on-first-login\n"
                 (default-value (home-shell-profile-configuration))
                 (description "Create @file{~/.profile}, which is used
 for environment initialization of POSIX compliant login shells.  This
-service type can be extended with a list of strings or gexps.")))
+service type can be extended with a list of file-like objects.")))
 
 (define (serialize-boolean field-name val) "")
 (define (serialize-posix-env-vars field-name val)
@@ -144,30 +143,30 @@ Shell startup process will continue with
    serialize-posix-env-vars)
   (zshenv
    (text-config '())
-   "List of strings or gexps, which will be added to @file{.zshenv}.
+   "List of file-like objects, which will be added to @file{.zshenv}.
 Used for setting user's shell environment variables.  Must not contain
 commands assuming the presence of tty or producing output.  Will be
 read always.  Will be read before any other file in @env{ZDOTDIR}.")
   (zprofile
    (text-config '())
-   "List of strings or gexps, which will be added to @file{.zprofile}.
+   "List of file-like objects, which will be added to @file{.zprofile}.
 Used for executing user's commands at start of login shell (In most
 cases the shell started on tty just after login).  Will be read before
 @file{.zlogin}.")
   (zshrc
    (text-config '())
-   "List of strings or gexps, which will be added to @file{.zshrc}.
+   "List of file-like objects, which will be added to @file{.zshrc}.
 Used for executing user's commands at start of interactive shell (The
 shell for interactive usage started by typing @code{zsh} or by
 terminal app or any other program).")
   (zlogin
    (text-config '())
-   "List of strings or gexps, which will be added to @file{.zlogin}.
+   "List of file-like objects, which will be added to @file{.zlogin}.
 Used for executing user's commands at the end of starting process of
 login shell.")
   (zlogout
    (text-config '())
-   "List of strings or gexps, which will be added to @file{.zlogout}.
+   "List of file-like objects, which will be added to @file{.zlogout}.
 Used for executing user's commands at the exit of login shell.  It
 won't be read in some cases (if the shell terminates by exec'ing
 another process for example)."))
@@ -245,19 +244,19 @@ source ~/.profile
    "Association list of environment variables to set.")
   (zshrc
    (text-config '())
-   "List of strings or gexps.")
+   "List of file-like objects.")
   (zshenv
    (text-config '())
-   "List of strings or gexps.")
+   "List of file-like objects.")
   (zprofile
    (text-config '())
-   "List of strings or gexps.")
+   "List of file-like objects.")
   (zlogin
    (text-config '())
-   "List of strings or gexps.")
+   "List of file-like objects.")
   (zlogout
    (text-config '())
-   "List of strings or gexps."))
+   "List of file-like objects."))
 
 (define (home-zsh-extensions original-config extension-configs)
   (home-zsh-configuration
@@ -306,33 +305,65 @@ source ~/.profile
 ;;; Bash.
 ;;;
 
+(define (bash-serialize-aliases field-name val)
+  #~(string-append
+     #$@(map
+         (match-lambda
+           ((key . #f)
+            "")
+           ((key . #t)
+            #~(string-append "alias " #$key "\n"))
+           ((key . value)
+            #~(string-append "alias " #$key "=\"" #$value "\"\n")))
+         val)))
+
 (define-configuration home-bash-configuration
   (package
    (package bash)
    "The Bash package to use.")
   (guix-defaults?
    (boolean #t)
-   "Add sane defaults like reading @file{/etc/bashrc}, coloring output
-for @code{ls} provided by guix to @file{.bashrc}.")
+   "Add sane defaults like reading @file{/etc/bashrc} and coloring the output of
+@command{ls} to the end of the @file{.bashrc} file.")
   (environment-variables
    (alist '())
-   "Association list of environment variables to set for the Bash session."
+   "Association list of environment variables to set for the Bash session.  The
+rules for the @code{home-environment-variables-service-type} apply
+here (@pxref{Essential Home Services}).  The contents of this field will be
+added after the contents of the @code{bash-profile} field."
    serialize-posix-env-vars)
+  (aliases
+   (alist '())
+   "Association list of aliases to set for the Bash session.  The aliases will be
+defined after the contents of the @code{bashrc} field has been put in the
+@file{.bashrc} file.  The alias will automatically be quoted, so something line
+this:
+
+@lisp
+'((\"ls\" . \"ls -alF\"))
+@end lisp
+
+turns into
+
+@example
+alias ls=\"ls -alF\"
+@end example"
+   bash-serialize-aliases)
   (bash-profile
    (text-config '())
-   "List of strings or gexps, which will be added to @file{.bash_profile}.
+   "List of file-like objects, which will be added to @file{.bash_profile}.
 Used for executing user's commands at start of login shell (In most
 cases the shell started on tty just after login).  @file{.bash_login}
 won't be ever read, because @file{.bash_profile} always present.")
   (bashrc
    (text-config '())
-   "List of strings or gexps, which will be added to @file{.bashrc}.
+   "List of file-like objects, which will be added to @file{.bashrc}.
 Used for executing user's commands at start of interactive shell (The
 shell for interactive usage started by typing @code{bash} or by
 terminal app or any other program).")
   (bash-logout
    (text-config '())
-   "List of strings or gexps, which will be added to @file{.bash_logout}.
+   "List of file-like objects, which will be added to @file{.bash_logout}.
 Used for executing user's commands at the exit of login shell.  It
 won't be read in some cases (if the shell terminates by exec'ing
 another process for example)."))
@@ -359,7 +390,9 @@ then
 fi
 
 # Source the system-wide file.
-source /etc/bashrc
+if [[ -e /etc/bashrc ]]; then
+    source /etc/bashrc
+fi
 
 # Adjust the prompt depending on whether we're in 'guix environment'.
 if [ -n \"$GUIX_ENVIRONMENT\" ]
@@ -388,10 +421,10 @@ alias grep='grep --color=auto'\n")
       (if (or extra-content
               (not (null? ((configuration-field-getter field-obj) config))))
           `(,(object->snake-case-string file-name)
-            ,(mixed-text-file
-              (object->snake-case-string file-name)
-              (if extra-content extra-content "")
-              (serialize-field field)))
+            ,(apply mixed-text-file
+                    (object->snake-case-string file-name)
+                    (append (or extra-content '())
+                        (list (serialize-field field)))))
           '())))
 
   (filter
@@ -414,8 +447,8 @@ if [ -f ~/.bashrc ]; then source ~/.bashrc; fi
      ,@(list (file-if-not-empty
               'bashrc
               (if (home-bash-configuration-guix-defaults? config)
-                  guix-bashrc
-                  #f))
+                  (list (serialize-field 'aliases) guix-bashrc)
+                  (list (serialize-field 'alises))))
              (file-if-not-empty 'bash-logout)))))
 
 (define (add-bash-packages config)
@@ -424,36 +457,52 @@ if [ -f ~/.bashrc ]; then source ~/.bashrc; fi
 (define-configuration/no-serialization home-bash-extension
   (environment-variables
    (alist '())
-   "Association list of environment variables to set.")
+   "Additional environment variables to set.  These will be combined with the
+environment variables from other extensions and the base service to form one
+coherent block of environment variables.")
+  (aliases
+   (alist '())
+   "Additional aliases to set.  These will be combined with the aliases from
+other extensions and the base service.")
   (bash-profile
    (text-config '())
-   "List of strings or gexps.")
+   "Additional text blocks to add to @file{.bash_profile}, which will be combined
+with text blocks from other extensions and the base service.")
   (bashrc
    (text-config '())
-   "List of strings or gexps.")
+   "Additional text blocks to add to @file{.bashrc}, which will be combined
+with text blocks from other extensions and the base service.")
   (bash-logout
    (text-config '())
-   "List of strings or gexps."))
+   "Additional text blocks to add to @file{.bash_logout}, which will be combined
+with text blocks from other extensions and the base service."))
 
 (define (home-bash-extensions original-config extension-configs)
-  (home-bash-configuration
-   (inherit original-config)
-   (environment-variables
-    (append (home-bash-configuration-environment-variables original-config)
-            (append-map
-             home-bash-extension-environment-variables extension-configs)))
-   (bash-profile
-    (append (home-bash-configuration-bash-profile original-config)
-            (append-map
-             home-bash-extension-bash-profile extension-configs)))
-   (bashrc
-    (append (home-bash-configuration-bashrc original-config)
-            (append-map
-             home-bash-extension-bashrc extension-configs)))
-   (bash-logout
-    (append (home-bash-configuration-bash-logout original-config)
-            (append-map
-             home-bash-extension-bash-logout extension-configs)))))
+  (match original-config
+    (($ <home-bash-configuration> _ _ _ environment-variables aliases
+                                  bash-profile bashrc bash-logout)
+     (home-bash-configuration
+      (inherit original-config)
+      (environment-variables
+       (append environment-variables
+               (append-map
+                home-bash-extension-environment-variables extension-configs)))
+      (aliases
+       (append aliases
+               (append-map
+                home-bash-extension-aliases extension-configs)))
+      (bash-profile
+       (append bash-profile
+               (append-map
+                home-bash-extension-bash-profile extension-configs)))
+      (bashrc
+       (append bashrc
+               (append-map
+                home-bash-extension-bashrc extension-configs)))
+      (bash-logout
+       (append bash-logout
+               (append-map
+                home-bash-extension-bash-logout extension-configs)))))))
 
 (define home-bash-service-type
   (service-type (name 'home-bash)
@@ -507,7 +556,7 @@ if [ -f ~/.bashrc ]; then source ~/.bashrc; fi
     "The Fish package to use.")
   (config
    (text-config '())
-   "List of strings or gexps, which will be added to
+   "List of file-like objects, which will be added to
 @file{$XDG_CONFIG_HOME/fish/config.fish}.")
   (environment-variables
    (alist '())
@@ -554,7 +603,7 @@ end\n\n")
 (define-configuration/no-serialization home-fish-extension
   (config
    (text-config '())
-   "List of strings or gexps for extending the Fish initialization file.")
+   "List of file-like objects for extending the Fish initialization file.")
   (environment-variables
    (alist '())
    "Association list of environment variables to set.")
@@ -610,10 +659,16 @@ Install and configure Fish, the friendly interactive shell.")))
    'home-shell-profile-configuration))
 
 (define (generate-home-bash-documentation)
-  (generate-documentation
-   `((home-bash-configuration
-      ,home-bash-configuration-fields))
-   'home-bash-configuration))
+  (string-append
+   (generate-documentation
+    `((home-bash-configuration
+       ,home-bash-configuration-fields))
+    'home-bash-configuration)
+   "\n\n"
+   (generate-documentation
+    `((home-bash-extension
+       ,home-bash-extension-fields))
+    'home-bash-extension)))
 
 (define (generate-home-zsh-documentation)
   (generate-documentation
diff --git a/gnu/home-services/shepherd.scm b/gnu/home/services/shepherd.scm
index 120cfde1a1..7a9cc064bb 100644
--- a/gnu/home-services/shepherd.scm
+++ b/gnu/home/services/shepherd.scm
@@ -17,8 +17,8 @@
 ;;; You should have received a copy of the GNU General Public License
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
-(define-module (gnu home-services shepherd)
-  #:use-module (gnu home-services)
+(define-module (gnu home services shepherd)
+  #:use-module (gnu home services)
   #:use-module (gnu packages admin)
   #:use-module (gnu services shepherd)
   #:use-module (guix sets)
diff --git a/gnu/home-services/symlink-manager.scm b/gnu/home/services/symlink-manager.scm
index 11f5d503d4..314da3ba3e 100644
--- a/gnu/home-services/symlink-manager.scm
+++ b/gnu/home/services/symlink-manager.scm
@@ -17,8 +17,8 @@
 ;;; You should have received a copy of the GNU General Public License
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
-(define-module (gnu home-services symlink-manager)
-  #:use-module (gnu home-services)
+(define-module (gnu home services symlink-manager)
+  #:use-module (gnu home services)
   #:use-module (guix gexp)
 
   #:export (home-symlink-manager-service-type))
@@ -41,7 +41,9 @@
        (use-modules (ice-9 ftw)
                     (ice-9 curried-definitions)
                     (ice-9 match)
-                    (srfi srfi-1))
+                    (srfi srfi-1)
+                    (guix i18n))
+       #$%initialize-gettext
        (define ((simplify-file-tree parent) file)
          "Convert the result produced by `file-system-tree' to less
 verbose and more suitable for further processing format.
@@ -139,20 +141,21 @@ appear only after all nested items already listed."
               (backup-file
                (lambda (path)
                  (mkdir-p backup-dir)
-                 (format #t "Backing up ~a..." (get-target-path path))
+                 (format #t (G_ "Backing up ~a...") (get-target-path path))
                  (mkdir-p (dirname (get-backup-path path)))
                  (rename-file (get-target-path path) (get-backup-path path))
-                 (display " done\n")))
+                 (display (G_ " done\n"))))
 
               (cleanup-symlinks
                (lambda ()
                  (let ((to-delete ((file-tree-traverse #f) old-tree)))
                    (display
-                    "Cleaning up symlinks from previous home-environment.\n\n")
+                    (G_
+                    "Cleaning up symlinks from previous home-environment.\n\n"))
                    (map
                     (match-lambda
                       (('dir . ".")
-                       (display "Cleanup finished.\n\n"))
+                       (display (G_ "Cleanup finished.\n\n")))
 
                       (('dir . path)
                        (if (and
@@ -160,12 +163,13 @@ appear only after all nested items already listed."
                             (directory? (get-target-path path))
                             (empty-directory? (get-target-path path)))
                            (begin
-                             (format #t "Removing ~a..."
+                             (format #t (G_ "Removing ~a...")
                                      (get-target-path path))
                              (rmdir (get-target-path path))
-                             (display " done\n"))
+                             (display (G_ " done\n")))
                            (format
-                            #t "Skipping ~a (not an empty directory)... done\n"
+                            #t
+                            (G_ "Skipping ~a (not an empty directory)... done\n")
                             (get-target-path path))))
 
                       (('file . path)
@@ -175,12 +179,12 @@ appear only after all nested items already listed."
                          ;; up later during create-symlinks phase.
                          (if (symlink-to-store? (get-target-path path))
                              (begin
-                               (format #t "Removing ~a..." (get-target-path path))
+                               (format #t (G_ "Removing ~a...") (get-target-path path))
                                (delete-file (get-target-path path))
-                               (display " done\n"))
+                               (display (G_ " done\n")))
                              (format
                               #t
-                              "Skipping ~a (not a symlink to store)... done\n"
+                              (G_ "Skipping ~a (not a symlink to store)... done\n")
                               (get-target-path path))))))
                     to-delete))))
 
@@ -191,9 +195,9 @@ appear only after all nested items already listed."
                     (match-lambda
                       (('dir . ".")
                        (display
-                        "New symlinks to home-environment will be created soon.\n")
+                        (G_ "New symlinks to home-environment will be created soon.\n"))
                        (format
-                        #t "All conflicting files will go to ~a.\n\n" backup-dir))
+                        #t (G_ "All conflicting files will go to ~a.\n\n") backup-dir))
 
                       (('dir . path)
                        (let ((target-path (get-target-path path)))
@@ -203,20 +207,20 @@ appear only after all nested items already listed."
 
                          (if (file-exists? target-path)
                              (format
-                              #t "Skipping   ~a (directory already exists)... done\n"
+                              #t (G_ "Skipping   ~a (directory already exists)... done\n")
                               target-path)
                              (begin
-                               (format #t "Creating   ~a..." target-path)
+                               (format #t (G_ "Creating   ~a...") target-path)
                                (mkdir target-path)
-                               (display " done\n")))))
+                               (display (G_ " done\n"))))))
 
                       (('file . path)
                        (when (file-exists? (get-target-path path))
                          (backup-file path))
-                       (format #t "Symlinking ~a -> ~a..."
+                       (format #t (G_ "Symlinking ~a -> ~a...")
                                (get-target-path path) (get-source-path path))
                        (symlink (get-source-path path) (get-target-path path))
-                       (display " done\n")))
+                       (display (G_ " done\n"))))
                     to-create)))))
 
          (when old-tree
@@ -227,7 +231,7 @@ appear only after all nested items already listed."
          (symlink new-home new-he-path)
          (rename-file new-he-path he-path)
 
-         (display " done\nFinished updating symlinks.\n\n")))))
+         (display (G_" done\nFinished updating symlinks.\n\n"))))))
 
 
 (define (update-symlinks-gexp _)
diff --git a/gnu/home-services/utils.scm b/gnu/home/services/utils.scm
index f13133a7ae..3ce32f80c0 100644
--- a/gnu/home-services/utils.scm
+++ b/gnu/home/services/utils.scm
@@ -17,7 +17,7 @@
 ;;; You should have received a copy of the GNU General Public License
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
-(define-module (gnu home-services utils)
+(define-module (gnu home services utils)
   #:use-module (ice-9 string-fun)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-26)
@@ -28,7 +28,7 @@
             list->human-readable-list))
 
 (define (maybe-object->string object)
-  "Like @code{object->string} but don't do anyting if OBJECT already is
+  "Like @code{object->string} but don't do anything if OBJECT already is
 a string."
   (if (string? object)
       object
diff --git a/gnu/home-services/xdg.scm b/gnu/home/services/xdg.scm
index 94275f3b65..d230dd7665 100644
--- a/gnu/home-services/xdg.scm
+++ b/gnu/home/services/xdg.scm
@@ -17,12 +17,11 @@
 ;;; You should have received a copy of the GNU General Public License
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
-(define-module (gnu home-services xdg)
+(define-module (gnu home services xdg)
   #:use-module (gnu services configuration)
-  #:use-module (gnu home-services configuration)
-  #:use-module (gnu home-services)
+  #:use-module (gnu home services)
   #:use-module (gnu packages freedesktop)
-  #:use-module (gnu home-services utils)
+  #:use-module (gnu home services utils)
   #:use-module (guix gexp)
   #:use-module (guix records)
   #:use-module (guix i18n)
@@ -137,7 +136,7 @@ are no extensions use configuration instead."
                 (description "Configure XDG base directories.  This
 service introduces two additional variables @env{XDG_STATE_HOME},
 @env{XDG_LOG_HOME}.  They are not a part of XDG specification, at
-least yet, but are convinient to have, it improves the consistency
+least yet, but are convenient to have, it improves the consistency
 between different home services.  The services of this service-type is
 instantiated by default, to provide non-default value, extend the
 service-type (using @code{simple-service} for example).")))
diff --git a/gnu/image.scm b/gnu/image.scm
index 75d489490d..0b3a5a096b 100644
--- a/gnu/image.scm
+++ b/gnu/image.scm
@@ -17,6 +17,7 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu image)
+  #:use-module (gnu platform)
   #:use-module (guix records)
   #:export (partition
             partition?
@@ -34,12 +35,15 @@
             image?
             image-name
             image-format
-            image-target
+            image-platform
             image-size
             image-operating-system
+            image-partition-table-type
             image-partitions
             image-compression?
             image-volatile-root?
+            image-shared-store?
+            image-shared-network?
             image-substitutable?
 
             image-type
@@ -47,7 +51,8 @@
             image-type-name
             image-type-constructor
 
-            os->image))
+            os->image
+            os+platform->image))
 
 
 ;;;
@@ -78,18 +83,24 @@
   (name               image-name ;symbol
                       (default #f))
   (format             image-format) ;symbol
-  (target             image-target
+  (platform           image-platform ;<platform>
                       (default #f))
   (size               image-size  ;size in bytes as integer
                       (default 'guess))
   (operating-system   image-operating-system  ;<operating-system>
                       (default #f))
+  (partition-table-type image-partition-table-type ; 'mbr or 'gpt
+                      (default 'mbr))
   (partitions         image-partitions ;list of <partition>
                       (default '()))
   (compression?       image-compression? ;boolean
                       (default #t))
   (volatile-root?     image-volatile-root? ;boolean
                       (default #t))
+  (shared-store?      image-shared-store? ;boolean
+                      (default #f))
+  (shared-network?    image-shared-network? ;boolean
+                      (default #f))
   (substitutable?     image-substitutable? ;boolean
                       (default #t)))
 
@@ -112,3 +123,8 @@
 (define* (os->image os #:key type)
   (let ((constructor (image-type-constructor type)))
     (constructor os)))
+
+(define* (os+platform->image os platform #:key type)
+  (image
+   (inherit (os->image os #:type type))
+   (platform platform)))
diff --git a/gnu/installer.scm b/gnu/installer.scm
index 600fb76de0..c8b7a66cfc 100644
--- a/gnu/installer.scm
+++ b/gnu/installer.scm
@@ -44,6 +44,7 @@
   #:use-module (gnu packages linux)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages package-management)
+  #:use-module (gnu packages tls)
   #:use-module (gnu packages xorg)
   #:use-module (gnu system locale)
   #:use-module (ice-9 match)
@@ -351,7 +352,7 @@ selected keymap."
     ;; packages …), etc. modules.
     (with-extensions (list guile-gcrypt guile-newt
                            guile-parted guile-bytestructures
-                           guile-json-3 guile-git guix)
+                           guile-json-3 guile-git guix gnutls)
       (with-imported-modules `(,@(source-module-closure
                                   `(,@modules
                                     (gnu services herd)
diff --git a/gnu/installer/final.scm b/gnu/installer/final.scm
index fc0b7803fa..276af908f7 100644
--- a/gnu/installer/final.scm
+++ b/gnu/installer/final.scm
@@ -105,36 +105,6 @@ USERS."
   (write-passwd password (string-append etc "/passwd"))
   (write-shadow shadow (string-append etc "/shadow")))
 
-(define* (kill-cow-users cow-path #:key (spare '("udevd")))
-  "Kill all processes that have references to the given COW-PATH in their
-'maps' file.  The process whose names are in SPARE list are spared."
-  (define %not-nul
-    (char-set-complement (char-set #\nul)))
-
-  (let ((pids
-         (filter-map (lambda (pid)
-                       (false-if-exception
-                        (call-with-input-file
-                            (string-append "/proc/" pid "/maps")
-                          (lambda (port)
-                            (and (string-contains (get-string-all port)
-                                                  cow-path)
-                                 (string->number pid))))))
-                     (scandir "/proc" string->number))))
-    (for-each (lambda (pid)
-                ;; cmdline does not always exist.
-                (false-if-exception
-                 (call-with-input-file
-                     (string-append "/proc/" (number->string pid) "/cmdline")
-                   (lambda (port)
-                     (match (string-tokenize (read-string port) %not-nul)
-                       ((argv0 _ ...)
-                        (unless (member (basename argv0) spare)
-                          (syslog "Killing process ~a (~a)~%" pid argv0)
-                          (kill pid SIGKILL)))
-                       (_ #f))))))
-              pids)))
-
 (define (call-with-mnt-container thunk)
   "This is a variant of call-with-container. Run THUNK in a new container
 process, within a separate MNT namespace. The container is not jailed so that
@@ -149,6 +119,28 @@ it can interact with the rest of the system."
     (match (waitpid pid)
       ((_ . status) status))))
 
+(define (install-locale locale)
+  "Install the given LOCALE or the en_US.utf8 locale as a fallback."
+  (let ((supported? (false-if-exception
+                     (setlocale LC_ALL locale))))
+    (if supported?
+        (begin
+          (syslog "install supported locale ~a~%." locale)
+          (setenv "LC_ALL" locale))
+        (begin
+          ;; If the selected locale is not supported, install a default UTF-8
+          ;; locale. This is required to copy some files with UTF-8
+          ;; characters, in the nss-certs package notably. Set LANGUAGE
+          ;; anyways, to have translated messages if possible.
+          (syslog "~a locale is not supported, installating en_US.utf8 \
+locale instead.~%" locale)
+          (setlocale LC_ALL "en_US.utf8")
+          (setenv "LC_ALL" "en_US.utf8")
+          (setenv "LANGUAGE"
+                  (string-take locale
+                               (or (string-index locale #\_)
+                                   (string-length locale))))))))
+
 (define* (install-system locale #:key (users '()))
   "Create /etc/shadow and /etc/passwd on the installation target for USERS.
 Start COW-STORE service on target directory and launch guix install command in
@@ -199,6 +191,10 @@ or #f.  Return #t on success and #f on failure."
        (lambda ()
          (dynamic-wind
            (lambda ()
+             ;; Install the locale before mounting the cow-store, otherwise
+             ;; the loaded cow-store locale files will prevent umounting.
+             (install-locale locale)
+
              ;; Save the database, so that it can be restored once the
              ;; cow-store is umounted.
              (copy-file database-file saved-database)
@@ -221,9 +217,8 @@ or #f.  Return #t on success and #f on failure."
                          (lambda ()
                            (with-error-to-file "/dev/console"
                              (lambda ()
-                               (run-command install-command
-                                            #:locale locale)))))
-                       (run-command install-command #:locale locale))))
+                               (run-command install-command)))))
+                       (run-command install-command))))
            (lambda ()
              ;; Restart guix-daemon so that it does no keep the MNT namespace
              ;; alive.
diff --git a/gnu/installer/keymap.scm b/gnu/installer/keymap.scm
index c42b308009..83b65a0427 100644
--- a/gnu/installer/keymap.scm
+++ b/gnu/installer/keymap.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2018 Mathieu Othacehe <m.othacehe@gmail.com>
+;;; Copyright © 2018, 2021 Mathieu Othacehe <othacehe@gnu.org>
 ;;; Copyright © 2020 Florian Pelz <pelzflorian@pelzflorian.de>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -79,6 +79,11 @@
   "Parse FILE and return two values, the list of supported X11-KEYMAP-MODEL
 and X11-KEYMAP-LAYOUT records. FILE is an XML file from the X Keyboard
 Configuration Database, describing possible XKB configurations."
+  (define maybe-empty
+    (match-lambda
+      ((x) x)
+      (#f "")))
+
   (define (model m)
     (sxml-match m
                 [(model
@@ -108,7 +113,7 @@ Configuration Database, describing possible XKB configurations."
                    . ,rest-variant))
                  (x11-keymap-variant
                   (name name)
-                  (description (car
+                  (description (maybe-empty
                                 (assoc-ref rest-variant 'description))))]))
 
   (define (layout l)
@@ -120,9 +125,9 @@ Configuration Database, describing possible XKB configurations."
                   (variantList ,[variant -> v] ...))
                  (x11-keymap-layout
                   (name name)
-                  (synopsis (car
+                  (synopsis (maybe-empty
                              (assoc-ref rest-layout 'shortDescription)))
-                  (description (car
+                  (description (maybe-empty
                                 (assoc-ref rest-layout 'description)))
                   (variants (list v ...)))]
                 [(layout
@@ -131,9 +136,9 @@ Configuration Database, describing possible XKB configurations."
                    . ,rest-layout))
                  (x11-keymap-layout
                   (name name)
-                  (synopsis (car
+                  (synopsis (maybe-empty
                              (assoc-ref rest-layout 'shortDescription)))
-                  (description (car
+                  (description (maybe-empty
                                 (assoc-ref rest-layout 'description)))
                   (variants '()))]))
 
diff --git a/gnu/installer/newt/network.scm b/gnu/installer/newt/network.scm
index 4af7143d63..fb221483c3 100644
--- a/gnu/installer/newt/network.scm
+++ b/gnu/installer/newt/network.scm
@@ -30,6 +30,8 @@
   #:use-module (srfi srfi-34)
   #:use-module (srfi srfi-35)
   #:use-module (ice-9 match)
+  #:use-module (web client)
+  #:use-module (web response)
   #:use-module (newt)
   #:export (run-network-page))
 
@@ -119,8 +121,23 @@ network devices were found. Do you want to continue anyway?"))
 (define (wait-service-online)
   "Display a newt scale until connman detects an Internet access. Do
 FULL-VALUE tentatives, spaced by 1 second."
+  (define (ci-available?)
+    (dynamic-wind
+      (lambda ()
+        (sigaction SIGALRM
+          (lambda _ #f))
+        (alarm 3))
+      (lambda ()
+        (false-if-exception
+         (= (response-code
+             (http-request "https://ci.guix.gnu.org"))
+            200)))
+      (lambda ()
+        (alarm 0))))
+
   (define (online?)
-    (or (connman-online?)
+    (or (and (connman-online?)
+             (ci-available?))
         (file-exists? "/tmp/installer-assume-online")))
 
   (let* ((full-value 5))
@@ -137,7 +154,7 @@ FULL-VALUE tentatives, spaced by 1 second."
     (unless (online?)
       (run-error-page
        (G_ "The selected network does not provide access to the \
-Internet, please try again.")
+Internet and the Guix substitute server, please try again.")
        (G_ "Connection error"))
       (raise
        (condition
diff --git a/gnu/installer/newt/partition.scm b/gnu/installer/newt/partition.scm
index ea524eb4c3..ccc7686906 100644
--- a/gnu/installer/newt/partition.scm
+++ b/gnu/installer/newt/partition.scm
@@ -83,7 +83,8 @@ DEVICES list."
          devices))
 
   (let* ((result (run-listbox-selection-page
-                  #:info-text (G_ "Please select a disk.")
+                  #:info-text (G_ "Please select a \
+disk.  The installation device as well as the small devices are filtered.")
                   #:title (G_ "Disk")
                   #:listbox-items (device-items)
                   #:listbox-item->text cdr
@@ -131,7 +132,11 @@ Be careful, all data on the disk will be lost.")
   (run-listbox-selection-page
    #:info-text (G_ "Please select the file-system type for this partition.")
    #:title (G_ "File-system type")
-   #:listbox-items '(ext4 btrfs fat16 fat32 jfs ntfs xfs swap)
+   #:listbox-items '(btrfs ext4 jfs xfs
+                           swap
+                           ;; These lack basic Unix features.  Their only use
+                           ;; on GNU is for interoperation, e.g., with UEFI.
+                           fat32 fat16 ntfs)
    #:listbox-item->text user-fs-type-name
    #:sort-listbox-items? #f
    #:button-text (G_ "Exit")
@@ -788,13 +793,13 @@ by pressing the Exit button.~%~%")))
            result-user-partitions)))))
 
   (init-parted)
-  (let* ((non-install-devices (non-install-devices))
-         (user-partitions (run-page non-install-devices))
+  (let* ((eligible-devices (eligible-devices))
+         (user-partitions (run-page eligible-devices))
          (user-partitions-with-pass (prompt-luks-passwords
                                      user-partitions))
          (form (draw-formatting-page user-partitions)))
     ;; Make sure the disks are not in use before proceeding to formatting.
-    (free-parted non-install-devices)
+    (free-parted eligible-devices)
     (format-user-partitions user-partitions-with-pass)
     (syslog "formatted ~a user partitions~%"
             (length user-partitions-with-pass))
diff --git a/gnu/installer/newt/services.scm b/gnu/installer/newt/services.scm
index 1af4e7df2d..c218825813 100644
--- a/gnu/installer/newt/services.scm
+++ b/gnu/installer/newt/services.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2019, 2020 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2021 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2021 Leo Famulari <leo@famulari.name>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -68,18 +69,16 @@ system.")
         (condition
          (&installer-step-abort)))))))
 
-(define (run-other-services-cbt-page)
-  "Run a page allowing the user to select other services."
+(define (run-printing-services-cbt-page)
+  "Run a page allowing the user to select document services such as CUPS."
   (let ((items (filter (lambda (service)
-                         (not (member (system-service-type service)
-                                      '(desktop
-                                        network-management
-                                        networking))))
+                         (eq? 'document
+                              (system-service-type service)))
                        %system-services)))
     (run-checkbox-tree-page
-     #:info-text (G_ "You can now select other services to run on your \
+     #:info-text (G_ "You can now select the CUPS printing service to run on your \
 system.")
-     #:title (G_ "Other services")
+     #:title (G_ "Printing and document services")
      #:items items
      #:selection (map system-service-recommended? items)
      #:item->text (compose G_ system-service-name)
@@ -90,6 +89,27 @@ system.")
         (condition
          (&installer-step-abort)))))))
 
+(define (run-console-services-cbt-page)
+  "Run a page to select various system adminstration services for non-graphical
+systems."
+  (let ((items (filter (lambda (service)
+                         (eq? 'administration
+                              (system-service-type service)))
+                       %system-services)))
+    (run-checkbox-tree-page
+      #:title (G_ "Console services")
+      #:info-text (G_ "Select miscellaneous services to run on your \
+non-graphical system.")
+      #:items items
+      #:selection (map system-service-recommended? items)
+      #:item->text (compose G_ system-service-name)
+      #:checkbox-tree-height 5
+      #:exit-button-callback-procedure
+      (lambda ()
+        (raise
+          (condition
+            (&installer-step-abort)))))))
+
 (define (run-network-management-page)
   "Run a page to select among several network management methods."
   (let ((title (G_ "Network management")))
@@ -121,6 +141,7 @@ client may be enough for a server.")
     (append desktop
             (run-networking-cbt-page)
             (if (null? desktop)
-                (list (run-network-management-page))
+                (cons (run-network-management-page)
+                      (run-console-services-cbt-page))
                 '())
-            (run-other-services-cbt-page))))
+            (run-printing-services-cbt-page))))
diff --git a/gnu/installer/parted.scm b/gnu/installer/parted.scm
index cbe676017b..66e07574c9 100644
--- a/gnu/installer/parted.scm
+++ b/gnu/installer/parted.scm
@@ -26,6 +26,7 @@
   #:use-module ((gnu build file-systems)
                 #:select (canonicalize-device-spec
                           find-partition-by-label
+                          find-partition-by-uuid
                           read-partition-uuid
                           read-luks-partition-uuid))
   #:use-module ((gnu build linux-boot)
@@ -80,7 +81,7 @@
 
             with-delay-device-in-use?
             force-device-sync
-            non-install-devices
+            eligible-devices
             partition-user-type
             user-fs-type-name
             partition-filesystem-user-type
@@ -345,35 +346,59 @@ fail. See rereadpt function in wipefs.c of util-linux for an explanation."
   (with-null-output-ports
    (invoke "dmsetup" "remove_all")))
 
-(define (installation-device)
-  "Return the installation device path."
+(define (installer-root-partition-path)
+  "Return the root partition path, or #f if it could not be detected."
   (let* ((cmdline (linux-command-line))
          (root (find-long-option "--root" cmdline)))
     (and root
-         (canonicalize-device-spec (uuid root)))))
-
-(define (non-install-devices)
-  "Return all the available devices, except the install device."
-  (define (read-only? device)
-    (dynamic-wind
-    (lambda ()
-      (device-open device))
-    (lambda ()
-      (device-read-only? device))
-    (lambda ()
-      (device-close device))))
-
-  ;; If parted reports that a device is read-only it is probably the
-  ;; installation device. However, as this detection does not always work,
-  ;; compare the device path to the installation device path read from the
-  ;; command line.
-  (let ((install-device (installation-device)))
-    (remove (lambda (device)
-              (let ((file-name (device-path device)))
-                (or (read-only? device)
-                    (and install-device
-                         (string=? file-name install-device)))))
-            (devices))))
+         (or (and (access? root F_OK) root)
+             (find-partition-by-label root)
+             (and=> (uuid root)
+                    find-partition-by-uuid)))))
+
+;; Minimal installation device size.
+(define %min-device-size
+  (* 2 GIBIBYTE-SIZE)) ;2GiB
+
+(define (eligible-devices)
+  "Return all the available devices except the install device and the devices
+which are smaller than %MIN-DEVICE-SIZE."
+
+  (define the-installer-root-partition-path
+    (installer-root-partition-path))
+
+  (define (small-device? device)
+    (let ((length (device-length device))
+          (sector-size (device-sector-size device)))
+      (and (< (* length sector-size) %min-device-size)
+           (syslog "~a is not eligible because it is smaller than ~a.~%"
+                   (device-path device)
+                   (unit-format-custom-byte device
+                                            %min-device-size
+                                            UNIT-GIGABYTE)))))
+
+  ;; Read partition table of device and compare each path to the one
+  ;; we're booting from to determine if it is the installation
+  ;; device.
+  (define (installation-device? device)
+    ;; When using CDROM based installation, the root partition path may be the
+    ;; device path.
+    (and (or (string=? the-installer-root-partition-path
+                       (device-path device))
+             (let ((disk (disk-new device)))
+               (and disk
+                    (any (lambda (partition)
+                           (string=? the-installer-root-partition-path
+                                     (partition-get-path partition)))
+                         (disk-partitions disk)))))
+         (syslog "~a is not eligible because it is the installation device.~%"
+                 (device-path device))))
+
+  (remove
+   (lambda (device)
+     (or (installation-device? device)
+         (small-device? device)))
+   (devices)))
 
 
 ;;
@@ -1414,9 +1439,11 @@ USER-PARTITIONS, or return nothing."
             (let* ((uuids (map (lambda (file)
                                  (uuid->string (read-partition-uuid file)))
                                swap-devices)))
-              `((swap-devices (list ,@(map (lambda (uuid)
-                                             `(uuid ,uuid))
-                                           uuids))))))
+              `((swap-devices
+                 (list ,@(map (lambda (uuid)
+                                `(swap-space
+                                  (target (uuid ,uuid))))
+                              uuids))))))
       ,@(if (null? encrypted-partitions)
             '()
             `((mapped-devices
diff --git a/gnu/installer/services.scm b/gnu/installer/services.scm
index 341d8b69c8..6584fcceec 100644
--- a/gnu/installer/services.scm
+++ b/gnu/installer/services.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2019 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2021 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2021 Leo Famulari <leo@famulari.name>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -104,6 +105,17 @@
       (packages '((specification->package "nss-certs")))
       (recommended? #t))
 
+     ;; Miscellaneous system administration services.
+     (system-service
+       (name (G_ "Network time service (NTP), to set the clock automatically"))
+       (type 'administration)
+       (recommended? #t)
+       (snippet '((service ntp-service-type))))
+     (system-service
+       (name (G_ "GPM mouse daemon, to use the mouse on the console"))
+       (type 'administration)
+       (snippet '((service gpm-service-type))))
+
      ;; Network connectivity management.
      (system-service
       (name (G_ "NetworkManager network connection manager"))
diff --git a/gnu/installer/tests.scm b/gnu/installer/tests.scm
index 12d1d91608..3c049a1c85 100644
--- a/gnu/installer/tests.scm
+++ b/gnu/installer/tests.scm
@@ -221,7 +221,11 @@ ROOT-PASSWORD, and USERS."
                           (choose-network-management-tool?
                            (lambda (service)
                              (string-contains service "DHCP")))
+                          (choose-misc-service?
+                           (lambda (service)
+                             (string-contains service "NTP")))
                           (choose-other-service? (const #f)))
+
   "Converse over PORT to choose services."
   (define desktop-environments '())
 
@@ -243,7 +247,12 @@ ROOT-PASSWORD, and USERS."
      (null? desktop-environments)
      (find choose-network-management-tool? services))
 
-    ((checkbox-list (title "Other services") (text _)
+    ((checkbox-list (title "Console services") (text _)
+                    (items ,services))
+     (null? desktop-environments)
+     (filter choose-misc-service? services))
+
+    ((checkbox-list (title "Printing and document services") (text _)
                     (items ,services))
      (filter choose-other-service? services))))
 
diff --git a/gnu/installer/utils.scm b/gnu/installer/utils.scm
index bb97bc5560..9bd41e2ca0 100644
--- a/gnu/installer/utils.scm
+++ b/gnu/installer/utils.scm
@@ -74,9 +74,9 @@ number. If no percentage is found, return #f"
     (and result
          (string->number (match:substring result 1)))))
 
-(define* (run-command command #:key locale)
-  "Run COMMAND, a list of strings, in the given LOCALE.  Return true if
-COMMAND exited successfully, #f otherwise."
+(define* (run-command command)
+  "Run COMMAND, a list of strings.  Return true if COMMAND exited
+successfully, #f otherwise."
   (define env (environ))
 
   (define (pause)
@@ -90,18 +90,6 @@ COMMAND exited successfully, #f otherwise."
 
   (setenv "PATH" "/run/current-system/profile/bin")
 
-  (when locale
-    (let ((supported? (false-if-exception
-                       (setlocale LC_ALL locale))))
-      ;; If LOCALE is not supported, then set LANGUAGE, which might at
-      ;; least give us translated messages.
-      (if supported?
-          (setenv "LC_ALL" locale)
-          (setenv "LANGUAGE"
-                  (string-take locale
-                               (or (string-index locale #\_)
-                                   (string-length locale)))))))
-
   (guard (c ((invoke-error? c)
              (newline)
              (format (current-error-port)
diff --git a/gnu/local.mk b/gnu/local.mk
index 9d82fe0d3d..dceaa53145 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1,5 +1,5 @@
 # GNU Guix --- Functional package management for GNU
-# Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2021 Ludovic Courtès <ludo@gnu.org>
+# Copyright © 2012-2021, 2021-2022 Ludovic Courtès <ludo@gnu.org>
 # Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Andreas Enge <andreas@enge.fr>
 # Copyright © 2016 Mathieu Lirzin <mthl@gnu.org>
 # Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Mark H Weaver <mhw@netris.org>
@@ -11,7 +11,7 @@
 # Copyright © 2016 Ben Woodcroft <donttrustben@gmail.com>
 # Copyright © 2016, 2017, 2018, 2019 Alex Vong <alexvong1995@gmail.com>
 # Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
-# Copyright © 2016, 2017, 2018, 2019, 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+# Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 # Copyright © 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 # Copyright © 2017, 2018 Clément Lassieur <clement@lassieur.org>
 # Copyright © 2017, 2020 Mathieu Othacehe <m.othacehe@gmail.com>
@@ -19,8 +19,8 @@
 # Copyright © 2018 Amirouche Boubekki <amirouche@hypermove.net>
 # Copyright © 2018, 2019, 2020, 2021 Oleg Pykhalov <go.wigust@gmail.com>
 # Copyright © 2018 Stefan Stefanović <stefanx2ovic@gmail.com>
-# Copyright © 2018, 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
-# Copyright © 2019, 2020 Guillaume Le Vaillant <glv@posteo.net>
+# Copyright © 2018, 2020, 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+# Copyright © 2019, 2020, 2021, 2022 Guillaume Le Vaillant <glv@posteo.net>
 # Copyright © 2019, 2020 John Soo <jsoo1@asu.edu>
 # Copyright © 2019 Jonathan Brielmaier <jonathan.brielmaier@web.de>
 # Copyright © 2019 Evan Straw <evan.straw99@gmail.com>
@@ -31,7 +31,7 @@
 # Copyright © 2020 R Veera Kumar <vkor@vkten.in>
 # Copyright © 2020 Nicolò Balzarotti <nicolo@nixo.xyz>
 # Copyright © 2020 Michael Rohleder <mike@rohleder.de>
-# Copyright © 2020, 2021 Felix Gruber <felgru@posteo.net>
+# Copyright © 2020, 2021, 2022 Felix Gruber <felgru@posteo.net>
 # Copyright © 2020 Ryan Prior <rprior@protonmail.com>
 # Copyright © 2020 Jan Wielkiewicz <tona_kosmicznego_smiecia@interia.pl>
 # Copyright © 2020, 2021 Brice Waegeneire <brice@waegenei.re>
@@ -40,11 +40,15 @@
 # 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>
 # Copyright © 2021 Arun Isaac <arunisaac@systemreboot.net>
 # Copyright © 2021 Sharlatan Hellseher <sharlatanus@gmail.com>
 # Copyright © 2021 Dmitry Polyakov <polyakov@liltechdude.xyz>
 # Copyright © 2021 Andrew Tropin <andrew@trop.in>
+# Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
+# Copyright © 2022 Daniel Meißner <daniel.meissner-i4k@ruhr-uni-bochum.de>
+# Copyright © 2022 Remco van 't Veer <remco@remworks.net>
 #
 # This file is part of GNU Guix.
 #
@@ -74,16 +78,16 @@ GNU_SYSTEM_MODULES =				\
   %D%/bootloader/depthcharge.scm                \
   %D%/ci.scm					\
   %D%/home.scm					\
-  %D%/home-services.scm			\
-  %D%/home-services/symlink-manager.scm	\
-  %D%/home-services/fontutils.scm		\
-  %D%/home-services/configuration.scm		\
-  %D%/home-services/shells.scm			\
-  %D%/home-services/shepherd.scm		\
-  %D%/home-services/mcron.scm			\
-  %D%/home-services/utils.scm			\
-  %D%/home-services/xdg.scm			\
+  %D%/home/services.scm			\
+  %D%/home/services/symlink-manager.scm		\
+  %D%/home/services/fontutils.scm		\
+  %D%/home/services/shells.scm			\
+  %D%/home/services/shepherd.scm		\
+  %D%/home/services/mcron.scm			\
+  %D%/home/services/utils.scm			\
+  %D%/home/services/xdg.scm			\
   %D%/image.scm					\
+  %D%/platform.scm				\
   %D%/packages.scm				\
   %D%/packages/abduco.scm			\
   %D%/packages/abiword.scm			\
@@ -155,6 +159,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/configuration-management.scm	\
   %D%/packages/conky.scm			\
   %D%/packages/connman.scm			\
+  %D%/packages/containers.scm			\
   %D%/packages/convmv.scm			\
   %D%/packages/cook.scm				\
   %D%/packages/coq.scm				\
@@ -307,6 +312,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/inklingreader.scm		\
   %D%/packages/inkscape.scm			\
   %D%/packages/installers.scm			\
+  %D%/packages/instrumentation.scm		\
   %D%/packages/ipfs.scm			\
   %D%/packages/irc.scm  			\
   %D%/packages/irods.scm  			\
@@ -409,6 +415,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/music.scm			\
   %D%/packages/musl.scm				\
   %D%/packages/mtools.scm			\
+  %D%/packages/myrddin.scm			\
   %D%/packages/nano.scm				\
   %D%/packages/ncdu.scm				\
   %D%/packages/ncurses.scm			\
@@ -422,6 +429,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/ninja.scm			\
   %D%/packages/node.scm				\
   %D%/packages/node-xyz.scm			\
+  %D%/packages/notcurses.scm			\
   %D%/packages/noweb.scm			\
   %D%/packages/nss.scm				\
   %D%/packages/ntp.scm				\
@@ -519,6 +527,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/sawfish.scm			\
   %D%/packages/scanner.scm			\
   %D%/packages/scheme.scm			\
+  %D%/packages/spreadsheet.scm			\
   %D%/packages/screen.scm			\
   %D%/packages/scribus.scm			\
   %D%/packages/scsi.scm				\
@@ -538,6 +547,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/slang.scm			\
   %D%/packages/smalltalk.scm			\
   %D%/packages/sml.scm				\
+  %D%/packages/solidity.scm			\
   %D%/packages/speech.scm			\
   %D%/packages/sphinx.scm			\
   %D%/packages/spice.scm			\
@@ -585,7 +595,6 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/video.scm			\
   %D%/packages/vim.scm				\
   %D%/packages/virtualization.scm		\
-  %D%/packages/visidata.scm			\
   %D%/packages/vlang.scm			\
   %D%/packages/vnc.scm				\
   %D%/packages/vpn.scm				\
@@ -610,9 +619,13 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/xdisorg.scm			\
   %D%/packages/xorg.scm				\
   %D%/packages/xfce.scm				\
+  %D%/packages/zig.scm				\
   %D%/packages/zile.scm				\
   %D%/packages/zwave.scm			\
 						\
+  %D%/platforms/arm.scm		                \
+  %D%/platforms/hurd.scm	                \
+						\
   %D%/services.scm				\
   %D%/services/admin.scm			\
   %D%/services/audio.scm                        \
@@ -710,7 +723,6 @@ GNU_SYSTEM_MODULES =				\
   %D%/build/linux-modules.scm			\
   %D%/build/marionette.scm			\
   %D%/build/secret-service.scm			\
-  %D%/build/vm.scm				\
 						\
   %D%/tests.scm					\
   %D%/tests/audio.scm				\
@@ -829,10 +841,12 @@ dist_patch_DATA =						\
   %D%/packages/patches/aegisub-boost68.patch			\
   %D%/packages/patches/aegisub-make43.patch			\
   %D%/packages/patches/agg-am_c_prototype.patch			\
+  %D%/packages/patches/agg-2.5-gcc8.patch			\
   %D%/packages/patches/akonadi-paths.patch		\
   %D%/packages/patches/akonadi-not-relocatable.patch		\
   %D%/packages/patches/akonadi-timestamps.patch		\
   %D%/packages/patches/allegro-mesa-18.2.5-and-later.patch	\
+  %D%/packages/patches/alpine-fix-privacy-policy-crash.patch	\
   %D%/packages/patches/anki-mpv-args.patch			\
   %D%/packages/patches/antiword-CVE-2014-8123.patch			\
   %D%/packages/patches/antlr3-3_1-fix-java8-compilation.patch	\
@@ -844,8 +858,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/ath9k-htc-firmware-gcc.patch		\
   %D%/packages/patches/ath9k-htc-firmware-gcc-compat.patch	\
   %D%/packages/patches/ath9k-htc-firmware-objcopy.patch		\
-  %D%/packages/patches/audacity-build-with-system-portaudio.patch \
-  %D%/packages/patches/audacity-add-include.patch 		\
+  %D%/packages/patches/atlas-gfortran-compat.patch		\
   %D%/packages/patches/audiofile-fix-datatypes-in-tests.patch	\
   %D%/packages/patches/audiofile-fix-sign-conversion.patch	\
   %D%/packages/patches/audiofile-CVE-2015-7747.patch		\
@@ -864,11 +877,8 @@ dist_patch_DATA =						\
   %D%/packages/patches/avahi-localstatedir.patch		\
   %D%/packages/patches/avidemux-install-to-lib.patch		\
   %D%/packages/patches/awesome-reproducible-png.patch		\
-  %D%/packages/patches/aws-c-cal-cmake-prefix.patch		\
-  %D%/packages/patches/aws-c-event-stream-cmake-prefix.patch  \
-  %D%/packages/patches/aws-c-io-cmake-prefix.patch		\
-  %D%/packages/patches/aws-c-io-disable-networking-tests.patch		\
-  %D%/packages/patches/aws-checksums-cmake-prefix.patch		\
+  %D%/packages/patches/awesome-4.3-fno-common.patch		\
+  %D%/packages/patches/aws-c-auth-install-private-headers.patch	\
   %D%/packages/patches/azr3.patch				\
   %D%/packages/patches/bash-reproducible-linux-pgrp-pipe.patch	\
   %D%/packages/patches/bash-completion-directories.patch	\
@@ -876,7 +886,8 @@ dist_patch_DATA =						\
   %D%/packages/patches/bastet-change-source-of-unordered_set.patch	\
   %D%/packages/patches/bazaar-CVE-2017-14176.patch		\
   %D%/packages/patches/bc-fix-cross-compilation.patch		\
-  %D%/packages/patches/bear-disable-preinstall-tests.patch	\
+  %D%/packages/patches/bdb-5.3-atomics-on-gcc-9.patch		\
+  %D%/packages/patches/bind-re-add-attr-constructor-priority.patch	\
   %D%/packages/patches/brightnessctl-elogind-support.patch	\
   %D%/packages/patches/bsd-games-2.17-64bit.patch		\
   %D%/packages/patches/bsd-games-add-configure-config.patch	\
@@ -890,36 +901,35 @@ dist_patch_DATA =						\
   %D%/packages/patches/bsd-games-prevent-name-collisions.patch	\
   %D%/packages/patches/bsd-games-stdio.h.patch			\
   %D%/packages/patches/beancount-disable-googleapis-fonts.patch	\
-  %D%/packages/patches/behave-skip-a-couple-of-tests.patch	\
   %D%/packages/patches/beignet-correct-file-names.patch		\
-  %D%/packages/patches/biber-fix-encoding-write.patch		\
-  %D%/packages/patches/biber-sortinithash.patch			\
   %D%/packages/patches/bidiv-update-fribidi.patch		\
+  %D%/packages/patches/binutils-2.37-file-descriptor-leak.patch	\
   %D%/packages/patches/binutils-boot-2.20.1a.patch		\
   %D%/packages/patches/binutils-loongson-workaround.patch	\
   %D%/packages/patches/binutils-mingw-w64-timestamp.patch	\
   %D%/packages/patches/binutils-mingw-w64-deterministic.patch	\
-  %D%/packages/patches/blender-2.79-gcc8.patch			\
-  %D%/packages/patches/blender-2.79-gcc9.patch			\
-  %D%/packages/patches/blender-2.79-newer-ffmpeg.patch		\
-  %D%/packages/patches/blender-2.79-oiio2.patch			\
-  %D%/packages/patches/blender-2.79-python-3.7-fix.patch	\
-  %D%/packages/patches/blender-2.79-python-3.8-fix.patch	\
+  %D%/packages/patches/binutils-CVE-2021-45078.patch		\
   %D%/packages/patches/bpftrace-disable-bfd-disasm.patch	\
   %D%/packages/patches/byobu-writable-status.patch		\
+  %D%/packages/patches/bubblewrap-fix-locale-in-tests.patch	\
+  %D%/packages/patches/cabal-install-base16-bytestring1.0.patch		\
+  %D%/packages/patches/cabal-install-ghc8.10.patch		\
   %D%/packages/patches/cairo-CVE-2018-19876.patch		\
   %D%/packages/patches/cairo-CVE-2020-35492.patch		\
+  %D%/packages/patches/calibre-fix-zeroconf.patch		\
   %D%/packages/patches/calibre-no-updates-dialog.patch		\
   %D%/packages/patches/calibre-remove-test-sqlite.patch		\
   %D%/packages/patches/calibre-remove-test-unrar.patch		\
   %D%/packages/patches/casync-renameat2-declaration.patch	\
   %D%/packages/patches/catdoc-CVE-2017-11110.patch		\
-  %D%/packages/patches/ccache-fix-basedir-test.patch		\
   %D%/packages/patches/circos-remove-findbin.patch		\
   %D%/packages/patches/cdparanoia-fpic.patch			\
+  %D%/packages/patches/cdrkit-libre-cross-compile.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/ceph-boost-compat.patch			\
+  %D%/packages/patches/ceph-rocksdb-compat.patch		\
+  %D%/packages/patches/cheese-vala-update.patch		        \
   %D%/packages/patches/chmlib-inttypes.patch			\
   %D%/packages/patches/cl-asdf-config-directories.patch		\
   %D%/packages/patches/clamav-config-llvm-libs.patch		\
@@ -929,9 +939,12 @@ dist_patch_DATA =						\
   %D%/packages/patches/clang-3.8-libc-search-path.patch		\
   %D%/packages/patches/clang-6.0-libc-search-path.patch		\
   %D%/packages/patches/clang-7.0-libc-search-path.patch		\
+  %D%/packages/patches/clang-8.0-libc-search-path.patch		\
   %D%/packages/patches/clang-9.0-libc-search-path.patch		\
   %D%/packages/patches/clang-10.0-libc-search-path.patch	\
   %D%/packages/patches/clang-11.0-libc-search-path.patch	\
+  %D%/packages/patches/clang-12.0-libc-search-path.patch	\
+  %D%/packages/patches/clang-13.0-libc-search-path.patch	\
   %D%/packages/patches/clang-runtime-asan-build-fixes.patch	\
   %D%/packages/patches/clang-runtime-esan-build-fixes.patch	\
   %D%/packages/patches/clang-runtime-9-libsanitizer-mode-field.patch	\
@@ -939,56 +952,58 @@ dist_patch_DATA =						\
   %D%/packages/patches/clang-runtime-3.9-libsanitizer-mode-field.patch	\
   %D%/packages/patches/clang-runtime-3.8-libsanitizer-mode-field.patch	\
   %D%/packages/patches/classpath-aarch64-support.patch		\
+  %D%/packages/patches/classpath-miscompilation.patch		\
+  %D%/packages/patches/cling-use-shared-library.patch		\
   %D%/packages/patches/clucene-pkgconfig.patch			\
   %D%/packages/patches/cmake-curl-certificates.patch		\
   %D%/packages/patches/coda-use-system-libs.patch		\
   %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/cool-retro-term-wctype.patch		\
+  %D%/packages/patches/coreutils-gnulib-tests.patch		\
+  %D%/packages/patches/coq-fix-envvars.patch			\
   %D%/packages/patches/coreutils-ls.patch			\
-  %D%/packages/patches/cpufrequtils-fix-aclocal.patch		\
   %D%/packages/patches/cpuinfo-system-libraries.patch		\
   %D%/packages/patches/crawl-upgrade-saves.patch		\
   %D%/packages/patches/crda-optional-gcrypt.patch		\
   %D%/packages/patches/clucene-contribs-lib.patch               \
   %D%/packages/patches/cube-nocheck.patch			\
-  %D%/packages/patches/cups-CVE-2020-10001.patch		\
   %D%/packages/patches/curl-use-ssl-cert-env.patch		\
-  %D%/packages/patches/curl-7.76-use-ssl-cert-env.patch	\
-  %D%/packages/patches/curl-7.77-tls-priority-string.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		\
   %D%/packages/patches/cyrus-sasl-CVE-2019-19906.patch		\
   %D%/packages/patches/c++-gsl-find-system-gtest.patch		\
+  %D%/packages/patches/c++-gsl-move-array-bounds-tests.patch	\
   %D%/packages/patches/date-output-pkg-config-files.patch	\
   %D%/packages/patches/datefudge-gettimeofday.patch		\
   %D%/packages/patches/dbacl-include-locale.h.patch		\
   %D%/packages/patches/dbus-helper-search-path.patch		\
-  %D%/packages/patches/dbus-CVE-2020-12049.patch		\
   %D%/packages/patches/dbus-c++-gcc-compat.patch		\
   %D%/packages/patches/dbus-c++-threading-mutex.patch		\
   %D%/packages/patches/dbxfs-remove-sentry-sdk.patch		\
+  %D%/packages/patches/dealii-fix-compiliation-with-boost-1.78.patch	\
+  %D%/packages/patches/dealii-fix-sundials.patch		\
   %D%/packages/patches/debops-constants-for-external-program-names.patch \
   %D%/packages/patches/debops-debops-defaults-fall-back-to-less.patch \
   %D%/packages/patches/dee-vapi.patch			\
   %D%/packages/patches/desmume-gcc6-fixes.patch			\
   %D%/packages/patches/desmume-gcc7-fixes.patch			\
   %D%/packages/patches/dfu-programmer-fix-libusb.patch		\
-  %D%/packages/patches/diffutils-gets-undeclared.patch		\
-  %D%/packages/patches/disarchive-cross-compilation.patch	\
+  %D%/packages/patches/diffoscope-fix-llvm-test.patch		\
+  %D%/packages/patches/diffutils-fix-signal-processing.patch	\
   %D%/packages/patches/dkimproxy-add-ipv6-support.patch		\
   %D%/packages/patches/docbook-xsl-nonrecursive-string-subst.patch	\
+  %D%/packages/patches/docbook-xsl-support-old-url.patch	\
   %D%/packages/patches/doc++-include-directives.patch		\
   %D%/packages/patches/doc++-segfault-fix.patch			\
   %D%/packages/patches/docker-fix-tests.patch			\
   %D%/packages/patches/dovecot-trees-support-dovecot-2.3.patch	\
-  %D%/packages/patches/doxygen-test.patch			\
-  %D%/packages/patches/doxygen-1.8.17-runtests.patch		\
   %D%/packages/patches/dstat-fix-crash-when-specifying-delay.patch	\
   %D%/packages/patches/dstat-skip-devices-without-io.patch	\
-  %D%/packages/patches/dune-istl-2.7-fix-non-mpi-tests.patch	\
   %D%/packages/patches/dvd+rw-tools-add-include.patch 		\
+  %D%/packages/patches/dynaconf-unvendor-deps.patch		\
   %D%/packages/patches/ecl-16-format-directive-limit.patch	\
   %D%/packages/patches/ecl-16-ignore-stderr-write-error.patch	\
   %D%/packages/patches/ecl-16-libffi.patch			\
@@ -1001,8 +1016,8 @@ dist_patch_DATA =						\
   %D%/packages/patches/elixir-path-length.patch			\
   %D%/packages/patches/elm-compiler-disable-reactor.patch	\
   %D%/packages/patches/elm-compiler-fix-map-key.patch		\
+  %D%/packages/patches/elogind-revert-polkit-detection.patch	\
   %D%/packages/patches/emacs-exec-path.patch			\
-  %D%/packages/patches/emacs-exwm-fix-fullscreen-states.patch	\
   %D%/packages/patches/emacs-fix-scheme-indent-function.patch	\
   %D%/packages/patches/emacs-ignore-empty-xim-styles.patch	\
   %D%/packages/patches/emacs-json-reformat-fix-tests.patch	\
@@ -1015,15 +1030,12 @@ dist_patch_DATA =						\
   %D%/packages/patches/emacs-wordnut-require-adaptive-wrap.patch	\
   %D%/packages/patches/enjarify-setup-py.patch			\
   %D%/packages/patches/enlightenment-fix-setuid-path.patch	\
+  %D%/packages/patches/eog-update-libportal-usage.patch		\
+  %D%/packages/patches/epiphany-update-libportal-usage.patch	\
   %D%/packages/patches/erlang-man-path.patch			\
   %D%/packages/patches/esmtp-add-lesmtp.patch		\
   %D%/packages/patches/eudev-rules-directory.patch		\
   %D%/packages/patches/evilwm-lost-focus-bug.patch		\
-  %D%/packages/patches/evolution-CVE-2020-11879.patch		\
-  %D%/packages/patches/evolution-data-server-CVE-2020-14928.patch	\
-  %D%/packages/patches/evolution-data-server-CVE-2020-16117.patch	\
-  %D%/packages/patches/evolution-data-server-locales.patch	\
-  %D%/packages/patches/evolution-data-server-libical-compat.patch	\
   %D%/packages/patches/exercism-disable-self-update.patch	\
   %D%/packages/patches/extempore-unbundle-external-dependencies.patch	\
   %D%/packages/patches/extundelete-e2fsprogs-1.44.patch		\
@@ -1037,32 +1049,34 @@ dist_patch_DATA =						\
   %D%/packages/patches/fasthenry-spSolve.patch			\
   %D%/packages/patches/fasthenry-spFactor.patch			\
   %D%/packages/patches/fbreader-curl-7.62.patch		\
+  %D%/packages/patches/fifengine-boost-compat.patch		\
   %D%/packages/patches/fifengine-swig-compat.patch		\
   %D%/packages/patches/fifo-map-fix-flags-for-gcc.patch		\
   %D%/packages/patches/fifo-map-remove-catch.hpp.patch		\
   %D%/packages/patches/findutils-localstatedir.patch		\
-  %D%/packages/patches/findutils-test-rwlock-threads.patch	\
   %D%/packages/patches/flann-cmake-3.11.patch			\
+  %D%/packages/patches/flatpak-fix-path.patch			\
+  %D%/packages/patches/fontconfig-cache-ignore-mtime.patch	\
   %D%/packages/patches/foobillard++-pkg-config.patch		\
   %D%/packages/patches/foomatic-filters-CVE-2015-8327.patch	\
   %D%/packages/patches/foomatic-filters-CVE-2015-8560.patch	\
-  %D%/packages/patches/fontconfig-hurd-path-max.patch		\
   %D%/packages/patches/fp16-system-libraries.patch		\
   %D%/packages/patches/fpc-reproducibility.patch		\
   %D%/packages/patches/fplll-std-fenv.patch     		\
+  %D%/packages/patches/freecad-boost-serialization.patch	\
+  %D%/packages/patches/freecad-vtk9.patch			\
   %D%/packages/patches/freedink-engine-fix-sdl-hints.patch	\
+  %D%/packages/patches/freeglut-gcc-compat.patch		\
   %D%/packages/patches/freeimage-unbundle.patch		\
   %D%/packages/patches/fuse-overlapping-headers.patch				\
   %D%/packages/patches/fxdiv-system-libraries.patch		\
   %D%/packages/patches/gajim-honour-GAJIM_PLUGIN_PATH.patch	\
-  %D%/packages/patches/ganeti-deterministic-manual.patch	\
   %D%/packages/patches/ganeti-disable-version-symlinks.patch	\
-  %D%/packages/patches/ganeti-drbd-compat.patch			\
+  %D%/packages/patches/ganeti-haskell-compat.patch		\
   %D%/packages/patches/ganeti-haskell-pythondir.patch		\
-  %D%/packages/patches/ganeti-os-disk-size.patch		\
-  %D%/packages/patches/ganeti-preserve-PYTHONPATH.patch		\
   %D%/packages/patches/ganeti-shepherd-master-failover.patch	\
   %D%/packages/patches/ganeti-shepherd-support.patch		\
+  %D%/packages/patches/ganeti-sphinx-compat.patch		\
   %D%/packages/patches/gash-utils-ls-test.patch			\
   %D%/packages/patches/gawk-shell.patch				\
   %D%/packages/patches/gcc-arm-bug-71399.patch			\
@@ -1071,6 +1085,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/gcc-boot-2.95.3.patch			\
   %D%/packages/patches/gcc-boot-4.6.4.patch			\
   %D%/packages/patches/gcc-cross-environment-variables.patch	\
+  %D%/packages/patches/gcc-cross-gxx-include-dir.patch          \
   %D%/packages/patches/gcc-fix-texi2pod.patch			\
   %D%/packages/patches/gcc-4.8-libsanitizer-fix.patch		\
   %D%/packages/patches/gcc-4.9-libsanitizer-fix.patch		\
@@ -1088,6 +1103,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/gcc-4.9.3-mingw-gthr-default.patch	\
   %D%/packages/patches/gcc-5-hurd.patch				\
   %D%/packages/patches/gcc-5.0-libvtv-runpath.patch		\
+  %D%/packages/patches/gcc-5-fix-powerpc64le-build.patch	\
   %D%/packages/patches/gcc-5-source-date-epoch-1.patch		\
   %D%/packages/patches/gcc-5-source-date-epoch-2.patch		\
   %D%/packages/patches/gcc-6-arm-none-eabi-multilib.patch	\
@@ -1102,51 +1118,33 @@ dist_patch_DATA =						\
   %D%/packages/patches/gcc-8-strmov-store-file-names.patch	\
   %D%/packages/patches/gcc-9-asan-fix-limits-include.patch	\
   %D%/packages/patches/gcc-9-strmov-store-file-names.patch	\
-  %D%/packages/patches/gdb-hurd.patch				\
+  %D%/packages/patches/gcc-10-cross-environment-variables.patch \
   %D%/packages/patches/gd-fix-tests-on-i686.patch		\
   %D%/packages/patches/gd-brect-bounds.patch			\
-  %D%/packages/patches/gdk-pixbuf-CVE-2020-29385.patch		\
+  %D%/packages/patches/gd-Revert-fix-303-gdlib.pc.patch		\
+  %D%/packages/patches/gdb-fix-gnu-nat-build.patch		\
   %D%/packages/patches/gdm-default-session.patch		\
-  %D%/packages/patches/geary-CVE-2020-24661.patch		\
-  %D%/packages/patches/genimage-signedness.patch		\
+  %D%/packages/patches/gdm-elogind-support.patch		\
+  %D%/packages/patches/gdm-remove-hardcoded-xwayland-path.patch	\
+  %D%/packages/patches/gdm-wayland-session-wrapper-from-env.patch	\
+  %D%/packages/patches/gdm-pass-gdk-pixbuf-loader-env.patch	\
+  %D%/packages/patches/geeqie-clutter.patch			\
+  %D%/packages/patches/genimage-mke2fs-test.patch		\
   %D%/packages/patches/geoclue-config.patch			\
   %D%/packages/patches/ghc-8.0-fall-back-to-madv_dontneed.patch	\
   %D%/packages/patches/ghc-testsuite-dlopen-pie.patch		\
-  %D%/packages/patches/ghc-diff-swap-cover-args.patch		\
-  %D%/packages/patches/ghc-haddock-api-fix-haddock.patch	\
-  %D%/packages/patches/ghc-hpack-fix-tests.patch		\
-  %D%/packages/patches/ghc-microlens-aeson-fix-tests.patch	\
+  %D%/packages/patches/ghc-language-haskell-extract-ghc-8.10.patch	\
   %D%/packages/patches/ghc-monad-par-fix-tests.patch		\
-  %D%/packages/patches/ghc-pandoc-fix-html-tests.patch		\
-  %D%/packages/patches/ghc-pandoc-fix-latex-test.patch		\
-  %D%/packages/patches/ghostscript-CVE-2020-15900.patch		\
-  %D%/packages/patches/ghostscript-freetype-compat.patch	\
   %D%/packages/patches/ghostscript-no-header-id.patch		\
   %D%/packages/patches/ghostscript-no-header-uuid.patch		\
   %D%/packages/patches/ghostscript-no-header-creationdate.patch \
   %D%/packages/patches/giara-fix-login.patch                      \
+  %D%/packages/patches/glade-gls-set-script-name.patch	        \
+  %D%/packages/patches/glade-test-widget-null-icon.patch	\
   %D%/packages/patches/glib-appinfo-watch.patch			\
-  %D%/packages/patches/glib-tests-timer.patch			\
-  %D%/packages/patches/glib-CVE-2021-27218.patch		\
-  %D%/packages/patches/glib-CVE-2021-27219-01.patch		\
-  %D%/packages/patches/glib-CVE-2021-27219-02.patch		\
-  %D%/packages/patches/glib-CVE-2021-27219-03.patch		\
-  %D%/packages/patches/glib-CVE-2021-27219-04.patch		\
-  %D%/packages/patches/glib-CVE-2021-27219-05.patch		\
-  %D%/packages/patches/glib-CVE-2021-27219-06.patch		\
-  %D%/packages/patches/glib-CVE-2021-27219-07.patch		\
-  %D%/packages/patches/glib-CVE-2021-27219-08.patch		\
-  %D%/packages/patches/glib-CVE-2021-27219-09.patch		\
-  %D%/packages/patches/glib-CVE-2021-27219-10.patch		\
-  %D%/packages/patches/glib-CVE-2021-27219-11.patch		\
-  %D%/packages/patches/glib-CVE-2021-27219-12.patch		\
-  %D%/packages/patches/glib-CVE-2021-27219-13.patch		\
-  %D%/packages/patches/glib-CVE-2021-27219-14.patch		\
-  %D%/packages/patches/glib-CVE-2021-27219-15.patch		\
-  %D%/packages/patches/glib-CVE-2021-27219-16.patch		\
-  %D%/packages/patches/glib-CVE-2021-27219-17.patch		\
-  %D%/packages/patches/glib-CVE-2021-27219-18.patch		\
-  %D%/packages/patches/glib-CVE-2021-28153.patch		\
+  %D%/packages/patches/glib-networking-gnutls-binding.patch	\
+  %D%/packages/patches/glib-networking-32-bit-time.patch	\
+  %D%/packages/patches/glib-skip-failing-test.patch		\
   %D%/packages/patches/glibc-CVE-2018-11236.patch		\
   %D%/packages/patches/glibc-CVE-2018-11237.patch		\
   %D%/packages/patches/glibc-CVE-2019-7309.patch		\
@@ -1158,8 +1156,12 @@ dist_patch_DATA =						\
   %D%/packages/patches/glibc-bootstrap-system-2.2.5.patch 	\
   %D%/packages/patches/glibc-bootstrap-system-2.16.0.patch 	\
   %D%/packages/patches/glibc-bootstrap-system.patch		\
+  %D%/packages/patches/glibc-cross-objcopy.patch		\
+  %D%/packages/patches/glibc-cross-objdump.patch		\
+  %D%/packages/patches/glibc-dl-cache.patch			\
   %D%/packages/patches/glibc-hidden-visibility-ldconfig.patch	\
   %D%/packages/patches/glibc-hurd-clock_gettime_monotonic.patch	\
+  %D%/packages/patches/glibc-2.31-hurd-clock_gettime_monotonic.patch	\
   %D%/packages/patches/glibc-hurd-clock_t_centiseconds.patch	\
   %D%/packages/patches/glibc-hurd-gettyent.patch		\
   %D%/packages/patches/glibc-hurd-mach-print.patch		\
@@ -1170,41 +1172,44 @@ dist_patch_DATA =						\
   %D%/packages/patches/glibc-locales.patch			\
   %D%/packages/patches/glibc-locales-2.28.patch			\
   %D%/packages/patches/glibc-reinstate-prlimit64-fallback.patch	\
+  %D%/packages/patches/glibc-skip-c++.patch			\
   %D%/packages/patches/glibc-versioned-locpath.patch		\
-  %D%/packages/patches/glibc-2.27-git-fixes.patch		\
-  %D%/packages/patches/glibc-2.28-git-fixes.patch		\
   %D%/packages/patches/glibc-2.29-git-updates.patch     	\
-  %D%/packages/patches/glibc-2.27-supported-locales.patch     	\
-  %D%/packages/patches/glibc-2.28-supported-locales.patch     	\
   %D%/packages/patches/glibc-2.29-supported-locales.patch     	\
+  %D%/packages/patches/glibc-static-nss.patch			\
   %D%/packages/patches/glibc-supported-locales.patch     	\
   %D%/packages/patches/gmp-arm-asm-nothumb.patch		\
   %D%/packages/patches/gmp-faulty-test.patch			\
   %D%/packages/patches/gnash-fix-giflib-version.patch	        \
-  %D%/packages/patches/gnome-shell-theme.patch			\
-  %D%/packages/patches/gnome-shell-disable-test.patch		\
-  %D%/packages/patches/gnome-shell-CVE-2020-17489.patch		\
+  %D%/packages/patches/gnome-boxes-add-guix-logo.patch		\
+  %D%/packages/patches/gnome-builder-update-libportal.patch		\
+  %D%/packages/patches/gnome-control-center-libexecdir.patch	\
+  %D%/packages/patches/gnome-online-miners-tracker-3.patch	\
+  %D%/packages/patches/gnome-screenshot-meson-0.60.patch	\
   %D%/packages/patches/gnome-settings-daemon-gc.patch		\
-  %D%/packages/patches/gnome-todo-delete-esource-duplicate.patch \
+  %D%/packages/patches/gnome-session-support-elogind.patch      \
+  %D%/packages/patches/gnome-todo-libportal.patch		\
   %D%/packages/patches/gnome-tweaks-search-paths.patch		\
   %D%/packages/patches/gnupg-default-pinentry.patch		\
+  %D%/packages/patches/gnupg-1-build-with-gcc10.patch		\
   %D%/packages/patches/gnutls-skip-trust-store-test.patch	\
   %D%/packages/patches/gnutls-cross.patch			\
-  %D%/packages/patches/gnutls-CVE-2021-20231.patch		\
-  %D%/packages/patches/gnutls-CVE-2021-20232.patch		\
+  %D%/packages/patches/gnutls-guile-eintr-eagain.patch		\
   %D%/packages/patches/gobject-introspection-absolute-shlib-path.patch \
   %D%/packages/patches/gobject-introspection-cc.patch		\
   %D%/packages/patches/gobject-introspection-girepository.patch	\
   %D%/packages/patches/go-fix-script-tests.patch			\
+  %D%/packages/patches/go-github-com-golang-snappy-32bit-test.patch \
   %D%/packages/patches/go-github-com-urfave-cli-fix-tests.patch \
   %D%/packages/patches/go-github-com-urfave-cli-v2-fix-tests.patch \
   %D%/packages/patches/go-skip-gc-test.patch			\
+  %D%/packages/patches/gpaste-fix-paths.patch			\
   %D%/packages/patches/gpm-glibc-2.26.patch			\
   %D%/packages/patches/gpodder-disable-updater.patch		\
   %D%/packages/patches/gpsbabel-fix-i686-test.patch		\
   %D%/packages/patches/grantlee-merge-theme-dirs.patch		\
-  %D%/packages/patches/graphviz-CVE-2020-18032.patch		\
   %D%/packages/patches/grep-timing-sensitive-test.patch		\
+  %D%/packages/patches/grfcodec-gcc-compat.patch		\
   %D%/packages/patches/grocsvs-dont-use-admiral.patch		\
   %D%/packages/patches/gromacs-tinyxml2.patch			\
   %D%/packages/patches/groovy-add-exceptionutilsgenerator.patch	\
@@ -1223,17 +1228,24 @@ dist_patch_DATA =						\
   %D%/packages/patches/guile-3.0-linux-syscalls.patch		\
   %D%/packages/patches/guile-fibers-destroy-peer-schedulers.patch \
   %D%/packages/patches/guile-gdbm-ffi-support-gdbm-1.14.patch	\
+  %D%/packages/patches/guile-git-adjust-for-libgit2-1.2.0.patch \
   %D%/packages/patches/guile-present-coding.patch		\
   %D%/packages/patches/guile-rsvg-pkgconfig.patch		\
   %D%/packages/patches/guile-emacs-fix-configure.patch		\
+  %D%/packages/patches/guile-email-fix-tests.patch		\
+  %D%/packages/patches/guile-ssh-fix-test-suite.patch		\
+  %D%/packages/patches/guile-ssh-read-error.patch		\
+  %D%/packages/patches/gtk2-fix-builder-test.patch		\
   %D%/packages/patches/gtk2-respect-GUIX_GTK2_PATH.patch	\
   %D%/packages/patches/gtk2-respect-GUIX_GTK2_IM_MODULE_FILE.patch \
   %D%/packages/patches/gtk2-theme-paths.patch			\
   %D%/packages/patches/gtk3-respect-GUIX_GTK3_PATH.patch	\
   %D%/packages/patches/gtk3-respect-GUIX_GTK3_IM_MODULE_FILE.patch \
+  %D%/packages/patches/gtk-doc-respect-xml-catalog.patch	\
+  %D%/packages/patches/gtk-introspection-test.patch		\
+  %D%/packages/patches/gtk4-respect-GUIX_GTK4_PATH.patch    	\
   %D%/packages/patches/gtkglext-disable-disable-deprecated.patch \
   %D%/packages/patches/gtksourceview-2-add-default-directory.patch \
-  %D%/packages/patches/gvfs-add-support-for-libplist-2.2.patch	\
   %D%/packages/patches/gzdoom-search-in-installed-share.patch	\
   %D%/packages/patches/gzdoom-find-system-libgme.patch	\
   %D%/packages/patches/hdf4-architectures.patch 		\
@@ -1248,32 +1260,34 @@ dist_patch_DATA =						\
   %D%/packages/patches/hdf-eos5-remove-gctp.patch		\
   %D%/packages/patches/hdf-eos5-fix-szip.patch			\
   %D%/packages/patches/hdf-eos5-fortrantests.patch		\
-  %D%/packages/patches/hexchat-add-libera-chat.patch		\
+  %D%/packages/patches/hedgewars-network-bsd.patch		\
+  %D%/packages/patches/helm-fix-gcc-9-build.patch		\
   %D%/packages/patches/http-parser-CVE-2020-8287.patch		\
+  %D%/packages/patches/htslib-for-stringtie.patch		\
   %D%/packages/patches/hubbub-sort-entities.patch		\
+  %D%/packages/patches/hueplusplus-mbedtls.patch		\
   %D%/packages/patches/hurd-cross.patch				\
   %D%/packages/patches/hurd-xattr.patch				\
   %D%/packages/patches/hydra-disable-darcs-test.patch		\
+  %D%/packages/patches/i7z-gcc-10.patch				\
   %D%/packages/patches/icecat-makeicecat.patch			\
   %D%/packages/patches/icecat-avoid-bundled-libraries.patch	\
   %D%/packages/patches/icecat-use-older-reveal-hidden-html.patch	\
   %D%/packages/patches/icecat-use-system-graphite2+harfbuzz.patch	\
   %D%/packages/patches/icecat-use-system-media-libs.patch	\
-  %D%/packages/patches/icedtea-6-extend-hotspot-aarch64-support.patch	\
-  %D%/packages/patches/icedtea-7-hotspot-aarch64-use-c++98.patch	\
-  %D%/packages/patches/icu4c-CVE-2020-10531.patch  		\
+  %D%/packages/patches/icedtea-7-hotspot-aarch64-use-c++98.patch\
   %D%/packages/patches/id3lib-CVE-2007-4460.patch			\
   %D%/packages/patches/id3lib-UTF16-writing-bug.patch			\
   %D%/packages/patches/idris-disable-test.patch			\
+  %D%/packages/patches/idris-build-with-haskeline-0.8.patch	\
+  %D%/packages/patches/idris-build-with-megaparsec-9.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/inetutils-hurd.patch			\
   %D%/packages/patches/inkscape-poppler-0.76.patch		\
   %D%/packages/patches/instead-use-games-path.patch		\
-  %D%/packages/patches/inkscape-1.1-fix-build-witch-gcc7.5.patch	\
   %D%/packages/patches/intel-xed-fix-nondeterminism.patch	\
   %D%/packages/patches/intltool-perl-compatibility.patch	\
   %D%/packages/patches/iputils-libcap-compat.patch		\
@@ -1283,7 +1297,8 @@ dist_patch_DATA =						\
   %D%/packages/patches/isl-0.11.1-aarch64-support.patch	\
   %D%/packages/patches/json-c-0.13-CVE-2020-12762.patch	\
   %D%/packages/patches/json-c-0.12-CVE-2020-12762.patch	\
-  %D%/packages/patches/jacal-fix-texinfo.patch			\
+  %D%/packages/patches/jsoncpp-pkg-config-version.patch		\
+  %D%/packages/patches/jami-fix-crash-on-quit.patch		\
   %D%/packages/patches/jamvm-1.5.1-aarch64-support.patch	\
   %D%/packages/patches/jamvm-1.5.1-armv7-support.patch	\
   %D%/packages/patches/jamvm-2.0.0-aarch64-support.patch	\
@@ -1305,14 +1320,15 @@ dist_patch_DATA =						\
   %D%/packages/patches/jfsutils-add-sysmacros.patch		\
   %D%/packages/patches/jfsutils-gcc-compat.patch		\
   %D%/packages/patches/jfsutils-include-systypes.patch		\
-  %D%/packages/patches/jsoncpp-fix-inverted-case.patch		\
   %D%/packages/patches/julia-SOURCE_DATE_EPOCH-mtime.patch	\
   %D%/packages/patches/julia-tracker-16-compat.patch		\
+  %D%/packages/patches/julia-allow-parallel-build.patch		\
   %D%/packages/patches/kdbusaddons-kinit-file-name.patch	\
-  %D%/packages/patches/libblockdev-glib-compat.patch		\
   %D%/packages/patches/libffi-3.3-powerpc-fixes.patch		\
   %D%/packages/patches/libffi-float128-powerpc64le.patch	\
+  %D%/packages/patches/librime-fix-build-with-gcc10.patch	\
   %D%/packages/patches/libvirt-add-install-prefix.patch	\
+  %D%/packages/patches/libvirt-create-machine-cgroup.patch      \
   %D%/packages/patches/libziparchive-add-includes.patch		\
   %D%/packages/patches/localed-xorg-keyboard.patch		\
   %D%/packages/patches/kdiagram-Fix-missing-link-libraries.patch \
@@ -1344,9 +1360,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/lcalc-default-parameters-2.patch		\
   %D%/packages/patches/lcalc-lcommon-h.patch    		\
   %D%/packages/patches/lcalc-using-namespace-std.patch 		\
-  %D%/packages/patches/lcms-CVE-2018-16435.patch		\
-  %D%/packages/patches/ldc-bootstrap-disable-tests.patch	\
-  %D%/packages/patches/ldc-disable-phobos-tests.patch		\
   %D%/packages/patches/ldns-drill-examples.patch		\
   %D%/packages/patches/leela-zero-gtest.patch			\
   %D%/packages/patches/less-hurd-path-max.patch			\
@@ -1359,7 +1372,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/libbonobo-activation-test-race.patch	\
   %D%/packages/patches/libcaca-CVE-2021-3410-pt1.patch		\
   %D%/packages/patches/libcaca-CVE-2021-3410-pt2.patch		\
-  %D%/packages/patches/libcacard-unknown-variable.patch		\
   %D%/packages/patches/libcanberra-sound-theme-freedesktop.patch \
   %D%/packages/patches/libcanberra-wayland-crash.patch \
   %D%/packages/patches/libcroco-CVE-2020-12825.patch		\
@@ -1382,6 +1394,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/libmad-length-check.patch		\
   %D%/packages/patches/libmad-md_size.patch			\
   %D%/packages/patches/libmad-mips-newgcc.patch			\
+  %D%/packages/patches/libmicrohttpd-0.9.73-test-ssl3.patch	\
   %D%/packages/patches/libmp4v2-c++11.patch			\
   %D%/packages/patches/libmpeg2-arm-private-symbols.patch	\
   %D%/packages/patches/libmpeg2-global-symbol-test.patch	\
@@ -1395,15 +1408,18 @@ dist_patch_DATA =						\
   %D%/packages/patches/libtgvoip-disable-webrtc.patch 		\
   %D%/packages/patches/libtheora-config-guess.patch		\
   %D%/packages/patches/libtirpc-hurd.patch			\
-  %D%/packages/patches/libtirpc-hurd-client.patch		\
   %D%/packages/patches/libtommath-fix-linkage.patch		\
   %D%/packages/patches/libtool-skip-tests2.patch		\
+  %D%/packages/patches/libunwind-julia-fix-GCC10-fno-common.patch \
   %D%/packages/patches/libusb-0.1-disable-tests.patch		\
   %D%/packages/patches/libusb-for-axoloti.patch			\
   %D%/packages/patches/libutils-add-includes.patch		\
   %D%/packages/patches/libutils-remove-damaging-includes.patch	\
   %D%/packages/patches/libvdpau-va-gl-unbundle.patch		\
   %D%/packages/patches/libvpx-CVE-2016-2818.patch		\
+  %D%/packages/patches/libxml2-parent-pointers.patch		\
+  %D%/packages/patches/libxml2-terminating-newline.patch	\
+  %D%/packages/patches/libxml2-xpath-recursion-limit.patch	\
   %D%/packages/patches/libxml2-xpath0-Add-option-xpath0.patch	\
   %D%/packages/patches/libxslt-generated-ids.patch		\
   %D%/packages/patches/libxt-guix-search-paths.patch		\
@@ -1417,10 +1433,12 @@ dist_patch_DATA =						\
   %D%/packages/patches/linux-libre-support-for-Pinebook-Pro.patch \
   %D%/packages/patches/linux-libre-arm64-generic-pinebook-lcd.patch \
   %D%/packages/patches/linux-pam-no-setfsuid.patch		\
+  %D%/packages/patches/linuxdcpp-openssl-1.1.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-3.6-fix-build-with-gcc-10.patch	\
   %D%/packages/patches/llvm-9-fix-bitcast-miscompilation.patch	\
   %D%/packages/patches/llvm-9-fix-lpad-miscompilation.patch	\
   %D%/packages/patches/llvm-9-fix-scev-miscompilation.patch	\
@@ -1436,15 +1454,18 @@ dist_patch_DATA =						\
   %D%/packages/patches/lua51-liblua-so.patch                    \
   %D%/packages/patches/lua51-pkgconfig.patch                    \
   %D%/packages/patches/lua-liblua-so.patch                      \
+  %D%/packages/patches/lua-5.4-pkgconfig.patch			\
+  %D%/packages/patches/lua-5.4-liblua-so.patch			\
   %D%/packages/patches/luajit-no_ldconfig.patch			\
   %D%/packages/patches/luit-posix.patch				\
   %D%/packages/patches/lvm2-static-link.patch			\
   %D%/packages/patches/mailutils-variable-lookup.patch		\
   %D%/packages/patches/make-impure-dirs.patch			\
   %D%/packages/patches/marble-qt-add-qt-headers.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/mathjax-disable-webpack.patch			\
+  %D%/packages/patches/mathjax-no-a11y.patch			\
   %D%/packages/patches/maxima-defsystem-mkdir.patch		\
   %D%/packages/patches/maven-enforcer-api-fix-old-dependencies.patch	\
   %D%/packages/patches/maven-generate-component-xml.patch		\
@@ -1454,11 +1475,12 @@ 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/libsigrokdecode-python3.9-fix.patch	\
   %D%/packages/patches/mercurial-hg-extension-path.patch       \
+  %D%/packages/patches/mesa-opencl-all-targets.patch		\
   %D%/packages/patches/mesa-skip-tests.patch			\
   %D%/packages/patches/mescc-tools-boot.patch			\
-  %D%/packages/patches/meson-for-build-rpath.patch		\
-  %D%/packages/patches/metabat-fix-compilation.patch		\
+  %D%/packages/patches/meson-allow-dirs-outside-of-prefix.patch	\
   %D%/packages/patches/mhash-keygen-test-segfault.patch		\
   %D%/packages/patches/minetest-add-MINETEST_MOD_PATH.patch	\
   %D%/packages/patches/mingw-w64-6.0.0-gcc.patch		\
@@ -1467,9 +1489,11 @@ dist_patch_DATA =						\
   %D%/packages/patches/minisat-friend-declaration.patch		\
   %D%/packages/patches/minisat-install.patch			\
   %D%/packages/patches/mit-krb5-hurd.patch			\
-  %D%/packages/patches/mit-krb5-qualify-short-hostnames.patch	\
+  %D%/packages/patches/mixxx-link-qtscriptbytearray-qtscript.patch	\
+  %D%/packages/patches/mixxx-system-googletest-benchmark.patch	\
   %D%/packages/patches/mpc123-initialize-ao.patch		\
   %D%/packages/patches/mpg321-CVE-2019-14247.patch		\
+  %D%/packages/patches/mpg321-gcc-10.patch			\
   %D%/packages/patches/module-init-tools-moduledir.patch	\
   %D%/packages/patches/monero-use-system-miniupnpc.patch			\
   %D%/packages/patches/mono-mdoc-timestamping.patch		\
@@ -1486,13 +1510,12 @@ dist_patch_DATA =						\
   %D%/packages/patches/mumps-shared-libseq.patch		\
   %D%/packages/patches/mumps-shared-mumps.patch			\
   %D%/packages/patches/mumps-shared-pord.patch			\
-  %D%/packages/patches/mupdf-fix-linkage.patch			\
-  %D%/packages/patches/mupdf-CVE-2021-3407.patch		\
   %D%/packages/patches/mupen64plus-ui-console-notice.patch	\
   %D%/packages/patches/mupen64plus-video-z64-glew-correct-path.patch    \
   %D%/packages/patches/musl-cross-locale.patch			\
   %D%/packages/patches/mutt-store-references.patch		\
   %D%/packages/patches/m4-gnulib-libio.patch			\
+  %D%/packages/patches/nautilus-add-libportal-gtk3.patch	\
   %D%/packages/patches/ncompress-fix-softlinks.patch		\
   %D%/packages/patches/netcdf-date-time.patch			\
   %D%/packages/patches/netpbm-CVE-2017-2586.patch		\
@@ -1504,13 +1527,17 @@ dist_patch_DATA =						\
   %D%/packages/patches/nettle-3.5-check-_pkcs1_sec_decrypt-msg-len.patch \
   %D%/packages/patches/nettle-3.5-CVE-2021-3580-pt1.patch	\
   %D%/packages/patches/nettle-3.5-CVE-2021-3580-pt2.patch	\
+  %D%/packages/patches/nix-dont-build-html-doc.diff		\
   %D%/packages/patches/nfs4-acl-tools-0.3.7-fixpaths.patch	\
   %D%/packages/patches/ngircd-handle-zombies.patch		\
+  %D%/packages/patches/ngless-unliftio.patch		\
   %D%/packages/patches/network-manager-plugin-path.patch	\
+  %D%/packages/patches/network-manager-meson.patch		\
   %D%/packages/patches/nginx-socket-cloexec.patch		\
   %D%/packages/patches/nnpack-system-libraries.patch		\
   %D%/packages/patches/nsis-env-passthru.patch			\
   %D%/packages/patches/nsis-source-date-epoch.patch		\
+  %D%/packages/patches/nss-getcwd-nonnull.patch			\
   %D%/packages/patches/nss-increase-test-timeout.patch		\
   %D%/packages/patches/nss-3.56-pkgconfig.patch			\
   %D%/packages/patches/nvi-assume-preserve-path.patch		\
@@ -1519,7 +1546,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/nyacc-binary-literals.patch		\
   %D%/packages/patches/obs-modules-location.patch		\
   %D%/packages/patches/ocaml-bitstring-fix-configure.patch \
-  %D%/packages/patches/ocaml-cairo2-caml_ba_array-fix.patch     \
   %D%/packages/patches/ocaml-CVE-2015-8869.patch		\
   %D%/packages/patches/ocaml-Add-a-.file-directive.patch	\
   %D%/packages/patches/ocaml-enable-ocamldoc-reproducibility.patch	\
@@ -1527,7 +1553,9 @@ dist_patch_DATA =						\
   %D%/packages/patches/ocaml-dose3-Fix-for-ocaml-4.06.patch	\
   %D%/packages/patches/ocaml-dose3-dont-make-printconf.patch	\
   %D%/packages/patches/ocaml-dose3-Install-mli-cmx-etc.patch	\
-  %D%/packages/patches/ocaml-ppx-variants-ppxlib-api-change.patch	\
+  %D%/packages/patches/ocaml-multiple-definitions.patch		\
+  %D%/packages/patches/ocaml-4.09-multiple-definitions.patch	\
+  %D%/packages/patches/ocaml-qcheck-fix-test-whitespace.patch	\
   %D%/packages/patches/omake-fix-non-determinism.patch	\
   %D%/packages/patches/oneko-remove-nonfree-characters.patch	\
   %D%/packages/patches/onnx-optimizer-system-library.patch	\
@@ -1536,13 +1564,13 @@ dist_patch_DATA =						\
   %D%/packages/patches/onnx-skip-model-downloads.patch		\
   %D%/packages/patches/openbabel-fix-crash-on-nwchem-output.patch	\
   %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/openfoam-4.1-cleanup.patch			\
   %D%/packages/patches/openjdk-10-idlj-reproducibility.patch	\
+  %D%/packages/patches/openjdk-14-builtins.patch                \
   %D%/packages/patches/openmpi-mtl-priorities.patch		\
   %D%/packages/patches/openssh-hurd.patch			\
   %D%/packages/patches/openresolv-restartcmd-guix.patch	\
+  %D%/packages/patches/openrgb-unbundle-hueplusplus.patch	\
   %D%/packages/patches/opensles-add-license-file.patch			\
   %D%/packages/patches/openssl-runpath.patch			\
   %D%/packages/patches/openssl-1.1-c-rehash-in.patch		\
@@ -1558,11 +1586,18 @@ dist_patch_DATA =						\
   %D%/packages/patches/p7zip-remove-unused-code.patch		\
   %D%/packages/patches/pam-krb5-CVE-2020-10595.patch		\
   %D%/packages/patches/pango-skip-libthai-test.patch		\
+  %D%/packages/patches/passwordsafe-meson-remove-extra-argument.patch \
+  %D%/packages/patches/password-store-tree-compat.patch		\
   %D%/packages/patches/pciutils-hurd-configure.patch		\
   %D%/packages/patches/pciutils-hurd-fix.patch			\
+  %D%/packages/patches/pitivi-fix-build-with-meson-0.60.patch	\
+  %D%/packages/patches/pjproject-install-libpjsua2.patch	\
   %D%/packages/patches/plasma-framework-fix-KF5PlasmaMacros.cmake.patch \
   %D%/packages/patches/ppsspp-disable-upgrade-and-gold.patch		\
   %D%/packages/patches/pthreadpool-system-libraries.patch	\
+  %D%/packages/patches/python-chai-drop-python2.patch		\
+  %D%/packages/patches/python-random2-getrandbits-test.patch		\
+  %D%/packages/patches/python-poppler-qt5-fix-build.patch	\
   %D%/packages/patches/sdcc-disable-non-free-code.patch		\
   %D%/packages/patches/sdl-pango-api_additions.patch		\
   %D%/packages/patches/sdl-pango-blit_overflow.patch		\
@@ -1572,14 +1607,16 @@ dist_patch_DATA =						\
   %D%/packages/patches/sdl-pango-sans-serif.patch		\
   %D%/packages/patches/smalltalk-multiplication-overflow.patch	\
   %D%/packages/patches/sqlite-hurd.patch			\
+  %D%/packages/patches/sssd-collision-with-external-nss-symbol.patch	\
+  %D%/packages/patches/sssd-fix-samba-4.15.3.patch	\
+  %D%/packages/patches/strace-readlink-tests.patch		\
   %D%/packages/patches/sunxi-tools-remove-sys-io.patch	\
+  %D%/packages/patches/p11-kit-hurd.patch			\
+  %D%/packages/patches/patchutils-test-perms.patch		\
   %D%/packages/patches/patch-hurd-path-max.patch		\
   %D%/packages/patches/perl-autosplit-default-time.patch	\
-  %D%/packages/patches/perl-cross.patch				\
-  %D%/packages/patches/perl-deterministic-ordering.patch	\
   %D%/packages/patches/perl-finance-quote-unuse-mozilla-ca.patch \
   %D%/packages/patches/perl-image-exiftool-CVE-2021-22204.patch	\
-  %D%/packages/patches/perl-io-socket-ssl-openssl-1.0.2f-fix.patch \
   %D%/packages/patches/perl-net-amazon-s3-moose-warning.patch	\
   %D%/packages/patches/perl-net-dns-resolver-programmable-fix.patch	\
   %D%/packages/patches/perl-no-sys-dirs.patch			\
@@ -1588,20 +1625,28 @@ dist_patch_DATA =						\
   %D%/packages/patches/perl-reproducible-build-date.patch	\
   %D%/packages/patches/perl-www-curl-fix-struct-void.patch	\
   %D%/packages/patches/perl-www-curl-remove-symbol.patch	\
+  %D%/packages/patches/php-bug-74093-test.patch \
+  %D%/packages/patches/php-openssl_x509_checkpurpose_basic.patch	\
   %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/pigx-bsseq-no-citeproc.patch		\
+  %D%/packages/patches/pigx-chipseq-no-citeproc.patch		\
+  %D%/packages/patches/pigx-rnaseq-no-citeproc.patch		\
+  %D%/packages/patches/pigx-sars-cov2-ww-no-citeproc.patch	\
+  %D%/packages/patches/pigx-scrnaseq-no-citeproc.patch		\
   %D%/packages/patches/pinball-system-ltdl.patch		\
   %D%/packages/patches/pingus-boost-headers.patch		\
   %D%/packages/patches/pingus-sdl-libs-config.patch		\
+  %D%/packages/patches/pipewire-0.2.7-fno-common.patch		\
   %D%/packages/patches/pixman-CVE-2016-5296.patch		\
-  %D%/packages/patches/pjproject-correct-the-cflags-field.patch \
-  %D%/packages/patches/pjproject-fix-pkg-config-ldflags.patch	\
   %D%/packages/patches/plink-1.07-unclobber-i.patch		\
   %D%/packages/patches/plink-endian-detection.patch		\
   %D%/packages/patches/plib-CVE-2011-4620.patch		\
   %D%/packages/patches/plib-CVE-2012-4552.patch		\
   %D%/packages/patches/plotutils-spline-test.patch		\
+  %D%/packages/patches/polkit-configure-elogind.patch		\
+  %D%/packages/patches/polkit-use-duktape.patch			\
   %D%/packages/patches/portaudio-audacity-compat.patch		\
   %D%/packages/patches/portmidi-modular-build.patch		\
   %D%/packages/patches/postgresql-disable-resolve_symlinks.patch	\
@@ -1615,7 +1660,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/pulseaudio-fix-mult-test.patch		\
   %D%/packages/patches/pulseaudio-longer-test-timeout.patch	\
   %D%/packages/patches/pulseview-qt515-compat.patch		\
-  %D%/packages/patches/purescript-relax-dependencies.patch	\
+  %D%/packages/patches/pulseview-glib-2.68.patch		\
   %D%/packages/patches/pybugz-encode-error.patch		\
   %D%/packages/patches/pybugz-stty.patch			\
   %D%/packages/patches/pygpgme-disable-problematic-tests.patch  \
@@ -1626,32 +1671,40 @@ dist_patch_DATA =						\
   %D%/packages/patches/python-2.7-site-prefixes.patch		\
   %D%/packages/patches/python-2.7-source-date-epoch.patch	\
   %D%/packages/patches/python-2.7-CVE-2021-3177.patch		\
+  %D%/packages/patches/python-2.7-no-static-lib.patch		\
   %D%/packages/patches/python-3-arm-alignment.patch		\
   %D%/packages/patches/python-3-deterministic-build-info.patch	\
   %D%/packages/patches/python-3-search-paths.patch		\
   %D%/packages/patches/python-3-fix-tests.patch			\
-  %D%/packages/patches/python-3.8-fix-tests.patch		\
-  %D%/packages/patches/python-3.8-CVE-2021-3177.patch		\
-  %D%/packages/patches/python-3.9-fix-tests.patch		\
+  %D%/packages/patches/python-3-hurd-configure.patch		\
+  %D%/packages/patches/python-3-no-static-lib.patch		\
   %D%/packages/patches/python-CVE-2018-14647.patch		\
   %D%/packages/patches/python-CVE-2020-26116.patch		\
   %D%/packages/patches/python-aionotify-0.2.0-py3.8.patch	\
   %D%/packages/patches/python-argcomplete-1.11.1-fish31.patch	\
   %D%/packages/patches/python-axolotl-AES-fix.patch		\
+  %D%/packages/patches/python-babel-fix-parse-future-test.patch \
   %D%/packages/patches/python-cross-compile.patch		\
   %D%/packages/patches/python2-larch-coverage-4.0a6-compatibility.patch \
   %D%/packages/patches/python-configobj-setuptools.patch	\
+  %D%/packages/patches/python-docopt-pytest6-compat.patch	\
   %D%/packages/patches/python-execnet-read-only-fix.patch	\
+  %D%/packages/patches/python-fixtures-remove-monkeypatch-test.patch	\
   %D%/packages/patches/python-flask-restful-werkzeug-compat.patch	\
   %D%/packages/patches/python-keras-integration-test.patch	\
+  %D%/packages/patches/python-pdoc3-tests.patch			\
+  %D%/packages/patches/python-peachpy-determinism.patch	\
   %D%/packages/patches/python-pep8-stdlib-tokenize-compat.patch \
+  %D%/packages/patches/python-piexif-fix-tests-with-pillow-7.2.patch	\
   %D%/packages/patches/python-pyfakefs-remove-bad-test.patch	\
+  %D%/packages/patches/python-pyflakes-test-location.patch	\
   %D%/packages/patches/python-flint-includes.patch		\
   %D%/packages/patches/python-libxml2-utf8.patch		\
+  %D%/packages/patches/python-magic-python-bytecode.patch	\
   %D%/packages/patches/python-matplotlib-run-under-wayland-gtk3.patch	\
   %D%/packages/patches/python-memcached-syntax-warnings.patch	\
   %D%/packages/patches/python-mox3-python3.6-compat.patch	\
-  %D%/packages/patches/python-testtools.patch			\
+  %D%/packages/patches/python-typing-inspect-fix.patch		\
   %D%/packages/patches/python-packaging-test-arch.patch		\
   %D%/packages/patches/python2-parameterized-docstring-test.patch	\
   %D%/packages/patches/python-paste-remove-timing-test.patch	\
@@ -1659,7 +1712,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/python-pycrypto-time-clock.patch		\
   %D%/packages/patches/python-pyan3-fix-absolute-path-bug.patch \
   %D%/packages/patches/python-pyan3-fix-positional-arguments.patch \
-  %D%/packages/patches/python-pydot-regression-test.patch	\
   %D%/packages/patches/python2-pygobject-2-deprecation.patch	\
   %D%/packages/patches/python-pygpgme-fix-pinentry-tests.patch	\
   %D%/packages/patches/python-pytest-asyncio-python-3.8.patch	\
@@ -1670,13 +1722,13 @@ dist_patch_DATA =						\
   %D%/packages/patches/python2-subprocess32-disable-input-test.patch	\
   %D%/packages/patches/python-unittest2-python3-compat.patch	\
   %D%/packages/patches/python-unittest2-remove-argparse.patch	\
+  %D%/packages/patches/python-versioneer-guix-support.patch	\
   %D%/packages/patches/python-waitress-fix-tests.patch		\
+  %D%/packages/patches/python-werkzeug-tests.patch		\
   %D%/packages/patches/qemu-build-info-manual.patch		\
-  %D%/packages/patches/qemu-CVE-2021-20203.patch		\
-  %D%/packages/patches/qemu-meson-compat.patch			\
-  %D%/packages/patches/qemu-sphinx-compat.patch			\
   %D%/packages/patches/qemu-glibc-2.27.patch 			\
   %D%/packages/patches/qemu-glibc-2.30.patch 			\
+  %D%/packages/patches/qemu-fix-agent-paths.patch 		\
   %D%/packages/patches/qpdfview-qt515-compat.patch		\
   %D%/packages/patches/qrcodegen-cpp-make-install.patch		\
   %D%/packages/patches/qt4-ldflags.patch			\
@@ -1685,10 +1737,15 @@ dist_patch_DATA =						\
   %D%/packages/patches/qtbase-use-TZDIR.patch			\
   %D%/packages/patches/qtscript-disable-tests.patch		\
   %D%/packages/patches/quagga-reproducible-build.patch          \
-  %D%/packages/patches/quassel-qt-514-compat.patch		\
   %D%/packages/patches/quickswitch-fix-dmenu-check.patch	\
   %D%/packages/patches/qtwebkit-pbutils-include.patch		\
+  %D%/packages/patches/qtwebkit-fix-building-with-bison-3.7.patch \
+  %D%/packages/patches/qtwebkit-fix-building-with-python-3.9.patch	\
+  %D%/packages/patches/qtwebkit-fix-building-with-icu-68.patch	\
+  %D%/packages/patches/qtwebkit-fix-building-with-glib-2.68.patch	\
+  %D%/packages/patches/ragel-char-signedness.patch		\
   %D%/packages/patches/randomjungle-disable-static-build.patch	\
+  %D%/packages/patches/range-v3-build-with-gcc10.patch	\
   %D%/packages/patches/rapicorn-isnan.patch			\
   %D%/packages/patches/rapidjson-gcc-compat.patch		\
   %D%/packages/patches/raptor2-heap-overflow.patch		\
@@ -1705,7 +1762,6 @@ 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-minimal-backport-1629887.patch    \
   %D%/packages/patches/racket-minimal-sh-via-rktio.patch	\
   %D%/packages/patches/remake-impure-dirs.patch			\
   %D%/packages/patches/restic-0.9.6-fix-tests-for-go1.15.patch	\
@@ -1719,23 +1775,24 @@ dist_patch_DATA =						\
   %D%/packages/patches/rocm-opencl-runtime-4.3-nocltrace.patch \
   %D%/packages/patches/rocm-opencl-runtime-4.3-noopencl.patch \
   %D%/packages/patches/ruby-sanitize-system-libxml.patch	\
-  %D%/packages/patches/rust-1.19-mrustc.patch			\
-  %D%/packages/patches/rust-1.25-accept-more-detailed-gdb-lines.patch \
-  %D%/packages/patches/rust-1.45-linker-locale.patch		\
-  %D%/packages/patches/rust-1.48-linker-locale.patch		\
-  %D%/packages/patches/rust-bootstrap-stage0-test.patch		\
+  %D%/packages/patches/rustc-1.39.0-src.patch			\
+  %D%/packages/patches/rust-adblock-ignore-live-tests.patch		\
   %D%/packages/patches/rust-coresimd-doctest.patch		\
+  %D%/packages/patches/i3status-rust-enable-unstable-features.patch	\
   %D%/packages/patches/rust-ndarray-remove-blas-src-dep.patch	\
   %D%/packages/patches/rust-ndarray-0.13-remove-blas-src.patch	\
   %D%/packages/patches/rust-nettle-disable-vendor.patch		 \
   %D%/packages/patches/rust-nettle-sys-disable-vendor.patch	 \
-  %D%/packages/patches/rust-reproducible-builds.patch		 \
   %D%/packages/patches/rust-openssl-sys-no-vendor.patch	\
+  %D%/packages/patches/rust-shell2batch-lint-fix.patch		\
+  %D%/packages/patches/rust-wl-clipboard-rs-newer-wl.patch      \
   %D%/packages/patches/sbc-fix-build-non-x86.patch		\
+  %D%/packages/patches/sbcl-aserve-add-HTML-5-elements.patch	\
+  %D%/packages/patches/sbcl-aserve-fix-rfe12668.patch	\
   %D%/packages/patches/sbcl-burgled-batteries3-fix-signals.patch	\
   %D%/packages/patches/sbcl-clml-fix-types.patch		\
   %D%/packages/patches/sbcl-png-fix-sbcl-compatibility.patch	\
-  %D%/packages/patches/scalapack-blacs-mpi-deprecations.patch	\
+  %D%/packages/patches/scalapack-gcc-10-compilation.patch	\
   %D%/packages/patches/scheme48-tests.patch			\
   %D%/packages/patches/scotch-build-parallelism.patch		\
   %D%/packages/patches/scotch-integer-declarations.patch	\
@@ -1743,11 +1800,14 @@ dist_patch_DATA =						\
   %D%/packages/patches/screen-hurd-path-max.patch		\
   %D%/packages/patches/sdl-libx11-1.6.patch			\
   %D%/packages/patches/seed-webkit.patch			\
+  %D%/packages/patches/sendgmail-accept-ignored-gsuite-flag.patch	\
+  %D%/packages/patches/sendgmail-remove-domain-restriction.patch	\
   %D%/packages/patches/seq24-rename-mutex.patch			\
+  %D%/packages/patches/libsequoia-fix-ffi-Makefile.patch	\
+  %D%/packages/patches/libsequoia-remove-store.patch		\
   %D%/packages/patches/serf-python3.patch			\
   %D%/packages/patches/shakespeare-spl-fix-grammar.patch		\
   %D%/packages/patches/sharutils-CVE-2018-1000097.patch		\
-  %D%/packages/patches/shadow-hurd-pctrl.patch			\
   %D%/packages/patches/shishi-fix-libgcrypt-detection.patch	\
   %D%/packages/patches/slim-session.patch			\
   %D%/packages/patches/slim-config.patch			\
@@ -1755,11 +1815,15 @@ dist_patch_DATA =						\
   %D%/packages/patches/slim-reset.patch				\
   %D%/packages/patches/slim-login.patch				\
   %D%/packages/patches/slim-display.patch			\
+  %D%/packages/patches/syslinux-gcc10.patch			\
+  %D%/packages/patches/syslinux-strip-gnu-property.patch	\
   %D%/packages/patches/snappy-add-O2-flag-in-CmakeLists.txt.patch	\
   %D%/packages/patches/snappy-add-inline-for-GCC.patch		\
   %D%/packages/patches/sphinxbase-fix-doxygen.patch		\
+  %D%/packages/patches/spice-vdagent-glib-2.68.patch		\
   %D%/packages/patches/sssd-fix-samba.patch			\
   %D%/packages/patches/sssd-system-directories.patch		\
+  %D%/packages/patches/streamlink-update-test.patch             \
   %D%/packages/patches/steghide-fixes.patch			\
   %D%/packages/patches/suitesparse-mongoose-cmake.patch		\
   %D%/packages/patches/superlu-dist-awpm-grid.patch		\
@@ -1781,14 +1845,11 @@ dist_patch_DATA =						\
   %D%/packages/patches/tar-skip-unreliable-tests.patch		\
   %D%/packages/patches/tcc-boot-0.9.27.patch			\
   %D%/packages/patches/tclxml-3.2-install.patch			\
-  %D%/packages/patches/tcl-fix-cross-compilation.patch		\
   %D%/packages/patches/tcsh-fix-autotest.patch			\
   %D%/packages/patches/teensy-loader-cli-help.patch		\
+  %D%/packages/patches/tensorflow-c-api-fix.patch		\
   %D%/packages/patches/texinfo-5-perl-compat.patch		\
-  %D%/packages/patches/texlive-bin-poppler-0.83.patch		\
-  %D%/packages/patches/texlive-bin-poppler-0.86.patch		\
   %D%/packages/patches/telegram-purple-adjust-test.patch	\
-  %D%/packages/patches/telepathy-glib-channel-memory-leak.patch	\
   %D%/packages/patches/texi2html-document-encoding.patch	\
   %D%/packages/patches/texi2html-i18n.patch			\
   %D%/packages/patches/thefuck-test-environ.patch		\
@@ -1801,21 +1862,30 @@ dist_patch_DATA =						\
   %D%/packages/patches/tk-find-library.patch			\
   %D%/packages/patches/tla2tools-build-xml.patch		\
   %D%/packages/patches/tlf-support-hamlib-4.2+.patch		\
+  gnu/packages/patches/tootle-glib-object-naming.patch		\
+  gnu/packages/patches/tootle-reason-phrase.patch		\
+  %D%/packages/patches/tor-sandbox-i686.patch			\
   %D%/packages/patches/transcode-ffmpeg.patch	\
   %D%/packages/patches/transmission-honor-localedir.patch	\
-  %D%/packages/patches/transmission-remote-gtk-fix-appstream.patch	\
+  %D%/packages/patches/tremc-fix-decodestring.patch		\
+  %D%/packages/patches/trytond-add-egg-modules-to-path.patch	\
+  %D%/packages/patches/trytond-add-guix_trytond_path.patch	\
   %D%/packages/patches/ttf2eot-cstddef.patch			\
   %D%/packages/patches/tup-unbundle-dependencies.patch		\
   %D%/packages/patches/tuxpaint-stamps-path.patch		\
   %D%/packages/patches/twinkle-bcg729.patch			\
+  %D%/packages/patches/u-boot-allow-disabling-openssl.patch	\
   %D%/packages/patches/u-boot-nintendo-nes-serial.patch		\
   %D%/packages/patches/u-boot-rockchip-inno-usb.patch		\
   %D%/packages/patches/u-boot-sifive-prevent-reloc-initrd-fdt.patch	\
   %D%/packages/patches/u-boot-riscv64-fix-extlinux.patch	\
+  %D%/packages/patches/u-boot-rk3399-enable-emmc-phy.patch	\
   %D%/packages/patches/ucx-tcp-iface-ioctl.patch		\
-  %D%/packages/patches/udiskie-no-appindicator.patch		\
+  %D%/packages/patches/ungoogled-chromium-accelerated-video-decode.patch	\
   %D%/packages/patches/ungoogled-chromium-extension-search-path.patch	\
   %D%/packages/patches/ungoogled-chromium-ffmpeg-compat.patch	\
+  %D%/packages/patches/ungoogled-chromium-RUNPATH.patch		\
+  %D%/packages/patches/ungoogled-chromium-system-ffmpeg.patch	\
   %D%/packages/patches/ungoogled-chromium-system-nspr.patch	\
   %D%/packages/patches/unison-fix-ocaml-4.08.patch		\
   %D%/packages/patches/unknown-horizons-python-3.8-distro.patch	\
@@ -1860,7 +1930,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/vboot-utils-fix-format-load-address.patch	\
   %D%/packages/patches/vboot-utils-fix-tests-show-contents.patch	\
   %D%/packages/patches/vboot-utils-skip-test-workbuf.patch	\
-  %D%/packages/patches/vigra-python-compat.patch		\
   %D%/packages/patches/vinagre-newer-freerdp.patch             \
   %D%/packages/patches/vinagre-newer-rdp-parameters.patch      \
   %D%/packages/patches/virglrenderer-CVE-2017-6386.patch 	\
@@ -1877,17 +1946,20 @@ dist_patch_DATA =						\
   %D%/packages/patches/wicd-get-selected-profile-fix.patch	\
   %D%/packages/patches/wicd-urwid-1.3.patch			\
   %D%/packages/patches/wicd-wpa2-ttls.patch			\
+  %D%/packages/patches/widelands-add-missing-map-include.patch	\
   %D%/packages/patches/widelands-system-wide_minizip.patch	\
   %D%/packages/patches/wmctrl-64-fix.patch			\
   %D%/packages/patches/wmfire-update-for-new-gdk-versions.patch	\
   %D%/packages/patches/wordnet-CVE-2008-2149.patch			\
   %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/xdg-desktop-portal-wlr-harcoded-length.patch\
   %D%/packages/patches/xf86-video-ark-remove-mibstore.patch	\
+  %D%/packages/patches/xf86-video-mach64-bool-to-boolean.patch	\
   %D%/packages/patches/xf86-video-mach64-glibc-2.20.patch	\
+  %D%/packages/patches/xf86-video-nouveau-fixup-ABI.patch	\
+  %D%/packages/patches/xf86-video-qxl-fix-build.patch	\
   %D%/packages/patches/xf86-video-savage-xorg-compat.patch 	\
   %D%/packages/patches/xf86-video-siliconmotion-fix-ftbfs.patch \
   %D%/packages/patches/xf86-video-tga-remove-mibstore.patch	\
@@ -1896,24 +1968,27 @@ dist_patch_DATA =						\
   %D%/packages/patches/xfce4-settings-defaults.patch		\
   %D%/packages/patches/xgboost-use-system-dmlc-core.patch       \
   %D%/packages/patches/xmonad-dynamic-linking.patch		\
+  %D%/packages/patches/xmonad-next-dynamic-linking.patch	\
   %D%/packages/patches/xnnpack-system-libraries.patch		\
   %D%/packages/patches/xplanet-1.3.1-cxx11-eof.patch		\
   %D%/packages/patches/xplanet-1.3.1-libdisplay_DisplayOutput.cpp.patch	\
   %D%/packages/patches/xplanet-1.3.1-libimage_gif.c.patch	\
   %D%/packages/patches/xplanet-1.3.1-xpUtil-Add2017LeapSecond.cpp.patch	\
   %D%/packages/patches/xpra-4.2-systemd-run.patch		\
+  %D%/packages/patches/xpra-4.2-install_libs.patch		\
   %D%/packages/patches/xsane-fix-memory-leak.patch		\
   %D%/packages/patches/xsane-fix-pdf-floats.patch		\
   %D%/packages/patches/xsane-fix-snprintf-buffer-length.patch	\
   %D%/packages/patches/xsane-support-ipv6.patch			\
   %D%/packages/patches/xsane-tighten-default-umask.patch	\
+  %D%/packages/patches/xygrib-fix-finding-data.patch		\
   %D%/packages/patches/yggdrasil-extra-config.patch	\
   %D%/packages/patches/ytfzf-programs.patch        \
   %D%/packages/patches/ytfzf-updates.patch        \
   %D%/packages/patches/ytnef-CVE-2021-3403.patch	\
   %D%/packages/patches/ytnef-CVE-2021-3404.patch	\
-  %D%/packages/patches/zstd-CVE-2021-24031_CVE-2021-24032.patch	\
-  %D%/packages/patches/zziplib-CVE-2018-16548.patch
+  %D%/packages/patches/zig-disable-libc-note-test.patch         \
+  %D%/packages/patches/zig-use-system-paths.patch
 
 MISC_DISTRO_FILES =				\
   %D%/packages/ld-wrapper.in
diff --git a/gnu/machine/ssh.scm b/gnu/machine/ssh.scm
index ecd02e336c..0dc8933c82 100644
--- a/gnu/machine/ssh.scm
+++ b/gnu/machine/ssh.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2019 Jakob L. Kreuze <zerodaysfordays@sdf.org>
-;;; Copyright © 2020, 2021 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2020-2022 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -26,6 +26,7 @@
   #:use-module (gnu system uuid)
   #:use-module ((gnu services) #:select (sexp->system-provenance))
   #:use-module (guix diagnostics)
+  #:use-module (guix memoization)
   #:use-module (guix gexp)
   #:use-module (guix i18n)
   #:use-module (guix modules)
@@ -83,6 +84,7 @@
 (define-record-type* <machine-ssh-configuration> machine-ssh-configuration
   make-machine-ssh-configuration
   machine-ssh-configuration?
+  this-machine-ssh-configuration
   (host-name      machine-ssh-configuration-host-name)     ; string
   (system         machine-ssh-configuration-system)        ; string
   (build-locally? machine-ssh-configuration-build-locally? ; boolean
@@ -91,6 +93,8 @@
                   (default #t))
   (allow-downgrades? machine-ssh-configuration-allow-downgrades? ; boolean
                      (default #f))
+  (safety-checks?    machine-ssh-configuration-safety-checks? ;boolean
+                     (default #t))
   (port           machine-ssh-configuration-port           ; integer
                   (default 22))
   (user           machine-ssh-configuration-user           ; string
@@ -98,29 +102,41 @@
   (identity       machine-ssh-configuration-identity       ; path to a private key
                   (default #f))
   (session        machine-ssh-configuration-session        ; session
-                  (default #f))
+                  (thunked)
+                  (default
+                    ;; By default, open the session once and cache it.
+                    (open-machine-ssh-session* this-machine-ssh-configuration)))
   (host-key       machine-ssh-configuration-host-key       ; #f | string
                   (default #f)))
 
+(define (open-machine-ssh-session config)
+  "Open an SSH session for CONFIG, a <machine-ssh-configuration> record."
+  (let ((host-name (machine-ssh-configuration-host-name config))
+        (user (machine-ssh-configuration-user config))
+        (port (machine-ssh-configuration-port config))
+        (identity (machine-ssh-configuration-identity config))
+        (host-key (machine-ssh-configuration-host-key config)))
+    (unless host-key
+      (warning (G_ "<machine-ssh-configuration> without a 'host-key' \
+is deprecated~%")))
+    (open-ssh-session host-name
+                      #:user user
+                      #:port port
+                      #:identity identity
+                      #:host-key host-key)))
+
+(define open-machine-ssh-session*
+  (mlambdaq (config)
+    "Memoizing variant of 'open-machine-ssh-session'."
+    (open-machine-ssh-session config)))
+
 (define (machine-ssh-session machine)
   "Return the SSH session that was given in MACHINE's configuration, or create
 one from the configuration's parameters if one was not provided."
   (maybe-raise-unsupported-configuration-error machine)
   (let ((config (machine-configuration machine)))
     (or (machine-ssh-configuration-session config)
-        (let ((host-name (machine-ssh-configuration-host-name config))
-              (user (machine-ssh-configuration-user config))
-              (port (machine-ssh-configuration-port config))
-              (identity (machine-ssh-configuration-identity config))
-              (host-key (machine-ssh-configuration-host-key config)))
-          (unless host-key
-            (warning (G_ "<machine-ssh-configuration> without a 'host-key' \
-is deprecated~%")))
-          (open-ssh-session host-name
-                            #:user user
-                            #:port port
-                            #:identity identity
-                            #:host-key host-key)))))
+        (open-machine-ssh-session config))))
 
 
 ;;;
@@ -226,18 +242,21 @@ exist on the machine."
         (raise (formatted-message (G_ "no file system with UUID '~a'")
                                   (uuid->string (file-system-device fs)))))))
 
-  (append (map check-literal-file-system
-               (filter (lambda (fs)
-                         (string? (file-system-device fs)))
-                       file-systems))
-          (map check-labeled-file-system
-               (filter (lambda (fs)
-                         (file-system-label? (file-system-device fs)))
-                       file-systems))
-          (map check-uuid-file-system
-               (filter (lambda (fs)
-                         (uuid? (file-system-device fs)))
-                       file-systems))))
+  (if (machine-ssh-configuration-safety-checks?
+       (machine-configuration machine))
+      (append (map check-literal-file-system
+                   (filter (lambda (fs)
+                             (string? (file-system-device fs)))
+                           file-systems))
+              (map check-labeled-file-system
+                   (filter (lambda (fs)
+                             (file-system-label? (file-system-device fs)))
+                           file-systems))
+              (map check-uuid-file-system
+                   (filter (lambda (fs)
+                             (uuid? (file-system-device fs)))
+                           file-systems)))
+      '()))
 
 (define (machine-check-initrd-modules machine)
   "Return a list of <remote-assertion> that raise a '&message' error condition
@@ -277,7 +296,10 @@ not available in the initrd."
                                   (file-system-device fs)
                                   missing)))))
 
-  (map missing-modules file-systems))
+  (if (machine-ssh-configuration-safety-checks?
+       (machine-configuration machine))
+      (map missing-modules file-systems)
+      '()))
 
 (define* (machine-check-forward-update machine)
   "Check whether we are making a forward update for MACHINE.  Depending on its
diff --git a/gnu/packages.scm b/gnu/packages.scm
index ccfc83dd11..65ab7a7c1e 100644
--- a/gnu/packages.scm
+++ b/gnu/packages.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012-2020, 2022 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2016, 2017 Alex Kost <alezost@gmail.com>
@@ -51,6 +51,7 @@
             %auxiliary-files-path
             %package-module-path
             %default-package-module-path
+            cache-is-authoritative?
 
             fold-packages
             fold-available-packages
diff --git a/gnu/packages/accessibility.scm b/gnu/packages/accessibility.scm
index f3bd094c92..b692ec575f 100644
--- a/gnu/packages/accessibility.scm
+++ b/gnu/packages/accessibility.scm
@@ -78,14 +78,9 @@
         "--disable-static"
         "--enable-fake")))
     (native-inputs
-     `(("latex2html" ,latex2html)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python-wrapper)
-       ("swig" ,swig)))
+     (list latex2html pkg-config python-wrapper swig))
     (inputs
-     `(("glib" ,glib)
-       ("gtk+" ,gtk+-2)
-       ("libusb" ,libusb-compat)))
+     (list glib gtk+-2 libusb-compat))
     (synopsis "Portable Braille Library")
     (description "Libbraille is a library to easily access Braille displays and
 terminals.")
@@ -95,22 +90,24 @@ terminals.")
 (define-public brltty
   (package
     (name "brltty")
-    (version "6.2")
+    (version "6.4")
     (source
      (origin
        (method url-fetch)
        (uri
         (string-append "https://brltty.app/archive/brltty-" version ".tar.gz"))
        (sha256
-        (base32 "0m0cq3p1cwp52n81si621gij82w3mdqwgr39m6bs652pmk5na72l"))))
+        (base32 "0zybi9i9izv25g0wphl0snddrhb6xl5879y4pkpjpnxq61wm9gry"))))
     (build-system glib-or-gtk-build-system)
     (arguments
      `(#:tests? #f                      ; No target
+
+       ;; High parallelism may cause errors such as:
+       ;;  ranlib: ./libbrlapi_stubs.a: error reading brlapi_stubs.o: file truncated
+       #:parallel-build? #f
+
        #:configure-flags
        (list
-        (string-append "--with-tcl-config="
-                       (assoc-ref %build-inputs "tcl")
-                       "/lib/tclConfig.sh")
         (string-append "--with-libbraille="
                        (assoc-ref %build-inputs "libbraille"))
         (string-append "--with-espeak_ng="
@@ -152,50 +149,48 @@ terminals.")
                 (string-append "extra_link_args = ['-Wl,-rpath="
                                (assoc-ref outputs "out")
                                "/lib'], "
-                               "extra_compile_args = ")))
-             #t)))))
+                               "extra_compile_args = "))))))))
     (native-inputs
-     `(("clisp" ,clisp)
-       ("cython" ,python-cython)
-       ("doxygen" ,doxygen)
-       ("gettext" ,gettext-minimal)
-       ("java" ,icedtea "jdk")
-       ;; ("linuxdoc" ,linuxdoc-tools)
-       ("ocaml" ,ocaml)
-       ("ocamlfind" ,ocaml-findlib)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python-wrapper)
-       ("tcl" ,tcl)))
+     (list clisp
+           python-cython
+           doxygen
+           gettext-minimal
+           `(,icedtea "jdk")
+           ;; ("linuxdoc" ,linuxdoc-tools)
+           ocaml
+           ocaml-findlib
+           pkg-config
+           python-wrapper
+           tcl))
     (inputs
-     `(("alsa" ,alsa-lib)
-       ("atspi2" ,at-spi2-core)
-       ("bluez" ,bluez)
-       ("dbus" ,dbus)
-       ("espeak" ,espeak)
-       ("espeak-ng" ,espeak-ng)
-       ("expat" ,expat)
-       ("festival" ,festival)
-       ("flite" ,flite)
-       ("glib" ,glib)
-       ("gpm" ,gpm)
-       ("iconv" ,libiconv)
-       ("icu" ,icu4c)
-       ("libbraille" ,libbraille)
-       ("libpcre2" ,pcre2)
-       ("linux-headers" ,linux-libre-headers)
-       ("louis" ,liblouis)
-       ("ncurses" ,ncurses)
-       ("polkit" ,polkit)
-       ("speech-dispatcher" ,speech-dispatcher)
-       ("util-linux" ,util-linux)
-       ("util-linux:lib" ,util-linux "lib")
-       ("x11" ,libx11)
-       ("xaw" ,libxaw)
-       ("xaw3d" ,libxaw3d)
-       ("xext" ,libxext)
-       ("xfixes" ,libxfixes)
-       ("xt" ,libxt)
-       ("xtst" ,libxtst)))
+     (list alsa-lib
+           at-spi2-core
+           bluez
+           dbus
+           espeak
+           espeak-ng
+           expat
+           festival
+           flite
+           glib
+           gpm
+           libiconv
+           icu4c
+           libbraille
+           pcre2
+           liblouis
+           ncurses
+           polkit
+           speech-dispatcher
+           util-linux
+           `(,util-linux "lib")
+           libx11
+           libxaw
+           libxaw3d
+           libxext
+           libxfixes
+           libxt
+           libxtst))
     (synopsis "Braille TTY")
     (description "BRLTTY is a background process (daemon) which provides access
 to the Linux/Unix console (when in text mode) for a blind person using a
@@ -223,19 +218,17 @@ incorporated.")
                                "--without-docs"
                                "--with-notification")))
     (inputs
-     `(("libxml2" ,libxml2)
-       ("libglade" ,libglade)
-       ("librsvg" ,librsvg)
-       ("gstreamer" ,gstreamer)
-       ("cairo" ,cairo)
-       ("gtk+" ,gtk+)
-       ("libxtst" ,libxtst)
-       ("libxcomposite" ,libxcomposite)
-       ("libnotify" ,libnotify)))
+     (list libxml2
+           libglade
+           librsvg
+           gstreamer
+           cairo
+           gtk+
+           libxtst
+           libxcomposite
+           libnotify))
     (native-inputs
-     `(("gettext-minimal" ,gettext-minimal)
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list gettext-minimal intltool pkg-config))
     (home-page "http://florence.sourceforge.net/")
     (synopsis "Extensible, scalable virtual keyboard for X11")
     (description
@@ -268,9 +261,9 @@ available to help to click.")
                   "14pyzc4ws1mj859xs9n4x83wzxxvd3bh5bdxzr6nv267xwx1mq68"))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
       (inputs
-       `(("hidapi" ,hidapi)))
+       (list hidapi))
       (arguments
        `(#:tests? #f ; no tests
          #:make-flags (list (string-append "CC=" ,(cc-for-target)))
@@ -315,7 +308,7 @@ devices have vendorId:productId = 0c45:7403 or 0c45:7404.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (inputs
-     `(("libX11" ,libx11)))
+     (list libx11))
     (home-page "https://gitlab.com/amiloradovsky/magnify")
     (synopsis "Tiny screen magnifier for X11")
     (description
diff --git a/gnu/packages/acl.scm b/gnu/packages/acl.scm
index abeafeef88..da6dead3c2 100644
--- a/gnu/packages/acl.scm
+++ b/gnu/packages/acl.scm
@@ -40,7 +40,7 @@
 (define-public acl
   (package
     (name "acl")
-    (version "2.2.53")
+    (version "2.3.1")
     (source
      (origin
       (method url-fetch)
@@ -48,7 +48,7 @@
                           version ".tar.gz"))
       (sha256
        (base32
-        "1ir6my3w74s6nfbgbqgzj6w570sn0qjf3524zx8xh67lqrjrigh6"))))
+        "1bqi7hj0xkpivwg7lx5cv3yvs9ks1i6azvpgbvfpzcq1i736233n"))))
     (build-system gnu-build-system)
     (arguments
      `(#:modules ((ice-9 ftw)
@@ -86,7 +86,7 @@
                ((".*test/cp\\.test.*") "")
                ((".*test/setfacl-X\\.test.*") ""))
              #t)))))
-    (inputs `(("attr" ,attr)))
+    (inputs (list attr))
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("perl" ,perl)))
@@ -114,23 +114,23 @@
        (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
+             ;; These tests operate on real files, but our tmpfs 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))
+                (string-append indent "@pytest.mark.skip(reason=\"guix\")\n"
+                               match)))))
          (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)))
+               (invoke "pytest" "tests")))))))
+    (inputs (list acl))
+    (native-inputs (list 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.")
+    (synopsis "POSIX.1e @acronym{ACLs, access control lists} for Python")
+    (description
+     "This Python extension module manipulates the POSIX.1e @acronym{ACLs,
+Access Control Lists} available on many file systems.  These allow more
+fine-grained access control than traditional user/group permissions.")
     (license lgpl2.1+)))
diff --git a/gnu/packages/ada.scm b/gnu/packages/ada.scm
index 240e13f3ef..a3bba245ec 100644
--- a/gnu/packages/ada.scm
+++ b/gnu/packages/ada.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2018 Danny Milosavljevic <dannym@scratchpost.org>
 ;;; Copyright © 2020 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -48,17 +49,20 @@
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (supported-systems (list "i686-linux" "x86_64-linux"
-                             "armhf-linux" "aarch64-linux"))
+                             "armhf-linux" "aarch64-linux"
+                             "powerpc-linux"))
     (outputs (list "out" "debug"))
     (arguments
      `(#:system
        ,@(match (%current-system)
            ;; This package predates 64-bit PCs: a ‘64-bit’ adaexec segfaults.
            ;; Force a 32-bit build targeting a similar architecture.
-           ((or "armhf-linux" "aarch64-linux")
+           ("aarch64-linux"
             `("armhf-linux"))
+           ("x86_64-linux"
+            `("i686-linux"))
            (_
-            `("i686-linux")))
+            (list (%current-system))))
        #:make-flags
        (let ((out (assoc-ref %outputs "out")))
          (list (string-append
@@ -130,7 +134,7 @@
                                    (find-files "share" ".")))
                  #t)))))))
     (native-inputs
-     `(("sed" ,sed)))
+     (list sed))
     (home-page (string-append "https://web.archive.org/web/20140902150609/"
                               "http://www2.informatik.uni-stuttgart.de/iste/ps/"
                               "ada-software/html/dos_ada.html"))
@@ -163,10 +167,7 @@ level.")
                 (file-name (string-append name "-" version "-checkout"))))
       (build-system python-build-system)
       (propagated-inputs
-       `(("python2-docutils" ,python2-docutils)
-         ("python2-enum34" ,python2-enum34)
-         ("python2-funcy" ,python2-funcy)
-         ("python2-mako" ,python2-mako)))
+       (list python2-docutils python2-enum34 python2-funcy python2-mako))
       (arguments
        `(#:python ,python-2
          #:tests? #f))           ; Tests would requite gprbuild (Ada).
diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
index 93a1d354c4..ed66e358ea 100644
--- a/gnu/packages/admin.scm
+++ b/gnu/packages/admin.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com>
 ;;; Copyright © 2014, 2015, 2016, 2018, 2019, 2020 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2020, 2021 Eric Bavier <bavier@posteo.net>
@@ -9,7 +9,7 @@
 ;;; Copyright © 2016, 2017, 2020 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2016 Pjotr Prins <pjotr.guix@thebird.nl>
 ;;; Copyright © 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
-;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021, 2022 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Peter Feigl <peter.feigl@nexoid.at>
 ;;; Copyright © 2016 John J. Foerch <jjfoerch@earthlink.net>
 ;;; Copyright © 2016, 2017 Nikita <nikita@n0.is>
@@ -35,6 +35,7 @@
 ;;; Copyright © 2020, 2021 Michael Rohleder <mike@rohleder.de>
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
 ;;; Copyright © 2020 Morgan Smith <Morgan.J.Smith@outlook.com>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Zheng Junjie <873216071@qq.com>
 ;;; Copyright © 2021 Stefan Reichör <stefan@xsteve.at>
 ;;; Copyright © 2021 qblade <qblade@protonmail.com>
@@ -44,6 +45,8 @@
 ;;; Copyright © 2021 Brice Waegeneire <brice@waegenei.re>
 ;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
+;;; Copyright © 2021 Petr Hodina <phodina@protonmail.com>
+;;; Copyright © 2021 Artyom V. Poptsov <poptsov.artyom@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -73,6 +76,7 @@
   #:use-module (guix build-system trivial)
   #:use-module (guix download)
   #:use-module (guix git-download)
+  #:use-module (guix gexp)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix utils)
@@ -116,6 +120,7 @@
   #:use-module (gnu packages libusb)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages lua)
+  #:use-module (gnu packages m4)
   #:use-module (gnu packages mail)
   #:use-module (gnu packages man)
   #:use-module (gnu packages mcrypt)
@@ -128,6 +133,7 @@
   #:use-module (gnu packages perl)
   #:use-module (gnu packages perl-check)
   #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages polkit)
   #:use-module (gnu packages popt)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-crypto)
@@ -177,13 +183,9 @@
                 "supath=/run/setuid-programs/su"))
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
-     `(("glib" ,glib)
-       ("gtk+" ,gtk+-2)))
+     (list glib gtk+-2))
     (synopsis "Graphical front end for @command{su}")
     (description
      "Ktsuss stands for ``Keep the @command{su} simple, stupid''.
@@ -205,16 +207,15 @@ simplicity in mind.")
         (base32 "15xp47sz7kk1ciffw3f5xw2jg2mb2lqrbr3q6p4bkbz5dap9iy8p"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)))
+     (list bison flex))
     (inputs
-     `(("libgcrypt" ,libgcrypt)
-       ("libgpg-error" ,libgpg-error)
-       ("libmhash" ,libmhash)
-       ("pcre:static" ,pcre "static")
-       ("pcre" ,pcre)
-       ("zlib:static" ,zlib "static")
-       ("zlib" ,zlib)))
+     (list libgcrypt
+           libgpg-error
+           libmhash
+           `(,pcre "static")
+           pcre
+           `(,zlib "static")
+           zlib))
     (synopsis "File and directory integrity checker")
     (description
      "AIDE (Advanced Intrusion Detection Environment) is a file and directory
@@ -241,10 +242,9 @@ usual file attributes can be checked for inconsistencies.")
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("which" ,which)))
+     (list pkg-config which))
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (arguments
      `(#:tests? #f                      ; no test suite
        #:make-flags
@@ -276,23 +276,28 @@ and provides a \"top-like\" mode (monitoring).")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0x9zr0x3xvk4qkb6jnda451d5iyrl06cz1bjzjsm0lxvjj3fabyk"))))
+                "0x9zr0x3xvk4qkb6jnda451d5iyrl06cz1bjzjsm0lxvjj3fabyk"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  ;; Build with -O1 to work around <https://bugs.gnu.org/48368>.
+                  (substitute* "Makefile.in"
+                    (("compile --target")
+                     "compile -O1 --target"))))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--localstatedir=/var")
        #:make-flags '("GUILE_AUTO_COMPILE=0")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-
-       ;; This is the Guile we use as a cross-compiler...
-       ("guile" ,guile-3.0)))
+     (list pkg-config
+           ;; This is the Guile we use as a cross-compiler...
+           guile-3.0))
     (inputs
      ;; ... and this is the one that appears in shebangs when cross-compiling.
-     `(("guile" ,guile-3.0)
-
-       ;; The 'shepherd' command uses Readline when used interactively.  It's
-       ;; an unusual use case though, so we don't propagate it.
-       ("guile-readline" ,guile-readline)))
+     (list guile-3.0
+           ;; The 'shepherd' command uses Readline when used interactively.  It's
+           ;; an unusual use case though, so we don't propagate it.
+           guile-readline))
     (synopsis "System service manager")
     (description
      "The GNU Shepherd is a daemon-managing daemon, meaning that it supervises
@@ -307,25 +312,18 @@ interface and is based on GNU Guile.")
     (inherit shepherd)
     (name "guile2.2-shepherd")
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("guile" ,guile-2.2)))
+     (list pkg-config guile-2.2))
     (inputs
-     `(("guile" ,guile-2.2)
-       ("guile2.2-readline" ,guile2.2-readline)))))
-
-(define-public guile3.0-shepherd
-  (deprecated-package "guile3.0-shepherd" shepherd))
+     (list guile-2.2 guile2.2-readline))))
 
 (define-public guile2.0-shepherd
   (package
     (inherit shepherd)
     (name "guile2.0-shepherd")
     (native-inputs
-     `(("help2man" ,help2man)
-       ("pkg-config" ,pkg-config)
-       ("guile" ,guile-2.0)))
+     (list help2man pkg-config guile-2.0))
     (inputs
-     `(("guile" ,guile-2.0)))
+     (list guile-2.0))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -402,8 +400,7 @@ inspired by @command{vi}.")
                                       ,(dirname (which "readlink"))))))
              #t)))))
     (inputs
-     `(("python" ,python)
-       ("util-linux" ,util-linux))) ; contains sfdisk for growpart
+     (list python util-linux)) ; contains sfdisk for growpart
     (home-page "https://launchpad.net/cloud-utils")
     (synopsis "Set of utilities for cloud computing environments")
     (description
@@ -637,7 +634,7 @@ console.")
 (define-public htop
   (package
     (name "htop")
-    (version "3.1.0")
+    (version "3.1.2")
     (source
      (origin
        (method git-fetch)
@@ -645,14 +642,13 @@ console.")
              (url "https://github.com/htop-dev/htop")
              (commit version)))
        (sha256
-        (base32 "1ngvidaka6xbfb3l4zxmlksk2ms93fy3sb76w7917kjgn9mh53zz"))
+        (base32 "024qhrlmqgwmn6bwb5yiff9bhhdabryiphzx8y654k8r8vqi59j4"))
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake python-minimal-wrapper))     ; for scripts/MakeHeader.py
     (home-page "https://htop.dev")
     (synopsis "Interactive process viewer")
     (description
@@ -687,19 +683,21 @@ memory, disks, network and processes.")
 (define-public bpytop
   (package
     (name "bpytop")
-    (version "1.0.67")
+    (version "1.0.68")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "bpytop" version))
        (sha256
-        (base32 "1fwmiwvs8ax9az3hbp1p79x6m3wq73pn3vkbhcg9jvps4wv8wcwb"))))
+        (base32 "1clvajbv7pzlya9s1xs6dvjic8rv3kx7aqiwnjxapiypx246gdjk"))))
     (build-system python-build-system)
     (inputs
-     `(("python-psutil" ,python-psutil)))
+     (list python-psutil))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
+         ;; sanity-check phase fail, but the application seems to be working
+         (delete 'sanity-check)
          (add-after 'install 'install-themes
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((themes (string-append (assoc-ref outputs "out")
@@ -720,7 +718,7 @@ memory, disks, network and processes.  It's a Python port and continuation of
 (define-public pies
   (package
     (name "pies")
-    (version "1.6")
+    (version "1.7")
     (source
      (origin
        (method url-fetch)
@@ -728,7 +726,7 @@ memory, disks, network and processes.  It's a Python port and continuation of
                            version ".tar.bz2"))
        (sha256
         (base32
-         "0ad5bg1czwmr4qw33aszxzc6ll99a9lfs32lyfb1wl5x9s1cc7az"))))
+         "0ajcah2y6n55qc0ckspcx0hfpm1yb2xa1apcyij7mclic4q2y330"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases (modify-phases %standard-phases
@@ -739,8 +737,7 @@ memory, disks, network and processes.  It's a Python port and continuation of
                       (let ((bash (assoc-ref inputs "bash")))
                         (substitute* '("src/progman.c" "src/comp.c")
                           (("\"/bin/sh\"")
-                           (string-append "\"" bash "/bin/sh\"")))
-                        #t))))))
+                           (string-append "\"" bash "/bin/sh\"")))))))))
     (home-page "https://www.gnu.org.ua/software/pies/")
     (synopsis "Program invocation and execution supervisor")
     (description
@@ -753,15 +750,14 @@ re-executing them as necessary.")
 (define-public inetutils
   (package
     (name "inetutils")
-    (version "1.9.4")
+    (version "2.0")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnu/inetutils/inetutils-"
                                  version ".tar.gz"))
-             (patches (search-patches "inetutils-hurd.patch"))
              (sha256
               (base32
-               "05n65k4ixl85dc6rxc51b1b732gnmm8xnqi424dy9f1nz7ppb3xy"))))
+               "0j1nb69bhg29cm4xkqqjh2ln1zqcj2lnpm92v638lpwrs11dypxl"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags '("--localstatedir=/var"
@@ -782,10 +778,17 @@ re-executing them as necessary.")
                                    "--disable-uucpd"
                                    "--disable-whois")
                                  '()))
+       ;; Make sure that canonical "coreutils" package is not referred.
+       #:make-flags
+       (list (string-append "CPPFLAGS=-DPATHDEF_CP=\\\""
+                            (assoc-ref %build-inputs "coreutils*")
+                            "/bin/cp\\\""))
        ;; On some systems, 'libls.sh' may fail with an error such as:
        ;; "Failed to tell switch -a apart from -A".
        #:parallel-tests? #f))
-    (inputs `(("ncurses" ,ncurses)
+    (inputs `(("coreutils*" ,coreutils)
+              ("shadow" ,shadow)    ;for login (used in telnetd and rlogind)
+              ("ncurses" ,ncurses)
               ("readline" ,readline)))        ;for 'ftp'
     (native-inputs (if (member (%current-system)
                                (package-supported-systems net-tools))
@@ -802,16 +805,15 @@ hostname.")
 (define-public shadow
   (package
     (name "shadow")
-    (version "4.8.1")
+    (version "4.9")
     (source (origin
               (method url-fetch)
               (uri (string-append
                     "https://github.com/shadow-maint/shadow/releases/"
-                    "download/" version "/shadow-" version ".tar.xz"))
-              (patches (search-patches "shadow-hurd-pctrl.patch"))
+                    "download/v" version "/shadow-" version ".tar.xz"))
               (sha256
                (base32
-                "0qmfq50sdhz6xilgxvinblll8j2iqfl7hwk45bq744y4plq4dbd3"))))
+                "0i4iijbshnwnsrskxzrh18xgmzff0hdpsnnkmyc2gdn1x4n1zv7y"))))
     (build-system gnu-build-system)
     (arguments
      `(;; Assume System V `setpgrp (void)', which is the default on GNU
@@ -822,9 +824,16 @@ hostname.")
              '("--with-libpam"))
           "shadow_cv_logdir=/var/log"
           "ac_cv_func_setpgrp_void=yes")
-
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'fix-linking-to-pam
+           (lambda _
+             ;; There's a build system problem in 4.9 that causes link
+             ;; failures with the pam libraries (see:
+             ;; https://github.com/shadow-maint/shadow/issues/407).
+             (substitute* "libsubid/Makefile.in"
+               (("\\$\\(LIBTCB\\)" all)
+                (string-append all " $(LIBPAM)")))))
          ,@(if (%current-target-system)
                '((add-before 'configure 'set-runtime-shell
                    (lambda* (#:key inputs #:allow-other-keys)
@@ -845,8 +854,7 @@ hostname.")
                                          "libc"))))
                (substitute* "lib/nscd.c"
                  (("/usr/sbin/nscd")
-                  (string-append libc "/sbin/nscd")))
-               #t)))
+                  (string-append libc "/sbin/nscd"))))))
          (add-after 'install 'remove-groups
            (lambda* (#:key outputs #:allow-other-keys)
              ;; Remove `groups', which is already provided by Coreutils.
@@ -854,9 +862,7 @@ hostname.")
                     (bin (string-append out "/bin"))
                     (man (string-append out "/share/man")))
                (delete-file (string-append bin "/groups"))
-               (for-each delete-file (find-files man "^groups\\."))
-               #t))))))
-
+               (for-each delete-file (find-files man "^groups\\."))))))))
     (inputs
      `(,@(if (hurd-target?)
            '()
@@ -917,7 +923,7 @@ login, passwd, su, groupadd, and useradd.")
                (mkdir-p man8))
              #t)))
        #:tests? #f))                              ; no tests
-    (inputs `(("shadow" ,shadow)))
+    (inputs (list shadow))
 
     (home-page "https://sourceforge.net/projects/mingetty")
     (synopsis "Getty for the text console")
@@ -942,6 +948,11 @@ to allow automatic login and starting any app.")
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
+       ;; This package consists solely of architecture-independent
+       ;; tables. Cross-compilation is pointless! Make sure we'll
+       ;; always get the same derivation.
+       #:target #f
+       #:allowed-references ()
        #:builder (begin
                    (use-modules (guix build utils)
                                 (srfi srfi-26))
@@ -961,8 +972,7 @@ to allow automatic login and starting any app.")
                                (map (cut string-append etc "/" <>)
                                     '("services" "protocols" "rpc")))
                      #t))))
-    (native-inputs `(("tar" ,tar)
-                     ("xz" ,xz)))
+    (native-inputs (list tar xz))
     (synopsis "IANA protocol, port, and RPC number assignments")
     (description
      "This package provides the /etc/services, /etc/protocols, and /etc/rpc
@@ -1004,7 +1014,7 @@ would need and has several interesting built-in capabilities.")
 (define-public netcat-openbsd
   (package
     (name "netcat-openbsd")
-    (version "1.217-2")
+    (version "1.218-2")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1013,7 +1023,7 @@ would need and has several interesting built-in capabilities.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "19sr52ix14w344pv13ppb0c1wyg5dxhic1fw2q0s3qfmx57b9hhp"))))
+                "1rj4nx0jdism1idc4fghahqbafhv72cpk7zlyq9czgvbps10d1kh"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ; no test suite
@@ -1025,8 +1035,7 @@ would need and has several interesting built-in capabilities.")
          (add-before 'build 'patch
            (lambda _
              (setenv "QUILT_PATCHES" "debian/patches")
-             (invoke "quilt" "push" "-a")
-             #t))
+             (invoke "quilt" "push" "-a")))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -1037,11 +1046,9 @@ would need and has several interesting built-in capabilities.")
                (install-file "nc" bin)
                (install-file "nc.1" man)
                (install-file "debian/copyright" doc)
-               (copy-recursively "debian/examples" examples)
-               #t))))))
-    (inputs `(("libbsd" ,libbsd)))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("quilt" ,quilt)))
+               (copy-recursively "debian/examples" examples)))))))
+    (inputs (list libbsd))
+    (native-inputs (list pkg-config quilt))
     (home-page "https://packages.debian.org/sid/netcat-openbsd")
     (synopsis "Read and write data over TCP/IP")
     (description
@@ -1123,7 +1130,7 @@ recursive runs on the generated subnets.  (also IPv6)
                       (let ((out (assoc-ref outputs "out")))
                         (install-file "prips"
                                       (string-append out "/bin"))))))))
-    (native-inputs `(("perl-test-harness" ,perl-test-harness)))
+    (native-inputs (list 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
@@ -1134,18 +1141,21 @@ recursive runs on the generated subnets.  (also IPv6)
 (define-public alive
   (package
     (name "alive")
-    (version "2.0.3")
+    (version "2.0.5")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnu/alive/alive-"
-                                 version ".tar.xz"))
+                                 version ".tar.lz"))
              (sha256
               (base32
-               "053hfp7s66lnilm1ii4jrjmy44wpa2cwwh6f0sl8cyz0mm813x4b"))))
+               "12ahlxbbrynm6md8qc872qr795lqpfkr8kwlsig40i4nznzkvkwl"))))
     (build-system gnu-build-system)
     (arguments '(#:configure-flags '("alive_cv_nice_ping=yes")))
-    (inputs `(("guile" ,guile-2.0)
-              ("inetutils" ,inetutils)))
+    (inputs
+     (list guile-3.0
+           inetutils))
+    (native-inputs
+     (list lzip))
     (home-page "https://www.gnu.org/software/alive/")
     (synopsis "Autologin and keep-alive daemon")
     (description
@@ -1156,7 +1166,7 @@ connection alive.")
 (define-public isc-dhcp
   (let* ((bind-major-version "9")
          (bind-minor-version "11")
-         (bind-patch-version "32")
+         (bind-patch-version "36")
          (bind-release-type "")         ; for patch release, use "-P"
          (bind-release-version "")      ; for patch release, e.g. "6"
          (bind-version (string-append bind-major-version
@@ -1199,8 +1209,7 @@ connection alive.")
                  (("^RELEASETYPE=.*")
                   (format #f "RELEASETYPE=~a\n" ,bind-release-type))
                  (("^RELEASEVER=.*")
-                  (format #f "RELEASEVER=~a\n" ,bind-release-version)))
-               #t))
+                  (format #f "RELEASEVER=~a\n" ,bind-release-version)))))
            ,@(if (%current-target-system)
                  '((add-before 'configure 'fix-bind-cross-compilation
                      (lambda _
@@ -1209,8 +1218,7 @@ connection alive.")
                           "--host=$host_alias"))
                        ;; BIND needs a native compiler because the DHCP
                        ;; build system uses the built 'gen' executable.
-                       (setenv "BUILD_CC" "gcc")
-                       #t)))
+                       (setenv "BUILD_CC" "gcc"))))
                  '())
            (add-after 'configure 'post-configure
              (lambda* (#:key outputs #:allow-other-keys)
@@ -1248,11 +1256,7 @@ connection alive.")
                            "--owner=root:0"
                            "--group=root:0")))))
            (add-after 'install 'post-install
-             ;; TODO(core-updates): native-inputs isn't required anymore.
-             (lambda* (#:key ,@(if (%current-target-system)
-                                   '(native-inputs)
-                                   '())
-                       inputs outputs #:allow-other-keys)
+             (lambda* (#:key inputs outputs #:allow-other-keys)
                ;; Install the dhclient script for GNU/Linux and make sure
                ;; if finds all the programs it needs.
                (let* ((out       (assoc-ref outputs "out"))
@@ -1263,8 +1267,7 @@ connection alive.")
                       (sed       (assoc-ref inputs "sed*")))
                  (substitute* "client/scripts/linux"
                    (("/sbin/ip")
-                    (string-append (assoc-ref inputs "iproute")
-                                   "/sbin/ip")))
+                    (search-input-file inputs "/sbin/ip")))
 
                  (mkdir-p libexec)
                  (copy-file "client/scripts/linux"
@@ -1276,32 +1279,13 @@ connection alive.")
                      ,(map (lambda (dir)
                              (string-append dir "/bin:"
                                             dir "/sbin"))
-                           (list inetutils net-tools coreutils sed))))
-                 ;; TODO(core-updates): should not be required anymore,
-                 ;; once <https://issues.guix.gnu.org/49290> has been merged.
-                 ,@(if (%current-target-system)
-                       '((for-each
-                          (lambda (file)
-                            (substitute* file
-                              (((assoc-ref native-inputs "bash"))
-                               (assoc-ref inputs "bash"))))
-                          (list (string-append libexec
-                                               "/dhclient-script")
-                                (string-append libexec
-                                               "/.dhclient-script-real"))))
-                       '())
-                 #t))))))
+                           (list inetutils net-tools coreutils sed))))))))))
 
       (native-inputs
-       `(("perl" ,perl)
-         ("file" ,file)))
+       (list perl file))
 
       (inputs `(("inetutils" ,inetutils)
-                ;; TODO(core-updates): simply make this unconditional
-                ,@(if (%current-target-system)
-                      ;; for wrap-program
-                      `(("bash" ,(canonical-package bash-minimal)))
-                      '())
+                ("bash" ,(canonical-package bash-minimal)) ;for wrap-program
                 ,@(if (hurd-target?) '()
                       `(("net-tools" ,net-tools)
                         ("iproute" ,iproute)))
@@ -1316,7 +1300,7 @@ connection alive.")
                                         "/bind-" bind-version ".tar.gz"))
                     (sha256
                      (base32
-                      "0hhkb4d14hvly2751cxl2s2xyim3bri8qaisgkcm456xfi5wpy6b"))))
+                      "108nh7hha4r0lb5hf1fn7lqaascvhsrghpz6afm5lf9vf2vgqly9"))))
 
                 ("coreutils*" ,coreutils)
                 ("sed*" ,sed)))
@@ -1345,12 +1329,12 @@ tools: server, client, and relay agent.")
         (base32 "1df827m3vkjq2bcs5y9wg2cygvpdwl8ppl446qqhyym584gz54nl"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("bison" ,bison)
-       ("check" ,check)
-       ("flex" ,flex)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf
+           automake
+           bison
+           check
+           flex
+           pkg-config))
     (arguments
      `(#:configure-flags '("--with-check")))
     (home-page "https://radvd.litech.org/")
@@ -1375,8 +1359,7 @@ message.  These messages are required for IPv6 stateless autoconfiguration.")
                 "1m5x26vlbymp90k1qh0w3nj2nxzyvfrmfmwpj17k81dgri55ya7d"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)))
+     (list bison flex))
     (arguments
      ;; There are some tests in testprogs/, but no automated test suite.
      `(#:tests? #f
@@ -1410,9 +1393,8 @@ network statistics collection, security monitoring, network debugging, etc.")
                (base32
                 "1ghfs5gifzrk3813zf9zalfbjs70wg6llz6q31k180r7zf2nkcvr"))))
     (build-system gnu-build-system)
-    (inputs `(("libpcap" ,libpcap)
-              ("openssl" ,openssl)))
-    (native-inputs `(("perl" ,perl)))        ; for tests
+    (inputs (list libpcap openssl))
+    (native-inputs (list perl))        ; for tests
     (home-page "https://www.tcpdump.org/")
     (synopsis "Network packet analyzer")
     (description
@@ -1435,11 +1417,9 @@ through the network interface controller.")
                 "1855np7c4b0bqzhf1l1dyzxb90fpnvrirdisajhci5am6als31z9"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("glib" ,glib)
-       ("ncurses" ,ncurses)
-       ("libpcap" ,libpcap)))
+     (list glib ncurses libpcap))
     (home-page
      "https://web.archive.org/web/20160703195221/http://jnettop.kubs.info/wiki/")
     (synopsis "Visualize network traffic by bandwidth use")
@@ -1508,26 +1488,26 @@ by bandwidth they use.")
                   (find-files "." ".*")))
                #t))))))
     (native-inputs
-     `(("perl-cpan-changes" ,perl-cpan-changes)
-       ("perl-file-slurp" ,perl-file-slurp)
-       ("perl-file-which" ,perl-file-which)
-       ("perl-module-build" ,perl-module-build)
-       ("perl-readonly" ,perl-readonly)
-       ("perl-test-differences" ,perl-test-differences)
-       ("perl-test-distmanifest" ,perl-test-distmanifest)
-       ("perl-test-perltidy" ,perl-test-perltidy)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)
-       ("perl-test-trap" ,perl-test-trap)
-       ("perltidy" ,perltidy)))
+     (list perl-cpan-changes
+           perl-file-slurp
+           perl-file-which
+           perl-module-build
+           perl-readonly
+           perl-test-differences
+           perl-test-distmanifest
+           perl-test-perltidy
+           perl-test-pod
+           perl-test-pod-coverage
+           perl-test-trap
+           perltidy))
     (inputs
-     `(("perl-exception-class" ,perl-exception-class)
-       ("perl-sort-naturally" ,perl-sort-naturally)
-       ("perl-tk" ,perl-tk)
-       ("perl-try-tiny" ,perl-try-tiny)
-       ("perl-x11-protocol" ,perl-x11-protocol)
-       ("perl-x11-protocol-other" ,perl-x11-protocol-other)
-       ("xterm" ,xterm)))
+     (list perl-exception-class
+           perl-sort-naturally
+           perl-tk
+           perl-try-tiny
+           perl-x11-protocol
+           perl-x11-protocol-other
+           xterm))
     ;; The clusterssh.sourceforge.net address requires login to view
     (home-page "https://sourceforge.net/projects/clusterssh/")
     (synopsis "Secure concurrent multi-server terminal control")
@@ -1537,6 +1517,53 @@ console window to allow commands to be interactively run on multiple servers
 over ssh connections.")
     (license license:gpl2+)))
 
+(define-public realmd
+  (package
+    (name "realmd")
+    (version "0.17.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/freedesktop/realmd")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1c6q2a86kk2f1akzc36nh52hfwsmmc0mbp6ayyjxj4zsyk9zx5bf"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags '("--with-systemd-unit-dir=no"
+                           "--with-systemd-journal=no"
+                           "--with-distro=GNU guix"
+                           "--disable-doc")
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'install 'fix-service
+           (lambda* (#:key outputs #:allow-other-keys)
+             ;; GNU Guix does not have service config file, therefore we remove
+             ;; the line that copies the file.
+             (substitute* "Makefile"
+               ((".*/service/realmd-.*") "")))))))
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("glib-bin" ,glib "bin")
+       ("intltool" ,intltool)
+       ("pkg-config" ,pkg-config)
+       ("python" ,python)))
+    (inputs
+     (list glib mit-krb5 openldap polkit))
+    (synopsis "DBus service for network authentication")
+    (description "This package provides an on demand system DBus service.
+It allows callers to configure network authentication and domain membership
+in a standard way.  Realmd discovers information about the domain or realm
+automatically and does not require complicated configuration in order to join
+a domain or realm.  Dbus system service that manages discovery and enrollment in
+realms/domains like Active Directory or IPA.")
+    (home-page "https://www.freedesktop.org/software/realmd/")
+    (license license:lgpl2.1+)))
+
 (define-public rename
   (package
     (name "rename")
@@ -1567,9 +1594,7 @@ over ssh connections.")
                   (find-files "." ".*")))
                #t))))))
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+     (list perl-module-build perl-test-pod perl-test-pod-coverage))
     (home-page "https://metacpan.org/pod/distribution/File-Rename/rename.PL")
     (synopsis "Perl extension for renaming multiple files")
     (description
@@ -1615,8 +1640,7 @@ at once based on a Perl regular expression.")
                     (lambda* (#:key inputs #:allow-other-keys)
                       (substitute* "rc/rc"
                         (("/usr/sbin/sendmail")
-                         (string-append (assoc-ref inputs "mailutils")
-                                        "/bin/mail")))
+                         (search-input-file inputs "/bin/mail")))
                       #t))
                   (add-after 'unpack 'fix-configure
                     (lambda* (#:key inputs native-inputs #:allow-other-keys)
@@ -1652,9 +1676,7 @@ at once based on a Perl regular expression.")
                   (add-after 'install 'install-info
                     (lambda _
                       (invoke "make" "install-info"))))))
-    (native-inputs `(("texinfo" ,texinfo)
-                     ("automake" ,automake)
-                     ("util-linux" ,util-linux))) ; for 'cal'
+    (native-inputs (list texinfo automake util-linux)) ; for 'cal'
     (inputs `(("coreutils*" ,coreutils)
               ("mailutils" ,mailutils)))
     (home-page "https://www.gnu.org/software/rottlog/")
@@ -1743,10 +1765,7 @@ system administrator.")
        ;; the chroot's /etc/passwd doesn't have it.  Turn off the tests.
        #:tests? #f))
     (native-inputs
-     ;; XXX TODO: Remove on next rebuild cycle.
-     (if (hurd-target?)
-         '()
-         `(("groff" ,groff))))
+     (list groff))
     (inputs
      `(("coreutils" ,coreutils)
        ,@(if (hurd-target?)
@@ -1810,7 +1829,7 @@ commands and their arguments.")
        (list (string-append "CC=" ,(cc-for-target)))
        #:tests? #f))                 ; no test suite
     (native-inputs
-     `(("bison" ,bison)))
+     (list bison))
     (home-page "https://github.com/Duncaen/OpenDoas")
     (synopsis "Portable version of OpenBSD's doas command")
     (description "Doas is a minimal replacement for the venerable sudo.  It was
@@ -1822,7 +1841,7 @@ features of sudo with a fraction of the codebase.")
 (define-public wpa-supplicant-minimal
   (package
     (name "wpa-supplicant-minimal")
-    (version "2.9")
+    (version "2.10")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1830,7 +1849,7 @@ features of sudo with a fraction of the codebase.")
                     version ".tar.gz"))
               (sha256
                (base32
-                "05qzak1mssnxcgdrafifxh9w86a4ha69qabkg4bsigk499xyxggw"))
+                "0bvvw7bx149a57llzrwzlpggyym84f8jdd4abwsk0f2b2pjpmpr0"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -1838,10 +1857,7 @@ features of sudo with a fraction of the codebase.")
                     ;; Disable D-Bus to save ~14MiB on the closure size.
                     (("^CONFIG_CTRL_IFACE_DBUS" line _)
                      (string-append "#" line)))
-                  #t))
-              (patches
-               (search-patches "wpa-supplicant-CVE-2021-27803.patch"
-                               "wpa-supplicant-CVE-2021-30004.patch"))))
+                  #t))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -1905,11 +1921,9 @@ features of sudo with a fraction of the codebase.")
                                         "/lib"))
       #:tests? #f))
     (inputs
-     `(("readline" ,readline)
-       ("libnl" ,libnl)
-       ("openssl" ,openssl)))
+     (list readline libnl openssl))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://w1.fi/wpa_supplicant/")
     (synopsis "Connecting to WPA and WPA2-protected wireless networks")
     (description
@@ -1930,8 +1944,8 @@ command.")
 (define-public wpa-supplicant
   (package (inherit wpa-supplicant-minimal)
     (name "wpa-supplicant")
-    (inputs `(("dbus" ,dbus)
-              ,@(package-inputs wpa-supplicant-minimal)))
+    (inputs (modify-inputs (package-inputs wpa-supplicant-minimal)
+              (prepend dbus)))
     (arguments
      (substitute-keyword-arguments (package-arguments wpa-supplicant-minimal)
        ((#:phases phases)
@@ -1957,14 +1971,12 @@ command.")
   (package
     (inherit wpa-supplicant)
     (name "wpa-supplicant-gui")
-    (inputs `(("qtbase" ,qtbase-5)
-              ("qtsvg" ,qtsvg)
-              ,@(package-inputs wpa-supplicant)))
+    (inputs (modify-inputs (package-inputs wpa-supplicant)
+              (prepend qtbase-5 qtsvg)))
     (native-inputs
      ;; For icons.
-     `(("imagemagick" ,imagemagick)
-       ("inkscape" ,inkscape)
-       ,@(package-native-inputs wpa-supplicant)))
+     (modify-inputs (package-native-inputs wpa-supplicant)
+       (prepend imagemagick inkscape)))
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (add-after 'unpack 'chdir
@@ -1998,69 +2010,55 @@ command.")
 (define-public hostapd
   (package
     (name "hostapd")
-    (version "2.9")
+    (version "2.10")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://w1.fi/releases/hostapd-" version
                                   ".tar.gz"))
               (sha256
                (base32
-                "1mrbvg4v7vm7mknf0n29mf88k3s4a4qj6r4d51wq8hmjj1m7s7c8"))
-              (patches
-               (search-patches "wpa-supplicant-CVE-2021-27803.patch"
-                               "wpa-supplicant-CVE-2021-30004.patch"))))
+                "0pcik0a6yin9nib02frjhaglmg44hwik086iwg1751b7kdwpqvi0"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (replace 'configure
-           (lambda _
-             ;; This is mostly copied from 'wpa-supplicant' above.
-             (chdir "hostapd")
-             (copy-file "defconfig" ".config")
-             (let ((port (open-file ".config" "al")))
-               (display "
-      CONFIG_LIBNL32=y
-      CONFIG_IEEE80211R=y
-      CONFIG_IEEE80211N=y
-      CONFIG_IEEE80211AC=y\n" port)
-               (close-port port))
-             #t))
-         (add-after 'unpack 'patch-pkg-config
-           (lambda _
-             (substitute* "src/drivers/drivers.mak"
-               (("pkg-config")
-                (or (which "pkg-config")
-                    (string-append ,(%current-target-system)
-                                   "-pkg-config"))))
-             #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 (string-append man "/man1"))
-                    (man8 (string-append man "/man8")))
-               (define (copy-man-page target)
-                 (lambda (file)
-                   (install-file file target)))
-
-               (for-each (copy-man-page man1)
-                         (find-files "." "\\.1"))
-               (for-each (copy-man-page man8)
-                         (find-files "." "\\.8"))
-               #t))))
-
-      #:make-flags (list (string-append "CC=" ,(cc-for-target))
-                         (string-append "BINDIR=" (assoc-ref %outputs "out")
-                                        "/sbin")
-                         (string-append "LIBDIR=" (assoc-ref %outputs "out")
-                                        "/lib"))
-      #:tests? #f))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (replace 'configure
+                 (lambda _
+                   ;; This is mostly copied from 'wpa-supplicant' above.
+                   (chdir "hostapd")
+                   (copy-file "defconfig" ".config")
+                   (let ((port (open-file ".config" "al")))
+                     (display "CONFIG_LIBNL32=y
+                               CONFIG_IEEE80211R=y
+                               CONFIG_IEEE80211N=y
+                               CONFIG_IEEE80211AC=y\n" port)
+                     (close-port port))))
+               (add-after 'unpack 'patch-pkg-config
+                 (lambda _
+                   (substitute* "src/drivers/drivers.mak"
+                     (("pkg-config")
+                      #$(pkg-config-for-target)))))
+               (add-after 'install 'install-man-pages
+                 (lambda* (#:key outputs #:allow-other-keys)
+                   (let* ((man  (string-append #$output "/share/man"))
+                          (man1 (string-append man "/man1"))
+                          (man8 (string-append man "/man8")))
+                     (define (copy-man-page target)
+                       (lambda (file)
+                         (install-file file target)))
+                     (for-each (copy-man-page man1)
+                               (find-files "." "\\.1"))
+                     (for-each (copy-man-page man8)
+                               (find-files "." "\\.8"))))))
+           #:make-flags
+           #~(list (string-append "CC=" #$(cc-for-target))
+                   (string-append "BINDIR=" #$output "/sbin")
+                   (string-append "LIBDIR=" #$output "/lib"))
+           #:tests? #f))
+    (native-inputs (list pkg-config))
 
     ;; There's an optional dependency on SQLite.
-    (inputs `(("openssl" ,openssl)
-              ("libnl" ,libnl)))
+    (inputs (list openssl libnl))
     (home-page "https://w1.fi/hostapd/")
     (synopsis "Daemon for Wi-Fi access points and authentication servers")
     (description
@@ -2145,7 +2143,7 @@ module slots, and the list of I/O ports (e.g. serial, parallel, USB).")
 (define-public acpica
   (package
     (name "acpica")
-    (version "20210730")
+    (version "20211217")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -2153,10 +2151,9 @@ module slots, and the list of I/O ports (e.g. serial, parallel, USB).")
                     version ".tar.gz"))
               (sha256
                (base32
-                "02z0492vrpk001m7xcy72lp7sd968lja3wp6jn3q6k9nm46h4v7h"))))
+                "0521hmaw2zhi0mpgnaf2i83dykfgql4bx98cg7xqy8wmj649z194"))))
     (build-system gnu-build-system)
-    (native-inputs `(("flex" ,flex)
-                     ("bison" ,bison)))
+    (native-inputs (list flex bison))
     (arguments
      `(#:make-flags (list (string-append "PREFIX=" %output)
                           (string-append "CC=" ,(cc-for-target))
@@ -2181,17 +2178,16 @@ development, not the kernel implementation of ACPI.")
 (define-public s-tui
   (package
     (name "s-tui")
-    (version "1.1.1")
+    (version "1.1.3")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "s-tui" version))
        (sha256
-        (base32 "1clk59wf6v1lq33h4x5qwxvz5ng9mfkp1s6ynxa58w2raq8dbmy5"))))
+        (base32 "1l2ik5iwmb8vxa2aqdy62zfy3zfzbpq5a0pgpka2vvlw9ivpqy5p"))))
     (build-system python-build-system)
     (inputs
-     `(("python-psutil" ,python-psutil)
-       ("python-urwid" ,python-urwid)))
+     (list python-psutil python-urwid))
     (home-page "https://github.com/amanusk/s-tui")
     (synopsis "Interactive terminal stress test and monitoring tool")
     (description
@@ -2202,15 +2198,17 @@ utilization, temperature and power.")
 (define-public stress
   (package
     (name "stress")
-    (version "1.0.4")
+    (version "1.0.5")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://debian/pool/main/s/stress/stress_"
                                   version ".orig.tar.gz"))
               (sha256
                (base32
-                "0nw210jajk38m3y7h8s130ps2qsbz7j75wab07hi2r3hlz14yzh5"))))
+                "09shpd85g8dvpiw0mnwykss676g0s7lbi8ab37xjinb5lfff960p"))))
     (build-system gnu-build-system)
+    (native-inputs
+     (list autoconf automake))
     (home-page "https://packages.debian.org/sid/stress")
     (synopsis "Impose load on and stress test a computer system")
     (description
@@ -2225,6 +2223,74 @@ the classes of bugs which only or more frequently manifest themselves when the
 system is under heavy load.")
     (license license:gpl2+)))
 
+(define-public stress-ng
+  (package
+    (name "stress-ng")
+    (version "0.13.10")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/ColinIanKing/stress-ng")
+             (commit (string-append "V" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1z9vjn2131iv3pwrh04z6r5ygi1qgad5bi3jhghcvc3v1b4k5ran"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list #:make-flags
+           #~(list (string-append "CC=" #$(cc-for-target))
+                   (string-append "BINDIR=" #$output "/bin")
+                   ;; XXX Really: MAN1DIR, or man pages won't be found.
+                   (string-append "MANDIR=" #$output "/share/man/man1")
+                   (string-append "JOBDIR=" #$output
+                                  "/share/stress-ng/example-jobs")
+                   (string-append "BASHDIR=" #$output
+                                  "/share/bash-completion/completions"))
+           #:test-target "lite-test"
+           #:phases
+           #~(modify-phases %standard-phases
+               (delete 'configure)      ; no configure script
+               (add-after 'check 'check-a-little-harder
+                 ;; XXX Guix supports only one #:test-target.  Run more tests.
+                 (lambda* (#:key tests? #:allow-other-keys #:rest args)
+                   (when tests?
+                     (substitute* "debian/tests/fast-test-all"
+                       (("EXCLUDE=\"" exclude=)
+                        (string-append exclude=
+                                       ;; Fails if host kernel denies ptracing.
+                                       "ptrace ")))
+                     (apply (assoc-ref %standard-phases 'check)
+                            `(,@args #:test-target "fast-test-all"))))))))
+    (inputs
+     (list keyutils
+           kmod
+           libaio
+           libbsd
+           libcap
+           libgcrypt
+           zlib))
+    (home-page "https://github.com/ColinIanKing/stress-ng")
+    (synopsis "Load and stress-test a computer system in various ways")
+    (description
+     "stress-ng stress-tests a computer system by exercising both physical
+subsystems as operating system kernel interfaces.  It can stress the CPU, cache,
+disk, memory, socket and pipe I/O, scheduling, and much more, in various
+selectable ways.  This can trip hardware issues such as thermal overruns as well
+as operating system bugs that occur only when a system is being thrashed hard.
+
+You can also measure test throughput rates, which can be useful to observe
+performance changes across different operating system releases or types of
+hardware.  However, stress-ng is not a benchmark.  Use it with caution: some of
+the tests can make poorly designed hardware run dangerously hot or make the
+whole system lock up.
+
+Compared to its inspiration, @command{stress}, @command{stress-ng} offers many
+additional options such as the number of bogo operations to run, execution
+metrics, verification of memory and computational operations, and considerably
+more stress mechanisms.")
+    (license license:gpl2+)))
+
 (define-public detox
   (package
     (name "detox")
@@ -2240,9 +2306,7 @@ system is under heavy load.")
                 "116bgpbkh3c96h6vq0880rmnpb5kbnnlvvkpsrcib6928bj8lfvi"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("flex" ,flex)))
+     (list autoconf automake flex))
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (add-after 'unpack 'delete-configure
@@ -2276,14 +2340,14 @@ characters can be replaced as well, as can UTF-8 characters.")
                 "1zlh44w67py416hkvw6nrfmjickc2d43v51vcli5p374d5sw84ql"))))
     (build-system gnu-build-system)
     (inputs
-     `(("ntfs-3g" ,ntfs-3g)
-       ("util-linux" ,util-linux "lib")
-       ("openssl" ,openssl)
-       ;; FIXME: add reiserfs.
-       ("zlib" ,zlib)
-       ("e2fsprogs" ,e2fsprogs)
-       ("libjpeg" ,libjpeg-turbo)
-       ("ncurses" ,ncurses)))
+     (list ntfs-3g
+           `(,util-linux "lib")
+           openssl
+           ;; FIXME: add reiserfs.
+           zlib
+           e2fsprogs
+           libjpeg-turbo
+           ncurses))
     (home-page "https://www.cgsecurity.org/wiki/TestDisk")
     (synopsis "Data recovery tool")
     (description
@@ -2294,20 +2358,24 @@ recover lost partitions and/or make non-booting disks bootable again.")
 (define-public tree
   (package
     (name "tree")
-    (version "1.8.0")
+    (version "2.0.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
                     "http://mama.indstate.edu/users/ice/tree/src/tree-"
                     version ".tgz"))
               (sha256
-               (base32 "1hmpz6k0mr6salv0nprvm1g0rdjva1kx03bdf1scw8a38d5mspbi"))))
+               (base32 "0f92vx6gpz7v29wi9clklzah57v7lgx5kv0m1w4b9xjc35d9qcz3"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:phases (modify-phases %standard-phases (delete 'configure))
-       #:tests? #f                      ; no check target
-       #:make-flags (let ((out (assoc-ref %outputs "out")))
-                               (list (string-append "prefix=" out)))))
+     (list
+       #:phases
+       #~(modify-phases %standard-phases
+           (delete 'configure))         ; No configure script.
+       #:tests? #f                      ; No check target.
+       #:make-flags
+       #~(list (string-append "PREFIX=" #$output)
+               (string-append "CC=" #$(cc-for-target)))))
     (synopsis "Recursively list the contents of a directory")
     (description
      "Tree is a recursive directory listing command that produces a depth
@@ -2346,39 +2414,33 @@ features of ls(1), find(1), stat(1) and du(1).")
 (define-public direvent
   (package
     (name "direvent")
-    (version "5.2")
+    (version "5.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnu/direvent/direvent-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0m9vi01b1km0cpknflyzsjnknbava0s1n6393b2bpjwyvb6j5613"))
-              (modules '((guix build utils)))
-              (snippet '(begin
-                          (substitute* "tests/testsuite"
-                            (("#![[:blank:]]?/bin/sh")
-                             "#!$SHELL"))
-                          #t))))
+                "15y4jk5vlcd003bvf42c6z9zd4gz4pwqpwaapqmyk7x4gnksh1cl"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (add-before 'build 'patch-/bin/sh
-           (lambda* (#:key inputs #:allow-other-keys)
-             ;; Use the right shell when executing the watcher and
-             ;; user-provided shell commands.
-             (let ((bash (assoc-ref inputs "bash")))
-               (substitute* '("src/direvent.c" "src/progman.c")
-                 (("\"/bin/sh\"")
-                  (string-append "\"" bash "/bin/sh\"")))
-
-               ;; Adjust the 'shell.at' test accordingly.
-               (substitute* "tests/testsuite"
-                 (("SHELL=/bin/sh")
-                  (string-append "SHELL=" bash "/bin/sh")))
-
-               #t))))))
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-before 'build 'substitute-file-names
+                 (lambda* (#:key inputs #:allow-other-keys)
+                   ;; Use the right shell when executing the watcher and
+                   ;; user-provided shell commands.
+                   (let ((bash (assoc-ref inputs "bash")))
+                     (substitute* '("src/direvent.c" "src/progman.c")
+                       (("\"/bin/sh\"")
+                        (string-append "\"" bash "/bin/sh\""))))
+
+                   ;; Adjust the test suite similarly.
+                   (substitute* "tests/testsuite"
+                     (("(SHELL=|#![[:space:]]*)/bin/sh" _ prefix)
+                      (string-append prefix (which "sh")))
+                     (("/bin/kill")
+                      (which "kill"))))))))
     (home-page "https://www.gnu.org.ua/software/direvent/")
     (synopsis "Daemon to monitor directories for events such as file removal")
     (description
@@ -2432,7 +2494,7 @@ various ways that may be running with too much privilege.")
                (base32
                 "1mlc25sd5rgj5xmzcllci47inmfdw7cp185fday6hc9rwqkqmnaw"))))
     (build-system gnu-build-system)
-    (inputs `(("libcap-ng" ,libcap-ng)))
+    (inputs (list libcap-ng))
     (home-page "https://www.smartmontools.org/")
     (synopsis "S.M.A.R.T. harddisk control and monitoring tools")
     (description
@@ -2457,8 +2519,7 @@ degradation and failure.")
         (base32 "1g9p50xhi2sp0hqxml4w2k0kq9jv988q2yxm347z5349dlxvap6d"))))
     (build-system gnu-build-system)
     (inputs
-     `(("ncurses" ,ncurses)
-       ("pcre2" ,pcre2)))
+     (list ncurses pcre2))
     (home-page "https://github.com/adrianlopezroche/fdupes")
     (synopsis "Identify duplicate files")
     (description
@@ -2505,14 +2566,13 @@ of supported upstream metrics systems simultaneously.")
 (define-public ansible-core
   (package
     (name "ansible-core")
-    (version "2.11.4")
+    (version "2.11.6")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "ansible-core" version))
        (sha256
-        (base32
-         "0jgahcv2pyc5ky0wir55a1h9q9d6rgqj60rqmvlpbj76vz1agsi2"))))
+        (base32 "0fih7nxszni8imi5sywsifd976v77ydhip43pzg7dd65qy1h5mck"))))
     (build-system python-build-system)
     (arguments
      `(#:modules ((guix build python-build-system)
@@ -2552,7 +2612,7 @@ sys.argv[0] = re.sub(r'\\.([^/]*)-real$', r'\\1', sys.argv[0])
            (lambda _
              (substitute* "test/lib/ansible_test/_internal/ansible_util.py"
                (("PYTHONPATH=get_ansible_python_path\\(args\\)" all)
-                (string-append all "+ ':' + os.environ['PYTHONPATH']")))))
+                (string-append all "+ ':' + os.environ['GUIX_PYTHONPATH']")))))
          (add-after 'unpack 'patch-paths
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (substitute* "lib/ansible/module_utils/compat/selinux.py"
@@ -2589,27 +2649,24 @@ sys.argv[0] = re.sub(r'\\.([^/]*)-real$', r'\\1', sys.argv[0])
                ;; devel/test/utils/shippable/shippable.sh.
                (invoke "ansible-test" "units" "-v")))))))
     (native-inputs
-     `(("openssh" ,openssh)
-       ("openssl" ,openssl)
-       ("python-mock" ,python-mock)
-       ("python-pycrypto" ,python-pycrypto)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-forked" ,python-pytest-forked)
-       ("python-pytest-mock" ,python-pytest-mock)
-       ("python-pytest-xdist" ,python-pytest-xdist)
-       ("python-pytz" ,python-pytz)))
+     (list openssh
+           openssl
+           python-mock
+           python-pycrypto
+           python-pytest
+           python-pytest-forked
+           python-pytest-mock
+           python-pytest-xdist
+           python-pytz))
     (inputs                    ;optional dependencies captured in wrap scripts
-     `(("libselinux" ,libselinux)
-       ("python-paramiko" ,python-paramiko)
-       ("python-passlib" ,python-passlib)
-       ("python-pexpect" ,python-pexpect)
-       ("sshpass" ,sshpass)))
+     (list libselinux python-paramiko python-passlib python-pexpect
+           sshpass))
     (propagated-inputs      ;core dependencies listed in egg-info/requires.txt
-     `(("python-cryptography" ,python-cryptography)
-       ("python-jinja2" ,python-jinja2)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-packaging" ,python-packaging) ;for version number parsing
-       ("python-resolvelib" ,python-resolvelib-0.5)))
+     (list python-cryptography
+           python-jinja2
+           python-pyyaml
+           python-packaging ;for version number parsing
+           python-resolvelib-0.5))
     (home-page "https://www.ansible.com/")
     (synopsis "Radically simple IT automation")
     (description "Ansible aims to be a radically simple IT automation system.
@@ -2636,16 +2693,16 @@ provides the following commands:
 (define-public ansible
   (package
     (name "ansible")
-    (version "4.4.0")
+    (version "4.7.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "ansible" version))
        (sha256
-        (base32 "031n22j0lsmh69x6i6gkva81j68b4yzh1pbg3q2h4bknl85q46ag"))))
+        (base32 "0aab9id6dqfw2111r731c7y1p77dpzczynmgl4d989p3a7n54z0b"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("ansible-core" ,ansible-core)))
+     (list ansible-core))
     ;; The Ansible collections are found by ansible-core via PYTHONPATH; the
     ;; following search path ensures that they are found even when Python is
     ;; not present in the profile.
@@ -2655,7 +2712,7 @@ provides the following commands:
      ;; variable in the tests/cpan.scm test.
      (list (search-path-specification
             (variable "PYTHONPATH")
-            (files (list "lib/python3.8/site-packages")))))
+            (files (list "lib/python3.9/site-packages")))))
     (home-page "https://www.ansible.com/")
     (synopsis "Radically simple IT automation")
     (description "Ansible aims to be a radically simple IT automation system.
@@ -2685,18 +2742,17 @@ modules and plugins that extend Ansible.")
                         "debops-debops-defaults-fall-back-to-less.patch"))))
     (build-system python-build-system)
     (native-inputs
-     `(("git" ,git)))
+     (list git))
     (inputs
-     `(("ansible" ,ansible)
-       ("encfs" ,encfs)
-       ("fuse" ,fuse)
-       ("util-linux" ,util-linux)  ;; for umount
-       ("findutils" ,findutils)
-       ("gnupg" ,gnupg)
-       ("which" ,which)))
+     (list ansible
+           encfs
+           fuse
+           util-linux ;; for umount
+           findutils
+           gnupg
+           which))
     (propagated-inputs
-     `(("python-future" ,python-future)
-       ("python-distro" ,python-distro)))
+     (list python-future python-distro))
     (arguments
      `(#:tests? #f
        #:phases
@@ -2847,8 +2903,7 @@ limits.")
         (base32 "1rgpsh70manr2dydna9da4x7p8ahii7dgdgwir5fka340n1wrcws"))))
     (build-system gnu-build-system)
     (native-inputs                      ; for tests
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)))
+     (list python-mock python-pytest))
     (inputs
      `(("python" ,python-wrapper)))
     (arguments
@@ -2921,8 +2976,10 @@ the command line.")
                 "15sgkdyijb7vbxpxjavh5qm5nvyii3fqcg9mzvw7fx8s6zmfwczp"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libpcap" ,libpcap)
-        ("ncurses" ,ncurses)))
+      (list libpcap ncurses))
+    (arguments
+      ;; Fix build failure with GCC 10
+     '(#:configure-flags '("CFLAGS=-O2 -g -fcommon")))
     (synopsis "Monitor network usage")
     (description "Iftop does for network usage what @command{top} does
 for CPU usage.  It listens to network traffic on a named interface and
@@ -2953,8 +3010,7 @@ displays a table of current bandwidth usage by pairs of hosts.")
                      ""))
                   #t))))
     (inputs
-     `(("openssl" ,openssl)
-       ("libgcrypt" ,libgcrypt)))
+     (list openssl libgcrypt))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags
@@ -2996,41 +3052,39 @@ platform-specific methods.")
   (package
     (name "audit")
     (home-page "https://people.redhat.com/sgrubb/audit/")
-    (version "2.8.5")
+    (version "3.0.6")
     (source (origin
               (method url-fetch)
               (uri (string-append home-page "audit-" version ".tar.gz"))
               (sha256
                (base32
-                "1dzcwb2q78q7x41shcachn7f4aksxbxd470yk38zh03fch1l2p8f"))))
+                "0pnc9wzslks9p6kxw0llp1n8h8yg0frcxl3x84fl0hisa5vlvr63"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags (list "--with-python=no"
                                "--disable-static")))
     (inputs
-     `(("openldap" ,openldap)
-       ("gnutls" ,gnutls)
-       ("sasl" ,cyrus-sasl)))
+     (list openldap gnutls cyrus-sasl))
     (synopsis "User-space component to the Linux auditing system")
     (description
-     "auditd is the user-space component to the Linux auditing system, which
-allows logging of system calls made by user-land processes.  It's responsible
-for writing audit records to the disk.  Viewing the logs is done with the
-@code{ausearch} or @code{aureport} utilities.  Configuring the audit rules is
-done with the @code{auditctl} utility.")
+     "This is the user-space component to the Linux auditing system, which
+allows logging of system calls made by user-land processes.  @command{auditd} is
+responsible for writing audit records to the disk.  Viewing the logs is done
+with the @code{ausearch} or @code{aureport} utilities.  Configuring the audit
+rules is done with the @code{auditctl} utility.")
     (license license:gpl2+)))
 
 (define-public nmap
   (package
     (name "nmap")
-    (version "7.91")
+    (version "7.92")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://nmap.org/dist/nmap-" version
                                   ".tar.bz2"))
               (sha256
                (base32
-                "001kb5xadqswyw966k2lqi6jr6zz605jpp9w4kmm272if184pk0q"))
+                "18bifn67kz2wxkbnfwcrin2xrhc6qf4p2bvxfqb2a2vbi8pryix5"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -3041,8 +3095,7 @@ done with the @code{auditctl} utility.")
                               "libpcap"
                               "libpcre"
                               ;; Remove pre-compiled binares.
-                              "mswin32"))
-                  #t))))
+                              "mswin32"))))))
     (build-system gnu-build-system)
     (inputs
      `(("openssl" ,openssl)
@@ -3064,8 +3117,7 @@ done with the @code{auditctl} utility.")
            (lambda _
              (substitute* "Makefile"
                ;; Do not attempt to build lua.
-               (("build-dnet build-lua") "build-dnet"))
-             #t))
+               (("build-dnet build-lua") "build-dnet"))))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (define (make out . args)
@@ -3087,9 +3139,8 @@ done with the @code{auditctl} utility.")
                  "install-nping")
                (make ndiff "install-ndiff")
                (wrap-program (string-append ndiff "/bin/ndiff")
-                 `("PYTHONPATH" prefix
-                   (,(python-path ndiff)))))
-             #t))
+                 `("GUIX_PYTHONPATH" prefix
+                   (,(python-path ndiff)))))))
          ;; These are the tests that do not require network access.
          (replace 'check
            (lambda _ (invoke "make"
@@ -3106,7 +3157,7 @@ tool.  It is also useful for tasks such as network inventory, managing service
 upgrade schedules, and monitoring host or service uptime.  It also provides an
 advanced netcat implementation (ncat), a utility for comparing scan
 results (ndiff), and a packet generation and response analysis tool (nping).")
-    ;; See <https://github.com/nmap/nmap/issues/2199#issuecomment-792048244>.
+    ;; See <https://github.com/nmap/nmap/issues/2199#issuecomment-894812634>.
     ;; This package uses nmap's bundled versions of libdnet and liblinear, which
     ;; both use a 3-clause BSD license.
     (license (list license:nmap license:bsd-3))))
@@ -3143,7 +3194,7 @@ results (ndiff), and a packet generation and response analysis tool (nping).")
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
                (wrap-program (string-append out "/bin/dstat")
-                 `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH"))))
+                 `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH"))))
                #t))))))
     (inputs
      `(("python" ,python-wrapper)
@@ -3165,7 +3216,7 @@ throughput (in the same interval).")
 (define-public thefuck
   (package
     (name "thefuck")
-    (version "3.30")
+    (version "3.31")
     (source
      (origin
        (method git-fetch)
@@ -3174,7 +3225,7 @@ throughput (in the same interval).")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0fnf78956pwhb9cgv1jmgypnkma5xzflkivfrkfiadbgin848yfg"))
+        (base32 "05h60gxky57nalc2hdkpg8wqyg16432x9gcb9wnwblplk98998kq"))
        (patches (search-patches "thefuck-test-environ.patch"))))
     (build-system python-build-system)
     (arguments
@@ -3187,19 +3238,15 @@ throughput (in the same interval).")
              (add-installed-pythonpath inputs outputs)
              ;; Some tests need write access to $HOME.
              (setenv "HOME" "/tmp")
-             (invoke "py.test" "-v")
-             #t)))))
+             ;; Even with that, this function tries to mkdir /.config.
+             (substitute* "tests/test_utils.py"
+               (("settings\\.init\\(\\)") ""))
+             (invoke "py.test" "-v"))))))
     (propagated-inputs
-     `(("python-colorama" ,python-colorama)
-       ("python-decorator" ,python-decorator)
-       ("python-psutil" ,python-psutil)
-       ("python-pyte" ,python-pyte)
-       ("python-six" ,python-six)))
+     (list python-colorama python-decorator python-psutil python-pyte
+           python-six))
     (native-inputs
-     `(("go" ,go)
-       ("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-mock" ,python-pytest-mock)))
+     (list go python-mock python-pytest python-pytest-mock))
     (home-page "https://github.com/nvbn/thefuck")
     (synopsis "Correct mistyped console command")
     (description
@@ -3210,13 +3257,13 @@ a new command using the matched rule, and runs it.")
 (define-public di
   (package
     (name "di")
-    (version "4.50")
+    (version "4.51")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://sourceforge/diskinfo-di/di-" version ".tar.gz"))
        (sha256
-        (base32 "0aj9ldkvmj8fmrk685vd2gagz0q8lwsn2nfbx6r6mza94mn8pw42"))))
+        (base32 "1fv12j9b9sw6p38lcbzcw87zl5qp1aa7a4a4jn3449zz9af15ckr"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ; obscure test failures
@@ -3226,8 +3273,7 @@ a new command using the matched rule, and runs it.")
          (add-before 'build 'setup-environment
            (lambda* (#:key outputs #:allow-other-keys)
              (setenv "CC" ,(cc-for-target))
-             (setenv "prefix" (assoc-ref outputs "out"))
-             #t)))
+             (setenv "prefix" (assoc-ref outputs "out")))))
        #:make-flags (list "--environment-overrides")))
     (home-page "https://gentoo.com/di/")
     (synopsis "Advanced df like disk information utility")
@@ -3265,7 +3311,7 @@ produce uniform output across heterogeneous networks.")
        ("gettext" ,gettext-minimal)
        ("libnotify" ,libnotify)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "Lightweight battery icon for the system tray")
     (description "cbatticon is a lightweight battery icon that displays
 the status of your battery in the system tray.")
@@ -3296,9 +3342,9 @@ the status of your battery in the system tray.")
          #:make-flags (list (string-append "PREFIX="
                                            (assoc-ref %outputs "out")))))
       (inputs
-       `(("libx11" ,libx11)))
+       (list libx11))
       (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
       (synopsis "Scriptable launcher menu")
       (description "Interrobang is a scriptable launcher menu with a customizable
 shortcut syntax and completion options.")
@@ -3335,11 +3381,9 @@ shortcut syntax and completion options.")
                (("pam-util/vector\n")  ""))
              #t)))))
     (inputs
-     `(("linux-pam" ,linux-pam)
-       ("mit-krb5" ,mit-krb5)))
+     (list linux-pam mit-krb5))
     (native-inputs
-     `(("perl" ,perl)
-       ("perl-test-pod" ,perl-test-pod))) ; required for tests
+     (list perl perl-test-pod)) ; required for tests
     (synopsis "Kerberos PAM module")
     (description
      "Pam-krb5 is a Kerberos PAM module for either MIT Kerberos or Heimdal.
@@ -3416,10 +3460,9 @@ Kerberos and Heimdal and FAST is supported with recent MIT Kerberos.")
     (source
      (sunxi-tools-source version))
     (native-inputs
-     `(("sunxi-target-tools" ,sunxi-target-tools)
-       ("pkg-config" ,pkg-config)))
+     (list sunxi-target-tools pkg-config))
     (inputs
-     `(("libusb" ,libusb)))
+     (list libusb))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ; no tests exist
@@ -3461,6 +3504,43 @@ in order to be able to find it.
 @end enumerate")
     (license license:gpl2+)))
 
+(define-public xfel
+  (package
+    (name "xfel")
+    (version "1.2.4")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+              (url "https://github.com/xboot/xfel.git")
+              (commit (string-append "v" version))))
+       (sha256
+         (base32 "0r4j63vh6279fj1yh71h08d1av3nc0majlad5yh6admsxiig101m"))
+       (file-name (git-file-name name version))))
+    (native-inputs
+     (list pkg-config))
+    (inputs
+     (list libusb))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f ; No tests exist
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-installation-target
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (substitute* "Makefile"
+                (("/usr/local") out)
+                (("/usr") out)
+                (("/etc/udev/rules.d")
+                 (string-append out "/lib/udev/rules.d"))))))
+         (delete 'configure))))
+    (home-page "https://github.com/xboot/xfel")
+    (synopsis "Remote debugging tool for Allwinner D1 computers")
+    (description "This package contains a debugging tool for Allwinner D1
+devices (connects via USB OTG).")
+    (license license:expat)))
+
 (define-public sedsed
   (package
     (name "sedsed")
@@ -3526,6 +3606,7 @@ buffers.")
 (define-public igt-gpu-tools
   (package
     (name "igt-gpu-tools")
+    ;; You should very likely remove the 'fix-meson.build phase when upgrading.
     (version "1.26")
     (source
      (origin
@@ -3538,20 +3619,30 @@ buffers.")
         (base32 "0m124pqv7zna25jnvk566c4kk628jr0w8mgnp8mr5xqz9cprgczm"))))
     (build-system meson-build-system)
     (arguments
-     `(#:tests? #f))            ; many of the tests try to load kernel modules
+     `(#:tests? #f              ; many of the tests try to load kernel modules
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'find-rst2man.py
+           (lambda _
+             (substitute* "man/meson.build"
+               (("'rst2man'") "'rst2man.py'"))))
+         (add-after 'unpack 'fix-meson.build
+           ;; Fix ‘ERROR: Function does not take positional arguments.’
+           (lambda _
+             (substitute* "lib/meson.build"
+               (("f\\.underscorify\\(f\\)")
+                "f.underscorify()")))))))
     (inputs
-     `(("cairo" ,cairo)
-       ("elfutils" ,elfutils)           ; libdw
-       ("eudev" ,eudev)
-       ("kmod" ,kmod)
-       ("libdrm" ,libdrm)
-       ("libpciaccess" ,libpciaccess)
-       ("libunwind" ,libunwind)
-       ("procps" ,procps)))
+     (list cairo
+           elfutils ; libdw
+           eudev
+           kmod
+           libdrm
+           libpciaccess
+           libunwind
+           procps))
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)
-       ("pkg-config" ,pkg-config)))
+     (list bison flex pkg-config python-docutils))
     (home-page "https://gitlab.freedesktop.org/drm/igt-gpu-tools")
     (synopsis "Tools for development and testing of the Intel DRM driver")
     (description "IGT GPU Tools is a collection of tools for development and
@@ -3625,8 +3716,7 @@ you are running, what theme or icon set you are using, etc.")
                          (string-append out "/share/doc/" ,name "-" ,version))
            (substitute* (string-append out "/bin/screenfetch")
              (("/usr/bin/env bash")
-              (string-append (assoc-ref %build-inputs "bash")
-                             "/bin/bash")))
+              (search-input-file %build-inputs "/bin/bash")))
            (wrap-program
                (string-append out "/bin/screenfetch")
              `("PATH" ":" prefix
@@ -3636,14 +3726,11 @@ you are running, what theme or icon set you are using, etc.")
                                 (assoc-ref %build-inputs "xprop") "/bin"))))
            (substitute* (string-append out "/bin/screenfetch")
              (("#!#f")
-              (string-append "#!" (assoc-ref %build-inputs "bash")
-                             "/bin/bash")))))))
+              (string-append "#!"
+                             (search-input-file %build-inputs
+                                                "/bin/bash"))))))))
     (inputs
-     `(("bash" ,bash)
-       ("bc" ,bc)
-       ("scrot" ,scrot)
-       ("xdpyinfo" ,xdpyinfo)
-       ("xprop" ,xprop)))
+     (list bash bc scrot xdpyinfo xprop))
     (home-page "https://github.com/KittyKatt/screenFetch")
     (synopsis "System information script")
     (description "Bash screenshot information tool which can be used to
@@ -3679,7 +3766,7 @@ everyone's screenshots nowadays.")
                   (output (assoc-ref %outputs "out"))
                   (bindir (string-append output "/bin"))
                   (docdir (string-append output "/share/doc/ufetch-" ,version))
-                  (tput (string-append (assoc-ref %build-inputs "tput") "/bin/tput")))
+                  (tput   (search-input-file %build-inputs "/bin/tput")))
              (install-file (string-append source "/LICENSE") docdir)
              (setenv "PATH" (string-append (assoc-ref %build-inputs "bash") "/bin"))
              (mkdir-p bindir)
@@ -3716,7 +3803,7 @@ everyone's screenshots nowadays.")
                  (base32
                   "1md40av6i3xvvwig5jzhy4kf3s5sgxxk35r0vcyrjd8qyndk927l"))))
       (build-system trivial-build-system)
-      (inputs `(("bash" ,bash)))
+      (inputs (list bash))
       (arguments
        `(#:modules ((guix build utils))
          #:builder
@@ -3742,20 +3829,19 @@ information tool.")
 (define-public nnn
   (package
     (name "nnn")
-    (version "4.1.1")
+    (version "4.4")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://github.com/jarun/nnn/releases/download/v"
                            version "/nnn-v" version ".tar.gz"))
        (sha256
-        (base32 "1fnf35s3b2nfp18s712n5vhg6idx4rfgwdfv74nc2933v9l2dq7h"))))
+        (base32 "0lqn7pyy8c1vy29vn8ad4x23cw67cy1d21ghns6f3w9a1h7kyjp0"))))
     (build-system gnu-build-system)
     (inputs
-     `(("ncurses" ,ncurses)
-       ("readline" ,readline)))
+     (list ncurses readline))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
      `(#:tests? #f                      ; no tests
        #:phases
@@ -3779,7 +3865,7 @@ hard-coded.")
 (define-public thermald
   (package
     (name "thermald")
-    (version "2.4.6")
+    (version "2.4.7")
     (source
      (origin
       (method git-fetch)
@@ -3788,7 +3874,7 @@ hard-coded.")
              (commit (string-append "v" version))))
       (file-name (git-file-name name version))
       (sha256
-       (base32 "1lgaky8cmxbi17zpymy2v9wgknx1g92bq50j6kfpsm8qgb7djjb6"))))
+       (base32 "1n0ih86bkm09bzhjl7hllxkl4gzcxvzsznbwi8dx87ragsjlix6n"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
@@ -3804,18 +3890,14 @@ hard-coded.")
            (lambda _
              (setenv "NO_CONFIGURE" "yet"))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("autoconf-archive" ,autoconf-archive)
-       ("automake" ,automake)
-       ("glib" ,glib "bin")             ; for glib-genmarshal, etc.
-       ("gtk-doc" ,gtk-doc)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf
+           autoconf-archive
+           automake
+           `(,glib "bin") ; for glib-genmarshal, etc.
+           gtk-doc
+           pkg-config))
     (inputs
-     `(("dbus-glib" ,dbus-glib)
-       ("libevdev" ,libevdev)
-       ("libxml2" ,libxml2)
-       ("upower" ,upower)
-       ("xz" ,xz)))
+     (list dbus-glib libevdev libxml2 upower xz))
     (home-page "https://01.org/linux-thermal-daemon/")
     (synopsis "CPU scaling for thermal management")
     (description "The Linux Thermal Daemon helps monitor and control temperature
@@ -3839,7 +3921,7 @@ on systems running the Linux kernel.")
         (base32 "0q0c7bsf0pbl8napry1qyg0gl4pd8wn872h4mz9b56dx4rx90vqg"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libpcap" ,libpcap)))
+     (list libpcap))
     (arguments
      `(#:test-target "regress"
        #:make-flags
@@ -3883,7 +3965,7 @@ application, collecting the information received.")
        ("python-nose" ,python-nose)))
     (arguments
      `(#:test-target "test"))
-    (synopsis "A single tool that combines @command{cat} & @command{rm}")
+    (synopsis "Single tool that combines @command{cat} & @command{rm}")
     (description
      "hungrycat prints the contents of a file to standard output, while
 simultaneously freeing the disk space it occupied.  It is useful if you need
@@ -3919,12 +4001,12 @@ late.")
                   #t))))
     (build-system gnu-build-system)
     (inputs
-     `(("mpi" ,openmpi)
-       ("munge" ,munge)
-       ("boost" ,boost)
-       ("libelf" ,libelf)
-       ("libgcrypt" ,libgcrypt)
-       ("libgpg-error" ,libgpg-error)))
+     (list openmpi
+           munge
+           boost
+           libelf
+           libgcrypt
+           libgpg-error))
     (synopsis "Infrastructue for large scale tool daemon launching")
     (description
      "LaunchMON is a software infrastructure that enables HPC run-time
@@ -3971,7 +4053,7 @@ Python loading in HPC environments.")
   (let ((real-name "inxi"))
     (package
       (name "inxi-minimal")
-      (version "3.3.06-1")
+      (version "3.3.11-1")
       (source
        (origin
          (method git-fetch)
@@ -3980,14 +4062,14 @@ Python loading in HPC environments.")
                (commit version)))
          (file-name (git-file-name real-name version))
          (sha256
-          (base32 "1qk40iyrdp52vmbiqwxicvlcycm2v2bf1gg4lzq0b4619sd6d1m7"))))
+          (base32 "1nk3q2xg0myykq1myasxhvhhr0vk8qv3m7pb3icw81r3ydasnls0"))))
       (build-system trivial-build-system)
       (inputs
        `(("bash" ,bash-minimal)
          ("perl" ,perl)
          ("procps" ,procps)))
       (native-inputs
-       `(("gzip" ,gzip)))
+       (list gzip))
       (arguments
        `(#:modules ((guix build utils))
          #:builder
@@ -4032,8 +4114,7 @@ Python loading in HPC environments.")
                           %build-inputs)))))
              (invoke "gzip" "inxi.1")
              (install-file "inxi.1.gz"
-                           (string-append %output "/share/man/man1")))
-           #t)))
+                           (string-append %output "/share/man/man1"))))))
       (home-page "https://smxi.org/docs/inxi.htm")
       (synopsis "Full-featured system information script")
       (description "Inxi is a system information script that can display
@@ -4094,11 +4175,9 @@ support forum.  It runs with the @code{/exec} command in most IRC clients.")
         (base32 "1sm99423hh90kr4wdjqi9sdrrpk65j2vz2hzj65zcxfxyr6khjci"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("cairo" ,cairo)
-       ("libpng" ,libpng)
-       ("libx11" ,libx11)))
+     (list cairo libpng libx11))
     (home-page "https://gitlab.com/mildlyparallel/pscircle")
     (synopsis "Visualize Linux processes in a form of radial tree")
     (description
@@ -4132,15 +4211,12 @@ support forum.  It runs with the @code{/exec} command in most IRC clients.")
                 (("= find_library") "= "))
                #t))))))
     (inputs
-     `(("eudev" ,eudev)))
+     (list eudev))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (native-inputs
-     `(("python-docutils" ,python-docutils)
-       ("python-hypothesis" ,python-hypothesis)
-       ("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("python-sphinx" ,python-sphinx)))
+     (list python-docutils python-hypothesis python-mock python-pytest
+           python-sphinx))
     (home-page "https://pyudev.readthedocs.io/")
     (synopsis "Python udev binding")
     (description "This package provides @code{udev} bindings for Python.")
@@ -4161,7 +4237,7 @@ support forum.  It runs with the @code{/exec} command in most IRC clients.")
         (base32 "08da6apzfkfjwasn4dxrlfxqfx7arl28apdzac5nvm0fhvws0dxk"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (arguments
      `(#:tests? #f                      ; no tests
        #:make-flags
@@ -4181,7 +4257,7 @@ cache of unix and unix-like systems.")
 (define-public solaar
   (package
     (name "solaar")
-    (version "1.0.6")
+    (version "1.0.7")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -4190,25 +4266,23 @@ cache of unix and unix-like systems.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "04zclzfc31l2fj5shcsngnmcvcmmhnc567l3wb9yfhs8k39k9kb2"))))
+                "0k7mjdfvf28fay50b2hs2z4qk6s23h71wvl8777idlrz5i5f43j5"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (add-before 'build 'setenv-PATH
            (lambda _
-             (setenv "PYTHONPATH" (string-append "lib:" (getenv "PYTHONPATH")))
-             #t)))))
+             (setenv "PYTHONPATH" "lib"))))))
     (propagated-inputs
-     `(("python-pygobject" ,python-pygobject)
-       ("python-pyudev" ,python-pyudev)
-
-       ;; For GUI.
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-psutil" ,python-psutil)
-       ("python-xlib" ,python-xlib)
-       ("gtk+" ,gtk+)
-       ("python-pygobject" ,python-pygobject)))
+     (list python-pygobject
+           python-pyudev
+           ;; For GUI.
+           python-pyyaml
+           python-psutil
+           python-xlib
+           gtk+
+           python-pygobject))
     (home-page "https://pwr-solaar.github.io/Solaar/")
     (synopsis "Linux devices manager for the Logitech Unifying Receiver")
     (description "This package provides tools to manage clients of the
@@ -4219,7 +4293,7 @@ Logitech Unifying Receiver.")
   (package
     (name "lynis")
     ;; Also update the ‘lynis-sdk’ input to the commit matching this release.
-    (version "3.0.5")
+    (version "3.0.6")
     (source
      (origin
        (method git-fetch)
@@ -4228,15 +4302,14 @@ Logitech Unifying Receiver.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "11kl54hbvjl7q2i1jz8a726vlkdmknvbp4zac3j4fgljg27qp410"))
+        (base32 "1a1n8alcq6zil1rwk9940cg3x2nz3igcxfad99505pdh7ccz9324"))
        (modules '((guix build utils)))
        (snippet
         '(begin
            ;; Remove proprietary plugins. As of now, all plugins supplied with
            ;; lynis are proprietary. In the future, if free plugins are
            ;; provided, whitelist them from deletion.
-           (for-each delete-file (find-files "plugins"))
-           #t))))
+           (for-each delete-file (find-files "plugins"))))))
     (build-system gnu-build-system)
     (native-inputs
      `(;; For tests
@@ -4245,10 +4318,10 @@ Logitech Unifying Receiver.")
            (method git-fetch)
            (uri (git-reference
                  (url "https://github.com/CISOfy/lynis-sdk")
-                 (commit "99f79c4deb4cb2221d7fccfe82baf58c0a55b9e7")))
+                 (commit "1c4e5f60a03e29a1525ca9ec17c793461058253d")))
            (file-name (git-file-name "lynis-sdk" version))
            (sha256
-            (base32 "1nc2rhzj6l08d2mnjrzkm4mxla1mjkddcxl8n05c1kdz9ycn6cpl"))))))
+            (base32 "060k8k1q4c7nvrv3cwscxq8md2v75q3nrwwim1hgfw20divw3npy"))))))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -4259,8 +4332,7 @@ Logitech Unifying Receiver.")
                 (string-append (assoc-ref outputs "out") "/share/lynis")))
              (substitute* "include/functions"
                (("/usr/local/etc/lynis")
-                (string-append (assoc-ref outputs "out") "/etc/lynis")))
-             #t))
+                (string-append (assoc-ref outputs "out") "/etc/lynis")))))
          (delete 'build)
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
@@ -4271,8 +4343,7 @@ Logitech Unifying Receiver.")
                 (lambda (dir)
                   (copy-recursively dir (string-append out "/share/lynis/" dir)))
                 (list "db" "include" "plugins"))
-               (install-file "lynis.8" (string-append out "/share/man/man8"))
-               #t)))
+               (install-file "lynis.8" (string-append out "/share/man/man8")))))
          (replace 'check
            (lambda* (#:key inputs #:allow-other-keys)
              (copy-recursively (assoc-ref inputs "lynis-sdk") "../lynis-sdk")
@@ -4309,7 +4380,7 @@ possible configuration issues.")
          "1x2fyd7wdqlj1r76ilal06cl2wmbz0ws6i3ys204sbjh1cj6dcl7"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libpcap" ,libpcap)))
+     (list libpcap))
     (arguments
      `(#:tests? #f ;; No tests.
        #:configure-flags (list (string-append "--with-pcap-includes="
@@ -4339,8 +4410,7 @@ tcpdump and snoop.")
         (base32 "0832nh2qf9pisgwnbgx6hkylx5d7i416l19y3ly4ifv7k1p7mxqa"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list perl pkg-config))
     (inputs
      `(("cryptsetup" ,cryptsetup)
        ("libhx" ,libhx)
@@ -4403,9 +4473,7 @@ supplied by the user when logging in.")
         (base32 "0rwvyyrdnw43pixp8h51rncq2inc9pbbj1j2191y5si00pjw34zr"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pygments" ,python-pygments)
-       ("python-ruamel.yaml" ,python-ruamel.yaml)
-       ("python-xmltodict" ,python-xmltodict)))
+     (list python-pygments python-ruamel.yaml python-xmltodict))
     (home-page "https://github.com/kellyjonbrazil/jc")
     (synopsis "Convert the output of command-line tools to JSON")
     (description "@code{jc} JSONifies the output of many CLI tools and
@@ -4427,7 +4495,7 @@ file-types for easier parsing in scripts.")
                 "19i21fqz2m40cds9pb17brjxkczqagmx2f7mfb0xdvbygaply5wz"))))
     (build-system python-build-system)
     (inputs
-     `(("python-tabulate" ,python-tabulate)))
+     (list python-tabulate))
     (home-page "https://github.com/kellyjonbrazil/jtbl")
     (synopsis "Command-line tool to print JSON data as a table in the terminal")
     (description "@code{jtbl} accepts piped JSON data from stdin and outputs a
@@ -4481,7 +4549,7 @@ text table representation to stdout.")
                            "\nPATH=" (getenv "PATH"))))
          ;; check phase
          (setenv "TERM" "linux") ;set to tty for test
-         (invoke (string-append (assoc-ref %build-inputs "bats") "/bin/bats")
+         (invoke (search-input-file %build-inputs "/bin/bats")
                  "test")
          ;; install phase
          (install-file "hosts" (string-append %output "/bin"))
@@ -4512,7 +4580,7 @@ entries, providing commands to add, remove, comment, and search.")
 (define-public nmrpflash
   (package
     (name "nmrpflash")
-    (version "0.9.15")
+    (version "0.9.16")
     (source
      (origin
        (method git-fetch)
@@ -4521,14 +4589,13 @@ entries, providing commands to add, remove, comment, and search.")
          (url "https://github.com/jclehner/nmrpflash")
          (commit (string-append "v" version))))
        (sha256
-        (base32 "0ssfls1sfh8w748qsnkfgndlpw395100x2yynzbk5jd56scxvp20"))
+        (base32 "0gp66l3a2wznjnlc2ljs8g38mfrf1b9a0qcfxqg2bczmfxnrsynj"))
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libnl" ,libnl)
-       ("libpcap" ,libpcap)))
+     (list libnl libpcap))
     (arguments
      `(#:tests? #f ; None exist
        #:make-flags
@@ -4539,8 +4606,7 @@ entries, providing commands to add, remove, comment, and search.")
          (delete 'configure)
          (add-before 'install 'prepare-install
            (lambda* (#:key outputs #:allow-other-keys)
-             (mkdir-p (string-append (assoc-ref outputs "out") "/bin"))
-             #t)))))
+             (mkdir-p (string-append (assoc-ref outputs "out") "/bin")))))))
     (home-page "https://github.com/jclehner/nmrpflash")
     (synopsis "Netgear unbrick utility")
     (description "This package provides a utility to flash a new firmware
@@ -4687,7 +4753,7 @@ disk utilization, priority, username, state, and exit code.")
                (install-file "novena-eeprom" out-bin)
                (install-file "novena-eeprom.8" out-share-man)))))))
     (inputs
-     `(("i2c-tools" ,i2c-tools)))
+     (list i2c-tools))
     (synopsis "Novena EEPROM editor")
     (description "This package provides an editor for the Novena EEPROM.
 Novena boards contain a device-dependent descriptive EEPROM that defines
@@ -4739,7 +4805,7 @@ the XMODEM/YMODEM/ZMODEM file transfer protocols.")
         (base32 "0sdamjzvmf6cxhjmd1rjvn7zm6k10fp5n6vabyxd3yl30cgrxw2i"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (arguments
      `(#:make-flags (list (string-append "CC=" ,(cc-for-target))
                           (string-append "PREFIX=" (assoc-ref %outputs "out")))
@@ -4770,7 +4836,7 @@ setup, maintenance, supervision, or any long-running processes.")
                   "058x04yp6bc77hbl3qchqm7pa8f9vqfl9jryr88m8pzl7kvpif54"))))
       (build-system trivial-build-system)
       (inputs
-       `(("lua" ,lua)))
+       (list lua))
       (arguments
        `(#:modules ((guix build utils))
          #:builder
@@ -4798,3 +4864,66 @@ setup, maintenance, supervision, or any long-running processes.")
       (description "Utility to convert @code{lsof} output to a graph showing
 FIFO and UNIX interprocess communication.")
       (license license:bsd-2))))
+
+(define-public runitor
+  (package
+    (name "runitor")
+    (version "0.8.0")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/bdd/runitor")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+          (base32 "0vjfbyrbp5ywgzdz9j3x0qgjvnq7nw7193x8v9yy6k2cih1zsacn"))))
+    (build-system go-build-system)
+    (arguments
+     `(#:unpack-path "bdd.fi/x/runitor"
+       #:build-flags '(,(string-append "-ldflags=-X main.Version=" version))
+       #:import-path "bdd.fi/x/runitor/cmd/runitor"
+       #:install-source? #f))
+    (home-page "https://github.com/bdd/runitor")
+    (synopsis "Command runner with healthchecks.io integration")
+    (description
+      "Runitor runs the supplied command, captures its output, and based on its
+exit code reports successful or failed execution to
+@url{https://healthchecks.io,https://healthchecks.io} or your private instance.")
+    (license license:bsd-0)))
+
+(define-public udpcast
+  (package
+    (name "udpcast")
+    (version "20200328")
+    (source
+     (origin
+       (method url-fetch)
+       ;; XXX: Original server is at https://www.udpcast.linux.lu is not
+       ;; reliable.
+       (uri (list (string-append
+                   "http://sources.buildroot.net/udpcast/udpcast-"
+                   version ".tar.gz")
+                  (string-append
+                   "https://fossies.org/linux/privat/udpcast-"
+                   version ".tar.gz")
+                  (string-append
+                   "https://www.udpcast.linux.lu/download/udpcast-"
+                   version ".tar.gz")))
+       (sha256
+        (base32 "06pj86nbi9hx7abbb0z2c5ynhfq0rv89b7nmy0kq3xz2lsxfw6cw"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     (list autoconf automake m4 perl))
+    (arguments `(#:tests? #f))                    ;no test suite
+    (synopsis "Multicast file transfer tool")
+    (description
+     "UDPcast is a file transfer tool that can send data simultaneously to
+many destinations on a LAN.  This can for instance be used to install entire
+classrooms of PC's at once.  The advantage of UDPcast over using other
+methods (nfs, ftp, whatever) is that UDPcast uses UDP's multicast abilities:
+it won't take longer to install 15 machines than it would to install just 2.")
+    (home-page "https://www.udpcast.linux.lu")
+    (license license:gpl2+)))
+
+
diff --git a/gnu/packages/adns.scm b/gnu/packages/adns.scm
index b36ec18462..5703016549 100644
--- a/gnu/packages/adns.scm
+++ b/gnu/packages/adns.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015, 2016, 2018, 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
-;;; Copyright © 2019 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2019, 2021 Marius Bakke <marius@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -52,7 +52,7 @@
        ;; XXX: Tests expect real name resolution to work.
        #:tests? #f))
     (native-inputs
-     `(("m4" ,m4)))
+     (list m4))
     (home-page "https://www.gnu.org/software/adns/")
     (synopsis "Asynchronous DNS client library and utilities")
     (description
@@ -65,7 +65,7 @@ scripts.")
 (define-public c-ares
   (package
     (name "c-ares")
-    (version "1.16.0")
+    (version "1.17.2")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -73,11 +73,19 @@ scripts.")
                     ".tar.gz"))
               (sha256
                (base32
-                "129sm0wzij0mp8vdv68v18hnykcjb6ivi66wnqnnw598q7bql1fy"))))
-    (replacement c-ares/fixed)
+                "0gcincjvpll2qmlc906jx6mfq97s87mgi0zby0753ki0rr2ch0s8"))))
     (build-system gnu-build-system)
+    (arguments
+     '(;; FIXME: Some tests require network access
+       #:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'filter-live-tests
+           (lambda _
+             ;; Filter tests that require internet access.
+             (setenv "GTEST_FILTER" "-*.Live*:*.FamilyV4*"))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://c-ares.haxx.se/")
     (synopsis "C library for asynchronous DNS requests")
     (description
@@ -88,23 +96,6 @@ The primary examples of such applications are servers which communicate with
 multiple clients and programs with graphical user interfaces.")
     (license (x11-style "https://c-ares.haxx.se/license.html"))))
 
-(define-public c-ares/fixed
-  (package
-    (inherit c-ares)
-    (name "c-ares")
-    (version "1.17.1")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "https://c-ares.haxx.se/download/" name "-" version
-                    ".tar.gz"))
-              (sha256
-               (base32
-                "0h7wjfnk2092glqcp9mqaax7xx0s13m501z1gi0gsjl2vvvd0gfp"))))
-    (arguments
-     `(;; FIXME: Some tests require network access
-       #:tests? #f))))
-
 ;; gRPC requires a c-ares built with CMake in order to get the .cmake modules.
 ;; We can not build c-ares itself with CMake because that would introduce a
 ;; circular dependency through nghttp2.
@@ -118,3 +109,25 @@ multiple clients and programs with graphical user interfaces.")
      (arguments
       `(;; XXX: Tests require name resolution (the normal variant runs no tests).
         #:tests? #f)))))
+
+(define-public c-ares-for-node
+  (hidden-package
+   (package
+     (inherit c-ares)
+     (name "c-ares")
+     (version "1.18.1")
+     (source (origin
+               (method url-fetch)
+               (uri (string-append
+                     "https://c-ares.haxx.se/download/" name "-" version
+                     ".tar.gz"))
+               (sha256
+                (base32
+                 "1kxviskwsaa7dcgscvssxa8ps88pdq7kq4z93gxvz7sam2l54z8s"))))
+     (arguments
+      '(#:phases
+        (modify-phases %standard-phases
+          (add-before 'check 'filter-live-tests
+            (lambda _
+              ;; Filter tests that require internet access.
+              (setenv "GTEST_FILTER" "-*.Live*:*.FamilyV4*")))))))))
diff --git a/gnu/packages/agda.scm b/gnu/packages/agda.scm
index 7b0cdd0d89..4dd6366247 100644
--- a/gnu/packages/agda.scm
+++ b/gnu/packages/agda.scm
@@ -37,7 +37,7 @@
 (define-public agda
   (package
     (name "agda")
-    (version "2.6.0.1")
+    (version "2.6.2.1")
     (source
      (origin
        (method url-fetch)
@@ -45,33 +45,31 @@
              "https://hackage.haskell.org/package/Agda/Agda-"
              version ".tar.gz"))
        (sha256
-        (base32
-         "1s600ry1qwizr3ynyj05rvlx7jdcw9a1viyc0ycjamm5sjf8mf3v"))))
+        (base32 "03dw7jfqr3ffik6avigm525djqh2gn5c3qwnb2h6298zkr9lch9w"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-alex" ,ghc-alex)
-       ("ghc-async" ,ghc-async)
-       ("ghc-blaze-html" ,ghc-blaze-html)
-       ("ghc-boxes" ,ghc-boxes)
-       ("ghc-data-hash" ,ghc-data-hash)
-       ("ghc-edisoncore" ,ghc-edisoncore)
-       ("ghc-edit-distance" ,ghc-edit-distance)
-       ("ghc-equivalence" ,ghc-equivalence)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-filemanip" ,ghc-filemanip)
-       ("ghc-geniplate-mirror" ,ghc-geniplate-mirror)
-       ("ghc-gitrev" ,ghc-gitrev)
-       ("ghc-happy" ,ghc-happy)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-hashtables" ,ghc-hashtables)
-       ("ghc-ieee754" ,ghc-ieee754)
-       ("ghc-murmur-hash" ,ghc-murmur-hash)
-       ("ghc-uri-encode" ,ghc-uri-encode)
-       ("ghc-regex-tdfa" ,ghc-regex-tdfa)
-       ("ghc-strict" ,ghc-strict)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-zlib" ,ghc-zlib)))
+     (list ghc-aeson
+           ghc-alex
+           ghc-async
+           ghc-blaze-html
+           ghc-boxes
+           ghc-case-insensitive
+           ghc-data-hash
+           ghc-edit-distance
+           ghc-equivalence
+           ghc-gitrev
+           ghc-happy
+           ghc-hashable
+           ghc-hashtables
+           ghc-monad-control
+           ghc-murmur-hash
+           ghc-parallel
+           ghc-regex-tdfa
+           ghc-split
+           ghc-strict
+           ghc-unordered-containers
+           ghc-uri-encode
+           ghc-zlib))
     (arguments
      `(#:modules ((guix build haskell-build-system)
                   (guix build utils)
@@ -82,50 +80,13 @@
          ;; This allows us to call the 'agda' binary before installing.
          (add-after 'unpack 'set-ld-library-path
            (lambda _
-             (setenv "LD_LIBRARY_PATH" (string-append (getcwd) "/dist/build"))
-             #t))
-         ;; FIXME: This is a copy of the standard configure phase with a tiny
-         ;; difference: this package needs the -package-db flag to be passed
-         ;; to "runhaskell" in addition to the "configure" action, because
-         ;; Setup.hs depends on filemanip.  Without this option the Setup.hs
-         ;; file cannot be evaluated.  The haskell-build-system should be
-         ;; changed to pass "-package-db" to "runhaskell" in any case.
-         (replace 'configure
-           (lambda* (#:key outputs inputs tests? (configure-flags '())
-                     #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (name-version (strip-store-file-name out))
-                    (ghc-path (getenv "GHC_PACKAGE_PATH"))
-                    (params
-                     `(,(string-append "--prefix=" out)
-                       ,(string-append "--libdir=" out "/lib")
-                       ,(string-append "--docdir=" out
-                                       "/share/doc/" name-version)
-                       "--libsubdir=$compiler/$pkg-$version"
-                       "--package-db=../package.conf.d"
-                       "--global"
-                       ,@(if tests?
-                             '("--enable-tests")
-                             '())
-                       ;; Build and link with shared libraries
-                       "--enable-shared"
-                       "--enable-executable-dynamic"
-                       "--ghc-option=-fPIC"
-                       ,(string-append "--ghc-option=-optl=-Wl,-rpath=" out
-                                       "/lib/$compiler/$pkg-$version")
-                       ,@configure-flags)))
-               (unsetenv "GHC_PACKAGE_PATH")
-               (apply invoke "runhaskell" "-package-db=../package.conf.d"
-                      "Setup.hs" "configure" params)
-               (setenv "GHC_PACKAGE_PATH" ghc-path)
-               #t)))
+             (setenv "LD_LIBRARY_PATH" (string-append (getcwd) "/dist/build"))))
          (add-after 'compile 'agda-compile
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
                     (agda-compiler (string-append out "/bin/agda")))
                (for-each (cut invoke agda-compiler <>)
-                         (find-files (string-append out "/share") "\\.agda$"))
-               #t))))))
+                         (find-files (string-append out "/share") "\\.agda$"))))))))
     (home-page "https://wiki.portal.chalmers.se/agda/")
     (synopsis
      "Dependently typed functional programming language and proof assistant")
@@ -175,7 +136,7 @@ Agda.  It also aids the input of Unicode characters.")))
                 "0dlis6v6nzbscf713cmwlx8h9n2gxghci8y21qak3hp18gkxdp0g"))))
     (build-system gnu-build-system)
     (inputs
-     `(("agda" ,agda)))
+     (list agda))
     (arguments
      `(#:parallel-build? #f
        #:phases
diff --git a/gnu/packages/aidc.scm b/gnu/packages/aidc.scm
index 3db631d92e..5482261a59 100644
--- a/gnu/packages/aidc.scm
+++ b/gnu/packages/aidc.scm
@@ -30,60 +30,65 @@
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages check)
   #:use-module (gnu packages imagemagick)
+  #:use-module (gnu packages gettext)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages image)
+  #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-xyz)
+  #:use-module (gnu packages pretty-print)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages video)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu))
 
 (define-public zxing-cpp
-  (package
+  ;; Use the master branch as it includes unreleased build system improvements
+  ;; allowing to use system libraries (instead of attempting to fetch them
+  ;; from the Internet).
+  (let ((revision "0")
+        (commit "00783db7aa3bcf8620a301854ac71c0ceaaca0c1"))
+    (package
+      (name "zxing-cpp")
+      (version (git-version "1.2.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/nu-book/zxing-cpp")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1yl2cpaqiv1g4nq9v0xfj1vd5faz55k4541vz6hsffvcxgn9nmc5"))))
+      (build-system cmake-build-system)
+      (native-inputs
+       (list fmt googletest))
+      (synopsis "C++ port of ZXing")
+      (description "ZXing-CPP is a barcode scanning library.")
+      (home-page "https://github.com/nu-book/zxing-cpp")
+      (license license:asl2.0))))
+
+;;; This older variant is kept for gst-plugins-bad (see:
+;;; https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/1684).
+(define-public zxing-cpp-1.2
+  (package/inherit zxing-cpp
     (name "zxing-cpp")
-    (version "1.0.8")
-    (source
-     (origin
-       (method git-fetch)
-       (uri
-        (git-reference
-         (url "https://github.com/nu-book/zxing-cpp")
-         (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "011sq8wcjfxbnd8sj6bf2fgkamlp8gj6q835g61c952npvwsnl71"))))
-    (native-inputs
-     `(("googletest-source" ,(package-source googletest))))
-    (build-system cmake-build-system)
-    (arguments
-     `(#:out-of-source? #f
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'unpack-googletest
-           ;; Copy the googletest sources to where the CMake build expects them.
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let ((source (assoc-ref inputs "googletest-source"))
-                   (target "test/unit/googletest-src"))
-               (mkdir-p target)
-               (copy-recursively source target)
-               ;; Disable downloading via ExternalProject.
-               (substitute* "test/unit/CMakeLists.txt.in"
-                (("ExternalProject_Add\\(") "message("))
-               #t)))
-         (replace 'check
-           (lambda _
-             (with-directory-excursion "test/unit"
-               (invoke "cmake" ".")
-               (invoke "make")
-               (invoke "./ZXingUnitTest"))
-             #t)))))
-    (synopsis "C++ port of ZXing")
-    (description "ZXing-CPP is a barcode scanning library.")
-    (home-page "https://github.com/nu-book/zxing-cpp")
-    (license license:asl2.0)))
+    (version "1.2.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/nu-book/zxing-cpp")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1gjj9c7h634rrmmgzbc7cxjqsxdq0paj6113k02ncjm1s9abk7ik"))))
+    ;; Disable tests to avoid bundled dependencies.
+    (arguments '(#:tests? #f
+                 #:configure-flags '("-DBUILD_BLACKBOX_TESTS=OFF")))
+    (native-inputs '())))
 
 (define-public barcode
   (package
@@ -97,6 +102,9 @@
                (base32
                 "1indapql5fjz0bysyc88cmc54y8phqrbi7c76p71fgjp45jcyzp8"))))
     (build-system gnu-build-system)
+    (arguments
+      ;; Fix build with GCC 10.
+     '(#:configure-flags '("CFLAGS=-fcommon")))
     (synopsis "Convert text strings to printed bars in various standards")
     (description "GNU Barcode is a flexible tool to produce printed barcodes
 from text strings.  It supports a variety of encoding standards and sizing
@@ -127,8 +135,8 @@ formats.")
                (with-directory-excursion "tests"
                  (invoke "./test_basic.sh")))
              #t)))))
-    (inputs `(("libpng" ,libpng)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list libpng))
+    (native-inputs (list pkg-config))
     (synopsis "Encode data into a QR Code symbol")
     (description "Libqrencode is a C library for encoding data in a QR Code
 symbol, a kind of 2D symbology that can be scanned by handy terminals such as
@@ -155,10 +163,7 @@ characters, and is highly robust.")
      ;; XXX Test suite is broken: https://github.com/dmtx/libdmtx/issues/22
      `(#:tests? #f))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (home-page "https://github.com/dmtx")
     (synopsis "Library for reading and writing Data Matrix 2D barcodes")
     (description "libdmtx is software for reading and writing Data Matrix 2D
@@ -169,16 +174,18 @@ C/C++ programs to use its capabilities without restrictions or overhead.")
 (define-public zbar
   (package
     (name "zbar")
-    (version "0.23")
+    (version "0.23.90")
     (source
      (origin
-       (method url-fetch)
-       (uri (string-append "https://linuxtv.org/downloads/zbar/zbar-"
-                           version
-                           ".tar.bz2"))
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url "https://github.com/mchehab/zbar")
+         (commit version)))
+       (file-name (git-file-name name version))
        (sha256
         (base32
-         "0bmd93a15qpgbsq9c9j33qms18rdrgz6gbc48zi6z9w5pvrvi7z9"))))
+         "0rf3i7lx0fqzxsngird6l4d4dnl612nr32rm8sib699qqx67px8n"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags (list "--with-gtk=auto"
@@ -187,17 +194,25 @@ C/C++ programs to use its capabilities without restrictions or overhead.")
                                               (assoc-ref %outputs "out")
                                               "/etc"))))
     (native-inputs
-     `(("glib" ,glib "bin")
-       ("pkg-config" ,pkg-config)))
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("gettext" ,gettext-minimal)
+       ("glib" ,glib "bin")
+       ("gobject-introspection" ,gobject-introspection)
+       ("libtool" ,libtool)
+       ("pkg-config" ,pkg-config)
+       ("python-wrapper" ,python-wrapper)))
     (inputs
-     `(("gobject-introspection" ,gobject-introspection)
-       ("gtk+" ,gtk+)
+     `(("dbus" ,dbus)
        ("imagemagick" ,imagemagick)
        ("libjpeg" ,libjpeg-turbo)
+       ("perl" ,perl)
        ("python" ,python)
-       ("qtbase" ,qtbase-5)
        ("qtx11extras" ,qtx11extras)
        ("v4l-utils" ,v4l-utils)))
+    (propagated-inputs
+     ;; These are in 'requires' field of .pc files.
+     (list glib gtk+ qtbase-5))
     (synopsis "Bar code reader")
     (description
      "ZBar can read barcodes from various sources, such as video streams,
diff --git a/gnu/packages/algebra.scm b/gnu/packages/algebra.scm
index 02460fa2b8..ff6e5189fd 100644
--- a/gnu/packages/algebra.scm
+++ b/gnu/packages/algebra.scm
@@ -1,10 +1,10 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2013, 2015, 2017, 2018, 2021 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2016–2022 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2014, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016, 2018, 2019, 2021 Ricardo Wurmus <rekado@elephly.net>
-;;; Copyright © 2017, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2017, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017, 2019, 2021 Eric Bavier <bavier@posteo.net>
@@ -12,7 +12,7 @@
 ;;; Copyright © 2020 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
-;;; Copyright © 2020 Vinicius Monego <monego@posteo.net>
+;;; Copyright © 2020, 2021 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2021 Lars-Dominik Braun <ldb@leibniz-psychology.org>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -42,6 +42,7 @@
   #:use-module (gnu packages ed)
   #:use-module (gnu packages flex)
   #:use-module (gnu packages fltk)
+  #:use-module (gnu packages gcc)
   #:use-module (gnu packages gl)
   #:use-module (gnu packages graphviz)
   #:use-module (gnu packages image)
@@ -89,9 +90,7 @@
               "1545vgizpypqi2rrriad0ybqv0qwbn9zr0ibxpk00gha9ihv7acx"))))
    (build-system gnu-build-system)
    (propagated-inputs
-     `(("gmp" ,gmp)
-       ("mpfr" ,mpfr)
-       ("mpc"  ,mpc))) ; Header files are included by mpfrcx.h.
+     (list gmp mpfr mpc)) ; Header files are included by mpfrcx.h.
    (synopsis "Arithmetic of polynomials over arbitrary precision numbers")
    (description
     "Mpfrcx is a library for the arithmetic of univariate polynomials over
@@ -138,10 +137,9 @@ greatest common divisor operations.")
               "0qq6b1kwb1byj8ws33ya5awq0ilkpm32037pi1l4cf2737fg9m42"))))
    (build-system gnu-build-system)
    (propagated-inputs
-     `(("mpfrcx" ,mpfrcx)
-       ("zlib" ,zlib))) ; Header files included from cm_common.h.
+     (list mpfrcx zlib)) ; Header files included from cm_common.h.
    (inputs
-     `(("pari-gp"  ,pari-gp)))
+     (list pari-gp))
    (synopsis "CM constructions for elliptic curves")
    (description
     "The CM software implements the construction of ring class fields of
@@ -168,13 +166,9 @@ line applications.")
               (patches (search-patches "fplll-std-fenv.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (propagated-inputs ; header files pulled in by fplll/defs.h
-     `(("gmp" ,gmp)
-       ("mpfr" ,mpfr)))
+     (list gmp mpfr))
     (home-page "https://github.com/fplll/fplll")
     (synopsis "Library for LLL-reduction of euclidean lattices")
     (description
@@ -219,16 +213,10 @@ the real span of the lattice.")
          "1a25iibihph626jl4wbs4b77xc4a2c4nfc2ypscf9wpani3dnhjf"))))
     (build-system python-build-system)
     (inputs
-     `(("fplll" ,fplll)
-       ("gmp" ,gmp)
-       ("mpfr" ,mpfr)
-       ("pari-gp" ,pari-gp)))
+     (list fplll gmp mpfr pari-gp))
     (propagated-inputs
-     `(("cysignals" ,python-cysignals)
-       ("cython" ,python-cython)
-       ("flake8" ,python-flake8)
-       ("numpy" ,python-numpy)
-       ("pytest" ,python-pytest)))
+     (list python-cysignals python-cython python-flake8 python-numpy
+           python-pytest))
     (home-page "https://github.com/fplll/fpylll")
     (synopsis "Python interface for fplll")
     (description "fpylll is a Python wrapper for fplll.")
@@ -237,7 +225,7 @@ the real span of the lattice.")
 (define-public pari-gp
   (package
     (name "pari-gp")
-    (version "2.13.2")
+    (version "2.13.3")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -245,15 +233,12 @@ the real span of the lattice.")
                     version ".tar.gz"))
               (sha256
                (base32
-                "095s7vdlsxmxa0n0l1a082m6gjaypqfqkaj99z8j7dx0ji89hy8n"))))
+                "1jm1cz1687cz8pl8lgvmyk3l33cms1xbayv38ca4z1f60qb7zfnc"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("texlive" ,(texlive-union
-                    (list texlive-amsfonts/patched)))))
-    (inputs `(("gmp" ,gmp)
-              ("libx11" ,libx11)
-              ("perl" ,perl)
-              ("readline" ,readline)))
+     `(("texlive" ,(texlive-updmap.cfg
+                    (list texlive-amsfonts)))))
+    (inputs (list gmp libx11 perl readline))
     (arguments
      '(#:make-flags '("all")
        #:test-target "dobench"
@@ -289,8 +274,8 @@ PARI is also available as a C library to allow for faster computations.")
               (base32
                 "039ip7qkwwv46wrcdrz7y12m30kazzkjr44kqbc0h137g4wzd7zf"))))
    (build-system gnu-build-system)
-   (native-inputs `(("perl" ,perl)))
-   (inputs `(("pari-gp" ,pari-gp)))
+   (native-inputs (list perl))
+   (inputs (list pari-gp))
    (arguments
     '(#:configure-flags
       (list (string-append "--with-paricfg="
@@ -324,12 +309,12 @@ GP2C, the GP to C compiler, translates GP scripts to PARI programs.")
               "1ws2yhzxmm2l5xqqqcjcimmg40f9qq5l9i6d4i5434an9v9s8531"))))
    (build-system gnu-build-system)
    (inputs
-     `(("gmp" ,gmp)
-       ("mpfr" ,mpfr)
-       ("mpc" ,mpc)
-       ("mpfrcx" ,mpfrcx)
-       ("fplll" ,fplll)
-       ("pari-gp"  ,pari-gp)))
+     (list gmp
+           mpfr
+           mpc
+           mpfrcx
+           fplll
+           pari-gp))
    (synopsis "Igusa class polynomial computations")
    (description
     "The CMH software computes Igusa (genus 2) class polynomials, which
@@ -343,7 +328,7 @@ precision.")
 (define-public giac
   (package
     (name "giac")
-    (version "1.7.0-33")
+    (version "1.7.0-45")
     (source
      (origin
        (method url-fetch)
@@ -355,7 +340,7 @@ precision.")
                            "~parisse/debian/dists/stable/main/source/"
                            "giac_" version ".tar.gz"))
        (sha256
-        (base32 "0kz2q5vjynplbybn6j3qk11ww1dr72pqsm9gp9w2hb3h9gv4gk9w"))))
+        (base32 "19hxbx27n5zby96d4pzhxxqn7mzk29g8sxn08fi638l17lr9x2q2"))))
     (build-system gnu-build-system)
     (arguments
      `(#:modules ((ice-9 ftw)
@@ -393,33 +378,33 @@ precision.")
                (delete-file (string-append out "/bin/xcasnew"))))))))
     (inputs
      ;; TODO: Add libnauty, unbundle "libmicropython.a".
-     `(("fltk" ,fltk)
-       ("glpk" ,glpk-4)
-       ("gmp" ,gmp)
-       ("gsl" ,gsl)
-       ("lapack" ,lapack)
-       ("libao" ,ao)
-       ("libjpeg" ,libjpeg-turbo)
-       ("libpng" ,libpng)
-       ("libsamplerate" ,libsamplerate)
-       ("libx11" ,libx11)
-       ("libxinerama" ,libxinerama)
-       ("libxft" ,libxft)
-       ("libxt" ,libxt)
-       ("mesa" ,mesa)
-       ("mpfi" ,mpfi)
-       ("mpfr" ,mpfr)
-       ("ntl" ,ntl)
-       ("perl" ,perl)
-       ("pari-gp" ,pari-gp)
-       ("tcsh" ,tcsh)))
+     (list ao
+           fltk
+           glpk-4
+           gmp
+           gsl
+           lapack
+           libjpeg-turbo
+           libpng
+           libsamplerate
+           libx11
+           libxft
+           libxinerama
+           libxt
+           mesa
+           mpfi
+           mpfr
+           ntl
+           pari-gp
+           perl
+           tcsh))
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)
-       ("hevea" ,hevea)
-       ("python" ,python-wrapper)
-       ("readline" ,readline)
-       ("texlive" ,texlive-tiny)))
+     (list bison
+           flex
+           hevea
+           python-wrapper
+           readline
+           texlive-tiny))
     (home-page "https://www-fourier.ujf-grenoble.fr/~parisse/giac.html")
     (synopsis "Computer algebra system")
     (description
@@ -431,19 +416,18 @@ or text interfaces) or as a C++ library.")
 (define-public flint
   (package
    (name "flint")
-   (version "2.6.3")
+   (version "2.8.4")
    (source
     (origin
       (method url-fetch)
       (uri (string-append "http://flintlib.org/flint-" version ".tar.gz"))
       (sha256
-       (base32 "1qrf6hzbbmg7mhkhbb0bab8z2xpdnba5cj4kmmf72lzs0457a6nf"))))
+       (base32 "1gp4wm2s8c27g2hh53d09cys62da1bsxfwbcsj9cd7cfikm95pv1"))))
    (build-system gnu-build-system)
    (inputs
-    `(("ntl" ,ntl)))
+    (list ntl))
    (propagated-inputs
-    `(("gmp" ,gmp)
-      ("mpfr" ,mpfr))) ; header files from both are included by flint/arith.h
+    (list gmp mpfr)) ; header files from both are included by flint/arith.h
    (arguments
     `(#:parallel-tests? #f              ; seems to be necessary on arm
       #:phases
@@ -485,7 +469,7 @@ fast arithmetic.")
 (define-public arb
   (package
     (name "arb")
-    (version "2.18.1")
+    (version "2.21.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -494,13 +478,12 @@ fast arithmetic.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "15fx3dcbzgwddw9p1nysmx0dbh058afv5m8cj5pdjkcmcl7kw7z9"))))
+                "1lmcl122qy6mr1g1y65bm7dk9fj0sym7gzmvar5vdgk7ln03c5iq"))))
     (build-system gnu-build-system)
     (propagated-inputs
-     `(("flint" ,flint)))               ; flint.h is included by arf.h
+     (list flint))               ; flint.h is included by arf.h
     (inputs
-     `(("gmp" ,gmp)
-       ("mpfr" ,mpfr)))
+     (list gmp mpfr))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -542,12 +525,11 @@ real and complex numbers, with automatic, rigorous error control.")
               (patches (search-patches "python-flint-includes.patch"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-cython" ,python-cython)))
+     (list python-cython))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (inputs
-     `(("arb" ,arb)
-       ("flint" ,flint)))
+     (list arb flint))
     (synopsis "Python module wrapping ARB and FLINT")
     (description
      "Python-flint is a Python extension module wrapping FLINT
@@ -576,11 +558,9 @@ these types and other mathematical functions.")
                 #t))))
    (build-system gnu-build-system)
    (native-inputs
-    `(("libtool" ,libtool)
-      ("perl" ,perl))) ; for configuration
+    (list libtool perl)) ; for configuration
    (inputs
-    `(("gmp" ,gmp)
-      ("gf2x" ,gf2x)))
+    (list gmp gf2x))
    (arguments
     `(#:phases
       (modify-phases %standard-phases
@@ -609,7 +589,7 @@ matrices, and polynomials over the integers and over finite fields.")
 (define-public singular
   (package
    (name "singular")
-   (version "4.1.3p2")
+   (version "4.2.1")
    (source
     (origin
       (method url-fetch)
@@ -618,17 +598,16 @@ matrices, and polynomials over the integers and over finite fields.")
                       "Singular/SOURCES/"
                       (string-join
                        (string-split
-                        (string-trim-right version #\p
-                                           0 (1- (string-length version)))
+                        (let ((index (string-index version #\p)))
+                          (if index (string-take version index)
+                                    version))
                         #\.) "-")
                       "/singular-" version ".tar.gz"))
              (sha256 (base32
-                      "1524yrni7gh0hir5ckridq671q5s6avfjdsdyahj51kzdl3wcypf"))))
+                      "13gy1gdng8zijwlr1fn5sixw53z0zf9czzlg0vh1dcc59zw6v998"))))
    (build-system gnu-build-system)
    (native-inputs
-    `(("doxygen" ,doxygen)
-      ("graphviz" ,graphviz)
-      ("perl" ,perl)))
+    (list doxygen graphviz perl))
    (inputs
     `(("cddlib" ,cddlib)
       ("gmp" ,gmp)
@@ -667,7 +646,7 @@ geometry and singularity theory.")
                       "0hxs24c2m3mh0nq1zz63z3sb7dhy1rilg2s1igwwcb26x3pb7xqc"))))
    (build-system gnu-build-system)
    (inputs
-    `(("gmp" ,gmp)))
+    (list gmp))
    (arguments
     `(#:configure-flags '("--enable-shared"
                           ;; Disable specific assembly routines, which depend
@@ -697,17 +676,15 @@ binary.")
              (patches (search-patches "bc-fix-cross-compilation.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("automake" ,automake)
-       ("autoconf" ,autoconf)
-       ("ed" ,ed)
-       ("flex" ,flex)
-       ("texinfo" ,texinfo)))
+     (list automake autoconf ed flex texinfo))
+    (inputs
+     (list readline))
     (arguments
      '(#:configure-flags
        (list "--with-readline")
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'autogen
+         (replace 'bootstrap
            (lambda _
              (invoke "autoreconf" "-vif"))))))
     (home-page "https://www.gnu.org/software/bc/")
@@ -781,7 +758,7 @@ a C program.")
          ;; available on the user's machine when that package is built on a
          ;; different machine.
          "ax_cv_c_flags__mtune_native=no")))
-    (native-inputs `(("perl" ,perl)))
+    (native-inputs (list perl))
     (home-page "http://fftw.org")
     (synopsis "Computing the discrete Fourier transform")
     (description
@@ -852,8 +829,7 @@ cosine/ sine transforms or DCT/DST).")
                             "**/SparseVectorTest.java"
                             "**/DenseVectorTest.java")))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (home-page "http://la4j.org/")
     (synopsis "Java library that provides Linear Algebra primitives and algorithms")
     (description "The la4j library is a Java library that provides Linear
@@ -890,7 +866,7 @@ the la4j library are:
        #:tests? #f ; tests are not included in the release archive
        #:jdk ,icedtea-8))
     (propagated-inputs
-     `(("java-commons-math3" ,java-commons-math3)))
+     (list java-commons-math3))
     (home-page "https://gitlab.com/ICM-VisLab/JLargeArrays")
     (synopsis "Library of one-dimensional arrays that can store up to 263 elements")
     (description "JLargeArrays is a Java library of one-dimensional arrays
@@ -915,8 +891,7 @@ that can store up to 263 elements.")
        #:tests? #f ; tests are not included in the release archive
        #:jdk ,icedtea-8))
     (propagated-inputs
-     `(("java-commons-math3" ,java-commons-math3)
-       ("java-jlargearrays" ,java-jlargearrays)))
+     (list java-commons-math3 java-jlargearrays))
     (home-page "https://github.com/wendykierp/JTransforms")
     (synopsis "Multithreaded FFT library written in pure Java")
     (description "JTransforms is a multithreaded FFT library written in pure
@@ -940,7 +915,7 @@ Sine Transform} (DST) and @dfn{Discrete Hartley Transform} (DHT).")
                 "00bch77a6qgnw6vzsjn2a42n8n683ih3xm0wpr454jxa15hw78vf"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("perl" ,perl)))                   ; for pod2man
+     (list perl))                   ; for pod2man
     (home-page "https://jugit.fz-juelich.de/mlz/lmfit")
     (synopsis "Levenberg-Marquardt minimization and least-squares fitting")
     (description "lmfit is a C library for Levenberg-Marquardt least-squares
@@ -973,10 +948,7 @@ algorithms from the FORTRAN library MINPACK.")
          "-DWITH_SYMENGINE_THREAD_SAFE=on"
          "-DBUILD_SHARED_LIBS=on")))    ;also build libsymengine
     (inputs
-     `(("flint" ,flint)
-       ("gmp" ,gmp)
-       ("mpc" ,mpc)
-       ("mpfr" ,mpfr)))
+     (list flint gmp mpc mpfr))
     (home-page "https://github.com/symengine/symengine")
     (synopsis "Fast symbolic manipulation library")
     (description
@@ -985,6 +957,35 @@ Optional thin wrappers allow usage of the library from other languages.")
     (license (list license:expat        ;SymEngine
                    license:bsd-3))))    ;3rd party code
 
+(define-public ginac
+  (package
+    (name "ginac")
+    (version "1.8.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://www.ginac.de/ginac-"
+                           version ".tar.bz2"))
+       (sha256
+        (base32 "1az1ypfcny4jdz0mic1kywwa9nynr547cl5s7zpn2w0qdfymssgi"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags (list "--disable-static")))
+    (native-inputs
+     `(("bison" ,bison)
+       ("flex" ,flex)
+       ("pkg-config" ,pkg-config)
+       ("python" ,python-wrapper))) ; Python is required
+    (inputs
+     (list cln readline))
+    (home-page "https://www.ginac.de/")
+    (synopsis "Library for symbolic computation")
+    (description "GiNaC is a C++ library for symbolic computation.  Contrary
+to other CAS it does not try to provide extensive algebraic capabilities and a
+simple programming language but instead accepts a given language (C++) and
+extends it by a set of algebraic capabilities.")
+    (license license:gpl2+)))
+
 (define-public eigen
   (package
     (name "eigen")
@@ -1043,6 +1044,44 @@ features, and more.")
     ;; See 'COPYING.README' for details.
     (license license:mpl2.0)))
 
+(define-public eigen-benchmarks
+  (package
+    (inherit eigen)
+    (name "eigen-benchmarks")
+    (arguments
+     '(#:phases (modify-phases %standard-phases
+                  (delete 'configure)
+                  (replace 'build
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      (let* ((out (assoc-ref outputs "out"))
+                             (bin (string-append out "/bin")))
+                        (define (compile file)
+                          (format #t "compiling '~a'...~%" file)
+                          (let ((target
+                                 (string-append bin "/"
+                                                (basename file ".cpp"))))
+                            (invoke "c++" "-o" target file
+                                    "-I" ".." "-O2" "-g"
+                                    "-lopenblas" "-Wl,--as-needed")))
+
+                        (mkdir-p bin)
+                        (with-directory-excursion "bench"
+                          ;; There are more benchmarks, of varying quality.
+                          ;; Here we pick some that appear to be useful.
+                          (for-each compile
+                                    '("benchBlasGemm.cpp"
+                                      "benchCholesky.cpp"
+                                      ;;"benchEigenSolver.cpp"
+                                      "benchFFT.cpp"
+                                      "benchmark-blocking-sizes.cpp"))))))
+                  (delete 'install))))
+    (inputs (list boost openblas))
+
+    ;; Mark as tunable to take advantage of SIMD code in Eigen.
+    (properties '((tunable? . #t)))
+
+    (synopsis "Micro-benchmarks of the Eigen linear algebra library")))
+
 (define-public eigen-for-tensorflow
   (let ((changeset "fd6845384b86")
         (revision "1"))
@@ -1066,8 +1105,9 @@ features, and more.")
                  '(begin
                     (substitute* "unsupported/CMakeLists.txt"
                       (("add_subdirectory\\(test.*")
-                       "# Do not build the tests for unsupported features.\n"))
-                    #t)))))))
+                       "# Do not build the tests for unsupported features.\n"))))))
+      (native-inputs
+       (list gcc-7)))))
 
 (define-public eigen-for-tensorflow-lite
   ;; This commit was taken from
@@ -1111,8 +1151,7 @@ features, and more.")
               (file-name (git-file-name name version))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("googletest" ,googletest)
-       ("xtl" ,xtl)))
+     (list googletest xtl))
     (arguments
      `(#:configure-flags
        '("-DBUILD_TESTS=ON")
@@ -1130,6 +1169,45 @@ xtensor provides:
 @end itemize")
     (license license:bsd-3)))
 
+(define-public xtensor-benchmark
+  (package
+    (inherit xtensor)
+    (name "xtensor-benchmark")
+    (arguments
+     `(#:configure-flags (list "-DBUILD_BENCHMARK=ON"
+                               "-DDOWNLOAD_GBENCHMARK=OFF")
+       #:tests? #f
+       #:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'remove-march=native
+                    (lambda _
+                      (substitute* "benchmark/CMakeLists.txt"
+                        (("-march=native") ""))))
+                  (add-after 'unpack 'link-with-googlebenchmark
+                    (lambda _
+                      (substitute* "benchmark/CMakeLists.txt"
+                        (("find_package\\(benchmark.*" all)
+                         (string-append
+                          all "\n"
+                          "set(GBENCHMARK_LIBRARIES benchmark)\n")))))
+                  (replace 'build
+                    (lambda _
+                      (invoke "make" "benchmark_xtensor" "-j"
+                              (number->string (parallel-job-count)))))
+                  (replace 'install
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      ;; Install nothing but the executable.
+                      (let ((out (assoc-ref outputs "out")))
+                        (install-file "benchmark/benchmark_xtensor"
+                                      (string-append out "/bin"))))))))
+    (synopsis "Benchmarks of the xtensor library")
+    (native-inputs '())
+    (inputs
+     (modify-inputs (package-native-inputs xtensor)
+       (prepend googlebenchmark xsimd)))
+
+    ;; Mark as tunable to take advantage of SIMD code in xsimd/xtensor.
+    (properties '((tunable? . #t)))))
+
 (define-public gap
   (package
     (name "gap")
@@ -1193,9 +1271,7 @@ xtensor provides:
            #t))))
     (build-system gnu-build-system)
     (inputs
-     `(("gmp" ,gmp)
-       ("readline" ,readline)
-       ("zlib" ,zlib)))
+     (list gmp readline zlib))
     (arguments
      `(#:modules ((ice-9 ftw)
                   (srfi srfi-26)
@@ -1282,9 +1358,7 @@ objects.")
               "0q1wdiwqj6fsbifaayb1zkp20bz8a1my81sqjsail577jmzwi07w"))))
    (build-system gnu-build-system)
    (inputs
-    `(("boost" ,boost)
-      ("gmp" ,gmp)
-      ("mpfr" ,mpfr)))
+    (list boost gmp mpfr))
    (arguments
     `(#:phases
       (modify-phases %standard-phases
@@ -1325,11 +1399,9 @@ for the Coq proof assistant.")
                 "11wz57q6ijsvfs5r82masxgr319as92syi78lnl9lgdblpc6xigk"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (propagated-inputs
-     `(("gmp" ,gmp))) ; gmp++.h includes gmpxx.h
+     (list gmp)) ; gmp++.h includes gmpxx.h
     (synopsis "Algebraic computations with exact rings and fields")
     (description
      "Givaro is a C++ library implementing the basic arithmetic of various
@@ -1356,14 +1428,11 @@ compound objects, such as vectors, matrices and univariate polynomials.")
                 "1ynbjd72qrwp0b4kpn0p5d7gddpvj8dlb5fwdxajr5pvkvi3if74"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
-     `(("openblas" ,openblas)))
+     (list openblas))
     (propagated-inputs
-     `(("givaro" ,givaro))) ; required according to the .pc file
+     (list givaro)) ; required according to the .pc file
     (arguments
      `(#:configure-flags
        (list (string-append "--with-blas-libs="
@@ -1399,12 +1468,9 @@ algebra, such as the row echelon form.")
               (patches (search-patches "linbox-fix-pkgconfig.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (propagated-inputs
-     `(("fflas-ffpack" ,fflas-ffpack)))
+     (list fflas-ffpack))
     (synopsis "C++ library for linear algebra over exact rings")
     (description
      "LinBox is a C++ template library for exact linear algebra computation
@@ -1428,12 +1494,9 @@ finite fields.")
                 "0xfg6pffbn8r1s0y7bn9b8i55l00d41dkmhrpf7pwk53qa3achd3"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
-     `(("libpng" ,libpng)))
+     (list libpng))
     (synopsis "Arithmetic of dense matrices over F_2")
     (description "M4RI is a library for fast arithmetic with dense matrices
 over F2.  The name M4RI comes from the first implemented algorithm: The
@@ -1518,11 +1581,9 @@ polynomials, and the representation theory of Hecke algebras of type A_n.")
                 "0r8lv46qx5mkz5kp3ay2jnsp0mbhlqr5z2z220wdk73wdshcznss"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (inputs
-     `(("m4ri" ,m4ri)))
+     (list m4ri))
     (synopsis "Arithmetic of dense matrices over F_{2^e}")
     (description "M4RI is a library for fast arithmetic with dense matrices
 over finite fields of characteristic 2.  So it extends the functionality
@@ -1545,12 +1606,9 @@ of M4RI from F_2 to F_{2^e}.")
                 "1gw27lqc3f525n8qdcmr2nyn16y9g10z9f6dnmckyyxcdzvhq35n"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (inputs
-     `(("ntl" ,ntl)
-       ("pari-gp" ,pari-gp)))
+     (list ntl pari-gp))
     (synopsis "Ranks of elliptic curves and modular symbols")
     (description "The eclib package includes mwrank (for 2-descent on
 elliptic curves over Q) and modular symbol code; it has been written by
@@ -1575,9 +1633,7 @@ John Cremona to compute his elliptic curve database.")
               (patches (search-patches "lrcalc-includes.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1687,12 +1743,12 @@ no more than about 20 bits long).")
               "11290ivi9h665cxi8f1shlavhy10vzb8s28m57hrcgnxyxqmhx0m"))))
    (build-system gnu-build-system)
    (inputs
-    `(("fplll" ,fplll)
-      ("gmp" ,gmp)
-      ("gnuplot" ,gnuplot)
-      ("libxml2" ,libxml2)
-      ("mpfi" ,mpfi)
-      ("mpfr" ,mpfr)))
+    (list fplll
+          gmp
+          gnuplot
+          libxml2
+          mpfi
+          mpfr))
    (arguments
     `(#:configure-flags
       (list (string-append "--docdir=${datadir}/doc/sollya-" ,version))
diff --git a/gnu/packages/android.scm b/gnu/packages/android.scm
index 0a551c7d30..9f00303811 100644
--- a/gnu/packages/android.scm
+++ b/gnu/packages/android.scm
@@ -4,12 +4,14 @@
 ;;; Copyright © 2016, 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2017 Hartmut Goebel <h.goebel@crazy-compilers.com>
-;;; Copyright © 2017, 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
-;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2017, 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2019, 2020 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2019 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2020 Sergey Trofimov <sarg@sarg.org.ru>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2021 Petr Hodina <phodina@protonmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -29,6 +31,7 @@
 (define-module (gnu packages android)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix gexp)
   #:use-module (guix git-download)
   #:use-module (guix build-system android-ndk)
   #:use-module (guix build-system gnu)
@@ -43,6 +46,7 @@
   #:use-module (gnu packages gcc)
   #:use-module (gnu packages gnupg)
   #:use-module (gnu packages golang)
+  #:use-module (gnu packages image)
   #:use-module (gnu packages java)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages pcre)
@@ -52,7 +56,9 @@
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages selinux)
   #:use-module (gnu packages serialization)
+  #:use-module (gnu packages sphinx)
   #:use-module (gnu packages ssh)
+  #:use-module (gnu packages time)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages version-control)
   #:use-module (gnu packages virtualization)
@@ -188,6 +194,28 @@ use their packages mostly unmodified in our Android NDK build system.")
      (base32
       checksum))))
 
+(define (android-platform-development version)
+  (origin
+    (method git-fetch)
+    (uri (git-reference
+          (url "https://android.googlesource.com/platform/development")
+          (commit (string-append "android-" version))))
+    (file-name (string-append "android-platform-development-"
+                              version "-checkout"))
+    (sha256
+     (base32 "0s92961yycg8wsga40i7fvbfmf1a5i6j2gk64j2jiy7s0hfd4rc3"))))
+
+(define (android-platform-frameworks-native version)
+  (origin
+    (method git-fetch)
+    (uri (git-reference
+          (url "https://android.googlesource.com/platform/frameworks/native")
+          (commit (string-append "android-" version))))
+    (file-name (string-append "android-platform-frameworks-native-"
+                              version "-checkout"))
+    (sha256
+     (base32 "00dgx27wma7wzivniy8zyw2443fi2xx8gyxii081m0fwamqd3jrm"))))
+
 (define-public android-liblog
   (package
     (name "android-liblog")
@@ -215,7 +243,7 @@ use their packages mostly unmodified in our Android NDK build system.")
                  "../include/android" (string-append out "/include/android")))
              #t)))))
     (home-page "https://developer.android.com/")
-    (synopsis "Logging library from the Android platform.")
+    (synopsis "Logging library from the Android platform")
     (description "@code{liblog} represents an interface to the volatile Android
 Logging system for NDK (Native) applications and libraries and contain
 interfaces for either writing or reading logs.  The log buffers are divided up
@@ -309,7 +337,7 @@ various Android core host applications.")
          (add-after 'unpack 'enter-source
            (lambda _ (chdir "libsparse") #t)))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "https://developer.android.com/")
     (synopsis "Android platform sparse library")
     (description "@code{android-libsparse} is a library in common use by the
@@ -340,11 +368,9 @@ various Android core host applications.")
                                  (string-append out "/include/ziparchive"))
                #t))))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (native-inputs
-     `(("android-libbase" ,android-libbase)
-       ("android-libutils" ,android-libutils)
-       ("android-liblog" ,android-liblog)))
+     (list android-libbase android-libutils android-liblog))
     (home-page "https://developer.android.com/")
     (synopsis "Android platform ZIP library")
     (description "@code{android-libziparchive} is a library in common use by the
@@ -360,10 +386,12 @@ various Android core host applications.")
     (arguments
      `(#:tests? #f ; Test failure: sysdeps_poll.fd_count
        #:make-flags
-       (list "CFLAGS=-Wno-error"
-             "CXXFLAGS=-fpermissive -Wno-error -std=gnu++14 -D_Nonnull= -D_Nullable= -I ."
-             (string-append "LDFLAGS=-Wl,-rpath=" (assoc-ref %outputs "out") "/lib "
-                            "-Wl,-rpath=" (assoc-ref %build-inputs "openssl") "/lib -L ."))
+       ,#~(list
+           "CFLAGS=-Wno-error"
+           "CXXFLAGS=-fpermissive -Wno-error -std=gnu++14 -D_Nonnull= -D_Nullable= -I ."
+           (string-append
+            "LDFLAGS=-Wl,-rpath=" #$output "/lib "
+            "-Wl,-rpath=" #$(this-package-input "openssl") "/lib -L ."))
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'enter-source
@@ -385,10 +413,7 @@ various Android core host applications.")
              (install-file "diagnose_usb.h" (string-append (assoc-ref outputs "out") "/include"))
              #t)))))
     (inputs
-     `(("android-libbase" ,android-libbase)
-       ("android-libcutils" ,android-libcutils)
-       ("android-liblog" ,android-liblog)
-       ("openssl" ,openssl)))
+     (list android-libbase android-libcutils android-liblog openssl))
     (home-page "https://developer.android.com/studio/command-line/adb.html")
     (synopsis "Android Debug Bridge")
     (description
@@ -507,11 +532,11 @@ that is safe to use for user space.  It also includes
               (("#ifdef HOST") "#ifdef XXX"))
              #t)))))
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (native-inputs
-     `(("android-bionic-uapi" ,android-bionic-uapi)
-       ;; pcre is inlined by our package.
-       ("pcre" ,pcre)))
+     (list android-bionic-uapi
+           ;; pcre is inlined by our package.
+           pcre))
     (home-page "https://developer.android.com/")
     (synopsis "Android version of the SELinux libraries and utilities")
     (description
@@ -530,29 +555,25 @@ the core SELinux management utilities.")
     (build-system android-ndk-build-system)
     (arguments
      `(#:make-flags
-       (list (string-append "CPPFLAGS="
-                            ;"-Wno-error "
-                            "-I "
-                            (assoc-ref %build-inputs "android-libselinux")
-                            "/include "
-                            "-I " (assoc-ref %build-inputs "android-libsparse")
-                            "/include "
-                            "-I " (assoc-ref %build-inputs "android-libcutils")
-                            "/include "
-                            "-I " (assoc-ref %build-inputs "android-liblog") "/include "
-                            "-I ../core/include")
-             "CFLAGS=-Wno-error"
-             "install-libext4_utils_host.a"
-             (string-append "prefix=" (assoc-ref %outputs "out")))
+       ,#~(list
+           (string-append
+            "CPPFLAGS="
+            ;"-Wno-error "
+            "-I " #$(this-package-input "android-libselinux") "/include "
+            "-I " #$(this-package-input "android-libsparse")  "/include "
+            "-I " #$(this-package-input "android-libcutils")  "/include "
+            "-I " #$(this-package-input "android-liblog") "/include "
+            "-I ../core/include")
+           "CFLAGS=-Wno-error"
+           "install-libext4_utils_host.a"
+           (string-append "prefix=" #$output))
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'unpack-core
            (lambda* (#:key inputs #:allow-other-keys)
              (mkdir-p "core")
-             (with-directory-excursion "core"
-               (invoke "tar" "axf" (assoc-ref inputs "android-core")
-                             "--strip-components=1"))
-             #t))
+             (copy-recursively (assoc-ref inputs "android-core")
+                               "core")))
          (add-after 'unpack-core 'enter-source
            (lambda _ (chdir "ext4_utils") #t))
          (replace 'install
@@ -561,11 +582,8 @@ the core SELinux management utilities.")
                (copy-recursively "." (string-append out "/include")))
              #t)))))
     (inputs
-     `(("android-libcutils" ,android-libcutils)
-       ("android-liblog" ,android-liblog)
-       ("android-libselinux" ,android-libselinux)
-       ("android-libsparse" ,android-libsparse)
-       ("zlib" ,zlib)))
+     (list android-libcutils android-liblog android-libselinux
+           android-libsparse zlib))
     (native-inputs
      `(("android-core" ,(android-platform-system-core version))))
     (home-page "https://developer.android.com/")
@@ -585,6 +603,9 @@ Android core.")
        (modify-phases %standard-phases
          (add-after 'unpack 'enter-source
            (lambda _ (chdir "f2fs_utils") #t))
+         (add-before 'build 'set-compilation-flags
+           (lambda _
+             (setenv "CFLAGS" "-fcommon")))
          (add-after 'install 'install-headers
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (copy-recursively "." (string-append (assoc-ref outputs "out")
@@ -600,11 +621,8 @@ Android core.")
                (install-file "mkf2fsuserimg.sh" bin)
                #t))))))
     (inputs
-     `(("f2fs-tools" ,f2fs-tools-1.7)
-       ("android-libselinux" ,android-libselinux)
-       ("android-libsparse" ,android-libsparse)
-       ("android-libcutils" ,android-libcutils)
-       ("zlib" ,zlib)))
+     (list f2fs-tools-1.7 android-libselinux android-libsparse
+           android-libcutils zlib))
     (home-page "https://developer.android.com/")
     (synopsis "Android f2fs utils")
     (description "@code{android-f2fs-utils} is a library in common use by the
@@ -641,8 +659,7 @@ file system.")
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (copy-recursively "../include/utils" (string-append (assoc-ref outputs "out") "/include/utils")))))))
     (inputs
-     `(("android-safe-iop" ,android-safe-iop)
-       ("android-libcutils" ,android-libcutils)))
+     (list android-safe-iop android-libcutils))
     (native-inputs
      `(("android-bionic-uapi" ,android-bionic-uapi)
        ("android-liblog" ,android-liblog)
@@ -668,7 +685,8 @@ file system.")
          (add-after 'enter-source 'patch-source
            (lambda _
              (substitute* "Android.mk"
-              (("libext4_utils_host") "libext4_utils_host libselinux libpcre"))
+               (("libext4_utils_host") "libext4_utils_host libselinux libpcre")
+               (("\\$\\(shell git .*\\)") ,version))
              #t))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
@@ -678,22 +696,22 @@ file system.")
                (install-file "fastboot" bin)
                #t))))))
     (inputs
-     `(("adb" ,adb)
-       ("android-safe-iop" ,android-safe-iop)
-       ("android-ext4-utils" ,android-ext4-utils)
-       ("android-f2fs-utils" ,android-f2fs-utils)
-       ("android-libbase" ,android-libbase)
-       ("android-libcutils" ,android-libcutils)
-       ("android-liblog" ,android-liblog)
-       ("android-libutils" ,android-libutils)
-       ("android-libsparse" ,android-libsparse)
-       ("android-libziparchive" ,android-libziparchive)
-       ("android-libselinux" ,android-libselinux)
-       ("pcre" ,pcre)
-       ("mkbootimg" ,mkbootimg)
-       ("zlib" ,zlib)))
+     (list adb
+           android-safe-iop
+           android-ext4-utils
+           android-f2fs-utils
+           android-libbase
+           android-libcutils
+           android-liblog
+           android-libutils
+           android-libsparse
+           android-libziparchive
+           android-libselinux
+           pcre
+           mkbootimg
+           zlib))
     (native-inputs
-     `(("xz" ,xz)))
+     (list xz))
     (home-page "https://developer.android.com/studio/command-line/")
     (synopsis "Android image flasher")
     (description
@@ -703,7 +721,7 @@ file system.")
 (define-public android-udev-rules
   (package
     (name "android-udev-rules")
-    (version "20200613")
+    (version "20210501")
     (source
      (origin
        (method git-fetch)
@@ -712,7 +730,7 @@ file system.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0cf5br8x6iwxc1cifv0i1klw7skgs8hghdx6qlqby68kyqg81bb2"))))
+        (base32 "0pl1wfd7k9vz8mvy2jb2icc5f11c5p07aixpyhjs6gi5cyaywm5f"))))
     (build-system trivial-build-system)
     (native-inputs `(("source" ,source)))
     (arguments
@@ -722,8 +740,7 @@ file system.")
          (use-modules (guix build utils))
          (let ((source (assoc-ref %build-inputs "source")))
            (install-file (string-append source "/51-android.rules")
-                         (string-append %output "/lib/udev/rules.d"))
-           #t))))
+                         (string-append %output "/lib/udev/rules.d"))))))
     (home-page "https://github.com/M0Rf30/android-udev-rules")
     (synopsis "udev rules for Android devices")
     (description "Provides a set of udev rules to allow using Android devices
@@ -737,6 +754,132 @@ it.
 to be passed to the @code{udev} service.")
     (license license:gpl3+)))
 
+(define-public android-platform-frameworks-native-headers
+  (package
+    (name "android-platform-frameworks-native-headers")
+    (version (android-platform-version))
+    (source (android-platform-frameworks-native version))
+    (build-system trivial-build-system)
+    (arguments
+     `(#:modules ((guix build utils))
+       #:builder
+       (begin
+         (use-modules (guix build utils))
+         (let ((source (assoc-ref %build-inputs "source"))
+               (include (string-append %output "/include/android")))
+           (mkdir-p include)
+           (copy-recursively (string-append source "/include/android")
+                             (string-append include)) ; "/android"))
+           ))))
+    (home-page "https://android.googlesource.com/platform/frameworks/native/")
+    (synopsis "Headers for Android development from
+android-platform-frameworks-native")
+    (description "This package contains headers used for developing software
+for Android.  More precicely the headers from include/android in
+platform/frameworks/native.")
+    (license license:asl2.0)))
+
+(define-public libetc1
+  (package
+    (name "libetc1")
+    (version (android-platform-version))
+    (source (android-platform-frameworks-native version))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f ; no tests
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'create-Makefile
+           (lambda _
+             ;; No useful makefile is shipped, so we create one.
+             (with-output-to-file "Makefile"
+               (lambda _
+                 (display
+                  (string-append
+                   "NAME = libETC1\n"
+                   "SOURCES = opengl/libs/ETC1/etc1.cpp\n"
+                   "CXXFLAGS += -fPIC\n"
+                   "CPPFLAGS += -Iopengl/include\n"
+                   "LDFLAGS += -shared -Wl,-soname,$(NAME).so.0\n"
+                   "$(NAME).so.0: $(SOURCES)\n"
+                   "	$(CXX) $^ -o $@ $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS)\n"
+                   "build: $(NAME).so.0"))
+                 #t))))
+         (add-after 'unpack 'remove-unused-stuff-to-reduce-warnings
+           (lambda _
+             (delete-file-recursively "opengl/libs/tools")))
+         (delete 'configure)
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (lib (string-append out "/lib"))
+                    (include (string-append out "/include")))
+               (install-file "libETC1.so.0" lib)
+               (with-directory-excursion lib
+                 (symlink "libETC1.so.0" "libETC1.so"))
+               (copy-recursively "opengl/include/ETC1"
+                                 (string-append include "/ETC1"))))))))
+    (home-page "https://android.googlesource.com/platform/frameworks/native/")
+    (synopsis "ETC1 compression library")
+    (description "Ericsson Texture Compression (ETC) is a lossy texture
+compression technique developed in collaboration with Ericsson Research in
+early 2005.  libETC1 provides the encoding and decoding of ETC1 compression
+algorithm.")
+    (license license:asl2.0)))
+
+(define-public etc1tool
+  (package
+    (name "etc1tool")
+    (version (android-platform-version))
+    (source (android-platform-development version))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'create-Makefile
+           (lambda _
+             ;; No useful makefile is shipped, so we create one.
+             (with-output-to-file "Makefile"
+               (lambda _
+                 (display
+                  (string-append
+                   "NAME = etc1tool\n"
+                   "SOURCES = tools/etc1tool/etc1tool.cpp\n"
+                   "CPPFLAGS += -Iinclude\n"
+                   "LDFLAGS += -lpng -lETC1\n"
+                   "$(NAME): $(SOURCES)\n"
+                   "	$(CXX) $^ -o $@ $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS)\n"
+                   "build: $(NAME)"))
+                 #t))))
+         (add-before 'build 'fix-typos-in-help
+           (lambda _
+             (substitute* "tools/etc1tool/etc1tool.cpp"
+               ((" apropriate ") " appropriate "))
+             #t))
+         ;; TODO: Add man-page from Debian
+         (delete 'configure)
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin")))
+               (install-file "etc1tool" bin)))))))
+    (inputs
+     `(("libetc1" ,libetc1)
+       ("libpng" ,libpng)))
+    (home-page "https://developer.android.com/studio/command-line/etc1tool.html")
+    (synopsis "Encode and decode PNG images to resp. from the ETC1 compression
+standard.")
+    (description
+     "@command{etc1} is a command line utility that lets you encode PNG images
+to the ETC1 compression standard and decode ETC1 compressed images back to
+PNG.  This tool is part of the Android SDK for working with media files for
+game apps.
+
+The standard for the ETC1 texture format can be found at
+@uref{http://www.khronos.org/registry/gles/extensions/OES/OES_compressed_ETC1_RGB8_texture.txt}.")
+    (license license:asl2.0)))
+
 (define-public git-repo
   (package
     (name "git-repo")
@@ -828,7 +971,7 @@ to be passed to the @code{udev} service.")
     (native-inputs
      `(("pytest" ,python-pytest)))
     (home-page "https://code.google.com/p/git-repo/")
-    (synopsis "Helps to manage many Git repositories.")
+    (synopsis "Helps to manage many Git repositories")
     (description "Repo is a tool built on top of Git.  Repo helps manage many
 Git repositories, does the uploads to revision control systems, and automates
 parts of the development workflow.  Repo is not meant to replace Git, only to
@@ -894,21 +1037,18 @@ safest way, on a file image.")
              (invoke "nosetests" "--with-coverage" "--with-timer"
                      "--timer-top-n" "50"))))))
     (native-inputs
-     `(("python-codecov" ,python-codecov)
-       ("python-coverage" ,python-coverage)
-       ("python-mock" ,python-mock)
-       ("python-nose" ,python-nose)
-       ("python-nose-timer" ,python-nose-timer)))
+     (list python-codecov python-coverage python-mock python-nose
+           python-nose-timer))
     (propagated-inputs
-     `(("python-asn1crypto" ,python-asn1crypto)
-       ("python-colorama" ,python-colorama)
-       ("python-future" ,python-future)
-       ("python-ipython" ,python-ipython)
-       ("python-lxml" ,python-lxml)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-networkx" ,python-networkx)
-       ("python-pygments" ,python-pygments)
-       ("python-pyperclip" ,python-pyperclip)))
+     (list python-asn1crypto
+           python-colorama
+           python-future
+           python-ipython
+           python-lxml
+           python-matplotlib
+           python-networkx
+           python-pygments
+           python-pyperclip))
     (home-page "https://github.com/androguard/androguard")
     (synopsis "Python tool to play with Android files")
     (description
@@ -916,17 +1056,84 @@ safest way, on a file image.")
 useful for reverse engineering, analysis of Android applications and more.")
     (license license:asl2.0)))
 
+(define-public python-android-backup
+  (package
+    (name "python-android-backup")
+    (version "0.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "android_backup" version))
+       (sha256
+        (base32
+         "15wb2lyjj2fpf7bhvmgpqn0mglsjj11zfvbjycx7mnidisgnljw6"))))
+    (build-system python-build-system)
+    (propagated-inputs (list python-pycrypto))
+    (home-page "https://github.com/bluec0re/android-backup-tools")
+    (synopsis "Unpack and repack android backups")
+    (description "This package allows you to unpack and repack Android
+backups.  It supports encrypted archives.")
+    (license license:asl2.0)))
+
+(define-public python-miio
+  (package
+    (name "python-miio")
+    (version "0.5.8")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "python-miio" version))
+       (sha256
+        (base32
+         "0a4f5ybjvibawwxcjm3r9nnrzf1yff6wwgy05yzyk0bb3rmc99fp"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "pytest" "miio")))))))
+    (native-inputs
+     (list python-pytest
+           python-pytest-mock
+           python-sphinx
+           python-sphinx-click
+           python-sphinx-rtd-theme
+           python-sphinxcontrib-apidoc))
+    (propagated-inputs
+     (list python-android-backup
+           python-appdirs
+           python-attrs
+           python-click
+           python-construct
+           python-croniter
+           python-cryptography
+           python-defusedxml
+           python-importlib-metadata
+           python-netifaces
+           python-pytz
+           python-pyyaml
+           python-tqdm
+           python-zeroconf))
+    (home-page "https://github.com/rytilahti/python-miio")
+    (synopsis "Control Xiaomi smart appliances")
+    (description "This package provides library and command line interface
+for communicating with Xiaomi smart appliances over miIO and MIoT protocols.")
+    (license license:gpl3+)))
+
 (define-public fdroidserver
   (package
     (name "fdroidserver")
     (version "1.1.9")
     (source
-      (origin
-        (method url-fetch)
-        (uri (pypi-uri "fdroidserver" version))
-        (sha256
-         (base32
-          "0m07f791z45w7r2dzx4yb6s54b3c3wykm3w9hn25p2jcyax082a2"))))
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "fdroidserver" version))
+       (sha256
+        (base32
+         "0m07f791z45w7r2dzx4yb6s54b3c3wykm3w9hn25p2jcyax082a2"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -943,28 +1150,25 @@ useful for reverse engineering, analysis of Android applications and more.")
                (("docker-py >= 1.9, < 2.0") "docker >= 1.9"))
              #t)))))
     (propagated-inputs
-     `(("python-androguard" ,python-androguard)
-       ("python-apache-libcloud" ,python-apache-libcloud)
-       ("python-clint" ,python-clint)
-       ("python-defusedxml" ,python-defusedxml)
-       ("python-docker" ,python-docker)
-       ("python-gitpython" ,python-gitpython)
-       ("python-mwclient" ,python-mwclient)
-       ("python-paramiko" ,python-paramiko)
-       ("python-pillow" ,python-pillow)
-       ("python-pyasn1" ,python-pyasn1)
-       ("python-pyasn1-modules" ,python-pyasn1-modules)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-qrcode" ,python-qrcode)
-       ("python-ruamel.yaml" ,python-ruamel.yaml)
-       ("python-requests" ,python-requests)
-       ("python-vagrant" ,python-vagrant)))
+     (list python-androguard
+           python-apache-libcloud
+           python-clint
+           python-defusedxml
+           python-docker
+           python-gitpython
+           python-mwclient
+           python-paramiko
+           python-pillow
+           python-pyasn1
+           python-pyasn1-modules
+           python-pyyaml
+           python-qrcode
+           python-ruamel.yaml
+           python-requests
+           python-vagrant))
     (native-inputs
-     `(("python-babel" ,python-babel)
-       ("python-bcrypt" ,python-bcrypt)
-       ("python-docker-pycreds" ,python-docker-pycreds)
-       ("python-pynacl" ,python-pynacl)
-       ("python-websocket-client" ,python-websocket-client)))
+     (list python-babel python-bcrypt python-docker-pycreds python-pynacl
+           python-websocket-client))
     (home-page "https://f-droid.org")
     (synopsis "F-Droid server tools")
     (description
@@ -993,7 +1197,7 @@ main repository.")
        #:tests? #f  ; TODO: Inputs missing.
        #:install-source? #f))
     (inputs
-     `(("go-github-com-kr-pretty" ,go-github-com-kr-pretty)))
+     (list go-github-com-kr-pretty))
     ;(native-inputs
     ; `(("go-github-com-rogpeppe-go-internal-testscript"
     ;    ,go-github-com-rogpeppe-go-internal-testscript)))
@@ -1026,13 +1230,6 @@ connected devices via ADB.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'enjarify-wrapper-inherit-pythonpath
-           ;; enjarify sets PYTHONPATH from a shell script, overwriting
-           ;; PYTHONPATH set from guix. Comment out this line.
-           (lambda _
-             (substitute* "enjarify.sh"
-               (("export PYTHONPATH") "# export PYTHONPATH"))
-             #t))
          (add-before 'check 'fixup-expected-test-results
            ;; Upstream adjusted this test in commit:
            ;; 3ae884a6485af82d300515813f537685b08dd800
@@ -1053,7 +1250,7 @@ connected devices via ADB.")
                  (mkdir-p (string-append out "/bin/"))
                  (copy-file "enjarify.sh" (string-append out "/bin/enjarify"))
                  #t))))))
-    (native-inputs `(("openjdk" ,openjdk12)))
+    (native-inputs (list openjdk12))
     (synopsis "Translate Dalvik bytecode to equivalent Java bytecode")
     (description "Android applications are Java programs that run on a
 customized virtual machine, which is part of the Android operating system, the
diff --git a/gnu/packages/animation.scm b/gnu/packages/animation.scm
index 6f116af63c..c281772563 100644
--- a/gnu/packages/animation.scm
+++ b/gnu/packages/animation.scm
@@ -82,8 +82,7 @@
         "-Dlog=true"
         "-Dtest=true")))
     (native-inputs
-     `(("googletest" ,googletest)
-       ("pkg-config" ,pkg-config)))
+     (list googletest pkg-config))
     (synopsis "Lottie Animation Library")
     (description "Rlottie is a platform independent standalone c++ library for
 rendering vector based animations and art in realtime.")
@@ -179,11 +178,10 @@ C++ @dfn{Standard Template Library} (STL).")
        ("libxml++" ,libxml++)
        ("libsigc++" ,libsigc++)
        ("mlt" ,mlt-6)
-       ("openexr" ,openexr)
+       ("openexr" ,openexr-2)
        ("pango" ,pango)))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (home-page "https://www.synfig.org")
     (synopsis "Vector-based 2D animation renderer")
     (description
@@ -225,13 +223,9 @@ for tweening, preventing the need to hand-draw each frame.")
                  `("XDG_DATA_DIRS" ":" prefix (,gtk-share)))
                #t))))))
     (inputs
-     `(("gtkmm" ,gtkmm)
-       ("gtk+" ,gtk+)
-       ("libsigc++" ,libsigc++)
-       ("synfig" ,synfig)))
+     (list gtkmm-3 gtk+ libsigc++ synfig))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (home-page "https://www.synfig.org")
     (synopsis "Vector-based 2D animation package (GUI)")
     (description
@@ -454,7 +448,7 @@ language.")
          ("qtmultimedia" ,qtmultimedia)
          ("libsndfile" ,libsndfile)))
       (native-inputs
-       `(("qttools" ,qttools)))
+       (list qttools))
       (home-page "https://www.lostmarble.com/papagayo/")
       (synopsis "Lip-syncing for animations")
       (description
@@ -480,10 +474,7 @@ waveform until they line up with the proper sounds.")
                 "0b1nwiwyg01087q318vymg4si76dw41ykxbn2zwd6dqbxzbpr1dh"))))
     (build-system gnu-build-system)
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtxmlpatterns" ,qtxmlpatterns)
-       ("qtmultimedia" ,qtmultimedia)
-       ("qtsvg" ,qtsvg)))
+     (list qtbase-5 qtxmlpatterns qtmultimedia qtsvg))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
diff --git a/gnu/packages/antivirus.scm b/gnu/packages/antivirus.scm
index 368b0efde7..80126a5b59 100644
--- a/gnu/packages/antivirus.scm
+++ b/gnu/packages/antivirus.scm
@@ -66,11 +66,11 @@
                                "clamav-config-llvm-libs.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("check" ,check)                 ; for tests
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf
+           automake
+           check ; for tests
+           libtool
+           pkg-config))
     (inputs
      `(("bzip2" ,bzip2)
        ("libcurl" ,curl)
diff --git a/gnu/packages/apr.scm b/gnu/packages/apr.scm
index 5ef1488218..3b4968089b 100644
--- a/gnu/packages/apr.scm
+++ b/gnu/packages/apr.scm
@@ -48,8 +48,7 @@
      ;; Thus, build sequentially.
      '(#:parallel-build? #f
        #:parallel-tests? #f))
-    (inputs `(("perl" ,perl)
-              ("libltdl" ,libltdl)))
+    (inputs (list perl libltdl))
     (home-page "http://apr.apache.org/")
     (synopsis "The Apache Portable Runtime Library")
     (description
@@ -75,9 +74,9 @@ around or take advantage of platform-specific deficiencies or features.")
                "0nq3s1yn13vplgl6qfm09f7n0wm08malff9s59bqf9nid9xjzqfk"))))
     (build-system gnu-build-system)
     (inputs
-     `(("apr" ,apr)))
+     (list apr))
     (propagated-inputs
-     `(("expat" ,expat)))
+     (list expat))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
diff --git a/gnu/packages/arcan.scm b/gnu/packages/arcan.scm
index a84bf0d8dd..c25d64903c 100644
--- a/gnu/packages/arcan.scm
+++ b/gnu/packages/arcan.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2019 L  p R n  d n <guix@lprndn.info>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -65,7 +66,8 @@
                  (base32 "1pd0avlzc2rig1hd37zbhc7r2s6fjzdhshfg9l9cfzibl7caclyw"))))
       (build-system cmake-build-system)
       (arguments
-       `(#:configure-flags '("-DVIDEO_PLATFORM=egl-dri" "-DBUILTIN_LUA=off"
+       `(#:configure-flags '("-DCMAKE_C_FLAGS=-fcommon"
+                             "-DVIDEO_PLATFORM=egl-dri" "-DBUILTIN_LUA=off"
                              "-DSTATIC_OPENAL=off""-DENABLE_LWA=on"
                              "-DSTATIC_SQLITE3=off" "-DSTATIC_FREETYPE=off"
                              "-DSHMIF_TUI_ACCEL=on")
@@ -75,12 +77,10 @@
              (lambda* (#:key inputs #:allow-other-keys)
                (substitute* "src/platform/cmake/modules/FindGBMKMS.cmake"
                  (("/usr/local/include/libdrm")
-                  (string-append (assoc-ref inputs "libdrm")
-                                 "/include/libdrm")))
+                  (search-input-directory inputs "include/libdrm")))
                (substitute* "src/platform/cmake/modules/FindAPR.cmake"
                  (("/usr/local/apr/include/apr-1")
-                  (string-append (assoc-ref inputs "apr")
-                                 "/include/apr-1")))
+                  (search-input-directory inputs "include/apr-1")))
                #t))
            ;; Normally, it tries to fetch patched openal with git
            ;; but copying files manually in the right place seems to work too.
@@ -151,8 +151,7 @@
                              (base32
                               "0dcxcnqjkyyqdr2yk84mprvkncy5g172kfs6vc4zrkklsbkr8yi2"))))))
       (native-inputs
-       `(("pkg-config" ,pkg-config)
-         ("ruby" ,ruby)))               ; For documentation and testing
+       (list pkg-config ruby))               ; For documentation and testing
       (home-page "https://arcan-fe.com")
       (synopsis "Display server, multimedia framework and game engine (egl-dri)")
       (description "Arcan is a development framework for creating virtually
@@ -171,14 +170,15 @@ engine programmable using Lua.")
     (inherit arcan)
     (name "arcan-sdl")
     (inputs
-     `(("sdl" ,sdl)
-       ,@(fold alist-delete (package-inputs arcan)
-               '("libdrm"))))
+     (modify-inputs (package-inputs arcan)
+       (delete "libdrm")
+       (prepend sdl)))
     (arguments
      `(,@(ensure-keyword-arguments
           (package-arguments arcan)
           '(#:configure-flags
-            '("-DVIDEO_PLATFORM=sdl" "-DBUILTIN_LUA=off"
+            '("-DCMAKE_C_FLAGS=-fcommon"
+              "-DVIDEO_PLATFORM=sdl" "-DBUILTIN_LUA=off"
               "-DSTATIC_OPENAL=off" "-DDISABLE_JIT=off"
               "-DENABLE_LWA=on" "-DSTATIC_SQLITE3=off"
               "-DSTATIC_FREETYPE=off" "-DSHMIF_TUI_ACCEL=on")))))
@@ -218,11 +218,7 @@ engine programmable using Lua.")
            ,(string-append "--with-xkb-output="
                            "/tmp"))))   ; FIXME: Copied from xorg
       (native-inputs
-       `(("pkg-config" ,pkg-config)
-         ("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("libtool" ,libtool)
-         ("util-macros" ,util-macros)))
+       (list pkg-config autoconf automake libtool util-macros))
       (inputs
        `(("arcan" ,arcan)
          ("font-util" ,font-util)
@@ -250,14 +246,14 @@ as a window under Arcan.")
     (inherit arcan)
     (name "arcan-wayland")
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("arcan" ,arcan)
-       ("libseccomp" ,libseccomp)
-       ("libxkbcommon" ,libxkbcommon)
-       ("mesa" ,mesa)
-       ("wayland" ,wayland)
-       ("wayland-protocols" ,wayland-protocols)))
+     (list arcan
+           libseccomp
+           libxkbcommon
+           mesa
+           wayland
+           wayland-protocols))
     (arguments
      `(#:tests? #f
        #:phases
diff --git a/gnu/packages/aspell.scm b/gnu/packages/aspell.scm
index a86984b28c..714e0af084 100644
--- a/gnu/packages/aspell.scm
+++ b/gnu/packages/aspell.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2013, 2014, 2015, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015, 2016 Alex Kost <alezost@gmail.com>
 ;;; Copyright © 2016 John Darrington <jmd@gnu.org>
-;;; Copyright © 2016, 2017, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2019, 2020, 2022 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Christopher Andersson <christopher@8bits.nu>
 ;;; Copyright © 2016 Theodoros Foradis <theodoros@foradis.org>
 ;;; Copyright © 2016, 2017, 2019, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
@@ -73,7 +73,7 @@
                   (string-append "\"filter-path" middle
                                  "\"" libdir "\"")))
                #t))))))
-    (inputs `(("perl" ,perl)))
+    (inputs (list perl))
 
     (native-search-paths
      ;; This is a Guix-specific environment variable that takes a single
@@ -131,12 +131,16 @@ dictionaries, including personal ones.")
          (list (string-append "dictdir=" out "/lib/aspell")
                (string-append "datadir=" out "/lib/aspell")))
        #:tests? #f))
-    (native-inputs `(("aspell" ,aspell)
-                     ("which" ,which)))
+    (native-inputs (list aspell which))
     (synopsis (string-append full-name " dictionary for GNU Aspell")) ; XXX: i18n
     (description
      "This package provides a dictionary for the GNU Aspell spell checker.")
     (license gpl2+)
+    (properties
+      ;; Unfortunately any versions with a trailing 'dash and digit' (eg.: '-0')
+      ;; will fail to register as a version.
+      `((upstream-name . ,(string-append prefix dict-name))
+        (ftp-directory . ,(string-append "/aspell/dict/" dict-name))))
     (home-page "http://aspell.net/")))
 
 
@@ -389,10 +393,7 @@ dictionaries, including personal ones.")
                (base32
                 "11lkrnhwrf5mvrrq45k4mads3n9aswgac8dc25ba61c75alxb5rs"))))
     (native-inputs
-     `(("tar" ,tar)
-       ("gzip" ,gzip)
-       ("perl" ,perl)
-       ("aspell" ,aspell)))
+     (list tar gzip perl aspell))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -522,10 +523,9 @@ under permissive licensing terms.  See the 'Copyright' file."))))
                    (format port "#define MAN45DIR \"~a/share/man/man5\"~%" out))))
              #t)))))
     (inputs
-     `(("grep" ,grep)
-       ("ncurses" ,ncurses)))
+     (list grep ncurses))
     (native-inputs
-     `(("bison" ,bison)))
+     (list bison))
     (synopsis "Interactive spell-checking tool for Unix")
     (description "Ispell is an interactive spell-checking tool supporting many
 European languages.")
diff --git a/gnu/packages/assembly.scm b/gnu/packages/assembly.scm
index c8576930ff..33ccc70e76 100644
--- a/gnu/packages/assembly.scm
+++ b/gnu/packages/assembly.scm
@@ -9,6 +9,8 @@
 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
 ;;; Copyright © 2020 Christine Lemmer-Webber <cwebber@dustycloud.org>
 ;;; Copyright © 2020 B. Wilson <elaexuotee@wilsonb.com>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -57,17 +59,17 @@
 (define-public nasm
   (package
     (name "nasm")
-    (version "2.14.02")
+    (version "2.15.05")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://www.nasm.us/pub/nasm/releasebuilds/"
                                   version "/nasm-" version ".tar.xz"))
               (sha256
                (base32
-                "1xg8dfr49py15vbwk1rzcjc3zpqydmr49ahlijm56wlgj8zdwjp2"))))
+                "0gqand86b0r86k3h46dh560lykxmxqqywz5m55kgjfq7q4lngbrw"))))
     (build-system gnu-build-system)
-    (native-inputs `(("perl" ,perl)  ;for doc and test target
-                     ("texinfo" ,texinfo)))
+    (native-inputs (list perl ;for doc and test target
+                         texinfo))
     (arguments
      `(#:test-target "test"
        #:phases
@@ -75,11 +77,10 @@
          (add-after 'unpack 'dont-build-ps-pdf-outputs
            (lambda _
              (substitute* "doc/Makefile.in"
-               (("html nasmdoc.txt nasmdoc.pdf")
+               (("html nasmdoc.txt nasmdoc.pdf \\$\\(XZFILES\\)")
                 "html nasmdoc.txt")
                (("\\$\\(INSTALL_DATA\\) nasmdoc.pdf")
-                "$(INSTALL_DATA)"))
-             #t))
+                "$(INSTALL_DATA)"))))
          (add-after 'install 'install-info
            (lambda _
              (invoke "make" "install_doc"))))))
@@ -139,7 +140,10 @@ debugging information in STABS, DWARF 2, and CodeView 8 formats.")
               (base32
                "1jgxbq2cm51dzi3zhz38mmgwdcgs328mfl8iviw8dxn6dn36p1gd"))))
     (build-system gnu-build-system)
-    (native-inputs `(("zlib" ,zlib)))
+    (native-inputs (list zlib))
+    (arguments
+     ;; Some tests fail when run in parallel.
+     `(#:parallel-tests? #f))
     (synopsis "Library for generating assembly code at runtime")
     (description
      "GNU Lightning is a library that generates assembly language code at
@@ -177,14 +181,14 @@ speed on x86, NEON on ARM, etc.).")
 (define-public fasm
   (package
     (name "fasm")
-    (version "1.73.27")
+    (version "1.73.29")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://flatassembler.net/fasm-"
                            version ".tgz"))
        (sha256
-        (base32 "1cghiks49ql77b9l4mwrnlk76kai0fm0z22j71kbdlxngwvlh0b8"))))
+        (base32 "0ar1k1504cmwi49y6g254rkzayll0kn90vjd4zj09xv86kcg8a33"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ; no tests exist
@@ -203,8 +207,7 @@ speed on x86, NEON on ARM, etc.).")
          (replace 'install
            (lambda _
              (let ((out (assoc-ref %outputs "out")))
-               (install-file "fasm" (string-append out "/bin")))
-             #t)))))
+               (install-file "fasm" (string-append out "/bin"))))))))
     (supported-systems '("x86_64-linux" "i686-linux"))
     (synopsis "Assembler for x86 processors")
     (description
@@ -267,15 +270,15 @@ assembler, a C compiler and a linker.  The assembler uses Intel syntax
                   "0p6wklslkkp3s4aisj3w5a53bagqn5fy4m6088ppd4fcfxgqkrcd"))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("bison" ,bison)
-         ("flex" ,flex)
-         ("help2man" ,help2man)
-         ("gettext" ,gettext-minimal)
-         ("libtool" ,libtool)
-         ("makeinfo" ,texinfo)
-         ("pkg-config" ,pkg-config)))
+       (list autoconf
+             automake
+             bison
+             flex
+             help2man
+             gettext-minimal
+             libtool
+             texinfo
+             pkg-config))
       (home-page "https://www.gnu.org/software/libjit/")
       (synopsis "Just-In-Time compilation library")
       (description
@@ -320,12 +323,9 @@ runtime")
                       ,(string-append "PREFIX="
                                       (assoc-ref %outputs "out")))))
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)
-       ("pkg-config" ,pkg-config)
-       ("util-linux" ,util-linux)))
+     (list bison flex pkg-config util-linux))
     (inputs
-     `(("libpng" ,libpng)))
+     (list libpng))
     (home-page "https://github.com/gbdev/rgbds")
     (synopsis "Rednex Game Boy Development System")
     (description
@@ -383,14 +383,14 @@ Supported architectures are:
 (define-public xa
   (package
     (name "xa")
-    (version "2.3.11")
+    (version "2.3.12")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://www.floodgap.com/retrotech/xa"
                                   "/dists/xa-" version ".tar.gz"))
               (sha256
                (base32
-                "0b81r7mvzqxgnbbmhixcnrf9nc72v1nqaw19k67221g3k561dwij"))))
+                "0107zdwc2rzlp26pyx7gns4lqmiyg68nmpgwrg36yrrd04v1bzgq"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f   ; TODO: custom test harness, not sure how it works
@@ -398,7 +398,7 @@ Supported architectures are:
        (modify-phases %standard-phases
          (delete 'configure))            ; no "configure" script
        #:make-flags (list (string-append "DESTDIR=" (assoc-ref %outputs "out")))))
-    (native-inputs `(("perl" ,perl)))
+    (native-inputs (list perl))
     (home-page "https://www.floodgap.com/retrotech/xa/")
     (synopsis "Two-pass portable cross-assembler")
     (description
@@ -445,19 +445,19 @@ sets, both THUMB and ARM mode.")
 (define-public intel-xed
   (package
     (name "intel-xed")
-    (version "11.2.0")
+    (version "12.0.1")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
              (url "https://github.com/intelxed/xed")
              (commit version)))
-       (sha256 (base32 "1jffayski2gpd54vaska7fmiwnnia8v3cka4nfyzjgl8xsky9v2s"))
+       (sha256 (base32 "07zfff8zf29c2n0wal87hiqfq3cwcjn80zz78mz0nyjfj09nd39f"))
        (file-name (git-file-name name version))
        (patches (search-patches "intel-xed-fix-nondeterminism.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("python-wrapper" ,python-wrapper)
+     `(("python" ,python-wrapper)
        ("tcsh" ,tcsh)
        ;; As of the time of writing this comment, mbuild does not exist in the
        ;; Python Package Index and seems to only be used by intel-xed, so we
@@ -471,10 +471,10 @@ sets, both THUMB and ARM mode.")
              (method git-fetch)
              (uri (git-reference
                    (url "https://github.com/intelxed/mbuild")
-                   (commit "5304b94361fccd830c0e2417535a866b79c1c297")))
+                   (commit "3de3f0d753c11dbe634bec611d4cc13f74768e4f")))
              (sha256
               (base32
-               "0r3avc3035aklqxcnc14rlmmwpj3jp09vbcbwynhvvmcp8srl7dl"))
+               "0z8hdhpmk8y5c9429p2yns9daswnffbprni9czkq3vij8f58lkg4"))
              (file-name (git-file-name name version)))))))
     (outputs '("out" "lib"))
     (arguments
@@ -489,8 +489,7 @@ sets, both THUMB and ARM mode.")
            (replace 'build
              (lambda* (#:key inputs #:allow-other-keys)
                (let ((mbuild (assoc-ref inputs "mbuild")))
-                 (setenv "PYTHONPATH" (string-append
-                                       (getenv "PYTHONPATH") ":" mbuild))
+                 (setenv "PYTHONPATH" mbuild)
                  (invoke "./mfile.py"
                          (string-append "--build-dir=" build-dir)
                          (string-append "--install-dir=" kit-dir)
@@ -517,8 +516,7 @@ sets, both THUMB and ARM mode.")
                  (copy-recursively (string-append kit-dir "/include")
                                    (string-append lib "/include"))
                  (copy-recursively (string-append kit-dir "/lib")
-                                   (string-append lib "/lib"))
-                 #t)))))))
+                                   (string-append lib "/lib")))))))))
     (home-page "https://intelxed.github.io/")
     (synopsis "Encoder and decoder for x86 (IA32 and Intel64) instructions")
     (description "The Intel X86 Encoder Decoder (XED) is a software library and
diff --git a/gnu/packages/astronomy.scm b/gnu/packages/astronomy.scm
index a3f7d5cbf4..e968fd2480 100644
--- a/gnu/packages/astronomy.scm
+++ b/gnu/packages/astronomy.scm
@@ -6,6 +6,9 @@
 ;;; Copyright © 2020 R Veera Kumar <vkor@vkten.in>
 ;;; Copyright © 2020, 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;; Copyright © 2021 Sharlatan Hellseher <sharlatanus@gmail.com>
+;;; Copyright © 2021, 2022 Vinicius Monego <monego@posteo.net>
+;;; Copyright © 2021 Greg Hogan <code@greghogan.com>
+;;; Copyright © 2021 Foo Chuan Wei <chuanwei.foo@hotmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -31,6 +34,7 @@
   #:use-module (gnu packages)
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages autotools)
+  #:use-module (gnu packages boost)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages curl)
@@ -51,11 +55,15 @@
   #:use-module (gnu packages python-check)
   #:use-module (gnu packages python-crypto)
   #:use-module (gnu packages python-science)
+  #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
+  #:use-module (gnu packages time)
   #:use-module (gnu packages version-control)
   #:use-module (gnu packages video)
+  #:use-module (gnu packages wxwidgets)
   #:use-module (gnu packages xiph)
+  #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
@@ -96,6 +104,70 @@ in FITS files.")
     (license (license:non-copyleft "file://License.txt"
                           "See License.txt in the distribution."))))
 
+(define-public python-fitsio
+  (package
+    (name "python-fitsio")
+    (version "1.1.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "fitsio" version))
+       (sha256
+        (base32 "1llql2i6xr9lkdl81jx5nvz80kspamvira90546y32ldy551hq1l"))
+       (modules '((guix build utils)))
+       (snippet
+        ;; Remove the bundled cfitsio
+        `(begin
+           (delete-file-recursively "cfitsio3490")
+           (substitute* "MANIFEST.in"
+             (("recursive-include cfitsio3490.*$\n") ""))
+           #t))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'unbundle-cfitsio
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let* ((cfitsio (assoc-ref inputs "cfitsio"))
+                    (includedir (string-append "\"" cfitsio "/include\""))
+                    (libdir (string-append "\"" cfitsio "/lib\"")))
+               ;; Use Guix' cfitsio instead of the bundled one
+               (substitute* "setup.py"
+                 (("self.use_system_fitsio = False") "pass")
+                 (("self.system_fitsio_includedir = None") "pass")
+                 (("self.system_fitsio_libdir = None") "pass")
+                 (("self.use_system_fitsio") "True")
+                 (("self.system_fitsio_includedir") includedir)
+                 (("self.system_fitsio_libdir") libdir)))))
+         (add-after 'unpack 'skip-bzip2-test
+           (lambda* (#:key inputs #:allow-other-keys)
+             ;; The bzip2 test fails because Guix' cfitsio
+             ;; is built without bzip2 support.
+             (substitute* "fitsio/test.py"
+               (("'SKIP_BZIP_TEST' in os.environ") "True")))))))
+    (propagated-inputs
+     (list python-numpy cfitsio))
+    (home-page "https://github.com/esheldon/fitsio")
+    (synopsis
+     "Python library to read from and write to FITS files")
+    (description
+     "This package provides a Python library for reading from and writing
+to @acronym{FITS, Flexible Image Transport System} files using the
+CFITSIO library.  Among other things, it can
+
+@itemize
+@item read and write image, binary, and ascii table extensions;
+
+@item read arbitrary subsets of tables in a lazy manner;
+
+@item query the rows and columns of a table;
+
+@item read and write header keywords;
+
+@item read and write Gzip files.
+@end itemize")
+    (license license:gpl2+)))
+
 (define-public qfits
   (package
     (name "qfits")
@@ -118,7 +190,7 @@ for reading and writing.")
 (define-public erfa
   (package
     (name "erfa")
-    (version "1.7.3")
+    (version "2.0.0")
     (source
      (origin
        (method git-fetch)
@@ -127,13 +199,10 @@ for reading and writing.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0nh12dr7gk4ki55lz95pkm4fpf7kazirra3zax9pab6v4qql4hlw"))))
+        (base32 "0s9dpj0jdkqcg552f00jhd722czji4pffabmpys5pgi6djckq4f4"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("automake" ,automake)
-       ("autoreconf" ,autoconf)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list automake autoconf libtool pkg-config))
     (home-page "https://github.com/liberfa/erfa")
     (synopsis "Essential Routines for Fundamental Astronomy")
     (description
@@ -179,7 +248,7 @@ feature detection and cosmetic corrections.")
        (sha256
         (base32 "1536gmcpm6pckn9xrb6j8s4pm1vryjhzvhfaj9wx3jwxcpbdy0dw"))))
     (inputs
-     `(("cfitsio" ,cfitsio)))
+     (list cfitsio))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
@@ -228,7 +297,7 @@ astronomical image-processing packages like Drizzle, Swarp or SExtractor.")
 (define-public gnuastro
   (package
     (name "gnuastro")
-    (version "0.15")
+    (version "0.16")
     (source
      (origin
        (method url-fetch)
@@ -236,7 +305,7 @@ astronomical image-processing packages like Drizzle, Swarp or SExtractor.")
                            version ".tar.lz"))
        (sha256
         (base32
-         "1jjr3ixxbpsr5m4s7ahh12ymcnlvjzwcp02ya16b1lvzrz1wmhy4"))))
+         "07xr0r5dmjpnrz7ylf7k3vmjjna2jafi16lfvkqwxj9fyssmz207"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--disable-static")))
@@ -250,8 +319,7 @@ astronomical image-processing packages like Drizzle, Swarp or SExtractor.")
        ("wcslib" ,wcslib)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("libtool" ,libtool)
-       ("lzip" ,lzip)))
+     (list libtool lzip))
     (home-page "https://www.gnu.org/software/gnuastro/")
     (synopsis "Astronomy utilities")
     (description "The GNU Astronomy Utilities (Gnuastro) is a suite of
@@ -289,9 +357,7 @@ programs for the manipulation and analysis of astronomical data.")
         (string-append
          "--with-fftw-incdir=" (assoc-ref %build-inputs "fftw") "/include"))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (inputs
      `(("openblas" ,openblas)
        ("fftw" ,fftwf)))
@@ -383,11 +449,9 @@ astronomical fields.  SkyMaker is part of the EFIGI
                (copy-recursively "lang" lang))
              #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
      (inputs
-      `(("gtkmm" ,gtkmm)
-        ("libskry" ,libskry)
-        ("ffmpeg" ,ffmpeg)))
+      (list gtkmm-3 libskry ffmpeg))
      (home-page "https://github.com/GreatAttractor/stackistry")
      (synopsis "Astronomical lucky imaging/image stacking tool")
      (description
@@ -412,12 +476,12 @@ deconvolution).  Such post-processing is not performed by Stackistry.")
         (base32 "049jlc8vx06pad5h2syrmf7f1l346yr5iraai0wkn8s8pk30j8q7"))))
     (build-system cmake-build-system)
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtlocation" ,qtlocation)
-       ("qtmultimedia" ,qtmultimedia)
-       ("qtscript" ,qtscript)
-       ("qtserialport" ,qtserialport)
-       ("zlib" ,zlib)))
+     (list qtbase-5
+           qtlocation
+           qtmultimedia
+           qtscript
+           qtserialport
+           zlib))
     (native-inputs
      `(("gettext" ,gettext-minimal)     ; xgettext is used at compile time
        ("perl" ,perl)                   ; for pod2man
@@ -515,12 +579,12 @@ any arbitrary astrometric projection defined in the WCS standard.")
          ;; maybe required?
          ("mesa" ,mesa)
          ;; optional: fmtlib, Eigen3;
-         ("fmt" ,fmt)
+         ("fmt" ,fmt-7)
          ("eigen" ,eigen)
          ;; glut: for glut interface
          ("freeglut" ,freeglut)))
       (propagated-inputs
-       `(("lua" ,lua)))
+       (list lua))
       (arguments
        `(#:configure-flags '("-DENABLE_GLUT=ON" "-DENABLE_QT=OFF")
          #:tests? #f))                            ;no tests
@@ -547,6 +611,321 @@ accurately in real time at any rate desired.")
      `(#:configure-flags '("-DENABLE_GTK=ON" "-DENABLE_QT=OFF")
        #:tests? #f))))
 
+(define-public python-astropy
+  (package
+    (name "python-astropy")
+    (version "5.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "astropy" version))
+       (sha256
+        (base32 "09rr9z2kn5qw34fqpwxgcwsn9m5aw6f0dd0pm232aa8k3qakw83h"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           ;; Remove Python bundles.
+           (with-directory-excursion "astropy/extern"
+             (for-each delete-file-recursively '("ply" "configobj")))
+           ;; Remove cextern bundles and leave the wcslib bundle.  Astropy
+           ;; upgrades to different versions of wcslib every few releases
+           ;; and tests break every upgrade.
+           ;; TODO: unbundle wcslib.
+           (with-directory-excursion "cextern"
+             (for-each delete-file-recursively '("cfitsio" "expat")))
+           #t))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'preparations
+           (lambda _
+             ;; Use our own libraries in place of bundles, with the
+             ;; exception of wcslib.
+             (setenv "ASTROPY_USE_SYSTEM_CFITSIO" "1")
+             (setenv "ASTROPY_USE_SYSTEM_EXPAT" "1")
+             ;; Some tests require a writable home.
+             (setenv "HOME" "/tmp")
+             ;; Relax xfail tests.
+             (substitute* "setup.cfg"
+               (("xfail_strict = true") "xfail_strict = false"))
+             ;; Replace all references to external ply.
+             (let ((ply-files '("coordinates/angle_formats.py"
+                                "utils/parsing.py")))
+               (with-directory-excursion "astropy"
+                 (map (lambda (file)
+                        (substitute* file (("astropy.extern.ply")
+                                           "ply")))
+                      ply-files)))
+             ;; Replace reference to external configobj.
+             (with-directory-excursion "astropy/config"
+               (substitute* "configuration.py"
+                 (("from astropy.extern.configobj ") "")))))
+         ;; This file is opened in both install and check phases.
+         (add-before 'install 'writable-compiler
+           (lambda _ (make-file-writable "astropy/_compiler.c")))
+         (add-before 'check 'writable-compiler
+           (lambda _ (make-file-writable "astropy/_compiler.c")))
+         (replace 'check
+           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               ;; Extensions have to be rebuilt before running the tests.
+               (invoke "python" "setup.py" "build_ext" "--inplace")
+               (invoke "python" "-m" "pytest" "--pyargs" "astropy"
+                       ;; Skip tests that need remote data.
+                       "-m" "not remote_data")))))))
+    (native-inputs
+     (list pkg-config
+           python-coverage
+           python-cython
+           python-extension-helpers
+           python-ipython
+           python-jplephem
+           python-objgraph
+           python-pytest
+           python-pytest-astropy
+           python-pytest-xdist
+           python-setuptools-scm
+           python-sgp4
+           python-skyfield))
+    (inputs
+     (list cfitsio expat))
+    (propagated-inputs
+     (list python-configobj
+           python-numpy
+           python-packaging
+           python-ply
+           python-pyerfa
+           python-pyyaml))
+    (home-page "https://www.astropy.org/")
+    (synopsis "Core package for Astronomy in Python")
+    (description
+     "Astropy is a single core package for Astronomy in Python.  It contains
+much of the core functionality and some common tools needed for performing
+astronomy and astrophysics.")
+    (license license:bsd-3)))
+
+(define-public python-astropy-healpix
+  (package
+    (name "python-astropy-healpix")
+    (version "0.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "astropy-healpix" version))
+       (sha256
+        (base32 "1436ml03xkmvx4afzbhfj67ab91418sz1w3lq1b18r43qchnd6j0"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         ;; This file is opened in both install and check phases.
+         (add-before 'install 'writable-compiler
+           (lambda _ (make-file-writable "astropy_healpix/_compiler.c")))
+         (add-before 'check 'writable-compiler
+           (lambda _ (make-file-writable "astropy_healpix/_compiler.c")))
+         (replace 'check
+           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               ;; Extensions have to be rebuilt before running the tests.
+               (invoke "python" "setup.py" "build_ext" "--inplace")
+               (invoke "python" "-m" "pytest"
+                       "--pyargs" "astropy_healpix")))))))
+    (native-inputs
+     (list python-extension-helpers
+           python-hypothesis
+           python-pytest-astropy
+           python-setuptools-scm))
+    (propagated-inputs
+     (list python-astropy python-numpy))
+    (home-page "https://github.com/astropy/astropy-healpix")
+    (synopsis "HEALPix for Astropy")
+    (description "This package provides HEALPix to the Astropy project.")
+    (license license:bsd-3)))
+
+(define-public python-astroquery
+  (package
+    (name "python-astroquery")
+    (version "0.4.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "astroquery" version))
+       (sha256
+        (base32 "06xy0qzqmps6z5vwfkh5fkhr151p7g94r2j0mvp1rc8zns22y010"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'writable-home
+           (lambda _                    ; some tests need a writable home
+             (setenv "HOME" (getcwd))))
+         (replace 'check
+           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "python" "-m" "pytest" "--pyargs" "astroquery"
+                       ;; Skip tests that require online data.
+                       "-m" "not remote_data")))))))
+    (propagated-inputs
+     (list python-astropy
+           python-beautifulsoup4
+           python-html5lib
+           python-keyring
+           python-numpy
+           python-pyvo
+           python-requests))
+    (native-inputs
+     (list python-flask
+           python-jinja2
+           python-matplotlib
+           python-pytest-astropy
+           python-pytest-dependency))
+    (home-page "https://www.astropy.org/astroquery/")
+    (synopsis "Access online astronomical data resources")
+    (description "Astroquery is a package that contains a collection of tools
+to access online Astronomical data.  Each web service has its own sub-package.")
+    (license license:bsd-3)))
+
+(define-public python-photutils
+  (package
+    (name "python-photutils")
+    (version "1.3.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "photutils" version))
+       (sha256
+        (base32 "1a8djakaya6w5iv9237gkcz39brqzgrfs2wqrl0izi1s85cfdymn"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:test-target "pytest"
+       #:phases
+       (modify-phases %standard-phases
+         ;; This file is opened in both install and check phases.
+         (add-before 'install 'writable-compiler
+           (lambda _ (make-file-writable "photutils/_compiler.c")))
+         (add-before 'check 'writable-compiler
+           (lambda _ (make-file-writable "photutils/_compiler.c"))))))
+    (propagated-inputs
+     (list python-astropy python-numpy))
+    (native-inputs
+     (list python-cython
+           python-extension-helpers
+           python-pytest-astropy
+           python-pytest-runner
+           python-setuptools-scm))
+    (home-page "https://github.com/astropy/photutils")
+    (synopsis "Source detection and photometry")
+    (description "Photutils is an Astropy package for detection and photometry
+of astronomical sources.")
+    (license license:bsd-3)))
+
+(define-public python-pyvo
+  (package
+    (name "python-pyvo")
+    (version "1.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pyvo" version))
+       (sha256
+        (base32 "1lap703wxbyxqlbk85myirp4pkdnc6cg10xhfajfsvz5k0hm5ffw"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "python" "-m" "pytest" "--pyargs" "pyvo" "-k"
+                       (string-append   ; these tests use the network
+                        "not test_access_with_string"
+                        " and not test_access_with_list"
+                        " and not test_access_with_expansion"))))))))
+    (native-inputs
+     (list python-pytest-astropy python-requests-mock))
+    (propagated-inputs
+     (list python-astropy python-mimeparse python-pillow python-requests))
+    (home-page "https://github.com/astropy/pyvo")
+    (synopsis "Access Virtual Observatory data and services")
+    (description
+     "PyVO is a package providing access to remote data and services of the
+Virtual observatory (VO) using Python.")
+    (license license:bsd-3)))
+
+(define-public python-regions
+  (package
+    (name "python-regions")
+    (version "0.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "regions" version))
+       (sha256
+        (base32 "1bjrcjchbw3xw1a26d5g198lh7vxpp9m5sal58r7f8mmr1d8g2dc"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:test-target "pytest"
+       #:phases
+       (modify-phases %standard-phases
+         ;; This doctest requires online data.
+         (add-after 'unpack 'delete-doctest
+           (lambda _ (delete-file "docs/masks.rst")))
+         ;; This file is opened in both install and check phases.
+         (add-before 'install 'writable-compiler
+           (lambda _ (make-file-writable "regions/_compiler.c")))
+         (add-before 'check 'writable-compiler
+           (lambda _ (make-file-writable "regions/_compiler.c")))
+         (add-before 'check 'writable-home
+           (lambda _  (setenv "HOME" (getcwd)))))))
+    (propagated-inputs
+     (list python-astropy python-numpy))
+    (native-inputs
+     (list python-cython
+           python-extension-helpers
+           python-pytest-arraydiff
+           python-pytest-astropy
+           python-pytest-runner
+           python-setuptools-scm))
+    (home-page "https://github.com/astropy/regions")
+    (synopsis "Package for region handling")
+    (description "Regions is an Astropy package for region handling.")
+    (license license:bsd-3)))
+
+(define-public python-astral
+  (package
+    (name "python-astral")
+    (version "2.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "astral" version))
+       (sha256
+        (base32 "1gkggdibccmdy9glymw3kbrkzm6svvsg0lk56hhy92y4smkrj7g4"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "python" "-m" "pytest")))))))
+    (native-inputs
+     (list python-freezegun python-setuptools-scm))
+    (propagated-inputs
+     (list python-dataclasses python-pytest python-pytz))
+    (home-page "https://github.com/sffjunkie/astral")
+    (synopsis "Calculations for the position of the sun and moon")
+    (description "Astral is a Python module that calculates times for various
+positions of the sun: dawn, sunrise, solar noon, sunset, dusk, solar
+elevation, solar azimuth, rahukaalam, and the phases of the moon.")
+    (license license:asl2.0)))
+
 (define-public libnova
   (package
     (name "libnova")
@@ -571,9 +950,7 @@ accurately in real time at any rate desired.")
                (("/bin/sh") (which "sh")))
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (synopsis "Celestial mechanics, astrometry and astrodynamics library")
     (description "Libnova is a general purpose, double precision, Celestial
 Mechanics, Astrometry and Astrodynamics library.")
@@ -614,7 +991,7 @@ Mechanics, Astrometry and Astrodynamics library.")
                (copy-recursively "include" include))
              #t)))))
     (inputs
-     `(("ffmpeg" ,ffmpeg)))
+     (list ffmpeg))
     (home-page "https://github.com/GreatAttractor/libskry")
     (synopsis "Astronimical lucky imaging library")
     (description
@@ -720,7 +1097,7 @@ on FITS files:
          "xplanet-1.3.1-xpUtil-Add2017LeapSecond.cpp.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("libx11" ,libx11)
        ("libxscrnsaver" ,libxscrnsaver)
@@ -768,12 +1145,10 @@ Mercator, Mollweide, Peters, polyconic, orthographic and rectangular.")
        ("gettext" ,gettext-minimal)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("curl" ,curl)
-       ("glib" ,glib)
-       ("goocanvas" ,goocanvas)
-       ("gtk+" ,gtk+)))
+     (list curl glib goocanvas gtk+))
     (arguments
-     `(#:phases
+     `(#:configure-flags '("CFLAGS=-O2 -g -fcommon")
+       #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'fix-tests
            (lambda _
@@ -825,10 +1200,57 @@ provide you with detailed information about each pass.")
 It can be used to calculate the trajectory of satellites.")
       (license license:asl2.0))))
 
+(define-public imppg
+  (package
+    (name "imppg")
+    (version "0.6.4")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/GreatAttractor/imppg")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "04synbmyz0hkipl1cdc26nr42r57v494yjw8pi4jx0jrxrawgj9h"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:tests? #f                      ;no test provided
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'configure
+           (lambda* (#:key outputs #:allow-other-keys)
+             (mkdir-p "build")
+             (chdir "build")
+             (invoke
+              "cmake"
+              "-G" "Unix Makefiles"
+              "-DCMAKE_BUILD_TYPE=Release"
+              (string-append "-DCMAKE_INSTALL_PREFIX=" (assoc-ref outputs "out"))
+              ".."))))))
+    (native-inputs
+     (list boost pkg-config))
+    (inputs
+     (list cfitsio freeimage glew wxwidgets))
+    (home-page "https://github.com/GreatAttractor/imppg")
+    (synopsis "Astronomical Image Post-Proccessor (ImPPG)")
+    (description
+     "ImPPG performs Lucy-Richardson deconvolution, unsharp masking,
+brightness normalization and tone curve adjustment.  It can also apply
+previously specified processing settings to multiple images.  All operations
+are performed using 32-bit floating-point arithmetic.
+
+Supported input formats: FITS, BMP, JPEG, PNG, TIFF (most of bit depths and
+compression methods), TGA and more.  Images are processed in grayscale and can
+be saved as: BMP 8-bit; PNG 8-bit; TIFF 8-bit, 16-bit, 32-bit
+floating-point (no compression, LZW- or ZIP-compressed), FITS 8-bit, 16-bit,
+32-bit floating-point.")
+    (license license:gpl3+)))
+
 (define-public indi
   (package
     (name "indi")
-    (version "1.9.1")
+    (version "1.9.3")
     (source
      (origin
        (method git-fetch)
@@ -837,7 +1259,7 @@ It can be used to calculate the trajectory of satellites.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0zhsm60hgnmy9lvwckijf6f6yikbvdbxy2qlgclv09p14lgr6wd9"))))
+        (base32 "0c7md288d3g2vf0m1ai6x2l4j4rmlasc4rya92phvd4ynf8vcki2"))))
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags
@@ -859,17 +1281,17 @@ It can be used to calculate the trajectory of satellites.")
              (let ((out (assoc-ref outputs "out")))
                (mkdir-p (string-append out "/lib/udev/rules.d"))))))))
     (native-inputs
-     `(("googletest" ,googletest)))
+     (list googletest))
     (inputs
-     `(("cfitsio" ,cfitsio)
-       ("curl" ,curl)
-       ("fftw" ,fftw)
-       ("gsl" ,gsl)
-       ("libjpeg-turbo" ,libjpeg-turbo)
-       ("libnova" ,libnova)
-       ("libtiff" ,libtiff)
-       ("libusb" ,libusb)
-       ("zlib" ,zlib)))
+     (list cfitsio
+           curl
+           fftw
+           gsl
+           libjpeg-turbo
+           libnova
+           libtiff
+           libusb
+           zlib))
     (home-page "https://www.indilib.org")
     (synopsis "Library for astronimical intrumentation control")
     (description
@@ -883,31 +1305,88 @@ more.")
                    license:lgpl2.0+
                    license:lgpl2.1+))))
 
+(define-public sunclock
+  (let ((commit "f4106eb0a81f7594726d6b2859efd8fc64cc1225")
+        (revision "1"))
+    (package
+      (name "sunclock")
+      (version (git-version "3.57" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/nongiach/Sunclock")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "1rczdpmhvfw57b9r793vq8vqlbdhlkgj52fxwrdfl6cwj95a9kv2"))))
+      (build-system gnu-build-system)
+      (arguments
+       `(#:make-flags
+         (list (string-append "DESTDIR=" %output)
+               ;; Fix incorrect argument given to gcc. Error message:
+               ;; "gcc: error: DefaultGcc2AMD64Opt: No such file or directory"
+               "CDEBUGFLAGS=")
+         #:phases
+         (modify-phases %standard-phases
+           (replace 'configure
+             (lambda _
+               (chdir "sunclock-3.57")
+               (substitute* "Imakefile"
+                 (("^MANDIR=/X11R6/man/man1")
+                  "MANDIR=/share/man/man1")
+                 (("^BINDIR=/X11R6/bin")
+                  "BINDIR=/bin")
+                 ;; Disable ZLIB support for vmf files because zlib implements
+                 ;; `gzgetc` as a macro instead of a function, which results in
+                 ;; a compilation error.
+                 ((" -DZLIB") "")
+                 ((" -lz") "")
+                 (("cd \\$\\(DESTDIR\\)\\$\\(SHAREDIR\\)/earthmaps/vmf ; \
+gzip -f \\*.vmf")
+                  ""))
+               ;; Generate Makefile.
+               (invoke "xmkmf"))))
+         #:tests? #f))  ; No check target.
+      (inputs
+       (list libjpeg-turbo libpng libx11 libxpm))
+      (native-inputs
+       (list imake))
+      (home-page "https://github.com/nongiach/Sunclock")
+      (synopsis
+       "Map of the Earth that shows which portion is illuminated by the Sun")
+      (description
+       "Sunclock displays a map of the Earth and shows which portion is
+illuminated by the Sun.  It can commute between two states, the \"clock window\"
+and the \"map window\".  The clock window displays a small map of the Earth and
+therefore occupies little space on the screen, while the \"map window\" displays
+a large map and offers more advanced functions: local time of cities, Sun and
+Moon position, etc.")
+      (license license:gpl2+))))
+
 (define-public python-jplephem
   (package
     (name "python-jplephem")
-    (version "2.15")
+    (version "2.16")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "jplephem" version))
        (sha256
-        (base32 "1ca3dswsslij79qg6dcijjz4l0fj6nzmxld8z93v45ahlkhps0g0"))))
+        (base32 "1xvivnsywjaf5lxn3kyg2jhhq393gcwkjrl634m8dn52ypidrcdb"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out")))
-               (setenv "PYTHONPATH"
-                       (string-append "./build/lib:"
-                                      (getenv "PYTHONPATH")))
-               (setenv "PATH" (string-append out "/bin:"
-                                             (getenv "PATH")))
-               (invoke "python" "-m" "unittest" "discover" "-s" "test")))))))
+           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+             (when tests?
+               (let ((out (assoc-ref outputs "out")))
+                 (add-installed-pythonpath inputs outputs)
+                 (setenv "PATH" (string-append out "/bin:" (getenv "PATH")))
+                 (invoke "python" "-m" "unittest" "discover" "-s" "test"))))))))
     (inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (home-page "https://github.com/brandon-rhodes/python-jplephem")
     (synopsis "Python version of NASA DE4xx ephemerides")
     (description
@@ -918,13 +1397,13 @@ JPL ephemerides use to predict raw (x,y,z) planetary positions.")
 (define-public python-pyerfa
   (package
     (name "python-pyerfa")
-    (version "1.7.3")
+    (version "2.0.0.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pyerfa" version))
        (sha256
-        (base32 "1jqqrxvrgly4r0br5f6dsy8nab2xmhz915vp6md5f31ysr2sdwvc"))
+        (base32 "0c6y1rm51kj8ahbr1vwbswck3ix77dc3zhc2fkg6w7iczrzn7m1g"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -937,15 +1416,13 @@ JPL ephemerides use to predict raw (x,y,z) planetary positions.")
        (modify-phases %standard-phases
          (add-before 'build 'use-system-liberfa
            (lambda _
-             (setenv "PYERFA_USE_SYSTEM_LIBERFA" "1")
-             #t)))))
+             (setenv "PYERFA_USE_SYSTEM_LIBERFA" "1"))))))
     (native-inputs
-     `(("pytest" ,python-pytest)
-       ("setuptools-scm" ,python-setuptools-scm)
-       ("pytest-doctestplus" ,python-pytest-doctestplus)))
+     (list python-pytest-doctestplus python-pytest python-setuptools-scm))
     (inputs
-     `(("liberfa" ,erfa)
-       ("numpy" ,python-numpy)))
+     (list erfa))
+    (propagated-inputs
+     (list python-numpy))
     (home-page "https://github.com/liberfa/pyerfa")
     (synopsis "Python bindings for ERFA")
     (description
@@ -968,10 +1445,9 @@ functions, so that they can be called with scalar or array inputs.")
         (base32 "0wxdqn92q1grv8k7xi7h88ac6wnznw4xh5bdlz1vz6za2dgsyj4m"))))
     (build-system python-build-system)
     (native-inputs
-     `(("cython" ,python-cython)
-       ("pytest" ,python-pytest)))
+     (list python-cython python-pytest))
     (inputs
-     `(("numpy" ,python-numpy)))
+     (list python-numpy))
     (home-page "https://github.com/kbarbary/sep")
     (synopsis "Astronomical source extraction and photometry library")
     (description
@@ -1055,10 +1531,7 @@ astronomical images, especially when there is no WCS information available.")
      ;; framework https://github.com/brandon-rhodes/assay
      `(#:tests? #f))
     (inputs
-     `(("python-certifi" ,python-certifi)
-       ("python-jplephem" ,python-jplephem)
-       ("python-numpy" ,python-numpy)
-       ("python-sgp4" ,python-sgp4)))
+     (list python-certifi python-jplephem python-numpy python-sgp4))
     (home-page "https://rhodesmill.org/skyfield/")
     (synopsis "Astronomy for Python")
     (description
diff --git a/gnu/packages/attr.scm b/gnu/packages/attr.scm
index 3237376d40..8c1a4aca7c 100644
--- a/gnu/packages/attr.scm
+++ b/gnu/packages/attr.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org>
-;;; Copyright © 2012, 2013, 2016 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2016, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2019 Marius Bakke <mbakke@fastmail.com>
 ;;;
@@ -23,6 +23,7 @@
   #:use-module (guix licenses)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages gettext)
+  #:use-module (gnu packages hurd)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix build-system gnu))
@@ -30,18 +31,29 @@
 (define-public attr
   (package
     (name "attr")
-    (version "2.4.48")
+    (version "2.5.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://savannah/attr/attr-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "1rr4adzwax4bzr2c00f06zcsljv5y6p9wymz1g89ww7cb2rp5bay"))))
+                "1y6sibbkrcjygv8naadnsg6xmsqwfh6cwrqk01l0v2i5kfacdqds"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
+         ,@(if (hurd-target?)
+               `((add-before 'configure 'skip-linux-syscalls
+                   (lambda _
+                     ;; Starting from 2.5.1, libattr includes Linux-specific
+                     ;; calls to syscall(2).  Comment them out for GNU/Hurd
+                     ;; and instead use the glibc-provided wrappers.
+                     (substitute* "Makefile.in"
+                       (("libattr/syscalls\\.c") "")
+                       (("\tlibattr/la-syscalls\\.lo") "")
+                       (("-Wl,[[:graph:]]+/libattr\\.lds") "")))))
+               '())
          (replace 'check
            (lambda* (#:key target #:allow-other-keys)
              ;; Use the right shell.
@@ -57,8 +69,7 @@
              ;; extended attributes, and we wish to allow Guix to be built
              ;; on such systems.
              (unless target
-               (system* "make" "tests" "-C" "test"))
-             #t)))))
+               (system* "make" "tests" "-C" "test")))))))
     (inputs
      ;; Perl is needed to run tests; remove it from cross builds.
      (if (%current-target-system)
diff --git a/gnu/packages/audio.scm b/gnu/packages/audio.scm
index b746cd370d..b186c79451 100644
--- a/gnu/packages/audio.scm
+++ b/gnu/packages/audio.scm
@@ -8,14 +8,14 @@
 ;;; Copyright © 2016, 2017 Alex Griffin <a@ajgrf.com>
 ;;; Copyright © 2016 Nikita <nikita@n0.is>
 ;;; Copyright © 2016 Lukas Gradl <lgradl@openmailbox.org>
-;;; Copyright © 2016–2021 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2016–2022 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018, 2020 Oleg Pykhalov <go.wigust@gmail.com>
 ;;; Copyright © 2018 okapi <okapi@firemail.cc>
 ;;; Copyright © 2018, 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2018 Brett Gilio <brettg@gnu.org>
 ;;; Copyright © 2018, 2019 Marius Bakke <mbakke@fastmail.com>
-;;; Copyright © 2018 Thorsten Wilms <t_w_@freenet.de>
+;;; Copyright © 2018, 2021 Thorsten Wilms <t_w_@freenet.de>
 ;;; Copyright © 2018 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2018 Brendan Tildesley <mail@brendan.scot>
 ;;; Copyright © 2019, 2021 Pierre Langlois <pierre.langlois@gmx.com>
@@ -34,6 +34,9 @@
 ;;; Copyright © 2020 Giacomo Leidi <goodoldpaul@autistici.org>
 ;;; Copyright © 2020, 2021 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
+;;; Copyright © 2021 jgart <jgart@dismail.de>
+;;; Copyright © 2021 Aleksandr Vityazev <avityazev@posteo.org>
+;;; Copyright © 2022 Arjan Adriaanse <arjan@adriaan.se>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -89,6 +92,7 @@
   #:use-module (gnu packages libusb)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages llvm)
+  #:use-module (gnu packages machine-learning)
   #:use-module (gnu packages man)
   #:use-module (gnu packages maths)
   #:use-module (gnu packages mp3) ;taglib
@@ -101,12 +105,14 @@
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages pulseaudio)  ;libsndfile, libsamplerate
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-science)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages rdf)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages sdl)
   #:use-module (gnu packages serialization)
+  #:use-module (gnu packages sqlite)
   #:use-module (gnu packages telephony)
   #:use-module (gnu packages linphone)
   #:use-module (gnu packages linux)
@@ -130,6 +136,7 @@
   #:use-module (guix build-system waf)
   #:use-module (guix download)
   #:use-module (guix git-download)
+  #:use-module (guix gexp)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix utils)
@@ -276,17 +283,17 @@ Coding (AAC) encoder.")
 (define-public tinyalsa
   (package
     (name "tinyalsa")
-    (version "1.1.1")
+    (version "2.0.0")
     (source
      (origin
        (method git-fetch)
        (uri
         (git-reference
          (url "https://github.com/tinyalsa/tinyalsa")
-         (commit version)))
+         (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0ajyvml5bnzvhiyyrn42gqwgg23ssxkfh09rvsnywhzxhd0xai4h"))))
+        (base32 "1p9khz3bdpdcrnc9p6w522a0ankdchj4nxd3ki41z9401rxmnljq"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ; No target
@@ -302,6 +309,50 @@ Linux kernel.")
     (home-page "https://github.com/tinyalsa/tinyalsa")
     (license (license:non-copyleft "file:///NOTICE"))))
 
+(define-public libgme
+  (package
+    (name "libgme")
+    (version "0.6.3")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://bitbucket.org/mpyne/game-music-emu/"
+                                  "downloads/game-music-emu-" version
+                                  ".tar.xz"))
+              (sha256
+               (base32
+                "07857vdkak306d9s5g6fhmjyxk7vijzjhkmqb15s7ihfxx9lx8xb"))))
+    (build-system cmake-build-system)
+    (arguments
+     '(#:tests? #f))                    ; no check target
+    (home-page "https://bitbucket.org/mpyne/game-music-emu")
+    (synopsis "Video game music file playback library")
+    (description
+     "Game-music-emu is a collection of video game music file emulators that
+support the following formats and systems:
+@table @code
+@item AY
+ZX Spectrum/Asmtrad CPC
+@item GBS
+Nintendo Game Boy
+@item GYM
+Sega Genesis/Mega Drive
+@item HES
+NEC TurboGrafx-16/PC Engine
+@item KSS
+MSX Home Computer/other Z80 systems (doesn't support FM sound)
+@item NSF/NSFE
+Nintendo NES/Famicom (with VRC 6, Namco 106, and FME-7 sound)
+@item SAP
+Atari systems using POKEY sound chip
+@item SPC
+Super Nintendo/Super Famicom
+@item VGM/VGZ
+Sega Master System/Mark III, Sega Genesis/Mega Drive, BBC Micro
+@end table")
+    (license (list license:lgpl2.1+
+                   ;; demo and player directories are under the Expat license
+                   license:expat))))
+
 (define-public libopenmpt
   (package
     (name "libopenmpt")
@@ -328,9 +379,7 @@ Linux kernel.")
                (for-each delete-file (find-files lib "\\.a$"))
                #t))))))
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list doxygen perl pkg-config))
     (inputs
      `(("alsa" ,alsa-lib)
        ("flac" ,flac)
@@ -367,12 +416,11 @@ library.  It is based on the player code of the Open ModPlug Tracker project.")
          "libofa-ftbfs-2.diff"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("curl" ,curl)
-       ("expat" ,expat)))
+     (list curl expat))
     (propagated-inputs
-     `(("fftw" ,fftw)))
+     (list fftw))
     (synopsis "Open Fingerprint Architecture")
     (description "LibOFA is an audio fingerprint library, created and provided
 by MusicIP.")
@@ -387,16 +435,13 @@ by MusicIP.")
      (origin
        (method url-fetch)
        (uri
-        (string-append "https://sourceforge.net/projects/faac/files/faac-src/"
-                       "faac-1.30/faac-1_30.tar.gz/download"))
+        (string-append "mirror://sourceforge/faac/faac-src"
+                       "/faac-" version "/faac-1_30.tar.gz"))
        (sha256
         (base32 "1lmj0dib3mjp84jhxc5ddvydkzzhb0gfrdh3ikcidjlcb378ghxd"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (synopsis "Freeware Advanced Audio Coder")
     (description "FAAC is an MPEG-4 and MPEG-2 AAC encoder.")
     (home-page "https://www.audiocoding.com/faac.html")
@@ -423,9 +468,9 @@ by MusicIP.")
     (arguments
      `(#:tests? #f))       ; XXX: LibTiMidity could not be initialised
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("ao" ,ao)))
+     (list ao))
     (synopsis "MIDI to WAVE converter library")
     (description "LibTiMidity is a MIDI to WAVE converter library that uses
 Gravis Ultrasound-compatible patch files to generate digital audio data from
@@ -490,18 +535,17 @@ implementation of Adaptive Multi Rate Narrowband and Wideband
                 "056dn6b9c5nsw2jdww7z1kxrjqqfvxjzxhsd5x9gi4wkwyiv21nz"))))
     (build-system gnu-build-system)
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ;; We cannot use zita-alsa-pcmi (the successor of clalsadrv) due to
-       ;; license incompatibility.
-       ("clalsadrv" ,clalsadrv)
-       ("fftw" ,fftw)
-       ("jack" ,jack-1)
-       ("ladspa" ,ladspa)
-       ("liblo" ,liblo)
-       ("qtbase" ,qtbase-5)))
+     (list alsa-lib
+           ;; We cannot use zita-alsa-pcmi (the successor of clalsadrv) due to
+           ;; license incompatibility.
+           clalsadrv
+           fftw
+           jack-1
+           ladspa
+           liblo
+           qtbase-5))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list pkg-config qttools))
     (home-page "http://alsamodular.sourceforge.net/")
     (synopsis "Realtime modular synthesizer and effect processor")
     (description
@@ -536,13 +580,9 @@ Filter) modules follow the convention of 1V / Octave.")
         "--enable-avcodec")
        #:python ,python-2))
     (inputs
-     `(("jack" ,jack-1)
-       ("libsndfile" ,libsndfile)
-       ("libsamplerate" ,libsamplerate)
-       ("fftwf" ,fftwf)
-       ("ffmpeg" ,ffmpeg))) ; for libavcodec
+     (list jack-1 libsndfile libsamplerate fftwf ffmpeg)) ; for libavcodec
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://aubio.org/")
     (synopsis "Library for audio labelling")
     (description
@@ -571,7 +611,7 @@ streams from live audio.")
 (define-public ardour
   (package
     (name "ardour")
-    (version "6.8")
+    (version "6.9")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -589,7 +629,7 @@ namespace ARDOUR { const char* revision = \"" version "\" ; const char* date = \
                     #t)))
               (sha256
                (base32
-                "16x7bkzbrk0rgywq5vrkhf2z3jj08jw1bvaq9vwlf2b4h4sd7i4s"))
+                "0vlcbd70y0an881zv87kc3akmaiz4w7whsy3yaiiqqjww35jg1mm"))
               (file-name (string-append name "-" version))))
     (build-system waf-build-system)
     (arguments
@@ -626,48 +666,48 @@ namespace ARDOUR { const char* revision = \"" version "\" ; const char* date = \
              #t)))
        #:test-target "test"))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("atkmm" ,atkmm)
-       ("aubio" ,aubio)
-       ("boost" ,boost)
-       ("cairomm" ,cairomm)
-       ("curl" ,curl)
-       ("dbus" ,dbus)
-       ("eudev" ,eudev)
-       ("fftw" ,fftw)
-       ("fftwf" ,fftwf)
-       ("flac" ,flac)
-       ("glibmm" ,glibmm)
-       ("gtkmm" ,gtkmm-2)
-       ("jack" ,jack-1)
-       ("libarchive" ,libarchive)
-       ("libart-lgpl" ,libart-lgpl)
-       ("libgnomecanvasmm" ,libgnomecanvasmm)
-       ("liblo" ,liblo)
-       ("libogg" ,libogg)
-       ("libsamplerate" ,libsamplerate)
-       ("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)
-       ("vamp" ,vamp)))
+     (list alsa-lib
+           atkmm
+           aubio
+           boost
+           cairomm
+           curl
+           dbus
+           eudev
+           fftw
+           fftwf
+           flac
+           glibmm
+           gtkmm-2
+           jack-1
+           libarchive
+           libart-lgpl
+           libgnomecanvasmm
+           liblo
+           libogg
+           libsamplerate
+           libsndfile
+           libusb
+           libvorbis
+           libwebsockets
+           libxml2
+           lilv
+           lrdf
+           lv2
+           openssl ; Required by libwebsockets.
+           pangomm
+           python-rdflib
+           pulseaudio
+           readline
+           redland
+           rubberband
+           serd
+           sord
+           soundtouch
+           sratom
+           suil
+           taglib
+           vamp))
     (native-inputs
      `(("cppunit" ,cppunit)
        ("gettext" ,gettext-minimal)
@@ -685,7 +725,7 @@ engineers, musicians, soundtrack editors and composers.")
 (define-public audacity
   (package
     (name "audacity")
-    (version "2.4.2")
+    (version "3.1.3")
     (source
      (origin
        (method git-fetch)
@@ -695,9 +735,7 @@ engineers, musicians, soundtrack editors and composers.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0lklcvqkxrr2gkb9gh3422iadzl2rv9v0a8s76rwq43lj2im7546"))
-       (patches (search-patches "audacity-build-with-system-portaudio.patch"
-                                "audacity-add-include.patch"))
+         "1689q9apbjf9nnda62shb8j7hm4hxd47mhk4l5h3c728mjjkilmi"))
        (modules '((guix build utils)))
        (snippet
         ;; Remove bundled libraries.
@@ -705,13 +743,10 @@ engineers, musicians, soundtrack editors and composers.")
            (for-each
             (lambda (dir)
               (delete-file-recursively (string-append "lib-src/" dir)))
-            '("expat" "ffmpeg" "lame" "libflac" "libid3tag" "libmad" "libogg"
-              "libsndfile" "libsoxr" "libvamp" "libvorbis" "lv2"
-              "portmidi" "soundtouch" "twolame"
+            '("libsoxr" "libvamp" "lv2" "soundtouch" "sqlite" "twolame"
               ;; FIXME: these libraries have not been packaged yet:
               ;; "libnyquist"
               ;; "libscorealign"
-              ;; "libwidgetextra"
               ;; "portburn"
               ;; "portsmf"
               ;; "portmixer"
@@ -723,27 +758,31 @@ engineers, musicians, soundtrack editors and composers.")
            #t))))
     (build-system cmake-build-system)
     (inputs
-     `(("wxwidgets" ,wxwidgets)
-       ("gtk+" ,gtk+)
-       ("alsa-lib" ,alsa-lib)
-       ("jack" ,jack-1)
-       ("expat" ,expat)
-       ("ffmpeg" ,ffmpeg)
-       ("lame" ,lame)
-       ("flac" ,flac)
-       ("libid3tag" ,libid3tag)
-       ("libmad" ,libmad)
-       ;;("libsbsms" ,libsbsms)         ;bundled version is modified
-       ("libsndfile" ,libsndfile)
-       ("soundtouch" ,soundtouch)
-       ("soxr" ,soxr)                   ;replaces libsamplerate
-       ("twolame" ,twolame)
-       ("vamp" ,vamp)
-       ("libvorbis" ,libvorbis)
-       ("lv2" ,lv2)
-       ("lilv" ,lilv)                   ;for lv2
-       ("suil" ,suil)                   ;for lv2
-       ("portmidi" ,portmidi)))
+     (list wxwidgets-3.1
+           gtk+
+           alsa-lib
+           jack-1
+           expat
+           ffmpeg
+           lame
+           linux-libre-headers
+           flac
+           libid3tag
+           libjpeg-turbo
+           libmad
+           ;;("libsbsms" ,libsbsms)         ;bundled version is modified
+           libsndfile
+           soundtouch
+           soxr ;replaces libsamplerate
+           sqlite
+           twolame
+           vamp
+           libvorbis
+           lv2
+           lilv ;for lv2
+           suil ;for lv2
+           portaudio
+           portmidi))
     (native-inputs
      `(("autoconf" ,autoconf)
        ("automake" ,automake)
@@ -755,10 +794,12 @@ engineers, musicians, soundtrack editors and composers.")
     (arguments
      `(#:configure-flags
        (list
-        ;; Loading FFmpeg dynamically is problematic.
-        "-Daudacity_use_ffmpeg=linked"
-        "-Daudacity_use_lame=system"
-        "-Daudacity_use_portsmf=system")
+        "-Daudacity_conan_enabled=off"
+        "-Daudacity_lib_preference=system"
+        ;; TODO: enable this flag once we've packaged all dependencies
+        ;; "-Daudacity_obey_system_dependencies=on"
+        ;; disable crash reports, updates, ..., anything that phones home
+        "-Daudacity_has_networking=off")
        #:imported-modules ((guix build glib-or-gtk-build-system)
                            ,@%cmake-build-system-modules)
        #:modules
@@ -767,27 +808,42 @@ engineers, musicians, soundtrack editors and composers.")
         ((guix build glib-or-gtk-build-system) #:prefix glib-or-gtk:))
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'fix-cmake-rpath
+           (lambda* (#:key outputs #:allow-other-keys)
+             (substitute* "CMakeLists.txt"
+               (("\\$ORIGIN/\\.\\./\\$\\{_PKGLIB\\}")
+                (string-append (assoc-ref outputs "out") "/lib/audacity"))
+               (("CMAKE_BUILD_WITH_INSTALL_RPATH [A-Z]*")
+                "CMAKE_BUILD_WITH_INSTALL_RPATH TRUE")
+               (("CMAKE_INSTALL_RPATH_USE_LINK_PATH [A-Z]*")
+                "CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE"))
+             (substitute* "src/CMakeLists.txt"
+               (("-Wl,--disable-new-dtags") "-Wl,--enable-new-dtags"))))
          (add-after 'unpack 'comment-out-revision-ident
            (lambda _
+             (substitute* "src/CMakeLists.txt"
+               (("file\\( TOUCH \".*RevisionIdent\\.h\" \\)" directive)
+                (string-append "# " directive)))
              (substitute* "src/AboutDialog.cpp"
                (("(.*RevisionIdent\\.h.*)" include-line)
                 (string-append "// " include-line)))))
          (add-after 'unpack 'use-upstream-headers
            (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* '("src/NoteTrack.cpp"
-                            "src/AudioIO.cpp"
-                            "src/AudioIO.h"
-                            "src/AudioIOBase.cpp")
-               (("../lib-src/portmidi/pm_common/portmidi.h") "portmidi.h")
-               (("../lib-src/portmidi/porttime/porttime.h") "porttime.h"))
-             (substitute* "src/prefs/MidiIOPrefs.cpp"
-               (("../../lib-src/portmidi/pm_common/portmidi.h") "portmidi.h"))))
+             (substitute* '("libraries/lib-files/FileNames.cpp")
+               (("\"/usr/include/linux/magic.h\"") "<linux/magic.h>"))))
          (add-after 'wrap-program 'glib-or-gtk-wrap
            (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap)))
-         ;; The test suite is not "well exercised" according to the developers,
-         ;; and fails with various errors.  See
-         ;; <http://sourceforge.net/p/audacity/mailman/message/33524292/>.
-         #:tests? #f))
+       ;; The test suite is not "well exercised" according to the developers,
+       ;; and fails with various errors.  See
+       ;; <http://sourceforge.net/p/audacity/mailman/message/33524292/>.
+       #:tests? #f))
+    (native-search-paths
+     (list (search-path-specification
+            (variable "AUDACITY_MODULES_PATH")
+            (files '("lib/audacity/modules")))
+           (search-path-specification
+            (variable "AUDACITY_PATH")
+            (files '("share/audacity")))))
     (home-page "https://www.audacityteam.org/")
     (synopsis "Software for recording and editing sounds")
     (description
@@ -844,7 +900,7 @@ tools.")
                                       "CVE-2017-6831" "CVE-2017-6833"))))
     (build-system gnu-build-system)
     (inputs
-     `(("alsa-lib" ,alsa-lib)))
+     (list alsa-lib))
     (home-page "https://audiofile.68k.org/")
     (synopsis "Library to handle various audio file formats")
     (description "This is an open-source version of SGI's audiofile library.
@@ -885,7 +941,7 @@ G.711 mu-law and A-law.")
                 (string-append (assoc-ref outputs "out") "/lib/ladspa")))
              #t)))))
     (inputs
-     `(("ladspa" ,ladspa)))
+     (list ladspa))
     (home-page "http://tombaran.info/autotalent.html")
     (synopsis "Pitch-correction LADSPA audio plugin")
     (description
@@ -924,12 +980,9 @@ formant warp.")
                (utime "azr3.1" early-1980 early-1980))
              #t)))))
     (inputs
-     `(("gtkmm" ,gtkmm-2)
-       ("lvtk" ,lvtk)
-       ("jack" ,jack-1)
-       ("lash" ,lash)))
+     (list gtkmm-2 lvtk jack-1 lash))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://ll-plugins.nongnu.org/azr3/")
     (synopsis "Tonewheel organ synthesizer")
     (description
@@ -953,18 +1006,18 @@ plugins are provided.")
                 "17x4hylgq4dn9qycsdacfxy64f5cv57n2qgkvsdp524gnqzw4az3"))))
     (build-system gnu-build-system)
     (inputs
-     `(("fluidsynth" ,fluidsynth)
-       ("expat" ,expat)
-       ("glib" ,glib)
-       ("gtk" ,gtk+-2)
-       ("cairo" ,cairo)
-       ("lash" ,lash)
-       ("jack" ,jack-1)
-       ("lv2" ,lv2)
-       ("ladspa" ,ladspa)
-       ("fftw" ,fftw)))
+     (list fluidsynth
+           expat
+           glib
+           gtk+-2
+           cairo
+           lash
+           jack-1
+           lv2
+           ladspa
+           fftw))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (native-search-paths
      (list (search-path-specification
             (variable "LV2_PATH")
@@ -1009,7 +1062,7 @@ tools (analyzer, mono/stereo tools, crossovers).")
                (("/usr/local")(assoc-ref outputs "out")))
              #t)))))
     (inputs
-     `(("lv2" ,lv2)))
+     (list lv2))
     ;; home-page of the original LADSPA version: http://quitte.de/dsp/caps.html
     (home-page "https://github.com/moddevices/caps-lv2")
     (synopsis "LV2 port of the CAPS audio plugin collection")
@@ -1049,13 +1102,9 @@ generators of mostly elementary and occasionally exotic nature.")
                (("_LV2UI_Descriptor") "LV2UI_Descriptor"))
              #t)))))
     (inputs
-     `(("cairo" ,cairo)
-       ("fftwf" ,fftwf)
-       ("lv2" ,lv2)
-       ("ntk" ,ntk)
-       ("zita-resampler" ,zita-resampler)))
+     (list cairo fftwf lv2 ntk zita-resampler))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://ssj71.github.io/infamousPlugins")
     (synopsis "LV2 plugins for live use")
     (description
@@ -1081,16 +1130,16 @@ envelope follower, distortion effects, tape effects and more.")
     (arguments
      '(#:tests? #f))                    ; no included tests
     (inputs
-     `(("boost" ,boost)
-       ("libvorbis" ,libvorbis)
-       ("soxr" ,soxr)
-       ("alsa-lib" ,alsa-lib)
-       ("avahi" ,avahi)
-       ("pulseaudio" ,pulseaudio)
-       ("flac" ,flac)
-       ("opus" ,opus)))
+     (list boost
+           libvorbis
+           soxr
+           alsa-lib
+           avahi
+           pulseaudio
+           flac
+           opus))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/badaix/snapcast")
     (synopsis "Synchronous multiroom audio player")
     (description
@@ -1112,16 +1161,15 @@ synchronized with the server to play synced audio.")
                (base32
                 "1c98z2xxz9pgcb4dg99gz8qrylh5cnag0j18a52d88ifsy24isvq"))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("gettext" ,gettext-minimal) ;for autopoint
-       ("libtool" ,libtool)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)
-       ("which" ,which)))
+     (list autoconf
+           automake
+           gettext-minimal ;for autopoint
+           libtool
+           perl
+           pkg-config
+           which))
     (inputs
-     `(("fftwf" ,fftwf)
-       ("perl-xml-parser" ,perl-xml-parser)))
+     (list fftwf perl-xml-parser))
     (build-system gnu-build-system)
     (home-page "http://plugin.org.uk")
     (synopsis "The SWH Plugins package for the LADSPA plugin system")
@@ -1159,11 +1207,9 @@ synchronized with the server to play synced audio.")
                (("install:") "install: install-system"))
              #t)))))
     (inputs
-     `(("lv2" ,lv2)
-       ("fftwf" ,fftwf)))
+     (list lv2 fftwf))
     (native-inputs
-     `(("libxslt" ,libxslt)
-       ("pkg-config" ,pkg-config)))
+     (list libxslt pkg-config))
     (home-page "http://plugin.org.uk")
     (synopsis "SWH plugins in LV2 format")
     (description
@@ -1173,6 +1219,38 @@ flanger), ringmodulator, distortion, filters, pitchshift, oscillators,
 emulation (valve, tape), bit fiddling (decimator, pointer-cast), etc.")
     (license license:gpl3+)))
 
+(define-public libdjinterop
+  (package
+    (name "libdjinterop")
+    (version "0.16.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/xsco/libdjinterop")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "16nrqpr90vb9ggmp9j73m0hspd7pmfdhh0g6iyp8vd7kx7g17qnk"))))
+    (build-system meson-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         ;; crate_test writes a database file to the source tree.
+         (add-after 'unpack 'make-git-checkout-writable
+           (lambda _
+             (for-each make-file-writable (find-files ".")))))))
+    (native-inputs
+     (list boost pkg-config))
+    (inputs
+     (list sqlite zlib))
+    (home-page "https://github.com/xsco/libdjinterop")
+    (synopsis "C++ library for access to DJ record libraries")
+    (description
+     "@code{libdjinterop} is a C++ library that allows access to database
+formats used to store information about DJ record libraries.")
+    (license license:lgpl3+)))
+
 (define-public tao
   (package
     (name "tao")
@@ -1190,10 +1268,8 @@ emulation (valve, tape), bit fiddling (decimator, pointer-cast), etc.")
                                "tao-fix-parser-types.patch"))
               (modules '((guix build utils)))
               (snippet
-               '(begin
-                  (substitute* "configure"
-                    (("SHELL=/bin/sh") ""))
-                  #t))))
+               '(substitute* "configure"
+                  (("SHELL=/bin/sh") "")))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("TAO_RELEASE=-beta")
@@ -1209,8 +1285,7 @@ emulation (valve, tape), bit fiddling (decimator, pointer-cast), etc.")
                 (string-append (which "sed") " -f $distdir/"))
                (("distdir=.*")
                 (string-append "distdir="
-                               (assoc-ref outputs "out") "/share/tao")))
-             #t))
+                               (assoc-ref outputs "out") "/share/tao")))))
          (add-after 'install 'install-extra-files
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -1221,18 +1296,17 @@ emulation (valve, tape), bit fiddling (decimator, pointer-cast), etc.")
                (install-file "user-scripts/error.parse" share)
                (copy-recursively "examples" (string-append share "examples"))
                (for-each (lambda (file) (install-file file inc))
-                         (find-files "include" "\\.h"))
-               #t))))))
+                         (find-files "include" "\\.h"))))))))
     (inputs
-     `(("audiofile" ,audiofile)
-       ("libxi" ,libxi)
-       ("libxmu" ,libxmu)
-       ("mesa" ,mesa)
-       ("glut" ,freeglut)
-       ("flex" ,flex)
-       ("bison" ,bison)
-       ("sed" ,sed)
-       ("grep" ,grep)))
+     (list audiofile
+           libxi
+           libxmu
+           mesa
+           freeglut
+           flex
+           bison
+           sed
+           grep))
     (home-page "http://taopm.sourceforge.net/")
     (synopsis "Sound Synthesis with Physical Models")
     (description "Tao is a software package for sound synthesis using physical
@@ -1243,6 +1317,37 @@ playing instruments and a C++ API for those who would like to use it as an
 object library.")
     (license license:gpl2+)))
 
+(define-public tao-synth
+  (let ((commit "f3aedd81efbc775574e591081b57ae1c08427064")
+        (revision "1"))
+    (package
+      (name "tao-synth")
+      (version (git-version "0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/lucasw/tao_synth")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1jds2l3cb96b02jxd7lmrjjl9s7mylnrvg6fpw0j8c141bk8vyg3"))))
+      (build-system cmake-build-system)
+      (arguments (list #:tests? #false))  ;there are no tests
+      (inputs
+       (list glfw freeglut))
+      (native-inputs
+       (list gcc-7))
+      (home-page "https://github.com/lucasw/tao_synth")
+      (synopsis "Sound synthesis with physical models")
+      (description "Tao is a software package for sound synthesis using physical
+models.  It provides a virtual acoustic material constructed from masses and
+springs which can be used as the basis for building quite complex virtual
+musical instruments.  Tao comes with a synthesis language for creating and
+playing instruments and a C++ API for those who would like to use it as an
+object library.")
+      (license license:lgpl2.0+))))
+
 (define-public csound
   (package
     (name "csound")
@@ -1258,18 +1363,15 @@ object library.")
         (base32 "1sr9knfhbm2m0wpkjq2l5n471vnl51wy4p6j4m95zqybimzb4s2j"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)
-       ("gettext" ,gettext-minimal)
-       ("zlib" ,zlib)))
+     (list bison flex gettext-minimal zlib))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("boost" ,boost)
-       ("jack" ,jack-1)
-       ("ladspa" ,ladspa)
-       ("liblo" ,liblo)
-       ("libsndfile" ,libsndfile)
-       ("pulseaudio" ,pulseaudio)))
+     (list alsa-lib
+           boost
+           jack-1
+           ladspa
+           liblo
+           libsndfile
+           pulseaudio))
     (home-page "https://csound.com/")
     (synopsis "Sound and music computing system")
     (description
@@ -1343,8 +1445,7 @@ language and software synthesizer.")
          ;; no configure script
          (delete 'configure))))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("fftw" ,fftw)))
+     (list alsa-lib fftw))
     (home-page "https://kokkinizita.linuxaudio.org")
     (synopsis "C++ wrapper around the ALSA API")
     (description
@@ -1668,7 +1769,7 @@ follower.")
 (define-public fluidsynth
   (package
     (name "fluidsynth")
-    (version "2.1.8")
+    (version "2.2.4")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1677,7 +1778,7 @@ follower.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0r944ndn138ak9s3ivgd1wgkwkh6zp7jjnxd30hryczc6kbhkpmr"))))
+                "1061rdj69503spkd8vmfl3fqvyg4l41k5xcc4gw7niy31hnpnjmn"))))
     (build-system cmake-build-system)
     (arguments
      '(#:tests? #f                      ; no check target
@@ -1688,18 +1789,19 @@ follower.")
              ;; Install libraries to /lib, not /lib64.
              (substitute* "CMakeLists.txt"
                (("LIB_SUFFIX \\$\\{_init_lib_suffix\\}")
-                "LIB_SUFFIX \"\""))
-             #t)))))
+                "LIB_SUFFIX \"\"")))))))
     (inputs
-     `(("libsndfile" ,libsndfile)
-       ("alsa-lib" ,alsa-lib)
-       ("jack" ,jack-1)
-       ("ladspa" ,ladspa)
-       ("lash" ,lash)
-       ("readline" ,readline)
-       ("glib" ,glib)))
+     (list ladspa))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
+    (propagated-inputs
+     ;; In Libs.private of fluidsynth.pc.
+     (list alsa-lib
+           glib
+           jack-1
+           lash
+           libsndfile
+           readline))
     (home-page "https://www.fluidsynth.org/")
     (synopsis "SoundFont synthesizer")
     (description
@@ -1709,22 +1811,6 @@ device.  It is the software analogue of a MIDI synthesizer.  FluidSynth can
 also play midifiles using a Soundfont.")
     (license license:lgpl2.1+)))
 
-;; gzdoom@3.3.0 and lmms@1.1.3 requires this version.  Remove once no longer
-;; needed.
-(define-public fluidsynth-1
-  (package
-    (inherit fluidsynth)
-    (version "1.1.11")
-    (source (origin
-              (inherit (package-source fluidsynth))
-              (uri (git-reference
-                    (url "https://github.com/FluidSynth/fluidsynth")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name "fluidsynth" version))
-              (sha256
-               (base32
-                "0n75jq3xgq46hfmjkaaxz3gic77shs4fzajq40c8gk043i84xbdh"))))))
-
 (define-public faad2
   (package
     (name "faad2")
@@ -1779,7 +1865,7 @@ also play midifiles using a Soundfont.")
                        (find-files "architecture/max-msp" ".*"))
              #t)))))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://faust.grame.fr/")
     (synopsis "Signal processing language")
     (description
@@ -1811,11 +1897,7 @@ also play midifiles using a Soundfont.")
        ("ctags" ,emacs-minimal)  ; for ctags
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("libsndfile" ,libsndfile)
-       ("libmicrohttpd" ,libmicrohttpd)
-       ("ncurses" ,ncurses)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))))
+     (list libsndfile libmicrohttpd ncurses openssl zlib))))
 
 (define-public freepats
   (package
@@ -1847,8 +1929,7 @@ also play midifiles using a Soundfont.")
                      (copy-recursively "." out)
                      #t))))
     (native-inputs
-     `(("tar" ,tar)
-       ("bzip2" ,bzip2)))
+     (list tar bzip2))
     (home-page "http://freepats.zenvoid.org")
     (synopsis "GUS compatible patches for MIDI players")
     (description
@@ -1860,7 +1941,7 @@ patches that can be used with softsynths such as Timidity and WildMidi.")
 (define-public guitarix
   (package
     (name "guitarix")
-    (version "0.41.0")
+    (version "0.43.1")
     (source (origin
              (method url-fetch)
              (uri (string-append
@@ -1868,7 +1949,7 @@ patches that can be used with softsynths such as Timidity and WildMidi.")
                    version ".tar.xz"))
              (sha256
               (base32
-               "0qsfbyrrpb3bbdyq68k28mjql7kglxh8nqcw9jvja28x6x9ik5a0"))))
+               "1bsjlfd7x09p3iiljilyfbns6hpqn9cgp6psl4ccd6i1lwascfrm"))))
     (build-system waf-build-system)
     (arguments
      `(#:tests? #f ; no "check" target
@@ -1877,21 +1958,21 @@ patches that can be used with softsynths such as Timidity and WildMidi.")
         ;; Add the output lib directory to the RUNPATH.
         (string-append "--ldflags=-Wl,-rpath=" %output "/lib"))))
     (inputs
-     `(("libsndfile" ,libsndfile)
-       ("boost" ,boost)
-       ("curl" ,curl)
-       ("avahi" ,avahi)
-       ("eigen" ,eigen)
-       ("lv2" ,lv2)
-       ("lilv" ,lilv)
-       ("ladspa" ,ladspa)
-       ("jack" ,jack-1)
-       ("gtkmm" ,gtkmm)
-       ("gtk+" ,gtk+)
-       ("fftwf" ,fftwf)
-       ("lrdf" ,lrdf)
-       ("zita-resampler" ,zita-resampler)
-       ("zita-convolver" ,zita-convolver)))
+     (list libsndfile
+           boost
+           curl
+           avahi
+           eigen
+           lv2
+           lilv
+           ladspa
+           jack-1
+           gtkmm-3
+           gtk+
+           fftwf
+           lrdf
+           zita-resampler
+           zita-convolver))
     (native-inputs
      `(("gperf" ,gperf)
        ("faust" ,faust)
@@ -1943,21 +2024,21 @@ auto-wah.")
                   #t))))
     (build-system gnu-build-system)
     (inputs
-     `(("alsa-utils" ,alsa-utils)
-       ("fltk" ,fltk)
-       ("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxfixes" ,libxfixes)
-       ("libxft" ,libxft)
-       ("libxrender" ,libxrender)
-       ("libxpm" ,libxpm)
-       ("fontconfig" ,fontconfig)
-       ("freetype" ,freetype)
-       ("jack" ,jack-1)
-       ("alsa-lib" ,alsa-lib)
-       ("libsndfile" ,libsndfile)
-       ("libsamplerate" ,libsamplerate)
-       ("zlib" ,zlib)))
+     (list alsa-utils
+           fltk
+           libx11
+           libxext
+           libxfixes
+           libxft
+           libxrender
+           libxpm
+           fontconfig
+           freetype
+           jack-1
+           alsa-lib
+           libsndfile
+           libsamplerate
+           zlib))
     (home-page "http://rakarrack.sourceforge.net/")
     (synopsis "Audio effects processor")
     (description
@@ -2002,14 +2083,14 @@ well suited to all musical instruments and vocals.")
                (("_LV2UI_Descriptor") "LV2UI_Descriptor"))
              #t)))))
     (inputs
-     `(("libsndfile" ,libsndfile)
-       ("libsamplerate" ,libsamplerate)
-       ("lv2" ,lv2)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+-2)
-       ("zita-convolver" ,zita-convolver)))
+     (list libsndfile
+           libsamplerate
+           lv2
+           glib
+           gtk+-2
+           zita-convolver))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (native-search-paths
      (list (search-path-specification
             (variable "LV2_PATH")
@@ -2046,15 +2127,14 @@ especially for creating reverb effects.  It supports impulse responses with 1,
                         (("libnn=lib64") "libnn=lib"))
                       #t)))))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("readline" ,readline)))
+     (list alsa-lib readline))
     ;; uuid.h is included in the JACK type headers
     ;; db.h is included in the libjack metadata headers
     (propagated-inputs
      `(("libuuid" ,util-linux "lib")
        ("bdb" ,bdb)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://jackaudio.org/")
     (synopsis "JACK audio connection kit")
     (description
@@ -2108,34 +2188,34 @@ synchronous execution of all clients, and low latency operation.")
            (lambda* (#:key inputs outputs #:allow-other-keys)
              ;; Make sure 'jack_control' runs with the correct PYTHONPATH.
              (let* ((out (assoc-ref outputs "out"))
-                    (path (getenv "PYTHONPATH")))
+                    (path (getenv "GUIX_PYTHONPATH")))
                (wrap-program (string-append out "/bin/jack_control")
-                 `("PYTHONPATH" ":" prefix (,path))))
+                 `("GUIX_PYTHONPATH" ":" prefix (,path))))
              #t)))))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("dbus" ,dbus)
-       ("expat" ,expat)
-       ("libsamplerate" ,libsamplerate)
-       ("opus" ,opus)
-       ("python-dbus" ,python-dbus)
-       ("readline" ,readline)))
+     (list alsa-lib
+           dbus
+           expat
+           libsamplerate
+           opus
+           python-dbus
+           readline))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     ;; Most files are under GPLv2+, but some headers are under LGPLv2.1+
     (license (list license:gpl2+ license:lgpl2.1+))))
 
 (define-public jalv
   (package
     (name "jalv")
-    (version "1.6.4")
+    (version "1.6.6")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://download.drobilla.net/jalv-"
                                   version ".tar.bz2"))
               (sha256
                (base32
-                "1wwfn7yzbs37s2rdlfjgks63svd5g14yyzd2gdl7h0z12qncwsy2"))))
+                "05lycfq0f06zjp5xqvzjz9hx9kmqx72yng1lghh76hv63dw43lcj"))))
     (build-system waf-build-system)
     (arguments
      `(#:tests? #f                      ; no check target
@@ -2150,7 +2230,7 @@ synchronous execution of all clients, and low latency operation.")
        ("qtbase" ,qtbase-5)
        ("jack" ,jack-1)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://drobilla.net/software/jalv/")
     (synopsis "Simple LV2 host for JACK")
     (description
@@ -2246,11 +2326,9 @@ to be plugged into a wide range of audio synthesis and recording packages.")
     ;; According to pkg-config, packages depending on lash also need to have
     ;; at least the following packages declared as inputs.
     (propagated-inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("dbus" ,dbus)
-       ("libxml2" ,libxml2)))
+     (list alsa-lib dbus libxml2))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.nongnu.org/lash/")
     (synopsis "Audio application session manager")
     (description
@@ -2272,8 +2350,8 @@ connections between them.")
                (base32
                 "1mcc4gjkmphczjybnsrip3gq1f974knzys7x49bv197xk3fn8wdr"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("libsndfile" ,libsndfile)))
+    (native-inputs (list pkg-config))
+    (inputs (list libsndfile))
     (home-page "https://sourceforge.net/projects/bs2b/")
     (synopsis "Bauer stereophonic-to-binaural DSP")
     (description
@@ -2296,9 +2374,8 @@ essential distortions.")
                (base32
                 "1b4aipbj1ba5k99gbc7gmgy14sywyrjd8rpyqj5l905j0mjv8jg2"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("ladspa" ,ladspa)
-              ("libbs2b" ,libbs2b)))
+    (native-inputs (list pkg-config))
+    (inputs (list ladspa libbs2b))
     (home-page "https://sourceforge.net/projects/bs2b/")
     (synopsis "Bauer stereophonic-to-binaural DSP - LADSPA plugin")
     (description "The Bauer stereophonic-to-binaural DSP (bs2b) library and
@@ -2358,11 +2435,9 @@ implementation of the Open Sound Control (@dfn{OSC}) protocol.")
                (rename-file (string-append inc "/RtAudio.h")
                             (string-append inc "/rtaudio/RtAudio.h"))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("jack" ,jack-1)
-       ("pulseaudio" ,pulseaudio)))
+     (list alsa-lib jack-1 pulseaudio))
     (synopsis "Common API for real-time audio I/O")
     (description
      "RtAudio is a set of C++ classes that provides a common API for real-time
@@ -2398,7 +2473,7 @@ compensation, (de)interleaving, and byte-swapping
          "0x7vdsigm7xgvyg3shd3lj113m8zqj2pxmrgdyj66kmnw0qdxgwk"))))
     (build-system python-build-system)
     (inputs
-     `(("portaudio" ,portaudio)))
+     (list portaudio))
     (home-page "https://people.csail.mit.edu/hubert/pyaudio/")
     (synopsis "Bindings for PortAudio v19")
     (description "This package provides bindings for PortAudio v19, the
@@ -2422,9 +2497,9 @@ cross-platform audio input/output stream library.")
     (build-system python-build-system)
     (arguments `(#:tests? #f)) ;no tests
     (native-inputs
-     `(("python-cython" ,python-cython)))
+     (list python-cython))
     (inputs
-     `(("liblo" ,liblo)))
+     (list liblo))
     (home-page "http://das.nasophon.de/pyliblo/")
     (synopsis "Python bindings for liblo")
     (description
@@ -2450,11 +2525,9 @@ included are the command line utilities @code{send_osc} and @code{dump_osc}.")
          "0yqhrfz7xkvqrwdxdx2ydy4h467sk7z3gf984y1x2cq7cm1gy329"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-cffi" ,python-cffi)
-       ("python-numpy" ,python-numpy)
-       ("libsndfile" ,libsndfile)))
+     (list python-cffi python-numpy libsndfile))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (arguments
      `(#:tests? #f ; missing OGG support
        #:phases
@@ -2505,15 +2578,15 @@ files.")
             "12wf17abn3psbsg2r2lk0xdnk8n5cd5rrvjlpxjnjfhd09n7qqgm"))))
     (build-system python-build-system)
     (propagated-inputs
-      `(("python-cffi" ,python-cffi)
-        ("python-cython" ,python-cython)
-        ("python-numpy" ,python-numpy)
-        ("python-progressbar2" ,python-progressbar2)
-        ("python-pycparser" ,python-pycparser)
-        ("python-python3-midi" ,python-python3-midi)
-        ("python-soundfile" ,python-soundfile)))
+      (list python-cffi
+            python-cython
+            python-numpy
+            python-progressbar2
+            python-pycparser
+            python-python3-midi
+            python-soundfile))
     (native-inputs
-     `(("libsndfile" ,libsndfile)))
+     (list libsndfile))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -2521,7 +2594,7 @@ files.")
            (lambda _
              (substitute* "requirements.txt" (("==") ">=")))))))
     (home-page "https://github.com/NFJones/audio-to-midi")
-    (synopsis "Convert audio to multichannel MIDI.")
+    (synopsis "Convert audio to multichannel MIDI")
     (description "@command{audio-to-midi} converts audio files to multichannel
 MIDI files.  It accomplishes this by performing FFTs on all channels of the
 audio data at user-specified time steps.  It then separates the resulting
@@ -2533,14 +2606,14 @@ frequencies.  This data is then formatted to MIDI and written to disk.")
 (define-public lilv
   (package
     (name "lilv")
-    (version "0.24.10")
+    (version "0.24.12")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://download.drobilla.net/lilv-"
                                  version ".tar.bz2"))
              (sha256
               (base32
-               "1565zy0yz46cf2f25pi46msdnzkj6bbhml9gfigdpjnsdlyskfyi"))))
+               "0qchfsyrsrp2pdpd59025kllycr04ddpzd03ha1iz70ci687g8r6"))))
     (build-system waf-build-system)
     (arguments
      `(#:tests? #f                      ; no check target
@@ -2550,24 +2623,18 @@ frequencies.  This data is then formatted to MIDI and written to disk.")
           (lambda* (#:key outputs #:allow-other-keys)
             (setenv "LDFLAGS"
                     (string-append "-Wl,-rpath="
-                                   (assoc-ref outputs "out") "/lib"))
-            #t))
+                                   (assoc-ref outputs "out") "/lib"))))
          (add-after 'unpack 'full-store-path-to-shared-library
            (lambda* (#:key outputs #:allow-other-keys)
              (with-directory-excursion "bindings/python"
                (substitute* "lilv.py"
                  (("liblilv-0.so") (string-append (assoc-ref outputs "out")
-                                                  "/lib/liblilv-0.so"))))
-             #t)))))
+                                                  "/lib/liblilv-0.so")))))))))
     ;; Required by lilv-0.pc.
     (propagated-inputs
-     `(("lv2" ,lv2)
-       ("serd" ,serd)
-       ("sord" ,sord)
-       ("sratom" ,sratom)))
+     (list lv2 serd sord sratom))
     (native-inputs
-     `(("python" ,python)
-       ("pkg-config" ,pkg-config)))
+     (list python pkg-config))
     (home-page "https://drobilla.net/software/lilv")
     (synopsis "Library to simplify use of LV2 plugins in applications")
     (description
@@ -2579,23 +2646,23 @@ significantly faster and have minimal dependencies.")
 (define-public lv2
   (package
     (name "lv2")
-    (version "1.18.0")
+    (version "1.18.2")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://lv2plug.in/spec/lv2-"
                                  version ".tar.bz2"))
              (sha256
               (base32
-               "0gs7401xz23q9vajqr31aa2db8dvssgyh5zrvr4ipa6wig7yb8wh"))))
+               "0pp0n9x1rg8d4fw853z9cvfifjdi4bl85yjxxddqa1acfjy1z2af"))))
     (build-system waf-build-system)
     (arguments
      `(#:tests? #f                      ; no check target
        #:configure-flags '("--no-plugins")))
     (inputs
      ;; Leaving off cairo and gtk+-2.0 which are needed for example plugins
-     `(("libsndfile" ,libsndfile)))
+     (list libsndfile))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://lv2plug.in/")
     (synopsis "LV2 audio plugin specification")
     (description
@@ -2626,10 +2693,9 @@ software.")
        #:tests? #f ; no check target
        #:phases (modify-phases %standard-phases (delete 'configure))))
     (inputs
-     `(("lv2" ,lv2)
-       ("lvtk" ,lvtk)))
+     (list lv2 lvtk))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (native-search-paths
      (list (search-path-specification
             (variable "LV2_PATH")
@@ -2674,11 +2740,9 @@ software.")
                             (assoc-ref %build-inputs "boost")
                             "/include"))))
     (inputs
-     `(("boost" ,boost)
-       ("gtkmm" ,gtkmm-2)
-       ("lv2" ,lv2)))
+     (list boost gtkmm-2 lv2))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/lvtk/lvtk")
     (synopsis "C++ libraries for LV2 plugins")
     (description
@@ -2721,8 +2785,7 @@ lv2-c++-tools.")
                               "\")")))
             #t)))))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("pulseaudio" ,pulseaudio)))
+     (list alsa-lib pulseaudio))
     (synopsis "3D audio API")
     (description
      "OpenAL provides capabilities for playing audio in a virtual 3D
@@ -2754,7 +2817,7 @@ buffers, and audio capture.")
     (arguments
      `(#:tests? #f))  ; no check target
     (inputs
-     `(("openal" ,openal)))
+     (list openal))
     (synopsis "Free implementation of OpenAL's ALUT standard")
     (description "freealut is the OpenAL Utility Toolkit.")
     (home-page "https://kcat.strangesoft.net/openal.html")
@@ -2763,7 +2826,7 @@ buffers, and audio capture.")
 (define-public patchage
   (package
     (name "patchage")
-    (version "1.0.2")
+    (version "1.0.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://download.drobilla.net/patchage-"
@@ -2771,22 +2834,21 @@ buffers, and audio capture.")
                                   ".tar.bz2"))
               (sha256
                (base32
-                "0dk3fiac10m83mwss3026yz7ygc47c2iw924cwwnh2fyydc9bsy6"))))
+                "0gbakiw3mikgbvy3pssrmqmn7z5c7kp4vyaxj5rs4jnkscxgw9vw"))))
     (build-system waf-build-system)
     (arguments
-     `(#:tests? #f                      ; no check target
-       #:python ,python-2))
+     `(#:tests? #f))                    ; no check target
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("boost" ,boost)
-       ("jack" ,jack-1)
-       ("ganv" ,ganv)
-       ("glibmm" ,glibmm)
-       ("gtkmm" ,gtkmm-2)
-       ("dbus-glib" ,dbus-glib)))
+     (list alsa-lib
+           boost
+           jack-1
+           ganv
+           glibmm
+           gtkmm-2
+           dbus-glib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
-    (home-page "https://drobilla.net/software/patchage/")
+     (list pkg-config))
+    (home-page "https://drobilla.net/software/patchage.html")
     (synopsis "Modular patch bay for audio and MIDI systems")
     (description
      "Patchage is a modular patch bay for audio and MIDI systems based on JACK
@@ -2809,14 +2871,9 @@ and ALSA.")
     (arguments
      `(#:configure-flags '("--disable-static")))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)
-       ("which" ,which)))
+     (list autoconf automake libtool pkg-config which))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("pulseaudio" ,pulseaudio)))
+     (list alsa-lib pulseaudio))
     (synopsis "Portable C audio library")
     (description
      "The Portable C Audio Library (pcaudiolib) provides a C@tie{}API to
@@ -2829,26 +2886,21 @@ different audio devices such as ALSA or PulseAudio.")
 (define-public qjackctl
   (package
     (name "qjackctl")
-    (version "0.9.4")
+    (version "0.9.6")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/qjackctl/qjackctl/"
                                   version "/qjackctl-" version ".tar.gz"))
               (sha256
                (base32
-                "186rg3j67rac9ds1r7gnrib2d0smgv15cmr5gwb7v83mywcp1gzy"))))
+                "0sqni9ppwadc01fnyqj6lkwy30ql1vccqglv9imd3zdchffjpjir"))))
     (build-system cmake-build-system)
     (arguments
      '(#:tests? #f))                    ; no check target
     (inputs
-     `(("jack" ,jack-1)
-       ("alsa-lib" ,alsa-lib)
-       ("portaudio" ,portaudio)
-       ("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)))
+     (list jack-1 alsa-lib portaudio qtbase-5 qtx11extras))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list pkg-config qttools))
     (home-page "https://qjackctl.sourceforge.io/")
     (synopsis "Jack server control application")
     (description "Control a Jack server.  Allows you to plug various sources
@@ -2878,11 +2930,9 @@ into various outputs and to start, stop and configure jackd")
                      (string-append "PREFIX="
                                     (assoc-ref outputs "out"))))))))
     (native-inputs
-     `(("qtbase" ,qtbase-5))) ; for qmake
+     (list qtbase-5)) ; for qmake
     (inputs
-     `(("jack" ,jack-1)
-       ("libsndfile" ,libsndfile)
-       ("qtbase" ,qtbase-5)))
+     (list jack-1 libsndfile qtbase-5))
     (home-page "https://sourceforge.net/projects/qjackrcd/")
     (synopsis "Stereo audio recorder for JACK")
     (description "QJackRcd is a simple graphical stereo recorder for JACK
@@ -2893,51 +2943,52 @@ background file post-processing.")
 (define-public supercollider
   (package
     (name "supercollider")
-    (version "3.11.2")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/supercollider/supercollider")
-                    (commit (string-append "Version-" version))
-                    ;; for nova-simd, nova-tt, hidapi, TLSF, oscpack
-                    (recursive? #t)))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1gi7nrmjmbnjndqkmhfrkk0jchrzvnhl3f6gp6n5wgdd4mxbgxgw"))
-              (modules '((guix build utils)
-                         (ice-9 ftw)))
-              (snippet
-               ;; The build system doesn't allow us to unbundle the following
-               ;; libraries.  hidapi is also heavily patched and upstream not
-               ;; actively maintained.
-               '(let ((keep-dirs '("nova-simd" "nova-tt" "hidapi"
-                                   "TLSF-2.4.6" "oscpack_1_1_0" "." "..")))
-                  (with-directory-excursion "./external_libraries"
-                    (for-each
-                     delete-file-recursively
-                     (scandir "."
-                              (lambda (x)
-                                (and (eq? (stat:type (stat x)) 'directory)
-                                     (not (member (basename x) keep-dirs)))))))
-                  ;; To find the Guix provided ableton-link library.
-                  (substitute* "lang/CMakeLists.txt"
-                    (("include\\(\\.\\./external_libraries/link/\
+    (version "3.12.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/supercollider/supercollider")
+             (commit (string-append "Version-" version))
+             ;; for nova-simd, nova-tt, hidapi, TLSF, oscpack
+             (recursive? #t)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0id522338a464j1slcspajwc7klypbc9qpigw5mqjhrw970wij5z"))
+       (modules '((guix build utils)
+                  (ice-9 ftw)))
+       (snippet
+        ;; The build system doesn't allow us to unbundle the following
+        ;; libraries.  hidapi is also heavily patched and upstream not
+        ;; actively maintained.
+        '(let ((keep-dirs '("nova-simd" "nova-tt" "hidapi"
+                            "TLSF-2.4.6" "oscpack_1_1_0" "." "..")))
+           (with-directory-excursion "./external_libraries"
+             (for-each
+              delete-file-recursively
+              (scandir "."
+                       (lambda (x)
+                         (and (eq? (stat:type (stat x)) 'directory)
+                              (not (member (basename x) keep-dirs)))))))
+           ;; To find the Guix provided ableton-link library.
+           (substitute* "lang/CMakeLists.txt"
+             (("include\\(\\.\\./external_libraries/link/\
 AbletonLinkConfig\\.cmake\\)")
-                     "find_package(AbletonLink NAMES AbletonLink ableton-link \
-link REQUIRED)"))
-                  #t))))
+              "find_package(AbletonLink NAMES AbletonLink ableton-link \
+link REQUIRED)"))))))
     (build-system cmake-build-system)
     (outputs
-     '("out"   ;core language
-       "ide")) ;qt ide
+     '("out"                            ;core language
+       "ide"))                          ;qt ide
     (arguments
-     `(#:configure-flags '("-DSYSTEM_BOOST=on" "-DSYSTEM_YAMLCPP=on"
-                           "-DSC_QT=ON" "-DCMAKE_BUILD_TYPE=Release"
+     `(#:configure-flags '("-DSYSTEM_BOOST=ON"
+                           "-DSYSTEM_YAMLCPP=ON"
+                           "-DSC_QT=ON"
+                           "-DCMAKE_BUILD_TYPE=Release"
                            "-DFORTIFY=ON"
-                           ;"-DLIBSCSYNTH=ON"   ; TODO: Re-enable?
-                           "-DSC_EL=off") ;scel is packaged individually as
-                                          ;emacs-scel
+                           ;; "-DLIBSCSYNTH=ON"   ; TODO: Re-enable?
+                           "-DSC_EL=OFF") ;scel is packaged individually as emacs-scel
        #:phases
        (modify-phases %standard-phases
          ;; HOME must be defined otherwise supercollider throws a "ERROR:
@@ -2945,8 +2996,7 @@ link REQUIRED)"))
          ;; The graphical tests also hang without it.
          (add-after 'unpack 'set-home-directory
            (lambda _
-             (setenv "HOME" (getcwd))
-             #t))
+             (setenv "HOME" (getcwd))))
          (add-after 'unpack 'patch-scclass-dir
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -2957,13 +3007,11 @@ link REQUIRED)"))
                  (((string-append
                     "SC_Filesystem::instance\\(\\)\\.getDirectory"
                     "\\(DirName::Resource\\) / CLASS_LIB_DIR_NAME"))
-                  (string-append "Path(\"" scclass-dir "\")")))
-               #t)))
+                  (string-append "Path(\"" scclass-dir "\")"))))))
          (add-before 'build 'prepare-x
            (lambda _
              (system "Xvfb &")
-             (setenv "DISPLAY" ":0")
-             #t))
+             (setenv "DISPLAY" ":0")))
          (add-before 'install 'install-ide
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -2971,33 +3019,28 @@ link REQUIRED)"))
                     (scide "editors/sc-ide/scide"))
                (install-file scide
                              (string-append ide "/bin"))
-               (delete-file scide)
-               #t))))))
+               (delete-file scide)))))))
     (native-inputs
-     `(("ableton-link" ,ableton-link)
-       ("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)
-       ("xorg-server" ,xorg-server-for-tests)))
-    (inputs
-     `(("jack" ,jack-1)
-       ("libsndfile" ,libsndfile)
-       ("fftw" ,fftw)
-       ("libxt" ,libxt)
-       ("readline" ,readline)           ;readline support for sclang's CLI
-       ("alsa" ,alsa-lib)               ;for sclang's MIDI interface
-       ("eudev" ,eudev)                 ;for user interactions with devices
-       ("avahi" ,avahi)                 ;zeroconf service discovery support
-       ("icu4c" ,icu4c)
-       ("boost" ,boost)
-       ("boost-sync" ,boost-sync)
-       ("yaml-cpp" ,yaml-cpp)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)
-       ("qtwebchannel" ,qtwebchannel)
-       ("qtwebsockets" ,qtwebsockets)))
+     (list ableton-link pkg-config qttools xorg-server-for-tests))
+    (inputs (list jack-1
+                  libsndfile
+                  fftw
+                  libxt
+                  readline              ;readline support for sclang's CLI
+                  alsa-lib              ;for sclang's MIDI interface
+                  eudev                 ;for user interactions with devices
+                  avahi                 ;zeroconf service discovery support
+                  icu4c
+                  boost
+                  boost-sync
+                  yaml-cpp
+                  qtbase-5
+                  qtdeclarative
+                  qtsvg
+                  qtwebchannel
+                  qtwebsockets))
     (propagated-inputs                  ;to get native-search-path
-     `(("qtwebengine" ,qtwebengine)))
+     (list qtwebengine))
     (home-page "https://github.com/supercollider/supercollider")
     (synopsis "Synthesis engine and programming language")
     (description "SuperCollider is a synthesis engine (@code{scsynth} or
@@ -3010,6 +3053,28 @@ for \"realtime\" in the index of the Guix manual to learn how to achieve this
 using Guix System.")
     (license license:gpl2+)))
 
+(define-public libshout-idjc
+  (package
+    (name "libshout-idjc")
+    (version "2.4.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://sourceforge/libshoutidjc.idjc.p"
+                           "/libshout-idjc-" version ".tar.gz"))
+       (sha256
+        (base32 "1r9z8ggxylr2ab0isaljbm574rplnlcb12758j994h54nh2vikwb"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     (list pkg-config))
+    (inputs
+     (list libogg libtheora libvorbis speex))
+    (home-page "http://idjc.sourceforge.net/")
+    (synopsis "Broadcast streaming library with IDJC extensions")
+    (description "This package provides libshout plus IDJC extensions.")
+    ;; GNU Library (not Lesser) General Public License.
+    (license license:lgpl2.0+)))
+
 (define-public raul
   (package
     (name "raul")
@@ -3026,10 +3091,9 @@ using Guix System.")
      `(#:python ,python-2
        #:tests? #f)) ; no check target
     (inputs
-     `(("glib" ,glib)
-       ("boost" ,boost)))
+     (list glib boost))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://drobilla.net/software/raul/")
     (synopsis "Real-time audio utility library")
     (description
@@ -3067,10 +3131,7 @@ aimed at audio/musical applications.")
                        "074zj8ydp05yy1hjcglfv3hkvj4cm50f9nralka1992pm6yf8yvy"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ("libtool" ,libtool)))
+     (list autoconf automake pkg-config libtool))
     (synopsis "Sampling rate conversion and filter design utilities")
     (description "This package contains the @command{resample} and
 @command{windowfilter} command line utilities.  The @command{resample} command
@@ -3107,11 +3168,9 @@ filters using the so-called @emph{window method}.")
                ((".*cp -f \\$\\(JNI_TARGET\\).*") ""))
              #t)))))
     (inputs
-     `(("ladspa" ,ladspa)
-       ("libsamplerate" ,libsamplerate)
-       ("vamp" ,vamp)))
+     (list ladspa libsamplerate vamp))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://breakfastquay.com/rubberband/")
     (synopsis "Audio time-stretching and pitch-shifting library")
     (description
@@ -3133,13 +3192,9 @@ tempo and pitch of an audio recording independently of one another.")
                 "1k962ljpnwyjw9jjiky2372khhri1wqvrj5qsalfpys31xqzw31p"))))
     (build-system gnu-build-system)
     (inputs
-     `(("jack" ,jack-1)
-       ("alsa-lib" ,alsa-lib)))
+     (list jack-1 alsa-lib))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (home-page "https://www.music.mcgill.ca/~gary/rtmidi")
     (synopsis "Cross-platform MIDI library for C++")
     (description
@@ -3163,11 +3218,9 @@ input/output.")
     (arguments `(#:tests? #f))          ;no check target
     (propagated-inputs
      ;; In Requires of sratom-0.pc.
-     `(("lv2" ,lv2)
-       ("serd" ,serd)
-       ("sord" ,sord)))
+     (list lv2 serd sord))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://drobilla.net/software/sratom/")
     (synopsis "Library for serialising LV2 atoms to/from RDF")
     (description
@@ -3178,24 +3231,24 @@ the Turtle syntax.")
 (define-public suil
   (package
     (name "suil")
-    (version "0.10.8")
+    (version "0.10.10")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://download.drobilla.net/suil-"
                                   version ".tar.bz2"))
               (sha256
                (base32
-                "0h0ghk1s0lrj4gh12r7390b0ybaw7awnj0vhchyy9ll0gvhqgkci"))))
+                "1ysbazqlbyxlzyr9zk7dj2mgb6pn0amllj2cd5g1m56wnzk0h3vm"))))
     (build-system waf-build-system)
     (arguments
      `(#:tests? #f))                    ;no check target
     (inputs
-     `(("lv2" ,lv2)
-       ("gtk+" ,gtk+-2)
-       ("gtk+" ,gtk+)
-       ("qt" ,qtbase-5)))
+     (list lv2
+           gtk+-2
+           gtk+
+           qtbase-5))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://drobilla.net/software/suil/")
     (synopsis "Library for loading and wrapping LV2 plugin UIs")
     (description
@@ -3212,7 +3265,7 @@ Suil currently supports every combination of Gtk, Qt, and X11.")
 (define-public libebur128
   (package
     (name "libebur128")
-    (version "1.2.4")
+    (version "1.2.6")
     (source
      (origin
        (method git-fetch)
@@ -3221,7 +3274,7 @@ Suil currently supports every combination of Gtk, Qt, and X11.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0n81rnm8dm1zmibkr2v3q79rsd609y0dbbsrbay18njcjva88p0g"))))
+        (base32 "0xkpz5rzz1j1srhprbh89669gw8z5f1njpvcnxqgf7qax69vd8sh"))))
     (build-system cmake-build-system)
     (arguments
      `(;; Tests require proprietary .wav files. See
@@ -3271,17 +3324,17 @@ for loudness normalisation.")
                                                "/share/freepats/freepats.cfg")))))
              #t)))))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("ao" ,ao)
-       ("flac" ,flac)
-       ("jack" ,jack-1)
-       ("libogg" ,libogg)
-       ("libvorbis" ,libvorbis)
-       ("speex" ,speex)
-       ("ncurses" ,ncurses)
-       ("freepats" ,freepats)))
+     (list alsa-lib
+           ao
+           flac
+           jack-1
+           libogg
+           libvorbis
+           speex
+           ncurses
+           freepats))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://timidity.sourceforge.net/")
     (synopsis "Software synthesizer for playing MIDI files")
     (description
@@ -3319,9 +3372,9 @@ disks as various audio file formats.")
                                (string-append out "/lib/libvamp-hostsdk.la"))))
              #t)))))
     (inputs
-     `(("libsndfile" ,libsndfile)))
+     (list libsndfile))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://vamp-plugins.org")
     (synopsis "Modular and extensible audio processing system")
     (description
@@ -3344,7 +3397,7 @@ analysis plugins or audio feature extraction plugins.")
        (sha256
         (base32 "1vmf84iy4dkwxv887grnlsfk43fmhd9gbg26gc2kgcv40sbkvayf"))))
     (build-system gnu-build-system)
-    (native-inputs `(("automake" ,automake)))
+    (native-inputs (list automake))
     (arguments
      `(#:configure-flags
        ;; Disable the use of SSE unless on x86_64.
@@ -3360,8 +3413,10 @@ analysis plugins or audio feature extraction plugins.")
             ;; Originally a symlink to '/usr/local/share/automake-1.12/ar-lib'.
             (delete-file "ar-lib")
             (symlink
-             (string-append (assoc-ref inputs "automake") "/share/automake-"
-                            ,(package-version automake) "/ar-lib")
+             (search-input-file inputs
+                                (string-append "/share/automake-"
+                                               ,(package-version automake)
+                                               "/ar-lib"))
              "ar-lib")
             #t)))))
     (home-page "http://sbsms.sourceforge.net/")
@@ -3373,6 +3428,31 @@ stretching and pitch scaling of audio.  This package contains the library.")
     ;; containing gpl2.
     (license license:gpl2)))
 
+(define-public libkeyfinder
+  (package
+    (name "libkeyfinder")
+    (version "2.2.6")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/mixxxdj/libkeyfinder")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0s7nqjmv44q5qjynfcs0j6h4a6qcz4mxzandkkdjjbnwv5rxc3zg"))))
+    (build-system cmake-build-system)
+    (native-inputs
+     (list catch-framework2))
+    (inputs
+     (list fftw))
+    (home-page "https://mixxxdj.github.io/libkeyfinder/")
+    (synopsis "Musical key detection for digital audio")
+    (description
+     "@code{libkeyfinder} is a small C++11 library for estimating the musical
+key of digital audio.")
+    (license license:gpl3+)))
+
 (define-public wavpack
   (package
     (name "wavpack")
@@ -3459,10 +3539,9 @@ Scream Tracker 3 (S3M), Fast Tracker II (XM), and Impulse Tracker (IT).")
                 "17i8fc7x7yn3z1x963xp9iv108gxfakxmdgmpv3mlm438w3n3g8x"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libxmp" ,libxmp)
-       ("pulseaudio" ,pulseaudio)))
+     (list libxmp pulseaudio))
     (home-page "http://xmp.sourceforge.net/")
     (synopsis "Extended module player")
     (description
@@ -3486,10 +3565,7 @@ Tracker 3 S3M and Impulse Tracker IT files.")
         (base32 "12i6yg8vvqwyk412lxl2krbfby6hnxld8qxy0k4m5xp4g94jiq4p"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("file" ,file)))
+     (list autoconf automake libtool file))
     (home-page "https://www.surina.net/soundtouch/")
     (synopsis
      "Audio processing library for changing tempo, pitch and playback rate")
@@ -3518,18 +3594,18 @@ control functionality, or just for playing around with the sound effects.")
        ;; bug reports.
        '("--with-distro=Guix System Distribution")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("ao" ,ao)
-       ("flac" ,flac)
-       ("lame" ,lame)
-       ("libid3tag" ,libid3tag)
-       ("libltdl" ,libltdl)
-       ("libmad" ,libmad)
-       ("libpng" ,libpng)
-       ("libvorbis" ,libvorbis)
-       ("pulseaudio" ,pulseaudio)))
+     (list alsa-lib
+           ao
+           flac
+           lame
+           libid3tag
+           libltdl
+           libmad
+           libpng
+           libvorbis
+           pulseaudio))
     (home-page "http://sox.sourceforge.net")
     (synopsis "Sound processing utility")
     (description
@@ -3575,10 +3651,9 @@ conversion.  It may be used, for example, to resample PCM-encoded audio.")
         (base32 "0zf8sxqb02w07ah55b1y7ab643zmpbhn62spa9pqra0rc17l4dfc"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libsndfile" ,libsndfile)))
+     (list libsndfile))
     (native-inputs
-     `(("perl" ,perl)
-       ("which" ,which)))               ;used in tests/test.pl
+     (list perl which))               ;used in tests/test.pl
     (home-page "https://www.twolame.org/")
     (synopsis "MPEG Audio Layer 2 (MP2) encoder")
     (description
@@ -3604,15 +3679,11 @@ portions of LAME.")
     (build-system gnu-build-system)
     (inputs
      ;; TODO: Add ASIHPI.
-     `(("alsa-lib" ,alsa-lib)
-       ("jack" ,jack-1)))
+     (list alsa-lib jack-1))
     ;; Autoreconf is necessary because the audacity-compat patch modifies .in
     ;; files.
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (arguments
      '(#:tests? #f                      ;no 'check' target
        #:parallel-build? #f             ;fails on some systems
@@ -3665,12 +3736,9 @@ interface.")
     (arguments
      `(#:tests? #f))                    ; no "check" phase
     (native-inputs
-     `(("qttools" ,qttools)
-       ("pkg-config" ,pkg-config)))
+     (list qttools pkg-config))
     (inputs
-     `(("fluidsynth" ,fluidsynth)
-       ("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)))
+     (list fluidsynth qtbase-5 qtx11extras))
     (home-page "https://qsynth.sourceforge.io")
     (synopsis "Graphical user interface for FluidSynth")
     (description
@@ -3693,13 +3761,13 @@ synthesizer written in C++.")
         (base32 "0gspmr3klwnq98h17p5hc6ifygya4p80g4g8r7a1qavm3mv19waf"))))
     (build-system gnu-build-system)
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("jack" ,jack-1)
-       ("ao" ,ao)
-       ("libsamplerate" ,libsamplerate)
-       ("openal" ,openal)
-       ("portaudio" ,portaudio)
-       ("pulseaudio" ,pulseaudio)))
+     (list alsa-lib
+           jack-1
+           ao
+           libsamplerate
+           openal
+           portaudio
+           pulseaudio))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -3737,12 +3805,9 @@ with a much different focus than most other audio daemons.")
        (list (string-append "docdir=" (assoc-ref %outputs "out")
                             "/share/doc/xjackfreak"))))
     (inputs
-     `(("jack" ,jack-1)
-       ("libx11" ,libx11)
-       ("libxt" ,libxt)
-       ("libxext" ,libxext)))
+     (list jack-1 libx11 libxt libxext))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/johnhldavis/xjackfreak")
     (synopsis "JACK audio frequency analyzer and display")
     (description
@@ -3794,7 +3859,7 @@ result.")
              #t))
          ;; no configure script
          (delete 'configure))))
-    (inputs `(("fftwf" ,fftwf)))
+    (inputs (list fftwf))
     (home-page "https://kokkinizita.linuxaudio.org")
     (synopsis "Fast, partitioned convolution engine library")
     (description
@@ -3892,8 +3957,7 @@ provide high-quality sample rate conversion.")
           ;; no configure script
           (delete 'configure))))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("fftw" ,fftw)))
+     (list alsa-lib fftw))
     (home-page "https://kokkinizita.linuxaudio.org")
     (synopsis "C++ wrapper around the ALSA API")
     (description
@@ -3919,10 +3983,7 @@ point audio data.")
     (build-system gnu-build-system)
     ;; The source checkout is not bootstrapped.
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("flex" ,flex)
-       ("bison" ,bison)))
+     (list autoconf automake flex bison))
     (synopsis "Cue and toc file parsers and utilities")
     (description "Cuetools is a set of programs that are useful for manipulating
 and using CUE sheet (cue) files and Table of Contents (toc) files.  CUE and TOC
@@ -3931,6 +3992,33 @@ machine-readable ASCII format.")
     (home-page "https://github.com/svend/cuetools")
     (license license:gpl2+)))
 
+(define-public mp3guessenc
+  (package
+    (name "mp3guessenc")
+    (version "0.27.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://sourceforge/mp3guessenc/mp3guessenc-"
+                           (version-major+minor version) "/mp3guessenc-"
+                           version ".tar.gz"))
+       (sha256
+        (base32 "1fa3sbwwn4p2v1749lzy040bfy1xfd574mf2frwgg9ikgk3vlb3c"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f ; no tests
+       #:make-flags
+       (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)))) ; no configure phase
+    (home-page "https://mp3guessenc.sourceforge.io")
+    (synopsis "Analyze MPEG layer I/II/III files")
+    (description "mp3guessenc is a command line utility that tries to detect the
+encoder used for an MPEG Layer III (MP3) file, as well as scan any MPEG audio
+file (any layer) and print a lot of useful information.")
+    (license license:lgpl2.1+)))
+
 (define-public shntool
   (package
     (name "shntool")
@@ -4021,8 +4109,7 @@ with support for HD extensions.")
               ,home-page))
            #t))))
     (build-system gnu-build-system)
-    (inputs `(("ffmpeg" ,ffmpeg)
-              ("sox" ,sox)))
+    (inputs (list ffmpeg sox))
     (synopsis "Tool to adjust loudness of media files")
     (description
      "BS1770GAIN is a loudness scanner compliant with ITU-R BS.1770 and its
@@ -4129,7 +4216,7 @@ code, used in @code{libtoxcore}.")
     (arguments
      `(#:tests? #f))                   ; tests require access to ALSA devices.
     (inputs
-     `(("alsa-lib" ,alsa-lib)))
+     (list alsa-lib))
     (home-page "https://larsimmisch.github.io/pyalsaaudio/")
     (synopsis "ALSA wrappers for Python")
     (description
@@ -4188,20 +4275,17 @@ kbps at 24 bit/96 kHz.")
                             (assoc-ref %outputs "out")
                             "/etc/dbus-1/system.d"))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("bluez" ,bluez)
-       ("dbus" ,dbus)
-       ("glib" ,glib)
-       ("ldacbt" ,ldacbt)
-       ("libbsd" ,libbsd)
-       ("ncurses" ,ncurses)
-       ("ortp" ,ortp)
-       ("sbc" ,sbc)))
+     (list alsa-lib
+           bluez
+           dbus
+           glib
+           ldacbt
+           libbsd
+           ncurses
+           ortp
+           sbc))
     (home-page "https://github.com/Arkq/bluez-alsa")
     (synopsis "Bluetooth ALSA backend")
     (description "This project is a rebirth of a direct integration between
@@ -4250,23 +4334,23 @@ on the ALSA software PCM plugin.")
                (copy-recursively "pix" (string-append doc "/pix"))
                #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("fftw" ,fftw)
-       ("flac" ,flac)
-       ("gmp" ,gmp)
-       ("gsl" ,gsl)
-       ("gtk+" ,gtk+)
-       ("jack" ,jack-1)
-       ("libsamplerate" ,libsamplerate)
-       ("mpc" ,mpc)
-       ("mpfr" ,mpfr)
-       ("mpg123" ,mpg123)
-       ("speex" ,speex)
-       ("timidity++" ,timidity++)
-       ("vorbis-tools" ,vorbis-tools)
-       ("wavpack" ,wavpack)))
+     (list alsa-lib
+           fftw
+           flac
+           gmp
+           gsl
+           gtk+
+           jack-1
+           libsamplerate
+           mpc
+           mpfr
+           mpg123
+           speex
+           timidity++
+           vorbis-tools
+           wavpack))
     (synopsis "Sound editor")
     (home-page "https://ccrma.stanford.edu/software/snd/")
     (description
@@ -4294,10 +4378,9 @@ the Snd sources), Ruby, or Forth.")
        (list (string-append "--prefix=" (assoc-ref %outputs "out")
                             "/lib/lv2"))))
     (inputs
-     `(("lv2" ,lv2)
-       ("fftwf" ,fftwf)))
+     (list lv2 fftwf))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/lucianodato/noise-repellent")
     (synopsis "LV2 plugin for broadband noise reduction")
     (description "Noise Repellent is an LV2 plugin to reduce noise.  It has
@@ -4336,8 +4419,7 @@ the following features:
           (base32 "189l6lz8sz5vr6bjyzgcsrvksl1w6crqsg0q65r94b5yjsmjnpr4"))))
       (build-system meson-build-system)
       (arguments
-       `(#:meson ,meson-0.55
-         ;; Using a "release" build is recommended for performance
+       `(;; Using a "release" build is recommended for performance
          #:build-type "release"
          #:phases
          (modify-phases %standard-phases
@@ -4363,12 +4445,9 @@ the following features:
                    (invoke "make")
                    (setenv "CFLAGS" old-CFLAGS))))))))
       (inputs
-       `(("lv2" ,lv2)))
+       (list lv2))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("libtool" ,libtool)
-         ("pkg-config" ,pkg-config)))
+       (list autoconf automake libtool pkg-config))
       (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
@@ -4392,12 +4471,10 @@ an LV2 audio plugin.")
     (build-system cmake-build-system)
     (native-inputs
      ;; TODO: Try using the latest googletest for versions > 1.8.
-     `( ;; ("googletest" ,googletest-1.8)
-       ("which" ,which)))
+     (list ;; ("googletest" ,googletest-1.8)
+           which))
     (inputs
-     `(("fftw" ,fftw)
-       ("ncurses" ,ncurses)
-       ("pulseaudio" ,pulseaudio)))
+     (list fftw ncurses pulseaudio))
     (arguments
      '(#:tests? #f
        ;; XXX Enable tests after patching them to use the system googletest.
@@ -4437,13 +4514,9 @@ representations.")
                 "1mziklmqifhnb4kg9ia2r56r8wjn6xp40bkpf484hsgqvnrccl86"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (inputs
-     `(("fftw" ,fftw)
-       ("ncurses" ,ncurses)
-       ("pulseaudio" ,pulseaudio)))
+     (list fftw ncurses pulseaudio))
     (arguments
      `(#:configure-flags
        (list (string-append "PREFIX=" %output)
@@ -4524,9 +4597,7 @@ using ALSA, MPD, PulseAudio, or a FIFO buffer as its input.")
           "1fkrnzs78fmj11n9z3l0w53i2fl16jcfiyavwidck9bzmkmsf486"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (home-page "https://github.com/mstorsjo/fdk-aac")
     (synopsis "Fraunhofer FDK AAC library")
     (description "FDK is a library for encoding and decoding Advanced Audio
@@ -4542,7 +4613,7 @@ library supports sample rates up to 96 kHz and up to eight channels (7.1
 (define-public libopenshot-audio
   (package
     (name "libopenshot-audio")
-    (version "0.2.0")
+    (version "0.2.2")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -4551,16 +4622,16 @@ library supports sample rates up to 96 kHz and up to eight channels (7.1
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "13if0m5mvlqly8gmbhschzb9papkgp3yqivklhb949dhy16m8zgf"))))
+                "03dygh85riljk7dpn5a5a0d22a2kz45fs13gzwqgnbzzr1k17p2y"))))
     (build-system cmake-build-system)
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ;; The following are for JUCE GUI components:
-       ("libx11" ,libx11)
-       ("freetype" ,freetype)
-       ("libxrandr" ,libxrandr)
-       ("libxinerama" ,libxinerama)
-       ("libxcursor" ,libxcursor)))
+     (list alsa-lib
+           ;; The following are for JUCE GUI components:
+           libx11
+           freetype
+           libxrandr
+           libxinerama
+           libxcursor))
     (arguments
      `(#:tests? #f                      ;there are no tests
        #:configure-flags
@@ -4577,7 +4648,7 @@ library.")
 (define-public faudio
   (package
     (name "faudio")
-    (version "21.09")
+    (version "21.10")
     (source
      (origin
        (method git-fetch)
@@ -4586,15 +4657,13 @@ library.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0411fj5b9gvjz1z1gpvy07hkm7rz2nmwggw2v3hbn7ran7w3w5zy"))))
+        (base32 "0l9bicg8v1shsyq9k48zh4wv5kwfs6lfjmm9blzd13xrgmhd07w2"))))
     (arguments
      '(#:tests? #f                      ; No tests.
        #:configure-flags '("-DGSTREAMER=ON")))
     (build-system cmake-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("gstreamer" ,gstreamer)
-              ("gst-plugins-base" ,gst-plugins-base)
-              ("sdl2" ,sdl2)))
+    (native-inputs (list pkg-config))
+    (inputs (list gstreamer gst-plugins-base sdl2))
     (home-page "https://github.com/FNA-XNA/FAudio")
     (synopsis "XAudio reimplementation")
     (description "FAudio is an XAudio reimplementation that focuses solely on
@@ -4619,12 +4688,9 @@ developing fully accurate DirectX Audio runtime libraries.")
          "1gq519c0imsh57zklyi0f8h64l3ai48lh672c834470z8c6kvbfi"))))
     (build-system gnu-build-system)
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("gtk+" ,gtk+-2)
-       ("libsndfile" ,libsndfile)
-       ("portaudio" ,portaudio)))
+     (list alsa-lib gtk+-2 libsndfile portaudio))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://gnaural.sourceforge.net/")
     (synopsis "Binaural beat synthesizer")
     (description "Gnaural is a programmable auditory binaural beat synthesizer
@@ -4647,15 +4713,15 @@ other Gnaural instances, allowing synchronous sessions between many users.")
                (base32
                 "05yq7lggxygrkd76yiqby3msrgdn082p0qlvmzzv9xbw8hmyra76"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("lame" ,lame)
-              ("libvorbis" ,libvorbis)
-              ("opus" ,opus)
-              ("twolame" ,twolame)
-              ("alsa-lib" ,alsa-lib)
-              ("pulseaudio" ,pulseaudio)
-              ("jack" ,jack-1)
-              ("libsamplerate" ,libsamplerate)))
+    (native-inputs (list pkg-config))
+    (inputs (list lame
+                  libvorbis
+                  opus
+                  twolame
+                  alsa-lib
+                  pulseaudio
+                  jack-1
+                  libsamplerate))
     (arguments
      `(#:configure-flags
        (list (string-append "--with-lame-prefix="
@@ -4684,8 +4750,7 @@ stream to one or more IceCast and/or ShoutCast servers.")
     (arguments
      `(#:parallel-tests? #f))           ;tests fail otherwise
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("pkg-config" ,pkg-config)))
+     (list doxygen pkg-config))
     (synopsis "Encode or decode Linear/Longitudinal Time Code (LTC) audio")
     (description "Libltc is a POSIX-C Library for handling
 @dfn{Linear/Longitudinal Time Code} (LTC) data.")
@@ -4749,11 +4814,9 @@ supports both of ID3v1/v2 and APEv2 tags.")
     (arguments
      `(#:tests? #f)) ;no tests included
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("jack" ,jack-1)
-       ("pulseaudio" ,pulseaudio)))
+     (list alsa-lib jack-1 pulseaudio))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://libsound.io")
     (synopsis "C library for real-time audio input and output")
     (description "@code{libsoundio} is a C library providing audio input and
@@ -4764,23 +4827,23 @@ workstations as well as consumer software such as music players.")
 (define-public redkite
   (package
     (name "redkite")
-    (version "1.3.0")
+    (version "1.3.1")                     ;marked unmaintained as of Oct. 2021
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://gitlab.com/iurie-sw/redkite")
+             (url "https://github.com/free-sm/redkite")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "16j9zp5i7svq3g38rfb6h257qfgnd2brrxi7cjd2pdax9xxwj40y"))))
+        (base32 "1zb2k2a4m7z2ravqrjn8fq8lic20wbr2m8kja3p3113jsk7j9zvd"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f))                    ;no tests included
     (propagated-inputs
-     `(("cairo" ,cairo)))
+     (list cairo))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "Small GUI toolkit")
     (description "Redkite is a small GUI toolkit developed in C++17 and
 inspired from other well known GUI toolkits such as Qt and GTK.  It is
@@ -4793,7 +4856,7 @@ as is the case with audio plugins.")
 (define-public carla
   (package
     (name "carla")
-    (version "2.1.1")
+    (version "2.4.1")
     (source
      (origin
        (method git-fetch)
@@ -4803,8 +4866,7 @@ as is the case with audio plugins.")
          (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32
-         "0c3y4a6cgi4bv1mg57i3qn5ia6pqjqlaylvkapj6bmpsw71ig22g"))))
+        (base32 "01ngkmfcxyg1bb4qmfvlkkjbx4lx62akxqhizl8zmqnhfcy4p9bx"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ; no "check" target
@@ -4823,10 +4885,11 @@ as is the case with audio plugins.")
                (chmod (string-append out "/share/carla/carla") #o555)
                #t)))
          (add-after 'install 'wrap-executables
-           (lambda* (#:key outputs #:allow-other-keys)
+           (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
                (wrap-script (string-append out "/bin/carla")
-                            `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH"))))
+                            #:guile (search-input-file inputs "bin/guile")
+                            `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH"))))
                #t))))))
     (inputs
      `(("alsa-lib" ,alsa-lib)
@@ -4851,7 +4914,7 @@ as is the case with audio plugins.")
        ;; For WRAP-SCRIPT above.
        ("guile" ,guile-2.2)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://kx.studio/Applications:Carla")
     (synopsis "Audio plugin host")
     (description "Carla is a modular audio plugin host, with features like
@@ -4872,22 +4935,22 @@ default and preferred audio driver but also supports native drivers like ALSA.")
               (sha256
                (base32 "1m7njfjdb7sqf0lhgc4swihgdr4snkg8v02wcly08wb5ar2fr2s6"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     ;; It would be nice to add mikmod to inputs if that gets packaged
     ;; eventually.
-    (inputs `(("alsa-lib" ,alsa-lib)
-              ("jack" ,jack-1)
-              ("mpg123" ,mpg123)
-              ("lame" ,lame)
-              ("vorbis-tools" ,vorbis-tools)
-              ("faad2" ,faad2)
-              ("flac" ,flac)
-              ("timidity++" ,timidity++)
-              ("libsndfile" ,libsndfile)
-              ("libsamplerate" ,libsamplerate)
-              ("ncurses" ,ncurses)
-              ("ladspa" ,ladspa)
-              ("lilv" ,lilv)))
+    (inputs (list alsa-lib
+                  jack-1
+                  mpg123
+                  lame
+                  vorbis-tools
+                  faad2
+                  flac
+                  timidity++
+                  libsndfile
+                  libsamplerate
+                  ncurses
+                  ladspa
+                  lilv))
     (home-page "https://nosignal.fi/ecasound/index.php")
     (synopsis "Multitrack audio processing")
     (description "Ecasound is a software package designed for multitrack audio
@@ -4920,15 +4983,13 @@ in the package.")
             "1570m2dfia17dbkhd2qhx8jjihrpm7g8nnyg6n4wif4vv229s7dz"))))
    (build-system meson-build-system)
    (arguments
-    `(#:meson ,meson-0.55
-      #:configure-flags
+    `(#:configure-flags
       ;; Build the tests.
       `("-Dtests=true")))
    (inputs
-    `(("libsamplerate" ,libsamplerate)
-      ("libsndfile" ,libsndfile)))
+    (list libsamplerate libsndfile))
    (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
    (synopsis "Library for reading and resampling audio files")
    (description "libaudec is a wrapper library over ffmpeg, sndfile and
 libsamplerate for reading and resampling audio files, based on Robin Gareus'
@@ -4956,11 +5017,9 @@ libsamplerate for reading and resampling audio files, based on Robin Gareus'
        `("-Delf-tests=true" ; for checking symbol visibility
          "-Donline-tests=true"))) ; for checking URI existence
     (inputs
-      `(("curl" ,curl)
-        ("libelf" ,libelf)
-        ("lilv" ,lilv)))
+      (list curl libelf lilv))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (synopsis "LV2 plugin lint tool")
     (description "lv2lint is an LV2 lint-like tool that checks whether a
 given plugin and its UI(s) match up with the provided metadata and adhere
@@ -4991,11 +5050,9 @@ to well-known best practices.")
       (modify-phases %standard-phases
         (delete 'configure))))
     (inputs
-      `(("jalv" ,jalv)
-        ("lilv" ,lilv)))
+      (list jalv lilv))
     (native-inputs
-      `(("help2man" ,help2man)
-        ("pkg-config" ,pkg-config)))
+      (list help2man pkg-config))
     (synopsis "Documentation generator for LV2 plugins")
     (description
       "lv2toweb allows the user to create an xhtml page with information
@@ -5020,12 +5077,11 @@ with the provided metadata and adhere to well-known best practices.")
          "07xl3cmdaf7k9mm58m93cn8i1jvgimmiifdw1w7v2jl88nx60pm1"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     ;; These are listed as propagated inputs because they are dependencies
     ;; in pkgconfig.
     (propagated-inputs
-     `(("cairo" ,cairo)
-       ("libx11" ,libx11)))
+     (list cairo libx11))
     (synopsis "GUI toolkit for LV2 plugins")
     (description "ZToolkit (Ztk) is a cross-platform GUI toolkit heavily
 inspired by GTK.  It handles events and low level drawing on behalf of
@@ -5056,8 +5112,7 @@ minimum.")
      `(("glib:bin" ,glib "bin")
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("glib" ,glib)
-       ("libsndfile" ,libsndfile)))
+     (list glib libsndfile))
     (home-page "http://www.swamiproject.org/")
     (synopsis "Instrument file software library")
     (description
@@ -5081,7 +5136,7 @@ edited, converted, compressed and saved.")
 (define-public lsp-dsp-lib
   (package
     (name "lsp-dsp-lib")
-    (version "0.5.11")
+    (version "0.5.14")
     (source
       (origin
         (method url-fetch)
@@ -5089,23 +5144,23 @@ edited, converted, compressed and saved.")
                             "releases/download/" version
                             "/lsp-dsp-lib-" version "-src.tar.gz"))
         (sha256
-         (base32 "0lkar6r9jfrrqswi8nnndlm5a9kfwqjn92d81gp2yhc3p46xsswz"))))
+         (base32 "1gcznkyybywbgdi2fhx27i8sckhy6ahvxax72b213g1lr5aaw7bq"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:tests? #f ; no tests
-       #:make-flags
-       (list (string-append "CC=" ,(cc-for-target)))
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'omit-static-library
-           (lambda _
-             (substitute* "src/Makefile"
-               ((".*@.*ARTIFACT_SLIB.*") "")       ; don't install it
-               ((" \\$\\(ARTIFACT_SLIB\\)") "")))) ; don't build it
-         (replace 'configure
-           (lambda* (#:key outputs #:allow-other-keys)
-             (invoke "make" "config"
-                     (string-append "PREFIX=" (assoc-ref outputs "out"))))))))
+     (list #:tests? #f                  ; no tests
+           #:make-flags
+           #~(list (string-append "CC=" #$(cc-for-target)))
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'omit-static-library
+                 (lambda _
+                   (substitute* "src/Makefile"
+                     ((".*cp \\$\\(ARTIFACT_SLIB\\).*") "") ; don't install it
+                     ((" \\$\\(ARTIFACT_SLIB\\)") ""))))    ; don't build it
+               (replace 'configure
+                 (lambda _
+                   (invoke "make" "config"
+                           (string-append "PREFIX=" #$output)))))))
     (home-page "https://github.com/sadko4u/lsp-dsp-lib")
     (synopsis "Digital signal processing library")
     (description "The LSP DSP library provides a set of functions that perform
@@ -5128,9 +5183,7 @@ currently operate on IEEE-754 single-precision floating-point numbers.")
         (base32 "1jpvr7bra8srz8jvnlbmhf8andbaavq5v01qjnp2f61za93rzwba"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("bc" ,bc)
-       ("octave" ,octave)
-       ("valgrind" ,valgrind)))
+     (list bc octave valgrind))
     (arguments
      `(#:tests? #f ; TODO: Fix tests (paths, graphic toolkit, octave modules).
        #:phases
@@ -5176,7 +5229,7 @@ Rate} 3600x2250 bit/s vocoder used in various radio systems.")
 (define-public ableton-link
   (package
     (name "ableton-link")
-    (version "3.0.2")
+    (version "3.0.3")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -5185,7 +5238,7 @@ Rate} 3600x2250 bit/s vocoder used in various radio systems.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0262vm0v7hmqjhqx5xikh529p3c065p1yld6ymaiz74yq1dnnjir"))
+                "1wplqj11ww64gmw2kzlxpvfs3v04m2036f7k5ndm34zcv12b91fa"))
               (modules '((guix build utils)))
               (patches
                (search-patches "ableton-link-system-libraries-debian.patch"))
@@ -5197,23 +5250,22 @@ Rate} 3600x2250 bit/s vocoder used in various radio systems.")
                     (("root_dir,") "root_dir, os.pardir,"))
                   ;; Unbundle dependencies.
                   (delete-file-recursively "third_party")
-                  (delete-file-recursively "modules")
-                  #t))))
+                  (delete-file-recursively "modules")))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("catch" ,catch-framework)
-       ("python" ,python)       ;for running tests
-       ("portaudio" ,portaudio) ;for portaudio examples
-       ("qtbase" ,qtbase-5)       ;for Qt examples
-       ("qtdeclarative" ,qtdeclarative)
-       ("qttools" ,qttools)))
+     (list catch-framework
+           python ;for running tests
+           portaudio ;for portaudio examples
+           qtbase-5 ;for Qt examples
+           qtdeclarative
+           qttools))
     (inputs
-     `(("jack" ,jack-1)                       ;for JACK examples
-       ("qtquickcontrols" ,qtquickcontrols))) ;for Qt examples
+     (list jack-1 ;for JACK examples
+           qtquickcontrols)) ;for Qt examples
     (propagated-inputs
      ;; This is because include/ableton/platforms/asio/AsioWrapper.hpp
      ;; contains '#include <asio.hpp>'.
-     `(("asio" ,asio)))
+     (list asio))
     (arguments
      `(#:configure-flags
        '("-DLINK_BUILD_QT_EXAMPLES=ON"
@@ -5221,19 +5273,15 @@ Rate} 3600x2250 bit/s vocoder used in various radio systems.")
        #:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let* ((python (string-append (assoc-ref inputs "python")
-                                          "/bin/python3"))
-                   (run-tests (string-append "../ableton-link-"
-                                             ,version
-                                             "-checkout/ci/run-tests.py")))
-               (invoke python run-tests "--target" "LinkCoreTest")
-               (invoke python run-tests "--target" "LinkDiscoveryTest"))))
+           (lambda* (#:key inputs tests? #:allow-other-keys)
+             (when tests?
+               (let* ((python (search-input-file inputs "/bin/python3"))
+                      (run-tests "../source/ci/run-tests.py"))
+                 (invoke python run-tests "--target" "LinkCoreTest")
+                 (invoke python run-tests "--target" "LinkDiscoveryTest")))))
          (add-before 'install 'patch-cmake
            (lambda* (#:key inputs #:allow-other-keys)
-             (let* ((source (string-append "../ableton-link-"
-                                                ,version
-                                                "-checkout/")))
+             (let* ((source "../source/"))
                (substitute* (string-append source
                                            "cmake_include/AsioStandaloneConfig.cmake")
                  (((string-append "\\$\\{CMAKE_CURRENT_LIST_DIR\\}/\\.\\./"
@@ -5244,14 +5292,13 @@ Rate} 3600x2250 bit/s vocoder used in various radio systems.")
                  (("\\$\\{CMAKE_CURRENT_LIST_DIR\\}/include")
                   "${CMAKE_CURRENT_LIST_DIR}/../../../include")
                  (("\\$\\{CMAKE_CURRENT_LIST_DIR\\}/include/ableton/Link\\.hpp")
-                  "${CMAKE_CURRENT_LIST_DIR}/../../../include/ableton/Link.hpp"))
-               #t)))
+                  "${CMAKE_CURRENT_LIST_DIR}/../../../include/ableton/Link.hpp")))))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
                     (bin (string-append out "/bin"))
                     (lib-cmake (string-append out "/lib/cmake/ableton-link"))
-                    (source (string-append "../ableton-link-" ,version "-checkout")))
+                    (source "../source"))
                (for-each (lambda (test-file)
                            (delete-file test-file))
                          '("bin/LinkDiscoveryTest" "bin/LinkCoreTest"))
@@ -5262,8 +5309,7 @@ Rate} 3600x2250 bit/s vocoder used in various radio systems.")
                              lib-cmake)
                (install-file (string-append source
                                             "/cmake_include/AsioStandaloneConfig.cmake")
-                             (string-append lib-cmake "/cmake_include"))
-               #t))))))
+                             (string-append lib-cmake "/cmake_include"))))))))
     (home-page "https://github.com/Ableton/link")
     (synopsis "Synchronize musical beat, tempo, and phase across multiple applications")
     (description
@@ -5277,14 +5323,14 @@ while still staying in time.")
 (define-public butt
   (package
     (name "butt")
-    (version "0.1.31")
+    (version "0.1.32")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/butt/butt/butt-"
                                   version "/butt-" version ".tar.gz"))
               (sha256
                (base32
-                "19zvdi5vr6vqnrpc60jir7550nz9a5x1c61lh13355cdny2zp28z"))
+                "1qwllkx9p1gb3syhbbck3agrk375m82l18fb81aqygi4g3dg3s9r"))
               (modules '((guix build utils)))
               (snippet
                '(substitute* "src/butt.cpp"
@@ -5325,7 +5371,7 @@ while still staying in time.")
                                         version "_manual.pdf"))
                     (sha256
                      (base32
-                      "0a0kgd069whfp1v8xgw6qm67w02n8b7b4h5ay5665wgq947hxanp"))))))
+                      "0g70jyyxbx5nin3xs9q9zf878b2kyy7rn8gn9w91x1ychbjd6dhh"))))))
     (home-page "https://danielnoethen.de/butt/")
     (synopsis "Audio streaming tool")
     (description "Butt is a tool to stream audio to a ShoutCast or
@@ -5368,7 +5414,7 @@ Icecast server.")
                          (list "/bin" "/share/man/man1" "/share/man/man5"))
                (apply invoke "make" "sysinstall" make-flags)))))))
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (native-inputs
      `(("groff" ,groff-minimal)         ; for nroff
        ("util-linux" ,util-linux)))     ; for col
@@ -5379,6 +5425,128 @@ generator, generating audio signals out of Linux's /dev/dsp audio
 device.  There is support for mono and/or stereo and 8 or 16 bit samples.")
     (license license:gpl2)))
 
+(define-public python-pysox
+  ;; PyPi does not include the data folder containing audio files for testing.
+  (let ((commit "3d0053381c24ae3490f759d4de87194b85789d36")
+        (revision "0"))
+    (package
+      (name "python-pysox")
+      (version (git-version "1.4.2" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/rabitt/pysox")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "0i62jx92vfpcr2z7lp69yzqdi9idfs3pifl3rzm2akc2c4cr1mac"))))
+      (build-system python-build-system)
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'patch-sox
+             (lambda* (#:key inputs #:allow-other-keys)
+               (let* ((sox-store-path (assoc-ref inputs "sox"))
+                      (sox-bin (string-append sox-store-path "/bin/sox")))
+                 (substitute* "sox/__init__.py"
+                   (("sox -h")
+                    (string-append sox-bin " -h")))
+                 (substitute* "sox/core.py"
+                   (("\\['sox")
+                    (string-append "['" sox-bin))))))
+           (replace 'check
+             (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+               (when tests?
+                 (add-installed-pythonpath inputs outputs)
+                 (invoke "pytest")))))))
+      (propagated-inputs
+       (list python-numpy python-typing-extensions))
+      (native-inputs
+       (list sox python-pytest python-pytest-cov python-soundfile))
+      (home-page "https://github.com/rabitt/pysox")
+      (synopsis "Python wrapper around SoX")
+      (description "@code{python-pysox} is a wrapper around the @command{sox}
+command line tool.  The API offers @code{Transformer} and @code{Combiner}
+classes that allow the user to incrementally build up effects and audio
+manipulations.  @code{python-pysox} also provides methods for querying audio
+information such as sample rate, determining whether an audio file is silent,
+and much more.")
+      (license license:bsd-3))))
+
+(define-public python-resampy
+  (package
+    (name "python-resampy")
+    (version "0.2.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         ;; PyPi does not include tests.
+         (url "https://github.com/bmcfee/resampy")
+         (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0qmkxl5sbgh0j73n667vyi7ywzh09iaync91yp1j5rrcmwsn0qfs"))))
+    (build-system python-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "pytest" "tests")))))))
+    (propagated-inputs
+     (list python-numba python-numpy python-scipy python-six))
+    (native-inputs
+     (list python-pytest python-pytest-cov))
+    (home-page "https://github.com/bmcfee/resampy")
+    (synopsis "Efficient signal resampling")
+    (description
+     "@code{python-resampy} implements the band-limited sinc interpolation
+method for sampling rate conversion as described by Julius O. Smith at the
+@url{https://ccrma.stanford.edu/~jos/resample/, Digital Audio Resampling
+Home Page}.")
+    (license license:isc)))
+
+(define-public python-librosa
+  (package
+    (name "python-librosa")
+    (version "0.8.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "librosa" version))
+       (sha256
+        (base32 "1cx6rhcvak0hy6bx84jwzpxmwgi92m82w77279akwjmfd3khagf5"))))
+    (build-system python-build-system)
+    (arguments
+     ;; Tests require internet connection to download MATLAB scripts for
+     ;; generating the testing data.
+     `(#:tests? #f))
+    (propagated-inputs
+     (list python-audioread
+           python-decorator
+           python-joblib
+           python-numba
+           python-numpy
+           python-packaging
+           python-pooch
+           python-resampy
+           python-scikit-learn
+           python-scipy
+           python-soundfile))
+    (home-page "https://librosa.org")
+    (synopsis "Python module for audio and music processing")
+    (description
+     "@code{librosa} is a python package for music and audio analysis.  It
+provides the building blocks necessary to create music information retrieval
+systems.")
+    (license license:isc)))
+
 (define-public mda-lv2
   (package
     (name "mda-lv2")
@@ -5397,9 +5565,9 @@ device.  There is support for mono and/or stereo and 8 or 16 bit samples.")
        (list (string-append "--prefix="
                             (assoc-ref %outputs "out")))))
     (inputs
-     `(("lv2" ,lv2)))
+     (list lv2))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (native-search-paths
      (list (search-path-specification
             (variable "LV2_PATH")
@@ -5410,3 +5578,62 @@ device.  There is support for mono and/or stereo and 8 or 16 bit samples.")
      "MDA-LV2 is an LV2 port of the MDA plugins.  It includes effects and a few
 instrument plugins.")
     (license license:gpl3+)))
+
+(define-public libodiosacd
+  (package
+   (name "libodiosacd")
+   (version "21.8.30")
+   (source (origin
+             (method git-fetch)
+             (uri (git-reference
+                   (url "https://github.com/tari01/libodiosacd")
+                   (commit version)))
+             (file-name (git-file-name name version))
+             (sha256
+              (base32
+               "0iamf7wksbql0qfigdv5ahaax53ms2yligdav8dw6x0ay88x4lhi"))))
+   (build-system gnu-build-system)
+   (arguments
+    `(#:tests? #f ; no check target
+      #:phases
+      (modify-phases %standard-phases
+        (add-after 'unpack 'patch-makefile
+          (lambda _
+            (substitute* "Makefile"
+              (("\\$\\(DESTDIR\\)/usr")
+                "\\$(DESTDIR)"))))
+        (delete 'configure)) ; no configure script
+      #:make-flags
+      (list (string-append "DESTDIR=" %output))))
+   (synopsis "Library for decoding Super Audio CDs (SACD)")
+   (description
+    "The Odio SACD shared library is a decoding engine which takes a Super
+Audio CD source and extracts a 24-bit high resolution WAV file.  It handles
+both DST and DSD streams.")
+   (home-page "https://tari.in/www/software/libodiosacd/")
+   (license license:gpl3+)))
+
+(define-public odio-sacd
+  (package
+   (name "odio-sacd")
+   (version "21.1.9")
+   (source (origin
+             (method git-fetch)
+             (uri (git-reference
+                   (url "https://github.com/tari01/odio-sacd")
+                   (commit version)))
+             (file-name (git-file-name name version))
+             (sha256
+              (base32
+               "0314srqk0r4qv292qiaply619l2fw04nkdwvqhj3q1dqzv41g4qk"))))
+   (inputs (list libodiosacd))
+   ;; Build system and arguments for libodiosacd are identical.
+   (build-system (package-build-system libodiosacd))
+   (arguments (package-arguments libodiosacd))
+   (synopsis "Rip Super Audio CDs (SACD)")
+   (description
+    "Odio SACD is a command-line application which takes a Super Audio CD
+source and extracts a 24-bit high resolution WAV file.  It handles both DST
+and DSD streams.")
+   (home-page "https://tari.in/www/software/odio-sacd/")
+   (license license:gpl3+)))
diff --git a/gnu/packages/augeas.scm b/gnu/packages/augeas.scm
index b3c4803e04..2fd933604c 100644
--- a/gnu/packages/augeas.scm
+++ b/gnu/packages/augeas.scm
@@ -44,11 +44,11 @@
     (build-system gnu-build-system)
     ;; Marked as "required" in augeas.pc.
     (propagated-inputs
-     `(("libxml2" ,libxml2)))
+     (list libxml2))
     (inputs
-     `(("readline" ,readline)))
+     (list readline))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://augeas.net")
     (synopsis "Edit configuration files programmatically")
     (description
diff --git a/gnu/packages/authentication.scm b/gnu/packages/authentication.scm
index a8070f4789..c64a8be83f 100644
--- a/gnu/packages/authentication.scm
+++ b/gnu/packages/authentication.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2018, 2020, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2019, 2020 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2019, 2020, 2022 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2020 B. Wilson <elaexuotee@wilsonb.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -27,6 +28,7 @@
   #:use-module (gnu packages tls)
   #:use-module (gnu packages xml)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build-system go)
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module ((guix licenses) #:prefix license:)
@@ -59,14 +61,11 @@
                (for-each delete-file (find-files lib "\\.a$"))
                #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-
-       ;; XXX: Perhaps this should be propagated from xmlsec.
-       ("libltdl" ,libltdl)))
+     (list pkg-config
+           ;; XXX: Perhaps this should be propagated from xmlsec.
+           libltdl))
     (inputs
-     `(("linux-pam" ,linux-pam)
-       ("openssl" ,openssl)
-       ("xmlsec-openssl" ,xmlsec-openssl)))
+     (list linux-pam openssl xmlsec-openssl))
     (home-page "https://www.nongnu.org/oath-toolkit/")
     (synopsis "One-time password (OTP) components")
     (description
@@ -91,41 +90,58 @@ data.")
     (license (list license:lgpl2.1+     ; the libraries (liboath/ & libpskc/)
                    license:gpl3+))))    ; the tools (everything else)
 
+(define-public oauth2l
+  (package
+    (name "oauth2l")
+    (version "1.2.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/google/oauth2l")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0a9x0b31ybyjg0k7923xw6zr6crm0kigcn8g6hyr228nbvw35r8w"))))
+    (build-system go-build-system)
+    (arguments
+     '(#:import-path "github.com/google/oauth2l"))
+    (home-page "https://github.com/google/oauth2l")
+    (synopsis "Simple CLI for interacting with Google API authentication")
+    (description
+     "@code{oauth2l} (pronounced ``oauth tool'') is a simple command-line tool
+for working with @url{https://developers.google.com/identity/protocols/OAuth2,
+Google OAuth 2.0} written in Go.  Its primary use is to fetch and print OAuth
+2.0 access tokens, which can be used with other command-line tools and
+scripts.")
+    (license license:asl2.0)))
+
 (define-public yubico-pam
-  (let ((commit "b5bd00db81e0e0e0ecced65c684080bb56ddc35b")
-        (revision "0"))
-    (package
-      (name "yubico-pam")
-      (version (git-version "2.26" revision commit))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://github.com/Yubico/yubico-pam")
-                      (commit commit)))
-                (file-name (git-file-name name version))
-                (sha256
-                 (base32
-                  "10dq8dqi3jldllj6p8r9hldx9sank9n82c44w8akxrs1vli6nj3m"))))
-      (build-system gnu-build-system)
-      (arguments
-       ;; The pam_test fails because ykclient fails to build a Curl handle.
-       '(#:make-flags '("TESTS=util_test")))
-      (inputs
-       `(("linux-pam" ,linux-pam)
-         ("libyubikey" ,libyubikey)
-         ("ykclient" ,ykclient)
-         ("yubikey-personalization" ,yubikey-personalization)))
-      (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("libtool" ,libtool)
-         ("asciidoc" ,asciidoc)
-         ("pkg-config" ,pkg-config)))
-      (home-page "https://developers.yubico.com/yubico-pam")
-      (synopsis "Yubico pluggable authentication module")
-      (description "The Yubico PAM module provides an easy way to integrate the
+  (package
+    (name "yubico-pam")
+    (version "2.27")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/Yubico/yubico-pam")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0hb773zlf11xz4bwmsqv2mq5d4aq2g0crdr5cp9xwc4ivi5gd4kg"))))
+    (build-system gnu-build-system)
+    (arguments
+     ;; The pam_test fails because ykclient fails to build a Curl handle.
+     '(#:make-flags '("TESTS=util_test")))
+    (inputs
+     (list linux-pam libyubikey ykclient yubikey-personalization))
+    (native-inputs
+     (list autoconf automake libtool asciidoc pkg-config))
+    (home-page "https://developers.yubico.com/yubico-pam")
+    (synopsis "Yubico pluggable authentication module")
+    (description "The Yubico PAM module provides an easy way to integrate the
 YubiKey into your existing user authentication infrastructure.")
-      (license license:bsd-2))))
+    (license license:bsd-2)))
 
 (define-public pamtester
   (package
@@ -141,9 +157,9 @@ YubiKey into your existing user authentication infrastructure.")
         (base32 "1mdj1wj0adcnx354fs17928yn2xfr1hj5mfraq282dagi873sqw3"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("linux-pam" ,linux-pam)))
+     (list linux-pam))
     (home-page "http://pamtester.sourceforge.net/")
     (synopsis "Utility for testing pluggable authentication modules (PAM) facility")
     (description
diff --git a/gnu/packages/autogen.scm b/gnu/packages/autogen.scm
index 968337ad8d..1fe742bbae 100644
--- a/gnu/packages/autogen.scm
+++ b/gnu/packages/autogen.scm
@@ -42,10 +42,8 @@
        (sha256
         (base32 "16mlbdys8q4ckxlvxyhwkdnh1ay9f6g0cyp1kylkpalgnik398gq"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("which" ,which)))
-    (inputs `(("guile" ,guile-2.2)
-              ("perl" ,perl)))          ; for doc generator mdoc
+    (native-inputs (list pkg-config which))
+    (inputs (list guile-2.2 perl))          ; for doc generator mdoc
     (arguments
      '(#:configure-flags
        ;; XXX Needed to build 5.18.16.  ./configure fails without it:
diff --git a/gnu/packages/autotools.scm b/gnu/packages/autotools.scm
index 6987a8fd40..1eea731233 100644
--- a/gnu/packages/autotools.scm
+++ b/gnu/packages/autotools.scm
@@ -59,42 +59,47 @@
         "113nlmidxy9kjr45kg9x3ngar4951mvag1js2a3j8nxcz34wxsv4"))))
     (build-system gnu-build-system)
     (inputs
-     ;; TODO: remove `if' in the next rebuild cycle.
-     (if (%current-target-system)
-         `(("bash" ,bash-minimal)
-           ("perl" ,perl)
-           ("m4" ,m4))
-         '()))
-    (native-inputs
-     `(("perl" ,perl)
+     `(("bash" ,bash-minimal)
+       ("perl" ,perl)
        ("m4" ,m4)))
+    (native-inputs
+     (list perl m4))
     (arguments
      `(;; XXX: testsuite: 209 and 279 failed.  The latter is an impurity.  It
        ;; should use our own "cpp" instead of "/lib/cpp".
        #:tests? #f
-       ,@(if (%current-target-system)
-             `(#:phases
-               (modify-phases %standard-phases
-                 (add-after 'install 'patch-non-shebang-references
-                   (lambda* (#:key build inputs outputs #:allow-other-keys)
-                     ;; `patch-shebangs' patches shebangs only, and the Perl
-                     ;; scripts use a re-exec feature that references the
-                     ;; build hosts' perl.  Also, BASH and M4 store references
-                     ;; hide in the scripts.
-                     (let ((bash (assoc-ref inputs "bash"))
-                           (m4 (assoc-ref inputs "m4"))
-                           (perl (assoc-ref inputs "perl"))
-                           (out  (assoc-ref outputs "out"))
-                           (store-directory (%store-directory)))
-                      (substitute* (find-files (string-append out "/bin"))
-                        (((string-append store-directory "/[^/]*-bash-[^/]*"))
-                         bash)
-                        (((string-append store-directory "/[^/]*-m4-[^/]*"))
-                         m4)
-                        (((string-append store-directory "/[^/]*-perl-[^/]*"))
-                         perl))
-                      #t)))))
-             '())))
+       #:phases
+       (modify-phases %standard-phases
+         ,@(if (%current-target-system)
+               '((add-after 'install 'patch-non-shebang-references
+                    (lambda* (#:key build inputs outputs #:allow-other-keys)
+                      ;; `patch-shebangs' patches shebangs only, and the Perl
+                      ;; scripts use a re-exec feature that references the
+                      ;; build hosts' perl.  Also, BASH and M4 store references
+                      ;; hide in the scripts.
+                      (let ((bash (assoc-ref inputs "bash"))
+                            (m4 (assoc-ref inputs "m4"))
+                            (perl (assoc-ref inputs "perl"))
+                            (out  (assoc-ref outputs "out"))
+                            (store-directory (%store-directory)))
+                        (substitute* (find-files (string-append out "/bin"))
+                          (((string-append store-directory "/[^/]*-bash-[^/]*"))
+                           bash)
+                          (((string-append store-directory "/[^/]*-m4-[^/]*"))
+                           m4)
+                          (((string-append store-directory "/[^/]*-perl-[^/]*"))
+                           perl))))))
+               '())
+         (add-after 'install 'unpatch-shebangs
+           (lambda* (#:key outputs #:allow-other-keys)
+             ;; Scripts that "autoconf -i" installs (config.guess,
+             ;; config.sub, and install-sh) must use a regular shebang
+             ;; rather than a reference to the store.  Restore it.
+             (let* ((out (assoc-ref outputs "out"))
+                    (build-aux (string-append
+                                out "/share/autoconf/build-aux")))
+               (substitute* (find-files build-aux)
+                 (("^#!.*/bin/sh") "#!/bin/sh"))))))))
     (home-page "https://www.gnu.org/software/autoconf/")
     (synopsis "Create source code configuration scripts")
     (description
@@ -134,19 +139,7 @@ know anything about Autoconf or M4.")
                                                (executable-file? file)))
                                  (find-files "bin"
                                              (lambda (file stat)
-                                               (executable-file? file)))))
-               #t))
-           (add-after 'install 'unpatch-shebangs
-             (lambda* (#:key outputs #:allow-other-keys)
-               ;; Scripts that "autoconf -i" installs (config.guess,
-               ;; config.sub, and install-sh) must use a regular shebang
-               ;; rather than a reference to the store.  Restore it.
-               ;; TODO: Move this phase to 'autoconf-2.69'.
-               (let* ((out (assoc-ref outputs "out"))
-                      (build-aux (string-append
-                                  out "/share/autoconf/build-aux")))
-                 (substitute* (find-files build-aux)
-                   (("^#!.*/bin/sh") "#!/bin/sh")))))))))))
+                                               (executable-file? file)))))))))))))
 
 (define-public autoconf autoconf-2.69)
 
@@ -216,9 +209,9 @@ files with a system-specific shebang."
     (inputs `(("guile"
                ;; XXX: Kludge to hide the circular dependency.
                ,(module-ref (resolve-interface '(gnu packages guile))
-                            'guile-2.0))
+                            'guile-3.0/fixed))
               ("autoconf" ,autoconf)
-              ("bash" ,bash)))
+              ("bash" ,bash-minimal)))
     (arguments
      '(#:modules ((guix build utils))
        #:builder
@@ -316,7 +309,7 @@ contributed as free software by the community.")
                (base32
                 "0gv7g61ja9q9zg1m30k4snqwwy1kq7b4df6sb7d2qra7kbdq8af1"))))
     (build-system gnu-build-system)
-    (inputs `(("perl" ,perl)))
+    (inputs (list perl))
     (synopsis "Process generated build logs")
     (description "Autobuild is a package that processes build logs generated
 when building software.  Autobuild is primarily focused on packages using
@@ -331,24 +324,21 @@ output is indexed in many ways to simplify browsing.")
 (define-public automake
   (package
     (name "automake")
-    (version "1.16.2")
+    (version "1.16.3")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnu/automake/automake-"
                                  version ".tar.xz"))
              (sha256
               (base32
-                "1l7dkqbsmbf94ax29jj1jf6a0r6ikc8jybg1p5m0c3ki7pg5ki6c"))
+                "0fmz2fhmzcpacnprl5msphvaflwiy0hvpgmqlgfny72ddijzfazz"))
              (patches
               (search-patches "automake-skip-amhello-tests.patch"))))
     (build-system gnu-build-system)
     (inputs
-     ;; TODO: remove `if' in the next rebuild cycle.
-     (if (%current-target-system)
-         `(("autoconf" ,autoconf-wrapper)
-           ("bash" ,bash-minimal)
-           ("perl" ,perl))
-         '()))
+     `(("autoconf" ,autoconf-wrapper)
+       ("bash" ,bash-minimal)
+       ("perl" ,perl)))
     (native-inputs
      `(("autoconf" ,autoconf-wrapper)
        ("perl" ,perl)))
@@ -444,6 +434,20 @@ intuitive format and then Automake works with Autoconf to produce a robust
 Makefile, simplifying the entire process for the developer.")
     (license gpl2+)))                      ; some files are under GPLv3+
 
+(define-public automake-1.16.5
+  (package
+    (inherit automake)
+    (version "1.16.5")
+    (source (origin
+             (method url-fetch)
+             (uri (string-append "mirror://gnu/automake/automake-"
+                                 version ".tar.xz"))
+             (sha256
+              (base32
+                "0sdl32qxdy7m06iggmkkvf7j520rmmgbsjzbm7fgnxwxdp6mh7gh"))
+             (patches
+              (search-patches "automake-skip-amhello-tests.patch"))))))
+
 (define-public libtool
   (package
     (name "libtool")
@@ -457,7 +461,7 @@ Makefile, simplifying the entire process for the developer.")
                 "0vxj52zm709125gwv9qqlw02silj8bnjnh4y07arrz60r31ai1vw"))
               (patches (search-patches "libtool-skip-tests2.patch"))))
     (build-system gnu-build-system)
-    (propagated-inputs `(("m4" ,m4)))
+    (propagated-inputs (list m4))
     (native-inputs `(("m4" ,m4)
                      ("perl" ,perl)
                      ;; XXX: this shouldn't be necessary, but without it test
@@ -493,11 +497,19 @@ Makefile, simplifying the entire process for the developer.")
                (("/bin/sh")
                 (string-append bash "/bin/sh")))
              #t)))
-         (add-after 'patch-source-shebangs 'restore-ltmain-shebang
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "build-aux/ltmain.in"
-               (("^#!.*/bin/sh$") "#!/bin/sh"))
-             #t)))))
+         ;; These files may be copied into source trees by libtoolize,
+         ;; therefore they must not point to store file names that would be
+         ;; leaked with tarballs generated by make dist.
+         (add-after 'install 'restore-build-aux-shebang
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (dir (string-append out "/share/libtool/build-aux")))
+               (for-each (lambda (file)
+                           (format #t "restoring shebang on `~a'~%" file)
+                           (substitute* file
+                             (("^#!.*/bin/sh") "#!/bin/sh")))
+                         (find-files dir ".*"))
+               #t))))))
 
     (synopsis "Generic shared library support tools")
     (description
@@ -546,7 +558,7 @@ complexity of working with shared libraries across platforms.")
                           (install-file "doc/config.sub.1" man1)
                           #t))))))
       (native-inputs
-       `(("help2man" ,help2man)))
+       (list help2man))
       (home-page "https://savannah.gnu.org/projects/config")
       (synopsis "Ubiquitous config.guess and config.sub scripts")
       (description "The `config.guess' script tries to guess a canonical system triple,
@@ -602,7 +614,7 @@ configuration in nearly all GNU packages (and many others).")
                (("/usr/bin/env python") (which "python3")))
              #t)))))
     (inputs
-     `(("python" ,python-3)))
+     (list python-3))
     (synopsis "@command{configure} interface for Python-based packages")
     (description
      "GNU pyconfigure provides template files for easily implementing
diff --git a/gnu/packages/aux-files/emacs/guix-emacs.el b/gnu/packages/aux-files/emacs/guix-emacs.el
index ca9146c535..eff44bfe90 100644
--- a/gnu/packages/aux-files/emacs/guix-emacs.el
+++ b/gnu/packages/aux-files/emacs/guix-emacs.el
@@ -26,6 +26,7 @@
 
 ;;; Code:
 (require 'seq)
+(declare-function package-load-descriptor "package" (pkg-dir))
 
 (defvar guix-emacs-autoloads-regexp
   (rx (* any) "-autoloads.el" (zero-or-one "c") string-end)
@@ -39,6 +40,12 @@ The files in the list do not have extensions (.el, .elc)."
                        (directory-files directory 'full-name
                                         guix-emacs-autoloads-regexp))))
 
+(defun guix-emacs--non-core-load-path ()
+  ;; Filter out core Elisp directories, which are already handled by Emacs.
+  (seq-filter (lambda (dir)
+                (string-match-p "/share/emacs/site-lisp" dir))
+              load-path))
+
 ;;;###autoload
 (defun guix-emacs-autoload-packages ()
   "Autoload Emacs packages found in EMACSLOADPATH.
@@ -46,18 +53,29 @@ The files in the list do not have extensions (.el, .elc)."
 'Autoload' means to load the 'autoloads' files matching
 `guix-emacs-autoloads-regexp'."
   (interactive)
-  (let* ((emacs-non-core-load-path-directories
-          ;; Filter out core Elisp directories, which are already autoloaded
-          ;; by Emacs.
-          (seq-filter (lambda (dir)
-                        (string-match-p "/share/emacs/site-lisp" dir))
-                      load-path))
-         (autoloads (mapcan #'guix-emacs-find-autoloads
-                            emacs-non-core-load-path-directories)))
+  (let ((autoloads (mapcan #'guix-emacs-find-autoloads
+                           (guix-emacs--non-core-load-path))))
     (mapc (lambda (f)
             (load f 'noerror))
           autoloads)))
 
+;;;###autoload
+(defun guix-emacs-load-package-descriptors ()
+  "Load descriptors for packages found in EMACSLOADPATH via subdirs.el."
+  (dolist (dir (guix-emacs--non-core-load-path))
+    (let ((subdirs-file (expand-file-name "subdirs.el" dir)))
+     (when (file-exists-p subdirs-file)
+      (with-temp-buffer
+        (insert-file-contents subdirs-file)
+        (goto-char (point-min))
+        (let ((subdirs (read (current-buffer))))
+          (and (equal (car-safe subdirs) 'normal-top-level-add-to-load-path)
+               (equal (car-safe (cadr subdirs)) 'list)
+               (dolist (subdir (cdadr subdirs))
+                 (let ((pkg-dir (expand-file-name subdir dir)))
+                   (when (file-directory-p pkg-dir)
+                     (package-load-descriptor pkg-dir)))))))))))
+
 (provide 'guix-emacs)
 
 ;;; guix-emacs.el ends here
diff --git a/gnu/packages/aux-files/guile-launcher.c b/gnu/packages/aux-files/guile-launcher.c
index 47ba069de1..ad0094bff5 100644
--- a/gnu/packages/aux-files/guile-launcher.c
+++ b/gnu/packages/aux-files/guile-launcher.c
@@ -82,10 +82,13 @@ main (int argc, char **argv)
   unsetenv ("GUILE_LOAD_PATH");
   unsetenv ("GUILE_LOAD_COMPILED_PATH");
 
-  /* XXX: Do not let GMP allocate via libgc as this can lead to memory
-     corruption in GnuTLS/Nettle since Nettle also uses GMP:
+#if !SCM_ENABLE_MINI_GMP
+  /* XXX: On Guile < 3.0.6 and Guile built without its bundled mini-GMP, do
+     not let GMP allocate via libgc as this can lead to memory corruption in
+     GnuTLS/Nettle since Nettle also uses GMP:
      <https://issues.guix.gnu.org/46330>.  */
   scm_install_gmp_memory_functions = 0;
+#endif
 
   scm_boot_guile (argc, argv, inner_main, 0);
   return 0; /* never reached */
diff --git a/gnu/packages/aux-files/linux-libre/4.14-i686.conf b/gnu/packages/aux-files/linux-libre/4.14-i686.conf
index 16a7817115..b7a07b5fe3 100644
--- a/gnu/packages/aux-files/linux-libre/4.14-i686.conf
+++ b/gnu/packages/aux-files/linux-libre/4.14-i686.conf
@@ -938,7 +938,7 @@ CONFIG_RAPIDIO_CPS_XX=m
 CONFIG_RAPIDIO_TSI568=m
 CONFIG_RAPIDIO_CPS_GEN2=m
 CONFIG_RAPIDIO_RXS_GEN3=m
-# CONFIG_X86_SYSFB is not set
+CONFIG_X86_SYSFB=y
 
 #
 # Executable file formats / Emulations
@@ -8495,7 +8495,13 @@ CONFIG_ISCSI_IBFT_FIND=y
 CONFIG_ISCSI_IBFT=m
 CONFIG_FW_CFG_SYSFS=m
 # CONFIG_FW_CFG_SYSFS_CMDLINE is not set
-# CONFIG_GOOGLE_FIRMWARE is not set
+CONFIG_GOOGLE_FIRMWARE=y
+# CONFIG_GOOGLE_SMI is not set
+CONFIG_GOOGLE_COREBOOT_TABLE=y
+# CONFIG_GOOGLE_MEMCONSOLE_X86_LEGACY is not set
+CONFIG_GOOGLE_FRAMEBUFFER_COREBOOT=m
+# CONFIG_GOOGLE_MEMCONSOLE_COREBOOT is not set
+# CONFIG_GOOGLE_VPD is not set
 
 #
 # EFI (Extensible Firmware Interface) Support
diff --git a/gnu/packages/aux-files/linux-libre/4.14-x86_64.conf b/gnu/packages/aux-files/linux-libre/4.14-x86_64.conf
index 74b1f2cc18..db11c2f6e8 100644
--- a/gnu/packages/aux-files/linux-libre/4.14-x86_64.conf
+++ b/gnu/packages/aux-files/linux-libre/4.14-x86_64.conf
@@ -928,7 +928,7 @@ CONFIG_RAPIDIO_CPS_XX=m
 CONFIG_RAPIDIO_TSI568=m
 CONFIG_RAPIDIO_CPS_GEN2=m
 CONFIG_RAPIDIO_RXS_GEN3=m
-# CONFIG_X86_SYSFB is not set
+CONFIG_X86_SYSFB=y
 
 #
 # Executable file formats / Emulations
@@ -8332,7 +8332,13 @@ CONFIG_ISCSI_IBFT_FIND=y
 CONFIG_ISCSI_IBFT=m
 CONFIG_FW_CFG_SYSFS=m
 # CONFIG_FW_CFG_SYSFS_CMDLINE is not set
-# CONFIG_GOOGLE_FIRMWARE is not set
+CONFIG_GOOGLE_FIRMWARE=y
+# CONFIG_GOOGLE_SMI is not set
+CONFIG_GOOGLE_COREBOOT_TABLE=y
+# CONFIG_GOOGLE_MEMCONSOLE_X86_LEGACY is not set
+CONFIG_GOOGLE_FRAMEBUFFER_COREBOOT=m
+# CONFIG_GOOGLE_MEMCONSOLE_COREBOOT is not set
+# CONFIG_GOOGLE_VPD is not set
 
 #
 # EFI (Extensible Firmware Interface) Support
diff --git a/gnu/packages/aux-files/linux-libre/4.19-i686.conf b/gnu/packages/aux-files/linux-libre/4.19-i686.conf
index 0e6637325d..5deee8206d 100644
--- a/gnu/packages/aux-files/linux-libre/4.19-i686.conf
+++ b/gnu/packages/aux-files/linux-libre/4.19-i686.conf
@@ -713,7 +713,7 @@ CONFIG_RAPIDIO_CPS_XX=m
 CONFIG_RAPIDIO_TSI568=m
 CONFIG_RAPIDIO_CPS_GEN2=m
 CONFIG_RAPIDIO_RXS_GEN3=m
-# CONFIG_X86_SYSFB is not set
+CONFIG_X86_SYSFB=y
 
 #
 # Binary Emulations
@@ -737,7 +737,13 @@ CONFIG_ISCSI_IBFT_FIND=y
 CONFIG_ISCSI_IBFT=m
 CONFIG_FW_CFG_SYSFS=m
 # CONFIG_FW_CFG_SYSFS_CMDLINE is not set
-# CONFIG_GOOGLE_FIRMWARE is not set
+CONFIG_GOOGLE_FIRMWARE=y
+# CONFIG_GOOGLE_SMI is not set
+CONFIG_GOOGLE_COREBOOT_TABLE=y
+# CONFIG_GOOGLE_MEMCONSOLE_X86_LEGACY is not set
+CONFIG_GOOGLE_FRAMEBUFFER_COREBOOT=m
+# CONFIG_GOOGLE_MEMCONSOLE_COREBOOT is not set
+# CONFIG_GOOGLE_VPD is not set
 
 #
 # EFI (Extensible Firmware Interface) Support
diff --git a/gnu/packages/aux-files/linux-libre/4.19-x86_64.conf b/gnu/packages/aux-files/linux-libre/4.19-x86_64.conf
index 36636ebb8d..b76fdc9148 100644
--- a/gnu/packages/aux-files/linux-libre/4.19-x86_64.conf
+++ b/gnu/packages/aux-files/linux-libre/4.19-x86_64.conf
@@ -684,7 +684,7 @@ CONFIG_RAPIDIO_CPS_XX=m
 CONFIG_RAPIDIO_TSI568=m
 CONFIG_RAPIDIO_CPS_GEN2=m
 CONFIG_RAPIDIO_RXS_GEN3=m
-# CONFIG_X86_SYSFB is not set
+CONFIG_X86_SYSFB=y
 
 #
 # Binary Emulations
@@ -714,7 +714,13 @@ CONFIG_ISCSI_IBFT_FIND=y
 CONFIG_ISCSI_IBFT=m
 CONFIG_FW_CFG_SYSFS=m
 # CONFIG_FW_CFG_SYSFS_CMDLINE is not set
-# CONFIG_GOOGLE_FIRMWARE is not set
+CONFIG_GOOGLE_FIRMWARE=y
+# CONFIG_GOOGLE_SMI is not set
+CONFIG_GOOGLE_COREBOOT_TABLE=y
+# CONFIG_GOOGLE_MEMCONSOLE_X86_LEGACY is not set
+CONFIG_GOOGLE_FRAMEBUFFER_COREBOOT=m
+# CONFIG_GOOGLE_MEMCONSOLE_COREBOOT is not set
+# CONFIG_GOOGLE_VPD is not set
 
 #
 # EFI (Extensible Firmware Interface) Support
diff --git a/gnu/packages/aux-files/linux-libre/4.4-i686.conf b/gnu/packages/aux-files/linux-libre/4.4-i686.conf
index 32442eb55a..03aef7abfc 100644
--- a/gnu/packages/aux-files/linux-libre/4.4-i686.conf
+++ b/gnu/packages/aux-files/linux-libre/4.4-i686.conf
@@ -825,7 +825,7 @@ CONFIG_RAPIDIO_TSI57X=m
 CONFIG_RAPIDIO_CPS_XX=m
 CONFIG_RAPIDIO_TSI568=m
 CONFIG_RAPIDIO_CPS_GEN2=m
-# CONFIG_X86_SYSFB is not set
+CONFIG_X86_SYSFB=y
 
 #
 # Executable file formats / Emulations
@@ -7679,7 +7679,13 @@ CONFIG_DMI_SYSFS=m
 CONFIG_DMI_SCAN_MACHINE_NON_EFI_FALLBACK=y
 CONFIG_ISCSI_IBFT_FIND=y
 CONFIG_ISCSI_IBFT=m
-# CONFIG_GOOGLE_FIRMWARE is not set
+CONFIG_GOOGLE_FIRMWARE=y
+# CONFIG_GOOGLE_SMI is not set
+CONFIG_GOOGLE_COREBOOT_TABLE=y
+# CONFIG_GOOGLE_MEMCONSOLE_X86_LEGACY is not set
+CONFIG_GOOGLE_FRAMEBUFFER_COREBOOT=m
+# CONFIG_GOOGLE_MEMCONSOLE_COREBOOT is not set
+# CONFIG_GOOGLE_VPD is not set
 
 #
 # EFI (Extensible Firmware Interface) Support
diff --git a/gnu/packages/aux-files/linux-libre/4.4-x86_64.conf b/gnu/packages/aux-files/linux-libre/4.4-x86_64.conf
index adfb848f5b..0c7852ba48 100644
--- a/gnu/packages/aux-files/linux-libre/4.4-x86_64.conf
+++ b/gnu/packages/aux-files/linux-libre/4.4-x86_64.conf
@@ -795,7 +795,7 @@ CONFIG_RAPIDIO_TSI57X=m
 CONFIG_RAPIDIO_CPS_XX=m
 CONFIG_RAPIDIO_TSI568=m
 CONFIG_RAPIDIO_CPS_GEN2=m
-# CONFIG_X86_SYSFB is not set
+CONFIG_X86_SYSFB=y
 
 #
 # Executable file formats / Emulations
@@ -7461,7 +7461,13 @@ CONFIG_DMI_SYSFS=m
 CONFIG_DMI_SCAN_MACHINE_NON_EFI_FALLBACK=y
 CONFIG_ISCSI_IBFT_FIND=y
 CONFIG_ISCSI_IBFT=m
-# CONFIG_GOOGLE_FIRMWARE is not set
+CONFIG_GOOGLE_FIRMWARE=y
+# CONFIG_GOOGLE_SMI is not set
+CONFIG_GOOGLE_COREBOOT_TABLE=y
+# CONFIG_GOOGLE_MEMCONSOLE_X86_LEGACY is not set
+CONFIG_GOOGLE_FRAMEBUFFER_COREBOOT=m
+# CONFIG_GOOGLE_MEMCONSOLE_COREBOOT is not set
+# CONFIG_GOOGLE_VPD is not set
 
 #
 # EFI (Extensible Firmware Interface) Support
diff --git a/gnu/packages/aux-files/linux-libre/5.10-i686.conf b/gnu/packages/aux-files/linux-libre/5.10-i686.conf
index cb1fdc37ad..d24bbbcaa2 100644
--- a/gnu/packages/aux-files/linux-libre/5.10-i686.conf
+++ b/gnu/packages/aux-files/linux-libre/5.10-i686.conf
@@ -650,7 +650,7 @@ CONFIG_ALIX=y
 CONFIG_NET5501=y
 CONFIG_GEOS=y
 CONFIG_AMD_NB=y
-# CONFIG_X86_SYSFB is not set
+CONFIG_X86_SYSFB=y
 # end of Bus options (PCI etc.)
 
 #
@@ -674,7 +674,13 @@ CONFIG_ISCSI_IBFT_FIND=y
 CONFIG_ISCSI_IBFT=m
 CONFIG_FW_CFG_SYSFS=m
 # CONFIG_FW_CFG_SYSFS_CMDLINE is not set
-# CONFIG_GOOGLE_FIRMWARE is not set
+CONFIG_GOOGLE_FIRMWARE=y
+# CONFIG_GOOGLE_SMI is not set
+CONFIG_GOOGLE_COREBOOT_TABLE=y
+# CONFIG_GOOGLE_MEMCONSOLE_X86_LEGACY is not set
+CONFIG_GOOGLE_FRAMEBUFFER_COREBOOT=m
+# CONFIG_GOOGLE_MEMCONSOLE_COREBOOT is not set
+# CONFIG_GOOGLE_VPD is not set
 
 #
 # EFI (Extensible Firmware Interface) Support
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 cd61860af9..3a905e6286 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
@@ -643,7 +643,7 @@ CONFIG_MMCONF_FAM10H=y
 # CONFIG_ISA_BUS is not set
 CONFIG_ISA_DMA_API=y
 CONFIG_AMD_NB=y
-# CONFIG_X86_SYSFB is not set
+CONFIG_X86_SYSFB=y
 # end of Bus options (PCI etc.)
 
 #
@@ -670,7 +670,13 @@ CONFIG_ISCSI_IBFT_FIND=y
 CONFIG_ISCSI_IBFT=m
 CONFIG_FW_CFG_SYSFS=m
 # CONFIG_FW_CFG_SYSFS_CMDLINE is not set
-# CONFIG_GOOGLE_FIRMWARE is not set
+CONFIG_GOOGLE_FIRMWARE=y
+# CONFIG_GOOGLE_SMI is not set
+CONFIG_GOOGLE_COREBOOT_TABLE=y
+# CONFIG_GOOGLE_MEMCONSOLE_X86_LEGACY is not set
+CONFIG_GOOGLE_FRAMEBUFFER_COREBOOT=m
+# CONFIG_GOOGLE_MEMCONSOLE_COREBOOT is not set
+# CONFIG_GOOGLE_VPD is not set
 
 #
 # EFI (Extensible Firmware Interface) Support
diff --git a/gnu/packages/aux-files/linux-libre/5.14-arm.conf b/gnu/packages/aux-files/linux-libre/5.15-arm.conf
index fe395f36c6..08f4863548 100644
--- a/gnu/packages/aux-files/linux-libre/5.14-arm.conf
+++ b/gnu/packages/aux-files/linux-libre/5.15-arm.conf
@@ -1,17 +1,18 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/arm 5.14.0 Kernel Configuration
+# Linux/arm 5.15.4 Kernel Configuration
 #
-CONFIG_CC_VERSION_TEXT="gcc (Debian 8.3.0-6) 8.3.0"
+CONFIG_CC_VERSION_TEXT="gcc (GCC) 11.2.0"
 CONFIG_CC_IS_GCC=y
-CONFIG_GCC_VERSION=80300
+CONFIG_GCC_VERSION=110200
 CONFIG_CLANG_VERSION=0
 CONFIG_AS_IS_GNU=y
-CONFIG_AS_VERSION=23101
+CONFIG_AS_VERSION=23400
 CONFIG_LD_IS_BFD=y
-CONFIG_LD_VERSION=23101
+CONFIG_LD_VERSION=23400
 CONFIG_LLD_VERSION=0
 CONFIG_CC_HAS_ASM_GOTO=y
+CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y
 CONFIG_CC_HAS_ASM_INLINE=y
 CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y
 CONFIG_IRQ_WORK=y
@@ -22,6 +23,7 @@ CONFIG_BUILDTIME_TABLE_SORT=y
 #
 CONFIG_INIT_ENV_ARG_LIMIT=32
 # CONFIG_COMPILE_TEST is not set
+# CONFIG_WERROR is not set
 CONFIG_LOCALVERSION=""
 # CONFIG_LOCALVERSION_AUTO is not set
 CONFIG_BUILD_SALT=""
@@ -147,6 +149,7 @@ CONFIG_BUILD_BIN2C=y
 CONFIG_LOG_BUF_SHIFT=17
 CONFIG_LOG_CPU_MAX_BUF_SHIFT=12
 CONFIG_PRINTK_SAFE_LOG_BUF_SHIFT=13
+# CONFIG_PRINTK_INDEX is not set
 CONFIG_GENERIC_SCHED_CLOCK=y
 
 #
@@ -211,12 +214,12 @@ CONFIG_MULTIUSER=y
 CONFIG_FHANDLE=y
 CONFIG_POSIX_TIMERS=y
 CONFIG_PRINTK=y
-CONFIG_PRINTK_NMI=y
 CONFIG_BUG=y
 CONFIG_ELF_CORE=y
 CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_FUTEX_PI=y
+CONFIG_HAVE_FUTEX_CMPXCHG=y
 CONFIG_EPOLL=y
 CONFIG_SIGNALFD=y
 CONFIG_TIMERFD=y
@@ -269,7 +272,6 @@ CONFIG_HAVE_PROC_CPU=y
 CONFIG_NO_IOPORT_MAP=y
 CONFIG_STACKTRACE_SUPPORT=y
 CONFIG_LOCKDEP_SUPPORT=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
 CONFIG_ARCH_HAS_BANDGAP=y
 CONFIG_FIX_EARLYCON_MEM=y
 CONFIG_GENERIC_HWEIGHT=y
@@ -447,13 +449,10 @@ CONFIG_SOC_HAS_OMAP2_SDRC=y
 CONFIG_SOC_HAS_REALTIME_COUNTER=y
 CONFIG_SOC_OMAP3430=y
 CONFIG_SOC_TI81XX=y
-CONFIG_OMAP_PACKAGE_CBB=y
 
 #
 # OMAP Legacy Platform Data Board Type
 #
-CONFIG_MACH_OMAP3517EVM=y
-CONFIG_MACH_OMAP3_PANDORA=y
 # CONFIG_OMAP3_SDRC_AC_TIMING is not set
 # end of TI OMAP2/3/4 Specific Features
 
@@ -623,6 +622,7 @@ CONFIG_PARAVIRT=y
 # CONFIG_PARAVIRT_TIME_ACCOUNTING is not set
 CONFIG_XEN_DOM0=y
 CONFIG_XEN=y
+CONFIG_STACKPROTECTOR_PER_TASK=y
 # end of Kernel Features
 
 #
@@ -743,50 +743,6 @@ CONFIG_ARM_CPU_SUSPEND=y
 CONFIG_ARCH_HIBERNATION_POSSIBLE=y
 # end of Power management options
 
-#
-# Firmware Drivers
-#
-CONFIG_ARM_SCMI_PROTOCOL=y
-CONFIG_ARM_SCMI_POWER_DOMAIN=m
-# CONFIG_ARM_SCPI_PROTOCOL is not set
-# CONFIG_FIRMWARE_MEMMAP is not set
-CONFIG_DMIID=y
-CONFIG_DMI_SYSFS=y
-CONFIG_RASPBERRYPI_FIRMWARE=y
-CONFIG_TRUSTED_FOUNDATIONS=y
-# CONFIG_TURRIS_MOX_RWTM is not set
-# CONFIG_GOOGLE_FIRMWARE is not set
-
-#
-# EFI (Extensible Firmware Interface) Support
-#
-CONFIG_EFI_ESRT=y
-CONFIG_EFI_PARAMS_FROM_FDT=y
-CONFIG_EFI_RUNTIME_WRAPPERS=y
-CONFIG_EFI_GENERIC_STUB=y
-CONFIG_EFI_ARMSTUB_DTB_LOADER=y
-CONFIG_EFI_GENERIC_STUB_INITRD_CMDLINE_LOADER=y
-# CONFIG_EFI_BOOTLOADER_CONTROL is not set
-# CONFIG_EFI_CAPSULE_LOADER is not set
-# CONFIG_EFI_TEST is not set
-CONFIG_RESET_ATTACK_MITIGATION=y
-# CONFIG_EFI_DISABLE_PCI_DMA is not set
-# end of EFI (Extensible Firmware Interface) Support
-
-# CONFIG_IMX_DSP is not set
-# CONFIG_IMX_SCU is not set
-CONFIG_ARM_PSCI_FW=y
-CONFIG_HAVE_ARM_SMCCC=y
-CONFIG_HAVE_ARM_SMCCC_DISCOVERY=y
-CONFIG_ARM_SMCCC_SOC_ID=y
-
-#
-# Tegra firmware driver
-#
-# CONFIG_TEGRA_IVC is not set
-# end of Tegra firmware driver
-# end of Firmware Drivers
-
 CONFIG_ARM_CRYPTO=y
 CONFIG_CRYPTO_SHA1_ARM=m
 CONFIG_CRYPTO_SHA256_ARM=m
@@ -801,7 +757,6 @@ CONFIG_CRYPTO_POLY1305_ARM=m
 #
 CONFIG_CRASH_CORE=y
 CONFIG_KEXEC_CORE=y
-CONFIG_SET_FS=y
 CONFIG_KPROBES=y
 CONFIG_JUMP_LABEL=y
 # CONFIG_STATIC_KEYS_SELFTEST is not set
@@ -814,6 +769,7 @@ CONFIG_HAVE_KPROBES=y
 CONFIG_HAVE_KRETPROBES=y
 CONFIG_HAVE_OPTPROBES=y
 CONFIG_HAVE_NMI=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
 CONFIG_HAVE_ARCH_TRACEHOOK=y
 CONFIG_HAVE_DMA_CONTIGUOUS=y
 CONFIG_GENERIC_SMP_IDLE_THREAD=y
@@ -873,6 +829,11 @@ CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y
 # end of GCOV-based kernel profiling
 
 CONFIG_HAVE_GCC_PLUGINS=y
+CONFIG_GCC_PLUGINS=y
+# CONFIG_GCC_PLUGIN_CYC_COMPLEXITY is not set
+CONFIG_GCC_PLUGIN_LATENT_ENTROPY=y
+# CONFIG_GCC_PLUGIN_RANDSTRUCT is not set
+CONFIG_GCC_PLUGIN_ARM_SSP_PER_TASK=y
 # end of General architecture-dependent options
 
 CONFIG_RT_MUTEXES=y
@@ -894,16 +855,14 @@ CONFIG_MODPROBE_PATH="/run/current-system/profile/bin/modprobe"
 CONFIG_MODULES_TREE_LOOKUP=y
 CONFIG_BLOCK=y
 CONFIG_BLK_RQ_ALLOC_TIME=y
-CONFIG_BLK_SCSI_REQUEST=y
 CONFIG_BLK_CGROUP_RWSTAT=y
-CONFIG_BLK_DEV_BSG=y
+CONFIG_BLK_DEV_BSG_COMMON=y
 CONFIG_BLK_DEV_BSGLIB=y
 CONFIG_BLK_DEV_INTEGRITY=y
 CONFIG_BLK_DEV_INTEGRITY_T10=y
 # CONFIG_BLK_DEV_ZONED is not set
 CONFIG_BLK_DEV_THROTTLING=y
 # CONFIG_BLK_DEV_THROTTLING_LOW is not set
-# CONFIG_BLK_CMDLINE_PARSER is not set
 CONFIG_BLK_WBT=y
 CONFIG_BLK_WBT_MQ=y
 # CONFIG_BLK_CGROUP_IOLATENCY is not set
@@ -943,6 +902,7 @@ CONFIG_BLK_MQ_PCI=y
 CONFIG_BLK_MQ_VIRTIO=y
 CONFIG_BLK_MQ_RDMA=y
 CONFIG_BLK_PM=y
+CONFIG_BLOCK_HOLDER_DEPRECATED=y
 
 #
 # IO Schedulers
@@ -1029,12 +989,21 @@ CONFIG_ZBUD=y
 CONFIG_ZSMALLOC=m
 # CONFIG_ZSMALLOC_STAT is not set
 CONFIG_GENERIC_EARLY_IOREMAP=y
+CONFIG_PAGE_IDLE_FLAG=y
 # CONFIG_IDLE_PAGE_TRACKING is not set
 CONFIG_ZONE_DMA=y
 CONFIG_HMM_MIRROR=y
 # CONFIG_PERCPU_STATS is not set
 # CONFIG_GUP_TEST is not set
 CONFIG_KMAP_LOCAL=y
+
+#
+# Data Access Monitoring
+#
+CONFIG_DAMON=y
+CONFIG_DAMON_VADDR=y
+# CONFIG_DAMON_DBGFS is not set
+# end of Data Access Monitoring
 # end of Memory Management options
 
 CONFIG_NET=y
@@ -1050,6 +1019,7 @@ CONFIG_PACKET=y
 CONFIG_PACKET_DIAG=m
 CONFIG_UNIX=y
 CONFIG_UNIX_SCM=y
+CONFIG_AF_UNIX_OOB=y
 CONFIG_UNIX_DIAG=m
 # CONFIG_TLS is not set
 CONFIG_XFRM=y
@@ -1153,6 +1123,7 @@ CONFIG_IPV6_PIMSM_V2=y
 # CONFIG_IPV6_SEG6_LWTUNNEL is not set
 # CONFIG_IPV6_SEG6_HMAC is not set
 # CONFIG_IPV6_RPL_LWTUNNEL is not set
+# CONFIG_IPV6_IOAM6_LWTUNNEL is not set
 # CONFIG_NETLABEL is not set
 CONFIG_MPTCP=y
 CONFIG_INET_MPTCP_DIAG=m
@@ -1570,7 +1541,6 @@ CONFIG_BRIDGE_VLAN_FILTERING=y
 CONFIG_BRIDGE_MRP=y
 CONFIG_BRIDGE_CFM=y
 CONFIG_NET_DSA=m
-CONFIG_NET_DSA_TAG_8021Q=m
 CONFIG_NET_DSA_TAG_AR9331=m
 CONFIG_NET_DSA_TAG_BRCM_COMMON=m
 CONFIG_NET_DSA_TAG_BRCM=m
@@ -1883,6 +1853,7 @@ CONFIG_AF_RXRPC_IPV6=y
 # CONFIG_AF_RXRPC_DEBUG is not set
 CONFIG_RXKAD=y
 # CONFIG_AF_KCM is not set
+CONFIG_MCTP=m
 CONFIG_FIB_RULES=y
 CONFIG_WIRELESS=y
 CONFIG_WIRELESS_EXT=y
@@ -2005,7 +1976,6 @@ CONFIG_PCIE_BUS_DEFAULT=y
 #
 CONFIG_PCI_MVEBU=y
 # CONFIG_PCI_FTPCI100 is not set
-# CONFIG_PCI_IXP4XX is not set
 CONFIG_PCI_TEGRA=y
 CONFIG_PCI_HOST_COMMON=y
 CONFIG_PCI_HOST_GENERIC=y
@@ -2029,6 +1999,7 @@ CONFIG_PCI_EXYNOS=m
 CONFIG_PCI_IMX6=y
 # CONFIG_PCI_LAYERSCAPE is not set
 # CONFIG_PCIE_ARMADA_8K is not set
+CONFIG_PCIE_ROCKCHIP_DW_HOST=y
 # CONFIG_PCI_MESON is not set
 # end of DesignWare PCI Core Support
 
@@ -2123,7 +2094,6 @@ CONFIG_ARM_CCI400_PORT_CTRL=y
 CONFIG_MVEBU_MBUS=y
 CONFIG_OMAP_INTERCONNECT=y
 CONFIG_OMAP_OCP2SCP=m
-CONFIG_SIMPLE_PM_BUS=y
 CONFIG_SUN50I_DE2_BUS=y
 CONFIG_SUNXI_RSB=y
 # CONFIG_TEGRA_GMI is not set
@@ -2137,6 +2107,65 @@ CONFIG_MHI_BUS_PCI_GENERIC=m
 
 CONFIG_CONNECTOR=y
 CONFIG_PROC_EVENTS=y
+
+#
+# Firmware Drivers
+#
+
+#
+# ARM System Control and Management Interface Protocol
+#
+CONFIG_ARM_SCMI_PROTOCOL=y
+CONFIG_ARM_SCMI_HAVE_TRANSPORT=y
+CONFIG_ARM_SCMI_HAVE_SHMEM=y
+CONFIG_ARM_SCMI_TRANSPORT_MAILBOX=y
+CONFIG_ARM_SCMI_TRANSPORT_SMC=y
+CONFIG_ARM_SCMI_POWER_DOMAIN=m
+# end of ARM System Control and Management Interface Protocol
+
+# CONFIG_ARM_SCPI_PROTOCOL is not set
+# CONFIG_FIRMWARE_MEMMAP is not set
+CONFIG_DMIID=y
+CONFIG_DMI_SYSFS=y
+CONFIG_RASPBERRYPI_FIRMWARE=y
+CONFIG_QCOM_SCM=m
+# CONFIG_QCOM_SCM_DOWNLOAD_MODE_DEFAULT is not set
+CONFIG_SYSFB=y
+# CONFIG_SYSFB_SIMPLEFB is not set
+CONFIG_TRUSTED_FOUNDATIONS=y
+# CONFIG_TURRIS_MOX_RWTM is not set
+# CONFIG_GOOGLE_FIRMWARE is not set
+
+#
+# EFI (Extensible Firmware Interface) Support
+#
+CONFIG_EFI_ESRT=y
+CONFIG_EFI_PARAMS_FROM_FDT=y
+CONFIG_EFI_RUNTIME_WRAPPERS=y
+CONFIG_EFI_GENERIC_STUB=y
+CONFIG_EFI_ARMSTUB_DTB_LOADER=y
+CONFIG_EFI_GENERIC_STUB_INITRD_CMDLINE_LOADER=y
+# CONFIG_EFI_BOOTLOADER_CONTROL is not set
+# CONFIG_EFI_CAPSULE_LOADER is not set
+# CONFIG_EFI_TEST is not set
+CONFIG_RESET_ATTACK_MITIGATION=y
+# CONFIG_EFI_DISABLE_PCI_DMA is not set
+# end of EFI (Extensible Firmware Interface) Support
+
+# CONFIG_IMX_DSP is not set
+# CONFIG_IMX_SCU is not set
+CONFIG_ARM_PSCI_FW=y
+CONFIG_HAVE_ARM_SMCCC=y
+CONFIG_HAVE_ARM_SMCCC_DISCOVERY=y
+CONFIG_ARM_SMCCC_SOC_ID=y
+
+#
+# Tegra firmware driver
+#
+# CONFIG_TEGRA_IVC is not set
+# end of Tegra firmware driver
+# end of Firmware Drivers
+
 CONFIG_GNSS=m
 CONFIG_MTD=y
 # CONFIG_MTD_TESTS is not set
@@ -2157,6 +2186,10 @@ CONFIG_MTD_OF_PARTS=m
 CONFIG_MTD_BLKDEVS=m
 CONFIG_MTD_BLOCK=m
 CONFIG_MTD_BLOCK_RO=m
+
+#
+# Note that in some cases UBI block is preferred. See MTD_UBI_BLOCK.
+#
 # CONFIG_FTL is not set
 # CONFIG_NFTL is not set
 # CONFIG_INFTL is not set
@@ -2383,6 +2416,7 @@ CONFIG_TIFM_CORE=m
 CONFIG_TIFM_7XX1=m
 CONFIG_ICS932S401=m
 CONFIG_ENCLOSURE_SERVICES=m
+CONFIG_GEHC_ACHC=m
 # CONFIG_HP_ILO is not set
 CONFIG_APDS9802ALS=m
 CONFIG_ISL29003=m
@@ -2444,6 +2478,7 @@ CONFIG_UACCE=m
 #
 CONFIG_SCSI_MOD=m
 CONFIG_RAID_ATTRS=m
+CONFIG_SCSI_COMMON=m
 CONFIG_SCSI=m
 CONFIG_SCSI_DMA=y
 CONFIG_SCSI_NETLINK=y
@@ -2456,6 +2491,7 @@ CONFIG_BLK_DEV_SD=m
 CONFIG_CHR_DEV_ST=m
 CONFIG_BLK_DEV_SR=m
 CONFIG_CHR_DEV_SG=m
+CONFIG_BLK_DEV_BSG=y
 CONFIG_CHR_DEV_SCH=m
 CONFIG_SCSI_ENCLOSURE=m
 CONFIG_SCSI_CONSTANTS=y
@@ -2514,6 +2550,7 @@ CONFIG_SCSI_UFSHCD_PCI=m
 # CONFIG_SCSI_UFSHCD_PLATFORM is not set
 # CONFIG_SCSI_UFS_BSG is not set
 CONFIG_SCSI_UFS_CRYPTO=y
+CONFIG_SCSI_UFS_HPB=y
 # CONFIG_SCSI_HPTIOP is not set
 # CONFIG_SCSI_MYRB is not set
 # CONFIG_SCSI_MYRS is not set
@@ -2689,7 +2726,6 @@ CONFIG_DM_THIN_PROVISIONING=m
 CONFIG_DM_CACHE=m
 CONFIG_DM_CACHE_SMQ=m
 # CONFIG_DM_WRITECACHE is not set
-# CONFIG_DM_EBS is not set
 CONFIG_DM_ERA=m
 CONFIG_DM_CLONE=m
 CONFIG_DM_MIRROR=m
@@ -2894,7 +2930,8 @@ CONFIG_CHELSIO_T4VF=m
 CONFIG_CHELSIO_LIB=m
 CONFIG_CHELSIO_INLINE_CRYPTO=y
 CONFIG_NET_VENDOR_CIRRUS=y
-# CONFIG_CS89x0 is not set
+CONFIG_CS89x0=m
+CONFIG_CS89x0_PLATFORM=m
 CONFIG_NET_VENDOR_CISCO=y
 CONFIG_ENIC=m
 CONFIG_NET_VENDOR_CORTINA=y
@@ -2972,6 +3009,8 @@ CONFIG_I40EVF=m
 # CONFIG_IGC is not set
 CONFIG_NET_VENDOR_MICROSOFT=y
 CONFIG_JME=m
+CONFIG_NET_VENDOR_LITEX=y
+CONFIG_LITEX_LITEETH=m
 CONFIG_NET_VENDOR_MARVELL=y
 # CONFIG_MV643XX_ETH is not set
 CONFIG_MVMDIO=m
@@ -3172,6 +3211,7 @@ CONFIG_LSI_ET1011C_PHY=m
 CONFIG_MARVELL_PHY=m
 # CONFIG_MARVELL_10G_PHY is not set
 CONFIG_MARVELL_88X2222_PHY=m
+CONFIG_MAXLINEAR_GPHY=m
 CONFIG_MEDIATEK_GE_PHY=m
 CONFIG_MICREL_PHY=m
 CONFIG_MICROCHIP_PHY=m
@@ -3197,6 +3237,10 @@ CONFIG_DP83869_PHY=m
 CONFIG_VITESSE_PHY=m
 # CONFIG_XILINX_GMII2RGMII is not set
 # CONFIG_MICREL_KS8995MA is not set
+
+#
+# MCTP Device Drivers
+#
 CONFIG_MDIO_DEVICE=y
 CONFIG_MDIO_BUS=y
 CONFIG_FWNODE_MDIO=y
@@ -3439,7 +3483,6 @@ CONFIG_P54_USB=m
 CONFIG_P54_PCI=m
 # CONFIG_P54_SPI is not set
 CONFIG_P54_LEDS=y
-# CONFIG_PRISM54 is not set
 CONFIG_WLAN_VENDOR_MARVELL=y
 CONFIG_LIBERTAS=m
 CONFIG_LIBERTAS_USB=m
@@ -3566,6 +3609,7 @@ CONFIG_IEEE802154_ADF7242=m
 CONFIG_WWAN=y
 # CONFIG_WWAN_HWSIM is not set
 CONFIG_MHI_WWAN_CTRL=m
+CONFIG_MHI_WWAN_MBIM=m
 # end of Wireless WAN
 
 CONFIG_XEN_NETDEV_FRONTEND=m
@@ -3575,7 +3619,6 @@ CONFIG_USB4_NET=m
 CONFIG_NETDEVSIM=m
 CONFIG_NET_FAILOVER=m
 # CONFIG_ISDN is not set
-# CONFIG_NVM is not set
 
 #
 # Input device support
@@ -3965,6 +4008,7 @@ CONFIG_HW_RANDOM_VIRTIO=m
 CONFIG_HW_RANDOM_EXYNOS=m
 CONFIG_HW_RANDOM_CCTRNG=m
 CONFIG_HW_RANDOM_XIPHERA=m
+CONFIG_HW_RANDOM_ARM_SMCCC_TRNG=m
 # CONFIG_APPLICOM is not set
 CONFIG_DEVMEM=y
 CONFIG_DEVPORT=y
@@ -3982,9 +4026,8 @@ CONFIG_TCG_TIS_I2C_CR50=m
 CONFIG_XILLYBUS_CLASS=m
 # CONFIG_XILLYBUS is not set
 CONFIG_XILLYUSB=m
-# end of Character devices
-
 # CONFIG_RANDOM_TRUST_BOOTLOADER is not set
+# end of Character devices
 
 #
 # I2C support
@@ -4084,6 +4127,7 @@ CONFIG_I2C_VIPERBOARD=m
 # Other I2C/SMBus bus drivers
 #
 CONFIG_I2C_CROS_EC_TUNNEL=m
+CONFIG_I2C_VIRTIO=m
 # end of I2C Hardware Bus support
 
 # CONFIG_I2C_STUB is not set
@@ -4129,6 +4173,7 @@ CONFIG_SPI_ORION=m
 CONFIG_SPI_PL022=m
 # CONFIG_SPI_PXA2XX is not set
 CONFIG_SPI_ROCKCHIP=m
+CONFIG_SPI_ROCKCHIP_SFC=m
 # CONFIG_SPI_S3C64XX is not set
 # CONFIG_SPI_SC18IS602 is not set
 # CONFIG_SPI_SIFIVE is not set
@@ -4192,6 +4237,7 @@ CONFIG_PPS_CLIENT_PARPORT=m
 # PTP clock support
 #
 CONFIG_PTP_1588_CLOCK=y
+CONFIG_PTP_1588_CLOCK_OPTIONAL=y
 CONFIG_PTP_1588_CLOCK_QORIQ=m
 
 #
@@ -4232,6 +4278,7 @@ CONFIG_PINCTRL_IMX8MM=y
 CONFIG_PINCTRL_IMX8MN=y
 CONFIG_PINCTRL_IMX8MP=y
 CONFIG_PINCTRL_IMX8MQ=y
+# CONFIG_PINCTRL_IMX8ULP is not set
 CONFIG_PINCTRL_MVEBU=y
 CONFIG_PINCTRL_ARMADA_370=y
 CONFIG_PINCTRL_ARMADA_375=y
@@ -4309,6 +4356,7 @@ CONFIG_GPIO_MVEBU=y
 CONFIG_GPIO_MXC=y
 CONFIG_GPIO_OMAP=y
 CONFIG_GPIO_PL061=y
+CONFIG_GPIO_ROCKCHIP=m
 # CONFIG_GPIO_SAMA5D2_PIOBU is not set
 CONFIG_GPIO_SIFIVE=y
 # CONFIG_GPIO_SYSCON is not set
@@ -4382,6 +4430,7 @@ CONFIG_GPIO_VIPERBOARD=m
 #
 CONFIG_GPIO_AGGREGATOR=m
 # CONFIG_GPIO_MOCKUP is not set
+CONFIG_GPIO_VIRTIO=m
 # end of Virtual GPIO drivers
 
 CONFIG_W1=m
@@ -4465,7 +4514,6 @@ CONFIG_BATTERY_BQ27XXX_HDQ=m
 CONFIG_CHARGER_AXP20X=m
 CONFIG_BATTERY_AXP20X=m
 CONFIG_AXP20X_POWER=m
-CONFIG_AXP288_FUEL_GAUGE=m
 # CONFIG_BATTERY_MAX17040 is not set
 # CONFIG_BATTERY_MAX17042 is not set
 CONFIG_BATTERY_MAX1721X=m
@@ -4480,6 +4528,7 @@ CONFIG_CHARGER_GPIO=m
 # CONFIG_CHARGER_LT3651 is not set
 # CONFIG_CHARGER_LTC4162L is not set
 # CONFIG_CHARGER_DETECTOR_MAX14656 is not set
+CONFIG_CHARGER_MT6360=m
 CONFIG_CHARGER_BQ2415X=m
 # CONFIG_CHARGER_BQ24190 is not set
 # CONFIG_CHARGER_BQ24257 is not set
@@ -4494,6 +4543,7 @@ CONFIG_CHARGER_BQ2415X=m
 CONFIG_BATTERY_RT5033=m
 # CONFIG_CHARGER_RT9455 is not set
 CONFIG_CHARGER_CROS_USBPD=m
+CONFIG_CHARGER_CROS_PCHG=m
 # CONFIG_CHARGER_UCS1002 is not set
 CONFIG_CHARGER_BD99954=m
 CONFIG_HWMON=y
@@ -4520,6 +4570,7 @@ CONFIG_SENSORS_ADT7462=m
 CONFIG_SENSORS_ADT7470=m
 CONFIG_SENSORS_ADT7475=m
 CONFIG_SENSORS_AHT10=m
+CONFIG_SENSORS_AQUACOMPUTER_D5NEXT=m
 # CONFIG_SENSORS_AS370 is not set
 CONFIG_SENSORS_ASC7621=m
 CONFIG_SENSORS_AXI_FAN_CONTROL=m
@@ -4611,6 +4662,7 @@ CONFIG_SENSORS_NCT6775=m
 CONFIG_SENSORS_PWM_FAN=m
 CONFIG_SENSORS_RASPBERRYPI_HWMON=m
 CONFIG_SENSORS_SBTSI=m
+CONFIG_SENSORS_SBRMI=m
 # CONFIG_SENSORS_SHT15 is not set
 CONFIG_SENSORS_SHT21=m
 # CONFIG_SENSORS_SHT3x is not set
@@ -4734,7 +4786,6 @@ CONFIG_WATCHDOG_HRTIMER_PRETIMEOUT=y
 # Watchdog Device Drivers
 #
 CONFIG_SOFT_WATCHDOG=m
-CONFIG_BD70528_WATCHDOG=m
 CONFIG_BD957XMUF_WATCHDOG=m
 CONFIG_DA9052_WATCHDOG=m
 # CONFIG_GPIO_WATCHDOG is not set
@@ -4947,6 +4998,8 @@ CONFIG_MFD_KHADAS_MCU=m
 CONFIG_MFD_QCOM_PM8008=m
 CONFIG_MFD_VEXPRESS_SYSREG=y
 # CONFIG_MFD_INTEL_M10_BMC is not set
+CONFIG_MFD_RSMU_I2C=m
+CONFIG_MFD_RSMU_SPI=m
 # end of Multifunction device drivers
 
 CONFIG_REGULATOR=y
@@ -5019,7 +5072,9 @@ CONFIG_REGULATOR_RT4801=m
 CONFIG_REGULATOR_RT4831=m
 CONFIG_REGULATOR_RT6160=m
 CONFIG_REGULATOR_RT6245=m
+CONFIG_REGULATOR_RTQ2134=m
 CONFIG_REGULATOR_RTMV20=m
+CONFIG_REGULATOR_RTQ6752=m
 CONFIG_REGULATOR_S2MPA01=m
 CONFIG_REGULATOR_S2MPS11=m
 CONFIG_REGULATOR_S5M8767=m
@@ -5609,7 +5664,9 @@ CONFIG_VIDEO_IMX274=m
 CONFIG_VIDEO_IMX290=m
 CONFIG_VIDEO_IMX319=m
 CONFIG_VIDEO_IMX334=m
+CONFIG_VIDEO_IMX335=m
 CONFIG_VIDEO_IMX355=m
+CONFIG_VIDEO_IMX412=m
 CONFIG_VIDEO_OV02A10=m
 CONFIG_VIDEO_OV2640=m
 CONFIG_VIDEO_OV2659=m
@@ -5630,6 +5687,7 @@ CONFIG_VIDEO_OV7670=m
 CONFIG_VIDEO_OV7740=m
 CONFIG_VIDEO_OV8856=m
 CONFIG_VIDEO_OV8865=m
+CONFIG_VIDEO_OV9282=m
 CONFIG_VIDEO_OV9640=m
 CONFIG_VIDEO_OV9650=m
 CONFIG_VIDEO_OV13858=m
@@ -5914,6 +5972,7 @@ CONFIG_IMX_IPUV3_CORE=m
 CONFIG_DRM=m
 CONFIG_DRM_MIPI_DBI=m
 CONFIG_DRM_MIPI_DSI=y
+CONFIG_DRM_DP_AUX_BUS=m
 # CONFIG_DRM_DP_AUX_CHARDEV is not set
 # CONFIG_DRM_DEBUG_SELFTEST is not set
 CONFIG_DRM_KMS_HELPER=m
@@ -6011,12 +6070,12 @@ CONFIG_OMAP2_DSS_MIN_FCK_PER_PCK=0
 CONFIG_OMAP2_DSS_SLEEP_AFTER_VENC_RESET=y
 CONFIG_DRM_TILCDC=m
 CONFIG_DRM_QXL=m
-CONFIG_DRM_BOCHS=m
 CONFIG_DRM_VIRTIO_GPU=m
 CONFIG_DRM_MSM=m
 CONFIG_DRM_MSM_GPU_STATE=y
 # CONFIG_DRM_MSM_REGISTER_LOGGING is not set
 # CONFIG_DRM_MSM_GPU_SUDO is not set
+CONFIG_DRM_MSM_HDMI_HDCP=y
 CONFIG_DRM_MSM_DP=y
 CONFIG_DRM_MSM_DSI=y
 CONFIG_DRM_MSM_DSI_28NM_PHY=y
@@ -6045,7 +6104,9 @@ CONFIG_DRM_PANEL_ELIDA_KD35T133=m
 CONFIG_DRM_PANEL_FEIXIN_K101_IM2BA02=m
 # CONFIG_DRM_PANEL_FEIYANG_FY07024DI26A30D is not set
 CONFIG_DRM_PANEL_ILITEK_IL9322=m
+CONFIG_DRM_PANEL_ILITEK_ILI9341=m
 CONFIG_DRM_PANEL_ILITEK_ILI9881C=m
+CONFIG_DRM_PANEL_INNOLUX_EJ030NA=m
 # CONFIG_DRM_PANEL_INNOLUX_P079ZCA is not set
 # CONFIG_DRM_PANEL_JDI_LT070ME05000 is not set
 # CONFIG_DRM_PANEL_KHADAS_TS050 is not set
@@ -6068,6 +6129,8 @@ CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN=m
 # CONFIG_DRM_PANEL_RAYDIUM_RM67191 is not set
 # CONFIG_DRM_PANEL_RAYDIUM_RM68200 is not set
 # CONFIG_DRM_PANEL_RONBO_RB070D30 is not set
+CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20=m
+CONFIG_DRM_PANEL_SAMSUNG_DB7430=m
 # CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set
 # CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 is not set
 # CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03 is not set
@@ -6090,6 +6153,7 @@ CONFIG_DRM_PANEL_SONY_ACX424AKP=m
 # CONFIG_DRM_PANEL_TPO_TPG110 is not set
 # CONFIG_DRM_PANEL_TRULY_NT35597_WQXGA is not set
 # CONFIG_DRM_PANEL_VISIONOX_RM69299 is not set
+CONFIG_DRM_PANEL_WIDECHIPS_WS2401=m
 CONFIG_DRM_PANEL_XINPENG_XPP055C272=m
 # end of Display Panels
 
@@ -6154,6 +6218,7 @@ CONFIG_DRM_ETNAVIV=m
 CONFIG_DRM_ETNAVIV_THERMAL=y
 # CONFIG_DRM_MXSFB is not set
 # CONFIG_DRM_ARCPGU is not set
+CONFIG_DRM_BOCHS=m
 CONFIG_DRM_CIRRUS_QEMU=m
 CONFIG_DRM_GM12U320=m
 CONFIG_DRM_SIMPLEDRM=m
@@ -6259,7 +6324,7 @@ CONFIG_FB_MB862XX=m
 CONFIG_FB_MB862XX_PCI_GDC=y
 CONFIG_FB_MB862XX_I2C=y
 CONFIG_FB_MX3=y
-CONFIG_FB_SIMPLE=y
+CONFIG_FB_SIMPLE=m
 # CONFIG_FB_SSD1307 is not set
 # CONFIG_FB_SM712 is not set
 # end of Frame buffer Devices
@@ -6442,6 +6507,7 @@ CONFIG_SND_HDA_CODEC_SIGMATEL=m
 CONFIG_SND_HDA_CODEC_VIA=m
 CONFIG_SND_HDA_CODEC_HDMI=m
 CONFIG_SND_HDA_CODEC_CIRRUS=m
+CONFIG_SND_HDA_CODEC_CS8409=m
 CONFIG_SND_HDA_CODEC_CONEXANT=m
 CONFIG_SND_HDA_CODEC_CA0110=m
 CONFIG_SND_HDA_CODEC_CA0132=m
@@ -6673,6 +6739,7 @@ CONFIG_SND_SOC_ES8328=m
 CONFIG_SND_SOC_ES8328_I2C=m
 CONFIG_SND_SOC_ES8328_SPI=m
 # CONFIG_SND_SOC_GTM601 is not set
+CONFIG_SND_SOC_ICS43432=m
 # CONFIG_SND_SOC_INNO_RK3036 is not set
 # CONFIG_SND_SOC_MAX98088 is not set
 CONFIG_SND_SOC_MAX98090=m
@@ -6949,7 +7016,7 @@ CONFIG_USB_HIDDEV=y
 
 CONFIG_USB_OHCI_LITTLE_ENDIAN=y
 CONFIG_USB_SUPPORT=y
-CONFIG_USB_COMMON=y
+CONFIG_USB_COMMON=m
 CONFIG_USB_LED_TRIG=y
 CONFIG_USB_ULPI_BUS=m
 CONFIG_USB_CONN_GPIO=m
@@ -7746,6 +7813,7 @@ CONFIG_SYNC_FILE=y
 # CONFIG_DMABUF_DEBUG is not set
 # CONFIG_DMABUF_SELFTESTS is not set
 # CONFIG_DMABUF_HEAPS is not set
+# CONFIG_DMABUF_SYSFS_STATS is not set
 # end of DMABUF options
 
 # CONFIG_AUXDISPLAY is not set
@@ -7776,11 +7844,13 @@ CONFIG_VIRTIO_MMIO=m
 CONFIG_VIRTIO_DMA_SHARED_BUFFER=m
 CONFIG_VDPA=m
 # CONFIG_VDPA_SIM is not set
+CONFIG_VDPA_USER=m
 CONFIG_IFCVF=m
 CONFIG_MLX5_VDPA=y
 CONFIG_MLX5_VDPA_NET=m
 # CONFIG_VP_VDPA is not set
 CONFIG_VHOST_IOTLB=m
+CONFIG_VHOST_RING=m
 CONFIG_VHOST=m
 CONFIG_VHOST_MENU=y
 CONFIG_VHOST_NET=m
@@ -7901,6 +7971,7 @@ CONFIG_88EU_AP_MODE=y
 # CONFIG_FIREWIRE_SERIAL is not set
 # CONFIG_GS_FPGABOOT is not set
 # CONFIG_UNISYSSPAR is not set
+CONFIG_COMMON_CLK_XLNX_CLKWZRD=m
 # CONFIG_FB_TFT is not set
 # CONFIG_KS7010 is not set
 CONFIG_BCM_VIDEOCORE=y
@@ -8067,6 +8138,7 @@ CONFIG_BCM2835_MBOX=y
 # CONFIG_MAILBOX_TEST is not set
 # CONFIG_TEGRA_HSP_MBOX is not set
 CONFIG_SUN6I_MSGBOX=m
+CONFIG_IOMMU_IOVA=m
 CONFIG_IOMMU_API=y
 CONFIG_IOMMU_SUPPORT=y
 
@@ -8080,6 +8152,8 @@ CONFIG_IOMMU_IO_PGTABLE_LPAE=y
 # end of Generic IOMMU Pagetable Support
 
 # CONFIG_IOMMU_DEBUGFS is not set
+# CONFIG_IOMMU_DEFAULT_DMA_STRICT is not set
+CONFIG_IOMMU_DEFAULT_DMA_LAZY=y
 # CONFIG_IOMMU_DEFAULT_PASSTHROUGH is not set
 CONFIG_OF_IOMMU=y
 CONFIG_OMAP_IOMMU=y
@@ -8389,6 +8463,7 @@ CONFIG_CCS811=m
 CONFIG_SCD30_CORE=m
 CONFIG_SCD30_I2C=m
 # CONFIG_SENSIRION_SGP30 is not set
+CONFIG_SENSIRION_SGP40=m
 # CONFIG_SPS30_I2C is not set
 # CONFIG_VZ89X is not set
 # end of Chemical Sensors
@@ -8650,6 +8725,7 @@ CONFIG_HID_SENSOR_DEVICE_ROTATION=m
 #
 # Digital potentiometers
 #
+CONFIG_AD5110=m
 # CONFIG_AD5272 is not set
 # CONFIG_DS1803 is not set
 # CONFIG_MAX5432 is not set
@@ -8992,11 +9068,11 @@ CONFIG_F2FS_FS_SECURITY=y
 # CONFIG_F2FS_CHECK_FS is not set
 # CONFIG_F2FS_FAULT_INJECTION is not set
 # CONFIG_F2FS_FS_COMPRESSION is not set
+# CONFIG_F2FS_IOSTAT is not set
 CONFIG_FS_POSIX_ACL=y
 CONFIG_EXPORTFS=y
 CONFIG_EXPORTFS_BLOCK_OPS=y
 CONFIG_FILE_LOCKING=y
-CONFIG_MANDATORY_FILE_LOCKING=y
 # CONFIG_FS_ENCRYPTION is not set
 CONFIG_FS_VERITY=y
 # CONFIG_FS_VERITY_DEBUG is not set
@@ -9029,15 +9105,12 @@ CONFIG_OVERLAY_FS=m
 # Caches
 #
 CONFIG_NETFS_SUPPORT=m
-# CONFIG_NETFS_STATS is not set
+CONFIG_NETFS_STATS=y
 CONFIG_FSCACHE=m
 CONFIG_FSCACHE_STATS=y
-# CONFIG_FSCACHE_HISTOGRAM is not set
 # CONFIG_FSCACHE_DEBUG is not set
-# CONFIG_FSCACHE_OBJECT_LIST is not set
 CONFIG_CACHEFILES=m
 # CONFIG_CACHEFILES_DEBUG is not set
-# CONFIG_CACHEFILES_HISTOGRAM is not set
 # end of Caches
 
 #
@@ -9063,6 +9136,9 @@ CONFIG_EXFAT_DEFAULT_IOCHARSET="utf8"
 CONFIG_NTFS_FS=m
 # CONFIG_NTFS_DEBUG is not set
 # CONFIG_NTFS_RW is not set
+CONFIG_NTFS3_FS=m
+CONFIG_NTFS3_LZX_XPRESS=y
+# CONFIG_NTFS3_FS_POSIX_ACL is not set
 # end of DOS/FAT/EXFAT/NT Filesystems
 
 #
@@ -9214,7 +9290,6 @@ CONFIG_CEPH_FS_SECURITY_LABEL=y
 CONFIG_CIFS=m
 # CONFIG_CIFS_STATS2 is not set
 CONFIG_CIFS_ALLOW_INSECURE_LEGACY=y
-CONFIG_CIFS_WEAK_PW_HASH=y
 CONFIG_CIFS_UPCALL=y
 CONFIG_CIFS_XATTR=y
 CONFIG_CIFS_POSIX=y
@@ -9225,6 +9300,8 @@ CONFIG_CIFS_DFS_UPCALL=y
 CONFIG_CIFS_SWN_UPCALL=y
 # CONFIG_CIFS_SMB_DIRECT is not set
 CONFIG_CIFS_FSCACHE=y
+# CONFIG_SMB_SERVER is not set
+CONFIG_SMBFS_COMMON=m
 CONFIG_CODA_FS=m
 CONFIG_AFS_FS=m
 # CONFIG_AFS_DEBUG is not set
@@ -9378,13 +9455,20 @@ CONFIG_LSM="yama,loadpin,safesetid,integrity,apparmor,selinux,smack,tomoyo"
 #
 # Kernel hardening options
 #
+CONFIG_GCC_PLUGIN_STRUCTLEAK=y
 
 #
 # Memory initialization
 #
-CONFIG_INIT_STACK_NONE=y
+# CONFIG_INIT_STACK_NONE is not set
+# CONFIG_GCC_PLUGIN_STRUCTLEAK_USER is not set
+# CONFIG_GCC_PLUGIN_STRUCTLEAK_BYREF is not set
+CONFIG_GCC_PLUGIN_STRUCTLEAK_BYREF_ALL=y
+# CONFIG_GCC_PLUGIN_STRUCTLEAK_VERBOSE is not set
 CONFIG_INIT_ON_ALLOC_DEFAULT_ON=y
 # CONFIG_INIT_ON_FREE_DEFAULT_ON is not set
+CONFIG_CC_HAS_ZERO_CALL_USED_REGS=y
+# CONFIG_ZERO_CALL_USED_REGS is not set
 # end of Memory initialization
 # end of Kernel hardening options
 # end of Security options
@@ -9574,6 +9658,7 @@ CONFIG_CRYPTO_LIB_POLY1305_GENERIC=m
 CONFIG_CRYPTO_LIB_POLY1305=m
 CONFIG_CRYPTO_LIB_CHACHA20POLY1305=m
 CONFIG_CRYPTO_LIB_SHA256=y
+CONFIG_CRYPTO_LIB_SM4=m
 CONFIG_CRYPTO_HW=y
 CONFIG_CRYPTO_DEV_ALLWINNER=y
 CONFIG_CRYPTO_DEV_SUN4I_SS=m
@@ -9709,6 +9794,7 @@ CONFIG_ARCH_HAS_TEARDOWN_DMA_OPS=y
 CONFIG_ARCH_HAS_SYNC_DMA_FOR_DEVICE=y
 CONFIG_ARCH_HAS_SYNC_DMA_FOR_CPU=y
 CONFIG_SWIOTLB=y
+CONFIG_DMA_RESTRICTED_POOL=y
 CONFIG_DMA_NONCOHERENT_MMAP=y
 CONFIG_DMA_REMAP=y
 CONFIG_DMA_CMA=y
@@ -9825,6 +9911,7 @@ CONFIG_DEBUG_FS_ALLOW_ALL=y
 CONFIG_HAVE_ARCH_KGDB=y
 # CONFIG_KGDB is not set
 # CONFIG_UBSAN is not set
+CONFIG_HAVE_KCSAN_COMPILER=y
 # end of Generic Kernel Debugging Instruments
 
 CONFIG_DEBUG_KERNEL=y
@@ -9936,7 +10023,6 @@ CONFIG_RCU_CPU_STALL_TIMEOUT=21
 # end of RCU Debugging
 
 # CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set
-# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
 # CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set
 # CONFIG_LATENCYTOP is not set
 CONFIG_NOP_TRACER=y
@@ -10029,7 +10115,6 @@ CONFIG_CC_HAS_SANCOV_TRACE_PC=y
 CONFIG_RUNTIME_TESTING_MENU=y
 # CONFIG_LKDTM is not set
 # CONFIG_TEST_MIN_HEAP is not set
-# CONFIG_TEST_SORT is not set
 # CONFIG_TEST_DIV64 is not set
 # CONFIG_KPROBES_SANITY_TEST is not set
 # CONFIG_BACKTRACE_SELF_TEST is not set
diff --git a/gnu/packages/aux-files/linux-libre/5.14-arm64.conf b/gnu/packages/aux-files/linux-libre/5.15-arm64.conf
index aab094173e..743e6cccc9 100644
--- a/gnu/packages/aux-files/linux-libre/5.14-arm64.conf
+++ b/gnu/packages/aux-files/linux-libre/5.15-arm64.conf
@@ -1,19 +1,20 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/arm64 5.14.0 Kernel Configuration
+# Linux/arm64 5.15.5 Kernel Configuration
 #
-CONFIG_CC_VERSION_TEXT="gcc (Debian 8.3.0-6) 8.3.0"
+CONFIG_CC_VERSION_TEXT="gcc (GCC) 11.2.0"
 CONFIG_CC_IS_GCC=y
-CONFIG_GCC_VERSION=80300
+CONFIG_GCC_VERSION=110200
 CONFIG_CLANG_VERSION=0
 CONFIG_AS_IS_GNU=y
-CONFIG_AS_VERSION=23101
+CONFIG_AS_VERSION=23400
 CONFIG_LD_IS_BFD=y
-CONFIG_LD_VERSION=23101
+CONFIG_LD_VERSION=23400
 CONFIG_LLD_VERSION=0
 CONFIG_CC_CAN_LINK=y
 CONFIG_CC_CAN_LINK_STATIC=y
 CONFIG_CC_HAS_ASM_GOTO=y
+CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y
 CONFIG_CC_HAS_ASM_INLINE=y
 CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y
 CONFIG_IRQ_WORK=y
@@ -25,6 +26,7 @@ CONFIG_THREAD_INFO_IN_TASK=y
 #
 CONFIG_INIT_ENV_ARG_LIMIT=32
 # CONFIG_COMPILE_TEST is not set
+# CONFIG_WERROR is not set
 CONFIG_LOCALVERSION=""
 # CONFIG_LOCALVERSION_AUTO is not set
 CONFIG_BUILD_SALT=""
@@ -142,6 +144,7 @@ CONFIG_BUILD_BIN2C=y
 CONFIG_LOG_BUF_SHIFT=17
 CONFIG_LOG_CPU_MAX_BUF_SHIFT=12
 CONFIG_PRINTK_SAFE_LOG_BUF_SHIFT=13
+# CONFIG_PRINTK_INDEX is not set
 CONFIG_GENERIC_SCHED_CLOCK=y
 
 #
@@ -214,7 +217,6 @@ CONFIG_MULTIUSER=y
 CONFIG_FHANDLE=y
 CONFIG_POSIX_TIMERS=y
 CONFIG_PRINTK=y
-CONFIG_PRINTK_NMI=y
 CONFIG_BUG=y
 CONFIG_ELF_CORE=y
 CONFIG_BASE_FULL=y
@@ -279,7 +281,6 @@ CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=16
 CONFIG_STACKTRACE_SUPPORT=y
 CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000
 CONFIG_LOCKDEP_SUPPORT=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
 CONFIG_GENERIC_BUG=y
 CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y
 CONFIG_GENERIC_HWEIGHT=y
@@ -449,6 +450,7 @@ CONFIG_ARM64_CNP=y
 # ARMv8.3 architectural features
 #
 CONFIG_ARM64_PTR_AUTH=y
+CONFIG_AS_HAS_CFI_NEGATE_RA_STATE=y
 # end of ARMv8.3 architectural features
 
 #
@@ -586,67 +588,6 @@ CONFIG_ARM_TEGRA194_CPUFREQ=m
 # end of CPU Frequency scaling
 # end of CPU Power Management
 
-#
-# Firmware Drivers
-#
-CONFIG_ARM_SCMI_PROTOCOL=y
-CONFIG_ARM_SCMI_POWER_DOMAIN=m
-# CONFIG_ARM_SCPI_PROTOCOL is not set
-# CONFIG_ARM_SDE_INTERFACE is not set
-# CONFIG_FIRMWARE_MEMMAP is not set
-CONFIG_DMIID=y
-CONFIG_DMI_SYSFS=y
-CONFIG_ISCSI_IBFT=m
-CONFIG_RASPBERRYPI_FIRMWARE=y
-# CONFIG_FW_CFG_SYSFS is not set
-CONFIG_INTEL_STRATIX10_SERVICE=m
-CONFIG_INTEL_STRATIX10_RSU=m
-CONFIG_QCOM_SCM=y
-# CONFIG_QCOM_SCM_DOWNLOAD_MODE_DEFAULT is not set
-# CONFIG_TURRIS_MOX_RWTM is not set
-CONFIG_ARM_FFA_TRANSPORT=m
-CONFIG_ARM_FFA_SMCCC=y
-# CONFIG_GOOGLE_FIRMWARE is not set
-
-#
-# EFI (Extensible Firmware Interface) Support
-#
-CONFIG_EFI_ESRT=y
-CONFIG_EFI_VARS_PSTORE=m
-# CONFIG_EFI_VARS_PSTORE_DEFAULT_DISABLE is not set
-CONFIG_EFI_SOFT_RESERVE=y
-CONFIG_EFI_PARAMS_FROM_FDT=y
-CONFIG_EFI_RUNTIME_WRAPPERS=y
-CONFIG_EFI_GENERIC_STUB=y
-CONFIG_EFI_ARMSTUB_DTB_LOADER=y
-CONFIG_EFI_GENERIC_STUB_INITRD_CMDLINE_LOADER=y
-# CONFIG_EFI_BOOTLOADER_CONTROL is not set
-# CONFIG_EFI_CAPSULE_LOADER is not set
-# CONFIG_EFI_TEST is not set
-# CONFIG_RESET_ATTACK_MITIGATION is not set
-# CONFIG_EFI_DISABLE_PCI_DMA is not set
-# end of EFI (Extensible Firmware Interface) Support
-
-CONFIG_EFI_EARLYCON=y
-CONFIG_EFI_CUSTOM_SSDT_OVERLAYS=y
-# CONFIG_IMX_DSP is not set
-CONFIG_IMX_SCU=y
-CONFIG_IMX_SCU_PD=y
-CONFIG_MESON_SM=y
-CONFIG_ARM_PSCI_FW=y
-# CONFIG_ARM_PSCI_CHECKER is not set
-CONFIG_HAVE_ARM_SMCCC=y
-CONFIG_HAVE_ARM_SMCCC_DISCOVERY=y
-CONFIG_ARM_SMCCC_SOC_ID=y
-
-#
-# Tegra firmware driver
-#
-CONFIG_TEGRA_IVC=y
-CONFIG_TEGRA_BPMP=y
-# end of Tegra firmware driver
-# end of Firmware Drivers
-
 CONFIG_ARCH_SUPPORTS_ACPI=y
 CONFIG_ACPI=y
 CONFIG_ACPI_GENERIC_GSI=y
@@ -703,6 +644,8 @@ CONFIG_HAVE_KVM_ARCH_TLB_FLUSH_ALL=y
 CONFIG_KVM_GENERIC_DIRTYLOG_READ_PROTECT=y
 CONFIG_HAVE_KVM_IRQ_BYPASS=y
 CONFIG_HAVE_KVM_VCPU_RUN_PID_CHANGE=y
+CONFIG_KVM_XFER_TO_GUEST_WORK=y
+# CONFIG_NVHE_EL2_DEBUG is not set
 CONFIG_ARM64_CRYPTO=y
 CONFIG_CRYPTO_SHA256_ARM64=m
 # CONFIG_CRYPTO_SHA512_ARM64 is not set
@@ -739,6 +682,7 @@ CONFIG_HAVE_KPROBES=y
 CONFIG_HAVE_KRETPROBES=y
 CONFIG_HAVE_FUNCTION_ERROR_INJECTION=y
 CONFIG_HAVE_NMI=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
 CONFIG_HAVE_ARCH_TRACEHOOK=y
 CONFIG_HAVE_DMA_CONTIGUOUS=y
 CONFIG_GENERIC_SMP_IDLE_THREAD=y
@@ -823,6 +767,10 @@ CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y
 # end of GCOV-based kernel profiling
 
 CONFIG_HAVE_GCC_PLUGINS=y
+CONFIG_GCC_PLUGINS=y
+# CONFIG_GCC_PLUGIN_CYC_COMPLEXITY is not set
+CONFIG_GCC_PLUGIN_LATENT_ENTROPY=y
+# CONFIG_GCC_PLUGIN_RANDSTRUCT is not set
 # end of General architecture-dependent options
 
 CONFIG_RT_MUTEXES=y
@@ -845,16 +793,14 @@ CONFIG_MODPROBE_PATH="/run/current-system/profile/bin/modprobe"
 CONFIG_MODULES_TREE_LOOKUP=y
 CONFIG_BLOCK=y
 CONFIG_BLK_RQ_ALLOC_TIME=y
-CONFIG_BLK_SCSI_REQUEST=y
 CONFIG_BLK_CGROUP_RWSTAT=y
-CONFIG_BLK_DEV_BSG=y
+CONFIG_BLK_DEV_BSG_COMMON=y
 CONFIG_BLK_DEV_BSGLIB=y
 CONFIG_BLK_DEV_INTEGRITY=y
 CONFIG_BLK_DEV_INTEGRITY_T10=m
 # CONFIG_BLK_DEV_ZONED is not set
 CONFIG_BLK_DEV_THROTTLING=y
 # CONFIG_BLK_DEV_THROTTLING_LOW is not set
-# CONFIG_BLK_CMDLINE_PARSER is not set
 CONFIG_BLK_WBT=y
 CONFIG_BLK_WBT_MQ=y
 # CONFIG_BLK_CGROUP_IOLATENCY is not set
@@ -896,6 +842,7 @@ CONFIG_BLK_MQ_PCI=y
 CONFIG_BLK_MQ_VIRTIO=y
 CONFIG_BLK_MQ_RDMA=y
 CONFIG_BLK_PM=y
+CONFIG_BLOCK_HOLDER_DEPRECATED=y
 
 #
 # IO Schedulers
@@ -1048,6 +995,7 @@ CONFIG_ZSMALLOC=m
 # CONFIG_ZSMALLOC_STAT is not set
 CONFIG_GENERIC_EARLY_IOREMAP=y
 # CONFIG_DEFERRED_STRUCT_PAGE_INIT is not set
+CONFIG_PAGE_IDLE_FLAG=y
 # CONFIG_IDLE_PAGE_TRACKING is not set
 CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
 CONFIG_ARCH_HAS_PTE_DEVMAP=y
@@ -1061,6 +1009,14 @@ CONFIG_HMM_MIRROR=y
 CONFIG_ARCH_HAS_PTE_SPECIAL=y
 CONFIG_MAPPING_DIRTY_HELPERS=y
 CONFIG_SECRETMEM=y
+
+#
+# Data Access Monitoring
+#
+CONFIG_DAMON=y
+CONFIG_DAMON_VADDR=y
+# CONFIG_DAMON_DBGFS is not set
+# end of Data Access Monitoring
 # end of Memory Management options
 
 CONFIG_NET=y
@@ -1077,6 +1033,7 @@ CONFIG_PACKET=y
 CONFIG_PACKET_DIAG=m
 CONFIG_UNIX=y
 CONFIG_UNIX_SCM=y
+CONFIG_AF_UNIX_OOB=y
 CONFIG_UNIX_DIAG=m
 # CONFIG_TLS is not set
 CONFIG_XFRM=y
@@ -1182,6 +1139,7 @@ CONFIG_IPV6_SEG6_LWTUNNEL=y
 CONFIG_IPV6_SEG6_HMAC=y
 CONFIG_IPV6_SEG6_BPF=y
 # CONFIG_IPV6_RPL_LWTUNNEL is not set
+# CONFIG_IPV6_IOAM6_LWTUNNEL is not set
 # CONFIG_NETLABEL is not set
 CONFIG_MPTCP=y
 CONFIG_INET_MPTCP_DIAG=m
@@ -1600,7 +1558,6 @@ CONFIG_BRIDGE_VLAN_FILTERING=y
 CONFIG_BRIDGE_MRP=y
 CONFIG_BRIDGE_CFM=y
 CONFIG_NET_DSA=m
-CONFIG_NET_DSA_TAG_8021Q=m
 CONFIG_NET_DSA_TAG_AR9331=m
 CONFIG_NET_DSA_TAG_BRCM_COMMON=m
 CONFIG_NET_DSA_TAG_BRCM=m
@@ -1768,6 +1725,7 @@ CONFIG_VSOCKETS_DIAG=m
 CONFIG_VSOCKETS_LOOPBACK=m
 CONFIG_VIRTIO_VSOCKETS=m
 CONFIG_VIRTIO_VSOCKETS_COMMON=m
+CONFIG_HYPERV_VSOCKETS=m
 CONFIG_NETLINK_DIAG=m
 CONFIG_MPLS=y
 CONFIG_NET_MPLS_GSO=y
@@ -1927,6 +1885,7 @@ CONFIG_AF_RXRPC_IPV6=y
 # CONFIG_AF_RXRPC_DEBUG is not set
 CONFIG_RXKAD=y
 # CONFIG_AF_KCM is not set
+CONFIG_MCTP=m
 CONFIG_FIB_RULES=y
 CONFIG_WIRELESS=y
 CONFIG_WIRELESS_EXT=y
@@ -2083,11 +2042,15 @@ CONFIG_PCI_IMX6=y
 CONFIG_PCI_HISI=y
 CONFIG_PCIE_QCOM=y
 CONFIG_PCIE_ARMADA_8K=y
+CONFIG_PCIE_ROCKCHIP_DW_HOST=y
+CONFIG_PCIE_KEEMBAY=y
+CONFIG_PCIE_KEEMBAY_HOST=y
 CONFIG_PCIE_KIRIN=y
 # CONFIG_PCIE_HISI_STB is not set
 # CONFIG_PCI_MESON is not set
 CONFIG_PCIE_TEGRA194=m
 CONFIG_PCIE_TEGRA194_HOST=m
+CONFIG_PCIE_VISCONTI_HOST=y
 # CONFIG_PCIE_AL is not set
 # end of DesignWare PCI Core Support
 
@@ -2179,7 +2142,6 @@ CONFIG_MOXTET=m
 # CONFIG_HISILICON_LPC is not set
 # CONFIG_IMX_WEIM is not set
 CONFIG_QCOM_EBI2=y
-# CONFIG_SIMPLE_PM_BUS is not set
 CONFIG_SUN50I_DE2_BUS=y
 CONFIG_SUNXI_RSB=y
 CONFIG_TEGRA_ACONNECT=y
@@ -2193,6 +2155,80 @@ CONFIG_MHI_BUS_PCI_GENERIC=m
 
 CONFIG_CONNECTOR=y
 CONFIG_PROC_EVENTS=y
+
+#
+# Firmware Drivers
+#
+
+#
+# ARM System Control and Management Interface Protocol
+#
+CONFIG_ARM_SCMI_PROTOCOL=y
+CONFIG_ARM_SCMI_HAVE_TRANSPORT=y
+CONFIG_ARM_SCMI_HAVE_SHMEM=y
+CONFIG_ARM_SCMI_TRANSPORT_MAILBOX=y
+CONFIG_ARM_SCMI_TRANSPORT_SMC=y
+CONFIG_ARM_SCMI_POWER_DOMAIN=m
+# end of ARM System Control and Management Interface Protocol
+
+# CONFIG_ARM_SCPI_PROTOCOL is not set
+# CONFIG_ARM_SDE_INTERFACE is not set
+# CONFIG_FIRMWARE_MEMMAP is not set
+CONFIG_DMIID=y
+CONFIG_DMI_SYSFS=y
+CONFIG_ISCSI_IBFT=m
+CONFIG_RASPBERRYPI_FIRMWARE=y
+# CONFIG_FW_CFG_SYSFS is not set
+CONFIG_INTEL_STRATIX10_SERVICE=m
+CONFIG_INTEL_STRATIX10_RSU=m
+CONFIG_QCOM_SCM=y
+# CONFIG_QCOM_SCM_DOWNLOAD_MODE_DEFAULT is not set
+CONFIG_SYSFB=y
+# CONFIG_SYSFB_SIMPLEFB is not set
+# CONFIG_TURRIS_MOX_RWTM is not set
+CONFIG_ARM_FFA_TRANSPORT=m
+CONFIG_ARM_FFA_SMCCC=y
+# CONFIG_GOOGLE_FIRMWARE is not set
+
+#
+# EFI (Extensible Firmware Interface) Support
+#
+CONFIG_EFI_ESRT=y
+CONFIG_EFI_VARS_PSTORE=m
+# CONFIG_EFI_VARS_PSTORE_DEFAULT_DISABLE is not set
+CONFIG_EFI_SOFT_RESERVE=y
+CONFIG_EFI_PARAMS_FROM_FDT=y
+CONFIG_EFI_RUNTIME_WRAPPERS=y
+CONFIG_EFI_GENERIC_STUB=y
+CONFIG_EFI_ARMSTUB_DTB_LOADER=y
+CONFIG_EFI_GENERIC_STUB_INITRD_CMDLINE_LOADER=y
+# CONFIG_EFI_BOOTLOADER_CONTROL is not set
+# CONFIG_EFI_CAPSULE_LOADER is not set
+# CONFIG_EFI_TEST is not set
+# CONFIG_RESET_ATTACK_MITIGATION is not set
+# CONFIG_EFI_DISABLE_PCI_DMA is not set
+# end of EFI (Extensible Firmware Interface) Support
+
+CONFIG_EFI_EARLYCON=y
+CONFIG_EFI_CUSTOM_SSDT_OVERLAYS=y
+# CONFIG_IMX_DSP is not set
+CONFIG_IMX_SCU=y
+CONFIG_IMX_SCU_PD=y
+CONFIG_MESON_SM=y
+CONFIG_ARM_PSCI_FW=y
+# CONFIG_ARM_PSCI_CHECKER is not set
+CONFIG_HAVE_ARM_SMCCC=y
+CONFIG_HAVE_ARM_SMCCC_DISCOVERY=y
+CONFIG_ARM_SMCCC_SOC_ID=y
+
+#
+# Tegra firmware driver
+#
+CONFIG_TEGRA_IVC=y
+CONFIG_TEGRA_BPMP=y
+# end of Tegra firmware driver
+# end of Firmware Drivers
+
 CONFIG_GNSS=m
 CONFIG_GNSS_SERIAL=m
 CONFIG_GNSS_MTK_SERIAL=m
@@ -2219,6 +2255,10 @@ CONFIG_MTD_OF_PARTS_LINKSYS_NS=y
 CONFIG_MTD_BLKDEVS=m
 CONFIG_MTD_BLOCK=m
 CONFIG_MTD_BLOCK_RO=m
+
+#
+# Note that in some cases UBI block is preferred. See MTD_UBI_BLOCK.
+#
 # CONFIG_FTL is not set
 # CONFIG_NFTL is not set
 # CONFIG_INFTL is not set
@@ -2448,6 +2488,7 @@ CONFIG_TIFM_CORE=m
 CONFIG_TIFM_7XX1=m
 CONFIG_ICS932S401=m
 CONFIG_ENCLOSURE_SERVICES=m
+CONFIG_HI6421V600_IRQ=m
 # CONFIG_HP_ILO is not set
 CONFIG_QCOM_COINCELL=m
 # CONFIG_QCOM_FASTRPC is not set
@@ -2512,6 +2553,7 @@ CONFIG_PVPANIC_PCI=m
 #
 CONFIG_SCSI_MOD=m
 CONFIG_RAID_ATTRS=m
+CONFIG_SCSI_COMMON=m
 CONFIG_SCSI=m
 CONFIG_SCSI_DMA=y
 CONFIG_SCSI_NETLINK=y
@@ -2524,6 +2566,7 @@ CONFIG_BLK_DEV_SD=m
 CONFIG_CHR_DEV_ST=m
 CONFIG_BLK_DEV_SR=m
 CONFIG_CHR_DEV_SG=m
+CONFIG_BLK_DEV_BSG=y
 CONFIG_CHR_DEV_SCH=m
 CONFIG_SCSI_ENCLOSURE=m
 CONFIG_SCSI_CONSTANTS=y
@@ -2596,10 +2639,12 @@ CONFIG_SCSI_UFSHCD_PCI=m
 # CONFIG_SCSI_UFSHCD_PLATFORM is not set
 # CONFIG_SCSI_UFS_BSG is not set
 CONFIG_SCSI_UFS_CRYPTO=y
+CONFIG_SCSI_UFS_HPB=y
 CONFIG_SCSI_HPTIOP=m
 # CONFIG_SCSI_MYRB is not set
 # CONFIG_SCSI_MYRS is not set
 CONFIG_XEN_SCSI_FRONTEND=m
+CONFIG_HYPERV_STORAGE=m
 CONFIG_LIBFC=m
 CONFIG_LIBFCOE=m
 CONFIG_FCOE=m
@@ -3071,6 +3116,8 @@ CONFIG_I40E_DCB=y
 # CONFIG_IGC is not set
 CONFIG_NET_VENDOR_MICROSOFT=y
 CONFIG_JME=m
+CONFIG_NET_VENDOR_LITEX=y
+CONFIG_LITEX_LITEETH=m
 CONFIG_NET_VENDOR_MARVELL=y
 CONFIG_MVMDIO=m
 CONFIG_MVNETA=m
@@ -3284,6 +3331,7 @@ CONFIG_LSI_ET1011C_PHY=m
 CONFIG_MARVELL_PHY=m
 CONFIG_MARVELL_10G_PHY=m
 CONFIG_MARVELL_88X2222_PHY=m
+CONFIG_MAXLINEAR_GPHY=m
 CONFIG_MEDIATEK_GE_PHY=m
 CONFIG_MICREL_PHY=m
 CONFIG_MICROCHIP_PHY=m
@@ -3309,6 +3357,10 @@ CONFIG_DP83869_PHY=m
 CONFIG_VITESSE_PHY=m
 # CONFIG_XILINX_GMII2RGMII is not set
 # CONFIG_MICREL_KS8995MA is not set
+
+#
+# MCTP Device Drivers
+#
 CONFIG_MDIO_DEVICE=m
 CONFIG_MDIO_BUS=m
 CONFIG_FWNODE_MDIO=m
@@ -3558,7 +3610,6 @@ CONFIG_P54_USB=m
 CONFIG_P54_PCI=m
 # CONFIG_P54_SPI is not set
 CONFIG_P54_LEDS=y
-# CONFIG_PRISM54 is not set
 CONFIG_WLAN_VENDOR_MARVELL=y
 CONFIG_LIBERTAS=m
 CONFIG_LIBERTAS_USB=m
@@ -3698,6 +3749,7 @@ CONFIG_IEEE802154_MCR20A=m
 CONFIG_WWAN=y
 # CONFIG_WWAN_HWSIM is not set
 CONFIG_MHI_WWAN_CTRL=m
+CONFIG_MHI_WWAN_MBIM=m
 CONFIG_RPMSG_WWAN_CTRL=m
 # end of Wireless WAN
 
@@ -3706,10 +3758,10 @@ CONFIG_XEN_NETDEV_BACKEND=m
 # CONFIG_VMXNET3 is not set
 # CONFIG_FUJITSU_ES is not set
 CONFIG_USB4_NET=m
+CONFIG_HYPERV_NET=m
 # CONFIG_NETDEVSIM is not set
 CONFIG_NET_FAILOVER=m
 # CONFIG_ISDN is not set
-# CONFIG_NVM is not set
 
 #
 # Input device support
@@ -3871,6 +3923,7 @@ CONFIG_SERIO_ALTERA_PS2=m
 # CONFIG_SERIO_PS2MULT is not set
 # CONFIG_SERIO_ARC_PS2 is not set
 # CONFIG_SERIO_APBPS2 is not set
+CONFIG_HYPERV_KEYBOARD=m
 # CONFIG_SERIO_SUN4I_PS2 is not set
 # CONFIG_SERIO_GPIO_PS2 is not set
 # CONFIG_USERIO is not set
@@ -4007,6 +4060,7 @@ CONFIG_HW_RANDOM_CAVIUM=m
 CONFIG_HW_RANDOM_OPTEE=m
 CONFIG_HW_RANDOM_CCTRNG=m
 CONFIG_HW_RANDOM_XIPHERA=m
+CONFIG_HW_RANDOM_ARM_SMCCC_TRNG=m
 # CONFIG_APPLICOM is not set
 CONFIG_DEVMEM=y
 CONFIG_DEVPORT=y
@@ -4014,10 +4068,9 @@ CONFIG_DEVPORT=y
 CONFIG_XILLYBUS_CLASS=m
 # CONFIG_XILLYBUS is not set
 CONFIG_XILLYUSB=m
-# end of Character devices
-
 # CONFIG_RANDOM_TRUST_CPU is not set
 # CONFIG_RANDOM_TRUST_BOOTLOADER is not set
+# end of Character devices
 
 #
 # I2C support
@@ -4132,6 +4185,7 @@ CONFIG_I2C_VIPERBOARD=m
 #
 CONFIG_I2C_CROS_EC_TUNNEL=m
 CONFIG_I2C_XGENE_SLIMPRO=m
+CONFIG_I2C_VIRTIO=m
 # end of I2C Hardware Bus support
 
 # CONFIG_I2C_STUB is not set
@@ -4182,6 +4236,7 @@ CONFIG_SPI_MESON_SPIFC=m
 # CONFIG_SPI_PL022 is not set
 # CONFIG_SPI_PXA2XX is not set
 CONFIG_SPI_ROCKCHIP=m
+CONFIG_SPI_ROCKCHIP_SFC=m
 # CONFIG_SPI_QCOM_QSPI is not set
 CONFIG_SPI_QUP=m
 # CONFIG_SPI_QCOM_GENI is not set
@@ -4238,6 +4293,7 @@ CONFIG_PPS_CLIENT_PARPORT=m
 # PTP clock support
 #
 CONFIG_PTP_1588_CLOCK=y
+CONFIG_PTP_1588_CLOCK_OPTIONAL=y
 CONFIG_PTP_1588_CLOCK_QORIQ=m
 
 #
@@ -4268,6 +4324,7 @@ CONFIG_PINCTRL_MAX77620=y
 # CONFIG_PINCTRL_RK805 is not set
 # CONFIG_PINCTRL_OCELOT is not set
 # CONFIG_PINCTRL_MICROCHIP_SGPIO is not set
+CONFIG_PINCTRL_KEEMBAY=m
 CONFIG_PINCTRL_BCM2835=y
 CONFIG_PINCTRL_IMX=y
 CONFIG_PINCTRL_IMX_SCU=y
@@ -4278,6 +4335,7 @@ CONFIG_PINCTRL_IMX8MQ=y
 CONFIG_PINCTRL_IMX8QM=y
 CONFIG_PINCTRL_IMX8QXP=y
 CONFIG_PINCTRL_IMX8DXL=y
+CONFIG_PINCTRL_IMX8ULP=y
 CONFIG_PINCTRL_MVEBU=y
 CONFIG_PINCTRL_ARMADA_AP806=y
 CONFIG_PINCTRL_ARMADA_CP110=y
@@ -4292,6 +4350,7 @@ CONFIG_PINCTRL_MSM=y
 CONFIG_PINCTRL_MSM8226=m
 # CONFIG_PINCTRL_MSM8660 is not set
 # CONFIG_PINCTRL_MSM8960 is not set
+# CONFIG_PINCTRL_MDM9607 is not set
 # CONFIG_PINCTRL_MDM9615 is not set
 # CONFIG_PINCTRL_MSM8X74 is not set
 CONFIG_PINCTRL_MSM8916=y
@@ -4310,6 +4369,7 @@ CONFIG_PINCTRL_QCOM_SSBI_PMIC=y
 # CONFIG_PINCTRL_SDM660 is not set
 # CONFIG_PINCTRL_SDM845 is not set
 # CONFIG_PINCTRL_SDX55 is not set
+# CONFIG_PINCTRL_SM6115 is not set
 # CONFIG_PINCTRL_SM6125 is not set
 CONFIG_PINCTRL_SM8150=m
 CONFIG_PINCTRL_SM8250=m
@@ -4392,6 +4452,7 @@ CONFIG_GPIO_MB86S7X=m
 CONFIG_GPIO_MVEBU=y
 CONFIG_GPIO_MXC=y
 CONFIG_GPIO_PL061=y
+CONFIG_GPIO_ROCKCHIP=y
 # CONFIG_GPIO_SAMA5D2_PIOBU is not set
 CONFIG_GPIO_SIFIVE=y
 # CONFIG_GPIO_SYSCON is not set
@@ -4463,6 +4524,7 @@ CONFIG_GPIO_VIPERBOARD=m
 #
 CONFIG_GPIO_AGGREGATOR=m
 # CONFIG_GPIO_MOCKUP is not set
+CONFIG_GPIO_VIRTIO=m
 # end of Virtual GPIO drivers
 
 CONFIG_W1=m
@@ -4544,7 +4606,6 @@ CONFIG_BATTERY_BQ27XXX_HDQ=m
 CONFIG_CHARGER_AXP20X=m
 CONFIG_BATTERY_AXP20X=m
 CONFIG_AXP20X_POWER=m
-CONFIG_AXP288_FUEL_GAUGE=m
 # CONFIG_BATTERY_MAX17040 is not set
 # CONFIG_BATTERY_MAX17042 is not set
 # CONFIG_BATTERY_MAX1721X is not set
@@ -4556,6 +4617,7 @@ CONFIG_CHARGER_GPIO=m
 # CONFIG_CHARGER_LT3651 is not set
 # CONFIG_CHARGER_LTC4162L is not set
 # CONFIG_CHARGER_DETECTOR_MAX14656 is not set
+# CONFIG_CHARGER_MT6360 is not set
 CONFIG_CHARGER_QCOM_SMBB=m
 # CONFIG_CHARGER_BQ2415X is not set
 # CONFIG_CHARGER_BQ24190 is not set
@@ -4571,6 +4633,7 @@ CONFIG_BATTERY_GOLDFISH=m
 CONFIG_BATTERY_RT5033=m
 # CONFIG_CHARGER_RT9455 is not set
 CONFIG_CHARGER_CROS_USBPD=m
+CONFIG_CHARGER_CROS_PCHG=m
 # CONFIG_CHARGER_UCS1002 is not set
 CONFIG_CHARGER_BD99954=m
 CONFIG_HWMON=y
@@ -4597,6 +4660,7 @@ CONFIG_SENSORS_ADT7462=m
 CONFIG_SENSORS_ADT7470=m
 CONFIG_SENSORS_ADT7475=m
 CONFIG_SENSORS_AHT10=m
+CONFIG_SENSORS_AQUACOMPUTER_D5NEXT=m
 # CONFIG_SENSORS_AS370 is not set
 CONFIG_SENSORS_ASC7621=m
 CONFIG_SENSORS_AXI_FAN_CONTROL=m
@@ -4688,6 +4752,7 @@ CONFIG_SENSORS_NZXT_KRAKEN2=m
 # CONFIG_SENSORS_PWM_FAN is not set
 CONFIG_SENSORS_RASPBERRYPI_HWMON=m
 CONFIG_SENSORS_SBTSI=m
+CONFIG_SENSORS_SBRMI=m
 # CONFIG_SENSORS_SHT15 is not set
 CONFIG_SENSORS_SHT21=m
 # CONFIG_SENSORS_SHT3x is not set
@@ -4795,6 +4860,7 @@ CONFIG_TEGRA_SOCTHERM=y
 CONFIG_QCOM_TSENS=m
 CONFIG_QCOM_SPMI_ADC_TM5=m
 CONFIG_QCOM_SPMI_TEMP_ALARM=m
+CONFIG_QCOM_LMH=m
 # end of Qualcomm thermal drivers
 
 CONFIG_KHADAS_MCU_FAN_THERMAL=m
@@ -4815,7 +4881,6 @@ CONFIG_WATCHDOG_HRTIMER_PRETIMEOUT=y
 # Watchdog Device Drivers
 #
 CONFIG_SOFT_WATCHDOG=m
-CONFIG_BD70528_WATCHDOG=m
 CONFIG_BD957XMUF_WATCHDOG=m
 CONFIG_GPIO_WATCHDOG=m
 # CONFIG_WDAT_WDT is not set
@@ -4921,6 +4986,7 @@ CONFIG_MFD_MADERA_SPI=m
 # CONFIG_MFD_MC13XXX_I2C is not set
 CONFIG_MFD_MP2629=m
 # CONFIG_MFD_HI6421_PMIC is not set
+CONFIG_MFD_HI6421_SPMI=m
 CONFIG_MFD_HI655X_PMIC=m
 # CONFIG_HTC_PASIC3 is not set
 # CONFIG_HTC_I2CPLD is not set
@@ -5015,6 +5081,8 @@ CONFIG_MFD_QCOM_PM8008=m
 CONFIG_MFD_VEXPRESS_SYSREG=y
 # CONFIG_RAVE_SP_CORE is not set
 # CONFIG_MFD_INTEL_M10_BMC is not set
+CONFIG_MFD_RSMU_I2C=m
+CONFIG_MFD_RSMU_SPI=m
 # end of Multifunction device drivers
 
 CONFIG_REGULATOR=y
@@ -5086,7 +5154,9 @@ CONFIG_REGULATOR_RT4801=m
 CONFIG_REGULATOR_RT4831=m
 CONFIG_REGULATOR_RT6160=m
 CONFIG_REGULATOR_RT6245=m
+CONFIG_REGULATOR_RTQ2134=m
 CONFIG_REGULATOR_RTMV20=m
+CONFIG_REGULATOR_RTQ6752=m
 CONFIG_REGULATOR_SLG51000=m
 CONFIG_REGULATOR_SY8106A=m
 CONFIG_REGULATOR_SY8824X=m
@@ -5127,6 +5197,7 @@ CONFIG_IR_MCEUSB=m
 # CONFIG_IR_ITE_CIR is not set
 # CONFIG_IR_FINTEK is not set
 # CONFIG_IR_MESON is not set
+# CONFIG_IR_MESON_TX is not set
 # CONFIG_IR_NUVOTON is not set
 CONFIG_IR_REDRAT3=m
 # CONFIG_IR_SPI is not set
@@ -5662,7 +5733,9 @@ CONFIG_VIDEO_IMX274=m
 CONFIG_VIDEO_IMX290=m
 CONFIG_VIDEO_IMX319=m
 CONFIG_VIDEO_IMX334=m
+CONFIG_VIDEO_IMX335=m
 CONFIG_VIDEO_IMX355=m
+CONFIG_VIDEO_IMX412=m
 CONFIG_VIDEO_OV02A10=m
 CONFIG_VIDEO_OV2640=m
 CONFIG_VIDEO_OV2659=m
@@ -5684,6 +5757,7 @@ CONFIG_VIDEO_OV7670=m
 CONFIG_VIDEO_OV7740=m
 CONFIG_VIDEO_OV8856=m
 CONFIG_VIDEO_OV8865=m
+CONFIG_VIDEO_OV9282=m
 CONFIG_VIDEO_OV9640=m
 CONFIG_VIDEO_OV9650=m
 CONFIG_VIDEO_OV9734=m
@@ -5969,6 +6043,7 @@ CONFIG_TEGRA_HOST1X_FIREWALL=y
 CONFIG_DRM=m
 CONFIG_DRM_MIPI_DBI=m
 CONFIG_DRM_MIPI_DSI=y
+CONFIG_DRM_DP_AUX_BUS=m
 CONFIG_DRM_DP_AUX_CHARDEV=y
 # CONFIG_DRM_DEBUG_SELFTEST is not set
 CONFIG_DRM_KMS_HELPER=m
@@ -6055,7 +6130,6 @@ CONFIG_DRM_AST=m
 # CONFIG_DRM_RCAR_LVDS is not set
 # CONFIG_DRM_SUN4I is not set
 CONFIG_DRM_QXL=m
-CONFIG_DRM_BOCHS=m
 CONFIG_DRM_VIRTIO_GPU=m
 CONFIG_DRM_MSM=m
 CONFIG_DRM_MSM_GPU_STATE=y
@@ -6090,7 +6164,9 @@ CONFIG_DRM_PANEL_ELIDA_KD35T133=m
 CONFIG_DRM_PANEL_FEIXIN_K101_IM2BA02=m
 # CONFIG_DRM_PANEL_FEIYANG_FY07024DI26A30D is not set
 # CONFIG_DRM_PANEL_ILITEK_IL9322 is not set
+# CONFIG_DRM_PANEL_ILITEK_ILI9341 is not set
 # CONFIG_DRM_PANEL_ILITEK_ILI9881C is not set
+# CONFIG_DRM_PANEL_INNOLUX_EJ030NA is not set
 # CONFIG_DRM_PANEL_INNOLUX_P079ZCA is not set
 # CONFIG_DRM_PANEL_JDI_LT070ME05000 is not set
 CONFIG_DRM_PANEL_KHADAS_TS050=m
@@ -6113,6 +6189,8 @@ CONFIG_DRM_PANEL_OSD_OSD101T2587_53TS=m
 # CONFIG_DRM_PANEL_RAYDIUM_RM67191 is not set
 # CONFIG_DRM_PANEL_RAYDIUM_RM68200 is not set
 # CONFIG_DRM_PANEL_RONBO_RB070D30 is not set
+# CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set
+# CONFIG_DRM_PANEL_SAMSUNG_DB7430 is not set
 # CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set
 # CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 is not set
 # CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03 is not set
@@ -6135,6 +6213,7 @@ CONFIG_DRM_PANEL_SONY_ACX424AKP=m
 # CONFIG_DRM_PANEL_TPO_TPG110 is not set
 # CONFIG_DRM_PANEL_TRULY_NT35597_WQXGA is not set
 # CONFIG_DRM_PANEL_VISIONOX_RM69299 is not set
+# CONFIG_DRM_PANEL_WIDECHIPS_WS2401 is not set
 CONFIG_DRM_PANEL_XINPENG_XPP055C272=m
 # end of Display Panels
 
@@ -6199,6 +6278,7 @@ CONFIG_DRM_HISI_KIRIN=m
 CONFIG_DRM_MESON=m
 CONFIG_DRM_MESON_DW_HDMI=m
 # CONFIG_DRM_ARCPGU is not set
+CONFIG_DRM_BOCHS=m
 CONFIG_DRM_CIRRUS_QEMU=m
 CONFIG_DRM_GM12U320=m
 CONFIG_DRM_SIMPLEDRM=m
@@ -6217,6 +6297,7 @@ CONFIG_DRM_LIMA=m
 CONFIG_DRM_PANFROST=m
 CONFIG_DRM_TIDSS=m
 CONFIG_DRM_GUD=m
+CONFIG_DRM_HYPERV=m
 CONFIG_DRM_LEGACY=y
 # CONFIG_DRM_TDFX is not set
 # CONFIG_DRM_R128 is not set
@@ -6292,7 +6373,8 @@ CONFIG_FB_MB862XX=m
 CONFIG_FB_MB862XX_PCI_GDC=y
 CONFIG_FB_MB862XX_I2C=y
 # CONFIG_FB_MX3 is not set
-CONFIG_FB_SIMPLE=y
+CONFIG_FB_HYPERV=m
+CONFIG_FB_SIMPLE=m
 # CONFIG_FB_SSD1307 is not set
 # CONFIG_FB_SM712 is not set
 # end of Frame buffer Devices
@@ -6489,6 +6571,7 @@ CONFIG_SND_HDA_CODEC_SIGMATEL=m
 CONFIG_SND_HDA_CODEC_VIA=m
 CONFIG_SND_HDA_CODEC_HDMI=m
 CONFIG_SND_HDA_CODEC_CIRRUS=m
+CONFIG_SND_HDA_CODEC_CS8409=m
 CONFIG_SND_HDA_CODEC_CONEXANT=m
 CONFIG_SND_HDA_CODEC_CA0110=m
 CONFIG_SND_HDA_CODEC_CA0132=m
@@ -6744,6 +6827,7 @@ CONFIG_SND_SOC_ES8328=m
 CONFIG_SND_SOC_ES8328_I2C=m
 CONFIG_SND_SOC_ES8328_SPI=m
 # CONFIG_SND_SOC_GTM601 is not set
+CONFIG_SND_SOC_ICS43432=m
 # CONFIG_SND_SOC_INNO_RK3036 is not set
 # CONFIG_SND_SOC_MAX98088 is not set
 CONFIG_SND_SOC_MAX98090=m
@@ -6978,6 +7062,7 @@ CONFIG_HID_SUNPLUS=m
 CONFIG_HID_RMI=m
 CONFIG_HID_GREENASIA=m
 CONFIG_GREENASIA_FF=y
+CONFIG_HID_HYPERV_MOUSE=m
 CONFIG_HID_SMARTJOYPLUS=m
 CONFIG_SMARTJOYPLUS_FF=y
 CONFIG_HID_TIVO=m
@@ -7035,7 +7120,7 @@ CONFIG_SURFACE_HID_CORE=m
 
 CONFIG_USB_OHCI_LITTLE_ENDIAN=y
 CONFIG_USB_SUPPORT=y
-CONFIG_USB_COMMON=y
+CONFIG_USB_COMMON=m
 CONFIG_USB_LED_TRIG=y
 CONFIG_USB_ULPI_BUS=m
 CONFIG_USB_CONN_GPIO=m
@@ -7871,6 +7956,7 @@ CONFIG_SYNC_FILE=y
 # CONFIG_DMABUF_DEBUG is not set
 # CONFIG_DMABUF_SELFTESTS is not set
 # CONFIG_DMABUF_HEAPS is not set
+# CONFIG_DMABUF_SYSFS_STATS is not set
 # end of DMABUF options
 
 # CONFIG_AUXDISPLAY is not set
@@ -7885,13 +7971,15 @@ CONFIG_UIO_PCI_GENERIC=m
 CONFIG_UIO_NETX=m
 # CONFIG_UIO_PRUSS is not set
 CONFIG_UIO_MF624=m
+CONFIG_UIO_HV_GENERIC=m
+CONFIG_VFIO=m
 CONFIG_VFIO_IOMMU_TYPE1=m
 CONFIG_VFIO_VIRQFD=m
-CONFIG_VFIO=m
 CONFIG_VFIO_NOIOMMU=y
-CONFIG_VFIO_PCI=m
+CONFIG_VFIO_PCI_CORE=m
 CONFIG_VFIO_PCI_MMAP=y
 CONFIG_VFIO_PCI_INTX=y
+CONFIG_VFIO_PCI=m
 # CONFIG_VFIO_PLATFORM is not set
 # CONFIG_VFIO_MDEV is not set
 CONFIG_VIRT_DRIVERS=y
@@ -7909,11 +7997,13 @@ CONFIG_VIRTIO_MMIO=m
 CONFIG_VIRTIO_DMA_SHARED_BUFFER=m
 CONFIG_VDPA=m
 # CONFIG_VDPA_SIM is not set
+CONFIG_VDPA_USER=m
 CONFIG_IFCVF=m
 CONFIG_MLX5_VDPA=y
 CONFIG_MLX5_VDPA_NET=m
 CONFIG_VP_VDPA=m
 CONFIG_VHOST_IOTLB=m
+CONFIG_VHOST_RING=m
 CONFIG_VHOST=m
 CONFIG_VHOST_MENU=y
 CONFIG_VHOST_NET=m
@@ -7925,6 +8015,9 @@ CONFIG_VHOST_VDPA=m
 #
 # Microsoft Hyper-V guest support
 #
+CONFIG_HYPERV=m
+CONFIG_HYPERV_UTILS=m
+CONFIG_HYPERV_BALLOON=m
 # end of Microsoft Hyper-V guest support
 
 #
@@ -8035,6 +8128,7 @@ CONFIG_88EU_AP_MODE=y
 # CONFIG_FIREWIRE_SERIAL is not set
 # CONFIG_GS_FPGABOOT is not set
 # CONFIG_UNISYSSPAR is not set
+CONFIG_COMMON_CLK_XLNX_CLKWZRD=m
 # CONFIG_FB_TFT is not set
 # CONFIG_KS7010 is not set
 CONFIG_BCM_VIDEOCORE=y
@@ -8046,7 +8140,6 @@ CONFIG_BCM_VIDEOCORE=y
 # CONFIG_FIELDBUS_DEV is not set
 CONFIG_QLGE=m
 CONFIG_WFX=m
-CONFIG_MFD_HI6421_SPMI=m
 # CONFIG_GOLDFISH is not set
 CONFIG_CHROME_PLATFORMS=y
 CONFIG_CHROMEOS_TBMC=m
@@ -8184,8 +8277,10 @@ CONFIG_MDM_GCC_9607=m
 # CONFIG_MDM_GCC_9615 is not set
 # CONFIG_MDM_LCC_9615 is not set
 # CONFIG_MSM_MMCC_8960 is not set
+# CONFIG_MSM_GCC_8953 is not set
 # CONFIG_MSM_GCC_8974 is not set
 # CONFIG_MSM_MMCC_8974 is not set
+# CONFIG_MSM_MMCC_8994 is not set
 # CONFIG_MSM_GCC_8994 is not set
 CONFIG_MSM_GCC_8996=y
 CONFIG_MSM_MMCC_8996=y
@@ -8195,13 +8290,16 @@ CONFIG_MSM_MMCC_8996=y
 # CONFIG_QCS_GCC_404 is not set
 # CONFIG_SC_CAMCC_7180 is not set
 # CONFIG_SC_DISPCC_7180 is not set
+# CONFIG_SC_DISPCC_7280 is not set
 CONFIG_SC_GCC_7180=m
 CONFIG_SC_GCC_7280=m
 CONFIG_SC_GCC_8180X=m
 CONFIG_SC_LPASS_CORECC_7180=m
 # CONFIG_SC_GPUCC_7180 is not set
+# CONFIG_SC_GPUCC_7280 is not set
 # CONFIG_SC_MSS_7180 is not set
 # CONFIG_SC_VIDEOCC_7180 is not set
+# CONFIG_SC_VIDEOCC_7280 is not set
 # CONFIG_SDM_CAMCC_845 is not set
 CONFIG_SDM_GCC_660=m
 CONFIG_SDM_MMCC_660=m
@@ -8216,7 +8314,9 @@ CONFIG_SDM_LPASSCC_845=m
 CONFIG_SDX_GCC_55=m
 CONFIG_SM_CAMCC_8250=m
 CONFIG_SM_DISPCC_8250=m
+# CONFIG_SM_GCC_6115 is not set
 CONFIG_SM_GCC_6125=m
+# CONFIG_SM_GCC_6350 is not set
 # CONFIG_SM_GCC_8150 is not set
 CONFIG_SM_GCC_8250=m
 CONFIG_SM_GCC_8350=m
@@ -8314,6 +8414,8 @@ CONFIG_IOMMU_IO_PGTABLE_LPAE=y
 # end of Generic IOMMU Pagetable Support
 
 # CONFIG_IOMMU_DEBUGFS is not set
+# CONFIG_IOMMU_DEFAULT_DMA_STRICT is not set
+CONFIG_IOMMU_DEFAULT_DMA_LAZY=y
 # CONFIG_IOMMU_DEFAULT_PASSTHROUGH is not set
 CONFIG_OF_IOMMU=y
 CONFIG_IOMMU_DMA=y
@@ -8321,9 +8423,11 @@ CONFIG_IOMMU_SVA_LIB=y
 CONFIG_ROCKCHIP_IOMMU=y
 CONFIG_SUN50I_IOMMU=y
 CONFIG_TEGRA_IOMMU_SMMU=y
+CONFIG_APPLE_DART=y
 CONFIG_ARM_SMMU=y
 # CONFIG_ARM_SMMU_LEGACY_DT_BINDINGS is not set
 CONFIG_ARM_SMMU_DISABLE_BYPASS_BY_DEFAULT=y
+CONFIG_ARM_SMMU_QCOM=y
 CONFIG_ARM_SMMU_V3=y
 CONFIG_ARM_SMMU_V3_SVA=y
 CONFIG_QCOM_IOMMU=y
@@ -8642,6 +8746,7 @@ CONFIG_SCD30_CORE=m
 CONFIG_SCD30_I2C=m
 CONFIG_SCD30_SERIAL=m
 # CONFIG_SENSIRION_SGP30 is not set
+# CONFIG_SENSIRION_SGP40 is not set
 # CONFIG_SPS30_I2C is not set
 # CONFIG_SPS30_SERIAL is not set
 # CONFIG_VZ89X is not set
@@ -8901,6 +9006,7 @@ CONFIG_HID_SENSOR_CUSTOM_INTEL_HINGE=m
 #
 # Digital potentiometers
 #
+CONFIG_AD5110=m
 # CONFIG_AD5272 is not set
 # CONFIG_DS1803 is not set
 # CONFIG_MAX5432 is not set
@@ -9299,12 +9405,12 @@ CONFIG_F2FS_FS_SECURITY=y
 # CONFIG_F2FS_CHECK_FS is not set
 # CONFIG_F2FS_FAULT_INJECTION is not set
 # CONFIG_F2FS_FS_COMPRESSION is not set
+# CONFIG_F2FS_IOSTAT is not set
 CONFIG_FS_DAX=y
 CONFIG_FS_POSIX_ACL=y
 CONFIG_EXPORTFS=y
 CONFIG_EXPORTFS_BLOCK_OPS=y
 CONFIG_FILE_LOCKING=y
-CONFIG_MANDATORY_FILE_LOCKING=y
 # CONFIG_FS_ENCRYPTION is not set
 CONFIG_FS_VERITY=y
 # CONFIG_FS_VERITY_DEBUG is not set
@@ -9339,15 +9445,12 @@ CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y
 # Caches
 #
 CONFIG_NETFS_SUPPORT=m
-# CONFIG_NETFS_STATS is not set
+CONFIG_NETFS_STATS=y
 CONFIG_FSCACHE=m
 CONFIG_FSCACHE_STATS=y
-# CONFIG_FSCACHE_HISTOGRAM is not set
 # CONFIG_FSCACHE_DEBUG is not set
-# CONFIG_FSCACHE_OBJECT_LIST is not set
 CONFIG_CACHEFILES=m
 # CONFIG_CACHEFILES_DEBUG is not set
-# CONFIG_CACHEFILES_HISTOGRAM is not set
 # end of Caches
 
 #
@@ -9373,6 +9476,10 @@ CONFIG_EXFAT_DEFAULT_IOCHARSET="utf8"
 CONFIG_NTFS_FS=m
 # CONFIG_NTFS_DEBUG is not set
 # CONFIG_NTFS_RW is not set
+CONFIG_NTFS3_FS=m
+# CONFIG_NTFS3_64BIT_CLUSTER is not set
+CONFIG_NTFS3_LZX_XPRESS=y
+# CONFIG_NTFS3_FS_POSIX_ACL is not set
 # end of DOS/FAT/EXFAT/NT Filesystems
 
 #
@@ -9483,6 +9590,7 @@ CONFIG_PSTORE_COMPRESS_DEFAULT="deflate"
 # CONFIG_PSTORE_PMSG is not set
 # CONFIG_PSTORE_FTRACE is not set
 CONFIG_PSTORE_RAM=m
+# CONFIG_PSTORE_BLK is not set
 CONFIG_SYSV_FS=m
 CONFIG_UFS_FS=m
 # CONFIG_UFS_FS_WRITE is not set
@@ -9546,7 +9654,6 @@ CONFIG_CEPH_FS_SECURITY_LABEL=y
 CONFIG_CIFS=m
 # CONFIG_CIFS_STATS2 is not set
 CONFIG_CIFS_ALLOW_INSECURE_LEGACY=y
-CONFIG_CIFS_WEAK_PW_HASH=y
 CONFIG_CIFS_UPCALL=y
 CONFIG_CIFS_XATTR=y
 CONFIG_CIFS_POSIX=y
@@ -9557,6 +9664,8 @@ CONFIG_CIFS_DFS_UPCALL=y
 CONFIG_CIFS_SWN_UPCALL=y
 # CONFIG_CIFS_SMB_DIRECT is not set
 CONFIG_CIFS_FSCACHE=y
+# CONFIG_SMB_SERVER is not set
+CONFIG_SMBFS_COMMON=m
 CONFIG_CODA_FS=m
 CONFIG_AFS_FS=m
 # CONFIG_AFS_DEBUG is not set
@@ -9688,13 +9797,24 @@ CONFIG_LSM="yama,loadpin,safesetid,integrity,apparmor,selinux,smack,tomoyo"
 #
 # Kernel hardening options
 #
+CONFIG_GCC_PLUGIN_STRUCTLEAK=y
 
 #
 # Memory initialization
 #
-CONFIG_INIT_STACK_NONE=y
+# CONFIG_INIT_STACK_NONE is not set
+# CONFIG_GCC_PLUGIN_STRUCTLEAK_USER is not set
+# CONFIG_GCC_PLUGIN_STRUCTLEAK_BYREF is not set
+CONFIG_GCC_PLUGIN_STRUCTLEAK_BYREF_ALL=y
+# CONFIG_GCC_PLUGIN_STRUCTLEAK_VERBOSE is not set
+CONFIG_GCC_PLUGIN_STACKLEAK=y
+CONFIG_STACKLEAK_TRACK_MIN_SIZE=100
+# CONFIG_STACKLEAK_METRICS is not set
+CONFIG_STACKLEAK_RUNTIME_DISABLE=y
 CONFIG_INIT_ON_ALLOC_DEFAULT_ON=y
 # CONFIG_INIT_ON_FREE_DEFAULT_ON is not set
+CONFIG_CC_HAS_ZERO_CALL_USED_REGS=y
+# CONFIG_ZERO_CALL_USED_REGS is not set
 # end of Memory initialization
 # end of Kernel hardening options
 # end of Security options
@@ -9885,6 +10005,7 @@ CONFIG_CRYPTO_LIB_POLY1305_GENERIC=m
 CONFIG_CRYPTO_LIB_POLY1305=m
 CONFIG_CRYPTO_LIB_CHACHA20POLY1305=m
 CONFIG_CRYPTO_LIB_SHA256=y
+CONFIG_CRYPTO_LIB_SM4=m
 CONFIG_CRYPTO_HW=y
 CONFIG_CRYPTO_DEV_ALLWINNER=y
 CONFIG_CRYPTO_DEV_SUN4I_SS=m
@@ -10065,6 +10186,7 @@ CONFIG_ARCH_HAS_SYNC_DMA_FOR_DEVICE=y
 CONFIG_ARCH_HAS_SYNC_DMA_FOR_CPU=y
 CONFIG_ARCH_HAS_DMA_PREP_COHERENT=y
 CONFIG_SWIOTLB=y
+CONFIG_DMA_RESTRICTED_POOL=y
 CONFIG_DMA_NONCOHERENT_MMAP=y
 CONFIG_DMA_COHERENT_POOL=y
 CONFIG_DMA_REMAP=y
@@ -10188,6 +10310,7 @@ CONFIG_HAVE_ARCH_KGDB=y
 # CONFIG_KGDB is not set
 CONFIG_ARCH_HAS_UBSAN_SANITIZE_ALL=y
 # CONFIG_UBSAN is not set
+CONFIG_HAVE_KCSAN_COMPILER=y
 # end of Generic Kernel Debugging Instruments
 
 CONFIG_DEBUG_KERNEL=y
@@ -10228,9 +10351,9 @@ CONFIG_CC_HAS_WORKING_NOSANITIZE_ADDRESS=y
 # CONFIG_KASAN is not set
 CONFIG_HAVE_ARCH_KFENCE=y
 CONFIG_KFENCE=y
-CONFIG_KFENCE_STATIC_KEYS=y
 CONFIG_KFENCE_SAMPLE_INTERVAL=0
 CONFIG_KFENCE_NUM_OBJECTS=255
+CONFIG_KFENCE_STATIC_KEYS=y
 CONFIG_KFENCE_STRESS_TEST_FAULTS=0
 # end of Memory Debugging
 
@@ -10313,7 +10436,6 @@ CONFIG_RCU_CPU_STALL_TIMEOUT=21
 # end of RCU Debugging
 
 # CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set
-# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
 # CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set
 # CONFIG_LATENCYTOP is not set
 CONFIG_NOP_TRACER=y
@@ -10402,7 +10524,6 @@ CONFIG_CC_HAS_SANCOV_TRACE_PC=y
 CONFIG_RUNTIME_TESTING_MENU=y
 # CONFIG_LKDTM is not set
 # CONFIG_TEST_MIN_HEAP is not set
-# CONFIG_TEST_SORT is not set
 # CONFIG_TEST_DIV64 is not set
 # CONFIG_KPROBES_SANITY_TEST is not set
 # CONFIG_BACKTRACE_SELF_TEST is not set
@@ -10444,5 +10565,6 @@ CONFIG_TEST_STATIC_KEYS=m
 # CONFIG_TEST_FREE_PAGES is not set
 CONFIG_ARCH_USE_MEMTEST=y
 # CONFIG_MEMTEST is not set
+# CONFIG_HYPERV_TESTING is not set
 # end of Kernel Testing and Coverage
 # end of Kernel hacking
diff --git a/gnu/packages/aux-files/linux-libre/5.14-i686.conf b/gnu/packages/aux-files/linux-libre/5.15-i686.conf
index bcca80c348..85bd4d0ee1 100644
--- a/gnu/packages/aux-files/linux-libre/5.14-i686.conf
+++ b/gnu/packages/aux-files/linux-libre/5.15-i686.conf
@@ -1,17 +1,18 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/i386 5.14.0 Kernel Configuration
+# Linux/i386 5.15.5 Kernel Configuration
 #
-CONFIG_CC_VERSION_TEXT="gcc (Debian 8.3.0-6) 8.3.0"
+CONFIG_CC_VERSION_TEXT="gcc (GCC) 11.2.0"
 CONFIG_CC_IS_GCC=y
-CONFIG_GCC_VERSION=80300
+CONFIG_GCC_VERSION=110200
 CONFIG_CLANG_VERSION=0
 CONFIG_AS_IS_GNU=y
-CONFIG_AS_VERSION=23101
+CONFIG_AS_VERSION=23400
 CONFIG_LD_IS_BFD=y
-CONFIG_LD_VERSION=23101
+CONFIG_LD_VERSION=23400
 CONFIG_LLD_VERSION=0
 CONFIG_CC_HAS_ASM_GOTO=y
+CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y
 CONFIG_CC_HAS_ASM_INLINE=y
 CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y
 CONFIG_IRQ_WORK=y
@@ -23,6 +24,7 @@ CONFIG_THREAD_INFO_IN_TASK=y
 #
 CONFIG_INIT_ENV_ARG_LIMIT=32
 # CONFIG_COMPILE_TEST is not set
+# CONFIG_WERROR is not set
 CONFIG_LOCALVERSION=""
 # CONFIG_LOCALVERSION_AUTO is not set
 CONFIG_BUILD_SALT=""
@@ -152,6 +154,7 @@ CONFIG_BUILD_BIN2C=y
 CONFIG_LOG_BUF_SHIFT=18
 CONFIG_LOG_CPU_MAX_BUF_SHIFT=12
 CONFIG_PRINTK_SAFE_LOG_BUF_SHIFT=13
+# CONFIG_PRINTK_INDEX is not set
 CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
 
 #
@@ -221,7 +224,6 @@ CONFIG_SYSFS_SYSCALL=y
 CONFIG_FHANDLE=y
 CONFIG_POSIX_TIMERS=y
 CONFIG_PRINTK=y
-CONFIG_PRINTK_NMI=y
 CONFIG_BUG=y
 CONFIG_ELF_CORE=y
 CONFIG_PCSPKR_PLATFORM=y
@@ -294,6 +296,7 @@ CONFIG_HAVE_SETUP_PER_CPU_AREA=y
 CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y
 CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y
 CONFIG_ARCH_HIBERNATION_POSSIBLE=y
+CONFIG_ARCH_NR_GPIO=512
 CONFIG_ARCH_SUSPEND_POSSIBLE=y
 CONFIG_ARCH_WANT_GENERAL_HUGETLB=y
 CONFIG_HAVE_INTEL_TXT=y
@@ -417,6 +420,7 @@ CONFIG_PERF_EVENTS_INTEL_UNCORE=y
 CONFIG_PERF_EVENTS_INTEL_RAPL=y
 CONFIG_PERF_EVENTS_INTEL_CSTATE=y
 CONFIG_PERF_EVENTS_AMD_POWER=m
+CONFIG_PERF_EVENTS_AMD_UNCORE=m
 # end of Performance monitoring
 
 # CONFIG_X86_LEGACY_VM86 is not set
@@ -663,7 +667,6 @@ CONFIG_ALIX=y
 CONFIG_NET5501=y
 CONFIG_GEOS=y
 CONFIG_AMD_NB=y
-# CONFIG_X86_SYSFB is not set
 # end of Bus options (PCI etc.)
 
 #
@@ -673,55 +676,6 @@ CONFIG_COMPAT_32=y
 # end of Binary Emulations
 
 CONFIG_HAVE_ATOMIC_IOMAP=y
-
-#
-# Firmware Drivers
-#
-CONFIG_EDD=y
-CONFIG_EDD_OFF=y
-CONFIG_FIRMWARE_MEMMAP=y
-CONFIG_DMIID=y
-CONFIG_DMI_SYSFS=m
-CONFIG_DMI_SCAN_MACHINE_NON_EFI_FALLBACK=y
-CONFIG_ISCSI_IBFT_FIND=y
-CONFIG_ISCSI_IBFT=m
-CONFIG_FW_CFG_SYSFS=m
-# CONFIG_FW_CFG_SYSFS_CMDLINE is not set
-# CONFIG_GOOGLE_FIRMWARE is not set
-
-#
-# EFI (Extensible Firmware Interface) Support
-#
-CONFIG_EFI_VARS=y
-CONFIG_EFI_ESRT=y
-CONFIG_EFI_VARS_PSTORE=m
-# CONFIG_EFI_VARS_PSTORE_DEFAULT_DISABLE is not set
-CONFIG_EFI_RUNTIME_MAP=y
-# CONFIG_EFI_FAKE_MEMMAP is not set
-CONFIG_EFI_RUNTIME_WRAPPERS=y
-CONFIG_EFI_GENERIC_STUB_INITRD_CMDLINE_LOADER=y
-CONFIG_EFI_BOOTLOADER_CONTROL=m
-CONFIG_EFI_CAPSULE_LOADER=y
-CONFIG_EFI_CAPSULE_QUIRK_QUARK_CSH=y
-# CONFIG_EFI_TEST is not set
-CONFIG_APPLE_PROPERTIES=y
-CONFIG_RESET_ATTACK_MITIGATION=y
-# CONFIG_EFI_RCI2_TABLE is not set
-# CONFIG_EFI_DISABLE_PCI_DMA is not set
-# end of EFI (Extensible Firmware Interface) Support
-
-CONFIG_UEFI_CPER=y
-CONFIG_UEFI_CPER_X86=y
-CONFIG_EFI_DEV_PATH_PARSER=y
-CONFIG_EFI_EARLYCON=y
-CONFIG_EFI_CUSTOM_SSDT_OVERLAYS=y
-
-#
-# Tegra firmware driver
-#
-# end of Tegra firmware driver
-# end of Firmware Drivers
-
 CONFIG_HAVE_KVM=y
 CONFIG_HAVE_KVM_IRQCHIP=y
 CONFIG_HAVE_KVM_IRQFD=y
@@ -774,6 +728,7 @@ CONFIG_HAVE_OPTPROBES=y
 CONFIG_HAVE_KPROBES_ON_FTRACE=y
 CONFIG_HAVE_FUNCTION_ERROR_INJECTION=y
 CONFIG_HAVE_NMI=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
 CONFIG_HAVE_ARCH_TRACEHOOK=y
 CONFIG_HAVE_DMA_CONTIGUOUS=y
 CONFIG_GENERIC_SMP_IDLE_THREAD=y
@@ -850,6 +805,7 @@ CONFIG_HAVE_PREEMPT_DYNAMIC=y
 CONFIG_ARCH_WANT_LD_ORPHAN_WARN=y
 CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
 CONFIG_ARCH_SPLIT_ARG64=y
+CONFIG_ARCH_HAS_PARANOID_L1D_FLUSH=y
 
 #
 # GCOV-based kernel profiling
@@ -859,6 +815,10 @@ CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y
 # end of GCOV-based kernel profiling
 
 CONFIG_HAVE_GCC_PLUGINS=y
+CONFIG_GCC_PLUGINS=y
+# CONFIG_GCC_PLUGIN_CYC_COMPLEXITY is not set
+CONFIG_GCC_PLUGIN_LATENT_ENTROPY=y
+# CONFIG_GCC_PLUGIN_RANDSTRUCT is not set
 # end of General architecture-dependent options
 
 CONFIG_RT_MUTEXES=y
@@ -881,16 +841,14 @@ CONFIG_MODPROBE_PATH="/run/current-system/profile/bin/modprobe"
 CONFIG_MODULES_TREE_LOOKUP=y
 CONFIG_BLOCK=y
 CONFIG_BLK_RQ_ALLOC_TIME=y
-CONFIG_BLK_SCSI_REQUEST=y
 CONFIG_BLK_CGROUP_RWSTAT=y
-CONFIG_BLK_DEV_BSG=y
+CONFIG_BLK_DEV_BSG_COMMON=y
 CONFIG_BLK_DEV_BSGLIB=y
 CONFIG_BLK_DEV_INTEGRITY=y
 CONFIG_BLK_DEV_INTEGRITY_T10=y
 CONFIG_BLK_DEV_ZONED=y
 CONFIG_BLK_DEV_THROTTLING=y
 # CONFIG_BLK_DEV_THROTTLING_LOW is not set
-CONFIG_BLK_CMDLINE_PARSER=y
 CONFIG_BLK_WBT=y
 CONFIG_BLK_WBT_MQ=y
 # CONFIG_BLK_CGROUP_IOLATENCY is not set
@@ -933,6 +891,7 @@ CONFIG_BLK_MQ_PCI=y
 CONFIG_BLK_MQ_VIRTIO=y
 CONFIG_BLK_MQ_RDMA=y
 CONFIG_BLK_PM=y
+CONFIG_BLOCK_HOLDER_DEPRECATED=y
 
 #
 # IO Schedulers
@@ -1029,6 +988,7 @@ CONFIG_Z3FOLD=m
 CONFIG_ZSMALLOC=y
 # CONFIG_ZSMALLOC_STAT is not set
 CONFIG_GENERIC_EARLY_IOREMAP=y
+CONFIG_PAGE_IDLE_FLAG=y
 CONFIG_IDLE_PAGE_TRACKING=y
 CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
 CONFIG_ARCH_HAS_ZONE_DMA_SET=y
@@ -1043,6 +1003,14 @@ CONFIG_ARCH_HAS_PTE_SPECIAL=y
 CONFIG_MAPPING_DIRTY_HELPERS=y
 CONFIG_KMAP_LOCAL=y
 CONFIG_SECRETMEM=y
+
+#
+# Data Access Monitoring
+#
+CONFIG_DAMON=y
+CONFIG_DAMON_VADDR=y
+# CONFIG_DAMON_DBGFS is not set
+# end of Data Access Monitoring
 # end of Memory Management options
 
 CONFIG_NET=y
@@ -1058,6 +1026,7 @@ CONFIG_PACKET=y
 CONFIG_PACKET_DIAG=m
 CONFIG_UNIX=y
 CONFIG_UNIX_SCM=y
+CONFIG_AF_UNIX_OOB=y
 CONFIG_UNIX_DIAG=m
 CONFIG_TLS=m
 # CONFIG_TLS_DEVICE is not set
@@ -1167,6 +1136,7 @@ CONFIG_IPV6_PIMSM_V2=y
 # CONFIG_IPV6_SEG6_LWTUNNEL is not set
 # CONFIG_IPV6_SEG6_HMAC is not set
 # CONFIG_IPV6_RPL_LWTUNNEL is not set
+# CONFIG_IPV6_IOAM6_LWTUNNEL is not set
 CONFIG_NETLABEL=y
 CONFIG_MPTCP=y
 CONFIG_INET_MPTCP_DIAG=m
@@ -1589,7 +1559,6 @@ CONFIG_BRIDGE_VLAN_FILTERING=y
 CONFIG_BRIDGE_MRP=y
 CONFIG_BRIDGE_CFM=y
 CONFIG_NET_DSA=m
-CONFIG_NET_DSA_TAG_8021Q=m
 CONFIG_NET_DSA_TAG_AR9331=m
 CONFIG_NET_DSA_TAG_BRCM_COMMON=m
 CONFIG_NET_DSA_TAG_BRCM=m
@@ -1965,6 +1934,7 @@ CONFIG_AF_RXRPC_IPV6=y
 # CONFIG_RXKAD is not set
 CONFIG_AF_KCM=m
 CONFIG_STREAM_PARSER=y
+CONFIG_MCTP=m
 CONFIG_FIB_RULES=y
 CONFIG_WIRELESS=y
 CONFIG_WIRELESS_EXT=y
@@ -2100,7 +2070,6 @@ CONFIG_PCI_QUIRKS=y
 CONFIG_PCI_REALLOC_ENABLE_AUTO=y
 CONFIG_PCI_STUB=m
 # CONFIG_PCI_PF_STUB is not set
-CONFIG_XEN_PCIDEV_FRONTEND=m
 CONFIG_PCI_ATS=y
 CONFIG_PCI_LOCKLESS_CONFIG=y
 CONFIG_PCI_IOV=y
@@ -2259,6 +2228,69 @@ CONFIG_MHI_BUS_PCI_GENERIC=m
 
 CONFIG_CONNECTOR=y
 CONFIG_PROC_EVENTS=y
+
+#
+# Firmware Drivers
+#
+
+#
+# ARM System Control and Management Interface Protocol
+#
+# end of ARM System Control and Management Interface Protocol
+
+CONFIG_EDD=y
+CONFIG_EDD_OFF=y
+CONFIG_FIRMWARE_MEMMAP=y
+CONFIG_DMIID=y
+CONFIG_DMI_SYSFS=m
+CONFIG_DMI_SCAN_MACHINE_NON_EFI_FALLBACK=y
+CONFIG_ISCSI_IBFT_FIND=y
+CONFIG_ISCSI_IBFT=m
+CONFIG_FW_CFG_SYSFS=m
+# CONFIG_FW_CFG_SYSFS_CMDLINE is not set
+CONFIG_SYSFB=y
+CONFIG_SYSFB_SIMPLEFB=y
+CONFIG_GOOGLE_FIRMWARE=y
+# CONFIG_GOOGLE_SMI is not set
+CONFIG_GOOGLE_COREBOOT_TABLE=m
+# CONFIG_GOOGLE_MEMCONSOLE_X86_LEGACY is not set
+CONFIG_GOOGLE_FRAMEBUFFER_COREBOOT=m
+# CONFIG_GOOGLE_MEMCONSOLE_COREBOOT is not set
+# CONFIG_GOOGLE_VPD is not set
+
+#
+# EFI (Extensible Firmware Interface) Support
+#
+CONFIG_EFI_VARS=y
+CONFIG_EFI_ESRT=y
+CONFIG_EFI_VARS_PSTORE=m
+# CONFIG_EFI_VARS_PSTORE_DEFAULT_DISABLE is not set
+CONFIG_EFI_RUNTIME_MAP=y
+# CONFIG_EFI_FAKE_MEMMAP is not set
+CONFIG_EFI_RUNTIME_WRAPPERS=y
+CONFIG_EFI_GENERIC_STUB_INITRD_CMDLINE_LOADER=y
+CONFIG_EFI_BOOTLOADER_CONTROL=m
+CONFIG_EFI_CAPSULE_LOADER=y
+CONFIG_EFI_CAPSULE_QUIRK_QUARK_CSH=y
+# CONFIG_EFI_TEST is not set
+CONFIG_APPLE_PROPERTIES=y
+CONFIG_RESET_ATTACK_MITIGATION=y
+# CONFIG_EFI_RCI2_TABLE is not set
+# CONFIG_EFI_DISABLE_PCI_DMA is not set
+# end of EFI (Extensible Firmware Interface) Support
+
+CONFIG_UEFI_CPER=y
+CONFIG_UEFI_CPER_X86=y
+CONFIG_EFI_DEV_PATH_PARSER=y
+CONFIG_EFI_EARLYCON=y
+CONFIG_EFI_CUSTOM_SSDT_OVERLAYS=y
+
+#
+# Tegra firmware driver
+#
+# end of Tegra firmware driver
+# end of Firmware Drivers
+
 CONFIG_GNSS=m
 CONFIG_GNSS_SERIAL=m
 CONFIG_GNSS_MTK_SERIAL=m
@@ -2284,6 +2316,10 @@ CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
 CONFIG_MTD_BLKDEVS=m
 CONFIG_MTD_BLOCK=m
 CONFIG_MTD_BLOCK_RO=m
+
+#
+# Note that in some cases UBI block is preferred. See MTD_UBI_BLOCK.
+#
 CONFIG_FTL=m
 CONFIG_NFTL=m
 CONFIG_NFTL_RW=y
@@ -2625,6 +2661,7 @@ CONFIG_PVPANIC_PCI=m
 #
 CONFIG_SCSI_MOD=y
 CONFIG_RAID_ATTRS=m
+CONFIG_SCSI_COMMON=y
 CONFIG_SCSI=y
 CONFIG_SCSI_DMA=y
 CONFIG_SCSI_NETLINK=y
@@ -2637,6 +2674,7 @@ CONFIG_BLK_DEV_SD=y
 CONFIG_CHR_DEV_ST=m
 CONFIG_BLK_DEV_SR=y
 CONFIG_CHR_DEV_SG=y
+CONFIG_BLK_DEV_BSG=y
 CONFIG_CHR_DEV_SCH=m
 CONFIG_SCSI_ENCLOSURE=m
 CONFIG_SCSI_CONSTANTS=y
@@ -2713,6 +2751,7 @@ CONFIG_SCSI_UFS_CDNS_PLATFORM=m
 # CONFIG_SCSI_UFS_DWC_TC_PLATFORM is not set
 # CONFIG_SCSI_UFS_BSG is not set
 CONFIG_SCSI_UFS_CRYPTO=y
+CONFIG_SCSI_UFS_HPB=y
 CONFIG_SCSI_HPTIOP=m
 CONFIG_SCSI_BUSLOGIC=m
 CONFIG_SCSI_FLASHPOINT=y
@@ -2920,7 +2959,6 @@ CONFIG_DM_THIN_PROVISIONING=m
 CONFIG_DM_CACHE=m
 CONFIG_DM_CACHE_SMQ=m
 CONFIG_DM_WRITECACHE=m
-# CONFIG_DM_EBS is not set
 CONFIG_DM_ERA=m
 CONFIG_DM_CLONE=m
 CONFIG_DM_MIRROR=m
@@ -3184,7 +3222,7 @@ CONFIG_CHELSIO_INLINE_CRYPTO=y
 # CONFIG_CHELSIO_IPSEC_INLINE is not set
 CONFIG_NET_VENDOR_CIRRUS=y
 CONFIG_CS89x0=m
-CONFIG_CS89x0_PLATFORM=y
+CONFIG_CS89x0_ISA=m
 CONFIG_NET_VENDOR_CISCO=y
 CONFIG_ENIC=m
 # CONFIG_NET_VENDOR_CORTINA is not set
@@ -3246,6 +3284,7 @@ CONFIG_FM10K=m
 CONFIG_IGC=m
 CONFIG_NET_VENDOR_MICROSOFT=y
 CONFIG_JME=m
+CONFIG_NET_VENDOR_LITEX=y
 CONFIG_NET_VENDOR_MARVELL=y
 CONFIG_MVMDIO=m
 CONFIG_SKGE=m
@@ -3460,6 +3499,7 @@ CONFIG_LSI_ET1011C_PHY=m
 CONFIG_MARVELL_PHY=m
 CONFIG_MARVELL_10G_PHY=m
 CONFIG_MARVELL_88X2222_PHY=m
+CONFIG_MAXLINEAR_GPHY=m
 CONFIG_MEDIATEK_GE_PHY=m
 CONFIG_MICREL_PHY=m
 CONFIG_MICROCHIP_PHY=m
@@ -3485,6 +3525,10 @@ CONFIG_DP83869_PHY=m
 CONFIG_VITESSE_PHY=m
 CONFIG_XILINX_GMII2RGMII=m
 CONFIG_MICREL_KS8995MA=m
+
+#
+# MCTP Device Drivers
+#
 CONFIG_MDIO_DEVICE=y
 CONFIG_MDIO_BUS=y
 CONFIG_FWNODE_MDIO=y
@@ -3740,7 +3784,6 @@ CONFIG_P54_PCI=m
 CONFIG_P54_SPI=m
 # CONFIG_P54_SPI_DEFAULT_EEPROM is not set
 CONFIG_P54_LEDS=y
-# CONFIG_PRISM54 is not set
 CONFIG_WLAN_VENDOR_MARVELL=y
 CONFIG_LIBERTAS=m
 CONFIG_LIBERTAS_USB=m
@@ -3878,8 +3921,6 @@ CONFIG_N2=m
 CONFIG_C101=m
 CONFIG_FARSYNC=m
 CONFIG_LAPBETHER=m
-CONFIG_SBNI=m
-# CONFIG_SBNI_MULTILINE is not set
 CONFIG_IEEE802154_DRIVERS=m
 CONFIG_IEEE802154_FAKELB=m
 CONFIG_IEEE802154_AT86RF230=m
@@ -3899,6 +3940,7 @@ CONFIG_IEEE802154_MCR20A=m
 CONFIG_WWAN=y
 # CONFIG_WWAN_HWSIM is not set
 CONFIG_MHI_WWAN_CTRL=m
+CONFIG_MHI_WWAN_MBIM=m
 CONFIG_RPMSG_WWAN_CTRL=m
 CONFIG_IOSM=m
 # end of Wireless WAN
@@ -3911,6 +3953,7 @@ CONFIG_USB4_NET=m
 CONFIG_HYPERV_NET=m
 CONFIG_NETDEVSIM=m
 CONFIG_NET_FAILOVER=y
+CONFIG_NETDEV_LEGACY_INIT=y
 CONFIG_ISDN=y
 CONFIG_ISDN_CAPI=y
 CONFIG_CAPI_TRACE=y
@@ -3933,9 +3976,6 @@ CONFIG_MISDN_NETJET=m
 CONFIG_MISDN_HDLC=m
 CONFIG_MISDN_IPAC=m
 CONFIG_MISDN_ISAR=m
-CONFIG_NVM=y
-CONFIG_NVM_PBLK=m
-# CONFIG_NVM_PBLK_DEBUG is not set
 
 #
 # Input device support
@@ -4450,10 +4490,9 @@ CONFIG_XILLYBUS_CLASS=m
 CONFIG_XILLYBUS=m
 CONFIG_XILLYBUS_PCIE=m
 CONFIG_XILLYUSB=m
-# end of Character devices
-
 # CONFIG_RANDOM_TRUST_CPU is not set
 # CONFIG_RANDOM_TRUST_BOOTLOADER is not set
+# end of Character devices
 
 #
 # I2C support
@@ -4551,6 +4590,7 @@ CONFIG_I2C_VIPERBOARD=m
 CONFIG_I2C_PCA_ISA=m
 CONFIG_I2C_CROS_EC_TUNNEL=m
 CONFIG_SCx200_ACB=m
+CONFIG_I2C_VIRTIO=m
 # end of I2C Hardware Bus support
 
 CONFIG_I2C_STUB=m
@@ -4649,6 +4689,7 @@ CONFIG_PPS_CLIENT_GPIO=m
 # PTP clock support
 #
 CONFIG_PTP_1588_CLOCK=m
+CONFIG_PTP_1588_CLOCK_OPTIONAL=m
 
 #
 # Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks.
@@ -4673,7 +4714,7 @@ CONFIG_PINCTRL_MCP23S08_SPI=m
 CONFIG_PINCTRL_MCP23S08=m
 CONFIG_PINCTRL_SX150X=y
 CONFIG_PINCTRL_BAYTRAIL=y
-CONFIG_PINCTRL_CHERRYVIEW=m
+CONFIG_PINCTRL_CHERRYVIEW=y
 CONFIG_PINCTRL_LYNXPOINT=m
 CONFIG_PINCTRL_INTEL=y
 CONFIG_PINCTRL_ALDERLAKE=m
@@ -4813,6 +4854,7 @@ CONFIG_GPIO_VIPERBOARD=m
 #
 CONFIG_GPIO_AGGREGATOR=m
 # CONFIG_GPIO_MOCKUP is not set
+CONFIG_GPIO_VIRTIO=m
 # end of Virtual GPIO drivers
 
 CONFIG_W1=m
@@ -4857,6 +4899,7 @@ CONFIG_POWER_RESET=y
 CONFIG_POWER_RESET_ATC260X=m
 # CONFIG_POWER_RESET_MT6323 is not set
 CONFIG_POWER_RESET_RESTART=y
+CONFIG_POWER_RESET_TPS65086=y
 CONFIG_POWER_SUPPLY=y
 # CONFIG_POWER_SUPPLY_DEBUG is not set
 CONFIG_POWER_SUPPLY_HWMON=y
@@ -4911,6 +4954,7 @@ CONFIG_CHARGER_MAX77693=m
 CONFIG_CHARGER_MAX8997=m
 CONFIG_CHARGER_MAX8998=m
 CONFIG_CHARGER_MP2629=m
+CONFIG_CHARGER_MT6360=m
 CONFIG_CHARGER_BQ2415X=m
 CONFIG_CHARGER_BQ24190=m
 CONFIG_CHARGER_BQ24257=m
@@ -4926,6 +4970,7 @@ CONFIG_BATTERY_GOLDFISH=m
 CONFIG_BATTERY_RT5033=m
 CONFIG_CHARGER_RT9455=m
 CONFIG_CHARGER_CROS_USBPD=m
+CONFIG_CHARGER_CROS_PCHG=m
 CONFIG_CHARGER_BD99954=m
 CONFIG_CHARGER_WILCO=m
 CONFIG_HWMON=y
@@ -4955,6 +5000,7 @@ CONFIG_SENSORS_ADT7462=m
 CONFIG_SENSORS_ADT7470=m
 CONFIG_SENSORS_ADT7475=m
 CONFIG_SENSORS_AHT10=m
+CONFIG_SENSORS_AQUACOMPUTER_D5NEXT=m
 CONFIG_SENSORS_AS370=m
 CONFIG_SENSORS_ASC7621=m
 CONFIG_SENSORS_AXI_FAN_CONTROL=m
@@ -5093,6 +5139,7 @@ CONFIG_SENSORS_UCD9200=m
 CONFIG_SENSORS_XDPE122=m
 CONFIG_SENSORS_ZL6100=m
 CONFIG_SENSORS_SBTSI=m
+CONFIG_SENSORS_SBRMI=m
 CONFIG_SENSORS_SHT15=m
 CONFIG_SENSORS_SHT21=m
 CONFIG_SENSORS_SHT3x=m
@@ -5188,6 +5235,7 @@ CONFIG_INT3406_THERMAL=m
 CONFIG_INTEL_BXT_PMIC_THERMAL=m
 CONFIG_INTEL_PCH_THERMAL=m
 CONFIG_INTEL_TCC_COOLING=m
+CONFIG_INTEL_MENLOW=m
 # end of Intel thermal drivers
 
 CONFIG_GENERIC_ADC_THERMAL=m
@@ -5516,7 +5564,9 @@ CONFIG_REGULATOR_RT4831=m
 CONFIG_REGULATOR_RT5033=m
 CONFIG_REGULATOR_RT6160=m
 CONFIG_REGULATOR_RT6245=m
+CONFIG_REGULATOR_RTQ2134=m
 CONFIG_REGULATOR_RTMV20=m
+CONFIG_REGULATOR_RTQ6752=m
 CONFIG_REGULATOR_SKY81452=m
 CONFIG_REGULATOR_SLG51000=m
 CONFIG_REGULATOR_TPS51632=m
@@ -6473,7 +6523,6 @@ CONFIG_DRM_AMDGPU_USERPTR=y
 CONFIG_DRM_AMD_DC=y
 CONFIG_DRM_AMD_DC_DCN=y
 # CONFIG_DRM_AMD_DC_HDCP is not set
-CONFIG_DRM_AMD_DC_SI=y
 # CONFIG_DEBUG_KERNEL_DC is not set
 CONFIG_DRM_AMD_SECURE_DISPLAY=y
 # end of Display Engine Configuration
@@ -6523,12 +6572,12 @@ CONFIG_DRM_VGEM=m
 # CONFIG_DRM_VKMS is not set
 CONFIG_DRM_VMWGFX=m
 CONFIG_DRM_VMWGFX_FBCON=y
+# CONFIG_DRM_VMWGFX_MKSSTATS is not set
 CONFIG_DRM_GMA500=m
 CONFIG_DRM_UDL=m
 CONFIG_DRM_AST=m
 # CONFIG_DRM_MGAG200 is not set
 CONFIG_DRM_QXL=m
-CONFIG_DRM_BOCHS=m
 CONFIG_DRM_VIRTIO_GPU=m
 CONFIG_DRM_PANEL=y
 
@@ -6536,6 +6585,7 @@ CONFIG_DRM_PANEL=y
 # Display Panels
 #
 # CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN is not set
+CONFIG_DRM_PANEL_WIDECHIPS_WS2401=m
 # end of Display Panels
 
 CONFIG_DRM_BRIDGE=y
@@ -6549,9 +6599,10 @@ CONFIG_DRM_ANALOGIX_DP=m
 # end of Display Interface Bridges
 
 # CONFIG_DRM_ETNAVIV is not set
+CONFIG_DRM_BOCHS=m
 CONFIG_DRM_CIRRUS_QEMU=m
 CONFIG_DRM_GM12U320=m
-CONFIG_DRM_SIMPLEDRM=m
+# CONFIG_DRM_SIMPLEDRM is not set
 CONFIG_TINYDRM_HX8357D=m
 CONFIG_TINYDRM_ILI9225=m
 CONFIG_TINYDRM_ILI9341=m
@@ -6933,6 +6984,7 @@ CONFIG_SND_HDA_CODEC_SIGMATEL=m
 CONFIG_SND_HDA_CODEC_VIA=m
 CONFIG_SND_HDA_CODEC_HDMI=m
 CONFIG_SND_HDA_CODEC_CIRRUS=m
+CONFIG_SND_HDA_CODEC_CS8409=m
 CONFIG_SND_HDA_CODEC_CONEXANT=m
 CONFIG_SND_HDA_CODEC_CA0110=m
 CONFIG_SND_HDA_CODEC_CA0132=m
@@ -7001,6 +7053,7 @@ CONFIG_SND_SOC_AMD_ACP3x=m
 CONFIG_SND_SOC_AMD_RV_RT5682_MACH=m
 CONFIG_SND_SOC_AMD_RENOIR=m
 CONFIG_SND_SOC_AMD_RENOIR_MACH=m
+CONFIG_SND_SOC_AMD_ACP5x=m
 CONFIG_SND_ATMEL_SOC=m
 CONFIG_SND_BCM63XX_I2S_WHISTLER=m
 CONFIG_SND_DESIGNWARE_I2S=m
@@ -7125,7 +7178,6 @@ CONFIG_SND_SOC_SOF_ALDERLAKE=m
 CONFIG_SND_SOC_SOF_HDA_COMMON=m
 CONFIG_SND_SOC_SOF_HDA_LINK=y
 CONFIG_SND_SOC_SOF_HDA_AUDIO_CODEC=y
-# CONFIG_SND_SOC_SOF_HDA_ALWAYS_ENABLE_DMI_L1 is not set
 CONFIG_SND_SOC_SOF_HDA_LINK_BASELINE=m
 CONFIG_SND_SOC_SOF_HDA=m
 CONFIG_SND_SOC_SOF_INTEL_SOUNDWIRE_LINK_BASELINE=m
@@ -7210,6 +7262,7 @@ CONFIG_SND_SOC_ES8328_SPI=m
 CONFIG_SND_SOC_GTM601=m
 CONFIG_SND_SOC_HDAC_HDMI=m
 CONFIG_SND_SOC_HDAC_HDA=m
+CONFIG_SND_SOC_ICS43432=m
 CONFIG_SND_SOC_INNO_RK3036=m
 CONFIG_SND_SOC_MAX98088=m
 CONFIG_SND_SOC_MAX98090=m
@@ -7979,12 +8032,10 @@ CONFIG_LEDS_CLASS_MULTICOLOR=m
 #
 CONFIG_LEDS_88PM860X=m
 CONFIG_LEDS_APU=m
-CONFIG_LEDS_AS3645A=m
 CONFIG_LEDS_LM3530=m
 CONFIG_LEDS_LM3532=m
 CONFIG_LEDS_LM3533=m
 CONFIG_LEDS_LM3642=m
-CONFIG_LEDS_LM3601X=m
 CONFIG_LEDS_MT6323=m
 CONFIG_LEDS_NET48XX=m
 CONFIG_LEDS_WRAP=m
@@ -8029,12 +8080,14 @@ CONFIG_LEDS_NIC78BX=m
 CONFIG_LEDS_TI_LMU_COMMON=m
 CONFIG_LEDS_LM36274=m
 CONFIG_LEDS_TPS6105X=m
-CONFIG_LEDS_SGM3140=m
 
 #
 # Flash and Torch LED drivers
 #
+CONFIG_LEDS_AS3645A=m
+CONFIG_LEDS_LM3601X=m
 # CONFIG_LEDS_RT8515 is not set
+CONFIG_LEDS_SGM3140=m
 
 #
 # LED Triggers
@@ -8293,6 +8346,7 @@ CONFIG_SYNC_FILE=y
 # CONFIG_DMABUF_DEBUG is not set
 # CONFIG_DMABUF_SELFTESTS is not set
 # CONFIG_DMABUF_HEAPS is not set
+# CONFIG_DMABUF_SYSFS_STATS is not set
 # end of DMABUF options
 
 CONFIG_AUXDISPLAY=y
@@ -8326,14 +8380,15 @@ CONFIG_UIO_PRUSS=m
 CONFIG_UIO_MF624=m
 CONFIG_UIO_HV_GENERIC=m
 CONFIG_UIO_DFL=m
+CONFIG_VFIO=m
 CONFIG_VFIO_IOMMU_TYPE1=m
 CONFIG_VFIO_VIRQFD=m
-CONFIG_VFIO=m
 CONFIG_VFIO_NOIOMMU=y
-CONFIG_VFIO_PCI=m
-CONFIG_VFIO_PCI_VGA=y
+CONFIG_VFIO_PCI_CORE=m
 CONFIG_VFIO_PCI_MMAP=y
 CONFIG_VFIO_PCI_INTX=y
+CONFIG_VFIO_PCI=m
+CONFIG_VFIO_PCI_VGA=y
 CONFIG_VFIO_PCI_IGD=y
 CONFIG_VFIO_MDEV=m
 CONFIG_IRQ_BYPASS_MANAGER=m
@@ -8354,6 +8409,7 @@ CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y
 CONFIG_VIRTIO_DMA_SHARED_BUFFER=m
 CONFIG_VDPA=m
 # CONFIG_VDPA_SIM is not set
+CONFIG_VDPA_USER=m
 CONFIG_IFCVF=m
 CONFIG_MLX5_VDPA=y
 CONFIG_MLX5_VDPA_NET=m
@@ -8391,7 +8447,6 @@ CONFIG_XEN_XENBUS_FRONTEND=y
 CONFIG_XEN_GNTDEV=m
 CONFIG_XEN_GRANT_DEV_ALLOC=m
 # CONFIG_XEN_GRANT_DMA_ALLOC is not set
-CONFIG_SWIOTLB_XEN=y
 CONFIG_XEN_PCIDEV_BACKEND=m
 CONFIG_XEN_PVCALLS_FRONTEND=m
 # CONFIG_XEN_PVCALLS_BACKEND is not set
@@ -8687,8 +8742,6 @@ CONFIG_X86_PLATFORM_DEVICES=y
 CONFIG_ACPI_WMI=m
 CONFIG_WMI_BMOF=m
 CONFIG_HUAWEI_WMI=m
-CONFIG_INTEL_WMI_SBL_FW_UPDATE=m
-CONFIG_INTEL_WMI_THUNDERBOLT=m
 CONFIG_MXM_WMI=m
 CONFIG_PEAQ_WMI=m
 CONFIG_XIAOMI_WMI=m
@@ -8703,6 +8756,7 @@ CONFIG_ASUS_LAPTOP=m
 CONFIG_ASUS_WIRELESS=m
 CONFIG_ASUS_WMI=m
 CONFIG_ASUS_NB_WMI=m
+CONFIG_MERAKI_MX100=m
 CONFIG_EEEPC_LAPTOP=m
 CONFIG_EEEPC_WMI=m
 CONFIG_X86_PLATFORM_DRIVERS_DELL=y
@@ -8741,14 +8795,28 @@ CONFIG_THINKPAD_ACPI_VIDEO=y
 CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y
 CONFIG_THINKPAD_LMI=m
 CONFIG_X86_PLATFORM_DRIVERS_INTEL=y
+CONFIG_INTEL_ATOMISP2_PDX86=y
+CONFIG_INTEL_ATOMISP2_LED=m
+CONFIG_INTEL_SAR_INT1092=m
 CONFIG_INTEL_CHT_INT33FE=m
 CONFIG_INTEL_SKL_INT3472=m
-CONFIG_INTEL_ATOMISP2_LED=m
+CONFIG_INTEL_PMC_CORE=y
+CONFIG_INTEL_PMT_CLASS=m
+CONFIG_INTEL_PMT_TELEMETRY=m
+CONFIG_INTEL_PMT_CRASHLOG=m
+CONFIG_INTEL_WMI=y
+CONFIG_INTEL_WMI_SBL_FW_UPDATE=m
+CONFIG_INTEL_WMI_THUNDERBOLT=m
 CONFIG_INTEL_HID_EVENT=m
+CONFIG_INTEL_VBTN=m
 CONFIG_INTEL_INT0002_VGPIO=m
-CONFIG_INTEL_MENLOW=m
 CONFIG_INTEL_OAKTRAIL=m
-CONFIG_INTEL_VBTN=m
+CONFIG_INTEL_BXTWC_PMIC_TMU=m
+CONFIG_INTEL_CHTDC_TI_PWRBTN=m
+CONFIG_INTEL_MRFLD_PWRBTN=m
+CONFIG_INTEL_PUNIT_IPC=m
+CONFIG_INTEL_RST=m
+CONFIG_INTEL_SMARTCONNECT=m
 CONFIG_MSI_LAPTOP=m
 CONFIG_MSI_WMI=m
 CONFIG_PCENGINES_APU2=m
@@ -8772,16 +8840,6 @@ CONFIG_I2C_MULTI_INSTANTIATE=m
 CONFIG_FW_ATTR_CLASS=m
 CONFIG_INTEL_IMR=y
 CONFIG_INTEL_IPS=m
-CONFIG_INTEL_RST=m
-CONFIG_INTEL_SMARTCONNECT=m
-CONFIG_INTEL_BXTWC_PMIC_TMU=m
-CONFIG_INTEL_CHTDC_TI_PWRBTN=m
-CONFIG_INTEL_MRFLD_PWRBTN=m
-CONFIG_INTEL_PMC_CORE=y
-CONFIG_INTEL_PMT_CLASS=m
-CONFIG_INTEL_PMT_TELEMETRY=m
-CONFIG_INTEL_PMT_CRASHLOG=m
-CONFIG_INTEL_PUNIT_IPC=m
 CONFIG_INTEL_SCU_IPC=y
 CONFIG_INTEL_SCU=y
 CONFIG_INTEL_SCU_PCI=y
@@ -8860,6 +8918,8 @@ CONFIG_IOMMU_SUPPORT=y
 # end of Generic IOMMU Pagetable Support
 
 # CONFIG_IOMMU_DEBUGFS is not set
+# CONFIG_IOMMU_DEFAULT_DMA_STRICT is not set
+CONFIG_IOMMU_DEFAULT_DMA_LAZY=y
 # CONFIG_IOMMU_DEFAULT_PASSTHROUGH is not set
 CONFIG_IOMMU_DMA=y
 CONFIG_DMAR_TABLE=y
@@ -9146,6 +9206,7 @@ CONFIG_SCD30_CORE=m
 CONFIG_SCD30_I2C=m
 CONFIG_SCD30_SERIAL=m
 CONFIG_SENSIRION_SGP30=m
+CONFIG_SENSIRION_SGP40=m
 CONFIG_SPS30=m
 CONFIG_SPS30_I2C=m
 CONFIG_SPS30_SERIAL=m
@@ -9444,6 +9505,7 @@ CONFIG_HID_SENSOR_CUSTOM_INTEL_HINGE=m
 #
 # Digital potentiometers
 #
+CONFIG_AD5110=m
 CONFIG_AD5272=m
 CONFIG_DS1803=m
 CONFIG_MAX5432=m
@@ -9780,13 +9842,13 @@ CONFIG_F2FS_FS_SECURITY=y
 # CONFIG_F2FS_CHECK_FS is not set
 # CONFIG_F2FS_FAULT_INJECTION is not set
 # CONFIG_F2FS_FS_COMPRESSION is not set
+# CONFIG_F2FS_IOSTAT is not set
 CONFIG_ZONEFS_FS=m
 CONFIG_FS_DAX=y
 CONFIG_FS_POSIX_ACL=y
 CONFIG_EXPORTFS=y
 # CONFIG_EXPORTFS_BLOCK_OPS is not set
 CONFIG_FILE_LOCKING=y
-CONFIG_MANDATORY_FILE_LOCKING=y
 # CONFIG_FS_ENCRYPTION is not set
 CONFIG_FS_VERITY=y
 # CONFIG_FS_VERITY_DEBUG is not set
@@ -9820,15 +9882,12 @@ CONFIG_OVERLAY_FS=m
 # Caches
 #
 CONFIG_NETFS_SUPPORT=m
-# CONFIG_NETFS_STATS is not set
+CONFIG_NETFS_STATS=y
 CONFIG_FSCACHE=m
 CONFIG_FSCACHE_STATS=y
-# CONFIG_FSCACHE_HISTOGRAM is not set
 # CONFIG_FSCACHE_DEBUG is not set
-# CONFIG_FSCACHE_OBJECT_LIST is not set
 CONFIG_CACHEFILES=m
 # CONFIG_CACHEFILES_DEBUG is not set
-# CONFIG_CACHEFILES_HISTOGRAM is not set
 # end of Caches
 
 #
@@ -9854,6 +9913,9 @@ CONFIG_EXFAT_DEFAULT_IOCHARSET="utf8"
 CONFIG_NTFS_FS=m
 # CONFIG_NTFS_DEBUG is not set
 # CONFIG_NTFS_RW is not set
+CONFIG_NTFS3_FS=m
+CONFIG_NTFS3_LZX_XPRESS=y
+# CONFIG_NTFS3_FS_POSIX_ACL is not set
 # end of DOS/FAT/EXFAT/NT Filesystems
 
 #
@@ -9963,6 +10025,7 @@ CONFIG_PSTORE_COMPRESS_DEFAULT="deflate"
 # CONFIG_PSTORE_PMSG is not set
 # CONFIG_PSTORE_FTRACE is not set
 CONFIG_PSTORE_RAM=m
+# CONFIG_PSTORE_BLK is not set
 CONFIG_SYSV_FS=m
 CONFIG_UFS_FS=m
 # CONFIG_UFS_FS_WRITE is not set
@@ -10026,7 +10089,6 @@ CONFIG_CEPH_FS_SECURITY_LABEL=y
 CONFIG_CIFS=m
 # CONFIG_CIFS_STATS2 is not set
 CONFIG_CIFS_ALLOW_INSECURE_LEGACY=y
-CONFIG_CIFS_WEAK_PW_HASH=y
 CONFIG_CIFS_UPCALL=y
 CONFIG_CIFS_XATTR=y
 CONFIG_CIFS_POSIX=y
@@ -10037,6 +10099,8 @@ CONFIG_CIFS_DFS_UPCALL=y
 CONFIG_CIFS_SWN_UPCALL=y
 # CONFIG_CIFS_SMB_DIRECT is not set
 CONFIG_CIFS_FSCACHE=y
+# CONFIG_SMB_SERVER is not set
+CONFIG_SMBFS_COMMON=m
 CONFIG_CODA_FS=m
 CONFIG_AFS_FS=m
 # CONFIG_AFS_DEBUG is not set
@@ -10203,13 +10267,24 @@ CONFIG_LSM="yama,loadpin,safesetid,integrity,apparmor,selinux,smack,tomoyo"
 #
 # Kernel hardening options
 #
+CONFIG_GCC_PLUGIN_STRUCTLEAK=y
 
 #
 # Memory initialization
 #
-CONFIG_INIT_STACK_NONE=y
+# CONFIG_INIT_STACK_NONE is not set
+# CONFIG_GCC_PLUGIN_STRUCTLEAK_USER is not set
+# CONFIG_GCC_PLUGIN_STRUCTLEAK_BYREF is not set
+CONFIG_GCC_PLUGIN_STRUCTLEAK_BYREF_ALL=y
+# CONFIG_GCC_PLUGIN_STRUCTLEAK_VERBOSE is not set
+CONFIG_GCC_PLUGIN_STACKLEAK=y
+CONFIG_STACKLEAK_TRACK_MIN_SIZE=100
+# CONFIG_STACKLEAK_METRICS is not set
+CONFIG_STACKLEAK_RUNTIME_DISABLE=y
 CONFIG_INIT_ON_ALLOC_DEFAULT_ON=y
 # CONFIG_INIT_ON_FREE_DEFAULT_ON is not set
+CONFIG_CC_HAS_ZERO_CALL_USED_REGS=y
+# CONFIG_ZERO_CALL_USED_REGS is not set
 # end of Memory initialization
 # end of Kernel hardening options
 # end of Security options
@@ -10401,6 +10476,7 @@ CONFIG_CRYPTO_LIB_POLY1305_GENERIC=m
 CONFIG_CRYPTO_LIB_POLY1305=m
 CONFIG_CRYPTO_LIB_CHACHA20POLY1305=m
 CONFIG_CRYPTO_LIB_SHA256=y
+CONFIG_CRYPTO_LIB_SM4=m
 CONFIG_CRYPTO_HW=y
 CONFIG_CRYPTO_DEV_PADLOCK=y
 CONFIG_CRYPTO_DEV_PADLOCK_AES=m
@@ -10655,6 +10731,7 @@ CONFIG_KDB_CONTINUE_CATASTROPHIC=0
 CONFIG_ARCH_HAS_EARLY_DEBUG=y
 CONFIG_ARCH_HAS_UBSAN_SANITIZE_ALL=y
 # CONFIG_UBSAN is not set
+CONFIG_HAVE_KCSAN_COMPILER=y
 # end of Generic Kernel Debugging Instruments
 
 CONFIG_DEBUG_KERNEL=y
@@ -10695,9 +10772,9 @@ CONFIG_CC_HAS_KASAN_GENERIC=y
 CONFIG_CC_HAS_WORKING_NOSANITIZE_ADDRESS=y
 CONFIG_HAVE_ARCH_KFENCE=y
 CONFIG_KFENCE=y
-CONFIG_KFENCE_STATIC_KEYS=y
 CONFIG_KFENCE_SAMPLE_INTERVAL=0
 CONFIG_KFENCE_NUM_OBJECTS=255
+CONFIG_KFENCE_STATIC_KEYS=y
 CONFIG_KFENCE_STRESS_TEST_FAULTS=0
 # end of Memory Debugging
 
@@ -10784,7 +10861,6 @@ CONFIG_RCU_CPU_STALL_TIMEOUT=60
 # end of RCU Debugging
 
 # CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set
-# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
 # CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set
 # CONFIG_LATENCYTOP is not set
 CONFIG_USER_STACKTRACE_SUPPORT=y
@@ -10859,7 +10935,6 @@ CONFIG_IO_STRICT_DEVMEM=y
 #
 # x86 Debugging
 #
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
 CONFIG_TRACE_IRQFLAGS_NMI_SUPPORT=y
 CONFIG_EARLY_PRINTK_USB=y
 # CONFIG_X86_VERBOSE_BOOTUP is not set
@@ -10898,7 +10973,6 @@ CONFIG_CC_HAS_SANCOV_TRACE_PC=y
 CONFIG_RUNTIME_TESTING_MENU=y
 # CONFIG_LKDTM is not set
 # CONFIG_TEST_MIN_HEAP is not set
-# CONFIG_TEST_SORT is not set
 # CONFIG_TEST_DIV64 is not set
 # CONFIG_KPROBES_SANITY_TEST is not set
 # CONFIG_BACKTRACE_SELF_TEST is not set
diff --git a/gnu/packages/aux-files/linux-libre/5.14-x86_64.conf b/gnu/packages/aux-files/linux-libre/5.15-x86_64.conf
index 844420becd..ad42192937 100644
--- a/gnu/packages/aux-files/linux-libre/5.14-x86_64.conf
+++ b/gnu/packages/aux-files/linux-libre/5.15-x86_64.conf
@@ -1,19 +1,20 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/x86 5.14.0 Kernel Configuration
+# Linux/x86 5.15.5 Kernel Configuration
 #
-CONFIG_CC_VERSION_TEXT="gcc (Debian 8.3.0-6) 8.3.0"
+CONFIG_CC_VERSION_TEXT="gcc (GCC) 11.2.0"
 CONFIG_CC_IS_GCC=y
-CONFIG_GCC_VERSION=80300
+CONFIG_GCC_VERSION=110200
 CONFIG_CLANG_VERSION=0
 CONFIG_AS_IS_GNU=y
-CONFIG_AS_VERSION=23101
+CONFIG_AS_VERSION=23400
 CONFIG_LD_IS_BFD=y
-CONFIG_LD_VERSION=23101
+CONFIG_LD_VERSION=23400
 CONFIG_LLD_VERSION=0
 CONFIG_CC_CAN_LINK=y
 CONFIG_CC_CAN_LINK_STATIC=y
 CONFIG_CC_HAS_ASM_GOTO=y
+CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y
 CONFIG_CC_HAS_ASM_INLINE=y
 CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y
 CONFIG_IRQ_WORK=y
@@ -25,6 +26,7 @@ CONFIG_THREAD_INFO_IN_TASK=y
 #
 CONFIG_INIT_ENV_ARG_LIMIT=32
 # CONFIG_COMPILE_TEST is not set
+# CONFIG_WERROR is not set
 CONFIG_LOCALVERSION=""
 # CONFIG_LOCALVERSION_AUTO is not set
 CONFIG_BUILD_SALT=""
@@ -157,6 +159,7 @@ CONFIG_BUILD_BIN2C=y
 CONFIG_LOG_BUF_SHIFT=18
 CONFIG_LOG_CPU_MAX_BUF_SHIFT=12
 CONFIG_PRINTK_SAFE_LOG_BUF_SHIFT=13
+# CONFIG_PRINTK_INDEX is not set
 CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
 
 #
@@ -231,7 +234,6 @@ CONFIG_SYSFS_SYSCALL=y
 CONFIG_FHANDLE=y
 CONFIG_POSIX_TIMERS=y
 CONFIG_PRINTK=y
-CONFIG_PRINTK_NMI=y
 CONFIG_BUG=y
 CONFIG_ELF_CORE=y
 CONFIG_PCSPKR_PLATFORM=y
@@ -308,6 +310,7 @@ CONFIG_HAVE_SETUP_PER_CPU_AREA=y
 CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y
 CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y
 CONFIG_ARCH_HIBERNATION_POSSIBLE=y
+CONFIG_ARCH_NR_GPIO=1024
 CONFIG_ARCH_SUSPEND_POSSIBLE=y
 CONFIG_ARCH_WANT_GENERAL_HUGETLB=y
 CONFIG_AUDIT_ARCH=y
@@ -350,13 +353,14 @@ CONFIG_XEN=y
 CONFIG_XEN_PV=y
 CONFIG_XEN_512GB=y
 CONFIG_XEN_PV_SMP=y
-CONFIG_XEN_DOM0=y
+CONFIG_XEN_PV_DOM0=y
 CONFIG_XEN_PVHVM=y
 CONFIG_XEN_PVHVM_SMP=y
 CONFIG_XEN_PVHVM_GUEST=y
 CONFIG_XEN_SAVE_RESTORE=y
 # CONFIG_XEN_DEBUG_FS is not set
 CONFIG_XEN_PVH=y
+CONFIG_XEN_DOM0=y
 CONFIG_KVM_GUEST=y
 CONFIG_ARCH_CPUIDLE_HALTPOLL=y
 CONFIG_PVH=y
@@ -413,6 +417,7 @@ CONFIG_PERF_EVENTS_INTEL_UNCORE=y
 CONFIG_PERF_EVENTS_INTEL_RAPL=y
 CONFIG_PERF_EVENTS_INTEL_CSTATE=y
 CONFIG_PERF_EVENTS_AMD_POWER=m
+CONFIG_PERF_EVENTS_AMD_UNCORE=m
 # end of Performance monitoring
 
 CONFIG_X86_16BIT=y
@@ -655,7 +660,6 @@ CONFIG_MMCONF_FAM10H=y
 # CONFIG_ISA_BUS is not set
 CONFIG_ISA_DMA_API=y
 CONFIG_AMD_NB=y
-# CONFIG_X86_SYSFB is not set
 # end of Bus options (PCI etc.)
 
 #
@@ -669,54 +673,6 @@ CONFIG_COMPAT_FOR_U64_ALIGNMENT=y
 CONFIG_SYSVIPC_COMPAT=y
 # end of Binary Emulations
 
-#
-# Firmware Drivers
-#
-CONFIG_EDD=y
-CONFIG_EDD_OFF=y
-CONFIG_FIRMWARE_MEMMAP=y
-CONFIG_DMIID=y
-CONFIG_DMI_SYSFS=m
-CONFIG_DMI_SCAN_MACHINE_NON_EFI_FALLBACK=y
-CONFIG_ISCSI_IBFT_FIND=y
-CONFIG_ISCSI_IBFT=m
-CONFIG_FW_CFG_SYSFS=m
-# CONFIG_FW_CFG_SYSFS_CMDLINE is not set
-# CONFIG_GOOGLE_FIRMWARE is not set
-
-#
-# EFI (Extensible Firmware Interface) Support
-#
-CONFIG_EFI_VARS=y
-CONFIG_EFI_ESRT=y
-CONFIG_EFI_VARS_PSTORE=m
-# CONFIG_EFI_VARS_PSTORE_DEFAULT_DISABLE is not set
-CONFIG_EFI_RUNTIME_MAP=y
-# CONFIG_EFI_FAKE_MEMMAP is not set
-CONFIG_EFI_SOFT_RESERVE=y
-CONFIG_EFI_RUNTIME_WRAPPERS=y
-CONFIG_EFI_GENERIC_STUB_INITRD_CMDLINE_LOADER=y
-CONFIG_EFI_BOOTLOADER_CONTROL=m
-# CONFIG_EFI_CAPSULE_LOADER is not set
-# CONFIG_EFI_TEST is not set
-CONFIG_APPLE_PROPERTIES=y
-CONFIG_RESET_ATTACK_MITIGATION=y
-# CONFIG_EFI_RCI2_TABLE is not set
-# CONFIG_EFI_DISABLE_PCI_DMA is not set
-# end of EFI (Extensible Firmware Interface) Support
-
-CONFIG_UEFI_CPER=y
-CONFIG_UEFI_CPER_X86=y
-CONFIG_EFI_DEV_PATH_PARSER=y
-CONFIG_EFI_EARLYCON=y
-CONFIG_EFI_CUSTOM_SSDT_OVERLAYS=y
-
-#
-# Tegra firmware driver
-#
-# end of Tegra firmware driver
-# end of Firmware Drivers
-
 CONFIG_HAVE_KVM=y
 CONFIG_HAVE_KVM_IRQCHIP=y
 CONFIG_HAVE_KVM_IRQFD=y
@@ -772,6 +728,7 @@ CONFIG_HAVE_OPTPROBES=y
 CONFIG_HAVE_KPROBES_ON_FTRACE=y
 CONFIG_HAVE_FUNCTION_ERROR_INJECTION=y
 CONFIG_HAVE_NMI=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
 CONFIG_HAVE_ARCH_TRACEHOOK=y
 CONFIG_HAVE_DMA_CONTIGUOUS=y
 CONFIG_GENERIC_SMP_IDLE_THREAD=y
@@ -861,6 +818,7 @@ CONFIG_HAVE_PREEMPT_DYNAMIC=y
 CONFIG_ARCH_WANT_LD_ORPHAN_WARN=y
 CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
 CONFIG_ARCH_HAS_ELFCORE_COMPAT=y
+CONFIG_ARCH_HAS_PARANOID_L1D_FLUSH=y
 
 #
 # GCOV-based kernel profiling
@@ -870,6 +828,10 @@ CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y
 # end of GCOV-based kernel profiling
 
 CONFIG_HAVE_GCC_PLUGINS=y
+CONFIG_GCC_PLUGINS=y
+# CONFIG_GCC_PLUGIN_CYC_COMPLEXITY is not set
+CONFIG_GCC_PLUGIN_LATENT_ENTROPY=y
+# CONFIG_GCC_PLUGIN_RANDSTRUCT is not set
 # end of General architecture-dependent options
 
 CONFIG_RT_MUTEXES=y
@@ -892,16 +854,14 @@ CONFIG_MODPROBE_PATH="/run/current-system/profile/bin/modprobe"
 CONFIG_MODULES_TREE_LOOKUP=y
 CONFIG_BLOCK=y
 CONFIG_BLK_RQ_ALLOC_TIME=y
-CONFIG_BLK_SCSI_REQUEST=y
 CONFIG_BLK_CGROUP_RWSTAT=y
-CONFIG_BLK_DEV_BSG=y
+CONFIG_BLK_DEV_BSG_COMMON=y
 CONFIG_BLK_DEV_BSGLIB=y
 CONFIG_BLK_DEV_INTEGRITY=y
 CONFIG_BLK_DEV_INTEGRITY_T10=y
 CONFIG_BLK_DEV_ZONED=y
 CONFIG_BLK_DEV_THROTTLING=y
 # CONFIG_BLK_DEV_THROTTLING_LOW is not set
-CONFIG_BLK_CMDLINE_PARSER=y
 CONFIG_BLK_WBT=y
 CONFIG_BLK_WBT_MQ=y
 # CONFIG_BLK_CGROUP_IOLATENCY is not set
@@ -945,6 +905,7 @@ CONFIG_BLK_MQ_PCI=y
 CONFIG_BLK_MQ_VIRTIO=y
 CONFIG_BLK_MQ_RDMA=y
 CONFIG_BLK_PM=y
+CONFIG_BLOCK_HOLDER_DEPRECATED=y
 
 #
 # IO Schedulers
@@ -1059,6 +1020,7 @@ CONFIG_ZSMALLOC=y
 # CONFIG_ZSMALLOC_STAT is not set
 CONFIG_GENERIC_EARLY_IOREMAP=y
 # CONFIG_DEFERRED_STRUCT_PAGE_INIT is not set
+CONFIG_PAGE_IDLE_FLAG=y
 CONFIG_IDLE_PAGE_TRACKING=y
 CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
 CONFIG_ARCH_HAS_PTE_DEVMAP=y
@@ -1078,6 +1040,14 @@ CONFIG_ARCH_HAS_PKEYS=y
 CONFIG_ARCH_HAS_PTE_SPECIAL=y
 CONFIG_MAPPING_DIRTY_HELPERS=y
 CONFIG_SECRETMEM=y
+
+#
+# Data Access Monitoring
+#
+CONFIG_DAMON=y
+CONFIG_DAMON_VADDR=y
+# CONFIG_DAMON_DBGFS is not set
+# end of Data Access Monitoring
 # end of Memory Management options
 
 CONFIG_NET=y
@@ -1095,6 +1065,7 @@ CONFIG_PACKET=y
 CONFIG_PACKET_DIAG=m
 CONFIG_UNIX=y
 CONFIG_UNIX_SCM=y
+CONFIG_AF_UNIX_OOB=y
 CONFIG_UNIX_DIAG=m
 CONFIG_TLS=m
 # CONFIG_TLS_DEVICE is not set
@@ -1205,6 +1176,7 @@ CONFIG_IPV6_PIMSM_V2=y
 # CONFIG_IPV6_SEG6_LWTUNNEL is not set
 # CONFIG_IPV6_SEG6_HMAC is not set
 # CONFIG_IPV6_RPL_LWTUNNEL is not set
+# CONFIG_IPV6_IOAM6_LWTUNNEL is not set
 CONFIG_NETLABEL=y
 CONFIG_MPTCP=y
 CONFIG_INET_MPTCP_DIAG=m
@@ -1628,7 +1600,6 @@ CONFIG_BRIDGE_VLAN_FILTERING=y
 CONFIG_BRIDGE_MRP=y
 CONFIG_BRIDGE_CFM=y
 CONFIG_NET_DSA=m
-CONFIG_NET_DSA_TAG_8021Q=m
 CONFIG_NET_DSA_TAG_AR9331=m
 CONFIG_NET_DSA_TAG_BRCM_COMMON=m
 CONFIG_NET_DSA_TAG_BRCM=m
@@ -1994,6 +1965,7 @@ CONFIG_AF_RXRPC_IPV6=y
 # CONFIG_RXKAD is not set
 CONFIG_AF_KCM=m
 CONFIG_STREAM_PARSER=y
+CONFIG_MCTP=m
 CONFIG_FIB_RULES=y
 CONFIG_WIRELESS=y
 CONFIG_WIRELESS_EXT=y
@@ -2289,6 +2261,69 @@ CONFIG_MHI_BUS_PCI_GENERIC=m
 
 CONFIG_CONNECTOR=y
 CONFIG_PROC_EVENTS=y
+
+#
+# Firmware Drivers
+#
+
+#
+# ARM System Control and Management Interface Protocol
+#
+# end of ARM System Control and Management Interface Protocol
+
+CONFIG_EDD=y
+CONFIG_EDD_OFF=y
+CONFIG_FIRMWARE_MEMMAP=y
+CONFIG_DMIID=y
+CONFIG_DMI_SYSFS=m
+CONFIG_DMI_SCAN_MACHINE_NON_EFI_FALLBACK=y
+CONFIG_ISCSI_IBFT_FIND=y
+CONFIG_ISCSI_IBFT=m
+CONFIG_FW_CFG_SYSFS=m
+# CONFIG_FW_CFG_SYSFS_CMDLINE is not set
+CONFIG_SYSFB=y
+CONFIG_SYSFB_SIMPLEFB=y
+CONFIG_GOOGLE_FIRMWARE=y
+# CONFIG_GOOGLE_SMI is not set
+CONFIG_GOOGLE_COREBOOT_TABLE=m
+# CONFIG_GOOGLE_MEMCONSOLE_X86_LEGACY is not set
+CONFIG_GOOGLE_FRAMEBUFFER_COREBOOT=m
+# CONFIG_GOOGLE_MEMCONSOLE_COREBOOT is not set
+# CONFIG_GOOGLE_VPD is not set
+
+#
+# EFI (Extensible Firmware Interface) Support
+#
+CONFIG_EFI_VARS=y
+CONFIG_EFI_ESRT=y
+CONFIG_EFI_VARS_PSTORE=m
+# CONFIG_EFI_VARS_PSTORE_DEFAULT_DISABLE is not set
+CONFIG_EFI_RUNTIME_MAP=y
+# CONFIG_EFI_FAKE_MEMMAP is not set
+CONFIG_EFI_SOFT_RESERVE=y
+CONFIG_EFI_RUNTIME_WRAPPERS=y
+CONFIG_EFI_GENERIC_STUB_INITRD_CMDLINE_LOADER=y
+CONFIG_EFI_BOOTLOADER_CONTROL=m
+# CONFIG_EFI_CAPSULE_LOADER is not set
+# CONFIG_EFI_TEST is not set
+CONFIG_APPLE_PROPERTIES=y
+CONFIG_RESET_ATTACK_MITIGATION=y
+# CONFIG_EFI_RCI2_TABLE is not set
+# CONFIG_EFI_DISABLE_PCI_DMA is not set
+# end of EFI (Extensible Firmware Interface) Support
+
+CONFIG_UEFI_CPER=y
+CONFIG_UEFI_CPER_X86=y
+CONFIG_EFI_DEV_PATH_PARSER=y
+CONFIG_EFI_EARLYCON=y
+CONFIG_EFI_CUSTOM_SSDT_OVERLAYS=y
+
+#
+# Tegra firmware driver
+#
+# end of Tegra firmware driver
+# end of Firmware Drivers
+
 CONFIG_GNSS=m
 CONFIG_GNSS_SERIAL=m
 CONFIG_GNSS_MTK_SERIAL=m
@@ -2314,6 +2349,10 @@ CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
 CONFIG_MTD_BLKDEVS=m
 CONFIG_MTD_BLOCK=m
 CONFIG_MTD_BLOCK_RO=m
+
+#
+# Note that in some cases UBI block is preferred. See MTD_UBI_BLOCK.
+#
 CONFIG_FTL=m
 CONFIG_NFTL=m
 CONFIG_NFTL_RW=y
@@ -2649,6 +2688,7 @@ CONFIG_PVPANIC_PCI=m
 #
 CONFIG_SCSI_MOD=y
 CONFIG_RAID_ATTRS=m
+CONFIG_SCSI_COMMON=y
 CONFIG_SCSI=y
 CONFIG_SCSI_DMA=y
 CONFIG_SCSI_NETLINK=y
@@ -2661,6 +2701,7 @@ CONFIG_BLK_DEV_SD=y
 CONFIG_CHR_DEV_ST=m
 CONFIG_BLK_DEV_SR=y
 CONFIG_CHR_DEV_SG=y
+CONFIG_BLK_DEV_BSG=y
 CONFIG_CHR_DEV_SCH=m
 CONFIG_SCSI_ENCLOSURE=m
 CONFIG_SCSI_CONSTANTS=y
@@ -2735,6 +2776,7 @@ CONFIG_SCSI_UFS_CDNS_PLATFORM=m
 # CONFIG_SCSI_UFS_DWC_TC_PLATFORM is not set
 # CONFIG_SCSI_UFS_BSG is not set
 CONFIG_SCSI_UFS_CRYPTO=y
+CONFIG_SCSI_UFS_HPB=y
 CONFIG_SCSI_HPTIOP=m
 CONFIG_SCSI_BUSLOGIC=m
 CONFIG_SCSI_FLASHPOINT=y
@@ -3257,6 +3299,7 @@ CONFIG_IGC=m
 CONFIG_NET_VENDOR_MICROSOFT=y
 CONFIG_MICROSOFT_MANA=m
 CONFIG_JME=m
+CONFIG_NET_VENDOR_LITEX=y
 CONFIG_NET_VENDOR_MARVELL=y
 CONFIG_MVMDIO=m
 CONFIG_SKGE=m
@@ -3469,6 +3512,7 @@ CONFIG_LSI_ET1011C_PHY=m
 CONFIG_MARVELL_PHY=m
 CONFIG_MARVELL_10G_PHY=m
 CONFIG_MARVELL_88X2222_PHY=m
+CONFIG_MAXLINEAR_GPHY=m
 CONFIG_MEDIATEK_GE_PHY=m
 CONFIG_MICREL_PHY=m
 CONFIG_MICROCHIP_PHY=m
@@ -3494,6 +3538,10 @@ CONFIG_DP83869_PHY=m
 CONFIG_VITESSE_PHY=m
 CONFIG_XILINX_GMII2RGMII=m
 CONFIG_MICREL_KS8995MA=m
+
+#
+# MCTP Device Drivers
+#
 CONFIG_MDIO_DEVICE=y
 CONFIG_MDIO_BUS=y
 CONFIG_FWNODE_MDIO=y
@@ -3751,7 +3799,6 @@ CONFIG_P54_PCI=m
 CONFIG_P54_SPI=m
 # CONFIG_P54_SPI_DEFAULT_EEPROM is not set
 CONFIG_P54_LEDS=y
-# CONFIG_PRISM54 is not set
 CONFIG_WLAN_VENDOR_MARVELL=y
 CONFIG_LIBERTAS=m
 CONFIG_LIBERTAS_USB=m
@@ -3896,8 +3943,6 @@ CONFIG_WANXL=m
 CONFIG_PC300TOO=m
 CONFIG_FARSYNC=m
 CONFIG_LAPBETHER=m
-CONFIG_SBNI=m
-# CONFIG_SBNI_MULTILINE is not set
 CONFIG_IEEE802154_DRIVERS=m
 CONFIG_IEEE802154_FAKELB=m
 CONFIG_IEEE802154_AT86RF230=m
@@ -3917,6 +3962,7 @@ CONFIG_IEEE802154_MCR20A=m
 CONFIG_WWAN=y
 # CONFIG_WWAN_HWSIM is not set
 CONFIG_MHI_WWAN_CTRL=m
+CONFIG_MHI_WWAN_MBIM=m
 CONFIG_RPMSG_WWAN_CTRL=m
 CONFIG_IOSM=m
 # end of Wireless WAN
@@ -3951,9 +3997,6 @@ CONFIG_MISDN_NETJET=m
 CONFIG_MISDN_HDLC=m
 CONFIG_MISDN_IPAC=m
 CONFIG_MISDN_ISAR=m
-CONFIG_NVM=y
-CONFIG_NVM_PBLK=m
-# CONFIG_NVM_PBLK_DEBUG is not set
 
 #
 # Input device support
@@ -4450,10 +4493,9 @@ CONFIG_XILLYBUS_CLASS=m
 CONFIG_XILLYBUS=m
 CONFIG_XILLYBUS_PCIE=m
 CONFIG_XILLYUSB=m
-# end of Character devices
-
 # CONFIG_RANDOM_TRUST_CPU is not set
 # CONFIG_RANDOM_TRUST_BOOTLOADER is not set
+# end of Character devices
 
 #
 # I2C support
@@ -4549,6 +4591,7 @@ CONFIG_I2C_VIPERBOARD=m
 #
 CONFIG_I2C_MLXCPLD=m
 CONFIG_I2C_CROS_EC_TUNNEL=m
+CONFIG_I2C_VIRTIO=m
 # end of I2C Hardware Bus support
 
 CONFIG_I2C_STUB=m
@@ -4646,6 +4689,7 @@ CONFIG_PPS_CLIENT_GPIO=m
 # PTP clock support
 #
 CONFIG_PTP_1588_CLOCK=m
+CONFIG_PTP_1588_CLOCK_OPTIONAL=m
 
 #
 # Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks.
@@ -4669,7 +4713,7 @@ CONFIG_PINCTRL_MCP23S08_SPI=m
 CONFIG_PINCTRL_MCP23S08=m
 CONFIG_PINCTRL_SX150X=y
 CONFIG_PINCTRL_BAYTRAIL=y
-CONFIG_PINCTRL_CHERRYVIEW=m
+CONFIG_PINCTRL_CHERRYVIEW=y
 CONFIG_PINCTRL_LYNXPOINT=m
 CONFIG_PINCTRL_INTEL=y
 CONFIG_PINCTRL_ALDERLAKE=m
@@ -4805,6 +4849,7 @@ CONFIG_GPIO_VIPERBOARD=m
 #
 CONFIG_GPIO_AGGREGATOR=m
 # CONFIG_GPIO_MOCKUP is not set
+CONFIG_GPIO_VIRTIO=m
 # end of Virtual GPIO drivers
 
 CONFIG_W1=m
@@ -4849,6 +4894,7 @@ CONFIG_POWER_RESET=y
 CONFIG_POWER_RESET_ATC260X=m
 # CONFIG_POWER_RESET_MT6323 is not set
 CONFIG_POWER_RESET_RESTART=y
+CONFIG_POWER_RESET_TPS65086=y
 CONFIG_POWER_SUPPLY=y
 # CONFIG_POWER_SUPPLY_DEBUG is not set
 CONFIG_POWER_SUPPLY_HWMON=y
@@ -4903,6 +4949,7 @@ CONFIG_CHARGER_MAX77693=m
 CONFIG_CHARGER_MAX8997=m
 CONFIG_CHARGER_MAX8998=m
 CONFIG_CHARGER_MP2629=m
+CONFIG_CHARGER_MT6360=m
 CONFIG_CHARGER_BQ2415X=m
 CONFIG_CHARGER_BQ24190=m
 CONFIG_CHARGER_BQ24257=m
@@ -4918,6 +4965,7 @@ CONFIG_BATTERY_GOLDFISH=m
 CONFIG_BATTERY_RT5033=m
 CONFIG_CHARGER_RT9455=m
 CONFIG_CHARGER_CROS_USBPD=m
+CONFIG_CHARGER_CROS_PCHG=m
 CONFIG_CHARGER_BD99954=m
 CONFIG_CHARGER_WILCO=m
 CONFIG_BATTERY_SURFACE=m
@@ -4949,6 +4997,7 @@ CONFIG_SENSORS_ADT7462=m
 CONFIG_SENSORS_ADT7470=m
 CONFIG_SENSORS_ADT7475=m
 CONFIG_SENSORS_AHT10=m
+CONFIG_SENSORS_AQUACOMPUTER_D5NEXT=m
 CONFIG_SENSORS_AS370=m
 CONFIG_SENSORS_ASC7621=m
 CONFIG_SENSORS_AXI_FAN_CONTROL=m
@@ -5087,6 +5136,7 @@ CONFIG_SENSORS_UCD9200=m
 CONFIG_SENSORS_XDPE122=m
 CONFIG_SENSORS_ZL6100=m
 CONFIG_SENSORS_SBTSI=m
+CONFIG_SENSORS_SBRMI=m
 CONFIG_SENSORS_SHT15=m
 CONFIG_SENSORS_SHT21=m
 CONFIG_SENSORS_SHT3x=m
@@ -5182,6 +5232,7 @@ CONFIG_PROC_THERMAL_MMIO_RAPL=m
 CONFIG_INTEL_BXT_PMIC_THERMAL=m
 CONFIG_INTEL_PCH_THERMAL=m
 CONFIG_INTEL_TCC_COOLING=m
+CONFIG_INTEL_MENLOW=m
 # end of Intel thermal drivers
 
 CONFIG_GENERIC_ADC_THERMAL=m
@@ -5496,7 +5547,9 @@ CONFIG_REGULATOR_RT4831=m
 CONFIG_REGULATOR_RT5033=m
 CONFIG_REGULATOR_RT6160=m
 CONFIG_REGULATOR_RT6245=m
+CONFIG_REGULATOR_RTQ2134=m
 CONFIG_REGULATOR_RTMV20=m
+CONFIG_REGULATOR_RTQ6752=m
 CONFIG_REGULATOR_SKY81452=m
 CONFIG_REGULATOR_SLG51000=m
 CONFIG_REGULATOR_TPS51632=m
@@ -6431,7 +6484,6 @@ CONFIG_DRM_AMDGPU_USERPTR=y
 CONFIG_DRM_AMD_DC=y
 CONFIG_DRM_AMD_DC_DCN=y
 # CONFIG_DRM_AMD_DC_HDCP is not set
-CONFIG_DRM_AMD_DC_SI=y
 # CONFIG_DEBUG_KERNEL_DC is not set
 CONFIG_DRM_AMD_SECURE_DISPLAY=y
 # end of Display Engine Configuration
@@ -6483,12 +6535,12 @@ CONFIG_DRM_VGEM=m
 # CONFIG_DRM_VKMS is not set
 CONFIG_DRM_VMWGFX=m
 CONFIG_DRM_VMWGFX_FBCON=y
+# CONFIG_DRM_VMWGFX_MKSSTATS is not set
 CONFIG_DRM_GMA500=m
 CONFIG_DRM_UDL=m
 CONFIG_DRM_AST=m
 # CONFIG_DRM_MGAG200 is not set
 CONFIG_DRM_QXL=m
-CONFIG_DRM_BOCHS=m
 CONFIG_DRM_VIRTIO_GPU=m
 CONFIG_DRM_PANEL=y
 
@@ -6496,6 +6548,7 @@ CONFIG_DRM_PANEL=y
 # Display Panels
 #
 # CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN is not set
+CONFIG_DRM_PANEL_WIDECHIPS_WS2401=m
 # end of Display Panels
 
 CONFIG_DRM_BRIDGE=y
@@ -6509,9 +6562,10 @@ CONFIG_DRM_ANALOGIX_DP=m
 # end of Display Interface Bridges
 
 # CONFIG_DRM_ETNAVIV is not set
+CONFIG_DRM_BOCHS=m
 CONFIG_DRM_CIRRUS_QEMU=m
 CONFIG_DRM_GM12U320=m
-CONFIG_DRM_SIMPLEDRM=m
+# CONFIG_DRM_SIMPLEDRM is not set
 CONFIG_TINYDRM_HX8357D=m
 CONFIG_TINYDRM_ILI9225=m
 CONFIG_TINYDRM_ILI9341=m
@@ -6844,6 +6898,7 @@ CONFIG_SND_HDA_CODEC_SIGMATEL=m
 CONFIG_SND_HDA_CODEC_VIA=m
 CONFIG_SND_HDA_CODEC_HDMI=m
 CONFIG_SND_HDA_CODEC_CIRRUS=m
+CONFIG_SND_HDA_CODEC_CS8409=m
 CONFIG_SND_HDA_CODEC_CONEXANT=m
 CONFIG_SND_HDA_CODEC_CA0110=m
 CONFIG_SND_HDA_CODEC_CA0132=m
@@ -6912,6 +6967,7 @@ CONFIG_SND_SOC_AMD_ACP3x=m
 CONFIG_SND_SOC_AMD_RV_RT5682_MACH=m
 CONFIG_SND_SOC_AMD_RENOIR=m
 CONFIG_SND_SOC_AMD_RENOIR_MACH=m
+CONFIG_SND_SOC_AMD_ACP5x=m
 CONFIG_SND_ATMEL_SOC=m
 CONFIG_SND_BCM63XX_I2S_WHISTLER=m
 CONFIG_SND_DESIGNWARE_I2S=m
@@ -7036,7 +7092,6 @@ CONFIG_SND_SOC_SOF_ALDERLAKE=m
 CONFIG_SND_SOC_SOF_HDA_COMMON=m
 CONFIG_SND_SOC_SOF_HDA_LINK=y
 CONFIG_SND_SOC_SOF_HDA_AUDIO_CODEC=y
-# CONFIG_SND_SOC_SOF_HDA_ALWAYS_ENABLE_DMI_L1 is not set
 CONFIG_SND_SOC_SOF_HDA_LINK_BASELINE=m
 CONFIG_SND_SOC_SOF_HDA=m
 CONFIG_SND_SOC_SOF_INTEL_SOUNDWIRE_LINK_BASELINE=m
@@ -7122,6 +7177,7 @@ CONFIG_SND_SOC_ES8328_SPI=m
 CONFIG_SND_SOC_GTM601=m
 CONFIG_SND_SOC_HDAC_HDMI=m
 CONFIG_SND_SOC_HDAC_HDA=m
+CONFIG_SND_SOC_ICS43432=m
 CONFIG_SND_SOC_INNO_RK3036=m
 CONFIG_SND_SOC_MAX98088=m
 CONFIG_SND_SOC_MAX98090=m
@@ -7189,6 +7245,7 @@ CONFIG_SND_SOC_RT711_SDCA_SDW=m
 CONFIG_SND_SOC_RT715=m
 CONFIG_SND_SOC_RT715_SDW=m
 CONFIG_SND_SOC_RT715_SDCA_SDW=m
+CONFIG_SND_SOC_SDW_MOCKUP=m
 CONFIG_SND_SOC_SGTL5000=m
 CONFIG_SND_SOC_SI476X=m
 CONFIG_SND_SOC_SIGMADSP=m
@@ -7232,6 +7289,7 @@ CONFIG_SND_SOC_TS3A227E=m
 CONFIG_SND_SOC_TSCS42XX=m
 CONFIG_SND_SOC_TSCS454=m
 CONFIG_SND_SOC_UDA1334=m
+CONFIG_SND_SOC_WCD_MBHC=m
 CONFIG_SND_SOC_WCD938X=m
 CONFIG_SND_SOC_WCD938X_SDW=m
 CONFIG_SND_SOC_WM5102=m
@@ -7927,12 +7985,10 @@ CONFIG_LEDS_CLASS_MULTICOLOR=m
 #
 CONFIG_LEDS_88PM860X=m
 CONFIG_LEDS_APU=m
-CONFIG_LEDS_AS3645A=m
 CONFIG_LEDS_LM3530=m
 CONFIG_LEDS_LM3532=m
 CONFIG_LEDS_LM3533=m
 CONFIG_LEDS_LM3642=m
-CONFIG_LEDS_LM3601X=m
 CONFIG_LEDS_MT6323=m
 CONFIG_LEDS_PCA9532=m
 CONFIG_LEDS_PCA9532_GPIO=y
@@ -7974,12 +8030,14 @@ CONFIG_LEDS_NIC78BX=m
 CONFIG_LEDS_TI_LMU_COMMON=m
 CONFIG_LEDS_LM36274=m
 CONFIG_LEDS_TPS6105X=m
-CONFIG_LEDS_SGM3140=m
 
 #
 # Flash and Torch LED drivers
 #
+CONFIG_LEDS_AS3645A=m
+CONFIG_LEDS_LM3601X=m
 # CONFIG_LEDS_RT8515 is not set
+CONFIG_LEDS_SGM3140=m
 
 #
 # LED Triggers
@@ -8221,11 +8279,14 @@ CONFIG_DMA_VIRTUAL_CHANNELS=y
 CONFIG_DMA_ACPI=y
 CONFIG_ALTERA_MSGDMA=m
 CONFIG_INTEL_IDMA64=m
+CONFIG_INTEL_IDXD_BUS=m
 CONFIG_INTEL_IDXD=m
+# CONFIG_INTEL_IDXD_COMPAT is not set
 CONFIG_INTEL_IDXD_SVM=y
 CONFIG_INTEL_IDXD_PERFMON=y
 CONFIG_INTEL_IOATDMA=m
 CONFIG_PLX_DMA=m
+CONFIG_AMD_PTDMA=m
 CONFIG_QCOM_HIDMA_MGMT=m
 CONFIG_QCOM_HIDMA=m
 CONFIG_DW_DMAC_CORE=m
@@ -8254,6 +8315,7 @@ CONFIG_SYNC_FILE=y
 # CONFIG_DMABUF_DEBUG is not set
 # CONFIG_DMABUF_SELFTESTS is not set
 # CONFIG_DMABUF_HEAPS is not set
+# CONFIG_DMABUF_SYSFS_STATS is not set
 # end of DMABUF options
 
 CONFIG_DCA=m
@@ -8288,14 +8350,15 @@ CONFIG_UIO_PRUSS=m
 CONFIG_UIO_MF624=m
 CONFIG_UIO_HV_GENERIC=m
 CONFIG_UIO_DFL=m
+CONFIG_VFIO=m
 CONFIG_VFIO_IOMMU_TYPE1=m
 CONFIG_VFIO_VIRQFD=m
-CONFIG_VFIO=m
 CONFIG_VFIO_NOIOMMU=y
-CONFIG_VFIO_PCI=m
-CONFIG_VFIO_PCI_VGA=y
+CONFIG_VFIO_PCI_CORE=m
 CONFIG_VFIO_PCI_MMAP=y
 CONFIG_VFIO_PCI_INTX=y
+CONFIG_VFIO_PCI=m
+CONFIG_VFIO_PCI_VGA=y
 CONFIG_VFIO_PCI_IGD=y
 CONFIG_VFIO_MDEV=m
 CONFIG_IRQ_BYPASS_MANAGER=m
@@ -8317,6 +8380,7 @@ CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y
 CONFIG_VIRTIO_DMA_SHARED_BUFFER=m
 CONFIG_VDPA=m
 # CONFIG_VDPA_SIM is not set
+CONFIG_VDPA_USER=m
 CONFIG_IFCVF=m
 CONFIG_MLX5_VDPA=y
 CONFIG_MLX5_VDPA_NET=m
@@ -8661,8 +8725,6 @@ CONFIG_X86_PLATFORM_DEVICES=y
 CONFIG_ACPI_WMI=m
 CONFIG_WMI_BMOF=m
 CONFIG_HUAWEI_WMI=m
-CONFIG_INTEL_WMI_SBL_FW_UPDATE=m
-CONFIG_INTEL_WMI_THUNDERBOLT=m
 CONFIG_MXM_WMI=m
 CONFIG_PEAQ_WMI=m
 CONFIG_XIAOMI_WMI=m
@@ -8677,6 +8739,7 @@ CONFIG_ASUS_LAPTOP=m
 CONFIG_ASUS_WIRELESS=m
 CONFIG_ASUS_WMI=m
 CONFIG_ASUS_NB_WMI=m
+CONFIG_MERAKI_MX100=m
 CONFIG_EEEPC_LAPTOP=m
 CONFIG_EEEPC_WMI=m
 CONFIG_X86_PLATFORM_DRIVERS_DELL=y
@@ -8714,14 +8777,38 @@ CONFIG_THINKPAD_ACPI_VIDEO=y
 CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y
 CONFIG_THINKPAD_LMI=m
 CONFIG_X86_PLATFORM_DRIVERS_INTEL=y
+CONFIG_INTEL_ATOMISP2_PDX86=y
+CONFIG_INTEL_ATOMISP2_LED=m
+CONFIG_INTEL_SAR_INT1092=m
 CONFIG_INTEL_CHT_INT33FE=m
 CONFIG_INTEL_SKL_INT3472=m
-CONFIG_INTEL_ATOMISP2_LED=m
+CONFIG_INTEL_PMC_CORE=y
+CONFIG_INTEL_PMT_CLASS=m
+CONFIG_INTEL_PMT_TELEMETRY=m
+CONFIG_INTEL_PMT_CRASHLOG=m
+
+#
+# Intel Speed Select Technology interface support
+#
+CONFIG_INTEL_SPEED_SELECT_INTERFACE=m
+# end of Intel Speed Select Technology interface support
+
+CONFIG_INTEL_TELEMETRY=m
+CONFIG_INTEL_WMI=y
+CONFIG_INTEL_WMI_SBL_FW_UPDATE=m
+CONFIG_INTEL_WMI_THUNDERBOLT=m
 CONFIG_INTEL_HID_EVENT=m
+CONFIG_INTEL_VBTN=m
 CONFIG_INTEL_INT0002_VGPIO=m
-CONFIG_INTEL_MENLOW=m
 CONFIG_INTEL_OAKTRAIL=m
-CONFIG_INTEL_VBTN=m
+CONFIG_INTEL_BXTWC_PMIC_TMU=m
+CONFIG_INTEL_CHTDC_TI_PWRBTN=m
+CONFIG_INTEL_MRFLD_PWRBTN=m
+CONFIG_INTEL_PUNIT_IPC=m
+CONFIG_INTEL_RST=m
+CONFIG_INTEL_SMARTCONNECT=m
+# CONFIG_INTEL_TURBO_MAX_3 is not set
+CONFIG_INTEL_UNCORE_FREQ_CONTROL=m
 CONFIG_MSI_LAPTOP=m
 CONFIG_MSI_WMI=m
 CONFIG_PCENGINES_APU2=m
@@ -8744,31 +8831,11 @@ CONFIG_I2C_MULTI_INSTANTIATE=m
 # CONFIG_TOUCHSCREEN_DMI is not set
 CONFIG_FW_ATTR_CLASS=m
 CONFIG_INTEL_IPS=m
-CONFIG_INTEL_RST=m
-CONFIG_INTEL_SMARTCONNECT=m
-
-#
-# Intel Speed Select Technology interface support
-#
-CONFIG_INTEL_SPEED_SELECT_INTERFACE=m
-# end of Intel Speed Select Technology interface support
-
-# CONFIG_INTEL_TURBO_MAX_3 is not set
-CONFIG_INTEL_UNCORE_FREQ_CONTROL=m
-CONFIG_INTEL_BXTWC_PMIC_TMU=m
-CONFIG_INTEL_CHTDC_TI_PWRBTN=m
-CONFIG_INTEL_MRFLD_PWRBTN=m
-CONFIG_INTEL_PMC_CORE=y
-CONFIG_INTEL_PMT_CLASS=m
-CONFIG_INTEL_PMT_TELEMETRY=m
-CONFIG_INTEL_PMT_CRASHLOG=m
-CONFIG_INTEL_PUNIT_IPC=m
 CONFIG_INTEL_SCU_IPC=y
 CONFIG_INTEL_SCU=y
 CONFIG_INTEL_SCU_PCI=y
 CONFIG_INTEL_SCU_PLATFORM=m
 CONFIG_INTEL_SCU_IPC_UTIL=m
-CONFIG_INTEL_TELEMETRY=m
 CONFIG_PMC_ATOM=y
 CONFIG_CHROME_PLATFORMS=y
 CONFIG_CHROMEOS_LAPTOP=m
@@ -8857,6 +8924,8 @@ CONFIG_IOMMU_IO_PGTABLE=y
 # end of Generic IOMMU Pagetable Support
 
 # CONFIG_IOMMU_DEBUGFS is not set
+# CONFIG_IOMMU_DEFAULT_DMA_STRICT is not set
+CONFIG_IOMMU_DEFAULT_DMA_LAZY=y
 # CONFIG_IOMMU_DEFAULT_PASSTHROUGH is not set
 CONFIG_IOMMU_DMA=y
 CONFIG_IOMMU_SVA_LIB=y
@@ -9156,6 +9225,7 @@ CONFIG_SCD30_CORE=m
 CONFIG_SCD30_I2C=m
 CONFIG_SCD30_SERIAL=m
 CONFIG_SENSIRION_SGP30=m
+CONFIG_SENSIRION_SGP40=m
 CONFIG_SPS30=m
 CONFIG_SPS30_I2C=m
 CONFIG_SPS30_SERIAL=m
@@ -9454,6 +9524,7 @@ CONFIG_HID_SENSOR_CUSTOM_INTEL_HINGE=m
 #
 # Digital potentiometers
 #
+CONFIG_AD5110=m
 CONFIG_AD5272=m
 CONFIG_DS1803=m
 CONFIG_MAX5432=m
@@ -9803,6 +9874,7 @@ CONFIG_F2FS_FS_SECURITY=y
 # CONFIG_F2FS_CHECK_FS is not set
 # CONFIG_F2FS_FAULT_INJECTION is not set
 # CONFIG_F2FS_FS_COMPRESSION is not set
+# CONFIG_F2FS_IOSTAT is not set
 CONFIG_ZONEFS_FS=m
 CONFIG_FS_DAX=y
 CONFIG_FS_DAX_PMD=y
@@ -9810,7 +9882,6 @@ CONFIG_FS_POSIX_ACL=y
 CONFIG_EXPORTFS=y
 # CONFIG_EXPORTFS_BLOCK_OPS is not set
 CONFIG_FILE_LOCKING=y
-CONFIG_MANDATORY_FILE_LOCKING=y
 # CONFIG_FS_ENCRYPTION is not set
 CONFIG_FS_VERITY=y
 # CONFIG_FS_VERITY_DEBUG is not set
@@ -9845,15 +9916,12 @@ CONFIG_OVERLAY_FS=m
 # Caches
 #
 CONFIG_NETFS_SUPPORT=m
-# CONFIG_NETFS_STATS is not set
+CONFIG_NETFS_STATS=y
 CONFIG_FSCACHE=m
 CONFIG_FSCACHE_STATS=y
-# CONFIG_FSCACHE_HISTOGRAM is not set
 # CONFIG_FSCACHE_DEBUG is not set
-# CONFIG_FSCACHE_OBJECT_LIST is not set
 CONFIG_CACHEFILES=m
 # CONFIG_CACHEFILES_DEBUG is not set
-# CONFIG_CACHEFILES_HISTOGRAM is not set
 # end of Caches
 
 #
@@ -9879,6 +9947,10 @@ CONFIG_EXFAT_DEFAULT_IOCHARSET="utf8"
 CONFIG_NTFS_FS=m
 # CONFIG_NTFS_DEBUG is not set
 # CONFIG_NTFS_RW is not set
+CONFIG_NTFS3_FS=m
+# CONFIG_NTFS3_64BIT_CLUSTER is not set
+CONFIG_NTFS3_LZX_XPRESS=y
+# CONFIG_NTFS3_FS_POSIX_ACL is not set
 # end of DOS/FAT/EXFAT/NT Filesystems
 
 #
@@ -9992,6 +10064,7 @@ CONFIG_PSTORE_COMPRESS_DEFAULT="deflate"
 # CONFIG_PSTORE_PMSG is not set
 # CONFIG_PSTORE_FTRACE is not set
 CONFIG_PSTORE_RAM=m
+# CONFIG_PSTORE_BLK is not set
 CONFIG_SYSV_FS=m
 CONFIG_UFS_FS=m
 # CONFIG_UFS_FS_WRITE is not set
@@ -10055,7 +10128,6 @@ CONFIG_CEPH_FS_SECURITY_LABEL=y
 CONFIG_CIFS=m
 # CONFIG_CIFS_STATS2 is not set
 CONFIG_CIFS_ALLOW_INSECURE_LEGACY=y
-CONFIG_CIFS_WEAK_PW_HASH=y
 CONFIG_CIFS_UPCALL=y
 CONFIG_CIFS_XATTR=y
 CONFIG_CIFS_POSIX=y
@@ -10066,6 +10138,8 @@ CONFIG_CIFS_DFS_UPCALL=y
 CONFIG_CIFS_SWN_UPCALL=y
 # CONFIG_CIFS_SMB_DIRECT is not set
 CONFIG_CIFS_FSCACHE=y
+# CONFIG_SMB_SERVER is not set
+CONFIG_SMBFS_COMMON=m
 CONFIG_CODA_FS=m
 CONFIG_AFS_FS=m
 # CONFIG_AFS_DEBUG is not set
@@ -10232,13 +10306,24 @@ CONFIG_LSM="yama,loadpin,safesetid,integrity,apparmor,selinux,smack,tomoyo"
 #
 # Kernel hardening options
 #
+CONFIG_GCC_PLUGIN_STRUCTLEAK=y
 
 #
 # Memory initialization
 #
-CONFIG_INIT_STACK_NONE=y
+# CONFIG_INIT_STACK_NONE is not set
+# CONFIG_GCC_PLUGIN_STRUCTLEAK_USER is not set
+# CONFIG_GCC_PLUGIN_STRUCTLEAK_BYREF is not set
+CONFIG_GCC_PLUGIN_STRUCTLEAK_BYREF_ALL=y
+# CONFIG_GCC_PLUGIN_STRUCTLEAK_VERBOSE is not set
+CONFIG_GCC_PLUGIN_STACKLEAK=y
+CONFIG_STACKLEAK_TRACK_MIN_SIZE=100
+# CONFIG_STACKLEAK_METRICS is not set
+CONFIG_STACKLEAK_RUNTIME_DISABLE=y
 CONFIG_INIT_ON_ALLOC_DEFAULT_ON=y
 # CONFIG_INIT_ON_FREE_DEFAULT_ON is not set
+CONFIG_CC_HAS_ZERO_CALL_USED_REGS=y
+# CONFIG_ZERO_CALL_USED_REGS is not set
 # end of Memory initialization
 # end of Kernel hardening options
 # end of Security options
@@ -10399,6 +10484,8 @@ CONFIG_CRYPTO_SERPENT_SSE2_X86_64=m
 CONFIG_CRYPTO_SERPENT_AVX_X86_64=m
 CONFIG_CRYPTO_SERPENT_AVX2_X86_64=m
 CONFIG_CRYPTO_SM4=m
+CONFIG_CRYPTO_SM4_AESNI_AVX_X86_64=m
+CONFIG_CRYPTO_SM4_AESNI_AVX2_X86_64=m
 CONFIG_CRYPTO_TEA=m
 CONFIG_CRYPTO_TWOFISH=m
 CONFIG_CRYPTO_TWOFISH_COMMON=m
@@ -10457,6 +10544,7 @@ CONFIG_CRYPTO_LIB_POLY1305_GENERIC=m
 CONFIG_CRYPTO_LIB_POLY1305=m
 CONFIG_CRYPTO_LIB_CHACHA20POLY1305=m
 CONFIG_CRYPTO_LIB_SHA256=y
+CONFIG_CRYPTO_LIB_SM4=m
 CONFIG_CRYPTO_HW=y
 CONFIG_CRYPTO_DEV_PADLOCK=y
 CONFIG_CRYPTO_DEV_PADLOCK_AES=m
@@ -10718,6 +10806,8 @@ CONFIG_ARCH_HAS_EARLY_DEBUG=y
 CONFIG_ARCH_HAS_UBSAN_SANITIZE_ALL=y
 # CONFIG_UBSAN is not set
 CONFIG_HAVE_ARCH_KCSAN=y
+CONFIG_HAVE_KCSAN_COMPILER=y
+# CONFIG_KCSAN is not set
 # end of Generic Kernel Debugging Instruments
 
 CONFIG_DEBUG_KERNEL=y
@@ -10760,9 +10850,9 @@ CONFIG_CC_HAS_WORKING_NOSANITIZE_ADDRESS=y
 # CONFIG_KASAN is not set
 CONFIG_HAVE_ARCH_KFENCE=y
 CONFIG_KFENCE=y
-CONFIG_KFENCE_STATIC_KEYS=y
 CONFIG_KFENCE_SAMPLE_INTERVAL=0
 CONFIG_KFENCE_NUM_OBJECTS=255
+CONFIG_KFENCE_STATIC_KEYS=y
 CONFIG_KFENCE_STRESS_TEST_FAULTS=0
 # end of Memory Debugging
 
@@ -10851,7 +10941,6 @@ CONFIG_RCU_CPU_STALL_TIMEOUT=60
 # end of RCU Debugging
 
 # CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set
-# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
 # CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set
 # CONFIG_LATENCYTOP is not set
 CONFIG_USER_STACKTRACE_SUPPORT=y
@@ -10929,7 +11018,6 @@ CONFIG_IO_STRICT_DEVMEM=y
 #
 # x86 Debugging
 #
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
 CONFIG_TRACE_IRQFLAGS_NMI_SUPPORT=y
 CONFIG_EARLY_PRINTK_USB=y
 # CONFIG_X86_VERBOSE_BOOTUP is not set
@@ -10971,7 +11059,6 @@ CONFIG_CC_HAS_SANCOV_TRACE_PC=y
 CONFIG_RUNTIME_TESTING_MENU=y
 # CONFIG_LKDTM is not set
 # CONFIG_TEST_MIN_HEAP is not set
-# CONFIG_TEST_SORT is not set
 # CONFIG_TEST_DIV64 is not set
 # CONFIG_KPROBES_SANITY_TEST is not set
 # CONFIG_BACKTRACE_SELF_TEST is not set
diff --git a/gnu/packages/aux-files/linux-libre/5.4-i686.conf b/gnu/packages/aux-files/linux-libre/5.4-i686.conf
index 4e2d7795c7..4c4f258dcd 100644
--- a/gnu/packages/aux-files/linux-libre/5.4-i686.conf
+++ b/gnu/packages/aux-files/linux-libre/5.4-i686.conf
@@ -648,7 +648,7 @@ CONFIG_ALIX=y
 CONFIG_NET5501=y
 CONFIG_GEOS=y
 CONFIG_AMD_NB=y
-# CONFIG_X86_SYSFB is not set
+CONFIG_X86_SYSFB=y
 # end of Bus options (PCI etc.)
 
 #
@@ -672,7 +672,13 @@ CONFIG_ISCSI_IBFT_FIND=y
 CONFIG_ISCSI_IBFT=m
 CONFIG_FW_CFG_SYSFS=m
 # CONFIG_FW_CFG_SYSFS_CMDLINE is not set
-# CONFIG_GOOGLE_FIRMWARE is not set
+CONFIG_GOOGLE_FIRMWARE=y
+# CONFIG_GOOGLE_SMI is not set
+CONFIG_GOOGLE_COREBOOT_TABLE=y
+# CONFIG_GOOGLE_MEMCONSOLE_X86_LEGACY is not set
+CONFIG_GOOGLE_FRAMEBUFFER_COREBOOT=m
+# CONFIG_GOOGLE_MEMCONSOLE_COREBOOT is not set
+# CONFIG_GOOGLE_VPD is not set
 
 #
 # EFI (Extensible Firmware Interface) Support
diff --git a/gnu/packages/aux-files/linux-libre/5.4-x86_64.conf b/gnu/packages/aux-files/linux-libre/5.4-x86_64.conf
index 5815caa770..ec8609171e 100644
--- a/gnu/packages/aux-files/linux-libre/5.4-x86_64.conf
+++ b/gnu/packages/aux-files/linux-libre/5.4-x86_64.conf
@@ -632,7 +632,7 @@ CONFIG_MMCONF_FAM10H=y
 # CONFIG_ISA_BUS is not set
 CONFIG_ISA_DMA_API=y
 CONFIG_AMD_NB=y
-# CONFIG_X86_SYSFB is not set
+CONFIG_X86_SYSFB=y
 # end of Bus options (PCI etc.)
 
 #
@@ -659,7 +659,13 @@ CONFIG_ISCSI_IBFT_FIND=y
 CONFIG_ISCSI_IBFT=m
 CONFIG_FW_CFG_SYSFS=m
 # CONFIG_FW_CFG_SYSFS_CMDLINE is not set
-# CONFIG_GOOGLE_FIRMWARE is not set
+CONFIG_GOOGLE_FIRMWARE=y
+# CONFIG_GOOGLE_SMI is not set
+CONFIG_GOOGLE_COREBOOT_TABLE=y
+# CONFIG_GOOGLE_MEMCONSOLE_X86_LEGACY is not set
+CONFIG_GOOGLE_FRAMEBUFFER_COREBOOT=m
+# CONFIG_GOOGLE_MEMCONSOLE_COREBOOT is not set
+# CONFIG_GOOGLE_VPD is not set
 
 #
 # EFI (Extensible Firmware Interface) Support
diff --git a/gnu/packages/aux-files/python/sanity-check.py b/gnu/packages/aux-files/python/sanity-check.py
new file mode 100644
index 0000000000..182133bb3d
--- /dev/null
+++ b/gnu/packages/aux-files/python/sanity-check.py
@@ -0,0 +1,92 @@
+# -*- coding: utf-8 -*-
+# GNU Guix --- Functional package management for GNU
+# Copyright © 2021 Lars-Dominik Braun <lars@6xq.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/>.
+
+from __future__ import print_function  # Python 2 support.
+import importlib
+import pkg_resources
+import sys
+import traceback
+
+try:
+    from importlib.machinery import PathFinder
+except ImportError:
+    PathFinder = None
+
+ret = 0
+
+# Only check site-packages installed by this package, but not dependencies
+# (which pkg_resources.working_set would include). Path supplied via argv.
+ws = pkg_resources.find_distributions(sys.argv[1])
+
+for dist in ws:
+    print('validating', repr(dist.project_name), dist.location)
+    try:
+        print('...checking requirements: ', end='')
+        req = str(dist.as_requirement())
+        # dist.activate() is not enough to actually check requirements, we
+        # have to .require() it.
+        pkg_resources.require(req)
+        print('OK')
+    except Exception as e:
+        print('ERROR:', req, repr(e))
+        ret = 1
+        continue
+
+    # Try to load top level modules. This should not have any side-effects.
+    try:
+        metalines = dist.get_metadata_lines('top_level.txt')
+    except (KeyError, EnvironmentError):
+        # distutils (i.e. #:use-setuptools? #f) will not install any metadata.
+        # This file is also missing for packages built using a PEP 517 builder
+        # such as poetry.
+        print('WARNING: cannot determine top-level modules')
+        continue
+    for name in metalines:
+        # Only available on Python 3.
+        if PathFinder and PathFinder.find_spec(name) is None:
+            # Ignore unavailable modules, often C modules, which were not
+            # installed at the top-level. Cannot use ModuleNotFoundError,
+            # because it is raised by failed imports too.
+            continue
+        try:
+            print('...trying to load module', name, end=': ')
+            importlib.import_module(name)
+            print('OK')
+        except Exception:
+            print('ERROR:')
+            traceback.print_exc(file=sys.stdout)
+            ret = 1
+
+    # Try to load entry points of console scripts too, making sure they
+    # work. They should be removed if they don't. Other groups may not be
+    # safe, as they can depend on optional packages.
+    for group, v in dist.get_entry_map().items():
+        if group not in {'console_scripts', 'gui_scripts'}:
+            continue
+        for name, ep in v.items():
+            try:
+                print('...trying to load endpoint', group, name, end=': ')
+                ep.load()
+                print('OK')
+            except Exception:
+                print('ERROR:')
+                traceback.print_exc(file=sys.stdout)
+                ret = 1
+
+sys.exit(ret)
diff --git a/gnu/packages/aux-files/python/sitecustomize.py b/gnu/packages/aux-files/python/sitecustomize.py
new file mode 100644
index 0000000000..e2348e0356
--- /dev/null
+++ b/gnu/packages/aux-files/python/sitecustomize.py
@@ -0,0 +1,65 @@
+# -*- coding: utf-8 -*-
+# GNU Guix --- Functional package management for GNU
+# Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+#
+# This file is part of GNU Guix.
+#
+# GNU Guix is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or (at
+# your option) any later version.
+#
+# GNU Guix is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+import os
+import site
+import sys
+
+# Commentary:
+#
+# Site-specific customization for Guix.
+#
+# The program below honors the GUIX_PYTHONPATH environment variable to
+# discover Python packages.  File names appearing in this variable that match
+# a predefined versioned installation prefix are added to the sys.path.  To be
+# considered, a Python package must be installed under the
+# 'lib/pythonX.Y/site-packages' directory, where X and Y are the major and
+# minor version numbers of the Python interpreter.
+#
+# Code:
+
+major_minor = '{}.{}'.format(*sys.version_info)
+site_packages_prefix = os.path.join(
+    'lib', 'python' + major_minor, 'site-packages')
+python_site = os.path.join(sys.prefix, site_packages_prefix)
+
+try:
+    all_sites_raw = os.environ['GUIX_PYTHONPATH'].split(os.path.pathsep)
+except KeyError:
+    all_sites_raw = []
+# Normalize paths, otherwise a trailing slash would cause it to not match.
+all_sites_norm = [os.path.normpath(p) for p in all_sites_raw]
+matching_sites = [p for p in all_sites_norm
+                  if p.endswith(site_packages_prefix)]
+
+if matching_sites:
+    # Deduplicate the entries, append them to sys.path, and handle any
+    # .pth files they contain.
+    for s in matching_sites:
+        site.addsitedir(s)
+
+    # Move the entries that were appended to sys.path in front of
+    # Python's own site-packages directory.  This enables Guix
+    # packages to override Python's bundled packages, such as 'pip'.
+    python_site_index = sys.path.index(python_site)
+    new_site_start_index = sys.path.index(matching_sites[0])
+    if python_site_index < new_site_start_index:
+        sys.path = (sys.path[:python_site_index]
+                    + sys.path[new_site_start_index:]
+                    + sys.path[python_site_index:new_site_start_index])
diff --git a/gnu/packages/aux-files/renpy/renpy.in b/gnu/packages/aux-files/renpy/renpy.in
new file mode 100644
index 0000000000..914a735fa4
--- /dev/null
+++ b/gnu/packages/aux-files/renpy/renpy.in
@@ -0,0 +1,48 @@
+#! @PYTHON@
+# -*- mode: python -*-
+
+from __future__ import print_function
+
+import os
+import sys
+import warnings
+
+def path_to_common(renpy_base):
+    return renpy_base + "/common"
+
+def path_to_saves(gamedir, save_directory=None):
+    import renpy
+
+    if save_directory is None:
+        save_directory = renpy.config.save_directory
+        save_directory = renpy.exports.fsencode(save_directory)
+
+    if not save_directory:
+        return gamedir + "/saves"
+
+    return os.path.join(os.path.expanduser("~/.renpy"), save_directory)
+
+def main():
+    try:
+        import renpy.bootstrap
+        import renpy.arguments
+    except ImportError:
+        print("""Could not import renpy.bootstrap.
+Please ensure you decompressed Ren'py correctly, preserving the directory
+structure.""", file=sys.stderr)
+        raise
+
+    args = renpy.arguments.bootstrap()
+    if not args.basedir:
+        print("""This Ren'py requires a basedir to launch.
+The basedir is the directory, in which .rpy source files or compiled .rpyc files
+live -- usually the 'game' subdirectory of a game packaged by Ren'py.
+
+If you want the Ren'py launcher, use \"renpy-launcher\" instead.""",
+              file=sys.stderr)
+        sys.exit()
+
+    renpy.bootstrap.bootstrap("@RENPY_BASE@")
+
+if __name__ == "__main__":
+    main()
diff --git a/gnu/packages/avahi.scm b/gnu/packages/avahi.scm
index b2aeeadf47..65d3ede131 100644
--- a/gnu/packages/avahi.scm
+++ b/gnu/packages/avahi.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -22,9 +23,11 @@
 (define-module (gnu packages avahi)
   #:use-module ((guix licenses) #:select (lgpl2.1+))
   #:use-module (guix packages)
+  #:use-module (guix gexp)
   #:use-module (guix download)
   #:use-module (guix build-system gnu)
   #:use-module (gnu packages)
+  #:use-module (gnu packages bash)
   #:use-module (gnu packages dbm)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages glib)
@@ -40,25 +43,24 @@
     (version "0.8")
     (home-page "https://avahi.org")
     (source (origin
-             (method url-fetch)
-             (uri (string-append home-page "/download/avahi-"
-                                 version ".tar.gz"))
-             (sha256
-              (base32
-               "1npdixwxxn3s9q1f365x9n9rc5xgfz39hxf23faqvlrklgbhj0q6"))
-             (patches (search-patches "avahi-localstatedir.patch"))
-             (modules '((guix build utils)))
-             (snippet
-              '(begin
-                 ;; Fix version constraint in the avahi-libevent pkg-config file.
-                 ;; This can be removed for Avahi versions > 0.8.
-                 (substitute* "avahi-libevent.pc.in"
-                   (("libevent-2\\.1\\.5")
-                    "libevent >= 2.1.5"))
-                 #t))))
+              (method url-fetch)
+              (uri (string-append home-page "/download/avahi-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "1npdixwxxn3s9q1f365x9n9rc5xgfz39hxf23faqvlrklgbhj0q6"))
+              (patches (search-patches "avahi-localstatedir.patch"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  ;; Fix version constraint in the avahi-libevent pkg-config file.
+                  ;; This can be removed for Avahi versions > 0.8.
+                  (substitute* "avahi-libevent.pc.in"
+                    (("libevent-2\\.1\\.5")
+                     "libevent >= 2.1.5"))))))
     (build-system gnu-build-system)
     (arguments
-     '(#:configure-flags '("--with-distro=none"
+     `(#:configure-flags '("--with-distro=none"
                            "--disable-static"
                            "--localstatedir=/var" ; for the DBus socket
                            "--disable-python"
@@ -68,13 +70,29 @@
                            "--enable-tests"
                            "--disable-qt4" "--disable-qt5"
                            "--disable-gtk" "--disable-gtk3"
-                           "--enable-compat-libdns_sd")))
+                           "--enable-compat-libdns_sd"
+                           ,@(if (%current-target-system)
+                                 '("ac_cv_prog_have_pkg_config=yes")
+                                 '()))
+       #:modules ((srfi srfi-26)
+                  (guix build utils)
+                  (guix build gnu-build-system))
+       #:phases
+       ,#~(modify-phases %standard-phases
+            (add-after 'patch-shebangs 'patch-more-shebangs
+              (lambda* (#:key inputs #:allow-other-keys)
+                (define path
+                  `(,(dirname (search-input-file inputs "bin/sh"))))
+                (for-each
+                 (cut patch-shebang <> path)
+                 (find-files (string-append #$output "/etc/avahi"))))))))
     (inputs
-     `(("dbus" ,dbus)
+     `(("bash-minimal" ,bash-minimal)
+       ("dbus" ,dbus)
        ("expat" ,expat)
        ("gdbm" ,gdbm)
        ("glib" ,glib)
-       ("libcap" ,libcap-2.31)       ;to enable chroot support in avahi-daemon
+       ("libcap" ,libcap)            ;to enable chroot support in avahi-daemon
        ("libdaemon" ,libdaemon)
        ("libevent" ,libevent)))
     (native-inputs
diff --git a/gnu/packages/avr.scm b/gnu/packages/avr.scm
index c113707283..3cc5a6964e 100644
--- a/gnu/packages/avr.scm
+++ b/gnu/packages/avr.scm
@@ -168,8 +168,7 @@ C++.")
        #:make-flags
        (list (string-append "PREFIX=" (assoc-ref %outputs "out")))))
     (native-inputs
-     `(("unzip" ,unzip)
-       ("xxd" ,xxd)))
+     (list unzip xxd))
     (home-page "https://github.com/ryansuchocki/microscheme/")
     (synopsis "Scheme subset for Atmel microcontrollers")
     (description
diff --git a/gnu/packages/axoloti.scm b/gnu/packages/axoloti.scm
index c6dd748773..622c4f94cb 100644
--- a/gnu/packages/axoloti.scm
+++ b/gnu/packages/axoloti.scm
@@ -205,7 +205,7 @@
        ;; for uploading compiled patches and firmware
        ("dfu-util" ,dfu-util-for-axoloti)))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "http://www.axoloti.com/")
     (synopsis "Audio development environment for the Axoloti core board")
     (description
@@ -318,8 +318,8 @@ runtime.")
                    (lambda ()
                      (let* ((dir       (string-append (assoc-ref outputs "out")
                                                       "/share/axoloti"))
-                            (runtime   (string-append (assoc-ref inputs "axoloti-runtime")
-                                                      "/share/axoloti"))
+                            (runtime   (search-input-directory inputs
+                                                               "share/axoloti"))
                             (toolchain (assoc-ref inputs "cross-toolchain"))
                             (includes  (string-append
                                         toolchain
@@ -351,9 +351,8 @@ runtime.")
        ("java-jgit" ,java-jgit-4.2)
        ("axoloti-runtime" ,axoloti-runtime)))
     (native-inputs
-     `(("ant" ,ant)
-       ("zip" ,zip) ; for repacking the jar
-       ("unzip" ,unzip)))
+     (list ant zip ; for repacking the jar
+           unzip))
     (description
      "The Axoloti patcher offers a “patcher” environment similar to Pure Data
 for sketching digital audio algorithms.  The patches run on a standalone
@@ -374,11 +373,9 @@ patcher application.")))
        (sha256
         (base32 "022p993wf9l9mp6vg94x592vfqd1k1sjrq5f6x45h5r16qy6bdzh"))
        (modules '((guix build utils)))
+       ;; Remove pre-built Java binaries.
        (snippet
-        '(begin
-           ;; Remove pre-built Java binaries.
-           (delete-file-recursively "lib/")
-           #t))))
+        '(delete-file-recursively "lib/"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ; there's a Java test which is run as part of the Java build.
@@ -530,16 +527,16 @@ patcher application.")))
                ;; Install old firmware
                (let ((target (string-append share "/old_firmware/firmware-1.0.12"))
                      (old-firmware
-                      (string-append (assoc-ref inputs "axoloti-runtime")
-                                     "/share/axoloti/firmware/")))
+                      (search-input-directory inputs
+                                              "share/axoloti/firmware")))
                  (mkdir-p target)
                  (install-file (string-append old-firmware
-                                              "flasher/flasher_build/flasher.bin")
+                                              "/flasher/flasher_build/flasher.bin")
                                target)
                  ;; TODO: the old file differs from the file that is included
                  ;; in this repository as the old firmware.
                  (install-file (string-append old-firmware
-                                              "build/axoloti.bin")
+                                              "/build/axoloti.bin")
                                target))
 
                ;; We do this to ensure that this package retains references to
@@ -574,8 +571,7 @@ patcher application.")))
                                        " -Dsun.java2d.renderer=org.marlin.pisces.MarlinRenderingEngine"
                                        " -Daxoloti_release=" share
                                        " -jar " dir "/Axoloti.jar")))))
-                 (chmod target #o555))
-               #t)))
+                 (chmod target #o555)))))
          (add-after 'install 'strip-jar-timestamps
            (assoc-ref ant:%standard-phases 'strip-jar-timestamps)))))
     (inputs
diff --git a/gnu/packages/backup.scm b/gnu/packages/backup.scm
index 74e3f2ce01..5c92d401bd 100644
--- a/gnu/packages/backup.scm
+++ b/gnu/packages/backup.scm
@@ -4,9 +4,9 @@
 ;;; Copyright © 2015, 2016, 2017 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2017–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be>
-;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net>
+;;; Copyright © 2017, 2021 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2017 Kei Kebreau <kkebreau@posteo.net>
-;;; Copyright © 2017, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2017, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Christine Lemmer-Webber <cwebber@dustycloud.org>
 ;;; Copyright © 2017 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2018 Mark H Weaver <mhw@netris.org>
@@ -21,6 +21,7 @@
 ;;; Copyright © 2021 Timothy Sample <samplet@ngyro.com>
 ;;; Copyright © 2021 Brice Waegeneire <brice@waegenei.re>
 ;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
+;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -38,6 +39,7 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages backup)
+  #:use-module (guix gexp)
   #:use-module (guix packages)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix git-download)
@@ -46,10 +48,12 @@
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system go)
+  #:use-module (guix build-system perl)
   #:use-module (guix build-system python)
   #:use-module (gnu packages)
   #:use-module (gnu packages acl)
   #:use-module (gnu packages autotools)
+  #:use-module (gnu packages bash)
   #:use-module (gnu packages base)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
@@ -70,6 +74,7 @@
   #:use-module (gnu packages mcrypt)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages nettle)
+  #:use-module (gnu packages networking)
   #:use-module (gnu packages onc-rpc)
   #:use-module (gnu packages pcre)
   #:use-module (gnu packages perl)
@@ -80,6 +85,8 @@
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages rsync)
+  #:use-module (gnu packages ruby)
+  #:use-module (gnu packages serialization)
   #:use-module (gnu packages ssh)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages valgrind)
@@ -88,7 +95,7 @@
 (define-public duplicity
   (package
     (name "duplicity")
-    (version "0.8.20")
+    (version "0.8.21")
     (source
      (origin
       (method url-fetch)
@@ -97,7 +104,7 @@
                           "-series/" version "/+download/duplicity-"
                           version ".tar.gz"))
       (sha256
-       (base32 "0d125mxknpn44xwgqzzak9y5ydigscrpjv9d63126mfc6yfngr5v"))))
+       (base32 "0ld4bhsi6iv4bvy99pblbr7vlwy9jbgfd6flyvb8qwbl8rvadzjp"))))
     (build-system python-build-system)
     (native-inputs
      `(("gettext" ,gettext-minimal)     ; for msgfmt
@@ -114,12 +121,14 @@
        ("mock" ,python-mock)))
     (propagated-inputs
      `(("lockfile" ,python-lockfile)
+       ("pygobject" ,python-pygobject)
        ("urllib3" ,python-urllib3)))
     (inputs
-     `(("librsync" ,librsync)
-       ("lftp" ,lftp)
-       ("gnupg" ,gnupg)                 ; gpg executable needed
-       ("util-linux" ,util-linux)))     ; for setsid
+     (list dbus ; dbus-launch (Gio backend)
+           librsync
+           lftp
+           gnupg ; gpg executable needed
+           util-linux))     ; for setsid
     (arguments
      `(#:test-target "test"
        #:phases
@@ -129,22 +138,23 @@
              (substitute* "duplicity/gpginterface.py"
                (("self.call = u'gpg'")
                 (string-append "self.call = '" (assoc-ref inputs "gnupg") "/bin/gpg'")))
-
+             (substitute* "duplicity/backends/giobackend.py"
+               (("subprocess.Popen\\(\\[u'dbus-launch'\\]")
+                (string-append "subprocess.Popen([u'"
+                               (assoc-ref inputs "dbus")
+                               "/bin/dbus-launch']")))
              (substitute* '("testing/functional/__init__.py"
                             "testing/overrides/bin/lftp")
-               (("/bin/sh") (which "sh")))
-             #t))
+               (("/bin/sh") (which "sh")))))
          (add-before 'check 'set-up-tests
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "HOME" (getcwd))   ; gpg needs to write to $HOME
              (setenv "TZDIR"            ; some timestamp checks need TZDIR
-                     (string-append (assoc-ref inputs "tzdata")
-                                    "/share/zoneinfo"))
+                     (search-input-directory inputs "share/zoneinfo"))
              ;; Some things respect TMPDIR, others hard-code /tmp, and the
              ;; defaults don't match up, breaking test_restart.  Fix it.
-             (setenv "TMPDIR" "/tmp")
-             #t)))))
-    (home-page "http://duplicity.nongnu.org/index.html")
+             (setenv "TMPDIR" "/tmp"))))))
+    (home-page "https://duplicity.gitlab.io/duplicity-web/")
     (synopsis "Encrypted backup using rsync algorithm")
     (description
      "Duplicity backs up directories by producing encrypted tar-format volumes
@@ -169,8 +179,7 @@ spying and/or modification by the server.")
                (base32
                 "11mx8q29cr0sryd11awab7y4mhqgbamb1ss77rffjj6in8pb4hdk"))))
     (native-inputs
-     `(("automake" ,automake)
-       ("autoconf" ,autoconf)))
+     (list automake autoconf))
     (build-system gnu-build-system)
     (synopsis "File verification and repair tools")
     (description "Par2cmdline uses Reed-Solomon error-correcting codes to
@@ -196,14 +205,14 @@ can even repair them.")
        (base32
         "02bnczg01cyhajmm4rhbnc0ja0dd9ikv9fwv28asxh1rlx9yr0b7"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (inputs
-     `(("glib" ,glib)
-       ("tar" ,tar)
-       ("lzop" ,lzop)
-       ("mcrypt" ,mcrypt)
-       ("openssh" ,openssh)
-       ("gnupg" ,gnupg-1)))
+     (list glib
+           tar
+           lzop
+           mcrypt
+           openssh
+           gnupg-1))
     (arguments
      `(#:configure-flags
        `(,(string-append "--sbindir=" (assoc-ref %outputs "out") "/bin"))
@@ -221,7 +230,7 @@ backups (called chunks) to allow easy burning to CD/DVD.")
 (define-public libarchive
   (package
     (name "libarchive")
-    (version "3.4.2")
+    (version "3.5.1")
     (source
      (origin
        (method url-fetch)
@@ -232,16 +241,16 @@ backups (called chunks) to allow easy burning to CD/DVD.")
                                  version ".tar.xz")))
        (sha256
         (base32
-         "18dd01ahs2hv74xm7axjc3yhq839p0x0s4vssvlmm8fknja09qfq"))))
+         "16r95rlmikll1k8vbhh06vq6x3srkc10hzxjjf3021mjs2ld65qf"))))
     (build-system gnu-build-system)
     (inputs
-     `(("bzip2" ,bzip2)
-       ("libxml2" ,libxml2)
-       ("lzo" ,lzo)
-       ("nettle" ,nettle)
-       ("xz" ,xz)
-       ("zlib" ,zlib)
-       ("zstd" ,zstd "lib")))
+     (list bzip2
+           libxml2
+           lzo
+           nettle
+           xz
+           zlib
+           `(,zstd "lib")))
     (arguments
      `(#:configure-flags '("--disable-static")
        #:phases
@@ -333,21 +342,15 @@ random access nor for in-place modification.")
         (base32 "0bzyv6qmnivxnv9nw7lnfn46k0m1dlxcjj53zcva6v8y8084l1iw"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-
-       ;; For tests.
-       ("dejagnu" ,dejagnu)))
+     (list autoconf automake pkg-config
+           ;; For tests.
+           dejagnu))
     (inputs
      ;; XXX Compiling with nettle (encryption) support requires patching out
      ;; -Werror from GNUmakefile.in.  Then, rdup-tr-{en,de}crypt tests fail:
      ;; free(): invalid pointer
      ;; ** rdup-tr: SIGPIPE received, exiting
-     `(("glib" ,glib)
-       ("pcre" ,pcre)
-       ("libarchive" ,libarchive)
-       ("mcrypt" ,mcrypt)))
+     (list glib pcre libarchive mcrypt))
     (arguments
      `(#:parallel-build? #f             ;race conditions
        #:phases
@@ -388,7 +391,7 @@ list and implement the backup strategy.")
 (define-public snapraid
   (package
     (name "snapraid")
-    (version "11.5")
+    (version "12.0")
     (source
      (origin
        (method git-fetch)
@@ -397,26 +400,24 @@ list and implement the backup strategy.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0dlhdsmq5l208zldfr9z9g0p67wry81dr0r23lpybb5c9fm2f2rm"))))
+        (base32 "0k8pynafkx8bhnqnjhc3jsds5p40sflz4drm88i6dg6ifv35mhh9"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:configure-flags
-       (list "--enable-valgrind"
-             "--with-blkid")
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'bootstrap 'set-version
-           (lambda _
-             (setenv "VERSION" ,version)
-             (patch-shebang "autover.sh"))))))
+     (list #:configure-flags
+           ;; XXX --enable-valgrind fails with ‘A must-be-redirected function
+           ;; whose name matches the pattern: strlen in an object with soname
+           ;; matching: ld-linux-x86-64.so.2 was not found […]’; used to work.
+           #~(list "--with-blkid")
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-before 'bootstrap 'set-version
+                 (lambda _
+                   (setenv "VERSION" #$version)
+                   (patch-shebang "autover.sh"))))))
     (native-inputs
-     `(("automake" ,automake)
-       ("autoconf" ,autoconf)
-
-       ;; For the tests.
-       ("valgrind" ,valgrind)))
+     (list automake autoconf))
     (inputs
-     `(("util-linux" ,util-linux "lib"))) ; libblkid
+     (list `(,util-linux "lib"))) ; libblkid
     (home-page "https://www.snapraid.it/")
     (synopsis "Efficient backups using parity snapshots across disk arrays")
     (description
@@ -458,7 +459,7 @@ remain fully idle, saving power and producing less noise.")
          "0miklk4bqblpyzh1bni4x6lqn88fa8fjn15x1k1n8bxkx60nlymd"))))
     (build-system gnu-build-system)
     (inputs
-     `(("librsync" ,librsync-0.9)))
+     (list librsync-0.9))
     (arguments
      `(#:make-flags `(,(string-append "PREFIX=" (assoc-ref %outputs "out"))
                       ,(string-append "CC=" ,(cc-for-target)))
@@ -489,10 +490,9 @@ errors.")
         (base32 "11rvjcp77zwgkphz1kyf5yqgr3rlss7dm9xzmvpvc4lp99xq7drb"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-setuptools-scm))
     (inputs
-     `(("python" ,python)
-       ("librsync" ,librsync)))
+     (list python librsync))
     (arguments
      `(#:tests? #f))                    ; Tests require root/sudo
     (home-page "https://rdiff-backup.net/")
@@ -531,8 +531,7 @@ rdiff-backup is easy to use and settings have sensible defaults.")
            (lambda _
              (invoke "make" "test"))))))
     (inputs
-     `(("perl" ,perl)
-       ("rsync" ,rsync)))
+     (list perl rsync))
     (home-page "https://rsnapshot.org")
     (synopsis "Deduplicating snapshot backup utility based on rsync")
     (description "rsnapshot is a file system snapshot utility based on rsync.
@@ -552,7 +551,6 @@ rsnapshot uses hard links to deduplicate identical files.")
               (sha256
                (base32
                 "0fpdyxww41ba52d98blvnf543xvirq1v9xz1i3x1gm9lzlzpmc2g"))
-              (patches (search-patches "diffutils-gets-undeclared.patch"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -579,41 +577,38 @@ rsnapshot uses hard links to deduplicate identical files.")
                       (substitute* "configure"
                         (("GUILE=(.*)--variable bindir`" _ middle)
                          (string-append "GUILE=" middle
-                                        "--variable bindir`/guile")))
-                      #t))
+                                        "--variable bindir`/guile")))))
                   (add-before 'build 'set-libtirpc-include-path
                     (lambda* (#:key inputs #:allow-other-keys)
                       ;; Allow <rpc/rpc.h> & co. to be found.
-                      (let ((libtirpc (assoc-ref inputs "libtirpc")))
-                        (setenv "CPATH"
-                                (string-append (getenv "CPATH")
-                                               ":" libtirpc
-                                               "/include/tirpc"))
-                        #t)))
+                      (let ((tirpc (string-append (assoc-ref inputs "libtirpc")
+                                                  "/include/tirpc")))
+                        (if (getenv "CPATH")
+                          (setenv "CPATH"
+                                  (string-append (getenv "CPATH")
+                                                 ":" tirpc))
+                          (setenv "CPATH" tirpc)))))
                   (add-before 'check 'skip-test
                     (lambda _
                       ;; XXX: This test fails (1) because current GnuTLS no
                       ;; longer supports OpenPGP authentication, and (2) for
                       ;; some obscure reason.  Better skip it.
-                      (setenv "XFAIL_TESTS" "utils/block-server")
-                      #t)))))
+                      (setenv "XFAIL_TESTS" "utils/block-server"))))))
     (native-inputs
-     `(("guile" ,guile-2.0)
-       ("gperf" ,gperf-3.0)                  ;see <https://bugs.gnu.org/32382>
-       ("pkg-config" ,pkg-config)
-       ("rpcsvc-proto" ,rpcsvc-proto)))           ;for 'rpcgen'
+     (list guile-2.0 gperf-3.0 ;see <https://bugs.gnu.org/32382>
+           pkg-config rpcsvc-proto))           ;for 'rpcgen'
     (inputs
-     `(("guile" ,guile-2.0)
-       ("util-linux" ,util-linux)
-       ("libtirpc" ,libtirpc)
-       ("gnutls" ,gnutls)
-       ("tdb" ,tdb)
-       ("bdb" ,bdb)
-       ("gdbm" ,gdbm)
-       ("libgcrypt" ,libgcrypt)
-       ("lzo" ,lzo)
-       ("bzip2" ,bzip2)
-       ("zlib" ,zlib)))
+     (list guile-2.0
+           util-linux
+           libtirpc
+           gnutls
+           tdb
+           bdb
+           gdbm
+           libgcrypt
+           lzo
+           bzip2
+           zlib))
     (home-page "https://nongnu.org/libchop/")
     (synopsis "Tools & library for data backup and distributed storage")
     (description
@@ -738,16 +733,14 @@ detection, and lossless compression.")
                                (string-append share "/fish/vendor_completions.d")))
                #t))))))
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-pytest" ,python-pytest)))
+     (list python-cython python-setuptools-scm python-pytest))
     (inputs
-     `(("acl" ,acl)
-       ("libb2" ,libb2)
-       ("lz4" ,lz4)
-       ("openssl" ,openssl)
-       ("python-llfuse" ,python-llfuse)
-       ("zstd" ,zstd "lib")))
+     (list acl
+           libb2
+           lz4
+           openssl
+           python-llfuse
+           `(,zstd "lib")))
     (synopsis "Deduplicated, encrypted, authenticated and compressed backups")
     (description "Borg is a deduplicating backup program.  Optionally, it
 supports compression and authenticated encryption.  The main goal of Borg is to
@@ -761,22 +754,19 @@ to not fully trusted targets.  Borg is a fork of Attic.")
 (define-public wimlib
   (package
     (name "wimlib")
-    (version "1.13.4")
+    (version "1.13.5")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://wimlib.net/downloads/"
                                   "wimlib-" version ".tar.gz"))
               (sha256
                (base32
-                "04ny5s5z05gk6davbwkjkraan781k2xzw6kjwp75h6ncv45dv1sb"))))
+                "08z3xxm5hq1n4wmyhgz14p1cv0w2lx610vn8nhfwpds4n7lwkz1j"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("fuse" ,fuse)
-       ("libxml2" ,libxml2)
-       ("ntfs-3g" ,ntfs-3g)
-       ("openssl" ,openssl)))
+     (list fuse libxml2 ntfs-3g openssl))
     (arguments
      `(#:configure-flags
        (list "--disable-static"
@@ -832,12 +822,11 @@ NTFS volumes using @code{ntfs-3g}, preserving NTFS-specific attributes.")
                     (output-dir
                      (assoc-ref outputs "out"))
 
-                    ;; Just a default... not so useful on guixsd though
-                    ;; You probably want to a service with file(s) to point to.
+                    ;; Just a default... not so useful on Guix Systems though.
+                    ;; You probably want a service with file(s) to point to.
                     (confdir "/etc/dirvish")
 
-                    (perl (string-append (assoc-ref %build-inputs "perl")
-                                         "/bin/perl"))
+                    (perl (search-input-file inputs "/bin/perl"))
                     (loadconfig.pl (call-with-input-file "loadconfig.pl"
                                      read-string)))
 
@@ -888,16 +877,13 @@ NTFS volumes using @code{ntfs-3g}, preserving NTFS-specific attributes.")
                (for-each write-man man-pages)
                #t))))))
     (inputs
-     `(("perl" ,perl)
-       ("rsync" ,rsync)
-       ("perl-libtime-period" ,perl-libtime-period)
-       ("perl-libtime-parsedate" ,perl-libtime-parsedate)))
+     (list perl rsync perl-libtime-period perl-libtime-parsedate))
     (home-page "http://dirvish.org/")
     (synopsis "Fast, disk based, rotating network backup system")
     (description
      "With dirvish you can maintain a set of complete images of your
 file systems with unattended creation and expiration.  A dirvish backup vault
-is like a time machine for your data. ")
+is like a time machine for your data.")
     (license (license:fsf-free "file://COPYING"
                                "Open Software License 2.0"))))
 
@@ -1037,11 +1023,7 @@ precious backup space.
     (arguments
      `(#:tests? #f))                    ;no test
     (inputs
-     `(("lzo" ,lzo)
-       ("libressl" ,libressl)
-       ("protobuf" ,protobuf)
-       ("xz" ,xz)
-       ("zlib" ,zlib)))
+     (list lzo libressl protobuf xz zlib))
     (home-page "http://zbackup.org")
     (synopsis "Versatile deduplicating backup tool")
     (description
@@ -1075,12 +1057,10 @@ is format-agnostic, so you can feed virtually any files to it.")
          "--disable-readline"
          "--disable-rmt")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("openssl" ,openssl)
-       ("zlib" ,zlib)
-       ("util-linux" ,util-linux "lib")
-       ("e2fsprogs" ,e2fsprogs)))
+     (list openssl zlib
+           `(,util-linux "lib") e2fsprogs))
     (home-page "https://dump.sourceforge.io/")
     (synopsis "Ext2/3/4 file system dump/restore utilities")
     (description "Dump examines files in a file system, determines which ones
@@ -1092,6 +1072,85 @@ directory subtrees may also be restored from full or partial backups in
 interactive mode.")
     (license license:bsd-3)))
 
+(define-public btrbk
+  (package
+    (name "btrbk")
+    (version "0.31.3")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://digint.ch/download/btrbk/releases/"
+                                  name "-" version ".tar.xz"))
+              (sha256
+               (base32
+                "1lx7vnf386nsik8mxrrfyx1h7mkqk5zs26sy0s0lynfxcm4lkxb2"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list
+      #:make-flags #~(list (string-append "PREFIX=" #$output))
+      #:phases #~(modify-phases %standard-phases
+                   (replace 'configure
+                     (lambda _
+                       (substitute* "Makefile"
+                         (("= /etc")
+                          (string-append "= " #$output "/etc")))))
+                   (delete 'check)
+                   (add-after 'install 'wrap-scripts
+                     (lambda* (#:key inputs outputs #:allow-other-keys)
+                       (define btrbk (search-input-file outputs "bin/btrbk"))
+                       ;; From a comment in btrbk, "Calling btrbk via 'lsbtr'
+                       ;; symlink acts as an alias for 'btrbk ls', while also
+                       ;; changing the semantics of the command line options."
+                       (substitute* btrbk
+                         (("program_name = \\$0")
+                          (string-append "program_name = "
+                                         "$ENV{'BTRBK_PROGRAM_NAME'}")))
+                       ;; Wrap the script, so that it works with SSH URI and
+                       ;; finds mbuffer out of the box.
+                       (wrap-program btrbk
+                         #:sh (search-input-file inputs "bin/bash")
+                         '("BTRBK_PROGRAM_NAME" = ("$0"))
+                         `("PATH" prefix
+                           ,(list (string-append #$btrfs-progs "/bin")
+                                  (string-append #$coreutils "/bin")
+                                  (string-append #$mbuffer "/bin")
+                                  (string-append #$openssh "/bin")))))))))
+    (native-inputs (list ruby-asciidoctor))
+    (inputs (list bash-minimal
+                  btrfs-progs
+                  coreutils
+                  mbuffer
+                  openssh
+                  perl))
+    (home-page "https://digint.ch/btrbk/")
+    (synopsis "Backup tool for Btrfs subvolumes")
+    (description "Btrbk is a backup tool for Btrfs subvolumes, taking
+advantage of Btrfs specific capabilities to create atomic snapshots and
+transfer them incrementally to your backup locations.  The source and target
+locations are specified in a config file, which allows easily configuring
+simple scenarios like e.g. a @i{laptop with locally attached backup disks}, as
+well as more complex ones, e.g. a @i{server receiving backups from several
+hosts via SSH, with different retention policy}.  It has features such as:
+@itemize
+@item atomic snapshots
+@item incremental backups
+@item flexible retention policy
+@item backups to multiple destinations
+@item transfer via SSH
+@item resume backups (for removable and mobile devices)
+@item archive to offline storage
+@item encrypted backups to non-btrfs storage
+@item wildcard subvolumes (useful for Docker and LXC containers)
+@item transaction log
+@item comprehensive list and statistics output
+@item resolve and trace Btrfs parent-child and received-from relationships
+@item list file changes between backups
+@item calculate accurate disk space usage based on block regions.
+@end itemize
+Btrbk is designed to run as a cron job for triggering periodic snapshots and
+backups, as well as from the command line (e.g. for instantly creating
+additional snapshots).")
+    (license license:gpl3+)))
+
 (define-public burp
   (package
     (name "burp")
@@ -1117,17 +1176,14 @@ interactive mode.")
                 (string-append prefix " 3600" suffix "\n")))
              #t)))))
     (inputs
-     `(("acl" ,acl)
-       ("librsync" ,librsync)
-       ("ncurses" ,ncurses)             ; for the live status monitor
-       ("openssl" ,openssl)
-       ("uthash" ,uthash)
-       ("zlib" ,zlib)))
+     (list acl
+           librsync
+           ncurses ; for the live status monitor
+           openssl
+           uthash
+           zlib))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("check" ,check-0.14)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake check-0.14 pkg-config))
     (home-page "https://burp.grke.org")
     (synopsis "Differential backup and restore")
     (description "Burp is a network backup and restore program.  It attempts
@@ -1138,33 +1194,27 @@ backup.")
 (define-public disarchive
   (package
     (name "disarchive")
-    (version "0.2.1")
+    (version "0.4.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://files.ngyro.com/disarchive/"
                                   "disarchive-" version ".tar.gz"))
               (sha256
                (base32
-                "1jypk0gdwxqbqxiblww863nzq0kwnc676q68j32sprqd7ilnq02s"))
-              (patches (search-patches "disarchive-cross-compilation.patch"))))
+                "1pql8cspsxyx8cpw3xyhirnisv6rb4vj5mxr1d7w9la72q740n8s"))))
     (build-system gnu-build-system)
-    (arguments
-     `(#:phases (modify-phases %standard-phases
-                  (add-after 'unpack 'delete-configure
-                    (lambda _
-                      (delete-file "configure"))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ("guile" ,guile-3.0)             ;for cross-compilation
-       ("guile-gcrypt" ,guile-gcrypt)
-       ("guile-quickcheck" ,guile-quickcheck)))
+     (list autoconf
+           automake
+           pkg-config
+           guile-3.0 ;for cross-compilation
+           guile-gcrypt
+           guile-lzma
+           guile-quickcheck))
     (inputs
-     `(("guile" ,guile-3.0)
-       ("zlib" ,zlib)))
+     (list guile-3.0 zlib))
     (propagated-inputs
-     `(("guile-gcrypt" ,guile-gcrypt)))
+     (list guile-gcrypt guile-lzma))
     (home-page "https://ngyro.com/software/disarchive.html")
     (synopsis "Software archive disassembler")
     (description "Disarchive can disassemble software archives into data
@@ -1174,3 +1224,46 @@ original files.  For example, a software archive made using tar and
 Gzip will need to describe the order of files in the tarball and the
 compression parameters used by Gzip.")
     (license license:gpl3+)))
+
+(define-public borgmatic
+  (package
+    (name "borgmatic")
+    (version "1.5.22")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "borgmatic" version))
+       (sha256
+        (base32 "0pvqlj17vp81i7saxqh5hsaxqz29ldrjd7bcssh4g1h0ikmnaf2r"))))
+    (build-system python-build-system)
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'configure
+                 (lambda* (#:key inputs #:allow-other-keys)
+                   ;; Set absolute store path to borg.
+                   (substitute* "borgmatic/commands/borgmatic.py"
+                     (("location\\.get\\('local_path', 'borg'\\)")
+                      (string-append "location.get('local_path', '"
+                                     (search-input-file inputs "bin/borg")
+                                     "')")))))
+               (replace 'check
+                 (lambda* (#:key tests? #:allow-other-keys)
+                   (when tests?
+                     ;; Tests require the installed executable.
+                     (setenv "PATH" (string-append #$output "/bin"
+                                                   ":" (getenv "PATH")))
+                     (invoke "pytest")))))))
+    (inputs
+     (list borg python-colorama python-jsonschema python-requests
+           python-ruamel.yaml))
+    (native-inputs
+     (list python-flexmock python-pytest python-pytest-cov))
+    (home-page "https://torsion.org/borgmatic/")
+    (synopsis "Simple, configuration-driven backup software")
+    (description
+     "borgmatic is simple, configuration-driven backup software for servers
+and workstations.  Protect your files with client-side encryption.  Backup
+your databases too.  Monitor it all with integrated third-party services.
+borgmatic is powered by borg.")
+    (license license:gpl3+)))
diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index ea2e102c15..0e49b6044c 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014, 2019 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org>
 ;;; Copyright © 2014, 2015, 2016, 2018 Mark H Weaver <mhw@netris.org>
@@ -17,6 +17,9 @@
 ;;; Copyright © 2020 Vitaliy Shatrov <D0dyBo0D0dyBo0@protonmail.com>
 ;;; Copyright © 2020 Chris Marusich <cmmarusich@gmail.com>
 ;;; Copyright © 2021 Leo Le Bouter <lle-bout@zaclys.net>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -39,6 +42,7 @@
   #:use-module (gnu packages)
   #:use-module (gnu packages acl)
   #:use-module (gnu packages algebra)
+  #:use-module (gnu packages attr)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages ed)
@@ -56,6 +60,7 @@
   #:use-module (gnu packages gettext)
   #:use-module (guix i18n)
   #:use-module (guix utils)
+  #:use-module (guix gexp)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
@@ -67,6 +72,7 @@
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-26)
   #:export (glibc
+            make-ld-wrapper
             libiconv-if-needed))
 
 ;;; Commentary:
@@ -78,14 +84,14 @@
 (define-public hello
   (package
     (name "hello")
-    (version "2.10")
+    (version "2.11")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnu/hello/hello-" version
                                   ".tar.gz"))
               (sha256
                (base32
-                "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))
+                "1g84a3hqs4pgx3yzs99cysv3iq440ncdw77bf03fsi1w5mby174c"))))
     (build-system gnu-build-system)
     (synopsis "Hello, GNU world: An example GNU package")
     (description
@@ -98,18 +104,18 @@ command-line arguments, multiple languages, and so on.")
 (define-public grep
   (package
    (name "grep")
-   (version "3.4")
+   (version "3.6")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnu/grep/grep-"
                                 version ".tar.xz"))
             (sha256
              (base32
-              "1yy33kiwrxrwj2nxa4fg15bvmwyghqbs8qwkdvy5phm784f7brjq"))
+              "0gipv6bzkm1aihj0ncqpyh164xrzgcxcv9r1kwzyk2g1mzl1azk6"))
             (patches (search-patches "grep-timing-sensitive-test.patch"))))
    (build-system gnu-build-system)
-   (native-inputs `(("perl" ,perl)))             ;some of the tests require it
-   (inputs `(("pcre" ,pcre)))
+   (native-inputs (list perl))                   ;some of the tests require it
+   (inputs (list pcre))
    (arguments
     `(#:phases
       (modify-phases %standard-phases
@@ -122,8 +128,7 @@ command-line arguments, multiple languages, and so on.")
               (substitute* (list (string-append bin "/egrep")
                                  (string-append bin "/fgrep"))
                 (("^exec grep")
-                 (string-append "exec " bin "/grep")))
-              #t))))))
+                 (string-append "exec " bin "/grep")))))))))
    (synopsis "Print lines matching a pattern")
    (description
      "grep is a tool for finding text inside files.  Text is found by
@@ -146,27 +151,24 @@ including, for example, recursive directory searching.")
                                 ".tar.gz"))
             (sha256
              (base32
-              "0alqagh0nliymz23kfjg6g9w3cr086k0sfni56gi8fhzqwa3xksk"))))
+              "0alqagh0nliymz23kfjg6g9w3cr086k0sfni56gi8fhzqwa3xksk"))
+            (patches (search-patches "coreutils-gnulib-tests.patch"))
+
+            ;; Remove this snippet once upstream releases a fixed version.
+            ;; This snippet changes Makefile.in, even though the upstream
+            ;; patch changes testsuite/local.mk, since we build sed from a
+            ;; release tarball.  See: https://bugs.gnu.org/36150
+            (snippet
+             '(begin
+                (substitute* "Makefile.in"
+                  (("^  abs_srcdir='\\$\\(abs_srcdir\\)'.*" previous-line)
+                   (string-append
+                    previous-line
+                    "  CONFIG_HEADER='$(CONFIG_HEADER)'\t\t\\\n")))))
+            (modules '((guix build utils)))))
    (build-system gnu-build-system)
-   (arguments
-    ;; TODO: When merging this into core-updates, keep the version of
-    ;; this code (with comment!) applied as a snippet.
-    `(,@(if (string-prefix? "powerpc64le" (or (%current-target-system)
-                                              (%current-system)))
-          `(#:phases
-            (modify-phases %standard-phases
-              (add-after 'unpack 'allow-building-on-selinux-systems
-                (lambda _
-                  (substitute* "Makefile.in"
-                    (("^  abs_srcdir='\\$\\(abs_srcdir\\)'.*" previous-line)
-                     (string-append
-                      previous-line
-                      "  CONFIG_HEADER='$(CONFIG_HEADER)'\t\t\\\n")))
-                  #t))))
-          '())))
    (synopsis "Stream editor")
-   (native-inputs
-    `(("perl" ,perl)))                            ;for tests
+   (native-inputs (list perl))                    ;for tests
    (description
     "Sed is a non-interactive, text stream editor.  It receives a text
 input from a file or from standard input and it then applies a series of text
@@ -179,14 +181,14 @@ implementation offers several extensions over the standard utility.")
 (define-public tar
   (package
    (name "tar")
-   (version "1.32")
+   (version "1.34")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnu/tar/tar-"
                                 version ".tar.xz"))
             (sha256
              (base32
-              "1n7xy657ii0sa42zx6944v2m4v9qrh6sqgmw17l3nch3y43sxlyh"))
+              "0a0x87anh9chbi2cgcyy7pmnm5hzk4yd1w2j8gm1wplwhwkbvgk3"))
             (patches (search-patches "tar-skip-unreliable-tests.patch"
                                      "tar-remove-wholesparse-check.patch"))))
    (build-system gnu-build-system)
@@ -214,13 +216,12 @@ implementation offers several extensions over the standard utility.")
                      (let ((bash (assoc-ref inputs "bash")))
                        (substitute* "src/system.c"
                          (("/bin/sh")
-                          (string-append bash "/bin/sh")))
-                       #t))))))
+                          (string-append bash "/bin/sh")))))))))
 
    ;; When cross-compiling, the 'set-shell-file-name' phase needs to be able
    ;; to refer to the target Bash.
    (inputs (if (%current-target-system)
-               `(("bash" ,bash))
+               (list bash)
                '()))
 
    (synopsis "Managing tar archives")
@@ -253,7 +254,7 @@ standard utility.")
     (if (%current-target-system)
         `(#:configure-flags '("gl_cv_func_working_mktime=yes"))
         '()))
-   (native-inputs `(("ed" ,ed)))
+   (native-inputs (list ed))
    (synopsis "Apply differences to originals, with optional backups")
    (description
     "Patch is a program that applies changes to files based on differences
@@ -267,16 +268,17 @@ differences.")
 (define-public diffutils
   (package
    (name "diffutils")
-   (version "3.7")
+   (version "3.8")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnu/diffutils/diffutils-"
                                 version ".tar.xz"))
             (sha256
              (base32
-              "09isrg0isjinv8c535nxsi1s86wfdfzml80dbw41dj9x3hiad9xk"))))
+              "1v4g8gi0lgakqa7iix8s4fq7lq6l92vw3rjd9wfd2rhjng8xggd6"))
+            (patches (search-patches "diffutils-fix-signal-processing.patch"))))
    (build-system gnu-build-system)
-   (native-inputs `(("perl" ,perl)))
+   (native-inputs (list perl))
    (synopsis "Comparing and merging files")
    (description
     "GNU Diffutils is a package containing tools for finding the
@@ -290,16 +292,15 @@ interactive means to merge two files.")
 (define-public findutils
   (package
    (name "findutils")
-   (version "4.7.0")
+   (version "4.8.0")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnu/findutils/findutils-"
                                 version ".tar.xz"))
             (sha256
              (base32
-              "16kqz9yz98dasmj70jwf5py7jk558w96w0vgp3zf9xsqk3gzpzn5"))
-            (patches (search-patches "findutils-localstatedir.patch"
-                                     "findutils-test-rwlock-threads.patch"))))
+              "0r3i72hnw0a30khlczi9k2c51aamaj6kfmp5mk3844nrjxz7n4jp"))
+            (patches (search-patches "findutils-localstatedir.patch"))))
    (build-system gnu-build-system)
    (arguments
     `(#:configure-flags (list
@@ -311,8 +312,7 @@ interactive means to merge two files.")
                      (substitute* '("tests/xargs/verbose-quote.sh"
                                     "tests/find/exec-plus-last-file.sh")
                        (("#!/bin/sh")
-                        (string-append "#!" (which "sh"))))
-                     #t)))))
+                        (string-append "#!" (which "sh")))))))))
    (synopsis "Operating on files matching given criteria")
    (description
     "Findutils supplies the basic file directory searching utilities of the
@@ -335,18 +335,20 @@ used to apply commands with arbitrarily long arguments.")
             (sha256
              (base32
               "1yjcrh5hw70c0yn8zw55pd6j51dj90anpq8mmg649ps9g3gdhn24"))
-            (patches (search-patches "coreutils-ls.patch"))))
+            (patches (search-patches "coreutils-ls.patch"
+                                     "coreutils-gnulib-tests.patch"))))
    (build-system gnu-build-system)
-   (inputs `(("acl"  ,acl)                        ; TODO: add SELinux
-             ("gmp"  ,gmp)                        ;bignums in 'expr', yay!
+   (inputs `(,acl                                 ;TODO: add SELinux
+             ,attr                                ;for xattrs in ls, mv, etc
+             ,gmp                                 ;bignums in 'expr', yay!
 
              ;; Do not use libcap when cross-compiling since it's not quite
              ;; cross-compilable; and use it only for supported systems.
              ,@(if (and (not (%current-target-system))
                         (member (%current-system)
                                 (package-supported-systems libcap)))
-             `(("libcap" ,libcap-2.31))        ;capability support in 'ls', etc.
-             '())))
+                   `(,libcap)                ;capability support in 'ls', etc.
+                   '())))
    (native-inputs
     ;; Perl is needed to run tests in native builds, and to run the bundled
     ;; copy of help2man.  However, don't pass it when cross-compiling since
@@ -354,7 +356,7 @@ used to apply commands with arbitrarily long arguments.")
     ;; for help2man.
     (if (%current-target-system)
         '()
-        `(("perl" ,perl))))
+        (list perl)))
    (outputs '("out" "debug"))
    (arguments
     `(#:parallel-build? #f            ; help2man may be called too early
@@ -383,16 +385,18 @@ used to apply commands with arbitrarily long arguments.")
                      (substitute* (find-files "gnulib-tests" "\\.c$")
                        (("/bin/sh") (which "sh")))
                      (substitute* (find-files "tests" "\\.sh$")
-                       (("#!/bin/sh") (string-append "#!" (which "sh"))))
-                     #t))
-                 ,@(if (hurd-target?)
-                       `((add-after 'unpack 'remove-tests
-                           (lambda _
-                             (substitute* "Makefile.in"
+                       (("#!/bin/sh") (string-append "#!" (which "sh"))))))
+                 (add-after 'unpack 'remove-tests
+                   (lambda _
+                     ,@(if (hurd-target?)
+                           '((substitute* "Makefile.in"
                                ;; this test hangs
-                               (("^ *tests/misc/timeout-group.sh.*") ""))
-                             #t)))
-                       '()))))
+                               (("^ *tests/misc/timeout-group.sh.*") "")))
+                           '())
+                     (substitute* "Makefile.in"
+                       ;; fails on filesystems where inotify cannot be used,
+                       ;; more info in #47935
+                       (("^ *tests/tail-2/inotify-dir-recreate.sh.*") "")))))))
    (synopsis "Core GNU utilities (file, text, shell)")
    (description
     "GNU Coreutils package includes all of the basic command-line tools that
@@ -409,6 +413,7 @@ standard.")
     (inherit coreutils)
     (name "coreutils-minimal")
     (outputs '("out"))
+    (native-inputs '())
     (inputs '())))
 
 (define-public coreutils-8.30
@@ -436,8 +441,7 @@ standard.")
                 ;; specific issue, but "env-S.pl" is not adjusted for build
                 ;; environments with long prefixes (/tmp/guix-build-...).
                 (substitute* "Makefile"
-                  (("^.*tests/misc/env-S.pl.*$") ""))
-                #t)))))))))
+                  (("^.*tests/misc/env-S.pl.*$") "")))))))))))
 
 (define-public gnu-make
   (package
@@ -452,8 +456,8 @@ standard.")
               "06cfqzpqsvdnsxbysl5p2fgdgxgl9y4p7scpnrfa8z2zgkjdspz0"))
             (patches (search-patches "make-impure-dirs.patch"))))
    (build-system gnu-build-system)
-   (native-inputs `(("pkg-config" ,pkg-config)))  ; to detect Guile
-   (inputs `(("guile" ,guile-3.0)))
+   (native-inputs (list pkg-config))              ;to detect Guile
+   (inputs (list guile-3.0))
    (outputs '("out" "debug"))
    (arguments
     `(,@(if (hurd-target?)
@@ -469,8 +473,7 @@ standard.")
               (substitute* "src/job.c"
                 (("default_shell =.*$")
                  (format #f "default_shell = \"~a/bin/sh\";\n"
-                         bash)))
-              #t))))))
+                         bash)))))))))
    (synopsis "Remake files automatically")
    (description
     "Make is a program that is used to control the production of
@@ -494,7 +497,7 @@ change.  GNU make offers many powerful extensions over the standard utility.")
                (base32
                 "12f5zzyq2w56g95nni65hc0g5p7154033y2f3qmjvd016szn5qnn"))))
     (arguments
-     `(#:configure-flags '("CFLAGS=-D__alloca=alloca")
+     `(#:configure-flags '("CFLAGS=-D__alloca=alloca -D__stat=stat")
        #:phases
        (modify-phases %standard-phases
          (add-before 'build 'set-default-shell
@@ -504,26 +507,26 @@ change.  GNU make offers many powerful extensions over the standard utility.")
                (substitute* "job.c"
                  (("default_shell =.*$")
                   (format #f "default_shell = \"~a/bin/sh\";\n"
-                          bash)))
-               #t))))))))
+                          bash)))))))))))
 
 (define-public binutils
   (package
    (name "binutils")
-   (version "2.34")
-   (source (origin
-            (method url-fetch)
-            (uri (string-append "mirror://gnu/binutils/binutils-"
-                                version ".tar.bz2"))
-            (sha256
-             (base32
-              "1rin1f5c7wm4n3piky6xilcrpf2s0n3dd5vqq8irrxkcic3i1w49"))
-            (patches (search-patches "binutils-loongson-workaround.patch"))))
+   (version "2.37")
+   (source
+    (origin
+      (method url-fetch)
+      (uri (string-append "mirror://gnu/binutils/binutils-"
+                          version ".tar.bz2"))
+      (sha256
+       (base32 "1m3b2rdfv1dmdpd0bzg1hy7i8a2qng53szc6livyi3nh6101mz37"))
+      (patches (search-patches "binutils-loongson-workaround.patch"
+                               "binutils-2.37-file-descriptor-leak.patch"
+                               "binutils-CVE-2021-45078.patch"))))
    (build-system gnu-build-system)
-
-   ;; TODO: Add dependency on zlib + those for Gold.
    (arguments
-    `(#:configure-flags '(;; Add `-static-libgcc' to not retain a dependency
+    `(#:out-of-source? #t   ;recommended in the README
+      #:configure-flags '(;; Add `-static-libgcc' to not retain a dependency
                           ;; on GCC when bootstrapping.
                           "LDFLAGS=-static-libgcc"
 
@@ -542,17 +545,13 @@ change.  GNU make offers many powerful extensions over the standard utility.")
 
                           ;; Make sure 'ar' and 'ranlib' produce archives in a
                           ;; deterministic fashion.
-                          "--enable-deterministic-archives")
+                          "--enable-deterministic-archives"
 
-      ;; XXX: binutils 2.34 was mistakenly released without generated manuals:
-      ;; <https://sourceware.org/bugzilla/show_bug.cgi?id=25491>.  To avoid a
-      ;; circular dependency on texinfo, prevent the build system from creating
-      ;; the manuals by calling "true" instead of "makeinfo"...
-      #:make-flags '("MAKEINFO=true")))
-
-   ;; ...and "hide" this package so that users who install binutils get the
-   ;; version with documentation defined below.
-   (properties '((hidden? . #t)))
+                          "--enable-64-bit-bfd"
+                          "--enable-compressed-debug-sections=all"
+                          "--enable-lto"
+                          "--enable-separate-code"
+                          "--enable-threads")))
 
    (synopsis "Binary utilities: bfd gas gprof ld")
    (description
@@ -565,18 +564,6 @@ included.")
    (license gpl3+)
    (home-page "https://www.gnu.org/software/binutils/")))
 
-;; Work around a problem with binutils 2.34 whereby manuals are missing from
-;; the release tarball.  Remove this and the related code above when updating.
-(define-public binutils+documentation
-  (package/inherit
-   binutils
-   (native-inputs
-    `(("texinfo" ,texinfo)))
-   (arguments
-    (substitute-keyword-arguments (package-arguments binutils)
-      ((#:make-flags _ ''()) ''())))
-   (properties '())))
-
 ;; FIXME: ath9k-firmware-htc-binutils.patch do not apply on 2.34 because of a
 ;; big refactoring of xtensa-modules.c (commit 567607c11fbf7105 upstream).
 ;; Keep this version around until the patch is updated.
@@ -590,41 +577,42 @@ included.")
                                  version ".tar.bz2"))
              (sha256
               (base32
-               "1cmd0riv37bqy9mwbg6n3523qgr8b3bbm5kwj19sjrasl4yq9d0c"))))
+               "1cmd0riv37bqy9mwbg6n3523qgr8b3bbm5kwj19sjrasl4yq9d0c"))
+             (patches '())))
    (arguments
     (substitute-keyword-arguments (package-arguments binutils)
       ((#:make-flags _ ''()) ''())))
    (properties '())))
 
 (define-public binutils-gold
-  (package/inherit binutils+documentation
+  (package/inherit binutils
     (name "binutils-gold")
     (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'patch-source-shebangs 'patch-more-shebangs
-           (lambda _
-             (substitute* "gold/Makefile.in"
-               (("/bin/sh") (which "sh")))
-             #t)))
-       ,@(substitute-keyword-arguments (package-arguments binutils)
-         ; Upstream is aware of unrelocatable test failures on arm*.
-         ((#:tests? _ #f)
-          (if (any (cute string-prefix? <> (or (%current-target-system)
-                                               (%current-system)))
-                   '("i686" "x86_64"))
-              '#t '#f))
-         ((#:configure-flags flags)
-          `(cons* "--enable-gold=default"
-                 (delete "LDFLAGS=-static-libgcc" ,flags))))))
-     (native-inputs
-     `(("bc" ,bc)))
-     (inputs
-     `(("gcc:lib" ,(canonical-package gcc) "lib")))))
+     (substitute-keyword-arguments (package-arguments binutils)
+       ((#:configure-flags flags)
+        `(cons* "--enable-gold=default"
+                (delete "LDFLAGS=-static-libgcc" ,flags)))
+       ((#:phases phases '%standard-phases)
+        `(modify-phases ,phases
+           (add-after 'patch-source-shebangs 'patch-more-shebangs
+             (lambda _
+               (substitute* "gold/Makefile.in"
+                 (("/bin/sh") (which "sh")))))
+           ;; Multiple failing tests on some architectures in the gold testsuite.
+           ,@(if (or (target-arm?)
+                     (target-ppc32?))
+               '((add-after 'unpack 'skip-gold-testsuite
+                   (lambda _
+                     (substitute* "gold/Makefile.in"
+                       ((" testsuite") " ")))))
+               '())))))
+    (native-inputs
+     `(("bc" ,bc)))))
 
 (define* (make-ld-wrapper name #:key
                           (target (const #f))
                           binutils
+                          (linker "ld")
                           (guile (canonical-package guile-3.0))
                           (bash (canonical-package bash))
                           (guile-for-build guile))
@@ -634,7 +622,9 @@ wrapper uses GUILE and BASH.
 
 TARGET must be a one-argument procedure that, given a system type, returns a
 cross-compilation target triplet or #f.  When the result is not #f, make a
-wrapper for the cross-linker for that target, called 'TARGET-ld'."
+wrapper for the cross-linker for that target, called 'TARGET-ld'.  To use a
+different linker than the default \"ld\", such as \"ld.gold\" the linker name
+can be provided via the LINKER argument."
   ;; Note: #:system->target-triplet is a procedure so that the evaluation of
   ;; its result can be delayed until the 'arguments' field is evaluated, thus
   ;; in a context where '%current-system' is accurate.
@@ -659,8 +649,9 @@ wrapper for the cross-linker for that target, called 'TARGET-ld'."
                      (let* ((out (assoc-ref %outputs "out"))
                             (bin (string-append out "/bin"))
                             (ld  ,(if target
-                                      `(string-append bin "/" ,target "-ld")
-                                      '(string-append bin "/ld")))
+                                      `(string-append bin "/" ,target "-"
+                                                      ,linker)
+                                      `(string-append bin "/" ,linker)))
                             (go  (string-append ld ".go")))
 
                        (setvbuf (current-output-port)
@@ -685,11 +676,10 @@ wrapper for the cross-linker for that target, called 'TARGET-ld'."
                           (string-append (assoc-ref %build-inputs "binutils")
                                          ,(if target
                                               (string-append "/bin/"
-                                                             target "-ld")
-                                              "/bin/ld"))))
+                                                             target "-" linker)
+                                              (string-append "/bin/" linker)))))
                        (chmod ld #o555)
-                       (compile-file ld #:output-file go)
-                       #t)))))
+                       (compile-file ld #:output-file go))))))
     (synopsis "The linker wrapper")
     (description
      "The linker wrapper (or @code{ld-wrapper}) wraps the linker to add any
@@ -698,39 +688,31 @@ the store.")
     (home-page "https://www.gnu.org/software/guix//")
     (license gpl3+)))
 
-(export make-ld-wrapper)
-
 (define-public glibc
   ;; This is the GNU C Library, used on GNU/Linux and GNU/Hurd.  Prior to
   ;; version 2.28, GNU/Hurd used a different glibc branch.
   (package
    (name "glibc")
-   (version "2.31")
+   (version "2.33")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnu/glibc/glibc-" version ".tar.xz"))
             (sha256
              (base32
-              "05zxkyz9bv3j9h0xyid1rhvh3klhsmrpkf3bcs6frvlgyr2gwilj"))
-            (snippet
-             ;; Disable 'ldconfig' and /etc/ld.so.cache.  The latter is
-             ;; required on LFS distros to avoid loading the distro's libc.so
-             ;; instead of ours.
-             '(begin
-                (substitute* "sysdeps/unix/sysv/linux/configure"
-                  (("use_ldconfig=yes")
-                   "use_ldconfig=no"))
-                #t))
-            (modules '((guix build utils)))
-            (patches (search-patches "glibc-ldd-x86_64.patch"
-                                     "glibc-hidden-visibility-ldconfig.patch"
+              "1zvp0qdfbdyqrzydz18d9zg3n5ygy8ps7cmny1bvsp8h1q05c99f"))
+            (patches (search-patches "glibc-ldd-powerpc.patch"
+                                     "glibc-ldd-x86_64.patch"
+                                     "glibc-dl-cache.patch"
                                      "glibc-versioned-locpath.patch"
                                      "glibc-allow-kernel-2.6.32.patch"
                                      "glibc-reinstate-prlimit64-fallback.patch"
                                      "glibc-supported-locales.patch"
+                                     "glibc-cross-objdump.patch"
+                                     "glibc-cross-objcopy.patch" ;must come 2nd
                                      "glibc-hurd-clock_t_centiseconds.patch"
                                      "glibc-hurd-clock_gettime_monotonic.patch"
-                                     "glibc-hurd-signal-sa-siginfo.patch"))))
+                                     "glibc-hurd-mach-print.patch"
+                                     "glibc-hurd-gettyent.patch"))))
    (build-system gnu-build-system)
 
    ;; Glibc's <limits.h> refers to <linux/limit.h>, for instance, so glibc
@@ -816,8 +798,7 @@ the store.")
                            (bash (or (assoc-ref inputs "static-bash")
                                      (assoc-ref native-inputs "static-bash"))))
                       ;; Install the rpc data base file under `$out/etc/rpc'.
-                      ;; FIXME: Use installFlags = [ "sysconfdir=$(out)/etc" ];
-                      (substitute* "sunrpc/Makefile"
+                      (substitute* "inet/Makefile"
                         (("^\\$\\(inst_sysconfdir\\)/rpc(.*)$" _ suffix)
                          (string-append out "/etc/rpc" suffix "\n"))
                         (("^install-others =.*$")
@@ -830,6 +811,11 @@ the store.")
                         ;; 4.7.1.
                         ((" -lgcc_s") ""))
 
+                      ;; Tell the ld.so cache code where the store is.
+                      (substitute* "elf/dl-cache.c"
+                        (("@STORE_DIRECTORY@")
+                         (string-append "\"" (%store-directory) "\"")))
+
                       ;; Have `system' use that Bash.
                       (substitute* "sysdeps/posix/system.c"
                         (("#define[[:blank:]]+SHELL_PATH.*$")
@@ -848,15 +834,6 @@ the store.")
                          (string-append "#define _PATH_BSHELL \""
                                         bash "/bin/sh\"\n")))
 
-                      ;; Nscd uses __DATE__ and __TIME__ to create a string to
-                      ;; make sure the client and server come from the same
-                      ;; libc.  Use something deterministic instead.
-                      (substitute* "nscd/nscd_stat.c"
-                        (("static const char compilation\\[21\\] =.*$")
-                         (string-append
-                          "static const char compilation[21] = \""
-                          (string-take (basename out) 20) "\";\n")))
-
                       ;; Make sure we don't retain a reference to the
                       ;; bootstrap Perl.
                       (substitute* "malloc/mtrace.pl"
@@ -865,9 +842,7 @@ the store.")
                          ;; "bilingual" eval/exec magic at the top of the file.
                          "")
                         (("exec @PERL@")
-                         "exec perl"))
-
-                      #t)))
+                         "exec perl")))))
 
                  (add-after 'install 'move-static-libs
                    (lambda* (#:key outputs #:allow-other-keys)
@@ -905,17 +880,8 @@ the store.")
                                      ((out) static)))
                                  (filter linker-script?
                                          (map (cut string-append slib "/" <>)
-                                              files)))
-                       #t)))
-
-                 ,@(if (target-powerpc?)
-                     '((add-after 'unpack 'apply-patch
-                         (lambda* (#:key inputs #:allow-other-keys)
-                           (let ((patch (assoc-ref inputs
-                                                   "powerpc64le-patch")))
-                             (invoke "patch" "--force" "-p1"
-                                     "-i" patch)))))
-                     '())
+                                              files))))))
+
                  ,@(if (hurd-target?)
                        '((add-after 'install 'augment-libc.so
                            (lambda* (#:key outputs #:allow-other-keys)
@@ -923,8 +889,7 @@ the store.")
                                (substitute* (string-append out "/lib/libc.so")
                                  (("/[^ ]+/lib/libc.so.0.3")
                                   (string-append out "/lib/libc.so.0.3"
-                                                 " libmachuser.so libhurduser.so"))))
-                             #t)))
+                                                 " libmachuser.so libhurduser.so")))))))
                        '()))))
 
    (inputs `(("static-bash" ,static-bash)))
@@ -937,10 +902,6 @@ the store.")
                     ("gettext" ,gettext-minimal)
                     ("python" ,python-minimal)
 
-                    ,@(if (target-powerpc?)
-                        `(("powerpc64le-patch" ,@(search-patches
-                                                   "glibc-ldd-powerpc.patch")))
-                        '())
                     ,@(if (hurd-target?)
                           `(("mig" ,mig)
                             ("perl" ,perl))
@@ -969,17 +930,62 @@ with the Linux kernel.")
 ;; Below are old libc versions, which we use mostly to build locale data in
 ;; the old format (which the new libc cannot cope with.)
 
-(define-public glibc-2.30
+(define-public glibc-2.31
   (package
     (inherit glibc)
+    (version "2.31")
+    (source (origin
+              (inherit (package-source glibc))
+              (uri (string-append "mirror://gnu/glibc/glibc-" version ".tar.xz"))
+              (sha256
+               (base32
+                "05zxkyz9bv3j9h0xyid1rhvh3klhsmrpkf3bcs6frvlgyr2gwilj"))
+              (patches (search-patches
+                        "glibc-skip-c++.patch"
+                        "glibc-ldd-powerpc.patch"
+                        "glibc-ldd-x86_64.patch"
+                        "glibc-dl-cache.patch"
+                        "glibc-hidden-visibility-ldconfig.patch"
+                        "glibc-versioned-locpath.patch"
+                        "glibc-allow-kernel-2.6.32.patch"
+                        "glibc-reinstate-prlimit64-fallback.patch"
+                        "glibc-supported-locales.patch"
+                        "glibc-hurd-clock_t_centiseconds.patch"
+                        "glibc-2.31-hurd-clock_gettime_monotonic.patch"
+                        "glibc-hurd-signal-sa-siginfo.patch"
+                        "glibc-hurd-mach-print.patch"
+                        "glibc-hurd-gettyent.patch"))))
+    (arguments
+     (substitute-keyword-arguments (package-arguments glibc)
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (add-before 'configure 'set-etc-rpc-installation-directory
+             (lambda* (#:key outputs #:allow-other-keys)
+               ;; Install the rpc data base file under `$out/etc/rpc'.
+               (let ((out (assoc-ref outputs "out")))
+                 (substitute* "sunrpc/Makefile"
+                   (("^\\$\\(inst_sysconfdir\\)/rpc(.*)$" _ suffix)
+                    (string-append out "/etc/rpc" suffix "\n"))
+                   (("^install-others =.*$")
+                    (string-append "install-others = " out "/etc/rpc\n"))))))))))))
+
+(define-public glibc-2.30
+  (package
+    (inherit glibc-2.31)
     (version "2.30")
+    (native-inputs
+     ;; This fails with a build error in libc-tls.c when using GCC 10.  Use an
+     ;; older compiler.
+     (modify-inputs (package-native-inputs glibc)
+       (prepend gcc-8)))
     (source (origin
               (inherit (package-source glibc))
               (uri (string-append "mirror://gnu/glibc/glibc-" version ".tar.xz"))
               (sha256
                (base32
                 "1bxqpg91d02qnaz837a5kamm0f43pr1il4r9pknygywsar713i72"))
-              (patches (search-patches "glibc-ldd-x86_64.patch"
+              (patches (search-patches "glibc-skip-c++.patch"
+                                       "glibc-ldd-x86_64.patch"
                                        "glibc-CVE-2019-19126.patch"
                                        "glibc-hidden-visibility-ldconfig.patch"
                                        "glibc-versioned-locpath.patch"
@@ -989,7 +995,7 @@ with the Linux kernel.")
 
 (define-public glibc-2.29
   (package
-    (inherit glibc)
+    (inherit glibc-2.30)
     (version "2.29")
     (source (origin
               (inherit (package-source glibc))
@@ -997,7 +1003,8 @@ with the Linux kernel.")
               (sha256
                (base32
                 "0jzh58728flfh939a8k9pi1zdyalfzlxmwra7k0rzji5gvavivpk"))
-              (patches (search-patches "glibc-ldd-x86_64.patch"
+              (patches (search-patches "glibc-skip-c++.patch"
+                                       "glibc-ldd-x86_64.patch"
                                        "glibc-CVE-2019-7309.patch"
                                        "glibc-CVE-2019-9169.patch"
                                        "glibc-2.29-git-updates.patch"
@@ -1007,46 +1014,6 @@ with the Linux kernel.")
                                        "glibc-reinstate-prlimit64-fallback.patch"
                                        "glibc-2.29-supported-locales.patch"))))))
 
-(define-public glibc-2.28
-  (package
-    (inherit glibc)
-    (version "2.28")
-    (source (origin
-              (inherit (package-source glibc))
-              (uri (string-append "mirror://gnu/glibc/glibc-" version ".tar.xz"))
-              (sha256
-               (base32
-                "10iha5ynvdj5m62vgpgqbq4cwvc2yhyl2w9yyyjgfxmdmx8h145i"))
-              (patches (search-patches "glibc-ldd-x86_64.patch"
-                                       "glibc-2.28-git-fixes.patch"
-                                       "glibc-hidden-visibility-ldconfig.patch"
-                                       "glibc-versioned-locpath.patch"
-                                       "glibc-allow-kernel-2.6.32.patch"
-                                       "glibc-reinstate-prlimit64-fallback.patch"
-                                       "glibc-hurd-magic-pid.patch"
-                                       "glibc-2.28-supported-locales.patch"))))))
-
-(define-public glibc-2.27
-  (package
-    (inherit glibc)
-    (version "2.27")
-    (source (origin
-              (inherit (package-source glibc))
-              (uri (string-append "mirror://gnu/glibc/glibc-" version ".tar.xz"))
-              (sha256
-               (base32
-                "0wpwq7gsm7sd6ysidv0z575ckqdg13cr2njyfgrbgh4f65adwwji"))
-              (patches (search-patches "glibc-ldd-x86_64.patch"
-                                       "glibc-2.27-git-fixes.patch"
-                                       "glibc-hidden-visibility-ldconfig.patch"
-                                       "glibc-versioned-locpath.patch"
-                                       "glibc-allow-kernel-2.6.32.patch"
-                                       "glibc-reinstate-prlimit64-fallback.patch"
-                                       "glibc-2.27-supported-locales.patch"
-                                       "glibc-CVE-2018-11236.patch"
-                                       "glibc-CVE-2018-11237.patch"))))
-    (properties `((lint-hidden-cve . ("CVE-2017-18269")))))) ; glibc-2.27-git-fixes
-
 (define-public (make-gcc-libc base-gcc libc)
   "Return a GCC that targets LIBC."
   (package (inherit base-gcc)
@@ -1126,8 +1093,7 @@ to the @code{share/locale} sub-directory of this package.")
                                             (string-append (dirname directory)
                                                            "/" name "."
                                                            normalized)))))
-                             locales)
-                   #t)))
+                             locales))))
              (delete 'install)
              (delete 'move-static-libs)))
          ((#:configure-flags flags)
@@ -1137,7 +1103,8 @@ to the @code{share/locale} sub-directory of this package.")
                                         (assoc-ref %outputs "out")
                                         "/lib/locale/"
                                         ,(version-major+minor
-                                          (package-version glibc)))))))))))
+                                          (package-version glibc)))))))))
+    (properties `((upstream-name . "glibc")))))
 
 (define %default-utf8-locales
   ;; These are the locales commonly used for tests---e.g., in Guile's i18n
@@ -1184,8 +1151,7 @@ to the @code{share/locale} sub-directory of this package.")
                                                          locale ".UTF-8")))
                                ',locales)
                      #t))))
-    (native-inputs `(("glibc" ,glibc)
-                     ("gzip" ,gzip)))
+    (native-inputs (list glibc gzip))
     (synopsis (if default-locales?
                   (P_ "Small sample of UTF-8 locales")
                   (P_ "Customized sample of UTF-8 locales")))
@@ -1238,17 +1204,15 @@ command.")
   (package (inherit glibc)
     (name "glibc-hurd-headers")
     (outputs '("out"))
-    (propagated-inputs `(("gnumach-headers" ,gnumach-headers)
-                         ("hurd-headers" ,hurd-headers)))
+    (propagated-inputs (list gnumach-headers hurd-headers))
     (native-inputs
-     `(("mig" ,(if (%current-target-system)
-                   ;; XXX: When targeting i586-pc-gnu, we need a 32-bit MiG,
-                   ;; hence this hack.
-                   (package
-                     (inherit mig)
-                     (arguments `(#:system "i686-linux")))
-                   mig))
-       ,@(package-native-inputs glibc)))
+     (modify-inputs (package-native-inputs glibc)
+       (prepend (if (%current-target-system)
+                    ;; XXX: When targeting i586-pc-gnu, we need a 32-bit MiG,
+                    ;; hence this hack.
+                    (package (inherit mig)
+                             (arguments `(#:system "i686-linux")))
+                    mig))))
     (arguments
      (substitute-keyword-arguments (package-arguments glibc)
        ;; We just pass the flags really needed to build the headers.
@@ -1267,8 +1231,7 @@ command.")
                (let ((out (assoc-ref outputs "out")))
                  (close-port
                   (open-output-file
-                   (string-append out "/include/gnu/stubs.h"))))
-               #t))
+                   (string-append out "/include/gnu/stubs.h"))))))
            (delete 'build)))))))                  ; nothing to build
 
 (define-public tzdata
@@ -1276,7 +1239,7 @@ command.")
     (name "tzdata")
     ;; This package should be kept in sync with python-pytz in (gnu packages
     ;; time).
-    (version "2021a")
+    (version "2021e")
     (source (origin
              (method url-fetch)
              (uri (string-append
@@ -1284,67 +1247,75 @@ command.")
                    version ".tar.gz"))
              (sha256
               (base32
-               "022fn6gkmp7pamlgab04x0dm5hnyn2m2fcnyr3pvm36612xd5rrr"))))
+               "1cdjdcxl0s9xf0dg1z64kh7llm80byxqlzrkkjzcdlyh6yvl5v07"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:tests? #f
-       #:make-flags (let ((out (assoc-ref %outputs "out"))
-                          (tmp (getenv "TMPDIR")))
-                      (list (string-append "TOPDIR=" out)
-                            (string-append "TZDIR=" out "/share/zoneinfo")
-                            (string-append "TZDEFAULT=" out
-                                           "/share/zoneinfo/localtime")
-
-                            ;; Likewise for the C library routines.
-                            (string-append "LIBDIR=" tmp "/lib")
-                            (string-append "MANDIR=" tmp "/man")
-
-                            ;; XXX: tzdata 2020b changed the on-disk format
-                            ;; of the time zone files from 'fat' to 'slim'.
-                            ;; Many packages (particularly evolution-data-server)
-                            ;; can not yet handle the latter, so we stick with
-                            ;; 'fat' for now.
-                            ,@(if (version>=? (package-version this-package)
-                                              "2020b")
-                                  '("CPPFLAGS=-DZIC_BLOAT_DEFAULT='\"fat\"'")
-                                  '())
-
-                            "AWK=awk"
-                            "CC=gcc"))
-       #:modules ((guix build utils)
-                  (guix build gnu-build-system)
-                  (srfi srfi-1))
-       #:phases
-       (modify-phases %standard-phases
-         (replace 'unpack
-           (lambda* (#:key source inputs #:allow-other-keys)
-             (invoke "tar" "xvf" source)
-             (invoke "tar" "xvf" (assoc-ref inputs "tzcode"))))
-         (add-after 'install 'post-install
-           (lambda* (#:key outputs #:allow-other-keys)
-             ;; Move data in the right place.
-             (let ((out (assoc-ref outputs "out")))
-               ;; Discard zic, dump, and tzselect, already
-               ;; provided by glibc.
-               (delete-file-recursively (string-append out "/usr"))
-               (symlink (string-append out "/share/zoneinfo")
-                        (string-append out "/share/zoneinfo/posix"))
-               (delete-file-recursively
-                (string-append out "/share/zoneinfo-posix"))
-               (copy-recursively (string-append out "/share/zoneinfo-leaps")
-                                 (string-append out "/share/zoneinfo/right"))
-               (delete-file-recursively
-                (string-append out "/share/zoneinfo-leaps"))
-               #t)))
-         (delete 'configure))))
-    (inputs `(("tzcode" ,(origin
-                          (method url-fetch)
-                          (uri (string-append
-                                "https://data.iana.org/time-zones/releases/tzcode"
-                                version ".tar.gz"))
-                          (sha256
-                           (base32
-                            "1l02b0jiwp3fl0xd6227i69d26rmx3yrnq0ssq9vvdmm4jhvyipb"))))))
+     (list #:tests? #f
+
+           ;; This consists purely of (architecture-independent) data, so
+           ;; ‘cross-compilation’ is pointless here!  (The binaries zic,
+           ;; dump, and tzselect are deleted in the post-install phase.)
+           #:target #f
+
+           #:make-flags
+           #~(let ((out #$output)
+                   (tmp (getenv "TMPDIR")))
+               (list (string-append "TOPDIR=" out)
+                     (string-append "TZDIR=" out "/share/zoneinfo")
+                     (string-append "TZDEFAULT=" out
+                                    "/share/zoneinfo/localtime")
+
+                     ;; Likewise for the C library routines.
+                     (string-append "LIBDIR=" tmp "/lib")
+                     (string-append "MANDIR=" tmp "/man")
+
+                     ;; XXX: tzdata 2020b changed the on-disk format
+                     ;; of the time zone files from 'fat' to 'slim'.
+                     ;; Many packages (particularly evolution-data-server)
+                     ;; can not yet handle the latter, so we stick with
+                     ;; 'fat' for now.
+                     #$@(if (version>=? (package-version this-package)
+                                        "2020b")
+                            '("CPPFLAGS=-DZIC_BLOAT_DEFAULT='\"fat\"'")
+                            '())
+
+                     "AWK=awk"
+                     "CC=gcc"))
+           #:modules '((guix build utils)
+                       (guix build gnu-build-system)
+                       (srfi srfi-1))
+           #:phases
+           #~(modify-phases %standard-phases
+               (replace 'unpack
+                 (lambda* (#:key source inputs #:allow-other-keys)
+                   (invoke "tar" "xvf" source)
+                   (invoke "tar" "xvf"
+                           #$(match (package-inputs this-package)
+                               (((_ tzcode)) tzcode)))))
+               (add-after 'install 'post-install
+                 (lambda* (#:key outputs #:allow-other-keys)
+                   ;; Move data in the right place.
+                   (let ((out (assoc-ref outputs "out")))
+                     ;; Discard zic, dump, and tzselect, already
+                     ;; provided by glibc.
+                     (delete-file-recursively (string-append out "/usr"))
+                     (symlink (string-append out "/share/zoneinfo")
+                              (string-append out "/share/zoneinfo/posix"))
+                     (delete-file-recursively
+                      (string-append out "/share/zoneinfo-posix"))
+                     (copy-recursively (string-append out "/share/zoneinfo-leaps")
+                                       (string-append out "/share/zoneinfo/right"))
+                     (delete-file-recursively
+                      (string-append out "/share/zoneinfo-leaps")))))
+               (delete 'configure))))
+    (inputs (list (origin
+                    (method url-fetch)
+                    (uri (string-append
+                          "https://data.iana.org/time-zones/releases/tzcode"
+                          version ".tar.gz"))
+                    (sha256
+                     (base32
+                      "0x8pcfmjvxk29yfh8bklchv2f0vpl4yih0gc4wyx292l78wncijq")))))
     (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)
@@ -1359,28 +1330,10 @@ and daylight-saving rules.")
 ;;; thousands of packages (for example, in a core-updates rebuild). This package
 ;;; will typically be obsolete and should never be referred to by a built
 ;;; package.
-(define-public tzdata-for-tests
-  (hidden-package
-   (package
-     (inherit tzdata)
-     (version "2019c")
-     (source (origin
-               (method url-fetch)
-               (uri (string-append
-                     "https://data.iana.org/time-zones/releases/tzdata"
-                     version ".tar.gz"))
-               (sha256
-                (base32
-                 "0z7w1yv37cfk8yhix2cillam091vgp1j4g8fv84261q9mdnq1ivr"))))
-     (inputs
-      `(("tzcode" ,(origin
-                     (method url-fetch)
-                     (uri (string-append
-                           "https://data.iana.org/time-zones/releases/tzcode"
-                           version ".tar.gz"))
-                     (sha256
-                      (base32
-                       "1m3y2rnf1nggxxhxplab5zdd5whvar3ijyrv7lifvm82irkd7szn")))))))))
+;;;
+;;; Please make this a hidden-package if it is different from the primary tzdata
+;;; package.
+(define-public tzdata-for-tests tzdata)
 
 (define-public libiconv
   (package
@@ -1397,11 +1350,9 @@ and daylight-saving rules.")
               (snippet
                ;; Work around "declared gets" error on glibc systems (fixed by
                ;; Gnulib commit 66712c23388e93e5c518ebc8515140fa0c807348.)
-               '(begin
-                  (substitute* "srclib/stdio.in.h"
-                    (("^#undef gets") "")
-                    (("^_GL_WARN_ON_USE \\(gets.*") ""))
-                  #t))))
+               '(substitute* "srclib/stdio.in.h"
+                  (("^#undef gets") "")
+                  (("^_GL_WARN_ON_USE \\(gets.*") "")))))
     (build-system gnu-build-system)
     (synopsis "Character set conversion library")
     (description
diff --git a/gnu/packages/bash.scm b/gnu/packages/bash.scm
index ed2931fd97..72758560cd 100644
--- a/gnu/packages/bash.scm
+++ b/gnu/packages/bash.scm
@@ -6,6 +6,7 @@
 ;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2020 Zhu Zihao <all_but_last@163.com>
+;;; Copyright © 2021 Marius Bakke <marius@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -57,7 +58,7 @@
 
 (define (patch-url seqno)
   "Return the URL of Bash patch number SEQNO."
-  (format #f "mirror://gnu/bash/bash-5.0-patches/bash50-~3,'0d" seqno))
+  (format #f "mirror://gnu/bash/bash-5.1-patches/bash51-~3,'0d" seqno))
 
 (define (bash-patch seqno sha256-bv)
   "Return the origin of Bash patch SEQNO, with expected hash SHA256-BV."
@@ -70,26 +71,18 @@
   (list (bash-patch seqno (base32 hash))
         ...))
 
-(define %patch-series-5.0
+(define %patch-series-5.1
   ;; This is the current patches series for 5.0, generated using
   ;; 'download-patches' below.
   (patch-series
-    (1 "12bjfdy6bg8nhyw27bdgxn7h4paylx8d927skfmi9pxd1wgrxzpj")
-    (2 "01w7yrzmz10mw06ys0546vhl7isv2v402ziyvfd7k67588spvs47")
-    (3 "0ny81ridp5n0j69hb8ixrc7dmxybby54jbsz5hikly8kgg1wvssf")
-    (4 "021gqqvgydixkrmqss64b6srfdlkvnx88lyfzpxfrn5d6bc7li0l")
-    (5 "0xl2kyzm84nlyklrqzkn73ixabhzfhn9x91lzcmis89cppclvxav")
-    (6 "0844749ixk1z60437nkznzms1f0nzh9an62kj7sny6r0zyk2k1fn")
-    (7 "16xg37gp1b8zlj5969w8mcrparwqlcbj9695vn3qhgb7wdz1xd0p")
-    (8 "1qyp19krjh8zxvb0jgwmyjz40djslwcf4xi7kc1ab0iaca44bipf")
-    (9 "00yrjjqd95s81b21qq3ba1y7h879q8jaajlkjggc6grhcwbs4g7d")
-    (10 "04ca5bjv456v538mkspzvn4xb2zdphh31r4fpvfm9p5my0jw7yyn")
-    (11 "1sklyixvsv8993kxzs0jigacpdchjrq7jv5xpdx7kbqyp4rf6k9c")
-    (12 "0cz21qg2gbr40lfgza7g02bqi2qknwqgxnq459pjj640d0cywhr9")
-    (13 "16h9nwz3yzwj7fnxvlidjymdc4yr30h818433gh9j1x3in6igmzm")
-    (14 "12gm5bvv2pd3m72z2ilj26pa08c61az253dsgfl24vpf2ijywvjx")
-    (15 "0pm0px758w4i23s55wajcv6lqfiym7zgxvq0pxf6vclkv8nxy5x5")
-    (16 "0vdha332km2iwx8g2ld15jy7d24cbplzgr1531dpzylr9ajxglgz")))
+   (1 "1ymm8ppss6gyh9ifznjwiabrb4k91npd09c10y7mk66xp8yppc7b")
+   (2 "1gjx9zqcm407am3n2sh44b8dxm48kgm15rzfiijqxr01m0hn3shm")
+   (3 "1cdnpbfc64yhvkjj4d12s9ywp11g195vzfl1cab24sq55wkcrwi2")
+   (4 "11iwhy6v562bv0kk7lwj7f5jj65ma9bblivy0v02h3ggcibbdbls")
+   (5 "19bdyigdr81824nxvqr6a7k0cax60wq7376j6b91afbnwvlvbjyc")
+   (6 "051x8wlwrqk0yr0zg378vh824iklfl5g9pkmcdf62qp8gn9pvqbm")
+   (7 "0fir80pp1gmlpadmqcgkrv4y119pc7xllchjzg05fd7px73viz5c")
+   (8 "1lfjgshk8i9vch92p5wgc9r90j3phw79aa7gbai89w183b2z6b7j")))
 
 (define (download-patches store count)
   "Download COUNT Bash patches into store.  Return a list of
@@ -125,7 +118,7 @@ number/base32-hash tuples, directly usable in the 'patch-series' form."
                " -Wl,-rpath -Wl,"
                (assoc-ref %build-inputs "ncurses")
                "/lib")))
-         (version "5.0"))
+         (version "5.1"))
     (package
      (name "bash")
      (source (origin
@@ -134,18 +127,17 @@ number/base32-hash tuples, directly usable in the 'patch-series' form."
                     "mirror://gnu/bash/bash-" version ".tar.gz"))
               (sha256
                (base32
-                "0kgvfwqdcd90waczf4gx39xnrxzijhjrzyzv7s8v4w31qqm0za5l"))
+                "1alv68wplnfdm6mh39hm57060xgssb9vqca4yr1cyva0c342n0fc"))
               (patch-flags '("-p0"))
               (patches (cons (search-patch "bash-linux-pgrp-pipe.patch")
-                             %patch-series-5.0))))
-     (version (string-append version "." (number->string (length %patch-series-5.0))))
+                             %patch-series-5.1))))
+     (version (string-append version "." (number->string (length %patch-series-5.1))))
      (build-system gnu-build-system)
 
      (outputs '("out"
                 "doc"                         ;1.7 MiB of HTML and extra files
                 "include"))                   ;headers used by extensions
-     (inputs `(("readline" ,readline)
-               ("ncurses" ,ncurses)))             ;TODO: add texinfo
+     (inputs (list readline ncurses))             ;TODO: add texinfo
      (arguments
       `(;; When cross-compiling, `configure' incorrectly guesses that job
         ;; control is missing.
@@ -277,6 +269,23 @@ without modification.")
                    (delete-file-recursively (string-append out "/share"))
                    #t))))))))))
 
+(define-public bash-with-syslog
+  (package
+    (inherit bash)
+    (name "bash-with-syslog")
+    (arguments
+     (substitute-keyword-arguments (package-arguments bash)
+       ((#:phases phases '%standard-phases)
+        `(modify-phases ,phases
+           (add-after 'unpack 'enable-syslogging
+             (lambda _
+               (substitute* "config-top.h"
+                 (("/\\* #define SYSLOG_HISTORY \\*/")
+                  "#define SYSLOG_HISTORY"))))))))
+    (description
+     "Bash is the shell, or command-line interpreter, of the GNU system.  This
+variant logs the history to syslog.")))
+
 (define-public bash-completion
   (package
     (name "bash-completion")
@@ -292,7 +301,7 @@ without modification.")
               (patches
                (search-patches "bash-completion-directories.patch"))))
     (build-system gnu-build-system)
-    (native-inputs `(("util-linux" ,util-linux)))
+    (native-inputs (list util-linux))
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (add-after
@@ -385,10 +394,8 @@ capturing.")
                (base32
                 "0f59zh4d4pa1a7ybs5zl6h0csbqqv11lbnq0jl1dgwm1s6p49bsq"))))
     (inputs
-     `(("bash" ,bash)
-       ("coreutils" ,coreutils)
-       ("guile" ,guile-3.0) ;for wrap-script
-       ("grep" ,grep)))
+     (list bash coreutils guile-3.0 ;for wrap-script
+           grep))
     (arguments
      `(#:modules ((guix build utils))
        #:builder
@@ -409,6 +416,7 @@ capturing.")
          ;; Install phase
          (invoke "./install.sh" %output)
          (wrap-script (string-append %output "/bin/bats")
+                      #:guile (search-input-file %build-inputs "bin/guile")
                       (list "PATH" 'prefix (string-split (getenv "PATH")
                                                          #\:))))))
     (build-system trivial-build-system)
@@ -434,14 +442,14 @@ in Bash, but you can use it to test any UNIX program.")
         (base32 "0s1sifqzqmr0dnciv06yqrpzgj11d7n0gy5zaxh6b3x8bx7k75l8"))))
     (build-system gnu-build-system)
     (inputs
-     `(("elfutils" ,elfutils)
-       ("libelf" ,libelf)
-       ("libffi" ,libffi)
-       ("zlib" ,zlib)
-       ;; Require a bash with C plugin support to build.
-       ("bash" ,bash)))
+     (list elfutils
+           libelf
+           libffi
+           zlib
+           ;; Require a bash with C plugin support to build.
+           bash))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/taviso/ctypes.sh")
     (synopsis "Foreign function interface for Bash")
     (description "Bash-ctypes is a Bash plugin that provides a foreign
diff --git a/gnu/packages/batik.scm b/gnu/packages/batik.scm
index 9cff05d949..2072dd467c 100644
--- a/gnu/packages/batik.scm
+++ b/gnu/packages/batik.scm
@@ -84,7 +84,7 @@ public interface TimeEvent extends Event {
 ")))
              #t)))))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://www.w3.org/Style/CSS/SAC/")
     (synopsis "W3C SAC interface for CSS parsers in Java")
     (description "This package provides a SAC interface by the W3C.
@@ -136,9 +136,9 @@ public interface EventListenerInitializer {
 ")))
              #t)))))
     (propagated-inputs
-     `(("java-w3c-smil" ,java-w3c-smil-3.0)))
+     (list java-w3c-smil-3.0))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://www.w3.org/Style/CSS/SAC/")
     (synopsis "W3C SVG 1.0 interface")
     (description "This package provides a SVG 1.0 interface.")
@@ -189,7 +189,7 @@ public interface EventListenerInitializer {
            (lambda* (#:key source #:allow-other-keys)
              (invoke "unzip" source))))))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://www.w3.org/Style/CSS/SAC/")
     (synopsis "W3C SAC interface for CSS parsers in Java")
     (description "This package provides a SAC interface by the W3C.
@@ -248,8 +248,7 @@ SAC is an interface for CSS parsers.")
        ("java-mockito" ,java-mockito-1)
        ("java-objenesis" ,java-objenesis)))
     (propagated-inputs
-     `(("java-commons-io" ,java-commons-io)
-       ("java-commons-logging-minimal" ,java-commons-logging-minimal)))
+     (list java-commons-io java-commons-logging-minimal))
     (home-page "https://xmlgraphics.apache.org/commons/")
     (synopsis "XMLGraphics constants")
     (description "This package provides XMLGraphics constants (originally
diff --git a/gnu/packages/bdw-gc.scm b/gnu/packages/bdw-gc.scm
index ecac5b9368..2698d56da0 100644
--- a/gnu/packages/bdw-gc.scm
+++ b/gnu/packages/bdw-gc.scm
@@ -46,17 +46,21 @@
       (list
        ;; Install gc_cpp.h et al.
        "--enable-cplusplus"
-       ;; In GNU/Hurd systems during the 'Check' phase,
+
+       ;; Work around <https://github.com/ivmai/bdwgc/issues/353>.
+       "--disable-munmap"
+
+       ;; In GNU/Hurd systems during the 'check' phase,
        ;; there is a deadlock caused by the 'gctest' test.
        ;; To disable the error set "--disable-gcj-support"
        ;; to configure script. See bug report and discussion:
        ;; <https://lists.opendylan.org/pipermail/bdwgc/2017-April/006275.html>
        ;; <https://lists.gnu.org/archive/html/bug-hurd/2017-01/msg00008.html>
-       ,@(if (hurd-triplet? (or (%current-system)
-                                (%current-target-system)))
+       ,@(if (target-hurd? (or (%current-system)
+                               (%current-target-system)))
              '("--disable-gcj-support")
              '()))))
-   (native-inputs `(("pkg-config" ,pkg-config)))
+   (native-inputs (list pkg-config))
    (propagated-inputs
     (if (%current-target-system)
         ;; The build system refuses to check for compiler intrinsics when
@@ -85,17 +89,6 @@ C or C++ programs, though that is not its primary goal.")
 
    (license (x11-style (string-append home-page "license.txt")))))
 
-(define-public libgc/disable-munmap
-  ;; TODO: Use '--disable-munmap' by default on next rebuild cycle.
-  (package/inherit libgc
-    (arguments
-     ;; Work around <https://github.com/ivmai/bdwgc/issues/353>.
-     (substitute-keyword-arguments (package-arguments libgc)
-       ((#:configure-flags flags ''())
-        `(cons "--disable-munmap" ,flags))))
-    (properties `((hidden? . #t)
-                  ,@(package-properties libgc)))))
-
 ;; TODO: Add a static output in libgc in the next rebuild cycle.
 (define-public libgc/static-libs
   (package/inherit
@@ -116,7 +109,7 @@ C or C++ programs, though that is not its primary goal.")
              (sha256
               (base32
                "10jhhi79d5brwlsyhwgpnrmc8nhlf7aan2lk9xhgihk5jc6srbvc"))))
-   (propagated-inputs `(("libatomic-ops" ,libatomic-ops)))))
+   (propagated-inputs (list libatomic-ops))))
 
 (define-public libgc/back-pointers
   (package/inherit
diff --git a/gnu/packages/benchmark.scm b/gnu/packages/benchmark.scm
index 93be96eb85..537f6262c4 100644
--- a/gnu/packages/benchmark.scm
+++ b/gnu/packages/benchmark.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2016, 2017 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2016, 2017, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2017 Dave Love <fx@gnu.org>
 ;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
@@ -47,75 +47,54 @@
   #:use-module (gnu packages python-science)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
-  #:use-module (gnu packages storage)
   #:use-module (ice-9 match))
 
 (define-public fio
   (package
     (name "fio")
-    (version "3.27")
+    (version "3.29")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://brick.kernel.dk/snaps/"
                                   "fio-" version ".tar.bz2"))
               (sha256
                (base32
-                "0akaixip86ycbxr13bjff2121rgfbz35fa9l39677wpwzckp4f4d"))))
+                "11k7ksksnb8lcbz0qdc9g7zlzaa0515j7kx4mlhk75sfs43v9zxc"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:test-target "test"
+     `(#:modules (,@%gnu-build-system-modules
+                  (ice-9 textual-ports))
+       #:test-target "test"
+       #:configure-flags '("--disable-native") ;don't generate code for the build CPU
        #:phases
        (modify-phases %standard-phases
-         (add-after
-          'unpack 'patch-paths
-          (lambda* (#:key inputs outputs #:allow-other-keys)
-            (let ((out (assoc-ref outputs "out"))
-                  (gnuplot (string-append (assoc-ref inputs "gnuplot")
-                                          "/bin/gnuplot")))
-              (substitute* "tools/plot/fio2gnuplot"
-                (("/usr/share/fio") (string-append out "/share/fio"))
-                ;; FIXME (upstream): The 'gnuplot' executable is used inline
-                ;; in various os.system() calls mixed with *.gnuplot filenames.
-                (("; do gnuplot") (string-append "; do " gnuplot))
-                (("gnuplot mymath") (string-append gnuplot " mymath"))
-                (("gnuplot mygraph") (string-append gnuplot " mygraph")))
-              #t)))
          (replace 'configure
-           (lambda* (#:key outputs #:allow-other-keys)
+           (lambda* (#:key (configure-flags ''()) outputs #:allow-other-keys)
              ;; The configure script doesn't understand some of the
-             ;; GNU options, so we can't use #:configure-flags.
+             ;; GNU options, so we can't use the stock phase.
              (let ((out (assoc-ref outputs "out")))
-               (invoke "./configure"
-                       (string-append "--prefix=" out))
-               #t)))
+               (apply invoke "./configure"
+                      (string-append "--prefix=" out)
+                      configure-flags))))
          ;; The main `fio` executable is fairly small and self contained.
-         ;; Moving the auxiliary python and gnuplot scripts to a separate
-         ;; output saves almost 400 MiB on the closure.
+         ;; Moving the auxiliary scripts to a separate output saves ~100 MiB
+         ;; on the closure.
          (add-after 'install 'move-outputs
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((oldbin (string-append (assoc-ref outputs "out") "/bin"))
-                   (newbin (string-append (assoc-ref outputs "utils") "/bin")))
+                   (newbin (string-append (assoc-ref outputs "utils") "/bin"))
+                   (script? (lambda* (file #:rest _)
+                              (call-with-input-file file
+                                (lambda (port)
+                                  (char=? #\# (peek-char port)))))))
                (mkdir-p newbin)
                (for-each (lambda (file)
-                           (let ((src (string-append oldbin "/" file))
-                                 (dst (string-append newbin "/" file)))
-                             (link src dst)
-                             (delete-file src)))
-                         '("fio2gnuplot"  "fiologparser_hist.py"
-                           "fiologparser.py"))
-               ;; Make sure numpy et.al is found.
-               (wrap-program (string-append newbin "/fiologparser_hist.py")
-                 `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH"))))
-               #t))))))
+                           (link file (string-append newbin "/" (basename file)))
+                           (delete-file file))
+                         (find-files oldbin script?))))))))
     (outputs '("out" "utils"))
     (inputs
-     `(("ceph" ,ceph "lib")
-       ("libaio" ,libaio)
-       ("gnuplot" ,gnuplot)
-       ("zlib" ,zlib)
-       ("python-numpy" ,python2-numpy)
-       ("python-pandas" ,python2-pandas)
-       ("python" ,python-2)))
+     (list libaio python zlib))
     (home-page "https://github.com/axboe/fio")
     (synopsis "Flexible I/O tester")
     (description
@@ -151,7 +130,7 @@ is to write a job file matching the I/O load one wants to simulate.")
                   #t))))
     (build-system gnu-build-system)
     (inputs
-     `(("openmpi" ,openmpi)))
+     (list openmpi))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -191,9 +170,6 @@ Efficiency of the MPI implementation.
 @end itemize")
     (license license:cpl1.0)))
 
-(define-public imb-openmpi
-  (deprecated-package "imb-openmpi" intel-mpi-benchmarks/openmpi))
-
 (define-public multitime
   (package
     (name "multitime")
@@ -263,7 +239,7 @@ tests.")
                 "010bmlmi0nrlp3aq7p624sfaj5a65lswnyyxk3cnz1bqig0cn2vf"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (arguments '(#:tests? #f)) ; there are no tests
     (home-page "https://doc.coker.com.au/projects/bonnie/")
     (synopsis "Hard drive and file system benchmark suite")
@@ -278,62 +254,57 @@ file metadata operations that can be performed per second.")
 (define-public python-locust
   (package
     (name "python-locust")
-    (version "1.4.3")
+    (version "2.5.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "locust" version))
        (sha256
         (base32
-         "0vmw151xcaznd2j85n96iyv9fniss0bkk91xn4maw2gwzym424xk"))))
+         "1516z6z5pikybg7pma2cgxgj3wxaaky7z6d30mxf81wd4krbq16s"))))
     (build-system python-build-system)
     (arguments
-     `(#:phases
+     '(#:phases
        (modify-phases %standard-phases
-         (add-before 'check 'extend-PATH
-           ;; Add the 'locust' script to PATH, which is used in the test
-           ;; suite.
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out")))
-               (setenv "PATH" (string-append out "/bin:"
-                                             (getenv "PATH"))))))
          (replace 'check
-           (lambda _
-             (invoke "python" "-m" "pytest"
-                     "-k" (string-join
-                           (list
-                            ;; These tests return "non-zero exit status 1".
-                            "not test_default_headless_spawn_options"
-                            "not test_default_headless_spawn_options_with_shape"
-                            "not test_headless_spawn_options_wo_run_time"
-                            ;; These tests depend on networking.
-                            "not test_html_report_option"
-                            "not test_web_options"
-                            ;; This test fails because of the warning "System open
-                            ;; file limit '1024' is below minimum setting '10000'".
-                            "not test_skip_logging"
-                            ;; On some (slow?) machines, the following tests
-                            ;; fail, with the processes returning exit code
-                            ;; -15 instead of the expected 42 and 0,
-                            ;; respectively (see:
-                            ;; https://github.com/locustio/locust/issues/1708).
-                            "not test_custom_exit_code"
-                            "not test_webserver") " and ")))))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "python" "-m" "pytest" "locust"
+                       "-k" (string-join
+                             '(;; These tests return "non-zero exit status 1".
+                               "not test_default_headless_spawn_options"
+                               "not test_default_headless_spawn_options_with_shape"
+                               "not test_headless_spawn_options_wo_run_time"
+                               ;; These tests depend on networking.
+                               "not test_html_report_option"
+                               "not test_web_options"
+                               ;; This test fails because of the warning "System open
+                               ;; file limit '1024' is below minimum setting '10000'".
+                               "not test_skip_logging"
+                               ;; On some (slow?) machines, the following tests
+                               ;; fail, with the processes returning exit code
+                               ;; -15 instead of the expected 42 and 0,
+                               ;; respectively (see:
+                               ;; https://github.com/locustio/locust/issues/1708).
+                               "not test_custom_exit_code"
+                               "not test_webserver") " and "))))))))
     (propagated-inputs
-     `(("python-configargparse" ,python-configargparse)
-       ("python-flask" ,python-flask)
-       ("python-flask-basicauth" ,python-flask-basicauth)
-       ("python-gevent" ,python-gevent)
-       ("python-geventhttpclient" ,python-geventhttpclient)
-       ("python-msgpack" ,python-msgpack)
-       ("python-psutil" ,python-psutil)
-       ("python-pyzmq" ,python-pyzmq)
-       ("python-requests" ,python-requests)
-       ("python-werkzeug" ,python-werkzeug)))
+     (list python-configargparse
+           python-flask
+           python-flask-basicauth
+           python-flask-cors
+           python-gevent
+           python-geventhttpclient
+           python-msgpack
+           python-psutil
+           python-pyzmq
+           python-requests
+           python-roundrobin
+           python-typing-extensions
+           python-werkzeug))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pyquery" ,python-pyquery)
-       ("python-pytest" ,python-pytest))) ;for more easily skipping tests
+     (list python-mock python-pyquery python-pytest
+           python-retry python-setuptools-scm))
     (home-page "https://locust.io/")
     (synopsis "Distributed load testing framework")
     (description "Locust is a performance testing tool that aims to be easy to
@@ -405,8 +376,7 @@ and options.  With careful benchmarking, different hardware can be compared.")
       (build-system cmake-build-system)
       (home-page "https://github.com/krrishnarraj/clpeak")
       (inputs
-        `(("opencl-clhpp" ,opencl-clhpp)
-          ("opencl-icd-loader" ,opencl-icd-loader)))
+        (list opencl-clhpp opencl-icd-loader))
       (synopsis "OpenCL benchmark tool")
       (description
         "A synthetic benchmarking tool to measure peak capabilities of OpenCL
diff --git a/gnu/packages/bioconductor.scm b/gnu/packages/bioconductor.scm
index 4cbffac000..534204a16a 100644
--- a/gnu/packages/bioconductor.scm
+++ b/gnu/packages/bioconductor.scm
@@ -1,16 +1,17 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016, 2017, 2018, 2020, 2021 Roel Janssen <roel@gnu.org>
 ;;; Copyright © 2016 Pjotr Prins <pjotr.guix@thebird.nl>
 ;;; Copyright © 2016 Ben Woodcroft <donttrustben@gmail.com>
 ;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017, 2018, 2019, 2020, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2019, 2020, 2021 Simon Tournier <zimon.toutoune@gmail.com>
+;;; Copyright © 2019, 2020, 2021, 2022 Simon Tournier <zimon.toutoune@gmail.com>
 ;;; Copyright © 2020 Peter Lo <peterloleungyau@gmail.com>
 ;;; Copyright © 2020, 2021 Mădălin Ionel Patrașcu <madalinionel.patrascu@mdc-berlin.de>
 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
 ;;; Copyright © 2021 Hong Li <hli@mdc-berlin.de>
 ;;; Copyright © 2021 Tim Howes <timhowes@lavabit.com>
+;;; Copyright © 2021 Nicolas Vallet <nls.vallet@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -72,7 +73,7 @@
      `((upstream-name . "org.EcK12.eg.db")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)))
+     (list r-annotationdbi))
     (home-page "https://bioconductor.org/packages/org.EcK12.eg.db")
     (synopsis "Genome wide annotation for E coli strain K12")
     (description
@@ -102,7 +103,7 @@ analysis.")
     (properties `((upstream-name . "org.Bt.eg.db")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)))
+     (list r-annotationdbi))
     (home-page "https://bioconductor.org/packages/org.Bt.eg.db")
     (synopsis "Genome wide annotation for Bovine")
     (description
@@ -124,7 +125,7 @@ based on mapping using Entrez Gene identifiers.")
     (properties `((upstream-name . "reactome.db")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)))
+     (list r-annotationdbi))
     (home-page "https://bioconductor.org/packages/reactome.db/")
     (synopsis "Annotation maps for reactome")
     (description
@@ -147,7 +148,7 @@ database, assembled using data from REACTOME.")
      `((upstream-name . "BSgenome.Btaurus.UCSC.bosTau8")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bsgenome" ,r-bsgenome)))
+     (list r-bsgenome))
     (home-page
      "https://www.bioconductor.org/packages/BSgenome.Btaurus.UCSC.bosTau8/")
     (synopsis "Full genome sequences for Bos taurus (UCSC version bosTau8)")
@@ -170,7 +171,7 @@ taurus (UCSC version bosTau8).")
      `((upstream-name . "BSgenome.Celegans.UCSC.ce6")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bsgenome" ,r-bsgenome)))
+     (list r-bsgenome))
     (home-page
      "https://www.bioconductor.org/packages/BSgenome.Celegans.UCSC.ce6/")
     (synopsis "Full genome sequences for Worm")
@@ -195,7 +196,7 @@ objects.")
      `((upstream-name . "BSgenome.Celegans.UCSC.ce10")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bsgenome" ,r-bsgenome)))
+     (list r-bsgenome))
     (home-page
      "https://www.bioconductor.org/packages/BSgenome.Celegans.UCSC.ce10/")
     (synopsis "Full genome sequences for Worm")
@@ -220,7 +221,7 @@ objects.")
      `((upstream-name . "BSgenome.Dmelanogaster.UCSC.dm6")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bsgenome" ,r-bsgenome)))
+     (list r-bsgenome))
     (home-page
      "https://www.bioconductor.org/packages/BSgenome.Dmelanogaster.UCSC.dm6/")
     (synopsis "Full genome sequences for Fly")
@@ -245,7 +246,7 @@ objects.")
      `((upstream-name . "BSgenome.Dmelanogaster.UCSC.dm3")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bsgenome" ,r-bsgenome)))
+     (list r-bsgenome))
     (home-page
      "https://www.bioconductor.org/packages/BSgenome.Dmelanogaster.UCSC.dm3/")
     (synopsis "Full genome sequences for Fly")
@@ -270,9 +271,7 @@ Biostrings objects.")
      `((upstream-name . "BSgenome.Dmelanogaster.UCSC.dm3.masked")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bsgenome" ,r-bsgenome)
-       ("r-bsgenome-dmelanogaster-ucsc-dm3"
-        ,r-bsgenome-dmelanogaster-ucsc-dm3)))
+     (list r-bsgenome r-bsgenome-dmelanogaster-ucsc-dm3))
     (home-page "https://www.bioconductor.org/packages/BSgenome.Dmelanogaster.UCSC.dm3.masked/")
     (synopsis "Full masked genome sequences for Fly")
     (description
@@ -286,6 +285,28 @@ RepeatMasker (RM mask), and (4) the mask of repeats from Tandem Repeats
 Finder (TRF mask).  Only the AGAPS and AMB masks are \"active\" by default.")
     (license license:artistic2.0)))
 
+(define-public r-bsgenome-drerio-ucsc-danrer11
+  (package
+    (name "r-bsgenome-drerio-ucsc-danrer11")
+    (version "1.4.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (bioconductor-uri "BSgenome.Drerio.UCSC.danRer11"
+                              version 'annotation))
+       (sha256
+        (base32 "08a928mqzv2jxngjcs4yr6ni1b9z9al6jdngwi438j8hm41cwk4v"))))
+    (properties `((upstream-name . "BSgenome.Drerio.UCSC.danRer11")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-bsgenome))
+    (home-page "https://bioconductor.org/packages/BSgenome.Drerio.UCSC.danRer11")
+    (synopsis "Full genome sequences for Danio rerio (UCSC version danRer11)")
+    (description
+     "This package provides full genome sequences for Danio rerio (Zebrafish)
+as provided by UCSC (danRer11, May 2017) and stored in Biostrings objects.")
+    (license license:artistic2.0)))
+
 (define-public r-bsgenome-hsapiens-1000genomes-hs37d5
   (package
     (name "r-bsgenome-hsapiens-1000genomes-hs37d5")
@@ -301,7 +322,7 @@ Finder (TRF mask).  Only the AGAPS and AMB masks are \"active\" by default.")
      `((upstream-name . "BSgenome.Hsapiens.1000genomes.hs37d5")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bsgenome" ,r-bsgenome)))
+     (list r-bsgenome))
     (home-page
      "https://www.bioconductor.org/packages/BSgenome.Hsapiens.1000genomes.hs37d5/")
     (synopsis "Full genome sequences for Homo sapiens")
@@ -324,7 +345,7 @@ Finder (TRF mask).  Only the AGAPS and AMB masks are \"active\" by default.")
          "0y75qdq578fh6420vbvsbwmdw8jvr3g06qli2h3vj3pxmjykh9c1"))))
     (properties `((upstream-name . "BSgenome.Hsapiens.NCBI.GRCh38")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-bsgenome" ,r-bsgenome)))
+    (propagated-inputs (list r-bsgenome))
     (home-page
      "https://bioconductor.org/packages/release/data/annotation/html/\
 BSgenome.Hsapiens.NCBI.GRCh38.html")
@@ -349,9 +370,7 @@ provided by NCBI (GRCh38, 2013-12-17) and stored in Biostrings objects.")
      `((upstream-name . "BSgenome.Hsapiens.UCSC.hg19.masked")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bsgenome" ,r-bsgenome)
-       ("r-bsgenome-hsapiens-ucsc-hg19"
-        ,r-bsgenome-hsapiens-ucsc-hg19)))
+     (list r-bsgenome r-bsgenome-hsapiens-ucsc-hg19))
     (home-page "https://bioconductor.org/packages/BSgenome.Hsapiens.UCSC.hg19.masked/")
     (synopsis "Full masked genome sequences for Homo sapiens")
     (description
@@ -380,7 +399,7 @@ default.")
      `((upstream-name . "BSgenome.Mmusculus.UCSC.mm9")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bsgenome" ,r-bsgenome)))
+     (list r-bsgenome))
     (home-page
      "https://www.bioconductor.org/packages/BSgenome.Mmusculus.UCSC.mm9/")
     (synopsis "Full genome sequences for Mouse")
@@ -404,9 +423,7 @@ provided by UCSC (mm9, July 2007) and stored in Biostrings objects.")
      `((upstream-name . "BSgenome.Mmusculus.UCSC.mm9.masked")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bsgenome" ,r-bsgenome)
-       ("r-bsgenome-mmusculus-ucsc-mm9"
-        ,r-bsgenome-mmusculus-ucsc-mm9)))
+     (list r-bsgenome r-bsgenome-mmusculus-ucsc-mm9))
     (home-page "https://bioconductor.org/packages/BSgenome.Mmusculus.UCSC.mm9.masked/")
     (synopsis "Full masked genome sequences for Mouse")
     (description
@@ -435,7 +452,7 @@ default."  )
      `((upstream-name . "BSgenome.Mmusculus.UCSC.mm10")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bsgenome" ,r-bsgenome)))
+     (list r-bsgenome))
     (home-page
      "https://www.bioconductor.org/packages/BSgenome.Mmusculus.UCSC.mm10/")
     (synopsis "Full genome sequences for Mouse")
@@ -478,7 +495,7 @@ ID and species.  It is used by functions in the GenomeInfoDb package.")
      `((upstream-name . "GO.db")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)))
+     (list r-annotationdbi))
     (home-page "https://bioconductor.org/packages/GO.db")
     (synopsis "Annotation maps describing the entire Gene Ontology")
     (description
@@ -500,12 +517,12 @@ information about the latest version of the Gene Ontologies.")
      `((upstream-name . "Homo.sapiens")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-go-db" ,r-go-db)
-       ("r-org-hs-eg-db" ,r-org-hs-eg-db)
-       ("r-txdb-hsapiens-ucsc-hg19-knowngene" ,r-txdb-hsapiens-ucsc-hg19-knowngene)
-       ("r-organismdbi" ,r-organismdbi)
-       ("r-annotationdbi" ,r-annotationdbi)))
+     (list r-genomicfeatures
+           r-go-db
+           r-org-hs-eg-db
+           r-txdb-hsapiens-ucsc-hg19-knowngene
+           r-organismdbi
+           r-annotationdbi))
     (home-page "https://bioconductor.org/packages/Homo.sapiens/")
     (synopsis "Annotation package for the Homo.sapiens object")
     (description
@@ -527,13 +544,12 @@ several related annotation packages.")
     (properties `((upstream-name . "Mus.musculus")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-go-db" ,r-go-db)
-       ("r-org-mm-eg-db" ,r-org-mm-eg-db)
-       ("r-organismdbi" ,r-organismdbi)
-       ("r-txdb-mmusculus-ucsc-mm10-knowngene"
-        ,r-txdb-mmusculus-ucsc-mm10-knowngene)))
+     (list r-annotationdbi
+           r-genomicfeatures
+           r-go-db
+           r-org-mm-eg-db
+           r-organismdbi
+           r-txdb-mmusculus-ucsc-mm10-knowngene))
     (home-page "https://bioconductor.org/packages/Mus.musculus")
     (synopsis "Annotation package for the Mus.musculus object")
     (description
@@ -555,7 +571,7 @@ from several related annotation packages.")
      `((upstream-name . "org.Ce.eg.db")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)))
+     (list r-annotationdbi))
     (home-page "https://www.bioconductor.org/packages/org.Ce.eg.db/")
     (synopsis "Genome wide annotation for Worm")
     (description
@@ -577,7 +593,7 @@ annotations for the genome of the model worm Caenorhabditis elegans.")
      `((upstream-name . "org.Dm.eg.db")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)))
+     (list r-annotationdbi))
     (home-page "https://www.bioconductor.org/packages/org.Dm.eg.db/")
     (synopsis "Genome wide annotation for Fly")
     (description
@@ -599,7 +615,7 @@ annotations for the genome of the model fruit fly Drosophila melanogaster.")
      `((upstream-name . "org.Dr.eg.db")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)))
+     (list r-annotationdbi))
     (home-page "https://www.bioconductor.org/packages/org.Dr.eg.db/")
     (synopsis "Annotation for Zebrafish")
     (description
@@ -610,18 +626,18 @@ based on mapping using Entrez Gene identifiers.")
 (define-public r-org-hs-eg-db
   (package
     (name "r-org-hs-eg-db")
-    (version "3.7.0")
+    (version "3.14.0")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "org.Hs.eg.db" version 'annotation))
               (sha256
                (base32
-                "1qxz9l80yg3qdqszs6dsscp7lrpfi1bgd0pxh9j7q34vprzwhdim"))))
+                "0mnddv42ll0sc0zxf7hkgilslykbvfn7xgxg1g8qi57q2dmpwb6j"))))
     (properties
      `((upstream-name . "org.Hs.eg.db")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)))
+     (list r-annotationdbi))
     (home-page "https://www.bioconductor.org/packages/org.Hs.eg.db/")
     (synopsis "Genome wide annotation for Human")
     (description
@@ -643,7 +659,7 @@ on mapping using Entrez Gene identifiers.")
      `((upstream-name . "org.Mm.eg.db")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)))
+     (list r-annotationdbi))
     (home-page "https://www.bioconductor.org/packages/org.Mm.eg.db/")
     (synopsis "Genome wide annotation for Mouse")
     (description
@@ -666,7 +682,7 @@ annotations for the genome of the model mouse Mus musculus.")
      `((upstream-name . "BSgenome.Hsapiens.UCSC.hg19")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bsgenome" ,r-bsgenome)))
+     (list r-bsgenome))
     (home-page
      "https://www.bioconductor.org/packages/BSgenome.Hsapiens.UCSC.hg19/")
     (synopsis "Full genome sequences for Homo sapiens")
@@ -690,7 +706,7 @@ by UCSC (hg19, February 2009) and stored in Biostrings objects.")
      `((upstream-name . "BSgenome.Hsapiens.UCSC.hg38")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bsgenome" ,r-bsgenome)))
+     (list r-bsgenome))
     (home-page
      "https://www.bioconductor.org/packages/BSgenome.Hsapiens.UCSC.hg38/")
     (synopsis "Full genome sequences for Homo sapiens")
@@ -714,7 +730,7 @@ as provided by UCSC (hg38, Dec. 2013) and stored in Biostrings objects.")
      `((upstream-name . "EnsDb.Hsapiens.v75")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ensembldb" ,r-ensembldb)))
+     (list r-ensembldb))
     (home-page "https://bioconductor.org/packages/EnsDb.Hsapiens.v75")
     (synopsis "Ensembl based annotation package")
     (description
@@ -737,8 +753,7 @@ as provided by UCSC (hg38, Dec. 2013) and stored in Biostrings objects.")
      `((upstream-name . "TxDb.Dmelanogaster.UCSC.dm6.ensGene")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-genomicfeatures" ,r-genomicfeatures)))
+     (list r-annotationdbi r-genomicfeatures))
     (home-page
      "https://bioconductor.org/packages/TxDb.Dmelanogaster.UCSC.dm6.ensGene")
     (synopsis "Annotation package for TxDb object(s)")
@@ -762,7 +777,7 @@ exposing these as TxDb objects.")
      `((upstream-name . "TxDb.Hsapiens.UCSC.hg19.knownGene")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-genomicfeatures" ,r-genomicfeatures)))
+     (list r-genomicfeatures))
     (home-page
      "https://bioconductor.org/packages/TxDb.Hsapiens.UCSC.hg19.knownGene/")
     (synopsis "Annotation package for human genome in TxDb format")
@@ -787,7 +802,7 @@ track.  The database is exposed as a @code{TxDb} object.")
      `((upstream-name . "TxDb.Hsapiens.UCSC.hg38.knownGene")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-genomicfeatures" ,r-genomicfeatures)))
+     (list r-genomicfeatures))
     (home-page
      "https://bioconductor.org/packages/TxDb.Hsapiens.UCSC.hg38.knownGene/")
     (synopsis "Annotation package for human genome in TxDb format")
@@ -812,8 +827,7 @@ track.  The database is exposed as a @code{TxDb} object.")
      `((upstream-name . "TxDb.Mmusculus.UCSC.mm9.knownGene")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-annotationdbi" ,r-annotationdbi)))
+     (list r-genomicfeatures r-annotationdbi))
     (home-page
      "https://bioconductor.org/packages/TxDb.Mmusculus.UCSC.mm9.knownGene/")
     (synopsis "Annotation package for mouse genome in TxDb format")
@@ -838,9 +852,7 @@ database is exposed as a @code{TxDb} object.")
      `((upstream-name . "TxDb.Mmusculus.UCSC.mm10.knownGene")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bsgenome" ,r-bsgenome)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-annotationdbi" ,r-annotationdbi)))
+     (list r-bsgenome r-genomicfeatures r-annotationdbi))
     (home-page
      "https://bioconductor.org/packages/TxDb.Mmusculus.UCSC.mm10.knownGene/")
     (synopsis "Annotation package for TxDb knownGene object(s) for Mouse")
@@ -867,8 +879,7 @@ based on the knownGene track.")
      `((upstream-name . "TxDb.Celegans.UCSC.ce6.ensGene")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-genomicfeatures" ,r-genomicfeatures)))
+     (list r-annotationdbi r-genomicfeatures))
     (home-page "https://bioconductor.org/packages/TxDb.Celegans.UCSC.ce6.ensGene/")
     (synopsis "Annotation package for C elegans TxDb objects")
     (description
@@ -891,11 +902,8 @@ by exposing these as TxDb objects.")
      `((upstream-name . "FDb.InfiniumMethylation.hg19")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biostrings" ,r-biostrings)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-annotationdbi" ,r-annotationdbi)
-       ("r-org-hs-eg-db" ,r-org-hs-eg-db)
-       ("r-txdb-hsapiens-ucsc-hg19-knowngene" ,r-txdb-hsapiens-ucsc-hg19-knowngene)))
+     (list r-biostrings r-genomicfeatures r-annotationdbi r-org-hs-eg-db
+           r-txdb-hsapiens-ucsc-hg19-knowngene))
     (home-page "https://bioconductor.org/packages/FDb.InfiniumMethylation.hg19/")
     (synopsis "Compiled HumanMethylation27 and HumanMethylation450 annotations")
     (description
@@ -919,7 +927,7 @@ annotations.")
      `((upstream-name . "IlluminaHumanMethylationEPICmanifest")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-minfi" ,r-minfi)))
+     (list r-minfi))
     (home-page "https://bioconductor.org/packages/IlluminaHumanMethylationEPICmanifest/")
     (synopsis "Manifest for Illumina's EPIC methylation arrays")
     (description
@@ -940,7 +948,7 @@ annotations.")
      `((upstream-name . "DO.db")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)))
+     (list r-annotationdbi))
     (home-page "https://www.bioconductor.org/packages/DO.db/")
     (synopsis "Annotation maps describing the entire Disease Ontology")
     (description
@@ -948,6 +956,26 @@ annotations.")
 Disease Ontology.")
     (license license:artistic2.0)))
 
+(define-public r-hgu133plus2-db
+  (package
+    (name "r-hgu133plus2-db")
+    (version "3.13.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (bioconductor-uri "hgu133plus2.db" version 'annotation))
+       (sha256
+        (base32 "0i6cfk7ahql4fcgrq0dai9gkjbsahyzd9iv4lqv1ad58fzkmipnx"))))
+    (properties `((upstream-name . "hgu133plus2.db")))
+    (build-system r-build-system)
+    (propagated-inputs (list r-annotationdbi r-org-hs-eg-db))
+    (home-page "https://bioconductor.org/packages/hgu133plus2.db")
+    (synopsis "Affymetrix Affymetrix HG-U133_Plus_2 Array annotation data")
+    (description
+     "This package provides Affymetrix HG-U133_Plus_2 array annotation
+data (chip hgu133plus2) assembled using data from public repositories.")
+    (license license:artistic2.0)))
+
 (define-public r-pfam-db
   (package
     (name "r-pfam-db")
@@ -962,7 +990,7 @@ Disease Ontology.")
     (properties `((upstream-name . "PFAM.db")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)))
+     (list r-annotationdbi))
     (home-page "https://bioconductor.org/packages/PFAM.db")
     (synopsis "Set of protein ID mappings for PFAM")
     (description
@@ -986,12 +1014,12 @@ using data from public repositories.")
      `((upstream-name . "phastCons100way.UCSC.hg19")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bsgenome" ,r-bsgenome)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-genomicscores" ,r-genomicscores)
-       ("r-iranges" ,r-iranges)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-bsgenome
+           r-genomeinfodb
+           r-genomicranges
+           r-genomicscores
+           r-iranges
+           r-s4vectors))
     (home-page "https://bioconductor.org/packages/phastCons100way.UCSC.hg19")
     (synopsis "UCSC phastCons conservation scores for hg19")
     (description
@@ -1017,7 +1045,7 @@ species.")
      `((upstream-name . "ABAData")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)))
+     (list r-annotationdbi))
     (home-page "https://www.bioconductor.org/packages/ABAData/")
     (synopsis "Gene expression in human brain regions from Allen Brain Atlas")
     (description
@@ -1055,38 +1083,38 @@ All datasets are restricted to protein coding genes.")
 (define-public r-aneufinder
   (package
     (name "r-aneufinder")
-    (version "1.20.0")
+    (version "1.22.0")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "AneuFinder" version))
               (sha256
                (base32
-                "0m6wphlriq7y21ih1p2kzml5jzcic79jc52kkk59dkjj8j88yllk"))))
-    (build-system r-build-system)
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
-    (propagated-inputs
-     `(("r-genomicranges" ,r-genomicranges)
-       ("r-aneufinderdata" ,r-aneufinderdata)
-       ("r-ecp" ,r-ecp)
-       ("r-foreach" ,r-foreach)
-       ("r-doparallel" ,r-doparallel)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-iranges" ,r-iranges)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-bamsignals" ,r-bamsignals)
-       ("r-dnacopy" ,r-dnacopy)
-       ("r-biostrings" ,r-biostrings)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-reshape2" ,r-reshape2)
-       ("r-ggdendro" ,r-ggdendro)
-       ("r-ggrepel" ,r-ggrepel)
-       ("r-reordercluster" ,r-reordercluster)
-       ("r-mclust" ,r-mclust)
-       ("r-cowplot" ,r-cowplot)))
+                "0xn8952fkchhx7m8dam6gjy86j551xp1cs67510s1qrmfgzpkjp0"))))
+    (build-system r-build-system)
+    (native-inputs
+     (list r-knitr))
+    (propagated-inputs
+     (list r-genomicranges
+           r-aneufinderdata
+           r-ecp
+           r-foreach
+           r-doparallel
+           r-biocgenerics
+           r-s4vectors
+           r-genomeinfodb
+           r-iranges
+           r-rsamtools
+           r-bamsignals
+           r-dnacopy
+           r-biostrings
+           r-genomicalignments
+           r-ggplot2
+           r-reshape2
+           r-ggdendro
+           r-ggrepel
+           r-reordercluster
+           r-mclust
+           r-cowplot))
     (home-page "https://bioconductor.org/packages/AneuFinder/")
     (synopsis "Copy number variation analysis in single-cell-sequencing data")
     (description "This package implements functions for copy number variant
@@ -1129,10 +1157,8 @@ from Illumina 450k methylation arrays.")
      `((upstream-name . "biscuiteerData")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationhub" ,r-annotationhub)
-       ("r-curl" ,r-curl)
-       ("r-experimenthub" ,r-experimenthub)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-annotationhub r-curl r-experimenthub))
+    (native-inputs (list r-knitr))
     (home-page "https://bioconductor.org/packages/biscuiteerData")
     (synopsis "Data package for Biscuiteer")
     (description
@@ -1140,6 +1166,35 @@ from Illumina 450k methylation arrays.")
 biscuiteer.")
     (license license:gpl3)))
 
+(define-public r-celldex
+  (package
+    (name "r-celldex")
+    (version "1.4.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (bioconductor-uri "celldex" version 'experiment))
+       (sha256
+        (base32 "04w60fx3s3wlirmr65nsz6d7ig48j9fzimdr8kbdqv1g80ivdcq1"))))
+    (properties `((upstream-name . "celldex")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-annotationdbi
+           r-annotationhub
+           r-delayedarray
+           r-delayedmatrixstats
+           r-experimenthub
+           r-s4vectors
+           r-summarizedexperiment))
+    (native-inputs (list r-knitr))
+    (home-page "https://github.com/LTLA/celldex")
+    (synopsis "Reference index for cell types")
+    (description
+     "This package provides a collection of reference expression datasets with
+curated cell type labels, for use in procedures like automated annotation of
+single-cell data or deconvolution of bulk RNA-seq.")
+    (license license:gpl3)))
+
 (define-public r-chromstardata
   (package
     (name "r-chromstardata")
@@ -1160,6 +1215,34 @@ biscuiteer.")
 chromstaR package.")
     (license license:gpl3)))
 
+(define-public r-chromvarmotifs
+  (let ((commit "38bed559c1f4770b6c91c80bf3f8ea965da26076")
+        (revision "1"))
+    (package
+      (name "r-chromvarmotifs")
+      (version (git-version "0.2.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/GreenleafLab/chromVARmotifs")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0i9v1m1hrg1lkd2pnkj5nnrpks6vhhhpbdhsfl2lmjak4npxxr5q"))))
+      (properties `((upstream-name . "chromVARmotifs")))
+      (build-system r-build-system)
+      (propagated-inputs
+       `(("r-tfbstools" ,r-tfbstools)))
+      (home-page "https://github.com/GreenleafLab/chromVARmotifs")
+      (synopsis "Stores motif collections for use with motifmatchr or chromVAR")
+      (description
+       "This package stores motif collections as lists of @dfn{position
+frequency matrix} (PWMatrixList) objects provided by the @code{TFBSTools}
+package for use in R with packages like @code{motifmatchr} or
+@code{chromVAR}.")
+      (license license:expat))))
+
 (define-public r-copyhelper
   (package
     (name "r-copyhelper")
@@ -1199,8 +1282,7 @@ GenomicRanges Bioconductor package.")
      `((upstream-name . "geneLenDataBase")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rtracklayer" ,r-rtracklayer)
-       ("r-genomicfeatures" ,r-genomicfeatures)))
+     (list r-rtracklayer r-genomicfeatures))
     (home-page "https://bioconductor.org/packages/geneLenDataBase/")
     (synopsis "Lengths of mRNA transcripts for a number of genomes")
     (description
@@ -1225,7 +1307,7 @@ genomes and gene ID formats, largely based on the UCSC table browser.")
     ;; make sense to build substitutes.
     (arguments `(#:substitutable? #f))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioinformatics.mdc-berlin.de/genomation/")
     (synopsis "Experimental data for use with the genomation package")
     (description
@@ -1240,18 +1322,13 @@ downloaded from Encode.")
     (version "1.14.0")
     (source (origin
               (method url-fetch)
-              (uri (string-append
-                    "http://bioconductor.org/packages/release/data/experiment"
-                    "/src/contrib/pasilla_" version ".tar.gz"))
+              (uri (bioconductor-uri "pasilla" version 'experiment))
               (sha256
                (base32
                 "0h124i2fb2lbj2k48zzf1n7ldqa471bs26fbd9vw50299aqx28x0"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocstyle" ,r-biocstyle)
-       ("r-dexseq" ,r-dexseq)
-       ("r-knitr" ,r-knitr)
-       ("r-rmarkdown" ,r-rmarkdown)))
+     (list r-biocstyle r-dexseq r-knitr r-rmarkdown))
     (home-page "https://www.bioconductor.org/packages/pasilla/")
     (synopsis "Data package with per-exon and per-gene read counts")
     (description "This package provides per-exon and per-gene read counts
@@ -1302,7 +1379,7 @@ resulting in a complete gene expression profile for each cell.")
     (properties `((upstream-name . "ALL")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)))
+     (list r-biobase))
     (home-page "https://bioconductor.org/packages/ALL")
     (synopsis "Acute Lymphoblastic Leukemia data from the Ritz laboratory")
     (description
@@ -1327,7 +1404,7 @@ the form of an @code{exprSet} object.")
     (properties `((upstream-name . "affydata")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-affy" ,r-affy)))
+     (list r-affy))
     (home-page "https://bioconductor.org/packages/affydata/")
     (synopsis "Affymetrix data for demonstration purposes")
     (description
@@ -1377,12 +1454,12 @@ yeast are also included.")
      `((upstream-name . "curatedTCGAData")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationhub" ,r-annotationhub)
-       ("r-experimenthub" ,r-experimenthub)
-       ("r-hdf5array" ,r-hdf5array)
-       ("r-multiassayexperiment" ,r-multiassayexperiment)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
+     (list r-annotationhub
+           r-experimenthub
+           r-hdf5array
+           r-multiassayexperiment
+           r-s4vectors
+           r-summarizedexperiment))
     (home-page "https://bioconductor.org/packages/curatedTCGAData/")
     (synopsis "Curated data from The Cancer Genome Atlas")
     (description
@@ -1395,20 +1472,39 @@ harmonized subsetting of rows (features) and columns (patients / samples)
 across the entire multi-'omics experiment.")
     (license license:artistic2.0)))
 
+(define-public r-tcgabiolinksgui-data
+  (package
+    (name "r-tcgabiolinksgui-data")
+    (version "1.14.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (bioconductor-uri "TCGAbiolinksGUI.data" version 'experiment))
+       (sha256
+        (base32 "08zmlvycq3jz1zy0715x9f21nf3465c51k7w2jq12sfbap36pmjm"))))
+    (properties `((upstream-name . "TCGAbiolinksGUI.data")))
+    (build-system r-build-system)
+    (native-inputs (list r-knitr))
+    (home-page "https://github.com/BioinformaticsFMRP/TCGAbiolinksGUI.data")
+    (synopsis "Data for the TCGAbiolinksGUI package")
+    (description "This package provides supporting data for the
+TCGAbiolinksGUI package.")
+    (license license:gpl3)))
+
 
 ;;; Packages
 
 (define-public r-biocversion
   (package
     (name "r-biocversion")
-    (version "3.13.1")
+    (version "3.14.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "BiocVersion" version))
        (sha256
         (base32
-         "0rsw8g4g1pcjw1zbx8x17yd3drhxqk4sx3cy3ddzy5731hl6mbfi"))))
+         "0qwzkh2alw7xhjprh719la0lg1q38pmjbipy3s2fy79m4xy8y8ik"))))
     (properties `((upstream-name . "BiocVersion")))
     (build-system r-build-system)
     (home-page "https://bioconductor.org/packages/BiocVersion/")
@@ -1421,13 +1517,13 @@ of Bioconductor.")
 (define-public r-biocgenerics
   (package
     (name "r-biocgenerics")
-    (version "0.38.0")
+    (version "0.40.0")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "BiocGenerics" version))
               (sha256
                (base32
-                "1kv7lzmyki3hi771v01nml1v1hzz8pyhqqv0xcdzqy354mlgx4m6"))))
+                "0nr5x4r8f2krnfrxm7wrzgzr7nbljypi985cbwx5hxhn95zmfifh"))))
     (properties
      `((upstream-name . "BiocGenerics")))
     (build-system r-build-system)
@@ -1441,21 +1537,21 @@ packages.")
 (define-public r-coverageview
   (package
     (name "r-coverageview")
-    (version "1.30.0")
+    (version "1.32.0")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "CoverageView" version))
               (sha256
                (base32
-                "1xhirbjdw09cqm4xvysxqicvqjbahavwvs7shg4cb05gwyd2ha8g"))))
+                "0sb1h5qsk41c9xisq73agqh502wv6p2j1k45s32a4bkdynf696as"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-s4vectors" ,r-s4vectors)
-       ("r-iranges" ,r-iranges)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-rsamtools" ,r-rsamtools)))
+     (list r-s4vectors
+           r-iranges
+           r-genomicranges
+           r-genomicalignments
+           r-rtracklayer
+           r-rsamtools))
     (home-page "https://bioconductor.org/packages/CoverageView/")
     (synopsis "Coverage visualization package for R")
     (description "This package provides a framework for the visualization of
@@ -1468,25 +1564,25 @@ how the coverage distributed across the genome.")
 (define-public r-cummerbund
   (package
    (name "r-cummerbund")
-   (version "2.34.0")
+   (version "2.36.0")
    (source (origin
              (method url-fetch)
              (uri (bioconductor-uri "cummeRbund" version))
              (sha256
               (base32
-               "1avvmvrmldbscc7xd6a6k22xjykbzafvqf87wh5z9rx3qlzswsjx"))))
+               "0130hrlz2jabbshis1g11ndda8b8vlirzi7a004li3cgdghscxql"))))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-biobase" ,r-biobase)
-      ("r-biocgenerics" ,r-biocgenerics)
-      ("r-fastcluster" ,r-fastcluster)
-      ("r-ggplot2" ,r-ggplot2)
-      ("r-gviz" ,r-gviz)
-      ("r-plyr" ,r-plyr)
-      ("r-reshape2" ,r-reshape2)
-      ("r-rsqlite" ,r-rsqlite)
-      ("r-rtracklayer" ,r-rtracklayer)
-      ("r-s4vectors" ,r-s4vectors)))
+    (list r-biobase
+          r-biocgenerics
+          r-fastcluster
+          r-ggplot2
+          r-gviz
+          r-plyr
+          r-reshape2
+          r-rsqlite
+          r-rtracklayer
+          r-s4vectors))
    (home-page "https://bioconductor.org/packages/cummeRbund/")
    (synopsis "Analyze Cufflinks high-throughput sequencing data")
    (description "This package allows for persistent storage, access,
@@ -1495,24 +1591,54 @@ data.  In addition, provides numerous plotting functions for commonly
 used visualizations.")
    (license license:artistic2.0)))
 
+(define-public r-dearseq
+  (package
+    (name "r-dearseq")
+    (version "1.6.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (bioconductor-uri "dearseq" version))
+       (sha256
+        (base32
+         "07vr27rv3z86ajd62c0ilvfgz9z35qsiwwi5pv4sygbhnnjwh3rc"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-ggplot2
+           r-kernsmooth
+           r-matrixstats
+           r-patchwork
+           r-pbapply
+           r-statmod
+           r-survey
+           r-kernsmooth))
+    (home-page "https://github.com/borishejblum/dearseq")
+    (synopsis "DEA for RNA-seq data through a robust variance component test")
+    (description
+     "This is a package for Differential Expression Analysis of RNA-seq data.
+It features a variance component score test accounting for data
+heteroscedasticity through precision weights.  Perform both gene-wise and gene
+set analyses, and can deal with repeated or longitudinal data.")
+    (license license:gpl2)))
+
 (define-public r-decipher
   (package
     (name "r-decipher")
-    (version "2.20.0")
+    (version "2.22.0")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "DECIPHER" version))
               (sha256
                (base32
-                "0mr7glkx2d37l9nszs52m0kycpm14vxl5gdp3z7i5j7yig1sw2nk"))))
+                "0a9k3f70jmd17kxf1zjmdzrfjs0dmwfad2zgz6wihxh5s1shc8qm"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biostrings" ,r-biostrings)
-       ("r-dbi" ,r-dbi)
-       ("r-iranges" ,r-iranges)
-       ("r-rsqlite" ,r-rsqlite)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-xvector" ,r-xvector)))
+     (list r-biostrings
+           r-dbi
+           r-iranges
+           r-rsqlite
+           r-s4vectors
+           r-xvector))
     (home-page "https://www.bioconductor.org/packages/DECIPHER/")
     (synopsis "Tools for deciphering and managing biological sequences")
     (description "This package provides a toolset for deciphering and managing
@@ -1522,25 +1648,25 @@ biological sequences.")
 (define-public r-deepsnv
   (package
     (name "r-deepsnv")
-    (version "1.38.0")
+    (version "1.40.0")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "deepSNV" version))
               (sha256
                (base32
-                "0zz56hf417m7bgg2g2wpbaik30pi6h2nam1n5bviqgdn4mv8n0bs"))))
+                "1wi6j6yb6i9fs9yszfywqz3w50mhl85dkfmr4w3phwvkf0xkn81w"))))
     (properties `((upstream-name . "deepSNV")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biostrings" ,r-biostrings)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-rhtslib" ,r-rhtslib)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-variantannotation" ,r-variantannotation)
-       ("r-vgam" ,r-vgam)))
+     (list r-biostrings
+           r-genomicranges
+           r-iranges
+           r-rhtslib
+           r-summarizedexperiment
+           r-variantannotation
+           r-vgam))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/gerstung-lab/deepSNV/")
     (synopsis "Detection of subclonal SNVs in deep sequencing data")
     (description
@@ -1558,24 +1684,21 @@ bases such as COSMIC.")
 (define-public r-delayedarray
   (package
     (name "r-delayedarray")
-    (version "0.18.0")
+    (version "0.20.0")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "DelayedArray" version))
               (sha256
                (base32
-                "0w632262dqzcnvq9s6jvc7naz93dayx51fsv05s0zb6cjwygbqjr"))))
+                "1cm6zh01mvhiq7zrik7q3dmgxinyjz1nyg6rfj93kpkvcb5d4wpj"))))
     (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)))
+     (list r-biocgenerics r-s4vectors r-iranges r-matrix
+           r-matrixgenerics))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/DelayedArray")
     (synopsis "Delayed operations on array-like objects")
     (description
@@ -1588,28 +1711,88 @@ 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-derfinderhelper
+  (package
+    (name "r-derfinderhelper")
+    (version "1.28.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (bioconductor-uri "derfinderHelper" version))
+       (sha256
+        (base32 "06x0wy2wzpngak1pnrj2p0xzlx1nbcz0hs3p9q5ic6ib2rgwrh35"))))
+    (properties `((upstream-name . "derfinderHelper")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-iranges r-matrix r-s4vectors))
+    (native-inputs
+     (list r-knitr))
+    (home-page "https://github.com/leekgroup/derfinderHelper")
+    (synopsis "Helper for derfinder")
+    (description
+     "This package speeds up the derfinder package when using multiple cores.
+It is particularly useful when using BiocParallel and it helps reduce the time
+spent loading the full derfinder package when running the F-statistics
+calculation in parallel.")
+    (license license:artistic2.0)))
+
+(define-public r-drimseq
+  (package
+    (name "r-drimseq")
+    (version "1.22.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (bioconductor-uri "DRIMSeq" version))
+       (sha256
+        (base32 "0y2jb0hb633id038zmwnfny6h4ai77fdyy02f77vha1z8xg5nl02"))))
+    (properties `((upstream-name . "DRIMSeq")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-biocgenerics
+           r-biocparallel
+           r-edger
+           r-genomicranges
+           r-ggplot2
+           r-iranges
+           r-limma
+           r-mass
+           r-reshape2
+           r-s4vectors))
+    (native-inputs (list r-knitr))
+    (home-page "https://bioconductor.org/packages/DRIMSeq")
+    (synopsis "Differential transcript usage and tuQTL analyses with Dirichlet-multinomial model in RNA-seq")
+    (description
+     "The package provides two frameworks.  One for the differential
+transcript usage analysis between different conditions and one for the tuQTL
+analysis.  Both are based on modeling the counts of genomic features (i.e.,
+transcripts) with the Dirichlet-multinomial distribution.  The package also
+makes available functions for visualization and exploration of the data and
+results.")
+    (license license:gpl3+)))
+
 (define-public r-bluster
   (package
    (name "r-bluster")
-   (version "1.2.1")
+   (version "1.4.0")
    (source (origin
             (method url-fetch)
             (uri (bioconductor-uri "bluster" version))
             (sha256
              (base32
-              "128zd5vwlhmrkq0bpp1dxnkrcqfz1mjmdjlla4wqbjv7v6yyn6lg"))))
+              "1j24l12i3aga4qd827sj8b160yvrhlznggb4piddkmhjc0sppbjm"))))
    (properties `((upstream-name . "bluster")))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-biocneighbors" ,r-biocneighbors)
-      ("r-biocparallel" ,r-biocparallel)
-      ("r-cluster" ,r-cluster)
-      ("r-igraph" ,r-igraph)
-      ("r-matrix" ,r-matrix)
-      ("r-rcpp" ,r-rcpp)
-      ("r-s4vectors" ,r-s4vectors)))
+    (list r-biocneighbors
+          r-biocparallel
+          r-cluster
+          r-igraph
+          r-matrix
+          r-rcpp
+          r-s4vectors))
    (native-inputs
-    `(("r-knitr" ,r-knitr)))
+    (list r-knitr))
    (home-page "https://bioconductor.org/packages/bluster")
    (synopsis "Clustering algorithms for Bioconductor")
    (description"This package wraps common clustering algorithms in an easily
@@ -1621,21 +1804,21 @@ and evaluate clustering results.")
 (define-public r-ideoviz
   (package
     (name "r-ideoviz")
-    (version "1.28.0")
+    (version "1.30.0")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "IdeoViz" version))
               (sha256
                (base32
-                "17sx0v5lq2zmg098ps4ksj1h0yla3vlh6s2w1ahqsq0nvm193scm"))))
+                "0cclk2pcb2mvsfxhw0zq3qlnfkblb1gqxnn7xypmlf0bm6hcvl4g"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-iranges" ,r-iranges)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-genomeinfodb" ,r-genomeinfodb)))
+     (list r-biobase
+           r-iranges
+           r-genomicranges
+           r-rcolorbrewer
+           r-rtracklayer
+           r-genomeinfodb))
     (home-page "https://bioconductor.org/packages/IdeoViz/")
     (synopsis "Plots data along a chromosomal ideogram")
     (description "This package provides functions to plot data associated with
@@ -1645,19 +1828,18 @@ arbitrary genomic intervals along chromosomal ideogram.")
 (define-public r-iranges
   (package
     (name "r-iranges")
-    (version "2.26.0")
+    (version "2.28.0")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "IRanges" version))
               (sha256
                (base32
-                "0dzj8wqbjzilh2dsaj3ylx958xqrv0c688ayfq2r1z7rs75qy7kx"))))
+                "07zs231wbfwwc1c1165rhp711fbss40p9l8kyjjv9flzpr3hr1pg"))))
     (properties
      `((upstream-name . "IRanges")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-biocgenerics r-s4vectors))
     (home-page "https://bioconductor.org/packages/IRanges")
     (synopsis "Infrastructure for manipulating intervals on sequences")
     (description
@@ -1671,6 +1853,59 @@ naming and share the same rich and consistent \"Vector API\" as much as
 possible.")
     (license license:artistic2.0)))
 
+(define-public r-isoformswitchanalyzer
+  (package
+    (name "r-isoformswitchanalyzer")
+    (version "1.16.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (bioconductor-uri "IsoformSwitchAnalyzeR" version))
+       (sha256
+        (base32 "14bqf39gw5ab5r9sr3afkig1jbzdvds1bmcvc6bpb45kschx7fwf"))))
+    (properties `((upstream-name . "IsoformSwitchAnalyzeR")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-biobase
+           r-biocgenerics
+           r-biostrings
+           r-bsgenome
+           r-dbi
+           r-dexseq
+           r-dplyr
+           r-drimseq
+           r-edger
+           r-futile-logger
+           r-genomeinfodb
+           r-genomicranges
+           r-ggplot2
+           r-gridextra
+           r-iranges
+           r-limma
+           r-magrittr
+           r-plyr
+           r-rcolorbrewer
+           r-rcurl
+           r-readr
+           r-reshape2
+           r-rtracklayer
+           r-stringr
+           r-tibble
+           r-tximeta
+           r-tximport
+           r-venndiagram
+           r-xvector))
+    (native-inputs
+     (list r-knitr))
+    (home-page "https://bioconductor.org/packages/IsoformSwitchAnalyzeR/")
+    (synopsis "Analyze alternative splicing in RNA-seq data")
+    (description
+     "This is a package for the analysis of alternative splicing and isoform
+switches with predicted functional consequences (e.g. gain/loss of protein
+domains etc.) from quantification of all types of RNASeq by tools such as
+Kallisto, Salmon, StringTie, Cufflinks/Cuffdiff etc.")
+    (license license:gpl2+)))
+
 ;; This is a CRAN package, but it depends on r-biobase and r-limma from Bioconductor.
 (define-public r-absfiltergsea
   (package
@@ -1685,11 +1920,7 @@ possible.")
     (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)))
+     (list r-biobase r-deseq r-limma r-rcpp r-rcpparmadillo))
     (home-page "https://cran.r-project.org/web/packages/AbsFilterGSEA/")
     (synopsis "Improved false positive control of gene-permuting with absolute filtering")
     (description
@@ -1713,10 +1944,9 @@ absolute GSEA.")
    (properties `((upstream-name . "BisqueRNA")))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-biobase" ,r-biobase)
-      ("r-limsolve" ,r-limsolve)))
+    (list r-biobase r-limsolve))
    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
    (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
@@ -1743,10 +1973,8 @@ relative abundances across samples.")
      `((upstream-name . "deconstructSigs")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bsgenome" ,r-bsgenome)
-       ("r-bsgenome-hsapiens-ucsc-hg19" ,r-bsgenome-hsapiens-ucsc-hg19)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-reshape2" ,r-reshape2)))
+     (list r-bsgenome r-bsgenome-hsapiens-ucsc-hg19 r-genomeinfodb
+           r-reshape2))
     (home-page "https://github.com/raerose01/deconstructSigs")
     (synopsis "Identifies signatures present in a tumor sample")
     (description "This package takes sample information in the form of the
@@ -1756,6 +1984,33 @@ closely reconstructs the mutational profile.")
     (license license:gpl2+)))
 
 ;; This is a CRAN package, but it depends on Bioconductor packages.
+(define-public r-jetset
+  (package
+    (name "r-jetset")
+    (version "3.4.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "jetset" version))
+       (sha256
+        (base32 "0c99h5npsv2gf5d59s4qhkaqmjhbwa3prcykk24wzhnpfq6y6xhp"))))
+    (properties `((upstream-name . "jetset")))
+    (build-system r-build-system)
+    (propagated-inputs (list r-annotationdbi r-org-hs-eg-db))
+    (home-page "http://www.cbs.dtu.dk/biotools/jetset/")
+    (synopsis "One-to-one gene-probeset mapping for Affymetrix human microarrays")
+    (description
+     "This package provides a one-to-one mapping from gene to \"best\" probe
+set for four Affymetrix human gene expression microarrays: hgu95av2, hgu133a,
+hgu133plus2, and u133x3p.  On Affymetrix gene expression microarrays, a single
+gene may be measured by multiple probe sets.  This can present a mild
+conundrum when attempting to evaluate a gene \"signature\" that is defined by
+gene names rather than by specific probe sets.  This package also includes the
+pre-calculated probe set quality scores that were used to define the
+mapping.")
+    (license license:artistic2.0)))
+
+;; This is a CRAN package, but it depends on Bioconductor packages.
 (define-public r-nmf
   (package
     (name "r-nmf")
@@ -1770,25 +2025,25 @@ closely reconstructs the mutational profile.")
     (properties `((upstream-name . "NMF")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cluster" ,r-cluster)
-       ("r-biobase" ,r-biobase)
-       ("r-biocmanager" ,r-biocmanager)
-       ("r-bigmemory" ,r-bigmemory) ; suggested
-       ("r-synchronicity" ,r-synchronicity) ; suggested
-       ("r-colorspace" ,r-colorspace)
-       ("r-digest" ,r-digest)
-       ("r-doparallel" ,r-doparallel)
-       ("r-foreach" ,r-foreach)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridbase" ,r-gridbase)
-       ("r-pkgmaker" ,r-pkgmaker)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-registry" ,r-registry)
-       ("r-reshape2" ,r-reshape2)
-       ("r-rngtools" ,r-rngtools)
-       ("r-stringr" ,r-stringr)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-cluster
+           r-biobase
+           r-biocmanager
+           r-bigmemory ; suggested
+           r-synchronicity ; suggested
+           r-colorspace
+           r-digest
+           r-doparallel
+           r-foreach
+           r-ggplot2
+           r-gridbase
+           r-pkgmaker
+           r-rcolorbrewer
+           r-registry
+           r-reshape2
+           r-rngtools
+           r-stringr))
+    (native-inputs
+     (list r-knitr))
     (home-page "http://renozao.github.io/NMF")
     (synopsis "Algorithms and framework for nonnegative matrix factorization")
     (description
@@ -1803,24 +2058,24 @@ performing parallel computations on multicore machines.")
 (define-public r-affy
   (package
     (name "r-affy")
-    (version "1.70.0")
+    (version "1.72.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "affy" version))
        (sha256
         (base32
-         "0vz5y92gqcm0qk57qlba85bk683lzdr7vkmxv109rq6i17vdkkrm"))))
+         "0z66pyn2020h3x22xabkmnjxb20kbgblivvk7mqjk9134wvvf15a"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-affyio" ,r-affyio)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocmanager" ,r-biocmanager)
-       ("r-preprocesscore" ,r-preprocesscore)
-       ("r-zlibbioc" ,r-zlibbioc)))
+     (list r-affyio
+           r-biobase
+           r-biocgenerics
+           r-biocmanager
+           r-preprocesscore
+           r-zlibbioc))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "https://bioconductor.org/packages/affy")
     (synopsis "Methods for affymetrix oligonucleotide arrays")
     (description
@@ -1831,17 +2086,17 @@ analysis.")
 (define-public r-affycomp
   (package
     (name "r-affycomp")
-    (version "1.68.0")
+    (version "1.70.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "affycomp" version))
        (sha256
         (base32
-         "07my5scdh6h0y1bx1h9y5m4fa8bnmw389f83gkb7cf19w4vp36b2"))))
+         "0kawlfff82ikrbrfyyy38zm5wj5xdri2ii9wgwilnq50z5qc6r21"))))
     (properties `((upstream-name . "affycomp")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-biobase" ,r-biobase)))
+    (propagated-inputs (list r-biobase))
     (home-page "https://bioconductor.org/packages/affycomp/")
     (synopsis "Graphics toolbox for assessment of Affymetrix expression measures")
     (description
@@ -1852,21 +2107,19 @@ measures for Affymetrix Oligonucleotide Arrays.")
 (define-public r-affycompatible
   (package
     (name "r-affycompatible")
-    (version "1.52.0")
+    (version "1.54.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "AffyCompatible" version))
        (sha256
         (base32
-         "1xwz22wf2smsvmd0d5lfadbsgscnl3fl9msypy2mml38k048p6vj"))))
+         "1qlfh1gcwa6akd5dhdqh260yaw1j6dap6a15ghwf74rchi5218sg"))))
     (properties
      `((upstream-name . "AffyCompatible")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biostrings" ,r-biostrings)
-       ("r-rcurl" ,r-rcurl)
-       ("r-xml" ,r-xml)))
+     (list r-biostrings r-rcurl r-xml))
     (home-page "https://bioconductor.org/packages/AffyCompatible/")
     (synopsis "Work with Affymetrix GeneChip files")
     (description
@@ -1880,20 +2133,18 @@ Command Console} (AGCC)-compatible sample annotation files.")
 (define-public r-affycontam
   (package
     (name "r-affycontam")
-    (version "1.50.0")
+    (version "1.52.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "affyContam" version))
        (sha256
         (base32
-         "0242ga68wrdk1kcmxfdbq73a0d3zhrzdlzkzphfg3q0zjbvg49jj"))))
+         "1vw3nxg9jvlw0zg9h70w2ww8l42qpyvgf12hsla9hyyfhj3m6i9f"))))
     (properties `((upstream-name . "affyContam")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-affy" ,r-affy)
-       ("r-affydata" ,r-affydata)
-       ("r-biobase" ,r-biobase)))
+     (list r-affy r-affydata r-biobase))
     (home-page "https://bioconductor.org/packages/affyContam/")
     (synopsis "Structured corruption of Affymetrix CEL file data")
     (description
@@ -1905,38 +2156,38 @@ problems in CEL-level data to help evaluate performance of quality metrics.")
 (define-public r-affycoretools
   (package
     (name "r-affycoretools")
-    (version "1.64.0")
+    (version "1.66.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "affycoretools" version))
        (sha256
         (base32
-         "1dx861spr3kn1dxwhf43s5l1r7bmrq0h6538l3q64iiwzzc6krdh"))))
+         "1ccyaj129ii9f47r41qsy34y6ck4wna55j8vz3v3hbldddn93f40"))))
     (properties `((upstream-name . "affycoretools")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-affy" ,r-affy)
-       ("r-annotationdbi" ,r-annotationdbi)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-dbi" ,r-dbi)
-       ("r-edger" ,r-edger)
-       ("r-gcrma" ,r-gcrma)
-       ("r-glimma" ,r-glimma)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gostats" ,r-gostats)
-       ("r-gplots" ,r-gplots)
-       ("r-hwriter" ,r-hwriter)
-       ("r-lattice" ,r-lattice)
-       ("r-limma" ,r-limma)
-       ("r-oligoclasses" ,r-oligoclasses)
-       ("r-reportingtools" ,r-reportingtools)
-       ("r-rsqlite" ,r-rsqlite)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-xtable" ,r-xtable)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-affy
+           r-annotationdbi
+           r-biobase
+           r-biocgenerics
+           r-dbi
+           r-edger
+           r-gcrma
+           r-glimma
+           r-ggplot2
+           r-gostats
+           r-gplots
+           r-hwriter
+           r-lattice
+           r-limma
+           r-oligoclasses
+           r-reportingtools
+           r-rsqlite
+           r-s4vectors
+           r-xtable))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/affycoretools/")
     (synopsis "Functions for analyses with Affymetrix GeneChips")
     (description
@@ -1947,19 +2198,19 @@ to streamline the more common analyses that a Biostatistician might see.")
 (define-public r-affyio
   (package
     (name "r-affyio")
-    (version "1.62.0")
+    (version "1.64.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "affyio" version))
        (sha256
         (base32
-         "07kibqsm888g06qqqa4648ph877kriy74kprbri8nyx83y8aspjr"))))
+         "02lqdq8hcldkf9qbyhhllkm3smpqc51sn2d9gbkm74r96fx37lvm"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-zlibbioc" ,r-zlibbioc)))
+     (list r-zlibbioc))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "https://github.com/bmbolstad/affyio")
     (synopsis "Tools for parsing Affymetrix data files")
     (description
@@ -1971,14 +2222,14 @@ CDF file formats.")
 (define-public r-affxparser
   (package
     (name "r-affxparser")
-    (version "1.64.1")
+    (version "1.66.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "affxparser" version))
        (sha256
         (base32
-         "0lr0kmp087j2g4i5kd7rh8a038ymp6z82861lyql2fwk5dh80043"))))
+         "1bd0f8ifj6l7dx2m3wpmd0mji2gdf39mzgcjf9lbvvmbqnbxbcal"))))
     (properties `((upstream-name . "affxparser")))
     (build-system r-build-system)
     (home-page "https://github.com/HenrikBengtsson/affxparser")
@@ -1999,23 +2250,23 @@ structure.")
 (define-public r-annotate
   (package
     (name "r-annotate")
-    (version "1.70.0")
+    (version "1.72.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "annotate" version))
        (sha256
         (base32
-         "13ny596wh65sw7dbw0zd4h84d6k1w99g91c4sqy83mdzgpv73sz7"))))
+         "0p7q5hdk7003q72vg4hrgdzn463spybxhrkvcq3a6l6jkgy9sf84"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-dbi" ,r-dbi)
-       ("r-httr" ,r-httr)
-       ("r-xml" ,r-xml)
-       ("r-xtable" ,r-xtable)))
+     (list r-annotationdbi
+           r-biobase
+           r-biocgenerics
+           r-dbi
+           r-httr
+           r-xml
+           r-xtable))
     (home-page
      "https://bioconductor.org/packages/annotate")
     (synopsis "Annotation for microarrays")
@@ -2026,26 +2277,26 @@ microarrays.")
 (define-public r-annotationdbi
   (package
     (name "r-annotationdbi")
-    (version "1.54.1")
+    (version "1.56.2")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "AnnotationDbi" version))
               (sha256
                (base32
-                "0fcammls431pgmp47r85k0zh3bz42bajbqdmafd31kpqncc1ijal"))))
+                "01zwq14msbbwzxv8rgpmyr74ymvhq0vnmxkxxwd886iac5vjlgi8"))))
     (properties
      `((upstream-name . "AnnotationDbi")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-dbi" ,r-dbi)
-       ("r-keggrest" ,r-keggrest)
-       ("r-iranges" ,r-iranges)
-       ("r-rsqlite" ,r-rsqlite)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-biobase
+           r-biocgenerics
+           r-dbi
+           r-keggrest
+           r-iranges
+           r-rsqlite
+           r-s4vectors))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/AnnotationDbi")
     (synopsis "Annotation database interface")
     (description
@@ -2056,21 +2307,20 @@ annotation data packages using SQLite data storage.")
 (define-public r-annotationfilter
   (package
     (name "r-annotationfilter")
-    (version "1.16.0")
+    (version "1.18.0")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "AnnotationFilter" version))
               (sha256
                (base32
-                "0799jja6v7l3jsi26wbjalkr5lriaxid05xb5g36iq93myhaj0sa"))))
+                "15fp1228yb06jm5cblvhw3qv9mlpbjfggaz2nvi3p46mby1vs64w"))))
     (properties
      `((upstream-name . "AnnotationFilter")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-genomicranges" ,r-genomicranges)
-       ("r-lazyeval" ,r-lazyeval)))
+     (list r-genomicranges r-lazyeval))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/Bioconductor/AnnotationFilter")
     (synopsis "Facilities for filtering Bioconductor annotation resources")
     (description
@@ -2082,28 +2332,28 @@ used by @code{ensembldb}, @code{Organism.dplyr}, and other packages.")
 (define-public r-annotationforge
   (package
     (name "r-annotationforge")
-    (version "1.34.0")
+    (version "1.36.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "AnnotationForge" version))
        (sha256
         (base32
-         "1by3diy0y4809k97cw97mp4j177gn1dzhqil8myij1r7b8sk7hax"))))
+         "02wvni5q560idi6677g5f4md73z4qzjl5yycxv5dbvgbl2picisz"))))
     (properties
      `((upstream-name . "AnnotationForge")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-dbi" ,r-dbi)
-       ("r-rcurl" ,r-rcurl)
-       ("r-rsqlite" ,r-rsqlite)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-xml" ,r-xml)))
+     (list r-annotationdbi
+           r-biobase
+           r-biocgenerics
+           r-dbi
+           r-rcurl
+           r-rsqlite
+           r-s4vectors
+           r-xml))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/AnnotationForge")
     (synopsis "Code for building annotation database packages")
     (description
@@ -2114,32 +2364,32 @@ databases.  Packages produced are intended to be used with AnnotationDbi.")
 (define-public r-annotationhub
   (package
     (name "r-annotationhub")
-    (version "3.0.1")
+    (version "3.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "AnnotationHub" version))
        (sha256
         (base32
-         "12i8lafy1z97gs4knqi7r5l1hd7dr6j8a23qj4fkdpqsdpyz21z7"))))
+         "0ks8yzvvs2r66pb9687mkskf0n3wgvp7h92k83b0a1q32sca5wng"))))
     (properties `((upstream-name . "AnnotationHub")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-biocfilecache" ,r-biocfilecache)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocmanager" ,r-biocmanager)
-       ("r-biocversion" ,r-biocversion)
-       ("r-curl" ,r-curl)
-       ("r-dplyr" ,r-dplyr)
-       ("r-httr" ,r-httr)
-       ("r-interactivedisplaybase" ,r-interactivedisplaybase)
-       ("r-rappdirs" ,r-rappdirs)
-       ("r-rsqlite" ,r-rsqlite)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-yaml" ,r-yaml)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-annotationdbi
+           r-biocfilecache
+           r-biocgenerics
+           r-biocmanager
+           r-biocversion
+           r-curl
+           r-dplyr
+           r-httr
+           r-interactivedisplaybase
+           r-rappdirs
+           r-rsqlite
+           r-s4vectors
+           r-yaml))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/AnnotationHub")
     (synopsis "Client to access AnnotationHub resources")
     (description
@@ -2155,21 +2405,18 @@ by the user, helping with quick and reproducible access.")
 (define-public r-aroma-light
   (package
     (name "r-aroma-light")
-    (version "3.22.0")
+    (version "3.24.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "aroma.light" version))
        (sha256
         (base32
-         "1yvq6l1p8cpijvlib4fn9y88ihn0gaalrmgx82jgrfmnszkqn3y5"))))
+         "12qa85hsp8d1xhgn27iymknbhpnp9bd7hsgqxwvp1i8kki06z5hp"))))
     (properties `((upstream-name . "aroma.light")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-matrixstats" ,r-matrixstats)
-       ("r-r-methodss3" ,r-r-methodss3)
-       ("r-r-oo" ,r-r-oo)
-       ("r-r-utils" ,r-r-utils)))
+     (list r-matrixstats r-r-methodss3 r-r-oo r-r-utils))
     (home-page "https://github.com/HenrikBengtsson/aroma.light")
     (synopsis "Methods for normalization and visualization of microarray data")
     (description
@@ -2182,24 +2429,24 @@ classes.")
 (define-public r-bamsignals
   (package
     (name "r-bamsignals")
-    (version "1.24.0")
+    (version "1.26.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "bamsignals" version))
        (sha256
         (base32
-         "1ljrip0jlxjcljqac7vzvwqbcqil5v4f4s4bhpq4akvdkshas6mn"))))
+         "03m3yaagplh7j4q5hp3cfcdqwsnh1pwrlla9cv3ajnfd83s8ncqv"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rhtslib" ,r-rhtslib)
-       ("r-zlibbioc" ,r-zlibbioc)))
+     (list r-biocgenerics
+           r-genomicranges
+           r-iranges
+           r-rcpp
+           r-rhtslib
+           r-zlibbioc))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/bamsignals")
     (synopsis "Extract read count signals from bam files")
     (description
@@ -2212,18 +2459,18 @@ paired-end data.")
 (define-public r-biobase
   (package
     (name "r-biobase")
-    (version "2.52.0")
+    (version "2.54.0")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "Biobase" version))
               (sha256
                (base32
-                "1sg8w8860zhlz9s1pf75xa8asd2hyqsj13fh5xc37hf5yqdfkavr"))))
+                "0kar2kgaayp5l7xv9zcxj61l01m8jlwnppql6qf01wsz36dacgww"))))
     (properties
      `((upstream-name . "Biobase")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)))
+     (list r-biocgenerics))
     (home-page "https://bioconductor.org/packages/Biobase")
     (synopsis "Base functions for Bioconductor")
     (description
@@ -2234,28 +2481,28 @@ on Bioconductor or which replace R functions.")
 (define-public r-biomart
   (package
     (name "r-biomart")
-    (version "2.48.3")
+    (version "2.50.1")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "biomaRt" version))
               (sha256
                (base32
-                "096s243yzbhhz3wsm7azml5sznqczmcpi5g0gnb02mah1przczfx"))))
+                "1lm8axjmi2k1d2x0gdlvs0fzsd68xvxx7sn1wn6v4wr0pv85qhkz"))))
     (properties
      `((upstream-name . "biomaRt")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-biocfilecache" ,r-biocfilecache)
-       ("r-digest" ,r-digest)
-       ("r-httr" ,r-httr)
-       ("r-progress" ,r-progress)
-       ("r-rappdirs" ,r-rappdirs)
-       ("r-stringr" ,r-stringr)
-       ("r-xml" ,r-xml)
-       ("r-xml2" ,r-xml2)))
+     (list r-annotationdbi
+           r-biocfilecache
+           r-digest
+           r-httr
+           r-progress
+           r-rappdirs
+           r-stringr
+           r-xml
+           r-xml2))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/biomaRt")
     (synopsis "Interface to BioMart databases")
     (description
@@ -2272,13 +2519,13 @@ powerful online queries from gene annotation to database mining.")
 (define-public r-biocparallel
   (package
     (name "r-biocparallel")
-    (version "1.26.2")
+    (version "1.28.3")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "BiocParallel" version))
               (sha256
                (base32
-                "1y459cygq21f3igsdlxz1zlyad8qbl2qlr5h2d2dpnvblykvf48i"))))
+                "0lkp7m2l66zq8yl788mkvi9kpb1haywxpf6ip9xl5y6iwm1w2b8p"))))
     (properties
      `((upstream-name . "BiocParallel")))
     (build-system r-build-system)
@@ -2306,16 +2553,14 @@ powerful online queries from gene annotation to database mining.")
                (("\\today") "later"))
 
              ;; Initialize the random number generator seed when building.
-             (substitute* "R/internal_rng_stream.R"
+             (substitute* "R/rng.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)))
+     (list r-futile-logger r-snow r-bh))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/BiocParallel")
     (synopsis "Bioconductor facilities for parallel evaluation")
     (description
@@ -2327,23 +2572,23 @@ objects.")
 (define-public r-biostrings
   (package
     (name "r-biostrings")
-    (version "2.60.2")
+    (version "2.62.0")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "Biostrings" version))
               (sha256
                (base32
-                "0ai0fg0w4l0a7avbafdbqjgjpg91myxalwrg2i3ixm1l2lyyfyah"))))
+                "11qkw863mkfz3mc55v2gmfr4w3xziqfb5pq3hmjqpn8vpw8ax3xq"))))
     (properties
      `((upstream-name . "Biostrings")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-crayon" ,r-crayon)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-iranges" ,r-iranges)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-xvector" ,r-xvector)))
+     (list r-biocgenerics
+           r-crayon
+           r-genomeinfodb
+           r-iranges
+           r-s4vectors
+           r-xvector))
     (home-page "https://bioconductor.org/packages/Biostrings")
     (synopsis "String objects and algorithms for biological sequences")
     (description
@@ -2355,36 +2600,36 @@ biological sequences or sets of sequences.")
 (define-public r-biovizbase
   (package
     (name "r-biovizbase")
-    (version "1.40.0")
+    (version "1.42.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "biovizBase" version))
        (sha256
         (base32
-         "14jyyg3ggdhaqhp0j4qf6dapykh76fygbaa4lr7czqbc5mr0iw23"))))
+         "0kg71p7sqfvxal0c19zrws1ffaqgyi8p605l3z6mkq5ldi26pajz"))))
     (properties `((upstream-name . "biovizBase")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-annotationfilter" ,r-annotationfilter)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biostrings" ,r-biostrings)
-       ("r-dichromat" ,r-dichromat)
-       ("r-ensembldb" ,r-ensembldb)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-hmisc" ,r-hmisc)
-       ("r-iranges" ,r-iranges)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rlang" ,r-rlang)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-scales" ,r-scales)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-variantannotation" ,r-variantannotation)))
+     (list r-annotationdbi
+           r-annotationfilter
+           r-biocgenerics
+           r-biostrings
+           r-dichromat
+           r-ensembldb
+           r-genomeinfodb
+           r-genomicalignments
+           r-genomicfeatures
+           r-genomicranges
+           r-hmisc
+           r-iranges
+           r-rcolorbrewer
+           r-rlang
+           r-rsamtools
+           r-s4vectors
+           r-scales
+           r-summarizedexperiment
+           r-variantannotation))
     (home-page "https://bioconductor.org/packages/biovizBase")
     (synopsis "Basic graphic utilities for visualization of genomic data")
     (description
@@ -2397,27 +2642,27 @@ effort and encourages consistency.")
 (define-public r-bsgenome
   (package
     (name "r-bsgenome")
-    (version "1.60.0")
+    (version "1.62.0")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "BSgenome" version))
               (sha256
                (base32
-                "1jhissp9ad1rn2p0bzr3yslbn84yqbaqgnn5p9hyacwr7mr091cn"))))
+                "1b023dpy8ygq0kd6qy0mk97c66gzpf39y2s0n89kmv61z5sg0jyi"))))
     (properties
      `((upstream-name . "BSgenome")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-biostrings" ,r-biostrings)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-xvector" ,r-xvector)))
+     (list r-biocgenerics
+           r-biostrings
+           r-genomeinfodb
+           r-genomicranges
+           r-iranges
+           r-matrixstats
+           r-rsamtools
+           r-rtracklayer
+           r-s4vectors
+           r-xvector))
     (home-page "https://bioconductor.org/packages/BSgenome")
     (synopsis "Infrastructure for Biostrings-based genome data packages")
     (description
@@ -2428,27 +2673,27 @@ genome data packages and support for efficient SNP representation.")
 (define-public r-category
   (package
     (name "r-category")
-    (version "2.58.0")
+    (version "2.60.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "Category" version))
        (sha256
         (base32
-         "0f76pb7h8qc51mca5pq00m9p02sbkcj6ywfzli20qai2ykpfr71x"))))
+         "164zp4la9rqnp5vpn2y2p6plc5yxyk2kmn0z3d2flla54zc1b427"))))
     (properties `((upstream-name . "Category")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotate" ,r-annotate)
-       ("r-annotationdbi" ,r-annotationdbi)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-genefilter" ,r-genefilter)
-       ("r-graph" ,r-graph)
-       ("r-gseabase" ,r-gseabase)
-       ("r-matrix" ,r-matrix)
-       ("r-rbgl" ,r-rbgl)
-       ("r-dbi" ,r-dbi)))
+     (list r-annotate
+           r-annotationdbi
+           r-biobase
+           r-biocgenerics
+           r-genefilter
+           r-graph
+           r-gseabase
+           r-matrix
+           r-rbgl
+           r-dbi))
     (home-page "https://bioconductor.org/packages/Category")
     (synopsis "Category analysis")
     (description
@@ -2459,37 +2704,36 @@ analysis.")
 (define-public r-chipseeker
   (package
     (name "r-chipseeker")
-    (version "1.28.3")
+    (version "1.30.3")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "ChIPseeker" version))
               (sha256
                (base32
-                "18hdgml80770c0xgd06zrl8px1ql9fa65rirfkq07z7rzpnd23rw"))))
-    (build-system r-build-system)
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
-    (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-boot" ,r-boot)
-       ("r-enrichplot" ,r-enrichplot)
-       ("r-iranges" ,r-iranges)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gplots" ,r-gplots)
-       ("r-gtools" ,r-gtools)
-       ("r-dplyr" ,r-dplyr)
-       ("r-plotrix" ,r-plotrix)
-       ("r-dplyr" ,r-dplyr)
-       ("r-magrittr" ,r-magrittr)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-txdb-hsapiens-ucsc-hg19-knowngene"
-        ,r-txdb-hsapiens-ucsc-hg19-knowngene)))
+                "1f9m1p1viiigkmv15r2mknjrfw047jw1fylpqz5ipigc3jrphj1g"))))
+    (build-system r-build-system)
+    (native-inputs
+     (list r-knitr))
+    (propagated-inputs
+     (list r-annotationdbi
+           r-biocgenerics
+           r-boot
+           r-enrichplot
+           r-iranges
+           r-genomeinfodb
+           r-genomicranges
+           r-genomicfeatures
+           r-ggplot2
+           r-gplots
+           r-gtools
+           r-dplyr
+           r-plotrix
+           r-dplyr
+           r-magrittr
+           r-rcolorbrewer
+           r-rtracklayer
+           r-s4vectors
+           r-txdb-hsapiens-ucsc-hg19-knowngene))
     (home-page "https://www.bioconductor.org/packages/ChIPseeker/")
     (synopsis "ChIPseeker for ChIP peak annotation, comparison, and visualization")
     (description "This package implements functions to retrieve the nearest
@@ -2506,22 +2750,22 @@ annotation, distance to TSS, and overlap of peaks or genes.")
 (define-public r-chipseq
   (package
     (name "r-chipseq")
-    (version "1.42.0")
+    (version "1.44.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "chipseq" version))
        (sha256
         (base32
-         "078p9h0zghlhpd6cr54nww1mk7q97imx8yqfayw5m2yq4097ivbi"))))
+         "1jw209bfh1c22mqs9z44qx3pmca9m68rhxp0p9bvbmqsnqwrndi6"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-lattice" ,r-lattice)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-shortread" ,r-shortread)))
+     (list r-biocgenerics
+           r-genomicranges
+           r-iranges
+           r-lattice
+           r-s4vectors
+           r-shortread))
     (home-page "https://bioconductor.org/packages/chipseq")
     (synopsis "Package for analyzing ChIPseq data")
     (description
@@ -2532,33 +2776,32 @@ experiments.")
 (define-public r-complexheatmap
   (package
     (name "r-complexheatmap")
-    (version "2.8.0")
+    (version "2.10.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "ComplexHeatmap" version))
        (sha256
         (base32
-         "0jl96msj1njdrvngg68s50vmphvhi2lfwlv34x07pcdzgkjjs41f"))))
+         "124w74mk0zk035wyr7cimblzx5blags4n5c8f83mp7iimxcb4gcn"))))
     (properties
      `((upstream-name . "ComplexHeatmap")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cairo" ,r-cairo)
-       ("r-circlize" ,r-circlize)
-       ("r-clue" ,r-clue)
-       ("r-colorspace" ,r-colorspace)
-       ("r-digest" ,r-digest)
-       ("r-doparallel" ,r-doparallel)
-       ("r-foreach" ,r-foreach)
-       ("r-getoptlong" ,r-getoptlong)
-       ("r-globaloptions" ,r-globaloptions)
-       ("r-iranges" ,r-iranges)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-png" ,r-png)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-circlize
+           r-clue
+           r-colorspace
+           r-digest
+           r-doparallel
+           r-foreach
+           r-getoptlong
+           r-globaloptions
+           r-iranges
+           r-matrixstats
+           r-png
+           r-rcolorbrewer))
+    (native-inputs
+     (list r-knitr))
     (home-page
      "https://github.com/jokergoo/ComplexHeatmap")
     (synopsis "Making Complex Heatmaps")
@@ -2572,31 +2815,31 @@ self-defined annotation graphics.")
 (define-public r-copywriter
   (package
     (name "r-copywriter")
-    (version "2.24.0")
+    (version "2.26.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "CopywriteR" version))
        (sha256
         (base32
-         "0pacs714d9b1fdz68pp9ca0x77d376s19lxb82np4l9fgx0rgkxp"))))
+         "0xm5gjzi4r1xzyn7r669blqxhyhmbk9rh9k2gn696j14hbhc1hcy"))))
     (properties `((upstream-name . "CopywriteR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocparallel" ,r-biocparallel)
-       ("r-chipseq" ,r-chipseq)
-       ("r-copyhelper" ,r-copyhelper)
-       ("r-data-table" ,r-data-table)
-       ("r-dnacopy" ,r-dnacopy)
-       ("r-futile-logger" ,r-futile-logger)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-gtools" ,r-gtools)
-       ("r-iranges" ,r-iranges)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-biocparallel
+           r-chipseq
+           r-copyhelper
+           r-data-table
+           r-dnacopy
+           r-futile-logger
+           r-genomeinfodb
+           r-genomicalignments
+           r-genomicranges
+           r-gtools
+           r-iranges
+           r-matrixstats
+           r-rsamtools
+           r-s4vectors))
     (home-page "https://github.com/PeeperLab/CopywriteR")
     (synopsis "Copy number information from targeted sequencing")
     (description
@@ -2623,14 +2866,14 @@ number detection tools.")
     (properties `((upstream-name . "DESeq")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-genefilter" ,r-genefilter)
-       ("r-geneplotter" ,r-geneplotter)
-       ("r-lattice" ,r-lattice)
-       ("r-locfit" ,r-locfit)
-       ("r-mass" ,r-mass)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)))
+     (list r-biobase
+           r-biocgenerics
+           r-genefilter
+           r-geneplotter
+           r-lattice
+           r-locfit
+           r-mass
+           r-rcolorbrewer))
     (home-page "https://www-huber.embl.de/users/anders/DESeq/")
     (synopsis "Differential gene expression analysis")
     (description
@@ -2643,32 +2886,32 @@ distribution.")
 (define-public r-deseq2
   (package
     (name "r-deseq2")
-    (version "1.32.0")
+    (version "1.34.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "DESeq2" version))
        (sha256
         (base32
-         "0r1brwmj7av0bj72jajn27vx3zs1bgg8qfbhf02fln6kf7im4kaz"))))
+         "0whk29zrmv9mrlc4w5ghy0fd29v8hfr8jccwgrn59mf3mkmfb2b9"))))
     (properties `((upstream-name . "DESeq2")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-genefilter" ,r-genefilter)
-       ("r-geneplotter" ,r-geneplotter)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-iranges" ,r-iranges)
-       ("r-locfit" ,r-locfit)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-biobase
+           r-biocgenerics
+           r-biocparallel
+           r-genefilter
+           r-geneplotter
+           r-genomicranges
+           r-ggplot2
+           r-iranges
+           r-locfit
+           r-rcpp
+           r-rcpparmadillo
+           r-s4vectors
+           r-summarizedexperiment))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/DESeq2")
     (synopsis "Differential gene expression analysis")
     (description
@@ -2681,36 +2924,36 @@ distribution.")
 (define-public r-dexseq
   (package
     (name "r-dexseq")
-    (version "1.38.0")
+    (version "1.40.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "DEXSeq" version))
        (sha256
         (base32
-         "1zywh30f4j4rj0f9w6yk5xr9mvdbg8gicy3wsb8yxdnamadyr7x4"))))
+         "1wd4bjd0a53s689yvb2lxzdiy0synh6ncfcly3cfw37kpdj8lds1"))))
     (properties `((upstream-name . "DEXSeq")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-biomart" ,r-biomart)
-       ("r-deseq2" ,r-deseq2)
-       ("r-genefilter" ,r-genefilter)
-       ("r-geneplotter" ,r-geneplotter)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-hwriter" ,r-hwriter)
-       ("r-iranges" ,r-iranges)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-statmod" ,r-statmod)
-       ("r-stringr" ,r-stringr)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-annotationdbi
+           r-biobase
+           r-biocgenerics
+           r-biocparallel
+           r-biomart
+           r-deseq2
+           r-genefilter
+           r-geneplotter
+           r-genomicranges
+           r-hwriter
+           r-iranges
+           r-rcolorbrewer
+           r-rsamtools
+           r-s4vectors
+           r-statmod
+           r-stringr
+           r-summarizedexperiment))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/DEXSeq")
     (synopsis "Inference of differential exon usage in RNA-Seq")
     (description
@@ -2726,23 +2969,21 @@ exploration of the results.")
 (define-public r-dirichletmultinomial
   (package
     (name "r-dirichletmultinomial")
-    (version "1.34.0")
+    (version "1.36.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "DirichletMultinomial" version))
        (sha256
         (base32
-         "0ikmj0300lfzj6q1vyahfyx5kwi5h59mds7ym4f2j1bbxqzy6ssl"))))
+         "06nallp9jj2vmaa7d18g6hiymjc109szdv8sp51r87n7s38bvyq6"))))
     (properties
      `((upstream-name . "DirichletMultinomial")))
     (build-system r-build-system)
     (inputs
-     `(("gsl" ,gsl)))
+     (list gsl))
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-iranges" ,r-iranges)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-biocgenerics r-iranges r-s4vectors))
     (home-page "https://bioconductor.org/packages/DirichletMultinomial")
     (synopsis "Dirichlet-Multinomial mixture models for microbiome data")
     (description
@@ -2755,31 +2996,31 @@ originally made available by Holmes, Harris, and Quince, 2012, PLoS ONE 7(2):
 (define-public r-edaseq
   (package
     (name "r-edaseq")
-    (version "2.26.1")
+    (version "2.28.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "EDASeq" version))
        (sha256
         (base32
-         "0pakcbkalhhqz3d9lpfx3hscf53k24mlmrywxxzfg43yq57srkql"))))
+         "1vygfdxbjcww7sqzc3j7sp7w13dx10vlzy9z31flf7345qp6blj7"))))
     (properties `((upstream-name . "EDASeq")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-aroma-light" ,r-aroma-light)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocmanager" ,r-biocmanager)
-       ("r-biomart" ,r-biomart)
-       ("r-biostrings" ,r-biostrings)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-shortread" ,r-shortread)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-annotationdbi
+           r-aroma-light
+           r-biobase
+           r-biocgenerics
+           r-biocmanager
+           r-biomart
+           r-biostrings
+           r-genomicfeatures
+           r-genomicranges
+           r-iranges
+           r-rsamtools
+           r-shortread))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/drisso/EDASeq")
     (synopsis "Exploratory data analysis and normalization for RNA-Seq")
     (description
@@ -2795,20 +3036,17 @@ global-scaling and full-quantile normalization.")
 (define-public r-edger
   (package
     (name "r-edger")
-    (version "3.34.1")
+    (version "3.36.0")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "edgeR" version))
               (sha256
                (base32
-                "0f6apsjq6cn794840ls9y2n0hix1gyhvkdgxch1v22qr4sq0c86k"))))
+                "1d18kdfi9vjhhw5kwfy5airrd3c16fh4wbwppbhwgawm038mwavk"))))
     (properties `((upstream-name . "edgeR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-limma" ,r-limma)
-       ("r-locfit" ,r-locfit)
-       ("r-rcpp" ,r-rcpp)
-       ("r-statmod" ,r-statmod))) ;for estimateDisp
+     (list r-limma r-locfit r-rcpp r-statmod)) ;for estimateDisp
     (home-page "http://bioinf.wehi.edu.au/edgeR")
     (synopsis "EdgeR does empirical analysis of digital gene expression data")
     (description "This package can do differential expression analysis of
@@ -2823,34 +3061,34 @@ CAGE.")
 (define-public r-ensembldb
   (package
     (name "r-ensembldb")
-    (version "2.16.4")
+    (version "2.18.2")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "ensembldb" version))
        (sha256
         (base32
-         "15yllkxr6sj5pfvkvv285nk3q5374nzq1iz8ywmnrq910k3xagd8"))))
+         "0q56gv0isa9ayw505py7i7x65pvcshmd2j1mna1wpbk66wqj4qzx"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-annotationfilter" ,r-annotationfilter)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biostrings" ,r-biostrings)
-       ("r-curl" ,r-curl)
-       ("r-dbi" ,r-dbi)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-protgenerics" ,r-protgenerics)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-rsqlite" ,r-rsqlite)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-annotationdbi
+           r-annotationfilter
+           r-biobase
+           r-biocgenerics
+           r-biostrings
+           r-curl
+           r-dbi
+           r-genomeinfodb
+           r-genomicfeatures
+           r-genomicranges
+           r-iranges
+           r-protgenerics
+           r-rsamtools
+           r-rsqlite
+           r-rtracklayer
+           r-s4vectors))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/jotsetung/ensembldb")
     (synopsis "Utilities to create and use Ensembl-based annotation databases")
     (description
@@ -2868,21 +3106,18 @@ chromosome region or transcript models of lincRNA genes.")
 (define-public r-fastseg
   (package
     (name "r-fastseg")
-    (version "1.38.0")
+    (version "1.40.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "fastseg" version))
        (sha256
         (base32
-         "006v7qs707xmnr35b7rw135pyvacrmhv55a3c53birkpsrjgkps0"))))
+         "1ds0hhc41nhfj3lmvld8nk2p547wd80b3yq7fjlf3dl3wfaxzy80"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-biobase r-biocgenerics r-genomicranges r-iranges
+           r-s4vectors))
     (home-page "https://www.bioinf.jku.at/software/fastseg/index.html")
     (synopsis "Fast segmentation algorithm for genetic sequencing data")
     (description
@@ -2898,20 +3133,17 @@ microarrays or GRanges for sequencing data.")
 (define-public r-gage
   (package
     (name "r-gage")
-    (version "2.42.0")
+    (version "2.44.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "gage" version))
        (sha256
         (base32
-         "0z7hrwdm6my6p7z04bcpfhqk72pd0s1bdzvsiiym59qj79fbvb83"))))
+         "1spndmvl8wlz3z3wsvzi0fg9nzk81xi8c220pg2rf81j9181nkar"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-go-db" ,r-go-db)
-       ("r-graph" ,r-graph)
-       ("r-keggrest" ,r-keggrest)))
+     (list r-annotationdbi r-go-db r-graph r-keggrest))
     (home-page (string-append "https://bmcbioinformatics.biomedcentral.com/"
                               "articles/10.1186/1471-2105-10-161"))
     (synopsis "Generally applicable gene-set enrichment for pathway analysis")
@@ -2929,24 +3161,20 @@ analysis using other methods.")
 (define-public r-genefilter
   (package
     (name "r-genefilter")
-    (version "1.74.0")
+    (version "1.76.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "genefilter" version))
        (sha256
         (base32
-         "0dy9pmlb0pc9b4ks5fb9zgnmhc9f2mkqmsdlb7f5z88xmj68y4qk"))))
+         "05ba33m99dg414lasn36mjmkd9lvrxgpamy1qj2zvi31i9vkq6y2"))))
     (build-system r-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("r-knitr" ,r-knitr)))
+     (list gfortran r-knitr))
     (propagated-inputs
-     `(("r-annotate" ,r-annotate)
-       ("r-annotationdbi" ,r-annotationdbi)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-survival" ,r-survival)))
+     (list r-annotate r-annotationdbi r-biobase r-biocgenerics
+           r-survival))
     (home-page "https://bioconductor.org/packages/genefilter")
     (synopsis "Filter genes from high-throughput experiments")
     (description
@@ -2957,17 +3185,16 @@ high-throughput sequencing experiments.")
 (define-public r-geneoverlap
   (package
     (name "r-geneoverlap")
-    (version "1.28.0")
+    (version "1.30.0")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "GeneOverlap" version))
               (sha256
                (base32
-                "1kfw3h68rvbafhklds6sfmviwv91nms8wk0ywzkjg5h3mmgxbsv9"))))
+                "18l5dc4xcy1xa2h3sfw92w9rq9v0mnclamjxmzs5fqi469y5mwmm"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-gplots" ,r-gplots)))
+     (list r-rcolorbrewer r-gplots))
     (home-page "https://www.bioconductor.org/packages/GeneOverlap/")
     (synopsis "Test and visualize gene overlaps")
     (description "This package can be used to test two sets of gene lists
@@ -2977,37 +3204,37 @@ and visualize the results.")
 (define-public r-genomation
   (package
     (name "r-genomation")
-    (version "1.24.0")
+    (version "1.26.0")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "genomation" version))
               (sha256
                (base32
-                "0qa3b4mfd7l1sy4pw64zr2d90y5apah900krxjl4x39acygg0i2r"))))
-    (build-system r-build-system)
-    (propagated-inputs
-     `(("r-biostrings" ,r-biostrings)
-       ("r-bsgenome" ,r-bsgenome)
-       ("r-data-table" ,r-data-table)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridbase" ,r-gridbase)
-       ("r-impute" ,r-impute)
-       ("r-iranges" ,r-iranges)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-plotrix" ,r-plotrix)
-       ("r-plyr" ,r-plyr)
-       ("r-rcpp" ,r-rcpp)
-       ("r-readr" ,r-readr)
-       ("r-reshape2" ,r-reshape2)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-seqpattern" ,r-seqpattern)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+                "0ynwsrlnp98iyz4bl2s7plin0k9iy9zix4jy4v38lcqg6n4iz00j"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-biostrings
+           r-bsgenome
+           r-data-table
+           r-genomeinfodb
+           r-genomicalignments
+           r-genomicranges
+           r-ggplot2
+           r-gridbase
+           r-impute
+           r-iranges
+           r-matrixstats
+           r-plotrix
+           r-plyr
+           r-rcpp
+           r-readr
+           r-reshape2
+           r-rsamtools
+           r-rtracklayer
+           r-s4vectors
+           r-seqpattern))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioinformatics.mdc-berlin.de/genomation/")
     (synopsis "Summary, annotation and visualization of genomic data")
     (description
@@ -3024,24 +3251,21 @@ genomic intervals.  In addition, it can use BAM or BigWig files as input.")
 (define-public r-genomeinfodb
   (package
     (name "r-genomeinfodb")
-    (version "1.28.4")
+    (version "1.30.0")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "GenomeInfoDb" version))
               (sha256
                (base32
-                "0fjpgvpvyvl8cqgh2annib6h0c5li3aqz1ajfh5z5k5d0avdm4w0"))))
+                "1r0wblz9w4hqxm15wdssz0invx7hxhg3bnblkia6w3aazh30s6ns"))))
     (properties
      `((upstream-name . "GenomeInfoDb")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-genomeinfodbdata" ,r-genomeinfodbdata)
-       ("r-iranges" ,r-iranges)
-       ("r-rcurl" ,r-rcurl)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-biocgenerics r-genomeinfodbdata r-iranges r-rcurl
+           r-s4vectors))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/GenomeInfoDb")
     (synopsis "Utilities for manipulating chromosome identifiers")
     (description
@@ -3054,26 +3278,26 @@ names in their natural, rather than lexicographic, order.")
 (define-public r-genomicalignments
   (package
     (name "r-genomicalignments")
-    (version "1.28.0")
+    (version "1.30.0")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "GenomicAlignments" version))
               (sha256
                (base32
-                "00rq110jkh89nxgk05zh8kssxk8mb4dq0wjg3n7ivfmmm9wdwhp2"))))
+                "1jwksis94mk8bmdggk0w3kvxqwp4di6x78xgsjk6ij54710adyq9"))))
     (properties
      `((upstream-name . "GenomicAlignments")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-biostrings" ,r-biostrings)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
+     (list r-biocgenerics
+           r-biocparallel
+           r-biostrings
+           r-genomeinfodb
+           r-genomicranges
+           r-iranges
+           r-rsamtools
+           r-s4vectors
+           r-summarizedexperiment))
     (home-page "https://bioconductor.org/packages/GenomicAlignments")
     (synopsis "Representation and manipulation of short genomic alignments")
     (description
@@ -3087,34 +3311,34 @@ alignments.")
 (define-public r-genomicfeatures
   (package
     (name "r-genomicfeatures")
-    (version "1.44.2")
+    (version "1.46.3")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "GenomicFeatures" version))
               (sha256
                (base32
-                "091p8xnf2xkqhind81vyv1rmy2fz2b3qalcbrsw4qnp24vgdv2am"))))
+                "0a3shdzc1r0f12q9w679hgj8ywrwbg36z7k0yp47dgfjl14lachk"))))
     (properties
      `((upstream-name . "GenomicFeatures")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocio" ,r-biocio)
-       ("r-biomart" ,r-biomart)
-       ("r-biostrings" ,r-biostrings)
-       ("r-dbi" ,r-dbi)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-rcurl" ,r-rcurl)
-       ("r-rsqlite" ,r-rsqlite)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-xvector" ,r-xvector)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-annotationdbi
+           r-biobase
+           r-biocgenerics
+           r-biocio
+           r-biomart
+           r-biostrings
+           r-dbi
+           r-genomeinfodb
+           r-genomicranges
+           r-iranges
+           r-rcurl
+           r-rsqlite
+           r-rtracklayer
+           r-s4vectors
+           r-xvector))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/GenomicFeatures")
     (synopsis "Tools for working with transcript centric annotations")
     (description
@@ -3131,29 +3355,29 @@ extracting the desired features in a convenient format.")
 (define-public r-genomicfiles
   (package
     (name "r-genomicfiles")
-    (version "1.28.0")
+    (version "1.30.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "GenomicFiles" version))
        (sha256
         (base32
-         "1plh14m7w6calw5yxcxp7g4bg8q00ax85m517wap78bni975k13y"))))
+         "0i5y6dk6z18yqj5k4zy756c6l57z9jq2w5a5dksh2di4qgdgjx3x"))))
     (properties `((upstream-name . "GenomicFiles")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-matrixgenerics" ,r-matrixgenerics)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-variantannotation" ,r-variantannotation)))
+     (list r-biocgenerics
+           r-biocparallel
+           r-genomeinfodb
+           r-genomicalignments
+           r-genomicranges
+           r-iranges
+           r-matrixgenerics
+           r-rsamtools
+           r-rtracklayer
+           r-s4vectors
+           r-summarizedexperiment
+           r-variantannotation))
     (home-page "https://bioconductor.org/packages/GenomicFiles")
     (synopsis "Distributed computing by file or by range")
     (description
@@ -3165,24 +3389,20 @@ provide added flexibility for data combination and manipulation.")
 (define-public r-genomicranges
   (package
     (name "r-genomicranges")
-    (version "1.44.0")
+    (version "1.46.1")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "GenomicRanges" version))
               (sha256
                (base32
-                "1qxc6dcwdlkan3hg0j9yfhz7gyi9qg671yj6zizsk6mzl7qqva0x"))))
+                "133r27wsdyppjv9kq0d2xamx007lkf416nnlaygs4hs3a76p9xwx"))))
     (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)))
+     (list r-biocgenerics r-genomeinfodb r-iranges r-s4vectors r-xvector))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/GenomicRanges")
     (synopsis "Representation and manipulation of genomic intervals")
     (description
@@ -3196,26 +3416,26 @@ manipulating genomic intervals and variables defined along a genome.")
 (define-public r-gostats
   (package
     (name "r-gostats")
-    (version "2.58.0")
+    (version "2.60.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "GOstats" version))
        (sha256
         (base32
-         "0jjswy6qmfgr2f6vk3y9pdvs9x91gn31h55qllgh0qb2cb26g9wa"))))
+         "1f8wqdl0swnvs59i6ljjcaglfqv314n8zxy4crpx806gbjzpn76z"))))
     (properties `((upstream-name . "GOstats")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotate" ,r-annotate)
-       ("r-annotationdbi" ,r-annotationdbi)
-       ("r-annotationforge" ,r-annotationforge)
-       ("r-biobase" ,r-biobase)
-       ("r-category" ,r-category)
-       ("r-go-db" ,r-go-db)
-       ("r-graph" ,r-graph)
-       ("r-rgraphviz" ,r-rgraphviz)
-       ("r-rbgl" ,r-rbgl)))
+     (list r-annotate
+           r-annotationdbi
+           r-annotationforge
+           r-biobase
+           r-category
+           r-go-db
+           r-graph
+           r-rgraphviz
+           r-rbgl))
     (home-page "https://bioconductor.org/packages/GOstats")
     (synopsis "Tools for manipulating GO and microarrays")
     (description
@@ -3227,25 +3447,25 @@ testing and other simple calculations.")
 (define-public r-gseabase
   (package
     (name "r-gseabase")
-    (version "1.54.0")
+    (version "1.56.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "GSEABase" version))
        (sha256
         (base32
-         "0946kkykms79mqnx262q20xzrrhv7cv723xh378335ff41qyf63n"))))
+         "1i8rryvagxk2pd8nl4a6yldwv82yx869nvv95jf8v00bna08f4d6"))))
     (properties `((upstream-name . "GSEABase")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotate" ,r-annotate)
-       ("r-annotationdbi" ,r-annotationdbi)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-graph" ,r-graph)
-       ("r-xml" ,r-xml)))
+     (list r-annotate
+           r-annotationdbi
+           r-biobase
+           r-biocgenerics
+           r-graph
+           r-xml))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/GSEABase")
     (synopsis "Gene set enrichment data structures and methods")
     (description
@@ -3256,17 +3476,17 @@ Enrichment Analysis} (GSEA).")
 (define-public r-hpar
   (package
     (name "r-hpar")
-    (version "1.34.0")
+    (version "1.36.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "hpar" version))
        (sha256
         (base32
-         "0q5pp04rq2gsh1kibvp8bvjkqc1kb46qpnj6agqp2vyqhrrfrm99"))))
+         "1inajapdhjxg0vwhsdnhfq22h3fv7ad7m1lv58y5v41p59av1w76"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/hpar/")
     (synopsis "Human Protein Atlas in R")
     (description "This package provides a simple interface to and data from
@@ -3276,26 +3496,24 @@ the Human Protein Atlas project.")
 (define-public r-rhtslib
   (package
     (name "r-rhtslib")
-    (version "1.24.0")
+    (version "1.26.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "Rhtslib" version))
        (sha256
         (base32
-         "0acpgv98529ic2i2k03knz05akb6h51wbz7sr5zgi8gk4nmawrlf"))))
+         "0pwmzwjf6agfp3bq6w8s3piwmzwjdd474qd8zmbzrm772qbadfr4"))))
     (properties `((upstream-name . "Rhtslib")))
     (build-system r-build-system)
     ;; Without this a temporary directory ends up in the Rhtslib.so binary,
     ;; which makes R abort the build.
     (arguments '(#:configure-flags '("--no-staged-install")))
     (propagated-inputs
-     `(("curl" ,curl)
-       ("zlib" ,zlib) ; packages using rhtslib need to link with zlib
-       ("r-zlibbioc" ,r-zlibbioc)))
+     (list curl zlib ; packages using rhtslib need to link with zlib
+           r-zlibbioc))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("r-knitr" ,r-knitr)))
+     (list pkg-config r-knitr))
     (home-page "https://github.com/nhayden/Rhtslib")
     (synopsis "High-throughput sequencing library as an R package")
     (description
@@ -3307,15 +3525,15 @@ of other R packages who wish to make use of HTSlib.")
 (define-public r-impute
   (package
     (name "r-impute")
-    (version "1.66.0")
+    (version "1.68.0")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "impute" version))
               (sha256
                (base32
-                "0pprkv25avxhllddcssvqvy3nibmqkfwaq4xnlhka7858gyiyd1k"))))
+                "0k6dil8ljgp5qr87m7hxli4igb36fbxiwczaqc5pi8mlfh70fqj5"))))
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (build-system r-build-system)
     (home-page "https://bioconductor.org/packages/impute")
     (synopsis "Imputation for microarray data")
@@ -3327,23 +3545,21 @@ microarray data, using nearest neighbor averaging.")
 (define-public r-interactivedisplaybase
   (package
     (name "r-interactivedisplaybase")
-    (version "1.30.0")
+    (version "1.32.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "interactiveDisplayBase" version))
        (sha256
         (base32
-         "00rgrrmglslgb6j7whp0m5dlyl4436r647br05rrpv8cxrmbs2iv"))))
+         "1pi887192k1jifb4k3pf2jn5hcl1xmmy6vwl22r9njsprdyb3kab"))))
     (properties
      `((upstream-name . "interactiveDisplayBase")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-dt" ,r-dt)
-       ("r-shiny" ,r-shiny)))
+     (list r-biocgenerics r-dt r-shiny))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/interactiveDisplayBase")
     (synopsis "Base package for web displays of Bioconductor objects")
     (description
@@ -3354,22 +3570,20 @@ Shiny-based display methods for Bioconductor objects.")
 (define-public r-keggrest
   (package
     (name "r-keggrest")
-    (version "1.32.0")
+    (version "1.34.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "KEGGREST" version))
        (sha256
         (base32
-         "15313d20v3ziyn52fhc6fbzcy1kxjkdx18124bxhdfd14f4aypcd"))))
+         "1np3i1k7rki9akh70156ggmid52yy0is9q5vd3s45ra7an0ap279"))))
     (properties `((upstream-name . "KEGGREST")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biostrings" ,r-biostrings)
-       ("r-httr" ,r-httr)
-       ("r-png" ,r-png)))
+     (list r-biostrings r-httr r-png))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/KEGGREST")
     (synopsis "Client-side REST access to KEGG")
     (description
@@ -3380,13 +3594,13 @@ Shiny-based display methods for Bioconductor objects.")
 (define-public r-limma
   (package
     (name "r-limma")
-    (version "3.48.3")
+    (version "3.50.0")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "limma" version))
               (sha256
                (base32
-                "0385ac0hvvml99krcgcpp6q7layjhzgp9xcxkcjrpfg5mjg1z4sx"))))
+                "05ypmax1s6y1nz42bxn61wxhzzw6185q633crzpdcbbz3dz4vgvy"))))
     (build-system r-build-system)
     (home-page "http://bioinf.wehi.edu.au/limma")
     (synopsis "Package for linear models for microarray and RNA-seq data")
@@ -3399,37 +3613,37 @@ different technologies, including microarrays, RNA-seq, and quantitative PCR.")
 (define-public r-methylkit
   (package
     (name "r-methylkit")
-    (version "1.18.0")
+    (version "1.20.0")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "methylKit" version))
               (sha256
                (base32
-                "147nag4rz2xpjkkf8rmhja9k4ixjj1hsb0lq3lw7mw6q67zxsvf3"))))
+                "02px46h2ynprss7kwll3i0jz0clrdg0bys70jacd432xw34nm2sx"))))
     (properties `((upstream-name . "methylKit")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)
-       ("r-emdbook" ,r-emdbook)
-       ("r-fastseg" ,r-fastseg)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-gtools" ,r-gtools)
-       ("r-iranges" ,r-iranges)
-       ("r-kernsmooth" ,r-kernsmooth)
-       ("r-limma" ,r-limma)
-       ("r-mclust" ,r-mclust)
-       ("r-mgcv" ,r-mgcv)
-       ("r-qvalue" ,r-qvalue)
-       ("r-r-utils" ,r-r-utils)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rhtslib" ,r-rhtslib)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-zlibbioc" ,r-zlibbioc)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr))) ; for vignettes
+     (list r-data-table
+           r-emdbook
+           r-fastseg
+           r-genomeinfodb
+           r-genomicranges
+           r-gtools
+           r-iranges
+           r-kernsmooth
+           r-limma
+           r-mclust
+           r-mgcv
+           r-qvalue
+           r-r-utils
+           r-rcpp
+           r-rhtslib
+           r-rsamtools
+           r-rtracklayer
+           r-s4vectors
+           r-zlibbioc))
+    (native-inputs
+     (list r-knitr)) ; for vignettes
     (home-page "https://github.com/al2na/methylKit")
     (synopsis
      "DNA methylation analysis from high-throughput bisulfite sequencing results")
@@ -3457,12 +3671,12 @@ TAB-Seq.")
     (properties `((upstream-name . "motifRG")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biostrings" ,r-biostrings)
-       ("r-bsgenome" ,r-bsgenome)
-       ("r-bsgenome-hsapiens-ucsc-hg19" ,r-bsgenome-hsapiens-ucsc-hg19)
-       ("r-iranges" ,r-iranges)
-       ("r-seqlogo" ,r-seqlogo)
-       ("r-xvector" ,r-xvector)))
+     (list r-biostrings
+           r-bsgenome
+           r-bsgenome-hsapiens-ucsc-hg19
+           r-iranges
+           r-seqlogo
+           r-xvector))
     (home-page "https://bioconductor.org/packages/motifRG")
     (synopsis "Discover motifs in high throughput sequencing data")
     (description
@@ -3473,41 +3687,42 @@ throughput genetic sequencing data sets using regression methods.")
 (define-public r-mutationalpatterns
   (package
     (name "r-mutationalpatterns")
-    (version "3.2.0")
+    (version "3.4.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "MutationalPatterns" version))
        (sha256
         (base32
-         "0433i4xbz8hrfaj8fxgzps3x8dqrl5vgwzg7qmp4cy5sb1lw5wvs"))))
-    (build-system r-build-system)
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
-    (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-biostrings" ,r-biostrings)
-       ("r-bsgenome" ,r-bsgenome)
-       ;; These two packages are suggested packages
-       ("r-bsgenome-hsapiens-1000g" ,r-bsgenome-hsapiens-1000genomes-hs37d5)
-       ("r-bsgenome-hsapiens-ucsc-hg19" ,r-bsgenome-hsapiens-ucsc-hg19)
-       ("r-cowplot" ,r-cowplot)
-       ("r-dplyr" ,r-dplyr)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggalluvial" ,r-ggalluvial)
-       ("r-ggdendro" ,r-ggdendro)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-iranges" ,r-iranges)
-       ("r-magrittr" ,r-magrittr)
-       ("r-nmf" ,r-nmf)
-       ("r-pracma" ,r-pracma)
-       ("r-purrr" ,r-purrr)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-stringr" ,r-stringr)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)
-       ("r-variantannotation" ,r-variantannotation)))
+         "1n9rakj57yf17hay1bzvwc2h761yijmlflb3crg1bzwvmn32yhsl"))))
+    (build-system r-build-system)
+    (native-inputs
+     (list r-knitr))
+    (propagated-inputs
+     (list r-biocgenerics
+           r-biostrings
+           r-bsgenome
+           ;; These two packages are suggested packages
+           r-bsgenome-hsapiens-1000genomes-hs37d5
+           r-bsgenome-hsapiens-ucsc-hg19
+           r-cowplot
+           r-dplyr
+           r-genomeinfodb
+           r-genomicranges
+           r-ggalluvial
+           r-ggdendro
+           r-ggplot2
+           r-iranges
+           r-magrittr
+           r-nmf
+           r-pracma
+           r-purrr
+           r-rcolorbrewer
+           r-s4vectors
+           r-stringr
+           r-tibble
+           r-tidyr
+           r-variantannotation))
     (home-page "https://bioconductor.org/packages/MutationalPatterns/")
     (synopsis "Extract and visualize mutational patterns in genomic data")
     (description "This package provides an extensive toolset for the
@@ -3518,41 +3733,41 @@ in SNV base substitution data.")
 (define-public r-msnbase
   (package
     (name "r-msnbase")
-    (version "2.18.0")
+    (version "2.20.1")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "MSnbase" version))
        (sha256
         (base32
-         "1z7s17j6zgb70m0khyf9icqlnbnzlivca7vw7j0vxyw417ld9lkr"))))
+         "0ip614mdwisz2hlmyfgngysq1s3hajb88cgdmygfc8i6kyxjkjzl"))))
     (properties `((upstream-name . "MSnbase")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-affy" ,r-affy)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-digest" ,r-digest)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-impute" ,r-impute)
-       ("r-iranges" ,r-iranges)
-       ("r-lattice" ,r-lattice)
-       ("r-maldiquant" ,r-maldiquant)
-       ("r-mass" ,r-mass)
-       ("r-mscoreutils" ,r-mscoreutils)
-       ("r-mzid" ,r-mzid)
-       ("r-mzr" ,r-mzr)
-       ("r-pcamethods" ,r-pcamethods)
-       ("r-plyr" ,r-plyr)
-       ("r-protgenerics" ,r-protgenerics)
-       ("r-rcpp" ,r-rcpp)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-scales" ,r-scales)
-       ("r-vsn" ,r-vsn)
-       ("r-xml" ,r-xml)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-affy
+           r-biobase
+           r-biocgenerics
+           r-biocparallel
+           r-digest
+           r-ggplot2
+           r-impute
+           r-iranges
+           r-lattice
+           r-maldiquant
+           r-mass
+           r-mscoreutils
+           r-mzid
+           r-mzr
+           r-pcamethods
+           r-plyr
+           r-protgenerics
+           r-rcpp
+           r-s4vectors
+           r-scales
+           r-vsn
+           r-xml))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/lgatto/MSnbase")
     (synopsis "Base functions and classes for MS-based proteomics")
     (description
@@ -3563,14 +3778,14 @@ of mass spectrometry based proteomics data.")
 (define-public r-msnid
   (package
     (name "r-msnid")
-    (version "1.26.0")
+    (version "1.28.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "MSnID" version))
        (sha256
         (base32
-         "0r3vgigf4fk0xzfg8gcvad01jdh0fysh6x22m9qy77x6glyrxcj2"))))
+         "0dks5h3vp9ly8x24px2rl5blqicxybpxjnxvg2p1bwq8zvjkm38p"))))
     (properties `((upstream-name . "MSnID")))
     (build-system r-build-system)
     (arguments
@@ -3579,32 +3794,32 @@ of mass spectrometry based proteomics data.")
          (add-after 'unpack 'set-HOME
            (lambda _ (setenv "HOME" "/tmp"))))))
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-annotationhub" ,r-annotationhub)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocstyle" ,r-biocstyle)
-       ("r-biostrings" ,r-biostrings)
-       ("r-data-table" ,r-data-table)
-       ("r-doparallel" ,r-doparallel)
-       ("r-dplyr" ,r-dplyr)
-       ("r-foreach" ,r-foreach)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-iterators" ,r-iterators)
-       ("r-msnbase" ,r-msnbase)
-       ("r-msmstests" ,r-msmstests)
-       ("r-mzid" ,r-mzid)
-       ("r-mzr" ,r-mzr)
-       ("r-protgenerics" ,r-protgenerics)
-       ("r-purrr" ,r-purrr)
-       ("r-r-cache" ,r-r-cache)
-       ("r-rcpp" ,r-rcpp)
-       ("r-reshape2" ,r-reshape2)
-       ("r-rlang" ,r-rlang)
-       ("r-runit" ,r-runit)
-       ("r-stringr" ,r-stringr)
-       ("r-tibble" ,r-tibble)
-       ("r-xtable" ,r-xtable)))
+     (list r-annotationdbi
+           r-annotationhub
+           r-biobase
+           r-biocgenerics
+           r-biocstyle
+           r-biostrings
+           r-data-table
+           r-doparallel
+           r-dplyr
+           r-foreach
+           r-ggplot2
+           r-iterators
+           r-msnbase
+           r-msmstests
+           r-mzid
+           r-mzr
+           r-protgenerics
+           r-purrr
+           r-r-cache
+           r-rcpp
+           r-reshape2
+           r-rlang
+           r-runit
+           r-stringr
+           r-tibble
+           r-xtable))
     (home-page "https://bioconductor.org/packages/MSnID")
     (synopsis "Utilities for LC-MSn proteomics identifications")
     (description
@@ -3620,25 +3835,25 @@ and irregular enzymatic cleavages, mass measurement accuracy, etc.")
 (define-public r-mzid
   (package
     (name "r-mzid")
-    (version "1.30.0")
+    (version "1.32.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "mzID" version))
        (sha256
         (base32
-         "1wsy6frxa5602jqb1nlqv39mzgpid8wfyvb9m2jb6srv7p59rgys"))))
+         "0r001amd4m99cv0ixw38rpz0zv0xqb0qyvs16bz1i4a756391qri"))))
     (properties `((upstream-name . "mzID")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-doparallel" ,r-doparallel)
-       ("r-foreach" ,r-foreach)
-       ("r-iterators" ,r-iterators)
-       ("r-plyr" ,r-plyr)
-       ("r-protgenerics" ,r-protgenerics)
-       ("r-xml" ,r-xml)))
+     (list r-doparallel
+           r-foreach
+           r-iterators
+           r-plyr
+           r-protgenerics
+           r-xml))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/mzID")
     (synopsis "Parser for mzIdentML files")
     (description
@@ -3651,14 +3866,14 @@ specific parser.")
 (define-public r-mzr
   (package
     (name "r-mzr")
-    (version "2.26.1")
+    (version "2.28.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "mzR" version))
        (sha256
         (base32
-         "0z4cz6lir9gwzy0hxwv03wv36fkkfdb97p9wv4af020k0zkp3ipr"))
+         "1azq0wjjy6n5xc721gjz6afm43ajz15b4p34vgsdjzwg9qn1vrs1"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -3680,20 +3895,20 @@ specific parser.")
 -lboost_iostreams -lboost_thread -lboost_filesystem -lboost_chrono\n")))
              #t)))))
     (inputs
-     `(;; Our default boost package won't work here, unfortunately, even with
-       ;; mzR version 2.26.1.
-       ("boost" ,boost-for-mysql) ; use this instead of the bundled boost sources
-       ("zlib" ,zlib)))
-    (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-ncdf4" ,r-ncdf4)
-       ("r-protgenerics" ,r-protgenerics)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rhdf5lib" ,r-rhdf5lib)
-       ("r-zlibbioc" ,r-zlibbioc)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list ;; Our default boost package won't work here, unfortunately, even with
+           ;; mzR version 2.28.0.
+           boost-for-mysql ; use this instead of the bundled boost sources
+           zlib))
+    (propagated-inputs
+     (list r-biobase
+           r-biocgenerics
+           r-ncdf4
+           r-protgenerics
+           r-rcpp
+           r-rhdf5lib
+           r-zlibbioc))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/sneumann/mzR/")
     (synopsis "Parser for mass spectrometry data files")
     (description
@@ -3708,28 +3923,28 @@ previously been used in XCMS.")
 (define-public r-organismdbi
   (package
     (name "r-organismdbi")
-    (version "1.34.0")
+    (version "1.36.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "OrganismDbi" version))
        (sha256
         (base32
-         "0p8ccpdchdwci4kv9y07wdadzgms8nipvg6rm1rll35jcflnnkxi"))))
+         "0zp6x2iqhn9s3xp07yilnr6hn73acvkdai5xip4iiwjdlnfffj83"))))
     (properties `((upstream-name . "OrganismDbi")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocmanager" ,r-biocmanager)
-       ("r-dbi" ,r-dbi)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-graph" ,r-graph)
-       ("r-iranges" ,r-iranges)
-       ("r-rbgl" ,r-rbgl)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-annotationdbi
+           r-biobase
+           r-biocgenerics
+           r-biocmanager
+           r-dbi
+           r-genomicfeatures
+           r-genomicranges
+           r-graph
+           r-iranges
+           r-rbgl
+           r-s4vectors))
     (home-page "https://bioconductor.org/packages/OrganismDbi")
     (synopsis "Software to enable the smooth interfacing of database packages")
     (description "The package enables a simple unified interface to several
@@ -3740,21 +3955,18 @@ the fact that each of these packages implements a select methods.")
 (define-public r-pcamethods
   (package
     (name "r-pcamethods")
-    (version "1.84.0")
+    (version "1.86.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "pcaMethods" version))
        (sha256
         (base32
-         "1ccqsxn487dy92c2d1iffh9917z4zq5ia92zv2h6pi00jjc6ymb5"))))
+         "1fj2v6sna4lbw7ar9h93y2g4pzylqqp7760ih425gcai7s19xdrg"))))
     (properties `((upstream-name . "pcaMethods")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-mass" ,r-mass)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-biobase r-biocgenerics r-mass r-rcpp))
     (home-page "https://github.com/hredestig/pcamethods")
     (synopsis "Collection of PCA methods")
     (description
@@ -3770,14 +3982,14 @@ structure (pcaRes) to provide a common interface to the PCA results.")
 (define-public r-protgenerics
   (package
     (name "r-protgenerics")
-    (version "1.24.0")
+    (version "1.26.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "ProtGenerics" version))
        (sha256
         (base32
-         "1c79k8nc28782w5gxi7pkm8jmddq1hdw6khs9kgsp8dyk60ak6fq"))))
+         "0x53pk7h47gjza1q5pz7jb1qqhwa9z2rr5fr61qc92zl3mqk57m0"))))
     (properties `((upstream-name . "ProtGenerics")))
     (build-system r-build-system)
     (home-page "https://github.com/lgatto/ProtGenerics")
@@ -3790,19 +4002,18 @@ proteomics packages.")
 (define-public r-rbgl
   (package
     (name "r-rbgl")
-    (version "1.68.0")
+    (version "1.70.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "RBGL" version))
        (sha256
         (base32
-         "0l40ibf8g5s4ay83s92l198jjqc5l09hcmxqcjrpifvp5pjf9yy5"))))
+         "0k2p1lwdvix4n742a97lv988rx5kg8cvcmzgyzj0538n1nz0lxk0"))))
     (properties `((upstream-name . "RBGL")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bh" ,r-bh)
-       ("r-graph" ,r-graph)))
+     (list r-bh r-graph))
     (home-page "https://www.bioconductor.org/packages/RBGL")
     (synopsis "Interface to the Boost graph library")
     (description
@@ -3813,45 +4024,45 @@ the graph algorithms contained in the Boost library.")
 (define-public r-rcas
   (package
     (name "r-rcas")
-    (version "1.18.0")
+    (version "1.20.0")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "RCAS" version))
               (sha256
                (base32
-                "0l92v870ndna8zjqwzf22fb9vyhkh6942v4gaiqr1yc4qr521p5p"))))
+                "02zwz7c8ljmdcfxj54xns0a31sj616x63q63wxhxa1nb4dhgmvk7"))))
     (properties `((upstream-name . "RCAS")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-biostrings" ,r-biostrings)
-       ("r-bsgenome" ,r-bsgenome)
-       ("r-bsgenome-hsapiens-ucsc-hg19" ,r-bsgenome-hsapiens-ucsc-hg19)
-       ("r-cowplot" ,r-cowplot)
-       ("r-data-table" ,r-data-table)
-       ("r-dt" ,r-dt)
-       ("r-genomation" ,r-genomation)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggseqlogo" ,r-ggseqlogo)
-       ("r-gprofiler2" ,r-gprofiler2)
-       ("r-iranges" ,r-iranges)
-       ("r-knitr" ,r-knitr)
-       ("r-pbapply" ,r-pbapply)
-       ("r-pheatmap" ,r-pheatmap)
-       ("r-plotly" ,r-plotly)
-       ("r-plotrix" ,r-plotrix)
-       ("r-proxy" ,r-proxy)
-       ("r-ranger" ,r-ranger)
-       ("r-rsqlite" ,r-rsqlite)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("r-s4vectors" ,r-s4vectors)
-       ("pandoc" ,pandoc)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-biocgenerics
+           r-biostrings
+           r-bsgenome
+           r-bsgenome-hsapiens-ucsc-hg19
+           r-cowplot
+           r-data-table
+           r-dt
+           r-genomation
+           r-genomeinfodb
+           r-genomicfeatures
+           r-genomicranges
+           r-ggplot2
+           r-ggseqlogo
+           r-gprofiler2
+           r-iranges
+           r-knitr
+           r-pbapply
+           r-pheatmap
+           r-plotly
+           r-plotrix
+           r-proxy
+           r-ranger
+           r-rsqlite
+           r-rtracklayer
+           r-rmarkdown
+           r-s4vectors
+           pandoc))
+    (native-inputs
+     (list r-knitr))
     (synopsis "RNA-centric annotation system")
     (description
      "RCAS aims to be a standalone RNA-centric annotation system that provides
@@ -3863,27 +4074,27 @@ library implementing most of the pipeline's features.")
 (define-public r-regioner
   (package
     (name "r-regioner")
-    (version "1.24.0")
+    (version "1.26.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "regioneR" version))
        (sha256
         (base32
-         "0xzzaz3cl6pyxfsg0d931v8k15wbd05s5mnsb7igxldc5qqg3nsl"))))
+         "0y1mawzfvxrympc47q3isk96sl9d1bc8kdsxpm8rnhqg5bmgwya6"))))
     (properties `((upstream-name . "regioneR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biostrings" ,r-biostrings)
-       ("r-bsgenome" ,r-bsgenome)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-memoise" ,r-memoise)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-biostrings
+           r-bsgenome
+           r-genomeinfodb
+           r-genomicranges
+           r-iranges
+           r-memoise
+           r-rtracklayer
+           r-s4vectors))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/regioneR/")
     (synopsis "Association analysis of genomic regions")
     (description "This package offers a statistical framework based on
@@ -3894,39 +4105,39 @@ region sets and other genomic features.")
 (define-public r-reportingtools
   (package
     (name "r-reportingtools")
-    (version "2.32.1")
+    (version "2.34.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "ReportingTools" version))
        (sha256
         (base32
-         "0wq9y649dh1am6djzz0xlz42428xsgw2bdx1dknhdw2xbydmmx47"))))
+         "06kwf87h84xgswkrm7brmgr9aj1nf6cxp24hrfymkzq2pha5y5j7"))))
     (properties
      `((upstream-name . "ReportingTools")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotate" ,r-annotate)
-       ("r-annotationdbi" ,r-annotationdbi)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-category" ,r-category)
-       ("r-deseq2" ,r-deseq2)
-       ("r-edger" ,r-edger)
-       ("r-ggbio" ,r-ggbio)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gostats" ,r-gostats)
-       ("r-gseabase" ,r-gseabase)
-       ("r-hwriter" ,r-hwriter)
-       ("r-iranges" ,r-iranges)
-       ("r-knitr" ,r-knitr)
-       ("r-lattice" ,r-lattice)
-       ("r-limma" ,r-limma)
-       ("r-pfam-db" ,r-pfam-db)
-       ("r-r-utils" ,r-r-utils)
-       ("r-xml" ,r-xml)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-annotate
+           r-annotationdbi
+           r-biobase
+           r-biocgenerics
+           r-category
+           r-deseq2
+           r-edger
+           r-ggbio
+           r-ggplot2
+           r-gostats
+           r-gseabase
+           r-hwriter
+           r-iranges
+           r-knitr
+           r-lattice
+           r-limma
+           r-pfam-db
+           r-r-utils
+           r-xml))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/ReportingTools/")
     (synopsis "Tools for making reports in various formats")
     (description
@@ -3944,19 +4155,18 @@ browser.")
 (define-public r-rhdf5
   (package
     (name "r-rhdf5")
-    (version "2.36.0")
+    (version "2.38.0")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "rhdf5" version))
               (sha256
                (base32
-                "1a5kw9ry9cr258al0x3q0ss5xn1ymscdypx51vzzgzamhy7dqakz"))))
+                "13zm993l3i9f98gqdpxgsrzf9fgqppx2ajvrl0i3f7cvpifcgxqg"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rhdf5filters" ,r-rhdf5filters)
-       ("r-rhdf5lib" ,r-rhdf5lib)))
+     (list r-rhdf5filters r-rhdf5lib))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/rhdf5")
     (synopsis "HDF5 interface to R")
     (description
@@ -3972,22 +4182,22 @@ the available RAM.")
 (define-public r-rhdf5filters
   (package
     (name "r-rhdf5filters")
-    (version "1.4.0")
+    (version "1.6.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "rhdf5filters" version))
        (sha256
         (base32
-         "133v0s452acspi4dbf6gsa2xrr0qza86jdjjbpwhdv6zfd1djbgc"))))
+         "05b015pyp3g1crmm2d3ldsa7r5w0khmf87qbl4fv16r6pdggha78"))))
     (properties `((upstream-name . "rhdf5filters")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rhdf5lib" ,r-rhdf5lib)))
+     (list r-rhdf5lib))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/grimbough/rhdf5filters")
     (synopsis "HDF5 compression filters")
     (description
@@ -3998,13 +4208,13 @@ HDF5 datasets.")
 (define-public r-rsamtools
   (package
     (name "r-rsamtools")
-    (version "2.8.0")
+    (version "2.10.0")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "Rsamtools" version))
               (sha256
                (base32
-                "0arhh5bbx3pmxmkh5sjgczcswqy83d35r7cjhd2knpczdvrixaq5"))))
+                "0v6b3j45ivd9f04fpfs1vjwby5pi30mf5683bjxim01vi2krj9yh"))))
     (properties
      `((upstream-name . "Rsamtools")))
     (build-system r-build-system)
@@ -4018,16 +4228,16 @@ HDF5 datasets.")
              (substitute* "NAMESPACE"
                (("import\\(zlibbioc\\)") "")))))))
     (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)))
+     (list r-biocgenerics
+           r-biocparallel
+           r-biostrings
+           r-bitops
+           r-genomeinfodb
+           r-genomicranges
+           r-iranges
+           r-rhtslib
+           r-s4vectors
+           r-xvector))
     (home-page "https://bioconductor.org/packages/release/bioc/html/Rsamtools.html")
     (synopsis "Interface to samtools, bcftools, and tabix")
     (description
@@ -4053,11 +4263,7 @@ tab-delimited (tabix) files.")
     (properties `((upstream-name . "restfulr")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcurl" ,r-rcurl)
-       ("r-rjson" ,r-rjson)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-xml" ,r-xml)
-       ("r-yaml" ,r-yaml)))
+     (list r-rcurl r-rjson r-s4vectors r-xml r-yaml))
     (home-page "https://cran.r-project.org/package=restfulr")
     (synopsis "R interface to RESTful web services")
     (description
@@ -4067,13 +4273,13 @@ tab-delimited (tabix) files.")
 (define-public r-rtracklayer
   (package
     (name "r-rtracklayer")
-    (version "1.52.1")
+    (version "1.54.0")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "rtracklayer" version))
               (sha256
                (base32
-                "11w6dx09pb49lin1gr9q88xn7ixh9jd5z6m9z27djchm0nw10lx9"))))
+                "11bh9khra2qdmicppi6ya43kf8f1z13ak92vkl6nr5f20k54cphc"))))
     (build-system r-build-system)
     (arguments
      `(#:phases
@@ -4085,24 +4291,24 @@ tab-delimited (tabix) files.")
              (substitute* "NAMESPACE"
                (("import\\(zlibbioc\\)") "")))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("zlib" ,zlib)))
-    (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocio" ,r-biocio)
-       ("r-biostrings" ,r-biostrings)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-rcurl" ,r-rcurl)
-       ("r-restfulr" ,r-restfulr)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-xml" ,r-xml)
-       ("r-xvector" ,r-xvector)
-       ("r-zlibbioc" ,r-zlibbioc)))
+     (list zlib))
+    (propagated-inputs
+     (list r-biocgenerics
+           r-biocio
+           r-biostrings
+           r-genomeinfodb
+           r-genomicalignments
+           r-genomicranges
+           r-iranges
+           r-rcurl
+           r-restfulr
+           r-rsamtools
+           r-s4vectors
+           r-xml
+           r-xvector
+           r-zlibbioc))
     (home-page "https://bioconductor.org/packages/rtracklayer")
     (synopsis "R interface to genome browsers and their annotation tracks")
     (description
@@ -4128,13 +4334,13 @@ as well as query and modify the browser state, such as the current viewport.")
     (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)))
+     (list r-gsa
+           r-impute
+           r-matrixstats
+           r-openxlsx
+           r-shiny
+           r-shinyfiles))
+    (native-inputs (list gfortran))
     (home-page "https://statweb.stanford.edu/~tibs/SAM/")
     (synopsis "Significance analysis of Microarrays")
     (description
@@ -4143,21 +4349,61 @@ differential expression analysis, RNAseq data and related problems.")
     ;; Any version of the LGPL
     (license license:lgpl3+)))
 
+(define-public r-scdblfinder
+  (package
+    (name "r-scdblfinder")
+    (version "1.8.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (bioconductor-uri "scDblFinder" version))
+       (sha256
+        (base32 "0wzmmcsnjybgzbc5rn4i72n26j9n59dfy1zg8ij0q8p4276jplsd"))))
+    (properties `((upstream-name . "scDblFinder")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-biocgenerics
+           r-biocneighbors
+           r-biocparallel
+           r-biocsingular
+           r-bluster
+           r-delayedarray
+           r-igraph
+           r-mass
+           r-matrix
+           r-s4vectors
+           r-scater
+           r-scran
+           r-scuttle
+           r-singlecellexperiment
+           r-summarizedexperiment
+           r-xgboost))
+    (native-inputs (list r-knitr))
+    (home-page "https://github.com/plger/scDblFinder")
+    (synopsis "Detect multiplets in single-cell RNA sequencing data")
+    (description
+     "The scDblFinder package gathers various methods for the detection and
+handling of doublets/multiplets in single-cell RNA sequencing data (i.e.
+multiple cells captured within the same droplet or reaction volume).  It
+includes methods formerly found in the scran package, and the new fast and
+comprehensive scDblFinder method.")
+    (license license:gpl3)))
+
 (define-public r-seqlogo
   (package
     (name "r-seqlogo")
-    (version "1.58.0")
+    (version "1.60.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "seqLogo" version))
        (sha256
         (base32
-         "1253sj1hc6bbrff0iv5xa3v9znqvisll0fy6fdjka9c778fn4mcp"))))
+         "013hwj2lp29nqa8mkvm25aliarg0k725crg4cpsbj0iiskyrs6rl"))))
     (properties `((upstream-name . "seqLogo")))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/seqLogo")
     (synopsis "Sequence logos for DNA sequence alignments")
     (description
@@ -4169,22 +4415,18 @@ Stephens (1990).")
 (define-public r-seqpattern
   (package
     (name "r-seqpattern")
-    (version "1.24.0")
+    (version "1.26.0")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "seqPattern" version))
               (sha256
                (base32
-                "0h74z84zyvfzclsm0g13b95hirn99185wc6lp53jkzah9yyi59ay"))))
+                "1mik575qaxw9h9qyjn971207pfgbc8p1mx60jrb20jbrrihgg2na"))))
     (properties
      `((upstream-name . "seqPattern")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biostrings" ,r-biostrings)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-kernsmooth" ,r-kernsmooth)
-       ("r-plotrix" ,r-plotrix)))
+     (list r-biostrings r-genomicranges r-iranges r-kernsmooth r-plotrix))
     (home-page "https://bioconductor.org/packages/seqPattern")
     (synopsis "Visualising oligonucleotide patterns and motif occurrences")
     (description
@@ -4196,35 +4438,35 @@ reference point and sorted by a user defined feature.")
 (define-public r-shortread
   (package
     (name "r-shortread")
-    (version "1.50.0")
+    (version "1.52.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "ShortRead" version))
        (sha256
         (base32
-         "0zqinw3c6h5v1c5nhzkiziirws16nbviccgw8nj2d22r33dbqwp3"))))
+         "1p17v15wd3v6w9ligpjjk28vy8k2ql57y2hhm8y6vnv9y3nagjsx"))))
     (properties `((upstream-name . "ShortRead")))
     (build-system r-build-system)
     (inputs
-     `(("zlib" ,zlib)))
-    (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-biostrings" ,r-biostrings)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-rhtslib" ,r-rhtslib)
-       ("r-hwriter" ,r-hwriter)
-       ("r-iranges" ,r-iranges)
-       ("r-lattice" ,r-lattice)
-       ("r-latticeextra" ,r-latticeextra)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-xvector" ,r-xvector)
-       ("r-zlibbioc" ,r-zlibbioc)))
+     (list zlib))
+    (propagated-inputs
+     (list r-biobase
+           r-biocgenerics
+           r-biocparallel
+           r-biostrings
+           r-genomeinfodb
+           r-genomicalignments
+           r-genomicranges
+           r-rhtslib
+           r-hwriter
+           r-iranges
+           r-lattice
+           r-latticeextra
+           r-rsamtools
+           r-s4vectors
+           r-xvector
+           r-zlibbioc))
     (home-page "https://bioconductor.org/packages/ShortRead")
     (synopsis "FASTQ input and manipulation tools")
     (description
@@ -4239,34 +4481,34 @@ ungapped alignment formats.")
 (define-public r-simplifyenrichment
   (package
     (name "r-simplifyenrichment")
-    (version "1.2.0")
+    (version "1.4.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "simplifyEnrichment" version))
        (sha256
         (base32
-         "0rqa414kvyjjmj4932zk39rqa14z13b57rkrxdrf16jmq2r437vh"))))
+         "05d9yjd8s7q1q78qmnx5xfrz9ppswc2cpfmjj47d338w783lwk98"))))
     (properties
      `((upstream-name . "simplifyEnrichment")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-circlize" ,r-circlize)
-       ("r-clue" ,r-clue)
-       ("r-cluster" ,r-cluster)
-       ("r-complexheatmap" ,r-complexheatmap)
-       ("r-digest" ,r-digest)
-       ("r-getoptlong" ,r-getoptlong)
-       ("r-go-db" ,r-go-db)
-       ("r-gosemsim" ,r-gosemsim)
-       ("r-matrix" ,r-matrix)
-       ("r-org-hs-eg-db" ,r-org-hs-eg-db)
-       ("r-proxyc" ,r-proxyc)
-       ("r-slam" ,r-slam)
-       ("r-tm" ,r-tm)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-annotationdbi
+           r-biocgenerics
+           r-circlize
+           r-clue
+           r-cluster
+           r-complexheatmap
+           r-digest
+           r-getoptlong
+           r-go-db
+           r-gosemsim
+           r-matrix
+           r-org-hs-eg-db
+           r-proxyc
+           r-slam
+           r-tm))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/jokergoo/simplifyEnrichment")
     (synopsis "Simplify functional enrichment results")
     (description "This package provides a new clustering algorithm, binary
@@ -4275,27 +4517,74 @@ this package.  It also provides functionalities for visualizing, summarizing
 and comparing the clusterings.")
     (license license:expat)))
 
+(define-public r-transcriptr
+  (package
+    (name "r-transcriptr")
+    (version "1.22.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (bioconductor-uri "transcriptR" version))
+       (sha256
+        (base32 "1p5l2z3szx3qh02x7r81ajl7yc5wqsri6q6pzw83livmalcli5yy"))))
+    (properties `((upstream-name . "transcriptR")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-biocgenerics
+           r-caret
+           r-chipseq
+           r-e1071
+           r-genomeinfodb
+           r-genomicalignments
+           r-genomicfeatures
+           r-genomicranges
+           r-ggplot2
+           r-iranges
+           r-proc
+           r-reshape2
+           r-rsamtools
+           r-rtracklayer
+           r-s4vectors))
+    (native-inputs (list r-knitr))
+    (home-page "https://bioconductor.org/packages/transcriptR")
+    (synopsis "Primary transcripts detection and quantification")
+    (description
+     "The differences in the RNA types being sequenced have an impact on the
+resulting sequencing profiles.  mRNA-seq data is enriched with reads derived
+from exons, while GRO-, nucRNA- and chrRNA-seq demonstrate a substantial
+broader coverage of both exonic and intronic regions.  The presence of
+intronic reads in GRO-seq type of data makes it possible to use it to
+computationally identify and quantify all de novo continuous regions of
+transcription distributed across the genome.  This type of data, however, is
+more challenging to interpret and less common practice compared to mRNA-seq.
+One of the challenges for primary transcript detection concerns the
+simultaneous transcription of closely spaced genes, which needs to be properly
+divided into individually transcribed units.  The R package transcriptR
+combines RNA-seq data with ChIP-seq data of histone modifications that mark
+active Transcription Start Sites (TSSs), such as, H3K4me3 or H3K9/14Ac to
+overcome this challenge.  The advantage of this approach over the use of, for
+example, gene annotations is that this approach is data driven and therefore
+able to deal also with novel and case specific events.")
+    (license license:gpl3)))
+
 (define-public r-trajectoryutils
   (package
     (name "r-trajectoryutils")
-    (version "1.0.0")
+    (version "1.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "TrajectoryUtils" version))
        (sha256
         (base32
-         "1b7mg3ypp1ay98cav47h9vn692lx0n9b5b0hpansgnkr5prb823b"))))
+         "0pzm1h69bg04a2v09r8c6pb3pix6f3n5dylvbv7wsp574qfaqyd1"))))
     (properties
      `((upstream-name . "TrajectoryUtils")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-igraph" ,r-igraph)
-       ("r-matrix" ,r-matrix)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-singlecellexperiment" ,r-singlecellexperiment)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-igraph r-matrix r-s4vectors r-singlecellexperiment
+           r-summarizedexperiment))
+    (native-inputs (list r-knitr))
     (home-page "https://bioconductor.org/packages/TrajectoryUtils")
     (synopsis "Single-cell trajectory analysis utilities")
     (description
@@ -4308,24 +4597,24 @@ structures to hold pseudotime inference results.")
 (define-public r-slingshot
   (package
    (name "r-slingshot")
-   (version "2.0.0")
+   (version "2.2.0")
    (source (origin
             (method url-fetch)
             (uri (bioconductor-uri "slingshot" version))
             (sha256
              (base32
-              "1aqsz2kxwax8d8d5iv3zk5hlyk5aya1wbxs1wky2rgccw4d35whx"))))
+              "081kp9b0lpw2xq9xvd2kykqqrqcj322mp7xa44xc3kf0nzsivqfa"))))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-igraph" ,r-igraph)
-      ("r-matrixstats" ,r-matrixstats)
-      ("r-princurve" ,r-princurve)
-      ("r-s4vectors" ,r-s4vectors)
-      ("r-singlecellexperiment" ,r-singlecellexperiment)
-      ("r-summarizedexperiment" ,r-summarizedexperiment)
-      ("r-trajectoryutils" ,r-trajectoryutils)))
+    (list r-igraph
+          r-matrixstats
+          r-princurve
+          r-s4vectors
+          r-singlecellexperiment
+          r-summarizedexperiment
+          r-trajectoryutils))
    (native-inputs
-    `(("r-knitr" ,r-knitr)))
+    (list r-knitr))
    (home-page "https://bioconductor.org/packages/slingshot")
    (synopsis "Tools for ordering single-cell sequencing")
    (description "This package provides functions for inferring continuous,
@@ -4337,34 +4626,67 @@ events and allows for the incorporation of prior knowledge through supervised
 graph construction.")
    (license license:artistic2.0)))
 
+(define-public r-stringdb
+  (package
+    (name "r-stringdb")
+    (version "2.6.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (bioconductor-uri "STRINGdb" version))
+       (sha256
+        (base32 "1hvb73anhbf1g82nn5m11s783z6ihvlavf7p30w29qggxggnl6lm"))))
+    (properties `((upstream-name . "STRINGdb")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-gplots
+           r-hash
+           r-igraph
+           r-plotrix
+           r-plyr
+           r-png
+           r-rcolorbrewer
+           r-rcurl
+           r-sqldf))
+    (home-page "https://git.bioconductor.org/packages/STRINGdb")
+    (synopsis "Search tool for the retrieval of interacting proteins database")
+    (description
+     "The @code{STRINGdb} package provides an R interface to the STRING
+protein-protein interactions database.  @url{https://www.string-db.org,
+STRING} is a database of known and predicted protein-protein interactions.
+The interactions include direct (physical) and indirect (functional)
+associations.  Each interaction is associated with a combined confidence score
+that integrates the various evidences.")
+    (license license:gpl2)))
+
 (define-public r-structuralvariantannotation
   (package
     (name "r-structuralvariantannotation")
-    (version "1.8.2")
+    (version "1.10.1")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "StructuralVariantAnnotation" version))
        (sha256
-        (base32 "04ac4mjh3pgdlws0aiacqg0vd7bhg890w44r7b90p947c3rk1mfw"))))
-    (build-system r-build-system)
-    (propagated-inputs
-     `(("r-assertthat" ,r-assertthat)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biostrings" ,r-biostrings)
-       ("r-dplyr" ,r-dplyr)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-rlang" ,r-rlang)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-stringr" ,r-stringr)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-variantannotation" ,r-variantannotation)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+        (base32 "009l27kb9gvwwf57dwxfribhfhvn4z5pw8yc847l6pkbzqggx678"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-assertthat
+           r-biocgenerics
+           r-biostrings
+           r-dplyr
+           r-genomeinfodb
+           r-genomicfeatures
+           r-genomicranges
+           r-iranges
+           r-rlang
+           r-rtracklayer
+           r-s4vectors
+           r-stringr
+           r-summarizedexperiment
+           r-variantannotation))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/StructuralVariantAnnotation/")
     (synopsis "R package designed to simplify structural variant analysis")
     (description
@@ -4377,28 +4699,28 @@ involving two separate genomic loci encoded as GRanges objects.")
 (define-public r-summarizedexperiment
   (package
     (name "r-summarizedexperiment")
-    (version "1.22.0")
+    (version "1.24.0")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "SummarizedExperiment" version))
               (sha256
                (base32
-                "16np5ik6jgbi68mhlib6yskywwbaa50mlr7m3sh1hqk889whfn1g"))))
+                "0qpnx2aii9vs7fcp0ax5j77ysbhi4qhjhm35vnygs3isbrjn925a"))))
     (properties
      `((upstream-name . "SummarizedExperiment")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-delayedarray" ,r-delayedarray)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-matrix" ,r-matrix)
-       ("r-matrixgenerics" ,r-matrixgenerics)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-biobase
+           r-biocgenerics
+           r-delayedarray
+           r-genomeinfodb
+           r-genomicranges
+           r-iranges
+           r-matrix
+           r-matrixgenerics
+           r-s4vectors))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/SummarizedExperiment")
     (synopsis "Container for representing genomic ranges by sample")
     (description
@@ -4411,22 +4733,22 @@ samples.")
 (define-public r-sva
   (package
     (name "r-sva")
-    (version "3.40.0")
+    (version "3.42.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "sva" version))
        (sha256
         (base32
-         "12jkcybdfspabh7x124d44l9fj1hwwg3gvcqxvz5wpkiflc2vkji"))))
+         "0clzid9di2qfgc5bvnqx312k3inj1lc599ckqkllvr894wxb7mdj"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-edger" ,r-edger)
-       ("r-genefilter" ,r-genefilter)
-       ("r-mgcv" ,r-mgcv)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-limma" ,r-limma)))
+     (list r-edger
+           r-genefilter
+           r-mgcv
+           r-biocparallel
+           r-matrixstats
+           r-limma))
     (home-page "https://bioconductor.org/packages/sva")
     (synopsis "Surrogate variable analysis")
     (description
@@ -4442,46 +4764,32 @@ unmodeled, or latent sources of noise.")
 (define-public r-systempiper
   (package
     (name "r-systempiper")
-    (version "1.26.3")
+    (version "2.0.5")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "systemPipeR" version))
        (sha256
         (base32
-         "01l35l5zj87qkarrbal9la6kshk3j7k8hy3iimv3gdnnz4axmvs7"))))
+         "1j91pyfjsqngxxlxjqc477pznlfax4vayrks2q12rxw76ija80hf"))))
     (properties `((upstream-name . "systemPipeR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotate" ,r-annotate)
-       ("r-assertthat" ,r-assertthat)
-       ("r-batchtools" ,r-batchtools)
-       ("r-biostrings" ,r-biostrings)
-       ("r-crayon" ,r-crayon)
-       ("r-deseq2" ,r-deseq2)
-       ("r-dot" ,r-dot)
-       ("r-edger" ,r-edger)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-go-db" ,r-go-db)
-       ("r-gostats" ,r-gostats)
-       ("r-iranges" ,r-iranges)
-       ("r-limma" ,r-limma)
-       ("r-magrittr" ,r-magrittr)
-       ("r-pheatmap" ,r-pheatmap)
-       ("r-rjson" ,r-rjson)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-rsvg" ,r-rsvg)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-shortread" ,r-shortread)
-       ("r-stringr" ,r-stringr)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-testthat" ,r-testthat)
-       ("r-yaml" ,r-yaml)
-       ("r-variantannotation" ,r-variantannotation)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-biocgenerics
+           r-biostrings
+           r-crayon
+           r-genomicranges
+           r-ggplot2
+           r-htmlwidgets
+           r-magrittr
+           r-rsamtools
+           r-s4vectors
+           r-shortread
+           r-stringr
+           r-summarizedexperiment
+           r-yaml))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/tgirke/systemPipeR")
     (synopsis "Next generation sequencing workflow and reporting environment")
     (description
@@ -4499,26 +4807,26 @@ annotation infrastructure.")
 (define-public r-topgo
   (package
     (name "r-topgo")
-    (version "2.44.0")
+    (version "2.46.0")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "topGO" version))
               (sha256
                (base32
-                "1ggi7yrhkyi85p3sfj3yd95n9mzq1xpff28ixa4dl9yzasks1v5a"))))
+                "01vykf8bzwm2k7cfj09r6il6qaycjy10wpaxbn13f21p66r5nlm2"))))
     (properties
      `((upstream-name . "topGO")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-dbi" ,r-dbi)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-go-db" ,r-go-db)
-       ("r-graph" ,r-graph)
-       ("r-lattice" ,r-lattice)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-sparsem" ,r-sparsem)))
+     (list r-annotationdbi
+           r-dbi
+           r-biobase
+           r-biocgenerics
+           r-go-db
+           r-graph
+           r-lattice
+           r-matrixstats
+           r-sparsem))
     (home-page "https://bioconductor.org/packages/topGO")
     (synopsis "Enrichment analysis for gene ontology")
     (description
@@ -4532,16 +4840,16 @@ dependencies between GO terms can be implemented and applied.")
 (define-public r-tximport
   (package
     (name "r-tximport")
-    (version "1.20.0")
+    (version "1.22.0")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "tximport" version))
               (sha256
                (base32
-                "0ip2yr0zspf2aagskxl4dwncr48dw5qb90an3sswnnh2dqdb82if"))))
+                "0w6pr7s9j8l4fpn3przbfrsyxvzxc3ficgsychvhq3bami9np8g4"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/tximport")
     (synopsis "Import and summarize transcript-level estimates for gene-level analysis")
     (description
@@ -4553,37 +4861,70 @@ provided as a matrix which can be used as an offset for different expression
 of gene-level counts.")
     (license license:gpl2+)))
 
+;; This is a CRAN package, but it depends on a Bioconductor package.
+(define-public r-valr
+  (package
+    (name "r-valr")
+    (version "0.6.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "valr" version))
+       (sha256
+        (base32
+         "0dd41irvibh6rwi52bw4zg4m7wpyihlp1kdkb8fdji3csw2fiz4k"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-broom
+           r-dplyr
+           r-ggplot2
+           r-rcpp
+           r-readr
+           r-rlang
+           r-rtracklayer ;bioconductor package
+           r-stringr
+           r-tibble))
+    (native-inputs
+     (list r-knitr))
+    (home-page "https://github.com/rnabioco/valr")
+    (synopsis "Genome interval arithmetic in R")
+    (description
+     "This package enables you to read and manipulate genome intervals and
+signals.  It provides functionality similar to command-line tool suites within
+R, enabling interactive analysis and visualization of genome-scale data.")
+    (license license:expat)))
+
 (define-public r-variantannotation
   (package
     (name "r-variantannotation")
-    (version "1.38.0")
+    (version "1.40.0")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "VariantAnnotation" version))
               (sha256
                (base32
-                "0c9r00j8a3bs6n0dv4wi17jc1ljzvr3r2bi4h9axhcsf2ip906rh"))))
+                "1r9kayp0hxcwls08lv2fh0cmf9ks0lqx3k31c1zn4asw4dyqpgva"))))
     (properties
      `((upstream-name . "VariantAnnotation")))
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biostrings" ,r-biostrings)
-       ("r-bsgenome" ,r-bsgenome)
-       ("r-dbi" ,r-dbi)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-matrixgenerics" ,r-matrixgenerics)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-rhtslib" ,r-rhtslib)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-xvector" ,r-xvector)
-       ("r-zlibbioc" ,r-zlibbioc)))
+     (list r-annotationdbi
+           r-biobase
+           r-biocgenerics
+           r-biostrings
+           r-bsgenome
+           r-dbi
+           r-genomeinfodb
+           r-genomicfeatures
+           r-genomicranges
+           r-iranges
+           r-matrixgenerics
+           r-summarizedexperiment
+           r-rhtslib
+           r-rsamtools
+           r-rtracklayer
+           r-s4vectors
+           r-xvector
+           r-zlibbioc))
     (build-system r-build-system)
     (home-page "https://bioconductor.org/packages/VariantAnnotation")
     (synopsis "Package for annotation of genetic variants")
@@ -4594,23 +4935,19 @@ coding changes and predict coding outcomes.")
 (define-public r-vsn
   (package
     (name "r-vsn")
-    (version "3.60.0")
+    (version "3.62.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "vsn" version))
        (sha256
         (base32
-         "0nppph3kv8z83368snb8s3n4vcqj829yyi1kh4q09qvq18rhvssv"))))
+         "03p2wdjbjnrn1ddyz0fbn04mdxpsmv83qhh3apj6azshl0bs1j2x"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-affy" ,r-affy)
-       ("r-biobase" ,r-biobase)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-lattice" ,r-lattice)
-       ("r-limma" ,r-limma)))
+     (list r-affy r-biobase r-ggplot2 r-lattice r-limma))
     (native-inputs
-     `(("r-knitr" ,r-knitr))) ; for vignettes
+     (list r-knitr)) ; for vignettes
     (home-page "https://bioconductor.org/packages/release/bioc/html/vsn.html")
     (synopsis "Variance stabilization and calibration for microarray data")
     (description
@@ -4627,16 +4964,79 @@ their variance is independent of the mean, and they are usually more sensitive
 and specific in detecting differential transcription.")
     (license license:artistic2.0)))
 
+(define-public r-xina
+  (package
+    (name "r-xina")
+    (version "1.12.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (bioconductor-uri "XINA" version))
+       (sha256
+        (base32 "14j1rn3p7i0rlqkbbg0a6pyhb97ifzvsbw6vfxw9pna7zv7rbhsp"))))
+    (properties `((upstream-name . "XINA")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-alluvial
+           r-ggplot2
+           r-gridextra
+           r-igraph
+           r-mclust
+           r-plyr
+           r-stringdb))
+    (native-inputs (list r-knitr))
+    (home-page "https://git.bioconductor.org/packages/XINA")
+    (synopsis "Identifying proteins that exhibit similar patterns")
+    (description
+     "The aim of @code{XINA} is to determine which proteins exhibit similar
+patterns within and across experimental conditions, since proteins with
+co-abundance patterns may have common molecular functions.  @code{XINA} imports
+multiple datasets, tags dataset in silico, and combines the data for subsequent
+subgrouping into multiple clusters.  The result is a single output depicting
+the variation across all conditions.  @code{XINA} not only extracts
+coabundance profiles within and across experiments, but also incorporates
+protein-protein interaction databases and integrative resources such as
+@dfn{Kyoto encyclopedia of genes and genomes} (KEGG) to infer interactors and
+molecular functions, respectively, and produces intuitive graphical outputs.")
+    (license license:gpl3)))
+
+(define-public r-xmapbridge
+  (package
+    (name "r-xmapbridge")
+    (version "1.52.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (bioconductor-uri "xmapbridge" version))
+       (sha256
+        (base32 "1zsqhisbq6f9qgw9f0a6ixxh635h3qm17117yfns5nnfw73ndlgi"))))
+    (properties `((upstream-name . "xmapbridge")))
+    (build-system r-build-system)
+    (home-page "https://git.bioconductor.org/packages/xmapbridge")
+    (synopsis "Display numeric data in the web based genome browser X:MAP")
+    (description
+     "The package @code{xmapbridge} can plot graphs in the X:Map genome
+browser.  X:Map uses the Google Maps API to provide a scrollable view of the
+genome.  It supports a number of species, and can be accessed at
+@url{http://xmap.picr.man.ac.uk}.  This package exports plotting files in a
+suitable format.  Graph plotting in R is done using calls to the functions
+@code{xmap.plot} and @code{xmap.points}, which have parameters that aim to be
+similar to those used by the standard plot methods in R.  These result in data
+being written to a set of files (in a specific directory structure) that
+contain the data to be displayed, as well as some additional meta-data
+describing each of the graphs.")
+    (license license:lgpl3)))
+
 (define-public r-xvector
   (package
     (name "r-xvector")
-    (version "0.32.0")
+    (version "0.34.0")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "XVector" version))
               (sha256
                (base32
-                "1cw34gd9iaspl0v737xl7rngq63zrj03a5ngai15ggrnv1sq2aqr"))))
+                "07r4qgmnifw9jk2srjg0cvl310j0f9y35jrg0zqhlvhmyhg6n2c0"))))
     (properties
      `((upstream-name . "XVector")))
     (build-system r-build-system)
@@ -4651,11 +5051,9 @@ and specific in detecting differential transcription.")
                (("import\\(zlibbioc\\)") ""))
              #t)))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-iranges" ,r-iranges)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-biocgenerics r-iranges r-s4vectors))
     (home-page "https://bioconductor.org/packages/XVector")
     (synopsis "Representation and manpulation of external sequences")
     (description
@@ -4666,13 +5064,13 @@ and specific in detecting differential transcription.")
 (define-public r-zlibbioc
   (package
     (name "r-zlibbioc")
-    (version "1.38.0")
+    (version "1.40.0")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "zlibbioc" version))
               (sha256
                (base32
-                "1dv5bf12kzk1yzyfs3g5syim16sbi44kalvzj2i2xcnxnl6x60ip"))))
+                "0a0dl7z58zxdj6938zbxixphgljj1giylk1nd05bb7qsccmp0xhj"))))
     (properties
      `((upstream-name . "zlibbioc")))
     (build-system r-build-system)
@@ -4682,25 +5080,57 @@ and specific in detecting differential transcription.")
 libraries for systems that do not have these available via other means.")
     (license license:artistic2.0)))
 
+(define-public r-zellkonverter
+  (package
+    (name "r-zellkonverter")
+    (version "1.4.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (bioconductor-uri "zellkonverter" version))
+       (sha256
+        (base32 "1ihp2f23lpdfgf3qliy22vrq8czm353hyhqf74r5r712190k6pgg"))))
+    (properties `((upstream-name . "zellkonverter")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-basilisk
+           r-cli
+           r-delayedarray
+           r-matrix
+           r-reticulate
+           r-s4vectors
+           r-singlecellexperiment
+           r-summarizedexperiment))
+    (native-inputs (list r-knitr))
+    (home-page "https://github.com/theislab/zellkonverter")
+    (synopsis "Conversion between AnnData and single-cell experiments objects")
+    (description
+     "This package provides methods to convert between Python AnnData objects
+and SingleCellExperiment objects.  These are primarily intended for use by
+downstream Bioconductor packages that wrap Python methods for single-cell data
+analysis.  It also includes functions to read and write H5AD files used for
+saving AnnData objects to disk.")
+    (license license:expat)))
+
 (define-public r-geneplotter
   (package
     (name "r-geneplotter")
-    (version "1.70.0")
+    (version "1.72.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "geneplotter" version))
        (sha256
         (base32
-         "1d085lfa3yif5wkys1fb0zzgg0cqwd1y18vasgqqdr6rva075d4z"))))
+         "1b7ngp9l00vrymx3d3nsda546s7p4ifr90idn3x2v4ilf38rfhp8"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotate" ,r-annotate)
-       ("r-annotationdbi" ,r-annotationdbi)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-lattice" ,r-lattice)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)))
+     (list r-annotate
+           r-annotationdbi
+           r-biobase
+           r-biocgenerics
+           r-lattice
+           r-rcolorbrewer))
     (home-page "https://bioconductor.org/packages/geneplotter")
     (synopsis "Graphics functions for genomic data")
     (description
@@ -4710,30 +5140,30 @@ libraries for systems that do not have these available via other means.")
 (define-public r-oligoclasses
   (package
     (name "r-oligoclasses")
-    (version "1.54.0")
+    (version "1.56.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "oligoClasses" version))
        (sha256
         (base32
-         "1nsfyfpj264h6y322pzz0i001b0m862j3skbq5rjwlrj1p8j2gi7"))))
+         "1ia2f19swiwb0552nfwkai4gl0av07cj75b6jwiviqa1bli09264"))))
     (properties `((upstream-name . "oligoClasses")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-affyio" ,r-affyio)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocmanager" ,r-biocmanager)
-       ("r-biostrings" ,r-biostrings)
-       ("r-dbi" ,r-dbi)
-       ("r-ff" ,r-ff)
-       ("r-foreach" ,r-foreach)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-rsqlite" ,r-rsqlite)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
+     (list r-affyio
+           r-biobase
+           r-biocgenerics
+           r-biocmanager
+           r-biostrings
+           r-dbi
+           r-ff
+           r-foreach
+           r-genomicranges
+           r-iranges
+           r-rsqlite
+           r-s4vectors
+           r-summarizedexperiment))
     (home-page "https://bioconductor.org/packages/oligoClasses/")
     (synopsis "Classes for high-throughput arrays")
     (description
@@ -4745,31 +5175,31 @@ packages.")
 (define-public r-oligo
   (package
     (name "r-oligo")
-    (version "1.56.0")
+    (version "1.58.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "oligo" version))
        (sha256
         (base32
-         "0fyq77im6s79havjwbchhqhnllxs134jsi98g6msxz66h16lj3al"))))
+         "1cmnnq0d5xsjsx8c8n8wcl6l9d31sbglb8yrsibykcvnhw15fsf6"))))
     (properties `((upstream-name . "oligo")))
     (build-system r-build-system)
-    (inputs `(("zlib" ,zlib)))
-    (propagated-inputs
-     `(("r-affxparser" ,r-affxparser)
-       ("r-affyio" ,r-affyio)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biostrings" ,r-biostrings)
-       ("r-dbi" ,r-dbi)
-       ("r-ff" ,r-ff)
-       ("r-oligoclasses" ,r-oligoclasses)
-       ("r-preprocesscore" ,r-preprocesscore)
-       ("r-rsqlite" ,r-rsqlite)
-       ("r-zlibbioc" ,r-zlibbioc)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+    (inputs (list zlib))
+    (propagated-inputs
+     (list r-affxparser
+           r-affyio
+           r-biobase
+           r-biocgenerics
+           r-biostrings
+           r-dbi
+           r-ff
+           r-oligoclasses
+           r-preprocesscore
+           r-rsqlite
+           r-zlibbioc))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/oligo/")
     (synopsis "Preprocessing tools for oligonucleotide arrays")
     (description
@@ -4781,20 +5211,19 @@ Affymetrix (CEL files) and NimbleGen arrays (XYS files).")
 (define-public r-qvalue
   (package
     (name "r-qvalue")
-    (version "2.24.0")
+    (version "2.26.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "qvalue" version))
        (sha256
         (base32
-         "0xssanffh1hr7f48mnazcpwi25rdp7mxlyb9nbf4q2mp7m40jnpm"))))
+         "1mn2qmqn89lfsx7rg54d1lwz45bfx0b91q6ahf43a1yzrrhwn138"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-reshape2" ,r-reshape2)))
+     (list r-ggplot2 r-reshape2))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/StoreyLab/qvalue")
     (synopsis "Q-value estimation for false discovery rate control")
     (description
@@ -4836,23 +5265,23 @@ integration with @code{Rcpp}.")
 (define-public r-apeglm
   (package
    (name "r-apeglm")
-   (version "1.14.0")
+   (version "1.16.0")
    (source (origin
             (method url-fetch)
             (uri (bioconductor-uri "apeglm" version))
             (sha256
              (base32
-              "1xld6ar440achik4dbd7vhiw6jfj0sb96jm52n7hav5bv4gag3mh"))))
+              "11w4vyc1sllmm5lh42krhidazid78n4s3lhikpy9kk2l57jmifbr"))))
    (properties `((upstream-name . "apeglm")))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-emdbook" ,r-emdbook)
-      ("r-genomicranges" ,r-genomicranges)
-      ("r-rcpp" ,r-rcpp)
-      ("r-rcppeigen" ,r-rcppeigen)
-      ("r-rcppnumerical" ,r-rcppnumerical)
-      ("r-summarizedexperiment" ,r-summarizedexperiment)))
-   (native-inputs `(("r-knitr" ,r-knitr)))
+    (list r-emdbook
+          r-genomicranges
+          r-rcpp
+          r-rcppeigen
+          r-rcppnumerical
+          r-summarizedexperiment))
+   (native-inputs (list r-knitr))
    (home-page "https://bioconductor.org/packages/apeglm")
    (synopsis "Approximate posterior estimation for GLM coefficients")
    (description "This package provides Bayesian shrinkage estimators for
@@ -4863,24 +5292,24 @@ posterior for individual coefficients.")
 (define-public r-greylistchip
   (package
    (name "r-greylistchip")
-   (version "1.24.0")
+   (version "1.26.0")
    (source (origin
             (method url-fetch)
             (uri (bioconductor-uri "GreyListChIP" version))
             (sha256
              (base32
-              "1g9ja8p90czx83ar0l9ran7m6aggvszdbqm714fq7z4rxq9b4hs3"))))
+              "1h7h27q6l9d8j0shklyrh135zrwx56v4zzmm21cj1b7dvmwvpbcv"))))
    (properties `((upstream-name . "GreyListChIP")))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-bsgenome" ,r-bsgenome)
-      ("r-genomeinfodb" ,r-genomeinfodb)
-      ("r-genomicalignments" ,r-genomicalignments)
-      ("r-genomicranges" ,r-genomicranges)
-      ("r-mass" ,r-mass)
-      ("r-rsamtools" ,r-rsamtools)
-      ("r-rtracklayer" ,r-rtracklayer)
-      ("r-summarizedexperiment" ,r-summarizedexperiment)))
+    (list r-bsgenome
+          r-genomeinfodb
+          r-genomicalignments
+          r-genomicranges
+          r-mass
+          r-rsamtools
+          r-rtracklayer
+          r-summarizedexperiment))
    (home-page "https://bioconductor.org/packages/GreyListChIP")
    (synopsis "Greylist artefact regions based on ChIP inputs")
    (description "This package identifies regions of ChIP experiments with high
@@ -4890,40 +5319,40 @@ signal in the input, that lead to spurious peaks during peak calling.")
 (define-public r-diffbind
   (package
     (name "r-diffbind")
-    (version "3.2.7")
+    (version "3.4.3")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "DiffBind" version))
        (sha256
         (base32
-         "01jfxcj5c0088vvsi3pz8fs0ka6n12l2j8s1d0rpqwa1y0444x7z"))))
+         "1bz03ls7pkb09p6nkz7gfnhjlh06mgbp3j98ppnzibiar3cjrnfj"))))
     (properties `((upstream-name . "DiffBind")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-amap" ,r-amap)
-       ("r-apeglm" ,r-apeglm)
-       ("r-ashr" ,r-ashr)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-deseq2" ,r-deseq2)
-       ("r-dplyr" ,r-dplyr)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggrepel" ,r-ggrepel)
-       ("r-gplots" ,r-gplots)
-       ("r-greylistchip" ,r-greylistchip)
-       ("r-iranges" ,r-iranges)
-       ("r-lattice" ,r-lattice)
-       ("r-limma" ,r-limma)
-       ("r-locfit" ,r-locfit)
-       ("r-rcolorbrewer" , r-rcolorbrewer)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rhtslib" ,r-rhtslib)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-systempiper" ,r-systempiper)))
+     (list r-amap
+           r-apeglm
+           r-ashr
+           r-biocparallel
+           r-deseq2
+           r-dplyr
+           r-genomicalignments
+           r-genomicranges
+           r-ggplot2
+           r-ggrepel
+           r-gplots
+           r-greylistchip
+           r-iranges
+           r-lattice
+           r-limma
+           r-locfit
+           r-rcolorbrewer
+           r-rcpp
+           r-rhtslib
+           r-rsamtools
+           r-s4vectors
+           r-summarizedexperiment
+           r-systempiper))
     (home-page "https://bioconductor.org/packages/DiffBind")
     (synopsis "Differential binding analysis of ChIP-Seq peak data")
     (description
@@ -4946,13 +5375,13 @@ occupancy (overlap) analysis and plotting functions.")
     (properties `((upstream-name . "RIPSeeker")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-s4vectors" ,r-s4vectors)
-       ("r-iranges" ,r-iranges)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-rtracklayer" ,r-rtracklayer)))
+     (list r-s4vectors
+           r-iranges
+           r-genomicranges
+           r-summarizedexperiment
+           r-rsamtools
+           r-genomicalignments
+           r-rtracklayer))
     (home-page "https://bioconductor.org/packages/RIPSeeker")
     (synopsis
      "Identifying protein-associated transcripts from RIP-seq experiments")
@@ -4968,29 +5397,29 @@ processing to visualization and annotation.")
 (define-public r-mbkmeans
   (package
     (name "r-mbkmeans")
-    (version "1.8.0")
+    (version "1.10.0")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "mbkmeans" version))
               (sha256
                (base32
-                "1k7ngpx4s50jplrsv19zzjr7izpdl9wwppb218ih5cp0ki1gcc2n"))))
-    (build-system r-build-system)
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
-    (propagated-inputs
-     `(("r-beachmat" ,r-beachmat)
-       ("r-benchmarkme" ,r-benchmarkme)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-clusterr" ,r-clusterr)
-       ("r-delayedarray" ,r-delayedarray)
-       ("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-rhdf5lib" ,r-rhdf5lib)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-singlecellexperiment" ,r-singlecellexperiment)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
+                "03hpj218s8fynmk1s50s0rinhsljikxdrff06yc8ysbyc6hyfb4k"))))
+    (build-system r-build-system)
+    (native-inputs
+     (list r-knitr))
+    (propagated-inputs
+     (list r-beachmat
+           r-benchmarkme
+           r-biocparallel
+           r-clusterr
+           r-delayedarray
+           r-matrix
+           r-rcpp
+           r-rcpparmadillo
+           r-rhdf5lib
+           r-s4vectors
+           r-singlecellexperiment
+           r-summarizedexperiment))
     (home-page "https://bioconductor.org/packages/mbkmeans")
     (synopsis "Mini-batch k-means clustering for single-cell RNA-seq")
     (description "This package implements the mini-batch k-means algorithm for
@@ -5000,20 +5429,17 @@ large datasets, including support for on-disk data representation.")
 (define-public r-multtest
   (package
     (name "r-multtest")
-    (version "2.48.0")
+    (version "2.50.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "multtest" version))
        (sha256
         (base32
-         "1wi15v4llgv11hpb2j9h4a35nrnawnmvbz5d5dvgy8lhqrlq8w9a"))))
+         "03z71r7g318nwwgiz0k8qwbhghw1hhdhh1an4qnb0nc62c5x9kns"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-survival" ,r-survival)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biobase" ,r-biobase)
-       ("r-mass" ,r-mass)))
+     (list r-survival r-biocgenerics r-biobase r-mass))
     (home-page "https://bioconductor.org/packages/multtest")
     (synopsis "Resampling-based multiple hypothesis testing")
     (description
@@ -5038,16 +5464,16 @@ expressed genes in DNA microarray experiments.")
 (define-public r-graph
   (package
     (name "r-graph")
-    (version "1.70.0")
+    (version "1.72.0")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "graph" version))
               (sha256
                (base32
-                "1i7s198d5kw4gk6nqqsd3vqaknj4493p822f2za8q95gv6x02rxa"))))
+                "0x31lz3qimxmng6w99xnqazaj943d94b04nbziad4jfv7c1bc2h0"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)))
+     (list r-biocgenerics))
     (home-page "https://bioconductor.org/packages/graph")
     (synopsis "Handle graph data structures in R")
     (description
@@ -5069,8 +5495,7 @@ expressed genes in DNA microarray experiments.")
     (properties `((upstream-name . "ggm")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-graph" ,r-graph)
-       ("r-igraph" ,r-igraph)))
+     (list r-graph r-igraph))
     (home-page "https://cran.r-project.org/package=ggm")
     (synopsis "Functions for graphical Markov models")
     (description
@@ -5093,9 +5518,7 @@ fitting of some classes of graphical Markov models.")
     (properties `((upstream-name . "PerfMeas")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-graph" ,r-graph)
-       ("r-limma" ,r-limma)
-       ("r-rbgl" ,r-rbgl)))
+     (list r-graph r-limma r-rbgl))
     (home-page "https://cran.r-project.org/web/packages/PerfMeas/")
     (synopsis "Performance measures for ranking and classification tasks")
     (description
@@ -5119,9 +5542,7 @@ a given recall, F-score for single and multiple classes are available.")
     (properties `((upstream-name . "CodeDepends")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-codetools" ,r-codetools)
-       ("r-graph" ,r-graph)
-       ("r-xml" ,r-xml)))
+     (list r-codetools r-graph r-xml))
     (home-page "https://cran.r-project.org/web/packages/CodeDepends")
     (synopsis "Analysis of R code for reproducible research and code comprehension")
     (description
@@ -5136,44 +5557,44 @@ determining dependencies between variables, code improvement suggestions.")
 (define-public r-chippeakanno
   (package
     (name "r-chippeakanno")
-    (version "3.26.4")
+    (version "3.28.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "ChIPpeakAnno" version))
        (sha256
         (base32
-         "1iqzm7pifl9zrw3s06i6h85n1p01pd06vh1a93izyfhgybxn262d"))))
+         "05fbq8zvww1nlyykrri0hf4248i1i7w5cr453giagmjq7lgg4v3b"))))
     (properties `((upstream-name . "ChIPpeakAnno")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("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)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-graph" ,r-graph)
-       ("r-interactionset" ,r-interactionset)
-       ("r-iranges" ,r-iranges)
-       ("r-keggrest" ,r-keggrest)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-multtest" ,r-multtest)
-       ("r-rbgl" ,r-rbgl)
-       ("r-regioner" ,r-regioner)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-venndiagram" ,r-venndiagram)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-annotationdbi
+           r-biocgenerics
+           r-biomart
+           r-biostrings
+           r-dbi
+           r-dplyr
+           r-ensembldb
+           r-genomeinfodb
+           r-genomicalignments
+           r-genomicfeatures
+           r-genomicranges
+           r-ggplot2
+           r-graph
+           r-interactionset
+           r-iranges
+           r-keggrest
+           r-matrixstats
+           r-multtest
+           r-rbgl
+           r-regioner
+           r-rsamtools
+           r-rtracklayer
+           r-s4vectors
+           r-summarizedexperiment
+           r-venndiagram))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/ChIPpeakAnno")
     (synopsis "Peaks annotation from ChIP-seq and ChIP-chip experiments")
     (description
@@ -5190,18 +5611,18 @@ enrichedGO (addGeneIDs).")
 (define-public r-matrixgenerics
   (package
    (name "r-matrixgenerics")
-   (version "1.4.3")
+   (version "1.6.0")
    (source (origin
             (method url-fetch)
             (uri (bioconductor-uri "MatrixGenerics" version))
             (sha256
              (base32
-              "1yir3rwhz5vf0pdn3fpvlc57c75k98gvv8gapajbvymz3lyghijv"))))
+              "1s75p8rrmj24r0vcbaiyw8xg8y84j388mv6iawai7pypfcl8s1z3"))))
    (properties
     `((upstream-name . "MatrixGenerics")))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-matrixstats" ,r-matrixstats)))
+    (list r-matrixstats))
    (home-page "https://bioconductor.org/packages/MatrixGenerics")
    (synopsis "S4 generic summary statistic functions for matrix-like objects")
    (description
@@ -5217,15 +5638,15 @@ incompatibilities.")
 (define-public r-marray
   (package
     (name "r-marray")
-    (version "1.70.0")
+    (version "1.72.0")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "marray" version))
               (sha256
-               (base32 "0wpmrhqpyv27h1hn31hzz21r74r7yqx79ljv8i8gn6ix8lf5ca56"))))
+               (base32 "1la805y8j522vpiazm1z6wpq4ibia9bib5fpiia5mxmpzmqg6gzz"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-limma" ,r-limma)))
+     (list r-limma))
     (home-page "https://bioconductor.org/packages/marray")
     (synopsis "Exploratory analysis for two-color spotted microarray data")
     (description "This package contains class definitions for two-color spotted
@@ -5236,17 +5657,16 @@ normalization and quality checking.")
 (define-public r-cghbase
   (package
    (name "r-cghbase")
-   (version "1.52.0")
+   (version "1.54.0")
    (source (origin
             (method url-fetch)
             (uri (bioconductor-uri "CGHbase" version))
             (sha256
-             (base32 "1p87k4vw981k97d9bckmprrfg55jwd91658rgxzjj8hnschf28a4"))))
+             (base32 "1kfxw126bddfy67cmf8dca9qq4bg7fkxjf8iaikplhvs5hl7bp4d"))))
    (properties `((upstream-name . "CGHbase")))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-biobase" ,r-biobase)
-      ("r-marray" ,r-marray)))
+    (list r-biobase r-marray))
    (home-page "https://bioconductor.org/packages/CGHbase")
    (synopsis "Base functions and classes for arrayCGH data analysis")
    (description "This package contains functions and classes that are needed by
@@ -5256,20 +5676,16 @@ the @code{arrayCGH} packages.")
 (define-public r-cghcall
   (package
    (name "r-cghcall")
-   (version "2.54.0")
+   (version "2.56.0")
    (source (origin
             (method url-fetch)
             (uri (bioconductor-uri "CGHcall" version))
             (sha256
-             (base32 "1zik04y2q0anzy85l0b4ryzkxpfx2fnmpwp5s7akyk1jfl2r8gw7"))))
+             (base32 "1r4y8zakgmdbnpwgp14kwh4iwqgqcmjq2yg4nc7j37p09bw1c8zr"))))
    (properties `((upstream-name . "CGHcall")))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-biobase" ,r-biobase)
-      ("r-cghbase" ,r-cghbase)
-      ("r-impute" ,r-impute)
-      ("r-dnacopy" ,r-dnacopy)
-      ("r-snowfall" ,r-snowfall)))
+    (list r-biobase r-cghbase r-impute r-dnacopy r-snowfall))
    (home-page "https://bioconductor.org/packages/CGHcall")
    (synopsis "Base functions and classes for arrayCGH data analysis")
    (description "This package contains functions and classes that are needed by
@@ -5279,26 +5695,25 @@ the @code{arrayCGH} packages.")
 (define-public r-qdnaseq
   (package
     (name "r-qdnaseq")
-    (version "1.28.0")
+    (version "1.30.0")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "QDNAseq" version))
               (sha256
-               (base32 "1p4544xlarkbgs9kybrrawq3v7qr6ix62nrc6l7dcksh2ka69yzf"))))
+               (base32 "1sza9br8agpdz1k9fn5wisir44sj8v0rk4wbx35d2c2kp9q70pqj"))))
     (properties `((upstream-name . "QDNAseq")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-cghbase" ,r-cghbase)
-       ("r-cghcall" ,r-cghcall)
-       ("r-dnacopy" ,r-dnacopy)
-       ("r-future" ,r-future)
-       ("r-future-apply" ,r-future-apply)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-r-utils" ,r-r-utils)
-       ("r-rsamtools" ,r-rsamtools)))
+     (list r-biobase
+           r-cghbase
+           r-cghcall
+           r-dnacopy
+           r-future-apply
+           r-genomicranges
+           r-iranges
+           r-matrixstats
+           r-r-utils
+           r-rsamtools))
     (home-page "https://bioconductor.org/packages/QDNAseq")
     (synopsis "Quantitative DNA sequencing for chromosomal aberrations")
     (description "The genome is divided into non-overlapping fixed-sized bins,
@@ -5312,20 +5727,18 @@ respectively.")
 (define-public r-bayseq
   (package
     (name "r-bayseq")
-    (version "2.26.0")
+    (version "2.28.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "baySeq" version))
        (sha256
         (base32
-         "0hyc0sl2nf18bz0jxbzim0v41zwh2rnnr7l3p6zkk9wnw5gn7bbc"))))
+         "1zgxwb287ccz4wqsjxmffknnzziv12l4yrw7df912dxz6yccvd8r"))))
     (properties `((upstream-name . "baySeq")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-abind" ,r-abind)
-       ("r-edger" ,r-edger)
-       ("r-genomicranges" ,r-genomicranges)))
+     (list r-abind r-edger r-genomicranges))
     (home-page "https://bioconductor.org/packages/baySeq/")
     (synopsis "Bayesian analysis of differential expression patterns in count data")
     (description
@@ -5338,27 +5751,27 @@ more complex hypotheses) via empirical Bayesian methods.")
 (define-public r-chipcomp
   (package
     (name "r-chipcomp")
-    (version "1.22.0")
+    (version "1.24.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "ChIPComp" version))
        (sha256
         (base32
-         "1kfxjh1mynrgqsy2q6byf03cbymqc8w7l7672iyd0wj5qzlif4h5"))))
+         "1wdy92y5l3wa3zgg59w69rd7gdwf4z1waa4i2cccniccz463p1xq"))))
     (properties `((upstream-name . "ChIPComp")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-bsgenome-hsapiens-ucsc-hg19" ,r-bsgenome-hsapiens-ucsc-hg19)
-       ("r-bsgenome-mmusculus-ucsc-mm9" ,r-bsgenome-mmusculus-ucsc-mm9)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-limma" ,r-limma)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-biocgenerics
+           r-bsgenome-hsapiens-ucsc-hg19
+           r-bsgenome-mmusculus-ucsc-mm9
+           r-genomeinfodb
+           r-genomicranges
+           r-iranges
+           r-limma
+           r-rsamtools
+           r-rtracklayer
+           r-s4vectors))
     (home-page "https://bioconductor.org/packages/ChIPComp")
     (synopsis "Quantitative comparison of multiple ChIP-seq datasets")
     (description
@@ -5372,35 +5785,35 @@ datasets.")
 (define-public r-riboprofiling
   (package
     (name "r-riboprofiling")
-    (version "1.22.0")
+    (version "1.24.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "RiboProfiling" version))
        (sha256
         (base32
-         "1jmd8yrv7p7hn4gdibg3svmhqxjyrnfp7cgsqg8zv862lgd75zsl"))))
+         "1szlzvm8ggjc40k4z2fxxa2h28g6j9wj2g5aw480v9hgyvvdw5lx"))))
     (properties `((upstream-name . "RiboProfiling")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-biostrings" ,r-biostrings)
-       ("r-data-table" ,r-data-table)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggbio" ,r-ggbio)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-iranges" ,r-iranges)
-       ("r-plyr" ,r-plyr)
-       ("r-reshape2" ,r-reshape2)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-sqldf" ,r-sqldf)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-biocgenerics
+           r-biostrings
+           r-data-table
+           r-genomeinfodb
+           r-genomicalignments
+           r-genomicfeatures
+           r-genomicranges
+           r-ggbio
+           r-ggplot2
+           r-iranges
+           r-plyr
+           r-reshape2
+           r-rsamtools
+           r-rtracklayer
+           r-s4vectors
+           r-sqldf))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/RiboProfiling/")
     (synopsis "Ribosome profiling data analysis")
     (description "Starting with a BAM file, this package provides the
@@ -5413,24 +5826,24 @@ assessment, principal component analysis on codon coverage.")
 (define-public r-riboseqr
   (package
     (name "r-riboseqr")
-    (version "1.26.0")
+    (version "1.28.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "riboSeqR" version))
        (sha256
         (base32
-         "1m5w2j35wr0lzwir4s58z757vrcsj5mglsqrkvs241k0hlmn06qa"))))
+         "0nnhjvjl4c9yyfzjf8kcj4yky5cdimicp7lz008sczy19jq4vjhd"))))
     (properties `((upstream-name . "riboSeqR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-abind" ,r-abind)
-       ("r-bayseq" ,r-bayseq)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-seqlogo" ,r-seqlogo)))
+     (list r-abind
+           r-bayseq
+           r-genomeinfodb
+           r-genomicranges
+           r-iranges
+           r-rsamtools
+           r-seqlogo))
     (home-page "https://bioconductor.org/packages/riboSeqR/")
     (synopsis "Analysis of sequencing data from ribosome profiling experiments")
     (description
@@ -5441,28 +5854,28 @@ parsing of genetic sequencing data from ribosome profiling experiments.")
 (define-public r-interactionset
   (package
     (name "r-interactionset")
-    (version "1.20.0")
+    (version "1.22.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "InteractionSet" version))
        (sha256
         (base32
-         "034xidjmn67n1471fnpdmz7gjm6p05cj8sp9nssc3gxdzn54a6xb"))))
+         "19m2mpby73zanai68rlqvzx9zccli4dz4kix93acrw9755xp3bsw"))))
     (properties
      `((upstream-name . "InteractionSet")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
+     (list r-biocgenerics
+           r-genomeinfodb
+           r-genomicranges
+           r-iranges
+           r-matrix
+           r-rcpp
+           r-s4vectors
+           r-summarizedexperiment))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/InteractionSet")
     (synopsis "Base classes for storing genomic interaction data")
     (description
@@ -5475,36 +5888,36 @@ experiments.")
 (define-public r-genomicinteractions
   (package
     (name "r-genomicinteractions")
-    (version "1.26.0")
+    (version "1.28.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "GenomicInteractions" version))
        (sha256
         (base32
-         "0zjl7rp5fk14kqsx0bkbpq6hqahbkiyvwa9aggp4kfb8hnmz9qal"))))
+         "090kxq5jn1jfr9fgbkvbjr5g4bcxzgsaal3gc9yx1n7pgmhccfmb"))))
     (properties
      `((upstream-name . "GenomicInteractions")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-data-table" ,r-data-table)
-       ("r-dplyr" ,r-dplyr)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-gviz" ,r-gviz)
-       ("r-igraph" ,r-igraph)
-       ("r-interactionset" ,r-interactionset)
-       ("r-iranges" ,r-iranges)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-stringr" ,r-stringr)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-biobase
+           r-biocgenerics
+           r-data-table
+           r-dplyr
+           r-genomeinfodb
+           r-genomicranges
+           r-ggplot2
+           r-gridextra
+           r-gviz
+           r-igraph
+           r-interactionset
+           r-iranges
+           r-rsamtools
+           r-rtracklayer
+           r-s4vectors
+           r-stringr))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/ComputationalRegulatoryGenomicsICL/GenomicInteractions/")
     (synopsis "R package for handling genomic interaction data")
     (description
@@ -5516,16 +5929,16 @@ information and producing various plots and statistics.")
 (define-public r-ctc
   (package
     (name "r-ctc")
-    (version "1.66.0")
+    (version "1.68.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "ctc" version))
        (sha256
         (base32
-         "1v8aysvy6a3r1iafc3xvk885c128kb3pb9zpcdhdjcn0by96k8hh"))))
+         "1yq5igwzcwfhxy49qf3pralpikiqq7sqr1cig8mkpjpaj5bbaayx"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-amap" ,r-amap)))
+    (propagated-inputs (list r-amap))
     (home-page "https://bioconductor.org/packages/ctc/")
     (synopsis "Cluster and tree conversion")
     (description
@@ -5536,22 +5949,22 @@ trees and clusters to other programs.")
 (define-public r-goseq
   (package
     (name "r-goseq")
-    (version "1.44.0")
+    (version "1.46.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "goseq" version))
        (sha256
         (base32
-         "07qrxssx4rb8r958r1smx8xfpzdxpp55hci3201hcmz3mxz77i0s"))))
+         "1psl9mqgx1d21kayaxvrxriw34fq30wnd57q5c1sk3p8iahg73g0"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-biasedurn" ,r-biasedurn)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-genelendatabase" ,r-genelendatabase)
-       ("r-go-db" ,r-go-db)
-       ("r-mgcv" ,r-mgcv)))
+     (list r-annotationdbi
+           r-biasedurn
+           r-biocgenerics
+           r-genelendatabase
+           r-go-db
+           r-mgcv))
     (home-page "https://bioconductor.org/packages/goseq/")
     (synopsis "Gene Ontology analyser for RNA-seq and other length biased data")
     (description
@@ -5562,26 +5975,26 @@ defined categories which are over/under represented in RNA-seq data.")
 (define-public r-glimma
   (package
     (name "r-glimma")
-    (version "2.2.0")
+    (version "2.4.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "Glimma" version))
        (sha256
         (base32
-         "0dsk8qmwimzmd1x4k4jwg9q11jm1ahn8cw0gzd6s2gmigfls4hsa"))))
+         "0qkbx9n2vb7kvb5f00csnbffy5bm7hhbdvkx2isgzi0wv0y59kx9"))))
     (properties `((upstream-name . "Glimma")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-deseq2" ,r-deseq2)
-       ("r-edger" ,r-edger)
-       ("r-htmlwidgets" ,r-htmlwidgets)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-limma" ,r-limma)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
+     (list r-deseq2
+           r-edger
+           r-htmlwidgets
+           r-jsonlite
+           r-limma
+           r-s4vectors
+           r-summarizedexperiment))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/Shians/Glimma")
     (synopsis "Interactive HTML graphics")
     (description
@@ -5595,19 +6008,18 @@ information.")
 (define-public r-rots
   (package
     (name "r-rots")
-    (version "1.20.0")
+    (version "1.22.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "ROTS" version))
        (sha256
         (base32
-         "18wyi73l95df182vg3m014sxwdbpggr61vsbazhyw4vyx2fnzmpl"))))
+         "0qhy984y83a3nf4zw54rasw3vn932q4zb3gljifkw701jnrzqmki"))))
     (properties `((upstream-name . "ROTS")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-biobase r-rcpp))
     (home-page "https://bioconductor.org/packages/ROTS/")
     (synopsis "Reproducibility-Optimized Test Statistic")
     (description
@@ -5619,18 +6031,17 @@ in omics data.")
 (define-public r-plgem
   (package
     (name "r-plgem")
-    (version "1.64.0")
+    (version "1.66.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "plgem" version))
        (sha256
         (base32
-         "1rz5jk5bgpk7gjknx79jyslahjg46q2f4bx6dgd0vwmarc29a45z"))))
+         "06w8xlw4j1fc9ipdgw55dvhp07f04icmhr20lqzwwhqd5pskrra3"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-mass" ,r-mass)))
+     (list r-biobase r-mass))
     (home-page "http://www.genopolis.it")
     (synopsis "Detect differential expression in microarray and proteomics datasets")
     (description
@@ -5644,41 +6055,40 @@ genes or proteins in these datasets.")
 (define-public r-inspect
   (package
     (name "r-inspect")
-    (version "1.22.0")
+    (version "1.24.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "INSPEcT" version))
        (sha256
         (base32
-         "0jh5db9dv5pb6b50sg22x8q55m3h0h0nkmb9mivvvp22dhyrd82z"))))
+         "072kv5k3giyll1clzrg0anqhyl4qbi7cjnmkqz25zdl5bab9l7jk"))))
     (properties `((upstream-name . "INSPEcT")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-deseq2" ,r-deseq2)
-       ("r-desolve" ,r-desolve)
-       ("r-gdata" ,r-gdata)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-kernsmooth" ,r-kernsmooth)
-       ("r-plgem" ,r-plgem)
-       ("r-proc" ,r-proc)
-       ("r-rootsolve" ,r-rootsolve)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-shiny" ,r-shiny)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-txdb-mmusculus-ucsc-mm9-knowngene"
-        ,r-txdb-mmusculus-ucsc-mm9-knowngene)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-biobase
+           r-biocgenerics
+           r-biocparallel
+           r-deseq2
+           r-desolve
+           r-gdata
+           r-genomeinfodb
+           r-genomicalignments
+           r-genomicfeatures
+           r-genomicranges
+           r-iranges
+           r-kernsmooth
+           r-plgem
+           r-proc
+           r-rootsolve
+           r-rsamtools
+           r-rtracklayer
+           r-s4vectors
+           r-shiny
+           r-summarizedexperiment
+           r-txdb-mmusculus-ucsc-mm9-knowngene))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/INSPEcT")
     (synopsis "Analysis of 4sU-seq and RNA-seq time-course data")
     (description
@@ -5691,22 +6101,20 @@ modeling the rates that determines changes in mature mRNA levels.")
 (define-public r-dnabarcodes
   (package
     (name "r-dnabarcodes")
-    (version "1.22.0")
+    (version "1.24.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "DNABarcodes" version))
        (sha256
         (base32
-         "1wiqmzjcb7flp7ldcgbx91asxxrmm1rg9pcfljniab9xcsldhksp"))))
+         "07yaz98r18mjny1ilmfnjxcra7xpklnd183pw0kasvsri01ccwxg"))))
     (properties `((upstream-name . "DNABarcodes")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bh" ,r-bh)
-       ("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-bh r-matrix r-rcpp))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/DNABarcodes")
     (synopsis "Create and analyze DNA barcodes")
     (description
@@ -5720,23 +6128,20 @@ demultiplexed, i.e. assigned to their original reference barcode.")
 (define-public r-ruvseq
   (package
     (name "r-ruvseq")
-    (version "1.26.0")
+    (version "1.28.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "RUVSeq" version))
        (sha256
         (base32
-         "1fy0k1p0m209lzjpd5jhfnifa22lrn63qq3a3kn5g0xhbbmijzac"))))
+         "1a19klscykdgsd7izcxyr45ml7g0gpdj65gvbaw124mal2p4zi9q"))))
     (properties `((upstream-name . "RUVSeq")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-edaseq" ,r-edaseq)
-       ("r-edger" ,r-edger)
-       ("r-mass" ,r-mass)))
+     (list r-biobase r-edaseq r-edger r-mass))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/drisso/RUVSeq")
     (synopsis "Remove unwanted variation from RNA-Seq data")
     (description
@@ -5748,24 +6153,20 @@ samples.")
 (define-public r-biocneighbors
   (package
     (name "r-biocneighbors")
-    (version "1.10.0")
+    (version "1.12.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "BiocNeighbors" version))
        (sha256
         (base32
-         "0cjidi18wjip9xzx83890wjk40vvjq06prf1ag4m2kac47w01r7v"))))
+         "04in8l6j7frgm0a5dzphazfhn9cm8w775z5yir712jxa37mh1agr"))))
     (properties `((upstream-name . "BiocNeighbors")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocparallel" ,r-biocparallel)
-       ("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpphnsw" ,r-rcpphnsw)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-biocparallel r-matrix r-rcpp r-rcpphnsw r-s4vectors))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/BiocNeighbors")
     (synopsis "Nearest Neighbor Detection for Bioconductor packages")
     (description
@@ -5780,21 +6181,19 @@ achieved for all methods using the BiocParallel framework.")
 (define-public r-scaledmatrix
   (package
     (name "r-scaledmatrix")
-    (version "1.0.0")
+    (version "1.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "ScaledMatrix" version))
        (sha256
         (base32
-         "1j96fvw1waqxbv5c8myfmhsidq370z03yz13yqmrs4nn1rpn1a06"))))
+         "0vz8441gl5gycy1ypybwhq97bnyvhhlg6gxpi1dsdy2c9b6d81kc"))))
     (properties `((upstream-name . "ScaledMatrix")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-delayedarray" ,r-delayedarray)
-       ("r-matrix" ,r-matrix)
-       ("r-s4vectors" ,r-s4vectors)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-delayedarray r-matrix r-s4vectors))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/LTLA/ScaledMatrix")
     (synopsis "Create a DelayedMatrix of scaled and centered values")
     (description
@@ -5808,25 +6207,25 @@ multiplication.")
 (define-public r-treeio
   (package
     (name "r-treeio")
-    (version "1.16.2")
+    (version "1.18.1")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "treeio" version))
        (sha256
         (base32
-         "1y60yvg1rl21cab9xrkns0209pg44mwr90qj099dvk97wsjkx67g"))))
+         "19i8jhvycv57zbxhpn5gx5ymdiws64kc3nidc00xh1j9a8xkj1aq"))))
     (properties `((upstream-name . "treeio")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ape" ,r-ape)
-       ("r-dplyr" ,r-dplyr)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-magrittr" ,r-magrittr)
-       ("r-rlang" ,r-rlang)
-       ("r-tibble" ,r-tibble)
-       ("r-tidytree" ,r-tidytree)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-ape
+           r-dplyr
+           r-jsonlite
+           r-magrittr
+           r-rlang
+           r-tibble
+           r-tidytree))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/YuLab-SMU/treeio")
     (synopsis "Base classes and functions for Phylogenetic tree input and output")
     (description
@@ -5840,31 +6239,31 @@ platform for merging tree with associated data and converting file formats.")
 (define-public r-ggtree
   (package
     (name "r-ggtree")
-    (version "3.0.4")
+    (version "3.2.1")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "ggtree" version))
        (sha256
         (base32
-         "0xf4b9vfdyzzivwgw4ymapl5bb4k9p04mmr53822kxgfd5qrs1zx"))))
+         "0qk39gdpy4kznjhmvi25y2spcdj2r1i6mv673vx8dzf66zfs20v8"))))
     (properties `((upstream-name . "ggtree")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ape" ,r-ape)
-       ("r-aplot" ,r-aplot)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ggfun" ,r-ggfun)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-magrittr" ,r-magrittr)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-scales" ,r-scales)
-       ("r-tidyr" ,r-tidyr)
-       ("r-tidytree" ,r-tidytree)
-       ("r-treeio" ,r-treeio)
-       ("r-yulab-utils" ,r-yulab-utils)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-ape
+           r-aplot
+           r-dplyr
+           r-ggfun
+           r-ggplot2
+           r-magrittr
+           r-purrr
+           r-rlang
+           r-scales
+           r-tidyr
+           r-tidytree
+           r-treeio
+           r-yulab-utils))
+    (native-inputs (list r-knitr))
     (home-page "https://yulab-smu.top/treedata-book/")
     (synopsis "R package for visualization of trees and annotation data")
     (description
@@ -5877,20 +6276,20 @@ data.")
 (define-public r-metapod
   (package
     (name "r-metapod")
-    (version "1.0.0")
+    (version "1.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "metapod" version))
        (sha256
         (base32
-         "1hbcwr6d8gyrf4azh0gi588xkrg6gz7gsb5hbvzqkhplbsp6shlv"))))
+         "1s8dfzpgbpxbn3jvx891gvw3jyn43nlxb73yv1vjn85brk9zbqpk"))))
     (properties `((upstream-name . "metapod")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)))
+     (list r-rcpp))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/metapod")
     (synopsis "Meta-analyses on p-values of differential analyses")
     (description
@@ -5906,29 +6305,29 @@ missing values and weighting where appropriate.")
 (define-public r-biocsingular
   (package
     (name "r-biocsingular")
-    (version "1.8.1")
+    (version "1.10.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "BiocSingular" version))
        (sha256
         (base32
-         "16gkwq8fb8jdchpnlzq2hz3i74a6pzbnc1bf93282h11mp7qr58l"))))
+         "0dkh6a23qymjcynppmpp3k1mzpfadv8dqyz410pxkqsxig4ldd4n"))))
     (properties `((upstream-name . "BiocSingular")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-beachmat" ,r-beachmat)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-delayedarray" ,r-delayedarray)
-       ("r-irlba" ,r-irlba)
-       ("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rsvd" ,r-rsvd)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-scaledmatrix" ,r-scaledmatrix)))
+     (list r-beachmat
+           r-biocgenerics
+           r-biocparallel
+           r-delayedarray
+           r-irlba
+           r-matrix
+           r-rcpp
+           r-rsvd
+           r-s4vectors
+           r-scaledmatrix))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/LTLA/BiocSingular")
     (synopsis "Singular value decomposition for Bioconductor packages")
     (description
@@ -5941,40 +6340,40 @@ possible, parallelization is achieved using the BiocParallel framework.")
 (define-public r-destiny
   (package
     (name "r-destiny")
-    (version "3.4.0")
+    (version "3.8.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "destiny" version))
        (sha256
         (base32
-         "1i7f5q02zvpfaxhd76fbw0h1wfgjphyn5hrmrjpvlnv4ardzsir2"))))
-    (build-system r-build-system)
-    (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-ggplot-multistats" ,r-ggplot-multistats)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggthemes" ,r-ggthemes)
-       ("r-irlba" ,r-irlba)
-       ("r-knn-covertree" ,r-knn-covertree)
-       ("r-matrix" ,r-matrix)
-       ("r-pcamethods" ,r-pcamethods)
-       ("r-proxy" ,r-proxy)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcppeigen" ,r-rcppeigen)
-       ("r-rcpphnsw" ,r-rcpphnsw)
-       ("r-rspectra" ,r-rspectra)
-       ("r-scales" ,r-scales)
-       ("r-scatterplot3d" ,r-scatterplot3d)
-       ("r-singlecellexperiment" ,r-singlecellexperiment)
-       ("r-smoother" ,r-smoother)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-tidyr" ,r-tidyr)
-       ("r-tidyselect" ,r-tidyselect)
-       ("r-vim" ,r-vim)))
-    (native-inputs
-     `(("r-nbconvertr" ,r-nbconvertr))) ; for vignettes
+         "01662p5j9l12ylf5a5djg4cjppd2n3chrygzw8nnrcf1806xn58y"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-biobase
+           r-biocgenerics
+           r-ggplot-multistats
+           r-ggplot2
+           r-ggthemes
+           r-irlba
+           r-knn-covertree
+           r-matrix
+           r-pcamethods
+           r-proxy
+           r-rcpp
+           r-rcppeigen
+           r-rcpphnsw
+           r-rspectra
+           r-scales
+           r-scatterplot3d
+           r-singlecellexperiment
+           r-smoother
+           r-summarizedexperiment
+           r-tidyr
+           r-tidyselect
+           r-vim))
+    (native-inputs
+     (list r-nbconvertr)) ; for vignettes
     (home-page "https://bioconductor.org/packages/destiny/")
     (synopsis "Create and plot diffusion maps")
     (description "This package provides tools to create and plot diffusion
@@ -5985,22 +6384,18 @@ maps.")
 (define-public r-savr
   (package
     (name "r-savr")
-    (version "1.30.0")
+    (version "1.32.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "savR" version))
        (sha256
         (base32
-         "1ynp334hm76zf05j4f6vha6r16s5f2ncxx9yviq4rxidk9r723jq"))))
+         "0dwl94j5dm5ngn8lyyc4bd9ihd1nqincvq26najjn6lw0x55ciky"))))
     (properties `((upstream-name . "savR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-reshape2" ,r-reshape2)
-       ("r-scales" ,r-scales)
-       ("r-xml" ,r-xml)))
+     (list r-ggplot2 r-gridextra r-reshape2 r-scales r-xml))
     (home-page "https://github.com/bcalder/savR")
     (synopsis "Parse and analyze Illumina SAV files")
     (description
@@ -6011,36 +6406,36 @@ Viewer (SAV) files, access data, and generate QC plots.")
 (define-public r-chipexoqual
   (package
     (name "r-chipexoqual")
-    (version "1.16.0")
+    (version "1.18.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "ChIPexoQual" version))
        (sha256
         (base32
-         "0fbrf5s6pz115djm7xw95k1d0p7svi40aacbb3d52wmx5azwj424"))))
+         "1hh3mhfcngyx7cpzns8mjqviy8vfzrvxpv6nyizflpfmsr39mxfk"))))
     (properties `((upstream-name . "ChIPexoQual")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocparallel" ,r-biocparallel)
-       ("r-biovizbase" ,r-biovizbase)
-       ("r-broom" ,r-broom)
-       ("r-data-table" ,r-data-table)
-       ("r-dplyr" ,r-dplyr)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-hexbin" ,r-hexbin)
-       ("r-iranges" ,r-iranges)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-scales" ,r-scales)
-       ("r-viridis" ,r-viridis)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-biocparallel
+           r-biovizbase
+           r-broom
+           r-data-table
+           r-dplyr
+           r-genomeinfodb
+           r-genomicalignments
+           r-genomicranges
+           r-ggplot2
+           r-hexbin
+           r-iranges
+           r-rcolorbrewer
+           r-rmarkdown
+           r-rsamtools
+           r-s4vectors
+           r-scales
+           r-viridis))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/keleslab/ChIPexoQual")
     (synopsis "Quality control pipeline for ChIP-exo/nexus data")
     (description
@@ -6051,19 +6446,16 @@ sequencing data.")
 (define-public r-copynumber
   (package
     (name "r-copynumber")
-    (version "1.32.0")
+    (version "1.34.0")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "copynumber" version))
               (sha256
                (base32
-                "03pvjzjrcsbjfw3855s3whfzin45vaipy7cahnj6fywdysvh8hps"))))
+                "143ifvjkjz0392drm82xmpj1f8b5pc2dyyxyc9dkqmay8lf1n534"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-s4vectors" ,r-s4vectors)
-       ("r-iranges" ,r-iranges)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-biocgenerics" ,r-biocgenerics)))
+     (list r-s4vectors r-iranges r-genomicranges r-biocgenerics))
     (home-page "https://bioconductor.org/packages/copynumber")
     (synopsis "Segmentation of single- and multi-track copy number data")
     (description
@@ -6074,17 +6466,17 @@ penalized least squares regression method.")
 (define-public r-dnacopy
   (package
     (name "r-dnacopy")
-    (version "1.66.0")
+    (version "1.68.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "DNAcopy" version))
        (sha256
         (base32
-         "0mgq814f6c2271d2lxg763bsnv3ma4ari5xa4x1rbksv8yvcjc4d"))))
+         "19ax431i97r49gh1232vf8mgmkvc6k26lnq44j3g10n6q01czswm"))))
     (properties `((upstream-name . "DNAcopy")))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "https://bioconductor.org/packages/DNAcopy")
     (synopsis "DNA copy number data analysis")
     (description
@@ -6109,9 +6501,7 @@ abnormal copy number.")
     (properties `((upstream-name . "HTSCluster")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-capushe" ,r-capushe)
-       ("r-edger" ,r-edger)
-       ("r-plotrix" ,r-plotrix)))
+     (list r-capushe r-edger r-plotrix))
     (home-page "https://cran.r-project.org/web/packages/HTSCluster")
     (synopsis "Clustering high-throughput transcriptome sequencing (HTS) data")
     (description
@@ -6163,7 +6553,7 @@ and summarizing a set of statistics using a weighted distance approach.")
     (properties `((upstream-name . "NBPSeq")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-qvalue" ,r-qvalue)))
+     (list r-qvalue))
     (home-page "https://cran.r-project.org/web/packages/NBPSeq")
     (synopsis "Negative binomial models for RNA-Seq data")
     (description
@@ -6174,20 +6564,18 @@ and regression inferences from RNA-sequencing data.")
 (define-public r-ebseq
   (package
     (name "r-ebseq")
-    (version "1.32.0")
+    (version "1.34.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "EBSeq" version))
        (sha256
         (base32
-         "0h5v3vrb90zim80bdnr3aw58g3h7zjqa4l9i0jwx5j19ywf54fdz"))))
+         "1p8i04v5h6mbc8zqbf3rifbwwylzzc1fqrkhh0a0mbcgq2nv7i9m"))))
     (properties `((upstream-name . "EBSeq")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-blockmodeling" ,r-blockmodeling)
-       ("r-gplots" ,r-gplots)
-       ("r-testthat" ,r-testthat)))
+     (list r-blockmodeling r-gplots r-testthat))
     (home-page "https://bioconductor.org/packages/EBSeq")
     (synopsis "Differential expression analysis of RNA-seq data")
     (description
@@ -6198,32 +6586,32 @@ gene and isoform level using RNA-seq data")
 (define-public r-karyoploter
   (package
     (name "r-karyoploter")
-    (version "1.18.0")
+    (version "1.20.0")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "karyoploteR" version))
               (sha256
                (base32
-                "11sgxz2xz685pgm8mf0hzm6aryx4fj5g3dlffjzpqxh3awfqa19p"))))
-    (build-system r-build-system)
-    (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-bamsignals" ,r-bamsignals)
-       ("r-bezier" ,r-bezier)
-       ("r-biovizbase" ,r-biovizbase)
-       ("r-digest" ,r-digest)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-memoise" ,r-memoise)
-       ("r-regioner" ,r-regioner)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-variantannotation" ,r-variantannotation)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+                "0x3mld9q55r2fy452wxq5sjzmms10zmpkzs71c3w1fdli5hwszdq"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-annotationdbi
+           r-bamsignals
+           r-bezier
+           r-biovizbase
+           r-digest
+           r-genomeinfodb
+           r-genomicfeatures
+           r-genomicranges
+           r-iranges
+           r-memoise
+           r-regioner
+           r-rsamtools
+           r-rtracklayer
+           r-s4vectors
+           r-variantannotation))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/karyoploteR/")
     (synopsis "Plot customizable linear genomes displaying arbitrary data")
     (description "This package creates karyotype plots of arbitrary genomes and
@@ -6236,20 +6624,19 @@ coordinates.")
 (define-public r-lpsymphony
   (package
     (name "r-lpsymphony")
-    (version "1.20.0")
+    (version "1.22.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "lpsymphony" version))
        (sha256
         (base32
-         "0aw4b3p5z8ys7zlwy8s3bsqk03xwx42311yxr7q14w3f7sn3shzn"))))
+         "1bv28b1fgcazv6j0xw4nn6wljs37qnkyahqy7anrwissdpryhjfs"))))
     (build-system r-build-system)
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("r-knitr" ,r-knitr)))
+     (list pkg-config r-knitr))
     (home-page "https://r-forge.r-project.org/projects/rsymphony")
     (synopsis "Symphony integer linear programming solver in R")
     (description
@@ -6266,23 +6653,20 @@ to install interface to SYMPHONY.")
 (define-public r-ihw
   (package
     (name "r-ihw")
-    (version "1.20.0")
+    (version "1.22.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "IHW" version))
        (sha256
         (base32
-         "0b393a8ayzbnrgkk562w1dj7avacpb3wc7yq7awiki24wi5g2lfw"))))
+         "0vgij5zyaw3fh7arkg4jy1mizsqzbkcsjl05mh3ng2bqh30kyqqx"))))
     (properties `((upstream-name . "IHW")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-fdrtool" ,r-fdrtool)
-       ("r-lpsymphony" ,r-lpsymphony)
-       ("r-slam" ,r-slam)))
+     (list r-biocgenerics r-fdrtool r-lpsymphony r-slam))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/IHW")
     (synopsis "Independent hypothesis weighting")
     (description
@@ -6298,30 +6682,30 @@ independent of the p-value under the null hypothesis.")
 (define-public r-icobra
   (package
     (name "r-icobra")
-    (version "1.20.0")
+    (version "1.22.2")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "iCOBRA" version))
        (sha256
         (base32
-         "190rkx3sivj68in36hhin5v535yd6fvlvm7l90w1bl38zpb7p6jn"))))
+         "1ln8l2cp6dqg6zv7s0qnmw5ii93v5sgp0b1nwswl52zdd8mivwxy"))))
     (properties `((upstream-name . "iCOBRA")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-dt" ,r-dt)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-limma" ,r-limma)
-       ("r-reshape2" ,r-reshape2)
-       ("r-rocr" ,r-rocr)
-       ("r-scales" ,r-scales)
-       ("r-shiny" ,r-shiny)
-       ("r-shinybs" ,r-shinybs)
-       ("r-shinydashboard" ,r-shinydashboard)
-       ("r-upsetr" ,r-upsetr)))
+     (list r-dplyr
+           r-dt
+           r-ggplot2
+           r-limma
+           r-reshape2
+           r-rocr
+           r-scales
+           r-shiny
+           r-shinybs
+           r-shinydashboard
+           r-upsetr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/iCOBRA")
     (synopsis "Comparison and visualization of ranking and assignment methods")
     (description
@@ -6334,23 +6718,21 @@ interactive exploration of results.")
 (define-public r-residualmatrix
   (package
     (name "r-residualmatrix")
-    (version "1.2.0")
+    (version "1.4.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "ResidualMatrix" version))
        (sha256
         (base32
-         "0p7va19aw0j6anx7ck879kbi5cn7dy712h5ia94adr38ssismv1v"))))
+         "0xsn4fm34a7xpkgmx3a1j2xzdaxf2hyla1062wqn04kw0k9y29vg"))))
     (properties
      `((upstream-name . "ResidualMatrix")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-delayedarray" ,r-delayedarray)
-       ("r-matrix" ,r-matrix)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-delayedarray r-matrix r-s4vectors))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/LTLA/ResidualMatrix")
     (synopsis "Create a DelayedMatrix of regression residuals")
     (description
@@ -6365,34 +6747,34 @@ multiplication and calculation of row/column sums or means.")
 (define-public r-batchelor
   (package
     (name "r-batchelor")
-    (version "1.8.1")
+    (version "1.10.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "batchelor" version))
        (sha256
         (base32
-         "1bkk69b5llkmvmpsnhymwjm2szmzypgszfsw8mak1b5ms5zf8lr0"))))
+         "0axkic11bwjbw8apwxx6p51s7jvlwhq7xi1bdknn54k86axq84dr"))))
     (properties `((upstream-name . "batchelor")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-beachmat" ,r-beachmat)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocneighbors" ,r-biocneighbors)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-biocsingular" ,r-biocsingular)
-       ("r-delayedarray" ,r-delayedarray)
-       ("r-delayedmatrixstats" ,r-delayedmatrixstats)
-       ("r-igraph" ,r-igraph)
-       ("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)
-       ("r-residualmatrix" ,r-residualmatrix)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-scaledmatrix" ,r-scaledmatrix)
-       ("r-scuttle" ,r-scuttle)
-       ("r-singlecellexperiment" ,r-singlecellexperiment)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-beachmat
+           r-biocgenerics
+           r-biocneighbors
+           r-biocparallel
+           r-biocsingular
+           r-delayedarray
+           r-delayedmatrixstats
+           r-igraph
+           r-matrix
+           r-rcpp
+           r-residualmatrix
+           r-s4vectors
+           r-scaledmatrix
+           r-scuttle
+           r-singlecellexperiment
+           r-summarizedexperiment))
+    (native-inputs (list r-knitr))
     (home-page "https://bioconductor.org/packages/batchelor")
     (synopsis "Single-Cell Batch Correction Methods")
     (description
@@ -6408,31 +6790,31 @@ the numbers of cells across batches.")
 (define-public r-mast
   (package
     (name "r-mast")
-    (version "1.18.0")
+    (version "1.20.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "MAST" version))
        (sha256
         (base32
-         "1gkpagam5rap36viyr3n4psa658x9vckrxap1h67jasiiyrcfz2d"))))
+         "14h6giny9lhzqjsx3h7gdhsm8wfwnvp5zsl4avrflip0jmsn45yy"))))
     (properties `((upstream-name . "MAST")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-abind" ,r-abind)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-data-table" ,r-data-table)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-plyr" ,r-plyr)
-       ("r-progress" ,r-progress)
-       ("r-reshape2" ,r-reshape2)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-singlecellexperiment" ,r-singlecellexperiment)
-       ("r-stringr" ,r-stringr)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-abind
+           r-biobase
+           r-biocgenerics
+           r-data-table
+           r-ggplot2
+           r-plyr
+           r-progress
+           r-reshape2
+           r-s4vectors
+           r-singlecellexperiment
+           r-stringr
+           r-summarizedexperiment))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/RGLab/MAST/")
     (synopsis "Model-based analysis of single cell transcriptomics")
     (description
@@ -6443,48 +6825,48 @@ single cell assay data.")
 (define-public r-monocle
   (package
     (name "r-monocle")
-    (version "2.20.0")
+    (version "2.22.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "monocle" version))
        (sha256
         (base32
-         "05j1vc51f39xalggdq27y7218gkr3zq7fh7jhzsb4jj7fpn837ry"))))
-    (build-system r-build-system)
-    (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocviews" ,r-biocviews)
-       ("r-cluster" ,r-cluster)
-       ("r-combinat" ,r-combinat)
-       ("r-ddrtree" ,r-ddrtree)
-       ("r-densityclust" ,r-densityclust)
-       ("r-dplyr" ,r-dplyr)
-       ("r-fastica" ,r-fastica)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-hsmmsinglecell" ,r-hsmmsinglecell)
-       ("r-igraph" ,r-igraph)
-       ("r-irlba" ,r-irlba)
-       ("r-limma" ,r-limma)
-       ("r-mass" ,r-mass)
-       ("r-matrix" ,r-matrix)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-pheatmap" ,r-pheatmap)
-       ("r-plyr" ,r-plyr)
-       ("r-proxy" ,r-proxy)
-       ("r-qlcmatrix" ,r-qlcmatrix)
-       ("r-rann" ,r-rann)
-       ("r-rcpp" ,r-rcpp)
-       ("r-reshape2" ,r-reshape2)
-       ("r-rtsne" ,r-rtsne)
-       ("r-slam" ,r-slam)
-       ("r-stringr" ,r-stringr)
-       ("r-tibble" ,r-tibble)
-       ("r-vgam" ,r-vgam)
-       ("r-viridis" ,r-viridis)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+         "0wb2c1jf502lrfx3d0amb09fvhalrwxvpsp99jsab162v4hddg85"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-biobase
+           r-biocgenerics
+           r-biocviews
+           r-cluster
+           r-combinat
+           r-ddrtree
+           r-densityclust
+           r-dplyr
+           r-fastica
+           r-ggplot2
+           r-hsmmsinglecell
+           r-igraph
+           r-irlba
+           r-limma
+           r-mass
+           r-matrix
+           r-matrixstats
+           r-pheatmap
+           r-plyr
+           r-proxy
+           r-qlcmatrix
+           r-rann
+           r-rcpp
+           r-reshape2
+           r-rtsne
+           r-slam
+           r-stringr
+           r-tibble
+           r-vgam
+           r-viridis))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/monocle")
     (synopsis "Clustering, differential expression, and trajectory analysis for single-cell RNA-Seq")
     (description
@@ -6516,11 +6898,11 @@ qPCR data, but could be used with other types as well.")
       (properties `((upstream-name . "leidenbase")))
       (build-system r-build-system)
       (inputs
-       `(("zlib" ,zlib)))
+       (list zlib))
       (native-inputs
-       `(("gfortran" ,gfortran)))
+       (list gfortran))
       (propagated-inputs
-       `(("r-igraph" ,r-igraph)))
+       (list r-igraph))
       (home-page "https://github.com/cole-trapnell-lab/leidenbase")
       (synopsis "R and C wrappers to run the Leiden find_partition function")
       (description
@@ -6531,6 +6913,34 @@ required source code files from the official Leidenalg distribution and
 several functions from the R igraph package.")
       (license license:gpl3+))))
 
+(define-public r-sanssouci
+  ;; sansscouci doesn't have a (versioned) release yet.
+  ;; This is the latest commit as of packaging for Guix.
+  (let ((commit "5fe20a9aaf4ac637fa83d9cc73ff1c22de97ca6f")
+        (revision "1"))
+    (package
+      (name "r-sanssouci")
+      (version (git-version "0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/pneuvial/sanssouci.git")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "13ycdd790qw64qy2zdvcrpj3fc8as628rsly32438d3rifnlc5sk"))))
+      (build-system r-build-system)
+      (propagated-inputs
+       (list r-generics r-matrix r-matrixstats r-rcpp r-rcpparmadillo))
+      (home-page "https://pneuvial.github.io/sanssouci")
+      (synopsis "Post Hoc multiple testing inference")
+      (description
+       "The goal of sansSouci is to perform post hoc inference: in a multiple
+testing context, sansSouci provides statistical guarantees on possibly
+user-defined and/or data-driven sets of hypotheses.")
+      (license license:gpl3))))
+
 (define-public r-monocle3
   (package
     (name "r-monocle3")
@@ -6547,50 +6957,50 @@ several functions from the R igraph package.")
          "16vpvlbms8fdvpfwzcig0rkg2mxnsq1h80d2l7q3953wm91qc9x4"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertthat" ,r-assertthat)
-       ("r-batchelor" ,r-batchelor)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-delayedmatrixstats" ,r-delayedmatrixstats)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggrepel" ,r-ggrepel)
-       ("r-grr" ,r-grr)
-       ("r-htmlwidgets" ,r-htmlwidgets)
-       ("r-igraph" ,r-igraph)
-       ("r-irlba" ,r-irlba)
-       ("r-leidenbase" ,r-leidenbase)
-       ("r-limma" ,r-limma)
-       ("r-lmtest" ,r-lmtest)
-       ("r-mass" ,r-mass)
-       ("r-matrix" ,r-matrix)
-       ("r-matrix-utils" ,r-matrix-utils)
-       ("r-pbapply" ,r-pbapply)
-       ("r-pbmcapply" ,r-pbmcapply)
-       ("r-pheatmap" ,r-pheatmap)
-       ("r-plotly" ,r-plotly)
-       ("r-pryr" ,r-pryr)
-       ("r-proxy" ,r-proxy)
-       ("r-pscl" ,r-pscl)
-       ("r-purrr" ,r-purrr)
-       ("r-rann" ,r-rann)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcppparallel" ,r-rcppparallel)
-       ("r-reshape2" ,r-reshape2)
-       ("r-reticulate" ,r-reticulate)
-       ("r-rhpcblasctl" ,r-rhpcblasctl)
-       ("r-rsample" ,r-rsample)
-       ("r-rtsne" ,r-rtsne)
-       ("r-shiny" ,r-shiny)
-       ("r-slam" ,r-slam)
-       ("r-spdep" ,r-spdep)
-       ("r-speedglm" ,r-speedglm)
-       ("r-stringr" ,r-stringr)
-       ("r-singlecellexperiment" ,r-singlecellexperiment)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)
-       ("r-uwot" ,r-uwot)
-       ("r-viridis" ,r-viridis)))
+     (list r-assertthat
+           r-batchelor
+           r-biobase
+           r-biocgenerics
+           r-delayedmatrixstats
+           r-dplyr
+           r-ggplot2
+           r-ggrepel
+           r-grr
+           r-htmlwidgets
+           r-igraph
+           r-irlba
+           r-leidenbase
+           r-limma
+           r-lmtest
+           r-mass
+           r-matrix
+           r-matrix-utils
+           r-pbapply
+           r-pbmcapply
+           r-pheatmap
+           r-plotly
+           r-pryr
+           r-proxy
+           r-pscl
+           r-purrr
+           r-rann
+           r-rcpp
+           r-rcppparallel
+           r-reshape2
+           r-reticulate
+           r-rhpcblasctl
+           r-rsample
+           r-rtsne
+           r-shiny
+           r-slam
+           r-spdep
+           r-speedglm
+           r-stringr
+           r-singlecellexperiment
+           r-tibble
+           r-tidyr
+           r-uwot
+           r-viridis))
     (home-page "https://github.com/cole-trapnell-lab/monocle3")
     (synopsis "Analysis toolkit for single-cell RNA-Seq data")
     (description
@@ -6600,19 +7010,18 @@ several functions from the R igraph package.")
 (define-public r-noiseq
   (package
     (name "r-noiseq")
-    (version "2.36.0")
+    (version "2.38.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "NOISeq" version))
        (sha256
         (base32
-         "18d51dv2ygsm7kkwal341f1wrwrazyns0045j00vld367kic8jiz"))))
+         "0mmvzf8y4gm84hgjdpf86b1y37237wp5mc3x1g6sdiz9qi8l356v"))))
     (properties `((upstream-name . "NOISeq")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-matrix" ,r-matrix)))
+     (list r-biobase r-matrix))
     (home-page "https://bioconductor.org/packages/NOISeq")
     (synopsis "Exploratory analysis and differential expression for RNA-seq data")
     (description
@@ -6627,30 +7036,30 @@ assumptions.")
 (define-public r-scdd
   (package
     (name "r-scdd")
-    (version "1.16.0")
+    (version "1.18.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "scDD" version))
        (sha256
         (base32
-         "1dw9m3m99apmbs32461c6lnmy81n5hxbhz3p8jk419gajkh4v1ji"))))
+         "0gjdjkpkm9zc9hzzb6r2mknl4zyg7s2lgqppmzzhgcnvlmgvm5b5"))))
     (properties `((upstream-name . "scDD")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-arm" ,r-arm)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-ebseq" ,r-ebseq)
-       ("r-fields" ,r-fields)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-mclust" ,r-mclust)
-       ("r-outliers" ,r-outliers)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-scran" ,r-scran)
-       ("r-singlecellexperiment" ,r-singlecellexperiment)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
+     (list r-arm
+           r-biocparallel
+           r-ebseq
+           r-fields
+           r-ggplot2
+           r-mclust
+           r-outliers
+           r-s4vectors
+           r-scran
+           r-singlecellexperiment
+           r-summarizedexperiment))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/kdkorthauer/scDD")
     (synopsis "Mixture modeling of single-cell RNA-seq data")
     (description
@@ -6665,39 +7074,39 @@ distributions.")
 (define-public r-scone
   (package
     (name "r-scone")
-    (version "1.16.1")
+    (version "1.18.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "scone" version))
        (sha256
         (base32
-         "0zw8g4mql7b02xqwhc1i0bnhm20c1q9xqc7yz84j98pqbi996vi5"))))
-    (build-system r-build-system)
-    (propagated-inputs
-     `(("r-aroma-light" ,r-aroma-light)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-boot" ,r-boot)
-       ("r-class" ,r-class)
-       ("r-cluster" ,r-cluster)
-       ("r-compositions" ,r-compositions)
-       ("r-diptest" ,r-diptest)
-       ("r-edger" ,r-edger)
-       ("r-fpc" ,r-fpc)
-       ("r-gplots" ,r-gplots)
-       ("r-hexbin" ,r-hexbin)
-       ("r-limma" ,r-limma)
-       ("r-matrixgenerics" ,r-matrixgenerics)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-mixtools" ,r-mixtools)
-       ("r-rarpack" ,r-rarpack)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rhdf5" ,r-rhdf5)
-       ("r-ruvseq" ,r-ruvseq)
-       ("r-singlecellexperiment" ,r-singlecellexperiment)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+         "1fqlwg195rzpwh35cj941vhmj2plzpn253skig6glr0z2sirr9r1"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-aroma-light
+           r-biocparallel
+           r-boot
+           r-class
+           r-cluster
+           r-compositions
+           r-diptest
+           r-edger
+           r-fpc
+           r-gplots
+           r-hexbin
+           r-limma
+           r-matrixgenerics
+           r-matrixstats
+           r-mixtools
+           r-rarpack
+           r-rcolorbrewer
+           r-rhdf5
+           r-ruvseq
+           r-singlecellexperiment
+           r-summarizedexperiment))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/scone")
     (synopsis "Single cell overview of normalized expression data")
     (description
@@ -6709,27 +7118,29 @@ high-throughput analyses.")
 (define-public r-geoquery
   (package
     (name "r-geoquery")
-    (version "2.60.0")
+    (version "2.62.1")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "GEOquery" version))
        (sha256
         (base32
-         "0jhkdbcd03d5n8vn3xkad6f21xjkawyxc9rdwcj8vwc8alx730am"))))
+         "0plmh4x37r848g6ilvl1x8cim90rp85gikfc5m8lgi2i4xkq7hbq"))))
     (properties `((upstream-name . "GEOquery")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-dplyr" ,r-dplyr)
-       ("r-httr" ,r-httr)
-       ("r-limma" ,r-limma)
-       ("r-magrittr" ,r-magrittr)
-       ("r-readr" ,r-readr)
-       ("r-tidyr" ,r-tidyr)
-       ("r-xml2" ,r-xml2)))
+     (list r-biobase
+           r-data-table
+           r-dplyr
+           r-httr
+           r-limma
+           r-magrittr
+           r-r-utils
+           r-readr
+           r-tidyr
+           r-xml2))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/seandavi/GEOquery/")
     (synopsis "Get data from NCBI Gene Expression Omnibus (GEO)")
     (description
@@ -6742,17 +7153,17 @@ the bridge between GEO and BioConductor.")
 (define-public r-illuminaio
   (package
     (name "r-illuminaio")
-    (version "0.34.0")
+    (version "0.36.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "illuminaio" version))
        (sha256
         (base32
-         "1sy0i3nbzsw4ymdxaiwpyx1vcg9yp3i8xfjcymqwhv95j3kyglv9"))))
+         "0icsp610am5vrd8x2h9c450phn4vl9c5wnzqmkix5hkqzrykk34m"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-base64" ,r-base64)))
+     (list r-base64))
     (home-page "https://github.com/HenrikBengtsson/illuminaio/")
     (synopsis "Parse Illumina microarray output files")
     (description
@@ -6763,19 +7174,17 @@ files, including IDAT.")
 (define-public r-siggenes
   (package
     (name "r-siggenes")
-    (version "1.66.0")
+    (version "1.68.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "siggenes" version))
        (sha256
         (base32
-         "0lva0f255fcpy625frvij4n14q7nw4jcx8n2hlkxid4mgkfqwlhf"))))
+         "1fymp5ci1nwkk5yfj7hli464xqvvlvzf2a5j0w3qkxly9hrymix9"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-multtest" ,r-multtest)
-       ("r-scrime" ,r-scrime)))
+     (list r-biobase r-multtest r-scrime))
     (home-page "https://bioconductor.org/packages/siggenes/")
     (synopsis
      "Multiple testing using SAM and Efron's empirical Bayes approaches")
@@ -6789,29 +7198,29 @@ Bayes Analyses of Microarrays} (EBAM).")
 (define-public r-bumphunter
   (package
     (name "r-bumphunter")
-    (version "1.34.0")
+    (version "1.36.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "bumphunter" version))
        (sha256
         (base32
-         "0wi38vwfi8qr10x4xifhylxx7vfc6fqvqs649iq7lf0y7islwq2v"))))
+         "0d5cz9xy7vhcaj5n3h4cfiv08sn7wn83458525pdwvdzzm449xgv"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-dorng" ,r-dorng)
-       ("r-foreach" ,r-foreach)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-iterators" ,r-iterators)
-       ("r-limma" ,r-limma)
-       ("r-locfit" ,r-locfit)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-annotationdbi
+           r-biocgenerics
+           r-dorng
+           r-foreach
+           r-genomeinfodb
+           r-genomicfeatures
+           r-genomicranges
+           r-iranges
+           r-iterators
+           r-limma
+           r-locfit
+           r-matrixstats
+           r-s4vectors))
     (home-page "https://github.com/ririzarr/bumphunter")
     (synopsis "Find bumps in genomic data")
     (description
@@ -6823,47 +7232,47 @@ studies.")
 (define-public r-minfi
   (package
     (name "r-minfi")
-    (version "1.38.0")
+    (version "1.40.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "minfi" version))
        (sha256
         (base32
-         "189lzppvrz6bw2kpppawgsfjyh2ahyy8bi9z8srpas67qf2r8jmj"))))
-    (build-system r-build-system)
-    (propagated-inputs
-     `(("r-beanplot" ,r-beanplot)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-biostrings" ,r-biostrings)
-       ("r-bumphunter" ,r-bumphunter)
-       ("r-data-table" ,r-data-table)
-       ("r-delayedarray" ,r-delayedarray)
-       ("r-delayedmatrixstats" ,r-delayedmatrixstats)
-       ("r-genefilter" ,r-genefilter)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-geoquery" ,r-geoquery)
-       ("r-hdf5array" ,r-hdf5array)
-       ("r-illuminaio" ,r-illuminaio)
-       ("r-iranges" ,r-iranges)
-       ("r-lattice" ,r-lattice)
-       ("r-limma" ,r-limma)
-       ("r-mass" ,r-mass)
-       ("r-mclust" ,r-mclust)
-       ("r-nlme" ,r-nlme)
-       ("r-nor1mix" ,r-nor1mix)
-       ("r-preprocesscore" ,r-preprocesscore)
-       ("r-quadprog" ,r-quadprog)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-reshape" ,r-reshape)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-siggenes" ,r-siggenes)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+         "0d5220nknwgi1020vhvf7408n5p80dmad66n85af5776qn84a6nx"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-beanplot
+           r-biobase
+           r-biocgenerics
+           r-biocparallel
+           r-biostrings
+           r-bumphunter
+           r-data-table
+           r-delayedarray
+           r-delayedmatrixstats
+           r-genefilter
+           r-genomeinfodb
+           r-genomicranges
+           r-geoquery
+           r-hdf5array
+           r-illuminaio
+           r-iranges
+           r-lattice
+           r-limma
+           r-mass
+           r-mclust
+           r-nlme
+           r-nor1mix
+           r-preprocesscore
+           r-quadprog
+           r-rcolorbrewer
+           r-reshape
+           r-s4vectors
+           r-siggenes
+           r-summarizedexperiment))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/hansenlab/minfi")
     (synopsis "Analyze Illumina Infinium DNA methylation arrays")
     (description
@@ -6874,36 +7283,37 @@ methylation arrays.")
 (define-public r-methylumi
   (package
     (name "r-methylumi")
-    (version "2.38.0")
+    (version "2.40.1")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "methylumi" version))
        (sha256
         (base32
-         "1941rc524ssx8gwhmwk40mgfrhddfs6hgldvs7bi22r29gm4y7qj"))))
-    (build-system r-build-system)
-    (propagated-inputs
-     `(("r-annotate" ,r-annotate)
-       ("r-annotationdbi" ,r-annotationdbi)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-fdb-infiniummethylation-hg19" ,r-fdb-infiniummethylation-hg19)
-       ("r-genefilter" ,r-genefilter)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-illuminaio" ,r-illuminaio)
-       ("r-iranges" ,r-iranges)
-       ("r-lattice" ,r-lattice)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-minfi" ,r-minfi)
-       ("r-reshape2" ,r-reshape2)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-scales" ,r-scales)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+         "1lfcsv8k9c4ndfwlbdk3vd7fq58100bfijyxklna41zf8m8kkkka"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-annotate
+           r-annotationdbi
+           r-biobase
+           r-biocgenerics
+           r-fdb-infiniummethylation-hg19
+           r-genefilter
+           r-genomeinfodb
+           r-genomicfeatures
+           r-genomicranges
+           r-ggplot2
+           r-illuminaio
+           r-iranges
+           r-lattice
+           r-matrixstats
+           r-minfi
+           r-reshape2
+           r-s4vectors
+           r-scales
+           r-summarizedexperiment))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/methylumi")
     (synopsis "Handle Illumina methylation data")
     (description
@@ -6920,31 +7330,31 @@ and Infinium HD arrays are also included.")
 (define-public r-lumi
   (package
     (name "r-lumi")
-    (version "2.44.0")
+    (version "2.46.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "lumi" version))
        (sha256
         (base32
-         "0qjdxjdzfnnxcm07bf51v38388s5qf1i03l1sdb9jf3gxdh8yh02"))))
-    (build-system r-build-system)
-    (propagated-inputs
-     `(("r-affy" ,r-affy)
-       ("r-annotate" ,r-annotate)
-       ("r-annotationdbi" ,r-annotationdbi)
-       ("r-biobase" ,r-biobase)
-       ("r-dbi" ,r-dbi)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-kernsmooth" ,r-kernsmooth)
-       ("r-lattice" ,r-lattice)
-       ("r-mass" ,r-mass)
-       ("r-methylumi" ,r-methylumi)
-       ("r-mgcv" ,r-mgcv)
-       ("r-nleqslv" ,r-nleqslv)
-       ("r-preprocesscore" ,r-preprocesscore)
-       ("r-rsqlite" ,r-rsqlite)))
+         "0v33p66vn4alhx2il9wwdvc9sqvgasgj0s2gk85gjc76ad0017in"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-affy
+           r-annotate
+           r-annotationdbi
+           r-biobase
+           r-dbi
+           r-genomicfeatures
+           r-genomicranges
+           r-kernsmooth
+           r-lattice
+           r-mass
+           r-methylumi
+           r-mgcv
+           r-nleqslv
+           r-preprocesscore
+           r-rsqlite))
     (home-page "https://bioconductor.org/packages/lumi")
     (synopsis "BeadArray-specific methods for Illumina methylation and expression microarrays")
     (description
@@ -6959,37 +7369,37 @@ especially Illumina Infinium methylation microarrays.")
 (define-public r-linnorm
   (package
     (name "r-linnorm")
-    (version "2.16.0")
+    (version "2.18.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "Linnorm" version))
        (sha256
         (base32
-         "035hrniycqadmkwg8rmzw8szv0amhy31390izy91rfrld31v2yy7"))))
+         "1bdnglznsfs1kdscqyjv595wiy09khcv9kxm4fmbnmksisqjz5qj"))))
     (properties `((upstream-name . "Linnorm")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-amap" ,r-amap)
-       ("r-apcluster" ,r-apcluster)
-       ("r-ellipse" ,r-ellipse)
-       ("r-fastcluster" ,r-fastcluster)
-       ("r-fpc" ,r-fpc)
-       ("r-ggdendro" ,r-ggdendro)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gmodels" ,r-gmodels)
-       ("r-igraph" ,r-igraph)
-       ("r-limma" ,r-limma)
-       ("r-mass" ,r-mass)
-       ("r-mclust" ,r-mclust)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-rtsne" ,r-rtsne)
-       ("r-statmod" ,r-statmod)
-       ("r-vegan" ,r-vegan)
-       ("r-zoo" ,r-zoo)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-amap
+           r-apcluster
+           r-ellipse
+           r-fastcluster
+           r-fpc
+           r-ggdendro
+           r-ggplot2
+           r-gmodels
+           r-igraph
+           r-limma
+           r-mass
+           r-mclust
+           r-rcpp
+           r-rcpparmadillo
+           r-rtsne
+           r-statmod
+           r-vegan
+           r-zoo))
+    (native-inputs
+     (list r-knitr))
     (home-page "http://www.jjwanglab.org/Linnorm/")
     (synopsis "Linear model and normality based transformation method")
     (description
@@ -7020,32 +7430,32 @@ evaluation of DEG analysis methods.")
 (define-public r-ioniser
   (package
     (name "r-ioniser")
-    (version "2.16.0")
+    (version "2.18.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "IONiseR" version))
        (sha256
         (base32
-         "0fknlwdfd49v09zspg0337b0zzc8hqza3563yrw51viw3g35d6q3"))))
+         "1hdg446z5s616aaalzz49if1wp9nmzm2mbyva82m1vz8i7ih9m4h"))))
     (properties `((upstream-name . "IONiseR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-biostrings" ,r-biostrings)
-       ("r-bit64" ,r-bit64)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-magrittr" ,r-magrittr)
-       ("r-rhdf5" ,r-rhdf5)
-       ("r-shortread" ,r-shortread)
-       ("r-stringr" ,r-stringr)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)
-       ("r-xvector" ,r-xvector)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-biocgenerics
+           r-biocparallel
+           r-biostrings
+           r-bit64
+           r-dplyr
+           r-ggplot2
+           r-magrittr
+           r-rhdf5
+           r-shortread
+           r-stringr
+           r-tibble
+           r-tidyr
+           r-xvector))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/IONiseR/")
     (synopsis "Quality assessment tools for Oxford Nanopore MinION data")
     (description
@@ -7072,10 +7482,7 @@ surface of a flowcell.")
     (properties `((upstream-name . "mutoss")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-multcomp" ,r-multcomp)
-       ("r-multtest" ,r-multtest)
-       ("r-mvtnorm" ,r-mvtnorm)
-       ("r-plotrix" ,r-plotrix)))
+     (list r-multcomp r-multtest r-mvtnorm r-plotrix))
     (home-page "https://github.com/kornl/mutoss/")
     (synopsis "Unified multiple testing procedures")
     (description
@@ -7100,10 +7507,7 @@ are standardized and usable by the accompanying mutossGUI package.")
          "1jmmmmjiklaxfl604hwqil193ydaghvd5jv8xsr4bx3pzn5i9kvz"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lattice" ,r-lattice)
-       ("r-mutoss" ,r-mutoss)
-       ("r-rdpack" ,r-rdpack)
-       ("r-tfisher" ,r-tfisher)))
+     (list r-lattice r-mutoss r-rdpack r-tfisher))
     (home-page "http://www.dewey.myzen.co.uk/meta/meta.html")
     (synopsis "Meta-analysis of significance values")
     (description
@@ -7117,36 +7521,37 @@ published results; and a routine for graphical display.")
 (define-public r-tradeseq
   (package
    (name "r-tradeseq")
-   (version "1.6.0")
+   (version "1.8.0")
    (source (origin
             (method url-fetch)
             (uri (bioconductor-uri "tradeSeq" version))
             (sha256
              (base32
-              "0fgmb309pvqf3chdhqgbd4lzhahcj5g71sica33nzn98qhipldx7"))))
+              "1s5anbb38gi5sfkxy19zpvkj8d0ij7m6cd0z4gmx4f5pf7pz0m3j"))))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-biobase" ,r-biobase)
-      ("r-biocparallel" ,r-biocparallel)
-      ("r-edger" ,r-edger)
-      ("r-ggplot2" ,r-ggplot2)
-      ("r-igraph" ,r-igraph)
-      ("r-magrittr" ,r-magrittr)
-      ("r-matrix" ,r-matrix)
-      ("r-matrixstats" ,r-matrixstats)
-      ("r-mgcv" ,r-mgcv)
-      ("r-monocle" ,r-monocle)
-      ("r-pbapply" ,r-pbapply)
-      ("r-princurve" ,r-princurve)
-      ("r-rcolorbrewer" ,r-rcolorbrewer)
-      ("r-s4vectors" ,r-s4vectors)
-      ("r-singlecellexperiment" ,r-singlecellexperiment)
-      ("r-slingshot" ,r-slingshot)
-      ("r-summarizedexperiment" ,r-summarizedexperiment)
-      ("r-tibble" ,r-tibble)
-      ("r-viridis" ,r-viridis)))
+    (list r-biobase
+          r-biocparallel
+          r-edger
+          r-ggplot2
+          r-igraph
+          r-magrittr
+          r-mass
+          r-matrix
+          r-matrixstats
+          r-mgcv
+          r-pbapply
+          r-princurve
+          r-rcolorbrewer
+          r-s4vectors
+          r-singlecellexperiment
+          r-slingshot
+          r-summarizedexperiment
+          r-tibble
+          r-trajectoryutils
+          r-viridis))
    (native-inputs
-    `(("r-knitr" ,r-knitr)))
+    (list r-knitr))
    (home-page "https://statomics.github.io/tradeSeq/index.html")
    (synopsis "Trajectory-based differential expression analysis")
    (description
@@ -7173,9 +7578,7 @@ performs inference on the parameters of the GAM.")
          "089b7f6dwpi9abj0ncswbi4s30k45996zb99sh43avw6jcb6qj60"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-iranges" ,r-iranges)
-       ("r-yaml" ,r-yaml)))
+     (list r-biocgenerics r-iranges r-yaml))
     (home-page "https://bioconductor.org/packages/triform/")
     (synopsis "Find enriched regions in transcription factor ChIP-sequencing data")
     (description
@@ -7187,31 +7590,31 @@ peak definition in combination with known profile characteristics.")
 (define-public r-varianttools
   (package
     (name "r-varianttools")
-    (version "1.34.0")
+    (version "1.36.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "VariantTools" version))
        (sha256
         (base32
-         "1gpzrln2clfrja8rzxhsis6bi1xqglh3h2lhvqlnrx4lqxhbkv9c"))))
+         "0079dsgav4q03c4i0dhggc88iifd828n73kjv3sahim9akafdshl"))))
     (properties `((upstream-name . "VariantTools")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-biostrings" ,r-biostrings)
-       ("r-bsgenome" ,r-bsgenome)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-matrix" ,r-matrix)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-variantannotation" ,r-variantannotation)))
+     (list r-biobase
+           r-biocgenerics
+           r-biocparallel
+           r-biostrings
+           r-bsgenome
+           r-genomeinfodb
+           r-genomicfeatures
+           r-genomicranges
+           r-iranges
+           r-matrix
+           r-rsamtools
+           r-rtracklayer
+           r-s4vectors
+           r-variantannotation))
     (home-page "https://bioconductor.org/packages/VariantTools/")
     (synopsis "Tools for exploratory analysis of variant calls")
     (description
@@ -7227,18 +7630,18 @@ gmapR.")
 (define-public r-heatplus
   (package
     (name "r-heatplus")
-    (version "3.0.0")
+    (version "3.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "Heatplus" version))
        (sha256
         (base32
-         "0xwg3sxmihg3p6v3nxgrqy0nrqxi6razg3b3rjh2gcb2vv8gcqng"))))
+         "0yrnjrbfn8vjzvp2742lyxdqca4s18h73j44qxw7ib95x3p4lndf"))))
     (properties `((upstream-name . "Heatplus")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcolorbrewer" ,r-rcolorbrewer)))
+     (list r-rcolorbrewer))
     (home-page "https://github.com/alexploner/Heatplus")
     (synopsis "Heatmaps with row and/or column covariates and colored clusters")
     (description
@@ -7252,22 +7655,20 @@ information about samples and features can be added to the plot.")
 (define-public r-gosemsim
   (package
     (name "r-gosemsim")
-    (version "2.18.1")
+    (version "2.20.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "GOSemSim" version))
        (sha256
         (base32
-         "00dbgkiv9x7g2i0anzcxpycwqqqry0y7jl3ad93lhvi31qnqq1sm"))))
+         "15qi69kkgah7g25bymk9q1xf16hp1rd040fglg0svnydylg2d0ab"))))
     (properties `((upstream-name . "GOSemSim")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-go-db" ,r-go-db)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-annotationdbi r-go-db r-rcpp))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://guangchuangyu.github.io/software/GOSemSim")
     (synopsis "GO-terms semantic similarity measures")
     (description
@@ -7281,18 +7682,17 @@ sets of GO terms, gene products and gene clusters.")
 (define-public r-anota
   (package
     (name "r-anota")
-    (version "1.40.0")
+    (version "1.42.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "anota" version))
        (sha256
         (base32
-         "039bmcv5l44gszb6xapbihp3mfqdaaa8mfc05y702p78i7x93g5y"))))
+         "0agvcpb3lr9v55h53ywf662gpxayivxacv8dcm526cc8i8hdqa9f"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-multtest" ,r-multtest)
-       ("r-qvalue" ,r-qvalue)))
+     (list r-multtest r-qvalue))
     (home-page "https://bioconductor.org/packages/anota/")
     (synopsis "Analysis of translational activity")
     (description
@@ -7312,14 +7712,14 @@ the data set is suitable for such analysis.")
 (define-public r-sigpathway
   (package
     (name "r-sigpathway")
-    (version "1.60.0")
+    (version "1.62.0")
     (source
       (origin
         (method url-fetch)
         (uri (bioconductor-uri "sigPathway" version))
         (sha256
           (base32
-            "1xz5nbw5dzyah8az7mpwj8m27fsvpi2jjhfg3n27dsv8rvdncqi8"))))
+            "1c46m1gbgiygcj8m65h8iwzk3fkp6nynd6rk1f5qdh7kw5ap28f9"))))
     (properties `((upstream-name . "sigPathway")))
     (build-system r-build-system)
     (home-page "https://www.pnas.org/cgi/doi/10.1073/pnas.0506577102")
@@ -7331,29 +7731,62 @@ specified group of genes for a pathway has a coordinated association with a
 phenotype of interest.")
     (license license:gpl2)))
 
+(define-public r-fcscan
+  (package
+    (name "r-fcscan")
+    (version "1.8.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (bioconductor-uri "fcScan" version))
+       (sha256
+        (base32 "0b161ayq4m9xxfs0lgw632lgygzabz8gjl0n75050pa7qaazknvd"))))
+    (properties `((upstream-name . "fcScan")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-doparallel
+           r-foreach
+           r-genomicranges
+           r-iranges
+           r-plyr
+           r-rtracklayer
+           r-summarizedexperiment
+           r-variantannotation))
+    (native-inputs (list r-knitr))
+    (home-page "https://bioconductor.org/packages/fcScan")
+    (synopsis "Detect clusters of coordinates with user defined options")
+    (description
+     "This package is used to detect combination of genomic coordinates
+falling within a user defined window size along with user defined overlap
+between identified neighboring clusters.  It can be used for genomic data
+where the clusters are built on a specific chromosome or specific strand.
+Clustering can be performed with a \"greedy\" option allowing thus the
+presence of additional sites within the allowed window size.")
+    (license license:artistic2.0)))
+
 (define-public r-fgsea
   (package
     (name "r-fgsea")
-    (version "1.18.0")
+    (version "1.20.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "fgsea" version))
        (sha256
         (base32
-         "1mhdgy46nxgv7v54bk9bqfy0vgjzl1law7zy718swdd762xn6g9d"))))
+         "10flcdm4b1kxnsvhl4k6mwkzb1vbai33k291j8nsrhj2cl5l8gm9"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bh" ,r-bh)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-data-table" ,r-data-table)
-       ("r-fastmatch" ,r-fastmatch)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-bh
+           r-biocparallel
+           r-data-table
+           r-fastmatch
+           r-ggplot2
+           r-gridextra
+           r-matrix
+           r-rcpp))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/ctlab/fgsea/")
     (synopsis "Fast gene set enrichment analysis")
     (description
@@ -7366,27 +7799,27 @@ to multiple hypothesis correction.")
 (define-public r-dose
   (package
     (name "r-dose")
-    (version "3.18.2")
+    (version "3.20.1")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "DOSE" version))
        (sha256
         (base32
-         "0kp6j42mpxrpd02cjrzqmrx3rvvpi90xiy4gc5km6ny3vxbhlaqw"))))
+         "10kknaqz40pb6v0fcjzp12hfpi6k5kvlqnyxx1k3y0h0wdg8hs3n"))))
     (properties `((upstream-name . "DOSE")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-do-db" ,r-do-db)
-       ("r-fgsea" ,r-fgsea)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gosemsim" ,r-gosemsim)
-       ("r-qvalue" ,r-qvalue)
-       ("r-reshape2" ,r-reshape2)))
+     (list r-annotationdbi
+           r-biocparallel
+           r-do-db
+           r-fgsea
+           r-ggplot2
+           r-gosemsim
+           r-qvalue
+           r-reshape2))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://guangchuangyu.github.io/software/DOSE/")
     (synopsis "Disease ontology semantic and enrichment analysis")
     (description
@@ -7401,32 +7834,33 @@ data.")
 (define-public r-enrichplot
   (package
     (name "r-enrichplot")
-    (version "1.12.2")
+    (version "1.14.1")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "enrichplot" version))
        (sha256
         (base32
-         "194sfmcnjfi3fvvfpljg1f80f44vvvxiij336b8z1dgzki6bqa3r"))))
+         "0nsx96mkcg0hhg3x8jndzq3xvq9bq7m4yf1b3ry73b17ladx81ch"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cowplot" ,r-cowplot)
-       ("r-dose" ,r-dose)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggraph" ,r-ggraph)
-       ("r-ggtree" ,r-ggtree)
-       ("r-gosemsim" ,r-gosemsim)
-       ("r-igraph" ,r-igraph)
-       ("r-magrittr" ,r-magrittr)
-       ("r-plyr" ,r-plyr)
-       ("r-purrr" ,r-purrr)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-reshape2" ,r-reshape2)
-       ("r-scatterpie" ,r-scatterpie)
-       ("r-shadowtext" ,r-shadowtext)))
+     (list r-aplot
+           r-dose
+           r-ggplot2
+           r-ggraph
+           r-ggtree
+           r-gosemsim
+           r-igraph
+           r-magrittr
+           r-plyr
+           r-purrr
+           r-rcolorbrewer
+           r-reshape2
+           r-scatterpie
+           r-shadowtext
+           r-yulab-utils))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/GuangchuangYu/enrichplot")
     (synopsis "Visualization of functional enrichment result")
     (description
@@ -7438,33 +7872,33 @@ All the visualization methods are developed based on ggplot2 graphics.")
 (define-public r-clusterprofiler
   (package
     (name "r-clusterprofiler")
-    (version "4.0.5")
+    (version "4.2.1")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "clusterProfiler" version))
        (sha256
         (base32
-         "1dccrl2ffhgmv3iqlmpln7z86ahpf0j9ma194fnknsgi3cd9rhrl"))))
+         "08jhcbanz24x7zdkxznxz787g0nk3jfzd7zsap13sra7qnwaswq4"))))
     (properties
      `((upstream-name . "clusterProfiler")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-dose" ,r-dose)
-       ("r-downloader" ,r-downloader)
-       ("r-dplyr" ,r-dplyr)
-       ("r-enrichplot" ,r-enrichplot)
-       ("r-go-db" ,r-go-db)
-       ("r-gosemsim" ,r-gosemsim)
-       ("r-magrittr" ,r-magrittr)
-       ("r-plyr" ,r-plyr)
-       ("r-qvalue" ,r-qvalue)
-       ("r-rlang" ,r-rlang)
-       ("r-tidyr" ,r-tidyr)
-       ("r-yulab-utils" ,r-yulab-utils)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-annotationdbi
+           r-dose
+           r-downloader
+           r-dplyr
+           r-enrichplot
+           r-go-db
+           r-gosemsim
+           r-magrittr
+           r-plyr
+           r-qvalue
+           r-rlang
+           r-tidyr
+           r-yulab-utils))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://guangchuangyu.github.io/software/clusterProfiler/")
     (synopsis "Analysis and visualization of functional profiles for gene clusters")
     (description
@@ -7475,42 +7909,42 @@ profiles (GO and KEGG) of gene and gene clusters.")
 (define-public r-clusterexperiment
   (package
     (name "r-clusterexperiment")
-    (version "2.12.0")
+    (version "2.14.0")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "clusterExperiment" version))
               (sha256
                (base32
-                "1fhmayciwn1m124b4dcs3gzbghgk9f7a7qmjnvvxc958cywcwkx5"))))
-    (build-system r-build-system)
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
-    (propagated-inputs
-     `(("r-ape" ,r-ape)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocsingular" ,r-biocsingular)
-       ("r-cluster" ,r-cluster)
-       ("r-delayedarray" ,r-delayedarray)
-       ("r-edger" ,r-edger)
-       ("r-hdf5array" ,r-hdf5array)
-       ("r-howmany" ,r-howmany)
-       ("r-kernlab" ,r-kernlab)
-       ("r-limma" ,r-limma)
-       ("r-locfdr" ,r-locfdr)
-       ("r-matrix" ,r-matrix)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-mbkmeans" ,r-mbkmeans)
-       ("r-nmf" ,r-nmf)
-       ("r-phylobase" ,r-phylobase)
-       ("r-pracma" ,r-pracma)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rcpp" ,r-rcpp)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-scales" ,r-scales)
-       ("r-singlecellexperiment" ,r-singlecellexperiment)
-       ("r-stringr" ,r-stringr)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-zinbwave" ,r-zinbwave)))
+                "0riray1f841d5fx6mbcki5xmqz21kg5q5l0qz4pkgg9c1d9f7mbc"))))
+    (build-system r-build-system)
+    (native-inputs
+     (list r-knitr))
+    (propagated-inputs
+     (list r-ape
+           r-biocgenerics
+           r-biocsingular
+           r-cluster
+           r-delayedarray
+           r-edger
+           r-hdf5array
+           r-howmany
+           r-kernlab
+           r-limma
+           r-locfdr
+           r-matrix
+           r-matrixstats
+           r-mbkmeans
+           r-nmf
+           r-phylobase
+           r-pracma
+           r-rcolorbrewer
+           r-rcpp
+           r-s4vectors
+           r-scales
+           r-singlecellexperiment
+           r-stringr
+           r-summarizedexperiment
+           r-zinbwave))
     (home-page "https://bioconductor.org/packages/clusterExperiment/")
     (synopsis "Compare clusterings for single-cell sequencing")
     (description "This package provides functionality for running and comparing
@@ -7521,37 +7955,37 @@ expression data sets.")
 (define-public r-mlinterfaces
   (package
     (name "r-mlinterfaces")
-    (version "1.72.0")
+    (version "1.74.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "MLInterfaces" version))
        (sha256
         (base32
-         "0ipzv7wdvfqhdyjiak956qq201igsdxm6dr6rh3dj6cssgsrnrpb"))))
+         "1nzy04fqwzb0ywiafgx3m3i2n1b0g4pcg8mlgh8yz5d3mmna4kag"))))
     (properties `((upstream-name . "MLInterfaces")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotate" ,r-annotate)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-cluster" ,r-cluster)
-       ("r-fpc" ,r-fpc)
-       ("r-gbm" ,r-gbm)
-       ("r-gdata" ,r-gdata)
-       ("r-genefilter" ,r-genefilter)
-       ("r-ggvis" ,r-ggvis)
-       ("r-hwriter" ,r-hwriter)
-       ("r-magrittr" ,r-magrittr)
-       ("r-mass" ,r-mass)
-       ("r-mlbench" ,r-mlbench)
-       ("r-pls" ,r-pls)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rpart" ,r-rpart)
-       ("r-sfsmisc" ,r-sfsmisc)
-       ("r-shiny" ,r-shiny)
-       ("r-threejs" ,r-threejs)))
+     (list r-annotate
+           r-biobase
+           r-biocgenerics
+           r-cluster
+           r-fpc
+           r-gbm
+           r-gdata
+           r-genefilter
+           r-ggvis
+           r-hwriter
+           r-magrittr
+           r-mass
+           r-mlbench
+           r-pls
+           r-rcolorbrewer
+           r-rcpp
+           r-rpart
+           r-sfsmisc
+           r-shiny
+           r-threejs))
     (home-page "https://bioconductor.org/packages/MLInterfaces/")
     (synopsis "Interfaces to R machine learning procedures")
     (description
@@ -7563,14 +7997,14 @@ data in R and Bioconductor containers.")
 (define-public r-annaffy
   (package
     (name "r-annaffy")
-    (version "1.64.2")
+    (version "1.66.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "annaffy" version))
        (sha256
         (base32
-         "03y633vgxprd2abhanj4sanmb4ymz7az5aiasxn6wjzawiqjdcb1"))))
+         "0crj37v571005brdd0ypfx2a7d1f829xxj2hahp2gy8aj9xm4s8l"))))
     (build-system r-build-system)
     (arguments
      `(#:phases
@@ -7580,11 +8014,7 @@ data in R and Bioconductor containers.")
              (substitute* "DESCRIPTION"
                ((", KEGG.db") "")))))))
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-biobase" ,r-biobase)
-       ("r-biocmanager" ,r-biocmanager)
-       ("r-dbi" ,r-dbi)
-       ("r-go-db" ,r-go-db)))
+     (list r-annotationdbi r-biobase r-biocmanager r-dbi r-go-db))
     (home-page "https://bioconductor.org/packages/annaffy/")
     (synopsis "Annotation tools for Affymetrix biological metadata")
     (description
@@ -7599,21 +8029,20 @@ It allows searching of biological metadata using various criteria.")
 (define-public r-a4core
   (package
     (name "r-a4core")
-    (version "1.40.0")
+    (version "1.42.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "a4Core" version))
        (sha256
         (base32
-         "00fi753nsayv0xspavw8r9ni1sim8ng33hp3d3kj2b8ihygd1s10"))))
+         "074aa52y6c70417lxwrclk613gbs7zv3326g9ndbbzzs5pmnh1y0"))))
     (properties `((upstream-name . "a4Core")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-glmnet" ,r-glmnet)))
+     (list r-biobase r-glmnet))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/a4Core")
     (synopsis "Automated Affymetrix array analysis core package")
     (description
@@ -7624,26 +8053,26 @@ arrays.")
 (define-public r-a4classif
   (package
     (name "r-a4classif")
-    (version "1.40.0")
+    (version "1.42.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "a4Classif" version))
        (sha256
         (base32
-         "1lz85bys5dp5d1ir9c9c4wy85wkk62s14niyzzxaqrxpsji2p2iw"))))
+         "0q50d41n7drj5c9x6njyvzr6bj7glmkp1vpyz6cpj97j2v9nikwb"))))
     (properties `((upstream-name . "a4Classif")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-a4core" ,r-a4core)
-       ("r-a4preproc" ,r-a4preproc)
-       ("r-biobase" ,r-biobase)
-       ("r-glmnet" ,r-glmnet)
-       ("r-pamr" ,r-pamr)
-       ("r-rocr" ,r-rocr)
-       ("r-varselrf" ,r-varselrf)))
+     (list r-a4core
+           r-a4preproc
+           r-biobase
+           r-glmnet
+           r-pamr
+           r-rocr
+           r-varselrf))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/a4Classif/")
     (synopsis "Automated Affymetrix array analysis classification package")
     (description
@@ -7654,21 +8083,20 @@ Affymetrix arrays.")
 (define-public r-a4preproc
   (package
     (name "r-a4preproc")
-    (version "1.40.0")
+    (version "1.42.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "a4Preproc" version))
        (sha256
         (base32
-         "1jibm2f5glzsrvl64hxc5sf59d4w6ry0f663p619hfr44mi1mpri"))))
+         "1qzr54w1qys1ppd71i5b57503dijfnnbn516a2mfk5l9l7wr728d"))))
     (properties `((upstream-name . "a4Preproc")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)))
+     (list r-biobase r-biocgenerics))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/a4Preproc/")
     (synopsis "Automated Affymetrix array analysis preprocessing package")
     (description
@@ -7679,20 +8107,20 @@ is used for preprocessing the arrays.")
 (define-public r-a4reporting
   (package
     (name "r-a4reporting")
-    (version "1.40.0")
+    (version "1.42.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "a4Reporting" version))
        (sha256
         (base32
-         "09jjfby5znmg2fdkhpbinx2v21zrfa44qq7cylcn9ipffqx3pk86"))))
+         "1vyah71gm4ngsgy0y10cdxa9b1g810gqa5pbvb3krh5i6h35smwr"))))
     (properties `((upstream-name . "a4Reporting")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-xtable" ,r-xtable)))
+     (list r-xtable))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/a4Reporting/")
     (synopsis "Automated Affymetrix array analysis reporting package")
     (description
@@ -7703,27 +8131,27 @@ provides reporting features.")
 (define-public r-a4base
   (package
     (name "r-a4base")
-    (version "1.40.0")
+    (version "1.42.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "a4Base" version))
        (sha256
         (base32
-         "101w4i0w8n7qhki22qr8l8wk8w6zalzmcywqm2g4238qv7xbnr8p"))))
+         "0rddxnflvbc6z4sj2h8js8yfh0zhrrwj8fk00wicaqp4rkr5yaxy"))))
     (properties `((upstream-name . "a4Base")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-a4core" ,r-a4core)
-       ("r-a4preproc" ,r-a4preproc)
-       ("r-annaffy" ,r-annaffy)
-       ("r-biobase" ,r-biobase)
-       ("r-genefilter" ,r-genefilter)
-       ("r-glmnet" ,r-glmnet)
-       ("r-gplots" ,r-gplots)
-       ("r-limma" ,r-limma)
-       ("r-mpm" ,r-mpm)
-       ("r-multtest" ,r-multtest)))
+     (list r-a4core
+           r-a4preproc
+           r-annaffy
+           r-biobase
+           r-genefilter
+           r-glmnet
+           r-gplots
+           r-limma
+           r-mpm
+           r-multtest))
     (home-page "https://bioconductor.org/packages/a4Base/")
     (synopsis "Automated Affymetrix array analysis base package")
     (description
@@ -7734,21 +8162,17 @@ Affymetrix arrays.")
 (define-public r-a4
   (package
     (name "r-a4")
-    (version "1.40.0")
+    (version "1.42.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "a4" version))
        (sha256
         (base32
-         "0bwn185admy5k99fkd2dhhvy7x1f75r0mqn5k24dbbg0paw6nnr8"))))
+         "0mkgim93441zxhn4wmbin9ydl94srsawis0xwx479l0byj88n07m"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-a4base" ,r-a4base)
-       ("r-a4classif" ,r-a4classif)
-       ("r-a4core" ,r-a4core)
-       ("r-a4preproc" ,r-a4preproc)
-       ("r-a4reporting" ,r-a4reporting)))
+     (list r-a4base r-a4classif r-a4core r-a4preproc r-a4reporting))
     (home-page "https://bioconductor.org/packages/a4/")
     (synopsis "Automated Affymetrix array analysis umbrella package")
     (description
@@ -7759,39 +8183,39 @@ Affymetrix arrays.")
 (define-public r-abseqr
   (package
     (name "r-abseqr")
-    (version "1.10.0")
+    (version "1.12.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "abseqR" version))
        (sha256
         (base32
-         "1xvk84gd1lfq1icrfwwd6y79zywrisfnc3knprigzzax31aks32c"))))
+         "1v9g71x689ly107c0qmc5iv8qk63nn6lp7yd03jf7hlcafmvqsvz"))))
     (properties `((upstream-name . "abseqR")))
     (build-system r-build-system)
     (inputs
-     `(("pandoc" ,pandoc)))
-    (propagated-inputs
-     `(("r-biocparallel" ,r-biocparallel)
-       ("r-biocstyle" ,r-biocstyle)
-       ("r-circlize" ,r-circlize)
-       ("r-flexdashboard" ,r-flexdashboard)
-       ("r-ggcorrplot" ,r-ggcorrplot)
-       ("r-ggdendro" ,r-ggdendro)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-knitr" ,r-knitr)
-       ("r-plotly" ,r-plotly)
-       ("r-plyr" ,r-plyr)
-       ("r-png" ,r-png)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-reshape2" ,r-reshape2)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("r-stringr" ,r-stringr)
-       ("r-vegan" ,r-vegan)
-       ("r-venndiagram" ,r-venndiagram)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list pandoc))
+    (propagated-inputs
+     (list r-biocparallel
+           r-biocstyle
+           r-circlize
+           r-flexdashboard
+           r-ggcorrplot
+           r-ggdendro
+           r-ggplot2
+           r-gridextra
+           r-knitr
+           r-plotly
+           r-plyr
+           r-png
+           r-rcolorbrewer
+           r-reshape2
+           r-rmarkdown
+           r-stringr
+           r-vegan
+           r-venndiagram))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/malhamdoosh/abseqR")
     (synopsis "Reporting and data analysis for Rep-Seq datasets of antibody libraries")
     (description
@@ -7807,21 +8231,19 @@ further downstream analysis on its output.")
 (define-public r-bacon
   (package
     (name "r-bacon")
-    (version "1.20.0")
+    (version "1.22.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "bacon" version))
        (sha256
         (base32
-         "1yp0675n1g8rxdjdd7w8al5c9jq96h0kfm8218mc50z0p2fasgbj"))))
+         "13dhma34j9ggryainn4x6qvd3hphpxks5gf0mysia00r9hhpwwlc"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocparallel" ,r-biocparallel)
-       ("r-ellipse" ,r-ellipse)
-       ("r-ggplot2" ,r-ggplot2)))
+     (list r-biocparallel r-ellipse r-ggplot2))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/bacon/")
     (synopsis "Controlling bias and inflation in association studies")
     (description
@@ -7834,22 +8256,18 @@ fitting a three-component normal mixture on z-scores.")
 (define-public r-rgadem
   (package
     (name "r-rgadem")
-    (version "2.40.0")
+    (version "2.42.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "rGADEM" version))
        (sha256
         (base32
-         "05drbhjqn5kik6k4h03vr3d2b6pv5rm65lsnkyx4caxxcdii4jzm"))))
+         "1v8xgqqv7m2kyc38x9ppwsv87ivll5ppd6z76zcxj5yspkkrqw3v"))))
     (properties `((upstream-name . "rGADEM")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biostrings" ,r-biostrings)
-       ("r-bsgenome" ,r-bsgenome)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-seqlogo" ,r-seqlogo)))
+     (list r-biostrings r-bsgenome r-genomicranges r-iranges r-seqlogo))
     (home-page "https://bioconductor.org/packages/rGADEM/")
     (synopsis "De novo sequence motif discovery")
     (description
@@ -7871,15 +8289,15 @@ genomic sequence data.")
     (properties `((upstream-name . "MotIV")))
     (build-system r-build-system)
     (inputs
-     `(("gsl" ,gsl)))
-    (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-biostrings" ,r-biostrings)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-lattice" ,r-lattice)
-       ("r-rgadem" ,r-rgadem)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list gsl))
+    (propagated-inputs
+     (list r-biocgenerics
+           r-biostrings
+           r-genomicranges
+           r-iranges
+           r-lattice
+           r-rgadem
+           r-s4vectors))
     (home-page "https://bioconductor.org/packages/MotIV/")
     (synopsis "Motif identification and validation")
     (description
@@ -7892,24 +8310,24 @@ distributions, modules and filter motifs.")
 (define-public r-motifdb
   (package
    (name "r-motifdb")
-   (version "1.34.0")
+   (version "1.36.0")
    (source (origin
             (method url-fetch)
             (uri (bioconductor-uri "MotifDb" version))
             (sha256
-             (base32 "04cmgg5mw1cqbg95zyfc2imykmdxyff16w26rq97xghcxwiq2b3z"))))
+             (base32 "0a2zg26zzk7bj5c33mbwl8dx9lh1hns8q8kwp09rbfjdichv7425"))))
    (properties `((upstream-name . "MotifDb")))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-biocgenerics" ,r-biocgenerics)
-      ("r-biostrings" ,r-biostrings)
-      ("r-genomicranges" ,r-genomicranges)
-      ("r-iranges" ,r-iranges)
-      ("r-rtracklayer" ,r-rtracklayer)
-      ("r-s4vectors" ,r-s4vectors)
-      ("r-splitstackshape" ,r-splitstackshape)))
+    (list r-biocgenerics
+          r-biostrings
+          r-genomicranges
+          r-iranges
+          r-rtracklayer
+          r-s4vectors
+          r-splitstackshape))
    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
    (home-page "https://www.bioconductor.org/packages/MotifDb/")
    (synopsis "Annotated collection of protein-DNA binding sequence motifs")
    (description "This package provides more than 2000 annotated position
@@ -7919,35 +8337,35 @@ frequency matrices from nine public sources, for multiple organisms.")
 (define-public r-motifbreakr
   (package
    (name "r-motifbreakr")
-   (version "2.6.1")
+   (version "2.8.0")
    (source (origin
             (method url-fetch)
             (uri (bioconductor-uri "motifbreakR" version))
             (sha256
-             (base32 "1n6v8a7c27aswmbrlcwcpghf27aplkc6nn923imglc3c0sh2lkrz"))))
+             (base32 "0lrgy64sv2ma6kylp4lsbwkg6ci1kn6qkk0cvzw3m4k3bgia1npj"))))
    (properties `((upstream-name . "motifbreakR")))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-biocgenerics" ,r-biocgenerics)
-      ("r-biocparallel" ,r-biocparallel)
-      ("r-biostrings" ,r-biostrings)
-      ("r-bsgenome" ,r-bsgenome)
-      ("r-genomeinfodb" ,r-genomeinfodb)
-      ("r-genomicranges" ,r-genomicranges)
-      ("r-grimport" ,r-grimport)
-      ("r-gviz" ,r-gviz)
-      ("r-iranges" ,r-iranges)
-      ("r-matrixstats" ,r-matrixstats)
-      ("r-motifdb" ,r-motifdb)
-      ("r-motifstack" ,r-motifstack)
-      ("r-rtracklayer" ,r-rtracklayer)
-      ("r-s4vectors" ,r-s4vectors)
-      ("r-stringr" ,r-stringr)
-      ("r-summarizedexperiment" ,r-summarizedexperiment)
-      ("r-tfmpvalue" ,r-tfmpvalue)
-      ("r-variantannotation" ,r-variantannotation)))
+    (list r-biocgenerics
+          r-biocparallel
+          r-biostrings
+          r-bsgenome
+          r-genomeinfodb
+          r-genomicranges
+          r-grimport
+          r-gviz
+          r-iranges
+          r-matrixstats
+          r-motifdb
+          r-motifstack
+          r-rtracklayer
+          r-s4vectors
+          r-stringr
+          r-summarizedexperiment
+          r-tfmpvalue
+          r-variantannotation))
    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
    (home-page "https://www.bioconductor.org/packages/motifbreakR/")
    (synopsis "Predicting disruptiveness of single nucleotide polymorphisms")
    (description "This package allows biologists to judge in the first place
@@ -7970,24 +8388,20 @@ Bioconductor.")
 (define-public r-motifstack
   (package
     (name "r-motifstack")
-    (version "1.36.0")
+    (version "1.38.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "motifStack" version))
        (sha256
         (base32
-         "0yn348kmw7v46iym913ncx4yh5nxzmba8bdys52s12ldgjja53gp"))))
+         "1ck6bbnrab8mbf70alfdsrcv6lq0fkvcy3klhcwyxxir7r9sgbaz"))))
     (properties `((upstream-name . "motifStack")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ade4" ,r-ade4)
-       ("r-biostrings" ,r-biostrings)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-htmlwidgets" ,r-htmlwidgets)
-       ("r-xml" ,r-xml)))
+     (list r-ade4 r-biostrings r-ggplot2 r-htmlwidgets r-xml))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/motifStack/")
     (synopsis "Plot stacked logos for DNA, RNA and amino acid sequences")
     (description
@@ -8001,33 +8415,33 @@ type and symbol colors.")
 (define-public r-genomicscores
   (package
     (name "r-genomicscores")
-    (version "2.4.0")
+    (version "2.6.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "GenomicScores" version))
        (sha256
         (base32
-         "1b8982fj0r7igj749wljsdfn3c985w8n3d5gbhr5rw73llfb8x6w"))))
+         "18fzi2qi95851ci7qrzwpb7v6fhwp6xi1d1vk11xbygpbvql5mls"))))
     (properties `((upstream-name . "GenomicScores")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationhub" ,r-annotationhub)
-       ("r-biobase" ,r-biobase)
-       ("r-biocfilecache" ,r-biocfilecache)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocmanager" ,r-biocmanager)
-       ("r-biostrings" ,r-biostrings)
-       ("r-delayedarray" ,r-delayedarray)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-hdf5array" ,r-hdf5array)
-       ("r-iranges" ,r-iranges)
-       ("r-rhdf5" ,r-rhdf5)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-xml" ,r-xml)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-annotationhub
+           r-biobase
+           r-biocfilecache
+           r-biocgenerics
+           r-biocmanager
+           r-biostrings
+           r-delayedarray
+           r-genomeinfodb
+           r-genomicranges
+           r-hdf5array
+           r-iranges
+           r-rhdf5
+           r-s4vectors
+           r-xml))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/rcastelo/GenomicScores/")
     (synopsis "Work with genome-wide position-specific scores")
     (description
@@ -8038,37 +8452,37 @@ position-specific scores within R and Bioconductor.")
 (define-public r-atacseqqc
   (package
     (name "r-atacseqqc")
-    (version "1.16.0")
+    (version "1.18.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "ATACseqQC" version))
        (sha256
         (base32
-         "168g3xkhjzrfjpa1ynifdyfhsxx3rpyrbybsarlzr9kslw1cdkxl"))))
+         "0i1i3bfkp1xsjdl1nd56mlh66qz3aasd1hp09d4i31njz2f9znwn"))))
     (properties `((upstream-name . "ATACseqQC")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-biostrings" ,r-biostrings)
-       ("r-bsgenome" ,r-bsgenome)
-       ("r-chippeakanno" ,r-chippeakanno)
-       ("r-edger" ,r-edger)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-genomicscores" ,r-genomicscores)
-       ("r-iranges" ,r-iranges)
-       ("r-kernsmooth" ,r-kernsmooth)
-       ("r-limma" ,r-limma)
-       ("r-motifstack" ,r-motifstack)
-       ("r-preseqr" ,r-preseqr)
-       ("r-randomforest" ,r-randomforest)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-biocgenerics
+           r-biostrings
+           r-bsgenome
+           r-chippeakanno
+           r-edger
+           r-genomeinfodb
+           r-genomicalignments
+           r-genomicranges
+           r-genomicscores
+           r-iranges
+           r-kernsmooth
+           r-limma
+           r-motifstack
+           r-preseqr
+           r-randomforest
+           r-rsamtools
+           r-rtracklayer
+           r-s4vectors))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/ATACseqQC/")
     (synopsis "ATAC-seq quality control")
     (description
@@ -8085,26 +8499,26 @@ footprints.")
 (define-public r-gofuncr
   (package
     (name "r-gofuncr")
-    (version "1.12.0")
+    (version "1.14.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "GOfuncR" version))
        (sha256
         (base32
-         "0lp2gmjlsk1yqxim5pi26i27iijw11lrcxmji7ynlag359yfnynd"))))
+         "08n1d03i4l2dl47axmrziiypi83yffndf0ww1b32skyjm2r0x127"))))
     (properties `((upstream-name . "GOfuncR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-gtools" ,r-gtools)
-       ("r-iranges" ,r-iranges)
-       ("r-mapplots" ,r-mapplots)
-       ("r-rcpp" ,r-rcpp)
-       ("r-vioplot" ,r-vioplot)))
+     (list r-annotationdbi
+           r-genomicranges
+           r-gtools
+           r-iranges
+           r-mapplots
+           r-rcpp
+           r-vioplot))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/GOfuncR/")
     (synopsis "Gene ontology enrichment using FUNC")
     (description
@@ -8134,25 +8548,25 @@ annotations and ontologies.")
 (define-public r-abaenrichment
   (package
     (name "r-abaenrichment")
-    (version "1.22.0")
+    (version "1.24.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "ABAEnrichment" version))
        (sha256
         (base32
-         "15v5n6d3mnj9d86swkh9agfvrsd065dldaywm1adwmkhhk525wmd"))))
+         "1sp3f72rzlr822dxx42bswynrwwfx6f520hdhfdikqp13p2y4044"))))
     (properties `((upstream-name . "ABAEnrichment")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-abadata" ,r-abadata)
-       ("r-data-table" ,r-data-table)
-       ("r-gofuncr" ,r-gofuncr)
-       ("r-gplots" ,r-gplots)
-       ("r-gtools" ,r-gtools)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-abadata
+           r-data-table
+           r-gofuncr
+           r-gplots
+           r-gtools
+           r-rcpp))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/ABAEnrichment/")
     (synopsis "Gene expression enrichment in human brain regions")
     (description
@@ -8178,8 +8592,7 @@ the brain using an ontology, both provided by the Allen Brain Atlas project.")
      `((upstream-name . "AnnotationFuncs")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-dbi" ,r-dbi)))
+     (list r-annotationdbi r-dbi))
     (home-page "https://www.iysik.com/r/annotationfuncs")
     (synopsis "Annotation translation functions")
     (description
@@ -8191,18 +8604,18 @@ different identifieres using the Biocore Data Team data-packages (e.g.
 (define-public r-annotationtools
   (package
     (name "r-annotationtools")
-    (version "1.66.0")
+    (version "1.68.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "annotationTools" version))
        (sha256
         (base32
-         "18dd8saqx17fplvv5sbfz4p9fy7ksy3n9348rd3qlczihcrh9i3w"))))
+         "0grdswbf8nj0qwl0n5pqsir9242dry85j6m688j81gwwjgmzidvh"))))
     (properties
      `((upstream-name . "annotationTools")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-biobase" ,r-biobase)))
+    (propagated-inputs (list r-biobase))
     (home-page "https://bioconductor.org/packages/annotationTools/")
     (synopsis "Annotate microarrays and perform gene expression analyses")
     (description
@@ -8216,39 +8629,39 @@ text files).")
 (define-public r-allelicimbalance
   (package
     (name "r-allelicimbalance")
-    (version "1.30.0")
+    (version "1.32.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "AllelicImbalance" version))
        (sha256
         (base32
-         "1mn6975npncmfjlpjs3s2pgsrm32xgvnyl2vh1922l6vra97dkrc"))))
+         "1s6arjd0nxgxyqy7vhqcb78k0ss7vwrhv41pm346hs1nyr5dkzaq"))))
     (properties
      `((upstream-name . "AllelicImbalance")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biostrings" ,r-biostrings)
-       ("r-bsgenome" ,r-bsgenome)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-gridextra" ,r-gridextra)
-       ("r-gviz" ,r-gviz)
-       ("r-iranges" ,r-iranges)
-       ("r-lattice" ,r-lattice)
-       ("r-latticeextra" ,r-latticeextra)
-       ("r-nlme" ,r-nlme)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-seqinr" ,r-seqinr)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-variantannotation" ,r-variantannotation)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-annotationdbi
+           r-biocgenerics
+           r-biostrings
+           r-bsgenome
+           r-genomeinfodb
+           r-genomicalignments
+           r-genomicfeatures
+           r-genomicranges
+           r-gridextra
+           r-gviz
+           r-iranges
+           r-lattice
+           r-latticeextra
+           r-nlme
+           r-rsamtools
+           r-s4vectors
+           r-seqinr
+           r-summarizedexperiment
+           r-variantannotation))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/pappewaio/AllelicImbalance")
     (synopsis "Investigate allele-specific expression")
     (description
@@ -8259,27 +8672,27 @@ investigation using RNA-seq data.")
 (define-public r-aucell
   (package
     (name "r-aucell")
-    (version "1.14.0")
+    (version "1.16.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "AUCell" version))
        (sha256
         (base32
-         "0qdac3qalcki20r90k40cc8d0lfywzn9pffg9d719yvs7nrsfdjr"))))
+         "1lclf8hkhrm6g5fp8yhvjxnwgf8p0j9ffxsmcybz4rjvmwkiz5dp"))))
     (properties `((upstream-name . "AUCell")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-data-table" ,r-data-table)
-       ("r-gseabase" ,r-gseabase)
-       ("r-mixtools" ,r-mixtools)
-       ("r-r-utils" ,r-r-utils)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-shiny" ,r-shiny)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
+     (list r-biocgenerics
+           r-data-table
+           r-gseabase
+           r-mixtools
+           r-r-utils
+           r-s4vectors
+           r-shiny
+           r-summarizedexperiment))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/AUCell/")
     (synopsis "Analysis of gene set activity in single-cell RNA-seq data")
     (description
@@ -8298,29 +8711,29 @@ needed.")
 (define-public r-ebimage
   (package
     (name "r-ebimage")
-    (version "4.34.0")
+    (version "4.36.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "EBImage" version))
        (sha256
         (base32
-         "1z3cxxg593d66nczz5hh2hdj1d87wc0lxrzc5sn6bp43n351q8h3"))))
+         "030vpn55ppfqq4408c4db4w40d17x1yq6zajb11p2glikvm1q619"))))
     (properties `((upstream-name . "EBImage")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-abind" ,r-abind)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-fftwtools" ,r-fftwtools)
-       ("r-htmltools" ,r-htmltools)
-       ("r-htmlwidgets" ,r-htmlwidgets)
-       ("r-jpeg" ,r-jpeg)
-       ("r-locfit" ,r-locfit)
-       ("r-png" ,r-png)
-       ("r-rcurl" ,r-rcurl)
-       ("r-tiff" ,r-tiff)))
+     (list r-abind
+           r-biocgenerics
+           r-fftwtools
+           r-htmltools
+           r-htmlwidgets
+           r-jpeg
+           r-locfit
+           r-png
+           r-rcurl
+           r-tiff))
     (native-inputs
-     `(("r-knitr" ,r-knitr))) ; for vignettes
+     (list r-knitr)) ; for vignettes
     (home-page "https://github.com/aoles/EBImage")
     (synopsis "Image processing and analysis toolbox for R")
     (description
@@ -8337,28 +8750,27 @@ visualization with image data.")
 (define-public r-yamss
   (package
     (name "r-yamss")
-    (version "1.18.0")
+    (version "1.20.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "yamss" version))
        (sha256
         (base32
-         "1al615x778h17jqiyhiyf6djaq9iygs1hlbrna6y4xc0f2kvgxld"))))
+         "141hbryifm6na5shjyrbjwwksqnl75kqp1m2zl03l9sjqm0kapab"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-data-table" ,r-data-table)
-       ("r-ebimage" ,r-ebimage)
-       ("r-iranges" ,r-iranges)
-       ("r-limma" ,r-limma)
-       ("r-matrix" ,r-matrix)
-       ("r-mzr" ,r-mzr)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-summarizedexperiment"
-        ,r-summarizedexperiment)))
+     (list r-biocgenerics
+           r-data-table
+           r-ebimage
+           r-iranges
+           r-limma
+           r-matrix
+           r-mzr
+           r-s4vectors
+           r-summarizedexperiment))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/hansenlab/yamss")
     (synopsis "Tools for high-throughput metabolomics")
     (description
@@ -8371,22 +8783,19 @@ analysis.")
 (define-public r-gtrellis
   (package
     (name "r-gtrellis")
-    (version "1.24.0")
+    (version "1.26.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "gtrellis" version))
        (sha256
         (base32
-         "0l5271cpzjlm4m0v6xcdg2vxlbhn53x1fd59ynb9jwll93av5h1f"))))
+         "0q2lyb8p1xhqqhw4q1br4r8mwq06mjws8iwbbilkngvs3brbmrzl"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-circlize" ,r-circlize)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-getoptlong" ,r-getoptlong)
-       ("r-iranges" ,r-iranges)))
+     (list r-circlize r-genomicranges r-getoptlong r-iranges))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/jokergoo/gtrellis")
     (synopsis "Genome level Trellis layout")
     (description
@@ -8400,33 +8809,33 @@ genomic categories and to add self-defined graphics in the plot.")
 (define-public r-somaticsignatures
   (package
     (name "r-somaticsignatures")
-    (version "2.28.0")
+    (version "2.30.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "SomaticSignatures" version))
        (sha256
         (base32
-         "0jr11c9hz7m49xc8pi6xrr5fhbv68vafvqpzhr0pmm51vvr1vfs9"))))
+         "1dxzfkvljnydv7kfybfa52dwcbkkci2r8gjspjf90k2bxf10phql"))))
     (properties
      `((upstream-name . "SomaticSignatures")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biostrings" ,r-biostrings)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggbio" ,r-ggbio)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-iranges" ,r-iranges)
-       ("r-nmf" ,r-nmf)
-       ("r-pcamethods" ,r-pcamethods)
-       ("r-proxy" ,r-proxy)
-       ("r-reshape2" ,r-reshape2)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-variantannotation" ,r-variantannotation)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-biobase
+           r-biostrings
+           r-genomeinfodb
+           r-genomicranges
+           r-ggbio
+           r-ggplot2
+           r-iranges
+           r-nmf
+           r-pcamethods
+           r-proxy
+           r-reshape2
+           r-s4vectors
+           r-variantannotation))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/juliangehring/SomaticSignatures")
     (synopsis "Somatic signatures")
     (description
@@ -8439,42 +8848,42 @@ decomposition algorithms.")
 (define-public r-yapsa
   (package
     (name "r-yapsa")
-    (version "1.18.0")
+    (version "1.20.1")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "YAPSA" version))
        (sha256
         (base32
-         "1xfkgjlm0rxz82qcaqzx95cwirxifd9dsswjg3zcqmz03v7a0gz2"))))
+         "08r05fzpraggbxv15lx0b68kjlkysp0rcdlm6n9avzmlsdqplb2h"))))
     (properties `((upstream-name . "YAPSA")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biostrings" ,r-biostrings)
-       ("r-bsgenome-hsapiens-ucsc-hg19" ,r-bsgenome-hsapiens-ucsc-hg19)
-       ("r-circlize" ,r-circlize)
-       ("r-complexheatmap" ,r-complexheatmap)
-       ("r-corrplot" ,r-corrplot)
-       ("r-dendextend" ,r-dendextend)
-       ("r-doparallel" ,r-doparallel)
-       ("r-dplyr" ,r-dplyr)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-getoptlong" ,r-getoptlong)
-       ("r-ggbeeswarm" ,r-ggbeeswarm)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-gtrellis" ,r-gtrellis)
-       ("r-keggrest" ,r-keggrest)
-       ("r-limsolve" ,r-limsolve)
-       ("r-magrittr" ,r-magrittr)
-       ("r-pmcmr" ,r-pmcmr)
-       ("r-pracma" ,r-pracma)
-       ("r-reshape2" ,r-reshape2)
-       ("r-somaticsignatures" ,r-somaticsignatures)
-       ("r-variantannotation" ,r-variantannotation)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-biostrings
+           r-bsgenome-hsapiens-ucsc-hg19
+           r-circlize
+           r-complexheatmap
+           r-corrplot
+           r-dendextend
+           r-doparallel
+           r-dplyr
+           r-genomeinfodb
+           r-genomicranges
+           r-getoptlong
+           r-ggbeeswarm
+           r-ggplot2
+           r-gridextra
+           r-gtrellis
+           r-keggrest
+           r-limsolve
+           r-magrittr
+           r-pmcmrplus
+           r-pracma
+           r-reshape2
+           r-somaticsignatures
+           r-variantannotation))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/YAPSA/")
     (synopsis "Yet another package for signature analysis")
     (description
@@ -8488,22 +8897,22 @@ provided.")
 (define-public r-gcrma
   (package
     (name "r-gcrma")
-    (version "2.64.0")
+    (version "2.66.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "gcrma" version))
        (sha256
         (base32
-         "1z4abw9s2hs3csnx25nli7fpvb3rh3l0swzl0wfqp087fcs78pxi"))))
+         "0h7dl4if6skbcqdjdzqyghyswhwpx7xvb54lffz4wdaxpabp3001"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-affy" ,r-affy)
-       ("r-affyio" ,r-affyio)
-       ("r-biobase" ,r-biobase)
-       ("r-biocmanager" ,r-biocmanager)
-       ("r-biostrings" ,r-biostrings)
-       ("r-xvector" ,r-xvector)))
+     (list r-affy
+           r-affyio
+           r-biobase
+           r-biocmanager
+           r-biostrings
+           r-xvector))
     (home-page "https://bioconductor.org/packages/gcrma/")
     (synopsis "Background adjustment using sequence information")
     (description
@@ -8534,11 +8943,7 @@ gene-specific binding is expected.")
          "04a11dsqd5y4b39nny94acnh0qhdazjc6d1803izza4vrgmw2csb"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-affy" ,r-affy)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-gcrma" ,r-gcrma)
-       ("r-genefilter" ,r-genefilter)))
+     (list r-affy r-biobase r-biocgenerics r-gcrma r-genefilter))
     (home-page "https://bioconductor.org/packages/simpleaffy/")
     (synopsis "Very simple high level analysis of Affymetrix data")
     (description
@@ -8562,7 +8967,7 @@ generating high resolution journal figures.")
          "18gphcjj15iivrahp52186bvdg07yd2dvrykfjdd4r1vyf33im96"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-simpleaffy" ,r-simpleaffy)))
+     (list r-simpleaffy))
     (home-page "https://bioconductor.org/packages/yaqcaffy/")
     (synopsis "Affymetrix quality control and reproducibility analysis")
     (description
@@ -8574,25 +8979,25 @@ chips with the MAQC reference datasets.")
 (define-public r-quantro
   (package
     (name "r-quantro")
-    (version "1.26.0")
+    (version "1.28.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "quantro" version))
        (sha256
         (base32
-         "1fkma2ic448h2lrlza8ipg65gpfsz4fhlxcnjpmzhhmzp2xi2p4a"))))
+         "1r2wbsndc0ji22ap27gbr1wy8icj3cjxwqlz1x0gvxkaj69mwsfq"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-doparallel" ,r-doparallel)
-       ("r-foreach" ,r-foreach)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-iterators" ,r-iterators)
-       ("r-minfi" ,r-minfi)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)))
+     (list r-biobase
+           r-doparallel
+           r-foreach
+           r-ggplot2
+           r-iterators
+           r-minfi
+           r-rcolorbrewer))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/quantro/")
     (synopsis "Test for when to use quantile normalization")
     (description
@@ -8607,29 +9012,29 @@ groups.")
 (define-public r-yarn
   (package
     (name "r-yarn")
-    (version "1.18.0")
+    (version "1.20.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "yarn" version))
        (sha256
         (base32
-         "1x07l255x52z6cgdc2j8285shqszhr034xm5686rp6d35vah55ji"))))
+         "0nk4qzrwjiv8q39lgil9x25bm3gpzrnhd37d7754kpxhs2fsmw9d"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biomart" ,r-biomart)
-       ("r-downloader" ,r-downloader)
-       ("r-edger" ,r-edger)
-       ("r-gplots" ,r-gplots)
-       ("r-limma" ,r-limma)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-preprocesscore" ,r-preprocesscore)
-       ("r-quantro" ,r-quantro)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-readr" ,r-readr)))
+     (list r-biobase
+           r-biomart
+           r-downloader
+           r-edger
+           r-gplots
+           r-limma
+           r-matrixstats
+           r-preprocesscore
+           r-quantro
+           r-rcolorbrewer
+           r-readr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/yarn/")
     (synopsis "Robust multi-condition RNA-Seq preprocessing and normalization")
     (description
@@ -8644,24 +9049,24 @@ large RNA-seq experiments.")
 (define-public r-roar
   (package
     (name "r-roar")
-    (version "1.28.0")
+    (version "1.30.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "roar" version))
        (sha256
         (base32
-         "0vp0n90rvjm8rzwkbrxa3fasb9val56bz2srz72xwsl3jzb5yk6w"))))
+         "0hqh4vsnxl2sn1bf6s6wxl2nskb40rhvrysdvb6dr60zkih3g347"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
+     (list r-biocgenerics
+           r-genomeinfodb
+           r-genomicalignments
+           r-genomicranges
+           r-iranges
+           r-rtracklayer
+           r-s4vectors
+           r-summarizedexperiment))
     (home-page "https://github.com/vodkatad/roar/")
     (synopsis "Identify differential APA usage from RNA-seq alignments")
     (description
@@ -8684,17 +9089,17 @@ sites and alignments obtained from standard RNA-seq experiments.")
     (properties `((upstream-name . "XBSeq")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-deseq2" ,r-deseq2)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-locfit" ,r-locfit)
-       ("r-magrittr" ,r-magrittr)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-pracma" ,r-pracma)
-       ("r-roar" ,r-roar)))
+     (list r-biobase
+           r-deseq2
+           r-dplyr
+           r-ggplot2
+           r-locfit
+           r-magrittr
+           r-matrixstats
+           r-pracma
+           r-roar))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/Liuy12/XBSeq")
     (synopsis "Test for differential expression for RNA-seq data")
     (description
@@ -8712,19 +9117,19 @@ genes.")
 (define-public r-massspecwavelet
   (package
     (name "r-massspecwavelet")
-    (version "1.58.0")
+    (version "1.60.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "MassSpecWavelet" version))
        (sha256
         (base32
-         "1cs32sig1yvqn9xs0cvhfpmkh2lbllx7aab80sz58x03wnx8v60z"))))
+         "1icqyxkx5a9y3wahkxpxngw85c7l4hih1ym9nwwn9qy93pnw1zi4"))))
     (properties
      `((upstream-name . "MassSpecWavelet")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-waveslim" ,r-waveslim)))
+     (list r-waveslim))
     (home-page "https://bioconductor.org/packages/MassSpecWavelet/")
     (synopsis "Mass spectrum processing by wavelet-based algorithms")
     (description
@@ -8736,34 +9141,35 @@ based on @dfn{Continuous Wavelet Transform} (CWT).")
 (define-public r-xcms
   (package
     (name "r-xcms")
-    (version "3.14.1")
+    (version "3.16.1")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "xcms" version))
        (sha256
         (base32
-         "1g8k90p0sbcb3rdrbldj5bcjp2piy5ldni4jplyr78vjpmrmvqk7"))))
-    (build-system r-build-system)
-    (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-iranges" ,r-iranges)
-       ("r-lattice" ,r-lattice)
-       ("r-massspecwavelet" ,r-massspecwavelet)
-       ("r-mscoreutils" ,r-mscoreutils)
-       ("r-msnbase" ,r-msnbase)
-       ("r-mzr" ,r-mzr)
-       ("r-plyr" ,r-plyr)
-       ("r-protgenerics" ,r-protgenerics)
-       ("r-rann" ,r-rann)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-robustbase" ,r-robustbase)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+         "19kjyi6br9qp2pnp24shgbww3iqaaqxk9791w8w8qbd6sxijd143"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-biobase
+           r-biocgenerics
+           r-biocparallel
+           r-iranges
+           r-lattice
+           r-massspecwavelet
+           r-mscoreutils
+           r-msfeatures
+           r-msnbase
+           r-mzr
+           r-plyr
+           r-protgenerics
+           r-rann
+           r-rcolorbrewer
+           r-robustbase
+           r-s4vectors
+           r-summarizedexperiment))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/xcms/")
     (synopsis "LC/MS and GC/MS mass spectrometry data analysis")
     (description
@@ -8776,22 +9182,20 @@ data for high-throughput, untargeted analyte profiling.")
 (define-public r-wrench
   (package
     (name "r-wrench")
-    (version "1.10.0")
+    (version "1.12.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "Wrench" version))
        (sha256
         (base32
-         "0yssmqayaryrc0asjjqxdipqdfg309llrzldx38jrfgdsza6bvs0"))))
+         "1vzv7sswijgb8nq58yrc19wlw2nnpjvans86fqqzs4p8wvq8j06n"))))
     (properties `((upstream-name . "Wrench")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-limma" ,r-limma)
-       ("r-locfit" ,r-locfit)
-       ("r-matrixstats" ,r-matrixstats)))
+     (list r-limma r-locfit r-matrixstats))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/HCBravoLab/Wrench")
     (synopsis "Wrench normalization for sparse count data")
     (description
@@ -8802,28 +9206,28 @@ that arising from 16s metagenomic surveys.")
 (define-public r-wiggleplotr
   (package
     (name "r-wiggleplotr")
-    (version "1.16.0")
+    (version "1.18.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "wiggleplotr" version))
        (sha256
         (base32
-         "13f3g6fcc29k0g21mhnypm3nc6qqjw867vamvfkdzynspsfb32ga"))))
+         "01y1rbmxjza7qx3q33k0r241if69hzkx9plgmj59wyji22lm7syi"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertthat" ,r-assertthat)
-       ("r-cowplot" ,r-cowplot)
-       ("r-dplyr" ,r-dplyr)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-iranges" ,r-iranges)
-       ("r-purrr" ,r-purrr)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-assertthat
+           r-cowplot
+           r-dplyr
+           r-genomeinfodb
+           r-genomicranges
+           r-ggplot2
+           r-iranges
+           r-purrr
+           r-rtracklayer
+           r-s4vectors))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/wiggleplotr/")
     (synopsis "Make read coverage plots from BigWig files")
     (description
@@ -8836,14 +9240,14 @@ visualization of exonic read coverage.")
 (define-public r-widgettools
   (package
     (name "r-widgettools")
-    (version "1.70.0")
+    (version "1.72.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "widgetTools" version))
        (sha256
         (base32
-         "186xgpgyfyi4angxhz6558lfpzvvszzlpyfr8xnbccs3gshk3db2"))))
+         "0jajfh78116wjfwbmzfvcbxswai4jj9ypzmfhs5j5iypaf8zff8j"))))
     (properties `((upstream-name . "widgetTools")))
     (build-system r-build-system)
     (home-page "https://bioconductor.org/packages/widgetTools/")
@@ -8857,27 +9261,26 @@ widgets in R.")
 (define-public r-webbioc
   (package
     (name "r-webbioc")
-    (version "1.64.0")
+    (version "1.66.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "webbioc" version))
        (sha256
         (base32
-         "1mpdw477j78s2nvlf2lzm6mdjcpamyyazjn060h9q3apawn6zajx"))))
+         "1r3rjvfhqbbzdhlslnc86kr2iip3xgvr81zpvcr8xv9mysgrln17"))))
     (build-system r-build-system)
     (inputs
-     `(("netpbm" ,netpbm)
-       ("perl" ,perl)))
-    (propagated-inputs
-     `(("r-affy" ,r-affy)
-       ("r-annaffy" ,r-annaffy)
-       ("r-biobase" ,r-biobase)
-       ("r-biocmanager" ,r-biocmanager)
-       ("r-gcrma" ,r-gcrma)
-       ("r-multtest" ,r-multtest)
-       ("r-qvalue" ,r-qvalue)
-       ("r-vsn" ,r-vsn)))
+     (list netpbm perl))
+    (propagated-inputs
+     (list r-affy
+           r-annaffy
+           r-biobase
+           r-biocmanager
+           r-gcrma
+           r-multtest
+           r-qvalue
+           r-vsn))
     (home-page "https://www.bioconductor.org/")
     (synopsis "Bioconductor web interface")
     (description
@@ -8890,25 +9293,25 @@ Currently only Affymetrix oligonucleotide analysis is supported.")
 (define-public r-zinbwave
   (package
     (name "r-zinbwave")
-    (version "1.14.2")
+    (version "1.16.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "zinbwave" version))
        (sha256
         (base32
-         "1y8krazz2qdn0wn8ijjs2gn5dl5l960v6bijbkvh0r8066l7viky"))))
+         "05w95bnq63a339d8x4932k81ycqf825s3qwn98vr52v5g2hv46fq"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocparallel" ,r-biocparallel)
-       ("r-edger" ,r-edger)
-       ("r-genefilter" ,r-genefilter)
-       ("r-matrix" ,r-matrix)
-       ("r-singlecellexperiment" ,r-singlecellexperiment)
-       ("r-softimpute" ,r-softimpute)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
+     (list r-biocparallel
+           r-edger
+           r-genefilter
+           r-matrix
+           r-singlecellexperiment
+           r-softimpute
+           r-summarizedexperiment))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/zinbwave")
     (synopsis "Zero-inflated negative binomial model for RNA-seq data")
     (description "This package implements a general and flexible zero-inflated
@@ -8923,24 +9326,20 @@ the data.")
 (define-public r-zfpkm
   (package
     (name "r-zfpkm")
-    (version "1.14.0")
+    (version "1.16.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "zFPKM" version))
        (sha256
         (base32
-         "1k7xaxr2gn26y8bps5l32g2axfhdn07nbk4q3qcx32d5jm75qkx2"))))
+         "0fk05vrmyyrhmkwi06lsi553mlpqj3fgwhk1kygz83iqv5z2vfw9"))))
     (properties `((upstream-name . "zFPKM")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-checkmate" ,r-checkmate)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-checkmate r-dplyr r-ggplot2 r-summarizedexperiment r-tidyr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/ronammar/zFPKM/")
     (synopsis "Functions to facilitate zFPKM transformations")
     (description
@@ -8952,20 +9351,22 @@ This algorithm is based on the publication by Hart et al., 2013 (Pubmed ID
 (define-public r-rbowtie2
   (package
     (name "r-rbowtie2")
-    (version "1.14.0")
+    (version "2.0.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "Rbowtie2" version))
        (sha256
         (base32
-         "0r5yqjal48xlcv5cidi7p3zwygvsllmv2zzkwkc9kfq083l2i4ih"))))
+         "0xpvrx2ak9x913sym4l46ycwbnmpcdwb3bf3dfd2gsp0krv8vh1x"))))
     (properties `((upstream-name . "Rbowtie2")))
     (build-system r-build-system)
+    (propagated-inputs
+     (list r-magrittr r-rsamtools))
     (inputs
-     `(("zlib" ,zlib)))
+     (list samtools zlib))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/Rbowtie2/")
     (synopsis "R wrapper for Bowtie2 and AdapterRemoval")
     (description
@@ -8977,24 +9378,24 @@ rapid adapter trimming, identification, and read merging.")
 (define-public r-progeny
   (package
     (name "r-progeny")
-    (version "1.14.0")
+    (version "1.16.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "progeny" version))
        (sha256
         (base32
-         "10vpjvl4wps857xiy8rpzr82jzdfbc5rgwh3ir3my26lfws4hfz8"))))
+         "0zhr5i5v87akzqjb6wid67nhg2icrw6w0awdy87x848c6c1i6j9y"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggrepel" ,r-ggrepel)
-       ("r-gridextra" ,r-gridextra)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-biobase
+           r-dplyr
+           r-ggplot2
+           r-ggrepel
+           r-gridextra
+           r-tidyr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/saezlab/progeny")
     (synopsis "Pathway responsive gene activity inference")
     (description
@@ -9007,18 +9408,18 @@ expression\".")
 (define-public r-arrmnormalization
   (package
     (name "r-arrmnormalization")
-    (version "1.32.0")
+    (version "1.34.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "ARRmNormalization" version))
        (sha256
         (base32
-         "0ni3vblcadhwxaq1pf1n9jn66cp3bqch68ww4c8zh19zagil2y7r"))))
+         "1ryqr3mpakjml0jhbk28k2z511sdl87wxdczxq1rwx98s0pc9mnh"))))
     (properties
      `((upstream-name . "ARRmNormalization")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-arrmdata" ,r-arrmdata)))
+    (propagated-inputs (list r-arrmdata))
     (home-page "https://bioconductor.org/packages/ARRmNormalization/")
     (synopsis "Adaptive robust regression normalization for methylation data")
     (description
@@ -9030,27 +9431,27 @@ Infinium HumanMethylation 450k assay.")
 (define-public r-biocfilecache
   (package
     (name "r-biocfilecache")
-    (version "2.0.0")
+    (version "2.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "BiocFileCache" version))
        (sha256
         (base32
-         "0ymg4hmabk233qgassld62achjylm12rnidxbakfkx4dvvlbhxxv"))))
+         "11qayqmgv274hc4h1v222sma07wkxjm8002fl6w3yvi225zq1qc1"))))
     (properties `((upstream-name . "BiocFileCache")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-curl" ,r-curl)
-       ("r-dbi" ,r-dbi)
-       ("r-dbplyr" ,r-dbplyr)
-       ("r-dplyr" ,r-dplyr)
-       ("r-filelock" ,r-filelock)
-       ("r-httr" ,r-httr)
-       ("r-rappdirs" ,r-rappdirs)
-       ("r-rsqlite" ,r-rsqlite)))
+     (list r-curl
+           r-dbi
+           r-dbplyr
+           r-dplyr
+           r-filelock
+           r-httr
+           r-rappdirs
+           r-rsqlite))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/BiocFileCache/")
     (synopsis "Manage files across sessions")
     (description
@@ -9063,17 +9464,17 @@ and data files used across sessions.")
 (define-public r-iclusterplus
   (package
     (name "r-iclusterplus")
-    (version "1.28.0")
+    (version "1.30.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "iClusterPlus" version))
        (sha256
         (base32
-         "1haj25c4cmmjjvh181b41a9pvkh92f7k2w4ljn17iqg31vm45za1"))))
+         "0w6r2clk8wdnnnjmq3cspmxiq1c8vwprd66xmdrhcqzbjkpkdw2b"))))
     (properties `((upstream-name . "iClusterPlus")))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "https://bioconductor.org/packages/iClusterPlus/")
     (synopsis "Integrative clustering of multi-type genomic data")
     (description
@@ -9093,20 +9494,19 @@ Gaussian distributions.")
 (define-public r-rbowtie
   (package
     (name "r-rbowtie")
-    (version "1.32.0")
+    (version "1.34.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "Rbowtie" version))
        (sha256
         (base32
-         "0mfikbrs28q7r3lnsq0jma5x6nkrnm3q46242jh35w9c969jk5yy"))))
+         "0ardmryx6ac7v6n900a1klrrldvbmh7bxvy8ldz8rwid19h29ikr"))))
     (properties `((upstream-name . "Rbowtie")))
     (build-system r-build-system)
-    (inputs
-     `(("zlib" ,zlib)))
+    (inputs (list zlib))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/Rbowtie/")
     (synopsis "R bowtie wrapper")
     (description
@@ -9118,33 +9518,33 @@ alignment tool.")
 (define-public r-sgseq
   (package
     (name "r-sgseq")
-    (version "1.26.0")
+    (version "1.28.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "SGSeq" version))
        (sha256
         (base32
-         "0i1yaw8h8gibakvaf1xd6nnjx2bsb2s9c0q74rbq9lm7haihivp6"))))
+         "15l0r6svs27k82dd472is26shwayz6rs5ylg5gpf3mldr7sa5kja"))))
     (properties `((upstream-name . "SGSeq")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biostrings" ,r-biostrings)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-igraph" ,r-igraph)
-       ("r-iranges" ,r-iranges)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-runit" ,r-runit)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-annotationdbi
+           r-biocgenerics
+           r-biostrings
+           r-genomeinfodb
+           r-genomicalignments
+           r-genomicfeatures
+           r-genomicranges
+           r-igraph
+           r-iranges
+           r-rsamtools
+           r-rtracklayer
+           r-runit
+           r-s4vectors
+           r-summarizedexperiment))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/SGSeq/")
     (synopsis "Splice event prediction and quantification from RNA-seq data")
     (description
@@ -9161,14 +9561,14 @@ interpretation.")
 (define-public r-rhisat2
   (package
     (name "r-rhisat2")
-    (version "1.8.0")
+    (version "1.10.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "Rhisat2" version))
        (sha256
         (base32
-         "1hqahh5h22mj2crqp6r9xnm111xmfgk39c100rcaziqrpdy5npk8"))))
+         "092rws9vjxgm2jpkbp6ign47zmillyyidnc7ylcbn4zr9j5lwv0y"))))
     (properties `((upstream-name . "Rhisat2")))
     (build-system r-build-system)
     (arguments
@@ -9184,11 +9584,9 @@ interpretation.")
                (("^CPP =.*") (which "g++")))
              #t)))))
     (propagated-inputs
-     `(("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-sgseq" ,r-sgseq)))
+     (list r-genomicfeatures r-genomicranges r-sgseq))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/fmicompbio/Rhisat2")
     (synopsis "R Wrapper for HISAT2 sequence aligner")
     (description
@@ -9201,37 +9599,36 @@ index.")
 (define-public r-quasr
   (package
     (name "r-quasr")
-    (version "1.32.0")
+    (version "1.34.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "QuasR" version))
        (sha256
         (base32
-         "1635ff11ahzjrh3cdcxrq5bgd100n444k7mc0maz0jx21vj8qqb1"))))
+         "0d292xgaq8d3cdpa9anabda03lis46xc29iw9c5k5i3sj7dcr4g5"))))
     (properties `((upstream-name . "QuasR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocmanager" ,r-biocmanager)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-biostrings" ,r-biostrings)
-       ("r-bsgenome" ,r-bsgenome)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicfiles" ,r-genomicfiles)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-rbowtie" ,r-rbowtie)
-       ("r-rhtslib" ,r-rhtslib)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-shortread" ,r-shortread)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-annotationdbi
+           r-biobase
+           r-biocgenerics
+           r-biocparallel
+           r-biostrings
+           r-bsgenome
+           r-genomeinfodb
+           r-genomicfeatures
+           r-genomicfiles
+           r-genomicranges
+           r-iranges
+           r-rbowtie
+           r-rhtslib
+           r-rsamtools
+           r-rtracklayer
+           r-s4vectors
+           r-shortread))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/QuasR/")
     (synopsis "Quantify and annotate short reads in R")
     (description
@@ -9244,37 +9641,37 @@ quantification of genomic regions of interest.")
 (define-public r-rqc
   (package
     (name "r-rqc")
-    (version "1.26.0")
+    (version "1.28.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "Rqc" version))
        (sha256
         (base32
-         "02hwj2vd003x0zf273ndnwh7kxy6wc3sz14d3kryp2w2aqjj826f"))))
+         "0hcxkrfja0gmd8r2llijdvaw2xiiplk037305inimz0qna6w2071"))))
     (properties `((upstream-name . "Rqc")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-biocstyle" ,r-biocstyle)
-       ("r-biostrings" ,r-biostrings)
-       ("r-biovizbase" ,r-biovizbase)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-genomicfiles" ,r-genomicfiles)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-iranges" ,r-iranges)
-       ("r-knitr" ,r-knitr)
-       ("r-markdown" ,r-markdown)
-       ("r-plyr" ,r-plyr)
-       ("r-rcpp" ,r-rcpp)
-       ("r-reshape2" ,r-reshape2)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-shiny" ,r-shiny)
-       ("r-shortread" ,r-shortread)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-biocgenerics
+           r-biocparallel
+           r-biocstyle
+           r-biostrings
+           r-biovizbase
+           r-genomicalignments
+           r-genomicfiles
+           r-ggplot2
+           r-iranges
+           r-knitr
+           r-markdown
+           r-plyr
+           r-rcpp
+           r-reshape2
+           r-rsamtools
+           r-s4vectors
+           r-shiny
+           r-shortread))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/labbcb/Rqc")
     (synopsis "Quality control tool for high-throughput sequencing data")
     (description
@@ -9287,21 +9684,18 @@ graphics.")
 (define-public r-birewire
   (package
     (name "r-birewire")
-    (version "3.24.0")
+    (version "3.26.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "BiRewire" version))
        (sha256
         (base32
-         "0p6mr67mkw54490sv4dvkyh8l0xkpjfbqy532vi8l41i40qg3gry"))))
+         "0ki4rcwjgbixzy5q9s30ajx5zhpl18q50znrb60fchvl4hj9h93w"))))
     (properties `((upstream-name . "BiRewire")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-igraph" ,r-igraph)
-       ("r-matrix" ,r-matrix)
-       ("r-slam" ,r-slam)
-       ("r-tsne" ,r-tsne)))
+     (list r-igraph r-matrix r-slam r-tsne))
     (home-page "https://bioconductor.org/packages/release/bioc/html/BiRewire.html")
     (synopsis "Tools for randomization of bipartite graphs")
     (description
@@ -9326,9 +9720,7 @@ routines to analyse the resulting networks and their natural projections.")
          "00a1kcfmcgdbx6wpnhk45wm45bynhry5m93l9hm75j2rwyc4lnca"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-limma" ,r-limma)
-       ("r-mass" ,r-mass)))
+     (list r-biobase r-limma r-mass))
     (home-page "https://bioconductor.org/packages/birta")
     (synopsis "Bayesian inference of regulation of transcriptional activity")
     (description
@@ -9345,29 +9737,29 @@ Markov-Chain-Monte-Carlo is applied to sample the activity states.")
 (define-public r-multidataset
   (package
     (name "r-multidataset")
-    (version "1.20.0")
+    (version "1.22.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "MultiDataSet" version))
        (sha256
         (base32
-         "1hyk40xgmy50rqxwdvc64d3pgz5vsg8vmlj5cp5m0n5m0adxcdfj"))))
+         "17asldnxqvp3sijx7nbi2lbbgnq4iq8z72qlg9080sm5lga1yy1s"))))
     (properties `((upstream-name . "MultiDataSet")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggrepel" ,r-ggrepel)
-       ("r-iranges" ,r-iranges)
-       ("r-limma" ,r-limma)
-       ("r-qqman" ,r-qqman)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
+     (list r-biobase
+           r-biocgenerics
+           r-genomicranges
+           r-ggplot2
+           r-ggrepel
+           r-iranges
+           r-limma
+           r-qqman
+           r-s4vectors
+           r-summarizedexperiment))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/MultiDataSet/")
     (synopsis "Implementation of MultiDataSet and ResultSet")
     (description
@@ -9382,20 +9774,19 @@ packages.")
 (define-public r-ropls
   (package
     (name "r-ropls")
-    (version "1.24.0")
+    (version "1.26.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "ropls" version))
        (sha256
         (base32
-         "1j99kdywyljqzdcns5ysh590w4w8iiwzpddpfk5c8d4whax7vk5b"))))
+         "0mz5lrdsihx66sgx9klnvpxvw1mjjcbijcsdbgxwaimzl9k1kr05"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-multidataset" ,r-multidataset)))
+     (list r-biobase r-multidataset))
     (native-inputs
-     `(("r-knitr" ,r-knitr))) ; for vignettes
+     (list r-knitr)) ; for vignettes
     (home-page "https://dx.doi.org/10.1021/acs.jproteome.5b00354")
     (synopsis "Multivariate analysis and feature selection of omics data")
     (description
@@ -9420,23 +9811,19 @@ coefficients).")
 (define-public r-biosigner
   (package
     (name "r-biosigner")
-    (version "1.20.0")
+    (version "1.22.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "biosigner" version))
        (sha256
         (base32
-         "159fbkymn92li7dinsm56nsacjp8wnhsljv7airgs9m82p8wd5sl"))))
+         "189018qahyw33dmg73wa7k4rp8nzrx6ai8f2dr6vhbpcdc1gnm0z"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-e1071" ,r-e1071)
-       ("r-multidataset" ,r-multidataset)
-       ("r-randomforest" ,r-randomforest)
-       ("r-ropls" ,r-ropls)))
+     (list r-biobase r-e1071 r-multidataset r-randomforest r-ropls))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/biosigner/")
     (synopsis "Signature discovery from omics data")
     (description
@@ -9453,31 +9840,31 @@ datasets.")
 (define-public r-annotatr
   (package
     (name "r-annotatr")
-    (version "1.18.1")
+    (version "1.20.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "annotatr" version))
        (sha256
         (base32
-         "1ls1qdfppcxysggi3bghrnspb5a3s40pm2mj4x0whc7c40cf90mg"))))
+         "1ha2wn56cdab4p3wdwv4xlqjsgl7sd8phbx71qbclrbdwpq2mi7i"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-annotationhub" ,r-annotationhub)
-       ("r-dplyr" ,r-dplyr)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-iranges" ,r-iranges)
-       ("r-readr" ,r-readr)
-       ("r-regioner" ,r-regioner)
-       ("r-reshape2" ,r-reshape2)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-annotationdbi
+           r-annotationhub
+           r-dplyr
+           r-genomeinfodb
+           r-genomicfeatures
+           r-genomicranges
+           r-ggplot2
+           r-iranges
+           r-readr
+           r-regioner
+           r-reshape2
+           r-rtracklayer
+           r-s4vectors))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/annotatr/")
     (synopsis "Annotation of genomic regions to genomic annotations")
     (description
@@ -9494,19 +9881,19 @@ annotations.")
 (define-public r-rsubread
   (package
     (name "r-rsubread")
-    (version "2.6.4")
+    (version "2.8.1")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "Rsubread" version))
        (sha256
         (base32
-         "043m4512q73x6q529hqfgrap0fq5anvny4va085nafia06b805pi"))))
+         "0lpx0dp5570kbrq7v0g573axkhi00qrf38si59vmvnqxhmkvsixn"))))
     (properties `((upstream-name . "Rsubread")))
     (build-system r-build-system)
-    (inputs `(("zlib" ,zlib)))
+    (inputs (list zlib))
     (propagated-inputs
-     `(("r-matrix" ,r-matrix)))
+     (list r-matrix))
     (home-page "https://bioconductor.org/packages/Rsubread/")
     (synopsis "Subread sequence alignment and counting for R")
     (description
@@ -9520,23 +9907,23 @@ and to both short and long sequence reads.")
 (define-public r-flowutils
   (package
     (name "r-flowutils")
-    (version "1.56.0")
+    (version "1.58.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "flowUtils" version))
        (sha256
         (base32
-         "1sdwgyvrsz0pp60zdfrcgb7bs8s87j7257p8ck813ydizc324x9w"))))
+         "0rgybkzbn8c3kpbz0ddghp1np0gka0cgiqvkk5jbnhlgf4s07161"))))
     (properties `((upstream-name . "flowUtils")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-corpcor" ,r-corpcor)
-       ("r-flowcore" ,r-flowcore)
-       ("r-graph" ,r-graph)
-       ("r-runit" ,r-runit)
-       ("r-xml" ,r-xml)))
+     (list r-biobase
+           r-corpcor
+           r-flowcore
+           r-graph
+           r-runit
+           r-xml))
     (home-page "https://github.com/jspidlen/flowUtils")
     (synopsis "Utilities for flow cytometry")
     (description
@@ -9546,21 +9933,19 @@ and to both short and long sequence reads.")
 (define-public r-consensusclusterplus
   (package
     (name "r-consensusclusterplus")
-    (version "1.56.0")
+    (version "1.58.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "ConsensusClusterPlus" version))
        (sha256
         (base32
-         "163nr50nyvwrsajmm0cgxp70pqk61mgw0k7ams694hcb42162j8b"))))
+         "13z43qbk9z7mvy8v8k185m6n020i6ahb18pm4q88rs75qlklzdkr"))))
     (properties
      `((upstream-name . "ConsensusClusterPlus")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-all" ,r-all)
-       ("r-biobase" ,r-biobase)
-       ("r-cluster" ,r-cluster)))
+     (list r-all r-biobase r-cluster))
     (home-page "https://bioconductor.org/packages/ConsensusClusterPlus")
     (synopsis "Clustering algorithm")
     (description
@@ -9571,25 +9956,25 @@ cluster count and membership by stability evidence in unsupervised analysis.")
 (define-public r-cytolib
   (package
     (name "r-cytolib")
-    (version "2.4.0")
+    (version "2.6.1")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "cytolib" version))
        (sha256
         (base32
-         "0wl7zqwv0i38dfzqfsz40n3mcbxi38ffn1rbd5pm9s7hq16zr4nv"))))
+         "16m5w6cp28p4fs2p8c8rjcg1d686xl8mpas816i7zxfh8m0bcqc9"))))
     (properties `((upstream-name . "cytolib")))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (propagated-inputs
-     `(("r-bh" ,r-bh)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-rcppparallel" ,r-rcppparallel)
-       ("r-rhdf5lib" ,r-rhdf5lib)
-       ("r-rprotobuflib" ,r-rprotobuflib)))
+     (list r-bh
+           r-rcpp
+           r-rcpparmadillo
+           r-rcppparallel
+           r-rhdf5lib
+           r-rprotobuflib))
     (home-page "https://bioconductor.org/packages/cytolib/")
     (synopsis "C++ infrastructure for working with gated cytometry")
     (description
@@ -9600,28 +9985,28 @@ interact with gated cytometry data.")
 (define-public r-flowcore
   (package
     (name "r-flowcore")
-    (version "2.4.0")
+    (version "2.6.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "flowCore" version))
        (sha256
         (base32
-         "13xpbkxi53rxmhvpdiy6bydmhicmxd2gi96d9c1qx4lkss2f14nc"))))
+         "0zbd2hrdbb6r0np6nd3ab8nlcf9l57vcwnnhbqkbas8y0c2i2mwp"))))
     (properties `((upstream-name . "flowCore")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bh" ,r-bh)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-cytolib" ,r-cytolib)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-rprotobuflib" ,r-rprotobuflib)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-bh
+           r-biobase
+           r-biocgenerics
+           r-cytolib
+           r-matrixstats
+           r-rcpp
+           r-rcpparmadillo
+           r-rprotobuflib
+           r-s4vectors))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/flowCore")
     (synopsis "Basic structures for flow cytometry data")
     (description
@@ -9632,21 +10017,18 @@ with flow cytometry data.")
 (define-public r-flowmeans
   (package
     (name "r-flowmeans")
-    (version "1.52.0")
+    (version "1.54.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "flowMeans" version))
        (sha256
         (base32
-         "1awskkq48qhv4v9glxgfqi0kgwqd62fbj641k4vvxfcwsf2c7bfg"))))
+         "0iy8hvi0inj1ylhdx6q4mya9k55iazprz6fdrnq1mxb2iyndzsl6"))))
     (properties `((upstream-name . "flowMeans")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-feature" ,r-feature)
-       ("r-flowcore" ,r-flowcore)
-       ("r-rrcov" ,r-rrcov)))
+     (list r-biobase r-feature r-flowcore r-rrcov))
     (home-page "https://bioconductor.org/packages/flowMeans")
     (synopsis "Non-parametric flow cytometry data gating")
     (description
@@ -9658,27 +10040,27 @@ change point detection.")
 (define-public r-ncdfflow
   (package
     (name "r-ncdfflow")
-    (version "2.38.0")
+    (version "2.40.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "ncdfFlow" version))
        (sha256
         (base32
-         "1lm88qnfv6rnnr7wmgbvwyj272imjjjn7h3agxqqzsbmn8vyrnf0"))))
+         "1c6wb2x24ydqp5nxrx6bhj6f13x9djfy9awkc7zn63xkag7mvvar"))))
     (properties `((upstream-name . "ncdfFlow")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bh" ,r-bh)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-flowcore" ,r-flowcore)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-rhdf5lib" ,r-rhdf5lib)
-       ("r-zlibbioc" ,r-zlibbioc)))
+     (list r-bh
+           r-biobase
+           r-biocgenerics
+           r-flowcore
+           r-rcpp
+           r-rcpparmadillo
+           r-rhdf5lib
+           r-zlibbioc))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/ncdfFlow/")
     (synopsis "HDF5 based storage for flow cytometry data")
     (description
@@ -9689,30 +10071,30 @@ manipulation of flow cytometry data.")
 (define-public r-ggcyto
   (package
     (name "r-ggcyto")
-    (version "1.20.0")
+    (version "1.22.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "ggcyto" version))
        (sha256
         (base32
-         "0jd6m84m4znnpix4bcgdby7mnflsn206f5x2vw9n8rxnwzx77wpg"))))
+         "17dnmsa92gc2za36c3klgd7rklqlxrhkzs5ksnrc1am6a4knc0p1"))))
     (properties `((upstream-name . "ggcyto")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)
-       ("r-flowcore" ,r-flowcore)
-       ("r-flowworkspace" ,r-flowworkspace)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-hexbin" ,r-hexbin)
-       ("r-ncdfflow" ,r-ncdfflow)
-       ("r-plyr" ,r-plyr)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rlang" ,r-rlang)
-       ("r-scales" ,r-scales)))
+     (list r-data-table
+           r-flowcore
+           r-flowworkspace
+           r-ggplot2
+           r-gridextra
+           r-hexbin
+           r-ncdfflow
+           r-plyr
+           r-rcolorbrewer
+           r-rlang
+           r-scales))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/RGLab/ggcyto/issues")
     (synopsis "Visualize Cytometry data with ggplot")
     (description
@@ -9726,28 +10108,28 @@ statistics to the plot.")
 (define-public r-flowviz
   (package
     (name "r-flowviz")
-    (version "1.56.0")
+    (version "1.58.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "flowViz" version))
        (sha256
         (base32
-         "17x04xwyw2pp5zkhgvrmxkb8cbrv9wql6xhjsfpq0n6yd9dxqc1v"))))
+         "039sh7qn25gp2b34khs8dyrdpxyapsjlprrvxlz8f7dl8gmggl04"))))
     (properties `((upstream-name . "flowViz")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-flowcore" ,r-flowcore)
-       ("r-hexbin" ,r-hexbin)
-       ("r-idpmisc" ,r-idpmisc)
-       ("r-kernsmooth" ,r-kernsmooth)
-       ("r-lattice" ,r-lattice)
-       ("r-latticeextra" ,r-latticeextra)
-       ("r-mass" ,r-mass)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)))
+     (list r-biobase
+           r-flowcore
+           r-hexbin
+           r-idpmisc
+           r-kernsmooth
+           r-lattice
+           r-latticeextra
+           r-mass
+           r-rcolorbrewer))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/flowViz/")
     (synopsis "Visualization for flow cytometry")
     (description
@@ -9757,34 +10139,33 @@ statistics to the plot.")
 (define-public r-flowclust
   (package
     (name "r-flowclust")
-    (version "3.30.0")
+    (version "3.32.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "flowClust" version))
        (sha256
         (base32
-         "03xsmprrkxwkaksjlaxwp54mqfb3zlg6dbqhp87w78fwscisv76b"))))
+         "0ch7mkq40qcnxwgzy51vjdlwyzx4bvp03vpdm6dwjc6qy8a6qfzi"))))
     (properties `((upstream-name . "flowClust")))
     (build-system r-build-system)
     (arguments
      `(#:configure-flags
        (list "--configure-args=--enable-bundled-gsl=no")))
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-clue" ,r-clue)
-       ("r-corpcor" ,r-corpcor)
-       ("r-ellipse" ,r-ellipse)
-       ("r-flowcore" ,r-flowcore)
-       ("r-flowviz" ,r-flowviz)
-       ("r-graph" ,r-graph)
-       ("r-mnormt" ,r-mnormt)))
+     (list r-biobase
+           r-biocgenerics
+           r-clue
+           r-corpcor
+           r-ellipse
+           r-flowcore
+           r-flowviz
+           r-graph
+           r-mnormt))
     (inputs
-     `(("gsl" ,gsl)))
+     (list gsl))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("r-knitr" ,r-knitr)))
+     (list pkg-config r-knitr))
     (home-page "https://bioconductor.org/packages/flowClust")
     (synopsis "Clustering for flow cytometry")
     (description
@@ -9797,14 +10178,14 @@ model with Box-Cox transformation.")
 (define-public r-rprotobuflib
   (package
     (name "r-rprotobuflib")
-    (version "2.4.0")
+    (version "2.6.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "RProtoBufLib" version))
        (sha256
         (base32
-         "1hyds97ay4mn7nl830yh9v8mlasgsljsx5wsrhz2zsmbbyx6wbnb"))))
+         "04qlhbhdchpr35rdc6jc3y8fy6znnfrdlsb8am04agbrvpjgrx10"))))
     (properties `((upstream-name . "RProtoBufLib")))
     (build-system r-build-system)
     (arguments
@@ -9815,7 +10196,7 @@ model with Box-Cox transformation.")
              (with-directory-excursion "src"
                (invoke "tar" "xf" "protobuf-3.13.0.tar.gz")))))))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/RProtoBufLib/")
     (synopsis "C++ headers and static libraries of Protocol buffers")
     (description
@@ -9826,46 +10207,46 @@ for other R packages to compile and link against.")
 (define-public r-flowworkspace
   (package
     (name "r-flowworkspace")
-    (version "4.4.0")
+    (version "4.6.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "flowWorkspace" version))
        (sha256
         (base32
-         "1a9qb2dcvwgb3z0vdbbzn1rzy77d3da72kirs272344hdx9b2cx9"))))
+         "11ni7kgk9s1fz3lvg85s6r7x2fhk4m7cdpilji05ya12jsyr3fig"))))
     (properties `((upstream-name . "flowWorkspace")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-aws-s3" ,r-aws-s3)
-       ("r-aws-signature" ,r-aws-signature)
-       ("r-bh" ,r-bh)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-cytolib" ,r-cytolib)
-       ("r-data-table" ,r-data-table)
-       ("r-delayedarray" ,r-delayedarray)
-       ("r-digest" ,r-digest)
-       ("r-dplyr" ,r-dplyr)
-       ("r-flowcore" ,r-flowcore)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-graph" ,r-graph)
-       ("r-lattice" ,r-lattice)
-       ("r-latticeextra" ,r-latticeextra)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-ncdfflow" ,r-ncdfflow)
-       ("r-rbgl" ,r-rbgl)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-rcppparallel" ,r-rcppparallel)
-       ("r-rgraphviz" ,r-rgraphviz)
-       ("r-rhdf5lib" ,r-rhdf5lib)
-       ("r-rprotobuflib" ,r-rprotobuflib)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-scales" ,r-scales)
-       ("r-xml" ,r-xml)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-aws-s3
+           r-aws-signature
+           r-bh
+           r-biobase
+           r-biocgenerics
+           r-cytolib
+           r-data-table
+           r-delayedarray
+           r-digest
+           r-dplyr
+           r-flowcore
+           r-ggplot2
+           r-graph
+           r-lattice
+           r-latticeextra
+           r-matrixstats
+           r-ncdfflow
+           r-rbgl
+           r-rcpp
+           r-rcpparmadillo
+           r-rcppparallel
+           r-rgraphviz
+           r-rhdf5lib
+           r-rprotobuflib
+           r-s4vectors
+           r-scales
+           r-xml))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/flowWorkspace/")
     (synopsis "Infrastructure for working with cytometry data")
     (description
@@ -9880,31 +10261,31 @@ matches the flowJo analysis.")
 (define-public r-flowstats
   (package
     (name "r-flowstats")
-    (version "4.4.0")
+    (version "4.6.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "flowStats" version))
        (sha256
         (base32
-         "1yr5m7qmhmm52c70z3d0zy4zgf0hja7r2ig9yljv5w86bzm962x6"))))
+         "0jjfq66m4lbpkynwxaparkd05znhp3jl9ccj37gyghly294x3rm9"))))
     (properties `((upstream-name . "flowStats")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-cluster" ,r-cluster)
-       ("r-fda" ,r-fda)
-       ("r-flowcore" ,r-flowcore)
-       ("r-flowviz" ,r-flowviz)
-       ("r-flowworkspace" ,r-flowworkspace)
-       ("r-kernsmooth" ,r-kernsmooth)
-       ("r-ks" ,r-ks)
-       ("r-lattice" ,r-lattice)
-       ("r-mass" ,r-mass)
-       ("r-ncdfflow" ,r-ncdfflow)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rrcov" ,r-rrcov)))
+     (list r-biobase
+           r-biocgenerics
+           r-cluster
+           r-fda
+           r-flowcore
+           r-flowviz
+           r-flowworkspace
+           r-kernsmooth
+           r-ks
+           r-lattice
+           r-mass
+           r-ncdfflow
+           r-rcolorbrewer
+           r-rrcov))
     (home-page "http://www.github.com/RGLab/flowStats")
     (synopsis "Statistical methods for the analysis of flow cytometry data")
     (description
@@ -9916,40 +10297,40 @@ package.")
 (define-public r-opencyto
   (package
     (name "r-opencyto")
-    (version "2.4.0")
+    (version "2.6.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "openCyto" version))
        (sha256
         (base32
-         "1par1d5pk1rjg15q7i5z5wqma7xg6fycb826a823wk8wr52a885x"))))
+         "11svr1lk383pkm4npwrnf3h37b3drjsmcwcgdbb45x8k2k95z2fm"))))
     (properties `((upstream-name . "openCyto")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-clue" ,r-clue)
-       ("r-data-table" ,r-data-table)
-       ("r-flowclust" ,r-flowclust)
-       ("r-flowcore" ,r-flowcore)
-       ("r-flowstats" ,r-flowstats)
-       ("r-flowviz" ,r-flowviz)
-       ("r-flowworkspace" ,r-flowworkspace)
-       ("r-graph" ,r-graph)
-       ("r-gtools" ,r-gtools)
-       ("r-ks" ,r-ks)
-       ("r-lattice" ,r-lattice)
-       ("r-mass" ,r-mass)
-       ("r-ncdfflow" ,r-ncdfflow)
-       ("r-plyr" ,r-plyr)
-       ("r-r-utils" ,r-r-utils)
-       ("r-rbgl" ,r-rbgl)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rrcov" ,r-rrcov)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-biobase
+           r-biocgenerics
+           r-clue
+           r-data-table
+           r-flowclust
+           r-flowcore
+           r-flowstats
+           r-flowviz
+           r-flowworkspace
+           r-graph
+           r-gtools
+           r-ks
+           r-lattice
+           r-mass
+           r-ncdfflow
+           r-plyr
+           r-r-utils
+           r-rbgl
+           r-rcolorbrewer
+           r-rcpp
+           r-rrcov))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/openCyto")
     (synopsis "Hierarchical gating pipeline for flow cytometry data")
     (description
@@ -9960,49 +10341,48 @@ sequential way to mimic the manual gating strategy.")
 (define-public r-cytoml
   (package
     (name "r-cytoml")
-    (version "2.4.0")
+    (version "2.6.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "CytoML" version))
        (sha256
         (base32
-         "0ixy7mmnipk8wy61wz6qy7jfbc5zhs6p5iqaii8hdprjnb841ri7"))))
+         "16rgsc2dz5b8lm3ma8nh9wiknrdnvfjcsij7809rmcfs0gn1arcz"))))
     (properties `((upstream-name . "CytoML")))
     (build-system r-build-system)
     (inputs
-     `(("libxml2" ,libxml2)
-       ("zlib" ,zlib)))
-    (propagated-inputs
-     `(("r-base64enc" ,r-base64enc)
-       ("r-bh" ,r-bh)
-       ("r-biobase" ,r-biobase)
-       ("r-corpcor" ,r-corpcor)
-       ("r-cytolib" ,r-cytolib)
-       ("r-data-table" ,r-data-table)
-       ("r-dplyr" ,r-dplyr)
-       ("r-flowcore" ,r-flowcore)
-       ("r-flowworkspace" ,r-flowworkspace)
-       ("r-ggcyto" ,r-ggcyto)
-       ("r-graph" ,r-graph)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-lattice" ,r-lattice)
-       ("r-opencyto" ,r-opencyto)
-       ("r-plyr" ,r-plyr)
-       ("r-rbgl" ,r-rbgl)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-rcppparallel" ,r-rcppparallel)
-       ("r-rgraphviz" ,r-rgraphviz)
-       ("r-rhdf5lib" ,r-rhdf5lib)
-       ("r-rprotobuflib" ,r-rprotobuflib)
-       ("r-runit" ,r-runit)
-       ("r-tibble" ,r-tibble)
-       ("r-xml" ,r-xml)
-       ("r-xml2" ,r-xml2)
-       ("r-yaml" ,r-yaml)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list libxml2 zlib))
+    (propagated-inputs
+     (list r-base64enc
+           r-bh
+           r-biobase
+           r-corpcor
+           r-cytolib
+           r-data-table
+           r-dplyr
+           r-flowcore
+           r-flowworkspace
+           r-ggcyto
+           r-graph
+           r-jsonlite
+           r-lattice
+           r-opencyto
+           r-plyr
+           r-rbgl
+           r-rcpp
+           r-rcpparmadillo
+           r-rcppparallel
+           r-rgraphviz
+           r-rhdf5lib
+           r-rprotobuflib
+           r-runit
+           r-tibble
+           r-xml
+           r-xml2
+           r-yaml))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/RGLab/CytoML")
     (synopsis "GatingML interface for cross platform cytometry data sharing")
     (description
@@ -10013,39 +10393,39 @@ standard to exchange gated cytometry data with other software platforms.")
 (define-public r-flowsom
   (package
     (name "r-flowsom")
-    (version "2.0.0")
+    (version "2.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "FlowSOM" version))
        (sha256
         (base32
-         "18h7p7g3w9imyd1c93jllgp4kd74z96cs85wcqfhmd26nx18hl82"))))
+         "062xrv8li2z849qa8mv5dhafqli6ziz099ikjfvi7v2fr7174p8f"))))
     (properties `((upstream-name . "FlowSOM")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-colorramps" ,r-colorramps)
-       ("r-consensusclusterplus" ,r-consensusclusterplus)
-       ("r-cytoml" ,r-cytoml)
-       ("r-dplyr" ,r-dplyr)
-       ("r-flowcore" ,r-flowcore)
-       ("r-flowworkspace" ,r-flowworkspace)
-       ("r-ggforce" ,r-ggforce)
-       ("r-ggnewscale" ,r-ggnewscale)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggpointdensity" ,r-ggpointdensity)
-       ("r-ggpubr" ,r-ggpubr)
-       ("r-ggrepel" ,r-ggrepel)
-       ("r-igraph" ,r-igraph)
-       ("r-magrittr" ,r-magrittr)
-       ("r-pheatmap" ,r-pheatmap)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rlang" ,r-rlang)
-       ("r-rtsne" ,r-rtsne)
-       ("r-scattermore" ,r-scattermore)
-       ("r-tidyr" ,r-tidyr)
-       ("r-xml" ,r-xml)))
+     (list r-biocgenerics
+           r-colorramps
+           r-consensusclusterplus
+           r-cytoml
+           r-dplyr
+           r-flowcore
+           r-flowworkspace
+           r-ggforce
+           r-ggnewscale
+           r-ggplot2
+           r-ggpointdensity
+           r-ggpubr
+           r-ggrepel
+           r-igraph
+           r-magrittr
+           r-pheatmap
+           r-rcolorbrewer
+           r-rlang
+           r-rtsne
+           r-scattermore
+           r-tidyr
+           r-xml))
     (home-page "https://bioconductor.org/packages/FlowSOM/")
     (synopsis "Visualize and interpret cytometry data")
     (description
@@ -10056,34 +10436,34 @@ self-organizing map clustering and minimal spanning trees.")
 (define-public r-mixomics
   (package
     (name "r-mixomics")
-    (version "6.16.3")
+    (version "6.18.1")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "mixOmics" version))
        (sha256
         (base32
-         "1x6dbw4q6p9vngm256fr96r9fjxk5nik5ivkhbl5a9zqyq8wagpa"))))
+         "1wpskrnl2bry9m4k2djhjddcd8gpwf51gp5c3si1y7qxja78ql9f"))))
     (properties `((upstream-name . "mixOmics")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocparallel" ,r-biocparallel)
-       ("r-corpcor" ,r-corpcor)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ellipse" ,r-ellipse)
-       ("r-ggrepel" ,r-ggrepel)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-igraph" ,r-igraph)
-       ("r-lattice" ,r-lattice)
-       ("r-mass" ,r-mass)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-rarpack" ,r-rarpack)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-reshape2" ,r-reshape2)
-       ("r-tidyr" ,r-tidyr)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-biocparallel
+           r-corpcor
+           r-dplyr
+           r-ellipse
+           r-ggrepel
+           r-ggplot2
+           r-gridextra
+           r-igraph
+           r-lattice
+           r-mass
+           r-matrixstats
+           r-rarpack
+           r-rcolorbrewer
+           r-reshape2
+           r-tidyr))
+    (native-inputs
+     (list r-knitr))
     (home-page "http://www.mixOmics.org")
     (synopsis "Multivariate methods for exploration of biological datasets")
     (description
@@ -10102,36 +10482,36 @@ delete entire rows with missing data.")
 (define-public r-depecher
   (package                              ;Source/Weave error
     (name "r-depecher")
-    (version "1.8.0")
+    (version "1.10.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "DepecheR" version))
        (sha256
         (base32
-         "04vxc43p3kpsx0vksk2nwmy9p56h35z2mc8j9p2wm29zaz1y8j3p"))))
+         "1500jivij7zdycdd0i0b7mgp44w4z0hqnpzqbq8nhvzzdigic8x9"))))
     (properties `((upstream-name . "DepecheR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-beanplot" ,r-beanplot)
-       ("r-dosnow" ,r-dosnow)
-       ("r-dplyr" ,r-dplyr)
-       ("r-fnn" ,r-fnn)
-       ("r-foreach" ,r-foreach)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gmodels" ,r-gmodels)
-       ("r-gplots" ,r-gplots)
-       ("r-mass" ,r-mass)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-mixomics" ,r-mixomics)
-       ("r-moments" ,r-moments)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcppeigen" ,r-rcppeigen)
-       ("r-reshape2" ,r-reshape2)
-       ("r-robustbase" ,r-robustbase)
-       ("r-viridis" ,r-viridis)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-beanplot
+           r-dosnow
+           r-dplyr
+           r-fnn
+           r-foreach
+           r-ggplot2
+           r-gmodels
+           r-gplots
+           r-mass
+           r-matrixstats
+           r-mixomics
+           r-moments
+           r-rcpp
+           r-rcppeigen
+           r-reshape2
+           r-robustbase
+           r-viridis))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/DepecheR/")
     (synopsis "Identify traits of clusters in high-dimensional entities")
     (description
@@ -10148,31 +10528,31 @@ data, to only emphasize the data that actually matters.")
 (define-public r-rcistarget
   (package
     (name "r-rcistarget")
-    (version "1.12.0")
+    (version "1.14.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "RcisTarget" version))
        (sha256
         (base32
-         "1yh0l11vnslgr6zsbpgc8mc4aa32zy34f5yrz98hkcdl53iw5y7f"))))
+         "1qarr7xd71kz1haccj65x7sc7pc4v6xpqcfa3rkyp2bk240gigi7"))))
     (properties `((upstream-name . "RcisTarget")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-arrow" ,r-arrow)
-       ("r-aucell" ,r-aucell)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-data-table" ,r-data-table)
-       ("r-dplyr" ,r-dplyr)
-       ("r-feather" ,r-feather)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-gseabase" ,r-gseabase)
-       ("r-r-utils" ,r-r-utils)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-tibble" ,r-tibble)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-arrow
+           r-aucell
+           r-biocgenerics
+           r-data-table
+           r-dplyr
+           r-feather
+           r-genomeinfodb
+           r-genomicranges
+           r-gseabase
+           r-r-utils
+           r-summarizedexperiment
+           r-tibble))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://aertslab.org/#scenic")
     (synopsis "Identify transcription factor binding motifs enriched on a gene list")
     (description
@@ -10190,23 +10570,19 @@ genes in the gene-set that are ranked above the leading edge).")
 (define-public r-chicago
   (package
     (name "r-chicago")
-    (version "1.20.0")
+    (version "1.22.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "Chicago" version))
        (sha256
         (base32
-         "0dkwy6pfvzd7g4qmhjl24ypn92l78w1zy0ajhcxgg39f7zsq883x"))))
+         "0nz9v37p7zl8yw3ykdbsb3izcwgx349wvrhwfyyn9h3jxjfafngn"))))
     (properties `((upstream-name . "Chicago")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)
-       ("r-delaporte" ,r-delaporte)
-       ("r-hmisc" ,r-hmisc)
-       ("r-mass" ,r-mass)
-       ("r-matrixstats" ,r-matrixstats)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-data-table r-delaporte r-hmisc r-mass r-matrixstats))
+    (native-inputs (list r-knitr))
     (home-page "https://bioconductor.org/packages/Chicago")
     (synopsis "Capture Hi-C analysis of genomic organization")
     (description
@@ -10216,40 +10592,40 @@ genes in the gene-set that are ranked above the leading edge).")
 (define-public r-cicero
   (package
     (name "r-cicero")
-    (version "1.10.1")
+    (version "1.12.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "cicero" version))
        (sha256
         (base32
-         "1y34cm52bv1v2hr7sz8zjzxwd4wng7v75avz5wx45l0ld54z9l10"))))
-    (build-system r-build-system)
-    (propagated-inputs
-     `(("r-assertthat" ,r-assertthat)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-data-table" ,r-data-table)
-       ("r-dplyr" ,r-dplyr)
-       ("r-fnn" ,r-fnn)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-glasso" ,r-glasso)
-       ("r-gviz" ,r-gviz)
-       ("r-igraph" ,r-igraph)
-       ("r-iranges" ,r-iranges)
-       ("r-matrix" ,r-matrix)
-       ("r-monocle" ,r-monocle)
-       ("r-plyr" ,r-plyr)
-       ("r-reshape2" ,r-reshape2)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-stringi" ,r-stringi)
-       ("r-stringr" ,r-stringr)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)
-       ("r-vgam" ,r-vgam)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+         "1fc69nkm2cwpr6gkfmra2ph0lrmw486chswp4pn8i70ia43fzdm7"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-assertthat
+           r-biobase
+           r-biocgenerics
+           r-data-table
+           r-dplyr
+           r-fnn
+           r-genomicranges
+           r-ggplot2
+           r-glasso
+           r-gviz
+           r-igraph
+           r-iranges
+           r-matrix
+           r-monocle
+           r-plyr
+           r-reshape2
+           r-s4vectors
+           r-stringi
+           r-stringr
+           r-tibble
+           r-tidyr
+           r-vgam))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/cicero/")
     (synopsis "Predict cis-co-accessibility from single-cell data")
     (description
@@ -10276,50 +10652,50 @@ accessibility data.")
           (base32
            "077yza93wdhi08n40md20jwk55k9lw1f3y0063qkk90cpz60wi0c"))))
       (propagated-inputs
-       `(("r-monocle3" ,r-monocle3)
-         ,@(alist-delete "r-monocle"
-                         (package-propagated-inputs r-cicero)))))))
+       (modify-inputs (package-propagated-inputs r-cicero)
+         (delete "r-monocle")
+         (prepend r-monocle3))))))
 
 (define-public r-circrnaprofiler
   (package
     (name "r-circrnaprofiler")
-    (version "1.6.0")
+    (version "1.8.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "circRNAprofiler" version))
        (sha256
         (base32
-         "1hif40vfg2lkbyf6abbkxbdm3b1biw6gxnh6ca2sydvi3y5l2ys2"))))
+         "0l83r9idhrha1m21vpnw917m5dlldji49zvx4d25m5g3ia1pkhpf"))))
     (properties
      `((upstream-name . "circRNAprofiler")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationhub" ,r-annotationhub)
-       ("r-biostrings" ,r-biostrings)
-       ("r-bsgenome" ,r-bsgenome)
-       ("r-bsgenome-hsapiens-ucsc-hg19" ,r-bsgenome-hsapiens-ucsc-hg19)
-       ("r-deseq2" ,r-deseq2)
-       ("r-dplyr" ,r-dplyr)
-       ("r-edger" ,r-edger)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gwascat" ,r-gwascat)
-       ("r-iranges" ,r-iranges)
-       ("r-magrittr" ,r-magrittr)
-       ("r-r-utils" ,r-r-utils)
-       ("r-readr" ,r-readr)
-       ("r-reshape2" ,r-reshape2)
-       ("r-rlang" ,r-rlang)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-seqinr" ,r-seqinr)
-       ("r-stringi" ,r-stringi)
-       ("r-stringr" ,r-stringr)
-       ("r-universalmotif" ,r-universalmotif)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-annotationhub
+           r-biostrings
+           r-bsgenome
+           r-bsgenome-hsapiens-ucsc-hg19
+           r-deseq2
+           r-dplyr
+           r-edger
+           r-genomeinfodb
+           r-genomicranges
+           r-ggplot2
+           r-gwascat
+           r-iranges
+           r-magrittr
+           r-r-utils
+           r-readr
+           r-reshape2
+           r-rlang
+           r-rtracklayer
+           r-s4vectors
+           r-seqinr
+           r-stringi
+           r-stringr
+           r-universalmotif))
+    (native-inputs
+     (list r-knitr))
     (home-page
      "https://github.com/Aufiero/circRNAprofiler")
     (synopsis
@@ -10349,21 +10725,21 @@ analysis, evolutionary conservation, biogenesis to functional analysis.")
          "0c4553rnxq7b1w451kcc3iwvak4qa5h2b43xmfw6ii8096zd1gbf"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-aucell" ,r-aucell)
-       ("r-data-table" ,r-data-table)
-       ("r-dplyr" ,r-dplyr)
-       ("r-dosnow" ,r-dosnow)
-       ("r-dt" ,r-dt)
-       ("r-feather" ,r-feather)
-       ("r-fitdistrplus" ,r-fitdistrplus)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-lda" ,r-lda)
-       ("r-matrix" ,r-matrix)
-       ("r-plyr" ,r-plyr)
-       ("r-rcistarget" ,r-rcistarget)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-aucell
+           r-data-table
+           r-dplyr
+           r-dosnow
+           r-dt
+           r-feather
+           r-fitdistrplus
+           r-genomicranges
+           r-ggplot2
+           r-lda
+           r-matrix
+           r-plyr
+           r-rcistarget
+           r-rtracklayer
+           r-s4vectors))
     (home-page "https://github.com/aertslab/cisTopic")
     (synopsis "Modelling of cis-regulatory topics from single cell epigenomics data")
     (description
@@ -10396,43 +10772,42 @@ cisTopics and explore the nature and regulatory proteins driving them.")
            "11cg9szlysnsjiaahda4k5v2vh4rxx27zhz53hafgaq9mdz0kgi2"))))
       (properties `((upstream-name . "cisTopic")))
       (propagated-inputs
-       `(("r-aucell" ,r-aucell)
-         ("r-data-table" ,r-data-table)
-         ("r-dosnow" ,r-dosnow)
-         ("r-dplyr" ,r-dplyr)
-         ("r-dt" ,r-dt)
-         ("r-feather" ,r-feather)
-         ("r-fitdistrplus" ,r-fitdistrplus)
-         ("r-genomicranges" ,r-genomicranges)
-         ("r-ggplot2" ,r-ggplot2)
-         ("r-lda" ,r-lda)
-         ("r-matrix" ,r-matrix)
-         ("r-plyr" ,r-plyr)
-         ("r-rcistarget" ,r-rcistarget)
-         ("r-rtracklayer" ,r-rtracklayer)
-         ("r-s4vectors" ,r-s4vectors)
-         ("r-text2vec" ,r-text2vec)))
+       (list r-aucell
+             r-data-table
+             r-dosnow
+             r-dplyr
+             r-dt
+             r-feather
+             r-fitdistrplus
+             r-genomicranges
+             r-ggplot2
+             r-lda
+             r-matrix
+             r-plyr
+             r-rcistarget
+             r-rtracklayer
+             r-s4vectors
+             r-text2vec))
       (native-inputs
-       `(("r-knitr" ,r-knitr))))))
+       (list r-knitr)))))
 
 (define-public r-genie3
   (package
     (name "r-genie3")
-    (version "1.14.0")
+    (version "1.16.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "GENIE3" version))
        (sha256
         (base32
-         "1v54dzcz654wfm3npbp8gb55v49im0fm547cz3hvsidq4zhi3l1b"))))
+         "0ms769267pimrx3xwwkgjy03qilkxxs7xwhzfca01f65i4n3l6fw"))))
     (properties `((upstream-name . "GENIE3")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-reshape2" ,r-reshape2)))
+     (list r-dplyr r-reshape2))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/GENIE3")
     (synopsis "Gene network inference with ensemble of trees")
     (description
@@ -10443,18 +10818,18 @@ regulatory networks from expression data.")
 (define-public r-roc
   (package
     (name "r-roc")
-    (version "1.68.1")
+    (version "1.70.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "ROC" version))
        (sha256
         (base32
-         "1rmsrvn6hrg9ay7xfb05mfkxknnig78p3kbk9ghsd11lhx2fjm3s"))))
+         "1mgxpv5p6gnv04wzkcryrg5as5xrxvlqlkkcbv0k1bx9y6ykijy9"))))
     (properties `((upstream-name . "ROC")))
     (build-system r-build-system)
-    (propagated-inputs
-     `(("r-knitr" ,r-knitr)))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://www.bioconductor.org/packages/ROC/")
     (synopsis "Utilities for ROC curves")
     (description
@@ -10479,7 +10854,7 @@ Characteristic} (ROC) curves, with a focus on micro arrays.")
      `((upstream-name
         . "IlluminaHumanMethylation450kanno.ilmn12.hg19")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-minfi" ,r-minfi)))
+    (propagated-inputs (list r-minfi))
     (home-page
      "https://bioconductor.org/packages/IlluminaHumanMethylation450kanno.ilmn12.hg19/")
     (synopsis "Annotation for Illumina's 450k methylation arrays")
@@ -10491,26 +10866,27 @@ data.")
 (define-public r-watermelon
   (package
     (name "r-watermelon")
-    (version "1.36.0")
+    (version "2.0.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "wateRmelon" version))
        (sha256
         (base32
-         "1qar8z0nf33bqr488swig0bfq8lnvcdjcxvw3q3b0hkkvybn27zw"))))
+         "1kzkg3cnm5pcs6blpw1qn7na6z3kar93v67680wsxa6qxxdiggk3"))))
     (properties `((upstream-name . "wateRmelon")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-illuminahumanmethylation450kanno-ilmn12-hg19"
-        ,r-illuminahumanmethylation450kanno-ilmn12-hg19)
-       ("r-illuminaio" ,r-illuminaio)
-       ("r-limma" ,r-limma)
-       ("r-lumi" ,r-lumi)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-methylumi" ,r-methylumi)
-       ("r-roc" ,r-roc)))
+     (list r-biobase
+           r-illuminahumanmethylation450kanno-ilmn12-hg19
+           r-illuminaio
+           r-limma
+           r-lumi
+           r-matrixstats
+           r-methylumi
+           r-roc))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/wateRmelon/")
     (synopsis "Illumina 450 methylation array normalization and metrics")
     (description
@@ -10528,14 +10904,14 @@ metrics, with methods for objects produced by the @code{methylumi} and
 (define-public r-gdsfmt
   (package
     (name "r-gdsfmt")
-    (version "1.28.1")
+    (version "1.30.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "gdsfmt" version))
        (sha256
         (base32
-         "1w3z718q3bhh8bp71va9pbcd62pwbvgjw33ffg960jya40xssvc7"))
+         "147i33sb65n3cl3ibmjzgfm7i4ljy640k18mzknvc18v1906j9vp"))
        (modules '((guix build utils)))
        ;; Remove bundled sources of zlib, lz4, and xz.  Don't attempt to build
        ;; them and link with system libraries instead.
@@ -10561,11 +10937,9 @@ metrics, with methods for objects produced by the @code{methylumi} and
     (properties `((upstream-name . "gdsfmt")))
     (build-system r-build-system)
     (inputs
-     `(("lz4" ,lz4)
-       ("xz" ,xz)
-       ("zlib" ,zlib)))
+     (list lz4 xz zlib))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "http://corearray.sourceforge.net/")
     (synopsis
      "R Interface to CoreArray Genomic Data Structure (GDS) Files")
@@ -10586,24 +10960,27 @@ with multiple R processes supported by the package @code{parallel}.")
 (define-public r-bigmelon
   (package
     (name "r-bigmelon")
-    (version "1.18.0")
+    (version "1.20.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "bigmelon" version))
        (sha256
         (base32
-         "061f0hc4m4nvdr6298pg3inpx1z2bpsm9nlxqs3v7n58q15xyzri"))))
+         "0ksbmybi8wsg515b4k9ij1xqqk9i90pyap2wq5w3c49qgc0pqali"))))
     (properties `((upstream-name . "bigmelon")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-gdsfmt" ,r-gdsfmt)
-       ("r-geoquery" ,r-geoquery)
-       ("r-methylumi" ,r-methylumi)
-       ("r-minfi" ,r-minfi)
-       ("r-watermelon" ,r-watermelon)))
+     (list r-biobase
+           r-biocgenerics
+           r-gdsfmt
+           r-geoquery
+           r-illuminaio
+           r-methylumi
+           r-minfi
+           r-watermelon))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/bigmelon/")
     (synopsis "Illumina methylation array analysis for large experiments")
     (description
@@ -10614,20 +10991,18 @@ with multiple R processes supported by the package @code{parallel}.")
 (define-public r-seqbias
   (package
     (name "r-seqbias")
-    (version "1.40.0")
+    (version "1.42.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "seqbias" version))
        (sha256
         (base32
-         "06w43plv4x1pafybq633n7adqp9yj3bvaaamq7vylmkfbcx3nl8k"))))
+         "1q608c1madij8l52ljl3w52vi3cssr6ikny84yj6n8s7yvpx5jpr"))))
     (properties `((upstream-name . "seqbias")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biostrings" ,r-biostrings)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-rhtslib" ,r-rhtslib)))
+     (list r-biostrings r-genomicranges r-rhtslib))
     (home-page "https://bioconductor.org/packages/seqbias/")
     (synopsis "Estimation of per-position bias in high-throughput sequencing data")
     (description
@@ -10653,13 +11028,13 @@ genome sequence.")
     ;; doesn't make sense to build substitutes.
     (arguments `(#:substitutable? #f))
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-iranges" ,r-iranges)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-bsgenome" ,r-bsgenome)
-       ("r-biostrings" ,r-biostrings)))
+     (list r-biocgenerics
+           r-s4vectors
+           r-iranges
+           r-genomeinfodb
+           r-genomicranges
+           r-bsgenome
+           r-biostrings))
     (home-page
      "https://bioconductor.org/packages/SNPlocs.Hsapiens.dbSNP144.GRCh37/")
     (synopsis "SNP locations for Homo sapiens (dbSNP Build 144)")
@@ -10678,20 +11053,18 @@ injected in that sequence).")
 (define-public r-reqon
   (package
     (name "r-reqon")
-    (version "1.38.0")
+    (version "1.40.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "ReQON" version))
        (sha256
         (base32
-         "1z13avbxwvvhh03arjfnaipznynifsi8k2hzw4kappz24f7lwmza"))))
+         "14v79vg3pmpkbzgn8xqd020jdwcs8g57d46bzl23yi3w1rsfbrb1"))))
     (properties `((upstream-name . "ReQON")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rjava" ,r-rjava)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-seqbias" ,r-seqbias)))
+     (list r-rjava r-rsamtools r-seqbias))
     (home-page "https://bioconductor.org/packages/ReQON/")
     (synopsis "Recalibrating quality of nucleotides")
     (description
@@ -10703,33 +11076,33 @@ format.")
 (define-public r-wavcluster
   (package
     (name "r-wavcluster")
-    (version "2.26.0")
+    (version "2.28.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "wavClusteR" version))
        (sha256
         (base32
-         "1sydzrqydfv1ik2h08xkxlx6xrv866bf0if6v5wch9l3krh0sych"))))
+         "1a1zhckrgq5yl51acj5piyh2hq70q6hhpym4cawzdssxhcbq70bk"))))
     (properties `((upstream-name . "wavClusteR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-biostrings" ,r-biostrings)
-       ("r-foreach" ,r-foreach)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-hmisc" ,r-hmisc)
-       ("r-iranges" ,r-iranges)
-       ("r-mclust" ,r-mclust)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-seqinr" ,r-seqinr)
-       ("r-stringr" ,r-stringr)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-biocgenerics
+           r-biostrings
+           r-foreach
+           r-genomicfeatures
+           r-genomicranges
+           r-ggplot2
+           r-hmisc
+           r-iranges
+           r-mclust
+           r-rsamtools
+           r-rtracklayer
+           r-s4vectors
+           r-seqinr
+           r-stringr))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/wavClusteR/")
     (synopsis "Identification of RNA-protein interaction sites in PAR-CLIP data")
     (description
@@ -10750,35 +11123,35 @@ procedures that induce nucleotide substitutions (e.g. BisSeq).")
 (define-public r-timeseriesexperiment
   (package
     (name "r-timeseriesexperiment")
-    (version "1.10.1")
+    (version "1.12.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "TimeSeriesExperiment" version))
        (sha256
         (base32
-         "1095a2ynxcf9xiac5cjzslcbmjnjpbby0vy7d84qagdiq1w6mrhn"))))
+         "0fphnkkd3i7zf33a9lhw95n80vzv1z7fmn7mhrfb949yz4jdvk7d"))))
     (properties
      `((upstream-name . "TimeSeriesExperiment")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-deseq2" ,r-deseq2)
-       ("r-dplyr" ,r-dplyr)
-       ("r-dynamictreecut" ,r-dynamictreecut)
-       ("r-edger" ,r-edger)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-hmisc" ,r-hmisc)
-       ("r-limma" ,r-limma)
-       ("r-magrittr" ,r-magrittr)
-       ("r-proxy" ,r-proxy)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)
-       ("r-vegan" ,r-vegan)
-       ("r-viridis" ,r-viridis)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-deseq2
+           r-dplyr
+           r-dynamictreecut
+           r-edger
+           r-ggplot2
+           r-hmisc
+           r-limma
+           r-magrittr
+           r-proxy
+           r-s4vectors
+           r-summarizedexperiment
+           r-tibble
+           r-tidyr
+           r-vegan
+           r-viridis))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/nlhuong/TimeSeriesExperiment/")
     (synopsis "Analysis for short time-series data")
     (description
@@ -10791,42 +11164,42 @@ provides methods for retrieving enriched pathways.")
 (define-public r-variantfiltering
   (package
     (name "r-variantfiltering")
-    (version "1.28.0")
+    (version "1.30.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "VariantFiltering" version))
        (sha256
         (base32
-         "0abhrk53csd9jz9sv4q1qr74jax9mbj2icbz1iilf1123nvnjypd"))))
+         "15js8xzi9rsgkjkqcshzk3r3g85kdnxn5v2hi6l5s4yxj9lnq12p"))))
     (properties
      `((upstream-name . "VariantFiltering")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-biostrings" ,r-biostrings)
-       ("r-bsgenome" ,r-bsgenome)
-       ("r-dt" ,r-dt)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-genomicscores" ,r-genomicscores)
-       ("r-graph" ,r-graph)
-       ("r-gviz" ,r-gviz)
-       ("r-iranges" ,r-iranges)
-       ("r-rbgl" ,r-rbgl)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-shiny" ,r-shiny)
-       ("r-shinyjs" ,r-shinyjs)
-       ("r-shinythemes" ,r-shinythemes)
-       ("r-shinytree" ,r-shinytree)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-variantannotation" ,r-variantannotation)
-       ("r-xvector" ,r-xvector)))
+     (list r-annotationdbi
+           r-biobase
+           r-biocgenerics
+           r-biocparallel
+           r-biostrings
+           r-bsgenome
+           r-dt
+           r-genomeinfodb
+           r-genomicfeatures
+           r-genomicranges
+           r-genomicscores
+           r-graph
+           r-gviz
+           r-iranges
+           r-rbgl
+           r-rsamtools
+           r-s4vectors
+           r-shiny
+           r-shinyjs
+           r-shinythemes
+           r-shinytree
+           r-summarizedexperiment
+           r-variantannotation
+           r-xvector))
     (home-page "https://github.com/rcastelo/VariantFiltering")
     (synopsis "Filtering of coding and non-coding genetic variants")
     (description
@@ -10849,7 +11222,7 @@ populations, splice site strength, conservation, etc.")
     (properties `((upstream-name . "GenomeGraphs")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biomart" ,r-biomart)))
+     (list r-biomart))
     (home-page "https://bioconductor.org/packages/GenomeGraphs/")
     (synopsis "Plotting genomic information from Ensembl")
     (description
@@ -10877,16 +11250,16 @@ same genome coordinate system.")
     (properties `((upstream-name . "waveTiling")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-affy" ,r-affy)
-       ("r-biobase" ,r-biobase)
-       ("r-biostrings" ,r-biostrings)
-       ("r-genomegraphs" ,r-genomegraphs)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-oligo" ,r-oligo)
-       ("r-oligoclasses" ,r-oligoclasses)
-       ("r-preprocesscore" ,r-preprocesscore)
-       ("r-waveslim" ,r-waveslim)))
+     (list r-affy
+           r-biobase
+           r-biostrings
+           r-genomegraphs
+           r-genomicranges
+           r-iranges
+           r-oligo
+           r-oligoclasses
+           r-preprocesscore
+           r-waveslim))
     (home-page "https://r-forge.r-project.org/projects/wavetiling/")
     (synopsis "Wavelet-based models for tiling array transcriptome analysis")
     (description
@@ -10897,36 +11270,37 @@ arrays based on fast wavelet-based functional models.")
 (define-public r-variancepartition
   (package
     (name "r-variancepartition")
-    (version "1.22.0")
+    (version "1.24.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "variancePartition" version))
        (sha256
         (base32
-         "1pqy2g9pg8pswmkrs2fzlkwwliw2r7f33h05bci5bz41b8ribpzj"))))
+         "0f5y61dpzwmr8v7npim18zvxa8n49rbzclb9j72haba0px6ibhvw"))))
     (properties
      `((upstream-name . "variancePartition")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-colorramps" ,r-colorramps)
-       ("r-doparallel" ,r-doparallel)
-       ("r-foreach" ,r-foreach)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gplots" ,r-gplots)
-       ("r-iterators" ,r-iterators)
-       ("r-limma" ,r-limma)
-       ("r-lme4" ,r-lme4)
-       ("r-lmertest" ,r-lmertest)
-       ("r-mass" ,r-mass)
-       ("r-pbkrtest" ,r-pbkrtest)
-       ("r-progress" ,r-progress)
-       ("r-reshape2" ,r-reshape2)
-       ("r-scales" ,r-scales)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-biobase
+           r-biocparallel
+           r-doparallel
+           r-foreach
+           r-ggplot2
+           r-gplots
+           r-iterators
+           r-limma
+           r-lme4
+           r-lmertest
+           r-mass
+           r-matrix
+           r-pbkrtest
+           r-progress
+           r-reshape2
+           r-rlang
+           r-scales))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/variancePartition/")
     (synopsis "Analyze variation in gene expression experiments")
     (description
@@ -10941,22 +11315,18 @@ measures.")
 (define-public r-htqpcr
   (package
     (name "r-htqpcr")
-    (version "1.46.0")
+    (version "1.48.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "HTqPCR" version))
        (sha256
         (base32
-         "1y3ik5a9w66jby6682jfm8mn2883s8yfv4xw8a8v1f6q2d1j938l"))))
+         "1d7qj5yv6kzqmdrnp5pd8qv1yr4bg8cs39p8ib0i0k8b4wr97kq3"))))
     (properties `((upstream-name . "HTqPCR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-affy" ,r-affy)
-       ("r-biobase" ,r-biobase)
-       ("r-gplots" ,r-gplots)
-       ("r-limma" ,r-limma)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)))
+     (list r-affy r-biobase r-gplots r-limma r-rcolorbrewer))
     (home-page (string-append "https://www.ebi.ac.uk/sites/ebi.ac.uk/files/"
                               "groups/bertone/software/HTqPCR.pdf"))
     (synopsis "Automated analysis of high-throughput qPCR data")
@@ -10975,20 +11345,19 @@ features (e.g.  genes, microRNAs).")
 (define-public r-unifiedwmwqpcr
   (package
     (name "r-unifiedwmwqpcr")
-    (version "1.28.0")
+    (version "1.30.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "unifiedWMWqPCR" version))
        (sha256
         (base32
-         "1clcz610sl3s0mjf84j21xgrmjhkxcc4h292ljwq5yzbkk68g896"))))
+         "0kw26bm2yyna38q5r4zb2alpa3j4gx7v970419mnjlif4g0hmggk"))))
     (properties
      `((upstream-name . "unifiedWMWqPCR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-htqpcr" ,r-htqpcr)))
+     (list r-biocgenerics r-htqpcr))
     (home-page "https://bioconductor.org/packages/unifiedWMWqPCR")
     (synopsis "Unified Wilcoxon-Mann Whitney Test for differential expression in qPCR data")
     (description
@@ -11000,14 +11369,14 @@ data.")
 (define-public r-universalmotif
   (package
     (name "r-universalmotif")
-    (version "1.10.2")
+    (version "1.12.2")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "universalmotif" version))
        (sha256
         (base32
-         "0hv2v2zgif5ihr5hxmdz32rln43jc1j0rslp44kd3rijjl45zysn"))))
+         "1p9zdrsxqn4ayvbj05xgpzpbzkzrh7k0d62x10069687vfl6dlxg"))))
     (properties
      `((upstream-name . "universalmotif")))
     (build-system r-build-system)
@@ -11019,18 +11388,18 @@ data.")
              (substitute* "src/Makevars"
                (("/usr/bin/strip") (which "strip"))))))))
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-biostrings" ,r-biostrings)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-iranges" ,r-iranges)
-       ("r-mass" ,r-mass)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcppthread" ,r-rcppthread)
-       ("r-rlang" ,r-rlang)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-yaml" ,r-yaml)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-biocgenerics
+           r-biostrings
+           r-ggplot2
+           r-iranges
+           r-mass
+           r-rcpp
+           r-rcppthread
+           r-rlang
+           r-s4vectors
+           r-yaml))
+    (native-inputs
+     (list r-knitr))
     (home-page
      "https://bioconductor.org/packages/universalmotif/")
     (synopsis
@@ -11050,27 +11419,30 @@ motifs, and others.")
 (define-public r-activedriverwgs
   (package
     (name "r-activedriverwgs")
-    (version "1.1.1")
+    (version "1.1.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "ActiveDriverWGS" version))
        (sha256
         (base32
-         "06mvakdc8d2pn91p0sr4ixc561s4ia5h1cvd1p7pqd6s50dy4say"))))
+         "13b5yazgv9kckcp6gck183mh1m0q8lc5ixagmcy9s8kv2wz7wq45"))))
     (properties
      `((upstream-name . "ActiveDriverWGS")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biostrings" ,r-biostrings)
-       ("r-bsgenome" ,r-bsgenome)
-       ("r-bsgenome-hsapiens-ucsc-hg19" ,r-bsgenome-hsapiens-ucsc-hg19)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-biostrings
+           r-bsgenome
+           r-bsgenome-hsapiens-ucsc-hg19
+           r-bsgenome-hsapiens-ucsc-hg38
+           r-bsgenome-mmusculus-ucsc-mm9
+           r-bsgenome-mmusculus-ucsc-mm10
+           r-genomeinfodb
+           r-genomicranges
+           r-iranges
+           r-s4vectors))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/ActiveDriverWGS/")
     (synopsis "Driver discovery tool for cancer whole genomes")
     (description
@@ -11085,22 +11457,21 @@ using whole genome sequencing data.")
 (define-public r-activepathways
   (package
     (name "r-activepathways")
-    (version "1.0.2")
+    (version "1.0.4")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "ActivePathways" version))
        (sha256
         (base32
-         "1hxy760x141ykrpqdbfldq4ggj1svj3lsrpwi4rb2x7r4lna937l"))))
+         "1prhwx0nnwy2q62l2r0z31mhk4mq6xdr6mjihdlwpwgwq4rfi60y"))))
     (properties
      `((upstream-name . "ActivePathways")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)
-       ("r-ggplot2" ,r-ggplot2)))
+     (list r-data-table r-ggplot2))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/ActivePathways/")
     (synopsis "Multivariate pathway enrichment analysis")
     (description
@@ -11114,18 +11485,18 @@ cellular organization in health and disease.")
 (define-public r-bgmix
   (package
     (name "r-bgmix")
-    (version "1.52.0")
+    (version "1.54.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "BGmix" version))
        (sha256
         (base32
-         "1gp40ddspblpszzm4k4r7ysgx883iwdfqc5ds23p2q1ml9idwgvv"))))
+         "0x1sx319yfxgkscr9r62msq00ddvmzryzn42wy4dh5pvjmgifkkn"))))
     (properties `((upstream-name . "BGmix")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-kernsmooth" ,r-kernsmooth)))
+     (list r-kernsmooth))
     (home-page "https://bioconductor.org/packages/BGmix/")
     (synopsis "Bayesian models for differential gene expression")
     (description
@@ -11136,21 +11507,18 @@ gene expression.")
 (define-public r-bgx
   (package
     (name "r-bgx")
-    (version "1.58.0")
+    (version "1.60.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "bgx" version))
        (sha256
         (base32
-         "18n6j2ihv85rhai5sf5k3mwf9nkc2nl2sinx3rrs6sbl529g4mw4"))))
+         "0z3isnpyf9s11807dprxmd105lb0k4l7r1sygad30ncjvpldifzm"))))
     (properties `((upstream-name . "bgx")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-affy" ,r-affy)
-       ("r-biobase" ,r-biobase)
-       ("r-gcrma" ,r-gcrma)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-affy r-biobase r-gcrma r-rcpp))
     (home-page "https://bioconductor.org/packages/bgx/")
     (synopsis "Bayesian gene expression")
     (description
@@ -11161,14 +11529,14 @@ Affymetrix GeneChips.")
 (define-public r-bhc
   (package
     (name "r-bhc")
-    (version "1.44.0")
+    (version "1.46.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "BHC" version))
        (sha256
         (base32
-         "0aaawm7h3ppyyhd7hi14rpynagnxx4730f5vxizj5bpzwbclp6h9"))))
+         "09nw4ljc9sn7iw09ha0m614hmdjj193xhhav5x5p07l501kks6h2"))))
     (properties `((upstream-name . "BHC")))
     (build-system r-build-system)
     (home-page "https://bioconductor.org/packages/BHC/")
@@ -11187,20 +11555,18 @@ algorithm which is more efficient for larger data sets.")
 (define-public r-bicare
   (package
     (name "r-bicare")
-    (version "1.50.0")
+    (version "1.52.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "BicARE" version))
        (sha256
         (base32
-         "0j3gs4xcdgaca2c62jf2h86skbbxm1c9g2khs5bsa8fmkskr6vl9"))))
+         "1g8vrsc05cysb36gsw8sfmr6dgbh4aji37vcq9qwkmkv3jgvnlf6"))))
     (properties `((upstream-name . "BicARE")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-gseabase" ,r-gseabase)
-       ("r-multtest" ,r-multtest)))
+     (list r-biobase r-gseabase r-multtest))
     (home-page "http://bioinfo.curie.fr")
     (synopsis "Biclustering analysis and results exploration")
     (description
@@ -11211,21 +11577,20 @@ results.")
 (define-public r-bifet
   (package
     (name "r-bifet")
-    (version "1.12.0")
+    (version "1.14.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "BiFET" version))
        (sha256
         (base32
-         "1fwy7ws0bn67557s0kcw8pbln2jg834n6kfbs8297ps07nxr0lpj"))))
+         "0vidypvphnj76g4ra5ijrgqx2dnzw0fmvdvz35gsqswrr3k20jkk"))))
     (properties `((upstream-name . "BiFET")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-genomicranges" ,r-genomicranges)
-       ("r-poibin" ,r-poibin)))
+     (list r-genomicranges r-poibin))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/BiFET")
     (synopsis "Bias-free footprint enrichment test")
     (description
@@ -11241,23 +11606,22 @@ the read count and GC content bias.")
 (define-public r-rsbml
   (package
     (name "r-rsbml")
-    (version "2.50.0")
+    (version "2.52.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "rsbml" version))
        (sha256
         (base32
-         "017xwra6ms7kx6sg3ksw1vr9zn23imc2qjgpmjikx7mgbak125xh"))))
+         "0mdyr637sgasc156cv8i2s2mpl1hdvilfwwkhvw7l95pl90gnsh2"))))
     (properties `((upstream-name . "rsbml")))
     (build-system r-build-system)
     (inputs
-     `(("libsbml" ,libsbml)))
+     (list libsbml))
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-graph" ,r-graph)))
+     (list r-biocgenerics r-graph))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://www.sbml.org")
     (synopsis "R support for SBML")
     (description
@@ -11268,18 +11632,18 @@ validating output, provides an S4 SBML DOM, converts SBML to R graph objects.")
 (define-public r-hypergraph
   (package
     (name "r-hypergraph")
-    (version "1.64.0")
+    (version "1.66.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "hypergraph" version))
        (sha256
         (base32
-         "01knpd964m2g9vwd7c72qnc8g2p2pzhvk7lin4mhvcmb3pvsdlh7"))))
+         "0xnyl9qh5p32ifvzkcl5g4a38zbnwykqzrp8gwz076a0ksiqqdxf"))))
     (properties `((upstream-name . "hypergraph")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-graph" ,r-graph)))
+     (list r-graph))
     (home-page "https://bioconductor.org/packages/hypergraph")
     (synopsis "Hypergraph data structures")
     (description
@@ -11290,21 +11654,19 @@ manipulating hypergraphs.")
 (define-public r-hyperdraw
   (package
     (name "r-hyperdraw")
-    (version "1.44.0")
+    (version "1.46.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "hyperdraw" version))
        (sha256
         (base32
-         "1qkxixkgvvfha0ii8rwwcbrbjmbbxsy8afv5ymcq01k3hbykx44r"))))
+         "1lkiqrk01hshms9ghsfynxwj69zr3463r3rg8rn7hkwn3bj8xyzj"))))
     (properties `((upstream-name . "hyperdraw")))
     (build-system r-build-system)
-    (inputs `(("graphviz" ,graphviz)))
+    (inputs (list graphviz))
     (propagated-inputs
-     `(("r-graph" ,r-graph)
-       ("r-hypergraph" ,r-hypergraph)
-       ("r-rgraphviz" ,r-rgraphviz)))
+     (list r-graph r-hypergraph r-rgraphviz))
     (home-page "https://bioconductor.org/packages/hyperdraw")
     (synopsis "Visualizing hypergraphs")
     (description
@@ -11314,23 +11676,23 @@ manipulating hypergraphs.")
 (define-public r-biggr
   (package
     (name "r-biggr")
-    (version "1.28.0")
+    (version "1.30.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "BiGGR" version))
        (sha256
         (base32
-         "1y9659pxm65w51zvrz36girb3qvfc64zijjkxmg6xn4pbc8vv1wf"))))
+         "1g01666wwznk148776s4vr1hfi3dfl448dhgk4d1qy2wv6sxh9kr"))))
     (properties `((upstream-name . "BiGGR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-hyperdraw" ,r-hyperdraw)
-       ("r-hypergraph" ,r-hypergraph)
-       ("r-lim" ,r-lim)
-       ("r-limsolve" ,r-limsolve)
-       ("r-rsbml" ,r-rsbml)
-       ("r-stringr" ,r-stringr)))
+     (list r-hyperdraw
+           r-hypergraph
+           r-lim
+           r-limsolve
+           r-rsbml
+           r-stringr))
     (home-page "https://bioconductor.org/packages/BiGGR/")
     (synopsis "Constraint based modeling using metabolic reconstruction databases")
     (description
@@ -11356,9 +11718,9 @@ networks and estimated fluxes can be visualized with hypergraphs.")
      `((upstream-name . "bigmemoryExtras")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bigmemory" ,r-bigmemory)))
+     (list r-bigmemory))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/phaverty/bigmemoryExtras")
     (synopsis "Extension of the bigmemory package")
     (description
@@ -11378,37 +11740,37 @@ a file-backed matrix with factor properties.")
 (define-public r-bigpint
   (package
     (name "r-bigpint")
-    (version "1.8.0")
+    (version "1.10.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "bigPint" version))
        (sha256
         (base32
-         "0yrg9x1a92zmz7j5hk77cph1jg82mkpr7k7qi9fdr6z5nqq6fgz6"))))
+         "0b0l0v9p7a5da3x18d0pqn41ilgxfyzapjaawgsshcfm5mjq5d7q"))))
     (properties `((upstream-name . "bigPint")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-delayedarray" ,r-delayedarray)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ggally" ,r-ggally)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-hexbin" ,r-hexbin)
-       ("r-hmisc" ,r-hmisc)
-       ("r-htmlwidgets" ,r-htmlwidgets)
-       ("r-plotly" ,r-plotly)
-       ("r-plyr" ,r-plyr)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-reshape" ,r-reshape)
-       ("r-shiny" ,r-shiny)
-       ("r-shinycssloaders" ,r-shinycssloaders)
-       ("r-shinydashboard" ,r-shinydashboard)
-       ("r-stringr" ,r-stringr)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-tidyr" ,r-tidyr)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-delayedarray
+           r-dplyr
+           r-ggally
+           r-ggplot2
+           r-gridextra
+           r-hexbin
+           r-hmisc
+           r-htmlwidgets
+           r-plotly
+           r-plyr
+           r-rcolorbrewer
+           r-reshape
+           r-shiny
+           r-shinycssloaders
+           r-shinydashboard
+           r-stringr
+           r-summarizedexperiment
+           r-tidyr))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/lindsayrutter/bigPint")
     (synopsis "Big multivariate data plotted interactively")
     (description
@@ -11421,32 +11783,34 @@ visualizing RNA-sequencing datasets and differentially expressed genes.")
 (define-public r-chemminer
   (package
     (name "r-chemminer")
-    (version "3.44.0")
+    (version "3.46.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "ChemmineR" version))
        (sha256
         (base32
-         "1z59npqk7hnqzhjdnry6lfqlyxfzwqprp7bmbdzs4rp22pzcv1v8"))))
+         "069xd7if7fs69afmamgl6wrkzpnk97ic6z5ix4vvlzkb078dm0p8"))))
     (properties `((upstream-name . "ChemmineR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-base64enc" ,r-base64enc)
-       ("r-bh" ,r-bh)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-dbi" ,r-dbi)
-       ("r-digest" ,r-digest)
-       ("r-dt" ,r-dt)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-png" ,r-png)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcurl" ,r-rcurl)
-       ("r-rjson" ,r-rjson)
-       ("r-rsvg" ,r-rsvg)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-base64enc
+           r-bh
+           r-biocgenerics
+           r-dbi
+           r-digest
+           r-dt
+           r-ggplot2
+           r-gridextra
+           r-jsonlite
+           r-png
+           r-rcpp
+           r-rcurl
+           r-rjson
+           r-rsvg
+           r-stringi))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/girke-lab/ChemmineR")
     (synopsis "Cheminformatics toolkit for R")
     (description
@@ -11459,29 +11823,58 @@ visualization functions for compound clustering results and chemical
 structures.")
     (license license:artistic2.0)))
 
+(define-public r-fmcsr
+  (package
+    (name "r-fmcsr")
+    (version "1.36.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (bioconductor-uri "fmcsR" version))
+        (sha256
+          (base32 "0mshslfj7jsix1yc03s54spbbi56zspic49kfsjfv8npikj1i5w0"))))
+    (properties `((upstream-name . "fmcsR")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-biocgenerics r-chemminer r-runit))
+    (native-inputs (list r-knitr))
+    (home-page "https://github.com/girke-lab/fmcsR")
+    (synopsis "Mismatch tolerant maximum common substructure searching")
+    (description
+     "The fmcsR package introduces an efficient @dfn{maximum common
+substructure} (MCS) algorithms combined with a novel matching strategy that
+allows for atom and/or bond mismatches in the substructures shared among two
+small molecules.  The resulting flexible MCSs (FMCSs) are often larger than
+strict MCSs, resulting in the identification of more common features in their
+source structures, as well as a higher sensitivity in finding compounds with
+weak structural similarities.  The fmcsR package provides several utilities to
+use the FMCS algorithm for pairwise compound comparisons, structure similarity
+searching and clustering.")
+    (license license:artistic2.0)))
+
 (define-public r-bioassayr
   (package
     (name "r-bioassayr")
-    (version "1.30.0")
+    (version "1.32.1")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "bioassayR" version))
        (sha256
         (base32
-         "1mlv80w8a7l8cii3dfqvanvh0qdqvcg8c1iiq4xlyvkjxfs64ka1"))))
+         "0pa8d7p9asp36wddkg779i3b9m12rxik56c54bmclnammr0cz89i"))))
     (properties `((upstream-name . "bioassayR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-chemminer" ,r-chemminer)
-       ("r-dbi" ,r-dbi)
-       ("r-matrix" ,r-matrix)
-       ("r-rjson" ,r-rjson)
-       ("r-rsqlite" ,r-rsqlite)
-       ("r-xml" ,r-xml)))
+     (list r-biocgenerics
+           r-chemminer
+           r-dbi
+           r-matrix
+           r-rjson
+           r-rsqlite
+           r-xml))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/girke-lab/bioassayR")
     (synopsis "Cross-target analysis of small molecule bioactivity")
     (description
@@ -11497,23 +11890,20 @@ available bioactivity data.")
 (define-public r-biobroom
   (package
     (name "r-biobroom")
-    (version "1.24.0")
+    (version "1.26.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "biobroom" version))
        (sha256
         (base32
-         "1ybyhmrcvj6k1laxw9bc8jbn533frkzh9k8kl1ibd5pi368rfqzn"))))
+         "034gbywrscv23kk1qnk7sc7dxdckmf60wh29fz65v1n28mkf180r"))))
     (properties `((upstream-name . "biobroom")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-broom" ,r-broom)
-       ("r-dplyr" ,r-dplyr)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-biobase r-broom r-dplyr r-tidyr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/StoreyLab/biobroom")
     (synopsis "Turn Bioconductor objects into tidy data frames")
     (description
@@ -11529,24 +11919,18 @@ visualize bioinformatics analyses.")
 (define-public r-graphite
   (package
     (name "r-graphite")
-    (version "1.38.0")
+    (version "1.40.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "graphite" version))
        (sha256
         (base32
-         "11bgz6951nfygxp3fm0190gf2bb5zplis1bc0am4757liw4qybhf"))))
+         "0wmdv4j6dinszxwpz2jddshkh1ahbhm2fxh6vhjsk4grw38i1lfr"))))
     (properties `((upstream-name . "graphite")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-checkmate" ,r-checkmate)
-       ("r-graph" ,r-graph)
-       ("r-httr" ,r-httr)
-       ("r-rappdirs" ,r-rappdirs)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-annotationdbi r-checkmate r-graph r-httr r-rappdirs))
     (home-page "https://bioconductor.org/packages/graphite/")
     (synopsis "Networks from pathway databases")
     (description
@@ -11558,27 +11942,27 @@ symbols).")
 (define-public r-reactomepa
   (package
     (name "r-reactomepa")
-    (version "1.36.0")
+    (version "1.38.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "ReactomePA" version))
        (sha256
         (base32
-         "1293z89ai766c559axgr7mz5x4564gyl9xqzf6s8s0aj1xb35gqf"))))
+         "1f4kd5cql7knnqaq3ba48kkypw8p60lkfdsnpqxcabdj30gqp55b"))))
     (properties `((upstream-name . "ReactomePA")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-dose" ,r-dose)
-       ("r-enrichplot" ,r-enrichplot)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggraph" ,r-ggraph)
-       ("r-graphite" ,r-graphite)
-       ("r-igraph" ,r-igraph)
-       ("r-reactome-db" ,r-reactome-db)))
+     (list r-annotationdbi
+           r-dose
+           r-enrichplot
+           r-ggplot2
+           r-ggraph
+           r-graphite
+           r-igraph
+           r-reactome-db))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://guangchuangyu.github.io/software/ReactomePA")
     (synopsis "Reactome pathway analysis")
     (description
@@ -11590,20 +11974,18 @@ enrichment analysis and several functions for visualization.")
 (define-public r-ebarrays
   (package
     (name "r-ebarrays")
-    (version "2.56.0")
+    (version "2.58.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "EBarrays" version))
        (sha256
         (base32
-         "1k1kl0m7wzaqpv7i20pfav2a6jf93bhri4w7qdikmvkf011n9422"))))
+         "10dw6c93rmpknzf4cnhw3y7lb27q4xq7x7wirl2a7qywdj0yj2g6"))))
     (properties `((upstream-name . "EBarrays")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-cluster" ,r-cluster)
-       ("r-lattice" ,r-lattice)))
+     (list r-biobase r-cluster r-lattice))
     (home-page "https://bioconductor.org/packages/EBarrays/")
     (synopsis "Gene clustering and differential expression identification")
     (description
@@ -11625,7 +12007,7 @@ microarray data.")
     (properties
      `((upstream-name . "BiocCaseStudies")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-biobase" ,r-biobase)))
+    (propagated-inputs (list r-biobase))
     (home-page "https://bioconductor.org/packages/BiocCaseStudies")
     (synopsis "Support for the case studies monograph")
     (description
@@ -11636,27 +12018,27 @@ monograph.")
 (define-public r-bioccheck
   (package
     (name "r-bioccheck")
-    (version "1.28.0")
+    (version "1.30.0")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "BiocCheck" version))
               (sha256
                (base32
-                "1h0l5w33c9jpc20pynq634qmx8jbfa802d7jslmf4haljmrxm4a1"))))
+                "0w9ddicyp9i8rxf92n9pghd9s6bb8jdjikaylrmkydhb7jbhan0y"))))
     (properties
      `((upstream-name . "BiocCheck")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-codetools" ,r-codetools)
-       ("r-graph" ,r-graph)
-       ("r-httr" ,r-httr)
-       ("r-knitr" ,r-knitr)
-       ("r-optparse" ,r-optparse)
-       ("r-biocmanager" ,r-biocmanager)
-       ("r-biocviews" ,r-biocviews)
-       ("r-stringdist" ,r-stringdist)))
+     (list r-codetools
+           r-graph
+           r-httr
+           r-knitr
+           r-optparse
+           r-biocmanager
+           r-biocviews
+           r-stringdist))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/BiocCheck")
     (synopsis "Executes Bioconductor-specific package checks")
     (description "This package contains tools to perform additional quality
@@ -11666,21 +12048,18 @@ checks on R packages that are to be submitted to the Bioconductor repository.")
 (define-public r-biocgraph
   (package
     (name "r-biocgraph")
-    (version "1.54.0")
+    (version "1.56.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "biocGraph" version))
        (sha256
         (base32
-         "12bmj9kdlylp02cfwviak7y323ndccl2694rvi4cdg4vsx7v3ya3"))))
+         "0c7r0c1kx22dlwi6d1ldbkkbf53yi0p3vmgbwzrbkn3cina7bcxq"))))
     (properties `((upstream-name . "biocGraph")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-geneplotter" ,r-geneplotter)
-       ("r-graph" ,r-graph)
-       ("r-rgraphviz" ,r-rgraphviz)))
+     (list r-biocgenerics r-geneplotter r-graph r-rgraphviz))
     (home-page "https://bioconductor.org/packages/biocGraph/")
     (synopsis "Graph examples and use cases in Bioinformatics")
     (description
@@ -11691,24 +12070,20 @@ different graph related packages produced by Bioconductor.")
 (define-public r-biocstyle
   (package
     (name "r-biocstyle")
-    (version "2.20.2")
+    (version "2.22.0")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "BiocStyle" version))
               (sha256
                (base32
-                "0p2wdq5vrx63ndghl9ww428z2lwnv5y88xmcr51by2g6vcj3brcf"))))
+                "0xx6xr01sb5wig94515zxgw24r9fv0g962ajy87741civhq32lbd"))))
     (properties
      `((upstream-name . "BiocStyle")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocmanager" ,r-biocmanager)
-       ("r-bookdown" ,r-bookdown)
-       ("r-knitr" ,r-knitr)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("r-yaml" ,r-yaml)))
+     (list r-biocmanager r-bookdown r-knitr r-rmarkdown r-yaml))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/BiocStyle")
     (synopsis "Bioconductor formatting styles")
     (description "This package provides standard formatting styles for
@@ -11719,24 +12094,24 @@ functionality.")
 (define-public r-biocviews
   (package
     (name "r-biocviews")
-    (version "1.60.0")
+    (version "1.62.1")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "biocViews" version))
               (sha256
                (base32
-                "0pc5ll59vm8a9s1nrdc7p9wk11a52rrz669fsrrqd8qapa8p6wfd"))))
+                "1v6himzp546dpb990vv0nlya21w8x2x30137rsmahjzg942nzs9r"))))
     (properties
      `((upstream-name . "biocViews")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocmanager" ,r-biocmanager)
-       ("r-graph" ,r-graph)
-       ("r-rbgl" ,r-rbgl)
-       ("r-rcurl" ,r-rcurl)
-       ("r-xml" ,r-xml)
-       ("r-runit" ,r-runit)))
+     (list r-biobase
+           r-biocmanager
+           r-graph
+           r-rbgl
+           r-rcurl
+           r-xml
+           r-runit))
     (home-page "https://bioconductor.org/packages/biocViews")
     (synopsis "Bioconductor package categorization helper")
     (description "The purpose of biocViews is to create HTML pages that
@@ -11747,26 +12122,26 @@ also known as views, in a controlled vocabulary.")
 (define-public r-experimenthub
   (package
     (name "r-experimenthub")
-    (version "2.0.0")
+    (version "2.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "ExperimentHub" version))
        (sha256
         (base32
-         "1mzmw3100lf33yhz27nbxncrjk5bprlackrjcwf8xdhcaidg40p4"))))
+         "15las4qmqvrn81hczxa3ylikqh54kp1lg9r8rcyfvrx5l0kgwlfq"))))
     (properties `((upstream-name . "ExperimentHub")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationhub" ,r-annotationhub)
-       ("r-biocfilecache" ,r-biocfilecache)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocmanager" ,r-biocmanager)
-       ("r-curl" ,r-curl)
-       ("r-rappdirs" ,r-rappdirs)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-annotationhub
+           r-biocfilecache
+           r-biocgenerics
+           r-biocmanager
+           r-curl
+           r-rappdirs
+           r-s4vectors))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/ExperimentHub/")
     (synopsis "Client to access ExperimentHub resources")
     (description
@@ -11781,24 +12156,24 @@ access.")
 (define-public r-grohmm
   (package
     (name "r-grohmm")
-    (version "1.26.0")
+    (version "1.28.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "groHMM" version))
        (sha256
         (base32
-         "1h63vg1iskw79ijg5h1b9097ams8pp3kvnlawlfci6xfli07xpkj"))))
+         "1jcj29df4prknqwbydca1jb9w6njacjhwwk9jp0r5mvb88xrm60s"))))
     (properties `((upstream-name . "groHMM")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-mass" ,r-mass)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-genomeinfodb
+           r-genomicalignments
+           r-genomicranges
+           r-iranges
+           r-mass
+           r-rtracklayer
+           r-s4vectors))
     (home-page "https://github.com/Kraus-Lab/groHMM")
     (synopsis "GRO-seq analysis pipeline")
     (description
@@ -11808,27 +12183,27 @@ access.")
 (define-public r-multiassayexperiment
   (package
     (name "r-multiassayexperiment")
-    (version "1.18.0")
+    (version "1.20.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "MultiAssayExperiment" version))
        (sha256
         (base32
-         "0l0arf3q1f6zy6pdgsy3h5n523sg1hlilv7lj7snr5814idgdj51"))))
+         "1h3b8vqlbd04amjprxd1814zksdrbi01a0xn3906vkbqi43hfyn9"))))
     (properties
      `((upstream-name . "MultiAssayExperiment")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-biobase
+           r-biocgenerics
+           r-genomicranges
+           r-iranges
+           r-s4vectors
+           r-summarizedexperiment
+           r-tidyr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://waldronlab.io/MultiAssayExperiment/")
     (synopsis "Integration of multi-omics experiments in Bioconductor")
     (description
@@ -11843,41 +12218,41 @@ rownames.")
 (define-public r-bioconcotk
   (package
     (name "r-bioconcotk")
-    (version "1.12.1")
+    (version "1.14.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "BiocOncoTK" version))
        (sha256
         (base32
-         "1ix09a39z7y2cj0y8qsd66ka8a8y8q79w08l4jv1yhhn9h4va89s"))))
+         "1h5s6wbc5n5x5d28rynxpcmaklxdhf72g9gg9fy8cg77niipvxd9"))))
     (properties `((upstream-name . "BiocOncoTK")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bigrquery" ,r-bigrquery)
-       ("r-car" ,r-car)
-       ("r-complexheatmap" ,r-complexheatmap)
-       ("r-curatedtcgadata" ,r-curatedtcgadata)
-       ("r-dbi" ,r-dbi)
-       ("r-dplyr" ,r-dplyr)
-       ("r-dt" ,r-dt)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggpubr" ,r-ggpubr)
-       ("r-graph" ,r-graph)
-       ("r-httr" ,r-httr)
-       ("r-iranges" ,r-iranges)
-       ("r-magrittr" ,r-magrittr)
-       ("r-plyr" ,r-plyr)
-       ("r-rgraphviz" ,r-rgraphviz)
-       ("r-rjson" ,r-rjson)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-scales" ,r-scales)
-       ("r-shiny" ,r-shiny)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-bigrquery
+           r-car
+           r-complexheatmap
+           r-curatedtcgadata
+           r-dbi
+           r-dplyr
+           r-dt
+           r-genomicfeatures
+           r-genomicranges
+           r-ggplot2
+           r-ggpubr
+           r-graph
+           r-httr
+           r-iranges
+           r-magrittr
+           r-plyr
+           r-rgraphviz
+           r-rjson
+           r-s4vectors
+           r-scales
+           r-shiny
+           r-summarizedexperiment))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/BiocOncoTK")
     (synopsis "Bioconductor components for general cancer genomics")
     (description
@@ -11888,22 +12263,20 @@ tools for genome-scale analysis of cancer studies.")
 (define-public r-biocor
   (package
     (name "r-biocor")
-    (version "1.16.0")
+    (version "1.18.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "BioCor" version))
        (sha256
         (base32
-         "135rga7mwpzy8ypvriqpbmlh9l5yf61s9s1sa9615qfab14jh06b"))))
+         "0ii4g7438lb34ykidkbxw3v3k289k662rgbgayf9gak5avpkb2cq"))))
     (properties `((upstream-name . "BioCor")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocparallel" ,r-biocparallel)
-       ("r-gseabase" ,r-gseabase)
-       ("r-matrix" ,r-matrix)))
+     (list r-biocparallel r-gseabase r-matrix))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://llrs.github.io/BioCor/")
     (synopsis "Functional similarities")
     (description
@@ -11917,41 +12290,41 @@ gene selection, testing relationships, and so on.")
 (define-public r-biocpkgtools
   (package
     (name "r-biocpkgtools")
-    (version "1.10.2")
+    (version "1.12.2")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "BiocPkgTools" version))
        (sha256
         (base32
-         "1sfp1nxlwbbbpx2iwvyk9p10jdy2vxhgn2b5fy5blayzjjlb3d80"))))
+         "1yz2sgx4xrnw22k3d6q6hkj213bnbb4hbr5ymxnmjnsz551s75ny"))))
     (properties `((upstream-name . "BiocPkgTools")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocfilecache" ,r-biocfilecache)
-       ("r-biocmanager" ,r-biocmanager)
-       ("r-biocviews" ,r-biocviews)
-       ("r-dplyr" ,r-dplyr)
-       ("r-dt" ,r-dt)
-       ("r-gh" ,r-gh)
-       ("r-graph" ,r-graph)
-       ("r-htmltools" ,r-htmltools)
-       ("r-htmlwidgets" ,r-htmlwidgets)
-       ("r-httr" ,r-httr)
-       ("r-igraph" ,r-igraph)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-magrittr" ,r-magrittr)
-       ("r-rbgl" ,r-rbgl)
-       ("r-readr" ,r-readr)
-       ("r-rlang" ,r-rlang)
-       ("r-rvest" ,r-rvest)
-       ("r-stringr" ,r-stringr)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)
-       ("r-tidyselect" ,r-tidyselect)
-       ("r-xml2" ,r-xml2)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-biocfilecache
+           r-biocmanager
+           r-biocviews
+           r-dplyr
+           r-dt
+           r-gh
+           r-graph
+           r-htmltools
+           r-htmlwidgets
+           r-httr
+           r-igraph
+           r-jsonlite
+           r-magrittr
+           r-rbgl
+           r-readr
+           r-rlang
+           r-rvest
+           r-stringr
+           r-tibble
+           r-tidyr
+           r-tidyselect
+           r-xml2))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/seandavi/BiocPkgTools")
     (synopsis "Collection of tools for learning about Bioconductor packages")
     (description
@@ -11965,29 +12338,29 @@ analytics on packages.")
 (define-public r-biocset
   (package
     (name "r-biocset")
-    (version "1.6.1")
+    (version "1.8.1")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "BiocSet" version))
        (sha256
         (base32
-         "0nmrg9cgq8l9w467y364jghnvym05abpj8pyj90grmrib2xc5sj2"))))
+         "1x5ar9byr85iap2x6y66j31fi17wr31awx1gl3z01sckp0dldx6w"))))
     (properties `((upstream-name . "BiocSet")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-biocio" ,r-biocio)
-       ("r-dplyr" ,r-dplyr)
-       ("r-keggrest" ,r-keggrest)
-       ("r-ontologyindex" ,r-ontologyindex)
-       ("r-plyr" ,r-plyr)
-       ("r-rlang" ,r-rlang)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-annotationdbi
+           r-biocio
+           r-dplyr
+           r-keggrest
+           r-ontologyindex
+           r-plyr
+           r-rlang
+           r-s4vectors
+           r-tibble
+           r-tidyr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page
      "https://bioconductor.org/packages/BiocSet")
     (synopsis
@@ -12003,29 +12376,29 @@ accessing web references for elements/sets are also available in BiocSet.")
 (define-public r-biocworkflowtools
   (package
     (name "r-biocworkflowtools")
-    (version "1.18.0")
+    (version "1.20.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "BiocWorkflowTools" version))
        (sha256
         (base32
-         "1a32bwgnxaw0gv2gij2p4rm0a6l06jjhidvfz2v4k900pz1w79av"))))
+         "1j9s8w5y8savcmh70npkanxacq1kipxnwk1wsiw5hwnp1p13ldaa"))))
     (properties
      `((upstream-name . "BiocWorkflowTools")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocstyle" ,r-biocstyle)
-       ("r-bookdown" ,r-bookdown)
-       ("r-git2r" ,r-git2r)
-       ("r-httr" ,r-httr)
-       ("r-knitr" ,r-knitr)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("r-rstudioapi" ,r-rstudioapi)
-       ("r-stringr" ,r-stringr)
-       ("r-usethis" ,r-usethis)))
+     (list r-biocstyle
+           r-bookdown
+           r-git2r
+           r-httr
+           r-knitr
+           r-rmarkdown
+           r-rstudioapi
+           r-stringr
+           r-usethis))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/BiocWorkflowTools/")
     (synopsis "Tools to aid the development of Bioconductor Workflow packages")
     (description
@@ -12036,19 +12409,18 @@ Rmarkdown and LaTeX documents when authoring a Bioconductor Workflow.")
 (define-public r-biodist
   (package
     (name "r-biodist")
-    (version "1.64.0")
+    (version "1.66.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "bioDist" version))
        (sha256
         (base32
-         "1y1x9q9aa76gbhsyfn638rxp5icjvq30fv3a4205xh7g5jwlf6yw"))))
+         "0y35c9sdq5x4q64ip0wgqz59mh01l71k1pp6n8vqbr667nwg0gdp"))))
     (properties `((upstream-name . "bioDist")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-kernsmooth" ,r-kernsmooth)))
+     (list r-biobase r-kernsmooth))
     (home-page "https://bioconductor.org/packages/bioDist/")
     (synopsis "Different distance measures")
     (description
@@ -12059,32 +12431,32 @@ distance measures.")
 (define-public r-pcatools
   (package
     (name "r-pcatools")
-    (version "2.4.0")
+    (version "2.6.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "PCAtools" version))
        (sha256
         (base32
-         "11idi9fwvyhkakbm63qxcdhkany8gbskis04z0p5a39lppq8ks31"))))
+         "10kfhsxhsjpzal3yvcqg769h5fz99cqqjq217cj9jip3jfh2m2h4"))))
     (properties `((upstream-name . "PCAtools")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-beachmat" ,r-beachmat)
-       ("r-bh" ,r-bh)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-biocsingular" ,r-biocsingular)
-       ("r-cowplot" ,r-cowplot)
-       ("r-delayedarray" ,r-delayedarray)
-       ("r-delayedmatrixstats" ,r-delayedmatrixstats)
-       ("r-dqrng" ,r-dqrng)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggrepel" ,r-ggrepel)
-       ("r-lattice" ,r-lattice)
-       ("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)
-       ("r-reshape2" ,r-reshape2)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-beachmat
+           r-bh
+           r-biocparallel
+           r-biocsingular
+           r-cowplot
+           r-delayedarray
+           r-delayedmatrixstats
+           r-dqrng
+           r-ggplot2
+           r-ggrepel
+           r-lattice
+           r-matrix
+           r-rcpp
+           r-reshape2))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/kevinblighe/PCAtools")
     (synopsis "PCAtools: everything Principal Components Analysis")
     (description
@@ -12105,23 +12477,19 @@ dimensional mass cytometry data.")
 (define-public r-rgreat
   (package
     (name "r-rgreat")
-    (version "1.24.0")
+    (version "1.26.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "rGREAT" version))
        (sha256
         (base32
-         "0ads9c9i8b39wvjih057zlyivj8zpsqjxf6r97yflz4sbi1jmcji"))))
+         "0kr61mhxp9phn1136fci450zwfhsipchmlm8d5rgib4lh0zbxrhl"))))
     (properties `((upstream-name . "rGREAT")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-genomicranges" ,r-genomicranges)
-       ("r-getoptlong" ,r-getoptlong)
-       ("r-iranges" ,r-iranges)
-       ("r-rcurl" ,r-rcurl)
-       ("r-rjson" ,r-rjson)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-genomicranges r-getoptlong r-iranges r-rcurl r-rjson))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/jokergoo/rGREAT")
     (synopsis "Client for GREAT analysis")
     (description
@@ -12133,28 +12501,28 @@ user's input and automatically retrieving results from GREAT web server.")
 (define-public r-m3c
   (package
     (name "r-m3c")
-    (version "1.14.0")
+    (version "1.16.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "M3C" version))
        (sha256
         (base32
-         "17gj4haa4ywc6bmppm342jzppl3inqa94235yspikij6c098vrmc"))))
+         "0jsql5wd58hs5mnn9wq5b4kl3z57y6amykirfb3k047zpyi8ijnh"))))
     (properties `((upstream-name . "M3C")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cluster" ,r-cluster)
-       ("r-corpcor" ,r-corpcor)
-       ("r-doparallel" ,r-doparallel)
-       ("r-dosnow" ,r-dosnow)
-       ("r-foreach" ,r-foreach)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-matrix" ,r-matrix)
-       ("r-matrixcalc" ,r-matrixcalc)
-       ("r-rtsne" ,r-rtsne)
-       ("r-umap" ,r-umap)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-cluster
+           r-corpcor
+           r-doparallel
+           r-dosnow
+           r-foreach
+           r-ggplot2
+           r-matrix
+           r-matrixcalc
+           r-rtsne
+           r-umap))
+    (native-inputs (list r-knitr))
     (home-page "https://bioconductor.org/packages/M3C")
     (synopsis "Monte Carlo reference-based consensus clustering")
     (description
@@ -12166,18 +12534,18 @@ hypothesis @code{K=1}.")
 (define-public r-icens
   (package
     (name "r-icens")
-    (version "1.64.0")
+    (version "1.66.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "Icens" version))
        (sha256
         (base32
-         "1rzgwxx4w2bqsaz0xmkhi4w9zsxgms80xf59zg1xp1camyhaihlz"))))
+         "08jd7g28mazvwd3qbq8y26czmkz45avp4vy8l7i5d6qajwzqzgzs"))))
     (properties `((upstream-name . "Icens")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-survival" ,r-survival)))
+     (list r-survival))
     (home-page "https://bioconductor.org/packages/Icens")
     (synopsis "NPMLE for censored and truncated data")
     (description
@@ -12191,21 +12559,18 @@ truncated data.")
 (define-public r-interval
   (package
     (name "r-interval")
-    (version "1.1-0.7")
+    (version "1.1-0.8")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "interval" version))
        (sha256
         (base32
-         "1b31lh0sv7lzy76230djipahxa10lblbr37kdiigr6hp3dd1xmz9"))))
+         "0g0k9nri19p3y3s70ic1w3i3sxq8fbsxaikd7c4d6afqzr8hk2nl"))))
     (properties `((upstream-name . "interval")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-icens" ,r-icens)
-       ("r-mlecens" ,r-mlecens)
-       ("r-perm" ,r-perm)
-       ("r-survival" ,r-survival)))
+     (list r-icens r-mlecens r-perm r-survival))
     (home-page "https://cran.r-project.org/web/packages/interval/")
     (synopsis "Weighted Logrank tests and NPMLE for interval censored data")
     (description
@@ -12229,11 +12594,7 @@ plot them, and perform logrank or Wilcoxon type tests.")
     (properties `((upstream-name . "FHtest")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-interval" ,r-interval)
-       ("r-kmsurv" ,r-kmsurv)
-       ("r-mass" ,r-mass)
-       ("r-perm" ,r-perm)
-       ("r-survival" ,r-survival)))
+     (list r-interval r-kmsurv r-mass r-perm r-survival))
     (home-page "https://cran.r-project.org/web/packages/FHtest/")
     (synopsis "Tests for survival data based on the Fleming-Harrington class")
     (description
@@ -12262,23 +12623,23 @@ with:
     (properties `((upstream-name . "FourCSeq")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biostrings" ,r-biostrings)
-       ("r-deseq2" ,r-deseq2)
-       ("r-fda" ,r-fda)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggbio" ,r-ggbio)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gtools" ,r-gtools)
-       ("r-lsd" ,r-lsd)
-       ("r-matrix" ,r-matrix)
-       ("r-reshape2" ,r-reshape2)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-biobase
+           r-biostrings
+           r-deseq2
+           r-fda
+           r-genomicalignments
+           r-genomicranges
+           r-ggbio
+           r-ggplot2
+           r-gtools
+           r-lsd
+           r-matrix
+           r-reshape2
+           r-rsamtools
+           r-rtracklayer
+           r-summarizedexperiment))
+    (native-inputs
+     (list r-knitr))
     (home-page
      "https://bioconductor.org/packages/release/bioc/html/FourCSeq.html")
     (synopsis "Analysis of multiplexed 4C sequencing data")
@@ -12296,14 +12657,14 @@ generated.")
 (define-public r-preprocesscore
   (package
     (name "r-preprocesscore")
-    (version "1.54.0")
+    (version "1.56.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "preprocessCore" version))
        (sha256
         (base32
-         "17a00blz4kvhmsk92bp5alj9kdpy7h1id7nk4vqxakhkb2jabr20"))))
+         "1i93vdqa6pwzamiryp3lv6cyvhx9shs01is0q6vbmdvcbii2vf3x"))))
     (properties
      `((upstream-name . "preprocessCore")))
     (build-system r-build-system)
@@ -12317,18 +12678,18 @@ routines.")
 (define-public r-s4vectors
   (package
     (name "r-s4vectors")
-    (version "0.30.1")
+    (version "0.32.3")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "S4Vectors" version))
               (sha256
                (base32
-                "103sw0fmmm4f3hprrsn7dwg0kmmr9mcmb46dcwwb6p5np0al2sfx"))))
+                "0wp29v41f9cf6khq2ww0f63nsq6219l1ycajzdqp3a2xda734ncw"))))
     (properties
      `((upstream-name . "S4Vectors")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)))
+     (list r-biocgenerics))
     (home-page "https://bioconductor.org/packages/S4Vectors")
     (synopsis "S4 implementation of vectors and lists")
     (description
@@ -12357,18 +12718,18 @@ S4Vectors package itself.")
     (properties `((upstream-name . "WGCNA")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-doparallel" ,r-doparallel)
-       ("r-dynamictreecut" ,r-dynamictreecut)
-       ("r-fastcluster" ,r-fastcluster)
-       ("r-foreach" ,r-foreach)
-       ("r-go-db" ,r-go-db)
-       ("r-hmisc" ,r-hmisc)
-       ("r-impute" ,r-impute)
-       ("r-rcpp" ,r-rcpp)
-       ("r-survival" ,r-survival)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-preprocesscore" ,r-preprocesscore)))
+     (list r-annotationdbi
+           r-doparallel
+           r-dynamictreecut
+           r-fastcluster
+           r-foreach
+           r-go-db
+           r-hmisc
+           r-impute
+           r-rcpp
+           r-survival
+           r-matrixstats
+           r-preprocesscore))
     (home-page
      "http://www.genetics.ucla.edu/labs/horvath/CoexpressionNetwork/Rpackages/WGCNA/")
     (synopsis "Weighted correlation network analysis")
@@ -12384,14 +12745,14 @@ data manipulation and visualization.")
 (define-public r-rgraphviz
   (package
     (name "r-rgraphviz")
-    (version "2.36.0")
+    (version "2.38.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "Rgraphviz" version))
        (sha256
         (base32
-         "0d0xq1vgr4b165cn4wg7zmfjyc1d9ir4amgs196j4cgrhpmrnl8s"))))
+         "0fyv1ybpahkwz3fawzxgxfnshi8y7c18262rgdmqwdl5662vv1p7"))))
     (properties `((upstream-name . "Rgraphviz")))
     (build-system r-build-system)
     (arguments
@@ -12407,11 +12768,11 @@ data manipulation and visualization.")
     ;; FIXME: Rgraphviz bundles the sources of an older variant of
     ;; graphviz.  It does not build with the latest version of graphviz, so
     ;; we do not add graphviz to the inputs.
-    (inputs `(("zlib" ,zlib)))
+    (inputs (list zlib))
     (propagated-inputs
-     `(("r-graph" ,r-graph)))
+     (list r-graph))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://bioconductor.org/packages/Rgraphviz")
     (synopsis "Plotting capabilities for R graph objects")
     (description
@@ -12422,21 +12783,19 @@ objects from the @code{graph} package.")
 (define-public r-fithic
   (package
     (name "r-fithic")
-    (version "1.18.0")
+    (version "1.20.0")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "FitHiC" version))
               (sha256
                (base32
-                "1p8a6lis5yswaj647bjw89harlarnsxmvjzz63fn1l6gxrwhh8bx"))))
+                "0a3d2bxp98lmbf3i864zgfwxwvxyqfcrh75z9yz7ra7y44pkjr4y"))))
     (properties `((upstream-name . "FitHiC")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)
-       ("r-fdrtool" ,r-fdrtool)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-data-table r-fdrtool r-rcpp))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/FitHiC")
     (synopsis "Confidence estimation for intra-chromosomal contact maps")
     (description
@@ -12448,23 +12807,23 @@ assays such as Hi-C.")
 (define-public r-hitc
   (package
     (name "r-hitc")
-    (version "1.36.0")
+    (version "1.38.0")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "HiTC" version))
               (sha256
                (base32
-                "0s3kfqs3zlmq61hxdmxpmi9gfs9w3byckw7xzp1hrhdbsl46yvgq"))))
+                "1ckiwqfq86k8p3y36iwr7k3y6g4z80n8hb047c0i2491lrn23rhx"))))
     (properties `((upstream-name . "HiTC")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biostrings" ,r-biostrings)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-matrix" ,r-matrix)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rtracklayer" ,r-rtracklayer)))
+     (list r-biostrings
+           r-genomeinfodb
+           r-genomicranges
+           r-iranges
+           r-matrix
+           r-rcolorbrewer
+           r-rtracklayer))
     (home-page "https://bioconductor.org/packages/HiTC")
     (synopsis "High throughput chromosome conformation capture analysis")
     (description
@@ -12477,27 +12836,27 @@ provided.")
 (define-public r-hdf5array
   (package
     (name "r-hdf5array")
-    (version "1.20.0")
+    (version "1.22.1")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "HDF5Array" version))
        (sha256
         (base32
-         "1718hplz5qlbwxwb87509bl7lir9kilvn1s7p2haz551pg48zvrc"))))
+         "1al4a88pgdl7hfhphsnwl1gg1c1kmw37wcdr4v4pfsw5l8ff7nx4"))))
     (properties `((upstream-name . "HDF5Array")))
     (build-system r-build-system)
     (inputs
-     `(("zlib" ,zlib)))
-    (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-delayedarray" ,r-delayedarray)
-       ("r-iranges" ,r-iranges)
-       ("r-matrix" ,r-matrix)
-       ("r-rhdf5" ,r-rhdf5)
-       ("r-rhdf5filters" ,r-rhdf5filters)
-       ("r-rhdf5lib" ,r-rhdf5lib)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list zlib))
+    (propagated-inputs
+     (list r-biocgenerics
+           r-delayedarray
+           r-iranges
+           r-matrix
+           r-rhdf5
+           r-rhdf5filters
+           r-rhdf5lib
+           r-s4vectors))
     (home-page "https://bioconductor.org/packages/HDF5Array")
     (synopsis "HDF5 back end for DelayedArray objects")
     (description "This package provides an array-like container for convenient
@@ -12508,14 +12867,14 @@ block processing.")
 (define-public r-rhdf5lib
   (package
     (name "r-rhdf5lib")
-    (version "1.14.2")
+    (version "1.16.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "Rhdf5lib" version))
        (sha256
         (base32
-         "1cwynbcaaxmbh45fc0d264liqdj0wbjlj7k2bsq3qfjbnh6kkam5"))
+         "0yly9s3wdnhd9ci2jxfkql38ibv35yzs38a6g6ashbg1m5kgwd9p"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -12577,8 +12936,7 @@ block processing.")
                  (("cp \"\\$\\{SZIP_LIB\\}.*") "")
                  (("PKG_LIBS =.*") "PKG_LIBS = -lz -lhdf5\n"))))))))
     (propagated-inputs
-     `(("hdf5" ,hdf5-1.10)
-       ("zlib" ,zlib)))
+     (list hdf5-1.10 zlib))
     (native-inputs
      `(("hdf5-source" ,(package-source hdf5-1.10))
        ("r-knitr" ,r-knitr)))
@@ -12591,22 +12949,19 @@ packages.")
 (define-public r-beachmat
   (package
     (name "r-beachmat")
-    (version "2.8.1")
+    (version "2.10.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "beachmat" version))
        (sha256
         (base32
-         "06bpfpddsl49csxrs8hlx5pv0absc2wdcparchf8qqaqydazwci2"))))
+         "1l8c9q35mf90ckb366bcfqa0v2gw7ahs2h362j7cwv8fp39h4mpb"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-delayedarray" ,r-delayedarray)
-       ("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-biocgenerics r-delayedarray r-matrix r-rcpp))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/beachmat")
     (synopsis "Compiling Bioconductor to handle each matrix type")
     (description "This package provides a consistent C++ class interface for a
@@ -12620,38 +12975,38 @@ matrices.")
 (define-public r-cner
   (package
     (name "r-cner")
-    (version "1.28.0")
+    (version "1.30.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "CNEr" version))
        (sha256
-        (base32 "13w0gsfm7k29dp5nb0c9sb2ix506ph6dixsjis6xxcz6acq7lg2k"))))
+        (base32 "0w4iqmyyhsb6l9bi8c6qwdh4j6z2i1i5fi85ia9069fpl9d0hpl2"))))
     (properties `((upstream-name . "CNEr")))
     (build-system r-build-system)
-    (inputs `(("zlib" ,zlib)))
-    (propagated-inputs
-     `(("r-annotate" ,r-annotate)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biostrings" ,r-biostrings)
-       ("r-dbi" ,r-dbi)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-go-db" ,r-go-db)
-       ("r-iranges" ,r-iranges)
-       ("r-keggrest" ,r-keggrest)
-       ("r-powerlaw" ,r-powerlaw)
-       ("r-r-utils" ,r-r-utils)
-       ("r-readr" ,r-readr)
-       ("r-reshape2" ,r-reshape2)
-       ("r-rsqlite" ,r-rsqlite)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-xvector" ,r-xvector)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+    (inputs (list zlib))
+    (propagated-inputs
+     (list r-annotate
+           r-biocgenerics
+           r-biostrings
+           r-dbi
+           r-genomeinfodb
+           r-genomicalignments
+           r-genomicranges
+           r-ggplot2
+           r-go-db
+           r-iranges
+           r-keggrest
+           r-powerlaw
+           r-r-utils
+           r-readr
+           r-reshape2
+           r-rsqlite
+           r-rtracklayer
+           r-s4vectors
+           r-xvector))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/ge11232002/CNEr")
     (synopsis "CNE Detection and Visualization")
     (description
@@ -12668,38 +13023,38 @@ advanced visualization of sets of conserved noncoding elements.")
 (define-public r-tfbstools
   (package
     (name "r-tfbstools")
-    (version "1.30.0")
+    (version "1.32.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "TFBSTools" version))
        (sha256
         (base32
-         "1avgjv2nyr28cla0z9dvh3v0hr1f561sz2as1k53a42irbjk0var"))))
+         "0j5gv145fczzdspwhbywlg47y05pgnkra9jg7bn4wa1k0cf5pr9g"))))
     (properties `((upstream-name . "TFBSTools")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-biostrings" ,r-biostrings)
-       ("r-bsgenome" ,r-bsgenome)
-       ("r-catools" ,r-catools)
-       ("r-cner" ,r-cner)
-       ("r-dbi" ,r-dbi)
-       ("r-dirichletmultinomial" ,r-dirichletmultinomial)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-gtools" ,r-gtools)
-       ("r-iranges" ,r-iranges)
-       ("r-rsqlite" ,r-rsqlite)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-seqlogo" ,r-seqlogo)
-       ("r-tfmpvalue" ,r-tfmpvalue)
-       ("r-xml" ,r-xml)
-       ("r-xvector" ,r-xvector)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-biobase
+           r-biocgenerics
+           r-biocparallel
+           r-biostrings
+           r-bsgenome
+           r-catools
+           r-cner
+           r-dbi
+           r-dirichletmultinomial
+           r-genomeinfodb
+           r-genomicranges
+           r-gtools
+           r-iranges
+           r-rsqlite
+           r-rtracklayer
+           r-s4vectors
+           r-seqlogo
+           r-tfmpvalue
+           r-xml
+           r-xvector))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/ge11232002/TFBSTools")
     (synopsis "Transcription factor binding site (TFBS) analysis")
     (description
@@ -12711,33 +13066,57 @@ scan putative TFBS from sequence/alignment, query JASPAR database and
 provides a wrapper of de novo motif discovery software.")
     (license license:gpl2)))
 
+(define-public r-maftools
+  (package
+    (name "r-maftools")
+    (version "2.10.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (bioconductor-uri "maftools" version))
+       (sha256
+        (base32 "1s8w3xwwigz803l81bs9cb2dbvvw5r9z8jjcav1rmh9wm8909nfd"))))
+    (properties `((upstream-name . "maftools")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-data-table r-rcolorbrewer r-rhtslib r-survival r-zlibbioc))
+    (native-inputs (list r-knitr))
+    (home-page "https://github.com/PoisonAlien/maftools")
+    (synopsis "Summarize, analyze and visualize MAF files")
+    (description
+     "Analyze and visualize Mutation Annotation Format (MAF) files from large
+scale sequencing studies.  This package provides various functions to perform
+most commonly used analyses in cancer genomics and to create feature rich
+customizable visualzations with minimal effort.")
+    (license license:expat)))
+
 (define-public r-motifmatchr
   (package
     (name "r-motifmatchr")
-    (version "1.14.0")
+    (version "1.16.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "motifmatchr" version))
        (sha256
         (base32
-         "1vif3dp4lv4jz1pxsq0ig791ir8q65jmrlqmkyfxpfxfj5alqnbm"))))
+         "0f7j54zdn51h1gcn81vqs8avmschjwqprjcfpvsi00q4fna3fg7z"))))
     (properties `((upstream-name . "motifmatchr")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biostrings" ,r-biostrings)
-       ("r-bsgenome" ,r-bsgenome)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-tfbstools" ,r-tfbstools)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-biostrings
+           r-bsgenome
+           r-genomeinfodb
+           r-genomicranges
+           r-iranges
+           r-matrix
+           r-rcpp
+           r-rcpparmadillo
+           r-rsamtools
+           r-s4vectors
+           r-summarizedexperiment
+           r-tfbstools))
+    (native-inputs (list r-knitr))
     (home-page "https://bioconductor.org/packages/motifmatchr")
     (synopsis "Fast motif matching in R")
     (description
@@ -12748,39 +13127,39 @@ This package wraps C++ code from the MOODS motif calling library.")
 (define-public r-chromvar
   (package
     (name "r-chromvar")
-    (version "1.14.0")
+    (version "1.16.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "chromVAR" version))
        (sha256
-        (base32 "1birmwvcvl2hb5ygbsb3wvbdfayqqs53j1bks46cbkq7ybigfyar"))))
+        (base32 "0ylsfr540l763bh010irbcavlskahyb1769pppimdgn22gyr3spk"))))
     (properties `((upstream-name . "chromVAR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-biostrings" ,r-biostrings)
-       ("r-bsgenome" ,r-bsgenome)
-       ("r-dt" ,r-dt)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-iranges" ,r-iranges)
-       ("r-matrix" ,r-matrix)
-       ("r-miniui" ,r-miniui)
-       ("r-nabor" ,r-nabor)
-       ("r-plotly" ,r-plotly)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-rtsne" ,r-rtsne)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-shiny" ,r-shiny)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-tfbstools" ,r-tfbstools)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-biocgenerics
+           r-biocparallel
+           r-biostrings
+           r-bsgenome
+           r-dt
+           r-genomeinfodb
+           r-genomicranges
+           r-ggplot2
+           r-iranges
+           r-matrix
+           r-miniui
+           r-nabor
+           r-plotly
+           r-rcolorbrewer
+           r-rcpp
+           r-rcpparmadillo
+           r-rsamtools
+           r-rtsne
+           r-s4vectors
+           r-shiny
+           r-summarizedexperiment
+           r-tfbstools))
+    (native-inputs (list r-knitr))
     (home-page "https://bioconductor.org/packages/release/bioc/html/chromVAR.html")
     (synopsis "Determine chromatin variation across regions")
     (description
@@ -12795,25 +13174,22 @@ sequence (@code{DNAse-seq}) experiments.")
 (define-public r-singlecellexperiment
   (package
     (name "r-singlecellexperiment")
-    (version "1.14.1")
+    (version "1.16.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "SingleCellExperiment" version))
        (sha256
         (base32
-         "1bwdhx0ss0s8f4xdgwd7x48apn849x4dyb5hbyglcz31r5vh1qgz"))))
+         "01075vbs8hy399pxalav9rbkz4djvl84ip559jkz51fypd0m4i39"))))
     (properties
      `((upstream-name . "SingleCellExperiment")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-delayedarray" ,r-delayedarray)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
+     (list r-biocgenerics r-delayedarray r-genomicranges r-s4vectors
+           r-summarizedexperiment))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/SingleCellExperiment")
     (synopsis "S4 classes for single cell data")
     (description "This package defines an S4 class for storing data from
@@ -12823,32 +13199,64 @@ factors for each cell, along with the usual metadata for genes and
 libraries.")
     (license license:gpl3)))
 
+(define-public r-singler
+  (package
+    (name "r-singler")
+    (version "1.8.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (bioconductor-uri "SingleR" version))
+       (sha256
+        (base32 "19lsn3cpghkhfbx4jqgbwwrnacrl7vj3r91ymd1gk02c9pn5dmci"))))
+    (properties `((upstream-name . "SingleR")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-beachmat
+           r-biocneighbors
+           r-biocparallel
+           r-biocsingular
+           r-delayedarray
+           r-delayedmatrixstats
+           r-matrix
+           r-rcpp
+           r-s4vectors
+           r-summarizedexperiment))
+    (native-inputs (list r-knitr))
+    (home-page "https://github.com/LTLA/SingleR")
+    (synopsis "Reference-based single-cell RNA-seq annotation")
+    (description
+     "This package performs unbiased cell type recognition from single-cell
+RNA sequencing data, by leveraging reference transcriptomic datasets of pure
+cell types to infer the cell of origin of each single cell independently.")
+    (license license:gpl3)))
+
 (define-public r-scuttle
   (package
     (name "r-scuttle")
-    (version "1.2.1")
+    (version "1.4.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "scuttle" version))
        (sha256
         (base32
-         "015k879gg2r39lp6mz26jwmysa56k0ial6v74zzmbi8hnz9zic3i"))))
+         "1dbdb6yc6wk01dljy1vy6f0lf44crc5rxxnc4bhjk8i4iljz8467"))))
     (properties `((upstream-name . "scuttle")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-beachmat" ,r-beachmat)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-delayedarray" ,r-delayedarray)
-       ("r-delayedmatrixstats" ,r-delayedmatrixstats)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-singlecellexperiment" ,r-singlecellexperiment)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-beachmat
+           r-biocgenerics
+           r-biocparallel
+           r-delayedarray
+           r-delayedmatrixstats
+           r-genomicranges
+           r-matrix
+           r-rcpp
+           r-s4vectors
+           r-singlecellexperiment
+           r-summarizedexperiment))
+    (native-inputs (list r-knitr))
     (home-page "https://bioconductor.org/packages/scuttle")
     (synopsis "Single-cell RNA-Seq analysis utilities")
     (description
@@ -12861,36 +13269,37 @@ of other packages.")
 (define-public r-scater
   (package
     (name "r-scater")
-    (version "1.20.1")
+    (version "1.22.0")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "scater" version))
               (sha256
                (base32
-                "1046fgf93dda3y2z5ilrjdczz7klj67ag63p4p1h03965wpj9vfn"))))
-    (build-system r-build-system)
-    (propagated-inputs
-     `(("r-beachmat" ,r-beachmat)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocneighbors" ,r-biocneighbors)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-biocsingular" ,r-biocsingular)
-       ("r-delayedarray" ,r-delayedarray)
-       ("r-delayedmatrixstats" ,r-delayedmatrixstats)
-       ("r-ggbeeswarm" ,r-ggbeeswarm)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-matrix" ,r-matrix)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rlang" ,r-rlang)
-       ("r-rtsne" ,r-rtsne)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-scuttle" ,r-scuttle)
-       ("r-singlecellexperiment" ,r-singlecellexperiment)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-viridis" ,r-viridis)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+                "0k4i9pwmwxcr5a40ljl27wriccwn5vc52xy48yjjh8ppl5dbggdg"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-beachmat
+           r-biocgenerics
+           r-biocneighbors
+           r-biocparallel
+           r-biocsingular
+           r-delayedarray
+           r-delayedmatrixstats
+           r-ggbeeswarm
+           r-ggplot2
+           r-ggrepel
+           r-gridextra
+           r-matrix
+           r-rcolorbrewer
+           r-rlang
+           r-rtsne
+           r-s4vectors
+           r-scuttle
+           r-singlecellexperiment
+           r-summarizedexperiment
+           r-viridis))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/davismcc/scater")
     (synopsis "Single-cell analysis toolkit for gene expression data in R")
     (description "This package provides a collection of tools for doing
@@ -12901,38 +13310,38 @@ quality control.")
 (define-public r-scran
   (package
     (name "r-scran")
-    (version "1.20.1")
+    (version "1.22.1")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "scran" version))
        (sha256
         (base32
-         "0ilzp6ngw9pq88gk79iic2zxfh5jaic6lnq3xfwc9a269bjylff0"))))
-    (build-system r-build-system)
-    (propagated-inputs
-     `(("r-beachmat" ,r-beachmat)
-       ("r-bh" ,r-bh)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-biocsingular" ,r-biocsingular)
-       ("r-bluster" ,r-bluster)
-       ("r-delayedarray" ,r-delayedarray)
-       ("r-delayedmatrixstats" ,r-delayedmatrixstats)
-       ("r-dqrng" ,r-dqrng)
-       ("r-edger" ,r-edger)
-       ("r-igraph" ,r-igraph)
-       ("r-limma" ,r-limma)
-       ("r-matrix" ,r-matrix)
-       ("r-metapod" ,r-metapod)
-       ("r-rcpp" ,r-rcpp)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-scuttle" ,r-scuttle)
-       ("r-singlecellexperiment" ,r-singlecellexperiment)
-       ("r-statmod" ,r-statmod)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+         "06lcxya6rpa8dv0il7m7fwyx0ci1y1jn16ff5lmvzf2mnr6q7lic"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-beachmat
+           r-bh
+           r-biocgenerics
+           r-biocparallel
+           r-biocsingular
+           r-bluster
+           r-delayedarray
+           r-delayedmatrixstats
+           r-dqrng
+           r-edger
+           r-igraph
+           r-limma
+           r-matrix
+           r-metapod
+           r-rcpp
+           r-s4vectors
+           r-scuttle
+           r-singlecellexperiment
+           r-statmod
+           r-summarizedexperiment))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/scran")
     (synopsis "Methods for single-cell RNA-Seq data analysis")
     (description "This package implements a variety of low-level analyses of
@@ -12944,23 +13353,20 @@ variable and significantly correlated genes.")
 (define-public r-sparsematrixstats
   (package
     (name "r-sparsematrixstats")
-    (version "1.4.2")
+    (version "1.6.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "sparseMatrixStats" version))
        (sha256
         (base32
-         "0b22kzg751zlkcbs8pi0bcqrsj3imsg35qfvxfrqb7gav7qznc8v"))))
+         "0ifqj4a6mn4749sr62gq3dwd6mmbbzdx5mh5b5663vcgl1kw96x1"))))
     (properties
      `((upstream-name . "sparseMatrixStats")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-matrix" ,r-matrix)
-       ("r-matrixgenerics" ,r-matrixgenerics)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-rcpp" ,r-rcpp)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-matrix r-matrixgenerics r-matrixstats r-rcpp))
+    (native-inputs (list r-knitr))
     (home-page "https://bioconductor.org/packages/sparseMatrixStats/")
     (synopsis "Summary statistics for rows and columns of sparse matrices")
     (description
@@ -12972,27 +13378,27 @@ data in the column sparse format.")
 (define-public r-delayedmatrixstats
   (package
     (name "r-delayedmatrixstats")
-    (version "1.14.3")
+    (version "1.16.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "DelayedMatrixStats" version))
        (sha256
         (base32
-         "1zxs2wjnsq9w1cl4andsd7y9xsdnl1an55khw9viaq758m7hhbcn"))))
+         "1pqwkk39rfhcnhmgchk0gfmm4jgasl19yq0nhhwsfj45y2vk6kjk"))))
     (properties
      `((upstream-name . "DelayedMatrixStats")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-delayedarray" ,r-delayedarray)
-       ("r-iranges" ,r-iranges)
-       ("r-matrix" ,r-matrix)
-       ("r-matrixgenerics" ,r-matrixgenerics)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-sparsematrixstats" ,r-sparsematrixstats)))
+     (list r-delayedarray
+           r-iranges
+           r-matrix
+           r-matrixgenerics
+           r-matrixstats
+           r-s4vectors
+           r-sparsematrixstats))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/PeteHaitch/DelayedMatrixStats")
     (synopsis "Functions that apply to rows and columns of DelayedMatrix objects")
     (description
@@ -13008,23 +13414,20 @@ memory usage and processing time is minimized.")
 (define-public r-mscoreutils
   (package
     (name "r-mscoreutils")
-    (version "1.4.0")
+    (version "1.6.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "MsCoreUtils" version))
        (sha256
         (base32
-         "13g8a726vsyjs6m1kd42vf8avdnmhykxhl6z3j2njzkp2jg17pd8"))))
+         "1w8d1v2r3plwwcz23zhbpvklhapf2a6x3xmglyh4sh6sy9ynkgrv"))))
     (properties `((upstream-name . "MsCoreUtils")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-clue" ,r-clue)
-       ("r-mass" ,r-mass)
-       ("r-rcpp" ,r-rcpp)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-clue r-mass r-rcpp r-s4vectors))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/RforMassSpectrometry/MsCoreUtils")
     (synopsis "Core utils for mass spectrometry data")
     (description
@@ -13037,24 +13440,53 @@ well as misc helper functions, that are used across high-level data structure
 within the R for Mass Spectrometry packages.")
     (license license:artistic2.0)))
 
+(define-public r-msfeatures
+  (package
+    (name "r-msfeatures")
+    (version "1.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (bioconductor-uri "MsFeatures" version))
+       (sha256
+        (base32 "020ifrijlzdd3qk4bhd9z4knj5d87ildrkl3wcmxvwkvs9rbh8rq"))))
+    (properties `((upstream-name . "MsFeatures")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-mscoreutils r-protgenerics r-summarizedexperiment))
+    (native-inputs
+     (list r-knitr))
+    (home-page "https://github.com/RforMassSpectrometry/MsFeatures")
+    (synopsis "Functionality for mass spectrometry features")
+    (description
+     "The MsFeature package defines functionality for Mass Spectrometry
+features.  This includes functions to group (LC-MS) features based on some of
+their properties, such as retention time (coeluting features), or correlation
+of signals across samples.  This package hence can be used to group features, and
+its results can be used as an input for the @code{QFeatures} package which
+allows aggregating abundance levels of features within each group.  This
+package defines concepts and functions for base and common data types,
+implementations for more specific data types are expected to be implemented in
+the respective packages (such as e.g. @code{xcms}).")
+    (license license:artistic2.0)))
+
 (define-public r-biocio
   (package
     (name "r-biocio")
-    (version "1.2.0")
+    (version "1.4.0")
     (source
       (origin
         (method url-fetch)
         (uri (bioconductor-uri "BiocIO" version))
         (sha256
           (base32
-            "0skwnpxl6fkqihidpqrfzzh7b05x11j6jwkiinmhggmv0ggjb5ph"))))
+            "1qg6v961sbj7qwyjx4z720f6h0kq693p7gc8q99my7gqkbbcxrfr"))))
     (properties `((upstream-name . "BiocIO")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-biocgenerics r-s4vectors))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/BiocIO")
     (synopsis "Standard input and output for Bioconductor packages")
     (description
@@ -13074,21 +13506,18 @@ as well as local access.  Developers can register a file extension, e.g.,
 (define-public r-msmseda
   (package
     (name "r-msmseda")
-    (version "1.30.0")
+    (version "1.32.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "msmsEDA" version))
        (sha256
         (base32
-         "0555a3riyp781mlffmnf93igfq8vl8wjk51pa9qb48qkdn6y8pfc"))))
+         "1jammjkjjkcqad2ki02l2pdf4jybyh71hv463aya2ylmzsin5vi9"))))
     (properties `((upstream-name . "msmsEDA")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-gplots" ,r-gplots)
-       ("r-mass" ,r-mass)
-       ("r-msnbase" ,r-msnbase)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)))
+     (list r-gplots r-mass r-msnbase r-rcolorbrewer))
     (home-page
      "https://bioconductor.org/packages/msmsEDA")
     (synopsis "Exploratory data analysis of LC-MS/MS data by spectral counts")
@@ -13100,21 +13529,18 @@ experiments, and visualize de influence of the involved factors.")
 (define-public r-msmstests
   (package
     (name "r-msmstests")
-    (version "1.30.0")
+    (version "1.32.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "msmsTests" version))
        (sha256
         (base32
-         "11vhy1l6za73dpdj85q4ksaghgd8vb2h8v9iirmsn2vpajqrvgjh"))))
+         "0xmjgd8rqpb8i7d46pvnj7da2di8bwfdncr48b8hgylkc98ghznb"))))
     (properties `((upstream-name . "msmsTests")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-edger" ,r-edger)
-       ("r-msmseda" ,r-msmseda)
-       ("r-msnbase" ,r-msnbase)
-       ("r-qvalue" ,r-qvalue)))
+     (list r-edger r-msmseda r-msnbase r-qvalue))
     (home-page
      "https://bioconductor.org/packages/msmsTests")
     (synopsis "Differential LC-MS/MS expression tests")
@@ -13132,45 +13558,45 @@ relevant, and the minimum expression of the most abundant condition.")
 (define-public r-catalyst
   (package
     (name "r-catalyst")
-    (version "1.16.2")
+    (version "1.18.0")
     (source
       (origin
         (method url-fetch)
         (uri (bioconductor-uri "CATALYST" version))
         (sha256
           (base32
-            "1vw8x54hwgcyn29k81zcvawawy2iy2qgp49gjpb830q04gx6yc6h"))))
+            "15lah45lf16zh1ankbpjvz8zp38lldvq074nmvb99rhhqys2gbgi"))))
     (properties `((upstream-name . "CATALYST")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-circlize" ,r-circlize)
-        ("r-complexheatmap" ,r-complexheatmap)
-        ("r-consensusclusterplus" ,r-consensusclusterplus)
-        ("r-cowplot" ,r-cowplot)
-        ("r-data-table" ,r-data-table)
-        ("r-dplyr" ,r-dplyr)
-        ("r-drc" ,r-drc)
-        ("r-flowcore" ,r-flowcore)
-        ("r-flowsom" ,r-flowsom)
-        ("r-ggplot2" ,r-ggplot2)
-        ("r-ggrepel" ,r-ggrepel)
-        ("r-ggridges" ,r-ggridges)
-        ("r-gridextra" ,r-gridextra)
-        ("r-magrittr" ,r-magrittr)
-        ("r-matrix" ,r-matrix)
-        ("r-matrixstats" ,r-matrixstats)
-        ("r-nnls" ,r-nnls)
-        ("r-purrr" ,r-purrr)
-        ("r-rcolorbrewer" ,r-rcolorbrewer)
-        ("r-reshape2" ,r-reshape2)
-        ("r-rtsne" ,r-rtsne)
-        ("r-s4vectors" ,r-s4vectors)
-        ("r-scales" ,r-scales)
-        ("r-scater" ,r-scater)
-        ("r-singlecellexperiment" ,r-singlecellexperiment)
-        ("r-summarizedexperiment" ,r-summarizedexperiment)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+      (list r-circlize
+            r-complexheatmap
+            r-consensusclusterplus
+            r-cowplot
+            r-data-table
+            r-dplyr
+            r-drc
+            r-flowcore
+            r-flowsom
+            r-ggplot2
+            r-ggrepel
+            r-ggridges
+            r-gridextra
+            r-magrittr
+            r-matrix
+            r-matrixstats
+            r-nnls
+            r-purrr
+            r-rcolorbrewer
+            r-reshape2
+            r-rtsne
+            r-s4vectors
+            r-scales
+            r-scater
+            r-singlecellexperiment
+            r-summarizedexperiment))
+    (native-inputs
+     (list r-knitr))
     (home-page
       "https://github.com/HelenaLC/CATALYST")
     (synopsis "Cytometry data analysis tools")
@@ -13190,32 +13616,32 @@ standards, ii) single-cell deconvolution, and iii) bead-based compensation.")
 (define-public r-erma
   (package
     (name "r-erma")
-    (version "1.8.0")
+    (version "1.10.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "erma" version))
        (sha256
         (base32
-         "02a9702sasgighwb0f9ii8n30ngfx1hjnppaay1f5zsigr8vqalz"))))
+         "0pb9ar1wy613vg6sfdmn8n4cfv1328m8bagnigsjdb3hc3hbir4z"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicfiles" ,r-genomicfiles)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-homo-sapiens" ,r-homo-sapiens)
-       ("r-iranges" ,r-iranges)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-shiny" ,r-shiny)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
+     (list r-annotationdbi
+           r-biobase
+           r-biocgenerics
+           r-biocparallel
+           r-genomeinfodb
+           r-genomicfiles
+           r-genomicranges
+           r-ggplot2
+           r-homo-sapiens
+           r-iranges
+           r-rtracklayer
+           r-s4vectors
+           r-shiny
+           r-summarizedexperiment))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/erma")
     (synopsis "Epigenomic road map adventures")
     (description
@@ -13230,14 +13656,14 @@ by Ernst and Kellis.")
 (define-public r-ggbio
   (package
     (name "r-ggbio")
-    (version "1.40.0")
+    (version "1.42.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "ggbio" version))
        (sha256
         (base32
-         "0k3dxacrwgyrkvm7ggc2s1s1pbfs6c0a7ngykkj7jnc73czvnilx"))))
+         "1svmjaa3gisi39sl52337drvd54havcy5pjmwrykgykz5flid2m7"))))
     (build-system r-build-system)
     (arguments
      `(#:phases
@@ -13250,35 +13676,35 @@ by Ernst and Kellis.")
                (("fechable") "fetchable"))
              #t)))))
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-annotationfilter" ,r-annotationfilter)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biostrings" ,r-biostrings)
-       ("r-biovizbase" ,r-biovizbase)
-       ("r-bsgenome" ,r-bsgenome)
-       ("r-ensembldb" ,r-ensembldb)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggally" ,r-ggally)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-gtable" ,r-gtable)
-       ("r-hmisc" ,r-hmisc)
-       ("r-iranges" ,r-iranges)
-       ("r-organismdbi" ,r-organismdbi)
-       ("r-reshape2" ,r-reshape2)
-       ("r-rlang" ,r-rlang)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-scales" ,r-scales)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-variantannotation" ,r-variantannotation)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-annotationdbi
+           r-annotationfilter
+           r-biobase
+           r-biocgenerics
+           r-biostrings
+           r-biovizbase
+           r-bsgenome
+           r-ensembldb
+           r-genomeinfodb
+           r-genomicalignments
+           r-genomicfeatures
+           r-genomicranges
+           r-ggally
+           r-ggplot2
+           r-gridextra
+           r-gtable
+           r-hmisc
+           r-iranges
+           r-organismdbi
+           r-reshape2
+           r-rlang
+           r-rsamtools
+           r-rtracklayer
+           r-s4vectors
+           r-scales
+           r-summarizedexperiment
+           r-variantannotation))
+    (native-inputs
+     (list r-knitr))
     (home-page "http://www.tengfei.name/ggbio/")
     (synopsis "Visualization tools for genomic data")
     (description
@@ -13316,21 +13742,21 @@ interval to data view, mismatch pileup, and several splicing summaries.")
                (("importFrom\\(ff,.*") "import(ff)\n"))
              #t)))))
     (propagated-inputs
-     `(("r-batchjobs" ,r-batchjobs)
-       ("r-bbmisc" ,r-bbmisc)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-bit" ,r-bit)
-       ("r-doparallel" ,r-doparallel)
-       ("r-ff" ,r-ff)
-       ("r-ffbase" ,r-ffbase)
-       ("r-foreach" ,r-foreach)
-       ("r-genomicfiles" ,r-genomicfiles)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-batchjobs
+           r-bbmisc
+           r-biocgenerics
+           r-bit
+           r-doparallel
+           r-ff
+           r-ffbase
+           r-foreach
+           r-genomicfiles
+           r-genomicranges
+           r-rtracklayer
+           r-s4vectors
+           r-summarizedexperiment))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/gQTLBase")
     (synopsis "Infrastructure for eQTL, mQTL and similar studies")
     (description
@@ -13353,38 +13779,38 @@ and more.")
     (properties `((upstream-name . "gQTLstats")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-batchjobs" ,r-batchjobs)
-       ("r-bbmisc" ,r-bbmisc)
-       ("r-beeswarm" ,r-beeswarm)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-doparallel" ,r-doparallel)
-       ("r-dplyr" ,r-dplyr)
-       ("r-erma" ,r-erma)
-       ("r-ffbase" ,r-ffbase)
-       ("r-foreach" ,r-foreach)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicfiles" ,r-genomicfiles)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggbeeswarm" ,r-ggbeeswarm)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gqtlbase" ,r-gqtlbase)
-       ("r-hardyweinberg" ,r-hardyweinberg)
-       ("r-homo-sapiens" ,r-homo-sapiens)
-       ("r-iranges" ,r-iranges)
-       ("r-limma" ,r-limma)
-       ("r-mgcv" ,r-mgcv)
-       ("r-plotly" ,r-plotly)
-       ("r-reshape2" ,r-reshape2)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-shiny" ,r-shiny)
-       ("r-snpstats" ,r-snpstats)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-variantannotation" ,r-variantannotation)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-annotationdbi
+           r-batchjobs
+           r-bbmisc
+           r-beeswarm
+           r-biobase
+           r-biocgenerics
+           r-doparallel
+           r-dplyr
+           r-erma
+           r-ffbase
+           r-foreach
+           r-genomeinfodb
+           r-genomicfeatures
+           r-genomicfiles
+           r-genomicranges
+           r-ggbeeswarm
+           r-ggplot2
+           r-gqtlbase
+           r-hardyweinberg
+           r-homo-sapiens
+           r-iranges
+           r-limma
+           r-mgcv
+           r-plotly
+           r-reshape2
+           r-s4vectors
+           r-shiny
+           r-snpstats
+           r-summarizedexperiment
+           r-variantannotation))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/gQTLstats")
     (synopsis "Computationally efficient analysis for eQTL and allied studies")
     (description
@@ -13398,41 +13824,41 @@ family of feature/genome hypotheses.")
 (define-public r-gviz
   (package
     (name "r-gviz")
-    (version "1.36.2")
+    (version "1.38.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "Gviz" version))
        (sha256
         (base32
-         "0lp0k8jd4dfsfn10706124graaqnzcyv1siblvm8dn2ykw2rc6vl"))))
+         "0nqa7m300d7gpsayb6c6rv64d3y8c390wvwgz7v29zs9c025s9a8"))))
     (properties `((upstream-name . "Gviz")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biomart" ,r-biomart)
-       ("r-biostrings" ,r-biostrings)
-       ("r-biovizbase" ,r-biovizbase)
-       ("r-bsgenome" ,r-bsgenome)
-       ("r-digest" ,r-digest)
-       ("r-ensembldb" ,r-ensembldb)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-lattice" ,r-lattice)
-       ("r-latticeextra" ,r-latticeextra)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-xvector" ,r-xvector)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-annotationdbi
+           r-biobase
+           r-biocgenerics
+           r-biomart
+           r-biostrings
+           r-biovizbase
+           r-bsgenome
+           r-digest
+           r-ensembldb
+           r-genomeinfodb
+           r-genomicalignments
+           r-genomicfeatures
+           r-genomicranges
+           r-iranges
+           r-lattice
+           r-latticeextra
+           r-matrixstats
+           r-rcolorbrewer
+           r-rsamtools
+           r-rtracklayer
+           r-s4vectors
+           r-xvector))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/Gviz")
     (synopsis "Plotting data and annotation information along genomic coordinates")
     (description
@@ -13447,30 +13873,30 @@ with your data.")
 (define-public r-gwascat
   (package
     (name "r-gwascat")
-    (version "2.24.0")
+    (version "2.26.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "gwascat" version))
        (sha256
         (base32
-         "0109cxsviq1sk5hfwkjzd0y1kpm934287asjjd0j8jhh4b0ah2b2"))))
+         "0s67jgk3gnfiyfjwhq4r5xlfnip29blis4fg75kn4qmvjv5j2pxx"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-annotationhub" ,r-annotationhub)
-       ("r-biocfilecache" ,r-biocfilecache)
-       ("r-biostrings" ,r-biostrings)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-readr" ,r-readr)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-snpstats" ,r-snpstats)
-       ("r-variantannotation" ,r-variantannotation)))
+     (list r-annotationdbi
+           r-annotationhub
+           r-biocfilecache
+           r-biostrings
+           r-genomeinfodb
+           r-genomicfeatures
+           r-genomicranges
+           r-iranges
+           r-readr
+           r-s4vectors
+           r-snpstats
+           r-variantannotation))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/gwascat")
     (synopsis "Tools for data in the EMBL-EBI GWAS catalog")
     (description
@@ -13481,20 +13907,17 @@ EMBL-EBI GWAS catalog.")
 (define-public r-kegggraph
   (package
     (name "r-kegggraph")
-    (version "1.52.0")
+    (version "1.54.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "KEGGgraph" version))
        (sha256
-        (base32 "0zxdph5hzr3kzj2g1mjqpiviwa189a5sq4bw7wiry6r79fdnklqs"))))
+        (base32 "1qqvbv1sq9j570syb2802ya2ffg1k8f1w986wr6ksqkwxb9qbbm4"))))
     (properties `((upstream-name . "KEGGgraph")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-graph" ,r-graph)
-       ("r-rcurl" ,r-rcurl)
-       ("r-rgraphviz" ,r-rgraphviz)
-       ("r-xml" ,r-xml)))
+     (list r-graph r-rcurl r-rgraphviz r-xml))
     (home-page "https://bioconductor.org/packages/KEGGgraph")
     (synopsis "Graph approach to Kegg Pathway database in R and Bioconductor")
     (description
@@ -13508,28 +13931,28 @@ functionalities including parsing, graph operation, visualization and etc.")
 (define-public r-ldblock
   (package
     (name "r-ldblock")
-    (version "1.22.1")
+    (version "1.24.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "ldblock" version))
        (sha256
         (base32
-         "16vp5psmigxdkkd6fbivb6s8mvd7rsnm771wsbjvayl2y7ig7kq4"))))
+         "1v9b372d5hpwwik6956mfwc9b3bibygz042i4nydsklnbwm5vcmg"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-ensdb-hsapiens-v75" ,r-ensdb-hsapiens-v75)
-       ("r-ensembldb" ,r-ensembldb)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicfiles" ,r-genomicfiles)
-       ("r-httr" ,r-httr)
-       ("r-matrix" ,r-matrix)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-snpstats" ,r-snpstats)
-       ("r-variantannotation" ,r-variantannotation)))
+     (list r-biocgenerics
+           r-ensdb-hsapiens-v75
+           r-ensembldb
+           r-genomeinfodb
+           r-genomicfiles
+           r-httr
+           r-matrix
+           r-rsamtools
+           r-snpstats
+           r-variantannotation))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/ldblock")
     (synopsis "Data structures for linkage disequilibrium measures in populations")
     (description
@@ -13555,9 +13978,7 @@ defining LD blocks.")
     (properties `((upstream-name . "LDheatmap")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-genetics" ,r-genetics)
-       ("r-rcpp" ,r-rcpp)
-       ("r-snpstats" ,r-snpstats)))
+     (list r-genetics r-rcpp r-snpstats))
     (home-page "https://stat.sfu.ca/statgen/research/ldheatmap.html")
     (synopsis "Graphical display of pairwise linkage disequilibria between SNPs")
     (description
@@ -13572,24 +13993,26 @@ on the plot.")
 (define-public r-abn
   (package
     (name "r-abn")
-    (version "2.5-0")
+    (version "2.6-0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "abn" version))
        (sha256
         (base32
-         "1fqmhw0mhdl6az1gpg0byvx5snhz1pl3fqikhyfjcjrc9xbsq8yw"))))
+         "0fr5pyc43hly5ry5bbygibbh9mnql7vl4r5qz42d0ry4hahyxa4w"))))
     (build-system r-build-system)
     (inputs
-     `(("gsl" ,gsl)))
-    (propagated-inputs
-     `(("r-lme4" ,r-lme4)
-       ("r-nnet" ,r-nnet)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-rgraphviz" ,r-rgraphviz)
-       ("r-rjags" ,r-rjags)))
+     (list gsl))
+    (propagated-inputs
+     (list r-doparallel
+           r-foreach
+           r-lme4
+           r-nnet
+           r-rcpp
+           r-rcpparmadillo
+           r-rgraphviz
+           r-rjags))
     (home-page "https://r-bayesian-networks.org/")
     (synopsis "Modelling multivariate data with additive bayesian networks")
     (description
@@ -13619,12 +14042,9 @@ statistical dependencies in messy, complex data.")
                 "08zxxgyp0h6733b08jmml7k4rhfd3mi5dda3jrzid0s184y0z29w"))))
     (build-system r-build-system)
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (propagated-inputs
-     `(("r-bh" ,r-bh)
-       ("r-catools" ,r-catools)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rsamtools" ,r-rsamtools)))
+     (list r-bh r-catools r-rcpp r-rsamtools))
     (home-page "https://cran.r-project.org/web/packages/spp/")
     (synopsis "ChIP-Seq processing pipeline")
     (description "This package provides tools for analysis of ChIP-seq and
@@ -13634,24 +14054,24 @@ other functional sequencing data.")
 (define-public r-pathview
   (package
     (name "r-pathview")
-    (version "1.32.0")
+    (version "1.34.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "pathview" version))
        (sha256
-        (base32 "1fank0qavv9ikmzxvms8mky2wbzny02rfqkvsqzma26r3vl4r1g1"))))
+        (base32 "1jdl81lvrsz03b1nws90nssf2clipipzaqvwm1pq57mvshnlnkjr"))))
     (properties `((upstream-name . "pathview")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-graph" ,r-graph)
-       ("r-kegggraph" ,r-kegggraph)
-       ("r-keggrest" ,r-keggrest)
-       ("r-org-hs-eg-db" ,r-org-hs-eg-db)
-       ("r-png" ,r-png)
-       ("r-rgraphviz" ,r-rgraphviz)
-       ("r-xml" ,r-xml)))
+     (list r-annotationdbi
+           r-graph
+           r-kegggraph
+           r-keggrest
+           r-org-hs-eg-db
+           r-png
+           r-rgraphviz
+           r-xml))
     (home-page "https://pathview.uncc.edu/")
     (synopsis "Tool set for pathway based data integration and visualization")
     (description
@@ -13668,22 +14088,19 @@ large-scale and fully automated analysis.")
 (define-public r-snpstats
   (package
     (name "r-snpstats")
-    (version "1.42.0")
+    (version "1.44.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "snpStats" version))
        (sha256
         (base32
-         "11vvih5y9kvyjfp2navkfpp4xiyfgwlv4r0x3p52hkj92pc2pg3g"))))
+         "0ha34b5cg26940xihgky45adns1nflrgq2qjq77w4bncxpaacsqq"))))
     (properties `((upstream-name . "snpStats")))
     (build-system r-build-system)
-    (inputs `(("zlib" ,zlib)))
+    (inputs (list zlib))
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-matrix" ,r-matrix)
-       ("r-survival" ,r-survival)
-       ("r-zlibbioc" ,r-zlibbioc)))
+     (list r-biocgenerics r-matrix r-survival r-zlibbioc))
     (home-page "https://bioconductor.org/packages/snpStats")
     (synopsis "Methods for SNP association studies")
     (description
@@ -13695,32 +14112,32 @@ the earlier snpMatrix package, allowing for uncertainty in genotypes.")
 (define-public r-chromstar
   (package
     (name "r-chromstar")
-    (version "1.18.0")
+    (version "1.20.2")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "chromstaR" version))
        (sha256
         (base32
-         "09cqzylci4x4i7wn4ckcqhdlljbzfrp08wdvkkc5vrdldnj9pq5h"))))
+         "1akcmxzn4j9ph4n3lsgfh8fh8hrb28jjamz037w59bsdkcv6wyjq"))))
     (properties `((upstream-name . "chromstaR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bamsignals" ,r-bamsignals)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-chromstardata" ,r-chromstardata)
-       ("r-doparallel" ,r-doparallel)
-       ("r-foreach" ,r-foreach)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-iranges" ,r-iranges)
-       ("r-mvtnorm" ,r-mvtnorm)
-       ("r-reshape2" ,r-reshape2)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-s4vectors" ,r-s4vectors)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-bamsignals
+           r-biocgenerics
+           r-chromstardata
+           r-doparallel
+           r-foreach
+           r-genomeinfodb
+           r-genomicalignments
+           r-genomicranges
+           r-ggplot2
+           r-iranges
+           r-mvtnorm
+           r-reshape2
+           r-rsamtools
+           r-s4vectors))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/ataudt/chromstaR")
     (synopsis "Chromatin state analysis for ChIP-Seq data")
     (description
@@ -13733,27 +14150,27 @@ analyses.")
 (define-public r-guitar
   (package
     (name "r-guitar")
-    (version "2.8.0")
+    (version "2.10.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "Guitar" version))
        (sha256
         (base32
-         "1q4m6c5181dw12lvdp324jlk78c9jgcsg6b9hk87zjadp6j0gfr6"))))
+         "082yja4mmsq77sllv3c88agxjbb6jxwil2krb8fkfsijvyyx11c9"))))
     (properties `((upstream-name . "Guitar")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-dplyr" ,r-dplyr)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-knitr" ,r-knitr)
-       ("r-magrittr" ,r-magrittr)
-       ("r-rtracklayer" ,r-rtracklayer)))
+     (list r-annotationdbi
+           r-dplyr
+           r-genomicfeatures
+           r-genomicranges
+           r-ggplot2
+           r-knitr
+           r-magrittr
+           r-rtracklayer))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/Guitar")
     (synopsis "Visualize genomic features")
     (description
@@ -13765,18 +14182,17 @@ starting site, start codon, stop codon and transcription ending site.")
 (define-public r-sushi
   (package
     (name "r-sushi")
-    (version "1.30.0")
+    (version "1.32.0")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "Sushi" version))
               (sha256
                (base32
-                "1m5l0nflhcynb3gz7b8qzvknb0s6xhds8z1yl3mbv8ic9qn2knv4"))))
+                "073mh1d063ph5zk1d8kipgblr4l1ixqbxflhq4669761fi2frlw4"))))
     (properties `((upstream-name . "Sushi")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biomart" ,r-biomart)
-       ("r-zoo" ,r-zoo)))
+     (list r-biomart r-zoo))
     (home-page "https://bioconductor.org/packages/Sushi")
     (synopsis "Tools for visualizing genomics data")
     (description
@@ -13787,28 +14203,28 @@ visualizations for publication-quality multi-panel figures.")
 (define-public r-ballgown
   (package
     (name "r-ballgown")
-    (version "2.24.0")
+    (version "2.26.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "ballgown" version))
        (sha256
         (base32
-         "0ff8z4pfgzai2q4aafclg36bhsi9jwl9xhh1p9fqhmikisscq7i1"))))
+         "0fiky82arvgzgxrm4bqn74m5kngqpdaqf6ks4cr89nlnhfq0v6rf"))))
     (properties `((upstream-name . "ballgown")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-limma" ,r-limma)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-sva" ,r-sva)))
+     (list r-biobase
+           r-genomeinfodb
+           r-genomicranges
+           r-iranges
+           r-limma
+           r-rcolorbrewer
+           r-rtracklayer
+           r-s4vectors
+           r-sva))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/ballgown")
     (synopsis "Flexible, isoform-level differential expression analysis")
     (description
@@ -13821,27 +14237,27 @@ to annotation.")
 (define-public r-megadepth
   (package
     (name "r-megadepth")
-    (version "1.2.3")
+    (version "1.4.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "megadepth" version))
        (sha256
         (base32
-         "0grgj7bzyqnxby0sx5ic1h9bzmx19xwl0a5b3v6wbnwqcla2i3kg"))))
+         "0mg7n3990qv65rg624473ssccka0yjpgc20glrdc5saci891j44r"))))
     (properties `((upstream-name . "megadepth")))
     (build-system r-build-system)
-    (inputs `(("megadepth" ,megadepth)))
+    (inputs (list megadepth))
     (propagated-inputs
-     `(("r-cmdfun" ,r-cmdfun)
-       ("r-dplyr" ,r-dplyr)
-       ("r-fs" ,r-fs)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-magrittr" ,r-magrittr)
-       ("r-readr" ,r-readr)
-       ("r-xfun" ,r-xfun)))
+     (list r-cmdfun
+           r-dplyr
+           r-fs
+           r-genomicranges
+           r-magrittr
+           r-readr
+           r-xfun))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/LieberInstitute/megadepth")
     (synopsis "BigWig and BAM related utilities")
     (description
@@ -13854,27 +14270,27 @@ regions or annotations of your choice from BigWig files.")
 (define-public r-beclear
   (package
     (name "r-beclear")
-    (version "2.8.0")
+    (version "2.10.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "BEclear" version))
        (sha256
         (base32
-         "0w18livng2gcmjgvws7pix3gsnj237rs34sgwxsfmn8p5vfx8b30"))))
+         "1njb1lfd4wmsrfw06jc8z8vdk14nmcw9lwyvbxr7z1zg4h8v6c29"))))
     (properties `((upstream-name . "BEclear")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-abind" ,r-abind)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-data-table" ,r-data-table)
-       ("r-futile-logger" ,r-futile-logger)
-       ("r-matrix" ,r-matrix)
-       ("r-outliers" ,r-outliers)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rdpack" ,r-rdpack)))
+     (list r-abind
+           r-biocparallel
+           r-data-table
+           r-futile-logger
+           r-matrix
+           r-outliers
+           r-rcpp
+           r-rdpack))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/uds-helms/BEclear")
     (synopsis "Correction of batch effects in DNA methylation data")
     (description
@@ -13887,34 +14303,34 @@ real numbers.")
 (define-public r-bgeecall
   (package
     (name "r-bgeecall")
-    (version "1.8.0")
+    (version "1.10.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "BgeeCall" version))
        (sha256
         (base32
-         "1byciy7vzbdkdgaim10s9qb7zlxsywbhcsrka31gm0rm9ljqc665"))))
+         "0rbbl8m48qcvl26lnf27jq108p7pi84m9ac3qcpjc0ax5wywbv16"))))
     (properties `((upstream-name . "BgeeCall")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("kallisto" ,kallisto)
-       ("r-biomart" ,r-biomart)
-       ("r-biostrings" ,r-biostrings)
-       ("r-data-table" ,r-data-table)
-       ("r-dplyr" ,r-dplyr)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-rhdf5" ,r-rhdf5)
-       ("r-rslurm" ,r-rslurm)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-sjmisc" ,r-sjmisc)
-       ("r-tximport" ,r-tximport)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list kallisto
+           r-biomart
+           r-biostrings
+           r-data-table
+           r-dplyr
+           r-genomicfeatures
+           r-jsonlite
+           r-rhdf5
+           r-rslurm
+           r-rtracklayer
+           r-sjmisc
+           r-tximport))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/BgeeDB/BgeeCall")
     (synopsis "RNA-Seq present/absent gene expression calls generation")
     (description
-     "BgeeCall allows to generate present/absent gene expression calls without
+     "BgeeCall allows generating present/absent gene expression calls without
 using an arbitrary cutoff like TPM<1.  Calls are generated based on reference
 intergenic sequences.  These sequences are generated based on expression of
 all RNA-Seq libraries of each species integrated in Bgee.")
@@ -13923,29 +14339,29 @@ all RNA-Seq libraries of each species integrated in Bgee.")
 (define-public r-bgeedb
   (package
     (name "r-bgeedb")
-    (version "2.18.1")
+    (version "2.20.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "BgeeDB" version))
        (sha256
         (base32
-         "1ziq180yfpdqwhjdzkwjjhwzn3kb0gkj6q0a26c7a30mcfb50w11"))))
+         "0pjymal01sjl5dc37g66wykgxnksarlbvwnbvhg7w0i7y92zavqk"))))
     (properties `((upstream-name . "BgeeDB")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-curl" ,r-curl)
-       ("r-data-table" ,r-data-table)
-       ("r-digest" ,r-digest)
-       ("r-dplyr" ,r-dplyr)
-       ("r-graph" ,r-graph)
-       ("r-r-utils" ,r-r-utils)
-       ("r-rcurl" ,r-rcurl)
-       ("r-rsqlite" ,r-rsqlite)
-       ("r-tidyr" ,r-tidyr)
-       ("r-topgo" ,r-topgo)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-biobase
+           r-curl
+           r-data-table
+           r-digest
+           r-dplyr
+           r-graph
+           r-r-utils
+           r-rcurl
+           r-rsqlite
+           r-tidyr
+           r-topgo))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/BgeeDB/BgeeDB_R")
     (synopsis "Annotation and gene expression data retrieval from Bgee database")
     (description
@@ -13957,22 +14373,19 @@ anatomical terms, mapped to genes by expression patterns.")
 (define-public r-biobtreer
   (package
     (name "r-biobtreer")
-    (version "1.4.0")
+    (version "1.6.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "biobtreeR" version))
        (sha256
         (base32
-         "0pynx4ps1qxsn13ba6zyg6h5dqlp2y7qish67m7sdjns079zh061"))))
+         "0m9gx2g5ishbbh7aqp09mpknhr7q1v5ap0s6xp6ccj01pz2gkk8s"))))
     (properties `((upstream-name . "biobtreeR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-httpuv" ,r-httpuv)
-       ("r-httr" ,r-httr)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-stringi" ,r-stringi)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-httpuv r-httr r-jsonlite r-stringi))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/tamerh/biobtreeR")
     (synopsis "Use biobtree tool from R")
     (description
@@ -13984,18 +14397,18 @@ mappings functionalities.")
 (define-public r-minet
   (package
     (name "r-minet")
-    (version "3.50.0")
+    (version "3.52.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "minet" version))
        (sha256
         (base32
-         "0bir2zr4r2wawkdvdhrk2hcyxmgkrkfvx36jj85fcm24axlqrzzb"))))
+         "0nhgvgci4r9pjfsnvxyj2q8im1wvig4zmfx2kidw8f63x2ip2rbd"))))
     (properties `((upstream-name . "minet")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-infotheo" ,r-infotheo)))
+     (list r-infotheo))
     (home-page "http://minet.meyerp.com")
     (synopsis "Mutual information networks")
     (description
@@ -14006,22 +14419,19 @@ information networks from data.")
 (define-public r-genetclassifier
   (package
     (name "r-genetclassifier")
-    (version "1.32.0")
+    (version "1.34.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "geNetClassifier" version))
        (sha256
         (base32
-         "1i1cavbbvxzqgqxfmikghnls18jrq12hb953mjrwa95lkhzdxm2d"))))
+         "1phyphdc1i55ab1a05633b0p41q8n7w0byp1plgcav2s3h8mk1km"))))
     (properties
      `((upstream-name . "geNetClassifier")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-e1071" ,r-e1071)
-       ("r-ebarrays" ,r-ebarrays)
-       ("r-minet" ,r-minet)))
+     (list r-biobase r-e1071 r-ebarrays r-minet))
     (home-page "https://www.cicancer.org")
     (synopsis "Classify diseases and build gene networks using expression profiles")
     (description
@@ -14034,18 +14444,18 @@ interface to query the classifier.")
 (define-public r-dir-expiry
   (package
     (name "r-dir-expiry")
-    (version "1.0.0")
+    (version "1.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "dir.expiry" version))
        (sha256
         (base32
-         "05mk7iwzay1xrgvssbz7nyl5d1n03syalbk18lmjmbx05dy0cjik"))))
+         "1bwmlxmizhmim2l0mk406hxfr5mnmsg5zbqkjyygaipa971m9s00"))))
     (properties `((upstream-name . "dir.expiry")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-filelock" ,r-filelock)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+    (propagated-inputs (list r-filelock))
+    (native-inputs (list r-knitr))
     (home-page "https://bioconductor.org/packages/dir.expiry")
     (synopsis "Managing expiration for cache directories")
     (description
@@ -14058,20 +14468,20 @@ eliminating obsolete caches generated by old versions of packages.")
 (define-public r-basilisk-utils
   (package
     (name "r-basilisk-utils")
-    (version "1.4.0")
+    (version "1.6.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "basilisk.utils" version))
        (sha256
         (base32
-         "0qbm6rj6h059hakflbwz4j4f59311jhbk5dnpx11kyixh5pgjk7v"))))
+         "0578rq2yz24sv7anb7vp0a0y35944ag1l8ca6haanb03wl97wm99"))))
     (properties
      `((upstream-name . "basilisk.utils")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dir-expiry" ,r-dir-expiry)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-dir-expiry))
+    (native-inputs (list r-knitr))
     (home-page "https://bioconductor.org/packages/basilisk.utils")
     (synopsis "Basilisk installation utilities")
     (description
@@ -14082,21 +14492,19 @@ package, primarily for creation of the underlying Conda instance.")
 (define-public r-basilisk
   (package
     (name "r-basilisk")
-    (version "1.4.0")
+    (version "1.6.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "basilisk" version))
        (sha256
         (base32
-         "1nzbn3f2jzvg3a3m6wgksi4cvamqas2q7csdk4ir7fcirasf536v"))))
+         "1cdkpngv9qybd9yxc3i2201p433vkkahs71v28x6lgs5l2wz3m1a"))))
     (properties `((upstream-name . "basilisk")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-basilisk-utils" ,r-basilisk-utils)
-       ("r-dir-expiry" ,r-dir-expiry)
-       ("r-reticulate" ,r-reticulate)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-basilisk-utils r-dir-expiry r-reticulate))
+    (native-inputs (list r-knitr))
     (home-page "https://bioconductor.org/packages/basilisk")
     (synopsis "Freeze Python dependencies inside Bioconductor packages")
     (description
@@ -14110,24 +14518,29 @@ Python environments in a single R session.")
 (define-public r-biocthis
   (package
     (name "r-biocthis")
-    (version "1.2.0")
+    (version "1.4.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "biocthis" version))
        (sha256
         (base32
-         "08awghsg7q22csb0j9dr8dpb1vkn9gcs9qnhhljxifkw2ahbqia4"))))
+         "0kh5lmv992v4r5r58x29403cll0zxr9fx4ar81nrzvnch5668v39"))))
     (properties `((upstream-name . "biocthis")))
     (build-system r-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'set-HOME
+           (lambda _ (setenv "HOME" "/tmp"))))))
     (propagated-inputs
-     `(("r-biocmanager" ,r-biocmanager)
-       ("r-fs" ,r-fs)
-       ("r-glue" ,r-glue)
-       ("r-rlang" ,r-rlang)
-       ("r-styler" ,r-styler)
-       ("r-usethis" ,r-usethis)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-biocmanager
+           r-fs
+           r-glue
+           r-rlang
+           r-styler
+           r-usethis))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/lcolladotor/biocthis")
     (synopsis "Automate package and project setup for Bioconductor packages")
     (description
@@ -14139,25 +14552,25 @@ Bioconductor-friendly.")
 (define-public r-biocdockermanager
   (package
     (name "r-biocdockermanager")
-    (version "1.4.0")
+    (version "1.6.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "BiocDockerManager" version))
        (sha256
         (base32
-         "0dh1flm5chsdcihljrg6znjskqkp0qyjh39hsv4zq0frf1rm97j7"))))
+         "1kpdmpcngnl667bfffp9bkf8c31ipmhsncq0h9bf3a4k8b83pi0w"))))
     (properties
      `((upstream-name . "BiocDockerManager")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("docker" ,docker)
-       ("r-dplyr" ,r-dplyr)
-       ("r-httr" ,r-httr)
-       ("r-memoise" ,r-memoise)
-       ("r-readr" ,r-readr)
-       ("r-whisker" ,r-whisker)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list docker
+           r-dplyr
+           r-httr
+           r-memoise
+           r-readr
+           r-whisker))
+    (native-inputs (list r-knitr))
     (home-page "https://bioconductor.org/packages/BiocDockerManager")
     (synopsis "Access and manage Bioconductor Docker images")
     (description
@@ -14169,35 +14582,36 @@ the Bioconductor project.")
 (define-public r-biodb
   (package
     (name "r-biodb")
-    (version "1.0.4")
+    (version "1.2.2")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "biodb" version))
        (sha256
         (base32
-         "1apnbr5p619nsrhd2drm6arj69sw0wijv8ap7dfrndqkffrpbfmx"))))
+         "0b5zva16r4kz8736h3djjgmh35nxmlin4f374rb4i2s55zsrb638"))))
     (properties `((upstream-name . "biodb")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-chk" ,r-chk)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-lgr" ,r-lgr)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-openssl" ,r-openssl)
-       ("r-plyr" ,r-plyr)
-       ("r-progress" ,r-progress)
-       ("r-r6" ,r-r6)
-       ("r-rappdirs" ,r-rappdirs)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcurl" ,r-rcurl)
-       ("r-rsqlite" ,r-rsqlite)
-       ("r-stringr" ,r-stringr)
-       ("r-testthat" ,r-testthat)
-       ("r-withr" ,r-withr)
-       ("r-xml" ,r-xml)
-       ("r-yaml" ,r-yaml)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-biocfilecache
+           r-chk
+           r-jsonlite
+           r-lgr
+           r-lifecycle
+           r-openssl
+           r-plyr
+           r-progress
+           r-r6
+           r-rappdirs
+           r-rcpp
+           r-rcurl
+           r-rsqlite
+           r-stringr
+           r-testthat
+           r-withr
+           r-xml
+           r-yaml))
+    (native-inputs (list r-knitr))
     (home-page "https://bioconductor.org/packages/biodb")
     (synopsis "Library for connecting to chemical and biological databases")
     (description
@@ -14213,22 +14627,19 @@ separate published packages.")
 (define-public r-biomformat
   (package
     (name "r-biomformat")
-    (version "1.20.0")
+    (version "1.22.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "biomformat" version))
        (sha256
         (base32
-         "1wgshkddxbmpsihpkm0dp7vqp59ns6iqbx574y80n2pxb8dx8sy9"))))
+         "0xf99j4lhf8kh9h1317hrbzxdv6rljs1fn68r8s40x6y4db3l817"))))
     (properties `((upstream-name . "biomformat")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-jsonlite" ,r-jsonlite)
-       ("r-matrix" ,r-matrix)
-       ("r-plyr" ,r-plyr)
-       ("r-rhdf5" ,r-rhdf5)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-jsonlite r-matrix r-plyr r-rhdf5))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/joey711/biomformat/")
     (synopsis "Interface package for the BIOM file format")
     (description
@@ -14245,14 +14656,14 @@ as extensions of common core functions/methods.")
 (define-public r-mvcclass
   (package
     (name "r-mvcclass")
-    (version "1.66.0")
+    (version "1.68.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "MVCClass" version))
        (sha256
         (base32
-         "1di7y10mr7caacd6igwxnr62cm4v1x877yi4a2i5jqz1058jqni7"))))
+         "088gzh33vjkjf78xczqfs89pyg0k7c3533yfvijqxl84ni2ky78z"))))
     (properties `((upstream-name . "MVCClass")))
     (build-system r-build-system)
     (home-page "https://bioconductor.org/packages/MVCClass")
@@ -14265,21 +14676,18 @@ design.")
 (define-public r-biomvcclass
   (package
     (name "r-biomvcclass")
-    (version "1.60.0")
+    (version "1.62.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "BioMVCClass" version))
        (sha256
         (base32
-         "04pld93nffbci47dnf0awmcmhlfzv599ggcd7hvq78w41ac60qv8"))))
+         "0jqgazwz35gz11a7vzanyy2yalzalx0z0rw6y18nmk8dbv01nv2j"))))
     (properties `((upstream-name . "BioMVCClass")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-graph" ,r-graph)
-       ("r-mvcclass" ,r-mvcclass)
-       ("r-rgraphviz" ,r-rgraphviz)))
+     (list r-biobase r-graph r-mvcclass r-rgraphviz))
     (home-page "https://bioconductor.org/packages/BioMVCClass")
     (synopsis "Model-View-Controller (MVC) classes that use Biobase")
     (description
@@ -14290,21 +14698,18 @@ design.")
 (define-public r-biomvrcns
   (package
     (name "r-biomvrcns")
-    (version "1.32.0")
+    (version "1.34.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "biomvRCNS" version))
        (sha256
         (base32
-         "0wyzj422smr4m9mswzn9inc1sn86pnia7jmd6k28nd2a7fjyrm16"))))
+         "01nhjhfyzs67p97bk9bjqdxk239ckl8sgfj55azk1zmw92aw2hfy"))))
     (properties `((upstream-name . "biomvRCNS")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-genomicranges" ,r-genomicranges)
-       ("r-gviz" ,r-gviz)
-       ("r-iranges" ,r-iranges)
-       ("r-mvtnorm" ,r-mvtnorm)))
+     (list r-genomicranges r-gviz r-iranges r-mvtnorm))
     (home-page "https://bioconductor.org/packages/biomvRCNS")
     (synopsis "Copy number study and segmentation for multivariate biological data")
     (description
@@ -14318,39 +14723,39 @@ using aCGH or sequencing.")
 (define-public r-bionero
   (package
     (name "r-bionero")
-    (version "1.0.4")
+    (version "1.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "BioNERO" version))
        (sha256
         (base32
-         "1yj0pavyfrj2gsvaj1dkgmznibm2appxjx9rk5qjslhslmm5b05b"))))
+         "0ddrzv1g46hvm52dzrcj5nbyyw9a16cqk8zg20wnkrh3qw1h4d9p"))))
     (properties `((upstream-name . "BioNERO")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocparallel" ,r-biocparallel)
-       ("r-complexheatmap" ,r-complexheatmap)
-       ("r-deseq2" ,r-deseq2)
-       ("r-dynamictreecut" ,r-dynamictreecut)
-       ("r-genie3" ,r-genie3)
-       ("r-ggnetwork" ,r-ggnetwork)
-       ("r-ggnewscale" ,r-ggnewscale)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggpubr" ,r-ggpubr)
-       ("r-igraph" ,r-igraph)
-       ("r-intergraph" ,r-intergraph)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-minet" ,r-minet)
-       ("r-netrep" ,r-netrep)
-       ("r-networkd3" ,r-networkd3)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-reshape2" ,r-reshape2)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-sva" ,r-sva)
-       ("r-wgcna" ,r-wgcna)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-biocparallel
+           r-complexheatmap
+           r-deseq2
+           r-dynamictreecut
+           r-genie3
+           r-ggnetwork
+           r-ggnewscale
+           r-ggplot2
+           r-ggpubr
+           r-igraph
+           r-intergraph
+           r-matrixstats
+           r-minet
+           r-netrep
+           r-networkd3
+           r-rcolorbrewer
+           r-reshape2
+           r-summarizedexperiment
+           r-sva
+           r-wgcna))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/almeidasilvaf/BioNERO")
     (synopsis "Biological network reconstruction omnibus")
     (description
@@ -14374,22 +14779,18 @@ networks.")
 (define-public r-bionet
   (package
     (name "r-bionet")
-    (version "1.52.0")
+    (version "1.54.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "BioNet" version))
        (sha256
         (base32
-         "15rk1jfv4h1mxvr5bs0qmq6fdnza7zcmksigqxb46fs7f6znr3yi"))))
+         "05rj14jn4gn0hfn57amf19b8fqwkd3y2ji3mg7m1yg1w7n4qxqsg"))))
     (properties `((upstream-name . "BioNet")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-biobase" ,r-biobase)
-       ("r-graph" ,r-graph)
-       ("r-igraph" ,r-igraph)
-       ("r-rbgl" ,r-rbgl)))
+     (list r-annotationdbi r-biobase r-graph r-igraph r-rbgl))
     (home-page "http://bioconductor.org/packages/release/bioc/html/BioNet.html")
     (synopsis "Functional analysis of biological networks")
     (description
@@ -14407,37 +14808,37 @@ scoring subnetwork.")
 (define-public r-bionetstat
   (package
     (name "r-bionetstat")
-    (version "1.12.0")
+    (version "1.14.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "BioNetStat" version))
        (sha256
         (base32
-         "16xlfng9m8xvm831c2x6zmjc0gavlfiy9pnza55hdv86888fcnbg"))))
+         "13br8x4809hrr4ibz6iy5qjza9j6cazmkpvfikvw6bs588csxwf8"))))
     (properties `((upstream-name . "BioNetStat")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocparallel" ,r-biocparallel)
-       ("r-dt" ,r-dt)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-hmisc" ,r-hmisc)
-       ("r-igraph" ,r-igraph)
-       ("r-knitr" ,r-knitr)
-       ("r-markdown" ,r-markdown)
-       ("r-pathview" ,r-pathview)
-       ("r-pheatmap" ,r-pheatmap)
-       ("r-plyr" ,r-plyr)
-       ("r-psych" ,r-psych)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rjsonio" ,r-rjsonio)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("r-shiny" ,r-shiny)
-       ("r-shinybs" ,r-shinybs)
-       ("r-whisker" ,r-whisker)
-       ("r-yaml" ,r-yaml)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-biocparallel
+           r-dt
+           r-ggplot2
+           r-hmisc
+           r-igraph
+           r-knitr
+           r-markdown
+           r-pathview
+           r-pheatmap
+           r-plyr
+           r-psych
+           r-rcolorbrewer
+           r-rjsonio
+           r-rmarkdown
+           r-shiny
+           r-shinybs
+           r-whisker
+           r-yaml))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/jardimViniciusC/BioNetStat")
     (synopsis "Biological network analysis")
     (description
@@ -14449,22 +14850,20 @@ network and metabolic pathways view.")
 (define-public r-bioqc
   (package
     (name "r-bioqc")
-    (version "1.20.0")
+    (version "1.22.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "BioQC" version))
        (sha256
         (base32
-         "04akp94p0d0zid55m1b1k3qlw7iq914pcg57lihgj3pa92n1sc5l"))))
+         "190336qk0plg79gzvfn6wfplsi8nq0nj8508g7m0w3z6bdgwy407"))))
     (properties `((upstream-name . "BioQC")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-edger" ,r-edger)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-biobase r-edger r-rcpp))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://accio.github.io/BioQC/")
     (synopsis "Detect tissue heterogeneity in expression profiles with gene sets")
     (description
@@ -14477,26 +14876,26 @@ optimised for high performance.")
 (define-public r-biotip
   (package
     (name "r-biotip")
-    (version "1.6.0")
+    (version "1.8.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "BioTIP" version))
        (sha256
         (base32
-         "1i6r8px0fmdjx8frpljppwql74mhx08ibvhs9y3qk91ck5h3f0js"))))
+         "0xmy5c4i9gf6d04gara6lbnnldqmzjaascb2pd2ih60jw2mvl4ys"))))
     (properties `((upstream-name . "BioTIP")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cluster" ,r-cluster)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-hmisc" ,r-hmisc)
-       ("r-igraph" ,r-igraph)
-       ("r-mass" ,r-mass)
-       ("r-psych" ,r-psych)
-       ("r-stringr" ,r-stringr)))
+     (list r-cluster
+           r-genomicranges
+           r-hmisc
+           r-igraph
+           r-mass
+           r-psych
+           r-stringr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/xyang2uchicago/BioTIP")
     (synopsis "R package for characterization of biological tipping-point")
     (description
@@ -14507,33 +14906,31 @@ help unravel disease regulatory trajectory.")
 (define-public r-biotmle
   (package
     (name "r-biotmle")
-    (version "1.16.0")
+    (version "1.18.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "biotmle" version))
        (sha256
         (base32
-         "01smkmbv40yprgrgi2gjnmi8ncqyrlkfdxsh33ki20amcx32nc7f"))))
+         "0p3iavf9059qa8qvfvqzskfc5gki3z0ivkkqdwg5anvf0wv2k47g"))))
     (properties `((upstream-name . "biotmle")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertthat" ,r-assertthat)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-dofuture" ,r-dofuture)
-       ("r-dplyr" ,r-dplyr)
-       ("r-drtmle" ,r-drtmle)
-       ("r-future" ,r-future)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggsci" ,r-ggsci)
-       ("r-limma" ,r-limma)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-superheat" ,r-superheat)
-       ("r-tibble" ,r-tibble)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-assertthat
+           r-biocgenerics
+           r-biocparallel
+           r-dplyr
+           r-drtmle
+           r-ggplot2
+           r-ggsci
+           r-limma
+           r-s4vectors
+           r-summarizedexperiment
+           r-superheat
+           r-tibble))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://code.nimahejazi.org/biotmle/")
     (synopsis "Targeted learning with moderated statistics for biomarker discovery")
     (description
@@ -14551,42 +14948,42 @@ ensemble machine learning for the estimation of nuisance functions.")
 (define-public r-bsseq
   (package
     (name "r-bsseq")
-    (version "1.28.0")
+    (version "1.30.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "bsseq" version))
        (sha256
         (base32
-         "1xpv85hr681kkkilsnasndkszwmzbzq11y0lff4na2ilsm7sqmmi"))))
+         "1i30zf6457a0qd64s89x9l544y1h0hj9rfgf1m8l4krd487a9b9d"))))
     (properties `((upstream-name . "bsseq")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-beachmat" ,r-beachmat)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-biostrings" ,r-biostrings)
-       ("r-bsgenome" ,r-bsgenome)
-       ("r-data-table" ,r-data-table)
-       ("r-delayedarray" ,r-delayedarray)
-       ("r-delayedmatrixstats" ,r-delayedmatrixstats)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-gtools" ,r-gtools)
-       ("r-hdf5array" ,r-hdf5array)
-       ("r-iranges" ,r-iranges)
-       ("r-limma" ,r-limma)
-       ("r-locfit" ,r-locfit)
-       ("r-permute" ,r-permute)
-       ("r-r-utils" ,r-r-utils)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rhdf5" ,r-rhdf5)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-scales" ,r-scales)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-beachmat
+           r-biobase
+           r-biocgenerics
+           r-biocparallel
+           r-biostrings
+           r-bsgenome
+           r-data-table
+           r-delayedarray
+           r-delayedmatrixstats
+           r-genomeinfodb
+           r-genomicranges
+           r-gtools
+           r-hdf5array
+           r-iranges
+           r-limma
+           r-locfit
+           r-permute
+           r-r-utils
+           r-rcpp
+           r-rhdf5
+           r-s4vectors
+           r-scales
+           r-summarizedexperiment))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/hansenlab/bsseq")
     (synopsis "Analyze, manage and store bisulfite sequencing data")
     (description
@@ -14597,36 +14994,36 @@ visualizing bisulfite sequencing data.")
 (define-public r-dmrseq
   (package
     (name "r-dmrseq")
-    (version "1.12.0")
+    (version "1.14.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "dmrseq" version))
        (sha256
         (base32
-         "1jbbjifjsnk9261wqmdwkbzj1w52g6vaanpk4w816ri0fap587m4"))))
+         "1d6y6rbvcgprmzqkdzxg5csf0yv845d9vw10pcd1pzyndrama1vd"))))
     (properties `((upstream-name . "dmrseq")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationhub" ,r-annotationhub)
-       ("r-annotatr" ,r-annotatr)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-bsseq" ,r-bsseq)
-       ("r-bumphunter" ,r-bumphunter)
-       ("r-delayedmatrixstats" ,r-delayedmatrixstats)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-iranges" ,r-iranges)
-       ("r-locfit" ,r-locfit)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-nlme" ,r-nlme)
-       ("r-outliers" ,r-outliers)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-annotationhub
+           r-annotatr
+           r-biocparallel
+           r-bsseq
+           r-bumphunter
+           r-delayedmatrixstats
+           r-genomeinfodb
+           r-genomicranges
+           r-ggplot2
+           r-iranges
+           r-locfit
+           r-matrixstats
+           r-nlme
+           r-outliers
+           r-rcolorbrewer
+           r-rtracklayer
+           r-s4vectors))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/dmrseq")
     (synopsis "Detection and inference of differentially methylated regions")
     (description
@@ -14643,13 +15040,13 @@ interest on transformed methylation proportions.")
 (define-public r-omnipathr
   (package
     (name "r-omnipathr")
-    (version "3.0.4")
+    (version "3.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "OmnipathR" version))
        (sha256
-        (base32 "0rbq3h3cp5dgpy5ifmbnfm6z8w4jv45wjzyl1f4qacgrbyf2l30a"))))
+        (base32 "1q89mxnp8cig9r1499g7fb9p9x9ryz1dmc3w6ps5ww9n6rl8jqk8"))))
     (properties `((upstream-name . "OmnipathR")))
     (build-system r-build-system)
     (arguments
@@ -14658,29 +15055,30 @@ interest on transformed methylation proportions.")
          (add-after 'unpack 'set-HOME
            (lambda _ (setenv "HOME" "/tmp"))))))
     (propagated-inputs
-     `(("r-checkmate" ,r-checkmate)
-       ("r-curl" ,r-curl)
-       ("r-digest" ,r-digest)
-       ("r-dplyr" ,r-dplyr)
-       ("r-httr" ,r-httr)
-       ("r-igraph" ,r-igraph)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-later" ,r-later)
-       ("r-logger" ,r-logger)
-       ("r-magrittr" ,r-magrittr)
-       ("r-progress" ,r-progress)
-       ("r-purrr" ,r-purrr)
-       ("r-rappdirs" ,r-rappdirs)
-       ("r-readr" ,r-readr)
-       ("r-readxl" ,r-readxl)
-       ("r-rlang" ,r-rlang)
-       ("r-stringr" ,r-stringr)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)
-       ("r-tidyselect" ,r-tidyselect)
-       ("r-xml2" ,r-xml2)
-       ("r-yaml" ,r-yaml)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-checkmate
+           r-crayon
+           r-curl
+           r-digest
+           r-dplyr
+           r-httr
+           r-igraph
+           r-jsonlite
+           r-later
+           r-logger
+           r-magrittr
+           r-progress
+           r-purrr
+           r-rappdirs
+           r-readr
+           r-readxl
+           r-rlang
+           r-stringr
+           r-tibble
+           r-tidyr
+           r-tidyselect
+           r-xml2
+           r-yaml))
+    (native-inputs (list r-knitr))
     (home-page "https://saezlab.github.io/OmnipathR/")
     (synopsis "OmniPath web service client and more")
     (description
@@ -14694,45 +15092,45 @@ for ligand activity prediction from transcriptomics data.")
 (define-public r-biscuiteer
   (package
     (name "r-biscuiteer")
-    (version "1.6.0")
+    (version "1.8.0")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "biscuiteer" version))
        (sha256
         (base32
-         "0f4kk4v2c5diq0fbvyvgwjd1kjk9izr6n9wfrlrr7wbx4pz3c3h6"))))
+         "16ds322b21g8ys5c3lkrvi70i82f9rxvnknbiqx4sp6f2l01j5yj"))))
     (properties `((upstream-name . "biscuiteer")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-biscuiteerdata" ,r-biscuiteerdata)
-       ("r-bsseq" ,r-bsseq)
-       ("r-data-table" ,r-data-table)
-       ("r-delayedmatrixstats" ,r-delayedmatrixstats)
-       ("r-dmrseq" ,r-dmrseq)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-gtools" ,r-gtools)
-       ("r-hdf5array" ,r-hdf5array)
-       ("r-homo-sapiens" ,r-homo-sapiens)
-       ("r-impute" ,r-impute)
-       ("r-matrix" ,r-matrix)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-mus-musculus" ,r-mus-musculus)
-       ("r-qdnaseq" ,r-qdnaseq)
-       ("r-qualv" ,r-qualv)
-       ("r-r-utils" ,r-r-utils)
-       ("r-readr" ,r-readr)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-variantannotation" ,r-variantannotation)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-biobase
+           r-biocgenerics
+           r-biocparallel
+           r-biscuiteerdata
+           r-bsseq
+           r-data-table
+           r-delayedmatrixstats
+           r-dmrseq
+           r-genomeinfodb
+           r-genomicranges
+           r-gtools
+           r-hdf5array
+           r-homo-sapiens
+           r-impute
+           r-matrix
+           r-matrixstats
+           r-mus-musculus
+           r-qdnaseq
+           r-qualv
+           r-r-utils
+           r-readr
+           r-rsamtools
+           r-rtracklayer
+           r-s4vectors
+           r-summarizedexperiment
+           r-variantannotation))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/trichelab/biscuiteer")
     (synopsis "Convenience functions for the Biscuit package")
     (description
@@ -14742,37 +15140,92 @@ samples, with or without imputation, dropping of mostly-NA rows, age
 estimates, etc.")
     (license license:gpl3)))
 
+(define-public r-tcgabiolinks
+  (package
+    (name "r-tcgabiolinks")
+    (version "2.22.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (bioconductor-uri "TCGAbiolinks" version))
+       (sha256
+        (base32 "0l7hfwgd8aiqv2k98jchkr3sdp9hwdg7pzm3bnvr6k7p93ifr6wc"))))
+    (properties `((upstream-name . "TCGAbiolinks")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-biomart
+           r-data-table
+           r-downloader
+           r-dplyr
+           r-genomicranges
+           r-ggplot2
+           r-httr
+           r-iranges
+           r-jsonlite
+           r-knitr
+           r-plyr
+           r-purrr
+           r-r-utils
+           r-readr
+           r-rvest
+           r-s4vectors
+           r-stringr
+           r-summarizedexperiment
+           r-tcgabiolinksgui-data
+           r-tibble
+           r-tidyr
+           r-xml
+           r-xml2))
+    (native-inputs (list r-knitr))
+    (home-page "https://github.com/BioinformaticsFMRP/TCGAbiolinks")
+    (synopsis "Integrative analysis with GDC data")
+    (description
+     "The aim of TCGAbiolinks is:
+
+@enumerate
+@item facilitate GDC open-access data retrieval;
+@item prepare the data using the appropriate pre-processing strategies;
+@item provide the means to carry out different standard analyses, and;
+@item to easily reproduce earlier research results.
+@end enumerate
+
+In more detail, the package provides multiple methods for analysis (e.g.,
+differential expression analysis, identifying differentially methylated
+regions) and methods for visualization (e.g., survival plots, volcano plots,
+starburst plots) in order to easily develop complete analysis pipelines.")
+    (license license:gpl3+)))
+
 (define-public r-tximeta
   (package
     (name "r-tximeta")
-    (version "1.10.0")
+    (version "1.12.4")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "tximeta" version))
        (sha256
         (base32
-         "0ipgpcl93cac4qff6lp9x2l3gav5kb1x1d56g32h09hlm797rvvh"))))
+         "1lm2r64d6sdfzvxcabgs0214cdc5dl9pfx562acjcxz5mb101g9g"))))
     (properties `((upstream-name . "tximeta")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-annotationhub" ,r-annotationhub)
-       ("r-biocfilecache" ,r-biocfilecache)
-       ("r-biostrings" ,r-biostrings)
-       ("r-ensembldb" ,r-ensembldb)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-matrix" ,r-matrix)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-tibble" ,r-tibble)
-       ("r-tximport" ,r-tximport)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-annotationdbi
+           r-annotationhub
+           r-biocfilecache
+           r-biostrings
+           r-ensembldb
+           r-genomeinfodb
+           r-genomicfeatures
+           r-genomicranges
+           r-iranges
+           r-jsonlite
+           r-matrix
+           r-s4vectors
+           r-summarizedexperiment
+           r-tibble
+           r-tximport))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/mikelove/tximeta")
     (synopsis "Transcript quantification import with automatic metadata")
     (description
@@ -14782,3 +15235,41 @@ and other associated metadata.  De novo transcriptomes can be linked to the
 appropriate sources with linkedTxomes and shared for computational
 reproducibility.")
     (license license:gpl2)))
+
+(define-public r-phyloseq
+  (package
+    (name "r-phyloseq")
+    (version "1.38.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (bioconductor-uri "phyloseq" version))
+       (sha256
+        (base32 "0k0aj8f7g1vr7l0qcc507b3w67zc1k9x7sdblm7mjb20zqr3916s"))))
+    (properties `((upstream-name . "phyloseq")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-ade4
+           r-ape
+           r-biobase
+           r-biocgenerics
+           r-biomformat
+           r-biostrings
+           r-cluster
+           r-data-table
+           r-foreach
+           r-ggplot2
+           r-igraph
+           r-multtest
+           r-plyr
+           r-reshape2
+           r-scales
+           r-vegan))
+    (native-inputs
+     (list r-knitr))
+    (home-page "https://github.com/joey711/phyloseq")
+    (synopsis "Handling and analysis of high-throughput microbiome census data")
+    (description
+     "Phyloseq provides a set of classes and tools to facilitate the import,
+storage, analysis, and graphical display of microbiome census data.")
+    (license license:agpl3)))
diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm
index c0e5a9c638..c872c9c45a 100644
--- a/gnu/packages/bioinformatics.scm
+++ b/gnu/packages/bioinformatics.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015, 2016, 2017, 2018 Ben Woodcroft <donttrustben@gmail.com>
 ;;; Copyright © 2015, 2016, 2018, 2019, 2020 Pjotr Prins <pjotr.guix@thebird.nl>
 ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
@@ -12,7 +12,7 @@
 ;;; 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>
-;;; Copyright © 2019, 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2019, 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2019 Brian Leung <bkleung89@gmail.com>
 ;;; Copyright © 2019 Brett Gilio <brettg@gnu.org>
 ;;; Copyright © 2020 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
@@ -21,7 +21,8 @@
 ;;; Copyright © 2020 Bonface Munyoki Kilyungi <bonfacemunyoki@gmail.com>
 ;;; Copyright © 2021 Tim Howes <timhowes@lavabit.com>
 ;;; Copyright © 2021 Hong Li <hli@mdc-berlin.de>
-;;; Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
+;;; Copyright © 2021, 2022 Simon Tournier <zimon.toutoune@gmail.com>
+;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -41,12 +42,14 @@
 (define-module (gnu packages bioinformatics)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
+  #:use-module (guix gexp)
   #:use-module (guix utils)
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix hg-download)
   #:use-module (guix build-system ant)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build-system cargo)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system go)
   #:use-module (guix build-system haskell)
@@ -57,7 +60,6 @@
   #:use-module (guix build-system qt)
   #:use-module (guix build-system r)
   #:use-module (guix build-system ruby)
-  #:use-module (guix build-system scons)
   #:use-module (guix build-system trivial)
   #:use-module (guix deprecation)
   #:use-module (gnu packages)
@@ -74,8 +76,10 @@
   #:use-module (gnu packages code)
   #:use-module (gnu packages cmake)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages cpp)
   #:use-module (gnu packages cpio)
   #:use-module (gnu packages cran)
+  #:use-module (gnu packages crates-io)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages databases)
@@ -105,6 +109,7 @@
   #:use-module (gnu packages java-compression)
   #:use-module (gnu packages jemalloc)
   #:use-module (gnu packages jupyter)
+  #:use-module (gnu packages libffi)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages logging)
   #:use-module (gnu packages lsof)
@@ -134,11 +139,14 @@
   #:use-module (gnu packages qt)
   #:use-module (gnu packages rdf)
   #:use-module (gnu packages readline)
+  #:use-module (gnu packages rpc)
   #:use-module (gnu packages rsync)
   #:use-module (gnu packages ruby)
   #:use-module (gnu packages serialization)
   #:use-module (gnu packages shells)
+  #:use-module (gnu packages skribilo)
   #:use-module (gnu packages sphinx)
+  #:use-module (gnu packages sqlite)
   #:use-module (gnu packages statistics)
   #:use-module (gnu packages swig)
   #:use-module (gnu packages tbb)
@@ -221,17 +229,16 @@ structure of the predicted RNA.")
               (snippet
                `(begin
                   ;; Delete bundled htslib.
-                  (delete-file-recursively "c/htslib-1.3.1")
-                  #t))))
+                  (delete-file-recursively "c/htslib-1.3.1")))))
     (build-system python-build-system)
     (arguments
      `(#:python ,python-2 ; BamM is Python 2 only.
        ;; Do not use bundled libhts.  Do use the bundled libcfu because it has
        ;; been modified from its original form.
        #:configure-flags
-       (let ((htslib (assoc-ref %build-inputs "htslib")))
-         (list "--with-libhts-lib" (string-append htslib "/lib")
-               "--with-libhts-inc" (string-append htslib "/include/htslib")))
+       ,#~(let ((htslib #$(this-package-input "htslib")))
+            (list "--with-libhts-lib" (string-append htslib "/lib")
+                  "--with-libhts-inc" (string-append htslib "/include/htslib")))
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'autogen
@@ -242,53 +249,38 @@ structure of the predicted RNA.")
                  ;; Use autogen so that 'configure' works.
                  (substitute* "autogen.sh" (("/bin/sh") sh))
                  (setenv "CONFIG_SHELL" sh)
-                 (invoke "./autogen.sh")))
-             #t))
-         (delete 'build)
-         ;; Run tests after installation so compilation only happens once.
-         (delete 'check)
-         (add-after 'install 'wrap-executable
-           (lambda* (#:key outputs #:allow-other-keys)
-            (let* ((out  (assoc-ref outputs "out"))
-                   (path (getenv "PATH")))
-              (wrap-program (string-append out "/bin/bamm")
-                `("PATH" ":" prefix (,path))))
-            #t))
-         (add-after 'wrap-executable 'post-install-check
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (setenv "PATH"
-                     (string-append (assoc-ref outputs "out")
-                                    "/bin:"
-                                    (getenv "PATH")))
-             (setenv "PYTHONPATH"
-                     (string-append
-                      (assoc-ref outputs "out")
-                      "/lib/python"
-                      (string-take (string-take-right
-                                    (assoc-ref inputs "python") 5) 3)
-                      "/site-packages:"
-                      (getenv "PYTHONPATH")))
+                 (invoke "./autogen.sh")))))
+         (delete 'build)                ;the build loops otherwise
+         (replace 'check
+           (lambda _
              ;; There are 2 errors printed, but they are safe to ignore:
              ;; 1) [E::hts_open_format] fail to open file ...
              ;; 2) samtools view: failed to open ...
-             (invoke "nosetests")
-             #t)))))
-    (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("zlib" ,zlib)
-       ("python-nose" ,python2-nose)
-       ("python-pysam" ,python2-pysam)))
-    (inputs
-     `(("htslib" ,htslib-1.3) ; At least one test fails on htslib-1.4+.
-       ("samtools" ,samtools)
-       ("bwa" ,bwa)
-       ("grep" ,grep)
-       ("sed" ,sed)
-       ("coreutils" ,coreutils)))
+             (invoke "nosetests")))
+         (add-after 'install 'wrap-executable
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((out  (assoc-ref outputs "out"))
+                    (path (getenv "PATH"))
+                    (pythonpath (getenv "GUIX_PYTHONPATH")))
+               (wrap-program (string-append out "/bin/bamm")
+                 `("PATH" ":" prefix (,path))
+                 `("GUIX_PYTHONPATH" ":" prefix (,pythonpath)))))))))
+    (native-inputs
+     (list autoconf
+           automake
+           libtool
+           zlib
+           python2-nose
+           python2-pysam))
+    (inputs
+     (list htslib-1.3 ; At least one test fails on htslib-1.4+.
+           samtools
+           bwa
+           grep
+           sed
+           coreutils))
     (propagated-inputs
-     `(("python-numpy" ,python2-numpy)))
+     (list python2-numpy))
     (home-page "https://ecogenomics.github.io/BamM/")
     (synopsis "Metagenomics-focused BAM file manipulator")
     (description
@@ -323,7 +315,7 @@ instance, it implements several methods to assess contig-wise read coverage.")
                      "-Wl,-rpath="
                      (assoc-ref outputs "out") "/lib/bamtools"))
             #t)))))
-    (inputs `(("zlib" ,zlib)))
+    (inputs (list zlib))
     (home-page "https://github.com/pezmaster31/bamtools")
     (synopsis "C++ API and command-line toolkit for working with BAM data")
     (description
@@ -334,27 +326,43 @@ BAM files.")
 (define-public bamutils
   (package
     (name "bamutils")
-    (version "1.0.13")
+    (version "1.0.14")
     (source (origin
-              (method url-fetch)
-              (uri
-               (string-append
-                "https://genome.sph.umich.edu/w/images/7/70/"
-                "BamUtilLibStatGen." version ".tgz"))
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/statgen/bamUtil")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
               (sha256
                (base32
-                "0asr1kmjbr3cyf4hkg865y8c2s30v87xvws4q6c8pyfi6wfd1h8n"))))
+                "0i2r332k1kz0jysyg89d858wqq59n16lw6dv5qmilcwshb77r9v7"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:tests? #f ; There are no tests.
-       #:make-flags `("USER_WARNINGS=-std=gnu++98"
-                      ,(string-append "INSTALLDIR="
-                                      (assoc-ref %outputs "out") "/bin"))
+     `(#:tests? #f ; Unclear how to run tests
+       #:make-flags
+       ,#~(list "USER_WARNINGS=-std=gnu++98" ;
+                (string-append "INSTALLDIR=" #$output "/bin"))
        #:phases
        (modify-phases %standard-phases
-         (delete 'configure))))
+         (replace 'configure
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "src/Makefile" ;
+               (("^DATE=.*") "DATE=\"1970-01-01\"\n"))
+             (copy-recursively (assoc-ref inputs "libstatgen")
+                               "../libStatGen"))))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
+    (native-inputs
+     `(("libstatgen"
+        ,(origin
+           (method git-fetch)
+           (uri (git-reference
+                 (url "https://github.com/statgen/libStatGen/")
+                 (commit (string-append "v" version))))
+           (file-name (git-file-name "libstatgen" version))
+           (sha256
+            (base32
+             "0q9iyk046r4m7qnav8c3f28zsar25lj9nydiklwaswmzdijhi4p1"))))))
     (home-page "https://genome.sph.umich.edu/wiki/BamUtil")
     (synopsis "Programs for working on SAM/BAM files")
     (description "This package provides several programs that perform
@@ -365,7 +373,7 @@ single executable called @code{bam}.")
 (define-public bcftools
   (package
     (name "bcftools")
-    (version "1.12")
+    (version "1.14")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/samtools/bcftools/"
@@ -373,12 +381,11 @@ single executable called @code{bam}.")
                                   version "/bcftools-" version ".tar.bz2"))
               (sha256
                (base32
-                "1x94l1hy2pi3lbz0sxlbw0g6q5z5apcrhrlcwda94ns9n4r6a3ks"))
+                "1jqrma16fx8kpvb3c0462dg0asvmiv5yi8myqmc5ddgwi6p8ivxp"))
               (modules '((guix build utils)))
               (snippet '(begin
                           ;; Delete bundled htslib.
-                          (delete-file-recursively "htslib-1.12")
-                          #t))))
+                          (delete-file-recursively "htslib-1.14")))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
@@ -389,14 +396,11 @@ single executable called @code{bam}.")
          (add-before 'check 'patch-tests
            (lambda _
              (substitute* "test/test.pl"
-               (("/bin/bash") (which "bash")))
-             #t)))))
+               (("/bin/bash") (which "bash"))))))))
     (native-inputs
-     `(("htslib" ,htslib)
-       ("perl" ,perl)))
+     (list htslib perl))
     (inputs
-     `(("gsl" ,gsl)
-       ("zlib" ,zlib)))
+     (list gsl zlib))
     (home-page "https://samtools.github.io/bcftools/")
     (synopsis "Utilities for variant calling and manipulating VCFs and BCFs")
     (description
@@ -406,9 +410,25 @@ transparently with both VCFs and BCFs, both uncompressed and BGZF-compressed.")
     ;; The sources are dual MIT/GPL, but becomes GPL-only when USE_GPL=1.
     (license (list license:gpl3+ license:expat))))
 
+(define-public bcftools-1.12
+  (package/inherit bcftools
+    (version "1.12")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/samtools/bcftools/"
+                                  "releases/download/"
+                                  version "/bcftools-" version ".tar.bz2"))
+              (sha256
+               (base32
+                "1x94l1hy2pi3lbz0sxlbw0g6q5z5apcrhrlcwda94ns9n4r6a3ks"))
+              (modules '((guix build utils)))
+              (snippet '(begin
+                          ;; Delete bundled htslib.
+                          (delete-file-recursively "htslib-1.12")))))
+    (native-inputs (list htslib-1.12 perl))))
+
 (define-public bcftools-1.10
-  (package (inherit bcftools)
-    (name "bcftools")
+  (package/inherit bcftools
     (version "1.10")
     (source (origin
               (method url-fetch)
@@ -421,12 +441,8 @@ transparently with both VCFs and BCFs, both uncompressed and BGZF-compressed.")
               (modules '((guix build utils)))
               (snippet '(begin
                           ;; Delete bundled htslib.
-                          (delete-file-recursively "htslib-1.10")
-                          #t))))
-    (build-system gnu-build-system)
-    (native-inputs
-     `(("htslib" ,htslib-1.10)
-       ("perl" ,perl)))))
+                          (delete-file-recursively "htslib-1.10")))))
+    (native-inputs (list htslib-1.10 perl))))
 
 (define-public bedops
   (package
@@ -502,17 +518,16 @@ computational cluster.")
                 "1f2hh79l7dn147c2xyfgf5wfjvlqfw32kjfnnh2n1qy6rpzx2fik"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:test-target "test"
+     `(#:test-target "test"
        #:make-flags
-       (list (string-append "prefix=" (assoc-ref %outputs "out")))
+       ,#~(list (string-append "prefix=" #$output))
        #:phases
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
      `(("python" ,python-wrapper)))
     (inputs
-     `(("samtools" ,samtools)
-       ("zlib" ,zlib)))
+     (list samtools zlib))
     (home-page "https://github.com/arq5x/bedtools2")
     (synopsis "Tools for genome analysis and arithmetic")
     (description
@@ -542,56 +557,97 @@ BED, GFF/GTF, VCF.")
      '(#:test-target "test"
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'compatibility
+           (lambda _
+             (substitute* "src/utils/fileType/FileRecordTypeChecker.h"
+               (("static const float PERCENTAGE")
+                "static constexpr float PERCENTAGE"))
+             (substitute* "src/utils/general/DualQueue.h"
+               (("template <class T, template<class T> class CompareFunc>")
+                "template <class T, template<class U> class CompareFunc>"))))
          (delete 'configure)
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((bin (string-append (assoc-ref outputs "out") "/bin/")))
                (for-each (lambda (file)
                            (install-file file bin))
-                         (find-files "bin" ".*")))
-             #t)))))))
+                         (find-files "bin" ".*"))))))))
+    (native-inputs
+     `(("python" ,python-wrapper)))
+    (inputs
+     (list samtools zlib))))
+
+(define-public pbcopper
+  ;; This is the latest commit at the time of this writing.
+  (let ((commit "ad4143afd25a0bd6adc977c544865c992a515841")
+        (revision "1"))
+    (package
+      (name "pbcopper")
+      (version (git-version "1.9.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/PacificBiosciences/pbcopper")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1qxkbpdkamfisnk36lpi1vdvf3p1lg2hdqna3xgd94pz52bwbmp7"))))
+      (build-system meson-build-system)
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'patch-meson-files
+             (lambda* (#:key inputs #:allow-other-keys)
+               (substitute* "meson.build"
+                 (("-msse4.1") "")))))))
+      (inputs
+       (list boost))
+      (native-inputs
+       (list googletest pkg-config))
+      (home-page "https://github.com/PacificBiosciences/pbcopper")
+      (synopsis "Data structures, algorithms, and utilities for PacBio C++ applications")
+      (description
+       "The pbcopper library provides a suite of data structures, algorithms,
+and utilities for PacBio C++ applications.")
+      (license license:bsd-3))))
 
 (define-public pbbam
   (package
     (name "pbbam")
-    (version "0.23.0")
+    (version "1.7.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
                     (url "https://github.com/PacificBiosciences/pbbam")
-                    (commit version)))
+                    (commit (string-append "v" version))))
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0h9gkrpf2lrxklxp72xfl5bi3h5zcm5hprrya9gf0hr3xwlbpp0x"))))
+                "1avdm5hwhr5ls79017blyalx1npzbf1aa6dgb6j6lg8sq4nk9yyg"))))
     (build-system meson-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'find-googletest
+         (add-after 'unpack 'patch-tests
            (lambda* (#:key inputs #:allow-other-keys)
-             ;; It doesn't find gtest_main because there's no pkg-config file
-             ;; for it.  Find it another way.
-             (substitute* "tests/meson.build"
-               (("pbbam_gtest_dep = dependency\\('gtest_main'.*")
-                (format #f "cpp = meson.get_compiler('cpp')
-pbbam_gtest_dep = cpp.find_library('gtest_main', dirs : '~a')\n"
-                        (assoc-ref inputs "googletest"))))
-             #t)))
-       ;; TODO: tests/pbbam_test cannot be linked
-       ;; ld: tests/59830eb@@pbbam_test@exe/src_test_Accuracy.cpp.o:
-       ;;   undefined reference to symbol '_ZTIN7testing4TestE'
-       ;; ld: /gnu/store/...-googletest-1.8.0/lib/libgtest.so:
-       ;;   error adding symbols: DSO missing from command line
-       #:tests? #f
-       #:configure-flags '("-Dtests=false")))
+             ;; Disable this test.  I tried fixing it by including
+             ;; optional_io.hpp, but there's a type error.
+             (substitute* "tests/src/meson.build"
+               (("'test_ReadGroupInfo.cpp',") ""))
+             #;
+             (substitute* "include/pbbam/ReadGroupInfo.h"
+               (("#include <boost/optional.hpp>" m)
+                (string-append m "\n#include <boost/optional/optional_io.hpp>")))
+             (substitute* '("tests/scripts/cram/_test.py"
+                            "tests/scripts/cram/_main.py")
+               (("'/bin/sh'")
+                (string-append "'" (which "sh") "'"))))))))
     ;; These libraries are listed as "Required" in the pkg-config file.
     (propagated-inputs
-     `(("htslib" ,htslib)
-       ("zlib" ,zlib)))
+     (list htslib pbcopper zlib))
     (inputs
-     `(("boost" ,boost)
-       ("samtools" ,samtools)))
+     (list boost samtools))
     (native-inputs
      `(("googletest" ,googletest)
        ("pkg-config" ,pkg-config)
@@ -623,10 +679,9 @@ Non-PacBio BAMs will cause exceptions to be thrown.")
                   "1mlmq0v96irbz71bgw5zcc43g1x32zwnxx21a5p1f1ch4cikw1yd"))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)))
+       (list autoconf automake))
       (inputs
-       `(("zlib" ,zlib)))
+       (list zlib))
       (home-page "https://github.com/nh13/pbgzip")
       (synopsis "Parallel Block GZIP")
       (description "This package implements parallel block gzip.  For many
@@ -644,7 +699,7 @@ speedup comes during compression.")
 (define-public blasr-libcpp
   (package
     (name "blasr-libcpp")
-    (version "5.3.3")
+    (version "5.3.5")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -653,7 +708,7 @@ speedup comes during compression.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0cn5l42zyq67sj0g2imqkhayz2iqvv0a1pgpbmlq0qynjmsrbfd2"))))
+                "07cdfnfl29zf2j7fpaaqaxghq3p0wnc109razs0icwm2q6l3gycb"))))
     (build-system meson-build-system)
     (arguments
      `(#:phases
@@ -688,13 +743,9 @@ libblasr_gtest_dep = cpp.find_library('gtest_main', dirs : '~a')\n"
        #:tests? #f
        #:configure-flags '("-Dtests=false")))
     (inputs
-     `(("boost" ,boost)
-       ("hdf5" ,hdf5)
-       ("pbbam" ,pbbam)
-       ("zlib" ,zlib)))
+     (list boost hdf5 htslib pbbam zlib))
     (native-inputs
-     `(("googletest" ,googletest)
-       ("pkg-config" ,pkg-config)))
+     (list googletest pkg-config))
     (home-page "https://github.com/PacificBiosciences/blasr_libcpp")
     (synopsis "Library for analyzing PacBio genomic sequences")
     (description
@@ -706,7 +757,7 @@ hdf and alignment.")
 (define-public blasr
   (package
     (name "blasr")
-    (version "5.3.3")
+    (version "5.3.5")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -715,7 +766,7 @@ hdf and alignment.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1skgy2mvz8gsgfh1gc2nfgwvpyzb1hpmp2cf2773h5wsj8nw22kl"))))
+                "0axyd06gn2xa0p0k76fihsbxpfxvhlb18jn6bf97c0ii58r1wc0k"))))
     (build-system meson-build-system)
     (arguments
      `(#:phases
@@ -729,19 +780,14 @@ hdf and alignment.")
                    m
                    (format #f "cpp.find_library('hdf5', dirs : '~a'), \
 cpp.find_library('hdf5_cpp', dirs : '~a'), "
-                           hdf5 hdf5)))))
-             #t)))
+                           hdf5 hdf5))))))))
        ;; Tests require "cram" executable, which is not packaged.
        #:tests? #f
        #:configure-flags '("-Dtests=false")))
     (inputs
-     `(("boost" ,boost)
-       ("blasr-libcpp" ,blasr-libcpp)
-       ("hdf5" ,hdf5)
-       ("pbbam" ,pbbam)
-       ("zlib" ,zlib)))
+     (list boost blasr-libcpp hdf5 pbbam zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/PacificBiosciences/blasr")
     (synopsis "PacBio long read aligner")
     (description
@@ -777,14 +823,14 @@ cpp.find_library('hdf5_cpp', dirs : '~a'), "
                   "Ribotaper.sh")))
              #t)))))
     (inputs
-     `(("bedtools" ,bedtools-2.18)
-       ("samtools" ,samtools-0.1)
-       ("r-minimal" ,r-minimal)
-       ("r-foreach" ,r-foreach)
-       ("r-xnomial" ,r-xnomial)
-       ("r-domc" ,r-domc)
-       ("r-multitaper" ,r-multitaper)
-       ("r-seqinr" ,r-seqinr)))
+     (list bedtools-2.18
+           samtools-0.1
+           r-minimal
+           r-foreach
+           r-xnomial
+           r-domc
+           r-multitaper
+           r-seqinr))
     (home-page "https://ohlerlab.mdc-berlin.de/software/RiboTaper_126/")
     (synopsis "Define translated ORFs using ribosome profiling data")
     (description
@@ -812,22 +858,23 @@ provides the Ribotaper pipeline.")
      `(#:python ,python-2
        #:phases
        (modify-phases %standard-phases
+         ;; This test fails because of the matplotlib plotting backend.
+         (add-after 'unpack 'disable-plot-test
+           (lambda _
+             (substitute* "src/ribodiff/functional_test_te.py"
+               (("pl\\.make_plots\\(data, opts\\)") "#"))))
          ;; Generate an installable executable script wrapper.
          (add-after 'unpack 'patch-setup.py
            (lambda _
              (substitute* "setup.py"
                (("^(.*)packages=.*" line prefix)
                 (string-append line "\n"
-                               prefix "scripts=['scripts/TE.py'],\n")))
-             #t)))))
+                               prefix "scripts=['scripts/TE.py'],\n"))))))))
     (inputs
-     `(("python-numpy" ,python2-numpy)
-       ("python-matplotlib" ,python2-matplotlib)
-       ("python-scipy" ,python2-scipy)
-       ("python-statsmodels" ,python2-statsmodels)))
+     (list python2-numpy python2-matplotlib python2-scipy
+           python2-statsmodels))
     (native-inputs
-     `(("python-mock" ,python2-mock)
-       ("python-nose" ,python2-nose)))
+     (list python2-mock python2-nose))
     (home-page "https://public.bmi.inf.ethz.ch/user/zhongy/RiboDiff/")
     (synopsis "Detect translation efficiency changes from ribosome footprints")
     (description "RiboDiff is a statistical tool that detects the protein
@@ -853,9 +900,9 @@ independently with transcriptional regulation.")
                 "1pxc3zdnirxbf9a0az698hd8xdik7qkhypm7v6hn922x8y9qmspm"))))
     (build-system gnu-build-system)
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (native-inputs
-     `(("bison" ,bison)))
+     (list bison))
     (arguments
      `(#:tests? #f ; There are no tests to run.
        ;; Bison must generate files, before other targets can build.
@@ -894,11 +941,9 @@ intended to behave exactly the same as the original BWK awk.")
               "0ic07q85vhw9djf23k57b21my7i5xp400m8gfqgr5gcryqvdr0yk"))))
    (build-system python-build-system)
    (native-inputs
-    `(("python-setuptools-scm" ,python-setuptools-scm)))
+    (list python-setuptools-scm))
    (propagated-inputs
-    `(("python-humanize" ,python-humanize)
-      ("python-requests" ,python-requests)
-      ("python-six" ,python-six)))
+    (list python-humanize python-requests python-six))
    (home-page "https://pypi.org/project/htsget/")
    (synopsis "Python API and command line interface for the GA4GH htsget API")
    (description "This package is a client implementation of the GA4GH htsget
@@ -918,9 +963,7 @@ servers supporting the protocol.")
                 "0wc7z8g8prgdx7n5chjva2fdq03wiwhqisjjxzkjg1j5k5ha7151"))))
     (build-system python-build-system)
     (arguments
-     `(#:modules ((ice-9 ftw)
-                  (srfi srfi-1)
-                  (srfi srfi-26)
+     `(#:modules ((srfi srfi-26)
                   (guix build utils)
                   (guix build python-build-system))
        ;; See https://github.com/daler/pybedtools/issues/192
@@ -940,8 +983,6 @@ servers supporting the protocol.")
              (substitute* "pybedtools/test/test_issues.py"
                (("def test_issue_303")
                 "def _test_issue_303"))))
-         ;; TODO: Remove phase after it's part of PYTHON-BUILD-SYSTEM.
-         ;; build system.
          ;; Force the Cythonization of C++ files to guard against compilation
          ;; problems.
          (add-after 'unpack 'remove-cython-generated-files
@@ -953,40 +994,29 @@ servers supporting the protocol.")
                  (string-take filename (string-index-right filename #\.)))
                (define (cythonized? c/c++-file)
                  (member (strip-extension c/c++-file) cython-sources))
-               (for-each delete-file (filter cythonized? c/c++-files))
-               #t)))
+               (for-each delete-file (filter cythonized? c/c++-files)))))
          (add-after 'remove-cython-generated-files 'generate-cython-extensions
            (lambda _
              (invoke "python" "setup.py" "cythonize")))
          (replace 'check
            (lambda _
-             (let* ((build-root-directory (string-append (getcwd) "/build/"))
-                    (build (string-append
-                            build-root-directory
-                            (find (cut string-prefix? "lib" <>)
-                                  (scandir build-root-directory)))))
-               (setenv "PYTHONPATH"
-                       (string-append build ":" (getenv "PYTHONPATH"))))
              ;; The tests need to be run from elsewhere...
              (mkdir-p "/tmp/test")
              (copy-recursively "pybedtools/test" "/tmp/test")
              (with-directory-excursion "/tmp/test"
                (invoke "pytest" "-v" "--doctest-modules")))))))
     (propagated-inputs
-     `(("bedtools" ,bedtools)
-       ("samtools" ,samtools)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-pysam" ,python-pysam)
-       ("python-pyyaml" ,python-pyyaml)))
-    (native-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-pandas" ,python-pandas)
-       ("python-cython" ,python-cython)
-       ("kentutils" ,kentutils)         ; for bedGraphToBigWig
-       ("python-six" ,python-six)
-       ;; For the test suite.
-       ("python-pytest" ,python-pytest)
-       ("python-psutil" ,python-psutil)))
+     (list bedtools samtools python-matplotlib python-pysam
+           python-pyyaml))
+    (native-inputs
+     (list python-numpy
+           python-pandas
+           python-cython
+           kentutils ; for bedGraphToBigWig
+           python-six
+           ;; For the test suite.
+           python-pytest
+           python-psutil))
     (home-page "https://pythonhosted.org/pybedtools/")
     (synopsis "Python wrapper for BEDtools programs")
     (description
@@ -1001,13 +1031,13 @@ Python.")
     (package
       (inherit pybedtools)
       (native-inputs
-       `(("python2-pathlib" ,python2-pathlib)
-         ,@(package-native-inputs pybedtools))))))
+       (modify-inputs (package-native-inputs pybedtools)
+         (prepend python2-pathlib))))))
 
 (define-public python-biom-format
   (package
     (name "python-biom-format")
-    (version "2.1.7")
+    (version "2.1.10")
     (source
      (origin
        (method git-fetch)
@@ -1019,18 +1049,21 @@ Python.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1rna16lyk5aqhnv0dp77wwaplias93f1vw28ad3jmyw6hwkai05v"))
+         "0i62j6ksmp78ap2dnl969gq6vprc3q87zc8ksj9if8g2603iq6i8"))
        (modules '((guix build utils)))
-       (snippet '(begin
-                   ;; Delete generated C files.
-                   (for-each delete-file (find-files "." "\\.c"))
-                   #t))))
+       ;; Delete generated C files.
+       (snippet
+        '(for-each delete-file (find-files "." "\\.c")))))
     (build-system python-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'use-cython
-           (lambda _ (setenv "USE_CYTHON" "1") #t))
+           (lambda _ (setenv "USE_CYTHON" "1")))
+         (add-after 'unpack 'relax
+           (lambda _
+             (substitute* "setup.py"
+               (("pytest < 5.3.4") "pytest"))))
          (add-after 'unpack 'disable-broken-tests
            (lambda _
              (substitute* "biom/tests/test_cli/test_validate_table.py"
@@ -1042,29 +1075,18 @@ Python.")
                (("^(.+)def test_from_hdf5_issue_731" m indent)
                 (string-append indent
                                "@npt.dec.skipif(True, msg='Guix')\n"
-                               m)))
-             #t))
-         (add-before 'reset-gzip-timestamps 'make-files-writable
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out")))
-               (for-each (lambda (file) (chmod file #o644))
-                         (find-files out "\\.gz"))
-               #t))))))
+                               m))))))))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-scipy" ,python-scipy)
-       ("python-flake8" ,python-flake8)
-       ("python-future" ,python-future)
-       ("python-click" ,python-click)
-       ("python-h5py" ,python-h5py)
-       ;; FIXME: Upgrade to pandas 1.0 when
-       ;; https://github.com/biocore/biom-format/issues/837 is resolved.
-       ("python-pandas" ,python-pandas-0.25)))
-    (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-nose" ,python-nose)))
+     (list python-anndata
+           python-numpy
+           python-scipy
+           python-flake8
+           python-future
+           python-click
+           python-h5py
+           python-pandas))
+    (native-inputs
+     (list python-cython python-pytest python-pytest-cov python-nose))
     (home-page "http://www.biom-format.org")
     (synopsis "Biological Observation Matrix (BIOM) format utilities")
     (description
@@ -1072,23 +1094,7 @@ Python.")
 representing counts of observations e.g. operational taxonomic units, KEGG
 orthology groups or lipid types, in one or more biological samples
 e.g. microbiome samples, genomes, metagenomes.")
-    (license license:bsd-3)
-    (properties `((python2-variant . ,(delay python2-biom-format))))))
-
-(define-public python2-biom-format
-  (let ((base (package-with-python2 (strip-python2-variant python-biom-format))))
-    (package
-      (inherit base)
-      (arguments
-       (substitute-keyword-arguments (package-arguments base)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             ;; Do not require the unmaintained pyqi library.
-             (add-after 'unpack 'remove-pyqi
-               (lambda _
-                 (substitute* "setup.py"
-                   (("install_requires.append\\(\"pyqi\"\\)") "pass"))
-                 #t)))))))))
+    (license license:bsd-3)))
 
 (define-public python-pairtools
   (package
@@ -1119,17 +1125,15 @@ e.g. microbiome samples, genomes, metagenomes.")
              (with-directory-excursion "/tmp"
                (invoke "pytest" "-v")))))))
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-nose" ,python-nose)
-       ("python-pytest" ,python-pytest)))
+     (list python-cython python-nose python-pytest))
     (inputs
      `(("python" ,python-wrapper)))
     (propagated-inputs
-     `(("htslib" ,htslib)               ; for bgzip, looked up in PATH
-       ("samtools" ,samtools)           ; looked up in PATH
-       ("lz4" ,lz4) ; for lz4c
-       ("python-click" ,python-click)
-       ("python-numpy" ,python-numpy)))
+     (list htslib ; for bgzip, looked up in PATH
+           samtools ; looked up in PATH
+           lz4 ; for lz4c
+           python-click
+           python-numpy))
     (home-page "https://github.com/mirnylab/pairtools")
     (synopsis "Process mapped Hi-C data")
     (description "Pairtools is a simple and fast command-line framework to
@@ -1196,12 +1200,9 @@ alignments and perform the following operations:
                            (find-files bin "\\.pl$"))
                  #t)))))))
     (inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-data-stag" ,perl-data-stag)
-       ("perl-libwww" ,perl-libwww)
-       ("perl-uri" ,perl-uri)))
+     (list perl-module-build perl-data-stag perl-libwww perl-uri))
     (native-inputs
-     `(("perl-test-most" ,perl-test-most)))
+     (list perl-test-most))
     (home-page "https://metacpan.org/release/BioPerl")
     (synopsis "Bioinformatics toolkit")
     (description
@@ -1229,11 +1230,9 @@ provide a coordinated and extensible framework to do computational biology.")
          "0hjg0igfkpvh27zdkdr6pa7cqm9n6r7cwz0np74cl4wmawgvr9hj"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("pkg-config" ,pkg-config)))
+     (list perl-module-build pkg-config))
     (propagated-inputs
-     `(("bioperl-minimal" ,bioperl-minimal)
-       ("htslib" ,htslib-1.9)))
+     (list bioperl-minimal htslib-1.9))
     (home-page "https://metacpan.org/release/Bio-DB-HTS")
     (synopsis "Perl interface to HTS library for DNA sequencing")
     (description "This is a Perl interface to the HTS library for DNA
@@ -1243,14 +1242,14 @@ sequencing.")
 (define-public python-biopython
   (package
     (name "python-biopython")
-    (version "1.73")
+    (version "1.76")
     (source (origin
               (method url-fetch)
               ;; use PyPi rather than biopython.org to ease updating
               (uri (pypi-uri "biopython" version))
               (sha256
                (base32
-                "1q55jhf76z3k6is3psis0ckbki7df26x7dikpcc3vhk1vhkwribh"))))
+                "0wlch9xpa0fpgjzyxi6jsfca6iakaq9a05927xg8vqnmvaccnwrq"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -1259,7 +1258,7 @@ sequencing.")
            ;; Some tests require a home directory to be set.
            (lambda _ (setenv "HOME" "/tmp") #t)))))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (home-page "https://biopython.org/")
     (synopsis "Tools for biological computation in Python")
     (description
@@ -1271,6 +1270,18 @@ dealing with alignments; code making it easy to split up parallelizable tasks
 into separate processes; and more.")
     (license (license:non-copyleft "http://www.biopython.org/DIST/LICENSE"))))
 
+(define-public python-biopython-1.73
+  (package
+    (inherit python-biopython)
+    (version "1.73")
+    (source (origin
+              (method url-fetch)
+              ;; use PyPi rather than biopython.org to ease updating
+              (uri (pypi-uri "biopython" version))
+              (sha256
+               (base32
+                "1q55jhf76z3k6is3psis0ckbki7df26x7dikpcc3vhk1vhkwribh"))))))
+
 (define-public python2-biopython
   (package-with-python2 python-biopython))
 
@@ -1297,6 +1308,261 @@ relying on a complex dependency tree.")
 (define-public python2-fastalite
   (package-with-python2 python-fastalite))
 
+(define-public biosoup
+  (package
+    (name "biosoup")
+    (version "0.10.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/rvaser/biosoup")
+             ;; Corresponds to version 0.10.0
+             (commit "38181f09854ff42cbd9632200a2ec9fb37a4b7b6")))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "02hvyka703zagx0nvv2yx3dkc748zc8g6qbrpya7r8kfkcl7y8hw"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "./bin/biosoup_test")))))))
+    (native-inputs
+     (list googletest))
+    (home-page "https://github.com/rvaser/biosoup")
+    (synopsis "C++ support library for bioinformatics tools")
+    (description "Biosoup is a C++ collection of header-only data structures
+used for storage and logging in bioinformatics tools.")
+    (license license:expat)))
+
+(define-public bioparser
+  (package
+    (name "bioparser")
+    (version "3.0.13")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/rvaser/bioparser")
+             ;; Corresponds to tag 3.0.13
+             (commit "13341e6e0855c6b358ffcea6dad216e1009e1287")))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0c5p2dl8jb12ci9f427jzrmmm9cgvc1k4fxsn2ggkfsin6r1r82i"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "./bin/bioparser_test")))))))
+    (inputs
+     (list biosoup))
+    (propagated-inputs
+     (list zlib))
+    (native-inputs
+     (list googletest))
+    (home-page "https://github.com/rvaser/bioparser")
+    (synopsis "C++ library for parsing several formats in bioinformatics")
+    (description "Bioparser is a C++ header only parsing library for several
+bioinformatics formats (FASTA/Q, MHAP/PAF/SAM), with support for zlib
+compressed files.")
+    (license license:expat)))
+
+(define-public circtools
+  (package
+    (name "circtools")
+    (version "1.0.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/Kevinzjy/circtools")
+             ;; Corresponds to tag v1.0.0
+             (commit "79380de59013601021ca3b1352d6f64d2fb89646")
+             (recursive? #t)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0wg1s927g32k25j967kfr8l30nmr4c0p4zvy5igvy7cs6chd60lh"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'make-writable
+           (lambda _
+             (for-each make-file-writable (find-files "."))))
+         (add-after 'unpack 'prepare-spoa-dependencies
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "vendor/spoa/CMakeLists.txt"
+               (("find_package\\(bioparser 3.0.13 QUIET\\)")
+                "find_package(bioparser 3.0.13 CONFIG)")
+               (("find_package\\(biosoup 0.10.0 QUIET\\)")
+                "find_package(biosoup 0.10.0 CONFIG)")
+               (("GTest_FOUND") "TRUE")))))
+       #:cargo-inputs
+       (("rust-anyhow" ,rust-anyhow-1)
+        ("rust-bio" ,rust-bio-0.33)
+        ("rust-chrono" ,rust-chrono-0.4)
+        ("rust-docopt" ,rust-docopt-1)
+        ("rust-flate2" ,rust-flate2-1)
+        ("rust-indicatif" ,rust-indicatif-0.15)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-seq-io" ,rust-seq-io-0.3))))
+    (inputs
+     (list bioparser biosoup))
+    (native-inputs
+     (list cmake pkg-config googletest))
+    (home-page "https://github.com/Kevinzjy/circtools")
+    (synopsis "Accelerating functions in CIRI toolkit")
+    (description "This package provides accelerated functions for the CIRI
+toolkit.  It also provides the @code{ccs} executable to scan for circular
+consensus sequences.")
+    (license license:expat)))
+
+(define-public ciri-long
+  (package
+    (name "ciri-long")
+    (version "1.0.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/bioinfo-biols/CIRI-long")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "10k88i1fcqchrrjv82rmylwvbwqfba0n51palhig9hsg71xs0dbi"))
+       ;; Delete bundled binary
+       (snippet '(delete-file "libs/ccs"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'relax-requirements
+           (lambda _
+             (substitute* "setup.py"
+               (("'argparse[^']*',") "") ; only for python2
+               (("==") ">="))))
+         (add-before 'build 'build-libssw
+           (lambda _
+             (with-directory-excursion "libs/striped_smith_waterman"
+               (invoke "make" "libssw.so"))))
+         (add-before 'build 'fix-reference-to-ccs
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "CIRI_long/pipeline.py"
+               (("'ccs -i")
+                (string-append "'"
+                               (assoc-ref inputs "circtools") "/bin/ccs"
+                               " -i")))
+             ;; yuck!
+             (substitute* "CIRI_long/main.py"
+               (("os.chmod\\(lib_path.*") "")))))))
+    (inputs
+     (list circtools
+           python-biopython
+           python-bwapy
+           python-levenshtein
+           python-mappy
+           python-numpy
+           python-pandas
+           python-pysam
+           python-pyspoa
+           python-scikit-learn
+           python-scipy))
+    (native-inputs
+     (list python-cython python-nose python-setuptools))
+    (home-page "https://ciri-cookbook.readthedocs.io/")
+    (synopsis "Circular RNA identification for Nanopore sequencing")
+    (description "CIRI-long is a package for circular RNA identification using
+long-read sequencing data.")
+    (license license:expat)))
+
+(define-public qtltools
+  (package
+    (name "qtltools")
+    (version "1.3.1")
+    (source (origin
+              (method url-fetch/tarbomb)
+              (uri (string-append "https://qtltools.github.io/qtltools/"
+                                  "binaries/QTLtools_" version
+                                  "_source.tar.gz"))
+              (sha256
+               (base32
+                "13gdry5l43abn3464fmk8qzrxgxnxah2612r66p9dzhhl92j30cd"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f                      ; no tests included
+       #:make-flags
+       ,#~(list (string-append "BOOST_INC="
+                               #$(this-package-input "boost") "/include")
+                (string-append "BOOST_LIB="
+                               #$(this-package-input "boost") "/lib")
+                (string-append "HTSLD_INC="
+                               #$(this-package-input "htslib") "/include")
+                (string-append "HTSLD_LIB="
+                               #$(this-package-input "htslib") "/lib")
+                (string-append "RMATH_INC="
+                               #$(this-package-input "rmath-standalone")
+                               "/include")
+                (string-append "RMATH_LIB="
+                               #$(this-package-input "rmath-standalone")
+                               "/lib"))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-linkage
+           (lambda _
+             (substitute* "qtltools/Makefile"
+               (("libboost_iostreams.a")
+                "libboost_iostreams.so")
+               (("libboost_program_options.a")
+                "libboost_program_options.so")
+               (("-lblas") "-lopenblas"))))
+         (add-before 'build 'chdir
+           (lambda _ (chdir "qtltools")))
+         (replace 'configure
+           (lambda _
+             (substitute* "qtltools/Makefile"
+               (("LIB_FLAGS=-lz")
+                "LIB_FLAGS=-lz -lcrypto -lssl")
+               (("LIB_FILES=\\$\\(RMATH_LIB\\)/libRmath.a \
+\\$\\(HTSLD_LIB\\)/libhts.a \
+\\$\\(BOOST_LIB\\)/libboost_iostreams.a \
+\\$\\(BOOST_LIB\\)/libboost_program_options.a")
+                "LIB_FILES=$(RMATH_LIB)/libRmath.so \
+$(HTSLD_LIB)/libhts.so \
+$(BOOST_LIB)/libboost_iostreams.so \
+$(BOOST_LIB)/libboost_program_options.so"))))
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((bin (string-append (assoc-ref outputs "out") "/bin")))
+               (mkdir-p bin)
+               (install-file "bin/QTLtools" bin)))))))
+    (inputs
+     (list curl
+           gsl
+           boost
+           rmath-standalone
+           htslib-1.3
+           openssl
+           openblas
+           zlib))
+    (home-page "https://qtltools.github.io/qtltools/")
+    (synopsis "Tool set for molecular QTL discovery and analysis")
+    (description "QTLtools is a tool set for molecular QTL discovery
+and analysis.  It allows going from the raw genetic sequence data to
+collection of molecular @dfn{Quantitative Trait Loci} (QTLs) in few
+easy-to-perform steps.")
+    (license license:gpl3+)))
+
 (define-public bpp-core
   ;; The last release was in 2014 and the recommended way to install from source
   ;; is to clone the git repository, so we do this.
@@ -1351,8 +1617,7 @@ providing them a set of re-usable tools.")
          ;; so the tests fail.
          #:out-of-source? #f))
       (inputs
-       `(("bpp-core" ,bpp-core)
-         ("bpp-seq" ,bpp-seq)))
+       (list bpp-core bpp-seq))
       (home-page "http://biopp.univ-montp2.fr")
       (synopsis "Bio++ phylogenetic Library")
       (description
@@ -1383,8 +1648,7 @@ library provides phylogenetics-related modules.")
        `(#:parallel-build? #f
          #:tests? #f)) ; There are no tests.
       (inputs
-       `(("bpp-core" ,bpp-core)
-         ("bpp-seq" ,bpp-seq)))
+       (list bpp-core bpp-seq))
       (home-page "http://biopp.univ-montp2.fr")
       (synopsis "Bio++ population genetics library")
       (description
@@ -1417,7 +1681,7 @@ library provides population genetics-related modules.")
          ;; so the tests fail.
          #:out-of-source? #f))
       (inputs
-       `(("bpp-core" ,bpp-core)))
+       (list bpp-core))
       (home-page "http://biopp.univ-montp2.fr")
       (synopsis "Bio++ sequence library")
       (description
@@ -1448,9 +1712,7 @@ library provides sequence-related modules.")
        `(#:parallel-build? #f
          #:tests? #f)) ; There are no tests.
       (native-inputs
-       `(("groff" ,groff)
-         ("man-db" ,man-db)
-         ("texinfo" ,texinfo)))
+       (list groff man-db texinfo))
       (inputs
        `(("bpp-core" ,bpp-core)
          ("bpp-seq" ,bpp-seq)
@@ -1589,7 +1851,7 @@ package provides command line tools using the Bio++ library.")
        ("perl" ,perl)
        ("python" ,python-wrapper)))
     (native-inputs
-     `(("cpio" ,cpio)))
+     (list cpio))
     (home-page "https://blast.ncbi.nlm.nih.gov")
     (synopsis "Basic local alignment search tool")
     (description
@@ -1636,28 +1898,26 @@ confidence to have in an alignment.")
                   (delete-file-recursively "pigz")
                   (delete-file-recursively "google-sparsehash")
                   (delete-file-recursively "zlib")
-                  (delete-file-recursively ".git")
-                  #t))))
+                  (delete-file-recursively ".git")))))
     (build-system gnu-build-system)
     (arguments
-     '(#:tests? #f ;no "check" target
+     `(#:tests? #f ;no "check" target
        #:make-flags
-       (list (string-append "ZLIB="
-                            (assoc-ref %build-inputs "zlib:static")
-                            "/lib/libz.a")
-             (string-append "LDFLAGS="
-                            (string-join '("-lboost_filesystem"
-                                           "-lboost_system"
-                                           "-lboost_iostreams"
-                                           "-lz"
-                                           "-fopenmp"))))
+       ,#~(list (string-append "ZLIB="
+                               #$(this-package-input "zlib")
+                               "/lib/libz.so")
+                (string-append "LDFLAGS="
+                               (string-join '("-lboost_filesystem"
+                                              "-lboost_system"
+                                              "-lboost_iostreams"
+                                              "-lz"
+                                              "-fopenmp"))))
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'do-not-build-bundled-pigz
           (lambda* (#:key inputs outputs #:allow-other-keys)
             (substitute* "Makefile"
-              (("cd pigz/pigz-2.3.3; make") ""))
-            #t))
+              (("cd pigz/pigz-2.3.3; make") ""))))
          (add-after 'unpack 'patch-paths-to-executables
           (lambda* (#:key inputs outputs #:allow-other-keys)
             (substitute* "parse_args.cpp"
@@ -1668,25 +1928,18 @@ confidence to have in an alignment.")
               (("pigz_binary = .*")
                (string-append "pigz_binary = \""
                               (assoc-ref inputs "pigz")
-                              "/bin/pigz\";")))
-            #t))
+                              "/bin/pigz\";")))))
          (replace 'install
           (lambda* (#:key outputs #:allow-other-keys)
             (let ((bin (string-append (assoc-ref outputs "out") "/bin/")))
               (for-each (lambda (file)
                           (install-file file bin))
-                        '("bless" "kmc/bin/kmc"))
-              #t)))
+                        '("bless" "kmc/bin/kmc")))))
          (delete 'configure))))
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (inputs
-     `(("openmpi" ,openmpi)
-       ("boost" ,boost)
-       ("sparsehash" ,sparsehash)
-       ("pigz" ,pigz)
-       ("zlib:static" ,zlib "static")
-       ("zlib" ,zlib)))
+     (list openmpi boost sparsehash pigz zlib))
     (supported-systems '("x86_64-linux"))
     (home-page "https://sourceforge.net/p/bless-ec/wiki/Home/")
     (synopsis "Bloom-filter-based error correction tool for NGS reads")
@@ -1719,33 +1972,33 @@ errors at the end of reads.")
                   (substitute* "Makefile"
                     ;; replace BUILD_HOST and BUILD_TIME for deterministic build
                     (("-DBUILD_HOST=.*") "-DBUILD_HOST=\"\\\"guix\\\"\"")
-                    (("-DBUILD_TIME=.*") "-DBUILD_TIME=\"\\\"0\\\"\""))
-                  #t))))
+                    (("-DBUILD_TIME=.*") "-DBUILD_TIME=\"\\\"0\\\"\""))))))
     (build-system gnu-build-system)
     (arguments
-     '(#:make-flags
-       (list "allall"
-             "WITH_TBB=1"
-             (string-append "prefix=" (assoc-ref %outputs "out")))
+     `(#:make-flags
+       ,#~(list "allall"
+                "WITH_TBB=1"
+                (string-append "prefix=" #$output))
        #:phases
        (modify-phases %standard-phases
-         (delete 'configure)
+         (replace 'configure
+           (lambda _
+             ;; This "extended character" is not considered valid.
+             (substitute* "processor_support.h"
+               (("“") "\"")
+               (("”") "\""))))
          (replace 'check
            (lambda _
              (invoke "perl"
                      "scripts/test/simple_tests.pl"
                      "--bowtie2=./bowtie2"
-                     "--bowtie2-build=./bowtie2-build")
-             #t)))))
+                     "--bowtie2-build=./bowtie2-build"))))))
     (inputs
-     `(("tbb" ,tbb)
+     `(("tbb" ,tbb-2020)
        ("zlib" ,zlib)
        ("python" ,python-wrapper)))
     (native-inputs
-     `(("perl" ,perl)
-       ("perl-clone" ,perl-clone)
-       ("perl-test-deep" ,perl-test-deep)
-       ("perl-test-simple" ,perl-test-simple)))
+     (list perl perl-clone perl-test-deep perl-test-simple))
     (home-page "http://bowtie-bio.sourceforge.net/bowtie2/index.shtml")
     (synopsis "Fast and sensitive nucleotide sequence read aligner")
     (description
@@ -1778,17 +2031,15 @@ gapped, local, and paired-end alignment modes.")
                   (("-DBUILD_TIME=.*") "-DBUILD_TIME=\"\\\"0\\\"\"")))))
     (build-system gnu-build-system)
     (arguments
-     '(#:tests? #f                      ; no "check" target
+     `(#:tests? #f                      ; no "check" target
        #:make-flags
-       (list "CC=gcc" "all"
-             (string-append "prefix=" (assoc-ref %outputs "out")))
+       ,#~(list "CC=gcc" "all"
+                (string-append "prefix=" #$output))
        #:phases
        (modify-phases %standard-phases
          (delete 'configure))))
     (inputs
-     `(("python-wrapper" ,python-wrapper)
-       ("tbb" ,tbb)
-       ("zlib" ,zlib)))
+     (list python-wrapper tbb-2020 zlib))
     (supported-systems '("x86_64-linux"))
     (home-page "http://bowtie-bio.sourceforge.net/index.shtml")
     (synopsis "Fast aligner for short nucleotide sequence reads")
@@ -1894,6 +2145,7 @@ splice junctions between exons.")
     (build-system gnu-build-system)
     (arguments
      '(#:tests? #f ;no "check" target
+       #:make-flags '("CFLAGS=-fcommon")
        #:phases
        (modify-phases %standard-phases
          (replace 'install
@@ -1906,11 +2158,10 @@ splice junctions between exons.")
                (install-file "bwa" bin)
                (install-file "libbwa.a" lib)
                (install-file "README.md" doc)
-               (install-file "bwa.1" man))
-             #t))
+               (install-file "bwa.1" man))))
            ;; no "configure" script
           (delete 'configure))))
-    (inputs `(("zlib" ,zlib)))
+    (inputs (list zlib))
     ;; Non-portable SSE instructions are used so building fails on platforms
     ;; other than x86_64.
     (supported-systems '("x86_64-linux"))
@@ -1942,10 +2193,16 @@ and more accurate.  BWA-MEM also has better performance than BWA-backtrack for
                (base32
                 "076c4q0cdqz8jgylb067y9zmvxglppnzi3qiscn0xiypgc6lgb5r"))))
     (build-system gnu-build-system)
+    (arguments
+     (substitute-keyword-arguments (package-arguments bwa)
+       ((#:phases phases '%standard-phases)
+        `(modify-phases ,phases
+           (add-after 'unpack 'patch-C-error
+             (lambda _
+               (substitute* "pssm.c"
+                 (("inline int map") "int map"))))))))
     (inputs
-     `(("gdsl" ,gdsl)
-       ("zlib" ,zlib)
-       ("perl" ,perl)))
+     (list gdsl zlib perl))
     (home-page "http://bwa-pssm.binf.ku.dk/")
     (synopsis "Burrows-Wheeler transform-based probabilistic short read mapper")
     (description
@@ -1984,9 +2241,9 @@ well as many of the command line options.")
                (("^checkX.*") ""))
              #t)))))
     (inputs
-     `(("bwa" ,bwa)))
+     (list bwa))
     (native-inputs
-     `(("python-toolshed" ,python-toolshed)))
+     (list python-toolshed))
     (home-page "https://github.com/brentp/bwa-meth")
     (synopsis "Fast and accurante alignment of BS-Seq reads")
     (description
@@ -2002,25 +2259,23 @@ off-target reads for a capture method that targets CpG-rich region.")
 (define-public python-bx-python
   (package
     (name "python-bx-python")
-    (version "0.8.2")
+    (version "0.8.12")
     (source (origin
-              (method url-fetch)
-              (uri (pypi-uri "bx-python" version))
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/bxlab/bx-python")
+                    (commit "f4e6a5c93e719db69b5798b6fdd9b167da358316")))
+              (file-name (git-file-name name version))
               (sha256
                (base32
-                "11kksg2rbzihpmcid823xvg42xi88m7sz58rzk29abybkxy0rszs"))))
+                "0mclahslz34vq9x424jmzsxk0nmpm1j716fa8h3zwr9ssvch7skc"))))
     (build-system python-build-system)
-    ;; Tests fail because test data are not included
-    (arguments '(#:tests? #f))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-six" ,python-six)))
+     (list python-numpy))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (native-inputs
-     `(("python-lzo" ,python-lzo)
-       ("python-nose" ,python-nose)
-       ("python-cython" ,python-cython)))
+     (list python-lzo python-nose python-cython))
     (home-page "https://github.com/bxlab/bx-python")
     (synopsis "Tools for manipulating biological data")
     (description
@@ -2028,9 +2283,6 @@ off-target reads for a capture method that targets CpG-rich region.")
 multiple sequence alignments.")
     (license license:expat)))
 
-(define-public python2-bx-python
-  (package-with-python2 python-bx-python))
-
 (define-public python-pyega3
   (package
     (name "python-pyega3")
@@ -2045,13 +2297,9 @@ multiple sequence alignments.")
     (arguments
      `(#:tests? #f)) ; The tests require network access.
     (native-inputs
-     `(("python-psutil" ,python-psutil)
-       ("python-htsget" ,python-htsget)))
+     (list python-psutil python-htsget))
     (propagated-inputs
-     `(("python-requests" ,python-requests)
-       ("python-tqdm" ,python-tqdm)
-       ("python-urllib3" ,python-urllib3)
-       ("python-responses" ,python-responses)))
+     (list python-requests python-tqdm python-urllib3 python-responses))
     (home-page "https://github.com/EGA-archive/ega-download-client")
     (synopsis "Python client for EGA")
     (description "This package is a python-based tool for viewing and
@@ -2073,7 +2321,7 @@ has several key features:
 (define-public python-pysam
   (package
     (name "python-pysam")
-    (version "0.16.0.1")
+    (version "0.18.0")
     (source (origin
               (method git-fetch)
               ;; Test data is missing on PyPi.
@@ -2083,20 +2331,14 @@ has several key features:
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "168bwwm8c2k22m7paip8q0yajyl7xdxgnik0bgjl7rhqg0majz0f"))
+                "042ca27r6634xg2ixgvq1079cp714wmm6ml7bwc1snn0wxxzywfg"))
               (modules '((guix build utils)))
               (snippet '(begin
-                          ;; Drop bundled htslib. TODO: Also remove samtools
-                          ;; and bcftools.
-                          (delete-file-recursively "htslib")
-                          #t))))
+                          ;; FIXME: Unbundle samtools and bcftools.
+                          (delete-file-recursively "htslib")))))
     (build-system python-build-system)
     (arguments
-     `(#:modules ((ice-9 ftw)
-                  (srfi srfi-26)
-                  (guix build python-build-system)
-                  (guix build utils))
-       #:phases
+     `(#:phases
        (modify-phases %standard-phases
          (add-before 'build 'set-flags
            (lambda* (#:key inputs #:allow-other-keys)
@@ -2106,47 +2348,27 @@ has several key features:
              (setenv "HTSLIB_INCLUDE_DIR"
                      (string-append (assoc-ref inputs "htslib") "/include"))
              (setenv "LDFLAGS" "-lncurses")
-             (setenv "CFLAGS" "-D_CURSES_LIB=1")
-             #t))
+             (setenv "CFLAGS" "-D_CURSES_LIB=1")))
          (replace 'check
            (lambda* (#:key tests? #:allow-other-keys)
-             ;; Failing test removed in the next release.
-             (delete-file "tests/AlignmentFile_test.py")
-             ;; Add first subdirectory of "build" directory to PYTHONPATH.
-             (setenv "PYTHONPATH"
-                     (string-append
-                      (getenv "PYTHONPATH")
-                      ":" (getcwd) "/build/"
-                      (car (scandir "build"
-                                    (negate (cut string-prefix? "." <>))))))
              (when tests?
                ;; Step out of source dir so python does not import from CWD.
                (with-directory-excursion "tests"
                  (setenv "HOME" "/tmp")
                  (invoke "make" "-C" "pysam_data")
                  (invoke "make" "-C" "cbcf_data")
-                 (invoke "pytest" "-k"
-                         (string-append
-                           ;; requires network access.
-                           "not FileHTTP"
-                           ;; bug in test suite with samtools update
-                           ;; https://github.com/pysam-developers/pysam/issues/961
-                           " and not TestHeaderBAM"
-                           " and not TestHeaderCRAM"
-                           " and not test_text_processing")))))))))
+                 ;; The FileHTTP test requires network access.
+                 (invoke "pytest" "-k" "not FileHTTP"))))))))
     (propagated-inputs
-     `(("htslib" ,htslib-1.10)))    ; Included from installed header files.
+     (list htslib))                    ; Included from installed header files.
     (inputs
-     `(("ncurses" ,ncurses)
-       ("curl" ,curl)
-       ("zlib" ,zlib)))
+     (list ncurses curl zlib))
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-pytest" ,python-pytest)
-       ;; Dependencies below are are for tests only.
-       ("samtools" ,samtools-1.10)
-       ("bcftools" ,bcftools-1.10)
-       ("python-nose" ,python-nose)))
+     (list python-cython
+           python-pytest
+           ;; Dependencies below are are for tests only.
+           samtools
+           bcftools))
     (home-page "https://github.com/pysam-developers/pysam")
     (synopsis "Python bindings to the SAMtools C API")
     (description
@@ -2175,7 +2397,7 @@ also includes an interface for tabix.")
     ;; Tests are not included
     (arguments '(#:tests? #f))
     (native-inputs
-     `(("python-sphinx" ,python-sphinx)))
+     (list python-sphinx))
     (home-page "https://github.com/benjschiller/twobitreader")
     (synopsis "Python library for reading .2bit files")
     (description
@@ -2183,35 +2405,31 @@ also includes an interface for tabix.")
 UCSC genome browser.")
     (license license:artistic2.0)))
 
-(define-public python2-twobitreader
-  (package-with-python2 python-twobitreader))
-
 (define-public python-plastid
   (package
     (name "python-plastid")
-    (version "0.4.8")
+    (version "0.5.1")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "plastid" version))
               (sha256
                (base32
-                "0l24dd3q66if8yj042m4s0g95n6acn7im1imqd3p6h8ns43kxhj8"))))
+                "1a7mdky2xw02y88l51f58pqk8039ahdp6sblj3zx58zarmy2pqyl"))))
     (build-system python-build-system)
     (arguments
      ;; Some test files are not included.
      `(#:tests? #f))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-scipy" ,python-scipy)
-       ("python-pandas" ,python-pandas)
-       ("python-pysam" ,python-pysam)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-biopython" ,python-biopython)
-       ("python-twobitreader" ,python-twobitreader)
-       ("python-termcolor" ,python-termcolor)))
-    (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-nose" ,python-nose)))
+     (list python-numpy
+           python-scipy
+           python-pandas
+           python-pysam
+           python-matplotlib
+           python-biopython
+           python-twobitreader
+           python-termcolor))
+    (native-inputs
+     (list python-cython python-nose))
     (home-page "https://github.com/joshuagryphon/plastid")
     (synopsis "Python library for genomic analysis")
     (description
@@ -2219,9 +2437,6 @@ UCSC genome browser.")
 high-throughput sequencing data – with an emphasis on simplicity.")
     (license license:bsd-3)))
 
-(define-public python2-plastid
-  (package-with-python2 python-plastid))
-
 (define-public tetoolkit
   (package
     (name "tetoolkit")
@@ -2271,12 +2486,12 @@ high-throughput sequencing data – with an emphasis on simplicity.")
                   "TEcount")))
              #t)))))
     (inputs
-     `(("coreutils" ,coreutils)
-       ("bedtools" ,bedtools)
-       ("python-argparse" ,python2-argparse)
-       ("python-pysam" ,python2-pysam)
-       ("r-minimal" ,r-minimal)
-       ("r-deseq2" ,r-deseq2)))
+     (list coreutils
+           bedtools
+           python2-argparse
+           python2-pysam
+           r-minimal
+           r-deseq2))
     (home-page "https://github.com/mhammell-laboratory/tetoolkit")
     (synopsis "Transposable elements in differential enrichment analysis")
     (description
@@ -2306,9 +2521,9 @@ are not included due to their size.")
      `(#:tests? #f ; there are no tests
        #:make-flags
        ;; Executables are copied directly to the PREFIX.
-       (list (string-append "PREFIX=" (assoc-ref %outputs "out") "/bin")
-             ;; Support longer sequences (e.g. Pacbio sequences)
-             "MAX_SEQ=60000000")
+       ,#~(list (string-append "PREFIX=" #$output "/bin")
+                ;; Support longer sequences (e.g. Pacbio sequences)
+                "MAX_SEQ=60000000")
        #:phases
        (modify-phases %standard-phases
          ;; No "configure" script
@@ -2328,7 +2543,7 @@ are not included due to their size.")
              (mkdir-p (string-append (assoc-ref outputs "out") "/bin"))
              #t)))))
     (inputs
-     `(("perl" ,perl)))
+     (list perl))
     (home-page "http://weizhongli-lab.org/cd-hit/")
     (synopsis "Cluster and compare protein or nucleotide sequences")
     (description
@@ -2342,7 +2557,7 @@ databases.")
 (define-public clipper
   (package
     (name "clipper")
-    (version "2.0")
+    (version "2.0.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -2351,34 +2566,55 @@ databases.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1bcag4lb5bkzsj2vg7lrq24aw6yfgq275ifrbhd82l7kqgbbjbkv"))))
+                "0508rgnfjk5ar5d1mjbjyrnarv4kw9ksq0m3jw2bmgabmb5v6ikk"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  ;; Delete pre-compiled files.
+                  (delete-file "clipper/src/peaks.so")))))
     (build-system python-build-system)
     (arguments
-     `(#:phases
+     `(#:tests? #false
+       #:phases
        (modify-phases %standard-phases
-         (add-before 'reset-gzip-timestamps 'make-files-writable
-           (lambda* (#:key outputs #:allow-other-keys)
-             ;; Make sure .gz files are writable so that the
-             ;; 'reset-gzip-timestamps' phase can do its work.
-             (let ((out (assoc-ref outputs "out")))
-               (for-each make-file-writable
-                         (find-files out "\\.gz$"))
-               #t))))))
-    (inputs
-     `(("htseq" ,htseq)
-       ("python-pybedtools" ,python-pybedtools)
-       ("python-cython" ,python-cython)
-       ("python-scikit-learn" ,python-scikit-learn)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-pandas" ,python-pandas)
-       ("python-pysam" ,python-pysam)
-       ("python-numpy" ,python-numpy)
-       ("python-scipy" ,python-scipy)))
-    (native-inputs
-     `(("python-setuptools-git" ,python-setuptools-git)
-       ("python-mock" ,python-mock)   ; for tests
-       ("python-nose" ,python-nose)   ; for tests
-       ("python-pytz" ,python-pytz))) ; for tests
+         (add-after 'unpack 'use-python3-for-cython
+           (lambda _
+             (substitute* "setup.py"
+               (("^setup")
+                "\
+peaks.cython_directives = {'language_level': '3'}
+readsToWiggle.cython_directives = {'language_level': '3'}
+setup"))))
+         (add-after 'unpack 'disable-nondeterministic-test
+           (lambda _
+             ;; This test fails/succeeds non-deterministically.
+             (substitute* "clipper/test/test_call_peak.py"
+               (("test_get_FDR_cutoff_mean") "_test_get_FDR_cutoff_mean"))))
+         ;; This doesn't work because "usage" is executed, and that calls
+         ;; exit(8).
+         (replace 'check
+           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (with-directory-excursion "clipper/test"
+                 (invoke "python" "-m" "unittest")))))
+         ;; This is not a library
+         (delete 'sanity-check))))
+    (inputs
+     (list htseq
+           python-pybedtools
+           python-cython
+           python-scikit-learn
+           python-matplotlib
+           python-pandas
+           python-pysam
+           python-numpy
+           python-scipy))
+    (native-inputs
+     (list python-setuptools-git
+           python-mock ; for tests
+           python-nose ; for tests
+           python-pytz)) ; for tests
     (home-page "https://github.com/YeoLab/clipper")
     (synopsis "CLIP peak enrichment recognition")
     (description
@@ -2414,7 +2650,7 @@ databases.")
                (install-file "CodingQuarry" bin)
                (install-file "CufflinksGTF_to_CodingQuarryGFF3.py" bin))
              #t)))))
-    (inputs `(("openmpi" ,openmpi)))
+    (inputs (list openmpi))
     (native-search-paths
      (list (search-path-specification
             (variable "QUARRY_PATH")
@@ -2426,77 +2662,6 @@ gene predictor designed to work with assembled, aligned RNA-seq transcripts.")
     (home-page "https://sourceforge.net/projects/codingquarry/")
     (license license:gpl3+)))
 
-(define-public couger
-  (package
-    (name "couger")
-    (version "1.8.2")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "http://couger.oit.duke.edu/static/assets/COUGER"
-                    version ".zip"))
-              (sha256
-               (base32
-                "04p2b14nmhzxw5h72mpzdhalv21bx4w9b87z0wpw0xzxpysyncmq"))))
-    (build-system gnu-build-system)
-    (arguments
-     `(#:tests? #f
-       #:phases
-       (modify-phases %standard-phases
-         (delete 'configure)
-         (delete 'build)
-         (replace
-          'install
-          (lambda* (#:key outputs #:allow-other-keys)
-            (let* ((out (assoc-ref outputs "out"))
-                   (bin (string-append out "/bin")))
-              (copy-recursively "src" (string-append out "/src"))
-              (mkdir bin)
-              ;; Add "src" directory to module lookup path.
-              (substitute* "couger"
-                (("from argparse")
-                 (string-append "import sys\nsys.path.append(\""
-                                out "\")\nfrom argparse")))
-              (install-file "couger" bin))
-            #t))
-         (add-after
-          'install 'wrap-program
-          (lambda* (#:key inputs outputs #:allow-other-keys)
-            ;; Make sure 'couger' runs with the correct PYTHONPATH.
-            (let* ((out (assoc-ref outputs "out"))
-                   (path (getenv "PYTHONPATH")))
-              (wrap-program (string-append out "/bin/couger")
-                `("PYTHONPATH" ":" prefix (,path))))
-            #t)))))
-    (inputs
-     `(("python" ,python-2)
-       ("python2-pillow" ,python2-pillow)
-       ("python2-numpy" ,python2-numpy)
-       ("python2-scipy" ,python2-scipy)
-       ("python2-matplotlib" ,python2-matplotlib)))
-    (propagated-inputs
-     `(("r-minimal" ,r-minimal)
-       ("libsvm" ,libsvm)
-       ("randomjungle" ,randomjungle)))
-    (native-inputs
-     `(("unzip" ,unzip)))
-    (home-page "http://couger.oit.duke.edu")
-    (synopsis "Identify co-factors in sets of genomic regions")
-    (description
-     "COUGER can be applied to any two sets of genomic regions bound by
-paralogous TFs (e.g., regions derived from ChIP-seq experiments) to identify
-putative co-factors that provide specificity to each TF.  The framework
-determines the genomic targets uniquely-bound by each TF, and identifies a
-small set of co-factors that best explain the in vivo binding differences
-between the two TFs.
-
-COUGER uses classification algorithms (support vector machines and random
-forests) with features that reflect the DNA binding specificities of putative
-co-factors.  The features are generated either from high-throughput TF-DNA
-binding data (from protein binding microarray experiments), or from large
-collections of DNA motifs.")
-    (license license:gpl3+)))
-
 (define-public clustal-omega
   (package
     (name "clustal-omega")
@@ -2510,7 +2675,7 @@ collections of DNA motifs.")
                 "1vm30mzncwdv881vrcwg11vzvrsmwy4wg80j5i0lcfk6dlld50w6"))))
     (build-system gnu-build-system)
     (inputs
-     `(("argtable" ,argtable)))
+     (list argtable))
     (home-page "http://www.clustal.org/omega/")
     (synopsis "Multiple sequence aligner for protein and DNA/RNA")
     (description
@@ -2523,23 +2688,25 @@ time.")
 (define-public crossmap
   (package
     (name "crossmap")
-    (version "0.3.8")
+    (version "0.6.1")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "CrossMap" version))
               (sha256
                (base32
-                "1sb2f2qbxya4fzw3yjl09vbrs8vfmw22zrygrvz004sf9gb1vkan"))))
+                "0hqminh5wn1p3x481jbyc7gmncp5xc196hpvki7k25vzbryhwcix"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  ;; Delete compiled Python files.
+                  (for-each delete-file (find-files "." "\\.pyc$"))
+                  (delete-file-recursively ".eggs")))))
     (build-system python-build-system)
     (inputs
-     `(("python-bx-python" ,python-bx-python)
-       ("python-numpy" ,python-numpy)
-       ("python-pybigwig" ,python-pybigwig)
-       ("python-pysam" ,python-pysam)
-       ("zlib" ,zlib)))
+     (list python-bx-python python-numpy python-pybigwig python-pysam
+           zlib))
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-nose" ,python-nose)))
+     (list python-cython python-nose))
     (home-page "http://crossmap.sourceforge.net/")
     (synopsis "Convert genome coordinates between assemblies")
     (description
@@ -2551,19 +2718,17 @@ file formats including SAM/BAM, Wiggle/BigWig, BED, GFF/GTF, VCF.")
 (define-public python-dnaio
   (package
     (name "python-dnaio")
-    (version "0.3")
+    (version "0.6.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "dnaio" version))
        (sha256
         (base32
-         "0f16m7hdlm0fz1n7y5asy0v9ghyrq17ni1p9iybq22ddzyd49r27"))))
+         "14v5yyasq2bz34j38wi3xfcp06jj7l35ppibjcn95l2n73hz3zwi"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-pytest" ,python-pytest)
-       ("python-xopen" ,python-xopen)))
+     (list python-cython python-pytest python-xopen))
     (home-page "https://github.com/marcelm/dnaio/")
     (synopsis "Read FASTA and FASTQ files efficiently")
     (description
@@ -2583,7 +2748,7 @@ files.  The code was previously part of the cutadapt tool.")
                 "1xnl80nblysj6dylj4683wgrfa425rkx4dp5k65hvwdns9pw753x"))))
     (build-system python-build-system)
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "https://github.com/deeptools/deeptools_intervals")
     (synopsis "Create GTF-based interval trees with associated meta-data")
     (description
@@ -2607,18 +2772,17 @@ interval trees with associated meta-data.  It is primarily used by the
                 "0l09vyynz6s6w7fnyd94rpys4a6aja6kp4gli64pngdxdz3md1nl"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-nose" ,python-nose)))
+     (list python-mock python-nose))
     (propagated-inputs
-     `(("python-matplotlib" ,python-matplotlib)
-       ("python-numpy" ,python-numpy)
-       ("python-numpydoc" ,python-numpydoc)
-       ("python-py2bit" ,python-py2bit)
-       ("python-pybigwig" ,python-pybigwig)
-       ("python-pysam" ,python-pysam)
-       ("python-scipy" ,python-scipy)
-       ("python-deeptoolsintervals" ,python-deeptoolsintervals)
-       ("python-plotly" ,python-plotly-2.4.1)))
+     (list python-matplotlib
+           python-numpy
+           python-numpydoc
+           python-py2bit
+           python-pybigwig
+           python-pysam
+           python-scipy
+           python-deeptoolsintervals
+           python-plotly-2.4.1))
     (home-page "https://pypi.org/project/deepTools/")
     (synopsis "Useful tools for exploring deep sequencing data")
     (description "This package addresses the challenge of handling large amounts
@@ -2646,13 +2810,20 @@ annotations of the genome.")
                (base32
                 "1vqmsfkm6llxzmsz9wcfcvzx9a9f8iabvwik2rbyn7nc4wm25z89"))))
     (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'always-cythonize
+           (lambda _
+             (delete-file "src/cutadapt/_align.c")
+             ;; If PKG-INFO exists, setup.py decides not to run Cython.
+             (substitute* "setup.py"
+               (("os.path.exists\\('PKG-INFO'\\):")
+                "os.path.exists('totally-does-not-exist'):")))))))
     (inputs
-     `(("python-dnaio" ,python-dnaio)
-       ("python-xopen" ,python-xopen)))
+     (list python-dnaio python-xopen))
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-pytest" ,python-pytest)
-       ("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-cython python-pytest python-setuptools-scm))
     (home-page "https://cutadapt.readthedocs.io/en/stable/")
     (synopsis "Remove adapter sequences from nucleotide sequencing reads")
     (description
@@ -2678,14 +2849,13 @@ other types of unwanted sequence from high-throughput sequencing reads.")
      `(#:test-target "test"
        #:tests? #f ; tests require access to the web
        #:make-flags
-       (list "CC=gcc"
-             (string-append "prefix=" (assoc-ref %outputs "out")))
+       ,#~(list "CC=gcc"
+                (string-append "prefix=" #$output))
        #:phases
        (modify-phases %standard-phases
          (delete 'configure))))
     (inputs
-     `(("zlib" ,zlib)
-       ("curl" ,curl)))
+     (list zlib curl))
     (native-inputs
      `(("doxygen" ,doxygen)
        ;; Need for tests
@@ -2723,11 +2893,9 @@ files.")
                (("libs=\\[") "libs=[\"BigWig\", "))
              #t)))))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (inputs
-     `(("libbigwig" ,libbigwig)
-       ("zlib" ,zlib)
-       ("curl" ,curl)))
+     (list libbigwig zlib curl))
     (home-page "https://github.com/dpryan79/pyBigWig")
     (synopsis "Access bigWig files in Python using libBigWig")
     (description
@@ -2741,14 +2909,14 @@ accessing bigWig files.")
 (define-public python-schema-salad
   (package
     (name "python-schema-salad")
-    (version "7.1.20210316164414")
+    (version "8.2.20211116214159")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "schema-salad" version))
         (sha256
          (base32
-          "04jaykdpgfnkrghvli5swxzqp7yba842am4bz42hcfljsmkrxvrk"))))
+          "005dh2y45x92zl8sf2sqjmfvcqr4hrz8dfckgkckv87003v7lwqc"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -2760,20 +2928,18 @@ accessing bigWig files.")
                (("^def test_(secondaryFiles|outputBinding)" all)
                 (string-append "@pytest.mark.skip(reason="
                                "\"test requires network access\")\n"
-                               all)))
-             #t)))))
+                               all))))))))
     (propagated-inputs
-     `(("python-cachecontrol" ,python-cachecontrol-0.11)
-       ("python-lockfile" ,python-lockfile)
-       ("python-mistune" ,python-mistune)
-       ("python-rdflib" ,python-rdflib)
-       ("python-rdflib-jsonld" ,python-rdflib-jsonld)
-       ("python-requests" ,python-requests)
-       ("python-ruamel.yaml" ,python-ruamel.yaml)
-       ("python-typing-extensions" ,python-typing-extensions)))
-    (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-cachecontrol
+           python-lockfile
+           python-mistune
+           python-rdflib
+           python-rdflib-jsonld
+           python-requests
+           python-ruamel.yaml
+           python-typing-extensions))
+    (native-inputs
+     (list python-black python-pytest python-pytest-runner))
     (home-page "https://github.com/common-workflow-language/schema_salad")
     (synopsis "Schema Annotations for Linked Avro Data (SALAD)")
     (description
@@ -2789,7 +2955,7 @@ and record oriented data modeling and the Semantic Web.")
 (define-public cwltool
   (package
     (name "cwltool")
-    (version "3.0.20210319143721")
+    (version "3.1.20220119140128")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -2798,7 +2964,7 @@ and record oriented data modeling and the Semantic Web.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1sgs9ckyxb9f9169mc3wm9lnjg4080ai42xqsrwpw9l8apy4c9m5"))))
+                "1jmrm0qrqgka79avc1kq63fgh20gx6g07fc8p3iih4k85vhdyl3f"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -2806,17 +2972,13 @@ 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
-               ((" >= 6.0.2, < 6.2") "")) ; pytest
-             #t))
+               (("== 1.5.1") ">=1.5.1")))) ; prov
          (add-after 'unpack 'dont-use-git
            (lambda _
              (substitute* "gittaggers.py"
                (("self.git_timestamp_tag\\(\\)")
                 (string-append "time.strftime('.%Y%m%d%H%M%S', time.gmtime(int("
-                               (string-drop ,version 4) ")))")))
-             #t))
+                               (string-drop ,version 4) ")))")))))
          (add-after 'unpack 'modify-tests
            (lambda _
              ;; Tries to connect to the internet.
@@ -2836,32 +2998,42 @@ and record oriented data modeling and the Semantic Web.")
                (("def test_v1_0_arg_empty_prefix_separate_false")
                 (string-append "@pytest.mark.skip(reason=\"Disabled by Guix\")\n"
                                "def test_v1_0_arg_empty_prefix_separate_false")))
-             #t)))))
+
+             (substitute* '("cwltool/schemas/v1.1/tests/env-tool1.cwl"
+                            "cwltool/schemas/v1.1/tests/env-tool2.cwl"
+                            "cwltool/schemas/v1.1/tests/imported-hint.cwl"
+                            "tests/subgraph/env-tool2.cwl"
+                            "tests/subgraph/env-tool2_req.cwl"
+                            "tests/subgraph/env-wf2_subwf-packed.cwl"
+                            "tests/subgraph/env-tool2_no_env.cwl")
+               (("\"/bin/sh\"") (string-append "\"" (which "sh") "\"")))
+             ;; Pytest doesn't know what to do with "-n auto"
+             (substitute* "tox.ini"
+               (("-n auto") "")))))))
     (propagated-inputs
-     `(("python-argcomplete" ,python-argcomplete)
-       ("python-bagit" ,python-bagit)
-       ("python-coloredlogs" ,python-coloredlogs)
-       ("python-mypy-extensions" ,python-mypy-extensions)
-       ("python-prov" ,python-prov)
-       ("python-pydot" ,python-pydot)
-       ("python-psutil" ,python-psutil)
-       ("python-rdflib" ,python-rdflib)
-       ("python-requests" ,python-requests)
-       ("python-ruamel.yaml" ,python-ruamel.yaml)
-       ("python-schema-salad" ,python-schema-salad)
-       ("python-shellescape" ,python-shellescape)
-       ("python-typing-extensions" ,python-typing-extensions)
-       ;; Not listed as needed but still necessary:
-       ("node" ,node)))
-    (native-inputs
-     `(("python-arcp" ,python-arcp)
-       ("python-humanfriendly" ,python-humanfriendly)
-       ("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-mock" ,python-pytest-mock)
-       ("python-pytest-runner" ,python-pytest-runner)
-       ("python-rdflib-jsonld" ,python-rdflib-jsonld)))
+     (list python-argcomplete
+           python-bagit
+           python-coloredlogs
+           python-mypy-extensions
+           python-prov
+           python-pydot
+           python-psutil
+           python-rdflib
+           python-requests
+           python-ruamel.yaml
+           python-schema-salad
+           python-shellescape
+           python-typing-extensions
+           ;; Not listed as needed but still necessary:
+           node))
+    (native-inputs
+     (list python-arcp
+           python-humanfriendly
+           python-mock
+           python-pytest
+           python-pytest-cov
+           python-pytest-mock
+           python-pytest-runner))
     (home-page
      "https://github.com/common-workflow-language/common-workflow-language")
     (synopsis "Common Workflow Language reference implementation")
@@ -2881,7 +3053,7 @@ CWL descriptions.")
 (define-public python-dendropy
   (package
     (name "python-dendropy")
-    (version "4.4.0")
+    (version "4.5.1")
     (source
      (origin
        (method git-fetch)
@@ -2892,8 +3064,27 @@ CWL descriptions.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "097hfyv2kaf4x92i4rjx0paw2cncxap48qivv8zxng4z7nhid0x9"))))
+         "0lrfzjqzbpk1rrra9vd7z2j7q09jy9w1ss7wn2rd85i4k5y3xz8l"))))
     (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'skip-broken-tests
+           (lambda _
+             ;; These tests fail because we have no "paup" executable.
+             (substitute* "tests/test_datamodel_split_bitmasks.py"
+               (((format #false "(~{~a~^|~})"
+                         '("test_group1"
+                           "test_basic_split_counting_under_different_rootings"
+                           "test_basic_split_count_with_incorrect_weight_treatment_raises_error"
+                           "test_basic_split_count_with_incorrect_rootings_raises_error")) m)
+                (string-append "_skip_" m)))
+             (delete-file "tests/test_paup.py")
+             (delete-file "tests/test_dataio_nexml_reader_tree_list.py")
+             ;; Assert error for unknown reasons
+             (substitute* "tests/test_protractedspeciation.py"
+               (("test_by_num_lineages" m)
+                (string-append "_skip_" m))))))))
     (home-page "https://dendropy.org/")
     (synopsis "Library for phylogenetics and phylogenetic computing")
     (description
@@ -2958,8 +3149,8 @@ with Python.")
     (arguments
      `(#:tests? #f ; There are no tests to run.
        #:make-flags
-       (list "PARALLEL=1"  ; Allow parallel execution at run-time.
-             (string-append "prefix=" (assoc-ref %outputs "out")))
+       ,#~(list "PARALLEL=1"           ; Allow parallel execution at run-time.
+                (string-append "prefix=" #$output))
        #:phases
        (modify-phases %standard-phases
          (delete 'configure) ; There is no configure phase.
@@ -2971,10 +3162,7 @@ with Python.")
                (copy-recursively "excludeTemplates" templates)
                #t))))))
     (inputs
-     `(("boost" ,boost)
-       ("bzip2" ,bzip2)
-       ("htslib" ,htslib)
-       ("zlib" ,zlib)))
+     (list boost bzip2 htslib zlib))
     (home-page "https://github.com/dellytools/delly")
     (synopsis "Integrated structural variant prediction method")
     (description "Delly is an integrated structural variant prediction method
@@ -3011,14 +3199,14 @@ bases are detected.")
 (define-public repeat-masker
   (package
     (name "repeat-masker")
-    (version "4.1.1")
+    (version "4.1.2-p1")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://www.repeatmasker.org/"
                                   "RepeatMasker/RepeatMasker-"
                                   version ".tar.gz"))
               (sha256
-               (base32 "03144sl9kh5ni2i33phi7x2pjndzbm5bjw3r4kqvmm6hxyb4k4x2"))))
+               (base32 "15hfdfpzmdjcx7ng7rjfid69bmvgn3z9g9r43qhjnhjhq3v4prab"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #false ; there are none
@@ -3047,12 +3235,12 @@ bases are detected.")
                (wrap-program (string-append bin "/RepeatMasker")
                  `("PERL5LIB" ":" prefix (,path ,share)))))))))
     (inputs
-     `(("perl" ,perl)
-       ("perl-text-soundex" ,perl-text-soundex)
-       ("python" ,python)
-       ("python-h5py" ,python-h5py)
-       ("hmmer" ,hmmer)
-       ("trf" ,trf)))
+     (list perl
+           perl-text-soundex
+           python
+           python-h5py
+           hmmer
+           trf))
     (home-page "https://github.com/Benson-Genomics-Lab/TRF")
     (synopsis "Tandem Repeats Finder: a program to analyze DNA sequences")
     (description "A tandem repeat in DNA is two or more adjacent, approximate
@@ -3087,7 +3275,7 @@ bases are detected.")
              (substitute* "CMakeLists.txt" (("-march=native") ""))
              #t)))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "https://github.com/bbuchfink/diamond")
     (synopsis "Accelerated BLAST compatible local sequence aligner")
     (description
@@ -3132,8 +3320,7 @@ data and settings.")
                (("≤") "<="))
              ;; This seems to be a syntax error.
              (substitute* "doc/discrover-manual.tex"
-               (("theverbbox\\[t\\]") "theverbbox"))
-             #t))
+               (("theverbbox\\[t\\]") "theverbbox"))))
          (add-after 'unpack 'add-missing-includes
            (lambda _
              (substitute* "src/executioninformation.hpp"
@@ -3141,29 +3328,21 @@ data and settings.")
                 (string-append line "\n#include <random>")))
              (substitute* "src/plasma/fasta.hpp"
                (("#define FASTA_HPP" line)
-                (string-append line "\n#include <random>")))
-             #t))
-         ;; FIXME: this is needed because we're using texlive-union, which
-         ;; doesn't handle fonts correctly.  It expects to be able to generate
-         ;; fonts in the home directory.
-         (add-before 'build 'setenv-HOME
-           (lambda _ (setenv "HOME" "/tmp") #t)))))
-    (inputs
-     `(("boost" ,boost)
-       ("cairo" ,cairo)
-       ("rmath-standalone" ,rmath-standalone)))
-    (native-inputs
-     `(("texlive" ,(texlive-union (list texlive-cm
-                                        texlive-fonts-amsfonts
-
-                                        texlive-latex-doi
-                                        texlive-latex-examplep
-                                        texlive-latex-hyperref
-                                        texlive-latex-ms
-                                        texlive-latex-natbib
-                                        texlive-bibtex         ; style files used by natbib
-                                        texlive-latex-pgf      ; tikz
-                                        texlive-latex-verbatimbox)))
+                (string-append line "\n#include <random>"))))))))
+    (inputs
+     (list boost cairo rmath-standalone))
+    (native-inputs
+     `(("texlive" ,(texlive-updmap.cfg (list texlive-cm
+                                             texlive-amsfonts
+                                             texlive-doi
+                                             texlive-fonts-ec
+                                             texlive-latex-examplep
+                                             texlive-hyperref
+                                             texlive-latex-ms
+                                             texlive-latex-natbib
+                                             texlive-bibtex ; style files used by natbib
+                                             texlive-latex-pgf ; tikz
+                                             texlive-latex-verbatimbox)))
        ("imagemagick" ,imagemagick)))
     (home-page "https://dorina.mdc-berlin.de/public/rajewsky/discrover/")
     (synopsis "Discover discriminative nucleotide sequence motifs")
@@ -3212,11 +3391,8 @@ of nucleic acid binding proteins.")
                          (find-files "../bin" ".*"))
                #t))))))
     (inputs
-     `(("gsl" ,gsl)
-       ("lapack" ,lapack)
-       ("openblas" ,openblas)
-       ("perl" ,perl)
-       ("gfortran" ,gfortran "lib")))
+     (list gsl lapack openblas perl
+           `(,gfortran "lib")))
     (home-page "https://github.com/DReichLab/EIG")
     (synopsis "Tools for population genetics")
     (description "The EIGENSOFT package provides tools for population
@@ -3306,23 +3482,23 @@ quantitative phenotypes.")
                      "-filter" "-help")
              #t)))))
     (inputs
-     `(("edirect-go-programs" ,edirect-go-programs)
-       ("perl-html-parser" ,perl-html-parser)
-       ("perl-encode-locale" ,perl-encode-locale)
-       ("perl-file-listing" ,perl-file-listing)
-       ("perl-html-tagset" ,perl-html-tagset)
-       ("perl-html-tree" ,perl-html-tree)
-       ("perl-http-cookies" ,perl-http-cookies)
-       ("perl-http-date" ,perl-http-date)
-       ("perl-http-message" ,perl-http-message)
-       ("perl-http-negotiate" ,perl-http-negotiate)
-       ("perl-lwp-mediatypes" ,perl-lwp-mediatypes)
-       ("perl-lwp-protocol-https" ,perl-lwp-protocol-https)
-       ("perl-net-http" ,perl-net-http)
-       ("perl-uri" ,perl-uri)
-       ("perl-www-robotrules" ,perl-www-robotrules)
-       ("perl-xml-simple" ,perl-xml-simple)
-       ("perl" ,perl)))
+     (list edirect-go-programs
+           perl-html-parser
+           perl-encode-locale
+           perl-file-listing
+           perl-html-tagset
+           perl-html-tree
+           perl-http-cookies
+           perl-http-date
+           perl-http-message
+           perl-http-negotiate
+           perl-lwp-mediatypes
+           perl-lwp-protocol-https
+           perl-net-http
+           perl-uri
+           perl-www-robotrules
+           perl-xml-simple
+           perl))
     (home-page "https://www.ncbi.nlm.nih.gov/books/NBK179288/")
     (synopsis "Tools for accessing the NCBI's set of databases")
     (description
@@ -3379,16 +3555,16 @@ software to answer ad hoc questions.")
     (native-inputs '())
     (propagated-inputs '())
     (inputs
-     `(("go-github-com-fatih-color" ,go-github-com-fatih-color)
-       ("go-github-com-fogleman-gg" ,go-github-com-fogleman-gg)
-       ("go-github-com-gedex-inflector" ,go-github-com-gedex-inflector)
-       ("go-github-com-golang-freetype" ,go-github-com-golang-freetype)
-       ("go-github-com-klauspost-cpuid" ,go-github-com-klauspost-cpuid)
-       ("go-github-com-pbnjay-memory" ,go-github-com-pbnjay-memory)
-       ("go-github-com-surgebase-porter2" ,go-github-com-surgebase-porter2)
-       ("go-golang-org-rainycape-unidecode" ,go-golang-org-rainycape-unidecode)
-       ("go-golang-org-x-image" ,go-golang-org-x-image)
-       ("go-golang-org-x-text" ,go-golang-org-x-text)))))
+     (list go-github-com-fatih-color
+           go-github-com-fogleman-gg
+           go-github-com-gedex-inflector
+           go-github-com-golang-freetype
+           go-github-com-klauspost-cpuid
+           go-github-com-pbnjay-memory
+           go-github-com-surgebase-porter2
+           go-golang-org-rainycape-unidecode
+           go-golang-org-x-image
+           go-golang-org-x-text))))
 
 (define-public exonerate
   (package
@@ -3408,9 +3584,9 @@ software to answer ad hoc questions.")
     (arguments
      `(#:parallel-build? #f)) ; Building in parallel fails on some machines.
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("glib" ,glib)))
+     (list glib))
     (home-page
      "https://www.ebi.ac.uk/about/vertebrate-genomics/software/exonerate")
     (synopsis "Generic tool for biological sequence alignment")
@@ -3457,10 +3633,7 @@ dynamic programming or a variety of heuristics.")
                (("check_version\\(PACKAGE_VERSION\\);") ""))
              #t)))))
     (inputs
-     `(("boost" ,boost)
-       ("bamtools" ,bamtools)
-       ("protobuf" ,protobuf)
-       ("zlib" ,zlib)))
+     (list boost bamtools protobuf zlib))
     (home-page "http://bio.math.berkeley.edu/eXpress")
     (synopsis "Streaming quantification for high-throughput genomic sequencing")
     (description
@@ -3580,10 +3753,10 @@ reasonable amount of time and memory.  For large alignments, FastTree is
                 "01jqzw386873sr0pjp1wr4rn8fsga2vxs1qfmicvx1pjr72007wy"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libgtextutils" ,libgtextutils)))
+     (list libgtextutils))
     (native-inputs
-     `(("gcc" ,gcc-6) ;; doesn't build with later versions
-       ("pkg-config" ,pkg-config)))
+     (list gcc-6 ;; doesn't build with later versions
+           pkg-config))
     (home-page "http://hannonlab.cshl.edu/fastx_toolkit/")
     (synopsis "Tools for FASTA/FASTQ file preprocessing")
     (description
@@ -3618,26 +3791,21 @@ results.  The FASTX-Toolkit tools perform some of these preprocessing tasks.")
          (add-after 'unpack 'do-not-tune-to-CPU
            (lambda _
              (substitute* "src/CMakeLists.txt"
-               ((" -march=native") ""))
-             #t))
+               ((" -march=native") ""))))
          (replace 'check
            (lambda* (#:key outputs #:allow-other-keys)
              (setenv "PATH" (string-append (getcwd) ":" (getenv "PATH")))
              (with-directory-excursion "../source/test"
-               (invoke "bash" "flexbar_test.sh"))
-             #t))
+               (invoke "bash" "flexbar_test.sh"))))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (string-append (assoc-ref outputs "out")))
                     (bin (string-append out "/bin/")))
-               (install-file "flexbar" bin))
-             #t)))))
+               (install-file "flexbar" bin)))))))
     (inputs
-     `(("tbb" ,tbb)
-       ("zlib" ,zlib)))
+     (list tbb-2020 zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("seqan" ,seqan-2)))
+     (list pkg-config seqan-2))
     (home-page "https://github.com/seqan/flexbar")
     (synopsis "Barcode and adapter removal tool for sequencing platforms")
     (description
@@ -3756,9 +3924,9 @@ genes in incomplete assemblies or complete genomes.")
            "0hab3gpwf4w9s87qlbswq6ws1qqybh4dcqk79q1ahyldzai5fgp5"))))
       (build-system gnu-build-system)
       (arguments
-       `(#:make-flags (list
-                       (string-append "PREFIX=" (assoc-ref %outputs "out"))
-                       "CC=gcc")
+       `(#:make-flags ,#~(list
+                          (string-append "PREFIX=" #$output)
+                          "CC=gcc")
          #:test-target "fxtract_test"
          #:phases
          (modify-phases %standard-phases
@@ -3776,8 +3944,7 @@ genes in incomplete assemblies or complete genomes.")
                  (install-file "fxtract" bin)
                  #t))))))
       (inputs
-       `(("pcre" ,pcre)
-         ("zlib" ,zlib)))
+       (list pcre zlib))
       (native-inputs
        ;; ctskennerton-util is licensed under GPL2.
        `(("ctskennerton-util"
@@ -3824,9 +3991,7 @@ comment or quality sections.")
                   #t))))
     (build-system gnu-build-system)
     (inputs
-     `(("gsl" ,gsl)
-       ("openblas" ,openblas)
-       ("zlib" ,zlib)))
+     (list gsl openblas zlib))
     (native-inputs
      `(("catch" ,catch-framework2-1)
        ("perl" ,perl)
@@ -3890,12 +4055,9 @@ genome-wide association studies}.")
                (("Cython.Setup") "Cython.Build"))
              #t)))))
     (inputs
-     `(("python-scipy" ,python2-scipy)
-       ("python-numpy" ,python2-numpy)
-       ("python-pysam" ,python2-pysam)
-       ("python-networkx" ,python2-networkx)))
+     (list python2-scipy python2-numpy python2-pysam python2-networkx))
     (native-inputs
-     `(("python-cython" ,python2-cython)))
+     (list python2-cython))
     ;; The canonical <http://grit-bio.org> home page times out as of 2020-01-21.
     (home-page "https://github.com/nboley/grit")
     (synopsis "Tool for integrative analysis of RNA-seq type assays")
@@ -3911,7 +4073,7 @@ estimates transcript expression.")
 (define-public hisat
   (package
     (name "hisat")
-    (version "0.1.4")
+    (version "0.1.6")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -3919,7 +4081,7 @@ estimates transcript expression.")
                     version "-beta-source.zip"))
               (sha256
                (base32
-                "1k381ydranqxp09yf2y7w1d0chz5d59vb6jchi89hbb0prq19lk5"))))
+                "177z85vqp9b30vgxl5py5hz4mm37ila37nzhfam23ci9iyfxgyv9"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ;no check target
@@ -3944,7 +4106,10 @@ estimates transcript expression.")
                (("-DBUILD_TIME=.*") "-DBUILD_TIME=\"\\\"0\\\"\""))
              (substitute* '("hisat-build" "hisat-inspect")
                (("/usr/bin/env") (which "env")))
-             #t))
+             ;; This "extended character" is not considered valid.
+             (substitute* "processor_support.h"
+               (("“") "\"")
+               (("”") "\""))))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((bin (string-append (assoc-ref outputs "out") "/bin/")))
@@ -3952,15 +4117,12 @@ estimates transcript expression.")
                            (install-file file bin))
                          (find-files
                           "."
-                          "hisat(-(build|align|inspect)(-(s|l)(-debug)*)*)*$")))
-             #t))
+                          "hisat(-(build|align|inspect)(-(s|l)(-debug)*)*)*$")))))
          (delete 'configure))))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (inputs
-     `(("perl" ,perl)
-       ("python" ,python)
-       ("zlib" ,zlib)))
+     (list perl python zlib))
     ;; Non-portable SSE instructions are used so building fails on platforms
     ;; other than x86_64.
     (supported-systems '("x86_64-linux"))
@@ -4019,8 +4181,7 @@ particular, reads spanning multiple exons.")
                (mkdir-p doc)
                (install-file "doc/manual.inc.html" doc)))))))
     (native-inputs
-     `(("perl" ,perl)
-       ("pandoc" ,pandoc)))             ; for documentation
+     (list perl pandoc))             ; for documentation
     (inputs
      `(("python" ,python-wrapper)))
     (home-page "https://daehwankimlab.github.io/hisat2/")
@@ -4051,8 +4212,7 @@ indexing scheme is called a @dfn{Hierarchical Graph FM index} (HGFM).")
         (base32
          "0s9wf6n0qanbx8qs6igfl3vyjikwbrvh4d9d6mv54yp3xysykzlj"))))
     (build-system gnu-build-system)
-    (native-inputs `(("perl" ,perl)
-                     ("python" ,python))) ; for tests
+    (native-inputs (list perl python)) ; for tests
     (home-page "http://hmmer.org/")
     (synopsis "Biosequence analysis using profile hidden Markov models")
     (description
@@ -4068,22 +4228,21 @@ HMMs).")
 (define-public htseq
   (package
     (name "htseq")
-    (version "0.9.1")
+    (version "0.12.3")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "HTSeq" version))
               (sha256
                (base32
-                "11flgb1381xdhk43bzbfm3vhnszkpqg6jk76rpa5xd1zbrvvlnxg"))))
+                "0pk41vkzxsbb5nv644325mh8akmz4zdply9r2s80dgg5b21pgp0b"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-cython" ,python-cython)))
+     (list python-cython))
     ;; Numpy needs to be propagated when htseq is used as a Python library.
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (inputs
-     `(("python-pysam" ,python-pysam)
-       ("python-matplotlib" ,python-matplotlib)))
+     (list python-pysam python-matplotlib))
     (home-page "https://htseq.readthedocs.io/")
     (synopsis "Analysing high-throughput sequencing data with Python")
     (description
@@ -4119,8 +4278,7 @@ from high-throughput sequencing assays.")
      `(#:tests? #f ; test require Internet access
        #:jdk ,icedtea-8
        #:make-flags
-       (list (string-append "-Ddist=" (assoc-ref %outputs "out")
-                            "/share/java/htsjdk/"))
+       ,#~(list (string-append "-Ddist=" #$output "/share/java/htsjdk/"))
        #:build-target "all"
        #:phases
        (modify-phases %standard-phases
@@ -4134,7 +4292,7 @@ from high-throughput sequencing assays.")
        ("java-commons-jexl-2" ,java-commons-jexl-2)
        ("java-xz" ,java-xz)))
     (native-inputs
-     `(("java-testng" ,java-testng)))
+     (list java-testng))
     (home-page "http://samtools.github.io/htsjdk/")
     (synopsis "Java API for high-throughput sequencing data (HTS) formats")
     (description
@@ -4177,7 +4335,7 @@ manipulating HTS data.")
        ("java-commons-jexl-2" ,java-commons-jexl-2)
        ("java-xz" ,java-xz)))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "http://samtools.github.io/htsjdk/")
     (synopsis "Java API for high-throughput sequencing data (HTS) formats")
     (description
@@ -4255,12 +4413,12 @@ manipulating HTS data.")
        ;; Tests require jacoco:coverage.
        #:tests? #f
        #:make-flags
-       (list (string-append "-Dhtsjdk_lib_dir="
-                            (assoc-ref %build-inputs "java-htsjdk")
-                            "/share/java/htsjdk/")
-             "-Dhtsjdk-classes=dist/tmp"
-             (string-append "-Dhtsjdk-version="
-                            ,(package-version java-htsjdk)))
+       ,#~(list (string-append "-Dhtsjdk_lib_dir="
+                               #$(this-package-input "java-htsjdk")
+                               "/share/java/htsjdk/")
+                "-Dhtsjdk-classes=dist/tmp"
+                (string-append "-Dhtsjdk-version="
+                               #$(package-version java-htsjdk)))
        #:jdk ,icedtea-8
        #:phases
        (modify-phases %standard-phases
@@ -4270,9 +4428,8 @@ manipulating HTS data.")
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "build.xml"
                (("\\$\\{htsjdk\\}/lib")
-                (string-append (assoc-ref inputs "java-htsjdk")
-                               "/share/java/htsjdk/")))
-             #t))
+                (search-input-directory inputs
+                                        "share/java/htsjdk")))))
          (add-after 'unpack 'make-test-target-independent
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "build.xml"
@@ -4281,10 +4438,9 @@ manipulating HTS data.")
              #t))
          (replace 'install (install-jars "dist")))))
     (inputs
-     `(("java-htsjdk" ,java-htsjdk)
-       ("java-guava" ,java-guava)))
+     (list java-htsjdk java-guava))
     (native-inputs
-     `(("java-testng" ,java-testng)))
+     (list java-testng))
     (home-page "http://broadinstitute.github.io/picard/")
     (synopsis "Tools for manipulating high-throughput sequencing data and formats")
     (description "Picard is a set of Java command line tools for manipulating
@@ -4371,10 +4527,9 @@ Class-Path: /~a \
              (rename-file "build.xml.new" "build.xml")
              #t)))))
     (propagated-inputs
-     `(("java-htsjdk" ,java-htsjdk-2.10.1)))
+     (list java-htsjdk-2.10.1))
     (native-inputs
-     `(("java-testng" ,java-testng)
-       ("java-guava" ,java-guava)))
+     (list java-testng java-guava))
     (home-page "http://broadinstitute.github.io/picard/")
     (synopsis "Tools for manipulating high-throughput sequencing data and formats")
     (description "Picard is a set of Java command line tools for manipulating
@@ -4427,9 +4582,7 @@ VCF.")
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "build.xml"
                (("\\$\\{lib\\}/apache-ant-1.8.2-bzip2.jar")
-                (string-append (assoc-ref inputs "ant")
-                               "/lib/ant.jar")))
-             #t))
+                (search-input-file inputs "/lib/ant.jar")))))
          (add-after 'unpack 'make-test-target-independent
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "build.xml"
@@ -4526,15 +4679,13 @@ VCF.")
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "build.xml"
                (("jbzip2-0.9.jar")
-                (string-append (assoc-ref inputs "java-jbzip2")
-                               "/share/java/jbzip2.jar"))
+                (search-input-file inputs "/share/java/jbzip2.jar"))
                (("sam-1.103.jar")
-                (string-append (assoc-ref inputs "java-picard-1.113")
-                               "/share/java/sam-1.112.jar"))
+                (search-input-file inputs
+                                   "/share/java/sam-1.112.jar"))
                (("cisd-jhdf5.jar")
-                (string-append (assoc-ref inputs "java-cisd-jhdf5")
-                               "/share/java/sis-jhdf5.jar")))
-             #t))
+                (search-input-file inputs
+                                   "/share/java/sis-jhdf5.jar")))))
          ;; There is no installation target
          (replace 'install
            (lambda* (#:key inputs outputs #:allow-other-keys)
@@ -4559,7 +4710,7 @@ VCF.")
        ("java-picard-1.113" ,java-picard-1.113)
        ("java-jbzip2" ,java-jbzip2)))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://www.bioinformatics.babraham.ac.uk/projects/fastqc/")
     (synopsis "Quality control tool for high throughput sequence data")
     (description
@@ -4600,7 +4751,7 @@ The main functions of FastQC are:
     (arguments
      `(#:tests? #f ; there are none
        #:make-flags
-       (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
+       ,#~(list (string-append "PREFIX=" #$output))
        #:phases
        (modify-phases %standard-phases
          (delete 'configure)
@@ -4608,7 +4759,7 @@ The main functions of FastQC are:
            (lambda* (#:key outputs #:allow-other-keys)
              (mkdir-p (string-append (assoc-ref outputs "out") "/bin")))))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "https://github.com/OpenGene/fastp/")
     (synopsis "All-in-one FastQ preprocessor")
     (description
@@ -4620,7 +4771,7 @@ performance.")
 (define-public htslib
   (package
     (name "htslib")
-    (version "1.12")
+    (version "1.14")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -4628,7 +4779,7 @@ performance.")
                     version "/htslib-" version ".tar.bz2"))
               (sha256
                (base32
-                "1jplnvizgr0fyyvvmkfmnsywrrpqhid3760vw15bllz98qdi9012"))))
+                "0pwk8yhhvb85mi1d2qhwsb4samc3rmbcrq7b1s0jz0glaa7in8pd"))))
     (build-system gnu-build-system)
     ;; Let htslib translate "gs://" and "s3://" to regular https links with
     ;; "--enable-gcs" and "--enable-s3". For these options to work, we also
@@ -4638,13 +4789,12 @@ performance.")
                            "--enable-libcurl"
                            "--enable-s3")))
     (inputs
-     `(("curl" ,curl)
-       ("openssl" ,openssl)))
+     (list curl openssl))
     ;; This is referred to in the pkg-config file as a required library.
     (propagated-inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (home-page "https://www.htslib.org")
     (synopsis "C library for reading/writing high-throughput sequencing data")
     (description
@@ -4655,9 +4805,20 @@ data.  It also provides the @command{bgzip}, @command{htsfile}, and
     ;; the rest is released under the Expat license
     (license (list license:expat license:bsd-3))))
 
+(define-public htslib-1.12
+  (package/inherit htslib
+    (version "1.12")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/samtools/htslib/releases/download/"
+                    version "/htslib-" version ".tar.bz2"))
+              (sha256
+               (base32
+                "1jplnvizgr0fyyvvmkfmnsywrrpqhid3760vw15bllz98qdi9012"))))))
+
 (define-public htslib-1.10
-  (package (inherit htslib)
-    (name "htslib")
+  (package/inherit htslib
     (version "1.10")
     (source (origin
               (method url-fetch)
@@ -4669,8 +4830,7 @@ data.  It also provides the @command{bgzip}, @command{htsfile}, and
                 "0wm9ay7qgypj3mwx9zl1mrpnr36298b1aj5vx69l4k7bzbclvr3s"))))))
 
 (define-public htslib-1.9
-  (package (inherit htslib)
-    (name "htslib")
+  (package/inherit htslib
     (version "1.9")
     (source (origin
               (method url-fetch)
@@ -4683,8 +4843,7 @@ data.  It also provides the @command{bgzip}, @command{htsfile}, and
 
 ;; This package should be removed once no packages rely upon it.
 (define htslib-1.3
-  (package
-    (inherit htslib)
+  (package/inherit htslib
     (version "1.3.1")
     (source (origin
               (method url-fetch)
@@ -4695,6 +4854,41 @@ data.  It also provides the @command{bgzip}, @command{htsfile}, and
                (base32
                 "1rja282fwdc25ql6izkhdyh8ppw8x2fs0w0js78zgkmqjlikmma9"))))))
 
+(define htslib-for-samtools-1.2
+  (package/inherit htslib
+    (version "1.2.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/samtools/htslib/releases/download/"
+                    version "/htslib-" version ".tar.bz2"))
+              (sha256
+               (base32
+                "1c32ssscbnjwfw3dra140fq7riarp2x990qxybh34nr1p5r17nxx"))))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-tests
+           (lambda _
+             (substitute* "test/test.pl"
+               (("/bin/bash") (which "bash"))))))))
+    (inputs
+     `(("zlib" ,zlib)))
+    (native-inputs
+     `(("perl" ,perl)))))
+
+(define htslib-for-stringtie
+  (package
+    (inherit htslib)
+    (source (origin
+              (inherit (package-source htslib))
+              (patches
+               (search-patches "htslib-for-stringtie.patch"))))
+    (arguments
+     `(#:configure-flags '("--with-libdeflate")))
+    (inputs
+     (list bzip2 libdeflate openssl))))
+
 (define-public idr
   (package
     (name "idr")
@@ -4717,12 +4911,9 @@ data.  It also provides the @command{bgzip}, @command{htsfile}, and
     ;; causes the tests to always fail.
     (arguments `(#:tests? #f))
     (propagated-inputs
-     `(("python-scipy" ,python-scipy)
-       ("python-sympy" ,python-sympy)
-       ("python-numpy" ,python-numpy)
-       ("python-matplotlib" ,python-matplotlib)))
+     (list python-scipy python-sympy python-numpy python-matplotlib))
     (native-inputs
-     `(("python-cython" ,python-cython)))
+     (list python-cython))
     (home-page "https://github.com/nboley/idr")
     (synopsis "Tool to measure the irreproducible discovery rate (IDR)")
     (description
@@ -4745,15 +4936,11 @@ experiments and provide highly stable thresholds based on reproducibility.")
                 "0npa62wzasdibas5zp3n8j3armsci4kyvh0jw7jr0am4gg7vg5g1"))))
     (build-system gnu-build-system)
     (outputs '("out"      ;for library
-               "ruby"     ;for Ruby bindings
                "python")) ;for Python bindings
     (arguments
      `(#:configure-flags
-       (list "--without-sse" ; configure script probes for CPU features when SSE is enabled.
-             (string-append "--enable-ruby-binding="
-                            (assoc-ref %outputs "ruby"))
-             (string-append "--enable-python-binding="
-                            (assoc-ref %outputs "python")))
+       ,#~(list "--without-sse" ; configure script probes for CPU features when SSE is enabled.
+                (string-append "--enable-python-binding=" #$output:python))
        #:phases
        (modify-phases %standard-phases
          (add-before 'check 'set-SHELL-variable
@@ -4764,11 +4951,10 @@ experiments and provide highly stable thresholds based on reproducibility.")
     (native-inputs
      `(("bc" ,bc)
        ("time" ,time)
-       ("ruby" ,ruby)
        ("python" ,python-wrapper)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("htslib" ,htslib)))
+     (list htslib))
     (synopsis "Tool for fast counting of k-mers in DNA")
     (description
      "Jellyfish is a tool for fast, memory-efficient counting of k-mers in
@@ -4816,32 +5002,42 @@ command, or queried for specific k-mers with @code{jellyfish query}.")
               "libraries = z,bz2")
              (("include:third-party/zlib:third-party/bzip2")
               "include:"))
-           #t))))
+           ;; Delete generated Cython CPP files.
+           (for-each delete-file (find-files "khmer/_oxli/" "\\.cpp$"))))))
     (build-system python-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'set-cc
-           (lambda _ (setenv "CC" "gcc") #t))
-
-         (add-before 'reset-gzip-timestamps 'make-files-writable
-           (lambda* (#:key outputs #:allow-other-keys)
-             ;; Make sure .gz files are writable so that the
-             ;; 'reset-gzip-timestamps' phase can do its work.
-             (let ((out (assoc-ref outputs "out")))
-               (for-each make-file-writable
-                         (find-files out "\\.gz$"))
-               #t))))))
+           (lambda _ (setenv "CC" "gcc")))
+         (add-after 'unpack 'python-3.8-compatibility
+           (lambda _
+             ;; Python 3.8 removed time.clock().
+             (substitute* "sandbox/sweep-reads.py"
+               (("time\\.clock")
+                "time.process_time"))))
+         (add-after 'unpack 'do-use-cython
+           (lambda _
+             (substitute* "setup.py"
+               (("from setuptools import Extension as CyExtension")
+                "from Cython.Distutils import Extension as CyExtension")
+               (("from setuptools.command.build_ext import build_ext as _build_ext")
+                "from Cython.Distutils import build_ext as _build_ext")
+               (("HAS_CYTHON = False") "HAS_CYTHON = True")
+               (("cy_ext = 'cpp'") "cy_ext = 'pyx'"))))
+         (add-before 'build 'build-extensions
+           (lambda _
+             ;; Cython extensions have to be built before running the tests.
+             (invoke "python" "setup.py" "build_ext" "--inplace")))
+         (replace 'check
+           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "pytest" "-v")))))))
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-cython python-pytest python-pytest-runner))
     (inputs
-     `(("zlib" ,zlib)
-       ("bzip2" ,bzip2)
-       ("seqan" ,seqan-1)
-       ("python-screed" ,python-screed)
-       ("python-bz2file" ,python-bz2file)))
+     (list zlib bzip2 seqan-1 python-screed python-bz2file))
     (home-page "https://khmer.readthedocs.org/")
     (synopsis "K-mer counting, filtering and graph traversal library")
     (description "The khmer software is a set of command-line tools for
@@ -4883,8 +5079,7 @@ data.")
                (copy-recursively "bin" bin))
              #t)))))
     (inputs
-     `(("perl" ,perl)
-       ("zlib" ,zlib)))
+     (list perl zlib))
     (home-page "http://kaiju.binf.ku.dk/")
     (synopsis "Fast and sensitive taxonomic classification for metagenomics")
     (description "Kaiju is a program for sensitive taxonomic classification
@@ -4921,16 +5116,17 @@ experiments.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
+         (add-before 'build 'set-HOME
+           (lambda _ (setenv "HOME" "/tmp")))
          (replace 'check
            (lambda* (#:key tests? inputs outputs #:allow-other-keys)
              (when tests?
                (add-installed-pythonpath inputs outputs)
                (invoke "pytest" "-v")))))))
     (inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-pytest" ,python-pytest)))
+     (list python-cython python-pytest))
     (home-page "https://github.com/macs3-project/MACS")
     (synopsis "Model based analysis for ChIP-Seq data")
     (description
@@ -4958,10 +5154,9 @@ sequencing tag position and orientation.")
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ; no automated tests, though there are tests in the read me
-       #:make-flags (let ((out (assoc-ref %outputs "out")))
-                      (list (string-append "PREFIX=" out)
-                            (string-append "BINDIR="
-                                           (string-append out "/bin"))))
+       #:make-flags ,#~(list (string-append "PREFIX=" #$output)
+                             (string-append "BINDIR="
+                                            (string-append #$output "/bin")))
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'enter-dir
@@ -5001,22 +5196,17 @@ sequencing tag position and orientation.")
              #t))
          (delete 'configure)
          (add-after 'install 'wrap-programs
-           (lambda* (#:key outputs #:allow-other-keys)
+           (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
                     (bin (string-append out "/bin"))
                     (path (string-append
-                           (assoc-ref %build-inputs "coreutils") "/bin:")))
+                           (assoc-ref inputs "coreutils") "/bin:")))
                (for-each (lambda (file)
                            (wrap-program file
                              `("PATH" ":" prefix (,path))))
-                         (find-files bin)))
-             #t)))))
+                         (find-files bin))))))))
     (inputs
-     `(("perl" ,perl)
-       ("ruby" ,ruby)
-       ("gawk" ,gawk)
-       ("grep" ,grep)
-       ("coreutils" ,coreutils)))
+     (list perl ruby gawk grep coreutils))
     (home-page "https://mafft.cbrc.jp/alignment/software/")
     (synopsis "Multiple sequence alignment program")
     (description
@@ -5043,18 +5233,16 @@ sequences).")
                 "049hwcc059p2fd9vwndn63laifvvsi0wmv84i6y1fr79k15dxwy6"))
               (modules '((guix build utils)))
               (snippet
-               '(begin
-                  ;; Delete bundled kseq.
-                  ;; TODO: Also delete bundled murmurhash and open bloom filter.
-                  (delete-file "src/mash/kseq.h")
-                  #t))))
+               ;; Delete bundled kseq.
+               ;; TODO: Also delete bundled murmurhash and open bloom filter.
+               '(delete-file "src/mash/kseq.h"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ; No tests.
        #:configure-flags
-       (list
-        (string-append "--with-capnp=" (assoc-ref %build-inputs "capnproto"))
-        (string-append "--with-gsl=" (assoc-ref %build-inputs "gsl")))
+       ,#~(list
+           (string-append "--with-capnp=" #$(this-package-input "capnproto"))
+           (string-append "--with-gsl=" #$(this-package-input "gsl")))
        #:make-flags (list "CC=gcc")
        #:phases
        (modify-phases %standard-phases
@@ -5075,14 +5263,14 @@ sequences).")
                (("c\\+\\+11") "c++14"))
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ;; Capnproto and htslib are statically embedded in the final
-       ;; application. Therefore we also list their licenses, below.
-       ("capnproto" ,capnproto)
-       ("htslib" ,htslib)))
+     (list autoconf))
     (inputs
-     `(("gsl" ,gsl)
-       ("zlib" ,zlib)))
+     (list ;; Capnproto and htslib are statically embedded in the final
+           ;; application. Therefore we also list their licenses, below.
+           capnproto
+           htslib
+           gsl
+           zlib))
     (supported-systems '("x86_64-linux"))
     (home-page "https://mash.readthedocs.io")
     (synopsis "Fast genome and metagenome distance estimation using MinHash")
@@ -5097,7 +5285,7 @@ form of assemblies or reads.")
 (define-public metabat
   (package
     (name "metabat")
-    (version "2.12.1")
+    (version "2.15")
     (source
      (origin
        (method git-fetch)
@@ -5107,52 +5295,34 @@ form of assemblies or reads.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0hyg2smw1nz69mfvjpk45xyyychmda92c80a0cv7baji84ri4iyn"))
-       (patches (search-patches "metabat-fix-compilation.patch"))))
-    (build-system scons-build-system)
-    (arguments
-     `(#:scons ,scons-python2
-       #:scons-flags
-       (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
-             (string-append "BOOST_ROOT=" (assoc-ref %build-inputs "boost")))
-       #:tests? #f ;; Tests are run during the build phase.
+         "0v3gsps0ypani14102z2y1a2wignhpf7s1h45mxmj5f783rkhqd9"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:configure-flags
+       ,#~(list (string-append "-Dzlib_LIB=" #$(this-package-input "zlib")
+                               "/lib/libz.so")
+                (string-append "-Dhtslib_LIB=" #$(this-package-input "htslib")
+                               "/lib/libhts.so")
+                (string-append "-DBOOST_ROOT=" #$(this-package-input "boost")))
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'fix-includes
+         (add-after 'unpack 'configure-version-file
            (lambda _
-             (substitute* "src/BamUtils.h"
-               (("^#include \"bam/bam\\.h\"")
-                "#include \"samtools/bam.h\"")
-               (("^#include \"bam/sam\\.h\"")
-                "#include \"samtools/sam.h\""))
-             (substitute* "src/KseqReader.h"
-               (("^#include \"bam/kseq\\.h\"")
-                "#include \"htslib/kseq.h\""))
-             #t))
-         (add-after 'unpack 'fix-scons
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "SConstruct"
-               (("^htslib_dir += 'samtools'")
-                (string-append "htslib_dir = '"
-                               (assoc-ref inputs "htslib")
-                               "'"))
-               (("^samtools_dir = 'samtools'")
-                (string-append "samtools_dir = '"
-                               (assoc-ref inputs "samtools")
-                               "'"))
-               (("^findStaticOrShared\\('bam', hts_lib")
-                (string-append "findStaticOrShared('bam', '"
-                               (assoc-ref inputs "samtools")
-                               "/lib'"))
-               ;; Do not distribute README.
-               (("^env\\.Install\\(idir_prefix, 'README\\.md'\\)") ""))
-             #t)))))
+             (copy-file "metabat_version.h.in" "metabat_version.h")
+             (substitute* "metabat_version.h"
+               (("@_time_stamp@") "19700101")
+               (("@GIT_IS_DIRTY@") "0")
+               (("@GIT_RETRIEVED_STATE@") "0")
+               (("@GIT_HEAD_SHA1@") (string-append "v" ,version)))))
+         (add-after 'unpack 'do-not-use-bundled-libraries
+           (lambda _
+             (substitute* "CMakeLists.txt"
+               (("include\\(cmake.*") ""))
+             (substitute* "src/CMakeLists.txt"
+               (("set\\(Boost.*") "")
+               (("add_dependencies.*") "")))))))
     (inputs
-     `(("zlib" ,zlib)
-       ("perl" ,perl)
-       ("samtools" ,samtools)
-       ("htslib" ,htslib)
-       ("boost" ,boost)))
+     (list zlib perl samtools htslib boost))
     (home-page "https://bitbucket.org/berkeleylab/metabat")
     (synopsis
      "Reconstruction of single genomes from complex microbial communities")
@@ -5225,52 +5395,52 @@ assembled metagenomic sequence.")
     (license license:gpl3+)))
 
 (define-public miso
-  (package
-    (name "miso")
-    (version "0.5.4")
-    (source (origin
-              (method url-fetch)
-              (uri (pypi-uri "misopy" version))
-              (sha256
-               (base32
-                "1z3x0vd8ma7pdrnywj7i3kgwl89sdkwrrn62zl7r5calqaq2hyip"))
-              (modules '((guix build utils)))
-              (snippet '(begin
-                          (substitute* "setup.py"
-                            ;; Use setuptools, or else the executables are not
-                            ;; installed.
-                            (("distutils.core") "setuptools")
-                            ;; Use "gcc" instead of "cc" for compilation.
-                            (("^defines")
-                             "cc.set_executables(
+  (let ((commit "b71402188000465e3430736a11ea118fd5639a4a")
+        (revision "1"))
+    (package
+      (name "miso")
+      (version (git-version "0.5.4" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/yarden/MISO/")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0x37ipwwvpxbkrg17gmq3hp92c9cphch8acd6cj7fqgnrjwd47g5"))
+                (modules '((guix build utils)))
+                (snippet
+                 '(substitute* "setup.py"
+                    ;; Use "gcc" instead of "cc" for compilation.
+                    (("^defines")
+                     "cc.set_executables(
 compiler='gcc',
 compiler_so='gcc',
 linker_exe='gcc',
-linker_so='gcc -shared'); defines"))
-                          #t))))
-    (build-system python-build-system)
-    (arguments
-     `(#:python ,python-2               ; only Python 2 is supported
-       #:tests? #f))                    ; no "test" target
-    (inputs
-     `(("samtools" ,samtools)
-       ("python-numpy" ,python2-numpy)
-       ("python-pysam" ,python2-pysam)
-       ("python-scipy" ,python2-scipy)
-       ("python-matplotlib" ,python2-matplotlib)))
-    (native-inputs
-     `(("python-mock" ,python2-mock)    ; for tests
-       ("python-pytz" ,python2-pytz)))  ; for tests
-    (home-page "https://www.genes.mit.edu/burgelab/miso/index.html")
-    (synopsis "Mixture of Isoforms model for RNA-Seq isoform quantitation")
-    (description
-     "MISO (Mixture-of-Isoforms) is a probabilistic framework that quantitates
+linker_so='gcc -shared'); defines")))))
+      (build-system python-build-system)
+      (arguments
+       `(#:python ,python-2               ; only Python 2 is supported
+         #:tests? #f))                    ; no "test" target
+      (inputs
+       ;; Samtools must not be newer than 1.2.  See
+       ;; https://github.com/yarden/MISO/issues/135
+       (list samtools-1.2 python2-numpy python2-pysam python2-scipy
+             python2-matplotlib))
+      (native-inputs
+       (list python2-mock ; for tests
+             python2-pytz))  ; for tests
+      (home-page "https://miso.readthedocs.io/en/fastmiso/")
+      (synopsis "Mixture of Isoforms model for RNA-Seq isoform quantitation")
+      (description
+       "MISO (Mixture-of-Isoforms) is a probabilistic framework that quantitates
 the expression level of alternatively spliced genes from RNA-Seq data, and
 identifies differentially regulated isoforms or exons across samples.  By
 modeling the generative process by which reads are produced from isoforms in
 RNA-Seq, the MISO model uses Bayesian inference to compute the probability
 that a read originated from a particular isoform.")
-    (license license:gpl2)))
+      (license license:gpl2))))
 
 (define-public muscle
   (package
@@ -5322,24 +5492,22 @@ program for nucleotide and protein sequences.")
                 (sha256
                  (base32
                   "1hkw21rq1mwf7xp0rmbb2gqc0i6p11108m69i7mr7xcjl268pxnb"))))
-    (build-system gnu-build-system)
-    (inputs
-     ;; XXX: TODO: Enable Lua and Guile bindings.
-     ;; https://github.com/tjunier/newick_utils/issues/13
-     `(("libxml2" ,libxml2)
-       ("flex" ,flex)
-       ("bison" ,bison)))
-    (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
-    (synopsis "Programs for working with newick format phylogenetic trees")
-    (description
-     "Newick-utils is a suite of utilities for processing phylogenetic trees
+      (build-system gnu-build-system)
+      (arguments
+       '(#:make-flags (list "CFLAGS=-O2 -g -fcommon")))
+      (inputs
+       ;; XXX: TODO: Enable Lua and Guile bindings.
+       ;; https://github.com/tjunier/newick_utils/issues/13
+       (list libxml2 flex bison))
+      (native-inputs
+       (list autoconf automake libtool))
+      (synopsis "Programs for working with newick format phylogenetic trees")
+      (description
+       "Newick-utils is a suite of utilities for processing phylogenetic trees
 in Newick format.  Functions include re-rooting, extracting subtrees,
 trimming, pruning, condensing, drawing (ASCII graphics or SVG).")
-    (home-page "https://github.com/tjunier/newick_utils")
-    (license license:bsd-3))))
+      (home-page "https://github.com/tjunier/newick_utils")
+      (license license:bsd-3))))
 
 (define-public orfm
   (package
@@ -5354,11 +5522,9 @@ trimming, pruning, condensing, drawing (ASCII graphics or SVG).")
                (base32
                 "16iigyr2gd8x0imzkk1dr3k5xsds9bpmwg31ayvjg0f4pir9rwqr"))))
     (build-system gnu-build-system)
-    (inputs `(("zlib" ,zlib)))
+    (inputs (list zlib))
     (native-inputs
-     `(("ruby-bio-commandeer" ,ruby-bio-commandeer)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby" ,ruby)))
+     (list ruby-bio-commandeer ruby-rspec ruby))
     (synopsis "Simple and not slow open reading frame (ORF) caller")
     (description
      "An ORF caller finds stretches of DNA that, when translated, are not
@@ -5389,13 +5555,9 @@ interrupted by stop codons.  OrfM finds and prints these ORFs.")
                         (("^sphinx") ""))
                       #t)))))
     (propagated-inputs
-     `(("python-cython" ,python2-cython)
-       ("python-numpy" ,python2-numpy)
-       ("python-pysam" ,python2-pysam)
-       ("python-h5py" ,python2-h5py)))
+     (list python2-cython python2-numpy python2-pysam python2-h5py))
     (native-inputs
-     `(("python-nose" ,python2-nose)
-       ("python-pyxb" ,python2-pyxb)))
+     (list python2-nose python2-pyxb))
     (home-page "https://pacificbiosciences.github.io/pbcore/")
     (synopsis "Library for reading and writing PacBio data files")
     (description
@@ -5427,17 +5589,15 @@ files and writing bioinformatics applications.")
                 "from scipy import linalg\nimport weave"))
              #t)))))
     (propagated-inputs
-     `(("python-scipy" ,python2-scipy)
-       ("python-numpy" ,python2-numpy)
-       ("python-matplotlib" ,python2-matplotlib)
-       ("python-fastlmm" ,python2-fastlmm)
-       ("python-pandas" ,python2-pandas)
-       ("python-pysnptools" ,python2-pysnptools)
-       ("python-weave" ,python2-weave)))
-    (native-inputs
-     `(("python-mock" ,python2-mock)
-       ("python-nose" ,python2-nose)
-       ("unzip" ,unzip)))
+     (list python2-scipy
+           python2-numpy
+           python2-matplotlib
+           python2-fastlmm
+           python2-pandas
+           python2-pysnptools
+           python2-weave))
+    (native-inputs
+     (list python2-mock python2-nose unzip))
     (home-page "https://github.com/PMBio/warpedLMM")
     (synopsis "Implementation of warped linear mixed models")
     (description
@@ -5446,63 +5606,6 @@ which automatically learns an optimal warping function (or transformation) for
 the phenotype as it models the data.")
     (license license:asl2.0)))
 
-(define-public pbtranscript-tofu
-  (let ((commit "8f5467fe6a4472bcfb4226c8720993c8507adfe4"))
-    (package
-      (name "pbtranscript-tofu")
-      (version (string-append "2.2.3." (string-take commit 7)))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://github.com/PacificBiosciences/cDNA_primer")
-                      (commit commit)))
-                (file-name (string-append name "-" version "-checkout"))
-                (sha256
-                 (base32
-                  "1lgnpi35ihay42qx0b6yl3kkgra723i413j33kvs0kvs61h82w0f"))
-                (modules '((guix build utils)))
-                (snippet
-                 '(begin
-                    ;; remove bundled Cython sources
-                    (delete-file "pbtranscript-tofu/pbtranscript/Cython-0.20.1.tar.gz")
-                    #t))))
-      (build-system python-build-system)
-      (arguments
-       `(#:python ,python-2
-         ;; FIXME: Tests fail with "No such file or directory:
-         ;; pbtools/pbtranscript/modified_bx_intervals/intersection_unique.so"
-         #:tests? #f
-         #:phases
-         (modify-phases %standard-phases
-           (add-after 'unpack 'enter-directory
-            (lambda _
-              (chdir "pbtranscript-tofu/pbtranscript/")
-              #t))
-           ;; With setuptools version 18.0 and later this setup.py hack causes
-           ;; a build error, so we disable it.
-           (add-after 'enter-directory 'patch-setuppy
-            (lambda _
-              (substitute* "setup.py"
-                (("if 'setuptools.extension' in sys.modules:")
-                 "if False:"))
-              #t)))))
-      (inputs
-       `(("python-numpy" ,python2-numpy)
-         ("python-bx-python" ,python2-bx-python)
-         ("python-networkx" ,python2-networkx)
-         ("python-scipy" ,python2-scipy)
-         ("python-pbcore" ,python2-pbcore)
-         ("python-h5py" ,python2-h5py)))
-      (native-inputs
-       `(("python-cython" ,python2-cython)
-         ("python-nose" ,python2-nose)))
-      (home-page "https://github.com/PacificBiosciences/cDNA_primer")
-      (synopsis "Analyze transcriptome data generated with the Iso-Seq protocol")
-      (description
-       "pbtranscript-tofu contains scripts to analyze transcriptome data
-generated using the PacBio Iso-Seq protocol.")
-      (license license:bsd-3))))
-
 (define-public prank
   (package
     (name "prank")
@@ -5520,34 +5623,29 @@ generated using the PacBio Iso-Seq protocol.")
      `(#:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'enter-src-dir
-            (lambda _
-              (chdir "src")
-              #t))
+           (lambda _ (chdir "src")))
          (add-after 'unpack 'remove-m64-flag
            ;; Prank will build with the correct 'bit-ness' without this flag
            ;; and this allows building on 32-bit machines.
-           (lambda _ (substitute* "src/Makefile"
-                                  (("-m64") ""))
-             #t))
+           (lambda _
+             (substitute* "src/Makefile"
+               (("-m64") ""))))
          (delete 'configure)
          (replace 'install
-           (lambda* (#:key outputs #:allow-other-keys)
+           (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
                     (bin (string-append out "/bin"))
                     (man (string-append out "/share/man/man1"))
                     (path (string-append
-                           (assoc-ref %build-inputs "mafft") "/bin:"
-                           (assoc-ref %build-inputs "exonerate") "/bin:"
-                           (assoc-ref %build-inputs "bppsuite") "/bin")))
+                           (assoc-ref inputs "mafft") "/bin:"
+                           (assoc-ref inputs "exonerate") "/bin:"
+                           (assoc-ref inputs "bppsuite") "/bin")))
                (install-file "prank" bin)
                (wrap-program (string-append bin "/prank")
                  `("PATH" ":" prefix (,path)))
-               (install-file "prank.1" man))
-             #t)))))
+               (install-file "prank.1" man)))))))
     (inputs
-     `(("mafft" ,mafft)
-       ("exonerate" ,exonerate)
-       ("bppsuite" ,bppsuite)))
+     (list mafft exonerate bppsuite))
     (home-page "http://wasabiapp.org/software/prank/")
     (synopsis "Probabilistic multiple sequence alignment program")
     (description
@@ -5602,9 +5700,11 @@ predicts the locations of structural units in the sequences.")
          (add-after 'install 'wrap-programs
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((path (getenv "PATH"))
-                   (out (assoc-ref outputs "out")))
+                   (out (assoc-ref outputs "out"))
+                   (guile (search-input-file inputs "bin/guile")))
                (for-each (lambda (script)
-                           (wrap-script script `("PATH" ":" prefix (,path))))
+                           (wrap-script script #:guile guile
+                                        `("PATH" ":" prefix (,path))))
                          (cons (string-append out "/bin/proteinortho")
                                (find-files out "\\.(pl|py)$"))))
              #t)))))
@@ -5617,7 +5717,7 @@ predicts the locations of structural units in the sequences.")
        ("lapack" ,lapack)
        ("openblas" ,openblas)))
     (native-inputs
-     `(("which" ,which)))
+     (list which))
     (home-page "http://www.bioinf.uni-leipzig.de/Software/proteinortho")
     (synopsis "Detect orthologous genes across species")
     (description
@@ -5646,7 +5746,7 @@ large-scale data and can be applied to hundreds of species at once.")
      `(#:python ,python-2 ; does not work with Python 3
        #:tests? #f))      ; there are no tests
     (inputs
-     `(("python2-matplotlib" ,python2-matplotlib)))
+     (list python2-matplotlib))
     (home-page "https://bitbucket.org/regulatorygenomicsupf/pyicoteo")
     (synopsis "Analyze high-throughput genetic sequencing data")
     (description
@@ -5684,9 +5784,8 @@ different command-line tools:
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ; no check target
-       #:make-flags (list (string-append "INSTALLDIR="
-                                         (assoc-ref %outputs "out")
-                                         "/bin"))
+       #:make-flags
+       ,#~(list (string-append "INSTALLDIR=" #$output "/bin"))
        #:phases
        (modify-phases %standard-phases
          (delete 'configure))))
@@ -5762,7 +5861,7 @@ partial genes, and identifies translation initiation sites.")
                       (string-append out "/bin/roary-create_pan_genome_plots.R"))
                      (r-site-lib (getenv "R_LIBS_SITE"))
                      (coreutils-path
-                      (string-append (assoc-ref inputs "coreutils") "/bin")))
+                      (dirname (search-input-file inputs "bin/chmod"))))
                  (wrap-program file
                    `("R_LIBS_SITE" ":" prefix
                      (,(string-append r-site-lib ":" out "/site-library/"))))
@@ -5771,10 +5870,7 @@ partial genes, and identifies translation initiation sites.")
                      (,(string-append coreutils-path ":" out "/bin"))))))
              #t)))))
     (native-inputs
-     `(("perl-env-path" ,perl-env-path)
-       ("perl-test-files" ,perl-test-files)
-       ("perl-test-most" ,perl-test-most)
-       ("perl-test-output" ,perl-test-output)))
+     (list perl-env-path perl-test-files perl-test-most perl-test-output))
     (inputs
      `(("perl-array-utils" ,perl-array-utils)
        ("bioperl" ,bioperl-minimal)
@@ -5847,7 +5943,7 @@ extremely diverse sets of genomes.")
                (symlink (string-append bin "/" executable) "raxml"))
              #t)))))
     (inputs
-     `(("openmpi" ,openmpi)))
+     (list openmpi))
     (home-page "https://cme.h-its.org/exelixis/web/software/raxml/index.html")
     (synopsis "Randomized Axelerated Maximum Likelihood phylogenetic trees")
     (description
@@ -5860,7 +5956,7 @@ phylogenies.")
 (define-public rsem
   (package
     (name "rsem")
-    (version "1.3.1")
+    (version "1.3.3")
     (source
      (origin
        (method git-fetch)
@@ -5868,38 +5964,46 @@ phylogenies.")
              (url "https://github.com/deweylab/RSEM")
              (commit (string-append "v" version))))
        (sha256
-        (base32 "1jlq11d1p8qp64w75yj8cnbbd1a93viq10pzsbwal7vdn8fg13j1"))
+        (base32 "1yl4i7z20n2p84j1lmk15aiak3yqc6fiw0q5a4pndw7pxfiq3rzp"))
        (file-name (git-file-name name version))
        (modules '((guix build utils)))
        (snippet
         '(begin
            ;; remove bundled copy of boost and samtools
            (delete-file-recursively "boost")
-           (delete-file-recursively "samtools-1.3")
-           #t))))
+           (delete-file-recursively "samtools-1.3")))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ;no "check" target
        #:make-flags
-       (list (string-append "BOOST="
-                            (assoc-ref %build-inputs "boost")
-                            "/include/")
-             (string-append "SAMHEADERS="
-                            (assoc-ref %build-inputs "htslib")
-                            "/include/htslib/sam.h")
-             (string-append "SAMLIBS="
-                            (assoc-ref %build-inputs "htslib")
-                            "/lib/libhts.so"))
+       ,#~(list (string-append "BOOST="
+                               #$(this-package-input "boost")
+                               "/include/")
+                (string-append "SAMHEADERS="
+                               #$(this-package-input "htslib")
+                               "/include/htslib/sam.h")
+                (string-append "SAMLIBS="
+                               #$(this-package-input "htslib")
+                               "/lib/libhts.so"))
        #:phases
        (modify-phases %standard-phases
          ;; No "configure" script.
-         ;; Do not build bundled samtools library.
          (replace 'configure
            (lambda _
              (substitute* "Makefile"
                (("^all : \\$\\(PROGRAMS\\).*") "all: $(PROGRAMS)\n")
-               (("^\\$\\(SAMLIBS\\).*") ""))
-             #t))
+               ;; Do not build bundled samtools library.
+               (("^\\$\\(SAMLIBS\\).*") "")
+               ;; Needed for Boost
+               (("gnu\\+\\+98") "gnu++11"))
+             ;; C++11 compatibility
+             (substitute* "buildReadIndex.cpp"
+               (("success = \\(getline")
+                "success = (bool)(getline"))
+             (substitute* '("PairedEndHit.h"
+                            "SingleHit.h")
+               (("return \\(in>>sid>>pos")
+                "return (bool)(in>>sid>>pos"))))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (string-append (assoc-ref outputs "out")))
@@ -5910,8 +6014,7 @@ phylogenies.")
                (for-each (lambda (file)
                            (install-file file bin))
                          (find-files "." "rsem-.*"))
-               (install-file "rsem_perl_utils.pm" perl))
-             #t))
+               (install-file "rsem_perl_utils.pm" perl))))
          (add-after 'install 'wrap-program
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
@@ -5926,14 +6029,9 @@ phylogenies.")
                            "rsem-plot-transcript-wiggles"
                            "rsem-prepare-reference"
                            "rsem-run-ebseq"
-                           "rsem-run-prsem-testing-procedure")))
-             #t)))))
+                           "rsem-run-prsem-testing-procedure"))))))))
     (inputs
-     `(("boost" ,boost)
-       ("r-minimal" ,r-minimal)
-       ("perl" ,perl)
-       ("htslib" ,htslib-1.3)
-       ("zlib" ,zlib)))
+     (list boost r-minimal perl htslib-1.3 zlib))
     (home-page "http://deweylab.biostat.wisc.edu/rsem/")
     (synopsis "Estimate gene expression levels from RNA-Seq data")
     (description
@@ -5961,14 +6059,14 @@ BAM and Wiggle files in both transcript-coordinate and genomic-coordinate.")
          "0gbb9iyb7swiv5455fm5rg98r7l6qn27v564yllqjd574hncpx6m"))))
     (build-system python-build-system)
     (inputs
-     `(("python-cython" ,python-cython)
-       ("python-bx-python" ,python-bx-python)
-       ("python-pybigwig" ,python-pybigwig)
-       ("python-pysam" ,python-pysam)
-       ("python-numpy" ,python-numpy)
-       ("zlib" ,zlib)))
+     (list python-cython
+           python-bx-python
+           python-pybigwig
+           python-pysam
+           python-numpy
+           zlib))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (home-page "http://rseqc.sourceforge.net/")
     (synopsis "RNA-seq quality control package")
     (description
@@ -5980,67 +6078,55 @@ distribution, coverage uniformity, strand specificity, etc.")
     (license license:gpl3+)))
 
 (define-public seek
-  ;; There are no release tarballs.  According to the installation
-  ;; instructions at http://seek.princeton.edu/installation.jsp, the latest
-  ;; stable release is identified by this changeset ID.
-  (let ((changeset "2329130")
+  ;; There are no release tarballs.  And the installation instructions at
+  ;; http://seek.princeton.edu/installation.jsp only mention a mercurial
+  ;; changeset ID.  This is a git repository, though.  So we just take the
+  ;; most recent commit.
+  (let ((commit "196ed4c7633246e9c628e4330d77577ccfd7f1e5")
         (revision "1"))
     (package
       (name "seek")
-      (version (string-append "0-" revision "." changeset))
+      (version (git-version "1" revision commit))
       (source (origin
-                (method hg-fetch)
-                (uri (hg-reference
-                      (url "https://bitbucket.org/libsleipnir/sleipnir")
-                      (changeset changeset)))
-                (file-name (string-append name "-" version "-checkout"))
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/FunctionLab/sleipnir.git")
+                      (commit commit)
+                      (recursive? #true)))
+                (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "0qrvilwh18dpbhkf92qvxbmay0j75ra3jg2wrhz67gf538zzphsx"))))
-      (build-system gnu-build-system)
+                  "0c658n8nz563a96dsi4gl2685vxph0yfmmqq5yjc6i4xin1jy1ab"))))
+      (build-system cmake-build-system)
       (arguments
-       `(#:modules ((srfi srfi-1)
-                    (guix build gnu-build-system)
-                    (guix build utils))
+       `(#:configure-flags
+         ,#~(list (string-append "-DSVM_LIBRARY="
+                                 #$(this-package-input "libsvm")
+                                 "/lib/libsvm.so.2")
+                  (string-append "-DSVM_INCLUDE="
+                                 #$(this-package-input "libsvm")
+                                 "/include"))
+         #:tests? #false ; tests only fail in the build container
          #:phases
-         (let ((dirs '("SeekMiner"
-                       "SeekEvaluator"
-                       "SeekPrep"
-                       "Distancer"
-                       "Data2DB"
-                       "PCL2Bin")))
-           (modify-phases %standard-phases
-             (replace 'bootstrap
-               (lambda _
-                 (substitute* "gen_tools_am"
-                   (("/usr/bin/env.*") (which "perl")))
-                 (invoke "bash" "gen_auto")
-                 #t))
-             (add-after 'build 'build-additional-tools
-               (lambda* (#:key make-flags #:allow-other-keys)
-                 (for-each (lambda (dir)
-                             (with-directory-excursion (string-append "tools/" dir)
-                               (apply invoke "make" make-flags)))
-                           dirs)
-                 #t))
-             (add-after 'install 'install-additional-tools
-               (lambda* (#:key make-flags #:allow-other-keys)
-                 (for-each (lambda (dir)
-                             (with-directory-excursion (string-append "tools/" dir)
-                               (apply invoke `("make" ,@make-flags "install"))))
-                           dirs)
-                 #t))))))
+         (modify-phases %standard-phases
+           ;; The check phase expects to find the unit_tests executable in the
+           ;; "build/bin" directory, but it is actually in "build/tests".
+           (replace 'check
+             (lambda* (#:key tests? #:allow-other-keys)
+               (when tests?
+                 (invoke "tests/unit_tests")))))))
       (inputs
-       `(("gsl" ,gsl)
+       `(("apache-thrift:include" ,apache-thrift "include")
+         ("apache-thrift:lib" ,apache-thrift "lib")
+         ("gsl" ,gsl)
          ("boost" ,boost)
-         ("libsvm" ,libsvm)
-         ("readline" ,readline)
          ("gengetopt" ,gengetopt)
-         ("log4cpp" ,log4cpp)))
+         ("libsvm" ,libsvm)
+         ("log4cpp" ,log4cpp)
+         ("python" ,python)
+         ("readline" ,readline)))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("perl" ,perl)))
+       (list pkg-config))
       (home-page "http://seek.princeton.edu")
       (synopsis "Gene co-expression search engine")
       (description
@@ -6055,7 +6141,7 @@ to the user's query of interest.")
 (define-public samtools
   (package
     (name "samtools")
-    (version "1.12")
+    (version "1.14")
     (source
      (origin
        (method url-fetch)
@@ -6064,47 +6150,24 @@ to the user's query of interest.")
                        version "/samtools-" version ".tar.bz2"))
        (sha256
         (base32
-         "1jrdj2idpma5ja9cg0rr73b565vdbr9wyy6zig54bidicc2pg8vd"))
+         "0x3xdda78ac5vx66b3jdsv9sfhyz4npl4znl1zbaf3lbm6xdlhck"))
        (modules '((guix build utils)))
        (snippet '(begin
                    ;; Delete bundled htslib.
-                   (delete-file-recursively "htslib-1.12")
-                   #t))))
+                   (delete-file-recursively "htslib-1.14")))))
     (build-system gnu-build-system)
     (arguments
-     `(#:modules ((ice-9 ftw)
-                  (ice-9 regex)
-                  (guix build gnu-build-system)
-                  (guix build utils))
-       #:configure-flags (list "--with-ncurses")
+     `(#:configure-flags (list "--with-ncurses")
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-tests
            (lambda _
              (substitute* "test/test.pl"
                ;; The test script calls out to /bin/bash
-               (("/bin/bash") (which "bash")))
-             #t))
-         (add-after 'install 'install-library
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((lib (string-append (assoc-ref outputs "out") "/lib")))
-               (install-file "libbam.a" lib)
-               #t)))
-         (add-after 'install 'install-headers
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((include (string-append (assoc-ref outputs "out")
-                                           "/include/samtools/")))
-               (for-each (lambda (file)
-                           (install-file file include))
-                         (scandir "." (lambda (name) (string-match "\\.h$" name))))
-               #t))))))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+               (("/bin/bash") (which "bash"))))))))
+    (native-inputs (list pkg-config))
     (inputs
-     `(("htslib" ,htslib)
-       ("ncurses" ,ncurses)
-       ("perl" ,perl)
-       ("python" ,python)
-       ("zlib" ,zlib)))
+     (list htslib ncurses perl python zlib))
     (home-page "http://samtools.sourceforge.net")
     (synopsis "Utilities to efficiently manipulate nucleotide sequence alignments")
     (description
@@ -6114,6 +6177,47 @@ variant calling (in conjunction with bcftools), and a simple alignment
 viewer.")
     (license license:expat)))
 
+(define-public samtools-1.12
+  (package/inherit samtools
+    (version "1.12")
+    (source
+     (origin
+       (method url-fetch)
+       (uri
+        (string-append "mirror://sourceforge/samtools/samtools/"
+                       version "/samtools-" version ".tar.bz2"))
+       (sha256
+        (base32
+         "1jrdj2idpma5ja9cg0rr73b565vdbr9wyy6zig54bidicc2pg8vd"))
+       (modules '((guix build utils)))
+       (snippet '(begin
+                   ;; Delete bundled htslib.
+                   (delete-file-recursively "htslib-1.12")))))
+    (arguments
+     (substitute-keyword-arguments (package-arguments samtools)
+       ((#:modules _ #f)
+        '((ice-9 ftw)
+          (ice-9 regex)
+          (guix build gnu-build-system)
+          (guix build utils)))
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (add-after 'install 'install-library
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let ((lib (string-append (assoc-ref outputs "out") "/lib")))
+                 (install-file "libbam.a" lib))))
+           (add-after 'install 'install-headers
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let ((include (string-append (assoc-ref outputs "out")
+                                             "/include/samtools/")))
+                 (for-each (lambda (file)
+                             (install-file file include))
+                           (scandir "." (lambda (name)
+                                          (string-match "\\.h$" name)))))))))))
+    (native-inputs (list pkg-config))
+    (inputs
+     (list htslib-1.12 ncurses perl python zlib))))
+
 (define-public samtools-1.10
   (package (inherit samtools)
     (name "samtools")
@@ -6133,11 +6237,64 @@ viewer.")
                    (delete-file-recursively "htslib-1.10")
                    #t))))
     (inputs
-     `(("htslib" ,htslib-1.10)
-       ("ncurses" ,ncurses)
-       ("perl" ,perl)
-       ("python" ,python)
-       ("zlib" ,zlib)))))
+     (list htslib-1.10 ncurses perl python zlib))))
+
+(define-public samtools-1.2
+  (package (inherit samtools)
+    (name "samtools")
+    (version "1.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri
+        (string-append "mirror://sourceforge/samtools/samtools/"
+                       version "/samtools-" version ".tar.bz2"))
+       (sha256
+        (base32
+         "1akdqb685pk9xk1nb6sa9aq8xssjjhvvc06kp4cpdqvz2157l3j2"))
+       (modules '((guix build utils)))
+       (snippet
+        ;; Delete bundled htslib and Windows binaries
+        '(for-each delete-file-recursively (list "win32" "htslib-1.2.1")))))
+    (arguments
+     `(#:make-flags
+       ,#~(list (string-append "prefix=" #$output)
+                (string-append "BGZIP="
+                               #$(this-package-input "htslib")
+                               "/bin/bgzip")
+                (string-append "HTSLIB="
+                               #$(this-package-input "htslib")
+                               "/lib/libhts.so")
+                (string-append "HTSDIR="
+                               #$(this-package-input "htslib")
+                               "/include"))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-makefile-curses
+           (lambda _
+             (substitute* "Makefile"
+               (("-lcurses") "-lncurses")
+               (("include \\$\\(HTSDIR.*") ""))))
+         (add-after 'unpack 'patch-tests
+           (lambda _
+             (substitute* "test/test.pl"
+               ;; The test script calls out to /bin/bash
+               (("/bin/bash") (which "bash"))
+               ;; There are two failing tests upstream relating to the "stats"
+               ;; subcommand in test_usage_subcommand ("did not have Usage"
+               ;; and "usage did not mention samtools stats"), so we disable
+               ;; them.
+               (("(test_usage_subcommand\\(.*\\);)" cmd)
+                (string-append "unless ($subcommand eq 'stats') {" cmd "};")))
+             ;; This test fails because the grep output doesn't look as
+             ;; expected; it is correct, though.
+             (substitute* "test/mpileup/mpileup.reg"
+               (("P 52.out.*") ""))))
+         (delete 'configure))))
+    (native-inputs
+     (list grep gawk pkg-config))
+    (inputs
+     (list htslib-for-samtools-1.2 ncurses perl python zlib))))
 
 (define-public samtools-0.1
   ;; This is the most recent version of the 0.1 line of samtools.  The input
@@ -6158,6 +6315,11 @@ viewer.")
        #:make-flags
        (list "LIBCURSES=-lncurses")
        ,@(substitute-keyword-arguments (package-arguments samtools)
+           ((#:modules _ #f)
+            '((ice-9 ftw)
+              (ice-9 regex)
+              (guix build gnu-build-system)
+              (guix build utils)))
            ((#:phases phases)
             `(modify-phases ,phases
                (replace 'install
@@ -6167,6 +6329,18 @@ viewer.")
                      (mkdir-p bin)
                      (install-file "samtools" bin)
                      #t)))
+               (add-after 'install 'install-library
+                 (lambda* (#:key outputs #:allow-other-keys)
+                   (let ((lib (string-append (assoc-ref outputs "out") "/lib")))
+                     (install-file "libbam.a" lib))))
+               (add-after 'install 'install-headers
+                 (lambda* (#:key outputs #:allow-other-keys)
+                   (let ((include (string-append (assoc-ref outputs "out")
+                                                 "/include/samtools/")))
+                     (for-each (lambda (file)
+                                 (install-file file include))
+                               (scandir "." (lambda (name)
+                                              (string-match "\\.h$" name)))))))
                (delete 'patch-tests)
                (delete 'configure))))))))
 
@@ -6249,8 +6423,7 @@ Roche 454, Ion Torrent and Pacific BioSciences SMRT.")
                (mkdir-p share)
                (copy-recursively "../R" share)))))))
     (inputs
-     `(("boost" ,boost)
-       ("htslib" ,htslib)))
+     (list boost htslib))
     (home-page "https://github.com/friendsofstrandseq/mosaicatcher")
     (synopsis "Count and classify Strand-seq reads")
     (description
@@ -6292,7 +6465,7 @@ each chromosome in each cell using a Hidden Markov Model.")
                #t)))
          (add-after 'unpack 'enter-dir
            (lambda _ (chdir "ngs-sdk") #t)))))
-    (native-inputs `(("perl" ,perl)))
+    (native-inputs (list perl))
     ;; According to the test
     ;;   unless ($MARCH =~ /x86_64/i || $MARCH =~ /i?86/i)
     ;; in ngs-sdk/setup/konfigure.perl
@@ -6430,7 +6603,7 @@ simultaneously.")
        ("java-ngs" ,java-ngs)
        ("libmagic" ,file)
        ("hdf5" ,hdf5)))
-    (native-inputs `(("perl" ,perl)))
+    (native-inputs (list perl))
     ;; NCBI-VDB requires SSE capability.
     (supported-systems '("i686-linux" "x86_64-linux"))
     (home-page "https://github.com/ncbi/ncbi-vdb")
@@ -6458,29 +6631,27 @@ accessed/downloaded on demand across HTTP.")
                                 "plink-endian-detection.patch"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:tests? #f ;no "check" target
-       #:make-flags (list (string-append "LIB_LAPACK="
-                                         (assoc-ref %build-inputs "lapack")
-                                         "/lib/liblapack.so")
-                          "WITH_LAPACK=1"
-                          "FORCE_DYNAMIC=1"
-                          ;; disable phoning home
-                          "WITH_WEBCHECK=")
+     `(#:tests? #f ;no "check" target
+       #:make-flags ,#~(list (string-append "LIB_LAPACK="
+                                            #$(this-package-input "lapack")
+                                            "/lib/liblapack.so")
+                             "WITH_LAPACK=1"
+                             "FORCE_DYNAMIC=1"
+                             ;; disable phoning home
+                             "WITH_WEBCHECK=")
        #:phases
        (modify-phases %standard-phases
          ;; no "configure" script
          (delete 'configure)
          (replace 'install
-                  (lambda* (#:key outputs #:allow-other-keys)
-                    (let ((bin (string-append (assoc-ref outputs "out")
-                                              "/bin/")))
-                      (install-file "plink" bin)
-                      #t))))))
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((bin (string-append (assoc-ref outputs "out")
+                                       "/bin/")))
+               (install-file "plink" bin)))))))
     (inputs
-     `(("zlib" ,zlib)
-       ("lapack" ,lapack)))
+     (list zlib lapack))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "http://pngu.mgh.harvard.edu/~purcell/plink/")
     (synopsis "Whole genome association analysis toolset")
     (description
@@ -6510,23 +6681,36 @@ subsequent visualization, annotation and storage of results.")
         (base32 "1p88lz9agzjlspjhciz61qjc36cfniv4nkxszyy0njqyc5rzc0cd"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:tests? #f ;no "check" target
-       #:make-flags (list "BLASFLAGS=-llapack -lopenblas"
-                          "CFLAGS=-Wall -O2 -DDYNAMIC_ZLIB=1"
-                          "ZLIB=-lz"
-                          "BIN=plink prettify"
-                          (string-append "CC=" ,(cc-for-target))
-                          (string-append "PREFIX=" (assoc-ref %outputs "out"))
-                          "DESTDIR=")
+     `(#:make-flags
+       ,#~(list "BLASFLAGS=-llapack -lopenblas"
+                "CFLAGS=-Wall -O2 -DDYNAMIC_ZLIB=1"
+                "ZLIB=-lz"
+                "BIN=plink prettify"
+                (string-append "CC=" #$(cc-for-target))
+                (string-append "PREFIX=" #$output)
+                "DESTDIR=")
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'chdir
-           (lambda _ (chdir "1.9") #t))
-         (delete 'configure)))) ; no "configure" script
+           (lambda _ (chdir "1.9")))
+         (delete 'configure)  ; no "configure" script
+         (replace 'check
+           (lambda* (#:key tests? inputs #:allow-other-keys)
+             (when tests?
+               (symlink "plink" "plink19")
+               (symlink (search-input-file inputs "/bin/plink") "plink107")
+               (setenv "PATH" (string-append (getcwd) ":" (getenv "PATH")))
+               (with-directory-excursion "tests"
+                 ;; The model test fails because of a 0.0001 difference.
+                 (substitute* "tests.py"
+                   (("diff -q test1.model test2.model")
+                    "echo yes"))
+                 (invoke "bash" "test_setup.sh")
+                 (invoke "python3" "tests.py"))))))))
     (inputs
-     `(("lapack" ,lapack)
-       ("openblas" ,openblas)
-       ("zlib" ,zlib)))
+     (list lapack openblas zlib))
+    (native-inputs
+     (list diffutils plink python)) ; for tests
     (home-page "https://www.cog-genomics.org/plink/")
     (license license:gpl3+)))
 
@@ -6573,8 +6757,7 @@ subsequent visualization, annotation and storage of results.")
               #t))
            (delete 'configure))))
       (inputs
-       `(("samtools" ,samtools-0.1)
-         ("zlib" ,zlib)))
+       (list samtools-0.1 zlib))
       (home-page "https://github.com/smithlabcode/smithlab_cpp")
       (synopsis "C++ helper library for functions used in Smith lab projects")
       (description
@@ -6595,10 +6778,8 @@ structures, classes for genomic regions, mapped sequencing reads, etc.")
               (sha256
                (base32 "149x9xmk1wy1gff85325yfzqc0qk4sgp1w6gbyj9cnji4x1dszbl"))
               (modules '((guix build utils)))
-              (snippet '(begin
-                          ;; Remove bundled samtools.
-                          (delete-file-recursively "samtools")
-                          #t))))
+              ;; Remove bundled samtools.
+              (snippet '(delete-file-recursively "samtools"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ;no "check" target
@@ -6606,21 +6787,17 @@ structures, classes for genomic regions, mapped sequencing reads, etc.")
        (modify-phases %standard-phases
          (delete 'configure))
        #:make-flags
-       (list (string-append "PREFIX="
-                            (assoc-ref %outputs "out"))
-             (string-append "LIBBAM="
-                            (assoc-ref %build-inputs "samtools")
-                            "/lib/libbam.a")
-             (string-append "SMITHLAB_CPP="
-                            (assoc-ref %build-inputs "smithlab-cpp")
-                            "/lib")
-             "PROGS=preseq"
-             "INCLUDEDIRS=$(SMITHLAB_CPP)/../include/smithlab-cpp $(SAMTOOLS_DIR)")))
-    (inputs
-     `(("gsl" ,gsl)
-       ("samtools" ,samtools-0.1)
-       ("smithlab-cpp" ,smithlab-cpp)
-       ("zlib" ,zlib)))
+       ,#~(list (string-append "PREFIX=" #$output)
+                (string-append "LIBBAM="
+                               #$(this-package-input "samtools")
+                               "/lib/libbam.a")
+                (string-append "SMITHLAB_CPP="
+                               #$(this-package-input "smithlab-cpp")
+                               "/lib")
+                "PROGS=preseq"
+                "INCLUDEDIRS=$(SMITHLAB_CPP)/../include/smithlab-cpp $(SAMTOOLS_DIR)")))
+    (inputs
+     (list gsl samtools-0.1 smithlab-cpp zlib))
     (home-page "http://smithlabresearch.org/software/preseq/")
     (synopsis "Program for analyzing library complexity")
     (description
@@ -6645,31 +6822,10 @@ complexity samples.")
         (base32
          "148vcb7w2wr6a4w6vs2bsxanbqibxfk490zbcbg4m61s8669zdjx"))))
     (build-system python-build-system)
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         ;; Tests must be run after installation, as the "screed" command does
-         ;; not exist right after building.
-         (delete 'check)
-         (add-after 'install 'check
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out")))
-               (setenv "PYTHONPATH"
-                       (string-append out "/lib/python"
-                                      (string-take (string-take-right
-                                                    (assoc-ref inputs "python")
-                                                    5) 3)
-                                      "/site-packages:"
-                                      (getenv "PYTHONPATH")))
-               (setenv "PATH" (string-append out "/bin:" (getenv "PATH"))))
-             (invoke "python" "setup.py" "test")
-             #t)))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-pytest python-pytest-cov python-pytest-runner))
     (inputs
-     `(("python-bz2file" ,python-bz2file)))
+     (list python-bz2file))
     (home-page "https://github.com/dib-lab/screed/")
     (synopsis "Short read sequence database utilities")
     (description "Screed parses FASTA and FASTQ files and generates databases.
@@ -6699,19 +6855,19 @@ sequence itself can be retrieved from these databases.")
      `(#:parallel-build? #f             ; not supported
        #:tests? #f                      ; no "check" target
        #:make-flags
-       (list (string-append "DEFAULT_CRT="
-                            (assoc-ref %build-inputs "ncbi-vdb")
-                            "/kfg/certs.kfg")
-             (string-append "DEFAULT_KFG="
-                            (assoc-ref %build-inputs "ncbi-vdb")
-                            "/kfg/default.kfg")
-             (string-append "VDB_LIBDIR="
-                            (assoc-ref %build-inputs "ncbi-vdb")
-                            ,(if (string-prefix? "x86_64"
-                                                 (or (%current-target-system)
-                                                     (%current-system)))
-                                 "/lib64"
-                                 "/lib32")))
+       ,#~(list (string-append "DEFAULT_CRT="
+                               #$(this-package-input "ncbi-vdb")
+                               "/kfg/certs.kfg")
+                (string-append "DEFAULT_KFG="
+                               #$(this-package-input "ncbi-vdb")
+                               "/kfg/default.kfg")
+                (string-append "VDB_LIBDIR="
+                               #$(this-package-input "ncbi-vdb")
+                               #$(if (string-prefix? "x86_64"
+                                                     (or (%current-target-system)
+                                                         (%current-system)))
+                                     "/lib64"
+                                     "/lib32")))
        #:phases
        (modify-phases %standard-phases
          (add-before 'configure 'set-perl-search-path
@@ -6767,7 +6923,7 @@ sequence itself can be retrieved from these databases.")
                      (string-append "--with-hdf5-prefix="
                                     (assoc-ref inputs "hdf5")))
              #t)))))
-    (native-inputs `(("perl" ,perl)))
+    (native-inputs (list perl))
     (inputs
      `(("ngs-sdk" ,ngs-sdk)
        ("ncbi-vdb" ,ncbi-vdb)
@@ -6805,9 +6961,7 @@ writing files into the .sra format.")
            (lambda _
              (invoke "ctest" "test" "--output-on-failure"))))))
     (native-inputs
-     `(("bzip2" ,bzip2)
-       ("cereal" ,cereal)
-       ("zlib" ,zlib)))
+     (list bzip2 cereal zlib))
     (home-page "https://www.seqan.de")
     (synopsis "Library for nucleotide sequence analysis")
     (description
@@ -6837,18 +6991,17 @@ bioinformatics file formats, sequence alignment, and more.")
     (arguments
      `(#:modules ((guix build utils))
        #:builder
-       (begin
-         (use-modules (guix build utils))
-         (let ((tar (assoc-ref %build-inputs "tar"))
-               (xz  (assoc-ref %build-inputs "xz"))
-               (out (assoc-ref %outputs "out"))
-               (doc (assoc-ref %outputs "doc")))
-           (setenv "PATH" (string-append tar "/bin:" xz "/bin"))
-           (invoke "tar" "xvf" (assoc-ref %build-inputs "source"))
-           (chdir (string-append "seqan-library-" ,version))
-           (copy-recursively "include" (string-append out "/include"))
-           (copy-recursively "share"  (string-append doc "/share"))
-           #t))))
+       ,#~(begin
+            (use-modules (guix build utils))
+            (let ((tar #$(this-package-native-input "tar"))
+                  (xz  #$(this-package-native-input "xz"))
+                  (out #$output)
+                  (doc #$output:doc))
+              (setenv "PATH" (string-append tar "/bin:" xz "/bin"))
+              (invoke "tar" "xvf" #$(this-package-native-input "source"))
+              (chdir (string-append "seqan-library-" #$version))
+              (copy-recursively "include" (string-append out "/include"))
+              (copy-recursively "share"  (string-append doc "/share"))))))
     (native-inputs
      `(("source" ,source)
        ("tar" ,tar)
@@ -6872,18 +7025,17 @@ bioinformatics file formats, sequence alignment, and more.")
     (arguments
      `(#:modules ((guix build utils))
        #:builder
-       (begin
-         (use-modules (guix build utils))
-         (let ((tar  (assoc-ref %build-inputs "tar"))
-               (bzip (assoc-ref %build-inputs "bzip2"))
-               (out  (assoc-ref %outputs "out"))
-               (doc  (assoc-ref %outputs "doc")))
-           (setenv "PATH" (string-append tar "/bin:" bzip "/bin"))
-           (invoke "tar" "xvf" (assoc-ref %build-inputs "source"))
-           (chdir (string-append "seqan-library-" ,version))
-           (copy-recursively "include" (string-append out "/include"))
-           (copy-recursively "share"  (string-append doc "/share"))
-           #t))))
+       ,#~(begin
+            (use-modules (guix build utils))
+            (let ((tar  #$(this-package-native-input "tar"))
+                  (bzip #$(this-package-native-input "bzip2"))
+                  (out #$output)
+                  (doc #$output:doc))
+              (setenv "PATH" (string-append tar "/bin:" bzip "/bin"))
+              (invoke "tar" "xvf" #$(this-package-native-input "source"))
+              (chdir (string-append "seqan-library-" #$version))
+              (copy-recursively "include" (string-append out "/include"))
+              (copy-recursively "share"  (string-append doc "/share"))))))
     (native-inputs
      `(("source" ,source)
        ("tar" ,tar)
@@ -6902,9 +7054,9 @@ bioinformatics file formats, sequence alignment, and more.")
          "0pf98da7i59q47gwrbx0wjk6xlvbybiwphw80w7h4ydjj0579a2b"))))
     (build-system python-build-system)
     (inputs
-     `(("python-biopython" ,python-biopython)))
+     (list python-biopython))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (home-page "https://github.com/fhcrc/seqmagick")
     (synopsis "Tools for converting and modifying sequence files")
     (description
@@ -6942,7 +7094,7 @@ is one that takes arguments.")
                (install-file "seqtk" bin)
                #t))))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "https://github.com/lh3/seqtk")
     (synopsis "Toolkit for processing biological sequences in FASTA/Q format")
     (description
@@ -6954,7 +7106,7 @@ optionally compressed by gzip.")
 (define-public snap-aligner
   (package
     (name "snap-aligner")
-    (version "1.0beta.18")
+    (version "2.0.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -6963,22 +7115,23 @@ optionally compressed by gzip.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "01w3qq4wm07z73vky0cfwlmrbf50n3w722cxrlzxfi99mnb808d8"))))
+                "0yag3jcazdqfxgmw0vbi91i98kj9sr0aqx83qqj6m5b45wxs7jms"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
        (modify-phases %standard-phases
          (delete 'configure)
-         (replace 'check (lambda _ (invoke "./unit_tests") #t))
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests? (invoke "./unit_tests"))))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
                     (bin (string-append out "/bin")))
                (install-file "snap-aligner" bin)
-               (install-file "SNAPCommand" bin)
-               #t))))))
+               (install-file "SNAPCommand" bin)))))))
     (native-inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "http://snap.cs.berkeley.edu/")
     (synopsis "Short read DNA sequence aligner")
     (description
@@ -6995,23 +7148,49 @@ of these reads to align data quickly through a hash-based indexing scheme.")
 (define-public sortmerna
   (package
     (name "sortmerna")
-    (version "2.1b")
+    (version "4.3.4")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
              (url "https://github.com/biocore/sortmerna")
-             (commit version)))
+             (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0j3mbz4n25738yijmjbr5r4fyvkgm8v5vn3sshyfvmyqf5q9byqf"))))
-    (build-system gnu-build-system)
+         "0f8jfc8vsq6llhbb92p9yv7nbp566yqwfcmq3g2hw0n7d8hyl3a8"))))
+    (build-system cmake-build-system)
     (outputs '("out"      ;for binaries
                "db"))     ;for sequence databases
     (arguments
-     `(#:phases
-       (modify-phases %standard-phases
+     (list
+      #:tests? #false ;unclear how to run them
+      #:configure-flags
+      #~(list "-DWITH_TESTS=ON"
+              "-DCMAKE_CXX_FLAGS=-pthread"
+              "-DZLIB_STATIC=OFF"
+              "-DROCKSDB_STATIC=OFF"
+              "-DPORTABLE=OFF" ;do not use static linking
+              (string-append "-DROCKSDB_HOME="
+                             #$(this-package-input "rocksdb"))
+              (string-append "-DRAPIDJSON_HOME="
+                             #$(this-package-input "rapidjson"))
+              (string-append "-DRapidJson_DIR="
+                             #$(this-package-input "rapidjson")
+                             "/lib/cmake/RapidJSON")
+              (string-append "-DRapidJSON_INCLUDE_DIR="
+                             #$(this-package-input "rapidjson")
+                             "/include"))
+      #:phases
+      '(modify-phases %standard-phases
+         (add-after 'unpack 'find-concurrentqueue-headers
+           (lambda* (#:key inputs #:allow-other-keys)
+             ;; Ensure that headers can be found
+             (setenv "CPLUS_INCLUDE_PATH"
+                     (string-append (search-input-directory
+                                     inputs "/include/concurrentqueue")
+                                    ":"
+                                    (or (getenv "CPLUS_INCLUDE_PATH") "")))))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out   (assoc-ref outputs "out"))
@@ -7019,14 +7198,16 @@ of these reads to align data quickly through a hash-based indexing scheme.")
                     (db    (assoc-ref outputs "db"))
                     (share
                      (string-append db "/share/sortmerna/rRNA_databases")))
-               (install-file "sortmerna" bin)
-               (install-file "indexdb_rna" bin)
+               (install-file "src/sortmerna" bin)
                (for-each (lambda (file)
                            (install-file file share))
-                         (find-files "rRNA_databases" ".*fasta"))
-               #t))))))
+                         (find-files "../source/data/rRNA_databases" ".*fasta"))))))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list concurrentqueue
+           gflags ; because of rocksdb
+           rapidjson rocksdb zlib))
+    (native-inputs
+     (list pkg-config))
     (home-page "https://bioinfo.lifl.fr/RNA/sortmerna/")
     (synopsis "Biological sequence analysis tool for NGS reads")
     (description
@@ -7108,10 +7289,9 @@ application of SortMeRNA is filtering rRNA from metatranscriptomic data.")
              #t))
          (delete 'configure))))
     (native-inputs
-     `(("xxd" ,xxd)))
+     (list xxd))
     (inputs
-     `(("htslib" ,htslib)
-       ("zlib" ,zlib)))
+     (list htslib zlib))
     (home-page "https://github.com/alexdobin/STAR")
     (synopsis "Universal RNA-seq aligner")
     (description
@@ -7178,14 +7358,14 @@ sequences.")
 (define-public subread
   (package
     (name "subread")
-    (version "1.6.0")
+    (version "2.0.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/subread/subread-"
                                   version "/subread-" version "-source.tar.gz"))
               (sha256
                (base32
-                "0ah0n4jx6ksk2m2j7xk385x2qzmk1y4rfc6a4mfrdqrlq721w99i"))))
+                "0szmllia7jl0annk5568xjhw6cc8yj1c5mb961qk5m0lz6ig7kjn"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ;no "check" target
@@ -7197,7 +7377,7 @@ sequences.")
                                 (%current-system)))
                    (flags '("-ggdb" "-fomit-frame-pointer"
                             "-ffast-math" "-funroll-loops"
-                            "-fmessage-length=0"
+                            "-fmessage-length=0" "-fcommon"
                             "-O9" "-Wall" "-DMAKE_FOR_EXON"
                             "-DMAKE_STANDALONE"
                             "-DSUBREAD_VERSION=\\\"${SUBREAD_VERSION}\\\""))
@@ -7210,17 +7390,16 @@ sequences.")
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'enter-dir
-           (lambda _ (chdir "src") #t))
+           (lambda _ (chdir "src")))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((bin (string-append (assoc-ref outputs "out") "/bin/")))
                (mkdir-p bin)
-               (copy-recursively "../bin" bin))
-             #t))
+               (copy-recursively "../bin" bin))))
          ;; no "configure" script
          (delete 'configure))))
-    (inputs `(("zlib" ,zlib)))
-    (home-page "http://bioinf.wehi.edu.au/subread-package/")
+    (inputs (list zlib))
+    (home-page "http://subread.sourceforge.net/")
     (synopsis "Tool kit for processing next-gen sequencing data")
     (description
      "The subread package contains the following tools: subread aligner, a
@@ -7233,22 +7412,25 @@ against local background noises.")
 (define-public stringtie
   (package
     (name "stringtie")
-    (version "1.2.1")
+    (version "2.2.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://ccb.jhu.edu/software/stringtie/dl/"
                                   "stringtie-" version ".tar.gz"))
               (sha256
                (base32
-                "1cqllsc1maq4kh92isi8yadgzbmnf042hlnalpk3y59aph1z3bfz"))
+                "08w3ish4y9kf9acp7k38iwi8ixa6j51m6qyf0vvfj7yz78a3ai3x"))
+              ;; This package bundles an annoying amount of third party source
+              ;; code.
               (modules '((guix build utils)))
               (snippet
-               '(begin
-                  (delete-file-recursively "samtools-0.1.18")
-                  #t))))
+               '(delete-file-recursively "htslib"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ;no test suite
+       #:make-flags '("LIBDEFLATE=-ldeflate"
+                      "LIBBZ2=-lbz2"
+                      "LIBLZMA=-llzma")
        #:phases
        (modify-phases %standard-phases
          ;; no configure script
@@ -7256,28 +7438,14 @@ against local background noises.")
          (add-before 'build 'use-system-samtools
            (lambda _
              (substitute* "Makefile"
-               (("stringtie: \\$\\{BAM\\}/libbam\\.a")
-                "stringtie: "))
-             (substitute* '("gclib/GBam.h"
-                            "gclib/GBam.cpp")
-               (("#include \"(bam|sam|kstring).h\"" _ header)
-                (string-append "#include <samtools/" header ".h>")))
-             #t))
-         (add-after 'unpack 'remove-duplicate-typedef
-           (lambda _
-             ;; This typedef conflicts with the typedef in
-             ;; glibc-2.25/include/bits/types.h
-             (substitute* "gclib/GThreads.h"
-               (("typedef long long __intmax_t;") ""))
-             #t))
+               ((" -lm") " -lm -lhts")
+               ((" \\$\\{HTSLIB\\}/libhts\\.a") " "))))
          (replace 'install
-          (lambda* (#:key outputs #:allow-other-keys)
-            (let ((bin (string-append (assoc-ref outputs "out") "/bin/")))
-              (install-file "stringtie" bin)
-              #t))))))
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((bin (string-append (assoc-ref outputs "out") "/bin/")))
+               (install-file "stringtie" bin)))))))
     (inputs
-     `(("samtools" ,samtools-0.1)
-       ("zlib" ,zlib)))
+     (list bzip2 htslib-for-stringtie libdeflate zlib))
     (home-page "http://ccb.jhu.edu/software/stringtie/")
     (synopsis "Transcript assembly and quantification for RNA-Seq data")
     (description
@@ -7290,12 +7458,12 @@ other transcript assemblers, but also alignments of longer sequences that have
 been assembled from those reads.  To identify differentially expressed genes
 between experiments, StringTie's output can be processed either by the
 Cuffdiff or Ballgown programs.")
-    (license license:artistic2.0)))
+    (license license:expat)))
 
 (define-public taxtastic
   (package
     (name "taxtastic")
-    (version "0.8.11")
+    (version "0.9.2")
     (source (origin
               ;; The Pypi version does not include tests.
               (method git-fetch)
@@ -7305,15 +7473,13 @@ Cuffdiff or Ballgown programs.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1sv8mkg64jn7zdwf1jj71c16686yrwxk0apb1l8sjszy9p166g0p"))))
+                "1k6wg9ych1j3srnhdny1y4470qlhfg730rb3rm3pq7l7gw62vmgb"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'prepare-directory
            (lambda _
-             ;; The git checkout must be writable for tests.
-             (for-each make-file-writable (find-files "."))
              ;; This test fails, but the error is not caught by the test
              ;; framework, so the tests fail...
              (substitute* "tests/test_taxit.py"
@@ -7322,29 +7488,27 @@ Cuffdiff or Ballgown programs.")
              ;; This version file is expected to be created with git describe.
              (mkdir-p "taxtastic/data")
              (with-output-to-file "taxtastic/data/ver"
-               (lambda () (display ,version)))
-             #t))
-         (add-after 'unpack 'python37-compatibility
-           (lambda _
-             (substitute* "taxtastic/utils.py"
-               (("import csv") "import csv, errno")
-               (("os.errno") "errno"))
-             #t))
+               (lambda () (display ,version)))))
          (replace 'check
            ;; Note, this fails to run with "-v" as it tries to write to a
            ;; closed output stream.
-           (lambda _ (invoke "python" "-m" "unittest") #t)))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "python" "-m" "unittest"))))
+         ;; This fails because it cannot find psycopg2 even though it is
+         ;; available.
+         (delete 'sanity-check))))
     (propagated-inputs
-     `(("python-sqlalchemy" ,python-sqlalchemy)
-       ("python-decorator" ,python-decorator)
-       ("python-biopython" ,python-biopython)
-       ("python-pandas" ,python-pandas)
-       ("python-psycopg2" ,python-psycopg2)
-       ("python-fastalite" ,python-fastalite)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-six" ,python-six)
-       ("python-jinja2" ,python-jinja2)
-       ("python-dendropy" ,python-dendropy)))
+     (list python-sqlalchemy
+           python-decorator
+           python-biopython
+           python-pandas
+           python-psycopg2
+           python-fastalite
+           python-pyyaml
+           python-six
+           python-jinja2
+           python-dendropy))
     (home-page "https://github.com/fhcrc/taxtastic")
     (synopsis "Tools for taxonomic naming and annotation")
     (description
@@ -7368,16 +7532,15 @@ profiles, and associated taxonomic information.")
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ; no "check" target
-       #:make-flags (list
-                     "CFLAGS=-O2" ; override "-m64" flag
-                     (string-append "PREFIX=" (assoc-ref %outputs "out"))
-                     (string-append "MANDIR=" (assoc-ref %outputs "out")
-                                    "/share/man/man1"))))
+       #:make-flags
+       ,#~(list
+           "CFLAGS=-O2"                 ; override "-m64" flag
+           (string-append "PREFIX=" #$output)
+           (string-append "MANDIR=" #$output "/share/man/man1"))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("perl" ,perl)
-       ("zlib" ,zlib)))
+     (list perl zlib))
     (home-page "https://vcftools.github.io/")
     (synopsis "Tools for working with VCF files")
     (description
@@ -7402,8 +7565,7 @@ data in the form of VCF files.")
                 "1z4mgwqg1j4n5ika08ai8mg9yjyjhf4821jp83v2bgwzxrykqjgr"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("perl" ,perl)
-       ("python" ,python))) ; for tests
+     (list perl python)) ; for tests
     (home-page "http://eddylab.org/infernal/")
     (synopsis "Inference of RNA alignments")
     (description "Infernal (\"INFERence of RNA ALignment\") is a tool for
@@ -7436,15 +7598,15 @@ sequence.")
       (properties `((upstream . "presto")))
       (build-system r-build-system)
       (propagated-inputs
-       `(("r-data-table" ,r-data-table)
-         ("r-deseq2" ,r-deseq2)
-         ("r-dplyr" ,r-dplyr)
-         ("r-matrix" ,r-matrix)
-         ("r-rcpp" ,r-rcpp)
-         ("r-rcpparmadillo" ,r-rcpparmadillo)
-         ("r-reshape2" ,r-reshape2)
-         ("r-rlang" ,r-rlang)
-         ("r-tidyr" ,r-tidyr)))
+       (list r-data-table
+             r-deseq2
+             r-dplyr
+             r-matrix
+             r-rcpp
+             r-rcpparmadillo
+             r-reshape2
+             r-rlang
+             r-tidyr))
       (home-page "https://github.com/immunogenomics/presto")
       (synopsis "Fast Functions for Differential Expression using Wilcox and AUC")
       (description "This package performs a fast Wilcoxon rank sum test and
@@ -7467,25 +7629,25 @@ auROC analysis.")
     (properties `((upstream-name . "SnapATAC")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-bigmemory" ,r-bigmemory)
-        ("r-doparallel" ,r-doparallel)
-        ("r-dosnow" ,r-dosnow)
-        ("r-edger" ,r-edger)
-        ("r-foreach" ,r-foreach)
-        ("r-genomicranges" ,r-genomicranges)
-        ("r-igraph" ,r-igraph)
-        ("r-iranges" ,r-iranges)
-        ("r-irlba" ,r-irlba)
-        ("r-matrix" ,r-matrix)
-        ("r-plyr" ,r-plyr)
-        ("r-plot3d" ,r-plot3d)
-        ("r-rann" ,r-rann)
-        ("r-raster" ,r-raster)
-        ("r-rcolorbrewer" ,r-rcolorbrewer)
-        ("r-rhdf5" ,r-rhdf5)
-        ("r-rtsne" ,r-rtsne)
-        ("r-scales" ,r-scales)
-        ("r-viridis" ,r-viridis)))
+      (list r-bigmemory
+            r-doparallel
+            r-dosnow
+            r-edger
+            r-foreach
+            r-genomicranges
+            r-igraph
+            r-iranges
+            r-irlba
+            r-matrix
+            r-plyr
+            r-plot3d
+            r-rann
+            r-raster
+            r-rcolorbrewer
+            r-rhdf5
+            r-rtsne
+            r-scales
+            r-viridis))
     (home-page "https://github.com/r3fang/SnapATAC")
     (synopsis "Single nucleus analysis package for ATAC-Seq")
     (description
@@ -7500,6 +7662,46 @@ clustering analysis, differential analysis, motif inference and exploration of
 single cell ATAC-seq sequencing data.")
     (license license:gpl3)))
 
+(define-public r-umi4cpackage
+  (let ((commit "88b07d896a137418ba6c31c2474b9dbe1d86fc20")
+        (revision "1"))
+    (package
+      (name "r-umi4cpackage")
+      (version (git-version "0.0.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/tanaylab/umi4cpackage")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0bjzamdw2lcfhlbzc0vdva87c3wwnij8jsvnrpx4wyyxvpcz13m5"))))
+      (properties `((upstream-name . "umi4cPackage")))
+      (build-system r-build-system)
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'fix-references
+             (lambda _
+               (substitute* "inst/conf/paths.conf"
+                 (("TG3C\\.bowtie2_bin=.*")
+                  (string-append "TG3C.bowtie2_bin="
+                                 (which "bowtie2") "\n")))
+               (substitute* "inst/perl/map3c/TG3C/import3C.pl"
+                 (("\"perl")
+                  (string-append "\"" (which "perl")))))))))
+      (inputs
+       (list perl bowtie))
+      (propagated-inputs
+       (list r-misha r-zoo))
+      (native-inputs (list r-knitr))
+      (home-page "https://github.com/tanaylab/umi4cpackage")
+      (synopsis "Processing and analysis of UMI-4C contact profiles")
+      (description "This is a package that lets you process UMI-4C data from
+scratch to produce nice plots.")
+      (license license:expat))))
+
 (define-public r-shinycell
   (let ((commit
          "aecbd56e66802f28e397f5ae1f19403aadd12163")
@@ -7520,16 +7722,16 @@ single cell ATAC-seq sequencing data.")
       (properties `((upstream-name . "ShinyCell")))
       (build-system r-build-system)
       (propagated-inputs
-       `(("r-data-table" ,r-data-table)
-         ("r-ggplot2" ,r-ggplot2)
-         ("r-glue" ,r-glue)
-         ("r-gridextra" ,r-gridextra)
-         ("r-hdf5r" ,r-hdf5r)
-         ("r-matrix" ,r-matrix)
-         ("r-r-utils" ,r-r-utils)
-         ("r-rcolorbrewer" ,r-rcolorbrewer)
-         ("r-readr" ,r-readr)
-         ("r-reticulate" ,r-reticulate)))
+       (list r-data-table
+             r-ggplot2
+             r-glue
+             r-gridextra
+             r-hdf5r
+             r-matrix
+             r-r-utils
+             r-rcolorbrewer
+             r-readr
+             r-reticulate))
       (home-page "https://github.com/SGDDNB/ShinyCell")
       (synopsis "Shiny interactive web apps for single-cell data")
       (description
@@ -7538,11 +7740,11 @@ single-cell data.")
       (license license:gpl3))))
 
 (define-public r-archr
-  (let ((commit "46b519ffb6f73edf132497ac31650d19ef055dc1")
+  (let ((commit "92ab814f86be0cea75c661f9827a9549c2cf47f5")
         (revision "1"))
     (package
       (name "r-archr")
-      (version (git-version "1.0.0" revision commit))
+      (version (git-version "1.0.1" revision commit))
       (source
        (origin
          (method git-fetch)
@@ -7551,41 +7753,84 @@ single-cell data.")
                (commit commit)))
          (file-name (git-file-name name version))
          (sha256
-          (base32
-           "1zj3sdfhgn2q2256fmz61a92vw1wylyck632d7842d6knd0v92v8"))))
+          (base32 "1m1vp3kkpvd0fcviv5vb3gcbm3w91ih6gm9ivg48swnbqny44kqb"))))
       (properties `((upstream-name . "ArchR")))
       (build-system r-build-system)
       (propagated-inputs
-       `(("r-biocgenerics" ,r-biocgenerics)
-         ("r-biostrings" ,r-biostrings)
-         ("r-chromvar" ,r-chromvar)
-         ("r-complexheatmap" ,r-complexheatmap)
-         ("r-data-table" ,r-data-table)
-         ("r-genomicranges" ,r-genomicranges)
-         ("r-ggplot2" ,r-ggplot2)
-         ("r-ggrepel" ,r-ggrepel)
-         ("r-gridextra" ,r-gridextra)
-         ("r-gtable" ,r-gtable)
-         ("r-gtools" ,r-gtools)
-         ("r-magrittr" ,r-magrittr)
-         ("r-matrix" ,r-matrix)
-         ("r-matrixstats" ,r-matrixstats)
-         ("r-motifmatchr" ,r-motifmatchr)
-         ("r-nabor" ,r-nabor)
-         ("r-plyr" ,r-plyr)
-         ("r-rcpp" ,r-rcpp)
-         ("r-rhdf5" ,r-rhdf5)
-         ("r-rsamtools" ,r-rsamtools)
-         ("r-s4vectors" ,r-s4vectors)
-         ("r-stringr" ,r-stringr)
-         ("r-summarizedexperiment" ,r-summarizedexperiment)
-         ("r-uwot" ,r-uwot)))
+       (list r-biocgenerics
+             r-biostrings
+             r-chromvar
+             r-complexheatmap
+             r-data-table
+             r-genomicranges
+             r-ggplot2
+             r-ggrepel
+             r-gridextra
+             r-gtable
+             r-gtools
+             r-magrittr
+             r-matrix
+             r-matrixstats
+             r-motifmatchr
+             r-nabor
+             r-plyr
+             r-rcpp
+             r-rhdf5
+             r-rsamtools
+             r-s4vectors
+             r-stringr
+             r-summarizedexperiment
+             r-uwot))
       (home-page "https://github.com/GreenleafLab/ArchR")
       (synopsis "Analyze single-cell regulatory chromatin in R")
       (description
        "This package is designed to streamline scATAC analyses in R.")
       (license license:gpl2+))))
 
+(define-public r-icellnet
+  ;; v1.0 tagged in 2020, last commit contains many fixes.
+  ;; DESCRIPTION says Version: 0.0.0.9000.
+  (let ((commit "b9c05488fb8b5ea69bd560018966eaf4e25f82a")
+        (revision "0"))
+    (package
+      (name "r-icellnet")
+      (version (git-version "1.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/soumelis-lab/ICELLNET")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0cld7d6xqnvd0zpcpg3sx73an6vdc9divzywgnn6zxnqcd987cnw"))))
+      (build-system r-build-system)
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'enter-dir
+             (lambda _ (chdir "icellnet"))))))
+      (propagated-inputs
+       (list r-annotationdbi
+             r-data-table
+             r-dplyr
+             r-ggplot2
+             r-hgu133plus2-db
+             r-jetset
+             r-psych
+             r-reshape2
+             r-rlist))
+      (home-page "https://github.com/soumelis-lab/ICELLNET")
+      (synopsis "Transcriptomic-based framework to dissect cell communication")
+      (description "This packages provides a a transcriptomic-based framework
+to dissect cell communication in a global manner.  It integrates an original
+expert-curated database of ligand-receptor interactions taking into account
+multiple subunits expression.  Based on transcriptomic profiles (gene
+expression), this package allows to compute communication scores between cells
+and provides several visualization modes that can be helpful to dig into
+cell-cell interaction mechanism and extend biological knowledge.")
+      (license license:gpl3))))
+
 (define-public r-scde
   (package
     (name "r-scde")
@@ -7601,21 +7846,21 @@ single-cell data.")
                 "10na2gyka24mszdxf92wz9h2c13hdf1ww30c68gfsw53lvvhhhxb"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-mgcv" ,r-mgcv)
-       ("r-rook" ,r-rook)
-       ("r-rjson" ,r-rjson)
-       ("r-cairo" ,r-cairo)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-edger" ,r-edger)
-       ("r-quantreg" ,r-quantreg)
-       ("r-nnet" ,r-nnet)
-       ("r-rmtstat" ,r-rmtstat)
-       ("r-extremes" ,r-extremes)
-       ("r-pcamethods" ,r-pcamethods)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-flexmix" ,r-flexmix)))
+     (list r-rcpp
+           r-rcpparmadillo
+           r-mgcv
+           r-rook
+           r-rjson
+           r-cairo
+           r-rcolorbrewer
+           r-edger
+           r-quantreg
+           r-nnet
+           r-rmtstat
+           r-extremes
+           r-pcamethods
+           r-biocparallel
+           r-flexmix))
     (home-page "https://hms-dbmi.github.io/scde/")
     (synopsis "R package for analyzing single-cell RNA-seq data")
     (description "The SCDE package implements a set of statistical methods for
@@ -7628,6 +7873,136 @@ of transcriptional heterogeneity among single cells.")
     ;; See https://github.com/hms-dbmi/scde/issues/38
     (license license:gpl2)))
 
+(define-public r-misha
+  (package
+    (name "r-misha")
+    (version "4.1.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/tanaylab/misha")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0bgivx3lzjh3173jsfrhb5kvhjsn53br0n4hmyx7i3dwy2cnnp2p"))
+       ;; Delete bundled executable.
+       (snippet
+        '(delete-file "exec/bigWigToWig"))))
+    (build-system r-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'do-not-use-bundled-bigWigToWig
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "R/misha.R"
+               (("get\\(\".GLIBDIR\"\\), \"/exec/bigWigToWig")
+                (string-append "\""
+                               (assoc-ref inputs "kentutils")
+                               "/bin/bigWigToWig"))))))))
+    (inputs
+     (list kentutils))
+    (home-page "https://github.com/tanaylab/misha")
+    (synopsis "Toolkit for analysis of genomic data")
+    (description "This package is intended to help users to efficiently
+analyze genomic data resulting from various experiments.")
+    (license license:gpl2)))
+
+(define-public r-scseqcomm
+  (let ((commit "01076e703999f1a5aa76419d821b50aebe2b777a")
+        (revision "0"))
+    (package
+      (name "r-scseqcomm")
+      (version (git-version "0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://gitlab.com/sysbiobig/scseqcomm")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "1fw5si47d6agnz5fibmp2b1sv08pbpwv1j71w57xbav9044i032q"))
+         ;; Delete bundled dependency.
+         (modules '((guix build utils)))
+         (snippet
+          '(delete-file-recursively "other_deps"))))
+      (build-system r-build-system)
+      (inputs
+       (list r-add2ggplot
+             r-chorddiag
+             r-doparallel
+             r-dplyr
+             r-foreach
+             ;;r-grid ;; listed in DESCRIPTION
+             r-gridextra
+             r-ggplot2
+             r-gtable
+             r-htmlwidgets
+             r-igraph
+             r-matrix
+             ;;r-methods ;; listed in DESCRIPTION
+             r-org-hs-eg-db
+             r-psych
+             r-rcolorbrewer
+             r-rlang
+             r-scico
+             r-tidygraph
+             r-topgo))
+      (native-inputs
+       (list r-knitr))
+      (home-page "https://gitlab.com/sysbiobig/scseqcomm")
+      (synopsis "Inter- and intra- cellular signaling from single cell RNA-seq")
+      (description "This package is tools for analysing intercellular and
+intracellular signaling from single cell RNA-seq (scRNA-seq) data.")
+      (license license:gpl3))))
+
+(define-public r-shaman
+  (let ((commit "d6944e8ac7bd1dbd5c6cec646eafc1d19d0ca96f")
+        (release "2.0")
+        (revision "2"))
+    (package
+      (name "r-shaman")
+      (version (git-version release revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/tanaylab/shaman")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "03sx138dzpfiq23j49z0m0s4j79855mrg64hpj9c83408wzphxi6"))
+                (snippet
+                 ;; This file will be generated.
+                 '(delete-file "inst/doc/shaman-package.R"))))
+      (build-system r-build-system)
+      (propagated-inputs
+       (list r-data-table
+             r-domc
+             r-ggplot2
+             r-gviz
+             r-misha
+             r-plyr
+             r-rann
+             r-rcpp
+             r-reshape2
+             ;; For vignettes
+             r-rmarkdown
+             r-knitr))
+      (home-page "https://github.com/tanaylab/shaman")
+      (synopsis "Sampling HiC contact matrices for a-parametric normalization")
+      (description "The Shaman package implements functions for
+resampling Hi-C matrices in order to generate expected contact
+distributions given constraints on marginal coverage and
+contact-distance probability distributions.  The package also provides
+support for visualizing normalized matrices and statistical analysis
+of contact distributions around selected landmarks.")
+      ;; Any version of the GPL
+      (license license:gpl3+))))
+
 (define-public r-centipede
   (package
     (name "r-centipede")
@@ -7671,11 +8046,7 @@ information as possible.")
       (properties `((upstream-name . "deMULTIplex")))
       (build-system r-build-system)
       (propagated-inputs
-       `(("r-kernsmooth" ,r-kernsmooth)
-         ("r-reshape2" ,r-reshape2)
-         ("r-rtsne" ,r-rtsne)
-         ("r-shortread" ,r-shortread)
-         ("r-stringdist" ,r-stringdist)))
+       (list r-kernsmooth r-reshape2 r-rtsne r-shortread r-stringdist))
       (home-page "https://github.com/chris-mcginnis-ucsf/MULTI-seq")
       (synopsis "MULTI-seq pre-processing and classification tools")
       (description
@@ -7691,6 +8062,46 @@ includes software to
 ")
       (license license:cc0))))
 
+(define-public gdc-client
+  (package
+    (name "gdc-client")
+    (version "1.6.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/NCI-GDC/gdc-client.git")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0cagawlzjwj3wam10lv64xgbfx4zcnzxi5sjpsdhq7rn4z24mzc2"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'relax-requirements
+           (lambda _
+             (substitute* "requirements.txt"
+               (("==") ">=")))))))
+    (inputs
+     (list python-cryptography
+           python-intervaltree
+           python-jsonschema
+           python-lxml
+           python-ndg-httpsclient
+           python-progressbar2
+           python-pyasn1
+           python-pyopenssl
+           python-pyyaml
+           python-requests
+           python-termcolor))
+    (home-page "https://gdc.nci.nih.gov/access-data/gdc-data-transfer-tool")
+    (synopsis "GDC data transfer tool")
+    (description "The gdc-client provides several convenience functions over
+the GDC API which provides general download/upload via HTTPS.")
+    (license license:asl2.0)))
+
 (define-public vsearch
   (package
     (name "vsearch")
@@ -7716,12 +8127,9 @@ includes software to
            #t))))
     (build-system gnu-build-system)
     (inputs
-     `(("zlib" ,zlib)
-       ("bzip2" ,bzip2)
-       ("cityhash" ,cityhash)))
+     (list zlib bzip2 cityhash))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (synopsis "Sequence search tools for metagenomics")
     (description
      "VSEARCH supports DNA sequence searching, clustering, chimera detection,
@@ -7740,30 +8148,27 @@ Needleman-Wunsch).")
 (define-public pardre
   (package
     (name "pardre")
-    ;; The source of 1.1.5 changed in place, so we append "-1" to the version.
-    (version "1.1.5-1")
+    (version "2.2.5")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://sourceforge/pardre/ParDRe-rel"
-                           "1.1.5" ".tar.gz"))
+                           version ".tar.gz"))
        (sha256
         (base32
-         "17j73nc0viq4f6qj50nrndsrif5d6b71q8fl87m54psiv0ilns2b"))))
+         "105s4f8zs8hh0sc32r9p725n7idza9cj5jvp5z1m5pljjhgk3if5"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:tests? #f ; no tests included
+     `(#:tests? #f ; tests require "prove"
        #:phases
        (modify-phases %standard-phases
          (delete 'configure)
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((bin (string-append (assoc-ref outputs "out") "/bin")))
-               (install-file "ParDRe" bin)
-               #t))))))
+               (install-file "ParDRe" bin)))))))
     (inputs
-     `(("openmpi" ,openmpi)
-       ("zlib" ,zlib)))
+     (list openmpi-c++ zlib))
     (synopsis "Parallel tool to remove duplicate DNA reads")
     (description
      "ParDRe is a parallel tool to remove duplicate genetic sequence reads.
@@ -7794,7 +8199,7 @@ clusters.")
     (build-system cmake-build-system)
     (arguments '(#:tests? #false))      ; there are none
     (inputs
-     `(("boost" ,boost)))
+     (list boost))
     (home-page "https://github.com/cbg-ethz/ngshmmalign/")
     (synopsis "Profile HMM aligner for NGS reads")
     (description
@@ -7823,10 +8228,11 @@ experience substantial biological insertions and deletions.")
          (delete 'configure)
          (delete 'build)
          (replace 'install
-           (lambda* (#:key outputs #:allow-other-keys)
+           (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
                     (bin (string-append out "/bin"))
-                    (scripts (find-files "." "prinseq.*.pl")))
+                    (scripts (find-files "." "prinseq.*.pl"))
+                    (guile (search-input-file inputs "bin/guile")))
                (substitute* scripts
                  (("\"perl -pe")
                   (string-append "\"" (which "perl") " -pe")))
@@ -7834,18 +8240,19 @@ experience substantial biological insertions and deletions.")
                            (chmod file #o555)
                            (install-file file bin)
                            (wrap-script (string-append bin "/" (basename file))
+                                        #:guile guile
                                         `("PERL5LIB" ":" prefix
                                           (,(getenv "PERL5LIB")))))
                          scripts)))))))
     (inputs
-     `(("guile" ,guile-3.0)             ; for wrapper scripts
-       ("perl" ,perl)
-       ("perl-cairo" ,perl-cairo)
-       ("perl-data-dumper" ,perl-data-dumper)
-       ("perl-digest-md5" ,perl-digest-md5)
-       ("perl-getopt-long" ,perl-getopt-long)
-       ("perl-json" ,perl-json)
-       ("perl-statistics-pca" ,perl-statistics-pca)))
+     (list guile-3.0 ; for wrapper scripts
+           perl
+           perl-cairo
+           perl-data-dumper
+           perl-digest-md5
+           perl-getopt-long
+           perl-json
+           perl-statistics-pca))
     (home-page "http://prinseq.sourceforge.net/")
     (synopsis "Preprocess sequence data in FASTA or FASTQ formats")
     (description
@@ -7887,23 +8294,23 @@ data.  It also generates basic statistics for your sequences.")
                            ,(version-major+minor
                              (package-version python))
                            "/site-packages"))
-                    (pythonpath (getenv "PYTHONPATH"))
+                    (pythonpath (getenv "GUIX_PYTHONPATH"))
                     (script (string-append out "/bin/shorah")))
                (chmod script #o555)
-               (wrap-program script `("PYTHONPATH" ":" prefix (,site ,pythonpath))))))
+               (wrap-program script `("GUIX_PYTHONPATH" ":" prefix (,site ,pythonpath))))))
          (add-after 'wrap-programs 'check
            (lambda* (#:key tests? #:allow-other-keys)
              (when tests?
                (invoke "make" "check")))))))
     (inputs
-     `(("boost" ,boost)
-       ("htslib" ,htslib)
-       ("python" ,python)
-       ("python-biopython" ,python-biopython)
-       ("python-numpy" ,python-numpy)
-       ("zlib" ,zlib)))
+     (list boost
+           htslib
+           python
+           python-biopython
+           python-numpy
+           zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "")
     (synopsis "Short reads assembly into haplotypes")
     (description
@@ -7928,11 +8335,9 @@ frequency of the different genetic variants present in a mixed sample.")
     (arguments
      `(#:test-target "spec"))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-rake-compiler" ,ruby-rake-compiler)))
+     (list bundler ruby-rspec ruby-rake-compiler))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (synopsis "Ruby bindings for the kseq.h FASTA/Q parser")
     (description
      "@code{Bio::Kseq} provides ruby bindings to the @code{kseq.h} FASTA and
@@ -7954,7 +8359,7 @@ quality scores.")
          "02vmrxyimkj9sahsp4zhfhnmbvz6dbbqz1y01vglf8cbwvkajfl0"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)))
+     (list ruby-rspec))
     (synopsis "Tool for fast querying of genome locations")
     (description
      "Bio-locus is a tabix-like tool for fast querying of genome
@@ -7977,10 +8382,9 @@ chr+pos+alt information in a database.")
                 "1wf4qygcmdjgcqm6flmvsagfr1gs9lf63mj32qv3z1f481zc5692"))))
     (build-system ruby-build-system)
     (propagated-inputs
-     `(("ruby-bio-logger" ,ruby-bio-logger)
-       ("ruby-nokogiri" ,ruby-nokogiri)))
+     (list ruby-bio-logger ruby-nokogiri))
     (inputs
-     `(("ruby-rspec" ,ruby-rspec)))
+     (list ruby-rspec))
     (synopsis "Fast big data BLAST XML parser and library")
     (description
      "Very fast parallel big-data BLAST XML file parser which can be used as
@@ -8002,9 +8406,9 @@ generate FASTA, JSON, YAML, RDF, JSON-LD, HTML, CSV, tabular output etc.")
          "1d56amdsjv1mag7m6gv2w0xij8hqx1v5xbdjsix8sp3yp36m7938"))))
     (build-system ruby-build-system)
     (propagated-inputs
-     `(("ruby-libxml" ,ruby-libxml)))
+     (list ruby-libxml))
     (native-inputs
-     `(("which" ,which)))  ; required for test phase
+     (list which))  ; required for test phase
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -8045,7 +8449,7 @@ BLAST, KEGG, GenBank, MEDLINE and GO.")
           "1glw5pn9s8z13spxk6yyfqaz80n9lga67f33w35nkpq9dwi2vg6g"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-cucumber" ,ruby-cucumber)))
+     (list ruby-cucumber))
     (synopsis "Smart VCF parser DSL")
     (description
      "Bio-vcf provides a @acronym{DSL, domain specific language} for processing
@@ -8088,16 +8492,16 @@ including VCF header and contents in RDF and JSON.")
       (inputs
        `(("r" ,r-minimal)))
       (propagated-inputs
-       `(("r-catools" ,r-catools)
-         ("r-snow" ,r-snow)
-         ("r-snowfall" ,r-snowfall)
-         ("r-bitops" ,r-bitops)
-         ("r-rsamtools" ,r-rsamtools)
-         ("r-spp" ,r-spp)
-         ("gawk" ,gawk)
-         ("samtools" ,samtools)
-         ("boost" ,boost)
-         ("gzip" ,gzip)))
+       (list r-catools
+             r-snow
+             r-snowfall
+             r-bitops
+             r-rsamtools
+             r-spp
+             gawk
+             samtools
+             boost
+             gzip))
       (home-page "https://github.com/kundajelab/phantompeakqualtools")
       (synopsis "Informative enrichment for ChIP-seq data")
       (description "This package computes informative enrichment and quality
@@ -8120,8 +8524,7 @@ characteristic tag shift values in these assays.")
          "1p0i78wh76jfgmn9jphbwwaz6yy6pipzfg08xs54cxavxg2j81p5"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-optparse" ,r-optparse)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)))
+     (list r-optparse r-rcolorbrewer))
     (home-page "https://www.e-rna.org/r-chie/index.cgi")
     (synopsis "Analysis framework for RNA secondary structure")
     (description
@@ -8173,7 +8576,7 @@ secondary structure and comparative analysis in R.")
        ("guile-json" ,guile-json-1)
        ("guile-redis" ,guile2.2-redis)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/BIMSBbioinfo/rcas-web")
     (synopsis "Web interface for RNA-centric annotation system (RCAS)")
     (description "This package provides a simple web interface for the
@@ -8198,16 +8601,16 @@ secondary structure and comparative analysis in R.")
            "14bj5qhjm1hsm9ay561nfbqi9wxsa7y487df2idsaaf6z10nw4v0"))))
       (build-system r-build-system)
       (propagated-inputs
-       `(("r-iranges" ,r-iranges)
-         ("r-xvector" ,r-xvector)
-         ("r-biostrings" ,r-biostrings)
-         ("r-bsgenome" ,r-bsgenome)
-         ("r-gtools" ,r-gtools)
-         ("r-genomicranges" ,r-genomicranges)
-         ("r-sfsmisc" ,r-sfsmisc)
-         ("r-kernlab" ,r-kernlab)
-         ("r-s4vectors" ,r-s4vectors)
-         ("r-biocgenerics" ,r-biocgenerics)))
+       (list r-iranges
+             r-xvector
+             r-biostrings
+             r-bsgenome
+             r-gtools
+             r-genomicranges
+             r-sfsmisc
+             r-kernlab
+             r-s4vectors
+             r-biocgenerics))
       (home-page "https://github.com/ManuSetty/ChIPKernels")
       (synopsis "Build string kernels for DNA Sequence analysis")
       (description "ChIPKernels is an R package for building different string
@@ -8232,12 +8635,12 @@ Sequences.")
          "1r6ywvhxl3ffv48lgj7sbd582mcc6dha3ksgc2qjlvjrnkbj3799"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biostrings" ,r-biostrings)
-       ("r-chipkernels" ,r-chipkernels)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-spams" ,r-spams)
-       ("r-wgcna" ,r-wgcna)
-       ("r-fastcluster" ,r-fastcluster)))
+     (list r-biostrings
+           r-chipkernels
+           r-genomicranges
+           r-spams
+           r-wgcna
+           r-fastcluster))
     (home-page "https://github.com/ManuSetty/SeqGL")
     (synopsis "Group lasso for Dnase/ChIP-seq data")
     (description "SeqGL is a group lasso based algorithm to extract
@@ -8262,8 +8665,8 @@ factors bound at the specific regions.")
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
-       (list (string-append "--with-hpdf="
-                            (assoc-ref %build-inputs "libharu")))
+       ,#~(list (string-append "--with-hpdf="
+                               #$(this-package-input "libharu")))
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'fix-checks
@@ -8287,17 +8690,14 @@ AM_CONDITIONAL(AMPNG, true)"))
          (add-after 'disable-update-check 'autogen
            (lambda _ (invoke "autoreconf" "-vif") #t)))))
     (inputs
-     `(("perl" ,perl)
-       ("libpng" ,libpng)
-       ("gd" ,gd)
-       ("libx11" ,libx11)
-       ("libharu" ,libharu)
-       ("zlib" ,zlib)))
+     (list perl
+           libpng
+           gd
+           libx11
+           libharu
+           zlib))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (home-page "http://emboss.sourceforge.net")
     (synopsis "Molecular biology analysis suite")
     (description "EMBOSS is the \"European Molecular Biology Open Software
@@ -8345,8 +8745,7 @@ tools for sequence analysis into a seamless whole.")
                 "bin" (string-append (assoc-ref outputs "out") "/bin"))
                #t)))))
       (inputs
-       `(("gsl" ,gsl)
-         ("zlib" ,zlib)))
+       (list gsl zlib))
       (home-page "https://github.com/arq5x/bits")
       (synopsis "Implementation of binary interval search algorithm")
       (description "This package provides an implementation of the
@@ -8382,21 +8781,19 @@ intervals (e.g. genes, sequence alignments).")
              (lambda* (#:key inputs #:allow-other-keys)
                (for-each (lambda (file)
                            (install-file file "./src/smithlab_cpp/"))
-                         (find-files (assoc-ref inputs "smithlab-cpp")))
-               #t))
+                         (find-files (assoc-ref inputs "smithlab-cpp")))))
            (add-after 'install 'install-to-store
              (lambda* (#:key outputs #:allow-other-keys)
                (let* ((out (assoc-ref outputs "out"))
                       (bin (string-append out "/bin")))
                  (for-each (lambda (file)
                              (install-file file bin))
-                           (find-files "bin" ".*")))
-               #t)))
+                           (find-files "bin" ".*"))))))
          #:configure-flags
-         (list (string-append "--with-bam_tools_headers="
-                              (assoc-ref %build-inputs "bamtools") "/include/bamtools")
-               (string-append "--with-bam_tools_library="
-                              (assoc-ref %build-inputs "bamtools") "/lib/bamtools"))))
+         ,#~(list (string-append "--with-bam_tools_headers="
+                                 #$(this-package-input "bamtools") "/include/bamtools")
+                  (string-append "--with-bam_tools_library="
+                                 #$(this-package-input "bamtools") "/lib/bamtools"))))
       (inputs
        `(("bamtools" ,bamtools)
          ("samtools" ,samtools-0.1)
@@ -8438,9 +8835,7 @@ may optionally be provided to further inform the peak-calling process.")
      `(#:python ,python-2 ; python2 only
        #:tests? #f)) ; no tests included
     (propagated-inputs
-     `(("python2-numpy" ,python2-numpy)
-       ("python2-scipy" ,python2-scipy)
-       ("python2-pysam" ,python2-pysam)))
+     (list python2-numpy python2-scipy python2-pysam))
     (home-page "https://github.com/shawnzhangyx/PePr")
     (synopsis "Peak-calling and prioritization pipeline for ChIP-Seq data")
     (description
@@ -8508,23 +8903,27 @@ replacement for strverscmp.")
                  ;; ModuleNotFoundError: No module named 'multiqc.modules.ccs'
                  (delete-file "/tmp/tests/unit_tests/test_ccs.py")
                  (with-directory-excursion "/tmp/tests"
-                   (setenv "PYTHONPATH" (string-append here ":" (getenv "PYTHONPATH")))
-                   (invoke "python" "-munittest" "discover")))))))))
+                   (setenv "GUIX_PYTHONPATH"
+                           (string-append here ":" (getenv "GUIX_PYTHONPATH")))
+                   (invoke "python" "-munittest" "discover"))))))
+         ;; TODO: importing the picard and gatk modules fails for unknown
+         ;; reasons.
+         (delete 'sanity-check))))
     (propagated-inputs
-     `(("python-click" ,python-click)
-       ("python-coloredlogs" ,python-coloredlogs)
-       ("python-future" ,python-future)
-       ("python-jinja2" ,python-jinja2)
-       ("python-lzstring" ,python-lzstring)
-       ("python-markdown" ,python-markdown)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-networkx" ,python-networkx)
-       ("python-numpy" ,python-numpy)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-requests" ,python-requests)
-       ("python-rich" ,python-rich)
-       ("python-simplejson" ,python-simplejson)
-       ("python-spectra" ,python-spectra)))
+     (list python-click
+           python-coloredlogs
+           python-future
+           python-jinja2
+           python-lzstring
+           python-markdown
+           python-matplotlib
+           python-networkx
+           python-numpy
+           python-pyyaml
+           python-requests
+           python-rich
+           python-simplejson
+           python-spectra))
     (native-inputs
      `(("python-pytest" ,python-pytest)
        ("tests"
@@ -8563,19 +8962,16 @@ common bioinformatics tools.")
          "12ibdmksj7icyqhks4xyvd61bygk4pjmxn618kp6vgk1af01y34g"))))
     (build-system python-build-system)
     (inputs
-     `(("boost" ,boost)
-       ("c-blosc" ,c-blosc)
-       ("gsl" ,gsl)
-       ("hdf5" ,hdf5)
-       ("hdf5-blosc" ,hdf5-blosc)
-       ("python-cython" ,python-cython)
-       ("zlib" ,zlib)))
+     (list boost
+           c-blosc
+           gsl
+           hdf5
+           hdf5-blosc
+           python-cython
+           zlib))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-pycurl" ,python-pycurl)
-       ("python-pyzmq" ,python-pyzmq)
-       ("python-scipy" ,python-scipy)
-       ("python-tables" ,python-tables)))
+     (list python-numpy python-pycurl python-pyzmq python-scipy
+           python-tables))
     (home-page "https://vatlab.github.io/vat-docs/")
     (synopsis "Analyze genetic variants from Next-Gen sequencing studies")
     (description
@@ -8601,11 +8997,7 @@ manipulate and analyze genetic variants.")
     (properties `((upstream-name . "RareMETALS2")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-seqminer" ,r-seqminer)
-       ("r-mvtnorm" ,r-mvtnorm)
-       ("r-mass" ,r-mass)
-       ("r-compquadform" ,r-compquadform)
-       ("r-getopt" ,r-getopt)))
+     (list r-seqminer r-mvtnorm r-mass r-compquadform r-getopt))
     (home-page "http://genome.sph.umich.edu/wiki/RareMETALS2")
     (synopsis "Analyze gene-level association tests for binary trait")
     (description
@@ -8636,11 +9028,7 @@ trait.")
            "0sbzma49aiiyw8b0jpr7fnhzys9nsqmp4hy4hdz1gzyg1lhnca26"))))
       (build-system r-build-system)
       (propagated-inputs
-       `(("r-ggplot2" ,r-ggplot2)
-         ("r-rcolorbrewer" ,r-rcolorbrewer)
-         ("r-gridextra" ,r-gridextra)
-         ("r-gplots" ,r-gplots)
-         ("r-plyr" ,r-plyr)))
+       (list r-ggplot2 r-rcolorbrewer r-gridextra r-gplots r-plyr))
       (home-page "https://github.com/rajewsky-lab/dropbead")
       (synopsis "Basic exploration and analysis of Drop-seq data")
       (description "This package offers a quick and straight-forward way to
@@ -8672,41 +9060,41 @@ droplet sequencing.  It has been particularly tailored for Drop-seq.")
       (properties `((upstream-name . "CellChat")))
       (build-system r-build-system)
       (propagated-inputs
-       `(("r-biocgenerics" ,r-biocgenerics)
-         ("r-circlize" ,r-circlize)
-         ("r-colorspace" ,r-colorspace)
-         ("r-complexheatmap" ,r-complexheatmap)
-         ("r-cowplot" ,r-cowplot)
-         ("r-dplyr" ,r-dplyr)
-         ("r-expm" ,r-expm)
-         ("r-fnn" ,r-fnn)
-         ("r-forcats" ,r-forcats)
-         ("r-future" ,r-future)
-         ("r-future-apply" ,r-future-apply)
-         ("r-gg-gap" ,r-gg-gap)
-         ("r-ggalluvial" ,r-ggalluvial)
-         ("r-ggplot2" ,r-ggplot2)
-         ("r-ggrepel" ,r-ggrepel)
-         ("r-igraph" ,r-igraph)
-         ("r-irlba" ,r-irlba)
-         ("r-magrittr" ,r-magrittr)
-         ("r-matrix" ,r-matrix)
-         ("r-nmf" ,r-nmf)
-         ("r-patchwork" ,r-patchwork)
-         ("r-pbapply" ,r-pbapply)
-         ("r-rcolorbrewer" ,r-rcolorbrewer)
-         ("r-rcpp" ,r-rcpp)
-         ("r-rcppeigen" ,r-rcppeigen)
-         ("r-reshape2" ,r-reshape2)
-         ("r-reticulate" ,r-reticulate)
-         ("r-rspectra" ,r-rspectra)
-         ("r-rtsne" ,r-rtsne)
-         ("r-scales" ,r-scales)
-         ("r-shape" ,r-shape)
-         ("r-sna" ,r-sna)
-         ("r-stringr" ,r-stringr)
-         ("r-svglite" ,r-svglite)))
-      (native-inputs `(("r-knitr" ,r-knitr)))
+       (list r-biocgenerics
+             r-circlize
+             r-colorspace
+             r-complexheatmap
+             r-cowplot
+             r-dplyr
+             r-expm
+             r-fnn
+             r-forcats
+             r-future
+             r-future-apply
+             r-gg-gap
+             r-ggalluvial
+             r-ggplot2
+             r-ggrepel
+             r-igraph
+             r-irlba
+             r-magrittr
+             r-matrix
+             r-nmf
+             r-patchwork
+             r-pbapply
+             r-rcolorbrewer
+             r-rcpp
+             r-rcppeigen
+             r-reshape2
+             r-reticulate
+             r-rspectra
+             r-rtsne
+             r-scales
+             r-shape
+             r-sna
+             r-stringr
+             r-svglite))
+      (native-inputs (list r-knitr))
       (home-page "https://github.com/sqjin/CellChat")
       (synopsis "Analysis of cell-cell communication from single-cell transcriptomics data")
       (description
@@ -8717,7 +9105,7 @@ communication networks from scRNA-seq data.")
 (define-public sambamba
   (package
     (name "sambamba")
-    (version "0.8.0")
+    (version "0.8.2")
     (source
      (origin
        (method git-fetch)
@@ -8727,7 +9115,7 @@ communication networks from scRNA-seq data.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "07dznzl6m8k7sw84jxw2kx6i3ymrapbmcmyh0fxz8wrybhw8fmwc"))))
+         "1zdkd1md5wk4la71p82pbclqqcm55abk23fk087da6186i1bsihl"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ; there is no test target
@@ -8735,31 +9123,33 @@ communication networks from scRNA-seq data.")
        #:phases
        (modify-phases %standard-phases
          (delete 'configure)
-         (add-after 'unpack 'fix-ldc-version
-           (lambda _
+         (add-after 'unpack 'prepare-build-tools
+           (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "Makefile"
-               ;; We use ldc2 instead of ldmd2 to compile sambamba.
-               (("\\$\\(shell which ldmd2\\)") (which "ldc2")))
-             #t))
+               (("\\$\\(shell which ldmd2\\)") (which "ldmd2")))
+             (setenv "CC" "gcc")
+             (setenv "D_LD" (which "ld.gold"))))
          (add-after 'unpack 'unbundle-prerequisites
            (lambda _
              (substitute* "Makefile"
                (("= lz4/lib/liblz4.a") "= -L-llz4")
-               (("ldc_version_info lz4-static") "ldc_version_info"))
-             #t))
+               (("ldc_version_info lz4-static") "ldc_version_info"))))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((bin (string-append (assoc-ref outputs "out") "/bin")))
                (mkdir-p bin)
                (copy-file (string-append "bin/sambamba-" ,version)
-                          (string-append bin "/sambamba"))
-               #t))))))
+                          (string-append bin "/sambamba"))))))))
     (native-inputs
-     `(("python" ,python)))
+     `(("ld-gold-wrapper"
+        ;; Importing (gnu packages commencement) would introduce a cycle.
+        ,(module-ref (resolve-interface
+                      '(gnu packages commencement))
+                     'ld-gold-wrapper))
+       ("binutils-gold" ,binutils-gold)
+       ("python" ,python)))
     (inputs
-     `(("ldc" ,ldc)
-       ("lz4" ,lz4)
-       ("zlib" ,zlib)))
+     (list ldc lz4 zlib))
     (home-page "https://github.com/biod/sambamba")
     (synopsis "Tools for working with SAM/BAM data")
     (description "Sambamba is a high performance modern robust and
@@ -8802,10 +9192,7 @@ sort, markdup, and depth.")
                (install-file "bin/Ritornello" bin)
                #t))))))
     (inputs
-     `(("samtools" ,samtools-0.1)
-       ("fftw" ,fftw)
-       ("boost" ,boost)
-       ("zlib" ,zlib)))
+     (list samtools-0.1 fftw boost zlib))
     (home-page "https://github.com/KlugerLab/Ritornello")
     (synopsis "Control-free peak caller for ChIP-seq data")
     (description "Ritornello is a ChIP-seq peak calling algorithm based on
@@ -8871,12 +9258,9 @@ with narrow binding events such as transcription factor ChIP-seq.")
                (install-file "trim_galore" bin)
                #t))))))
     (inputs
-     `(("gzip" ,gzip)
-       ("perl" ,perl)
-       ("pigz" ,pigz)
-       ("cutadapt" ,cutadapt)))
+     (list gzip perl pigz cutadapt))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://www.bioinformatics.babraham.ac.uk/projects/trim_galore/")
     (synopsis "Wrapper around Cutadapt and FastQC")
     (description "Trim Galore! is a wrapper script to automate quality and
@@ -8927,7 +9311,8 @@ matplotlib.use('Agg')
 " line)))
                ;; Make sure GESS has all modules in its path
                (wrap-script (string-append target "GESS.py")
-                 `("PYTHONPATH" ":" = (,target ,(getenv "PYTHONPATH"))))
+                 #:guile (search-input-file inputs "bin/guile")
+                 `("GUIX_PYTHONPATH" ":" = (,target ,(getenv "GUIX_PYTHONPATH"))))
                (mkdir-p bin)
                (symlink (string-append target "GESS.py")
                         (string-append bin "GESS.py"))
@@ -8952,7 +9337,7 @@ exon-skipping scanner detection scheme.")
 (define-public phylip
   (package
     (name "phylip")
-    (version "3.696")
+    (version "3.697")
     (source
      (origin
        (method url-fetch)
@@ -8960,16 +9345,16 @@ exon-skipping scanner detection scheme.")
                            "download/phylip-" version ".tar.gz"))
        (sha256
         (base32
-         "01jar1rayhr2gba2pgbw49m56rc5z4p5wn3ds0m188hrlln4a2nd"))))
+         "1h8h0nafnlbqryswxgplx80k2044yhfz97jh13vsgzlaifqdh9ls"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ; no check target
-       #:make-flags (list "-f" "Makefile.unx" "install")
+       #:make-flags (list "-f" "Makefile.unx" "CFLAGS=-fcommon" "install")
        #:parallel-build? #f             ; not supported
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'enter-dir
-           (lambda _ (chdir "src") #t))
+           (lambda _ (chdir "src")))
          (delete 'configure)
          (replace 'install
            (lambda* (#:key inputs outputs #:allow-other-keys)
@@ -8978,8 +9363,7 @@ exon-skipping scanner detection scheme.")
                (mkdir-p target)
                (for-each (lambda (file)
                            (install-file file target))
-                         (find-files "../exe" ".*")))
-             #t)))))
+                         (find-files "../exe" ".*"))))))))
     (home-page "http://evolution.genetics.washington.edu/phylip/")
     (synopsis "Tools for inferring phylogenies")
     (description "PHYLIP (the PHYLogeny Inference Package) is a package of
@@ -8989,7 +9373,7 @@ programs for inferring phylogenies (evolutionary trees).")
 (define-public imp
   (package
     (name "imp")
-    (version "2.13.0")
+    (version "2.15.0")
     (source
      (origin
        (method url-fetch)
@@ -8997,12 +9381,10 @@ programs for inferring phylogenies (evolutionary trees).")
                            version "/download/imp-" version ".tar.gz"))
        (sha256
         (base32
-         "1z1vcpwbylixk0zywngg5iw0jv083jj1bqphi817jpg3fb9fx2jj"))))
+         "05hsrnkpkajppa3f45x4qsarnkj616hlby749zxg4is3bv4i6b5y"))))
     (build-system cmake-build-system)
     (arguments
-     `( ;; CMake 3.17 or newer is required for the CMAKE_TEST_ARGUMENTS used
-       ;; below to have an effect.
-       #:cmake ,cmake
+     `(#:tests? #false ; The test suite is notoriously fickle
        #:configure-flags
        (let ((disabled-tests
               '("expensive"                 ;exclude expensive tests
@@ -9010,7 +9392,9 @@ programs for inferring phylogenies (evolutionary trees).")
                 "IMP.parallel-test_sge.py"  ;fail in build container
                 ;; The following test fails non-reproducibly on
                 ;; an inexact numbers assertion.
-                "IMP.em-medium_test_local_fitting.py")))
+                "IMP.em-medium_test_local_fitting.py"
+                ;; The following test fails for unknown reasons
+                "IMP.foxs-add-missing-residues.py")))
          (list
           (string-append
            "-DCMAKE_CTEST_ARGUMENTS="
@@ -9022,22 +9406,19 @@ programs for inferring phylogenies (evolutionary trees).")
      `(("python" ,python-wrapper)
        ("swig" ,swig)))
     (inputs
-     `(("boost" ,boost)
-       ("cgal" ,cgal)
-       ("gsl" ,gsl)
-       ("hdf5" ,hdf5)
-       ("fftw" ,fftw)
-       ("eigen" ,eigen)
-       ;; Enabling MPI causes the build to use all the available memory and
-       ;; fail (tested on a machine with 32 GiB of RAM).
-       ;;("mpi" ,openmpi)
-       ("opencv" ,opencv)))
+     (list boost
+           cgal
+           gsl
+           hdf5
+           fftw
+           eigen
+           ;; Enabling MPI causes the build to use all the available memory and
+           ;; fail (tested on a machine with 32 GiB of RAM).
+           ;;("mpi" ,openmpi)
+           opencv))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-scipy" ,python-scipy)
-       ("python-pandas" ,python-pandas)
-       ("python-scikit-learn" ,python-scikit-learn)
-       ("python-networkx" ,python-networkx)))
+     (list python-numpy python-scipy python-pandas python-scikit-learn
+           python-networkx))
     (home-page "https://integrativemodeling.org")
     (synopsis "Integrative modeling platform")
     (description "IMP's broad goal is to contribute to a comprehensive
@@ -9052,66 +9433,72 @@ applications for tackling some common problems in a user-friendly way.")
     (license (list license:lgpl2.1+
                    license:gpl3+))))
 
+;; We use this seemingly arbitrary commit because of
+;; https://github.com/3DGenomes/TADbit/issues/371
 (define-public tadbit
-  (package
-    (name "tadbit")
-    (version "1.0.1")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/3DGenomes/TADbit")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0hqrlymh2a2bimcfdvlssy1x5h1lp3h1c5a7jj11hmcqczzqn3ni"))))
-    (build-system python-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-problems-with-setup.py
-           (lambda* (#:key outputs #:allow-other-keys)
-             ;; Don't attempt to install the bash completions to
-             ;; the home directory.
-             (rename-file "extras/.bash_completion"
-                          "extras/tadbit")
-             (substitute* "setup.py"
-               (("\\(path.expanduser\\('~'\\)")
-                (string-append "(\""
-                               (assoc-ref outputs "out")
-                               "/etc/bash_completion.d\""))
-               (("extras/\\.bash_completion")
-                "extras/tadbit"))
-             #t))
-         (replace 'check
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (add-installed-pythonpath inputs outputs)
-             (invoke "python3" "test/test_all.py")
-             #t)))))
-    (native-inputs
-     `(("glib" ,glib "bin")             ;for gtester
-       ("pkg-config" ,pkg-config)))
-    (inputs
-     ;; TODO: add Chimera for visualization
-     `(("imp" ,imp)
-       ("mcl" ,mcl)
-       ("python-future" ,python-future)
-       ("python-h5py" ,python-h5py)
-       ("python-scipy" ,python-scipy)
-       ("python-numpy" ,python-numpy)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-pysam" ,python-pysam)))
-    (home-page "https://3dgenomes.github.io/TADbit/")
-    (synopsis "Analyze, model, and explore 3C-based data")
-    (description
-     "TADbit is a complete Python library to deal with all steps to analyze,
+  (let ((commit "5c4c1ddaadfbaf7e6edc58173e46d801093bdc9b")
+        (revision "1"))
+    (package
+      (name "tadbit")
+      (version (git-version "1.0.1" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/3DGenomes/TADbit")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "17nwlvjgqpa7x6jgh56m3di61ynaz34kl1jamyv7r2a5rhfcbkla"))))
+      (build-system python-build-system)
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'fix-problems-with-setup.py
+             (lambda* (#:key outputs #:allow-other-keys)
+               (substitute* "src/test/Makefile"
+                 (("^CFLAGS=") "CFLAGS= -fcommon"))
+               
+               ;; Don't attempt to install the bash completions to
+               ;; the home directory.
+               (rename-file "extras/.bash_completion"
+                            "extras/tadbit")
+               (substitute* "setup.py"
+                 (("\\(path.expanduser\\('~'\\)")
+                  (string-append "(\""
+                                 (assoc-ref outputs "out")
+                                 "/etc/bash_completion.d\""))
+                 (("extras/\\.bash_completion")
+                  "extras/tadbit"))))
+           (replace 'check
+             (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+               (when tests?
+                 (add-installed-pythonpath inputs outputs)
+                 (invoke "python3" "test/test_all.py")))))))
+      (native-inputs
+       (list `(,glib "bin") ;for gtester
+             pkg-config))
+      (inputs
+       ;; TODO: add Chimera for visualization
+       (list imp
+             mcl
+             python-future
+             python-h5py
+             python-scipy
+             python-numpy
+             python-matplotlib
+             python-pysam))
+      (home-page "https://3dgenomes.github.io/TADbit/")
+      (synopsis "Analyze, model, and explore 3C-based data")
+      (description
+       "TADbit is a complete Python library to deal with all steps to analyze,
 model, and explore 3C-based data.  With TADbit the user can map FASTQ files to
 obtain raw interaction binned matrices (Hi-C like matrices), normalize and
 correct interaction matrices, identify and compare the so-called
 @dfn{Topologically Associating Domains} (TADs), build 3D models from the
 interaction matrices, and finally, extract structural properties from the
 models.  TADbit is complemented by TADkit for visualizing 3D models.")
-    (license license:gpl3+)))
+      (license license:gpl3+))))
 
 (define-public kentutils
   (package
@@ -9249,9 +9636,7 @@ browser.")
                 (modules '((guix build utils)))
                 ;; Remove bundled Java library archives.
                 (snippet
-                 '(begin
-                    (for-each delete-file (find-files "lib" ".*"))
-                    #t))))
+                 '(for-each delete-file (find-files "lib" ".*")))))
       (build-system ant-build-system)
       (arguments
        `(#:tests? #f ; no tests included
@@ -9268,18 +9653,20 @@ browser.")
                  (substitute* "bin/linux/fseq"
                    (("java") (which "java"))
                    (("\\$REALDIR/../lib/commons-cli-1.1.jar")
-                    (string-append (assoc-ref inputs "java-commons-cli")
-                                   "/share/java/commons-cli.jar"))
+                    (search-input-file inputs
+                                       (string-append "/lib/m2/commons-cli/commons-cli/"
+                                                      ,(package-version java-commons-cli)
+                                                      "/commons-cli-"
+                                                      ,(package-version java-commons-cli)
+                                                      ".jar")))
                    (("REALDIR=.*")
                     (string-append "REALDIR=" bin "\n")))
                  (install-file "README.txt" doc)
                  (install-file "bin/linux/fseq" bin)
                  (install-file "build~/fseq.jar" lib)
-                 (copy-recursively "lib" lib)
-                 #t))))))
+                 (copy-recursively "lib" lib)))))))
       (inputs
-       `(("perl" ,perl)
-         ("java-commons-cli" ,java-commons-cli)))
+       (list perl java-commons-cli))
       (home-page "https://fureylab.web.unc.edu/software/fseq/")
       (synopsis "Feature density estimator for high-throughput sequence tags")
       (description
@@ -9365,9 +9752,7 @@ Browser.")
                                  "/bin/gunzip -c")))
                #t))))))
     (inputs
-     `(("gzip" ,gzip)
-       ("perl-carp" ,perl-carp)
-       ("perl-getopt-long" ,perl-getopt-long)))
+     (list gzip perl-carp perl-getopt-long))
     (native-inputs
      `(("plotly.js"
         ,(origin
@@ -9418,15 +9803,14 @@ straight away.  Its main features are:
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ; there are no tests
-       #:make-flags '("CC=gcc")
+       #:make-flags '("CC=gcc" "CFLAGS=-fcommon -O3")
        #:phases
        (modify-phases %standard-phases
          (replace 'configure
            (lambda _
              (substitute* "src/BFdriver.c"
                (("/bin/bash") (which "bash")))
-             (chdir "src")
-             #t))
+             (chdir "src")))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((tools '("baseml" "basemlg" "codeml"
@@ -9436,8 +9820,7 @@ straight away.  Its main features are:
                                            "/share/doc/paml")))
                (mkdir-p bin)
                (for-each (lambda (file) (install-file file bin)) tools)
-               (copy-recursively "../doc" docdir)
-               #t))))))
+               (copy-recursively "../doc" docdir)))))))
     (home-page "http://abacus.gene.ucl.ac.uk/software/paml.html")
     (synopsis "Phylogentic analysis by maximum likelihood")
     (description "PAML (for Phylogentic Analysis by Maximum Likelihood)
@@ -9478,11 +9861,9 @@ using nucleotide or amino-acid sequence data.")
                            (install-file exe bin))
                          exes)))))))
     (inputs
-     `(("htslib" ,htslib)
-       ("ncurses" ,ncurses)
-       ("zlib" ,zlib)))
+     (list htslib ncurses zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.bioinf.uni-leipzig.de/Software/segemehl")
     (synopsis "Map short sequencer reads to reference genomes")
     (description "Segemehl is software to map short sequencer reads to
@@ -9531,9 +9912,7 @@ output of segemehl is a SAM or BAM formatted alignment file.")
                (("include_directories\\(\\.\\./ext/htslib\\)") ""))
              #t)))))
     (inputs
-     `(("hdf5" ,hdf5)
-       ("htslib" ,htslib-1.9)
-       ("zlib" ,zlib)))
+     (list hdf5 htslib-1.9 zlib))
     (home-page "https://pachterlab.github.io/kallisto/")
     (synopsis "Near-optimal RNA-Seq quantification")
     (description
@@ -9583,31 +9962,29 @@ dependency like SeqAn.")
                (base32
                 "1amcc5hqvsl42hg4x19bi9vy47cl874s0lw1fmi0hwsdk9i8c03v"))
               (modules '((guix build utils)))
+              ;; Delete bundled headers for eigen3.
               (snippet
-               '(begin
-                  ;; Delete bundled headers for eigen3.
-                  (delete-file-recursively "include/eigen3/")
-                  #t))))
+               '(delete-file-recursively "include/eigen3/"))))
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags
-       (list (string-append "-DBOOST_INCLUDEDIR="
-                            (assoc-ref %build-inputs "boost")
-                            "/include/")
-             (string-append "-DBOOST_LIBRARYDIR="
-                            (assoc-ref %build-inputs "boost")
-                            "/lib/")
-             (string-append "-DBoost_LIBRARIES="
-                            "-lboost_iostreams "
-                            "-lboost_filesystem "
-                            "-lboost_system "
-                            "-lboost_thread "
-                            "-lboost_timer "
-                            "-lboost_chrono "
-                            "-lboost_program_options")
-             "-DBoost_FOUND=TRUE"
-             ;; Don't download RapMap---we already have it!
-             "-DFETCHED_RAPMAP=1")
+       ,#~(list (string-append "-DBOOST_INCLUDEDIR="
+                               #$(this-package-input "boost")
+                               "/include/")
+                (string-append "-DBOOST_LIBRARYDIR="
+                               #$(this-package-input "boost")
+                               "/lib/")
+                (string-append "-DBoost_LIBRARIES="
+                               "-lboost_iostreams "
+                               "-lboost_filesystem "
+                               "-lboost_system "
+                               "-lboost_thread "
+                               "-lboost_timer "
+                               "-lboost_chrono "
+                               "-lboost_program_options")
+                "-DBoost_FOUND=TRUE"
+                ;; Don't download RapMap---we already have it!
+                "-DFETCHED_RAPMAP=1")
        ;; Tests must be run after installation and the location of the test
        ;; data file must be overridden.  But the tests fail.  It looks like
        ;; they are not really meant to be run.
@@ -9618,30 +9995,22 @@ dependency like SeqAn.")
          (add-after 'unpack 'do-not-look-for-boost
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "CMakeLists.txt"
-               (("find_package\\(Boost 1\\.53\\.0") "#"))
-             #t))
+               (("find_package\\(Boost 1\\.53\\.0") "#"))))
          (add-after 'unpack 'do-not-assign-to-macro
            (lambda _
              (substitute* "include/spdlog/details/format.cc"
-               (("const unsigned CHAR_WIDTH = 1;") ""))
-             #t))
+               (("const unsigned CHAR_WIDTH = 1;") ""))))
          (add-after 'unpack 'prepare-rapmap
            (lambda* (#:key inputs #:allow-other-keys)
              (let ((src "external/install/src/rapmap/")
                    (include "external/install/include/rapmap/")
                    (rapmap (assoc-ref inputs "rapmap")))
-               (mkdir-p "/tmp/rapmap")
-               (invoke "tar" "xf"
-                       (assoc-ref inputs "rapmap")
-                       "-C" "/tmp/rapmap"
-                       "--strip-components=1")
                (mkdir-p src)
                (mkdir-p include)
                (for-each (lambda (file)
                            (install-file file src))
-                         (find-files "/tmp/rapmap/src" "\\.(c|cpp)"))
-               (copy-recursively "/tmp/rapmap/include" include))
-             #t))
+                         (find-files (string-append rapmap "/src") "\\.(c|cpp)"))
+               (copy-recursively (string-append rapmap "/include") include))))
          (add-after 'unpack 'use-system-libraries
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* '("src/SailfishIndexer.cpp"
@@ -9656,17 +10025,18 @@ dependency like SeqAn.")
                (("#include \"jellyfish/config.h\"") ""))
              (substitute* "src/CMakeLists.txt"
                (("\\$\\{GAT_SOURCE_DIR\\}/external/install/include/jellyfish-2.2..")
-                (string-append (assoc-ref inputs "jellyfish")
-                               "/include/jellyfish-" ,(package-version jellyfish)))
+                (search-input-directory
+                 inputs
+                 (string-append "/include/jellyfish-" ,(package-version jellyfish))))
                (("\\$\\{GAT_SOURCE_DIR\\}/external/install/lib/libjellyfish-2.0.a")
-                (string-append (assoc-ref inputs "jellyfish")
-                               "/lib/libjellyfish-2.0.a"))
+                (search-input-file inputs
+                                   "/lib/libjellyfish-2.0.a"))
                (("\\$\\{GAT_SOURCE_DIR\\}/external/install/lib/libdivsufsort.a")
-                (string-append (assoc-ref inputs "libdivsufsort")
-                               "/lib/libdivsufsort.so"))
+                (search-input-file inputs
+                                   "/lib/libdivsufsort.so"))
                (("\\$\\{GAT_SOURCE_DIR\\}/external/install/lib/libdivsufsort64.a")
-                (string-append (assoc-ref inputs "libdivsufsort")
-                               "/lib/libdivsufsort64.so")))
+                (search-input-file inputs
+                                   "/lib/libdivsufsort64.so")))
              (substitute* "CMakeLists.txt"
                ;; Don't prefer static libs
                (("SET\\(CMAKE_FIND_LIBRARY_SUFFIXES.*") "")
@@ -9678,10 +10048,10 @@ dependency like SeqAn.")
 
              ;; Ensure that Eigen headers can be found
              (setenv "CPLUS_INCLUDE_PATH"
-                     (string-append (assoc-ref inputs "eigen")
-                                    "/include/eigen3:"
-                                    (or (getenv "CPLUS_INCLUDE_PATH") "")))
-             #t)))))
+                     (string-append (search-input-directory
+                                     inputs "/include/eigen3")
+                                    ":"
+                                    (or (getenv "CPLUS_INCLUDE_PATH") ""))))))))
     (inputs
      `(("boost" ,boost)
        ("eigen" ,eigen)
@@ -9702,14 +10072,13 @@ dependency like SeqAn.")
                     (snippet
                      '(begin (delete-file-recursively "include/spdlog")
                              (for-each delete-file '("include/xxhash.h"
-                                                     "src/xxhash.c"))
-                             #t))))
+                                                     "src/xxhash.c"))))))
        ("libdivsufsort" ,libdivsufsort)
        ("libgff" ,libgff)
-       ("tbb" ,tbb)
+       ("tbb" ,tbb-2020)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.cs.cmu.edu/~ckingsf/software/sailfish/")
     (synopsis "Mapping-based isoform quantification from RNA-Seq reads")
     (description "Sailfish is a tool for genomic transcript quantification
@@ -9763,7 +10132,7 @@ The following file formats are supported:
 (define-public salmon
   (package
     (name "salmon")
-    (version "1.4.0")
+    (version "1.6.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -9772,7 +10141,7 @@ The following file formats are supported:
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1di7y2s8cjr9480lngcmaz3wcabc1lpkyanzbhir1nkhcjmj70h4"))
+                "1wb5wl0rc77svbwq6zvak5h7pf9acw3di0vz5i3gqyhg5l6qd736"))
               (modules '((guix build utils)))
               (snippet
                ;; Delete bundled headers for eigen3.
@@ -9780,14 +10149,15 @@ The following file formats are supported:
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags
-       (list (string-append "-Dlibgff_DIR="
-                            (assoc-ref %build-inputs "libgff") "/lib")
-             "-Dlibgff_FOUND=TRUE"
-             "-DTBB_FOUND=TRUE"
-             "-DTBB_VERSION=2020.3"
-             "-DTBB_LIBRARIES=tbb -ltbbmalloc"
-             "-DFETCHED_PUFFERFISH=TRUE"
-             "-DUSE_SHARED_LIBS=TRUE")
+       ,#~(list (string-append "-Dlibgff_DIR="
+                               #$(this-package-input "libgff") "/lib")
+                "-DCMAKE_CXX_FLAGS=\"-DHAVE_NUMERIC_LIMITS128=1\""
+                "-Dlibgff_FOUND=TRUE"
+                "-DTBB_FOUND=TRUE"
+                #$(string-append "-DTBB_VERSION=" (package-version tbb-2020))
+                "-DTBB_LIBRARIES=tbb -ltbbmalloc"
+                "-DFETCHED_PUFFERFISH=TRUE"
+                "-DUSE_SHARED_LIBS=TRUE")
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'prepare-pufferfish
@@ -9877,13 +10247,13 @@ The following file formats are supported:
                         (file-name (git-file-name "pufferfish" version))
                         (sha256
                          (base32
-                          "0qb4a2nl1d59qasr17sslgxnkjd5kbk5mns4cjshrmsvkrqp995n"))))
-       ("tbb" ,tbb)
+                          "0jakgpbanl6cs23x3g26iab54p7zylcf9v8vc32ps57smp8wql52"))))
+       ("tbb" ,tbb-2020)
        ("libstadenio-for-salmon" ,libstadenio-for-salmon)
        ("xz" ,xz)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/COMBINE-lab/salmon")
     (synopsis "Quantification from RNA-seq reads using lightweight alignments")
     (description "Salmon is a program to produce highly-accurate,
@@ -9914,18 +10284,11 @@ variational inference.")
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (setenv "PYTHONPATH"
-                     (string-append (getcwd) ":"
-                                    (getenv "PYTHONPATH")))
-             (invoke "pytest" "tests")
-             #t)))))
+             (invoke "pytest" "tests"))))))
     (propagated-inputs
-     `(("python-h5py" ,python-h5py)
-       ("python-numpy" ,python-numpy)
-       ("python-pandas" ,python-pandas)
-       ("python-scipy" ,python-scipy)))
+     (list python-h5py python-numpy python-pandas python-scipy))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/linnarsson-lab/loompy")
     (synopsis "Work with .loom files for single-cell RNA-seq data")
     (description "The loom file format is an efficient format for very large
@@ -9935,6 +10298,46 @@ graphs.  This library makes it easy to work with @file{.loom} files for
 single-cell RNA-seq data.")
     (license license:bsd-3)))
 
+(define-public python-biothings-client
+  (package
+    (name "python-biothings-client")
+    (version "0.2.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "biothings_client" version))
+       (sha256
+        (base32 "0bccs37d5saxn5xsd2rfpkrnc5a120xs3ibizai66fgvp1vxbnc4"))))
+    (build-system python-build-system)
+    (arguments `(#:tests? #false)) ; require internet access
+    (propagated-inputs (list python-requests))
+    (home-page "https://github.com/biothings/biothings_client.py")
+    (synopsis "Python client for BioThings API services")
+    (description "This package provides a Python client for BioThings
+API services.")
+    (license license:bsd-3)))
+
+(define-public python-mygene
+  (package
+    (name "python-mygene")
+    (version "3.2.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "mygene" version))
+       (sha256
+        (base32 "1snszwdgfygchxshcbry3b5pbcw3g1isp8dw46razxccqaxwlag7"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     (list python-biothings-client))
+    (home-page "https://github.com/biothings/mygene.py")
+    (synopsis "Python Client for MyGene.Info services")
+    (description "MyGene.Info provides simple-to-use REST web services
+to query/retrieve gene annotation data.  It's designed with simplicity
+and performance emphasized.  Mygene is a Python wrapper to access
+MyGene.Info services.")
+    (license license:bsd-3)))
+
 ;; We cannot use the latest commit because it requires Java 9.
 (define-public java-forester
   (let ((commit "86b07efe302d5094b42deed9260f719a4c4ac2e6")
@@ -10002,8 +10405,7 @@ single-cell RNA-seq data.")
            ;; There is no install target
            (replace 'install (install-jars ".")))))
       (propagated-inputs
-       `(("java-commons-codec" ,java-commons-codec)
-         ("java-openchart2" ,java-openchart2)))
+       (list java-commons-codec java-openchart2))
       (home-page "https://sites.google.com/site/cmzmasek/home/software/forester")
       (synopsis "Phylogenomics libraries for Java")
       (description "Forester is a collection of Java libraries for
@@ -10075,8 +10477,7 @@ reading, writing, and exporting phylogenetic trees.")
          ;; There is no install target
          (replace 'install (install-jars ".")))))
     (propagated-inputs
-     `(("java-commons-codec" ,java-commons-codec)
-       ("java-openchart2" ,java-openchart2)))
+     (list java-commons-codec java-openchart2))
     ;; The source archive does not contain the resources.
     (native-inputs
      `(("phyloxml.xsd"
@@ -10144,13 +10545,10 @@ reading, writing, and exporting phylogenetic trees.")
                                "build/test-classes")
              #t)))))
     (propagated-inputs
-     `(("java-log4j-api" ,java-log4j-api)
-       ("java-log4j-core" ,java-log4j-core)
-       ("java-slf4j-api" ,java-slf4j-api)
-       ("java-slf4j-simple" ,java-slf4j-simple)))
+     (list java-log4j-api java-log4j-core java-slf4j-api
+           java-slf4j-simple))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (home-page "https://biojava.org")
     (synopsis "Core libraries of Java framework for processing biological data")
     (description "BioJava is a project dedicated to providing a Java framework
@@ -10185,15 +10583,14 @@ This package provides the core libraries.")
                                "build/test-classes")
              #t)))))
     (propagated-inputs
-     `(("java-log4j-api" ,java-log4j-api)
-       ("java-log4j-core" ,java-log4j-core)
-       ("java-slf4j-api" ,java-slf4j-api)
-       ("java-slf4j-simple" ,java-slf4j-simple)
-       ("java-biojava-core" ,java-biojava-core)
-       ("java-forester" ,java-forester)))
-    (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-log4j-api
+           java-log4j-core
+           java-slf4j-api
+           java-slf4j-simple
+           java-biojava-core
+           java-forester))
+    (native-inputs
+     (list java-junit java-hamcrest-core))
     (home-page "https://biojava.org")
     (synopsis "Biojava interface to the forester phylogenomics library")
     (description "The phylo module provides a biojava interface layer to the
@@ -10221,16 +10618,15 @@ forester phylogenomics library for constructing phylogenetic trees.")))
                                "build/test-classes")
              #t)))))
     (propagated-inputs
-     `(("java-log4j-api" ,java-log4j-api)
-       ("java-log4j-core" ,java-log4j-core)
-       ("java-slf4j-api" ,java-slf4j-api)
-       ("java-slf4j-simple" ,java-slf4j-simple)
-       ("java-biojava-core" ,java-biojava-core)
-       ("java-biojava-phylo" ,java-biojava-phylo)
-       ("java-forester" ,java-forester)))
-    (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-log4j-api
+           java-log4j-core
+           java-slf4j-api
+           java-slf4j-simple
+           java-biojava-core
+           java-biojava-phylo
+           java-forester))
+    (native-inputs
+     (list java-junit java-hamcrest-core))
     (home-page "https://biojava.org")
     (synopsis "Biojava API for genetic sequence alignment")
     (description "The alignment module of BioJava provides an API that
@@ -10279,15 +10675,14 @@ contains
                                "build/test-classes")
              #t)))))
     (propagated-inputs
-     `(("java-log4j-api" ,java-log4j-api)
-       ("java-log4j-core" ,java-log4j-core)
-       ("java-slf4j-api" ,java-slf4j-api)
-       ("java-slf4j-simple" ,java-slf4j-simple)
-       ("java-biojava-core" ,java-biojava-core-4.0)
-       ("java-forester" ,java-forester-1.005)))
-    (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-log4j-api
+           java-log4j-core
+           java-slf4j-api
+           java-slf4j-simple
+           java-biojava-core-4.0
+           java-forester-1.005))
+    (native-inputs
+     (list java-junit java-hamcrest-core))
     (home-page "https://biojava.org")
     (synopsis "Biojava interface to the forester phylogenomics library")
     (description "The phylo module provides a biojava interface layer to the
@@ -10315,16 +10710,15 @@ forester phylogenomics library for constructing phylogenetic trees.")))
                                "build/test-classes")
              #t)))))
     (propagated-inputs
-     `(("java-log4j-api" ,java-log4j-api)
-       ("java-log4j-core" ,java-log4j-core)
-       ("java-slf4j-api" ,java-slf4j-api)
-       ("java-slf4j-simple" ,java-slf4j-simple)
-       ("java-biojava-core" ,java-biojava-core-4.0)
-       ("java-biojava-phylo" ,java-biojava-phylo-4.0)
-       ("java-forester" ,java-forester-1.005)))
-    (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-log4j-api
+           java-log4j-core
+           java-slf4j-api
+           java-slf4j-simple
+           java-biojava-core-4.0
+           java-biojava-phylo-4.0
+           java-forester-1.005))
+    (native-inputs
+     (list java-junit java-hamcrest-core))
     (home-page "https://biojava.org")
     (synopsis "Biojava API for genetic sequence alignment")
     (description "The alignment module of BioJava provides an API that
@@ -10354,8 +10748,7 @@ contains
        (snippet
         '(begin
            (for-each delete-file (find-files "jar/lib" "\\.jar$"))
-           (delete-file-recursively "3rdParty")
-           #t))))
+           (delete-file-recursively "3rdParty")))))
     (build-system ant-build-system)
     (arguments
      `(#:tests? #f                      ; test data are not included
@@ -10364,9 +10757,9 @@ contains
        #:source-dir "public/src/"
        #:jdk ,icedtea-8
        #:make-flags
-       (list (string-append "-Dpicard.executable.dir="
-                            (assoc-ref %build-inputs "java-picard")
-                            "/share/java/"))
+       (list ,#~(string-append "-Dpicard.executable.dir="
+                               #$(this-package-input "java-picard")
+                               "/share/java/"))
        #:modules ((ice-9 match)
                   (srfi srfi-1)
                   (guix build utils)
@@ -10392,8 +10785,7 @@ contains
                (for-each (lambda (jar)
                            (symlink jar (string-append "jar/lib/" (basename jar))))
                          (append-map (lambda (dir) (find-files dir "\\.jar$"))
-                                     dirs)))
-	     #t))
+                                     dirs)))))
          ;; There is no installation target
          (replace 'install
            (lambda* (#:key inputs outputs #:allow-other-keys)
@@ -10436,8 +10828,7 @@ contains
                                  scripts)
                  (("^java") (which "java"))
                  (("jar_deploy_dir=.*")
-                  (string-append "jar_deploy_dir=" share "\n"))))
-             #t))
+                  (string-append "jar_deploy_dir=" share "\n"))))))
          ;; FIXME: We do this after stripping jars because we don't want it to
          ;; copy all these jars and strip them.  We only want to install
          ;; links.  Arguably, this is a problem with the ant-build-system.
@@ -10449,8 +10840,7 @@ contains
                (for-each (lambda (jar)
                            (symlink (readlink jar)
                                     (string-append lib (basename jar))))
-                         (find-files "jar/lib" "\\.jar$")))
-             #t)))))
+                         (find-files "jar/lib" "\\.jar$"))))))))
     (inputs
      `(("jdk" ,icedtea-8)
        ("java-picard" ,java-picard-2.10.3)
@@ -10469,8 +10859,7 @@ contains
        ("java-simple-xml" ,java-simple-xml)
        ("java-snakeyaml" ,java-snakeyaml)))
     (native-inputs
-     `(("unzip" ,unzip)
-       ("java-testng" ,java-testng)))
+     (list unzip java-testng))
     (home-page "http://mccarrolllab.com/dropseq/")
     (synopsis "Tools for Drop-seq analyses")
     (description "Drop-seq is a technology to enable biologists to
@@ -10489,7 +10878,8 @@ once.  This package provides tools to perform Drop-seq analyses.")
                                   "/pigx_rnaseq-" version ".tar.gz"))
               (sha256
                (base32
-                "1ja3bda1appxrzbfy7wp7khy30mm7lic8xbq3gkbpc5bld3as9cm"))))
+                "1ja3bda1appxrzbfy7wp7khy30mm7lic8xbq3gkbpc5bld3as9cm"))
+              (patches (search-patches "pigx-rnaseq-no-citeproc.patch"))))
     (build-system gnu-build-system)
     (arguments
      `(#:parallel-tests? #f             ; not supported
@@ -10502,51 +10892,53 @@ once.  This package provides tools to perform Drop-seq analyses.")
              (substitute* "Makefile.in"
                (("^  tests/test_multiqc/test.sh") "")
                (("^  test.sh") ""))))
+         (add-before 'bootstrap 'autoreconf
+           (lambda _
+             (invoke "autoreconf" "-vif")))
          (add-before 'check 'set-timezone
            ;; The readr package is picky about timezones.
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "TZ" "UTC+1")
              (setenv "TZDIR"
-                     (string-append (assoc-ref inputs "tzdata")
-                                    "/share/zoneinfo")))))))
-    (inputs
-     `(("coreutils" ,coreutils)
-       ("sed" ,sed)
-       ("gzip" ,gzip)
-       ("snakemake" ,snakemake)
-       ("multiqc" ,multiqc)
-       ("star" ,star-for-pigx)
-       ("hisat2" ,hisat2)
-       ("fastp" ,fastp)
-       ("htseq" ,htseq)
-       ("samtools" ,samtools)
-       ("r-minimal" ,r-minimal)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggpubr" ,r-ggpubr)
-       ("r-ggrepel" ,r-ggrepel)
-       ("r-gprofiler2" ,r-gprofiler2)
-       ("r-deseq2" ,r-deseq2)
-       ("r-dt" ,r-dt)
-       ("r-knitr" ,r-knitr)
-       ("r-pheatmap" ,r-pheatmap)
-       ("r-corrplot" ,r-corrplot)
-       ("r-reshape2" ,r-reshape2)
-       ("r-plotly" ,r-plotly)
-       ("r-scales" ,r-scales)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-crosstalk" ,r-crosstalk)
-       ("r-tximport" ,r-tximport)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-rjson" ,r-rjson)
-       ("salmon" ,salmon)
-       ("pandoc" ,pandoc)
-       ("pandoc-citeproc" ,pandoc-citeproc)
-       ("python-wrapper" ,python-wrapper)
-       ("python-deeptools" ,python-deeptools)
-       ("python-pyyaml" ,python-pyyaml)))
-    (native-inputs
-     `(("tzdata" ,tzdata)))
+                     (search-input-directory inputs
+                                             "share/zoneinfo")))))))
+    (inputs
+     (list coreutils
+           sed
+           gzip
+           snakemake
+           multiqc
+           star-for-pigx
+           hisat2
+           fastp
+           htseq
+           samtools
+           r-minimal
+           r-rmarkdown
+           r-ggplot2
+           r-ggpubr
+           r-ggrepel
+           r-gprofiler2
+           r-deseq2
+           r-dt
+           r-knitr
+           r-pheatmap
+           r-corrplot
+           r-reshape2
+           r-plotly
+           r-scales
+           r-summarizedexperiment
+           r-crosstalk
+           r-tximport
+           r-rtracklayer
+           r-rjson
+           salmon
+           pandoc
+           python-wrapper
+           python-deeptools
+           python-pyyaml))
+    (native-inputs
+     (list tzdata automake autoconf))
     (home-page "https://bioinformatics.mdc-berlin.de/pigx/")
     (synopsis "Analysis pipeline for RNA sequencing experiments")
     (description "PiGX RNAseq is an analysis pipeline for preprocessing and
@@ -10568,62 +10960,67 @@ expression report comparing samples in an easily configurable manner.")
                                   "/pigx_chipseq-" version ".tar.gz"))
               (sha256
                (base32
-                "0c6npx35sszycf059w1x1k4k9hq1qqxny0i4p57q1188czr4561h"))))
+                "0c6npx35sszycf059w1x1k4k9hq1qqxny0i4p57q1188czr4561h"))
+              (patches (search-patches "pigx-chipseq-no-citeproc.patch"))))
     (build-system gnu-build-system)
-    ;; parts of the tests rely on access to the network
-    (arguments '(#:tests? #f))
-    (inputs
-     `(("grep" ,grep)
-       ("coreutils" ,coreutils)
-       ("r-minimal" ,r-minimal)
-       ("r-argparser" ,r-argparser)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-biostrings" ,r-biostrings)
-       ("r-chipseq" ,r-chipseq)
-       ("r-corrplot" ,r-corrplot)
-       ("r-data-table" ,r-data-table)
-       ("r-deseq2" ,r-deseq2)
-       ("r-dplyr" ,r-dplyr)
-       ("r-dt" ,r-dt)
-       ("r-genomation" ,r-genomation)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggrepel" ,r-ggrepel)
-       ("r-gprofiler2" ,r-gprofiler2)
-       ("r-heatmaply" ,r-heatmaply)
-       ("r-hexbin" ,r-hexbin)
-       ("r-htmlwidgets" ,r-htmlwidgets)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-pheatmap" ,r-pheatmap)
-       ("r-plotly" ,r-plotly)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-rsubread" ,r-rsubread)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-stringr" ,r-stringr)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)
-       ("python-wrapper" ,python-wrapper)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-magic" ,python-magic)
-       ("python-xlrd" ,python-xlrd)
-       ("trim-galore" ,trim-galore)
-       ("macs" ,macs)
-       ("multiqc" ,multiqc)
-       ("perl" ,perl)
-       ("pandoc" ,pandoc)
-       ("pandoc-citeproc" ,pandoc-citeproc)
-       ("fastqc" ,fastqc)
-       ("bowtie" ,bowtie)
-       ("idr" ,idr)
-       ("snakemake" ,snakemake)
-       ("samtools" ,samtools)
-       ("bedtools" ,bedtools)
-       ("kentutils" ,kentutils)))
-    (native-inputs
-     `(("python-pytest" ,python-pytest)))
+    (arguments
+     `(#:tests? #f ; parts of the tests rely on access to the network
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'bootstrap 'autoreconf
+           (lambda _
+             (invoke "autoreconf" "-vif"))))))
+    (inputs
+     (list grep
+           coreutils
+           r-minimal
+           r-argparser
+           r-biocparallel
+           r-biostrings
+           r-chipseq
+           r-corrplot
+           r-data-table
+           r-deseq2
+           r-dplyr
+           r-dt
+           r-genomation
+           r-genomicalignments
+           r-genomicranges
+           r-ggplot2
+           r-ggrepel
+           r-gprofiler2
+           r-heatmaply
+           r-hexbin
+           r-htmlwidgets
+           r-jsonlite
+           r-pheatmap
+           r-plotly
+           r-rmarkdown
+           r-rsamtools
+           r-rsubread
+           r-rtracklayer
+           r-s4vectors
+           r-stringr
+           r-tibble
+           r-tidyr
+           python-wrapper
+           python-pyyaml
+           python-magic
+           python-xlrd
+           trim-galore
+           macs
+           multiqc
+           perl
+           pandoc
+           fastqc
+           bowtie
+           idr
+           snakemake
+           samtools
+           bedtools
+           kentutils))
+    (native-inputs
+     (list autoconf automake python-pytest))
     (home-page "https://bioinformatics.mdc-berlin.de/pigx/")
     (synopsis "Analysis pipeline for ChIP sequencing experiments")
     (description "PiGX ChIPseq is an analysis pipeline for preprocessing, peak
@@ -10638,7 +11035,7 @@ in an easily configurable manner.")
 (define-public pigx-bsseq
   (package
     (name "pigx-bsseq")
-    (version "0.1.5")
+    (version "0.1.6")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/BIMSBbioinfo/pigx_bsseq/"
@@ -10646,7 +11043,8 @@ in an easily configurable manner.")
                                   "/pigx_bsseq-" version ".tar.gz"))
               (sha256
                (base32
-                "05al5dacfp1vf1x3cq20jhd6w4xj5vaxslzaka6yrpg0av8sh3k3"))))
+                "1dipikph0xdr8fp0h1flpafcrg60y4aabljg8fl1v92j3gxdggmw"))
+              (patches (search-patches "pigx-bsseq-no-citeproc.patch"))))
     (build-system gnu-build-system)
     (arguments
      `(;; TODO: tests currently require 12+GB of RAM.  See
@@ -10654,48 +11052,50 @@ in an easily configurable manner.")
        #:tests? #f
        #:phases
        (modify-phases %standard-phases
+         (add-before 'bootstrap 'autoreconf
+           (lambda _
+             (invoke "autoreconf" "-vif")))
          (add-before 'check 'set-timezone
            ;; The readr package is picky about timezones.
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "TZ" "UTC+1")
              (setenv "TZDIR"
-                     (string-append (assoc-ref inputs "tzdata")
-                                    "/share/zoneinfo")))))))
-    (native-inputs
-     `(("tzdata" ,tzdata)))
-    (inputs
-     `(("coreutils" ,coreutils)
-       ("sed" ,sed)
-       ("grep" ,grep)
-       ("r-minimal" ,r-minimal)
-       ("r-annotationhub" ,r-annotationhub)
-       ("r-dt" ,r-dt)
-       ("r-genomation" ,r-genomation)
-       ("r-ggbio" ,r-ggbio)
-       ("r-ggrepel" ,r-ggrepel)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-methylkit" ,r-methylkit)
-       ("r-reshape2" ,r-reshape2)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("r-bookdown" ,r-bookdown)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggbio" ,r-ggbio)
-       ("pandoc" ,pandoc)
-       ("pandoc-citeproc" ,pandoc-citeproc)
-       ("python-wrapper" ,python-wrapper)
-       ("python-pyyaml" ,python-pyyaml)
-       ("snakemake" ,snakemake)
-       ("bismark" ,bismark)
-       ("bowtie" ,bowtie)
-       ("bwa-meth" ,bwa-meth)
-       ("fastqc" ,fastqc)
-       ("methyldackel" ,methyldackel)
-       ("multiqc" ,multiqc)
-       ("trim-galore" ,trim-galore)
-       ("cutadapt" ,cutadapt)
-       ("samblaster" ,samblaster)
-       ("samtools" ,samtools)))
+                     (search-input-directory inputs
+                                             "share/zoneinfo")))))))
+    (native-inputs
+     (list tzdata automake autoconf))
+    (inputs
+     (list coreutils
+           sed
+           grep
+           r-minimal
+           r-annotationhub
+           r-dt
+           r-genomation
+           r-ggbio
+           r-ggrepel
+           r-matrixstats
+           r-methylkit
+           r-reshape2
+           r-rtracklayer
+           r-rmarkdown
+           r-bookdown
+           r-ggplot2
+           r-ggbio
+           pandoc
+           python-wrapper
+           python-pyyaml
+           snakemake
+           bismark
+           bowtie
+           bwa-meth
+           fastqc
+           methyldackel
+           multiqc
+           trim-galore
+           cutadapt
+           samblaster
+           samtools))
     (home-page "https://bioinformatics.mdc-berlin.de/pigx/")
     (synopsis "Bisulfite sequencing pipeline from fastq to methylation reports")
     (description "PiGx BSseq is a data processing pipeline for raw fastq read
@@ -10715,8 +11115,17 @@ methylation and segmentation.")
                                   "/pigx_scrnaseq-" version ".tar.gz"))
               (sha256
                (base32
-                "1h5mcxzwj3cidlkvy9ly5wmi48vwfsjf8dxjfirknqxr9a92hwlx"))))
+                "1h5mcxzwj3cidlkvy9ly5wmi48vwfsjf8dxjfirknqxr9a92hwlx"))
+              (patches (search-patches "pigx-scrnaseq-no-citeproc.patch"))))
     (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'bootstrap 'autoreconf
+           (lambda _
+             (invoke "autoreconf" "-vif"))))))
+    (native-inputs
+     (list automake autoconf))
     (inputs
      `(("coreutils" ,coreutils)
        ("perl" ,perl)
@@ -10731,7 +11140,6 @@ methylation and segmentation.")
        ("python-numpy" ,python-numpy)
        ("python-loompy" ,python-loompy)
        ("pandoc" ,pandoc)
-       ("pandoc-citeproc" ,pandoc-citeproc)
        ("samtools" ,samtools)
        ("snakemake" ,snakemake)
        ("star" ,star-for-pigx)
@@ -10773,7 +11181,7 @@ based methods.")
 (define-public pigx-sars-cov2-ww
   (package
     (name "pigx-sars-cov2-ww")
-    (version "0.0.3")
+    (version "0.0.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/BIMSBbioinfo/pigx_sarscov2_ww/"
@@ -10781,35 +11189,49 @@ based methods.")
                                   "/pigx_sars-cov2-ww-" version ".tar.gz"))
               (sha256
                (base32
-                "1hhdbwsnl0d37lrmisw5hr630xr8s41qvxflm05anh11rj8n22yw"))))
+                "0axnmz4d8zgir888mc0cilcq4m3v41xmjmpp3w3444lciwnxydvs"))
+              (patches (search-patches "pigx-sars-cov2-ww-no-citeproc.patch"))))
     (build-system gnu-build-system)
-    (inputs
-     `(("bash-minimal" ,bash-minimal)
-       ("bwa" ,bwa)
-       ("ensembl-vep" ,ensembl-vep)
-       ("fastqc" ,fastqc)
-       ("kraken2" ,kraken2)
-       ("krona-tools" ,krona-tools)
-       ("lofreq" ,lofreq)
-       ("multiqc" ,multiqc)
-       ("prinseq" ,prinseq)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-wrapper" ,python-wrapper)
-       ("r-base64url" ,r-base64url)
-       ("r-dplyr" ,r-dplyr)
-       ("r-dt" ,r-dt)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-magrittr" ,r-magrittr)
-       ("r-minimal" ,r-minimal)
-       ("r-plotly" ,r-plotly)
-       ("r-qpcr" ,r-qpcr)
-       ("r-reshape2" ,r-reshape2)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("r-stringr" ,r-stringr)
-       ("r-tidyr" ,r-tidyr)
-       ("samtools" ,samtools)
-       ("snakemake" ,snakemake)
-       ("wget" ,wget)))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'bootstrap 'autoreconf
+           (lambda _
+             (invoke "autoreconf" "-vif"))))))
+    (native-inputs
+     (list automake autoconf))
+    (inputs
+     (list bash-minimal
+           bbmap
+           bedtools
+           bwa
+           ensembl-vep
+           fastp
+           fastqc
+           ivar
+           kraken2
+           krona-tools
+           lofreq
+           multiqc
+           prinseq
+           python-pyyaml
+           python-wrapper
+           r-base64url
+           r-dplyr
+           r-dt
+           r-ggplot2
+           r-magrittr
+           r-minimal
+           r-plotly
+           r-qpcr
+           r-r-utils
+           r-reshape2
+           r-rmarkdown
+           r-stringr
+           r-tidyr
+           samtools
+           snakemake
+           wget))
     (home-page "https://bioinformatics.mdc-berlin.de/pigx/")
     (synopsis "Analysis pipeline for wastewater sequencing")
     (description "PiGx SARS-CoV-2 is a pipeline for analysing data from
@@ -10833,11 +11255,7 @@ variant abundance over time and location.")
                 "1i5njdy1clj5ncw45d16p7mwmqvb1ilikl9n797pxklc3f4s7mq7"))))
     (build-system gnu-build-system)
     (inputs
-     `(("python" ,python)
-       ("pigx-bsseq" ,pigx-bsseq)
-       ("pigx-chipseq" ,pigx-chipseq)
-       ("pigx-rnaseq" ,pigx-rnaseq)
-       ("pigx-scrnaseq" ,pigx-scrnaseq)))
+     (list python pigx-bsseq pigx-chipseq pigx-rnaseq pigx-scrnaseq))
     (home-page "https://bioinformatics.mdc-berlin.de/pigx/")
     (synopsis "Analysis pipelines for genomics")
     (description "PiGx is a collection of genomics pipelines.  It includes the
@@ -10879,7 +11297,7 @@ HTML reports with interesting findings about your samples.")
              (install-file "Genrich" (string-append (assoc-ref outputs "out") "/bin"))
              #t)))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "https://github.com/jsh58/Genrich")
     (synopsis "Detecting sites of genomic enrichment")
     (description "Genrich is a peak-caller for genomic enrichment
@@ -10889,11 +11307,12 @@ enrichment.")
     (license license:expat)))
 
 (define-public mantis
-  (let ((commit "4ffd171632c2cb0056a86d709dfd2bf21bc69b84")
-        (revision "1"))
+  ;; This is an arbitrary commit as a year has passed since 0.1 was tagged.
+  (let ((commit "b6979a269172a45201c8366680d8b889f889432b")
+        (revision "2"))
     (package
       (name "mantis")
-      (version (git-version "0" revision commit))
+      (version (git-version "0.1" revision commit))
       (source (origin
                 (method git-fetch)
                 (uri (git-reference
@@ -10902,13 +11321,15 @@ enrichment.")
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "0iqbr0dhmlc8mzpirmm2s4pkzkwdgrcx50yx6cv3wlr2qi064p55"))))
+                  "0dq8a785hnaxx5kq757m5czs8xpcjpcph1inq2nm8h6zfvqyj8xs"))))
       (build-system cmake-build-system)
-      (arguments '(#:tests? #f)) ; there are none
+      (arguments
+       '(#:tests? #f ; there are none
+         #:configure-flags (list "-DNH=ON"))) ; do not use SSE4.2 instructions
       (inputs
-       `(("sdsl-lite" ,sdsl-lite)
-         ("openssl" ,openssl)
-         ("zlib" ,zlib)))
+       (list sdsl-lite openssl zlib))
+      (native-inputs
+       (list gcc-7))
       (home-page "https://github.com/splatlab/mantis")
       (synopsis "Large-scale sequence-search index data structure")
       (description "Mantis is a space-efficient data structure that can be
@@ -10943,9 +11364,9 @@ analyses in addition to large-scale sequence-level searches.")
       (arguments
        `(#:tests? #f                    ; requires a 1.4G test file
          #:make-flags
-         (list (string-append "SAMTOOLS_DIR="
-                              (assoc-ref %build-inputs "samtools")
-                              "/lib/"))
+         ,#~(list (string-append "SAMTOOLS_DIR="
+                                 #$(this-package-input "samtools")
+                                 "/lib/"))
          #:phases
          (modify-phases %standard-phases
            (replace 'configure
@@ -10954,19 +11375,16 @@ analyses in addition to large-scale sequence-level searches.")
                  (("-I \\$\\{SAMTOOLS_DIR\\}")
                   (string-append "-I" (assoc-ref inputs "samtools")
                                  "/include/samtools"))
-                 (("-lz ") "-lz -lpthread "))
-               #t))
+                 (("-lz ") "-lz -lpthread "))))
            (replace 'install
              (lambda* (#:key outputs #:allow-other-keys)
                (for-each (lambda (tool)
                            (install-file tool
                                          (string-append (assoc-ref outputs "out")
                                                         "/bin")))
-                         '("j_count" "b_count" "sjcount"))
-               #t)))))
+                         '("j_count" "b_count" "sjcount")))))))
       (inputs
-       `(("samtools" ,samtools-0.1)
-         ("zlib" ,zlib)))
+       (list samtools-0.1 zlib))
       (home-page "https://github.com/pervouchine/sjcount-full/")
       (synopsis "Annotation-agnostic splice junction counting pipeline")
       (description "Sjcount is a utility for fast quantification of splice
@@ -10977,7 +11395,7 @@ version does count multisplits.")
 (define-public minimap2
   (package
     (name "minimap2")
-    (version "2.18")
+    (version "2.23")
     (source
      (origin
        (method url-fetch)
@@ -10986,7 +11404,7 @@ version does count multisplits.")
                            "minimap2-" version ".tar.bz2"))
        (sha256
         (base32
-         "1d7fvdqcqd6wns875rkyd7f34ii15gc9l1sivd2wbbpcb0fi0mbs"))))
+         "00ngbz1swcgxk5apx9dz5xkh1z8abdpysx5lc7w8fbrfxp41w0j0"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ; there are none
@@ -11041,7 +11459,7 @@ version does count multisplits.")
                           out ,version))))
              #t)))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "https://lh3.github.io/minimap2/")
     (synopsis "Pairwise aligner for genomic and spliced nucleotide sequences")
     (description "Minimap2 is a versatile sequence alignment program that
@@ -11072,9 +11490,9 @@ cases include:
               "1a05p7rkmxa6qhm108na8flzj2v45jab06drk59kzk1ip2sgvzqq"))))
    (build-system python-build-system)
    (native-inputs
-    `(("python-cython" ,python-cython)))
+    (list python-cython))
    (inputs
-    `(("zlib" ,zlib)))
+    (list zlib))
    (home-page "https://github.com/lh3/minimap2")
    (synopsis "Python binding for minimap2")
    (description "This package provides a convenient interface to minimap2,
@@ -11097,7 +11515,7 @@ sequences.")
               "04dv5wv8bhsw1imxwyd438bnn9kby7svp44nbcz8lsadzjjci5gs"))))
    (build-system gnu-build-system)
    (inputs
-    `(("zlib" ,zlib)))
+    (list zlib))
    (arguments
     `(#:tests? #f ; There are no tests.
       #:phases
@@ -11155,10 +11573,9 @@ Thus the per-base error rate is similar to the raw input reads.")
                (install-file "Bandage" (string-append out "/bin"))
                #t))))))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)))
+     (list qtbase-5 qtsvg))
     (native-inputs
-     `(("imagemagick" ,imagemagick)))
+     (list imagemagick))
     (home-page "https://rrwick.github.io/Bandage/")
     (synopsis
      "Bioinformatics Application for Navigating De novo Assembly Graphs Easily")
@@ -11194,10 +11611,9 @@ contigs alone.")
     ;; The test suite attempts to execute ../test-driver, which does not exist.
     (arguments '(#:tests? #false))
     (propagated-inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (native-inputs
-     `(("gcc" ,gcc-10)                   ;Code has C++17 requirements
-       ("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://gitlab.com/german.tischler/libmaus2")
     (synopsis "Collection of data structures and algorithms useful for bioinformatics")
     (description "libmaus2 is a collection of data structures and
@@ -11235,14 +11651,12 @@ and many lower level support classes.
      ;; The test suite attempts to execute ../test-driver, which does not exist.
      `(#:tests? #false
        #:configure-flags
-       (list (string-append "--with-libmaus2="
-                            (assoc-ref %build-inputs "libmaus2")))))
+       ,#~(list (string-append "--with-libmaus2="
+                               #$(this-package-input "libmaus2")))))
     (inputs
-     `(("libmaus2" ,libmaus2)
-       ("xerces-c" ,xerces-c)))
+     (list libmaus2 xerces-c))
     (native-inputs
-     `(("gcc" ,gcc-10)                  ;Code has C++17 requirements
-       ("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://gitlab.com/german.tischler/biobambam2")
     (synopsis "Tools for processing BAM files")
     (description "This package contains some tools for processing BAM files
@@ -11283,23 +11697,23 @@ including:
          "0jhjn3ilb057hbf6yzrihj13ifxxs32y7nkby8l3lkm28dg4p97h"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-annotationhub" ,r-annotationhub)
-       ("r-biomart" ,r-biomart)
-       ("r-data-table" ,r-data-table)
-       ("r-dbi" ,r-dbi)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-hash" ,r-hash)
-       ("r-iranges" ,r-iranges)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rmysql" ,r-rmysql)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-stringr" ,r-stringr)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-annotationdbi
+           r-annotationhub
+           r-biomart
+           r-data-table
+           r-dbi
+           r-genomicfeatures
+           r-genomicranges
+           r-ggplot2
+           r-hash
+           r-iranges
+           r-rcolorbrewer
+           r-rmysql
+           r-s4vectors
+           r-stringr
+           r-summarizedexperiment))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/BIMSBbioinfo/ciRcus")
     (synopsis "Annotation, analysis and visualization of circRNA data")
     (description "Circus is an R package for annotation, analysis and
@@ -11309,6 +11723,39 @@ known and yet unknown splice junctions.  Circular-to-linear ratios of circRNAs
 can be calculated, and a number of descriptive plots easily generated.")
     (license license:artistic2.0)))
 
+(define-public r-doubletfinder
+  (let ((commit "554097ba4e2c0ed7c28dc7f0b5b75277f3a50551")
+        (revision "1"))
+    (package
+      (name "r-doubletfinder")
+      (version (git-version "2.0.3" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/chris-mcginnis-ucsf/DoubletFinder")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "1q1pnqw7ry4syp04wjmvz5bws6z4vg4c340ky07lk0vp577x2773"))))
+      (properties `((upstream-name . "DoubletFinder")))
+      (build-system r-build-system)
+      (propagated-inputs (list r-fields r-kernsmooth r-rocr))
+      (home-page "https://github.com/chris-mcginnis-ucsf/DoubletFinder")
+      (synopsis "Identify doublets in single-cell RNA sequencing data")
+      (description
+       "DoubletFinder identifies doublets by generating artificial doublets
+from existing scRNA-seq data and defining which real cells preferentially
+co-localize with artificial doublets in gene expression space.  Other
+DoubletFinder package functions are used for fitting DoubletFinder to
+different scRNA-seq datasets.  For example, ideal DoubletFinder performance in
+real-world contexts requires optimal pK selection and homotypic doublet
+proportion estimation.  pK selection is achieved using pN-pK parameter sweeps
+and maxima identification in mean-variance-normalized bimodality coefficient
+distributions.  Homotypic doublet proportion estimation is achieved by finding
+the sum of squared cell annotation frequencies.")
+      (license license:cc0))))
+
 (define-public gffread
   ;; We cannot use the tagged release because it is not in sync with gclib.
   ;; See https://github.com/gpertea/gffread/issues/26
@@ -11400,11 +11847,11 @@ conversions, region filtering, FASTA sequence extraction and more.")
              (lambda* (#:key outputs #:allow-other-keys)
                (let* ((out (assoc-ref outputs "out"))
                       (bin (string-append out "/bin"))
-                      (path (getenv "PYTHONPATH")))
+                      (path (getenv "GUIX_PYTHONPATH")))
                  (for-each (lambda (script)
                              (install-file script bin)
                              (wrap-program (string-append bin "/" script)
-                               `("PYTHONPATH" ":" prefix (,path))))
+                               `("GUIX_PYTHONPATH" ":" prefix (,path))))
                            '("cmp_bed.py"
                              "find_circ.py"
                              "maxlength.py"
@@ -11412,9 +11859,7 @@ conversions, region filtering, FASTA sequence extraction and more.")
                              "unmapped2anchors.py")))
                #t)))))
       (inputs
-       `(("python2" ,python-2)
-         ("python2-pysam" ,python2-pysam)
-         ("python2-numpy" ,python2-numpy)))
+       (list python-2 python2-pysam python2-numpy))
       (home-page "https://github.com/marvin-jens/find_circ")
       (synopsis "circRNA detection from RNA-seq reads")
       (description "This package provides tools to detect head-to-tail
@@ -11465,7 +11910,7 @@ in RNA-seq data.")
                   (string-append "FAST_TSNE_SCRIPT_DIR = \"" out "\"\n")))
                (install-file "fast_tsne.R" share)))))))
     (inputs
-     `(("fftw" ,fftw)))
+     (list fftw))
     (home-page "https://github.com/KlugerLab/FIt-SNE")
     (synopsis "Fast Fourier Transform-accelerated interpolation-based t-SNE")
     (description "@dfn{t-Stochastic Neighborhood Embedding} (t-SNE) is a
@@ -11488,7 +11933,7 @@ implementation differs in these ways:
 (define-public python-scanpy
   (package
     (name "python-scanpy")
-    (version "1.8.1")
+    (version "1.8.2")
     (source
      (origin
        (method git-fetch)
@@ -11498,7 +11943,7 @@ implementation differs in these ways:
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0w1qmv3djqi8q0sn5hv34ivzs157fwjjb9nflfnagnhpxmw8vx5g"))))
+         "14zax23lqinv7xyv3491vpl3ydi38naiwaxg5mkfs5zk2406cqdr"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -11519,70 +11964,72 @@ implementation differs in these ways:
                                    wheel (string-append "--prefix=" out)))
                          (find-files "dist" "\\.whl$")))))
          (replace 'check
-           (lambda* (#:key inputs #:allow-other-keys)
-             ;; These tests require Internet access.
-             (delete-file-recursively "scanpy/tests/notebooks")
-             (delete-file "scanpy/tests/test_clustering.py")
-             (delete-file "scanpy/tests/test_datasets.py")
-             (delete-file "scanpy/tests/test_score_genes.py")
-             (delete-file "scanpy/tests/test_highly_variable_genes.py")
-
-             ;; TODO: I can't get the plotting tests to work, even with Xvfb.
-             (delete-file "scanpy/tests/test_embedding_plots.py")
-             (delete-file "scanpy/tests/test_preprocessing.py")
-             (delete-file "scanpy/tests/test_read_10x.py")
-
-             ;; TODO: these fail with TypingError and "Use of unsupported
-             ;; NumPy function 'numpy.split'".
-             (delete-file "scanpy/tests/test_metrics.py")
-
-             ;; The following tests requires 'scanorama', which isn't
-             ;; packaged yet.
-             (delete-file "scanpy/tests/external/test_scanorama_integrate.py")
-
-             (setenv "PYTHONPATH"
-                     (string-append (getcwd) ":"
-                                    (assoc-ref inputs "python-anndata:source") ":"
-                                    (getenv "PYTHONPATH")))
-             (invoke "pytest" "-vv"
-                     "-k"
-                     ;; Plot tests that fail.
-                     (string-append "not test_dotplot_matrixplot_stacked_violin"
-                                    " and not test_violin_without_raw"
-                                    " and not test_correlation"
-                                    " and not test_scatterplots"
-                                    " and not test_scatter_embedding_add_outline_vmin_vmax_norm"
-                                    " and not test_paga"
-                                    " and not test_paga_compare"
-
-                                    ;; These try to connect to the network
-                                    " and not test_plot_rank_genes_groups_gene_symbols"
-                                    " and not test_pca_chunked"
-                                    " and not test_pca_sparse"
-                                    " and not test_pca_reproducible")))))))
+           (lambda* (#:key tests? inputs #:allow-other-keys)
+             (when tests?
+               ;; These tests require Internet access.
+               (delete-file-recursively "scanpy/tests/notebooks")
+               (delete-file "scanpy/tests/test_clustering.py")
+               (delete-file "scanpy/tests/test_datasets.py")
+               (delete-file "scanpy/tests/test_score_genes.py")
+               (delete-file "scanpy/tests/test_highly_variable_genes.py")
+
+               ;; TODO: I can't get the plotting tests to work, even with Xvfb.
+               (delete-file "scanpy/tests/test_embedding_plots.py")
+               (delete-file "scanpy/tests/test_preprocessing.py")
+               (delete-file "scanpy/tests/test_read_10x.py")
+
+               ;; TODO: these fail with TypingError and "Use of unsupported
+               ;; NumPy function 'numpy.split'".
+               (delete-file "scanpy/tests/test_metrics.py")
+
+               ;; The following tests requires 'scanorama', which isn't
+               ;; packaged yet.
+               (delete-file "scanpy/tests/external/test_scanorama_integrate.py")
+
+               (setenv "PYTHONPATH"
+                       (string-append (getcwd) ":"
+                                      (assoc-ref inputs "python-anndata:source") ":"
+                                      (getenv "GUIX_PYTHONPATH")))
+               (invoke "pytest" "-vv"
+                       "-k"
+                       ;; Plot tests that fail.
+                       (string-append "not test_dotplot_matrixplot_stacked_violin"
+                                      " and not test_violin_without_raw"
+                                      " and not test_correlation"
+                                      " and not test_scatterplots"
+                                      " and not test_scatter_embedding_add_outline_vmin_vmax_norm"
+                                      " and not test_paga"
+                                      " and not test_paga_compare"
+                                      " and not test_clustermap"
+
+                                      ;; These try to connect to the network
+                                      " and not test_plot_rank_genes_groups_gene_symbols"
+                                      " and not test_pca_chunked"
+                                      " and not test_pca_sparse"
+                                      " and not test_pca_reproducible"))))))))
     (propagated-inputs
-     `(("python-anndata" ,python-anndata)
-       ("python-h5py" ,python-h5py)
-       ("python-igraph" ,python-igraph)
-       ("python-joblib" ,python-joblib)
-       ("python-legacy-api-wrap" ,python-legacy-api-wrap)
-       ("python-louvain" ,python-louvain-0.6)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-natsort" ,python-natsort)
-       ("python-networkx" ,python-networkx)
-       ("python-numba" ,python-numba)
-       ("python-packaging" ,python-packaging)
-       ("python-pandas" ,python-pandas)
-       ("python-patsy" ,python-patsy)
-       ("python-scikit-learn" ,python-scikit-learn)
-       ("python-scipy" ,python-scipy)
-       ("python-seaborn" ,python-seaborn)
-       ("python-sinfo" ,python-sinfo)
-       ("python-statsmodels" ,python-statsmodels)
-       ("python-tables" ,python-tables)
-       ("python-pytoml" ,python-pytoml)
-       ("python-tqdm" ,python-tqdm)
-       ("python-umap-learn" ,python-umap-learn)))
+     (list python-anndata
+           python-h5py
+           python-igraph
+           python-joblib
+           python-legacy-api-wrap
+           python-louvain-0.6
+           python-matplotlib
+           python-natsort
+           python-networkx
+           python-numba
+           python-packaging
+           python-pandas
+           python-patsy
+           python-scikit-learn
+           python-scipy
+           python-seaborn
+           python-sinfo
+           python-statsmodels
+           python-tables
+           python-pytoml
+           python-tqdm
+           python-umap-learn))
     (native-inputs
      `(;; This package needs anndata.tests, which is not installed.
        ("python-anndata:source" ,(package-source python-anndata))
@@ -11591,7 +12038,7 @@ implementation differs in these ways:
        ("python-pytest" ,python-pytest)
        ("python-setuptools-scm" ,python-setuptools-scm)))
     (home-page "https://github.com/theislab/scanpy")
-    (synopsis "Single-Cell Analysis in Python.")
+    (synopsis "Single-Cell Analysis in Python")
     (description "Scanpy is a scalable toolkit for analyzing single-cell gene
 expression data.  It includes preprocessing, visualization, clustering,
 pseudotime and trajectory inference and differential expression testing.  The
@@ -11612,13 +12059,21 @@ million cells.")
          "1jbsh01f57zj4bhvjr3jh4532zznqd6nccmgrl3qi9gnhkf7c4y0"))))
     (build-system python-build-system)
     (arguments
-     `(#:tests? #f)) ; TODO: Enable after migration to scikit-learn.
+     `(#:tests? #f ; no tests are included
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'do-not-fail-to-find-sklearn
+           (lambda _
+             ;; XXX: I have no idea why it cannot seem to find sklearn.
+             (substitute* "setup.py"
+               (("'sklearn'") "")))))))
     (propagated-inputs
-     `(("python-annoy" ,python-annoy)
-       ("python-cython" ,python-cython)
-       ("python-numpy" ,python-numpy)
-       ("python-scipy" ,python-scipy)
-       ("python-umap-learn" ,python-umap-learn)))
+     (list python-annoy
+           python-cython
+           python-numpy
+           python-scikit-learn
+           python-scipy
+           python-umap-learn))
     (home-page "https://github.com/Teichlab/bbknn")
     (synopsis "Batch balanced KNN")
     (description "BBKNN is a batch effect removal tool that can be directly
@@ -11646,14 +12101,14 @@ altering the counts or PCA space.")
          "08vk0x6v5c5n7afgd5pcjhsvb424absypxy22hw1cm1n9kirbi77"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-biopython" ,python-biopython)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-numpy" ,python-numpy)
-       ("python-pandas" ,python-pandas)
-       ("python-pytest" ,python-pytest)
-       ("python-scikit-learn" ,python-scikit-learn)
-       ("python-seaborn" ,python-seaborn)
-       ("python-tqdm" ,python-tqdm)))
+     (list python-biopython
+           python-matplotlib
+           python-numpy
+           python-pandas
+           python-pytest
+           python-scikit-learn
+           python-seaborn
+           python-tqdm))
     (home-page "https://github.com/MrOlm/drep")
     (synopsis "De-replication of microbial genomes assembled from multiple samples")
     (description
@@ -11666,14 +12121,14 @@ set.")
 (define-public instrain
   (package
     (name "instrain")
-    (version "1.5.2")
+    (version "1.5.4")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "inStrain" version))
        (sha256
         (base32
-         "0ykqlpf6yz4caihsaz3ys00cyvlr7wdj4s9a8rh56q5r8xf80ic0"))))
+         "05w1lw75x4lwkzg4qpi055g7hdjp9rnc4ksbxg2hfgksq9djk0hx"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -11686,24 +12141,24 @@ set.")
                (("from job_utils")
                 "from .job_utils")))))))
     (inputs
-     `(("python-biopython" ,python-biopython)
-       ("python-boto3" ,python-boto3)
-       ("python-h5py" ,python-h5py)
-       ("python-lmfit" ,python-lmfit)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-networkx" ,python-networkx)
-       ("python-numba" ,python-numba)
-       ("python-numpy" ,python-numpy)
-       ("python-pandas" ,python-pandas)
-       ("python-psutil" ,python-psutil)
-       ("python-pysam" ,python-pysam)
-       ("python-scikit-learn" ,python-scikit-learn)
-       ("python-seaborn" ,python-seaborn)
-       ("python-tqdm" ,python-tqdm)
-       ;; drep is needed for deprecated plot utilities
-       ("python-drep" ,python-drep)))
-    (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-biopython-1.73
+           python-boto3
+           python-h5py
+           python-lmfit
+           python-matplotlib
+           python-networkx
+           python-numba
+           python-numpy
+           python-pandas
+           python-psutil
+           python-pysam
+           python-scikit-learn
+           python-seaborn
+           python-tqdm
+           ;; drep is needed for deprecated plot utilities
+           python-drep))
+    (native-inputs
+     (list python-pytest))
     (home-page "https://github.com/MrOlm/inStrain")
     (synopsis "Calculation of strain-level metrics")
     (description
@@ -11795,9 +12250,9 @@ reference transcripts provided in a annotation file (also in GTF/GFF3 format).
            (base32 "0rgv6q5fl4x5d74n6p5wvdna6zmbdbqpb4jqqh6vq3670gn08xad"))))
       (build-system gnu-build-system)
       (arguments
-       '(#:tests? #f ; No tests.
-         #:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
-                            "DESTDIR=\"\"")
+       `(#:tests? #f                    ; No tests.
+         #:make-flags
+         ,#~(list (string-append "PREFIX=" #$output) "DESTDIR=\"\"")
          #:phases
          (modify-phases %standard-phases
            (delete 'configure)))) ; There is no configure phase.
@@ -11834,9 +12289,9 @@ allowing the insertion of arbitrary types into the tree.")
              (setenv "PY_IGNORE_IMPORTMISMATCH" "1")
              #t)))))
     (propagated-inputs
-     `(("python-sortedcontainers" ,python-sortedcontainers)))
+     (list python-sortedcontainers))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/chaimleib/intervaltree")
     (synopsis "Editable interval tree data structure")
     (description
@@ -11876,7 +12331,7 @@ bound.")
                                       "/bin"))
              #t)))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "https://github.com/4dn-dcic/pairix")
     (synopsis "Support for querying pairix-indexed bgzipped text files")
     (description
@@ -11897,7 +12352,7 @@ bgzipped text file that contains a pair of genomic coordinates per line.")
          "038xi3a6zvrxbyyfpp64ka8pcjgsdq4fgw9cl5lpxbvmm1bzzw2q"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "http://mattshirley.com")
     (synopsis "Random access to fasta subsequences")
     (description
@@ -11945,29 +12400,26 @@ fasta subsequences.")
              (when tests?
                (invoke "python" "-m" "pytest" "-v")))))))
     (propagated-inputs
-     `(("python-asciitree" ,python-asciitree)
-       ("python-biopython" ,python-biopython)
-       ("python-click" ,python-click)
-       ("python-cytoolz" ,python-cytoolz)
-       ("python-dask" ,python-dask)
-       ("python-h5py" ,python-h5py)
-       ("python-multiprocess" ,python-multiprocess)
-       ("python-numpy" ,python-numpy)
-       ("python-pandas" ,python-pandas)
-       ("python-pyfaidx" ,python-pyfaidx)
-       ("python-pypairix" ,python-pypairix)
-       ("python-pysam" ,python-pysam)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-scipy" ,python-scipy)
-       ("python-simplejson" ,python-simplejson)
-       ("python-six" ,python-six)
-       ("python-sparse" ,python-sparse)))
-    (native-inputs
-     `(("python-codecov" ,python-codecov)
-       ("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-flake8" ,python-pytest-flake8)))
+     (list python-asciitree
+           python-biopython
+           python-click
+           python-cytoolz-for-cooler
+           python-dask
+           python-h5py
+           python-multiprocess
+           python-numpy
+           python-pandas
+           python-pyfaidx
+           python-pypairix
+           python-pysam
+           python-pyyaml
+           python-scipy
+           python-simplejson
+           python-six
+           python-sparse))
+    (native-inputs
+     (list python-codecov python-mock python-pytest python-pytest-cov
+           python-pytest-flake8))
     ;; Almost all the projects of the Mirnylab are moved under Open2C umbrella
     (home-page "https://github.com/open2c/cooler")
     (synopsis "Sparse binary format for genomic interaction matrices")
@@ -12001,14 +12453,14 @@ such as Hi-C contact matrices.")
              (when tests?
                (invoke "python" "-m" "pytest" "-v")))))))
     (propagated-inputs
-     `(("python-cooler" ,python-cooler)
-       ("python-intervaltree" ,python-intervaltree)
-       ("python-numpy" ,python-numpy)
-       ("python-pandas" ,python-pandas)
-       ("python-scipy" ,python-scipy)
-       ("python-tables" ,python-tables)))
-    (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-cooler
+           python-intervaltree
+           python-numpy
+           python-pandas
+           python-scipy
+           python-tables))
+    (native-inputs
+     (list python-pytest))
     (home-page "https://github.com/deeptools/HiCMatrix/")
     (synopsis "HiCMatrix class for HiCExplorer and pyGenomeTracks")
     (description
@@ -12041,21 +12493,21 @@ the HiCExplorer and pyGenomeTracks packages.")
                (("==") ">="))
              #t)))))
     (propagated-inputs
-     `(("python-biopython" ,python-biopython)
-       ("python-configparser" ,python-configparser)
-       ("python-cooler" ,python-cooler)
-       ("python-future" ,python-future)
-       ("python-intervaltree" ,python-intervaltree)
-       ("python-jinja2" ,python-jinja2)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-numpy" ,python-numpy)
-       ("python-pandas" ,python-pandas)
-       ("python-pybigwig" ,python-pybigwig)
-       ("python-pysam" ,python-pysam)
-       ("python-scipy" ,python-scipy)
-       ("python-six" ,python-six)
-       ("python-tables" ,python-tables)
-       ("python-unidecode" ,python-unidecode)))
+     (list python-biopython
+           python-configparser
+           python-cooler
+           python-future
+           python-intervaltree
+           python-jinja2
+           python-matplotlib
+           python-numpy
+           python-pandas
+           python-pybigwig
+           python-pysam
+           python-scipy
+           python-six
+           python-tables
+           python-unidecode))
     (home-page "https://hicexplorer.readthedocs.io")
     (synopsis "Process, analyze and visualize Hi-C data")
     (description
@@ -12092,17 +12544,17 @@ genomic scores), long range contacts and the visualization of viewpoints.")
                 "matplotlib >=3.1.1"))
              #t)))))
     (propagated-inputs
-     `(("python-future" ,python-future)
-       ("python-gffutils" ,python-gffutils)
-       ("python-hicmatrix" ,python-hicmatrix)
-       ("python-intervaltree" ,python-intervaltree)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-numpy" ,python-numpy)
-       ("python-pybigwig" ,python-pybigwig)
-       ("python-pysam" ,python-pysam)
-       ("python-tqdm" ,python-tqdm)))
-    (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-future
+           python-gffutils
+           python-hicmatrix
+           python-intervaltree
+           python-matplotlib
+           python-numpy
+           python-pybigwig
+           python-pysam
+           python-tqdm))
+    (native-inputs
+     (list python-pytest))
     (home-page "https://pygenometracks.readthedocs.io")
     (synopsis "Program and library to plot beautiful genome browser tracks")
     (description
@@ -12126,10 +12578,7 @@ pyGenomeTracks can make plots with or without Hi-C data.")
     (build-system python-build-system)
     (arguments `(#:tests? #false)) ; there are none
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-pandas" ,python-pandas)
-       ("python-scipy" ,python-scipy)
-       ("python-scikit-learn" ,python-scikit-learn)))
+     (list python-numpy python-pandas python-scipy python-scikit-learn))
     (home-page "https://github.com/hiclib/iced")
     (synopsis "ICE normalization")
     (description "This is a package for normalizing Hi-C contact counts
@@ -12163,11 +12612,8 @@ efficiently.")
                        (list "test_data/hic2cool_0.4.2_single_res.cool"
                              "test_data/hic2cool_0.7.0_multi_res.mcool")))))))
     (propagated-inputs
-     `(("python-cooler" ,python-cooler)
-       ("python-h5py" ,python-h5py)
-       ("python-numpy" ,python-numpy)
-       ("python-pandas" ,python-pandas)
-       ("python-scipy" ,python-scipy)))
+     (list python-cooler python-h5py python-numpy python-pandas
+           python-scipy))
     (home-page "https://github.com/4dn-dcic/hic2cool")
     (synopsis "Converter for .hic and .cool files")
     (description
@@ -12192,11 +12638,7 @@ matrices.")
     (properties `((upstream-name . "poRe")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bit64" ,r-bit64)
-       ("r-data-table" ,r-data-table)
-       ("r-rhdf5" ,r-rhdf5)
-       ("r-shiny" ,r-shiny)
-       ("r-svdialogs" ,r-svdialogs)))
+     (list r-bit64 r-data-table r-rhdf5 r-shiny r-svdialogs))
     (home-page "https://sourceforge.net/projects/rpore/")
     (synopsis "Visualize Nanopore sequencing data")
     (description
@@ -12223,15 +12665,15 @@ sequencing data.")
                   "0w8bsq5myiwkfhh83nm6is5ichiyvwa1axx2szvxnzq39x6knf66"))))
       (build-system r-build-system)
       (propagated-inputs
-       `(("r-annotationdbi" ,r-annotationdbi)
-         ("r-assertthat" ,r-assertthat)
-         ("r-biobase" ,r-biobase)
-         ("r-biocmanager" ,r-biocmanager)
-         ("r-digest" ,r-digest)
-         ("r-pkgmaker" ,r-pkgmaker)
-         ("r-plyr" ,r-plyr)
-         ("r-reshape2" ,r-reshape2)
-         ("r-stringr" ,r-stringr)))
+       (list r-annotationdbi
+             r-assertthat
+             r-biobase
+             r-biocmanager
+             r-digest
+             r-pkgmaker
+             r-plyr
+             r-reshape2
+             r-stringr))
       (home-page "https://github.com/renozao/xbioc/")
       (synopsis "Extra base functions for Bioconductor")
       (description "This package provides extra utility functions to perform
@@ -12256,12 +12698,12 @@ provided by Bioconductor packages.")
                   "128syf9v39gk0z3ip000qpsjbg6l1siyq6c8b0hz41dzg5achyb3"))))
       (build-system r-build-system)
       (propagated-inputs
-       `(("r-formula" ,r-formula)
-         ("r-ggplot2" ,r-ggplot2)
-         ("r-pkgmaker" ,r-pkgmaker)
-         ("r-plyr" ,r-plyr)
-         ("r-rngtools" ,r-rngtools)
-         ("r-scales" ,r-scales)))
+       (list r-formula
+             r-ggplot2
+             r-pkgmaker
+             r-plyr
+             r-rngtools
+             r-scales))
       (home-page "https://github.com/shenorrLab/csSAM/")
       (synopsis "Cell type-specific statistical analysis of microarray")
       (description "This package implements the method csSAM that computes
@@ -12287,23 +12729,23 @@ SAM.")
                   "1prw13wa20f7wlc3gkkls66n1kxz8d28qrb8icfqdwdnnv8w5qg8"))))
       (build-system r-build-system)
       (propagated-inputs
-       `(("r-abind" ,r-abind)
-         ("r-annotationdbi" ,r-annotationdbi)
-         ("r-biobase" ,r-biobase)
-         ("r-cssam" ,r-cssam)
-         ("r-dplyr" ,r-dplyr)
-         ("r-e1071" ,r-e1071)
-         ("r-edger" ,r-edger)
-         ("r-ggplot2" ,r-ggplot2)
-         ("r-nmf" ,r-nmf)
-         ("r-openxlsx" ,r-openxlsx)
-         ("r-pkgmaker" ,r-pkgmaker)
-         ("r-plyr" ,r-plyr)
-         ("r-preprocesscore" ,r-preprocesscore)
-         ("r-rngtools" ,r-rngtools)
-         ("r-scales" ,r-scales)
-         ("r-stringr" ,r-stringr)
-         ("r-xbioc" ,r-xbioc)))
+       (list r-abind
+             r-annotationdbi
+             r-biobase
+             r-cssam
+             r-dplyr
+             r-e1071
+             r-edger
+             r-ggplot2
+             r-nmf
+             r-openxlsx
+             r-pkgmaker
+             r-plyr
+             r-preprocesscore
+             r-rngtools
+             r-scales
+             r-stringr
+             r-xbioc))
       (home-page "https://github.com/shenorrLab/bseqsc")
       (synopsis "Deconvolution of bulk sequencing experiments using single cell data")
       (description "BSeq-sc is a bioinformatics analysis pipeline that
@@ -12367,13 +12809,10 @@ Barcoding Kit or Rapid Barcoding Kit.")
       ;; requires python >=2.7, <3.0, and the same for python dependencies
       (arguments `(#:python ,python-2))
       (inputs
-       `(("hdf5" ,hdf5)))
+       (list hdf5))
       (propagated-inputs
-       `(("python-dateutil" ,python2-dateutil)
-         ("python-h5py" ,python2-h5py)
-         ("python-matplotlib" ,python2-matplotlib)
-         ("python-pandas" ,python2-pandas)
-         ("python-seaborn" ,python2-seaborn)))
+       (list python2-dateutil python2-h5py python2-matplotlib
+             python2-pandas python2-seaborn))
       (home-page "https://poretools.readthedocs.io")
       (synopsis "Toolkit for working with nanopore sequencing data")
       (description
@@ -12441,14 +12880,14 @@ of the Hierarchical Data Format (HDF5) standard.")
                 (list "JAMM.sh" "SignalGenerator.sh")))
              #t)))))
     (inputs
-     `(("bash" ,bash)
-       ("coreutils" ,coreutils)
-       ("gawk" ,gawk)
-       ("perl" ,perl)
-       ("r-minimal" ,r-minimal)
-       ;;("r-parallel" ,r-parallel)
-       ("r-signal" ,r-signal)
-       ("r-mclust" ,r-mclust)))
+     (list bash
+           coreutils
+           gawk
+           perl
+           r-minimal
+           ;;("r-parallel" ,r-parallel)
+           r-signal
+           r-mclust))
     (home-page "https://github.com/mahmoudibrahim/JAMM")
     (synopsis "Peak finder for NGS datasets")
     (description
@@ -12461,17 +12900,18 @@ datasets.")
 (define-public ngless
   (package
     (name "ngless")
-    (version "1.1.0")
+    (version "1.3.0")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://gitlab.com/ngless/ngless.git")
+             (url "https://github.com/ngless-toolkit/ngless.git")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1wim8wpqyff080dfcazynrmjwqas38m24m0v350w245mmhrapdma"))))
+         "0pb9f6b0yk9p4cdwiym8r190q1bcdiwvc7i2s6rw54qgi8r3g6pj"))
+       (patches (search-patches "ngless-unliftio.patch"))))
     (build-system haskell-build-system)
     (arguments
      `(#:haddock? #f ; The haddock phase fails with: NGLess/CmdArgs.hs:20:1:
@@ -12502,83 +12942,109 @@ datasets.")
          (add-after 'install 'link-tools
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((bin (string-append (assoc-ref outputs "out") "/bin/")))
-               (symlink (string-append (assoc-ref inputs "prodigal")
-                                       "/bin/prodigal")
+               (symlink (search-input-file inputs "/bin/prodigal")
                         (string-append bin "ngless-" ,version "-prodigal"))
-               (symlink (string-append (assoc-ref inputs "minimap2")
-                                       "/bin/minimap2")
+               (symlink (search-input-file inputs "/bin/minimap2")
                         (string-append bin "ngless-" ,version "-minimap2"))
-               (symlink (string-append (assoc-ref inputs "samtools")
-                                       "/bin/samtools")
+               (symlink (search-input-file inputs "/bin/samtools")
                         (string-append bin "ngless-" ,version "-samtools"))
-               (symlink (string-append (assoc-ref inputs "bwa")
-                                       "/bin/bwa")
+               (symlink (search-input-file inputs "/bin/bwa")
                         (string-append bin "ngless-" ,version "-bwa"))
                #t))))))
     (inputs
-     `(("prodigal" ,prodigal)
-       ("bwa" ,bwa)
-       ("samtools" ,samtools)
-       ("minimap2" ,minimap2)
-       ("ghc-aeson" ,ghc-aeson)
-       ("ghc-ansi-terminal" ,ghc-ansi-terminal)
-       ("ghc-async" ,ghc-async)
-       ("ghc-atomic-write" ,ghc-atomic-write)
-       ("ghc-bytestring-lexing" ,ghc-bytestring-lexing)
-       ("ghc-conduit" ,ghc-conduit)
-       ("ghc-conduit-algorithms" ,ghc-conduit-algorithms)
-       ("ghc-conduit-extra" ,ghc-conduit-extra)
-       ("ghc-configurator" ,ghc-configurator)
-       ("ghc-convertible" ,ghc-convertible)
-       ("ghc-data-default" ,ghc-data-default)
-       ("ghc-diagrams-core" ,ghc-diagrams-core)
-       ("ghc-diagrams-lib" ,ghc-diagrams-lib)
-       ("ghc-diagrams-svg" ,ghc-diagrams-svg)
-       ("ghc-double-conversion" ,ghc-double-conversion)
-       ("ghc-edit-distance" ,ghc-edit-distance)
-       ("ghc-either" ,ghc-either)
-       ("ghc-errors" ,ghc-errors)
-       ("ghc-extra" ,ghc-extra)
-       ("ghc-filemanip" ,ghc-filemanip)
-       ("ghc-file-embed" ,ghc-file-embed)
-       ("ghc-gitrev" ,ghc-gitrev)
-       ("ghc-hashtables" ,ghc-hashtables)
-       ("ghc-http-conduit" ,ghc-http-conduit)
-       ("ghc-inline-c" ,ghc-inline-c)
-       ("ghc-inline-c-cpp" ,ghc-inline-c-cpp)
-       ("ghc-intervalmap" ,ghc-intervalmap)
-       ("ghc-missingh" ,ghc-missingh)
-       ("ghc-optparse-applicative" ,ghc-optparse-applicative)
-       ("ghc-regex" ,ghc-regex)
-       ("ghc-safe" ,ghc-safe)
-       ("ghc-safeio" ,ghc-safeio)
-       ("ghc-strict" ,ghc-strict)
-       ("ghc-tar" ,ghc-tar)
-       ("ghc-tar-conduit" ,ghc-tar-conduit)
-       ("ghc-unliftio" ,ghc-unliftio)
-       ("ghc-unliftio-core" ,ghc-unliftio-core)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-yaml" ,ghc-yaml)
-       ("ghc-zlib" ,ghc-zlib)))
+     (list prodigal
+           bwa
+           samtools
+           minimap2
+           ghc-aeson
+           ghc-ansi-terminal
+           ghc-async
+           ghc-atomic-write
+           ghc-bytestring-lexing
+           ghc-conduit
+           ghc-conduit-algorithms
+           ghc-conduit-extra
+           ghc-configurator
+           ghc-convertible
+           ghc-data-default
+           ghc-diagrams-core
+           ghc-diagrams-lib
+           ghc-diagrams-svg
+           ghc-double-conversion
+           ghc-edit-distance
+           ghc-either
+           ghc-errors
+           ghc-extra
+           ghc-filemanip
+           ghc-file-embed
+           ghc-gitrev
+           ghc-hashtables
+           ghc-http-conduit
+           ghc-inline-c
+           ghc-inline-c-cpp
+           ghc-int-interval-map
+           ghc-missingh
+           ghc-optparse-applicative
+           ghc-regex
+           ghc-safe
+           ghc-safeio
+           ghc-strict
+           ghc-tar
+           ghc-tar-conduit
+           ghc-unliftio
+           ghc-unliftio-core
+           ghc-vector
+           ghc-yaml
+           ghc-zlib))
     (propagated-inputs
-     `(("r-r6" ,r-r6)
-       ("r-hdf5r" ,r-hdf5r)
-       ("r-iterators" ,r-iterators)
-       ("r-itertools" ,r-itertools)
-       ("r-matrix" ,r-matrix)))
-    (native-inputs
-     `(("ghc-hpack" ,ghc-hpack)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit",ghc-test-framework-hunit)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
-       ("ghc-test-framework-th" ,ghc-test-framework-th)))
-    (home-page "https://gitlab.com/ngless/ngless")
+     (list r-r6 r-hdf5r r-iterators r-itertools r-matrix))
+    (native-inputs
+     (list ghc-hpack
+           ghc-quickcheck
+           ghc-test-framework
+           ghc-test-framework-hunit
+           ghc-test-framework-quickcheck2
+           ghc-test-framework-th))
+    (home-page "https://ngless.embl.de/")
     (synopsis "DSL for processing next-generation sequencing data")
     (description "Ngless is a domain-specific language for
 @dfn{next-generation sequencing} (NGS) data processing.")
     (license license:expat)))
 
+(define-public ghc-int-interval-map
+  (let ((commit "678763de7fe6d7fa3f1c44b32d18ce58670270f4")
+        (revision "1"))
+    (package
+      (name "ghc-int-interval-map")
+      (version "0.0.0.0")
+      (source
+        (origin
+           (method git-fetch)
+           (uri (git-reference
+                 (url "https://github.com/ngless-toolkit/interval-to-int.git")
+                 (commit commit)))
+           (file-name (git-file-name name version))
+          (sha256 (base32 "0fd728b5if89vj5j4f9y7k0b2xv2ycz5a21iy15wbdcf5bhim7i8"))))
+      (build-system haskell-build-system)
+      (inputs
+        (list ghc-either ghc-primitive ghc-vector ghc-vector-algorithms))
+      (native-inputs
+        (list ghc-hedgehog
+              ghc-tasty
+              ghc-tasty-hedgehog
+              ghc-tasty-hunit
+              ghc-tasty-quickcheck
+              ghc-tasty-th))
+      (home-page "https://github.com/luispedro/interval-to-int#readme")
+      (synopsis "Interval map structure in Haskell")
+      (description "An interval map structure that is optimized for low
+memory (each interval is represented by about 3 words + whatever the
+cargo is) and has semantics that are appropriate for genomic intervals
+(namely, intervals can overlap and queries will return all matches
+together). It also designed to be used in two phases: a construction
+phase + query phase).")
+      (license license:expat))))
+
 (define-public filtlong
   ;; The recommended way to install is to clone the git repository
   ;; https://github.com/rrwick/Filtlong#installation
@@ -12615,10 +13081,10 @@ datasets.")
            (add-after 'install 'wrap-program
              (lambda* (#:key inputs outputs #:allow-other-keys)
                (let* ((out (assoc-ref outputs "out"))
-                      (path (getenv "PYTHONPATH")))
+                      (path (getenv "GUIX_PYTHONPATH")))
                  (wrap-program (string-append out
                                               "/share/filtlong/scripts/histogram.py")
-                   `("PYTHONPATH" ":" prefix (,path))))
+                   `("GUIX_PYTHONPATH" ":" prefix (,path))))
                #t))
            (add-before 'check 'patch-tests
              (lambda _
@@ -12674,10 +13140,9 @@ choosing which reads pass the filter.")
            (add-after 'unpack 'find-eigen
              (lambda* (#:key inputs #:allow-other-keys)
                (setenv "CPATH"
-                       (string-append (assoc-ref inputs "eigen")
-                                      "/include/eigen3:"
-                                      (or (getenv "CPATH") "")))
-               #t))
+                       (string-append
+                        (search-input-directory inputs "/include/eigen3")
+                        ":" (or (getenv "CPATH") "")))))
            (delete 'configure)
            (replace 'install
              (lambda* (#:key outputs #:allow-other-keys)
@@ -12690,16 +13155,18 @@ choosing which reads pass the filter.")
                            (find-files "scripts" ".*"))
                  #t)))
            (add-after 'install 'wrap-programs
-             (lambda* (#:key outputs #:allow-other-keys)
-               (let ((pythonpath (getenv "PYTHONPATH"))
+             (lambda* (#:key inputs outputs #:allow-other-keys)
+               (let ((pythonpath (getenv "GUIX_PYTHONPATH"))
                      (perl5lib (getenv "PERL5LIB"))
                      (scripts (string-append (assoc-ref outputs "out")
-                                             "/share/nanopolish/scripts")))
+                                             "/share/nanopolish/scripts"))
+                     (guile (search-input-file inputs "bin/guile")))
                  (for-each (lambda (file)
-                             (wrap-program file `("PYTHONPATH" ":" prefix (,pythonpath))))
+                             (wrap-program file `("GUIX_PYTHONPATH" ":" prefix (,pythonpath))))
                            (find-files scripts "\\.py"))
                  (for-each (lambda (file)
-                             (wrap-script file `("PERL5LIB" ":" prefix (,perl5lib))))
+                             (wrap-script file #:guile guile
+                                          `("PERL5LIB" ":" prefix (,perl5lib))))
                            (find-files scripts "\\.pl"))))))))
       (inputs
        `(("guile" ,guile-3.0) ; for wrappers
@@ -12740,17 +13207,17 @@ polymorphisms) and indels with respect to a reference genome and more.")
         (base32 "0g2f78k68yglmj4fsfmgs8idqv3di9aj53fg0ld0hqljg8chhh82"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-biopython" ,python-biopython)
-       ("python-future" ,python-future)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-numpy" ,python-numpy)
-       ("python-reportlab" ,python-reportlab)
-       ("python-pandas" ,python-pandas)
-       ("python-pysam" ,python-pysam)
-       ("python-pyfaidx" ,python-pyfaidx)
-       ("python-scipy" ,python-scipy)
-       ;; R packages
-       ("r-dnacopy" ,r-dnacopy)))
+     (list python-biopython
+           python-future
+           python-matplotlib
+           python-numpy
+           python-reportlab
+           python-pandas
+           python-pysam
+           python-pyfaidx
+           python-scipy
+           ;; R packages
+           r-dnacopy))
     (home-page "https://cnvkit.readthedocs.org/")
     (synopsis "Copy number variant detection from targeted DNA sequencing")
     (description
@@ -12764,7 +13231,7 @@ Torrent.")
 (define-public python-pyfit-sne
   (package
     (name "python-pyfit-sne")
-    (version "1.0.1")
+    (version "1.2.1")
     (source
      (origin
        (method git-fetch)
@@ -12773,14 +13240,15 @@ Torrent.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "13wh3qkzs56azmmgnxib6xfr29g7xh09sxylzjpni5j0pp0rc5qw"))))
+        (base32 "0f3n7wcmxbnqiisgimhpa6p5chqpb1hj69i6rpg2hv2671i8nn68"))))
     (build-system python-build-system)
+    (arguments '(#:tests? #false)) ; there are none
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (inputs
-     `(("fftw" ,fftw)))
+     (list fftw))
     (native-inputs
-     `(("python-cython" ,python-cython)))
+     (list python-cython))
     (home-page "https://github.com/KlugerLab/pyFIt-SNE")
     (synopsis "FFT-accelerated Interpolation-based t-SNE")
     (description
@@ -12807,9 +13275,9 @@ is a Cython wrapper for FIt-SNE.")
      `(#:build-target "dist"
        #:tests? #f ; there are none
        #:make-flags
-       (list (string-append "-Dmpijar="
-                            (assoc-ref %build-inputs "java-openmpi")
-                            "/lib/mpi.jar"))
+       ,#~(list (string-append "-Dmpijar="
+                               #$(this-package-input "java-openmpi")
+                               "/lib/mpi.jar"))
        #:modules ((guix build ant-build-system)
                   (guix build utils)
                   (guix build java-utils))
@@ -12849,10 +13317,8 @@ is a Cython wrapper for FIt-SNE.")
              #t)))
        #:jdk ,openjdk11))
     (inputs
-     `(("gawk" ,gawk)
-       ("java-eclipse-jdt-core" ,java-eclipse-jdt-core)
-       ("java-eclipse-jdt-compiler-apt" ,java-eclipse-jdt-compiler-apt)
-       ("java-openmpi" ,java-openmpi)))
+     (list gawk java-eclipse-jdt-core java-eclipse-jdt-compiler-apt
+           java-openmpi))
     (home-page "https://sourceforge.net/projects/bbmap/")
     (synopsis "Aligner and other tools for short sequencing reads")
     (description
@@ -12883,8 +13349,7 @@ to an artifact/contaminant file.")
               (snippet
                '(begin
                   (delete-file "Manual.pdf")
-                  (delete-file-recursively "third-party")
-                  #t))))
+                  (delete-file-recursively "third-party")))))
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags '("OPENMP=t")
@@ -12895,8 +13360,7 @@ to an artifact/contaminant file.")
          (add-after 'unpack 'fix-zlib-include
            (lambda _
              (substitute* "src/binarySequences.c"
-               (("../third-party/zlib-1.2.3/zlib.h") "zlib.h"))
-             #t))
+               (("../third-party/zlib-1.2.3/zlib.h") "zlib.h"))))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -12907,14 +13371,13 @@ to an artifact/contaminant file.")
                (install-file "velveth" bin)
                (install-file "velvetg" bin)
                (install-file "Manual.pdf" doc)
-               (install-file "Columbus_manual.pdf" doc)
-               #t))))))
+               (install-file "Columbus_manual.pdf" doc)))))))
     (inputs
-     `(("openmpi" ,openmpi)
-       ("zlib" ,zlib)))
+     (list openmpi zlib))
     (native-inputs
-     `(("texlive" ,(texlive-union (list texlive-latex-graphics
-                                        texlive-latex-hyperref)))))
+     `(("texlive" ,(texlive-updmap.cfg (list texlive-latex-graphics
+                                             texlive-fonts-ec
+                                             texlive-hyperref)))))
     (home-page "https://www.ebi.ac.uk/~zerbino/velvet/")
     (synopsis "Nucleic acid sequence assembler for very short reads")
     (description
@@ -12935,22 +13398,26 @@ repeated areas between contigs.")
        (uri (pypi-uri "velocyto" version))
        (sha256
         (base32
-         "0fgygyzqgrq32dv6a00biq1p1cwi6kbl5iqblxq1kklj6b2mzmhs"))))
+         "0fgygyzqgrq32dv6a00biq1p1cwi6kbl5iqblxq1kklj6b2mzmhs"))
+       (modules '((guix build utils)))
+       ;; Delete generated C files.
+       (snippet
+        '(for-each delete-file (find-files "." "\\.c")))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-joblib" ,python-joblib)))
+     (list python-joblib))
     (propagated-inputs
-     `(("python-click" ,python-click)
-       ("python-cython" ,python-cython)
-       ("python-h5py" ,python-h5py)
-       ("python-loompy" ,python-loompy)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-numba" ,python-numba)
-       ("python-numpy" ,python-numpy)
-       ("python-pandas" ,python-pandas)
-       ("python-pysam" ,python-pysam)
-       ("python-scikit-learn" ,python-scikit-learn)
-       ("python-scipy" ,python-scipy)))
+     (list python-click
+           python-cython
+           python-h5py
+           python-loompy
+           python-matplotlib
+           python-numba
+           python-numpy
+           python-pandas
+           python-pysam
+           python-scikit-learn
+           python-scipy))
     (home-page "https://github.com/velocyto-team/velocyto.py")
     (synopsis "RNA velocity analysis for single cell RNA-seq data")
     (description
@@ -13002,16 +13469,16 @@ includes a command line tool and an analysis pipeline.")
                  `("R_LIBS_SITE" ":" prefix (,(getenv "R_LIBS_SITE")))))
              #t)))))
     (inputs
-     `(("htslib" ,htslib)
-       ("r-minimal" ,r-minimal)
-       ("r-circlize" ,r-circlize)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-genomicranges" ,r-genomicranges)
-       ("samtools" ,samtools)
-       ("star" ,star)
-       ("zlib" ,zlib)))
+     (list htslib
+           r-minimal
+           r-circlize
+           r-genomicalignments
+           r-genomicranges
+           samtools
+           star
+           zlib))
     (home-page "https://github.com/suhrig/arriba")
-    (synopsis "Gene fusion detection from RNA-Seq data ")
+    (synopsis "Gene fusion detection from RNA-Seq data")
     (description
      "Arriba is a command-line tool for the detection of gene fusions from
 RNA-Seq data.  It was developed for the use in a clinical research setting.
@@ -13040,15 +13507,15 @@ tools which build on STAR, Arriba does not require to reduce the
          "1nf3ki5pfzalhrx2fr1y6pfqfi133yj2m7q4fj9irf5fb94bapwr"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:make-flags (list "COLOR_BUILD=no"
-                          (string-append "PREFIX="
-                                         (assoc-ref %outputs "out")))
+     `(#:make-flags
+       ,#~(list "COLOR_BUILD=no"
+                (string-append "PREFIX=" #$output))
        #:test-target "test"
        #:phases
        (modify-phases %standard-phases
          (delete 'configure))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "https://adapterremoval.readthedocs.io/")
     (synopsis "Rapid sequence adapter trimming, identification, and read merging")
     (description
@@ -13152,7 +13619,7 @@ let before_space s =
        #:findlib ,ocaml4.07-findlib))
       (inputs
        `(("zlib" ,zlib "static")
-         ("gsl" ,gsl)
+         ("gsl" ,gsl-static)
          ("ocaml-ounit" ,(package-with-ocaml4.07 ocaml-ounit))
          ("ocaml-batteries" ,(package-with-ocaml4.07 ocaml-batteries))
          ("ocaml-camlzip" ,(package-with-ocaml4.07 camlzip))
@@ -13160,13 +13627,14 @@ let before_space s =
          ("ocaml-sqlite3" ,(package-with-ocaml4.07 ocaml-sqlite3))
          ("ocaml-xmlm" ,(package-with-ocaml4.07 ocaml-xmlm))
          ("ocaml-mcl" ,(package-with-ocaml4.07 ocaml-mcl))
-         ("ocaml-gsl" ,ocaml4.07-gsl-1)))
+         ("ocaml-gsl" ,ocaml4.07-gsl-1)
+         ("sqlite:static" ,sqlite "static")))
       (native-inputs
        `(("cddlib-src" ,(package-source cddlib))
          ("ocamlbuild" ,(package-with-ocaml4.07 ocamlbuild))
          ("pkg-config" ,pkg-config)))
       (propagated-inputs
-       `(("pplacer-scripts" ,pplacer-scripts)))
+       (list pplacer-scripts))
       (synopsis "Phylogenetic placement of biological sequences")
       (description
        "Pplacer places query sequences on a fixed reference phylogenetic tree
@@ -13236,11 +13704,8 @@ downstream analysis.")
            (lambda _
              (setenv "HOME" "/tmp"))))))
     (inputs
-     `(("python-dendropy" ,python-dendropy)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-numpy" ,python-numpy)
-       ("python-pysam" ,python-pysam)
-       ("python-scipy" ,python-scipy)))
+     (list python-dendropy python-matplotlib python-numpy python-pysam
+           python-scipy))
     (home-page "https://ecogenomics.github.io/CheckM/")
     (synopsis "Assess the quality of putative genome bins")
     (description
@@ -13272,14 +13737,14 @@ proximity within a reference genome.")
          "08y3vz1vcx09whmbsn722lcs6jl9wyrh9i4p3k8j4cb1i32bij4a"))))
     (build-system python-build-system)
     (inputs
-     `(("python-pandas" ,python-pandas)
-       ("python-future" ,python-future)
-       ("python-scipy" ,python-scipy)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-regex" ,python-regex)
-       ("python-pysam" ,python-pysam)))
+     (list python-pandas
+           python-future
+           python-scipy
+           python-matplotlib
+           python-regex
+           python-pysam))
     (native-inputs
-     `(("python-cython" ,python-cython)))
+     (list python-cython))
     (home-page "https://github.com/CGATOxford/UMI-tools")
     (synopsis "Tools for analyzing unique modular identifiers")
     (description "This package provides tools for dealing with @dfn{Unique
@@ -13309,22 +13774,19 @@ on the needs of the user.")
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags
-       (list (string-append "prefix=" (assoc-ref %outputs "out"))
-             (string-append "BOOST_ROOT="
-                            (assoc-ref %build-inputs "boost"))
-             (string-append "HTSLIB_ROOT="
-                            (assoc-ref %build-inputs "htslib")))
+       ,#~(list (string-append "prefix=" #$output)
+                (string-append "BOOST_ROOT="
+                               #$(this-package-input "boost"))
+                (string-append "HTSLIB_ROOT="
+                               #$(this-package-input "htslib")))
        #:test-target "test"
        #:phases
        (modify-phases %standard-phases
          (delete 'configure))))
     (inputs
-     `(("boost" ,boost)
-       ("htslib" ,htslib)
-       ("ncurses" ,ncurses)
-       ("zlib" ,zlib)))
+     (list boost htslib ncurses zlib))
     (native-inputs
-     `(("lcov" ,lcov)))
+     (list lcov))
     (home-page "https://github.com/ParkerLab/ataqv")
     (synopsis "Toolkit for quality control and visualization of ATAC-seq data")
     (description "This package provides a toolkit for measuring and comparing
@@ -13348,13 +13810,13 @@ might be caused by ATAC-seq library prep or sequencing.  The main program,
         (base32 "08438h16cfry5kqh3y9hs8q1b1a8bxhblsm75knviz5r6q0n1jxh"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mass" ,r-mass)
-       ("r-dplyr" ,r-dplyr)
-       ("r-tidyr" ,r-tidyr)
-       ("r-purrr" ,r-purrr)
-       ("r-readr" ,r-readr)
-       ("r-magrittr" ,r-magrittr)
-       ("r-ggplot2" ,r-ggplot2)))
+     (list r-mass
+           r-dplyr
+           r-tidyr
+           r-purrr
+           r-readr
+           r-magrittr
+           r-ggplot2))
     (home-page "https://github.com/kcha/psiplot")
     (synopsis "Plot percent spliced-in values of alternatively-spliced exons")
     (description
@@ -13364,10 +13826,47 @@ vast-tools, an RNA-Seq pipeline for alternative splicing analysis.  The plots
 are generated using @code{ggplot2}.")
     (license license:expat)))
 
+(define-public vbz-compression
+  (package
+    (name "vbz-compression")
+    (version "1.0.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/nanoporetech/vbz_compression/")
+             (commit (string-append "v" version))
+             ;; We include the streamvbyte sources
+             (recursive? #true)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1c6wsrnw03vsc5cfp2rdakly5xy55m9chjmy6v685yapdwirdky0"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:configure-flags
+       '("-DENABLE_CONAN=OFF"
+         ;; Python things aren't even installed, so we might as well
+         ;; disable building them.
+         "-DENABLE_PYTHON=OFF")))
+    (inputs
+     (list ;("hdf5" ,hdf5-1.10)
+           `(,zstd "lib")))
+    (native-inputs
+     (list googlebenchmark))
+    (home-page "https://github.com/nanoporetech/vbz_compression/")
+    (synopsis "VBZ compression plugin for nanopore signal data")
+    (description
+     "VBZ Compression uses variable byte integer encoding to compress
+nanopore signal data.  The performance of VBZ is achieved by taking
+advantage of the properties of the raw signal and therefore is most
+effective when applied to the signal dataset.")
+    (license license:mpl2.0)))
+
 (define-public python-ont-fast5-api
   (package
     (name "python-ont-fast5-api")
-    (version "1.4.4")
+    (version "4.0.0")
     (source
      (origin
        (method git-fetch)
@@ -13377,13 +13876,25 @@ are generated using @code{ggplot2}.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "03cbq4zbbwhll8ml2m9k8sa31mirsvcbjkrq1yna0kkzz9fad5fm"))))
+         "01hj4751j424lzic2sc4bz1f8w7i7fpkjpy3rgghdyl5lyfyb4s4"))
+       (modules '((guix build utils)))
+       (snippet
+        '(delete-file-recursively "ont_fast5_api/vbz_plugin"))))
     (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'copy-plugin
+           (lambda* (#:key inputs #:allow-other-keys)
+             (mkdir-p "ont_fast5_api/vbz_plugin/")
+             (install-file (string-append
+                            (assoc-ref inputs "vbz-compression")
+                            "/hdf5/lib/plugin/libvbz_hdf_plugin.so")
+                           "ont_fast5_api/vbz_plugin/"))))))
+    (inputs
+     (list vbz-compression))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-six" ,python-six)
-       ("python-h5py" ,python-h5py)
-       ("python-progressbar33" ,python-progressbar33)))
+     (list python-numpy python-h5py python-packaging python-progressbar33))
     (home-page "https://github.com/nanoporetech/ont_fast5_api")
     (synopsis "Interface to HDF5 files of the Oxford Nanopore fast5 file format")
     (description
@@ -13394,8 +13905,8 @@ and reflect the fast5 file schema, and tools to convert between
     (license license:mpl2.0)))
 
 (define-public tbsp
-  (let ((commit "ec8fff4410cfb13a677dbbb95cbbc60217e64907")
-        (revision "1"))
+  (let ((commit "dc30c03868233c5504299c9cb0d7b2064ba9cb41")
+        (revision "2"))
     (package
       (name "tbsp")
       (version (git-version "1.0.0" revision commit))
@@ -13408,17 +13919,24 @@ and reflect the fast5 file schema, and tools to convert between
          (file-name (git-file-name name version))
          (sha256
           (base32
-           "025ym14x8gbd6hb55lsinqj6f5qzw36i10klgs7ldzxxd7s39ki1"))))
+           "1im0bik2hxkcb7jzkcxp5nqb30hd8lfraxml6i5ik52j6z3qqln1"))))
       (build-system python-build-system)
-      (arguments '(#:tests? #f))        ; no tests included
+      (arguments
+       '(#:tests? #f         ; no tests included
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'relax-requirements
+             (lambda _
+               (substitute* "setup.py"
+                 ((", <3.0") ""))))))) ; matplotlib
       (inputs
-       `(("python-matplotlib" ,python-matplotlib)
-         ("python-networkx" ,python-networkx)
-         ("python-numpy" ,python-numpy)
-         ("python-pybigwig" ,python-pybigwig)
-         ("python-biopython" ,python-biopython)
-         ("python-scikit-learn" ,python-scikit-learn)
-         ("python-scipy" ,python-scipy)))
+       (list python-matplotlib
+             python-networkx
+             python-numpy
+             python-pybigwig
+             python-biopython-1.73
+             python-scikit-learn
+             python-scipy))
       (home-page "https://github.com/phoenixding/tbsp/")
       (synopsis "SNP-based trajectory inference")
       (description
@@ -13449,8 +13967,7 @@ mutations from scRNA-Seq data.")
          (delete-file-recursively "htslib") #t))))
    (build-system gnu-build-system)
    (inputs
-    `(("htslib" ,htslib)
-      ("zlib" ,zlib)))
+    (list htslib zlib))
    (arguments
     `(#:tests? #f ; There are no tests to run.
       #:phases
@@ -13624,8 +14141,9 @@ combinatorial configurations.\", G. Ehrlich - Journal of the ACM (JACM),
            (replace 'install
              (lambda* (#:key outputs #:allow-other-keys)
                (let ((bin (string-append (assoc-ref outputs "out") "/bin")))
-                 (install-file "fsom" bin))
-               #t)))))
+                 (install-file "fsom" bin)))))))
+      (native-inputs
+       (list gcc-6))
       (home-page "https://github.com/ekg/fsom")
       (synopsis "Manage SOM (Self-Organizing Maps) neural networks")
       (description "A tiny C library for managing SOM (Self-Organizing Maps)
@@ -13736,15 +14254,15 @@ library automatically handles index file generation and use.")
            #t))))
     (build-system cmake-build-system)
     (inputs
-     `(("bzip2" ,bzip2)
-       ("htslib" ,htslib)
-       ("fastahack" ,fastahack)
-       ("perl" ,perl)
-       ("python" ,python)
-       ("smithwaterman" ,smithwaterman)
-       ("tabixpp" ,tabixpp)
-       ("xz" ,xz)
-       ("zlib" ,zlib)))
+     (list bzip2
+           htslib
+           fastahack
+           perl
+           python
+           smithwaterman
+           tabixpp
+           xz
+           zlib))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ;; Submodules.
@@ -13829,11 +14347,7 @@ manipulations on VCF files.")
                   #t))))
     (build-system meson-build-system)
     (inputs
-     `(("fastahack" ,fastahack)
-       ("htslib" ,htslib)
-       ("smithwaterman" ,smithwaterman)
-       ("tabixpp" ,tabixpp)
-       ("vcflib" ,vcflib)))
+     (list fastahack htslib smithwaterman tabixpp vcflib))
     (native-inputs
      `(("bash-tap" ,bash-tap)
        ("bc" ,bc)
@@ -13950,24 +14464,24 @@ pairs.")
            "16wqf70j7rd7pay2q513iyz12i8n9vrpg1bisah4lddbcpx5dz1n"))))
       (build-system r-build-system)
       (inputs
-       `(("boost" ,boost)))
+       (list boost))
       (propagated-inputs
-       `(("r-hdf5r" ,r-hdf5r)
-         ("r-mass" ,r-mass)
-         ("r-mgcv" ,r-mgcv)
-         ("r-pcamethods" ,r-pcamethods)
-         ("r-rcpp" ,r-rcpp)
-         ("r-rcpparmadillo" ,r-rcpparmadillo)
-         ;; Suggested packages
-         ("r-rtsne" ,r-rtsne)
-         ("r-cluster" ,r-cluster)
-         ("r-abind" ,r-abind)
-         ("r-h5" ,r-h5)
-         ("r-biocgenerics" ,r-biocgenerics)
-         ("r-genomicalignments" ,r-genomicalignments)
-         ("r-rsamtools" ,r-rsamtools)
-         ("r-edger" ,r-edger)
-         ("r-igraph" ,r-igraph)))
+       (list r-hdf5r
+             r-mass
+             r-mgcv
+             r-pcamethods
+             r-rcpp
+             r-rcpparmadillo
+             ;; Suggested packages
+             r-rtsne
+             r-cluster
+             r-abind
+             r-h5
+             r-biocgenerics
+             r-genomicalignments
+             r-rsamtools
+             r-edger
+             r-igraph))
       (home-page "https://velocyto.org")
       (synopsis "RNA velocity estimation in R")
       (description
@@ -13993,9 +14507,9 @@ patterns.")
     (arguments
      `(#:test-target "test"
        #:make-flags
-       (list "CC=gcc"
-             (string-append "prefix="
-                            (assoc-ref %outputs "out") "/bin/"))
+       ,#~(list "CC=gcc"
+                "CFLAGS=-fcommon"
+                (string-append "prefix=" #$output "/bin/"))
        #:phases
        (modify-phases %standard-phases
          (replace 'configure
@@ -14003,13 +14517,10 @@ patterns.")
              (substitute* "Makefile"
                (("-lhts ") "-lhts -lBigWig ")
                (("install MethylDackel \\$\\(prefix\\)" match)
-                (string-append "install -d $(prefix); " match)))
-             #t)))))
+                (string-append "install -d $(prefix); " match))))))))
     (inputs
-     `(("curl" ,curl) ; XXX: needed by libbigwig
-       ("htslib" ,htslib-1.9)
-       ("libbigwig" ,libbigwig)
-       ("zlib" ,zlib)))
+     (list curl ; XXX: needed by libbigwig
+           htslib-1.9 libbigwig zlib))
     ;; Needed for tests
     (native-inputs
      `(("python" ,python-wrapper)))
@@ -14041,8 +14552,8 @@ containing the reference genome as well.")
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags
-       (list "CC=gcc"
-             (string-append "DESTDIR=" (assoc-ref %outputs "out")))
+       ,#~(list "CC=gcc"
+                (string-append "DESTDIR=" #$output))
        #:phases
        (modify-phases %standard-phases
          (replace 'configure
@@ -14079,9 +14590,9 @@ containing the reference genome as well.")
              ;; unknown reasons.
              (invoke "make" "-C" "test" "msa_view"))))))
     (inputs
-     `(("clapack" ,clapack)))
+     (list clapack))
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (home-page "http://compgen.cshl.edu/phast/")
     (synopsis "Phylogenetic analysis with space/time models")
     (description
@@ -14126,15 +14637,15 @@ alignments, trees and genomic annotations.")
                          (find-files "." "\\.gz"))
                #t)))))
       (propagated-inputs
-       `(("python-argcomplete" ,python-argcomplete)
-         ("python-argh" ,python-argh)
-         ("python-biopython" ,python-biopython)
-         ("python-pybedtools" ,python-pybedtools)
-         ("python-pyfaidx" ,python-pyfaidx)
-         ("python-simplejson" ,python-simplejson)
-         ("python-six" ,python-six)))
+       (list python-argcomplete
+             python-argh
+             python-biopython
+             python-pybedtools
+             python-pyfaidx
+             python-simplejson
+             python-six))
       (native-inputs
-       `(("python-nose" , python-nose)))
+       (list python-nose))
       (home-page "https://github.com/daler/gffutils")
       (synopsis "Tool for manipulation of GFF and GTF files")
       (description
@@ -14167,7 +14678,7 @@ than is possible with plain-text methods alone.")
      `(("java-commons-lang2" ,java-commons-lang)
        ("java-args4j" ,java-args4j)))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://github.com/cbg-ethz/InDelFixer/")
     (synopsis "Iterative and sensitive NGS sequence aligner")
     (description "InDelFixer is a sensitive aligner for 454, Illumina and
@@ -14196,18 +14707,17 @@ The output is in SAM format.")
     (arguments
      `(#:test-target "test"
        #:configure-flags
-       (list "-DWITH_CHECK=ON"
-             (string-append "-DLIBXML_LIBRARY="
-                            (assoc-ref %build-inputs "libxml2")
-                            "/lib/libxml2.so")
-             (string-append "-DLIBXML_INCLUDE_DIR="
-                            (assoc-ref %build-inputs "libxml2")
-                            "/include/libxml2"))))
+       ,#~(list "-DWITH_CHECK=ON"
+                (string-append "-DLIBXML_LIBRARY="
+                               #$(this-package-input "libxml2")
+                               "/lib/libxml2.so")
+                (string-append "-DLIBXML_INCLUDE_DIR="
+                               #$(this-package-input "libxml2")
+                               "/include/libxml2"))))
     (propagated-inputs
-     `(("libxml2" ,libxml2)))
+     (list libxml2))
     (native-inputs
-     `(("check" ,check-0.14)
-       ("swig" ,swig)))
+     (list check-0.14 swig))
     (home-page "http://sbml.org/Software/libSBML")
     (synopsis "Process SBML files and data streams")
     (description "LibSBML is a library to help you read, write, manipulate,
@@ -14234,9 +14744,9 @@ international community.")
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #false                  ; there are none
-       #:make-flags (list "-C" "src"
-                          (string-append "KRAKEN2_DIR="
-                                         (assoc-ref %outputs "out") "/bin"))
+       #:make-flags
+       ,#~(list "-C" "src"
+                (string-append "KRAKEN2_DIR=" #$output "/bin"))
        #:phases
        (modify-phases %standard-phases
          (delete 'configure)
@@ -14292,12 +14802,12 @@ international community.")
                                (install-file script bin))
                              scripts)))))))))
     (inputs
-     `(("gzip" ,gzip)
-       ("perl" ,perl)
-       ("rsync" ,rsync)
-       ("sed" ,sed)
-       ("wget" ,wget)
-       ("which" ,which)))
+     (list gzip
+           perl
+           rsync
+           sed
+           wget
+           which))
   (home-page "https://github.com/DerrickWood/kraken2")
   (synopsis "Taxonomic sequence classification system")
   (description "Kraken is a taxonomic sequence classifier that assigns
@@ -14329,11 +14839,9 @@ genomes known to contain a given k-mer.")
        ("python" ,python-wrapper)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("which" ,which)))
+     (list autoconf automake which))
     (home-page "https://csb5.github.io/lofreq/")
-    (synopsis "Sensitive variant calling from sequencing data ")
+    (synopsis "Sensitive variant calling from sequencing data")
     (description "LoFreq is a fast and sensitive variant-caller for inferring
 SNVs and indels from next-generation sequencing data.  It makes full use of
 base-call qualities and other sources of errors inherent in
@@ -14355,16 +14863,15 @@ usually ignored by other methods or only used for filtering.")
                (base32
                 "044xa0hm3b8fga64csrdx05ih8w7kwmvcdrdrhkg8j11ml4bi4xv"))))
     (build-system gnu-build-system)
+    (arguments `(#:parallel-tests? #false)) ; not supported
     (inputs
-     `(("htslib" ,htslib)
-       ("zlib" ,zlib)))
+     (list htslib zlib))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (home-page "https://andersen-lab.github.io/ivar/html/")
     (synopsis "Tools for amplicon-based sequencing")
     (description "iVar is a computational package that contains functions
-broadly useful for viral amplicon-based sequencing. ")
+broadly useful for viral amplicon-based sequencing.")
     (license license:gpl3+)))
 
 (define-public python-pyliftover
@@ -14384,7 +14891,7 @@ broadly useful for viral amplicon-based sequencing. ")
     (build-system python-build-system)
     (arguments `(#:tests? #false)) ; the tests access the web
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/konstantint/pyliftover")
     (synopsis "Python implementation of UCSC liftOver genome coordinate conversion")
     (description
@@ -14431,15 +14938,15 @@ coordinates between different assemblies.")
        ("hostname" ,inetutils)
        ("openssl" ,openssl)))
     (inputs
-     `(("time" ,time)))
+     (list time))
     (propagated-inputs
-     `(("python-apsw" ,python-apsw)
-       ("python-gevent" ,python-gevent)
-       ("python-pandas" ,python-pandas)
-       ("python-paramiko" ,python-paramiko)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-ruffus" ,python-ruffus)
-       ("python-sqlalchemy" ,python-sqlalchemy)))
+     (list python-apsw
+           python-gevent
+           python-pandas
+           python-paramiko
+           python-pyyaml
+           python-ruffus
+           python-sqlalchemy))
     (home-page "https://github.com/cgat-developers/cgat-core")
     (synopsis "Computational genomics analysis toolkit")
     (description
@@ -14522,7 +15029,7 @@ large-scale data-analysis.")
                                 (string-append ":" out
                                                "/lib/perl5/site_perl"))
                            pl)
-                 (for-each (cut wrap <> "PYTHONPATH") py))))))))
+                 (for-each (cut wrap <> "GUIX_PYTHONPATH") py))))))))
     (inputs
      `(("libgd" ,gd)
        ("perl-gd" ,perl-gd)
@@ -14535,7 +15042,7 @@ large-scale data-analysis.")
        ("python-scikit-learn" ,python-scikit-learn)
        ("r-minimal" ,r-minimal)))
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (home-page "https://github.com/dekkerlab/cworld-dekker")
     (synopsis "Utility and analysis scripts for 3C, 4C, 5C, and Hi-C data")
     (description "This package is a collection of Perl, Python, and R
@@ -14651,16 +15158,16 @@ my @test_files = map {\"$dirname\\/t\\/\".$_} grep {!/^\\./ && /\\.t$/} readdir
 runtests(@test_files);
 "))))))))
       (inputs
-       `(("bioperl-minimal" ,bioperl-minimal)
-         ("perl-bio-db-hts" ,perl-bio-db-hts)
-         ("perl-dbi" ,perl-dbi)
-         ("perl-dbd-mysql" ,perl-dbd-mysql)
-         ("perl-libwww" ,perl-libwww)
-         ("perl-http-tiny" ,perl-http-tiny)
-         ("perl-json" ,perl-json)
-         ("which" ,which)))
+       (list bioperl-minimal
+             perl-bio-db-hts
+             perl-dbi
+             perl-dbd-mysql
+             perl-libwww
+             perl-http-tiny
+             perl-json
+             which))
       (propagated-inputs
-       `(("kentutils" ,kentutils)))
+       (list kentutils))
       (native-inputs
        `(("unzip" ,unzip)
          ("perl" ,perl)
@@ -14706,39 +15213,39 @@ translates between different variant encodings.")
            "1yihhrv7zs87ax61la1nb4y12lg3knraw4b20k5digbcwm8488lb"))))
       (properties `((upstream-name . "Signac")))
       (build-system r-build-system)
-      (inputs `(("zlib" ,zlib)))
+      (inputs (list zlib))
       (propagated-inputs
-       `(("r-annotationfilter" ,r-annotationfilter)
-         ("r-biocgenerics" ,r-biocgenerics)
-         ("r-biostrings" ,r-biostrings)
-         ("r-biovizbase" ,r-biovizbase)
-         ("r-data-table" ,r-data-table)
-         ("r-dplyr" ,r-dplyr)
-         ("r-fastmatch" ,r-fastmatch)
-         ("r-future" ,r-future)
-         ("r-future-apply" ,r-future-apply)
-         ("r-genomeinfodb" ,r-genomeinfodb)
-         ("r-genomicranges" ,r-genomicranges)
-         ("r-ggbio" ,r-ggbio)
-         ("r-ggforce" ,r-ggforce)
-         ("r-ggplot2" ,r-ggplot2)
-         ("r-ggrepel" ,r-ggrepel)
-         ("r-ggseqlogo" ,r-ggseqlogo)
-         ("r-iranges" ,r-iranges)
-         ("r-irlba" ,r-irlba)
-         ("r-lsa" ,r-lsa)
-         ("r-matrix" ,r-matrix)
-         ("r-patchwork" ,r-patchwork)
-         ("r-pbapply" ,r-pbapply)
-         ("r-rcpp" ,r-rcpp)
-         ("r-rcpproll" ,r-rcpproll)
-         ("r-rsamtools" ,r-rsamtools)
-         ("r-s4vectors" ,r-s4vectors)
-         ("r-scales" ,r-scales)
-         ("r-seurat" ,r-seurat)
-         ("r-seuratobject" ,r-seuratobject)
-         ("r-stringi" ,r-stringi)
-         ("r-tidyr" ,r-tidyr)))
+       (list r-annotationfilter
+             r-biocgenerics
+             r-biostrings
+             r-biovizbase
+             r-data-table
+             r-dplyr
+             r-fastmatch
+             r-future
+             r-future-apply
+             r-genomeinfodb
+             r-genomicranges
+             r-ggbio
+             r-ggforce
+             r-ggplot2
+             r-ggrepel
+             r-ggseqlogo
+             r-iranges
+             r-irlba
+             r-lsa
+             r-matrix
+             r-patchwork
+             r-pbapply
+             r-rcpp
+             r-rcpproll
+             r-rsamtools
+             r-s4vectors
+             r-scales
+             r-seurat
+             r-seuratobject
+             r-stringi
+             r-tidyr))
       (home-page "https://github.com/timoast/signac/")
       (synopsis "Analysis of single-cell chromatin data")
       (description
@@ -14762,18 +15269,17 @@ sequence motif analysis.")
          "1023hadgcsgi53kz53ql45207hfizf9sw57z0qij3ay1bx68zbpm"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-nose2" ,python-nose2)))
+     (list python-cython python-nose2))
     ;; The package mainly consists of a command-line tool, but also has a
     ;; Python-API. Thus these must be propagated.
     (propagated-inputs
-     `(("python-future" ,python-future)
-       ("python-h5py" ,python-h5py)
-       ("python-mappy" ,python-mappy)
-       ("python-numpy" ,python-numpy)
-       ("python-scipy" ,python-scipy)
-       ("python-tqdm" ,python-tqdm)
-       ("python-rpy2" ,python-rpy2)))
+     (list python-future
+           python-h5py
+           python-mappy
+           python-numpy
+           python-scipy
+           python-tqdm
+           python-rpy2))
     (home-page "https://github.com/nanoporetech/tombo")
     (synopsis "Analysis of raw nanopore sequencing data")
     (description "Tombo is a suite of tools primarily for the identification of
@@ -14802,17 +15308,23 @@ for the analysis and visualization of raw nanopore signal.")
     (arguments
      `(#:phases
         (modify-phases %standard-phases
+          (add-after 'unpack 'patch-sample-script
+            (lambda _
+              ;; Add Python 3 compatibility to this sample script.
+              (substitute* "scripts/vcf_sample_filter.py"
+                (("print (.*)\n" _ arg)
+                 (string-append "print(" arg ")\n")))))
           (add-after 'install 'remove-installed-tests
             ;; Do not install test files.
             (lambda* (#:key inputs outputs #:allow-other-keys)
               (delete-file-recursively (string-append
                                          (site-packages inputs outputs)
-                                         "vcf/test"))
-              #t)))))
-    (native-inputs `(("python-cython" ,python-cython)))
+                                         "/vcf/test")))))))
+    (native-inputs
+     ;; Older setuptools is needed for use_2to3.
+     (list python-cython python-setuptools))
     (propagated-inputs
-     `(("python-pysam" ,python-pysam)
-       ("python-rpy2" ,python-rpy2)))
+     (list python-pysam python-rpy2))
     (home-page "https://github.com/jamescasbon/PyVCF")
     (synopsis "Variant Call Format parser for Python")
     (description "This package provides a @acronym{VCF,Variant Call Format}
@@ -14831,11 +15343,9 @@ parser for Python.")
               "1wl2daj0bwrl8fx5xi8j8hfs3mp3vg3qycy66538n032v1qkc6xg"))))
    (build-system python-build-system)
    (inputs
-    `(("python-configparser" ,python-configparser)
-      ("python-pysam" ,python-pysam)
-      ("python-pyvcf" ,python-pyvcf)))
+    (list python-configparser python-pysam python-pyvcf))
    (home-page "https://github.com/mroosmalen/nanosv")
-   (synopsis "Structural variation detection tool for Oxford Nanopore data.")
+   (synopsis "Structural variation detection tool for Oxford Nanopore data")
    (description "NanoSV is a software package that can be used to identify
 structural genomic variations in long-read sequencing data, such as data
 produced by Oxford Nanopore Technologies’ MinION, GridION or PromethION
@@ -14855,10 +15365,9 @@ instruments, or Pacific Biosciences RSII or Sequel sequencers.")
          "1z1gy8n56lhriy6hdkh9r82ndikndipq2cy2wh8q185qig4rimr6"))))
     (build-system python-build-system)
     (inputs
-     `(("curl" ,curl)
-       ("zlib" ,zlib)))
+     (list curl zlib))
     (propagated-inputs
-     `(("pybind11" ,pybind11)))
+     (list pybind11))
     (home-page "https://github.com/aidenlab/straw")
     (synopsis "Stream data from .hic files")
     (description "Straw is library which allows rapid streaming of contact
@@ -14891,18 +15400,11 @@ data from @file{.hic} files.  This package provides Python bindings.")
                (with-directory-excursion "/tmp/tests"
                  (invoke "python" "-m" "pytest" "-v"))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python-pkgconfig" ,python-pkgconfig)
-       ("python-pytest" ,python-pytest)))
+     (list pkg-config python-pkgconfig python-pytest))
     (inputs
-     `(("libpng" ,libpng)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list libpng openssl zlib))
     (propagated-inputs
-     `(("python-cython" ,python-cython)
-       ("python-numpy" ,python-numpy)
-       ("python-pandas" ,python-pandas)
-       ("python-six" ,python-six)))
+     (list python-cython python-numpy python-pandas python-six))
     (home-page "https://github.com/nvictus/pybbi")
     (synopsis "Python bindings to UCSC Big Binary file library")
     (description
@@ -14926,8 +15428,7 @@ feature is fast retrieval of range queries into numpy arrays.")
     (build-system python-build-system)
     (arguments '(#:tests? #false)) ; there are none
     (propagated-inputs
-     `(("python-biopython" ,python-biopython)
-       ("python-matplotlib" ,python-matplotlib)))
+     (list python-biopython python-matplotlib))
     (home-page
      "https://github.com/Edinburgh-Genome-Foundry/DnaFeaturesViewer")
     (synopsis "Plot features from DNA sequences")
@@ -14950,28 +15451,28 @@ e.g. from GenBank or Gff files, or Biopython SeqRecords.")
     (build-system python-build-system)
     (arguments '(#:tests? #false)) ; there are none
     (inputs
-     `(("pybind11" ,pybind11)))
+     (list pybind11))
     (propagated-inputs
-     `(("python-cooler" ,python-cooler)
-       ("python-dna-features-viewer" ,python-dna-features-viewer)
-       ("python-fire" ,python-fire)
-       ("python-h5py" ,python-h5py)
-       ("python-intervaltree" ,python-intervaltree)
-       ("python-ipywidgets" ,python-ipywidgets)
-       ("jupyter" ,jupyter)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-nbformat" ,python-nbformat)
-       ("python-numpy" ,python-numpy)
-       ("python-numpydoc" ,python-numpydoc)
-       ("python-pandas" ,python-pandas)
-       ("python-pybbi" ,python-pybbi)
-       ("python-pytest" ,python-pytest)
-       ("python-scipy" ,python-scipy)
-       ("python-statsmodels" ,python-statsmodels)
-       ("python-strawc" ,python-strawc)
-       ("python-svgutils" ,python-svgutils)
-       ("python-termcolor" ,python-termcolor)
-       ("python-voila" ,python-voila)))
+     (list python-cooler
+           python-dna-features-viewer
+           python-fire
+           python-h5py
+           python-intervaltree
+           python-ipywidgets
+           jupyter
+           python-matplotlib
+           python-nbformat
+           python-numpy
+           python-numpydoc
+           python-pandas
+           python-pybbi
+           python-pytest
+           python-scipy
+           python-statsmodels
+           python-strawc
+           python-svgutils
+           python-termcolor
+           python-voila))
     (home-page "https://github.com/GangCaoLab/CoolBox")
     (synopsis "Genomic data visualization toolkit")
     (description
@@ -14984,6 +15485,89 @@ line, interactively explore genomic data within Jupyter environment or web
 browser.")
     (license license:gpl3+)))
 
+(define-public python-pyspoa
+  (package
+    (name "python-pyspoa")
+    (version "0.0.5")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/nanoporetech/pyspoa")
+             (commit (string-append "v" version))
+             (recursive? #true)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1lgf2shzhxkcsircd6vy46h27pjljd5q95fyz1cm3lkk702qbnzx"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'build-libspoa
+           (lambda _
+             (mkdir-p "src/build")
+             (with-directory-excursion "src/build"
+               (invoke "cmake"
+                       "-Dspoa_optimize_for_portability=ON"
+                       "-DCMAKE_BUILD_TYPE=Release"
+                       "-DCMAKE_CXX_FLAGS=\"-I ../vendor/cereal/include/\" -fPIC"
+                       "..")
+               (invoke "make"))))
+         (replace 'check
+           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "python" "tests/test_pyspoa.py")))))))
+    (propagated-inputs
+     (list pybind11))
+    (native-inputs
+     `(("cmake" ,cmake-minimal)))
+    (home-page "https://github.com/nanoporetech/pyspoa")
+    (synopsis "Python bindings for the SIMD partial order alignment library")
+    (description
+     "This package provides Python bindings for spoa, a C++ implementation of
+the @dfn{partial order alignment} (POA) algorithm (as described in
+10.1093/bioinformatics/18.3.452) which is used to generate consensus
+sequences")
+    (license license:expat)))
+
+(define-public python-bwapy
+  (package
+    (name "python-bwapy")
+    (version "0.1.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "bwapy" version))
+       (sha256
+        (base32 "090qwx3vl729zn3a7sksbviyg04kc71gpbm3nd8dalqp673x1npw"))
+       (modules '((guix build utils)))
+       (snippet
+        '(for-each delete-file (find-files "." "\\.o$")))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'relax-requirements
+           (lambda _
+             (substitute* "setup.py"
+               (("wheel>=0.34") "wheel>=0.30"))))
+         ;; TODO: it's possible that the import error points to a real
+         ;; problem with the C sources.
+         (delete 'sanity-check))))
+    (propagated-inputs
+     (list python-cffi python-setuptools python-wheel))
+    (inputs
+     (list zlib))
+    (home-page "https://github.com/ACEnglish/bwapy")
+    (synopsis "Python bindings to bwa alinger")
+    (description "This package provides Python bindings to the bwa mem
+aligner.")
+    ;; These Python bindings are licensed under Mozilla Public License 2.0,
+    ;; bwa itself is licenced under GNU General Public License v3.0.
+    (license license:mpl2.0)))
+
 (define-public scregseg
   (package
     (name "scregseg")
@@ -15008,21 +15592,21 @@ browser.")
              (substitute* "setup.py"
                (("'sklearn',") "")))))))
     (native-inputs
-     `(("python-cython" ,python-cython)))
+     (list python-cython))
     (propagated-inputs
-     `(("python-scikit-learn" ,python-scikit-learn)
-       ("python-scipy" ,python-scipy)
-       ("python-numpy" ,python-numpy)
-       ("python-hmmlearn" ,python-hmmlearn)
-       ("python-pandas" ,python-pandas)
-       ("python-numba" ,python-numba)
-       ("python-anndata" ,python-anndata)
-       ("python-scanpy" ,python-scanpy)
-       ("python-pybedtools" ,python-pybedtools)
-       ("python-pysam" ,python-pysam)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-seaborn" ,python-seaborn)
-       ("python-coolbox" ,python-coolbox)))
+     (list python-scikit-learn
+           python-scipy
+           python-numpy
+           python-hmmlearn
+           python-pandas
+           python-numba
+           python-anndata
+           python-scanpy
+           python-pybedtools
+           python-pysam
+           python-matplotlib
+           python-seaborn
+           python-coolbox))
     (home-page "https://github.com/BIMSBbioinfo/scregseg")
     (synopsis "Single-cell regulatory landscape segmentation")
     (description "Scregseg (Single-Cell REGulatory landscape SEGmentation) is a
@@ -15081,15 +15665,9 @@ cross-cluster accessibility profiles.")
                (copy-file "megadepth_dynamic"
                           (string-append bin "/megadepth"))))))))
     (native-inputs
-     `(("diffutils" ,diffutils)
-       ("perl" ,perl)
-       ("grep" ,grep)))
+     (list diffutils perl grep))
     (inputs
-     `(("curl" ,curl)
-       ("htslib" ,htslib)
-       ("libdeflate" ,libdeflate)
-       ("libbigwig" ,libbigwig)
-       ("zlib" ,zlib)))
+     (list curl htslib libdeflate libbigwig zlib))
     (home-page "https://github.com/ChristopherWilks/megadepth")
     (synopsis "BigWig and BAM/CRAM related utilities")
     (description "Megadepth is an efficient tool for extracting coverage
@@ -15120,7 +15698,7 @@ both types of files.")
          (lambda _
            (chdir "ASCAT"))))))
    (propagated-inputs
-    `(("r-rcolorbrewer" ,r-rcolorbrewer)))
+    (list r-rcolorbrewer))
    (home-page "https://github.com/VanLoo-lab/ascat/")
    (synopsis "Allele-Specific Copy Number Analysis of Tumors in R")
    (description "This package provides the @acronym{ASCAT,Allele-Specific Copy
@@ -15143,14 +15721,14 @@ ploidy and allele-specific copy number profiles.")
               "0nmcq4c7y5g8h8lxsq9vadz9bj4qgqn118alip520ny6czaxki4h"))))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-devtools" ,r-devtools)
-      ("r-readr" ,r-readr)
-      ("r-doparallel" ,r-doparallel)
-      ("r-ggplot2" ,r-ggplot2)
-      ("r-rcolorbrewer" ,r-rcolorbrewer)
-      ("r-gridextra" ,r-gridextra)
-      ("r-gtools" ,r-gtools)
-      ("r-ascat" ,r-ascat)))
+    (list r-devtools
+          r-readr
+          r-doparallel
+          r-ggplot2
+          r-rcolorbrewer
+          r-gridextra
+          r-gtools
+          r-ascat))
    (home-page "https://github.com/Wedge-lab/battenberg")
    (synopsis "Subclonal copy number estimation in R")
    (description "This package contains the Battenberg R package for subclonal
@@ -15205,51 +15783,51 @@ value of physical insulation between neighboring domains.")
       (properties `((upstream-name . "Spectre")))
       (build-system r-build-system)
       (propagated-inputs
-       `(("r-biobase" ,r-biobase)
-         ("r-biocmanager" ,r-biocmanager)
-         ("r-caret" ,r-caret)
-         ("r-class" ,r-class)
-         ("r-colorramps" ,r-colorramps)
-         ("r-data-table" ,r-data-table)
-         ("r-devtools" ,r-devtools)
-         ("r-dplyr" ,r-dplyr)
-         ("r-exactextractr" ,r-exactextractr)
-         ("r-factoextra" ,r-factoextra)
-         ("r-flowcore" ,r-flowcore)
-         ("r-flowsom" ,r-flowsom)
-         ("r-flowviz" ,r-flowviz)
-         ("r-fnn" ,r-fnn)
-         ("r-ggplot2" ,r-ggplot2)
-         ("r-ggpointdensity" ,r-ggpointdensity)
-         ("r-ggpubr" ,r-ggpubr)
-         ("r-ggraph" ,r-ggraph)
-         ("r-ggthemes" ,r-ggthemes)
-         ("r-gridextra" ,r-gridextra)
-         ("r-gridextra" ,r-gridextra)
-         ("r-gtools" ,r-gtools)
-         ("r-hdf5array" ,r-hdf5array)
-         ("r-irlba" ,r-irlba)
-         ("r-pheatmap" ,r-pheatmap)
-         ("r-plyr" ,r-plyr)
-         ("r-qs" ,r-qs)
-         ("r-raster" ,r-raster)
-         ("r-rcolorbrewer" ,r-rcolorbrewer)
-         ("r-rgeos" ,r-rgeos)
-         ("r-rhdf5" ,r-rhdf5)
-         ("r-rstudioapi" ,r-rstudioapi)
-         ("r-rsvd" ,r-rsvd)
-         ("r-rtsne" ,r-rtsne)
-         ("r-s2" ,r-s2)
-         ("r-scales" ,r-scales)
-         ("r-sf" ,r-sf)
-         ("r-sp" ,r-sp)
-         ("r-stars" ,r-stars)
-         ("r-stringr" ,r-stringr)
-         ("r-tidygraph" ,r-tidygraph)
-         ("r-tidyr" ,r-tidyr)
-         ("r-tidyr" ,r-tidyr)
-         ("r-tiff" ,r-tiff)
-         ("r-umap" ,r-umap)))
+       (list r-biobase
+             r-biocmanager
+             r-caret
+             r-class
+             r-colorramps
+             r-data-table
+             r-devtools
+             r-dplyr
+             r-exactextractr
+             r-factoextra
+             r-flowcore
+             r-flowsom
+             r-flowviz
+             r-fnn
+             r-ggplot2
+             r-ggpointdensity
+             r-ggpubr
+             r-ggraph
+             r-ggthemes
+             r-gridextra
+             r-gridextra
+             r-gtools
+             r-hdf5array
+             r-irlba
+             r-pheatmap
+             r-plyr
+             r-qs
+             r-raster
+             r-rcolorbrewer
+             r-rgeos
+             r-rhdf5
+             r-rstudioapi
+             r-rsvd
+             r-rtsne
+             r-s2
+             r-scales
+             r-sf
+             r-sp
+             r-stars
+             r-stringr
+             r-tidygraph
+             r-tidyr
+             r-tidyr
+             r-tiff
+             r-umap))
       (home-page "https://github.com/ImmuneDynamics/Spectre")
       (synopsis "High-dimensional cytometry and imaging analysis")
       (description
@@ -15277,16 +15855,16 @@ cytometry and imaging data.")
       (properties `((upstream-name . "CytoNorm")))
       (build-system r-build-system)
       (propagated-inputs
-       `(("r-cytoml" ,r-cytoml)
-         ("r-dplyr" ,r-dplyr)
-         ("r-emdist" ,r-emdist)
-         ("r-flowcore" ,r-flowcore)
-         ("r-flowsom" ,r-flowsom)
-         ("r-flowworkspace" ,r-flowworkspace)
-         ("r-ggplot2" ,r-ggplot2)
-         ("r-gridextra" ,r-gridextra)
-         ("r-pheatmap" ,r-pheatmap)
-         ("r-stringr" ,r-stringr)))
+       (list r-cytoml
+             r-dplyr
+             r-emdist
+             r-flowcore
+             r-flowsom
+             r-flowworkspace
+             r-ggplot2
+             r-gridextra
+             r-pheatmap
+             r-stringr))
       (home-page "https://github.com/saeyslab/CytoNorm")
       (synopsis "Normalize cytometry data measured across multiple batches")
       (description
@@ -15296,3 +15874,56 @@ identifying multiple clusters/cell types, learning the batch effects from the
 control samples and applying quantile normalization on all markers of
 interest.")
       (license license:gpl2+))))
+
+(define-public ccwl
+  (package
+    (name "ccwl")
+    (version "0.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://ccwl.systemreboot.net/releases/ccwl-"
+                           version ".tar.lz"))
+       (sha256
+        (base32
+         "1ar8rfz3zrksgygrv67zv77y8gfvvz54zcs546jn6j28y20basla"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:make-flags '("GUILE_AUTO_COMPILE=0") ; to prevent guild warnings
+       #:modules (((guix build guile-build-system)
+                   #:select (target-guile-effective-version))
+                  ,@%gnu-build-system-modules)
+       #:imported-modules ((guix build guile-build-system)
+                           ,@%gnu-build-system-modules)
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'wrap
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out"))
+                   (effective-version (target-guile-effective-version)))
+               (wrap-program (string-append out "/bin/ccwl")
+                 `("GUILE_LOAD_PATH" prefix
+                   (,(string-append out "/share/guile/site/" effective-version)
+                    ,(getenv "GUILE_LOAD_PATH")))
+                 `("GUILE_LOAD_COMPILED_PATH" prefix
+                   (,(string-append out "/lib/guile/" effective-version "/site-ccache")
+                    ,(getenv "GUILE_LOAD_COMPILED_PATH"))))))))))
+    (inputs
+     `(("bash" ,bash-minimal)
+       ("guile" ,guile-3.0)
+       ("guile-libyaml" ,guile-libyaml)))
+    (native-inputs
+     (list pkg-config
+           lzip
+           ;; To build documentation
+           cwltool
+           graphviz
+           skribilo))
+    (home-page "https://ccwl.systemreboot.net")
+    (synopsis "Concise common workflow language")
+    (description "The @acronym{ccwl, Concise Common Workflow Language} is a
+concise syntax to express CWL workflows.  ccwl is a compiler to generate CWL
+workflows from concise descriptions in ccwl.  It is implemented as an
+@acronym{EDSL, Embedded Domain Specific Language} in the Scheme programming
+language.")
+    (license license:gpl3+)))
diff --git a/gnu/packages/bison.scm b/gnu/packages/bison.scm
index 4c6da7d9b7..5fd25452ff 100644
--- a/gnu/packages/bison.scm
+++ b/gnu/packages/bison.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012, 2013, 2015, 2019 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2019 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2020 B. Wilson <elaexuotee@wilsonb.com>
 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
 ;;;
@@ -33,7 +33,7 @@
 (define-public bison
   (package
     (name "bison")
-    (version "3.5.3")
+    (version "3.7.6")
     (source
      (origin
       (method url-fetch)
@@ -41,7 +41,7 @@
                           version ".tar.xz"))
       (sha256
        (base32
-        "1i57hbczvr8674z73775jxdd3y59qggs5lmfd60gmwm5i1gmpy1b"))))
+        "1kzkxrd3z4262k2sbxmyh9k5g5r2lakw0gv44l2hb4i1wbhqrmk7"))))
     (build-system gnu-build-system)
     (arguments
      '(;; Building in parallel on many-core systems may cause an error such as
@@ -52,11 +52,11 @@
        ;; "./examples/c/reccalc/scan.l:13:10: fatal error: parse.h: No such file
        ;; or directory".  Full log in <https://bugs.gnu.org/36238>.
        #:parallel-tests? #f))
-    (native-inputs `(("perl" ,perl)
-                     ;; m4 is not present in PATH when cross-building.
-                     ("m4" ,m4)))
-    (inputs `(("flex" ,flex)))
-    (propagated-inputs `(("m4" ,m4)))
+    (native-inputs (list perl
+                         ;; m4 is not present in PATH when cross-building.
+                         m4))
+    (inputs (list flex))
+    (propagated-inputs (list m4))
     (home-page "https://www.gnu.org/software/bison/")
     (synopsis "Yacc-compatible parser generator")
     (description
@@ -68,17 +68,6 @@ simple tools through complex programming languages.
 Bison also provides an implementation of @command{yacc}, as specified by POSIX.")
     (license gpl3+)))
 
-(define-public bison-3.6
-  (package
-    (inherit bison)
-    (version "3.6.3")
-    (source
-     (origin
-      (method url-fetch)
-      (uri (string-append "mirror://gnu/bison/bison-" version ".tar.xz"))
-      (sha256
-       (base32 "0gdpnjh6ra9xa9vj6hzjdf0c04x4pjyy8vssm3qdb7fya4v7knq6"))))))
-
 (define-public bison-3.0
   (package
     (inherit bison)
diff --git a/gnu/packages/bittorrent.scm b/gnu/packages/bittorrent.scm
index e17e04dcfe..0dc0bbffd8 100644
--- a/gnu/packages/bittorrent.scm
+++ b/gnu/packages/bittorrent.scm
@@ -2,16 +2,19 @@
 ;;; Copyright © 2014 Taylan Ulrich Bayirli/Kammer <taylanbayirli@gmail.com>
 ;;; Copyright © 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016, 2017, 2018, 2019, 2020 Leo Famulari <leo@famulari.name>
-;;; Copyright © 2016, 2017, 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2022 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Tomáš Čech <sleep_walker@gnu.org>
 ;;; Copyright © 2016, 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Jelle Licht <jlicht@fsfe.org>
 ;;; Copyright © 2018 Fis Trivial <ybbs.daans@hotmail.com>
 ;;; Copyright © 2018 Nam Nguyen <namn@berkeley.edu>
-;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2018, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2019, 2020 Brett Gilio <brettg@gnu.org>
 ;;; Copyright © 2020 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;; Copyright © 2021 Justin Veilleux <terramorpha@cock.li>
+;;; Copyright © 2021 Marius Bakke <marius@gnu.org>
+;;; Copyright © 2021 Josselin Poiret <josselin.poiret@protonmail.ch>
+;;; Copyright © 2022 Brice Waegeneire <brice@waegenei.re>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -32,16 +35,20 @@
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
+  #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system python)
   #:use-module (guix build-system glib-or-gtk)
   #:use-module ((guix licenses) #:prefix l:)
+  #:use-module (guix gexp)
   #:use-module (guix utils)
   #:use-module (gnu packages)
   #:use-module (gnu packages adns)
   #:use-module (gnu packages autotools)
+  #:use-module (gnu packages bash)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages check)
+  #:use-module (gnu packages cmake)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages crypto)
   #:use-module (gnu packages curl)
@@ -90,6 +97,10 @@
        (list (string-append "--localedir="
                             (assoc-ref %outputs "gui")
                             "/share/locale"))
+       ;; Some tests segfault when using libevent 2.12 without internet
+       ;; connection. This has been reported mainstream but not fixed yet:
+       ;; https://github.com/transmission/transmission/issues/1437.
+       #:tests? #f
        #:glib-or-gtk-wrap-excluded-outputs '("out")
        #:phases
        (modify-phases %standard-phases
@@ -115,14 +126,9 @@
                 (string-append gui "/share/man/man1/transmission-gtk.1"))
              #t))))))
     (inputs
-     `(("libevent" ,libevent)
-       ("curl" ,curl)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)
-       ("gtk+" ,gtk+)))
+     (list libevent curl openssl zlib gtk+))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (home-page "https://transmissionbt.com/")
     (synopsis "Fast and easy BitTorrent client")
     (description
@@ -144,26 +150,21 @@ DHT, µTP, PEX and Magnet Links.")
 (define-public transmission-remote-gtk
   (package
     (name "transmission-remote-gtk")
-    (version "1.4.1")
+    (version "1.4.2")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://github.com/transmission-remote-gtk/"
                            "transmission-remote-gtk/releases/download/"
                            version "/transmission-remote-gtk-" version
-                           ".tar.xz"))
-       (patches (search-patches "transmission-remote-gtk-fix-appstream.patch"))
+                           ".tar.gz"))
        (sha256
-        (base32 "1aqjl5rgamgcgqvcldd1gzyfh2xci0m7070924d6vz2qln0q75sr"))))
+        (base32 "0qz9wi70qc6vgnaymivc3xz6y86c9hglk6wjv3snnqxpxmp9saay"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("gettext" ,gnu-gettext)
-       ("pkg-config" ,pkg-config)))
+     (list gnu-gettext pkg-config))
     (inputs
-     `(("appstream-glib" ,appstream-glib)
-       ("curl" ,curl)
-       ("gtk+" ,gtk+)
-       ("json-glib" ,json-glib)))
+     (list appstream-glib curl gtk+ json-glib))
     (synopsis "Gtk frontend to the Transmission daemon")
     (description "transmission-remote-gtk is a GTK client for remote management
 of the Transmission BitTorrent client, using its HTTP RPC protocol.")
@@ -183,10 +184,8 @@ of the Transmission BitTorrent client, using its HTTP RPC protocol.")
                (base32
                 "10z9i1rc41cmmi7nx8k7k1agsx6afv09g9cl7g9zr35fyhl5l4gd"))))
     (build-system gnu-build-system)
-    (inputs `(("openssl" ,openssl)
-              ("zlib" ,zlib)))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("cppunit" ,cppunit)))
+    (inputs (list openssl zlib))
+    (native-inputs (list pkg-config cppunit))
     (synopsis "BitTorrent library of rtorrent")
     (description
      "LibTorrent is a BitTorrent library used by and developed in parallel
@@ -208,14 +207,13 @@ speed and efficiency.")
                (base32
                 "1bs2fnf4q7mlhkhzp3i1v052v9xn8qa7g845pk9ia8hlpw207pwy"))))
     (build-system gnu-build-system)
-    (inputs `(("libtorrent" ,libtorrent)
-              ("ncurses" ,ncurses)
-              ("curl" ,curl)
-              ("cyrus-sasl" ,cyrus-sasl)
-              ("openssl" ,openssl)
-              ("zlib" ,zlib)))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("cppunit" ,cppunit)))
+    (inputs (list libtorrent
+                  ncurses
+                  curl
+                  cyrus-sasl
+                  openssl
+                  zlib))
+    (native-inputs (list pkg-config cppunit))
     (synopsis "BitTorrent client with ncurses interface")
     (description
      "rTorrent is a BitTorrent client with an ncurses interface.  It supports
@@ -237,7 +235,8 @@ XML-RPC over SCGI.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1fqspp2ckafplahgba54xmx0sjidx1pdzyjaqjhz0ivh98dkx2n5"))))
+         "1fqspp2ckafplahgba54xmx0sjidx1pdzyjaqjhz0ivh98dkx2n5"))
+       (patches (search-patches "tremc-fix-decodestring.patch"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ; no test suite
@@ -249,7 +248,7 @@ XML-RPC over SCGI.")
          (delete 'configure)
          (delete 'build))))
     (inputs
-     `(("python" ,python)))
+     (list python))
     (synopsis "Console client for the Transmission BitTorrent daemon")
     (description "Tremc is a console client, with a curses interface, for the
 Transmission BitTorrent daemon.")
@@ -302,7 +301,7 @@ maintained upstream.")
 (define-public aria2
   (package
     (name "aria2")
-    (version "1.35.0")
+    (version "1.36.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/aria2/aria2/releases/"
@@ -310,41 +309,44 @@ maintained upstream.")
                                   "/aria2-" version ".tar.xz"))
               (sha256
                (base32
-                "1zbxc517d97lb96f15xcy4l7b66grxrp3h2ids2jiwkaip87yaqy"))))
+                "1987x4ywnnrhhfs9hi2h820c200d7nas9nd35414yh0jiihfglaq"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:configure-flags (list "--enable-libaria2"
-                               (string-append "--with-bashcompletiondir="
-                                              %output "/etc/bash_completion.d/"))
+     (list
+       #:configure-flags
+       #~(list "--enable-libaria2"
+               (string-append "--with-bashcompletiondir="
+                              #$output "/etc/bash_completion.d/"))
        #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'delete-socket-tests
-           (lambda _
-             (substitute* "test/LpdMessageDispatcherTest.cc"
-               (("CPPUNIT_TEST_SUITE_REGISTRATION\\(LpdMessageDispatcherTest\\);" text)
-                (string-append "// " text)))
-             (substitute* "test/LpdMessageReceiverTest.cc"
-               (("CPPUNIT_TEST_SUITE_REGISTRATION\\(LpdMessageReceiverTest\\);" text)
-                (string-append "// " text)))
-             #t)))))
+       #~(modify-phases %standard-phases
+           (add-after 'unpack 'delete-socket-tests
+             (lambda _
+               (substitute* "test/LpdMessageDispatcherTest.cc"
+                 (("CPPUNIT_TEST_SUITE_REGISTRATION\\(LpdMessageDispatcherTest\\);" text)
+                  (string-append "// " text)))
+               (substitute* "test/LpdMessageReceiverTest.cc"
+                 (("CPPUNIT_TEST_SUITE_REGISTRATION\\(LpdMessageReceiverTest\\);" text)
+                  (string-append "// " text))))))))
     (native-inputs
-     `(("cppunit" ,cppunit) ; for the tests
-       ("pkg-config" ,pkg-config)))
+     (list cppunit ; for the tests
+           pkg-config))
     (inputs
-     `(("c-ares" ,c-ares)
-       ("gnutls" ,gnutls)
-       ("gmp" ,gmp)
-       ("libssh2" ,libssh2)
-       ("libxml2" ,libxml2)
-       ("nettle" ,nettle)
-       ("sqlite" ,sqlite)
-       ("zlib" ,zlib)))
+     (list c-ares
+           gnutls
+           gmp
+           libssh2
+           libxml2
+           nettle
+           sqlite
+           zlib))
     (home-page "https://aria2.github.io/")
     (synopsis "Utility for parallel downloading files")
     (description
       "Aria2 is a lightweight, multi-protocol & multi-source command-line
 download utility.  It supports HTTP/HTTPS, FTP, SFTP, BitTorrent and Metalink.
 Aria2 can be manipulated via built-in JSON-RPC and XML-RPC interfaces.")
+    (properties
+     '((release-monitoring-url . "https://github.com/aria2/aria2/releases")))
     (license l:gpl2+)))
 
 (define-public uget
@@ -360,18 +362,19 @@ Aria2 can be manipulated via built-in JSON-RPC and XML-RPC interfaces.")
        (sha256
         (base32 "0dlrjhnm1pg2vwmp7nl2xv1aia5hyirb3021rl46x859k63zap24"))))
     (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags '("CFLAGS=-fcommon")))
     (inputs
-     `(("curl" ,curl)
-       ("gtk+" ,gtk+)
-       ("glib" ,glib)
-       ("gnutls" ,gnutls)
-       ("gstreamer" ,gstreamer)
-       ("libgcrypt" ,libgcrypt)
-       ("libnotify" ,libnotify)
-       ("openssl" ,openssl)))
+     (list curl
+           gtk+
+           glib
+           gnutls
+           gstreamer
+           libgcrypt
+           libnotify
+           openssl))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (home-page "https://ugetdm.com/")
     (synopsis "Universal download manager with GTK+ interface")
     (description
@@ -419,31 +422,50 @@ and will take advantage of multiple processor cores where possible.")
 (define-public libtorrent-rasterbar
   (package
     (name "libtorrent-rasterbar")
-    (version "1.2.8")
+    (version "1.2.15")
     (source
      (origin
        (method url-fetch)
        (uri
         (string-append "https://github.com/arvidn/libtorrent/"
-                       "releases/download/libtorrent-" version "/"
+                       "releases/download/v" version "/"
                        "libtorrent-rasterbar-" version ".tar.gz"))
        (sha256
-        (base32 "1phn4klzvfzvidv5g566pnrrxj8l0givpy6s4r17d45wznqxc006"))))
-    (build-system gnu-build-system)
+        (base32 "0jr1c876mvwbbbnav8ldcdm1l6z3g404jc5wp8z902jcd0w8dbf8"))))
+    (build-system cmake-build-system)
     (arguments
-     `(#:configure-flags
-       (list (string-append "--with-boost-libdir="
-                            (assoc-ref %build-inputs "boost")
-                            "/lib")
-             "--enable-python-binding"
-             "--enable-tests")
-       #:make-flags (list
-                     (string-append "LDFLAGS=-Wl,-rpath="
-                                    (assoc-ref %outputs "out") "/lib"))))
-    (inputs `(("boost" ,boost)
-              ("openssl" ,openssl)))
-    (native-inputs `(("python" ,python-wrapper)
-                     ("pkg-config" ,pkg-config)))
+     `(#:configure-flags '("-Dpython-bindings=ON"
+                           "-Dbuild_tests=ON")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'extend-test-timeout
+           (lambda _
+             (substitute* "test/test_remove_torrent.cpp"
+               ;; Extend the test timeout from 3 seconds to 10.
+               (("i > 30") "i > 100"))))
+         (replace 'check
+           (lambda* (#:key tests? parallel-tests? #:allow-other-keys)
+             (let ((disabled-tests
+                    ;; test_upnp requires a non-localhost IPv4 interface.
+                    '("test_upnp")))
+               (when tests?
+                 ;; test_ssl relies on bundled TLS certificates with a fixed
+                 ;; expiry date.  To ensure succesful builds in the future,
+                 ;; fake the time to be roughly that of the release.
+                 (setenv "FAKETIME_ONLY_CMDS" "test_ssl")
+                 (invoke "faketime" "2021-12-12"
+                         "ctest"
+                         "--exclude-regex" (string-join disabled-tests "|")
+                         "-j" (if parallel-tests?
+                                  (number->string (parallel-job-count))
+                                  "1")
+                         "--rerun-failed"
+                         "--output-on-failure"))))))))
+    (inputs (list boost openssl))
+    (native-inputs
+     (list libfaketime
+           python-wrapper
+           pkg-config))
     (home-page "https://www.libtorrent.org/")
     (synopsis "Feature-complete BitTorrent implementation")
     (description
@@ -455,7 +477,7 @@ desktops.")
 (define-public qbittorrent
   (package
     (name "qbittorrent")
-    (version "4.2.5")
+    (version "4.4.0")
     (source
      (origin
        (method git-fetch)
@@ -464,7 +486,7 @@ desktops.")
              (commit (string-append "release-" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1n613ylg6i9gisgk0dbr2kpfasyizrkdjff1r8smd4vri2qrdksn"))))
+        (base32 "0aqrcwxi3s2alila3fa7fjs4hifkq7055wa4xvz17hajchs3l567"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
@@ -486,8 +508,7 @@ desktops.")
                (wrap-qt-program "qbittorrent" #:output out #:inputs inputs))
              #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list pkg-config qttools))
     (inputs
      `(("boost" ,boost)
        ("libtorrent-rasterbar" ,libtorrent-rasterbar)
@@ -510,7 +531,7 @@ features.")
 (define-public deluge
   (package
     (name "deluge")
-    (version "2.0.3")
+    (version "2.0.5")
     (source
      (origin
        (method url-fetch)
@@ -519,29 +540,31 @@ features.")
              (version-major+minor version) "/deluge-" version ".tar.xz"))
        (sha256
         (base32
-         "14d8kn2pvr1qv8mwqrxmj85jycr73vwfqz12hzag0ararbkfhyky"))))
+         "1n15dzfnz1gvb4cf046yhi404i3gs933qgz0ichna6r1znmh9gf4"))))
     (build-system python-build-system)
+    (inputs (list bash-minimal))
     (propagated-inputs
-     `(("gtk+" ,gtk+)
-       ("librsvg" ,librsvg)
-       ("libtorrent" ,libtorrent-rasterbar)
-       ("python-pycairo" ,python-pycairo)
-       ("python-chardet" ,python-chardet)
-       ("python-dbus" ,python-dbus)
-       ("python-mako" ,python-mako)
-       ("python-pygobject" ,python-pygobject)
-       ("python-pillow" ,python-pillow)
-       ("python-pyopenssl" ,python-pyopenssl)
-       ("python-pyxdg" ,python-pyxdg)
-       ("python-rencode" ,python-rencode)
-       ("python-service-identity" ,python-service-identity)
-       ("python-setproctitle" ,python-setproctitle)
-       ("python-six" ,python-six)
-       ("python-twisted" ,python-twisted)
-       ("python-zope-interface" ,python-zope-interface)))
+     (list gtk+
+           libtorrent-rasterbar
+           python-pycairo
+           python-chardet
+           python-dbus
+           python-mako
+           python-pygobject
+           python-pillow
+           python-pyopenssl
+           python-pyxdg
+           python-rencode
+           python-service-identity
+           python-setproctitle
+           python-six
+           python-twisted
+           python-zope-interface))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("python-wheel" ,python-wheel)))
+     (list intltool python-wheel
+           (if (string-prefix? "x86_64-" (%current-system))
+               librsvg-bootstrap
+               librsvg-2.40)))
     ;; TODO: Enable tests.
     ;; After "pytest-twisted" is packaged, HOME is set, and an X server is
     ;; started, some of the tests still fail.  There are likely some tests
@@ -550,17 +573,23 @@ features.")
      `(#:tests? #f
        #:phases
        (modify-phases %standard-phases
-         ;; Remove this phase when upgrading to version 2.0.4 or beyond, as
-         ;; the issue is fixed upstream.
-         (add-after 'unpack 'fix-gettext-warning
-           (lambda _
-             (substitute* "deluge/i18n/util.py"
-               (("names='ngettext'") "names=['ngettext']"))
-             #t))
          (add-after 'install 'wrap
-           (lambda* (#:key outputs #:allow-other-keys)
+           (lambda* (#:key native-inputs inputs outputs #:allow-other-keys)
              (let ((out               (assoc-ref outputs "out"))
-                   (gi-typelib-path   (getenv "GI_TYPELIB_PATH")))
+                   ;; "librsvg" input is only needed at build time and it
+                   ;; conflit with the "librsvg" propageted by "gtk+", so we
+                   ;; make sure there is no reference to it in the wrapper.
+                   (gi-typelib-path
+                    (string-join (filter
+                                  (lambda (x) (not (string-prefix?
+                                                    (assoc-ref
+                                                     (or native-inputs inputs)
+                                                     "librsvg")
+                                                    x)))
+                                  (string-split
+                                   (getenv "GI_TYPELIB_PATH")
+                                   #\:))
+                                 ":")))
                (for-each
                 (lambda (program)
                   (wrap-program program
diff --git a/gnu/packages/boost.scm b/gnu/packages/boost.scm
index e05a3c32fe..b53b1f4257 100644
--- a/gnu/packages/boost.scm
+++ b/gnu/packages/boost.scm
@@ -3,19 +3,22 @@
 ;;; Copyright © 2014, 2015, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2016 Eric Bavier <bavier@member.fsf.org>
-;;; Copyright © 2015, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2015, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2018, 2019, 2021 Ricardo Wurmus <rekado@elephly.net>
-;;; Copyright © 2018 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2018, 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2018, 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2019, 2020 Giacomo Leidi <goodoldpaul@autistici.org>
 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; 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>
 ;;; Copyright © 2021 Greg Hogan <code@greghogan.com>
+;;; Copyright © 2021 Aleksandr Vityazev <avityazev@posteo.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -65,29 +68,22 @@
 (define-public boost
   (package
     (name "boost")
-    (version "1.72.0")
+    (version "1.77.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://boostorg.jfrog.io/artifactory/main/release/"
                                   version "/source/boost_"
                                   (version-with-underscores version) ".tar.bz2"))
-              (patches
-               (list (boost-patch
-                      ;; 1.72.0 was released with a faulty coroutine submodule:
-                      ;; <https://github.com/boostorg/coroutine/issues/46>.
-                      "0001-revert-cease-dependence-on-range.patch" version
-                      "1zcqxzh56m1s635wqwk15j3zcs2gmjvjy2f0hid7i78s4pgm0yfs")))
               (sha256
                (base32
-                "08h7cv61fd0lzb4z50xanfqn0pdgvizjrpd1kcdgj725pisb5jar"))))
+                "0m08hhk3l7zvzajyk39qlw566q3fhixayhc2j11328qf0gy8b7zw"))))
     (build-system gnu-build-system)
-    (inputs `(("icu4c" ,icu4c)
-              ("zlib" ,zlib)))
+    (inputs (list icu4c zlib))
     (native-inputs
      `(("perl" ,perl)
        ,@(if (%current-target-system)
              '()
-             `(("python" ,python-wrapper)))
+             `(("python" ,python-minimal-wrapper)))
        ("tcsh" ,tcsh)))
     (arguments
      `(#:imported-modules ((guix build python-build-system)
@@ -128,8 +124,7 @@
                    (out (assoc-ref outputs "out")))
                (substitute* '("libs/config/configure"
                               "libs/spirit/classic/phoenix/test/runtest.sh"
-                              "tools/build/src/engine/execunix.cpp"
-                              "tools/build/src/engine/Jambase")
+                              "tools/build/src/engine/execunix.cpp")
                  (("/bin/sh") (which "sh")))
 
                (setenv "SHELL" (which "sh"))
@@ -144,13 +139,9 @@
                      '())
 
                ;; Change an #ifdef __MACH__ that really targets macOS.
-               ;; TODO: Inline this on the next rebuild cycle.
-               ,@(if (hurd-target?)
-                     '((substitute* "boost/test/utils/timer.hpp"
-                         (("defined\\(__MACH__\\)")
-                          "(defined __MACH__ && !defined __GNU__)"))
-                       #t)
-                     '())
+               (substitute* "boost/test/utils/timer.hpp"
+                 (("defined\\(__MACH__\\)")
+                  "(defined __MACH__ && !defined __GNU__)"))
 
                (invoke "./bootstrap.sh"
                        (string-append "--prefix=" out)
@@ -192,8 +183,7 @@
                           (symlink libboost_pythonNN.so
                                    (string-append "libboost_python"
                                                   (string-take python-version 1)
-                                                  ".so")))
-                        #t))))))))
+                                                  ".so")))))))))))
 
     (home-page "https://www.boost.org")
     (synopsis "Peer-reviewed portable C++ source libraries")
@@ -226,9 +216,7 @@ across a broad spectrum of applications.")
        ("libcxxabi" ,libcxxabi-6)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("clang" ,clang-6)
-       ("perl" ,perl)
-       ("tcsh" ,tcsh)))
+     (list clang-6 perl tcsh))
     (arguments
      `(#:tests? #f
        #:make-flags
@@ -247,8 +235,7 @@ across a broad spectrum of applications.")
              (let ((gcc (assoc-ref (or native-inputs inputs) "gcc")))
                (setenv "CPLUS_INCLUDE_PATH"
                        (string-join
-                        (cons (string-append (assoc-ref inputs "libcxx")
-                                             "/include/c++/v1")
+                        (cons (search-input-directory inputs "/include/c++/v1")
                               ;; Hide GCC's C++ headers so that they do not interfere with
                               ;; the Clang headers.
                               (delete (string-append gcc "/include/c++")
@@ -262,7 +249,7 @@ across a broad spectrum of applications.")
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((icu (assoc-ref inputs "icu4c"))
                    (out (assoc-ref outputs "out"))
-                   (sh  (string-append (assoc-ref inputs "bash") "/bin/sh")))
+                   (sh  (search-input-file inputs "/bin/sh")))
                (substitute* '("libs/config/configure"
                               "libs/spirit/classic/phoenix/test/runtest.sh"
                               "tools/build/src/engine/execunix.c"
@@ -288,6 +275,9 @@ across a broad spectrum of applications.")
            (lambda* (#:key make-flags #:allow-other-keys)
              (apply invoke "./b2" "install" make-flags))))))))
 
+(define-public boost-with-python3
+  (deprecated-package "boost-with-python3" boost))
+
 (define-public boost-with-python2
   (package/inherit boost
     (name "boost-python2")
@@ -295,9 +285,6 @@ across a broad spectrum of applications.")
      `(("python" ,python-2)
        ,@(alist-delete "python" (package-native-inputs boost))))))
 
-(define-public boost-with-python3
-  (deprecated-package "boost-with-python3" boost))
-
 (define-public boost-static
   (package
     (inherit boost)
@@ -377,9 +364,9 @@ across a broad spectrum of applications.")
     (properties '((hidden? . #t)))))
 
 (define-public boost-sync
-  (let ((commit "c72891d9b90e2ceb466ec859f640cd012b2d8709")
+  (let ((commit "e690de2d30e2f1649ff500c9a6f3539814994b1c")
         (version "1.55")
-        (revision "1"))
+        (revision "2"))
     (package
       (name "boost-sync")
       (version (git-version version revision commit))
@@ -391,7 +378,7 @@ across a broad spectrum of applications.")
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "197mp5z048vz5kv1m4v3jm447l2gqsyv0rbfz11dz0ns343ihbyx"))))
+                  "0473hb15affjq2804xa99ikk4y1gzi46rygd9zhncl28ib7mnn26"))))
       (build-system trivial-build-system)
       (arguments
        `(#:modules ((guix build utils))
@@ -420,7 +407,7 @@ Boost.Thread.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "13i5j43nggb46i6qpaf7gk53i7zp7pimphl7sydyfqz2m9yx5cdy"))))
+                "1prhj98jgvkj2m3ia5lcgxnl1a4h13cyzqd55skjn983rivi6090"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -473,7 +460,7 @@ signals and slots system.")
                "03b8i43pw4m767mm0cnbi77x7qhpkzpi9b1f6dpp4cmyszmnsk8l"))))
     (build-system gnu-build-system)
     (propagated-inputs
-      `(("boost" ,boost))) ; inclusion of header files
+      (list boost)) ; inclusion of header files
     (home-page "https://gitlab.com/mdds/mdds")
     (synopsis "Multi-dimensional C++ data structures and indexing algorithms")
     (description "Mdds (multi-dimensional data structure) provides a
diff --git a/gnu/packages/bootloaders.scm b/gnu/packages/bootloaders.scm
index c750339a55..54e47059ee 100644
--- a/gnu/packages/bootloaders.scm
+++ b/gnu/packages/bootloaders.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2016, 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
@@ -114,6 +114,8 @@
        ;; calling the ‘true’ binary instead.  Python is only needed during
        ;; bootstrapping (for genptl.py), not when building from a release.
        (list "PYTHON=true")
+       ;; Grub fails to load modules stripped with --strip-unneeded.
+       #:strip-flags '("--strip-debug" "--enable-deterministic-archives")
        #:phases (modify-phases %standard-phases
                   (add-after 'unpack 'patch-stuff
                    (lambda* (#:key native-inputs inputs #:allow-other-keys)
@@ -140,9 +142,9 @@
                      ;; Give the absolute file name of 'ckbcomp'.
                      (substitute* "util/grub-kbdcomp.in"
                        (("^ckbcomp ")
-                        (string-append (assoc-ref inputs "console-setup")
-                                       "/bin/ckbcomp ")))
-                     #t))
+                        (string-append
+                         (search-input-file inputs "/bin/ckbcomp")
+                         " ")))))
                   (add-after 'unpack 'set-freetype-variables
                     ;; These variables need to be set to the native versions
                     ;; of the dependencies because they are used to build
@@ -261,11 +263,11 @@ menu to select one of the installed operating systems.")
     (inherit grub)
     (name "grub-minimal")
     (inputs
-     (fold alist-delete (package-inputs grub)
-           '("lvm2" "mdadm" "fuse" "console-setup")))
+     (modify-inputs (package-inputs grub)
+       (delete "lvm2" "mdadm" "fuse" "console-setup")))
     (native-inputs
-     (fold alist-delete (package-native-inputs grub)
-           '("help2man" "texinfo" "parted" "qemu" "xorriso")))
+     (modify-inputs (package-native-inputs grub)
+       (delete "help2man" "texinfo" "parted" "qemu" "xorriso")))
     (arguments
      (substitute-keyword-arguments (package-arguments grub)
        ((#:configure-flags _ ''())
@@ -293,9 +295,8 @@ menu to select one of the installed operating systems.")
     (name "grub-efi")
     (synopsis "GRand Unified Boot loader (UEFI version)")
     (inputs
-     `(("efibootmgr" ,efibootmgr)
-       ("mtools" ,mtools)
-       ,@(package-inputs grub)))
+     (modify-inputs (package-inputs grub)
+       (prepend efibootmgr mtools)))
     (arguments
      `(;; TODO: Tests need a UEFI firmware for qemu. There is one at
        ;; https://github.com/tianocore/edk2/tree/master/OvmfPkg .
@@ -316,9 +317,8 @@ menu to select one of the installed operating systems.")
                  (lambda* (#:key inputs #:allow-other-keys)
                    (substitute* "grub-core/osdep/unix/platform.c"
                      (("efibootmgr")
-                      (string-append (assoc-ref inputs "efibootmgr")
-                                     "/sbin/efibootmgr")))
-                   #t))
+                      (search-input-file inputs
+                                         "/sbin/efibootmgr")))))
                (add-after 'patch-stuff 'use-absolute-mtools-path
                  (lambda* (#:key inputs #:allow-other-keys)
                    (let ((mtools (assoc-ref inputs "mtools")))
@@ -343,8 +343,8 @@ menu to select one of the installed operating systems.")
     (name "grub-hybrid")
     (synopsis "GRand Unified Boot loader (hybrid version)")
     (inputs
-     `(("grub" ,grub)
-       ,@(package-inputs grub-efi)))
+     (modify-inputs (package-inputs grub-efi)
+       (prepend grub)))
     (arguments
      (substitute-keyword-arguments (package-arguments grub-efi)
        ((#:modules modules `((guix build utils) (guix build gnu-build-system)))
@@ -353,8 +353,8 @@ menu to select one of the installed operating systems.")
         `(modify-phases ,phases
            (add-after 'install 'install-non-efi
              (lambda* (#:key inputs outputs #:allow-other-keys)
-               (let ((input-dir (string-append (assoc-ref inputs "grub")
-                                               "/lib/grub"))
+               (let ((input-dir (search-input-directory inputs
+                                                        "/lib/grub"))
                      (output-dir (string-append (assoc-ref outputs "out")
                                                 "/lib/grub")))
                  (for-each
@@ -379,7 +379,10 @@ menu to select one of the installed operating systems.")
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "0k8dvafd6410kqxf3kyr4y8jzmpmrih6wbjqg6gklak7945yflrc"))))
+                  "0k8dvafd6410kqxf3kyr4y8jzmpmrih6wbjqg6gklak7945yflrc"))
+                (patches
+                 (search-patches "syslinux-gcc10.patch"
+                                 "syslinux-strip-gnu-property.patch"))))
       (build-system gnu-build-system)
       (native-inputs
        `(("nasm" ,nasm)
@@ -399,6 +402,7 @@ menu to select one of the installed operating systems.")
                (string-append "MANDIR=" %output "/share/man")
                "PERL=perl"
                "bios")
+         #:strip-flags '("--strip-debug" "--enable-deterministic-archives")
          #:phases
          (modify-phases %standard-phases
            (add-after 'unpack 'patch-files
@@ -450,14 +454,14 @@ menu to select one of the installed operating systems.")
                 "0wrl43rvd8nnm1v1wyfdr17vk8q7ymib62vli6da8n9ni4lwbkk5"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)
-       ("libyaml" ,libyaml)
-       ("pkg-config" ,pkg-config)
-       ("swig" ,swig)
-       ("valgrind" ,valgrind)))
+     (list bison
+           flex
+           libyaml
+           pkg-config
+           swig
+           valgrind))
     (inputs
-     `(("python" ,python)))
+     (list python))
     (arguments
      `(#:make-flags
        (list (string-append "CC=" ,(cc-for-target))
@@ -499,21 +503,34 @@ tree binary files.  These are board description files used by Linux and BSD.")
   ;; https://bugs.launchpad.net/ubuntu/+source/u-boot/+bug/1937246
   (search-patch "u-boot-sifive-prevent-reloc-initrd-fdt.patch"))
 
+(define %u-boot-allow-disabling-openssl-patch
+  ;; Fixes build of u-boot 2021.10 without openssl
+  ;; https://lists.denx.de/pipermail/u-boot/2021-October/462728.html
+  (search-patch "u-boot-allow-disabling-openssl.patch"))
+
+(define %u-boot-rk3399-enable-emmc-phy-patch
+  ;; Fix emmc boot on rockpro64 and pinebook-pro, this was a regression
+  ;; therefore should hopefully be fixed when updating u-boot.
+  ;; https://lists.denx.de/pipermail/u-boot/2021-November/466329.html
+  (search-patch "u-boot-rk3399-enable-emmc-phy.patch"))
+
 (define u-boot
   (package
     (name "u-boot")
-    (version "2021.07")
+    (version "2021.10")
     (source (origin
 	      (patches
                (list %u-boot-rockchip-inno-usb-patch
-                     %u-boot-sifive-prevent-relocating-initrd-fdt))
+                     %u-boot-allow-disabling-openssl-patch
+                     %u-boot-sifive-prevent-relocating-initrd-fdt
+                     %u-boot-rk3399-enable-emmc-phy-patch))
               (method url-fetch)
               (uri (string-append
                     "https://ftp.denx.de/pub/u-boot/"
                     "u-boot-" version ".tar.bz2"))
               (sha256
                (base32
-                "0zm7igkdnz0w4ir8rfl2dislfrl0ip104grs5hvd30a5wkm7wari"))))
+                "1m0bvwv8r62s4wk4w3cmvs888dhv9gnfa98dczr4drk2jbhj7ryd"))))
     (native-inputs
      `(("bc" ,bc)
        ("bison" ,bison)
@@ -529,7 +546,7 @@ tree binary files.  These are board description files used by Linux and BSD.")
     (build-system  gnu-build-system)
     (home-page "https://www.denx.de/wiki/U-Boot/")
     (synopsis "ARM bootloader")
-    (description "U-Boot is a bootloader used mostly for ARM boards. It
+    (description "U-Boot is a bootloader used mostly for ARM boards.  It
 also initializes the boards (RAM etc).")
     (license license:gpl2+)))
 
@@ -538,8 +555,8 @@ also initializes the boards (RAM etc).")
     (inherit u-boot)
     (name "u-boot-tools")
     (native-inputs
-     `(("sdl2" ,sdl2)
-       ,@(package-native-inputs u-boot)))
+     (modify-inputs (package-native-inputs u-boot)
+       (prepend sdl2)))
     (arguments
      `(#:make-flags '("HOSTCC=gcc")
        #:test-target "tcheck"
@@ -585,7 +602,7 @@ def test_ctrl_c"))
                                   ;; See https://bugs.gnu.org/34717 for
                                   ;; details.
                                   (("CONFIG_FIT_SIGNATURE=y")
-                                   "CONFIG_FIT_SIGNATURE=n\nCONFIG_UT_LIB_ASN1=n")
+                                   "CONFIG_FIT_SIGNATURE=n\nCONFIG_UT_LIB_ASN1=n\nCONFIG_TOOLS_LIBCRYPTO=n")
                                   ;; This test requires a sound system, which is un-used
                                   ;; in u-boot-tools.
                                   (("CONFIG_SOUND=y") "CONFIG_SOUND=n")))
@@ -684,6 +701,12 @@ board-independent tools.")))
                                                                   suffix-len))))
                                    (sort entries string-ci<)))
                        (error "Invalid boardname ~s." ,board))))))
+           (add-after 'configure 'disable-tools-libcrypto
+             ;; Disable libcrypto due to GPL and OpenSSL license
+             ;; incompatibilities
+             (lambda _
+               (substitute* ".config"
+                 (("CONFIG_TOOLS_LIBCRYPTO=.*$") "CONFIG_TOOLS_LIBCRYPTO=n"))))
            (replace 'install
              (lambda* (#:key outputs #:allow-other-keys)
                (let* ((out (assoc-ref outputs "out"))
@@ -722,7 +745,7 @@ board-independent tools.")))
     (package
       (inherit base)
       (name "u-boot-am335x-boneblack")
-      (description "U-Boot is a bootloader used mostly for ARM boards. It
+      (description "U-Boot is a bootloader used mostly for ARM boards.  It
 also initializes the boards (RAM etc).
 
 This U-Boot is built for the BeagleBone Black, which was removed upstream,
@@ -842,7 +865,7 @@ device while it's being turned on (and a while longer).")
   (let ((base (make-u-boot-package "novena" "arm-linux-gnueabihf")))
     (package
       (inherit base)
-      (description "U-Boot is a bootloader used mostly for ARM boards. It
+      (description "U-Boot is a bootloader used mostly for ARM boards.  It
 also initializes the boards (RAM etc).
 
 This U-Boot is built for Novena.  Be advised that this version, contrary
@@ -875,9 +898,8 @@ to Novena upstream, does not load u-boot.img from the first partition.")
            `(modify-phases ,phases
               (add-after 'unpack 'set-environment
                 (lambda* (#:key inputs #:allow-other-keys)
-                  (setenv "BL31" (string-append (assoc-ref inputs "firmware")
-                                                "/bl31.elf"))
-                  #t))
+                  (setenv "BL31"
+                          (search-input-file inputs "/bl31.elf"))))
               ;; Phases do not succeed on the bl31 ELF.
               (delete 'strip)
               (delete 'validate-runpath)))))
@@ -895,13 +917,28 @@ to Novena upstream, does not load u-boot.img from the first partition.")
       (source (origin
                 (inherit (package-source u-boot))
                 (patches
-                 (search-patches "u-boot-riscv64-fix-extlinux.patch")))))))
+                 (search-patches "u-boot-riscv64-fix-extlinux.patch"
+                                 %u-boot-allow-disabling-openssl-patch)))))))
 
 (define-public u-boot-sifive-unleashed
   (make-u-boot-package "sifive_unleashed" "riscv64-linux-gnu"))
 
 (define-public u-boot-sifive-unmatched
-  (make-u-boot-package "sifive_unmatched" "riscv64-linux-gnu"))
+  (let ((base (make-u-boot-package "sifive_unmatched" "riscv64-linux-gnu")))
+    (package
+      (inherit base)
+      (arguments
+       (substitute-keyword-arguments (package-arguments base)
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'set-environment
+               (lambda* (#:key inputs #:allow-other-keys)
+                 (let ((opensbi (string-append (assoc-ref inputs "firmware")
+                                               "/fw_dynamic.bin")))
+                   (setenv "OPENSBI" opensbi))))))))
+      (inputs
+       `(("firmware" ,opensbi-generic)
+         ,@(package-inputs base))))))
 
 (define-public u-boot-rock64-rk3328
   (let ((base (make-u-boot-package "rock64-rk3328" "aarch64-linux-gnu")))
@@ -913,10 +950,8 @@ to Novena upstream, does not load u-boot.img from the first partition.")
           `(modify-phases ,phases
              (add-after 'unpack 'set-environment
                (lambda* (#:key inputs #:allow-other-keys)
-                 (let ((bl31 (string-append (assoc-ref inputs "firmware")
-                                            "/bl31.elf")))
-                   (setenv "BL31" bl31))
-                 #t))))))
+                 (let ((bl31 (search-input-file inputs "/bl31.elf")))
+                   (setenv "BL31" bl31))))))))
       (native-inputs
        `(("firmware" ,arm-trusted-firmware-rk3328)
          ,@(package-native-inputs base))))))
@@ -931,9 +966,7 @@ to Novena upstream, does not load u-boot.img from the first partition.")
            `(modify-phases ,phases
               (add-after 'unpack 'set-environment
                 (lambda* (#:key inputs #:allow-other-keys)
-                  (setenv "BL31" (string-append (assoc-ref inputs "firmware")
-                                                "/bl31.elf"))
-                  #t))
+                  (setenv "BL31" (search-input-file inputs "/bl31.elf"))))
               ;; Phases do not succeed on the bl31 ELF.
               (delete 'strip)
               (delete 'validate-runpath)))))
@@ -951,9 +984,8 @@ to Novena upstream, does not load u-boot.img from the first partition.")
            `(modify-phases ,phases
               (add-after 'unpack 'set-environment
                 (lambda* (#:key inputs #:allow-other-keys)
-                  (setenv "BL31" (string-append (assoc-ref inputs "firmware")
-                                                "/bl31.elf"))
-                  #t))
+                  (setenv "BL31"
+                          (search-input-file inputs "/bl31.elf"))))
               ;; Phases do not succeed on the bl31 ELF.
               (delete 'strip)
               (delete 'validate-runpath)))))
@@ -971,9 +1003,8 @@ to Novena upstream, does not load u-boot.img from the first partition.")
            `(modify-phases ,phases
               (add-after 'unpack 'set-environment
                 (lambda* (#:key inputs #:allow-other-keys)
-                  (setenv "BL31" (string-append (assoc-ref inputs "firmware")
-                                                "/bl31.elf"))
-                  #t))
+                  (setenv "BL31"
+                          (search-input-file inputs "/bl31.elf"))))
               ;; Phases do not succeed on the bl31 ELF.
               (delete 'strip)
               (delete 'validate-runpath)))))
@@ -1073,14 +1104,14 @@ tools, and more.")
 (define-public os-prober
   (package
     (name "os-prober")
-    (version "1.78")
+    (version "1.79")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://debian/pool/main/o/os-prober/os-prober_"
                            version ".tar.xz"))
        (sha256
-        (base32 "1sahk72blsrlirly4xlwa8jfxrpwagyn7b81p92q2s9m218rz43f"))))
+        (base32 "1vhhk0bl2j4910513gn5h3z8nsaavyv3c8764bim2klc0xyk3rmb"))))
     (build-system gnu-build-system)
     (arguments
      `(#:modules ((guix build gnu-build-system)
@@ -1245,9 +1276,7 @@ order to add a suitable bootloader menu entry.")
              (lambda _ (chdir "..") #t)))
          #:tests? #f))                  ; no test suite
       (native-inputs
-       `(("perl" ,perl)
-         ("syslinux" ,syslinux)
-         ("xorriso" ,xorriso)))
+       (list perl syslinux xorriso))
       (home-page "https://ipxe.org")
       (synopsis "PXE-compliant network boot firmware")
       (description "iPXE is a network boot firmware.  It provides a full PXE
diff --git a/gnu/packages/bootstrap.scm b/gnu/packages/bootstrap.scm
index c598cedc0a..8bd0c4eaf3 100644
--- a/gnu/packages/bootstrap.scm
+++ b/gnu/packages/bootstrap.scm
@@ -32,11 +32,13 @@
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system trivial)
   #:use-module ((guix store)
-                #:select (run-with-store add-to-store add-text-to-store))
+                #:select (%store-monad interned-file text-file store-lift))
   #:use-module ((guix derivations)
-                #:select (derivation derivation-input derivation->output-path))
-  #:use-module ((guix utils) #:select (gnu-triplet->nix-system))
+                #:select (raw-derivation derivation-input derivation->output-path))
+  #:use-module (guix utils)
+  #:use-module ((guix build utils) #:select (elf-file?))
   #:use-module ((guix gexp) #:select (lower-object))
+  #:use-module (guix monads)
   #:use-module (guix memoization)
   #:use-module (guix i18n)
   #:use-module (srfi srfi-1)
@@ -89,6 +91,15 @@
       ,(base32 "1j51gv08sfg277yxj73xd564wjq3f8xwd6s9rbcg8v9gms47m4cx"))
      ("xz"
       ,(base32 "1d779rwsrasphg5g3r37qppcqy3p7ay1jb1y83w7x4i3qsc7zjy2")))
+    ("powerpc-linux"
+     ("bash"
+      ,(base32 "0hwlw5lcyjzadprf5fm0cv4zb6jw667g9amnmhq0lbixasy7j72j"))
+     ("mkdir"
+      ,(base32 "12lfwh5p8pp06250wgi9mdvjv1jdfpd5xpmvfc0616aj0xqh09hp"))
+     ("tar"
+      ,(base32 "00sbmwl8qh6alxv9mw4hvj1j4yipwmw5mrw6qad8bi2pr7ya5386"))
+     ("xz"
+      ,(base32 "0hi47y6zh5zz137i59l5ibw92x6g54zn7ris1b1ym9rvavsasg7b")))
     ("armhf-linux"
      ("bash"
       ,(base32 "0s6f1s26g4dsrrkl39zblvwpxmbzi6n9mgqf6vxsqz42gik6bgyn"))
@@ -133,12 +144,22 @@
      ("tar"
       ,(base32 "150c8948cz8r208g6qgn2dn4f4zs5kpgbpbg6bwag6yw42rapw2l"))
      ("xz"
-      ,(base32 "0v5738idy9pqzcbrjdpxi5c6qs5m78zrpsydmrpx5cfcfzbkxzjh")))))
+      ,(base32 "0v5738idy9pqzcbrjdpxi5c6qs5m78zrpsydmrpx5cfcfzbkxzjh")))
+    ("riscv64-linux"
+     ("bash"
+      ,(base32 "0almlf73k6hbm495kzf4bw1rzsg5qddn7z2rf5l3d1xcapac2hj3"))
+     ("mkdir"
+      ,(base32 "0rg1amdcqfkplcy1608jignl8jq0wqzfkp430mwik3f62959gya6"))
+     ("tar"
+      ,(base32 "17d3x27qhiwk7h6ns0xrvbrq0frxz89mjjh2cdwx2rraq5x6wffm"))
+     ("xz"
+      ,(base32 "0nxn75xf386vdq3igmgm8gnyk4h4x0cm8jv71vlb2jvwxh0cyw1q")))))
 
 (define %bootstrap-executable-base-urls
   ;; This is where the bootstrap executables come from.
   '("https://git.savannah.gnu.org/cgit/guix.git/plain/gnu/packages/bootstrap/"
     "https://alpha.gnu.org/gnu/guix/bootstrap/"
+    "http://flashner.co.il/guix/bootstrap/"
     "http://lilypond.org/janneke/guix/"))
 
 (define (bootstrap-executable-file-name system program)
@@ -146,6 +167,8 @@
   (match system
     ("powerpc64le-linux" (string-append system "/20210106/" program))
     ("i586-gnu" (string-append system "/20200326/" program))
+    ("powerpc-linux" (string-append system "/20200923/bin/" program))
+    ("riscv64-linux" (string-append system "/20210725/bin/" program))
     (_ (string-append system "/" program
                       "?id=44f07d1dc6806e97c4e9ee3e6be883cc59dc666e"))))
 
@@ -341,12 +364,16 @@ or false to signal an error."
                  (match system
                    ("aarch64-linux"
                     "/20170217/guile-2.0.14.tar.xz")
+                   ("powerpc-linux"
+                    "/20200923/guile-2.0.14.tar.xz")
                    ("armhf-linux"
                     "/20150101/guile-2.0.11.tar.xz")
                    ("i586-gnu"
                     "/20200326/guile-static-stripped-2.0.14-i586-pc-gnu.tar.xz")
                    ("powerpc64le-linux"
                     "/20210106/guile-static-stripped-2.0.14-powerpc64le-linux-gnu.tar.xz")
+                   ("riscv64-linux"
+                    "/20210725/guile-3.0.2.tar.xz")
                    (_
                     "/20131110/guile-2.0.9.tar.xz"))))
 
@@ -366,7 +393,11 @@ or false to signal an error."
     ("aarch64-linux"
      (base32 "1giy2aprjmn5fp9c4s9r125fljw4wv6ixy5739i5bffw4jgr0f9r"))
     ("i586-gnu"
-     (base32 "0wgqpsmvg25rnqn49ap7kwd2qxccd8dr4lllzp7i3rjvgav27vac"))))
+     (base32 "0wgqpsmvg25rnqn49ap7kwd2qxccd8dr4lllzp7i3rjvgav27vac"))
+    ("powerpc-linux"
+     (base32 "1by2p7s27fbyjzfkcw8h65h4kkqh7d23kv4sgg5jppjn2qx7swq4"))
+    ("riscv64-linux"
+     (base32 "12pqmhsbbp7hh9r1bjdl14l3a4q06plpz6dcks9dysb4czay8p9f"))))
 
 (define (bootstrap-guile-origin system)
   "Return an <origin> object for the Guile tarball of SYSTEM."
@@ -376,59 +407,58 @@ or false to signal an error."
               %bootstrap-base-urls))
     (sha256 (bootstrap-guile-hash system))))
 
-(define (download-bootstrap-guile store system)
+(define (download-bootstrap-guile system)
   "Return a derivation that downloads the bootstrap Guile tarball for SYSTEM."
   (let* ((path (bootstrap-guile-url-path system))
          (base (basename path))
          (urls (map (cut string-append <> path) %bootstrap-base-urls)))
-    (run-with-store store
-      (url-fetch urls 'sha256 (bootstrap-guile-hash system)
-                 #:system system))))
+    (url-fetch urls 'sha256 (bootstrap-guile-hash system)
+               #:system system)))
 
-(define* (raw-build store name inputs
+(define* (raw-build name inputs
                     #:key outputs system search-paths
                     #:allow-other-keys)
   (define (->store file)
-    (run-with-store store
-      (lower-object (bootstrap-executable file system)
-                    system)))
-
-  (let* ((tar   (->store "tar"))
-         (xz    (->store "xz"))
-         (mkdir (->store "mkdir"))
-         (bash  (->store "bash"))
-         (guile (download-bootstrap-guile store system))
-         ;; The following code, run by the bootstrap guile after it is
-         ;; unpacked, creates a wrapper for itself to set its load path.
-         ;; This replaces the previous non-portable method based on
-         ;; reading the /proc/self/exe symlink.
-         (make-guile-wrapper
-          '(begin
-             (use-modules (ice-9 match))
-             (match (command-line)
-               ((_ out bash)
-                (let ((bin-dir    (string-append out "/bin"))
-                      (guile      (string-append out "/bin/guile"))
-                      (guile-real (string-append out "/bin/.guile-real"))
-                      ;; We must avoid using a bare dollar sign in this code,
-                      ;; because it would be interpreted by the shell.
-                      (dollar     (string (integer->char 36))))
-                  (chmod bin-dir #o755)
-                  (rename-file guile guile-real)
-                  (call-with-output-file guile
-                    (lambda (p)
-                      (format p "\
+    (lower-object (bootstrap-executable file system)
+                  system))
+
+  (define (make-guile-wrapper bash guile-real)
+    ;; The following code, run by the bootstrap guile after it is unpacked,
+    ;; creates a wrapper for itself to set its load path.  This replaces the
+    ;; previous non-portable method based on reading the /proc/self/exe
+    ;; symlink.
+    '(begin
+       (use-modules (ice-9 match))
+       (match (command-line)
+         ((_ out bash)
+          (let ((bin-dir    (string-append out "/bin"))
+                (guile      (string-append out "/bin/guile"))
+                (guile-real (string-append out "/bin/.guile-real"))
+                ;; We must avoid using a bare dollar sign in this code,
+                ;; because it would be interpreted by the shell.
+                (dollar     (string (integer->char 36))))
+            (chmod bin-dir #o755)
+            (rename-file guile guile-real)
+            (call-with-output-file guile
+              (lambda (p)
+                (format p "\
 #!~a
 export GUILE_SYSTEM_PATH=~a/share/guile/2.0
 export GUILE_SYSTEM_COMPILED_PATH=~a/lib/guile/2.0/ccache
 exec -a \"~a0\" ~a \"~a@\"\n"
-                              bash out out dollar guile-real dollar)))
-                  (chmod guile   #o555)
-                  (chmod bin-dir #o555))))))
-         (builder
-          (add-text-to-store store
-                             "build-bootstrap-guile.sh"
-                             (format #f "
+                        bash out out dollar guile-real dollar)))
+            (chmod guile   #o555)
+            (chmod bin-dir #o555))))))
+
+  (mlet* %store-monad ((tar   (->store "tar"))
+                       (xz    (->store "xz"))
+                       (mkdir (->store "mkdir"))
+                       (bash  (->store "bash"))
+                       (guile (download-bootstrap-guile system))
+                       (wrapper -> (make-guile-wrapper bash guile))
+                       (builder
+                        (text-file "build-bootstrap-guile.sh"
+                                   (format #f "
 echo \"unpacking bootstrap Guile to '$out'...\"
 ~a $out
 cd $out
@@ -441,19 +471,89 @@ $out/bin/guile -c ~s $out ~a
 
 # Sanity check.
 $out/bin/guile --version~%"
-                                     (derivation->output-path mkdir)
-                                     (derivation->output-path xz)
-                                     (derivation->output-path tar)
-                                     (format #f "~s" make-guile-wrapper)
-                                     (derivation->output-path bash)))))
-    (derivation store name
-                (derivation->output-path bash) `(,builder)
-                #:system system
-                #:inputs (map derivation-input
-                              (list bash mkdir tar xz guile))
-                #:sources (list builder)
-                #:env-vars `(("GUILE_TARBALL"
-                              . ,(derivation->output-path guile))))))
+                                           (derivation->output-path mkdir)
+                                           (derivation->output-path xz)
+                                           (derivation->output-path tar)
+                                           (object->string wrapper)
+                                           (derivation->output-path bash)))))
+    (raw-derivation name
+                    (derivation->output-path bash) `(,builder)
+                    #:system system
+                    #:inputs (map derivation-input
+                                  (list bash mkdir tar xz guile))
+                    #:sources (list builder)
+                    #:env-vars `(("GUILE_TARBALL"
+                                  . ,(derivation->output-path guile))))))
+
+(define* (raw-build-guile3 name inputs
+                    #:key outputs system search-paths
+                    #:allow-other-keys)
+  (define (->store file)
+    (lower-object (bootstrap-executable file system)
+                  system))
+
+  (define (make-guile-wrapper bash guile-real)
+    ;; The following code, run by the bootstrap guile after it is unpacked,
+    ;; creates a wrapper for itself to set its load path.  This replaces the
+    ;; previous non-portable method based on reading the /proc/self/exe
+    ;; symlink.
+    '(begin
+       (use-modules (ice-9 match))
+       (match (command-line)
+         ((_ out bash)
+          (let ((bin-dir    (string-append out "/bin"))
+                (guile      (string-append out "/bin/guile"))
+                (guile-real (string-append out "/bin/.guile-real"))
+                ;; We must avoid using a bare dollar sign in this code,
+                ;; because it would be interpreted by the shell.
+                (dollar     (string (integer->char 36))))
+            (chmod bin-dir #o755)
+            (rename-file guile guile-real)
+            (call-with-output-file guile
+              (lambda (p)
+                (format p "\
+#!~a
+export GUILE_SYSTEM_PATH=~a/share/guile/3.0
+export GUILE_SYSTEM_COMPILED_PATH=~a/lib/guile/3.0/ccache
+exec -a \"~a0\" ~a \"~a@\"\n"
+                        bash out out dollar guile-real dollar)))
+            (chmod guile   #o555)
+            (chmod bin-dir #o555))))))
+
+  (mlet* %store-monad ((tar   (->store "tar"))
+                       (xz    (->store "xz"))
+                       (mkdir (->store "mkdir"))
+                       (bash  (->store "bash"))
+                       (guile (download-bootstrap-guile system))
+                       (wrapper -> (make-guile-wrapper bash guile))
+                       (builder
+                        (text-file "build-bootstrap-guile.sh"
+                                   (format #f "
+echo \"unpacking bootstrap Guile to '$out'...\"
+~a $out
+cd $out
+~a -dc < $GUILE_TARBALL | ~a xv
+
+# Use the bootstrap guile to create its own wrapper to set the load path.
+GUILE_SYSTEM_PATH=$out/share/guile/3.0 \
+GUILE_SYSTEM_COMPILED_PATH=$out/lib/guile/3.0/ccache \
+$out/bin/guile -c ~s $out ~a
+
+# Sanity check.
+$out/bin/guile --version~%"
+                                           (derivation->output-path mkdir)
+                                           (derivation->output-path xz)
+                                           (derivation->output-path tar)
+                                           (object->string wrapper)
+                                           (derivation->output-path bash)))))
+    (raw-derivation name
+                    (derivation->output-path bash) `(,builder)
+                    #:system system
+                    #:inputs (map derivation-input
+                                  (list bash mkdir tar xz guile))
+                    #:sources (list builder)
+                    #:env-vars `(("GUILE_TARBALL"
+                                  . ,(derivation->output-path guile))))))
 
 (define* (make-raw-bag name
                        #:key source inputs native-inputs outputs
@@ -462,7 +562,9 @@ $out/bin/guile --version~%"
     (name name)
     (system system)
     (build-inputs inputs)
-    (build raw-build)))
+    (build (cond ((target-riscv64?)
+                  raw-build-guile3)
+                 (else raw-build)))))
 
 (define %bootstrap-guile
   ;; The Guile used to run the build scripts of the initial derivations.
@@ -500,6 +602,10 @@ $out/bin/guile --version~%"
                                              "/20210106/static-binaries-0-powerpc64le-linux-gnu.tar.xz")
                                             ("i586-gnu"
                                              "/20200326/static-binaries-0-i586-pc-gnu.tar.xz")
+                                            ("powerpc-linux"
+                                             "/20200923/static-binaries.tar.xz")
+                                            ("riscv64-linux"
+                                             "/20210725/static-binaries.tar.xz")
                                             (_
                                              "/20131110/static-binaries.tar.xz")))
                                      %bootstrap-base-urls))
@@ -523,6 +629,12 @@ $out/bin/guile --version~%"
                               ("i586-gnu"
                                (base32
                                 "17kllqnf3fg79gzy9ansgi801c46yh9c23h4d923plvb0nfm1cfn"))
+                              ("powerpc-linux"
+                               (base32
+                                "0kspxy0yczan2vlih6aa9hailr2inz000fqa0gn5x9d1fxxa5y8m"))
+                              ("riscv64-linux"
+                               (base32
+                                "0x0xjlpmyh6rkr51p00gp6pscgl6zjida1rsg8vk3rinyi6rrbkg"))
                               ("mips64el-linux"
                                (base32
                                 "072y4wyfsj1bs80r6vbybbafy8ya4vfy7qj25dklwk97m6g71753"))))))
@@ -573,6 +685,10 @@ $out/bin/guile --version~%"
                                              "/20210106/binutils-static-stripped-2.34-powerpc64le-linux-gnu.tar.xz")
                                             ("i586-gnu"
                                              "/20200326/binutils-static-stripped-2.34-i586-pc-gnu.tar.xz")
+                                            ("powerpc-linux"
+                                             "/20200923/binutils-2.35.1.tar.xz")
+                                            ("riscv64-linux"
+                                             "/20210725/binutils-2.34.tar.xz")
                                             (_
                                              "/20131110/binutils-2.23.2.tar.xz")))
                                      %bootstrap-base-urls))
@@ -593,9 +709,15 @@ $out/bin/guile --version~%"
                               ("powerpc64le-linux"
                                (base32
                                 "1klxy945c61134mzhqzz2gbk8w0n8jq7arwkrvz78d22ff2q0cwz"))
+                              ("riscv64-linux"
+                               (base32
+                                "0n9qf4vbilfmh1lknhw000waakj4q6s50pnjazr5137skm976z5m"))
                               ("i586-gnu"
                                (base32
                                 "11kykv1kmqc5wln57rs4klaqa13hm952smkc57qcsyss21kfjprs"))
+                              ("powerpc-linux"
+                               (base32
+                                "0asbg1c4avkrvh057mx0942xwddd136jni382zqsxzn79ls42yq8"))
                               ("mips64el-linux"
                                (base32
                                 "1x8kkhcxmfyzg1ddpz2pxs6fbdl6412r7x0nzbmi5n7mj8zw2gy7"))))))
@@ -653,6 +775,10 @@ $out/bin/guile --version~%"
                                        "/20210106/glibc-stripped-2.31-powerpc64le-linux-gnu.tar.xz")
                                       ("i586-gnu"
                                        "/20200326/glibc-stripped-2.31-i586-pc-gnu.tar.xz")
+                                      ("powerpc-linux"
+                                       "/20200923/glibc-2.32.tar.xz")
+                                      ("riscv64-linux"
+                                       "/20210725/glibc-2.31.tar.xz")
                                       (_
                                        "/20131110/glibc-2.18.tar.xz")))
                                %bootstrap-base-urls))
@@ -673,9 +799,15 @@ $out/bin/guile --version~%"
                         ("powerpc64le-linux"
                          (base32
                           "1a1df6z8gkaq09md3jy94lixnh20599p58p0s856p10xwjaqr1iz"))
+                        ("riscv64-linux"
+                         (base32
+                          "0d9x80vm7ca1pd2whcmpm1h14zxpb58kqajlxlwffzm04xfsjnxm"))
                         ("i586-gnu"
                          (base32
                           "14ddm10lpbas8bankmn5bcrlqvz1v5dnn1qjzxb19r57vd2w5952"))
+                        ("powerpc-linux"
+                         (base32
+                          "0smmssyjrlk5cvx49586smmk81gkwff0i6r91n4rir4jm6ba25sb"))
                         ("mips64el-linux"
                          (base32
                           "0k97a3whzx3apsi9n2cbsrr79ad6lh00klxph9hw4fqyp1abkdsg")))))))))
@@ -749,6 +881,10 @@ exec ~a/bin/.gcc-wrapped -B~a/lib \
                                         "/20210106/gcc-stripped-5.5.0-powerpc64le-linux-gnu.tar.xz")
                                        ("i586-gnu"
                                         "/20200326/gcc-stripped-5.5.0-i586-pc-gnu.tar.xz")
+                                       ("powerpc-linux"
+                                        "/20200923/gcc-5.5.0.tar.xz")
+                                       ("riscv64-linux"
+                                        "/20210725/gcc-7.5.0.tar.xz")
                                        (_
                                         "/20131110/gcc-4.8.2.tar.xz")))
                                 %bootstrap-base-urls))
@@ -769,17 +905,26 @@ exec ~a/bin/.gcc-wrapped -B~a/lib \
                          ("powerpc64le-linux"
                           (base32
                            "151kjsai25vz2s667bgzpisx8f281fpl3n9pxz2yrp9jlnadz3m1"))
+                         ("riscv64-linux"
+                          (base32
+                           "1k4mbnb54wj2q37fgshf5dfixixqnhn002vhzvi9pnb57xb9v14d"))
                          ("i586-gnu"
                           (base32
                            "1j2zc58wzil71a34h7c70sd68dmqvcscrw3rmn2whq79vd70zvv5"))
+                         ("powerpc-linux"
+                          (base32
+                           "1p7df3yixhm87dw5sccc6yn1i9db1r9hnmsg87wq5xi4rfmirq7w"))
                          ("mips64el-linux"
                           (base32
                            "1m5miqkyng45l745n0sfafdpjkqv9225xf44jqkygwsipj2cv9ks")))))))))
     (native-search-paths
      (list (search-path-specification
-            (variable "CPATH")
+            (variable "C_INCLUDE_PATH")
             (files '("include")))
            (search-path-specification
+            (variable "CPLUS_INCLUDE_PATH")
+            (files '("include/c++" "include")))
+           (search-path-specification
             (variable "LIBRARY_PATH")
             (files '("lib" "lib64")))))
     (synopsis "Bootstrap binaries of the GNU Compiler Collection")
diff --git a/gnu/packages/browser-extensions.scm b/gnu/packages/browser-extensions.scm
index 925bb28448..eaf67a8ea0 100644
--- a/gnu/packages/browser-extensions.scm
+++ b/gnu/packages/browser-extensions.scm
@@ -51,7 +51,7 @@ supported content to the Kodi media center.")
 (define ublock-origin
   (package
     (name "ublock-origin")
-    (version "1.38.0")
+    (version "1.40.8")
     (home-page "https://github.com/gorhill/uBlock")
     (source (origin
               (method git-fetch)
@@ -60,7 +60,7 @@ supported content to the Kodi media center.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0zw8ys60x2nszdiad0k1hnhr3ddgh54f07c978l26yvvlqnvmgbh"))))
+                "17pywblp87npj5z3zyvy9rmllnxhm916fnfyyfbvfbczswkbp78s"))))
     (build-system gnu-build-system)
     (outputs '("xpi" "firefox" "chromium"))
     (arguments
@@ -98,8 +98,7 @@ supported content to the Kodi media center.")
                (copy-recursively "dist/build/uBlock0.firefox" firefox)
                (copy-recursively "dist/build/uBlock0.chromium" chromium)))))))
     (native-inputs
-     `(("python" ,python-wrapper)
-       ("zip" ,zip)))
+     (list python-wrapper zip))
     (synopsis "Block unwanted content from web sites")
     (description
      "uBlock Origin is a @dfn{wide spectrum blocker} for IceCat and
diff --git a/gnu/packages/build-tools.scm b/gnu/packages/build-tools.scm
index 7c44d2b80f..437b0d3550 100644
--- a/gnu/packages/build-tools.scm
+++ b/gnu/packages/build-tools.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017, 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017 Corentin Bocquillon <corentin@nybble.fr>
-;;; Copyright © 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2017–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Fis Trivial <ybbs.daans@hotmail.com>
 ;;; Copyright © 2018 Tomáš Čech <sleep_walker@gnu.org>
 ;;; Copyright © 2018, 2020 Marius Bakke <mbakke@fastmail.com>
@@ -44,7 +44,6 @@
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages cpp)
-  #:use-module (gnu packages gcc)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages logging)
   #:use-module (gnu packages lua)
@@ -91,7 +90,7 @@
     (native-inputs
      `(("python" ,python-2)))
     (inputs
-     `(("lua" ,lua)))
+     (list lua))
     (home-page "https://matricks.github.io/bam/")
     (synopsis "Fast and flexible build system")
     (description "Bam is a fast and flexible build system.  Bam uses Lua to
@@ -103,29 +102,32 @@ makes a few sacrifices to acquire fast full and incremental build times.")
 (define-public bear
   (package
     (name "bear")
-    (version "3.0.4")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/rizsotto/Bear")
-                    (commit version)))
-              (file-name (git-file-name name version))
-              (patches (search-patches
-                        "bear-disable-preinstall-tests.patch"))
-              (sha256
-               (base32
-                "15r22sbk5bibrhf54lf0shiqw1gnsik24fr5as96w3hnj6iahgwn"))))
+    (version "3.0.17")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/rizsotto/Bear")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0klbk99qphibrp2944w8gn6x1dwwgrbm7f2bh530wjp5h3bpkr45"))))
     (build-system cmake-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'disable-TEST_BEFORE_INSTALL
+                    (lambda _
+                      (substitute* "CMakeLists.txt"
+                        ;; Delete the matching line—and comment out the next.
+                        ((".*TEST_(BEFORE_INSTALL|COMMAND).*") "#"))))
                   (add-before 'check 'set-build-environment
                     (lambda _
-                      (setenv "CC" "gcc")
-                      #t))
-                  ;; TODO: Test Configuration is Incomplete
+                      (setenv "CC" "gcc")))
                   (replace 'check
-                    (lambda _
-                      (invoke "ctest"))))))
+                    ;; TODO: Test configuration is incomplete.
+                    (lambda* (#:key tests? #:allow-other-keys)
+                      (when tests?
+                        (invoke "ctest")))))))
     (inputs
      `(("c-ares" ,c-ares)
        ("fmt" ,fmt)
@@ -137,7 +139,6 @@ makes a few sacrifices to acquire fast full and incremental build times.")
        ("spdlog" ,spdlog)))
     (native-inputs
      `(("abseil-cpp" ,abseil-cpp)
-       ("gcc-9" ,gcc-9) ; for <filesystem>, #44896
        ("googletest" ,googletest)
        ("openssl" ,openssl)
        ("pkg-config" ,pkg-config)
@@ -154,19 +155,19 @@ generate such a compilation database.")
 (define-public bmake
   (package
     (name "bmake")
-    (version "20210206")
+    (version "20211212")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
              "http://www.crufty.net/ftp/pub/sjg/bmake-" version ".tar.gz"))
        (sha256
-        (base32 "07n9avzdg6gifrzyddnyzada5s5rzklvbqfpv5drljpxcgpqpvwg"))))
+        (base32 "17lywks7fy5538vwyyvbvxcq5mgnd5si7f2qgw85sgqj7mdr4xdd"))))
     (build-system gnu-build-system)
     (inputs
-     `(("bash" ,bash-minimal)))
+     (list bash-minimal))
     (native-inputs
-     `(("coreutils" ,coreutils)))
+     (list coreutils))
     (arguments
      `(#:tests? #f                      ; test during build
        #:phases
@@ -180,8 +181,7 @@ generate such a compilation database.")
            (lambda _
              (substitute* "unit-tests/Makefile"
                (("cmd-interrupt") "")
-               (("varmod-localtime") ""))
-             #t)))
+               (("varmod-localtime") "")))))
        #:configure-flags
        (list
         (string-append
@@ -264,7 +264,7 @@ files and generates build instructions for the Ninja build system.")
 (define-public meson
   (package
     (name "meson")
-    (version "0.53.2")
+    (version "0.60.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/mesonbuild/meson/"
@@ -272,19 +272,30 @@ files and generates build instructions for the Ninja build system.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "07y2hh9dfn1m9g4bsy49nbn3vdmd0b2iwr8bxg19fhqq6c7q73ry"))))
+                "13mrrizg4vl6n5k7fz6amyafnn3i097dcarr552qc0ca6nlmzjl7"))
+              (patches (search-patches
+                        "meson-allow-dirs-outside-of-prefix.patch"))))
     (build-system python-build-system)
     (arguments
-     `(;; FIXME: Tests require many additional inputs, a fix for the RUNPATH
-       ;; patch in meson-for-build, and patching many hard-coded file system
-       ;; locations in "run_unittests.py".
+     `(;; FIXME: Tests require many additional inputs and patching many
+       ;; hard-coded file system locations in "run_unittests.py".
        #:tests? #f
        #:phases (modify-phases %standard-phases
                   ;; Meson calls the various executables in out/bin through the
                   ;; Python interpreter, so we cannot use the shell wrapper.
-                  (delete 'wrap))))
-    (inputs `(("ninja" ,ninja)))
-    (propagated-inputs `(("python" ,python)))
+                  (replace 'wrap
+                    (lambda* (#:key outputs inputs #:allow-other-keys)
+                      (let ((python-version
+                             (python-version (assoc-ref inputs "python")))
+                            (output (assoc-ref outputs "out")))
+                        (substitute* (string-append output "/bin/meson")
+                          (("# EASY-INSTALL-ENTRY-SCRIPT")
+                           (format #f "\
+import sys
+sys.path.insert(0, '~a/lib/python~a/site-packages')
+# EASY-INSTALL-ENTRY-SCRIPT"
+                                   output python-version)))))))))
+    (inputs (list python-wrapper ninja))
     (home-page "https://mesonbuild.com/")
     (synopsis "Build system designed to be fast and user-friendly")
     (description
@@ -296,25 +307,11 @@ files}, are written in a custom domain-specific language (@dfn{DSL}) that
 resembles Python.")
     (license license:asl2.0)))
 
-;; Added temporarily for packages that need it.
-;; TODO: Remove when core-updates is merged.
-(define-public meson-0.55
-  (package
-    (inherit meson)
-    (version "0.55.1")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://github.com/mesonbuild/meson/"
-                                  "releases/download/" version  "/meson-"
-                                  version ".tar.gz"))
-              (sha256
-               (base32
-                "1070kjiirxxdfppmrhi3wsc6rykay1zlciqrzayjhjg0hkw42mrv"))))))
-
-(define-public meson-next
-  (package
-    (inherit meson)
-    (version "0.57.2")
+;;; This older Meson variant is kept for now for gtkmm and others that may
+;;; have problems with 0.60.
+(define-public meson-0.59
+  (package/inherit meson
+    (version "0.59.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/mesonbuild/meson/"
@@ -322,18 +319,9 @@ resembles Python.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "1iac7p99zfgkznq4qlnkk7b8xwwlilcrnkf33sczm56yqnqyg0rs"))))))
-
-(define-public meson-for-build
-  (package
-    (inherit meson)
-    (name "meson-for-build")
-    (source (origin
-              (inherit (package-source meson))
-              (patches (search-patches "meson-for-build-rpath.patch"))))
-
-    ;; People should probably install "meson", not "meson-for-build".
-    (properties `((hidden? . #t)))))
+                "117cm8794h291lca1wljz1pwnzidgbvrpg3mw3np6ksma368hyd7"))
+              (patches (search-patches
+                        "meson-allow-dirs-outside-of-prefix.patch"))))))
 
 (define-public premake4
   (package
@@ -348,7 +336,7 @@ resembles Python.")
                 "1017rd0wsjfyq2jvpjjhpszaa7kmig6q1nimw76qx3cjz2868lrn"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("unzip" ,unzip))) ; for unpacking the source
+     (list unzip)) ; for unpacking the source
     (arguments
      `(#:make-flags (list (string-append "CC=" ,(cc-for-target)))
        #:tests? #f ; No test suite
@@ -455,12 +443,11 @@ other lower-level build files.")))
                    (display "au BufNewFile,BufRead Tupfile,*.tup setf tup")))
                #t))))))
     (inputs
-     `(("fuse" ,fuse)
-       ("pcre" ,pcre)
-       ("pcre" ,pcre "bin") ; pcre-config
-       ("sqlite" ,sqlite)))
+     (list fuse pcre
+           `(,pcre "bin") ; pcre-config
+           sqlite))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://gittup.org/tup/")
     (synopsis "Fast build system that's hard to get wrong")
     (description "Tup is a generic build system based on a directed acyclic
@@ -497,11 +484,9 @@ a build worked by accident.")
                 (string-append bin "osc"))
                #t))))))
     (native-inputs
-     `(("python-chardet" ,python-chardet)))
+     (list python-chardet))
     (inputs
-     `(("python-m2crypto" ,python-m2crypto)
-       ("python-pycurl" ,python-pycurl)
-       ("rpm" ,rpm)))                   ; for python-rpm
+     (list python-m2crypto python-pycurl rpm))                   ; for python-rpm
     (home-page "https://github.com/openSUSE/osc")
     (synopsis "Open Build Service command line tool")
     (description "@command{osc} is a command line interface to the Open Build
@@ -530,10 +515,9 @@ be reached via direct API calls.")
              (substitute* "setup.py" (("^ *'shutilwhich'\n") ""))
              (substitute* "compiledb/compiler.py" (("shutilwhich") "shutil")))))))
     (propagated-inputs
-      `(("python-bashlex" ,python-bashlex)
-        ("python-click" ,python-click)))
+      (list python-bashlex python-click))
     (native-inputs
-      `(("python-pytest" ,python-pytest)))
+      (list python-pytest))
     (home-page
       "https://github.com/nickdiego/compiledb")
     (synopsis
diff --git a/gnu/packages/busybox.scm b/gnu/packages/busybox.scm
index 5b038870de..7a548582f3 100644
--- a/gnu/packages/busybox.scm
+++ b/gnu/packages/busybox.scm
@@ -19,6 +19,7 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages busybox)
+  #:use-module (guix gexp)
   #:use-module (guix licenses)
   #:use-module (guix packages)
   #:use-module (guix download)
@@ -106,11 +107,11 @@
                (apply invoke "make"
                        (string-append "CONFIG_PREFIX=" out)
                        "install" make-flags)))))))
-    (native-inputs `(("perl" ,perl) ; needed to generate the man pages (pod2man)
-                     ;; The following are needed by the tests.
-                     ("inetutils" ,inetutils)
-                     ("which" ,(@ (gnu packages base) which))
-                     ("zip" ,zip)))
+    (native-inputs (list perl ; needed to generate the man pages (pod2man)
+                         ;; The following are needed by the tests.
+                         inetutils
+                         (@ (gnu packages base) which)
+                         zip))
     (synopsis "Many common UNIX utilities in a single executable")
     (description "BusyBox combines tiny versions of many common UNIX utilities
 into a single small executable.  It provides a fairly complete environment for
@@ -122,7 +123,7 @@ any small or embedded system.")
 (define-public toybox
   (package
     (name "toybox")
-    (version "0.8.3")
+    (version "0.8.6")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -130,31 +131,36 @@ any small or embedded system.")
                     version ".tar.gz"))
               (sha256
                (base32
-                "00aw9d809wj1bqlb2fsssdgz7rj0363ya14py0gfdm0rkp98zcpa"))))
+                "0jq3368jps6jg717ikzhlc6whml3k2s9xy69zpj4i0r35c5ck622"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'set-environment-variables
-           (lambda _
-             (setenv "CC" ,(cc-for-target))
-             (setenv "HOSTCC" (which "gcc"))
-             #t))
-         (replace 'configure
-           (lambda _ (invoke "make" "defconfig")))
-         (replace 'install
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out")))
-               (invoke "make"
-                       (string-append "PREFIX=" out)
-                       "install"))))
-         (add-after 'install 'remove-usr-directory
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out")))
-               (delete-file-recursively (string-append out "/usr"))
-               #t))))
-       #:test-target "tests"))
-    (native-inputs `(("bc" ,bc)))
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-before 'configure 'set-environment-variables
+                 (lambda _
+                   (setenv "CC" #$(cc-for-target))
+                   (setenv "HOSTCC" (which "gcc"))))
+               (replace 'configure
+                 (lambda _ (invoke "make" "defconfig")))
+               (add-before 'check 'fix-or-skip-broken-tests
+                 (lambda _
+                   ;; Some tests expect $USER to magically be the current user.
+                   (setenv "USER" (passwd:name (getpwnam (geteuid))))
+                   ;; This expects directories to be exactly 4K.  They aren't!
+                   (delete-file "tests/du.test")
+                   ;; Delete tests that expect a root or 0 user to exist.
+                   (substitute* "tests/id.test"
+                     (("^testing .*[ \\(]root.*") ""))))
+               (replace 'install
+                 (lambda* (#:key outputs #:allow-other-keys)
+                   (invoke "make"
+                           (string-append "PREFIX=" #$output)
+                           "install")))
+               (add-after 'install 'remove-usr-directory
+                 (lambda* (#:key outputs #:allow-other-keys)
+                   (delete-file-recursively (string-append #$output "/usr")))))
+           #:test-target "tests"))
+    (native-inputs (list bc))
     (synopsis "Many common UNIX utilities in a single executable")
     (description "ToyBox combines tiny versions of many common UNIX utilities
 into a single small executable.  It provides a fairly complete environment for
diff --git a/gnu/packages/c.scm b/gnu/packages/c.scm
index 1b9003ce09..459d996fa2 100644
--- a/gnu/packages/c.scm
+++ b/gnu/packages/c.scm
@@ -1,10 +1,10 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2016, 2018 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2016, 2017, 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2016, 2017, 2018, 2019, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2018, 2020, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018, 2019 Pierre Neidhardt <mail@ambrevar.xyz>
 ;;; Copyright © 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
-;;; Copyright © 2019 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2019, 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;; Copyright © 2019 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2020, 2021 Marius Bakke <marius@gnu.org>
@@ -30,6 +30,7 @@
 
 (define-module (gnu packages c)
   #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix gexp)
   #:use-module (guix utils)
   #:use-module (guix packages)
   #:use-module (guix download)
@@ -55,6 +56,7 @@
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages tls)
+  #:use-module (gnu packages web)
   #:use-module (gnu packages xml))
 
 (define-public tcc
@@ -69,8 +71,7 @@
                (base32
                 "177bdhwzrnqgyrdv1dwvpd04fcxj68s5pm1dzwny6359ziway8yy"))))
     (build-system gnu-build-system)
-    (native-inputs `(("perl" ,perl)
-                     ("texinfo" ,texinfo)))
+    (native-inputs (list perl texinfo))
     (arguments
      `(#:configure-flags (list (string-append "--elfinterp="
                                               (assoc-ref %build-inputs "libc")
@@ -130,8 +131,7 @@ standard.")
          (replace 'check
            (lambda _ (invoke "make" "-C" "cc/cpp" "test") #t)))))
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)))
+     (list bison flex))
     (synopsis "Portable C compiler")
     (description
      "PCC is a portable C compiler.  The project goal is to write a C99
@@ -162,8 +162,7 @@ compiler while still keeping it small, simple, fast and understandable.")
        ("pkg-config" ,pkg-config)
        ("python" ,python)))
     (inputs
-     `(("mpfr" ,mpfr)
-       ("pcre2" ,pcre2)))
+     (list mpfr pcre2))
     (home-page "https://github.com/storaged-project/libbytesize")
     (synopsis "Tiny C library for working with arbitrary big sizes in bytes")
     (description
@@ -205,7 +204,7 @@ language with thin bindings for other languages.")
      `(#:configure-flags
        (list "--disable-static")))
     (inputs
-     `(("expat" ,expat)))
+     (list expat))
     (home-page "https://www.unidata.ucar.edu/software/udunits/")
     (synopsis "C library for units of physical quantities and value-conversion utils")
     (description
@@ -238,11 +237,7 @@ Its three main components are:
          "1x4q6yspi5g2s98vq4qszw4z3zjgk9l5zs8471w4d4cs6l97w08j"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)
-       ("check" ,check)))
+     (list autoconf automake libtool pkg-config check))
     (synopsis "Thin wrapper over POSIX syscalls")
     (description
      "The purpose of libfixposix is to offer replacements for parts of POSIX
@@ -252,16 +247,16 @@ whose behaviour is inconsistent across *NIX flavours.")
 (define-public libhx
   (package
     (name "libhx")
-    (version "3.25")
+    (version "4.2")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "mirror://sourceforge/libhx/libHX/"
+       (uri (string-append "https://inai.de/files/libhx/"
                            "libHX-" version ".tar.xz"))
        (sha256
-        (base32 "12avn16f8aqb0cq6jplz0sv7rh6f07m85dwc8dasnnwsvijwbpbj"))))
+        (base32 "1ri3sxiw5a8br27j7f20s40kihfvq6mmxzcrx68zydiwyxjvf5jj"))))
     (build-system gnu-build-system)
-    (home-page "http://libhx.sourceforge.net")
+    (home-page "https://inai.de/projects/libhx/")
     (synopsis "C library with common data structures and functions")
     (description
      "This is a C library (with some C++ bindings available) that provides data
@@ -317,7 +312,7 @@ checking casts and more.")
                                     headers)
                           (install-file "libwuya.a" (string-append out "/lib"))
                           #t))))))
-      (inputs `(("lua" ,lua)))
+      (inputs (list lua))
       (home-page "https://github.com/WuBingzheng/libwuya/")
       (synopsis "C library implementing various data structures")
       (description "The @code{libwuya} library implements data structures such
@@ -368,7 +363,7 @@ as dictionaries, skip lists, and memory pools.")
                                       (string-append out "/share/doc/packcc"))
                         #t))))))
     (native-inputs
-     `(("bats" ,bats)))
+     (list bats))
     (synopsis "Packrat parser generator for C")
     (description
      "PackCC is a packrat parser generator for the C programming language.
@@ -388,7 +383,7 @@ any other grammar rules.")
 (define-public sparse
   (package
     (name "sparse")
-    (version "0.6.3")
+    (version "0.6.4")
     (source (origin
               (method url-fetch)
               (uri
@@ -396,9 +391,9 @@ any other grammar rules.")
                               "sparse-"  version ".tar.xz"))
               (sha256
                (base32
-                "16d8c4dhipjzjf8z4z7pix1pdpqydz0v4r7i345f5s09hjnxpxnl"))))
+                "0z1qds52144nvsdnl82r3zs3vax618v920jmffyyssmwj54qpcka"))))
     (build-system gnu-build-system)
-    (inputs `(("perl" ,perl)))
+    (inputs (list perl))
     (arguments
      '(#:make-flags `(,(string-append "PREFIX=" (assoc-ref %outputs "out")))
        #:phases (modify-phases %standard-phases
@@ -406,8 +401,7 @@ any other grammar rules.")
                   (add-after 'unpack 'patch-cgcc
                     (lambda _
                       (substitute* "cgcc"
-                        (("'cc'") (string-append "'" (which "gcc") "'")))
-                      #t)))))
+                        (("'cc'") (string-append "'" (which "gcc") "'"))))))))
     (synopsis "Semantic C parser for Linux development")
     (description
      "Sparse is a semantic parser for C and is required for Linux development.
@@ -442,10 +436,7 @@ releases.")
          (replace 'bootstrap
            (lambda _ (invoke "autoreconf" "-vfi"))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ("libtool" ,libtool)))
+     (list autoconf automake pkg-config libtool))
     (home-page "https://github.com/rsyslog/libestr")
     (synopsis "Helper functions for handling strings")
     (description
@@ -468,9 +459,7 @@ more, like escaping special characters.")
         (base32 "12rqcdqxazw8czzxbivdapdgj19pcswpw1jp2915sxbljis83g6q"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (home-page "https://github.com/rsyslog/libfastjson")
     (synopsis "Fast JSON library for C")
     (description
@@ -501,12 +490,12 @@ with essential JSON handling functions, sufficiently good JSON support (not
          (replace 'bootstrap
            (lambda _ (invoke "autoreconf" "-vfi"))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ("libtool" ,libtool)
-       ;; For rst2man.py
-       ("python-docutils" ,python-docutils)))
+     (list autoconf
+           automake
+           pkg-config
+           libtool
+           ;; For rst2man.py
+           python-docutils))
     (home-page "https://github.com/rsyslog/liblogging")
     (synopsis "Easy to use and lightweight signal-safe logging library")
     (description
@@ -514,6 +503,46 @@ with essential JSON handling functions, sufficiently good JSON support (not
 replacement for the syslog() call, but retains its ease of use.")
     (license license:bsd-2)))
 
+(define-public liblognorm
+  (package
+    (name "liblognorm")
+    (version "2.0.6")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/rsyslog/liblognorm.git")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1pyy1swvq6jj12aqma42jimv71z8m66zy6ydd5v19cp2azm4krml"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list
+      #:parallel-tests? #false ;not supported
+      #:phases
+      '(modify-phases %standard-phases
+         ;; These tests fail because tmp.rulebase is never created.  This
+         ;; looks rather harmless.
+         (add-after 'unpack 'delete-failing-tests
+           (lambda _
+             (substitute* "tests/Makefile.am"
+               (("string_rb_simple.sh ") "")
+               (("string_rb_simple_2_lines.sh ") "")))))))
+    (inputs
+     (list json-c libestr libfastjson))
+    (native-inputs
+     (list autoconf automake libtool pkg-config))
+    (home-page "https://www.liblognorm.com")
+    (synopsis "Fast samples-based log normalization library")
+    (description
+     "Liblognorm normalizes event data into well-defined name-value pairs and
+a set of tags describing the message.")
+    ;; liblognorm is very slowly transitioning to ASL2.0
+    ;; See https://github.com/rsyslog/liblognorm/issues/329
+    (license license:lgpl2.1+)))
+
 (define-public unifdef
   (package
     (name "unifdef")
@@ -539,7 +568,7 @@ replacement for the syslog() call, but retains its ease of use.")
                           (string-append "prefix=" %output))
        #:tests? #f))                    ;no test suite
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (home-page "https://dotat.at/prog/unifdef/")
     (synopsis "Utility to selectively processes conditional C preprocessor")
     (description "The @command{unifdef} utility selectively processes
@@ -554,7 +583,8 @@ portability.")
 (define-public aws-c-common
   (package
     (name "aws-c-common")
-    (version "0.5.3")
+    ; Update only when updating aws-crt-cpp.
+    (version "0.6.11")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -563,7 +593,7 @@ portability.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "03fcvh3l1l6fkzkcbaprk10qmy8l77zhmh60h1px2ik09sqd9p72"))))
+                "1v4dhygiynl75y3702lbp9j8kph88j4f2sq39s4lkhn6lmbz5f0f"))))
     (build-system cmake-build-system)
     (arguments
      '(#:configure-flags
@@ -578,7 +608,8 @@ portability.")
 (define-public aws-checksums
   (package
     (name "aws-checksums")
-    (version "0.1.11")
+    ; Update only when updating aws-crt-cpp.
+    (version "0.1.12")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -587,14 +618,15 @@ portability.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1pjs31x3cq9wyw511y00kksz660m8im9zxk30hid8iwlilcbnyvx"))
-              (patches (search-patches "aws-checksums-cmake-prefix.patch"))))
+                "054f2hkmkxhw83q7zsz349k82xk6bkrvlsab088pf7kn9wd4hy4k"))))
     (build-system cmake-build-system)
     (arguments
      '(#:configure-flags
-       '("-DBUILD_SHARED_LIBS=ON")))
+       (list "-DBUILD_SHARED_LIBS=ON"
+             (string-append "-DCMAKE_PREFIX_PATH="
+                            (assoc-ref %build-inputs "aws-c-common")))))
     (inputs
-     `(("aws-c-common" ,aws-c-common)))
+     (list aws-c-common))
     (synopsis "Amazon Web Services checksum library")
     (description
      "This library provides cross-Platform hardware accelerated CRC32c and CRC32
@@ -605,6 +637,7 @@ with fallback to efficient C99 software implementations.")
 (define-public aws-c-event-stream
   (package
     (name "aws-c-event-stream")
+    ; Update only when updating aws-crt-cpp.
     (version "0.2.7")
     (source (origin
               (method git-fetch)
@@ -614,19 +647,17 @@ with fallback to efficient C99 software implementations.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0xwwr7gdgfrphk6j7vk12rgimfim6m4qnj6hg8hgg16cplhvsfzh"))
-              (patches (search-patches "aws-c-event-stream-cmake-prefix.patch"))))
+                "0xwwr7gdgfrphk6j7vk12rgimfim6m4qnj6hg8hgg16cplhvsfzh"))))
     (build-system cmake-build-system)
     (arguments
      '(#:configure-flags
-       '("-DBUILD_SHARED_LIBS=ON")))
+       (list "-DBUILD_SHARED_LIBS=ON"
+             (string-append "-DCMAKE_PREFIX_PATH="
+                            (assoc-ref %build-inputs "aws-c-common")))))
     (propagated-inputs
-     `(("aws-c-common" ,aws-c-common)
-       ("aws-c-io" ,aws-c-io)
-       ("aws-checksums" ,aws-checksums)))
+     (list aws-c-common aws-c-io aws-checksums))
     (inputs
-     `(("aws-c-cal" ,aws-c-cal)
-       ("s2n" ,s2n)))
+     (list aws-c-cal s2n))
     (synopsis "Amazon Web Services client-server message format library")
     (description
      "This library is a C99 implementation for @acronym{AWS,Amazon Web Services}
@@ -638,7 +669,8 @@ communication.")
 (define-public aws-c-io
   (package
     (name "aws-c-io")
-    (version "0.9.2")
+    ; Update only when updating aws-crt-cpp.
+    (version "0.10.9")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -647,19 +679,16 @@ communication.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1vwyf1pm0hhcypyjc9xh9x7y50ic79xlbck1yf9d9wz0bnh43p7v"))
-              (patches
-               (search-patches
-                "aws-c-io-cmake-prefix.patch"
-                "aws-c-io-disable-networking-tests.patch"))))
+                "14rxa3k842fgk43702nz7z9y3clfhvax8j0k93i0c5vg14wj38yp"))))
     (build-system cmake-build-system)
     (arguments
      '(#:configure-flags
-       '("-DBUILD_SHARED_LIBS=ON")))
+       (list "-DBUILD_SHARED_LIBS=ON"
+             (string-append "-DCMAKE_PREFIX_PATH="
+                            (assoc-ref %build-inputs "aws-c-common"))
+             "-DENABLE_NET_TESTS=OFF")))
     (propagated-inputs
-     `(("aws-c-cal" ,aws-c-cal)
-       ("aws-c-common" ,aws-c-common)
-       ("s2n" ,s2n)))
+     (list aws-c-cal aws-c-common s2n))
     (synopsis "Event driven framework for implementing application protocols")
     (description "This library provides a C99 framework for constructing
 event-driven, asynchronous network application protocols.")
@@ -669,7 +698,8 @@ event-driven, asynchronous network application protocols.")
 (define-public aws-c-cal
   (package
     (name "aws-c-cal")
-    (version "0.4.5")
+    ; Update only when updating aws-crt-cpp.
+    (version "0.5.12")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -678,14 +708,15 @@ event-driven, asynchronous network application protocols.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "04acra1mnzw9q7jycs5966akfbgnx96hkrq90nq0dhw8pvarlyv6"))
-              (patches (search-patches "aws-c-cal-cmake-prefix.patch"))))
+                "09zqf610x4g2mcjcaf9nh88k6dkw14pi721yr8hxb5rmsx7rlfrb"))))
     (build-system cmake-build-system)
     (arguments
      '(#:configure-flags
-       '("-DBUILD_SHARED_LIBS=ON")))
+       (list "-DBUILD_SHARED_LIBS=ON"
+             (string-append "-DCMAKE_PREFIX_PATH="
+                            (assoc-ref %build-inputs "aws-c-common")))))
     (propagated-inputs
-     `(("aws-c-common" ,aws-c-common)))
+     (list aws-c-common))
     (inputs
      `(("openssl" ,openssl)
        ("openssl:static" ,openssl "static")))
@@ -713,3 +744,154 @@ cryptographic primitives for the @acronym{AWS,Amazon Web Services} SDK.")
     (description "The @acronym{PCL, Portable Coroutine Library} implements the
 low level functionality for coroutines.")
     (license license:gpl2+)))
+
+(define-public aws-c-http
+  (package
+    (name "aws-c-http")
+    ; Update only when updating aws-crt-cpp.
+    (version "0.6.7")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url (string-append "https://github.com/awslabs/" name))
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1s06bz6w7355ldyhwjidcpbff7591ch4lwwjcj47a6k2kczdmiz4"))))
+    (build-system cmake-build-system)
+    (arguments
+     '(#:configure-flags
+       (list "-DBUILD_SHARED_LIBS=ON"
+             (string-append "-DCMAKE_PREFIX_PATH="
+                            (assoc-ref %build-inputs "aws-c-common"))
+             "-DENABLE_NET_TESTS=OFF")))
+    (propagated-inputs
+     (list aws-c-compression aws-c-io))
+    (synopsis "Amazon Web Services HTTP library")
+    (description
+     "This library provides a C99 implementation of the HTTP/1.1 and HTTP/2
+specifications.")
+    (home-page "https://github.com/awslabs/aws-c-http")
+    (license license:asl2.0)))
+
+(define-public aws-c-compression
+  (package
+    (name "aws-c-compression")
+    ; Update only when updating aws-crt-cpp.
+    (version "0.2.14")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url (string-append "https://github.com/awslabs/" name))
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0fs3zhhzxsb9nfcjpvfbcq79hal7si2ia1c09scab9a8m264f4vd"))))
+    (build-system cmake-build-system)
+    (arguments
+     '(#:configure-flags
+       (list "-DBUILD_SHARED_LIBS=ON"
+             (string-append "-DCMAKE_PREFIX_PATH="
+                            (assoc-ref %build-inputs "aws-c-common")))))
+    (propagated-inputs
+     (list aws-c-common))
+    (synopsis "Amazon Web Services compression library")
+    (description
+     "This library provides a C99 implementation of compression algorithms,
+currently limited to Huffman encoding and decoding.")
+    (home-page "https://github.com/awslabs/aws-c-compression")
+    (license license:asl2.0)))
+
+(define-public aws-c-auth
+  (package
+    (name "aws-c-auth")
+    ; Update only when updating aws-crt-cpp.
+    (version "0.6.4")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url (string-append "https://github.com/awslabs/" name))
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "120p69lj279yq3d2b81f45kgfrvf32j6m7s03m8hh27w8yd4vbfp"))
+              (patches
+               (search-patches
+                "aws-c-auth-install-private-headers.patch"))))
+    (build-system cmake-build-system)
+    (arguments
+     '(#:configure-flags
+       (list "-DBUILD_SHARED_LIBS=ON"
+             (string-append "-DCMAKE_PREFIX_PATH="
+                            (assoc-ref %build-inputs "aws-c-common"))
+             "-DENABLE_NET_TESTS=OFF")))
+    (propagated-inputs
+     (list aws-c-cal aws-c-common aws-c-http aws-c-io))
+    (synopsis "Amazon Web Services client-side authentication library")
+    (description
+     "This library provides a C99 implementation for AWS client-side
+authentication.")
+    (home-page "https://github.com/awslabs/aws-c-auth")
+    (license license:asl2.0)))
+
+(define-public aws-c-s3
+  (package
+    (name "aws-c-s3")
+    ; Update only when updating aws-crt-cpp.
+    (version "0.1.26")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url (string-append "https://github.com/awslabs/" name))
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0gaxnwwk0jbvkgjnxcgchq13xmn7jk5vjvjsps6b0vaz6bf12wv8"))))
+    (build-system cmake-build-system)
+    (arguments
+     '(#:configure-flags
+       (list "-DBUILD_SHARED_LIBS=ON"
+             (string-append "-DCMAKE_PREFIX_PATH="
+                            (assoc-ref %build-inputs "aws-c-common"))
+             "-DENABLE_NET_TESTS=OFF")))
+    (propagated-inputs
+     (list aws-c-auth aws-c-http))
+    (synopsis "Amazon Web Services client library for Amazon S3")
+    (description
+     "This library provides a C99 client implementation of the Simple Storage
+Service (S3) protocol for object storage.")
+    (home-page "https://github.com/awslabs/aws-c-s3")
+    (license license:asl2.0)))
+
+(define-public aws-c-mqtt
+  (package
+    (name "aws-c-mqtt")
+    ; Update only when updating aws-crt-cpp.
+    (version "0.7.8")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url (string-append "https://github.com/awslabs/" name))
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "19j6nw2v36c4yff4p0fbf0748s06fd5r9cp2yakry9ybn1ada99c"))))
+    (build-system cmake-build-system)
+    (arguments
+     '(#:configure-flags
+       (list "-DBUILD_SHARED_LIBS=ON"
+             (string-append "-DCMAKE_PREFIX_PATH="
+                            (assoc-ref %build-inputs "aws-c-common")))))
+    (propagated-inputs
+     (list aws-c-http aws-c-io))
+    (synopsis "Amazon Web Services MQTT library")
+    (description
+     "This library provides a C99 implementation of the Message Queuing
+Telemetry Transport (MQTT) publish-subscribe messaging protocol.")
+    (home-page "https://github.com/awslabs/aws-c-mqtt")
+    (license license:asl2.0)))
diff --git a/gnu/packages/calcurse.scm b/gnu/packages/calcurse.scm
index d807c15d68..5da701492b 100644
--- a/gnu/packages/calcurse.scm
+++ b/gnu/packages/calcurse.scm
@@ -39,8 +39,8 @@
        (sha256
         (base32 "0cgkd285x5pk62lmdx9fjxl46c5lj8wj2cqbxq7d99yb4il5fdjk"))))
     (build-system gnu-build-system)
-    (inputs `(("ncurses" ,ncurses)))
-    (native-inputs `(("tzdata" ,tzdata-for-tests)))
+    (inputs (list ncurses))
+    (native-inputs (list tzdata-for-tests))
     (arguments
      ;; The ical tests all want to create a ".calcurse" directory, and may
      ;; fail with "cannot create directory '.calcurse': File exists" if run
@@ -64,8 +64,8 @@
                   (add-before 'check 'check-setup
                     (lambda* (#:key inputs #:allow-other-keys)
                       (setenv "TZDIR"   ; for test/ical-007.sh
-                              (string-append (assoc-ref inputs "tzdata")
-                                             "/share/zoneinfo")))))))
+                              (search-input-directory inputs
+                                                      "share/zoneinfo")))))))
     (home-page "https://www.calcurse.org")
     (synopsis "Text-based calendar and scheduling")
     (description
diff --git a/gnu/packages/calendar.scm b/gnu/packages/calendar.scm
index 8ec36d4fa2..129eb58aa0 100644
--- a/gnu/packages/calendar.scm
+++ b/gnu/packages/calendar.scm
@@ -10,6 +10,7 @@
 ;;; Copyright © 2020 Brendan Tildesley <mail@brendan.scot>
 ;;; Copyright © 2020 Tanguy Le Carrour <tanguy@bioneland.org>
 ;;; Copyright © 2020 Peng Mei Yu <pengmeiyu@riseup.net>
+;;; Copyright © 2021 Wamm K. D. <jaft.r@outlook.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -36,6 +37,7 @@
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system python)
   #:use-module (gnu packages admin)
+  #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
   #:use-module (gnu packages check)
   #:use-module (gnu packages dav)
@@ -78,7 +80,7 @@
           ;; Install pkg-config files
           ;; https://github.com/HowardHinnant/date/pull/538
           (search-patches "date-output-pkg-config-files.patch"))))
-      (inputs `(("tzdata" ,tzdata)))
+      (inputs (list tzdata))
       (build-system cmake-build-system)
       (arguments
        '(#:configure-flags (list "-DUSE_SYSTEM_TZ_DB=ON"
@@ -96,8 +98,8 @@
              (lambda* (#:key inputs #:allow-other-keys)
                (substitute* "src/tz.cpp"
                  (("/usr/share/zoneinfo")
-                  (string-append (assoc-ref inputs "tzdata") "/share/zoneinfo")))
-               #t))
+                  (search-input-directory inputs
+                                          "share/zoneinfo")))))
            (replace 'check
              (lambda _
                ;; Disable test that requires checking timezone that
@@ -116,7 +118,7 @@ the <tz.h> library for handling time zones and leap seconds.")
 (define-public libical
   (package
     (name "libical")
-    (version "3.0.8")
+    (version "3.0.10")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -124,7 +126,7 @@ the <tz.h> library for handling time zones and leap seconds.")
                     version "/libical-" version ".tar.gz"))
               (sha256
                (base32
-                "0vr8s7hn8204lyc4ys5bs3j5qss4lmc9ffly2m1a59avyz5cmzh9"))))
+                "1d1nqcfilb4k8bc5x85fhnd26l1ski58wpk2nmds6mlxrzkb6czr"))))
     (build-system cmake-build-system)
     (arguments
      '(#:tests? #f ; test suite appears broken
@@ -156,19 +158,17 @@ the <tz.h> library for handling time zones and leap seconds.")
                  (("\\\"/usr/share/lib/zoneinfo\\\"") "")))
              #t)))))
     (native-inputs
-     `(("docbook-xml" ,docbook-xml-4.3)
-       ("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc/stable)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)
-       ("vala" ,vala)))
+     (list docbook-xml-4.3
+           gobject-introspection
+           gtk-doc/stable
+           perl
+           pkg-config
+           vala))
     (inputs
-     `(("glib" ,glib)
-       ("libxml2" ,libxml2)
-       ("tzdata" ,tzdata)))
+     (list glib libxml2 tzdata))
     (propagated-inputs
      ;; In Requires.private of libical.pc.
-     `(("icu4c" ,icu4c)))
+     (list icu4c))
     (home-page "https://libical.github.io/libical/")
     (synopsis "iCalendar protocols and data formats implementation")
     (description
@@ -202,23 +202,22 @@ data units.")
              (string-append (assoc-ref outputs "out") "/share/man/man1"))
             #t)))))
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)
-       ;; Required to build manpage
-       ("python-sphinxcontrib-newsfeed" ,python-sphinxcontrib-newsfeed)
-       ("python-sphinx" ,python-sphinx)))
+     (list python-setuptools-scm
+           ;; Required to build manpage
+           python-sphinxcontrib-newsfeed python-sphinx))
     (inputs
-     `(("sqlite" ,sqlite)
-       ("python-configobj" ,python-configobj)
-       ("python-dateutil" ,python-dateutil)
-       ("python-icalendar" ,python-icalendar)
-       ("python-tzlocal" ,python-tzlocal)
-       ("python-urwid" ,python-urwid)
-       ("python-pytz" ,python-pytz)
-       ("python-setproctitle" ,python-setproctitle)
-       ("python-atomicwrites" ,python-atomicwrites)
-       ("python-click" ,python-click)
-       ("python-click-log" ,python-click-log)
-       ("python-pyxdg" ,python-pyxdg)))
+     (list sqlite
+           python-configobj
+           python-dateutil
+           python-icalendar
+           python-tzlocal
+           python-urwid
+           python-pytz
+           python-setproctitle
+           python-atomicwrites
+           python-click
+           python-click-log
+           python-pyxdg))
     (synopsis "Console calendar program")
     (description "Khal is a standards based console calendar program,
 able to synchronize with CalDAV servers through vdirsyncer.")
@@ -273,10 +272,7 @@ able to synchronize with CalDAV servers through vdirsyncer.")
                 (list "bin/cm2rem.tcl"
                       "bin/tkremind"))))))))
     (inputs
-     `(("inetutils" ,inetutils)
-       ("tcl" ,tcl)
-       ("tcllib" ,tcllib)
-       ("tk" ,tk)))
+     (list inetutils tcl tcllib tk))
     (home-page "https://dianne.skoll.ca/projects/remind/")
     (synopsis "Sophisticated calendar and alarm program")
     (description
@@ -345,9 +341,9 @@ and ruby.  It includes two illustrative command-line programs, @code{hcal} and
                #t))))
        #:tests? #f)) ; no tests
     (native-inputs
-     `(("perl" ,perl))) ; pod2man
+     (list perl)) ; pod2man
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (home-page "https://www.toastfreeware.priv.at/confclerk")
     (synopsis "Offline conference schedule application")
     (description
@@ -405,3 +401,29 @@ traditional Chinese characters.")
     ;; COPYING.LESSER specifies LGPL 3.0, but all source files say
     ;; 'Lesser GPL version 2 or later'.
     (license (list license:gpl2+ license:lgpl2.1+))))
+
+(define-public gsimplecal
+  (let ((version "2.2"))
+    (package
+      (name "gsimplecal")
+      (version version)
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/dmedvinsky/gsimplecal/")
+                      (commit (string-append "v" version))))
+                (file-name (git-file-name name version))
+                (sha256 (base32
+                         "1qyf65l088dqsz25hm6s1cv18j52yaias0llqvpqwjfnvssa5cxg"))
+                (modules '((guix build utils)))))
+      (build-system gnu-build-system)
+      (inputs (list gtk+))
+      (native-inputs
+       (list autoconf automake pkg-config))
+      (home-page "https://dmedvinsky.github.io/gsimplecal/")
+      (synopsis "Lightweight calendar applet")
+      (description "@command{gsimplecal} is a lightweight calendar application
+written in C++ using GTK.  Launched once, it pops up a small calendar applet,
+launched again it closes the running instance.  It can additionally be
+configured to show the current time in different timezones.")
+      (license license:bsd-3))))
diff --git a/gnu/packages/ccache.scm b/gnu/packages/ccache.scm
index 844a0d51a5..2923a998c8 100644
--- a/gnu/packages/ccache.scm
+++ b/gnu/packages/ccache.scm
@@ -20,6 +20,7 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages ccache)
+  #:use-module (guix gexp)
   #:use-module (guix packages)
   #:use-module ((guix licenses) #:select (gpl3+))
   #:use-module (guix download)
@@ -31,36 +32,37 @@
 (define-public ccache
   (package
     (name "ccache")
-    (version "4.4.1")
+    (version "4.5.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://github.com/ccache/ccache/releases/download/v"
                            version "/ccache-" version ".tar.xz"))
        (sha256
-        (base32 "0nc1mlmj92lfa25d12nzf5n55az6zfx38n0z1qqkkzjxn6sxzmpb"))
-       (patches
-        (search-patches "ccache-fix-basedir-test.patch"))))
+        (base32 "05wmflxdc8h3d00gr3kilr5dmrqxj6lcmq9ic575ydi60fz6w62i"))))
     (build-system cmake-build-system)
-    (native-inputs `(("perl" ,perl)     ; for test/run
-                     ("which" ,(@ (gnu packages base) which))))
-    (inputs `(("zlib" ,zlib)
-              ("zstd" ,zstd "lib")))
+    (native-inputs (list perl ; for test/run
+                         (@ (gnu packages base) which)))
+    (inputs (list zlib
+                  `(,zstd "lib")))
     (arguments
-     '( ;; The Redis backend must be explicitly disabled to build without Redis.
-       #:configure-flags
-       '("-DREDIS_STORAGE_BACKEND=OFF")
-
-       #: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"))))))
-         (add-before 'check 'set-home
-           ;; Tests require a writable HOME.
-           (lambda _
-             (setenv "HOME" (getenv "TMPDIR")))))))
+     (list #:configure-flags
+           ;; The backend must be explicitly disabled to build without Redis.
+           #~(list "-DREDIS_STORAGE_BACKEND=OFF")
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-before 'configure 'fix-shell
+                 ;; Run early whilst we're still in the source directory.
+                 (lambda _
+                   (substitute* (list "test/run"
+                                      "test/suites/base.bash"
+                                      "unittest/test_hashutil.cpp")
+                     (("compgen -e") "env | cut -d= -f1")
+                     (("#!/bin/sh") (string-append "#!" (which "sh"))))))
+               (add-before 'check 'set-home
+                 ;; Tests require a writable HOME.
+                 (lambda _
+                   (setenv "HOME" (getenv "TMPDIR")))))))
     (home-page "https://ccache.dev/")
     (synopsis "Compiler cache")
     (description
diff --git a/gnu/packages/cdrom.scm b/gnu/packages/cdrom.scm
index 443d7455a7..3f2429aeeb 100644
--- a/gnu/packages/cdrom.scm
+++ b/gnu/packages/cdrom.scm
@@ -3,7 +3,7 @@
 ;;; Copyright © 2013, 2014 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
 ;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
-;;; 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 Alex Kost <alezost@gmail.com>
 ;;; Copyright © 2016 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017 John Darrington <jmd@gnu.org>
@@ -118,11 +118,9 @@ caching facility provided by the library.")
                "0avi6apv5ydjy6b9c3z9a46rvp5i57qyr09vr7x4nndxkmcfjl45"))))
     (build-system gnu-build-system)
     (inputs
-     `(("ncurses" ,ncurses)
-       ("libcddb" ,libcddb)))
+     (list ncurses libcddb))
     (native-inputs
-     `(("help2man" ,help2man)
-       ("pkg-config" ,pkg-config)))
+     (list help2man pkg-config))
     (home-page "https://www.gnu.org/software/libcdio/")
     (synopsis "CD Input and Control library")
     (description
@@ -147,8 +145,8 @@ extraction from CDs.")
               (base32
                "12hfnrq7amv9qjzc92cr265m7kh0a1hpasck8cxx1gygbhqczc9k"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (propagated-inputs `(("libcdio" ,libcdio)))
+    (native-inputs (list pkg-config))
+    (propagated-inputs (list libcdio))
     (home-page "https://www.gnu.org/software/libcdio/")
     (synopsis "Jitter- and error-tolerant CD audio extraction")
     (description
@@ -198,10 +196,7 @@ libcdio.")
                  `("PATH" ":" prefix (,(string-append out "/bin"))))
                #t))))))
     (inputs
-     `(("acl" ,acl)
-       ("readline" ,readline)
-       ("tk" ,tk)
-       ("zlib" ,zlib)))
+     (list acl readline tk zlib))
     (home-page "https://www.gnu.org/software/xorriso/")
     (synopsis "Create, manipulate, burn ISO-9660 file systems")
     (description
@@ -231,13 +226,16 @@ files.")
               '(begin
                  ;; Make libraries respect LDFLAGS.
                  (substitute* '("paranoia/Makefile.in" "interface/Makefile.in")
-                   (("-Wl,-soname") "$(LDFLAGS) -Wl,-soname"))
-                 #t))))
+                   (("-Wl,-soname") "$(LDFLAGS) -Wl,-soname"))))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ; there is no check target
+       #:parallel-build? #f             ;randomly fails to link
        #:configure-flags ; Add $libdir to the RUNPATH of all the executables.
-       (list (string-append "LDFLAGS=-Wl,-rpath=" %output "/lib"))))
+       (list (string-append "LDFLAGS=-Wl,-rpath=" %output "/lib"))
+       ;; Building in parallel is flaky: “ld: […]/cachetest.c:393: undefined
+       ;; reference to `paranoia_free'”.
+       #:parallel-build? #f))
     (home-page "https://www.xiph.org/paranoia/")
     (synopsis "Audio CD reading utility")
     (description "Cdparanoia retrieves audio tracks from CDDA capable CDROM
@@ -280,14 +278,9 @@ reconstruction capability.")
              (substitute* "configure.ac" (("^AM_GCONF_SOURCE_2.*") ""))
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config))
     (inputs
-     `(("ao" ,ao)
-       ("lame" ,lame)
-       ("libmad" ,libmad)
-       ("libvorbis" ,libvorbis)))
+     (list ao lame libmad libvorbis))
     (home-page "http://cdrdao.sourceforge.net")
     (synopsis "Read and write CDs in disk-at-once mode")
     (description "cdrdao records audio or data CDs in disk-at-once (DAO) mode,
@@ -325,8 +318,6 @@ format, commonly used for VCDs or disks with subchannel data.")
               (patches (search-patches "cdrtools-3.01-mkisofs-isoinfo.patch"))))
     (build-system gnu-build-system)
     ;; XXX cdrtools bundles a modified, relicensed early version of cdparanoia.
-    (inputs
-     `(("linux-headers" ,linux-libre-headers)))
     (arguments
      `(#:make-flags
        (list "RM=rm" "LN=ln" "SYMLINK=ln -s"
@@ -343,7 +334,7 @@ format, commonly used for VCDs or disks with subchannel data.")
            (lambda _
              (substitute* "autoconf/configure"
                (("/usr/src/linux")
-                (assoc-ref %build-inputs "linux-headers")))
+                (assoc-ref %build-inputs "kernel-headers")))
              #t))
          (add-before 'build 'substitute-dirs
            (lambda _
@@ -379,9 +370,9 @@ images.")
               (patches (search-patches "dvd+rw-tools-add-include.patch"))))
     (build-system gnu-build-system)
     (inputs
-     `(("cdrtools" ,cdrtools)))
+     (list cdrtools))
     (native-inputs
-     `(("m4" ,m4)))
+     (list m4))
     (arguments
      `(#:tests? #f ; No tests.
        #:phases
@@ -417,19 +408,17 @@ or @command{xorrisofs} to create ISO 9660 images.")
 (define-public dvdisaster
   (package
     (name "dvdisaster")
-    (version "0.79.5")
+    (version "0.79.9")
     (source
      (origin
        (method url-fetch)
-       ;; Update this (and update HOME-PAGE) when/if one reappears.
-       (uri (string-append "https://web.archive.org/web/20180428070843/"
-                           "http://dvdisaster.net/downloads/dvdisaster-"
+       (uri (string-append "https://dvdisaster.jcea.es/downloads/dvdisaster-"
                            version ".tar.bz2"))
        (sha256
-        (base32 "0f8gjnia2fxcbmhl8b3qkr5b7idl8m855dw7xw2fnmbqwvcm6k4w"))))
+        (base32 "1hz3fvqfdrwb7dn6ggqkpcgyjag37ivm1layw27ncjz9glklxjbr"))))
     (build-system gnu-build-system)
     (inputs
-     `(("gtk+" ,gtk+-2)))
+     (list gtk+-2))
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("pkg-config" ,pkg-config)
@@ -445,8 +434,7 @@ or @command{xorrisofs} to create ISO 9660 images.")
              (with-directory-excursion "regtest"
                (substitute* "common.bash"
                  (("ISODIR=/var/tmp/regtest") "ISODIR=/tmp"))
-               (for-each invoke (find-files "." "rs.*\\.bash")))
-             #t))
+               (for-each invoke (find-files "." "rs.*\\.bash")))))
          (add-after 'install 'install-desktop
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((datadir (string-append (assoc-ref outputs "out") "/share")))
@@ -466,10 +454,13 @@ or @command{xorrisofs} to create ISO 9660 images.")
                 (find-files "contrib" "dvdisaster[0-9]*\\.png"))
                (mkdir-p (string-append datadir "/pixmaps"))
                (copy-file "contrib/dvdisaster48.xpm"
-                          (string-append datadir "/pixmaps/dvdisaster.xpm"))
-               #t))))))
-    (home-page (string-append "https://web.archive.org/web/20180428070843/"
-                              "http://dvdisaster.net/en/index.html"))
+                          (string-append datadir "/pixmaps/dvdisaster.xpm")))))
+         (add-after 'install 'remove-uninstall-script
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out")))
+               (delete-file
+                (string-append out "/bin/dvdisaster-uninstall.sh"))))))))
+    (home-page "https://dvdisaster.jcea.es/")
     (synopsis "Error correcting codes for optical media images")
     (description "Optical media (CD,DVD,BD) keep their data only for a
 finite time (typically for many years).  After that time, data loss develops
@@ -569,8 +560,7 @@ graphical interface.")
     (arguments
      `(#:configure-flags '("-DBUILD_SHARED_LIBS=ON")))
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)))
+     (list bison flex))
     (home-page "https://github.com/lipnitsk/libcue")
     (synopsis "C library to parse cue sheets")
     (description "Libcue is a C library to parse so-called @dfn{cue sheets}
@@ -681,20 +671,18 @@ from an audio CD.")
              #t)))
        #:tests? #f)) ; no test target
 
-    (inputs `(("wget" ,wget)
-              ("which" ,which)
-              ("cdparanoia" ,cdparanoia)
-              ("cd-discid" ,cd-discid)
-              ("vorbis-tools" ,vorbis-tools)
-              ("flac" ,flac)
-
-              ("perl-musicbrainz-discid" ,perl-musicbrainz-discid)
-              ("perl-webservice-musicbrainz" ,perl-webservice-musicbrainz)
-              ("perl-mojolicious" ,perl-mojolicious) ;indirect dependency
-
-              ;; A couple of Python and Perl scripts are included.
-              ("python" ,python)
-              ("perl" ,perl)))
+    (inputs (list wget
+                  which
+                  cdparanoia
+                  cd-discid
+                  vorbis-tools
+                  flac
+                  perl-musicbrainz-discid
+                  perl-webservice-musicbrainz
+                  perl-mojolicious ;indirect dependency
+                  ;; A couple of Python and Perl scripts are included.
+                  python
+                  perl))
 
     (synopsis "Command-line audio CD ripper")
     (description
@@ -727,7 +715,7 @@ and/or MPP/MP+ (Musepack) format, and tags them, all in one go.")
              (let ((out (assoc-ref outputs "out")))
                (install-file "geteltorito"
                              (string-append out "/bin"))))))))
-    (inputs `(("perl" ,perl)))
+    (inputs (list perl))
     (synopsis "Extract the boot image from a CD-ROM")
     (description
      "@command{geteltorito} can extract the initial/default boot
@@ -768,8 +756,7 @@ information is written to standard error.")
                                                       "flac"
                                                       "opus-tools"
                                                       "wavpack"))))))))))
-    (native-inputs `(("intltool" ,intltool)
-                     ("pkg-config" ,pkg-config)))
+    (native-inputs (list intltool pkg-config))
     ;; TODO: Add the necessary packages for Musepack encoding.
     (inputs `(("gtk+-2" ,gtk+-2)
               ("glib" ,glib)
@@ -820,15 +807,11 @@ session, and it can create M3U playlists.")
                (("\\$\\(DESTDIR\\)/usr/local") (assoc-ref outputs "out"))
                (("../../etc") "etc")))))))
     (native-inputs
-     `(("coreutils" ,coreutils)))
+     (list coreutils))
     (inputs
-     `(("perl" ,perl)))
+     (list perl))
     (propagated-inputs
-     `(("cdparanoia" ,cdparanoia)
-       ("flac" ,flac)
-       ("vorbis-tools" ,vorbis-tools)
-       ("wavpack" ,wavpack)
-       ("perl-cddb-get" ,perl-cddb-get)))
+     (list cdparanoia flac vorbis-tools wavpack perl-cddb-get))
     (home-page (string-append "https://web.archive.org/web/20170119092156/"
                               "http://www.suwald.com/ripit/about.php"))
     (synopsis "Command-line program to extract audio CDs")
@@ -872,7 +855,7 @@ laid out on the image.")
                "0m1vyry6pi115nysfgb0cg313qqhnlxqdg7f920wpiar0z8mjl2j"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://dev.lovelyhq.com/libburnia/libburn")
     (synopsis "Library for reading and writing optical discs")
     (description
@@ -894,10 +877,9 @@ DVD-RW, DVD-R, DVD-R/DL, BD-R, and BD-RE.")
                "13m82l13cb5d7ca53dv3akma1jr9gw0hnnshdwqpj6ahly0fv85a"))))
     (build-system gnu-build-system)
     (inputs
-     `(("zlib" ,zlib)
-       ("acl" ,acl)))
+     (list zlib acl))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://dev.lovelyhq.com/libburnia/libisofs")
     (synopsis "Library to create ISO 9660 images")
     (description
@@ -925,13 +907,18 @@ Supported extensions to ISO 9660 are Rock Ridge, Joliet, AAIP, zisofs.")
                     version ".tar.gz"))
               (sha256
                (base32
-                "0g2zyzb56czh429qy87lvaddzjnlcq8c616ddxsmsshz3clhyzrh"))))
+                "0g2zyzb56czh429qy87lvaddzjnlcq8c616ddxsmsshz3clhyzrh"))
+              (patches (search-patches "cdrkit-libre-cross-compile.patch"))
+              (modules '((guix build utils)))
+              (snippet
+                #~(begin
+                    ;; Fix building with gcc-10.
+                    (substitute* "genisoimage/genisoimage.h"
+                      (("char\t\t\\*outfile")
+                       "extern char\t*outfile"))))))
     (build-system cmake-build-system)
     (inputs
-     `(("bzip2" ,bzip2)
-       ("libcap" ,libcap)
-       ("perl" ,perl)
-       ("zlib" ,zlib)))
+     (list bzip2 libcap perl zlib))
     (arguments
      `(#:tests? #f ;no tests
        #:phases
@@ -953,7 +940,7 @@ CD data, and more.  It's mostly compatible with @code{cdrtools}.")
 (define-public libmirage
   (package
     (name "libmirage")
-    (version "3.2.5")
+    (version "3.2.6")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -961,13 +948,12 @@ CD data, and more.  It's mostly compatible with @code{cdrtools}.")
                     version ".tar.xz"))
               (sha256
                (base32
-                "0f8i2ha44rykkk3ac2q8zsw3y1zckw6qnf6zvkyrj3qqbzhrf3fm"))))
+                "19pjdmxhzl8y3brhg8fsv99b6jg4lfnl8jvcjgm4jmqrr684czr5"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (inputs
-     `(("glib" ,glib)))
+     (list glib))
     (arguments
      ;; No tests.
      '(#:tests? #f))
@@ -982,7 +968,7 @@ the data stored in various image formats.")
 (define-public cdemu-daemon
   (package
     (name "cdemu-daemon")
-    (version "3.2.5")
+    (version "3.2.6")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -990,15 +976,12 @@ the data stored in various image formats.")
                     "cdemu-daemon-" version ".tar.xz"))
               (sha256
                (base32
-                "16g6fv1lxkdmbsy6zh5sj54dvgwvm900fd18aq609yg8jnqm644d"))))
+                "13vxhl7ik3h5qnfh6m0zxywb8qzx1n46akrm6rp19ikmxzih9r56"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (inputs
-     `(("libmirage" ,libmirage)
-       ("glib" ,glib)
-       ("ao" ,ao)))
+     (list libmirage glib ao))
     (arguments
      ;; No tests.
      '(#:tests? #f))
@@ -1022,12 +1005,9 @@ drive and disc (including CD-ROMs and DVD-ROMs).")
                 "1prrdhv0ia0axc6b73crszqzh802wlkihz6d100yvg7wbgmqabd7"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (inputs
-     `(("python" ,python)
-       ("python-pygobject" ,python-pygobject)
-       ("cdemu-daemon" ,cdemu-daemon)))
+     (list python python-pygobject cdemu-daemon))
     (arguments
      ;; No tests.
      `(#:tests? #f
@@ -1043,7 +1023,7 @@ drive and disc (including CD-ROMs and DVD-ROMs).")
              (let ((prog (string-append (assoc-ref outputs "out")
                                         "/bin/cdemu")))
                (wrap-program prog
-                 `("PYTHONPATH" = (,(getenv "PYTHONPATH"))))
+                 `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH"))))
                #t))))))
     (home-page "https://cdemu.sourceforge.io/")
     (synopsis "Command-line client for controlling cdemu-daemon")
diff --git a/gnu/packages/cedille.scm b/gnu/packages/cedille.scm
index d3dd576323..1f00e8f698 100644
--- a/gnu/packages/cedille.scm
+++ b/gnu/packages/cedille.scm
@@ -42,11 +42,7 @@
         (base32
          "1h5s6ayh3s76z184jai3jidcs4cjk8s4nvkkv2am8dg4gfsybq22"))))
     (inputs
-     `(("agda" ,agda)
-       ("agda-ial" ,agda-ial)
-       ("ghc" ,ghc)
-       ("ghc-alex" ,ghc-alex)
-       ("ghc-happy" ,ghc-happy)))
+     (list agda agda-ial ghc ghc-alex ghc-happy))
     (build-system emacs-build-system)
     (arguments
      `(#:phases
@@ -89,8 +85,7 @@
          (add-after 'unpack 'copy-ial
            (lambda* (#:key inputs #:allow-other-keys)
              (copy-recursively
-              (string-append (assoc-ref inputs "agda-ial")
-                             "/include/agda/ial")
+              (search-input-directory inputs "/include/agda/ial")
               "ial")
              ;; Ambiguous module if main is included from ial
              (delete-file "ial/main.agda")
diff --git a/gnu/packages/certs.scm b/gnu/packages/certs.scm
index e15a9660df..28c2f84f98 100644
--- a/gnu/packages/certs.scm
+++ b/gnu/packages/certs.scm
@@ -1,9 +1,11 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2016, 2017, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2021 Raghav Gururajan <rg@raghavgururajan.name>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -24,6 +26,7 @@
 (define-module (gnu packages certs)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
+  #:use-module (guix utils)
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix build-system copy)
@@ -72,7 +75,7 @@
          #:install-plan
          '(("." "etc/desec" #:include ("hook.sh")))))
       (inputs
-       `(("curl" ,curl)))
+       (list curl))
       (synopsis "Certbot DNS challenge automatization for deSEC")
       (description "The deSEC can be used to obtain certificates with certbot
 DNS ownership verification.  With the help of this hook script, you can obtain
@@ -82,52 +85,52 @@ port forwarding to your local machine.")
       (home-page "https://desec.io")
       (license license:expat))))
 
-(define certdata2pem
-  (package
-    (name "certdata2pem")
-    (version "2013")
-    (source
-     (origin
-      (method url-fetch)
-        (uri
-          "http://pkgs.fedoraproject.org/cgit/ca-certificates.git/plain/certdata2pem.py?id=053dde8a2f5901e97028a58bf54e7d0ef8095a54")
-        (file-name "certdata2pem.py")
-        (sha256
-          (base32
-            "0zscrm41gnsf14zvlkxhy00h3dmgidyz645ldpda3y3vabnwv8dx"))))
-   (build-system trivial-build-system)
-   (inputs
-     `(("python" ,python-2)))
-   (arguments
-    `(#:modules ((guix build utils))
-      #:builder
-        (begin
-          (use-modules (guix build utils))
-          (let ((bin (string-append %output "/bin")))
-            (copy-file (assoc-ref %build-inputs "source") "certdata2pem.py")
-            (chmod "certdata2pem.py" #o555)
-            (substitute* "certdata2pem.py"
-              (("/usr/bin/python")
-               (string-append (assoc-ref %build-inputs "python")
-                              "/bin/python"))
-              ;; Use the file extension .pem instead of .crt.
-              (("crt") "pem"))
-            (mkdir-p bin)
-            (copy-file "certdata2pem.py"
-                       (string-append bin "/certdata2pem.py"))
-            #t))))
-   (synopsis "Python script to extract .pem data from certificate collection")
-   (description
-    "certdata2pem.py is a Python script to transform X.509 certificate
-\"source code\" as contained, for example, in the Mozilla sources, into
-.pem formatted certificates.")
-   (license license:gpl2+)
-   (home-page "http://pkgs.fedoraproject.org/cgit/ca-certificates.git/")))
+(define-public certdata2pem
+  (let ((revision "1")
+        (commit "4c576f350f44186d439179f63d5be19f710a73f5"))
+    (package
+      (name "certdata2pem")
+      (version "0.0.0")                   ;no version
+      (source (origin
+                (method url-fetch)
+                (uri (string-append
+                      "https://raw.githubusercontent.com/sabotage-linux/sabotage/"
+                      commit "/KEEP/certdata2pem.c"))
+                (sha256
+                 (base32
+                  "1rywp29q4l1cs2baplkbcravxqs4kw2cys4yifhfznbc210pskq6"))))
+      (build-system gnu-build-system)
+      (arguments
+       `(#:phases (modify-phases %standard-phases
+                    (delete 'configure)
+                    (add-before 'build 'fix-extension
+                      (lambda _
+                        (substitute* "certdata2pem.c"
+                          (("\\.crt")
+                           ".pem"))))
+                    (replace 'build
+                      (lambda _
+                        (invoke ,(cc-for-target) "certdata2pem.c"
+                                "-o" "certdata2pem")))
+                    (delete 'check)     ;no test suite
+                    (replace 'install
+                      (lambda* (#:key outputs #:allow-other-keys)
+                        (let ((out (assoc-ref outputs "out")))
+                          (install-file "certdata2pem"
+                                        (string-append out "/bin"))))))))
+      (home-page "https://github.com/sabotage-linux/")
+      (synopsis "Utility to split TLS certificates data into multiple PEM files")
+      (description "This is a C version of the certdata2pem Python utility
+that was originally contributed to Debian.")
+      (license license:isc))))
 
 (define-public nss-certs
   (package
     (name "nss-certs")
-    (version "3.59")
+    ;; XXX We used to refer to the nss package here, but that eventually caused
+    ;; module cycles.  The below is a quick copy-paste job that must be kept in
+    ;; sync manually.  Surely there's a better way…?
+    (version "3.71")
     (source (origin
               (method url-fetch)
               (uri (let ((version-with-underscores
@@ -138,56 +141,44 @@ port forwarding to your local machine.")
                       "nss-" version ".tar.gz")))
               (sha256
                (base32
-                "096fs3z21r171q24ca3rq53p1389xmvqz1f2rpm7nlm8r9s82ag6"))))
+                "0ly2l3dv6z5hlxs72h5x6796ni3x1bq60saavaf42ddgv4ax7b4r"))
+              ;; Create nss.pc and nss-config.
+              (patches (search-patches "nss-3.56-pkgconfig.patch"
+                                       "nss-getcwd-nonnull.patch"
+                                       "nss-increase-test-timeout.patch"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  ;; Delete the bundled copy of these libraries.
+                  (delete-file-recursively "nss/lib/zlib")
+                  (delete-file-recursively "nss/lib/sqlite")))))
     (build-system gnu-build-system)
     (outputs '("out"))
     (native-inputs
-     `(("certdata2pem" ,certdata2pem)
-       ("openssl" ,openssl)
-       ("perl" ,perl)))                           ;for OpenSSL's 'c_rehash'
+     (list certdata2pem openssl))
     (inputs '())
     (propagated-inputs '())
     (arguments
      `(#:modules ((guix build gnu-build-system)
                   (guix build utils)
                   (rnrs io ports)
-                  (srfi srfi-26)
-                  (ice-9 regex))
+                  (srfi srfi-26))
        #:phases
        (modify-phases
            (map (cut assq <> %standard-phases)
                 '(set-paths install-locale unpack))
          (add-after 'unpack 'install
            (lambda _
-             (let ((certsdir (string-append %output "/etc/ssl/certs/"))
-                   (trusted-rx (make-regexp "^# openssl-trust=[a-zA-Z]"
-                                            regexp/newline)))
-
-               (define (maybe-install-cert file)
-                 (let ((cert (call-with-input-file file get-string-all)))
-                   (when (regexp-exec trusted-rx cert)
-                     (call-with-output-file
-                         (string-append certsdir file)
-                       (cut display cert <>)))))
-
-               (mkdir-p certsdir)
+             (let ((certsdir (string-append %output "/etc/ssl/certs/")))
                (with-directory-excursion "nss/lib/ckfw/builtins/"
-                 ;; extract single certificates from blob
-                 (invoke "certdata2pem.py" "certdata.txt")
-                 ;; copy selected .pem files into the output
-                 (for-each maybe-install-cert
-                           (find-files "." ".*\\.pem")))
-
-               (with-directory-excursion certsdir
-                 ;; create symbolic links for and by openssl
-                 ;; Strangely, the call (system* "c_rehash" certsdir)
-                 ;; from inside the build dir fails with
-                 ;; "Usage error; try -help."
-                 ;; This looks like a bug in openssl-1.0.2, but we can also
-                 ;; switch into the target directory.
-                 (invoke "c_rehash" "."))
-               #t))))))
-
+                 (unless (file-exists? "blacklist.txt")
+                   (call-with-output-file "blacklist.txt" (const #t)))
+                 ;; Extract selected single certificates from blob.
+                 (invoke "certdata2pem")
+                 ;; Copy .pem files into the output.
+                 (for-each (cut install-file <> certsdir)
+                           (find-files "." ".*\\.pem$")))
+               (invoke "openssl" "rehash" certsdir)))))))
     (synopsis "CA certificates from Mozilla")
     (description
      "This package provides certificates for Certification Authorities (CA)
@@ -231,8 +222,7 @@ taken from the NSS package and thus ultimately from the Mozilla project.")
                    (string-append openssl "/bin/c_rehash")
                    ".")))))
     (native-inputs
-     `(("openssl" ,openssl)
-       ("perl" ,perl)))                           ;for 'c_rehash'
+     (list openssl perl))                           ;for 'c_rehash'
     (inputs
      `(; The Let's Encrypt root certificate, "ISRG Root X1".
        ("isrgrootx1.pem"
diff --git a/gnu/packages/check.scm b/gnu/packages/check.scm
index 0bedd8b97d..fb5bcadf83 100644
--- a/gnu/packages/check.scm
+++ b/gnu/packages/check.scm
@@ -25,7 +25,7 @@
 ;;; Copyright © 2017, 2019 Kei Kebreau <kkebreau@posteo.net>
 ;;; Copyright © 2017 Nikita <nikita@n0.is>
 ;;; Copyright © 2015, 2017, 2018, 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
-;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2016-2022 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2017, 2018, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2018 Fis Trivial <ybbs.daans@hotmail.com>
 ;;; Copyright © 2019, 2021 Pierre Langlois <pierre.langlois@gmx.com>
@@ -68,6 +68,7 @@
   #: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-build)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
@@ -78,6 +79,7 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix gexp)
   #:use-module (guix git-download)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system glib-or-gtk)
@@ -102,11 +104,9 @@
         (base32 "0lsg791x6n95pxg6vif8qfc46nqcamhjq3g0dl5xqf6imy7n3acd"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("clang" ,clang)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python-wrapper)))
+     (list clang pkg-config python-wrapper))
     (inputs
-     `(("glib" ,glib)))
+     (list glib))
     (synopsis "Code checker for C")
     (description "Pedansee checks C source files for compliance with a particular
 programming style.  The style is currently defined by the pedansee source code
@@ -148,7 +148,27 @@ like Jasmine or Mocha.")
                           version "/check-" version ".tar.gz"))
       (sha256
        (base32
-        "02m25y9m46pb6n46s51av62kpd936lkfv3b13kfpckgvmh5lxpm8"))))
+        "02m25y9m46pb6n46s51av62kpd936lkfv3b13kfpckgvmh5lxpm8"))
+      (patches
+       (list
+        ;; This patch fixes some tests that would otherwise fail on
+        ;; powerpc64le-linux.  Without this patch, the tests make certain
+        ;; assumptions about floating point number precision that are not true
+        ;; on that platform.
+        ;;
+        ;; TODO: Remove this patch when updating to the next check release,
+        ;; since it will be included there.  See:
+        ;; https://debbugs.gnu.org/cgi/bugreport.cgi?bug=47698
+        (origin
+          (method url-fetch)
+          (uri
+           (string-append "https://github.com/libcheck/check/commit/"
+                          "4fbe702fa4f35bee8a90512f9f59d1441c4ae82e.patch"))
+          (file-name (string-append name
+                                    "-fix-test-precision-for-ppc.patch"))
+          (sha256
+           (base32
+            "04qg1p9afdd6453k18qskazrvscysdcjz9j6w4i6p5x4xyma19v6")))))))
     (build-system gnu-build-system)
     (home-page "https://libcheck.github.io/check/")
     (synopsis "Unit test framework for C")
@@ -227,7 +247,7 @@ source code editors and IDEs.")
                              (string-append out "/share/doc/clitest-" ,version))
                #t))))))
     (native-inputs
-     `(("perl" ,perl)))                 ;for tests
+     (list perl))                 ;for tests
     (synopsis "Command line test tool")
     (description
      "@command{clitest} is a portable shell script that performs automatic
@@ -255,9 +275,7 @@ testing of Unix command lines.")
                    (replace 'bootstrap
                      (lambda _ (invoke "autoreconf" "-vfi"))))))
     (native-inputs
-     `(("automake" ,automake)
-       ("autoconf" ,autoconf)
-       ("libtool" ,libtool)))
+     (list automake autoconf libtool))
     (home-page "http://cunit.sourceforge.net/")
     (synopsis "Automated testing framework for C")
     (description
@@ -416,7 +434,7 @@ a multi-paradigm automated test framework for C++ and Objective-C.")
                 "100r0kmra8jmra2hv92lzvwcmphpaiccwvq3lpdsa5b7hailhach"))))
     (build-system cmake-build-system)
     (inputs
-     `(("python" ,python-wrapper)))
+     (list python-wrapper))
     (synopsis "Automated test framework for C++ and Objective-C")
     (description "Catch2 stands for C++ Automated Test Cases in Headers and is
 a multi-paradigm automated test framework for C++ and Objective-C.")
@@ -439,12 +457,9 @@ a multi-paradigm automated test framework for C++ and Objective-C.")
     (build-system python-build-system)
     (arguments `(#:tests? #f))          ;requires Python 2!
     (native-inputs
-     `(("python-coverage-test-runner" ,python-coverage-test-runner)
-       ("python" ,python)))
+     (list python-coverage-test-runner python))
     (inputs
-     `(("python-cliapp" ,python-cliapp)
-       ("python-markdown" ,python-markdown)
-       ("python-ttystatus" ,python-ttystatus)))
+     (list python-cliapp python-markdown python-ttystatus))
     (home-page "https://liw.fi/cmdtest/")
     (synopsis "Black box Unix program tester")
     (description
@@ -538,7 +553,7 @@ normally do not detect.  The goal is to detect only real errors in the code
                (copy-recursively "../sample" (string-append doc-dir "/sample"))
                #t))))))
     (propagated-inputs
-     `(("python-ply" ,python-ply)))
+     (list python-ply))
     (home-page "https://cxxtest.com/")
     (synopsis "Unit testing framework for C++")
     (description "CxxTest is a unit testing framework for C++ that is similar
@@ -566,32 +581,6 @@ and it supports a very flexible form of test discovery.")
 has been designed to be fast, light and unintrusive.")
     (license license:expat)))
 
-(define-public go-gopkg.in-check.v1
-  (let ((commit "788fd78401277ebd861206a03c884797c6ec5541")
-        (revision "1"))
-    (package
-      (name "go-gopkg.in-check.v1")
-      (version (git-version "0.0.0" revision commit))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://github.com/go-check/check")
-                      (commit commit)))
-                (file-name (git-file-name name version))
-                (sha256
-                 (base32
-                  "0v3bim0j375z81zrpr5qv42knqs0y2qv2vkjiqi5axvb78slki1a"))))
-      (build-system go-build-system)
-      (arguments
-       '(#:import-path "gopkg.in/check.v1"))
-      (propagated-inputs
-       `(("go-github-com-kr-pretty" ,go-github-com-kr-pretty)))
-      (synopsis "Rich testing extension for Go's testing package")
-      (description
-       "@code{check} is a rich testing extension for Go's testing package.")
-      (home-page "https://github.com/go-check/check")
-      (license license:bsd-2))))
-
 (define-public go-github.com-smartystreets-gunit
   (package
     (name "go-github.com-smartystreets-gunit")
@@ -639,7 +628,7 @@ test) much simpler.")
     (arguments
      '(#:import-path "github.com/smartystreets/assertions"))
     (native-inputs
-     `(("go-github.com-smartystreets-gunit" ,go-github.com-smartystreets-gunit)))
+     (list go-github.com-smartystreets-gunit))
     (synopsis "Assertions for testing with Go")
     (description
      "The @code{assertions} package provides convenient assertion functions
@@ -664,8 +653,7 @@ for writing tests in Go.")
     (arguments
      '(#:import-path "github.com/smartystreets/goconvey"))
     (propagated-inputs
-     `(("go-github.com-jtolds-gls" ,go-github.com-jtolds-gls)
-       ("go-github.com-smartystreets-assertions" ,go-github.com-smartystreets-assertions)))
+     (list go-github.com-jtolds-gls go-github.com-smartystreets-assertions))
     (synopsis "Go testing tool with both a web and terminal user interface")
     (description
      "GoConvey is a testing tool for Go. It integrates with go test, can show
@@ -742,7 +730,7 @@ similar to unit tests.")
 (define-public cpputest
   (package
     (name "cpputest")
-    (version "3.8")
+    (version "4.0")
     (source
      (origin
        (method url-fetch)
@@ -750,10 +738,10 @@ similar to unit tests.")
                            version "/cpputest-" version ".tar.gz"))
        (sha256
         (base32
-         "0mk48xd3klyqi7wf3f4wn4zqxxzmvrhhl32r25jzrixzl72wq7f8"))))
+         "1xslavlb1974y5xvs8n1j9zkk05dlw8imy4saasrjlmibl895ii1"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("googletest" ,googletest)))
+     (list googletest))
     (home-page "https://cpputest.github.io/")
     (synopsis "Unit testing and mocking framework for C/C++")
     (description
@@ -782,8 +770,7 @@ but it works for any C/C++ project.")
                           (format #t "test suite not run~%"))
                       #t)))))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-nose" ,python-nose)))
+     (list python-mock python-nose))
     (home-page "https://github.com/wolever/parameterized")
     (synopsis "Parameterized testing with any Python test framework")
     (description
@@ -835,7 +822,7 @@ doctest.")
         (base32
          "1hrp6j0yrx2xzylfv02qa8kph661m6yq4p0mc8fnimch9j4psrc3"))))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (build-system python-build-system)
     (arguments
      ;; FIXME: Tests require "pytest", which depends on this package.
@@ -859,6 +846,7 @@ available via the @code{unittest.mock} module.")
          ("python2-funcsigs" ,python2-funcsigs)
          ,@(package-propagated-inputs base))))))
 
+;;; This package is unmaintained (see the note at the top of doc/index.rst).
 (define-public python-nose
   (package
     (name "python-nose")
@@ -872,15 +860,26 @@ available via the @code{unittest.mock} module.")
             "164a43k7k2wsqqk1s6vavcdamvss4mz0vd6pwzv2h9n8rgwzxgzi"))))
     (build-system python-build-system)
     (arguments
-     '(#:tests? #f)) ; FIXME: test suite fails
+     '(#:tests? #f
+       #:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'invoke-2to3
+                    (lambda _
+                      (invoke "2to3" "-w" "."))))))
     (home-page "http://readthedocs.org/docs/nose/")
     (synopsis "Python testing library")
     (description
      "Nose extends the unittest library to make testing easier.")
-    (license license:lgpl2.0+)))
+    (license license:lgpl2.0+)
+    (properties `((python2-variant . ,(delay python2-nose))))))
 
 (define-public python2-nose
-  (package-with-python2 python-nose))
+  (let ((base (package-with-python2
+               (strip-python2-variant python-nose))))
+    (package/inherit base
+      (arguments (substitute-keyword-arguments (package-arguments base)
+                   ((#:phases phases)
+                    `(modify-phases ,phases
+                       (delete 'invoke-2to3))))))))
 
 (define-public python-nose2
   (package
@@ -896,9 +895,7 @@ available via the @code{unittest.mock} module.")
     (build-system python-build-system)
     (arguments `(#:tests? #f)) ; 'module' object has no attribute 'collector'
     (propagated-inputs
-     `(("python-cov-core" ,python-cov-core)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-six" ,python-six)))
+     (list python-cov-core python-pytest-cov python-six))
     (home-page "https://github.com/nose-devs/nose2")
     (synopsis "Next generation of nicer testing for Python")
     (description
@@ -933,8 +930,7 @@ interfaces and processes.")
            (lambda _
              (zero? (system* "python" "-m" "unittest2" "discover" "--verbose")))))))
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-traceback2" ,python-traceback2)))
+     (list python-six python-traceback2))
     (home-page "https://pypi.org/project/unittest2/")
     (synopsis "Python unit testing library")
     (description
@@ -948,39 +944,46 @@ standard library.")
 (define-public python-pytest
   (package
     (name "python-pytest")
-    (version "5.3.5")
+    (version "6.2.5")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pytest" version))
        (sha256
         (base32
-         "139i9cjhrv5aici3skq8iihvfb3lq0d8xb5j7qycr2hlk8cfjpqd"))))
+         "12cyi0lnyaq8sdqfnqlppd76gkw6zcg10gyih5knx9v611l3c6qk"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
+         (add-before 'build 'pretend-version
+           ;; The version string is usually derived via setuptools-scm, but
+           ;; without the git metadata available, the version string is set to
+           ;; '0.0.0'.
+           (lambda _
+             (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" ,version)))
          (replace 'check
            (lambda* (#:key (tests? #t) #:allow-other-keys)
+             (setenv "TERM" "dumb")     ;attempt disabling markup tests
              (if tests?
                  (invoke "pytest" "-vv" "-k"
                          (string-append
-                          ;; These tests involve the /usr directory, and fails.
-                          "not test_remove_dir_prefix"
-                          " and not test_argcomplete"
-                          ;; This test tries to override PYTHONPATH, and
-                          ;; subsequently fails to locate the test libraries.
-                          " and not test_collection"))
-                 (format #t "test suite not run~%"))
-             #t)))))
+                          ;; This test involves the /usr directory, and fails.
+                          " not test_argcomplete"
+                          ;; These test do not honor the isatty detection and
+                          ;; fail.
+                          " and not test_code_highlight"
+                          " and not test_color_yes"))
+                 (format #t "test suite not run~%")))))))
     (propagated-inputs
-     `(("python-atomicwrites" ,python-atomicwrites)
-       ("python-attrs" ,python-attrs-bootstrap)
+     `(("python-attrs" ,python-attrs-bootstrap)
+       ("python-iniconfig" ,python-iniconfig)
        ("python-more-itertools" ,python-more-itertools)
        ("python-packaging" ,python-packaging-bootstrap)
        ("python-pluggy" ,python-pluggy)
        ("python-py" ,python-py)
        ("python-six" ,python-six-bootstrap)
+       ("python-toml" ,python-toml)
        ("python-wcwidth" ,python-wcwidth)))
     (native-inputs
      `(;; Tests need the "regular" bash since 'bash-final' lacks `compgen`.
@@ -990,6 +993,7 @@ standard library.")
        ("python-mock" ,python-mock)
        ("python-pytest" ,python-pytest-bootstrap)
        ("python-setuptools-scm" ,python-setuptools-scm)
+       ("python-toml" ,python-toml)
        ("python-xmlschema" ,python-xmlschema)))
     (home-page "https://docs.pytest.org/en/latest/")
     (synopsis "Python testing library")
@@ -1000,52 +1004,7 @@ and many external plugins.")
     (license license:expat)
     (properties `((python2-variant . ,(delay python2-pytest))))))
 
-(define-public python-pytest-6
-  (package
-    (inherit (strip-python2-variant python-pytest))
-    (version "6.2.4")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "pytest" version))
-       (sha256
-        (base32
-         "0jy5f83la1864ss42dhsi1mcm5nl79d8bjg7wk474nlw1c5avg2h"))))
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-version
-           ;; The version string is usually derived via setuptools-scm, but
-           ;; without the git metadata available, the version string is set to
-           ;; '0.0.0'.
-           (lambda _
-             (substitute* "setup.py"
-               (("setup\\(\\)")
-                (format #f "setup(version=~s)" ,version)))))
-         (replace 'check
-           (lambda* (#:key (tests? #t) #:allow-other-keys)
-             (setenv "TERM" "dumb")     ;attempt disabling markup tests
-             (if tests?
-                 (invoke "pytest" "-vv" "-k"
-                         (string-append
-                          ;; This test involves the /usr directory, and fails.
-                          " not test_argcomplete"
-                          ;; These test do not honor the isatty detection and
-                          ;; fail.
-                          " and not test_code_highlight"
-                          " and not test_color_yes"))
-                 (format #t "test suite not run~%")))))))
-    (propagated-inputs
-     (append (alist-delete "python-py"
-                           (package-propagated-inputs python-pytest))
-         `(("python-iniconfig" ,python-iniconfig)
-           ("python-py" ,python-py-next))))
-    (native-inputs
-     (append (fold alist-delete (package-native-inputs python-pytest)
-                   '("python-mock"
-                     "python-pytest"))
-         `(("python-pytest" ,python-pytest-6-bootstrap)
-           ("python-toml" ,python-toml))))))
+(define-public python-pytest-6 python-pytest)
 
 ;; Pytest 4.x are the last versions that support Python 2.
 (define-public python2-pytest
@@ -1087,19 +1046,11 @@ and many external plugins.")
   (package
     (inherit (strip-python2-variant python-pytest))
     (name "python-pytest-bootstrap")
-    (native-inputs `(("python-setuptools-scm" ,python-setuptools-scm)))
+    (native-inputs (list python-iniconfig python-setuptools-scm
+                         python-toml))
     (arguments `(#:tests? #f))
     (properties `((python2-variant . ,(delay python2-pytest-bootstrap))))))
 
-(define-public python-pytest-6-bootstrap
-  (package
-    (inherit (strip-python2-variant python-pytest-6))
-    (name "python-pytest-bootstrap")
-    (arguments `(#:tests? #f))
-    (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-toml" ,python-toml)))))
-
 (define-public python2-pytest-bootstrap
   (hidden-package
    (package/inherit
@@ -1140,8 +1091,7 @@ and many external plugins.")
                       (when tests?
                         (invoke "pytest")))))))
     (propagated-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-six" ,python-six)))
+     (list python-pytest python-six))
     (home-page "https://github.com/astraw38/pytest-assume")
     (synopsis "Pytest plugin that allows multiple failures per test")
 
@@ -1177,8 +1127,7 @@ following improvements:
             (invoke "python" "./setup.py" "check"
                     "--strict" "--metadata"))))))
     (propagated-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-pytest" ,python-pytest)))
+     (list python-coverage python-pytest))
     (home-page "https://github.com/pytest-dev/pytest-cov")
     (synopsis "Pytest plugin for measuring coverage")
     (description
@@ -1202,15 +1151,15 @@ supports coverage of subprocesses.")
                 "0vbls0j570l5my83j4jnk5blmnir44i0w511azlh41nl6k8rac5f"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (propagated-inputs
-     `(("python-werkzeug" ,python-werkzeug)))
+     (list python-werkzeug))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
          (add-before 'check 'fix-library-loading
            (lambda _
-             (setenv "PYTHONPATH" (string-append (getenv "PYTHONPATH") ":."))))
+             (setenv "GUIX_PYTHONPATH" (string-append (getenv "GUIX_PYTHONPATH") ":."))))
          (replace 'check
            (lambda _
              (invoke "pytest" "tests" "-vv")
@@ -1239,7 +1188,7 @@ contacting the real http server.")
                       (when tests?
                         (invoke "python" "-m" "pytest" "--random-order")))))))
     (propagated-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/jbasko/pytest-random-order")
     (synopsis "Pytest plugin to randomize the order of tests")
     (description "@code{pytest-random-order} is a Pytest plugin that
@@ -1275,7 +1224,7 @@ reported in a previous test run.")
                           (format #t "test suite not run~%"))
                       #t)))))
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-setuptools-scm))
     (home-page "https://github.com/pytest-dev/pytest-runner")
     (synopsis "Invoke py.test as a distutils command")
     (description
@@ -1322,7 +1271,7 @@ reported in a previous test run.")
              (add-installed-pythonpath inputs outputs)
              (invoke "pytest" "-vv"))))))
     (propagated-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/tvorog/pytest-lazy-fixture")
     (synopsis "Use fixtures in @code{pytest.mark.parametrize}")
     (description "This plugin helps to use fixtures in
@@ -1337,28 +1286,34 @@ reported in a previous test run.")
      (origin
        (method url-fetch)
        (uri (pypi-uri "pytest-mock" version))
-       (sha256 (base32
-                "0qhfmd05z3g88bnwq6644jl6p5wy01i4yy7h8883z9jjih2pl8a0"))))
+       (sha256
+        (base32 "0qhfmd05z3g88bnwq6644jl6p5wy01i4yy7h8883z9jjih2pl8a0"))
+       (modules '((guix build utils)))
+       (snippet
+        ;; Some tests do a string match on Pytest output, and fails when
+        ;; warnings are present.  Adjust to cope with warnings from
+        ;; third-party libraries (looking at you, pytest-asyncio).
+        '(substitute* "tests/test_pytest_mock.py"
+           (("1 passed in \\*")
+            "1 passed*")))))
     (build-system python-build-system)
     (arguments
-     `(#:phases
+     '(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+           (lambda* (#:key tests? #:allow-other-keys)
              (when tests?
-               (add-installed-pythonpath inputs outputs)
                ;; Skip the assertion rewriting tests, which don't work in the
                ;; presence of read-only Python modules (a limitation of
                ;; Pytest).  Also skip the "test_standalone_mock" test, which
                ;; can only work when 'python-mock' is not available
                ;; (currently propagated by Pytest 5).
-               (invoke "pytest" "--assert=plain"
+               (invoke "pytest" "--assert=plain" "-vv"
                        "-k" "not test_standalone_mock")))))))
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-pytest-asyncio python-setuptools-scm))
     (propagated-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-asyncio" ,python-pytest-asyncio)))
+     (list python-pytest))
     (home-page "https://github.com/pytest-dev/pytest-mock/")
     (synopsis "Thin-wrapper around the mock package for easier use with py.test")
     (description
@@ -1384,6 +1339,8 @@ same arguments.")
            "1i5mg3ff1qk0wqfcxfz60hwy3q5dskdp36i10ckigkzffg8hc3ad"))))
       (arguments
        `(#:python ,python-2))
+      (native-inputs
+       `(("python2-setuptools-scm" ,python2-setuptools-scm)))
       (propagated-inputs
        `(("python2-mock" ,python2-mock)
          ("python2-pytest" ,python2-pytest))))))
@@ -1391,20 +1348,32 @@ same arguments.")
 (define-public python-pytest-xdist
   (package
     (name "python-pytest-xdist")
-    ;; There is an issue that causes all releases after 1.34 to fail on Pytest
-    ;; 5 (see: https://github.com/pytest-dev/pytest-xdist/issues/697).
-    (version "1.34.0")
+    (version "2.1.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pytest-xdist" version))
        (sha256
         (base32
-         "1vh4ps32lp5ignch5adbl3pgchvigdfmrl6qpmhxih54wa1qw3il"))))
+         "0wh6pn66nncfs6ay0n863bgyriwsgppn8flx5l7551j1lbqkinc2"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           ;; Remove pre-compiled .pyc files from source.
+           (for-each delete-file-recursively
+                     (find-files "." "__pycache__" #:directories? #t))
+           (for-each delete-file (find-files "." "\\.pyc$"))
+           #t))))
     (build-system python-build-system)
     (arguments
-     `(#:phases
+     '(#:tests? #f ; Lots of tests fail.
+       #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'patch-setup-py
+           (lambda _
+             ;; Relax pytest requirement.
+             (substitute* "setup.py"
+               (("pytest>=6\\.0\\.0") "pytest"))))
          (replace 'check
            (lambda* (#:key inputs outputs tests? #:allow-other-keys)
              (when tests?
@@ -1412,11 +1381,9 @@ same arguments.")
                (invoke "pytest" "-vv"
                        "-n" (number->string (parallel-job-count)))))))))
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-setuptools-scm))
     (propagated-inputs
-     `(("python-execnet" ,python-execnet)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-forked" ,python-pytest-forked)))
+     (list python-execnet python-pytest python-py python-pytest-forked))
     (home-page
      "https://github.com/pytest-dev/pytest-xdist")
     (synopsis
@@ -1452,14 +1419,14 @@ result back.")
 (define-public python-pytest-timeout
   (package
     (name "python-pytest-timeout")
-    (version "1.4.2")
+    (version "2.0.2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pytest-timeout" version))
        (sha256
         (base32
-         "0xnsigs0kmpq1za0d4i522sp3f71x5bgpdh3ski0rs74yqy13cr0"))))
+         "04l1cd2qyp3fbccw95a8nqg682r647v7yil8807dgs7xv9a8pyg6"))))
     (build-system python-build-system)
     (arguments
      '(#:phases (modify-phases %standard-phases
@@ -1469,10 +1436,9 @@ result back.")
                       (add-installed-pythonpath inputs outputs)
                       (invoke "pytest" "-vv"))))))
     (propagated-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)))
+     (list python-pytest python-pytest-cov))
     (native-inputs
-     `(("python-pexpect" ,python-pexpect)))
+     (list python-pexpect))
     (home-page "https://github.com/pytest-dev/pytest-timeout")
     (synopsis "Plugin for py.test to abort hanging tests")
     (description
@@ -1537,7 +1503,7 @@ side-effects (such as setting environment variables).")
          "0f4w84k8ck82syys7yg9maz93mqzc8p5ymis941x034v44jzq74m"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page (string-append "https://web.archive.org/web/20161029233413/"
                               "http://pythonpaste.org/scripttest/"))
     (synopsis "Python library to test command-line scripts")
@@ -1549,25 +1515,20 @@ subprocess and see the output as well as any file modifications.")
 (define-public python-testtools-bootstrap
   (package
     (name "python-testtools-bootstrap")
-    (version "2.3.0")
+    (version "2.5.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "testtools" version))
        (sha256
         (base32
-         "0n8519lk8aaa91vymz842831181wf7fss98hyllhygi3z1nfq9sq"))
-       (patches (search-patches "python-testtools.patch"))))
+         "0gxjbjk93jjqi491k4s9rh3ia37v21yifd35pvizv7sgv4rk9hap"))))
     (build-system python-build-system)
     (arguments '(#:tests? #f))
     (propagated-inputs
      `(("python-extras" ,python-extras)
        ("python-fixtures" ,python-fixtures-bootstrap)
-       ("python-mimeparse" ,python-mimeparse)
-       ("python-pbr" ,python-pbr-minimal)
-       ("python-six" ,python-six)
-       ("python-traceback2" ,python-traceback2)
-       ("python-unittest2" ,python-unittest2)))
+       ("python-pbr" ,python-pbr-minimal)))
     (home-page "https://github.com/testing-cabal/testtools")
     (synopsis
      "Extensions to the Python standard library unit testing framework")
@@ -1580,19 +1541,15 @@ subprocess and see the output as well as any file modifications.")
     (inherit python-testtools-bootstrap)
     (name "python-testtools")
     (arguments
-     `(#:phases (modify-phases %standard-phases
-                  (replace 'check
-                    (lambda _
-                      (invoke "python" "-m" "testtools.run"
-                              "testtools.tests.test_suite"))))))
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "python" "-m" "testtools.run"
+                       "testtools.tests.test_suite")))))))
     (propagated-inputs
-     `(("python-extras" ,python-extras)
-       ("python-fixtures" ,python-fixtures)
-       ("python-mimeparse" ,python-mimeparse)
-       ("python-pbr" ,python-pbr)
-       ("python-six" ,python-six)
-       ("python-traceback2" ,python-traceback2)
-       ("python-unittest2" ,python-unittest2)))
+     (list python-extras python-fixtures python-pbr))
     (native-inputs
      `(("python-testscenarios" ,python-testscenarios-bootstrap)))
     (description
@@ -1632,8 +1589,7 @@ compatibility.")))
     (inherit python-testscenarios-bootstrap)
     (name "python-testscenarios")
     (propagated-inputs
-     `(("python-pbr" ,python-pbr)
-       ("python-testtools" ,python-testtools)))
+     (list python-pbr python-testtools))
     (description
      "Testscenarios provides clean dependency injection for Python unittest
 style tests.")))
@@ -1667,11 +1623,10 @@ testresources package instead.")
     (inherit python-testresources-bootstrap)
     (name "python-testresources")
     (propagated-inputs
-     `(("python-pbr" ,python-pbr)))
+     (list python-pbr))
     (arguments '())
     (native-inputs
-     `(("python-fixtures" ,python-fixtures)
-       ("python-testtols" ,python-testtools)))
+     (list python-fixtures python-testtools))
     (description
      "Testresources is an extension to Python's unittest to allow declarative
 use of resources by test cases.")))
@@ -1689,12 +1644,10 @@ use of resources by test cases.")))
          "0j0ymmnc5nfxi1qzvy59j27viqca7l7xd0y9x29g7yr0h693j804"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-extras" ,python-extras)
-       ("python-testtools" ,python-testtools-bootstrap)))
+     (list python-extras python-testtools-bootstrap))
     (native-inputs
-     `(("python-fixtures" ,python-fixtures-bootstrap)
-       ("python-hypothesis" ,python-hypothesis)
-       ("python-testscenarios" ,python-testscenarios-bootstrap)))
+     (list python-fixtures-bootstrap python-hypothesis
+           python-testscenarios-bootstrap))
     (home-page "https://launchpad.net/subunit")
     (synopsis "Python implementation of the subunit protocol")
     (description
@@ -1707,12 +1660,9 @@ python-subunit package instead.")
     (inherit python-subunit-bootstrap)
     (name "python-subunit")
     (propagated-inputs
-     `(("python-extras" ,python-extras)
-       ("python-testtools" ,python-testtools)))
+     (list python-extras python-testtools))
     (native-inputs
-     `(("python-fixtures" ,python-fixtures)
-       ("python-hypothesis" ,python-hypothesis)
-       ("python-testscenarios" ,python-testscenarios)))
+     (list python-fixtures python-hypothesis python-testscenarios))
     (description
      "Python-subunit is a Python implementation of the subunit test streaming
 protocol.")))
@@ -1723,17 +1673,23 @@ protocol.")))
   (package
     (name "python-fixtures-bootstrap")
     (version "3.0.0")
-    (source (origin
-              (method url-fetch)
-              (uri (pypi-uri "fixtures" version))
-              (sha256
-               (base32
-                "1vxj29bzz3rd4pcy51d05wng9q9dh4jq6wx92yklsm7i6h1ddw7w"))))
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "fixtures" version))
+        (sha256
+         (base32
+          "1vxj29bzz3rd4pcy51d05wng9q9dh4jq6wx92yklsm7i6h1ddw7w"))
+        (patches (search-patches "python-fixtures-remove-monkeypatch-test.patch"))))
     (build-system python-build-system)
-    (arguments `(#:tests? #f))
+    (arguments
+      `(#:tests? #f
+        #:phases
+         (modify-phases %standard-phases
+           ;; Package is not loadable on its own at this stage.
+           (delete 'sanity-check))))
     (propagated-inputs
-     `(("python-pbr-minimal" ,python-pbr-minimal)
-       ("python-six" ,python-six)))
+     (list python-pbr-minimal python-six))
     (home-page "https://launchpad.net/python-fixtures")
     (synopsis "Python test fixture library")
     (description
@@ -1749,13 +1705,13 @@ python-fixtures package instead.")
      '(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda _
-             (invoke "python" "-m" "testtools.run"
-                     "fixtures.test_suite"))))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "python" "-m" "testtools.run"
+                       "fixtures.test_suite")))))))
     (propagated-inputs
      ;; Fixtures uses pbr at runtime to check versions, etc.
-     `(("python-pbr" ,python-pbr)
-       ("python-six" ,python-six)))
+     (list python-pbr python-six))
     (native-inputs
      `(("python-mock" ,python-mock)
        ("python-testtools" ,python-testtools-bootstrap)))
@@ -1781,7 +1737,7 @@ Python tests.")))
        ("python-subunit" ,python-subunit-bootstrap)
        ("python-testtools" ,python-testtools-bootstrap)))
     (native-inputs
-     `(("python-mimeparse" ,python-mimeparse)))
+     (list python-mimeparse))
     (home-page "https://launchpad.net/testrepository")
     (synopsis "Database for Python test results")
     (description
@@ -1796,11 +1752,9 @@ Python tests.")))
      ;; FIXME: Many tests are failing.
      '(#:tests? #f))
     (propagated-inputs
-     `(("python-fixtures" ,python-fixtures)
-       ("python-subunit" ,python-subunit)
-       ("python-testtools" ,python-testtools)))
+     (list python-fixtures python-subunit python-testtools))
     (native-inputs
-     `(("python-mimeparse" ,python-mimeparse)))
+     (list python-mimeparse))
     (description "Testrepository provides a database of test results which can
 be used as part of a developer's workflow to check things such as what tests
 have failed since the last commit or what tests are currently failing.")))
@@ -1835,9 +1789,7 @@ executed.")
 (define-public python-pytest-asyncio
   (package
     (name "python-pytest-asyncio")
-    ;; Version 0.10.0 is the last version which is compatible with Pytest <=
-    ;; 5.4.0.
-    (version "0.10.0")
+    (version "0.17.2")
     (source
      (origin
        (method git-fetch)               ;for tests
@@ -1846,23 +1798,24 @@ executed.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32
-         "1m63b7nbph5z20mn8jgh6j9ac873i1k4in29x44vrkw3qwfwg13y"))
-       (patches (search-patches "python-pytest-asyncio-python-3.8.patch"))))
+        (base32 "0sl0ckc23m40q6r2xcidsizrgqbbsfa7rwmr80fss359xsydf073"))))
     (build-system python-build-system)
     (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (replace 'check
-           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
-             (when tests?
-               (add-installed-pythonpath inputs outputs)
-               (invoke "pytest" "-vv")))))))
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'pretend-version
+                 (lambda _
+                   (setenv "SETUPTOOLS_SCM_PRETEND_VERSION"
+                           #$(package-version this-package))))
+               (replace 'check
+                 (lambda* (#:key tests? #:allow-other-keys)
+                   (invoke "pytest" "-vv" "tests"))))))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-async-generator" ,python-async-generator)
-       ("python-hypothesis" ,python-hypothesis)
-       ("python-pytest" ,python-pytest)))
+     (list python-async-generator
+           python-flaky
+           python-hypothesis
+           python-pytest
+           python-setuptools-scm))
     (home-page "https://github.com/pytest-dev/pytest-asyncio")
     (synopsis "Pytest support for asyncio")
     (description "Python asyncio code is usually written in the form of
@@ -1884,7 +1837,7 @@ to make testing async code easier.")
           "0k3np9ymh06yv1ib96sb6wfsxjkqhmik8qfsn119vnhga9ywc52a"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-coverage" ,python-coverage)))
+     (list python-coverage))
     (home-page "https://github.com/schlamar/cov-core")
     (synopsis "Coverage plugin core for pytest-cov, nose-cov and nose2-cov")
     (description
@@ -1909,10 +1862,9 @@ testing frameworks.")
           "1217c0vqf7ii65635gvl27a5pfhv0r7zhrpdp9cx640hg73bgn4f"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-unittest2" ,python-unittest2)))
+     (list python-unittest2))
     (propagated-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-requests" ,python-requests)))
+     (list python-coverage python-requests))
     (home-page "https://github.com/codecov/codecov-python")
     (synopsis "Upload code coverage reports to @code{codecov.io}")
     (description
@@ -1923,7 +1875,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.4.4")
+    (version "0.5.0")
     (source
      (origin
        (method git-fetch)
@@ -1933,35 +1885,33 @@ C/C++, R, and more, and uploads it to the @code{codecov.io} service.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1fwv4d3p54xx1x942s104irr35lszvv6jnr4nn1scsfvc0m1qmbk"))))
+         "08r1c6bhvj8pcdvzkqv1950k36a6q3v81fd2p1yqdq3c07mcwgif"))))
     (build-system python-build-system)
     (arguments
-     `(#:tests? #f ; this package does not even have a setup.py
-       #:modules ((guix build python-build-system)
-                  (guix build utils)
-                  (srfi srfi-1))
-       #: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$"))))))))
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'relax-requirements
+            (lambda _
+              (substitute* "pyproject.toml"
+                (("flit_core >=3.2.0,<3.3")
+                 "flit_core >=3.2.0"))))
+          ;; XXX: PEP 517 manual build copied from python-isort.
+          (replace 'build
+            (lambda _
+              (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
+          (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "pytest"))))
+          (replace 'install
+            (lambda _
+              (let ((whl (car (find-files "dist" "\\.whl$"))))
+                (invoke "pip" "--no-cache-dir" "--no-input"
+                        "install" "--no-deps" "--prefix" #$output whl)))))))
     (native-inputs
-     `(("python-flit" ,python-flit)))
-    (home-page "https://github.com/takluyver/testpath")
+     (list python-pypa-build python-flit-core python-pytest))
+    (home-page "https://github.com/jupyter/testpath")
     (synopsis "Test utilities for code working with files and commands")
     (description
      "Testpath is a collection of utilities for Python code working with files
@@ -1981,7 +1931,7 @@ tools for mocking system commands and recording calls to those.")
         (base32 "1mz26cxn4x8bbgv0rn0mvj2z05y31rkc8009nvdlb3lam5b4mj3y"))))
     (build-system python-build-system)
     (native-inputs
-     `(("unzip" ,unzip)))  ; for unpacking the source
+     (list unzip))  ; for unpacking the source
     (synopsis "Python micro test suite harness")
     (description "A micro unittest suite harness for Python.")
     (home-page "https://github.com/trentm/testlib")
@@ -2003,10 +1953,7 @@ tools for mocking system commands and recording calls to those.")
                "1a873fihw4rhshc722j4h6j7g3nj7xpgsna9hhg3zn6ksknnhx5y"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-apipkg" ,python-apipkg)
-       ("python-execnet" ,python-execnet)
-       ("python-py" ,python-py)
-       ("python-pytest" ,python-pytest)))
+     (list python-apipkg python-execnet python-py python-pytest))
     (synopsis "Py.test plugin with mechanisms for caching across test runs")
     (description "The pytest-cache plugin provides tools to rerun failures from
 the last py.test invocation.")
@@ -2034,11 +1981,9 @@ the last py.test invocation.")
            (lambda _
              (invoke "py.test" "-v"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-requests" ,python-requests)
-       ("python-six" ,python-six)))
+     (list python-pytest python-requests python-six))
     (propagated-inputs
-     `(("python-werkzeug" ,python-werkzeug)))
+     (list python-werkzeug))
     (synopsis "Py.test plugin to test server connections locally")
     (description "Pytest-localserver is a plugin for the pytest testing
 framework which enables you to test server connections locally.")
@@ -2057,15 +2002,13 @@ framework which enables you to test server connections locally.")
                "0rm2rchrr63imn44xk5slwydxf8gvy579524qcxq7dc42pnk17zx"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-setuptools-scm))
     (propagated-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-cache" ,python-pytest-cache)
-       ("python-psutil" ,python-psutil)))
+     (list python-pytest python-psutil))
     (synopsis "Pytest plugin to manage external processes across test runs")
     (description "Pytest-xprocess is an experimental py.test plugin for managing
 processes across test runs.")
-    (home-page "https://github.com/pytest-dev/pytest-xprocess")
+    (home-page "https://github.com/pytest-dev/pytest-xprocess/")
     (license license:expat)))
 
 (define-public python-pytest-subtesthack
@@ -2080,7 +2023,7 @@ processes across test runs.")
                 "15kzcr5pchf3id4ikdvlv752rc0j4d912n589l4rifp8qsj19l1x"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (synopsis "Set-up and tear-down fixtures for unit tests")
     (description "This plugin allows you to set up and tear down fixtures within
 unit test functions that use @code{py.test}. This is useful for using
@@ -2105,9 +2048,7 @@ normally the case.")
         (base32 "1i0hv3h49zvl62jbiyjag84carbrp3zprqzxffdr291nxavvac0n"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-packaging" ,python-packaging)
-       ("python-pytest" ,python-pytest)
-       ("python-termcolor" ,python-termcolor)))
+     (list python-packaging python-pytest python-termcolor))
     (home-page "https://pivotfinland.com/pytest-sugar/")
     (synopsis "Plugin for pytest that changes the default look and feel")
     (description
@@ -2119,13 +2060,13 @@ instantly.")
 (define-public python-hypothesis
   (package
     (name "python-hypothesis")
-    (version "5.4.1")
+    (version "6.0.2")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "hypothesis" version))
               (sha256
                (base32
-                "0zn09bn6hadk4vxl6jy8bkjr5fz8mrhin3z46w7pq5qgbaycr89p"))))
+                "0wj7ip779naf2n076nylf2gi0sjz68z1ir9d9r2rgs7br18naqdf"))))
     (build-system python-build-system)
     (arguments
      ;; XXX: Tests are not distributed with the PyPI archive.
@@ -2142,17 +2083,16 @@ seamlessly into your existing Python unit testing work flow.")
     (license license:mpl2.0)
     (properties `((python2-variant . ,(delay python2-hypothesis))))))
 
-(define-public python-hypothesis-5.23
+(define-public python-hypothesis-6.23
   (package
     (inherit python-hypothesis)
-    (version "5.23.0")
+    (version "6.23.4")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "hypothesis" version))
               (sha256
                (base32
-                "0sy1v6nyxg4rjcf3rlr8nalb7wqd9nccpb2lzkchbj5an13ysf1h"))))
-    (home-page "https://github.com/HypothesisWorks/hypothesis")))
+                "0wp8i9qmd5wl1sq1l2b97fgliyk5fyphssl6j7q5qn5zjlfgi4qs"))))))
 
 ;; This is the last version of Hypothesis that supports Python 2.
 (define-public python2-hypothesis
@@ -2167,25 +2107,23 @@ seamlessly into your existing Python unit testing work flow.")
                  (base32
                   "183gpxbfcdhdqzlahkji5a71n6lmvgqsbkcb0ihqad51n2j6jhrw"))))
       (propagated-inputs
-       `(("python2-enum34" ,python2-enum34)
-         ,@(package-propagated-inputs hypothesis))))))
+       (modify-inputs (package-propagated-inputs hypothesis)
+         (prepend python2-enum34))))))
 
 (define-public python-hypothesmith
   (package
     (name "python-hypothesmith")
-    (version "0.1.2")
+    (version "0.1.8")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "hypothesmith" version))
        (sha256
         (base32
-         "09331sspknv459xcyn1k0lx5flqlc6gmnwp9370pfvg4kg1zmss6"))))
+         "02j101m5grjrbvrgjap17jsxd1hgawkylmyswcn33vf42mxh9zzr"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-hypothesis" ,python-hypothesis-5.23)
-       ("python-lark-parser" ,python-lark-parser)
-       ("python-libcst" ,python-libcst)))
+     (list python-hypothesis python-lark-parser python-libcst-minimal))
     (home-page "https://github.com/Zac-HD/hypothesmith")
     (synopsis "Strategies for generating Python programs")
     (description
@@ -2196,14 +2134,14 @@ programs, something like CSmith, a random generator of C programs.")
 (define-public python-lit
   (package
     (name "python-lit")
-    (version "0.5.1")
+    (version "12.0.1")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "lit" version))
         (sha256
          (base32
-          "0z651m3vkbk85y41larnsjxrszkbi58x9gzml3lb6ga7qwcrsg97"))))
+          "01yggsb73s2gbq36xwifxl6k5ll5lkss5rwz59k9h3jnbnn7m5fj"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -2212,7 +2150,7 @@ programs, something like CSmith, a random generator of C programs.")
            (lambda _
              (invoke "python" "lit.py" "tests"))))))
     (native-inputs
-     `(("llvm" ,llvm)))
+     (list llvm))
     (home-page "https://llvm.org/")
     (synopsis "LLVM Software Testing Tool")
     (description "@code{lit} is a portable tool for executing LLVM and Clang
@@ -2220,9 +2158,6 @@ style test suites, summarizing their results, and providing indication of
 failures.")
     (license license:ncsa)))
 
-(define-public python2-lit
-  (package-with-python2 python-lit))
-
 (define-public python-pytest-pep8
   (package
     (name "python-pytest-pep8")
@@ -2235,11 +2170,22 @@ failures.")
                 "06032agzhw1i9d9qlhfblnl3dw5hcyxhagn7b120zhrszbjzfbh3"))))
     (build-system python-build-system)
     (arguments
-     `(#:tests? #f)) ; Fails with recent pytest and pep8. See upstream issues #8 and #12.
+     `(#:tests? #f ; Fails with recent pytest and pep8. See upstream issues #8 and #12.
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-dependencies
+           (lambda _
+             (substitute* "setup.py"
+               (("'pytest-cache', ") ""))))  ; Included in recent pytest
+         (replace 'check
+            (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+              (when tests?
+                (add-installed-pythonpath inputs outputs)
+                (invoke "pytest" "-v")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (propagated-inputs
-     `(("python-pep8" ,python-pep8)))
+     (list python-pep8))
     (home-page "https://bitbucket.org/pytest-dev/pytest-pep8")
     (synopsis "Py.test plugin to check PEP8 requirements")
     (description "Pytest plugin for checking PEP8 compliance.")
@@ -2270,12 +2216,10 @@ failures.")
              (add-installed-pythonpath inputs outputs)
              (invoke "py.test" "-vv" "-k" "not test_syntax_error"))))))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cache" ,python-pytest-cache)
-       ("python-pytest-pep8" ,python-pytest-pep8)))
+     (list python-coverage python-pytest python-pytest-cache
+           python-pytest-pep8))
     (propagated-inputs
-     `(("python-pyflakes" ,python-pyflakes)))
+     (list python-pyflakes))
     (home-page "https://github.com/fschulze/pytest-flakes")
     (synopsis "Py.test plugin to check source code with pyflakes")
     (description "Pytest plugin for checking Python source code with pyflakes.")
@@ -2306,7 +2250,7 @@ failures.")
            (lambda _
              (invoke "./testrun"))))))
     (propagated-inputs
-     `(("python-coverage" ,python-coverage)))
+     (list python-coverage))
     (home-page "https://liw.fi/coverage-test-runner/")
     (synopsis "Python module for running unit tests")
     (description "@code{CoverageTestRunner} is a python module for running
@@ -2320,33 +2264,40 @@ statements in the module it tests.")
 (define-public python-pylint
   (package
     (name "python-pylint")
-    (version "2.5.3")
+    (version "2.12.2")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
              (url "https://github.com/PyCQA/pylint")
-             (commit (string-append "pylint-" version))))
+             (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "04cgbh2z1mygar63plzziyz34yg6bdr4i0g63jp256fgnqwb1bi3"))))
+        (base32 "0spmy7j1vvh55shzgma80q61y0d1cj45dcgslb4g5w3y602miq5i"))))
     (build-system python-build-system)
-    ;; FIXME: Tests are failing since version 2.4.3, see:
-    ;; https://github.com/PyCQA/pylint/issues/3198.
-    (arguments '(#:tests? #f))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               ;; The unused but collected 'primer'-related test files require
+               ;; the extraneous 'git' Python module; remove them.
+               (delete-file "tests/primer/test_primer_external.py")
+               (delete-file "tests/testutils/test_package_to_lint.py")
+               (setenv "HOME" "/tmp")
+               (invoke "pytest" "-k" "test_functional")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)
-       ("python-tox" ,python-tox)))
+     (list python-pytest))
     (propagated-inputs
-     `(("python-astroid" ,python-astroid)
-       ("python-isort" ,python-isort)
-       ("python-mccabe" ,python-mccabe)
-       ("python-six" ,python-six)
-       ("python-toml" ,python-toml)))
+     (list python-astroid
+           python-isort
+           python-mccabe
+           python-platformdirs
+           python-toml
+           python-typing-extensions))
     (home-page "https://github.com/PyCQA/pylint")
-    (synopsis "Python source code analyzer which looks for coding standard
-errors")
+    (synopsis "Advanced Python code static checker")
     (description "Pylint is a Python source code analyzer which looks
 for programming errors, helps enforcing a coding standard and sniffs
 for some code smells (as defined in Martin Fowler's Refactoring book).
@@ -2396,7 +2347,7 @@ recognize TestCases.")
          "0gf2dpahpl5igb7jh1sr9acj3z3gp7zahqdqb69nk6wx01c8kc1g"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/fschulze/pytest-warnings")
     (synopsis "Pytest plugin to list Python warnings in pytest report")
     (description
@@ -2425,7 +2376,7 @@ pytest report.")
          "038049nyjl7di59ycnxvc9nydivc5m8np3hqq84j2iirkccdbs5n"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://bitbucket.org/memedough/pytest-capturelog/overview")
     (synopsis "Pytest plugin to catch log messages")
     (description
@@ -2448,9 +2399,9 @@ pytest report.")
          "1w7wxh27sbqwm4jgwrjr9c2gy384aca5jzw9c0wzhl0pmk2mvqab"))))
     (build-system python-build-system)
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (propagated-inputs
-     `(("pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/eisensheng/pytest-catchlog")
     (synopsis "Pytest plugin to catch log messages")
     (description
@@ -2473,8 +2424,7 @@ a fork of pytest-capturelog.")
                 "10xqr12qv62k2flxwqhh8cr00cjhn7sfjrm6p35gd1x5bmjkr319"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-nose" ,python-nose)))
+     (list python-coverage python-nose))
     (home-page "https://github.com/cmheisel/nose-xcover")
     (synopsis "Extends nose.plugins.cover to add Cobertura-style XML reports")
     (description "Nose-xcover is a companion to the built-in
@@ -2514,37 +2464,33 @@ backported from Python 2.7 for Python 2.4+.")
 (define-public behave
   (package
     (name "behave")
-    (version "1.2.6")
+    ;; The 1.2.6 release from 2018 has several problems with newer Python
+    ;; versions, so we package a recent snapshot.
+    (version "1.2.7.dev2")
     (source (origin
-             (method url-fetch)
-             (uri (pypi-uri "behave" version))
-             (sha256
-              (base32
-               "11hsz365qglvpp1m1w16239c3kiw15lw7adha49lqaakm8kj6rmr"))
-             (patches (search-patches
-                       "behave-skip-a-couple-of-tests.patch"))))
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/behave/behave")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0sv94wagi214h0l91zn8m04f78x5wn83vqxib81hnl1qahvx9hq7"))))
     (build-system python-build-system)
+    (arguments
+     '(#:phases (modify-phases %standard-phases
+                  (replace 'check
+                    (lambda* (#:key tests? #:allow-other-keys)
+                      (when tests?
+                        (invoke "pytest" "-c" "/dev/null" "-vv")))))))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-nose" ,python-nose)
-       ("python-pathpy" ,python-pathpy)
-       ("python-pyhamcrest" ,python-pyhamcrest)
-       ("python-pytest" ,python-pytest)))
+     (list python-mock python-nose python-pathpy python-pyhamcrest
+           python-pytest))
     (propagated-inputs
-     `(("python-importlib-metadata" ,python-importlib-metadata)
-       ("python-six" ,python-six)
-       ("python-parse" ,python-parse)
-       ("python-parse-type" ,python-parse-type)))
-    (arguments
-     '(#:test-target "behave_test"
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'check 'fix-library-loading
-           (lambda _
-             ;; Otherwise, tests fail with no module named 'path'
-             (setenv "PYTHONPATH" (string-append (getenv "PYTHONPATH") ":"
-                                                 (getcwd) "/tasks/_vendor"))
-             #t)))))
+     (list python-colorama
+           python-cucumber-tag-expressions
+           python-parse
+           python-parse-type))
     (home-page "https://github.com/behave/behave")
     (synopsis "Python behavior-driven development")
     (description
@@ -2577,8 +2523,7 @@ tests written in a natural language style, backed up by Python code.")
                (("'ordereddict==1.1'") ""))    ; Python >= 2.7 has it built-in.
              #t)))))
     (propagated-inputs
-     `(("behave" ,behave)
-       ("python-requests" ,python-requests)))
+     (list behave python-requests))
     (home-page "https://github.com/jefersondaniel/behave-web-api")
     (synopsis "Provides testing for JSON APIs with Behave for Python")
     (description "This package provides testing utility modules for testing
@@ -2607,11 +2552,9 @@ JSON APIs with Behave.")
                         (("six==1.10.0") "six"))
                       #t)))))
     (propagated-inputs
-     `(("python-colorama" ,python-colorama)
-       ("python-termstyle" ,python-termstyle)))
+     (list python-colorama python-termstyle))
     (native-inputs
-     `(("python-six" ,python-six)
-       ("python-nose" ,python-nose)))
+     (list python-six python-nose))
     (home-page "https://github.com/JBKahn/rednose")
     (synopsis "Colored output for Python nosetests")
     (description "This package provides colored output for the
@@ -2637,7 +2580,7 @@ JSON APIs with Behave.")
         "1dvip61r2frjv35mv6mmfjc07402z73pjbndfp3mhxyjn2zhksw2"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (home-page "https://github.com/fzumstein/nose-random")
     (synopsis "Nose plugin to facilitate randomized unit testing with
 Python")
@@ -2659,8 +2602,7 @@ scenarios.")
         (base32 "0z662rqhfk4bjmg806mn4frb8nz4gbh7mrddsrhfffp1g4yklj3y"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-nose" ,python-nose)
-       ("python-numpy" ,python-numpy)))
+     (list python-nose python-numpy))
     (home-page "https://github.com/adamchainz/nose-randomly")
     (synopsis
      "Nose plugin to randomly order tests and control random.seed")
@@ -2687,8 +2629,7 @@ create data based on random numbers and yet remain repeatable.")
           (base32 "05wzkc88vbzw62pqkvhl33211b90kns0lny70b7qw62rcg4flzk4"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-nose" ,python-nose)
-       ("python-termcolor" ,python-termcolor)))
+     (list python-nose python-termcolor))
     (home-page "https://github.com/mahmoudimus/nose-timer")
     (synopsis "Timer plugin for nosetests")
     (description "Shows how much time was needed to run individual tests.")
@@ -2709,11 +2650,9 @@ create data based on random numbers and yet remain repeatable.")
         (base32 "0al75mk829j1izxi760b7yjnknjihyfhp2mvi5qiyrxb9cpxwqk2"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)))
+     (list python-mock python-pytest))
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-dateutil" ,python-dateutil)))
+     (list python-six python-dateutil))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -2795,8 +2734,8 @@ retried.")
               (sha256
                (base32
                 "05kdzlhs2kvj82pfca13qszszcj6dyrk4b9pbr46x06sq2s4qyls"))))
-    (native-inputs
-     `(("python-pytest" ,python-pytest)))
+    (native-inputs                      ;all native inputs are for tests
+     (list python-pytest-cov python-mock python-pytest python-hypothesis))
     (build-system python-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
@@ -2838,7 +2777,7 @@ portable to just about any platform.")
 (define-public libfaketime
   (package
     (name "libfaketime")
-    (version "0.9.8")
+    (version "0.9.9")
     (home-page "https://github.com/wolfcw/libfaketime")
     (source (origin
               (method git-fetch)
@@ -2847,35 +2786,41 @@ portable to just about any platform.")
                     (commit (string-append "v" version))))
               (sha256
                (base32
-                "1mfdl82ppgbdvy1ny8mb7xii7p0g7awvn4bn36jb8v4r545slmjc"))
+                "1gi1xciqga5hl2xlk7rc3j8wy47ag97pi7ngmdl6ny1d11b2wn1z"))
               (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (arguments
-     '(#:phases (modify-phases %standard-phases
+     `(#:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'embed-date-reference
+                    (lambda* (#:key inputs #:allow-other-keys)
+                      (let ((coreutils (assoc-ref inputs "coreutils")))
+                        (substitute* "src/faketime.c"
+                          (("\"date\"")
+                           (string-append "\"" coreutils "/bin/date\""))))))
                   (replace 'configure
                     (lambda* (#:key outputs #:allow-other-keys)
                       (let ((out (assoc-ref outputs "out")))
-                        (setenv "CC" "gcc")
+                        (setenv "CC" ,(cc-for-target))
                         (setenv "PREFIX" out)
 
                         ;; XXX: Without this flag, the CLOCK_REALTIME test hangs
                         ;; indefinitely.  See README.packagers for more information.
-                        ;; Try removing this for future versions of libfaketime.
-                        (setenv "FAKETIME_COMPILE_CFLAGS" "-DFORCE_MONOTONIC_FIX")
-
-                        #t)))
+                        ;; There are specific instructions to not enable more flags
+                        ;; than absolutely needed.
+                        ,(if (target-ppc64le?)
+                           `(setenv "FAKETIME_COMPILE_CFLAGS"
+                                    "-DFORCE_MONOTONIC_FIX -DFORCE_PTHREAD_NONVER")
+                           `(setenv "FAKETIME_COMPILE_CFLAGS"
+                                    "-DFORCE_MONOTONIC_FIX")))))
                   (add-before 'check 'pre-check
                     (lambda _
                       (substitute* "test/functests/test_exclude_mono.sh"
-                        (("/bin/bash") (which "bash")))
-
-                      ;; Do not fail due to use of 'ftime', which was deprecated in
-                      ;; glibc 2.31.  Remove this for later versions of libfaketime.
-                      (setenv "FAKETIME_COMPILE_CFLAGS" "-Wno-deprecated-declarations")
-                      #t)))
+                        (("/bin/bash") (which "bash"))))))
        #:test-target "test"))
     (native-inputs
-     `(("perl" ,perl)))                           ;for tests
+     (list perl))                           ;for tests
+    (inputs
+     (list coreutils))
     (synopsis "Fake the system time for single applications")
     (description
      "The libfaketime library allows users to modify the system time that an
@@ -2906,18 +2851,15 @@ provides a simple way to achieve this.")
                (("/run") "/tmp"))
              #t)))))
     (native-inputs
-     `(("vala" ,vala)
-       ("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc/stable)
-       ("pkg-config" ,pkg-config)
-
-       ;; For tests.
-       ("python" ,python)
-       ("which" ,which)))
+     (list vala
+           gobject-introspection
+           gtk-doc/stable
+           pkg-config
+           ;; For tests.
+           python
+           which))
     (inputs
-     `(("glib" ,glib)
-       ("eudev" ,eudev)
-       ("libgudev" ,libgudev)))
+     (list glib eudev libgudev))
     (home-page "https://github.com/martinpitt/umockdev/")
     (synopsis "Mock hardware devices for creating unit tests")
     (description "umockdev mocks hardware devices for creating integration
@@ -2978,15 +2920,23 @@ grew out of the @dfn{Vc} project.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'patch-testsuite
+           (lambda _
+             ;; Time difference is larger than expected.
+             (substitute* "pyfakefs/tests/fake_filesystem_unittest_test.py"
+               (("(\\s+)def test_copy_real_file" all indent)
+                (string-append
+                  indent
+                  "@unittest.skip('disabled by guix')\n"
+                  all)))))
          ;; The default test suite does not run these extra tests.
          (add-after 'check 'check-pytest-plugin
            (lambda _
              (invoke
               "python" "-m" "pytest"
-              "pyfakefs/pytest_tests/pytest_plugin_test.py")
-             #t)))))
+              "pyfakefs/pytest_tests/pytest_plugin_test.py"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (build-system python-build-system)
     ;; Guix lint doesn't like that this is a permanent redirect to the GitHub
     ;; page, but the pyfakefs documentation asks us to use this specific URL
@@ -3041,10 +2991,9 @@ system.  The code under test requires no modification to work with pyfakefs.")
                           (invoke "nosetests" "-v")
                           (format #t "test suite not run~%"))
                       #t)))))
-    (propagated-inputs `(("python-wrapt" ,python-wrapt)))
+    (propagated-inputs (list python-wrapt))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-nose" ,python-nose)))
+     (list python-coverage python-nose))
     (home-page
      "https://github.com/kwarunek/aiounittest")
     (synopsis "Test asyncio code more easily")
@@ -3065,7 +3014,7 @@ asynchronous code in Python (asyncio).")
             "0swl3mxca7nnjbb5grfzrm3fa2750h9vjsha0f2kyrljc6895a62"))))
     (build-system python-build-system)
     (propagated-inputs
-      `(("python-pytest" ,python-pytest)))
+      (list python-pytest))
     (home-page
       "https://github.com/RKrahl/pytest-dependency")
     (synopsis "Manage dependencies of tests")
@@ -3087,10 +3036,9 @@ skipped if any of the dependencies did fail or has been skipped.")
          "066bg6wlzgq2pqnjp73dfrcmk8951xw3aqcxa3p1axgqimrixbyk"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-setuptools-scm))
     (propagated-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-wheel" ,python-wheel)))
+     (list python-pytest python-wheel))
     (home-page "https://github.com/gabrielcnr/pytest-datadir")
     (synopsis "Pytest plugin for manipulating test data directories and files")
     (description
@@ -3111,19 +3059,17 @@ directories and files.")
          "05jpsvv8rj8i4x24fphpnar5dl4s6d6bw6ikjk5d8v96rdviz9qm"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pytest-datadir" ,python-pytest-datadir)
-       ("python-pyyaml" ,python-pyyaml)))
+     (list python-pytest-datadir python-pyyaml))
     (native-inputs
-     `(("python-matplotlib" ,python-matplotlib)
-       ("python-numpy" ,python-numpy)
-       ("python-pandas" ,python-pandas)
-       ("python-pillow" ,python-pillow)
-       ("python-pre-commit" ,python-pre-commit)
-       ("python-restructuredtext-lint"
-        ,python-restructuredtext-lint)
-       ("python-tox" ,python-tox)
-       ("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-pytest" ,python-pytest)))
+     (list python-matplotlib
+           python-numpy
+           python-pandas
+           python-pillow
+           python-pre-commit
+           python-restructuredtext-lint
+           python-tox
+           python-setuptools-scm
+           python-pytest))
     (home-page "https://github.com/ESSS/pytest-regressions")
     (synopsis "Easy to use fixtures to write regression tests")
     (description
diff --git a/gnu/packages/chemistry.scm b/gnu/packages/chemistry.scm
index d2ad632d2c..94803719ac 100644
--- a/gnu/packages/chemistry.scm
+++ b/gnu/packages/chemistry.scm
@@ -70,20 +70,20 @@
        (file-name (git-file-name name version))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("eigen" ,eigen)
-       ("mmtf-cpp" ,mmtf-cpp)
-       ("msgpack" ,msgpack)
-       ("googletest" ,googletest)
-       ("pkg-config" ,pkg-config)
-       ("pybind11" ,pybind11)))
+     (list eigen
+           mmtf-cpp
+           msgpack
+           googletest
+           pkg-config
+           pybind11))
     (inputs
-     `(("glew" ,glew)
-       ("libarchive" ,libarchive)
-       ("libmsym" ,libmsym)
-       ("molequeue" ,molequeue)
-       ("python" ,python)
-       ("spglib" ,spglib)
-       ("qtbase" ,qtbase-5)))
+     (list glew
+           libarchive
+           libmsym
+           molequeue
+           python
+           spglib
+           qtbase-5))
     (arguments
      '(#:configure-flags (list "-DENABLE_TESTING=ON"
                                (string-append "-DSPGLIB_INCLUDE_DIR="
@@ -113,13 +113,9 @@ bioinformatics, materials science, and related areas.")
        (file-name (git-file-name name version))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("eigen" ,eigen)
-       ("pkg-config" ,pkg-config)))
+     (list eigen pkg-config))
     (inputs
-     `(("avogadrolibs" ,avogadrolibs)
-       ("hdf5" ,hdf5)
-       ("molequeue" ,molequeue)
-       ("qtbase" ,qtbase-5)))
+     (list avogadrolibs hdf5 molequeue qtbase-5))
     ;; TODO: Enable tests with "-DENABLE_TESTING" configure flag.
     (arguments
      '(#:tests? #f))
@@ -147,7 +143,7 @@ powerful plugin architecture.")
          "1z26lsyf7xwnzwjvimmbla7ckipx6p734w7y0jk2a2fzci8fkdcr"))))
     (build-system python-build-system)
     (inputs
-     `(("python-mmtk" ,python2-mmtk)))
+     (list python2-mmtk))
     (arguments
      `(#:python ,python-2
        ;; No test suite
@@ -195,8 +191,7 @@ only with Python 2 and NumPy < 1.9.")
                     (include-dir (string-append out "/include/inchi"))
                     (lib (string-append out "/lib/inchi"))
                     (inchi-doc (assoc-ref inputs "inchi-doc"))
-                    (unzip (string-append (assoc-ref inputs "unzip")
-                                          "/bin/unzip")))
+                    (unzip (search-input-file inputs "/bin/unzip")))
                (chdir "../../..")
                ;; Install binary.
                (with-directory-excursion "INCHI_EXE/bin/Linux"
@@ -304,7 +299,7 @@ biological structures.")
          "1w1fgxzqrb5yxvpmnc3c9ymnvixy0z1nfafkd9whg9zw8nbgl998"))))
     (build-system cmake-build-system)
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (arguments
      '(#:configure-flags '("-DENABLE_TESTING=ON")
        #:phases
@@ -356,12 +351,10 @@ staged, and output files collected using a standard interface.")
          "016h4bqg419p6s7bcx55q5iik91gqmk26hbnfgj2j6zl0j36w51r"))))
     (build-system python-build-system)
     (inputs
-     `(("python-matplotlib" ,(with-numpy-1.8 python2-matplotlib))
-       ("python-scientific" ,python2-scientific)
-       ("netcdf" ,netcdf)
-       ("gv" ,gv)))
+     (list (with-numpy-1.8 python2-matplotlib) python2-scientific netcdf
+           gv))
     (propagated-inputs
-     `(("python-mmtk" ,python2-mmtk)))
+     (list python2-mmtk))
     (arguments
      `(#:python ,python-2
        #:tests? #f  ; No test suite
@@ -417,7 +410,7 @@ NumPy < 1.9.")
                 "1apf2n8nb34z09xarj7k4jgriq283l769sakjmj5aalpbilvai4q"))))
     (build-system cmake-build-system)
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -503,13 +496,13 @@ stored with user-specified precision.")
        ("python-pygments" ,python-pygments)
        ("python-sphinx" ,python-sphinx)))
     (inputs
-     `(("fftwf" ,fftwf)
-       ("hwloc" ,hwloc-2 "lib")
-       ("lmfit" ,lmfit)
-       ("openblas" ,openblas)
-       ("perl" ,perl)
-       ("tinyxml2" ,tinyxml2)
-       ("tng" ,tng)))
+     (list fftwf
+           `(,hwloc-2 "lib")
+           lmfit
+           openblas
+           perl
+           tinyxml2
+           tng))
     (home-page "http://www.gromacs.org/")
     (synopsis "Molecular dynamics software package")
     (description "GROMACS is a versatile package to perform molecular dynamics,
@@ -550,12 +543,9 @@ usual algorithms you expect from a modern molecular dynamics implementation.")
                             (assoc-ref %build-inputs "inchi") "/include/inchi"))
        #:test-target "test"))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("eigen" ,eigen)
-       ("inchi" ,inchi)
-       ("libxml2" ,libxml2)
-       ("zlib" ,zlib)))
+     (list eigen inchi libxml2 zlib))
     (home-page "http://openbabel.org/wiki/Main_Page")
     (synopsis "Chemistry data manipulation toolbox")
     (description
@@ -650,19 +640,18 @@ symmetries written in C.  Spglib can be used to:
                      (string-append "--prefix=" (assoc-ref outputs "out"))
                      "--root=/"))))))
     (inputs
-     `(("freetype" ,freetype)
-       ("libpng" ,libpng)
-       ("freeglut" ,freeglut)
-       ("glew" ,glew)
-       ("libxml2" ,libxml2)
-       ("mmtf-cpp" ,mmtf-cpp)
-       ("msgpack" ,msgpack)
-       ("python-pyqt" ,python-pyqt)
-       ("glm" ,glm)
-       ("netcdf" ,netcdf)))
+     (list freetype
+           libpng
+           freeglut
+           glew
+           libxml2
+           mmtf-cpp
+           msgpack
+           python-pyqt
+           glm
+           netcdf))
     (native-inputs
-     `(("catch2" ,catch-framework2)
-       ("python-setuptools" ,python-setuptools)))
+     (list catch-framework2 python-setuptools))
     (home-page "https://pymol.org")
     (synopsis "Molecular visualization system")
     (description "PyMOL is a capable molecular viewer and renderer.  It can be
diff --git a/gnu/packages/chez.scm b/gnu/packages/chez.scm
index 2d31d764b0..47904e7b4e 100644
--- a/gnu/packages/chez.scm
+++ b/gnu/packages/chez.scm
@@ -71,7 +71,7 @@
 (define-public chez-scheme
   (package
     (name "chez-scheme")
-    (version "9.5.4")
+    (version "9.5.6")
     (source
      (origin
        (method git-fetch)
@@ -79,14 +79,10 @@
              (url "https://github.com/cisco/ChezScheme")
              (commit (string-append "v" version))))
        (sha256
-        (base32 "0prgn2z9l888j93ydxaf04ph424g0fi3a8w7f8m0b2r7fr1v7388"))
+        (base32 "07s433hn1z2slfc026sidrpzxv3a8narcd40qqr1xrpb9012xdky"))
        (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
+        ;; Remove bundled libraries.
         (with-imported-modules '((guix build utils))
           #~(begin
               (use-modules (guix build utils))
@@ -114,8 +110,10 @@
        ;; for docs
        ("stex" ,stex)
        ("xorg-rgb" ,xorg-rgb)
-       ("texlive" ,(texlive-union (list texlive-latex-oberdiek
-                                        texlive-generic-epsf)))
+       ("texlive" ,(texlive-updmap.cfg (list texlive-dvips-l3backend
+                                             texlive-epsf
+                                             texlive-fonts-ec
+                                             texlive-oberdiek)))
        ("ghostscript" ,ghostscript)
        ("netpbm" ,netpbm)))
     (native-search-paths
@@ -142,8 +140,7 @@
                            (assoc-ref (or native-inputs inputs) dep))
                          (copy-recursively src dep
                                            #:keep-mtime? #t))
-                       '("nanopass" "stex"))
-               #t))
+                       '("nanopass" "stex"))))
          ;; NOTE: the custom Chez 'configure' script doesn't allow
          ;; unrecognized flags, such as those automatically added
          ;; by `gnu-build-system`.
@@ -167,10 +164,10 @@
                ;; Some makefiles (for tests) don't seem to propagate CC
                ;; properly, so we take it out of their hands:
                (setenv "CC" ,(cc-for-target))
+               (setenv "HOME" "/tmp")
                (apply invoke
                       "./configure"
-                      flags)
-               #t)))
+                      flags))))
          ;; 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
@@ -184,8 +181,7 @@
                (map (lambda (file)
                       (symlink file (string-append (dirname file)
                                                    "/" name ".boot")))
-                    (find-files lib "scheme.boot"))
-               #t)))
+                    (find-files lib "scheme.boot")))))
          ;; Building explicitly lets us avoid using substitute*
          ;; to re-write makefiles.
          (add-after 'install-symlink 'prepare-stex
@@ -214,8 +210,7 @@
                            '("ReadMe" ; includes the license
                              "doc/stex.html"
                              "doc/stex.css"
-                             "doc/stex.pdf"))
-                 #t))))
+                             "doc/stex.pdf"))))))
          ;; Building the documentation requires stex and a running scheme.
          ;; FIXME: this is probably wrong for cross-compilation
          (add-after 'prepare-stex 'install-doc
@@ -248,8 +243,7 @@
                  (symlink "release_notes/release_notes.pdf"
                           "release_notes.pdf")
                  (symlink "csug/csug9_5.pdf"
-                          "csug.pdf"))
-               #t))))))
+                          "csug.pdf"))))))))
     ;; 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
@@ -281,7 +275,7 @@ and 32-bit PowerPC architectures.")
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("chez-scheme" ,chez-scheme)))
+     (list chez-scheme))
     (arguments
      `(#:make-flags (let ((out (assoc-ref %outputs "out")))
                       (list (string-append "PREFIX=" out)
@@ -316,11 +310,10 @@ and 32-bit PowerPC architectures.")
       (native-inputs
        `(("chez-scheme" ,chez-scheme)
          ("ghostscript" ,ghostscript)
-         ("texlive" ,(texlive-union (list texlive-charter
-                                          texlive-latex-oberdiek
-                                          texlive-generic-epsf
+         ("texlive" ,(texlive-updmap.cfg (list texlive-oberdiek
+                                          texlive-epsf
                                           texlive-metapost
-                                          texlive-fonts-charter
+                                          texlive-charter
                                           texlive-pdftex
                                           texlive-context
                                           texlive-cm
@@ -334,12 +327,6 @@ and 32-bit PowerPC architectures.")
                       #:tests? #f        ; no tests
                       #:phases
                       (modify-phases %standard-phases
-                        (add-before 'build 'set-HOME
-                          (lambda _
-                            ;; FIXME: texlive-union does not find the built
-                            ;; metafonts, so it tries to generate them in HOME.
-                            (setenv "HOME" "/tmp")
-                            #t))
                         ;; This package has a custom "bootstrap" script that
                         ;; is meant to be run from the Makefile.
                         (delete 'bootstrap)
@@ -382,7 +369,7 @@ programming in Scheme.")
       (native-inputs
        `(("chez-scheme" ,chez-scheme)
          ("chez-web" ,chez-web)
-         ("texlive" ,(texlive-union (list texlive-pdftex)))))
+         ("texlive" ,(texlive-updmap.cfg (list texlive-pdftex)))))
       (arguments
        `(#:tests? #f              ; no tests
          #:phases
@@ -485,9 +472,9 @@ Chez Scheme.")
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (inputs
-     `(("chez-srfi" ,chez-srfi))) ; for tests
+     (list chez-srfi)) ; for tests
     (native-inputs
-     `(("chez-scheme" ,chez-scheme)))
+     (list chez-scheme))
     (arguments
      `(#:make-flags ,(chez-make-flags name version)
        #:test-target "test"
@@ -514,11 +501,11 @@ Chez Scheme.")
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (inputs
-     `(("chez-matchable" ,chez-matchable))) ; for tests
+     (list chez-matchable)) ; for tests
     (propagated-inputs
-     `(("chez-srfi" ,chez-srfi))) ; for irregex-utils
+     (list chez-srfi)) ; for irregex-utils
     (native-inputs
-     `(("chez-scheme" ,chez-scheme)))
+     (list chez-scheme))
     (arguments
      `(#:make-flags ,(chez-make-flags name version)
        #:test-target "test"
@@ -546,9 +533,9 @@ syntax, with various aliases for commonly used patterns.")
        (file-name (string-append name "-" version ".tar.gz"))))
     (build-system gnu-build-system)
     (propagated-inputs
-     `(("chez-srfi" ,chez-srfi))) ; for irregex-utils
+     (list chez-srfi)) ; for irregex-utils
     (native-inputs
-     `(("chez-scheme" ,chez-scheme)))
+     (list chez-scheme))
     (arguments
      `(#:make-flags ,(chez-make-flags name version)
        #:test-target "chez-check"
@@ -586,9 +573,9 @@ strings.")
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (inputs
-     `(("chez-srfi" ,chez-srfi)))       ; for tests
+     (list chez-srfi))       ; for tests
     (native-inputs
-     `(("chez-scheme" ,chez-scheme)))
+     (list chez-scheme))
     (arguments
      `(#:make-flags ,(chez-make-flags name version)
        #:test-target "test"
@@ -616,12 +603,11 @@ required to port the program @code{Scmutils} to Chez Scheme.")
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (inputs
-     `(("chez-srfi" ,chez-srfi)))       ; for tests
+     (list chez-srfi))       ; for tests
     (native-inputs
-     `(("chez-scheme" ,chez-scheme)))
+     (list chez-scheme))
     (propagated-inputs
-     `(("chez-mit" ,chez-mit)
-       ("chez-srfi" ,chez-srfi)))
+     (list chez-mit chez-srfi))
     (arguments
      `(#:make-flags ,(chez-make-flags name version)
        #:tests? #f                      ; no test suite
diff --git a/gnu/packages/chicken.scm b/gnu/packages/chicken.scm
index 866ba8a062..d611c1762e 100644
--- a/gnu/packages/chicken.scm
+++ b/gnu/packages/chicken.scm
@@ -68,7 +68,7 @@
             (variable "CHICKEN_REPOSITORY_PATH")
             ;; TODO extract binary version into a module level definition.
             (files (list "var/lib/chicken/11")))))
-    (propagated-inputs `(("gcc-toolchain" ,gcc-toolchain)))
+    (propagated-inputs (list gcc-toolchain))
     (home-page "https://www.call-cc.org/")
     (synopsis "R5RS Scheme implementation that compiles native code via C")
     (description
@@ -99,7 +99,7 @@ language standard, and includes many enhancements and extensions.")
     (build-system chicken-build-system)
     (arguments '(#:egg-name "srfi-1"))
     (inputs
-     `(("chicken-test" ,chicken-test)))
+     (list chicken-test))
     (home-page "https://wiki.call-cc.org/eggref/5/srfi-1")
     (synopsis "SRFI-1 list library")
     (description
@@ -182,11 +182,9 @@ CHICKEN Scheme, along with
     ;; TODO do we really have to make these propagated?
     ;; I don't know Chicken's module system well enough to tell
     (propagated-inputs
-     `(("chicken-datatype" ,chicken-datatype)
-       ("chicken-srfi-1" ,chicken-srfi-1)
-       ("chicken-srfi-14" ,chicken-srfi-14)))
+     (list chicken-datatype chicken-srfi-1 chicken-srfi-14))
     (inputs
-     `(("chicken-test" ,chicken-test)))
+     (list chicken-test))
     (build-system chicken-build-system)
     (arguments '(#:egg-name "agrep"))
     (synopsis "Approximate string matching library")
@@ -217,8 +215,7 @@ file indexing tool.")
     (build-system chicken-build-system)
     (arguments '(#:egg-name "datatype"))
     (inputs
-     `(("chicken-srfi-1" ,chicken-srfi-1)
-       ("chicken-test" ,chicken-test)))
+     (list chicken-srfi-1 chicken-test))
     (home-page "https://wiki.call-cc.org/eggref/5/datatype")
     (synopsis "Facility for creating and using variant records")
     (description
@@ -245,7 +242,7 @@ Languages} by Friedman, Wand, and Haynes.")
         (base32
          "0gz50n5i561n5sk9prry0lrxz6bfrq9if5bclaq6a0f7lzinhnzb"))))
     (inputs
-     `(("chicken-test" ,chicken-test)))
+     (list chicken-test))
     (build-system chicken-build-system)
     (arguments '(#:egg-name "iset"))
     (synopsis "Integer set library")
diff --git a/gnu/packages/chromium.scm b/gnu/packages/chromium.scm
index 768564d42e..ba352c533e 100644
--- a/gnu/packages/chromium.scm
+++ b/gnu/packages/chromium.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2019, 2020, 2021 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2019, 2020, 2021, 2022 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2019 Alex Griffin <a@ajgrf.com>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -110,8 +110,6 @@
     "third_party/catapult" ;BSD-3
     "third_party/catapult/common/py_vulcanize/third_party/rcssmin" ;ASL2.0
     "third_party/catapult/common/py_vulcanize/third_party/rjsmin" ;ASL2.0
-    "third_party/catapult/third_party/beautifulsoup4" ;Expat
-    "third_party/catapult/third_party/html5lib-python" ;Expat
     "third_party/catapult/third_party/polymer" ;BSD-3
     "third_party/catapult/third_party/six" ;Expat
     ;; XXX: This is a minified version of <https://d3js.org/>.
@@ -134,6 +132,7 @@
     "third_party/cros_system_api" ;BSD-3
     "third_party/dav1d" ;BSD-2
     "third_party/dawn" ;ASL2.0
+    "third_party/dawn/third_party/tint"
     "third_party/depot_tools/owners.py" ;BSD-3
     "third_party/devtools-frontend" ;BSD-3
     "third_party/devtools-frontend/src/front_end/third_party/acorn" ;Expat
@@ -151,6 +150,7 @@
     "third_party/devtools-frontend/src/front_end/third_party/wasmparser" ;ASL2.0
     "third_party/devtools-frontend/src/third_party/pyjson5" ;ASL2.0
     "third_party/devtools-frontend/src/third_party/typescript" ;ASL2.0
+    "third_party/distributed_point_functions" ;ASL2.0
     "third_party/dom_distiller_js" ;BSD-3
     "third_party/eigen3" ;MPL2.0
     "third_party/emoji-segmenter" ;ASL2.0
@@ -269,7 +269,6 @@
     "third_party/tflite" ;ASL2.0
     "third_party/tflite/src/third_party/eigen3" ;MPL2.0
     "third_party/tflite/src/third_party/fft2d" ;ASL2.0
-    "third_party/tflite-support" ;ASL2.0
     "third_party/ukey2" ;ASL2.0
     "third_party/usb_ids" ;BSD-3
     "third_party/usrsctp" ;BSD-2
@@ -319,6 +318,14 @@
   ;; run the Blink performance tests, just remove everything to save ~70MiB.
   '("third_party/blink/perf_tests"))
 
+(define* (arch-patch name hash #:optional (revision %arch-revision))
+  (origin
+    (method url-fetch)
+    (uri (string-append "https://raw.githubusercontent.com/archlinux"
+                        "/svntogit-packages/" revision "/trunk/" name))
+    (file-name (string-append "ungoogled-chromium-" name))
+    (sha256 (base32 hash))))
+
 (define* (debian-patch name hash #:optional (revision %debian-revision))
   (origin
     (method url-fetch)
@@ -329,11 +336,14 @@
                   (string-append "ungoogled-chromium-" category "-" name))))
     (sha256 (base32 hash))))
 
-(define %chromium-version "93.0.4577.82")
+(define %chromium-version "97.0.4692.99")
+(define %ungoogled-revision (string-append %chromium-version "-1"))
+(define %arch-revision "db2157b84924ce84201a8245e68a02f7d55f6491")
 (define %debian-revision "debian/90.0.4430.85-1")
-;; Note: use 'git describe --long' even for exact tags to placate the
-;; custom version format for ungoogled-chromium.
-(define %ungoogled-revision "93.0.4577.82-1-2-g3f62dbc")
+
+(define %arch-patches
+  (list (arch-patch "chromium-94-ffmpeg-roll.patch"
+                    "1kiskdjr9v3d491sq0wdjxliflh2vq5700gbygcixayj8gkvdb2n")))
 
 (define %debian-patches
   (list (debian-patch "fixes/nomerge.patch"
@@ -351,7 +361,7 @@
     (file-name (git-file-name "ungoogled-chromium" %ungoogled-revision))
     (sha256
      (base32
-      "1n0bffmwrzp3g1zzsy6qq325mbp4yn629m5zlfyz261szhvl9rgw"))))
+      "1jgxpp3wl24hq39291mgmdwcxbarxg4rpa6il53k8z3rf6gd2s4i"))))
 
 (define %guix-patches
   (list (local-file
@@ -359,9 +369,18 @@
           (search-patch "ungoogled-chromium-extension-search-path.patch")))
         (local-file
          (assume-valid-file-name
+          (search-patch "ungoogled-chromium-RUNPATH.patch")))
+        (local-file
+         (assume-valid-file-name
+          (search-patch "ungoogled-chromium-accelerated-video-decode.patch")))
+        (local-file
+         (assume-valid-file-name
           (search-patch "ungoogled-chromium-ffmpeg-compat.patch")))
         (local-file
          (assume-valid-file-name
+          (search-patch "ungoogled-chromium-system-ffmpeg.patch")))
+        (local-file
+         (assume-valid-file-name
           (search-patch "ungoogled-chromium-system-nspr.patch")))))
 
 ;; This is a source 'snippet' that does the following:
@@ -387,6 +406,13 @@
                               patch "--no-backup-if-mismatch"))
                     (append '#+%debian-patches '#+%guix-patches))
 
+          ;; These patches are "reversed"; i.e. they represent changes
+          ;; already present in the source, but which should be reverted.
+          (for-each (lambda (patch)
+                      (invoke "patch" "-Rp1" "--force" "--input"
+                              patch "--no-backup-if-mismatch"))
+                    '#$%arch-patches)
+
           (with-directory-excursion #+%ungoogled-origin
             (format #t "Ungooglifying...~%")
             (force-output)
@@ -437,38 +463,15 @@
         `(cons "--enable-custom-modes"
                ,flags))))))
 
-;; 'make-ld-wrapper' can only work with an 'ld' executable, so we need
-;; this trick to make it wrap 'lld'.
-(define (make-lld-wrapper lld)
-  (define lld-as-ld
-    (computed-file "lld-ld"
-                   #~(begin
-                       (mkdir #$output)
-                       (mkdir (string-append #$output "/bin"))
-                       (symlink #$(file-append lld "/bin/lld")
-                                (string-append #$output "/bin/ld")))))
-
-  ;; Create a wrapper for LLD that inserts appropriate -rpath entries.
-  (define lld-wrapper
-    (make-ld-wrapper "lld-wrapper"
-                     #:binutils lld-as-ld))
-
-  ;; Clang looks for an 'ld.lld' executable, so we need to symlink it back.
-  (computed-file "lld-wrapped"
-                 #~(begin
-                     (mkdir #$output)
-                     (mkdir (string-append #$output "/bin"))
-                     (symlink #$(file-append lld-wrapper "/bin/ld")
-                              (string-append #$output "/bin/lld"))
-                     (symlink "lld" (string-append #$output "/bin/ld.lld")))))
-
 (define-public ungoogled-chromium
   (package
     (name "ungoogled-chromium")
-    (version (string-append %chromium-version "-0."
-                            (match (string-split %ungoogled-revision #\-)
-                              ((version revision commits g+short)
-                               (string-drop g+short 1)))))
+    (version (if (string-prefix? %chromium-version %ungoogled-revision)
+                 %ungoogled-revision
+                 ;; ungoogled-chromium version tags always have a "-1" suffix,
+                 ;; so we can hijack "-0" in cases where the Chromium source
+                 ;; is newer than the latest available tag.
+                 (string-append %chromium-version "-0")))
     (synopsis "Graphical web browser")
     (source (origin
               (method url-fetch)
@@ -477,424 +480,413 @@
                                   %chromium-version ".tar.xz"))
               (sha256
                (base32
-                "0lr8zdq06smncdzd6knzww9hxl8ynvxadmrkyyl13fpwb1422rjx"))
+                "1fpc07zvashaqqalwn7wxnswxclrxvhjrxy1rzr6gcq5awhaw6y9"))
               (modules '((guix build utils)))
               (snippet (force ungoogled-chromium-snippet))))
     (build-system gnu-build-system)
     (arguments
-     `(#:tests? #f
-       ;; FIXME: Chromiums RUNPATH lacks entries for some libraries.
-       #:validate-runpath? #f
-       #:modules ((guix build gnu-build-system)
+     (list
+      #:tests? #f
+      #:modules '((guix build gnu-build-system)
                   (guix build utils)
                   (srfi srfi-26))
-       #:configure-flags
-       ;; See tools/gn/docs/cookbook.md and
-       ;; https://www.chromium.org/developers/gn-build-configuration
-       ;; for usage.  Run "gn args . --list" in the Release
-       ;; directory for an exhaustive list of supported flags.
-       ;; (Note: The 'configure' phase will do that for you.)
-       (list "is_debug=false"
-             ;; Use the "official" release optimizations, as opposed to
-             ;; a developer build.
-             "is_official_build=true"
-             "clang_use_chrome_plugins=false"
-             "is_cfi=false"             ;requires Clang 13
-             "use_thin_lto=false"       ;XXX ICE with Clang+LLD 12.0.1
-             "chrome_pgo_phase=0"
-             "use_sysroot=false"
-             "goma_dir=\"\""
-             "enable_nacl=false"
-             "enable_nacl_nonsfi=false"
-             "use_unofficial_version_number=false"
-             "treat_warnings_as_errors=false"
-             "use_official_google_api_keys=false"
-             "fieldtrial_testing_like_official_build=true"
-             "safe_browsing_mode=0"
-             "enable_mdns=false"
-             "enable_one_click_signin=false"
-             "enable_reading_list=false"
-             "enable_remoting=false"
-             "enable_reporting=false"
-             "enable_service_discovery=false"
-             "enable_vr=false"
-             "enable_widevine=false"
-             ;; Disable type-checking for the Web UI to avoid a Java dependency.
-             "enable_js_type_check=false"
-             ;; Disable code using TensorFlow until it has been scrutinized
-             ;; by the ungoogled project.
-             "build_with_tflite_lib=false"
-             ;; Avoid dependency on code formatting tools.
-             "blink_enable_generated_code_formatting=false"
-
-             ;; Define a custom toolchain that simply looks up CC, AR and
-             ;; friends from the environment.
-             "custom_toolchain=\"//build/toolchain/linux/unbundle:default\""
-             "host_toolchain=\"//build/toolchain/linux/unbundle:default\""
-
-             ;; Prefer system libraries.
-             "use_system_freetype=true"
-             "use_system_harfbuzz=true"
-             "use_system_lcms2=true"
-             "use_system_libdrm=true"
-             "use_system_libjpeg=true"
-             "use_system_libopenjpeg2=true"
-             "use_system_libpng=true"
-             "use_system_wayland_scanner=true"
-             (string-append "system_wayland_scanner_path=\""
-                            (assoc-ref %build-inputs "wayland-scanner")
-                            "/bin/wayland-scanner\"")
-
-             "use_system_zlib=true"
-             "use_gnome_keyring=false"  ;deprecated by libsecret
-             "use_pulseaudio=true"
-             "link_pulseaudio=true"
-             "icu_use_data_file=false"
-
-             ;; FIXME: Using system protobuf with "is_official_build" causes an
-             ;; invalid opcode and "protoc-gen-plugin: Plugin killed by signal 4".
-             ;;"perfetto_use_system_protobuf=true"
-
-             ;; VA-API acceleration is currently only supported on x86_64-linux.
-             ,@(if (string-prefix? "x86_64" (or (%current-target-system)
-                                                (%current-system)))
-                   '("use_vaapi=true")
-                   '())
-
-             "media_use_ffmpeg=true"
-             "media_use_libvpx=true"
-             "media_use_openh264=true"
-
-             ;; Do not artifically restrict formats supported by system ffmpeg.
-             "proprietary_codecs=true"
-             "ffmpeg_branding=\"Chrome\""
-
-             ;; WebRTC stuff.
-             "rtc_use_h264=true"
-             "rtc_use_pipewire=true"
-             "rtc_link_pipewire=true"
-             "rtc_pipewire_version=\"0.3\""
-             ;; Don't use bundled sources.
-             "rtc_build_json=true"      ;FIXME: libc++ std::string ABI difference
-             "rtc_build_libevent=false"
-             "rtc_build_libvpx=false"
-             "rtc_build_opus=false"
-             "rtc_build_libsrtp=true"   ;FIXME: fails to find headers
-             "rtc_build_usrsctp=true"   ;TODO: package this
-             "rtc_build_ssl=true")      ;XXX: the bundled BoringSSL is required?
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'patch-stuff
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let ((openjpeg (assoc-ref inputs "openjpeg")))
-               (substitute* "third_party/pdfium/BUILD.gn"
-                 ;; This include path is added by Debians openjpeg patch.
-                 (("/usr/include/openjpeg")
-                  (string-append openjpeg "/include/openjpeg"))))
-
-             (substitute*
-                 '("base/process/launch_posix.cc"
-                   "base/third_party/dynamic_annotations/dynamic_annotations.c"
-                   "sandbox/linux/seccomp-bpf/sandbox_bpf.cc"
-                   "sandbox/linux/services/credentials.cc"
-                   "sandbox/linux/services/namespace_utils.cc"
-                   "sandbox/linux/services/syscall_wrappers.cc"
-                   "sandbox/linux/syscall_broker/broker_host.cc")
-               (("include \"base/third_party/valgrind/") "include \"valgrind/"))
-
-             (for-each (lambda (file)
-                         (substitute* file
-                           ;; Fix opus include path.
-                           ;; Do not substitute opus_private.h.
-                           (("#include \"opus\\.h\"")
-                            "#include \"opus/opus.h\"")
-                           (("#include \"opus_custom\\.h\"")
-                            "#include \"opus/opus_custom.h\"")
-                           (("#include \"opus_defines\\.h\"")
-                            "#include \"opus/opus_defines.h\"")
-                           (("#include \"opus_multistream\\.h\"")
-                            "#include \"opus/opus_multistream.h\"")
-                           (("#include \"opus_types\\.h\"")
-                            "#include \"opus/opus_types.h\"")))
-                       (find-files (string-append "third_party/webrtc/modules"
-                                                  "/audio_coding/codecs/opus")))
-
-             ;; Many files try to include ICU headers from "third_party/icu/...".
-             ;; Remove the "third_party/" prefix to use system headers instead.
-             (substitute* (find-files "chrome" "\\.cc$")
-               (("third_party/icu/source/(common|i18n)/")
-                ""))
-
-             ;; XXX: Should be unnecessary when use_system_lcms2=true.
-             (substitute* "third_party/pdfium/core/fxcodec/icc/iccmodule.h"
-               (("include \"third_party/lcms/include/lcms2\\.h\"")
-                "include \"lcms2.h\""))
-
-             ;; Add missing include statement.
-             (substitute* "third_party/pdfium/core/fxcodec/png/png_decoder.cpp"
-               (("#include \"core/fxcodec/fx_codec.h\"" all)
-                (string-append all
-                               "\n#include \"core/fxcodec/fx_codec_def.h\"")))
-
-             (substitute*
-                 "third_party/breakpad/breakpad/src/common/linux/libcurl_wrapper.h"
-               (("include \"third_party/curl")
-                "include \"curl"))
-
-             (substitute* '("components/viz/common/gpu/vulkan_context_provider.h"
-                            "components/viz/common/resources/resource_format_utils.h"
-                            "gpu/config/gpu_util.cc")
-               (("third_party/vulkan_headers/include/") ""))
-
-             (substitute* "third_party/skia/include/gpu/vk/GrVkVulkan.h"
-               (("include/third_party/vulkan/") ""))))
-         (add-after 'patch-stuff 'add-absolute-references
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let ((cups (assoc-ref inputs "cups"))
-                   (nss (assoc-ref inputs "nss"))
-                   (mesa (assoc-ref inputs "mesa"))
-                   (udev (assoc-ref inputs "udev")))
-               (substitute* "printing/cups_config_helper.py"
-                 (("cups_config =.*")
-                  (string-append "cups_config = '" cups
-                                 "/bin/cups-config'\n")))
-               (substitute* "crypto/nss_util.cc"
-                 (("libnssckbi\\.so")
-                  (string-append nss "/lib/nss/libnssckbi.so")))
-               (substitute* "device/udev_linux/udev1_loader.cc"
-                 (("libudev\\.so\\.1")
-                  (string-append udev "/lib/libudev.so.1")))
-
-               (substitute*
-                   '("ui/ozone/platform/x11/gl_ozone_glx.cc"
-                     "ui/ozone/common/egl_util.cc"
-                     "ui/gl/init/gl_initializer_linux_x11.cc"
-                     "third_party/angle/src/libANGLE/renderer/gl/glx/FunctionsGLX.cpp")
-                 (("libGL\\.so\\.1")
-                  (string-append mesa "/lib/libGL.so.1"))
-                 (("libEGL\\.so\\.1")
-                  (string-append mesa "/lib/libEGL.so.1"))
-                 (("libGLESv2\\.so\\.2")
-                  (string-append mesa "/lib/libGLESv2.so.2"))))))
-         (add-before 'configure 'prepare-build-environment
-           (lambda* (#:key inputs #:allow-other-keys)
-
-             ;; Define the GN toolchain.
-             (setenv "AR" "llvm-ar") (setenv "NM" "llvm-nm")
-             (setenv "CC" "clang") (setenv "CXX" "clang++")
-
-             (let ((gcc (assoc-ref inputs  "gcc")))
-               ;; Remove the default compiler from CPLUS_INCLUDE_PATH to
-               ;; prevent header conflict with the bundled libcxx.
-               (setenv "CPLUS_INCLUDE_PATH"
-                       (string-join
-                        (delete (string-append gcc "/include/c++")
-                                (string-split (getenv "CPLUS_INCLUDE_PATH")
-                                              #\:))
-                        ":"))
-               (format #t
-                       "environment variable `CPLUS_INCLUDE_PATH' changed to ~a~%"
-                       (getenv "CPLUS_INCLUDE_PATH")))
-
-             (setenv "CXXFLAGS"
-                     (string-join
-                      '(;; Do not optimize away null pointer safety checks.
-                        "-fno-delete-null-pointer-checks"
-                        ;; Disable warnings about unknown warnings that require
-                        ;; Clang plugins or newer versions.
-                        "-Wno-unknown-warning-option")))
-
-             (setenv "CFLAGS" "-Wno-unknown-warning-option")
-
-             ;; TODO: pre-compile instead. Avoids a race condition.
-             (setenv "PYTHONDONTWRITEBYTECODE" "1")
-
-             ;; XXX: How portable is this.
-             (mkdir-p "third_party/node/linux/node-linux-x64")
-             (symlink (string-append (assoc-ref inputs "node") "/bin")
-                      "third_party/node/linux/node-linux-x64/bin")))
-         (replace 'configure
-           (lambda* (#:key configure-flags #:allow-other-keys)
-             (let ((args (string-join configure-flags " ")))
-               ;; Generate ninja build files.
-               (invoke "gn" "gen" "out/Release"
-                       (string-append "--args=" args))
-
-               ;; Print the full list of supported arguments as well as
-               ;; their current status for convenience.
-               (format #t "Dumping configure flags...\n")
-               (invoke "gn" "args" "out/Release" "--list"))))
-         (add-before 'build 'increase-resource-limits
-           (lambda _
-             ;; XXX: Chromiums linking step requires a lot of simultaneous file
-             ;; accesses.  Having a too low ulimit will result in bogus linker
-             ;; errors such as "foo.a: error adding symbols: malformed archive".
-
-             ;; Try increasing the soft resource limit of max open files to 2048,
-             ;; or equal to the hard limit, whichever is lower.
-             (call-with-values (lambda () (getrlimit 'nofile))
-               (lambda (soft hard)
-                 (when (and soft (< soft 2048))
-                   (if hard
-                       (setrlimit 'nofile (min hard 2048) hard)
-                       (setrlimit 'nofile 2048 #f))
-                   (format #t
-                           "increased maximum number of open files from ~d to ~d~%"
-                           soft (if hard (min hard 2048) 2048)))))))
-         (replace 'build
-           (lambda* (#:key (parallel-build? #t) #:allow-other-keys)
-             (invoke "ninja" "-C" "out/Release"
-                     "-j" (if parallel-build?
-                              (number->string (parallel-job-count))
-                              "1")
-                     "chrome"
-                     "chromedriver")))
-         (replace 'install
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let* ((out            (assoc-ref outputs "out"))
-                    (bin            (string-append out "/bin"))
-                    (exe            (string-append bin "/chromium"))
-                    (lib            (string-append out "/lib"))
-                    (man            (string-append out "/share/man/man1"))
-                    (applications   (string-append out "/share/applications"))
-                    (libs           '("chrome_100_percent.pak"
-                                      "chrome_200_percent.pak"
-                                      "resources.pak"
-                                      "v8_context_snapshot.bin"
-
-                                      ;; Chromium ships its own libGL
-                                      ;; implementation called ANGLE.
-                                      "libEGL.so" "libGLESv2.so"))
-                    (locales        (string-append lib "/locales"))
-                    (resources      (string-append lib "/resources"))
-                    (preferences    (assoc-ref inputs "master-preferences"))
-                    (gtk+           (assoc-ref inputs "gtk+"))
-                    (xdg-utils      (assoc-ref inputs "xdg-utils"))
-                    (sh             (which "sh")))
-
-               (substitute* '("chrome/app/resources/manpage.1.in"
-                              "chrome/installer/linux/common/desktop.template")
-                 (("@@MENUNAME@@") "Chromium")
-                 (("@@PACKAGE@@") "chromium")
-                 (("/usr/bin/@@USR_BIN_SYMLINK_NAME@@") exe))
-
-               (mkdir-p man)
-               (copy-file "chrome/app/resources/manpage.1.in"
-                          (string-append man "/chromium.1"))
-
-               (mkdir-p applications)
-               (copy-file "chrome/installer/linux/common/desktop.template"
-                          (string-append applications "/chromium.desktop"))
-
-               (mkdir-p lib)
-               (copy-file preferences (string-append lib "/master_preferences"))
-
-               (with-directory-excursion "out/Release"
-                 (for-each (cut install-file <> lib) libs)
-                 (copy-file "chrome" (string-append lib "/chromium"))
-
-                 (copy-recursively "locales" locales)
-                 (copy-recursively "resources" resources)
-
-                 (mkdir-p bin)
-                 (symlink "../lib/chromium" exe)
-                 (install-file "chromedriver" bin)
-
-                 (for-each (lambda (so)
-                             (install-file so (string-append lib "/swiftshader")))
-                           (find-files "swiftshader" "\\.so$"))
-
-                 (wrap-program exe
-                   ;; Avoid file manager crash.  See <https://bugs.gnu.org/26593>.
-                   `("XDG_DATA_DIRS" ":" prefix (,(string-append gtk+ "/share")))
-                   `("PATH" ":" prefix (,(string-append xdg-utils "/bin")))))
-
-               (with-directory-excursion "chrome/app/theme/chromium"
-                 (for-each
-                  (lambda (size)
-                    (let ((icons (string-append out "/share/icons/hicolor/"
-                                                size "x" size "/apps")))
-                      (mkdir-p icons)
-                      (copy-file (string-append "product_logo_" size ".png")
-                                 (string-append icons "/chromium.png"))))
-                  '("24" "48" "64" "128" "256")))))))))
+      #:configure-flags
+      ;; See tools/gn/docs/cookbook.md and
+      ;; https://www.chromium.org/developers/gn-build-configuration
+      ;; for usage.  Run "gn args . --list" in the Release
+      ;; directory for an exhaustive list of supported flags.
+      ;; (Note: The 'configure' phase will do that for you.)
+      #~(list "is_debug=false"
+              ;; Use the "official" release optimizations, as opposed to
+              ;; a developer build.
+              "is_official_build=true"
+              "clang_use_chrome_plugins=false"
+              "is_cfi=false"            ;requires ThinLTO
+              "use_thin_lto=false"      ;XXX lld segfaults
+              "chrome_pgo_phase=0"
+              "use_sysroot=false"
+              "goma_dir=\"\""
+              "enable_nacl=false"
+              "enable_nacl_nonsfi=false"
+              "use_unofficial_version_number=false"
+              "treat_warnings_as_errors=false"
+              "use_official_google_api_keys=false"
+              "disable_fieldtrial_testing_config=true"
+              "safe_browsing_mode=0"
+              "enable_mdns=false"
+              "enable_one_click_signin=false"
+              "enable_reading_list=false"
+              "enable_remoting=false"
+              "enable_reporting=false"
+              "enable_service_discovery=false"
+              "enable_vr=false"
+              "enable_widevine=false"
+              ;; Disable type-checking for the Web UI to avoid a Java dependency.
+              "enable_js_type_check=false"
+              ;; Disable code using TensorFlow until it has been scrutinized
+              ;; by the ungoogled project.
+              "build_with_tflite_lib=false"
+              ;; Avoid dependency on code formatting tools.
+              "blink_enable_generated_code_formatting=false"
+
+              ;; Define a custom toolchain that simply looks up CC, AR and
+              ;; friends from the environment.
+              "custom_toolchain=\"//build/toolchain/linux/unbundle:default\""
+              "host_toolchain=\"//build/toolchain/linux/unbundle:default\""
+
+              ;; Prefer system libraries.
+              "use_system_freetype=true"
+              "use_system_harfbuzz=true"
+              "use_system_lcms2=true"
+              "use_system_libdrm=true"
+              "use_system_libjpeg=true"
+              "use_system_libopenjpeg2=true"
+              "use_system_libpng=true"
+              "use_system_wayland_scanner=true"
+              (string-append "system_wayland_scanner_path=\""
+                             (search-input-file %build-inputs
+                                                "/bin/wayland-scanner")
+                             "\"")
+
+              "use_system_zlib=true"
+              "use_gnome_keyring=false" ;deprecated by libsecret
+              "use_pulseaudio=true"
+              "link_pulseaudio=true"
+              "icu_use_data_file=false"
+
+              ;; FIXME: Using system protobuf with "is_official_build" causes an
+              ;; invalid opcode and "protoc-gen-plugin: Plugin killed by signal 4".
+              ;;"perfetto_use_system_protobuf=true"
+
+              ;; VA-API acceleration is currently only supported on x86_64-linux.
+              #$@(if (string-prefix? "x86_64" (or (%current-target-system)
+                                                  (%current-system)))
+                     '("use_vaapi=true")
+                     '())
+
+              "media_use_ffmpeg=true"
+              "media_use_libvpx=true"
+              "media_use_openh264=true"
+
+              ;; Do not artifically restrict formats supported by system ffmpeg.
+              "proprietary_codecs=true"
+              "ffmpeg_branding=\"Chrome\""
+
+              ;; WebRTC stuff.
+              "rtc_use_h264=true"
+              "rtc_use_pipewire=true"
+              "rtc_link_pipewire=true"
+              ;; Don't use bundled sources.
+              "rtc_build_json=true"  ;FIXME: libc++ std::string ABI difference
+              "rtc_build_libevent=false"
+              ;; XXX: Use the bundled libvpx for WebRTC because unbundling
+              ;; currently fails (see above), and the versions must match.
+              "rtc_build_libvpx=true"
+              "rtc_build_opus=false"
+              "rtc_build_libsrtp=true"  ;FIXME: fails to find headers
+              "rtc_build_usrsctp=true"  ;TODO: package this
+              "rtc_build_ssl=true")     ;XXX: requires BoringSSL
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'patch-stuff
+            (lambda* (#:key inputs #:allow-other-keys)
+              (let ((openjpeg (search-input-directory
+                               inputs "include/openjpeg-2.4")))
+                (substitute* "third_party/pdfium/BUILD.gn"
+                  ;; This include path is added by Debians openjpeg patch.
+                  (("/usr/include/openjpeg-2.4") openjpeg))
+
+                (substitute*
+                    '("base/process/launch_posix.cc"
+                      "base/third_party/dynamic_annotations/dynamic_annotations.c"
+                      "sandbox/linux/seccomp-bpf/sandbox_bpf.cc"
+                      "sandbox/linux/services/credentials.cc"
+                      "sandbox/linux/services/namespace_utils.cc"
+                      "sandbox/linux/services/syscall_wrappers.cc"
+                      "sandbox/linux/syscall_broker/broker_host.cc")
+                  (("include \"base/third_party/valgrind/") "include \"valgrind/"))
+
+                (for-each (lambda (file)
+                            (substitute* file
+                              ;; Fix opus include path.
+                              ;; Do not substitute opus_private.h.
+                              (("#include \"opus\\.h\"")
+                               "#include \"opus/opus.h\"")
+                              (("#include \"opus_custom\\.h\"")
+                               "#include \"opus/opus_custom.h\"")
+                              (("#include \"opus_defines\\.h\"")
+                               "#include \"opus/opus_defines.h\"")
+                              (("#include \"opus_multistream\\.h\"")
+                               "#include \"opus/opus_multistream.h\"")
+                              (("#include \"opus_types\\.h\"")
+                               "#include \"opus/opus_types.h\"")))
+                          (find-files (string-append "third_party/webrtc/modules"
+                                                     "/audio_coding/codecs/opus")))
+
+                ;; Many files try to include ICU headers from "third_party/icu/...".
+                ;; Remove the "third_party/" prefix to use system headers instead.
+                (substitute* (find-files "chrome" "\\.cc$")
+                  (("third_party/icu/source/(common|i18n)/")
+                   ""))
+
+                ;; XXX: Should be unnecessary when use_system_lcms2=true.
+                (substitute* "third_party/pdfium/core/fxcodec/icc/icc_transform.h"
+                  (("include \"third_party/lcms/include/lcms2\\.h\"")
+                   "include \"lcms2.h\""))
+
+                (substitute*
+                    "third_party/breakpad/breakpad/src/common/linux/libcurl_wrapper.h"
+                  (("include \"third_party/curl")
+                   "include \"curl"))
+
+                (substitute* '("components/viz/common/gpu/vulkan_context_provider.h"
+                               "components/viz/common/resources/resource_format_utils.h"
+                               "gpu/config/gpu_util.cc")
+                  (("third_party/vulkan_headers/include/") ""))
+
+                (substitute* "third_party/skia/include/gpu/vk/GrVkVulkan.h"
+                  (("include/third_party/vulkan/") "")))))
+          (add-after 'patch-stuff 'add-absolute-references
+            (lambda* (#:key inputs #:allow-other-keys)
+              (let ((cups-config (search-input-file inputs "/bin/cups-config"))
+                    (libnssckbi.so (search-input-file inputs
+                                                      "/lib/nss/libnssckbi.so"))
+                    (libudev.so.1 (search-input-file inputs "/lib/libudev.so.1"))
+                    (libvulkan.so.1 (search-input-file inputs
+                                                       "/lib/libvulkan.so.1"))
+                    (mesa-lib (dirname (search-input-file inputs
+                                                          "/lib/libGL.so.1"))))
+                (substitute* "printing/cups_config_helper.py"
+                  (("cups_config =.*")
+                   (string-append "cups_config = '" cups-config "'\n")))
+                (substitute* "crypto/nss_util.cc"
+                  (("libnssckbi\\.so") libnssckbi.so))
+                (substitute* "device/udev_linux/udev1_loader.cc"
+                  (("libudev\\.so\\.1") libudev.so.1))
+                (substitute* "third_party/dawn/src/dawn_native/vulkan/BackendVk.cpp"
+                  (("libvulkan\\.so\\.1") libvulkan.so.1))
+                (substitute*
+                    '("ui/ozone/platform/x11/gl_ozone_glx.cc"
+                      "ui/ozone/common/egl_util.cc"
+                      "ui/gl/init/gl_initializer_linux_x11.cc"
+                      "third_party/angle/src/libANGLE/renderer/gl/glx\
+/FunctionsGLX.cpp")
+                  (("libGL\\.so\\.1")
+                   (string-append mesa-lib "/libGL.so.1"))
+                  (("libEGL\\.so\\.1")
+                   (string-append mesa-lib "/libEGL.so.1"))
+                  (("libGLESv2\\.so\\.2")
+                   (string-append mesa-lib "/libGLESv2.so.2"))))))
+          (add-before 'configure 'prepare-build-environment
+            (lambda* (#:key native-inputs inputs #:allow-other-keys)
+              (let ((c++ (search-input-directory (or native-inputs inputs)
+                                                 "include/c++"))
+                    (node (search-input-file (or native-inputs inputs)
+                                             "/bin/node")))
+                ;; Remove the default compiler from CPLUS_INCLUDE_PATH to
+                ;; prevent header conflict with the bundled libcxx.
+                (setenv "CPLUS_INCLUDE_PATH"
+                        (string-join
+                         (delete c++
+                                 (string-split (getenv "CPLUS_INCLUDE_PATH")
+                                               #\:))
+                         ":"))
+                (format #t
+                        "environment variable `CPLUS_INCLUDE_PATH' changed to ~a~%"
+                        (getenv "CPLUS_INCLUDE_PATH"))
+
+                ;; Define the GN toolchain.
+                (setenv "AR" "llvm-ar") (setenv "NM" "llvm-nm")
+                (setenv "CC" "clang") (setenv "CXX" "clang++")
+
+                ;; TODO: pre-compile instead. Avoids a race condition.
+                (setenv "PYTHONDONTWRITEBYTECODE" "1")
+
+                ;; XXX: How portable is this.
+                (mkdir-p "third_party/node/linux/node-linux-x64")
+                (symlink (dirname node)
+                         "third_party/node/linux/node-linux-x64/bin"))))
+          (replace 'configure
+            (lambda* (#:key configure-flags #:allow-other-keys)
+              (let ((args (string-join configure-flags " ")))
+                ;; Generate ninja build files.
+                (invoke "gn" "gen" "out/Release"
+                        (string-append "--args=" args))
+
+                ;; Print the full list of supported arguments as well as
+                ;; their current status for convenience.
+                (format #t "Dumping configure flags...\n")
+                (invoke "gn" "args" "out/Release" "--list"))))
+          (add-before 'build 'increase-resource-limits
+            (lambda _
+              ;; XXX: Chromiums linking step requires a lot of simultaneous file
+              ;; accesses.  Having a too low ulimit will result in bogus linker
+              ;; errors such as "foo.a: error adding symbols: malformed archive".
+
+              ;; Try increasing the soft resource limit of max open files to 2048,
+              ;; or equal to the hard limit, whichever is lower.
+              (call-with-values (lambda () (getrlimit 'nofile))
+                (lambda (soft hard)
+                  (when (and soft (< soft 2048))
+                    (if hard
+                        (setrlimit 'nofile (min hard 2048) hard)
+                        (setrlimit 'nofile 2048 #f))
+                    (format #t
+                            "increased maximum number of open files from ~d to ~d~%"
+                            soft (if hard (min hard 2048) 2048)))))))
+          (replace 'build
+            (lambda* (#:key (parallel-build? #t) #:allow-other-keys)
+              (invoke "ninja" "-C" "out/Release"
+                      "-j" (if parallel-build?
+                               (number->string (parallel-job-count))
+                               "1")
+                      "chrome"
+                      "chromedriver")))
+          (replace 'install
+            (lambda* (#:key inputs outputs #:allow-other-keys)
+              (let* ((out            (assoc-ref outputs "out"))
+                     (bin            (string-append out "/bin"))
+                     (exe            (string-append bin "/chromium"))
+                     (lib            (string-append out "/lib"))
+                     (man            (string-append out "/share/man/man1"))
+                     (applications   (string-append out "/share/applications"))
+                     (libs           '("chrome_100_percent.pak"
+                                       "chrome_200_percent.pak"
+                                       "resources.pak"
+                                       "v8_context_snapshot.bin"
+
+                                       ;; Swiftshader ICD.
+                                       "libvk_swiftshader.so"
+                                       "vk_swiftshader_icd.json"
+
+                                       ;; Chromium ships its own libGL
+                                       ;; implementation called ANGLE.
+                                       "libEGL.so" "libGLESv2.so"))
+                     (locales        (string-append lib "/locales"))
+                     (resources      (string-append lib "/resources"))
+                     (preferences
+                      ;; This file contains defaults for new user profiles.
+                      #$(local-file "aux-files/chromium/master-preferences.json"))
+                     (gtk+           (assoc-ref inputs "gtk+"))
+                     (xdg-utils      (assoc-ref inputs "xdg-utils")))
+
+                (substitute* '("chrome/app/resources/manpage.1.in"
+                               "chrome/installer/linux/common/desktop.template")
+                  (("@@MENUNAME@@") "Chromium")
+                  (("@@PACKAGE@@") "chromium")
+                  (("/usr/bin/@@USR_BIN_SYMLINK_NAME@@") exe))
+
+                (mkdir-p man)
+                (copy-file "chrome/app/resources/manpage.1.in"
+                           (string-append man "/chromium.1"))
+
+                (mkdir-p applications)
+                (copy-file "chrome/installer/linux/common/desktop.template"
+                           (string-append applications "/chromium.desktop"))
+
+                (mkdir-p lib)
+                (copy-file preferences (string-append lib "/master_preferences"))
+
+                (with-directory-excursion "out/Release"
+                  (for-each (cut install-file <> lib) libs)
+                  (copy-file "chrome" (string-append lib "/chromium"))
+
+                  (copy-recursively "locales" locales)
+                  (copy-recursively "resources" resources)
+
+                  (mkdir-p bin)
+                  (symlink "../lib/chromium" exe)
+                  (install-file "chromedriver" bin)
+
+                  (for-each (lambda (so)
+                              (install-file so (string-append lib "/swiftshader")))
+                            (find-files "swiftshader" "\\.so$"))
+
+                  (wrap-program exe
+                    ;; Avoid file manager crash.  See <https://bugs.gnu.org/26593>.
+                    `("XDG_DATA_DIRS" ":" prefix (,(string-append gtk+ "/share")))
+                    `("PATH" ":" prefix (,(string-append xdg-utils "/bin")))))
+
+                (with-directory-excursion "chrome/app/theme/chromium"
+                  (for-each
+                   (lambda (size)
+                     (let ((icons (string-append out "/share/icons/hicolor/"
+                                                 size "x" size "/apps")))
+                       (mkdir-p icons)
+                       (copy-file (string-append "product_logo_" size ".png")
+                                  (string-append icons "/chromium.png"))))
+                   '("24" "48" "64" "128" "256")))))))))
     (native-inputs
-     `(("bison" ,bison)
-       ("clang" ,clang-12)
-       ("gn" ,gn)
-       ("gperf" ,gperf)
-       ("ld-wrapper" ,(make-lld-wrapper lld))
-       ("ninja" ,ninja)
-       ("node" ,node-lts)
-       ("pkg-config" ,pkg-config)
-       ("which" ,which)
-
-       ;; This file contains defaults for new user profiles.
-       ("master-preferences" ,(local-file "aux-files/chromium/master-preferences.json"))
-
-       ("python-beautifulsoup4" ,python-beautifulsoup4)
-       ("python-html5lib" ,python-html5lib)
-       ("python" ,python-wrapper)
-       ("wayland-scanner" ,wayland)))
+     (list bison
+           clang-13
+           gn
+           gperf
+           lld-as-ld-wrapper
+           ninja
+           node-lts
+           pkg-config
+           which
+           python-beautifulsoup4
+           python-html5lib
+           python-wrapper
+           wayland))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("atk" ,atk)
-       ("cups" ,cups)
-       ("curl" ,curl)
-       ("dbus" ,dbus)
-       ("expat" ,expat)
-       ("flac" ,flac)
-       ("ffmpeg" ,ffmpeg)
-       ("fontconfig" ,fontconfig)
-       ("freetype" ,freetype)
-       ("gdk-pixbuf" ,gdk-pixbuf)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("harfbuzz" ,harfbuzz)
-       ("icu4c" ,icu4c-69)
-       ("lcms" ,lcms)
-       ("libevent" ,libevent)
-       ("libffi" ,libffi)
-       ("libjpeg-turbo" ,libjpeg-turbo)
-       ("libpng" ,libpng)
-       ("libva" ,libva)
-       ("libvpx" ,libvpx)
-       ("libwebp" ,libwebp)
-       ("libx11" ,libx11)
-       ("libxcb" ,libxcb)
-       ("libxcomposite" ,libxcomposite)
-       ("libxcursor" ,libxcursor)
-       ("libxdamage" ,libxdamage)
-       ("libxext" ,libxext)
-       ("libxfixes" ,libxfixes)
-       ("libxi" ,libxi)
-       ("libxml2" ,libxml2)
-       ("libxrandr" ,libxrandr)
-       ("libxrender" ,libxrender)
-       ("libxscrnsaver" ,libxscrnsaver)
-       ("libxslt" ,libxslt)
-       ("libxtst" ,libxtst)
-       ;; Newer kernel headers are required for userfaultfd support; remove
-       ;; after 'core-updates' merge.
-       ("linux-libre-headers" ,linux-libre-headers-5.10)
-       ("mesa" ,mesa)
-       ("minizip" ,minizip)
-       ("mit-krb5" ,mit-krb5)
-       ("nss" ,nss)
-       ("openh264" ,openh264)
-       ("openjpeg" ,openjpeg)                          ;PDFium only
-       ("opus" ,opus+custom)
-       ("pango" ,pango)
-       ("pciutils" ,pciutils)
-       ("pipewire" ,pipewire-0.3)
-       ("pulseaudio" ,pulseaudio)
-       ("snappy" ,snappy)
-       ("speech-dispatcher" ,speech-dispatcher)
-       ("udev" ,eudev)
-       ("valgrind" ,valgrind)
-       ("vulkan-headers" ,vulkan-headers)
-       ("wayland" ,wayland)
-       ("xdg-utils" ,xdg-utils)))
+     (list alsa-lib
+           atk
+           cups
+           curl
+           dbus
+           expat
+           flac
+           ffmpeg
+           fontconfig
+           freetype
+           gdk-pixbuf
+           glib
+           gtk+
+           harfbuzz-3.0
+           icu4c
+           lcms
+           libevent
+           libffi
+           libjpeg-turbo
+           libpng
+           libva
+           libvpx
+           libwebp
+           libx11
+           libxcb
+           libxcomposite
+           libxcursor
+           libxdamage
+           libxext
+           libxfixes
+           libxi
+           libxml2
+           libxrandr
+           libxrender
+           libxscrnsaver
+           libxslt
+           libxtst
+           mesa
+           minizip
+           mit-krb5
+           nss
+           openh264
+           openjpeg                     ;PDFium only
+           opus+custom
+           pango
+           pciutils
+           pipewire-0.3
+           pulseaudio
+           snappy
+           speech-dispatcher
+           eudev
+           valgrind
+           vulkan-headers
+           vulkan-loader
+           wayland
+           xdg-utils))
     (native-search-paths
      (list (search-path-specification
             (variable "CHROMIUM_EXTENSION_DIRECTORY")
diff --git a/gnu/packages/ci.scm b/gnu/packages/ci.scm
index 6bcf7711a5..a2dce71d40 100644
--- a/gnu/packages/ci.scm
+++ b/gnu/packages/ci.scm
@@ -54,27 +54,9 @@
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu))
 
-(define-public guile-squee-dev
-  (let ((commit "e0614273ad4067af82f508db51c8a100131151ea")
-        (revision "3"))
-    (package
-      (inherit guile-squee)
-      (name "guile-squee")
-      (version (string-append "0-" revision "." (string-take commit 7)))
-      (home-page "https://notabug.org/mothacehe/guile-squee.git")
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url home-page)
-                      (commit commit)))
-                (sha256
-                 (base32
-                  "1jps14z8653ah2kr367iayzyi3ql2s55l77xrafz7gk3mzcvgrrg"))
-                (file-name (string-append name "-" version "-checkout")))))))
-
 (define-public cuirass
-  (let ((commit "60190401ce4ccc890629ec3cb22a84a8ab8c2645")
-        (revision "4"))
+  (let ((commit "9f08035f942a1e78f92e2db886d7837b0ab98b2f")
+        (revision "11"))
     (package
       (name "cuirass")
       (version (git-version "1.1.0" revision commit))
@@ -87,7 +69,7 @@
          (file-name (git-file-name name version))
          (sha256
           (base32
-           "0b0bs32lzk5ck7lw8ac9dj2h70sqc5y430vhi7rcnwj48mdrchma"))))
+           "0jrp0hngbmlg5vmfr93j86lxgk2zm5d424dx0c29ldgfr8i7bwcz"))))
       (build-system gnu-build-system)
       (arguments
        `(#:modules ((guix build utils)
@@ -114,14 +96,12 @@
              (lambda* (#:key inputs #:allow-other-keys)
                (let ((pg (assoc-ref inputs "ephemeralpg"))
                      (path (getenv "PATH")))
-                 (setenv "PATH" (string-append pg "/bin:" path))
-                 #t)))
+                 (setenv "PATH" (string-append pg "/bin:" path)))))
            ;; Disable the remote tests that require a Guix daemon connection.
            (add-before 'check 'disable-remote-tests
              (lambda _
                (substitute* "Makefile.am"
-                 (("tests/remote.scm") ""))
-               #t))
+                 (("tests/remote.scm") ""))))
            (add-after 'install 'wrap-program
              (lambda* (#:key inputs outputs #:allow-other-keys)
                ;; Wrap the 'cuirass' command to refer to the right modules.
@@ -165,31 +145,26 @@
                  (wrap-program (string-append out "/bin/cuirass")
                    `("PATH" ":" prefix (,(string-append out "/bin")))
                    `("GUILE_LOAD_PATH" ":" prefix (,mods))
-                   `("GUILE_LOAD_COMPILED_PATH" ":" prefix (,objs)))
-                 #t))))))
+                   `("GUILE_LOAD_COMPILED_PATH" ":" prefix (,objs)))))))))
       (inputs
-       `(("guile" ,guile-3.0/libgc-7)
-         ("guile-avahi" ,guile-avahi)
-         ("guile-fibers" ,guile-fibers)
-         ("guile-gcrypt" ,guile-gcrypt)
-         ("guile-json" ,guile-json-4)
-         ("guile-simple-zmq" ,guile-simple-zmq)
-         ("guile-squee" ,guile-squee-dev)
-         ("guile-git" ,guile-git)
-         ("guile-zlib" ,guile-zlib)
-         ("guile-mastodon" ,guile-mastodon)
-         ("gnutls" ,gnutls)
-         ("mailutils" ,mailutils)
-         ;; FIXME: this is propagated by "guile-git", but it needs to be among
-         ;; the inputs to add it to GUILE_LOAD_PATH.
-         ("guile-bytestructures" ,guile-bytestructures)
-         ("guix" ,guix)))
+       (list guile-3.0-latest
+             guile-avahi
+             guile-fibers
+             guile-gcrypt
+             guile-json-4
+             guile-simple-zmq
+             guile-squee
+             guile-git
+             guile-zlib
+             guile-mastodon
+             gnutls
+             mailutils
+             ;; FIXME: this is propagated by "guile-git", but it needs to be among
+             ;; the inputs to add it to GUILE_LOAD_PATH.
+             guile-bytestructures
+             guix))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("pkg-config" ,pkg-config)
-         ("texinfo" ,texinfo)
-         ("ephemeralpg" ,ephemeralpg)))
+       (list autoconf automake pkg-config texinfo ephemeralpg))
       (native-search-paths
        ;; For HTTPS access, Cuirass itself honors these variables, with the
        ;; same semantics as Git and OpenSSL (respectively).
@@ -211,7 +186,7 @@ intended as a replacement for Hydra.")
 (define-public laminar
   (package
     (name "laminar")
-    (version "1.0")
+    (version "1.1")
     (source
      (origin (method url-fetch)
              (uri (string-append "https://github.com/ohwgiles/laminar/archive/"
@@ -220,7 +195,7 @@ intended as a replacement for Hydra.")
              (file-name (string-append name "-" version ".tar.gz"))
              (sha256
               (base32
-               "11m6h3rdmj2rsmsryy7r40gqccj4gg1cnqwy6blscs87gx4s423g"))))
+               "1lzfmfjygmbdr2n1q49kwwffw8frz5y6iczhdz5skwmzwg0chbsf"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f                      ; TODO Can't build tests
@@ -275,11 +250,7 @@ intended as a replacement for Hydra.")
 
              #t)))))
     (inputs
-     `(("capnproto" ,capnproto)
-       ("rapidjson" ,rapidjson)
-       ("sqlite" ,sqlite)
-       ("boost" ,boost)
-       ("zlib" ,zlib)))
+     (list capnproto rapidjson sqlite boost zlib))
     (native-inputs
      `(("googletest" ,googletest)
        ("uglifyjs" ,node-uglify-js)
@@ -301,10 +272,10 @@ intended as a replacement for Hydra.")
        ("ansi_up.js"
         ,(origin (method url-fetch)
                  (uri (string-append "https://raw.githubusercontent.com/"
-                                     "drudru/ansi_up/v1.3.0/ansi_up.js"))
+                                     "drudru/ansi_up/v4.0.4/ansi_up.js"))
                  (sha256
                   (base32
-                   "1993dywxqi2ylnxybwk7m0s0bg2bq7kfllpyr0s8ck6chd0p8i6r"))))
+                   "1dx8wn38ds8d01kkih26fx1yrisg3kpz61qynjr4zil03ap0hrlr"))))
        ("Chart.js"
         ,(origin (method url-fetch)
                  (uri (string-append "https://github.com/chartjs/Chart.js/"
diff --git a/gnu/packages/cinnamon.scm b/gnu/packages/cinnamon.scm
index e1c9d7b614..fe33e797e4 100644
--- a/gnu/packages/cinnamon.scm
+++ b/gnu/packages/cinnamon.scm
@@ -53,24 +53,24 @@
     (build-system gnu-build-system)
     ;; TODO: package 'libgsystem'.
     (inputs
-     `(("accountsservice" ,accountsservice)
-       ("gtk+" ,gtk+)
-       ("glib" ,glib)
-       ("gobject-introspection" ,gobject-introspection)
-       ("gnome-common" ,gnome-common)
-       ("libxkbfile" ,libxkbfile)
-       ("libxrandr" ,libxrandr)
-       ("python-2" ,python-2)
-       ("pulseaudio" ,pulseaudio)
-       ("xkeyboard-config" ,xkeyboard-config)))
+     (list accountsservice
+           gtk+
+           glib
+           gobject-introspection
+           gnome-common
+           libxkbfile
+           libxrandr
+           python-2
+           pulseaudio
+           xkeyboard-config))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("gettext" ,gettext-minimal)
-       ("glib" ,glib "bin") ; glib-gettextize
-       ("intltool" ,intltool)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf
+           automake
+           gettext-minimal
+           `(,glib "bin") ; glib-gettextize
+           intltool
+           libtool
+           pkg-config))
     (home-page "https://github.com/linuxmint/cinnamon-desktop/")
     (synopsis "Library for the Cinnamon Desktop")
     (description
diff --git a/gnu/packages/clojure.scm b/gnu/packages/clojure.scm
index 5b238ab996..40a3d7708a 100644
--- a/gnu/packages/clojure.scm
+++ b/gnu/packages/clojure.scm
@@ -23,11 +23,14 @@
 (define-module (gnu packages clojure)
   #:use-module (gnu packages)
   #:use-module (gnu packages java)
+  #:use-module (gnu packages maven)
+  #:use-module (gnu packages readline)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix build-system ant)
+  #:use-module (guix build-system copy)
   #:use-module (guix build-system clojure)
   #:use-module (ice-9 match))
 
@@ -118,23 +121,7 @@
            (add-after 'install-license-files 'install-doc
              (cut install-doc #:doc-dirs '("doc/clojure/") <...>))
            (add-after 'install-doc 'install-javadoc
-             (install-javadoc "target/javadoc/"))
-           (add-after 'install 'make-wrapper
-             (lambda* (#:key inputs outputs #:allow-other-keys)
-               (let* ((out (assoc-ref outputs "out"))
-                      (wrapper (string-append out "/bin/clojure")))
-                 (mkdir-p (string-append out "/bin"))
-                 (with-output-to-file wrapper
-                   (lambda _
-                     (display
-                      (string-append
-                       "#!"
-                       (which "sh")
-                       "\n\n"
-                       (assoc-ref inputs "jre") "/bin/java -jar "
-                       out "/share/java/clojure.jar \"$@\"\n"))))
-                 (chmod wrapper #o555))
-               #t)))))
+             (install-javadoc "target/javadoc/")))))
       (native-inputs libraries)
       (home-page "https://clojure.org/")
       (synopsis "Lisp dialect running on the JVM")
@@ -163,6 +150,62 @@ designs.")
                      license:asl2.0
                      license:cpl1.0)))))
 
+(define-public clojure-tools
+  (package
+    (name "clojure-tools")
+    (version "1.10.3.1040")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://download.clojure.org/install/clojure-tools-"
+                           version
+                           ".tar.gz"))
+       (sha256 (base32 "0xvr9nmk9q789vp32zmmzj4macv8v7y9ivnfd6lf7i8vxgg6hvgv"))
+       ;; Remove AOT compiled JAR.  The other JAR only contains uncompiled
+       ;; Clojure source code.
+       (snippet
+        `(delete-file ,(string-append "clojure-tools-" version ".jar")))))
+    (build-system copy-build-system)
+    (arguments
+     `(#:install-plan
+       '(("deps.edn" "lib/clojure/")
+         ("example-deps.edn" "lib/clojure/")
+         ("exec.jar" "lib/clojure/libexec/")
+         ("clojure" "bin/")
+         ("clj" "bin/"))
+       #:modules ((guix build copy-build-system)
+                  (guix build utils)
+                  (srfi srfi-1)
+                  (ice-9 match))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-paths
+           (lambda* (#:key outputs #:allow-other-keys)
+             (substitute* "clojure"
+               (("PREFIX") (string-append (assoc-ref outputs "out") "/lib/clojure")))
+             (substitute* "clj"
+               (("BINDIR") (string-append (assoc-ref outputs "out") "/bin"))
+               (("rlwrap") (which "rlwrap")))))
+         (add-after 'fix-paths 'copy-tools-deps-alpha-jar
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (substitute* "clojure"
+               (("\\$install_dir/libexec/clojure-tools-\\$version\\.jar")
+                (string-join
+                 (append-map (match-lambda
+                               ((label . dir)
+                                (find-files dir "\\.jar$")))
+                             inputs)
+                 ":"))))))))
+    (inputs (list rlwrap
+                  clojure
+                  clojure-tools-deps-alpha
+                  java-commons-logging-minimal))
+    (home-page "https://clojure.org/releases/tools")
+    (synopsis "CLI tools for the Clojure programming language")
+    (description "The Clojure command line tools can be used to start a
+Clojure repl, use Clojure and Java libraries, and start Clojure programs.")
+    (license license:epl1.0)))
+
 (define-public clojure-algo-generic
   (package
     (name "clojure-algo-generic")
@@ -207,7 +250,7 @@ that can be implemented for any data type.")
        #:test-dirs '("src/test/clojure/")
        #:doc-dirs '()))
     (native-inputs
-     `(("clojure-tools-macro" ,clojure-tools-macro)))
+     (list clojure-tools-macro))
     (synopsis
      "Monad Macros and Definitions")
     (description
@@ -243,6 +286,66 @@ It supports Clojure 1.5.1 and later as well as ClojureScript.")
       (home-page "https://github.com/clojure/core.match")
       (license license:epl1.0))))
 
+(define-public clojure-data-codec
+  (package
+    (name "clojure-data-codec")
+    (version "0.1.1")
+    (home-page "https://github.com/clojure/data.codec")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url home-page)
+                    (commit (string-append "data.codec-" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "192df1dmbwvf1x837mi731n9x94bdypaz18va45plzgdsh4xx6dr"))))
+    (build-system clojure-build-system)
+    (arguments
+     '(#:source-dirs '("src/main/clojure")
+       #:test-dirs '("src/test/clojure")
+       #:doc-dirs '()))
+    (native-inputs (list java-commons-codec
+                         clojure-test-check))
+    (synopsis "Native codec implementations for Clojure")
+    (description "Native codec implementations for Clojure.  Currently only
+base64 has been implemented.  Implements the standard base64 encoding
+character set, but does not yet support automatic fixed line-length encoding.
+All operations work on either byte arrays or Input/OutputStreams.  Performance
+is on par with Java implementations, e.g., Apache commons-codec.")
+    (license license:epl1.0)))
+
+(define-public clojure-data-xml
+  (package
+    (name "clojure-data-xml")
+    (version "0.2.0-alpha6")
+    (home-page "https://github.com/clojure/data.xml")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url home-page)
+                    (commit (string-append "data.xml-" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "08vglcapq7sd9zhw8dw1y7dcdks7f21w1pw9p05i475i3bw4cf94"))))
+    (build-system clojure-build-system)
+    (arguments
+     '(#:source-dirs '("src/main/clojure")
+       #:test-dirs '("src/test/clojure")
+       #:doc-dirs '()))
+    (propagated-inputs (list clojure-data-codec))
+    (synopsis "Clojure library for reading and writing XML data")
+    (description "@code{data.xml} is a Clojure library for reading and writing
+XML data. @code{data.xml} has the following features:
+
+Parses XML documents into Clojure data structures
+Emits XML from Clojure data structures
+No additional dependencies if using JDK >= 1.6
+Uses StAX internally
+lazy - should allow parsing and emitting of large XML documents")
+    (license license:epl1.0)))
+
 (define-public clojure-instaparse
   (let ((commit "dcfffad5b065e750f0f5835f017cdd8188b8ca2e")
         (version "1.4.9")) ; upstream forget to tag this release
@@ -295,6 +398,33 @@ tree.
       (home-page "https://github.com/Engelberg/instaparse")
       (license license:epl1.0))))
 
+(define-public clojure-test-check
+  (package
+    (name "clojure-test-check")
+    (version "1.1.1")
+    (home-page "https://github.com/clojure/test.check")
+    (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
+                "09jvlibnxhjv0l57y0sa7yy5in67gq4sssag77hv2d980mwdnls6"))))
+    (build-system clojure-build-system)
+    (arguments
+     '(#:source-dirs '("src/main/clojure")
+       #:test-dirs '("src/test/clojure")
+       #:doc-dirs '()))
+    (synopsis "QuickCheck for Clojure")
+    (description "@code{test.check} is a Clojure property-based testing tool
+inspired by QuickCheck.  The core idea of @code{test.check} is that instead of
+enumerating expected input and output for unit tests, you write properties
+about your function that should hold true for all inputs.  This lets you write
+concise, powerful tests.")
+    (license license:epl1.0)))
+
 (define-public clojure-tools-macro
   (package
     (name "clojure-tools-macro")
@@ -341,3 +471,93 @@ tree.
      "The @code{tools.cli} library provides Clojure programmers with tools to
 work with command-line arguments.")
     (license license:epl1.0)))
+
+(define-public clojure-tools-deps-alpha
+  (package
+    (name "clojure-tools-deps-alpha")
+    (version "0.12.1104")
+    (home-page "https://github.com/clojure/tools.deps.alpha")
+    (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
+                "174m83n5m3arai2vbg434zjibbsr3r4pp7lz3adja8lxq7g21r80"))))
+    (build-system clojure-build-system)
+    (arguments
+     `(#:source-dirs '("src/main/clojure" "src/main/resources")
+       #:test-dirs '("src/test/clojure")
+       #:doc-dirs '()
+       ;; FIXME: Could not initialize class org.eclipse.aether.transport.http.SslSocketFactory
+       #:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         ;; FIXME: Currently, the S3 transporter depends on ClojureScript,
+         ;; which is very difficult to package due to dependencies on Java
+         ;; libraries with non-standard build systems. Instead of actually
+         ;; packaging these libraries, we just remove the S3 transporter that
+         ;; depends on them.
+         (add-after 'unpack 'remove-s3-transporter
+           (lambda _
+             (for-each delete-file
+                       (list
+                        (string-append
+                         "src/main/clojure/clojure/"
+                         "tools/deps/alpha/util/s3_aws_client.clj")
+                        (string-append
+                         "src/main/clojure/clojure/"
+                         "tools/deps/alpha/util/s3_transporter.clj")
+                        (string-append
+                         "src/test/clojure/clojure/"
+                         "tools/deps/alpha/util/test_s3_transporter.clj")))
+             (substitute*
+                 "src/main/clojure/clojure/tools/deps/alpha/util/maven.clj"
+               (("clojure.tools.deps.alpha.util.s3-transporter")
+                "")))))))
+    (propagated-inputs (list maven-resolver-api
+                             maven-resolver-spi
+                             maven-resolver-impl
+                             maven-resolver-util
+                             maven-resolver-connector-basic
+                             maven-resolver-provider
+                             maven-core
+                             maven-resolver-transport-http
+                             maven-resolver-transport-file
+                             clojure-tools-gitlibs
+                             clojure-tools-cli
+                             clojure-data-xml))
+    (synopsis "Clojure library supporting clojure-tools")
+    (description "This package provides a functional API for transitive
+dependency graph expansion and the creation of classpaths.")
+    (license license:epl1.0)))
+
+(define-public clojure-tools-gitlibs
+  (package
+    (name "clojure-tools-gitlibs")
+    (version "2.4.172")
+    (home-page "https://github.com/clojure/tools.gitlibs")
+    (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
+                "19d83wigmigy66f5i61a3ishg7zrlv8jngj8m9brsh9v38a0fwdr"))))
+    (build-system clojure-build-system)
+    (arguments
+     '(#:source-dirs '("src/main/clojure")
+       #:test-dirs '("src/test/clojure")
+       #:doc-dirs '()
+       ;; Tests attempt to clone git repositories from the internet.
+       #:tests? #f))
+    (synopsis "Retrieve, cache, and programmatically access git libraries")
+    (description "To access git dependencies (for example, via
+@code{tools.deps}), one must download git directories and working trees as
+indicated by git SHAs.  This library provides this functionality and also
+keeps a cache of git directories and working trees that can be reused.")
+    (license license:epl1.0)))
diff --git a/gnu/packages/cluster.scm b/gnu/packages/cluster.scm
index 2de5f6fe36..d27544e992 100644
--- a/gnu/packages/cluster.scm
+++ b/gnu/packages/cluster.scm
@@ -42,26 +42,21 @@
 (define-public drbd-utils
   (package
     (name "drbd-utils")
-    (version "9.15.1")
+    (version "9.19.1")
     (source (origin
               (method url-fetch)
-              ;; Older releases are moved to /archive.  List it first because in
-              ;; practice this URL will be the most current (e.g. time-machine).
-              (uri (list (string-append "https://www.linbit.com/downloads/drbd"
-                                        "/utils/archive/drbd-utils-" version
-                                        ".tar.gz")
-                         (string-append "https://www.linbit.com/downloads/drbd"
+              (uri (list (string-append "https://pkg.linbit.com/downloads/drbd"
                                         "/utils/drbd-utils-" version ".tar.gz")))
               (sha256
                (base32
-                "1q92bwnprqkkj9iy6fxcybcfpxvvjw5clis0igrbxqnq869kwp1i"))
+                "1l99kcrb0j85wxxmrdihpx9bk1a4sdi7wlp5m1x5l24k8ck1m5cf"))
               (modules '((guix build utils)))
               (snippet
                '(begin
                   (substitute* "scripts/global_common.conf"
                     ;; Do not participate in usage count survey by default.
-                    (("usage-count: yes")
-                     "usage-count: no"))
+                    (("usage-count yes")
+                     "usage-count no"))
                   (substitute* "scripts/Makefile.in"
                     ;; Install the Pacemaker resource agents to the libdir,
                     ;; regardless of what the OCF specification says...
@@ -86,6 +81,7 @@
                            "--sysconfdir=/etc"
                            "--localstatedir=/var")
        #:test-target "test"
+       #:make-flags '("WANT_DRBD_REPRODUCIBLE_BUILD=yesplease")
        #:phases
        (modify-phases %standard-phases
          (add-after 'patch-generated-file-shebangs 'patch-documentation
@@ -169,13 +165,9 @@ connection.  This package contains the userland utilities.")
                              (string-append infodir "/keepalived-figures"))
                #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python-sphinx" ,python-sphinx)
-       ("texinfo" ,texinfo)))
+     (list pkg-config python-sphinx texinfo))
     (inputs
-     `(("openssl" ,openssl)
-       ("libnfnetlink" ,libnfnetlink)
-       ("libnl" ,libnl)))
+     (list openssl libnfnetlink libnl))
     (home-page "https://www.keepalived.org/")
     (synopsis "Load balancing and high-availability frameworks")
     (description
@@ -208,8 +200,7 @@ independently or together to provide resilient infrastructures.")
                          ((".*test_uv_append.c.*") ""))
                        #t)))))
     (inputs
-     `(("libuv" ,libuv)
-       ("lz4" ,lz4)))
+     (list libuv lz4))
     (native-inputs
      `(("autoconf" ,autoconf)
        ("automake" ,automake)
@@ -249,15 +240,11 @@ snapshots).")
                ;; race condition when tearing down the test server.
                ((".*test_client.c.*") "")))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
-     `(("libraft" ,libraft)
-       ("libuv" ,libuv)))
+     (list libraft libuv))
     (propagated-inputs
-     `(("sqlite" ,sqlite)))  ; dqlite.h includes sqlite3.h
+     (list sqlite))  ; dqlite.h includes sqlite3.h
     (build-system gnu-build-system)
     (synopsis "Distributed SQLite")
     (description "dqlite is a C library that implements an embeddable and replicated
diff --git a/gnu/packages/cmake.scm b/gnu/packages/cmake.scm
index df8885b4dd..4207f14310 100644
--- a/gnu/packages/cmake.scm
+++ b/gnu/packages/cmake.scm
@@ -5,10 +5,10 @@
 ;;; Copyright © 2014 Ian Denhardt <ian@zenhack.net>
 ;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
-;;; Copyright © 2017, 2018, 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2017, 2018, 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2018, 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 © 2019 Pierre-Moana Levesque <pierre.moana.levesque@gmail.com>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2021 Ricardo Wurmus <rekado@elephly.net>
@@ -83,7 +83,7 @@
       (arguments
        `(#:tests? #f))                  ; No target
       (native-inputs
-       `(("extra-cmake-modules" ,extra-cmake-modules)))
+       (list extra-cmake-modules))
       (synopsis "Shared CMake functions and macros")
       (description "CMake-Shared are shared functions and macros for projects
 using the CMake build system.")
@@ -92,7 +92,7 @@ using the CMake build system.")
 
 ;;; Build phases shared between 'cmake-bootstrap' and the later variants
 ;;; that use cmake-build-system.
-(define %common-build-phases
+(define (%common-build-phases)
   `((add-after 'unpack 'split-package
       ;; Remove files that have been packaged in other package recipes.
       (lambda _
@@ -100,6 +100,17 @@ using the CMake build system.")
         (substitute* "Auxiliary/CMakeLists.txt"
           ((".*cmake-mode.el.*") ""))
         #t))
+    ,@(if (target-x86-32?)
+          '((add-after 'unpack 'skip-cpack-txz-test
+              (lambda _
+                ;; In 'RunCMake.CPack_TXZ', the 'TXZ/THREADED_ALL' test
+                ;; would occasionally fail on i686 with "Internal error
+                ;; initializing compression library: Cannot allocate
+                ;; memory": <https://issues.guix.gnu.org/50617>.  Skip it.
+                (substitute* "Tests/RunCMake/CPack/RunCMakeTest.cmake"
+                  (("THREADED_ALL \"TXZ;DEB\"")
+                   "THREADED_ALL \"DEB\"")))))
+          '())
     (add-before 'configure 'patch-bin-sh
       (lambda _
         ;; Replace "/bin/sh" by the right path in... a lot of
@@ -110,7 +121,6 @@ using the CMake build system.")
               "Source/cmGlobalXCodeGenerator.cxx"
               "Source/cmLocalUnixMakefileGenerator3.cxx"
               "Source/cmExecProgramCommand.cxx"
-              "Utilities/Release/release_cmake.cmake"
               "Tests/CMakeLists.txt"
               "Tests/RunCMake/File_Generate/RunCMakeTest.cmake")
           (("/bin/sh") (which "sh")))
@@ -120,23 +130,27 @@ using the CMake build system.")
   '(;; This test copies libgcc_s.so.1 from GCC and tries to modify its RPATH,
     ;; but does not cope with the file being read-only.
     "BundleUtilities"
-    ;; This test requires network access.
-    "CTestTestUpload"
+    ;; These tests require network access.
+    "CTestTestUpload" "CMake.FileDownload"
     ;; This test requires 'ldconfig' which is not available in Guix.
-    "RunCMake.install"))
+    "RunCMake.install"
+    ;; This test fails for unknown reason.
+    "RunCMake.file-GET_RUNTIME_DEPENDENCIES"))
 
 (define %preserved-third-party-files
   '(;; 'Source/cm_getdate.c' includes archive_getdate.c wholesale, so it must
     ;; be available along with the required headers.
     "Utilities/cmlibarchive/libarchive/archive_getdate.c"
-    "Utilities/cmlibarchive/libarchive/archive_getdate.h"))
+    "Utilities/cmlibarchive/libarchive/archive_getdate.h"
+    ;; CMake header wrappers.
+    "Utilities/cm3p"))
 
 ;;; The "bootstrap" CMake.  It is used to build 'cmake-minimal' below, as well
 ;;; as any dependencies that need cmake-build-system.
 (define-public cmake-bootstrap
   (package
     (name "cmake-bootstrap")
-    (version "3.16.5")
+    (version "3.21.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://cmake.org/files/v"
@@ -144,49 +158,7 @@ using the CMake build system.")
                                   "/cmake-" version ".tar.gz"))
               (sha256
                (base32
-                "1z4bb8z6b4dvq5hrvajrf1hyybqay3xybyimf71w1jgcp180nxjz"))
-              (modules '((guix build utils)
-                         (ice-9 ftw)))
-              (snippet
-               `(begin
-                  ;; CMake bundles its dependencies in the "Utilities" directory.
-                  ;; Delete those to ensure the system libraries are used.
-                  (define preserved-files
-                    '(,@%preserved-third-party-files
-                      ;; Use the bundled JsonCpp during bootstrap to work around
-                      ;; a circular dependency.  TODO: JsonCpp can be built with
-                      ;; Meson instead of CMake, but meson-build-system currently
-                      ;; does not support cross-compilation.
-                      "Utilities/cmjsoncpp"
-                      ;; LibUV is required to bootstrap the initial build system.
-                      "Utilities/cmlibuv"))
-
-                  (file-system-fold (lambda (dir stat result)         ;enter?
-                                      (or (string=? "Utilities" dir)  ;init
-                                          ;; The bundled dependencies are
-                                          ;; distinguished by having a "cm"
-                                          ;; prefix to their upstream names.
-                                          (and (string-prefix? "Utilities/cm" dir)
-                                               (not (member dir preserved-files)))))
-                                    (lambda (file stat result)        ;leaf
-                                      (unless (or (member file preserved-files)
-                                                  ;; Preserve top-level files.
-                                                  (string=? "Utilities"
-                                                            (dirname file)))
-                                        (delete-file file)))
-                                    (const #t)                        ;down
-                                    (lambda (dir stat result)         ;up
-                                      (when (equal? (scandir dir) '("." ".."))
-                                        (rmdir dir)))
-                                    (const #t)                        ;skip
-                                    (lambda (file stat errno result)
-                                      (format (current-error-port)
-                                              "warning: failed to delete ~a: ~a~%"
-                                              file (strerror errno)))
-                                    #t
-                                    "Utilities"
-                                    lstat)
-                  #t))
+                "0y2rk316j9m1iqimgwah0z1ii3ggli65dw6hdn4ckx0mqaahlmyr"))
               (patches (search-patches "cmake-curl-certificates.patch"))))
     (build-system gnu-build-system)
     (arguments
@@ -227,7 +199,7 @@ using the CMake build system.")
            " --exclude-regex ^\\(" (string-join skipped-tests "\\|") "\\)$")))
        #:phases
        (modify-phases %standard-phases
-         ,@%common-build-phases
+         ,@(%common-build-phases)
          (add-before 'configure 'set-paths
            (lambda _
              ;; Help cmake's bootstrap process to find system libraries
@@ -242,14 +214,13 @@ using the CMake build system.")
              (apply invoke "./configure" configure-flags))))))
     (inputs
      `(("bzip2" ,bzip2)
-       ("curl" ,curl-minimal)
+       ("curl" ,curl)
        ("expat" ,expat)
        ("file" ,file)
        ("libarchive" ,libarchive)
        ,@(if (hurd-target?)
              '()
              `(("libuv" ,libuv)))       ;not supported on the Hurd
-       ("ncurses" ,ncurses)             ;required for ccmake
        ("rhash" ,rhash)
        ("zlib" ,zlib)))
     (native-search-paths
@@ -287,17 +258,41 @@ and workspaces that can be used in the compiler environment of your choice.")
     (name "cmake-minimal")
     (source (origin
               (inherit (package-source cmake-bootstrap))
+              ;; Purge CMakes bundled dependencies as they are no longer needed.
+              (modules '((ice-9 ftw)))
               (snippet
-               (match (origin-snippet (package-source cmake-bootstrap))
-                 ((_ _ exp ...)
-                  ;; Now we can delete the remaining software bundles.
-                  (append `(begin
-                             (define preserved-files ',%preserved-third-party-files))
-                          exp))))))
+               `(begin
+                  (define preserved-files ',%preserved-third-party-files)
+
+                  (file-system-fold (lambda (dir stat result)         ;enter?
+                                      (or (string=? "Utilities" dir)  ;init
+                                          ;; The bundled dependencies are
+                                          ;; distinguished by having a "cm"
+                                          ;; prefix to their upstream names.
+                                          (and (string-prefix? "Utilities/cm" dir)
+                                               (not (member dir preserved-files)))))
+                                    (lambda (file stat result)        ;leaf
+                                      (unless (or (member file preserved-files)
+                                                  ;; Preserve top-level files.
+                                                  (string=? "Utilities"
+                                                            (dirname file)))
+                                        (delete-file file)))
+                                    (const #t)                        ;down
+                                    (lambda (dir stat result)         ;up
+                                      (when (equal? (scandir dir) '("." ".."))
+                                        (rmdir dir)))
+                                    (const #t)                        ;skip
+                                    (lambda (file stat errno result)
+                                      (format (current-error-port)
+                                              "warning: failed to delete ~a: ~a~%"
+                                              file (strerror errno)))
+                                    #t
+                                    "Utilities"
+                                    lstat)
+                  #t))))
     (inputs
-     `(("curl" ,curl)
-       ("jsoncpp" ,jsoncpp)
-       ,@(alist-delete "curl" (package-inputs cmake-bootstrap))))
+     (modify-inputs (package-inputs cmake-bootstrap)
+       (prepend jsoncpp)))
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags
@@ -311,7 +306,16 @@ and workspaces that can be used in the compiler environment of your choice.")
        #:build-type "Release"
        #:phases
        (modify-phases %standard-phases
-         ,@%common-build-phases
+         ,@(%common-build-phases)
+         (add-after 'install 'delete-help-documentation
+           (lambda* (#:key outputs #:allow-other-keys)
+             (delete-file-recursively
+               (string-append (assoc-ref outputs "out")
+                              "/share/cmake-"
+                              ,(version-major+minor
+                                 (package-version cmake-bootstrap))
+                              "/Help"))
+             #t))
          (replace 'check
            (lambda* (#:key tests? parallel-tests? #:allow-other-keys)
              (let ((skipped-tests (list ,@%common-disabled-tests
@@ -335,39 +339,6 @@ and workspaces that can be used in the compiler environment of your choice.")
   (package
     (inherit cmake-minimal)
     (name "cmake")
-    (version "3.21.1")
-    ;; TODO: Move the following source field to the cmake-bootstrap package in
-    ;; the next rebuild cycle.
-    (source (origin
-              (inherit (package-source cmake-bootstrap))
-              (uri (string-append "https://cmake.org/files/v"
-                                  (version-major+minor version)
-                                  "/cmake-" version ".tar.gz"))
-              (sha256
-               (base32
-                "1m7y9j5lafkrfswsg2vkpx2fz6p6fqpp2pcp2dcz5pylf58r3hzs"))
-              (snippet
-               (match (origin-snippet (package-source cmake-bootstrap))
-                 ((_ _ exp ...)
-                  ;; Now we can delete the remaining software bundles.
-                  (append `(begin
-                             (define preserved-files
-                               '(,@%preserved-third-party-files
-                                 ;; TODO: Move this file to the
-                                 ;; %preserved-third-party-files variable in
-                                 ;; the next rebuild cycle.
-                                 "Utilities/cm3p" ;CMake header wrappers
-                                 ;; Use the bundled JsonCpp during bootstrap
-                                 ;; to work around a circular dependency.
-                                 ;; TODO: JsonCpp can be built with Meson
-                                 ;; instead of CMake, but meson-build-system
-                                 ;; currently does not support
-                                 ;; cross-compilation.
-                                 "Utilities/cmjsoncpp"
-                                 ;; LibUV is required to bootstrap the initial
-                                 ;; build system.
-                                 "Utilities/cmlibuv")))
-                          exp))))))
     (arguments
      (substitute-keyword-arguments (package-arguments cmake-minimal)
        ;; Use cmake-minimal this time.
@@ -389,44 +360,7 @@ and workspaces that can be used in the compiler environment of your choice.")
                  ,flags))
        ((#:phases phases)
         `(modify-phases ,phases
-           ;; TODO: Remove this override in the next rebuild cycle and adjust
-           ;; the %common-build-phases variable instead: the
-           ;; Utilities/Release/release_cmake.cmake file no longer exists in
-           ;; version 3.19.0.
-           (replace 'patch-bin-sh
-             (lambda _
-               ;; Replace "/bin/sh" by the right path in... a lot of
-               ;; files.
-               (substitute*
-                   '("Modules/CompilerId/Xcode-3.pbxproj.in"
-                     "Modules/Internal/CPack/CPack.RuntimeScript.in"
-                     "Source/cmGlobalXCodeGenerator.cxx"
-                     "Source/cmLocalUnixMakefileGenerator3.cxx"
-                     "Source/cmExecProgramCommand.cxx"
-                     "Tests/CMakeLists.txt"
-                     "Tests/RunCMake/File_Generate/RunCMakeTest.cmake")
-                 (("/bin/sh") (which "sh")))
-               #t))
-           ;; TODO: Remove this override in the next rebuild cycle and adjust
-           ;; the %common-disabled-tests variable instead.
-           (replace 'check
-             (lambda* (#:key tests? parallel-tests? #:allow-other-keys)
-               (let ((skipped-tests (list ,@%common-disabled-tests
-                                          ;; This test fails for unknown reason.
-                                          "RunCMake.file-GET_RUNTIME_DEPENDENCIES"
-                                          ;; This test fails for unknown reason.
-                                          "ExportImport"
-                                          ;; This test requires the bundled libuv.
-                                          "BootstrapTest")))
-                 (if tests?
-                     (begin
-                       (invoke "ctest" "-j" (if parallel-tests?
-                                                (number->string (parallel-job-count))
-                                                "1")
-                               "--exclude-regex"
-                               (string-append "^(" (string-join skipped-tests "|") ")$")))
-                     (format #t "test suite not run~%"))
-                 #t)))
+           (delete 'delete-help-documentation)
            (add-after 'install 'move-html-doc
              (lambda* (#:key outputs #:allow-other-keys)
                (let ((out (assoc-ref outputs "out"))
@@ -437,8 +371,11 @@ and workspaces that can be used in the compiler environment of your choice.")
                                           "/html")))
                  (copy-recursively (string-append out html)
                                    (string-append doc html))
-                 (delete-file-recursively (string-append out html))
-                 #t)))))))
+                 (delete-file-recursively (string-append out html)))))))))
+    (inputs
+     (modify-inputs (package-inputs cmake-minimal)
+       (prepend ncurses ;required for ccmake
+                )))
     ;; Extra inputs required to build the documentation.
     (native-inputs
      `(,@(package-native-inputs cmake-minimal)
diff --git a/gnu/packages/cobol.scm b/gnu/packages/cobol.scm
index 60af9f6a53..c1699b7e3a 100644
--- a/gnu/packages/cobol.scm
+++ b/gnu/packages/cobol.scm
@@ -68,14 +68,10 @@
                      (base32
                       "1yb1plmv4firfnbb119r2vh1hay221w1ya34nyz0qwsxppfr56hy"))))))
     (inputs
-     `(("bdb" ,bdb)
-       ("gmp" ,gmp)
-       ("json-c" ,json-c)
-       ("libxml2" ,libxml2)
-       ("ncurses" ,ncurses)))
+     (list bdb gmp json-c libxml2 ncurses))
     (build-system gnu-build-system)
     (home-page "https://www.gnu.org/software/gnucobol/")
-    (synopsis "A modern COBOL compiler")
+    (synopsis "Modern COBOL compiler")
     (description "GnuCOBOL is a free, modern COBOL compiler.  GnuCOBOL
 implements a substantial part of the COBOL 85, COBOL 2002 and COBOL 2014
 standards and X/Open COBOL, as well as many extensions included in other
diff --git a/gnu/packages/code.scm b/gnu/packages/code.scm
index 7551b31e85..e96a55e5b0 100644
--- a/gnu/packages/code.scm
+++ b/gnu/packages/code.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2013, 2015, 2018, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013, 2015 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2015, 2018 Ricardo Wurmus <rekado@elephly.net>
-;;; Copyright © 2016, 2017, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2019, 2020, 2021, 2022 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017, 2018 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2017 Andy Wingo <wingo@igalia.com>
@@ -15,6 +15,7 @@
 ;;; Copyright © 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2020 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2021 lu hui <luhuins@163.com>
+;;; Copyright © 2021 Foo Chuan Wei <chuanwei.foo@hotmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -32,6 +33,7 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages code)
+  #:use-module (guix gexp)
   #:use-module (guix packages)
   #:use-module (guix utils)
   #:use-module (guix download)
@@ -67,6 +69,7 @@
   #:use-module (gnu packages serialization)
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages texinfo)
+  #:use-module (gnu packages tls)
   #:use-module (gnu packages web)
   #:use-module (gnu packages xml))
 
@@ -75,18 +78,19 @@
 (define-public cflow
   (package
     (name "cflow")
-    (version "1.6")
+    (version "1.7")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnu/cflow/cflow-"
                                   version ".tar.bz2"))
               (sha256
                (base32
-                "1mzd3yf0dfv8h2av5vsxxlhpk21nw064h91b2kgfrdz92r0pnj1l"))))
+                "11khr78090jjyqa2l26bdz0myjx6b212lz216dhjc7h0z754c4fh"))))
     (build-system gnu-build-system)
 
     ;; Needed to have cflow-mode.el installed.
-    (native-inputs `(("emacs" ,emacs-minimal)))
+    (native-inputs
+     (list emacs-minimal))
     (arguments
      '(#:configure-flags (list (string-append "CPPFLAGS="
                                               "-D" "CFLOW_PREPROC=\\\""
@@ -114,8 +118,7 @@ a major mode for Emacs for examining the flowcharts that it produces.")
                 "0lr0l9kj2w3jilz9h9y4np9pf9i9ccpy6331lanki2fnz4z8ldvd"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("texinfo" ,texinfo)
-       ("autogen" ,autogen)))
+     (list texinfo autogen))
     (home-page "https://www.gnu.org/software/complexity/")
     (synopsis "Analyze complexity of C functions")
     (description
@@ -128,77 +131,78 @@ highlighting your own code that seemed comprehensible when you wrote it.")
 (define-public global                             ; a global variable
   (package
     (name "global")
-    (version "6.6.7")
+    (version "6.6.8")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnu/global/global-"
                                  version ".tar.gz"))
              (sha256
               (base32
-               "0g4aslm2zajq605py11s4rs1wdnzcqhkh7bc2xl5az42adzzg839"))))
+               "1kaphc3gml89p8dpdgh2is8hj46wj05689kxj0bmh5q759rxk4vg"))))
     (build-system gnu-build-system)
-    (inputs
-      `(("bash" ,bash-minimal)                    ; for wrap-program
-        ("coreutils" ,coreutils)
-        ("ctags" ,universal-ctags)
-        ("libltdl" ,libltdl)
-        ("ncurses" ,ncurses)
-        ("python-pygments" ,python-pygments)
-        ("python-wrapper" ,python-wrapper)
-        ("sqlite" ,sqlite)))
     (arguments
-     `(#:configure-flags
-       (list (string-append "--with-ncurses="
-                            (assoc-ref %build-inputs "ncurses"))
-             (string-append "--with-sqlite3="
-                            (assoc-ref %build-inputs "sqlite"))
-             (string-append "--with-universal-ctags="
-                            (assoc-ref %build-inputs "ctags") "/bin/ctags")
-             (string-append "--sysconfdir="
-                            (assoc-ref %outputs "out") "/share/gtags")
-             "--localstatedir=/var"         ; This needs to be a writable location.
-             "--disable-static")
+     (list #:configure-flags
+           #~(list (string-append "--with-ncurses="
+                                  #$(this-package-input "ncurses"))
+                   (string-append "--with-sqlite3="
+                                  #$(this-package-input "sqlite"))
+                   (string-append "--with-universal-ctags="
+                                  #$(this-package-input "universal-ctags")
+                                  "/bin/ctags")
+                   (string-append "--sysconfdir="
+                                  #$output "/share/gtags")
+                   "--localstatedir=/var" ; This needs to be a writable location.
+                   "--disable-static")
 
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-globash
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let* ((echo (string-append
-                           (assoc-ref inputs "coreutils") "/bin/echo")))
-               (substitute* "globash/globash.in"
-                 (("/bin/echo") echo)))))
-         (add-after 'post-install 'install-plugins
-           (lambda _
-             (with-directory-excursion "plugin-factory"
-               (invoke "make" "install"))))
-         (add-before 'install 'dont-install-to-/var
-           (lambda _
-             (substitute* "gozilla/Makefile"
-               (("DESTDIR\\)\\$\\{localstatedir\\}") "TMPDIR)"))))
-         (add-after 'install-plugins 'wrap-program
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (wrap-program
-               (string-append (assoc-ref outputs "out")
-                              "/share/gtags/script/pygments_parser.py")
-               `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH"))))))
-        (add-after 'install 'post-install
-          (lambda* (#:key outputs #:allow-other-keys)
-            ;; Install the plugin files in the right place.
-            (let* ((out  (assoc-ref outputs "out"))
-                   (data (string-append out "/share/gtags"))
-                   (vim  (string-append out "/share/vim/vimfiles/plugin"))
-                   (lisp (string-append out "/share/emacs/site-lisp/"
-                                        ,(package-name this-package) "-"
-                                        ,(package-version this-package))))
-              (mkdir-p lisp)
-              (mkdir-p vim)
-              (rename-file (string-append data "/gtags.el")
-                           (string-append lisp "/gtags.el"))
-              (rename-file (string-append data "/gtags.vim")
-                           (string-append vim "/gtags.vim"))
-              (rename-file (string-append data "/gtags-cscope.vim")
-                           (string-append vim "/gtags-cscope.vim"))
-              #t))))))
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'fix-globash
+                 (lambda* (#:key inputs #:allow-other-keys)
+                   (substitute* "globash/globash.in"
+                     (("/bin/echo")
+                      (search-input-file inputs "bin/echo")))))
+               (add-after 'post-install 'install-plugins
+                 (lambda _
+                   (with-directory-excursion "plugin-factory"
+                     (invoke "make" "install"))))
+               (add-before 'install 'dont-install-to-/var
+                 (lambda _
+                   (substitute* "gozilla/Makefile"
+                     (("DESTDIR\\)\\$\\{localstatedir\\}")
+                      "TMPDIR)"))))
+               (add-after 'install-plugins 'wrap-program
+                 (lambda _
+                   (wrap-program
+                       (string-append #$output
+                                      "/share/gtags/script/pygments_parser.py")
+                     `("GUIX_PYTHONPATH" ":" prefix
+                       (,(getenv "GUIX_PYTHONPATH"))))))
+               (add-after 'install 'post-install
+                 (lambda _
+                   ;; Install the plugin files in the right place.
+                   (let* ((data (string-append #$output "/share/gtags"))
+                          (vim  (string-append #$output
+                                               "/share/vim/vimfiles/plugin"))
+                          (lisp (string-append #$output "/share/emacs/site-lisp/"
+                                               #$(package-name this-package) "-"
+                                               #$(package-version this-package))))
+                     (mkdir-p lisp)
+                     (mkdir-p vim)
+                     (rename-file (string-append data "/gtags.el")
+                                  (string-append lisp "/gtags.el"))
+                     (rename-file (string-append data "/gtags.vim")
+                                  (string-append vim  "/gtags.vim"))
+                     (rename-file (string-append data "/gtags-cscope.vim")
+                                  (string-append vim  "/gtags-cscope.vim"))))))))
+    (inputs
+      (list bash-minimal                ; for wrap-program
+            coreutils
+            universal-ctags
+            libltdl
+            ncurses
+            python-pygments
+            python-wrapper
+            sqlite))
     (home-page "https://www.gnu.org/software/global/")
     (synopsis "Cross-environment source code tag system")
     (description
@@ -254,7 +258,7 @@ around in a large, deeply nested project.")
 
         #:make-flags (list (string-append "PREFIX="
                                           (assoc-ref %outputs "out")))))
-    (inputs `(("perl" ,perl)))
+    (inputs (list perl))
     (home-page "https://dwheeler.com/sloccount/")
     (synopsis "Count physical source lines of code (SLOC)")
     (description
@@ -268,7 +272,7 @@ COCOMO model or user-provided parameters.")
 (define-public cloc
   (package
     (name "cloc")
-    (version "1.90")
+    (version "1.92")
     (source
      (origin
        (method git-fetch)
@@ -277,15 +281,15 @@ COCOMO model or user-provided parameters.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0ic9q6qqw5f1wafp9lpmhr0miasbdb9zr59c0jlymnzffdmnliyc"))))
+        (base32 "1hy1hskiw02b7xaxn2qz0v7znj14l49w1anx20z6rkcps7212l5l"))))
     (build-system gnu-build-system)
     (inputs
-     `(("coreutils" ,coreutils)
-       ("perl" ,perl)
-       ("perl-algorithm-diff" ,perl-algorithm-diff)
-       ("perl-digest-md5" ,perl-digest-md5)
-       ("perl-parallel-forkmanager" ,perl-parallel-forkmanager)
-       ("perl-regexp-common" ,perl-regexp-common)))
+     (list coreutils
+           perl
+           perl-algorithm-diff
+           perl-digest-md5
+           perl-parallel-forkmanager
+           perl-regexp-common))
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (delete 'configure)   ; nothing to configure
@@ -298,15 +302,13 @@ COCOMO model or user-provided parameters.")
                                 (string-append "INSTALL="
                                                (assoc-ref inputs "coreutils")
                                                "/bin/install")
-                                "install")
-                        #t)))
+                                "install"))))
                   (add-after 'install 'wrap-program
                     (lambda* (#:key inputs outputs #:allow-other-keys)
                       (let ((out (assoc-ref outputs "out")))
                         (wrap-program (string-append out "/bin/cloc")
                           `("PERL5LIB" ":" =
-                            ,(string-split (getenv "PERL5LIB") #\:)))
-                        #t))))
+                            ,(string-split (getenv "PERL5LIB") #\:)))))))
        #:out-of-source? #t
        ;; Tests require some other packages.
        #:tests? #f))
@@ -333,12 +335,14 @@ cloc can handle a greater variety of programming languages.")
                (base32
                 "0w1icjqd8hd45rn1y6nbfznk1a6ip54whwbfbhxp7ws2hn3ilqnr"))))
     (build-system gnu-build-system)
+    (arguments
+     ;; Required since GCC 10, see:
+     ;; https://gcc.gnu.org/gcc-10/porting_to.html.
+     `(#:configure-flags (list "CFLAGS=-fcommon")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("pcre" ,pcre)
-       ("xz" ,xz)
-       ("zlib" ,zlib)))
+     (list pcre xz zlib))
     (home-page "https://geoff.greer.fm/ag/")
     (synopsis "Fast code searching tool")
     (description
@@ -420,16 +424,9 @@ features that are not supported by the standard @code{stdio} implementation.")
                       (substitute* "Tmain/utils.sh"
                         (("/bin/echo") (which "echo"))))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("packcc" ,packcc)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake packcc perl pkg-config))
     (inputs
-     `(("jansson" ,jansson)
-       ("libseccomp" ,libseccomp)
-       ("libxml2" ,libxml2)
-       ("libyaml" ,libyaml)))
+     (list jansson libseccomp libxml2 libyaml))
     (home-page "https://ctags.io/")
     (synopsis "Generate tag files for source code")
     (description
@@ -485,9 +482,8 @@ expressions, and its ability to generate emacs-style TAGS files.")
             #t)))))
     (home-page "https://github.com/cameronwhite/withershins")
     (inputs
-     `(("libiberty" ,libiberty)
-       ("binutils" ,binutils) ;for libbfd
-       ("zlib" ,zlib)))
+     (list libiberty binutils ;for libbfd
+           zlib))
     (synopsis "C++11 library for generating stack traces")
     (description
      "Withershins is a simple cross-platform C++11 library for generating
@@ -532,9 +528,7 @@ stack traces.")
                (wrap-program (string-append out "/bin/geninfo")
                  `("PERL5LIB" ":" prefix (,(getenv "PERL5LIB")))))
              #t)))))
-    (inputs `(("perl" ,perl)
-              ("perl-io-compress" ,perl-io-compress)
-              ("perl-json" ,perl-json)))
+    (inputs (list perl perl-io-compress perl-json))
     (home-page "http://ltp.sourceforge.net/coverage/lcov.php")
     (synopsis "Code coverage tool that enhances GNU gcov")
     (description "LCOV is an extension of @command{gcov}, a tool part of the
@@ -570,39 +564,36 @@ results and determine build stability.")
 (define-public kcov
   (package
     (name "kcov")
-    (version "38")
+    (version "40")
     (source (origin
               (method git-fetch)
               (uri (git-reference
                     (url "https://github.com/SimonKagstrom/kcov")
-                    (commit version)))
+                    (commit (string-append "v" version))))
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0zqg21xwivi16csl6a5wby6679ny01bjaw4am3y4qcgjdyihifp8"))))
+                "0zayhmx6s377bxmkmvl9d9vjzfbpvh1k9ba6np4zdjvjjq327xag"))))
     (build-system cmake-build-system)
     (arguments
-     `(#:tests? #f ;no test target
+     `(#:tests? #f                      ; no test target
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'fix-/bin/bash-references
-           (lambda _
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((bash (assoc-ref inputs "bash")))
              (substitute* (find-files "src" ".*\\.cc?$")
-               (("/bin/bash") (which "bash"))
-               (("/bin/sh") (which "sh")))
-             #t)))))
+               (("/bin/(bash|sh)" shell)
+                (string-append (assoc-ref inputs "bash") shell)))))))))
     (inputs
-     `(("curl" ,curl)
-       ("elfutils" ,elfutils)
-       ("libelf" ,libelf)
-       ("zlib" ,zlib)))
+     (list curl elfutils libelf openssl zlib))
     (native-inputs
-     `(("python" ,python)))
+     (list python))
     (home-page "https://github.com/SimonKagstrom/kcov")
     (synopsis "Code coverage tester for compiled languages, Python and Bash")
-    (description "Kcov is a FreeBSD/Linux/OSX code coverage tester for compiled
-languages, Python and Bash.  Kcov was originally a fork of Bcov, but has since
-evolved to support a large feature set in addition to that of Bcov.
+    (description "Kcov is a code coverage tester for compiled languages,
+Python and Bash.  It was originally a fork of Bcov, but has since evolved to
+support a large feature set in addition to that of Bcov.
 
 Kcov uses DWARF debugging information for compiled programs to make it
 possible to collect coverage information without special compiler switches.")
@@ -642,14 +633,14 @@ possible to collect coverage information without special compiler switches.")
          "-DBUILD_TESTING=FALSE")
        #:tests? #f))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("bash-completion" ,bash-completion)
-       ("clang" ,clang)
-       ("llvm" ,llvm)
-       ("lua" ,lua)
-       ("rct" ,rct)
-       ("selene" ,selene)))
+     (list bash-completion
+           clang
+           llvm
+           lua
+           rct
+           selene))
     (home-page "https://github.com/Andersbakken/rtags")
     (synopsis "Indexer for the C language family with Emacs integration")
     (description
@@ -675,8 +666,7 @@ importantly we give you proper follow-symbol and find-references support.")
         (base32 "1f9v5s0viq4yc9iv6701h3pv7j21zz1ckl37lpp9hsnliiizv03p"))))
     (build-system trivial-build-system)
     (native-inputs
-     `(("bash" ,bash)
-       ("perl" ,perl)))
+     (list bash perl))
     (arguments
      `(#:modules ((guix build utils))
        #:builder
@@ -697,7 +687,7 @@ importantly we give you proper follow-symbol and find-references support.")
            (substitute* "colormake"
              (("colormake\\.pl") (string-append bin "/colormake.pl"))
              (("/bin/bash")
-              (string-append (assoc-ref %build-inputs "bash") "/bin/sh")))
+              (search-input-file %build-inputs "/bin/sh")))
            (install-file "colormake.1" (string-append doc "/man/man1"))
            (install-files '("AUTHORS" "BUGS" "ChangeLog" "README") doc)
            (install-files '("colormake" "colormake-short" "clmake"
@@ -731,7 +721,7 @@ produce colored output.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
-     `(("graphviz" ,graphviz)))
+     (list graphviz))
     (home-page "https://github.com/lindenb/makefile2graph")
     (synopsis "Creates a graph of dependencies from GNU Make")
     (description
@@ -743,7 +733,7 @@ independent targets.")
 (define-public uncrustify
   (package
     (name "uncrustify")
-    (version "0.69.0")
+    (version "0.74.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -752,11 +742,10 @@ independent targets.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0sqrg13kp8fwymq40976bq380bzw40g4ss7ihlbq45d0f90ifa1k"))))
+                "0v48vhmzxjzysbf0vhxzayl2pkassvbabvwg84xd6b8n5i74ijxd"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("unzip" ,unzip)
-       ("python" ,python-wrapper)))
+     `(("python" ,python-wrapper)))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -879,8 +868,7 @@ the C, C++, C++/CLI, Objective‑C, C#, and Java programming languages.")
                         '("config.sub" "config.guess")))
             #t)))))
    (native-inputs
-    `(("texinfo" ,texinfo)
-      ("automake" ,automake))) ; For up to date 'config.guess' and 'config.sub'.
+    (list texinfo automake)) ; For up to date 'config.guess' and 'config.sub'.
    (synopsis "Code reformatter")
    (description
     "Indent is a program that makes source code easier to read by
@@ -936,3 +924,32 @@ extensions over the standard utility.")
       (description "amalgamate.py aims to make it easy to use SQLite-style C
 source and header amalgamation in projects.")
       (license license:bsd-3))))
+
+(define-public cscope
+  (package
+    (name "cscope")
+    (version "15.9")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://sourceforge/cscope/cscope/"
+                           "v" version "/cscope-" version ".tar.gz"))
+       (sha256
+        (base32 "0ngiv4aj3rr35k3q3wjx0y19gh7i1ydqa0cqip6sjwd8fph5ll65"))))
+    (build-system gnu-build-system)
+    (inputs (list ncurses))
+    (arguments
+     `(#:configure-flags
+       ;; Specify the correct ncurses directory to prevent incorrect fallback
+       ;; on SysV curses.
+       (list (string-append "--with-ncurses="
+                            (assoc-ref %build-inputs "ncurses")))))
+    (home-page "http://cscope.sourceforge.net")
+    (synopsis "Tool for browsing source code")
+    (description
+     "Cscope is a text screen based source browsing tool. Although it is
+primarily designed to search C code (including lex and yacc files), it can
+also be used for C++ code.
+
+Using cscope, you can easily search for where symbols are used and defined.")
+    (license license:bsd-3)))
diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm
index e7bd6cf002..26769d2626 100644
--- a/gnu/packages/commencement.scm
+++ b/gnu/packages/commencement.scm
@@ -1,15 +1,17 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012-2022 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org>
 ;;; Copyright © 2014, 2015, 2017 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2017, 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2017, 2018, 2019, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018, 2019, 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
-;;; Copyright © 2019, 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2019, 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2020 Timothy Sample <samplet@ngyro.com>
 ;;; Copyright © 2020 Guy Fleury Iteriteka <gfleury@disroot.org>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Chris Marusich <cmmarusich@gmail.com>
+;;; Copyright © 2021 Julien Lepiller <julien@lepiller.eu>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -49,12 +51,13 @@
   #:use-module (gnu packages shells)
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages pkg-config)
-  #:use-module (gnu packages rsync)
   #:use-module (gnu packages xml)
+  #:use-module (guix gexp)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system trivial)
+  #:use-module (guix gexp)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix memoization)
   #:use-module (guix utils)
@@ -116,8 +119,7 @@
                       (guile-dir (assoc-ref inputs "guile"))
                       (guile (string-append guile-dir "/bin/guile")))
                  (invoke guile "--no-auto-compile" source)
-                 (chdir "bootar")
-                 #t)))
+                 (chdir "bootar"))))
            (replace 'configure (bootstrap-configure ,version "." "scripts"))
            (replace 'build (bootstrap-build "."))
            (replace 'install (bootstrap-install "." "scripts"))))))
@@ -163,8 +165,7 @@ pure Scheme to Tar and decompression in one easy step.")
                  (symlink (string-append out "/bin/gash")
                           (string-append out "/bin/sh"))
                  (symlink (string-append out "/bin/gash")
-                          (string-append out "/bin/bash"))
-                 #t)))))))
+                          (string-append out "/bin/bash")))))))))
     (inputs `(("guile" ,%bootstrap-guile)))
     (native-inputs `(("bootar" ,bootar)))))
 
@@ -190,8 +191,7 @@ pure Scheme to Tar and decompression in one easy step.")
              (lambda* (#:key inputs #:allow-other-keys)
                (let ((gash (assoc-ref inputs "gash")))
                  (add-to-load-path (string-append gash "/share/guile/site/"
-                                                  (effective-version))))
-               #t))
+                                                  (effective-version))))))
            (add-before 'configure 'pre-configure
              (lambda _
                (format #t "Creating gash/commands/testb.scm~%")
@@ -217,8 +217,7 @@ pure Scheme to Tar and decompression in one easy step.")
                (copy-file "scripts/template.in" "scripts/[.in")
                (substitute* "scripts/[.in"
                  (("@UTILITY@") "testb"))
-               (delete-file "scripts/template.in")
-               #t))
+               (delete-file "scripts/template.in")))
            (replace 'configure
              (bootstrap-configure ,(package-version gash-utils)
                                   "gash" "scripts"))
@@ -247,8 +246,7 @@ pure Scheme to Tar and decompression in one easy step.")
                  (copy-file (string-append gash-godir "/gash/compat.go")
                             (string-append godir "/gash/compat.go"))
                  (copy-recursively (string-append gash-godir "/gash/compat")
-                                   (string-append godir "/gash/compat"))
-                 #t)))))))
+                                   (string-append godir "/gash/compat")))))))))
     (inputs `(("gash" ,gash-boot)
               ("guile" ,%bootstrap-guile)))
     (native-inputs `(("bootar" ,bootar)))))
@@ -438,8 +436,7 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
                                         (string-suffix? ".s" name))))))
                (for-each (lambda (x) (install-file x cache))
                          (append (objects-in-dir ".")
-                                 (objects-in-dir "mescc-lib"))))
-             #t)))))
+                                 (objects-in-dir "mescc-lib")))))))))
     (native-search-paths
      (list (search-path-specification
             (variable "C_INCLUDE_PATH")
@@ -573,8 +570,7 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
          (add-after 'unpack 'scripted-patch
            (lambda _
              (substitute* "util.c"
-               (("^char [*]strlwr" all) (string-append all "_tcc_cannot_handle_dupe")))
-             #t))
+               (("^char [*]strlwr" all) (string-append all "_tcc_cannot_handle_dupe")))))
          (replace 'build
            (lambda _
              (let ((files '("bits" "crypt" "deflate" "getopt" "gzip"
@@ -636,13 +632,11 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
            (lambda _
              (substitute* "build.sh.in"
                (("@LIBOBJS@") "getloadavg.o")
-               (("@REMOTE@") "stub"))
-             #t))
+               (("@REMOTE@") "stub"))))
          (add-after 'configure 'configure-fixup
            (lambda _
              (substitute* "make.h"
-               (("^extern long int lseek.*" all) (string-append "// " all)))
-             #t))
+               (("^extern long int lseek.*" all) (string-append "// " all)))))
          (replace 'build
            (lambda _
              (invoke "sh" "./build.sh")))
@@ -694,16 +688,14 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
                (("uTimBuf[.]" all)
                 (string-append "// " all))
                (("retVal = utime [(] dstName, &uTimBuf [)];" all)
-                (string-append "retVal = 0; // " all)))
-             #t))
+                (string-append "retVal = 0; // " all)))))
          (replace 'configure
            (lambda _
              (with-output-to-file "utime.h"
                (lambda _ (display "
 #define fchown(filedes, owner, group) 0
 #define fchmod(filedes, mode) 0
-")))
-             #t))
+")))))
          (replace 'check
            (lambda _
              (invoke "./bzip2" "--help")))
@@ -759,8 +751,7 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
                (setenv "CC" "tcc")
                (setenv "LD" "tcc")
                (setenv "AR" "tcc -ar")
-               (setenv "CFLAGS" "-D _POSIX_VERSION=1")
-               #t)))
+               (setenv "CFLAGS" "-D _POSIX_VERSION=1"))))
          (add-after 'unpack 'scripted-patch
            (lambda _
              (substitute* "Makefile.in"
@@ -773,8 +764,7 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
              (substitute* "lib/sh/snprintf.c"
                (("^#if (defined [(]HAVE_LOCALE_H[)])" all define) (string-append "#if 0 //" define)))
              (substitute* "configure"
-               ((" egrep") " grep"))
-             #t))
+               ((" egrep") " grep"))))
          (replace 'configure
            (lambda* (#:key configure-flags #:allow-other-keys)
              (let ((configure-flags (filter (lambda (x)
@@ -789,20 +779,16 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
              (substitute* "config.h"
                (("#define GETCWD_BROKEN 1") "#undef GETCWD_BROKEN"))
              (let ((config.h (open-file "config.h" "a")))
-               (display (string-append
-                         ;; XXX TODO: remove nested ,(string-append ...) and
-                         ;; store file name on next rebuild cycle
-                         ,(string-append "
+               (display "
 // tcc: error: undefined symbol 'enable_hostname_completion'
 #define enable_hostname_completion(on_or_off) 0
 
-// /gnu/store/" "cq0cmv35s9dhilx14zaghlc08gpc0hwr-tcc-boot0-0.9.26-6.c004e9a/lib/libc.a: error: 'sigprocmask' defined twice
+// /gnu/store/…-tcc-boot0-0.9.26-6.c004e9a/lib/libc.a: error: 'sigprocmask' defined twice
 #define HAVE_POSIX_SIGNALS 1
 #define endpwent(x) 0
-"))
+"
                         config.h)
-               (close config.h))
-             #t))
+               (close config.h))))
          (replace 'check
            (lambda _
              (invoke "./bash" "--version")))
@@ -812,8 +798,7 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
                     (bin (string-append out "/bin")))
                (mkdir-p bin)
                (copy-file "bash" (string-append bin "/bash"))
-               (copy-file "bash" (string-append bin "/sh"))
-               #t))))))))
+               (copy-file "bash" (string-append bin "/sh"))))))))))
 
 (define tcc-boot
   ;; The final tcc.
@@ -821,16 +806,11 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
     (inherit tcc-boot0)
     (name "tcc-boot")
     (version "0.9.27")
-    (source (origin
-              (inherit (package-source tcc))
-              ;; `patches' needs XZ
-              ;; (patches (search-patches "tcc-boot-0.9.27.patch"))
-              ))
+    (source (package-source tcc))
     (build-system gnu-build-system)
     (inputs '())
     (propagated-inputs '())
-    (native-inputs `(;;("boot-patch" ,(search-patch "tcc-boot-0.9.27.patch"))
-                     ("bzip2" ,bzip2-mesboot)
+    (native-inputs `(("bzip2" ,bzip2-mesboot)
                      ,@(%boot-tcc0-inputs)))
     (arguments
      `(#:implicit-inputs? #f
@@ -846,20 +826,13 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
              (copy-file source "tarball.tar.bz2")
              (invoke "bzip2" "-d" "tarball.tar.bz2")
              (invoke "tar" "xvf" "tarball.tar")
-             (chdir (string-append "tcc-" ,version))
-             #t))
-         ;; no patch yet
-         ;; (add-after 'unpack 'apply-boot-patch
-         ;;   (lambda* (#:key inputs #:allow-other-keys)
-         ;;     (let ((patch-file (assoc-ref inputs "boot-patch")))
-         ;;       (invoke "patch" "-p1" "-i" patch-file))))
+             (chdir (string-append "tcc-" ,version))))
          (add-after 'unpack 'scripted-patch
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "libtcc.c"
                (("s->alacarte_link = 1;" all)
                 (string-append all "
-    s->static_link = 1;")))
-             #t))
+    s->static_link = 1;")))))
          (replace 'configure
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref %outputs "out"))
@@ -919,57 +892,8 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
                 (invoke "tcc" "-ar" "rc" "libtcc1.a" "libtcc1.o")
                 (copy-file "libtcc1.a" (string-append out "/lib/libtcc1.a"))
                 (delete-file (string-append out "/lib/tcc/libtcc1.a"))
-                (copy-file "libtcc1.a" (string-append out "/lib/tcc/libtcc1.a"))
-                #t)))))))))
-
-(define diffutils-mesboot
-  ;; The initial diffutils.
-  (package
-    (inherit diffutils)
-    (name "diffutils-mesboot")
-    (version "2.7")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "mirror://gnu/diffutils/diffutils-"
-                                  version ".tar.gz"))
-              (sha256
-               (base32
-                "1mirn5i825bn5w7rh6mgn0r8aj9xqanav95dwcl1b8sn82f4iwnm"))))
-    (supported-systems '("i686-linux" "x86_64-linux"))
-    (inputs '())
-    (propagated-inputs '())
-    (native-inputs (%boot-tcc0-inputs))
-    (arguments
-     `(#:implicit-inputs? #f
-       #:guile ,%bootstrap-guile
-       #:parallel-build? #f
-       #:tests? #f            ; check is naive, also checks non-built PROGRAMS
-       #:strip-binaries? #f   ; no strip yet
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'remove-diff3-sdiff
-           (lambda* (#:key outputs #:allow-other-keys)
-             (substitute* "Makefile.in"
-               (("PROGRAMS = .*" all) "PROGRAMS = cmp diff"))))
-         (replace 'configure           ; needs classic invocation of configure
-           (lambda* (#:key configure-flags #:allow-other-keys)
-             (let* ((out (assoc-ref %outputs "out"))
-                    (bash (assoc-ref %build-inputs "bash"))
-                    (shell (string-append bash "/bin/bash")))
-               (setenv "CONFIG_SHELL" shell)
-               (setenv "CC" "tcc")
-               (setenv "LD" "tcc")
-               (format (current-error-port)
-                       "running ./configure ~a\n" (string-join configure-flags))
-               (apply invoke (cons "./configure" configure-flags)))))
-         (replace 'install
-           (lambda _
-             (let* ((out (assoc-ref %outputs "out"))
-                    (bin (string-append out "/bin")))
-               (mkdir-p bin)
-               (install-file "cmp" bin)
-               (install-file "diff" bin)
-               #t))))))))
+                (copy-file "libtcc1.a"
+                           (string-append out "/lib/tcc/libtcc1.a")))))))))))
 
 (define patch-mesboot
   ;; The initial patch.
@@ -1002,8 +926,7 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
              ;; avoid another segfault
              (substitute* "pch.c"
                (("while [(]p_end >= 0[)]" all)
-                "p_end = -1;\nwhile (0)"))
-             #t))
+                "p_end = -1;\nwhile (0)"))))
          ;; FIXME: no compressing gzip yet
          (delete 'compress-documentation))))))
 
@@ -1039,8 +962,7 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
                     (bash (assoc-ref %build-inputs "bash"))
                     (shell (string-append bash "/bin/bash")))
                (substitute* "configure"
-                 (("/bin/sh") shell))
-               #t)))
+                 (("/bin/sh") shell)))))
          (replace 'check
            (lambda _
              (invoke "./sed" "--version")))
@@ -1048,16 +970,16 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
            (lambda _
              (let* ((out (assoc-ref %outputs "out"))
                     (bin (string-append out "/bin")))
-               (install-file "sed" bin)
-               #t))))))))
+               (install-file "sed" bin)))))))))
 
 (define (%boot-tcc-inputs)
   `(("bash" ,bash-mesboot0)
     ("bzip2" ,bzip2-mesboot)
-    ("diffutils" ,diffutils-mesboot)
     ("gzip" ,gzip-mesboot)
     ("patch" ,patch-mesboot)
     ("sed" ,sed-mesboot0)
+    ;; Place lower than sed so we don't override it.
+    ("gash-utils" ,gash-utils-boot)
     ("tcc" ,tcc-boot)
     ,@(alist-delete "tcc" (%boot-tcc0-inputs))))
 
@@ -1105,14 +1027,12 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
                (setenv "SHELL" shell)
                (setenv "AR" "tcc -ar")
                (setenv "RANLIB" "true")
-               (setenv "CC" "tcc -D __GLIBC_MINOR__=6")
-               #t)))
+               (setenv "CC" "tcc -D __GLIBC_MINOR__=6"))))
          (add-after 'unpack 'scripted-patch
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "bfd/configure"
                (("^sed -e '/SRC-POTFILES.*" all)
-                "echo -e 'all:\\n\\ttrue\\n\\ninstall:\\n\\ttrue\\n' > po/Makefile\n"))
-             #t))
+                "echo -e 'all:\\n\\ttrue\\n\\ninstall:\\n\\ttrue\\n' > po/Makefile\n"))))
          (replace 'configure           ; needs classic invocation of configure
            (lambda* (#:key configure-flags #:allow-other-keys)
              (format (current-error-port)
@@ -1145,96 +1065,95 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
     (supported-systems '("i686-linux" "x86_64-linux"))
     (inputs '())
     (propagated-inputs '())
-    (native-inputs `(("boot-patch" ,(search-patch "gcc-boot-2.95.3.patch"))
-                     ("binutils" ,binutils-mesboot0)
+    (native-inputs `(("binutils" ,binutils-mesboot0)
                      ,@(%boot-tcc-inputs)))
     (outputs '("out"))
     (arguments
-     `(#:implicit-inputs? #f
-       #:guile ,%bootstrap-guile
-       #:tests? #f
-       #:parallel-build? #f
-       #:strip-binaries? #f
-       #:configure-flags
-       (let ((out (assoc-ref %outputs "out")))
-         `("--enable-static"
-           "--disable-shared"
-           "--disable-werror"
-           "--build=i686-unknown-linux-gnu"
-           "--host=i686-unknown-linux-gnu"
-           ,(string-append "--prefix=" out)))
-       #:make-flags
-       `("CC=tcc -static -D __GLIBC_MINOR__=6"
-         "OLDCC=tcc -static -D __GLIBC_MINOR__=6"
-         "CC_FOR_BUILD=tcc -static -D __GLIBC_MINOR__=6"
-         "AR=ar"
-         "RANLIB=ranlib"
-         ,(string-append "LIBGCC2_INCLUDES=-I "
-                         (assoc-ref %build-inputs "tcc")
-                         "/include")
-         "LANGUAGES=c"
-         ,(string-append "BOOT_LDFLAGS="
-                         " -B" (assoc-ref %build-inputs "tcc")
-                         "/lib/"))
-       #:modules ((guix build gnu-build-system)
-                  (guix build utils)
-                  (srfi srfi-1))
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'apply-boot-patch
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let ((patch-file (assoc-ref inputs "boot-patch")))
-               (system* "patch" "--force" "-p1" "-i" patch-file)
-               #t)))
-         (add-before 'configure 'setenv
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (bash (assoc-ref %build-inputs "bash"))
-                    (shell (string-append bash "/bin/bash"))
-                    (tcc (assoc-ref %build-inputs "tcc"))
-                    (cppflags " -D __GLIBC_MINOR__=6"))
-               (setenv "CONFIG_SHELL" shell)
-               (setenv "CPPFLAGS" cppflags)
-               (setenv "CC" (string-append "tcc" cppflags))
-               (setenv "CC_FOR_BUILD" (string-append "tcc" cppflags))
-               (setenv "CPP" (string-append "tcc -E" cppflags))
-               (with-output-to-file "config.cache"
-                 (lambda _
-                   (display "
+     (list #:implicit-inputs? #f
+           #:guile %bootstrap-guile
+           #:tests? #f
+           #:parallel-build? #f
+           #:strip-binaries? #f
+           #:configure-flags
+           #~(let ((out (assoc-ref %outputs "out")))
+               `("--enable-static"
+                 "--disable-shared"
+                 "--disable-werror"
+                 "--build=i686-unknown-linux-gnu"
+                 "--host=i686-unknown-linux-gnu"
+                 ,(string-append "--prefix=" out)))
+           #:make-flags
+           #~`("CC=tcc -static -D __GLIBC_MINOR__=6"
+               "OLDCC=tcc -static -D __GLIBC_MINOR__=6"
+               "CC_FOR_BUILD=tcc -static -D __GLIBC_MINOR__=6"
+               "AR=ar"
+               "RANLIB=ranlib"
+               ,(string-append "LIBGCC2_INCLUDES=-I "
+                               (assoc-ref %build-inputs "tcc")
+                               "/include")
+               "LANGUAGES=c"
+               ,(string-append "BOOT_LDFLAGS="
+                               " -B" (assoc-ref %build-inputs "tcc")
+                               "/lib/"))
+           #:modules '((guix build gnu-build-system)
+                       (guix build utils)
+                       (srfi srfi-1))
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'apply-boot-patch
+                 (lambda* (#:key inputs #:allow-other-keys)
+                   (let ((patch-file
+                          #$(local-file
+                             (search-patch "gcc-boot-2.95.3.patch"))))
+                     (invoke "patch" "--force" "-p1" "-i" patch-file))))
+               (add-before 'configure 'setenv
+                 (lambda* (#:key outputs #:allow-other-keys)
+                   (let* ((out (assoc-ref outputs "out"))
+                          (bash (assoc-ref %build-inputs "bash"))
+                          (shell (string-append bash "/bin/bash"))
+                          (tcc (assoc-ref %build-inputs "tcc"))
+                          (cppflags " -D __GLIBC_MINOR__=6"))
+                     (setenv "CONFIG_SHELL" shell)
+                     (setenv "CPPFLAGS" cppflags)
+                     (setenv "CC" (string-append "tcc" cppflags))
+                     (setenv "CC_FOR_BUILD" (string-append "tcc" cppflags))
+                     (setenv "CPP" (string-append "tcc -E" cppflags))
+                     (with-output-to-file "config.cache"
+                       (lambda _
+                         (display "
 ac_cv_c_float_format='IEEE (little-endian)'
 "))))))
-         ;; gcc-2.95.3
-         (replace 'configure           ; needs classic invocation of configure
-           (lambda* (#:key configure-flags  #:allow-other-keys)
-             (format (current-error-port)
-                     "running ./configure ~a\n" (string-join configure-flags))
-             (apply invoke "./configure" configure-flags)))
-         (add-after 'configure 'remove-info
-           (lambda _
-             ;; no info at this stage
-             (delete-file-recursively "texinfo")
-             (invoke "touch" "gcc/cpp.info" "gcc/gcc.info")))
-         (add-after 'install 'install2
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((tcc (assoc-ref %build-inputs "tcc"))
-                    (tcc-lib (string-append tcc "/lib/x86-mes-gcc"))
-                    (out (assoc-ref outputs "out"))
-                    (gcc-dir (string-append
-                              out "/lib/gcc-lib/i686-unknown-linux-gnu/2.95.3")))
-               (mkdir-p "tmp")
-               (with-directory-excursion "tmp"
-                 (invoke "ar" "x" (string-append "../gcc/libgcc2.a"))
-                 (invoke "ar" "x" (string-append tcc "/lib/libtcc1.a"))
-                 (apply invoke "ar" "r" (string-append gcc-dir "/libgcc.a")
-                        (find-files "." "\\.o")))
-               (copy-file "gcc/libgcc2.a" (string-append out "/lib/libgcc2.a"))
-               (copy-file (string-append tcc "/lib/libtcc1.a")
-                          (string-append out "/lib/libtcc1.a"))
-               (invoke "ar" "x" (string-append tcc "/lib/libtcc1.a"))
-               (invoke "ar" "x" (string-append tcc "/lib/libc.a"))
-               (invoke "ar" "r" (string-append gcc-dir "/libc.a")
-                       "libc.o" "libtcc1.o")
-               #t))))))
+               ;; gcc-2.95.3
+               (replace 'configure           ; needs classic invocation of configure
+                 (lambda* (#:key configure-flags  #:allow-other-keys)
+                   (format (current-error-port)
+                           "running ./configure ~a\n" (string-join configure-flags))
+                   (apply invoke "./configure" configure-flags)))
+               (add-after 'configure 'remove-info
+                 (lambda _
+                   ;; no info at this stage
+                   (delete-file-recursively "texinfo")
+                   (invoke "touch" "gcc/cpp.info" "gcc/gcc.info")))
+               (add-after 'install 'install2
+                 (lambda* (#:key outputs #:allow-other-keys)
+                   (let* ((tcc (assoc-ref %build-inputs "tcc"))
+                          (tcc-lib (string-append tcc "/lib/x86-mes-gcc"))
+                          (out (assoc-ref outputs "out"))
+                          (gcc-dir (string-append
+                                    out "/lib/gcc-lib/i686-unknown-linux-gnu/2.95.3")))
+                     (mkdir-p "tmp")
+                     (with-directory-excursion "tmp"
+                       (invoke "ar" "x" (string-append "../gcc/libgcc2.a"))
+                       (invoke "ar" "x" (string-append tcc "/lib/libtcc1.a"))
+                       (apply invoke "ar" "r" (string-append gcc-dir "/libgcc.a")
+                              (find-files "." "\\.o")))
+                     (copy-file "gcc/libgcc2.a" (string-append out "/lib/libgcc2.a"))
+                     (copy-file (string-append tcc "/lib/libtcc1.a")
+                                (string-append out "/lib/libtcc1.a"))
+                     (invoke "ar" "x" (string-append tcc "/lib/libtcc1.a"))
+                     (invoke "ar" "x" (string-append tcc "/lib/libc.a"))
+                     (invoke "ar" "r" (string-append gcc-dir "/libc.a")
+                             "libc.o" "libtcc1.o")))))))
     (native-search-paths
      (list (search-path-specification
             (variable "C_INCLUDE_PATH")
@@ -1277,8 +1196,7 @@ ac_cv_c_float_format='IEEE (little-endian)'
                     (headers (assoc-ref %build-inputs "kernel-headers")))
                (mkdir-p include)
                (copy-recursively "include" out)
-               (copy-recursively headers out)
-               #t))))))))
+               (copy-recursively headers out)))))))))
 
 (define gawk-mesboot0
   ;; The initial Gawk.
@@ -1329,8 +1247,7 @@ ac_cv_c_float_format='IEEE (little-endian)'
                (setenv "CPP" "tcc -E")
                (setenv "LD" "tcc")
                (setenv "ac_cv_func_getpgrp_void" "yes")
-               (setenv "ac_cv_func_tzset" "yes"))
-             #t))
+               (setenv "ac_cv_func_tzset" "yes"))))
          (replace 'configure           ; needs classic invocation of configure
            (lambda* (#:key configure-flags #:allow-other-keys)
              (let* ((out (assoc-ref %outputs "out"))
@@ -1345,8 +1262,7 @@ ac_cv_c_float_format='IEEE (little-endian)'
              (let* ((out (assoc-ref outputs "out"))
                     (bin (string-append out "/bin")))
                (install-file "gawk" bin)
-               (symlink "gawk" (string-append bin "/awk"))
-               #t))))))))
+               (symlink "gawk" (string-append bin "/awk"))))))))))
 
 (define glibc-mesboot0
   ;; GNU C Library 2.2.5 is the most recent glibc that we managed to build
@@ -1369,87 +1285,84 @@ ac_cv_c_float_format='IEEE (little-endian)'
     (supported-systems '("i686-linux" "x86_64-linux"))
     (inputs '())
     (propagated-inputs '())
-    (native-inputs `(("boot-patch" ,(search-patch "glibc-boot-2.2.5.patch"))
-                     ("system-patch" ,(search-patch "glibc-bootstrap-system-2.2.5.patch"))
-                     ("headers" ,mesboot-headers)
+    (native-inputs `(("headers" ,mesboot-headers)
                      ,@(%boot-mesboot-core-inputs)))
     (outputs '("out"))
     (arguments
-     `(#:implicit-inputs? #f
-       #:guile ,%bootstrap-guile
-       #:tests? #f
-       #:strip-binaries? #f
-       #:validate-runpath? #f   ; no dynamic executables
-       #:parallel-build? #f     ; gcc-2.95.3 ICEs on massively parallel builds
-       #:make-flags (list (string-append
-                           "SHELL="
-                           (assoc-ref %build-inputs "bash")
-                           "/bin/sh"))
-       #:configure-flags
-       (let ((out (assoc-ref %outputs "out"))
-             (headers (assoc-ref %build-inputs "headers")))
-         `("--disable-shared"
-           "--enable-static"
-           "--disable-sanity-checks"
-           "--build=i686-unknown-linux-gnu"
-           "--host=i686-unknown-linux-gnu"
-           ,(string-append "--with-headers=" headers "/include")
-           "--enable-static-nss"
-           "--without-__thread"
-           "--without-cvs"
-           "--without-gd"
-           "--without-tls"
-           ,(string-append "--prefix=" out)))
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'apply-boot-patch
-           (lambda* (#:key inputs #:allow-other-keys)
-             (and (let ((patch (assoc-ref inputs "boot-patch")))
-                    (invoke "patch" "--force" "-p1" "-i" patch))
-                  (let ((patch (assoc-ref inputs "system-patch")))
-                    (invoke "patch" "--force" "-p1" "-i" patch)))))
-         (add-before 'configure 'setenv
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (bash (assoc-ref %build-inputs "bash"))
-                    (shell (string-append bash "/bin/bash"))
-                    (gcc (assoc-ref %build-inputs "gcc"))
-                    (headers (assoc-ref %build-inputs "headers"))
-                    (cppflags (string-append
-                               ;;" -D __STDC__=1"
-                               " -D MES_BOOTSTRAP=1"
-                               " -D BOOTSTRAP_GLIBC=1"))
-                    (cflags (string-append " -L " (getcwd))))
-               (setenv "CONFIG_SHELL" shell)
-               (setenv "SHELL" shell)
-               (setenv "CPP" (string-append gcc "/bin/gcc -E " cppflags))
-               (setenv "CC" (string-append gcc "/bin/gcc " cppflags cflags))
-               #t)))
-         (replace 'configure           ; needs classic invocation of configure
-           (lambda* (#:key configure-flags #:allow-other-keys)
-             (format (current-error-port)
-                     "running ./configure ~a\n" (string-join configure-flags))
-             (apply invoke "./configure" configure-flags)))
-                  (add-after 'configure 'fixup-configure
-                    (lambda _
-                      (let* ((out (assoc-ref %outputs "out"))
-                             (bash (assoc-ref %build-inputs "bash"))
-                             (shell (string-append bash "/bin/bash")))
-                        (substitute* "config.make"
-                          (("INSTALL = scripts/") "INSTALL = $(..)./scripts/"))
-                        (substitute* "config.make"
-                          (("INSTALL = scripts/") "INSTALL = $(..)./scripts/")
-                          (("BASH = ") (string-append
-                                        "SHELL = " shell "
-         BASH = ")))
-                        #t))))))))
+     (list #:implicit-inputs? #f
+           #:guile %bootstrap-guile
+           #:tests? #f
+           #:strip-binaries? #f
+           #:validate-runpath? #f   ; no dynamic executables
+           #:parallel-build? #f     ; gcc-2.95.3 ICEs on massively parallel builds
+           #:make-flags #~(list (string-append
+                                 "SHELL="
+                                 (assoc-ref %build-inputs "bash")
+                                 "/bin/sh"))
+           #:configure-flags
+           #~(let ((out (assoc-ref %outputs "out"))
+                   (headers (assoc-ref %build-inputs "headers")))
+               `("--disable-shared"
+                 "--enable-static"
+                 "--disable-sanity-checks"
+                 "--build=i686-unknown-linux-gnu"
+                 "--host=i686-unknown-linux-gnu"
+                 ,(string-append "--with-headers=" headers "/include")
+                 "--enable-static-nss"
+                 "--without-__thread"
+                 "--without-cvs"
+                 "--without-gd"
+                 "--without-tls"
+                 ,(string-append "--prefix=" out)))
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'apply-boot-patch
+                 (lambda* (#:key inputs #:allow-other-keys)
+                   (invoke "patch" "--force" "-p1" "-i"
+                           #$(local-file
+                              (search-patch "glibc-boot-2.2.5.patch")))
+                   (invoke "patch" "--force" "-p1" "-i"
+                           #$(local-file
+                              (search-patch "glibc-bootstrap-system-2.2.5.patch")))))
+               (add-before 'configure 'setenv
+                 (lambda* (#:key outputs #:allow-other-keys)
+                   (let* ((out (assoc-ref outputs "out"))
+                          (bash (assoc-ref %build-inputs "bash"))
+                          (shell (string-append bash "/bin/bash"))
+                          (gcc (assoc-ref %build-inputs "gcc"))
+                          (headers (assoc-ref %build-inputs "headers"))
+                          (cppflags (string-append
+                                     ;;" -D __STDC__=1"
+                                     " -D MES_BOOTSTRAP=1"
+                                     " -D BOOTSTRAP_GLIBC=1"))
+                          (cflags (string-append " -L " (getcwd))))
+                     (setenv "CONFIG_SHELL" shell)
+                     (setenv "SHELL" shell)
+                     (setenv "CPP" (string-append gcc "/bin/gcc -E " cppflags))
+                     (setenv "CC" (string-append gcc "/bin/gcc " cppflags cflags)))))
+               (replace 'configure           ; needs classic invocation of configure
+                 (lambda* (#:key configure-flags #:allow-other-keys)
+                   (format (current-error-port)
+                           "running ./configure ~a\n" (string-join configure-flags))
+                   (apply invoke "./configure" configure-flags)))
+               (add-after 'configure 'fixup-configure
+                 (lambda _
+                   (let* ((out (assoc-ref %outputs "out"))
+                          (bash (assoc-ref %build-inputs "bash"))
+                          (shell (string-append bash "/bin/bash")))
+                     (substitute* "config.make"
+                       (("INSTALL = scripts/") "INSTALL = $(..)./scripts/"))
+                     (substitute* "config.make"
+                       (("INSTALL = scripts/") "INSTALL = $(..)./scripts/")
+                       (("BASH = ") (string-append
+                                     "SHELL = " shell "
+         BASH = ")))))))))))
 
 (define gcc-mesboot0
   (package
     (inherit gcc-core-mesboot0)
     (name "gcc-mesboot0")
-    (native-inputs `(("boot-patch" ,(search-patch "gcc-boot-2.95.3.patch"))
-                     ;; Packages are given in an order that's relevant for
+    (native-inputs `(;; Packages are given in an order that's relevant for
                      ;; #include_next purposes.
                      ("libc" ,glibc-mesboot0)
                      ("kernel-headers" ,%bootstrap-linux-libre-headers)
@@ -1457,38 +1370,37 @@ ac_cv_c_float_format='IEEE (little-endian)'
     (arguments
      (substitute-keyword-arguments (package-arguments gcc-core-mesboot0)
        ((#:phases phases)
-        `(modify-phases ,phases
-           (replace 'setenv
-             (lambda _
-               (setenv "CONFIG_SHELL" (which "sh"))
-               (with-output-to-file "config.cache"
-                 (lambda _
-                   (display "
+        #~(modify-phases #$phases
+            (replace 'setenv
+              (lambda _
+                (setenv "CONFIG_SHELL" (which "sh"))
+                (with-output-to-file "config.cache"
+                  (lambda _
+                    (display "
 ac_cv_c_float_format='IEEE (little-endian)'
-")))
-               #t))
-           (replace 'install2
-             (lambda* (#:key outputs #:allow-other-keys)
-               (let* ((out (assoc-ref outputs "out"))
-                      (gcc-dir (string-append
-                                out "/lib/gcc-lib/i686-unknown-linux-gnu/2.95.3")))
-                 (and
-                  (mkdir-p "tmp")
-                  (zero? (system (string-append "set -x; cd tmp && ar x ../gcc/libgcc2.a")))
-                  (zero? (system (string-append "set -x; cd tmp && ar r " gcc-dir "/libgcc.a *.o")))
-                  (copy-file "gcc/libgcc2.a" (string-append out "/lib/libgcc2.a"))))))))
+")))))
+            (replace 'install2
+              (lambda* (#:key outputs #:allow-other-keys)
+                (let* ((out (assoc-ref outputs "out"))
+                       (gcc-dir (string-append
+                                 out "/lib/gcc-lib/i686-unknown-linux-gnu/2.95.3")))
+                  (and
+                   (mkdir-p "tmp")
+                   (zero? (system (string-append "set -x; cd tmp && ar x ../gcc/libgcc2.a")))
+                   (zero? (system (string-append "set -x; cd tmp && ar r " gcc-dir "/libgcc.a *.o")))
+                   (copy-file "gcc/libgcc2.a" (string-append out "/lib/libgcc2.a"))))))))
        ((#:configure-flags configure-flags)
-        `(let ((out (assoc-ref %outputs "out")))
-           `("--disable-shared"
-             "--disable-werror"
-             "--build=i686-unknown-linux-gnu"
-             "--host=i686-unknown-linux-gnu"
-             ,(string-append "--prefix=" out))))
+        #~(let ((out (assoc-ref %outputs "out")))
+            `("--disable-shared"
+              "--disable-werror"
+              "--build=i686-unknown-linux-gnu"
+              "--host=i686-unknown-linux-gnu"
+              ,(string-append "--prefix=" out))))
        ((#:make-flags make-flags)
-        `(let ((gcc (assoc-ref %build-inputs "gcc")))
-           `("RANLIB=true"
-             ,(string-append "LIBGCC2_INCLUDES=-I " gcc "/include")
-             "LANGUAGES=c")))))))
+        #~(let ((gcc (assoc-ref %build-inputs "gcc")))
+            `("RANLIB=true"
+              ,(string-append "LIBGCC2_INCLUDES=-I " gcc "/include")
+              "LANGUAGES=c")))))))
 
 (define (%boot-mesboot0-inputs)
   `(("gcc" ,gcc-mesboot0)
@@ -1543,14 +1455,12 @@ ac_cv_c_float_format='IEEE (little-endian)'
                (substitute* "configure"
                  ((" /bin/sh") shell)))
              (substitute* "Makefile.in"
-               (("^SUBDIRS = doc") "SUBDIRS ="))
-             #t))
+               (("^SUBDIRS = doc") "SUBDIRS ="))))
          (replace 'install
            (lambda _
              (let* ((out (assoc-ref %outputs "out"))
                     (bin (string-append out "/bin")))
-               (install-file "src/tar" bin)
-               #t))))))))
+               (install-file "src/tar" bin)))))))))
 
 (define grep-mesboot
   ;; The initial grep.
@@ -1587,8 +1497,7 @@ ac_cv_c_float_format='IEEE (little-endian)'
                     (bin (string-append out "/bin")))
                (install-file "grep" bin)
                (symlink "grep" (string-append bin "/egrep"))
-               (symlink "grep" (string-append bin "/fgrep"))
-               #t))))))))
+               (symlink "grep" (string-append bin "/fgrep"))))))))))
 
 (define binutils-mesboot1
   (package
@@ -1613,8 +1522,7 @@ ac_cv_c_float_format='IEEE (little-endian)'
                (let* ((out (assoc-ref %outputs "out"))
                       (bash (assoc-ref %build-inputs "bash"))
                       (shell (string-append bash "/bin/bash")))
-                 (setenv "CONFIG_SHELL" shell)
-                 #t)))))))))
+                 (setenv "CONFIG_SHELL" shell))))))))))
 
 (define coreutils-mesboot0
   (package
@@ -1677,8 +1585,7 @@ ac_cv_c_float_format='IEEE (little-endian)'
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
                     (bin (string-append out "/bin")))
-               (install-file "make" bin)
-               #t))))))))
+               (install-file "make" bin)))))))))
 
 (define gawk-mesboot
   (package
@@ -1713,8 +1620,7 @@ ac_cv_c_float_format='IEEE (little-endian)'
              (let* ((out (assoc-ref outputs "out"))
                     (bin (string-append out "/bin")))
                (install-file "gawk" bin)
-               (symlink "gawk" (string-append bin "/awk"))
-               #t))))))))
+               (symlink "gawk" (string-append bin "/awk"))))))))))
 
 (define sed-mesboot
   (package
@@ -1745,8 +1651,7 @@ ac_cv_c_float_format='IEEE (little-endian)'
                     (shell (string-append bash "/bin/bash")))
                (substitute* "testsuite/Makefile.tests"
                  (("^SHELL = /bin/sh")
-                  (string-append "SHELL = " shell)))
-               #t))))))))
+                  (string-append "SHELL = " shell)))))))))))
 
 (define bash-mesboot
   (package
@@ -1789,14 +1694,12 @@ ac_cv_c_float_format='IEEE (little-endian)'
          (add-after 'unpack 'scripted-patch
            (lambda _
              (substitute* "shell.c"
-               ((";;") ";"))
-             #t))
+               ((";;") ";"))))
          (add-before 'configure 'setenv
            (lambda _
              (setenv "AWK" "gawk")
              (setenv "LIBS" "-lc -lnss_files -lnss_dns -lresolv")
-             (setenv "gl_cv_func_rename_dest_works" "yes")
-             #t))
+             (setenv "gl_cv_func_rename_dest_works" "yes")))
          (add-after 'configure 'configure-fixups
            (lambda _
              (let ((config.h (open-file "config.h" "a")))
@@ -1804,8 +1707,7 @@ ac_cv_c_float_format='IEEE (little-endian)'
 #define enable_hostname_completion(on_or_off) 0
 ")
                         config.h)
-               (close config.h))
-             #t))
+               (close config.h))))
          (replace 'check
            (lambda _
              (invoke "./bash" "--version")))
@@ -1815,8 +1717,7 @@ ac_cv_c_float_format='IEEE (little-endian)'
                     (bin (string-append out "/bin")))
                (mkdir-p bin)
                (copy-file "bash" (string-append bin "/bash"))
-               (copy-file "bash" (string-append bin "/sh"))
-               #t))))))))
+               (copy-file "bash" (string-append bin "/sh"))))))))))
 
 (define (%boot-mesboot1-inputs)
   `(("bash" ,bash-mesboot)
@@ -1832,38 +1733,28 @@ ac_cv_c_float_format='IEEE (little-endian)'
               "gawk" "grep" "guile" "make" "sed" "tar"))))
 
 (define gmp-boot
-  (package
-    (inherit gmp)
-    (version "4.3.2")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "mirror://gnu/gmp/gmp-" version
-                                  ".tar.gz"))
-              (sha256 (base32
-                       "15rwq54fi3s11izas6g985y9jklm3xprfsmym3v1g6xr84bavqvv"))))))
+  (let ((version "4.3.2"))
+    (origin
+      (method url-fetch)
+      (uri (string-append "mirror://gnu/gmp/gmp-" version ".tar.gz"))
+      (sha256
+       (base32 "15rwq54fi3s11izas6g985y9jklm3xprfsmym3v1g6xr84bavqvv")))))
 
 (define mpfr-boot
-  (package
-    (inherit mpfr)
-    (version "2.4.2")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "mirror://gnu/mpfr/mpfr-" version
-                                  ".tar.gz"))
-              (sha256 (base32
-                       "0dxn4904dra50xa22hi047lj8kkpr41d6vb9sd4grca880c7wv94"))))))
+  (let ((version "2.4.2"))
+    (origin
+      (method url-fetch)
+      (uri (string-append "mirror://gnu/mpfr/mpfr-" version ".tar.gz"))
+      (sha256
+       (base32 "0dxn4904dra50xa22hi047lj8kkpr41d6vb9sd4grca880c7wv94")))))
 
 (define mpc-boot
-  (package
-    (inherit mpc)
-    (version "1.0.3")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "mirror://gnu/mpc/mpc-" version ".tar.gz"))
-              (sha256
-               (base32
-                "1hzci2zrrd7v3g1jk35qindq05hbl0bhjcyyisq9z209xb3fqzb1"))))))
+  (let ((version "1.0.3"))
+    (origin
+      (method url-fetch)
+      (uri (string-append "mirror://gnu/mpc/mpc-" version ".tar.gz"))
+      (sha256
+       (base32 "1hzci2zrrd7v3g1jk35qindq05hbl0bhjcyyisq9z209xb3fqzb1")))))
 
 (define gcc-core-mesboot1
   ;; GCC 4.6.4 is the latest modular distribution.  This package is not
@@ -1880,114 +1771,112 @@ ac_cv_c_float_format='IEEE (little-endian)'
                                   version "/gcc-core-" version ".tar.gz"))
               (sha256
                (base32
-                "173kdb188qg79pcz073cj9967rs2vzanyjdjyxy9v0xb0p5sad75"))
-              ;; Patch needs XZ
-              ;; (patches (search-patches "gcc-boot-4.6.4.patch"))
-              ))
-    (inputs `(("gmp-source" ,(package-source gmp-boot))
-              ("mpfr-source" ,(package-source mpfr-boot))
-              ("mpc-source" ,(package-source mpc-boot))))
-    (native-inputs `(("boot-patch" ,(search-patch "gcc-boot-4.6.4.patch"))
-                     ,@(%boot-mesboot1-inputs)))
-    (arguments
-     `(#:implicit-inputs? #f
-       #:guile ,%bootstrap-guile
-       #:tests? #f
-       #:modules ((guix build gnu-build-system)
-                  (guix build utils)
-                  (srfi srfi-1))
-       #:parallel-build? #f             ; for debugging
-       #:make-flags
-       (let* ((libc (assoc-ref %build-inputs "libc"))
-              (ldflags (string-append
-                        "-B" libc "/lib "
-                        "-Wl,-dynamic-linker "
-                        "-Wl," libc
-                        ,(glibc-dynamic-linker "i686-linux"))))
-         (list (string-append "LDFLAGS=" ldflags)
-               (string-append "LDFLAGS_FOR_TARGET=" ldflags)))
-       #:configure-flags
-       (let ((out (assoc-ref %outputs "out"))
-             (glibc (assoc-ref %build-inputs "libc")))
-         (list (string-append "--prefix=" out)
-               "--build=i686-unknown-linux-gnu"
-               "--host=i686-unknown-linux-gnu"
-               (string-append "--with-native-system-header-dir=" glibc "/include")
-               (string-append "--with-build-sysroot=" glibc "/include")
-               "--disable-bootstrap"
-               "--disable-decimal-float"
-               "--disable-libatomic"
-               "--disable-libcilkrts"
-               "--disable-libgomp"
-               "--disable-libitm"
-               "--disable-libmudflap"
-               "--disable-libquadmath"
-               "--disable-libsanitizer"
-               "--disable-libssp"
-               "--disable-libvtv"
-               "--disable-lto"
-               "--disable-lto-plugin"
-               "--disable-multilib"
-               "--disable-plugin"
-               "--disable-threads"
-               "--enable-languages=c"
-               "--enable-static"
-               "--disable-shared"
-               "--enable-threads=single"
-               "--disable-libstdcxx-pch"
-               "--disable-build-with-cxx"))
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'apply-boot-patch
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let ((patch-file (assoc-ref inputs "boot-patch")))
-               (format (current-error-port) "patch file=~s\n" patch-file)
-               (system* "patch" "--force" "-p1" "-i" patch-file))
-             #t))
-         ;; c&p from commencement.scm:gcc-boot0
-         (add-after 'unpack 'unpack-gmp&co
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let ((gmp  (assoc-ref %build-inputs "gmp-source"))
-                   (mpfr (assoc-ref %build-inputs "mpfr-source"))
-                   (mpc  (assoc-ref %build-inputs "mpc-source")))
-
-               ;; To reduce the set of pre-built bootstrap inputs, build
-               ;; GMP & co. from GCC.
-               (for-each (lambda (source)
-                           (or (invoke "tar" "xvf" source)
-                               (error "failed to unpack tarball"
-                                      source)))
-                         (list gmp mpfr mpc))
-
-               ;; Create symlinks like `gmp' -> `gmp-x.y.z'.
-               ,@(map (lambda (lib)
-                        ;; Drop trailing letters, as gmp-6.0.0a unpacks
-                        ;; into gmp-6.0.0.
-                        `(symlink ,(string-trim-right
-                                    (package-full-name lib "-")
-                                    char-set:letter)
-                                  ,(package-name lib)))
-                      (list gmp-boot mpfr-boot mpc-boot))
-               #t)))
-         (add-before 'configure 'setenv
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (binutils (assoc-ref %build-inputs "binutils"))
-                    (bash (assoc-ref %build-inputs "bash"))
-                    (gcc (assoc-ref %build-inputs "gcc"))
-                    (glibc (assoc-ref %build-inputs "libc"))
-                    (kernel-headers (assoc-ref %build-inputs "kernel-headers")))
-               (setenv "CONFIG_SHELL" (string-append bash "/bin/sh"))
-               (setenv "C_INCLUDE_PATH" (string-append
-                                         gcc "/lib/gcc-lib/i686-unknown-linux-gnu/2.95.3/include"
-                                         ":" kernel-headers "/include"
-                                         ":" glibc "/include"
-                                         ":" (getcwd) "/mpfr/src"))
-               (setenv "LIBRARY_PATH" (string-append glibc "/lib"
-                                                     ":" gcc "/lib"))
-               (format (current-error-port) "C_INCLUDE_PATH=~a\n" (getenv "C_INCLUDE_PATH"))
-               (format (current-error-port) "LIBRARY_PATH=~a\n" (getenv "LIBRARY_PATH"))
-               #t))))))))
+                "173kdb188qg79pcz073cj9967rs2vzanyjdjyxy9v0xb0p5sad75"))))
+    (inputs `(("gmp-source" ,gmp-boot)
+              ("mpfr-source" ,mpfr-boot)
+              ("mpc-source" ,mpc-boot)))
+    (native-inputs (%boot-mesboot1-inputs))
+    (arguments
+     (list #:implicit-inputs? #f
+           #:guile %bootstrap-guile
+           #:tests? #f
+           #:modules '((guix build gnu-build-system)
+                       (guix build utils)
+                       (srfi srfi-1))
+           #:parallel-build? #f             ; for debugging
+           #:make-flags
+           #~(let* ((libc (assoc-ref %build-inputs "libc"))
+                    (ldflags (string-append
+                              "-B" libc "/lib "
+                              "-Wl,-dynamic-linker "
+                              "-Wl," libc
+                              #$(glibc-dynamic-linker "i686-linux"))))
+               (list (string-append "LDFLAGS=" ldflags)
+                     (string-append "LDFLAGS_FOR_TARGET=" ldflags)))
+           #:configure-flags
+           #~(let ((out (assoc-ref %outputs "out"))
+                   (glibc (assoc-ref %build-inputs "libc")))
+               (list (string-append "--prefix=" out)
+                     "--build=i686-unknown-linux-gnu"
+                     "--host=i686-unknown-linux-gnu"
+                     (string-append "--with-native-system-header-dir=" glibc "/include")
+                     (string-append "--with-build-sysroot=" glibc "/include")
+                     "--disable-bootstrap"
+                     "--disable-decimal-float"
+                     "--disable-libatomic"
+                     "--disable-libcilkrts"
+                     "--disable-libgomp"
+                     "--disable-libitm"
+                     "--disable-libmudflap"
+                     "--disable-libquadmath"
+                     "--disable-libsanitizer"
+                     "--disable-libssp"
+                     "--disable-libvtv"
+                     "--disable-lto"
+                     "--disable-lto-plugin"
+                     "--disable-multilib"
+                     "--disable-plugin"
+                     "--disable-threads"
+                     "--enable-languages=c"
+                     "--enable-static"
+                     "--disable-shared"
+                     "--enable-threads=single"
+                     "--disable-libstdcxx-pch"
+                     "--disable-build-with-cxx"))
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'apply-boot-patch
+                 (lambda* (#:key inputs #:allow-other-keys)
+                   (let ((patch-file
+                          #$(local-file
+                             (search-patch "gcc-boot-4.6.4.patch"))))
+                     (invoke "patch" "--force" "-p1" "-i" patch-file))))
+               ;; c&p from commencement.scm:gcc-boot0
+               (add-after 'unpack 'unpack-gmp&co
+                 (lambda* (#:key inputs #:allow-other-keys)
+                   (let ((gmp  (assoc-ref %build-inputs "gmp-source"))
+                         (mpfr (assoc-ref %build-inputs "mpfr-source"))
+                         (mpc  (assoc-ref %build-inputs "mpc-source")))
+
+                     ;; To reduce the set of pre-built bootstrap inputs, build
+                     ;; GMP & co. from GCC.
+                     (for-each (lambda (source)
+                                 (or (invoke "tar" "xvf" source)
+                                     (error "failed to unpack tarball"
+                                            source)))
+                               (list gmp mpfr mpc))
+
+                     ;; Create symlinks like `gmp' -> `gmp-x.y.z'.
+                     #$@(map (lambda (lib package)
+                               ;; Drop trailing letters, as gmp-6.0.0a unpacks
+                               ;; into gmp-6.0.0.
+                               #~(symlink #$(string-trim-right
+                                             (basename
+                                              (origin-actual-file-name lib)
+                                              ".tar.gz")
+                                             char-set:letter)
+                                          #$package))
+                             (list gmp-boot mpfr-boot mpc-boot)
+                             '("gmp" "mpfr" "mpc")))))
+               (add-before 'configure 'setenv
+                 (lambda* (#:key outputs #:allow-other-keys)
+                   (let* ((out (assoc-ref outputs "out"))
+                          (binutils (assoc-ref %build-inputs "binutils"))
+                          (bash (assoc-ref %build-inputs "bash"))
+                          (gcc (assoc-ref %build-inputs "gcc"))
+                          (glibc (assoc-ref %build-inputs "libc"))
+                          (kernel-headers (assoc-ref %build-inputs "kernel-headers")))
+                     (setenv "CONFIG_SHELL" (string-append bash "/bin/sh"))
+                     (setenv "C_INCLUDE_PATH" (string-append
+                                               gcc "/lib/gcc-lib/i686-unknown-linux-gnu/2.95.3/include"
+                                               ":" kernel-headers "/include"
+                                               ":" glibc "/include"
+                                               ":" (getcwd) "/mpfr/src"))
+                     (setenv "LIBRARY_PATH" (string-append glibc "/lib"
+                                                           ":" gcc "/lib"))
+                     (format (current-error-port) "C_INCLUDE_PATH=~a\n" (getenv "C_INCLUDE_PATH"))
+                     (format (current-error-port) "LIBRARY_PATH=~a\n"
+                             (getenv "LIBRARY_PATH"))))))))))
 
 (define gcc-mesboot1
   (package
@@ -2007,31 +1896,29 @@ ac_cv_c_float_format='IEEE (little-endian)'
     (arguments
      (substitute-keyword-arguments (package-arguments gcc-core-mesboot1)
        ((#:configure-flags configure-flags)
-        `(let ((out (assoc-ref %outputs "out")))
-           `("--enable-languages=c,c++"
-             ,@(filter
-                (negate (lambda (x) (string-prefix? "--enable-languages=" x)))
-                ,configure-flags))))
+        #~(let ((out (assoc-ref %outputs "out")))
+            `("--enable-languages=c,c++"
+              ,@(filter
+                 (negate (lambda (x) (string-prefix? "--enable-languages=" x)))
+                 #$configure-flags))))
        ((#:phases phases)
-        `(modify-phases ,phases
-           (add-before 'unpack 'unpack-g++
-             (lambda _
-               (let ((source-g++ (assoc-ref %build-inputs "gcc-g++")))
-                 (invoke "tar" "xvf" source-g++))
-               #t))
-           (replace 'setenv
-             (lambda _
-               (setenv "CONFIG_SHELL" (which "sh"))
-
-               ;; Allow MPFR headers to be found.
-               (setenv "C_INCLUDE_PATH"
-                       (string-append (getcwd) "/mpfr/src:"
-                                      (getenv "C_INCLUDE_PATH")))
-
-               ;; Set the C++ search path so that C headers can be found as
-               ;; libstdc++ is being compiled.
-               (setenv "CPLUS_INCLUDE_PATH" (getenv "C_INCLUDE_PATH"))
-               #t))))))))
+        #~(modify-phases #$phases
+            (add-before 'unpack 'unpack-g++
+              (lambda _
+                (let ((source-g++ (assoc-ref %build-inputs "gcc-g++")))
+                  (invoke "tar" "xvf" source-g++))))
+            (replace 'setenv
+              (lambda _
+                (setenv "CONFIG_SHELL" (which "sh"))
+
+                ;; Allow MPFR headers to be found.
+                (setenv "C_INCLUDE_PATH"
+                        (string-append (getcwd) "/mpfr/src:"
+                                       (getenv "C_INCLUDE_PATH")))
+
+                ;; Set the C++ search path so that C headers can be found as
+                ;; libstdc++ is being compiled.
+                (setenv "CPLUS_INCLUDE_PATH" (getenv "C_INCLUDE_PATH"))))))))))
 
 (define (%boot-mesboot2-inputs)
   `(("gcc" ,gcc-mesboot1)
@@ -2172,8 +2059,7 @@ ac_cv_c_float_format='IEEE (little-endian)'
              (substitute* "gprof/Makefile.in"
                (("^SUBDIRS = po") "SUBDIRS ="))
              (substitute* "ld/Makefile.in"
-               (("^SUBDIRS = po") "SUBDIRS ="))
-             #t)))))))
+               (("^SUBDIRS = po") "SUBDIRS =")))))))))
 
 (define (%boot-mesboot3-inputs)
   `(("binutils" ,binutils-mesboot)
@@ -2201,92 +2087,89 @@ ac_cv_c_float_format='IEEE (little-endian)'
     (arguments
      (substitute-keyword-arguments (package-arguments glibc-mesboot0)
        ((#:configure-flags configure-flags)
-        `(let ((out (assoc-ref %outputs "out"))
-               (headers (assoc-ref %build-inputs "headers")))
-           (list
-            (string-append "--prefix=" out)
-            "--disable-obsolete-rpc"
-            "--host=i686-unknown-linux-gnu"
-            (string-append "--with-headers=" headers "/include")
-            "--enable-static-nss"
-            "--with-pthread"
-            "--without-cvs"
-            "--without-gd"
-            "--enable-add-ons=nptl"
-            ;; avoid: configure: error: confusing output from nm -u
-            "libc_cv_predef_stack_protector=no")))
+        #~(let ((out (assoc-ref %outputs "out"))
+                (headers (assoc-ref %build-inputs "headers")))
+            (list
+             (string-append "--prefix=" out)
+             "--disable-obsolete-rpc"
+             "--host=i686-unknown-linux-gnu"
+             (string-append "--with-headers=" headers "/include")
+             "--enable-static-nss"
+             "--with-pthread"
+             "--without-cvs"
+             "--without-gd"
+             "--enable-add-ons=nptl"
+             ;; avoid: configure: error: confusing output from nm -u
+             "libc_cv_predef_stack_protector=no")))
        ((#:make-flags make-flags)
-        '(list "install-bootstrap-headers=yes" "install-headers"))
+        #~(list "install-bootstrap-headers=yes" "install-headers"))
        ((#:phases phases)
-        `(modify-phases ,phases
-           (delete 'apply-boot-patch)
-           (delete 'fixup-configure)
-           (delete 'set-path)
-           (replace 'unpack
-             (lambda* (#:key source #:allow-other-keys)
-               (invoke "tar" "xvf" source)
-               (chdir (string-append "glibc-" ,version))
-               #t))
-           (replace 'setenv
-             (lambda* (#:key inputs #:allow-other-keys)
-               (let* ((headers  (assoc-ref inputs "headers"))
-                      (libc     (assoc-ref inputs "libc"))
-                      (gcc      (assoc-ref inputs "gcc"))
-                      (cppflags (string-append
-                                 " -I " (getcwd) "/nptl/sysdeps/pthread/bits"
-                                 " -D BOOTSTRAP_GLIBC=1"))
-                      (cflags (string-append " -L " (getcwd)
-                                             " -L " libc "/lib")))
-                 (setenv "libc_cv_friendly_stddef" "yes")
-                 (setenv "CONFIG_SHELL" (which "sh"))
-                 (setenv "SHELL" (which "sh"))
-
-                 (setenv "CPP" (string-append gcc "/bin/gcc -E " cppflags))
-                 (setenv "CC" (string-append gcc "/bin/gcc " cppflags cflags))
-                 (setenv "LD" "gcc")
-
-                 ;; avoid -fstack-protector
-                 (setenv "libc_cv_ssp" "false")
-                 (substitute* "configure"
-                   (("/bin/pwd") "pwd"))
-                 #t)))
-           (replace 'install
-             (lambda* (#:key outputs make-flags #:allow-other-keys)
-               (let ((kernel-headers (assoc-ref %build-inputs "kernel-headers"))
-                     (out (assoc-ref outputs "out")))
-                 (and (apply invoke "make" make-flags)
-                      (copy-recursively kernel-headers out)
-                      #t))))
-           (replace 'configure
-             (lambda* (#:key configure-flags #:allow-other-keys)
-               (format (current-error-port) "running ../configure ~a\n" (string-join configure-flags))
-               (mkdir-p "build")
-               (chdir "build")
-               (apply invoke "../configure" configure-flags)))
-           (add-after 'configure 'remove-sunrpc
-             (lambda _
-               (let* ((out (assoc-ref %outputs "out"))
-                      (bash (assoc-ref %build-inputs "bash"))
-                      (shell (string-append bash "/bin/bash")))
-
-                 (let ((Makefile (open-file "Makefile" "a")))
-                   (display (string-append "
+        #~(modify-phases #$phases
+            (delete 'apply-boot-patch)
+            (delete 'fixup-configure)
+            (delete 'set-path)
+            (replace 'unpack
+              (lambda* (#:key source #:allow-other-keys)
+                (invoke "tar" "xvf" source)
+                (chdir (string-append "glibc-" #$version))))
+            (replace 'setenv
+              (lambda* (#:key inputs #:allow-other-keys)
+                (let* ((headers  (assoc-ref inputs "headers"))
+                       (libc     (assoc-ref inputs "libc"))
+                       (gcc      (assoc-ref inputs "gcc"))
+                       (cppflags (string-append
+                                  " -I " (getcwd) "/nptl/sysdeps/pthread/bits"
+                                  " -D BOOTSTRAP_GLIBC=1"))
+                       (cflags (string-append " -L " (getcwd)
+                                              " -L " libc "/lib")))
+                  (setenv "libc_cv_friendly_stddef" "yes")
+                  (setenv "CONFIG_SHELL" (which "sh"))
+                  (setenv "SHELL" (which "sh"))
+
+                  (setenv "CPP" (string-append gcc "/bin/gcc -E " cppflags))
+                  (setenv "CC" (string-append gcc "/bin/gcc " cppflags cflags))
+                  (setenv "LD" "gcc")
+
+                  ;; avoid -fstack-protector
+                  (setenv "libc_cv_ssp" "false")
+                  (substitute* "configure"
+                    (("/bin/pwd") "pwd")))))
+            (replace 'install
+              (lambda* (#:key outputs make-flags #:allow-other-keys)
+                (let ((kernel-headers (assoc-ref %build-inputs "kernel-headers"))
+                      (out (assoc-ref outputs "out")))
+                  (apply invoke "make" make-flags)
+                  (copy-recursively kernel-headers out))))
+            (replace 'configure
+              (lambda* (#:key configure-flags #:allow-other-keys)
+                (format (current-error-port) "running ../configure ~a\n"
+                        (string-join configure-flags))
+                (mkdir-p "build")
+                (chdir "build")
+                (apply invoke "../configure" configure-flags)))
+            (add-after 'configure 'remove-sunrpc
+              (lambda _
+                (let* ((out (assoc-ref %outputs "out"))
+                       (bash (assoc-ref %build-inputs "bash"))
+                       (shell (string-append bash "/bin/bash")))
+
+                  (let ((Makefile (open-file "Makefile" "a")))
+                    (display (string-append "
 
 SHELL := " shell "
 ")
-                            Makefile)
-                   (close Makefile))
-                 (substitute* "../Makefile"
-                   (("^SHELL := /bin/sh") (string-append "SHELL := " shell)))
-                 (substitute* "../Makeconfig"
-                   (("^SHELL := /bin/sh") (string-append "SHELL := " shell)))
-                 (substitute* "../elf/Makefile"
-                   (("^SHELL := /bin/sh") (string-append "SHELL := " shell)))
-                 (invoke "make" (string-append (getcwd) "/sysd-sorted" ))
-                 (substitute* "sysd-sorted"
-                   ((" sunrpc") " ")
-                   ((" nis") " "))
-                 #t)))))))))
+                             Makefile)
+                    (close Makefile))
+                  (substitute* "../Makefile"
+                    (("^SHELL := /bin/sh") (string-append "SHELL := " shell)))
+                  (substitute* "../Makeconfig"
+                    (("^SHELL := /bin/sh") (string-append "SHELL := " shell)))
+                  (substitute* "../elf/Makefile"
+                    (("^SHELL := /bin/sh") (string-append "SHELL := " shell)))
+                  (invoke "make" (string-append (getcwd) "/sysd-sorted" ))
+                  (substitute* "sysd-sorted"
+                    ((" sunrpc") " ")
+                    ((" nis") " ")))))))))))
 
 (define glibc-mesboot
   (package
@@ -2298,18 +2181,17 @@ SHELL := " shell "
      `(#:validate-runpath? #f ; fails when using --enable-shared
        ,@(substitute-keyword-arguments (package-arguments glibc-headers-mesboot)
            ((#:make-flags make-flags)
-            `(let ((bash (assoc-ref %build-inputs "bash")))
-               (list (string-append "SHELL=" bash "/bin/sh"))))
+            #~(let ((bash (assoc-ref %build-inputs "bash")))
+                (list (string-append "SHELL=" bash "/bin/sh"))))
            ((#:phases phases)
-            `(modify-phases ,phases
-               (replace 'install
-                 (lambda* (#:key outputs make-flags #:allow-other-keys)
-                   (let* ((kernel-headers (assoc-ref %build-inputs "kernel-headers"))
-                          (out (assoc-ref outputs "out"))
-                          (install-flags (cons "install" make-flags)))
-                     (and (apply invoke "make" install-flags)
-                          (copy-recursively kernel-headers out)
-                          #t)))))))))))
+            #~(modify-phases #$phases
+                (replace 'install
+                  (lambda* (#:key outputs make-flags #:allow-other-keys)
+                    (let* ((kernel-headers (assoc-ref %build-inputs "kernel-headers"))
+                           (out (assoc-ref outputs "out"))
+                           (install-flags (cons "install" make-flags)))
+                      (apply invoke "make" install-flags)
+                      (copy-recursively kernel-headers out)))))))))))
 
 (define (%boot-mesboot4-inputs)
   `(("libc" ,glibc-mesboot)
@@ -2364,8 +2246,7 @@ exec " gcc "/bin/" program
                   "g++"
                   "i686-unknown-linux-gnu-cpp"
                   "i686-unknown-linux-gnu-gcc"
-                  "i686-unknown-linux-gnu-g++"))
-               #t)))
+                  "i686-unknown-linux-gnu-g++")))))
          (replace 'check
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -2380,81 +2261,80 @@ exec " gcc "/bin/" program
     (version (package-version gcc-4.9))
     (source (bootstrap-origin (package-source gcc-4.9)))
     (native-inputs `(("gcc-wrapper" ,gcc-mesboot1-wrapper)
-                     ("gcc" ,gcc-mesboot1)
                      ("headers" ,glibc-headers-mesboot)
                      ,@(%boot-mesboot4-inputs)))
     (arguments
      `(#:validate-runpath? #f
        ,@(substitute-keyword-arguments (package-arguments gcc-mesboot1)
            ((#:configure-flags configure-flags)
-            `(let ((out (assoc-ref %outputs "out"))
-                   (glibc (assoc-ref %build-inputs "libc")))
-               (list (string-append "--prefix=" out)
-                     "--build=i686-unknown-linux-gnu"
-                     "--host=i686-unknown-linux-gnu"
-
-                     "--with-host-libstdcxx=-lsupc++"
-
-                     (string-append "--with-native-system-header-dir=" glibc "/include")
-                     (string-append "--with-build-sysroot=" glibc "/include")
-
-                     "--disable-bootstrap"
-                     "--disable-decimal-float"
-                     "--disable-libatomic"
-                     "--disable-libcilkrts"
-                     "--disable-libgomp"
-                     "--disable-libitm"
-                     "--disable-libmudflap"
-                     "--disable-libquadmath"
-                     "--disable-libsanitizer"
-                     "--disable-libssp"
-                     "--disable-libvtv"
-                     "--disable-lto"
-                     "--disable-lto-plugin"
-                     "--disable-multilib"
-                     "--disable-plugin"
-                     "--disable-threads"
-                     "--enable-languages=c,c++"
-
-                     "--enable-static"
-                     "--enable-shared"
-                     "--enable-threads=single"
-
-                     ;; No pre-compiled libstdc++ headers, to save space.
-                     "--disable-libstdcxx-pch"
-
-                     ;; for libcpp ...
-                     "--disable-build-with-cxx")))
+            #~(let ((out (assoc-ref %outputs "out"))
+                    (glibc (assoc-ref %build-inputs "libc")))
+                (list (string-append "--prefix=" out)
+                      "--build=i686-unknown-linux-gnu"
+                      "--host=i686-unknown-linux-gnu"
+
+                      "--with-host-libstdcxx=-lsupc++"
+
+                      (string-append "--with-native-system-header-dir=" glibc "/include")
+                      (string-append "--with-build-sysroot=" glibc "/include")
+
+                      "--disable-bootstrap"
+                      "--disable-decimal-float"
+                      "--disable-libatomic"
+                      "--disable-libcilkrts"
+                      "--disable-libgomp"
+                      "--disable-libitm"
+                      "--disable-libmudflap"
+                      "--disable-libquadmath"
+                      "--disable-libsanitizer"
+                      "--disable-libssp"
+                      "--disable-libvtv"
+                      "--disable-lto"
+                      "--disable-lto-plugin"
+                      "--disable-multilib"
+                      "--disable-plugin"
+                      "--disable-threads"
+                      "--enable-languages=c,c++"
+
+                      "--enable-static"
+                      "--enable-shared"
+                      "--enable-threads=single"
+
+                      ;; No pre-compiled libstdc++ headers, to save space.
+                      "--disable-libstdcxx-pch"
+
+                      ;; for libcpp ...
+                      "--disable-build-with-cxx")))
            ((#:phases phases)
-            `(modify-phases ,phases
-               (delete 'apply-boot-patch)
-               (delete 'unpack-g++)     ; sadly, gcc-4.9.4 does not provide
-                                        ; modular core/language downloads
-               (replace 'setenv
-                 (lambda* (#:key outputs #:allow-other-keys)
-                   (let* ((out (assoc-ref outputs "out"))
-                          (binutils (assoc-ref %build-inputs "binutils"))
-                          (bash (assoc-ref %build-inputs "bash"))
-                          (gcc (assoc-ref %build-inputs "gcc"))
-                          (glibc (assoc-ref %build-inputs "libc"))
-                          (kernel-headers (assoc-ref %build-inputs "kernel-headers")))
-                     (setenv "CONFIG_SHELL" (string-append bash "/bin/sh"))
-                     (setenv "C_INCLUDE_PATH" (string-append
-                                               gcc "/lib/gcc-lib/i686-unknown-linux-gnu/4.6.4/include"
-                                               ":" kernel-headers "/include"
-                                               ":" glibc "/include"
-                                               ":" (getcwd) "/mpfr/src"))
-                     (setenv "CPLUS_INCLUDE_PATH" (string-append
-                                                   gcc "/lib/gcc-lib/i686-unknown-linux-gnu/4.6.4/include"
-                                                   ":" kernel-headers "/include"
-                                                   ":" glibc "/include"
-                                                   ":" (getcwd) "/mpfr/src"))
-                     (setenv "LIBRARY_PATH" (string-append glibc "/lib"
-                                                           ":" gcc "/lib"))
-                     (format (current-error-port) "C_INCLUDE_PATH=~a\n" (getenv "C_INCLUDE_PATH"))
-                     (format (current-error-port) "CPLUS_INCLUDE_PATH=~a\n" (getenv "CPLUS_INCLUDE_PATH"))
-                     (format (current-error-port) "LIBRARY_PATH=~a\n" (getenv "LIBRARY_PATH"))
-                     #t))))))))))
+            #~(modify-phases #$phases
+                (delete 'apply-boot-patch)
+                (delete 'unpack-g++)     ; sadly, gcc-4.9.4 does not provide
+                                                  ; modular core/language downloads
+                (replace 'setenv
+                  (lambda* (#:key outputs #:allow-other-keys)
+                    (let* ((out (assoc-ref outputs "out"))
+                           (binutils (assoc-ref %build-inputs "binutils"))
+                           (bash (assoc-ref %build-inputs "bash"))
+                           (gcc (assoc-ref %build-inputs "gcc"))
+                           (glibc (assoc-ref %build-inputs "libc"))
+                           (kernel-headers (assoc-ref %build-inputs "kernel-headers")))
+                      (setenv "CONFIG_SHELL" (string-append bash "/bin/sh"))
+                      (setenv "C_INCLUDE_PATH" (string-append
+                                                gcc "/lib/gcc-lib/i686-unknown-linux-gnu/4.6.4/include"
+                                                ":" kernel-headers "/include"
+                                                ":" glibc "/include"
+                                                ":" (getcwd) "/mpfr/src"))
+                      (setenv "CPLUS_INCLUDE_PATH" (string-append
+                                                    gcc "/lib/gcc-lib/i686-unknown-linux-gnu/4.6.4/include"
+                                                    ":" kernel-headers "/include"
+                                                    ":" glibc "/include"
+                                                    ":" (getcwd) "/mpfr/src"))
+                      (setenv "LIBRARY_PATH" (string-append glibc "/lib"
+                                                            ":" gcc "/lib"))
+                      (format (current-error-port) "C_INCLUDE_PATH=~a\n" (getenv "C_INCLUDE_PATH"))
+                      (format (current-error-port) "CPLUS_INCLUDE_PATH=~a\n" (getenv "CPLUS_INCLUDE_PATH"))
+                      (format (current-error-port) "LIBRARY_PATH=~a\n"
+                              (getenv "LIBRARY_PATH"))))))))))))
 
 (define gcc-mesboot-wrapper
   ;; We need this so gcc-mesboot can be used to create shared binaries that
@@ -2506,6 +2386,7 @@ exec " gcc "/bin/" program
 (define gnu-make-boot0
   (package
     (inherit gnu-make)
+    (outputs (delete "debug" (package-outputs gnu-make)))
     (source (bootstrap-origin (package-source gnu-make)))
     (name "make-boot0")
     (arguments
@@ -2517,7 +2398,16 @@ exec " gcc "/bin/" program
             ;; The generated config.status has some problems due to the
             ;; bootstrap environment.  Disable dependency tracking to work
             ;; around it.
-            `(cons "--disable-dependency-tracking" ,flags))
+            `(cons "--disable-dependency-tracking"
+
+                   ;; 'glibc-bootstrap' on non-x86 platforms has a buggy
+                   ;; 'posix_spawn'.  Thus, disable it.  See
+                   ;; <https://bugs.gnu.org/49367>.
+                   ,(match (%current-system)
+                      ((or "i686-linux" "x86_64-linux")
+                       flags)
+                      (_
+                       `(cons "--disable-posix-spawn" ,flags)))))
            ((#:phases phases)
             `(modify-phases ,phases
                (replace 'build
@@ -2527,8 +2417,7 @@ exec " gcc "/bin/" program
                  (lambda* (#:key outputs #:allow-other-keys)
                    (let* ((out (assoc-ref outputs "out"))
                           (bin (string-append out "/bin")))
-                     (install-file "make" bin)
-                     #t))))))))
+                     (install-file "make" bin)))))))))
     (native-inputs '())                           ; no need for 'pkg-config'
     (inputs (%bootstrap-inputs+toolchain))))
 
@@ -2549,6 +2438,7 @@ exec " gcc "/bin/" program
 (define coreutils-boot0
   (package
     (inherit coreutils)
+    (outputs (delete "debug" (package-outputs coreutils)))
     (source (bootstrap-origin (package-source coreutils)))
     (name "coreutils-boot0")
     (native-inputs `())
@@ -2565,6 +2455,9 @@ exec " gcc "/bin/" program
   (package
     (inherit diffutils)
     (name "diffutils-boot0")
+    (source (origin
+              (inherit (package-source diffutils))
+              (patches '())))                 ;patches for tests unneeded here
     (native-inputs `())
     (inputs
      `(("make" ,gnu-make-boot0)
@@ -2594,6 +2487,8 @@ exec " gcc "/bin/" program
        ,@(%bootstrap-inputs+toolchain)))
     (arguments
      `(#:implicit-inputs? #f
+       ;; Ignore test failure in gnulib for armhf/aarch64.
+       #:tests? ,(not (target-arm?))
        #:guile ,%bootstrap-guile
 
        ;; The build system assumes we have done a mistake when time_t is 32-bit
@@ -2601,6 +2496,7 @@ exec " gcc "/bin/" program
        ,@(substitute-keyword-arguments (package-arguments findutils)
            ((#:configure-flags flags ''())
             `(append
+               ;; TODO: Figure out exactly with architectures need this.
               ,(if (target-64bit?)
                    ''("TIME_T_32_BIT_OK=yes")
                    ''())
@@ -2608,7 +2504,20 @@ exec " gcc "/bin/" program
                  ((or "arm-linux" "aarch64-linux")
                   ''("--disable-dependency-tracking"))
                  (_ ''()))
-              ,flags)))))))
+              ,flags))
+           ((#:phases phases '%standard-phases)
+            `(modify-phases ,phases
+              ;; 'test-fnmatch' fails when using glibc-mesboot@2.16, due
+              ;; to incorrect handling of the [:alpha:] regexp character
+              ;; class.  Ignore it.
+               ,@(if (member (%current-system)
+                             '("x86_64-linux" "i686-linux"))
+                     '((add-before 'check 'skip-fnmatch-test
+                         (lambda _
+                           (substitute* "gnulib-tests/Makefile"
+                             (("^XFAIL_TESTS =")
+                              "XFAIL_TESTS = test-fnmatch ")))))
+                     '()))))))))
 
 (define file
   (package
@@ -2640,7 +2549,7 @@ exec " gcc "/bin/" program
 
 (define gawk-boot0
   (package
-    (inherit patch)
+    (inherit gawk)
     (source (bootstrap-origin (package-source gawk)))
     (name "gawk-boot0")
     (native-inputs '())
@@ -2753,8 +2662,7 @@ exec " gcc "/bin/" program
                         (with-directory-excursion (string-append out "/bin")
                           (for-each (lambda (name)
                                       (symlink name (remove-triplet-prefix name)))
-                                    (scandir "." has-triplet-prefix?)))
-                        #t))))
+                                    (scandir "." has-triplet-prefix?)))))))
 
        ,@(substitute-keyword-arguments (package-arguments binutils)
            ((#:configure-flags cf)
@@ -2789,16 +2697,60 @@ exec " gcc "/bin/" program
                       ;; fail, which in turn confuses the configure script.
                       (lambda _
                         (substitute* "libstdc++-v3/configure"
-                          (("g\\+\\+ -v") "true"))
-                        #t))))))
+                          (("g\\+\\+ -v") "true"))))))))
              (_ (package-arguments lib)))))
       (inputs (%boot0-inputs))
       (native-inputs '()))))
 
+(define libstdc++-boot0-gcc7
+  ;; GCC >= 7 is needed by architectures which use C++-14 features.
+  (let ((lib (make-libstdc++ gcc-7)))
+    (package
+      (inherit lib)
+      (source (bootstrap-origin (package-source lib)))
+      (name "libstdc++-boot0")
+      (arguments
+       `(#:guile ,%bootstrap-guile
+         #:implicit-inputs? #f
+
+         ;; XXX: libstdc++.so NEEDs ld.so for some reason.
+         #:validate-runpath? #f
+
+         ,@(substitute-keyword-arguments (package-arguments lib)
+             ((#:phases phases)
+              `(modify-phases ,phases
+                 (add-after 'unpack 'unpack-gmp&co
+                   (lambda* (#:key inputs #:allow-other-keys)
+                     (let ((gmp  (assoc-ref %build-inputs "gmp-source"))
+                           (mpfr (assoc-ref %build-inputs "mpfr-source"))
+                           (mpc  (assoc-ref %build-inputs "mpc-source")))
+
+                       ;; To reduce the set of pre-built bootstrap inputs, build
+                       ;; GMP & co. from GCC.
+                       (for-each (lambda (source)
+                                   (invoke "tar" "xvf" source))
+                                 (list gmp mpfr mpc))
+
+                       ;; Create symlinks like `gmp' -> `gmp-x.y.z'.
+                       ,@(map (lambda (lib)
+                                ;; Drop trailing letters, as gmp-6.0.0a unpacks
+                                ;; into gmp-6.0.0.
+                                `(symlink ,(string-trim-right
+                                            (package-full-name lib "-")
+                                            char-set:letter)
+                                          ,(package-name lib)))
+                              (list gmp-6.0 mpfr mpc))))))))))
+      (inputs `(("gmp-source" ,(bootstrap-origin (package-source gmp-6.0)))
+                ("mpfr-source" ,(bootstrap-origin (package-source mpfr)))
+                ("mpc-source" ,(bootstrap-origin (package-source mpc)))
+                ,@(%boot0-inputs)))
+      (native-inputs '()))))
+
 (define gcc-boot0
   (package
     (inherit gcc)
     (name "gcc-cross-boot0")
+    (outputs (delete "debug" (package-outputs gcc)))
     (source (bootstrap-origin (package-source gcc)))
     (arguments
      `(#:guile ,%bootstrap-guile
@@ -2819,13 +2771,6 @@ exec " gcc "/bin/" program
                            "--disable-shared"
                            "--enable-languages=c,c++"
 
-                           ;; boot-triplet inserts "guix" in the triplet.
-                           ,@(if (equal? "powerpc64le-guix-linux-gnu" (boot-triplet))
-                                 ;; On POWER9 (little endian) glibc needs the
-                                 ;; 128-bit long double type.
-                                 '("--with-long-double-128")
-                                 '())
-
                            ;; libstdc++ cannot be built at this stage
                            ;; ("Link tests are not allowed after
                            ;; GCC_NO_EXECUTABLES.").
@@ -2879,8 +2824,7 @@ exec " gcc "/bin/" program
                                           (package-full-name lib "-")
                                           char-set:letter)
                                         ,(package-name lib)))
-                            (list gmp-6.0 mpfr mpc))
-                     #t)))
+                            (list gmp-6.0 mpfr mpc)))))
                ,(match (%current-system)
                   ((or "i686-linux" "x86_64-linux")
                    '(add-before 'configure 'fix-libcc1
@@ -2893,8 +2837,7 @@ exec " gcc "/bin/" program
                                           (assoc-ref inputs "gcc") "/lib")))
                         ;; XXX: "g++ -v" is broken (see also libstdc++ above).
                         (substitute* "libcc1/configure"
-                          (("g\\+\\+ -v") "true"))
-                        #t)))
+                          (("g\\+\\+ -v") "true")))))
                   (_ '(add-before 'configure 'return-true
                         (lambda _ #t))))
                (add-after 'install 'symlink-libgcc_eh
@@ -2906,8 +2849,7 @@ exec " gcc "/bin/" program
                          (string-append out "/lib/gcc/"
                                         ,(boot-triplet)
                                         "/" ,(package-version gcc))
-                       (symlink "libgcc.a" "libgcc_eh.a"))
-                     #t))))))))
+                       (symlink "libgcc.a" "libgcc_eh.a"))))))))))
 
     (inputs `(("gmp-source" ,(bootstrap-origin (package-source gmp-6.0)))
               ("mpfr-source" ,(bootstrap-origin (package-source mpfr)))
@@ -2915,7 +2857,9 @@ exec " gcc "/bin/" program
               ("binutils-cross" ,binutils-boot0)
 
               ;; The libstdc++ that libcc1 links against.
-              ("libstdc++" ,libstdc++-boot0)
+              ("libstdc++" ,(match (%current-system)
+                                   ("riscv64-linux" libstdc++-boot0-gcc7)
+                                   (_ libstdc++-boot0)))
 
               ;; Call it differently so that the builder can check whether
               ;; the "libc" input is #f.
@@ -2948,8 +2892,7 @@ exec " gcc "/bin/" program
                  (lambda _
                    (substitute* "Configure"
                      (("^libswanted=(.*)pthread" _ before)
-                      (string-append "libswanted=" before)))
-                   #t))))
+                      (string-append "libswanted=" before)))))))
            ;; Do not configure with '-Dusethreads' since pthread
            ;; support is missing.
            ((#:configure-flags configure-flags)
@@ -2992,6 +2935,15 @@ exec " gcc "/bin/" program
                            "RANLIB=ranlib -D"))
                       "V=1")
 
+       ;; 'glibc-bootstrap' on non-x86 platforms has a buggy 'posix_spawn'.
+       ;; Thus, use the Gnulib replacement instead.  See
+       ;; <https://bugs.gnu.org/49367>.
+       ,@(match (%current-system)
+           ((or "i686-linux" "x86_64-linux")
+            '())
+           (_
+            '(#:configure-flags '("gl_cv_func_posix_spawn_works=no"))))
+
        ,@(package-arguments bison)))))
 
 (define flex-boot0
@@ -3006,15 +2958,6 @@ exec " gcc "/bin/" program
        #:guile ,%bootstrap-guile
        #:tests? #f))))
 
-(define rsync-boot0
-  (package
-    (inherit rsync)
-    (native-inputs `(("perl" ,perl-boot0)))
-    (inputs (%boot0-inputs))
-    (arguments
-     `(#:implicit-inputs? #f
-       #:guile ,%bootstrap-guile))))
-
 (define-syntax define/system-dependent
   (lambda (s)
     "Bind IDENTIFIER to EXP, where the value of EXP is known to depend on
@@ -3050,9 +2993,6 @@ memoized as a function of '%current-system'."
        ;; Flex and Bison are required since version 4.16.
        ("flex" ,flex-boot0)
        ("bison" ,bison-boot0)
-
-       ;; Rsync is required since version 5.3.
-       ("rsync" ,rsync-boot0)
        ,@(%boot0-inputs)))))
 
 (define with-boot0
@@ -3155,6 +3095,7 @@ memoized as a function of '%current-system'."
   (package
     (inherit expat)
     (inputs (%boot0-inputs))
+    (outputs '("out"))
     (arguments
      ;; XXX: Linking 'runtestscpp' fails with things like:
      ;;
@@ -3169,6 +3110,7 @@ memoized as a function of '%current-system'."
             ;; Since we're not passing the right -Wl,-rpath flags, build the
             ;; static library to avoid RUNPATH validation failure.
             `(cons "--disable-shared" ,flags))
+           ((#:phases phases) '%standard-phases)
            ((#:tests? _ #f) #f))))))
 
 (define python-boot0
@@ -3195,54 +3137,54 @@ memoized as a function of '%current-system'."
                    (substitute* "Modules/Setup.dist"
                      ;; Link Expat instead of embedding the bundled one.
                      (("^#pyexpat.*") "pyexpat pyexpat.c -lexpat\n"))
-                   #t)))))
+                   ;; Delete windows binaries
+                   (for-each delete-file
+                             (find-files "Lib/distutils/command" ".*.exe$"))
+                   (for-each delete-file
+                             (find-files "Lib/ensurepip" ".*.whl$")))))))
     (inputs
      `(,@(%boot0-inputs)
        ("expat" ,expat-sans-tests)))              ;remove OpenSSL, zlib, etc.
-    (native-inputs '())                           ;and pkg-config
+    (native-inputs                                ;and pkg-config
+     `(("sitecustomize.py" ,(local-file (search-auxiliary-file
+                                         "python/sitecustomize.py")))))
     (arguments
      `(#:implicit-inputs? #f
        #:guile ,%bootstrap-guile
-
-       ,@(substitute-keyword-arguments (package-arguments python-minimal)
-           ;; Disable features that cannot be built at this stage.
-           ((#:configure-flags _ ''())
-            `(list "--without-ensurepip"
-                   "--without-threads"))
-           ;; Clear #:make-flags, such that changes to the regular
-           ;; Python package won't interfere with this one.
-           ((#:make-flags _ ''()) ''())
-           ((#:phases phases)
-            ;; Remove the 'apply-alignment-patch' phase if present to avoid
-            ;; rebuilding this package.  TODO: for the next rebuild cycle,
-            ;; consider inlining all the arguments instead of inheriting to
-            ;; make it easier to patch Python without risking a full rebuild.
-            ;; Or better yet, change to 'python-on-guile'.
-            `(modify-phases ,@(list (match phases
-                                      (('modify-phases original-phases
-                                         changes ...
-                                         ('add-after unpack apply-alignment-patch _))
-                                       `(modify-phases ,original-phases ,@changes))
-                                      (_ phases)))
-               (add-before 'configure 'disable-modules
-                 (lambda _
-                   (substitute* "setup.py"
-                     ;; Disable ctypes, since it requires libffi.
-                     (("extensions\\.append\\(ctypes\\)") "")
-                     ;; Prevent the 'ossaudiodev' extension from being
-                     ;; built, since it requires Linux headers.
-                     (("'linux', ") ""))
-                   #t))
-               (delete 'set-TZDIR)
-               ,@(if (hurd-system?)
-                     `((add-before 'build 'fix-regen
-                         (lambda* (#:key inputs #:allow-other-keys)
-                           (let ((libc (assoc-ref inputs "libc")))
-                             (substitute* "Lib/plat-generic/regen"
-                               (("/usr/include/") (string-append libc "/include/")))
-                             #t))))
-                     '())))
-           ((#:tests? _ #f) #f))))))
+       ;; Running the tests won't work because we lack several required
+       ;; modules (OpenSSL, etc).
+       #:tests? #f
+       ;; Disable features that cannot be built at this stage.
+       #:configure-flags '("--without-ensurepip" "--without-threads")
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'patch-lib-shells
+           (lambda _
+             (substitute* '("Lib/subprocess.py"
+                            "Lib/distutils/tests/test_spawn.py"
+                            "Lib/test/support/__init__.py"
+                            "Lib/test/test_subprocess.py")
+               (("/bin/sh") (which "sh")))))
+         (add-before 'configure 'disable-modules
+           (lambda _
+             (substitute* "setup.py"
+               ;; Disable ctypes, since it requires libffi.
+               (("extensions\\.append\\(ctypes\\)") "")
+               ;; Prevent the 'ossaudiodev' extension from being
+               ;; built, since it requires Linux headers.
+               (("'linux', ") ""))))
+         ,@(if (hurd-system?)
+               `((add-before 'build 'fix-regen
+                   (lambda* (#:key inputs #:allow-other-keys)
+                     (let ((libc (assoc-ref inputs "libc")))
+                       (substitute* "Lib/plat-generic/regen"
+                         (("/usr/include/")
+                          (string-append libc "/include/")))))))
+               '())
+         (add-after 'install 'install-sitecustomize.py
+           ,(customize-site version)))))
+    (native-search-paths
+     (list (guix-pythonpath-search-path version)))))
 
 (define/system-dependent ld-wrapper-boot0
   ;; The first 'ld' wrapper, defined with 'define/system-dependent' because
@@ -3272,6 +3214,7 @@ memoized as a function of '%current-system'."
   (package
     (inherit glibc)
     (name "glibc-intermediate")
+    (outputs (delete "debug" (package-outputs glibc)))
     (source (bootstrap-origin (package-source glibc)))
     (arguments
      `(#:guile ,%bootstrap-guile
@@ -3289,9 +3232,9 @@ memoized as a function of '%current-system'."
             `(modify-phases ,phases
                (add-before 'configure 'pre-configure
                  (lambda* (#:key inputs #:allow-other-keys)
-                   ;; Don't clobber CPATH with the bootstrap libc.
-                   (setenv "NATIVE_CPATH" (getenv "CPATH"))
-                   (unsetenv "CPATH")
+                   ;; Don't clobber include paths with the bootstrap libc.
+                   (unsetenv "C_INCLUDE_PATH")
+                   (unsetenv "CPLUS_INCLUDE_PATH")
 
                    ;; Tell 'libpthread' where to find 'libihash' on Hurd systems.
                    ,@(if (hurd-system?)
@@ -3301,25 +3244,13 @@ memoized as a function of '%current-system'."
                             (string-append "LDLIBS-pthread.so = "
                                            (assoc-ref %build-inputs "kernel-headers")
                                            "/lib/libihash.a\n"))))
-                       '())
-
-                   ;; 'rpcgen' needs native libc headers to be built.
-                   (substitute* "sunrpc/Makefile"
-                     (("sunrpc-CPPFLAGS =.*" all)
-                      (string-append "CPATH = $(NATIVE_CPATH)\n"
-                                     "export CPATH\n"
-                                     all "\n")))
-                   #t)))))))
+                       '()))))))))
     (propagated-inputs `(("kernel-headers" ,(kernel-headers-boot0))))
     (native-inputs
      `(("bison" ,bison-boot0)
        ("texinfo" ,texinfo-boot0)
        ("perl" ,perl-boot0)
-       ("python" ,python-boot0)
-       ,@(if (target-powerpc?)
-           `(("powerpc64le-patch" ,@(search-patches
-                                      "glibc-ldd-powerpc.patch")))
-           '())))
+       ("python" ,python-boot0)))
     (inputs
      `( ;; The boot inputs.  That includes the bootstrap libc.  We don't want
        ;; it in $CPATH, hence the 'pre-configure' phase above.
@@ -3330,9 +3261,6 @@ memoized as a function of '%current-system'."
              `(("mig" ,mig-boot0))
              '())
 
-       ;; A native GCC is needed to build `cross-rpcgen'.
-       ("native-gcc" ,@(assoc-ref (%boot0-inputs) "gcc"))
-
        ;; Here, we use the bootstrap Bash, which is not satisfactory
        ;; because we don't want to depend on bootstrap tools.
        ("static-bash" ,@(assoc-ref (%boot0-inputs) "bash"))))))
@@ -3380,9 +3308,7 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
                                                            triplet "-" tool)
                                             tool))
                                  '("ar" "ranlib"))
-                       (for-each wrap-program '("gcc" "g++")))
-
-                     #t))))
+                       (for-each wrap-program '("gcc" "g++")))))))
     (native-inputs
      `(("binutils" ,binutils)
        ("gcc" ,gcc)
@@ -3445,16 +3371,14 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
                   ;; Build only the tools.
                   (add-after 'unpack 'chdir
                     (lambda _
-                      (chdir "gettext-tools")
-                      #t))
+                      (chdir "gettext-tools")))
 
                   ;; Some test programs require pthreads, which we don't have.
                   (add-before 'configure 'no-test-programs
                     (lambda _
                       (substitute* "tests/Makefile.in"
                         (("^PROGRAMS =.*$")
-                         "PROGRAMS =\n"))
-                      #t)))))))
+                         "PROGRAMS =\n")))))))))
 
 (define glibc-final
   ;; The final glibc, which embeds the statically-linked Bash built above.
@@ -3470,10 +3394,6 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
 
    ;; This time we need 'msgfmt' to install all the libc.mo files.
    (native-inputs `(,@(package-native-inputs glibc-final-with-bootstrap-bash)
-                     ,@(if (target-powerpc?)
-                         `(("powerpc64le-patch" ,@(search-patches
-                                                    "glibc-ldd-powerpc.patch")))
-                         '())
                     ("gettext" ,gettext-boot0)))
 
    (propagated-inputs
@@ -3484,7 +3404,7 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
    ;; if 'allowed-references' were per-output.
    (arguments
     `(#:allowed-references
-      ((,gcc-boot0 "lib")
+      (,(gexp-input gcc-boot0 "lib")
        ,(kernel-headers-boot0)
        ,static-bash-for-glibc
        ,@(if (hurd-system?)
@@ -3635,8 +3555,7 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
                                            (package-full-name lib "-")
                                            char-set:letter)
                                          ,(package-name lib)))
-                             (list gmp-6.0 mpfr mpc))
-                      #t))))))))
+                             (list gmp-6.0 mpfr mpc))))))))))
 
     ;; This time we want Texinfo, so we get the manual.  Add
     ;; STATIC-BASH-FOR-GLIBC so that it's used in the final shebangs of
@@ -3659,6 +3578,9 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
 (define (%boot3-inputs)
   ;; 4th stage inputs.
   `(("gcc" ,gcc-final)
+    ,@(if (target-riscv64?)
+        `(("gcc:lib" ,gcc-final "lib"))
+        '())
     ("ld-wrapper" ,ld-wrapper-boot3)
     ,@(alist-delete "gcc" (%boot2-inputs))))
 
@@ -3712,6 +3634,13 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
                    #:guile guile-final
                    #:bash bash-final))
 
+(define-public ld-gold-wrapper
+  (make-ld-wrapper "ld-gold-wrapper"
+                   #:binutils binutils-gold
+                   #:linker "ld.gold"
+                   #:guile guile-final
+                   #:bash bash-final))
+
 (define (%boot5-inputs)
   ;; Now with UTF-8 locales.  Remember that the bootstrap binaries were built
   ;; with an older libc, which cannot load the new locale format.  See
@@ -3889,6 +3818,10 @@ COREUTILS-FINAL vs. COREUTILS, etc."
        (append (package-search-paths gcc)
                (package-search-paths libc)))
 
+      ;; Copy the 'compiler-cpu-architectures' property and other things that
+      ;; may be useful, but not the 'hidden?' property.
+      (properties (alist-delete 'hidden? (package-properties gcc)))
+
       (license (package-license gcc))
       (synopsis "Complete GCC tool chain for C/C++ development")
       (description
@@ -3925,7 +3858,7 @@ is the GNU Compiler Collection.")
   (make-gcc-toolchain gcc-6))
 
 (define-public gcc-toolchain-7
-  gcc-toolchain)
+  (make-gcc-toolchain gcc-7))
 
 (define-public gcc-toolchain-8
   (make-gcc-toolchain gcc-8))
@@ -3934,7 +3867,7 @@ is the GNU Compiler Collection.")
   (make-gcc-toolchain gcc-9))
 
 (define-public gcc-toolchain-10
-  (make-gcc-toolchain gcc-10))
+  gcc-toolchain)
 
 (define-public gcc-toolchain-11
   (make-gcc-toolchain gcc-11))
diff --git a/gnu/packages/compression.scm b/gnu/packages/compression.scm
index cfbc959182..8185a6157e 100644
--- a/gnu/packages/compression.scm
+++ b/gnu/packages/compression.scm
@@ -1,10 +1,10 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2017, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2017, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2014, 2015, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
 ;;; Copyright © 2015, 2016 Eric Bavier <bavier@member.fsf.org>
-;;; Copyright © 2015, 2016, 2017, 2018, 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015, 2016, 2017, 2018, 2020, 2021, 2022 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, 2021 Efraim Flashner <efraim@flashner.co.il>
@@ -32,7 +32,9 @@
 ;;; Copyright © 2020 Léo Le Bouter <lle-bout@zaclys.net>
 ;;; Copyright © 2021 Antoine Côté <antoine.cote@posteo.net>
 ;;; Copyright © 2021 Vincent Legoll <vincent.legoll@gmail.com>
+;;; Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
 ;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021 Ahmad Jarara <git@ajarara.io>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -167,10 +169,8 @@ in compression.")
                (delete-file (string-append out "/include/minizip/crypt.h"))
                #t))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
-    (propagated-inputs `(("zlib" ,zlib)))
+     (list autoconf automake libtool))
+    (propagated-inputs (list zlib))
     (home-page (package-home-page zlib))
     (synopsis "Zip Compression library")
     (description
@@ -191,7 +191,7 @@ the @code{zlib} source.")
               (base32
                "0iginbz2m15hcsa3x4y7v3mhk54gr1r7m3ghx0pg4n46vv2snmpi"))))
    (build-system gnu-build-system)
-   (inputs `(("zlib" ,zlib)))
+   (inputs (list zlib))
    (home-page "https://savannah.nongnu.org/projects/fastjar")
    (synopsis "Replacement for Sun's 'jar' utility")
    (description
@@ -219,11 +219,9 @@ the @code{zlib} source.")
    (build-system gnu-build-system)
    (arguments `(#:tests? #f)) ; no "check" target
    (native-inputs
-    `(("autoconf" ,autoconf)
-      ("automake" ,automake)
-      ("libtool" ,libtool)))
+    (list autoconf automake libtool))
    (inputs
-    `(("zlib" ,zlib)))
+    (list zlib))
    (synopsis "C library for manipulating POSIX tar files")
    (description
     "libtar is a C library for manipulating POSIX tar files.  It handles
@@ -464,7 +462,7 @@ compatible with bzip2 – both at file format and command line level.")
                "1rnvgcdixjzbrmcr1nv9b6ccrjfrhryaj7jwz28yxxv6lam3xlcg"))))
     (build-system gnu-build-system)
     (inputs
-     `(("bzip2" ,bzip2)))
+     (list bzip2))
     (arguments
      `(#:tests? #f                      ; no tests
        #:phases (modify-phases %standard-phases
@@ -484,7 +482,7 @@ compressed with pbzip2 can be decompressed with bzip2).")
 (define-public xz
   (package
    (name "xz")
-   (version "5.2.4")
+   (version "5.2.5")
    (source (origin
             (method url-fetch)
             (uri (list (string-append "http://tukaani.org/xz/xz-" version
@@ -493,7 +491,7 @@ compressed with pbzip2 can be decompressed with bzip2).")
                                       version ".tar.gz")))
             (sha256
              (base32
-              "0ibi2zsfaz6l756spjwc5rayf4ckgc9hwmy8qinppcyk4svz64mm"))))
+              "045s9agl3bpv3swlwydhgsqh7791957vmgw2plw8f1rks07r3x7n"))))
    (build-system gnu-build-system)
    (arguments
     `(#:phases
@@ -544,11 +542,11 @@ than gzip and 15 % smaller output than bzip2.")
        (modify-phases %standard-phases
          (add-before 'check 'set-up-test-environment
            (lambda* (#:key inputs #:allow-other-keys)
-             (setenv "TZDIR" (string-append (assoc-ref inputs "tzdata")
-                                            "/share/zoneinfo"))
-             #t)))))
+             (setenv "TZDIR"
+                     (search-input-directory inputs
+                                             "share/zoneinfo")))))))
     (native-inputs
-     `(("tzdata" ,tzdata-for-tests)))
+     (list tzdata-for-tests))
     (home-page "https://fragglet.github.com/lhasa/")
     (synopsis "LHA archive decompressor")
     (description "Lhasa is a replacement for the Unix LHA tool, for
@@ -598,7 +596,7 @@ format are designed to be portable across platforms.")
         (base32
          "0h9gb8q7y54m9mvy3jvsmxf21yx8fc3ylzh418hgbbv0i8mbcwky"))))
     (build-system gnu-build-system)
-    (inputs `(("lzo" ,lzo)))
+    (inputs (list lzo))
     (home-page "https://www.lzop.org/")
     (synopsis "Compress or expand files")
     (description
@@ -611,14 +609,14 @@ some compression ratio).")
 (define-public lzip
   (package
     (name "lzip")
-    (version "1.21")
+    (version "1.22")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://savannah/lzip/lzip-"
                                  version ".tar.gz"))
              (sha256
               (base32
-               "12qdcw5k1cx77brv9yxi1h4dzwibhfmdpigrj43nfk8nscwm12z4"))))
+               "0j59hx72258334rmkwn57ahr6s69nlrx0a5ip1jw2fbiwr12sd63"))))
     (build-system gnu-build-system)
     (home-page "https://www.nongnu.org/lzip/lzip.html")
     (synopsis "Lossless data compressor based on the LZMA algorithm")
@@ -694,7 +692,7 @@ decompressors when faced with corrupted input.")
              (string-append "extern " all)))))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("which" ,which)))
+     (list which))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -737,7 +735,7 @@ This package is mostly for compatibility and historical interest.")
                       (("/usr/local") (assoc-ref outputs "out")))
                     #t)))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "https://github.com/raboof/sfArkLib")
     (synopsis "Library for SoundFont decompression")
     (description
@@ -773,8 +771,7 @@ with the sfArk algorithm.")
                  (("/usr/local") (assoc-ref outputs "out")))
                #t)))))
       (inputs
-       `(("zlib" ,zlib)
-         ("sfarklib" ,sfarklib)))
+       (list zlib sfarklib))
       (home-page "https://github.com/raboof/sfarkxtc")
       (synopsis "Basic sfArk decompressor")
       (description "SfArk extractor converts SoundFonts in the compressed legacy
@@ -816,9 +813,8 @@ decompression of some loosely related file formats used by Microsoft.")
     (build-system gnu-build-system)
     (outputs (list "out" "static"))
     (native-inputs
-     `(;; For tests.
-       ("python" ,python)
-       ("valgrind" ,valgrind)))
+     (list ;; For tests.
+           python valgrind))
     (arguments
      `(;; Not designed for parallel testing.
        ;; See https://github.com/lz4/lz4/issues/957#issuecomment-737419821
@@ -858,7 +854,7 @@ time for compression ratio.")
 (define-public squashfs-tools
   (package
     (name "squashfs-tools")
-    (version "4.4-git.1")               ; ‘A point release of […] 4.4’
+    (version "4.5")
     (source
      (origin
        (method git-fetch)
@@ -867,7 +863,7 @@ time for compression ratio.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1hb95iy445hs2p3f7hg51jkrpkfi3bphddk60p2la0qmcdjkgbbm"))))
+        (base32 "18d4nwa22vgb8j2badngjngw63f0lj501cvlh3920wqy2mqxwav6"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ; no check target
@@ -909,7 +905,7 @@ This package allows you to create and extract such file systems.")
 (define-public squashfs-tools-ng
   (package
     (name "squashfs-tools-ng")
-    (version "1.1.2")
+    (version "1.1.3")
     (source
      (origin
        (method git-fetch)
@@ -918,7 +914,7 @@ This package allows you to create and extract such file systems.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "13gx6mc57wjjnrpnkb74zi2wiqazz2q715y1zz7rff02wh1vb5k9"))
+        (base32 "12ipqmjp10574sz64ls8qbgzkxz5dcbzk0l2fxyh2yrrhnjp34mi"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -934,10 +930,7 @@ This package allows you to create and extract such file systems.")
      `(#:configure-flags
        (list "--disable-static")))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
      `(("libselinux" ,libselinux)
 
@@ -1007,7 +1000,7 @@ byte-for-byte identical output.")
        #:make-flags
        (list ,(string-append "CC=" (cc-for-target)))
        #:test-target "tests"))
-    (inputs `(("zlib" ,zlib)))
+    (inputs (list zlib))
     (home-page "https://zlib.net/pigz/")
     (synopsis "Parallel implementation of gzip")
     (description
@@ -1032,8 +1025,7 @@ multiple processors and multiple cores when compressing data.")
                 "1ifxr18f2h75gkcrkx8033kwmwmrcgxshpaawyc2n4dzn1p2rqz5"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("libarchive" ,libarchive)))
+     (list pkg-config libarchive))
     (home-page "https://github.com/vasi/pixz")
     (synopsis "Parallel indexing implementation of LZMA")
     (description
@@ -1079,7 +1071,7 @@ tarballs.")
                (delete-file-recursively dir-name)
                #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("libmspack" ,libmspack)
        ("libmspack-source" ,(package-source libmspack))))
@@ -1091,7 +1083,7 @@ tarballs.")
 (define-public libjcat
   (package
     (name "libjcat")
-    (version "0.1.8")
+    (version "0.1.9")
     (source
      (origin
        (method git-fetch)
@@ -1101,20 +1093,18 @@ tarballs.")
          (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "18qkyg19r7fxzv93kar5n808n3582ygjmqwa7rnyg5y4b6hnwihl"))))
+        (base32 "02cgznk6qdylqpcyks6qykmvhpz1pplvnxp72bjzji1y6yj3zpkj"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("gobject-introspection" ,gobject-introspection)
-       ("help2man" ,help2man)
-       ("pkg-config" ,pkg-config)))
+     (list gobject-introspection help2man pkg-config))
     (inputs
-     `(("git" ,git)
-       ("glib" ,glib)
-       ("gnupg" ,gnupg)
-       ("gnutls" ,gnutls)
-       ("gpgme" ,gpgme)
-       ("json-glib" ,json-glib)
-       ("vala" ,vala)))
+     (list git
+           glib
+           gnupg
+           gnutls
+           gpgme
+           json-glib
+           vala))
     (home-page "https://github.com/hughsie/libjcat")
     (synopsis "Library for reading and writing Jcat files")
     (description
@@ -1144,8 +1134,7 @@ file.")
            #t))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1180,10 +1169,7 @@ human-readable output.")
              '())
        ("perl" ,perl)))
     (inputs
-     `(("bzip2" ,bzip2)
-       ("lz4" ,lz4)
-       ("lzo" ,lzo)
-       ("zlib" ,zlib)))
+     (list bzip2 lz4 lzo zlib))
     (home-page "http://ck.kolivas.org/apps/lrzip/")
     (synopsis "Large file compressor with a very high compression ratio")
     (description "lrzip is a compression utility that uses long-range
@@ -1222,11 +1208,12 @@ well as bzip2.")
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'unpack-third_party-subprojects
-           (lambda* (#:key inputs #:allow-other-keys)
+           (lambda* (#:key native-inputs inputs #:allow-other-keys)
              (with-directory-excursion "third_party"
                (for-each (lambda (subproject)
                            (let* ((input (string-append subproject "-source"))
-                                  (source (assoc-ref inputs input)))
+                                  (source (assoc-ref (or native-inputs inputs)
+                                                     input)))
                              (with-directory-excursion subproject
                                ;; Take advantage of the coincidence that both
                                ;; use GIT-FETCH, which creates a directory.
@@ -1277,8 +1264,8 @@ for most inputs, but the resulting compressed files are anywhere from 20% to
              (let ((gcc (assoc-ref (or native-inputs inputs) "gcc")))
                (setenv "CPLUS_INCLUDE_PATH"
                        (string-join
-                        (cons* (string-append (assoc-ref inputs "libcxx+libcxxabi")
-                                              "/include/c++/v1")
+                        (cons* (search-input-directory inputs
+                                                       "/include/c++/v1")
                                ;; Hide GCC's C++ headers so that they do not interfere with
                                ;; the Clang headers.
                                (delete (string-append gcc "/include/c++")
@@ -1292,8 +1279,7 @@ for most inputs, but the resulting compressed files are anywhere from 20% to
     (native-inputs
      `(("clang" ,clang-toolchain-6)))
     (inputs
-     `(("libcxx+libcxxabi" ,libcxx+libcxxabi-6)
-       ("libcxxabi" ,libcxxabi-6)))))
+     (list libcxx+libcxxabi-6 libcxxabi-6))))
 
 (define-public p7zip
   (package
@@ -1319,7 +1305,10 @@ for most inputs, but the resulting compressed files are anywhere from 20% to
                              (find-files  "Utils/file_Codecs_Rar_so.py")))
                   (delete-file-recursively "CPP/7zip/Archive/Rar")
                   (delete-file-recursively "CPP/7zip/Compress/Rar")
-                  #t))
+                  ;; Fix FTBFS with gcc-10.
+                  (substitute* "CPP/Windows/ErrorMsg.cpp"
+                    (("switch\\(errorCode\\) \\{")
+                     "switch(static_cast<HRESULT>(errorCode)) {"))))
               (patches (search-patches "p7zip-CVE-2016-9296.patch"
                                        "p7zip-CVE-2017-17969.patch"
                                        "p7zip-remove-unused-code.patch"))))
@@ -1330,31 +1319,27 @@ for most inputs, but the resulting compressed files are anywhere from 20% to
        #:phases
        (modify-phases %standard-phases
          (replace 'configure
-           (lambda* (#:key system outputs #:allow-other-keys)
-             (invoke "cp"
-                     (let ((system ,(or (%current-target-system)
-                                        (%current-system))))
-                       (cond
-                        ((string-prefix? "x86_64" system)
-                         "makefile.linux_amd64_asm")
-                        ((string-prefix? "i686" system)
-                         "makefile.linux_x86_asm_gcc_4.X")
-                        (else
-                         "makefile.linux_any_cpu_gcc_4.X")))
-                     "makefile.machine")))
-         (replace 'check
            (lambda _
-             (invoke "make" "test")
-             (invoke "make" "test_7z")
-             (invoke "make" "test_7zr"))))))
+             (copy-file
+               ,(cond ((target-x86-64?)
+                       "makefile.linux_amd64_asm")
+                      ((target-x86-32?)
+                       "makefile.linux_x86_asm_gcc_4.X")
+                      (else
+                        "makefile.linux_any_cpu_gcc_4.X"))
+               "makefile.machine")))
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "make" "test")
+               (invoke "make" "test_7z")
+               (invoke "make" "test_7zr")))))))
     (native-inputs
-     (let ((system (or (%current-target-system)
-                       (%current-system))))
-       `(,@(cond ((string-prefix? "x86_64" system)
-                  `(("yasm" ,yasm)))
-                 ((string-prefix? "i686" system)
-                  `(("nasm" ,nasm)))
-                 (else '())))))
+      (cond ((target-x86-64?)
+             (list yasm))
+            ((target-x86-32?)
+             (list nasm))
+            (else '())))
     (home-page "http://p7zip.sourceforge.net/")
     (synopsis "Command-line file archiver with high compression ratio")
     (description "p7zip is a command-line port of 7-Zip, a file archiver that
@@ -1402,13 +1387,39 @@ handles the 7z format which features very high compression ratios.")
                (install-file "libgzstream.a" lib)
                (install-file "gzstream.h" include)
                #t))))))
-    (propagated-inputs `(("zlib" ,zlib)))
+    (propagated-inputs (list zlib))
     (home-page "http://www.cs.unc.edu/Research/compgeom/gzstream/")
     (synopsis "Compressed C++ iostream")
     (description "gzstream is a small library for providing zlib
 functionality in a C++ iostream.")
     (license license:lgpl2.1+)))
 
+(define-public zopfli
+  (package
+    (name "zopfli")
+    (version "1.0.3")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/google/zopfli")
+                    (commit (string-append name "-" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0dr8n4j5nj2h9n208jns56wglw59gg4qm3s7c6y3hs75d0nnkhm4"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:tests? #f                      ;no test suite
+       #:configure-flags '("-DBUILD_SHARED_LIBS=ON")))
+    (home-page "https://github.com/google/zopfli")
+    (synopsis "Very good, but slow, deflate or zlib compression")
+    (description "Zopfli Compression Algorithm is a compression library
+programmed in C to perform very good, but slow, deflate or zlib compression.
+ZopfliCompress supports the deflate, gzip and zlib output formats.  This
+library can only compress, not decompress; existing zlib or deflate libraries
+can decompress the data.")
+    (license license:asl2.0)))
+
 (define-public zpaq
   (package
     (name "zpaq")
@@ -1452,7 +1463,7 @@ functionality in a C++ iostream.")
         (string-append "PREFIX="
                        (assoc-ref %outputs "out")))))
     (native-inputs
-     `(("perl" ,perl)))                 ; for pod2man
+     (list perl))                 ; for pod2man
     (home-page "http://mattmahoney.net/dc/zpaq.html")
     (synopsis "Incremental journaling archiver")
     (description "ZPAQ is a command-line archiver for realistic situations with
@@ -1516,7 +1527,7 @@ or junctions, and always follows hard links.")
             (base32 "1k5cw6vnpja8yjlnhx5124xrw9i8s1l539hfdqqrqz3l5gn0bnyd"))
            (file-name "unshield-the-feeble-files-spanish.zip")))))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (arguments
      `(#:out-of-source? #f
        #:phases
@@ -1564,15 +1575,14 @@ or junctions, and always follows hard links.")
 (define-public zstd
   (package
     (name "zstd")
-    (version "1.4.4")
+    (version "1.5.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://github.com/facebook/zstd/releases/download/"
                            "v" version "/zstd-" version ".tar.gz"))
        (sha256
-        (base32 "05ckxap00qvc0j51d3ci38150cxsw82w7s9zgd5fgzspnzmp1vsr"))))
-    (replacement zstd/fixed)
+        (base32 "150y541303vnvfhd8wkbih00lfvvm98rd12yijwlbkqzg3xgp52i"))))
     (build-system gnu-build-system)
     (outputs '("out"                    ;1.2MiB executables and documentation
                "lib"                    ;1.2MiB shared library and headers
@@ -1580,6 +1590,26 @@ or junctions, and always follows hard links.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'remove-bogus-check
+           (lambda _
+             ;; lib/Makefile falsely claims that no .pc file can be created.
+             (substitute* "lib/Makefile"
+               (("error configured .*dir ")
+                "true "))
+             #t))
+         (add-after 'unpack 'patch-command-file-names
+           ;; Don't require hard requirements to be in $PATH.
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (our (lambda (name) (string-append out "/bin/" name))))
+               (substitute* "programs/zstdgrep"
+                 (("(:-)(grep)" _ prefix command)
+                  (string-append prefix (which command)))
+                 (("(:-)(zstdcat)" _ prefix command)
+                  (string-append prefix (our command))))
+               (substitute* "programs/zstdless"
+                 (("zstdcat" command)
+                  (our command))))))
          (delete 'configure)            ;no configure script
          (add-after 'install 'adjust-library-locations
            (lambda* (#:key outputs #:allow-other-keys)
@@ -1599,17 +1629,16 @@ or junctions, and always follows hard links.")
                ;; Make sure the pkg-config file refers to the right output.
                (substitute* (string-append shared-libs "/pkgconfig/libzstd.pc")
                  (("^prefix=.*")
-                  (string-append "prefix=" lib "\n")))
-
-               #t))))
+                  ;; Note: The .pc file expects a trailing slash for 'prefix'.
+                  (string-append "prefix=" lib "/\n")))))))
        #:make-flags
-       ;; TODO: Integrate in next rebuild cycle.
-       (list ,(if (%current-target-system)
-                (string-append "CC=" (cc-for-target))
-                "CC=gcc")
-             (string-append "PREFIX=" (assoc-ref %outputs "out"))
-             (string-append "LIBDIR=" (assoc-ref %outputs "lib") "/lib")
-             (string-append "INCLUDEDIR=" (assoc-ref %outputs "lib") "/include")
+       (list ,(string-append "CC=" (cc-for-target))
+             (string-append "prefix=" (assoc-ref %outputs "out"))
+             (string-append "libdir=" (assoc-ref %outputs "lib") "/lib")
+             (string-append "includedir=" (assoc-ref %outputs "lib") "/include")
+             ;; Auto-detection is over-engineered and buggy.
+             "PCLIBDIR=lib"
+             "PCINCDIR=include"
              ;; Skip auto-detection of, and creating a dependency on, the build
              ;; environment's ‘xz’ for what amounts to a dubious feature anyway.
              "HAVE_LZMA=0"
@@ -1632,17 +1661,6 @@ speed.")
                    license:public-domain ; zlibWrapper/examples/fitblk*
                    license:zlib))))      ; zlibWrapper/{gz*.c,gzguts.h}
 
-(define zstd/fixed
-  (package
-    (inherit zstd)
-    (source
-     (origin
-       (inherit (package-source zstd))
-       (patches
-        (search-patches
-         ;; From Ubuntu focal-security
-         "zstd-CVE-2021-24031_CVE-2021-24032.patch"))))))
-
 (define-public pzstd
   (package/inherit zstd
     (name "pzstd")
@@ -1701,7 +1719,7 @@ the actual decompression, the other input and output.")
         (base32
          "0sb3h3067pzf3a7mlxn1hikpcjrsvycjcnj9hl9b1c3ykcgvps7h"))))
     (build-system gnu-build-system)
-    (inputs `(("bzip2" ,bzip2)))
+    (inputs (list bzip2))
     (arguments
      `(#:tests? #f ; no test target
        #:make-flags (let ((out (assoc-ref %outputs "out")))
@@ -1755,8 +1773,32 @@ Compression ratios of 2:1 to 3:1 are common for text files.")
                                 "unzip-attribs-overflow.patch"
                                 "unzip-overflow-on-invalid-input.patch"
                                 "unzip-format-secure.patch"
-                                "unzip-overflow-long-fsize.patch"))))
-    (replacement unzip/fixed)
+                                "unzip-overflow-long-fsize.patch"
+
+                                ;; From Fedora
+                                "unzip-alt-iconv-utf8.patch"
+                                "unzip-alt-iconv-utf8-print.patch"
+                                "unzip-fix-recmatch.patch"
+                                "unzip-case-insensitive.patch"
+                                "unzip-close.patch"
+                                "unzip-COVSCAN-fix-unterminated-string.patch"
+                                "unzip-CVE-2016-9844.patch"
+                                "unzip-CVE-2018-1000035.patch"
+                                "unzip-CVE-2018-18384.patch"
+                                "unzip-exec-shield.patch"
+                                "unzip-manpage-fix.patch"
+                                "unzip-overflow.patch"
+                                "unzip-timestamp.patch"
+                                "unzip-valgrind.patch"
+                                "unzip-x-option.patch"
+                                ;; CVE-2019-13232
+                                "unzip-zipbomb-manpage.patch"
+                                "unzip-zipbomb-part1.patch"
+                                "unzip-zipbomb-part2.patch"
+                                "unzip-zipbomb-part3.patch"
+
+                                ;; https://github.com/madler/unzip/issues/2
+                                "unzip-32bit-zipbomb-fix.patch"))))
     (build-system gnu-build-system)
     ;; no inputs; bzip2 is not supported, since not compiled with BZ_NO_STDIO
     (arguments
@@ -1792,57 +1834,6 @@ recreates the stored directory structure by default.")
     (license (license:non-copyleft "file://LICENSE"
                                    "See LICENSE in the distribution."))))
 
-(define unzip/fixed
-  (package
-    (inherit unzip)
-    (version "6.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "mirror://sourceforge/infozip"
-                           "/UnZip%206.x%20%28latest%29/UnZip%206.0/unzip60.tar.gz"))
-       (sha256
-        (base32
-         "0dxx11knh3nk95p2gg2ak777dd11pr7jx5das2g49l262scrcv83"))
-       (patches (search-patches "unzip-CVE-2014-8139.patch"
-                                "unzip-CVE-2014-8140.patch"
-                                "unzip-CVE-2014-8141.patch"
-                                "unzip-CVE-2014-9636.patch"
-                                "unzip-CVE-2015-7696.patch"
-                                "unzip-CVE-2015-7697.patch"
-                                "unzip-allow-greater-hostver-values.patch"
-                                "unzip-initialize-symlink-flag.patch"
-                                "unzip-remove-build-date.patch"
-                                "unzip-attribs-overflow.patch"
-                                "unzip-overflow-on-invalid-input.patch"
-                                "unzip-format-secure.patch"
-                                "unzip-overflow-long-fsize.patch"
-
-                                ;; From Fedora
-                                "unzip-alt-iconv-utf8.patch"
-                                "unzip-alt-iconv-utf8-print.patch"
-                                "unzip-fix-recmatch.patch"
-                                "unzip-case-insensitive.patch"
-                                "unzip-close.patch"
-                                "unzip-COVSCAN-fix-unterminated-string.patch"
-                                "unzip-CVE-2016-9844.patch"
-                                "unzip-CVE-2018-1000035.patch"
-                                "unzip-CVE-2018-18384.patch"
-                                "unzip-exec-shield.patch"
-                                "unzip-manpage-fix.patch"
-                                "unzip-overflow.patch"
-                                "unzip-timestamp.patch"
-                                "unzip-valgrind.patch"
-                                "unzip-x-option.patch"
-                                ;; CVE-2019-13232
-                                "unzip-zipbomb-manpage.patch"
-                                "unzip-zipbomb-part1.patch"
-                                "unzip-zipbomb-part2.patch"
-                                "unzip-zipbomb-part3.patch"
-
-                                ;; https://github.com/madler/unzip/issues/2
-                                "unzip-32bit-zipbomb-fix.patch"))))))
-
 (define-public ziptime
   (let ((commit "2a5bc9dfbf7c6a80e5f7cb4dd05b4036741478bc")
         (revision "0"))
@@ -1895,39 +1886,21 @@ timestamps in the file header with a fixed time (1 January 2008).
 (define-public zziplib
   (package
     (name "zziplib")
-    (version "0.13.69")
+    (version "0.13.72")
     (home-page "https://github.com/gdraheim/zziplib")
     (source (origin
               (method git-fetch)
               (uri (git-reference (url home-page)
                                   (commit (string-append "v" version))))
               (file-name (git-file-name name version))
-              (patches (search-patches "zziplib-CVE-2018-16548.patch"))
               (sha256
                (base32
-                "0fbk9k7ryas2wh2ykwkvm1pbi40i88rfvc3dydh9xyd7w2jcki92"))))
-    (replacement zziplib/fixed)
-    (build-system gnu-build-system)
-    (arguments
-     `(#:phases (modify-phases %standard-phases
-                  (add-before 'check 'make-files-writable
-                    (lambda _
-                      (for-each make-file-writable
-                                (find-files "test" #:directories? #t))
-                      #t)))
-
-       ;; XXX: The default test target attempts to download external resources and
-       ;; fails without error: <https://github.com/gdraheim/zziplib/issues/53>.
-       ;; To prevent confusing log messages, just run a simple zip test that works.
-       #:test-target "check-readme"))
+                "0i6bpa2b13z19alm6ig80364dnin1w28cvif18k6wkkb0w3dzp8y"))))
+    (build-system cmake-build-system)
     (inputs
-     `(("zlib" ,zlib)))
-    (native-inputs `(("perl" ,perl)     ; for the documentation
-                     ("pkg-config" ,pkg-config)
-                     ;; for the documentation; Python 3 not supported,
-                     ;; http://forums.gentoo.org/viewtopic-t-863161-start-0.html
-                     ("python" ,python-2)
-                     ("zip" ,zip))) ; to create test files
+     (list zlib))
+    (native-inputs (list perl ; for the documentation
+                         pkg-config python zip)) ; to create test files
     (synopsis "Library for accessing zip files")
     (description
      "ZZipLib is a library based on zlib for accessing zip files.")
@@ -1935,40 +1908,6 @@ timestamps in the file header with a fixed time (1 January 2008).
     ;; files carry the Zlib license; see "docs/copying.html" for details.
     (license (list license:lgpl2.0+ license:mpl1.1))))
 
-(define-public zziplib/fixed
-  (package
-    (inherit zziplib)
-    (name "zziplib")
-    (version "0.13.72")
-    (home-page "https://github.com/gdraheim/zziplib")
-    (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
-                "0i6bpa2b13z19alm6ig80364dnin1w28cvif18k6wkkb0w3dzp8y"))))
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'install 'install-compatibility-symlinks
-           (lambda* (#:key outputs #:allow-other-keys)
-             (with-directory-excursion
-               (string-append (assoc-ref outputs "out") "/lib")
-               (map (lambda (lib new-symlink)
-                      (symlink lib new-symlink))
-                    (list "libzzip.so.13" "libzzipfseeko.so.13"
-                          "libzzipmmapped.so.13" "libzzipwrap.so.13")
-                    (list "libzzip-0.so.13" "libzzipfseeko-0.so.13"
-                          "libzzipmmapped-0.so.13" "libzzipwrap-0.so.13")))
-             #t)))))
-    (native-inputs
-     `(("python" ,python)
-       ,@(alist-delete "python"
-                       (package-native-inputs zziplib))))
-    (build-system cmake-build-system)))
-
 (define-public libzip
   (package
     (name "libzip")
@@ -1981,14 +1920,10 @@ timestamps in the file header with a fixed time (1 January 2008).
                (base32
                 "0zn9vaiwy2izj8cnm8i7c2mbdn38n328grqb8f07x55s4kd3nxph"))))
     (native-inputs
-     `(("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list perl pkg-config))
     (inputs
-     `(("gnutls" ,gnutls)
-       ("liblzma" ,xz)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)
-       ("zstd:lib" ,zstd "lib")))
+     (list gnutls xz openssl zlib
+           `(,zstd "lib")))
     (build-system cmake-build-system)
     (home-page "https://libzip.org")
     (synopsis "C library for reading, creating, and modifying zip archives")
@@ -2022,8 +1957,7 @@ archive can be reverted.")
                                "/bin/file'")))
              #t)))))
     (inputs
-     `(("perl" ,perl)
-       ("file" ,file)))
+     (list perl file))
     (home-page "https://www.nongnu.org/atool/")
     (synopsis  "Universal tool to manage file archives of various types")
     (description "The main command is @command{aunpack} which extracts files
@@ -2127,7 +2061,7 @@ corrupted input.")
         (base32 "19zinpx7hssl6r3vilpvq2s7wha3545xan8b0vcvsxnyipdx3n0l"))))
     (build-system gnu-build-system)
     (inputs
-     `(("lzlib" ,lzlib)))
+     (list lzlib))
     (home-page "https://www.nongnu.org/lzip/plzip.html")
     (synopsis "Parallel lossless data compressor for the lzip format")
     (description
@@ -2159,19 +2093,52 @@ single-member files which can't be decompressed in parallel.")
    (build-system cmake-build-system)
    (arguments
     `(#:tests? #f))
-   (inputs `(("boost" ,boost)
-             ("libiconv" ,libiconv)
-             ("xz" ,xz)))
-   (native-inputs `(("pkg-config" ,pkg-config)))
+   (inputs (list boost libiconv xz))
+   (native-inputs (list pkg-config))
    (home-page "https://constexpr.org/innoextract/")
    (synopsis "Tool for extracting Inno Setup installers")
    (description "innoextract allows extracting Inno Setup installers under
 non-Windows systems without running the actual installer using wine.")
    (license license:zlib)))
 
-(define-public google-brotli
+(define-public isa-l
+  (package
+   (name "isa-l")
+   (version "2.30.0")
+   (source
+    (origin
+     (method git-fetch)
+     (uri (git-reference
+           (url "https://github.com/intel/isa-l")
+           ;; Corresponds to tag v2.30.0
+           (commit "2df39cf5f1b9ccaa2973f6ef273857e4dc46f0cf")))
+     (file-name (git-file-name name version))
+     (sha256
+      (base32 "06ymkrf3hkkd94i59ahm79545rk709y8rd0v2l86w38z6is942q0"))))
+   (build-system gnu-build-system)
+   (native-inputs (list autoconf automake libtool nasm))
+   (home-page "https://github.com/intel/isa-l")
+   (synopsis "Intelligent storage acceleration library")
+   (description "ISA-L is a collection of optimized low-level functions
+targeting storage applications.  ISA-L includes:
+
+@itemize
+@item Erasure codes: fast block Reed-Solomon type erasure codes for any
+  encode/decode matrix;
+@item CRC: fast implementations of cyclic redundancy check.  Six different
+  polynomials supported: iscsi32, ieee32, t10dif, ecma64, iso64, jones64;
+@item Raid: calculate and operate on XOR and P+Q parity found in common RAID
+  implementations;
+@item Compression: fast deflate-compatible data compression;
+@item De-compression: fast inflate-compatible data compression;
+@item igzip: command line application like gzip, accelerated with ISA-L.
+@end itemize
+")
+   (license license:bsd-3)))
+
+(define-public brotli
   (package
-    (name "google-brotli")
+    (name "brotli")
     (version "1.0.9")
     (source
      (origin
@@ -2222,20 +2189,21 @@ with @code{deflate} but offers more dense compression.
 The specification of the Brotli Compressed Data Format is defined in RFC 7932.")
     (license license:expat)))
 
-(define-public brotli
-  ;; We used to provide an older version under the name "brotli".
-  (deprecated-package "brotli" google-brotli))
+(define-public google-brotli
+  (deprecated-package "google-brotli" brotli))
 
-(define-public python-google-brotli
+(define-public python-brotli
   (package
-    (inherit google-brotli)
-    (name "python-google-brotli")
+    (inherit brotli)
+    (name "python-brotli")
     (build-system python-build-system)
     (arguments '())
-    (synopsis "Python interface to google-brotli")
-    (description "@code{python-google-brotli} provides a Python interface to
-@code{google-brotli}, an implementation of the Brotli lossless compression
-algorithm.")))
+    (synopsis "Python interface to Brotli")
+    (description "This package provides a Python interface to the @code{brotli}
+package, an implementation of the Brotli lossless compression algorithm.")))
+
+(define-public python-google-brotli
+  (deprecated-package "python-google-brotli" python-brotli))
 
 (define-public ucl
   (package
@@ -2277,10 +2245,9 @@ decompression is a little bit slower.")
              (patches (search-patches "upx-CVE-2021-20285.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (inputs
-     `(("ucl" ,ucl)
-       ("zlib" ,zlib)))
+     (list ucl zlib))
     (arguments
      `(#:make-flags
        (list "all")
@@ -2310,7 +2277,7 @@ libraries by around 50%--70%, thus reducing disk space, network load times,
 download times, and other distribution and storage costs.")
     (license license:gpl2+)))
 
-(define-public quazip
+(define-public quazip-0
   (package
     (name "quazip")
     (version "0.9.1")
@@ -2327,10 +2294,9 @@ download times, and other distribution and storage costs.")
     (arguments
      `(#:tests? #f))                    ;no test
     (native-inputs
-     `(("doxygen" ,doxygen)))
+     (list doxygen))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("zlib" ,zlib)))
+     (list qtbase-5 zlib))
     (home-page "https://stachenov.github.io/quazip/index.html")
     (synopsis "Qt/C++ wrapper for Minizip")
     (description "QuaZIP is a simple C++ wrapper over Gilles Vollant's
@@ -2342,11 +2308,26 @@ API, and that means that you can also use QTextStream, QDataStream or
 whatever you would like to use on your zipped files.
 
 QuaZIP provides complete abstraction of the ZIP/UNZIP API, for both
-reading from and writing to ZIP archives. ")
+reading from and writing to ZIP archives.")
     ;; Project is distributed under LGPL, but "quazip/z*" "quazip/unzip.*" are
     ;; distributed under zlib terms.
     (license (list license:lgpl2.1+ license:zlib))))
 
+(define-public quazip
+  (package
+    (inherit quazip-0)
+    (name "quazip")
+    (version "1.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/stachenov/quazip")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1dwld7jxhjz9l33lrqwvklazdy7ygi6n1m4ry1n1sk5dnschrhby"))))))
+
 (define-public zchunk
   (package
     (name "zchunk")
@@ -2370,10 +2351,9 @@ reading from and writing to ZIP archives. ")
                          (string-append (assoc-ref inputs "zstd")
                                         "/bin/zstd"))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("curl" ,curl)
-       ("zstd" ,zstd)))
+     (list curl zstd))
     (propagated-inputs
      `(("zstd:lib" ,zstd "lib")))       ;in Requires.private of zck.pc
     (home-page "https://github.com/zchunk/zchunk")
@@ -2430,7 +2410,7 @@ To download a zchunk file.
                    make-flags))))))
     (native-inputs
      ;; Needed to extract the source tarball and run the test suite.
-     `(("lzip" ,lzip)))
+     (list lzip))
     (home-page "https://www.nongnu.org/zutils/zutils.html")
     (synopsis "Utilities that transparently operate on compressed files")
     (description
@@ -2482,8 +2462,8 @@ at run time, and must be installed separately.")
                   (bin (string-append (assoc-ref %outputs "out") "/bin"))
                   (target (string-append bin "/" name))
                   (python (string-append (assoc-ref %build-inputs "python") "/bin"))
-                  (7z (string-append (assoc-ref %build-inputs "p7zip") "/bin/7z"))
-                  (unzip (string-append (assoc-ref %build-inputs "unzip") "/bin/unzip")))
+                  (7z (search-input-file %build-inputs "/bin/7z"))
+                  (unzip (search-input-file %build-inputs "/bin/unzip")))
              (setenv "PATH" (string-append (getenv "PATH") ":" python))
              (mkdir-p bin)
              (copy-file source target)
@@ -2500,7 +2480,7 @@ possibly untrusted extraction shell script.")
 (define-public ncompress
   (package
     (name "ncompress")
-    (version "4.2.4.6")
+    (version "5.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -2510,13 +2490,13 @@ possibly untrusted extraction shell script.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "1a4yir1ilafz0nzxdwigj204j4yy2zljbc501nsaqqm3dxdap8zn"))))
+                "090kksxrlqnsdc76fzz2j2ajc98mhmfwyn163ca2ia9niqmlpcm0"))))
     (arguments
-     '(#:make-flags (list "CC=gcc"
+     `(#:make-flags (list (string-append "CC=" ,(cc-for-target))
                           (string-append "BINDIR=" %output "/bin")
                           (string-append "MANDIR=" %output "/share/man/man1"))
        #:phases (modify-phases %standard-phases
-                  (delete 'configure))))
+                  (delete 'configure)))) ; no configure script
     (build-system gnu-build-system)
     (home-page "https://github.com/vapier/ncompress/")
     (synopsis "Original Lempel-Ziv compress/uncompress programs")
@@ -2541,13 +2521,10 @@ file compression algorithm.")
         (base32 "00adrjpxqlaccrwjf65w3vhxfswdj0as8aj263c6f9b85llypc5v"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("intltool" ,intltool)
-       ("libxslt" ,libxslt)
-       ("pkg-config" ,pkg-config)))
+     (list gettext-minimal intltool libxslt pkg-config))
     (inputs
-     `(("adwaita-icon-theme" ,adwaita-icon-theme) ; hard-coded theme
-       ("gtk+" ,gtk+)))
+     (list adwaita-icon-theme ; hard-coded theme
+           gtk+))
     (home-page "https://github.com/ib/xarchiver")
     (synopsis "Graphical front-end for archive operations")
     (description "Xarchiver is a front-end to various command line archiving
@@ -2605,6 +2582,18 @@ chunks.")
                (base32
                 "1ywq8j70149859vvs19wgjq89d6xsvvmvm2n1dmkzpchxgrvnw70"))))
     (build-system cmake-build-system)
+    (arguments
+     `(#:configure-flags
+       '("-DDEACTIVATE_AVX2=ON"
+         "-DPREFER_EXTERNAL_LZ4=ON"
+         "-DPREFER_EXTERNAL_SNAPPY=ON"
+         "-DPREFER_EXTERNAL_ZLIB=ON"
+         "-DPREFER_EXTERNAL_ZSTD=ON")))
+    (inputs
+     `(("lz4" ,lz4)
+       ("snappy" ,snappy)
+       ("zlib" ,zlib)
+       ("zstd:lib" ,zstd "lib")))
     (home-page "https://blosc.org")
     (synopsis "Blocking, shuffling and lossless compression library")
     (description
@@ -2673,7 +2662,7 @@ to their original, binary CD format.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "https://github.com/ebiggers/libdeflate")
     (synopsis "Library for DEFLATE/zlib/gzip compression and decompression")
     (description "Libdeflate is a library for fast, whole-buffer DEFLATE-based
@@ -2700,9 +2689,9 @@ compression and decompression.  The supported formats are:
         (base32 "1x5dw03lcwfigcv97cg70gkbkfycjmv1012s9lwnl4izvl9235qg"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("lzip" ,lzip)))
+     (list lzip))
     (inputs
-     `(("lzlib" ,lzlib)))
+     (list lzlib))
     (home-page "https://www.nongnu.org/lzip/tarlz.html")
     (synopsis "Combination of the tar archiver and the lzip compressor")
     (description
@@ -2714,3 +2703,64 @@ resulting multimember tar.lz archive is fully backward compatible with standard
 tar tools like GNU tar, which treat it like any other tar.lz archive.  Tarlz
 can append files to the end of such compressed archives.")
     (license license:gpl2+)))
+
+(define-public libcbor
+  (package
+    (name "libcbor")
+    (version "0.8.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/PJK/libcbor")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256 (base32 "01dv4vxcmbvpphqy16vqiwh25wx11x630js5wfnx7cryarsh9ld7"))))
+    (build-system cmake-build-system)
+    (arguments
+     '(#:configure-flags
+       (let* ((out (assoc-ref %outputs "out"))
+              (lib (string-append out "/lib")))
+         (list
+          "-DCMAKE_BUILD_TYPE=Release"
+          "-DBUILD_SHARED_LIBS=ON"
+          "-DCBOR_CUSTOM_ALLOC=ON"
+          (string-append "-DCMAKE_INSTALL_LIBDIR=" lib)
+          (string-append "-DCMAKE_INSTALL_RPATH=" lib)))))
+    (synopsis "The C library for parsing and generating CBOR")
+    (description
+     "The Concise Binary Object Representation (CBOR) is a data format whose
+design goals include the possibility of extremely small code size, fairly
+small message size, and extensibility without the need for version
+negotiation.  These design goals make it different from earlier binary
+serializations such as ASN.1 and MessagePack.")
+    (license license:expat)
+    (home-page "https://github.com/PJK/libcbor")))
+
+(define-public fcrackzip
+  (package
+    (name "fcrackzip")
+    (version "1.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://oldhome.schmorp.de/marc/data/"
+                                  "fcrackzip-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0l1qsk949vnz18k4vjf3ppq8p497966x4c7f2yx18x8pk35whn2a"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list
+      #:phases
+      '(modify-phases %standard-phases
+         (add-after 'unpack 'fix-reference-to-unzip
+           (lambda _
+             (substitute* "main.c"
+               (("\"unzip")
+                (string-append "\"" (which "unzip")))))))))
+    (inputs
+     (list perl unzip))
+    (home-page "http://oldhome.schmorp.de/marc/fcrackzip.html")
+    (synopsis "Zip password cracker")
+    (description "Fcrackzip is a Zip file password cracker.")
+    (license license:gpl2+)))
diff --git a/gnu/packages/compton.scm b/gnu/packages/compton.scm
index 2a5f3bff27..290e06478b 100644
--- a/gnu/packages/compton.scm
+++ b/gnu/packages/compton.scm
@@ -58,25 +58,21 @@
          (file-name (git-file-name name version))))
       (build-system gnu-build-system)
       (inputs
-       `(("dbus" ,dbus)
-         ("libconfig" ,libconfig)
-         ("libx11" ,libx11)
-         ("libxcomposite" ,libxcomposite)
-         ("libxdamage" ,libxdamage)
-         ("libxext" ,libxext)
-         ("libxfixes" ,libxfixes)
-         ("libxinerama" ,libxinerama)
-         ("libxrandr" ,libxrandr)
-         ("libxrender" ,libxrender)
-         ("mesa" ,mesa)
-         ("xprop" ,xprop)
-         ("xwininfo" ,xwininfo)))
+       (list dbus
+             libconfig
+             libx11
+             libxcomposite
+             libxdamage
+             libxext
+             libxfixes
+             libxinerama
+             libxrandr
+             libxrender
+             mesa
+             xprop
+             xwininfo))
       (native-inputs
-       `(("asciidoc" ,asciidoc)
-         ("libdrm" ,libdrm)
-         ("pkg-config" ,pkg-config)
-         ("python" ,python)
-         ("xorgproto" ,xorgproto)))
+       (list asciidoc libdrm pkg-config python xorgproto))
       (arguments
        `(#:make-flags (list
                        "CC=gcc"
@@ -127,23 +123,21 @@ performance).
        (file-name (string-append "picom-" version))))
     (build-system meson-build-system)
     (inputs
-     `(("dbus" ,dbus)
-       ("libconfig" ,libconfig)
-       ("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libev" ,libev)
-       ("mesa" ,mesa)
-       ("xprop" ,xprop)
-       ("xcb-util-renderutil" ,xcb-util-renderutil)
-       ("xcb-util-image" ,xcb-util-image)
-       ("pixman" ,pixman)
-       ("uthash" ,uthash)
-       ("libxdg-basedir" ,libxdg-basedir)
-       ("pcre" ,pcre)))
+     (list dbus
+           libconfig
+           libx11
+           libxext
+           libev
+           mesa
+           xprop
+           xcb-util-renderutil
+           xcb-util-image
+           pixman
+           uthash
+           libxdg-basedir
+           pcre))
     (native-inputs
-     `(("asciidoc" ,asciidoc)
-       ("pkg-config" ,pkg-config)
-       ("xorgproto" ,xorgproto)))
+     (list asciidoc pkg-config xorgproto))
     (arguments
      `(#:build-type "release"
        #:configure-flags '("-Dwith_docs=true")))
diff --git a/gnu/packages/configuration-management.scm b/gnu/packages/configuration-management.scm
index 9aee13a172..c64b937fe5 100644
--- a/gnu/packages/configuration-management.scm
+++ b/gnu/packages/configuration-management.scm
@@ -48,56 +48,56 @@
        ;; We don't need to install the source code for end-user applications.
        #:install-source? #f))
     (native-inputs
-     `(("go-github-com-masterminds-sprig" ,go-github-com-masterminds-sprig)
-       ("go-github-com-masterminds-goutils" ,go-github-com-masterminds-goutils)
-       ("go-github-com-masterminds-semver" ,go-github-com-masterminds-semver)
-       ("go-github-com-google-uuid" ,go-github-com-google-uuid)
-       ("go-github-com-huandu-xstrings" ,go-github-com-huandu-xstrings)
-       ("go-github-com-imdario-mergo" ,go-github-com-imdario-mergo)
-       ("go-github-com-mitchellh-reflectwalk" ,go-github-com-mitchellh-reflectwalk)
-       ("go-github-com-mitchellh-copystructure" ,go-github-com-mitchellh-copystructure)
-       ("go-github-com-bmatcuk-doublestar" ,go-github-com-bmatcuk-doublestar)
-       ("go-github-com-charmbracelet-glamour" ,go-github-com-charmbracelet-glamour)
-       ("go-github-com-alecthomas-chroma" ,go-github-com-alecthomas-chroma)
-       ("go-github-com-coreos-go-semver" ,go-github-com-coreos-go-semver)
-       ("go-github-com-danwakefield-fnmatch" ,go-github-com-danwakefield-fnmatch)
-       ("go-github-com-dlclark-regexp2" ,go-github-com-dlclark-regexp2)
-       ("go-github-go-git" ,go-github-go-git)
-       ("go-github-com-google-go-github" ,go-github-com-google-go-github)
-       ("go-github-com-google-go-querystring" ,go-github-com-google-go-querystring)
-       ("go-github-com-google-renameio" ,go-github-com-google-renameio)
-       ("go-github-com-microcosm-cc-bluemonday",go-github-com-microcosm-cc-bluemonday)
-       ("go-github-com-aymerick-douceur" ,go-github-com-aymerick-douceur)
-       ("go-github-com-chris-ramon-douceur" ,go-github-com-chris-ramon-douceur)
-       ("go-github-com-gorilla-css" ,go-github-com-gorilla-css)
-       ("go-github-com-muesli-reflow-ansi" ,go-github-com-muesli-reflow-ansi)
-       ("go-github-com-muesli-reflow-wordwrap" ,go-github-com-muesli-reflow-wordwrap)
-       ("go-github-com-muesli-reflow-indent" ,go-github-com-muesli-reflow-indent)
-       ("go-github-com-muesli-reflow-padding" ,go-github-com-muesli-reflow-padding)
-       ("go-github-com-muesli-termenv" ,go-github-com-muesli-termenv)
-       ("go-github-com-google-goterm" ,go-github-com-google-goterm)
-       ("go-golang-org-colorful" ,go-golang-org-colorful)
-       ("go-github-com-mattn-go-isatty" ,go-github-com-mattn-go-isatty)
-       ("go-github.com-mattn-go-runewidth" ,go-github.com-mattn-go-runewidth)
-       ("go-github-com-olekukonko-tablewriter" ,go-github-com-olekukonko-tablewriter)
-       ("go-github-com-pelletier-go-toml" ,go-github-com-pelletier-go-toml)
-       ("go-github-com-pkg-diff" ,go-github-com-pkg-diff)
-       ("go-github-com-sergi-go-diff" ,go-github-com-sergi-go-diff)
-       ("go-github-com-spf13-cobra" ,go-github-com-spf13-cobra)
-       ("go-github-com-spf13-viper" ,go-github-com-spf13-viper)
-       ("go-github-com-twpayne-go-shell" ,go-github-com-twpayne-go-shell)
-       ("go-github-com-twpayne-go-vfs" ,go-github-com-twpayne-go-vfs)
-       ("go-github-com-twpayne-go-vfsafero" ,go-github-com-twpayne-go-vfsafero)
-       ("go-github-com-twpayne-go-xdg" ,go-github-com-twpayne-go-xdg)
-       ("go-github-com-yuin-goldmark" ,go-github-com-yuin-goldmark)
-       ("go-github-com-zalando-go-keyring" ,go-github-com-zalando-go-keyring)
-       ("go-github-com-godbus-dbus" ,go-github-com-godbus-dbus)
-       ("go-etcd-io-bbolt" ,go-etcd-io-bbolt)
-       ("go-golang-org-x-crypto" ,go-golang-org-x-crypto)
-       ("go-golang-org-x-net" ,go-golang-org-x-net)
-       ("go-golang-org-x-oauth2" ,go-golang-org-x-oauth2)
-       ("go-github-com-rogpeppe-go-internal" ,go-github-com-rogpeppe-go-internal)
-       ("gopkg-in-errgo-fmt-errors" ,gopkg-in-errgo-fmt-errors)))
+     (list go-github-com-masterminds-sprig
+           go-github-com-masterminds-goutils
+           go-github-com-masterminds-semver
+           go-github-com-google-uuid
+           go-github-com-huandu-xstrings
+           go-github-com-imdario-mergo
+           go-github-com-mitchellh-reflectwalk
+           go-github-com-mitchellh-copystructure
+           go-github-com-bmatcuk-doublestar
+           go-github-com-charmbracelet-glamour
+           go-github-com-alecthomas-chroma
+           go-github-com-coreos-go-semver
+           go-github-com-danwakefield-fnmatch
+           go-github-com-dlclark-regexp2
+           go-github-go-git
+           go-github-com-google-go-github
+           go-github-com-google-go-querystring
+           go-github-com-google-renameio
+           go-github-com-microcosm-cc-bluemonday
+           go-github-com-aymerick-douceur
+           go-github-com-chris-ramon-douceur
+           go-github-com-gorilla-css
+           go-github-com-muesli-reflow-ansi
+           go-github-com-muesli-reflow-wordwrap
+           go-github-com-muesli-reflow-indent
+           go-github-com-muesli-reflow-padding
+           go-github-com-muesli-termenv
+           go-github-com-google-goterm
+           go-golang-org-colorful
+           go-github-com-mattn-go-isatty
+           go-github.com-mattn-go-runewidth
+           go-github-com-olekukonko-tablewriter
+           go-github-com-pelletier-go-toml
+           go-github-com-pkg-diff
+           go-github-com-sergi-go-diff
+           go-github-com-spf13-cobra
+           go-github-com-spf13-viper
+           go-github-com-twpayne-go-shell
+           go-github-com-twpayne-go-vfs
+           go-github-com-twpayne-go-vfsafero
+           go-github-com-twpayne-go-xdg
+           go-github-com-yuin-goldmark
+           go-github-com-zalando-go-keyring
+           go-github-com-godbus-dbus
+           go-etcd-io-bbolt
+           go-golang-org-x-crypto
+           go-golang-org-x-net
+           go-golang-org-x-oauth2
+           go-github-com-rogpeppe-go-internal
+           gopkg-in-errgo-fmt-errors))
     (home-page "https://www.chezmoi.io/")
     (synopsis "Personal configuration files manager")
     (description "This package helps to manage personal configuration files
diff --git a/gnu/packages/conky.scm b/gnu/packages/conky.scm
index ad4d396289..9843cbe3c0 100644
--- a/gnu/packages/conky.scm
+++ b/gnu/packages/conky.scm
@@ -74,20 +74,20 @@
                (install-file "src/conky" bin))
              #t)))))
     (inputs
-     `(("freetype" ,freetype)
-       ("imlib2" ,imlib2)
-       ("libx11" ,libx11)
-       ("libxdamage" ,libxdamage)
-       ("libxext" ,libxext)
-       ("libxft" ,libxft)
-       ("libxinerama" ,libxinerama)
-       ("pulseaudio" ,pulseaudio)
-       ("lua" ,lua)
-       ("ncurses" ,ncurses)
-       ("curl" ,curl)
-       ("wireless-tools" ,wireless-tools)))
+     (list freetype
+           imlib2
+           libx11
+           libxdamage
+           libxext
+           libxft
+           libxinerama
+           pulseaudio
+           lua
+           ncurses
+           curl
+           wireless-tools))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "Lightweight system monitor for X")
     (description
      "Conky is a lightweight system monitor for X that displays operating
diff --git a/gnu/packages/connman.scm b/gnu/packages/connman.scm
index 7268af4c8b..f2ebfc95eb 100644
--- a/gnu/packages/connman.scm
+++ b/gnu/packages/connman.scm
@@ -71,22 +71,22 @@
      `(("pkg-config" ,pkg-config)
        ("python" ,python-wrapper)))
     (inputs
-     `(("dbus" ,dbus)
-       ("glib" ,glib)
-       ("gnutls" ,gnutls)
-       ("iptables" ,iptables)
-       ("libmnl" ,libmnl)
-       ("lz4" ,lz4)                     ; required by openconnect.pc
-       ("readline" ,readline)
-       ;; These inputs are needed for connman to include the interface to
-       ;; these technologies so IF they are installed they can be used.
-       ;; TODO: add neard, ofono
-       ("openconnect" ,openconnect)
-       ("openvpn" ,openvpn)
-       ("ppp" ,ppp)
-       ("vpnc" ,vpnc)
-       ("wpa-supplicant" ,wpa-supplicant)
-       ("xl2tpd" ,xl2tpd)))
+     (list dbus
+           glib
+           gnutls
+           iptables
+           libmnl
+           lz4 ; required by openconnect.pc
+           readline
+           ;; These inputs are needed for connman to include the interface to
+           ;; these technologies so IF they are installed they can be used.
+           ;; TODO: add neard, ofono
+           openconnect
+           openvpn
+           ppp
+           vpnc
+           wpa-supplicant
+           xl2tpd))
     (home-page "https://01.org/connman")
     (synopsis "Connection management daemon")
     (description "Connman provides a daemon for managing Internet connections.
@@ -123,9 +123,9 @@ sharing) to clients via USB, ethernet, WiFi, cellular and Bluetooth.")
              (let* ((out (assoc-ref outputs "out"))
                     (bin (string-append out "/bin/econnman-bin")))
                (wrap-program bin
-                 `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH"))))
+                 `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH"))))
                #t))))))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (inputs
      `(("efl" ,efl)
        ("python" ,python-wrapper)
@@ -150,9 +150,9 @@ sharing) to clients via USB, ethernet, WiFi, cellular and Bluetooth.")
        (sha256
         (base32 "0jn12wxwjznady6aniwmvahg1dj25p902sdwj0070biv6vx5c7dq"))))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (native-inputs
-     `(("qttools" ,qttools)))
+     (list qttools))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
diff --git a/gnu/packages/containers.scm b/gnu/packages/containers.scm
new file mode 100644
index 0000000000..c978be75ff
--- /dev/null
+++ b/gnu/packages/containers.scm
@@ -0,0 +1,346 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2021 Timmy Douglas <mail@timmydouglas.com>
+;;; Copyright © 2022 Tobias Geerinckx-Rice <me@tobias.gr>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages containers)
+  #:use-module (guix gexp)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (gnu packages)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix git-download)
+  #:use-module (guix build-system gnu)
+  #:use-module (guix build-system go)
+  #:use-module (guix build-system meson)
+  #:use-module (guix utils)
+  #:use-module (gnu packages admin)
+  #:use-module (gnu packages autotools)
+  #:use-module (gnu packages base)
+  #:use-module (gnu packages bash)
+  #:use-module (gnu packages check)
+  #:use-module (gnu packages compression)
+  #:use-module (gnu packages glib)
+  #:use-module (gnu packages gnupg)
+  #:use-module (gnu packages golang)
+  #:use-module (gnu packages linux)
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages networking)
+  #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages selinux)
+  #:use-module (gnu packages version-control)
+  #:use-module (gnu packages virtualization)
+  #:use-module (gnu packages web))
+
+(define-public crun
+  (let ((commit "8e5757a4e68590326dafe8a8b1b4a584b10a1370"))
+    (package
+      (name "crun")
+      (version "1.3")
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/containers/crun")
+               (commit commit)
+               (recursive? #t)))
+         (sha256
+          (base32 "01yiss2d57kwlxb7zlqzjwlg9fyaf19yjngd1mw9n4hxls3dfj3k"))
+         (file-name (git-file-name name version))))
+      (build-system gnu-build-system)
+      (arguments
+       `(#:configure-flags '("--disable-systemd")
+         #:tests? #f ; XXX: needs /sys/fs/cgroup mounted
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'do-not-depend-on-git
+             (lambda _
+               (substitute* "autogen.sh"
+                 (("^git submodule update.*")
+                  ""))
+               (with-output-to-file "git-version.h"
+                 (lambda ()
+                   (display (string-append
+                             "/* autogenerated.  */\n#ifndef GIT_VERSION\n# define GIT_VERSION \""
+                             ,commit
+                             "\"\n#endif\n"))))))
+           (add-after 'unpack 'fix-tests
+             (lambda _
+               (substitute* (find-files "tests" "\\.(c|py)")
+                 (("/bin/true") (which "true"))
+                 (("/bin/false") (which "false"))
+                 ; relies on sd_notify which requires systemd?
+                 (("\"sd-notify\" : test_sd_notify,") "")
+                 (("\"sd-notify-file\" : test_sd_notify_file,") "")))))))
+      (inputs
+       (list libcap
+             libseccomp
+             libyajl))
+      (native-inputs
+       (list automake
+             autoconf
+             git
+             libtool
+             pkg-config
+             python-3))
+      (home-page "https://github.com/containers/crun")
+      (synopsis "Open Container Initiative (OCI) Container runtime")
+      (description
+       "crun is a fast and low-memory footprint Open Container Initiative (OCI)
+Container Runtime fully written in C.")
+      (license license:gpl2+))))
+
+(define-public conmon
+  (package
+    (name "conmon")
+    (version "2.0.31")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/containers/conmon")
+             (commit (string-append "v" version))))
+       (sha256
+        (base32 "1cxklcihb2i4ywli0fxafkp2gi1x831r37z7spnigaj6pzj1517w"))
+       (file-name (git-file-name name version))))
+    (build-system gnu-build-system)
+    (arguments
+     (list #:make-flags
+           #~(list (string-append "CC=" #$(cc-for-target))
+                   (string-append "PREFIX=" #$output))
+           ;; XXX: uses `go get` to download 50 packages, runs a ginkgo test suite
+           ;; then tries to download busybox and use a systemd logging library
+           ;; see also https://github.com/containers/conmon/blob/main/nix/derivation.nix
+           #:tests? #f
+           #:test-target "test"
+           #:phases
+           #~(modify-phases %standard-phases
+               (delete 'configure)
+               (add-after 'unpack 'set-env
+                 (lambda _
+                   ;; when running go, things fail because
+                   ;; HOME=/homeless-shelter.
+                   (setenv "HOME" "/tmp"))))))
+    (inputs
+     (list crun
+           glib
+           libseccomp))
+    (native-inputs
+     (list git
+           go
+           pkg-config))
+    (home-page "https://github.com/containers/conmon")
+    (synopsis "Monitoring tool for Open Container Initiative (OCI) runtime")
+    (description
+     "Conmon is a monitoring program and communication tool between a container
+manager (like Podman or CRI-O) and an Open Container Initiative (OCI)
+runtime (like runc or crun) for a single container.")
+    (license license:asl2.0)))
+
+(define-public libslirp
+  (package
+    (name "libslirp")
+    (version "4.6.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://gitlab.freedesktop.org/slirp/libslirp")
+             (commit (string-append "v" version))))
+       (sha256
+        (base32 "1b4cn51xvzbrxd63g6w1033prvbxfxsnsn1l0fa5i311xv28vkh0"))
+       (file-name (git-file-name name version))))
+    (build-system meson-build-system)
+    (inputs
+     (list glib))
+    (native-inputs
+     (list pkg-config))
+    (home-page "https://gitlab.freedesktop.org/slirp/libslirp")
+    (synopsis "User-mode networking library")
+    (description
+     "libslirp is a user-mode networking library used by virtual machines,
+containers or various tools.")
+    (license license:bsd-3)))
+
+(define-public slirp4netns
+  (package
+    (name "slirp4netns")
+    (version "1.1.12")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/rootless-containers/slirp4netns")
+             (commit (string-append "v" version))))
+       (sha256
+        (base32 "03llv4dlf7qqxwz4zdyk926g4bigfj2gb50glm70ciflpvzs8081"))
+       (file-name (git-file-name name version))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:tests? #f ; XXX: open("/dev/net/tun"): No such file or directory
+       #:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'fix-hardcoded-paths
+                    (lambda _
+                      (substitute* (find-files "tests" "\\.sh")
+                        (("ping") "/run/setuid-programs/ping")))))))
+    (inputs
+     (list glib
+           libcap
+           libseccomp
+           libslirp))
+    (native-inputs
+     (list automake
+           autoconf
+           iproute ; iproute, jq, nmap (ncat) and util-linux are for tests
+           jq
+           nmap
+           pkg-config
+           util-linux))
+    (home-page "https://github.com/rootless-containers/slirp4netns")
+    (synopsis "User-mode networking for unprivileged network namespaces")
+    (description
+     "slirp4netns provides user-mode networking (\"slirp\") for unprivileged
+network namespaces.")
+    (license license:gpl2+)))
+
+(define-public cni-plugins
+  (package
+    (name "cni-plugins")
+    (version "1.0.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/containernetworking/plugins")
+             (commit (string-append "v" version))))
+       (sha256
+        (base32 "1j91in0mg4nblpdccyq63ncbnn2pc2zzjp1fh3jy0bsndllgv0nc"))
+       (file-name (git-file-name name version))))
+    (build-system go-build-system)
+    (arguments
+     `(#:unpack-path "github.com/containernetworking/plugins"
+       #:tests? #f ; XXX: see stat /var/run below
+       #:phases (modify-phases %standard-phases
+                  (replace 'build
+                    (lambda _
+                      (with-directory-excursion
+                          "src/github.com/containernetworking/plugins"
+                        (invoke "./build_linux.sh"))))
+                  (replace 'check
+                    (lambda* (#:key tests? #:allow-other-keys)
+                      ; only pkg/ns tests run without root
+                      (when tests?
+                        (with-directory-excursion
+                            "src/github.com/containernetworking/plugins/pkg/ns"
+                          (invoke "stat" "/var/run") ; XXX: test tries to stat this directory
+                          (invoke "unshare" "-rmn" "go" "test")))))
+                  (add-before 'check 'set-test-environment
+                    (lambda _
+                      (setenv "XDG_RUNTIME_DIR" "/tmp/cni-rootless")))
+                  (replace 'install
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      (copy-recursively
+                       "src/github.com/containernetworking/plugins/bin"
+                       (string-append (assoc-ref outputs "out") "/bin")))))))
+    (native-inputs
+     (list util-linux))
+    (home-page "https://github.com/containernetworking/plugins")
+    (synopsis "Container Network Interface (CNI) network plugins")
+    (description
+     "This package provides Container Network Interface (CNI) plugins to
+configure network interfaces in Linux containers.")
+    (license license:asl2.0)))
+
+;; For podman to work, the user needs to run
+;; `sudo mount -t cgroup2 none /sys/fs/cgroup`
+
+(define-public podman
+  (package
+    (name "podman")
+    (version "3.4.4")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/containers/podman")
+             (commit (string-append "v" version))))
+       (sha256
+        (base32 "1q09qsl1wwiiy5njvb97n1j5f5jin4ckmzj5xbdfs28czb2kx3g5"))
+       (file-name (git-file-name name version))))
+
+    (build-system gnu-build-system)
+    (arguments
+     `(#:make-flags (list ,(string-append "CC=" (cc-for-target))
+                          (string-append "PREFIX=" %output))
+       #:tests? #f ; /sys/fs/cgroup not set up in guix sandbox
+       #:test-target "test"
+       #:phases (modify-phases %standard-phases
+                  (delete 'configure)
+                  (add-after 'unpack 'set-env
+                    (lambda* (#:key inputs #:allow-other-keys)
+                      ;; when running go, things fail because
+                      ;; HOME=/homeless-shelter.
+                      (setenv "HOME" "/tmp")))
+                  (replace 'check
+                    (lambda* (#:key tests? #:allow-other-keys)
+                      (when tests?
+                        ;; (invoke "strace" "-f" "bin/podman" "version")
+                        (invoke "make" "localsystem")
+                        (invoke "make" "remotesystem"))))
+                  (add-after 'unpack 'fix-hardcoded-paths
+                    (lambda _
+                      (substitute* (find-files "libpod" "\\.go")
+                        (("exec.LookPath[(][\"]slirp4netns[\"][)]")
+                         (string-append "exec.LookPath(\""
+                                        (which "slirp4netns") "\")")))
+                      (substitute* "hack/install_catatonit.sh"
+                        (("CATATONIT_PATH=\"[^\"]+\"")
+                         (string-append "CATATONIT_PATH=" (which "true"))))
+                      (substitute* "vendor/github.com/containers/common/pkg/config/config_linux.go"
+                        (("/usr/local/libexec/podman")
+                         (string-append (assoc-ref %outputs "out") "/bin")))
+                      (substitute* "vendor/github.com/containers/common/pkg/config/default.go"
+                        (("/usr/libexec/podman/conmon") (which "conmon"))
+                        (("/usr/local/libexec/cni")
+                         (string-append (assoc-ref %build-inputs "cni-plugins")
+                                        "/bin"))
+                        (("/usr/bin/crun") (which "crun"))))))))
+    (inputs
+     (list btrfs-progs
+           cni-plugins
+           conmon
+           crun
+           gpgme
+           go-github-com-go-md2man
+           iptables
+           libassuan
+           libseccomp
+           libselinux
+           slirp4netns))
+    (native-inputs
+     (list bats
+           git
+           go
+           ; strace ; XXX debug
+           pkg-config))
+    (home-page "https://podman.io")
+    (synopsis "Manage containers, images, pods, and their volumes")
+    (description
+     "Podman (the POD MANager) is a tool for managing containers and images,
+volumes mounted into those containers, and pods made from groups of
+containers.")
+    (license license:asl2.0)))
diff --git a/gnu/packages/convmv.scm b/gnu/packages/convmv.scm
index 9e6f141818..a7a5129566 100644
--- a/gnu/packages/convmv.scm
+++ b/gnu/packages/convmv.scm
@@ -50,7 +50,7 @@
              (patch-shebang "suite/parsable_tester.pl")
              #t)))))
     (inputs
-     `(("perl" ,perl)))
+     (list perl))
     (synopsis "Convert filenames between character sets")
     (description
      "convmv is a file renamer, that converts between different encodings,
diff --git a/gnu/packages/cook.scm b/gnu/packages/cook.scm
index ba13709eda..7a064480d4 100644
--- a/gnu/packages/cook.scm
+++ b/gnu/packages/cook.scm
@@ -70,17 +70,17 @@
 
              (setenv "SH" (which "sh"))
              #t)))))
-    (native-inputs `(("bison" ,bison)
-                     ;; For building the documentation:
-                     ("groff" ,groff)
-                     ;; For the tests:
-                     ("sharutils" ,sharutils)
-                     ;; One test wants rsh.  However there is no rsh server
-                     ;; running in the build environment and so far as I'm
-                     ;; aware, it cannot be started without root.
-                     ;; This test is therefore just skipped.
-                     ;; ("inetutils" ,inetutils)
-                     ("ed" ,ed)))
+    (native-inputs (list bison
+                         ;; For building the documentation:
+                         groff
+                         ;; For the tests:
+                         sharutils
+                         ;; One test wants rsh.  However there is no rsh server
+                         ;; running in the build environment and so far as I'm
+                         ;; aware, it cannot be started without root.
+                         ;; This test is therefore just skipped.
+                         ;; ("inetutils" ,inetutils)
+                         ed))
     (home-page (string-append "https://web.archive.org/web/20140727122520/"
                               "http://miller.emu.id.au/pmiller/software/cook/"))
     (synopsis "Tool for constructing files")
diff --git a/gnu/packages/coq.scm b/gnu/packages/coq.scm
index 4ad172c6b0..b523ccb065 100644
--- a/gnu/packages/coq.scm
+++ b/gnu/packages/coq.scm
@@ -7,6 +7,7 @@
 ;;; Copyright © 2020 raingloom <raingloom@riseup.net>
 ;;; Copyright © 2020 Robin Green <greenrd@greenrd.org>
 ;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
+;;; Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -48,10 +49,10 @@
   #:use-module (guix utils)
   #:use-module ((srfi srfi-1) #:hide (zip)))
 
-(define-public coq
+(define-public coq-core
   (package
-    (name "coq")
-    (version "8.13.2")
+    (name "coq-core")
+    (version "8.14.1")
     (source
      (origin
        (method git-fetch)
@@ -61,24 +62,29 @@
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "15r0cm3p9dlsxbg0lf05njjp1xi1y74vxvq6drxjykax67x95l8a"))))
+         "0q634fmrh5ivpxy7ammdiqdh9xp72ji2726vcz1bd55ln0d08z40"))
+       (patches (search-patches "coq-fix-envvars.patch"))))
     (native-search-paths
      (list (search-path-specification
             (variable "COQPATH")
-            (files (list "lib/coq/user-contrib")))
+            (files (list "lib/ocaml/site-lib/coq/user-contrib"
+                         "lib/coq/user-contrib")))
            (search-path-specification
-            (variable "COQLIB")
-            (files (list "lib/ocaml/site-lib/coq"))
+            (variable "COQLIBPATH")
+            (files (list "lib/ocaml/site-lib/coq")))
+           (search-path-specification
+            (variable "COQCORELIB")
+            (files (list "lib/ocaml/site-lib/coq-core"))
             (separator #f))))
     (build-system dune-build-system)
     (inputs
-     `(("gmp" ,gmp)
-       ("ocaml-zarith" ,ocaml-zarith)))
+     (list gmp ocaml-zarith))
     (native-inputs
-     `(("which" ,which)))
+     (list ocaml-ounit2 which))
     (arguments
-     `(#:package "coq"
-       #:test-target "test-suite"))
+     `(#:package "coq-core"
+       #:test-target "."))
+    (properties '((upstream-name . "coq"))) ; also for inherited packages
     (home-page "https://coq.inria.fr")
     (synopsis "Proof assistant for higher-order logic")
     (description
@@ -89,6 +95,28 @@ It is developed using Objective Caml and Camlp5.")
     ;; Some of the documentation is distributed under opl1.0+.
     (license (list license:lgpl2.1 license:opl1.0+))))
 
+(define-public coq-stdlib
+  (package
+    (inherit coq-core)
+    (name "coq-stdlib")
+    (arguments
+     `(#:package "coq-stdlib"
+       #:test-target "."))
+    (inputs
+     (list coq-core gmp ocaml-zarith))
+    (native-inputs '())))
+
+(define-public coq
+  (package
+    (inherit coq-core)
+    (name "coq")
+    (arguments
+     `(#:package "coq"
+       #:test-target "."))
+    (propagated-inputs
+     (list coq-core coq-stdlib))
+    (native-inputs '())))
+
 (define-public coq-ide-server
   (package
     (inherit coq)
@@ -97,9 +125,7 @@ It is developed using Objective Caml and Camlp5.")
      `(#:tests? #f
        #:package "coqide-server"))
     (inputs
-     `(("coq" ,coq)
-       ("gmp" ,gmp)
-       ("ocaml-zarith" ,ocaml-zarith)))))
+     (list coq gmp ocaml-zarith))))
 
 (define-public coq-ide
   (package
@@ -109,17 +135,16 @@ It is developed using Objective Caml and Camlp5.")
      `(#:tests? #f
        #:package "coqide"))
     (propagated-inputs
-     `(("coq" ,coq)
-       ("coq-ide-server" ,coq-ide-server)))
+     (list coq coq-ide-server))
     (inputs
      `(("lablgtk3" ,lablgtk3)))))
 
 (define-public proof-general
   ;; The latest release is from 2016 and there has been more than 450 commits
   ;; since then.
-  ;; Commit from 2021-06-07.
-  (let ((commit "bc86736abb728ec0d28abc90ef0adae21d29a66a")
-        (revision "0"))
+  ;; Commit from 2021-11-25.
+  (let ((commit "1b1083e86e0cddc20ff2f1a6b25c7a7eee2edf02")
+        (revision "1"))
     (package
       (name "proof-general")
       (version (git-version "4.4" revision commit))
@@ -131,65 +156,80 @@ It is developed using Objective Caml and Camlp5.")
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "00cga3n9nj2xa3ivb0fdkkdx3k11fp4879y188738631yd1x2lsa"))))
+                  "1pnysczhscapgwmvf6ix7f31lf3hnh8h977bfll1m7jlxl9b9c0j"))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("which" ,which)
-         ("emacs" ,emacs-minimal)
+       `(("emacs" ,emacs-minimal)
          ("texinfo" ,texinfo)))
       (inputs
-       `(("host-emacs" ,emacs)
-         ("perl" ,perl)
-         ("coq" ,coq)))
+       (list perl))
       (arguments
-       `(#:tests? #f                   ; no check target
-         #:make-flags (list (string-append "PREFIX=" %output)
-                            (string-append "DEST_PREFIX=" %output)
-                            (string-append "ELISP_START=" %output
-                                           "/share/emacs/site-lisp/ProofGeneral"))
-         #:modules ((guix build gnu-build-system)
-                    (guix build utils)
-                    (guix build emacs-utils))
-         #:imported-modules (,@%gnu-build-system-modules
-                             (guix build emacs-utils))
-         #:phases
-         (modify-phases %standard-phases
-           (delete 'configure)
-           (add-after 'unpack 'disable-byte-compile-error-on-warn
-             (lambda _
-               (substitute* "Makefile"
-                 (("\\(setq byte-compile-error-on-warn t\\)")
-                  "(setq byte-compile-error-on-warn nil)"))))
-           (add-after 'unpack 'patch-hardcoded-paths
-             (lambda* (#:key inputs outputs #:allow-other-keys)
-               (let ((out   (assoc-ref outputs "out"))
-                     (coq   (assoc-ref inputs "coq"))
-                     (emacs (assoc-ref inputs "host-emacs")))
+       (let ((base-directory "/share/emacs/site-lisp/ProofGeneral"))
+         `(#:tests? #f                  ; no check target
+           #:make-flags (list (string-append "PREFIX=" %output)
+                              (string-append "EMACS=" (assoc-ref %build-inputs "emacs")
+                                             "/bin/emacs")
+                              (string-append "DEST_PREFIX=" %output)
+                              (string-append "ELISP=" %output ,base-directory)
+                              (string-append "DEST_ELISP=" %output ,base-directory)
+                              (string-append "ELISP_START=" %output ,base-directory))
+           #:phases
+           (modify-phases %standard-phases
+             (delete 'configure)
+             (add-after 'unpack 'disable-byte-compile-error-on-warn
+               (lambda _
+                 (substitute* "Makefile"
+                   (("\\(setq byte-compile-error-on-warn t\\)")
+                    "(setq byte-compile-error-on-warn nil)"))))
+             (add-after 'unpack 'patch-hardcoded-paths
+               (lambda _
                  (substitute* "Makefile"
-                   (("/sbin/install-info") "install-info")))))
-           (add-after 'unpack 'clean
-             (lambda _
-               ;; Delete the pre-compiled elc files for Emacs 23.
-               (invoke "make" "clean")))
-           (add-after 'install 'install-doc
-             (lambda* (#:key make-flags #:allow-other-keys)
-               ;; XXX FIXME avoid building/installing pdf files,
-               ;; due to unresolved errors building them.
-               (substitute* "Makefile"
-                 ((" [^ ]*\\.pdf") ""))
-               (apply invoke "make" "install-doc" make-flags))))))
+                   (("/sbin/install-info") "install-info"))))
+             (add-after 'unpack 'remove-which
+               (lambda _
+                 (substitute* "Makefile"
+                   (("`which perl`") "perl")
+                   (("`which bash`") "bash"))))
+             (add-after 'unpack 'clean
+               (lambda _
+                 ;; Delete the pre-compiled elc files for Emacs 23.
+                 (invoke "make" "clean")))
+             (add-after 'install 'install-doc
+               (lambda* (#:key make-flags #:allow-other-keys)
+                 ;; XXX FIXME avoid building/installing pdf files,
+                 ;; due to unresolved errors building them.
+                 (substitute* "Makefile"
+                   ((" [^ ]*\\.pdf") ""))
+                 (apply invoke "make" "install-doc" make-flags)))
+             (add-after 'install 'allow-subfolders-autoloads
+               ;; Autoload cookies are present in sub-directories.  A friendly
+               ;; wrapper proof-general.el around generic/proof-site.el is
+               ;; provided for execution on Emacs start-up.  It serves two
+               ;; purposes:
+               ;;
+               ;; * Setting up the load path when byte-compiling pg.
+               ;; * Loading a minimal PG setup on startup (not all of Proof
+               ;; General, of course; mostly mode hooks and autoloads).
+               ;;
+               ;; The renaming to proof-general-autoloads.el is Guix
+               ;; specific.
+               (lambda* (#:key outputs #:allow-other-keys)
+                 (let ((out (assoc-ref outputs "out")))
+                   (copy-file "proof-general.el"
+                              (string-append out ,base-directory
+                                             "/proof-general-autoloads.el")))))))))
       (home-page "https://proofgeneral.github.io/")
       (synopsis "Generic front-end for proof assistants based on Emacs")
       (description
        "Proof General is a major mode to turn Emacs into an interactive proof
 assistant to write formal mathematical proofs using a variety of theorem
 provers.")
-      (license license:gpl2+))))
+      (license license:gpl3+))))
 
 (define-public coq-flocq
   (package
     (name "coq-flocq")
-    (version "3.3.1")
+    (version "3.4.2")
     (source
      (origin
        (method git-fetch)
@@ -199,26 +239,16 @@ provers.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "01gdykva0lcw6y3dm8j0djxayb87szfg9vn0mxd6z3pks644misl"))))
+         "0j7vq7ifqcdaj2x881aha2rl51l2p72y1cn7r2xya0fjgsssfigy"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("ocaml" ,ocaml)
-       ("which" ,which)
-       ("coq" ,coq)))
+     (list autoconf automake ocaml which coq))
     (arguments
      `(#:configure-flags
-       (list (string-append "--libdir=" (assoc-ref %outputs "out")
-                            "/lib/coq/user-contrib/Flocq"))
+       (list (string-append "COQUSERCONTRIB=" (assoc-ref %outputs "out")
+                            "/lib/coq/user-contrib"))
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'remove-failing-examples
-           (lambda _
-             (substitute* "Remakefile.in"
-               ;; Fails on a union error.
-               (("Double_rounding_odd_radix.v") ""))
-             #t))
          (add-before 'configure 'fix-remake
            (lambda _
              (substitute* "remake.cpp"
@@ -235,7 +265,7 @@ provers.")
          (replace 'install
            (lambda _
              (invoke "./remake" "install"))))))
-    (home-page "https://flocq.gforge.inria.fr/")
+    (home-page "https://flocq.gitlabpages.inria.fr")
     (synopsis "Floating-point formalization for the Coq system")
     (description "Flocq (Floats for Coq) is a floating-point formalization for
 the Coq system.  It provides a comprehensive library of theorems on a multi-radix
@@ -246,7 +276,7 @@ inside Coq.")
 (define-public coq-gappa
   (package
     (name "coq-gappa")
-    (version "1.4.6")
+    (version "1.5.0")
     (source
      (origin
        (method git-fetch)
@@ -256,24 +286,21 @@ inside Coq.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0492i0ksrz6dnc1d57jzsbmdlb9fp9hrh9ib5v8j0yqxpyi0x8f4"))))
+         "1ivh8xm1c8191rm4riamjzya2x6ls96qax5byir1fywf9hbxr1vg"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("ocaml" ,ocaml)
-       ("which" ,which)
-       ("coq" ,coq)
-       ("camlp5" ,camlp5)
-       ("bison" ,bison)
-       ("flex" ,flex)))
+     (list autoconf
+           automake
+           ocaml
+           which
+           coq
+           camlp5
+           bison
+           flex))
     (inputs
-     `(("gmp" ,gmp)
-       ("mpfr" ,mpfr)
-       ("ocaml-zarith" ,ocaml-zarith)
-       ("boost" ,boost)))
+     (list gmp mpfr ocaml-zarith boost))
     (propagated-inputs
-     `(("coq-flocq" ,coq-flocq)))
+     (list coq-flocq))
     (arguments
      `(#:configure-flags
        (list (string-append "COQUSERCONTRIB=" (assoc-ref %outputs "out")
@@ -293,7 +320,7 @@ inside Coq.")
          ;;   (lambda _ (invoke "./remake" "check")))
          (replace 'install
            (lambda _ (invoke "./remake" "install"))))))
-    (home-page "https://gappa.gforge.inria.fr/")
+    (home-page "https://gappa.gitlabpages.inria.fr/")
     (synopsis "Verify and formally prove properties on numerical programs")
     (description "Gappa is a tool intended to help verifying and formally proving
 properties on numerical programs dealing with floating-point or fixed-point
@@ -307,7 +334,7 @@ assistant.")
 (define-public coq-mathcomp
   (package
     (name "coq-mathcomp")
-    (version "1.12.0")
+    (version "1.13.0")
     (source
      (origin
        (method git-fetch)
@@ -316,25 +343,20 @@ assistant.")
              (commit (string-append "mathcomp-" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "12cgrmzlcjnp9kv9zxsk34fgf0qfa35jdb23cbf13kmg8dyfi3h5"))))
+        (base32 "0aj8hsdzzds5w0p1858s2b6k9zssjcxa6kgpi0q1nvaml4zfpkcc"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("ocaml" ,ocaml)
-       ("which" ,which)
-       ("coq" ,coq)))
+     (list ocaml which coq))
     (arguments
      `(#:tests? #f ; No tests.
+       #:make-flags (list (string-append "COQLIBINSTALL="
+                                         (assoc-ref %outputs "out")
+                                         "/lib/coq/user-contrib"))
        #:phases
        (modify-phases %standard-phases
          (delete 'configure)
          (add-before 'build 'chdir
-           (lambda _ (chdir "mathcomp") #t))
-         (replace 'install
-           (lambda* (#:key outputs #:allow-other-keys)
-             (invoke "make" "-f" "Makefile.coq"
-                     (string-append "COQLIB=" (assoc-ref outputs "out")
-                                    "/lib/coq/")
-                     "install"))))))
+           (lambda _ (chdir "mathcomp") #t)))))
     (home-page "https://math-comp.github.io/")
     (synopsis "Mathematical Components for Coq")
     (description "Mathematical Components for Coq has its origins in the formal
@@ -349,7 +371,7 @@ part of the distribution.")
 (define-public coq-coquelicot
   (package
     (name "coq-coquelicot")
-    (version "3.1.0")
+    (version "3.2.0")
     (source
      (origin
        (method git-fetch)
@@ -359,20 +381,16 @@ part of the distribution.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0mz3pxan1237fr5fi79c66y7b9z7bmi0sc45kwrmkczsjm5462jm"))))
+         "146s5y2xsc7wb43m1pq1n4p14hw99gqbzx0ic3a4naxq16v7cv4w"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("ocaml" ,ocaml)
-       ("which" ,which)
-       ("coq" ,coq)))
+     (list autoconf automake ocaml which coq))
     (propagated-inputs
      `(("mathcomp" ,coq-mathcomp)))
     (arguments
      `(#:configure-flags
-       (list (string-append "--libdir=" (assoc-ref %outputs "out")
-                            "/lib/coq/user-contrib/Coquelicot"))
+       (list (string-append "COQUSERCONTRIB=" (assoc-ref %outputs "out")
+                            "/lib/coq/user-contrib"))
        #:phases
        (modify-phases %standard-phases
          (add-before 'configure 'fix-remake
@@ -402,7 +420,7 @@ theorems between the two libraries.")
 (define-public coq-bignums
   (package
     (name "coq-bignums")
-    (version "8.13.0")
+    (version "8.14.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -411,14 +429,12 @@ theorems between the two libraries.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1n66i7hd9222b2ks606mak7m4f0dgy02xgygjskmmav6h7g2sx7y"))))
+                "0jsgdvj0ddhkls32krprp34r64y1rb5mwxl34fgaxk2k4664yq06"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("ocaml" ,ocaml)
-       ("coq" ,coq)))
+     (list ocaml coq))
     (inputs
-     `(("camlp5" ,camlp5)
-       ("ocaml-zarith" ,ocaml-zarith)))
+     (list camlp5 ocaml-zarith))
     (arguments
      `(#:tests? #f ; No test target.
        #:make-flags
@@ -436,7 +452,7 @@ provides BigN, BigZ, BigQ that used to be part of Coq standard library.")
 (define-public coq-interval
   (package
     (name "coq-interval")
-    (version "4.3.0")
+    (version "4.3.1")
     (source
      (origin
        (method git-fetch)
@@ -446,14 +462,10 @@ provides BigN, BigZ, BigQ that used to be part of Coq standard library.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1jqvd17czhliscf40idhnxgrha620039ilrdyfahn71dg2jmzqnm"))))
+         "0sr9psildc0sda07r2r47rfgyry49yklk38bg04yyvry5j5pryb6"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("ocaml" ,ocaml)
-       ("which" ,which)
-       ("coq" ,coq)))
+     (list autoconf automake ocaml which coq))
     (propagated-inputs
      `(("flocq" ,coq-flocq)
        ("bignums" ,coq-bignums)
@@ -477,7 +489,7 @@ provides BigN, BigZ, BigQ that used to be part of Coq standard library.")
            (lambda _ (invoke "./remake" "check")))
          (replace 'install
            (lambda _ (invoke "./remake" "install"))))))
-    (home-page "http://coq-interval.gforge.inria.fr/")
+    (home-page "https://coqinterval.gitlabpages.inria.fr/")
     (synopsis "Coq tactics to simplify inequality proofs")
     (description "Interval provides vernacular files containing tactics for
 simplifying the proofs of inequalities on expressions of real numbers for the
@@ -503,18 +515,14 @@ Coq proof assistant.")
       (build-system gnu-build-system)
       (arguments
        `(#:tests? #f
+       #:make-flags (list (string-append "COQLIBINSTALL="
+                                         (assoc-ref %outputs "out")
+                                         "/lib/coq/user-contrib"))
          #:phases
          (modify-phases %standard-phases
-           (delete 'configure)
-           (replace 'install
-             (lambda* (#:key outputs #:allow-other-keys)
-               (setenv "COQLIB" (string-append (assoc-ref outputs "out") "/lib/coq/"))
-               (invoke "make"
-                       (string-append "COQLIB=" (assoc-ref outputs "out")
-                                      "/lib/coq/")
-                       "install"))))))
+           (delete 'configure))))
       (native-inputs
-       `(("coq" ,coq)))
+       (list coq))
       (home-page "https://www.ps.uni-saarland.de/autosubst/")
       (synopsis "Coq library for parallel de Bruijn substitutions")
       (description "Formalizing syntactic theories with variable binders is
@@ -533,36 +541,31 @@ uses Ltac to synthesize the substitution operation.")
 (define-public coq-equations
   (package
     (name "coq-equations")
-    (version "1.2.4")
+    (version "1.3")
     (source (origin
               (method git-fetch)
               (uri (git-reference
                     (url "https://github.com/mattam82/Coq-Equations")
-                    (commit (string-append "v" version "-8.13"))))
+                    (commit (string-append "v" version "-8.14"))))
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0i014lshsdflzw6h0qxra9d2f0q82vffxv2f29awbb9ad0p4rq4q"))))
+                "19bj9nncd1r9g4273h5qx35gs3i4bw5z9bhjni24b413hyj55hkv"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("ocaml"  ,ocaml)
-       ("coq"    ,coq)
-       ("camlp5" ,camlp5)))
+     (list ocaml coq camlp5))
     (inputs
-     `(("ocaml-zarith" ,ocaml-zarith)))
+     (list ocaml-zarith))
     (arguments
      `(#:test-target "test-suite"
+       #:make-flags (list (string-append "COQLIBINSTALL="
+                                         (assoc-ref %outputs "out")
+                                         "/lib/coq/user-contrib"))
        #:phases
        (modify-phases %standard-phases
          (replace 'configure
            (lambda* (#:key outputs #:allow-other-keys)
-             (invoke "sh" "./configure.sh")))
-         (replace 'install
-           (lambda* (#:key outputs #:allow-other-keys)
-             (invoke "make"
-                     (string-append "COQLIB=" (assoc-ref outputs "out")
-                                    "/lib/coq/")
-                     "install"))))))
+             (invoke "sh" "./configure.sh"))))))
     (home-page "https://mattam82.github.io/Coq-Equations/")
     (synopsis "Function definition plugin for Coq")
     (description "Equations provides a notation for writing programs
@@ -572,10 +575,57 @@ and accessibility, providing a definitional extension to the Coq
 kernel.")
     (license license:lgpl2.1)))
 
+(define-public coq-semantics
+  (package
+    (name "coq-semantics")
+    (version "8.14.0")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+              (url "https://github.com/coq-community/semantics")
+              (commit (string-append "v" version))))
+        (modules '((guix build utils)))
+        (snippet
+         '(substitute* "Makefile.coq.local"
+            ;; Num was part of OCaml and now external
+            (("-libs nums") "-use-ocamlfind -pkg num -libs num")))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32
+          "0ldrp86bfcjpzsb08p45sgs3aczjzr1gksy5dsf7pxapg05pc7ac"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     (list coq ocaml ocamlbuild ocaml-findlib))
+    (inputs
+     (list ocaml-num))
+    (arguments
+     `(#:tests? #f                      ;included in Makefile
+       #:make-flags (list (string-append "COQLIBINSTALL="
+                                         (assoc-ref %outputs "out")
+                                         "/lib/coq/user-contrib"))
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure))))
+    (home-page "https://github.com/coq-community/semantics")
+    (synopsis "Survey of semantics styles")
+    (description
+     "This package provides a survey of programming language semantics styles,
+from natural semantics through structural operational, axiomatic, and
+denotational semantics, for a miniature example of an imperative programming
+language.  Their encoding, the proofs of equivalence of different styles,
+abstract interpretation, and the proof of soundess obtained from axiomatic
+semantics or abstract interpretation is done in Coq.  The tools can be run
+inside Coq, thus making them available for proof by reflection.  Code can also
+be extracted and connected to a yacc-based parser, thanks to the use of a
+functor parameterized by a module type of strings.  A hand-written parser is
+also provided in Coq, without associated proofs.")
+    (license license:expat)))
+
 (define-public coq-stdpp
   (package
     (name "coq-stdpp")
-    (version "1.5.0")
+    (version "1.6.0")
     (synopsis "Alternative Coq standard library std++")
     (source (origin
               (method git-fetch)
@@ -585,21 +635,18 @@ kernel.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1ym0fy620imah89p8b6rii8clx2vmnwcrbwxl3630h24k42092nf"))))
+                "1l1w6srzydjg0h3f4krrfgvz455h56shyy2lbcnwdbzjkahibl7v"))))
     (build-system gnu-build-system)
     (inputs
-     `(("coq" ,coq)))
+     (list coq))
     (arguments
      `(#:tests? #f ; Tests are executed during build phase.
+       #:make-flags (list (string-append "COQLIBINSTALL="
+                                         (assoc-ref %outputs "out")
+                                         "/lib/coq/user-contrib"))
        #:phases
        (modify-phases %standard-phases
-         (delete 'configure)
-         (replace 'install
-           (lambda* (#:key outputs #:allow-other-keys)
-             (invoke "make"
-                     (string-append "COQLIB=" (assoc-ref outputs "out")
-                                    "/lib/coq/")
-                     "install"))))))
+         (delete 'configure))))
     (description "This project contains an extended \"Standard Library\" for
 Coq called coq-std++.  The key features are:
 @itemize
diff --git a/gnu/packages/cpio.scm b/gnu/packages/cpio.scm
index 58b2f45937..2f7a7b2363 100644
--- a/gnu/packages/cpio.scm
+++ b/gnu/packages/cpio.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org>
 ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2020 Marius Bakke <marius@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -35,7 +36,14 @@
                                  version ".tar.bz2"))
              (sha256
               (base32
-               "0vbgnhkawdllgnkdn6zn1f56fczwk0518krakz2qbwhxmv2vvdga"))))
+               "0vbgnhkawdllgnkdn6zn1f56fczwk0518krakz2qbwhxmv2vvdga"))
+             (modules '((guix build utils)))
+             (snippet
+              '(begin
+                 ;; Remove superfluous declaration that trips GCC 10.
+                 (substitute* "src/global.c"
+                   (("char \\*program_name;")
+                    ""))))))
     (build-system gnu-build-system)
     (home-page "https://www.gnu.org/software/cpio/")
     (synopsis "Manage cpio and tar file archives")
diff --git a/gnu/packages/cpp.scm b/gnu/packages/cpp.scm
index dce137aca9..1bae2966b9 100644
--- a/gnu/packages/cpp.scm
+++ b/gnu/packages/cpp.scm
@@ -8,9 +8,9 @@
 ;;; Copyright © 2019 Jan Wielkiewicz <tona_kosmicznego_smiecia@interia.pl>
 ;;; Copyright © 2020, 2021 Nicolò Balzarotti <nicolo@nixo.xyz>
 ;;; Copyright © 2020 Roel Janssen <roel@gnu.org>
-;;; Copyright © 2020 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
-;;; Copyright © 2020 Vinicius Monego <monego@posteo.net>
+;;; Copyright © 2020, 2021 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2020 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
 ;;; Copyright © 2020 Alexandros Theodotou <alex@zrythm.org>
@@ -18,6 +18,13 @@
 ;;; Copyright © 2020 Brett Gilio <brettg@gnu.org>
 ;;; Copyright © 2020 Milkey Mouse <milkeymouse@meme.institute>
 ;;; Copyright © 2021 Raghav Gururajan <rg@raghavgururajan.name>
+;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
+;;; Copyright © 2021 Nicolò Balzarotti <nicolo@nixo.xyz>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2021 Nikolay Korotkiy <sikmir@disroot.org>
+;;; Copyright © 2021 jgart <jgart@dismail.de>
+;;; Copyright © 2021 Julien Lepiller <julien@lepiller.eu>
+;;; Copyright © 2021 Disseminate Dissent <disseminatedissent@protonmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -69,10 +76,81 @@
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages popt)
   #:use-module (gnu packages pretty-print)
+  #:use-module (gnu packages pulseaudio)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages web)
   #:use-module (gnu packages xml))
 
+(define-public argagg
+  (let ((commit "79e4adfa2c6e2bfbe63da05cc668eb9ad5596748") (revision "0"))
+    (package
+      (name "argagg")
+      (version (git-version "0.4.6" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/vietjtnguyen/argagg")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1flkgh524lq3024p7ld5lg743s1v7qnbmgv77578rzmn2rjzr77n"))))
+      (build-system cmake-build-system)
+      (outputs '("out" "doc"))
+      (arguments
+       `(#:phases (modify-phases %standard-phases
+                    (add-after 'install 'move-doc
+                      (lambda* (#:key outputs #:allow-other-keys)
+                        (let* ((name ,(package-name argagg)) (out (assoc-ref
+                                                                   outputs
+                                                                   "out"))
+                               (doc (assoc-ref outputs "doc")))
+                          (mkdir-p (string-append doc "/share/doc"))
+                          (rename-file
+                           (string-append out "/share/doc/" name)
+                           (string-append doc "/share/doc/" name))))))))
+      (native-inputs (list doxygen))
+      (home-page "https://github.com/vietjtnguyen/argagg")
+      (synopsis "C++11 command line argument parser")
+      (description
+       "ArgAgg is yet another C++ command line argument/option
+parser.  It was written as a simple and idiomatic alternative to other
+frameworks like getopt, Boost program options, TCLAP, and others.  The goal is
+to achieve the majority of argument parsing needs in a simple manner with an
+easy to use API.")
+      (license license:expat))))
+
+(define-public asmjit
+  (let ((commit "4ec760a3d1f69e32ba460ecd2513f29b8428700b")
+        (revision "0"))
+    (package
+      (name "asmjit")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri
+          (git-reference
+           (url "https://github.com/asmjit/asmjit")
+           (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0skgccbpamcbg1byawfq5n6jzxgj64hnc7jznvk35nkskaaz1nlb"))))
+      (build-system cmake-build-system)
+      (arguments
+       (list #:configure-flags #~(list "-DASMJIT_TEST=TRUE")))
+      (home-page "https://asmjit.com/")
+      (synopsis "Machine code generation for C++")
+      (description "AsmJit is a lightweight library for machine code
+generation written in C++ language.  It can generate machine code for X86 and
+X86_64 architectures with the support for the whole instruction set from
+legacy MMX to the newest AVX-512 and AMX.  It has a type-safe API that allows
+C++ compiler to do semantic checks at compile-time even before the assembled
+code is generated or executed.  It also provides an optional register
+allocator that makes it easy to generate complex code without a significant
+development effort.")
+      (license license:zlib))))
+
 (define-public range-v3
   (package
     (name "range-v3")
@@ -86,14 +164,14 @@
          (commit version)))
        (file-name
         (git-file-name name version))
+       (patches (search-patches "range-v3-build-with-gcc10.patch"))
        (sha256
         (base32 "18230bg4rq9pmm5f8f65j444jpq56rld4fhmpham8q3vr1c1bdjh"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("perl" ,perl)))
+     (list doxygen gcc-9 perl))
     (inputs
-     `(("boost" ,boost)))
+     (list boost))
     (synopsis "Range library for C++14/17/20")
     (description "Range-v3 is an extension of the Standard Template Library that
 makes its iterators and algorithms more powerful by making them composable.
@@ -106,7 +184,7 @@ range-v3 ranges are an abstraction layer on top of iterators.")
       (license:x11-style "file:///LICENSE.txt")
       ;; SGI STL
       license:sgifreeb2.0
-      ;;; LibC++ (dual-licensed)
+;;; LibC++ (dual-licensed)
       license:expat
       license:ncsa
       ;; Others
@@ -128,13 +206,13 @@ range-v3 ranges are an abstraction layer on top of iterators.")
         (git-file-name name version))
        (patches
         (search-patches
-         "c++-gsl-find-system-gtest.patch"))
+         "c++-gsl-find-system-gtest.patch"
+         "c++-gsl-move-array-bounds-tests.patch"))
        (sha256
         (base32 "0gbvr48f03830g3154bjhw92b8ggmg6wwh5xyb8nppk9v6w752l0"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("googletest" ,googletest)
-       ("pkg-config" ,pkg-config)))
+     (list googletest pkg-config))
     (synopsis "Guidelines Support Library")
     (description "c++-gsl contains functions and types that are suggested for
 use by the C++ Core Guidelines maintained by the Standard C++ Foundation.")
@@ -144,7 +222,7 @@ use by the C++ Core Guidelines maintained by the Standard C++ Foundation.")
 (define-public libzen
   (package
     (name "libzen")
-    (version "0.4.38")
+    (version "0.4.39")
     (source (origin
               (method url-fetch)
               ;; Warning: This source has proved unreliable 1 time at least.
@@ -155,11 +233,9 @@ use by the C++ Core Guidelines maintained by the Standard C++ Foundation.")
                                   "libzen_" version ".tar.bz2"))
               (sha256
                (base32
-                "1nkygc17sndznpcf71fdrhwpm8z9a3hc9csqlafwswh49axhfkjr"))))
+                "1rwaxmid9iv65n0y6xlcyxxydsvihjni9ldxpg6pbqz43amp49xx"))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
@@ -167,8 +243,7 @@ use by the C++ Core Guidelines maintained by the Standard C++ Foundation.")
        (modify-phases %standard-phases
          (add-after 'unpack 'pre-configure
            (lambda _
-             (chdir "Project/GNU/Library")
-             #t)))))
+             (chdir "Project/GNU/Library"))))))
     (home-page "https://github.com/MediaArea/ZenLib")
     (synopsis "C++ utility library")
     (description "ZenLib is a C++ utility library.  It includes classes for handling
@@ -203,7 +278,7 @@ operating system functions.")
              (substitute* "src/unit_tests/unit_tests.cmake"
                (("misc/library_test.cpp") ""))
              #t)))))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://github.com/rttrorg/rttr/")
     (synopsis "C++ Reflection Library")
     (description
@@ -234,11 +309,9 @@ the name of the library itself, which is written in C++.")
          '("-DWITH_TESTS=ON"            ; To run the test suite
            "-DRCT_RTTI_ENABLED=ON")))
       (native-inputs
-       `(("cppunit" ,cppunit)
-         ("pkg-config" ,pkg-config)))
+       (list cppunit pkg-config))
       (inputs
-       `(("openssl" ,openssl)
-         ("zlib" ,zlib)))
+       (list openssl zlib))
       (home-page "https://github.com/Andersbakken/rct")
       (synopsis "C++ library providing Qt-like APIs on top of the STL")
       (description "Rct is a set of C++ tools that provide nicer (more Qt-like)
@@ -261,7 +334,7 @@ the name of the library itself, which is written in C++.")
        (file-name (git-file-name name version))))
     (build-system cmake-build-system)
     (arguments '(#:tests? #f))          ; no tests
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://github.com/aseba-community/dashel")
     (synopsis "Data stream helper encapsulation library")
     (description
@@ -289,7 +362,7 @@ combination of these streams.")
      `(#:configure-flags (list "-DBUILD_TESTS=ON")
        #:test-target "xtest"))
     (native-inputs
-     `(("googletest" ,googletest)))
+     (list googletest))
     (home-page "https://github.com/QuantStack/xsimd")
     (synopsis "C++ wrappers for SIMD intrinsics and math implementations")
     (description
@@ -300,6 +373,53 @@ It also provides accelerated implementation of common mathematical functions
 operating on batches.")
     (license license:bsd-3)))
 
+(define-public google-highway
+  (package
+    (name "google-highway")
+    (version "0.15.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/google/highway")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1yjwgnrpd9m99x2nqf6ld28zc6y9nlsxqg128bxxmja1gg4g4qdz"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:configure-flags (list "-DHWY_SYSTEM_GTEST=on")))
+    (native-inputs
+     (list googletest))
+    (home-page "https://github.com/google/highway")
+    (synopsis "SIMD library with runtime dispatch")
+    (description "Highway is a performance-portable, length-agnostic C++
+library for SIMD (Single Instruction, Multiple Data) with runtime dispatch.")
+    (license license:asl2.0)))
+
+(define-public xsmimd-benchmark
+  (package
+    (inherit xsimd)
+    (name "xsimd-benchmark")
+    (arguments
+     `(#:configure-flags (list "-DBUILD_BENCHMARK=ON")
+       #:tests? #f
+       #:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'remove-march=native
+                    (lambda _
+                      (substitute* "benchmark/CMakeLists.txt"
+                        (("-march=native") ""))))
+                  (replace 'install
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      ;; Install nothing but the executable.
+                      (let ((out (assoc-ref outputs "out")))
+                        (install-file "benchmark/benchmark_xsimd"
+                                      (string-append out "/bin"))))))))
+    (synopsis "Benchmark of the xsimd library")
+
+    ;; Mark as tunable to take advantage of SIMD code in xsimd/xtensor.
+    (properties '((tunable? . #t)))))
+
 (define-public chaiscript
   (package
     (name "chaiscript")
@@ -353,7 +473,7 @@ functions, class methods, and stl containers.
                 (modules '((guix build utils)))
                 (snippet '(delete-file-recursively "./test/thirdparty"))))
       (native-inputs
-       `(("catch2" ,catch-framework2-1)))
+       (list catch-framework2-1))
       (build-system cmake-build-system)
       (arguments
        `(#:phases
@@ -365,10 +485,8 @@ functions, class methods, and stl containers.
              (lambda* (#:key outputs #:allow-other-keys)
                (let* ((out (assoc-ref outputs "out"))
                       (inc (string-append out "/include/fifo_map")))
-                 (with-directory-excursion
-                     (string-append "../" ,name "-" ,version "-checkout")
-                   (install-file "src/fifo_map.hpp" inc)
-                   #t)))))))
+                 (with-directory-excursion "../source"
+                   (install-file "src/fifo_map.hpp" inc))))))))
       (synopsis "FIFO-ordered associative container for C++")
       (description "Fifo_map is a C++ header only library for associative
 container which uses the order in which keys were inserted to the container
@@ -443,15 +561,12 @@ as ordering relation.")
               (base32
                "0nzsjzlvk14dazwh7k2jb1dinb0pv9jbx5jsyn264wvva0y7daiv")))))))
     (inputs
-     `(("fifo-map" ,fifo-map)))
+     (list fifo-map))
     (synopsis "JSON parser and printer library for C++")
     (description "JSON for Modern C++ is a C++ JSON library that provides
 intuitive syntax and trivial integration.")
     (license license:expat)))
 
-(define-public nlohmann-json-cpp
-  (deprecated-package "nlohmann-json-cpp" json-modern-cxx))
-
 (define-public xtl
   (package
     (name "xtl")
@@ -467,8 +582,7 @@ intuitive syntax and trivial integration.")
                 "1kd9zl4h6nrsg29hq13vwp4zhfj8sa90vj40726lpw6vxz48k4di"))
               (file-name (git-file-name name version))))
     (native-inputs
-     `(("googletest" ,googletest)
-       ("json-modern-cxx" ,json-modern-cxx)))
+     (list googletest json-modern-cxx))
     (arguments
      `(#:configure-flags
        '("-DBUILD_TESTS=ON")
@@ -489,7 +603,7 @@ tools (containers, algorithms) used by other QuantStack packages.")
 (define-public ccls
   (package
     (name "ccls")
-    (version "0.20201219")
+    (version "0.20210330")
     (source
      (origin
        (method git-fetch)
@@ -497,16 +611,15 @@ tools (containers, algorithms) used by other QuantStack packages.")
              (url "https://github.com/MaskRay/ccls")
              (commit version)))
        (sha256
-        (base32 "0nkg92rgb1x6scpiwdamfrd1ag87j7ajxyn5qi861r916m5mh9m8"))
+        (base32 "0zzdn7c7a244djqwcsd7rvgclcdacyf9d0vkxpfspl83k2554alf"))
        (file-name (git-file-name name version))))
     (build-system cmake-build-system)
     (arguments
      '(#:tests? #f))                    ; no check target
     (inputs
-     `(("rapidjson" ,rapidjson)))
+     (list rapidjson))
     (native-inputs
-     `(("clang" ,clang)
-       ("llvm" ,llvm)))
+     (list clang llvm))
     (home-page "https://github.com/MaskRay/ccls")
     (synopsis "C/C++/Objective-C language server")
     (description
@@ -517,6 +630,49 @@ syntax highlighting.  @code{ccls} is derived from @code{cquery} which is not
 maintained anymore.")
     (license license:asl2.0)))
 
+(define-public concurrentqueue
+  (package
+    (name "concurrentqueue")
+    (version "1.0.3")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/cameron314/concurrentqueue/")
+             (commit "3747268264d0fa113e981658a99ceeae4dad05b7")))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1n5v7n27llzg7khg1jvi35jrcf9v6adw8gaic9ndxn65dp723ssy"))))
+    (build-system cmake-build-system)
+    (arguments '(#:tests? #false)) ;no check target
+    (home-page "https://github.com/cameron314/concurrentqueue/")
+    (synopsis "Multi-producer, multi-consumer lock-free concurrent queue for C++11")
+    (description
+     "This package provides a fast multi-producer, multi-consumer lock-free
+concurrent queue for C++11.")
+    (license license:bsd-2)))
+
+(define-public spscqueue
+  (package
+    (name "spscqueue")
+    (version "1.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/rigtorp/SPSCQueue/")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1428cj9x318afvnvnkhg0711iy4czqn86fi7ysgfhw91asa316rc"))))
+    (build-system cmake-build-system)
+    (home-page "https://github.com/rigtorp/SPSCQueue/")
+    (synopsis "Single producer single consumer queue written in C++11")
+    (description
+     "This package provides a single producer single consumer wait-free and
+lock-free fixed size queue written in C++11.")
+    (license license:expat)))
+
 (define-public gperftools
   (package
     (name "gperftools")
@@ -536,11 +692,9 @@ maintained anymore.")
       ;; https://bugs.gnu.org/46562
      '(#:parallel-tests? #f))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ;; For tests.
-       ("perl" ,perl)))
+     (list autoconf automake libtool
+           ;; For tests.
+           perl))
     (home-page "https://github.com/gperftools/gperftools")
     (synopsis "Multi-threaded malloc() and performance analysis tools for C++")
     (description
@@ -604,11 +758,9 @@ tools:
                  (invoke "make"))))))))
     (native-inputs
      ;; required to build shared lib
-     `(("python" ,python)))
+     (list python))
     (inputs
-     `(("brotli" ,brotli)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list brotli openssl zlib))
     (home-page "https://github.com/yhirose/cpp-httplib")
     (synopsis "C++ HTTP/HTTPS server and client library")
     (description "cpp-httplib is a C++11 single-file cross platform blocking
@@ -641,9 +793,7 @@ library.")
              #t)))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-pytest python-pytest-cov python-pytest-runner))
     (home-page "https://github.com/cpplint/cpplint")
     (synopsis "Static code checker for C++")
     (description "@code{cpplint} is a command-line tool to check C/C++ files
@@ -673,7 +823,7 @@ and make @code{cpplint} usable in wider contexts.")
       ;; Enable building of shared library.
       #:configure-flags `("-DBUILD_SHARED_LIBS=1")))
    (native-inputs
-    `(("pkg-config" ,pkg-config)))
+    (list pkg-config))
    (synopsis "Process IO library")
    (description "reproc (Redirected Process) is a C/C++ library that
 simplifies starting, stopping and communicating with external programs.  The
@@ -685,7 +835,7 @@ code and retrieving their output.")
 (define-public sobjectizer
   (package
     (name "sobjectizer")
-    (version "5.6.1")
+    (version "5.7.2.6")
     (source
      (origin
        (method git-fetch)
@@ -693,7 +843,7 @@ code and retrieving their output.")
              (url "https://github.com/Stiffstream/sobjectizer")
              (commit (string-append "v." version))))
        (sha256
-        (base32 "0jfai7sqxnnjkms38krm7mssj5l79nb3pllkbyj4j581a7l5j6l5"))
+        (base32 "0n6smpjkkkw0xab8wcpy3p0dpw2v9sxgwl6azl3am6abmv4mff12"))
        (file-name (git-file-name name version))))
     (build-system cmake-build-system)
     (arguments
@@ -781,7 +931,7 @@ point and then, after each tween step, plugging back the result.")
                (("check_target\\(gtest_main\\)") "")
                (("check_target\\(gmock\\)") "")))))))
     (native-inputs
-     `(("googletest" ,googletest)))
+     (list googletest))
     (home-page "https://abseil.io")
     (synopsis "Augmented C++ standard library")
     (description "Abseil is a collection of C++ library code designed to
@@ -854,7 +1004,7 @@ standard GNU style syntax for options.")
 (define-public folly
   (package
     (name "folly")
-    (version "2021.04.26.00")
+    (version "2021.10.04.00")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -863,7 +1013,7 @@ standard GNU style syntax for options.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0s3jb02qjl9f4gfj01pa01cilkfpc4p0gbpn6bg5vcicyj76garg"))))
+                "1h7apl42idymqra0xgw7s5ys3dxrqd8gq0f99g048k4g5fxl64s9"))))
     (build-system cmake-build-system)
     (arguments
      '(;; Tests must be explicitly enabled
@@ -871,26 +1021,23 @@ standard GNU style syntax for options.")
        ;; Leave tests disabled; see https://github.com/facebook/folly/issues/1456
        #:tests? #f))
     (propagated-inputs
-     `(("boost" ,boost)
-       ("gflags" ,gflags)
-       ("glog" ,glog)
-       ("liburing" ,liburing)))
+     (list boost gflags glog liburing))
     (inputs
-     `(("bzip2" ,bzip2)
-       ("double-conversion" ,double-conversion)
-       ("fmt" ,fmt)
-       ("libaio" ,libaio)
-       ("libevent" ,libevent)
-       ("libiberty" ,libiberty)
-       ("libsodium" ,libsodium)
-       ("libunwind" ,libunwind)
-       ("lz4" ,lz4)
-       ("openssl" ,openssl)
-       ("snappy" ,snappy)
-       ("zlib" ,zlib)
-       ("zstd" ,zstd "lib")))
+     (list bzip2
+           double-conversion
+           fmt
+           libaio
+           libevent
+           libiberty
+           libsodium
+           libunwind
+           lz4
+           openssl
+           snappy
+           zlib
+           `(,zstd "lib")))
     (native-inputs
-     `(("googletest" ,googletest)))
+     (list googletest))
     (synopsis "Collection of C++ components complementing the standard library")
     (description
      "Folly (acronymed loosely after Facebook Open Source Library) is a library
@@ -900,10 +1047,53 @@ of C++14 components that complements @code{std} and Boost.")
     (supported-systems '("aarch64-linux" "x86_64-linux"))
     (license license:asl2.0)))
 
+(define-public aws-crt-cpp
+  (let* ((commit "b6d311d76b504bf8ace5134d3fca0e672c36c9c3")
+         (revision "1"))
+    (package
+      (name "aws-crt-cpp")
+      ; Update only when updating aws-sdk-cpp, and when updating also update
+      ; versions of library dependencies linked from from
+      ; https://github.com/awslabs/aws-crt-cpp/tree/{aws-crt-cpp commit}/crt
+      (version (git-version "0.17.1" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/awslabs/aws-crt-cpp")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1n0nlbz91j3ycwwrh9652f0h5qr2sj5b1l0i5sg40ajzs7wvzd32"))))
+      (build-system cmake-build-system)
+      (arguments
+       '(#:configure-flags
+         (list "-DBUILD_DEPS=OFF"
+               "-DBUILD_SHARED_LIBS=ON"
+               (string-append "-DCMAKE_PREFIX_PATH="
+                            (assoc-ref %build-inputs "aws-c-common"))
+               "-DENABLE_NET_TESTS=OFF")))
+      (propagated-inputs
+       (list aws-c-auth
+             aws-c-cal
+             aws-c-event-stream
+             aws-c-http
+             aws-c-mqtt
+             aws-c-s3))
+      (synopsis "C++ wrapper for Amazon Web Services C libraries")
+      (description "The AWS Common Runtime (CRT) library provides a C++ wrapper
+implementation for the following @acronym{AWS,Amazon Web Services} C libraries:
+aws-c-auth, aws-c-cal, aws-c-common, aws-c-compression, aws-c-event-stream,
+aws-c-http, aws-c-io, aws-c-mqtt, aws-checksums, and s2n.")
+      (home-page "https://github.com/awslabs/aws-crt-cpp")
+      (license license:asl2.0))))
+
 (define-public aws-sdk-cpp
   (package
     (name "aws-sdk-cpp")
-    (version "1.8.159")
+    ; When updating also check for a tagged update to aws-crt-cpp from
+    ; https://github.com/aws/aws-sdk-cpp/tree/main/crt
+    (version "1.9.136")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -912,22 +1102,20 @@ of C++14 components that complements @code{std} and Boost.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0jpfv9x82nq7hcix9in7qgrc8009dwpg6gr96hlgmcvqrqckd2r9"))))
+                "0ap7g7nmbnrcajy3b788bnpqd87dwmg83dhll1q8qzli04bcg47i"))))
     (build-system cmake-build-system)
     (arguments
      '(;; Tests are run during the build phase.
        #:tests? #f
        #:configure-flags
-       '("-DBUILD_SHARED_LIBS=ON"
-         "-DBUILD_DEPS=OFF")))
+       (list "-DBUILD_DEPS=OFF"
+             "-DBUILD_SHARED_LIBS=ON"
+             (string-append "-DCMAKE_PREFIX_PATH="
+                            (assoc-ref %build-inputs "aws-c-common")))))
     (propagated-inputs
-     `(("aws-c-common" ,aws-c-common)
-       ("aws-c-event-stream" ,aws-c-event-stream)))
+     (list aws-crt-cpp))
     (inputs
-     `(("aws-checksums" ,aws-checksums)
-       ("curl" ,curl)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list curl openssl pulseaudio zlib))
     (synopsis "Amazon Web Services SDK for C++")
     (description
      "The AWS SDK for C++ provides a C++11 interface to the @acronym{AWS,Amazon
@@ -963,7 +1151,7 @@ services including database, analytic, and machine learning technologies.")
            (lambda _
              (invoke "./tests"))))))
     (native-inputs
-     `(("catch2" ,catch-framework2)))
+     (list catch-framework2))
     (synopsis "C++11/14/17 std::expected with functional-style extensions")
     (description "@code{std::expected} is proposed as the preferred way to
 represent objects which will either have an expected value, or an unexpected
@@ -989,8 +1177,6 @@ provides a number of utilities to make coding with expected cleaner.")
                (base32
                 "1x47radgsifgz3vn2561mlvf4cq46ii33cpyqf01znm56iirwq89"))))
     (build-system cmake-build-system)
-    (native-inputs
-     `(("gcc" ,gcc-9)))
     (synopsis "C++17 header only library for compile time reflection of enums")
     (description "Magic Enum offers static reflection of enums, with
 conversions to and from strings, iteration and related functionality.")
@@ -1036,8 +1222,7 @@ conversions to and from strings, iteration and related functionality.")
                (("^    PROPERTIES FOLDER \"Extern\"\\)") ""))
              #t)))))
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("googletest" ,googletest)))
+     (list doxygen googletest))
     (synopsis "Command line parser for C++11")
     (description
      "CLI11 is a command line parser for C++11 and beyond that provides a rich
@@ -1048,7 +1233,7 @@ feature set with a simple and intuitive interface.")
 (define-public caf
   (package
     (name "caf")
-    (version "0.18.0")
+    (version "0.18.5")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1057,13 +1242,13 @@ feature set with a simple and intuitive interface.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1c3spd6vm1h9qhlk5c4fdwi6nbqx5vwz2zvv6qp0rj1hx6xpq3cx"))))
+                "04b4kjisb5wzq6pilh8xzbxn7qcjgppl8k65hfv0zi0ja8fyp1xk"))))
     (build-system cmake-build-system)
     (arguments
      '(#:configure-flags
        '("-DCAF_ENABLE_EXAMPLES=OFF")))
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (synopsis "C++ implementation of the actor model")
     (description "The C++ Actor Framework (CAF) offers a high-level C++17
 programming environment using the actor model for concurrent, distributed
@@ -1071,9 +1256,38 @@ computation.")
     (home-page "https://www.actor-framework.org/")
     (license license:bsd-3)))
 
+(define-public clipper
+  (package
+    (name "clipper")
+    (version "6.4.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://sourceforge/polyclipping"
+                           "/clipper_ver" version ".zip"))
+       (sha256
+        (base32 "09q6jc5k7p9y5d75qr2na5d1gm0wly5cjnffh127r04l47c20hx1"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:tests? #f                      ;no check target
+       #:phases (modify-phases %standard-phases
+                  (replace 'unpack
+                    (lambda* (#:key source #:allow-other-keys)
+                      (and (invoke "unzip" source)
+                           (chdir "cpp")))))))
+    (native-inputs
+     `(("unzip" ,unzip)))
+    (home-page "https://sourceforge.net/projects/polyclipping")
+    (synopsis "Polygon and line clipping and offsetting library")
+    (description
+     "The Clipper library performs line & polygon clipping - intersection,
+union, difference & exclusive-or, and line & polygon offsetting.
+The library is based on Vatti's clipping algorithm.")
+    (license license:boost1.0)))
+
 (define-public pcg-cpp
-  (let ((commit "5b5cac8d61339e810c5dbb4692d868a1d7ca1b2d")
-        (revision "1"))
+  (let ((commit "ffd522e7188bef30a00c74dc7eb9de5faff90092")
+        (revision "2"))
     (package
       (name "pcg-cpp")
       (version (git-version "0.98.1" revision commit))
@@ -1085,7 +1299,7 @@ computation.")
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "1s9dcd4iydlc1xj9m6f7c52nlyx99klk043sk7arqy6kp7gdaa33"))))
+                  "0yxyqaphcc38zilpwpmssrl8ly1v6dimscqk2f4rcv1h22dinnqx"))))
       (build-system gnu-build-system)
       (arguments
        `(#:test-target "test"
@@ -1100,6 +1314,34 @@ 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 libconfini
+  (package
+    (name "libconfini")
+    (version "1.16.3")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/madmurphy/libconfini")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "01g8ai2z4fwshk06k824j6ib8nfb3cwxs5kqpqjvv4k5ayzm892h"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'bootstrap
+           (lambda _ (invoke "sh" "bootstrap" "--noconfigure"))))))
+    (native-inputs
+     (list autoconf automake libtool))
+    (home-page "https://madmurphy.github.io/libconfini/html/index.html")
+    (synopsis "INI file parser")
+    (description "@code{libconfini} is an INI file parser library written in
+C.  It focuses on standardization and parsing exactness and is at ease with
+almost every type of file containing key/value pairs.")
+    (license license:gpl3+)))
+
 (define-public libcutl
   (package
     (name "libcutl")
@@ -1129,8 +1371,8 @@ output randomness while retaining speed, simplicity, and conciseness.")
                                ;;"--with-external-boost"
                                "--with-external-expat")))
     (inputs
-     `(;;("boost ,boost)
-       ("expat" ,expat)))
+     (list ;;("boost ,boost)
+           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
@@ -1175,7 +1417,7 @@ pointers, containers, compiler building blocks, etc.")
                        #:include-regexp ("\\.so$")))
                     args))))))
     (native-inputs
-     `(("build" ,build)))
+     (list build))
     (inputs
      `(("libcutl" ,libcutl)
        ("libxerces-c" ,xerces-c)))
@@ -1223,9 +1465,9 @@ and a traversal mechanism.")
                 (string-append "edge_dispatcher::" all)))))
          (delete 'configure))))
     (native-inputs
-     `(("build" ,build)))
+     (list build))
     (inputs
-     `(("libcutl" ,libcutl)))
+     (list 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
@@ -1266,16 +1508,13 @@ documentation.")
                                                     ,version)))))
                   (delete 'configure))))
     (native-inputs
-     `(("build" ,build)
-       ("cli" ,cli)))
+     (list build cli))
     (inputs
-     `(("libcutl" ,libcutl)
-       ("libnsl" ,libnsl)
-       ("libxsd-frontend" ,libxsd-frontend)))
+     (list libcutl libnsl libxsd-frontend))
     (propagated-inputs
      ;; The code XSD generates requires the following library at run time;
      ;; propagate it for convenience.
-     `(("xerces-c" ,xerces-c)))
+     (list 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
@@ -1319,12 +1558,37 @@ of reading and writing XML.")
      `(#:configure-flags '("-DUSE_SYSTEM_GTEST=ON" "-DUSE_SYSTEM_JSON=ON"
                            "-DBUILD_STATIC_LIBS=OFF")))
     (native-inputs
-     `(("googletest" ,googletest)
-       ("pkg-config" ,pkg-config)))
+     (list googletest pkg-config))
     (inputs
-     `(("json-modern-cxx" ,json-modern-cxx)))
+     (list json-modern-cxx))
     (home-page "https://jsonnet.org/")
     (synopsis "Data templating language")
     (description "Jsonnet is a templating language extending JSON
 syntax with variables, conditions, functions and more.")
     (license license:asl2.0)))
+
+(define-public simdjson
+  (package
+    (name "simdjson")
+    (version "1.0.2")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/simdjson/simdjson")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "05i5jnqd7ngps79cws16ls48gnx08ykkkib3n2hbrdhr1wwrnv7a"))))
+    (build-system cmake-build-system)
+    (arguments
+     '(#:tests? #f                      ; tests require downloading dependencies
+       #:configure-flags
+       '("-DBUILD_SHARED_LIBS=ON")))
+    (synopsis "JSON parser for C++ using SIMD instructions")
+    (description
+     "The simdjson library uses commonly available SIMD instructions and
+microparallel algorithms to implement a strict JSON parser with UTF-8
+validation.")
+    (home-page "https://github.com/simdjson/simdjson")
+    (license license:asl2.0)))
diff --git a/gnu/packages/cran.scm b/gnu/packages/cran.scm
index ebfe9fd506..80e2ca9021 100644
--- a/gnu/packages/cran.scm
+++ b/gnu/packages/cran.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2015, 2016 Pjotr Prins <pjotr.guix@thebird.nl>
 ;;; Copyright © 2016, 2017 Ben Woodcroft <donttrustben@gmail.com>
@@ -31,9 +31,10 @@
 ;;; Copyright © 2020 Antoine Côté <antoine.cote@posteo.net>
 ;;; Copyright © 2020 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2020 Magali Lemes <magalilemes00@gmail.com>
-;;; Copyright © 2020 Simon Tournier <zimon.toutoune@gmail.com>
+;;; Copyright © 2020, 2021, 2022 Simon Tournier <zimon.toutoune@gmail.com>
 ;;; Copyright © 2020 Aniket Patil <aniket112.patil@gmail.com>
 ;;; Copyright © 2021 Marcel Schilling <marcel.schilling@uni-luebeck.de>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -113,14 +114,14 @@
 (define-public r-brio
   (package
     (name "r-brio")
-    (version "1.1.2")
+    (version "1.1.3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "brio" version))
        (sha256
         (base32
-         "1vviykwx1z71yhk1xl87riaygj8sq0sj7ixyig1irqsi66aydpa2"))))
+         "1inwzvlf6zj6gi47gd0byzqv02qajb3l475z8pjvx2b1hm0r1a7a"))))
     (properties `((upstream-name . "brio")))
     (build-system r-build-system)
     (home-page "https://github.com/r-lib/brio")
@@ -145,8 +146,7 @@ files and provide more explicit control over line endings.")
     (properties `((upstream-name . "cachem")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-fastmap" ,r-fastmap)
-       ("r-rlang" ,r-rlang)))
+     (list r-fastmap r-rlang))
     (home-page "https://cachem.r-lib.org/")
     (synopsis "Cache R objects with automatic pruning")
     (description
@@ -187,20 +187,20 @@ etc.")
 (define-public r-datawizard
   (package
     (name "r-datawizard")
-    (version "0.2.0.1")
+    (version "0.2.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "datawizard" version))
        (sha256
         (base32
-         "15q491qix4a9b10wkb5bm9jnnr62smjw4qdrw4bd51i1kgvd6kl5"))))
+         "0sd0blrczf9qz5kd0jg112fag2w401kkbw1gp9wi5pgffgwp6va3"))))
     (properties `((upstream-name . "datawizard")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-insight" ,r-insight)))
+     (list r-insight))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://easystats.github.io/datawizard/")
     (synopsis "Easy data wrangling")
     (description
@@ -212,18 +212,18 @@ wrangling backend for the packages in the @code{easystats} ecosystem.")
 (define-public r-diffobj
   (package
     (name "r-diffobj")
-    (version "0.3.4")
+    (version "0.3.5")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "diffobj" version))
        (sha256
         (base32
-         "1z4yhfasjpi9rxl1lh9bny7yvs947a6hhc768azc1wwad748mk9q"))))
+         "0q6gwd9pqh41f6j5p9jl92aji4p8kx9inffpha93d7jc3ndsfq6q"))))
     (properties `((upstream-name . "diffobj")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-crayon" ,r-crayon)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+    (propagated-inputs (list r-crayon))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/brodieG/diffobj")
     (synopsis "Diffs for R objects")
     (description
@@ -265,22 +265,22 @@ Distance (EMD).")
     (properties `((upstream-name . "googledrive")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cli" ,r-cli)
-       ("r-gargle" ,r-gargle)
-       ("r-glue" ,r-glue)
-       ("r-httr" ,r-httr)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-magrittr" ,r-magrittr)
-       ("r-pillar" ,r-pillar)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-tibble" ,r-tibble)
-       ("r-uuid" ,r-uuid)
-       ("r-vctrs" ,r-vctrs)
-       ("r-withr" ,r-withr)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-cli
+           r-gargle
+           r-glue
+           r-httr
+           r-jsonlite
+           r-lifecycle
+           r-magrittr
+           r-pillar
+           r-purrr
+           r-rlang
+           r-tibble
+           r-uuid
+           r-vctrs
+           r-withr))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://googledrive.tidyverse.org")
     (synopsis "Interface to Google Drive")
     (description "This package lets you manage Google Drive files from R.")
@@ -300,9 +300,8 @@ Distance (EMD).")
     (properties `((upstream-name . "ids")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-openssl" ,r-openssl)
-       ("r-uuid" ,r-uuid)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-openssl r-uuid))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/richfitz/ids")
     (synopsis "Generate random identifiers")
     (description
@@ -324,20 +323,20 @@ pronounceable identifiers.")
     (properties `((upstream-name . "googlesheets4")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cellranger" ,r-cellranger)
-       ("r-cli" ,r-cli)
-       ("r-curl" ,r-curl)
-       ("r-gargle" ,r-gargle)
-       ("r-glue" ,r-glue)
-       ("r-googledrive" ,r-googledrive)
-       ("r-httr" ,r-httr)
-       ("r-ids" ,r-ids)
-       ("r-magrittr" ,r-magrittr)
-       ("r-purrr" ,r-purrr)
-       ("r-rematch2" ,r-rematch2)
-       ("r-rlang" ,r-rlang)
-       ("r-tibble" ,r-tibble)
-       ("r-vctrs" ,r-vctrs)))
+     (list r-cellranger
+           r-cli
+           r-curl
+           r-gargle
+           r-glue
+           r-googledrive
+           r-httr
+           r-ids
+           r-magrittr
+           r-purrr
+           r-rematch2
+           r-rlang
+           r-tibble
+           r-vctrs))
     (home-page "https://github.com/tidyverse/googlesheets4")
     (synopsis "Access Google Sheets using the Sheets API V4")
     (description
@@ -360,13 +359,13 @@ can read and write both the metadata and the cell data in a Sheet.")
     (properties `((upstream-name . "waldo")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cli" ,r-cli)
-       ("r-diffobj" ,r-diffobj)
-       ("r-fansi" ,r-fansi)
-       ("r-glue" ,r-glue)
-       ("r-rematch2" ,r-rematch2)
-       ("r-rlang" ,r-rlang)
-       ("r-tibble" ,r-tibble)))
+     (list r-cli
+           r-diffobj
+           r-fansi
+           r-glue
+           r-rematch2
+           r-rlang
+           r-tibble))
     (home-page "https://github.com/r-lib/waldo")
     (synopsis "Find differences between R objects")
     (description
@@ -379,22 +378,18 @@ easier.")
 (define-public r-rticles
   (package
     (name "r-rticles")
-    (version "0.21")
+    (version "0.22")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "rticles" version))
        (sha256
         (base32
-         "0xk0xz97k8r8srmniihn3y4dkxddxf97yjbsljcxlgcq8f0zcc2s"))))
+         "0jgsmqwwqzvsxcbsm9fx0rp724mn3ipi70883bhvm7n9i8mq877m"))))
     (properties `((upstream-name . "rticles")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-knitr" ,r-knitr)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("r-tinytex" ,r-tinytex)
-       ("r-xfun" ,r-xfun)
-       ("r-yaml" ,r-yaml)))
+     (list r-knitr r-rmarkdown r-tinytex r-xfun r-yaml))
     (home-page "https://github.com/rstudio/rticles")
     (synopsis "Article formats for R Markdown")
     (description
@@ -414,8 +409,7 @@ for authoring journal articles and conference submissions.")
                 "1n4vjkagqlm6kw2hilf4gjfcdjad0bcg652j9nl2ygbq3kdnh1vf"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-tibble" ,r-tibble)))
+     (list r-dplyr r-tibble))
     (home-page "https://github.com/csgillespie/benchmarkme-data")
     (synopsis "Data set for the @code{benchmarkme} package")
     (description "This package contains the data set for the crowd-sourced
@@ -434,15 +428,15 @@ benchmarks from running the @code{benchmarkme} package.")
                 "0ymgsxzrvnpyvs0cff09d3lrkl12qyqx5bwammsc4vgl5ng9p69p"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (propagated-inputs
-     `(("r-benchmarkmedata" ,r-benchmarkmedata)
-       ("r-doparallel" ,r-doparallel)
-       ("r-dplyr" ,r-dplyr)
-       ("r-foreach" ,r-foreach)
-       ("r-httr" ,r-httr)
-       ("r-matrix" ,r-matrix)
-       ("r-tibble" ,r-tibble)))
+     (list r-benchmarkmedata
+           r-doparallel
+           r-dplyr
+           r-foreach
+           r-httr
+           r-matrix
+           r-tibble))
     (home-page "https://csgillespie.github.io/benchmarkme/")
     (synopsis "Crowd-sourced system benchmarks")
     (description "This package provides functionality to benchmark your CPU
@@ -469,17 +463,40 @@ The package provides functions for point generation, arc length estimation,
 degree elevation and curve fitting.")
     (license license:gpl2+)))
 
+(define-public r-bwstest
+  (package
+    (name "r-bwstest")
+    (version "0.2.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "BWStest" version))
+       (sha256
+        (base32 "02amzlfprmw5pyis0dg0kg0x8xqh50a4vfdcxxmklrzik3b1vzzs"))))
+    (properties `((upstream-name . "BWStest")))
+    (build-system r-build-system)
+    (propagated-inputs (list r-memoise r-rcpp))
+    (home-page "https://github.com/shabbychef/BWStest")
+    (synopsis "Baumgartner Weiss Schindler Test of equal distributions")
+    (description
+     "This package performs the Baumgartner-Weiss-Schindler two-sample test of
+equal probability distributions (doi:10.2307/2533862).  It also performs
+similar rank-based tests for equal probability distributions due to Neuhauser
+(doi:10.1080/10485250108832874) and Murakami
+(doi:10.1080/00949655.2010.551516).")
+    (license license:lgpl3)))
+
 (define-public r-v8
   (package
     (name "r-v8")
-    (version "3.4.2")
+    (version "4.0.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "V8" version))
        (sha256
         (base32
-         "1vfj89shfzx7b6papi2y671l8gksng775kilmqzl5gx87i3l61i1"))))
+         "1j5vknhq12kfzda46y7nwiqdzqipzgympqzjq9d8ckr6f6v4qshl"))))
     (properties `((upstream-name . "V8")))
     (build-system r-build-system)
     (arguments
@@ -490,25 +507,21 @@ degree elevation and curve fitting.")
              (substitute* "configure"
                (("^PKG_LIBS=.*")
                 (string-append "PKG_LIBS="
-                               (assoc-ref inputs "node")
+                               (assoc-ref inputs "libnode")
                                "/lib/libnode.so.64\n")))
              (setenv "INCLUDE_DIR"
                      (string-append
-                      (assoc-ref inputs "node")
+                      (assoc-ref inputs "libnode")
                       "/include/node"))
              (setenv "LIB_DIR"
                      (string-append
-                      (assoc-ref inputs "node") "/lib"))
-             #t)))))
+                      (assoc-ref inputs "libnode") "/lib")))))))
     (inputs
-     `(("node" ,libnode)
-       ("zlib" ,zlib)))
+     (list libnode zlib))
     (propagated-inputs
-     `(("r-curl" ,r-curl)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-curl r-jsonlite r-rcpp))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://jeroen.cran.dev/V8")
     (synopsis "Embedded JavaScript and WebAssembly engine for R")
     (description
@@ -530,7 +543,7 @@ WebAssembly engine.")
     (properties `((upstream-name . "DOT")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-v8" ,r-v8)))
+     (list r-v8))
     (home-page "http://haghish.com/dot")
     (synopsis "Render and Export DOT Graphs in R")
     (description
@@ -553,7 +566,7 @@ programming packages such as @code{knitr} and @code{rmarkdown}.")
          "1ywa4kipwc2d7na6iiz3wzdah99h6aynnh74yxl3nzl40xxlgbgz"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/mdlincoln/clipr")
     (synopsis "Read and write from the system clipboard")
     (description
@@ -573,7 +586,7 @@ the system clipboards.")
                 "18vjywalpgzqyk66gajb8x1yp8avdaaf11ykynld9fd8cy82bgmp"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lattice" ,r-lattice)))
+     (list r-lattice))
     (home-page "http://zoo.R-Forge.R-project.org/")
     (synopsis "S3 infrastructure for regular and irregular time series")
     (description "This package contains an S3 class with methods for totally
@@ -581,6 +594,30 @@ ordered indexed observations.  It is particularly aimed at irregular time
 series of numeric vectors/matrices and factors.")
     (license license:gpl2+)))
 
+(define-public r-fontawesome
+  (package
+    (name "r-fontawesome")
+    (version "0.2.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "fontawesome" version))
+       (sha256
+        (base32 "0r6zb5175cr4ybqj6bl0mbhadwv9xjxaf32yjc0y76rw3d6vcbap"))))
+    (properties `((upstream-name . "fontawesome")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-htmltools r-rlang))
+    (home-page "https://github.com/rstudio/fontawesome")
+    (synopsis "Easily work with Font Awesome icons")
+    (description
+     "Easily and flexibly insert Font Awesome icons into R Markdown documents
+and Shiny apps.  These icons can be inserted into HTML content through inline
+SVG tags or @code{i} tags.  There is also a utility function for exporting
+Font Awesome icons as PNG images for those situations where raster graphics
+are needed.")
+    (license license:expat)))
+
 (define-public r-fingerprint
   (package
     (name "r-fingerprint")
@@ -607,6 +644,28 @@ Currently handlers are provided for CDK, MOE and BCI fingerprint data.")
     ;; Any version of the GPL
     (license (list license:gpl2+ license:gpl3+))))
 
+(define-public r-fpeek
+  (package
+    (name "r-fpeek")
+    (version "0.1.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "fpeek" version))
+       (sha256
+        (base32 "0kv46g21ndxchg3q8ynq7hjjkh6i2zlc21axn5y1jjzigrw047ii"))))
+    (properties `((upstream-name . "fpeek")))
+    (build-system r-build-system)
+    (propagated-inputs (list r-rcpp))
+    (home-page "https://github.com/davidgohel/fpeek")
+    (synopsis "Check text files content at a glance")
+    (description
+     "This package provides tools to help working with text files.  It can
+return the number of lines; print the first and last lines; convert encoding.
+Operations are made without reading the entire file before starting, resulting
+in good performances with large files.")
+    (license license:expat)))
+
 (define-public r-ggalluvial
   (package
    (name "r-ggalluvial")
@@ -620,14 +679,14 @@ Currently handlers are provided for CDK, MOE and BCI fingerprint data.")
    (properties `((upstream-name . "ggalluvial")))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-dplyr" ,r-dplyr)
-      ("r-ggplot2" ,r-ggplot2)
-      ("r-lazyeval" ,r-lazyeval)
-      ("r-rlang" ,r-rlang)
-      ("r-tidyr" ,r-tidyr)
-      ("r-tidyselect" ,r-tidyselect)))
+    (list r-dplyr
+          r-ggplot2
+          r-lazyeval
+          r-rlang
+          r-tidyr
+          r-tidyselect))
    (native-inputs
-    `(("r-knitr" ,r-knitr)))
+    (list r-knitr))
    (home-page "http://corybrunson.github.io/ggalluvial/")
    (synopsis "Alluvial plots for ggplot2")
    (description "This package provides alluvial plots for @code{ggplot2}.
@@ -639,33 +698,33 @@ variables.")
 (define-public r-ggpp
   (package
     (name "r-ggpp")
-    (version "0.4.2")
+    (version "0.4.3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "ggpp" version))
        (sha256
         (base32
-         "0m2wq9kqlxqxlzyx9fd0c4iw6qb7kpjrq7fqqa2kvwyj79vx6ahj"))))
+         "175mk5zcnhwr8hvs1567x0k0vmq7g2qnq250pnxlwnv1wpmvrqhz"))))
     (properties `((upstream-name . "ggpp")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-glue" ,r-glue)
-       ("r-gridextra" ,r-gridextra)
-       ("r-lubridate" ,r-lubridate)
-       ("r-magrittr" ,r-magrittr)
-       ("r-mass" ,r-mass)
-       ("r-polynom" ,r-polynom)
-       ("r-rlang" ,r-rlang)
-       ("r-scales" ,r-scales)
-       ("r-stringr" ,r-stringr)
-       ("r-tibble" ,r-tibble)
-       ("r-xts" ,r-xts)
-       ("r-zoo" ,r-zoo)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-dplyr
+           r-ggplot2
+           r-glue
+           r-gridextra
+           r-lubridate
+           r-magrittr
+           r-mass
+           r-polynom
+           r-rlang
+           r-scales
+           r-stringr
+           r-tibble
+           r-xts
+           r-zoo))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://docs.r4photobiology.info/ggpp/")
     (synopsis "Grammar extensions to ggplot2")
     (description
@@ -706,31 +765,31 @@ axis} (SMA), and @dfn{ranged major axis} (RMA).")
 (define-public r-ggpmisc
   (package
     (name "r-ggpmisc")
-    (version "0.4.3")
+    (version "0.4.5")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "ggpmisc" version))
               (sha256
                (base32
-                "0ff84ybj4648c1v05ng3l62g9n52igjwvm320qkfbdzdxzncpzik"))))
-    (build-system r-build-system)
-    (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-generics" ,r-generics)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggpp" ,r-ggpp)
-       ("r-lmodel2" ,r-lmodel2)
-       ("r-lubridate" ,r-lubridate)
-       ("r-mass" ,r-mass)
-       ("r-plyr" ,r-plyr)
-       ("r-polynom" ,r-polynom)
-       ("r-quantreg" ,r-quantreg)
-       ("r-rlang" ,r-rlang)
-       ("r-scales" ,r-scales)
-       ("r-splus2r" ,r-splus2r)
-       ("r-tibble" ,r-tibble)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+                "036y3zhl9ndj5wlqy2nkp95vi7pjfpvf63ndsigramzad0fz0c98"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-dplyr
+           r-generics
+           r-ggplot2
+           r-ggpp
+           r-lmodel2
+           r-lubridate
+           r-mass
+           r-plyr
+           r-polynom
+           r-quantreg
+           r-rlang
+           r-scales
+           r-splus2r
+           r-tibble))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://www.r4photobiology.info/")
     (synopsis "Miscellaneous Extensions to @code{ggplot2}")
     (description "This package provides extensions to @code{ggplot2},
@@ -751,8 +810,7 @@ respecting the grammar of its graphics paradigm.")
     (properties `((upstream-name . "gProfileR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-plyr" ,r-plyr)
-       ("r-rcurl" ,r-rcurl)))
+     (list r-plyr r-rcurl))
     (home-page "https://cran.r-project.org/web/packages/gProfileR/")
     (synopsis "Interface to the g:Profiler toolkit")
     (description
@@ -775,16 +833,16 @@ organisms via the @code{g:Profiler} toolkit.")
     (properties `((upstream-name . "gprofiler2")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-crosstalk" ,r-crosstalk)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-plotly" ,r-plotly)
-       ("r-rcurl" ,r-rcurl)
-       ("r-tidyr" ,r-tidyr)
-       ("r-viridislite" ,r-viridislite)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-crosstalk
+           r-dplyr
+           r-ggplot2
+           r-gridextra
+           r-jsonlite
+           r-plotly
+           r-rcurl
+           r-tidyr
+           r-viridislite))
+    (native-inputs (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/gprofiler2/")
     (synopsis "Interface to the g:Profiler toolset")
     (description
@@ -822,9 +880,8 @@ higher.")
     (properties `((upstream-name . "oenb")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-xml" ,r-xml)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-dplyr r-xml))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/franzmohr/oenb")
     (synopsis "Tools for the OeNB Data Web Service")
     (description
@@ -845,13 +902,13 @@ higher.")
         (base32 "019ps0njjc0rzrjygqiyn8b9vp0c3c0jd56h1yi19wzi49jvdcj0"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-farver" ,r-farver)
-       ("r-labeling" ,r-labeling)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-munsell" ,r-munsell)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-r6" ,r-r6)
-       ("r-viridislite" ,r-viridislite)))
+     (list r-farver
+           r-labeling
+           r-lifecycle
+           r-munsell
+           r-rcolorbrewer
+           r-r6
+           r-viridislite))
     (home-page "https://github.com/hadley/scales")
     (synopsis "Scale functions for visualization")
     (description
@@ -872,7 +929,7 @@ legends.")
                "0z7gngd6h83cpjhq1vg75wvzhdjbgjh7gj5d4zvvi9gd2lmagjcy"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-remotes" ,r-remotes)))
+     (list r-remotes))
     (home-page "https://github.com/trinker/pacman")
     (synopsis "Package Management Tool")
     (description "This package provides tools to more conveniently perform
@@ -895,9 +952,7 @@ functions which can speed up workflow.")
          "1hdh74az3vyzz6dqa311rhxdm74n46lyr03p862kn80p0kp9d7ap"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-gtable" ,r-gtable)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-scales" ,r-scales)))
+     (list r-gtable r-rcolorbrewer r-scales))
     (home-page "https://cran.r-project.org/web/packages/pheatmap")
     (synopsis "Pretty heatmaps")
     (description
@@ -905,6 +960,27 @@ functions which can speed up workflow.")
 control over dimensions and appearance.")
     (license license:gpl2+)))
 
+(define-public r-pnwcolors
+  (package
+    (name "r-pnwcolors")
+    (version "0.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "PNWColors" version))
+       (sha256
+        (base32
+         "1phplnclkficfv8s6wsyrckk4ixzbayiy5iix6dddg40485l9nyj"))))
+    (properties `((upstream-name . "PNWColors")))
+    (build-system r-build-system)
+    (home-page "https://github.com/jakelawlor/PNWColors")
+    (synopsis "Color palettes for data visualizations")
+    (description
+     "This package provides color palettes.  They are checked for colorblind
+accessibility from hue, saturation, and lightness value scaling using the
+Chroma.js Color Palette Helper.  See @url{https://gka.github.io/palettes}.")
+    (license license:cc0)))
+
 (define-public r-ecp
   (package
     (name "r-ecp")
@@ -917,7 +993,7 @@ control over dimensions and appearance.")
                 "0n602jssl6rf596nwm6hbl7s9vdlqi20w8mrhxicj373mw5v22m8"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)))
+     (list r-rcpp))
     (home-page "https://cran.r-project.org/web/packages/ecp/")
     (synopsis "Multiple change-point analysis of multivariate data")
     (description
@@ -942,7 +1018,7 @@ information.")
          "0n0mm9jngklv7j9wa64jdji035z0smmnsp2dfwcz9isrxgjnc0m9"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rlang" ,r-rlang)))
+     (list r-rlang))
     (home-page "https://github.com/hadley/ellipsis")
     (synopsis "Tools for working with additional arguments")
     (description
@@ -987,8 +1063,7 @@ functions are simplified but can be faster or have other advantages.")
     (properties `((upstream-name . "Matrix.utils")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-grr" ,r-grr)
-       ("r-matrix" ,r-matrix)))
+     (list r-grr r-matrix))
     (home-page "https://github.com/cvarrichio/Matrix.utils")
     (synopsis
      "Data.frame-Like Operations on Sparse and Dense Matrix Objects")
@@ -1010,13 +1085,13 @@ objects.")
               "0yg07fdd1sbjfhhxn1dqgph2vzqyq7l52cdk5iq2a2zy1vh176yg"))))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-lattice" ,r-lattice)
-      ("r-matrix" ,r-matrix)
-      ("r-nnls" ,r-nnls)
-      ("r-partykit" ,r-partykit)
-      ("r-quadprog" ,r-quadprog)
-      ("r-stabs" ,r-stabs)
-      ("r-survival" ,r-survival)))
+    (list r-lattice
+          r-matrix
+          r-nnls
+          r-partykit
+          r-quadprog
+          r-stabs
+          r-survival))
    (home-page "https://github.com/boost-R/mboost")
    (synopsis "Model-based boosting")
    (description
@@ -1030,20 +1105,19 @@ high-dimensional data.")
 (define-public r-shadowtext
   (package
    (name "r-shadowtext")
-   (version "0.0.9")
+   (version "0.1.1")
    (source (origin
             (method url-fetch)
             (uri (cran-uri "shadowtext" version))
             (sha256
              (base32
-              "1g6mgnfnzf2c17yzqk3zybfc5y62p5ndrbikxb3xcm2hiljiiqna"))))
+              "01h0w3b02r8snjkx5sxkf2x8xm4gd0r8jm27xqz9cv6hgqfmh1pb"))))
    (properties `((upstream-name . "shadowtext")))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-ggplot2" ,r-ggplot2)
-      ("r-scales" ,r-scales)))
+    (list r-ggplot2 r-scales))
    (native-inputs
-    `(("r-knitr" ,r-knitr)))
+    (list r-knitr))
    (home-page "https://github.com/GuangchuangYu/shadowtext/")
    (synopsis "Shadow text grob and layer")
    (description "This package implements @code{shadowtextGrob()} for
@@ -1089,15 +1163,15 @@ mechanism.")
    (properties `((upstream-name . "ashr")))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-etrunct" ,r-etrunct)
-      ("r-invgamma" ,r-invgamma)
-      ("r-matrix" ,r-matrix)
-      ("r-mixsqp" ,r-mixsqp)
-      ("r-rcpp" ,r-rcpp)
-      ("r-squarem" ,r-squarem)
-      ("r-truncnorm" ,r-truncnorm)))
+    (list r-etrunct
+          r-invgamma
+          r-matrix
+          r-mixsqp
+          r-rcpp
+          r-squarem
+          r-truncnorm))
    (native-inputs
-    `(("r-knitr" ,r-knitr)))
+    (list r-knitr))
    (home-page "https://github.com/stephens999/ashr")
    (synopsis "Methods for adaptive shrinkage, using empirical bayes")
    (description "This package implements an empirical Bayes approach for
@@ -1116,7 +1190,7 @@ large-scale hypothesis testing and false discovery rate estimation.")
         (base32
          "07q0ik8jzk44vpwh48rr3fnpd7dzsdhjjsl4l850rffv3dyq4h6v"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-sys" ,r-sys)))
+    (propagated-inputs (list r-sys))
     (home-page "https://github.com/jeroen/askpass")
     (synopsis "Safe password entry for R")
     (description
@@ -1125,6 +1199,29 @@ for credentials or a passphrase, for example to authenticate with a server or
 read a protected key.")
     (license license:expat)))
 
+(define-public r-astsa
+  (package
+    (name "r-astsa")
+    (version "1.14")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "astsa" version))
+       (sha256
+        (base32 "09zx2q419p0b1c336ybh4i62v5dvn3sp39dxn5kwlrqchjj7f5z6"))))
+    (properties `((upstream-name . "astsa")))
+    (build-system r-build-system)
+    (home-page "https://github.com/nickpoison/astsa/")
+    (synopsis "Applied statistical time series analysis")
+    (description
+     "This package provides data sets and scripts to accompany Time Series
+Analysis and Its Applications: With R Examples (4th ed), by R.H. Shumway and
+D.S. Stoffer.  Springer Texts in Statistics, 2017,
+@url{https://doi.org/10.1007/978-3-319-52452-8}, and Time Series: A Data
+Analysis Approach Using R.  Chapman-Hall, 2019,
+@url{https://doi.org/10.1201/9780429273285}.")
+    (license license:gpl3)))
+
 (define-public r-vegan
   (package
     (name "r-vegan")
@@ -1138,14 +1235,10 @@ read a protected key.")
          "0aj6m9l1vkh32sar6fyvq4p8j4h2f2f347w1300qnzgaa5lmhfz6"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)             ; needed for vignettes
-       ("gfortran" ,gfortran)))
+     (list r-knitr ; needed for vignettes
+           gfortran))
     (propagated-inputs
-     `(("r-cluster" ,r-cluster)
-       ("r-lattice" ,r-lattice)
-       ("r-mass" ,r-mass)
-       ("r-mgcv" ,r-mgcv)
-       ("r-permute" ,r-permute)))
+     (list r-cluster r-lattice r-mass r-mgcv r-permute))
     (home-page "https://cran.r-project.org/web/packages/vegan")
     (synopsis "Functions for community ecology")
     (description
@@ -1168,37 +1261,37 @@ data types as well.")
          "0ck6xmsw5p168jmw2fqv79fzfnw5jckfra7mfii261j6kl89bkw3"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-broom" ,r-broom)
-       ("r-cli" ,r-cli)
-       ("r-crayon" ,r-crayon)
-       ("r-dbplyr" ,r-dbplyr)
-       ("r-dplyr" ,r-dplyr)
-       ("r-dtplyr" ,r-dtplyr)
-       ("r-forcats" ,r-forcats)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-googledrive" ,r-googledrive)
-       ("r-googlesheets4" ,r-googlesheets4)
-       ("r-haven" ,r-haven)
-       ("r-hms" ,r-hms)
-       ("r-httr" ,r-httr)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-lubridate" ,r-lubridate)
-       ("r-magrittr" ,r-magrittr)
-       ("r-modelr" ,r-modelr)
-       ("r-pillar" ,r-pillar)
-       ("r-purrr" ,r-purrr)
-       ("r-readr" ,r-readr)
-       ("r-readxl" ,r-readxl)
-       ("r-reprex" ,r-reprex)
-       ("r-rlang" ,r-rlang)
-       ("r-rstudioapi" ,r-rstudioapi)
-       ("r-rvest" ,r-rvest)
-       ("r-stringr" ,r-stringr)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)
-       ("r-xml2" ,r-xml2)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-broom
+           r-cli
+           r-crayon
+           r-dbplyr
+           r-dplyr
+           r-dtplyr
+           r-forcats
+           r-ggplot2
+           r-googledrive
+           r-googlesheets4
+           r-haven
+           r-hms
+           r-httr
+           r-jsonlite
+           r-lubridate
+           r-magrittr
+           r-modelr
+           r-pillar
+           r-purrr
+           r-readr
+           r-readxl
+           r-reprex
+           r-rlang
+           r-rstudioapi
+           r-rvest
+           r-stringr
+           r-tibble
+           r-tidyr
+           r-xml2))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://tidyverse.tidyverse.org")
     (synopsis "Install and load packages from the \"Tidyverse\"")
     (description
@@ -1211,24 +1304,24 @@ single step.")
 (define-public r-rvest
   (package
     (name "r-rvest")
-    (version "1.0.1")
+    (version "1.0.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "rvest" version))
        (sha256
-        (base32 "1v99bpp2077s4y5phvkzpgjyr8cs9axifm1c3npw6jmh8x9j91h8"))))
+        (base32 "1905vxgnj3q09l1wf6rwxpbpydznp06nbkrclnc05j2415z4gfw9"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-httr" ,r-httr)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-magrittr" ,r-magrittr)
-       ("r-rlang" ,r-rlang)
-       ("r-selectr" ,r-selectr)
-       ("r-tibble" ,r-tibble)
-       ("r-xml2" ,r-xml2)))
+     (list r-httr
+           r-lifecycle
+           r-magrittr
+           r-rlang
+           r-selectr
+           r-tibble
+           r-xml2))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/hadley/rvest")
     (synopsis "Simple web scraping for R")
     (description
@@ -1249,8 +1342,7 @@ scraping tasks, inspired by libraries like @code{BeautifulSoup}.")
         (base32 "09y1n3iy297g49xlpl7xrjpwgnm57pskx5991lyfcpizbz8ax22m"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-stringr" ,r-stringr)
-       ("r-r6" ,r-r6)))
+     (list r-stringr r-r6))
     (home-page "https://sjp.co.nz/projects/selectr/")
     (synopsis "Translate CSS selectors to XPath expressions")
     (description
@@ -1274,18 +1366,18 @@ package is a port of the Python package @code{cssselect}.")
          "09k4rasp7mz6n796dsklcbc5l7prljiznrm7fra16qybr9kqcv8f"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-callr" ,r-callr)
-       ("r-cli" ,r-cli)
-       ("r-clipr" ,r-clipr)
-       ("r-fs" ,r-fs)
-       ("r-glue" ,r-glue)
-       ("r-knitr" ,r-knitr)
-       ("r-rlang" ,r-rlang)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("r-rstudioapi" ,r-rstudioapi)
-       ("r-withr" ,r-withr)))
+     (list r-callr
+           r-cli
+           r-clipr
+           r-fs
+           r-glue
+           r-knitr
+           r-rlang
+           r-rmarkdown
+           r-rstudioapi
+           r-withr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/tidyverse/reprex")
     (synopsis "Prepare reproducible R code examples for sharing")
     (description
@@ -1309,8 +1401,7 @@ such as copy/paste from an R session.")
               "0ss750frzvj0bm1w7zblmcsjpszhnbffwlkaw31sm003lbx9hy58"))))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-gplots" ,r-gplots)
-      ("r-rcpp" ,r-rcpp)))
+    (list r-gplots r-rcpp))
    (home-page "https://cran.r-project.org/web/packages/ReorderCluster")
    (synopsis "Reordering the dendrogram according to the class labels")
    (description "This package provides tools for performing the leaf reordering
@@ -1331,8 +1422,7 @@ same time tries to group instances from the same class together.")
          "02inaf3c7b0hikii7p2zwaphrq5myv4in92d9jxd1ilmhla5awnn"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-r6" ,r-r6)
-       ("r-processx" ,r-processx)))
+     (list r-r6 r-processx))
     (home-page "https://github.com/r-lib/callr#readme")
     (synopsis "Call R from R")
     (description
@@ -1352,10 +1442,7 @@ that.")
                (base32
                 "1pacvhw5m4fsk3ysbal50fdqbvlaz8ywyqp6bn1wh42wipqbb2i8"))))
     (propagated-inputs
-     `(("r-nnet" ,r-nnet)
-       ("r-nlme" ,r-nlme)
-       ("r-mass" ,r-mass)
-       ("r-rsolnp" ,r-rsolnp)))
+     (list r-nnet r-nlme r-mass r-rsolnp))
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/web/packages/depmixS4/")
     (synopsis "Dependent Mixture Models")
@@ -1377,10 +1464,7 @@ mixture models.")
          "15mambxr8c7k2ikdfsl1w3vxvm54dsnk0cl1qvks6iig7rql3d14"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cellranger" ,r-cellranger)
-       ("r-progress" ,r-progress)
-       ("r-rcpp" ,r-rcpp)
-       ("r-tibble" ,r-tibble)))
+     (list r-cellranger r-progress r-rcpp r-tibble))
     (home-page "https://readxl.tidyverse.org")
     (synopsis "Read Excel files")
     (description
@@ -1403,12 +1487,12 @@ the embedded @code{RapidXML} C++ library.")
                 "0pni9v3nradvy8sp2m07903vc7z610xrh426lf19dxss12kgrfi8"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-formula" ,r-formula)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-partykit" ,r-partykit)
-       ("r-sandwich" ,r-sandwich)
-       ("r-survival" ,r-survival)))
+     (list r-formula
+           r-ggplot2
+           r-gridextra
+           r-partykit
+           r-sandwich
+           r-survival))
     (home-page "https://cran.r-project.org/web/packages/model4you/")
     (synopsis "Stratified and personalised models based on trees and forests")
     (description
@@ -1434,14 +1518,14 @@ the personalised models.")
          "1i31nff7bqibk6r4hhd4j1vzwbyaf8493v0bjaagn36njmysfnw2"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-broom" ,r-broom)
-       ("r-magrittr" ,r-magrittr)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)
-       ("r-tidyselect" ,r-tidyselect)
-       ("r-vctrs" ,r-vctrs)))
+     (list r-broom
+           r-magrittr
+           r-purrr
+           r-rlang
+           r-tibble
+           r-tidyr
+           r-tidyselect
+           r-vctrs))
     (home-page "https://github.com/tidyverse/modelr")
     (synopsis "Helper functions for modelling in pipelines")
     (description
@@ -1480,7 +1564,7 @@ models.")
               "05dm3nl0ffsz2ziw3bz5bivyxk7r5bxs8xhky3hz660qaqzd51ki"))))
    (build-system r-build-system)
    (native-inputs
-    `(("gfortran" ,gfortran)))
+    (list gfortran))
    (home-page "https://cran.r-project.org/web/packages/HiddenMarkov/")
    (synopsis "Hidden markov models for R")
    (description "This package contains functions for the analysis of Discrete
@@ -1493,13 +1577,13 @@ Zucchini.")
 (define-public r-httpuv
   (package
     (name "r-httpuv")
-    (version "1.6.3")
+    (version "1.6.5")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "httpuv" version))
               (sha256
                (base32
-                "0xh8y05k4jxdwp9xh4x478y3scnv80q05l9gxk2ni6f0dk43iqxz"))
+                "0mlilxh2mlrsbbrncla2rg02crr8nnajv649d8whx7ayr8lkdxpm"))
               ;; Unvendor bundled libraries. As of 1.5.4 the vendored libuv
               ;; only contains fixes for building on Solaris.
               (patches (search-patches "r-httpuv-1.5.5-unvendor-libuv.patch"))
@@ -1522,13 +1606,9 @@ Zucchini.")
                (("uv_pipe_init\\(pLoop, &pSocket->handle\\.pipe, true\\);")
                 "uv_pipe_init(pLoop, &pSocket->handle.pipe, 0);")))))))
     (inputs
-     `(("libuv" ,libuv)
-       ("zlib" ,zlib)))
+     (list libuv zlib))
     (propagated-inputs
-     `(("r-later" ,r-later)
-       ("r-promises" ,r-promises)
-       ("r-r6" ,r-r6)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-later r-promises r-r6 r-rcpp))
     (home-page "https://github.com/rstudio/httpuv")
     (synopsis "HTTP and WebSocket server library for R")
     (description
@@ -1544,16 +1624,16 @@ particularly easy to create complete web applications using httpuv alone.")
 (define-public r-jsonlite
   (package
     (name "r-jsonlite")
-    (version "1.7.2")
+    (version "1.7.3")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "jsonlite" version))
               (sha256
                (base32
-                "1lhzcpz9clwq04i5m6jzkvw9x03pwlqrixv4l9xzchjr8d84nd86"))))
+                "0n65x9ifxjssb000g7psgh9pgl374ax2ni1if9kp3sx56rg0n2kj"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://arxiv.org/abs/1403.2805")
     (synopsis "Robust, high performance JSON parser and generator for R")
     (description
@@ -1570,19 +1650,16 @@ in systems and applications.")
 (define-public r-servr
   (package
     (name "r-servr")
-    (version "0.23")
+    (version "0.24")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "servr" version))
               (sha256
                (base32
-                "1f1fgfgjgjsbn2krkbyw2qwkm0k4lq9p9jakg9zwyqlgpkdd34j4"))))
+                "11x0857m3xzdbzr4z0vx4fcdk36arfagyf2qgamvprich0qisknr"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-httpuv" ,r-httpuv)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-mime" ,r-mime)
-       ("r-xfun" ,r-xfun)))
+     (list r-httpuv r-jsonlite r-mime r-xfun))
     (home-page "https://github.com/yihui/servr")
     (synopsis "Simple HTTP server to serve static files or dynamic documents")
     (description
@@ -1626,10 +1703,7 @@ a list of p-values.")
                 "1yv74ydyqm28gfhimmr7825sj1iaawpwsnzq05c2ma756q2dbivx"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-base64enc" ,r-base64enc)
-       ("r-digest" ,r-digest)
-       ("r-fastmap" ,r-fastmap)
-       ("r-rlang" ,r-rlang)))
+     (list r-base64enc r-digest r-fastmap r-rlang))
     (home-page "https://cran.r-project.org/web/packages/htmltools")
     (synopsis "R tools for HTML")
     (description
@@ -1648,11 +1722,9 @@ a list of p-values.")
                 "1hgz8sx8xrvfcdwa4q15k942w4qsqg8lyxbbf7qyfzbi807wcgqs"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-htmltools" ,r-htmltools)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-yaml" ,r-yaml)))
+     (list r-htmltools r-jsonlite r-yaml))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/ramnathv/htmlwidgets")
     (synopsis "HTML Widgets for R")
     (description
@@ -1664,25 +1736,25 @@ applications.")
 (define-public r-htmltable
   (package
     (name "r-htmltable")
-    (version "2.2.1")
+    (version "2.4.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "htmlTable" version))
        (sha256
-        (base32 "05zy9acx4s80dr880q69i4rcjqgmbz18gn7pyazda9gsnm981j96"))))
+        (base32 "17csp0ry4iy4m5xy271dn5wd81v4p03l79swmvlfxkvpdmhvb8jc"))))
     (properties `((upstream-name . "htmlTable")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-checkmate" ,r-checkmate)
-       ("r-htmltools" ,r-htmltools)
-       ("r-htmlwidgets" ,r-htmlwidgets)
-       ("r-knitr" ,r-knitr)
-       ("r-magrittr" ,r-magrittr)
-       ("r-rstudioapi" ,r-rstudioapi)
-       ("r-stringr" ,r-stringr)))
+     (list r-checkmate
+           r-htmltools
+           r-htmlwidgets
+           r-knitr
+           r-magrittr
+           r-rstudioapi
+           r-stringr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "http://gforge.se/packages/")
     (synopsis "Advanced tables for Markdown/HTML")
     (description
@@ -1724,11 +1796,9 @@ const char *_ca_bundle = getenv(\"CURL_CA_BUNDLE\");
 if(_ca_bundle != NULL) { curl_easy_setopt(handle, CURLOPT_CAINFO, _ca_bundle); }
 " m))))))))
     (inputs
-     `(("libcurl" ,curl)
-       ("zlib" ,zlib)))
+     (list curl zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("r-knitr" ,r-knitr)))
+     (list pkg-config r-knitr))
     (home-page "https://github.com/jeroenooms/curl")
     (synopsis "HTTP client for R")
     (description
@@ -1763,14 +1833,14 @@ objects in HTML format.")
 (define-public r-rjson
   (package
     (name "r-rjson")
-    (version "0.2.20")
+    (version "0.2.21")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "rjson" version))
        (sha256
         (base32
-         "0v1zvdd3svnavklh7y5xbwrrkbvx6053r4c5hgnk7hz7bqg7qa1s"))))
+         "1qm27r1w677zg31gsiln60hcciszbymkw78cnaq7s36cbk9mcawq"))))
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/web/packages/rjson")
     (synopsis "JSON library for R")
@@ -1817,7 +1887,7 @@ data structures in C++.")
     (properties `((upstream-name . "fastGHQuad")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)))
+     (list r-rcpp))
     (home-page "https://github.com/awblocker/fastGHQuad")
     (synopsis "Fast Rcpp implementation of Gauss-Hermite Quadrature")
     (description
@@ -1839,16 +1909,16 @@ rules and utility functions for adaptive GH quadrature.")
     (properties `((upstream-name . "rstpm2")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bbmle" ,r-bbmle)
-       ("r-bh" ,r-bh)
-       ("r-desolve" ,r-desolve)
-       ("r-fastghquad" ,r-fastghquad)
-       ("r-mgcv" ,r-mgcv)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-survival" ,r-survival)))
+     (list r-bbmle
+           r-bh
+           r-desolve
+           r-fastghquad
+           r-mgcv
+           r-rcpp
+           r-rcpparmadillo
+           r-survival))
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://github.com/mclements/rstpm2")
     (synopsis "Link-based survival models")
     (description
@@ -1904,9 +1974,9 @@ multi-state models.")
                                        (string-append "--outfile=" target)))
                              sources targets)))))))))
     (propagated-inputs
-     `(("r-htmltools" ,r-htmltools)))
+     (list r-htmltools))
     (native-inputs
-     `(("esbuild" ,esbuild)))
+     (list esbuild))
     (home-page "https://cran.r-project.org/package=jquerylib")
     (synopsis "Obtain jQuery as an HTML dependency object")
     (description
@@ -1931,12 +2001,8 @@ jQuery.")
     (properties `((upstream-name . "sass")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-fs" ,r-fs)
-       ("r-htmltools" ,r-htmltools)
-       ("r-r6" ,r-r6)
-       ("r-rappdirs" ,r-rappdirs)
-       ("r-rlang" ,r-rlang)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-fs r-htmltools r-r6 r-rappdirs r-rlang))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/rstudio/sass")
     (synopsis "Syntactically Awesome Style Sheets (SASS)")
     (description
@@ -1951,14 +2017,14 @@ language, which is stable, powerful, and CSS compatible.")
 (define-public r-bslib
   (package
     (name "r-bslib")
-    (version "0.3.0")
+    (version "0.3.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "bslib" version))
        (sha256
         (base32
-         "0zfjavz5jw4lfbrmc3rgsivcrxq2ia9jwmfbcrdxnxlmyri8qinr"))
+         "0jcqklry1nkibz0sydsz5xdsnb4wnrrhvmyr9ji3k45bbipbap2z"))
        (snippet
         '(for-each delete-file
                    '("inst/lib/bs-a11y-p/plugins/js/bootstrap-accessibility.min.js"
@@ -1998,11 +2064,7 @@ language, which is stable, powerful, and CSS compatible.")
                                        (string-append "--outfile=" target)))
                              sources targets)))))))))
     (propagated-inputs
-     `(("r-htmltools" ,r-htmltools)
-       ("r-jquerylib" ,r-jquerylib)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-rlang" ,r-rlang)
-       ("r-sass" ,r-sass)))
+     (list r-htmltools r-jquerylib r-jsonlite r-rlang r-sass))
     (native-inputs
      `(("esbuild" ,esbuild)
        ("js-bootstrap4-bundle"
@@ -2033,7 +2095,7 @@ previewing themes in real time.")
 (define-public r-shiny
   (package
     (name "r-shiny")
-    (version "1.6.0")
+    (version "1.7.1")
     (source
      (origin
        (method git-fetch)
@@ -2043,7 +2105,7 @@ previewing themes in real time.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0f6cwx5xyqzs40msq271sqhwl8736rwbm7kd1ldkcvxngzr4vlx9"))
+         "0wvc6jlgs41p05wbk8gahnl7sfnc4hpliyh9dbi5w52ngsg6wcr7"))
        (snippet
         '(for-each delete-file
                    '("inst/www/shared/bootstrap/js/bootstrap.min.js"
@@ -2080,17 +2142,17 @@ previewing themes in real time.")
                ;; replace them.
                (with-directory-excursion "inst/www/shared"
                  (replace-file "strftime/strftime-min.js"
-                               (string-append (assoc-ref inputs "js-strftime")
-                                              "/share/javascript/strftime.min.js"))
+                               (search-input-file inputs
+                                                  "/share/javascript/strftime.min.js"))
                  (replace-file "highlight/highlight.pack.js"
-                               (string-append (assoc-ref inputs "js-highlight")
-                                              "/share/javascript/highlight.min.js"))
+                               (search-input-file inputs
+                                                  "/share/javascript/highlight.min.js"))
                  (replace-file "datatables/js/jquery.dataTables.min.js"
-                               (string-append (assoc-ref inputs "js-datatables")
-                                              "/share/javascript/jquery.dataTables.min.js"))
+                               (search-input-file inputs
+                                                  "/share/javascript/jquery.dataTables.min.js"))
                  (replace-file "selectize/js/selectize.min.js"
-                               (string-append (assoc-ref inputs "js-selectize")
-                                              "/share/javascript/selectize.min.js"))
+                               (search-input-file inputs
+                                                  "/share/javascript/selectize.min.js"))
                  (for-each (match-lambda
                              ((source . target)
                               (minify source #:target target)))
@@ -2115,31 +2177,28 @@ previewing themes in real time.")
                              ("showdown/src/showdown.js" .
                               "showdown/compressed/showdown.js"))))))))))
     (propagated-inputs
-     `(("r-bslib" ,r-bslib)
-       ("r-cachem" ,r-cachem)
-       ("r-commonmark" ,r-commonmark)
-       ("r-crayon" ,r-crayon)
-       ("r-digest" ,r-digest)
-       ("r-ellipsis" ,r-ellipsis)
-       ("r-fastmap" ,r-fastmap)
-       ("r-glue" ,r-glue)
-       ("r-htmltools" ,r-htmltools)
-       ("r-httpuv" ,r-httpuv)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-later" ,r-later)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-mime" ,r-mime)
-       ("r-promises" ,r-promises)
-       ("r-r6" ,r-r6)
-       ("r-rlang" ,r-rlang)
-       ("r-sourcetools" ,r-sourcetools)
-       ("r-withr" ,r-withr)
-       ("r-xtable" ,r-xtable)))
+     (list r-bslib
+           r-cachem
+           r-commonmark
+           r-crayon
+           r-ellipsis
+           r-fastmap
+           r-fontawesome
+           r-glue
+           r-htmltools
+           r-httpuv
+           r-jsonlite
+           r-later
+           r-lifecycle
+           r-mime
+           r-promises
+           r-r6
+           r-rlang
+           r-sourcetools
+           r-withr
+           r-xtable))
     (inputs
-     `(("js-datatables" ,js-datatables)
-       ("js-selectize" ,js-selectize)
-       ("js-strftime" ,js-strftime)
-       ("js-highlight" ,js-highlight)))
+     (list js-datatables js-selectize js-strftime js-highlight))
     (native-inputs
      `(("uglifyjs" ,node-uglify-js)
        ("gfortran" ,gfortran)
@@ -2160,6 +2219,27 @@ extensive prebuilt widgets make it possible to build beautiful,
 responsive, and powerful applications with minimal effort.")
     (license license:artistic2.0)))
 
+(define-public r-shinyhelper
+  (package
+    (name "r-shinyhelper")
+    (version "0.3.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "shinyhelper" version))
+       (sha256
+        (base32 "1c4hvf19j3yyh8r12nx85ldkxs89g98q74csnqs5ml5l79a65vgp"))))
+    (properties `((upstream-name . "shinyhelper")))
+    (build-system r-build-system)
+    (propagated-inputs (list r-markdown r-shiny))
+    (home-page "https://cran.r-project.org/package=shinyhelper")
+    (synopsis "Easily add Markdown help files to shiny app elements")
+    (description
+     "This package creates a lightweight way to add markdown helpfiles to
+Shiny apps, using modal dialog boxes, with no need to observe each help button
+separately.")
+    (license license:gpl3)))
+
 ;; This package includes minified JavaScript files.  When upgrading please
 ;; check that there are no new minified JavaScript files.
 (define-public r-shinytree
@@ -2194,8 +2274,8 @@ responsive, and powerful applications with minimal effort.")
          (add-after 'unpack 'replace-minified-javascript
            (lambda* (#:key inputs #:allow-other-keys)
              (with-directory-excursion "inst/www/jsTree-3.3.7/"
-               (symlink (string-append (assoc-ref inputs "js-requirejs")
-                                       "/share/javascript/require.min.js")
+               (symlink (search-input-file inputs
+                                           "/share/javascript/require.min.js")
                         "libs/require.js")
                (call-with-values
                    (lambda ()
@@ -2215,13 +2295,9 @@ responsive, and powerful applications with minimal effort.")
                              sources targets))))
              #t)))))
     (propagated-inputs
-     `(("r-htmlwidgets" ,r-htmlwidgets)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-promises" ,r-promises)
-       ("r-shiny" ,r-shiny)
-       ("r-stringr" ,r-stringr)))
+     (list r-htmlwidgets r-jsonlite r-promises r-shiny r-stringr))
     (inputs
-     `(("js-requirejs" ,js-requirejs)))
+     (list js-requirejs))
     (native-inputs
      `(("uglifyjs" ,node-uglify-js)
        ("js-jquery"
@@ -2241,36 +2317,33 @@ supports interactive trees, to enable rich, editable trees in Shiny.")
 (define-public r-shinydashboard
   (package
     (name "r-shinydashboard")
-    (version "0.7.1")
+    (version "0.7.2")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "shinydashboard" version))
               (sha256
                (base32
-                "0khac8b27q3swdw07kl609hm0fjfjsjv591b388q99mqqr2rk92i"))))
+                "0hrqkwlpb8rnmp5j74p134g4c4cl16icmwc2ip6k1634fa2y8vm5"))))
     (build-system r-build-system)
     ;; The directory inst/AdminLTE/ contains a minified JavaScript file.
     ;; Regenerate it from the included sources.
     (arguments
-     `(#:modules ((guix build utils)
-                  (guix build r-build-system)
-                  (ice-9 popen))
-       #:phases
+     `(#:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'generate-minified-javascript
            (lambda _
              (with-directory-excursion "inst/AdminLTE"
-               (delete-file "app.min.js")
-               (let ((minified (open-pipe* OPEN_READ "uglifyjs" "app.js")))
-                 (call-with-output-file "app.min.js"
-                   (lambda (port)
-                     (dump-port minified port))))))))))
+               (let ((target "app.min.js")
+                     (source "app.js"))
+                 (format #t "Processing ~a --> ~a~%"
+                         source target)
+                 (delete-file target)
+                 (invoke "esbuild" source "--minify"
+                         (string-append "--outfile=" target)))))))))
     (propagated-inputs
-     `(("r-htmltools" ,r-htmltools)
-       ("r-promises" ,r-promises)
-       ("r-shiny" ,r-shiny)))
+     (list r-htmltools r-promises r-shiny))
     (native-inputs
-     `(("uglifyjs" ,node-uglify-js)))
+     (list esbuild))
     (home-page "https://rstudio.github.io/shinydashboard/")
     (synopsis "Create dashboards with shiny")
     (description "This package provides an extension to the Shiny web
@@ -2283,21 +2356,17 @@ application framework for R, making it easy to create attractive dashboards.")
 (define-public r-shinyfiles
   (package
     (name "r-shinyfiles")
-    (version "0.9.0")
+    (version "0.9.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "shinyFiles" version))
        (sha256
-        (base32 "0rsijlx16vd74r7bd8s9zipy71kgpw19v9s85kxj5bmwc6njmbai"))))
+        (base32 "0f8dfdiar376lx0979ccyghgx5rhr08v5z3z60asrrjsxlq4cs85"))))
     (properties `((upstream-name . "shinyFiles")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-fs" ,r-fs)
-       ("r-htmltools" ,r-htmltools)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-shiny" ,r-shiny)
-       ("r-tibble" ,r-tibble)))
+     (list r-fs r-htmltools r-jsonlite r-shiny r-tibble))
     (home-page "https://github.com/thomasp85/shinyFiles")
     (synopsis "Server-side file system viewer for Shiny")
     (description
@@ -2321,7 +2390,7 @@ well as file saving is available.")
          "0qr9bfxw8afxns44i2j4msignf6g5qb2nzpay2lpv343rrlqbmip"))))
     (properties `((upstream-name . "shinythemes")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-shiny" ,r-shiny)))
+    (propagated-inputs (list r-shiny))
     (home-page "https://rstudio.github.io/shinythemes/")
     (synopsis "Themes for Shiny")
     (description
@@ -2378,10 +2447,7 @@ Bootstrap themes, which are packaged for use with Shiny applications.")
                                        (string-append "--outfile=" target)))
                              sources targets)))))))))
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-htmltools" ,r-htmltools)
-       ("r-rlang" ,r-rlang)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-dplyr r-htmltools r-rlang r-tidyr))
     (native-inputs
      `(("esbuild" ,esbuild)
        ("d3.v3.js"
@@ -2449,10 +2515,7 @@ R objects into the JSON format that the d3.js library expects.")
            "0jrcnfax321pszbpjdifnkbrgbjr43bjzvlzv1p5a8wskksqwiyx"))))
       (build-system r-build-system)
       (propagated-inputs
-       `(("r-d3r" ,r-d3r)
-         ("r-htmlwidgets" ,r-htmlwidgets)
-         ("r-shiny" ,r-shiny)
-         ("r-magrittr" ,r-magrittr)))
+       (list r-d3r r-htmlwidgets r-shiny r-magrittr))
       (home-page "https://github.com/fbreitwieser/sankeyD3")
       (synopsis "Sankey network graphs from R")
       (description
@@ -2497,8 +2560,7 @@ from Wes Anderson movies.")
     (properties `((upstream-name . "gg.gap")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cowplot" ,r-cowplot)
-       ("r-ggplot2" ,r-ggplot2)))
+     (list r-cowplot r-ggplot2))
     (home-page "https://github.com/ChrisLou-bioinfo/gg.gap")
     (synopsis "Define segments on the y-axis for ggplot2")
     (description
@@ -2551,9 +2613,7 @@ in a ggplot2 plot.")
                              sources targets))))
              #t)))))
     (propagated-inputs
-     `(("r-htmltools" ,r-htmltools)
-       ("r-knitr" ,r-knitr)
-       ("r-shiny" ,r-shiny)))
+     (list r-htmltools r-knitr r-shiny))
     (native-inputs
      `(("esbuild" ,esbuild)
        ("js-requirejs"
@@ -2595,10 +2655,7 @@ contained in the navigation bar.")
     (properties `((upstream-name . "spelling")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-commonmark" ,r-commonmark)
-       ("r-hunspell" ,r-hunspell)
-       ("r-knitr" ,r-knitr)
-       ("r-xml2" ,r-xml2)))
+     (list r-commonmark r-hunspell r-knitr r-xml2))
     (home-page "https://docs.ropensci.org/spelling/")
     (synopsis "Tools for spell checking in R")
     (description
@@ -2614,20 +2671,17 @@ punctuation.")
 (define-public r-crosstalk
   (package
     (name "r-crosstalk")
-    (version "1.1.1")
+    (version "1.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "crosstalk" version))
        (sha256
         (base32
-         "1n6c6s7a6yxiwvva71x6bzcrim8xprl5s01fqiy61yq0y3vk8cpd"))))
+         "180y7mhpj17axpadwhh7s0qvrpdnag7g977vk256l96d6nmvlds2"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-htmltools" ,r-htmltools)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-lazyeval" ,r-lazyeval)
-       ("r-r6" ,r-r6)))
+     (list r-htmltools r-jsonlite r-lazyeval r-r6))
     (home-page "https://rstudio.github.io/crosstalk/")
     (synopsis "Inter-widget interactivity for HTML widgets")
     (description
@@ -2649,7 +2703,7 @@ files).  It currently supports linked brushing and filtering.")
          "00s9a0kr9rwxvlq433daxjk4ji8m0w60hjdprf502msw9kxfrx00"))))
     (properties `((upstream-name . "Rook")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-brew" ,r-brew)))
+    (propagated-inputs (list r-brew))
     (home-page "https://cran.r-project.org/web/packages/Rook")
     (synopsis "Web server interface for R")
     (description
@@ -2674,8 +2728,7 @@ named elements: the @code{status}, the @code{headers}, and the @code{body}.")
     (properties `((upstream-name . "miniUI")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-htmltools" ,r-htmltools)
-       ("r-shiny" ,r-shiny)))
+     (list r-htmltools r-shiny))
     (home-page "https://cran.r-project.org/web/packages/miniUI/")
     (synopsis "Shiny UI widgets for small screens")
     (description
@@ -2696,9 +2749,7 @@ work well on small screens.")
          "1gxd0h2m56sjjlzn4dry6s13nddxc4l5i11gsvavaf2dwbahdzsh"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-hms" ,r-hms)
-       ("r-rcpp" ,r-rcpp)
-       ("r-tibble" ,r-tibble)))
+     (list r-hms r-rcpp r-tibble))
     (home-page "https://github.com/wesm/feather")
     (synopsis "R Bindings to the Feather API")
     (description "Read and write feather files, a lightweight binary columnar
@@ -2727,16 +2778,16 @@ Projection code and larger maps are in separate packages (@code{mapproj} and
 (define-public r-mapproj
   (package
     (name "r-mapproj")
-    (version "1.2.7")
+    (version "1.2.8")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "mapproj" version))
        (sha256
         (base32
-         "0nscsfq8md6ri9258xz57c3dj81wdl6kdwf4a9qcrwwbn20i427h"))))
+         "10bpib827011fpgvzsmlv4j3i41s0r3cv1hvawwdlk753s7i0pw6"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-maps" ,r-maps)))
+    (propagated-inputs (list r-maps))
     (home-page "https://cran.r-project.org/web/packages/mapproj")
     (synopsis "Map projection in R")
     (description "This package converts latitude/longitude into projected
@@ -2760,8 +2811,7 @@ coordinates.")
     (properties `((upstream-name . "RgoogleMaps")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-png" ,r-png)
-       ("r-sp" ,r-sp)))
+     (list r-png r-sp))
     (home-page "https://cran.r-project.org/web/packages/RgoogleMaps")
     (synopsis "Use Google Maps in R")
     (description "This package serves two purposes:
@@ -2776,16 +2826,16 @@ coordinates.")
 (define-public r-geosphere
   (package
     (name "r-geosphere")
-    (version "1.5-10")
+    (version "1.5-14")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "geosphere" version))
        (sha256
         (base32
-         "15xlgsmn0vwky1l13n6acdz6jn2b2na3gf6x367y3qh1f5w4zkan"))))
+         "0bg4vfmrw140j2ax0p6bflvb77w03ir39wa87l96rj473jpa9hzj"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-sp" ,r-sp)))
+    (propagated-inputs (list r-sp))
     (home-page "https://cran.r-project.org/web/packages/geosphere")
     (synopsis "Spherical trigonometry")
     (description "This package computes spherical trigonometry for geographic
@@ -2805,7 +2855,7 @@ applications.  That is, compute distances and related measures for angular
         (base32
          "0wihj538wdnr71wdldym83qadb4kh68a6rkallwbh2f25r27b881"))))
     (build-system r-build-system)
-    (inputs `(("libjpeg" ,libjpeg-turbo)))
+    (inputs (list libjpeg-turbo))
     (home-page "https://www.rforge.net/jpeg/")
     (synopsis "Read and write JPEG images with R")
     (description "This package provides a way to read, write and display
@@ -2826,23 +2876,23 @@ files and in-memory raw vectors.")
          "13dmzl6z62pzjiffilarkji46vy0sacxa8a7mhrhc3biq3ylzhln"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bitops" ,r-bitops)
-       ("r-digest" ,r-digest)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-glue" ,r-glue)
-       ("r-httr" ,r-httr)
-       ("r-jpeg" ,r-jpeg)
-       ("r-magrittr" ,r-magrittr)
-       ("r-plyr" ,r-plyr)
-       ("r-png" ,r-png)
-       ("r-purrr" ,r-purrr)
-       ("r-rgooglemaps" ,r-rgooglemaps)
-       ("r-rjson" ,r-rjson)
-       ("r-scales" ,r-scales)
-       ("r-stringr" ,r-stringr)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-bitops
+           r-digest
+           r-dplyr
+           r-ggplot2
+           r-glue
+           r-httr
+           r-jpeg
+           r-magrittr
+           r-plyr
+           r-png
+           r-purrr
+           r-rgooglemaps
+           r-rjson
+           r-scales
+           r-stringr
+           r-tibble
+           r-tidyr))
     (home-page "https://github.com/dkahle/ggmap")
     (synopsis "Spatial visualization with ggplot2")
     (description "This package provides a collection of functions to visualize
@@ -2876,18 +2926,18 @@ including functions for geolocation and routing.")
              (substitute* "src/Makevars"
                (("-lz") "-lreadstat")))))))
     (inputs
-     `(("readstat" ,readstat)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
-    (propagated-inputs
-     `(("r-cpp11" ,r-cpp11)
-       ("r-forcats" ,r-forcats)
-       ("r-hms" ,r-hms)
-       ("r-rlang" ,r-rlang)
-       ("r-readr" ,r-readr)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyselect" ,r-tidyselect)
-       ("r-vctrs" ,r-vctrs)))
+     (list readstat))
+    (native-inputs
+     (list r-knitr))
+    (propagated-inputs
+     (list r-cpp11
+           r-forcats
+           r-hms
+           r-rlang
+           r-readr
+           r-tibble
+           r-tidyselect
+           r-vctrs))
     (home-page "https://haven.tidyverse.org")
     (synopsis "Import and export SPSS, Stata and SAS files")
     (description
@@ -2907,7 +2957,7 @@ including functions for geolocation and routing.")
                 "0zpcb73w413na23f6giml9311jh0j0y766w2fh9i40d2h7bbvyvs"))))
     (build-system r-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "http://mulcyber.toulouse.inra.fr/projects/amap/")
     (synopsis "Another multidimensional analysis package")
     (description "This package provides tools for clustering and principal
@@ -2917,19 +2967,17 @@ component analysis (with robust methods, and parallelized functions).")
 (define-public r-ape
   (package
     (name "r-ape")
-    (version "5.5")
+    (version "5.6-1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "ape" version))
        (sha256
         (base32
-         "16i9sny7j90zi0k3znfff5lpnj5naxcy1142v73zxslr9g3h3am3"))))
+         "1xzpq3a4q5hmksc8nl530c9n31fdkj3nigqm1qhd3vkncl1iwh15"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lattice" ,r-lattice)
-       ("r-nlme" ,r-nlme)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-lattice r-nlme r-rcpp))
     (home-page "http://ape-package.ird.fr/")
     (synopsis "Analyses of phylogenetics and evolution")
     (description
@@ -2954,12 +3002,12 @@ and several other tools.")
     (properties `((upstream-name . "abbyyR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-curl" ,r-curl)
-       ("r-httr" ,r-httr)
-       ("r-plyr" ,r-plyr)
-       ("r-progress" ,r-progress)
-       ("r-readr" ,r-readr)
-       ("r-xml" ,r-xml)))
+     (list r-curl
+           r-httr
+           r-plyr
+           r-progress
+           r-readr
+           r-xml))
     (home-page "https://github.com/soodoku/abbyyR")
     (synopsis "Access to Abbyy Optical Character Recognition (OCR) API")
     (description
@@ -2982,7 +3030,7 @@ XML.  To learn more about the Abbyy OCR API, see @url{http://ocrsdk.com/}.")
         (base32 "0fhq2aykdkxh3r90i8aqjyb37p5api3mjd19ch8mzv99q4pcv4dq"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/colorspace")
     (synopsis "Color space manipulation")
     (description
@@ -2995,14 +3043,14 @@ colors are provided.")
 (define-public r-glue
   (package
     (name "r-glue")
-    (version "1.4.2")
+    (version "1.6.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "glue" version))
        (sha256
         (base32
-         "1bgpirdvjrf0da734clrixawvpdap4lpda4g89vais96589m8wwz"))))
+         "0f23dgnc7rv81vhmdhmiwk666mqwb602hxzai1hssyn4y9zg7gkp"))))
     (build-system r-build-system)
     ;; knitr depends on glue, so we can't add knitr here to build the
     ;; vignettes.
@@ -3053,7 +3101,7 @@ Station Long Term Ecological Research (LTER) Program.")
               "0z4dic94ar646w7zc2ggi5hgvf2qnznsani94c5pyql8zspz47lc"))))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-boot" ,r-boot)))
+    (list r-boot))
    (home-page "https://github.com/phgrosjean/pastecs")
    (synopsis "Analysis of space-time ecological series")
    (description
@@ -3074,12 +3122,12 @@ initiative to bring PASSTEC 2000 functionalities to R.")
                "1b73s5l19yicwginqsg5xr7fzb005x372n0wb34kk6jb5x5lbsdj"))))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-formula" ,r-formula)
-      ("r-inum" ,r-inum)
-      ("r-libcoin" ,r-libcoin)
-      ("r-mvtnorm" ,r-mvtnorm)
-      ("r-rpart" ,r-rpart)
-      ("r-survival" ,r-survival)))
+    (list r-formula
+          r-inum
+          r-libcoin
+          r-mvtnorm
+          r-rpart
+          r-survival))
    (home-page "http://partykit.R-Forge.R-project.org/partykit")
    (synopsis "Toolkit for recursive partytioning")
    (description
@@ -3163,23 +3211,23 @@ processes.  Most of its code is based on the @code{psutil} Python package.")
 (define-public r-pkgbuild
   (package
     (name "r-pkgbuild")
-    (version "1.2.0")
+    (version "1.3.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "pkgbuild" version))
        (sha256
-        (base32 "0qx920h2viwjg10va81nj0xja495d8ni6vcc25ggvzki6a6k069f"))))
+        (base32 "0j6v5nbp8kg1m3j999gd1qsbdmqcqm1mf28ngmm177miwv8q4skw"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-callr" ,r-callr)
-       ("r-cli" ,r-cli)
-       ("r-crayon" ,r-crayon)
-       ("r-desc" ,r-desc)
-       ("r-prettyunits" ,r-prettyunits)
-       ("r-r6" ,r-r6)
-       ("r-rprojroot" ,r-rprojroot)
-       ("r-withr" ,r-withr)))
+     (list r-callr
+           r-cli
+           r-crayon
+           r-desc
+           r-prettyunits
+           r-r6
+           r-rprojroot
+           r-withr))
     (home-page "https://github.com/r-pkgs/pkgbuild")
     (synopsis "Find tools needed to build R packages")
     (description
@@ -3191,23 +3239,23 @@ is configured appropriately so R can use them.")
 (define-public r-pkgload
   (package
     (name "r-pkgload")
-    (version "1.2.2")
+    (version "1.2.4")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "pkgload" version))
        (sha256
         (base32
-         "0yxvik8kij0mqlki46hf6xnbfvmxwk0r2a3zwjpg0fwcd2s835a8"))))
+         "03yr9mswx9nij27bp21q6c533zx310xwzhwm52dwr7554k42p4fn"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cli" ,r-cli)
-       ("r-crayon" ,r-crayon)
-       ("r-desc" ,r-desc)
-       ("r-rlang" ,r-rlang)
-       ("r-rprojroot" ,r-rprojroot)
-       ("r-rstudioapi" ,r-rstudioapi)
-       ("r-withr" ,r-withr)))
+     (list r-cli
+           r-crayon
+           r-desc
+           r-rlang
+           r-rprojroot
+           r-rstudioapi
+           r-withr))
     (home-page "https://github.com/r-lib/pkgload")
     (synopsis "Simulate package installation and attach")
     (description
@@ -3239,13 +3287,13 @@ value for each cluster in a dendrogram.")
 (define-public r-rcpp
   (package
     (name "r-rcpp")
-    (version "1.0.7")
+    (version "1.0.8")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "Rcpp" version))
        (sha256
-        (base32 "07fwlgmx0ib4nziqbrylla2dlakw04vzny9w4qbfvnhn49rs9r8m"))))
+        (base32 "1vkqyqly6lzr1h3szaihmayvpjkzscxp4y258vnw8nh4pjb957w7"))))
     (build-system r-build-system)
     (home-page "http://www.rcpp.org")
     (synopsis "Seamless R and C++ integration")
@@ -3293,8 +3341,7 @@ safely be interrupted from R.")
                 "1a92fql6mijhnr1kxkcxwivf95pk9lhgmhzkshs51h0ybfv5krik"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)
-       ("r-rcppeigen" ,r-rcppeigen)))
+     (list r-rcpp r-rcppeigen))
     (home-page "https://github.com/yixuan/RcppNumerical")
     (synopsis"Numerical computing libraries integration with @code{Rcpp}")
     (description "This package provides a collection of libraries for numerical
@@ -3334,9 +3381,7 @@ where the bound function accepts additional arguments.")
          "0rz4ibjdjsxl99ff3ha79z7cnjmilx4rx58fk9kk7ld9xc4hf4s8"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bindr" ,r-bindr)
-       ("r-plogr" ,r-plogr)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-bindr r-plogr r-rcpp))
     (home-page "https://github.com/krlmlr/bindrcpp")
     (synopsis "Rcpp interface to active bindings")
     (description
@@ -3380,7 +3425,7 @@ is provided.")
         (base32 "19kgrnsyq67iqv1biyssqi30a6v2836ql20nabpy2m692ns0jfvi"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mass" ,r-mass)))
+     (list r-mass))
     (home-page "https://cran.r-project.org/web/packages/calibrate")
     (synopsis "Calibration of scatterplot and biplot axes")
     (description
@@ -3420,7 +3465,7 @@ ellipses, circles, cylinders, arrows, ...")
     (properties `((upstream-name . "GlobalOptions")))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/jokergoo/GlobalOptions")
     (synopsis "Generate functions to get or set global options")
     (description
@@ -3441,11 +3486,9 @@ validation and filtering on the values, making options invisible or private.")
          "16rnqlkgzhnm69y70k9fiz8vvwlm5dyng04hlxqvvaxix3wdpfkc"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-colorspace" ,r-colorspace)
-       ("r-globaloptions" ,r-globaloptions)
-       ("r-shape" ,r-shape)))
+     (list r-colorspace r-globaloptions r-shape))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/jokergoo/circlize")
     (synopsis "Circular visualization")
     (description
@@ -3473,9 +3516,9 @@ multi-dimensional data.")
     (properties `((upstream-name . "poweRlaw")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-pracma" ,r-pracma)))
+     (list r-pracma))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/csgillespie/poweRlaw")
     (synopsis "Tools for the analysis of heavy tailed distributions")
     (description
@@ -3510,21 +3553,19 @@ rows, dropping names) to see if the modified versions are identical.")
 (define-public r-dendextend
   (package
     (name "r-dendextend")
-    (version "1.15.1")
+    (version "1.15.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "dendextend" version))
        (sha256
         (base32
-         "0zf4w4rc2jj30i3x0m0gnkwidfmn3cvz1wirp20amq4v3n9420md"))))
+         "06wjs8451hmnimzgngpzbai3yrgy33133vzzapa8jib9crdqi8sb"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-magrittr" ,r-magrittr)
-       ("r-viridis" ,r-viridis)))
+     (list r-ggplot2 r-magrittr r-viridis))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/dendextend")
     (synopsis "Extending 'dendrogram' functionality in R")
     (description
@@ -3550,13 +3591,11 @@ compare different dendrograms to one another.")
     (properties `((upstream-name . "GetoptLong")))
     (build-system r-build-system)
     (inputs
-     `(("perl" ,perl)))
+     (list perl))
     (propagated-inputs
-     `(("r-crayon" ,r-crayon)
-       ("r-globaloptions" ,r-globaloptions)
-       ("r-rjson" ,r-rjson)))
+     (list r-crayon r-globaloptions r-rjson))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/jokergoo/GetoptLong")
     (synopsis "Parsing command-line arguments and variable interpolation")
     (description
@@ -3589,16 +3628,16 @@ any subsequent lookup as it keeps the hash table in memory.")
 (define-public r-ff
   (package
     (name "r-ff")
-    (version "4.0.4")
+    (version "4.0.5")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "ff" version))
        (sha256
         (base32
-         "1rfj2ff5cxzdp9nvfnbgmswc1jvxz5vkxqgpv6gprwk32a0z3v12"))))
+         "0dsh6llfdz04w94xr3yl2b4vkk9g3rwhvfnxcd025v2424krxfls"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-bit" ,r-bit)))
+    (propagated-inputs (list r-bit))
     (home-page "http://ff.r-forge.r-project.org/")
     (synopsis "Memory-efficient storage of large data on disk and access functions")
     (description
@@ -3622,9 +3661,7 @@ in main memory.")
          "1dp6lblfq2j7r1b4b8ls47jlx8j27n88d5vp8w116lb8pa01zxmk"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bit" ,r-bit)
-       ("r-fastmatch" ,r-fastmatch)
-       ("r-ff" ,r-ff)))
+     (list r-bit r-fastmatch r-ff))
     (home-page "https://github.com/edwindj/ffbase")
     (synopsis "Basic statistical functions for package 'ff'")
     (description
@@ -3663,7 +3700,7 @@ quantities.")
               "0wzk329bxljkzz57y220lsfckpsn45w348m6dcxh29zbj0ik65h2"))))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-rcpp" ,r-rcpp)))
+    (list r-rcpp))
    (home-page "https://github.com/rcannood/princurve")
    (synopsis "Fit a principal curve in arbitrary dimension")
    (description "This package provides procedures for fitting a principal
@@ -3683,8 +3720,7 @@ curve to a data matrix in arbitrary dimensions.")
          "0s6i0sqxg1vldxs6miv8mi0zydxbqzgpmzfiwkj8y7jix3yrfmad"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-plyr" ,r-plyr)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-plyr r-rcpp))
     (home-page "http://had.co.nz/reshape")
     (synopsis "Flexibly reshape data")
     (description
@@ -3704,15 +3740,15 @@ curve to a data matrix in arbitrary dimensions.")
         (base32 "1486hrzj5q5w4nbrsbqlv7vv20ly01y90qc2vygl5syzwvyjd422"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-checkmate" ,r-checkmate)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-mime" ,r-mime)
-       ("r-r6" ,r-r6)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rserve" ,r-rserve)
-       ("r-uuid" ,r-uuid)))
+     (list r-checkmate
+           r-jsonlite
+           r-mime
+           r-r6
+           r-rcpp
+           r-rserve
+           r-uuid))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://restrserve.org")
     (synopsis "R web API framework")
     (description
@@ -3735,10 +3771,7 @@ parallel - each request in a separate fork.")
          "0dgzb362641aqm8xd88iqa8jmpdm43xs0aba0d5kk6fvapnxi95l"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-crayon" ,r-crayon)
-       ("r-hms" ,r-hms)
-       ("r-prettyunits" ,r-prettyunits)
-       ("r-r6" ,r-r6)))
+     (list r-crayon r-hms r-prettyunits r-r6))
     (home-page "https://github.com/gaborcsardi/progress")
     (synopsis "Terminal progress bars")
     (description
@@ -3762,20 +3795,20 @@ package also provides a C++ API, that works with or without Rcpp.")
     (properties `((upstream-name . "GGally")))
     (build-system r-build-system)
     (inputs
-     `(("openssl" ,openssl)))
-    (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-forcats" ,r-forcats)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gtable" ,r-gtable)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-plyr" ,r-plyr)
-       ("r-progress" ,r-progress)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-reshape" ,r-reshape)
-       ("r-rlang" ,r-rlang)
-       ("r-scales" ,r-scales)
-       ("r-tidyr" ,r-tidyr)))
+     (list openssl))
+    (propagated-inputs
+     (list r-dplyr
+           r-forcats
+           r-ggplot2
+           r-gtable
+           r-lifecycle
+           r-plyr
+           r-progress
+           r-rcolorbrewer
+           r-reshape
+           r-rlang
+           r-scales
+           r-tidyr))
     (home-page "https://ggobi.github.io/ggally")
     (synopsis "Extension to ggplot2")
     (description
@@ -3810,16 +3843,18 @@ most popular ones.")
 (define-public r-sp
   (package
     (name "r-sp")
-    (version "1.4-5")
+    (version "1.4-6")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "sp" version))
        (sha256
-        (base32 "1nh9izsnszzm5kbq461w8bi0yh7fqzb74b2zmpg5qis0slbb5vkb"))))
+        (base32 "09m2ddbrbs2aqnq5si42ipa0g1vbd0pxg4zbcx59is2047pv7sws"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lattice" ,r-lattice)))
+     (list r-lattice))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/sp")
     (synopsis "Classes and methods for spatial data")
     (description
@@ -3873,13 +3908,13 @@ matrices.")
 (define-public r-rmpi
   (package
     (name "r-rmpi")
-    (version "0.6-9.1")
+    (version "0.6-9.2")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "Rmpi" version))
               (sha256
                (base32
-                "1j8akqjan59yzwx2s1zxc214qyd323fd2i2dhgq0n11mb6ajmq4r"))))
+                "06mxqgrimhfsag5giv810c7ycdbaycqs4qcj41pnfbj0jypw32im"))))
     (properties `((upstream-name . "Rmpi")))
     (build-system r-build-system)
     (arguments
@@ -3888,9 +3923,9 @@ matrices.")
                   (add-before 'install 'mpi-setup
                     ,%openmpi-setup))))
     (inputs
-     `(("openmpi" ,openmpi)))
+     (list openmpi))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://www.stats.uwo.ca/faculty/yu/Rmpi")
     (synopsis "R interface to message-passing interface (MPI)")
     (description
@@ -3912,8 +3947,7 @@ provides an interactive R manager and worker environment.")
     (properties `((upstream-name . "Lmoments")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)))
+     (list r-rcpp r-rcpparmadillo))
     (home-page "http://www.tilastotiede.fi/juha_karvanen.html")
     (synopsis "L-moments and quantile mixtures")
     (description
@@ -3977,8 +4011,7 @@ which should be seen for details.")
     (properties `((upstream-name . "extRemes")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-distillery" ,r-distillery)
-       ("r-lmoments" ,r-lmoments)))
+     (list r-distillery r-lmoments))
     (home-page "https://www.assessment.ucar.edu/toolkit/")
     (synopsis "Extreme value analysis")
     (description
@@ -3990,19 +4023,19 @@ or excesses over a high threshold.")
 (define-public r-lmtest
   (package
     (name "r-lmtest")
-    (version "0.9-38")
+    (version "0.9-39")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "lmtest" version))
        (sha256
         (base32
-         "0sr19bmw2cpagfvwg772m79wvl1i2hww1xfr69bzr3rr8pm2r8ij"))))
+         "126l0y7j2iy6g1w4zii1qkfcjq6wrnc3w2li0bz376smpryddy3i"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-zoo" ,r-zoo)))
+     (list r-zoo))
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/lmtest")
     (synopsis "Testing linear regression models")
     (description
@@ -4064,7 +4097,7 @@ and S4 methods with inlined C, C++ or Fortran code supporting @code{.C} and
                 "1khkzja8lwn9075864vbyajqina9m588ahf1fsrrajrsqilyzssz"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-libcoin" ,r-libcoin)))
+     (list r-libcoin))
     (home-page "https://cran.r-project.org/web/packages/inum/")
     (synopsis "Interval and enum-type representation of vectors")
     (description
@@ -4124,14 +4157,14 @@ matrices, a special case of sparse matrices.")
          "1bck8rmink4wsk8pcbnj4d60svxymp29pxbzwj8p9gzsg42c1v81"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bdsmatrix" ,r-bdsmatrix)
-       ("r-lattice" ,r-lattice)
-       ("r-mass" ,r-mass)
-       ("r-matrix" ,r-matrix)
-       ("r-mvtnorm" ,r-mvtnorm)
-       ("r-numderiv" ,r-numderiv)))
+     (list r-bdsmatrix
+           r-lattice
+           r-mass
+           r-matrix
+           r-mvtnorm
+           r-numderiv))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/bbmle")
     (synopsis "Tools for General Maximum Likelihood Estimation")
     (description
@@ -4154,11 +4187,7 @@ classes in the @code{stats4} package.")
          "0ls3zxxlwmdv7zn1v9i1y9zc2sn0hbgmyjvsj7zn3ajsw7wwlih6"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bbmle" ,r-bbmle)
-       ("r-coda" ,r-coda)
-       ("r-lattice" ,r-lattice)
-       ("r-mass" ,r-mass)
-       ("r-plyr" ,r-plyr)))
+     (list r-bbmle r-coda r-lattice r-mass r-plyr))
     (home-page "http://www.math.mcmaster.ca/bolker/emdbook")
     (synopsis "Support functions and data for \"Ecological Models and Data\"")
     (description
@@ -4204,10 +4233,8 @@ transportation problems.")
     (properties `((upstream-name . "limSolve")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lpsolve" ,r-lpsolve)
-       ("r-mass" ,r-mass)
-       ("r-quadprog" ,r-quadprog)))
-    (native-inputs `(("gfortran" ,gfortran)))
+     (list r-lpsolve r-mass r-quadprog))
+    (native-inputs (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/limSolve")
     (synopsis "Solving linear inverse models")
     (description
@@ -4227,20 +4254,19 @@ functions from LINPACK.")
 (define-public r-fitdistrplus
   (package
     (name "r-fitdistrplus")
-    (version "1.1-5")
+    (version "1.1-6")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "fitdistrplus" version))
        (sha256
         (base32
-         "1p9rvvh05zqb9vzhcyzdh7i8lbmb53nj8nyn0gqcmp7wafg9cd1f"))))
+         "1glnbcm1gghzgvzpxcfsmn7dp2f9jqyx39n3ydwp9fx38409khhp"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mass" ,r-mass)
-       ("r-survival" ,r-survival)))
+     (list r-mass r-survival))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "http://riskassessment.r-forge.r-project.org")
     (synopsis "Fitting a parametric distribution from data")
     (description
@@ -4267,9 +4293,7 @@ data).  Weighted versions of MLE, MME and QME are available.")
          "12a7gy681aq3l55iys044cs6sn1s2l5qihghpdl01cvv0ggfh26y"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-boot" ,r-boot)
-       ("r-gsl" ,r-gsl)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-boot r-gsl r-rcpp))
     (home-page "https://cran.r-project.org/web/packages/energy")
     (synopsis "Multivariate inference via the energy of data")
     (description
@@ -4287,14 +4311,14 @@ statistics/methods are implemented.")
 (define-public r-suppdists
   (package
     (name "r-suppdists")
-    (version "1.1-9.5")
+    (version "1.1-9.7")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "SuppDists" version))
        (sha256
         (base32
-         "1i3iq12a5x5k49ac01mikzcrrq9gc148xq3m08h4xm07bha6f2v8"))))
+         "025b9nlxz62wk84295csyzbncpn80i3iby3sxdigf3swcgi2fmbb"))))
     (properties `((upstream-name . "SuppDists")))
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/web/packages/SuppDists")
@@ -4322,7 +4346,7 @@ George Marsaglia are included.")
     (properties `((upstream-name . "kSamples")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-suppdists" ,r-suppdists)))
+     (list r-suppdists))
     (home-page "https://cran.r-project.org/web/packages/kSamples")
     (synopsis "K-Sample rank tests and their combinations")
     (description
@@ -4350,8 +4374,7 @@ samples.")
     (properties `((upstream-name . "CVST")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-kernlab" ,r-kernlab)
-       ("r-matrix" ,r-matrix)))
+     (list r-kernlab r-matrix))
     (home-page "https://cran.r-project.org/web/packages/CVST")
     (synopsis "Fast cross-validation via sequential testing")
     (description
@@ -4393,17 +4416,17 @@ available in a vignette.")
 (define-public r-progressr
   (package
     (name "r-progressr")
-    (version "0.9.0")
+    (version "0.10.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "progressr" version))
        (sha256
-        (base32 "03sk5cv8cywahlszjkd8pfqmhbj6cv0j54d3lassa7h44f20zryg"))))
+        (base32 "1p5s35rzh28n2id2lipgyqmh3wzib66m7x0pz9028y8cql8xr5ac"))))
     (properties `((upstream-name . "progressr")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-digest" ,r-digest)))
+     (list r-digest))
     (home-page "https://progressr.futureverse.org")
     (synopsis "Inclusive, unifying API for progress updates")
     (description
@@ -4428,13 +4451,9 @@ these progress updates.")
          "0bi3c1aqwlq7jbz4raz6vga4r264w7lldi0i62xjlbl7hnlgi23s"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-future-apply" ,r-future-apply)
-       ("r-numderiv" ,r-numderiv)
-       ("r-progressr" ,r-progressr)
-       ("r-squarem" ,r-squarem)
-       ("r-survival" ,r-survival)))
+     (list r-future-apply r-numderiv r-progressr r-squarem r-survival))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/kkholst/lava")
     (synopsis "Latent variable models")
     (description
@@ -4456,9 +4475,7 @@ variable models.")
     (properties `((upstream-name . "DRR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cvst" ,r-cvst)
-       ("r-kernlab" ,r-kernlab)
-       ("r-matrix" ,r-matrix)))
+     (list r-cvst r-kernlab r-matrix))
     (home-page "https://cran.r-project.org/web/packages/DRR")
     (synopsis "Dimensionality reduction via regression")
     (description
@@ -4479,10 +4496,7 @@ regression using Kernel Ridge Regression.")
          "03wvh3kirp1prac5nky6a5whs97rvaf4hc27x0fnh51sa17r42b8"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-kernsmooth" ,r-kernsmooth)
-       ("r-lava" ,r-lava)
-       ("r-rcpp" ,r-rcpp)
-       ("r-survival" ,r-survival)))
+     (list r-kernsmooth r-lava r-rcpp r-survival))
     (home-page "https://cran.r-project.org/web/packages/prodlim")
     (synopsis "Product-limit estimation for censored event history analysis")
     (description
@@ -4494,19 +4508,20 @@ the Kaplan-Meier and Aalen-Johansen methods.")
 (define-public r-dimred
   (package
     (name "r-dimred")
-    (version "0.2.3")
+    (version "0.2.4")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "dimRed" version))
        (sha256
         (base32
-         "110d6y83ib1nfpxzmvkvb3fn3brskwkdbsk4dqrdrswrd4znxrg6"))))
+         "1534axd5gcwma3nbglrn0l2an53n3yyya30fqkgb4d8l124ygb7j"))))
     (properties `((upstream-name . "dimRed")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-drr" ,r-drr)
-       ("r-magrittr" ,r-magrittr)))
+     (list r-drr r-magrittr))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/gdkrmr/dimRed")
     (synopsis "Framework for dimensionality reduction")
     (description
@@ -4549,7 +4564,7 @@ calendar objects.")
          "0snmdh6vk0p6ar1swsihisinxrx7l8371dri5lk0z24ysgr5w7gs"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-abind" ,r-abind)))
+     (list r-abind))
     (home-page "https://github.com/RobinHankin/magic.git")
     (synopsis "Create and investigate magic squares")
     (description
@@ -4562,21 +4577,20 @@ dimensioned arrays.")
 (define-public r-rmysql
   (package
     (name "r-rmysql")
-    (version "0.10.22")
+    (version "0.10.23")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "RMySQL" version))
        (sha256
         (base32
-         "05hiwqakhz11kra24yyxrss8b8n32wg7k39j7hwdnvhh1n96scnl"))))
+         "05aavyggyjv46awa7ggbxlfcy9707vak5kh7kj0ljdx8zga7xb7l"))))
     (properties `((upstream-name . "RMySQL")))
     (build-system r-build-system)
     (inputs
-     `(("mariadb-dev" ,mariadb "dev")
-       ("zlib" ,zlib)))
+     (list `(,mariadb "dev") zlib))
     (propagated-inputs
-     `(("r-dbi" ,r-dbi)))
+     (list r-dbi))
     (home-page "https://github.com/r-dbi/RMySQL")
     (synopsis "Database interface and MySQL driver for R")
     (description
@@ -4589,20 +4603,20 @@ the RMariaDB package.")
 (define-public r-rpostgresql
   (package
     (name "r-rpostgresql")
-    (version "0.7")
+    (version "0.7-3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "RPostgreSQL" version))
        (sha256
         (base32
-         "1bqfdbs09f65ssc6bx4z3kkmia8ja6qbnijxizw63p0fbcakq2q4"))))
+         "1fbixmnjp1kh6yiv8zhg8zi5ryvdf5j2jxv4agq5gcxf541s3g5x"))))
     (properties `((upstream-name . "RPostgreSQL")))
     (build-system r-build-system)
     (inputs
-     `(("postgresql" ,postgresql)))
+     (list postgresql))
     (propagated-inputs
-     `(("r-dbi" ,r-dbi)))
+     (list r-dbi))
     (home-page "https://github.com/tomoakin/RPostgreSQL")
     (synopsis "R interface to the PostgreSQL database system")
     (description
@@ -4624,7 +4638,7 @@ to access PostgreSQL database systems.")
         (base32
          "1ki14an0pmhs2mnmfjjvdzd76pshiyvi659zf7hqvqwj0viv4dw9"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-lpsolve" ,r-lpsolve)))
+    (propagated-inputs (list r-lpsolve))
     (home-page "http://linprog.r-forge.r-project.org/")
     (synopsis "Linear programming and optimization")
     (description
@@ -4645,11 +4659,7 @@ Optimization problems by using the simplex algorithm.")
          "1n10l8ax3783v3lgaacb15qsn8b3f0wpmhg3k39j31s6ciyd3vcg"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-magic" ,r-magic)
-       ("r-linprog" ,r-linprog)
-       ("r-lpsolve" ,r-lpsolve)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcppprogress" ,r-rcppprogress)))
+     (list r-magic r-linprog r-lpsolve r-rcpp r-rcppprogress))
     (home-page "http://geometry.r-forge.r-project.org/")
     (synopsis "Mesh generator and surface tessellator")
     (description
@@ -4680,15 +4690,15 @@ Delaunay triangulation and convex hull computation.")
          "1sdnb47r534nh138zk3a6b2mgi74nvshc7p5m304vjs9jlx4l2y3"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bh" ,r-bh)
-       ("r-class" ,r-class)
-       ("r-geometry" ,r-geometry)
-       ("r-mass" ,r-mass)
-       ("r-rcpp" ,r-rcpp)
-       ("r-robustbase" ,r-robustbase)
-       ("r-sfsmisc" ,r-sfsmisc)))
+     (list r-bh
+           r-class
+           r-geometry
+           r-mass
+           r-rcpp
+           r-robustbase
+           r-sfsmisc))
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/ddalpha")
     (synopsis "Depth-Based classification and calculation of data depth")
     (description
@@ -4735,7 +4745,7 @@ Core algorithms are executed in parallel on systems supporting OpenMP.")
     (properties `((upstream-name . "RcppRoll")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)))
+     (list r-rcpp))
     (home-page "https://cran.r-project.org/web/packages/RcppRoll")
     (synopsis "Efficient rolling and windowed operations")
     (description
@@ -4758,12 +4768,12 @@ provided.")
          "0hsq00382pfd9hzpcgphjxazbxm4zx0k2r6pk6kib56k0ibm7qfn"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-class" ,r-class)
-       ("r-mass" ,r-mass)
-       ("r-nnet" ,r-nnet)
-       ("r-prodlim" ,r-prodlim)
-       ("r-rpart" ,r-rpart)
-       ("r-survival" ,r-survival)))
+     (list r-class
+           r-mass
+           r-nnet
+           r-prodlim
+           r-rpart
+           r-survival))
     (home-page "https://cran.r-project.org/web/packages/ipred")
     (synopsis "Improved predictors")
     (description
@@ -4785,11 +4795,9 @@ problems as well as resampling based estimators of prediction error.")
          "032h33i2qlwsw2iq82nri5y8hs7d593w40aghcvnibpi2wxf0x8l"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lattice" ,r-lattice)
-       ("r-mnormt" ,r-mnormt)
-       ("r-nlme" ,r-nlme)))
+     (list r-lattice r-mnormt r-nlme))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/psych/")
     (synopsis "Procedures for psychological, psychometric, and personality research")
     (description
@@ -4810,14 +4818,14 @@ created using basic graphics.")
 (define-public r-generics
   (package
     (name "r-generics")
-    (version "0.1.0")
+    (version "0.1.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "generics" version))
        (sha256
         (base32
-         "0qw7r0d2qvlj1pvrlpv30d6akml624ydxkk19hv85iv6pfyx2wdb"))))
+         "04hrn6g5m5vi3znrcha3jw2q16lnmm3ygx2jl5aqiahg3azqwix2"))))
     (build-system r-build-system)
     (home-page "https://github.com/r-lib/generics")
     (synopsis "Common S3 generics not provided by base R methods")
@@ -4830,28 +4838,29 @@ by base R methods related to model fitting.")
 (define-public r-broom
   (package
     (name "r-broom")
-    (version "0.7.9")
+    (version "0.7.11")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "broom" version))
        (sha256
         (base32
-         "1z65qyhkhkyalxhrvpsa7n8pickj9fjs8r4gzdvjp2rpggwramhx"))))
+         "069fp8lscw59nmsm658w0164cpgfa36xx09s9j7jxisscg99jfcy"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-backports" ,r-backports)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ellipsis" ,r-ellipsis)
-       ("r-generics" ,r-generics)
-       ("r-glue" ,r-glue)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-stringr" ,r-stringr)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-backports
+           r-dplyr
+           r-ellipsis
+           r-generics
+           r-ggplot2
+           r-glue
+           r-purrr
+           r-rlang
+           r-stringr
+           r-tibble
+           r-tidyr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/tidyverse/broom")
     (synopsis "Convert statistical analysis objects into tidy data frames")
     (description
@@ -4868,35 +4877,36 @@ provides a one-row summary of model-level statistics.")
 (define-public r-recipes
   (package
     (name "r-recipes")
-    (version "0.1.16")
+    (version "0.1.17")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "recipes" version))
        (sha256
         (base32
-         "1mayfdbn6q775d4gbdjrrhdbmpsxga57kwh0h7bwv8rk0vmvik23"))))
-    (build-system r-build-system)
-    (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-ellipsis" ,r-ellipsis)
-       ("r-generics" ,r-generics)
-       ("r-glue" ,r-glue)
-       ("r-gower" ,r-gower)
-       ("r-ipred" ,r-ipred)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-lubridate" ,r-lubridate)
-       ("r-magrittr" ,r-magrittr)
-       ("r-matrix" ,r-matrix)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)
-       ("r-tidyselect" ,r-tidyselect)
-       ("r-timedate" ,r-timedate)
-       ("r-withr" ,r-withr)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+         "0gbdc5kvbn14s5zrf4vrdjvkfajs00p7vvb433ii0lqnl07bl87d"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-dplyr
+           r-ellipsis
+           r-generics
+           r-glue
+           r-gower
+           r-ipred
+           r-lifecycle
+           r-lubridate
+           r-magrittr
+           r-matrix
+           r-purrr
+           r-rlang
+           r-tibble
+           r-tidyr
+           r-tidyselect
+           r-timedate
+           r-vctrs
+           r-withr))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/topepo/recipes")
     (synopsis "Preprocessing tools to create design matrices")
     (description
@@ -4945,12 +4955,9 @@ for certain use cases.")
          "1z5xyr5f4aryy0v1gzz9m8m4s5fzzwbrf0fxll1nbflr8xnr3yr9"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rlang" ,r-rlang)
-       ("r-scales" ,r-scales)))
+     (list r-ggplot2 r-rcpp r-rlang r-scales))
     (native-inputs
-     `(("r-knitr" ,r-knitr))) ; for vignettes
+     (list r-knitr)) ; for vignettes
     (home-page "https://github.com/slowkow/ggrepel")
     (synopsis "Repulsive text and label geometries for ggplot2")
     (description
@@ -4962,17 +4969,17 @@ from the data points.")
 (define-public r-corrplot
   (package
     (name "r-corrplot")
-    (version "0.90")
+    (version "0.92")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "corrplot" version))
        (sha256
         (base32
-         "1pfmjqgakf7706l9257lqqnb6kin79gc94xfg7w47x2ijchiz1yr"))))
+         "1g98jk6xsl08z4n6sy5vriif99m31zhbz7j3dh1kfj4w7yb9zh78"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/taiyun/corrplot")
     (synopsis "Visualization of a correlation matrix")
     (description
@@ -5018,7 +5025,7 @@ or between integer vectors representing generic sequences.")
         (base32
          "01vggwg1w71k98qs6fhb0x1843vi322mf4g3hbclks94kcpkisx2"))))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/ucminf/")
     (synopsis "General-purpose unconstrained non-linear optimization")
     (description
@@ -5043,14 +5050,14 @@ with the package @code{optim}.")
    (properties `((upstream-name . "useful")))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-assertthat" ,r-assertthat)
-      ("r-dplyr" ,r-dplyr)
-      ("r-ggplot2" ,r-ggplot2)
-      ("r-magrittr" ,r-magrittr)
-      ("r-matrix" ,r-matrix)
-      ("r-plyr" ,r-plyr)
-      ("r-purrr" ,r-purrr)
-      ("r-scales" ,r-scales)))
+    (list r-assertthat
+          r-dplyr
+          r-ggplot2
+          r-magrittr
+          r-matrix
+          r-plyr
+          r-purrr
+          r-scales))
    (home-page "https://github.com/jaredlander/useful")
    (synopsis "Collection of handy, useful functions")
    (description "This package provides a set of little functions that have been
@@ -5073,10 +5080,7 @@ response matrices.")
          "09bpmjmbf4x82kgf6bm4bkncq2apdv9mk20zj4zgma2jx2vyfhbs"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mass" ,r-mass)
-       ("r-matrix" ,r-matrix)
-       ("r-numderiv" ,r-numderiv)
-       ("r-ucminf" ,r-ucminf)))
+     (list r-mass r-matrix r-numderiv r-ucminf))
     (home-page "https://github.com/runehaubo/ordinal")
     (synopsis "Regression models for ordinal data")
     (description
@@ -5100,10 +5104,7 @@ Laplace approximation and adaptive Gauss-Hermite quadrature.")
          "1sbcpacxnxbzwa8rr9x2bq7hh0s3sw6yznr90dkp43n6xk5xaqir"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lme4" ,r-lme4)
-       ("r-mass" ,r-mass)
-       ("r-ordinal" ,r-ordinal)
-       ("r-survival" ,r-survival)))
+     (list r-lme4 r-mass r-ordinal r-survival))
     (home-page "https://cran.r-project.org/web/packages/jomo/")
     (synopsis "Multilevel Joint Modelling Multiple Imputation")
     (description
@@ -5127,7 +5128,7 @@ impute compatibly with the substantive model.")
         (base32
          "1dk3jjj826p7xrz10qz04vyc068xnypg7bp0pj4c32z3da0xzh5d"))))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/pan/")
     (synopsis "Multiple imputation for multivariate panel or clustered data")
     (description
@@ -5138,21 +5139,19 @@ clustered data.")
 (define-public r-mitml
   (package
     (name "r-mitml")
-    (version "0.4-2")
+    (version "0.4-3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "mitml" version))
        (sha256
         (base32
-         "0zrmchsk012linw3m5rda6hj8xpxpwzbf4alq0nc1pzvl99aa558"))))
+         "00i18nnvrdrg91crgcp2a431xs71cawaip3xkqk2myv0iav3xga9"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-haven" ,r-haven)
-       ("r-jomo" ,r-jomo)
-       ("r-pan" ,r-pan)))
+     (list r-haven r-jomo r-pan))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/mitml/")
     (synopsis "Tools for multiple imputation in multilevel modeling")
     (description
@@ -5165,24 +5164,25 @@ analysis of multiply imputed data sets.")
 (define-public r-mice
   (package
     (name "r-mice")
-    (version "3.13.0")
+    (version "3.14.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "mice" version))
        (sha256
         (base32
-         "11cpyqlilakan2pwjzacb9jjlazazsqdngy237nnrj8j6mky822i"))))
+         "01fnfrr7adp29s5kic95r9q0rdznkz2pjmziyimnrqzyicyvfyzq"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-broom" ,r-broom)
-       ("r-cpp11" ,r-cpp11)
-       ("r-dplyr" ,r-dplyr)
-       ("r-generics" ,r-generics)
-       ("r-lattice" ,r-lattice)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rlang" ,r-rlang)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-broom
+           r-cpp11
+           r-dplyr
+           r-generics
+           r-lattice
+           r-rcpp
+           r-rlang
+           r-tidyr
+           r-withr))
     (home-page "https://cran.r-project.org/web/packages/mice/")
     (synopsis "Multivariate imputation by chained equations")
     (description
@@ -5234,7 +5234,7 @@ functions, as well as a random generation function.")
     (properties `((upstream-name . "Rsolnp")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-truncnorm" ,r-truncnorm)))
+     (list r-truncnorm))
     (home-page "https://cran.r-project.org/web/packages/Rsolnp/")
     (synopsis "General non-linear optimization")
     (description "The Rsolnp package implements a general non-linear augmented
@@ -5246,20 +5246,18 @@ programming} (SQP) based solver).")
 (define-public r-hardyweinberg
   (package
     (name "r-hardyweinberg")
-    (version "1.7.2")
+    (version "1.7.4")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "HardyWeinberg" version))
        (sha256
         (base32
-         "0g10jh71yp0pcag44z409xqb6d941l7y887a632962bk5rgn6q5p"))))
+         "11y3zg8aqxk5xdzsv7i3bgqkky6a0wgf2n8saa3a4adq75k328ib"))))
     (properties `((upstream-name . "HardyWeinberg")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mice" ,r-mice)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rsolnp" ,r-rsolnp)))
+     (list r-mice r-nnet r-rcpp r-rsolnp))
     (home-page "https://cran.r-project.org/package=HardyWeinberg")
     (synopsis "Statistical tests and graphics for Hardy-Weinberg equilibrium")
     (description
@@ -5287,7 +5285,7 @@ acceptance regions, log-ratio plots and Q-Q plots.")
         (base32
          "03z8igsjqr32x407asxvkrbayvm6yhv9xyfs0n8fkmv8zk5a41r6"))))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "http://www.stats.gla.ac.uk/~adrian/sm/")
     (synopsis "Smoothing methods for nonparametric regression and density estimation")
     (description
@@ -5300,17 +5298,17 @@ and density estimation")
 (define-public r-venndiagram
   (package
     (name "r-venndiagram")
-    (version "1.6.20")
+    (version "1.7.1")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "VennDiagram" version))
               (sha256
                (base32
-                "1ic1jaxzw98si2p4n1fl4n3myhd7fpw0njb634cwhviwybzv6775"))))
+                "0yw54j9as0vf8ypnq4a3sl2w0lajri6s979f4y11hjzpgmr1m16b"))))
     (properties `((upstream-name . "VennDiagram")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-futile-logger" ,r-futile-logger)))
+     (list r-futile-logger))
     (home-page "https://cran.r-project.org/web/packages/VennDiagram/")
     (synopsis "Generate High-Resolution Venn and Euler Plots")
     (description
@@ -5333,10 +5331,9 @@ structure.")
          "1dmdasp3jldc41233z6r08w3j76vyyp9m3jrj7n4ahk48yd5siq6"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-sm" ,r-sm)
-       ("r-zoo" ,r-zoo)))
+     (list r-sm r-zoo))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "http://wsopuppenkiste.wiso.uni-goettingen.de/~dadler")
     (synopsis "Violin plot")
     (description
@@ -5361,7 +5358,7 @@ plot and a kernel density plot.")
     (properties `((upstream-name . "RSofia")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)))
+     (list r-rcpp))
     (home-page "https://cran.r-project.org/src/contrib/Archive/RSofia")
     (synopsis "Port of sofia-ml to R")
     (description "This package is a port of sofia-ml to R.  Sofia-ml is a
@@ -5381,7 +5378,7 @@ training models for classification or ranking.")
         (base32
          "0b6a7mpyk9aw6axas7nz01gadczprwwfhii01fz31z26z555i06n"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-zoo" ,r-zoo)))
+    (propagated-inputs (list r-zoo))
     (home-page "https://github.com/joshuaulrich/xts")
     (synopsis "Extensible time series")
     (description
@@ -5406,9 +5403,7 @@ simplifying cross-class interoperability.")
      `((upstream-name . "PerformanceAnalytics")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-quadprog" ,r-quadprog)
-       ("r-xts" ,r-xts)
-       ("r-zoo" ,r-zoo)))
+     (list r-quadprog r-xts r-zoo))
     (home-page "https://r-forge.r-project.org/projects/returnanalytics/")
     (synopsis "Econometric tools for performance and risk analysis")
     (description "This is a collection of econometric functions for
@@ -5424,18 +5419,17 @@ where possible.")
 (define-public r-laeken
   (package
     (name "r-laeken")
-    (version "0.5.1")
+    (version "0.5.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "laeken" version))
        (sha256
         (base32
-         "199rjkhjjygpr6cjzab87as46acb5npi44m4yycvk7lnd0blma8s"))))
+         "1p3ccbaydlr52p8qmgmm2l6kryvq6jjjx7mqn2vv0gpjaxqhyy92"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-boot" ,r-boot)
-       ("r-mass" ,r-mass)))
+     (list r-boot r-mass))
     (home-page "https://cran.r-project.org/web/packages/laeken/")
     (synopsis "Estimation of indicators on social exclusion and poverty")
     (description "This package provides tools for the estimation of indicators
@@ -5446,19 +5440,17 @@ modeling for empirical income distributions.")
 (define-public r-vcd
   (package
     (name "r-vcd")
-    (version "1.4-8")
+    (version "1.4-9")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "vcd" version))
        (sha256
         (base32
-         "030yyhpzsj4ivwrla7p9kgvmyjh6b8fr7czf678ykxjj64ccnvr3"))))
+         "13sn77qdcyll9lz7nab0bxzfvpgj8f5rl2cq5ylpz8pibynj1d55"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-colorspace" ,r-colorspace)
-       ("r-lmtest" ,r-lmtest)
-       ("r-mass" ,r-mass)))
+     (list r-colorspace r-lmtest r-mass))
     (home-page "https://cran.r-project.org/web/packages/vcd/")
     (synopsis "Visualizing categorical data")
     (description "This package provides visualization techniques, data sets,
@@ -5481,20 +5473,20 @@ Analysis with R\" by Michael Friendly and David Meyer (2015).")
               "0lhxb3ac4fafwik9q3cds46svzf0hyca8k54chw3dpk50c0zz1yx"))))
    (build-system r-build-system)
    (native-inputs
-    `(("r-knitr" ,r-knitr)))
+    (list r-knitr))
    (inputs
-    `(("zlib" ,zlib)))
+    (list zlib))
    (propagated-inputs
-    `(("r-ape" ,r-ape)
-      ("r-dplyr" ,r-dplyr)
-      ("r-magrittr" ,r-magrittr)
-      ("r-memuse" ,r-memuse)
-      ("r-pinfsc50" ,r-pinfsc50)
-      ("r-rcpp" ,r-rcpp)
-      ("r-stringr" ,r-stringr)
-      ("r-tibble" ,r-tibble)
-      ("r-vegan" ,r-vegan)
-      ("r-viridislite" ,r-viridislite)))
+    (list r-ape
+          r-dplyr
+          r-magrittr
+          r-memuse
+          r-pinfsc50
+          r-rcpp
+          r-stringr
+          r-tibble
+          r-vegan
+          r-viridislite))
    (home-page "https://github.com/knausb/vcfR")
    (synopsis "Manipulate and visualize VCF data")
    (description "This package facilitates easy manipulation of variant call
@@ -5539,7 +5531,7 @@ of Eigenmatrices} (JADE).")
         (base32
          "004gm4mzgdzdj807j3bwqsv5lizmnmz5jq514bdjshhkysnzjz6z"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-proxy" ,r-proxy)))
+    (propagated-inputs (list r-proxy))
     (home-page "http://dtw.r-forge.r-project.org/")
     (synopsis "Dynamic Time Warping Algorithms")
     (description "This package provides a comprehensive implementation of
@@ -5563,7 +5555,7 @@ normalizations, minimum variance matching, and so on.")
          "1xvcd97ikqsfdpk2fddy3k0z1ajqga7nv9bgac9c1wnjk1gqrpgh"))))
     (properties `((upstream-name . "SDMTools")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-r-utils" ,r-r-utils)))
+    (propagated-inputs (list r-r-utils))
     (home-page "https://www.rforge.net/SDMTools/")
     (synopsis "Species distribution modelling tools")
     (description "This package provides a set of tools for post processing
@@ -5605,12 +5597,9 @@ plotting.  a three dimensional point cloud.")
          "0bmlqy1p6rac90af97ffpdi6php7dblx66l2hcm8ljidgyqzmspm"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-plyr" ,r-plyr)
-       ("r-scales" ,r-scales)
-       ("r-withr" ,r-withr)))
+     (list r-ggplot2 r-plyr r-scales r-withr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/clauswilke/ggridges")
     (synopsis "Ridgeline plots in ggplot2")
     (description
@@ -5632,8 +5621,7 @@ plots in @code{ggplot2}.")
          "012md2m0jqfcccb933j423m3ck31v3p0pd41gjxpyg9082y7ixyj"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-ggridges" ,r-ggridges)))
+     (list r-ggplot2 r-ggridges))
     (home-page "https://github.com/clauswilke/ggjoy")
     (synopsis "Joyplots in ggplot2")
     (description "Joyplots provide a convenient way of visualizing changes in
@@ -5644,17 +5632,17 @@ plots in @code{ggplot2}.")
 (define-public r-cli
   (package
     (name "r-cli")
-    (version "3.0.1")
+    (version "3.1.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "cli" version))
        (sha256
         (base32
-         "1zdld2cr83k4v7yrwa2csvcafwslwr610vk70mv1a3knrnv2b6nq"))))
+         "1kslrx22djrs3wnf5xyligwy7h4hzsn5awl946x961fn980ydcy8"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-glue" ,r-glue)))
+     (list 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
@@ -5695,7 +5683,7 @@ script.")
         (base32
          "1c9sg55zvf10h8198jdnpamm6f66lzw3c3jnmdp9ls6na0j0xbjd"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-crayon" ,r-crayon)))
+    (propagated-inputs (list r-crayon))
     (home-page "https://github.com/r-lib/debugme#readme")
     (synopsis "Debug R packages")
     (description
@@ -5715,8 +5703,7 @@ constants, and control debugging of packages via environment variables.")
         (base32 "0azw8sx6nv6pp8m8jrwq01b9na2swrnznn7dwrhn07268w82svzd"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ps" ,r-ps)
-       ("r-r6" ,r-r6)))
+     (list r-ps r-r6))
     (home-page "https://github.com/r-lib/processx3")
     (synopsis "Execute and control system processes")
     (description
@@ -5732,17 +5719,17 @@ timeout.  It can also poll several processes at once.")
 (define-public r-tsp
   (package
     (name "r-tsp")
-    (version "1.1-10")
+    (version "1.1-11")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "TSP" version))
        (sha256
         (base32
-         "0z1v6m0vqjzxc4az3zyjaayygx0jr3mdmc56jjd421iqh0b9z5s4"))))
+         "0gdwxbj2gria7jhsswmfvc32r43sdd63z3lyy21gbvmfcakvb8j9"))))
     (properties `((upstream-name . "TSP")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-foreach" ,r-foreach)))
+    (propagated-inputs (list r-foreach))
     (home-page "https://cran.r-project.org/web/packages/TSP/")
     (synopsis "Traveling salesperson problem (TSP)")
     (description "This package provides basic infrastructure and some
@@ -5762,7 +5749,7 @@ traveling salesman problem).")
         (base32
          "0d2d1ni1camixyi45lfy00f4pn3p063k7bsi8gj5scp6n15mdgb0"))))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/qap/")
     (synopsis "Heuristics for the quadratic assignment problem (QAP)")
     (description "This package implements heuristics for the @dfn{quadratic
@@ -5782,7 +5769,7 @@ available.")
         (base32
          "1cz0g0i972955hhaji30rx8448x7f3as7z1sww9i5h86ybgirilw"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-cluster" ,r-cluster)))
+    (propagated-inputs (list r-cluster))
     (home-page "https://cran.r-project.org/web/packages/gclus/")
     (synopsis "Clustering graphics")
     (description "This package orders panels in scatterplot matrices and
@@ -5804,9 +5791,7 @@ of merit, ordering functions, and enhanced versions of @code{pairs} and
          "0gq4h8cw51z95yvsnf38kj5l58wgljkm0dalmi8mn1sp06bxr0zi"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-callr" ,r-callr)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-magrittr" ,r-magrittr)))
+     (list r-callr r-jsonlite r-magrittr))
     (home-page "https://github.com/wch/webshot/")
     (synopsis "Take screenshots of web pages")
     (description
@@ -5819,24 +5804,24 @@ Markdown documents.")
 (define-public r-seriation
   (package
     (name "r-seriation")
-    (version "1.3.0")
+    (version "1.3.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "seriation" version))
        (sha256
         (base32
-         "1vl0zfdvxdccvda8lwkjhg5rivj2q5gjm4qvkqwny6asm06x80ny"))))
+         "08c37n3xxc4n4vbkw38k3l3hdlmck8drqpl6z274vkgi2sqv8qyf"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cluster" ,r-cluster)
-       ("r-colorspace" ,r-colorspace)
-       ("r-gclus" ,r-gclus)
-       ("r-mass" ,r-mass)
-       ("r-qap" ,r-qap)
-       ("r-registry" ,r-registry)
-       ("r-tsp" ,r-tsp)))
-    (native-inputs `(("gfortran" ,gfortran)))
+     (list r-cluster
+           r-colorspace
+           r-gclus
+           r-mass
+           r-qap
+           r-registry
+           r-tsp))
+    (native-inputs (list gfortran))
     (home-page "https://s2.smu.edu/IDA/seriation/")
     (synopsis "Infrastructure for ordering objects using seriation")
     (description
@@ -5851,13 +5836,13 @@ iVAT).")
 (define-public r-xfun
   (package
     (name "r-xfun")
-    (version "0.26")
+    (version "0.29")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "xfun" version))
        (sha256
-        (base32 "1997s00dzkyj15xk9w1r2h6i49srpgqzvhhyvd5pk1kwkd4809ly"))))
+        (base32 "1x2f49n3ak85nab937wq6q5sqi1mdlfzwbv8603kxl2k8rxvp1dz"))))
     (build-system r-build-system)
     ;; knitr itself depends on xfun
     #;
@@ -5883,8 +5868,7 @@ packages maintained by Yihui Xie.")
          "1x6qg19z4qih9lk3mvnmx0vailm1khp5lylw4hlwz6rssj3yw6m7"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)
-       ("r-rmarkdown" ,r-rmarkdown))) ; for vignettes
+     (list r-knitr r-rmarkdown)) ; for vignettes
     (home-page "https://github.com/patperry/r-utf8")
     (synopsis "Unicode text processing")
     (description
@@ -5927,11 +5911,9 @@ to variables on the left-hand side of the assignment.")
          "1c8v5lmap6iq4jpi7p3w05hsv2dq7rjg057pvnfyc5d1xmsqnkkz"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ellipsis" ,r-ellipsis)
-       ("r-glue" ,r-glue)
-       ("r-rlang" ,r-rlang)))
+     (list r-ellipsis r-glue r-rlang))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/r-lib/vctrs")
     (synopsis "Vector helpers")
     (description
@@ -5955,26 +5937,26 @@ to variables on the left-hand side of the assignment.")
 (define-public r-pillar
   (package
     (name "r-pillar")
-    (version "1.6.3")
+    (version "1.6.4")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "pillar" version))
        (sha256
         (base32
-         "1ica4zjr3kmcpqh2668nmsv5dbvm4yri5952vcxja4djsgfnry3j"))))
+         "17m13rzgwdddwa0n3gpmax6wmfaphbg71l13ffhw5vnxf6i94fh3"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cli" ,r-cli)
-       ("r-crayon" ,r-crayon)
-       ("r-ellipsis" ,r-ellipsis)
-       ("r-fansi" ,r-fansi)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-rlang" ,r-rlang)
-       ("r-utf8" ,r-utf8)
-       ("r-vctrs" ,r-vctrs)))
+     (list r-cli
+           r-crayon
+           r-ellipsis
+           r-fansi
+           r-lifecycle
+           r-rlang
+           r-utf8
+           r-vctrs))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/r-lib/pillar")
     (synopsis "Coloured formatting for columns")
     (description
@@ -6005,14 +5987,14 @@ packages that work with genomic data.")
 (define-public r-uuid
   (package
     (name "r-uuid")
-    (version "0.1-4")
+    (version "1.0-3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "uuid" version))
        (sha256
         (base32
-         "0gm9ii7ncvllxbvyk6srsiinjmqyj7lmh84w43x4nhqpvafj9q4q"))))
+         "0il35jnci537r8zkinyiy5jp5q530p85ln6dswpj884zclrlcvj5"))))
     (build-system r-build-system)
     (home-page "https://www.rforge.net/uuid")
     (synopsis "Tools for generating and handling of UUIDs")
@@ -6024,17 +6006,17 @@ packages that work with genomic data.")
 (define-public r-tinytex
   (package
     (name "r-tinytex")
-    (version "0.33")
+    (version "0.36")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "tinytex" version))
        (sha256
         (base32
-         "10lqn704dqv5k5v6y964l8c77rwy4ilrc1hcb99j4vxpx3p4nd43"))))
+         "0y1vfq89yi302cwdcnassm02dk14j9ivk5vf83fp6rb8h6ww3rk5"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-xfun" ,r-xfun)))
+     (list r-xfun))
     (home-page "https://github.com/yihui/tinytex")
     (synopsis "Helper functions for TeX Live and compiling LaTeX documents")
     (description
@@ -6093,9 +6075,7 @@ features:
          "19q563v5xfkbmr0ws9nhqx4wrxkf9jsck51rqc8mm2gq2h03lg7w"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-magrittr" ,r-magrittr)
-       ("r-statnet-common" ,r-statnet-common)
-       ("r-tibble" ,r-tibble)))
+     (list r-magrittr r-statnet-common r-tibble))
     (home-page "https://statnet.org/")
     (synopsis "Classes for relational data")
     (description
@@ -6117,7 +6097,7 @@ supports arbitrary vertex/edge/graph attributes.")
          "1nf1yg14cgxrs4np1yghpzw1nczaslfv3rvf3918wrlzg0vp6l7q"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/hofnerb/stabs")
     (synopsis "Stability selection with error control")
     (description
@@ -6166,7 +6146,7 @@ vectors.")
       `((upstream-name . "statnet.common")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-coda" ,r-coda)))
+     (list r-coda))
     (home-page "https://statnet.org")
     (synopsis "R scripts and utilities used by the Statnet software")
     (description "This package provides non-statistical utilities used by the
@@ -6186,9 +6166,7 @@ software developed by the Statnet Project.")
          "0ivybdcrymlsfv6pg6p5bv70qdvgxf2vgp0kf4r0pf2fcvav1mcp"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-plyr" ,r-plyr)
-       ("r-rmarkdown" ,r-rmarkdown)))
+     (list r-ggplot2 r-plyr r-rmarkdown))
     (home-page "https://cran.r-project.org/web/packages/statcheck/")
     (synopsis "Extract statistics from articles and recompute p-values")
     (description "This package can automatically extract statistical
@@ -6210,8 +6188,7 @@ detect possible inconsistencies.")
          "0ai0v4538d30m4wks5s3lch1yfmx1ml0nnrz7ihs097lv586a09s"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-network" ,r-network)
-       ("r-statnet-common" ,r-statnet-common)))
+     (list r-network r-statnet-common))
     (home-page "https://statnet.org")
     (synopsis "Tools for social network analysis")
     (description
@@ -6235,9 +6212,7 @@ generation, and 2D/3D network visualization.")
     (properties `((upstream-name . "TFisher")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-matrix" ,r-matrix)
-       ("r-mvtnorm" ,r-mvtnorm)
-       ("r-sn" ,r-sn)))
+     (list r-matrix r-mvtnorm r-sn))
     (home-page "https://cran.r-project.org/web/packages/TFisher/")
     (synopsis "Optimal thresholding Fisher's p-value combination method")
     (description
@@ -6253,20 +6228,18 @@ of these tests are also included.")
 (define-public r-ttr
   (package
     (name "r-ttr")
-    (version "0.24.2")
+    (version "0.24.3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "TTR" version))
        (sha256
         (base32
-         "06vicgbhwpsww09hhha5mbcd0cwip6cvkfbhjjhp950rv64bk1r5"))))
+         "11xsmbvmxq2j119j2z58bx1fkkb2xlhmzc35z5fbwr3nchrfz6jd"))))
     (properties `((upstream-name . "TTR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-curl" ,r-curl)
-       ("r-xts" ,r-xts)
-       ("r-zoo" ,r-zoo)))
+     (list r-curl r-xts r-zoo))
     (home-page "https://github.com/joshuaulrich/TTR")
     (synopsis "Technical trading rules")
     (description
@@ -6274,6 +6247,205 @@ of these tests are also included.")
 rules with R.")
     (license license:gpl2)))
 
+(define-public r-leaflet-providers
+  (package
+    (name "r-leaflet-providers")
+    (version "1.9.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "leaflet.providers" version))
+       (sha256
+        (base32 "0yynrwv4xd5cdh49cwvfxm4ranarah9iiry2cd3b4fiihdfcg3wy"))))
+    (properties `((upstream-name . "leaflet.providers")))
+    (build-system r-build-system)
+    (home-page "https://github.com/rstudio/leaflet.providers")
+    (synopsis "Leaflet map tile providers")
+    (description
+     "This package contains third-party map tile provider information from
+Leaflet.js, to be used with the @code{leaflet} R package.  Additionally,
+@code{leaflet.providers} enables users to retrieve up-to-date provider
+information between package updates.")
+    (license license:bsd-2)))
+
+;; This package contains a lot of minified JavaScript with unclear provenance.
+;; When upgrading please make sure that all minified JavaScript files are
+;; removed in a snippet and that the replacement sources correspond to the
+;; original minified scripts.
+(define-public r-leaflet
+  (package
+    (name "r-leaflet")
+    (version "2.0.4.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "leaflet" version))
+       (sha256
+        (base32 "07whi3zkz1lmbqx5ydpiya802ck22ny0s7gskwnx7r8xbwlkiw5h"))
+       (snippet
+        '(for-each
+          delete-file
+          (list "inst/htmlwidgets/lib/leaflet/leaflet.js"
+                "inst/htmlwidgets/lib/leaflet-measure/leaflet-measure.min.js"
+                "inst/htmlwidgets/lib/leaflet-omnivore/leaflet-omnivore.min.js"
+                "inst/htmlwidgets/lib/jquery/jquery.min.js"
+                "inst/htmlwidgets/plugins/Leaflet-MiniMap/Control.MiniMap.min.js"
+                "inst/htmlwidgets/plugins/Leaflet.awesome-markers/bootstrap.min.js"
+                "inst/htmlwidgets/plugins/Leaflet.awesome-markers/leaflet.awesome-markers.min.js"
+                "inst/htmlwidgets/plugins/Leaflet.markercluster/leaflet.markercluster.js"
+                "inst/htmlwidgets/plugins/Leaflet.markercluster/leaflet.markercluster.freezable.js"
+                "inst/htmlwidgets/plugins/Leaflet.markercluster/leaflet.markercluster.layersupport.js"
+                "inst/legacy/www/leaflet.js")))))
+    (properties `((upstream-name . "leaflet")))
+    (build-system r-build-system)
+    (arguments
+     `(#:modules ((guix build utils)
+                  (guix build r-build-system)
+                  (srfi srfi-1))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'process-javascript
+           (lambda* (#:key inputs #:allow-other-keys)
+             ;; The inst directory contains some minified JavaScript files.
+             ;; Regenerate them from sources.
+             (invoke "unzip" "-d" "/tmp" (assoc-ref inputs "js-leaflet"))
+             (with-directory-excursion "inst/"
+               (call-with-values
+                   (lambda ()
+                     (unzip2
+                      `(("/tmp/leaflet-src.js"
+                         "htmlwidgets/lib/leaflet/leaflet.js")
+                        (,(assoc-ref inputs "js-leaflet-measure")
+                         "htmlwidgets/lib/leaflet-measure/leaflet-measure.min.js")
+                        (,(assoc-ref inputs "js-leaflet-omnivore")
+                         "htmlwidgets/lib/leaflet-omnivore/leaflet-omnivore.min.js")
+                        (,(assoc-ref inputs "js-jquery")
+                         "htmlwidgets/lib/jquery/jquery.min.js")
+                        ("htmlwidgets/plugins/Leaflet-MiniMap/Control.MiniMap.js"
+                         "htmlwidgets/plugins/Leaflet-MiniMap/Control.MiniMap.min.js")
+                        (,(assoc-ref inputs "js-bootstrap3")
+                         "htmlwidgets/plugins/Leaflet.awesome-markers/bootstrap.min.js")
+                        ("htmlwidgets/plugins/Leaflet.awesome-markers/leaflet.awesome-markers.js"
+                         "htmlwidgets/plugins/Leaflet.awesome-markers/leaflet.awesome-markers.min.js")
+                        (,(string-append (assoc-ref inputs "js-leaflet-markercluster")
+                                         "/dist/leaflet.markercluster-src.js")
+                         "htmlwidgets/plugins/Leaflet.markercluster/leaflet.markercluster.js")
+                        (,(assoc-ref inputs "js-leaflet-markercluster-freezable")
+                         "htmlwidgets/plugins/Leaflet.markercluster/leaflet.markercluster.freezable.js")
+                        (,(assoc-ref inputs "js-leaflet-markercluster-layersupport")
+                         "htmlwidgets/plugins/Leaflet.markercluster/leaflet.markercluster.layersupport.js")
+                        (,(assoc-ref inputs "js-proj4leaflet")
+                         "htmlwidgets/plugins/Proj4Leaflet/proj4.min.js")
+                        ("legacy/www/leaflet-src.js"
+                         "legacy/www/leaflet.js"))))
+                 (lambda (sources targets)
+                   (for-each (lambda (source target)
+                               (format #true "Processing ~a --> ~a~%"
+                                       source target)
+                               (invoke "esbuild" source "--minify"
+                                       (string-append "--outfile=" target)))
+                             sources targets)))))))))
+    (native-inputs
+     `(("esbuild" ,esbuild)
+       ("unzip" ,unzip)
+       ("js-bootstrap3"
+        ,(origin
+           (method url-fetch)
+           (uri "https://raw.githubusercontent.com/twbs/bootstrap/v3.3.7/dist/js/bootstrap.js")
+           (sha256
+            (base32
+             "1j1qjagwj0m3q322z9wxxnpkd8zbk6g3kl047dsbmqad6gmqvgha"))))
+       ("js-jquery"
+        ,(origin
+           (method url-fetch)
+           (uri "https://code.jquery.com/jquery-1.12.4.js")
+           (sha256
+            (base32
+             "0x9mrc1668icvhpwzvgafm8xm11x9lfai9nwr66aw6pjnpwkc3s3"))))
+       ("js-leaflet"
+        ,(origin
+           (method url-fetch)
+           (uri "http://cdn.leafletjs.com/leaflet/v1.3.1/leaflet.zip")
+           (sha256
+            (base32
+             "10phzd2vczy3zm1b64whp2nna69cf9hlj2bndc9yq47vf3ddqx8f"))))
+       ("js-leaflet-omnivore"
+        ,(origin
+           (method url-fetch)
+           (uri (string-append "https://api.tiles.mapbox.com/mapbox.js/plugins/"
+                               "leaflet-omnivore/v0.3.1/leaflet-omnivore.js"))
+           (sha256
+            (base32
+             "1b8zxrp6xwzpw25apn8j4qws0f6sr7qr7h2va5h1mjyfqvn29anq"))))
+       ("js-leaflet-markercluster"
+        ,(origin
+           (method git-fetch)
+           (uri (git-reference
+                 (url "https://github.com/Leaflet/Leaflet.markercluster.git")
+                 (commit "v1.1.0")))
+           (file-name (git-file-name "js-leaflet-markercluster" "1.1.0"))
+           (sha256
+            (base32
+             "0ds8c7picqjmc86bm5n6hm8k71fwsa2cpgib19sbdamzr9hm0rs1"))))
+       ("js-leaflet-markercluster-freezable"
+        ,(origin
+           (method url-fetch)
+           (uri (string-append
+                 "https://raw.githubusercontent.com/ghybs/Leaflet.MarkerCluster.Freezable/"
+                 "9db80a3fba7dff4aee940e05d3d4dceaa1fffcf9/src/freezable.js"))
+           (file-name "leaflet-markercluster-freezable.js")
+           (sha256
+            (base32
+             "1k6sn5n0z2x3an91vwvkzmqq4b8ppswgk5hi5qrr79klas1hbx1k"))))
+       ("js-leaflet-markercluster-layersupport"
+        ,(origin
+           (method url-fetch)
+           (uri (string-append
+                 "https://raw.githubusercontent.com/ghybs/Leaflet.MarkerCluster.LayerSupport/"
+                 "87f3848b92e0516d9c98f6d4cd175f7b8a4e3805/src/layersupport.js"))
+           (file-name "leaflet-markercluster-layersupport.js")
+           (sha256
+            (base32
+             "15qa21xif94y762c65yxxysxykz3mma6y6agw3nxpr3s7wbb75ff"))))
+       ("js-leaflet-measure"
+        ,(origin
+           (method url-fetch)
+           (uri "https://unpkg.com/leaflet-measure@1.5.2/dist/leaflet-measure.js")
+           (file-name "js-leaflet-measure-1.5.2.js")
+           (sha256
+            (base32
+             "0ggg3ffmm7pj9ry4gssrh0a17pnad3p6gwi0dg98y819pmpqa7y0"))))
+       ("js-proj4leaflet"
+        ,(origin
+           (method url-fetch)
+           (uri "https://raw.githubusercontent.com/kartena/Proj4Leaflet/1.0.2/lib/proj4.js")
+           (file-name "js-proj4leaflet-1.0.2.js")
+           (sha256
+            (base32
+             "0vyrbf6gv2lyh4c2bzp5349ivwvvg28gpn87y52a7jdb13rlkpab"))))))
+    (propagated-inputs
+     (list r-base64enc
+           r-crosstalk
+           r-htmltools
+           r-htmlwidgets
+           r-leaflet-providers
+           r-magrittr
+           r-markdown
+           r-png
+           r-raster
+           r-rcolorbrewer
+           r-scales
+           r-sp
+           r-viridis))
+    (home-page "https://rstudio.github.io/leaflet/")
+    (synopsis "Create interactive web maps with the JavaScript Leaflet library")
+    (description
+     "Create and customize interactive maps using the Leaflet JavaScript
+library and the @code{htmlwidgets} package.  These maps can be used directly
+from the R console, from RStudio, in Shiny applications and R Markdown
+documents.")
+    (license license:gpl3)))
+
 (define-public r-leaps
   (package
     (name "r-leaps")
@@ -6286,7 +6458,7 @@ rules with R.")
         (base32
          "1dn3yl1p03n0iynd1vsdkrr0fhmvgrmfkv37y7n371765h83lz1x"))))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/leaps/")
     (synopsis "Regression subset selection")
     (description
@@ -6318,18 +6490,17 @@ provides some missing S-PLUS functionality in R.")
 (define-public r-ifultools
   (package
     (name "r-ifultools")
-    (version "2.0-22")
+    (version "2.0-23")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "ifultools" version))
        (sha256
         (base32
-         "0f95vqc47dgssqngznk0rclr72ndbyxc7gdq2cmbksvq7qpn3gg1"))))
+         "16a7rbvlym3bnfm93ikr5kl0l86ppk0s41fva6idvcx765g3fqkk"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mass" ,r-mass)
-       ("r-splus2r" ,r-splus2r)))
+     (list r-mass r-splus2r))
     (home-page "https://cran.r-project.org/web/packages/ifultools/")
     (synopsis "Insightful research tools")
     (description "This package provides C code used by the wmtsa, fractal, and
@@ -6349,8 +6520,7 @@ sapa R packages.")
          "0kj681rd4c2lvqr926lb6f4qwp281x5274dg6vbk8pf5y7s0qlpc"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ifultools" ,r-ifultools)
-       ("r-splus2r" ,r-splus2r)))
+     (list r-ifultools r-splus2r))
     (home-page "https://cran.r-project.org/web/packages/sapa/")
     (synopsis "Spectral analysis for physical applications")
     (description "This package provides software for the book Spectral
@@ -6391,10 +6561,7 @@ Fisher's method), and Sidak correction.")
          "0dbcrncv06iqcbkky95dd7l32xq0hhbnkb0kj8wwzym1jf748h5a"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-curl" ,r-curl)
-       ("r-ttr" ,r-ttr)
-       ("r-xts" ,r-xts)
-       ("r-zoo" ,r-zoo)))
+     (list r-curl r-ttr r-xts r-zoo))
     (home-page "https://cran.r-project.org/web/packages/quantmod/")
     (synopsis "Quantitative financial modelling framework")
     (description "This package provides a quantitative financial modelling
@@ -6405,21 +6572,19 @@ financial trading strategies.")
 (define-public r-tseries
   (package
     (name "r-tseries")
-    (version "0.10-48")
+    (version "0.10-49")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "tseries" version))
        (sha256
         (base32
-         "0wa4rcf0igayi1yrwc6wak6d491560p0z89rz32haqlkiiq25gak"))))
+         "1fhldj95d16cwygw8xg0kvr4xk569mpzprdvahlsf4hzykc2dgs5"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-quadprog" ,r-quadprog)
-       ("r-quantmod" ,r-quantmod)
-       ("r-zoo" ,r-zoo)))
+     (list r-quadprog r-quantmod r-zoo))
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/tseries/")
     (synopsis "Time series analysis and computational finance")
     (description
@@ -6440,9 +6605,7 @@ computational finance.")
          "1q436krz5p1f4a7a7sya6a9rh9x9mi8zzcgq66gbk9w9w4hcqcj6"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ifultools" ,r-ifultools)
-       ("r-mass" ,r-mass)
-       ("r-splus2r" ,r-splus2r)))
+     (list r-ifultools r-mass r-splus2r))
     (home-page "https://cran.r-project.org/web/packages/wmtsa/")
     (synopsis "Wavelet methods for time series analysis")
     (description
@@ -6465,10 +6628,7 @@ University Press, 2000.")
     (properties `((upstream-name . "TSA")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-leaps" ,r-leaps)
-       ("r-locfit" ,r-locfit)
-       ("r-mgcv" ,r-mgcv)
-       ("r-tseries" ,r-tseries)))
+     (list r-leaps r-locfit r-mgcv r-tseries))
     (home-page "https://homepage.divms.uiowa.edu/~kchan/TSA.htm")
     (synopsis "Time series analysis")
     (description
@@ -6491,7 +6651,7 @@ Cryer and Kung-Sik Chan.")
     (properties `((upstream-name . "extraDistr")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)))
+     (list r-rcpp))
     (home-page "https://github.com/twolodzko/extraDistr")
     (synopsis "Additional univariate and multivariate distributions")
     (description
@@ -6513,12 +6673,12 @@ multivariate distributions.")
          "18lr9z0gslvfc3z8vyj3krqj3bfhg60zv1fzinrwwkc4cpk1w7mp"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ifultools" ,r-ifultools)
-       ("r-mass" ,r-mass)
-       ("r-sapa" ,r-sapa)
-       ("r-scatterplot3d" ,r-scatterplot3d)
-       ("r-splus2r" ,r-splus2r)
-       ("r-wmtsa" ,r-wmtsa)))
+     (list r-ifultools
+           r-mass
+           r-sapa
+           r-scatterplot3d
+           r-splus2r
+           r-wmtsa))
     (home-page "https://cran.r-project.org/web/packages/fractal/")
     (synopsis "Fractal time series modeling and analysis")
     (description
@@ -6538,8 +6698,8 @@ chaotic time series analysis.")
         (base32
          "1akaqwf3fvvvx4sgfn641fd4sj51s0701pvfl6s5hnz2k0iwh732"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-nlme" ,r-nlme)))
-    (native-inputs `(("gfortran" ,gfortran)))
+    (propagated-inputs (list r-nlme))
+    (native-inputs (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/urca/")
     (synopsis "Unit root and cointegration tests for time series data")
     (description
@@ -6560,9 +6720,9 @@ applied econometric analysis.")
          "0kk9lw3s66h0sayza3in8rdj7bmgqn4v5lfckhslarpvj2fxsnv0"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)))
+     (list r-rcpp))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/bnaras/cubature")
     (synopsis "Adaptive multivariate integration over hypercubes")
     (description
@@ -6587,9 +6747,9 @@ interface.")
          "1mr5g5gaxiqj6x83ngcbwwh57vhrhcz0x9dh0rmvs9y2ivk29ccs"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-extradistr" ,r-extradistr)))
+     (list r-extradistr))
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/trend/")
     (synopsis "Non-parametric trend tests and change-point detection")
     (description
@@ -6617,8 +6777,8 @@ sample Robust Rank-Order Distributional Test.")
         (base32
          "1p5dapwv8ycxaysgi6imnby04i4kh1c5a2czqa4wygz0s8pr2y9c"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-matrix" ,r-matrix)))
-    (native-inputs `(("gfortran" ,gfortran)))
+    (propagated-inputs (list r-matrix))
+    (native-inputs (list gfortran))
     (home-page "https://r-forge.r-project.org/projects/expm/")
     (synopsis "Tools for matrix exponentials and related quantities")
     (description
@@ -6639,8 +6799,7 @@ exponential, logarithm, square root, and related quantities.")
          "16w9v7d1ckavqmr86l34frr37pkvdn0iqnb17ssb8xaggns5lgqx"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-expm" ,r-expm)
-       ("r-matrix" ,r-matrix)))
+     (list r-expm r-matrix))
     (home-page "https://cran.r-project.org/web/packages/complexplus/")
     (synopsis "Functions of complex or real variables")
     (description
@@ -6683,10 +6842,7 @@ creation and manipulation of WAVE audio files.")
          "1a9kzn37cddwfdki5zjmzanxp75pccdjnsvqfrh84hhcsy51pcx3"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-boot" ,r-boot)
-       ("r-cubature" ,r-cubature)
-       ("r-quadprog" ,r-quadprog)
-       ("r-quantreg" ,r-quantreg)))
+     (list r-boot r-cubature r-quadprog r-quantreg))
     (home-page "https://github.com/JeffreyRacine/R-Package-np")
     (synopsis "Non-parametric kernel smoothing methods for mixed data types")
     (description "This package provides non-parametric (and semi-parametric)
@@ -6708,11 +6864,7 @@ ordered factor data types.")
          "0ayp6x34hkzgris4j3zbbs0r23n81bhww3wgfyy630ri4sk6brrn"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-complexplus" ,r-complexplus)
-       ("r-expm" ,r-expm)
-       ("r-mass" ,r-mass)
-       ("r-matrix" ,r-matrix)
-       ("r-phontools" ,r-phontools)))
+     (list r-complexplus r-expm r-mass r-matrix r-phontools))
     (home-page "https://cran.r-project.org/web/packages/powerplus/")
     (synopsis "Exponentiation operations")
     (description
@@ -6734,9 +6886,7 @@ exponentiation.")
     (properties `((upstream-name . "egg")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-gtable" ,r-gtable)))
+     (list r-ggplot2 r-gridextra r-gtable))
     (home-page "https://cran.r-project.org/web/packages/egg")
     (synopsis "Extensions for ggplot2")
     (description
@@ -6760,9 +6910,9 @@ functions to enforce symmetric scales or add tags to facetted plots.")
          "0sfvizmmwfk1bjhn6zfx5a4qqfgj1ldg8x90b65crqibgfa36k2r"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-fastcluster" ,r-fastcluster)))
+     (list r-fastcluster))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/heatmap3/")
     (synopsis "Improved heatmap package")
     (description
@@ -6774,32 +6924,32 @@ powerful and convenient features.")
 (define-public r-heatmaply
   (package
     (name "r-heatmaply")
-    (version "1.2.1")
+    (version "1.3.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "heatmaply" version))
        (sha256
         (base32
-         "0hspfkninwy62sf8gkdcsvwnvl66bbnjs2dpah9rr95a3rsgdp9d"))))
+         "1w8yyzb68laxd4zxycvgmpqj5wnyidjgv1vbzbxndp9p92f2cp8a"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertthat" ,r-assertthat)
-       ("r-colorspace" ,r-colorspace)
-       ("r-dendextend" ,r-dendextend)
-       ("r-egg" ,r-egg)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-htmlwidgets" ,r-htmlwidgets)
-       ("r-magrittr" ,r-magrittr)
-       ("r-plotly" ,r-plotly)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-reshape2" ,r-reshape2)
-       ("r-scales" ,r-scales)
-       ("r-seriation" ,r-seriation)
-       ("r-viridis" ,r-viridis)
-       ("r-webshot" ,r-webshot)))
+     (list r-assertthat
+           r-colorspace
+           r-dendextend
+           r-egg
+           r-ggplot2
+           r-htmlwidgets
+           r-magrittr
+           r-plotly
+           r-rcolorbrewer
+           r-reshape2
+           r-scales
+           r-seriation
+           r-viridis
+           r-webshot))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/package=heatmaply")
     (synopsis "Interactive cluster heat maps using plotly")
     (description
@@ -6827,12 +6977,11 @@ dendrograms.")
          "14p7i1sj24ky87kd7qr3n9fc9l64s0bp0rwbyl6i2x69xn75gpsx"))))
     (build-system r-build-system)
     (inputs
-     `(("zlib" ,zlib)
-       ("hdf5" ,hdf5)))
+     (list zlib hdf5))
     (native-inputs
-     `(("which" ,which)))
+     (list which))
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)))
+     (list r-rcpp))
     (home-page "https://github.com/mannau/h5")
     (synopsis "Interface to the HDF5 Library")
     (description
@@ -6857,9 +7006,7 @@ fit into memory.")
          "07yc819hkabpzzh0g0cbqza6bcfy67b2marrzz1lj97f9iba78ja"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-httr" ,r-httr)
-       ("r-r-methodss3" ,r-r-methodss3)
-       ("r-r-oo" ,r-r-oo)))
+     (list r-httr r-r-methodss3 r-r-oo))
     (home-page "https://github.com/cBioPortal/cgdsr")
     (synopsis "R-based API for accessing the MSKCC Cancer Genomics Data Server")
     (description
@@ -6881,7 +7028,7 @@ Memorial-Sloan-Kettering Cancer Center (MSKCC).")
          "018s0x224gqnv4cjfh0fwliyfg6ma9vslmwybrlizfsmqcc5wp37"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/smbache/import")
     (synopsis "Import mechanism for R")
     (description
@@ -6908,8 +7055,7 @@ files.")
     (properties `((upstream-name . "shinyAce")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-shiny" ,r-shiny)
-       ("r-jsonlite" ,r-jsonlite)))
+     (list r-shiny r-jsonlite))
     (home-page "https://cran.r-project.org/web/packages/shinyAce/")
     (synopsis "Ace editor bindings for Shiny")
     (description
@@ -6931,7 +7077,7 @@ environment within Shiny.")
     (properties `((upstream-name . "randomizr")))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://declaredesign.org/r/randomizr/")
     (synopsis "Tools for common forms of random assignment and sampling")
     (description
@@ -6952,7 +7098,7 @@ experimental designs and random samples for common sampling designs.")
          "0n1c2b68vza1dh7sk38v6biiwm72c4jpl79kpdg1bsb0hq9qy18x"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-backports" ,r-backports)))
+     (list r-backports))
     (home-page "https://github.com/mllg/base64url")
     (synopsis "Fast and URL-safe base64 encoder and decoder")
     (description
@@ -6969,14 +7115,14 @@ systems.")
 (define-public r-radiant-data
   (package
     (name "r-radiant-data")
-    (version "1.3.12")
+    (version "1.4.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "radiant.data" version))
        (sha256
         (base32
-         "08bqqrfvpgyf613ikihwfnzb23l23f5nfs7zynnxbjxc1zfhbpny"))
+         "12x4nz5n6yz1a67ji79pwvznp9flmn50hpp9y9sfhixir7dvwy27"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -6986,38 +7132,38 @@ systems.")
     (properties `((upstream-name . "radiant.data")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-base64enc" ,r-base64enc)
-       ("r-broom" ,r-broom)
-       ("r-car" ,r-car)
-       ("r-curl" ,r-curl)
-       ("r-dplyr" ,r-dplyr)
-       ("r-dt" ,r-dt)
-       ("r-glue" ,r-glue)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-import" ,r-import)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-knitr" ,r-knitr)
-       ("r-lubridate" ,r-lubridate)
-       ("r-magrittr" ,r-magrittr)
-       ("r-markdown" ,r-markdown)
-       ("r-mass" ,r-mass)
-       ("r-patchwork" ,r-patchwork)
-       ("r-plotly" ,r-plotly)
-       ("r-psych" ,r-psych)
-       ("r-randomizr" ,r-randomizr)
-       ("r-readr" ,r-readr)
-       ("r-readxl" ,r-readxl)
-       ("r-rlang" ,r-rlang)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("r-rstudioapi" ,r-rstudioapi)
-       ("r-scales" ,r-scales)
-       ("r-shiny" ,r-shiny)
-       ("r-shinyfiles" ,r-shinyfiles)
-       ("r-shinyace" ,r-shinyace)
-       ("r-stringi" ,r-stringi)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)
-       ("r-writexl" ,r-writexl)))
+     (list r-base64enc
+           r-broom
+           r-car
+           r-curl
+           r-dplyr
+           r-dt
+           r-glue
+           r-ggplot2
+           r-import
+           r-jsonlite
+           r-knitr
+           r-lubridate
+           r-magrittr
+           r-markdown
+           r-mass
+           r-patchwork
+           r-plotly
+           r-psych
+           r-randomizr
+           r-readr
+           r-readxl
+           r-rlang
+           r-rmarkdown
+           r-rstudioapi
+           r-scales
+           r-shiny
+           r-shinyfiles
+           r-shinyace
+           r-stringi
+           r-tibble
+           r-tidyr
+           r-writexl))
     (home-page "https://github.com/radiant-rstats/radiant.data")
     (synopsis "Data menu for Radiant: business analytics using R and Shiny")
     (description
@@ -7049,6 +7195,26 @@ a candidate list, using several criteria.  The blocking can be done when whole
 and within plot factors interact.")
     (license license:gpl2+)))
 
+(define-public r-alluvial
+  (package
+    (name "r-alluvial")
+    (version "0.1-2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "alluvial" version))
+       (sha256
+        (base32 "039frwrsxq1lb97s7vf2vbyyadimkigs628ymym06fxka53drdkp"))))
+    (properties `((upstream-name . "alluvial")))
+    (build-system r-build-system)
+    (native-inputs (list r-knitr))
+    (home-page "https://github.com/mbojan/alluvial")
+    (synopsis "Create parallel sets plots (Alluvial Diagrams)")
+    (description
+     "This package creates alluvial diagrams (also known as parallel sets
+plots) for multivariate and time series-like data.")
+    (license license:expat)))
+
 (define-public r-signal
   (package
     (name "r-signal")
@@ -7061,8 +7227,8 @@ and within plot factors interact.")
         (base32
          "0qaf39vfmhn3d0bdjqd805ayfkaj48dkmf5dqd47bpk7dp21b837"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-mass" ,r-mass)))
-    (native-inputs `(("gfortran" ,gfortran)))
+    (propagated-inputs (list r-mass))
+    (native-inputs (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/signal/")
     (synopsis "Signal processing")
     (description
@@ -7084,9 +7250,9 @@ It also includes interpolation functions.")
         (base32
          "00j6b8b6xsx6v370h220x233rpk6asca78165y3d48jpwvwisdc9"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-proto" ,r-proto)))
+    (propagated-inputs (list r-proto))
     (home-page "https://code.google.com/archive/p/gsubfn/")
-    (synopsis "Utilities for strings and function arguments.")
+    (synopsis "Utilities for strings and function arguments")
     (description
      "This package provides @code{gsubfn} which is like @code{gsub} but can
 take a replacement function or certain other objects instead of the
@@ -7111,11 +7277,7 @@ functions.")
          "0q12vsb53p2wchgp8wfz5bk08wfnm0jxjrakclj4jyy6x3a7ksff"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-chron" ,r-chron)
-       ("r-dbi" ,r-dbi)
-       ("r-gsubfn" ,r-gsubfn)
-       ("r-proto" ,r-proto)
-       ("r-rsqlite" ,r-rsqlite)))
+     (list r-chron r-dbi r-gsubfn r-proto r-rsqlite))
     (home-page "https://github.com/ggrothendieck/sqldf")
     (synopsis "Manipulate R data frames using SQL")
     (description
@@ -7189,21 +7351,21 @@ specific S3-method.")
     (properties `((upstream-name . "VIM")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-car" ,r-car)
-       ("r-colorspace" ,r-colorspace)
-       ("r-data-table" ,r-data-table)
-       ("r-e1071" ,r-e1071)
-       ("r-laeken" ,r-laeken)
-       ("r-magrittr" ,r-magrittr)
-       ("r-mass" ,r-mass)
-       ("r-nnet" ,r-nnet)
-       ("r-ranger" ,r-ranger)
-       ("r-rcpp" ,r-rcpp)
-       ("r-robustbase" ,r-robustbase)
-       ("r-sp" ,r-sp)
-       ("r-vcd" ,r-vcd)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-car
+           r-colorspace
+           r-data-table
+           r-e1071
+           r-laeken
+           r-magrittr
+           r-mass
+           r-nnet
+           r-ranger
+           r-rcpp
+           r-robustbase
+           r-sp
+           r-vcd))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/alexkowa/VIM")
     (synopsis "Visualization and imputation of missing values")
     (description
@@ -7253,7 +7415,7 @@ regression and information measures are implemented.")
          "0nqr1bvlr5bnasqg74zmknjjl4x28kla9h5cxpga3kq5z215pdci"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ttr" ,r-ttr)))
+     (list r-ttr))
     (home-page "https://cran.r-project.org/web/packages/smoother")
     (synopsis "Functions relating to the smoothing of numerical data")
     (description
@@ -7276,9 +7438,9 @@ are included.")
          "04ap1dsa7fx03l73jhv1ql3adaaaz2100qawdplxa9xmrllgcgbj"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcolorbrewer" ,r-rcolorbrewer)))
+     (list r-rcolorbrewer))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://logfc.wordpress.com")
     (synopsis "Sankey or ribbon plots")
     (description
@@ -7302,7 +7464,7 @@ plots for R.")
          "16fqv9k7yxdgybwzafjkyqm16qpgqz13lcjpi6a1nc8xbzlzh0gb"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-zoo" ,r-zoo)))
+     (list r-zoo))
     (home-page "https://cran.r-project.org/web/packages/dyn")
     (synopsis "Time series regression")
     (description
@@ -7329,7 +7491,7 @@ contain lags, diffs and missing values.")
          "0fyhl69z2lznymvpzxra9qvcg85ggzkfjy68c6mzdmf1ja44d2k5"))))
     (build-system r-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/catdap/")
     (synopsis "Tools for categorical data analysis")
     (description
@@ -7342,17 +7504,17 @@ evaluated by the @dfn{Akaike Information Criterion} (AIC).")
 (define-public r-arules
   (package
     (name "r-arules")
-    (version "1.6-8")
+    (version "1.7-3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "arules" version))
        (sha256
         (base32
-         "1gy6wrys1qqik65dyr325hdbfmd3fx9a2lzdnrr29g751hprjx2l"))))
+         "05g6ik4z87g83nlicmb380331f84sqchvv1vch49zb7rq6v8gw6r"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-matrix" ,r-matrix)))
+     (list r-generics r-matrix))
     (home-page "https://github.com/mhahsler/arules")
     (synopsis "Mining association rules and frequent itemsets")
     (description
@@ -7375,7 +7537,7 @@ and Eclat.")
          "05l6f1n3dsm383w7jfg3j38klvmzzfvc7qi9zr5ij13rljj8s1vb"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rematch2" ,r-rematch2)))
+     (list r-rematch2))
     (home-page "https://github.com/gaborcsardi/parsedate")
     (synopsis
      "Recognize and parse dates in various formats")
@@ -7421,11 +7583,7 @@ goodness-of-fit.")
          "0ngzaaz2y2s03fhngvwipmy4kq38xrmyddaz6a6l858rxvadrlhb"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-abc-data" ,r-abc-data)
-       ("r-locfit" ,r-locfit)
-       ("r-mass" ,r-mass)
-       ("r-nnet" ,r-nnet)
-       ("r-quantreg" ,r-quantreg)))
+     (list r-abc-data r-locfit r-mass r-nnet r-quantreg))
     (home-page "https://cran.r-project.org/web/packages/abc/")
     (synopsis "Tools for Approximate Bayesian Computation (ABC)")
     (description
@@ -7459,21 +7617,19 @@ additional external tools on any platform.")
 (define-public r-openxlsx
   (package
     (name "r-openxlsx")
-    (version "4.2.4")
+    (version "4.2.5")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "openxlsx" version))
        (sha256
         (base32
-         "0vn8ifxb7ccip6b1ijf5lpa6c0n5y5ll8fbabybsb8nfc0y1nmxg"))))
+         "0695b265g7jwiqk5c3vmmfkvagx82bkpwhvqzhqaqmmn34l6vl35"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)
-       ("r-stringi" ,r-stringi)
-       ("r-zip" ,r-zip)))
+     (list r-rcpp r-stringi r-zip))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/awalker89/openxlsx")
     (synopsis "Read, write and edit XLSX files")
     (description
@@ -7487,25 +7643,25 @@ dependency on Java.")
 (define-public r-rio
   (package
     (name "r-rio")
-    (version "0.5.27")
+    (version "0.5.29")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "rio" version))
        (sha256
         (base32
-         "02nxwg1d2m1h09a6ismhcp71gmq1c8rhbbl98if2v7xsvdn63sz0"))))
+         "04jlrhyl0791yxwcpp1s8p1hhkljnijlc5iaxpk56h41w63k39lz"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-curl" ,r-curl)
-       ("r-data-table" ,r-data-table)
-       ("r-foreign" ,r-foreign)
-       ("r-haven" ,r-haven)
-       ("r-openxlsx" ,r-openxlsx)
-       ("r-readxl" ,r-readxl)
-       ("r-tibble" ,r-tibble)))
+     (list r-curl
+           r-data-table
+           r-foreign
+           r-haven
+           r-openxlsx
+           r-readxl
+           r-tibble))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/leeper/rio")
     (synopsis "Swiss-army knife for data I/O")
     (description
@@ -7533,9 +7689,7 @@ simple method for converting between file types.")
          "0fa4a43zax8gn3jdp4ngqav61x4g6l33bg9wzqbngkbjhipck59r"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-foreign" ,r-foreign)
-       ("r-lattice" ,r-lattice)
-       ("r-sp" ,r-sp)))
+     (list r-foreign r-lattice r-sp))
     (home-page "https://r-forge.r-project.org/projects/maptools/")
     (synopsis "Tools for reading and handling spatial objects")
     (description
@@ -7561,10 +7715,9 @@ exchanging spatial objects with other R packages.")
          "0acqg29hcm2iq1418b54np7zb5pnr3xzrwc3ijv2pz9wra10ix88"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)
-       ("r-rlang" ,r-rlang)))
+     (list r-rcpp r-rlang))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/r-lib/later")
     (synopsis "Utilities for delaying function execution")
     (description
@@ -7585,13 +7738,9 @@ time after the current time, after the R execution stack has emptied.")
          "1dy4cbqw17awh4q8m7cy3anaj0n9iynabfzflb1g94cyj0bq4fld"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-later" ,r-later)
-       ("r-magrittr" ,r-magrittr)
-       ("r-r6" ,r-r6)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rlang" ,r-rlang)))
+     (list r-later r-magrittr r-r6 r-rcpp r-rlang))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://rstudio.github.io/promises")
     (synopsis "Abstractions for promise-based asynchronous programming")
     (description
@@ -7616,9 +7765,7 @@ promises, but with a syntax that is idiomatic R.")
     (properties `((upstream-name . "doSNOW")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-foreach" ,r-foreach)
-       ("r-iterators" ,r-iterators)
-       ("r-snow" ,r-snow)))
+     (list r-foreach r-iterators r-snow))
     (home-page "https://cran.r-project.org/web/packages/doSNOW")
     (synopsis "Foreach parallel adaptor for the snow package")
     (description
@@ -7639,7 +7786,7 @@ using the @code{snow} package.")
          "0vwclzxww8mw9nnpyj29bn71mrr8jjg7ka03979h9rbzw6d9bjrr"))))
     (properties `((upstream-name . "fst")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-rcpp" ,r-rcpp)))
+    (propagated-inputs (list r-rcpp))
     (home-page "http://www.fstpackage.org")
     (synopsis "Fast serialization of data frames")
     (description
@@ -7662,7 +7809,7 @@ compression with the LZ4 and ZSTD compressors.")
              (base32 "13941rlw1jsdjsndp1plzj1cq5aqravizkrqn6l25r9im7rnsi2w"))))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-snow" ,r-snow)))
+    (list r-snow))
    (home-page "https://cran.r-project.org/web/packages/snowfall/")
    (synopsis "Easier cluster computing")
    (description "This package is a usability wrapper around snow for easier
@@ -7720,9 +7867,7 @@ it.")
                                        (string-append "--outfile=" target)))
                              sources targets)))))))))
     (propagated-inputs
-     `(("r-igraph" ,r-igraph)
-       ("r-servr" ,r-servr)
-       ("r-xml" ,r-xml)))
+     (list r-igraph r-servr r-xml))
     (native-inputs
      `(("r-knitr" ,r-knitr)
        ("esbuild" ,esbuild)
@@ -7775,10 +7920,9 @@ JavaScript library) and interact with the igraph package.")
     (properties `((upstream-name . "data.tree")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-r6" ,r-r6)
-       ("r-stringi" ,r-stringi)))
+     (list r-r6 r-stringi))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/gluc/data.tree")
     (synopsis "General purpose hierarchical data structure")
     (description
@@ -7791,29 +7935,29 @@ finance, conversion from and to JSON, and many other applications.")
 (define-public r-dtplyr
   (package
     (name "r-dtplyr")
-    (version "1.1.0")
+    (version "1.2.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "dtplyr" version))
        (sha256
         (base32
-         "0cn7vxn92dcxrnabccla6ppf5x7pxfz6pjlmamp0imfphmr1ns4r"))))
+         "1wyhhn16mvdj55k2xsh7vy489l7xk4mkz7pjrw16z87awk6yjh16"))))
     (properties `((upstream-name . "dtplyr")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-crayon" ,r-crayon)
-       ("r-data-table" ,r-data-table)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ellipsis" ,r-ellipsis)
-       ("r-glue" ,r-glue)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-rlang" ,r-rlang)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyselect" ,r-tidyselect)
-       ("r-vctrs" ,r-vctrs)))
+     (list r-crayon
+           r-data-table
+           r-dplyr
+           r-ellipsis
+           r-glue
+           r-lifecycle
+           r-rlang
+           r-tibble
+           r-tidyselect
+           r-vctrs))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/tidyverse/dtplyr")
     (synopsis "Data Table back-end for dplyr")
     (description
@@ -7855,8 +7999,7 @@ automatically translated to the equivalent, but usually much faster,
                  (invoke "esbuild" source "--minify"
                          (string-append "--outfile=" target)))))))))
     (propagated-inputs
-     `(("r-data-tree" ,r-data-tree)
-       ("r-htmlwidgets" ,r-htmlwidgets)))
+     (list r-data-tree r-htmlwidgets))
     (native-inputs
      `(("esbuild" ,esbuild)
        ("d3.v4.js"
@@ -7898,26 +8041,26 @@ Python's @url{https://github.com/ActiveState/appdirs,Appdirs} to R.")
 (define-public r-rastervis
   (package
     (name "r-rastervis")
-    (version "0.50.3")
+    (version "0.51.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "rasterVis" version))
        (sha256
         (base32
-         "10njks2kwyh5rp2b6sf2hffxzzwwhskb8m98l73p8yrvsdri1gyj"))))
+         "1mg11njzajx9az6xjghjl2sna6wzs85ga8fhy9w43l2n8icsfbr2"))))
     (properties `((upstream-name . "rasterVis")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-hexbin" ,r-hexbin)
-       ("r-lattice" ,r-lattice)
-       ("r-latticeextra" ,r-latticeextra)
-       ("r-raster" ,r-raster)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-sp" ,r-sp)
-       ("r-terra" ,r-terra)
-       ("r-viridislite" ,r-viridislite)
-       ("r-zoo" ,r-zoo)))
+     (list r-hexbin
+           r-lattice
+           r-latticeextra
+           r-raster
+           r-rcolorbrewer
+           r-sp
+           r-terra
+           r-viridislite
+           r-zoo))
     (home-page "https://oscarperpinan.github.io/rastervis/")
     (synopsis "Visualization methods for raster data")
     (description
@@ -7941,11 +8084,9 @@ provides methods to display spatiotemporal rasters, and vector fields.")
     (properties `((upstream-name . "rentrez")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-httr" ,r-httr)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-xml" ,r-xml)))
+     (list r-httr r-jsonlite r-xml))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://docs.ropensci.org/rentrez/")
     (synopsis "Entrez in R")
     (description
@@ -7957,18 +8098,18 @@ those searches and pull data into their R sessions.")
 (define-public r-renv
   (package
     (name "r-renv")
-    (version "0.14.0")
+    (version "0.15.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "renv" version))
        (sha256
         (base32
-         "194hcxikdnna526bvyz9y60ccmmm9fib5g0w9dqivrg0fld23lyh"))))
+         "0nwvdzwyjvqlvkwp1yhhvqm8b9pwimwng99s0m0j63zm9bgwis1n"))))
     (properties `((upstream-name . "renv")))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://rstudio.github.io/renv")
     (synopsis "Project environments")
     (description
@@ -7992,20 +8133,20 @@ reproducible.")
          "08xwmms6x58y3dsfbl9c6d03145hb4ij97nqr1cc9dxxilmr6x31"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-checkmate" ,r-checkmate)
-       ("r-ellipsis" ,r-ellipsis)
-       ("r-evaluate" ,r-evaluate)
-       ("r-htmltools" ,r-htmltools)
-       ("r-htmlwidgets" ,r-htmlwidgets)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-knitr" ,r-knitr)
-       ("r-markdown" ,r-markdown)
-       ("r-rappdirs" ,r-rappdirs)
-       ("r-renv" ,r-renv)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("r-rprojroot" ,r-rprojroot)
-       ("r-shiny" ,r-shiny)
-       ("r-withr" ,r-withr)))
+     (list r-checkmate
+           r-ellipsis
+           r-evaluate
+           r-htmltools
+           r-htmlwidgets
+           r-jsonlite
+           r-knitr
+           r-markdown
+           r-rappdirs
+           r-renv
+           r-rmarkdown
+           r-rprojroot
+           r-shiny
+           r-withr))
     (home-page "https://rstudio.github.io/learnr/")
     (synopsis "Interactive tutorials for R")
     (description
@@ -8027,18 +8168,18 @@ quizzes to create self-paced tutorials for learning about R and R packages.")
          "0js3c8lwj3knccb55nq03cbjlf4w390p9aid2mi5x80l3ayd9in1"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-car" ,r-car)
-       ("r-cluster" ,r-cluster)
-       ("r-fractal" ,r-fractal)
-       ("r-lmtest" ,r-lmtest)
-       ("r-mass" ,r-mass)
-       ("r-np" ,r-np)
-       ("r-powerplus" ,r-powerplus)
-       ("r-robust" ,r-robust)
-       ("r-trend" ,r-trend)
-       ("r-tsa" ,r-tsa)
-       ("r-urca" ,r-urca)
-       ("r-vim" ,r-vim)))
+     (list r-car
+           r-cluster
+           r-fractal
+           r-lmtest
+           r-mass
+           r-np
+           r-powerplus
+           r-robust
+           r-trend
+           r-tsa
+           r-urca
+           r-vim))
     (home-page "https://cran.r-project.org/web/packages/analytics/")
     (synopsis "Collection of data analysis tools")
     (description
@@ -8061,8 +8202,8 @@ obtain a better initial configuration in non-metric MDS.")
         (base32 "0srlr8h8qmr0wrmp7gs4g2ry5dni2hx8n947bik3s3a26f091v88"))))
     (properties `((upstream-name . "here")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-rprojroot" ,r-rprojroot)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+    (propagated-inputs (list r-rprojroot))
+    (native-inputs (list r-knitr))
     (home-page "https://here.r-lib.org/")
     (synopsis "Simpler way to find files")
     (description
@@ -8074,26 +8215,27 @@ always locate the files relative to your project root.")
 (define-public r-reticulate
   (package
     (name "r-reticulate")
-    (version "1.22")
+    (version "1.23")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "reticulate" version))
        (sha256
         (base32
-         "0v7m2pv94lfqiw8rhz3c9g66vvz4qvih4vd29rhfk2phmcwpnvmh"))))
+         "1mindiw7k7pa33hpwrgq0g5808c8qs9hl0351n8z2w9wyczlm87y"))))
     (build-system r-build-system)
-    (inputs `(("python" ,python)))
+    (inputs (list python))
     (propagated-inputs
-     `(("r-here" ,r-here)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-matrix" ,r-matrix)
-       ("r-png" ,r-png)
-       ("r-rappdirs" ,r-rappdirs)
-       ("r-rcpp" ,r-rcpp)
-       ("r-withr" ,r-withr)))
+     (list r-here
+           r-jsonlite
+           r-matrix
+           r-png
+           r-rappdirs
+           r-rcpp
+           r-rcpptoml
+           r-withr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/rstudio/reticulate")
     (synopsis "R interface to Python")
     (description
@@ -8115,7 +8257,7 @@ Python to R they are converted back to R types.")
         (base32
          "0vdwx6808r73pk15263f33bkqbfmb08d8jkmr4d7h4ml414ikbbv"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-stringr" ,r-stringr)))
+    (propagated-inputs (list r-stringr))
     (home-page "https://github.com/romainfrancois/bibtex")
     (synopsis "Bibtex parser")
     (description "This package provides a utility for R to parse a bibtex
@@ -8134,7 +8276,7 @@ file.")
         (base32
          "13q6kcpxrqxqbji889fx63p0nsi08lk5yymkchig75r5k1d18ky1"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-ggplot2" ,r-ggplot2)))
+    (propagated-inputs (list r-ggplot2))
     (home-page "https://github.com/omarwagih/ggseqlogo")
     (synopsis "ggplot2 extension for drawing genetic sequence logos")
     (description
@@ -8159,8 +8301,7 @@ Sequence logos can easily be combined with other ggplot2 plots.")
          "0g73x6grbka7ahjh6z23m3wrcifp5rdfdiasbl8lq4sp6rplxwaa"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-scales" ,r-scales)))
+     (list r-ggplot2 r-scales))
     (home-page "https://nanx.me/ggsci/")
     (synopsis "Scientific journal and sci-fi themed color palettes for ggplot2")
     (description
@@ -8182,9 +8323,9 @@ movies, and TV shows.")
          "1ad774c7s7y4i00xd89lfigr9aybl94q98ch598k3rchanr4b1fa"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)))
+     (list r-ggplot2))
     (home-page "https://github.com/const-ae/ggsignif")
     (synopsis "Significance brackets for ggplot2")
     (description
@@ -8210,17 +8351,17 @@ and adds the annotation to the plot.")
     (properties `((upstream-name . "rstatix")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-broom" ,r-broom)
-       ("r-car" ,r-car)
-       ("r-corrplot" ,r-corrplot)
-       ("r-dplyr" ,r-dplyr)
-       ("r-generics" ,r-generics)
-       ("r-magrittr" ,r-magrittr)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)
-       ("r-tidyselect" ,r-tidyselect)))
+     (list r-broom
+           r-car
+           r-corrplot
+           r-dplyr
+           r-generics
+           r-magrittr
+           r-purrr
+           r-rlang
+           r-tibble
+           r-tidyr
+           r-tidyselect))
     (home-page "https://rpkgs.datanovia.com/rstatix/")
     (synopsis "Pipe-friendly framework for basic statistical tests")
     (description
@@ -8246,22 +8387,22 @@ matrix.")
          "0x86lmghr25k8w90yrp360dn42dhp5cjvjpdiv2s2gxfn701xcmb"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cowplot" ,r-cowplot)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggrepel" ,r-ggrepel)
-       ("r-ggsci" ,r-ggsci)
-       ("r-ggsignif" ,r-ggsignif)
-       ("r-glue" ,r-glue)
-       ("r-gridextra" ,r-gridextra)
-       ("r-magrittr" ,r-magrittr)
-       ("r-polynom" ,r-polynom)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-scales" ,r-scales)
-       ("r-rstatix" ,r-rstatix)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-cowplot
+           r-dplyr
+           r-ggplot2
+           r-ggrepel
+           r-ggsci
+           r-ggsignif
+           r-glue
+           r-gridextra
+           r-magrittr
+           r-polynom
+           r-purrr
+           r-rlang
+           r-scales
+           r-rstatix
+           r-tibble
+           r-tidyr))
     (home-page "http://www.sthda.com/english/rpkgs/ggpubr")
     (synopsis "ggplot2-based publication-ready plots")
     (description
@@ -8308,7 +8449,7 @@ Analysis and its Applications.")
          "0l4lpz451ll7f7lfxmb7ds24ppzhfg1c3ypvydglcc35p2dq99s8"))))
     (properties `((upstream-name . "flashClust")))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/flashClust/")
     (synopsis "Implementation of optimal hierarchical clustering")
     (description
@@ -8330,19 +8471,19 @@ clustering.")
     (properties `((upstream-name . "FactoMineR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-car" ,r-car)
-       ("r-cluster" ,r-cluster)
-       ("r-dt" ,r-dt)
-       ("r-ellipse" ,r-ellipse)
-       ("r-flashclust" ,r-flashclust)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggrepel" ,r-ggrepel)
-       ("r-lattice" ,r-lattice)
-       ("r-leaps" ,r-leaps)
-       ("r-mass" ,r-mass)
-       ("r-scatterplot3d" ,r-scatterplot3d)))
+     (list r-car
+           r-cluster
+           r-dt
+           r-ellipse
+           r-flashclust
+           r-ggplot2
+           r-ggrepel
+           r-lattice
+           r-leaps
+           r-mass
+           r-scatterplot3d))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "http://factominer.free.fr")
     (synopsis "Multivariate exploratory data analysis and data mining")
     (description
@@ -8368,15 +8509,15 @@ structured in groups, etc. and hierarchical cluster analysis.")
          "1allvdjhd3pq8xz30b1cymwcik5iaahghrjrlnn54cwkfhfg0kv2"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-abind" ,r-abind)
-       ("r-cluster" ,r-cluster)
-       ("r-dendextend" ,r-dendextend)
-       ("r-factominer" ,r-factominer)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggpubr" ,r-ggpubr)
-       ("r-ggrepel" ,r-ggrepel)
-       ("r-reshape2" ,r-reshape2)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-abind
+           r-cluster
+           r-dendextend
+           r-factominer
+           r-ggplot2
+           r-ggpubr
+           r-ggrepel
+           r-reshape2
+           r-tidyr))
     (home-page "http://www.sthda.com/english/rpkgs/factoextra")
     (synopsis "Extract and visualize the results of multivariate data analyses")
     (description
@@ -8393,17 +8534,17 @@ steps and provides ggplot2-based elegant data visualization.")
 (define-public r-fansi
   (package
     (name "r-fansi")
-    (version "0.5.0")
+    (version "1.0.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "fansi" version))
        (sha256
         (base32
-         "0kx5kjhr8dvqz1mq1zkijkgp29jv8b0irm1xplx1d74n2v1zh6wx"))))
+         "0mxm06png4lrl5gy5giws5dgig2faryang8y0wcvwfk120pczqni"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr))) ; for vignettes
+     (list r-knitr)) ; for vignettes
     (home-page "https://github.com/brodieG/fansi")
     (synopsis "ANSI control sequence aware string functions")
     (description
@@ -8435,23 +8576,21 @@ results to the user.")
 (define-public r-hdf5r
   (package
     (name "r-hdf5r")
-    (version "1.3.4")
+    (version "1.3.5")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "hdf5r" version))
        (sha256
         (base32
-         "0lxbdw1xf5yp82fkdj4wzp5mslay3qxd65459vh09dj131h5gl34"))))
+         "0bv2q4ir73sbk5ra2q4mc8wbcmiwkws8k0mjlnx9ysi2mdrm3dw7"))))
     (build-system r-build-system)
     (inputs
-     `(("hdf5" ,hdf5)
-       ("zlib" ,zlib)))
+     (list hdf5 zlib))
     (propagated-inputs
-     `(("r-bit64" ,r-bit64)
-       ("r-r6" ,r-r6)))
+     (list r-bit64 r-r6))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://hhoeflin.github.io/hdf5r")
     (synopsis "Interface to the HDF5 binary data format")
     (description
@@ -8475,7 +8614,7 @@ corresponding R counterparts.")
          "1ls5biiva10pb1dj3ph4griykb9vam02hkrdmlr5a5wf660hg6xn"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-iterators" ,r-iterators)))
+     (list r-iterators))
     (home-page "https://cran.r-project.org/web/packages/itertools/")
     (synopsis "Iterator tools")
     (description
@@ -8527,21 +8666,21 @@ functions.")
 (define-public r-rjags
   (package
     (name "r-rjags")
-    (version "4-11")
+    (version "4-12")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "rjags" version))
        (sha256
         (base32
-         "0vs86jji4h26y8aczy8r08jiq7ax0idlrm87mmvaa5sxlqmqa705"))))
+         "041y4zfr50y96g0kl857jcba0a3gpdpk8qfn9fj8zxzbz71k87xr"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-coda" ,r-coda)))
+     (list r-coda))
     (inputs
-     `(("jags" ,jags)))
+     (list jags))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://mcmc-jags.sourceforge.net")
     (synopsis "Bayesian graphical models using MCMC")
     (description
@@ -8553,14 +8692,14 @@ hierarchical models using Markov Chain Monte Carlo (MCMC) simulation.")
 (define-public r-rbibutils
   (package
     (name "r-rbibutils")
-    (version "2.2.3")
+    (version "2.2.7")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "rbibutils" version))
        (sha256
         (base32
-         "1rzc2icik26qlnrbq58c24lc9m0grl83p0hyr70whallqfipa174"))))
+         "1iamdbww3hvxy0bbywc307kyhiczx0bvfhw7nngsm33balcng7kw"))))
     (properties `((upstream-name . "rbibutils")))
     (build-system r-build-system)
     (home-page "https://geobosh.github.io/rbibutils/")
@@ -8575,18 +8714,18 @@ implemented in bibutils.")
 (define-public r-rdpack
   (package
     (name "r-rdpack")
-    (version "2.1.2")
+    (version "2.1.3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "Rdpack" version))
        (sha256
         (base32
-         "0s51c5fw1ka75b8cxk5bh27h6wcy5169yl93sjlxji2k27n9fj3i"))))
+         "1f2m9pxm4s4gkrqh58jznkqj2fcw6f29c1l05k5mmkwsdf3ai0c3"))))
     (properties `((upstream-name . "Rdpack")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rbibutils" ,r-rbibutils)))
+     (list r-rbibutils))
     (home-page "https://github.com/GeoBosh/Rdpack")
     (synopsis "Update and manipulate Rd documentation objects")
     (description
@@ -8601,22 +8740,19 @@ references and Rd files.")
 (define-public r-officer
   (package
     (name "r-officer")
-    (version "0.4.0")
+    (version "0.4.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "officer" version))
        (sha256
         (base32
-         "1za3vb1wmsianh9ygm6h5lyf796rni6w2adplz4z6z93r3mz4cmv"))))
+         "1gfx299zr4q2264q37994pirv5bd5isn1cszccz603ij3q40wajr"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-r6" ,r-r6)
-       ("r-uuid" ,r-uuid)
-       ("r-xml2" ,r-xml2)
-       ("r-zip" ,r-zip)))
+     (list r-r6 r-uuid r-xml2 r-zip))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://davidgohel.github.io/officer")
     (synopsis "Manipulation of Word and PowerPoint documents")
     (description
@@ -8667,7 +8803,7 @@ on the methods that are implemented can be found in Kosmidis (2008)
     (properties `((upstream-name . "brglm")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-profilemodel" ,r-profilemodel)))
+     (list r-profilemodel))
     (home-page "https://github.com/ikosmidis/brglm")
     (synopsis "Bias reduction in binomial-response generalized linear models")
     (description
@@ -8687,14 +8823,14 @@ reduced-bias estimates.")
 (define-public r-entropy
   (package
     (name "r-entropy")
-    (version "1.3.0")
+    (version "1.3.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "entropy" version))
        (sha256
         (base32
-         "0fhhsy8ci9c73xwr2b167dfix0b7kqsk6kf46qqv1lmvbv11vxqa"))))
+         "1f0j8jsn6pzf4gi5g0akixx6x5vc69ci5f4m2vnwp40frvsqjnkg"))))
     (properties `((upstream-name . "entropy")))
     (build-system r-build-system)
     (home-page "https://www.strimmerlab.org/software/entropy/")
@@ -8743,11 +8879,7 @@ or missing responses.")
     (properties `((upstream-name . "ACDm")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-plyr" ,r-plyr)
-       ("r-rsolnp" ,r-rsolnp)
-       ("r-zoo" ,r-zoo)))
+     (list r-dplyr r-ggplot2 r-plyr r-rsolnp r-zoo))
     (home-page "https://cran.r-project.org/web/packages/ACDm/")
     (synopsis "Tools for Autoregressive Conditional Duration Models")
     (description
@@ -8791,8 +8923,7 @@ intervals.")
          "1ky1x2cp5rd0ffd9m1fji9sq4z4jsrpxzg30brw8bb4ihfjj114r"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-stringi" ,r-stringi)
-       ("r-stringr" ,r-stringr)))
+     (list r-stringi r-stringr))
     (home-page "https://github.com/Tazinho/snakecase")
     (synopsis "Convert strings into any case")
     (description
@@ -8813,7 +8944,7 @@ parse and convert strings into cases like snake or camel among others.")
          "0awlq5lxfia6m2b91w73rksp93rbwv5gwqb36wbji4rgq41rzbrx"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)))
+     (list r-data-table))
     (home-page "https://github.com/leeper/prediction")
     (synopsis "Tidy, type-safe prediction methods")
     (description
@@ -8827,17 +8958,17 @@ other add-on packages.")
 (define-public r-insight
   (package
     (name "r-insight")
-    (version "0.14.4")
+    (version "0.15.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "insight" version))
        (sha256
         (base32
-         "0h63nr337zbczbj9izyb7g5dlzwail5w70hbbn45paq6vybkqks3"))))
+         "1vizx515a24v5x4f5mzbigl0wl4gz75hp5gqw8lkijygw71li8fn"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://easystats.github.io/insight/")
     (synopsis "Easy access to model information for various model objects")
     (description
@@ -8865,9 +8996,9 @@ information are missing.")
          "17gskxr43rgbg7syla3b78g2qgksq2kj07iad4139xycqxblxya0"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-insight" ,r-insight)))
+     (list r-insight))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/strengejacke/sjlabelled")
     (synopsis "Labelled data utility functions")
     (description
@@ -8881,25 +9012,25 @@ vice versa), or to deal with multiple declared missing values.")
 (define-public r-sjmisc
   (package
     (name "r-sjmisc")
-    (version "2.8.7")
+    (version "2.8.9")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "sjmisc" version))
        (sha256
         (base32
-         "17hcjb2j690qi2zrkwc14sr1wsid6dy6v7bfsf0bc94ql812k8g2"))))
+         "1gzkq95ckxr0vhrzggflzli9hs7zr8c0yym9zn1wf74yrr0mgc3q"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-insight" ,r-insight)
-       ("r-magrittr" ,r-magrittr)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-sjlabelled" ,r-sjlabelled)
-       ("r-tidyselect" ,r-tidyselect)))
+     (list r-dplyr
+           r-insight
+           r-magrittr
+           r-purrr
+           r-rlang
+           r-sjlabelled
+           r-tidyselect))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/strengejacke/sjmisc")
     (synopsis "Data and variable transformation functions")
     (description
@@ -8932,25 +9063,25 @@ hypothesis of normality.")
 (define-public r-moonbook
   (package
     (name "r-moonbook")
-    (version "0.2.4")
+    (version "0.3.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "moonBook" version))
        (sha256
         (base32
-         "0z78pzc8sr2g19xjdd9cmai4iqyifmh79gj8x40ddww6a27dalry"))))
+         "1ml4vvm0mvrprpyi0l50aw38brx18bk2qny4gybmkvlbakalz9bx"))))
     (properties `((upstream-name . "moonBook")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-magrittr" ,r-magrittr)
-       ("r-nortest" ,r-nortest)
-       ("r-sjmisc" ,r-sjmisc)
-       ("r-stringr" ,r-stringr)
-       ("r-survival" ,r-survival)
-       ("r-ztable" ,r-ztable)))
+     (list r-crayon
+           r-magrittr
+           r-nortest
+           r-sjmisc
+           r-stringr
+           r-survival))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/cardiomoon/moonBook")
     (synopsis "Functions and datasets for the book by Keon-Woong Moon")
     (description
@@ -8963,28 +9094,28 @@ functions.")
 (define-public r-flextable
   (package
     (name "r-flextable")
-    (version "0.6.8")
+    (version "0.6.10")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "flextable" version))
        (sha256
         (base32
-         "1b4hyrarxbk4d1ma5gy162b13nm5r5ysi049bxgcfim50rh40igs"))))
+         "01nm0357b0z4dgrplbq9ms63j51n0rgvvxyy068zdsc5p7j3lql2"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-base64enc" ,r-base64enc)
-       ("r-data-table" ,r-data-table)
-       ("r-gdtools" ,r-gdtools)
-       ("r-htmltools" ,r-htmltools)
-       ("r-knitr" ,r-knitr)
-       ("r-officer" ,r-officer)
-       ("r-rlang" ,r-rlang)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("r-uuid" ,r-uuid)
-       ("r-xml2" ,r-xml2)))
+     (list r-base64enc
+           r-data-table
+           r-gdtools
+           r-htmltools
+           r-knitr
+           r-officer
+           r-rlang
+           r-rmarkdown
+           r-uuid
+           r-xml2))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://davidgohel.github.io/flextable")
     (synopsis "Functions for tabular reporting")
     (description
@@ -9007,7 +9138,7 @@ documents.")
         (base32
          "0mfzyn8n5x5x5gf382bqgq61zpw9dymrp5kzdm2sbszplmxf6xry"))))
     (build-system r-build-system)
-    (inputs `(("zlib" ,zlib)))
+    (inputs (list zlib))
     (home-page "https://github.com/ropensci/writexl")
     (synopsis "Export data frames to xlsx format")
     (description
@@ -9052,10 +9183,7 @@ distribution).")
     (properties `((upstream-name . "GOplot")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggdendro" ,r-ggdendro)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)))
+     (list r-ggdendro r-ggplot2 r-gridextra r-rcolorbrewer))
     (home-page "https://github.com/wencke/wencke.github.io")
     (synopsis "Visualization of functional analysis data")
     (description
@@ -9115,22 +9243,20 @@ matches version and feature constraints.")
 (define-public r-argparse
   (package
     (name "r-argparse")
-    (version "2.1.1")
+    (version "2.1.3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "argparse" version))
        (sha256
         (base32
-         "1k6v35g3bppcr896h4v39zh1sxxia1bxxh29xv0mhad1nvmv25j9"))))
+         "0vm6nrzl6rsq2qw3km3i4s92kq9phs3cbxzv3i8hlyld9ajk3nmf"))))
     (build-system r-build-system)
-    (inputs `(("python" ,python)))
+    (inputs (list python))
     (propagated-inputs
-     `(("r-findpython" ,r-findpython)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-r6" ,r-r6)))
+     (list r-findpython r-jsonlite r-r6))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/trevorld/argparse")
     (synopsis "Command line optional and positional argument parser")
     (description
@@ -9172,7 +9298,7 @@ vectors.")
         (base32
          "165axs15fvwhrp89xd87l81q3h2qjll1vrwcsap645cwvb85nwsh"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-psych" ,r-psych)))
+    (propagated-inputs (list r-psych))
     (home-page "https://cran.r-project.org/web/packages/orddom/")
     (synopsis "Ordinal dominance statistics")
     (description
@@ -9222,19 +9348,19 @@ the work.")
     (properties `((upstream-name . "doBy")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-broom" ,r-broom)
-       ("r-curry" ,r-curry)
-       ("r-deriv" ,r-deriv)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-magrittr" ,r-magrittr)
-       ("r-mass" ,r-mass)
-       ("r-matrix" ,r-matrix)
-       ("r-microbenchmark" ,r-microbenchmark)
-       ("r-pbkrtest" ,r-pbkrtest)
-       ("r-tibble" ,r-tibble)))
+     (list r-broom
+           r-curry
+           r-deriv
+           r-dplyr
+           r-ggplot2
+           r-magrittr
+           r-mass
+           r-matrix
+           r-microbenchmark
+           r-pbkrtest
+           r-tibble))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://people.math.aau.dk/~sorenh/software/doBy/")
     (synopsis "Groupwise statistics, LSmeans, linear contrasts, and utilities")
     (description
@@ -9262,9 +9388,7 @@ the work.")
     (properties `((upstream-name . "refGenome")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dbi" ,r-dbi)
-       ("r-doby" ,r-doby)
-       ("r-rsqlite" ,r-rsqlite)))
+     (list r-dbi r-doby r-rsqlite))
     (home-page "https://cran.r-project.org/web/packages/refGenome/")
     (synopsis
      "Gene and splice site annotation using annotation data from Ensembl and UCSC")
@@ -9309,7 +9433,7 @@ procedures to speed up calculations in R.")
          "1fcl3yc1cf09znqbj787d3fd2kl5rp63la7pxawsgmap7nxwkp65"))))
     (properties `((upstream-name . "BlockFeST")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-basix" ,r-basix)))
+    (propagated-inputs (list r-basix))
     (home-page "https://cran.r-project.org/web/packages/BlockFeST/")
     (synopsis "Bayesian calculation of region-specific fixation index")
     (description
@@ -9334,8 +9458,7 @@ containing one or more SNPs that evolved under directional selection.")
     (properties `((upstream-name . "pROC")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-plyr" ,r-plyr)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-plyr r-rcpp))
     (home-page "https://web.expasy.org/pROC/")
     (synopsis "Display and analyze ROC curves")
     (description
@@ -9348,17 +9471,17 @@ bootstrap.  Confidence intervals can be computed for (p)AUC or ROC curves.")
 (define-public r-rootsolve
   (package
     (name "r-rootsolve")
-    (version "1.8.2.2")
+    (version "1.8.2.3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "rootSolve" version))
        (sha256
         (base32
-         "1p7nh09g2815vqpvi6c5vvjshkwjn00nx5d3gdyjs304q5312q0a"))))
+         "182bb727sgqi5f3pzmw8jnn328wdjrgj9lfvg49gv8s22rjd3cxm"))))
     (properties `((upstream-name . "rootSolve")))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/rootSolve/")
     (synopsis "Tools for the analysis of ordinary differential equations")
     (description
@@ -9391,7 +9514,7 @@ differential equations} (ODE).  It includes routines that:
         (base32 "0wac1ksmnxa36v99ca4hv8k0rsh3igwpcllmlv9wf7i9kgqviqwi"))))
     (properties `((upstream-name . "ABCanalysis")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-plotrix" ,r-plotrix)))
+    (propagated-inputs (list r-plotrix))
     (home-page "https://www.uni-marburg.de/fb12/arbeitsgruppen/datenbionik/software-en/")
     (synopsis "Computed ABC Analysis")
     (description
@@ -9406,13 +9529,13 @@ the analyzed items.")
 (define-public r-slam
   (package
     (name "r-slam")
-    (version "0.1-48")
+    (version "0.1-50")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "slam" version))
        (sha256
-        (base32 "1ppsvkph4v1dffxgp12a4wnr9arj7pkmh4qv0and3f6nbz9k42qa"))))
+        (base32 "1ggqcf8l1z2hpi7qy4mg0d2ps48bjjb8z1y1xz6fq162cqrbz6bq"))))
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/web/packages/slam/")
     (synopsis "Sparse lightweight arrays and matrices")
@@ -9424,28 +9547,28 @@ based on index arrays and simple triplet representations, respectively.")
 (define-public r-manipulatewidget
   (package
     (name "r-manipulatewidget")
-    (version "0.11.0")
+    (version "0.11.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "manipulateWidget" version))
        (sha256
-        (base32 "0iysgl6ab8fvg1xxdx6hr3swqwbkfqzjkk4x5sbvmawbl2a395gj"))))
+        (base32 "1dpgzmiv08afm57yxr017b014lfn9h3pa4w65prk5k3dgn6p4wsv"))))
     (properties
      `((upstream-name . "manipulateWidget")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-base64enc" ,r-base64enc)
-       ("r-codetools" ,r-codetools)
-       ("r-htmltools" ,r-htmltools)
-       ("r-htmlwidgets" ,r-htmlwidgets)
-       ("r-knitr" ,r-knitr)
-       ("r-miniui" ,r-miniui)
-       ("r-shiny" ,r-shiny)
-       ("r-shinyjs" ,r-shinyjs)
-       ("r-webshot" ,r-webshot)))
+     (list r-base64enc
+           r-codetools
+           r-htmltools
+           r-htmlwidgets
+           r-knitr
+           r-miniui
+           r-shiny
+           r-shinyjs
+           r-webshot))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/rte-antares-rpackage/manipulateWidget/")
     (synopsis "Add even more interactivity to interactive charts")
     (description
@@ -9468,8 +9591,7 @@ developers to generate user interfaces easy to maintain.")
     (properties `((upstream-name . "A3")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-pbapply" ,r-pbapply)
-       ("r-xtable" ,r-xtable)))
+     (list r-pbapply r-xtable))
     (home-page "https://cran.r-project.org/web/packages/A3/")
     (synopsis "Error metrics for predictive models")
     (description
@@ -9527,14 +9649,14 @@ from the @code{stats} package (plus some extra parameters).")
 (define-public r-cmplot
   (package
     (name "r-cmplot")
-    (version "3.6.2")
+    (version "4.0.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "CMplot" version))
        (sha256
         (base32
-         "13y05j5gsdc712fn7yvcz5nx2pbcdvl201hfb6jzpvl86qx2l0j1"))))
+         "0xyh75y0c84nnkrv6c8xrvla54w51phgdwn8a69799f2r87z7c81"))))
     (properties `((upstream-name . "CMplot")))
     (build-system r-build-system)
     (home-page "https://github.com/YinLiLin/CMplot")
@@ -9563,13 +9685,13 @@ visualization and candidate genes around SNPs.")
     (properties `((upstream-name . "precrec")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertthat" ,r-assertthat)
-       ("r-data-table" ,r-data-table)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-rcpp" ,r-rcpp)
-       ("r-withr" ,r-withr)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-assertthat
+           r-data-table
+           r-ggplot2
+           r-gridextra
+           r-rcpp
+           r-withr))
+    (native-inputs (list r-knitr))
     (home-page "https://evalclass.github.io/precrec/")
     (synopsis "Calculate accurate precision-recall and ROC curves")
     (description
@@ -9591,15 +9713,15 @@ of precision-recall and ROC (Receiver Operator Characteristics) curves.")
     (properties `((upstream-name . "NetRep")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-abind" ,r-abind)
-       ("r-bh" ,r-bh)
-       ("r-foreach" ,r-foreach)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-rhpcblasctl" ,r-rhpcblasctl)
-       ("r-statmod" ,r-statmod)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-abind
+           r-bh
+           r-foreach
+           r-rcolorbrewer
+           r-rcpp
+           r-rcpparmadillo
+           r-rhpcblasctl
+           r-statmod))
+    (native-inputs (list r-knitr))
     (home-page "https://cran.r-project.org/package=NetRep")
     (synopsis "Permutation testing network module preservation across datasets")
     (description
@@ -9622,14 +9744,13 @@ through permutation testing.")
     (properties `((upstream-name . "intergraph")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-igraph" ,r-igraph)
-       ("r-network" ,r-network)))
+     (list r-igraph r-network))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "http://mbojan.github.io/intergraph")
     (synopsis "Coercion routines for network data objects")
     (description
-     "Functions implemented in this package allow to coerce (i.e. convert)
+     "Functions implemented in this package allow coercing (i.e. convert)
 network data between classes provided by other R packages.  Currently
 supported classes are those defined in packages @code{network} and
 @code{igraph}.")
@@ -9647,7 +9768,7 @@ supported classes are those defined in packages @code{network} and
         (base32 "1ih0xk88qhsmpvnxf56041wx5sk8as2f4f2gdnpnwdym9mbr9n4b"))))
     (properties `((upstream-name . "ABCoptim")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-rcpp" ,r-rcpp)))
+    (propagated-inputs (list r-rcpp))
     (home-page "https://github.com/gvegayon/ABCoptim/")
     (synopsis "Optimization of Artificial Bee Colony algorithm")
     (description
@@ -9672,7 +9793,7 @@ colony optimization algorithm @url{http://mf.erciyes.edu.tr/abc/pub/tr06_2005.pd
         (base32 "1s2skkxpzss7c29i8600psgrp0hl46jcrxqrmy2b4db8hc0kcnbx"))))
     (properties `((upstream-name . "ABCp2")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-mass" ,r-mass)))
+    (propagated-inputs (list r-mass))
     (home-page "https://cran.r-project.org/web/packages/ABCp2/")
     (synopsis "Approximate Bayesian Computational Model for Estimating P2")
     (description
@@ -9693,15 +9814,15 @@ second male (P2) based on the best fit distribution.")
         (base32 "1ghbd24yhqy3xhdxas6ccn84nkavqpgldx5ck8kijknc7qjm8k27"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-doparallel" ,r-doparallel)
-       ("r-foreach" ,r-foreach)
-       ("r-mass" ,r-mass)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-ranger" ,r-ranger)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-readr" ,r-readr)
-       ("r-stringr" ,r-stringr)))
+     (list r-doparallel
+           r-foreach
+           r-mass
+           r-matrixstats
+           r-ranger
+           r-rcpp
+           r-rcpparmadillo
+           r-readr
+           r-stringr))
     (home-page "https://cran.r-project.org/web/packages/abcrf/")
     (synopsis "Approximate bayesian computation via random forests")
     (description
@@ -9723,10 +9844,7 @@ ABC algorithms.")
         (base32 "07s9dg10i8lsxl73b4n2hynca2fjgb0ykb0dz8c3zv6cgw3cyx97"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-abc" ,r-abc)
-       ("r-abind" ,r-abind)
-       ("r-hmisc" ,r-hmisc)
-       ("r-plyr" ,r-plyr)))
+     (list r-abc r-abind r-hmisc r-plyr))
     (home-page "https://github.com/dennisprangle/abctools/")
     (synopsis "Tools for ABC analyses")
     (description
@@ -9748,10 +9866,7 @@ and coverage methods to tune the choice of threshold.")
         (base32 "0jz9vvnmcc6a38n8nzr458r65sna23bgn5r8mxdhzdlyqibihr7d"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-plyr" ,r-plyr)
-       ("r-rlang" ,r-rlang)
-       ("r-withr" ,r-withr)))
+     (list r-ggplot2 r-plyr r-rlang r-withr))
     (home-page "https://cran.r-project.org/web/packages/ggstance/")
     (synopsis "Horizontal and vertical versions of @code{r-ggplot2}")
     (description
@@ -9776,12 +9891,8 @@ and coverage methods to tune the choice of threshold.")
     (properties `((upstream-name . "ggnetwork")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-ggrepel" ,r-ggrepel)
-       ("r-igraph" ,r-igraph)
-       ("r-network" ,r-network)
-       ("r-sna" ,r-sna)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-ggplot2 r-ggrepel r-igraph r-network r-sna))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/briatte/ggnetwork")
     (synopsis "Geometries to plot networks with ggplot2")
     (description
@@ -9792,19 +9903,18 @@ ggplot2 package.")
 (define-public r-cvauc
   (package
     (name "r-cvauc")
-    (version "1.1.0")
+    (version "1.1.4")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "cvAUC" version))
        (sha256
         (base32
-         "13bk97l5nn97h85iz93zxazhr63n21nwyrpnl856as9qp59yvn64"))))
+         "1m2y50a1yapf1c74km9a4r47ds2z2bfp4wwwkqin7swv9v1s7d28"))))
     (properties `((upstream-name . "cvAUC")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)
-       ("r-rocr" ,r-rocr)))
+     (list r-data-table r-rocr))
     (home-page "https://github.com/ledell/cvAUC")
     (synopsis "Cross-validated area under the ROC curve confidence intervals")
     (description
@@ -9830,9 +9940,9 @@ repeated measures data, respectively.")
     (properties `((upstream-name . "gam")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-foreach" ,r-foreach)))
+     (list r-foreach))
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/package=gam")
     (synopsis "Generalized additive models")
     (description
@@ -9856,11 +9966,9 @@ Models\" (Hastie and Tibshirani, 1990).")
     (properties `((upstream-name . "SuperLearner")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cvauc" ,r-cvauc)
-       ("r-gam" ,r-gam)
-       ("r-nnls" ,r-nnls)))
+     (list r-cvauc r-gam r-nnls))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/ecpolley/SuperLearner")
     (synopsis "Super learner prediction")
     (description
@@ -9882,11 +9990,9 @@ a library of prediction algorithms to be used in the super learner.")
     (properties `((upstream-name . "drtmle")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-future-apply" ,r-future-apply)
-       ("r-np" ,r-np)
-       ("r-superlearner" ,r-superlearner)))
+     (list r-future-apply r-np r-superlearner))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/benkeser/drtmle")
     (synopsis "Doubly-robust nonparametric estimation and inference")
     (description
@@ -9914,12 +10020,9 @@ both to consistency and asymptotic normality.")
          (add-after 'unpack 'set-HOME
            (lambda _ (setenv "HOME" "/tmp"))))))
     (propagated-inputs
-     `(("r-foreach" ,r-foreach)
-       ("r-future" ,r-future)
-       ("r-globals" ,r-globals)
-       ("r-iterators" ,r-iterators)))
+     (list r-foreach r-future r-globals r-iterators))
     (native-inputs
-     `(("r-r-rsp" ,r-r-rsp))) ; vignette builder
+     (list r-r-rsp)) ; vignette builder
     (home-page "https://github.com/HenrikBengtsson/doFuture")
     (synopsis "Foreach parallel adapter using the future API")
     (description
@@ -9941,13 +10044,13 @@ futures can be used as backends for the @code{foreach} framework.")
     (properties `((upstream-name . "superheat")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-ggdendro" ,r-ggdendro)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gtable" ,r-gtable)
-       ("r-magrittr" ,r-magrittr)
-       ("r-plyr" ,r-plyr)
-       ("r-scales" ,r-scales)))
+     (list r-dplyr
+           r-ggdendro
+           r-ggplot2
+           r-gtable
+           r-magrittr
+           r-plyr
+           r-scales))
     (home-page "https://cran.r-project.org/package=superheat")
     (synopsis "Graphical tool for exploring complex datasets using heatmaps")
     (description
@@ -9959,18 +10062,18 @@ data with multiple data types.")
 (define-public r-qualv
   (package
     (name "r-qualv")
-    (version "0.3-3")
+    (version "0.3-4")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "qualV" version))
        (sha256
         (base32
-         "1yyqk223ydcc0125gsn33a4mcdp8bd76fpn8kj9bfz9g78b8dqmx"))))
+         "0rkjzva2h158d5c631jmjjh7qjibbyisl0503san80rk9fgxl45b"))))
     (properties `((upstream-name . "qualV")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-kernsmooth" ,r-kernsmooth)))
+     (list r-kernsmooth))
     (home-page "http://qualV.R-Forge.R-Project.org/")
     (synopsis "Qualitative Validation Methods")
     (description
@@ -10002,10 +10105,7 @@ subsequence} (LCS) using a dynamic programming algorithm.")
     (properties `((upstream-name . "mosaicCore")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-mass" ,r-mass)
-       ("r-rlang" ,r-rlang)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-dplyr r-mass r-rlang r-tidyr))
     (home-page "https://github.com/ProjectMOSAIC/mosaicCore/")
     (synopsis "Common utilities for mosaic family packages")
     (description
@@ -10015,32 +10115,32 @@ subsequence} (LCS) using a dynamic programming algorithm.")
 (define-public r-labelled
   (package
     (name "r-labelled")
-    (version "2.8.0")
+    (version "2.9.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "labelled" version))
        (sha256
         (base32
-         "0fs8fhmk9j2nv2j87mpkmm0clz34f8kybnzn6pzqpcbwk0i2pcwg"))))
+         "0ffnhlr239nqcwb35m4hll21abnnhpmyy5wlxnyahrg0kqb0xb1n"))))
     (properties `((upstream-name . "labelled")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-haven" ,r-haven)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-rlang" ,r-rlang)
-       ("r-stringr" ,r-stringr)
-       ("r-tidyr" ,r-tidyr)
-       ("r-vctrs" ,r-vctrs)))
+     (list r-dplyr
+           r-haven
+           r-lifecycle
+           r-rlang
+           r-stringr
+           r-tidyr
+           r-vctrs))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "http://larmarange.github.io/labelled/")
     (synopsis "Manipulating labelled data")
     (description
      "This package provides useful functions to deal with the
 @code{haven_labelled} and @code{haven_labelled_spss} classes introduced by the
-haven package. ")
+haven package.")
     (license license:gpl3)))
 
 (define-public r-ggformula
@@ -10055,19 +10155,19 @@ haven package. ")
         (base32 "1ph5jd8svk8hmshi894vmmpq3zwgdmf4yn3gmdlkad68z8jynhsp"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggforce" ,r-ggforce)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggridges" ,r-ggridges)
-       ("r-ggstance" ,r-ggstance)
-       ("r-labelled" ,r-labelled)
-       ("r-magrittr" ,r-magrittr)
-       ("r-mosaiccore" ,r-mosaiccore)
-       ("r-rlang" ,r-rlang)
-       ("r-scales" ,r-scales)
-       ("r-stringr" ,r-stringr)
-       ("r-tibble" ,r-tibble)))
+     (list r-ggforce
+           r-ggplot2
+           r-ggridges
+           r-ggstance
+           r-labelled
+           r-magrittr
+           r-mosaiccore
+           r-rlang
+           r-scales
+           r-stringr
+           r-tibble))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/ProjectMOSAIC/ggformula/")
     (synopsis "Formula interface for the @code{r-ggplot2}")
     (description
@@ -10099,18 +10199,17 @@ used to teach mathematics, statistics, computation and modeling.")
 (define-public r-raster
   (package
     (name "r-raster")
-    (version "3.4-13")
+    (version "3.5-11")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "raster" version))
        (sha256
         (base32
-         "120k4bkgwddrx8ijgdhsgjz8g8dxcwp9bx3kfzrhw00q1b289hir"))))
+         "18v1vflq15915dwa3caf5sp1d1kp8w6plpaqk3z6a3164lwq5i76"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)
-       ("r-sp" ,r-sp)))
+     (list r-rcpp r-sp r-terra))
     (home-page "https://www.rspatial.org/")
     (synopsis "Geographic data analysis and modeling")
     (description
@@ -10122,34 +10221,37 @@ Processing of very large files is supported.")
 (define-public r-mosaic
   (package
    (name "r-mosaic")
-   (version "1.4.0")
+   (version "1.8.3")
    (source
     (origin
      (method url-fetch)
      (uri (cran-uri "mosaic" version))
      (sha256
-      (base32 "10jbrg8kli00kfgbh2f67bymm5cnlancc9dplb1j7fl552yjddn2"))))
+      (base32 "1y0isqbva0vi5zlx1xvixbq87n4xp66ljh43qnd0cpzaz0mn21cg"))))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-broom" ,r-broom)
-      ("r-dplyr" ,r-dplyr)
-      ("r-ggdendro" ,r-ggdendro)
-      ("r-ggformula" ,r-ggformula)
-      ("r-ggplot2" ,r-ggplot2)
-      ("r-ggrepel" ,r-ggrepel)
-      ("r-glue" ,r-glue)
-      ("r-gridextra" ,r-gridextra)
-      ("r-lattice" ,r-lattice)
-      ("r-latticeextra" ,r-latticeextra)
-      ("r-lazyeval" ,r-lazyeval)
-      ("r-mass" ,r-mass)
-      ("r-matrix" ,r-matrix)
-      ("r-mosaiccore" ,r-mosaiccore)
-      ("r-mosaicdata" ,r-mosaicdata)
-      ("r-readr" ,r-readr)
-      ("r-tidyr" ,r-tidyr)))
+    (list r-broom
+          r-dplyr
+          r-ggdendro
+          r-ggformula
+          r-ggplot2
+          r-ggrepel
+          r-ggridges
+          r-ggstance
+          r-glue
+          r-gridextra
+          r-lattice
+          r-latticeextra
+          r-leaflet
+          r-mass
+          r-matrix
+          r-mosaiccore
+          r-mosaicdata
+          r-readr
+          r-rlang
+          r-tidyr))
    (native-inputs
-    `(("r-knitr" ,r-knitr)))
+    (list r-knitr))
    (home-page "https://github.com/ProjectMOSAIC/mosaic/")
    (synopsis "Mathematics, statistics, and computation teaching utilities")
    (description
@@ -10173,9 +10275,7 @@ professional lives, but which are usually taught in isolation, if at all.")
         (base32 "191gspqzdv573vaw624ri0f5cm6v4j524bjs74d4a1hn3kn6r9b7"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lattice" ,r-lattice)
-       ("r-mosaic" ,r-mosaic)
-       ("r-nlme" ,r-nlme)))
+     (list r-lattice r-mosaic r-nlme))
     (home-page "https://cran.r-project.org/web/packages/abd/")
     (synopsis "Analysis of biological data")
     (description
@@ -10196,7 +10296,7 @@ biological data by Michael Whitlock and Dolph Schluter.")
     (properties `((upstream-name . "svGUI")))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/SciViews/svGUI/")
     (synopsis "Functions for managing GUI clients in R")
     (description
@@ -10219,13 +10319,11 @@ calls to the particular toolkits in use in function of the context.")
     (properties `((upstream-name . "svDialogs")))
     (build-system r-build-system)
     (inputs
-     `(("yad" ,yad)
-       ("zenity" ,zenity)))
+     (list yad zenity))
     (propagated-inputs
-     `(("r-rstudioapi" ,r-rstudioapi)
-       ("r-svgui" ,r-svgui)))
+     (list r-rstudioapi r-svgui))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/SciViews/svDialogs/")
     (synopsis "Portable dialog boxes")
     (description
@@ -10289,8 +10387,7 @@ mode are currently supported.")
     (properties `((upstream-name . "ABHgenotypeR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-reshape2" ,r-reshape2)))
+     (list r-ggplot2 r-reshape2))
     (home-page "https://github.com/StefanReuscher/ABHgenotypeR/")
     (synopsis "Visualize and manipulate ABH genotypes")
     (description
@@ -10315,13 +10412,13 @@ genotypes as \"graphical genotypes\".")
          "001p2yhznrpnrjvdcmf2h3wpgdnw01wnqgid7wbq8bhavhi3888a"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ellipsis" ,r-ellipsis)
-       ("r-future" ,r-future)
-       ("r-globals" ,r-globals)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-vctrs" ,r-vctrs)))
+     (list r-ellipsis
+           r-future
+           r-globals
+           r-lifecycle
+           r-purrr
+           r-rlang
+           r-vctrs))
     (home-page "https://github.com/DavisVaughan/furrr")
     (synopsis "Apply mapping functions in parallel using futures")
     (description
@@ -10343,14 +10440,14 @@ distributed on a compute cluster.")
         (base32 "18mmlkqsrjfclk8islfjdsp8sbw6dpjj5x45kqilxdiss69gg5zd"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-magrittr" ,r-magrittr)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-rstudioapi" ,r-rstudioapi)
-       ("r-stringi" ,r-stringi)
-       ("r-stringr" ,r-stringr)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-dplyr
+           r-magrittr
+           r-purrr
+           r-rlang
+           r-rstudioapi
+           r-stringi
+           r-stringr
+           r-tidyr))
     (home-page "https://github.com/abjur/abjutils/")
     (synopsis "Collection of tools for jurimetrical analysis")
     (description
@@ -10372,8 +10469,7 @@ removal.")
         (base32 "1fzfskl9akl06nliy8hkv2a0pznpj8pwcypg3gj5r2nzvr3kan9v"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mass" ,r-mass)
-       ("r-matrix" ,r-matrix)))
+     (list r-mass r-matrix))
     (home-page "https://cran.r-project.org/web/packages/abnormality/")
     (synopsis "Measure a subject's abnormality with respect to a reference population")
     (description
@@ -10398,7 +10494,7 @@ research.")
     (properties `((upstream-name . "abodOutlier")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cluster" ,r-cluster)))
+     (list r-cluster))
     (home-page "https://cran.r-project.org/web/packages/abodOutlier/")
     (synopsis "Angle-based outlier detection")
     (description
@@ -10426,7 +10522,7 @@ detection.")
         (base32 "0n3f66nmfi5v94il1mxy026mi84w01ph2aljk60vn3mrz8kwf2ll"))))
     (properties `((upstream-name . "ABPS")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-kernlab" ,r-kernlab)))
+    (propagated-inputs (list r-kernlab))
     (home-page "https://cran.r-project.org/web/packages/ABPS/")
     (synopsis "Abnormal blood profile score to detect blood doping")
     (description
@@ -10470,7 +10566,7 @@ for the reconstruction of gene regulatory networks.")
         (base32 "0vzf5wazs92bhqhqd66v3vwmbfmnh67gb2466g1xxawim649nk05"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mass" ,r-mass)))
+     (list r-mass))
     (home-page "https://github.com/atahk/pscl/")
     (synopsis "Political science computational laboratory")
     (description
@@ -10496,8 +10592,7 @@ data;
         (base32 "1nql9inx6azdzi3z4sfm2vdml2mms6krl8wzlf1dn1c97ahn57fy"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mice" ,r-mice)
-       ("r-pscl" ,r-pscl)))
+     (list r-mice r-pscl))
     (home-page "https://cran.r-project.org/web/packages/accelmissing/")
     (synopsis "Missing value imputation for accelerometer data")
     (description
@@ -10520,7 +10615,7 @@ and the non-wearing time, selecting valid days and subjects, and creating plots.
        (sha256
         (base32 "009dj0zkj1zry7jr9hf4cknb686z50a2l967if64xm0dvjmp7dgs"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-mvtnorm" ,r-mvtnorm)))
+    (propagated-inputs (list r-mvtnorm))
     (home-page "https://github.com/jaredo/mhsmm/")
     (synopsis "Inference for hidden Markov and semi-Markov models")
     (description
@@ -10543,7 +10638,7 @@ emission distributions.")
        (sha256
         (base32 "1v9znvncyigw9r25wx2ma0b7ib179b488dl0qsrhp5zrcz7mcjgm"))))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/nleqslv/")
     (synopsis "Solve systems of nonlinear equations")
     (description
@@ -10599,19 +10694,19 @@ on user-defined cut-points of accelerometer counts.
         (base32 "1ii2vm47djxbixa75h690q1s2f9m9x6i8nkygik93j6dayr6kr1m"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-circlize" ,r-circlize)
-       ("r-dbi" ,r-dbi)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-iterators" ,r-iterators)
-       ("r-mhsmm" ,r-mhsmm)
-       ("r-nleqslv" ,r-nleqslv)
-       ("r-physicalactivity" ,r-physicalactivity)
-       ("r-plyr" ,r-plyr)
-       ("r-r-utils" ,r-r-utils)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-rsqlite" ,r-rsqlite)
-       ("r-zoo" ,r-zoo)))
+     (list r-circlize
+           r-dbi
+           r-ggplot2
+           r-iterators
+           r-mhsmm
+           r-nleqslv
+           r-physicalactivity
+           r-plyr
+           r-r-utils
+           r-rcpp
+           r-rcpparmadillo
+           r-rsqlite
+           r-zoo))
     (home-page "https://cran.r-project.org/web/packages/acc/")
     (synopsis "Exploring accelerometer data")
     (description
@@ -10656,7 +10751,7 @@ conveniently wrapped into a data frame.")
         (base32
          "0c2x2n1p53lcw0vx4vmy5j7m2f95i7g2iwbryl89imr99rvz617j"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-dbi" ,r-dbi)))
+    (propagated-inputs (list r-dbi))
     (home-page "https://cran.r-project.org/web/packages/mitools/")
     (synopsis "Tools for multiple imputation of missing data")
     (description
@@ -10677,11 +10772,9 @@ multiple-imputation datasets.")
    (properties `((upstream-name . "mixsqp")))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-irlba" ,r-irlba)
-      ("r-rcpp" ,r-rcpp)
-      ("r-rcpparmadillo" ,r-rcpparmadillo)))
+    (list r-irlba r-rcpp r-rcpparmadillo))
    (native-inputs
-    `(("r-knitr" ,r-knitr)))
+    (list r-knitr))
    (home-page "https://github.com/stephenslab/mixsqp")
    (synopsis
     "Sequential quadratic programming for maximum-likelihood estimation")
@@ -10708,15 +10801,11 @@ samples is large and the number of mixture components is not too large.")
          "0h942bn7wfnzbbgq9hrs75c7igmg5r1c5sad2v0znhza4cp7p1w3"))))
     (build-system r-build-system)
     (inputs
-     `(("imagemagick" ,imagemagick)
-       ("zlib" ,zlib)))
+     (list imagemagick zlib))
     (propagated-inputs
-     `(("r-curl" ,r-curl)
-       ("r-magrittr" ,r-magrittr)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-curl r-magrittr r-rcpp))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("r-knitr" ,r-knitr)))
+     (list pkg-config r-knitr))
     (home-page "https://github.com/ropensci/magick")
     (synopsis "Advanced graphics and image-processing in R")
     (description
@@ -10742,12 +10831,12 @@ console, resulting in an interactive editing environment.")
          "0ljsszybzri531q6xab04r6zq11vchfs7y0snjzk57m3g0b9ms05"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lattice" ,r-lattice)
-       ("r-matrix" ,r-matrix)
-       ("r-minqa" ,r-minqa)
-       ("r-mitools" ,r-mitools)
-       ("r-numderiv" ,r-numderiv)
-       ("r-survival" ,r-survival)))
+     (list r-lattice
+           r-matrix
+           r-minqa
+           r-mitools
+           r-numderiv
+           r-survival))
     (home-page "http://r-survey.r-forge.r-project.org/survey/")
     (synopsis "Analysis of complex survey samples")
     (description
@@ -10777,7 +10866,7 @@ analysis.")
     (properties `((upstream-name . "gee")))
     (build-system r-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/gee/")
     (synopsis "Generalized estimation equation solver")
     (description
@@ -10798,13 +10887,9 @@ analysis.")
     (properties `((upstream-name . "tab")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-kableextra" ,r-kableextra)
-       ("r-knitr" ,r-knitr)
-       ("r-mass" ,r-mass)
-       ("r-survey" ,r-survey)))
+     (list r-dplyr r-kableextra r-knitr r-mass r-survey))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/tab/")
     (synopsis "Create summary tables for statistical reports")
     (description
@@ -10827,17 +10912,17 @@ handle data from simple random samples as well as complex surveys.")
         (base32 "01v6sixx0f3nrn6ymfifb3pvd2msfrwm21kmdv38laxq29vc4rsi"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cubature" ,r-cubature)
-       ("r-data-table" ,r-data-table)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-mass" ,r-mass)
-       ("r-mvtnorm" ,r-mvtnorm)
-       ("r-pracma" ,r-pracma)
-       ("r-rbenchmark" ,r-rbenchmark)
-       ("r-rcpp" ,r-rcpp)
-       ("r-survey" ,r-survey)
-       ("r-tab" ,r-tab)))
+     (list r-cubature
+           r-data-table
+           r-dplyr
+           r-ggplot2
+           r-mass
+           r-mvtnorm
+           r-pracma
+           r-rbenchmark
+           r-rcpp
+           r-survey
+           r-tab))
     (home-page "https://cran.r-project.org/web/packages/dvmisc/")
     (synopsis "Faster computation of common statistics and miscellaneous functions")
     (description
@@ -10861,8 +10946,7 @@ regression).")
         (base32 "13xzrwhr4i1nj9c8vrmfdg2rmrc8n446iihcyxmy99sm99hpzyip"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dvmisc" ,r-dvmisc)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-dvmisc r-rcpp))
     (home-page "https://cran.r-project.org/web/packages/accelerometry/")
     (synopsis "Functions for processing accelerometer data")
     (description
@@ -10886,8 +10970,7 @@ algorithms to be implemented.")
     (properties `((upstream-name . "AbSim")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ape" ,r-ape)
-       ("r-powerlaw" ,r-powerlaw)))
+     (list r-ape r-powerlaw))
     (home-page "https://cran.r-project.org/web/packages/AbSim/")
     (synopsis "Time resolved simulations of antibody repertoires")
     (description
@@ -10927,16 +11010,16 @@ estimation problem.")
 (define-public r-abundant
   (package
     (name "r-abundant")
-    (version "1.1")
+    (version "1.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "abundant" version))
        (sha256
-        (base32 "1m76qdmqvwpgm0sihazi2dna7cgsz9rljal18vgffb5wamwmg9k7"))))
+        (base32 "15m3ngj5aipjg961yy5kvdg9xlfcpliw30dq6gchzxabhnfzcipd"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-quic" ,r-quic)))
+     (list r-glasso))
     (home-page "https://cran.r-project.org/web/packages/abundant/")
     (synopsis "Abundant regression and high-dimensional principal fitted components")
     (description
@@ -10960,7 +11043,7 @@ and Rothman (2012) @url{doi:10.1214/11-AOS962}.")
     (properties `((upstream-name . "Ac3net")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)))
+     (list r-data-table))
     (home-page "https://cran.r-project.org/web/packages/Ac3net/")
     (synopsis "Inferring directional conservative causal core gene networks")
     (description "This package infers directional Conservative causal core
@@ -10991,13 +11074,13 @@ series.")
 (define-public r-acceptancesampling
   (package
     (name "r-acceptancesampling")
-    (version "1.0-6")
+    (version "1.0-7")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "AcceptanceSampling" version))
        (sha256
-        (base32 "1z3rmln63ki2kik9kinbwr9qhr32ggbmh4mm3xqy6di119n47ca9"))))
+        (base32 "13k3zczjycw24n5yp0qmrm233id5j8h6fvra57f1n6js7ljxiiq2"))))
     (properties
      `((upstream-name . "AcceptanceSampling")))
     (build-system r-build-system)
@@ -11077,7 +11160,7 @@ observation.")
          "12aa5083k3sfrfq1jy3l94wffss9h0rga8j71jy3n8pkhiq4nn7n"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-zoo" ,r-zoo)))
+     (list r-zoo))
     (home-page "https://cran.r-project.org/web/packages/sandwich/")
     (synopsis "Robust Covariance Matrix Estimators")
     (description
@@ -11089,19 +11172,20 @@ cross-sectional, time series, clustered, panel, and longitudinal data.")
 (define-public r-th-data
   (package
     (name "r-th-data")
-    (version "1.0-10")
+    (version "1.1-0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "TH.data" version))
        (sha256
         (base32
-         "0mgz7aj2d9abbmdr65zgmg1ddp3fdbs3mfj83r5xadh5ldkir2k1"))))
+         "0ghihfpk5d8gsdlzf6phw7dwwz3adx64pxk82vlmlqx53ljpxcr1"))))
     (properties `((upstream-name . "TH.data")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mass" ,r-mass)
-       ("r-survival" ,r-survival)))
+     (list r-mass r-survival))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/TH.data/")
     (synopsis "Shared data sets")
     (description
@@ -11112,21 +11196,17 @@ packages maintained by Torsten Hothorn.")
 (define-public r-multcomp
   (package
     (name "r-multcomp")
-    (version "1.4-17")
+    (version "1.4-18")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "multcomp" version))
        (sha256
         (base32
-         "02zv739mbmx672yrqqx8am229h7ps476wphig7jrrbfgay29sl21"))))
+         "01i8gjppyxl3xph1dw0kags8qbb7r06j91kk3lkqn5gzrxjmwyhh"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-codetools" ,r-codetools)
-       ("r-mvtnorm" ,r-mvtnorm)
-       ("r-sandwich" ,r-sandwich)
-       ("r-survival" ,r-survival)
-       ("r-th-data" ,r-th-data)))
+     (list r-codetools r-mvtnorm r-sandwich r-survival r-th-data))
     (home-page "https://cran.r-project.org/web/packages/multcomp/")
     (synopsis "Simultaneous inference in general parametric models")
     (description
@@ -11137,26 +11217,43 @@ analyzes presented in the book \"Multiple Comparisons Using R\" (Bretz,
 Hothorn, Westfall, 2010, CRC Press).")
     (license license:gpl2)))
 
+(define-public r-multcompview
+  (package
+    (name "r-multcompview")
+    (version "0.1-8")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "multcompView" version))
+       (sha256
+        (base32 "1rfq9wvvrghq0542ff40wy8vdmsyd8spzz6ihcywcvxdfa8m6g8j"))))
+    (properties `((upstream-name . "multcompView")))
+    (build-system r-build-system)
+    (home-page "https://cran.r-project.org/package=multcompView")
+    (synopsis "Visualizations of paired comparisons")
+    (description
+     "Convert a logical vector or a vector of p-values or a correlation,
+difference, or distance matrix into a display identifying the pairs for which
+the differences were not significantly different.")
+    ;; Any version of the GPL.
+    (license license:gpl3+)))
+
 (define-public r-emmeans
   (package
     (name "r-emmeans")
-    (version "1.6.3")
+    (version "1.7.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "emmeans" version))
        (sha256
         (base32
-         "1mwcq3hvpx04qnn5k0bv1mikjgm9mk6m83i8hj350s1c1a0mi40n"))))
+         "1g112yvqvxi83x128hwz4qpifwihlm0y5szg82cdsx3c9cm1rrfk"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-estimability" ,r-estimability)
-       ("r-mvtnorm" ,r-mvtnorm)
-       ("r-numderiv" ,r-numderiv)
-       ("r-plyr" ,r-plyr)
-       ("r-xtable" ,r-xtable)))
+     (list r-estimability r-mvtnorm r-numderiv r-xtable))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/rvlenth/emmeans")
     (synopsis "Estimated marginal means, aka least-squares means")
     (description
@@ -11180,7 +11277,7 @@ comparisons of slopes.")
          "1kfzy73v3z6ipc3kdfkcjrp4b4p5k54nwk796gqi36srm93hgc2v"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/heliosdrm/pwr")
     (synopsis "Basic functions for power analysis")
     (description
@@ -11191,15 +11288,15 @@ Cohen (1988).")
 (define-public r-libcoin
   (package
     (name "r-libcoin")
-    (version "1.0-8")
+    (version "1.0-9")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "libcoin" version))
        (sha256
-        (base32 "0izgnr4zdrbz3a05b0s28xfly4izp2zslgh282l9ads4skrmj3hl"))))
+        (base32 "1syrcdj5qg5m3zd3dlxgpfklswbalfg42w058dr09hnzqsvx0z9d"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-mvtnorm" ,r-mvtnorm)))
+    (propagated-inputs (list r-mvtnorm))
     (home-page "https://cran.r-project.org/web/packages/libcoin")
     (synopsis "Linear test statistics for permutation inference")
     (description
@@ -11210,22 +11307,22 @@ and permutation inference in the framework of Strasser and Weber (1999).")
 (define-public r-coin
   (package
     (name "r-coin")
-    (version "1.4-1")
+    (version "1.4-2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "coin" version))
        (sha256
         (base32
-         "15xvhnbyg34aacn6jfz4bsa1f7wq2ci0hslj8mgymql90k50x1qi"))))
+         "1cpv7jx840inzg98bkhrb5yscx0gpag6br237r5qpnc2gbrd2ikm"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-libcoin" ,r-libcoin)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-modeltools" ,r-modeltools)
-       ("r-multcomp" ,r-multcomp)
-       ("r-mvtnorm" ,r-mvtnorm)
-       ("r-survival" ,r-survival)))
+     (list r-libcoin
+           r-matrixstats
+           r-modeltools
+           r-multcomp
+           r-mvtnorm
+           r-survival))
     (home-page "http://coin.r-forge.r-project.org")
     (synopsis "Conditional inference procedures in a permutation test framework")
     (description
@@ -11247,19 +11344,18 @@ correlation, censored, ordered and multivariate problems.")
          "0aman4273i8hy3z0qay1nrsr7v27m4icm1j6f4w59ylix80l5myq"))))
     (build-system r-build-system)
     (inputs
-     `(("pandoc" ,pandoc)
-       ("pandoc-citeproc" ,pandoc-citeproc)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
-    (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggridges" ,r-ggridges)
-       ("r-glue" ,r-glue)
-       ("r-reshape2" ,r-reshape2)
-       ("r-rlang" ,r-rlang)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyselect" ,r-tidyselect)))
+     (list pandoc))
+    (native-inputs
+     (list r-knitr))
+    (propagated-inputs
+     (list r-dplyr
+           r-ggplot2
+           r-ggridges
+           r-glue
+           r-reshape2
+           r-rlang
+           r-tibble
+           r-tidyselect))
     (home-page "https://mc-stan.org/bayesplot")
     (synopsis "Plotting for Bayesian models")
     (description
@@ -11273,19 +11369,18 @@ Bayesian modeling.")
 (define-public r-tmb
   (package
     (name "r-tmb")
-    (version "1.7.21")
+    (version "1.7.22")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "TMB" version))
        (sha256
         (base32
-         "1lf9vf28l48xhw2irxfxl4vsqzj7skzblydw32p18zddzpapl0z9"))))
+         "116k7ffgadhkqq4lckfd4403qvybcls1hcs1ap1b7lkylghjahf2"))))
     (properties `((upstream-name . "TMB")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-matrix" ,r-matrix)
-       ("r-rcppeigen" ,r-rcppeigen)))
+     (list r-matrix r-rcppeigen))
     (home-page "http://tmb-project.org")
     (synopsis "Template model builder: a general random effect tool")
     (description
@@ -11310,23 +11405,23 @@ detection, parallelism through BLAS and parallel user templates.")
         (base32 "1cv80yjnyh6qihxf57zivihhia20gibr5f03x8aspy6382wnwlka"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bayestestr" ,r-bayestestr)
-       ("r-broom" ,r-broom)
-       ("r-dplyr" ,r-dplyr)
-       ("r-effectsize" ,r-effectsize)
-       ("r-emmeans" ,r-emmeans)
-       ("r-insight" ,r-insight)
-       ("r-lme4" ,r-lme4)
-       ("r-magrittr" ,r-magrittr)
-       ("r-mass" ,r-mass)
-       ("r-modelr" ,r-modelr)
-       ("r-parameters" ,r-parameters)
-       ("r-performance" ,r-performance)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-sjlabelled" ,r-sjlabelled)
-       ("r-sjmisc" ,r-sjmisc)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-bayestestr
+           r-broom
+           r-dplyr
+           r-effectsize
+           r-emmeans
+           r-insight
+           r-lme4
+           r-magrittr
+           r-mass
+           r-modelr
+           r-parameters
+           r-performance
+           r-purrr
+           r-rlang
+           r-sjlabelled
+           r-sjmisc
+           r-tidyr))
     (home-page "https://github.com/strengejacke/sjstats")
     (synopsis "Functions for common statistical computations")
     (description
@@ -11355,14 +11450,14 @@ models.")
     (properties `((upstream-name . "glmmTMB")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lme4" ,r-lme4)
-       ("r-matrix" ,r-matrix)
-       ("r-nlme" ,r-nlme)
-       ("r-numderiv" ,r-numderiv)
-       ("r-rcppeigen" ,r-rcppeigen)
-       ("r-tmb" ,r-tmb)))
+     (list r-lme4
+           r-matrix
+           r-nlme
+           r-numderiv
+           r-rcppeigen
+           r-tmb))
     (native-inputs
-     `(("r-knitr" ,r-knitr))) ; for vignettes
+     (list r-knitr)) ; for vignettes
     (home-page "https://github.com/glmmTMB")
     (synopsis "Generalized linear mixed models")
     (description
@@ -11377,21 +11472,20 @@ differentiation.")
 (define-public r-bayestestr
   (package
     (name "r-bayestestr")
-    (version "0.11.0")
+    (version "0.11.5")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "bayestestR" version))
        (sha256
         (base32
-         "0bwfw1lh4yp8y77sfmxzqqqy5aw59q1lqhfcssa46ph6d4hyxwic"))))
+         "0lz8mzacxgmll576p88654mrvlk4pzvhwwghvn5pm7zxisgx0kq0"))))
     (properties `((upstream-name . "bayestestR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-datawizard" ,r-datawizard)
-       ("r-insight" ,r-insight)))
+     (list r-datawizard r-insight))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/easystats/bayestestR")
     (synopsis "Describe Bayesian models and posterior distributions")
     (description
@@ -11405,19 +11499,17 @@ ROPE percentage and pd).")
 (define-public r-performance
   (package
     (name "r-performance")
-    (version "0.7.3")
+    (version "0.8.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "performance" version))
        (sha256
         (base32
-         "03qdsdl4x3hwqlbs7hlqb73xypd13p5zj519y0zcydqkf25391sp"))))
+         "1xjjnhqmwfflm5yfgjhycjn0fj0manvsvkk2ppifn0373bajp5n2"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bayestestr" ,r-bayestestr)
-       ("r-datawizard" ,r-datawizard)
-       ("r-insight" ,r-insight)))
+     (list r-bayestestr r-datawizard r-insight))
     (home-page "https://easystats.github.io/performance/")
     (synopsis "Assessment of regression models performance")
     (description
@@ -11443,11 +11535,9 @@ effects models and Bayesian models.")
          "0xrb105kblkj3l9zlj9yy52rjlmx5x2aai1wwb5zvjr1f6nlc84l"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-insight" ,r-insight)
-       ("r-mass" ,r-mass)
-       ("r-sjlabelled" ,r-sjlabelled)))
+     (list r-insight r-mass r-sjlabelled))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/strengejacke/ggeffects")
     (synopsis "Create tidy data frames of marginal effects for ggplot")
     (description
@@ -11463,22 +11553,21 @@ results using @code{ggplot2}.")
 (define-public r-effectsize
   (package
     (name "r-effectsize")
-    (version "0.4.5")
+    (version "0.6.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "effectsize" version))
        (sha256
         (base32
-         "0rp0r75p8q467lmrsr1gl9wjpib9jz7ksx5rm6c7q2lfg9b9zrjf"))))
+         "0xhibc868sngkc8v9g385vlhqdqxzy6b4mj1jihjy6wvk9jw266s"))))
     (properties `((upstream-name . "effectsize")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bayestestr" ,r-bayestestr)
-       ("r-insight" ,r-insight)
-       ("r-parameters" ,r-parameters)))
+     (list r-bayestestr r-datawizard r-insight r-parameters
+           r-performance))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/easystats/effectsize")
     (synopsis "Indices of effect size and standardized parameters")
     (description
@@ -11490,36 +11579,36 @@ conversion of indices such as Cohen's d, r, odds, etc.")
 (define-public r-sjplot
   (package
     (name "r-sjplot")
-    (version "2.8.9")
+    (version "2.8.10")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "sjPlot" version))
        (sha256
-        (base32 "07b9p5wbb6xmyapg9j6i4cdcj7j9wj9gi30gljj6j2lj1flgdd7q"))))
+        (base32 "1rnwhh271xj8xgvvlpqw9ain56mfz37fvl7f6jq9nzx9jxx95bjd"))))
     (properties `((upstream-name . "sjPlot")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bayestestr" ,r-bayestestr)
-       ("r-datawizard" ,r-datawizard)
-       ("r-dplyr" ,r-dplyr)
-       ("r-effectsize" ,r-effectsize)
-       ("r-ggeffects" ,r-ggeffects)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-insight" ,r-insight)
-       ("r-knitr" ,r-knitr)
-       ("r-mass" ,r-mass)
-       ("r-parameters" ,r-parameters)
-       ("r-performance" ,r-performance)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-scales" ,r-scales)
-       ("r-sjlabelled" ,r-sjlabelled)
-       ("r-sjmisc" ,r-sjmisc)
-       ("r-sjstats" ,r-sjstats)
-       ("r-tidyr" ,r-tidyr)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-bayestestr
+           r-datawizard
+           r-dplyr
+           r-effectsize
+           r-ggeffects
+           r-ggplot2
+           r-insight
+           r-knitr
+           r-mass
+           r-parameters
+           r-performance
+           r-purrr
+           r-rlang
+           r-scales
+           r-sjlabelled
+           r-sjmisc
+           r-sjstats
+           r-tidyr))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://strengejacke.github.io/sjPlot/")
     (synopsis "Data visualization for statistics in social science")
     (description
@@ -11567,8 +11656,8 @@ back to file after modifications.")
          "1snzn7nxy0rwz0bzjsg6k04c0n811dgn8gn9cmn2v78aj57ayjmi"))))
     (properties `((upstream-name . "gitcreds")))
     (build-system r-build-system)
-    (inputs `(("git" ,git-minimal)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+    (inputs (list git-minimal))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/r-lib/gitcreds")
     (synopsis "Query git credentials from R")
     (description
@@ -11591,13 +11680,9 @@ repositories.")
          "077drbxz3rx7idv6w24ipj1p6jnzv86a3iyryab699cc9q2kjh54"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cli" ,r-cli)
-       ("r-gitcreds" ,r-gitcreds)
-       ("r-httr" ,r-httr)
-       ("r-ini" ,r-ini)
-       ("r-jsonlite" ,r-jsonlite)))
+     (list r-cli r-gitcreds r-httr r-ini r-jsonlite))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/r-lib/gh#readme")
     (synopsis "Access the GitHub API via R")
     (description
@@ -11607,17 +11692,17 @@ repositories.")
 (define-public r-fs
   (package
     (name "r-fs")
-    (version "1.5.0")
+    (version "1.5.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "fs" version))
        (sha256
         (base32
-         "15rqc3ljmcmgfvadj1j1kq7kvibagxic8sgplhlcdqqxax9idprn"))))
+         "11qr3v0xn65vfhgcxl4l6yv48s4w0w3ldp3anpzc25vd3mwd3jim"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://fs.r-lib.org")
     (synopsis "Cross-platform file system operations based on libuv")
     (description
@@ -11648,14 +11733,14 @@ terminals that do not support Unicode.")
 (define-public r-credentials
   (package
     (name "r-credentials")
-    (version "1.3.1")
+    (version "1.3.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "credentials" version))
        (sha256
         (base32
-         "0q3s1bibwvw1p541k8a5cjx4dj1iabl4crg61fgjxkniclxag5c7"))))
+         "1f18j3zrq8c9kah57xwahmmljsjg5qphlgamvx507ynvpq8pryig"))))
     (properties `((upstream-name . "credentials")))
     (build-system r-build-system)
     (arguments
@@ -11664,18 +11749,13 @@ terminals that do not support Unicode.")
          (add-after 'unpack 'setenv-HOME
            (lambda _
              ;; This is necessary because git looks for $HOME/.gitconfig
-             (setenv "HOME" "/tmp")
-             #t)))))
+             (setenv "HOME" "/tmp"))))))
     (inputs
-     `(("git" ,git-minimal)))
+     (list git-minimal))
     (propagated-inputs
-     `(("r-askpass" ,r-askpass)
-       ("r-curl" ,r-curl)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-openssl" ,r-openssl)
-       ("r-sys" ,r-sys)))
+     (list r-askpass r-curl r-jsonlite r-openssl r-sys))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://docs.ropensci.org/credentials/")
     (synopsis "Tools for managing SSH and Git credentials")
     (description
@@ -11692,29 +11772,27 @@ user credentials.")
 (define-public r-gert
   (package
     (name "r-gert")
-    (version "1.4.1")
+    (version "1.5.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "gert" version))
        (sha256
         (base32
-         "1y3318whcifdng87wyngfjq18601zrlj4d8sx40v2c2m5kqmhfv2"))))
+         "1bm2fjyh527y6x0dr5cs8h31jgl1fkk09ljzj1h37d0c7f4k1hwz"))))
     (properties `((upstream-name . "gert")))
     (build-system r-build-system)
     (inputs
-     `(("libgit2" ,libgit2)
-       ("zlib" ,zlib)))
+     (list libgit2 zlib))
     (propagated-inputs
-     `(("r-askpass" ,r-askpass)
-       ("r-credentials" ,r-credentials)
-       ("r-openssl" ,r-openssl)
-       ("r-rstudioapi" ,r-rstudioapi)
-       ("r-sys" ,r-sys)
-       ("r-zip" ,r-zip)))
+     (list r-askpass
+           r-credentials
+           r-openssl
+           r-rstudioapi
+           r-sys
+           r-zip))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("r-knitr" ,r-knitr)))
+     (list pkg-config r-knitr))
     (home-page "https://docs.ropensci.org/gert/")
     (synopsis "Simple Git client for R")
     (description
@@ -11728,35 +11806,35 @@ User credentials are shared with command line git through the
 (define-public r-usethis
   (package
     (name "r-usethis")
-    (version "2.0.1")
+    (version "2.1.5")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "usethis" version))
        (sha256
         (base32
-         "1j6nzzrm2m6vi1gq0d5kxnnr9d8cy88wpmgigz3inych65x9w9pg"))))
-    (build-system r-build-system)
-    (propagated-inputs
-     `(("r-cli" ,r-cli)
-       ("r-clipr" ,r-clipr)
-       ("r-crayon" ,r-crayon)
-       ("r-curl" ,r-curl)
-       ("r-desc" ,r-desc)
-       ("r-fs" ,r-fs)
-       ("r-gert" ,r-gert)
-       ("r-gh" ,r-gh)
-       ("r-glue" ,r-glue)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-purrr" ,r-purrr)
-       ("r-rappdirs" ,r-rappdirs)
-       ("r-rlang" ,r-rlang)
-       ("r-rprojroot" ,r-rprojroot)
-       ("r-rstudioapi" ,r-rstudioapi)
-       ("r-whisker" ,r-whisker)
-       ("r-withr" ,r-withr)
-       ("r-yaml" ,r-yaml)))
+         "0lph2rxv7nq3h022gp8d50wbq5lwicnx85d2l5dx876wxhb9wlvx"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-cli
+           r-clipr
+           r-crayon
+           r-curl
+           r-desc
+           r-fs
+           r-gert
+           r-gh
+           r-glue
+           r-jsonlite
+           r-lifecycle
+           r-purrr
+           r-rappdirs
+           r-rlang
+           r-rprojroot
+           r-rstudioapi
+           r-whisker
+           r-withr
+           r-yaml))
     (home-page "https://github.com/r-lib/usethis")
     (synopsis "Automate R package and project setup")
     (description
@@ -11769,18 +11847,17 @@ Rcpp, RStudio projects, and more.")
 (define-public r-sessioninfo
   (package
     (name "r-sessioninfo")
-    (version "1.1.1")
+    (version "1.2.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "sessioninfo" version))
        (sha256
         (base32
-         "0j5f3l58fynxx3v0w62vqpii7miabszgljpja36xx9s8hikh8sqn"))))
+         "1jy7n37qnrb4fgzmn8s8yf7kv29yw27x8zklwf8qdb2kgj2q6qpm"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cli" ,r-cli)
-       ("r-withr" ,r-withr)))
+     (list r-cli))
     (home-page "https://github.com/r-lib/sessioninfo#readme")
     (synopsis "R session information")
     (description
@@ -11792,17 +11869,17 @@ more information about packages, and where they were installed from.")
 (define-public r-remotes
   (package
     (name "r-remotes")
-    (version "2.4.0")
+    (version "2.4.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "remotes" version))
        (sha256
         (base32
-         "048lihmwksl72fg4fdmhihblj9ipxl22x9wfpgwsbsv79zjc7rfd"))))
+         "05m5dgv0nba5vhjbdkd8z5lbhpfxgkw31j58am7vz1d44igqgvzj"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/r-lib/remotes#readme")
     (synopsis "R package installation from remote repositories")
     (description
@@ -11825,7 +11902,7 @@ the code was copied over from @code{devtools}.")
          "1vrvgdika1d63dwygynbv2wmd87ll8dji5dy89hj576n8hw601z2"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-processx" ,r-processx)))
+     (list r-processx))
     (home-page "https://github.com/r-lib/xopen#readme")
     (synopsis "Open system files, URLs, anything")
     (description
@@ -11836,28 +11913,28 @@ directories or URLs with their associated programs.")
 (define-public r-rcmdcheck
   (package
     (name "r-rcmdcheck")
-    (version "1.3.3")
+    (version "1.4.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "rcmdcheck" version))
        (sha256
         (base32
-         "1d4kzgfqy72r6b7bn1j4znyksrycgypx1jjvpv9lrmvn37mpkdhs"))))
+         "1l696byn3kjq2xvz4wxybzaj6ink85h4lz3a35v2132ba5yyzm5v"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-callr" ,r-callr)
-       ("r-cli" ,r-cli)
-       ("r-crayon" ,r-crayon)
-       ("r-desc" ,r-desc)
-       ("r-digest" ,r-digest)
-       ("r-pkgbuild" ,r-pkgbuild)
-       ("r-prettyunits" ,r-prettyunits)
-       ("r-r6" ,r-r6)
-       ("r-rprojroot" ,r-rprojroot)
-       ("r-sessioninfo" ,r-sessioninfo)
-       ("r-withr" ,r-withr)
-       ("r-xopen" ,r-xopen)))
+     (list r-callr
+           r-cli
+           r-curl
+           r-desc
+           r-digest
+           r-pkgbuild
+           r-prettyunits
+           r-r6
+           r-rprojroot
+           r-sessioninfo
+           r-withr
+           r-xopen))
     (home-page "https://github.com/r-Lib/rcmdcheck#readme")
     (synopsis "Run R CMD check from R and capture results")
     (description
@@ -11878,9 +11955,7 @@ of the individual checks.")
          "1sgv4sc737i12arh5dc3263kjsz3dzg06qihfmrqyax94mv2d01b"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-pander" ,r-pander)
-       ("r-plyr" ,r-plyr)
-       ("r-reshape" ,r-reshape)))
+     (list r-pander r-plyr r-reshape))
     (home-page "https://cran.r-project.org/web/packages/rapportools/")
     (synopsis "Miscellaneous helper functions with sane defaults for reporting")
     (description
@@ -11902,10 +11977,9 @@ quick reporting.")
          "1knjcr50xxns3w3kh15myjpsizn4d7fdqx071a4yj90imif07qjh"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-digest" ,r-digest)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-digest r-rcpp))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://rapporter.github.io/pander")
     (synopsis "Render R objects into Pandoc's markdown")
     (description
@@ -11930,20 +12004,20 @@ ways.")
          "04qcysfywljnqkcz2b7kzpy0xv3ykkvvb14vnda63z1wvmadyhkn"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-base64enc" ,r-base64enc)
-       ("r-checkmate" ,r-checkmate)
-       ("r-dplyr" ,r-dplyr)
-       ("r-htmltools" ,r-htmltools)
-       ("r-lubridate" ,r-lubridate)
-       ("r-magick" ,r-magick)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-pander" ,r-pander)
-       ("r-pryr" ,r-pryr)
-       ("r-rapportools" ,r-rapportools)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-base64enc
+           r-checkmate
+           r-dplyr
+           r-htmltools
+           r-lubridate
+           r-magick
+           r-matrixstats
+           r-pander
+           r-pryr
+           r-rapportools
+           r-tibble
+           r-tidyr))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/dcomtois/summarytools")
     (synopsis "Tools to quickly and neatly summarize data")
     (description
@@ -11967,7 +12041,7 @@ users.")
          "1dka0rigfw4vj809qma2dkiwjb3nw5635ynnba5cm299cn7hb2b2"))))
     (build-system r-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://www.stat.auckland.ac.nz/~yongwang")
     (synopsis "Solve regression problems under equality/inequality constraints")
     (description
@@ -11990,7 +12064,7 @@ problems into least squares ones first.")
          "1ihxhb42cga1hssj2jv4ah0f4hlwsky899ij5261fzh1wxvdp1xw"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lsei" ,r-lsei)))
+     (list r-lsei))
     (home-page "https://www.stat.auckland.ac.nz/~yongwang")
     (synopsis "Nonparametric survival analysis")
     (description
@@ -12011,8 +12085,7 @@ exact and interval-censored observations.")
          "1ld0bdl4fy8dsfzm3k7a37cyxc6pfc9qs31x4pxd3z5rslghz7rj"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mvtnorm" ,r-mvtnorm)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-mvtnorm r-rcpp))
     (home-page "https://cran.r-project.org/web/packages/clusteval/")
     (synopsis "Evaluation of clustering algorithms")
     (description
@@ -12032,7 +12105,7 @@ algorithms, clusterings, and individual clusters.")
         (base32
          "1nfhaqblvm62j8gfkyrgba5ai0pb2fsnrxp63637mhys2bawlcm0"))))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/tweedie/")
     (synopsis "Evaluation of Tweedie exponential family models")
     (description
@@ -12045,18 +12118,17 @@ and related methods.")
 (define-public r-rcppgsl
   (package
     (name "r-rcppgsl")
-    (version "0.3.9")
+    (version "0.3.10")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "RcppGSL" version))
        (sha256
-        (base32 "0zhfkn3w5q2k2ggizrikz9an8hm90g6mr60paq0z8xgp5hpkrlk6"))))
+        (base32 "0lalz51q31qqy0cr227vc3msi0h47p111lzy4zs93drgl1yhh4l6"))))
     (properties `((upstream-name . "RcppGSL")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)
-       ("gsl" ,gsl)))
+     (list r-rcpp gsl))
     (home-page "https://cran.r-project.org/web/packages/RcppGSL/")
     (synopsis "Rcpp integration for GSL vectors and matrices")
     (description
@@ -12082,11 +12154,7 @@ the interfaces between R and C++.")
          "107pwv2bwird1a98chcnbld2wqj9prkf4pkncyrrp304zpdkkby1"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mass" ,r-mass)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcppgsl" ,r-rcppgsl)
-       ("r-statmod" ,r-statmod)
-       ("r-tweedie" ,r-tweedie)))
+     (list r-mass r-rcpp r-rcppgsl r-statmod r-tweedie))
     (home-page "https://cran.r-project.org/web/packages/mvabund/")
     (synopsis "Statistical methods for analysing multivariate abundance data")
     (description
@@ -12107,13 +12175,9 @@ analysing multivariate abundance data in community ecology.")
          "1k04n6gwk2n8kg0l3yk5j3wrqgkv5f6w04yjpif9y451hx5w7svg"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-car" ,r-car)
-       ("r-lme4" ,r-lme4)
-       ("r-lmertest" ,r-lmertest)
-       ("r-pbkrtest" ,r-pbkrtest)
-       ("r-reshape2" ,r-reshape2)))
+     (list r-car r-lme4 r-lmertest r-pbkrtest r-reshape2))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://afex.singmann.science/")
     (synopsis "Analysis of factorial experiments")
     (description
@@ -12135,10 +12199,7 @@ experiments using ANOVA or mixed models.")
     (properties `((upstream-name . "lmerTest")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-lme4" ,r-lme4)
-       ("r-mass" ,r-mass)
-       ("r-numderiv" ,r-numderiv)))
+     (list r-ggplot2 r-lme4 r-mass r-numderiv))
     (home-page "https://github.com/runehaubo/lmerTestR")
     (synopsis "Tests in linear mixed effects models")
     (description
@@ -12163,16 +12224,16 @@ tests of linear contrasts of fixed effects are also available.")
          "0iim92blpa59vgz97c2pi05yhbjjmaffdbkbmk5kplfb2vmazgiy"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-afex" ,r-afex)
-       ("r-data-table" ,r-data-table)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-lmertest" ,r-lmertest)
-       ("r-mass" ,r-mass)
-       ("r-matrix" ,r-matrix)
-       ("r-mgcv" ,r-mgcv)
-       ("r-pbkrtest" ,r-pbkrtest)))
+     (list r-afex
+           r-data-table
+           r-dplyr
+           r-ggplot2
+           r-gridextra
+           r-lmertest
+           r-mass
+           r-matrix
+           r-mgcv
+           r-pbkrtest))
     (home-page "https://github.com/bcjaeger/r2glmm")
     (synopsis "Compute R squared for mixed (multilevel) models")
     (description
@@ -12197,14 +12258,14 @@ al. (2016)).")
     (properties `((upstream-name . "cmdfun")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-magrittr" ,r-magrittr)
-       ("r-purrr" ,r-purrr)
-       ("r-r-utils" ,r-r-utils)
-       ("r-rlang" ,r-rlang)
-       ("r-testthat" ,r-testthat)
-       ("r-usethis" ,r-usethis)))
+     (list r-magrittr
+           r-purrr
+           r-r-utils
+           r-rlang
+           r-testthat
+           r-usethis))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://snystrom.github.io/cmdfun/")
     (synopsis "Framework for building interfaces to shell commands")
     (description
@@ -12220,18 +12281,18 @@ inside R when they might usually leave to execute non-R software.")
 (define-public r-rslurm
   (package
     (name "r-rslurm")
-    (version "0.6.0")
+    (version "0.6.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "rslurm" version))
        (sha256
         (base32
-         "0fn2na8prsaxa03x5wi3105gpsxc35qvgmik7wy3nylvx4wdfv9g"))))
+         "19451icfh7snjbbmpzpr1hrdf52q8ijv0ag1di3y55r2la3jxxcf"))))
     (properties `((upstream-name . "rslurm")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-whisker" ,r-whisker)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+    (propagated-inputs (list r-whisker))
+    (native-inputs (list r-knitr))
     (home-page "http://cyberhelp.sesync.org/rslurm/")
     (synopsis "Submit R calculations to a Slurm cluster")
     (description
@@ -12254,9 +12315,8 @@ parallel calculations across cluster nodes.")
     (properties `((upstream-name . "chk")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lifecycle" ,r-lifecycle)
-       ("r-rlang" ,r-rlang)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-lifecycle r-rlang))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/poissonconsulting/chk")
     (synopsis "Check user-supplied function arguments")
     (description
@@ -12278,10 +12338,7 @@ messages follow the tidyverse style guide.")
          "1fnchf7f0hyl514bk8sc3l884kg25kb5xm4mc2l28n6hm7l6bgpg"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-gdata" ,r-gdata)
-       ("r-hmisc" ,r-hmisc)
-       ("r-lme4" ,r-lme4)
-       ("r-mice" ,r-mice)))
+     (list r-gdata r-hmisc r-lme4 r-mice))
     (home-page "https://cran.r-project.org/web/packages/weights/")
     (synopsis "Weighting and weighted statistics")
     (description "This package Provides a variety of functions for producing
@@ -12307,7 +12364,7 @@ address a bug.")
     (properties `((upstream-name . "RcppAnnoy")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)))
+     (list r-rcpp))
     (home-page "https://cran.r-project.org/web/packages/RcppAnnoy/")
     (synopsis "Rcpp bindings for Annoy, a library for Approximate Nearest Neighbors")
     (description
@@ -12331,7 +12388,7 @@ This package provides an R interface.")
          "01z0plf1i6dyibw4ica8shmijyk1grpqb886hcga72z2cpm4xsx0"))))
     (properties `((upstream-name . "RcppHNSW")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-rcpp" ,r-rcpp)))
+    (propagated-inputs (list r-rcpp))
     (home-page "https://cran.r-project.org/web/packages/RcppHNSW/")
     (synopsis "Rcpp bindings for hnswlib, a library for approximate nearest neighbors")
     (description
@@ -12343,14 +12400,14 @@ package provides a minimal R interface by relying on the Rcpp package.")
 (define-public r-rcppparallel
   (package
     (name "r-rcppparallel")
-    (version "5.1.4")
+    (version "5.1.5")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "RcppParallel" version))
        (sha256
         (base32
-         "10pa9vaz7p4m6hjca2cpy6vj7rvgly4zv0q1g2xfsmcchyk4bdbn"))))
+         "1sn211ajlb1p12sglxqns175rg078yvww268m8cp0vvd7cmk55k3"))))
     (properties `((upstream-name . "RcppParallel")))
     (build-system r-build-system)
     (home-page "https://rcppcore.github.io/RcppParallel/")
@@ -12366,18 +12423,17 @@ other values.")
 (define-public r-ncdf4
   (package
     (name "r-ncdf4")
-    (version "1.17")
+    (version "1.19")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "ncdf4" version))
        (sha256
         (base32
-         "1xls44ln2zjrrlimxl8v4bk2ni3g45c9j0gxdnjx31rikmrc95fv"))))
+         "0qzvin2fjzcb7h2knlnw14s6043pwi1nm7yf6p27ax7w269173fb"))))
     (build-system r-build-system)
     (inputs
-     `(("netcdf" ,netcdf)
-       ("zlib" ,zlib)))
+     (list netcdf zlib))
     (home-page "https://cran.r-project.org/web/packages/ncdf4/index.html")
     (synopsis "R interface to Unidata netCDF format data files")
     (description
@@ -12403,7 +12459,7 @@ netCDF files.")
     (properties `((upstream-name . "BiocManager")))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/BiocManager/")
     (synopsis "Access the Bioconductor project package repository")
     (description
@@ -12414,32 +12470,31 @@ Bioconductor packages.")
 (define-public r-rgl
   (package
     (name "r-rgl")
-    (version "0.107.14")
+    (version "0.108.3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "rgl" version))
        (sha256
         (base32
-         "1z5h4wbjj18prcykc96rqcn699pnqw6vybwj2mpbbbdw2lr3q8b7"))))
+         "0fqkx079z9y5b1gdg6qfz2wpw2j8q3ddflfkd9wwrkyacas6xyc9"))))
     (build-system r-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("r-knitr" ,r-knitr)))
+     (list pkg-config r-knitr))
     (inputs
-     `(("freetype" ,freetype)
-       ("libpng" ,libpng)
-       ("glu" ,glu)
-       ("libx11" ,libx11)
-       ("pandoc" ,pandoc)
-       ("zlib" ,zlib)))
-    (propagated-inputs
-     `(("r-crosstalk" ,r-crosstalk)
-       ("r-htmltools" ,r-htmltools)
-       ("r-htmlwidgets" ,r-htmlwidgets)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-knitr" ,r-knitr)
-       ("r-magrittr" ,r-magrittr)))
+     (list freetype
+           libpng
+           glu
+           libx11
+           pandoc
+           zlib))
+    (propagated-inputs
+     (list r-htmltools
+           r-htmlwidgets
+           r-jsonlite
+           r-knitr
+           r-magrittr
+           r-r6))
     (home-page "https://r-forge.r-project.org/projects/rgl/")
     (synopsis "3D visualization using OpenGL")
     (description
@@ -12464,7 +12519,7 @@ image formats, including PNG, Postscript, SVG, PGF.")
         (base32
          "0djacq0irfqz4nlnx238kja73yvr1n5qybbfyl6bw1n6qgcjhza8"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-rcpp" ,r-rcpp)))
+    (propagated-inputs (list r-rcpp))
     (home-page "https://cran.r-project.org/web/packages/multicool/")
     (synopsis "Permutations of multisets in cool-lex order")
     (description
@@ -12476,14 +12531,14 @@ to colexicographical order.")
 (define-public r-misc3d
   (package
     (name "r-misc3d")
-    (version "0.9-0")
+    (version "0.9-1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "misc3d" version))
        (sha256
         (base32
-         "10jf5r1x588vi54bzaqgi9mgcqlkiga2c3jvmqmk3lavc8fjksd1"))))
+         "0r9x57s63kx9f6dgam2nhbziq8nrs9wd8pk7g76hds2kw46vnyx0"))))
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/web/packages/misc3d/")
     (synopsis "Miscellaneous 3D Plots")
@@ -12496,25 +12551,25 @@ isosurfaces.")
 (define-public r-ks
   (package
     (name "r-ks")
-    (version "1.13.2")
+    (version "1.13.3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "ks" version))
        (sha256
-        (base32 "02gnpyjqdlj6dl2x9i7mmks4f5nrh85j3h0kfa0v1v6wi8blx7kw"))))
+        (base32 "0wyfdmhr753vpizns9kl7h7pfnnb16c7m7w9a4bpz62xcvgq1yyy"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-fnn" ,r-fnn)
-       ("r-kernlab" ,r-kernlab)
-       ("r-kernsmooth" ,r-kernsmooth)
-       ("r-matrix" ,r-matrix)
-       ("r-mclust" ,r-mclust)
-       ("r-mgcv" ,r-mgcv)
-       ("r-multicool" ,r-multicool)
-       ("r-mvtnorm" ,r-mvtnorm)
-       ("r-plot3d" ,r-plot3d)
-       ("r-pracma" ,r-pracma)))
+     (list r-fnn
+           r-kernlab
+           r-kernsmooth
+           r-matrix
+           r-mclust
+           r-mgcv
+           r-multicool
+           r-mvtnorm
+           r-plot3d
+           r-pracma))
     (home-page "https://www.mvstat.net/tduong/")
     (synopsis "Kernel smoothing")
     (description
@@ -12538,10 +12593,9 @@ hypothesis testing.")
          "0yzn1w1sasilcp8v0pcjnxjv9l6lspkskqi412i6h040gqmjjf6y"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ks" ,r-ks)
-       ("r-plot3d" ,r-plot3d)))
+     (list r-ks r-plot3d))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://www.mvstat.net/tduong/")
     (synopsis "Inferential feature significance for kernel density estimation")
     (description
@@ -12555,23 +12609,22 @@ features (e.g. local modes).")
 (define-public r-arm
   (package
     (name "r-arm")
-    (version "1.11-2")
+    (version "1.12-2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "arm" version))
        (sha256
         (base32
-         "1grb27vayr2vhyalzfqbhx6p278r7c3l4pzi5nrz3dmnyqrbx1c3"))))
+         "0pagrc1vkaz460d0lvrgb4xj6gcd920f4mrc8zpzw07c3v1s2sw1"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-abind" ,r-abind)
-       ("r-coda" ,r-coda)
-       ("r-hmisc" ,r-hmisc)
-       ("r-lme4" ,r-lme4)
-       ("r-mass" ,r-mass)
-       ("r-matrix" ,r-matrix)
-       ("r-nlme" ,r-nlme)))
+     (list r-abind
+           r-coda
+           r-lme4
+           r-mass
+           r-matrix
+           r-nlme))
     (home-page "https://cran.r-project.org/web/packages/arm/")
     (synopsis "Data analysis using regression and multilevel/hierarchical models")
     (description
@@ -12593,10 +12646,9 @@ University Press, 2007.")
          "0hki85rs8wc5950pjaw28q54rly2napfbcrx3pchlfap6wwy5kkn"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-boot" ,r-boot)
-       ("r-mvtnorm" ,r-mvtnorm)))
+     (list r-boot r-mvtnorm))
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/circular/")
     (synopsis "Circular statistics")
     (description
@@ -12618,9 +12670,7 @@ Scientific.")
          "1wn2a0hx7wfr2jyj1b772w5fgl6bcqkkw8cybais2s1wyjx8kjr5"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-circular" ,r-circular)
-       ("r-insol" ,r-insol)
-       ("r-pbapply" ,r-pbapply)))
+     (list r-circular r-insol r-pbapply))
     (home-page "https://cran.r-project.org/web/packages/activity/")
     (synopsis "Animal activity statistics")
     (description
@@ -12643,7 +12693,7 @@ circular variables).")
         (base32
          "1a7r24j59xz3lxa5wc694j6b80j8m5l86zd1sw9pvs66l8gd98kf"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-subplex" ,r-subplex)))
+    (propagated-inputs (list r-subplex))
     (home-page "https://kingaa.github.io/ouch/")
     (synopsis "Ornstein-Uhlenbeck models for phylogenetic comparative hypotheses")
     (description
@@ -12654,14 +12704,14 @@ for evolution along a phylogenetic tree.")
 (define-public r-fmsb
   (package
     (name "r-fmsb")
-    (version "0.7.1")
+    (version "0.7.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "fmsb" version))
        (sha256
         (base32
-         "09pq7p7i6vkq9av7l7x9hicl9sqh7xn96f9pac117hy6z852jvi2"))))
+         "1ylwj4385wg7rymx0m3kayyvrbil89wxb7phdl0fvi0xq2krkzhb"))))
     (build-system r-build-system)
     (home-page "http://minato.sip21c.org/msb/")
     (synopsis "Functions for medical statistics book with demographic data")
@@ -12695,17 +12745,17 @@ parametrizations of Nolan.")
 (define-public r-gsl
   (package
     (name "r-gsl")
-    (version "2.1-7")
+    (version "2.1-7.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "gsl" version))
        (sha256
         (base32
-         "05rvky8sh3jrlz0xbd6nss8h8ykfg1v10dymhlmcykl6v5csz1hs"))))
+         "118rj9kjx9rzlynvhrly19qz3yxg8jzws35971ssgzrp5lwd367f"))))
     (build-system r-build-system)
     (inputs
-     `(("gsl" ,gsl)))
+     (list gsl))
     (home-page "https://cran.r-project.org/web/packages/gsl")
     (synopsis "Wrapper for the GNU Scientific Library")
     (description
@@ -12735,24 +12785,48 @@ Anderson-Darling Distribution\".")
     ;; Any version of the GPL.
     (license license:gpl3+)))
 
+(define-public r-admisc
+  (package
+    (name "r-admisc")
+    (version "0.22")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "admisc" version))
+       (sha256
+        (base32 "1jwz9z3brq4lbnqrkxx40vrn47rknkkj4xfv2gi8kmf1mzc5aqcd"))))
+    (properties `((upstream-name . "admisc")))
+    (build-system r-build-system)
+    (home-page "https://github.com/dusadrian/admisc")
+    (synopsis "Adrian Dusa's miscellaneous")
+    (description
+     "This package contains miscellaneous functions used to interpret and
+translate, factorize and negate Sum of Products expressions, for both binary
+and multi-value crisp sets, and to extract information (set names, set values)
+from those expressions.  Other functions perform various other checks if
+possibly numeric (even if all numbers reside in a character vector) and coerce
+to numeric, or check if the numbers are whole.  It also offers, among many
+others, a highly flexible recoding routine and a more flexible alternative to
+the base function @code{with()}.")
+    (license license:gpl3+)))
+
 (define-public r-sodium
   (package
     (name "r-sodium")
-    (version "1.1")
+    (version "1.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "sodium" version))
        (sha256
         (base32
-         "1zxzi8xvxnhgcd5qrylf08nz1cdq3aslrswjas440qg63ypmbf6w"))))
+         "0x4jb3cf1nv1spz1jc9xp8hly2b4a7nj48xr4s33jnfcpdjkmn5q"))))
     (properties `((upstream-name . "sodium")))
     (build-system r-build-system)
     (inputs
-     `(("libsodium" ,libsodium)))
+     (list libsodium))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("r-knitr" ,r-knitr)))
+     (list pkg-config r-knitr))
     (home-page "https://github.com/jeroen/sodium")
     (synopsis "R bindings to the libsodium crypto library")
     (description
@@ -12776,10 +12850,9 @@ after it was discovered that the NSA had backdoored Dual EC DRBG.")
     (properties `((upstream-name . "softImpute")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-matrix" ,r-matrix)))
+     (list r-matrix))
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("r-knitr" ,r-knitr)))
+     (list gfortran r-knitr))
     (home-page "https://cran.r-project.org/web/packages/softImpute")
     (synopsis "Matrix completion via iterative soft-thresholded SVD")
     (description
@@ -12802,9 +12875,9 @@ components).")
         (base32
          "0zrchp4l0jdbir2gibjf00x225y9giqk80zvqmr2yyvc12lwkw7i"))))
     (build-system r-build-system)
-    (inputs `(("fftw" ,fftw)))
+    (inputs (list fftw))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/krahim/fftwtools")
     (synopsis "Wrapper for FFTW3")
     (description
@@ -12820,21 +12893,19 @@ redundant complex conjugate when the input is real data.")
 (define-public r-tiff
   (package
     (name "r-tiff")
-    (version "0.1-8")
+    (version "0.1-10")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "tiff" version))
        (sha256
         (base32
-         "18m17g5q3nz4v4wrqxnb129b1j02873g2vknddczkklf1pvq4x2b"))))
+         "1zha6bzb1rmfl6n2xjkygs9wfi3ah9cjr7a6jzk4zqc5kvl58lak"))))
     (build-system r-build-system)
     (inputs
-     `(("libtiff" ,libtiff)
-       ("libjpeg" ,libjpeg-turbo)
-       ("zlib" ,zlib)))
+     (list libtiff libjpeg-turbo zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.rforge.net/tiff/")
     (synopsis "Read and write TIFF images")
     (description
@@ -12878,11 +12949,7 @@ Processing.")
     (properties `((upstream-name . "tm")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bh" ,r-bh)
-       ("r-nlp" ,r-nlp)
-       ("r-rcpp" ,r-rcpp)
-       ("r-slam" ,r-slam)
-       ("r-xml2" ,r-xml2)))
+     (list r-bh r-nlp r-rcpp r-slam r-xml2))
     (home-page "http://tm.r-forge.r-project.org/")
     (synopsis "Text mining package")
     (description
@@ -12902,7 +12969,7 @@ Processing.")
          "0ibivnhz0l06sss5rrrcvyiwg3qpbyk3qn4vx4pp90kj09x4yg0k"))))
     (build-system r-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "http://waveslim.blogspot.com")
     (synopsis "Basic wavelet routines for signal processing")
     (description
@@ -12927,11 +12994,10 @@ pairs (Selesnick 2001, 2002).")
          "0j96yyvm6bcrrpbdx4w26piqx44a0vbsr3px9cb4zk8a8da6jwak"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rcpp" ,r-rcpp)
-       ;; The "tm" package is only "suggested" according to CRAN, but the
-       ;; wordcloud package cannot be loaded without it.
-       ("r-tm" ,r-tm)))
+     (list r-rcolorbrewer r-rcpp
+           ;; The "tm" package is only "suggested" according to CRAN, but the
+           ;; wordcloud package cannot be loaded without it.
+           r-tm))
     (home-page "https://cran.r-project.org/web/packages/wordcloud")
     (synopsis "Word clouds")
     (description
@@ -12963,25 +13029,26 @@ maps.")
 (define-public r-tidytree
   (package
     (name "r-tidytree")
-    (version "0.3.5")
+    (version "0.3.7")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "tidytree" version))
        (sha256
-        (base32 "0zk46n3nh577k2jy34isdw845hk0blkvqk7rg5nmix5b65qsp762"))))
+        (base32 "1wp411lf3syf0g1czhx3ksb4mx5d6vaw6ppipv0s0k69ivag45kq"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ape" ,r-ape)
-       ("r-dplyr" ,r-dplyr)
-       ("r-lazyeval" ,r-lazyeval)
-       ("r-magrittr" ,r-magrittr)
-       ("r-rlang" ,r-rlang)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)
-       ("r-tidyselect" ,r-tidyselect)))
+     (list r-ape
+           r-dplyr
+           r-lazyeval
+           r-magrittr
+           r-rlang
+           r-tibble
+           r-tidyr
+           r-tidyselect
+           r-yulab-utils))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/GuangchuangYu/tidytree")
     (synopsis "Tidy tool for phylogenetic tree data manipulation")
     (description
@@ -12994,17 +13061,16 @@ manipulate tree data.")
 (define-public r-rvcheck
   (package
     (name "r-rvcheck")
-    (version "0.2.0")
+    (version "0.2.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "rvcheck" version))
        (sha256
-        (base32 "09gx29q882vh4q1qbb8z8lc3pgmpn7bk8skzcm85mrf3x3vgvkpa"))))
+        (base32 "09khjklvzbafd7r55496by01a9g3y291d87hpy43w44dmz9fzn9a"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocmanager" ,r-biocmanager)
-       ("r-yulab-utils" ,r-yulab-utils)))
+     (list r-biocmanager r-yulab-utils))
     (home-page "https://cran.r-project.org/web/packages/rvcheck")
     (synopsis "R package version check")
     (description
@@ -13043,7 +13109,7 @@ giving it a description in the specific format.")
         (base32
          "1xm969fjq3fv1p2sqza2apz8picibj4s2agpwf1sx9nwn3b587qs"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-matrix" ,r-matrix)))
+    (propagated-inputs (list r-matrix))
     (home-page "http://tedlab.mit.edu/~dr/SVDLIBC/")
     (synopsis "Sparse truncated singular value decomposition")
     (description
@@ -13067,8 +13133,7 @@ only sparse real matrices in Matrix package format are supported.")
          "0f37w4lj8dpcg1sfkd7cv6qpdkanmb97mnd8zih2fxzv8bpd0rfh"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mass" ,r-mass)
-       ("r-matrix" ,r-matrix)))
+     (list r-mass r-matrix))
     (home-page "https://cran.r-project.org/web/packages/speedglm")
     (synopsis "Fit linear and generalized linear models to large data sets")
     (description
@@ -13091,13 +13156,13 @@ linear models to large data sets by updating algorithms.")
     (properties `((upstream-name . "densityClust")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-fnn" ,r-fnn)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggrepel" ,r-ggrepel)
-       ("r-gridextra" ,r-gridextra)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rtsne" ,r-rtsne)))
+     (list r-fnn
+           r-ggplot2
+           r-ggrepel
+           r-gridextra
+           r-rcolorbrewer
+           r-rcpp
+           r-rtsne))
     (home-page "https://cran.r-project.org/web/packages/densityClust")
     (synopsis "Clustering by fast search and find of density peaks")
     (description
@@ -13138,10 +13203,7 @@ large datasets (> 100,000 samples) very efficiently.")
     (properties `((upstream-name . "qlcMatrix")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-docopt" ,r-docopt)
-       ("r-matrix" ,r-matrix)
-       ("r-slam" ,r-slam)
-       ("r-sparsesvd" ,r-sparsesvd)))
+     (list r-docopt r-matrix r-slam r-sparsesvd))
     (home-page "https://cran.r-project.org/web/packages/qlcMatrix")
     (synopsis "Sparse matrix functions for quantitative language comparison")
     (description
@@ -13165,10 +13227,7 @@ while other are highly specific for the special data format used for
     (properties `((upstream-name . "DDRTree")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bh" ,r-bh)
-       ("r-irlba" ,r-irlba)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcppeigen" ,r-rcppeigen)))
+     (list r-bh r-irlba r-rcpp r-rcppeigen))
     (home-page "https://cran.r-project.org/web/packages/DDRTree")
     (synopsis "Learning principal graphs with DDRTree")
     (description
@@ -13218,9 +13277,7 @@ definiteness of a matrix.")
     (properties `((upstream-name . "RSpectra")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcppeigen" ,r-rcppeigen)))
+     (list r-matrix r-rcpp r-rcppeigen))
     (home-page "https://github.com/yixuan/RSpectra")
     (synopsis "Solvers for large-scale Eigenvalue and SVD problems")
     (description
@@ -13266,10 +13323,7 @@ diagnostics for controlling type-1 errors are also provided.")
          "0f992dmgnr6s8g3386i9bjfyf08q8srgw7sjz2yx7snj8znq7251"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-igraph" ,r-igraph)
-       ("r-lattice" ,r-lattice)
-       ("r-mass" ,r-mass)
-       ("r-matrix" ,r-matrix)))
+     (list r-igraph r-lattice r-mass r-matrix))
     (home-page "https://cran.r-project.org/web/packages/flare")
     (synopsis "Family of Lasso regression implementations")
     (description
@@ -13290,7 +13344,7 @@ high dimensional sparse linear models.")
         (base32
          "0yawnjw063jypk3riy9xab9cmliv6c9dnabi18670khd3gzb2r9z"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-lars" ,r-lars)))
+    (propagated-inputs (list r-lars))
     (home-page "https://github.com/lingfeiwang/lassopv")
     (synopsis "Non-parametric p-value estimation for predictors in Lasso")
     (description
@@ -13313,7 +13367,7 @@ the first time as the statistic.")
          "0mpyf2kkfdl69pdc6brl1r6101vyc6pgr7z17s55ppg3y71k4q35"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)))
+     (list r-data-table))
     (home-page "https://github.com/mrdwab/splitstackshape")
     (synopsis "Stack and reshape datasets after splitting concatenated values")
     (description
@@ -13340,7 +13394,7 @@ handle.")
          "0h9qkl15k8v17v3g9bdnfwvh2s04ywjgg5y0xn2077dmywlja1bd"))))
     (properties `((upstream-name . "TFMPvalue")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-rcpp" ,r-rcpp)))
+    (propagated-inputs (list r-rcpp))
     (home-page "https://github.com/ge11232002/TFMPvalue")
     (synopsis "P-value computation for position weight matrices")
     (description
@@ -13365,8 +13419,7 @@ Touzet and Varre (2007).")
                 "0ss9jqrvv7bhvl5j74cjrp8r866d9dlavrbbfscwz3mhkgfx06bb"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-progress" ,r-progress)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-progress r-rcpp))
     (home-page "https://github.com/fmichonneau/rncl")
     (synopsis "Interface to the Nexus class library")
     (description "This package provides an interface to the Nexus class
@@ -13389,13 +13442,9 @@ library which allows parsing of NEXUS, Newick and other phylogenetic tree
                 "0jzr1gdvmi4l640hwwzh9bxqmpja69bn3ygnaqx37awvyh7khi2s"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ade4" ,r-ade4)
-       ("r-ape" ,r-ape)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rncl" ,r-rncl)
-       ("r-rnexml" ,r-rnexml)))
+     (list r-ade4 r-ape r-rcpp r-rncl r-rnexml))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/fmichonneau/phylobase")
     (synopsis "Base package for phylogenetic structures and comparative data")
     (description "This package provides a base @code{S4} class for comparative
@@ -13414,20 +13463,20 @@ methods, incorporating one or more trees and trait data.")
                 "1wsl4xq9w5bp3wk69dw57bg0qcw1vs6ajwya4p0w1r00ck5pwrib"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ape" ,r-ape)
-       ("r-dplyr" ,r-dplyr)
-       ("r-httr" ,r-httr)
-       ("r-lazyeval" ,r-lazyeval)
-       ("r-plyr" ,r-plyr)
-       ("r-reshape2" ,r-reshape2)
-       ("r-stringi" ,r-stringi)
-       ("r-stringr" ,r-stringr)
-       ("r-tidyr" ,r-tidyr)
-       ("r-uuid" ,r-uuid)
-       ("r-xml" ,r-xml)
-       ("r-xml2" ,r-xml2)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-ape
+           r-dplyr
+           r-httr
+           r-lazyeval
+           r-plyr
+           r-reshape2
+           r-stringi
+           r-stringr
+           r-tidyr
+           r-uuid
+           r-xml
+           r-xml2))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://docs.ropensci.org/RNeXML/")
     (synopsis "Semantically rich I/O for the NeXML Format")
     (description "This package provides access to phyloinformatic data in
@@ -13449,7 +13498,7 @@ and compatibility with @code{ape} objects.")
          "0bz10ar6hrgkvlzh9j2im24kwi3s2nnax668z40a2wj6s5xghqlr"))))
     (properties `((upstream-name . "RNifti")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-rcpp" ,r-rcpp)))
+    (propagated-inputs (list r-rcpp))
     (home-page "https://github.com/jonclayden/RNifti")
     (synopsis "Fast R and C++ access to NIfTI images")
     (description
@@ -13481,13 +13530,13 @@ creating color scales and calculating color distances.")
 (define-public r-ore
   (package
     (name "r-ore")
-    (version "1.6.3")
+    (version "1.7.1.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "ore" version))
        (sha256
-        (base32 "1vh6w3arrhgkfjjjw7ci91xmz4wpfr3cmwd5zkqch89dgn07skkv"))))
+        (base32 "0rs5r5h11x4l4nsbl4xqzbl4ahajd5374fq05abcmfjnjr9j64w5"))))
     (build-system r-build-system)
     (home-page "https://github.com/jonclayden/ore")
     (synopsis "R interface to the Onigmo regular expression library")
@@ -13510,7 +13559,7 @@ substitutions, amongst other features.")
         (base32
          "0zynplxqvbmf23cm2rsz3wz2jx6mv55z94mn1k44ny3lx625cnpw"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-ore" ,r-ore)))
+    (propagated-inputs (list r-ore))
     (home-page "https://github.com/jonclayden/reportr")
     (synopsis "General message and error reporting system")
     (description
@@ -13535,10 +13584,7 @@ conditional reporting based on the current \"output level\".")
     (properties `((upstream-name . "tractor.base")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ore" ,r-ore)
-       ("r-reportr" ,r-reportr)
-       ("r-rnifti" ,r-rnifti)
-       ("r-shades" ,r-shades)))
+     (list r-ore r-reportr r-rnifti r-shades))
     (home-page "https://www.tractor-mri.org.uk")
     (synopsis "Read, manipulate and visualize magnetic resonance images")
     (description
@@ -13552,20 +13598,20 @@ handling.")
 (define-public r-grimport
   (package
     (name "r-grimport")
-    (version "0.9-3")
+    (version "0.9-5")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "grImport" version))
        (sha256
         (base32
-         "109mrdvq06xq3zgn9ngz0c7zzgqkv5zbpvsb2i636vmlk6y4dpkd"))))
+         "0pbzc45wgp0cpycnw0bzn65ckdszzay0zrp7c7ssxdkifp8bai3a"))))
     (properties `((upstream-name . "grImport")))
     (build-system r-build-system)
     (inputs
-     `(("ghostscript" ,ghostscript)))
+     (list ghostscript))
     (propagated-inputs
-     `(("r-xml" ,r-xml)))
+     (list r-xml))
     (home-page "https://cran.r-project.org/web/packages/grImport")
     (synopsis "Convert, import, and draw PostScript pictures")
     (description
@@ -13587,10 +13633,7 @@ PostScript pictures in R plots.")
     (properties `((upstream-name . "grImport2")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-base64enc" ,r-base64enc)
-       ("r-jpeg" ,r-jpeg)
-       ("r-png" ,r-png)
-       ("r-xml" ,r-xml)))
+     (list r-base64enc r-jpeg r-png r-xml))
     (home-page "https://cran.r-project.org/web/packages/grImport2/")
     (synopsis "Import SVG graphics")
     (description
@@ -13617,7 +13660,7 @@ be imported and then exported via the @code{gridSVG} package.")
          "1ck7j13x701g67bx81x7plszz804jfhl1yg42krcj9x88vm5cscr"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)))
+     (list r-rcpp))
     (home-page "https://cran.r-project.org/web/packages/kohonen")
     (synopsis "Supervised and unsupervised self-organising maps")
     (description
@@ -13639,7 +13682,7 @@ inventor of the SOM.")
         (base32
          "07vcrrxvswrvfiha6f3ikn640yg0m2b4yd9lkmim1g0jmsmpfp8f"))))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/nnls")
     (synopsis "Lawson-Hanson algorithm for non-negative least squares")
     (description
@@ -13661,7 +13704,7 @@ the combination of non-negative and non-positive constraints.")
          "0vy6jdyvp751430sf2f690yhasjr70cpk3p3lnaaxjq3fs5gg99g"))))
     (properties `((upstream-name . "Iso")))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "https://www.stat.auckland.ac.nz/~rolf/")
     (synopsis "Functions to perform isotonic regression")
     (description
@@ -13685,10 +13728,7 @@ linear order on both variables.")
      `((upstream-name . "ChemometricsWithR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-devtools" ,r-devtools)
-       ("r-kohonen" ,r-kohonen)
-       ("r-mass" ,r-mass)
-       ("r-pls" ,r-pls)))
+     (list r-devtools r-kohonen r-mass r-pls))
     (home-page "https://github.com/rwehrens/CWR")
     (synopsis "Chemometrics with R")
     (description
@@ -13711,8 +13751,7 @@ Life Sciences\" by Ron Wehrens, Springer (2011).")
     (properties `((upstream-name . "ALS")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-iso" ,r-iso)
-       ("r-nnls" ,r-nnls)))
+     (list r-iso r-nnls))
     (home-page "https://cran.r-project.org/web/packages/ALS")
     (synopsis "Multivariate curve resolution alternating least squares")
     (description
@@ -13741,8 +13780,7 @@ decomposition is shared between datasets.")
          "1y022363a4pp0mnji91sjh1qiyspkh09sybqwj03r9pmwrd7q93x"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-sandwich" ,r-sandwich)
-       ("r-zoo" ,r-zoo)))
+     (list r-sandwich r-zoo))
     (home-page "https://cran.r-project.org/web/packages/strucchange")
     (synopsis "Testing, monitoring, and dating structural changes")
     (description
@@ -13810,7 +13848,7 @@ library.")
     (properties `((upstream-name . "ontologyIndex")))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/ontologyIndex")
     (synopsis "Functions for processing ontologies in R")
     (description
@@ -13831,17 +13869,17 @@ and manipulating sets of ontological terms.")
          "0fypj70c1fjmvs57birik76wfx8a2fs4gzicbb52k57i6clwlijd"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("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)))
+     (list r-cli
+           r-fs
+           r-glue
+           r-httr
+           r-jsonlite
+           r-rappdirs
+           r-rlang
+           r-rstudioapi
+           r-withr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://gargle.r-lib.org")
     (synopsis "Utilities for working with Google APIs")
     (description
@@ -13863,21 +13901,21 @@ preparing, executing, and processing HTTP requests.")
          "02msq61l7vamzpvbhvalh3qil1aa7pr68pwpsivbb6pvz6p4zyns"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertthat" ,r-assertthat)
-       ("r-bit64" ,r-bit64)
-       ("r-curl" ,r-curl)
-       ("r-dbi" ,r-dbi)
-       ("r-gargle" ,r-gargle)
-       ("r-glue" ,r-glue)
-       ("r-httr" ,r-httr)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-prettyunits" ,r-prettyunits)
-       ("r-progress" ,r-progress)
-       ("r-rapidjsonr" ,r-rapidjsonr)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rlang" ,r-rlang)
-       ("r-tibble" ,r-tibble)))
+     (list r-assertthat
+           r-bit64
+           r-curl
+           r-dbi
+           r-gargle
+           r-glue
+           r-httr
+           r-jsonlite
+           r-lifecycle
+           r-prettyunits
+           r-progress
+           r-rapidjsonr
+           r-rcpp
+           r-rlang
+           r-tibble))
     (home-page "https://github.com/rstats-db/bigrquery")
     (synopsis "R interface to Google's BigQuery API")
     (description
@@ -13887,21 +13925,21 @@ preparing, executing, and processing HTTP requests.")
 (define-public r-gmp
   (package
     (name "r-gmp")
-    (version "0.6-2")
+    (version "0.6-2.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "gmp" version))
        (sha256
         (base32
-         "03kzbflgpy5sgnzxmhshs5qv7jjmfc113ybkhxys4z8y7xdv9z3b"))))
+         "1mj7hy6riaxl9n4q2cnyyjazwad90xbjszk25si968618rih4n64"))))
     (build-system r-build-system)
     (arguments
      '(#:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'set-CC
            (lambda _ (setenv "CC" "gcc") #t)))))
-    (inputs `(("gmp" ,gmp)))
+    (inputs (list gmp))
     (home-page "https://cran.r-project.org/web/packages/gmp")
     (synopsis "Multiple precision arithmetic")
     (description
@@ -13914,23 +13952,22 @@ limitations\" using the GNU Multiple Precision library.")
 (define-public r-rmpfr
   (package
     (name "r-rmpfr")
-    (version "0.8-4")
+    (version "0.8-7")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "Rmpfr" version))
        (sha256
         (base32
-         "0xaqbgkpnjg53zcp56c59cz5dh3jvvwqnzvyxqzy77c6yvkwy3hx"))))
+         "1ljpbxvm4agbxnab5dfffbpw5k964hy3gw57dzydq1gpbxwdphlk"))))
     (properties `((upstream-name . "Rmpfr")))
     (build-system r-build-system)
     (inputs
-     `(("mpfr" ,mpfr)
-       ("gmp" ,gmp)))
+     (list mpfr gmp))
     (propagated-inputs
-     `(("r-gmp" ,r-gmp)))
+     (list r-gmp))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://rmpfr.r-forge.r-project.org/")
     (synopsis "R bindings to the MPFR library")
     (description
@@ -13977,7 +14014,7 @@ want to include run-time testing features in their own packages.")
      `((upstream-name . "assertive.properties")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertive-base" ,r-assertive-base)))
+     (list r-assertive-base))
     (home-page "https://bitbucket.org/richierocks/assertive.properties")
     (synopsis "Assertions to check properties of variables")
     (description
@@ -14002,7 +14039,7 @@ testing features in their own packages.")
      `((upstream-name . "assertive.numbers")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertive-base" ,r-assertive-base)))
+     (list r-assertive-base))
     (home-page "https://bitbucket.org/richierocks/assertive.numbers")
     (synopsis "Assertions to check properties of numbers")
     (description
@@ -14026,7 +14063,7 @@ who want to include run-time testing features in their own packages.")
      `((upstream-name . "assertive.sets")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertive-base" ,r-assertive-base)))
+     (list r-assertive-base))
     (home-page "https://bitbucket.org/richierocks/assertive.sets")
     (synopsis "Assertions to check properties of sets")
     (description
@@ -14050,7 +14087,7 @@ who want to include run-time testing features in their own packages.")
      `((upstream-name . "assertive.matrices")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertive-base" ,r-assertive-base)))
+     (list r-assertive-base))
     (home-page "https://bitbucket.org/richierocks/assertive.matrices")
     (synopsis "Assertions to check properties of matrices")
     (description
@@ -14075,7 +14112,7 @@ packages.")
      `((upstream-name . "assertive.models")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertive-base" ,r-assertive-base)))
+     (list r-assertive-base))
     (home-page "https://bitbucket.org/richierocks/assertive.models")
     (synopsis "Assertions to check properties of models")
     (description
@@ -14099,7 +14136,7 @@ who want to include run-time testing features in their own packages.")
      `((upstream-name . "assertive.reflection")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertive-base" ,r-assertive-base)))
+     (list r-assertive-base))
     (home-page "https://bitbucket.org/richierocks/assertive.reflection")
     (synopsis "Assertions for checking the state of R")
     (description
@@ -14124,9 +14161,7 @@ want to include run-time testing features in their own packages.")
      `((upstream-name . "assertive.types")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertive-base" ,r-assertive-base)
-       ("r-assertive-properties" ,r-assertive-properties)
-       ("r-codetools" ,r-codetools)))
+     (list r-assertive-base r-assertive-properties r-codetools))
     (home-page "https://bitbucket.org/richierocks/assertive.types")
     (synopsis "Assertions to check types of variables")
     (description
@@ -14150,8 +14185,7 @@ who want to include run-time testing features in their own packages.")
      `((upstream-name . "assertive.files")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertive-base" ,r-assertive-base)
-       ("r-assertive-numbers" ,r-assertive-numbers)))
+     (list r-assertive-base r-assertive-numbers))
     (home-page "https://bitbucket.org/richierocks/assertive.files")
     (synopsis "Assertions to check properties of files")
     (description
@@ -14176,9 +14210,7 @@ packages.")
      `((upstream-name . "assertive.code")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertive-base" ,r-assertive-base)
-       ("r-assertive-properties" ,r-assertive-properties)
-       ("r-assertive-types" ,r-assertive-types)))
+     (list r-assertive-base r-assertive-properties r-assertive-types))
     (home-page "https://bitbucket.org/richierocks/assertive.code")
     (synopsis "Assertions to check properties of code")
     (description
@@ -14202,8 +14234,7 @@ who want to include run-time testing features in their own packages.")
      `((upstream-name . "assertive.datetimes")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertive-base" ,r-assertive-base)
-       ("r-assertive-types" ,r-assertive-types)))
+     (list r-assertive-base r-assertive-types))
     (home-page "https://bitbucket.org/richierocks/assertive.datetimes")
     (synopsis "Assertions to check properties of dates and times")
     (description
@@ -14228,9 +14259,7 @@ packages.")
      `((upstream-name . "assertive.strings")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertive-base" ,r-assertive-base)
-       ("r-assertive-types" ,r-assertive-types)
-       ("r-stringi" ,r-stringi)))
+     (list r-assertive-base r-assertive-types r-stringi))
     (home-page "https://bitbucket.org/richierocks/assertive.strings")
     (synopsis "Assertions to check properties of strings")
     (description
@@ -14254,8 +14283,7 @@ who want to include run-time testing features in their own packages.")
      `((upstream-name . "assertive.data.us")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertive-base" ,r-assertive-base)
-       ("r-assertive-strings" ,r-assertive-strings)))
+     (list r-assertive-base r-assertive-strings))
     (home-page "https://bitbucket.org/richierocks/assertive.data.us")
     (synopsis "Assertions to check properties of strings")
     (description
@@ -14280,8 +14308,7 @@ their own packages.")
      `((upstream-name . "assertive.data.uk")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertive-base" ,r-assertive-base)
-       ("r-assertive-strings" ,r-assertive-strings)))
+     (list r-assertive-base r-assertive-strings))
     (home-page "https://bitbucket.org/richierocks/assertive.data.uk")
     (synopsis "Assertions to check properties of strings")
     (description
@@ -14306,8 +14333,7 @@ their own packages.")
      `((upstream-name . "assertive.data")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertive-base" ,r-assertive-base)
-       ("r-assertive-strings" ,r-assertive-strings)))
+     (list r-assertive-base r-assertive-strings))
     (home-page "https://bitbucket.org/richierocks/assertive.data")
     (synopsis "Assertions to check properties of data")
     (description
@@ -14330,24 +14356,24 @@ features in their own packages.")
          "02palil82idqhhshcdjsfsja9qkqnd0dczqzj5gbccy4hfg1c0y4"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertive-base" ,r-assertive-base)
-       ("r-assertive-code" ,r-assertive-code)
-       ("r-assertive-data" ,r-assertive-data)
-       ("r-assertive-data-uk" ,r-assertive-data-uk)
-       ("r-assertive-data-us" ,r-assertive-data-us)
-       ("r-assertive-datetimes" ,r-assertive-datetimes)
-       ("r-assertive-files" ,r-assertive-files)
-       ("r-assertive-matrices" ,r-assertive-matrices)
-       ("r-assertive-models" ,r-assertive-models)
-       ("r-assertive-numbers" ,r-assertive-numbers)
-       ("r-assertive-properties" ,r-assertive-properties)
-       ("r-assertive-reflection" ,r-assertive-reflection)
-       ("r-assertive-sets" ,r-assertive-sets)
-       ("r-assertive-strings" ,r-assertive-strings)
-       ("r-assertive-types" ,r-assertive-types)
-       ("r-knitr" ,r-knitr)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-assertive-base
+           r-assertive-code
+           r-assertive-data
+           r-assertive-data-uk
+           r-assertive-data-us
+           r-assertive-datetimes
+           r-assertive-files
+           r-assertive-matrices
+           r-assertive-models
+           r-assertive-numbers
+           r-assertive-properties
+           r-assertive-reflection
+           r-assertive-sets
+           r-assertive-strings
+           r-assertive-types
+           r-knitr))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bitbucket.org/richierocks/assertive")
     (synopsis "Readable check functions to ensure code integrity")
     (description
@@ -14369,7 +14395,7 @@ to throw errors if they aren't in the right form.")
          "1im5k8jbviwj2i42mq1kmjskh80isa7jr9w8i0fknidrzzy2h2zi"))))
     (properties `((upstream-name . "dotCall64")))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "https://git.math.uzh.ch/reinhard.furrer/dotCall64")
     (synopsis "Enhanced foreign function interface supporting long vectors")
     (description
@@ -14383,19 +14409,18 @@ This makes it a convenient and fast interface to C/C++ and Fortran code.")
 (define-public r-spam
   (package
     (name "r-spam")
-    (version "2.7-0")
+    (version "2.8-0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "spam" version))
        (sha256
-        (base32 "03c50wfyrzcmrcv9mkgj8dmdg2cwkh4p4ys8gaclr8w7ym45qav3"))))
+        (base32 "1ann2a2ifr3z983fcg1c0pkgmbxz6a0ym5q1dmq1r382bd1pg0fr"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dotcall64" ,r-dotcall64)))
+     (list r-dotcall64))
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("r-knitr" ,r-knitr)))
+     (list gfortran r-knitr))
     (home-page "https://www.math.uzh.ch/pages/spam/")
     (synopsis "Sparse matrix algebra")
     (description
@@ -14414,20 +14439,18 @@ Differences with other sparse matrix packages are:
 (define-public r-fields
   (package
     (name "r-fields")
-    (version "12.5")
+    (version "13.3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "fields" version))
        (sha256
-        (base32 "08jfqlz42vq23h2yq279cs2rva9fadi4q6cmk4dvixrmyprx5xyk"))))
+        (base32 "1hs4k5a9hh0r5fsrnpnvs6wvf78xpjzj8a2j6643dsz73a5q6ln6"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-maps" ,r-maps)
-       ("r-spam" ,r-spam)
-       ("r-viridis" ,r-viridis)))
+     (list r-maps r-spam r-viridis))
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://www.image.ucar.edu/fields")
     (synopsis "Tools for spatial data")
     (description
@@ -14452,8 +14475,7 @@ covariance functions for large data sets.")
      `((upstream-name . "SpatialExtremes")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-fields" ,r-fields)
-       ("r-maps" ,r-maps)))
+     (list r-fields r-maps))
     (home-page "http://spatialextremes.r-forge.r-project.org/")
     (synopsis "Modelling spatial extremes")
     (description
@@ -14478,12 +14500,12 @@ max-stable processes only), model checking and selection and prediction.")
          "0c8xn8ripzq270hy8d16fcnx02l02alddznd7fqwk3jyi6113h1y"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-car" ,r-car)
-       ("r-gtools" ,r-gtools)
-       ("r-mass" ,r-mass)
-       ("r-multcomp" ,r-multcomp)
-       ("r-plotrix" ,r-plotrix)
-       ("r-scales" ,r-scales)))
+     (list r-car
+           r-gtools
+           r-mass
+           r-multcomp
+           r-plotrix
+           r-scales))
     (home-page "https://cran.r-project.org/web/packages/drc")
     (synopsis "Analysis of dose-response curves")
     (description
@@ -14524,7 +14546,7 @@ for association and heterogeneity.")
         (base32
          "1546jqhhw5h177ii8jkdikyd26rv6gwkav816np1zks4p7zgsljj"))))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/bootstrap")
     (synopsis "Functions for the book \"An Introduction to the Bootstrap\"")
     (description
@@ -14576,16 +14598,16 @@ discovery rates.")
 (define-public r-longitudinal
   (package
     (name "r-longitudinal")
-    (version "1.1.12")
+    (version "1.1.13")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "longitudinal" version))
        (sha256
         (base32
-         "1d83ws28nxi3kw5lgd5n5y7865djq7ky72fw3ddi1fkkhg1r9y6l"))))
+         "046w3xbr535c5jyd68adv42a7limxp1mv57b5w6w673w707lmw2p"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-corpcor" ,r-corpcor)))
+    (propagated-inputs (list r-corpcor))
     (home-page "http://strimmerlab.org/software/longitudinal/")
     (synopsis "Analysis of multiple time course data")
     (description
@@ -14598,20 +14620,18 @@ dynamical correlation and dynamical covariance.")
 (define-public r-genenet
   (package
     (name "r-genenet")
-    (version "1.2.15")
+    (version "1.2.16")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "GeneNet" version))
        (sha256
         (base32
-         "11ba6ahsk3x9alvcw8bai2bpg84ki1m8nadrjjdhjg65svhw8njm"))))
+         "1r1khga3nxxjghs4vnbymzp0cwb1q17zw2v3a94qz8fsrirq1sf1"))))
     (properties `((upstream-name . "GeneNet")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-corpcor" ,r-corpcor)
-       ("r-fdrtool" ,r-fdrtool)
-       ("r-longitudinal" ,r-longitudinal)))
+     (list r-corpcor r-fdrtool r-longitudinal))
     (home-page "http://strimmerlab.org/software/genenet/")
     (synopsis "Modeling and inferring gene networks")
     (description
@@ -14634,9 +14654,9 @@ putative directions).")
         (base32
          "0qj37ljdva3v29s01dkrbg31mcfzy3bl145cp40d54v4h9xhcghc"))))
     (build-system r-build-system)
-    (inputs `(("zlib" ,zlib)))
+    (inputs (list zlib))
     (propagated-inputs
-     `(("r-refgenome" ,r-refgenome)))
+     (list r-refgenome))
     (home-page "https://cran.r-project.org/web/packages/rbamtools")
     (synopsis "Read and write BAM (binary alignment) files")
     (description
@@ -14657,7 +14677,7 @@ library.")
          "0l1pmfr9kmc90rl5s9b0141451rxrjmiiasp3lsvl2x3ps0smqaj"))))
     (properties `((upstream-name . "protViz")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-rcpp" ,r-rcpp)))
+    (propagated-inputs (list r-rcpp))
     (home-page "https://github.com/protViz/protViz/")
     (synopsis "Visualizing and analyzing mass spectrometry data in proteomics")
     (description
@@ -14671,18 +14691,18 @@ But it can also be used to do data analysis for small scale data sets.")
 (define-public r-cmprsk
   (package
     (name "r-cmprsk")
-    (version "2.2-10")
+    (version "2.2-11")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "cmprsk" version))
        (sha256
-        (base32 "1xnx2zanw548prxsw2zw5cddkkg6kj97jgyzw67achq5mnsvfbg8"))))
+        (base32 "050f24l5ab1ds9824c7yjahimf6pg8ih2k83jzpzfb0n5k5jfh44"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-survival" ,r-survival)))
+     (list r-survival))
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/cmprsk")
     (synopsis "Subdistribution analysis of competing risks")
     (description
@@ -14707,11 +14727,7 @@ JASA, 94:496-509.")
          "1hvrplmdpjjpjji663rw0vjbbrzj2nvr04d1nkc8bf46p4ixyxgy"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)
-       ("r-lattice" ,r-lattice)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-survival" ,r-survival)))
+     (list r-data-table r-lattice r-rcpp r-rcpparmadillo r-survival))
     (home-page "https://cran.r-project.org/web/packages/etm")
     (synopsis "Empirical transition matrix")
     (description
@@ -14734,18 +14750,18 @@ model with finite state space using the Aalen-Johansen estimator.")
     (properties `((upstream-name . "Epi")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cmprsk" ,r-cmprsk)
-       ("r-data-table" ,r-data-table)
-       ("r-dplyr" ,r-dplyr)
-       ("r-etm" ,r-etm)
-       ("r-mass" ,r-mass)
-       ("r-matrix" ,r-matrix)
-       ("r-mgcv" ,r-mgcv)
-       ("r-numderiv" ,r-numderiv)
-       ("r-plyr" ,r-plyr)
-       ("r-purrr" ,r-purrr)
-       ("r-survival" ,r-survival)
-       ("r-zoo" ,r-zoo)))
+     (list r-cmprsk
+           r-data-table
+           r-dplyr
+           r-etm
+           r-mass
+           r-matrix
+           r-mgcv
+           r-numderiv
+           r-plyr
+           r-purrr
+           r-survival
+           r-zoo))
     (home-page "https://BendixCarstensen.com/Epi/")
     (synopsis "Statistical analysis in epidemiology")
     (description
@@ -14771,7 +14787,7 @@ number of epidemiological data sets.")
         (base32
          "1zyrisy3c4cz896j1bjh61sf57wdl9p8ywdq268cl819szfq78mx"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-mass" ,r-mass)))
+    (propagated-inputs (list r-mass))
     (home-page "https://cran.r-project.org/web/packages/ppls")
     (synopsis "Penalized partial least squares")
     (description
@@ -14793,11 +14809,7 @@ regression coefficients can be conducted via jackknifing.")
         (base32 "1sl457a1lndrx98y2j9a2smanawx2iqlhl82iand0g3p5xp8ch4j"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-igraph" ,r-igraph)
-       ("r-mass" ,r-mass)
-       ("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcppeigen" ,r-rcppeigen)))
+     (list r-igraph r-mass r-matrix r-rcpp r-rcppeigen))
     (home-page "https://cran.r-project.org/web/packages/huge")
     (synopsis "High-dimensional undirected graph estimation")
     (description
@@ -14819,11 +14831,7 @@ screening, graph estimation, and model selection techniques into a pipeline.")
          "0vgs6k92vdr0cmb8cwbv2ff6qavw30agskfd8bfh17hsskrisvx0"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-epi" ,r-epi)
-       ("r-genenet" ,r-genenet)
-       ("r-glmnet" ,r-glmnet)
-       ("r-mass" ,r-mass)
-       ("r-ppls" ,r-ppls)))
+     (list r-epi r-genenet r-glmnet r-mass r-ppls))
     (home-page "https://cran.r-project.org/web/packages/parcor")
     (synopsis "Regularized estimation of partial correlation matrices")
     (description
@@ -14875,7 +14883,7 @@ by change of variable.")
          (add-after 'unpack 'set-HOME
            (lambda _ (setenv "HOME" "/tmp"))))))
     (native-inputs
-     `(("r-r-rsp" ,r-r-rsp))) ; vignette builder
+     (list r-r-rsp)) ; vignette builder
     (home-page "https://github.com/HenrikBengtsson/listenv")
     (synopsis "Environments behaving (almost) as lists")
     (description
@@ -14898,7 +14906,7 @@ subsetting.")
          "1wrjiiif6rpc268zz79pvpw33si6n6ffgxdnxmmcracwhb5vqg90"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-codetools" ,r-codetools)))
+     (list r-codetools))
     (home-page "https://github.com/HenrikBengtsson/globals")
     (synopsis "Identify global objects in R expressions")
     (description
@@ -14912,14 +14920,14 @@ them in distributed compute environments.")
 (define-public r-parallelly
   (package
     (name "r-parallelly")
-    (version "1.28.1")
+    (version "1.30.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "parallelly" version))
        (sha256
         (base32
-         "0qy6gj1xybiziks5gvw5px81n3klgr16kvb1qn1xp6j030xqibpl"))))
+         "0fwzkzw9vjblwk5rg56yl8qfn7irnbpm70405lmj7awvf35q1c5a"))))
     (properties `((upstream-name . "parallelly")))
     (build-system r-build-system)
     (home-page "https://github.com/HenrikBengtsson/parallelly")
@@ -14940,14 +14948,14 @@ port-forwarding to your local computer.")
 (define-public r-future
   (package
     (name "r-future")
-    (version "1.22.1")
+    (version "1.23.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "future" version))
        (sha256
         (base32
-         "1kgdpfipnwi15wz2xvlfg3bmq424hhjzja5bks01v3phra2lmcl7"))))
+         "1y5qzpsg0r2dccynyybbb2ngxbl1y3phs1dq2jj3f2bwhc7chsfq"))))
     (build-system r-build-system)
     (arguments
      `(#:phases
@@ -14955,12 +14963,9 @@ port-forwarding to your local computer.")
          (add-after 'unpack 'set-HOME
            (lambda _ (setenv "HOME" "/tmp"))))))
     (propagated-inputs
-     `(("r-digest" ,r-digest)
-       ("r-globals" ,r-globals)
-       ("r-listenv" ,r-listenv)
-       ("r-parallelly" ,r-parallelly)))
+     (list r-digest r-globals r-listenv r-parallelly))
     (native-inputs
-     `(("r-r-rsp" ,r-r-rsp))) ; vignette builder
+     (list r-r-rsp)) ; vignette builder
     (home-page "https://github.com/HenrikBengtsson/future")
     (synopsis "Unified parallel and distributed processing in R")
     (description
@@ -14994,10 +14999,9 @@ the local machine to, say, distributed processing on a remote compute cluster.")
          (add-after 'unpack 'set-HOME
            (lambda _ (setenv "HOME" "/tmp"))))))
     (propagated-inputs
-     `(("r-future" ,r-future)
-       ("r-globals" ,r-globals)))
+     (list r-future r-globals))
     (native-inputs
-     `(("r-r-rsp" ,r-r-rsp))) ; vignette builder
+     (list r-r-rsp)) ; vignette builder
     (home-page "https://github.com/HenrikBengtsson/future.apply")
     (synopsis "Apply function to elements in parallel using futures")
     (description
@@ -15021,7 +15025,7 @@ machine or distributed on a compute cluster.")
          "07p2hjmpcwcsang8z9sjkpy94rydcin7m3hyvcgzgm5cd6w8c1p4"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-matrix" ,r-matrix)))
+     (list r-matrix))
     (home-page "https://github.com/erichson/rSVD")
     (synopsis "Randomized singular value decomposition")
     (description
@@ -15053,11 +15057,7 @@ functions are provided.")
          "00fk5fr5zsk2qxc1kfhmshhjxgnamm3401089sx8m2l529zd6r8j"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-codetools" ,r-codetools)
-       ("r-crayon" ,r-crayon)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-tibble" ,r-tibble)))
+     (list r-codetools r-crayon r-purrr r-rlang r-tibble))
     (home-page "https://github.com/r-lib/sloop")
     (synopsis "Helpers for object-oriented programming in R")
     (description
@@ -15078,7 +15078,7 @@ using @code{S3}.")
         (base32
          "1aa76ir1kp67hiz7dr60azyc71yzslshyc640fjh0fpw0sp5kwbc"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-mass" ,r-mass)))
+    (propagated-inputs (list r-mass))
     (home-page "https://cran.r-project.org/web/packages/capushe/index.html")
     (synopsis "Calibrating penalties using slope heuristics")
     (description
@@ -15101,9 +15101,7 @@ heuristics.")
     (properties `((upstream-name . "doRNG")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-foreach" ,r-foreach)
-       ("r-iterators" ,r-iterators)
-       ("r-rngtools" ,r-rngtools)))
+     (list r-foreach r-iterators r-rngtools))
     (home-page "https://renozao.github.io/doRNG/")
     (synopsis "Generic reproducible parallel backend for foreach loops")
     (description
@@ -15128,8 +15126,8 @@ chosen parallel environment and associated foreach backend.")
          "1vc8gy4slsywcwxq532373i0dq73fhs5cac9mr6zz2pjaaxjghhq"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-matrix" ,r-matrix)))
-    (native-inputs `(("gfortran" ,gfortran)))
+     (list r-matrix))
+    (native-inputs (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/blockmodeling")
     (synopsis "Generalized and classical blockmodeling of valued networks")
     (description
@@ -15153,10 +15151,7 @@ algorithms) can be computed and partitioned matrices can be plotted.")
     (properties `((upstream-name . "UpSetR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-plyr" ,r-plyr)
-       ("r-scales" ,r-scales)))
+     (list r-ggplot2 r-gridextra r-plyr r-scales))
     (home-page "https://github.com/hms-dbmi/UpSetR")
     (synopsis "Visualize intersecting sets")
     (description
@@ -15185,8 +15180,7 @@ several common set, element and attribute related tasks.")
     ;; non-interactively.
     (arguments '(#:tests? #f))
     (propagated-inputs
-     `(("r-htmltools" ,r-htmltools)
-       ("r-shiny" ,r-shiny)))
+     (list r-htmltools r-shiny))
     (home-page "https://ebailey78.github.io/shinyBS/")
     (synopsis "Twitter Bootstrap components for Shiny")
     (description
@@ -15222,13 +15216,9 @@ several common set, element and attribute related tasks.")
                  (invoke "esbuild" source "--minify"
                          (string-append "--outfile=" target)))))))))
     (propagated-inputs
-     `(("r-htmltools" ,r-htmltools)
-       ("r-htmlwidgets" ,r-htmlwidgets)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-shiny" ,r-shiny)))
+     (list r-htmltools r-htmlwidgets r-jsonlite r-shiny))
     (native-inputs
-     `(("r-knitr" ,r-knitr)
-       ("esbuild" ,esbuild)))
+     (list r-knitr esbuild))
     (home-page "https://github.com/yang-tang/shinyjqui")
     (synopsis "jQuery UI interactions and effects for Shiny")
     (description
@@ -15267,8 +15257,7 @@ identifying outliers.")
         (base32 "154glks7rsjkza0sfi1kj7wj727py9sl1ba6sswflwmwc9n226q6"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)))
+     (list r-rcpp r-rcpparmadillo))
     (home-page "http://www.perossi.org/home/bsm-1")
     (synopsis "Bayesian inference for marketing/micro-econometrics")
     (description
@@ -15325,7 +15314,7 @@ tensors.")
          "12h2y46xcfldhjdmm960swgn9b23zvkj5vg2bi42s9qxwgi02d63"))))
     (properties `((upstream-name . "rARPACK")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-rspectra" ,r-rspectra)))
+    (propagated-inputs (list r-rspectra))
     (home-page "https://github.com/yixuan/rARPACK")
     (synopsis "Solvers for large scale eigenvalue and SVD problems")
     (description
@@ -15339,22 +15328,19 @@ users of rARPACK are advised to switch to the RSpectra package.")
 (define-public r-compositions
   (package
     (name "r-compositions")
-    (version "2.0-2")
+    (version "2.0-4")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "compositions" version))
        (sha256
         (base32
-         "05pji62pzgfk9dyiybmr16q0h6mdzsmvyzxdni3hn0dvl4a7mr5m"))))
+         "1bqg0qqzsf92q0jb7hdjycr54bwv8rk7ajhvxgch5yslyqxpm73v"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bayesm" ,r-bayesm)
-       ("r-mass" ,r-mass)
-       ("r-robustbase" ,r-robustbase)
-       ("r-tensora" ,r-tensora)))
+     (list r-bayesm r-mass r-robustbase r-tensora))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "http://www.stat.boogaart.de/compositions")
     (synopsis "Compositional data analysis")
     (description
@@ -15376,8 +15362,7 @@ numbers (e.g. concentrations).")
          "0hiw5smk6kgk0gb9840kcqkhkybl7n30s77xhjc395x09izbgix1"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-quantreg" ,r-quantreg)
-       ("r-sparsem" ,r-sparsem)))
+     (list r-quantreg r-sparsem))
     (home-page "https://cran.r-project.org/web/packages/cobs")
     (synopsis "Constrained B-Splines (sparse matrix based)")
     (description
@@ -15399,8 +15384,7 @@ splines via linear programming and sparse matrices.")
     (properties `((upstream-name . "DrImpute")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)))
+     (list r-rcpp r-rcpparmadillo))
     (home-page "https://github.com/ikwak2/DrImpute")
     (synopsis "Imputing dropout events in single-cell RNA-Seq data")
     (description
@@ -15413,16 +15397,16 @@ such software by imputing dropout events.")
 (define-public r-gamlss-dist
   (package
     (name "r-gamlss-dist")
-    (version "5.3-2")
+    (version "6.0-1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "gamlss.dist" version))
        (sha256
-        (base32 "1lyf2rvkplywgyhcni93k52z3b89vv86yrgl38dx3ln3436r5ahc"))))
+        (base32 "0m41n7zf7m0mh1w9ql70wqnzsf2f013ql699im7zmp6fdggb8qxm"))))
     (properties `((upstream-name . "gamlss.dist")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-mass" ,r-mass)))
+    (propagated-inputs (list r-mass))
     (home-page "http://www.gamlss.org/")
     (synopsis "Distributions for Generalized Additive Models for location scale and shape")
     (description
@@ -15441,22 +15425,19 @@ transformation, respectively.")
 (define-public r-shinyjs
   (package
     (name "r-shinyjs")
-    (version "2.0.0")
+    (version "2.1.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "shinyjs" version))
        (sha256
         (base32
-         "1zzq356dvd8ciajy6r5n4ybgx9xk7ydwv25j86xlcsqznkxdkkf2"))))
+         "1id9gsrkr28xl80a8794in17rxmmz06zqvd5hlns7mqz3fzhrhky"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-digest" ,r-digest)
-       ("r-htmltools" ,r-htmltools)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-shiny" ,r-shiny)))
+     (list r-digest r-jsonlite r-shiny))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://deanattali.com/shinyjs")
     (synopsis "Improve the user experience of your Shiny apps")
     (description
@@ -15473,63 +15454,53 @@ to easily call your own custom JavaScript functions from R.")
 (define-public r-colourpicker
   (package
     (name "r-colourpicker")
-    (version "1.1.0")
+    (version "1.1.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "colourpicker" version))
        (sha256
         (base32
-         "1qjispj7i12m02js5cm5xlgn5lyff0kc5ybz6lbknz8q5lkbdyrd"))))
+         "1q1wi3g403fbzp4ys3gsjbwdc86x770cx323qgi47ca8n219kl50"))))
     (build-system r-build-system)
     (arguments
-     `(#:modules ((guix build utils)
-                  (guix build r-build-system)
-                  (srfi srfi-1)
-                  (ice-9 popen))
-       #:phases
+     `(#:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'process-javascript
            (lambda* (#:key inputs #:allow-other-keys)
              (with-directory-excursion "inst"
-               (call-with-values
-                   (lambda ()
-                     (unzip2
+               (let ((mapping
                       `((,(assoc-ref inputs "js-salvattore")
-                         "examples/colourInput/www/salvattore.min.js")
+                         . "examples/colourInput/www/salvattore.min.js")
                         (,(assoc-ref inputs "js-jquery")
-                         "htmlwidgets/lib/jquery/jquery.min.js")
+                         . "htmlwidgets/lib/jquery/jquery.min.js")
                         ("www/shared/colourpicker/js/colourpicker.js"
-                         "www/shared/colourpicker/js/colourpicker.min.js"))))
-                 (lambda (sources targets)
-                   (for-each (lambda (source target)
-                               (format #t "Processing ~a --> ~a~%"
-                                       source target)
-                               (delete-file target)
-                               (let ((minified (open-pipe* OPEN_READ "uglifyjs" source)))
-                                 (call-with-output-file target
-                                   (lambda (port)
-                                     (dump-port minified port)))))
-                             sources targets))))
-             #t)))))
-    (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-htmltools" ,r-htmltools)
-       ("r-htmlwidgets" ,r-htmlwidgets)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-miniui" ,r-miniui)
-       ("r-shiny" ,r-shiny)
-       ("r-shinyjs" ,r-shinyjs)))
+                         . "www/shared/colourpicker/js/colourpicker.min.js"))))
+                 (for-each (lambda (source target)
+                             (format #true "Processing ~a --> ~a~%"
+                                     source target)
+                             (delete-file target)
+                             (invoke "esbuild" source "--minify"
+                                     (string-append "--outfile=" target)))
+                           (map car mapping)
+                           (map cdr mapping)))))))))
+    (propagated-inputs
+     (list r-ggplot2
+           r-htmltools
+           r-htmlwidgets
+           r-jsonlite
+           r-miniui
+           r-shiny
+           r-shinyjs))
     (native-inputs
-     `(("r-knitr" ,r-knitr)
-       ("uglifyjs" ,node-uglify-js)
+     `(("esbuild" ,esbuild)
        ("js-jquery"
         ,(origin
            (method url-fetch)
-           (uri "https://code.jquery.com/jquery-3.3.1.js")
+           (uri "https://code.jquery.com/jquery-1.11.3.js")
            (sha256
             (base32
-             "1b8zxrp6xwzpw25apn8j4qws0f6sr7qr7h2va5h1mjyfqvn29anq"))))
+             "1v956yf5spw0156rni5z77hzqwmby7ajwdcd6mkhb6zvl36awr90"))))
        ("js-salvattore"
         ,(origin
            (method url-fetch)
@@ -15562,16 +15533,16 @@ select colors to use in your R code.")
     (properties `((upstream-name . "ggExtra")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-colourpicker" ,r-colourpicker)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gtable" ,r-gtable)
-       ("r-miniui" ,r-miniui)
-       ("r-r6" ,r-r6)
-       ("r-scales" ,r-scales)
-       ("r-shiny" ,r-shiny)
-       ("r-shinyjs" ,r-shinyjs)))
+     (list r-colourpicker
+           r-ggplot2
+           r-gtable
+           r-miniui
+           r-r6
+           r-scales
+           r-shiny
+           r-shinyjs))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/daattali/ggExtra")
     (synopsis "Marginal histograms for ggplot2 and other enhancements")
     (description
@@ -15593,7 +15564,7 @@ marginal histograms/boxplots/density plots to ggplot2 scatterplots.")
          "18ym2pdql5vzngc7q5gn66d153hrfrnd8ilv8yh6vd7j7sx7vjql"))))
     (properties `((upstream-name . "minpack.lm")))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/minpack.lm")
     (synopsis "Levenberg-Marquardt Nonlinear Least-Squares algorithm")
     (description
@@ -15637,9 +15608,9 @@ them (Anscombe-Glynn, D'Agostino, Bonett-Seier).")
          "1wm83m3cqd6llxb9p2jwim0wb81v84pgdmgcznygzaaq6kbn3n84"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mclust" ,r-mclust)))
+     (list r-mclust))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/msir")
     (synopsis "Model-based sliced inverse regression")
     (description
@@ -15659,7 +15630,7 @@ mixture modeling of inverse regression.")
         (base32
          "05jzrjqxzbcf6z245hlk7sjxiszv9paadaaimvcx5y5qgi87vhq7"))))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "https://github.com/brentonk/pbivnorm")
     (synopsis "Vectorized bivariate normal CDF")
     (description
@@ -15680,10 +15651,7 @@ probabilities from a standard bivariate normal CDF.")
          "12hhbwxaiprs9bmclwhhdpv42h4mrl4gj92zq3wk8rb883mw816l"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mass" ,r-mass)
-       ("r-mnormt" ,r-mnormt)
-       ("r-numderiv" ,r-numderiv)
-       ("r-pbivnorm" ,r-pbivnorm)))
+     (list r-mass r-mnormt r-numderiv r-pbivnorm))
     (home-page "https://lavaan.ugent.be")
     (synopsis "Latent variable analysis")
     (description
@@ -15705,12 +15673,9 @@ latent growth curve models.")
          "1ddaqwx8i3ygwvxf11mc8xhgk4nkvnail99nr5szq8i168752zq2"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-compquadform" ,r-compquadform)
-       ("r-lavaan" ,r-lavaan)
-       ("r-mvtnorm" ,r-mvtnorm)
-       ("r-sandwich" ,r-sandwich)))
+     (list r-compquadform r-lavaan r-mvtnorm r-sandwich))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/nonnest2/")
     (synopsis "Tests of non-nested models")
     (description
@@ -15734,9 +15699,7 @@ obtain confidence intervals associated with AIC and BIC.")
          "1zcrwa93mc27qj3g4ayc2k895r6g8q0g6qb2azmvj7wqk750va7a"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-survival" ,r-survival)))
+     (list r-rcpp r-rcpparmadillo r-survival))
     (home-page "https://cran.r-project.org/web/packages/penalized/")
     (synopsis "Penalized estimation in GLMs and in the Cox model")
     (description
@@ -15762,7 +15725,7 @@ parameters.")
          "0scyfjn4ilsvha3x41c3b8bcfi31hlhwm77wn2a8hj5dsvnnmzig"))))
     (properties `((upstream-name . "ZIM")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-mass" ,r-mass)))
+    (propagated-inputs (list r-mass))
     (home-page "https://github.com/biostatstudio/ZIM")
     (synopsis "Zero-inflated models (ZIM) for count time series with excess zeros")
     (description
@@ -15821,21 +15784,20 @@ graphs.")
 (define-public r-pbdzmq
   (package
     (name "r-pbdzmq")
-    (version "0.3-5")
+    (version "0.3-6")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "pbdZMQ" version))
        (sha256
         (base32
-         "1v8iv1pzs4j3ics9k9h4xjkv6z1ma2xbqy003xk2lqax6srqi02d"))))
+         "0yy3x3l04vx13jbjbvkvsc8jdbf0abndjfknszdx3bi18b2chi4r"))))
     (properties `((upstream-name . "pbdZMQ")))
     (build-system r-build-system)
     (inputs
-     `(("zeromq" ,zeromq)
-       ("zlib" ,zlib)))
+     (list zeromq zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://pbdr.org/")
     (synopsis "R interface to ZeroMQ")
     (description
@@ -15849,20 +15811,17 @@ compatible with @code{rzmq} are also provided.")
 (define-public r-repr
   (package
     (name "r-repr")
-    (version "1.1.3")
+    (version "1.1.4")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "repr" version))
        (sha256
         (base32
-         "0qimllv9pn8wsl550bjkp5dkknbmr69j85mrwfbbq75m2ga466sk"))))
+         "0h3h14ybamcbwmm31ib66fx13v75vkzn4bn2v26n2h097sl9qybg"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-base64enc" ,r-base64enc)
-       ("r-htmltools" ,r-htmltools)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-pillar" ,r-pillar)))
+     (list r-base64enc r-htmltools r-jsonlite r-pillar))
     (home-page "https://cran.r-project.org/web/packages/repr/")
     (synopsis "Serializable representations")
     (description
@@ -15873,18 +15832,18 @@ several formats and MIME types.")
 (define-public r-irdisplay
   (package
     (name "r-irdisplay")
-    (version "1.0")
+    (version "1.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "IRdisplay" version))
        (sha256
         (base32
-         "15jbjrihm1mk899357h9xb08iq3xyagds1xb40fmdpkfcmcfqrw9"))))
+         "0awdiv4rr93y8jb1d64sm1iy37ywyniqm7w98yv6qm0zz47h7sw3"))))
     (properties `((upstream-name . "IRdisplay")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-repr" ,r-repr)))
+     (list r-repr))
     (home-page "https://cran.r-project.org/web/packages/IRdisplay/")
     (synopsis "Jupyter display machinery")
     (description
@@ -15896,14 +15855,14 @@ running IRkernel session.")
 (define-public r-irkernel
   (package
     (name "r-irkernel")
-    (version "1.2")
+    (version "1.3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "IRkernel" version))
        (sha256
         (base32
-         "14gz3790iv6gg6yi9wslk1yn0jq57yvhxgm840qh818xfkdxpd2z"))))
+         "00qrmsywpzw2hfp88020zjaijma7q4hqm9h2cz53rywdjzywnzss"))))
     (properties `((upstream-name . "IRkernel")))
     (build-system r-build-system)
     (arguments
@@ -15925,18 +15884,18 @@ running IRkernel session.")
                   (string-append "[\"" (which "R") "\",")))
                #t))))))
     (inputs
-     `(("jupyter" ,jupyter)))
-    (propagated-inputs
-     `(("r-crayon" ,r-crayon)
-       ("r-digest" ,r-digest)
-       ("r-evaluate" ,r-evaluate)
-       ("r-irdisplay" ,r-irdisplay)
-       ("r-jsonlite" ,r-jsonlite)
-       ;; sets R_LIBS_SITE, so R can actually find this package (IRkernel)
-       ("r-minimal" ,r-minimal)
-       ("r-pbdzmq" ,r-pbdzmq)
-       ("r-repr" ,r-repr)
-       ("r-uuid" ,r-uuid)))
+     (list jupyter))
+    (propagated-inputs
+     (list r-crayon
+           r-digest
+           r-evaluate
+           r-irdisplay
+           r-jsonlite
+           ;; sets R_LIBS_SITE, so R can actually find this package (IRkernel)
+           r-minimal
+           r-pbdzmq
+           r-repr
+           r-uuid))
     (home-page "https://cran.r-project.org/web/packages/IRkernel/")
     (synopsis "Native R kernel for Jupyter")
     (description
@@ -15958,8 +15917,7 @@ network.")
          "0s8kd8krqk4kwv2zqxpsfy3w8qdwf5naf4b5l383vidq9sil0qb2"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-gdata" ,r-gdata)
-       ("r-mass" ,r-mass)))
+     (list r-gdata r-mass))
     (home-page "https://cran.r-project.org/web/packages/gmodels/")
     (synopsis "Various R programming tools for model fitting")
     (description
@@ -15969,18 +15927,18 @@ network.")
 (define-public r-apcluster
   (package
     (name "r-apcluster")
-    (version "1.4.8")
+    (version "1.4.9")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "apcluster" version))
        (sha256
         (base32
-         "0lzf2jqm56i74wif6x5sw3j0w2qc4sni49zq2fgbl89b7lwkvchj"))))
+         "0wnbb3kj9m7rfq63xr43jjf6n8jxm1r2wvvx6g0qkss0wvipbb1s"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-matrix r-rcpp))
+    (native-inputs (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/apcluster/")
     (synopsis "Affinity propagation clustering")
     (description
@@ -15991,37 +15949,6 @@ can also be used to join clusters obtained from affinity propagation.  Various
 plotting functions are available for analyzing clustering results.")
     (license license:gpl2+)))
 
-(define-public r-valr
-  (package
-    (name "r-valr")
-    (version "0.6.3")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (cran-uri "valr" version))
-       (sha256
-        (base32
-         "1lzdlw0mw06rymyjzwf4i8rx1z6zxpwxxqfsc9ggqlnhq6bfhy93"))))
-    (build-system r-build-system)
-    (propagated-inputs
-     `(("r-broom" ,r-broom)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-rcpp" ,r-rcpp)
-       ("r-readr" ,r-readr)
-       ("r-rlang" ,r-rlang)
-       ("r-stringr" ,r-stringr)
-       ("r-tibble" ,r-tibble)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
-    (home-page "https://github.com/rnabioco/valr")
-    (synopsis "Genome interval arithmetic in R")
-    (description
-     "This package enables you to read and manipulate genome intervals and
-signals.  It provides functionality similar to command-line tool suites within
-R, enabling interactive analysis and visualization of genome-scale data.")
-    (license license:expat)))
-
 (define-public r-rematch2
   (package
     (name "r-rematch2")
@@ -16035,7 +15962,7 @@ R, enabling interactive analysis and visualization of genome-scale data.")
          "1fzpz8vhghw8ygwg6rsvfy3783pqk7ch029i5851lwypkplvz77y"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-tibble" ,r-tibble)))
+     (list r-tibble))
     (home-page "https://github.com/r-lib/rematch2")
     (synopsis "Tidy output from regular expression matching")
     (description
@@ -16056,9 +15983,7 @@ return the match results in tidy data frames.")
          "19savjzj44b7ifdxcp02ynj22z4n4ikq2aipc74ljzy3yykmqmjn"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ape" ,r-ape)
-       ("r-nlme" ,r-nlme)
-       ("r-vegan" ,r-vegan)))
+     (list r-ape r-nlme r-vegan))
     (home-page "https://cran.r-project.org/web/packages/picante/")
     (synopsis "Integrating phylogenies and ecology")
     (description
@@ -16085,10 +16010,7 @@ al. (2010).")
          "176z2q69p24i29a8sh19xxn2zl3h1z2ixdssr5i6m4yvkvdrvv3b"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-checkmate" ,r-checkmate)
-       ("r-nnet" ,r-nnet)
-       ("r-purrr" ,r-purrr)
-       ("r-r6" ,r-r6)))
+     (list r-checkmate r-nnet r-purrr r-r6))
     (home-page "https://markusdumke.github.io/reinforcelearn")
     (synopsis "Reinforcement learning")
     (description
@@ -16111,16 +16033,16 @@ can be used with function approximation, eligibility traces (Singh & Sutton,
          "1y3ljidhqdakxlya2npj2w0az820g8kw6gl1cfm4f0cxvzgd1ly4"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-gtable" ,r-gtable)
-       ("r-knitr" ,r-knitr)
-       ("r-lattice" ,r-lattice)
-       ("r-plyr" ,r-plyr)
-       ("r-rlang" ,r-rlang)
-       ("r-scales" ,r-scales)))
+     (list r-ggplot2
+           r-gridextra
+           r-gtable
+           r-knitr
+           r-lattice
+           r-plyr
+           r-rlang
+           r-scales))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/stefanedwards/lemon")
     (synopsis "Freshen up your ggplot2 plots")
     (description
@@ -16141,8 +16063,7 @@ extensions.")
         (base32 "1qiyfkpsbzjr9xsq5kqq6rlqpndngkn2irdfh3gyi45h6hn118j4"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-qtl" ,r-qtl)))
+     (list r-ggplot2 r-qtl))
     (home-page "https://cran.r-project.org/web/packages/wgaim")
     (synopsis "Whole genome average interval mapping for QTL detection")
     (description
@@ -16163,16 +16084,16 @@ whole genome approach to detecting significant QTL in linkage maps.")
          "0zpqvyjgwyqawxm8qrhcv8zq2b3yxgcqkkc87br29yrl7sjb8h6j"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)
-       ("r-r-utils" ,r-r-utils)
-       ("r-testthat" ,r-testthat)
-       ("r-venndiagram" ,r-venndiagram)
-       ("r-yaml" ,r-yaml)
-       ("bedops" ,bedops)
-       ("bedtools" ,bedtools)
-       ("htslib" ,htslib))) ; for tabix
+     (list r-data-table
+           r-r-utils
+           r-testthat
+           r-venndiagram
+           r-yaml
+           bedops
+           bedtools
+           htslib)) ; for tabix
     (native-inputs
-     `(("r-knitr" ,r-knitr))) ; for vignettes
+     (list r-knitr)) ; for vignettes
     (home-page "https://cran.r-project.org/web/packages/bedr")
     (synopsis "Genomic region processing")
     (description
@@ -16186,14 +16107,14 @@ additional utilities for genomic regions processing.")
 (define-public r-sets
   (package
     (name "r-sets")
-    (version "1.0-18")
+    (version "1.0-20")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "sets" version))
        (sha256
         (base32
-         "16v7650p47khqrbbw0z98llmwmmhswqmhri0n7nrfhdqwmby1lbl"))))
+         "1mkmqi3n1lh01k47yvkr0dlf4imqdi6d6bglx9bvrjmg816p4jr3"))))
     (properties `((upstream-name . "sets")))
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/web/packages/sets")
@@ -16217,9 +16138,7 @@ customizable sets, and intervals.")
          "1qqy4df28wy4q0g572azrj171jlhvrnzbh7x0wr2g7v6gr20y0ns"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-gmp" ,r-gmp)
-       ("r-polynom" ,r-polynom)
-       ("r-sets" ,r-sets)))
+     (list r-gmp r-polynom r-sets))
     (home-page "https://cran.r-project.org/web/packages/partitions")
     (synopsis "Additive partitions of integers")
     (description
@@ -16265,9 +16184,7 @@ methods.")
          "1i7m4vfslsix98dwx4jlrsldm7fhhfp25gr7aapcxqxms7ryaby6"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-brobdingnag" ,r-brobdingnag)
-       ("r-partitions" ,r-partitions)
-       ("r-polynom" ,r-polynom)))
+     (list r-brobdingnag r-partitions r-polynom))
     (home-page "https://github.com/RobinHankin/untb.git")
     (synopsis "Ecological drift under the UNTB")
     (description
@@ -16308,8 +16225,7 @@ breakpoints in a genomic sequence alignment.")
     (properties `((upstream-name . "SNPmaxsel")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-combinat" ,r-combinat)
-       ("r-mvtnorm" ,r-mvtnorm)))
+     (list r-combinat r-mvtnorm))
     (home-page "https://cran.r-project.org/web/packages/SNPmaxsel/index.html")
     (synopsis "Maximally selected statistics for SNP data")
     (description
@@ -16331,8 +16247,7 @@ data.")
     (properties `((upstream-name . "ACSNMineR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)))
+     (list r-ggplot2 r-gridextra))
     (home-page "https://cran.r-project.org/web/packages/ACSNMineR")
     (synopsis "Gene enrichment analysis")
     (description
@@ -16357,10 +16272,9 @@ barplots or heatmaps.")
          "1xz9spln6s9mcwpgcv1m4jymn4gnl1bb6vh90bphqcn0vvlk8jsq"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ade4" ,r-ade4)
-       ("r-segmented" ,r-segmented)))
+     (list r-ade4 r-segmented))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "http://seqinr.r-forge.r-project.org/")
     (synopsis "Biological sequences retrieval and analysis")
     (description
@@ -16382,11 +16296,11 @@ utilities for sequence data management under the ACNUC system.")
             "1ss0f15h4yqzk488ilsa5d2ibrj3wzwplx4160mn600i8ciy02xr"))))
     (build-system r-build-system)
     (inputs
-     `(("udunits" ,udunits)))
+     (list udunits))
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)))
+     (list r-rcpp))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/r-quantities/units/")
     (synopsis "Measurement Units for R Vectors")
     (description
@@ -16400,18 +16314,18 @@ classes.")
 (define-public r-udunits2
   (package
     (name "r-udunits2")
-    (version "0.13")
+    (version "0.13.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "udunits2" version))
        (sha256
         (base32
-         "0yav7rm2afcx67xqrknybxgz7x63w78zyxa0xifvc0k2gz0d6mfi"))))
+         "0sarkw5ciafiaq1haam8d8w0cmai63wrw2m4rcbjfa5k0648j07f"))))
     (properties `((upstream-name . "udunits2")))
     (build-system r-build-system)
     (inputs
-     `(("udunits" ,udunits)))
+     (list udunits))
     (home-page "https://cran.r-project.org/package=udunits2")
     (synopsis "Udunits-2 bindings for R")
     (description
@@ -16432,12 +16346,9 @@ classes.")
     (properties `((upstream-name . "classInt")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-class" ,r-class)
-       ("r-e1071" ,r-e1071)
-       ("r-kernsmooth" ,r-kernsmooth)))
+     (list r-class r-e1071 r-kernsmooth))
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("r-knitr" ,r-knitr)))
+     (list gfortran r-knitr))
     (home-page "https://github.com/r-spatial/classInt/")
     (synopsis "Choose univariate class intervals")
     (description
@@ -16448,19 +16359,18 @@ univariate class intervals for mapping or other graphics purposes.")
 (define-public r-spdata
   (package
     (name "r-spdata")
-    (version "0.3.10")
+    (version "2.0.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "spData" version))
        (sha256
         (base32
-         "0c3kg2daz65znnmcaf5l108c88anzlfrsjlnmv2kxqr1lx8z9zl5"))))
+         "1z4hp5ivwzyvl8mkp98j2ng1cl1xksqbjxv85vdlqfqjwpia6df6"))))
     (properties `((upstream-name . "spData")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-raster" ,r-raster)
-       ("r-sp" ,r-sp)))
+     (list r-raster r-sp))
     (home-page "https://github.com/Nowosad/spData")
     (synopsis "Datasets for spatial analysis")
     (description
@@ -16501,16 +16411,16 @@ sampling.")
 (define-public r-deldir
   (package
     (name "r-deldir")
-    (version "0.2-10")
+    (version "1.0-6")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "deldir" version))
        (sha256
         (base32
-         "08ij6zb6id71zk6gzs9z779y49y41c2gpi7p7mljnlw7py92g8k5"))))
+         "1igq0l2knsbhizncgydcsidgkvvlwwlkrifbcdyhnzk0bhrdixkd"))))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/deldir")
     (synopsis "Delaunay triangulation and Dirichlet (Voronoi) tessellation")
     (description
@@ -16525,18 +16435,16 @@ tessellation.")
 (define-public r-wk
   (package
     (name "r-wk")
-    (version "0.5.0")
+    (version "0.6.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "wk" version))
        (sha256
         (base32
-         "0fj2wzswv3dfninsyw9irf52fc2d0lag5b822x841vdfpvh01mbi"))))
+         "1xga4rrqsr190g55by39az4nimnn06bf5b6mcjgwqvba0lvjhb5g"))))
     (properties `((upstream-name . "wk")))
     (build-system r-build-system)
-    (propagated-inputs
-     `(("r-cpp11" ,r-cpp11)))
     (home-page "https://paleolimbot.github.io/wk/")
     (synopsis "Lightweight well-known geometry parsing")
     (description
@@ -16551,23 +16459,22 @@ high-performance functions are provided here.")
 (define-public r-s2
   (package
     (name "r-s2")
-    (version "1.0.6")
+    (version "1.0.7")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "s2" version))
        (sha256
         (base32
-         "1xd42bpbm090dqlldavbn6c1h1mfwhlws9536avan00w3szlxk56"))))
+         "0gwydn6wdl675ydkcckrci6ylcx30qn8nfhmrp4qx4r9mv3c2410"))))
     (properties `((upstream-name . "s2")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)
-       ("r-wk" ,r-wk)))
+     (list r-rcpp r-wk))
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://r-spatial.github.io/s2/")
     (synopsis "Spherical geometry operators using the S2 geometry library")
     (description
@@ -16582,31 +16489,26 @@ information about geometries.")
 (define-public r-sf
   (package
     (name "r-sf")
-    (version "1.0-2")
+    (version "1.0-5")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "sf" version))
        (sha256
         (base32
-         "0hh54krf4gjwrzxj2r3p5q7amdf8kblv8nm7hmbwmfv1rs30i1gc"))))
+         "1i0s9839m9zffad2aq6zgcpz0d61g68caqh9wxaxaxx7bvx2h319"))))
     (build-system r-build-system)
     (inputs
-     `(("gdal" ,gdal)
-       ("geos" ,geos)
-       ("proj" ,proj)
-       ("sqlite" ,sqlite)
-       ("zlib" ,zlib)))
+     (list gdal geos proj sqlite zlib))
     (propagated-inputs
-     `(("r-classint" ,r-classint)
-       ("r-dbi" ,r-dbi)
-       ("r-magrittr" ,r-magrittr)
-       ("r-rcpp" ,r-rcpp)
-       ("r-s2" ,r-s2)
-       ("r-units" ,r-units)))
+     (list r-classint
+           r-dbi
+           r-magrittr
+           r-rcpp
+           r-s2
+           r-units))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("r-knitr" ,r-knitr)))
+     (list pkg-config r-knitr))
     (home-page "https://github.com/r-spatial/sf/")
     (synopsis "Simple features for R")
     (description
@@ -16620,45 +16522,35 @@ datum transformations.")
 (define-public r-spdep
   (package
     (name "r-spdep")
-    (version "1.1-11")
+    (version "1.2-1")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "spdep" version))
               (sha256
                (base32
-                "1ym523dzpiji6c8ypa3gvw8va36gl1gnzcsvdg9drly3mlq42rpr"))
+                "1ya39bgmzagrk4k51zd96l4xvnbc2vzmvd0z9qprdfvg9s6pik78"))
               (snippet
-               '(for-each delete-file '("inst/doc/nb_igraph.html"
-                                        "inst/doc/nb_igraph.R"
-                                        "inst/doc/nb_igraph.Rmd"
-                                        "inst/doc/sids.html"
-                                        "inst/doc/sids.R"
+               '(for-each delete-file '("inst/doc/CO69.html"
+                                        "inst/doc/CO69.R"
                                         "inst/doc/nb.html"
                                         "inst/doc/nb.R"
-                                        "inst/doc/CO69.html"
-                                        "inst/doc/CO69.R"
                                         "inst/doc/nb_sf.html"
                                         "inst/doc/nb_sf.R"
-                                        "inst/doc/nb_sf.Rmd")))))
-    (build-system r-build-system)
-    (propagated-inputs
-     `(("r-boot" ,r-boot)
-       ("r-coda" ,r-coda)
-       ("r-deldir" ,r-deldir)
-       ("r-e1071" ,r-e1071)
-       ("r-expm" ,r-expm)
-       ("r-gmodels" ,r-gmodels)
-       ("r-learnbayes" ,r-learnbayes)
-       ("r-mass" ,r-mass)
-       ("r-matrix" ,r-matrix)
-       ("r-nlme" ,r-nlme)
-       ("r-s2" ,r-s2)
-       ("r-sf" ,r-sf)
-       ("r-sp" ,r-sp)
-       ("r-spdata" ,r-spdata)
-       ("r-units" ,r-units)))
+                                        "inst/doc/nb_sf.Rmd"
+                                        "inst/doc/sids.html"
+                                        "inst/doc/sids.R")))))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-boot
+           r-deldir
+           r-e1071
+           r-s2
+           r-sf
+           r-sp
+           r-spdata
+           r-units))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/r-spatial/spdep/")
     (synopsis "Spatial dependence: weighting schemes, statistics and models")
     (description
@@ -16672,28 +16564,27 @@ spanning tree.")
 (define-public r-adegenet
   (package
     (name "r-adegenet")
-    (version "2.1.4")
+    (version "2.1.5")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "adegenet" version))
        (sha256
         (base32
-         "0sxbw5l92xmkazndxbqaa2cxmgk8bqzzbk77q9li850s2i1fdssp"))))
+         "1wjp31634n6z6wglf4z3ydrhhn5jmpwwckmp3n2b0v5f3p2fivp4"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ade4" ,r-ade4)
-       ("r-ape" ,r-ape)
-       ("r-boot" ,r-boot)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-igraph" ,r-igraph)
-       ("r-mass" ,r-mass)
-       ("r-reshape2" ,r-reshape2)
-       ("r-seqinr" ,r-seqinr)
-       ("r-shiny" ,r-shiny)
-       ("r-spdep" ,r-spdep)
-       ("r-vegan" ,r-vegan)))
+     (list r-ade4
+           r-ape
+           r-boot
+           r-dplyr
+           r-ggplot2
+           r-igraph
+           r-mass
+           r-reshape2
+           r-seqinr
+           r-shiny
+           r-vegan))
     (home-page "https://github.com/thibautjombart/adegenet")
     (synopsis "Exploratory analysis of genetic and genomic data")
     (description
@@ -16711,17 +16602,16 @@ also provided to illustrate various methods.")
 (define-public r-pegas
   (package
     (name "r-pegas")
-    (version "1.0-1")
+    (version "1.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "pegas" version))
        (sha256
-        (base32 "0ykx84p7c8cad5d1mj8cm1d5cz2paacdjx4ll4qzmq827lcyycz1"))))
+        (base32 "0ngd0laqbs139ji9hm9kwsm9rm56agw2yyfcplxgqva936l93fl7"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-adegenet" ,r-adegenet)
-       ("r-ape" ,r-ape)))
+     (list r-ape))
     (home-page "http://ape-package.ird.fr/pegas.html")
     (synopsis "Population and evolutionary genetics analysis system")
     (description
@@ -16746,10 +16636,7 @@ minimum spanning tree and network, and median-joining networks.")
          "0rdkhfgyr97r2d1kd9g8ipb2pn563qxm1y4m9z678q0kqan2ddl0"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ade4" ,r-ade4)
-       ("r-adegenet" ,r-adegenet)
-       ("r-gtools" ,r-gtools)
-       ("r-pegas" ,r-pegas)))
+     (list r-ade4 r-adegenet r-gtools r-pegas))
     (home-page "https://cran.r-project.org/web/packages/rmetasim")
     (synopsis "Individual-based population genetic simulation environment")
     (description
@@ -16773,11 +16660,7 @@ genetics of complex population dynamics.")
          "0lljxvz7nc6y2z303icphar2niir0i407w5cyhy2pwspd9gwkwpy"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-combinat" ,r-combinat)
-       ("r-gdata" ,r-gdata)
-       ("r-gtools" ,r-gtools)
-       ("r-mass" ,r-mass)
-       ("r-mvtnorm" ,r-mvtnorm)))
+     (list r-combinat r-gdata r-gtools r-mass r-mvtnorm))
     (home-page "https://cran.r-project.org/web/packages/genetics/")
     (synopsis "Population genetics")
     (description
@@ -16803,7 +16686,7 @@ and testing for linkage disequilibrium, ...")
          "16apsqvkah5l0d5qcwp3lq2jspkb6n62wzr0wskmj84jblx483vv"))))
     (properties `((upstream-name . "snp.plotter")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-genetics" ,r-genetics)))
+    (propagated-inputs (list r-genetics))
     (home-page "https://cran.r-project.org/web/packages/snp.plotter/")
     (synopsis "Plot p-values using single SNP and/or haplotype data")
     (description
@@ -16826,7 +16709,7 @@ either PDF/EPS files.")
        (sha256
         (base32 "0rhzf735hmbqfn2xbgcln4sqx7m9far72g5gq9mghgkw016kqglm"))))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/polspline/")
     (synopsis "Polynomial spline routines")
     (description
@@ -16847,22 +16730,22 @@ lspec, polyclass, and polymars.")
         (base32 "1di4xvsx0rwkr77nfqiysbg4qf699199xqil70i39d4zwfzqrm8h"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cluster" ,r-cluster)
-       ("r-digest" ,r-digest)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-hmisc" ,r-hmisc)
-       ("r-htmltable" ,r-htmltable)
-       ("r-htmltools" ,r-htmltools)
-       ("r-lattice" ,r-lattice)
-       ("r-mass" ,r-mass)
-       ("r-multcomp" ,r-multcomp)
-       ("r-nlme" ,r-nlme)
-       ("r-polspline" ,r-polspline)
-       ("r-quantreg" ,r-quantreg)
-       ("r-rpart" ,r-rpart)
-       ("r-sparsem" ,r-sparsem)
-       ("r-survival" ,r-survival)))
-    (native-inputs `(("gfortran" ,gfortran)))
+     (list r-cluster
+           r-digest
+           r-ggplot2
+           r-hmisc
+           r-htmltable
+           r-htmltools
+           r-lattice
+           r-mass
+           r-multcomp
+           r-nlme
+           r-polspline
+           r-quantreg
+           r-rpart
+           r-sparsem
+           r-survival))
+    (native-inputs (list gfortran))
     (home-page "http://biostat.mc.vanderbilt.edu/rms")
     (synopsis "Regression modeling strategies")
     (description
@@ -16894,8 +16777,8 @@ generalized linear models, and quantile regression.")
          "0qvs3ld28djnjnggdhqjwq8sbv8zz322qahlvf7dnx35yqf6xkms"))))
     (properties `((upstream-name . "arsenal")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-knitr" ,r-knitr)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+    (propagated-inputs (list r-knitr))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/mayoverse/arsenal")
     (synopsis "Functions for large-scale statistical summaries")
     (description
@@ -16934,10 +16817,9 @@ include
     (properties `((upstream-name . "haplo.stats")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-arsenal" ,r-arsenal)
-       ("r-rms" ,r-rms)))
+     (list r-arsenal r-rms))
     (native-inputs
-     `(("r-r-rsp" ,r-r-rsp))) ; for vignettes
+     (list r-r-rsp)) ; for vignettes
     (home-page "https://www.mayo.edu/research/labs/statistical-genetics-genetic-epidemiology/software")
     (synopsis "Analysis of haplotypes when linkage phase is ambiguous")
     (description
@@ -16961,7 +16843,7 @@ examples in the vignette.")
         (base32
          "1sbzpi9z94f010lw2y1gmifjrvpmiqs4m26za7vr1xz72azrqvs9"))))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "http://famprevmed.ucsd.edu/faculty/cberry/bqtl/")
     (synopsis "Bayesian QTL mapping toolkit")
     (description
@@ -17004,11 +16886,7 @@ the same pedigree.")
          "0s6wlkggkm3qndwyvw72xv1n0mcjb7ss3ajbq2ll6rv30splq0db"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ibdreg" ,r-ibdreg)
-       ("r-mgcv" ,r-mgcv)
-       ("r-nlme" ,r-nlme)
-       ("r-qtl" ,r-qtl)
-       ("r-wgaim" ,r-wgaim)))
+     (list r-ibdreg r-mgcv r-nlme r-qtl r-wgaim))
     (home-page "https://cran.r-project.org/web/packages/dlmap/")
     (synopsis "Detection localization mapping for QTL")
     (description
@@ -17077,8 +16955,7 @@ tests for extended marker haplotypes, as in Clayton, D. and Jones, H. (1999)
     (properties `((upstream-name . "SPARQL")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcurl" ,r-rcurl)
-       ("r-xml" ,r-xml)))
+     (list r-rcurl r-xml))
     (home-page "https://cran.r-project.org/web/packages/SPARQL")
     (synopsis "SPARQL client for R")
     (description "This package provides an interface to use SPARQL to pose
@@ -17099,14 +16976,14 @@ SELECT or UPDATE queries to an end-point.")
                 "1qqvvfbpbd6sin8vpvr3zzlhlyx1i6b98yp77xj5zl220nid5slb"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-htmltools" ,r-htmltools)
-       ("r-jquerylib" ,r-jquerylib)
-       ("r-knitr" ,r-knitr)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("r-tinytex" ,r-tinytex)
-       ("r-xfun" ,r-xfun)
-       ("r-yaml" ,r-yaml)
-       ("pandoc" ,pandoc)))
+     (list r-htmltools
+           r-jquerylib
+           r-knitr
+           r-rmarkdown
+           r-tinytex
+           r-xfun
+           r-yaml
+           pandoc))
     ;; We cannot add knitr because this package depends on xfun, which is an
     ;; input to knitr.
     #;
@@ -17121,19 +16998,19 @@ authoring books and technical documents with R Markdown.")
 (define-public r-optparse
   (package
     (name "r-optparse")
-    (version "1.6.6")
+    (version "1.7.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "optparse" version))
        (sha256
         (base32
-         "1l301dy3gc8pn7j00awcjh41wmc1ks9kswak255kbsa6f54rsxsi"))))
+         "1rqz0y4r94y3mwbb9kyz97cjqpnprka96qbncvbnbmgg2d630kij"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-getopt" ,r-getopt)))
+     (list r-getopt))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/trevorld/optparse")
     (synopsis "Command line option parser")
     (description
@@ -17166,22 +17043,19 @@ and a QP solver.")
 (define-public r-hierfstat
   (package
     (name "r-hierfstat")
-    (version "0.5-7")
+    (version "0.5-10")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "hierfstat" version))
        (sha256
         (base32
-         "0dp8k1z5a8gqnax99y1hwfvxilzf4n2i751zr0z6ihrzirsvb3m3"))))
+         "1p4vlna185sa3b5xjbysiqxcj9aa5s7dmxy41hg79vlqdivf874r"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ade4" ,r-ade4)
-       ("r-adegenet" ,r-adegenet)
-       ("r-gaston" ,r-gaston)
-       ("r-gtools" ,r-gtools)))
+     (list r-ade4 r-adegenet r-gaston r-gtools))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/hierfstat/")
     (synopsis "Estimation and tests of hierarchical F-statistics")
     (description
@@ -17227,8 +17101,7 @@ handle missing genotypes at some SNPs.")
          "11xis4vzn2ga8ml9xrgfgqzccvwbnabq35aidzdvpnvciybsanvz"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lpsolve" ,r-lpsolve)
-       ("r-mass" ,r-mass)))
+     (list r-lpsolve r-mass))
     (home-page "https://cran.r-project.org/web/packages/sampling/")
     (synopsis "Survey sampling")
     (description
@@ -17264,14 +17137,14 @@ the corresponding outputs (tables and graphs).")
 (define-public r-rjava
   (package
     (name "r-rjava")
-    (version "1.0-5")
+    (version "1.0-6")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "rJava" version))
        (sha256
         (base32
-         "1pkgndppk498by44sai440l3i7vzndknbngn1q748cv39xvsbnrg"))))
+         "1ijqhvnb8ab38cp9pwdf7zq7xqqlm6x94gkrab2dd98p6d4x1472"))))
     (properties `((upstream-name . "rJava")))
     (build-system r-build-system)
     (arguments
@@ -17310,18 +17183,18 @@ and accessing fields.")
 (define-public r-svmisc
   (package
     (name "r-svmisc")
-    (version "1.1.4")
+    (version "1.2.3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "svMisc" version))
        (sha256
         (base32
-         "0y8mhiblyzwads4gf4whmxi7c6wdmqs3ahbj132l79bbdk40p83a"))))
+         "1r3kih5bnr4plnzdn5f2gg3xl3krgyl7gkdlf58a2l8vk13j3m9d"))))
     (properties `((upstream-name . "svMisc")))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/SciViews/svMisc")
     (synopsis "Miscellaneous functions for SciViews")
     (description
@@ -17344,7 +17217,7 @@ path for temporary variables you do not want to @code{save()} or
          "13w4sb4pvgciwr8wsz785dafj2k2kpx7znz46r5d32wx88vkycp4"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)))
+     (list r-rcpp))
     (home-page "https://cran.r-project.org/web/packages/xyz/")
     (synopsis "Algorithm for fast interaction search in high-dimensional data")
     (description
@@ -17411,8 +17284,7 @@ interaction search in high-dimensional data.")
          "0b9k2n9sk23bh45hjgnkxpjyvpdrz1hx7kmxvmb4nhlhm1wpsv9g"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-extrafontdb" ,r-extrafontdb)
-       ("r-rttf2pt1" ,r-rttf2pt1)))
+     (list r-extrafontdb r-rttf2pt1))
     (home-page "https://github.com/wch/extrafont")
     (synopsis "Tools for using fonts in R")
     (description
@@ -17444,9 +17316,7 @@ The extrafont package makes both of these things easier.")
          "1z2y0ihn68ppay7xkglhw7djki5654g6z4bbpyy41if57z9q554f"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-extrafont" ,r-extrafont)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-hmisc" ,r-hmisc)))
+     (list r-extrafont r-ggplot2 r-hmisc))
     (home-page "https://cran.r-project.org/web/packages/xkcd/")
     (synopsis "Plot ggplot2 graphics in the XKCD style")
     (description
@@ -17468,10 +17338,9 @@ the XKCD web comic.")
     (properties `((upstream-name . "babelgene")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-rlang" ,r-rlang)))
+     (list r-dplyr r-rlang))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page
      "https://igordot.github.io/babelgene/")
     (synopsis "Gene orthologs for model organisms in a Tidy data format")
@@ -17498,14 +17367,14 @@ compiled by the HGNC Comparison of Orthology Predictions (HCOP).")
          "103m52av68pkjfh8f81qh6j3cs1mj1lg831ciwybr34cax767jr1"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-babelgene" ,r-babelgene)
-       ("r-dplyr" ,r-dplyr)
-       ("r-magrittr" ,r-magrittr)
-       ("r-rlang" ,r-rlang)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyselect" ,r-tidyselect)))
+     (list r-babelgene
+           r-dplyr
+           r-magrittr
+           r-rlang
+           r-tibble
+           r-tidyselect))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/igordot/msigdbr")
     (synopsis "MSigDB gene sets for multiple organisms")
     (description
@@ -17570,14 +17439,14 @@ package.")
 (define-public r-yulab-utils
   (package
     (name "r-yulab-utils")
-    (version "0.0.2")
+    (version "0.0.4")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "yulab.utils" version))
        (sha256
         (base32
-         "1haq6k0r64gs76p2vvrm42m64r8s32kzyz573pw9789y32zn0s5q"))))
+         "1bj93gnj7j4b7dgkbr5v22rsbwfcw5dvipl5irmidaakvrihd19q"))))
     (properties `((upstream-name . "yulab.utils")))
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/package=yulab.utils")
@@ -17600,11 +17469,9 @@ package.")
          "12mk3fa8fdjxj7xxz21jkr7h91w5wdgwjqhszcz1qffwsgb773qp"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-gridgraphics" ,r-gridgraphics)
-       ("r-yulab-utils" ,r-yulab-utils)))
+     (list r-ggplot2 r-gridgraphics r-yulab-utils))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/GuangchuangYu/ggplotify")
     (synopsis "Convert plots to @code{grob} or @code{ggplot} object")
     (description
@@ -17628,7 +17495,7 @@ converting them to @code{ggplot} objects.")
         (base32
          "1hqyz57gph02c9fdc07lxz113bbklif3g18sw8jan6pakhhdc7dz"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-rcpp" ,r-rcpp)))
+    (propagated-inputs (list r-rcpp))
     (home-page "https://github.com/Ironholds/triebeard/")
     (synopsis "Radix trees in Rcpp")
     (description
@@ -17651,10 +17518,7 @@ packages with Rcpp.")
          "17znizh4yabh2zs9mzyr0sl6p0pw49961i61br7cl1b7v9sza18q"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-farver" ,r-farver)
-       ("r-magrittr" ,r-magrittr)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rlang" ,r-rlang)))
+     (list r-farver r-magrittr r-rcpp r-rlang))
     (home-page "https://github.com/thomasp85/tweenr")
     (synopsis "Interpolate data for smooth animations")
     (description
@@ -17677,7 +17541,7 @@ color.")
         (base32
          "0jyk4maqiblvj095jd59dr76kbniyli3v3xvy0a72ljszq6vrnkl"))))
     (build-system r-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "http://www.angusj.com/delphi/clipper.php")
     (synopsis "Polygon clipping")
     (description
@@ -17703,8 +17567,7 @@ self-intersections from polygon data.")
          "04x3my655dd287cbsszbnf75q0swmjlxxrblcsay7a8n3df3a830"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)
-       ("r-triebeard" ,r-triebeard)))
+     (list r-rcpp r-triebeard))
     (home-page "https://github.com/Ironholds/urltools/")
     (synopsis "Vectorized tools for URL handling and parsing")
     (description
@@ -17729,17 +17592,17 @@ sets of URLs.")
          "0bwzjbjl678xvc2ihm80dwn9pidwafqjdab3k299csys16s3na1a"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-gtable" ,r-gtable)
-       ("r-mass" ,r-mass)
-       ("r-polyclip" ,r-polyclip)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcppeigen" ,r-rcppeigen)
-       ("r-rlang" ,r-rlang)
-       ("r-scales" ,r-scales)
-       ("r-tidyselect" ,r-tidyselect)
-       ("r-tweenr" ,r-tweenr)
-       ("r-withr" ,r-withr)))
+     (list r-ggplot2
+           r-gtable
+           r-mass
+           r-polyclip
+           r-rcpp
+           r-rcppeigen
+           r-rlang
+           r-scales
+           r-tidyselect
+           r-tweenr
+           r-withr))
     (home-page "https://ggforce.data-imaginist.com")
     (synopsis "Accelerating ggplot2")
     (description
@@ -17762,19 +17625,19 @@ that fills this gap.")
          "16japbndid34shqg8n0bmjrxn84xmhrylvz832zclcllm6i93fn1"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-httr" ,r-httr)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-plyr" ,r-plyr)
-       ("r-progress" ,r-progress)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)
-       ("r-urltools" ,r-urltools)
-       ("r-xml2" ,r-xml2)))
+     (list r-dplyr
+           r-httr
+           r-jsonlite
+           r-plyr
+           r-progress
+           r-purrr
+           r-rlang
+           r-tibble
+           r-tidyr
+           r-urltools
+           r-xml2))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/ropensci/europepmc/")
     (synopsis "R Interface to the Europe PubMed Central RESTful Web Service")
     (description
@@ -17802,23 +17665,23 @@ databases, including ENA, PDB or ChEMBL are also accessible.")
          "0m4n8iw2b9jk8hcy5blg5w59zsqcpsbv27wbw598dvljpafx8sp3"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-digest" ,r-digest)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ggforce" ,r-ggforce)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggrepel" ,r-ggrepel)
-       ("r-graphlayouts" ,r-graphlayouts)
-       ("r-gtable" ,r-gtable)
-       ("r-igraph" ,r-igraph)
-       ("r-mass" ,r-mass)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rlang" ,r-rlang)
-       ("r-scales" ,r-scales)
-       ("r-tidygraph" ,r-tidygraph)
-       ("r-viridis" ,r-viridis)
-       ("r-withr" ,r-withr)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-digest
+           r-dplyr
+           r-ggforce
+           r-ggplot2
+           r-ggrepel
+           r-graphlayouts
+           r-gtable
+           r-igraph
+           r-mass
+           r-rcpp
+           r-rlang
+           r-scales
+           r-tidygraph
+           r-viridis
+           r-withr))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/ggraph/")
     (synopsis "Implementation of grammar of graphics for graphs and networks")
     (description
@@ -17843,10 +17706,7 @@ layer by layer.")
     (properties `((upstream-name . "gkmSVM")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-kernlab" ,r-kernlab)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rocr" ,r-rocr)
-       ("r-seqinr" ,r-seqinr)))
+     (list r-kernlab r-rcpp r-rocr r-seqinr))
     (home-page "https://cran.r-project.org/web/packages/gkmSVM")
     (synopsis "Gapped-kmer support vector machine")
     (description
@@ -17869,7 +17729,7 @@ kernels, including: gkmSVM, kmer-SVM, mismatch kernel and wildcard kernel.")
     (properties `((upstream-name . "varSelRF")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-randomforest" ,r-randomforest)))
+     (list r-randomforest))
     (home-page "https://www.ligarto.org/rdiaz/software/software")
     (synopsis "Variable selection using random forests")
     (description
@@ -17895,9 +17755,8 @@ proteomics applications).")
          "0ycpgkk23y3zzkb42n2skcyl35ps1n7jmyzfj7pbxr3f6gr2grfh"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cluster" ,r-cluster)
-       ("r-survival" ,r-survival)))
-    (native-inputs `(("gfortran" ,gfortran)))
+     (list r-cluster r-survival))
+    (native-inputs (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/pamr/")
     (synopsis "Prediction Analysis for Microarrays")
     (description
@@ -17937,13 +17796,13 @@ discriminant analysis for the purpose of classifying high dimensional data.")
          "1qv512pd4x5vmx15y9nvqmabbbw14h75fmi1sjbcg5yl25z0cswy"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertthat" ,r-assertthat)
-       ("r-dplyr" ,r-dplyr)
-       ("r-htmltools" ,r-htmltools)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-magrittr" ,r-magrittr)
-       ("r-rlang" ,r-rlang)
-       ("r-shiny" ,r-shiny)))
+     (list r-assertthat
+           r-dplyr
+           r-htmltools
+           r-jsonlite
+           r-magrittr
+           r-rlang
+           r-shiny))
     (home-page "https://ggvis.rstudio.com/")
     (synopsis "Interactive grammar of graphics")
     (description
@@ -17966,10 +17825,9 @@ graphics using Vega.")
          "1h9f4ww9yc3nsvghgr2q7jjrlz29ibabxjbax1sk5wmqh2wy6pbx"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lattice" ,r-lattice)
-       ("r-survival" ,r-survival)))
+     (list r-lattice r-survival))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/gbm-developers/gbm")
     (synopsis "Generalized boosted regression models")
     (description
@@ -18022,10 +17880,7 @@ and Learning to Rank measures (LambdaMart).")
                              sources targets))))
              #t)))))
     (propagated-inputs
-     `(("r-base64enc" ,r-base64enc)
-       ("r-crosstalk" ,r-crosstalk)
-       ("r-htmlwidgets" ,r-htmlwidgets)
-       ("r-igraph" ,r-igraph)))
+     (list r-base64enc r-crosstalk r-htmlwidgets r-igraph))
     (native-inputs
      `(("uglifyjs" ,node-uglify-js)
        ("js-jquery"
@@ -18082,8 +17937,7 @@ repository.")
          "0wijw8v0wmbfrda5564cmnp788qmlkk21yn5cp5qk8aprm9l1fnk"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-kernsmooth" ,r-kernsmooth)
-       ("r-mass" ,r-mass)))
+     (list r-kernsmooth r-mass))
     (home-page "http://mpm.r-forge.r-project.org")
     (synopsis "Multivariate projection methods")
     (description
@@ -18105,8 +17959,7 @@ analysis.")
                 "0g2mcp55lvvpx4kd3mn225mpbxqcq73wy5qx8b4lyf04iybgysg2"))))
     (build-system r-build-system)
     (inputs
-     `(("libpng" ,libpng)
-       ("zlib" ,zlib)))
+     (list libpng zlib))
     (home-page "https://www.rforge.net/png/")
     (synopsis "Read and write PNG images")
     (description
@@ -18129,8 +17982,7 @@ in-memory raw vectors.")
          "0hi9lz121ya1l2lbm7rqlxg6fs6bvxck396dngnidrhl5fvqb41b"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-reshape2" ,r-reshape2)))
+     (list r-ggplot2 r-reshape2))
     (home-page "http://www.sthda.com/english/wiki/ggcorrplot")
     (synopsis "Visualization of a correlation matrix using ggplot2")
     (description
@@ -18143,20 +17995,19 @@ function for computing a matrix of correlation p-values.")
 (define-public r-ggfun
   (package
     (name "r-ggfun")
-    (version "0.0.4")
+    (version "0.0.5")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "ggfun" version))
        (sha256
         (base32
-         "07njcjcj212zxanq8x3nkh7mgvqmym08rx5s41rz9flhk9gkc9jr"))))
+         "10spayf5jzmizhs6aassjplrjr9mr6bcww30pyxzyb1djfl41qxi"))))
     (properties `((upstream-name . "ggfun")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-rlang" ,r-rlang)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-ggplot2 r-rlang))
+    (native-inputs (list r-knitr))
     (home-page "https://cran.r-project.org/package=ggfun")
     (synopsis "Miscellaneous functions for ggplot2")
     (description
@@ -18179,14 +18030,14 @@ each of the legends).")
     (properties `((upstream-name . "gridtext")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-jpeg" ,r-jpeg)
-       ("r-markdown" ,r-markdown)
-       ("r-png" ,r-png)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcurl" ,r-rcurl)
-       ("r-rlang" ,r-rlang)
-       ("r-stringr" ,r-stringr)
-       ("r-xml2" ,r-xml2)))
+     (list r-jpeg
+           r-markdown
+           r-png
+           r-rcpp
+           r-rcurl
+           r-rlang
+           r-stringr
+           r-xml2))
     (home-page "https://wilkelab.org/gridtext/")
     (synopsis "Improved text rendering support for Grid graphics")
     (description
@@ -18210,11 +18061,8 @@ wrap.")
     (properties `((upstream-name . "ggtext")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-gridtext" ,r-gridtext)
-       ("r-rlang" ,r-rlang)
-       ("r-scales" ,r-scales)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-ggplot2 r-gridtext r-rlang r-scales))
+    (native-inputs (list r-knitr))
     (home-page "https://wilkelab.org/ggtext/")
     (synopsis "Improved text rendering support for ggplot2")
     (description
@@ -18294,12 +18142,12 @@ etc.).  Text boxes with automatic word wrap are also supported.")
                              sources targets))))
              #t)))))
     (propagated-inputs
-     `(("r-htmltools" ,r-htmltools)
-       ("r-htmlwidgets" ,r-htmlwidgets)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-knitr" ,r-knitr)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("r-shiny" ,r-shiny)))
+     (list r-htmltools
+           r-htmlwidgets
+           r-jsonlite
+           r-knitr
+           r-rmarkdown
+           r-shiny))
     (native-inputs
      `(("uglifyjs" ,node-uglify-js)
        ("js-raphael"
@@ -18359,7 +18207,7 @@ of its components to the containing web page.")
     (properties `((upstream-name . "preseqR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-polynom" ,r-polynom)))
+     (list r-polynom))
     (home-page "https://cran.r-project.org/web/packages/preseqR/")
     (synopsis "Predicting species accumulation curves")
     (description
@@ -18395,14 +18243,14 @@ more generic data visualisation.")
 (define-public r-pmcmr
   (package
     (name "r-pmcmr")
-    (version "4.3")
+    (version "4.4")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "PMCMR" version))
        (sha256
         (base32
-         "09bvdj2h1086r2cgy3myrhlylplxxlliv8nwx09c8kb1vn02i2ij"))))
+         "05n13pp5yff6pzk4ry07crddfaj3jlglrd1vkcnacyd8jpaxkd77"))))
     (properties `((upstream-name . "PMCMR")))
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/web/packages/PMCMR/")
@@ -18427,7 +18275,7 @@ compatibility of dependent packages for some time.")
          "1axggnsc27zzgr7snf41j3zd1vp3nfpmq4zj4d01axc709dyg40q"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-digest" ,r-digest)))
+     (list r-digest))
     (home-page "https://github.com/wch/downloader")
     (synopsis "Download files over HTTP and HTTPS")
     (description
@@ -18440,23 +18288,23 @@ external dependencies.  This package has is implemented purely in R.")
 (define-public r-aplot
   (package
     (name "r-aplot")
-    (version "0.1.1")
+    (version "0.1.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "aplot" version))
        (sha256
         (base32
-         "067yzy35spvs6jbccqpmvnjilglxzda6qqlqhjv311kfvnppzsyf"))))
+         "1w09flb6a4fxibfrm1z24pg672r80b7phgc0m7mv3vfw3l84v749"))))
     (properties `((upstream-name . "aplot")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggfun" ,r-ggfun)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggplotify" ,r-ggplotify)
-       ("r-magrittr" ,r-magrittr)
-       ("r-patchwork" ,r-patchwork)
-       ("r-yulab-utils" ,r-yulab-utils)))
+     (list r-ggfun
+           r-ggplot2
+           r-ggplotify
+           r-magrittr
+           r-patchwork
+           r-yulab-utils))
     (home-page "https://github.com/YuLab-SMU/aplot")
     (synopsis "Decorate a ggplot with associated information")
     (description
@@ -18481,7 +18329,7 @@ matched.")
     (properties `((upstream-name . "ggnewscale")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)))
+     (list r-ggplot2))
     (home-page "https://cran.r-project.org/package=ggnewscale")
     (synopsis "Multiple fill and color scales in ggplot2")
     (description
@@ -18503,7 +18351,7 @@ matched.")
      `((upstream-name . "ggpointdensity")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)))
+     (list r-ggplot2))
     (home-page "https://github.com/LKremer/ggpointdensity")
     (synopsis "Cross between a 2D density plot and a scatter plot")
     (description
@@ -18516,30 +18364,28 @@ colored by the number of neighboring points.  This is useful to visualize the
 (define-public r-arrow
   (package
     (name "r-arrow")
-    (version "5.0.0.2")
+    (version "6.0.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "arrow" version))
        (sha256
         (base32
-         "1ajkcmasj22j5k15ms7iyd1rg9qpdj5jya6nmhzh8z4iiv7gy13j"))))
+         "14fghz9xijcrck0c65crvfidgyhgzy9b2apwmg7qrgn2sy09xm0p"))))
     (properties `((upstream-name . "arrow")))
     (build-system r-build-system)
     (inputs
-     `(("apache-arrow" ,apache-arrow "lib")
-       ("zlib" ,zlib)))
+     (list `(,apache-arrow "lib") zlib))
     (propagated-inputs
-     `(("r-assertthat" ,r-assertthat)
-       ("r-bit64" ,r-bit64)
-       ("r-purrr" ,r-purrr)
-       ("r-r6" ,r-r6)
-       ("r-rlang" ,r-rlang)
-       ("r-tidyselect" ,r-tidyselect)
-       ("r-vctrs" ,r-vctrs)))
+     (list r-assertthat
+           r-bit64
+           r-purrr
+           r-r6
+           r-rlang
+           r-tidyselect
+           r-vctrs))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("r-knitr" ,r-knitr)))
+     (list pkg-config r-knitr))
     (home-page "https://github.com/apache/arrow/")
     (synopsis "R integration to Apache Arrow")
     (description
@@ -18553,19 +18399,19 @@ library.")
 (define-public r-rex
   (package
     (name "r-rex")
-    (version "1.2.0")
+    (version "1.2.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "rex" version))
        (sha256
         (base32
-         "0m7bq8db3m5dhf01rw7xc7xy1ciq3m7dfgsl80p8cy4h8vqr3d06"))))
+         "1mmzlc3j7xa0rbjxa369f4sr0iw3gq58g8fmjjxbsjvfq14ychmg"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lazyeval" ,r-lazyeval)))
+     (list r-lazyeval))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/kevinushey/rex")
     (synopsis "Friendly regular expressions")
     (description
@@ -18589,10 +18435,9 @@ regular expressions from human readable expressions")
     (properties `((upstream-name . "mlapi")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-matrix" ,r-matrix)
-       ("r-r6" ,r-r6)))
+     (list r-matrix r-r6))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/package=mlapi")
     (synopsis "Abstract classes for building scikit-learn like API")
     (description
@@ -18616,7 +18461,7 @@ industry for machine learning tasks.")
     (properties `((upstream-name . "float")))
     (build-system r-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://github.com/wrathematics/float")
     (synopsis "32-bit floats")
     (description
@@ -18632,24 +18477,25 @@ on, for a performance vs accuracy trade-off.")
 (define-public r-rsparse
   (package
     (name "r-rsparse")
-    (version "0.4.0")
+    (version "0.5.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "rsparse" version))
        (sha256
         (base32
-         "1blg59gsidh0sn6yy761pisz2phml0hzgqc24s5s8q9q903rddr9"))))
+         "0d05h47j29zipyxbkv9cwzv2dzj894z6hh9dqfhwswwjbv6ciwpq"))))
     (properties `((upstream-name . "rsparse")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)
-       ("r-float" ,r-float)
-       ("r-lgr" ,r-lgr)
-       ("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-rhpcblasctl" ,r-rhpcblasctl)))
+     (list r-data-table
+           r-float
+           r-lgr
+           r-matrix
+           r-matrixextra
+           r-rcpp
+           r-rcpparmadillo
+           r-rhpcblasctl))
     (home-page "https://github.com/rexyai/rsparse")
     (synopsis "Statistical learning on sparse matrices")
     (description
@@ -18675,17 +18521,17 @@ Row} (CSR) format.")
     (properties `((upstream-name . "text2vec")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)
-       ("r-digest" ,r-digest)
-       ("r-lgr" ,r-lgr)
-       ("r-matrix" ,r-matrix)
-       ("r-mlapi" ,r-mlapi)
-       ("r-r6" ,r-r6)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rsparse" ,r-rsparse)
-       ("r-stringi" ,r-stringi)))
+     (list r-data-table
+           r-digest
+           r-lgr
+           r-matrix
+           r-mlapi
+           r-r6
+           r-rcpp
+           r-rsparse
+           r-stringi))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "http://text2vec.org")
     (synopsis "Text mining framework for R")
     (description
@@ -18700,22 +18546,18 @@ multicore machines.")
 (define-public r-mcmcpack
   (package
     (name "r-mcmcpack")
-    (version "1.5-0")
+    (version "1.6-0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "MCMCpack" version))
        (sha256
         (base32
-         "1khavqsimiwbfq7gyw5jyj67jxfd579pnc7mngnd655zc8yzspvr"))))
+         "16zjx8yz29ii75wfxj3p562l657bng8jnwzp2b54s7fiaws4kfdm"))))
     (properties `((upstream-name . "MCMCpack")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-coda" ,r-coda)
-       ("r-lattice" ,r-lattice)
-       ("r-mass" ,r-mass)
-       ("r-mcmc" ,r-mcmc)
-       ("r-quantreg" ,r-quantreg)))
+     (list r-coda r-lattice r-mass r-mcmc r-quantreg))
     (home-page "https://cran.r-project.org/package=MCMCpack")
     (synopsis "Markov Chain Monte Carlo (MCMC) package")
     (description
@@ -18764,11 +18606,7 @@ provided.")
     (properties `((upstream-name . "cyclocomp")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-callr" ,r-callr)
-       ("r-crayon" ,r-crayon)
-       ("r-desc" ,r-desc)
-       ("r-remotes" ,r-remotes)
-       ("r-withr" ,r-withr)))
+     (list r-callr r-crayon r-desc r-remotes r-withr))
     (home-page "https://github.com/MangoTheCat/cyclocomp")
     (synopsis "Cyclomatic complexity of R code")
     (description
@@ -18792,18 +18630,18 @@ provides tools to compute this metric.")
     (properties `((upstream-name . "lintr")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-codetools" ,r-codetools)
-       ("r-crayon" ,r-crayon)
-       ("r-cyclocomp" ,r-cyclocomp)
-       ("r-digest" ,r-digest)
-       ("r-httr" ,r-httr)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-knitr" ,r-knitr)
-       ("r-rex" ,r-rex)
-       ("r-rstudioapi" ,r-rstudioapi)
-       ("r-testthat" ,r-testthat)
-       ("r-xml2" ,r-xml2)
-       ("r-xmlparsedata" ,r-xmlparsedata)))
+     (list r-codetools
+           r-crayon
+           r-cyclocomp
+           r-digest
+           r-httr
+           r-jsonlite
+           r-knitr
+           r-rex
+           r-rstudioapi
+           r-testthat
+           r-xml2
+           r-xmlparsedata))
     (home-page "https://github.com/jimhester/lintr")
     (synopsis "Linter for R code")
     (description "This package checks adherence to a given style, syntax
@@ -18814,26 +18652,29 @@ code edited with @code{RStudio IDE}, @code{Emacs} and @code{Vim}.")
 (define-public r-sctransform
   (package
     (name "r-sctransform")
-    (version "0.3.2")
+    (version "0.3.3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "sctransform" version))
        (sha256
         (base32
-         "1p3m6i28nlxh6r609syn88cwlbdpl3dw44dy3gsijk2ibq20mfsx"))))
+         "0aqbcarsvvzkh5h4i65f08y4b8dfcs3zi62hmvfy24gj81f15bw3"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-future" ,r-future)
-       ("r-future-apply" ,r-future-apply)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-mass" ,r-mass)
-       ("r-matrix" ,r-matrix)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-reshape2" ,r-reshape2)))
+     (list r-dplyr
+           r-future
+           r-future-apply
+           r-ggplot2
+           r-gridextra
+           r-magrittr
+           r-mass
+           r-matrix
+           r-matrixstats
+           r-rcpp
+           r-rcpparmadillo
+           r-reshape2
+           r-rlang))
     (home-page "https://github.com/ChristophH/sctransform")
     (synopsis "Variance stabilizing transformations for Single Cell UMI Data")
     (description
@@ -18862,20 +18703,20 @@ batch correction, and data correction.")
          (add-after 'unpack 'set-HOME
            (lambda _ (setenv "HOME" "/tmp"))))))
     (propagated-inputs
-     `(("r-backports" ,r-backports)
-       ("r-cli" ,r-cli)
-       ("r-glue" ,r-glue)
-       ("r-magrittr" ,r-magrittr)
-       ("r-purrr" ,r-purrr)
-       ("r-r-cache" ,r-r-cache)
-       ("r-rematch2" ,r-rematch2)
-       ("r-rlang" ,r-rlang)
-       ("r-rprojroot" ,r-rprojroot)
-       ("r-tibble" ,r-tibble)
-       ("r-withr" ,r-withr)
-       ("r-xfun" ,r-xfun)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-backports
+           r-cli
+           r-glue
+           r-magrittr
+           r-purrr
+           r-r-cache
+           r-rematch2
+           r-rlang
+           r-rprojroot
+           r-tibble
+           r-withr
+           r-xfun))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/r-lib/styler")
     (synopsis "Non-invasive pretty printing of R code")
     (description
@@ -18935,7 +18776,7 @@ parallel versions of vectorized R functions of the @code{mc*apply} family.")
         (base32
          "0413j7gwr5yj14jamkizj55q7xii1a0kgazzj0ilqn2ascclz6k7"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-lme4" ,r-lme4)))
+    (propagated-inputs (list r-lme4))
     (home-page "https://github.com/vdorie/blme")
     (synopsis "Bayesian linear mixed-effects models")
     (description
@@ -18957,20 +18798,20 @@ extends the lme4 package.")
          "0d2xy77hkzhcnyz8zxcv98i80fx6ripjw4rvyx4ww1d0vjjgqf52"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-backports" ,r-backports)
-       ("r-base64url" ,r-base64url)
-       ("r-brew" ,r-brew)
-       ("r-checkmate" ,r-checkmate)
-       ("r-data-table" ,r-data-table)
-       ("r-digest" ,r-digest)
-       ("r-fs" ,r-fs)
-       ("r-progress" ,r-progress)
-       ("r-r6" ,r-r6)
-       ("r-rappdirs" ,r-rappdirs)
-       ("r-stringi" ,r-stringi)
-       ("r-withr" ,r-withr)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-backports
+           r-base64url
+           r-brew
+           r-checkmate
+           r-data-table
+           r-digest
+           r-fs
+           r-progress
+           r-r6
+           r-rappdirs
+           r-stringi
+           r-withr))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/mllg/batchtools")
     (synopsis "Tools for computation on batch systems")
     (description
@@ -18986,16 +18827,16 @@ experiments in a well-organized and reproducible way.")
 (define-public r-clue
   (package
     (name "r-clue")
-    (version "0.3-59")
+    (version "0.3-60")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "clue" version))
        (sha256
         (base32
-         "0ychvjbqkcgqdp5gy4hsi4297phywd7fj89y3yi5ckmnmjb39kjm"))))
+         "0apgpdnn74mqg2bnr8yjyxgyvdl411h0r2b1r2xd67k21pyxs8bd"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-cluster" ,r-cluster)))
+    (propagated-inputs (list r-cluster))
     (home-page "https://cran.r-project.org/web/packages/clue/")
     (synopsis "Tools for analyzing cluster ensembles")
     (description "Cluster ensembles are collections of individual solutions to
@@ -19010,16 +18851,18 @@ consensus and secondary clusterings.")
 (define-public r-sitmo
   (package
     (name "r-sitmo")
-    (version "2.0.1")
+    (version "2.0.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "sitmo" version))
        (sha256
         (base32
-         "0apdhwy3kxs39agsbvx5vn3xsgb22bf3jrwmr2cmqk9kmxbx740c"))))
+         "1hm89zi38ldgbskyx1cn7gm87yqy7zrxli8q05a36y1ndvazi3j4"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-rcpp" ,r-rcpp)))
+    (propagated-inputs (list r-rcpp))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/coatless/sitmo/")
     (synopsis "Parallel pseudo random number generator header files")
     (description
@@ -19041,11 +18884,9 @@ dimensional low-discrepancy sequence.")
          "1fwsldqcri2lccna4icbmmlqic3w4xyjm7rn0xmikrsw4kzapvjb"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bh" ,r-bh)
-       ("r-rcpp" ,r-rcpp)
-       ("r-sitmo" ,r-sitmo)))
+     (list r-bh r-rcpp r-sitmo))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://www.daqana.org/dqrng")
     (synopsis "Fast pseudo random number generators")
     (description
@@ -19076,10 +18917,8 @@ engine (Salmon et al., 2011) as provided by the package @code{sitmo}.")
     (properties `((upstream-name . "ingredients")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-scales" ,r-scales)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-ggplot2 r-gridextra r-scales))
+    (native-inputs (list r-knitr))
     (home-page "https://ModelOriented.github.io/ingredients/")
     (synopsis "Effects and importances of model ingredients")
     (description
@@ -19115,8 +18954,8 @@ feature effects.  Key functions are:
          "00jzrndb3ahsv6ihp2pvs732n9cc944m83vdinrl9v1pxd82prkh"))))
     (properties `((upstream-name . "iBreakDown")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-ggplot2" ,r-ggplot2)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+    (propagated-inputs (list r-ggplot2))
+    (native-inputs (list r-knitr))
     (home-page "https://ModelOriented.github.io/iBreakDown/")
     (synopsis "Model agnostic instance level variable attributions")
     (description
@@ -19131,20 +18970,19 @@ classification and regression models.")
 (define-public r-dae
   (package
     (name "r-dae")
-    (version "3.2-11")
+    (version "3.2-13")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "dae" version))
        (sha256
         (base32
-         "0jrdfaw6aqv7k323yscsfpdkb3c4vi5ibncl6m96b9820pvycsz8"))))
+         "0mq94ah21p1glvsbvdmi2p7nlgz1bvq7w3rz2z3mdqq18kz6nkjw"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-plyr" ,r-plyr)))
+     (list r-ggplot2 r-plyr))
     (native-inputs
-     `(("r-r-rsp" ,r-r-rsp))) ; vignette builder
+     (list r-r-rsp)) ; vignette builder
     (home-page "http://chris.brien.name")
     (synopsis "Functions useful in the design and ANOVA of experiments")
     (description
@@ -19181,9 +19019,7 @@ been used in the call to @code{aov}.")
     (properties `((upstream-name . "DALEX")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-ibreakdown" ,r-ibreakdown)
-       ("r-ingredients" ,r-ingredients)))
+     (list r-ggplot2 r-ibreakdown r-ingredients))
     (home-page "https://pbiecek.github.io/DALEX/")
     (synopsis "Descriptive machine learning explanations")
     (description
@@ -19210,11 +19046,9 @@ and model output.")
     (properties `((upstream-name . "enrichR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-httr" ,r-httr)
-       ("r-rjson" ,r-rjson)))
+     (list r-ggplot2 r-httr r-rjson))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/enrichR/")
     (synopsis "R Interface to Enrichr database for analyzing gene sets")
     (description
@@ -19236,7 +19070,7 @@ annotated biological functions.")
          "1h59zlsyzbjylaziwavppl9bjmnba4iiq34772y3dys6fqclajnh"))))
     (properties `((upstream-name . "plot3D")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-misc3d" ,r-misc3d)))
+    (propagated-inputs (list r-misc3d))
     (home-page "https://cran.r-project.org/web/packages/plot3D")
     (synopsis "Plot multi-dimensional data")
     (description
@@ -19248,25 +19082,25 @@ includes data sets from oceanography.")
 (define-public r-ggfortify
   (package
     (name "r-ggfortify")
-    (version "0.4.12")
+    (version "0.4.14")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "ggfortify" version))
        (sha256
         (base32
-         "13f3ggn94czw7xw5qxwrdncr2h7z7bvwgw8zxni8wkc8x3kbz5rd"))))
+         "038m74azpy43869ax1yi6wxbl1kr59iaxl8raiikjg749vcx6njw"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-scales" ,r-scales)
-       ("r-stringr" ,r-stringr)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-dplyr
+           r-ggplot2
+           r-gridextra
+           r-scales
+           r-stringr
+           r-tibble
+           r-tidyr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/sinhrks/ggfortify")
     (synopsis "Data visualization tools for statistical analysis results")
     (description
@@ -19290,14 +19124,14 @@ results and plots in a unified style using the @code{ggplot2} package.")
     (properties `((upstream-name . "RefManageR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-httr" ,r-httr)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-lubridate" ,r-lubridate)
-       ("r-plyr" ,r-plyr)
-       ("r-stringr" ,r-stringr)
-       ("r-xml2" ,r-xml2)))
+     (list r-httr
+           r-jsonlite
+           r-lubridate
+           r-plyr
+           r-stringr
+           r-xml2))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/ropensci/RefManageR/")
     (synopsis "Straightforward BibTeX and BibLaTeX bibliography management")
     (description
@@ -19325,15 +19159,15 @@ into R and converted to @code{BibEntry} objects.")
          "1qbarvafjb8jgkrnrhh6jw7mcglmjwf7dpdiibxf39jkmlhf7las"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertthat" ,r-assertthat)
-       ("r-curl" ,r-curl)
-       ("r-httr" ,r-httr)
-       ("r-miniui" ,r-miniui)
-       ("r-refmanager" ,r-refmanager)
-       ("r-rstudioapi" ,r-rstudioapi)
-       ("r-shiny" ,r-shiny)
-       ("r-shinyjs" ,r-shinyjs)
-       ("r-yaml" ,r-yaml)))
+     (list r-assertthat
+           r-curl
+           r-httr
+           r-miniui
+           r-refmanager
+           r-rstudioapi
+           r-shiny
+           r-shinyjs
+           r-yaml))
     (home-page "https://github.com/crsh/citr")
     (synopsis "RStudio add-in to insert Markdown citations")
     (description
@@ -19345,22 +19179,19 @@ the current document.")
 (define-public r-xgboost
   (package
     (name "r-xgboost")
-    (version "1.4.1.1")
+    (version "1.5.0.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "xgboost" version))
        (sha256
         (base32
-         "1i706h6yhayzbqlqa1z6fgjc56kxm3isz0jw6d26fpyfjlw6z64z"))))
+         "04xbgrrb3aq067hrivslq5f2rd1v95yfv7lkj596ijyqi6ibjl27"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-magrittr" ,r-magrittr)
-       ("r-matrix" ,r-matrix)))
+     (list r-data-table r-jsonlite r-matrix))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/dmlc/xgboost")
     (synopsis "Extreme gradient boosting")
     (description
@@ -19387,12 +19218,9 @@ easily.")
          "191vpy84s0bar06y9z1qx43x2kc4qp7lmrcmd0cvz2pnzq722jab"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-openssl" ,r-openssl)
-       ("r-rcpp" ,r-rcpp)
-       ("r-reticulate" ,r-reticulate)
-       ("r-rspectra" ,r-rspectra)))
+     (list r-openssl r-rcpp r-reticulate r-rspectra))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/tkonopka/umap")
     (synopsis "Uniform manifold approximation and projection")
     (description
@@ -19404,24 +19232,24 @@ in R, including a translation of the original algorithm into R.")
 (define-public r-uwot
   (package
     (name "r-uwot")
-    (version "0.1.10")
+    (version "0.1.11")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "uwot" version))
        (sha256
         (base32
-         "08vxh085wnrxgwy35ksb4cr7ccjvd98pyr2zlgarqryfgc1bdqbf"))))
+         "06ylzxmdh8jipbrzgqaiivd2lnqmbcva41cyvc0iyals6vqr1ksg"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dqrng" ,r-dqrng)
-       ("r-fnn" ,r-fnn)
-       ("r-irlba" ,r-irlba)
-       ("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcppannoy" ,r-rcppannoy)
-       ("r-rcppprogress" ,r-rcppprogress)
-       ("r-rspectra" ,r-rspectra)))
+     (list r-dqrng
+           r-fnn
+           r-irlba
+           r-matrix
+           r-rcpp
+           r-rcppannoy
+           r-rcppprogress
+           r-rspectra))
     (home-page "https://github.com/jlmelville/uwot")
     (synopsis "Uniform manifold approximation and projection")
     (description
@@ -19446,22 +19274,22 @@ LargeVis method of Tang et al. (2016) is also provided.")
     (properties `((upstream-name . "kableExtra")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-digest" ,r-digest)
-       ("r-glue" ,r-glue)
-       ("r-htmltools" ,r-htmltools)
-       ("r-knitr" ,r-knitr)
-       ("r-magrittr" ,r-magrittr)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("r-rstudioapi" ,r-rstudioapi)
-       ("r-rvest" ,r-rvest)
-       ("r-scales" ,r-scales)
-       ("r-stringr" ,r-stringr)
-       ("r-svglite" ,r-svglite)
-       ("r-viridislite" ,r-viridislite)
-       ("r-webshot" ,r-webshot)
-       ("r-xml2" ,r-xml2)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-digest
+           r-glue
+           r-htmltools
+           r-knitr
+           r-magrittr
+           r-rmarkdown
+           r-rstudioapi
+           r-rvest
+           r-scales
+           r-stringr
+           r-svglite
+           r-viridislite
+           r-webshot
+           r-xml2))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://haozhu233.github.io/kableExtra/")
     (synopsis "Construct complex tables with pipe syntax")
     (description
@@ -19484,7 +19312,7 @@ customize styles using a readable syntax.")
        (sha256
         (base32 "02p3612rpydk195n2qr77lp1j2w8zsw1ckkk98c8angm4r5q8dsc"))))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "https://statweb.stanford.edu/~tibs/glasso/")
     (synopsis "Graphical Lasso: estimation of Gaussian graphical models")
     (description
@@ -19496,14 +19324,14 @@ path of values for the regularization parameter.")
 (define-public r-rhpcblasctl
   (package
     (name "r-rhpcblasctl")
-    (version "0.21-247")
+    (version "0.21-247.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "RhpcBLASctl" version))
        (sha256
         (base32
-         "09276fpkj6xa0zpzzdckclj923b0xr0rhfjiiwfli3kyqi2m37v2"))))
+         "0scpr6jq25xx7wmqyc380ann4h536ll0g7wblikk25yqvpamzrav"))))
     (properties `((upstream-name . "RhpcBLASctl")))
     (build-system r-build-system)
     (home-page "https://prs.ism.ac.jp/~nakama/Rhpc/")
@@ -19575,11 +19403,9 @@ computed using the L1 (Manhattan, taxicab) metric.")
     (properties `((upstream-name . "leiden")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-igraph" ,r-igraph)
-       ("r-matrix" ,r-matrix)
-       ("r-reticulate" ,r-reticulate)))
+     (list r-igraph r-matrix r-reticulate))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/TomKellyGenetics/leiden")
     (synopsis "R implementation of Leiden clustering algorithm")
     (description
@@ -19602,10 +19428,9 @@ guaranteeing well-connected communities.\" <arXiv:1810.08473>.")
          "10glgkf58lcykcwda1hj6xdps02m3i247qynk6s2jmwljagps3fg"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-gtable" ,r-gtable)))
+     (list r-ggplot2 r-gtable))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/thomasp85/patchwork")
     (synopsis "Compose ggplot2 plots")
     (description
@@ -19648,26 +19473,26 @@ multiple plots.")
                     (find-files "." "\\.class$"))
              #t)))))
     (propagated-inputs
-     `(("r-cowplot" ,r-cowplot)
-       ("r-dosnow" ,r-dosnow)
-       ("r-dplyr" ,r-dplyr)
-       ("r-fnn" ,r-fnn)
-       ("r-foreach" ,r-foreach)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggrepel" ,r-ggrepel)
-       ("r-hmisc" ,r-hmisc)
-       ("r-ica" ,r-ica)
-       ("r-irlba" ,r-irlba)
-       ("r-matrix" ,r-matrix)
-       ("r-mclust" ,r-mclust)
-       ("r-patchwork" ,r-patchwork)
-       ("r-plyr" ,r-plyr)
-       ("r-rann-l1" ,r-rann-l1)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-riverplot" ,r-riverplot)
-       ("r-rtsne" ,r-rtsne)
-       ("r-snow" ,r-snow)))
+     (list r-cowplot
+           r-dosnow
+           r-dplyr
+           r-fnn
+           r-foreach
+           r-ggplot2
+           r-ggrepel
+           r-hmisc
+           r-ica
+           r-irlba
+           r-matrix
+           r-mclust
+           r-patchwork
+           r-plyr
+           r-rann-l1
+           r-rcpp
+           r-rcpparmadillo
+           r-riverplot
+           r-rtsne
+           r-snow))
     (native-inputs
      `(("jdk" ,icedtea "jdk")
        ;; See https://github.com/MacoskoLab/liger/issues/96
@@ -19711,19 +19536,19 @@ dataset-specific factors.")
            #t))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cowplot" ,r-cowplot)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-irlba" ,r-irlba)
-       ("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-rcppprogress" ,r-rcppprogress)
-       ("r-rlang" ,r-rlang)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-cowplot
+           r-dplyr
+           r-ggplot2
+           r-irlba
+           r-matrix
+           r-rcpp
+           r-rcpparmadillo
+           r-rcppprogress
+           r-rlang
+           r-tibble
+           r-tidyr))
     (native-inputs
-     `(("autoconf" ,autoconf)))
+     (list autoconf))
     (home-page "https://github.com/immunogenomics/harmony")
     (synopsis "Integration of single cell sequencing data")
     (description
@@ -19746,15 +19571,15 @@ function and interfaces to external frameworks.")
     (properties `((upstream-name . "covr")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-crayon" ,r-crayon)
-       ("r-digest" ,r-digest)
-       ("r-httr" ,r-httr)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-rex" ,r-rex)
-       ("r-withr" ,r-withr)
-       ("r-yaml" ,r-yaml)))
+     (list r-crayon
+           r-digest
+           r-httr
+           r-jsonlite
+           r-rex
+           r-withr
+           r-yaml))
     (native-inputs
-     `(("r-knitr" ,r-knitr))) ; for vignettes
+     (list r-knitr)) ; for vignettes
     (home-page "https://github.com/r-lib/covr")
     (synopsis "Test coverage for R packages")
     (description
@@ -19769,24 +19594,22 @@ both R code and compiled C/C++/FORTRAN code.")
 (define-public r-systemfonts
   (package
     (name "r-systemfonts")
-    (version "1.0.2")
+    (version "1.0.3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "systemfonts" version))
        (sha256
         (base32
-         "1a9nzd4nqawr6ni3mw7xc2yq77fb2f91aarnc906mq26510rdb11"))))
+         "1fmv1ni77ncz6rrm4iv8a7l6pbqnk2ri0yzad2bs943gxbarjz34"))))
     (properties `((upstream-name . "systemfonts")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cpp11" ,r-cpp11)))
+     (list r-cpp11))
     (inputs
-     `(("fontconfig" ,fontconfig)
-       ("zlib" ,zlib)))
+     (list fontconfig zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("r-knitr" ,r-knitr)))
+     (list pkg-config r-knitr))
     (home-page "https://github.com/r-lib/systemfonts")
     (synopsis "System native font finding")
     (description
@@ -19800,20 +19623,18 @@ be used further by e.g. graphic devices.")
 (define-public r-graphlayouts
   (package
     (name "r-graphlayouts")
-    (version "0.7.1")
+    (version "0.8.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "graphlayouts" version))
        (sha256
         (base32
-         "05v7ss18bflhqa4ipsca8iw2ln8ddbaiyrizx2a5cwq81g5qq3rq"))))
+         "1l7gkn0r1ijllv3w7cbwcbi0jggs7wlkq9b2lykprng4g1kjc96p"))))
     (properties `((upstream-name . "graphlayouts")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-igraph" ,r-igraph)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)))
+     (list r-igraph r-rcpp r-rcpparmadillo))
     (home-page "https://github.com/schochastics/graphlayouts")
     (synopsis "Additional layout algorithms for network visualizations")
     (description
@@ -19827,27 +19648,26 @@ emphasize hidden group structures in networks or focus on specific nodes.")
 (define-public r-terra
   (package
     (name "r-terra")
-    (version "1.3-22")
+    (version "1.5-12")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "terra" version))
        (sha256
         (base32
-         "1z5zql68q4n81ccpl02hndhbavhhqs65bli1hjxlqdwdq192whkh"))))
+         "06fcjyzllw6dnzq0a7dc73v7rlpf250dyw41q0vr08y3x17c2p46"))))
     (properties `((upstream-name . "terra")))
     (build-system r-build-system)
     (inputs
-     `(("gdal" ,gdal)
-       ("geos" ,geos)
-       ("proj" ,proj)
-       ("sqlite" ,sqlite) ; needed for proj
-       ("zlib" ,zlib)))
+     (list gdal
+           geos
+           proj
+           sqlite ; needed for proj
+           zlib))
     (propagated-inputs
-     `(("r-raster" ,r-raster)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-rcpp))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://rspatial.org/terra")
     (synopsis "Spatial data analysis")
     (description
@@ -19873,15 +19693,15 @@ files is supported.")
     (properties `((upstream-name . "tidygraph")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-igraph" ,r-igraph)
-       ("r-magrittr" ,r-magrittr)
-       ("r-pillar" ,r-pillar)
-       ("r-r6" ,r-r6)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rlang" ,r-rlang)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-dplyr
+           r-igraph
+           r-magrittr
+           r-pillar
+           r-r6
+           r-rcpp
+           r-rlang
+           r-tibble
+           r-tidyr))
     (home-page "https://github.com/thomasp85/tidygraph")
     (synopsis "Tidy API for graph manipulation")
     (description
@@ -19911,9 +19731,7 @@ common graph algorithms.")
       (properties `((upstream-name . "SoupX")))
       (build-system r-build-system)
       (propagated-inputs
-       `(("r-ggplot2" ,r-ggplot2)
-         ("r-matrix" ,r-matrix)
-         ("r-seurat" ,r-seurat)))
+       (list r-ggplot2 r-matrix r-seurat))
       (home-page "https://github.com/constantAmateur/SoupX")
       (synopsis "Single cell mRNA Soup eXterminator")
       (description
@@ -19935,11 +19753,9 @@ cell RNA-seq experiments.")
          "00764vv86r3bn4r85in4w637harffyw605fgq0dj6mrbrwcfb650"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-mass" ,r-mass)
-       ("r-rlang" ,r-rlang)))
+     (list r-dplyr r-mass r-rlang))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))           ; needed for vignette
+     (list r-knitr))           ; needed for vignette
     (home-page "https://github.com/ropensci/assertr")
     (synopsis "Assertive programming for R analysis pipelines")
     (description
@@ -19952,21 +19768,20 @@ in pipelines.")
 (define-public r-parameters
   (package
     (name "r-parameters")
-    (version "0.14.0")
+    (version "0.16.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "parameters" version))
        (sha256
         (base32
-         "03x2h8izbpz9cq25i0a6dh99m26a9isgpv4kxsfkx97qzlh9cd67"))))
+         "1i295d5nqjr3pvp9vz59wiasrxy9n78q518phcd15sxcjzcj0l27"))))
     (properties `((upstream-name . "parameters")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bayestestr" ,r-bayestestr)
-       ("r-insight" ,r-insight)))
+     (list r-bayestestr r-datawizard r-insight))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/parameters")
     (synopsis "Processing of model parameters")
     (description
@@ -19981,24 +19796,21 @@ effect size.")
 (define-public r-rgdal
   (package
     (name "r-rgdal")
-    (version "1.5-27")
+    (version "1.5-28")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "rgdal" version))
        (sha256
-        (base32 "0mjpxs2dvbngbchlb0kfs0jcac7v88slwxmka81ds92lggnmb9b2"))))
+        (base32 "18k1w8cb77h4mw1m5b21r0fng40arb1md24fyriv83ccz8n46m3z"))))
     (properties `((upstream-name . "rgdal")))
     (build-system r-build-system)
     (inputs
-     `(("gdal" ,gdal)
-       ("proj" ,proj)
-       ("zlib" ,zlib)))
+     (list gdal proj zlib))
     (propagated-inputs
-     `(("r-sp" ,r-sp)))
+     (list r-sp))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("r-knitr" ,r-knitr)))
+     (list pkg-config r-knitr))
     (home-page "http://rgdal.r-forge.r-project.org")
     (synopsis "Bindings for the Geospatial Data Abstraction Library")
     (description
@@ -20021,9 +19833,9 @@ PROJ.4 library.")
     (properties `((upstream-name . "insol")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-raster" ,r-raster)))
+     (list r-raster))
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://meteoexploration.com/R/insol/index.html")
     (synopsis "Tools for calculating solar radiation")
     (description
@@ -20048,10 +19860,9 @@ atmospheric physics.")
     (properties `((upstream-name . "lifecycle")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-glue" ,r-glue)
-       ("r-rlang" ,r-rlang)))
+     (list r-glue r-rlang))
     (native-inputs
-     `(("r-knitr" ,r-knitr))) ; for vignettes
+     (list r-knitr)) ; for vignettes
     (home-page "https://github.com/r-lib/lifecycle")
     (synopsis "Manage the life cycle of your package functions")
     (description
@@ -20077,9 +19888,9 @@ signalled with increasing levels of non-invasive verbosity.")
          "1cciil1nzxd8gbj49w99jiv077lbpb59vx7bmb4p218aj2h5hqq4"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)))
+     (list r-data-table))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/assertable/")
     (synopsis "Verbose assertions for tabular data (data.frames and data.tables)")
     (description "This package provides simple, flexible assertions on
@@ -20105,7 +19916,7 @@ data.table.")
         (base32 "1ka9g8zak8sg4y2xbz93dfrldznlk9qpd4pq9z21cdcdn3b8s4i2"))))
     (build-system r-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/quadprog")
     (synopsis "Functions to solve quadratic programming problems")
     (description
@@ -20116,17 +19927,17 @@ programming problems.")
 (define-public r-desolve
   (package
     (name "r-desolve")
-    (version "1.29")
+    (version "1.30")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "deSolve" version))
        (sha256
-        (base32 "02hrd31ky9id7q2bwkj436j4fj4xbs3j9sfmyi1nl7hml5dy2vr6"))))
+        (base32 "0j7mmg1mimdpql8f4i9dn920ciyyq80a5qnc4fq5xn5lyrx5vxir"))))
     (properties `((upstream-name . "deSolve")))
     (build-system r-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://desolve.r-forge.r-project.org/")
     (synopsis "Solvers for initial value problems of differential equations")
     (description "This package provides functions that solve initial value
@@ -20142,15 +19953,44 @@ from 1-D, 2-D and 3-D partial differential equations that have been converted
 to ODEs by numerical differencing.")
     (license license:gpl2+)))
 
+(define-public r-pmcmrplus
+  (package
+    (name "r-pmcmrplus")
+    (version "1.9.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "PMCMRplus" version))
+       (sha256
+        (base32 "00sgk4c7vpmbfifrsbqd5gh7hwdpm8kymlpnnrdzlhvkymhbmfkn"))))
+    (properties `((upstream-name . "PMCMRplus")))
+    (build-system r-build-system)
+    (inputs (list gmp))
+    (propagated-inputs
+     (list r-bwstest
+           r-gmp
+           r-ksamples
+           r-mass
+           r-multcompview
+           r-mvtnorm
+           r-rmpfr
+           r-suppdists))
+    (native-inputs (list gfortran r-knitr))
+    (home-page "https://cran.r-project.org/package=PMCMRplus")
+    (synopsis "Calculate pairwise multiple comparisons of mean rank sums extended")
+    (description
+     "This package provides multiple pairwise tests.")
+    (license license:gpl3+)))
+
 (define-public r-pracma
   (package
     (name "r-pracma")
-    (version "2.3.3")
+    (version "2.3.6")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "pracma" version))
               (sha256
-               (base32 "0g5r5ir5k43ba0ngnsanp108k479l2dnsjd5w6idk1d34ivqs7yg"))))
+               (base32 "1pmqk7b6c600v6pn0s047p3msl13azwk611zvh05w5f993yq7b0p"))))
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/web/packages/pracma/")
     (synopsis "Practical numerical math functions")
@@ -20163,17 +20003,17 @@ porting.")
 (define-public r-subplex
   (package
     (name "r-subplex")
-    (version "1.6")
+    (version "1.7")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "subplex" version))
        (sha256
         (base32
-         "1yfbfjvpbhgky7vihw3f4jl41pxpqb39z4nc045d5z7z48bdl18d"))))
+         "11zqzydbj6ivgvlw1gv1r2yxra7misbc622g575p2vckhjjg9v6m"))))
     (build-system r-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/subplex")
     (synopsis "Unconstrained optimization using the subplex algorithm")
     (description
@@ -20216,10 +20056,10 @@ as a boxplot function.")
          "1jvcmpzi9knhxq5jsbhg8slm8hnlx2y8smmwwrbnbyd0rmk5fhci"))))
     (properties `((upstream-name . "bio3d")))
     (build-system r-build-system)
-    (inputs `(("zlib" ,zlib)))
-    (propagated-inputs `(("r-rcpp" ,r-rcpp)))
+    (inputs (list zlib))
+    (propagated-inputs (list r-rcpp))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "http://thegrantlab.org/bio3d/")
     (synopsis "Biological structure analysis")
     (description
@@ -20250,10 +20090,7 @@ structural data.")
     (properties `((upstream-name . "Bios2cor")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bigmemory" ,r-bigmemory)
-       ("r-bio3d" ,r-bio3d)
-       ("r-circular" ,r-circular)
-       ("r-igraph" ,r-igraph)))
+     (list r-bigmemory r-bio3d r-circular r-igraph))
     (home-page "https://cran.r-project.org/web/packages/Bios2cor/")
     (synopsis "From biological sequences and simulations to correlation analysis")
     (description
@@ -20325,9 +20162,7 @@ tools for help in data interpretation.")
             (base32
              "0y7byf6kcinfz9ac59jxc4v6kppdazmnyqfav0dm4h550fzfqqlg"))))))
     (propagated-inputs
-     `(("r-htmlwidgets" ,r-htmlwidgets)
-       ("r-igraph" ,r-igraph)
-       ("r-magrittr" ,r-magrittr)))
+     (list r-htmlwidgets r-igraph r-magrittr))
     (home-page "https://cran.r-project.org/package=networkD3")
     (synopsis "D3 JavaScript network graphs from R")
     (description
@@ -20349,15 +20184,15 @@ graphs from R.")
     (properties `((upstream-name . "aaSEA")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bios2cor" ,r-bios2cor)
-       ("r-dt" ,r-dt)
-       ("r-hmisc" ,r-hmisc)
-       ("r-magrittr" ,r-magrittr)
-       ("r-networkd3" ,r-networkd3)
-       ("r-plotly" ,r-plotly)
-       ("r-seqinr" ,r-seqinr)
-       ("r-shiny" ,r-shiny)
-       ("r-shinydashboard" ,r-shinydashboard)))
+     (list r-bios2cor
+           r-dt
+           r-hmisc
+           r-magrittr
+           r-networkd3
+           r-plotly
+           r-seqinr
+           r-shiny
+           r-shinydashboard))
     (home-page "https://cran.r-project.org/web/packages/aaSEA/")
     (synopsis "Amino acid substitution effect analyzer")
     (description
@@ -20381,8 +20216,7 @@ single, multiple and correlated amino acid substitutions in proteins.")
     (properties `((upstream-name . "ABACUS")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-shiny" ,r-shiny)))
+     (list r-ggplot2 r-shiny))
     (home-page "https://shiny.abdn.ac.uk/Stats/apps/")
     (synopsis "Apps-based activities for communicating and understanding statistics")
     (description
@@ -20427,8 +20261,7 @@ beta analysis to identify candidate genes containing multiple CpG sites.")
     (properties `((upstream-name . "abcADM")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bh" ,r-bh)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-bh r-rcpp))
     (home-page "https://cran.r-project.org/web/packages/abcADM/")
     (synopsis "Fit accumulated damage models and estimate reliability using ABC")
     (description
@@ -20452,9 +20285,9 @@ long-term reliability under stochastic load profiles.")
     (properties `((upstream-name . "Rglpk")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-slam" ,r-slam)))
+     (list r-slam))
     (inputs
-     `(("glpk" ,glpk)))
+     (list glpk))
     (home-page "https://r-forge.r-project.org/projects/rglp/")
     (synopsis "R interface to the GNU Linear Programming Kit")
     (description
@@ -20478,10 +20311,7 @@ integer linear programming} (MILP) and other related problems.")
     (properties `((upstream-name . "abcdeFBA")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-corrplot" ,r-corrplot)
-       ("r-lattice" ,r-lattice)
-       ("r-rgl" ,r-rgl)
-       ("r-rglpk" ,r-rglpk)))
+     (list r-corrplot r-lattice r-rgl r-rglpk))
     (home-page "https://cran.r-project.org/web/packages/abcdeFBA/")
     (synopsis "A-Biologist-Can-Do-Everything of Flux Balance Analysis with this package")
     (description
@@ -20527,7 +20357,7 @@ overall risk.")
     (properties `((upstream-name . "abemus")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)))
+     (list r-data-table))
     (home-page "https://cran.r-project.org/web/packages/abemus/")
     (synopsis "Adaptive base error model in ultra-deep sequencing data")
     (description
@@ -20577,8 +20407,7 @@ cell free DNA} (cfDNA).")
             (base32
              "0vh5n7hqqyx2pdvlqq6xadfqibcn78h5961rwhpf817kpxfzv8v7"))))))
     (propagated-inputs
-     `(("r-jsonlite" ,r-jsonlite)
-       ("r-shiny" ,r-shiny)))
+     (list r-jsonlite r-shiny))
     (home-page "https://github.com/carlganz/rintrojs")
     (synopsis "Wrapper for the Intro.js library")
     (description
@@ -20604,11 +20433,9 @@ server-side.")
     (properties `((upstream-name . "sysfonts")))
     (build-system r-build-system)
     (inputs
-     `(("freetype" ,freetype)
-       ("libpng" ,libpng)
-       ("zlib" ,zlib)))
+     (list freetype libpng zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/yixuan/sysfonts")
     (synopsis "Loading fonts into R")
     (description
@@ -20630,7 +20457,7 @@ into R, in order to support other packages.")
     (properties `((upstream-name . "showtextdb")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-sysfonts" ,r-sysfonts)))
+     (list r-sysfonts))
     (home-page "https://cran.r-project.org/web/packages/showtextdb/")
     (synopsis "Font files for the 'showtext' package")
     (description
@@ -20652,15 +20479,11 @@ package.")
     (properties `((upstream-name . "showtext")))
     (build-system r-build-system)
     (inputs
-     `(("freetype" ,freetype)
-       ("libpng" ,libpng)
-       ("zlib" ,zlib)))
+     (list freetype libpng zlib))
     (propagated-inputs
-     `(("r-showtextdb" ,r-showtextdb)
-       ("r-sysfonts" ,r-sysfonts)))
+     (list r-showtextdb r-sysfonts))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("r-knitr" ,r-knitr)))
+     (list pkg-config r-knitr))
     (home-page "https://github.com/yixuan/showtext")
     (synopsis "Using fonts more easily in R graphs")
     (description
@@ -20686,12 +20509,9 @@ such as Ghostscript is needed to use this package.")
     (properties `((upstream-name . "emojifont")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-proto" ,r-proto)
-       ("r-showtext" ,r-showtext)
-       ("r-sysfonts" ,r-sysfonts)))
+     (list r-ggplot2 r-proto r-showtext r-sysfonts))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://guangchuangyu.github.io/emojifont")
     (synopsis "Emoji and Font Awesome in R graphics")
     (description
@@ -20713,13 +20533,13 @@ both base and ggplot2 graphics.")
     (properties `((upstream-name . "abstractr")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-colourpicker" ,r-colourpicker)
-       ("r-emojifont" ,r-emojifont)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-rintrojs" ,r-rintrojs)
-       ("r-shiny" ,r-shiny)
-       ("r-shinythemes" ,r-shinythemes)))
+     (list r-colourpicker
+           r-emojifont
+           r-ggplot2
+           r-gridextra
+           r-rintrojs
+           r-shiny
+           r-shinythemes))
     (home-page "https://matt-kumar.shinyapps.io/portfolio")
     (synopsis "R-Shiny application for creating visual abstracts")
     (description
@@ -20731,22 +20551,19 @@ included.")
 (define-public r-qgam
   (package
     (name "r-qgam")
-    (version "1.3.3")
+    (version "1.3.4")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "qgam" version))
        (sha256
         (base32
-         "0vx2wf3rqc3j8i0870xrwxndkbgza0nnh7f0yxi8h67lfi7gws4s"))))
+         "1jyamamdffaks89rspyhmg18b4iik0nb1j0vgqzvfnm890514cvn"))))
     (properties `((upstream-name . "qgam")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-doparallel" ,r-doparallel)
-       ("r-mgcv" ,r-mgcv)
-       ("r-plyr" ,r-plyr)
-       ("r-shiny" ,r-shiny)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-doparallel r-mgcv r-plyr r-shiny))
+    (native-inputs (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/qgam/")
     (synopsis "Smooth additive quantile regression models")
     (description
@@ -20764,25 +20581,25 @@ regression models.")
 (define-public r-abtest
   (package
     (name "r-abtest")
-    (version "0.2.2")
+    (version "1.0.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "abtest" version))
        (sha256
         (base32
-         "1ak0m4jd1grriwg4pn3aqf1468qma6rjn5kqjh8izx7zl29jd07v"))))
+         "0jz2ry5364p8h8xlk5a5sycn8xlpxd1iasfg99bcr4jqzd92jfqg"))))
     (properties `((upstream-name . "abtest")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-matrix" ,r-matrix)
-       ("r-mvtnorm" ,r-mvtnorm)
-       ("r-plotrix" ,r-plotrix)
-       ("r-qgam" ,r-qgam)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rcpp" ,r-rcpp)
-       ("r-sn" ,r-sn)
-       ("r-truncnorm" ,r-truncnorm)))
+     (list r-matrix
+           r-mvtnorm
+           r-plotrix
+           r-qgam
+           r-rcolorbrewer
+           r-rcpp
+           r-sn
+           r-truncnorm))
     (home-page "https://cran.r-project.org/web/packages/abtest/")
     (synopsis "Bayesian A/B testing")
     (description
@@ -20794,19 +20611,18 @@ elicitation options based on Kass and Vaidyanathan (1992)
 (define-public r-reldist
   (package
     (name "r-reldist")
-    (version "1.6-6")
+    (version "1.7-0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "reldist" version))
        (sha256
         (base32
-         "09vips7spcz0fahrpy0bl15hk43zgnq74h189hmygyi41l95aywa"))))
+         "0i04d6w3r6fzm4bykz6lnnh6dngmd61v5wlpli70r3fzdzhi7fji"))))
     (properties `((upstream-name . "reldist")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-hmisc" ,r-hmisc)
-       ("r-mgcv" ,r-mgcv)))
+     (list r-densestbayes r-hmisc r-mgcv))
     (home-page "http://www.stat.ucla.edu/~handcock/RelDist")
     (synopsis "Relative distribution methods")
     (description
@@ -20833,8 +20649,7 @@ Social Sciences\" by Mark S. Handcock and Martina Morris, Springer-Verlag,
     (properties `((upstream-name . "accept")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-reldist" ,r-reldist)))
+     (list r-dplyr r-reldist))
     (home-page "https://cran.r-project.org/web/packages/accept/")
     (synopsis "Acute COPD Exacerbation Prediction Tool (ACCEPT)")
     (description
@@ -20858,10 +20673,7 @@ Adibi et al. (2019) @url{doi:10.1101/651901}.")
     (properties `((upstream-name . "SMPracticals")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ellipse" ,r-ellipse)
-       ("r-mass" ,r-mass)
-       ("r-nlme" ,r-nlme)
-       ("r-survival" ,r-survival)))
+     (list r-ellipse r-mass r-nlme r-survival))
     (home-page "http://statwww.epfl.ch/davison/SM/")
     (synopsis "Practicals for use with Davison (2003) Statistical Models")
     (description
@@ -20912,8 +20724,7 @@ experienced.")
     (properties `((upstream-name . "tcltk2")))
     (build-system r-build-system)
     (inputs
-     `(("tcl" ,tcl)
-       ("tk" ,tk)))
+     (list tcl tk))
     (home-page "https://www.sciviews.org/SciViews-R")
     (synopsis "Tcl/Tk additions")
     (description
@@ -20935,9 +20746,7 @@ with style and various functions to supplement the tcltk package")
     (properties `((upstream-name . "accrual")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-fgui" ,r-fgui)
-       ("r-smpracticals" ,r-smpracticals)
-       ("r-tcltk2" ,r-tcltk2)))
+     (list r-fgui r-smpracticals r-tcltk2))
     (home-page "https://cran.r-project.org/web/packages/accrual/")
     (synopsis "Bayesian accrual prediction")
     (description
@@ -20984,8 +20793,8 @@ data.")
          "1hq0zhhz9klmp4zcr1w8hyn7s1h9kfg57d2l2mfm7psx459j0krl"))))
     (properties `((upstream-name . "mda")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-class" ,r-class)))
-    (native-inputs `(("gfortran" ,gfortran)))
+    (propagated-inputs (list r-class))
+    (native-inputs (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/mda/")
     (synopsis "Mixture and flexible discriminant analysis")
     (description
@@ -21007,7 +20816,7 @@ data.")
     (properties `((upstream-name . "elasticnet")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lars" ,r-lars)))
+     (list r-lars))
     (home-page "http://users.stat.umn.edu/~zouxx019/")
     (synopsis "Elastic-Net for sparse estimation and sparse PCA")
     (description
@@ -21030,9 +20839,7 @@ Components.  The Lasso solution paths can be computed by the same function.")
     (properties `((upstream-name . "sparseLDA")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-elasticnet" ,r-elasticnet)
-       ("r-mass" ,r-mass)
-       ("r-mda" ,r-mda)))
+     (list r-elasticnet r-mass r-mda))
     (home-page "https://www.imm.dtu.dk/~lkhc/")
     (synopsis "Sparse discriminant analysis")
     (description
@@ -21054,12 +20861,12 @@ and mixture of Gaussian models.")
     (properties `((upstream-name . "accSDA")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-ggthemes" ,r-ggthemes)
-       ("r-gridextra" ,r-gridextra)
-       ("r-mass" ,r-mass)
-       ("r-rarpack" ,r-rarpack)
-       ("r-sparselda" ,r-sparselda)))
+     (list r-ggplot2
+           r-ggthemes
+           r-gridextra
+           r-mass
+           r-rarpack
+           r-sparselda))
     (home-page "https://github.com/gumeo/accSDA/wiki")
     (synopsis "Accelerated sparse discriminant analysis")
     (description
@@ -21087,7 +20894,7 @@ discriminant} (SZVD) analysis is also included in the package.")
     (properties `((upstream-name . "ace2fastq")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-stringr" ,r-stringr)))
+     (list r-stringr))
     (home-page "https://github.com/c5sire/ace2fastq")
     (synopsis "ACE file to FASTQ converter")
     (description
@@ -21102,14 +20909,14 @@ facilitates insertion into pipelines, and content inspection.")
 (define-public r-rngwell
   (package
     (name "r-rngwell")
-    (version "0.10-6")
+    (version "0.10-7")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "rngWELL" version))
        (sha256
         (base32
-         "0pjjcs9pqj7mf0mhb2cwd0aanqpwnm65bm86hk6mi2vw8rgnj2vv"))))
+         "0f1dxxaimfb0fww8ym9ciqf6q760ai46wxldl37m5mfpd57ca00c"))))
     (properties `((upstream-name . "rngWELL")))
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/web/packages/rngWELL/")
@@ -21132,8 +20939,7 @@ on Linear Recurrences Modulo 2'', ACM Transactions on Mathematical Software.")
               "1nz6h0j5ywdh48m0swmhp34hbkycd7n13rclrxaw85qi9wc42597"))))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-knitr" ,r-knitr)
-      ("r-nnls" ,r-nnls)))
+    (list r-knitr r-nnls))
    (home-page "https://cran.r-project.org/web/packages/rNMF/")
    (synopsis "Robust nonnegative matrix factorization")
    (description
@@ -21148,20 +20954,20 @@ and prints vectorized images.")
 (define-public r-randtoolbox
   (package
     (name "r-randtoolbox")
-    (version "1.30.1")
+    (version "1.31.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "randtoolbox" version))
        (sha256
         (base32
-         "0qg20ar6qns858jdzqhmfq7yji81czhr6cim257958gqpj66sn95"))))
+         "1b9vjzqg014hxp1vfb62m01d7xim5vmpbyxzlbll49bqas0jx69h"))))
     (properties `((upstream-name . "randtoolbox")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rngwell" ,r-rngwell)))
+     (list r-rngwell))
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/randtoolbox/")
     (synopsis "Toolbox for pseudo and quasi random number generation")
     (description
@@ -21195,9 +21001,9 @@ See e.g. Gentle (2003) @url{doi:10.1007/b97336}.")
          "1l861h76q5w0nbnbybhgg7hiw7fks677jakyd49n1whwvd48sfz4"))))
     (properties `((upstream-name . "lhs")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-rcpp" ,r-rcpp)))
+    (propagated-inputs (list r-rcpp))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/bertcarnell/lhs")
     (synopsis "Latin Hypercube Samples")
     (description
@@ -21219,11 +21025,7 @@ Latin Hypercube Samples.")
     (properties `((upstream-name . "acebayes")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-compare" ,r-compare)
-       ("r-lhs" ,r-lhs)
-       ("r-randtoolbox" ,r-randtoolbox)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)))
+     (list r-compare r-lhs r-randtoolbox r-rcpp r-rcpparmadillo))
     (home-page "https://cran.r-project.org/web/packages/acebayes/")
     (synopsis "Optimal Bayesian experimental design using the ACE algorithm")
     (description
@@ -21250,10 +21052,7 @@ to maximise an approximation to the expectation of the utility function.")
     (properties `((upstream-name . "ACEt")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bh" ,r-bh)
-       ("r-mass" ,r-mass)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)))
+     (list r-bh r-mass r-rcpp r-rcpparmadillo))
     (home-page "https://cran.r-project.org/web/packages/ACEt/")
     (synopsis "Estimating dynamic heritability and twin model comparison")
     (description
@@ -21276,7 +21075,7 @@ to age using B-splines and P-splines.")
     (properties `((upstream-name . "acfMPeriod")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mass" ,r-mass)))
+     (list r-mass))
     (home-page "https://cran.r-project.org/web/packages/acfMPeriod/")
     (synopsis "Estimation of the ACF from the M-periodogram")
     (description
@@ -21294,14 +21093,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 "6.0-1")
+    (version "6.0-2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "gamlss.data" version))
        (sha256
         (base32
-         "1cjb2n5i5mnhmb5qbqycdbfg65j7nxb9s74yihqs9kpa39byrzcq"))))
+         "07mpdl4h9rwmnpl9jmsn6ig8ji11an6pyjfsvg62h2alapwbdcyv"))))
     (properties `((upstream-name . "gamlss.data")))
     (build-system r-build-system)
     (home-page "http://www.gamlss.org/")
@@ -21326,11 +21125,7 @@ models.")
     (properties `((upstream-name . "gamlss")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-gamlss-data" ,r-gamlss-data)
-       ("r-gamlss-dist" ,r-gamlss-dist)
-       ("r-mass" ,r-mass)
-       ("r-nlme" ,r-nlme)
-       ("r-survival" ,r-survival)))
+     (list r-gamlss-data r-gamlss-dist r-mass r-nlme r-survival))
     (home-page "http://www.gamlss.org/")
     (synopsis "Generalized additive models for location scale and shape")
     (description
@@ -21357,9 +21152,7 @@ explanatory variables.")
     (properties `((upstream-name . "acid")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-gamlss" ,r-gamlss)
-       ("r-gamlss-dist" ,r-gamlss-dist)
-       ("r-hmisc" ,r-hmisc)))
+     (list r-gamlss r-gamlss-dist r-hmisc))
     (home-page "https://cran.r-project.org/web/packages/acid/")
     (synopsis "Analysing conditional income distributions")
     (description
@@ -21385,7 +21178,7 @@ analysis of income distributions at the disaggregated level.")
          "1wqzc35i1rshx0zlmas8y4qkkvy6h9r4i4apscjjv1xg2wjflzxa"))))
     (properties `((upstream-name . "acm4r")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-mass" ,r-mass)))
+    (propagated-inputs (list r-mass))
     (home-page "https://cran.r-project.org/web/packages/acm4r/")
     (synopsis "Align-and-count method comparisons of RFLP data")
     (description
@@ -21431,9 +21224,7 @@ the appropriate system call provided by the underlying operating system.")
     (build-system r-build-system)
     ;; These inputs are needed for vignettes
     (native-inputs
-     `(("r-knitr" ,r-knitr)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("pandoc-citeproc" ,pandoc-citeproc)))
+     (list r-knitr r-rmarkdown))
     (home-page "https://github.com/andreyshabalin/filematrix")
     (synopsis "File-backed matrix class with convenient read and write access")
     (description
@@ -21460,7 +21251,7 @@ columns, ad allows for quick addition of extra columns to a filematrix.")
     (properties `((upstream-name . "ACMEeqtl")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-filematrix" ,r-filematrix)))
+     (list r-filematrix))
     (home-page "https://github.com/andreyshabalin/ACMEeqtl")
     (synopsis "Estimation of interpretable eQTL effect sizes")
     (description
@@ -21484,7 +21275,7 @@ p-values with well controlled Type-I error.")
          "000b2hqlhj93958nddw0fqb15ahigs08najv2miivym046x04mf7"))))
     (properties `((upstream-name . "acmeR")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-foreign" ,r-foreign)))
+    (propagated-inputs (list r-foreign))
     (home-page "https://cran.r-project.org/web/packages/acmeR/")
     (synopsis "ACME estimator of bird and bat mortality by wind turbines")
     (description
@@ -21512,9 +21303,7 @@ settings.")
     (properties `((upstream-name . "R.huge")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-r-methodss3" ,r-r-methodss3)
-       ("r-r-oo" ,r-r-oo)
-       ("r-r-utils" ,r-r-utils)))
+     (list r-r-methodss3 r-r-oo r-r-utils))
     (home-page "https://github.com/HenrikBengtsson/R.huge")
     (synopsis "Methods for accessing huge amounts of data")
     (description
@@ -21543,11 +21332,7 @@ the @code{aroma.affymetrix} package.")
          (add-after 'unpack 'set-HOME
            (lambda _ (setenv "HOME" "/tmp"))))))
     (propagated-inputs
-     `(("r-digest" ,r-digest)
-       ("r-r-cache" ,r-r-cache)
-       ("r-r-methodss3" ,r-r-methodss3)
-       ("r-r-oo" ,r-r-oo)
-       ("r-r-utils" ,r-r-utils)))
+     (list r-digest r-r-cache r-r-methodss3 r-r-oo r-r-utils))
     (home-page "https://github.com/HenrikBengtsson/R.filesets")
     (synopsis "Easy handling of and access to files")
     (description
@@ -21575,10 +21360,7 @@ identify file sets and individual files.")
     (properties `((upstream-name . "R.devices")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-base64enc" ,r-base64enc)
-       ("r-r-methodss3" ,r-r-methodss3)
-       ("r-r-oo" ,r-r-oo)
-       ("r-r-utils" ,r-r-utils)))
+     (list r-base64enc r-r-methodss3 r-r-oo r-r-utils))
     (home-page "https://github.com/HenrikBengtsson/R.devices")
     (synopsis "Unified handling of graphics devices")
     (description
@@ -21651,7 +21433,7 @@ provided as well.")
          "12nixpqrc5gp7p2clr7ia6jwb0jq2i3brlxiwlp00ixmnm5g1jyd"))))
     (properties `((upstream-name . "tuneR")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-signal" ,r-signal)))
+    (propagated-inputs (list r-signal))
     (home-page "https://cran.r-project.org/web/packages/tuneR/")
     (synopsis "Analysis of music and speech")
     (description
@@ -21676,9 +21458,9 @@ transcription, ...")
     (properties `((upstream-name . "seewave")))
     (build-system r-build-system)
     (inputs
-     `(("libsndfile" ,libsndfile)))
+     (list libsndfile))
     (propagated-inputs
-     `(("r-tuner" ,r-tuner)))
+     (list r-tuner))
     (home-page "http://rug.mnhn.fr/seewave")
     (synopsis "Sound analysis and synthesis")
     (description
@@ -21705,9 +21487,7 @@ and 3D spectrograms and many other analyses.")
      `((upstream-name . "AcousticNDLCodeR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-seewave" ,r-seewave)
-       ("r-tuner" ,r-tuner)
-       ("r-zoo" ,r-zoo)))
+     (list r-seewave r-tuner r-zoo))
     (home-page "https://cran.r-project.org/web/packages/AcousticNDLCodeR/")
     (synopsis "Coding sound files for use with NDL")
     (description
@@ -21733,8 +21513,7 @@ unit.\" @url{doi:10.1371/journal.pone.0174623}")
     (properties `((upstream-name . "acp")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-quantmod" ,r-quantmod)
-       ("r-tseries" ,r-tseries)))
+     (list r-quantmod r-tseries))
     (home-page "https://cran.r-project.org/web/packages/acp/")
     (synopsis "Autoregressive conditional Poisson")
     (description
@@ -21756,7 +21535,7 @@ model (ACP(p,q)) proposed by Heinen (2003).")
          "1h3a07czp0w3hrhjcg1fz721y8vsfclzqi3rq8qfzgpfb4h1f06r"))))
     (properties `((upstream-name . "ada")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-rpart" ,r-rpart)))
+    (propagated-inputs (list r-rpart))
     (home-page "https://cran.r-project.org/web/packages/ada/")
     (synopsis "Stochastic boosting")
     (description
@@ -21801,10 +21580,7 @@ floating point chromosomes.")
     (properties `((upstream-name . "kernelFactory")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-auc" ,r-auc)
-       ("r-genalg" ,r-genalg)
-       ("r-kernlab" ,r-kernlab)
-       ("r-randomforest" ,r-randomforest)))
+     (list r-auc r-genalg r-kernlab r-randomforest))
     (home-page "https://cran.r-project.org/web/packages/kernelFactory/")
     (synopsis "Ensemble of kernel machines")
     (description
@@ -21846,10 +21622,7 @@ classes into dummy/indicator variables.")
     (properties `((upstream-name . "aCRM")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ada" ,r-ada)
-       ("r-dummies" ,r-dummies)
-       ("r-kernelfactory" ,r-kernelfactory)
-       ("r-randomforest" ,r-randomforest)))
+     (list r-ada r-dummies r-kernelfactory r-randomforest))
     (home-page "https://cran.r-project.org/web/packages/aCRM/")
     (synopsis "Convenience functions for analytical customer relationship management")
     (description
@@ -21889,8 +21662,7 @@ and regression trees.")
     (properties `((upstream-name . "treeClust")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cluster" ,r-cluster)
-       ("r-rpart" ,r-rpart)))
+     (list r-cluster r-rpart))
     (home-page "https://cran.r-project.org/web/packages/treeClust/")
     (synopsis "Cluster distances through trees")
     (description
@@ -21913,8 +21685,7 @@ clustering.")
     (properties `((upstream-name . "AcrossTic")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lpsolve" ,r-lpsolve)
-       ("r-treeclust" ,r-treeclust)))
+     (list r-lpsolve r-treeclust))
     (home-page "https://cran.r-project.org/web/packages/AcrossTic/")
     (synopsis "Cost-minimal regular spanning subgraph with TreeClust")
     (description
@@ -21937,9 +21708,7 @@ distribution.")
     (properties `((upstream-name . "acrt")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)
-       ("r-rcppeigen" ,r-rcppeigen)
-       ("r-sandwich" ,r-sandwich)))
+     (list r-rcpp r-rcppeigen r-sandwich))
     (home-page "https://cran.r-project.org/web/packages/acrt/")
     (synopsis "Autocorrelation robust testing")
     (description
@@ -21962,11 +21731,7 @@ errors.")
     (properties `((upstream-name . "acs")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-httr" ,r-httr)
-       ("r-plyr" ,r-plyr)
-       ("r-rcpp" ,r-rcpp)
-       ("r-stringr" ,r-stringr)
-       ("r-xml" ,r-xml)))
+     (list r-httr r-plyr r-rcpp r-stringr r-xml))
     (home-page "https://dusp.mit.edu/faculty/ezra-haber-glenn")
     (synopsis "Work with data from the US Census")
     (description
@@ -22022,8 +21787,7 @@ distribution of the halting states.")
     (properties `((upstream-name . "acss")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-acss-data" ,r-acss-data)
-       ("r-zoo" ,r-zoo)))
+     (list r-acss-data r-zoo))
     (home-page "http://complexitycalculator.com/methodology.html")
     (synopsis "Algorithmic complexity for short strings")
     (description
@@ -22051,7 +21815,7 @@ complexity are also provided: entropy and change complexity.")
     (properties `((upstream-name . "ACSWR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mass" ,r-mass)))
+     (list r-mass))
     (home-page "https://cran.r-project.org/web/packages/ACSWR/")
     (synopsis "Companion package for the book \"A Course in Statistics with R\"")
     (description
@@ -22072,7 +21836,7 @@ R\" (ISBN 978-1-119-15272-9.)")
          "0mlgk929gdismikwx4k2ndqq57nnqj7mlgvd3479b214hksgq036"))))
     (properties `((upstream-name . "alabama")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-numderiv" ,r-numderiv)))
+    (propagated-inputs (list r-numderiv))
     (home-page "https://cran.r-project.org/web/packages/alabama/")
     (synopsis "Constrained nonlinear optimization")
     (description
@@ -22085,29 +21849,28 @@ allowed.")
 (define-public r-gdina
   (package
     (name "r-gdina")
-    (version "2.8.7")
+    (version "2.8.8")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "GDINA" version))
        (sha256
         (base32
-         "08cdjp4mqn81j3wa770v7n8zkslys9jqqb3d3c09dkfmgdk6hga4"))))
+         "1slq1npsq8s8aghnrpm6vvc6kxj4svz0kr2x0akblndrcr25wxjr"))))
     (properties `((upstream-name . "GDINA")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-alabama" ,r-alabama)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-mass" ,r-mass)
-       ("r-nloptr" ,r-nloptr)
-       ("r-numderiv" ,r-numderiv)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-rsolnp" ,r-rsolnp)
-       ("r-shiny" ,r-shiny)
-       ("r-shinydashboard" ,r-shinydashboard)))
+     (list r-alabama
+           r-ggplot2
+           r-mass
+           r-numderiv
+           r-rcpp
+           r-rcpparmadillo
+           r-rsolnp
+           r-shiny
+           r-shinydashboard))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/Wenchao-Ma/GDINA")
     (synopsis "Generalized DINA model framework")
     (description
@@ -22138,10 +21901,9 @@ be conducted.  A graphical user interface is also provided.")
     (properties `((upstream-name . "ACTCD")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-gdina" ,r-gdina)
-       ("r-r-methodss3" ,r-r-methodss3)))
+     (list r-gdina r-r-methodss3))
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/ACTCD/")
     (synopsis "Asymptotic classification theory for cognitive diagnosis")
     (description
@@ -22189,11 +21951,7 @@ poverty measures.  It provides both empirical and theoretical Lorenz curves.")
     (properties `((upstream-name . "ActFrag")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-accelerometry" ,r-accelerometry)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ineq" ,r-ineq)
-       ("r-survival" ,r-survival)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-accelerometry r-dplyr r-ineq r-survival r-tidyr))
     (home-page "https://github.com/junruidi/ActFrag")
     (synopsis "Activity fragmentation metrics extraction")
     (description
@@ -22215,7 +21973,7 @@ actigraphy-measured activity counts data.")
          "1ay2a2agdmiz7zzvn26mli0x0iwk09g5pp4yy1r23knhkp1pn2lb"))))
     (properties `((upstream-name . "ash")))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/ash/")
     (synopsis "David Scott's ASH routines")
     (description
@@ -22237,13 +21995,13 @@ R.")
     (properties `((upstream-name . "hdrcde")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ash" ,r-ash)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-kernsmooth" ,r-kernsmooth)
-       ("r-ks" ,r-ks)
-       ("r-locfit" ,r-locfit)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)))
-    (native-inputs `(("gfortran" ,gfortran)))
+     (list r-ash
+           r-ggplot2
+           r-kernsmooth
+           r-ks
+           r-locfit
+           r-rcolorbrewer))
+    (native-inputs (list gfortran))
     (home-page "http://pkg.robjhyndman.com/hdrcde")
     (synopsis "Highest density regions and conditional density estimation")
     (description
@@ -22266,12 +22024,12 @@ conditional on one covariate, and multimodal regression.")
     (properties `((upstream-name . "rainbow")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cluster" ,r-cluster)
-       ("r-colorspace" ,r-colorspace)
-       ("r-hdrcde" ,r-hdrcde)
-       ("r-ks" ,r-ks)
-       ("r-mass" ,r-mass)
-       ("r-pcapp" ,r-pcapp)))
+     (list r-cluster
+           r-colorspace
+           r-hdrcde
+           r-ks
+           r-mass
+           r-pcapp))
     (home-page "https://cran.r-project.org/web/packages/rainbow/")
     (synopsis "Bagplots, boxplots and rainbow plots for functional data")
     (description
@@ -22293,8 +22051,7 @@ functional outliers with bagplots, boxplots and rainbow plots.")
     (properties `((upstream-name . "fds")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rainbow" ,r-rainbow)
-       ("r-rcurl" ,r-rcurl)))
+     (list r-rainbow r-rcurl))
     (home-page "https://cran.r-project.org/web/packages/fds/")
     (synopsis "Functional data sets")
     (description "This package contains a list of functional time series,
@@ -22307,19 +22064,18 @@ variable observed over time.")
 (define-public r-fda
   (package
     (name "r-fda")
-    (version "5.1.9")
+    (version "5.5.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "fda" version))
        (sha256
         (base32
-         "0yjrjsv55bcwqn2yxjgj3hn17wfvjvgngfw9xv3w802i52yz9gf8"))))
+         "0fm2vswc8fdi2p1axby0hjwh8m6lc1zrdikrpiamilr6w9m2zanw"))))
     (properties `((upstream-name . "fda")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-fds" ,r-fds)
-       ("r-matrix" ,r-matrix)))
+     (list r-desolve r-fds r-matrix))
     (home-page "https://www.functionaldata.org")
     (synopsis "Functional data analysis")
     (description
@@ -22343,7 +22099,7 @@ examples.")
     (properties `((upstream-name . "Actigraphy")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-fda" ,r-fda)))
+     (list r-fda))
     (home-page "https://cran.r-project.org/web/packages/Actigraphy/")
     (synopsis "Actigraphy data analysis")
     (description
@@ -22365,7 +22121,7 @@ of actigraphy data.")
     (properties `((upstream-name . "ActiveDriver")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mass" ,r-mass)))
+     (list r-mass))
     (home-page "https://cran.r-project.org/web/packages/ActiveDriver/")
     (synopsis "Tools for finding cancer driver proteins")
     (description
@@ -22394,11 +22150,7 @@ known drivers.")
      `((upstream-name . "activityCounts")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lubridate" ,r-lubridate)
-       ("r-magrittr" ,r-magrittr)
-       ("r-seewave" ,r-seewave)
-       ("r-signal" ,r-signal)
-       ("r-tibble" ,r-tibble)))
+     (list r-lubridate r-magrittr r-seewave r-signal r-tibble))
     (home-page "https://github.com/walkabillylab/activityCounts")
     (synopsis "Generate ActiLife counts")
     (description
@@ -22425,11 +22177,9 @@ data for different accelerometer brands.")
     (properties `((upstream-name . "ActivityIndex")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-r-utils" ,r-r-utils)))
+     (list r-data-table r-matrixstats r-r-utils))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/ActivityIndex/")
     (synopsis "Activity Index calculation using raw accelerometry data")
     (description
@@ -22452,12 +22202,12 @@ al. (2016) @url{doi:10.1371/journal.pone.0160644}.")
     (properties `((upstream-name . "activPAL")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-devtools" ,r-devtools)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-lubridate" ,r-lubridate)
-       ("r-magrittr" ,r-magrittr)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-devtools
+           r-dplyr
+           r-ggplot2
+           r-lubridate
+           r-magrittr
+           r-tidyr))
     (home-page "https://cran.r-project.org/web/packages/activPAL")
     (synopsis "Processing and chart generation from activPAL events files")
     (description
@@ -22484,7 +22234,7 @@ sets, such as sleep diaries and continuous glucose monitoring data.")
      `((upstream-name . "activpalProcessing")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-chron" ,r-chron)))
+     (list r-chron))
     (home-page "https://cran.r-project.org/web/packages/activpalProcessing/")
     (synopsis "Process activPAL events files")
     (description
@@ -22507,11 +22257,7 @@ behavior variables from activPAL events files.")
     (properties `((upstream-name . "actogrammr")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-lubridate" ,r-lubridate)
-       ("r-readr" ,r-readr)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-dplyr r-ggplot2 r-lubridate r-readr r-tidyr))
     (home-page "https://cran.r-project.org/web/packages/actogrammr/")
     (synopsis "Read in activity data and plot actograms")
     (description
@@ -22548,17 +22294,17 @@ API; see the package vignette for details.")
 (define-public r-actuar
   (package
     (name "r-actuar")
-    (version "3.1-4")
+    (version "3.2-0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "actuar" version))
        (sha256
         (base32
-         "0m9b4787a866cddf1skjz6634237dvg1i5qyqss4sgvcrbmx3hw0"))))
+         "015brjjgmkwmjajdjdw8gs02jrd96if425pk9a97d499hzsq3xds"))))
     (properties `((upstream-name . "actuar")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-expint" ,r-expint)))
+    (propagated-inputs (list r-expint))
     (home-page "https://gitlab.com/vigou3/actuar")
     (synopsis "Actuarial functions and heavy tailed distributions")
     (description
@@ -22607,13 +22353,9 @@ currently limited to 8 bit greyscale images and 24, 32 bit (A)RGB images.")
     (properties `((upstream-name . "readbitmap")))
     (build-system r-build-system)
     (inputs
-     `(("libjpeg" ,libjpeg-turbo)
-       ("libpng" ,libpng)))
+     (list libjpeg-turbo libpng))
     (propagated-inputs
-     `(("r-bmp" ,r-bmp)
-       ("r-jpeg" ,r-jpeg)
-       ("r-png" ,r-png)
-       ("r-tiff" ,r-tiff)))
+     (list r-bmp r-jpeg r-png r-tiff))
     (home-page "https://github.com/jefferis/readbitmap")
     (synopsis "Unified interface to read bitmap images (BMP, JPEG, PNG, TIFF)")
     (description
@@ -22625,34 +22367,30 @@ number embedded in the file rather than the file extension.")
 (define-public r-imager
   (package
     (name "r-imager")
-    (version "0.42.10")
+    (version "0.42.11")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "imager" version))
        (sha256
         (base32
-         "1vmfmmawbk8sgyba87igaxpwb926nb1ji8a08ad3dqfj7aq9x4q1"))))
+         "1a1jhmgrpv1d0fk14axj88qvxgb25bqnj65d60g1k985ipzvgy27"))))
     (properties `((upstream-name . "imager")))
     (build-system r-build-system)
     (inputs
-     `(("fftw" ,fftw)
-       ("libtiff" ,libtiff)
-       ("libx11" ,libx11)
-       ("zlib" ,zlib)))
-    (propagated-inputs
-     `(("r-downloader" ,r-downloader)
-       ("r-igraph" ,r-igraph)
-       ("r-jpeg" ,r-jpeg)
-       ("r-magrittr" ,r-magrittr)
-       ("r-png" ,r-png)
-       ("r-purrr" ,r-purrr)
-       ("r-rcpp" ,r-rcpp)
-       ("r-readbitmap" ,r-readbitmap)
-       ("r-stringr" ,r-stringr)))
-    (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("r-knitr" ,r-knitr)))
+     (list fftw libtiff libx11 zlib))
+    (propagated-inputs
+     (list r-downloader
+           r-igraph
+           r-jpeg
+           r-magrittr
+           r-png
+           r-purrr
+           r-rcpp
+           r-readbitmap
+           r-stringr))
+    (native-inputs
+     (list pkg-config r-knitr))
     (home-page "https://dahtah.github.io/imager/")
     (synopsis "Image processing library")
     (description
@@ -22678,9 +22416,7 @@ simple, modern C++ library for image processing.")
     (properties `((upstream-name . "AcuityView")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-fftwtools" ,r-fftwtools)
-       ("r-imager" ,r-imager)
-       ("r-plotrix" ,r-plotrix)))
+     (list r-fftwtools r-imager r-plotrix))
     (home-page "https://cran.r-project.org/web/packages/AcuityView/")
     (synopsis "Display scenes as seen by an animal with less acute vision")
     (description
@@ -22691,28 +22427,29 @@ it may be seen by an animal with less acute vision.")
 (define-public r-caret
   (package
     (name "r-caret")
-    (version "6.0-88")
+    (version "6.0-90")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "caret" version))
        (sha256
         (base32
-         "174cyyhsw8s6jp80spmi40qq9sw5ys0r58v4ikp53kiw1dhd247s"))))
+         "1g36m06hp2fxxwv155bwbqlf97xhcia1lmg3axg6d74kgpns8lg8"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-foreach" ,r-foreach)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-lattice" ,r-lattice)
-       ("r-modelmetrics" ,r-modelmetrics)
-       ("r-nlme" ,r-nlme)
-       ("r-plyr" ,r-plyr)
-       ("r-proc" ,r-proc)
-       ("r-recipes" ,r-recipes)
-       ("r-reshape2" ,r-reshape2)
-       ("r-withr" ,r-withr)))
+     (list r-e1071
+           r-foreach
+           r-ggplot2
+           r-lattice
+           r-modelmetrics
+           r-nlme
+           r-plyr
+           r-proc
+           r-recipes
+           r-reshape2
+           r-withr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/topepo/caret")
     (synopsis "Classification and regression training")
     (description
@@ -22734,10 +22471,7 @@ classification and regression models.")
     (properties `((upstream-name . "adabag")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-caret" ,r-caret)
-       ("r-doparallel" ,r-doparallel)
-       ("r-foreach" ,r-foreach)
-       ("r-rpart" ,r-rpart)))
+     (list r-caret r-doparallel r-foreach r-rpart))
     (home-page "https://cran.r-project.org/web/packages/adabag/")
     (synopsis "Multiclass AdaBoost.M1, SAMME and Bagging")
     (description
@@ -22762,7 +22496,7 @@ done.")
     (properties `((upstream-name . "adagio")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lpsolve" ,r-lpsolve)))
+     (list r-lpsolve))
     (home-page "https://cran.r-project.org/web/packages/adagio/")
     (synopsis "Discrete and global optimization routines")
     (description
@@ -22786,8 +22520,7 @@ functions.")
     (properties `((upstream-name . "univOutl")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-hmisc" ,r-hmisc)
-       ("r-robustbase" ,r-robustbase)))
+     (list r-hmisc r-robustbase))
     (home-page "https://github.com/marcellodo/univOutl")
     (synopsis "Detection of univariate outliers")
     (description
@@ -22812,8 +22545,7 @@ used in outliers detection.")
     (properties `((upstream-name . "tolerance")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mass" ,r-mass)
-       ("r-rgl" ,r-rgl)))
+     (list r-mass r-rgl))
     (home-page "https://cran.r-project.org/web/packages/tolerance/")
     (synopsis "Statistical tolerance intervals and regions")
     (description
@@ -22864,9 +22596,7 @@ Johnson-Graybill, LBI, Tusell and modified Tukey non-additivity tests.")
     (properties `((upstream-name . "flexclust")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-class" ,r-class)
-       ("r-lattice" ,r-lattice)
-       ("r-modeltools" ,r-modeltools)))
+     (list r-class r-lattice r-modeltools))
     (home-page "https://cran.r-project.org/web/packages/flexclust/")
     (synopsis "Flexible cluster algorithms")
     (description
@@ -22893,13 +22623,13 @@ cluster stability.")
     (properties `((upstream-name . "biclust")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-additivitytests" ,r-additivitytests)
-       ("r-colorspace" ,r-colorspace)
-       ("r-flexclust" ,r-flexclust)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-lattice" ,r-lattice)
-       ("r-mass" ,r-mass)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-additivitytests
+           r-colorspace
+           r-flexclust
+           r-ggplot2
+           r-lattice
+           r-mass
+           r-tidyr))
     (home-page "https://cran.r-project.org/web/packages/biclust/")
     (synopsis "BiCluster algorithms")
     (description
@@ -22924,9 +22654,7 @@ validation of bicluster solutions.")
     (properties `((upstream-name . "ICGE")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cluster" ,r-cluster)
-       ("r-fastcluster" ,r-fastcluster)
-       ("r-mass" ,r-mass)))
+     (list r-cluster r-fastcluster r-mass))
     (home-page "https://cran.r-project.org/web/packages/ICGE/")
     (synopsis "Cluster estimation and identification of atypical units")
     (description
@@ -22949,11 +22677,9 @@ on distances rather than on unit x variables.")
     (properties `((upstream-name . "depth")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-abind" ,r-abind)
-       ("r-circular" ,r-circular)
-       ("r-rgl" ,r-rgl)))
+     (list r-abind r-circular r-rgl))
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/depth/")
     (synopsis "Nonparametric depth functions for multivariate analysis")
     (description
@@ -22978,8 +22704,7 @@ spherical depths are supported.")
     (properties `((upstream-name . "archetypes")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-modeltools" ,r-modeltools)
-       ("r-nnls" ,r-nnls)))
+     (list r-modeltools r-nnls))
     (home-page "https://cran.r-project.org/web/packages/archetypes")
     (synopsis "Archetypal analysis")
     (description
@@ -23002,10 +22727,7 @@ different conceptual parts of the algorithm.")
     (properties `((upstream-name . "shapes")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mass" ,r-mass)
-       ("r-minpack-lm" ,r-minpack-lm)
-       ("r-rgl" ,r-rgl)
-       ("r-scatterplot3d" ,r-scatterplot3d)))
+     (list r-mass r-minpack-lm r-rgl r-scatterplot3d))
     (home-page "http://www.maths.nottingham.ac.uk/~ild/shapes")
     (synopsis "Statistical shape analysis")
     (description
@@ -23020,28 +22742,28 @@ Edition), John Wiley and Sons.")
 (define-public r-anthropometry
   (package
     (name "r-anthropometry")
-    (version "1.15")
+    (version "1.17")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "Anthropometry" version))
        (sha256
         (base32
-         "03xw0ggb2qqlldrv0qpjwmncnari742habb46im7y65bhgnr2awx"))))
+         "0vxjlzxv16bygw8n57f25msq5bd1dydg41my92ximah0nzzvbg41"))))
     (properties `((upstream-name . "Anthropometry")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-archetypes" ,r-archetypes)
-       ("r-biclust" ,r-biclust)
-       ("r-cluster" ,r-cluster)
-       ("r-depth" ,r-depth)
-       ("r-fnn" ,r-fnn)
-       ("r-icge" ,r-icge)
-       ("r-nnls" ,r-nnls)
-       ("r-rgl" ,r-rgl)
-       ("r-shapes" ,r-shapes)))
+     (list r-archetypes
+           r-biclust
+           r-cluster
+           r-depth
+           r-fnn
+           r-icge
+           r-nnls
+           r-rgl
+           r-shapes))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/Anthropometry/")
     (synopsis "Statistical methods for anthropometric data")
     (description
@@ -23052,6 +22774,29 @@ They are based on clustering, the statistical concept of data depth,
 statistical shape analysis and archetypal analysis.")
     (license license:gpl2+)))
 
+(define-public r-anndata
+  (package
+    (name "r-anndata")
+    (version "0.7.5.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "anndata" version))
+       (sha256
+        (base32 "115v7gdilayd18hd519vzkixp2s6rvvrd1inc1i6amn7d0spy8r1"))))
+    (properties `((upstream-name . "anndata")))
+    (build-system r-build-system)
+    (propagated-inputs (list r-assertthat r-matrix r-r6 r-reticulate))
+    (native-inputs (list r-knitr))
+    (home-page "https://anndata.dynverse.org")
+    (synopsis "Anndata for R")
+    (description
+     "This package provides a reticulate wrapper for the Python package
+@code{anndata}.  It provides a scalable way of keeping track of data and
+learned annotations.  It is used to read from and write to the h5ad file
+format.")
+    (license license:expat)))
+
 (define-public r-adamethods
   (package
     (name "r-adamethods")
@@ -23066,13 +22811,13 @@ statistical shape analysis and archetypal analysis.")
     (properties `((upstream-name . "adamethods")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-anthropometry" ,r-anthropometry)
-       ("r-archetypes" ,r-archetypes)
-       ("r-fnn" ,r-fnn)
-       ("r-foreach" ,r-foreach)
-       ("r-nnls" ,r-nnls)
-       ("r-tolerance" ,r-tolerance)
-       ("r-univoutl" ,r-univoutl)))
+     (list r-anthropometry
+           r-archetypes
+           r-fnn
+           r-foreach
+           r-nnls
+           r-tolerance
+           r-univoutl))
     (home-page "https://cran.r-project.org/web/packages/adamethods/")
     (synopsis "Archetypoid algorithms and anomaly detection")
     (description
@@ -23096,7 +22841,7 @@ these algorithms also detect anomalies (outliers).")
     (properties `((upstream-name . "IDPmisc")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lattice" ,r-lattice)))
+     (list r-lattice))
     (home-page "https://cran.r-project.org/web/packages/IDPmisc/")
     (synopsis "Functions for data analyses and visualization")
     (description
@@ -23125,9 +22870,9 @@ finding peaks in spectra, converting humidity measures.")
     (properties `((upstream-name . "qqman")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-calibrate" ,r-calibrate)))
+     (list r-calibrate))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/qqman/")
     (synopsis "Q-Q and Manhattan plots for GWAS data")
     (description
@@ -23150,10 +22895,7 @@ from PLINK results.")
      `((upstream-name . "ggplot.multistats")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-hexbin" ,r-hexbin)
-       ("r-rlang" ,r-rlang)
-       ("r-scales" ,r-scales)))
+     (list r-ggplot2 r-hexbin r-rlang r-scales))
     (home-page "https://github.com/flying-sheep/ggplot.multistats")
     (synopsis "Multiple summary statistics for binned stats/geometries")
     (description
@@ -23177,9 +22919,7 @@ aesthetics.")
     (properties `((upstream-name . "knn.covertree")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcppeigen" ,r-rcppeigen)))
+     (list r-matrix r-rcpp r-rcppeigen))
     (home-page "https://github.com/flying-sheep/knn.covertree")
     (synopsis "Accurate kNN Implementation with multiple distance measures")
     (description
@@ -23226,7 +22966,7 @@ generation for the Poisson binomial distribution.")
     (properties `((upstream-name . "diagram")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-shape" ,r-shape)))
+     (list r-shape))
     (home-page "https://cran.r-project.org/web/packages/diagram/")
     (synopsis "Visualize simple graphs (networks) and plot flow diagrams")
     (description
@@ -23253,8 +22993,7 @@ Francesca Mazzia (2012).")
     (properties `((upstream-name . "LIM")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-diagram" ,r-diagram)
-       ("r-limsolve" ,r-limsolve)))
+     (list r-diagram r-limsolve))
     (home-page "https://cran.r-project.org/web/packages/LIM/")
     (synopsis "Linear inverse model examples and solution methods")
     (description
@@ -23277,9 +23016,7 @@ problems (food web problems, linear programming problems).")
      `((upstream-name . "shinycssloaders")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-digest" ,r-digest)
-       ("r-glue" ,r-glue)
-       ("r-shiny" ,r-shiny)))
+     (list r-digest r-glue r-shiny))
     (home-page "https://github.com/andrewsali/shinycssloaders")
     (synopsis "Add CSS loading animations to Shiny outputs")
     (description
@@ -23303,11 +23040,9 @@ automatically show a loader when the output is (re)calculating.")
     (properties `((upstream-name . "rsvg")))
     (build-system r-build-system)
     (inputs
-     `(("librsvg" ,librsvg)
-       ("zlib" ,zlib)))
+     (list librsvg zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("r-knitr" ,r-knitr)))
+     (list pkg-config r-knitr))
     (home-page "https://github.com/jeroen/rsvg#readme")
     (synopsis "Render SVG images into PDF, PNG, PostScript, or Bitmap arrays")
     (description
@@ -23332,8 +23067,7 @@ PDF or PostScript.")
     (properties `((upstream-name . "influenceR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-igraph" ,r-igraph)
-       ("r-matrix" ,r-matrix)))
+     (list r-igraph r-matrix))
     (home-page "https://github.com/rcc-uchicago/influenceR")
     (synopsis "Tools to quantify structural importance of nodes in a network")
     (description
@@ -23360,7 +23094,7 @@ OpenMP.")
     (properties `((upstream-name . "emplik")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-quantreg" ,r-quantreg)))
+     (list r-quantreg))
     (home-page "https://www.ms.uky.edu/~mai/EmpLik.html")
     (synopsis "Empirical likelihood ratio for censored/truncated data")
     (description
@@ -23383,11 +23117,7 @@ does regression.")
     (properties `((upstream-name . "imputeYn")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-boot" ,r-boot)
-       ("r-emplik" ,r-emplik)
-       ("r-mvtnorm" ,r-mvtnorm)
-       ("r-quadprog" ,r-quadprog)
-       ("r-survival" ,r-survival)))
+     (list r-boot r-emplik r-mvtnorm r-quadprog r-survival))
     (home-page "https://cran.r-project.org/web/packages/imputeYn/")
     (synopsis "Impute last largest censored observation under weighted least squares")
     (description
@@ -23410,10 +23140,7 @@ AFT models.")
     (properties `((upstream-name . "AdapEnetClass")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-glmnet" ,r-glmnet)
-       ("r-imputeyn" ,r-imputeyn)
-       ("r-lars" ,r-lars)
-       ("r-quadprog" ,r-quadprog)))
+     (list r-glmnet r-imputeyn r-lars r-quadprog))
     (home-page "https://cran.r-project.org/web/packages/AdapEnetClass/")
     (synopsis "Class of adaptive elastic net methods for censored data")
     (description
@@ -23433,7 +23160,7 @@ AFT models.")
          "1zg93p74icj4bhxnmnssj2xp6vw4yaksyavq03497v33xfpdxss7"))))
     (properties `((upstream-name . "flock")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-rcpp" ,r-rcpp)))
+    (propagated-inputs (list r-rcpp))
     (home-page "https://cran.r-project.org/web/packages/flock/")
     (synopsis "Process synchronization using file locks")
     (description
@@ -23456,16 +23183,16 @@ both exclusive and shared locking.")
     (properties `((upstream-name . "archivist")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dbi" ,r-dbi)
-       ("r-digest" ,r-digest)
-       ("r-flock" ,r-flock)
-       ("r-httr" ,r-httr)
-       ("r-lubridate" ,r-lubridate)
-       ("r-magrittr" ,r-magrittr)
-       ("r-rcurl" ,r-rcurl)
-       ("r-rsqlite" ,r-rsqlite)))
+     (list r-dbi
+           r-digest
+           r-flock
+           r-httr
+           r-lubridate
+           r-magrittr
+           r-rcurl
+           r-rsqlite))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://pbiecek.github.io/archivist/")
     (synopsis "Tools for storing, restoring and searching for R objects")
     (description
@@ -23515,21 +23242,21 @@ versions of currently installed packages.")
     (properties `((upstream-name . "adapr")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-archivist" ,r-archivist)
-       ("r-devtools" ,r-devtools)
-       ("r-digest" ,r-digest)
-       ("r-doparallel" ,r-doparallel)
-       ("r-gdata" ,r-gdata)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-git2r" ,r-git2r)
-       ("r-igraph" ,r-igraph)
-       ("r-knitr" ,r-knitr)
-       ("r-plotly" ,r-plotly)
-       ("r-plyr" ,r-plyr)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("r-shiny" ,r-shiny)
-       ("r-shinydashboard" ,r-shinydashboard)
-       ("r-versions" ,r-versions)))
+     (list r-archivist
+           r-devtools
+           r-digest
+           r-doparallel
+           r-gdata
+           r-ggplot2
+           r-git2r
+           r-igraph
+           r-knitr
+           r-plotly
+           r-plyr
+           r-rmarkdown
+           r-shiny
+           r-shinydashboard
+           r-versions))
     (home-page "https://cran.r-project.org/web/packages/adapr/")
     (synopsis "Implementation of an accountable data analysis process")
     (description
@@ -23552,7 +23279,7 @@ histories of inputs and outputs.")
          "1jayjrsiib2ij4rxxj59g71r3xhzl5yqh0lhi8k6cfy03i7dkvis"))))
     (properties `((upstream-name . "AdapSamp")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-pracma" ,r-pracma)))
+    (propagated-inputs (list r-pracma))
     (home-page "https://cran.r-project.org/web/packages/AdapSamp/")
     (synopsis "Adaptive sampling algorithms")
     (description
@@ -23580,9 +23307,7 @@ above.")
     (properties `((upstream-name . "adaptalint")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-lintr" ,r-lintr)
-       ("r-purrr" ,r-purrr)))
+     (list r-dplyr r-lintr r-purrr))
     (home-page "https://cran.r-project.org/web/packages/adaptalint/")
     (synopsis "Check R code style")
     (description
@@ -23617,31 +23342,31 @@ Raftery, Appl.Statistics, 1989); it includes inference and basic methods.")
 (define-public r-forecast
   (package
     (name "r-forecast")
-    (version "8.15")
+    (version "8.16")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "forecast" version))
        (sha256
         (base32
-         "0x4ij55sb45qnwba3bybs50vsvv82q3j8p47xmbv959h13nsnfn7"))))
+         "0zvn44k7npxai8kj0hgxaaqv1hgd8rxicnvj4cg7wfl8ba4yn0cz"))))
     (properties `((upstream-name . "forecast")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-colorspace" ,r-colorspace)
-       ("r-fracdiff" ,r-fracdiff)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-lmtest" ,r-lmtest)
-       ("r-magrittr" ,r-magrittr)
-       ("r-nnet" ,r-nnet)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-timedate" ,r-timedate)
-       ("r-tseries" ,r-tseries)
-       ("r-urca" ,r-urca)
-       ("r-zoo" ,r-zoo)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))           ; needed for vignettes
+     (list r-colorspace
+           r-fracdiff
+           r-ggplot2
+           r-lmtest
+           r-magrittr
+           r-nnet
+           r-rcpp
+           r-rcpparmadillo
+           r-timedate
+           r-tseries
+           r-urca
+           r-zoo))
+    (native-inputs
+     (list r-knitr))           ; needed for vignettes
     (home-page "https://pkg.robjhyndman.com/forecast/")
     (synopsis "Forecasting functions for time series and linear models")
     (description
@@ -23650,6 +23375,32 @@ univariate time series forecasts including exponential smoothing via state
 space models and automatic ARIMA modelling.")
     (license license:gpl3)))
 
+(define-public r-formattable
+  (package
+    (name "r-formattable")
+    (version "0.2.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "formattable" version))
+       (sha256
+        (base32 "1vdxi0xmg019qyzjrp8bkjxciz245jcxsrkhfzd44ynqcwi4s3ag"))))
+    (properties `((upstream-name . "formattable")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-htmltools r-htmlwidgets r-lifecycle r-rmarkdown))
+    (native-inputs
+     (list r-knitr))
+    (home-page "https://github.com/renkun-ken/formattable")
+    (synopsis "Print vectors and data frames with text fromatting")
+    (description
+     "This R package provides functions to create formattable vectors and data
+frames.  @emph{Formattable} vectors are printed with text formatting, and
+formattable data frames are printed with multiple types of formatting in HTML
+to improve the readability of data presented in tabular form rendered in web
+pages.")
+    (license license:expat)))
+
 (define-public r-xmisc
   (package
     (name "r-xmisc")
@@ -23675,21 +23426,18 @@ programming} (OOP) using R Reference Class.")
 (define-public r-proxyc
   (package
     (name "r-proxyc")
-    (version "0.2.1")
+    (version "0.2.4")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "proxyC" version))
        (sha256
         (base32
-         "1j8zsxdnpi8bywd7hhm47icgl1jhfyd8myj78bqgk7warai6m3iq"))))
+         "1mcimswrx1cjjm7wsgkzfrgh3jpf4sncwfvdvg2f14fzfzy7afd6"))))
     (properties `((upstream-name . "proxyC")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-rcppparallel" ,r-rcppparallel)))
+     (list r-matrix r-rcpp r-rcpparmadillo r-rcppparallel))
     (home-page "https://cran.r-project.org/package=proxyC")
     (synopsis "Compute proximity in large sparse matrices")
     (description
@@ -23703,14 +23451,14 @@ and Euclidean distance is particularly fast.")
 (define-public r-isocodes
   (package
     (name "r-isocodes")
-    (version "2021.02.24")
+    (version "2022.01.10")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "ISOcodes" version))
        (sha256
         (base32
-         "19irnn2yi1bzhf03g666la84kj8040f5913kfrmd16dfnjy6j9qm"))))
+         "0gy7n5bgxnl4rawry0pg078bkks9lzsbsrwjq8q5cvxl4k3dwpdj"))))
     (properties `((upstream-name . "ISOcodes")))
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/package=ISOcodes")
@@ -23725,18 +23473,18 @@ character codes as well as the UN M.49 area codes.")
 (define-public r-stopwords
   (package
     (name "r-stopwords")
-    (version "2.2")
+    (version "2.3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "stopwords" version))
        (sha256
         (base32
-         "1f862y30c4r0phamlp7shzkpxg0vh3i410xy0336w310hv3wqsxn"))))
+         "1ci1cgxrcvlhhplximsfv0plvjdbcd5kv0nphxnpildsn5m1rv65"))))
     (properties `((upstream-name . "stopwords")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-isocodes" ,r-isocodes)))
+     (list r-isocodes))
     (home-page "https://github.com/quanteda/stopwords")
     (synopsis "Multilingual stopword lists")
     (description
@@ -23758,8 +23506,7 @@ analysis and natural language processing.")
     (properties `((upstream-name . "spacyr")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)
-       ("r-reticulate" ,r-reticulate)))
+     (list r-data-table r-reticulate))
     (home-page "https://spacyr.quanteda.io")
     (synopsis "R wrapper for the spaCy NLP library")
     (description
@@ -23793,30 +23540,30 @@ Norwegian, Portuguese, Romanian, Russian, Spanish, Swedish and Turkish.")
 (define-public r-quanteda
   (package
     (name "r-quanteda")
-    (version "3.1.0")
+    (version "3.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "quanteda" version))
        (sha256
         (base32
-         "0gafbb73gcxx2gq9q7bg88alyhymkr471lp394m5ydij6mdm4hb9"))))
+         "0q72jsc6zalnl35qq02z9niissnyax4zxzqzpfpjsmgmxpd797mw"))))
     (properties `((upstream-name . "quanteda")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-fastmatch" ,r-fastmatch)
-       ("r-magrittr" ,r-magrittr)
-       ("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-rcppparallel" ,r-rcppparallel)
-       ("r-snowballc" ,r-snowballc)
-       ("r-stopwords" ,r-stopwords)
-       ("r-stringi" ,r-stringi)
-       ("r-xml2" ,r-xml2)
-       ("r-yaml" ,r-yaml)))
+     (list r-fastmatch
+           r-magrittr
+           r-matrix
+           r-rcpp
+           r-rcpparmadillo
+           r-rcppparallel
+           r-snowballc
+           r-stopwords
+           r-stringi
+           r-xml2
+           r-yaml))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://quanteda.io")
     (synopsis "Quantitative analysis of textual data")
     (description
@@ -23843,11 +23590,9 @@ machine learning, visually representing text and text analyses, and more.")
     (properties `((upstream-name . "topicmodels")))
     (build-system r-build-system)
     (inputs
-     `(("gsl" ,gsl)))
+     (list gsl))
     (propagated-inputs
-     `(("r-modeltools" ,r-modeltools)
-       ("r-slam" ,r-slam)
-       ("r-tm" ,r-tm)))
+     (list r-modeltools r-slam r-tm))
     (home-page "https://cran.r-project.org/package=topicmodels")
     (synopsis "Topic models")
     (description
@@ -23871,17 +23616,17 @@ Gibbs sampling by Xuan-Hieu Phan and co-authors.")
     (properties `((upstream-name . "stm")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)
-       ("r-glmnet" ,r-glmnet)
-       ("r-lda" ,r-lda)
-       ("r-matrix" ,r-matrix)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-quadprog" ,r-quadprog)
-       ("r-quanteda" ,r-quanteda)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-slam" ,r-slam)
-       ("r-stringr" ,r-stringr)))
+     (list r-data-table
+           r-glmnet
+           r-lda
+           r-matrix
+           r-matrixstats
+           r-quadprog
+           r-quanteda
+           r-rcpp
+           r-rcpparmadillo
+           r-slam
+           r-stringr))
     (home-page "http://www.structuraltopicmodel.com/")
     (synopsis "Estimation of the Structural Topic Model")
     (description
@@ -23894,19 +23639,18 @@ regressions.")
 (define-public r-polycor
   (package
     (name "r-polycor")
-    (version "0.7-10")
+    (version "0.8-1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "polycor" version))
        (sha256
         (base32
-         "0wzwzklflbhi8sv9m7ijwr16v9zmkk0j0v4pbcpf32f8lbn3psna"))))
+         "0285rvx8238qp8dix0jq0cqq7ks8h6cjwsscbc7dx4n9nph56pzh"))))
     (properties `((upstream-name . "polycor")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-matrix" ,r-matrix)
-       ("r-mvtnorm" ,r-mvtnorm)))
+     (list r-admisc r-matrix r-mvtnorm))
     (home-page "https://r-forge.r-project.org/projects/polycor/")
     (synopsis "Polychoric and polyserial correlations")
     (description
@@ -23918,20 +23662,18 @@ errors; tetrachoric and biserial correlations are special cases.")
 (define-public r-msm
   (package
     (name "r-msm")
-    (version "1.6.8")
+    (version "1.6.9")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "msm" version))
        (sha256
         (base32
-         "1d32y8f0vb2dfv3999liigpns788j145nrvd1xpxb9i2lsg8mwgk"))))
+         "08vhazswyxr3y1zb9y60mbg3bappzlizxml8s08p65mh82xxkz5f"))))
     (properties `((upstream-name . "msm")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-expm" ,r-expm)
-       ("r-mvtnorm" ,r-mvtnorm)
-       ("r-survival" ,r-survival)))
+     (list r-expm r-mvtnorm r-survival))
     (home-page "https://github.com/chjackson/msm")
     (synopsis "Multi-state Markov and hidden Markov models in continuous time")
     (description
@@ -23957,9 +23699,7 @@ be constant or piecewise-constant in time.")
     (properties `((upstream-name . "ltm")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mass" ,r-mass)
-       ("r-msm" ,r-msm)
-       ("r-polycor" ,r-polycor)))
+     (list r-mass r-msm r-polycor))
     (home-page "https://github.com/drizopoulos/ltm")
     (synopsis "Latent trait models under IRT")
     (description
@@ -23984,8 +23724,7 @@ Models.")
     (properties `((upstream-name . "mi")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-arm" ,r-arm)
-       ("r-matrix" ,r-matrix)))
+     (list r-arm r-matrix))
     (home-page "http://www.stat.columbia.edu/~gelman/")
     (synopsis "Missing data imputation and model checking")
     (description
@@ -24018,24 +23757,65 @@ additional functions that are comparable to APL functions which are useful for
 actuarial models such as pension mathematics.")
     (license license:gpl2+)))
 
+(define-public r-matrixextra
+  (package
+    (name "r-matrixextra")
+    (version "0.1.9-1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "MatrixExtra" version))
+       (sha256
+        (base32 "098apgqlncgxspa8mi4bx2nk5fbk3880whqiwkvydsfsqrbv1sj0"))))
+    (properties `((upstream-name . "MatrixExtra")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-float r-matrix r-rcpp r-rhpcblasctl))
+    (native-inputs
+     (list r-knitr))
+    (home-page "https://github.com/david-cortes/MatrixExtra")
+    (synopsis "Extra methods for sparse matrices")
+    (description
+     "This package extends sparse matrix and vector classes from the Matrix
+package by providing:
+
+@enumerate
+@item Methods and operators that work natively on CSR formats (compressed
+  sparse row, a.k.a. @code{RsparseMatrix}) such as slicing/sub-setting,
+  assignment, @code{rbind()}, mathematical operators for CSR and COO such as
+  addition or @code{sqrt()}, and methods such as @code{diag()};
+@item Multi-threaded matrix multiplication and cross-product for many
+  @code{<sparse, dense>} types, including the @code{float32} type from
+  @code{float};
+@item Coercion methods between pairs of classes which are not present in
+  @code{Matrix}, such as from @code{dgCMatrix} to @code{ngRMatrix}, as well as
+  convenience conversion functions;
+@item Utility functions for sparse matrices such as sorting the indices or
+  removing zero-valued entries;
+@item Fast transposes that work by outputting in the opposite storage format;
+@item Faster replacements for many @code{Matrix} methods for all sparse types,
+  such as slicing and elementwise multiplication.
+@item Convenience functions for sparse objects, such as @code{mapSparse} or a
+  shorter @code{show} method.
+@end enumerate
+")
+    (license license:gpl2+)))
+
 (define-public r-sem
   (package
     (name "r-sem")
-    (version "3.1-11")
+    (version "3.1-13")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "sem" version))
        (sha256
         (base32
-         "03j3ig6fy34pi6nwfq9w8f5m555lilw5skr1vn6ay4yvjmvavc9k"))))
+         "0r9g4j0w6q4qy9jl9gkjkihml4109ymg3y6zmhyg806q19qryx07"))))
     (properties `((upstream-name . "sem")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-boot" ,r-boot)
-       ("r-mass" ,r-mass)
-       ("r-matrixcalc" ,r-matrixcalc)
-       ("r-mi" ,r-mi)))
+     (list r-boot r-mass r-mi))
     (home-page "https://cran.r-project.org/package=sem")
     (synopsis "Structural equation models")
     (description
@@ -24059,8 +23839,7 @@ least squares.")
     (properties `((upstream-name . "semTools")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lavaan" ,r-lavaan)
-       ("r-pbivnorm" ,r-pbivnorm)))
+     (list r-lavaan r-pbivnorm))
     (home-page "https://github.com/simsem/semTools/wiki")
     (synopsis "Useful tools for structural equation modeling")
     (description
@@ -24081,12 +23860,9 @@ least squares.")
     (properties `((upstream-name . "regsem")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lavaan" ,r-lavaan)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-rsolnp" ,r-rsolnp)))
+     (list r-lavaan r-rcpp r-rcpparmadillo r-rsolnp))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/package=regsem")
     (synopsis "Regularized structural equation modeling")
     (description
@@ -24110,13 +23886,11 @@ perform @dfn{exploratory mediation} (XMed).")
          "0srkyawyiykn3p5lw1z3zf18s4ax4iasv1ci3l1px40f9w36wm17"))))
     (properties `((upstream-name . "StanHeaders")))
     (build-system r-build-system)
-    (inputs `(("pandoc" ,pandoc)))
+    (inputs (list pandoc))
     (propagated-inputs
-     `(("r-rcppeigen" ,r-rcppeigen)
-       ("r-rcppparallel" ,r-rcppparallel)))
+     (list r-rcppeigen r-rcppparallel))
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("r-knitr" ,r-knitr))) ; for vignettes
+     (list gfortran r-knitr)) ; for vignettes
     (home-page "https://mc-stan.org/")
     (synopsis "C++ header files for Stan")
     (description
@@ -24141,23 +23915,20 @@ and analyze Stan models.")
 (define-public r-rpf
   (package
     (name "r-rpf")
-    (version "1.0.8")
+    (version "1.0.11")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "rpf" version))
        (sha256
         (base32
-         "039r6yz2ax7i9sv8vi98yg7llwb966ay6mrifpmp6q3xh1f634kl"))))
+         "1yr1i7kswq57mcxv05lh7bvbicz1djqxcl6f13dlgsf3ww56gzg1"))))
     (properties `((upstream-name . "rpf")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lifecycle" ,r-lifecycle)
-       ("r-mvtnorm" ,r-mvtnorm)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcppeigen" ,r-rcppeigen)))
+     (list r-lifecycle r-mvtnorm r-rcpp r-rcppeigen))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/jpritikin/rpf")
     (synopsis "Response probability functions")
     (description
@@ -24171,28 +23942,28 @@ Complete access to optimized C functions is made available with
 (define-public r-openmx
   (package
     (name "r-openmx")
-    (version "2.19.8")
+    (version "2.20.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "OpenMx" version))
        (sha256
         (base32
-         "0q37mwxqhgdi05rwdfwfapgazfp541xsvw3yskf21lv11y2yjjyb"))))
+         "1flkm5nsvdnqhjayzajv80lsvjbh21v4zbm7ak09051x0giv3shj"))))
     (properties `((upstream-name . "OpenMx")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bh" ,r-bh)
-       ("r-digest" ,r-digest)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-mass" ,r-mass)
-       ("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcppeigen" ,r-rcppeigen)
-       ("r-rcppparallel" ,r-rcppparallel)
-       ("r-rpf" ,r-rpf)
-       ("r-stanheaders" ,r-stanheaders)))
-    (native-inputs `(("gfortran" ,gfortran)))
+     (list r-bh
+           r-digest
+           r-lifecycle
+           r-mass
+           r-matrix
+           r-rcpp
+           r-rcppeigen
+           r-rcppparallel
+           r-rpf
+           r-stanheaders))
+    (native-inputs (list r-knitr gfortran))
     (home-page "http://openmx.ssri.psu.edu")
     (synopsis "Extended structural equation modelling")
     (description
@@ -24216,11 +23987,7 @@ estimate parameters given observed data.")
     (properties `((upstream-name . "kutils")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-foreign" ,r-foreign)
-       ("r-openxlsx" ,r-openxlsx)
-       ("r-plyr" ,r-plyr)
-       ("r-runit" ,r-runit)
-       ("r-xtable" ,r-xtable)))
+     (list r-foreign r-openxlsx r-plyr r-runit r-xtable))
     (home-page "https://cran.r-project.org/package=kutils")
     (synopsis "Project management tools")
     (description
@@ -24246,10 +24013,7 @@ importation and recoding.")
     (properties `((upstream-name . "rockchalk")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cardata" ,r-cardata)
-       ("r-kutils" ,r-kutils)
-       ("r-lme4" ,r-lme4)
-       ("r-mass" ,r-mass)))
+     (list r-cardata r-kutils r-lme4 r-mass))
     (home-page "https://cran.r-project.org/package=rockchalk")
     (synopsis "Regression estimation and presentation")
     (description
@@ -24296,7 +24060,7 @@ output in R.")
     (properties `((upstream-name . "BDgraph")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-igraph" ,r-igraph)))
+     (list r-igraph))
     (home-page "https://www.uva.nl/profile/a.mohammadi")
     (synopsis "Bayesian structure learning in graphical models")
     (description
@@ -24320,9 +24084,7 @@ on a continuous-time birth-death process.")
     (properties `((upstream-name . "d3Network")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-plyr" ,r-plyr)
-       ("r-rjson" ,r-rjson)
-       ("r-whisker" ,r-whisker)))
+     (list r-plyr r-rjson r-whisker))
     (home-page "http://christophergandrud.github.io/d3Network/")
     (synopsis "Create D3 JavaScript network, tree, dendrogram, and Sankey graphs")
     (description
@@ -24333,36 +24095,35 @@ network, tree, dendrogram, and Sankey graphs from R using data frames.")
 (define-public r-qgraph
   (package
     (name "r-qgraph")
-    (version "1.6.9")
+    (version "1.9")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "qgraph" version))
        (sha256
         (base32
-         "153bqfmsrghkg7598nfr57r3cxv6dn6ir084njl2sqq5np0sj9di"))))
+         "1ahhzp64jdgki5p2wga5mn8a2n1x2zldgpilrpf7hy5l9nf4imz1"))))
     (properties `((upstream-name . "qgraph")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-abind" ,r-abind)
-       ("r-colorspace" ,r-colorspace)
-       ("r-corpcor" ,r-corpcor)
-       ("r-dplyr" ,r-dplyr)
-       ("r-fdrtool" ,r-fdrtool)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-glasso" ,r-glasso)
-       ("r-gtools" ,r-gtools)
-       ("r-hmisc" ,r-hmisc)
-       ("r-igraph" ,r-igraph)
-       ("r-jpeg" ,r-jpeg)
-       ("r-lavaan" ,r-lavaan)
-       ("r-matrix" ,r-matrix)
-       ("r-pbapply" ,r-pbapply)
-       ("r-plyr" ,r-plyr)
-       ("r-png" ,r-png)
-       ("r-psych" ,r-psych)
-       ("r-rcpp" ,r-rcpp)
-       ("r-reshape2" ,r-reshape2)))
+     (list r-abind
+           r-colorspace
+           r-corpcor
+           r-fdrtool
+           r-ggplot2
+           r-glasso
+           r-gtools
+           r-hmisc
+           r-igraph
+           r-jpeg
+           r-lavaan
+           r-matrix
+           r-pbapply
+           r-plyr
+           r-png
+           r-psych
+           r-rcpp
+           r-reshape2))
     (home-page "http://sachaepskamp.com/qgraph/")
     (synopsis "Weighted network visualization and analysis")
     (description
@@ -24387,18 +24148,18 @@ model estimation.  See Epskamp et al. (2012)
     (properties `((upstream-name . "semPlot")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-colorspace" ,r-colorspace)
-       ("r-corpcor" ,r-corpcor)
-       ("r-igraph" ,r-igraph)
-       ("r-lavaan" ,r-lavaan)
-       ("r-lisreltor" ,r-lisreltor)
-       ("r-openmx" ,r-openmx)
-       ("r-plyr" ,r-plyr)
-       ("r-qgraph" ,r-qgraph)
-       ("r-regsem" ,r-regsem)
-       ("r-rockchalk" ,r-rockchalk)
-       ("r-sem" ,r-sem)
-       ("r-xml" ,r-xml)))
+     (list r-colorspace
+           r-corpcor
+           r-igraph
+           r-lavaan
+           r-lisreltor
+           r-openmx
+           r-plyr
+           r-qgraph
+           r-regsem
+           r-rockchalk
+           r-sem
+           r-xml))
     (home-page "https://github.com/SachaEpskamp/semPlot")
     (synopsis "Unified visualizations of structural equation models")
     (description
@@ -24426,10 +24187,7 @@ translated to input syntax for the R packages @code{sem} and @code{lavaan}.")
     (properties `((upstream-name . "CDM")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mvtnorm" ,r-mvtnorm)
-       ("r-polycor" ,r-polycor)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)))
+     (list r-mvtnorm r-polycor r-rcpp r-rcpparmadillo))
     (home-page
      "https://github.com/alexanderrobitzsch/CDM")
     (synopsis "Cognitive diagnosis modeling")
@@ -24460,9 +24218,7 @@ well as Ravand and Robitzsch (2015).")
     (properties `((upstream-name . "TAM")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cdm" ,r-cdm)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)))
+     (list r-cdm r-rcpp r-rcpparmadillo))
     (home-page "http://www.edmeasurementsurveys.com/TAM/Tutorials/")
     (synopsis "Test analysis modules")
     (description
@@ -24489,12 +24245,8 @@ Latent regression models and plausible value imputation are also supported.")
     (properties `((upstream-name . "eRm")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-colorspace" ,r-colorspace)
-       ("r-lattice" ,r-lattice)
-       ("r-mass" ,r-mass)
-       ("r-matrix" ,r-matrix)
-       ("r-psych" ,r-psych)))
-    (native-inputs `(("gfortran" ,gfortran)))
+     (list r-colorspace r-lattice r-mass r-matrix r-psych))
+    (native-inputs (list gfortran))
     (home-page "https://cran.r-project.org/package=eRm")
     (synopsis "Extended Rasch modeling")
     (description
@@ -24523,8 +24275,7 @@ elimination, and a simulation module for various binary data matrices.")
     (properties `((upstream-name . "irtoys")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ltm" ,r-ltm)
-       ("r-sm" ,r-sm)))
+     (list r-ltm r-sm))
     (home-page "https://cran.r-project.org/package=irtoys")
     (synopsis "Collection of functions related to Item Response Theory (IRT)")
     (description
@@ -24553,16 +24304,16 @@ Haberman's interaction model when all items are dichotomously scored.")
     (properties `((upstream-name . "iheatmapr")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-fastcluster" ,r-fastcluster)
-       ("r-ggdendro" ,r-ggdendro)
-       ("r-htmlwidgets" ,r-htmlwidgets)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-knitr" ,r-knitr)
-       ("r-magrittr" ,r-magrittr)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-scales" ,r-scales)))
+     (list r-fastcluster
+           r-ggdendro
+           r-htmlwidgets
+           r-jsonlite
+           r-knitr
+           r-magrittr
+           r-rcolorbrewer
+           r-scales))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://docs.ropensci.org/iheatmapr")
     (synopsis "Interactive, Complex Heatmaps")
     (description
@@ -24601,24 +24352,24 @@ and reproducible way.")
 (define-public r-rsconnect
   (package
     (name "r-rsconnect")
-    (version "0.8.24")
+    (version "0.8.25")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "rsconnect" version))
        (sha256
         (base32
-         "19p4w9dmhsl1vdvwv3hfmd5qzf4296g0x878idfajvrx0wgfysyg"))))
+         "1kyr4v7vds2yw3xmkk2yr56ylz1h95944brylwvwmwj5yxvm419w"))))
     (properties `((upstream-name . "rsconnect")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-curl" ,r-curl)
-       ("r-digest" ,r-digest)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-openssl" ,r-openssl)
-       ("r-packrat" ,r-packrat)
-       ("r-rstudioapi" ,r-rstudioapi)
-       ("r-yaml" ,r-yaml)))
+     (list r-curl
+           r-digest
+           r-jsonlite
+           r-openssl
+           r-packrat
+           r-rstudioapi
+           r-yaml))
     (home-page "https://github.com/rstudio/rsconnect")
     (synopsis "Deployment interface for R Markdown documents and Shiny applications")
     (description
@@ -24691,11 +24442,7 @@ documents, Shiny applications, Plumber APIs, plots, and static web content.")
             (base32
              "01mdnsaibm9jy2f1qpbn692hpv309lhj5si9nagib4dawmrkffij"))))))
     (propagated-inputs
-     `(("r-htmltools" ,r-htmltools)
-       ("r-htmlwidgets" ,r-htmlwidgets)
-       ("r-magrittr" ,r-magrittr)
-       ("r-xts" ,r-xts)
-       ("r-zoo" ,r-zoo)))
+     (list r-htmltools r-htmlwidgets r-magrittr r-xts r-zoo))
     (home-page "https://github.com/rstudio/dygraphs")
     (synopsis "Interface to Dygraphs interactive time series charting library")
     (description
@@ -24720,23 +24467,23 @@ series/point highlighting.")
     (properties `((upstream-name . "shinystan")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bayesplot" ,r-bayesplot)
-       ("r-colourpicker" ,r-colourpicker)
-       ("r-dt" ,r-dt)
-       ("r-dygraphs" ,r-dygraphs)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-gtools" ,r-gtools)
-       ("r-markdown" ,r-markdown)
-       ("r-reshape2" ,r-reshape2)
-       ("r-rsconnect" ,r-rsconnect)
-       ("r-rstan" ,r-rstan)
-       ("r-shiny" ,r-shiny)
-       ("r-shinyjs" ,r-shinyjs)
-       ("r-shinythemes" ,r-shinythemes)
-       ("r-threejs" ,r-threejs)
-       ("r-xtable" ,r-xtable)
-       ("r-xts" ,r-xts)))
+     (list r-bayesplot
+           r-colourpicker
+           r-dt
+           r-dygraphs
+           r-ggplot2
+           r-gridextra
+           r-gtools
+           r-markdown
+           r-reshape2
+           r-rsconnect
+           r-rstan
+           r-shiny
+           r-shinyjs
+           r-shinythemes
+           r-threejs
+           r-xtable
+           r-xts))
     (home-page "https://mc-stan.org/")
     (synopsis "Interactive visual and numerical analysis for Bayesian models")
     (description
@@ -24761,13 +24508,11 @@ using the @code{rstan} and @code{rstanarm} packages).")
          "0b9x8rzj3dr4m7yjx476nn42z22xd1xnw85m9frfwxy5ivg1any9"))))
     (properties `((upstream-name . "rstantools")))
     (build-system r-build-system)
-    (inputs `(("pandoc" ,pandoc)))
+    (inputs (list pandoc))
     (propagated-inputs
-     `(("r-desc" ,r-desc)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcppparallel" ,r-rcppparallel)))
+     (list r-desc r-rcpp r-rcppparallel))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://mc-stan.org/rstantools/")
     (synopsis "Tools for developing R packages interfacing with Stan")
     (description
@@ -24791,13 +24536,11 @@ recommendations for developers.")
     (properties `((upstream-name . "loo")))
     (build-system r-build-system)
     (inputs
-     `(("pandoc" ,pandoc)
-       ("pandoc-citeproc" ,pandoc-citeproc)))
+     (list pandoc))
     (propagated-inputs
-     `(("r-checkmate" ,r-checkmate)
-       ("r-matrixstats" ,r-matrixstats)))
+     (list r-checkmate r-matrixstats))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://mc-stan.org/loo/")
     (synopsis "Leave-One-Out cross-validation and WAIC for Bayesian models")
     (description
@@ -24815,14 +24558,14 @@ techniques to average Bayesian predictive distributions.")
 (define-public r-rstan
   (package
     (name "r-rstan")
-    (version "2.21.2")
+    (version "2.21.3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "rstan" version))
        (sha256
         (base32
-         "0jh58qfrksd2j9w2zy4bajryivgp36m3xdb9mjrjqbk1ib9h83p3"))))
+         "1ccjdwh0xspna2c0m5p8as8y2b0lnhdyk9hfd3jh58j6n8fbzg3n"))))
     (properties `((upstream-name . "rstan")))
     (build-system r-build-system)
     (arguments
@@ -24833,26 +24576,21 @@ techniques to average Bayesian predictive distributions.")
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "TZ" "UTC+1")
              (setenv "TZDIR"
-                     (string-append (assoc-ref inputs "tzdata")
-                                    "/share/zoneinfo"))
-             #t)))))
-    (native-inputs
-     `(("tzdata" ,tzdata-for-tests)
-       ("pandoc" ,pandoc)
-       ("r-knitr" ,r-knitr)))
-    (propagated-inputs
-     `(("r-bh" ,r-bh)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-inline" ,r-inline)
-       ("r-loo" ,r-loo)
-       ("r-pkgbuild" ,r-pkgbuild)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcppeigen" ,r-rcppeigen)
-       ("r-rcppparallel" ,r-rcppparallel)
-       ("r-stanheaders" ,r-stanheaders)
-       ("r-v8" ,r-v8)
-       ("r-withr" ,r-withr)))
+                     (search-input-directory inputs
+                                             "share/zoneinfo")))))))
+    (native-inputs
+     (list tzdata-for-tests pandoc r-knitr))
+    (propagated-inputs
+     (list r-bh
+           r-ggplot2
+           r-gridextra
+           r-inline
+           r-loo
+           r-pkgbuild
+           r-rcpp
+           r-rcppeigen
+           r-rcppparallel
+           r-stanheaders))
     (home-page "https://discourse.mc-stan.org/")
     (synopsis "R interface to Stan")
     (description
@@ -24881,26 +24619,25 @@ need to derive the partial derivatives.")
     (properties `((upstream-name . "rstanarm")))
     (build-system r-build-system)
     (inputs
-     `(("pandoc" ,pandoc)
-       ("pandoc-citeproc" ,pandoc-citeproc)))
-    (propagated-inputs
-     `(("r-bayesplot" ,r-bayesplot)
-       ("r-bh" ,r-bh)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-lme4" ,r-lme4)
-       ("r-loo" ,r-loo)
-       ("r-matrix" ,r-matrix)
-       ("r-nlme" ,r-nlme)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcppeigen" ,r-rcppeigen)
-       ("r-rcppparallel" ,r-rcppparallel)
-       ("r-rstan" ,r-rstan)
-       ("r-rstantools" ,r-rstantools)
-       ("r-shinystan" ,r-shinystan)
-       ("r-stanheaders" ,r-stanheaders)
-       ("r-survival" ,r-survival)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list pandoc))
+    (propagated-inputs
+     (list r-bayesplot
+           r-bh
+           r-ggplot2
+           r-lme4
+           r-loo
+           r-matrix
+           r-nlme
+           r-rcpp
+           r-rcppeigen
+           r-rcppparallel
+           r-rstan
+           r-rstantools
+           r-shinystan
+           r-stanheaders
+           r-survival))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://mc-stan.org/rstanarm/")
     (synopsis "Bayesian applied regression modeling via Stan")
     (description
@@ -24924,9 +24661,9 @@ a formula and @code{data.frame} plus some additional arguments for priors.")
     (properties `((upstream-name . "Kendall")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-boot" ,r-boot)))
+     (list r-boot))
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/Kendall/")
     (synopsis "Kendall rank correlation and Mann-Kendall trend test")
     (description
@@ -24937,26 +24674,26 @@ trend test.")
 (define-public r-keyring
   (package
     (name "r-keyring")
-    (version "1.2.0")
+    (version "1.3.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "keyring" version))
        (sha256
         (base32
-         "1rqz29ycsmfqixhnzhhfd89j9ivnmp7x2z3vxdla622zmakbcy4c"))))
+         "1j8l6nmh4dr70kwybiais8yh687fdwrj134xynq68igw1b1rm8ga"))))
     (properties `((upstream-name . "keyring")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-askpass" ,r-askpass)
-       ("r-assertthat" ,r-assertthat)
-       ("r-filelock" ,r-filelock)
-       ("r-openssl" ,r-openssl)
-       ("r-r6" ,r-r6)
-       ("r-rappdirs" ,r-rappdirs)
-       ("r-sodium" ,r-sodium)
-       ("r-yaml" ,r-yaml)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+     (list r-askpass
+           r-assertthat
+           r-filelock
+           r-openssl
+           r-r6
+           r-rappdirs
+           r-sodium
+           r-yaml))
+    (native-inputs (list pkg-config))
     (home-page "https://github.com/r-lib/keyring")
     (synopsis "Access the system credential store from R")
     (description
@@ -24981,7 +24718,7 @@ Additional storage back-ends can be added easily.")
     (properties `((upstream-name . "zyp")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-kendall" ,r-kendall)))
+     (list r-kendall))
     (home-page "https://cran.r-project.org/web/packages/zyp/")
     (synopsis "Zhang + Yue-Pilon Trends Package")
     (description
@@ -25005,10 +24742,7 @@ climate data.")
     (properties `((upstream-name . "Rlinsolve")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-rdpack" ,r-rdpack)))
+     (list r-matrix r-rcpp r-rcpparmadillo r-rdpack))
     (home-page "https://cran.r-project.org/web/packages/Rlinsolve/")
     (synopsis "Iterative solvers for (sparse) linear system of equations")
     (description
@@ -25037,15 +24771,15 @@ linear systems can be manageable using the @code{Matrix} package along with
     (properties `((upstream-name . "ZVCV")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-abind" ,r-abind)
-       ("r-bh" ,r-bh)
-       ("r-dplyr" ,r-dplyr)
-       ("r-glmnet" ,r-glmnet)
-       ("r-magrittr" ,r-magrittr)
-       ("r-mvtnorm" ,r-mvtnorm)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-rlinsolve" ,r-rlinsolve)))
+     (list r-abind
+           r-bh
+           r-dplyr
+           r-glmnet
+           r-magrittr
+           r-mvtnorm
+           r-rcpp
+           r-rcpparmadillo
+           r-rlinsolve))
     (home-page "https://cran.r-project.org/web/packages/ZVCV/")
     (synopsis "Zero-Variance Control Variates")
     (description
@@ -25074,13 +24808,13 @@ the posterior distribution in Bayesian statistics are also supplied.")
     (properties `((upstream-name . "ztype")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertthat" ,r-assertthat)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-lubridate" ,r-lubridate)
-       ("r-magrittr" ,r-magrittr)
-       ("r-rvest" ,r-rvest)
-       ("r-stringr" ,r-stringr)))
+     (list r-assertthat
+           r-dplyr
+           r-ggplot2
+           r-lubridate
+           r-magrittr
+           r-rvest
+           r-stringr))
     (home-page "https://cran.r-project.org/web/packages/ztype/")
     (synopsis "Run a Ztype game loaded with R functions")
     (description
@@ -25103,7 +24837,7 @@ opponents' vessels.")
     (properties `((upstream-name . "Zseq")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-gmp" ,r-gmp)))
+     (list r-gmp))
     (home-page "https://cran.r-project.org/web/packages/Zseq/")
     (synopsis "Integer sequence generator")
     (description
@@ -25127,7 +24861,7 @@ Encyclopedia of Integer Sequences} (OEIS) in the function help page.")
     (properties `((upstream-name . "isoband")))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/wilkelab/isoband")
     (synopsis "Generate isolines and isobands from regularly spaced elevation grids")
     (description
@@ -25150,7 +24884,7 @@ containing elevation data.")
     (properties `((upstream-name . "ppcor")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mass" ,r-mass)))
+     (list r-mass))
     (home-page "https://cran.r-project.org/web/packages/ppcor/")
     (synopsis "Partial and semi-partial correlation")
     (description
@@ -25172,16 +24906,16 @@ statistics and p-values of the correlation coefficients.")
     (properties `((upstream-name . "hrbrthemes")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-extrafont" ,r-extrafont)
-       ("r-gdtools" ,r-gdtools)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-htmltools" ,r-htmltools)
-       ("r-knitr" ,r-knitr)
-       ("r-magrittr" ,r-magrittr)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("r-scales" ,r-scales)))
+     (list r-extrafont
+           r-gdtools
+           r-ggplot2
+           r-htmltools
+           r-knitr
+           r-magrittr
+           r-rmarkdown
+           r-scales))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/hrbrmstr/hrbrthemes/")
     (synopsis "Additional themes, theme components and utilities for @code{ggplot2}")
     (description
@@ -25203,7 +24937,7 @@ and an overall emphasis on typography.")
         "0zvjaf6cv0nrjb4l4llkr0mmgha7ig31p4ri2rlnqyjlxi5l8hyq"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/agrueneberg/crochet")
     (synopsis "Implementation Helper for Matrix-Like Types")
     (description
@@ -25265,10 +24999,9 @@ appropriate dog and cat images for many status codes.")
                 "0qknpw7zwwbzsbry94j8fn48mq7kq5rc5448g9hybbisain3wfvg"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-stringr" ,r-stringr)
-       ("r-magrittr" ,r-magrittr)))
+     (list r-stringr r-magrittr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list 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
@@ -25288,13 +25021,9 @@ rendered as text, axis labels, etc. throughout R's plotting system.")
                 "1zcbcxhw692s0y6izvwazyzhgx0iwsxsbcan2nk0mb7n11p7bypb"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-xml2" ,r-xml2)
-       ("r-httr" ,r-httr)
-       ("r-plyr" ,r-plyr)
-       ("r-stringr" ,r-stringr)
-       ("r-tibble" ,r-tibble)))
+     (list r-xml2 r-httr r-plyr r-stringr r-tibble))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/ropensci/oai/")
     (synopsis "General purpose OAI-PMH services client")
     (description "@code{oai} provides a general purpose client to work with
@@ -25307,14 +25036,14 @@ service.  Functions are provided to work with the OAI-PMH verbs:
 (define-public r-argon2
   (package
     (name "r-argon2")
-    (version "0.2-0")
+    (version "0.4-0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "argon2" version))
        (sha256
         (base32
-         "0kqn06rpb39jlzizjlnc5c44mfic8llrshxn7ljgmyj35lbqwxqh"))))
+         "09hzl0wz0lw2v7g64rdv0lij2hq36zl37a6rmxwvinmjdzijcsyw"))))
     (properties `((upstream-name . "argon2")))
     (build-system r-build-system)
     (home-page "https://github.com/wrathematics/argon2")
@@ -25338,7 +25067,7 @@ argon2 algorithm.")
     (properties `((upstream-name . "getPass")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rstudioapi" ,r-rstudioapi)))
+     (list r-rstudioapi))
     (home-page "https://github.com/wrathematics/getPass")
     (synopsis "Masked user input")
     (description
@@ -25362,10 +25091,7 @@ where tcltk is present are supported.")
     (properties `((upstream-name . "remoter")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-argon2" ,r-argon2)
-       ("r-getpass" ,r-getpass)
-       ("r-pbdzmq" ,r-pbdzmq)
-       ("r-png" ,r-png)))
+     (list r-argon2 r-getpass r-pbdzmq r-png))
     (home-page "https://github.com/RBigData/remoter")
     (synopsis "Control a remote R session from a local one")
     (description
@@ -25388,7 +25114,7 @@ client).")
     (properties `((upstream-name . "asd")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mvtnorm" ,r-mvtnorm)))
+     (list r-mvtnorm))
     (home-page "https://cran.r-project.org/web/packages/asd")
     (synopsis "Simulations for Adaptive Seamless Designs")
     (description
@@ -25411,8 +25137,7 @@ subpopulation type designs.")
     (properties `((upstream-name . "nbconvertR")))
     (build-system r-build-system)
     (inputs
-     `(("jupyter" ,python-nbconvert)
-       ("pandoc" ,pandoc)))
+     (list python-nbconvert pandoc))
     (home-page "https://cran.r-project.org/web/packages/nbconvertR/")
     (synopsis "Vignette engine wrapping Jupyter notebooks")
     (description
@@ -25437,14 +25162,14 @@ evaluated interactively.")
      `((upstream-name . "bridgesampling")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-brobdingnag" ,r-brobdingnag)
-       ("r-coda" ,r-coda)
-       ("r-matrix" ,r-matrix)
-       ("r-mvtnorm" ,r-mvtnorm)
-       ("r-scales" ,r-scales)
-       ("r-stringr" ,r-stringr)))
+     (list r-brobdingnag
+           r-coda
+           r-matrix
+           r-mvtnorm
+           r-scales
+           r-stringr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/quentingronau/bridgesampling")
     (synopsis "Bridge sampling for marginal likelihoods and Bayes factors")
     (description
@@ -25468,7 +25193,7 @@ general, via different versions of bridge sampling.")
      `((upstream-name . "tea")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-matrix" ,r-matrix)))
+     (list r-matrix))
     (home-page "https://cran.r-project.org/web/packages/tea/")
     (synopsis "Threshold estimation approaches")
     (description
@@ -25519,10 +25244,9 @@ is also implemented here.")
      `((upstream-name . "aws")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-awsmethods" ,r-awsmethods)
-       ("r-gsl" ,r-gsl)))
+     (list r-awsmethods r-gsl))
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/aws/")
     (synopsis "Adaptive weights smoothing")
     (description
@@ -25548,15 +25272,15 @@ filter.")
      `((upstream-name . "sglOptim")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bh" ,r-bh)
-       ("r-doparallel" ,r-doparallel)
-       ("r-foreach" ,r-foreach)
-       ("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-rcppprogress" ,r-rcppprogress)))
+     (list r-bh
+           r-doparallel
+           r-foreach
+           r-matrix
+           r-rcpp
+           r-rcpparmadillo
+           r-rcppprogress))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/nielsrhansen/sglOptim")
     (synopsis "Generic sparse group Lasso solver")
     (description
@@ -25584,7 +25308,7 @@ computing for cross validation and subsampling is supported through the
      `((upstream-name . "grouped")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mass" ,r-mass)))
+     (list r-mass))
     (home-page "https://cran.r-project.org/web/packages/grouped/")
     (synopsis "Regression analysis of grouped and coarse data")
     (description
@@ -25607,8 +25331,7 @@ under the coarsened at random assumption.")
      `((upstream-name . "stam")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-np" ,r-np)
-       ("r-sp" ,r-sp)))
+     (list r-np r-sp))
     (home-page "https://cran.r-project.org/web/packages/stam")
     (synopsis "Spatio-temporal analysis and modelling")
     (description
@@ -25632,7 +25355,7 @@ Inferred Spatio-Temporal Modelling.")
      `((upstream-name . "dcv")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lmtest" ,r-lmtest)))
+     (list r-lmtest))
     (home-page "https://cran.r-project.org/web/packages/dcv/")
     (synopsis "Conventional cross-validation statistics for climate-growth model")
     (description
@@ -25645,19 +25368,19 @@ Mean Test, Durbin-Watson statistic etc.")
 (define-public r-rcdd
   (package
     (name "r-rcdd")
-    (version "1.2-2")
+    (version "1.5")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "rcdd" version))
        (sha256
         (base32
-         "0pzpbqnlgzr240iici70278py5wnbbxkzlgn112f9wv5ga3riric"))))
+         "0zxx0qvv26ba30jkm8mvca4h59rqklay4jwazpcw7h9dzp4189jr"))))
     (properties
      `((upstream-name . "rcdd")))
     (build-system r-build-system)
     (inputs
-     `(("gmp" ,gmp)))
+     (list gmp))
     (home-page "https://www.stat.umn.edu/geyer/rcdd/")
     (synopsis "Computational geometry")
     (description
@@ -25683,11 +25406,9 @@ infinite-precision rational arithmetic.")
      `((upstream-name . "Rxnat")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-httr" ,r-httr)
-       ("r-rcurl" ,r-rcurl)
-       ("r-tibble" ,r-tibble)))
+     (list r-httr r-rcurl r-tibble))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/Rxnat/")
     (synopsis "Queries and extracts images from neuroimaging datasets")
     (description
@@ -25721,16 +25442,15 @@ download images.")
                  (("\\$\\(R_HOME\\)") out))
                (mkdir-p bin)))))))
     (propagated-inputs
-     `(("r-checkmate" ,r-checkmate)
-       ("r-mime" ,r-mime)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-knitr" ,r-knitr)
-       ("r-r6" ,r-r6)
-       ("r-rcpp" ,r-rcpp)
-       ("r-uuid" ,r-uuid)))
+     (list r-checkmate
+           r-mime
+           r-jsonlite
+           r-knitr
+           r-r6
+           r-rcpp
+           r-uuid))
     (inputs
-     `(("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list openssl zlib))
     (home-page "https://github.com/s-u/Rserve")
     (synopsis
      "Server providing access to R from many languages and systems")
@@ -25758,9 +25478,7 @@ included in this package as well.")
     (properties `((upstream-name . "gamm4")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lme4" ,r-lme4)
-       ("r-matrix" ,r-matrix)
-       ("r-mgcv" ,r-mgcv)))
+     (list r-lme4 r-matrix r-mgcv))
     (home-page "https://cran.r-project.org/web/packages/gamm4/")
     (synopsis "Generalized additive mixed models using mgcv and lme4")
     (description
@@ -25772,18 +25490,18 @@ estimation.")
 (define-public r-optimx
   (package
     (name "r-optimx")
-    (version "2021-6.12")
+    (version "2021-10.12")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "optimx" version))
        (sha256
         (base32
-         "059md564p2pk5nis9kbcn1kw2fw130vg53fxlr5xzpv1c9gfhq3k"))))
+         "0hvrpfya767vp3anmb8ih516v4zz1sv4h193rn93kyjydf2lqf1r"))))
     (properties `((upstream-name . "optimx")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-numderiv" ,r-numderiv)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+    (propagated-inputs (list r-numderiv))
+    (native-inputs (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/optimx/")
     (synopsis "Expanded replacement and extension of the optim function")
     (description
@@ -25811,21 +25529,21 @@ here.")
     (properties `((upstream-name . "projpred")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-gamm4" ,r-gamm4)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-lme4" ,r-lme4)
-       ("r-loo" ,r-loo)
-       ("r-magrittr" ,r-magrittr)
-       ("r-mass" ,r-mass)
-       ("r-mgcv" ,r-mgcv)
-       ("r-optimx" ,r-optimx)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-rngtools" ,r-rngtools)
-       ("r-rstantools" ,r-rstantools)
-       ("r-tidyverse" ,r-tidyverse)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-dplyr
+           r-gamm4
+           r-ggplot2
+           r-lme4
+           r-loo
+           r-magrittr
+           r-mass
+           r-mgcv
+           r-optimx
+           r-rcpp
+           r-rcpparmadillo
+           r-rngtools
+           r-rstantools
+           r-tidyverse))
+    (native-inputs (list r-knitr))
     (home-page "https://mc-stan.org/projpred/")
     (synopsis "Projection predictive feature selection")
     (description
@@ -25839,28 +25557,28 @@ vignette for more information and examples.")
 (define-public r-distributional
   (package
     (name "r-distributional")
-    (version "0.2.2")
+    (version "0.3.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "distributional" version))
        (sha256
         (base32
-         "0ps30ijlf0xwranxkq1z29d76d3zgy8drwxpnxp6ffmyma8mm3h2"))))
+         "1mji8xlhwrw8msih5wdpbzwv4g59kly0xkdklhn8yzb18rrnrczs"))))
     (properties
      `((upstream-name . "distributional")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-digest" ,r-digest)
-       ("r-ellipsis" ,r-ellipsis)
-       ("r-farver" ,r-farver)
-       ("r-generics" ,r-generics)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-numderiv" ,r-numderiv)
-       ("r-rlang" ,r-rlang)
-       ("r-scales" ,r-scales)
-       ("r-vctrs" ,r-vctrs)))
+     (list r-digest
+           r-ellipsis
+           r-farver
+           r-generics
+           r-ggplot2
+           r-lifecycle
+           r-numderiv
+           r-rlang
+           r-scales
+           r-vctrs))
     (home-page "https://pkg.mitchelloharawild.com/distributional/")
     (synopsis "Vectorized probability distributions")
     (description
@@ -25876,28 +25594,28 @@ including means, variances, intervals, and highest density regions.")
 (define-public r-posterior
   (package
     (name "r-posterior")
-    (version "1.1.0")
+    (version "1.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "posterior" version))
        (sha256
         (base32
-         "1lpldkkkxv94dr30q5wb5qr61qrgp9shqnskgwriigy1phnjdxpg"))))
+         "11j3jgk8mykicqi77a6frn0gck7fx0i6sl6g774sqj44m48ig81b"))))
     (properties `((upstream-name . "posterior")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-abind" ,r-abind)
-       ("r-checkmate" ,r-checkmate)
-       ("r-distributional" ,r-distributional)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-pillar" ,r-pillar)
-       ("r-rlang" ,r-rlang)
-       ("r-tensora" ,r-tensora)
-       ("r-tibble" ,r-tibble)
-       ("r-vctrs" ,r-vctrs)))
+     (list r-abind
+           r-checkmate
+           r-distributional
+           r-matrixstats
+           r-pillar
+           r-rlang
+           r-tensora
+           r-tibble
+           r-vctrs))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://mc-stan.org/posterior/")
     (synopsis "Tools for working with posterior distributions")
     (description
@@ -25923,38 +25641,37 @@ inference diagnostics.
 (define-public r-brms
   (package
     (name "r-brms")
-    (version "2.16.1")
+    (version "2.16.3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "brms" version))
        (sha256
         (base32
-         "1i0vkkfziac29vncw4igja5m7a6rhw9rqwifrw3y47q6zgczp7kl"))))
+         "1q93z4cf3iy4rs6pgvph6z7hc8q05iwif76hcg8p4kr6nl82nc38"))))
     (properties `((upstream-name . "brms")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-abind" ,r-abind)
-       ("r-backports" ,r-backports)
-       ("r-bayesplot" ,r-bayesplot)
-       ("r-bridgesampling" ,r-bridgesampling)
-       ("r-coda" ,r-coda)
-       ("r-future" ,r-future)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-glue" ,r-glue)
-       ("r-loo" ,r-loo)
-       ("r-matrix" ,r-matrix)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-mgcv" ,r-mgcv)
-       ("r-nleqslv" ,r-nleqslv)
-       ("r-nlme" ,r-nlme)
-       ("r-posterior" ,r-posterior)
-       ("r-projpred" ,r-projpred)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rstan" ,r-rstan)
-       ("r-rstantools" ,r-rstantools)
-       ("r-shinystan" ,r-shinystan)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-abind
+           r-backports
+           r-bayesplot
+           r-bridgesampling
+           r-coda
+           r-future
+           r-ggplot2
+           r-glue
+           r-loo
+           r-matrix
+           r-matrixstats
+           r-mgcv
+           r-nleqslv
+           r-nlme
+           r-posterior
+           r-rcpp
+           r-rstan
+           r-rstantools
+           r-shinystan))
+    (native-inputs (list r-knitr))
     (home-page
      "https://github.com/paul-buerkner/brms")
     (synopsis
@@ -25977,26 +25694,25 @@ with posterior predictive checks and leave-one-out cross-validation.")
 (define-public r-mstate
   (package
     (name "r-mstate")
-    (version "0.3.1")
+    (version "0.3.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "mstate" version))
        (sha256
         (base32
-         "11i3p7fph8nbnfis1m7rdrq32qryaajv2wrkxk1x6k17zkh4rq6i"))))
+         "054dzrd5b0xjjjl7862q3aq1jwgrxbkqz7zpvbdirqsld3zksirw"))))
     (properties `((upstream-name . "mstate")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)
-       ("r-lattice" ,r-lattice)
-       ("r-magrittr" ,r-magrittr)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rlang" ,r-rlang)
-       ("r-survival" ,r-survival)
-       ("r-viridis" ,r-viridis)))
+     (list r-data-table
+           r-lattice
+           r-rcolorbrewer
+           r-rlang
+           r-survival
+           r-viridislite))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page
      "https://www.lumc.nl/org/bds/research/medische-statistiek/survival-analysis/")
     (synopsis
@@ -26021,13 +25737,9 @@ multi-state models.")
     (properties `((upstream-name . "scatterpie")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggforce" ,r-ggforce)
-       ("r-ggfun" ,r-ggfun)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-rlang" ,r-rlang)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-ggforce r-ggfun r-ggplot2 r-rlang r-tidyr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/scatterpie/")
     (synopsis "Scatter pie plot")
     (description
@@ -26049,7 +25761,7 @@ pies on a map.")
     (properties `((upstream-name . "scrypt")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)))
+     (list r-rcpp))
     (home-page "https://github.com/rstudio/rscrypt")
     (synopsis "Key derivation functions for R based on Scrypt")
     (description
@@ -26073,7 +25785,7 @@ amounts of memory.")
          "0y2w4wb45kfnzrxcrdsiwgal9fsnlr3wad1sqdc70qv8gp921xbg"))))
     (properties `((upstream-name . "Boruta")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-ranger" ,r-ranger)))
+    (propagated-inputs (list r-ranger))
     (home-page "https://gitlab.com/mbq/Boruta/")
     (synopsis "Wrapper algorithm for all relevant feature selection")
     (description
@@ -26096,9 +25808,9 @@ permuted copies (shadows).")
          "0415kh9k2qzdwi8zb32fh2icl5wf5335kyj11cyfdmfxji39zv2w"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-quadprog" ,r-quadprog)))
+     (list r-quadprog))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "http://directlabels.r-forge.r-project.org/")
     (synopsis "Direct labels for multicolor plots")
     (description
@@ -26141,7 +25853,7 @@ Try a demo of the LSD by running @code{demotour()}.")
         (base32 "1p4h5pirc0m5pzc18q0jk3mcmb5n48gdf9abz03vml3a209xxl2v"))))
     (properties `((upstream-name . "phylogram")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-ape" ,r-ape)))
+    (propagated-inputs (list r-ape))
     (home-page "https://github.com/ropensci/phylogram/")
     (synopsis "Dendrograms for evolutionary analysis")
     (description
@@ -26167,9 +25879,7 @@ across a wide array of bioinformatic R packages.")
     (properties `((upstream-name . "kmer")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-openssl" ,r-openssl)
-       ("r-phylogram" ,r-phylogram)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-openssl r-phylogram r-rcpp))
     (home-page "https://github.com/shaunpwilkinson/kmer/")
     (synopsis "Fast K-Mer counting and clustering for biological sequence analysis")
     (description
@@ -26192,12 +25902,9 @@ counting and recursive k-means partitioning.")
     (properties `((upstream-name . "hardhat")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-glue" ,r-glue)
-       ("r-rlang" ,r-rlang)
-       ("r-tibble" ,r-tibble)
-       ("r-vctrs" ,r-vctrs)))
+     (list r-glue r-rlang r-tibble r-vctrs))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/tidymodels/hardhat")
     (synopsis "Construct modeling packages")
     (description
@@ -26214,21 +25921,18 @@ input.")
 (define-public r-lightgbm
   (package
     (name "r-lightgbm")
-    (version "3.2.1")
+    (version "3.3.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "lightgbm" version))
        (sha256
         (base32
-         "1136di7k3gs9kk7vd9bc3mdm0qrx3a546ngar8inmgyhi0zk6pkd"))))
+         "12hbvm1va6sb5yny564jvhhzrkcq4j33rcdhqhwxaac2m08cpi8s"))))
     (properties `((upstream-name . "lightgbm")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-matrix" ,r-matrix)
-       ("r-r6" ,r-r6)))
+     (list r-data-table r-jsonlite r-matrix r-r6))
     (home-page "https://github.com/Microsoft/LightGBM")
     (synopsis "Light gradient boosting machine")
     (description
@@ -26262,16 +25966,16 @@ designed to be distributed and efficient with the following goals:
      `((upstream-name . "SHAPforxgboost")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bbmisc" ,r-bbmisc)
-       ("r-data-table" ,r-data-table)
-       ("r-ggextra" ,r-ggextra)
-       ("r-ggforce" ,r-ggforce)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggpubr" ,r-ggpubr)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-xgboost" ,r-xgboost)))
+     (list r-bbmisc
+           r-data-table
+           r-ggextra
+           r-ggforce
+           r-ggplot2
+           r-ggpubr
+           r-rcolorbrewer
+           r-xgboost))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/liuyanguu/SHAPforxgboost")
     (synopsis "SHAP Plots for XGBoost")
     (description
@@ -26296,8 +26000,7 @@ values.")
     (properties `((upstream-name . "RISmed")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-httr" ,r-httr)
-       ("r-xml2" ,r-xml2)))
+     (list r-httr r-xml2))
     (home-page "https://cran.r-project.org/web/packages/RISmed")
     (synopsis "Download content from NCBI databases")
     (description
@@ -26322,9 +26025,8 @@ bibliographic data) and PubMed.")
     (properties `((upstream-name . "semver")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-assertthat" ,r-assertthat)
-        ("r-rcpp" ,r-rcpp)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+      (list r-assertthat r-rcpp))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/johndharrison/semver")
     (synopsis "Parser for Semantic Versioning 2.0.0")
     (description
@@ -26348,14 +26050,14 @@ incremented as outlined at @url{http://semver.org}.")
     (properties `((upstream-name . "binman")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-assertthat" ,r-assertthat)
-        ("r-httr" ,r-httr)
-        ("r-jsonlite" ,r-jsonlite)
-        ("r-rappdirs" ,r-rappdirs)
-        ("r-semver" ,r-semver)
-        ("r-xml2" ,r-xml2)
-        ("r-yaml" ,r-yaml)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+      (list r-assertthat
+            r-httr
+            r-jsonlite
+            r-rappdirs
+            r-semver
+            r-xml2
+            r-yaml))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/ropensci/binman")
     (synopsis "Binary download manager")
     (description
@@ -26379,12 +26081,8 @@ repositories to be added.")
     (properties `((upstream-name . "wdman")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-assertthat" ,r-assertthat)
-        ("r-binman" ,r-binman)
-        ("r-processx" ,r-processx)
-        ("r-semver" ,r-semver)
-        ("r-yaml" ,r-yaml)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+      (list r-assertthat r-binman r-processx r-semver r-yaml))
+    (native-inputs (list r-knitr))
     (home-page "https://docs.ropensci.org/wdman/")
     (synopsis "Webdriver/Selenium binary manager")
     (description
@@ -26412,13 +26110,13 @@ and to manage processes involving them.")
     (properties `((upstream-name . "RSelenium")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-binman" ,r-binman)
-        ("r-catools" ,r-catools)
-        ("r-httr" ,r-httr)
-        ("r-openssl" ,r-openssl)
-        ("r-wdman" ,r-wdman)
-        ("r-xml" ,r-xml)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+      (list r-binman
+            r-catools
+            r-httr
+            r-openssl
+            r-wdman
+            r-xml))
+    (native-inputs (list r-knitr))
     (home-page "https://docs.ropensci.org/RSelenium/")
     (synopsis "R bindings for Selenium WebDriver")
     (description
@@ -26436,21 +26134,18 @@ you can automate browsers locally or remotely.")
 (define-public r-conquer
   (package
     (name "r-conquer")
-    (version "1.0.2")
+    (version "1.2.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "conquer" version))
        (sha256
         (base32
-         "1zvlsrbmrij011mcdi3qngs1al2lhrdiyknxnk0w1zhzrra62bsl"))))
+         "0i9g27f52zl2kb2392g0y614drf6s87dqz12aphj889ajq7zjm0k"))))
     (properties `((upstream-name . "conquer")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-matrix" ,r-matrix)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)))
+     (list r-caret r-matrix r-matrixstats r-rcpp r-rcpparmadillo))
     (home-page "https://github.com/XiaoouPan/conquer")
     (synopsis "Convolution-type smoothed quantile regression")
     (description
@@ -26463,25 +26158,25 @@ coefficients are constructed using multiplier bootstrap.")
 (define-public r-fastshap
   (package
     (name "r-fastshap")
-    (version "0.0.5")
+    (version "0.0.7")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "fastshap" version))
        (sha256
         (base32
-         "08f25ib5mry6h8lvj0g3clc9kfl5g2wdd8x8bw455wwmbcm6x5vg"))))
+         "0gxch67i3bj6m8nb94m5hswq058w6n1q9war4dy2qnimlv7cmhdv"))))
     (properties `((upstream-name . "fastshap")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-abind" ,r-abind)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-plyr" ,r-plyr)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-tibble" ,r-tibble)))
+     (list r-abind
+           r-ggplot2
+           r-gridextra
+           r-matrixstats
+           r-plyr
+           r-rcpp
+           r-rcpparmadillo
+           r-tibble))
     (home-page "https://github.com/bgreenwell/fastshap")
     (synopsis "Fast approximate Shapley values")
     (description
@@ -26495,13 +26190,13 @@ doi.org/10.1007/s10115-013-0679-x} for details.")
 (define-public r-memuse
   (package
     (name "r-memuse")
-    (version "4.1-0")
+    (version "4.2-1")
     (source (origin
              (method url-fetch)
              (uri (cran-uri "memuse" version))
              (sha256
               (base32
-               "1bbjp8y0ji71956fbaxiil7ynq2nkmmgz7i9xps83m3bbp5d3mjq"))))
+               "1wvwnjaaiv2647561z2b55dss35033ildx4kk8hzxfzgsjmdpsgm"))))
     (properties `((upstream-name . "memuse")))
     (build-system r-build-system)
     (home-page "https://github.com/shinra-dev/memuse")
@@ -26549,17 +26244,17 @@ simple interface for all functions.")
     (properties `((upstream-name . "iml")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-checkmate" ,r-checkmate)
-       ("r-data-table" ,r-data-table)
-       ("r-formula" ,r-formula)
-       ("r-future" ,r-future)
-       ("r-future-apply" ,r-future-apply)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-keras" ,r-keras)
-       ("r-metrics" ,r-metrics)
-       ("r-prediction" ,r-prediction)
-       ("r-r6" ,r-r6)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-checkmate
+           r-data-table
+           r-formula
+           r-future
+           r-future-apply
+           r-ggplot2
+           r-keras
+           r-metrics
+           r-prediction
+           r-r6))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/christophM/iml")
     (synopsis "Interpretable machine learning")
     (description
@@ -26584,14 +26279,14 @@ and predictions of any machine learning model.  Implemented methods are:
 (define-public r-goftest
   (package
     (name "r-goftest")
-    (version "1.2-2")
+    (version "1.2-3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "goftest" version))
        (sha256
         (base32
-         "0ivnkqhv5xgiv05dm648nngacymd8x8g0fyppv3bc0mhcqk9k5z4"))))
+         "06bz6k7smr4jbvzmb73qc5fkf4my59w5gbl18wlmpkkymsv78prs"))))
     (properties `((upstream-name . "goftest")))
     (build-system r-build-system)
     (home-page "https://github.com/baddstats/goftest")
@@ -26626,14 +26321,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.2-0")
+    (version "2.3-0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "spatstat.utils" version))
        (sha256
         (base32
-         "1aypccpv0zavxwmqzvlka8981n9km7ml3jbmxz21sql58997xn2s"))))
+         "06nvn2ffyrskhzaavsy6lmdp0m8askkrp1fnwrhjsj01lbjnq2az"))))
     (properties
      `((upstream-name . "spatstat.utils")))
     (build-system r-build-system)
@@ -26647,22 +26342,19 @@ which may also be useful for other purposes.")
 (define-public r-spatstat-sparse
   (package
     (name "r-spatstat-sparse")
-    (version "2.0-0")
+    (version "2.1-0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "spatstat.sparse" version))
        (sha256
         (base32
-         "1iqrpazb88s4w208adf2qgm4ajwz3kwqck65k9g5l28zw9jcxyr7"))))
+         "148fxbxss569w73xaqpzwpz9rfjdgznh2ngf06gvm33631222680"))))
     (properties
      `((upstream-name . "spatstat.sparse")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-abind" ,r-abind)
-       ("r-matrix" ,r-matrix)
-       ("r-spatstat-utils" ,r-spatstat-utils)
-       ("r-tensor" ,r-tensor)))
+     (list r-abind r-matrix r-spatstat-utils r-tensor))
     (home-page "http://spatstat.org/")
     (synopsis "Sparse three-dimensional arrays and linear algebra utilities")
     (description
@@ -26674,19 +26366,18 @@ matrix calculations that are common in statistics, such as quadratic forms.")
 (define-public r-spatstat-data
   (package
     (name "r-spatstat-data")
-    (version "2.1-0")
+    (version "2.1-2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "spatstat.data" version))
        (sha256
         (base32
-         "0csmz5vjaxnznkbsfah8qd3v8p0y56jvis01ialxzvf71snl160v"))))
+         "1r8s4xl25xr71h4g5qqi5y370h2ik3kz5fb4qyml2b6dwsl1ildv"))))
     (properties `((upstream-name . "spatstat.data")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-matrix" ,r-matrix)
-       ("r-spatstat-utils" ,r-spatstat-utils)))
+     (list r-matrix r-spatstat-utils))
     (home-page "http://www.spatstat.org")
     (synopsis "Datasets for spatstat")
     (description
@@ -26697,21 +26388,18 @@ package.")
 (define-public r-spatstat-geom
   (package
     (name "r-spatstat-geom")
-    (version "2.2-2")
+    (version "2.3-1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "spatstat.geom" version))
        (sha256
         (base32
-         "0rx28g064641yrk2h23qpyc0bgs20lpsnqmyl1d06530ga6r1qc3"))))
+         "1h3ja45in7hnar2gwqp18jkz4rcqi99gllar6jqzlsvdbb85hgpj"))))
     (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-utils" ,r-spatstat-utils)))
+     (list r-deldir r-polyclip r-spatstat-data r-spatstat-utils))
     (home-page "http://spatstat.org/")
     (synopsis "Geometrical functionality of the spatstat package")
     (description
@@ -26723,28 +26411,28 @@ for the geometry of linear networks.")
 (define-public r-spatstat-core
   (package
     (name "r-spatstat-core")
-    (version "2.3-0")
+    (version "2.3-2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "spatstat.core" version))
        (sha256
         (base32
-         "1j962lzllqzxkd57j6immyj94pc53ff9mlvw1iscw7cnn9nyr5ap"))))
+         "0g7nj8nf9ywhdbc5irxlry6kzq6bwwbkk9cp22kyv1wigycnskbz"))))
     (properties `((upstream-name . "spatstat.core")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-abind" ,r-abind)
-       ("r-goftest" ,r-goftest)
-       ("r-matrix" ,r-matrix)
-       ("r-mgcv" ,r-mgcv)
-       ("r-nlme" ,r-nlme)
-       ("r-rpart" ,r-rpart)
-       ("r-spatstat-data" ,r-spatstat-data)
-       ("r-spatstat-geom" ,r-spatstat-geom)
-       ("r-spatstat-sparse" ,r-spatstat-sparse)
-       ("r-spatstat-utils" ,r-spatstat-utils)
-       ("r-tensor" ,r-tensor)))
+     (list r-abind
+           r-goftest
+           r-matrix
+           r-mgcv
+           r-nlme
+           r-rpart
+           r-spatstat-data
+           r-spatstat-geom
+           r-spatstat-sparse
+           r-spatstat-utils
+           r-tensor))
     (home-page "http://spatstat.org/")
     (synopsis "Core functionality of the spatstat package")
     (description
@@ -26755,24 +26443,24 @@ user-level code from spatstat, except for the code for linear networks.")
 (define-public r-spatstat-linnet
   (package
     (name "r-spatstat-linnet")
-    (version "2.3-0")
+    (version "2.3-1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "spatstat.linnet" version))
        (sha256
         (base32
-         "1yd2z629f7908xw9kyqiahk3qn9ajpl6qffbkv887zmq3p28kh7h"))))
+         "1hrqa2i6mp7d79jw4h56b8hk9590959s79vh9xcsj6k5vbisd6qi"))))
     (properties
      `((upstream-name . "spatstat.linnet")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-matrix" ,r-matrix)
-       ("r-spatstat-core" ,r-spatstat-core)
-       ("r-spatstat-data" ,r-spatstat-data)
-       ("r-spatstat-geom" ,r-spatstat-geom)
-       ("r-spatstat-sparse" ,r-spatstat-sparse)
-       ("r-spatstat-utils" ,r-spatstat-utils)))
+     (list r-matrix
+           r-spatstat-core
+           r-spatstat-data
+           r-spatstat-geom
+           r-spatstat-sparse
+           r-spatstat-utils))
     (home-page "http://spatstat.org/")
     (synopsis "Linear networks functionality of the spatstat package")
     (description
@@ -26783,22 +26471,19 @@ for spatial data on a linear network.")
 (define-public r-spatstat
   (package
     (name "r-spatstat")
-    (version "2.2-0")
+    (version "2.3-0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "spatstat" version))
        (sha256
         (base32
-         "0lz3sidn05xjswxaxhagal6jj5hra6aya0azxybjw7mgspl903wg"))))
+         "01jckks3j39854mhsarzyzn4rj82h1xrnyd2b6fyzizj48vl80ns"))))
     (properties `((upstream-name . "spatstat")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-spatstat-core" ,r-spatstat-core)
-       ("r-spatstat-data" ,r-spatstat-data)
-       ("r-spatstat-geom" ,r-spatstat-geom)
-       ("r-spatstat-linnet" ,r-spatstat-linnet)
-       ("r-spatstat-utils" ,r-spatstat-utils)))
+     (list r-spatstat-core r-spatstat-data r-spatstat-geom
+           r-spatstat-linnet r-spatstat-utils))
     (home-page "http://www.spatstat.org")
     (synopsis "Spatial Point Pattern analysis, model-fitting, simulation, tests")
     (description
@@ -26826,12 +26511,10 @@ formal inference.")
          "14z94dpln4dvgrv2w7w9ik7h6rpvbf02qhq1hqzx8c2cndzxr21i"))))
     (properties `((upstream-name . "gaston")))
     (build-system r-build-system)
-    (inputs `(("zlib" ,zlib)))
+    (inputs (list zlib))
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)
-       ("r-rcppeigen" ,r-rcppeigen)
-       ("r-rcppparallel" ,r-rcppparallel)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-rcpp r-rcppeigen r-rcppparallel))
+    (native-inputs (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/gaston/")
     (synopsis "Genetic data handling (QC, GRM, LD, PCA) and linear mixed models")
     (description
@@ -26844,17 +26527,17 @@ for linear mixed models (AIREML).")
 (define-public r-cpp11
   (package
     (name "r-cpp11")
-    (version "0.4.0")
+    (version "0.4.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "cpp11" version))
        (sha256
         (base32
-         "11qyliiw2qrac56mq5h9v7gy3dvwjj1i26pvygwbpprhvh3zss0p"))))
+         "16cvjfkbc7c0ymdmbcqg9px6pjsqx6qhyfq5frqj739mhazy0g20"))))
     (properties `((upstream-name . "cpp11")))
     (build-system r-build-system)
-    (native-inputs `(("r-knitr" ,r-knitr)))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/r-lib/cpp11")
     (synopsis "C++11 Interface for R's C Interface")
     (description
@@ -26864,6 +26547,27 @@ jumps from the C API as well as C++ exceptions, conform to normal R function
 semantics and supports interaction with @code{ALTREP} vectors.")
     (license license:expat)))
 
+(define-public r-rcpptoml
+  (package
+    (name "r-rcpptoml")
+    (version "0.1.7")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "RcppTOML" version))
+       (sha256
+        (base32 "0h8517ipwqhqkhcfiyqmvsb585g01p0ra0azbpzyxip6pq6g029g"))))
+    (properties `((upstream-name . "RcppTOML")))
+    (build-system r-build-system)
+    (propagated-inputs (list r-rcpp))
+    (home-page "http://dirk.eddelbuettel.com/code/rcpp.toml.html")
+    (synopsis "Rcpp bindings to TOML parser")
+    (description
+     "The TOML configuration format specifies an excellent format suitable for
+both human editing as well as the common uses of a machine-readable format.
+This package provides Rcpp bindings to a TOML parser.")
+    (license license:gpl2+)))
+
 (define-public r-rcppziggurat
   (package
     (name "r-rcppziggurat")
@@ -26878,9 +26582,8 @@ semantics and supports interaction with @code{ALTREP} vectors.")
     (properties `((upstream-name . "RcppZiggurat")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)
-       ("r-rcppgsl" ,r-rcppgsl)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-rcpp r-rcppgsl))
+    (native-inputs (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/RcppZiggurat/")
     (synopsis "Rcpp integration of different \"Ziggurat\" normal RNG implementations")
     (description
@@ -26896,20 +26599,18 @@ aggregation for comparing different implementations in order to provide a
 (define-public r-rfast
   (package
     (name "r-rfast")
-    (version "2.0.3")
+    (version "2.0.4")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "Rfast" version))
        (sha256
         (base32
-         "1bmhmli6q4kg8321595k0yy91w9cblk14s6qbc9wf8f05108rg15"))))
+         "1n9imwkkq14ickp0g34jyha4jkr180xj0ar8xh3hqqi4dvihg6cm"))))
     (properties `((upstream-name . "Rfast")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-rcppziggurat" ,r-rcppziggurat)))
+     (list r-rcpp r-rcpparmadillo r-rcppziggurat))
     (home-page "https://github.com/RfastOfficial/Rfast")
     (synopsis "Collection of efficient and fast R functions")
     (description
@@ -26933,7 +26634,7 @@ Poisson), are some of the many fast functions.")
               "05x9wgzsmx4vb12lmcspymgmpb2xw8bwryb8ysg7vzg2nkh0ma3g"))))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-randomforest",r-randomforest)))
+    (list r-randomforest))
    (home-page "https://r-forge.r-project.org/projects/rffc/")
    (synopsis "Random Forest Feature Contributions")
    (description "This package provides functions for extracting feature
@@ -26957,12 +26658,8 @@ model.")
     (properties `((upstream-name . "ClusterR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-gmp" ,r-gmp)
-       ("r-gtools" ,r-gtools)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-ggplot2 r-gmp r-gtools r-rcpp r-rcpparmadillo))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/mlampros/ClusterR")
     (synopsis "Clustering")
     (description
@@ -27003,11 +26700,8 @@ see
     (properties `((upstream-name . "Spectrum")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-clusterr" ,r-clusterr)
-       ("r-diptest" ,r-diptest)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-rfast" ,r-rfast)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-clusterr r-diptest r-ggplot2 r-rfast))
+    (native-inputs (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/Spectrum/")
     (synopsis "Fast adaptive spectral clustering for single and multi-view data")
     (description
@@ -27036,9 +26730,7 @@ of K.")
     (properties `((upstream-name . "nabor")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bh" ,r-bh)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcppeigen" ,r-rcppeigen)))
+     (list r-bh r-rcpp r-rcppeigen))
     (home-page "https://cran.r-project.org/web/packages/nabor/")
     (synopsis "Wrapper for K nearest neighbour library for low dimensions")
     (description
@@ -27081,16 +26773,16 @@ not digit characters.")
                 "1ikqp29nncbw1xlwyb9dqqgcdk9q0bs3wxhnhnjpb11vcjv7cz2j"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-glue" ,r-glue)
-       ("r-magrittr" ,r-magrittr)
-       ("r-purrr" ,r-purrr)
-       ("r-readr" ,r-readr)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-dplyr
+           r-ggplot2
+           r-glue
+           r-magrittr
+           r-purrr
+           r-readr
+           r-tibble
+           r-tidyr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://visdat.njtierney.com/")
     (synopsis "Preliminary Visualisation of Data")
     (description "This package provides procedures to create preliminary exploratory
@@ -27112,9 +26804,9 @@ using @code{ggplot2}.")
     (properties `((upstream-name . "muhaz")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-survival" ,r-survival)))
+     (list r-survival))
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/muhaz/")
     (synopsis "Hazard function estimation in survival analysis")
     (description
@@ -27137,27 +26829,27 @@ censored data.")
     (properties `((upstream-name . "flexsurv")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertthat" ,r-assertthat)
-       ("r-desolve" ,r-desolve)
-       ("r-dplyr" ,r-dplyr)
-       ("r-generics" ,r-generics)
-       ("r-magrittr" ,r-magrittr)
-       ("r-matrix" ,r-matrix)
-       ("r-mstate" ,r-mstate)
-       ("r-muhaz" ,r-muhaz)
-       ("r-mvtnorm" ,r-mvtnorm)
-       ("r-numderiv" ,r-numderiv)
-       ("r-purrr" ,r-purrr)
-       ("r-quadprog" ,r-quadprog)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rlang" ,r-rlang)
-       ("r-rstpm2" ,r-rstpm2)
-       ("r-survival" ,r-survival)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)
-       ("r-tidyselect" ,r-tidyselect)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-assertthat
+           r-desolve
+           r-dplyr
+           r-generics
+           r-magrittr
+           r-matrix
+           r-mstate
+           r-muhaz
+           r-mvtnorm
+           r-numderiv
+           r-purrr
+           r-quadprog
+           r-rcpp
+           r-rlang
+           r-rstpm2
+           r-survival
+           r-tibble
+           r-tidyr
+           r-tidyselect))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/chjackson/flexsurv-dev")
     (synopsis "Flexible parametric survival and multi-state models")
     (description
@@ -27183,10 +26875,9 @@ models.")
     (properties `((upstream-name . "TransPhylo")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ape" ,r-ape)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-ape r-rcpp))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/TransPhylo/")
     (synopsis "Inference of transmission tree from a dated phylogeny")
     (description
@@ -27210,7 +26901,7 @@ and @url{https://doi.org/10.1093/molbev/msw275,Didelot et al. (2017)}.")
     (properties `((upstream-name . "km.ci")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-survival" ,r-survival)))
+     (list r-survival))
     (home-page "https://cran.r-project.org/web/packages/km.ci/")
     (synopsis "Confidence intervals for the Kaplan-Meier estimator")
     (description
@@ -27255,17 +26946,17 @@ Springer.")
     (properties `((upstream-name . "survMisc")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-km-ci" ,r-km-ci)
-       ("r-kmsurv" ,r-kmsurv)
-       ("r-knitr" ,r-knitr)
-       ("r-survival" ,r-survival)
-       ("r-xtable" ,r-xtable)
-       ("r-zoo" ,r-zoo)))
+     (list r-data-table
+           r-ggplot2
+           r-gridextra
+           r-km-ci
+           r-kmsurv
+           r-knitr
+           r-survival
+           r-xtable
+           r-zoo))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/survMisc/")
     (synopsis "Miscellaneous functions for survival data")
     (description
@@ -27277,14 +26968,14 @@ the @code{survival} package.")
 (define-public r-exactranktests
   (package
     (name "r-exactranktests")
-    (version "0.8-32")
+    (version "0.8-34")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "exactRankTests" version))
        (sha256
         (base32
-         "0p7h7w470p5qpsbrhw12zlsshyai56za5dsdva8cf9sikn0955qr"))))
+         "1i4mwz61mjlh1ai3dww2pjkicx9ww8c4mljnr8xlawh91479lva9"))))
     (properties
      `((upstream-name . "exactRankTests")))
     (build-system r-build-system)
@@ -27309,8 +27000,7 @@ implementation of the Shift-Algorithm by Streitberg & Roehmel.")
     (properties `((upstream-name . "maxstat")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-exactranktests" ,r-exactranktests)
-       ("r-mvtnorm" ,r-mvtnorm)))
+     (list r-exactranktests r-mvtnorm))
     (home-page "https://cran.r-project.org/web/packages/maxstat/")
     (synopsis "Maximally selected rank statistics")
     (description
@@ -27332,23 +27022,23 @@ p-value approximations.")
     (properties `((upstream-name . "survminer")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-broom" ,r-broom)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggpubr" ,r-ggpubr)
-       ("r-ggtext" ,r-ggtext)
-       ("r-gridextra" ,r-gridextra)
-       ("r-magrittr" ,r-magrittr)
-       ("r-maxstat" ,r-maxstat)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-scales" ,r-scales)
-       ("r-survival" ,r-survival)
-       ("r-survmisc" ,r-survmisc)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-broom
+           r-dplyr
+           r-ggplot2
+           r-ggpubr
+           r-ggtext
+           r-gridextra
+           r-magrittr
+           r-maxstat
+           r-purrr
+           r-rlang
+           r-scales
+           r-survival
+           r-survmisc
+           r-tibble
+           r-tidyr))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://rpkgs.datanovia.com/survminer/index.html")
     (synopsis "Drawing survival curves using ggplot2")
     (description
@@ -27373,8 +27063,7 @@ assumptions.")
     (properties `((upstream-name . "forge")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-magrittr" ,r-magrittr)
-       ("r-rlang" ,r-rlang)))
+     (list r-magrittr r-rlang))
     (home-page "https://cran.r-project.org/web/packages/forge/")
     (synopsis "Cast values into shape")
     (description
@@ -27396,9 +27085,9 @@ coerce and verify the types and shapes of values for input checking.")
     (properties `((upstream-name . "config")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-yaml" ,r-yaml)))
+     (list r-yaml))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/rstudio/config")
     (synopsis "Manage environment specific configuration values")
     (description
@@ -27431,12 +27120,9 @@ value.")
                 (string-append prefix "-larmadillo")))
              #t)))))
     (propagated-inputs
-     `(("r-mass" ,r-mass)
-       ("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)))
+     (list r-mass r-matrix r-rcpp r-rcpparmadillo))
     (inputs
-     `(("armadillo" ,armadillo)))
+     (list armadillo))
     (home-page "https://cran.r-project.org/web/packages/AdaptiveSparsity")
     (synopsis "Adaptive sparsity models")
     (description
@@ -27445,6 +27131,27 @@ adaptive sparsity and the Wong algorithm for adaptively sparse Gaussian
 geometric models.")
     (license license:lgpl3+)))
 
+(define-public r-add2ggplot
+  (package
+    (name "r-add2ggplot")
+    (version "0.3.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "add2ggplot" version))
+       (sha256
+        (base32 "0c94i1cfp2pvplvxmfvvz2fyj026r1jnax05mrzrc7ppnqzy25y0"))))
+    (properties `((upstream-name . "add2ggplot")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-ggplot2 r-magick r-magrittr r-rcolorbrewer r-zeallot))
+    (native-inputs (list r-knitr))
+    (home-page "https://github.com/JiaxiangBU/add2ggplot")
+    (synopsis "Extension for ggplot2")
+    (description "This packages provides tools to create themes and color
+palettes for the package ggplot2.")
+    (license license:expat)))
+
 (define-public r-diffusionmap
   (package
     (name "r-diffusionmap")
@@ -27459,9 +27166,7 @@ geometric models.")
     (properties `((upstream-name . "diffusionMap")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-igraph" ,r-igraph)
-       ("r-matrix" ,r-matrix)
-       ("r-scatterplot3d" ,r-scatterplot3d)))
+     (list r-igraph r-matrix r-scatterplot3d))
     (home-page "https://www.r-project.org")
     (synopsis "Diffusion map")
     (description "This package implements the diffusion map method of data
@@ -27473,26 +27178,21 @@ model.")
 (define-public r-igraph
   (package
     (name "r-igraph")
-    (version "1.2.6")
+    (version "1.2.11")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "igraph" version))
        (sha256
         (base32
-         "0vf7wrx77cdiav8724cw8gchrn0y9wvywphf5km4pa7xcqhsf3b4"))))
+         "1ph042yinl8ig2x7laha5j1xr14fky9771l5ha87svhynrg732qw"))))
     (build-system r-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (inputs
-     `(("gmp" ,gmp)
-       ("glpk" ,glpk)
-       ("libxml2" ,libxml2)
-       ("zlib" ,zlib)))
+     (list gmp glpk libxml2 zlib))
     (propagated-inputs
-     `(("r-magrittr" ,r-magrittr)
-       ("r-matrix" ,r-matrix)
-       ("r-pkgconfig" ,r-pkgconfig)))
+     (list r-magrittr r-matrix r-pkgconfig))
     (home-page "https://igraph.org")
     (synopsis "Network analysis and visualization")
     (description
@@ -27505,29 +27205,29 @@ more.")
 (define-public r-workflows
   (package
     (name "r-workflows")
-    (version "0.2.3")
+    (version "0.2.4")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "workflows" version))
        (sha256
         (base32
-         "0bca4s49qabam4ny8vckxcghj3z0xfhwfhs5h1136kihrr5pm6mw"))))
+         "1sxrgza922p137z41jcj2iwk19lxzwh6kp4kz7h9kw0b8rvfqwab"))))
     (properties `((upstream-name . "workflows")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cli" ,r-cli)
-       ("r-ellipsis" ,r-ellipsis)
-       ("r-generics" ,r-generics)
-       ("r-glue" ,r-glue)
-       ("r-hardhat" ,r-hardhat)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-parsnip" ,r-parsnip)
-       ("r-rlang" ,r-rlang)
-       ("r-tidyselect" ,r-tidyselect)
-       ("r-vctrs" ,r-vctrs)))
+     (list r-cli
+           r-ellipsis
+           r-generics
+           r-glue
+           r-hardhat
+           r-lifecycle
+           r-parsnip
+           r-rlang
+           r-tidyselect
+           r-vctrs))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/tidymodels/workflows")
     (synopsis "Modeling workflows")
     (description
@@ -27562,9 +27262,7 @@ workflow.  The advantages are:
     (properties `((upstream-name . "lobstr")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-crayon" ,r-crayon)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rlang" ,r-rlang)))
+     (list r-crayon r-rcpp r-rlang))
     (home-page "https://github.com/r-lib/lobstr")
     (synopsis "Visualize R data structures with trees")
     (description
@@ -27589,8 +27287,7 @@ object sizes.")
     (properties `((upstream-name . "GPfit")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lattice" ,r-lattice)
-       ("r-lhs" ,r-lhs)))
+     (list r-lattice r-lhs))
     (home-page "https://cran.r-project.org/web/packages/GPfit/")
     (synopsis "Gaussian Processes modeling")
     (description
@@ -27601,25 +27298,25 @@ object sizes.")
 (define-public r-yardstick
   (package
     (name "r-yardstick")
-    (version "0.0.8")
+    (version "0.0.9")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "yardstick" version))
        (sha256
         (base32
-         "13b0lyj2k0r568mwlyz9yvp9156rzlj4jqnjazaffh9vwqh4whir"))))
+         "00hv4gk1ba4dab8i3dcq7lim4bll7l572rgc8km9x4ja8by95j8h"))))
     (properties `((upstream-name . "yardstick")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-generics" ,r-generics)
-       ("r-proc" ,r-proc)
-       ("r-rlang" ,r-rlang)
-       ("r-tidyselect" ,r-tidyselect)
-       ("r-vctrs" ,r-vctrs)))
+     (list r-dplyr
+           r-generics
+           r-proc
+           r-rlang
+           r-tidyselect
+           r-vctrs))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/tidymodels/yardstick")
     (synopsis "Tidy characterizations of model performance")
     (description
@@ -27641,7 +27338,7 @@ and regression metrics (e.g., RMSE).")
          "0s0acddc5h14245hi1faycxp0fyvw6nlgaz2df7da4fpyd2f638f"))))
     (properties `((upstream-name . "warp")))
     (build-system r-build-system)
-    (native-inputs `(("r-knitr" ,r-knitr)))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/DavisVaughan/warp")
     (synopsis "Group dates")
     (description
@@ -27653,6 +27350,30 @@ used in further calculations that rely on a specific temporal spacing between
 observations.")
     (license license:expat)))
 
+(define-public r-scico
+  (package
+    (name "r-scico")
+    (version "1.3.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "scico" version))
+       (sha256
+        (base32 "08grfbjd5s0vdw76ni37yjl2242rr8i2jy72sgpwgra282hpnji3"))))
+    (properties `((upstream-name . "scico")))
+    (build-system r-build-system)
+    (propagated-inputs (list r-scales))
+    (home-page "https://github.com/thomasp85/scico")
+    (synopsis "Colour Palettes Based on the Scientific Colour-Maps")
+    (description
+     "This package provides colour choice in information visualisation.  It
+important in order to avoid being mislead by inherent bias in the used colour
+palette.  This package provides access to the perceptually uniform and
+colour-blindness friendly palettes developed by Fabio Crameri and released
+under the \"Scientific Colour-Maps\" moniker.  The package contains 24
+different palettes and includes both diverging and sequential types.")
+    (license license:expat)))
+
 (define-public r-slider
   (package
     (name "r-slider")
@@ -27667,12 +27388,8 @@ observations.")
     (properties `((upstream-name . "slider")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ellipsis" ,r-ellipsis)
-       ("r-glue" ,r-glue)
-       ("r-rlang" ,r-rlang)
-       ("r-vctrs" ,r-vctrs)
-       ("r-warp" ,r-warp)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-ellipsis r-glue r-rlang r-vctrs r-warp))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/DavisVaughan/slider")
     (synopsis "Sliding window functions")
     (description
@@ -27682,34 +27399,56 @@ advanced usage, an index can be used as a secondary vector that defines how
 sliding windows are to be created.")
     (license license:expat)))
 
+(define-public r-rlist
+  (package
+    (name "r-rlist")
+    (version "0.4.6.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "rlist" version))
+       (sha256
+        (base32 "15q99rhbbjq8zd976yjmfnny45dd5fg2p2dv1sljg2kwi66nbppb"))))
+    (properties `((upstream-name . "rlist")))
+    (build-system r-build-system)
+    (propagated-inputs (list r-data-table r-jsonlite r-xml r-yaml))
+    (home-page "https://renkun-ken.github.io/rlist/")
+    (synopsis "A Toolbox for Non-Tabular Data Manipulation")
+    (description
+     "This package provides a set of functions for data manipulation with
+list objects, including mapping, filtering, grouping, sorting, updating,
+searching, and other useful functions.  Most functions are designed to be
+pipeline friendly so that data processing with lists can be chained.")
+    (license license:expat)))
+
 (define-public r-rsample
   (package
     (name "r-rsample")
-    (version "0.1.0")
+    (version "0.1.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "rsample" version))
        (sha256
         (base32
-         "00w8r0p499fm8cyw297gznr83mbgy9a3znzpbgj0zq9dry1a266b"))))
+         "01xwhj4zfvxbv9cjb6mbz3aphxqc3cnjjx1xy2yx2wd94fbka42z"))))
     (properties `((upstream-name . "rsample")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-ellipsis" ,r-ellipsis)
-       ("r-furrr" ,r-furrr)
-       ("r-generics" ,r-generics)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-slider" ,r-slider)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)
-       ("r-tidyselect" ,r-tidyselect)
-       ("r-vctrs" ,r-vctrs)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-dplyr
+           r-ellipsis
+           r-furrr
+           r-generics
+           r-lifecycle
+           r-purrr
+           r-rlang
+           r-slider
+           r-tibble
+           r-tidyr
+           r-tidyselect
+           r-vctrs))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://rsample.tidymodels.org")
     (synopsis "General resampling infrastructure")
     (description
@@ -27751,16 +27490,16 @@ Design} (SFD) and to test their quality.")
     (properties `((upstream-name . "dials")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dicedesign" ,r-dicedesign)
-       ("r-dplyr" ,r-dplyr)
-       ("r-glue" ,r-glue)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-scales" ,r-scales)
-       ("r-tibble" ,r-tibble)
-       ("r-vctrs" ,r-vctrs)
-       ("r-withr" ,r-withr)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-dicedesign
+           r-dplyr
+           r-glue
+           r-purrr
+           r-rlang
+           r-scales
+           r-tibble
+           r-vctrs
+           r-withr))
+    (native-inputs (list r-knitr))
     (home-page "https://dials.tidymodels.org/")
     (synopsis "Tools for creating tuning parameter values")
     (description
@@ -27783,27 +27522,27 @@ for creating, simulating, or validating values for such parameters.")
     (properties `((upstream-name . "tune")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cli" ,r-cli)
-       ("r-dials" ,r-dials)
-       ("r-dplyr" ,r-dplyr)
-       ("r-foreach" ,r-foreach)
-       ("r-generics" ,r-generics)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-glue" ,r-glue)
-       ("r-gpfit" ,r-gpfit)
-       ("r-hardhat" ,r-hardhat)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-parsnip" ,r-parsnip)
-       ("r-purrr" ,r-purrr)
-       ("r-recipes" ,r-recipes)
-       ("r-rlang" ,r-rlang)
-       ("r-rsample" ,r-rsample)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)
-       ("r-vctrs" ,r-vctrs)
-       ("r-withr" ,r-withr)
-       ("r-workflows" ,r-workflows)
-       ("r-yardstick" ,r-yardstick)))
+     (list r-cli
+           r-dials
+           r-dplyr
+           r-foreach
+           r-generics
+           r-ggplot2
+           r-glue
+           r-gpfit
+           r-hardhat
+           r-lifecycle
+           r-parsnip
+           r-purrr
+           r-recipes
+           r-rlang
+           r-rsample
+           r-tibble
+           r-tidyr
+           r-vctrs
+           r-withr
+           r-workflows
+           r-yardstick))
     (home-page "https://github.com/tidymodels/tune")
     (synopsis "Tidy tuning tools")
     (description
@@ -27827,24 +27566,24 @@ methods, and post-processing steps.")
     (properties `((upstream-name . "workflowsets")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cli" ,r-cli)
-       ("r-dplyr" ,r-dplyr)
-       ("r-hardhat" ,r-hardhat)
-       ("r-generics" ,r-generics)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-lifecycle" ,r-lifecycle)
-       ("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)))
+     (list r-cli
+           r-dplyr
+           r-hardhat
+           r-generics
+           r-ggplot2
+           r-lifecycle
+           r-prettyunits
+           r-purrr
+           r-rlang
+           r-rsample
+           r-tibble
+           r-tidyr
+           r-tune
+           r-vctrs
+           r-withr
+           r-workflows))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/tidymodels/workflowsets")
     (synopsis "Create a collection of tidymodels workflows")
     (description
@@ -27869,20 +27608,20 @@ results.")
     (properties `((upstream-name . "tidyposterior")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-generics" ,r-generics)
-       ("r-ggplot2" ,r-ggplot2)
-       ("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-tune" ,r-tune)
-       ("r-vctrs" ,r-vctrs)
-       ("r-workflowsets" ,r-workflowsets)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-dplyr
+           r-generics
+           r-ggplot2
+           r-purrr
+           r-rlang
+           r-rsample
+           r-rstanarm
+           r-tibble
+           r-tidyr
+           r-tune
+           r-vctrs
+           r-workflowsets))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://tidyposterior.tidymodels.org")
     (synopsis "Bayesian analysis to compare models using resampling statistics")
     (description
@@ -27907,16 +27646,16 @@ models without involving a test set.")
     (properties `((upstream-name . "tidypredict")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-generics" ,r-generics)
-       ("r-knitr" ,r-knitr)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-stringr" ,r-stringr)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-dplyr
+           r-generics
+           r-knitr
+           r-purrr
+           r-rlang
+           r-stringr
+           r-tibble
+           r-tidyr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://tidypredict.tidymodels.org")
     (synopsis "Run predictions inside the database")
     (description
@@ -27964,11 +27703,9 @@ and \"Persuasion\".")
     (properties `((upstream-name . "tokenizers")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)
-       ("r-snowballc" ,r-snowballc)
-       ("r-stringi" ,r-stringi)))
+     (list r-rcpp r-snowballc r-stringi))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://lincolnmullen.com/software/tokenizers/")
     (synopsis "Fast, consistent tokenization of natural language text")
     (description
@@ -27996,10 +27733,9 @@ consistent interface, and the package is built on the @code{stringi} and
     (properties `((upstream-name . "hunspell")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-digest" ,r-digest)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-digest r-rcpp))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/ropensci/hunspell#readme")
     (synopsis "High-performance stemmer, tokenizer, and spell checker")
     (description
@@ -28020,31 +27756,31 @@ vignettes in all common formats.")
 (define-public r-tidytext
   (package
     (name "r-tidytext")
-    (version "0.3.1")
+    (version "0.3.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "tidytext" version))
        (sha256
         (base32
-         "182gad5pzz6zvhbla3d496sxwiszc1qz8kzzkksaacwpsrc61f9h"))))
+         "0as7lscjl6ywk85almmb4f71vxmgkfds46g52ryggkg2isksvq3g"))))
     (properties `((upstream-name . "tidytext")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-generics" ,r-generics)
-       ("r-hunspell" ,r-hunspell)
-       ("r-janeaustenr" ,r-janeaustenr)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-matrix" ,r-matrix)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-stringr" ,r-stringr)
-       ("r-tibble" ,r-tibble)
-       ("r-tokenizers" ,r-tokenizers)
-       ("r-vctrs" ,r-vctrs)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-dplyr
+           r-generics
+           r-hunspell
+           r-janeaustenr
+           r-lifecycle
+           r-matrix
+           r-purrr
+           r-rlang
+           r-stringr
+           r-tibble
+           r-tokenizers
+           r-vctrs))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/juliasilge/tidytext")
     (synopsis "Text mining using dplyr, ggplot2, and other Tidy tools")
     (description
@@ -28066,21 +27802,21 @@ analysis using @code{dplyr}, @code{ggplot2}, and other Tidy tools.")
     (properties `((upstream-name . "parsnip")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-generics" ,r-generics)
-       ("r-globals" ,r-globals)
-       ("r-glue" ,r-glue)
-       ("r-hardhat" ,r-hardhat)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-magrittr" ,r-magrittr)
-       ("r-prettyunits" ,r-prettyunits)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)
-       ("r-vctrs" ,r-vctrs)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-dplyr
+           r-generics
+           r-globals
+           r-glue
+           r-hardhat
+           r-lifecycle
+           r-magrittr
+           r-prettyunits
+           r-purrr
+           r-rlang
+           r-tibble
+           r-tidyr
+           r-vctrs))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://parsnip.tidymodels.org")
     (synopsis "Common API to modeling and analysis functions")
     (description
@@ -28103,19 +27839,19 @@ functions or computational engines (e.g. R, Spark, Stan, etc).")
     (properties `((upstream-name . "infer")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-broom" ,r-broom)
-       ("r-dplyr" ,r-dplyr)
-       ("r-generics" ,r-generics)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-glue" ,r-glue)
-       ("r-magrittr" ,r-magrittr)
-       ("r-patchwork" ,r-patchwork)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-broom
+           r-dplyr
+           r-generics
+           r-ggplot2
+           r-glue
+           r-magrittr
+           r-patchwork
+           r-purrr
+           r-rlang
+           r-tibble
+           r-tidyr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/tidymodels/infer")
     (synopsis "Tidy statistical inference")
     (description
@@ -28146,19 +27882,18 @@ model-related packages.")
 (define-public r-conflicted
   (package
     (name "r-conflicted")
-    (version "1.0.4")
+    (version "1.1.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "conflicted" version))
        (sha256
         (base32
-         "0xp04cdvmp3b1phazhmjqn0vmax1b2218xsb5854ffv43m7qvrra"))))
+         "1qg9ar114r98wm0pnf65mss4v2ksq3924rlpm13mqp4s3p6j9yi4"))))
     (properties `((upstream-name . "conflicted")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-memoise" ,r-memoise)
-       ("r-rlang" ,r-rlang)))
+     (list r-memoise r-rlang))
     (home-page "https://github.com/r-lib/conflicted")
     (synopsis "Alternative conflict resolution strategy")
     (description
@@ -28173,42 +27908,40 @@ use.")
 (define-public r-tidymodels
   (package
     (name "r-tidymodels")
-    (version "0.1.3")
+    (version "0.1.4")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "tidymodels" version))
        (sha256
         (base32
-         "18vz0xsgxrfzcfxpvilhj1w0f4v4lx5ws37nwmy40lhv3v05nxn8"))))
+         "18krycdn0h1i8swrq6bgj8qnb200rr0pqhr6maq3h1jc66x0y7nd"))))
     (properties `((upstream-name . "tidymodels")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-broom" ,r-broom)
-       ("r-cli" ,r-cli)
-       ("r-conflicted" ,r-conflicted)
-       ("r-dials" ,r-dials)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-infer" ,r-infer)
-       ("r-modeldata" ,r-modeldata)
-       ("r-parsnip" ,r-parsnip)
-       ("r-purrr" ,r-purrr)
-       ("r-recipes" ,r-recipes)
-       ("r-rlang" ,r-rlang)
-       ("r-rsample" ,r-rsample)
-       ("r-rstudioapi" ,r-rstudioapi)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)
-       ("r-tune" ,r-tune)
-       ("r-workflows" ,r-workflows)
-       ("r-workflowsets" ,r-workflowsets)
-       ("r-yardstick" ,r-yardstick)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("pandoc" ,pandoc)
-       ("pandoc-citeproc" ,pandoc-citeproc))) ; for vignettes
+     (list r-broom
+           r-cli
+           r-conflicted
+           r-dials
+           r-dplyr
+           r-ggplot2
+           r-hardhat
+           r-infer
+           r-modeldata
+           r-parsnip
+           r-purrr
+           r-recipes
+           r-rlang
+           r-rsample
+           r-rstudioapi
+           r-tibble
+           r-tidyr
+           r-tune
+           r-workflows
+           r-workflowsets
+           r-yardstick))
+    (native-inputs
+     (list r-knitr r-rmarkdown pandoc))
     (home-page "https://github.com/tidymodels/tidymodels")
     (synopsis "Tidy collection for modeling and statistical analysis")
     (description
@@ -28231,7 +27964,7 @@ data structures of the tidyverse.")
     (properties `((upstream-name . "lsa")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-snowballc" ,r-snowballc)))
+     (list r-snowballc))
     (home-page "https://cran.r-project.org/package=lsa")
     (synopsis "Latent semantic analysis")
     (description
@@ -28284,8 +28017,7 @@ package also provides functions to visualize the observed data and the MLE.")
     (properties `((upstream-name . "metafor")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-matrix" ,r-matrix)
-       ("r-nlme" ,r-nlme)))
+     (list r-matrix r-nlme))
     (home-page "https://cran.r-project.org/web/packages/metafor/")
     (synopsis "Meta-analysis package for R")
     (description
@@ -28321,11 +28053,7 @@ phylogenetic relatedness) can also be conducted.")
     (properties `((upstream-name . "altmeta")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-coda" ,r-coda)
-       ("r-lme4" ,r-lme4)
-       ("r-matrix" ,r-matrix)
-       ("r-metafor" ,r-metafor)
-       ("r-rjags" ,r-rjags)))
+     (list r-coda r-lme4 r-matrix r-metafor r-rjags))
     (home-page "https://cran.r-project.org/web/packages/altmeta/")
     (synopsis "Alternative meta-analysis methods")
     (description
@@ -28349,14 +28077,14 @@ including:
 (define-public r-perm
   (package
     (name "r-perm")
-    (version "1.0-0.0")
+    (version "1.0-0.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "perm" version))
        (sha256
         (base32
-         "0075awl66ynv10vypg63fcxk33qzvxddrp8mi4w08ysvimcyxijk"))))
+         "182ac1y91yzb34zwdcmx5fdfr5z0cha0gx2bgk36gwxhgfc994kj"))))
     (properties `((upstream-name . "perm")))
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/web/packages/perm/")
@@ -28372,14 +28100,14 @@ covariate (usually group indicator) and the scores.")
 (define-public r-qtl
   (package
     (name "r-qtl")
-    (version "1.48-1")
+    (version "1.50")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "qtl" version))
        (sha256
         (base32
-         "098mgmfj8ndi8yipr9b3f6gbbh78cgp9j7y561nlnhrnyc8bsih9"))))
+         "1mcy9wlp5lj5f3z4mf3n5li7x32vj67rmhjnzsp8fhfw0ipnaf1d"))))
     (build-system r-build-system)
     (home-page "https://rqtl.org/")
     (synopsis "R package for analyzing QTL experiments in genetics")
@@ -28395,20 +28123,20 @@ genome scans.")
 (define-public r-qtl2
   (package
     (name "r-qtl2")
-    (version "0.24")
+    (version "0.28")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "qtl2" version))
               (sha256
-               (base32 "1558khh0zkwm0rdk87krv9836krvwv5h7ymlz9bsrgcvypyr9186"))))
+               (base32 "0ppc6dzlq77mppxc6bczai9gi40jrbxd1466y2cn2s8a4ah1jg9y"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcppeigen" ,r-rcppeigen)
-       ("r-rsqlite" ,r-rsqlite)
-       ("r-yaml" ,r-yaml)))
+     (list r-data-table
+           r-jsonlite
+           r-rcpp
+           r-rcppeigen
+           r-rsqlite
+           r-yaml))
     (home-page "https://kbroman.org/qtl2/")
     (synopsis "Quantitative Trait Locus Mapping in Experimental Crosses")
     (description
@@ -28421,17 +28149,17 @@ designs.  Broman et al. (2018) <doi:10.1534/genetics.118.301595>.")
 (define-public r-seqminer
   (package
     (name "r-seqminer")
-    (version "8.0")
+    (version "8.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "seqminer" version))
        (sha256
         (base32
-         "00jzj8mwb0zaiwlifd41b26mrq9mzigj18nc29dydi0r42hxg16i"))))
+         "097313x72jr2q6dp8ma33w8kyp3gfw71snf1qx2maxbwwnysk085"))))
     (build-system r-build-system)
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "http://seqminer.genomic.codes")
     (synopsis "Read nucleotide sequence data (VCF, BCF, and METAL formats)")
     (description
@@ -28443,18 +28171,18 @@ data (variant call format, e.g. VCF or BCF) or meta-analysis results in R.")
 (define-public r-maldiquant
   (package
     (name "r-maldiquant")
-    (version "1.20")
+    (version "1.21")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "MALDIquant" version))
        (sha256
         (base32
-         "1h9i158czlzwbn5zakkqd2ggc9g90r73vdspmp6kgfcmy9frvwzz"))))
+         "1y1g3819ss06dry70kfhg2syddw71682qmzkcyppfsma6hhghw87"))))
     (properties `((upstream-name . "MALDIquant")))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/MALDIquant")
     (synopsis "Quantitative analysis of mass spectrometry data")
     (description
@@ -28482,8 +28210,7 @@ as allowing spectra with different resolutions.")
     (properties `((upstream-name . "scattermore")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-scales" ,r-scales)))
+     (list r-ggplot2 r-scales))
     (home-page "https://github.com/exaexa/scattermore")
     (synopsis "Scatterplots with more points")
     (description
@@ -28494,21 +28221,18 @@ data to rasters.  It speeds up plotting of data with millions of points.")
 (define-public r-seuratobject
   (package
     (name "r-seuratobject")
-    (version "4.0.2")
+    (version "4.0.4")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "SeuratObject" version))
        (sha256
         (base32
-         "076bd6xmpnspnz7raw03mfgknnygx79sj3c9q6yhpanc46i9gvk4"))))
+         "1308hjbs8br3gp9vwm65awgp6vimwgi2jyl1ryn96l84savn2ljq"))))
     (properties `((upstream-name . "SeuratObject")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcppeigen" ,r-rcppeigen)
-       ("r-rlang" ,r-rlang)))
+     (list r-matrix r-rcpp r-rcppeigen r-rlang))
     (home-page "https://satijalab.org/seurat")
     (synopsis "Data structures for single cell data")
     (description
@@ -28522,59 +28246,59 @@ other R users.")
 (define-public r-seurat
   (package
     (name "r-seurat")
-    (version "4.0.4")
+    (version "4.1.0")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "Seurat" version))
               (sha256
                (base32
-                "1pa2v29mx39swblzwzqc7rpql2rizhi2nj426r1i63wyla6lcxc0"))))
+                "0p9i3fnkqa3vranr7c7ckzp1kq42d7p0gcfi9ml4kr334yd84195"))))
     (properties `((upstream-name . "Seurat")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cluster" ,r-cluster)
-       ("r-cowplot" ,r-cowplot)
-       ("r-fitdistrplus" ,r-fitdistrplus)
-       ("r-future" ,r-future)
-       ("r-future-apply" ,r-future-apply)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggrepel" ,r-ggrepel)
-       ("r-ggridges" ,r-ggridges)
-       ("r-httr" ,r-httr)
-       ("r-ica" ,r-ica)
-       ("r-igraph" ,r-igraph)
-       ("r-irlba" ,r-irlba)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-kernsmooth" ,r-kernsmooth)
-       ("r-leiden" ,r-leiden)
-       ("r-lmtest" ,r-lmtest)
-       ("r-mass" ,r-mass)
-       ("r-matrix" ,r-matrix)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-miniui" ,r-miniui)
-       ("r-patchwork" ,r-patchwork)
-       ("r-pbapply" ,r-pbapply)
-       ("r-plotly" ,r-plotly)
-       ("r-png" ,r-png)
-       ("r-rann" ,r-rann)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcppannoy" ,r-rcppannoy)
-       ("r-rcppeigen" ,r-rcppeigen)
-       ("r-rcppprogress" ,r-rcppprogress)
-       ("r-reticulate" ,r-reticulate)
-       ("r-rlang" ,r-rlang)
-       ("r-rocr" ,r-rocr)
-       ("r-rtsne" ,r-rtsne)
-       ("r-scales" ,r-scales)
-       ("r-scattermore" ,r-scattermore)
-       ("r-sctransform" ,r-sctransform)
-       ("r-seuratobject" ,r-seuratobject)
-       ("r-shiny" ,r-shiny)
-       ("r-spatstat-core" ,r-spatstat-core)
-       ("r-spatstat-geom" ,r-spatstat-geom)
-       ("r-tibble" ,r-tibble)
-       ("r-uwot" ,r-uwot)))
+     (list r-cluster
+           r-cowplot
+           r-fitdistrplus
+           r-future
+           r-future-apply
+           r-ggplot2
+           r-ggrepel
+           r-ggridges
+           r-httr
+           r-ica
+           r-igraph
+           r-irlba
+           r-jsonlite
+           r-kernsmooth
+           r-leiden
+           r-lmtest
+           r-mass
+           r-matrix
+           r-matrixstats
+           r-miniui
+           r-patchwork
+           r-pbapply
+           r-plotly
+           r-png
+           r-rann
+           r-rcolorbrewer
+           r-rcpp
+           r-rcppannoy
+           r-rcppeigen
+           r-rcppprogress
+           r-reticulate
+           r-rlang
+           r-rocr
+           r-rtsne
+           r-scales
+           r-scattermore
+           r-sctransform
+           r-seuratobject
+           r-shiny
+           r-spatstat-core
+           r-spatstat-geom
+           r-tibble
+           r-uwot))
     (home-page "http://www.satijalab.org/seurat")
     (synopsis "Seurat is an R toolkit for single cell genomics")
     (description
@@ -28586,28 +28310,106 @@ algorithms; density clustering, hierarchical clustering, k-means, and the
 discovery of differentially expressed genes and markers.")
     (license license:gpl3)))
 
+(define-public r-seuratdisk
+  (let ((commit "163f1aade5bac38ed1e9e9c912283a7e74781610")
+        (revision "1"))
+    (package
+      (name "r-seuratdisk")
+      (version (git-version "0.0.0.9019" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/mojaveazure/seurat-disk")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "1d1v8qi6kknzy5fj6bl8akwy74h5h143i00lyidsnqjbwp9n4qnw"))))
+      (properties `((upstream-name . "SeuratDisk")))
+      (build-system r-build-system)
+      (propagated-inputs
+       (list r-cli
+             r-crayon
+             r-hdf5r
+             r-matrix
+             r-r6
+             r-rlang
+             r-seurat
+             r-seuratobject
+             r-stringi
+             r-withr))
+      (native-inputs
+       (list r-knitr))
+      (home-page "https://github.com/mojaveazure/seurat-disk")
+      (synopsis "Interfaces for HDF5-based single cell file formats")
+      (description
+       "The h5Seurat file format is specifically designed for the storage and
+analysis of multi-modal single-cell and spatially-resolved expression
+experiments, for example, from CITE-seq or 10X Visium technologies.  It holds
+all molecular information and associated metadata, including (for example)
+nearest-neighbor graphs, dimensional reduction information, spatial
+coordinates and image data, and cluster labels.  This package also supports
+rapid and on-disk conversion between h5Seurat and AnnData objects, with the
+goal of enhancing interoperability between Seurat and Scanpy.")
+      (license license:gpl3))))
+
+(define-public r-seuratdata
+  (let ((commit "b59556b24d7d6728a5744c9c715dd5f7f32ed7a5")
+        (revision "1"))
+    (package
+      (name "r-seuratdata")
+      (version (git-version "0.2.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/satijalab/seurat-data")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "1xfdmdmgn4r0z6w4cxa98ic6xk8i6qz054r215dvqbjs1vydsbf9"))))
+      (properties `((upstream-name . "SeuratData")))
+      (build-system r-build-system)
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           ;; When there is no HOME directory, this package will fail to load
+           ;; the included list of packages.
+           (add-after 'unpack 'set-HOME
+             (lambda _ (setenv "HOME" "/tmp"))))))
+      (propagated-inputs
+       (list r-cli r-crayon r-rappdirs))
+      (home-page "https://github.com/satijalab/seurat-data")
+      (synopsis "Install and manage Seurat datasets")
+      (description
+       "Single cell RNA sequencing datasets can be large, consisting of
+matrices that contain expression data for several thousand features across
+several thousand cells.  This package is designed to easily install, manage,
+and learn about various single-cell datasets, provided Seurat objects and
+distributed as independent packages.")
+      (license license:gpl3))))
+
 (define-public r-phangorn
   (package
     (name "r-phangorn")
-    (version "2.7.1")
+    (version "2.8.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "phangorn" version))
        (sha256
         (base32
-         "160kks4bg4iwy8g234g6aiiqbvz7ki5k9csyax3kjv7ia5wddafq"))))
+         "0xfwi7adl1pcfcwk72fj7lkwfm0wiip96ij7m4252xr9mq818ivd"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ape" ,r-ape)
-       ("r-fastmatch" ,r-fastmatch)
-       ("r-igraph" ,r-igraph)
-       ("r-magrittr" ,r-magrittr)
-       ("r-matrix" ,r-matrix)
-       ("r-quadprog" ,r-quadprog)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-ape
+           r-fastmatch
+           r-igraph
+           r-matrix
+           r-quadprog
+           r-rcpp))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/KlausVigo/phangorn")
     (synopsis "Phylogenetic analysis in R")
     (description
@@ -28629,13 +28431,10 @@ Maximum Parsimony, distance methods and Hadamard conjugation.")
           "0rzrk7xsn4gy271pbcw3azndhx0c06bmsgrg6libjmlfnmq6j8sc"))))
     (build-system r-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
-    (inputs `(("fftw" ,fftw) ("gsl" ,gsl)))
+     (list gfortran))
+    (inputs (list fftw gsl))
     (propagated-inputs
-     `(("r-ape" ,r-ape)
-       ("r-desolve" ,r-desolve)
-       ("r-rcpp" ,r-rcpp)
-       ("r-subplex" ,r-subplex)))
+     (list r-ape r-desolve r-rcpp r-subplex))
     (home-page "https://www.zoology.ubc.ca/prog/diversitree")
     (synopsis "Comparative 'phylogenetic' analyses of diversification")
     (description "This package contains a number of comparative \"phylogenetic\"
@@ -28650,20 +28449,20 @@ rate speciation and extinction.")
 (define-public r-calculus
   (package
     (name "r-calculus")
-    (version "0.3.1")
+    (version "0.3.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "calculus" version))
        (sha256
         (base32
-         "0m9cjc3bqv88vrrj51kd7c7xnczka5w9q0ln4l4nk514gvlr79bn"))))
+         "1x3bcdd422wqv9gk9r2m8g19qcga220sm5rxdp4bgfc6vlqzzz7y"))))
     (properties `((upstream-name . "calculus")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)))
+     (list r-rcpp))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/eguidotti/calculus")
     (synopsis "High dimensional numerical and symbolic calculus")
     (description
@@ -28680,18 +28479,18 @@ parabolic or user defined by custom scale factors.")
 (define-public r-decon
   (package
     (name "r-decon")
-    (version "1.2-4")
+    (version "1.3-4")
     (source
       (origin
         (method url-fetch)
         (uri (cran-uri "decon" version))
         (sha256
           (base32
-            "1v4l0xq29rm8mks354g40g9jxn0didzlxg3g7z08m0gvj29zdj7s"))))
+            "036cv56wf42q2p3d5h15hbrp5rc29xxy20qwv4k1qzhkq6hmw0qs"))))
     (properties `((upstream-name . "decon")))
     (build-system r-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page
       "https://cran.r-project.org/web/packages/decon/")
     (synopsis "Deconvolution Estimation in Measurement Error Models")
@@ -28714,6 +28513,39 @@ estimation in measurement error models: The R package decon.
 Journal of Statistical Software, 39(10), 1-24.")
     (license license:gpl3+)))
 
+(define-public r-densestbayes
+  (package
+    (name "r-densestbayes")
+    (version "1.0-2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "densEstBayes" version))
+       (sha256
+        (base32 "16fb7vkic9q5p8s4f0f215zmb36fcizqr4r2vm9dxxj9rasrg2f3"))))
+    (properties `((upstream-name . "densEstBayes")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-bh
+           r-mass
+           r-nlme
+           r-rcpp
+           r-rcpparmadillo
+           r-rcppeigen
+           r-rcppparallel
+           r-rstan
+           r-rstantools
+           r-stanheaders))
+    (home-page "https://cran.r-project.org/package=densEstBayes")
+    (synopsis "Density estimation via Bayesian inference engines")
+    (description
+     "Bayesian density estimates for univariate continuous random samples are
+provided using the Bayesian inference engine paradigm.  The engine options
+are: Hamiltonian Monte Carlo, the no U-turn sampler, semiparametric mean field
+variational Bayes and slice sampling.  The methodology is described in Wand
+and Yu (2020), arXiv:2009.06182.")
+    (license license:gpl2+)))
+
 (define-public r-locpol
   (package
     (name "r-locpol")
@@ -28750,11 +28582,7 @@ kernel estimators.")
     (properties `((upstream-name . "lpme")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-decon" ,r-decon)
-        ("r-flexmix" ,r-flexmix)
-        ("r-locpol" ,r-locpol)
-        ("r-rcpp" ,r-rcpp)
-        ("r-rcpparmadillo" ,r-rcpparmadillo)))
+      (list r-decon r-flexmix r-locpol r-rcpp r-rcpparmadillo))
     (home-page
       "https://cran.r-project.org/web/packages/lpme/")
     (synopsis "Nonparametric Estimation of Measurement Error Models")
@@ -28779,8 +28607,7 @@ also provided for each method.")
     (properties `((upstream-name . "aws.signature")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-base64enc" ,r-base64enc)
-       ("r-digest" ,r-digest)))
+     (list r-base64enc r-digest))
     (home-page "https://github.com/cloudyr/aws.signature")
     (synopsis "Amazon Web Services Request Signatures")
     (description
@@ -28804,12 +28631,12 @@ use on EC2 instances, the package 'aws.ec2metadata' is suggested.")
     (properties `((upstream-name . "aws.s3")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-aws-signature" ,r-aws-signature)
-       ("r-base64enc" ,r-base64enc)
-       ("r-curl" ,r-curl)
-       ("r-digest" ,r-digest)
-       ("r-httr" ,r-httr)
-       ("r-xml2" ,r-xml2)))
+     (list r-aws-signature
+           r-base64enc
+           r-curl
+           r-digest
+           r-httr
+           r-xml2))
     (home-page "https://github.com/cloudyr/aws.s3")
     (synopsis "AWS S3 Client Package")
     (description
@@ -28829,9 +28656,9 @@ Services (AWS) Simple Storage Service (S3) REST API.")
                 "18s92qyakhvp336kk2777ydypwfrfwfz6a1gqkq812zy3kcb4mcc"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-r6" ,r-r6)))
+     (list r-r6))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://s-fleck.github.io/lgr/")
     (synopsis "Fully featured logging framework")
     (description "This package offers a flexible, feature-rich yet
@@ -28841,20 +28668,39 @@ logging to plaintext, JSON, (rotating) files, memory buffers, and databases, as
 well as email and push notifications.")
     (license license:expat)))
 
+(define-public r-mhg
+  (package
+    (name "r-mhg")
+    (version "1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "mHG" version))
+       (sha256
+        (base32
+         "1rz5ncrvvv9h9grls15apa63v2nh9j87fmp4mwjjil37jx6a5zki"))))
+    (properties `((upstream-name . "mHG")))
+    (build-system r-build-system)
+    (home-page "https://cran.r-project.org/package=mHG")
+    (synopsis "Minimum-hypergeometric test")
+    (description
+     "This package runs a minimum-hypergeometric (mHG) test as described in
+\"Discovering Motifs in Ranked Lists of DNA Sequences\" by Eran Eden.")
+    (license license:gpl2)))
+
 (define-public r-mlr3measures
   (package
     (name "r-mlr3measures")
-    (version "0.4.0")
+    (version "0.4.1")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "mlr3measures" version))
               (sha256
                (base32
-                "1qlqfan5akz42zwkcz3ncln6rd9c302dy4cyp7nx0jcafr5i459f"))))
+                "1kbw3xd7c9x65v9zzs8i5skmrvl0mf2wsbyssmiif0lvrbzfhcmb"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-checkmate" ,r-checkmate)
-       ("r-prroc" ,r-prroc)))
+     (list r-checkmate r-prroc))
     (home-page "https://mlr3measures.mlr-org.com/")
     (synopsis "Performance measures for mlr3")
     (description "This package implements multiple performance measures for
@@ -28867,20 +28713,16 @@ are.")
 (define-public r-mlr3misc
   (package
     (name "r-mlr3misc")
-    (version "0.9.4")
+    (version "0.10.0")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "mlr3misc" version))
               (sha256
                (base32
-                "14lcpvxrrl68l3khmy5r266b7yjjlg97pz4xvha0ypx8hlpbqik2"))))
+                "1wnzyij1x67smkb3gjb9gpp7iy5andfl0s1c78xx4wylhycc6m11"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-backports" ,r-backports)
-       ("r-checkmate" ,r-checkmate)
-       ("r-data-table" ,r-data-table)
-       ("r-digest" ,r-digest)
-       ("r-r6" ,r-r6)))
+     (list r-backports r-checkmate r-data-table r-digest r-r6))
     (home-page "https://mlr3misc.mlr-org.com/")
     (synopsis "Helper functions for mlr3")
     (description "@code{mlr3misc} provides frequently used helper functions
@@ -28890,6 +28732,69 @@ helper functions for functional programming, for printing, to work with
 package also supersedes the package @code{BBmisc}.")
     (license license:lgpl3)))
 
+(define-public r-mlr3pipelines
+  (package
+    (name "r-mlr3pipelines")
+    (version "0.4.0")
+    (source (origin
+              (method url-fetch)
+              (uri (cran-uri "mlr3pipelines" version))
+              (sha256
+               (base32
+                "0913f67c1r9bi68gxh1prsp0vch21bl6plahnvjrlbq8rrs1sr6p"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-backports
+           r-checkmate
+           r-data-table
+           r-digest
+           r-lgr
+           r-mlr3
+           r-mlr3misc
+           r-paradox
+           r-r6
+           r-withr))
+    (home-page "https://mlr3pipelines.mlr-org.com/")
+    (synopsis "Preprocessing Operators and Pipelines for @code{mlr3}")
+    (description "@code{mlr3pipelines} enriches @code{mlr3} with a diverse
+set of pipelining operators (PipeOps) that can be composed into graphs.
+Operations exist for data preprocessing, model fitting, and ensemble learning.
+Graphs can themselves be treated as @code{mlr3} Learners and can therefore be
+resampled, benchmarked, and tuned.")
+    (license license:lgpl3)))
+
+(define-public r-mlr3ordinal
+  (let ((commit "9febac983b11b7b1f477e5cf0212e5999cd2ed44")
+        (revision "0"))
+    (package
+      (name "r-mlr3ordinal")
+      (version (git-version "0.1.0-9000" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/mlr-org/mlr3ordinal")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1icfhz1pjm0mlsn2y60gsrbk31b2p7xmpx3xsg7639rcgdb5f9gl"))))
+      (build-system r-build-system)
+      (propagated-inputs
+       (list r-checkmate
+             r-data-table
+             r-mlr3
+             r-mlr3misc
+             r-mlr3pipelines
+             r-nloptr
+             r-ordinal
+             r-paradox
+             r-r6))
+      (home-page "https://mlr3ordinal.mlr-org.com/")
+      (synopsis "Ordinal Regression for mlr3")
+      (description "This package extends @code{mlr3} with support for
+performing ordinal regression.")
+      (license license:expat))))
+
 (define-public r-paradox
   (package
     (name "r-paradox")
@@ -28902,11 +28807,7 @@ package also supersedes the package @code{BBmisc}.")
                 "1difp0bzsfxcmbm1snahh3i6417k1a2w4mnjx65p20n2yiclmrgs"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-backports" ,r-backports)
-       ("r-checkmate" ,r-checkmate)
-       ("r-data-table" ,r-data-table)
-       ("r-mlr3misc" ,r-mlr3misc)
-       ("r-r6" ,r-r6)))
+     (list r-backports r-checkmate r-data-table r-mlr3misc r-r6))
     (home-page "https://paradox.mlr-org.com/")
     (synopsis "Define and work with parameter spaces for complex algorithms")
     (description "With this package it is possible to define parameter spaces,
@@ -28918,29 +28819,29 @@ implemented as @code{R6} classes.")
 (define-public r-mlr3
   (package
     (name "r-mlr3")
-    (version "0.12.0")
+    (version "0.13.1")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "mlr3" version))
               (sha256
                (base32
-                "0nimwczsgrj29r9qrlz32qc3fkj02369zql7jhkrn3lk3mfy5zmz"))))
-    (build-system r-build-system)
-    (propagated-inputs
-     `(("r-r6" ,r-r6)
-       ("r-backports" ,r-backports)
-       ("r-checkmate" ,r-checkmate)
-       ("r-data-table" ,r-data-table)
-       ("r-future" ,r-future)
-       ("r-future-apply" ,r-future-apply)
-       ("r-lgr" ,r-lgr)
-       ("r-mlbench" ,r-mlbench)
-       ("r-mlr3measures" ,r-mlr3measures)
-       ("r-mlr3misc" ,r-mlr3misc)
-       ("r-palmerpenguins" ,r-palmerpenguins)
-       ("r-paradox" ,r-paradox)
-       ("r-parallelly" ,r-parallelly)
-       ("r-uuid" ,r-uuid)))
+                "052685d08cfsrh3r31yn05ngwi6z3fmz26gwiy32z7cpcigz8jjs"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-r6
+           r-backports
+           r-checkmate
+           r-data-table
+           r-future
+           r-future-apply
+           r-lgr
+           r-mlbench
+           r-mlr3measures
+           r-mlr3misc
+           r-palmerpenguins
+           r-paradox
+           r-parallelly
+           r-uuid))
     (home-page "https://mlr3.mlr-org.com/")
     (synopsis "Machine Learning in R - Next Generation")
     (description "@code{mlr3} enables efficient, object-oriented programming
@@ -28954,21 +28855,21 @@ computational operations, add-on packages provide additional functionality.")
 (define-public r-mlr3learners
   (package
     (name "r-mlr3learners")
-    (version "0.5.0")
+    (version "0.5.1")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "mlr3learners" version))
               (sha256
                (base32
-                "1gkbbn5ah2iv4pv5q2jf4lrqkga744d4y9jlyhyjqf0x75y9wkg2"))))
+                "1yc3mrk1b9h1k342wnw7sm4zmcw7w31l5ybh558g88f5hmibdl98"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-checkmate" ,r-checkmate)
-       ("r-data-table" ,r-data-table)
-       ("r-mlr3" ,r-mlr3)
-       ("r-mlr3misc" ,r-mlr3misc)
-       ("r-paradox" ,r-paradox)
-       ("r-r6" ,r-r6)))
+     (list r-checkmate
+           r-data-table
+           r-mlr3
+           r-mlr3misc
+           r-paradox
+           r-r6))
     (home-page "https://mlr3learners.mlr-org.com/")
     (synopsis "Recommended Learners for @code{mlr3}")
     (description "@code{mlr3learners} extends @code{mlr3} and @code{mlr3proba}
@@ -28981,25 +28882,25 @@ vector machines, and gradient boosting.")
 (define-public r-bbotk
   (package
     (name "r-bbotk")
-    (version "0.4.0")
+    (version "0.5.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "bbotk" version))
        (sha256
         (base32
-         "09cw6z397laszsg5wsgpjh7jda74amqrcl2p25bgjg33ina2nvg7"))))
+         "15y1w3mi1g91p73786ql1mmqld011757vax17i1vq7zw1s51yzxz"))))
     (properties `((upstream-name . "bbotk")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-checkmate" ,r-checkmate)
-       ("r-data-table" ,r-data-table)
-       ("r-lgr" ,r-lgr)
-       ("r-mlr3misc" ,r-mlr3misc)
-       ("r-paradox" ,r-paradox)
-       ("r-r6" ,r-r6)))
+     (list r-checkmate
+           r-data-table
+           r-lgr
+           r-mlr3misc
+           r-paradox
+           r-r6))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bbotk.mlr-org.com")
     (synopsis "Black-Box Optimization Toolkit")
     (description "This package provides a common framework for optimization of
@@ -29011,24 +28912,23 @@ annealing.")
 (define-public r-mlr3tuning
   (package
     (name "r-mlr3tuning")
-    (version "0.9.0")
+    (version "0.10.0")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "mlr3tuning" version))
               (sha256
                (base32
-                "0i428kdbak81j1wlwmdf9y40hqi63azhyny802ms2z04wl8lwnvs"))))
-    (build-system r-build-system)
-    (propagated-inputs
-     `(("r-bbotk" ,r-bbotk)
-       ("r-checkmate" ,r-checkmate)
-       ("r-data-table" ,r-data-table)
-       ("r-digest" ,r-digest)
-       ("r-lgr" ,r-lgr)
-       ("r-mlr3" ,r-mlr3)
-       ("r-mlr3misc" ,r-mlr3misc)
-       ("r-paradox" ,r-paradox)
-       ("r-r6" ,r-r6)))
+                "0cqbqp53053v7lvi9ynpr860n8fm9w9842hai5z6xvmgzqdmjiyp"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-bbotk
+           r-checkmate
+           r-data-table
+           r-lgr
+           r-mlr3
+           r-mlr3misc
+           r-paradox
+           r-r6))
     (home-page "https://mlr3tuning.mlr-org.com/")
     (synopsis "Tuning for @code{mlr3}")
     (description "@code{mlr3tuning} implements methods for hyperparameter
@@ -29100,8 +29000,7 @@ itself."))))
     (properties `((upstream-name . "fontquiver")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-fontbitstreamvera" ,r-fontbitstreamvera)
-       ("r-fontliberation" ,r-fontliberation)))
+     (list r-fontbitstreamvera r-fontliberation))
     (home-page "https://cran.r-project.org/package=fontquiver")
     (synopsis "Set of installed fonts")
     (description
@@ -29142,7 +29041,7 @@ avoid system fonts to make sure your outputs are reproducible.")
                (copy-recursively (string-append harfbuzz "/include")
                                  "src/target/include")))))))
     (propagated-inputs
-     `(("r-fontquiver" ,r-fontquiver)))
+     (list r-fontquiver))
     ;; This may defeat the purpose of this package as our versions of freetype
     ;; and harfbuzz obviously differ from the tarballs offered by this
     ;; project.  On the other hand, Guix arguably does a better job at
@@ -29174,7 +29073,7 @@ avoid system fonts to make sure your outputs are reproducible.")
 		    "--without-fontconfig"
 		    "--without-glib")))))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "https://cran.r-project.org/package=freetypeharfbuzz")
     (synopsis "Deterministic computation of text box metrics")
     (description
@@ -29199,17 +29098,16 @@ unit tests of graphics).")
     (properties `((upstream-name . "vdiffr")))
     (build-system r-build-system)
     (inputs
-     `(("libpng" ,libpng)
-       ("zlib" ,zlib)))
-    (propagated-inputs
-     `(("r-cpp11" ,r-cpp11)
-       ("r-diffobj" ,r-diffobj)
-       ("r-glue" ,r-glue)
-       ("r-htmltools" ,r-htmltools)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-rlang" ,r-rlang)
-       ("r-testthat" ,r-testthat)
-       ("r-xml2" ,r-xml2)))
+     (list libpng zlib))
+    (propagated-inputs
+     (list r-cpp11
+           r-diffobj
+           r-glue
+           r-htmltools
+           r-lifecycle
+           r-rlang
+           r-testthat
+           r-xml2))
     (home-page "https://github.com/r-lib/vdiffr")
     (synopsis "Visual regression testing and graphical diffing")
     (description
@@ -29243,28 +29141,28 @@ chunks.")
 (define-public r-clustree
   (package
     (name "r-clustree")
-    (version "0.4.3")
+    (version "0.4.4")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "clustree" version))
        (sha256
         (base32
-         "0lxydy2f83qqd5dhlp2l546jax759l43b29j6g82079yzg1szwsz"))))
+         "0vwmicajl7c0rmjdmf4f857fii0xrxz25vjkn888svlsikw00qbs"))))
     (properties `((upstream-name . "clustree")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-checkmate" ,r-checkmate)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggraph" ,r-ggraph)
-       ("r-ggrepel" ,r-ggrepel)
-       ("r-igraph" ,r-igraph)
-       ("r-rlang" ,r-rlang)
-       ("r-tidygraph" ,r-tidygraph)
-       ("r-viridis" ,r-viridis)))
+     (list r-checkmate
+           r-dplyr
+           r-ggplot2
+           r-ggraph
+           r-ggrepel
+           r-igraph
+           r-rlang
+           r-tidygraph
+           r-viridis))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/lazappi/clustree")
     (synopsis "Visualize clusterings at different resolutions")
     (description
@@ -29278,27 +29176,22 @@ clusterings as resolution increases.")
 (define-public r-textshaping
   (package
     (name "r-textshaping")
-    (version "0.3.5")
+    (version "0.3.6")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "textshaping" version))
        (sha256
         (base32
-         "06bdc5wxvgv38fnzpyjj9p62ifpfshaangkn96gw05yxn11s46h0"))))
+         "1niaj1dh09rqrg9hrh98ddnc0f2nkyq9iizv24lcwm9gjs3w1ql0"))))
     (properties `((upstream-name . "textshaping")))
     (build-system r-build-system)
     (inputs
-     `(("freetype" ,freetype)
-       ("fribidi" ,fribidi)
-       ("harfbuzz" ,harfbuzz)
-       ("zlib" ,zlib)))
+     (list freetype fribidi harfbuzz zlib))
     (propagated-inputs
-     `(("r-cpp11" ,r-cpp11)
-       ("r-systemfonts" ,r-systemfonts)))
+     (list r-cpp11 r-systemfonts))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("r-knitr" ,r-knitr)))
+     (list pkg-config r-knitr))
     (home-page "https://github.com/r-lib/textshaping")
     (synopsis "Bindings to the HarfBuzz and Fribidi libraries for text shaping")
     (description
@@ -29311,27 +29204,22 @@ the font tool-set provided by the @code{systemfonts} package.")
 (define-public r-ragg
   (package
     (name "r-ragg")
-    (version "1.1.3")
+    (version "1.2.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "ragg" version))
        (sha256
         (base32
-         "0ppypfq1vipwjngmiwdx1sj6x7m41v3dlnbsixdlnrf2nx82kxb2"))))
+         "08dknkibmmwllycga2cp2732idsi3jfkkl5ghh6r2g2wdli1n2y1"))))
     (properties `((upstream-name . "ragg")))
     (build-system r-build-system)
     (inputs
-     `(("freetype" ,freetype)
-       ("libjpeg" ,libjpeg-turbo)
-       ("libpng" ,libpng)
-       ("libtiff" ,libtiff)
-       ("zlib" ,zlib)))
+     (list freetype libjpeg-turbo libpng libtiff zlib))
     (propagated-inputs
-     `(("r-systemfonts" ,r-systemfonts)
-       ("r-textshaping" ,r-textshaping)))
+     (list r-systemfonts r-textshaping))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://ragg.r-lib.org")
     (synopsis "Graphic devices based on AGG")
     (description
@@ -29344,24 +29232,26 @@ AGG to use as alternative to the raster devices provided through the
 (define-public r-downlit
   (package
     (name "r-downlit")
-    (version "0.2.1")
+    (version "0.4.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "downlit" version))
        (sha256
         (base32
-         "0z4fz7c9kyd9v72wl3iqs2wxspi975d6b0rgjr9lvg8a18maa9z6"))))
+         "10zvrqdpwavdy97h3q26bqh3k63z61fmc04w9vwsnvmnv8hnh3vl"))))
     (properties `((upstream-name . "downlit")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-brio" ,r-brio)
-       ("r-digest" ,r-digest)
-       ("r-evaluate" ,r-evaluate)
-       ("r-fansi" ,r-fansi)
-       ("r-rlang" ,r-rlang)
-       ("r-vctrs" ,r-vctrs)
-       ("r-yaml" ,r-yaml)))
+     (list r-brio
+           r-desc
+           r-digest
+           r-evaluate
+           r-fansi
+           r-memoise
+           r-rlang
+           r-vctrs
+           r-yaml))
     (home-page "https://downlit.r-lib.org/")
     (synopsis "Syntax highlighting and automatic linking")
     (description
@@ -29375,40 +29265,40 @@ in output to the equivalent HTML.")
 (define-public r-pkgdown
   (package
     (name "r-pkgdown")
-    (version "1.6.1")
+    (version "2.0.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "pkgdown" version))
        (sha256
         (base32
-         "1k31biyvxkv3xjc1yy3nzb9wfza3vbx97fv17nly5a6vlv7zqbs4"))))
+         "11grx7a2rz6b4kwspm7c8crjav677c22hysnp4bkwh5g8kr5nm2h"))))
     (properties `((upstream-name . "pkgdown")))
     (build-system r-build-system)
-    (inputs `(("pandoc" ,pandoc)))
-    (propagated-inputs
-     `(("r-callr" ,r-callr)
-       ("r-crayon" ,r-crayon)
-       ("r-desc" ,r-desc)
-       ("r-digest" ,r-digest)
-       ("r-downlit" ,r-downlit)
-       ("r-fs" ,r-fs)
-       ("r-httr" ,r-httr)
-       ("r-magrittr" ,r-magrittr)
-       ("r-memoise" ,r-memoise)
-       ("r-openssl" ,r-openssl)
-       ("r-purrr" ,r-purrr)
-       ("r-ragg" ,r-ragg)
-       ("r-rematch2" ,r-rematch2)
-       ("r-rlang" ,r-rlang)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("r-tibble" ,r-tibble)
-       ("r-whisker" ,r-whisker)
-       ("r-withr" ,r-withr)
-       ("r-xml2" ,r-xml2)
-       ("r-yaml" ,r-yaml)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+    (inputs (list pandoc))
+    (propagated-inputs
+     (list r-bslib
+           r-callr
+           r-crayon
+           r-desc
+           r-digest
+           r-downlit
+           r-fs
+           r-httr
+           r-jsonlite
+           r-magrittr
+           r-memoise
+           r-purrr
+           r-ragg
+           r-rlang
+           r-rmarkdown
+           r-tibble
+           r-whisker
+           r-withr
+           r-xml2
+           r-yaml))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://pkgdown.r-lib.org")
     (synopsis "Make static HTML documentation for an R package")
     (description
@@ -29421,18 +29311,18 @@ package online.")
 (define-public r-prereg
   (package
     (name "r-prereg")
-    (version "0.5.0")
+    (version "0.6.0")
     (source
       (origin
         (method url-fetch)
         (uri (cran-uri "prereg" version))
         (sha256
           (base32
-            "0bck13iiaxwpqh0rd45mp1s5d8z62ggg0wa7rmyi8a65aywiypsi"))))
+            "039nrl5cirsx1ysh214dr6xnn1h6h3f90im6k9dgmzfksxdqigpw"))))
     (properties `((upstream-name . "prereg")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-rmarkdown" ,r-rmarkdown)))
+      (list r-rmarkdown))
     (home-page "https://github.com/crsh/prereg")
     (synopsis
       "R Markdown Templates to preregister Scientific Studies")
@@ -29455,16 +29345,16 @@ preregistration documents for scientific studies in PDF format.")
     (properties `((upstream-name . "ez")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-car" ,r-car)
-        ("r-ggplot2" ,r-ggplot2)
-        ("r-lme4" ,r-lme4)
-        ("r-mass" ,r-mass)
-        ("r-matrix" ,r-matrix)
-        ("r-mgcv" ,r-mgcv)
-        ("r-plyr" ,r-plyr)
-        ("r-reshape2" ,r-reshape2)
-        ("r-scales" ,r-scales)
-        ("r-stringr" ,r-stringr)))
+      (list r-car
+            r-ggplot2
+            r-lme4
+            r-mass
+            r-matrix
+            r-mgcv
+            r-plyr
+            r-reshape2
+            r-scales
+            r-stringr))
     (home-page "https://github.com/mike-lawrence/ez")
     (synopsis "Easy Analysis and Visualization of Factorial Experiments")
     (description
@@ -29494,7 +29384,7 @@ visualized at any level of the experiment's design.")
             "1xa8q1way3gjadrjh3mv3xr4c6b4h16nd2c6lgl969difplpfz9p"))))
     (properties `((upstream-name . "qdapRegex")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-stringi" ,r-stringi)))
+    (propagated-inputs (list r-stringi))
     (home-page
       "https://trinker.github.com/qdapRegex/")
     (synopsis
@@ -29520,7 +29410,7 @@ percentages, citations, person tags, phone numbers, times, and zip codes.")
             "1mci6x65h94qiz9cwikx2inbrwkykv43zbs8abfbx416zrh2bbn9"))))
     (properties `((upstream-name . "mgsub")))
     (build-system r-build-system)
-    (native-inputs `(("r-knitr" ,r-knitr)))
+    (native-inputs (list r-knitr))
     (home-page
       "https://cran.r-project.org/package=mgsub")
     (synopsis
@@ -29545,9 +29435,7 @@ in same length matches).")
     (properties `((upstream-name . "textshape")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-data-table" ,r-data-table)
-        ("r-slam" ,r-slam)
-        ("r-stringi" ,r-stringi)))
+      (list r-data-table r-slam r-stringi))
     (home-page "https://github.com/trinker/textshape")
     (synopsis "Tools for Reshaping Text")
     (description
@@ -29568,14 +29456,14 @@ in same length matches).")
     (properties `((upstream-name . "syuzhet")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-dplyr" ,r-dplyr)
-        ("r-dtt" ,r-dtt)
-        ("r-nlp" ,r-nlp)
-        ("r-rlang" ,r-rlang)
-        ("r-textshape" ,r-textshape)
-        ("r-tidyr" ,r-tidyr)
-        ("r-zoo" ,r-zoo)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+      (list r-dplyr
+            r-dtt
+            r-nlp
+            r-rlang
+            r-textshape
+            r-tidyr
+            r-zoo))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/mjockers/syuzhet")
     (synopsis
       "Extracts Sentiment and Sentiment-Derived Plot Arcs from Text")
@@ -29606,8 +29494,7 @@ normalization.")
     (properties `((upstream-name . "lexicon")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-data-table" ,r-data-table)
-        ("r-syuzhet" ,r-syuzhet)))
+      (list r-data-table r-syuzhet))
     (home-page "https://github.com/trinker/lexicon")
     (synopsis "Lexicons for Text Analysis")
     (description
@@ -29628,7 +29515,7 @@ and word lists.")
             "1g3nmy5p8wj3ix1vp1qmkmy3dyqisrw0md8cjrx4klqkp0wqlms9"))))
     (properties `((upstream-name . "english")))
     (build-system r-build-system)
-    (native-inputs `(("r-knitr" ,r-knitr)))
+    (native-inputs (list r-knitr))
     (home-page
       "https://cran.r-project.org/package=english")
     (synopsis "Translate Integers into English")
@@ -29652,14 +29539,14 @@ indefinite article choice, \"a\" or \"an\".")
     (properties `((upstream-name . "textclean")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-data-table" ,r-data-table)
-        ("r-english" ,r-english)
-        ("r-glue" ,r-glue)
-        ("r-lexicon" ,r-lexicon)
-        ("r-mgsub" ,r-mgsub)
-        ("r-qdapregex" ,r-qdapregex)
-        ("r-stringi" ,r-stringi)
-        ("r-textshape" ,r-textshape)))
+      (list r-data-table
+            r-english
+            r-glue
+            r-lexicon
+            r-mgsub
+            r-qdapregex
+            r-stringi
+            r-textshape))
     (home-page
       "https://github.com/trinker/textclean")
     (synopsis "Text Cleaning Tools")
@@ -29687,9 +29574,7 @@ text but not always easily handled by analysis algorithms.  The
     (properties `((upstream-name . "striprtf")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-magrittr" ,r-magrittr)
-        ("r-rcpp" ,r-rcpp)
-        ("r-stringr" ,r-stringr)))
+      (list r-magrittr r-rcpp r-stringr))
     (home-page "https://github.com/kota7/striprtf")
     (synopsis "Extract Text from RTF File")
     (description
@@ -29724,11 +29609,9 @@ text but not always easily handled by analysis algorithms.  The
              (("PKG_LIBS = " all)
               (string-append all "-lgzstream ")))
              #t)))))
-    (inputs `(("zlib" ,zlib) ("gzstream" ,gzstream)))
+    (inputs (list zlib gzstream))
     (propagated-inputs
-      `(("r-data-table" ,r-data-table)
-        ("r-rcpp" ,r-rcpp)
-        ("r-tibble" ,r-tibble)))
+      (list r-data-table r-rcpp r-tibble))
     (home-page "https://gitlab.com/hrbrmstr/ndjson")
     (synopsis
       "Wicked-Fast @dfn{Streaming JSON} (ndjson) Reader")
@@ -29757,9 +29640,7 @@ structures from them.")
     (properties `((upstream-name . "streamR")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-ndjson" ,r-ndjson)
-        ("r-rcurl" ,r-rcurl)
-        ("r-rjson" ,r-rjson)))
+      (list r-ndjson r-rcurl r-rjson))
     (home-page
       "https://cran.r-project.org/package=streamR")
     (synopsis
@@ -29783,11 +29664,8 @@ user streams, and to parse the output into data frames.")
     (properties `((upstream-name . "readODS")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-cellranger" ,r-cellranger)
-        ("r-readr" ,r-readr)
-        ("r-stringi" ,r-stringi)
-        ("r-xml2" ,r-xml2)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+      (list r-cellranger r-readr r-stringi r-xml2))
+    (native-inputs (list r-knitr))
     (home-page
       "https://cran.r-project.org/package=readODS")
     (synopsis "Read and Write ODS Files")
@@ -29824,13 +29702,10 @@ Also support writing data frame into ODS file.")
              (setenv "EXTERNAL_QPDF" "1")
              #t)))))
     (inputs
-      `(("zlib" ,zlib)
-        ("qpdf" ,qpdf)))
+      (list zlib qpdf))
     (propagated-inputs
-      `(("r-askpass" ,r-askpass)
-        ("r-curl" ,r-curl)
-        ("r-rcpp" ,r-rcpp)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+      (list r-askpass r-curl r-rcpp))
+    (native-inputs (list pkg-config))
     (home-page "https://github.com/ropensci/qpdf")
     (synopsis
       "Split, Combine and Compress PDF Files")
@@ -29856,11 +29731,10 @@ data you need the @code{pdftools} package.")
     (properties `((upstream-name . "pdftools")))
     (build-system r-build-system)
     (inputs
-      `(("zlib" ,zlib)
-        ("poppler" ,poppler)))
+      (list zlib poppler))
     (propagated-inputs
-      `(("r-qpdf" ,r-qpdf) ("r-rcpp" ,r-rcpp)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+      (list r-qpdf r-rcpp))
+    (native-inputs (list pkg-config))
     (home-page
       "https://docs.ropensci.org/pdftools/")
     (synopsis
@@ -29900,8 +29774,8 @@ further processing in R.")
              (("system.file\\(\"bin\", package = \"antiword\"\\)")
               (string-append "\"" (assoc-ref inputs "antiword") "/bin\"")))
              #t)))))
-    (inputs `(("antiword" ,antiword)))
-    (propagated-inputs `(("r-sys" ,r-sys)))
+    (inputs (list antiword))
+    (propagated-inputs (list r-sys))
     (home-page
       "https://github.com/ropensci/antiword#readme")
     (synopsis
@@ -29927,20 +29801,20 @@ latter.")
     (properties `((upstream-name . "readtext")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-antiword" ,r-antiword)
-        ("r-data-table" ,r-data-table)
-        ("r-digest" ,r-digest)
-        ("r-httr" ,r-httr)
-        ("r-jsonlite" ,r-jsonlite)
-        ("r-pdftools" ,r-pdftools)
-        ("r-readods" ,r-readods)
-        ("r-readxl" ,r-readxl)
-        ("r-streamr" ,r-streamr)
-        ("r-stringi" ,r-stringi)
-        ("r-striprtf" ,r-striprtf)
-        ("r-tibble" ,r-tibble)
-        ("r-xml2" ,r-xml2)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+      (list r-antiword
+            r-data-table
+            r-digest
+            r-httr
+            r-jsonlite
+            r-pdftools
+            r-readods
+            r-readxl
+            r-streamr
+            r-stringi
+            r-striprtf
+            r-tibble
+            r-xml2))
+    (native-inputs (list r-knitr))
     (home-page
       "https://github.com/quanteda/readtext")
     (synopsis
@@ -29965,8 +29839,8 @@ and formatted text files with additional meta-data, such including @code{.csv},
             "05pv5c4k4njkr0xw6i6ksiy34hcyx2lbiqpv5gxw81yrkm0rxfyk"))))
     (properties `((upstream-name . "packcircles")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-rcpp" ,r-rcpp)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+    (propagated-inputs (list r-rcpp))
+    (native-inputs (list r-knitr))
     (home-page
       "https://github.com/mbedward/packcircles")
     (synopsis "Circle Packing")
@@ -29979,26 +29853,21 @@ and formatted text files with additional meta-data, such including @code{.csv},
 (define-public r-lwgeom
   (package
     (name "r-lwgeom")
-    (version "0.2-7")
+    (version "0.2-8")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "lwgeom" version))
        (sha256
         (base32
-         "1qgszbw03haqfjdc07ivkg8r0yd50ldkiqq27ppkaibw7mgiak5k"))))
+         "0d4b1djwrzla91mmyya2m1250mb44fzmq3d36w5mk81d4bg952pl"))))
     (properties `((upstream-name . "lwgeom")))
     (build-system r-build-system)
     (inputs
-     `(("geos" ,geos)
-       ("proj" ,proj)
-       ("sqlite" ,sqlite)
-       ("zlib" ,zlib)))
+     (list geos proj sqlite zlib))
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)
-       ("r-sf" ,r-sf)
-       ("r-units" ,r-units)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+     (list r-rcpp r-sf r-units))
+    (native-inputs (list pkg-config))
     (home-page "https://github.com/r-spatial/lwgeom/")
     (synopsis "Bindings to Selected 'liblwgeom' Functions for Simple Features")
     (description
@@ -30010,24 +29879,24 @@ light-weight geometry library used by @url{http://postgis.net/,PostGIS}.")
 (define-public r-stars
   (package
     (name "r-stars")
-    (version "0.5-3")
+    (version "0.5-5")
     (source
       (origin
         (method url-fetch)
         (uri (cran-uri "stars" version))
         (sha256
           (base32
-            "00cljaz98iy3wymabp7b47qgxdybg9jgjkw7q6da1ginmy14m524"))))
+            "0hcbzr8c7wk30qjwrvx6bflzwkjpms79pavaxawnq1h8kry5fngk"))))
     (properties `((upstream-name . "stars")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-abind" ,r-abind)
-        ("r-classint" ,r-classint)
-        ("r-lwgeom" ,r-lwgeom)
-        ("r-rlang" ,r-rlang)
-        ("r-sf" ,r-sf)
-        ("r-units" ,r-units)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+      (list r-abind
+            r-classint
+            r-lwgeom
+            r-rlang
+            r-sf
+            r-units))
+    (native-inputs (list r-knitr))
     (home-page "https://r-spatial.github.io/stars/")
     (synopsis
       "Spatiotemporal Arrays, Raster and Vector Data Cubes")
@@ -30051,15 +29920,15 @@ by @code{sf}, and @code{NetCDF} bindings by @code{ncmeta} and @code{RNetCDF}.")
     (properties `((upstream-name . "tmaptools")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-dichromat" ,r-dichromat)
-        ("r-lwgeom" ,r-lwgeom)
-        ("r-magrittr" ,r-magrittr)
-        ("r-rcolorbrewer" ,r-rcolorbrewer)
-        ("r-sf" ,r-sf)
-        ("r-stars" ,r-stars)
-        ("r-units" ,r-units)
-        ("r-viridislite" ,r-viridislite)
-        ("r-xml" ,r-xml)))
+      (list r-dichromat
+            r-lwgeom
+            r-magrittr
+            r-rcolorbrewer
+            r-sf
+            r-stars
+            r-units
+            r-viridislite
+            r-xml))
     (home-page
       "https://github.com/mtennekes/tmaptools")
     (synopsis "Thematic Map Tools")
@@ -30083,9 +29952,7 @@ supply the workflow to create thematic maps.  This package also facilitates
     (properties `((upstream-name . "rworldmap")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-fields" ,r-fields)
-        ("r-maptools" ,r-maptools)
-        ("r-sp" ,r-sp)))
+      (list r-fields r-maptools r-sp))
     (home-page
       "https://github.com/AndySouth/rworldmap/")
     (synopsis "Mapping Global Data")
@@ -30107,14 +29974,14 @@ supply the workflow to create thematic maps.  This package also facilitates
     (properties `((upstream-name . "rtweet")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-httpuv" ,r-httpuv)
-        ("r-httr" ,r-httr)
-        ("r-jsonlite" ,r-jsonlite)
-        ("r-magrittr" ,r-magrittr)
-        ("r-progress" ,r-progress)
-        ("r-rcpp" ,r-rcpp)
-        ("r-tibble" ,r-tibble)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+      (list r-httpuv
+            r-httr
+            r-jsonlite
+            r-magrittr
+            r-progress
+            r-rcpp
+            r-tibble))
+    (native-inputs (list r-knitr))
     (home-page
       "https://docs.ropensci.org/rtweet/")
     (synopsis "Collecting Twitter Data")
@@ -30158,12 +30025,8 @@ Application Program Interfaces (API)}.")
     (properties `((upstream-name . "eyelinker")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-intervals" ,r-intervals)
-        ("r-readr" ,r-readr)
-        ("r-stringi" ,r-stringi)
-        ("r-stringr" ,r-stringr)
-        ("r-tibble" ,r-tibble)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+      (list r-intervals r-readr r-stringi r-stringr r-tibble))
+    (native-inputs (list r-knitr))
     (home-page
       "https://github.com/a-hurst/eyelinker")
     (synopsis
@@ -30186,7 +30049,7 @@ Application Program Interfaces (API)}.")
             "0ab0wr8nbwn1w1j9hpwfz52lm1sw0qk93713y9k0hpm3pw9dq4jr"))))
     (properties `((upstream-name . "BTM")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-rcpp" ,r-rcpp)))
+    (propagated-inputs (list r-rcpp))
     (home-page "https://github.com/bnosac/BTM")
     (synopsis "Biterm Topic Models for Short Text")
     (description
@@ -30207,17 +30070,17 @@ BTM-WWW13.pdf}.")
 (define-public r-delaporte
   (package
     (name "r-delaporte")
-    (version "8.0.1")
+    (version "8.0.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "Delaporte" version))
        (sha256
         (base32
-         "0ijhmwclpg5czs2sl2vykcw8qj2pxy26xf6knh62rqq6p6sm43f4"))))
+         "10xsmms2jfw7x4hmgpd35dv4n4azpjzmfid6585kg6qfh2zg23g5"))))
     (properties `((upstream-name . "Delaporte")))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "https://github.com/aadler/Delaporte")
     (synopsis "Statistical functions for the Delaporte distribution")
     (description
@@ -30269,8 +30132,7 @@ package.")
     (properties `((upstream-name . "revgeo")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcurl" ,r-rcurl)
-       ("r-rjsonio" ,r-rjsonio)))
+     (list r-rcurl r-rjsonio))
     (home-page "https://cran.r-project.org/package=revgeo")
     (synopsis "Reverse geocoding")
     (description
@@ -30293,11 +30155,7 @@ minimal hassle.")
     (properties `((upstream-name . "qpcR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mass" ,r-mass)
-       ("r-matrix" ,r-matrix)
-       ("r-minpack-lm" ,r-minpack-lm)
-       ("r-rgl" ,r-rgl)
-       ("r-robustbase" ,r-robustbase)))
+     (list r-mass r-matrix r-minpack-lm r-rgl r-robustbase))
     (home-page "https://cran.r-project.org/package=qpcR")
     (synopsis "Modelling and analysis of real-time PCR data")
     (description
@@ -30309,21 +30167,19 @@ quantitative real-time polymerase chain reaction (qPCR).")
 (define-public r-textplot
   (package
     (name "r-textplot")
-    (version "0.2.0")
+    (version "0.2.1")
     (source
       (origin
         (method url-fetch)
         (uri (cran-uri "textplot" version))
         (sha256
           (base32
-            "1fhnwbcgkliq71lry21762djhlbap1qg4mgil0np46aa6619l21m"))))
+            "10nxh9axhy6kyp6f3rz7smq08yl35ydx9jx47bs7i0bmcl2kwxvl"))))
     (properties `((upstream-name . "textplot")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-data-table" ,r-data-table)
-        ("r-lattice" ,r-lattice)
-        ("r-matrix" ,r-matrix)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+      (list r-data-table r-lattice r-matrix))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/bnosac/textplot")
     (synopsis "Text Plots")
     (description
@@ -30413,8 +30269,8 @@ importance.")
             "1dhba0yfxjd5rlqsxp5a7s2hclfkla9wigsr39dlma67l6qjjmxn"))))
     (properties `((upstream-name . "elliptic")))
     (build-system r-build-system)
-    (inputs `(("pari-gp" ,pari-gp)))
-    (propagated-inputs `(("r-mass" ,r-mass)))
+    (inputs (list pari-gp))
+    (propagated-inputs (list r-mass))
     (home-page
       "https://github.com/RobinHankin/elliptic")
     (synopsis
@@ -30439,9 +30295,7 @@ complex functions.")
     (properties `((upstream-name . "hypergeo")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-contfrac" ,r-contfrac)
-        ("r-desolve" ,r-desolve)
-        ("r-elliptic" ,r-elliptic)))
+      (list r-contfrac r-desolve r-elliptic))
     (home-page
       "https://cran.r-project.org/web/packages/hypergeo/")
     (synopsis "The Gauss Hypergeometric Function")
@@ -30472,22 +30326,22 @@ complex functions.")
                 (string-append "'" (assoc-ref inputs "ffmpeg") "/bin/ffmpeg'"))))))))
     (inputs
       ;; For video output.
-      `(("ffmpeg" ,ffmpeg)))
-    (propagated-inputs
-      `(("r-ggplot2" ,r-ggplot2)
-        ("r-glue" ,r-glue)
-        ("r-plyr" ,r-plyr)
-        ("r-progress" ,r-progress)
-        ("r-rlang" ,r-rlang)
-        ("r-scales" ,r-scales)
-        ("r-stringi" ,r-stringi)
-        ("r-tweenr" ,r-tweenr)
-        ;; For GIF/SVG output. gifski is faster, but depends on Rust.
-        ("r-magick" ,r-magick)
-        ;; For HTML output.
-        ("r-base64enc" ,r-base64enc)
-        ("r-htmltools" ,r-htmltools)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+      (list ffmpeg))
+    (propagated-inputs
+      (list r-ggplot2
+            r-glue
+            r-plyr
+            r-progress
+            r-rlang
+            r-scales
+            r-stringi
+            r-tweenr
+            ;; For GIF/SVG output. gifski is faster, but depends on Rust.
+            r-magick
+            ;; For HTML output.
+            r-base64enc
+            r-htmltools))
+    (native-inputs (list r-knitr))
     (home-page "https://gganimate.com")
     (synopsis "Grammar of Animated Graphics")
     (description
@@ -30503,17 +30357,17 @@ in order to customise how it should change with time.")
 (define-public r-tzdb
  (package
     (name "r-tzdb")
-    (version "0.1.2")
+    (version "0.2.0")
     (source
       (origin
         (method url-fetch)
         (uri (cran-uri "tzdb" version))
         (sha256
           (base32
-            "1sl8nacx2i1h9vcvggiyzwd2zwvgrvfvsv3xa9072br62gkpay2c"))))
+            "1afmav7s29fb5cd920h6vrzg9cvc4jsidfalxpvhlh1b8mfr0df3"))))
     (properties `((upstream-name . "tzdb")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-cpp11" ,r-cpp11)))
+    (propagated-inputs (list r-cpp11))
     (home-page "https://github.com/r-lib/tzdb")
     (synopsis "Time Zone Database Information")
     (description
@@ -30531,32 +30385,32 @@ time zone manipulations.")
 (define-public r-vroom
   (package
     (name "r-vroom")
-    (version "1.5.5")
+    (version "1.5.7")
     (source
       (origin
         (method url-fetch)
         (uri (cran-uri "vroom" version))
         (sha256
           (base32
-            "1zk5nk9y64lspwhsasb7d2yg8i6ihyg2slys1qqa6qpi1266hi8x"))))
+            "1plz20x6s01gkkcac51lhx4r2s024pgh778ri7y25hkiiwacp1yh"))))
     (properties `((upstream-name . "vroom")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-bit64" ,r-bit64)
-        ("r-cli" ,r-cli)
-        ("r-cpp11" ,r-cpp11)
-        ("r-crayon" ,r-crayon)
-        ("r-glue" ,r-glue)
-        ("r-hms" ,r-hms)
-        ("r-lifecycle" ,r-lifecycle)
-        ("r-progress" ,r-progress)
-        ("r-rlang" ,r-rlang)
-        ("r-tibble" ,r-tibble)
-        ("r-tidyselect" ,r-tidyselect)
-        ("r-tzdb" ,r-tzdb)
-        ("r-vctrs" ,r-vctrs)
-        ("r-withr" ,r-withr)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+      (list r-bit64
+            r-cli
+            r-cpp11
+            r-crayon
+            r-glue
+            r-hms
+            r-lifecycle
+            r-progress
+            r-rlang
+            r-tibble
+            r-tidyselect
+            r-tzdb
+            r-vctrs
+            r-withr))
+    (native-inputs (list r-knitr))
     (home-page "https://vroom.r-lib.org")
     (synopsis
       "Read and Write Rectangular Text Data")
@@ -30580,9 +30434,7 @@ asynchronously from formatting.")
                 "1ijjhfy3v91fspid77rrkc5dkcb2lav37wc3f4k5lwrn24wzy5y8"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-plyr" ,r-plyr)
-       ("r-rcpp" ,r-rcpp)
-       ("r-lattice" ,r-lattice)))
+     (list r-plyr r-rcpp r-lattice))
     (home-page "https://cran.r-project.org/web/packages/Rmisc/")
     (synopsis "Ryan Miscellaneous")
     (description "The Rmisc library contains functions for data analysis and
@@ -30602,8 +30454,7 @@ utility operations.")
     (properties `((upstream-name . "webutils")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-curl" ,r-curl)
-       ("r-jsonlite" ,r-jsonlite)))
+     (list r-curl r-jsonlite))
     (home-page "https://github.com/jeroen/webutils")
     (synopsis "Utility functions for developing web applications")
     (description
@@ -30626,13 +30477,11 @@ using either @code{httpuv} or @code{Rhttpd}.")
     (properties `((upstream-name . "protolite")))
     (build-system r-build-system)
     (inputs
-     `(("protobuf" ,protobuf)))
+     (list protobuf))
     (propagated-inputs
-     `(("r-jsonlite" ,r-jsonlite)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-jsonlite r-rcpp))
     (native-inputs
-     `(("protobuf" ,protobuf)
-       ("pkg-config" ,pkg-config)))
+     (list protobuf pkg-config))
     (home-page "https://github.com/jeroen/protolite")
     (synopsis "Highly optimized protocol buffer serializers")
     (description
@@ -30649,34 +30498,34 @@ reading and writing arbitrary protocol-buffer data in R.")
 (define-public r-opencpu
   (package
     (name "r-opencpu")
-    (version "2.2.5")
+    (version "2.2.6")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "opencpu" version))
        (sha256
-        (base32 "1qlwx8iq30qfy2sh0v31pxg955bj4zs0r7v8yklbdwb3qw7kv30g"))))
+        (base32 "0cmjfhkbk4im3x8aas0q5pivlsxgqixf4f3jiindchki7g9nsw91"))))
     (properties `((upstream-name . "opencpu")))
     (build-system r-build-system)
     (inputs
-     `(("pandoc" ,pandoc)))
-    (propagated-inputs
-     `(("r-brew" ,r-brew)
-       ("r-curl" ,r-curl)
-       ("r-evaluate" ,r-evaluate)
-       ("r-httpuv" ,r-httpuv)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-knitr" ,r-knitr)
-       ("r-mime" ,r-mime)
-       ("r-openssl" ,r-openssl)
-       ("r-protolite" ,r-protolite)
-       ("r-rappdirs" ,r-rappdirs)
-       ("r-remotes" ,r-remotes)
-       ("r-sys" ,r-sys)
-       ("r-webutils" ,r-webutils)
-       ("r-zip" ,r-zip)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list pandoc))
+    (propagated-inputs
+     (list r-brew
+           r-curl
+           r-evaluate
+           r-httpuv
+           r-jsonlite
+           r-knitr
+           r-mime
+           r-openssl
+           r-protolite
+           r-rappdirs
+           r-remotes
+           r-sys
+           r-webutils
+           r-zip))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://www.opencpu.org")
     (synopsis "API for embedded scientific computing")
     (description
@@ -30692,23 +30541,21 @@ Apache2.")
 (define-public r-exactextractr
   (package
     (name "r-exactextractr")
-    (version "0.7.0")
+    (version "0.7.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "exactextractr" version))
        (sha256
         (base32
-         "1fwbl0rn0990cs2rvvwjbflp9mall6hjkindpjmdcy6qafiviid6"))))
+         "0n39dqgsfzybi9yvnpnfdyypl8c9fml80jq0wxssik2n47mvbcif"))))
     (properties `((upstream-name . "exactextractr")))
     (build-system r-build-system)
-    (inputs `(("geos" ,geos)))
+    (inputs (list geos))
     (propagated-inputs
-     `(("r-raster" ,r-raster)
-       ("r-rcpp" ,r-rcpp)
-       ("r-sf" ,r-sf)))
+     (list r-raster r-rcpp r-sf))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://isciences.gitlab.io/exactextractr/")
     (synopsis "Fast extraction from raster datasets using polygons")
     (description
@@ -30720,22 +30567,20 @@ the @code{raster} package that is suitable for extracting raster values using
 (define-public r-stringfish
   (package
     (name "r-stringfish")
-    (version "0.15.2")
+    (version "0.15.5")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "stringfish" version))
        (sha256
         (base32
-         "0m8485p1gb5z2n2g5nyr38zixw4iv8xxm7bxspxlxvx6alhn03pn"))))
+         "0ac17wl0fcpmipbvhhg5nyccg055671fnlxvnjd5l3kilx313wlx"))))
     (properties `((upstream-name . "stringfish")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)
-       ("r-rcppparallel" ,r-rcppparallel)))
+     (list r-rcpp r-rcppparallel))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("r-knitr" ,r-knitr)))
+     (list pkg-config r-knitr))
     (home-page "https://github.com/traversc/stringfish")
     (synopsis "Alternative string implementation")
     (description
@@ -30770,24 +30615,21 @@ package.")
 (define-public r-qs
   (package
     (name "r-qs")
-    (version "0.25.1")
+    (version "0.25.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "qs" version))
        (sha256
         (base32
-         "0qzrhc5jsygj813k956b00h4b6haynz44rk6a4v34fv4ywq9ba7w"))))
+         "1gswppmw8rhd7h50hffhss4c4niz0x54r9sc8pgqzy26vkjqlhpy"))))
     (properties `((upstream-name . "qs")))
     (build-system r-build-system)
-    (inputs `(("zlib" ,zlib)))
+    (inputs (list zlib))
     (propagated-inputs
-     `(("r-rapiserialize" ,r-rapiserialize)
-       ("r-rcpp" ,r-rcpp)
-       ("r-stringfish" ,r-stringfish)))
+     (list r-rapiserialize r-rcpp r-stringfish))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("r-knitr" ,r-knitr)))
+     (list pkg-config r-knitr))
     (home-page "https://github.com/traversc/qs")
     (synopsis "Quick serialization of R objects")
     (description
@@ -30798,20 +30640,20 @@ object to and from disk.")
 (define-public r-rgeos
   (package
     (name "r-rgeos")
-    (version "0.5-8")
+    (version "0.5-9")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "rgeos" version))
        (sha256
         (base32
-         "05539shf38slvq38pf92h9q57vmzn2vfqbirl3pbbvvc2j957cqd"))))
+         "1m73y0nwrdwsjrl48c4fg1kdqnh79835brnmxv9ak01ndbzcp45b"))))
     (properties `((upstream-name . "rgeos")))
     (build-system r-build-system)
     (inputs
-     `(("geos" ,geos)))
+     (list geos))
     (propagated-inputs
-     `(("r-sp" ,r-sp)))
+     (list r-sp))
     (home-page "https://cran.r-project.org/package=rgeos")
     (synopsis "Interface to Geometry Engine (GEOS)")
     (description
@@ -30833,17 +30675,17 @@ C API for topology operations on geometries.")
     (properties `((upstream-name . "tfruns")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-base64enc" ,r-base64enc)
-       ("r-config" ,r-config)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-magrittr" ,r-magrittr)
-       ("r-reticulate" ,r-reticulate)
-       ("r-rlang" ,r-rlang)
-       ("r-rstudioapi" ,r-rstudioapi)
-       ("r-tidyselect" ,r-tidyselect)
-       ("r-whisker" ,r-whisker)
-       ("r-yaml" ,r-yaml)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-base64enc
+           r-config
+           r-jsonlite
+           r-magrittr
+           r-reticulate
+           r-rlang
+           r-rstudioapi
+           r-tidyselect
+           r-whisker
+           r-yaml))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/rstudio/tfruns")
     (synopsis "Training run tools for TensorFlow")
     (description
@@ -30866,10 +30708,9 @@ runs.")
          "0fmaq1ggjyxgf2ss7qb8jk74sfwc3s1vc123pd5glclxcy1ib0j2"))))
     (properties `((upstream-name . "tfautograph")))
     (build-system r-build-system)
-    (inputs `(("tensorflow" ,tensorflow)))
+    (inputs (list tensorflow))
     (propagated-inputs
-     `(("r-backports" ,r-backports)
-       ("r-reticulate" ,r-reticulate)))
+     (list r-backports r-reticulate))
     (home-page "https://t-kalinowski.github.io/tfautograph/")
     (synopsis "Autograph R for Tensorflow")
     (description
@@ -30880,25 +30721,25 @@ Tensorflow graphs.")
 (define-public r-tensorflow
   (package
     (name "r-tensorflow")
-    (version "2.6.0")
+    (version "2.7.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "tensorflow" version))
        (sha256
         (base32
-         "1lkzxc3b5gkcg4hwqr57cysplcba6ff44qz8lbvk19kxnrhjaf9g"))))
+         "0xgm8jb1hl8564vviqys3aqwzvfbh0d43m154cj07j9spdz306ng"))))
     (properties `((upstream-name . "tensorflow")))
     (build-system r-build-system)
-    (inputs `(("tensorflow" ,tensorflow)))
+    (inputs (list tensorflow))
     (propagated-inputs
-     `(("r-config" ,r-config)
-       ("r-processx" ,r-processx)
-       ("r-reticulate" ,r-reticulate)
-       ("r-rstudioapi" ,r-rstudioapi)
-       ("r-tfautograph" ,r-tfautograph)
-       ("r-tfruns" ,r-tfruns)
-       ("r-yaml" ,r-yaml)))
+     (list r-config
+           r-processx
+           r-reticulate
+           r-rstudioapi
+           r-tfautograph
+           r-tfruns
+           r-yaml))
     (home-page "https://github.com/rstudio/tensorflow")
     (synopsis "R interface to TensorFlow")
     (description
@@ -30911,28 +30752,28 @@ between them.")
 (define-public r-keras
   (package
     (name "r-keras")
-    (version "2.6.0")
+    (version "2.7.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "keras" version))
        (sha256
         (base32
-         "1pgdcypp9x9dw7aa5ka7qqgd24jdcp3ja94jpm7j6l6j4930k5vd"))))
+         "004z9aajc0b7lw7g68ri7ndabdwbylmnlyvmziljmm29z6fzk8y5"))))
     (properties `((upstream-name . "keras")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ellipsis" ,r-ellipsis)
-       ("r-generics" ,r-generics)
-       ("r-glue" ,r-glue)
-       ("r-magrittr" ,r-magrittr)
-       ("r-r6" ,r-r6)
-       ("r-reticulate" ,r-reticulate)
-       ("r-rlang" ,r-rlang)
-       ("r-tensorflow" ,r-tensorflow)
-       ("r-tfruns" ,r-tfruns)
-       ("r-zeallot" ,r-zeallot)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-ellipsis
+           r-generics
+           r-glue
+           r-magrittr
+           r-r6
+           r-reticulate
+           r-rlang
+           r-tensorflow
+           r-tfruns
+           r-zeallot))
+    (native-inputs (list r-knitr))
     (home-page "https://keras.rstudio.com")
     (synopsis "R Interface to 'Keras'")
     (description
@@ -30957,10 +30798,9 @@ and GPU devices.")
     (properties `((upstream-name . "zzlite")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-httr" ,r-httr)
-       ("r-jsonlite" ,r-jsonlite)))
+     (list r-httr r-jsonlite))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/package=zzlite")
     (synopsis "Wrapper for the Zamzar file conversion API")
     (description
@@ -30973,18 +30813,18 @@ files, images, movie formats, etc., etc.) through an R session.")
 (define-public r-ztree
   (package
     (name "r-ztree")
-    (version "1.0.6")
+    (version "1.0.7")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "zTree" version))
        (sha256
         (base32
-         "1mywxrx6bw7dzhrdwyxbjzc8ikgvw423zycyji0jjr69cfhpmywv"))))
+         "005zk6wpchpss6865ki35yawgf668pn70163ah97rnfkhfaswm6y"))))
     (properties `((upstream-name . "zTree")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-plyr" ,r-plyr)))
+     (list r-plyr))
     (home-page "https://cran.r-project.org/package=zTree")
     (synopsis "Functions to import data from z-Tree into R")
     (description
@@ -31008,7 +30848,7 @@ carrying out economic experiments.")
      `((upstream-name . "DistributionUtils")))
     (build-system r-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/package=DistributionUtils")
     (synopsis "Distribution utilities")
     (description
@@ -31023,24 +30863,21 @@ Bessel K function.")
 (define-public r-ztpln
   (package
     (name "r-ztpln")
-    (version "0.1.1")
+    (version "0.1.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "ztpln" version))
        (sha256
         (base32
-         "18rbfdp22jaxg4nkqzj2393nhjdl1gzv4xhmr6aci76ymdixsfnl"))))
+         "1b22m72a8117yrgq5k1gzsrbx6yrsrj7bpd49lh7x3vbaz56c0wr"))))
     (properties `((upstream-name . "ztpln")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-distributionutils" ,r-distributionutils)
-       ("r-mixtools" ,r-mixtools)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcppeigen" ,r-rcppeigen)
-       ("r-rcppnumerical" ,r-rcppnumerical)))
+     (list r-distributionutils r-mixtools r-rcpp r-rcppeigen
+           r-rcppnumerical))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/mattocci27/ztpln")
     (synopsis "Zero-truncated Poisson lognormal distribution")
     (description
@@ -31063,9 +30900,9 @@ lognormal distribution and their mixture distribution.")
     (properties `((upstream-name . "zscorer")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-shiny" ,r-shiny)))
+     (list r-shiny))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/nutriverse/zscorer")
     (synopsis "Child Anthropometry z-Score Calculator")
     (description
@@ -31090,8 +30927,7 @@ Standards.")
     (properties `((upstream-name . "ZRA")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dygraphs" ,r-dygraphs)
-       ("r-forecast" ,r-forecast)))
+     (list r-dygraphs r-forecast))
     (home-page "https://cran.r-project.org/package=ZRA")
     (synopsis "Dynamic plots for time series forecasting")
     (description
@@ -31113,13 +30949,13 @@ with the dynamic plots from @code{dygraphs}.")
     (properties `((upstream-name . "rfigshare")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-httpuv" ,r-httpuv)
-       ("r-httr" ,r-httr)
-       ("r-plyr" ,r-plyr)
-       ("r-rjsonio" ,r-rjsonio)
-       ("r-xml" ,r-xml)
-       ("r-yaml" ,r-yaml)))
+     (list r-ggplot2
+           r-httpuv
+           r-httr
+           r-plyr
+           r-rjsonio
+           r-xml
+           r-yaml))
     (home-page "https://github.com/ropensci/rfigshare")
     (synopsis "R Interface to figshare")
     (description
@@ -31130,20 +30966,18 @@ to archive and assign DOIs to data, software, figures, and more.")
 (define-public r-dismo
   (package
     (name "r-dismo")
-    (version "1.3-3")
+    (version "1.3-5")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "dismo" version))
        (sha256
         (base32
-         "1jj9d78f251bxgrwbv1ycn677qnhvl40bfan12x8fhlaq4d36rgx"))))
+         "1rqf6h4imbqvs7hjd1k4my6154wg0qnmnp5byan403rcshr1jbl1"))))
     (properties `((upstream-name . "dismo")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-raster" ,r-raster)
-       ("r-rcpp" ,r-rcpp)
-       ("r-sp" ,r-sp)))
+     (list r-raster r-rcpp r-sp r-terra))
     (home-page "https://rspatial.org/raster/sdm/")
     (synopsis "Species distribution modeling")
     (description
@@ -31166,19 +31000,19 @@ of known occurrences of a species.")
     (properties `((upstream-name . "zoon")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dismo" ,r-dismo)
-       ("r-plyr" ,r-plyr)
-       ("r-randomforest" ,r-randomforest)
-       ("r-raster" ,r-raster)
-       ("r-rcurl" ,r-rcurl)
-       ("r-rfigshare" ,r-rfigshare)
-       ("r-rgdal" ,r-rgdal)
-       ("r-roxygen2" ,r-roxygen2)
-       ("r-rworldmap" ,r-rworldmap)
-       ("r-sp" ,r-sp)
-       ("r-testthat" ,r-testthat)))
+     (list r-dismo
+           r-plyr
+           r-randomforest
+           r-raster
+           r-rcurl
+           r-rfigshare
+           r-rgdal
+           r-roxygen2
+           r-rworldmap
+           r-sp
+           r-testthat))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/zoonproject/zoon")
     (synopsis "Reproducible, accessible and shareable species distribution modelling")
     (description
@@ -31190,22 +31024,18 @@ fully reproducible.")
 (define-public r-paws-common
   (package
     (name "r-paws-common")
-    (version "0.3.12")
+    (version "0.3.15")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "paws.common" version))
        (sha256
         (base32
-         "1khq1rv0yij4l0vi2x6hslnzpsd6m5n6nipfac7g3na9ah93h8i9"))))
+         "0kj5b4253j4rljkj0ibh21kh9r1yq9idz9vf1f4ag775ivsc2dk5"))))
     (properties `((upstream-name . "paws.common")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-base64enc" ,r-base64enc)
-       ("r-digest" ,r-digest)
-       ("r-httr" ,r-httr)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-xml2" ,r-xml2)))
+     (list r-base64enc r-digest r-httr r-jsonlite r-xml2))
     (home-page "https://cran.r-project.org/package=paws.common")
     (synopsis "Paws low-level Amazon Web Services API")
     (description
@@ -31231,7 +31061,7 @@ Service (S3).")
      `((upstream-name . "paws.customer.engagement")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-paws-common" ,r-paws-common)))
+     (list r-paws-common))
     (home-page "https://github.com/paws-r/paws")
     (synopsis "Amazon Web Services customer engagement services")
     (description
@@ -31255,7 +31085,7 @@ service, and more.")
      `((upstream-name . "paws.cost.management")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-paws-common" ,r-paws-common)))
+     (list r-paws-common))
     (home-page "https://github.com/paws-r/paws")
     (synopsis "Amazon Web Services cost management services")
     (description
@@ -31277,7 +31107,7 @@ more.")
     (properties `((upstream-name . "paws.developer.tools")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-paws-common" ,r-paws-common)))
+     (list r-paws-common))
     (home-page "https://github.com/paws-r/paws")
     (synopsis "Amazon Web Services developer tools services")
     (description
@@ -31299,7 +31129,7 @@ deployment, and more.")
     (properties `((upstream-name . "paws.end.user.computing")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-paws-common" ,r-paws-common)))
+     (list r-paws-common))
     (home-page "https://github.com/paws-r/paws")
     (synopsis "Amazon Web Services end user computing services")
     (description
@@ -31323,7 +31153,7 @@ and more.")
      `((upstream-name . "paws.application.integration")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-paws-common" ,r-paws-common)))
+     (list r-paws-common))
     (home-page "https://github.com/paws-r/paws")
     (synopsis "Amazon Web Services application integration services")
     (description
@@ -31347,7 +31177,7 @@ Simple Notification Service (SNS) publish/subscribe messaging, and more.")
      `((upstream-name . "paws.security.identity")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-paws-common" ,r-paws-common)))
+     (list r-paws-common))
     (home-page "https://github.com/paws-r/paws")
     (synopsis "Amazon Web Services security, identity, and compliance services")
     (description
@@ -31372,7 +31202,7 @@ more.")
      `((upstream-name . "paws.analytics")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-paws-common" ,r-paws-common)))
+     (list r-paws-common))
     (home-page "https://github.com/paws-r/paws")
     (synopsis "Amazon Web Services analytics services")
     (description
@@ -31396,7 +31226,7 @@ Elasticsearch search engine, and more.")
      `((upstream-name . "paws.machine.learning")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-paws-common" ,r-paws-common)))
+     (list r-paws-common))
     (home-page "https://github.com/paws-r/paws")
     (synopsis "Amazon Web Services machine learning services")
     (description
@@ -31420,7 +31250,7 @@ natural language processing, speech recognition, translation, and more.")
      `((upstream-name . "paws.management")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-paws-common" ,r-paws-common)))
+     (list r-paws-common))
     (home-page "https://github.com/paws-r/paws")
     (synopsis "Amazon Web Services management and governance services")
     (description
@@ -31444,7 +31274,7 @@ monitoring, Auto Scaling for automatically scaling resources, and more.")
      `((upstream-name . "paws.networking")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-paws-common" ,r-paws-common)))
+     (list r-paws-common))
     (home-page "https://github.com/paws-r/paws")
     (synopsis "Amazon Web Services networking and content delivery services")
     (description
@@ -31467,7 +31297,7 @@ CloudFront content delivery, load balancing, and more.")
     (properties `((upstream-name . "paws.database")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-paws-common" ,r-paws-common)))
+     (list r-paws-common))
     (home-page "https://github.com/paws-r/paws")
     (synopsis
      "Amazon Web Services Database Services")
@@ -31491,7 +31321,7 @@ database, and more.")
     (properties `((upstream-name . "paws.storage")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-paws-common" ,r-paws-common)))
+     (list r-paws-common))
     (home-page "https://github.com/paws-r/paws")
     (synopsis "Amazon Web Services storage services")
     (description
@@ -31513,7 +31343,7 @@ services, including Simple Storage Service (S3).")
     (properties `((upstream-name . "paws.compute")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-paws-common" ,r-paws-common)))
+     (list r-paws-common))
     (home-page "https://github.com/paws-r/paws")
     (synopsis "Amazon Web Services compute services")
     (description
@@ -31536,19 +31366,19 @@ functions-as-a-service, containers, batch processing, and more.")
     (properties `((upstream-name . "paws")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-paws-analytics" ,r-paws-analytics)
-       ("r-paws-application-integration" ,r-paws-application-integration)
-       ("r-paws-compute" ,r-paws-compute)
-       ("r-paws-cost-management" ,r-paws-cost-management)
-       ("r-paws-customer-engagement" ,r-paws-customer-engagement)
-       ("r-paws-database" ,r-paws-database)
-       ("r-paws-developer-tools" ,r-paws-developer-tools)
-       ("r-paws-end-user-computing" ,r-paws-end-user-computing)
-       ("r-paws-machine-learning" ,r-paws-machine-learning)
-       ("r-paws-management" ,r-paws-management)
-       ("r-paws-networking" ,r-paws-networking)
-       ("r-paws-security-identity" ,r-paws-security-identity)
-       ("r-paws-storage" ,r-paws-storage)))
+     (list r-paws-analytics
+           r-paws-application-integration
+           r-paws-compute
+           r-paws-cost-management
+           r-paws-customer-engagement
+           r-paws-database
+           r-paws-developer-tools
+           r-paws-end-user-computing
+           r-paws-machine-learning
+           r-paws-management
+           r-paws-networking
+           r-paws-security-identity
+           r-paws-storage))
     (home-page "https://github.com/paws-r/paws")
     (synopsis "Amazon Web Services software development kit")
     (description
@@ -31572,16 +31402,16 @@ DynamoDB NoSQL database, and Lambda functions-as-a-service.")
      `((upstream-name . "zoomGroupStats")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)
-       ("r-dplyr" ,r-dplyr)
-       ("r-lubridate" ,r-lubridate)
-       ("r-magick" ,r-magick)
-       ("r-openxlsx" ,r-openxlsx)
-       ("r-paws" ,r-paws)
-       ("r-pbapply" ,r-pbapply)
-       ("r-stringr" ,r-stringr)
-       ("r-syuzhet" ,r-syuzhet)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-data-table
+           r-dplyr
+           r-lubridate
+           r-magick
+           r-openxlsx
+           r-paws
+           r-pbapply
+           r-stringr
+           r-syuzhet))
+    (native-inputs (list r-knitr))
     (home-page "http://zoomgroupstats.org")
     (synopsis "Analyze text, audio, and video from Zoom meetings")
     (description
@@ -31626,10 +31456,9 @@ zoom/navigate any plot when called with any active plot.")
     (properties `((upstream-name . "zoolog")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rdpack" ,r-rdpack)
-       ("r-stringi" ,r-stringi)))
+     (list r-rdpack r-stringi))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://josempozo.github.io/zoolog/")
     (synopsis "Zooarchaeological analysis with log-ratios")
     (description
@@ -31681,12 +31510,12 @@ large datasets.")
     (properties `((upstream-name . "mlearning")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-class" ,r-class)
-       ("r-e1071" ,r-e1071)
-       ("r-ipred" ,r-ipred)
-       ("r-mass" ,r-mass)
-       ("r-nnet" ,r-nnet)
-       ("r-randomforest" ,r-randomforest)))
+     (list r-class
+           r-e1071
+           r-ipred
+           r-mass
+           r-nnet
+           r-randomforest))
     (home-page "http://www.sciviews.org/zooimage")
     (synopsis "Machine learning algorithms with unified interface")
     (description
@@ -31708,18 +31537,18 @@ algorithms.  Confusion matrices are provided too.")
     (properties `((upstream-name . "zooimage")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-digest" ,r-digest)
-       ("r-dt" ,r-dt)
-       ("r-filehash" ,r-filehash)
-       ("r-jpeg" ,r-jpeg)
-       ("r-mass" ,r-mass)
-       ("r-mda" ,r-mda)
-       ("r-mlearning" ,r-mlearning)
-       ("r-png" ,r-png)
-       ("r-shiny" ,r-shiny)
-       ("r-svdialogs" ,r-svdialogs)
-       ("r-svmisc" ,r-svmisc)
-       ("r-tiff" ,r-tiff)))
+     (list r-digest
+           r-dt
+           r-filehash
+           r-jpeg
+           r-mass
+           r-mda
+           r-mlearning
+           r-png
+           r-shiny
+           r-svdialogs
+           r-svmisc
+           r-tiff))
     (home-page "http://www.sciviews.org/zooimage")
     (synopsis "Analysis of numerical plankton images")
     (description
@@ -31743,8 +31572,8 @@ size spectra or biomasses, etc.).")
          "0grc378xppv0303sf4flfqz5002vq5a23nzbq4bsff41rww7dihc"))))
     (properties `((upstream-name . "zooaRch")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-ggplot2" ,r-ggplot2)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+    (propagated-inputs (list r-ggplot2))
+    (native-inputs (list r-knitr))
     (home-page
      "https://cran.r-project.org/package=zooaRch")
     (synopsis
@@ -31771,10 +31600,9 @@ and analyze zooarchaeological data.")
     (properties `((upstream-name . "zonebuilder")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-sf" ,r-sf)))
+     (list r-rcolorbrewer r-sf))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/zonebuilders/zonebuilder")
     (synopsis "Create and explore geographic zoning systems")
     (description
@@ -31799,12 +31627,8 @@ concentric rings and radial lines emanating from a central point.")
     (properties `((upstream-name . "zonator")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-raster" ,r-raster)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-reshape2" ,r-reshape2)
-       ("r-rgdal" ,r-rgdal)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-ggplot2 r-raster r-rcolorbrewer r-reshape2 r-rgdal))
+    (native-inputs (list r-knitr))
     (home-page "https://cbig.github.io/zonator/")
     (synopsis "Utilities for Zonation spatial conservation prioritization")
     (description
@@ -31838,24 +31662,24 @@ convert dates to MMWR day, week, and year and the reverse.")
 (define-public r-crul
   (package
     (name "r-crul")
-    (version "1.1.0")
+    (version "1.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "crul" version))
        (sha256
         (base32
-         "1kjsc5gkx5k5cfwlfjp2cjm9cdzq2l1m68bnrjmahw3lkz8wzdph"))))
+         "133g0skz4lifl8hm8pqdryd2m2drbrm6mdfzbbsrw8fg46di86my"))))
     (properties `((upstream-name . "crul")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-curl" ,r-curl)
-       ("r-httpcode" ,r-httpcode)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-mime" ,r-mime)
-       ("r-r6" ,r-r6)
-       ("r-urltools" ,r-urltools)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-curl
+           r-httpcode
+           r-jsonlite
+           r-mime
+           r-r6
+           r-urltools))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/ropensci/crul")
     (synopsis "HTTP client")
     (description
@@ -31864,6 +31688,110 @@ requests, and mocking HTTP requests.  The package is built on R6, and takes
 inspiration from Ruby's @code{faraday} gem.")
     (license license:expat)))
 
+(define-public r-gistr
+  (package
+    (name "r-gistr")
+    (version "0.9.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "gistr" version))
+       (sha256
+        (base32
+         "0ac9ikrdg6i8xvlma0gizvsdva46408lk7hvsgkqirhy2ljy02hp"))))
+    (properties `((upstream-name . "gistr")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-assertthat
+           r-crul
+           r-dplyr
+           r-httr
+           r-jsonlite
+           r-knitr
+           r-magrittr
+           r-rmarkdown))
+    (native-inputs (list r-knitr))
+    (home-page "https://github.com/ropensci/gistr")
+    (synopsis "Work with Gists in browser")
+    (description
+     "This package allows the user to create new Github gists, update gists
+with new files, rename files, delete files, get and delete gists, star and
+un-star them, fork them, open a gist in your default browser, get an embed
+code for a gist, list gist commits, and get rate limit information when
+authenticated.")
+    (license license:expat)))
+
+(define-public r-rbokeh
+  (package
+    (name "r-rbokeh")
+    (version "0.5.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "rbokeh" version))
+       (sha256
+        (base32
+         "1h2fpzqf17pw9d09r1g1iyxsj5qma4fsk8vnar7f1z4fjyypvi6q"))
+       (snippet
+        '(for-each delete-file '("inst/htmlwidgets/lib/bokehjs/bokeh-widgets.min.js"
+                                 "inst/htmlwidgets/lib/bokehjs/bokeh.min.js")))))
+    (properties `((upstream-name . "rbokeh")))
+    (build-system r-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'process-javascript
+           (lambda* (#:key inputs #:allow-other-keys)
+             (with-directory-excursion "inst/htmlwidgets/lib/bokehjs"
+               (let ((mapping
+                      `((,(assoc-ref inputs "js-bokeh-widgets")
+                         . "bokeh-widgets.min.js")
+                        (,(assoc-ref inputs "js-bokeh")
+                         . "bokeh.min.js"))))
+                 (for-each (lambda (source target)
+                             (format #true "Processing ~a --> ~a~%"
+                                     source target)
+                             (invoke "esbuild" source "--minify"
+                                     (string-append "--outfile=" target)))
+                           (map car mapping)
+                           (map cdr mapping)))))))))
+    (propagated-inputs
+     (list r-digest
+           r-gistr
+           r-hexbin
+           r-htmlwidgets
+           r-jsonlite
+           r-lazyeval
+           r-magrittr
+           r-maps
+           r-pryr
+           r-scales))
+    ;; Version 0.12.15 is mentioned in lib/htmlwidgets/rbokeh.yaml.
+    (native-inputs
+     `(("esbuild" ,esbuild)
+       ("js-bokeh-widgets"
+        ,(origin
+           (method url-fetch)
+           (uri "https://unpkg.com/bokehjs@0.12.15/build/js/bokeh-widgets.js")
+           (sha256
+            (base32
+             "07v9lrkfcbdznpb10qqwi4m660zp65g85vlnfw7kn83zmkxkhhxy"))))
+       ("js-bokeh"
+        ,(origin
+           (method url-fetch)
+           (uri "https://unpkg.com/bokehjs@0.12.15/build/js/bokeh.js")
+           (sha256
+            (base32
+             "1pq0059aad7d2jv50nv9449p3w0gbkxkl0mhblc76m5d9qjqav2q"))))
+       ("r-knitr" ,r-knitr)))
+    (home-page "https://cran.r-project.org/web/packages/rbokeh/")
+    (synopsis "R interface for the Bokeh visualization library")
+    (description
+     "This package provides a native R plotting library that provides a
+flexible declarative interface for creating interactive web-based graphics,
+backed by the @url{https://bokeh.pydata.org/, Bokeh visualization library}.")
+    (license license:expat)))
+
 (define-public r-fauxpas
   (package
     (name "r-fauxpas")
@@ -31878,11 +31806,9 @@ inspiration from Ruby's @code{faraday} gem.")
     (properties `((upstream-name . "fauxpas")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-httpcode" ,r-httpcode)
-       ("r-r6" ,r-r6)
-       ("r-whisker" ,r-whisker)))
+     (list r-httpcode r-r6 r-whisker))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://docs.ropensci.org/fauxpas")
     (synopsis "HTTP error helpers")
     (description
@@ -31908,14 +31834,14 @@ configuration of status code, short description, and verbose message.")
     (properties `((upstream-name . "webmockr")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-base64enc" ,r-base64enc)
-       ("r-crul" ,r-crul)
-       ("r-curl" ,r-curl)
-       ("r-fauxpas" ,r-fauxpas)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-magrittr" ,r-magrittr)
-       ("r-r6" ,r-r6)
-       ("r-urltools" ,r-urltools)))
+     (list r-base64enc
+           r-crul
+           r-curl
+           r-fauxpas
+           r-jsonlite
+           r-magrittr
+           r-r6
+           r-urltools))
     (home-page "https://github.com/ropensci/webmockr")
     (synopsis "Stubbing and setting expectations on HTTP Requests")
     (description
@@ -31940,9 +31866,9 @@ tests or outside of a testing context.")
     (properties `((upstream-name . "mockery")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-testthat" ,r-testthat)))
+     (list r-testthat))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/jfiksel/mockery")
     (synopsis "Mocking library for R")
     (description
@@ -31968,17 +31894,17 @@ present in the @code{testthat} package.")
     (properties `((upstream-name . "zoltr")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-base64url" ,r-base64url)
-       ("r-dplyr" ,r-dplyr)
-       ("r-httr" ,r-httr)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-magrittr" ,r-magrittr)
-       ("r-mmwrweek" ,r-mmwrweek)
-       ("r-mockery" ,r-mockery)
-       ("r-readr" ,r-readr)
-       ("r-rlang" ,r-rlang)
-       ("r-webmockr" ,r-webmockr)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-base64url
+           r-dplyr
+           r-httr
+           r-jsonlite
+           r-magrittr
+           r-mmwrweek
+           r-mockery
+           r-readr
+           r-rlang
+           r-webmockr))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/reichlab/zoltr")
     (synopsis "Interface to the Zoltar forecast repository API")
     (description
@@ -32005,10 +31931,7 @@ deleting and uploading forecast data, and downloading scores.")
     (properties `((upstream-name . "zoib")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-abind" ,r-abind)
-       ("r-coda" ,r-coda)
-       ("r-formula" ,r-formula)
-       ("r-rjags" ,r-rjags)))
+     (list r-abind r-coda r-formula r-rjags))
     (home-page "https://www.r-project.org")
     (synopsis "Bayesian inference for beta regression")
     (description
@@ -32020,16 +31943,16 @@ Monte Carlo approach implemented in JAGS.")
 (define-public r-logger
   (package
     (name "r-logger")
-    (version "0.2.1")
+    (version "0.2.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "logger" version))
        (sha256
-        (base32 "0p607da2rdrfj9sbrrq9hpqp26nyj3imd1590c13bxskqfhv0sz8"))))
+        (base32 "08kym5i5fvbf5xhh9qdszp4jdgyc7j7zpnwzy68wabqz73aff6sg"))))
     (properties `((upstream-name . "logger")))
     (build-system r-build-system)
-    (native-inputs `(("r-knitr" ,r-knitr)))
+    (native-inputs (list r-knitr))
     (home-page "https://daroczig.github.io/logger/")
     (synopsis "Lightweight and flexible logging utility")
     (description
@@ -32038,27 +31961,105 @@ Python module, this utility provides a flexible and extensible way of
 formatting and delivering log messages with low overhead.")
     (license license:agpl3+)))
 
+(define-public r-fasterize
+  (package
+    (name "r-fasterize")
+    (version "1.0.3")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (cran-uri "fasterize" version))
+        (sha256
+          (base32 "10bzl77c1b9jhcn1xp467qzp2n8c7s3wpxn53qjh1nwvbri5kd32"))))
+    (properties `((upstream-name . "fasterize")))
+    (build-system r-build-system)
+    (propagated-inputs
+      (list r-raster r-rcpp r-rcpparmadillo r-sp))
+    (native-inputs (list r-knitr))
+    (home-page "https://github.com/ecohealthalliance/fasterize")
+    (synopsis "Fast Polygon to Raster Conversion")
+    (description
+"This package provides a drop-in replacement for @code{rasterize} from
+the @code{raster} package that takes sf-type objects, and is much faster.
+There is support for the main options provided by the @code{rasterize}
+function, including setting the field used and background value, and
+options for aggregating multi-layer rasters.")
+    (license license:expat)))
+
+(define-public r-bien
+  (package
+    (name "r-bien")
+    (version "1.2.4")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (cran-uri "BIEN" version))
+        (sha256
+          (base32 "1dagrs54ciagm2mgqrvxl6k2akahr0qk63ifxqnks7iljm0x1gw6"))))
+    (properties `((upstream-name . "BIEN")))
+    (build-system r-build-system)
+    (native-inputs
+      (list r-knitr r-testthat))
+    (propagated-inputs
+      (list r-ape
+            r-dbi
+            r-doparallel
+            r-fasterize
+            r-foreach
+            r-raster
+            r-rgdal
+            r-rgeos
+            r-rpostgresql
+            r-sf
+            r-sp))
+    (home-page "https://cran.r-project.org/package=BIEN")
+    (synopsis "Tools for accessing the BIEN database")
+    (description
+     "This package provides tools for accessing the Botanical Information and
+Ecology Network (BIEN) database.  The BIEN database contains cleaned and
+standardized botanical data including occurrence, trait, plot and taxonomic
+data.  This package provides functions that query the BIEN database by
+constructing and executing optimized SQL queries.")
+    (license license:expat)))
+
+(define-public r-varhandle
+  (package
+    (name "r-varhandle")
+    (version "2.0.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "varhandle" version))
+       (sha256
+        (base32 "1l42d0s6fbjjc9l28a2m3myxkrx2c0p0b9yj8wjjjgilw19yc3lv"))))
+    (properties `((upstream-name . "varhandle")))
+    (build-system r-build-system)
+    (home-page "https://bitbucket.org/mehrad_mahmoudian/varhandle")
+    (synopsis "Functions for robust variable handling")
+    (description
+     "This package contains some functions to help users (especially data
+explorers) to make more sense of their variables and take the most out of
+variables and hardware resources.  Functions in this package are supposed to
+be efficient and easy to use.")
+    (license license:gpl2+)))
+
 (define-public r-ggh4x
   (package
     (name "r-ggh4x")
-    (version "0.2.0")
+    (version "0.2.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "ggh4x" version))
        (sha256
         (base32
-         "0gv9ckkdqbcjknzsv8h3955wnikawdfypr279v74hvwyq86af29r"))))
+         "1r49yfm5fqv5s7jb92ad6rf8hd9plcry6f500czjhnhhrp16cqfp"))))
     (properties `((upstream-name . "ggh4x")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-gtable" ,r-gtable)
-       ("r-rlang" ,r-rlang)
-       ("r-scales" ,r-scales)
-       ("r-vctrs" ,r-vctrs)))
+     (list r-ggplot2 r-gtable r-rlang r-scales r-vctrs))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/teunbrand/ggh4x")
     (synopsis "Extension for ggplot2")
     (description "This package is a @code{ggplot2} extension.  It provides some
diff --git a/gnu/packages/crates-graphics.scm b/gnu/packages/crates-graphics.scm
index e3be9bcdcd..dbd3607dc4 100644
--- a/gnu/packages/crates-graphics.scm
+++ b/gnu/packages/crates-graphics.scm
@@ -11,6 +11,7 @@
 ;;; Copyright © 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2020 Antoine Côté <antoine.cote@posteo.net>
 ;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021 Zheng Junjie <873216071@qq.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -96,7 +97,7 @@ shapes, lines and text to buffers.")
        #:cargo-development-inputs
        (("rust-smithay-client-toolkit" ,rust-smithay-client-toolkit-0.4))))
     (inputs
-     `(("wayland" ,wayland)))))
+     (list wayland))))
 
 (define-public rust-ansi-colours-1
   (package
@@ -137,7 +138,7 @@ approximated by values supported by the terminal.")
       (origin
         (method url-fetch)
         (uri (crate-uri "ansi_term" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1ljmkbilxgmhavxvxqa7qvm6f3fjggi7q2l3a72q9x0cxjvrnanm"))))
@@ -166,7 +167,7 @@ text or blue underlined text, on ANSI terminals.")
       (origin
         (method url-fetch)
         (uri (crate-uri "ansi_term" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "16wpvrghvd0353584i1idnsgm0r3vchg8fyrm0x8ayv1rgvbljgf"))))
@@ -191,10 +192,10 @@ text or blue underlined text, on ANSI terminals.")
          "1xif1bh938qpfc3d0f9xgidibpm65xix11w9gszwqnia00q7rb13"))))
     (arguments `())))
 
-(define-public rust-aom-sys-0.2
+(define-public rust-aom-sys-0.3
   (package
     (name "rust-aom-sys")
-    (version "0.2.1")
+    (version "0.3.0")
     (source
       (origin
         (method url-fetch)
@@ -203,49 +204,21 @@ text or blue underlined text, on ANSI terminals.")
           (string-append name "-" version ".tar.gz"))
         (sha256
           (base32
-            "03a0xhaafjn0hlpcf9ba73hv557m0jqnmj9wl57wzrcnka96zvgj"))))
+            "0dhikfl7l5nacspajbllbhhysad3vl845cpfplqgm5mf67nmx9w8"))))
     (build-system cargo-build-system)
     (arguments
       `(#:cargo-inputs
         (("rust-bindgen" ,rust-bindgen-0.54)
          ("rust-metadeps" ,rust-metadeps-1))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libaom" ,libaom)
-       ("clang" ,clang)
-       ("llvm" ,llvm)))
+     (list libaom clang llvm))
     (home-page "https://github.com/rust-av/aom-rs")
     (synopsis "FFI bindings to aom")
     (description "This package provides FFI bindings to aom.")
     (license license:expat)))
 
-(define-public rust-aom-sys-0.1
-  (package
-    (inherit rust-aom-sys-0.2)
-    (name "rust-aom-sys")
-    (version "0.1.4")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (crate-uri "aom-sys" version))
-        (file-name
-         (string-append name "-" version ".tar.gz"))
-        (sha256
-         (base32
-          "1bqcpkycv1d67r6jcl9npfbw6rkl829rdq9w6vlpb0rjqxp0xzsn"))))
-    (build-system cargo-build-system)
-    (arguments
-     `(#:cargo-inputs
-       (("rust-bindgen" ,rust-bindgen-0.53)
-        ("rust-metadeps" ,rust-metadeps-1))))
-    (native-inputs
-     `(("pkg-config" ,pkg-config)))
-    (inputs
-     `(("libaom" ,libaom)
-       ("clang" ,clang)
-       ("llvm" ,llvm)))))
-
 (define-public rust-ascii-canvas-2
   (package
     (name "rust-ascii-canvas")
@@ -573,39 +546,79 @@ types.")
 and iOS.")
     (license license:expat)))
 
+(define-public rust-dav1d-0.6
+  (package
+    (name "rust-dav1d")
+    (version "0.6.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "dav1d" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0pn6r1a9qfrpg2xwc7ci2iddvnzxb17ddca0bwymgi839cxc2chl"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-dav1d-sys" ,rust-dav1d-sys-0.3))))
+    (home-page "https://github.com/rust-av/dav1d-rs")
+    (synopsis "libdav1d bindings in Rust")
+    (description "This package provides libdav1d bindings in Rust.")
+    (license license:expat)))
+
 (define-public rust-dav1d-sys-0.3
   (package
     (name "rust-dav1d-sys")
-    (version "0.3.2")
+    (version "0.3.4")
     (source
-      (origin
-        (method url-fetch)
-        (uri (crate-uri "dav1d-sys" version))
-        (file-name
-         (string-append name "-" version ".tar.gz"))
-        (sha256
-         (base32
-          "1jdxhnlxcml6jd67lx78ifzkn1xm18zfk4li7vjdh3fa61i073kx"))))
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "dav1d-sys" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "020lla2l703iy69gbksq18snj2b1sp7vmjf39qqykd4242d4msr5"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
-       (("rust-bindgen" ,rust-bindgen-0.54)
-        ("rust-metadeps" ,rust-metadeps-1))))
+       (("rust-bindgen" ,rust-bindgen-0.58)
+        ("rust-system-deps" ,rust-system-deps-3))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("dav1d" ,dav1d)
-       ("clang" ,clang)
-       ("llvm" ,llvm)))
+     (list dav1d clang llvm))
     (home-page "https://github.com/rust-av/dav1d-rs")
     (synopsis "FFI bindings to dav1d")
     (description "This package provides FFI bindings to dav1d.")
     (license license:expat)))
 
-(define-public rust-euclid-0.20
+(define-public rust-dcv-color-primitives-0.1
+  (package
+    (name "rust-dcv-color-primitives")
+    (version "0.1.16")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "dcv-color-primitives" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0yrm1qipdmadynhjgz1bvdh42ph9azvwg8v43c8ywr8vlx9qvaq2"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-wasm-bindgen" ,rust-wasm-bindgen-0.2))))
+    (home-page "https://github.com/aws/dcv-color-primitives")
+    (synopsis "Rust library to perform image color model conversion")
+    (description "This package is a Rust library to perform image color model
+conversion.")
+    (license license:expat)))
+
+(define-public rust-euclid-0.22
   (package
     (name "rust-euclid")
-    (version "0.20.10")
+    (version "0.22.6")
     (source
      (origin
        (method url-fetch)
@@ -614,11 +627,12 @@ and iOS.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "0c3hbl0kvc53k6nws0v9d46hi0giza1j079sqx2bgl4wfw65nshc"))))
+         "102blw7ljphi7i2xg435z0bb0a4npmwwbgyfinqxg1m0af2q55ns"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
-       (("rust-mint" ,rust-mint-0.5)
+       (("rust-arbitrary" ,rust-arbitrary-1)
+        ("rust-mint" ,rust-mint-0.5)
         ("rust-num-traits" ,rust-num-traits-0.2)
         ("rust-serde" ,rust-serde-1))
        #:cargo-development-inputs
@@ -780,14 +794,14 @@ EUI-64, also known as MAC-48 media access control addresses.")
 (define-public rust-gif-0.11
   (package
     (name "rust-gif")
-    (version "0.11.1")
+    (version "0.11.3")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "gif" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1i4n9fwg3zrp07pi5zsgyza2gl8lqnap6fj6875lfy121xbbmvq2"))))
+        (base32 "0nsfd5qvp69z8kn17ziiq8zv4mclfycyxppf5k9fm2h8g1z1i9y3"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -983,8 +997,7 @@ EUI-64, also known as MAC-48 media access control addresses.")
         ("rust-winapi" ,rust-winapi-0.3)
         ("rust-winit" ,rust-winit-0.24))))
     (inputs
-     `(("rust-wayland-client" ,rust-wayland-client-0.28)
-       ("rust-wayland-egl" ,rust-wayland-egl-0.28)))
+     (list rust-wayland-client-0.28 rust-wayland-egl-0.28))
     (home-page "https://github.com/tomaka/glutin")
     (synopsis "Cross-platform OpenGL context provider")
     (description "This package provides an OpenGL context provider.")
@@ -1220,14 +1233,14 @@ PATH.")
 (define-public rust-image-0.23
   (package
     (name "rust-image")
-    (version "0.23.12")
+    (version "0.23.14")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "image" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1dg9z5sbc389spp7pm23n2b1k0gdd8hjdb8hhsp3k3npx9vl1q3w"))))
+        (base32 "18gn2f7xp30pf9aqka877knlq308khxqiwjvsccvzaa4f9zcpzr4"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -1369,7 +1382,7 @@ pixel buffers with width, height and stride.")
 (define-public rust-jpeg-decoder-0.1
   (package
     (name "rust-jpeg-decoder")
-    (version "0.1.18")
+    (version "0.1.22")
     (source
      (origin
        (method url-fetch)
@@ -1377,8 +1390,7 @@ pixel buffers with width, height and stride.")
        (file-name
         (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32
-         "0lc428qgffh2a1agkq0p26mvf9rjaiswpywy5883j99mqypg0mh2"))))
+        (base32 "1wnh0bmmswpgwhgmlizz545x8334nlbmkq8imy9k224ri3am7792"))))
     (build-system cargo-build-system)
     (arguments
      `(#:tests? #f      ; Some test files missing.
@@ -1424,10 +1436,33 @@ pixel buffers with width, height and stride.")
 graphics and video games.")
     (license license:expat)))
 
-(define-public rust-lyon-geom-0.14
+(define-public rust-lyon-extra-0.17
+  (package
+    (name "rust-lyon-extra")
+    (version "0.17.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "lyon_extra" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32 "10n8h48a363qa66byqfkg164542p97v5rrnb33gqhggah739nwm0"))))
+    (build-system cargo-build-system)
+    (arguments
+      `(#:skip-build?
+        #t
+        #:cargo-inputs
+        (("rust-lyon-path" ,rust-lyon-path-0.17)
+         ("rust-lyon-svg" ,rust-lyon-svg-0.17))))
+    (home-page "https://github.com/nical/lyon")
+    (synopsis "Optional utilities for the lyon crate")
+    (description "This package provides optional utilities for the lyon crate.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-lyon-geom-0.17
   (package
     (name "rust-lyon-geom")
-    (version "0.14.1")
+    (version "0.17.6")
     (source
       (origin
         (method url-fetch)
@@ -1436,25 +1471,25 @@ graphics and video games.")
          (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
-          "178z4cqqmyw0rsabbgx9phkjxjzcnq0604062lqjlq87k063216a"))))
+          "12al92qsh0f8ci3qf3533r4y5hxzzyfp972vm4wqzz9bq9vwx6ff"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-num-traits" ,rust-num-traits-0.2)
-        ("rust-euclid" ,rust-euclid-0.20)
-        ("rust-arrayvec" ,rust-arrayvec-0.4)
-        ("rust-serde" ,rust-serde-1))))
+        (("rust-arrayvec" ,rust-arrayvec-0.5)
+         ("rust-euclid" ,rust-euclid-0.22)
+         ("rust-num-traits" ,rust-num-traits-0.2)
+         ("rust-serde" ,rust-serde-1))))
     (home-page "https://github.com/nical/lyon")
     (synopsis "2D graphics rendering on the GPU using tessellation")
     (description
      "This package provides 2D graphics rendering on the GPU using tessellation.")
     (license (list license:expat license:asl2.0))))
 
-(define-public rust-lyon-path-0.14
+(define-public rust-lyon-path-0.17
   (package
     (name "rust-lyon-path")
-    (version "0.14.0")
+    (version "0.17.7")
     (source
       (origin
         (method url-fetch)
@@ -1463,12 +1498,12 @@ graphics and video games.")
          (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
-          "0qk8x46w0sf6j04l6gvhgn9kr4ymcqkmkh67w8wqahm54jn5gjqb"))))
+          "1h7vbfaanf3x7xch6md4q4ja3xmvsi41n7d6ga40vjk7yzymj2jv"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-lyon-geom" ,rust-lyon-geom-0.14)
+       (("rust-lyon-geom" ,rust-lyon-geom-0.17)
         ("rust-serde" ,rust-serde-1))))
     (home-page "https://github.com/nical/lyon")
     (synopsis "Types and utilities to store, build and iterate over 2D paths")
@@ -1476,6 +1511,54 @@ graphics and video games.")
      "Types and utilities to store, build and iterate over 2D paths.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-lyon-svg-0.17
+  (package
+    (name "rust-lyon-svg")
+    (version "0.17.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "lyon_svg" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32 "0fin6h9vwgz7gi2a1b0j9bp8a1aval2lvha1kzy7iijm4kgdcj3d"))))
+    (build-system cargo-build-system)
+    (arguments
+      `(#:skip-build?
+        #t
+        #:cargo-inputs
+        (("rust-lyon-path" ,rust-lyon-path-0.17)
+         ("rust-svgtypes" ,rust-svgtypes-0.5))))
+    (home-page "https://github.com/nical/lyon")
+    (synopsis "SVG helpers for the lyon crates")
+    (description "This package provides SVG helpers for the lyon crates.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-lyon-tessellation-0.17
+  (package
+    (name "rust-lyon-tessellation")
+    (version "0.17.10")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "lyon-tessellation" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32 "0q2pccjszda26asylnvhwsil8wvsprfjazrqdzj4i033s26y0c3j"))))
+    (build-system cargo-build-system)
+    (arguments
+      `(#:cargo-inputs
+        (("rust-float-next-after" ,rust-float-next-after-0.1)
+         ("rust-lyon-path" ,rust-lyon-path-0.17)
+         ("rust-serde" ,rust-serde-1))
+        #:cargo-development-inputs
+        (("rust-lyon-extra" ,rust-lyon-extra-0.17))))
+    (home-page "https://github.com/nical/lyon")
+    (synopsis "Low level path tessellation library")
+    (description
+      "This package provides a low level path tessellation library.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-osmesa-sys-0.1
   (package
     (name "rust-osmesa-sys")
@@ -1593,7 +1676,7 @@ nicely with Piston libraries.")
     (home-page
       "https://github.com/PistonDevelopers/graphics_api_version")
     (synopsis
-      "A library for storing graphics API versions")
+      "Library for storing graphics API versions")
     (description
       "This package provides a library for storing graphics API versions")
     (license license:expat)))
@@ -1636,7 +1719,7 @@ nicely with Piston libraries.")
     (arguments `(#:skip-build? #t))
     (home-page
       "https://github.com/pistondevelopers/texture")
-    (synopsis "A generic library for textures")
+    (synopsis "Generic library for textures")
     (description
       "This package provides a generic library for textures")
     (license license:expat)))
@@ -1995,7 +2078,7 @@ interactive applications.")
        #:cargo-development-inputs
        (("rust-avif-parse" ,rust-avif-parse-0.13))))
     (native-inputs
-     `(("nasm" ,nasm)))                 ;for building rav1e
+     (list nasm))                 ;for building rav1e
     (home-page "https://lib.rs/ravif")
     (synopsis "Library for encoding images in AVIF format")
     (description "This package is a rav1e-based pure Rust library for encoding
@@ -2055,7 +2138,7 @@ images in AVIF format.")
      (origin
        (method url-fetch)
        (uri (crate-uri "rgb" version))
-       (file-name (string-append name "-" version ".crate"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
          "1lrv3x5h1lvdzg1qqr8aiysz978m35zpjdkyicnvkarnh8zkqzr8"))))
@@ -2212,7 +2295,7 @@ applications.")
        #:cargo-development-inputs
        (("rust-andrew" ,rust-andrew-0.2))))
     (inputs
-     `(("wayland" ,wayland)))))
+     (list wayland))))
 
 (define-public rust-tiff-0.6
   (package
@@ -2326,14 +2409,14 @@ applications.")
        #:cargo-development-inputs
        (("rust-tempfile" ,rust-tempfile-3))))
     (inputs
-     `(("rust-bitflags" ,rust-bitflags-1)
-       ("rust-downcast-rs" ,rust-downcast-rs-1)
-       ("rust-libc" ,rust-libc-0.2)
-       ("rust-nix" ,rust-nix-0.18)
-       ("rust-scoped-tls" ,rust-scoped-tls-1)
-       ("rust-wayland-commons" ,rust-wayland-commons-0.28)
-       ("rust-wayland-scanner" ,rust-wayland-scanner-0.28)
-       ("rust-wayland-sys" ,rust-wayland-sys-0.28)))
+     (list rust-bitflags-1
+           rust-downcast-rs-1
+           rust-libc-0.2
+           rust-nix-0.18
+           rust-scoped-tls-1
+           rust-wayland-commons-0.28
+           rust-wayland-scanner-0.28
+           rust-wayland-sys-0.28))
     (home-page "https://github.com/smithay/wayland-rs")
     (synopsis
      "Rust bindings to the standard C implementation of the wayland protocol")
@@ -2420,10 +2503,8 @@ the wayland protocol, client side.")
         ("rust-once-cell" ,rust-once-cell-1)
         ("rust-smallvec" ,rust-smallvec-1))))
     (inputs
-     `(("rust-nix" ,rust-nix-0.18)
-       ("rust-once-cell" ,rust-once-cell-1)
-       ("rust-smallvec" ,rust-smallvec-1)
-       ("rust-wayland-sys" ,rust-wayland-sys-0.28)))
+     (list rust-nix-0.18 rust-once-cell-1 rust-smallvec-1
+           rust-wayland-sys-0.28))
     (home-page "https://github.com/smithay/wayland-rs")
     (synopsis "Types and structures used by wayland-client and wayland-server")
     (description
@@ -2488,9 +2569,7 @@ and wayland-server.")
        (("rust-nix" ,rust-nix-0.18)
         ("rust-xcursor" ,rust-xcursor-0.3))))
     (inputs
-     `(("rust-nix" ,rust-nix-0.18)
-       ("rust-wayland-client" ,rust-wayland-client-0.28)
-       ("rust-xcursor" ,rust-xcursor-0.3)))
+     (list rust-nix-0.18 rust-wayland-client-0.28 rust-xcursor-0.3))
     (home-page "https://github.com/smithay/wayland-rs")
     (synopsis "Bindings to libwayland-cursor")
     (description
@@ -2512,11 +2591,10 @@ properly display animated cursors.")
         (base32 "1xd7iap0x4sidmy9dv02cdnxjhnbk9li7r7f39x9cg0i8xs50ly6"))))
     (build-system cargo-build-system)
     (inputs
-     `(("rust-wayland-client" ,rust-wayland-client-0.28)
-       ("rust-wayland-sys" ,rust-wayland-sys-0.28)))
+     (list rust-wayland-client-0.28 rust-wayland-sys-0.28))
     ;; For the PKG_CONFIG_PATH environment variable.
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/smithay/wayland-rs")
     (synopsis "Bindings to libwayland-egl")
     (description
@@ -2542,11 +2620,9 @@ initializing an OpenGL or Vulkan context.")
      `(#:cargo-inputs
        (("rust-bitflags" ,rust-bitflags-1))))
     (inputs
-     `(("rust-bitflags" ,rust-bitflags-1)
-       ("rust-wayland-client" ,rust-wayland-client-0.28)
-       ("rust-wayland-commons" ,rust-wayland-commons-0.28)
-       ("rust-wayland-scanner" ,rust-wayland-scanner-0.28)
-       ("rust-wayland-server" ,rust-wayland-server-0.28)))
+     (list rust-bitflags-1 rust-wayland-client-0.28
+           rust-wayland-commons-0.28 rust-wayland-scanner-0.28
+           rust-wayland-server-0.28))
     (home-page "https://github.com/smithay/wayland-rs")
     (synopsis "Generated API for the officials Wayland protocol extensions")
     (description
@@ -2614,9 +2690,7 @@ extensions.")
         (base32 "0g8ky63qk27in7zajycj3fyydsxlj19hanfcvr8d7z5kcxbvl43h"))))
     (build-system cargo-build-system)
     (inputs
-     `(("rust-proc-macro2" ,rust-proc-macro2-1)
-       ("rust-quote" ,rust-quote-1)
-       ("rust-xml-rs" ,rust-xml-rs-0.8)))
+     (list rust-proc-macro2-1 rust-quote-1 rust-xml-rs-0.8))
     (home-page "https://github.com/smithay/wayland-rs")
     (synopsis "Generate Rust APIs from XML Wayland protocol files")
     (description
@@ -2684,16 +2758,16 @@ wayland-client crate for usable bindings.")
         ("rust-parking-lot" ,rust-parking-lot-0.11)
         ("rust-scoped-tls" ,rust-scoped-tls-1))))
     (inputs
-     `(("rust-bitflags" ,rust-bitflags-1)
-       ("rust-downcast-rs" ,rust-downcast-rs-1)
-       ("rust-lazy-static" ,rust-lazy-static-1)
-       ("rust-libc" ,rust-libc-0.2)
-       ("rust-nix" ,rust-nix-0.18)
-       ("rust-parking-lot" ,rust-parking-lot-0.11)
-       ("rust-scoped-tls" ,rust-scoped-tls-1)
-       ("rust-wayland-commons" ,rust-wayland-commons-0.28)
-       ("rust-wayland-scanner" ,rust-wayland-scanner-0.28)
-       ("rust-wayland-sys" ,rust-wayland-sys-0.28)))
+     (list rust-bitflags-1
+           rust-downcast-rs-1
+           rust-lazy-static-1
+           rust-libc-0.2
+           rust-nix-0.18
+           rust-parking-lot-0.11
+           rust-scoped-tls-1
+           rust-wayland-commons-0.28
+           rust-wayland-scanner-0.28
+           rust-wayland-sys-0.28))
     (home-page "https://github.com/smithay/wayland-rs")
     (synopsis
      "Bindings to the standard C implementation of the wayland protocol")
@@ -2784,12 +2858,10 @@ the wayland protocol, server side.")
                   (string-append libwayland "/lib/" shared-lib)))
                #t))))))
     (inputs
-     `(("rust-dlib" ,rust-dlib-0.4)
-       ("rust-lazy-static" ,rust-lazy-static-1)
-       ("rust-libc" ,rust-libc-0.2)
-       ("rust-pkg-config" ,rust-pkg-config-0.3)))
+     (list rust-dlib-0.4 rust-lazy-static-1 rust-libc-0.2
+           rust-pkg-config-0.3))
     (propagated-inputs
-     `(("wayland" ,wayland)))
+     (list wayland))
     (home-page "https://github.com/smithay/wayland-rs")
     (synopsis "FFI bindings to the various @file{libwayland-*.so} libraries")
     (description
@@ -2879,7 +2951,7 @@ crate @code{rust-wayland-client} for usable bindings.")
         ("rust-winapi" ,rust-winapi-0.3)
         ("rust-x11-dl" ,rust-x11-dl-2))))
     (inputs
-     `(("rust-wayland-client" ,rust-wayland-client-0.28)))
+     (list rust-wayland-client-0.28))
     (home-page "https://github.com/rust-windowing/winit")
     (synopsis "Window creation library")
     (description
@@ -3005,6 +3077,33 @@ the platform-specific getters provided by winit, or another library.")
     (description "This crate provides X11 library bindings for Rust.")
     (license license:expat)))
 
+(define-public rust-x11rb-0.8
+  (package
+    (name "rust-x11rb")
+    (version "0.8.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "x11rb" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32 "068g5ll4l5f35c2v098hj0kj2c9ma0r7v3pbli164q9g7w5hiyvg"))))
+    (build-system cargo-build-system)
+    (arguments
+      `(#:skip-build? #t
+        #:cargo-inputs
+        (("rust-gethostname" ,rust-gethostname-0.2)
+         ("rust-libc" ,rust-libc-0.2)
+         ("rust-libloading" ,rust-libloading-0.7)
+         ("rust-nix" ,rust-nix-0.20)
+         ("rust-once-cell" ,rust-once-cell-1)
+         ("rust-winapi" ,rust-winapi-0.3)
+         ("rust-winapi-wsapoll" ,rust-winapi-wsapoll-0.1))))
+    (home-page "https://github.com/psychon/x11rb")
+    (synopsis "Rust bindings to X11")
+    (description "This package provides Rust bindings to X11")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-x11-clipboard-0.5
   (package
     (name "rust-x11-clipboard")
@@ -3044,7 +3143,7 @@ the platform-specific getters provided by winit, or another library.")
      `(#:tests? #f  ; Tests require display server.
        #:cargo-inputs (("rust-xcb" ,rust-xcb-0.9))))
     (native-inputs
-     `(("python" ,python)))))
+     (list python))))
 
 (define-public rust-x11-dl-2
   (package
diff --git a/gnu/packages/crates-gtk.scm b/gnu/packages/crates-gtk.scm
index 0d72fbf321..e392220a01 100644
--- a/gnu/packages/crates-gtk.scm
+++ b/gnu/packages/crates-gtk.scm
@@ -1,6 +1,8 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2022 Petr Hodina <phodina@protonmail.com>
+;;; Copyright © 2022 Aleksandr Vityazev <avityazev@posteo.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -26,14 +28,73 @@
   #:use-module (gnu packages crates-io)
   #:use-module (gnu packages crates-graphics)
   #:use-module (gnu packages glib)
-  #:use-module (gnu packages gtk))
+  #:use-module (gnu packages gnome)
+  #:use-module (gnu packages gtk)
+  #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages webkit))
 
 ;;;
 ;;; Please: Try to add new module packages in alphabetic order.
 ;;;
+(define-public rust-atk-sys-0.14
+  (package
+    (name "rust-atk-sys")
+    (version "0.14.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "atk-sys" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1sl3pqfb2jaf9kcfxj9k43d7iv8gcl5zgdgn3j5vp13w2mqgdp5s"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:tests? #f                      ; missing files
+       #:cargo-inputs
+       (("rust-glib-sys" ,rust-glib-sys-0.14)
+        ("rust-gobject-sys" ,rust-gobject-sys-0.14)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-system-deps" ,rust-system-deps-3))
+       #:cargo-development-inputs
+       (("rust-shell-words" ,rust-shell-words-1)
+        ("rust-tempfile" ,rust-tempfile-3))))
+    (native-inputs (list pkg-config))
+    (inputs
+     (list atk glib))
+    (home-page "https://gtk-rs.org/")
+    (synopsis "FFI bindings to libatk-1")
+    (description "FFI bindings to libatk-1")
+    (license license:expat)))
+
+(define-public rust-atk-sys-0.10
+  (package
+    (inherit rust-atk-sys-0.14)
+    (name "rust-atk-sys")
+    (version "0.10.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "atk-sys" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1knzvq2jdkx1nav619jbqsx2ivzh901rsp2wl57wr50x2fpy8c7m"))))
+    (arguments
+     `(#:tests? #f                      ;missing files
+       #:cargo-inputs
+       (("rust-glib-sys" ,rust-glib-sys-0.10)
+        ("rust-gobject-sys" ,rust-gobject-sys-0.10)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-system-deps" ,rust-system-deps-1))
+       #:cargo-development-inputs
+       (("rust-shell-words" ,rust-shell-words-0.1)
+        ("rust-tempfile" ,rust-tempfile-3))))
+    (native-inputs (list pkg-config))
+    (inputs
+     (list atk glib))))
 
 (define-public rust-atk-sys-0.9
   (package
+    (inherit rust-atk-sys-0.14)
     (name "rust-atk-sys")
     (version "0.9.1")
     (source
@@ -43,7 +104,6 @@
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "0vzcm1inhax78bcsbapr6mrp4z7lk783csyh200wi91pcxvw2lp5"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:tests? #f                      ;missing files
        #:cargo-inputs
@@ -53,17 +113,40 @@
         ("rust-pkg-config" ,rust-pkg-config-0.3))
        #:cargo-development-inputs
        (("rust-shell-words" ,rust-shell-words-0.1)
-        ("rust-tempfile" ,rust-tempfile-3))))
+        ("rust-tempfile" ,rust-tempfile-3))))))
+
+(define-public rust-atk-0.14
+  (package
+    (name "rust-atk")
+    (version "0.14.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "atk" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1fi6f3k1lgd0iymar58hp88k76fm5pd1npi2avdn9r3mmb922fx8"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build?
+       #t
+       #:cargo-inputs
+       (("rust-atk-sys" ,rust-atk-sys-0.14)
+        ("rust-bitflags" ,rust-bitflags-1)
+        ("rust-glib" ,rust-glib-0.14)
+        ("rust-libc" ,rust-libc-0.2))
+       #:cargo-development-inputs
+       (("rust-gir-format-check" ,rust-gir-format-check-0.1))))
     (inputs
-     `(("atk" ,atk)
-       ("glib" ,glib)))
+     (list atk glib))
     (home-page "https://gtk-rs.org/")
-    (synopsis "FFI bindings to libatk-1")
-    (description "FFI bindings to libatk-1")
+    (synopsis "Rust bindings for the ATK library")
+    (description "Rust bindings for the ATK library")
     (license license:expat)))
 
 (define-public rust-atk-0.8
   (package
+    (inherit rust-atk-0.14)
     (name "rust-atk")
     (version "0.8.0")
     (source
@@ -73,7 +156,6 @@
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "0gk6ijqsd6kh8cki1wznw570499psbppg3d5bqaayagjapxawka4"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-atk-sys" ,rust-atk-sys-0.9)
@@ -84,17 +166,42 @@
         ("rust-gtk-rs-lgpl-docs" ,rust-gtk-rs-lgpl-docs-0.1)
         ("rust-libc" ,rust-libc-0.2))
        #:cargo-development-inputs
-       (("rust-gir-format-check" ,rust-gir-format-check-0.1))))
+       (("rust-gir-format-check" ,rust-gir-format-check-0.1))))))
+
+(define-public rust-cairo-rs-0.14
+  (package
+    (name "rust-cairo-rs")
+    (version "0.14.9")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "cairo-rs" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "10ml7hxzj6w5k6yjdkcmxx0ds4mnrn9j3bdbk1nmh36vg5cp5d9k"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build?
+       #t
+       #:cargo-inputs
+       (("rust-bitflags" ,rust-bitflags-1)
+        ("rust-cairo-sys-rs" ,rust-cairo-sys-rs-0.14)
+        ("rust-freetype" ,rust-freetype-0.7)
+        ("rust-glib" ,rust-glib-0.14)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-thiserror" ,rust-thiserror-1))
+       #:cargo-development-inputs
+       (("rust-tempfile" ,rust-tempfile-3))))
     (inputs
-     `(("atk" ,atk)
-       ("glib" ,glib)))
+     (list cairo))
     (home-page "https://gtk-rs.org/")
-    (synopsis "Rust bindings for the ATK library")
-    (description "Rust bindings for the ATK library")
+    (synopsis "Rust bindings for the Cairo library")
+    (description "Rust bindings for the Cairo library")
     (license license:expat)))
 
 (define-public rust-cairo-rs-0.9
   (package
+    (inherit rust-cairo-rs-0.14)
     (name "rust-cairo-rs")
     (version "0.9.1")
     (source
@@ -104,7 +211,6 @@
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "1f5x6ipfpzz0ffph0pg0xfkdfcbr0jp59714zz857jp88zhg5h65"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
@@ -117,13 +223,7 @@
         ("rust-libc" ,rust-libc-0.2)
         ("rust-thiserror" ,rust-thiserror-1))
        #:cargo-development-inputs
-       (("rust-tempfile" ,rust-tempfile-3))))
-    (inputs
-     `(("cairo" ,cairo)))
-    (home-page "https://gtk-rs.org/")
-    (synopsis "Rust bindings for the Cairo library")
-    (description "Rust bindings for the Cairo library")
-    (license license:expat)))
+       (("rust-tempfile" ,rust-tempfile-3))))))
 
 (define-public rust-cairo-rs-0.8
   (package
@@ -177,33 +277,55 @@
        #:cargo-development-inputs
        (("rust-tempfile" ,rust-tempfile-3))))))
 
-(define-public rust-cairo-sys-rs-0.10
+(define-public rust-cairo-sys-rs-0.14
   (package
     (name "rust-cairo-sys-rs")
-    (version "0.10.0")
+    (version "0.14.9")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "cairo-sys-rs" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "19wch8zc11hbi724mn16hhqyff8kw5c5bsbdlzpxdwfmkadn7lif"))))
+        (base32 "0w3md4xk87ign30wb3rqfmmj0q6pvg5arbm35flgsd08jxvbhj5l"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:skip-build? #t
+     `(#:skip-build?
+       #t
        #:cargo-inputs
-       (("rust-glib-sys" ,rust-glib-sys-0.10)
+       (("rust-glib-sys" ,rust-glib-sys-0.14)
         ("rust-libc" ,rust-libc-0.2)
-        ("rust-system-deps" ,rust-system-deps-1)
+        ("rust-system-deps" ,rust-system-deps-3)
         ("rust-winapi" ,rust-winapi-0.3)
         ("rust-x11" ,rust-x11-2))))
     (inputs
-     `(("cairo" ,cairo)))
+     (list cairo))
     (home-page "https://gtk-rs.org/")
     (synopsis "FFI bindings to libcairo")
     (description "This package provides FFI bindings to libcairo.")
     (license license:expat)))
 
+(define-public rust-cairo-sys-rs-0.10
+  (package
+    (inherit rust-cairo-sys-rs-0.14)
+    (name "rust-cairo-sys-rs")
+    (version "0.10.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "cairo-sys-rs" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "19wch8zc11hbi724mn16hhqyff8kw5c5bsbdlzpxdwfmkadn7lif"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-glib-sys" ,rust-glib-sys-0.10)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-system-deps" ,rust-system-deps-1)
+        ("rust-winapi" ,rust-winapi-0.3)
+        ("rust-x11" ,rust-x11-2))))))
+
 (define-public rust-cairo-sys-rs-0.9
   (package
     (inherit rust-cairo-sys-rs-0.10)
@@ -224,8 +346,42 @@
         ("rust-x11" ,rust-x11-2)
         ("rust-pkg-config" ,rust-pkg-config-0.3))))))
 
+(define-public rust-gdk-0.14
+  (package
+    (name "rust-gdk")
+    (version "0.14.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "gdk" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0fwkm4glh7cici6yd96qlddyp4s2l029wa1sgh6xxn00zkf4kmxr"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build?
+       #t
+       #:cargo-inputs
+       (("rust-bitflags" ,rust-bitflags-1)
+        ("rust-cairo-rs" ,rust-cairo-rs-0.14)
+        ("rust-gdk-pixbuf" ,rust-gdk-pixbuf-0.14)
+        ("rust-gdk-sys" ,rust-gdk-sys-0.14)
+        ("rust-gio" ,rust-gio-0.14)
+        ("rust-glib" ,rust-glib-0.14)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-pango" ,rust-pango-0.14))
+       #:cargo-development-inputs
+       (("rust-gir-format-check" ,rust-gir-format-check-0.1))))
+    (inputs
+     (list cairo gdk-pixbuf glib gtk+ pango))
+    (home-page "https://gtk-rs.org/")
+    (synopsis "Rust bindings for the GDK 3 library")
+    (description "This package provides Rust bindings for the GDK 3 library.")
+    (license license:expat)))
+
 (define-public rust-gdk-0.13
   (package
+    (inherit rust-gdk-0.14)
     (name "rust-gdk")
     (version "0.13.2")
     (source
@@ -235,7 +391,6 @@
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "0zbb9bwg2z9vlcjj9b59qch3mfmszsrxya7syc5a39v85adq606v"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
@@ -253,17 +408,7 @@
         ("rust-libc" ,rust-libc-0.2)
         ("rust-pango" ,rust-pango-0.9))
        #:cargo-development-inputs
-       (("rust-gir-format-check" ,rust-gir-format-check-0.1))))
-    (inputs
-     `(("cairo" ,cairo)
-       ("gdk-pixbuf" ,gdk-pixbuf)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("pango" ,pango)))
-    (home-page "https://gtk-rs.org/")
-    (synopsis "Rust bindings for the GDK 3 library")
-    (description "This package provides Rust bindings for the GDK 3 library.")
-    (license license:expat)))
+       (("rust-gir-format-check" ,rust-gir-format-check-0.1))))))
 
 (define-public rust-gdk-0.12
   (package
@@ -295,8 +440,38 @@
        #:cargo-development-inputs
        (("rust-gir-format-check" ,rust-gir-format-check-0.1))))))
 
+(define-public rust-gdk-pixbuf-0.14
+  (package
+    (name "rust-gdk-pixbuf")
+    (version "0.14.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "gdk-pixbuf" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "03xi6pi0h9jwkxvja18k75x5pblsiym4p39cmf7ypnh1iz5r4hak"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build?
+       #t
+       #:cargo-inputs
+       (("rust-gdk-pixbuf-sys" ,rust-gdk-pixbuf-sys-0.14)
+        ("rust-gio" ,rust-gio-0.14)
+        ("rust-glib" ,rust-glib-0.14)
+        ("rust-libc" ,rust-libc-0.2))
+       #:cargo-development-inputs
+       (("rust-gir-format-check" ,rust-gir-format-check-0.1))))
+    (inputs
+     (list gdk-pixbuf))
+    (home-page "https://gtk-rs.org/")
+    (synopsis "Rust bindings for the GdkPixbuf library")
+    (description "Rust bindings for the GdkPixbuf library")
+    (license license:expat)))
+
 (define-public rust-gdk-pixbuf-0.9
   (package
+    (inherit rust-gdk-pixbuf-0.14)
     (name "rust-gdk-pixbuf")
     (version "0.9.0")
     (source
@@ -306,7 +481,6 @@
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "12lrk7zwshid8dgx9vg87bk0h4a0ilpi7w48idsrpm4xp4yawvcg"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
@@ -319,13 +493,7 @@
         ("rust-gtk-rs-lgpl-docs" ,rust-gtk-rs-lgpl-docs-0.1)
         ("rust-libc" ,rust-libc-0.2))
        #:cargo-development-inputs
-       (("rust-gir-format-check" ,rust-gir-format-check-0.1))))
-    (inputs
-     `(("gdk-pixbuf" ,gdk-pixbuf)))
-    (home-page "https://gtk-rs.org/")
-    (synopsis "Rust bindings for the GdkPixbuf library")
-    (description "Rust bindings for the GdkPixbuf library")
-    (license license:expat)))
+       (("rust-gir-format-check" ,rust-gir-format-check-0.1))))))
 
 (define-public rust-gdk-pixbuf-0.8
   (package
@@ -381,8 +549,40 @@
        #:cargo-development-inputs
        (("rust-gir-format-check" ,rust-gir-format-check-0.1))))))
 
+(define-public rust-gdk-pixbuf-sys-0.14
+  (package
+    (name "rust-gdk-pixbuf-sys")
+    (version "0.14.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "gdk-pixbuf-sys" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "14759y4z2najwv3hpvdqi2qqnz4lqrcdqqhpkkvciyq189qc15zh"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build?
+       #t
+       #:cargo-inputs
+       (("rust-gio-sys" ,rust-gio-sys-0.14)
+        ("rust-glib-sys" ,rust-glib-sys-0.14)
+        ("rust-gobject-sys" ,rust-gobject-sys-0.14)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-system-deps" ,rust-system-deps-3))
+       #:cargo-development-inputs
+       (("rust-shell-words" ,rust-shell-words-0.1)
+        ("rust-tempfile" ,rust-tempfile-3))))
+    (inputs
+     (list gdk-pixbuf))
+    (home-page "https://gtk-rs.org/")
+    (synopsis "FFI bindings to libgdk_pixbuf-2.0")
+    (description "This package provides FFI bindings to @code{libgdk_pixbuf-2.0}.")
+    (license license:expat)))
+
 (define-public rust-gdk-pixbuf-sys-0.10
   (package
+    (inherit rust-gdk-pixbuf-sys-0.14)
     (name "rust-gdk-pixbuf-sys")
     (version "0.10.0")
     (source
@@ -392,7 +592,6 @@
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "13qyxazj9bmw3llvkh6br8v7sypnbin2nxis366ppsa3gy54dziv"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
@@ -403,13 +602,7 @@
         ("rust-system-deps" ,rust-system-deps-1))
        #:cargo-development-inputs
        (("rust-shell-words" ,rust-shell-words-0.1)
-        ("rust-tempfile" ,rust-tempfile-3))))
-    (inputs
-     `(("gdk-pixbuf" ,gdk-pixbuf)))
-    (home-page "https://gtk-rs.org/")
-    (synopsis "FFI bindings to libgdk_pixbuf-2.0")
-    (description "This package provides FFI bindings to @code{libgdk_pixbuf-2.0}.")
-    (license license:expat)))
+        ("rust-tempfile" ,rust-tempfile-3))))))
 
 (define-public rust-gdk-pixbuf-sys-0.9
   (package
@@ -435,8 +628,44 @@
        (("rust-shell-words" ,rust-shell-words-0.1)
         ("rust-tempfile" ,rust-tempfile-3))))))
 
+(define-public rust-gdk-sys-0.14
+  (package
+    (name "rust-gdk-sys")
+    (version "0.14.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "gdk-sys" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "07hz3gg039sy7iffy2w5srxzsnqf15i3ryxkqfd995k67lyin28f"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build?
+       #t
+       #:cargo-inputs
+       (("rust-cairo-sys-rs" ,rust-cairo-sys-rs-0.14)
+        ("rust-gdk-pixbuf-sys" ,rust-gdk-pixbuf-sys-0.14)
+        ("rust-gio-sys" ,rust-gio-sys-0.14)
+        ("rust-glib-sys" ,rust-glib-sys-0.14)
+        ("rust-gobject-sys" ,rust-gobject-sys-0.14)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-pango-sys" ,rust-pango-sys-0.14)
+        ("rust-pkg-config" ,rust-pkg-config-0.3)
+        ("rust-system-deps" ,rust-system-deps-3))
+       #:cargo-development-inputs
+       (("rust-shell-words" ,rust-shell-words-0.1)
+        ("rust-tempfile" ,rust-tempfile-3))))
+    (inputs
+     (list cairo gdk-pixbuf gtk+ glib pango))
+    (home-page "https://gtk-rs.org/")
+    (synopsis "FFI bindings to libgdk-3")
+    (description "FFI bindings to libgdk-3")
+    (license license:expat)))
+
 (define-public rust-gdk-sys-0.10
   (package
+    (inherit rust-gdk-sys-0.14)
     (name "rust-gdk-sys")
     (version "0.10.0")
     (source
@@ -461,17 +690,7 @@
         ("rust-system-deps" ,rust-system-deps-1))
        #:cargo-development-inputs
        (("rust-shell-words" ,rust-shell-words-0.1)
-        ("rust-tempfile" ,rust-tempfile-3))))
-    (inputs
-     `(("cairo" ,cairo)
-       ("gdk-pixbuf" ,gdk-pixbuf)
-       ("gtk+" ,gtk+)
-       ("glib" ,glib)
-       ("pango" ,pango)))
-    (home-page "https://gtk-rs.org/")
-    (synopsis "FFI bindings to libgdk-3")
-    (description "FFI bindings to libgdk-3")
-    (license license:expat)))
+        ("rust-tempfile" ,rust-tempfile-3))))))
 
 (define-public rust-gdk-sys-0.9
   (package
@@ -500,8 +719,44 @@
        (("rust-shell-words" ,rust-shell-words-0.1)
         ("rust-tempfile" ,rust-tempfile-3))))))
 
+(define-public rust-gio-0.14
+  (package
+    (name "rust-gio")
+    (version "0.14.8")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "gio" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1c2w47mznpplr3mmhgs4m4nlkv8gs4c182cwi9brbl7bncr3c73i"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build?
+       #t
+       #:cargo-inputs
+       (("rust-bitflags" ,rust-bitflags-1)
+        ("rust-futures-channel" ,rust-futures-channel-0.3)
+        ("rust-futures-core" ,rust-futures-core-0.3)
+        ("rust-futures-io" ,rust-futures-io-0.3)
+        ("rust-gio-sys" ,rust-gio-sys-0.14)
+        ("rust-glib" ,rust-glib-0.14)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-once-cell" ,rust-once-cell-1)
+        ("rust-thiserror" ,rust-thiserror-1))
+       #:cargo-development-inputs
+       (("rust-gir-format-check" ,rust-gir-format-check-0.1)
+        ("rust-serial-test" ,rust-serial-test-0.4))))
+    (inputs
+     (list glib))
+    (home-page "https://gtk-rs.org/")
+    (synopsis "Rust bindings for the Gio library")
+    (description "Rust bindings for the Gio library")
+    (license license:expat)))
+
 (define-public rust-gio-0.9
   (package
+    (inherit rust-gio-0.14)
     (name "rust-gio")
     (version "0.9.1")
     (source
@@ -511,7 +766,6 @@
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "0qc5aqi2ijval5i9df0qryy4wbmayyhy7ng5v9r0fw7zpx105dhz"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
@@ -531,13 +785,7 @@
         ("rust-thiserror" ,rust-thiserror-1))
        #:cargo-development-inputs
        (("rust-gir-format-check" ,rust-gir-format-check-0.1)
-        ("rust-serial-test" ,rust-serial-test-0.4))))
-    (inputs
-     `(("glib" ,glib)))
-    (home-page "https://gtk-rs.org/")
-    (synopsis "Rust bindings for the Gio library")
-    (description "Rust bindings for the Gio library")
-    (license license:expat)))
+        ("rust-serial-test" ,rust-serial-test-0.4))))))
 
 (define-public rust-gio-0.8
   (package
@@ -600,33 +848,55 @@
        #:cargo-development-inputs
        (("rust-gir-format-check" ,rust-gir-format-check-0.1))))))
 
-(define-public rust-gio-sys-0.10
+(define-public rust-gio-sys-0.14
   (package
     (name "rust-gio-sys")
-    (version "0.10.1")
+    (version "0.14.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "gio-sys" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1b2f6jvghm2djymj3qrgbqfci2f95gyhdin2pgv2qpcg5xszn92y"))))
+        (base32 "1yj8dx2rna07av3jwyd93s832kw8dg14zxxwqj3w5z2pdvv1v960"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:skip-build? #t
+     `(#:skip-build?
+       #t
        #:cargo-inputs
-       (("rust-glib-sys" ,rust-glib-sys-0.10)
-        ("rust-gobject-sys" ,rust-gobject-sys-0.10)
+       (("rust-glib-sys" ,rust-glib-sys-0.14)
+        ("rust-gobject-sys" ,rust-gobject-sys-0.14)
         ("rust-libc" ,rust-libc-0.2)
-        ("rust-system-deps" ,rust-system-deps-1)
+        ("rust-system-deps" ,rust-system-deps-3)
         ("rust-winapi" ,rust-winapi-0.3))))
     (inputs
-     `(("glib" ,glib)))
+     (list glib))
     (home-page "https://gtk-rs.org/")
     (synopsis "FFI bindings to libgio-2.0")
     (description "This package provides FFI bindings to libgio-2.0.")
     (license license:expat)))
 
+(define-public rust-gio-sys-0.10
+  (package
+    (inherit rust-gio-sys-0.14)
+    (name "rust-gio-sys")
+    (version "0.10.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "gio-sys" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1b2f6jvghm2djymj3qrgbqfci2f95gyhdin2pgv2qpcg5xszn92y"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-glib-sys" ,rust-glib-sys-0.10)
+        ("rust-gobject-sys" ,rust-gobject-sys-0.10)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-system-deps" ,rust-system-deps-1)
+        ("rust-winapi" ,rust-winapi-0.3))))))
+
 (define-public rust-gio-sys-0.9
   (package
     (inherit rust-gio-sys-0.10)
@@ -669,8 +939,44 @@
     (description "File format checker in Rust.")
     (license license:expat)))
 
+(define-public rust-glib-0.14
+  (package
+    (name "rust-glib")
+    (version "0.14.8")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "glib" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "194n6w5yy869lls3pr46x5nm049cn02qsljzcgv1w5dzc8g5ylbw"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build?
+       #t
+       #:cargo-inputs
+       (("rust-bitflags" ,rust-bitflags-1)
+        ("rust-futures-channel" ,rust-futures-channel-0.3)
+        ("rust-futures-core" ,rust-futures-core-0.3)
+        ("rust-futures-executor" ,rust-futures-executor-0.3)
+        ("rust-futures-task" ,rust-futures-task-0.3)
+        ("rust-glib-macros" ,rust-glib-macros-0.14)
+        ("rust-glib-sys" ,rust-glib-sys-0.14)
+        ("rust-gobject-sys" ,rust-gobject-sys-0.14)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-log" ,rust-log-0.4)
+        ("rust-once-cell" ,rust-once-cell-1)
+        ("rust-smallvec" ,rust-smallvec-1))))
+    (inputs
+     (list glib))
+    (home-page "https://gtk-rs.org/")
+    (synopsis "Rust bindings for the GLib library")
+    (description "Rust bindings for the GLib library")
+    (license license:expat)))
+
 (define-public rust-glib-0.10
   (package
+    (inherit rust-glib-0.14)
     (name "rust-glib")
     (version "0.10.3")
     (source
@@ -680,7 +986,6 @@
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "1ifh56nhvhcrssxqkad876qqrlnl16q6b8ap3f7ncpjinw9m0s0c"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
@@ -695,13 +1000,7 @@
         ("rust-glib-sys" ,rust-glib-sys-0.10)
         ("rust-gobject-sys" ,rust-gobject-sys-0.10)
         ("rust-libc" ,rust-libc-0.2)
-        ("rust-once-cell" ,rust-once-cell-1))))
-    (inputs
-     `(("glib" ,glib)))
-    (home-page "https://gtk-rs.org/")
-    (synopsis "Rust bindings for the GLib library")
-    (description "Rust bindings for the GLib library")
-    (license license:expat)))
+        ("rust-once-cell" ,rust-once-cell-1))))))
 
 (define-public rust-glib-0.9
   (package
@@ -758,25 +1057,25 @@
        #:cargo-development-inputs
        (("rust-tempfile" ,rust-tempfile-3))))))
 
-(define-public rust-glib-macros-0.10
+(define-public rust-glib-macros-0.14
   (package
     (name "rust-glib-macros")
-    (version "0.10.1")
+    (version "0.14.1")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "glib-macros" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0fa00s6gnj3hgri9z926199jidczlmjr1db0n4r80sins4k6lj21"))))
+        (base32 "0675i7m7pksg4cd9kfpzjnw0x5r3y4gcac7mfgy6nyb63wv6db9a"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:skip-build? #t
+     `(#:skip-build?
+       #t
        #:cargo-inputs
        (("rust-anyhow" ,rust-anyhow-1)
         ("rust-heck" ,rust-heck-0.3)
-        ("rust-itertools" ,rust-itertools-0.9)
-        ("rust-proc-macro-crate" ,rust-proc-macro-crate-0.1)
+        ("rust-proc-macro-crate" ,rust-proc-macro-crate-1)
         ("rust-proc-macro-error" ,rust-proc-macro-error-1)
         ("rust-proc-macro2" ,rust-proc-macro2-1)
         ("rust-quote" ,rust-quote-1)
@@ -786,33 +1085,79 @@
     (description "Rust bindings for the GLib library, proc macros crate.")
     (license license:expat)))
 
-(define-public rust-glib-sys-0.10
+(define-public rust-glib-macros-0.10
   (package
-    (name "rust-glib-sys")
+    (inherit rust-glib-macros-0.14)
+    (name "rust-glib-macros")
     (version "0.10.1")
     (source
      (origin
        (method url-fetch)
+       (uri (crate-uri "glib-macros" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0fa00s6gnj3hgri9z926199jidczlmjr1db0n4r80sins4k6lj21"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-anyhow" ,rust-anyhow-1)
+        ("rust-heck" ,rust-heck-0.3)
+        ("rust-itertools" ,rust-itertools-0.9)
+        ("rust-proc-macro-crate" ,rust-proc-macro-crate-0.1)
+        ("rust-proc-macro-error" ,rust-proc-macro-error-1)
+        ("rust-proc-macro2" ,rust-proc-macro2-1)
+        ("rust-quote" ,rust-quote-1)
+        ("rust-syn" ,rust-syn-1))))))
+
+(define-public rust-glib-sys-0.14
+  (package
+    (name "rust-glib-sys")
+    (version "0.14.0")
+    (source
+     (origin
+       (method url-fetch)
        (uri (crate-uri "glib-sys" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1hfdwilf3dnrv3pnfbwmp3h2afgwvfsapcgjfg8276kflsbvksf7"))))
+        (base32 "1bjlymn3fw4g8slij6iiggaipknf9072mr2qm3i4a91199an078w"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:skip-build? #t
+     `(#:skip-build?
+       #t
        #:cargo-inputs
        (("rust-libc" ,rust-libc-0.2)
-        ("rust-system-deps" ,rust-system-deps-1))
+        ("rust-system-deps" ,rust-system-deps-3))
        #:cargo-development-inputs
        (("rust-shell-words" ,rust-shell-words-0.1)
         ("rust-tempfile" ,rust-tempfile-3))))
     (inputs
-     `(("glib" ,glib)))
+     (list glib))
     (home-page "https://gtk-rs.org/")
     (synopsis "FFI bindings to libglib-2.0")
     (description "This package provides FFI bindings to libglib-2.0.")
     (license license:expat)))
 
+(define-public rust-glib-sys-0.10
+  (package
+    (inherit rust-glib-sys-0.14)
+    (name "rust-glib-sys")
+    (version "0.10.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "glib-sys" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1hfdwilf3dnrv3pnfbwmp3h2afgwvfsapcgjfg8276kflsbvksf7"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-libc" ,rust-libc-0.2)
+        ("rust-system-deps" ,rust-system-deps-1))
+       #:cargo-development-inputs
+       (("rust-shell-words" ,rust-shell-words-0.1)
+        ("rust-tempfile" ,rust-tempfile-3))))))
+
 (define-public rust-glib-sys-0.9
   (package
     (inherit rust-glib-sys-0.10)
@@ -836,34 +1181,57 @@
        (("rust-shell-words" ,rust-shell-words-0.1)
         ("rust-tempfile" ,rust-tempfile-3))))))
 
-(define-public rust-gobject-sys-0.10
+(define-public rust-gobject-sys-0.14
   (package
     (name "rust-gobject-sys")
-    (version "0.10.0")
+    (version "0.14.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "gobject-sys" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1311d3zbdhl1g7ibj1iy1650513yrhxbjxgfhazn52ii1jv368cm"))))
+        (base32 "1xf3jiwzrjingq8jr15bjkbv6m5dypzp67cjnm5f7njrjzicm4ma"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:skip-build? #t
+     `(#:skip-build?
+       #t
        #:cargo-inputs
-       (("rust-glib-sys" ,rust-glib-sys-0.10)
+       (("rust-glib-sys" ,rust-glib-sys-0.14)
         ("rust-libc" ,rust-libc-0.2)
-        ("rust-system-deps" ,rust-system-deps-1))
+        ("rust-system-deps" ,rust-system-deps-3))
        #:cargo-development-inputs
        (("rust-shell-words" ,rust-shell-words-0.1)
         ("rust-tempfile" ,rust-tempfile-3))))
     (inputs
-     `(("glib" ,glib)))
+     (list glib))
     (home-page "https://gtk-rs.org/")
     (synopsis "FFI bindings to libgobject-2.0")
     (description "This package provides FFI bindings to libgobject-2.0.")
     (license license:expat)))
 
+(define-public rust-gobject-sys-0.10
+  (package
+    (inherit rust-gobject-sys-0.14)
+    (name "rust-gobject-sys")
+    (version "0.10.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "gobject-sys" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1311d3zbdhl1g7ibj1iy1650513yrhxbjxgfhazn52ii1jv368cm"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-glib-sys" ,rust-glib-sys-0.10)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-system-deps" ,rust-system-deps-1))
+       #:cargo-development-inputs
+       (("rust-shell-words" ,rust-shell-words-0.1)
+        ("rust-tempfile" ,rust-tempfile-3))))))
+
 (define-public rust-gobject-sys-0.9
   (package
     (inherit rust-gobject-sys-0.10)
@@ -887,8 +1255,49 @@
        (("rust-shell-words" ,rust-shell-words-0.1)
         ("rust-tempfile" ,rust-tempfile-3))))))
 
+(define-public rust-gtk-0.14
+  (package
+    (name "rust-gtk")
+    (version "0.14.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "gtk" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0367kb9d9x5cry6zpn2ccsahvynia6hzmr61gqrfj5rkvli13d9f"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:tests? #f                      ;requires running server
+       #:cargo-inputs
+       (("rust-atk" ,rust-atk-0.14)
+        ("rust-bitflags" ,rust-bitflags-1)
+        ("rust-cairo-rs" ,rust-cairo-rs-0.14)
+        ("rust-field-offset" ,rust-field-offset-0.3)
+        ("rust-futures-channel" ,rust-futures-channel-0.3)
+        ("rust-gdk" ,rust-gdk-0.14)
+        ("rust-gdk-pixbuf" ,rust-gdk-pixbuf-0.14)
+        ("rust-gio" ,rust-gio-0.14)
+        ("rust-glib" ,rust-glib-0.14)
+        ("rust-gtk-sys" ,rust-gtk-sys-0.14)
+        ("rust-gtk3-macros" ,rust-gtk3-macros-0.14)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-once-cell" ,rust-once-cell-1)
+        ("rust-pango" ,rust-pango-0.14)
+        ("rust-pkg-config" ,rust-pkg-config-0.3))
+       #:cargo-development-inputs
+       (("rust-gir-format-check" ,rust-gir-format-check-0.1))))
+    (native-inputs (list pkg-config))
+    (inputs
+     (list atk cairo glib gtk+ pango))
+    (home-page "https://gtk-rs.org/")
+    (synopsis "Rust bindings for the GTK+ 3 library")
+    (description "This package provides Rust bindings for the GTK+ 3 library.")
+    (license license:expat)))
+
 (define-public rust-gtk-0.8
   (package
+    (inherit rust-gtk-0.14)
     (name "rust-gtk")
     (version "0.8.1")
     (source
@@ -923,17 +1332,7 @@
         ("rust-pango" ,rust-pango-0.8)
         ("rust-pango-sys" ,rust-pango-sys-0.9))
        #:cargo-development-inputs
-       (("rust-gir-format-check" ,rust-gir-format-check-0.1))))
-    (inputs
-     `(("atk" ,atk)
-       ("cairo" ,cairo)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("pango" ,pango)))
-    (home-page "https://gtk-rs.org/")
-    (synopsis "Rust bindings for the GTK+ 3 library")
-    (description "This package provides Rust bindings for the GTK+ 3 library.")
-    (license license:expat)))
+       (("rust-gir-format-check" ,rust-gir-format-check-0.1))))))
 
 (define-public rust-gtk-rs-lgpl-docs-0.1
   (package
@@ -956,8 +1355,78 @@
      "LGPL-licensed docs for Gtk-rs crates.")
     (license license:lgpl2.0)))
 
+(define-public rust-gtk-sys-0.14
+  (package
+    (name "rust-gtk-sys")
+    (version "0.14.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "gtk-sys" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0gihp9zh4z7lycp0zbmq1w0k9ddbnd2h64jsgid7hi85vb9wh54c"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:tests? #f                      ;missing files
+       #:cargo-inputs
+       (("rust-atk-sys" ,rust-atk-sys-0.14)
+        ("rust-cairo-sys-rs" ,rust-cairo-sys-rs-0.14)
+        ("rust-gdk-pixbuf-sys" ,rust-gdk-pixbuf-sys-0.14)
+        ("rust-gdk-sys" ,rust-gdk-sys-0.14)
+        ("rust-gio-sys" ,rust-gio-sys-0.14)
+        ("rust-glib-sys" ,rust-glib-sys-0.14)
+        ("rust-gobject-sys" ,rust-gobject-sys-0.14)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-pango-sys" ,rust-pango-sys-0.14)
+        ("rust-system-deps" ,rust-system-deps-3))
+       #:cargo-development-inputs
+       (("rust-shell-words" ,rust-shell-words-1)
+        ("rust-tempfile" ,rust-tempfile-3))))
+    (native-inputs (list pkg-config))
+    (inputs
+     (list gtk+))
+    (home-page "https://gtk-rs.org/")
+    (synopsis "FFI bindings to libgtk-3")
+    (description "This package provides FFI bindings to libgtk-3.")
+    (license license:expat)))
+
+(define-public rust-gtk-sys-0.10
+  (package
+    (inherit rust-gtk-sys-0.14)
+    (name "rust-gtk-sys")
+    (version "0.10.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "gtk-sys" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0mq4i161kk6dwiz19ayxgm9fhx7n3r5lm9lbjiyk0qs811pxmb49"))))
+    (arguments
+     `(#:tests? #f                      ;tests FAILED.
+       #:cargo-inputs
+       (("rust-atk-sys" ,rust-atk-sys-0.10)
+        ("rust-cairo-sys-rs" ,rust-cairo-sys-rs-0.10)
+        ("rust-gdk-pixbuf-sys" ,rust-gdk-pixbuf-sys-0.10)
+        ("rust-gdk-sys" ,rust-gdk-sys-0.10)
+        ("rust-gio-sys" ,rust-gio-sys-0.10)
+        ("rust-glib-sys" ,rust-glib-sys-0.10)
+        ("rust-gobject-sys" ,rust-gobject-sys-0.10)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-pango-sys" ,rust-pango-sys-0.10)
+        ("rust-system-deps" ,rust-system-deps-1))
+       #:cargo-development-inputs
+       (("rust-shell-words" ,rust-shell-words-0.1)
+        ("rust-tempfile" ,rust-tempfile-3))))
+    (native-inputs
+     (list pkg-config))
+    (inputs
+     (list gtk+))))
+
 (define-public rust-gtk-sys-0.9
   (package
+    (inherit rust-gtk-sys-0.14)
     (name "rust-gtk-sys")
     (version "0.9.2")
     (source
@@ -967,7 +1436,6 @@
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "1hd4w49iaivzjkbxi0bhabqp1ifkzg9g47n822sh12xlqxhgdpjk"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:tests? #f                      ;missing files
        #:cargo-inputs
@@ -983,16 +1451,70 @@
         ("rust-pkg-config" ,rust-pkg-config-0.3))
        #:cargo-development-inputs
        (("rust-shell-words" ,rust-shell-words-0.1)
-        ("rust-tempfile" ,rust-tempfile-3))))
+        ("rust-tempfile" ,rust-tempfile-3))))))
+
+(define-public rust-gtk3-macros-0.14
+  (package
+    (name "rust-gtk3-macros")
+    (version "0.14.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "gtk3-macros" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0yavfirn2iw9nsxik6m7s2cdxdrl5l5jfbiwn0zl85y1dnlivpi1"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build?
+       #t
+       #:cargo-inputs
+       (("rust-anyhow" ,rust-anyhow-1)
+        ("rust-heck" ,rust-heck-0.3)
+        ("rust-proc-macro-crate" ,rust-proc-macro-crate-1)
+        ("rust-proc-macro-error" ,rust-proc-macro-error-1)
+        ("rust-proc-macro2" ,rust-proc-macro2-1)
+        ("rust-quote" ,rust-quote-1)
+        ("rust-syn" ,rust-syn-1))))
+    (home-page "https://gtk-rs.org/")
+    (synopsis "Rust bindings for the GTK 3 library")
+    (description "This package provides Rust bindings for the GTK 3
+library.")
+    (license license:expat)))
+
+(define-public rust-pango-0.14
+  (package
+    (name "rust-pango")
+    (version "0.14.8")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "pango" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "10c5q8wl9gkjh323whq6pg9yfvr2vmz00f98z1d77jp506cdavsl"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build?
+       #t
+       #:cargo-inputs
+       (("rust-bitflags" ,rust-bitflags-1)
+        ("rust-glib" ,rust-glib-0.14)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-once-cell" ,rust-once-cell-1)
+        ("rust-pango-sys" ,rust-pango-sys-0.14))
+       #:cargo-development-inputs
+       (("rust-gir-format-check" ,rust-gir-format-check-0.1))))
     (inputs
-     `(("gtk+" ,gtk+)))
+     (list pango))
     (home-page "https://gtk-rs.org/")
-    (synopsis "FFI bindings to libgtk-3")
-    (description "This package provides FFI bindings to libgtk-3.")
+    (synopsis "Rust bindings for the Pango library")
+    (description "Rust bindings for the Pango library")
     (license license:expat)))
 
 (define-public rust-pango-0.9
   (package
+    (inherit rust-pango-0.14)
     (name "rust-pango")
     (version "0.9.1")
     (source
@@ -1002,7 +1524,6 @@
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "0f64hynd9vq6966wb66mrg5kq9q371bkhncp37nqrgdyh22hcdwr"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
@@ -1015,13 +1536,7 @@
         ("rust-once-cell" ,rust-once-cell-1)
         ("rust-pango-sys" ,rust-pango-sys-0.10))
        #:cargo-development-inputs
-       (("rust-gir-format-check" ,rust-gir-format-check-0.1))))
-    (inputs
-     `(("pango" ,pango)))
-    (home-page "https://gtk-rs.org/")
-    (synopsis "Rust bindings for the Pango library")
-    (description "Rust bindings for the Pango library")
-    (license license:expat)))
+       (("rust-gir-format-check" ,rust-gir-format-check-0.1))))))
 
 (define-public rust-pango-0.8
   (package
@@ -1077,32 +1592,53 @@
        #:cargo-development-inputs
        (("rust-gir-format-check" ,rust-gir-format-check-0.1))))))
 
-(define-public rust-pango-sys-0.10
+(define-public rust-pango-sys-0.14
   (package
     (name "rust-pango-sys")
-    (version "0.10.0")
+    (version "0.14.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "pango-sys" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1468xzyk2wanxb2b32fsmwk6bnafdaicxl5b4301dlb2ic66bli4"))))
+        (base32 "1zj236n9kjldf47wwlxvhshwm5zhg589a0fml5mm8qg7lnf0jrr3"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:skip-build? #t
+     `(#:skip-build?
+       #t
        #:cargo-inputs
-       (("rust-glib-sys" ,rust-glib-sys-0.10)
-        ("rust-gobject-sys" ,rust-gobject-sys-0.10)
+       (("rust-glib-sys" ,rust-glib-sys-0.14)
+        ("rust-gobject-sys" ,rust-gobject-sys-0.14)
         ("rust-libc" ,rust-libc-0.2)
-        ("rust-system-deps" ,rust-system-deps-1))))
+        ("rust-system-deps" ,rust-system-deps-3))))
     (inputs
-     `(("pango" ,pango)))
+     (list pango))
     (home-page "https://gtk-rs.org/")
     (synopsis "FFI bindings to libpango-1.0")
     (description "This package provides FFI bindings to @code{libpango-1.0}.")
     (license license:expat)))
 
+(define-public rust-pango-sys-0.10
+  (package
+    (inherit rust-pango-sys-0.14)
+    (name "rust-pango-sys")
+    (version "0.10.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "pango-sys" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1468xzyk2wanxb2b32fsmwk6bnafdaicxl5b4301dlb2ic66bli4"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-glib-sys" ,rust-glib-sys-0.10)
+        ("rust-gobject-sys" ,rust-gobject-sys-0.10)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-system-deps" ,rust-system-deps-1))))))
+
 (define-public rust-pango-sys-0.9
   (package
     (inherit rust-pango-sys-0.10)
@@ -1156,7 +1692,7 @@
        #:cargo-development-inputs
        (("rust-gir-format-check" ,rust-gir-format-check-0.1))))
     (inputs
-     `(("gtk+" ,gtk+)))
+     (list gtk+))
     (home-page "https://gtk-rs.org/")
     (synopsis "Rust bindings for the PangoCairo library")
     (description
@@ -1218,8 +1754,83 @@
        (("rust-shell-words" ,rust-shell-words-0.1)
         ("rust-tempfile" ,rust-tempfile-3))))
     (inputs
-     `(("gtk+" ,gtk+)))
+     (list gtk+))
     (home-page "https://gtk-rs.org/")
     (synopsis "FFI bindings to libgtk-3")
     (description "This package provides FFI bindings to libgtk-3.")
     (license license:expat)))
+
+(define-public rust-soup-sys-0.10
+  (package
+    (name "rust-soup-sys")
+    (version "0.10.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "soup-sys" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0gm1b1dj6z3l94sklw6jvqblhik8i8gz2mgrf6xhnqv5hpqaviy3"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:tests? #f                      ;tests FAILED
+       #:cargo-inputs
+       (("rust-bitflags" ,rust-bitflags-1)
+        ("rust-gio-sys" ,rust-gio-sys-0.10)
+        ("rust-glib-sys" ,rust-glib-sys-0.10)
+        ("rust-gobject-sys" ,rust-gobject-sys-0.10)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-pkg-config" ,rust-pkg-config-0.3)
+        ("rust-system-deps" ,rust-system-deps-1))
+       #:cargo-development-inputs
+       (("rust-shell-words" ,rust-shell-words-0.1)
+        ("rust-tempfile" ,rust-tempfile-3))))
+    (native-inputs
+     (list pkg-config))
+    (inputs
+     (list glib libsoup-minimal-2))
+    (home-page "https://github.com/gtk-rs/soup-sys-rs")
+    (synopsis "Soup FFI crate for Rust")
+    (description "This crate provides Soup FFI for Rust.")
+    (license license:expat)))
+
+(define-public rust-webkit2gtk-sys-0.12
+  (package
+    (name "rust-webkit2gtk-sys")
+    (version "0.12.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "webkit2gtk-sys" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0686iy2jrq8h2i2p4zb53mg32ql5zagba1fskcdi23asr0w537iq"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:tests? #f                      ;tests FAILED
+       #:cargo-inputs
+       (("rust-atk-sys" ,rust-atk-sys-0.10)
+        ("rust-bitflags" ,rust-bitflags-1)
+        ("rust-cairo-sys-rs" ,rust-cairo-sys-rs-0.10)
+        ("rust-gdk-pixbuf-sys" ,rust-gdk-pixbuf-sys-0.10)
+        ("rust-gdk-sys" ,rust-gdk-sys-0.10)
+        ("rust-gio-sys" ,rust-gio-sys-0.10)
+        ("rust-glib-sys" ,rust-glib-sys-0.10)
+        ("rust-gobject-sys" ,rust-gobject-sys-0.10)
+        ("rust-gtk-sys" ,rust-gtk-sys-0.10)
+        ("rust-javascriptcore-rs-sys" ,rust-javascriptcore-rs-sys-0.2)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-pango-sys" ,rust-pango-sys-0.10)
+        ("rust-pkg-config" ,rust-pkg-config-0.3)
+        ("rust-soup-sys" ,rust-soup-sys-0.10))
+       #:cargo-development-inputs
+       (("rust-shell-words" ,rust-shell-words-0.1)
+        ("rust-tempfile" ,rust-tempfile-3))))
+    (native-inputs
+     (list pkg-config))
+    (inputs
+     (list glib webkitgtk-with-libsoup2))
+    (home-page "https://github.com/tauri-apps/webkit2gtk-rs")
+    (synopsis "Rust binding for webkit-gtk library")
+    (description "This crate provides Rust binding for webkit-gtk library.")
+    (license license:expat)))
diff --git a/gnu/packages/crates-io.scm b/gnu/packages/crates-io.scm
index 48a05fb8be..878319faa2 100644
--- a/gnu/packages/crates-io.scm
+++ b/gnu/packages/crates-io.scm
@@ -1,7 +1,8 @@
+
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2019 Ivan Petkov <ivanppetkov@gmail.com>
-;;; Copyright © 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
-;;; Copyright © 2019, 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2019, 2020, 2021, 2022 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2019-2022 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2019 Giacomo Leidi <goodoldpaul@autistici.org>
 ;;; Copyright © 2019–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019, 2020 John Soo <jsoo1@asu.edu>
@@ -12,13 +13,19 @@
 ;;; Copyright © 2020 André Batista <nandre@riseup.net>
 ;;; Copyright © 2020 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2020 Antoine Côté <antoine.cote@posteo.net>
+;;; Copyright © 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 aecepoglu <aecepoglu@fastmail.fm>
-;;; Copyright © 2021 Zheng Junjie <873216071@qq.com>
+;;; Copyright © 2021, 2022 Zheng Junjie <873216071@qq.com>
 ;;; Copyright © 2021 Alexandru-Sergiu Marton <brown121407@posteo.ro>
 ;;; Copyright © 2021 Antero Mejr <antero@kodmin.com>
 ;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2021 Petr Hodina <phodina@protonmail.com>
+;;; Copyright © 2021 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2021 Jacob Hrbek <kreyren@rixotstudio.cz>
+;;; Copyright © 2021 Nicolas Graves <ngraves@ngraves.fr>
+;;; Copyright © 2022 Aleksandr Vityazev <avityazev@posteo.org>
+;;; Copyright © 2022 Marius Bakke <marius@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -44,8 +51,10 @@
   #:use-module (guix utils)
   #:use-module (gnu packages)
   #:use-module (gnu packages admin)
+  #:use-module (gnu packages autotools)
   #:use-module (gnu packages cmake)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages cpp)
   #:use-module (gnu packages crates-graphics)
   #:use-module (gnu packages crates-gtk)
   #:use-module (gnu packages crypto)
@@ -63,9 +72,11 @@
   #:use-module (gnu packages nettle)
   #:use-module (gnu packages pcre)
   #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages pulseaudio)
   #:use-module (gnu packages python)
   #:use-module (gnu packages rust)
   #:use-module (gnu packages rust-apps)
+  #:use-module (gnu packages sequoia)
   #:use-module (gnu packages serialization)
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages ssh)
@@ -74,6 +85,8 @@
   #:use-module (gnu packages web)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
+  #:use-module (gnu packages gtk)
+  #:use-module (gnu packages webkit)
   #:use-module (srfi srfi-1))
 
 ;;;
@@ -164,6 +177,43 @@ library in Rust.")
     (description "This package provides Actix actor framework for Rust.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-actix-0.8
+  (package
+    (inherit rust-actix-0.10)
+    (name "rust-actix")
+    (version "0.8.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "actix" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1xqyrwq7hgi640h5czy73zrkxl1s0yhm7laxga13dwhkfg9f6737"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-actix-http" ,rust-actix-http-0.2)
+        ("rust-actix-rt" ,rust-actix-rt-0.2)
+        ("rust-actix-derive" ,rust-actix-derive-0.4)
+        ("rust-bitflags" ,rust-bitflags-1)
+        ("rust-bytes" ,rust-bytes-0.4)
+        ("rust-crossbeam-channel" ,rust-crossbeam-channel-0.3)
+        ("rust-derive-more" ,rust-derive-more-0.14)
+        ("rust-futures" ,rust-futures-0.1)
+        ("rust-hashbrown" ,rust-hashbrown-0.3)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-log" ,rust-log-0.4)
+        ("rust-parking-lot" ,rust-parking-lot-0.8)
+        ("rust-smallvec" ,rust-smallvec-0.6)
+        ("rust-tokio-codec" ,rust-tokio-codec-0.1)
+        ("rust-tokio-executor" ,rust-tokio-executor-0.1)
+        ("rust-tokio-io" ,rust-tokio-io-0.1)
+        ("rust-tokio-tcp" ,rust-tokio-tcp-0.1)
+        ("rust-tokio-timer" ,rust-tokio-timer-0.2)
+        ("rust-trust-dns-resolver" ,rust-trust-dns-resolver-0.11))
+       #:cargo-development-inputs
+       (("rust-doc-comment" ,rust-doc-comment-0.3))))))
+
 (define-public rust-actix-codec-0.3
   (package
     (name "rust-actix-codec")
@@ -216,6 +266,26 @@ protocols.")
         ("rust-tokio" ,rust-tokio-0.2)
         ("rust-tokio-util" ,rust-tokio-util-0.2))))))
 
+(define-public rust-actix-codec-0.1
+  (package
+    (inherit rust-actix-codec-0.3)
+    (name "rust-actix-codec")
+    (version "0.1.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "actix-codec" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0lv42xf57y3kwy8nl2a9pkz35yvbspd9250virfr7p069fpi2b4z"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-bytes" ,rust-bytes-0.4)
+        ("rust-futures" ,rust-futures-0.1)
+        ("rust-log" ,rust-log-0.4)
+        ("rust-tokio-codec" ,rust-tokio-codec-0.1)
+        ("rust-tokio-io" ,rust-tokio-io-0.1))))))
+
 (define-public rust-actix-connect-2
   (package
     (name "rust-actix-connect")
@@ -298,6 +368,43 @@ protocols.")
                 ,(package-version rust-trust-dns-proto-0.18)))
              #t)))))))
 
+(define-public rust-actix-connect-0.2
+  (package
+    (inherit rust-actix-connect-2)
+    (name "rust-actix-connect")
+    (version "0.2.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "actix-connect" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "187whz05gjkp9pcza4i714v0a8yxlg3jdrzii7gaqsxl9fyykbcz"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-actix-codec" ,rust-actix-codec-0.1)
+        ("rust-actix-rt" ,rust-actix-rt-0.2)
+        ("rust-actix-service" ,rust-actix-service-0.4)
+        ("rust-actix-utils" ,rust-actix-utils-0.4)
+        ("rust-derive-more" ,rust-derive-more-0.15)
+        ("rust-either" ,rust-either-1)
+        ("rust-futures" ,rust-futures-0.1)
+        ("rust-http" ,rust-http-0.1)
+        ("rust-log" ,rust-log-0.4)
+        ("rust-openssl" ,rust-openssl-0.10)
+        ("rust-rustls" ,rust-rustls-0.15)
+        ("rust-tokio-current-thread" ,rust-tokio-current-thread-0.1)
+        ("rust-tokio-openssl" ,rust-tokio-openssl-0.3)
+        ("rust-tokio-rustls" ,rust-tokio-rustls-0.9)
+        ("rust-tokio-tcp" ,rust-tokio-tcp-0.1)
+        ("rust-trust-dns-resolver" ,rust-trust-dns-resolver-0.11)
+        ("rust-webpki" ,rust-webpki-0.19))
+       #:cargo-development-inputs
+       (("rust-actix-server-config" ,rust-actix-server-config-0.1)
+        ("rust-actix-test-server" ,rust-actix-test-server-0.2)
+        ("rust-bytes" ,rust-bytes-0.4))))))
+
 (define-public rust-actix-derive-0.5
   (package
     (name "rust-actix-derive")
@@ -325,6 +432,25 @@ protocols.")
      "This package provides proc macros for the Rust actor framework Actix.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-actix-derive-0.4
+  (package
+    (inherit rust-actix-derive-0.5)
+    (name "rust-actix-derive")
+    (version "0.4.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "actix-derive" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0v0mvq883aq5z6d0893bh32bfddvfajh5bm7nkl0l8idpzbzdx8b"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-proc-macro2" ,rust-proc-macro2-0.4)
+        ("rust-quote" ,rust-quote-0.6)
+        ("rust-syn" ,rust-syn-0.15))))))
+
 (define-public rust-actix-http-2
   (package
     (name "rust-actix-http")
@@ -448,6 +574,68 @@ protocols.")
        #:cargo-development-inputs
        (("rust-actix-http-test" ,rust-actix-http-test-1))))))
 
+(define-public rust-actix-http-0.2
+  (package
+    (inherit rust-actix-http-2)
+    (name "rust-actix-http")
+    (version "0.2.11")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "actix-http" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0fdi9pi33am22qbqni5dn2in11xfbchgsjnm9ws0s918rmvhzdgw"))))
+    ;; XXX: The crate fails to't build without rust-actix-http-test-0.2 making
+    ;; a circular dependency with rust-awc-0.2
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-actix-codec" ,rust-actix-codec-0.1)
+        ("rust-actix-connect" ,rust-actix-connect-0.2)
+        ("rust-actix-server-config" ,rust-actix-server-config-0.1)
+        ("rust-actix-service" ,rust-actix-service-0.4)
+        ("rust-actix-threadpool" ,rust-actix-threadpool-0.1)
+        ("rust-actix-utils" ,rust-actix-utils-0.4)
+        ("rust-base64" ,rust-base64-0.10)
+        ("rust-bitflags" ,rust-bitflags-1)
+        ("rust-brotli2" ,rust-brotli2-0.3)
+        ("rust-bytes" ,rust-bytes-0.4)
+        ("rust-chrono" ,rust-chrono-0.4)
+        ("rust-copyless" ,rust-copyless-0.1)
+        ("rust-derive-more" ,rust-derive-more-0.15)
+        ("rust-either" ,rust-either-1)
+        ("rust-encoding-rs" ,rust-encoding-rs-0.8)
+        ("rust-failure" ,rust-failure-0.1)
+        ("rust-flate2" ,rust-flate2-1)
+        ("rust-futures" ,rust-futures-0.1)
+        ("rust-h2" ,rust-h2-0.1)
+        ("rust-hashbrown" ,rust-hashbrown-0.6)
+        ("rust-http" ,rust-http-0.1)
+        ("rust-httparse" ,rust-httparse-1)
+        ("rust-indexmap" ,rust-indexmap-1)
+        ("rust-language-tags" ,rust-language-tags-0.2)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-log" ,rust-log-0.4)
+        ("rust-mime" ,rust-mime-0.3)
+        ("rust-openssl" ,rust-openssl-0.10)
+        ("rust-percent-encoding" ,rust-percent-encoding-2)
+        ("rust-rand" ,rust-rand-0.7)
+        ("rust-regex" ,rust-regex-1)
+        ("rust-ring" ,rust-ring-0.14)
+        ("rust-rustls" ,rust-rustls-0.15)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-json" ,rust-serde-json-1)
+        ("rust-serde-urlencoded" ,rust-serde-urlencoded-0.6)
+        ("rust-sha1" ,rust-sha1-0.6)
+        ("rust-slab" ,rust-slab-0.4)
+        ("rust-time" ,rust-time-0.1)
+        ("rust-tokio-current-thread" ,rust-tokio-current-thread-0.1)
+        ("rust-tokio-tcp" ,rust-tokio-tcp-0.1)
+        ("rust-tokio-timer" ,rust-tokio-timer-0.2)
+        ("rust-trust-dns-resolver" ,rust-trust-dns-resolver-0.11)
+        ("rust-webpki-roots" ,rust-webpki-roots-0.16))))))
+
 (define-public rust-actix-http-test-1
   (package
     (name "rust-actix-http-test")
@@ -496,6 +684,45 @@ protocols.")
 during testing.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-actix-http-test-0.2
+  (package
+    (inherit rust-actix-http-test-1)
+    (name "rust-actix-http-test-2")
+    (version "0.2.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "actix-http-test" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0m1ghgllf7ws5wk51x8phcdjq21phylawmvp7wb29zd1d0aw2aac"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-actix-codec" ,rust-actix-codec-0.1)
+        ("rust-actix-connect" ,rust-actix-connect-0.2)
+        ("rust-actix-rt" ,rust-actix-rt-0.2)
+        ("rust-actix-server" ,rust-actix-server-0.6)
+        ("rust-actix-service" ,rust-actix-service-0.4)
+        ("rust-actix-utils" ,rust-actix-utils-0.4)
+        ("rust-awc" ,rust-awc-0.2)
+        ("rust-base64" ,rust-base64-0.10)
+        ("rust-bytes" ,rust-bytes-0.4)
+        ("rust-env-logger" ,rust-env-logger-0.6)
+        ("rust-futures" ,rust-futures-0.1)
+        ("rust-http" ,rust-http-0.1)
+        ("rust-log" ,rust-log-0.4)
+        ("rust-net2" ,rust-net2-0.2)
+        ("rust-openssl" ,rust-openssl-0.10)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-json" ,rust-serde-json-1)
+        ("rust-serde-urlencoded" ,rust-serde-urlencoded-0.6)
+        ("rust-sha1" ,rust-sha1-0.6)
+        ("rust-slab" ,rust-slab-0.4)
+        ("rust-time" ,rust-time-0.1)
+        ("rust-tokio-tcp" ,rust-tokio-tcp-0.1)
+        ("rust-tokio-timer" ,rust-tokio-timer-0.2))))))
+
 (define-public rust-actix-macros-0.1
   (package
     (name "rust-actix-macros")
@@ -547,6 +774,28 @@ during testing.")
     (description "This package provides resource path matching library.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-actix-router-0.1
+  (package
+    (inherit rust-actix-router-0.2)
+    (name "rust-actix-router")
+    (version "0.1.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "actix-router" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1xyc0kzawfwjfiw4znb7xx6hh4r7nnwjq44i08fjc1724ysln8i3"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bytes" ,rust-bytes-0.4)
+        ("rust-http" ,rust-http-0.1)
+        ("rust-log" ,rust-log-0.4)
+        ("rust-regex" ,rust-regex-1)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-string" ,rust-string-0.2))))))
+
 (define-public rust-actix-rt-1
   (package
     (name "rust-actix-rt")
@@ -573,6 +822,28 @@ during testing.")
     (description "This package provides Actix runtime.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-actix-rt-0.2
+  (package
+    (inherit rust-actix-rt-1)
+    (name "rust-actix-rt")
+    (version "0.2.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "actix-rt" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "13h9dph54lhxlzcz6wxmsv96qqpbh1dzr4365gn84gb00qfxmjc8"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-actix-threadpool" ,rust-actix-threadpool-0.1)
+        ("rust-copyless" ,rust-copyless-0.1)
+        ("rust-futures" ,rust-futures-0.1)
+        ("rust-tokio-current-thread" ,rust-tokio-current-thread-0.1)
+        ("rust-tokio-executor" ,rust-tokio-executor-0.1)
+        ("rust-tokio-reactor" ,rust-tokio-reactor-0.1)
+        ("rust-tokio-timer" ,rust-tokio-timer-0.2))))))
+
 (define-public rust-actix-server-1
   (package
     (name "rust-actix-server")
@@ -608,6 +879,114 @@ during testing.")
 ecosystem.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-actix-server-0.6
+  (package
+    (inherit rust-actix-server-1)
+    (name "rust-actix-server")
+    (version "0.6.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "actix-server" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "19b2sl8dz01xfrynmf4iixq4a15g0gk1z43lby7762ldmws6aqnx"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-actix-rt" ,rust-actix-rt-0.2)
+        ("rust-actix-server-config" ,rust-actix-server-config-0.1)
+        ("rust-actix-service" ,rust-actix-service-0.4)
+        ("rust-futures" ,rust-futures-0.1)
+        ("rust-log" ,rust-log-0.4)
+        ("rust-mio" ,rust-mio-0.6)
+        ("rust-mio-uds" ,rust-mio-uds-0.6)
+        ("rust-native-tls" ,rust-native-tls-0.2)
+        ("rust-net2" ,rust-net2-0.2)
+        ("rust-num-cpus" ,rust-num-cpus-1)
+        ("rust-openssl" ,rust-openssl-0.10)
+        ("rust-rustls" ,rust-rustls-0.15)
+        ("rust-slab" ,rust-slab-0.4)
+        ("rust-tokio-io" ,rust-tokio-io-0.1)
+        ("rust-tokio-openssl" ,rust-tokio-openssl-0.3)
+        ("rust-tokio-reactor" ,rust-tokio-reactor-0.1)
+        ("rust-tokio-rustls" ,rust-tokio-rustls-0.9)
+        ("rust-tokio-signal" ,rust-tokio-signal-0.2)
+        ("rust-tokio-tcp" ,rust-tokio-tcp-0.1)
+        ("rust-tokio-timer" ,rust-tokio-timer-0.2)
+        ("rust-tokio-uds" ,rust-tokio-uds-0.2)
+        ("rust-webpki" ,rust-webpki-0.19)
+        ("rust-webpki-roots" ,rust-webpki-roots-0.16))
+       #:cargo-development-inputs
+       (("rust-actix-codec" ,rust-actix-codec-0.1)
+        ("rust-bytes" ,rust-bytes-0.4)
+        ("rust-env-logger" ,rust-env-logger-0.6))))))
+
+(define-public rust-actix-server-0.5
+  (package
+    (inherit rust-actix-server-1)
+    (name "rust-actix-server")
+    (version "0.5.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "actix-server" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1fyxkkgm3cbyzxgx0qw86i1dq9hrr891n1c7mc7450n8arir735s"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-actix-rt" ,rust-actix-rt-0.2)
+        ("rust-actix-server-config" ,rust-actix-server-config-0.1)
+        ("rust-actix-service" ,rust-actix-service-0.4)
+        ("rust-futures" ,rust-futures-0.1)
+        ("rust-log" ,rust-log-0.4)
+        ("rust-mio" ,rust-mio-0.6)
+        ("rust-native-tls" ,rust-native-tls-0.2)
+        ("rust-net2" ,rust-net2-0.2)
+        ("rust-num-cpus" ,rust-num-cpus-1)
+        ("rust-openssl" ,rust-openssl-0.10)
+        ("rust-rustls" ,rust-rustls-0.15)
+        ("rust-slab" ,rust-slab-0.4)
+        ("rust-tokio-io" ,rust-tokio-io-0.1)
+        ("rust-tokio-openssl" ,rust-tokio-openssl-0.3)
+        ("rust-tokio-reactor" ,rust-tokio-reactor-0.1)
+        ("rust-tokio-rustls" ,rust-tokio-rustls-0.9)
+        ("rust-tokio-signal" ,rust-tokio-signal-0.2)
+        ("rust-tokio-tcp" ,rust-tokio-tcp-0.1)
+        ("rust-tokio-timer" ,rust-tokio-timer-0.2)
+        ("rust-webpki" ,rust-webpki-0.19)
+        ("rust-webpki-roots" ,rust-webpki-roots-0.16))
+       #:cargo-development-inputs
+       (("rust-actix-codec" ,rust-actix-codec-0.1)
+        ("rust-bytes" ,rust-bytes-0.4)
+        ("rust-env-logger" ,rust-env-logger-0.6))))))
+
+(define-public rust-actix-server-config-0.1
+  (package
+    (name "rust-actix-server-config")
+    (version "0.1.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "actix-server-config" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0c7zp4l63n5skljbpq6j0a0avdjv6w067bdc5ca96bb8kjc38fj8"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-futures" ,rust-futures-0.1)
+        ("rust-rustls" ,rust-rustls-0.15)
+        ("rust-tokio-io" ,rust-tokio-io-0.1)
+        ("rust-tokio-openssl" ,rust-tokio-openssl-0.3)
+        ("rust-tokio-rustls" ,rust-tokio-rustls-0.9)
+        ("rust-tokio-tcp" ,rust-tokio-tcp-0.1)
+        ("rust-tokio-uds" ,rust-tokio-uds-0.2))))
+    (home-page "https://actix.rs")
+    (synopsis "Actix server config utils")
+    (description "Actix server config utils.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-actix-service-1
   (package
     (name "rust-actix-service")
@@ -635,6 +1014,24 @@ ecosystem.")
 asynchronous request/response operations.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-actix-service-0.4
+  (package
+    (inherit rust-actix-service-1)
+    (name "rust-actix-service")
+    (version "0.4.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "actix-service" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0gvpw11hcr1zmi5qzq3np6qzd0j51mdxn7yfgmzgyhc8ja7b99dw"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-futures" ,rust-futures-0.1))
+       #:cargo-development-inputs
+       (("rust-actix-rt" ,rust-actix-rt-0.2))))))
+
 (define-public rust-actix-testing-1
   (package
     (name "rust-actix-testing")
@@ -660,6 +1057,66 @@ asynchronous request/response operations.")
     (description "This package provides Actix testing utils.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-actix-testing-0.1
+  (package
+    (inherit rust-actix-testing-1)
+    (name "rust-actix-testing")
+    (version "0.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "actix-testing" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1w9p7wv2n2wda8ph3ahp8fqslmbh12vs206l4i49jl37mjbiw05g"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-actix-rt" ,rust-actix-rt-0.2)
+        ("rust-actix-server" ,rust-actix-server-0.6)
+        ("rust-actix-server-config" ,rust-actix-server-config-0.1)
+        ("rust-actix-service" ,rust-actix-service-0.4)
+        ("rust-futures" ,rust-futures-0.1)
+        ("rust-log" ,rust-log-0.4)
+        ("rust-net2" ,rust-net2-0.2)
+        ("rust-tokio-reactor" ,rust-tokio-reactor-0.1)
+        ("rust-tokio-tcp" ,rust-tokio-tcp-0.1))))))
+
+(define-public rust-actix-test-server-0.2
+  (package
+    (name "rust-actix-test-server")
+    (version "0.2.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "actix-test-server" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0lqx8adsl3nlhbnvvjrmy9mkfa0d8wmwyy4gdz5ik8xhbwibxnn2"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-actix-rt" ,rust-actix-rt-0.2)
+        ("rust-actix-server" ,rust-actix-server-0.5)
+        ("rust-actix-server-config" ,rust-actix-server-config-0.1)
+        ("rust-futures" ,rust-futures-0.1)
+        ("rust-log" ,rust-log-0.4)
+        ("rust-native-tls" ,rust-native-tls-0.2)
+        ("rust-net2" ,rust-net2-0.2)
+        ("rust-openssl" ,rust-openssl-0.10)
+        ("rust-rustls" ,rust-rustls-0.15)
+        ("rust-tokio-reactor" ,rust-tokio-reactor-0.1)
+        ("rust-tokio-rustls" ,rust-tokio-rustls-0.9)
+        ("rust-tokio-tcp" ,rust-tokio-tcp-0.1)
+        ("rust-webpki" ,rust-webpki-0.19)
+        ("rust-webpki-roots" ,rust-webpki-roots-0.16))
+       #:cargo-development-inputs
+       (("rust-actix-service" ,rust-actix-service-0.4))))
+    (home-page "https://actix.rs")
+    (synopsis "Actix test server")
+    (description "Actix test server.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-actix-threadpool-0.3
   (package
     (name "rust-actix-threadpool")
@@ -686,6 +1143,28 @@ asynchronous request/response operations.")
     (description "This package provides Actix thread pool for sync code.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-actix-threadpool-0.1
+  (package
+    (inherit rust-actix-threadpool-0.3)
+    (name "rust-actix-threadpool")
+    (version "0.1.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "actix-threadpool" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0pfk6k09cdw0w63wh8glqm6bvqz0hlqwhyqvdfw6yzns2dfyhnkb"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-derive-more" ,rust-derive-more-0.15)
+        ("rust-futures" ,rust-futures-0.1)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-log" ,rust-log-0.4)
+        ("rust-num-cpus" ,rust-num-cpus-1)
+        ("rust-parking-lot" ,rust-parking-lot-0.9)
+        ("rust-threadpool" ,rust-threadpool-1))))))
+
 (define-public rust-actix-tls-2
   (package
     (name "rust-actix-tls")
@@ -811,6 +1290,31 @@ the Actix ecosystem.")
         ("rust-pin-project" ,rust-pin-project-0.4)
         ("rust-slab" ,rust-slab-0.4))))))
 
+(define-public rust-actix-utils-0.4
+  (package
+    (inherit rust-actix-utils-2)
+    (name "rust-actix-utils")
+    (version "0.4.7")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "actix-utils" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "15bv06z7pccnmh067l5zj0fvpmfagnil7lvznnl3fp4gjh4k334h"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-actix-codec" ,rust-actix-codec-0.1)
+        ("rust-actix-service" ,rust-actix-service-0.4)
+        ("rust-bytes" ,rust-bytes-0.4)
+        ("rust-either" ,rust-either-1)
+        ("rust-futures" ,rust-futures-0.1)
+        ("rust-log" ,rust-log-0.4)
+        ("rust-tokio-current-thread" ,rust-tokio-current-thread-0.1)
+        ("rust-tokio-timer" ,rust-tokio-timer-0.2))
+       #:cargo-development-inputs
+       (("rust-actix-rt" ,rust-actix-rt-0.2))))))
+
 (define-public rust-actix-web-3
   (package
     (name "rust-actix-web")
@@ -914,6 +1418,61 @@ Rust.")
         ("rust-time" ,rust-time-0.1)
         ("rust-url" ,rust-url-2))))))
 
+(define-public rust-actix-web-1
+  (package
+    (inherit rust-actix-web-3)
+    (name "rust-actix-web")
+    (version "1.0.9")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "actix-web" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "00wvayn7v2s61hylisr53f48s2bzg8jp3bmrqh1vkb6vgjb1nfmg"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-actix-codec" ,rust-actix-codec-0.1)
+        ("rust-actix-http" ,rust-actix-http-0.2)
+        ("rust-actix-router" ,rust-actix-router-0.1)
+        ("rust-actix-rt" ,rust-actix-rt-0.2)
+        ("rust-actix-server" ,rust-actix-server-0.6)
+        ("rust-actix-server-config" ,rust-actix-server-config-0.1)
+        ("rust-actix-service" ,rust-actix-service-0.4)
+        ("rust-actix-testing" ,rust-actix-testing-0.1)
+        ("rust-actix-threadpool" ,rust-actix-threadpool-0.1)
+        ("rust-actix-utils" ,rust-actix-utils-0.4)
+        ("rust-actix-web-codegen" ,rust-actix-web-codegen-0.1)
+        ("rust-awc" ,rust-awc-0.2)
+        ("rust-bytes" ,rust-bytes-0.4)
+        ("rust-derive-more" ,rust-derive-more-0.15)
+        ("rust-encoding-rs" ,rust-encoding-rs-0.8)
+        ("rust-futures" ,rust-futures-0.1)
+        ("rust-hashbrown" ,rust-hashbrown-0.6)
+        ("rust-log" ,rust-log-0.4)
+        ("rust-mime" ,rust-mime-0.3)
+        ("rust-net2" ,rust-net2-0.2)
+        ("rust-openssl" ,rust-openssl-0.10)
+        ("rust-parking-lot" ,rust-parking-lot-0.9)
+        ("rust-regex" ,rust-regex-1)
+        ("rust-rustls" ,rust-rustls-0.15)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-json" ,rust-serde-json-1)
+        ("rust-serde-urlencoded" ,rust-serde-urlencoded-0.6)
+        ("rust-time" ,rust-time-0.1)
+        ("rust-url" ,rust-url-2))
+       #:cargo-development-inputs
+       (("rust-actix" ,rust-actix-0.8)
+        ("rust-actix-connect" ,rust-actix-connect-0.2)
+        ("rust-actix-http-test" ,rust-actix-http-test-0.2)
+        ("rust-brotli2" ,rust-brotli2-0.3)
+        ("rust-env-logger" ,rust-env-logger-0.6)
+        ("rust-flate2" ,rust-flate2-1)
+        ("rust-rand" ,rust-rand-0.7)
+        ("rust-serde-derive" ,rust-serde-derive-1)
+        ("rust-tokio-timer" ,rust-tokio-timer-0.2))))))
+
 (define-public rust-actix-web-codegen-0.4
   (package
     (name "rust-actix-web-codegen")
@@ -958,6 +1517,33 @@ Rust.")
        (("rust-actix-rt" ,rust-actix-rt-1)
         ("rust-actix-web" ,rust-actix-web-2))))))
 
+(define-public rust-actix-web-codegen-0.1
+  (package
+    (inherit rust-actix-web-codegen-0.4)
+    (name "rust-actix-web-codegen")
+    (version "0.1.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "actix-web-codegen" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1frs0id6k1vjczhnfhwh8q8birp27imlvgi6jylfxh911r9372h6"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-proc-macro2" ,rust-proc-macro2-1)
+        ("rust-quote" ,rust-quote-1)
+        ("rust-syn" ,rust-syn-1))
+       #:cargo-development-inputs
+       (("rust-actix-http" ,rust-actix-http-0.2)
+        ("rust-actix-http-test" ,rust-actix-http-test-0.2)
+        ("rust-actix-web" ,rust-actix-web-1)
+        ("rust-futures" ,rust-futures-0.1))))
+    (native-inputs
+     (list pkg-config))
+    (inputs
+     (list openssl))))
+
 (define-public rust-adaptive-barrier-0.1
   (package
     (name "rust-adaptive-barrier")
@@ -980,6 +1566,59 @@ threads.  This makes it robust in face of panics (it won't make your program
 deadlock, like the standard Barrier).")
     (license (list license:asl2.0 license:expat))))
 
+(define-public rust-adblock-0.4
+  (package
+    (name "rust-adblock")
+    (version "0.4.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/brave/adblock-rust")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (patches (search-patches "rust-adblock-ignore-live-tests.patch"))
+       (sha256
+        (base32
+         "0l2iacwkm66z6wc71wy62x2k5xllx94adrqncicxqsx203c3ljpl"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-addr" ,rust-addr-0.14)
+        ("rust-base64" ,rust-base64-0.13)
+        ("rust-bitflags" ,rust-bitflags-1)
+        ("rust-cssparser" ,rust-cssparser-0.25)
+        ("rust-flate2" ,rust-flate2-1)
+        ("rust-idna" ,rust-idna-0.2)
+        ("rust-itertools" ,rust-itertools-0.10)
+        ("rust-lifeguard" ,rust-lifeguard-0.6)
+        ("rust-once-cell" ,rust-once-cell-1)
+        ("rust-percent-encoding"
+         ,rust-percent-encoding-2)
+        ("rust-regex" ,rust-regex-1)
+        ("rust-rmp-serde" ,rust-rmp-serde-0.13)
+        ("rust-rmp-serde" ,rust-rmp-serde-0.15)
+        ("rust-seahash" ,rust-seahash-3)
+        ("rust-selectors" ,rust-selectors-0.21)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-json" ,rust-serde-json-1)
+        ("rust-twoway" ,rust-twoway-0.2)
+        ("rust-url" ,rust-url-2))
+       #:cargo-development-inputs
+       (("rust-criterion" ,rust-criterion-0.3)
+        ("rust-csv" ,rust-csv-1)
+        ("rust-futures" ,rust-futures-0.3)
+        ("rust-reqwest" ,rust-reqwest-0.11)
+        ("rust-serde-json" ,rust-serde-json-1)
+        ("rust-sha2" ,rust-sha2-0.9)
+        ("rust-tokio" ,rust-tokio-1.8))))
+    (native-inputs (list pkg-config openssl))
+    (home-page "https://github.com/brave/adblock-rust/")
+    (synopsis "Adblock Plus syntax filter parsing and matching")
+    (description "This package provides native Rust module for Adblock Plus
+syntax (e.g.  EasyList, EasyPrivacy) filter parsing and matching.")
+    (license license:mpl2.0)))
+
 (define-public rust-addr2line-0.14
   (package
     (name "rust-addr2line")
@@ -1011,6 +1650,32 @@ deadlock, like the standard Barrier).")
 Rust, using gimli.")
     (license (list license:asl2.0 license:expat))))
 
+(define-public rust-addr-0.14
+  (package
+    (name "rust-addr")
+    (version "0.14.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "addr" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32
+            "0w6v0wwv203v0lyvwsq27rwfhvmw7dsmrqc9r3gszbx2974wlk65"))))
+    (build-system cargo-build-system)
+    (arguments
+      `(#:skip-build? #t
+        #:cargo-inputs
+        (("rust-no-std-net" ,rust-no-std-net-0.5)
+         ("rust-psl" ,rust-psl-2)
+         ("rust-psl-types" ,rust-psl-types-2)
+         ("rust-publicsuffix" ,rust-publicsuffix-2)
+         ("rust-serde" ,rust-serde-1))))
+    (home-page "https://github.com/addr-rs/addr")
+    (synopsis "Parsing domain names")
+    (description "This package provides a library for parsing domain names.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-addr2line-0.11
   (package
     (inherit rust-addr2line-0.14)
@@ -1110,7 +1775,7 @@ checksum, used in the zlib compression format.")
         (method url-fetch)
         (uri (crate-uri "adler32" version))
         (file-name
-          (string-append name "-" version ".crate"))
+          (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0bgks405vz823bphgwhj4l9h6vpfh900s0phfk4qqijyh9xhfysn"))))
@@ -1130,6 +1795,33 @@ the Rust programming language.")
     (license (list license:bsd-3
                    license:zlib))))
 
+(define-public rust-aead-0.4
+  (package
+    (name "rust-aead-4")
+    (version "0.4.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "aead" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0xw8kp9j1whfdxhgmr2qf9xgslkg52zh6gzmhsh13y9w3s73nq8b"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-blobby" ,rust-blobby-0.3)
+        ("rust-generic-array" ,rust-generic-array-0.14)
+        ("rust-heapless" ,rust-heapless-0.7)
+        ("rust-rand-core" ,rust-rand-core-0.6))))
+    (home-page "https://github.com/RustCrypto/traits")
+    (synopsis
+     "Traits for Authenticated Encryption with Associated Data (AEAD) algorithms")
+    (description
+     "This package provides traits for Authenticated Encryption with Associated
+Data (AEAD) algorithms, such as AES-GCM as ChaCha20Poly1305, which provide a
+high-level API.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-aead-0.3
   (package
     (name "rust-aead")
@@ -1173,8 +1865,55 @@ with Associated Data (AEAD) algorithms.")
        (("rust-generic-array" ,rust-generic-array-0.12)
         ("rust-heapless" ,rust-heapless-0.5))))))
 
+(define-public rust-aes-0.7
+  (package
+    (name "rust-aes")
+    (version "0.7.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "aes" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1f0sdx2fsa8w3l7xzsyi9ry3shvnnsgc0znh50if9fm95vslg2wy"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-cfg-if" ,rust-cfg-if-1)
+        ("rust-cipher" ,rust-cipher-0.3)
+        ("rust-cpufeatures" ,rust-cpufeatures-0.2)
+        ("rust-ctr" ,rust-ctr-0.8)
+        ("rust-opaque-debug" ,rust-opaque-debug-0.3))))
+    (home-page "https://github.com/RustCrypto/block-ciphers")
+    (synopsis "Facade for AES (Rijndael) block ciphers implementations")
+    (description "This package provides a facade for AES (Rijndael) block
+ciphers implementations.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-aes-0.6
+  (package
+    (inherit rust-aes-0.7)
+    (name "rust-aes")
+    (version "0.6.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "aes" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0q85mw70mgr4glza9y9lrs9nxfa1cdcqzfk6wx0smb3623pr2hw8"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-aes-soft" ,rust-aes-soft-0.6)
+        ("rust-aesni" ,rust-aesni-0.10)
+        ("rust-cipher" ,rust-cipher-0.2))
+       #:cargo-development-inputs
+       (("rust-cipher" ,rust-cipher-0.2))))))
+
 (define-public rust-aes-0.4
   (package
+    (inherit rust-aes-0.6)
     (name "rust-aes")
     (version "0.4.0")
     (source
@@ -1185,19 +1924,13 @@ with Associated Data (AEAD) algorithms.")
        (sha256
         (base32
          "1xgsp2bn5llsppald60iw4497gaspslg0a8hknhniiz4zmki607p"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-aes-soft" ,rust-aes-soft-0.4)
         ("rust-aesni" ,rust-aesni-0.7)
         ("rust-block-cipher" ,rust-block-cipher-0.7))
        #:cargo-development-inputs
-       (("rust-block-cipher" ,rust-block-cipher-0.7))))
-    (home-page "https://github.com/RustCrypto/block-ciphers")
-    (synopsis "Facade for AES (Rijndael) block ciphers implementations")
-    (description "This package provides a facade for AES (Rijndael) block
-ciphers implementations.")
-    (license (list license:expat license:asl2.0))))
+       (("rust-block-cipher" ,rust-block-cipher-0.7))))))
 
 (define-public rust-aes-0.3
   (package
@@ -1218,8 +1951,40 @@ ciphers implementations.")
         ("rust-aesni" ,rust-aesni-0.6)
         ("rust-block-cipher-trait" ,rust-block-cipher-trait-0.6))))))
 
+(define-public rust-aes-gcm-0.8
+  (package
+    (name "rust-aes-gcm")
+    (version "0.8.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "aes-gcm" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1nl8iwlh209y1vj9n2lm1a70i69clvg2z6x69bi4dgdrpgxbay2j"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-aead" ,rust-aead-0.3)
+        ("rust-aes" ,rust-aes-0.6)
+        ("rust-cipher" ,rust-cipher-0.2)
+        ("rust-ctr" ,rust-ctr-0.6)
+        ("rust-ghash" ,rust-ghash-0.3)
+        ("rust-subtle" ,rust-subtle-2)
+        ("rust-zeroize" ,rust-zeroize-1))
+       #:cargo-development-inputs
+       (("rust-hex-literal" ,rust-hex-literal-0.2))))
+    (home-page "https://github.com/RustCrypto/AEADs")
+    (synopsis "AES-GCM (Galois/Counter Mode) Authenticated Encryption")
+    (description "This package provides a pure Rust implementation of the
+AES-GCM (Galois/Counter Mode) Authenticated Encryption with Associated
+Data (AEAD) Cipher with optional architecture-specific hardware
+acceleration.")
+    (license (list license:asl2.0 license:expat))))
+
 (define-public rust-aes-gcm-0.6
   (package
+    (inherit rust-aes-gcm-0.8)
     (name "rust-aes-gcm")
     (version "0.6.0")
     (source
@@ -1230,7 +1995,6 @@ ciphers implementations.")
        (sha256
         (base32
          "1lga8my3zlc0b1nhcpc1hrbykfm014fqs6d64bwrjqii05w01xc6"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-aead" ,rust-aead-0.3)
@@ -1243,14 +2007,7 @@ ciphers implementations.")
        (("rust-criterion" ,rust-criterion-0.3)
         ("rust-criterion-cycles-per-byte"
          ,rust-criterion-cycles-per-byte-0.1)
-        ("rust-hex-literal" ,rust-hex-literal-0.2))))
-    (home-page "https://github.com/RustCrypto/AEADs")
-    (synopsis "AES-GCM (Galois/Counter Mode) Authenticated Encryption")
-    (description "This package provides a pure Rust implementation of the
-AES-GCM (Galois/Counter Mode) Authenticated Encryption with Associated
-Data (AEAD) Cipher with optional architecture-specific hardware
-acceleration.")
-    (license (list license:asl2.0 license:expat))))
+        ("rust-hex-literal" ,rust-hex-literal-0.2))))))
 
 (define-public rust-aes-gcm-0.5
   (package
@@ -1274,21 +2031,21 @@ acceleration.")
         ("rust-subtle" ,rust-subtle-2)
         ("rust-zeroize" ,rust-zeroize-1))))))
 
-(define-public rust-aes-soft-0.4
+(define-public rust-aes-soft-0.6
   (package
     (name "rust-aes-soft")
-    (version "0.4.0")
+    (version "0.6.4")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "aes-soft" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32
-         "19szsg0qqxq42k7bj5p3svb147n8wxy9a20n4g7mcl2fwrz689a9"))))
+        (base32 "0wj0fi2pvmlw09yvb1aqf0mfkzrfxmjsf90finijh255ir4wf55y"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:cargo-inputs
+     `(#:skip-build? #t
+       #:cargo-inputs
        (("rust-block-cipher" ,rust-block-cipher-0.7)
         ("rust-byteorder" ,rust-byteorder-1)
         ("rust-opaque-debug" ,rust-opaque-debug-0.2))
@@ -1297,9 +2054,32 @@ acceleration.")
     (home-page "https://github.com/RustCrypto/block-ciphers")
     (synopsis "Bit-sliced implementation of AES (Rijndael) block ciphers")
     (description "This package provides a bit-sliced implementation of
-AES (Rijndael) block ciphers.")
+AES (Rijndael) block ciphers.
+
+This package is deprecated and was replaced by the @code{aes} crate.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-aes-soft-0.4
+  (package
+    (inherit rust-aes-soft-0.6)
+    (name "rust-aes-soft")
+    (version "0.4.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "aes-soft" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "19szsg0qqxq42k7bj5p3svb147n8wxy9a20n4g7mcl2fwrz689a9"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-block-cipher" ,rust-block-cipher-0.7)
+        ("rust-byteorder" ,rust-byteorder-1)
+        ("rust-opaque-debug" ,rust-opaque-debug-0.2))
+       #:cargo-development-inputs
+       (("rust-block-cipher" ,rust-block-cipher-0.7))))))
+
 (define-public rust-aes-soft-0.3
   (package
     (inherit rust-aes-soft-0.4)
@@ -1319,8 +2099,34 @@ AES (Rijndael) block ciphers.")
         ("rust-byteorder" ,rust-byteorder-1)
         ("rust-opaque-debug" ,rust-opaque-debug-0.2))))))
 
+(define-public rust-aesni-0.10
+  (package
+    (name "rust-aesni")
+    (version "0.10.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "aesni" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1kmh07fp9hbi1aa8dr2rybbgw8vqz6hjmk34c4w7sbscx7si2bpa"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-cipher" ,rust-cipher-0.2)
+        ("rust-opaque-debug" ,rust-opaque-debug-0.3))))
+    (home-page "https://github.com/RustCrypto/block-ciphers")
+    (synopsis "AES (Rijndael) block ciphers implementation using AES-NI")
+    (description "This package provides an implementation of AES (Rijndael)
+block ciphers using AES-NI.
+
+This package is deprecated and was replaced by the @code{aes} crate.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-aesni-0.7
   (package
+    (inherit rust-aesni-0.10)
     (name "rust-aesni")
     (version "0.7.0")
     (source
@@ -1331,7 +2137,6 @@ AES (Rijndael) block ciphers.")
        (sha256
         (base32
          "0r6j0mjkyqnwvgib01cvrwfw8rlx1biw75234niv723n1fdx6l6h"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-block-cipher" ,rust-block-cipher-0.7)
@@ -1339,12 +2144,7 @@ AES (Rijndael) block ciphers.")
         ("rust-stream-cipher" ,rust-stream-cipher-0.4))
        #:cargo-development-inputs
        (("rust-block-cipher" ,rust-block-cipher-0.7)
-        ("rust-stream-cipher" ,rust-stream-cipher-0.4))))
-    (home-page "https://github.com/RustCrypto/block-ciphers")
-    (synopsis "AES (Rijndael) block ciphers implementation using AES-NI")
-    (description "This package provides an implementation of AES (Rijndael)
-block ciphers using AES-NI.")
-    (license (list license:expat license:asl2.0))))
+        ("rust-stream-cipher" ,rust-stream-cipher-0.4))))))
 
 (define-public rust-aesni-0.6
   (package
@@ -1516,6 +2316,30 @@ using AES-NI for high performance.")
         ("rust-rand" ,rust-rand-0.6)
         ("rust-seahash" ,rust-seahash-3))))))
 
+(define-public rust-ahash-0.2
+  (package
+    (inherit rust-ahash-0.4)
+    (name "rust-ahash")
+    (version "0.2.19")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "ahash" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1yzdrxaq99zfy0niq5i3cz5jv569s3s6z5q2cxcg08y6prh1nri9"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-const-random" ,rust-const-random-0.1))
+       #:cargo-development-inputs
+       (("rust-criterion" ,rust-criterion-0.2)
+        ("rust-fnv" ,rust-fnv-1)
+        ("rust-fxhash" ,rust-fxhash-0.2)
+        ("rust-hex" ,rust-hex-0.3)
+        ("rust-no-panic" ,rust-no-panic-0.1)
+        ("rust-rand" ,rust-rand-0.6)
+        ("rust-seahash" ,rust-seahash-3))))))
+
 (define-public rust-aho-corasick-0.7
   (package
     (name "rust-aho-corasick")
@@ -1638,7 +2462,7 @@ using AES-NI for high performance.")
         ("rust-mio-anonymous-pipes" ,rust-mio-anonymous-pipes-0.2)
         ("rust-mio-extras" ,rust-mio-extras-2)
         ("rust-miow" ,rust-miow-0.3)
-        ("rust-nix" ,rust-nix-0.22)
+        ("rust-nix" ,rust-nix-0.23)
         ("rust-parking-lot" ,rust-parking-lot-0.11)
         ("rust-regex-automata" ,rust-regex-automata-0.1)
         ("rust-serde" ,rust-serde-1)
@@ -1714,6 +2538,50 @@ code that is generic with regard to the algebraic entity types.")
 @code{alga} crate.")
     (license license:asl2.0)))
 
+(define-public rust-aliasable-deref-trait-0.2
+  (package
+    (name "rust-aliasable-deref-trait")
+    (version "0.2.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "aliasable_deref_trait" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0abzqsxd09jxl01brzjnwk8zg7k8zma76gzq87385q8fqm710jxb"))))
+    (build-system cargo-build-system)
+    (arguments '(#:skip-build? #t))
+    (home-page "https://github.com/avitex/rust-aliasable-deref-trait")
+    (synopsis "Marker trait for aliasable pointers")
+    (description
+     "This package provides a marker trait for types that deref to an
+address that is aliasable when coerced to a raw pointer")
+    (license license:expat)))
+
+(define-public rust-aliasable-0.1
+  (package
+    (name "rust-aliasable")
+    (version "0.1.3")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "aliasable" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32 "1z8548zdjlm4ps1k0d7x68lfdyji02crwcc9rw3q3bb106f643r5"))))
+    (build-system cargo-build-system)
+    (arguments
+      `(#:skip-build? #t
+        #:cargo-inputs
+        (("rust-aliasable-deref-trait" ,rust-aliasable-deref-trait-0.2)
+         ("rust-stable-deref-trait" ,rust-stable-deref-trait-1))))
+    (home-page "https://github.com/avitex/rust-aliasable")
+    (synopsis "Basic aliasable (non unique pointer) types")
+    (description
+     "Rust library providing basic aliasable (non @code{core::ptr::Unique})
+types.")
+    (license license:expat)))
+
 (define-public rust-alloc-no-stdlib-2
   (package
     (name "rust-alloc-no-stdlib")
@@ -1753,7 +2621,7 @@ options to use calloc or a mutable global variable for pre-zeroed memory.")
      `(#:cargo-inputs
        (("rust-alloc-no-stdlib" ,rust-alloc-no-stdlib-2))))
     (home-page "https://github.com/dropbox/rust-alloc-no-stdlib")
-    (synopsis "A dynamic allocator example that may be used with the stdlib")
+    (synopsis "Dynamic allocator example that may be used with the stdlib")
     (description "This package provides a dynamic allocator example that may
 be used with the stdlib.")
     (license license:bsd-3)))
@@ -1878,7 +2746,7 @@ escape codes.")
       (origin
         (method url-fetch)
         (uri (crate-uri "antidote" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "19g2sw2qa2ibnh4x7j1snk46593jgx6y7rnvva496ynq61af5z9l"))))
@@ -1894,7 +2762,7 @@ escape codes.")
 (define-public rust-anyhow-1
   (package
     (name "rust-anyhow")
-    (version "1.0.37")
+    (version "1.0.46")
     (source
      (origin
        (method url-fetch)
@@ -1903,7 +2771,7 @@ escape codes.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "11kaqp25lchr2ckyc46zm6blzndnw0w2w8qv0sp8z4xcxqgw2rzf"))))
+         "0w0zm1bqk5kbk834r4xszlzqiln4vw5k1lnlswyjkh24khi2ia1s"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-development-inputs
@@ -1970,6 +2838,30 @@ type.")
 on every platform.")
     (license license:expat)))
 
+(define-public rust-approx-0.5
+  (package
+    (name "rust-approx")
+    (version "0.5.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "approx" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "17p9g3yl061zdlrqj10npybmng81jz71dzmcanmjgcb35qhgfb87"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-num-complex" ,rust-num-complex-0.4)
+        ("rust-num-traits" ,rust-num-traits-0.2))))
+    (home-page "https://github.com/brendanzab/approx")
+    (synopsis "Approximate floating point equality comparisons and assertions")
+    (description
+     "This crate provides facilities for testing the approximate equality of
+floating-point based types, using either relative difference, or units in the
+last place (ULPs) comparisons.")
+    (license license:asl2.0)))
+
 (define-public rust-approx-0.4
   (package
     (name "rust-approx")
@@ -2094,20 +2986,21 @@ coverage-guided, mutation-based fuzzers.")
 (define-public rust-arboard-1
   (package
     (name "rust-arboard")
-    (version "1.1.0")
+    (version "1.2.1")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "arboard" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0wpyv732fxkplmiwik1sbgdlnbk748w1aqpkc71gn5lm2ns9w545"))))
+        (base32 "1a5qfmpzcf5rwlwsligf9z1gzndpvj0jncc4s3k3z5g214c4l127"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-clipboard-win" ,rust-clipboard-win-4)
         ("rust-core-graphics" ,rust-core-graphics-0.21)
+        ("rust-env-logger" ,rust-env-logger-0.8)
         ("rust-image" ,rust-image-0.23)
         ("rust-lazy-static" ,rust-lazy-static-1)
         ("rust-libc" ,rust-libc-0.2)
@@ -2115,9 +3008,11 @@ coverage-guided, mutation-based fuzzers.")
         ("rust-objc-foundation" ,rust-objc-foundation-0.1)
         ("rust-objc-id" ,rust-objc-id-0.1)
         ("rust-scopeguard" ,rust-scopeguard-1)
+        ("rust-simple-logger" ,rust-simple-logger-1)
         ("rust-thiserror" ,rust-thiserror-1)
         ("rust-winapi" ,rust-winapi-0.3)
-        ("rust-xcb" ,rust-xcb-0.9))))
+        ("rust-wl-clipboard-rs" ,rust-wl-clipboard-rs-0.4)
+        ("rust-x11rb" ,rust-x11rb-0.8))))
     (home-page "https://github.com/ArturKovacs/arboard")
     (synopsis "Image and text handling for the OS clipboard")
     (description
@@ -2202,6 +3097,71 @@ coverage-guided, mutation-based fuzzers.")
 @code{arg_enum}.")
     (license license:expat)))
 
+(define-public rust-argh-shared-0.1
+  (package
+    (name "rust-argh-shared")
+    (version "0.1.6")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "argh_shared" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32 "0crzkzr4mq9gyys3m0idgsfwwrwd4dk70scp7rspvb2fmgd01piq"))))
+    (build-system cargo-build-system)
+    (arguments `(#:skip-build? #t))
+    (home-page "https://github.com/google/argh")
+    (synopsis "Derive-based argument parsing optimized for code size")
+    (description "Derive-based argument parsing optimized for code size")
+    (license license:bsd-3)))
+
+(define-public rust-argh-derive-0.1
+  (package
+    (name "rust-argh-derive")
+    (version "0.1.6")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "argh_derive" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32 "13qz9i9frdjl1v9aqw5b2cs7wn3h34x2xkpsi9wcl1hcpjd23ba8"))))
+    (build-system cargo-build-system)
+    (arguments
+      `(#:skip-build?
+        #t
+        #:cargo-inputs
+        (("rust-argh-shared" ,rust-argh-shared-0.1)
+         ("rust-heck" ,rust-heck-0.3)
+         ("rust-proc-macro2" ,rust-proc-macro2-1)
+         ("rust-quote" ,rust-quote-1)
+         ("rust-syn" ,rust-syn-1))))
+    (home-page "https://github.com/google/argh")
+    (synopsis "Derive-based argument parsing optimized for code size")
+    (description "Derive-based argument parsing optimized for code size")
+    (license license:bsd-3)))
+
+(define-public rust-argh-0.1
+  (package
+    (name "rust-argh")
+    (version "0.1.6")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "argh" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32 "1gy9y69d38q7f5147kj823swgggc3m30x7z2z1lrjpwpsxncf8zh"))))
+    (build-system cargo-build-system)
+    (arguments
+      `(#:cargo-inputs
+        (("rust-argh-derive" ,rust-argh-derive-0.1)
+         ("rust-argh-shared" ,rust-argh-shared-0.1))))
+    (home-page "https://github.com/google/argh")
+    (synopsis "Derive-based argument parser optimized for code size")
+    (description "Derive-based argument parser optimized for code size")
+    (license license:bsd-3)))
+
 (define-public rust-argon2rs-0.2
   (package
     (name "rust-argon2rs")
@@ -2235,6 +3195,25 @@ coverage-guided, mutation-based fuzzers.")
 that runs on Argon2.")
     (license license:expat)))
 
+(define-public rust-array-macro-1
+  (package
+    (name "rust-array-macro")
+    (version "1.0.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "array-macro" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "19mdx2xlppnqwl6rhsbzylx61a0kkp2ql8q16195b7iga977ps86"))))
+    (build-system cargo-build-system)
+    (arguments `(#:skip-build? #t))
+    (home-page "https://gitlab.com/KonradBorowski/array-macro")
+    (synopsis "Array multiple elements constructor syntax")
+    (description "This package implements constructor syntax for arrays with
+multiple elements.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-array-ops-0.1
   (package
     (name "rust-array-ops")
@@ -2433,6 +3412,165 @@ format.")
         ("rust-serde-derive" ,rust-serde-derive-1)
         ("rust-serde-json" ,rust-serde-json-1))))))
 
+(define-public rust-arrow-format-0.3
+  (package
+    (name "rust-arrow-format")
+    (version "0.3.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "arrow-format" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0apg3x3yllbazh6jr85g5yammjqxpnrk6jm4n2yypyhbcvcs4zcz"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-flatbuffers" ,rust-flatbuffers-2)
+        ("rust-prost" ,rust-prost-0.9)
+        ("rust-prost-derive" ,rust-prost-derive-0.9)
+        ("rust-tonic" ,rust-tonic-0.6))))
+    (home-page "https://crates.io/crates/arrow-format")
+    (synopsis "Unofficial flatbuffers and tonic code of Apache Arrow spec")
+    (description "This package provides an nofficial flatbuffers and tonic
+code of Apache Arrow spec.")
+    (license license:asl2.0)))
+
+(define-public rust-arrow2-0.7
+  (package
+    (name "rust-arrow2")
+    (version "0.7.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "arrow2" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "15dkirkx07bagjgcar2ikmvs0d1zsk5l99bsszla91rxbivy4wyq"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-ahash" ,rust-ahash-0.7)
+        ("rust-arrow-format" ,rust-arrow-format-0.3)
+        ("rust-avro-rs" ,rust-avro-rs-0.13)
+        ("rust-base64" ,rust-base64-0.13)
+        ("rust-chrono" ,rust-chrono-0.4)
+        ("rust-chrono-tz" ,rust-chrono-tz-0.6)
+        ("rust-comfy-table" ,rust-comfy-table-4)
+        ("rust-csv" ,rust-csv-1)
+        ("rust-futures" ,rust-futures-0.3)
+        ("rust-hash-hasher" ,rust-hash-hasher-2)
+        ("rust-hex" ,rust-hex-0.4)
+        ("rust-indexmap" ,rust-indexmap-1)
+        ("rust-itertools" ,rust-itertools-0.10)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-lexical-core" ,rust-lexical-core-0.8)
+        ("rust-libflate" ,rust-libflate-1)
+        ("rust-lz4" ,rust-lz4-1)
+        ("rust-multiversion" ,rust-multiversion-0.6)
+        ("rust-num-traits" ,rust-num-traits-0.2)
+        ("rust-packed-simd-2" ,rust-packed-simd-2-0.3)
+        ("rust-parquet2" ,rust-parquet2-0.6)
+        ("rust-rand" ,rust-rand-0.8)
+        ("rust-regex" ,rust-regex-1)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-derive" ,rust-serde-derive-1)
+        ("rust-serde-json" ,rust-serde-json-1)
+        ("rust-simdutf8" ,rust-simdutf8-0.1)
+        ("rust-streaming-iterator" ,rust-streaming-iterator-0.1)
+        ("rust-strength-reduce" ,rust-strength-reduce-0.2)
+        ("rust-zstd" ,rust-zstd-0.9))))
+    (home-page "https://github.com/jorgecarleitao/arrow2")
+    (synopsis "Unofficial implementation of Apache Arrow spec in safe Rust")
+    (description
+     "Arrow2 is a Rust library to work with the Arrow format.  It is
+a re-write of the official Arrow crate using transmute-free operations.")
+    (license license:asl2.0)))
+
+(define-public rust-arrow2-0.5
+  (package
+    (inherit rust-arrow2-0.7)
+    (name "rust-arrow2")
+    (version "0.5.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "arrow2" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "042m859jfffnhi84qc919pkyanlr98wqqf67pcrylk4hhh0v84xx"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-ahash" ,rust-ahash-0.7)
+        ("rust-base64" ,rust-base64-0.13)
+        ("rust-chrono" ,rust-chrono-0.4)
+        ("rust-chrono-tz" ,rust-chrono-tz-0.5)
+        ("rust-comfy-table" ,rust-comfy-table-4)
+        ("rust-csv" ,rust-csv-1)
+        ("rust-flatbuffers" ,rust-flatbuffers-2)
+        ("rust-futures" ,rust-futures-0.3)
+        ("rust-hash-hasher" ,rust-hash-hasher-2)
+        ("rust-hex" ,rust-hex-0.4)
+        ("rust-indexmap" ,rust-indexmap-1)
+        ("rust-itertools" ,rust-itertools-0.10)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-lexical-core" ,rust-lexical-core-0.8)
+        ("rust-lz4" ,rust-lz4-1)
+        ("rust-multiversion" ,rust-multiversion-0.6)
+        ("rust-num-traits" ,rust-num-traits-0.2)
+        ("rust-packed-simd-2" ,rust-packed-simd-2-0.3)
+        ("rust-parquet2" ,rust-parquet2-0.4)
+        ("rust-rand" ,rust-rand-0.8)
+        ("rust-regex" ,rust-regex-1)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-derive" ,rust-serde-derive-1)
+        ("rust-serde-json" ,rust-serde-json-1)
+        ("rust-streaming-iterator" ,rust-streaming-iterator-0.1)
+        ("rust-strength-reduce" ,rust-strength-reduce-0.2)
+        ("rust-zstd" ,rust-zstd-0.9))))))
+
+(define-public rust-article-scraper-1
+  (package
+    (name "rust-article-scraper")
+    (version "1.1.7")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "article_scraper" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1l904hn99fgj83f3dhspxgz1j3xzgjbnbfsgvmhd1jg5l4hqfhxp"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:tests? #f ;tests use the network
+       #:cargo-inputs
+       (("rust-base64" ,rust-base64-0.13)
+        ("rust-chrono" ,rust-chrono-0.4)
+        ("rust-encoding-rs" ,rust-encoding-rs-0.8)
+        ("rust-failure" ,rust-failure-0.1)
+        ("rust-image" ,rust-image-0.23)
+        ("rust-libxml" ,rust-libxml-0.2)
+        ("rust-log" ,rust-log-0.4)
+        ("rust-parking-lot" ,rust-parking-lot-0.11)
+        ("rust-regex" ,rust-regex-1)
+        ("rust-reqwest" ,rust-reqwest-0.11)
+        ("rust-tokio" ,rust-tokio-1)
+        ("rust-url" ,rust-url-2))))
+    (native-inputs
+     (list pkg-config))
+    (inputs
+     (list libxml2 openssl))
+    (home-page "https://gitlab.com/news-flash/article_scraper")
+    (synopsis "Scrap article contents from the web")
+    (description "This package provides a crate to scrap article contents from
+the web.")
+    ;; No copyright headers in the source code.  LICENSE indicates gpl3.
+    (license license:gpl3)))
+
 (define-public rust-askama-escape-0.10
   (package
     (name "rust-askama-escape")
@@ -2547,6 +3685,54 @@ Askama.")
      "This package provides a type-safe, compiled Jinja-like templates for Rust.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-asn1-derive-0.8
+  (package
+    (name "rust-asn1-derive")
+    (version "0.8.7")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "asn1_derive" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "098w0mxz4bx9w7v72gsl5wva6f0qbvzyc52m0s0n8svqbyh4z2dw"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-proc-macro2" ,rust-proc-macro2-1)
+        ("rust-quote" ,rust-quote-1)
+        ("rust-syn" ,rust-syn-1))))
+    (home-page "https://github.com/alex/rust-asn1")
+    (synopsis "#[derive] support for asn1")
+    (description
+     "This package provides #[derive] support for @code{asn1}.")
+    (license license:bsd-3)))
+
+(define-public rust-asn1-0.8
+  (package
+    (name "rust-asn1")
+    (version "0.8.7")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "asn1" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1caacmvgn463n1yc4ac6vl9phrh56ij7l3xgf6qgzbpyjm8v7zyg"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-asn1-derive" ,rust-asn1-derive-0.8)
+        ("rust-chrono" ,rust-chrono-0.4))
+       #:cargo-development-inputs
+       (("rust-libc" ,rust-libc-0.2))))
+    (home-page "https://github.com/alex/rust-asn1")
+    (synopsis "ASN.1 (DER) parser and writer")
+    (description
+     "This is a Rust library for parsing and generating ASN.1 data (DER only).")
+    (license license:bsd-3)))
+
 (define-public rust-as-slice-0.1
   (package
     (name "rust-as-slice")
@@ -2592,7 +3778,7 @@ traits.")
        (("rust-serde" ,rust-serde-1)
         ("rust-serde-test" ,rust-serde-test-1))))
     (home-page "https://github.com/tomprogrammer/rust-ascii")
-    (synopsis "ASCII-only equivalents to `char`, `str` and `String`.")
+    (synopsis "ASCII-only equivalents to `char`, `str` and `String`")
     (description
      "A rust library that provides ASCII-only string and character types,
 equivalent to the @code{char}, @code{str} and @code{String} types in the
@@ -2656,6 +3842,45 @@ standard library.")
      "This library provides utilities to handle ASCII characters.")
     (license license:mpl2.0)))
 
+(define-public rust-assert-0.7
+  (package
+    (name "rust-assert")
+    (version "0.7.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "assert" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1hnph97yz3hpf71s4rdzcrgd492d1m7rj0k48ymxl1w5d2g8v450"))))
+    (build-system cargo-build-system)
+    (arguments `(#:skip-build? #t))
+    (home-page "https://github.com/stainless-steel/assert")
+    (synopsis "Assertions for testing")
+    (description "This package provides assertions for testing.")
+    (license (list license:asl2.0 license:expat))))
+
+(define-public rust-assert-approx-eq-1
+  (package
+    (name "rust-assert-approx-eq")
+    (version "1.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "assert_approx_eq" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1zagfwfad5wssmr830gk3489f97ppczv6xs627jxniwm6ssdl1rw"))))
+    (build-system cargo-build-system)
+    (arguments '(#:skip-build? #t))
+    (home-page "https://github.com/ashleygwilliams/assert_approx_eq")
+    (synopsis "Assert approximately equal")
+    (description
+     "This package provides a Rust macro for asserting two numbers are
+approximately equal.")
+    ;; Either license can be chosen at the users option.
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-assert-cli-0.6
   (package
     (name "rust-assert-cli")
@@ -2684,8 +3909,39 @@ standard library.")
     (description "This package helps testing CLI Applications.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-assert-cmd-2
+  (package
+    (name "rust-assert-cmd")
+    (version "2.0.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "assert_cmd" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1qhzr8p3iv8rpa6xqg247ad198rhxhljx23b17qpx2w381wxr5p9"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bstr" ,rust-bstr-0.2)
+        ("rust-concolor-control" ,rust-concolor-control-0.0.7)
+        ("rust-doc-comment" ,rust-doc-comment-0.3)
+        ("rust-predicates" ,rust-predicates-2)
+        ("rust-predicates-core" ,rust-predicates-core-1)
+        ("rust-predicates-tree" ,rust-predicates-tree-1)
+        ("rust-wait-timeout" ,rust-wait-timeout-0.2)
+        ("rust-yansi" ,rust-yansi-0.5))))
+    (home-page "https://github.com/assert-rs/assert_cmd")
+    (synopsis "Test CLI Applications")
+    (description "@code{assert_cmd} aims to simplify the process for doing
+integration testing of CLIs, including finding your crate's binary to test and
+assertions on the result of your program's run.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-assert-cmd-1
   (package
+    (inherit rust-assert-cmd-2)
     (name "rust-assert-cmd")
     (version "1.0.7")
     (source
@@ -2697,7 +3953,6 @@ standard library.")
        (sha256
         (base32
          "0pz938z0wipy2czmp5aym6agfsgkpzd9rhbjqg3s9p84s0dq681x"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-bstr" ,rust-bstr-0.2)
@@ -2707,11 +3962,7 @@ standard library.")
         ("rust-predicates-tree" ,rust-predicates-tree-1)
         ("rust-wait-timeout" ,rust-wait-timeout-0.2))
        #:cargo-development-inputs
-       (("rust-escargot" ,rust-escargot-0.5))))
-    (home-page "https://github.com/assert-rs/assert_cmd")
-    (synopsis "Test CLI Applications")
-    (description "Test CLI Applications.")
-    (license (list license:expat license:asl2.0))))
+       (("rust-escargot" ,rust-escargot-0.5))))))
 
 (define-public rust-assert-cmd-0.9
   (package
@@ -2839,7 +4090,7 @@ objects are the same.")
 (define-public rust-assert-matches-1
   (package
     (name "rust-assert-matches")
-    (version "1.3.0")
+    (version "1.5.0")
     (source
      (origin
        (method url-fetch)
@@ -2848,7 +4099,7 @@ objects are the same.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1rar61v00gz2aniid0mylxcr4q98s6l77c3hvbszmg57kj10msvx"))))
+         "1a9b3p9vy0msylyr2022sk5flid37ini1dxji5l3vwxsvw4xcd4v"))))
     (build-system cargo-build-system)
     (home-page "https://github.com/murarth/assert_matches")
     (synopsis "Asserts that a value matches a pattern")
@@ -3061,6 +4312,29 @@ AsyncSeek if the inner type does.")
     (description "This library provides async executors.")
     (license (list license:asl2.0 license:expat))))
 
+(define-public rust-async-fs-1
+  (package
+    (name "rust-async-fs")
+    (version "1.5.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "async-fs" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1qnsqg0jjpda590w8nvbhh5mcmdyx5f43xx2g313fz0izzwa8g4b"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-async-lock" ,rust-async-lock-2)
+        ("rust-blocking" ,rust-blocking-1)
+        ("rust-futures-lite" ,rust-futures-lite-1))))
+    (home-page "https://github.com/stjepang/async-fs")
+    (synopsis "Async filesystem primitives in Rust")
+    (description "This package provides async filesystem primitives.")
+    (license (list license:asl2.0 license:expat))))
+
 (define-public rust-async-global-executor-2
   (package
     (name "rust-async-global-executor")
@@ -3548,23 +4822,25 @@ interfaces you are used to, but in an async version and ready for Rust's
 (define-public rust-async-stream-0.3
   (package
     (name "rust-async-stream")
-    (version "0.3.0")
+    (version "0.3.2")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "async-stream" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0p19qn5igblb86d35lda72q8vimk2iw8hk7r07wjj5y0rdqdyw1n"))))
+        (base32 "0986b72jksg4lndw76py9glry3snc29bbqrna874wl5jwgkp84qp"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:cargo-inputs
+     `(#:cargo-test-flags '("--release" "--"
+                            "--skip=test")
+       #:cargo-inputs
        (("rust-async-stream-impl" ,rust-async-stream-impl-0.3)
         ("rust-futures-core" ,rust-futures-core-0.3))
        #:cargo-development-inputs
        (("rust-futures-util" ,rust-futures-util-0.3)
-        ("rust-tokio" ,rust-tokio-0.2)
-        ("rust-tokio-test" ,rust-tokio-test-0.2)
+        ("rust-tokio" ,rust-tokio-1)
+        ("rust-tokio-test" ,rust-tokio-test-0.4)
         ("rust-trybuild" ,rust-trybuild-1))))
     (home-page "https://github.com/tokio-rs/async-stream")
     (synopsis "Asynchronous streams using async & await notation")
@@ -3576,14 +4852,14 @@ notation.")
 (define-public rust-async-stream-impl-0.3
   (package
     (name "rust-async-stream-impl")
-    (version "0.3.0")
+    (version "0.3.2")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "async-stream-impl" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0w0aif9aw103b5wrm1svkqdh7aaihjywa21819d8m3lzzj78nm53"))))
+        (base32 "024k57iwmmhzvbzacxlkssh45cqlnb8xjlvlsp60jm6fsb4di3k4"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-test-flags '("--release" "--"
@@ -3596,7 +4872,7 @@ notation.")
        #:cargo-development-inputs
        (("rust-futures-core" ,rust-futures-core-0.3)
         ("rust-futures-util" ,rust-futures-util-0.3)
-        ("rust-tokio" ,rust-tokio-0.2))))
+        ("rust-tokio" ,rust-tokio-1))))
     (home-page "https://github.com/tokio-rs/async-stream")
     (synopsis "Proc macros for async-stream crate")
     (description
@@ -3733,10 +5009,33 @@ methods.")
          "1qig9fcdqf07mzzpkicm5wgxv0zpr28njdsqf708wxq27yf6k1iw"))))
     (build-system cargo-build-system)
     (home-page "https://github.com/slide-rs/atom")
-    (synopsis "A safe abstraction around AtomicPtr")
+    (synopsis "Safe abstraction around AtomicPtr")
     (description "This package provides a safe abstraction around AtomicPtr.")
     (license license:asl2.0)))
 
+(define-public rust-atomic-polyfill-0.1
+  (package
+    (name "rust-atomic-polyfill")
+    (version "0.1.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "atomic-polyfill" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0hk08pdp6dgxqhy05l75518svrrrm7c1shfn51dk4claad4dg1p6"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-critical-section" ,rust-critical-section-0.2)
+        ("rust-riscv-target" ,rust-riscv-target-0.1))))
+    (home-page "https://github.com/embassy-rs/atomic-polyfill")
+    (synopsis "Atomic polyfills, for targets where they're not available")
+    (description "This package provides atomic polyfills, for targets where
+they're not available.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-atomic-waker-1
   (package
     (name "rust-atomic-waker")
@@ -3766,7 +5065,7 @@ methods.")
      (origin
        (method url-fetch)
        (uri (crate-uri "atty" version))
-       (file-name (string-append name "-" version ".crate"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
          "1s7yslcs6a28c5vz7jwj63lkfgyx8mx99fdirlhi9lbhhzhrpcyr"))))
@@ -3783,6 +5082,26 @@ methods.")
      "This package provides a simple interface for querying atty.")
     (license license:expat)))
 
+(define-public rust-atty-0.2.11
+  (package
+    (inherit rust-atty-0.2)
+    (name "rust-atty")
+    (version "0.2.11")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "atty" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32 "0lln6vaczj521qqjbaqnb81w5p6xk4fjfkg33r0m22cm4f3mnzcs"))))
+    (arguments
+      `(#:skip-build?
+        #t
+        #:cargo-inputs
+        (("rust-libc" ,rust-libc-0.2)
+         ("rust-termion" ,rust-termion-1)
+         ("rust-winapi" ,rust-winapi-0.3))))))
+
 (define-public rust-autocfg-1
   (package
     (name "rust-autocfg")
@@ -3813,7 +5132,7 @@ methods.")
       (origin
         (method url-fetch)
         (uri (crate-uri "autocfg" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1chwgimpx5z7xbag7krr9d8asxfqbh683qhgl9kn3hxk2l0djj8x"))))
@@ -3845,6 +5164,53 @@ methods.")
     (description "Pull in every source file in a directory as a module.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-average-0.13
+  (package
+    (name "rust-average")
+    (version "0.13.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "average" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1c97m8yagvq8r6qgd3harm5vnkdbld4mxg9byyxh6igjsf8wfgl4"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'configure 'patch-Cargo.toml
+           (lambda _
+             (substitute* '("guix-vendor/rust-average-0.13.1.tar.gz/Cargo.toml"
+                            "Cargo.toml")
+               ;; The resolver feature is not supported by this version of Cargo.
+               (("resolver = \"2\".*") "")
+               ;; Relax!
+               (("1.3") ,(package-version rust-byteorder-1))))))
+       #:cargo-inputs
+       (("rust-easy-cast" ,rust-easy-cast-0.4)
+        ("rust-float-ord" ,rust-float-ord-0.3)
+        ("rust-num-traits" ,rust-num-traits-0.2)
+        ("rust-rayon" ,rust-rayon-1)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-big-array" ,rust-serde-big-array-0.3)
+        ("rust-serde-derive" ,rust-serde-derive-1))
+       #:cargo-development-inputs
+       (("rust-bencher" ,rust-bencher-0.1)
+        ("rust-byteorder" ,rust-byteorder-1)
+        ("rust-proptest" ,rust-proptest-1)
+        ("rust-quantiles" ,rust-quantiles-0.7)
+        ("rust-rand" ,rust-rand-0.8)
+        ("rust-rand-distr" ,rust-rand-distr-0.4)
+        ("rust-rand-xoshiro" ,rust-rand-xoshiro-0.6)
+        ("rust-serde-json" ,rust-serde-json-1)
+        ("rust-streaming-stats" ,rust-streaming-stats-0.2))))
+    (home-page "https://github.com/vks/average")
+    (synopsis "Calculate statistics iteratively")
+    (description "This crate provides tools for calculating statistics
+iteratively in Rust.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-average-0.10
   (package
     (name "rust-average")
@@ -3882,29 +5248,31 @@ methods.")
 in Rust.")
     (license (list license:asl2.0 license:expat))))
 
-(define-public rust-av-metrics-0.6
+(define-public rust-av-metrics-0.7
   (package
     (name "rust-av-metrics")
-    (version "0.6.2")
+    (version "0.7.2")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "av-metrics" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1g4k2q3226246jad3jl8pny7aphq8i03x4qyilzj4zgp27350hsz"))))
+        (base32 "1y1q61lhahljxh1l2brp8v795qf6g7gr4h4vdmq43g5z5pq2dw50"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:skip-build? #t
-       #:cargo-inputs
+     `(#:cargo-inputs
        (("rust-crossbeam" ,rust-crossbeam-0.8)
         ("rust-itertools" ,rust-itertools-0.10)
-        ("rust-lab" ,rust-lab-0.8)
+        ("rust-lab" ,rust-lab-0.11)
         ("rust-num-traits" ,rust-num-traits-0.2)
         ("rust-rayon" ,rust-rayon-1)
         ("rust-serde" ,rust-serde-1)
         ("rust-thiserror" ,rust-thiserror-1)
-        ("rust-v-frame" ,rust-v-frame-0.2))))
+        ("rust-v-frame" ,rust-v-frame-0.2))
+       #:cargo-development-inputs
+       (("rust-criterion" ,rust-criterion-0.3)
+        ("rust-y4m" ,rust-y4m-0.7))))
     (home-page "https://github.com/rust-av/av-metrics")
     (synopsis "Collection of algorithms for measuring audio/video metrics")
     (description
@@ -3941,6 +5309,43 @@ audio/video metrics.")
         ("rust-serde-json" ,rust-serde-json-1)
         ("rust-streaming-stats" ,rust-streaming-stats-0.2))))))
 
+(define-public rust-avro-rs-0.13
+  (package
+    (name "rust-avro-rs")
+    (version "0.13.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "avro-rs" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0dsy8r4c6l4xx9wp80byrb24zvlf9m19f5nwpklis8hhczfm1rgc"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-byteorder" ,rust-byteorder-1)
+        ("rust-crc" ,rust-crc-1)
+        ("rust-digest" ,rust-digest-0.9)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-libflate" ,rust-libflate-1)
+        ("rust-num-bigint" ,rust-num-bigint-0.2)
+        ("rust-rand" ,rust-rand-0.7)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-json" ,rust-serde-json-1)
+        ("rust-snap" ,rust-snap-0.2)
+        ("rust-strum" ,rust-strum-0.18)
+        ("rust-strum-macros" ,rust-strum-macros-0.18)
+        ("rust-thiserror" ,rust-thiserror-1)
+        ("rust-typed-builder" ,rust-typed-builder-0.5)
+        ("rust-uuid" ,rust-uuid-0.8)
+        ("rust-zerocopy" ,rust-zerocopy-0.3))))
+    (home-page "https://github.com/flavray/avro-rs")
+    (synopsis "Library for working with Apache Avro in Rust")
+    (description
+     "This package is a library for working with Apache Avro in Rust.")
+    (license license:expat)))
+
 (define-public rust-awc-2
   (package
     (name "rust-awc")
@@ -4020,6 +5425,39 @@ built on the Actix ecosystem.")
         ("rust-actix-web" ,rust-actix-web-2)
         ("rust-brotli" ,rust-brotli-3))))))
 
+(define-public rust-awc-0.2
+  (package
+    (inherit rust-awc-2)
+    (name "rust-awc-2")
+    (version "0.2.8")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "awc" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1i5qinnh37bwpx86m2yyq1q1bnsa31vlwlz7942bzlwd4y1m56ay"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-actix-codec" ,rust-actix-codec-0.1)
+        ("rust-actix-http" ,rust-actix-http-0.2)
+        ("rust-actix-service" ,rust-actix-service-0.4)
+        ("rust-base64" ,rust-base64-0.10)
+        ("rust-bytes" ,rust-bytes-0.4)
+        ("rust-derive-more" ,rust-derive-more-0.15)
+        ("rust-futures" ,rust-futures-0.1)
+        ("rust-log" ,rust-log-0.4)
+        ("rust-mime" ,rust-mime-0.3)
+        ("rust-openssl" ,rust-openssl-0.10)
+        ("rust-percent-encoding" ,rust-percent-encoding-2)
+        ("rust-rand" ,rust-rand-0.7)
+        ("rust-rustls" ,rust-rustls-0.15)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-json" ,rust-serde-json-1)
+        ("rust-serde-urlencoded" ,rust-serde-urlencoded-0.6)
+        ("rust-tokio-timer" ,rust-tokio-timer-0.2))))))
+
 (define-public rust-az-1
   (package
     (name "rust-az")
@@ -4097,7 +5535,7 @@ trace (backtrace) at runtime in a Rust program.")
       (origin
         (method url-fetch)
         (uri (crate-uri "backtrace-sys" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "16a3igz22q9lnnjjr77f4k8ci48v8zdwrs67khx3h7wx3jzfpyqq"))))
@@ -4115,6 +5553,65 @@ trace (backtrace) at runtime in a Rust program.")
     (license (list license:asl2.0
                    license:expat))))
 
+(define-public rust-bare-metal-1
+  (package
+    (name "rust-bare-metal")
+    (version "1.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "bare-metal" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "00wn61b219nkfcwggim5pj7mcyn1gkq8zqaq4gjlb0rri9d8zzpq"))))
+    (build-system cargo-build-system)
+    (arguments `(#:skip-build? #t))
+    (home-page "https://github.com/rust-embedded/bare-metal")
+    (synopsis "Abstractions common to bare metal systems")
+    (description "This package provides abstractions common to bare metal
+systems.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-bare-metal-0.2
+  (package
+    (inherit rust-bare-metal-1)
+    (name "rust-bare-metal")
+    (version "0.2.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "bare-metal" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1cy5pbb92fznnri72y6drfpjxj4qdmd62f0rrlgy70dxlppn9ssx"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-rustc-version" ,rust-rustc-version-0.2))))))
+
+(define-public rust-barrel-0.6
+  (package
+    (name "rust-barrel")
+    (version "0.6.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "barrel" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1qgzrfpp2acb06bbqrf5a8pjjwf3dwinq7sv2hqq0b1jn5wcjrwx"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-diesel" ,rust-diesel-1)
+        ("rust-tempfile" ,rust-tempfile-3))))
+    (home-page "https://rust-db.github.io/barrel/")
+    (synopsis "Powerful schema migration building API for Rust")
+    (description "This package provides a powerful schema migration building
+API for Rust.")
+    (license (list license:expat license:x11 license:asl2.0))))
+
 (define-public rust-base32-0.4
   (package
     (name "rust-base32")
@@ -4174,7 +5671,14 @@ c6e7d37.  However, this package works only up to 128 bytes.")
        #:cargo-development-inputs
        (("rust-criterion" ,rust-criterion-0.3)
         ("rust-rand" ,rust-rand-0.6)
-        ("rust-structopt" ,rust-structopt-0.3))))
+        ("rust-structopt" ,rust-structopt-0.3))
+       #:phases
+        (modify-phases %standard-phases
+         (add-after 'unpack 'fix-criterion-minor-version
+          (lambda* _
+           (substitute* "Cargo.toml"
+             (("0\\.3\\.2")
+              ,(package-version rust-criterion-0.3))))))))
     (home-page "https://github.com/marshallpierce/rust-base64")
     (synopsis "Encodes and decodes base64 as bytes or utf8")
     (description
@@ -4281,18 +5785,41 @@ c6e7d37.  However, this package works only up to 128 bytes.")
        (("rust-byteorder" ,rust-byteorder-1)
         ("rust-safemem" ,rust-safemem-0.2))))))
 
+(define-public rust-base64ct-1
+  (package
+    (name "rust-base64ct")
+    (version "1.1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "base64ct" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0p4was874qc90q2chm2i14m9mn8zmxjis8vaxihd6a2x4aqxkd76"))))
+    (build-system cargo-build-system)
+    (arguments `(#:skip-build? #t))
+    (home-page "https://github.com/RustCrypto/formats/tree/master/base64ct")
+    (synopsis "Implementation of Base64 (RFC 4648)")
+    (description
+     "This package is a pure Rust implementation of Base64 (RFC 4648) which
+avoids any usages of data-dependent branches/LUTs and thereby provides
+portable \"best effort\" constant-time operation and embedded-friendly no_std
+support.")
+    (license (list license:asl2.0 license:expat))))
+
 (define-public rust-base-x-0.2
   (package
     (name "rust-base-x")
     (version "0.2.6")
     (source
-      (origin
-        (method url-fetch)
-        (uri (crate-uri "base-x" version))
-        (file-name (string-append name "-" version ".crate"))
-        (sha256
-         (base32
-          "1hfy0wv7j5ynd73yk1vyr32pqa77rp15lkrc54f8ky9c6hcbc80v"))))
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "base-x" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1hfy0wv7j5ynd73yk1vyr32pqa77rp15lkrc54f8ky9c6hcbc80v"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -4305,6 +5832,63 @@ c6e7d37.  However, this package works only up to 128 bytes.")
     (description "This library provides for encoding and decoding any base.")
     (license license:expat)))
 
+(define-public rust-bat-0.18
+  (package
+    (name "bat")
+    (version "0.18.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "bat" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0qlk032dd6zxda1v7clah33nafxygaw3x7f73ajwlvk956nrn1js"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-ansi-colours" ,rust-ansi-colours-1)
+        ("rust-ansi-term" ,rust-ansi-term-0.12)
+        ("rust-atty" ,rust-atty-0.2)
+        ("rust-bugreport" ,rust-bugreport-0.4)
+        ("rust-clap" ,rust-clap-2)
+        ("rust-clircle" ,rust-clircle-0.3)
+        ("rust-console" ,rust-console-0.14)
+        ("rust-content-inspector" ,rust-content-inspector-0.2)
+        ("rust-dirs-next" ,rust-dirs-next-2)
+        ("rust-encoding" ,rust-encoding-0.2)
+        ("rust-error-chain" ,rust-error-chain-0.12)
+        ("rust-git2" ,rust-git2-0.13)
+        ("rust-globset" ,rust-globset-0.4)
+        ("rust-grep-cli" ,rust-grep-cli-0.1)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-path-abs" ,rust-path-abs-0.5)
+        ("rust-semver" ,rust-semver-0.11)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-yaml" ,rust-serde-yaml-0.8)
+        ("rust-shell-words" ,rust-shell-words-1)
+        ("rust-syntect" ,rust-syntect-4)
+        ("rust-unicode-width" ,rust-unicode-width-0.1)
+        ("rust-wild" ,rust-wild-2))
+       #:cargo-development-inputs
+       (("rust-assert-cmd" ,rust-assert-cmd-1)
+        ("rust-nix" ,rust-nix-0.21)
+        ("rust-predicates" ,rust-predicates-1)
+        ("rust-serial-test" ,rust-serial-test-0.5)
+        ("rust-tempfile" ,rust-tempfile-3)
+        ("rust-wait-timeout" ,rust-wait-timeout-0.2))))
+    (native-inputs
+     (list pkg-config))
+    (inputs
+     (list libgit2 zlib))
+    (home-page "https://github.com/sharkdp/bat")
+    (synopsis "@command{cat} clone with syntax highlighting and git integration")
+    (description
+     "@command{bat} is a drop-in @command{cat} replacement featuring syntax
+highlighting for a large number of languages, git integration, and automatic
+paging.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-battery-0.7
   (package
     (name "rust-battery")
@@ -4371,7 +5955,7 @@ Cow.")
       (origin
         (method url-fetch)
         (uri (crate-uri "bencher" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1x8p2xblgqssay8cdykp5pkfc0np0jk5bs5cx4f5av097aav9zbx"))))
@@ -4411,8 +5995,33 @@ and no more (caveat: black_box is still missing!).")
 tracebacks.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-bigdecimal-0.3
+  (package
+    (name "rust-bigdecimal")
+    (version "0.3.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "bigdecimal" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0i1px8hk4l71n307c7h7igrdy37pzpm7dcni269gwab438ak7bva"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-num-bigint" ,rust-num-bigint-0.4)
+        ("rust-num-integer" ,rust-num-integer-0.1)
+        ("rust-num-traits" ,rust-num-traits-0.2)
+        ("rust-serde" ,rust-serde-1))))
+    (home-page "https://github.com/akubera/bigdecimal-rs")
+    (synopsis "Arbitrary precision decimal numbers")
+    (description "This package provides arbitrary precision decimal numbers.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-bigdecimal-0.2
   (package
+    (inherit rust-bigdecimal-0.3)
     (name "rust-bigdecimal")
     (version "0.2.0")
     (source
@@ -4423,7 +6032,6 @@ tracebacks.")
        (sha256
         (base32
          "0fd5chyy76y4qb043w1bbgz1v22f9hw5703f5r90ac5hwqk3qh6c"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-num-bigint" ,rust-num-bigint-0.3)
@@ -4431,11 +6039,7 @@ tracebacks.")
         ("rust-num-traits" ,rust-num-traits-0.2)
         ("rust-serde" ,rust-serde-1))
        #:cargo-development-inputs
-       (("rust-serde-json" ,rust-serde-json-1))))
-    (home-page "https://github.com/akubera/bigdecimal-rs")
-    (synopsis "Arbitrary precision decimal numbers")
-    (description "This package provides arbitrary precision decimal numbers.")
-    (license (list license:expat license:asl2.0))))
+       (("rust-serde-json" ,rust-serde-json-1))))))
 
 (define-public rust-bigdecimal-0.1
   (package
@@ -4488,21 +6092,18 @@ tracebacks.")
 (define-public rust-bincode-1
   (package
     (name "rust-bincode")
-    (version "1.3.1")
+    (version "1.3.3")
     (source
-      (origin
-        (method url-fetch)
-        (uri (crate-uri "bincode" version))
-        (file-name
-         (string-append name "-" version ".tar.gz"))
-        (sha256
-         (base32
-          "0vc9pjh6hfp9vfq752sa88rxwg93ydhm0dvvy58rcvx2p8wkl3gk"))))
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "bincode" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1bfw3mnwzx5g1465kiqllp5n4r10qrqy88kdlp3jfwnq2ya5xx5i"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
-       (("rust-serde" ,rust-serde-1)
-        ("rust-byteorder" ,rust-byteorder-1))
+       (("rust-serde" ,rust-serde-1))
        #:cargo-development-inputs
        (("rust-serde-bytes" ,rust-serde-bytes-0.11)
         ("rust-serde-derive" ,rust-serde-derive-1))))
@@ -4537,26 +6138,26 @@ that uses Serde for transforming structs into bytes and vice versa!")
        (("rust-serde-bytes" ,rust-serde-bytes-0.10)
         ("rust-serde-derive" ,rust-serde-derive-1))))))
 
-(define-public rust-bindgen-0.58
+(define-public rust-bindgen-0.59
   (package
     (name "rust-bindgen")
-    (version "0.58.1")
+    (version "0.59.2")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "bindgen" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "13r505nn28ay0byfd96hdg8xwcpa2r20czjy111pl66p22s2718g"))))
+        (base32 "1f4fpycxmbrqk8r2x9brhfgjh86mzc6bngn4a9631x78b2jaklib"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-bitflags" ,rust-bitflags-1)
-        ("rust-cexpr" ,rust-cexpr-0.4)
+        ("rust-cexpr" ,rust-cexpr-0.6)
         ("rust-clang-sys" ,rust-clang-sys-1)
         ("rust-clap" ,rust-clap-2)
-        ("rust-env-logger" ,rust-env-logger-0.8)
+        ("rust-env-logger" ,rust-env-logger-0.9)
         ("rust-lazy-static" ,rust-lazy-static-1)
         ("rust-lazycell" ,rust-lazycell-1)
         ("rust-log" ,rust-log-0.4)
@@ -4566,13 +6167,44 @@ that uses Serde for transforming structs into bytes and vice versa!")
         ("rust-regex" ,rust-regex-1)
         ("rust-rustc-hash" ,rust-rustc-hash-1)
         ("rust-shlex" ,rust-shlex-1)
-        ("rust-which" ,rust-which-3))))
+        ("rust-which" ,rust-which-4))))
     (home-page "https://rust-lang.github.io/rust-bindgen/")
-    (synopsis "Generate Rust FFI bindings to C and C++ libraries.")
+    (synopsis "Generate Rust FFI bindings to C and C++ libraries")
     (description "This package can be used to automatically generate Rust FFI
 bindings to C and C++ libraries.")
     (license license:bsd-3)))
 
+(define-public rust-bindgen-0.58
+  (package
+    (inherit rust-bindgen-0.59)
+    (name "rust-bindgen")
+    (version "0.58.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "bindgen" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "13r505nn28ay0byfd96hdg8xwcpa2r20czjy111pl66p22s2718g"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bitflags" ,rust-bitflags-1)
+        ("rust-cexpr" ,rust-cexpr-0.4)
+        ("rust-clang-sys" ,rust-clang-sys-1)
+        ("rust-clap" ,rust-clap-2)
+        ("rust-env-logger" ,rust-env-logger-0.8)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-lazycell" ,rust-lazycell-1)
+        ("rust-log" ,rust-log-0.4)
+        ("rust-peeking-take-while" ,rust-peeking-take-while-0.1)
+        ("rust-proc-macro2" ,rust-proc-macro2-1)
+        ("rust-quote" ,rust-quote-1)
+        ("rust-regex" ,rust-regex-1)
+        ("rust-rustc-hash" ,rust-rustc-hash-1)
+        ("rust-shlex" ,rust-shlex-1)
+        ("rust-which" ,rust-which-3))))))
+
 (define-public rust-bindgen-0.57
   (package
     (inherit rust-bindgen-0.58)
@@ -4618,7 +6250,7 @@ bindings to C and C++ libraries.")
         (base32
          "0hxlvy9q9984rr3rqaxwmgxjrd9wh11mcc161hv3shz6b7jkrcbm"))))
     (inputs
-     `(("clang" ,clang)))
+     (list clang))
     (arguments
      `(#:cargo-inputs
        (("rust-bitflags" ,rust-bitflags-1)
@@ -4687,7 +6319,7 @@ bindings to C and C++ libraries.")
         ("rust-diff" ,rust-diff-0.1)
         ("rust-shlex" ,rust-shlex-0.1))))
     (inputs
-     `(("clang" ,clang)))))
+     (list clang))))
 
 (define-public rust-bindgen-0.53
   (package
@@ -5042,6 +6674,147 @@ bindings to C and C++ libraries.")
         ("rust-diff" ,rust-diff-0.1)
         ("rust-shlex" ,rust-shlex-0.1))))))
 
+(define-public rust-bio-types-0.12
+  (package
+    (name "rust-bio-types")
+    (version "0.12.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "bio-types" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0qww2l3hbxyayhpv16yxzayxxxmvq7wk3j64xsx9rigzzfbdjy9z"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-derive-new" ,rust-derive-new-0.5)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-petgraph" ,rust-petgraph-0.5)
+        ("rust-regex" ,rust-regex-1)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-strum-macros" ,rust-strum-macros-0.20)
+        ("rust-thiserror" ,rust-thiserror-1))))
+    (home-page "https://rust-bio.github.io")
+    (synopsis "Common biomedical types for use in rust-bio and rust-htslib")
+    (description
+     "This package provides a collection of common biomedical types for use in
+rust-bio and rust-htslib.")
+    (license license:expat)))
+
+(define-public rust-bio-0.32
+  (package
+    (name "rust-bio")
+    (version "0.32.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "bio" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1wj6s3hzpx5xhajcnvdabbgpalgghdni7gmlhjl6i9pfh1xiq5pi"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-approx" ,rust-approx-0.3)
+        ("rust-bio-types" ,rust-bio-types-0.12)
+        ("rust-bit-set" ,rust-bit-set-0.5)
+        ("rust-bv" ,rust-bv-0.11)
+        ("rust-bytecount" ,rust-bytecount-0.6)
+        ("rust-csv" ,rust-csv-1)
+        ("rust-custom-derive" ,rust-custom-derive-0.1)
+        ("rust-enum-map" ,rust-enum-map-0.6)
+        ("rust-fnv" ,rust-fnv-1)
+        ("rust-fxhash" ,rust-fxhash-0.2)
+        ("rust-getset" ,rust-getset-0.0.9)
+        ("rust-itertools" ,rust-itertools-0.9)
+        ("rust-itertools-num" ,rust-itertools-num-0.1)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-multimap" ,rust-multimap-0.8)
+        ("rust-ndarray" ,rust-ndarray-0.13)
+        ("rust-newtype-derive" ,rust-newtype-derive-0.1)
+        ("rust-num-integer" ,rust-num-integer-0.1)
+        ("rust-num-traits" ,rust-num-traits-0.2)
+        ("rust-ordered-float" ,rust-ordered-float-1)
+        ("rust-petgraph" ,rust-petgraph-0.5)
+        ("rust-quick-error" ,rust-quick-error-1)
+        ("rust-regex" ,rust-regex-1)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-derive" ,rust-serde-derive-1)
+        ("rust-snafu" ,rust-snafu-0.6)
+        ("rust-statrs" ,rust-statrs-0.12)
+        ("rust-strum" ,rust-strum-0.18)
+        ("rust-strum-macros" ,rust-strum-macros-0.18)
+        ("rust-triple-accel" ,rust-triple-accel-0.3)
+        ("rust-vec-map" ,rust-vec-map-0.8))
+       #:cargo-development-inputs
+       (("rust-proptest" ,rust-proptest-0.10))))
+    (home-page "https://rust-bio.github.io")
+    (synopsis "Bioinformatics library for Rust")
+    (description
+     "This package provides a bioinformatics library for Rust.  This library
+provides implementations of many algorithms and data structures that are
+useful for bioinformatics, but also in other fields.")
+    (license license:expat)))
+
+(define-public rust-bio-0.33
+  (package
+    (name "rust-bio")
+    (version "0.33.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "bio" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1zaghvazh243x2pg866hjx1zwwpp9qzwkf45iz2fs9af5y661gz5"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-anyhow" ,rust-anyhow-1)
+        ("rust-approx" ,rust-approx-0.3)
+        ("rust-bio-types" ,rust-bio-types-0.12)
+        ("rust-bit-set" ,rust-bit-set-0.5)
+        ("rust-bv" ,rust-bv-0.11)
+        ("rust-bytecount" ,rust-bytecount-0.6)
+        ("rust-csv" ,rust-csv-1)
+        ("rust-custom-derive" ,rust-custom-derive-0.1)
+        ("rust-enum-map" ,rust-enum-map-0.6)
+        ("rust-fnv" ,rust-fnv-1)
+        ("rust-fxhash" ,rust-fxhash-0.2)
+        ("rust-getset" ,rust-getset-0.0.9)
+        ("rust-itertools" ,rust-itertools-0.9)
+        ("rust-itertools-num" ,rust-itertools-num-0.1)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-multimap" ,rust-multimap-0.8)
+        ("rust-ndarray" ,rust-ndarray-0.13)
+        ("rust-newtype-derive" ,rust-newtype-derive-0.1)
+        ("rust-num-integer" ,rust-num-integer-0.1)
+        ("rust-num-traits" ,rust-num-traits-0.2)
+        ("rust-ordered-float" ,rust-ordered-float-1)
+        ("rust-pest" ,rust-pest-2)
+        ("rust-pest-derive" ,rust-pest-derive-2)
+        ("rust-petgraph" ,rust-petgraph-0.5)
+        ("rust-regex" ,rust-regex-1)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-derive" ,rust-serde-derive-1)
+        ("rust-statrs" ,rust-statrs-0.13)
+        ("rust-strum" ,rust-strum-0.19)
+        ("rust-strum-macros" ,rust-strum-macros-0.19)
+        ("rust-thiserror" ,rust-thiserror-1)
+        ("rust-triple-accel" ,rust-triple-accel-0.3)
+        ("rust-vec-map" ,rust-vec-map-0.8))
+       #:cargo-development-inputs
+       (("rust-proptest" ,rust-proptest-0.10)
+        ("rust-tempfile" ,rust-tempfile-3))))
+    (home-page "https://rust-bio.github.io")
+    (synopsis "Bioinformatics library for Rust")
+    (description
+     "This package provides a bioinformatics library for Rust.  This library
+provides implementations of many algorithms and data structures that are
+useful for bioinformatics, but also in other fields.")
+    (license license:expat)))
+
 (define-public rust-bit-field-0.10
   (package
     (name "rust-bit-field")
@@ -5175,19 +6948,49 @@ types.")
      `(#:cargo-development-inputs
        (("rust-rand" ,rust-rand-0.3))))))
 
+(define-public rust-bitfield-0.13
+  (package
+    (name "rust-bitfield")
+    (version "0.13.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "bitfield" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "06g7jb5r2b856vnhx76081fg90jvmy61kjqcfjysgmd5hclvvbs6"))))
+    (build-system cargo-build-system)
+    (arguments `(#:skip-build? #t))
+    (home-page "https://github.com/dzamlo/rust-bitfield")
+    (synopsis "Macros to generate bitfield-like struct")
+    (description
+     "This crate provides macros to generate bitfield-like struct.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-bitflags-1
   (package
     (name "rust-bitflags")
-    (version "1.2.1")
+    (version "1.3.2")
     (source
-      (origin
-        (method url-fetch)
-        (uri (crate-uri "bitflags" version))
-        (file-name (string-append name "-" version ".crate"))
-        (sha256
-         (base32
-          "14qnd5nq8p2almk79m4m8ydqhd413yaxsyjp5xd19g3mikzf47fg"))))
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "bitflags" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "12ki6w8gn1ldq7yz9y680llwk5gmrhrzszaa17g1sbrw2r2qvwxy"))))
     (build-system cargo-build-system)
+    (arguments
+     `(#:tests? #f                      ; Tests require rust-1.46 or newer.
+       #:cargo-inputs
+       (("rust-compiler-builtins" ,rust-compiler-builtins-0.1)
+        ("rust-rustc-std-workspace-core" ,rust-rustc-std-workspace-core-1))
+       #:cargo-development-inputs
+       (("rust-rustversion" ,rust-rustversion-1)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-derive" ,rust-serde-derive-1)
+        ("rust-serde-json" ,rust-serde-json-1)
+        ("rust-trybuild" ,rust-trybuild-1)
+        ("rust-walkdir" ,rust-walkdir-2))))
     (home-page "https://github.com/bitflags/bitflags")
     (synopsis "Macro to generate structures which behave like bitflags")
     (description "This package provides a macro to generate structures which
@@ -5195,6 +6998,22 @@ behave like a set of bitflags.")
     (license (list license:asl2.0
                    license:expat))))
 
+;; XXX: The package below is meant to fix rust-nix-0.22, which has the
+;; following requirements for bitflags version: ">=1.1.0 <1.3.0", and every
+;; package using the latter as a dependency (e.g., nushell 0.43).
+(define-public rust-bitflags-1.2
+  (package
+    (inherit rust-bitflags-1)
+    (name "rust-bitflags")
+    (version "1.2.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "bitflags" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "14qnd5nq8p2almk79m4m8ydqhd413yaxsyjp5xd19g3mikzf47fg"))))))
+
 (define-public rust-bitflags-0.9
   (package
     (inherit rust-bitflags-1)
@@ -5286,14 +7105,35 @@ behave like a set of bitflags.")
      `(#:cargo-inputs
        (("rust-typenum" ,rust-typenum-1))
        #:cargo-development-inputs
-       (("rust-proptest", rust-proptest-0.9)
-        ("rust-proptest-derive", rust-proptest-derive-0.1))))
+       (("rust-proptest" ,rust-proptest-0.9)
+        ("rust-proptest-derive" ,rust-proptest-derive-0.1))))
     (home-page "https://github.com/bodil/bitmaps")
     (synopsis "Fixed size compact boolean array in Rust")
     (description "This crate provides a convenient and efficient way of
 declaring and working with fixed size bitmaps in Rust.")
     (license license:mpl2.0)))
 
+(define-public rust-bitpacking-0.8
+  (package
+    (name "rust-bitpacking")
+    (version "0.8.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "bitpacking" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1mw2xbpkw9zhfq5lir6bgkalhhfqb5p7xwx5yimc0ry1ffnd5ix8"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t #:cargo-inputs (("rust-crunchy" ,rust-crunchy-0.2))))
+    (home-page "https://crates.io/crates/bitpacking")
+    (synopsis "Fast integer compression/decompression via SIMD bit-packing")
+    (description
+     "This crate provides fast integer compression and decompression via SIMD
+bit-packing.  It is a port of simdcomp C library to Rust.")
+    (license license:expat)))
+
 (define-public rust-bitreader-0.3
   (package
     (name "rust-bitreader")
@@ -5355,39 +7195,94 @@ streams in big-endian and little-endian formats.")
          "00a6wy54s1dmadm5xz8k2cbsd7ixvm48mlc45bk0fdy0pbra6jk1"))))
     (arguments `(#:skip-build? #t))))
 
-(define-public rust-bitvec-0.19
+(define-public rust-bitvec-0.22
   (package
     (name "rust-bitvec")
-    (version "0.19.4")
+    (version "0.22.3")
     (source
-      (origin
-        (method url-fetch)
-        (uri (crate-uri "bitvec" version))
-        (file-name
-         (string-append name "-" version ".tar.gz"))
-        (sha256
-         (base32
-          "10bz751jbsy8fj203ibjwil07p2fwfzvx7b326wfssaravlkbfm7"))))
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "bitvec" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "09xm84dg04y8k3cm7aa81n2xfvcnidahx0qpqc60l4w6ih5g0dsj"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
-       (("rust-funty" ,rust-funty-1)
-        ("rust-radium" ,rust-radium-0.5)
+       (("rust-funty" ,rust-funty-1.2)
+        ("rust-radium" ,rust-radium-0.6)
         ("rust-serde" ,rust-serde-1)
         ("rust-tap" ,rust-tap-1)
-        ("rust-wyz" ,rust-wyz-0.2))
+        ("rust-wyz" ,rust-wyz-0.4))
        #:cargo-development-inputs
-       (("rust-criterion" ,rust-criterion-0.3)
+       (("rust-bincode" ,rust-bincode-1)
+        ("rust-criterion" ,rust-criterion-0.3)
         ("rust-serde" ,rust-serde-1)
         ("rust-serde-json" ,rust-serde-json-1)
         ("rust-serde-test" ,rust-serde-test-1)
         ("rust-static-assertions" ,rust-static-assertions-1))))
-    (home-page "https://myrrlyn.net/crates/bitvec")
+    (home-page "https://bitvecto-rs.github.io/bitvec")
     (synopsis "Manipulate memory, bit by bit")
     (description
      "This package provides a crate for manipulating memory, bit by bit.")
     (license license:expat)))
 
+(define-public rust-bitvec-0.19
+  (package
+    (inherit rust-bitvec-0.22)
+    (name "rust-bitvec")
+    (version "0.19.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "bitvec" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "10bz751jbsy8fj203ibjwil07p2fwfzvx7b326wfssaravlkbfm7"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-funty" ,rust-funty-1)
+        ("rust-radium" ,rust-radium-0.5)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-tap" ,rust-tap-1)
+        ("rust-wyz" ,rust-wyz-0.2))
+       #:cargo-development-inputs
+       (("rust-criterion" ,rust-criterion-0.3)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-json" ,rust-serde-json-1)
+        ("rust-serde-test" ,rust-serde-test-1)
+        ("rust-static-assertions" ,rust-static-assertions-1))))))
+
+(define-public rust-blake2-0.9
+  (package
+    (name "rust-blake2")
+    (version "0.9.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "blake2" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0x7i67c0hn3bzcwny08rgjrrnarqnqw10qpmh2blbx9hd78kfkha"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-crypto-mac" ,rust-crypto-mac-0.8)
+        ("rust-digest" ,rust-digest-0.9)
+        ("rust-opaque-debug" ,rust-opaque-debug-0.3))
+       #:cargo-development-inputs
+       (("rust-crypto-mac" ,rust-crypto-mac-0.8)
+        ("rust-digest" ,rust-digest-0.9)
+        ("rust-hex-literal" ,rust-hex-literal-0.2))))
+    (home-page "https://github.com/RustCrypto/hashes")
+    (synopsis "BLAKE2 hash functions")
+    (description "This package provides BLAKE2 hash functions in Rust.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-blake2-0.8
   (package
     (name "rust-blake2")
@@ -5473,6 +7368,29 @@ streams in big-endian and little-endian formats.")
 BLAKE2bp hash functions.")
     (license license:expat)))
 
+(define-public rust-blakeout-0.3
+  (package
+    (name "rust-blakeout")
+    (version "0.3.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "blakeout" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0dxcg3sjxd82mn7mq4ammrfpidqf9zsagvhfzgblsi8g4b2fgvw1"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-blake2" ,rust-blake2-0.9)
+        ("rust-digest" ,rust-digest-0.9))))
+    (home-page "https://github.com/Revertron/Blakeout")
+    (synopsis "Memory hard hashing algorithm based on Blake2s")
+    (description "This package provides memory hard hashing algorithm
+based on Blake2s.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-blas-sys-0.7
   (package
     (name "rust-blas-sys")
@@ -5481,7 +7399,7 @@ BLAKE2bp hash functions.")
       (origin
         (method url-fetch)
         (uri (crate-uri "blas-sys" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0h14zjycwc76v15h8qll9z1xiryvmpvsb5gam97pqpdjrrwv5c8k"))))
@@ -5499,7 +7417,7 @@ BLAKE2bp hash functions.")
 (define-public rust-blobby-0.3
   (package
     (name "rust-blobby")
-    (version "0.3.0")
+    (version "0.3.1")
     (source
      (origin
        (method url-fetch)
@@ -5507,12 +7425,11 @@ BLAKE2bp hash functions.")
        (file-name
         (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32
-         "1s2f3a7lx5rd26554d9940basff7qpyf1y8gkc309cgc8csmalpw"))))
+        (base32 "1v7a6lzxbvrxpnk2jv895315v7yas1cvk26mmbl90ylp1719ax44"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-development-inputs
-       (("rust-hex" ,rust-hex-0.3))))
+       (("rust-hex" ,rust-hex-0.4))))
     (home-page "https://github.com/RustCrypto/utils")
     (synopsis "Iterator over simple binary blob storage")
     (description "This package provides an iterator over simple binary blob
@@ -5566,10 +7483,10 @@ storage.")
 extension of blocks.")
     (license license:expat)))
 
-(define-public rust-block-buffer-0.9
+(define-public rust-block-buffer-0.10
   (package
     (name "rust-block-buffer")
-    (version "0.9.0")
+    (version "0.10.0")
     (source
       (origin
         (method url-fetch)
@@ -5578,18 +7495,37 @@ extension of blocks.")
          (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
-          "1r4pf90s7d7lj1wdjhlnqa26vvbm6pnc33z138lxpnp9srpi2lj1"))))
+          "15cbh9jbcfcbbi863dlmamjka2f8l55ld915vr0b0xlf0l16mlzi"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:cargo-inputs
-       (("rust-block-padding" ,rust-block-padding-0.2)
-        ("rust-generic-array" ,rust-generic-array-0.14))))
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-generic-array" ,rust-generic-array-0.14))))
     (home-page "https://github.com/RustCrypto/utils")
     (synopsis "Fixed size buffer for block processing of data")
     (description
      "Fixed size buffer for block processing of data.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-block-buffer-0.9
+  (package
+    (inherit rust-block-buffer-0.10)
+    (name "rust-block-buffer")
+    (version "0.9.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "block-buffer" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1r4pf90s7d7lj1wdjhlnqa26vvbm6pnc33z138lxpnp9srpi2lj1"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-block-padding" ,rust-block-padding-0.2)
+        ("rust-generic-array" ,rust-generic-array-0.14))))))
+
 (define-public rust-block-buffer-0.8
   (package
     (inherit rust-block-buffer-0.9)
@@ -5731,6 +7667,50 @@ algorithms.  This package is deprecated.  Please use block-cipher instead.")
      `(#:cargo-inputs
        (("rust-generic-array" ,rust-generic-array-0.8))))))
 
+(define-public rust-block-modes-0.8
+  (package
+    (name "rust-block-modes")
+    (version "0.8.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "block-modes" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "13id7rw1lhi83i701za8w5is3a8qkf4vfigqw3f8jp8mxldkvc1c"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-block-padding" ,rust-block-padding-0.2)
+        ("rust-cipher" ,rust-cipher-0.3))))
+    (home-page "https://github.com/RustCrypto/block-ciphers")
+    (synopsis "Block cipher modes of operation")
+    (description "This package provides a collection of block ciphers
+and block modes.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-block-modes-0.7
+  (package
+    (inherit rust-block-modes-0.8)
+    (name "rust-block-modes")
+    (version "0.7.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "block-modes" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1w3jc3n7k4xq98b9mfina4wwpg1fq1s3b0mm5whqialb7q3yi82p"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-block-padding" ,rust-block-padding-0.2)
+        ("rust-cipher" ,rust-cipher-0.2))
+       #:cargo-development-inputs
+       (("rust-aes" ,rust-aes-0.6)
+        ("rust-hex-literal" ,rust-hex-literal-0.2))))))
+
 (define-public rust-block-padding-0.2
   (package
     (name "rust-block-padding")
@@ -6019,7 +7999,7 @@ devices and kernels.")
 (define-public rust-brotli-decompressor-2
   (package
     (name "rust-brotli-decompressor")
-    (version "2.3.1")
+    (version "2.3.2")
     (source
      (origin
        (method url-fetch)
@@ -6027,7 +8007,7 @@ devices and kernels.")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1v7l1sa63ix1aq8h0k1ijvxvb5w796hz154b9aw0xn6lp31y2lhh"))))
+         "102v89h9z0p45j5fsjna97761nxx9nxz9ccpwxma6p5zad32vbar"))))
     (build-system cargo-build-system)
     (arguments
      `(#:tests? #f      ; not all test files included
@@ -6118,8 +8098,41 @@ bytes), doesn't have the 128 byte limitation and supports a configurable
 alphabet.")
     (license (list license:asl2.0 license:expat))))
 
+(define-public rust-bson-2
+  (package
+    (name "rust-bson")
+    (version "2.0.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "bson" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32 "0ff1xj1vgh2l6sl5gqhkgsfkbhh11jkwd5wf3h0f0mrbg1kd8n7z"))))
+    (build-system cargo-build-system)
+    (arguments
+      `(#:skip-build? #t
+        #:cargo-inputs
+        (("rust-ahash" ,rust-ahash-0.7)
+         ("rust-base64" ,rust-base64-0.13)
+         ("rust-chrono" ,rust-chrono-0.4)
+         ("rust-hex" ,rust-hex-0.4)
+         ("rust-indexmap" ,rust-indexmap-1)
+         ("rust-lazy-static" ,rust-lazy-static-1)
+         ("rust-rand" ,rust-rand-0.8)
+         ("rust-serde" ,rust-serde-1)
+         ("rust-serde-bytes" ,rust-serde-bytes-0.11)
+         ("rust-serde-json" ,rust-serde-json-1)
+         ("rust-uuid" ,rust-uuid-0.8))))
+    (home-page "https://github.com/mongodb/bson-rust")
+    (synopsis "Encoding and decoding support for BSON in Rust")
+    (description
+     "This crate provides encoding and decoding support for BSON.")
+    (license license:expat)))
+
 (define-public rust-bson-0.14
   (package
+    (inherit rust-bson-2)
     (name "rust-bson")
     (version "0.14.1")
     (source
@@ -6129,7 +8142,6 @@ alphabet.")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "000wqyb4icy32h74wl5wb6iw2flzwwlrpgq51xgcw91g2b87w5rw"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
@@ -6143,12 +8155,7 @@ alphabet.")
         ("rust-rand" ,rust-rand-0.7)
         ("rust-serde" ,rust-serde-1)
         ("rust-serde-json" ,rust-serde-json-1)
-        ("rust-time" ,rust-time-0.1))))
-    (home-page "https://github.com/mongodb/bson-rust")
-    (synopsis "Encoding and decoding support for BSON in Rust")
-    (description
-     "This package provides encoding and decoding support for BSON in Rust.")
-    (license license:expat)))
+        ("rust-time" ,rust-time-0.1))))))
 
 (define-public rust-bstr-0.2
   (package
@@ -6223,23 +8230,22 @@ UTF-8.")
 @code{std::io}, with extra features.")
     (license (list license:expat license:asl2.0))))
 
-(define-public rust-buffered-reader-0.9
+(define-public rust-buffered-reader-1
   (package
     (name "rust-buffered-reader")
-    (version "0.9.0")
+    (version "1.1.2")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "buffered-reader" version))
-       (file-name
-        (string-append name "-" version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32
-         "05rklfiia1k4c4ifpim08l22i0q0l3j9xdg2yh3njrp6w58z6z13"))))
+        (base32 "1jf6iqxm3yllm9h3q5f90yj8y9qzr5h0a7aiw38cgk4hagh2s8d4"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:cargo-inputs
-       (("rust-bzip2" ,rust-bzip2-0.3)
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bzip2" ,rust-bzip2-0.4)
         ("rust-flate2" ,rust-flate2-1)
         ("rust-libc" ,rust-libc-0.2))))
     (home-page "https://sequoia-pgp.org/")
@@ -6252,6 +8258,24 @@ system calls.  Second, exposing the internal buffer allows the user to work
 with data in place, which avoids another copy.")
     (license license:gpl3)))
 
+(define-public rust-buffered-reader-0.9
+  (package
+    (inherit rust-buffered-reader-1)
+    (name "rust-buffered-reader")
+    (version "0.9.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "buffered-reader" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "05rklfiia1k4c4ifpim08l22i0q0l3j9xdg2yh3njrp6w58z6z13"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-bzip2" ,rust-bzip2-0.3)
+        ("rust-flate2" ,rust-flate2-1)
+        ("rust-libc" ,rust-libc-0.2))))))
+
 (define-public rust-buffering-0.4
   (package
     (name "rust-buffering")
@@ -6468,6 +8492,31 @@ constants from build.rs or a script.")
        (("rust-criterion" ,rust-criterion-0.2)
         ("rust-quickcheck" ,rust-quickcheck-0.8))))))
 
+(define-public rust-bv-0.11
+  (package
+    (name "rust-bv")
+    (version "0.11.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "bv" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0h5kbl54fsccznfixw83xndbripw39y2qkqjwf709p75iqfvnd48"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-feature-probe" ,rust-feature-probe-0.1)
+        ("rust-serde" ,rust-serde-1))
+       #:cargo-development-inputs
+       (("rust-quickcheck" ,rust-quickcheck-0.6))))
+    (home-page "https://github.com/tov/bv-rs")
+    (synopsis "Bit-vectors and bit-slices")
+    (description "The main type exported by this library, @code{BitVec}, is a
+packed, growable bit-vector.  Its API mirrors that of @code{Vec} where
+reasonable.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-byte-pool-0.2
   (package
     (name "rust-byte-pool")
@@ -6541,11 +8590,59 @@ memory usage.")
        (("rust-serde" ,rust-serde-1)
         ("rust-utf8-width" ,rust-utf8-width-0.1))))
     (home-page "https://magiclen.org/byte-unit")
-    (synopsis "Library for interaction with units of bytes.")
+    (synopsis "Library for interaction with units of bytes")
     (description
      "This package provides a library for interaction with units of bytes.")
     (license license:expat)))
 
+(define-public rust-bytecheck-0.5
+  (package
+    (name "rust-bytecheck")
+    (version "0.5.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "bytecheck" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0q11ap6nqj0rsc8ypwjh918916zlrcrzdgqm175gnpb2yn9axyh1"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bytecheck-derive" ,rust-bytecheck-derive-0.5)
+        ("rust-log" ,rust-log-0.4)
+        ("rust-ptr-meta" ,rust-ptr-meta-0.1)
+        ("rust-simdutf8" ,rust-simdutf8-0.1))))
+    (home-page "https://github.com/rkyv/bytecheck")
+    (synopsis "Type validation framework")
+    (description "This package provides a type validation framework for
+Rust.")
+    (license license:expat)))
+
+(define-public rust-bytecheck-derive-0.5
+  (package
+    (name "rust-bytecheck-derive")
+    (version "0.5.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "bytecheck_derive" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0grbkwwv5j91n7zrimci6fh4k79flxga3mkjg50jysnyraizi088"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-proc-macro2" ,rust-proc-macro2-1)
+        ("rust-quote" ,rust-quote-1)
+        ("rust-syn" ,rust-syn-1))))
+    (home-page "https://github.com/rkyv/bytecheck")
+    (synopsis "Derive macro for bytecheck")
+    (description "This package provides a Derive macro for bytecheck, the type
+validation framework for Rust.")
+    (license license:expat)))
+
 (define-public rust-bytecount-0.6
   (package
     (name "rust-bytecount")
@@ -6618,6 +8715,29 @@ in a byte slice, fast.")
         ("rust-quickcheck" ,rust-quickcheck-0.6)
         ("rust-rand" ,rust-rand-0.4))))))
 
+(define-public rust-bytemuck-1.5
+  (package
+    (name "rust-bytemuck")
+    (version "1.5.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "bytemuck" version))
+        (file-name
+         (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "18355qn3r9yp7ibg00r688sjx58g2qsjylwyq15w5b41b46asjss"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-bytemuck-derive" ,rust-bytemuck-derive-1))))
+    (home-page "https://github.com/Lokathor/bytemuck")
+    (synopsis "Crate for mucking around with piles of bytes")
+    (description
+     "This package provides a crate for mucking around with piles of bytes.")
+    (license license:zlib)))
+
 (define-public rust-bytemuck-1
   (package
     (name "rust-bytemuck")
@@ -6672,14 +8792,14 @@ in a byte slice, fast.")
 (define-public rust-byteorder-1
   (package
     (name "rust-byteorder")
-    (version "1.4.2")
+    (version "1.4.3")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "byteorder" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0srh0h0594jmsnbvm7n0g8xabhla8lwb3gn8s0fzd7d1snix2i5f"))))
+        (base32 "0456lv9xi1a5bcm32arknf33ikv76p3fr9yzki4lb2897p2qkh8l"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-development-inputs
@@ -6715,14 +8835,14 @@ little-endian.")
 (define-public rust-bytes-1
   (package
     (name "rust-bytes")
-    (version "1.0.1")
+    (version "1.1.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "bytes" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0h6h1c8g3yj2b4k8g25gr3246mq985y0kl3z685cs784fr1ww05p"))))
+        (base32 "1y70b249m02lfp0j6565b29kviapj4xsl9whamcqwddnp9kjv1y4"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
@@ -7326,7 +9446,7 @@ messages.")
         (base32 "17p0y0yk68pzsnpmaklhiqrrlrrv0ld8nhbg4qflmgibshi8b69p"))))
     (build-system cargo-build-system)
     (native-inputs
-     `(("capnproto" ,capnproto)))
+     (list capnproto))
     (arguments
      `(#:cargo-inputs
        (("rust-capnp" ,rust-capnp-0.13)
@@ -7463,7 +9583,6 @@ capabilities.")
      `(;; The test suite is disabled as the internal 'cargo-test-macro' and
        ;; 'cargo-test-support' crates are not included in the release.
        #:tests? #f
-       #:rust ,rust-1.52        ;transitively inherited from rust-sized-chunks
        #:cargo-inputs
        (("rust-anyhow" ,rust-anyhow-1)
         ("rust-atty" ,rust-atty-0.2)
@@ -7523,22 +9642,19 @@ capabilities.")
         ("rust-walkdir" ,rust-walkdir-2)
         ("rust-winapi" ,rust-winapi-0.3))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("curl" ,curl)
-       ("libssh2" ,libssh2)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list curl libssh2 openssl zlib))
     (home-page "https://crates.io")
     (synopsis "Package manager for Rust")
     (description "Cargo, a package manager for Rust.  This package provides
 the library crate of Cargo.")
     (license (list license:expat license:asl2.0))))
 
-(define-public rust-cargo-metadata-0.13
+(define-public rust-cargo-metadata-0.14
   (package
     (name "rust-cargo-metadata")
-    (version "0.13.0")
+    (version "0.14.1")
     (source
      (origin
        (method url-fetch)
@@ -7547,7 +9663,7 @@ the library crate of Cargo.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "11cnz97byqswmhpbbig9hss5kf8bmxq9nd5xjg3l2rsnnv040i32"))))
+         "04kfzvmh80pq0bw1cwzlz71wfrign2k7792mc4gi8hs1jkgfcams"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -7555,8 +9671,7 @@ the library crate of Cargo.")
        (("rust-camino" ,rust-camino-1)
         ("rust-cargo-platform" ,rust-cargo-platform-0.1)
         ("rust-derive-builder" ,rust-derive-builder-0.9)
-        ("rust-semver" ,rust-semver-0.11)
-        ("rust-semver-parser" ,rust-semver-parser-0.10)
+        ("rust-semver" ,rust-semver-1)
         ("rust-serde" ,rust-serde-1)
         ("rust-serde-json" ,rust-serde-json-1))))
     (home-page "https://github.com/oli-obk/cargo_metadata")
@@ -7566,6 +9681,32 @@ the library crate of Cargo.")
 metadata}.")
     (license license:expat)))
 
+(define-public rust-cargo-metadata-0.13
+  (package
+    (inherit rust-cargo-metadata-0.14)
+    (name "rust-cargo-metadata")
+    (version "0.13.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "cargo-metadata" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "11cnz97byqswmhpbbig9hss5kf8bmxq9nd5xjg3l2rsnnv040i32"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-camino" ,rust-camino-1)
+        ("rust-cargo-platform" ,rust-cargo-platform-0.1)
+        ("rust-derive-builder" ,rust-derive-builder-0.9)
+        ("rust-semver" ,rust-semver-0.11)
+        ("rust-semver-parser" ,rust-semver-parser-0.10)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-json" ,rust-serde-json-1))))))
+
 (define-public rust-cargo-metadata-0.9
   (package
     (inherit rust-cargo-metadata-0.13)
@@ -7618,6 +9759,25 @@ metadata}.")
        (;("rust-docopt" ,rust-docopt-0.8)
         ("rust-clap" ,rust-clap-2))))))
 
+(define-public rust-cargo-metadata-0.2
+  (package
+    (inherit rust-cargo-metadata-0.9)
+    (name "rust-cargo-metadata")
+    (version "0.2.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "cargo-metadata" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0ywd10r8gnfcmpg2cjv99gcwydgrn0syw252qcsgd1118sw5f45y"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-serde" ,rust-serde-1)
+        ("rust-serde-derive" ,rust-serde-derive-1)
+        ("rust-serde-json" ,rust-serde-json-1))))))
+
 (define-public rust-cargo-platform-0.1
   (package
     (name "rust-cargo-platform")
@@ -7649,7 +9809,7 @@ supported by Cargo.")
       (origin
         (method url-fetch)
         (uri (crate-uri "cargon" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1cszlab7jk736p0lb50ag4l9nv72m7j41bwrmygl0lr4iz0350w2"))))
@@ -7724,7 +9884,7 @@ box''.")
       (origin
         (method url-fetch)
         (uri (crate-uri "cblas-sys" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0rgsn3klhhh09d8qf3b87zl4rwk93l2g0qzh9hhb0lff5kcfrzmn"))))
@@ -7741,15 +9901,15 @@ box''.")
 (define-public rust-cc-1
   (package
     (name "rust-cc")
-    (version "1.0.66")
+    (version "1.0.67")
     (source
-      (origin
-        (method url-fetch)
-        (uri (crate-uri "cc" version))
-        (file-name (string-append name "-" version ".crate"))
-        (sha256
-         (base32
-          "0j7d7h4n81z5f22l3v8ggjvvw8m64636nlaqax4x1y44da1rc12c"))))
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "cc" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1z9p27ys80shv09zhknmlal8jjra78agdwg97i6jjd6lg83rpip3"))))
     (build-system cargo-build-system)
     (arguments
      `(#:tests? #f
@@ -7786,33 +9946,47 @@ is a non-standard variant of UTF-8 that is used internally by some systems
 that need to represent UTF-16 data as 8-bit characters.")
     (license (list license:asl2.0 license:expat))))
 
-(define-public rust-cexpr-0.4
+(define-public rust-cexpr-0.6
   (package
     (name "rust-cexpr")
-    (version "0.4.0")
+    (version "0.6.0")
     (source
-      (origin
-        (method url-fetch)
-        (uri (crate-uri "cexpr" version))
-        (file-name
-         (string-append name "-" version ".tar.gz"))
-        (sha256
-         (base32
-          "09qd1k1mrhcqfhqmsz4y1bya9gcs29si7y3w96pqkgid4y2dpbpl"))))
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "cexpr" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0rl77bwhs5p979ih4r0202cn5jrfsrbgrksp40lkfz5vk1x3ib3g"))))
     (build-system cargo-build-system)
-    (arguments
-     `(#:cargo-inputs
-       (("rust-nom" ,rust-nom-5))
-       #:cargo-development-inputs
-       (("rust-clang-sys" ,rust-clang-sys-0.28))))
+    (arguments `(#:skip-build? #t #:cargo-inputs (("rust-nom" ,rust-nom-7))))
     (inputs
-     `(("clang" ,clang)))
+     (list clang))
     (home-page "https://github.com/jethrogb/rust-cexpr")
     (synopsis "C expression parser and evaluator")
     (description
      "This package provides a C expression parser and evaluator.")
     (license (list license:asl2.0 license:expat))))
 
+(define-public rust-cexpr-0.4
+  (package
+    (inherit rust-cexpr-0.6)
+    (name "rust-cexpr")
+    (version "0.4.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "cexpr" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "09qd1k1mrhcqfhqmsz4y1bya9gcs29si7y3w96pqkgid4y2dpbpl"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-nom" ,rust-nom-5))
+       #:cargo-development-inputs
+       (("rust-clang-sys" ,rust-clang-sys-0.28))))))
+
 (define-public rust-cexpr-0.3
   (package
     (inherit rust-cexpr-0.4)
@@ -7874,6 +10048,50 @@ that need to represent UTF-16 data as 8-bit characters.")
 winded @code{#[cfg()]} checks.")
     (license license:expat)))
 
+(define-public rust-cfg-expr-0.8
+  (package
+    (name "rust-cfg-expr")
+    (version "0.8.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "cfg-expr" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "03lgv8psc2qrr93hxgdfmfwbj1crpzghxd7qh6w2nz0l4qryh4ml"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-smallvec" ,rust-smallvec-1)
+        ("rust-target-lexicon" ,rust-target-lexicon-0.12))
+       #:cargo-development-inputs
+       (("rust-difference" ,rust-difference-2))))
+    (home-page "https://github.com/EmbarkStudios/cfg-expr")
+    (synopsis "Parser and evaluator for Rust @code{cfg()} expressions")
+    (description
+     "This package provides a parser and evaluator for Rust @code{cfg()}
+expressions.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-cfg-expr-0.7
+  (package
+    (inherit rust-cfg-expr-0.8)
+    (name "rust-cfg-expr")
+    (version "0.7.4")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "cfg-expr" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32 "0sn2mw7s2i9qr5mrbyarz0mn5vb3iv6z656va6sccf5qzcprxaih"))))
+    (build-system cargo-build-system)
+    (arguments
+      `(#:skip-build? #t
+        #:cargo-inputs
+        (("rust-smallvec" ,rust-smallvec-1)
+         ("rust-target-lexicon" ,rust-target-lexicon-0.11))))))
+
 (define-public rust-cfg-if-1
   (package
     (name "rust-cfg-if")
@@ -7908,7 +10126,7 @@ chain, the first matching branch is the item that gets emitted.")
       (origin
         (method url-fetch)
         (uri (crate-uri "cfg-if" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "08h80ihs74jcyp24cd75wwabygbbdgl05k6p5dmq8akbr78vv1a7"))))
@@ -7917,10 +10135,74 @@ chain, the first matching branch is the item that gets emitted.")
        (("rust-compiler-builtins" ,rust-compiler-builtins-0.1)
         ("rust-rustc-std-workspace-core" ,rust-rustc-std-workspace-core-1))))))
 
-(define-public rust-chalk-derive-0.68
+(define-public rust-chacha20-0.8
+  (package
+    (name "rust-chacha20")
+    (version "0.8.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "chacha20" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "14cgpnnpqsn5hmqkgrj4yaqdsvy56hkgcw5s2gqsxwhc7m1jmdq1"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-cfg-if" ,rust-cfg-if-1)
+        ("rust-cipher" ,rust-cipher-0.3)
+        ("rust-cpufeatures" ,rust-cpufeatures-0.2)
+        ("rust-rand-core" ,rust-rand-core-0.6)
+        ("rust-zeroize" ,rust-zeroize-1))
+       #:cargo-development-inputs
+       (("rust-cipher" ,rust-cipher-0.3)
+        ("rust-hex-literal" ,rust-hex-literal-0.2))))
+    (home-page "https://github.com/RustCrypto/stream-ciphers")
+    (synopsis "ChaCha20 stream cipher implemented in pure Rust")
+    (description
+     "The ChaCha20 stream cipher (RFC 8439) implemented in pure Rust using traits
+from the RustCrypto @code{cipher} crate, with optional architecture-specific
+hardware acceleration (AVX2, SSE2).  Additionally provides the ChaCha8, ChaCha12,
+XChaCha20, XChaCha12 and XChaCha8 stream ciphers, and also optional
+@code{rand_core-compatible} RNGs based on those ciphers.")
+    (license (list license:asl2.0 license:expat))))
+
+(define-public rust-chacha20poly1305-0.9
+  (package
+    (name "rust-chacha20poly1305")
+    (version "0.9.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "chacha20poly1305" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0alawaaakczsll1b98qf4m6r6kfaw28506ljvsysjyjz3mnyv11v"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-aead" ,rust-aead-0.4)
+        ("rust-chacha20" ,rust-chacha20-0.8)
+        ("rust-cipher" ,rust-cipher-0.3)
+        ("rust-poly1305" ,rust-poly1305-0.7)
+        ("rust-zeroize" ,rust-zeroize-1))
+       #:cargo-development-inputs
+       (("rust-aead" ,rust-aead-0.4))))
+    (home-page "https://github.com/RustCrypto/AEADs")
+    (synopsis
+     "Pure Rust implementation of ChaCha20Poly1305 Authenticated Encryption")
+    (description
+     "Pure Rust implementation of the ChaCha20Poly1305 Authenticated
+Encryption with Additional Data Cipher (RFC 8439) with optional
+architecture-specific hardware acceleration.  Also contains implementations of
+the XChaCha20Poly1305 extended nonce variant of ChaCha20Poly1305, and the
+reduced-round ChaCha8Poly1305 and ChaCha12Poly1305 lightweight variants.")
+    (license (list license:asl2.0 license:expat))))
+
+(define-public rust-chalk-derive-0.75
   (package
     (name "rust-chalk-derive")
-    (version "0.68.0")
+    (version "0.75.0")
     (source
      (origin
        (method url-fetch)
@@ -7929,7 +10211,7 @@ chain, the first matching branch is the item that gets emitted.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "0ss18zx2ddp50mvbwffs5jmmcs7a0pkiq1g62xa7z1bacvkm45ga"))))
+         "0v1i5sb1w2skqg5sjy3gimdglsq0in6mc1zz36qyc99lkrgknknm"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -7946,25 +10228,48 @@ chain, the first matching branch is the item that gets emitted.")
 macros.")
     (license (list license:asl2.0 license:expat))))
 
-(define-public rust-chalk-ir-0.68
+(define-public rust-chalk-derive-0.68
   (package
-    (name "rust-chalk-ir")
+    (inherit rust-chalk-derive-0.75)
+    (name "rust-chalk-derive")
     (version "0.68.0")
     (source
      (origin
        (method url-fetch)
+       (uri (crate-uri "chalk-derive" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0ss18zx2ddp50mvbwffs5jmmcs7a0pkiq1g62xa7z1bacvkm45ga"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-proc-macro2" ,rust-proc-macro2-1)
+        ("rust-quote" ,rust-quote-1)
+        ("rust-syn" ,rust-syn-1)
+        ("rust-synstructure" ,rust-synstructure-0.12))))))
+
+(define-public rust-chalk-ir-0.75
+  (package
+    (name "rust-chalk-ir")
+    (version "0.75.0")
+    (source
+     (origin
+       (method url-fetch)
        (uri (crate-uri "chalk-ir" version))
        (file-name
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "0riyv4fjmxys8gsyrikn9in34cjcgwgj55qyaj9w9fld8kqxbmqr"))))
+         "12iyziaw14qb0wz3pqx70qwqa9r0qsi5d4y6j0g32yabs2hyay9b"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-bitflags" ,rust-bitflags-1)
-        ("rust-chalk-derive" ,rust-chalk-derive-0.68)
+        ("rust-chalk-derive" ,rust-chalk-derive-0.75)
         ("rust-lazy-static" ,rust-lazy-static-1))))
     (home-page "https://github.com/rust-lang/chalk")
     (synopsis
@@ -7974,8 +10279,60 @@ macros.")
 clauses.")
     (license (list license:asl2.0 license:expat))))
 
+(define-public rust-chalk-ir-0.68
+  (package
+    (inherit rust-chalk-ir-0.75)
+    (name "rust-chalk-ir")
+    (version "0.68.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "chalk-ir" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0riyv4fjmxys8gsyrikn9in34cjcgwgj55qyaj9w9fld8kqxbmqr"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bitflags" ,rust-bitflags-1)
+        ("rust-chalk-derive" ,rust-chalk-derive-0.68)
+        ("rust-lazy-static" ,rust-lazy-static-1))))))
+
+(define-public rust-chalk-recursive-0.75
+  (package
+    (name "rust-chalk-recursive")
+    (version "0.75.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "chalk-recursive" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "11bnn0yn9np4mar4nryys6w1ijizj3y9dcz3xbldxzx6fplmk7y3"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-chalk-derive" ,rust-chalk-derive-0.75)
+        ("rust-chalk-ir" ,rust-chalk-ir-0.75)
+        ("rust-chalk-solve" ,rust-chalk-solve-0.75)
+        ("rust-rustc-hash" ,rust-rustc-hash-1)
+        ("rust-tracing" ,rust-tracing-0.1))))
+    (home-page "https://github.com/rust-lang/chalk")
+    (synopsis
+     "Recursive solver for the Chalk project")
+    (description
+     "Recursive solver for the Chalk project")
+    (license (list license:asl2.0 license:expat))))
+
 (define-public rust-chalk-recursive-0.68
   (package
+    (inherit rust-chalk-recursive-0.75)
     (name "rust-chalk-recursive")
     (version "0.68.0")
     (source
@@ -7995,16 +10352,45 @@ clauses.")
         ("rust-chalk-ir" ,rust-chalk-ir-0.68)
         ("rust-chalk-solve" ,rust-chalk-solve-0.68)
         ("rust-rustc-hash" ,rust-rustc-hash-1)
-        ("rust-tracing" ,rust-tracing-0.1))))
+        ("rust-tracing" ,rust-tracing-0.1))))))
+
+(define-public rust-chalk-solve-0.75
+  (package
+    (name "rust-chalk-solve")
+    (version "0.75.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "chalk-solve" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "07gaf59zr7pgpr01l3si7a8iici2qh5dh2w2b05agaq5cvds3lm5"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-chalk-derive" ,rust-chalk-derive-0.75)
+        ("rust-chalk-ir" ,rust-chalk-ir-0.75)
+        ("rust-ena" ,rust-ena-0.14)
+        ("rust-itertools" ,rust-itertools-0.10)
+        ("rust-petgraph" ,rust-petgraph-0.5)
+        ("rust-rustc-hash" ,rust-rustc-hash-1)
+        ("rust-tracing" ,rust-tracing-0.1)
+        ("rust-tracing-subscriber"
+         ,rust-tracing-subscriber-0.3)
+        ("rust-tracing-tree" ,rust-tracing-tree-0.2))))
     (home-page "https://github.com/rust-lang/chalk")
     (synopsis
-     "Recursive solver for the Chalk project")
+     "Combines the chalk-engine with chalk-ir")
     (description
-     "Recursive solver for the Chalk project")
+     "This package provides a combines the chalk-engine with chalk-ir.")
     (license (list license:asl2.0 license:expat))))
 
 (define-public rust-chalk-solve-0.68
   (package
+    (inherit rust-chalk-solve-0.75)
     (name "rust-chalk-solve")
     (version "0.68.0")
     (source
@@ -8029,13 +10415,7 @@ clauses.")
         ("rust-tracing" ,rust-tracing-0.1)
         ("rust-tracing-subscriber"
          ,rust-tracing-subscriber-0.2)
-        ("rust-tracing-tree" ,rust-tracing-tree-0.1))))
-    (home-page "https://github.com/rust-lang/chalk")
-    (synopsis
-     "Combines the chalk-engine with chalk-ir")
-    (description
-     "This package provides a combines the chalk-engine with chalk-ir.")
-    (license (list license:asl2.0 license:expat))))
+        ("rust-tracing-tree" ,rust-tracing-tree-0.1))))))
 
 (define-public rust-charset-0.1
   (package
@@ -8128,8 +10508,36 @@ Encoding Standard.")
 Python arrow.humanize.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-chrono-tz-0.6
+  (package
+    (name "rust-chrono-tz")
+    (version "0.6.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "chrono-tz" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "12qcpjqva4fpj5kdcksbfhsc8dkbdhyi2z56p8dwf9bxc0f1rh34"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-chrono" ,rust-chrono-0.4)
+        ("rust-chrono-tz-build" ,rust-chrono-tz-build-0.0.2)
+        ("rust-phf" ,rust-phf-0.10)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-uncased" ,rust-uncased-0.9))))
+    (home-page "https://github.com/chronotope/chrono-tz")
+    (synopsis "TimeZone implementations for rust-chrono from the IANA database")
+    (description
+     "Chrono-TZ is a library that provides implementors of the TimeZone trait
+for @code{rust-chrono}.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-chrono-tz-0.5
   (package
+    (inherit rust-chrono-tz-0.6)
     (name "rust-chrono-tz")
     (version "0.5.3")
     (source
@@ -8139,40 +10547,73 @@ Python arrow.humanize.")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "085i4940kn0fn4gkl3xi1kv3vp2frhfig1vla1i461pcbwas6m15"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-chrono" ,rust-chrono-0.4)
         ("rust-parse-zoneinfo" ,rust-parse-zoneinfo-0.3)
-        ("rust-serde" ,rust-serde-1))))
+        ("rust-serde" ,rust-serde-1))))))
+
+(define-public rust-chrono-tz-build-0.0.2
+  (package
+    (name "rust-chrono-tz-build")
+    (version "0.0.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "chrono-tz-build" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0schy3z03psvmc6734hgkx52cdb3zvixgzhvhr0mzxmj7x4qs1fv"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-parse-zoneinfo" ,rust-parse-zoneinfo-0.3)
+        ("rust-phf" ,rust-phf-0.10)
+        ("rust-phf-codegen" ,rust-phf-codegen-0.10)
+        ("rust-regex" ,rust-regex-1)
+        ("rust-uncased" ,rust-uncased-0.9))))
     (home-page "https://github.com/chronotope/chrono-tz")
-    (synopsis "TimeZone implementations for rust-chrono from the IANA database")
+    (synopsis "Internal build script for chrono-tz Rust package")
     (description
-     "Chrono-TZ is a library that provides implementors of the
-TimeZone trait for @code{rust-chrono}.")
+     "This package contains the internal build script for
+chrono-tz Rust crate.")
     (license (list license:expat license:asl2.0))))
 
-(define-public rust-chunked-transfer-0.3
+(define-public rust-chunked-transfer-1
   (package
     (name "rust-chunked-transfer")
-    (version "0.3.1")
+    (version "1.4.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "chunked_transfer" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "11yghnd24w0i9p8g368c3pg7qh9nfz7kgri6pywja9pnmakj13a9"))))
+        (base32
+         "0bkdlsrszfcscw3j6yhs7kj6jbp8id47jjk6h9k58px47na5gy7z"))))
     (build-system cargo-build-system)
     (arguments `(#:skip-build? #t))
     (home-page "https://github.com/frewsxcv/rust-chunked-transfer")
     (synopsis "Encoder and decoder for HTTP chunked transfer coding")
-    (description
-     "This package provides an encoder and decoder for HTTP chunked transfer
-coding.")
+    (description "This package provides an encoder and decoder for HTTP chunked
+transfer coding.")
     (license license:asl2.0)))
 
+(define-public rust-chunked-transfer-0.3
+  (package
+    (inherit rust-chunked-transfer-1)
+    (name "rust-chunked-transfer")
+    (version "0.3.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "chunked_transfer" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "11yghnd24w0i9p8g368c3pg7qh9nfz7kgri6pywja9pnmakj13a9"))))))
+
 (define-public rust-ci-info-0.3
   (package
     (name "rust-ci-info")
@@ -8261,7 +10702,7 @@ coding.")
          "0695kfrqx7n091fzm6msbqg2q2kyhka64q08lm63f3l9d964i8cx"))))
     (build-system cargo-build-system)
     (inputs
-     `(("clang" ,clang)))
+     (list clang))
     (arguments
      `(#:cargo-inputs
        (("rust-glob" ,rust-glob-0.3)
@@ -8354,7 +10795,7 @@ traits.")
       (origin
         (method url-fetch)
         (uri (crate-uri "clang-sys" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1r50dwy5hj5gq07dn0qf8222d07qv0970ymx0j8n9779yayc3w3f"))))
@@ -8500,18 +10941,18 @@ Command Line Argument Parser.")
   (package
     (inherit rust-clap-3)
     (name "rust-clap")
-    (version "2.33.3")
+    (version "2.34.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "clap" version))
-       (file-name (string-append name "-" version ".crate"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "00i065a58987k1sbzqmlz721rw521zcg08jmsh40gi3khp3qmr9p"))))
+         "071q5d8jfwbazi6zhik9xwpacx5i6kb2vkzy060vhf0c3120aqd0"))))
     (arguments
      `(#:cargo-inputs
-       (("rust-ansi-term" ,rust-ansi-term-0.11)
+       (("rust-ansi-term" ,rust-ansi-term-0.12)
         ("rust-atty" ,rust-atty-0.2)
         ("rust-bitflags" ,rust-bitflags-1)
         ("rust-clippy" ,rust-clippy-0.0)
@@ -8561,7 +11002,7 @@ Command Line Argument Parser.")
       (origin
         (method url-fetch)
         (uri (crate-uri "clicolors-control" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "07klix8nbpwk0cg1k4h0kkiijm1jxvrzndqdkr7dqr6xvkjjw24h"))))
@@ -8665,6 +11106,90 @@ colorization.")
 pitfalls in Rust.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-clippy-0.0.153
+  (package
+    (inherit rust-clippy-0.0)
+    (name "rust-clippy")
+    (version "0.0.153")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "clippy" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1b5c96303nc6ngphazjafafgjjfawfbsjrkr2c8m2xvg7finxf47"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-cargo-metadata" ,rust-cargo-metadata-0.2)
+        ("rust-clippy-lints" ,rust-clippy-lints-0.0.153))
+       #:cargo-development-inputs
+       (("rust-clippy-mini-macro-test" ,rust-clippy-mini-macro-test-0.1)
+        ("rust-compiletest-rs" ,rust-compiletest-rs-0.2)
+        ("rust-duct" ,rust-duct-0.8)
+        ("rust-lazy-static" ,rust-lazy-static-0.2)
+        ("rust-regex" ,rust-regex-0.2)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-derive" ,rust-serde-derive-1))))))
+
+(define-public rust-clippy-lints-0.0.153
+  (package
+    (name "rust-clippy-lints")
+    (version "0.0.153")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "clippy-lints" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "021w4cv2qwczkk0w4d6zy52yx6afi4yz5y29wq6xmb0wqwzp55ca"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-itertools" ,rust-itertools-0.6)
+        ("rust-lazy-static" ,rust-lazy-static-0.2)
+        ("rust-matches" ,rust-matches-0.1)
+        ("rust-pulldown-cmark" ,rust-pulldown-cmark-0.0.15)
+        ("rust-quine-mc-cluskey" ,rust-quine-mc-cluskey-0.2)
+        ("rust-regex-syntax" ,rust-regex-syntax-0.4)
+        ("rust-semver" ,rust-semver-0.6)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-derive" ,rust-serde-derive-1)
+        ("rust-toml" ,rust-toml-0.4)
+        ("rust-unicode-normalization" ,rust-unicode-normalization-0.1))))
+    (home-page "https://github.com/rust-lang-nursery/rust-clippy")
+    (synopsis "A bunch of helpful lints to avoid common pitfalls in Rust")
+    (description
+     "This package provides a bunch of helpful lints to avoid common pitfalls
+in Rust")
+    (license license:mpl2.0)))
+
+(define-public rust-clippy-mini-macro-test-0.1
+  (package
+    (name "rust-clippy-mini-macro-test")
+    (version "0.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "clippy-mini-macro-test" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1f1q09az4xk4aqnp8g1m6kf4hif75gr7rwzhh4yw7g1gqk94jsgq"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t))
+    (home-page "https://github.com/rust-lang-nursery/rust-clippy")
+    (synopsis "Macro to test clippy's procedural macro checks")
+    (description
+     "This package provides a macro to test clippy's procedural macro
+checks.")
+    (license license:mpl2.0)))
+
 (define-public rust-clircle-0.3
   (package
     (name "rust-clircle")
@@ -8685,7 +11210,7 @@ pitfalls in Rust.")
         ("rust-serde" ,rust-serde-1)
         ("rust-winapi" ,rust-winapi-0.3))))
     (home-page "https://github.com/niklasmohrin/clircle")
-    (synopsis "Detect IO circles in your CLI apps arguments.")
+    (synopsis "Detect IO circles in your CLI apps arguments")
     (description
      "Clircle provides a cross-platform API to detect read or write cycles
 from your user-supplied arguments.  You can get the important identifiers of
@@ -8701,7 +11226,7 @@ or to a file as well.")
       (origin
         (method url-fetch)
         (uri (crate-uri "cloudabi" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0rv4yf5jlldfkynzrw687s00f4x12ypw7axv71vawhy6h4i52i23"))))
@@ -8725,7 +11250,7 @@ contains all syscalls and related types.")
       (origin
         (method url-fetch)
         (uri (crate-uri "cloudabi" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0kxcg83jlihy0phnd2g8c2c303px3l2p3pkjz357ll6llnd5pz6x"))))
@@ -8733,20 +11258,19 @@ contains all syscalls and related types.")
      `(#:cargo-inputs
        (("rust-bitflags" ,rust-bitflags-1))))))
 
-(define-public rust-cloudflare-zlib-sys-0.2
+(define-public rust-cloudflare-zlib-sys-0.3
   (package
     (name "rust-cloudflare-zlib-sys")
-    (version "0.2.0")
+    (version "0.3.0")
     (source
-      (origin
-        (method url-fetch)
-        (uri (crate-uri "cloudflare-zlib-sys" version))
-        (file-name
-         (string-append name "-" version ".tar.gz"))
-        (sha256
-         (base32
-          "01lwfd15ijw4d8jsqp87yv4wpmzcp84qm0qqwy3yxmm0fjr5q6by"))))
-    ;; This crate bundles cloudflare's fork of zlib, so we don't unbundle it.
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "cloudflare-zlib-sys" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0vyd0l0vprvh9hc1ikllybrk8xc0lz9f509d2xgxgrpyxp8vch10"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -8758,9 +11282,29 @@ contains all syscalls and related types.")
     (description
      "Cloudflare fork of zlib with massive performance improvements.")
     (license
-      (list license:expat
-            license:asl2.0
-            license:zlib))))
+     (list license:expat
+           license:asl2.0
+           license:zlib))))
+
+(define-public rust-cloudflare-zlib-sys-0.2
+  (package
+    (inherit rust-cloudflare-zlib-sys-0.3)
+    (name "rust-cloudflare-zlib-sys")
+    (version "0.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "cloudflare-zlib-sys" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "01lwfd15ijw4d8jsqp87yv4wpmzcp84qm0qqwy3yxmm0fjr5q6by"))))
+    ;; This crate bundles cloudflare's fork of zlib, so we don't unbundle it.
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-cc" ,rust-cc-1))))))
 
 (define-public rust-cmac-0.5
   (package
@@ -8795,7 +11339,7 @@ Cipher-based Message Authentication Code (CMAC).")
       (origin
         (method url-fetch)
         (uri (crate-uri "cmake" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1fv346ipxmvff6qrnh78rild0s8k72ilfjkdsrk869562y62cmhf"))))
@@ -9033,6 +11577,78 @@ diagnostics easy and relatively painless for everyone!")
         ("rust-structopt" ,rust-structopt-0.3)
         ("rust-unindent" ,rust-unindent-0.1))))))
 
+(define-public rust-color-backtrace-0.5
+  (package
+    (name "rust-color-backtrace")
+    (version "0.5.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "color-backtrace" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "11fn3snykx90w3nznzrcf4r164zmhk790asx0kzryf4r7i308v6d"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-atty" ,rust-atty-0.2)
+        ("rust-backtrace" ,rust-backtrace-0.3)
+        ("rust-regex" ,rust-regex-1)
+        ("rust-termcolor" ,rust-termcolor-1))))
+    (home-page "https://github.com/athre0z/color-backtrace")
+    (synopsis "Colorful panic backtraces")
+    (description "This package provides colorful panic backtraces.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-concolor-query
+  (package
+    (name "rust-concolor-query")
+    (version "0.0.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "concolor-query" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1isbqpyiwblp0rglnaqzai5hav23095s82mwgi09v3xcck4rq5dd"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/rust-cli/concolor")
+    (synopsis "Rust library to query low level terminal capabilities")
+    (description "@code{concolor-query} can be used to query a terminal
+capabilities, for example to find out about its colored console abilities.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-concolor-control
+  (package
+    (name "rust-concolor-control")
+    (version "0.0.7")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "concolor-control" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1nplakbdb9sbd3h62d9zkan0xm1w0c7cbl3rk0iqgn405yf1213i"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:tests? #f          ;see https://github.com/rust-cli/concolor/issues/4
+       #:cargo-inputs
+       (("rust-atty" ,rust-atty-0.2)
+        ("rust-bitflags" ,rust-bitflags-1)
+        ("rust-concolor-query" ,rust-concolor-query))))
+    (home-page "https://github.com/rust-cli/concolor")
+    (synopsis "Rust library for managing terminal styling")
+    (description "@code{concolor-control} is a terminal styling library that
+can be used to:
+@itemize
+@item Detect interactive @samp{stdout} or @samp{stderr}
+@item Detect terminal capabilities via @samp{TERM}
+@item Support @url{https://bixense.com/clicolors/, CLICOLOR} and
+@url{https://no-color.org/, NO_COLOR}.
+@end itemize")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-color-quant-1
   (package
     (name "rust-color-quant")
@@ -9202,24 +11818,25 @@ combinator.")
 and 1.0.")
     (license (list license:expat license:asl2.0))))
 
-(define-public rust-comfy-table-1
+(define-public rust-comfy-table-4
   (package
     (name "rust-comfy-table")
-    (version "1.6.0")
+    (version "4.1.1")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "comfy-table" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1y6lc8h2lyyrrrdc36fz7brwyjz5l9w4nld4qx9mlacfibm8i92j"))))
+        (base32 "1wzk894p2s725cpdip5968ydb50zczsl34040j6zs8klhqz5ms8i"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-crossterm" ,rust-crossterm-0.19)
-        ("rust-strum" ,rust-strum-0.20)
-        ("rust-strum-macros" ,rust-strum-macros-0.20))))
+       (("rust-crossterm" ,rust-crossterm-0.20)
+        ("rust-strum" ,rust-strum-0.21)
+        ("rust-strum-macros" ,rust-strum-macros-0.21)
+        ("rust-unicode-width" ,rust-unicode-width-0.1))))
     (home-page "https://github.com/nukesor/comfy-table")
     (synopsis "Library for building tables with automatic content wrapping")
     (description
@@ -9227,6 +11844,25 @@ and 1.0.")
 wrapping.")
     (license license:expat)))
 
+(define-public rust-comfy-table-1
+  (package
+    (inherit rust-comfy-table-4)
+    (name "rust-comfy-table")
+    (version "1.6.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "comfy-table" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1y6lc8h2lyyrrrdc36fz7brwyjz5l9w4nld4qx9mlacfibm8i92j"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-crossterm" ,rust-crossterm-0.19)
+        ("rust-strum" ,rust-strum-0.20)
+        ("rust-strum-macros" ,rust-strum-macros-0.20))))))
+
 (define-public rust-commoncrypto-sys-0.2
   (package
     (name "rust-commoncrypto-sys")
@@ -9307,7 +11943,7 @@ idiomatic wrappers for Mac OS X's CommonCrypto library.")
       (origin
         (method url-fetch)
         (uri (crate-uri "compiler_builtins" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1rhj6ccmfkh9gcxnxgjq4fg257yi4f9325nfzsphbmxwkrg06sq3"))))
@@ -9405,6 +12041,72 @@ harness.")
         ("rust-rustc-serialize" ,rust-rustc-serialize-0.3)
         ("rust-tempdir" ,rust-tempdir-0.3))))))
 
+(define-public rust-concat-idents-1
+  (package
+    (name "rust-concat-idents")
+    (version "1.1.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "concat-idents" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0bqdl6vml2ksyz6hc4xlpw3iqaagxs7xn0xinwa51ms80a390vsb"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-quote" ,rust-quote-1)
+        ("rust-syn" ,rust-syn-1))))
+    (home-page "https://github.com/DzenanJupic/concat-idents")
+    (synopsis "Concatenate multiple identifiers and use them everywhere")
+    (description
+     "This package allows concatenating multiple identifiers and using them
+everywhere.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-concolor-control-0.0.7
+  (package
+    (name "rust-concolor-control")
+    (version "0.0.7")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "concolor-control" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1nplakbdb9sbd3h62d9zkan0xm1w0c7cbl3rk0iqgn405yf1213i"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-atty" ,rust-atty-0.2)
+        ("rust-bitflags" ,rust-bitflags-1)
+        ("rust-concolor-query" ,rust-concolor-query-0.0.4))))
+    (home-page "https://github.com/rust-cli/concolor")
+    (synopsis "Control console coloring across all dependencies")
+    (description "This crate provides control console coloring across all
+dependencies.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-concolor-query-0.0.4
+  (package
+    (name "rust-concolor-query")
+    (version "0.0.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "concolor-query" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1isbqpyiwblp0rglnaqzai5hav23095s82mwgi09v3xcck4rq5dd"))))
+    (build-system cargo-build-system)
+    (arguments `(#:skip-build? #t))
+    (home-page "https://github.com/rust-cli/concolor")
+    (synopsis "Look up colored console capabilities")
+    (description "This crate provides low level terminal capability lookups.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-concurrent-queue-1
   (package
     (name "rust-concurrent-queue")
@@ -9430,17 +12132,17 @@ harness.")
 queue.")
     (license (list license:asl2.0 license:expat))))
 
-(define-public rust-config-0.10
+(define-public rust-config-0.11
   (package
     (name "rust-config")
-    (version "0.10.1")
+    (version "0.11.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "config" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1qrcp7nm24xzp418xnqf0i26qahw93w31nk5vs6m7ng18ghpdc0r"))))
+        (base32 "0sdkxv77m65frsn3bx0r3v7asxar3gy3hmghcfk6h4rbijars6qv"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -9460,6 +12162,30 @@ queue.")
 applications.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-config-0.10
+  (package
+    (inherit rust-config-0.11)
+    (name "rust-config")
+    (version "0.10.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "config" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1qrcp7nm24xzp418xnqf0i26qahw93w31nk5vs6m7ng18ghpdc0r"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-nom" ,rust-nom-5)
+        ("rust-rust-ini" ,rust-rust-ini-0.13)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-hjson" ,rust-serde-hjson-0.9)
+        ("rust-serde-json" ,rust-serde-json-1)
+        ("rust-toml" ,rust-toml-0.5)
+        ("rust-yaml-rust" ,rust-yaml-rust-0.4))))))
+
 (define-public rust-configparser-2
   (package
     (name "rust-configparser")
@@ -9481,24 +12207,24 @@ dependencies that allows you to parse INI and ini-style syntax.  You can use
 this to write Rust programs which can be customized by end users easily.")
     (license (list license:expat license:lgpl3+))))
 
-(define-public rust-console-0.14
+(define-public rust-console-0.15
   (package
     (name "rust-console")
-    (version "0.14.1")
+    (version "0.15.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "console" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0i8z1bdbv8is1lamd81jdsf4pa1ww2jl3h0yjdshc5mabd2fd4rr"))))
+        (base32 "0c9wif28i3q231gvjprqdq1glmgmmcdxpmxcwk1p0jx45k9k52x2"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-encode-unicode" ,rust-encode-unicode-0.3)
-        ("rust-lazy-static" ,rust-lazy-static-1)
         ("rust-libc" ,rust-libc-0.2)
+        ("rust-once-cell" ,rust-once-cell-1)
         ("rust-regex" ,rust-regex-1)
         ("rust-terminal-size" ,rust-terminal-size-0.1)
         ("rust-unicode-width" ,rust-unicode-width-0.1)
@@ -9510,6 +12236,30 @@ this to write Rust programs which can be customized by end users easily.")
      "This package provides a terminal and console abstraction for Rust.")
     (license license:expat)))
 
+(define-public rust-console-0.14
+  (package
+    (inherit rust-console-0.15)
+    (name "rust-console")
+    (version "0.14.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "console" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0i8z1bdbv8is1lamd81jdsf4pa1ww2jl3h0yjdshc5mabd2fd4rr"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-encode-unicode" ,rust-encode-unicode-0.3)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-regex" ,rust-regex-1)
+        ("rust-terminal-size" ,rust-terminal-size-0.1)
+        ("rust-unicode-width" ,rust-unicode-width-0.1)
+        ("rust-winapi" ,rust-winapi-0.3)
+        ("rust-winapi-util" ,rust-winapi-util-0.1))))))
+
 (define-public rust-console-0.13
   (package
     (inherit rust-console-0.14)
@@ -9685,6 +12435,27 @@ the browser's console.")
 const functions with conditional compilations.")
     (license (list license:asl2.0 license:expat))))
 
+(define-public rust-const-oid-0.6
+  (package
+    (name "rust-const-oid")
+    (version "0.6.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "const-oid" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "12vv7csqqjj0x1l5mf51lgqiw76k5c3mb1yzfhfcqysks2j2lvwx"))))
+    (build-system cargo-build-system)
+    (arguments `(#:skip-build? #t))
+    (home-page "https://github.com/RustCrypto/formats/tree/master/const-oid")
+    (synopsis "Implementation of the ISO/IEC Object Identifier (OID)")
+    (description
+     "This packages is a const-friendly implementation of the ISO/IEC Object
+Identifier (OID) standard as defined in ITU X.660, with support for BER/DER
+encoding/decoding as well as heapless no_std (i.e., embedded) support.")
+    (license (list license:asl2.0 license:expat))))
+
 (define-public rust-const-random-0.1
   (package
     (name "rust-const-random")
@@ -9731,6 +12502,25 @@ generation.")
 @code{rust-const-random}.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-const-sha1-0.2
+  (package
+    (name "rust-const-sha1")
+    (version "0.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "const-sha1" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "179cgi2m3wj5g80j49pggs95xalc6y1ivvbrv4m82alc3r2vcn7v"))))
+    (build-system cargo-build-system)
+    (arguments `(#:skip-build? #t))
+    (home-page "https://github.com/rylev/const-sha1")
+    (synopsis "sha1 implementation for use in const contexts")
+    (description
+     "This package provides a sha1 implementation for use in const contexts.")
+    (license (list license:asl2.0 license:expat))))
+
 (define-public rust-constant-time-eq-0.1
   (package
     (name "rust-constant-time-eq")
@@ -9739,7 +12529,7 @@ generation.")
      (origin
        (method url-fetch)
        (uri (crate-uri "constant_time_eq" version))
-       (file-name (string-append name "-" version ".crate"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
          "1g3vp04qzmk6cpzrd19yci6a95m7ap6wy7wkwgiy2pjklklrfl14"))))
@@ -9806,6 +12596,27 @@ to guess the type of content.")
 semantics than those provided by @code{as} or @code{From}/@code{Into}.")
     (license license:expat)))
 
+(define-public rust-convert-case-0.4
+  (package
+    (name "rust-convert-case")
+    (version "0.4.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "convert-case" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "03jaf1wrsyqzcaah9jf8l1iznvdw5mlsca2qghhzr9w27sddaib2"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-rand" ,rust-rand-0.7))))
+    (home-page "https://github.com/rutrum/convert-case")
+    (synopsis "Convert strings into any case")
+    (description "Convert strings into any case.")
+    (license license:expat)))
+
 (define-public rust-cookie-0.12
   (package
     (name "rust-cookie")
@@ -9989,8 +12800,39 @@ contents of the OS-level clipboard.")
 numbers using the CORDIC method.")
     (license license:bsd-3)))
 
+(define-public rust-cookie-0.15
+  (package
+    (name "rust-cookie")
+    (version "0.15.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "cookie" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "03gql9c2l0wg3hpfp67wg2ns21wysk0xsjxwdbjrf0s6grrcgwfm"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-aes-gcm" ,rust-aes-gcm-0.8)
+        ("rust-base64" ,rust-base64-0.13)
+        ("rust-hkdf" ,rust-hkdf-0.10)
+        ("rust-hmac" ,rust-hmac-0.10)
+        ("rust-percent-encoding" ,rust-percent-encoding-2)
+        ("rust-rand" ,rust-rand-0.8)
+        ("rust-sha2" ,rust-sha2-0.9)
+        ("rust-subtle" ,rust-subtle-2)
+        ("rust-time" ,rust-time-0.2)
+        ("rust-version-check" ,rust-version-check-0.9))))
+    (home-page "https://github.com/SergioBenitez/cookie-rs")
+    (synopsis "HTTP cookie parsing and cookie jar management")
+    (description "This package provides HTTP cookie parsing and cookie jar
+management.  It supports signed and private (encrypted, authenticated) jars.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-cookie-0.14
   (package
+    (inherit rust-cookie-0.15)
     (name "rust-cookie")
     (version "0.14.2")
     (source
@@ -10001,7 +12843,6 @@ numbers using the CORDIC method.")
        (sha256
         (base32
          "1q56fl2cqrci9ksa80d7g220phq02nf1yfbvxkpk9g1p95ma2wqk"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-aes-gcm" ,rust-aes-gcm-0.6)
@@ -10013,15 +12854,41 @@ numbers using the CORDIC method.")
         ("rust-sha2" ,rust-sha2-0.9)
         ("rust-time" ,rust-time-0.2))
        #:cargo-development-inputs
-       (("rust-version-check" ,rust-version-check-0.9))))
-    (home-page "https://github.com/SergioBenitez/cookie-rs")
-    (synopsis "HTTP cookie parsing and cookie jar management")
-    (description "This package provides HTTP cookie parsing and cookie jar
-management.  It supports signed and private (encrypted, authenticated) jars.")
+       (("rust-version-check" ,rust-version-check-0.9))))))
+
+(define-public rust-cookie-store-0.15
+  (package
+    (name "rust-cookie-store-15")
+    (version "0.15.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "cookie-store" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0z0navy9k0ivrdvz492q8c4nhd3iv5l77hwfppskdp1j15607xxk"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-cookie" ,rust-cookie-0.15)
+        ("rust-idna" ,rust-idna-0.2)
+        ("rust-indexmap" ,rust-indexmap-1)
+        ("rust-log" ,rust-log-0.4)
+        ("rust-publicsuffix" ,rust-publicsuffix-2)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-json" ,rust-serde-json-1)
+        ("rust-time" ,rust-time-0.2)
+        ("rust-url" ,rust-url-2))))
+    (home-page "https://github.com/pfernie/cookie_store")
+    (synopsis "Cookie storage and retrieval")
+    (description "This package implements cookie storage and retrieval.")
     (license (list license:expat license:asl2.0))))
 
 (define-public rust-cookie-store-0.12
   (package
+    (inherit rust-cookie-store-0.15)
     (name "rust-cookie-store")
     (version "0.12.0")
     (source
@@ -10032,7 +12899,6 @@ management.  It supports signed and private (encrypted, authenticated) jars.")
        (sha256
         (base32
          "1lqhmdwgnyvi1mjmw4rbgd02fwav4aabpg4vcld23d8c9g5dy61q"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-cookie" ,rust-cookie-0.14)
@@ -10046,11 +12912,7 @@ management.  It supports signed and private (encrypted, authenticated) jars.")
         ("rust-url" ,rust-url-2))
        #:cargo-development-inputs
        (("rust-env-logger" ,rust-env-logger-0.7)
-        ("rust-pretty-assertions" ,rust-pretty-assertions-0.6))))
-    (home-page "https://github.com/pfernie/cookie_store")
-    (synopsis "Cookie storage and retrieval")
-    (description "This package implements cookie storage and retrieval.")
-    (license (list license:expat license:asl2.0))))
+        ("rust-pretty-assertions" ,rust-pretty-assertions-0.6))))))
 
 (define-public rust-core-affinity-0.5
   (package
@@ -10226,7 +13088,7 @@ intrinsics.")
      (origin
        (method url-fetch)
        (uri (crate-uri "core-foundation-sys" version))
-       (file-name (string-append name "-" version ".crate"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
          "0fzsw1j9g1x598yhwklg59l15hwzc0pyvs01w9fg2kin4598mjp7"))))))
@@ -10295,10 +13157,10 @@ intrinsics.")
         ("rust-foreign-types" ,rust-foreign-types-0.3)
         ("rust-libc" ,rust-libc-0.2))))))
 
-(define-public rust-cov-mark-1
+(define-public rust-cov-mark-2
   (package
     (name "rust-cov-mark")
-    (version "1.1.0")
+    (version "2.0.0-pre.1")
     (source
      (origin
        (method url-fetch)
@@ -10307,7 +13169,7 @@ intrinsics.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1wv75ylrai556m388a40d50fxiyacmvm6qqz6va6qf1q04z3vylz"))))
+         "0jj4yz70k31ax1n3s7iyjv1k5yzrm4hkibrazqciycyrdgvxhj0d"))))
     (arguments `(#:skip-build? #t))
     (build-system cargo-build-system)
     (home-page "https://github.com/matklad/cov-mark")
@@ -10315,10 +13177,26 @@ intrinsics.")
     (description "This package provides a Manual coverage marks.")
     (license (list license:expat license:asl2.0))))
 
-(define-public rust-countme-2
+(define-public rust-cov-mark-1
+  (package
+    (inherit rust-cov-mark-2)
+    (name "rust-cov-mark")
+    (version "1.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "cov-mark" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1wv75ylrai556m388a40d50fxiyacmvm6qqz6va6qf1q04z3vylz"))))
+    (arguments `(#:skip-build? #t))))
+
+(define-public rust-countme-3
   (package
     (name "rust-countme")
-    (version "2.0.4")
+    (version "3.0.0")
     (source
      (origin
        (method url-fetch)
@@ -10327,7 +13205,7 @@ intrinsics.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "0n6bzg2g6gsmgabyzbcfkyb9y9mzxsvavng85d04wkdsvhmq52rj"))))
+         "10z4r1xx77sr8axp3lsgc0azidazwgnhpzig2gcx5dfrdl66wx03"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
@@ -10341,6 +13219,27 @@ intrinsics.")
      "This package provides a counts the number of live instances of types.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-countme-2
+  (package
+    (inherit rust-countme-3)
+    (name "rust-countme")
+    (version "2.0.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "countme" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0n6bzg2g6gsmgabyzbcfkyb9y9mzxsvavng85d04wkdsvhmq52rj"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-dashmap" ,rust-dashmap-4)
+        ("rust-once-cell" ,rust-once-cell-1)
+        ("rust-rustc-hash" ,rust-rustc-hash-1))))))
+
 (define-public rust-cpp-demangle-0.3
   (package
     (name "rust-cpp-demangle")
@@ -10389,22 +13288,19 @@ intrinsics.")
        (("rust-clap" ,rust-clap-2)
         ("rust-diff" ,rust-diff-0.1))))))
 
-(define-public rust-cpufeatures-0.1
+(define-public rust-cpufeatures-0.2
   (package
     (name "rust-cpufeatures")
-    (version "0.1.4")
+    (version "0.2.1")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "cpufeatures" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1j0i97325c2grndsfgnm3lqk0xbyvdl2dbgn8i5dd9yhnmycc07d"))))
+        (base32 "0sgllzsvs8hinylaiigmd9c908gd8wclxnqz8dinpxbdyql981cm"))))
     (build-system cargo-build-system)
-    (arguments
-     `(#:skip-build? #t
-       #:cargo-inputs
-       (("rust-libc" ,rust-libc-0.2))))
+    (arguments `(#:cargo-inputs (("rust-libc" ,rust-libc-0.2))))
     (home-page "https://github.com/RustCrypto/utils")
     (synopsis "Alternative to the @code{is_x86_feature_detected!} macro")
     (description
@@ -10412,6 +13308,19 @@ intrinsics.")
 to the @code{is_x86_feature_detected!} macro.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-cpufeatures-0.1
+  (package
+    (inherit rust-cpufeatures-0.2)
+    (name "rust-cpufeatures")
+    (version "0.1.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "cpufeatures" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1j0i97325c2grndsfgnm3lqk0xbyvdl2dbgn8i5dd9yhnmycc07d"))))))
+
 (define-public rust-cpuid-bool-0.1
   (package
     (name "rust-cpuid-bool")
@@ -10433,6 +13342,32 @@ to the @code{is_x86_feature_detected!} macro.")
 to @code{is_x86_feature_detected}.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-cpuprofiler-0.0
+  (package
+    (name "rust-cpuprofiler")
+    (version "0.0.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "cpuprofiler" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0az588yyl9r13w4k7xfdh5ckfaq52fwpjry2q2hblazxpjflgy23"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-error-chain" ,rust-error-chain-0.12)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-pkg-config" ,rust-pkg-config-0.3))))
+    (inputs
+     (list gperftools))
+    (home-page "https://github.com/AtheMathmo/cpuprofiler")
+    (synopsis "Bindings to Google's cpu profiler")
+    (description "This package provides bindings to Google's cpu profiler.")
+    (license license:bsd-2)))
+
 (define-public rust-crates-index-0.13
   (package
     (name "rust-crates-index")
@@ -10466,6 +13401,28 @@ to @code{is_x86_feature_detected}.")
      "Library for retrieving and interacting with the crates.io index.")
     (license license:asl2.0)))
 
+(define-public rust-crates-index-0.5
+  (package
+    (inherit rust-crates-index-0.13)
+    (name "rust-crates-index-5")
+    (version "0.5.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "crates-index" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1gak1czvvdz7l00vkkj61srrfa1sj2yl4ydghhgywydby5qh3mlg"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:tests? #f                      ;"curl error: Could not resolve host: github.com\n"
+       #:cargo-inputs
+       (("rust-git2" ,rust-git2-0.6)
+        ("rust-glob" ,rust-glob-0.2)
+        ("rust-rustc-serialize" ,rust-rustc-serialize-0.3))))
+    (native-inputs (list pkg-config))
+    (inputs (list zlib openssl libssh2 curl cmake))))
+
 (define-public rust-crates-io-0.33
   (package
     (name "rust-crates-io")
@@ -10489,10 +13446,7 @@ to @code{is_x86_feature_detected}.")
         ("rust-serde-json" ,rust-serde-json-1)
         ("rust-url" ,rust-url-2))))
     (native-inputs
-     `(("curl" ,curl)
-       ("openssl" ,openssl)
-       ("pkg-config" ,pkg-config)
-       ("zlib" ,zlib)))
+     (list curl openssl pkg-config zlib))
     (home-page "https://github.com/rust-lang/cargo")
     (synopsis "Helpers for interacting with @url{crates.io}")
     (description "This package provides helpers for interacting with
@@ -10521,6 +13475,32 @@ to @code{is_x86_feature_detected}.")
 64) with support for various standards.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-crc-any-2
+  (package
+    (name "rust-crc-any")
+    (version "2.3.12")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "crc-any" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0fq85y5akcadahnj5nqbs47qhgp5cpfn2z19zc3gp4wpxr3989kr"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-debug-helper" ,rust-debug-helper-0.3)
+        ("rust-heapless" ,rust-heapless-0.5))
+       #:cargo-development-inputs
+       (("rust-bencher" ,rust-bencher-0.1))))
+    (home-page "https://magiclen.org/crc-any")
+    (synopsis "Compute CRC values")
+    (description "This package provides a crate to compute CRC values by
+providing the length of bits, expression, reflection, an initial value and a
+final xor value.  It has many built-in CRC functions.")
+    (license license:expat)))
+
 (define-public rust-crc32fast-1
   (package
     (name "rust-crc32fast")
@@ -10553,7 +13533,7 @@ to @code{is_x86_feature_detected}.")
 (define-public rust-criterion-0.3
   (package
     (name "rust-criterion")
-    (version "0.3.3")
+    (version "0.3.4")
     (source
      (origin
        (method url-fetch)
@@ -10561,33 +13541,37 @@ to @code{is_x86_feature_detected}.")
        (file-name
         (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32
-         "1n24l95pgjig4nfhgm3vn9gxb49ky5ylr8390scl7wbcxk7agnkh"))))
+        (base32 "08rx789365x6l9kbsg2r9c5yg25rd3pj1giwyhpcqis56pbpwcmb"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
-       (("rust-atty" ,rust-atty-0.2)
+       (("rust-async-std" ,rust-async-std-1)
+        ("rust-atty" ,rust-atty-0.2)
         ("rust-cast" ,rust-cast-0.2)
         ("rust-clap" ,rust-clap-2)
         ("rust-criterion-plot" ,rust-criterion-plot-0.4)
         ("rust-csv" ,rust-csv-1)
-        ("rust-itertools" ,rust-itertools-0.9)
+        ("rust-futures" ,rust-futures-0.3)
+        ("rust-itertools" ,rust-itertools-0.10)
         ("rust-lazy-static" ,rust-lazy-static-1)
         ("rust-num-traits" ,rust-num-traits-0.2)
         ("rust-oorandom" ,rust-oorandom-11.1)
-        ("rust-plotters" ,rust-plotters-0.2)
+        ("rust-plotters" ,rust-plotters-0.3)
         ("rust-rayon" ,rust-rayon-1)
         ("rust-regex" ,rust-regex-1)
         ("rust-serde" ,rust-serde-1)
         ("rust-serde-cbor" ,rust-serde-cbor-0.11)
         ("rust-serde-derive" ,rust-serde-derive-1)
         ("rust-serde-json" ,rust-serde-json-1)
+        ("rust-smol" ,rust-smol-1)
         ("rust-tinytemplate" ,rust-tinytemplate-1)
+        ("rust-tokio" ,rust-tokio-1)
         ("rust-walkdir" ,rust-walkdir-2))
        #:cargo-development-inputs
-       (("rust-approx" ,rust-approx-0.3)
+       (("rust-approx" ,rust-approx-0.4)
+        ("rust-futures" ,rust-futures-0.3)
         ("rust-quickcheck" ,rust-quickcheck-0.9)
-        ("rust-rand" ,rust-rand-0.7)
+        ("rust-rand" ,rust-rand-0.8)
         ("rust-tempfile" ,rust-tempfile-3))))
     (home-page "https://bheisler.github.io/criterion.rs/book/index.html")
     (synopsis "Statistics-driven micro-benchmarking library")
@@ -10709,6 +13693,30 @@ criterion.")
         ("rust-num-complex" ,rust-num-complex-0.2)
         ("rust-rand" ,rust-rand-0.4))))))
 
+(define-public rust-critical-section-0.2
+  (package
+    (name "rust-critical-section")
+    (version "0.2.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "critical-section" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0w1xl04q3qn3c67wnbiz6d5dsaqgdimyyxwpcydsvvgnlsjr3q81"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bare-metal" ,rust-bare-metal-1)
+        ("rust-cfg-if" ,rust-cfg-if-1)
+        ("rust-cortex-m" ,rust-cortex-m-0.7)
+        ("rust-riscv" ,rust-riscv-0.7))))
+    (home-page "https://github.com/embassy-rs/critical-section")
+    (synopsis "Critical section abstraction")
+    (description "This package provides a critical section abstraction.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-crossbeam-0.8
   (package
     (name "rust-crossbeam")
@@ -11173,30 +14181,30 @@ rasterizing glyphs, using native font engines whenever possible.")
         ("rust-servo-fontconfig" ,rust-servo-fontconfig-0.5)
         ("rust-winapi" ,rust-winapi-0.3))))))
 
-(define-public rust-crossterm-0.19
+(define-public rust-crossterm-0.20
   (package
     (name "rust-crossterm")
-    (version "0.19.0")
+    (version "0.20.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "crossterm" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1348lqf8vy3lb2s5icsl3rxs4a4vrpfw5z2j6lplnhnz600w2dkw"))))
+        (base32 "0z8zkk2mfiirbr3slfv564n685yiahr2aj3gdk6k3qymkmmdxsy0"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-bitflags" ,rust-bitflags-1)
-        ("rust-crossterm-winapi" ,rust-crossterm-winapi-0.7)
+        ("rust-crossterm-winapi" ,rust-crossterm-winapi-0.8)
         ("rust-futures-core" ,rust-futures-core-0.3)
-        ("rust-lazy-static" ,rust-lazy-static-1)
         ("rust-libc" ,rust-libc-0.2)
         ("rust-mio" ,rust-mio-0.7)
         ("rust-parking-lot" ,rust-parking-lot-0.11)
         ("rust-serde" ,rust-serde-1)
-        ("rust-signal-hook" ,rust-signal-hook-0.1)
+        ("rust-signal-hook" ,rust-signal-hook-0.3)
+        ("rust-signal-hook-mio" ,rust-signal-hook-mio-0.2)
         ("rust-winapi" ,rust-winapi-0.3))))
     (home-page "https://github.com/crossterm-rs/crossterm")
     (synopsis "Crossplatform terminal library for manipulating terminals")
@@ -11205,6 +14213,32 @@ rasterizing glyphs, using native font engines whenever possible.")
 terminals.")
     (license license:expat)))
 
+(define-public rust-crossterm-0.19
+  (package
+    (inherit rust-crossterm-0.20)
+    (name "rust-crossterm")
+    (version "0.19.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "crossterm" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1348lqf8vy3lb2s5icsl3rxs4a4vrpfw5z2j6lplnhnz600w2dkw"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bitflags" ,rust-bitflags-1)
+        ("rust-crossterm-winapi" ,rust-crossterm-winapi-0.7)
+        ("rust-futures-core" ,rust-futures-core-0.3)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-mio" ,rust-mio-0.7)
+        ("rust-parking-lot" ,rust-parking-lot-0.11)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-signal-hook" ,rust-signal-hook-0.1)
+        ("rust-winapi" ,rust-winapi-0.3))))))
+
 (define-public rust-crossterm-0.18
   (package
     (inherit rust-crossterm-0.19)
@@ -11252,22 +14286,21 @@ terminals.")
         ("rust-serde" ,rust-serde-1)
         ("rust-winapi" ,rust-winapi-0.3))))))
 
-(define-public rust-crossterm-winapi-0.7
+(define-public rust-crossterm-winapi-0.8
   (package
     (name "rust-crossterm-winapi")
-    (version "0.7.0")
+    (version "0.8.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "crossterm_winapi" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1fa047zz228qyqbcjdss64j0n01p4adr29yh9w24lgjdrr59da0d"))))
+        (base32 "01q57jwnlicqxa2igg5nig3916kf5w6sqgbxk40q6hr2frh6cs9s"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
-       #:cargo-inputs
-       (("rust-winapi" ,rust-winapi-0.3))))
+       #:cargo-inputs (("rust-winapi" ,rust-winapi-0.3))))
     (home-page "https://github.com/crossterm-rs/crossterm-winapi")
     (synopsis "Basic simple abstractions around common WinAPI calls")
     (description
@@ -11275,6 +14308,23 @@ terminals.")
 abstractions around common WinAPI calls.")
     (license license:expat)))
 
+(define-public rust-crossterm-winapi-0.7
+  (package
+    (inherit rust-crossterm-winapi-0.8)
+    (name "rust-crossterm-winapi")
+    (version "0.7.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "crossterm_winapi" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1fa047zz228qyqbcjdss64j0n01p4adr29yh9w24lgjdrr59da0d"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-winapi" ,rust-winapi-0.3))))))
+
 (define-public rust-crossterm-winapi-0.6
   (package
     (inherit rust-crossterm-winapi-0.7)
@@ -11377,8 +14427,31 @@ number ``crunching``.")
 common cryptographic algorithms.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-rusticata-macros-4
+  (package
+    (name "rust-rusticata-macros")
+    (version "4.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "rusticata-macros" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "03dmfxhgwzpm1360iwcpcg3y18ddgya0i0hc599am212pdvj7ib5"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-nom" ,rust-nom-7))))
+    (home-page "https://github.com/rusticata/rusticata-macros")
+    (synopsis "Helper macros for Rusticata")
+    (description "Helper macros for Rusticata.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-rusticata-macros-3
   (package
+    (inherit rust-rusticata-macros-4)
     (name "rust-rusticata-macros")
     (version "3.2.0")
     (source
@@ -11390,12 +14463,59 @@ common cryptographic algorithms.")
        (sha256
         (base32
          "1b91k644rqblbam6rfhhmgcxs0zddldi2h0w93aapv1kqq9fbgpv"))))
+    (arguments
+     `(#:cargo-inputs (("rust-nom" ,rust-nom-6))))))
+
+(define-public rust-crypto-bigint-0.2
+  (package
+    (name "rust-crypto-bigint")
+    (version "0.2.11")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "crypto-bigint" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "00qckh65nzb7s7vd60wylw6alxf9g37xh31lirb1qw0l8fxx6fzq"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:cargo-inputs (("rust-nom" ,rust-nom-6))))
-    (home-page "https://github.com/rusticata/rusticata-macros")
-    (synopsis "Helper macros for Rusticata")
-    (description "Helper macros for Rusticata")
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-generic-array" ,rust-generic-array-0.14)
+        ("rust-rand-core" ,rust-rand-core-0.6)
+        ("rust-rlp" ,rust-rlp-0.5)
+        ("rust-subtle" ,rust-subtle-2)
+        ("rust-zeroize" ,rust-zeroize-1))))
+    (home-page "https://github.com/RustCrypto/crypto-bigint")
+    (synopsis "Big integer library designed for use in cryptography")
+    (description
+     "This crate is a pure Rust implementation of a big integer library which
+has been designed from the ground-up for use in cryptographic applications.
+Provides constant-time, no_std-friendly implementations of modern formulas
+using const generics.")
+    (license (list license:asl2.0 license:expat))))
+
+(define-public rust-crypto-common-0.1
+  (package
+    (name "rust-crypto-common")
+    (version "0.1.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "crypto-common" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32 "1l4q4ync13i056vjc775v0za8qh987da7yvrjj25q909cd9nngb8"))))
+    (build-system cargo-build-system)
+    (arguments
+      `(#:skip-build?
+        #t
+        #:cargo-inputs
+        (("rust-generic-array" ,rust-generic-array-0.14)
+         ("rust-rand-core" ,rust-rand-core-0.6))))
+    (home-page "https://github.com/RustCrypto/traits")
+    (synopsis "Common cryptographic traits")
+    (description "Common cryptographic traits")
     (license (list license:expat license:asl2.0))))
 
 (define-public rust-crypto-mac-0.11
@@ -11403,14 +14523,14 @@ common cryptographic algorithms.")
     (name "rust-crypto-mac")
     (version "0.11.0")
     (source
-      (origin
-        (method url-fetch)
-        (uri (crate-uri "crypto-mac" version))
-        (file-name
-         (string-append name "-" version ".tar.gz"))
-        (sha256
-         (base32
-          "0ghh3qmjf7hv580zqdk4yrbg99v57jx773zb7lzi7j4hj24bdyi5"))))
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "crypto-mac" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0ghh3qmjf7hv580zqdk4yrbg99v57jx773zb7lzi7j4hj24bdyi5"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
@@ -11573,7 +14693,7 @@ algorithms.")
         ("rust-openssl" ,rust-openssl-0.10)
         ("rust-winapi" ,rust-winapi-0.3))))
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (home-page "https://github.com/malept/crypto-hash")
     (synopsis "Wrapper for OS-level cryptographic hash functions")
     (description "This package provides a wrapper for OS-level cryptographic
@@ -11802,6 +14922,31 @@ reallocations.")
        #:cargo-development-inputs
        (("rust-regex" ,rust-regex-0.1))))))
 
+(define-public rust-cortex-m-0.7
+  (package
+    (name "rust-cortex-m")
+    (version "0.7.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "cortex-m" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1cw3nyip3s81r6qaa3azrb0654jxw465j5fm126fqja48bpikj9a"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bare-metal" ,rust-bare-metal-0.2)
+        ("rust-bitfield" ,rust-bitfield-0.13)
+        ("rust-embedded-hal" ,rust-embedded-hal-0.2)
+        ("rust-volatile-register" ,rust-volatile-register-0.2))))
+    (home-page "https://github.com/rust-embedded/cortex-m")
+    (synopsis "Low level access to Cortex-M processors")
+    (description "This package provides low level access to Cortex-M
+processors.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-csv-core-0.1
   (package
     (name "rust-csv-core")
@@ -11948,31 +15093,46 @@ use with sct crate.")
      "This package provides an @code{__attribute__((constructor))} for Rust.")
     (license (list license:asl2.0 license:expat))))
 
-(define-public rust-ctr-0.6
+(define-public rust-ctr-0.8
   (package
     (name "rust-ctr")
-    (version "0.6.0")
+    (version "0.8.0")
     (source
-      (origin
-        (method url-fetch)
-        (uri (crate-uri "ctr" version))
-        (file-name
-          (string-append name "-" version ".tar.gz"))
-        (sha256
-          (base32 "0zvyf13675hrlc37myj97k5ng7m1mj3d9p4ic4yvyhvl9zak0jpv"))))
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "ctr" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1sk1aykwhkny92cnvl6s75dx3fyvfzw5xkd6xz3y7w5anhgvk6q4"))))
     (build-system cargo-build-system)
     (arguments
-      `(#:skip-build? #t
-        #:cargo-inputs
-        (("rust-cipher" ,rust-cipher-0.2))))
+     `(#:skip-build? #t
+       #:cargo-inputs (("rust-cipher" ,rust-cipher-0.3))))
     (home-page "https://docs.rs/ctr/")
     (synopsis "CTR block mode of operation")
     (description "This package provides a generic implementations of CTR mode
-for block ciphers.
-
-Mode functionality is accessed using traits from re-exported cipher crate.")
+for block ciphers. Mode functionality is accessed using traits from
+re-exported cipher crate.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-ctr-0.6
+  (package
+    (inherit rust-ctr-0.8)
+    (name "rust-ctr")
+    (version "0.6.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "ctr" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0zvyf13675hrlc37myj97k5ng7m1mj3d9p4ic4yvyhvl9zak0jpv"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs (("rust-cipher" ,rust-cipher-0.2))))))
+
 (define-public rust-ctrlc-3
   (package
     (name "rust-ctrlc")
@@ -12042,12 +15202,9 @@ use with bindgen.")
         ("rust-mio" ,rust-mio-0.6)
         ("rust-mio-extras" ,rust-mio-extras-2))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("curl" ,curl)
-       ("nghttp2" ,nghttp2)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list curl nghttp2 openssl zlib))
     (home-page "https://github.com/alexcrichton/curl-rust")
     (synopsis "Rust bindings to libcurl for making HTTP requests")
     (description
@@ -12085,12 +15242,9 @@ requests")
        #:cargo-development-inputs
        (("rust-cfg-if" ,rust-cfg-if-1))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("curl" ,curl)
-       ("nghttp2" ,nghttp2)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list curl nghttp2 openssl zlib))
     (home-page "https://github.com/alexcrichton/curl-rust")
     (synopsis "Native bindings to the libcurl library")
     (description
@@ -12100,30 +15254,36 @@ requests")
 (define-public rust-curve25519-dalek-3
   (package
     (name "rust-curve25519-dalek")
-    (version "3.0.0")
+    (version "3.2.0")
     (source
-      (origin
-        (method url-fetch)
-        (uri (crate-uri "curve25519-dalek" version))
-        (file-name (string-append name "-" version ".tar.gz"))
-        (sha256
-          (base32 "01xknhlwagv601k6125372vr0lw2j6xjsvnnl74hprp943j2sjf8"))))
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "curve25519-dalek" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0q8v97275cy6v4ly6y2qwv9a8phnpjg9sy8kv7r6mgdjfacxz7qb"))))
     (build-system cargo-build-system)
     (arguments
-      `(#:skip-build? #t
-        #:cargo-inputs
-        (("rust-byteorder" ,rust-byteorder-1)
-         ("rust-digest" ,rust-digest-0.9)
-         ("rust-packed-simd" ,rust-packed-simd-0.3)
-         ("rust-rand-core" ,rust-rand-core-0.5)
-         ("rust-serde" ,rust-serde-1)
-         ("rust-subtle" ,rust-subtle-2)
-         ("rust-zeroize" ,rust-zeroize-1))))
+     `(#:cargo-inputs
+       (("rust-byteorder" ,rust-byteorder-1)
+        ("rust-digest" ,rust-digest-0.9)
+        ("rust-fiat-crypto" ,rust-fiat-crypto-0.1)
+        ("rust-packed-simd-2" ,rust-packed-simd-2-0.3)
+        ("rust-rand-core" ,rust-rand-core-0.5)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-subtle" ,rust-subtle-2)
+        ("rust-zeroize" ,rust-zeroize-1))
+       #:cargo-development-inputs
+       (("rust-bincode" ,rust-bincode-1)
+        ("rust-criterion" ,rust-criterion-0.3)
+        ("rust-hex" ,rust-hex-0.4)
+        ("rust-rand" ,rust-rand-0.7)
+        ("rust-sha2" ,rust-sha2-0.9))))
     (home-page "https://dalek.rs/curve25519-dalek")
     (synopsis "Group operations on ristretto255 and Curve25519")
     (description
-      "This package provides a pure-Rust implementation of group operations on
-ristretto255 and Curve25519")
+     "This package provides a pure-Rust implementation of group operations on
+ristretto255 and Curve25519.")
     (license license:bsd-3)))
 
 (define-public rust-custom-derive-0.1
@@ -12167,7 +15327,6 @@ attributes.")
     (build-system cargo-build-system)
     (arguments
      `(#:tests? #f  ; Cannot compile cxx-test-suite.
-       #:rust ,rust-1.48    ; or newer
        #:cargo-inputs
        (("rust-cc" ,rust-cc-1)
         ("rust-cxxbridge-flags" ,rust-cxxbridge-flags-1)
@@ -12227,8 +15386,7 @@ attributes.")
           "0shmkgv3cnh06ws1p555znj1hh23phynaz73rgnz95gradsdwnwg"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:rust ,rust-1.48    ; or newer
-       #:cargo-inputs
+     `(#:cargo-inputs
        (("rust-cc" ,rust-cc-1)
         ("rust-codespan-reporting" ,rust-codespan-reporting-0.11)
         ("rust-lazy-static" ,rust-lazy-static-1)
@@ -12288,8 +15446,7 @@ crate into a Cargo build.")
           "08v366jxd2vc8jc2cbvrga0866pwfcaq6hl8yylfx0vhs2n53j53"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:rust ,rust-1.48    ; or newer
-       #:cargo-inputs
+     `(#:cargo-inputs
        (("rust-cc" ,rust-cc-1)
         ("rust-codespan-reporting" ,rust-codespan-reporting-0.11)
         ("rust-proc-macro2" ,rust-proc-macro2-1)
@@ -12394,8 +15551,7 @@ crate (implementation detail).")
           "0gkwvihw74dh8p3fz3552wnxanrpwmwfy38ylz2z8knjq0y8y4v3"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:rust ,rust-1.48    ; or newer
-       #:cargo-inputs
+     `(#:cargo-inputs
        (("rust-clang-ast" ,rust-clang-ast-0.1)
         ("rust-flate2" ,rust-flate2-1)
         ("rust-memmap" ,rust-memmap-0.7)
@@ -12692,7 +15848,7 @@ reading attributes into structs when implementing custom derives.")
         ("rust-rayon" ,rust-rayon-1)
         ("rust-serde" ,rust-serde-1))))
     (home-page "https://github.com/xacrimon/dashmap")
-    (synopsis "Blazing fast concurrent HashMap for Rust.")
+    (synopsis "Blazing fast concurrent HashMap for Rust")
     (description "This package implements a blazing fast concurrent HashMap
 for Rust.")
     (license license:expat)))
@@ -12740,7 +15896,7 @@ for Rust.")
       (origin
         (method url-fetch)
         (uri (crate-uri "data-encoding" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "027rcrwdschrkdr2n9d24gnh03vl41qmvhjqn9vn6z1njy2n0flr"))))
@@ -12860,9 +16016,9 @@ sizes.  Big-endian order is used.  WARNING: Block must be aligned!")
        #:cargo-development-inputs
        (("rust-tempfile" ,rust-tempfile-3))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("dbus" ,dbus)))
+     (list dbus))
     (home-page "https://github.com/diwic/dbus-rs")
     (synopsis "Rust bindings to D-Bus")
     (description "This package provides Rust bindings to D-Bus.")
@@ -12905,9 +16061,9 @@ sizes.  Big-endian order is used.  WARNING: Block must be aligned!")
     (arguments
      `(#:cargo-inputs (("rust-dbus" ,rust-dbus-0.9))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("dbus" ,dbus)))
+     (list dbus))
     (home-page "https://github.com/diwic/dbus-rs")
     (synopsis "Framework for writing D-Bus method handlers (legacy)")
     (description
@@ -12942,6 +16098,25 @@ sizes.  Big-endian order is used.  WARNING: Block must be aligned!")
 type.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-debug-helper-0.3
+  (package
+    (name "rust-debug-helper")
+    (version "0.3.12")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "debug-helper" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1a73xl73psmzyihd62jy30g1acfmgjmyi2k8khmh170mrq6x3yvn"))))
+    (build-system cargo-build-system)
+    (home-page "https://magiclen.org/debug-helper")
+    (synopsis "Declarative macros to implement the Debug trait manually")
+    (description "This crate provides declarative macros to help you implement
+the Debug trait manually.")
+    (license license:expat)))
+
 (define-public rust-decimal-2
   (package
     (name "rust-decimal")
@@ -12996,34 +16171,55 @@ type.")
 thread.")
     (license license:mpl2.0)))
 
-(define-public rust-deflate-0.8
+(define-public rust-deflate-0.9
   (package
     (name "rust-deflate")
-    (version "0.8.6")
+    (version "0.9.1")
     (source
       (origin
         (method url-fetch)
         (uri (crate-uri "deflate" version))
-        (file-name
-         (string-append name "-" version ".tar.gz"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
-          "0x6iqlayg129w63999kz97m279m0jj4x4sm6gkqlvmp73y70yxvk"))))
+          "0w0ww0hrq4bjnihxgbnrri4lj5c8yzg31fyzx36fd9pvvw2vz5az"))))
     (build-system cargo-build-system)
     (arguments
      `(#:tests? #f      ; not all test files included
        #:cargo-inputs
        (("rust-adler32" ,rust-adler32-1)
-        ("rust-byteorder" ,rust-byteorder-1)
         ("rust-gzip-header" ,rust-gzip-header-0.3))
        #:cargo-development-inputs
        (("rust-miniz-oxide" ,rust-miniz-oxide-0.3))))
     (home-page "https://github.com/image-rs/deflate-rs")
     (synopsis "DEFLATE, zlib and gzip encoder written in rust")
-    (description
-     "This package provides a DEFLATE, zlib and gzip encoder written in rust.")
+    (description "This package provides a DEFLATE, zlib and gzip encoder
+written in rust.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-deflate-0.8
+  (package
+    (inherit rust-deflate-0.9)
+    (name "rust-deflate")
+    (version "0.8.6")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "deflate" version))
+        (file-name
+         (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "0x6iqlayg129w63999kz97m279m0jj4x4sm6gkqlvmp73y70yxvk"))))
+    (arguments
+     `(#:tests? #f      ; not all test files included
+       #:cargo-inputs
+         (("rust-adler32" ,rust-adler32-1)
+          ("rust-byteorder" ,rust-byteorder-1)
+          ("rust-gzip-header" ,rust-gzip-header-0.3))
+       #:cargo-development-inputs
+         (("rust-miniz-oxide" ,rust-miniz-oxide-0.3))))))
+
 (define-public rust-deflate-0.7
   (package
     (inherit rust-deflate-0.8)
@@ -13053,7 +16249,7 @@ thread.")
       (origin
         (method url-fetch)
         (uri (crate-uri "defmac" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "14cqfvc0f1pkd6gdhjxa2wv3iibqprc0n203ims8lvg96752ynfm"))))
@@ -13073,11 +16269,79 @@ thread.")
       (origin
         (method url-fetch)
         (uri (crate-uri "defmac" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "17giv0n0n1r64z0dahfvkjy3ys517jxyhs8sd9lmgvcljpjyryxa"))))))
 
+(define-public rust-defmt-0.3
+  (package
+    (name "rust-defmt")
+    (version "0.3.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "defmt" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "181l5wv6sihrjwjvk97wznmg2iaz3w1ljsx2dfzjssmhsbs5vyv2"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bitflags" ,rust-bitflags-1)
+        ("rust-defmt-macros" ,rust-defmt-macros-0.3))))
+    (home-page "https://knurling.ferrous-systems.com/")
+    (synopsis "Logging framework for resource-constrained devices")
+    (description
+     "This package provides an efficient logging framework that targets
+resource-constrained devices, like micro-controllers.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-defmt-macros-0.3
+  (package
+    (name "rust-defmt-macros")
+    (version "0.3.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "defmt-macros" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0rx25gp12c6j3krwjjsknigd803ycz1rpxh5jhr6ny51cfvrd0q9"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-defmt-parser" ,rust-defmt-parser-0.3)
+        ("rust-proc-macro-error" ,rust-proc-macro-error-1)
+        ("rust-proc-macro2" ,rust-proc-macro2-1)
+        ("rust-quote" ,rust-quote-1)
+        ("rust-syn" ,rust-syn-1))))
+    (home-page "https://github.com/knurling-rs/defmt")
+    (synopsis "Macros for rust-defmt")
+    (description "This package provides macros for rust-defmt crate")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-defmt-parser-0.3
+  (package
+    (name "rust-defmt-parser")
+    (version "0.3.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "defmt-parser" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1is90zrcifdky4rpra450779c3jf3bc2xwcqbj9fy6m5w48f074d"))))
+    (build-system cargo-build-system)
+    (arguments `(#:skip-build? #t))
+    (home-page "https://github.com/knurling-rs/defmt")
+    (synopsis "Parsing library for defmt format strings")
+    (description "This package is a parsing library for defmt format
+strings.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-delta-e-0.2
   (package
     (name "rust-delta-e")
@@ -13148,6 +16412,122 @@ algorithm which serves to quantify the difference between two colors.")
     (description "Demo of proc-macro-hack.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-der-0.4
+  (package
+    (name "rust-der")
+    (version "0.4.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "der" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1x4k0jln8va1657cghl40l6p7hyvr1ixz71v9cd6imwmgp51rdvr"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build?
+       #t                               ; FIXME
+       #:cargo-inputs
+       (("rust-const-oid" ,rust-const-oid-0.6)
+        ("rust-crypto-bigint" ,rust-crypto-bigint-0.2)
+        ("rust-der-derive" ,rust-der-derive-0.4))))
+    (home-page "https://github.com/RustCrypto/formats/tree/master/der")
+    (synopsis
+     "Implementation of the Distinguished Encoding Rules (DER)")
+    (description
+     "This package provides a pure Rust embedded-friendly implementation of
+the Distinguished Encoding Rules (DER) for Abstract Syntax Notation One
+(ASN.1) as described in ITU X.690 with full support for heapless no_std
+targets")
+    (license (list license:asl2.0 license:expat))))
+
+(define-public rust-der-derive-0.4
+  (package
+    (name "rust-der-derive")
+    (version "0.4.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "der_derive" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32 "0snv85yfy9iln05qsgbhwr1159gd0jfrgzj5dkrnricdc0y3pvca"))))
+    (build-system cargo-build-system)
+    (arguments
+      `(#:skip-build?
+        #t                              ; FIXME
+        #:cargo-inputs
+        (("rust-proc-macro2" ,rust-proc-macro2-1)
+         ("rust-quote" ,rust-quote-1)
+         ("rust-syn" ,rust-syn-1)
+         ("rust-synstructure" ,rust-synstructure-0.12))))
+    (home-page "https://github.com/RustCrypto/formats/tree/master/der/derive")
+    (synopsis
+      "Custom derive support for the `der` crate's `Choice` and `Sequence` traits")
+    (description
+      "This package provides a custom derive support for the `der` crate's
+`Choice` and `Sequence` traits.")
+    (license (list license:asl2.0 license:expat))))
+
+(define-public rust-der-oid-macro-0.5
+  (package
+    (name "rust-der-oid-macro")
+    (version "0.5.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "der-oid-macro" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0dply8g2p72hfhyymkrkr7fjqy844drj19xbrfkqrp55nq4z4fn7"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-num-bigint" ,rust-num-bigint-0.4)
+        ("rust-num-traits" ,rust-num-traits-0.2)
+        ("rust-syn" ,rust-syn-1))))
+    (home-page "https://github.com/rusticata/der-parser")
+    (synopsis "Macro to encode DER oids at compile time")
+    (description
+     "This crate provides a macro to encode DER oids at compile time.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-der-parser-6
+  (package
+    (name "rust-der-parser")
+    (version "6.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "der-parser" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0gn465dncghmj52k8dlkl71wkmlz5zc6jfjgj9ra2knf22ryy1wq"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bitvec" ,rust-bitvec-0.22)
+        ("rust-cookie-factory" ,rust-cookie-factory-0.3)
+        ("rust-der-oid-macro" ,rust-der-oid-macro-0.5)
+        ("rust-nom" ,rust-nom-7)
+        ("rust-num-bigint" ,rust-num-bigint-0.4)
+        ("rust-num-traits" ,rust-num-traits-0.2)
+        ("rust-rusticata-macros" ,rust-rusticata-macros-4))
+       #:cargo-development-inputs
+       (("rust-hex-literal" ,rust-hex-literal-0.3)
+        ("rust-pretty-assertions" ,rust-pretty-assertions-0.7)
+        ("rust-test-case" ,rust-test-case-1))))
+    (home-page "https://github.com/rusticata/der-parser")
+    (synopsis "BER/DER parser written in pure Rust")
+    (description "This crate provides a parser for Basic Encoding Rules (BER
+[X.690]) and Distinguished Encoding Rules(DER [X.690]), implemented with the
+@code{nom} parser combinator framework.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-derivative-2
   (package
     (name "rust-derivative")
@@ -13261,6 +16641,31 @@ for arbitrary structs.")
         #:cargo-development-inputs
         (("rust-pretty-assertions" ,rust-pretty-assertions-0.6))))))
 
+(define-public rust-derive-builder-0.7
+  (package
+    (inherit rust-derive-builder-0.9)
+    (name "rust-derive-builder")
+    (version "0.7.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "derive_builder" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32 "1m34zpj6fw764g7s368r2wgazp154m24d4rshbgn18fdlfk3zi9s"))))
+    (arguments
+      `(#:skip-build? #t
+        #:cargo-inputs
+        (("rust-compiletest-rs" ,rust-compiletest-rs-0.3)
+         ("rust-darling" ,rust-darling-0.9)
+         ("rust-derive-builder-core" ,rust-derive-builder-core-0.5)
+         ("rust-env-logger" ,rust-env-logger-0.5)
+         ("rust-log" ,rust-log-0.4)
+         ("rust-proc-macro2" ,rust-proc-macro2-0.4)
+         ("rust-quote" ,rust-quote-0.6)
+         ("rust-skeptic" ,rust-skeptic-0.13)
+         ("rust-syn" ,rust-syn-0.15))))))
+
 (define-public rust-derive-builder-0.5
   (package
     (inherit rust-derive-builder-0.9)
@@ -13337,6 +16742,27 @@ for arbitrary structs.")
        #:cargo-development-inputs
        (("rust-pretty-assertions" ,rust-pretty-assertions-0.6))))))
 
+(define-public rust-derive-builder-core-0.5
+  (package
+    (inherit rust-derive-builder-core-0.9)
+    (name "rust-derive-builder-core")
+    (version "0.5.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "derive_builder_core" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32 "0drbjk6n8ywls8cmhp4r8xkyjsja0wk3854cn5mj8g1km4ys5202"))))
+    (arguments
+      `(#:skip-build? #t
+        #:cargo-inputs
+        (("rust-darling" ,rust-darling-0.9)
+         ("rust-log" ,rust-log-0.4)
+         ("rust-proc-macro2" ,rust-proc-macro2-0.4)
+         ("rust-quote" ,rust-quote-0.6)
+         ("rust-syn" ,rust-syn-0.15))))))
+
 (define-public rust-derive-builder-core-0.2
   (package
     (inherit rust-derive-builder-core-0.9)
@@ -13434,7 +16860,7 @@ methods for @samp{enum Pet @{ Dog, Cat @}}.")
 (define-public rust-derive-more-0.99
   (package
     (name "rust-derive-more")
-    (version "0.99.11")
+    (version "0.99.17")
     (source
      (origin
        (method url-fetch)
@@ -13443,17 +16869,17 @@ methods for @samp{enum Pet @{ Dog, Cat @}}.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "131xrz5nmnh8zq3vcvv0wfpcaflypbxp3fin984fsqddc5hhxjs1"))))
+         "0883jr0gdf9mi8rn7qbz1p0z7hqzfd275pil2gwm66bw1b9i1f2g"))))
     (build-system cargo-build-system)
     (arguments
      `(#:tests? #f  ; Some test files missing.
        #:cargo-inputs
-       (("rust-proc-macro2" ,rust-proc-macro2-1)
+       (("rust-convert-case" ,rust-convert-case-0.4)
+        ("rust-peg" ,rust-peg-0.5)
+        ("rust-proc-macro2" ,rust-proc-macro2-1)
         ("rust-quote" ,rust-quote-1)
-        ("rust-syn" ,rust-syn-1))
-       #:cargo-development-inputs
-       (("rust-peg" ,rust-peg-0.5)
-        ("rust-rustc-version" ,rust-rustc-version-0.2))))
+        ("rust-rustc-version" ,rust-rustc-version-0.4)
+        ("rust-syn" ,rust-syn-1))))
     (home-page "https://github.com/JelteF/derive_more")
     (synopsis "Adds derive macros for more traits")
     (description
@@ -13469,6 +16895,46 @@ boilerplate code.  It does this by allowing you to derive lots of commonly used
 traits for both structs and enums.")
     (license license:expat)))
 
+(define-public rust-derive-more-0.15
+  (package
+    (inherit rust-derive-more-0.99)
+    (name "rust-derive-more")
+    (version "0.15.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "derive-more" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1zks5bn7hmqfz927spmridk9bvy7ly4f38vls331x4hc4hq1653s"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-proc-macro2" ,rust-proc-macro2-0.4)
+        ("rust-quote" ,rust-quote-0.6)
+        ("rust-regex" ,rust-regex-1)
+        ("rust-rustc-version" ,rust-rustc-version-0.2)
+        ("rust-syn" ,rust-syn-0.15))))))
+
+(define-public rust-derive-more-0.14
+  (package
+    (inherit rust-derive-more-0.99)
+    (name "rust-derive-more-1")
+    (version "0.14.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "derive-more" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0fgq5ziyg0gwr5j7pghfrxgzqzmmadknivpigrsniliy0334m53d"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-proc-macro2" ,rust-proc-macro2-0.4)
+        ("rust-quote" ,rust-quote-0.6)
+        ("rust-rustc-version" ,rust-rustc-version-0.2)
+        ("rust-syn" ,rust-syn-0.15))))))
+
 (define-public rust-derive-new-0.5
   (package
     (name "rust-derive-new")
@@ -13492,6 +16958,54 @@ traits for both structs and enums.")
 structs and enums.")
   (license license:expat)))
 
+(define-public rust-des-0.7
+  (package
+    (name "rust-des")
+    (version "0.7.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "des" version))
+        (file-name
+         (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "0pbsfkkwfqnd4nsv3ik4z09h248f57y7bj2j1l134i2mzd4xshdc"))))
+    (build-system cargo-build-system)
+    (arguments
+      `(#:skip-build?
+        #t
+        #:cargo-inputs
+        (("rust-byteorder" ,rust-byteorder-1)
+         ("rust-cipher" ,rust-cipher-0.3)
+         ("rust-opaque-debug" ,rust-opaque-debug-0.3))))
+    (home-page "https://github.com/RustCrypto/block-ciphers")
+    (synopsis "DES and Triple DES block ciphers implementation")
+    (description "This package provides DES and Triple DES (3DES, TDES) block
+ciphers implementations.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-des-0.6
+  (package
+    (inherit rust-des-0.7)
+    (name "rust-des")
+    (version "0.6.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "des" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1bigk1x1kxvnfjn1alr8cc383z1flmj8q7g2pjl2zal8i1s7qkmj"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-byteorder" ,rust-byteorder-1)
+        ("rust-cipher" ,rust-cipher-0.2)
+        ("rust-opaque-debug" ,rust-opaque-debug-0.3))
+       #:cargo-development-inputs
+       (("rust-cipher" ,rust-cipher-0.2))))))
+
 (define-public rust-deunicode-0.4
   (package
     (name "rust-deunicode")
@@ -13607,7 +17121,7 @@ procedural macros.")
         ("rust-num-traits" ,rust-num-traits-0.2)
         ("rust-time" ,rust-time-0.2))))
     (home-page "https://github.com/krolaw/dhcp4r")
-    (synopsis "IPv4 DHCP library with working server example.")
+    (synopsis "IPv4 DHCP library with working server example")
     (description
      "This package provides a library for IPv4 DHCP including a working server
 example.")
@@ -13675,7 +17189,7 @@ example.")
          "0hpmwrc0zx3zvpgwp9zrm6wj8d8i8q8990grlrnfzlivbi6zqyq4"))))
     (build-system cargo-build-system)
     (native-inputs
-     `(("sqlite" ,sqlite)))
+     (list sqlite))
     (arguments
      `(#:cargo-inputs
        (("rust-bigdecimal" ,rust-bigdecimal-0.1)
@@ -13743,6 +17257,35 @@ Builder for PostgreSQL, SQLite, and MySQL.")
 Diesel.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-diesel-migrations-1
+  (package
+    (name "rust-diesel-migrations")
+    (version "1.4.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "diesel_migrations" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0k4g03ciqwya2xc1xvy5s9cs6q55k45wxa1gszswfg9m2f2dwg5z"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:tests? #f ;doctest_setup.rs: No such file or directory
+       #:cargo-inputs
+       (("rust-migrations-internals"
+         ,rust-migrations-internals-1)
+        ("rust-migrations-macros"
+         ,rust-migrations-macros-1))
+       #:cargo-development-inputs
+       (("rust-cfg-if" ,rust-cfg-if-0.1)
+        ("rust-diesel" ,rust-diesel-1)
+        ("rust-dotenv" ,rust-dotenv-0.10))))
+    (home-page "https://diesel.rs")
+    (synopsis "Migration management for diesel")
+    (description "This package provides migration management for Diesel.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-diff-0.1
   (package
     (name "rust-diff")
@@ -13834,6 +17377,23 @@ Diesel.")
      "This crate provides all necessary tools for comparing word sequences.")
     (license license:expat)))
 
+(define-public rust-diffr-lib-0.1
+  (package
+    (name "rust-diffr-lib")
+    (version "0.1.3")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "diffr-lib" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32 "0id3hpblvvcw4ydcd1cc7wgcwqjbh3grlihrmd8zp7k0d2h47i3g"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/mookid/diffr")
+    (synopsis "Implementation of Myers diff algorithm")
+    (description "An implementation of Myers diff algorithm.")
+    (license license:expat)))
+
 (define-public rust-diffs-0.3
   (package
     (name "rust-diffs")
@@ -13856,30 +17416,105 @@ common subsequence.  The diff algorithms include Myer's diff and Patience
 diff.")
     (license (list license:asl2.0 license:expat))))
 
-(define-public rust-digest-0.9
+(define-public rust-diffus-0.10
   (package
-    (name "rust-digest")
-    (version "0.9.0")
+    (name "rust-diffus")
+    (version "0.10.0")
     (source
-      (origin
-        (method url-fetch)
-        (uri (crate-uri "digest" version))
-        (file-name
-         (string-append name "-" version ".tar.gz"))
-        (sha256
-         (base32
-          "0rmhvk33rgvd6ll71z8sng91a52rw14p0drjn1da0mqa138n1pfk"))))
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "diffus" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0lsn5h1mfa8x7bfg9yqgr52p7drigpwgm5q8qh4r07dmfd5g43rw"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
-       (("rust-blobby" ,rust-blobby-0.1)
-        ("rust-generic-array" ,rust-generic-array-0.14))))
+       (("rust-diffus-derive" ,rust-diffus-derive-0.10)
+        ("rust-indexmap" ,rust-indexmap-1)
+        ("rust-itertools" ,rust-itertools-0.10)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-snake-case" ,rust-snake-case-0.3)
+        ("rust-uuid" ,rust-uuid-0.8))))
+    (home-page "https://github.com/distil/diffus")
+    (synopsis "Diff two instances of any data structure")
+    (description "This package finds the difference between two instances of
+any data structure.  It supports: collections, Strings, Maps etc.  Uses LC
+where applicable.  Also supports derive via `diffus-derive`.")
+    (license license:asl2.0)))
+
+(define-public rust-diffus-derive-0.10
+  (package
+    (name "rust-diffus-derive")
+    (version "0.10.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "diffus-derive" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1a7sgbzhqa7gk3xhvkci91myc86gkwxs04vfxbl8f64y7l1jsfmr"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-proc-macro2" ,rust-proc-macro2-1)
+        ("rust-quote" ,rust-quote-1)
+        ("rust-syn" ,rust-syn-1))))
+    (home-page "https://github.com/distil/diffus")
+    (synopsis "Diff two instances of any data structure")
+    (description "This package finds the difference between two instances of
+any data structure.  Supports derive on structs and enums.")
+    (license license:asl2.0)))
+
+(define-public rust-digest-0.10
+  (package
+    (name "rust-digest")
+    (version "0.10.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "digest" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "16wpqnwlzx0lbnwccwikns7dq8fblcc6kma2l7xz8anlh5hdd5xn"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-blobby" ,rust-blobby-0.3)
+        ("rust-block-buffer" ,rust-block-buffer-0.10)
+        ("rust-crypto-common" ,rust-crypto-common-0.1)
+        ("rust-generic-array" ,rust-generic-array-0.14)
+        ("rust-subtle" ,rust-subtle-2))))
     (home-page "https://github.com/RustCrypto/traits")
     (synopsis "Traits for cryptographic hash functions")
     (description
      "Traits for cryptographic hash functions.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-digest-0.9
+  (package
+    (inherit rust-digest-0.10)
+    (name "rust-digest")
+    (version "0.9.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "digest" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0rmhvk33rgvd6ll71z8sng91a52rw14p0drjn1da0mqa138n1pfk"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-blobby" ,rust-blobby-0.1)
+        ("rust-generic-array" ,rust-generic-array-0.14))))))
+
 (define-public rust-digest-0.8
   (package
     (inherit rust-digest-0.9)
@@ -13939,25 +17574,22 @@ diff.")
 functions.")
     (license (list license:expat license:asl2.0))))
 
-(define-public rust-directories-3
+(define-public rust-directories-4
   (package
     (name "rust-directories")
-    (version "3.0.1")
+    (version "4.0.1")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "directories" version))
-       (file-name
-        (string-append name "-" version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32
-         "03ysv4m6mhsc3w1xnvncd5sxf7v2dz917awq6ksx0n0bsqwxdzpq"))))
+        (base32 "045jbj5y2f1fmjs9rfcw95y0vjydb2rqqhz1sdnqhdmxv96ms77m"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:cargo-inputs
-       (("rust-dirs-sys" ,rust-dirs-sys-0.3))
-       #:cargo-development-inputs
-       (("rust-bencher" ,rust-bencher-0.1))))
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-dirs-sys" ,rust-dirs-sys-0.3))))
     (home-page "https://github.com/dirs-dev/directories-rs")
     (synopsis "Library for standard locations of data directories")
     (description
@@ -13969,6 +17601,25 @@ on Linux, the Known Folder API on Windows, and the Standard
 Directory guidelines on macOS.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-directories-3
+  (package
+    (inherit rust-directories-4)
+    (name "rust-directories")
+    (version "3.0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "directories" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "03ysv4m6mhsc3w1xnvncd5sxf7v2dz917awq6ksx0n0bsqwxdzpq"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-dirs-sys" ,rust-dirs-sys-0.3))
+       #:cargo-development-inputs
+       (("rust-bencher" ,rust-bencher-0.1))))))
+
 (define-public rust-directories-2
   (package
     (inherit rust-directories-3)
@@ -14072,8 +17723,7 @@ standard locations of directories for config, cache and other data.")
        (("rust-cfg-if" ,rust-cfg-if-0.1)
         ("rust-dirs-sys" ,rust-dirs-sys-0.3))))
     (inputs
-     `(("rust-cfg-if" ,rust-cfg-if-0.1)
-       ("rust-dirs-sys" ,rust-dirs-sys-0.3)))))
+     (list rust-cfg-if-0.1 rust-dirs-sys-0.3))))
 
 (define-public rust-dirs-1
   (package
@@ -14084,7 +17734,7 @@ standard locations of directories for config, cache and other data.")
       (origin
         (method url-fetch)
         (uri (crate-uri "dirs" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "009rrhzj9pxyncmm2vhlj70npg0cgggv2hjbbkiwdl9vccq8kmrz"))))
@@ -14145,7 +17795,7 @@ other data.")
 (define-public rust-dirs-sys-0.3
   (package
     (name "rust-dirs-sys")
-    (version "0.3.5")
+    (version "0.3.6")
     (source
      (origin
        (method url-fetch)
@@ -14153,20 +17803,16 @@ other data.")
        (file-name
         (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32
-         "0ym5843xack45b1yjahrh3q2f72shnwf1dd2jncf9qsxf3sxg4wf"))))
+        (base32 "102pbpcrfhvhfyfnyvmvvwpl6mfvynh170f6ima6fyinxls6bn03"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
-       (("rust-cfg-if" ,rust-cfg-if-0.1)
-        ("rust-libc" ,rust-libc-0.2)
-        ("rust-redox-users" ,rust-redox-users-0.3)
+       (("rust-libc" ,rust-libc-0.2)
+        ("rust-redox-users" ,rust-redox-users-0.4)
         ("rust-winapi" ,rust-winapi-0.3))))
     (inputs
-     `(("rust-cfg-if" ,rust-cfg-if-0.1)
-       ("rust-libc" ,rust-libc-0.2)
-       ("rust-redox-users" ,rust-redox-users-0.3)
-       ("rust-winapi" ,rust-winapi-0.3)))
+     (list rust-cfg-if-0.1 rust-libc-0.2 rust-redox-users-0.3
+           rust-winapi-0.3))
     (home-page "https://github.com/soc/dirs-sys-rs")
     (synopsis
      "System-level helper functions for the dirs and directories crates")
@@ -14204,7 +17850,7 @@ and @code{directories} crates.")
       (origin
         (method url-fetch)
         (uri (crate-uri "discard" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1h67ni5bxvg95s91wgicily4ix7lcw7cq0a5gy9njrybaibhyb91"))))
@@ -14291,7 +17937,7 @@ Google's diff-match-patch.")
      `(#:cargo-inputs
        (("rust-libloading" ,rust-libloading-0.6))))
     (inputs
-     `(("rust-libloading" ,rust-libloading-0.6)))
+     (list rust-libloading-0.6))
     (home-page "https://github.com/vberger/dlib")
     (synopsis "Helper macros for manually loading optional system libraries")
     (description
@@ -14357,7 +18003,7 @@ not support network, only raw protocol parser.")
       (origin
         (method url-fetch)
         (uri (crate-uri "doc-comment" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "15rsqxgarfpb1yim9sbp9yfgj7p2dq6v51c6bq1a62paii9ylgcj"))))
@@ -14590,6 +18236,28 @@ for graphs.")
 Rust.")
     (license license:expat)))
 
+(define-public rust-dotenv-0.13
+  (package
+    (inherit rust-dotenv-0.15)
+    (name "rust-dotenv")
+    (version "0.13.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "dotenv" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32 "11jdifvvwbn60gf5iq2awyq9fik1d9xk7rhch332nwwnkhks3l60"))))
+    (arguments
+      `(#:skip-build? #t
+        #:cargo-inputs
+        (("rust-clap" ,rust-clap-2)
+         ("rust-failure" ,rust-failure-0.1)
+         ("rust-lazy-static" ,rust-lazy-static-1)
+         ("rust-regex" ,rust-regex-1))
+        #:cargo-development-inputs
+        (("rust-tempdir" ,rust-tempdir-0.3))))))
+
 (define-public rust-dotenv-0.10
   (package
     (inherit rust-dotenv-0.15)
@@ -14664,7 +18332,7 @@ Rust.")
       (origin
         (method url-fetch)
         (uri (crate-uri "dtoa" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0phbm7i0dpn44gzi07683zxaicjap5064w62pidci4fhhciv8mza"))))
@@ -14686,7 +18354,7 @@ floating-point primitives to an @code{io::Write}.")
       (origin
         (method url-fetch)
         (uri (crate-uri "dtoa" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0g96cap6si1g6wi62hsdk2fnj3sf5vd4i97zj6163j8hhnsl3n0d"))))))
@@ -14746,7 +18414,7 @@ Rust.")
 (define-public rust-duct-0.13
   (package
     (name "rust-duct")
-    (version "0.13.0")
+    (version "0.13.5")
     (source
      (origin
        (method url-fetch)
@@ -14755,14 +18423,14 @@ Rust.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1ir3884i1yznkfdccqqbcb9v5sdpcgxlv41hgzncrqaljv18r0wj"))))
+         "13bxiy0y1dck3xz28rqw5ylf2ykv6mk8ww6g8408x26hksjs1ihg"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-libc" ,rust-libc-0.2)
         ("rust-once-cell" ,rust-once-cell-1)
-        ("rust-os-pipe" ,rust-os-pipe-0.8)
+        ("rust-os-pipe" ,rust-os-pipe-0.9)
         ("rust-shared-child" ,rust-shared-child-0.3))
        #:cargo-development-inputs
        (("rust-tempdir" ,rust-tempdir-0.3))))
@@ -14774,6 +18442,30 @@ Rust.")
      "A library for running child processes.")
     (license license:expat)))
 
+(define-public rust-duct-0.8
+  (package
+    (inherit rust-duct-0.13)
+    (name "rust-duct")
+    (version "0.8.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "duct" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0p06yslfi1wa68c2x068wmi9pr2mzmm64d6qwq8zba58w1gs2np4"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-error-chain" ,rust-error-chain-0.8)
+        ("rust-lazycell" ,rust-lazycell-0.5)
+        ("rust-os-pipe" ,rust-os-pipe-0.5)
+        ("rust-shared-child" ,rust-shared-child-0.2))
+       #:cargo-development-inputs
+       (("rust-tempdir" ,rust-tempdir-0.3))))))
+
 (define-public rust-dunce-1
   (package
     (name "rust-dunce")
@@ -14867,6 +18559,27 @@ programs.")
         ;("rust-wio" ,rust-wio-0.2)
         ("rust-winapi" ,rust-winapi-0.3))))))
 
+(define-public rust-easy-cast-0.4
+  (package
+    (name "rust-easy-cast")
+    (version "0.4.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "easy-cast" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "13ilmaplp2s4vw1vjh4pwbzk7jdxrn0kpf0rk5sli0s1ikp05lab"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs (("rust-libm" ,rust-libm-0.2))))
+    (home-page "https://github.com/kas-gui/easy-cast")
+    (synopsis "Type conversions which are expected to succeed")
+    (description "This library is written to make numeric type conversions
+easy.")
+    (license license:asl2.0)))
+
 (define-public rust-easy-parallel-3
   (package
     (name "rust-easy-parallel")
@@ -14941,6 +18654,39 @@ block cipher.  It uses counter mode (CTR) for encryption and CBC mode for
 generating a OMAC/CMAC/CBCMAC (all names for the same thing).")
     (license (list license:asl2.0 license:expat))))  ; at your choice
 
+(define-public rust-ecies-ed25519-0.5
+  (package
+    (name "rust-ecies-ed25519")
+    (version "0.5.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "ecies-ed25519" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1nrmam79mn2y6b235rpq6lhlsfl63275j2yxps86424gh99j720a"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-aes-gcm" ,rust-aes-gcm-0.8)
+        ("rust-curve25519-dalek" ,rust-curve25519-dalek-3)
+        ("rust-digest" ,rust-digest-0.9)
+        ("rust-hex" ,rust-hex-0.4)
+        ("rust-hkdf" ,rust-hkdf-0.10)
+        ("rust-rand" ,rust-rand-0.7)
+        ("rust-ring" ,rust-ring-0.16)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-sha2" ,rust-sha2-0.9)
+        ("rust-thiserror" ,rust-thiserror-1)
+        ("rust-zeroize" ,rust-zeroize-1))))
+    (home-page "https://github.com/phayes/ecies-ed25519")
+    (synopsis
+     "Integrated encryption scheme on Twisted Edwards Curve25519")
+    (description
+     "ECIES on Twisted Edwards Curve25519 using AES-GCM and HKDF-SHA256.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-ed25519-1
   (package
     (name "rust-ed25519")
@@ -15026,6 +18772,24 @@ signing, and verification in pure Rust.")
      "Levenshtein edit distance between strings, a measure for similarity.")
     (license license:asl2.0)))
 
+(define-public rust-ego-tree-0.6
+  (package
+    (name "rust-ego-tree")
+    (version "0.6.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "ego-tree" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "149mkc6j7bx653s39rpnsnpl5dvd1rj18czcil57w54k868a8s1s"))))
+    (build-system cargo-build-system)
+    (arguments `(#:skip-build? #t))
+    (home-page "https://github.com/programble/ego-tree")
+    (synopsis "Vec-backed ID-tree")
+    (description "Ego Tree provides a vec-backed ID-tree.")
+    (license license:isc)))
+
 (define-public rust-either-1
   (package
     (name "rust-either")
@@ -15096,7 +18860,7 @@ signing, and verification in pure Rust.")
         ("rust-failure-derive" ,rust-failure-derive-0.1)
         ("rust-lazy-static" ,rust-lazy-static-1))))
     (inputs
-     `(("clang" ,clang)))
+     (list clang))
     (home-page "https://github.com/ubolonton/emacs-module-rs")
     (synopsis "Library for creating Emacs's dynamic modules")
     (description
@@ -15146,7 +18910,7 @@ Emacs' support for dynamic modules.")
      `(#:cargo-inputs
        (("rust-bindgen" ,rust-bindgen-0.48))))
     (inputs
-     `(("clang" ,clang)))
+     (list clang))
     (home-page "https://github.com/ubolonton/emacs-module-rs")
     (synopsis "Raw FFI for emacs-module")
     (description "This module provides a high-level binding to emacs-module:
@@ -15234,6 +18998,29 @@ and authentication, easy email builders, and async support.")
 inclusion of Windows resources in the most resilient fashion imaginable.")
     (license license:expat)))
 
+(define-public rust-embedded-hal-0.2
+  (package
+    (name "rust-embedded-hal")
+    (version "0.2.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "embedded-hal" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1faa71mvs9zklyiiy9l5br9f2bwmxwak0br7jb49cr8mzxignv73"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-nb" ,rust-nb-0.1)
+        ("rust-void" ,rust-void-1))))
+    (home-page "https://github.com/rust-embedded/embedded-hal")
+    (synopsis "Hardware Abstraction Layer (HAL) for embedded systems")
+    (description "This package provides a Hardware Abstraction Layer (HAL) for
+embedded systems.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-ena-0.14
   (package
     (name "rust-ena")
@@ -15553,6 +19340,25 @@ Standard.")
 order.")
     (license license:expat)))
 
+(define-public rust-entities-1
+  (package
+    (name "rust-entities")
+    (version "1.0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "entities" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1jnpr0zvj97wm9pnh7fnl74rzaar39hhg65p03cm08bqqgj0lcmm"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/p-jackson/entities")
+    (synopsis "Raw data needed to convert to and from HTML entities")
+    (description "This package provides the raw data needed to convert to and
+from HTML entities.")
+    (license license:expat)))
+
 (define-public rust-enum-as-inner-0.3
   (package
     (name "rust-enum-as-inner")
@@ -15598,6 +19404,58 @@ accessor functions on enums.")
         ("rust-quote" ,rust-quote-0.6)
         ("rust-syn" ,rust-syn-0.15))))))
 
+(define-public rust-enum-map-derive-0.4
+  (package
+    (name "rust-enum-map-derive")
+    (version "0.4.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "enum-map-derive" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0mg43p1x90cz604zddk9qzss077v2id04qmmbpa1i7jc637m1i75"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-proc-macro2" ,rust-proc-macro2-1)
+        ("rust-quote" ,rust-quote-1)
+        ("rust-syn" ,rust-syn-1))))
+    (home-page "https://gitlab.com/KonradBorowski/enum-map")
+    (synopsis "Macros 1.1 implementation of #[derive(Enum)]")
+    (description "This package provides a macros 1.1 implementation of
+@code{#[derive(Enum)]}.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-enum-map-0.6
+  (package
+    (name "rust-enum-map")
+    (version "0.6.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "enum-map" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0m8qg32fnjdf6z64j4wmyp935p5838wd31gibkiqpbpl76c9k1s1"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-array-macro" ,rust-array-macro-1)
+        ("rust-enum-map-derive" ,rust-enum-map-derive-0.4)
+        ("rust-serde" ,rust-serde-1))
+       #:cargo-development-inputs
+       (("rust-bincode" ,rust-bincode-1)
+        ("rust-serde-json" ,rust-serde-json-1)
+        ("rust-serde-test" ,rust-serde-test-1))))
+    (home-page "https://gitlab.com/KonradBorowski/enum-map")
+    (synopsis "Map with C-like enum keys represented internally as an array")
+    (description
+     "This package provides a map with C-like enum keys represented internally
+as an array.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-enum-primitive-0.1
   (package
     (name "rust-enum-primitive")
@@ -15715,20 +19573,21 @@ convert enum to u8 slice ref.")
     (description "Enumflags2 implements the classic bitflags datastructure.")
     (license (list license:expat license:asl2.0))))
 
-(define-public rust-env-logger-0.8
+(define-public rust-env-logger-0.9
   (package
     (name "rust-env-logger")
-    (version "0.8.3")
+    (version "0.9.0")
     (source
      (origin
        (method url-fetch)
-       (uri (crate-uri "env-logger" version))
+       (uri (crate-uri "env_logger" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0gwx1pvbv99fj9wpicknyv4p2vj997xpva8ac5dg03m35q0jlf8p"))))
+        (base32 "1hzr53r0wga51j0w5zid69ylbfizg4qdbq0vqdj6rvki94sg0b0b"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:cargo-inputs
+     `(#:skip-build? #t
+       #:cargo-inputs
        (("rust-atty" ,rust-atty-0.2)
         ("rust-humantime" ,rust-humantime-2)
         ("rust-log" ,rust-log-0.4)
@@ -15741,6 +19600,26 @@ convert enum to u8 slice ref.")
 is configured via an environment variable.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-env-logger-0.8
+  (package
+    (inherit rust-env-logger-0.9)
+    (name "rust-env-logger")
+    (version "0.8.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "env-logger" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1qzw8g11dbdfi7ixm44ldykwcqsxqkh8vx5cgpd88zmclgz8g4d1"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-atty" ,rust-atty-0.2)
+        ("rust-humantime" ,rust-humantime-2)
+        ("rust-log" ,rust-log-0.4)
+        ("rust-regex" ,rust-regex-1)
+        ("rust-termcolor" ,rust-termcolor-1))))))
+
 (define-public rust-env-logger-0.7
   (package
     (inherit rust-env-logger-0.8)
@@ -16088,6 +19967,24 @@ deserialized from environment variables.")
      `(#:cargo-inputs
        (("rust-backtrace" ,rust-backtrace-0.3))))))
 
+(define-public rust-error-chain-0.8
+  (package
+    (inherit rust-error-chain-0.11)
+    (name "rust-error-chain")
+    (version "0.8.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "error-chain" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0ijxazr966gjvckl3yrkcziazk3ryrfc466m84p9m2iq314y0c39"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-backtrace" ,rust-backtrace-0.3))))))
+
 (define-public rust-error-code-2
   (package
     (name "rust-error-code")
@@ -16112,6 +20009,31 @@ deserialized from environment variables.")
 @code{no_std} environment.")
     (license license:boost1.0)))
 
+(define-public rust-escaper-0.1
+  (package
+    (name "rust-escaper")
+    (version "0.1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "escaper" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0rhn3ipb5c3zns4wakclilfqzbmax6pwx7l367dipfj9fdxvjgm5"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-entities" ,rust-entities-1))
+       #:cargo-development-inputs
+       (("rust-num" ,rust-num-0.4)
+        ("rust-rand" ,rust-rand-0.8))))
+    (home-page "https://github.com/dignifiedquire/rust-escaper")
+    (synopsis "Library for HTML entity encoding and decoding")
+    (description "This package provides a library for HTML entity encoding and
+decoding.")
+    (license (list license:asl2.0 license:expat license:mpl2.0))))
+
 (define-public rust-escargot-0.5
   (package
     (name "rust-escargot")
@@ -16183,6 +20105,24 @@ You can use this crate to turn non-blocking data structures into async or
 blocking data structures.")
     (license (list license:asl2.0 license:expat))))
 
+(define-public rust-exitcode-1
+  (package
+    (name "rust-exitcode")
+    (version "1.1.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "exitcode" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "14x1pgwx86x1gfc5zqgj04akr9pzg14w75d9cblc49vhnij3g1fy"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/benwilber/exitcode")
+    (synopsis "Preferred system exit codes as defined by @file{sysexits.h}")
+    (description "This package provides preferred system exit codes as defined
+by @file{sysexits.h}.")
+    (license license:asl2.0)))
+
 (define-public rust-exitfailure-0.5
   (package
     (name "rust-exitfailure")
@@ -16234,9 +20174,9 @@ blocking data structures.")
        (("rust-cmake" ,rust-cmake-0.1)
         ("rust-pkg-config" ,rust-pkg-config-0.3))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("expat" ,expat)))
+     (list expat))
     (home-page "http://www.libexpat.org/")
     (synopsis "XML parser library written in C")
     (description "XML parser library written in C")
@@ -16245,7 +20185,7 @@ blocking data structures.")
 (define-public rust-expect-test-1
   (package
     (name "rust-expect-test")
-    (version "1.1.0")
+    (version "1.2.2")
     (source
      (origin
        (method url-fetch)
@@ -16254,7 +20194,7 @@ blocking data structures.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "0cq651b3dcrw94bl03krxnvllr8kqx6vskqal0n8ydrsmdx4f013"))))
+         "05nv365xd5fqydmzbsvzqz0148a1vbxp2p0r8a3ivafdvhl6ngky"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build?
@@ -16270,27 +20210,43 @@ blocking data structures.")
      "This package provides a minimalistic snapshot testing library.")
     (license (list license:expat license:asl2.0))))
 
-(define-public rust-expectest-0.9
+(define-public rust-expectest-0.12
   (package
     (name "rust-expectest")
-    (version "0.9.2")
+    (version "0.12.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "expectest" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0f24q2a53x7sfmmrqjbwbk7pahzwkpd829fcr023kb7q5xnd6z4g"))))
+        (base32 "0y290ak3q5l8l8ajg00mqx1lx9f1pagk6ckmplzibf5ach5pr0bq"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
-       (("rust-num-traits" ,rust-num-traits-0.1))))
+       (("rust-num-traits" ,rust-num-traits-0.2))))
     (home-page "https://github.com/zummenix/expectest")
     (synopsis "Matchers and matcher functions for unit testing")
     (description "This crate provides matchers and matcher functions for unit
 testing.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-expectest-0.9
+  (package
+    (inherit rust-expectest-0.12)
+    (name "rust-expectest")
+    (version "0.9.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "expectest" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0f24q2a53x7sfmmrqjbwbk7pahzwkpd829fcr023kb7q5xnd6z4g"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-num-traits" ,rust-num-traits-0.1))))))
+
 (define-public rust-extend-0.1
   (package
     (name "rust-extend")
@@ -16319,6 +20275,30 @@ testing.")
 traits but without the boilerplate.")
     (license license:expat)))
 
+(define-public rust-eyre-0.6
+  (package
+    (name "rust-eyre")
+    (version "0.6.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "eyre" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1f0fbmrcykp84av1yb1d4cqj28jwf0zg1z49a1cgw8vrcf7ms8mw"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-indenter" ,rust-indenter-0.3)
+        ("rust-once-cell" ,rust-once-cell-1))))
+    (home-page "https://github.com/yaahc/eyre")
+    (synopsis "Trait object based error handling type")
+    (description
+     "This library provides @code{eyre::Report}, a trait object based error
+handling type for easy idiomatic error handling and reporting in Rust.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-fake-simd-0.1
   (package
     (name "rust-fake-simd")
@@ -16364,10 +20344,32 @@ a result when an allocation error occurs, ala
 @url{https://github.com/rust-lang/rfcs/blob/master/text/2116-alloc-me-maybe.md,RFC
 2116}.  The API currently proposes a fallible interface for @code{Vec},
 @code{Box}, @code{Arc}, @code{Btree} and @code{Rc}, as well as a
-@code{TryClone} trait wich is implemented for primitive Rust traits and a
+@code{TryClone} trait which is implemented for primitive Rust traits and a
 fallible format macro.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-fallible-collections-0.3
+  (package
+    (name "rust-fallible-collections")
+    (version "0.3.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "fallible_collections" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32 "1shgcljh6pliv1b1qk6knk2hzig5ah76hx01f1icpgkiqp6fi6cm"))))
+    (build-system cargo-build-system)
+    (arguments
+      `(#:skip-build? #t
+        #:cargo-inputs
+        (("rust-hashbrown" ,rust-hashbrown-0.9))))
+    (home-page "https://github.com/vcombey/fallible_collections.git")
+    (synopsis "Fallible allocation API for standard collections")
+    (description "This crate adds fallible allocation API to standard
+collections.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-failure-0.1
   (package
     (name "rust-failure")
@@ -16429,7 +20431,7 @@ fallible format macro.")
       (origin
         (method url-fetch)
         (uri (crate-uri "fallible-iterator" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1xq759lsr8gqss7hva42azn3whgrbrs2sd9xpn92c5ickxm1fhs4"))))
@@ -16474,8 +20476,36 @@ provides implementations for @code{HashMap} and @code{HashSet}.")
     (description "Fallible streaming iteration")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-fancy-regex-0.7
+  (package
+    (name "rust-fancy-regex")
+    (version "0.7.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "fancy-regex" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1krwc8mbj8zv4ahvh3lqkmfxf38cg79ya02by19fn4jil1h8aswx"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bit-set" ,rust-bit-set-0.5)
+        ("rust-regex" ,rust-regex-1))))
+    (home-page "https://github.com/fancy-regex/fancy-regex")
+    (synopsis "Implementation of regexes with a rich set of features")
+    (description
+     "This package is a Rust library for compiling and matching regular
+expressions.  It uses a hybrid regex implementation designed to support
+a relatively rich set of features.  In particular, it uses backtracking to
+implement features such as look-around and backtracking, which are not
+supported in purely NFA-based implementations.")
+    (license license:expat)))
+
 (define-public rust-fancy-regex-0.3
   (package
+    (inherit rust-fancy-regex-0.7)
     (name "rust-fancy-regex")
     (version "0.3.5")
     (source
@@ -16485,7 +20515,6 @@ provides implementations for @code{HashMap} and @code{HashSet}.")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "051bnj890xrvhslppdzw6n956xfjg0wr2ixvhy336d2japvap4df"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-bit-set" ,rust-bit-set-0.5)
@@ -16505,16 +20534,7 @@ provides implementations for @code{HashMap} and @code{HashSet}.")
          (add-after 'unpack 'remove-oniguruma-tests
            (lambda _
              (delete-file-recursively "tests/oniguruma")
-             (delete-file "tests/oniguruma.rs"))))))
-    (home-page "https://github.com/fancy-regex/fancy-regex")
-    (synopsis "Implementation of regexes with a rich set of features")
-    (description
-     "This package is a Rust library for compiling and matching regular
-expressions.  It uses a hybrid regex implementation designed to support
-a relatively rich set of features.  In particular, it uses backtracking to
-implement features such as look-around and backtracking, which are not
-supported in purely NFA-based implementations.")
-    (license license:expat)))
+             (delete-file "tests/oniguruma.rs"))))))))
 
 (define-public rust-fast-chemail-0.9
   (package
@@ -16553,29 +20573,70 @@ is defined in the HTML specification.")
     (build-system cargo-build-system)
     (arguments `(#:skip-build? #t))
     (home-page "https://github.com/aldanor/fast-float-rust")
-    (synopsis "Fast floating-point number parser.")
+    (synopsis "Fast floating-point number parser")
     (description
      "This crate provides a fast decimal number parser from strings into
 floats.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-fastq-0.6
+  (package
+    (name "rust-fastq")
+    (version "0.6.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "fastq" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "177jsfabnk3zl5zml6qvidzjpk53dp62rqjbdhbhr8cg7ms59p60"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-build-flags '("-vv")
+       #:phases
+       (modify-phases %standard-phases
+         ;; This is needed for the parasail-sys package.
+         (add-after 'unpack 'set-shell-for-configure-script
+           (lambda _
+             (setenv "SHELL" (which "sh"))
+             (setenv "CONFIG_SHELL" (which "sh")))))
+       #:cargo-inputs
+       (("rust-flate2" ,rust-flate2-1)
+        ("rust-lz4" ,rust-lz4-1)
+        ("rust-memchr" ,rust-memchr-2))
+       #:cargo-development-inputs
+       (("rust-bio" ,rust-bio-0.33)
+        ("rust-parasailors" ,rust-parasailors-0.3))))
+    (inputs
+     (list zlib))
+    (native-inputs
+     (list libtool))
+    (home-page "https://github.com/aseyboldt/fastq-rs")
+    (synopsis "Parser for fastq files")
+    (description "This package provides a parser for fastq files.")
+    (license license:expat)))
+
 (define-public rust-fastrand-1
   (package
     (name "rust-fastrand")
-    (version "1.4.0")
+    (version "1.6.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "fastrand" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1qvz1i7g5mb2hcsaawrvxx88b8vwrsr85qr98ffmrkj5fh2sypya"))))
+        (base32 "1ci4fcwfwkkpwd8b0zgxgvp4qf84cl53ivnp1r6cr40bd8xh97bp"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-instant" ,rust-instant-0.1))
        #:cargo-development-inputs
-       (("rust-rand" ,rust-rand-0.7))))
+       (("rust-getrandom" ,rust-getrandom-0.2)
+        ("rust-instant" ,rust-instant-0.1)
+        ("rust-rand" ,rust-rand-0.8)
+        ("rust-wasm-bindgen-test" ,rust-wasm-bindgen-test-0.3)
+        ("rust-wyhash" ,rust-wyhash-0.5))))
     (home-page "https://github.com/stjepang/fastrand")
     (synopsis "Simple and fast random number generator")
     (description
@@ -16625,6 +20686,158 @@ it.")
        (("rust-libc" ,rust-libc-0.2)
         ("rust-winapi" ,rust-winapi-0.3))))))
 
+(define-public rust-fdlimit-0.1
+  (package
+    (name "rust-fdlimit")
+    (version "0.1.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "fdlimit" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0g30d6gqkrwy8ylwdy7pqm443iq0p5dmnpz4ks41pirl7dclm98d"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-libc" ,rust-libc-0.2))))
+    (home-page "https://github.com/paritytech/fdlimit")
+    (synopsis "Utility crate for raising file descriptors limit")
+    (description "This package provides a Rust library to raise file
+descriptors limit.")
+    (license license:asl2.0)))
+
+(define-public rust-feature-probe-0.1
+  (package
+    (name "rust-feature-probe")
+    (version "0.1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "feature-probe" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1nhif9zpr2f17gagf0qb0v914wc3jr9sfjzvnpi7b7pcs73ksnl3"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/tov/feature-probe-rs")
+    (synopsis "Probe for rustc features from build.rs")
+    (description "To support multiple versions of Rust, it's often necessary
+to conditionally compile parts of our libraries or programs.  It's possible to
+allow users to specify what features to enable, but detection is better,
+because users get all the features that their version of Rust supports.  And
+while we could check the rustc version, it's better to probe for individual
+features.  This package probes for rustc features from build.rs.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-feed-rs-0.6
+  (package
+    (name "rust-feed-rs")
+    (version "0.6.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "feed-rs" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1a1ain6r9k8bx7cz9pxqh3hdqbn8cqdkrbx78c8rxb7vqngyg53z"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-chrono" ,rust-chrono-0.4)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-mime" ,rust-mime-0.3)
+        ("rust-quick-xml" ,rust-quick-xml-0.20)
+        ("rust-regex" ,rust-regex-1)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-json" ,rust-serde-json-1)
+        ("rust-siphasher" ,rust-siphasher-0.3)
+        ("rust-url" ,rust-url-2)
+        ("rust-uuid" ,rust-uuid-0.8))))
+    (home-page "https://github.com/feed-rs/feed-rs")
+    (synopsis "Unified feed parser")
+    (description "This package provides a unified feed parser that handles
+Atom, RSS 2.0, RSS 1.0, RSS 0.x and JSON Feed")
+    (license license:expat)))
+
+(define-public rust-feedbin-api-0.1
+  (package
+    (name "rust-feedbin-api")
+    (version "0.1.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "feedbin-api" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "170xf3cgsqgqpnafpdmzzw9yvzc51r22lgr4f4hcrmidxlxpmlkp"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:tests? #f ;tests use the network
+       #:cargo-inputs
+       (("rust-chrono" ,rust-chrono-0.4)
+        ("rust-failure" ,rust-failure-0.1)
+        ("rust-reqwest" ,rust-reqwest-0.11)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-derive" ,rust-serde-derive-1)
+        ("rust-serde-json" ,rust-serde-json-1)
+        ("rust-url" ,rust-url-2))
+       #:cargo-development-inputs
+       (("rust-dotenv" ,rust-dotenv-0.15)
+        ("rust-rand" ,rust-rand-0.8)
+        ("rust-tokio" ,rust-tokio-1))))
+    (native-inputs
+     (list pkg-config))
+    (inputs
+     (list openssl))
+    (home-page "https://gitlab.com/news-flash/feedbin_api")
+    (synopsis  "Rust implementation of the Feedbin REST API")
+    (description
+     "This package provides a Rust implementation of the Feedbin REST API.")
+    (license license:unlicense)))
+
+(define-public rust-feedly-api-0.4
+  (package
+    (name "rust-feedly-api")
+    (version "0.4.7")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "feedly-api" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1knad1bghc8hhfcyl35fcnhrk01vklamq07630rdk0pg6ax04swi"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:tests? #f ;tests open external connections
+       #:cargo-inputs
+       (("rust-chrono" ,rust-chrono-0.4)
+        ("rust-failure" ,rust-failure-0.1)
+        ("rust-log" ,rust-log-0.4)
+        ("rust-percent-encoding"
+         ,rust-percent-encoding-2)
+        ("rust-reqwest" ,rust-reqwest-0.11)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-derive" ,rust-serde-derive-1)
+        ("rust-serde-json" ,rust-serde-json-1)
+        ("rust-url" ,rust-url-2))
+       #:cargo-development-inputs
+       (("rust-dotenv" ,rust-dotenv-0.15)
+        ("rust-tokio" ,rust-tokio-1))))
+    (native-inputs
+     (list pkg-config))
+    (inputs
+     (list openssl))
+    (home-page "https://gitlab.com/news-flash/feedly_api")
+    (synopsis "Rust implementation of the feedly REST API")
+    (description
+     "This package provides a Rust implementation of the feedly REST API.")
+    ;; No copyright headers in the source code.  LICENSE indicates gpl3.
+    (license license:gpl3)))
+
 (define-public rust-femme-2
   (package
     (name "rust-femme")
@@ -16742,6 +20955,61 @@ it.")
        (("rust-clap" ,rust-clap-2)
         ("rust-tempdir" ,rust-tempdir-0.3))))))
 
+(define-public rust-fever-api-0.2
+  (package
+    (name "rust-fever-api")
+    (version "0.2.11")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "fever-api" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0pv4g241pc0bfwy9gjwsmrdv7mplzbifxr5mxf0k82yxawg55anc"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:tests? #f ;tests use the network
+       #:cargo-inputs
+       (("rust-failure" ,rust-failure-0.1)
+        ("rust-log" ,rust-log-0.4)
+        ("rust-md5" ,rust-md5-0.7)
+        ("rust-reqwest" ,rust-reqwest-0.11)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-json" ,rust-serde-json-1)
+        ("rust-url" ,rust-url-2))
+       #:cargo-development-inputs
+       (("rust-dotenv" ,rust-dotenv-0.15)
+        ("rust-tokio" ,rust-tokio-1))))
+    (native-inputs
+     (list pkg-config))
+    (inputs
+     (list openssl))
+    (home-page "https://gitlab.com/news-flash/fever_api")
+    (synopsis "Rust implementation of the Fever API")
+    (description
+     "This package provides a Rust implementation of the Fever API.")
+    ;; No copyright headers in the source code.  LICENSE indicates gpl3.
+    (license license:gpl3)))
+
+(define-public rust-fiat-crypto-0.1
+  (package
+    (name "rust-fiat-crypto")
+    (version "0.1.11")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "fiat-crypto" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "12gyr01z3bkahbxcrj2nsdq42qbqgq12w32dvpr6a7930i0qfxi1"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/mit-plv/fiat-crypto")
+    (synopsis "Fiat-crypto generated Rust")
+    (description "This crate provides the extracted Rust code from the Coq
+@code{fiat-crypto} libraries.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-filesize-0.2
   (package
     (name "rust-filesize")
@@ -16774,7 +21042,7 @@ sparse files.")
       (origin
         (method url-fetch)
         (uri (crate-uri "filetime" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1s71cb7hzkk4ahc5j53w8933gnxv2giyj7v0za5hbbk37ahwyd0x"))))
@@ -16799,6 +21067,30 @@ representation.")
     (license (list license:asl2.0
                    license:expat))))
 
+(define-public rust-field-offset-0.3
+  (package
+    (name "rust-field-offset")
+    (version "0.3.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "field-offset" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "14pvxz7yr0r3mlhaf65zva3r9d0kqid01wdw7ngx7jsh2jam870y"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build?
+       #t
+       #:cargo-inputs
+       (("rust-memoffset" ,rust-memoffset-0.6)
+        ("rust-rustc-version" ,rust-rustc-version-0.3))))
+    (home-page "https://github.com/Diggsey/rust-field-offset")
+    (synopsis "Safe pointer-to-member implementation")
+    (description "This package provides safe pointer-to-member
+implementation.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-findshlibs-0.5
   (package
     (name "rust-findshlibs")
@@ -16807,7 +21099,7 @@ representation.")
       (origin
         (method url-fetch)
         (uri (crate-uri "findshlibs" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1n2vagn0q5yim32hxkwi1cjgp3yn1dm45p7z8nw6lapywihhs9mi"))))
@@ -16857,24 +21149,39 @@ cross platform API.")
     (description "This package provides fixed-point numbers in Rust.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-fixedbitset-0.4
+  (package
+    (name "rust-fixedbitset")
+    (version "0.4.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "fixedbitset" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "17mnwa48dy11dnbasxa0c92sdj243acjl2ilhpcb1fa0pvxa93ir"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs (("rust-serde" ,rust-serde-1))))
+    (home-page "https://github.com/bluss/fixedbitset")
+    (synopsis "Simple bitset collection")
+    (description "FixedBitSet is a simple bitset collection.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-fixedbitset-0.2
   (package
+    (inherit rust-fixedbitset-0.4)
     (name "rust-fixedbitset")
     (version "0.2.0")
     (source
       (origin
         (method url-fetch)
         (uri (crate-uri "fixedbitset" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
-          "0kg03p777wc0dajd9pvlcnsyrwa8dhqwf0sd9r4dw0p82rs39arp"))))
-    (build-system cargo-build-system)
-    (home-page "https://github.com/petgraph/fixedbitset")
-    (synopsis "FixedBitSet is a simple bitset collection")
-    (description "FixedBitSet is a simple bitset collection.")
-    (license (list license:asl2.0
-                   license:expat))))
+          "0kg03p777wc0dajd9pvlcnsyrwa8dhqwf0sd9r4dw0p82rs39arp"))))))
 
 (define-public rust-fixedbitset-0.1
   (package
@@ -16885,7 +21192,7 @@ cross platform API.")
       (origin
         (method url-fetch)
         (uri (crate-uri "fixedbitset" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0czam11mi80dbyhf4rd4lz0ihcf7vkfchrdcrn45wbs0h40dxm46"))))))
@@ -16988,7 +21295,7 @@ cross platform API.")
 (define-public rust-flate2-1
   (package
     (name "rust-flate2")
-    (version "1.0.20")
+    (version "1.0.22")
     (source
      (origin
        (method url-fetch)
@@ -16997,13 +21304,13 @@ cross platform API.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1q5b4r2rclhjbcxlbv5231avp1y6y8bynrf5v3brdzhhvr9yqfnd"))))
+         "0gy5iwfqylb2f0dd9n7r8w2xwbzlrqlsairvyj2w9jf1jzl8hs8y"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-cfg-if" ,rust-cfg-if-1)
-        ("rust-cloudflare-zlib-sys" ,rust-cloudflare-zlib-sys-0.2)
+        ("rust-cloudflare-zlib-sys" ,rust-cloudflare-zlib-sys-0.3)
         ("rust-crc32fast" ,rust-crc32fast-1)
         ("rust-futures" ,rust-futures-0.1)
         ("rust-libc" ,rust-libc-0.2)
@@ -17027,8 +21334,31 @@ Reader/Writer streams.  Contains bindings for zlib, deflate, and gzip-based
 streams.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-float-cmp-0.9
+  (package
+    (name "rust-float-cmp")
+    (version "0.9.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "float-cmp" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1i799ksbq7fj9rm9m82g1yqgm6xi3jnrmylddmqknmksajylpplq"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-num-traits" ,rust-num-traits-0.2))))
+    (home-page "https://github.com/mikedilger/float-cmp")
+    (synopsis "Floating point approximate comparison traits")
+    (description "This package provides floating point approximate comparison
+traits.")
+    (license license:expat)))
+
 (define-public rust-float-cmp-0.8
   (package
+    (inherit rust-float-cmp-0.9)
     (name "rust-float-cmp")
     (version "0.8.0")
     (source
@@ -17040,14 +21370,8 @@ streams.")
         (sha256
          (base32
           "1i56hnzjn5pmrcm47fwkmfxiihk7wz5vvcgpb0kpfhzkqi57y9p1"))))
-    (build-system cargo-build-system)
     (arguments
-     `(#:cargo-inputs (("rust-num-traits" ,rust-num-traits-0.2))))
-    (home-page "https://github.com/mikedilger/float-cmp")
-    (synopsis "Floating point approximate comparison traits")
-    (description
-     "Floating point approximate comparison traits in Rust.")
-    (license license:expat)))
+     `(#:cargo-inputs (("rust-num-traits" ,rust-num-traits-0.2))))))
 
 (define-public rust-float-cmp-0.6
   (package
@@ -17111,6 +21435,49 @@ streams.")
     (arguments
      `(#:cargo-inputs (("rust-num" ,rust-num-0.1))))))
 
+(define-public rust-float-next-after-0.1
+  (package
+    (name "rust-float-next-after")
+    (version "0.1.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "float_next_after" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0cnn60pslh0gilpy2jr7qpqk22a6lmsdz847988bg1krhg2i5ijg"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-num-traits" ,rust-num-traits-0.2))))
+    (home-page "https://gitlab.com/bronsonbdevost/next_afterf")
+    (synopsis "Trait for native Rust f64/f32 nextafter")
+    (description
+     "This package provides a trait for native Rust f64/f32 nextafter.")
+    (license license:expat)))
+
+(define-public rust-float-ord-0.3
+  (package
+    (name "rust-float-ord")
+    (version "0.3.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "float-ord" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0gbvx6dzz8xvj38bj02cajpqd9p5syxjx9jyqpj8414amr4izs4c"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-development-inputs
+       (("rust-rand" ,rust-rand-0.8))))
+    (home-page "https://github.com/notriddle/rust-float-ord")
+    (synopsis "Total ordering for floating-point numbers")
+    (description
+     "This package provides a total ordering for floating-point numbers")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-float-ord-0.2
   (package
     (name "rust-float-ord")
@@ -17244,7 +21611,7 @@ crate.")
       (origin
         (method url-fetch)
         (uri (crate-uri "fnv" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1ww56bi1r5b8id3ns9j3qxbi7w5h005rzhiryy0zi9h97raqbb9g"))))
@@ -17256,46 +21623,41 @@ implementation that is more efficient for smaller hash keys.")
     (license (list license:asl2.0
                    license:expat))))
 
-(define-public rust-font-kit-0.4
+(define-public rust-font-kit-0.10
   (package
     (name "rust-font-kit")
-    (version "0.4.0")
+    (version "0.10.1")
     (source
-      (origin
-        (method url-fetch)
-        (uri (crate-uri "font-kit" version))
-        (file-name
-         (string-append name "-" version ".tar.gz"))
-        (sha256
-         (base32
-          "1fmg1jmqdvsjxjbyz8chpx1mhp544mwq128ns1shhrha5a6zzdqp"))))
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "font-kit" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0a7fm757af2s9sk2i02plpa280mmygjmchcwpjclk1iqxiba3ja6"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-lyon-path" ,rust-lyon-path-0.14)
-        ("rust-core-graphics" ,rust-core-graphics-0.17)
+       (("rust-bitflags" ,rust-bitflags-1)
+        ("rust-byteorder" ,rust-byteorder-1)
+        ("rust-core-foundation" ,rust-core-foundation-0.9)
+        ("rust-core-graphics" ,rust-core-graphics-0.22)
+        ("rust-core-text" ,rust-core-text-19)
+        ("rust-dirs-next" ,rust-dirs-next-2)
+        ("rust-dwrote" ,rust-dwrote-0.11)
         ("rust-float-ord" ,rust-float-ord-0.2)
+        ("rust-freetype" ,rust-freetype-0.7)
+        ("rust-lazy-static" ,rust-lazy-static-1)
         ("rust-libc" ,rust-libc-0.2)
-        ("rust-euclid" ,rust-euclid-0.20)
-        ("rust-winapi" ,rust-winapi-0.3)
-        ("rust-servo-fontconfig"
-         ,rust-servo-fontconfig-0.4)
-        ("rust-freetype" ,rust-freetype-0.4)
         ("rust-log" ,rust-log-0.4)
-        ("rust-core-foundation"
-         ,rust-core-foundation-0.6)
-        ("rust-memmap" ,rust-memmap-0.7)
-        ("rust-dwrote" ,rust-dwrote-0.9)
-        ("rust-dirs" ,rust-dirs-1)
-        ("rust-byteorder" ,rust-byteorder-1)
-        ("rust-lazy-static" ,rust-lazy-static-1)
-        ("rust-core-text" ,rust-core-text-13)
-        ("rust-walkdir" ,rust-walkdir-2))))
+        ("rust-pathfinder-geometry" ,rust-pathfinder-geometry-0.5)
+        ("rust-pathfinder-simd" ,rust-pathfinder-simd-0.5)
+        ("rust-servo-fontconfig" ,rust-servo-fontconfig-0.5)
+        ("rust-walkdir" ,rust-walkdir-2)
+        ("rust-winapi" ,rust-winapi-0.3))))
     (home-page "https://github.com/servo/font-kit")
-    (synopsis "Cross-platform font loading library")
-    (description
-     "This package provides a cross-platform font loading library.")
+    (synopsis "Font loading library")
+    (description "This package provides a font loading library.")
     (license (list license:expat license:asl2.0))))
 
 (define-public rust-foreign-types-0.5
@@ -17410,7 +21772,7 @@ implementation that is more efficient for smaller hash keys.")
       (origin
         (method url-fetch)
         (uri (crate-uri "foreign-types-shared" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0kanxlif1vp0ffh2r9l610jqbkmb3183yqykxq1z5w1vay2rn7y6"))))))
@@ -17487,31 +21849,47 @@ values to other threads.")
          (base32
           "1yf2hmkw52x2dva3c9km1x8c2z5kwby7qqn8kz5ms3gs480i9y05"))))))
 
-(define-public rust-freetype-0.4
+(define-public rust-freetype-0.7
   (package
     (name "rust-freetype")
-    (version "0.4.1")
+    (version "0.7.0")
     (source
-      (origin
-        (method url-fetch)
-        (uri (crate-uri "freetype" version))
-        (file-name
-         (string-append name "-" version ".tar.gz"))
-        (sha256
-         (base32
-          "0a70x03n68997f08bi3n47q9wyi3pv5s9v4rjc79sihb84mnp4hi"))))
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "freetype" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1ijxyd8isq0w7qkbhp7p1y536xg3d8b8vy5ljg31rnz3m5w87qxy"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-libc" ,rust-libc-0.2)
-        ("rust-servo-freetype-sys" ,rust-servo-freetype-sys-4))))
+       (("rust-freetype-sys" ,rust-freetype-sys-0.13)
+        ("rust-libc" ,rust-libc-0.2))))
     (home-page "https://github.com/servo/rust-freetype")
     (synopsis "Bindings for Freetype used by Servo")
-    (description
-     "Bindings for Freetype used by Servo.")
+    (description "This package provides bindings for Freetype used by Servo.")
     (license (list license:asl2.0 license:expat))))
 
+(define-public rust-freetype-0.4
+  (package
+    (inherit rust-freetype-0.7)
+    (name "rust-freetype")
+    (version "0.4.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "freetype" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0a70x03n68997f08bi3n47q9wyi3pv5s9v4rjc79sihb84mnp4hi"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-libc" ,rust-libc-0.2)
+        ("rust-servo-freetype-sys" ,rust-servo-freetype-sys-4))))))
+
 (define-public rust-freetype-rs-0.26
   (package
     (name "rust-freetype-rs")
@@ -17557,8 +21935,7 @@ values to other threads.")
        #:cargo-development-inputs
        (("rust-unicode-normalization" ,rust-unicode-normalization-0.1))))
     (inputs
-     `(("freetype" ,freetype)
-       ("zlib" ,zlib)))))
+     (list freetype zlib))))
 
 (define-public rust-freetype-sys-0.13
   (package
@@ -17604,8 +21981,7 @@ values to other threads.")
         ("rust-libz-sys" ,rust-libz-sys-1)
         ("rust-pkg-config" ,rust-pkg-config-0.3))))
     (inputs
-     `(("freetype" ,freetype)
-       ("zlib" ,zlib)))))
+     (list freetype zlib))))
 
 (define-public rust-fs2-0.4
   (package
@@ -17640,7 +22016,7 @@ duplication.")
      (origin
        (method url-fetch)
        (uri (crate-uri "fs_extra" version))
-       (file-name (string-append name "-" version ".crate"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "151k6dr35mhq5d8pc8krhw55ajhkyiv0pm14s7zzlc5bc9fp28i0"))))
     (build-system cargo-build-system)
@@ -17733,10 +22109,10 @@ for file changes notifications")
         (("rust-tempdir" ,rust-tempdir-0.3)
          ("rust-time" ,rust-time-0.1))))))
 
-(define-public rust-fsevent-sys-3
+(define-public rust-fsevent-sys-4
   (package
     (name "rust-fsevent-sys")
-    (version "3.1.0")
+    (version "4.1.0")
     (source
      (origin
        (method url-fetch)
@@ -17745,7 +22121,7 @@ for file changes notifications")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1mav57d1zcp4x17h0wprcr188d8yvxfz1c0f1z0p31q52xl5wvya"))))
+         "1liz67v8b0gcs8r31vxkvm2jzgl9p14i78yfqx81c8sdv817mvkn"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -17757,6 +22133,26 @@ for file changes notifications")
 macOS API for file changes notifications")
     (license license:expat)))
 
+(define-public rust-fsevent-sys-3
+  (package
+    (inherit rust-fsevent-sys-4)
+    (name "rust-fsevent-sys")
+    (version "3.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "fsevent-sys" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1mav57d1zcp4x17h0wprcr188d8yvxfz1c0f1z0p31q52xl5wvya"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-libc" ,rust-libc-0.2))))))
+
 (define-public rust-fsevent-sys-2
   (package
     (inherit rust-fsevent-sys-3)
@@ -17794,7 +22190,7 @@ macOS API for file changes notifications")
        #:cargo-inputs
        (("rust-utf8-ranges" ,rust-utf8-ranges-1))))
     (home-page "https://github.com/BurntSushi/fst")
-    (synopsis "Represent sets or maps of large numbers of strings.")
+    (synopsis "Represent sets or maps of large numbers of strings")
     (description
      "Use finite state transducers to compactly represent sets or maps of many
 strings (> 1 billion is possible).")
@@ -17808,7 +22204,7 @@ strings (> 1 billion is possible).")
       (origin
         (method url-fetch)
         (uri (crate-uri "fuchsia-cprng" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1fnkqrbz7ixxzsb04bsz9p0zzazanma8znfdqjvh39n14vapfvx0"))))
@@ -17829,7 +22225,7 @@ pseudorandom number generator")
       (origin
         (method url-fetch)
         (uri (crate-uri "fuchsia-zircon" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "10jxc5ks1x06gpd0xg51kcjrxr35nj6qhx2zlc5n7bmskv3675rf"))))
@@ -17852,7 +22248,7 @@ pseudorandom number generator")
       (origin
         (method url-fetch)
         (uri (crate-uri "fuchsia-zircon-sys" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "19zp2085qsyq2bh1gvcxq1lb8w6v6jj9kbdkhpdjrl95fypakjix"))))
@@ -17863,19 +22259,19 @@ pseudorandom number generator")
     (description "Low-level Rust bindings for the Zircon kernel.")
     (license license:bsd-3)))
 
-(define-public rust-funty-1
+(define-public rust-funty-1.2
   (package
     (name "rust-funty")
-    (version "1.1.0")
+    (version "1.2.0")
     (source
-      (origin
-        (method url-fetch)
-        (uri (crate-uri "funty" version))
-        (file-name
-         (string-append name "-" version ".tar.gz"))
-        (sha256
-         (base32
-          "19wx3p3jmv863y0mjb56sr4qf1kvqhl3fsyslkd92zli0p8lrlzy"))))
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "funty" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "07lb1f8yih3g694id3n90anlgxf8m6p98bllsnn6dmb5rfwsniqq"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-development-inputs
@@ -17888,6 +22284,24 @@ code to generalize over which specific type it accepted. This was never
 stabilized, and eventually removed.  This library reïnstates these traits.")
     (license license:expat)))
 
+(define-public rust-funty-1
+  (package
+    (inherit rust-funty-1.2)
+    (name "rust-funty")
+    (version "1.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "funty" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "19wx3p3jmv863y0mjb56sr4qf1kvqhl3fsyslkd92zli0p8lrlzy"))))
+    (arguments
+     `(#:cargo-development-inputs
+       (("rust-static-assertions" ,rust-static-assertions-1))))))
+
 (define-public rust-futf-0.1
   (package
     (name "rust-futf")
@@ -17951,7 +22365,7 @@ zero allocations, composability, and iterator-like interfaces.")
       (origin
         (method url-fetch)
         (uri (crate-uri "futures" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1vq3cw37knnd0afw3rcjzh71i2l01v5m4ysinrrqdvnn2ql0z60v"))))
@@ -18074,14 +22488,14 @@ featuring zero allocations, composability, and iterator-like interfaces.")
       (origin
         (method url-fetch)
         (uri (crate-uri "futures-core-preview" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "02n66jkjhpy210dv24pz0j30lvyin5kzlrb50p1j7x8yzdin4nxk"))))
     (build-system cargo-build-system)
     (arguments '(#:tests? #f))
     (home-page "https://rust-lang-nursery.github.io/futures-rs/")
-    (synopsis "Core traits and types in for the @code{futures} library.")
+    (synopsis "Core traits and types in for the @code{futures} library")
     (description "This crate provides the core traits and types in for the
 @code{futures} library.")
     (license (list license:asl2.0
@@ -18095,7 +22509,7 @@ featuring zero allocations, composability, and iterator-like interfaces.")
       (origin
         (method url-fetch)
         (uri (crate-uri "futures-cpupool" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1r32456gpblzfvnkf60545v8acqk7gh5zhyhi1jn669k9gicv45b"))))
@@ -18229,7 +22643,7 @@ for the @code{futures-rs} library.")
       (origin
         (method url-fetch)
         (uri (crate-uri "futures-io-preview" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1npb04xbn2gw5rjllz88cb88fql44xxfkgcidjjj26fva3j4m4gl"))))
@@ -18435,7 +22849,7 @@ the @code{futures-rs} library.")
       (origin
         (method url-fetch)
         (uri (crate-uri "futures-sink-preview" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1v7y5qvgvl0d6hd9s4k7bd5qrj2gdlrs5yfl22v5pxv9dgpliwc6"))))
@@ -19174,7 +23588,7 @@ platforms.")
       (origin
         (method url-fetch)
         (uri (crate-uri "getopts" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1mgb3qvivi26gs6ihqqhh8iyhp3vgxri6vwyrwg28w0xqzavznql"))))
@@ -19274,6 +23688,30 @@ retrieving random data from system source.")
 getters and setters on fields.")
     (license license:expat)))
 
+(define-public rust-getset-0.0.9
+  (package
+    (name "rust-getset")
+    (version "0.0.9")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "getset" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0aaldwfs2690rjqg2ygan27l2qa614w2p6zj7k99n36pv2vzbcsv"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-proc-macro2" ,rust-proc-macro2-1)
+        ("rust-quote" ,rust-quote-1)
+        ("rust-syn" ,rust-syn-1))))
+    (home-page "https://github.com/Hoverbear/getset")
+    (synopsis "Getters and setters for Rust")
+    (description
+     "This package provides a procedural macro for generating the most basic
+getters and setters on fields.")
+    (license license:expat)))
+
 (define-public rust-gettext-rs-0.7
   (package
     (name "rust-gettext-rs")
@@ -19513,6 +23951,55 @@ authenticated encryption cipher.")
        (("rust-polyval" ,rust-polyval-0.3)
         ("rust-zeroize" ,rust-zeroize-1))))))
 
+(define-public rust-ghost-0.1
+  (package
+    (name "rust-ghost")
+    (version "0.1.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "ghost" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0yalg3g1g3cz63n3phy7cdhh7p2qd220mrpxy96alwxbpqdwynqs"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-proc-macro2" ,rust-proc-macro2-1)
+        ("rust-quote" ,rust-quote-1)
+        ("rust-syn" ,rust-syn-1))))
+    (home-page "https://github.com/dtolnay/ghost")
+    (synopsis "Define your own PhantomData")
+    (description
+     "This package makes it possible to define your own PhantomData and
+similarly behaved unit types with generic parameters, which is not
+permitted in ordinary Rust.")
+    ;; Either license can be chosen at the users option.
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-gif-0.11
+  (package
+    (name "rust-gif")
+    (version "0.11.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "gif" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32 "1pnqfg0k84v0cnqyf85jqvwy3jcs580bfjaps5rzbl3kk5lqyrjs"))))
+    (build-system cargo-build-system)
+    (arguments
+      `(#:skip-build? #t
+        #:cargo-inputs
+        (("rust-color-quant" ,rust-color-quant-1)
+         ("rust-weezl" ,rust-weezl-0.1))))
+    (home-page "https://github.com/image-rs/image-gif")
+    (synopsis "GIF de- and encoder")
+    (description "This crate provides a GIF de- and encoder.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-gimli-0.23
   (package
     (name "rust-gimli")
@@ -19657,7 +24144,7 @@ dirty state into your program.")
 (define-public rust-git2-0.13
   (package
     (name "rust-git2")
-    (version "0.13.20")
+    (version "0.13.24")
     (source
      (origin
        (method url-fetch)
@@ -19666,7 +24153,7 @@ dirty state into your program.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1fkc2gzcnl4ci3rja9mc5jl2ygl3fkc1fgym3rcwby216ac1x0yr"))))
+         "07rlxwvl5iyyqwh0mci5v27lbicf9qiqm60maw1srz7i51x00pl4"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
@@ -19685,10 +24172,7 @@ dirty state into your program.")
      `(("pkg-config" ,pkg-config)
        ("git" ,git-minimal)))           ;for a single test
     (inputs
-     `(("libgit2" ,libgit2)
-       ("libssh2" ,libssh2)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list libgit2 libssh2 openssl zlib))
     (home-page "https://github.com/rust-lang/git2-rs")
     (synopsis "Rust bindings to libgit2")
     (description
@@ -19757,6 +24241,39 @@ reading and writing git repositories.")
         ("rust-thread-id" ,rust-thread-id-3)
         ("rust-time" ,rust-time-0.1))))))
 
+(define-public rust-git2-0.6
+  (package
+    (inherit rust-git2-0.11)
+    (name "rust-git2-6")
+    (version "0.6.11")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "git2" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "115ys6vlfjy5pcwkip0wfzi4q3d1kimbl9isxvjyci1arnvlnnzf"))))
+    (arguments
+     `(#:tests? #f
+       #:cargo-inputs
+       (("rust-bitflags" ,rust-bitflags-0.9)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-libgit2-sys" ,rust-libgit2-sys-0.6)
+        ("rust-openssl-probe" ,rust-openssl-probe-0.1)
+        ("rust-openssl-sys" ,rust-openssl-sys-0.9)
+        ("rust-url" ,rust-url-1))
+       #:cargo-development-inputs
+       (("rust-docopt" ,rust-docopt-0.8)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-derive" ,rust-serde-derive-1)
+        ("rust-tempdir" ,rust-tempdir-0.3)
+        ("rust-time" ,rust-time-0.1))))
+    (inputs
+     (modify-inputs (package-inputs rust-git2-0.11)
+       (prepend curl)))))
+
 (define-public rust-git2-curl-0.14
   (package
     (name "rust-git2-curl")
@@ -19784,17 +24301,17 @@ reading and writing git repositories.")
 libcurl, which is intended to be used with the @code{git2} crate.")
     (license (list license:expat license:asl2.0))))
 
-(define-public rust-gjson-0.7
+(define-public rust-gjson-0.8
   (package
     (name "rust-gjson")
-    (version "0.7.5")
+    (version "0.8.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "gjson" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0vhary4ha77scriaw6r4nv16ha9pfzirm84sjc240csqwb542p10"))))
+        (base32 "164nwjx81j8cnnvi63h0dcxdc9ib3s0k9wx15l72hxp4vklx16a5"))))
     (build-system cargo-build-system)
     (arguments `(#:skip-build? #t))
     (home-page "https://github.com/tidwall/gjson.rs")
@@ -19802,6 +24319,166 @@ libcurl, which is intended to be used with the @code{git2} crate.")
     (description "Gjson is a JSON parser for Rust.")
     (license license:expat)))
 
+(define-public rust-gjson-0.7
+  (package
+    (inherit rust-gjson-0.8)
+    (name "rust-gjson")
+    (version "0.7.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "gjson" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0vhary4ha77scriaw6r4nv16ha9pfzirm84sjc240csqwb542p10"))))
+    (arguments `(#:skip-build? #t))))
+
+(define-public rust-glam-0.17
+  (package
+    (name "rust-glam")
+    (version "0.17.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "glam" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0xm7jdygbxchdvk6k1l1pdag843nkwdm8fikwgp0i1gxgawk45z0"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-approx" ,rust-approx-0.5)
+        ("rust-bytemuck" ,rust-bytemuck-1.5)
+        ("rust-mint" ,rust-mint-0.5)
+        ("rust-num-traits" ,rust-num-traits-0.2)
+        ("rust-rand" ,rust-rand-0.8)
+        ("rust-serde" ,rust-serde-1))))
+    (home-page "https://github.com/bitshifter/glam-rs")
+    (synopsis "3D math library for games and graphics")
+    (description
+     "This package provides a simple and fast 3D math library for games and
+graphics.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-glam-0.16
+  (package
+    (name "rust-glam")
+    (version "0.16.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "glam" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "05izbgx93hnjk200144h9yxhy51cbygp2bbaqdj8czngki3w09j1"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t  ; TODO: we need a more recent criterion
+       #:cargo-inputs
+       (("rust-approx" ,rust-approx-0.4)
+        ("rust-bytemuck" ,rust-bytemuck-1.5)
+        ("rust-mint" ,rust-mint-0.5)
+        ("rust-num-traits" ,rust-num-traits-0.2)
+        ("rust-rand" ,rust-rand-0.8)
+        ("rust-serde" ,rust-serde-1))))
+    (home-page "https://github.com/bitshifter/glam-rs")
+    (synopsis "3D math library for games and graphics")
+    (description
+     "This package provides a simple and fast 3D math library for games and
+graphics.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-glam-0.15
+  (package
+    (name "rust-glam")
+    (version "0.15.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "glam" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0jx587lxz9v9m0ph4dlshfgy0abax1zhlbjj5nvkchz4ir7mbfrs"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t  ; TODO: we need a more recent criterion
+       #:cargo-inputs
+       (("rust-bytemuck" ,rust-bytemuck-1.5)
+        ("rust-mint" ,rust-mint-0.5)
+        ("rust-num-traits" ,rust-num-traits-0.2)
+        ("rust-rand" ,rust-rand-0.8)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-spirv-std" ,rust-spirv-std-0.4))))
+    (home-page "https://github.com/bitshifter/glam-rs")
+    (synopsis "3D math library for games and graphics")
+    (description
+     "This package provides a simple and fast 3D math library for games and
+graphics.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-glam-0.14
+  (package
+    (name "rust-glam")
+    (version "0.14.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "glam" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1njk0cskaspc62ywxlzpiszbcb9hhh1yqg2ka105sg0hxgajhf9k"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-bytemuck" ,rust-bytemuck-1.5)
+        ("rust-mint" ,rust-mint-0.5)
+        ("rust-num-traits" ,rust-num-traits-0.2)
+        ("rust-rand" ,rust-rand-0.8)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-spirv-std" ,rust-spirv-std-0.4))
+       #:cargo-development-inputs
+       (("rust-criterion" ,rust-criterion-0.3)
+        ("rust-rand-xoshiro" ,rust-rand-xoshiro-0.6)
+        ("rust-serde-json" ,rust-serde-json-1))))
+    (home-page "https://github.com/bitshifter/glam-rs")
+    (synopsis "3D math library for games and graphics")
+    (description
+     "This package provides a simple and fast 3D math library for games and
+graphics.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-glam-0.13
+  (package
+    (name "rust-glam")
+    (version "0.13.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "glam" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1ps7f44844ydj7cjr7wk1hn2d83ds1ilq7p9b2vvhr0711b5n5bh"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-bytemuck" ,rust-bytemuck-1.5)
+        ("rust-mint" ,rust-mint-0.5)
+        ("rust-num-traits" ,rust-num-traits-0.2)
+        ("rust-rand" ,rust-rand-0.7)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-spirv-std" ,rust-spirv-std-0.4))
+       #:cargo-development-inputs
+       (("rust-criterion" ,rust-criterion-0.3)
+        ("rust-rand-xoshiro" ,rust-rand-xoshiro-0.4)
+        ("rust-serde-json" ,rust-serde-json-1))))
+    (home-page "https://github.com/bitshifter/glam-rs")
+    (synopsis "3D math library for games and graphics")
+    (description
+     "This package provides a simple and fast 3D math library for games and
+graphics.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-glium-0.25
   (package
     (name "rust-glium")
@@ -19848,7 +24525,7 @@ OpenGL's old and error-prone API.")
       (origin
         (method url-fetch)
         (uri (crate-uri "glob" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0x25wfr7vg3mzxc9x05dcphvd3nwlcmbnxrvwcvrrdwplcrrk4cv"))))
@@ -19874,7 +24551,7 @@ shell style patterns.")
       (origin
         (method url-fetch)
         (uri (crate-uri "glob" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1ysvi72slkw784fcsymgj4308c3y03gwjjzqxp80xdjnkbh8vqcb"))))))
@@ -20176,8 +24853,7 @@ the regex engine it uses pluggable.")
        (("rust-grep-matcher" ,rust-grep-matcher-0.1)
         ("rust-pcre2" ,rust-pcre2-0.2))))
     (native-inputs
-     `(("pcre2" ,pcre2)
-       ("pkg-config" ,pkg-config)))
+     (list pcre2 pkg-config))
     (home-page
      "https://github.com/BurntSushi/ripgrep")
     (synopsis "Use PCRE2 with the grep crate")
@@ -20324,14 +25000,14 @@ of gzip files based on the gzip header implementation in the @code{flate2} crate
 (define-public rust-h2-0.3
   (package
     (name "rust-h2")
-    (version "0.3.1")
+    (version "0.3.7")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "h2" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0y5fxy3sy0s3j1h6p0c2xk5n2gs4jk1dvmk88lvgwm22ywfv0cnq"))))
+        (base32 "0mdf0x3cxj4rhx2zrm0gnx02i43gqcz3q4awzidargff5xb1kn3z"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -20434,16 +25110,14 @@ of gzip files based on the gzip header implementation in the @code{flate2} crate
 (define-public rust-half-1
   (package
     (name "rust-half")
-    (version "1.6.0")
+    (version "1.7.1")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "half" version))
-       (file-name
-        (string-append name "-" version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32
-         "0xq1qkbfwnxv72b2fakgi5ai0j8arw38whwxgxs3rp1fz28anvyk"))))
+        (base32 "1wzavaaaa2jwkm4i1dbglmwjfsdhn4n73wrkbdzllaynlams5b32"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
@@ -20480,7 +25154,7 @@ IEEE 754-2008 binary16 type.")
        (("rust-winapi" ,rust-winapi-0.3))))
     (home-page "https://github.com/brson/home")
     (synopsis "Shared definitions of home directories")
-    (description "This packages provides the definition of @code{home_dir}
+    (description "This package provides the definition of @code{home_dir}
 used by @command{cargo} and @command{rustup}, as well as functions to find the
 correct value of @samp{CARGO_HOME} and @samp{RUSTUP_HOME}.")
     (license (list license:expat license:asl2.0))))
@@ -20570,29 +25244,65 @@ the template engine that renders the official Rust website")
      "This package provides a Rust implementation of VG handle graph.")
     (license license:expat)))
 
-(define-public rust-hash32-0.1
+(define-public rust-hash-hasher-2
+  (package
+    (name "rust-hash-hasher")
+    (version "2.0.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "hash_hasher" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "034cd4m3znwff3cd1i54c40944y999jz086d70rwpl0jfl01swkl"))))
+    (build-system cargo-build-system)
+    (arguments `(#:skip-build? #t))
+    (home-page "https://github.com/Fraser999/Hash-Hasher.git")
+    (synopsis "Hasher designed to work with already-hashed or hash-like data")
+    (description
+     "This package provides a hasher which is designed to work with
+already-hashed or hash-like data.")
+    (license (list license:asl2.0 license:expat))))
+
+(define-public rust-hash32-0.2
   (package
     (name "rust-hash32")
-    (version "0.1.1")
+    (version "0.2.1")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "hash32" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32
-         "1k7lv7hsbzv14pz90cxay6v7avh6d6kcrra0rsc45b33dvw1l16l"))))
+        (base32 "0rrbv5pc5b1vax6j6hk7zvlrpw0h6aybshxy9vbpgsrgfrc5zhxh"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:cargo-inputs
-       (("rust-byteorder" ,rust-byteorder-1))
-       #:cargo-development-inputs
-       (("rust-hash32-derive" ,rust-hash32-derive-0.1))))
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-byteorder" ,rust-byteorder-1))))
     (home-page "https://github.com/japaric/hash32")
     (synopsis "32-bit hashing machinery")
     (description "This package provides 32-bit hashing machinery.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-hash32-0.1
+  (package
+    (inherit rust-hash32-0.2)
+    (name "rust-hash32")
+    (version "0.1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "hash32" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1k7lv7hsbzv14pz90cxay6v7avh6d6kcrra0rsc45b33dvw1l16l"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-byteorder" ,rust-byteorder-1))
+       #:cargo-development-inputs
+       (("rust-hash32-derive" ,rust-hash32-derive-0.1))))))
+
 (define-public rust-hash32-derive-0.1
   (package
     (name "rust-hash32-derive")
@@ -20704,6 +25414,35 @@ hash map.")
         ("rust-rustc-hash" ,rust-rustc-hash-1)
         ("rust-serde-test" ,rust-serde-test-1))))))
 
+(define-public rust-hashbrown-0.6
+  (package
+    (inherit rust-hashbrown-0.9)
+    (name "rust-hashbrown")
+    (version "0.6.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "hashbrown" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1bbf9k46v57zi41m6hjwn83rjldyipv5zwxmdsa7a9c1rb876q4f"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-ahash" ,rust-ahash-0.2)
+        ("rust-autocfg" ,rust-autocfg-0.1)
+        ("rust-compiler-builtins" ,rust-compiler-builtins-0.1)
+        ("rust-rayon" ,rust-rayon-1)
+        ("rust-rustc-std-workspace-alloc" ,rust-rustc-std-workspace-alloc-1)
+        ("rust-rustc-std-workspace-core" ,rust-rustc-std-workspace-core-1)
+        ("rust-serde" ,rust-serde-1))
+       #:cargo-development-inputs
+       (("rust-doc-comment" ,rust-doc-comment-0.3)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-rand" ,rust-rand-0.5)
+        ("rust-rayon" ,rust-rayon-1)
+        ("rust-rustc-hash" ,rust-rustc-hash-1)
+        ("rust-serde-test" ,rust-serde-test-1))))))
+
 (define-public rust-hashbrown-0.5
   (package
     (inherit rust-hashbrown-0.8)
@@ -20733,6 +25472,27 @@ hash map.")
         ("rust-rustc-hash" ,rust-rustc-hash-1)
         ("rust-serde-test" ,rust-serde-test-1))))))
 
+(define-public rust-hashbrown-0.3
+  (package
+    (inherit rust-hashbrown-0.8)
+    (name "rust-hashbrown")
+    (version "0.3.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "hashbrown" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "063fy36q5796kd836sc5dgcc58bkgr7sw1hczmnmhbblwjmskyr9"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-compiler-builtins" ,rust-compiler-builtins-0.1)
+        ("rust-rayon" ,rust-rayon-1)
+        ("rust-rustc-std-workspace-alloc" ,rust-rustc-std-workspace-alloc-1)
+        ("rust-rustc-std-workspace-core" ,rust-rustc-std-workspace-core-1)
+        ("rust-serde" ,rust-serde-1))))))
+
 (define-public rust-hashbrown-0.1
   (package
     (inherit rust-hashbrown-0.5)
@@ -20811,6 +25571,32 @@ their key-value pairs in a user controllable order.")
        #:cargo-development-inputs
        (("rust-serde-test" ,rust-serde-test-1))))))
 
+(define-public rust-hdrhistogram-6
+  (package
+    (name "rust-hdrhistogram")
+    (version "6.3.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "hdrhistogram" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "17dqk0rp8kimcd8wr542i8cny91fkclw7a2xzszar95wrpmk3lq8"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-base64" ,rust-base64-0.10)
+        ("rust-byteorder" ,rust-byteorder-1)
+        ("rust-crossbeam-channel" ,rust-crossbeam-channel-0.3)
+        ("rust-flate2" ,rust-flate2-1)
+        ("rust-nom" ,rust-nom-4)
+        ("rust-num-traits" ,rust-num-traits-0.2))))
+    (home-page "https://github.com/HdrHistogram/HdrHistogram_rust")
+    (synopsis "Port of HdrHistogram to Rust")
+    (description "This package provides a port of HdrHistogram to Rust.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-headers-0.3
   (package
     (name "rust-headers")
@@ -20900,33 +25686,59 @@ their key-value pairs in a user controllable order.")
        (("rust-bytes" ,rust-bytes-0.4)
         ("rust-http" ,rust-http-0.1))))))
 
-(define-public rust-heapless-0.6
+(define-public rust-heapless-0.7
   (package
     (name "rust-heapless")
-    (version "0.6.1")
+    (version "0.7.9")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "heapless" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "08il083hcffis6km4is24kf2j0cnqs0bzz2b196l495zkk9d8jv3"))))
+        (base32 "0lnrbzf1cpxg3n5s00lyi1gal2ajkqzsrw11arrc6rbn35j6qivy"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-as-slice" ,rust-as-slice-0.1)
-        ("rust-generic-array" ,rust-generic-array-0.14)
-        ("rust-hash32" ,rust-hash32-0.1)
+       (("rust-atomic-polyfill" ,rust-atomic-polyfill-0.1)
+        ("rust-defmt" ,rust-defmt-0.3)
+        ("rust-hash32" ,rust-hash32-0.2)
         ("rust-serde" ,rust-serde-1)
+        ("rust-spin" ,rust-spin-0.9)
         ("rust-stable-deref-trait" ,rust-stable-deref-trait-1)
-        ("rust-ufmt-write" ,rust-ufmt-write-0.1))))
+        ("rust-ufmt-write" ,rust-ufmt-write-0.1))
+       #:cargo-development-inputs
+       (("rust-scoped-threadpool" ,rust-scoped-threadpool-0.1)
+        ("rust-ufmt" ,rust-ufmt-0.1))))
     (home-page "https://github.com/japaric/heapless")
     (synopsis "@code{statice} friendly data structures")
     (description "This package provides @code{static} friendly data structures
 that don't require dynamic memory allocation.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-heapless-0.6
+  (package
+    (inherit rust-heapless-0.7)
+    (name "rust-heapless")
+    (version "0.6.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "heapless" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "08il083hcffis6km4is24kf2j0cnqs0bzz2b196l495zkk9d8jv3"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-as-slice" ,rust-as-slice-0.1)
+        ("rust-generic-array" ,rust-generic-array-0.14)
+        ("rust-hash32" ,rust-hash32-0.1)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-stable-deref-trait" ,rust-stable-deref-trait-1)
+        ("rust-ufmt-write" ,rust-ufmt-write-0.1))))))
+
 (define-public rust-heapless-0.5
   (package
     (inherit rust-heapless-0.6)
@@ -20960,7 +25772,7 @@ that don't require dynamic memory allocation.")
      (origin
        (method url-fetch)
        (uri (crate-uri "heapsize" version))
-       (file-name (string-append name "-" version ".crate"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
          "0q94q9ppqjgrw71swiyia4hgby2cz6dldp7ij57nkvhd6zmfcy8n"))))
@@ -20985,7 +25797,7 @@ heap.")
       (origin
         (method url-fetch)
         (uri (crate-uri "heapsize" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0dmwc37vgsdjzk10443dj4f23439i9gch28jcwzmry3chrwx8v2m"))))
@@ -21002,7 +25814,7 @@ heap.")
       (origin
         (method url-fetch)
         (uri (crate-uri "heapsize_plugin" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1i72isf699q9jl167g2kg4xd6h3cd05rc79zaph58aqjy0g0m9y9"))))
@@ -21017,21 +25829,21 @@ heap.")
 total runtime size of an object on the heap")
     (license license:mpl2.0)))
 
-(define-public rust-heck-0.3
+(define-public rust-heck-0.4
   (package
     (name "rust-heck")
-    (version "0.3.1")
+    (version "0.4.0")
     (source
-      (origin
-        (method url-fetch)
-        (uri (crate-uri "heck" version))
-        (file-name (string-append name "-" version ".crate"))
-        (sha256
-         (base32
-          "01a2v7yvkiqxakdqz4hw3w3g4sm52ivz9cs3qcsv2arxsmw4wmi0"))))
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "heck" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1ygphsnfwl2xpa211vbqkz1db6ri1kvkg8p8sqybi37wclg7fh15"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:skip-build? #t
+     `(#:skip-build?
+       #t
        #:cargo-inputs
        (("rust-unicode-segmentation" ,rust-unicode-segmentation-1))))
     (home-page "https://github.com/withoutboats/heck")
@@ -21043,6 +25855,24 @@ consistent, and reasonably well performing.")
     (license (list license:asl2.0
                    license:expat))))
 
+(define-public rust-heck-0.3
+  (package
+    (inherit rust-heck-0.4)
+    (name "rust-heck")
+    (version "0.3.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "heck" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "1b56s2c1ymdd0qmy31bw0ndhm31hcdamnhg3npp7ssrmc1ag9jw7"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-unicode-segmentation" ,rust-unicode-segmentation-1))))))
+
 (define-public rust-hermit-abi-0.1
   (package
     (name "rust-hermit-abi")
@@ -21073,16 +25903,18 @@ It is used to build the target x86_64-unknown-hermit.")
 (define-public rust-hex-0.4
   (package
     (name "rust-hex")
-    (version "0.4.2")
+    (version "0.4.3")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "hex" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0dbf00j3h3pz0lw8jp245rwypna6i23l4cpvym8gsczin9c92kv4"))))
+        (base32 "0w1a4davm1lgzpamwnba907aysmlrnygbqmfis2mqjx5m552a93z"))))
     (build-system cargo-build-system)
-    (arguments '(#:skip-build? #t))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs (("rust-serde" ,rust-serde-1))))
     (home-page "https://github.com/KokaKiwi/rust-hex")
     (synopsis "Encode and decode data to/from hexadecimals")
     (description "This crate allows for encoding and decoding data into/from
@@ -21099,7 +25931,7 @@ hexadecimal representation.")
       (origin
         (method url-fetch)
         (uri (crate-uri "hex" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0xsdcjiik5j750j67zk42qdnmm4ahirk3gmkmcqgq7qls2jjcl40"))))))
@@ -21113,7 +25945,7 @@ hexadecimal representation.")
      (origin
        (method url-fetch)
        (uri (crate-uri "hex" version))
-       (file-name (string-append name "-" version ".crate"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "1ajkw40qzn2ygnqjj9w584f6l31wi318258n84pn2hax8la2i8nn"))))))
 
@@ -21218,25 +26050,25 @@ compile time.")
      `(#:cargo-inputs
        (("rust-proc-macro-hack" ,rust-proc-macro-hack-0.4))))))
 
-(define-public rust-hkdf-0.9
+(define-public rust-hkdf-0.11
   (package
     (name "rust-hkdf")
-    (version "0.9.0")
+    (version "0.11.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "hkdf" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32
-         "1jdvmf8aadk3s0kn9kk3dj00nprjk9glks5f8dm55r43af34j4gy"))))
+        (base32 "0sw8bz79xqq3bc5dh6nzv084g7va13j3lrqf91c10a2wimbnsw01"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-digest" ,rust-digest-0.9)
-        ("rust-hmac" ,rust-hmac-0.8))
+        ("rust-hmac" ,rust-hmac-0.11))
        #:cargo-development-inputs
        (("rust-bencher" ,rust-bencher-0.1)
+        ("rust-blobby" ,rust-blobby-0.3)
         ("rust-crypto-tests" ,rust-crypto-tests-0.5)
         ("rust-hex" ,rust-hex-0.4)
         ("rust-sha-1" ,rust-sha-1-0.9)
@@ -21247,6 +26079,54 @@ compile time.")
 Derivation Function (HKDF).")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-hkdf-0.10
+  (package
+    (inherit rust-hkdf-0.11)
+    (name "rust-hkdf")
+    (version "0.10.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "hkdf" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0kwn3scjvv2x8zc6nz3wrnzxp9shpsdxnjqiyv2r65r3kiijzasi"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-digest" ,rust-digest-0.9)
+        ("rust-hmac" ,rust-hmac-0.10))
+       #:cargo-development-inputs
+       (("rust-bencher" ,rust-bencher-0.1)
+        ("rust-crypto-tests" ,rust-crypto-tests-0.5)
+        ("rust-hex" ,rust-hex-0.4)
+        ("rust-sha-1" ,rust-sha-1-0.9)
+        ("rust-sha2" ,rust-sha2-0.9))))))
+
+(define-public rust-hkdf-0.9
+  (package
+    (inherit rust-hkdf-0.11)
+    (name "rust-hkdf")
+    (version "0.9.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "hkdf" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1jdvmf8aadk3s0kn9kk3dj00nprjk9glks5f8dm55r43af34j4gy"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-digest" ,rust-digest-0.9)
+        ("rust-hmac" ,rust-hmac-0.8))
+       #:cargo-development-inputs
+       (("rust-bencher" ,rust-bencher-0.1)
+        ("rust-crypto-tests" ,rust-crypto-tests-0.5)
+        ("rust-hex" ,rust-hex-0.4)
+        ("rust-sha-1" ,rust-sha-1-0.9)
+        ("rust-sha2" ,rust-sha2-0.9))))))
+
 (define-public rust-hkdf-0.8
   (package
     (inherit rust-hkdf-0.9)
@@ -21265,8 +26145,33 @@ Derivation Function (HKDF).")
        (("rust-digest" ,rust-digest-0.8)
         ("rust-hmac" ,rust-hmac-0.7))))))
 
+(define-public rust-hmac-0.12
+  (package
+    (name "rust-hmac")
+    (version "0.12.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "hmac" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "18nnjkvvpkjw6ppcyijysgxmr4a7knd98msb6vgy4b3z7qgi7jnx"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs (("rust-digest" ,rust-digest-0.10))))
+    (home-page "https://github.com/RustCrypto/MACs")
+    (synopsis "Generic implementation of Hash-based Message Authentication Code")
+    (description
+     "This package provides a generic implementation of @acronym{HMAC,
+Hash-based Message Authentication Code}.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-hmac-0.11
   (package
+    (inherit rust-hmac-0.12)
     (name "rust-hmac")
     (version "0.11.0")
     (source
@@ -21278,7 +26183,6 @@ Derivation Function (HKDF).")
         (sha256
          (base32
           "16z61aibdg4di40sqi4ks2s4rz6r29w4sx4gvblfph3yxch26aia"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-crypto-mac" ,rust-crypto-mac-0.11)
@@ -21287,13 +26191,7 @@ Derivation Function (HKDF).")
        (("rust-crypto-mac" ,rust-crypto-mac-0.11)
         ("rust-md-5" ,rust-md-5-0.9)
         ("rust-sha2" ,rust-sha2-0.9)
-        ("rust-streebog" ,rust-streebog-0.9))))
-    (home-page "https://github.com/RustCrypto/MACs")
-    (synopsis "Generic implementation of Hash-based Message Authentication Code")
-    (description
-     "This package provides a generic implementation of @acronym{HMAC,
-Hash-based Message Authentication Code}.")
-    (license (list license:expat license:asl2.0))))
+        ("rust-streebog" ,rust-streebog-0.9))))))
 
 (define-public rust-hmac-0.10
   (package
@@ -21461,7 +26359,7 @@ Hash-based Message Authentication Code algorithm} for SHA1.")
       (origin
         (method url-fetch)
         (uri (crate-uri "hostname" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0kprf862qaa7lwdms6aw7f3275h0j2rwhs9nz5784pm8hdmb9ki1"))))
@@ -21631,14 +26529,14 @@ requests and responses.")
 (define-public rust-http-body-0.4
   (package
     (name "rust-http-body")
-    (version "0.4.0")
+    (version "0.4.4")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "http-body" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "150rkibhyrcmsyi0qzwx4hp02c4lga1kkdg8j7l5wkh7xqkvsq98"))))
+        (base32 "1imjszmk34603m7chfnhd3rq263bxbdlaxhlbzd06wv7354zix0z"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -21786,7 +26684,7 @@ HTTP request or response body.")
         ("rust-serde-urlencoded" ,rust-serde-urlencoded-0.7)
         ("rust-url" ,rust-url-2))))
     (home-page "https://github.com/http-rs/http-types")
-    (synopsis "Common types for HTTP operations.")
+    (synopsis "Common types for HTTP operations")
     (description
      "This package provides common types for HTTP operations.")
     (license (list license:expat license:asl2.0))))
@@ -21794,7 +26692,7 @@ HTTP request or response body.")
 (define-public rust-httparse-1
   (package
     (name "rust-httparse")
-    (version "1.3.4")
+    (version "1.5.1")
     (source
      (origin
        (method url-fetch)
@@ -21802,8 +26700,7 @@ HTTP request or response body.")
        (file-name
         (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32
-         "1yf23ldnjwfkkhkca7f4w15mky9961gjz28dlwyybhphc7l9l5yd"))))
+        (base32 "00smbrgb9vyzbbj3j5d66iarjl5x2wpfwkmhcy5nizylw7dlzndc"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-development-inputs
@@ -21814,17 +26711,17 @@ HTTP request or response body.")
      "This package provides a tiny, safe, speedy, zero-copy HTTP/1.x parser.")
     (license (list license:asl2.0 license:expat))))
 
-(define-public rust-httpdate-0.3
+(define-public rust-httpdate-1
   (package
     (name "rust-httpdate")
-    (version "0.3.2")
+    (version "1.0.2")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "httpdate" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0izbd3sf0625wm4rrfv85xa4xa8j4n1ldxhwlkgff4cm6rh4sjs9"))))
+        (base32 "08bln7b1ibdw26gl8h4dr6rlybvlkyhlha309xbh9ghxh9nf78f4"))))
     (build-system cargo-build-system)
     (arguments `(#:skip-build? #t))
     (home-page "https://github.com/pyfisch/httpdate")
@@ -21833,6 +26730,20 @@ HTTP request or response body.")
      "This crates parses and formats HTTP datetime strings.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-httpdate-0.3
+  (package
+    (inherit rust-httpdate-1)
+    (name "rust-httpdate")
+    (version "0.3.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "httpdate" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0izbd3sf0625wm4rrfv85xa4xa8j4n1ldxhwlkgff4cm6rh4sjs9"))))
+    (arguments `(#:skip-build? #t))))
+
 (define-public rust-humansize-1
   (package
     (name "rust-humansize")
@@ -21855,7 +26766,7 @@ represent file sizes in a human-readable format.")
 (define-public rust-humantime-2
   (package
     (name "rust-humantime")
-    (version "2.0.1")
+    (version "2.1.0")
     (source
      (origin
        (method url-fetch)
@@ -21864,7 +26775,7 @@ represent file sizes in a human-readable format.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "0yivhqyi8xik2j6sd3q45ybakjx8jsx5632dx9xjn0birh4dj6iw"))))
+         "1r55pfkkf5v0ji1x6izrjwdq9v6sc7bv99xj6srywcar37xmnfls"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-development-inputs
@@ -21905,14 +26816,14 @@ SystemTime}}.")
 (define-public rust-hyper-0.14
   (package
     (name "rust-hyper")
-    (version "0.14.4")
+    (version "0.14.15")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "hyper" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1ivaqbcvsws6svwykiq7fgma7wds72r83qianzh5b41ln714dsg8"))))
+        (base32 "0g4mnsacfvj4127587ihm802kzkh6zgs0c3a2mayc82g3q4w0vj3"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -21925,17 +26836,17 @@ SystemTime}}.")
         ("rust-http" ,rust-http-0.2)
         ("rust-http-body" ,rust-http-body-0.4)
         ("rust-httparse" ,rust-httparse-1)
-        ("rust-httpdate" ,rust-httpdate-0.3)
+        ("rust-httpdate" ,rust-httpdate-1)
         ("rust-itoa" ,rust-itoa-0.4)
         ("rust-libc" ,rust-libc-0.2)
-        ("rust-pin-project" ,rust-pin-project-1)
-        ("rust-socket2" ,rust-socket2-0.3)
+        ("rust-pin-project" ,rust-pin-project-lite-0.2)
+        ("rust-socket2" ,rust-socket2-0.4)
         ("rust-tokio" ,rust-tokio-1)
         ("rust-tower-service" ,rust-tower-service-0.3)
         ("rust-tracing" ,rust-tracing-0.1)
         ("rust-want" ,rust-want-0.3))))
     (home-page "https://hyper.rs")
-    (synopsis "Fast and correct HTTP library.")
+    (synopsis "Fast and correct HTTP library")
     (description "This package provides a fast and correct HTTP library.")
     (license license:expat)))
 
@@ -22266,6 +27177,32 @@ SystemTime}}.")
      "This package provides glue code for Rustls and synchronous Hyper.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-hyper-timeout-0.4
+  (package
+    (name "rust-hyper-timeout")
+    (version "0.4.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "hyper-timeout" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1c8k3g8k2yh1gxvsx9p7amkimgxhl9kafwpj7jyf8ywc5r45ifdv"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-hyper" ,rust-hyper-0.14)
+        ("rust-pin-project-lite" ,rust-pin-project-lite-0.2)
+        ("rust-tokio" ,rust-tokio-1)
+        ("rust-tokio-io-timeout" ,rust-tokio-io-timeout-1))))
+    (home-page "https://github.com/hjr3/hyper-timeout")
+    (synopsis "Connect, read and write timeout aware connector for Hyper")
+    (description
+     "This package provides a connect, read and write timeout aware connector
+to be used with Hyper client.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-hyper-tls-0.5
   (package
     (name "rust-hyper-tls")
@@ -22306,9 +27243,9 @@ with hyper.")
         (base32
          "1vcfyz7dxavf4brns15afmj5fxz88lbn05rrpbfqsnybdp2sqyfr"))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (arguments
      `(#:cargo-inputs
        (("rust-bytes" ,rust-bytes-0.5)
@@ -22432,26 +27369,21 @@ with hyper.")
 (define-public rust-idna-0.2
   (package
     (name "rust-idna")
-    (version "0.2.0")
+    (version "0.2.3")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "idna" version))
-       (file-name
-        (string-append name "-" version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32
-         "1a9066imqpdrm1aavfasdyb1zahqaz8jmdcwdawvb1pf60y6gqh2"))))
+        (base32 "1y7ca2w5qp9msgl57n03zqp78gq1bk2crqzg6kv7a542mdphm2j1"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-matches" ,rust-matches-0.1)
         ("rust-unicode-bidi" ,rust-unicode-bidi-0.3)
-        ("rust-unicode-normalization" ,rust-unicode-normalization-0.1))
-       #:cargo-development-inputs
-       (("rust-rustc-test" ,rust-rustc-test-0.3)
-        ("rust-serde-json" ,rust-serde-json-1))))
+        ("rust-unicode-normalization" ,rust-unicode-normalization-0.1))))
     (home-page "https://github.com/servo/rust-url/")
     (synopsis "Internationalizing Domain Names in Applications and Punycode")
     (description
@@ -22610,6 +27542,26 @@ crate.")
 crate.")
     (license license:asl2.0)))
 
+(define-public rust-indenter-0.3
+  (package
+    (name "rust-indenter")
+    (version "0.3.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "indenter" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "10y6i6y4ls7xsfsc1r3p5j2hhbxhaqnk5zzk8aj52b14v05ba8yf"))))
+    (build-system cargo-build-system)
+    (arguments '(#:skip-build? #t))
+    (home-page "https://github.com/yaahc/indenter")
+    (synopsis "Display trait indentation helper for errors")
+    (description
+     "This package provides a few wrappers for the @code{fmt::Write} object
+that efficiently appends and removes common indentation after every newline.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-indexmap-1
   (package
     (name "rust-indexmap")
@@ -22637,7 +27589,7 @@ crate.")
         ("rust-rand" ,rust-rand-0.7)
         ("rust-serde-derive" ,rust-serde-derive-1))))
     (home-page "https://github.com/bluss/indexmap")
-    (synopsis "Hash table with consistent order and fast iteration.")
+    (synopsis "Hash table with consistent order and fast iteration")
     (description
      "This package provides a hash table with consistent order and fast iteration.
 
@@ -22706,6 +27658,49 @@ The @code{indoc!()} macro takes a multiline string literal and un-indents it
 at compile time so the leftmost non-space character is in the first column.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-indoc-0.3
+  (package
+    (inherit rust-indoc-1)
+    (version "0.3.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "indoc" version))
+       (file-name (string-append "rust-indoc-" version ".tar.gz"))
+       (sha256
+        (base32 "1n2fd2wm1h005hd7pjgx4gv5ymyq4sxqn8z0ssw6xchgqs5ilx27"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-indoc-impl" ,rust-indoc-impl-0.3)
+        ("rust-proc-macro-hack" ,rust-proc-macro-hack-0.5))))))
+
+(define-public rust-indoc-impl-0.3
+  (package
+    (inherit rust-indoc-0.3)
+    (name "rust-indoc-impl")
+    (version "0.3.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "indoc-impl" version))
+       (file-name (string-append "rust-indoc-impl-" version ".tar.gz"))
+       (sha256
+        (base32 "1w58yg249kmzsn75kcj34qaxqh839l1hsaj3bzggy3q03wb6s16f"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-proc-macro-hack" ,rust-proc-macro-hack-0.5)
+        ("rust-proc-macro2" ,rust-proc-macro2-1)
+        ("rust-quote" ,rust-quote-1)
+        ("rust-syn" ,rust-syn-1)
+        ("rust-unindent" ,rust-unindent-0.1))))
+    (synopsis "Macros for @code{rust-indoc}")
+    (description
+     "This package provides macros for use with the @code{rust-indoc}
+package.  It is obsolete for indoc versions > 1.")))
+
 (define-public rust-infer-0.2
   (package
     (name "rust-infer")
@@ -23082,24 +28077,24 @@ data efficiently.")
 that works on WASM too.")
     (license license:bsd-3)))
 
-(define-public rust-integer-encoding-1
+(define-public rust-integer-encoding-3
   (package
     (name "rust-integer-encoding")
-    (version "1.2.2")
+    (version "3.0.2")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "integer-encoding" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1c032xhif5d6a8nc4cak60g5ylwd6p9569122m5hm67brx2l5yhb"))))
+        (base32 "1f0mk7d694g2sz4my5zh7i5w4kijx5y16x6dip7fv0pazx013hch"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-async-trait" ,rust-async-trait-0.1)
         ("rust-futures-util" ,rust-futures-util-0.3)
-        ("rust-tokio" ,rust-tokio-0.2))))
+        ("rust-tokio" ,rust-tokio-1))))
     (home-page "https://github.com/dermesser/integer-encoding-rs")
     (synopsis "Encoding and decoding integers to and from bytestrings")
     (description
@@ -23107,6 +28102,25 @@ that works on WASM too.")
 bytestring representations.")
     (license license:expat)))
 
+(define-public rust-integer-encoding-1
+  (package
+    (inherit rust-integer-encoding-3)
+    (name "rust-integer-encoding")
+    (version "1.2.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "integer-encoding" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1c032xhif5d6a8nc4cak60g5ylwd6p9569122m5hm67brx2l5yhb"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-async-trait" ,rust-async-trait-0.1)
+        ("rust-futures-util" ,rust-futures-util-0.3)
+        ("rust-tokio" ,rust-tokio-0.2))))))
+
 (define-public rust-interpolate-name-0.2
   (package
     (name "rust-interpolate-name")
@@ -23179,6 +28193,60 @@ bytestring representations.")
 immutable interval tree.")
     (license license:expat)))
 
+(define-public rust-inventory-0.1
+  (package
+    (name "rust-inventory")
+    (version "0.1.11")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "inventory" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32 "1m1zdjgs3nzfdxf86mc1i0id56fvk8rfw63rf04yi88bqrh53szh"))))
+    (build-system cargo-build-system)
+    (arguments
+      `(#:skip-build? #t
+        #:cargo-inputs
+        (("rust-ctor" ,rust-ctor-0.1)
+         ("rust-ghost" ,rust-ghost-0.1)
+         ("rust-inventory-impl" ,rust-inventory-impl-0.1))))
+    (home-page "https://github.com/dtolnay/inventory")
+    (synopsis "Typed distributed plugin registration")
+    (description
+     "This package provides a way to set up a plugin registry into which
+plugins can be registered from any source file linked into your program.
+There does not need to be a central list of all the plugins.")
+    ;; Either license can be chosen at the users option.
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-inventory-impl-0.1
+  (package
+    (name "rust-inventory-impl")
+    (version "0.1.11")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "inventory-impl" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0j45a7nq4vircnz5m23db34527icxqnvh2si96zc9w662lvvahby"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-proc-macro2" ,rust-proc-macro2-1)
+        ("rust-quote" ,rust-quote-1)
+        ("rust-syn" ,rust-syn-1))))
+    (home-page "https://github.com/dtolnay/inventory")
+    (synopsis "Macros for the @code{inventory} crate")
+    (description
+     "This package provides macros for the @code{rust-inventory} package.
+It has been merged with the @code{inventory} crate and is only useful for
+versions < 0.2.")
+    ;; Either license can be chosen at the users option.
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-iovec-0.1
   (package
     (name "rust-iovec")
@@ -23187,7 +28255,7 @@ immutable interval tree.")
       (origin
         (method url-fetch)
         (uri (crate-uri "iovec" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0ph73qygwx8i0mblrf110cj59l00gkmsgrpzz1rm85syz5pymcxj"))))
@@ -23299,11 +28367,9 @@ enum like Option/Result.")
         ("rust-test-case" ,rust-test-case-1)
         ("rust-tracing-subscriber" ,rust-tracing-subscriber-0.2))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("curl" ,curl)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list curl openssl zlib))
     (home-page "https://github.com/sagebind/isahc")
     (synopsis "Practical HTTP client")
     (description
@@ -23436,6 +28502,24 @@ bottlenecks encountered in highly concurrent code by avoiding shared writes
 and locking in the core framework.")
     (license license:expat)))
 
+(define-public rust-is-debug-1
+  (package
+    (name "rust-is-debug")
+    (version "1.0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "is_debug" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "12bwspph88wgmzcyl8dg3s28gph41r9shfq8yzaj564xj7lril86"))))
+    (build-system cargo-build-system)
+    (arguments `(#:skip-build? #t))
+    (home-page "https://github.com/baoyachi/rust_is_debug")
+    (synopsis "get build model is debug")
+    (description "get build model is debug")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-is-executable-1
   (package
     (name "rust-is-executable")
@@ -23579,6 +28663,27 @@ functions, and macros.")
        (("rust-permutohedron" ,rust-permutohedron-0.2)
         ("rust-quickcheck" ,rust-quickcheck-0.5))))))
 
+(define-public rust-itertools-0.6
+  (package
+    (inherit rust-itertools-0.10)
+    (name "rust-itertools")
+    (version "0.6.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "itertools" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "08fx60wxmjakssqn3w9045dasqvaf1gmgzg5kag062k9l56vxwnk"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-either" ,rust-either-1))
+       #:cargo-development-inputs
+       (("rust-permutohedron" ,rust-permutohedron-0.2)
+        ("rust-quickcheck" ,rust-quickcheck-0.4))))))
+
 (define-public rust-itertools-0.5
   (package
     (inherit rust-itertools-0.7)
@@ -23630,18 +28735,35 @@ functions, and macros.")
 and functions.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-itoa-1
+  (package
+    (name "rust-itoa")
+    (version "1.0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "itoa" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0d8wr2qf5b25a04xf10rz9r0pdbjdgb0zaw3xvf8k2sqcz1qzaqs"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/dtolnay/itoa")
+    (synopsis "Fast functions for printing integer primitives")
+    (description "This crate provides fast functions for printing integer
+primitives to an @code{io::Write}.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-itoa-0.4
   (package
     (name "rust-itoa")
-    (version "0.4.5")
+    (version "0.4.8")
     (source
-      (origin
-        (method url-fetch)
-        (uri (crate-uri "itoa" version))
-        (file-name (string-append name "-" version ".crate"))
-        (sha256
-         (base32
-          "13nxqrfnh83a7x5rw4wq2ilp8nxvwy74dxzysdg59dbxqk0agdxq"))))
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "itoa" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1m1dairwyx8kfxi7ab3b5jc71z1vigh9w4shnhiajji9avzr26dp"))))
     (build-system cargo-build-system)
     (home-page "https://github.com/dtolnay/itoa")
     (synopsis "Fast functions for printing integer primitives")
@@ -23674,7 +28796,7 @@ primitives to an @code{io::Write}.")
      (origin
        (method url-fetch)
        (uri (crate-uri "itoa" version))
-       (file-name (string-append name "-" version ".crate"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
          "18g7p2hrb3dk84z3frfgmszfc9hjb4ps9vp99qlb1kmf9gm8hc5f"))))))
@@ -23702,6 +28824,27 @@ primitives to an @code{io::Write}.")
     (description "This package provides a simple ivf muxer.")
     (license license:bsd-2)))
 
+(define-public rust-javascriptcore-rs-sys-0.2
+  (package
+    (name "rust-javascriptcore-rs-sys")
+    (version "0.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "javascriptcore-rs-sys" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1619vl48yw3wrjw4c3dfm3s5s9sizgxp5s7s1ahpbkcdl2lasiiz"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-libc" ,rust-libc-0.2))))
+    (home-page "https://github.com/tauri-apps/javascriptcore-rs")
+    (synopsis "JavaScriptCore bindings and wrappers for Rust")
+    (description
+     "Sys functions for the Rust bindings of the javacriptcore library.")
+    (license license:expat)))
+
 (define-public rust-jemalloc-sys-0.3
   (package
     (name "rust-jemalloc-sys")
@@ -23733,7 +28876,7 @@ primitives to an @code{io::Write}.")
                        (string-append jemalloc "/lib/libjemalloc_pic.a")))
              #t)))))
     (native-inputs
-     `(("jemalloc" ,jemalloc)))
+     (list jemalloc))
     (home-page "https://github.com/gnzlbg/jemallocator")
     (synopsis "Rust FFI bindings to jemalloc")
     (description "This package provides Rust FFI bindings to jemalloc.")
@@ -23813,29 +28956,47 @@ primitives to an @code{io::Write}.")
                        (string-append jemalloc "/lib/libjemalloc_pic.a")))
              #t)))))
     (native-inputs
-     `(("jemalloc" ,jemalloc)))))
+     (list jemalloc))))
 
-(define-public rust-jetscii-0.3
+(define-public rust-jetscii-0.5
   (package
     (name "rust-jetscii")
-    (version "0.3.1")
+    (version "0.5.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "jetscii" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1sq6d6c9vi44gkr566w2f1d4n6mmrjx8gjdwgnhkgcsg051j391j"))))
+        (base32 "1x4z5ixlxv1wa70d3d6ad3n8qxz6z00i13zwnv219v45qcwybbnb"))))
     (build-system cargo-build-system)
-    (arguments `(#:skip-build? #t))
+    (arguments
+     `(#:cargo-development-inputs
+       (("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-memmap" ,rust-memmap-0.7)
+        ("rust-proptest" ,rust-proptest-1)
+        ("rust-region" ,rust-region-2))))
     (home-page "https://github.com/shepmaster/jetscii")
     (synopsis
      "Search strings and byte slices for sets of ASCII characters or bytes")
-    (description
-     "This package provides a tiny library to efficiently search strings and
-byte slices for sets of ASCII characters or bytes.")
+    (description "This package provides a tiny library to efficiently search
+strings and byte slices for sets of ASCII characters or bytes.")
     (license license:expat)))
 
+(define-public rust-jetscii-0.3
+  (package
+    (inherit rust-jetscii-0.5)
+    (name "rust-jetscii")
+    (version "0.3.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "jetscii" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1sq6d6c9vi44gkr566w2f1d4n6mmrjx8gjdwgnhkgcsg051j391j"))))
+    (arguments `(#:skip-build? #t))))
+
 (define-public rust-jni-0.18
   (package
     (name "rust-jni")
@@ -24040,7 +29201,7 @@ JSON-RPC 2.0 specification.")
 (define-public rust-js-sys-0.3
   (package
     (name "rust-js-sys")
-    (version "0.3.46")
+    (version "0.3.55")
     (source
      (origin
        (method url-fetch)
@@ -24048,8 +29209,7 @@ JSON-RPC 2.0 specification.")
        (file-name
         (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32
-         "0xc1llkp23q8ac2wdwh46y6gjbc34prrd98g5my9qz4zja1p6gfg"))))
+        (base32 "116cg9vn62cl3vifbs6cjdsg7hz98kr7sr8kpy31liccsg6gzjbw"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -24074,7 +29234,7 @@ wasm-bindgen crate.")
       (origin
         (method url-fetch)
         (uri (crate-uri "json" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1rg9jxf6bpbwis3ixd5ak8rp37him7n4z8awz4ssrxl6hyplbhlj"))))
@@ -24210,7 +29370,7 @@ debugging.")
       (origin
         (method url-fetch)
         (uri (crate-uri "kernel32-sys" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1389av0601a9yz8dvx5zha9vmkd6ik7ax0idpb032d28555n41vm"))))
@@ -24246,6 +29406,51 @@ kernel32.")
      "The Khronos XML API Registry, exposed as byte string constants.")
     (license license:asl2.0)))
 
+(define-public rust-kqueue-sys-1
+  (package
+    (name "rust-kqueue-sys")
+    (version "1.0.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "kqueue-sys" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "11z5labbms9vn9m6csi5383dmrlmdgsxq13ls9fwa6zhi5a5hrw3"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build?
+       #t
+       #:cargo-inputs
+       (("rust-bitflags" ,rust-bitflags-1) ("rust-libc" ,rust-libc-0.2))))
+    (home-page "https://gitlab.com/worr/rust-kqueue-sys")
+    (synopsis "Low-level kqueue interface for BSDs")
+    (description "This package provides a low-level kqueue interface for BSDs.")
+    (license license:expat)))
+
+(define-public rust-kqueue-1
+  (package
+    (name "rust-kqueue")
+    (version "1.0.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "kqueue" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1ad4vifr0kmla8a5pgig7plx5kmc9w7k1h9mgm6fk2sgg1x112h5"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-kqueue-sys" ,rust-kqueue-sys-1) ("rust-libc" ,rust-libc-0.2))
+       #:cargo-development-inputs
+       (("rust-tempfile" ,rust-tempfile-3))))
+    (home-page "https://gitlab.com/worr/rust-kqueue")
+    (synopsis "kqueue interface for BSDs")
+    (description "This package provides a kqueue interface for BSDs.")
+    (license license:expat)))
+
 (define-public rust-kv-log-macro-1
   (package
     (name "rust-kv-log-macro")
@@ -24277,7 +29482,7 @@ kernel32.")
       (origin
         (method url-fetch)
         (uri (crate-uri "language-tags" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "16hrjdpa827carq5x4b8zhas24d8kg4s16m6nmmn1kb7cr5qh7d9"))))
@@ -24297,10 +29502,10 @@ currently supports parsing (fully conformant parser), formatting and comparing
 language tags.")
     (license license:expat)))
 
-(define-public rust-lab-0.8
+(define-public rust-lab-0.11
   (package
     (name "rust-lab")
-    (version "0.8.1")
+    (version "0.11.0")
     (source
       (origin
         (method url-fetch)
@@ -24309,15 +29514,15 @@ language tags.")
          (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
-          "1ysnbviwi35mq6xyz9c59mpgigyfp4s4y2mispxzrms4vk83bx15"))))
+          "13ymsn5cwl5i9pmp5mfmbap7q688dcp9a17q82crkvb784yifdmz"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-development-inputs
-       (("rust-approx" ,rust-approx-0.3)
+       (("rust-approx" ,rust-approx-0.5)
         ("rust-criterion" ,rust-criterion-0.3)
         ("rust-lazy-static" ,rust-lazy-static-1)
-        ("rust-pretty-assertions" ,rust-pretty-assertions-0.6)
-        ("rust-rand" ,rust-rand-0.5))))
+        ("rust-pretty-assertions" ,rust-pretty-assertions-0.7)
+        ("rust-rand" ,rust-rand-0.8))))
     (home-page "https://github.com/TooManyBees/lab")
     (synopsis "Convert RGB to CIE-LAB for Rust")
     (description
@@ -24327,7 +29532,7 @@ space, and comparing differences in color.")
 
 (define-public rust-lab-0.7
   (package
-    (inherit rust-lab-0.8)
+    (inherit rust-lab-0.11)
     (name "rust-lab")
     (version "0.7.2")
     (source
@@ -24349,18 +29554,18 @@ space, and comparing differences in color.")
 
 (define-public rust-lab-0.4
   (package
-    (inherit rust-lab-0.8)
+    (inherit rust-lab-0.7)
     (name "rust-lab")
     (version "0.4.4")
     (source
-      (origin
-        (method url-fetch)
-        (uri (crate-uri "lab" version))
-        (file-name
-         (string-append name "-" version ".tar.gz"))
-        (sha256
-         (base32
-          "0h4ig5bvzmwlzd74zj7b4sh7kzi3c6mjjnw7yjz8ijxvr4mrcr1s"))))
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "lab" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0h4ig5bvzmwlzd74zj7b4sh7kzi3c6mjjnw7yjz8ijxvr4mrcr1s"))))
     (arguments
      `(#:cargo-development-inputs
        (("rust-rand" ,rust-rand-0.3))))))
@@ -24503,7 +29708,7 @@ generated by LALRPOP.")
       (origin
         (method url-fetch)
         (uri (crate-uri "lazy_static" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0in6ikhw8mgl33wjv6q6xfrb5b9jr16q8ygjy803fay4zcisvaz2"))))
@@ -24513,7 +29718,7 @@ generated by LALRPOP.")
        #:cargo-development-inputs
        (("rust-doc-comment" ,rust-doc-comment-0.3))))
     (inputs
-     `(("rust-spin" ,rust-spin-0.5)))
+     (list rust-spin-0.5))
     (home-page  "https://github.com/rust-lang-nursery/lazy-static.rs")
     (synopsis "Macro for declaring lazily evaluated statics in Rust")
     (description
@@ -24583,6 +29788,22 @@ requires non-const function calls to be computed.")
      "This package provides a library providing a lazily filled Cell struct.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-lazycell-0.5
+  (package
+    (inherit rust-lazycell-1)
+    (name "rust-lazycell")
+    (version "0.5.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "lazycell" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "16w5c75sb7xjica1ys6w8ndxvy001y52fjz722m07yqid1x5nn1v"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-clippy" ,rust-clippy-0.0))))))
+
 (define-public rust-lettre-0.9
   (package
     (name "rust-lettre")
@@ -24615,8 +29836,36 @@ requires non-const function calls to be computed.")
 sending emails from Rust applications.")
     (license license:expat)))
 
+(define-public rust-lexical-core-0.8
+  (package
+    (name "rust-lexical-core")
+    (version "0.8.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "lexical-core" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1152ll9xa7v4jz2mjvz0048gy32yg39mzgjaps89h0any7c2cfba"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-lexical-parse-float" ,rust-lexical-parse-float-0.8)
+        ("rust-lexical-parse-integer" ,rust-lexical-parse-integer-0.8)
+        ("rust-lexical-util" ,rust-lexical-util-0.8)
+        ("rust-lexical-write-float" ,rust-lexical-write-float-0.8)
+        ("rust-lexical-write-integer" ,rust-lexical-write-integer-0.8))))
+    (home-page
+     "https://github.com/Alexhuszagh/rust-lexical/tree/master/lexical-core")
+    (synopsis "Lexical, to- and from-string conversion routines")
+    (description
+     "This crate provides lexical, to- and from-string conversion routines.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-lexical-core-0.7
   (package
+    (inherit rust-lexical-core-0.8)
     (name "rust-lexical-core")
     (version "0.7.6")
     (source
@@ -24627,7 +29876,6 @@ sending emails from Rust applications.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "1zjzab1fnaw4kj6ixyrskp4dyz761gdcab07m4bkvlk1l4mcc1v6"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-arrayvec" ,rust-arrayvec-0.5)
@@ -24640,14 +29888,7 @@ sending emails from Rust applications.")
        #:cargo-development-inputs
        (("rust-approx" ,rust-approx-0.4)
         ("rust-proptest" ,rust-proptest-0.10)
-        ("rust-quickcheck" ,rust-quickcheck-1))))
-    (home-page
-     "https://github.com/Alexhuszagh/rust-lexical/tree/master/lexical-core")
-    (synopsis
-     "Lexical, to- and from-string conversion routines")
-    (description
-     "Lexical, to- and from-string conversion routines.")
-    (license (list license:expat license:asl2.0))))
+        ("rust-quickcheck" ,rust-quickcheck-1))))))
 
 (define-public rust-lexical-core-0.4
   (package
@@ -24677,8 +29918,148 @@ sending emails from Rust applications.")
         ("rust-quickcheck" ,rust-quickcheck-0.8)
         ("rust-rustc-version" ,rust-rustc-version-0.2))))))
 
+(define-public rust-lexical-parse-float-0.8
+  (package
+    (name "rust-lexical-parse-float")
+    (version "0.8.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "lexical-parse-float" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "03mzjx8k2jzv2vbl1xb589p9zfs5i2m23vcmm6fjsxps0k86dl5l"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-lexical-parse-integer" ,rust-lexical-parse-integer-0.8)
+        ("rust-lexical-util" ,rust-lexical-util-0.8)
+        ("rust-static-assertions" ,rust-static-assertions-1))))
+    (home-page "https://github.com/Alexhuszagh/rust-lexical")
+    (synopsis "Efficient parsing of floats from strings")
+    (description
+     "This crate provides efficient parsing of floats from strings.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-lexical-parse-integer-0.8
+  (package
+    (name "rust-lexical-parse-integer")
+    (version "0.8.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "lexical-parse-integer" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1b2kxprq3636x3j1qy68202q7yzsmq5c7h9w7m7zrh4cvanjpjgj"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-lexical-util" ,rust-lexical-util-0.8)
+        ("rust-static-assertions" ,rust-static-assertions-1))))
+    (home-page "https://github.com/Alexhuszagh/rust-lexical")
+    (synopsis "Efficient parsing of integers from strings")
+    (description
+     "This crate provides efficient parsing of integers from strings.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-lexical-util-0.8
+  (package
+    (name "rust-lexical-util")
+    (version "0.8.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "lexical-util" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "14g224mm2li0q6jnnqh92dzx3zjyflji3i8dz4xf6vp1mb66kxkg"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-static-assertions" ,rust-static-assertions-1))))
+    (home-page "https://github.com/Alexhuszagh/rust-lexical")
+    (synopsis "Shared utilities for lexical crate")
+    (description "This package provides shared utilities for lexical crate.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-lexical-write-float-0.8
+  (package
+    (name "rust-lexical-write-float")
+    (version "0.8.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "lexical-write-float" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0xn5dpdmld2nvj7jvz3xrvjjbrnsh4jhymjimax7labvija8clcb"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-lexical-util" ,rust-lexical-util-0.8)
+        ("rust-lexical-write-integer" ,rust-lexical-write-integer-0.8)
+        ("rust-static-assertions" ,rust-static-assertions-1))))
+    (home-page "https://github.com/Alexhuszagh/rust-lexical")
+    (synopsis "Efficient formatting of floats to strings")
+    (description
+     "This crate provides efficient formatting of floats to strings.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-lexical-write-integer-0.8
+  (package
+    (name "rust-lexical-write-integer")
+    (version "0.8.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "lexical-write-integer" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1vsn3zg2hyqnyapwmzb2aw0w5f53ad6s6n46xyazsh0f5r4mdsgc"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-lexical-util" ,rust-lexical-util-0.8)
+        ("rust-static-assertions" ,rust-static-assertions-1))))
+    (home-page "https://github.com/Alexhuszagh/rust-lexical")
+    (synopsis "Efficient formatting of integers to strings")
+    (description
+     "This crate provides efficient formatting of integers to strings.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-lexical-6
+  (package
+    (name "rust-lexical")
+    (version "6.0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "lexical" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1y8v2s8g2hjinwf5hbm1ncbazw9q4qbp111q2mwacq6hi0grhkn3"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-lexical-core" ,rust-lexical-core-0.8))))
+    (home-page "https://github.com/Alexhuszagh/rust-lexical")
+    (synopsis "Lexical, to- and from-string conversion routines")
+    (description
+     "Lexical is high-performance numeric conversion routines for use in
+a no_std environment.  This does not depend on any standard library features,
+nor a system allocator.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-lexical-5
   (package
+    (inherit rust-lexical-6)
     (name "rust-lexical")
     (version "5.2.2")
     (source
@@ -24688,7 +30069,6 @@ sending emails from Rust applications.")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "1r8lsi523h53kbb99xgv31jabwhcp4rzqd4hfazfhcjffh5aj17l"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
@@ -24697,26 +30077,37 @@ sending emails from Rust applications.")
         ("rust-rand" ,rust-rand-0.4)
         ("rust-serde" ,rust-serde-1)
         ("rust-serde-derive" ,rust-serde-derive-1)
-        ("rust-toml" ,rust-toml-0.5))))
-    (home-page "https://github.com/Alexhuszagh/rust-lexical")
-    (synopsis "Lexical, to- and from-string conversion routines")
-    (description
-     "Lexical provides routines to convert numbers to and from decimal
-strings.")
-    (license (list license:expat license:asl2.0))))
+        ("rust-toml" ,rust-toml-0.5))))))
+
+(define-public rust-lexopt-0.2
+  (package
+    (name "rust-lexopt")
+    (version "0.2.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "lexopt" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32 "0w1adb1qwp9rkznq37qvwh01ckxpwcywb6ki9mlw03filyp16xfy"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/blyxxyz/lexopt")
+    (synopsis "Minimalist pedantic command line parser")
+    (description "This package provides a minimalist pedantic command line
+parser in Rust.")
+    (license license:expat)))
 
 (define-public rust-libc-0.2
   (package
     (name "rust-libc")
-    (version "0.2.101")
+    (version "0.2.112")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "libc" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32
-         "08dsmvn397ph8gnj552k12gmpp2rk6p60jyliqnfvr8vhwv07c1w"))))
+        (base32 "09bik7pcck869kfr5i9hjhnck0mzpd9v0ijxbqnh8fja6rzx20qv"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
@@ -24772,9 +30163,9 @@ macros on libc without stdlib.")
      `(#:cargo-inputs
        (("rust-pkg-config" ,rust-pkg-config-0.3))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("dbus" ,dbus)))
+     (list dbus))
     (home-page "https://github.com/diwic/dbus-rs")
     (synopsis "FFI bindings to libdbus")
     (description "This package provides FFI bindings to libdbus.")
@@ -24783,22 +30174,20 @@ macros on libc without stdlib.")
 (define-public rust-libflate-1
   (package
     (name "rust-libflate")
-    (version "1.0.2")
+    (version "1.1.1")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "libflate" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32
-         "0jarv5ildsm0ci4prd4gz7fqypifhp9xk34z9w49rchx7q1ckfp9"))))
+        (base32 "07hlzg1zly4dw9s39fv2ik6nfcjpjgx82b5kkf3bafdvdvvlldhn"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-adler32" ,rust-adler32-1)
         ("rust-crc32fast" ,rust-crc32fast-1)
-        ("rust-libflate-lz77" ,rust-libflate-lz77-1)
-        ("rust-rle-decode-fast" ,rust-rle-decode-fast-1))
+        ("rust-libflate-lz77" ,rust-libflate-lz77-1))
        #:cargo-development-inputs
        (("rust-clap" ,rust-clap-2))))
     (home-page "https://github.com/sile/libflate")
@@ -24833,18 +30222,19 @@ algorithm and related formats (ZLIB, GZIP).")
 (define-public rust-libflate-lz77-1
   (package
     (name "rust-libflate-lz77")
-    (version "1.0.0")
+    (version "1.1.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "libflate_lz77" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32
-         "06xir79gmp97mdnlnjclk5zlzgkf5s6qvwilcd4gq9j9gngz11ij"))))
+        (base32 "0nig3z2wjwk27ia066knp633akm00v017vny976sy29l970399rr"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:cargo-development-inputs
+     `(#:cargo-inputs
+       (("rust-rle-decode-fast" ,rust-rle-decode-fast-1))
+       #:cargo-development-inputs
        (("rust-libflate" ,rust-libflate-0.1))))
     (home-page "https://github.com/sile/libflate")
     (synopsis "LZ77 encoder for libflate crate")
@@ -24878,7 +30268,7 @@ algorithm and related formats (ZLIB, GZIP).")
 (define-public rust-libgit2-sys-0.12
   (package
     (name "rust-libgit2-sys")
-    (version "0.12.21+1.1.0")
+    (version "0.12.25+1.3.0")
     (source
      (origin
        (method url-fetch)
@@ -24887,7 +30277,7 @@ algorithm and related formats (ZLIB, GZIP).")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "09b85x3gpvq0d7v1mhg4f3w1b3skzlpbikrx9j2rwarbsyn1n9w6"))))
+         "1axsdyb2i67pn85vh8sb2z037n88fiiwqghkzsr1jrcdy2g1cs4g"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
@@ -24898,11 +30288,9 @@ algorithm and related formats (ZLIB, GZIP).")
         ("rust-openssl-sys" ,rust-openssl-sys-0.9)
         ("rust-pkg-config" ,rust-pkg-config-0.3))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libgit2" ,libgit2)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list libgit2 openssl zlib))
     (home-page "https://github.com/rust-lang/git2-rs")
     (synopsis "Native bindings to the libgit2 library")
     (description
@@ -24953,6 +30341,29 @@ library.")
         (snippet
          '(begin (delete-file-recursively "libgit2") #t))))))
 
+(define-public rust-libgit2-sys-0.6
+  (package
+    (inherit rust-libgit2-sys-0.10)
+    (name "rust-libgit2-sys-6")
+    (version "0.6.19")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "libgit2-sys" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0myk79sxqj20bmj4ir3p81xnma9qnid5rrmlbkj5v68wgdpfdskf"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-cc" ,rust-cc-1)
+        ("rust-cmake" ,rust-cmake-0.1)
+        ("rust-curl-sys" ,rust-curl-sys-0.4)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-libssh2-sys" ,rust-libssh2-sys-0.2)
+        ("rust-libz-sys" ,rust-libz-sys-1)
+        ("rust-openssl-sys" ,rust-openssl-sys-0.9)
+        ("rust-pkg-config" ,rust-pkg-config-0.3))))))
+
 (define-public rust-libloading-0.7
   (package
     (name "rust-libloading")
@@ -25003,8 +30414,7 @@ loading utilities.")
        (("rust-libc" ,rust-libc-0.2)
         ("rust-static-assertions" ,rust-static-assertions-1))))
     (inputs
-     `(("rust-cfg-if" ,rust-cfg-if-1)
-       ("rust-winapi" ,rust-winapi-0.3)))))
+     (list rust-cfg-if-1 rust-winapi-0.3))))
 
 (define-public rust-libloading-0.5
   (package
@@ -25014,7 +30424,7 @@ loading utilities.")
       (origin
         (method url-fetch)
         (uri (crate-uri "libloading" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0lyply8rcqc8agajzxs7bq6ivba9dnn1i68kgb9z2flnfjh13cgj"))))
@@ -25153,8 +30563,7 @@ allocator.")
         ("rust-cc" ,rust-cc-1)
         ("rust-pkg-config" ,rust-pkg-config-0.3))))
     (inputs
-     `(("nghttp2" ,nghttp2 "lib")
-       ("pkg-config" ,pkg-config)))
+     (list `(,nghttp2 "lib") pkg-config))
     (home-page "https://github.com/alexcrichton/nghttp2-rs")
     (synopsis "FFI bindings for libnghttp2 (nghttp2)")
     (description
@@ -25201,11 +30610,9 @@ allocator.")
         ("rust-tempdir" ,rust-tempdir-0.3)
         ("rust-toml" ,rust-toml-0.4))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("clang" ,clang)
-       ("nettle" ,nettle)
-       ("openssl" ,openssl)))
+     (list clang nettle openssl))
     (home-page "https://pijul.org/")
     (synopsis "Library component of the pijul version control system")
     (description
@@ -25225,26 +30632,95 @@ file.
 @end itemize")
     (license license:gpl2+)))
 
-(define-public rust-libsqlite3-sys-0.22
+;; https://github.com/jnqnfe/pulse-binding-rust/blob/c788a8069f455f864d2ba5f0aa5f62e6648dfd26/pulse-sys/build.rs
+;; fix location of pulseaudio
+(define-public rust-libpulse-binding-2
+  (package
+    (name "rust-libpulse-binding")
+    (version "2.23.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "libpulse-binding" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1qx85j489mmad9cvw5k71271l3qy4s8a5qq8a9wac6cfi4viz5fv"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-bitflags" ,rust-bitflags-1)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-libpulse-sys" ,rust-libpulse-sys-1)
+        ("rust-num-derive" ,rust-num-derive-0.3)
+        ("rust-num-traits" ,rust-num-traits-0.2)
+        ("rust-winapi" ,rust-winapi-0.3))
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'set-HOME
+           (lambda _ (setenv "HOME" "/tmp") #t)))))
+    (native-inputs
+     (list pkg-config))
+    (inputs
+     (list pulseaudio))
+    (home-page "https://github.com/jnqnfe/pulse-binding-rust")
+    (synopsis "Binding for the PulseAudio libpulse library")
+    (description
+     "This package provides a Rust language binding for the PulseAudio libpulse
+library.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-libpulse-sys-1
+  (package
+    (name "rust-libpulse-sys")
+    (version "1.18.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "libpulse-sys" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "10msfr8f951v86ag0fl2bsm4a3siq2r7hz9bqhhg7i234s1yj5yg"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-libc" ,rust-libc-0.2)
+        ("rust-num-derive" ,rust-num-derive-0.3)
+        ("rust-num-traits" ,rust-num-traits-0.2)
+        ("rust-pkg-config" ,rust-pkg-config-0.3)
+        ("rust-winapi" ,rust-winapi-0.3))))
+    (native-inputs
+     (list pkg-config))
+    (inputs
+     (list pulseaudio))
+    (home-page "https://github.com/jnqnfe/pulse-binding-rust")
+    (synopsis "FFI bindings for the PulseAudio")
+    (description
+     "This package provides FFI bindings for the PulseAudio libpulse system
+library.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-libsqlite3-sys-0.23
   (package
     (name "rust-libsqlite3-sys")
-    (version "0.22.2")
+    (version "0.23.1")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "libsqlite3-sys" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "17gqc2mwih81j3ds479gl5zmsxqzzrcrj3yyv62vh34bgy8n82r9"))))
+        (base32 "1wm91qnsz729vfl3n1rhaq2ip2v4zzxbsawb975vlh4v8h68bmdb"))))
     (build-system cargo-build-system)
-    (inputs
-     `(("sqlite" ,sqlite)))
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       ;; build dependencies
-       (("rust-bindgen" ,rust-bindgen-0.58)
+       (("rust-bindgen" ,rust-bindgen-0.59)
         ("rust-cc" ,rust-cc-1)
+        ("rust-openssl-sys" ,rust-openssl-sys-0.9)
         ("rust-pkg-config" ,rust-pkg-config-0.3)
         ("rust-vcpkg" ,rust-vcpkg-0.2))))
     (home-page "https://github.com/rusqlite/rusqlite")
@@ -25252,6 +30728,29 @@ file.
     (description "Native bindings to the libsqlite3 library")
     (license license:expat)))
 
+(define-public rust-libsqlite3-sys-0.22
+  (package
+    (inherit rust-libsqlite3-sys-0.23)
+    (name "rust-libsqlite3-sys")
+    (version "0.22.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "libsqlite3-sys" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "17gqc2mwih81j3ds479gl5zmsxqzzrcrj3yyv62vh34bgy8n82r9"))))
+    (inputs
+     (list sqlite))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       ;; build dependencies
+       (("rust-bindgen" ,rust-bindgen-0.58)
+        ("rust-cc" ,rust-cc-1)
+        ("rust-pkg-config" ,rust-pkg-config-0.3)
+        ("rust-vcpkg" ,rust-vcpkg-0.2))))))
+
 (define-public rust-libsqlite3-sys-0.20
   (package
     (inherit rust-libsqlite3-sys-0.22)
@@ -25265,7 +30764,7 @@ file.
        (sha256
         (base32 "1g9gbjjpm9phhs991abkzmacszibp94m5nrh331ycd99y9ci1lv4"))))
     (inputs
-     `(("sqlite" ,sqlite)))
+     (list sqlite))
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
@@ -25325,7 +30824,7 @@ file.
         (base32 "104n0s4f46zprppjq6y82y0wjh1r2cgwzw26w914yj30rizy1cbj"))))
     (build-system cargo-build-system)
     (inputs
-     `(("sqlite" ,sqlite)))
+     (list sqlite))
     (arguments
      `(#:cargo-inputs
        ;; build dependencies
@@ -25334,6 +30833,51 @@ file.
         ("rust-pkg-config" ,rust-pkg-config-0.3)
         ("rust-vcpkg" ,rust-vcpkg-0.2))))))
 
+(define-public rust-libxml-0.3
+  (package
+    (name "rust-libxml")
+    (version "0.3.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "libxml" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1f42qrc1mim85ivh2d4bn2wbqrn7dfg1i3l1q32yajcr835pxh02"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-libc" ,rust-libc-0.2)
+        ("rust-pkg-config" ,rust-pkg-config-0.3)
+        ("rust-vcpkg" ,rust-vcpkg-0.2))
+       #:cargo-development-inputs
+       (("rust-criterion" ,rust-criterion-0.3)
+        ("rust-rayon" ,rust-rayon-1))))
+    (native-inputs
+     (list pkg-config))
+    (inputs
+     (list libxml2))
+    (home-page "https://github.com/KWARC/rust-libxml")
+    (synopsis "Rust wrapper for libxml2")
+    (description "This package provides a Rust wrapper for libxml2, the XML
+C parser and toolkit developed for the GNOME project.")
+    (license license:expat)))
+
+(define-public rust-libxml-0.2
+  (package
+    (inherit rust-libxml-0.3)
+    (name "rust-libxml")
+    (version "0.2.17")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "libxml" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1z567rqb55hxn0g7hpvcsh3nfvz9mdzlwk4mk179z9bkf7v10r29"))))))
+
 (define-public rust-libz-sys-1
   (package
     (name "rust-libz-sys")
@@ -25361,8 +30905,7 @@ file.
         ("rust-pkg-config" ,rust-pkg-config-0.3)
         ("rust-vcpkg" ,rust-vcpkg-0.2))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("zlib" ,zlib)))
+     (list pkg-config zlib))
     (home-page "https://github.com/rust-lang/libz-sys")
     (synopsis "Bindings to the system libz library")
     (description
@@ -25371,6 +30914,25 @@ known as zlib).")
     (license (list license:asl2.0
                    license:expat))))
 
+(define-public rust-lifeguard-0.6
+  (package
+    (name "rust-lifeguard")
+    (version "0.6.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "lifeguard" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "09iwwy7888i1kfvbrgwpl4xv3pwsz1fbzx54djs3gnvmszdr9gl9"))))
+    (build-system cargo-build-system)
+    (arguments `(#:skip-build? #t))
+    (home-page "https://github.com/zslayton/lifeguard")
+    (synopsis "Object pool manager in Rust")
+    (description "This package provides an object pool manager in Rust.")
+    (license license:expat)))
+
 (define-public rust-line-0.1
   (package
     (name "rust-line")
@@ -25571,11 +31133,9 @@ punctuation.")
         ("rust-pkg-config" ,rust-pkg-config-0.3)
         ("rust-vcpkg" ,rust-vcpkg-0.2))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libssh2" ,libssh2)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list libssh2 openssl zlib))
     (home-page "https://github.com/alexcrichton/ssh2-rs")
     (synopsis "Native bindings to the libssh2 library")
     (description
@@ -25607,9 +31167,9 @@ punctuation.")
        (("rust-rand" ,rust-rand-0.4)
         ("rust-tempdir" ,rust-tempdir-0.3))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("lmdb" ,lmdb)))
+     (list lmdb))
     (home-page "https://github.com/mozilla/lmdb-rs")
     (synopsis "Safe Rust bindings for LMDB")
     (description "This package provides idiomatic and safe APIs for interacting
@@ -25643,9 +31203,9 @@ with lmdb.")
         ("rust-cc" ,rust-cc-1)
         ("rust-pkg-config" ,rust-pkg-config-0.3))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("lmdb" ,lmdb)))
+     (list lmdb))
     (home-page "https://github.com/mozilla/lmdb-rs")
     (synopsis "Rust bindings for liblmdb")
     (description "This package provides rust bindings for liblmdb.")
@@ -25785,7 +31345,7 @@ by inspecting the system for user preference.")
       (origin
         (method url-fetch)
         (uri (crate-uri "lock_api" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0b24q9mh258xa52ap636q1sxz0j5vrnp0hwbbh7ddjka3wwz3sv2"))))
@@ -25802,7 +31362,7 @@ by inspecting the system for user preference.")
      (origin
        (method url-fetch)
        (uri (crate-uri "log" version))
-       (file-name (string-append name "-" version ".crate"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "04175hv0v62shd82qydq58a48k3bjijmk54v38zgqlbxqkkbpfai"))))
     (build-system cargo-build-system)
@@ -25841,6 +31401,74 @@ by inspecting the system for user preference.")
      `(#:cargo-inputs
        (("rust-log" ,rust-log-0.4))))))
 
+(define-public rust-log-mdc-0.1
+  (package
+    (name "rust-log-mdc")
+    (version "0.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "log-mdc" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1iw1x3qhjvrac35spikn5h06a1rxd9vw216jk8h52jhz9i0j2kd9"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/sfackler/rust-log-mdc")
+    (synopsis "Mapped diagnostic context (MDC) for use with the `log` crate")
+    (description "This package provides a mapped diagnostic context (MDC) for
+use with the `log` crate.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-log4rs-1
+  (package
+    (name "rust-log4rs")
+    (version "1.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "log4rs" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "04d21kkb6if7hly0syp64m15a9695fpfgvlnff3gy58i1n42lmyi"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:tests? #f ; 37 passed, 1 failed
+       #:cargo-inputs
+       (("rust-anyhow" ,rust-anyhow-1)
+        ("rust-arc-swap" ,rust-arc-swap-0.4)
+        ("rust-chrono" ,rust-chrono-0.4)
+        ("rust-derivative" ,rust-derivative-2)
+        ("rust-flate2" ,rust-flate2-1)
+        ("rust-fnv" ,rust-fnv-1)
+        ("rust-humantime" ,rust-humantime-2)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-log" ,rust-log-0.4)
+        ("rust-log-mdc" ,rust-log-mdc-0.1)
+        ("rust-parking-lot" ,rust-parking-lot-0.11)
+        ("rust-regex" ,rust-regex-1)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-value" ,rust-serde-value-0.7)
+        ("rust-serde-json" ,rust-serde-json-1)
+        ("rust-serde-yaml" ,rust-serde-yaml-0.8)
+        ("rust-thiserror" ,rust-thiserror-1)
+        ("rust-thread-id" ,rust-thread-id-3)
+        ("rust-toml" ,rust-toml-0.5)
+        ("rust-typemap" ,rust-typemap-0.3)
+        ("rust-winapi" ,rust-winapi-0.3))
+       #:cargo-development-inputs
+       (("rust-humantime" ,rust-humantime-2)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-streaming-stats"
+         ,rust-streaming-stats-0.2)
+        ("rust-tempfile" ,rust-tempfile-3))))
+    (home-page "https://github.com/estk/log4rs")
+    (synopsis "Highly configurable logging implementation")
+    (description "This package provides a highly configurable multi-output
+logging implementation for the `log` facade.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-logtest-2
   (package
     (name "rust-logtest")
@@ -26009,10 +31637,10 @@ image together with its neighboring pixels.")
         ("rust-flate2" ,rust-flate2-1)
         ("rust-image" ,rust-image-0.20)
         ("rust-itoa" ,rust-itoa-0.4)
-        ("rust-linked-hash-map" ,rust-linked-hash-map-0.4)
+        ("rust-linked-hash-map" ,rust-linked-hash-map-0.5)
         ("rust-log" ,rust-log-0.4)
         ("rust-lzw" ,rust-lzw-0.10)
-        ("rust-nom" ,rust-nom-5)
+        ("rust-nom" ,rust-nom-6)
         ("rust-pom" ,rust-pom-3)
         ("rust-rayon" ,rust-rayon-1)
         ("rust-time" ,rust-time-0.2))))
@@ -26022,6 +31650,31 @@ image together with its neighboring pixels.")
      "This package provides a Rust library for PDF document manipulation.")
     (license license:expat)))
 
+(define-public rust-lru-0.7
+  (package
+    (name "rust-lru")
+    (version "0.7.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "lru" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "07sdl7gpg30hbz7cgph75n2xl8915rshi90c7jqr5j9mi62m6hr7"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-hashbrown" ,rust-hashbrown-0.11))
+       #:cargo-development-inputs
+       (("rust-scoped-threadpool" ,rust-scoped-threadpool-0.1)
+        ("rust-stats-alloc" ,rust-stats-alloc-0.1))))
+    (home-page "https://github.com/jeromefroe/lru-rs")
+    (synopsis "LRU cache")
+    (description "This package provides a LRU cache implementation.")
+    (license license:expat)))
+
 (define-public rust-lru-cache-0.1
   (package
     (name "rust-lru-cache")
@@ -26084,28 +31737,28 @@ key-value pairs.")
         (base32
          "0jxsgkn378kxkiqdshdjdclw5wwp2xaz45cqd3yw85fhn8a38fza"))))))
 
-(define-public rust-lsp-types-0.89
+(define-public rust-lsp-types-0.91
   (package
     (name "rust-lsp-types")
-    (version "0.89.2")
+    (version "0.91.1")
     (source
-      (origin
-        (method url-fetch)
-        (uri (crate-uri "lsp-types" version))
-        (file-name
-          (string-append name "-" version ".tar.gz"))
-        (sha256
-          (base32
-            "18h9dckjy11pz2lpd5lm12vvfcds1qg67clqalr35k2jzpnhsbl5"))))
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "lsp-types" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1bk8iy7s80i2iqj1siyfm0rsdq2vwvz7lclsrcrx2pa2b4n32s13"))))
     (build-system cargo-build-system)
     (arguments
-      `(#:skip-build? #t
-        #:cargo-inputs
-        (("rust-bitflags" ,rust-bitflags-1)
-         ("rust-serde" ,rust-serde-1)
-         ("rust-serde-json" ,rust-serde-json-1)
-         ("rust-serde-repr" ,rust-serde-repr-0.1)
-         ("rust-url" ,rust-url-2))))
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bitflags" ,rust-bitflags-1)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-json" ,rust-serde-json-1)
+        ("rust-serde-repr" ,rust-serde-repr-0.1)
+        ("rust-url" ,rust-url-2))))
     (home-page "https://github.com/gluon-lang/lsp-types")
     (synopsis "Types for interaction with a language server")
     (description
@@ -26113,6 +31766,30 @@ key-value pairs.")
 server (LSP).")
     (license license:expat)))
 
+(define-public rust-lsp-types-0.89
+  (package
+    (inherit rust-lsp-types-0.91)
+    (name "rust-lsp-types")
+    (version "0.89.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "lsp-types" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "18h9dckjy11pz2lpd5lm12vvfcds1qg67clqalr35k2jzpnhsbl5"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bitflags" ,rust-bitflags-1)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-json" ,rust-serde-json-1)
+        ("rust-serde-repr" ,rust-serde-repr-0.1)
+        ("rust-url" ,rust-url-2))))))
+
 (define-public rust-lsp-types-0.83
   (package
     (inherit rust-lsp-types-0.89)
@@ -26257,8 +31934,7 @@ server (LSP).")
         ("rust-cc" ,rust-cc-1)
         ("rust-pkg-config" ,rust-pkg-config-0.3))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("xz" ,xz)))
+     (list pkg-config xz))
     (home-page "https://github.com/alexcrichton/xz2-rs")
     (synopsis "Bindings to liblzma for lzma and xz stream encoding/decoding")
     (description
@@ -26388,6 +32064,65 @@ Mach 3.0 kernel that underlies OSX.")
 library")
   (license (list license:asl2.0 license:expat))))
 
+(define-public rust-macrotest-1
+  (package
+    (name "rust-macrotest")
+    (version "1.0.8")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "macrotest" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32 "06xk9i9amh325vr6w9dmnlxfp6zamrq57zfl031zd0fscqm3vjx2"))))
+    (build-system cargo-build-system)
+    (arguments
+      `(#:cargo-inputs
+        (("rust-diff" ,rust-diff-0.1)
+         ("rust-glob" ,rust-glob-0.3)
+         ("rust-rand" ,rust-rand-0.7)
+         ("rust-serde" ,rust-serde-1)
+         ("rust-serde-json" ,rust-serde-json-1)
+         ("rust-toml" ,rust-toml-0.5))))
+    (home-page "https://github.com/eupn/macrotest")
+    (synopsis "Test harness for macro expansion")
+    (description
+     "This package provides test harness for macro expansion in Rust.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-magic-crypt-3
+  (package
+    (name "rust-magic-crypt")
+    (version "3.1.8")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "magic-crypt" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1jb4m8wqxm2qkg9gcflxa0sg1d33a1a0r876h47njg43h494zjfk"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-aes-soft" ,rust-aes-soft-0.6)
+        ("rust-base64" ,rust-base64-0.13)
+        ("rust-block-modes" ,rust-block-modes-0.7)
+        ("rust-crc-any" ,rust-crc-any-2)
+        ("rust-des" ,rust-des-0.6)
+        ("rust-digest" ,rust-digest-0.9)
+        ("rust-md-5" ,rust-md-5-0.9)
+        ("rust-sha2" ,rust-sha2-0.9)
+        ("rust-tiger" ,rust-tiger-0.1))))
+    (home-page "https://magiclen.org/aes")
+    (synopsis "Library for DES or AES encryption")
+    (description
+     "MagicCrypt is a library to encrypt/decrypt strings, files, or data,
+using Data Encryption Standard(DES) or Advanced Encryption Standard(AES)
+algorithms.  It supports CBC block cipher mode, PKCS5 padding and 64, 128,
+192 or 256-bits key length.")
+    (license license:asl2.0)))
+
 (define-public rust-maildir-0.5
   (package
     (name "rust-maildir")
@@ -26489,7 +32224,7 @@ platform-independently.")
       (origin
         (method url-fetch)
         (uri (crate-uri "maplit" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "07b5kjnhrrmfhgqm9wprjw8adx6i225lqp49gasgqg74lahnabiy"))))
@@ -26637,7 +32372,7 @@ statement, the first matching branch is the item that gets emitted.")
       (origin
         (method url-fetch)
         (uri (crate-uri "matches" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "020axl4q7rk9vz90phs7f8jas4imxal9y9kxl4z4v7a6719mrz3z"))))
@@ -26649,22 +32384,21 @@ statement, the first matching branch is the item that gets emitted.")
 whether an expression matches a pattern.")
     (license license:expat)))
 
-(define-public rust-matchers-0.0
+(define-public rust-matchers-0.1
   (package
     (name "rust-matchers")
-    (version "0.0.1")
+    (version "0.1.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "matchers" version))
-       (file-name
-        (string-append name "-" version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32
-         "1q8ckqmkjqkznvdi9x0z769yz2bmvlqcwx51ad2lpk4mfmgpi6gh"))))
+        (base32 "0n2mbk7lg2vf962c8xwzdq96yrc9i0p8dbmm4wa1nnkcp1dhfqw2"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:cargo-inputs
+     `(#:skip-build? #t
+       #:cargo-inputs
        (("rust-regex-automata" ,rust-regex-automata-0.1))))
     (home-page "https://github.com/hawkw/matchers")
     (synopsis "Regex matching on character and byte streams")
@@ -26674,6 +32408,116 @@ grammars.  It provides the subset of the regex crate that only deals with
 matching, not parsing substrings.")
     (license license:expat)))
 
+(define-public rust-matchers-0.0
+  (package
+    (inherit rust-matchers-0.1)
+    (name "rust-matchers")
+    (version "0.0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "matchers" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1q8ckqmkjqkznvdi9x0z769yz2bmvlqcwx51ad2lpk4mfmgpi6gh"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-regex-automata" ,rust-regex-automata-0.1))))))
+
+(define-public rust-matrixcompare-core-0.1
+  (package
+    (name "rust-matrixcompare-core")
+    (version "0.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "matrixcompare-core" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0wqaj028ws2x2h16rf10arwvmpfbmk7afg8b57ahb25i1nrspgdh"))))
+    (build-system cargo-build-system)
+    (arguments `(#:skip-build? #t))
+    (home-page "https://github.com/Andlon/matrixcompare")
+    (synopsis "Core traits for matrixcompare")
+    (description "This package provides core traits for matrixcompare.")
+    (license license:expat)))
+
+(define-public rust-matrixcompare-0.3
+  (package
+    (name "rust-matrixcompare")
+    (version "0.3.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "matrixcompare" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0i84m1jlxmgyw4farhxbfhyb815hrj6ijq23dgb96z7442l2p0rp"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-matrixcompare-core" ,rust-matrixcompare-core-0.1)
+        ("rust-num-traits" ,rust-num-traits-0.2)
+        ("rust-proptest" ,rust-proptest-1))
+       #:cargo-development-inputs
+       (("rust-matrixcompare-mock" ,rust-matrixcompare-mock-0.1)
+        ("rust-pretty-assertions" ,rust-pretty-assertions-0.6))))
+    (home-page "https://github.com/Andlon/matrixcompare")
+    (synopsis "Tools for convenient comparison of matrices")
+    (description "This package provides tools for convenient comparison of
+matrices.")
+    (license license:expat)))
+
+(define-public rust-matrixcompare-0.2
+  (package
+    (name "rust-matrixcompare")
+    (version "0.2.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "matrixcompare" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "046x25j9v42syns6g8sp3lv4kad55cr4p2bvvs6kyj85dbcz8hiv"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-matrixcompare-core" ,rust-matrixcompare-core-0.1)
+        ("rust-num-traits" ,rust-num-traits-0.2)
+        ("rust-proptest" ,rust-proptest-0.10))))
+    (home-page "https://github.com/Andlon/matrixcompare")
+    (synopsis "Tools for convenient comparison of matrices")
+    (description "This package provides tools for convenient comparison of
+matrices.")
+    (license license:expat)))
+
+(define-public rust-matrixcompare-mock-0.1
+  (package
+    (name "rust-matrixcompare-mock")
+    (version "0.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "matrixcompare-mock" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1iqk7p9a3y057qzjjz4hfc1kq48vb76bf1lljqcm5r6xxmlz785y"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-matrixcompare-core" ,rust-matrixcompare-core-0.1)
+        ("rust-num" ,rust-num-0.3)
+        ("rust-proptest" ,rust-proptest-0.10))))
+    (home-page "https://github.com/Andlon/matrixcompare")
+    (synopsis "Internal mock data structures for testing of matrixcompare")
+    (description "This package provides internal mock data structures for
+testing of matrixcompare.")
+    (license license:expat)))
+
 (define-public rust-matrixmultiply-0.3
   (package
     (name "rust-matrixmultiply")
@@ -26712,7 +32556,7 @@ parallelize and optimize.")
       (origin
         (method url-fetch)
         (uri (crate-uri "matrixmultiply" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "13s7nfd3dfcsrixld2lk8c563ih5xzczl2w36hprfc016rkfrxyl"))))
@@ -26732,7 +32576,7 @@ parallelize and optimize.")
       (origin
         (method url-fetch)
         (uri (crate-uri "matrixmultiply" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "00p0fpjhm45qdzi37mgv7ggsy8b9gqvq4999yrbgyn1dxkf6gbfw"))))
@@ -26820,7 +32664,7 @@ parallelize and optimize.")
      (origin
        (method url-fetch)
        (uri (crate-uri "md5" version))
-       (file-name (string-append name "-" version ".crate"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "0wcps37hrhz59fkhf8di1ppdnqld6l1w5sdy7jp7p51z0i4c8329"))))
     (build-system cargo-build-system)
@@ -26840,7 +32684,7 @@ parallelize and optimize.")
       (origin
         (method url-fetch)
         (uri (crate-uri "md5" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "17b2xm4h4cvxsdjsf3kdrzqv2za60kak961xzi5kmw6g6djcssvy"))))))
@@ -26941,7 +32785,7 @@ unstable -Z self-profile flag.")
 (define-public rust-memchr-2
   (package
     (name "rust-memchr")
-    (version "2.4.0")
+    (version "2.4.1")
     (source
       (origin
         (method url-fetch)
@@ -26950,7 +32794,7 @@ unstable -Z self-profile flag.")
          (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
-          "1p478fqf4nia2ma0kv4npb8x1hli0zz6k16517ikb51jkryx8sxi"))))
+          "0smq8xzd40njqpfzv5mghigj91fzlfrfg842iz8x0wqvw2dw731h"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -27006,7 +32850,7 @@ for searching bytes.")
       (origin
         (method url-fetch)
         (uri (crate-uri "memmap" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0ns7kkd1h4pijdkwfvw4qlbbmqmlmzwlq3g2676dcl5vwyazv1b5"))))
@@ -27035,7 +32879,7 @@ file IO.")
       (origin
         (method url-fetch)
         (uri (crate-uri "memmap" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1zy6s0ni0lx9rjzq3gq2zz9r8zgjmbp02332g3gsj4fyhv4s5zz2"))))))
@@ -27063,27 +32907,46 @@ file IO.")
        #:cargo-development-inputs
        (("rust-tempdir" ,rust-tempdir-0.3))))))
 
-(define-public rust-memmap2-0.3
+(define-public rust-memmap2-0.5
   (package
     (name "rust-memmap2")
-    (version "0.3.0")
+    (version "0.5.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "memmap2" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1xcg3vv6rg8vhl0wdfy085gx4xsp2dah7anvn5816h6wgczj1zr0"))))
+        (base32 "0vp9pxd20gyq8196v73chxdw6gfxz3g4lkdkvffd5slgawds2is6"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-libc" ,rust-libc-0.2))))
+       (("rust-libc" ,rust-libc-0.2)
+        ("rust-stable-deref-trait" ,rust-stable-deref-trait-1))))
     (home-page "https://github.com/RazrFalcon/memmap2-rs")
     (synopsis "Cross-platform Rust API for memory-mapped file IO")
-    (description "This package provides a Rust API for memory-mapped file IO.")
+    (description
+     "This package provides a Rust API for memory-mapped file IO.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-memmap2-0.3
+  (package
+    (inherit rust-memmap2-0.5)
+    (name "rust-memmap2")
+    (version "0.3.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "memmap2" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1xcg3vv6rg8vhl0wdfy085gx4xsp2dah7anvn5816h6wgczj1zr0"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-libc" ,rust-libc-0.2))))))
+
 (define-public rust-memmap2-0.2
   (package
     (inherit rust-memmap2-0.3)
@@ -27517,6 +33380,63 @@ quality, high performance hash algorithm.")
      "This package provides a simple math expression parser and evaluator.")
     (license (list license:unlicense license:expat))))
 
+(define-public rust-migrations-internals-1
+  (package
+    (name "rust-migrations-internals")
+    (version "1.4.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "migrations_internals" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0q2qk4jpa16mcfcmhjz6hdg2s73az1k7j0cy08vvh87h997chkrb"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-barrel" ,rust-barrel-0.6)
+        ("rust-diesel" ,rust-diesel-1))
+       #:cargo-development-inputs
+       (("rust-tempdir" ,rust-tempdir-0.3))))
+    (home-page "https://diesel.rs")
+    (synopsis "Internal implementation of Diesel's migration mechanism")
+    (description "This package provides an internal implementation of Diesel's
+migration mechanism.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-migrations-macros-1
+  (package
+    (name "rust-migrations-macros")
+    (version "1.4.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "migrations_macros" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "173qgwans6n2jf6b7qajq273rvg1r9c34p5fflzr53gx14lz2lwp"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-migrations-internals"
+         ,rust-migrations-internals-1)
+        ("rust-proc-macro2" ,rust-proc-macro2-1)
+        ("rust-quote" ,rust-quote-1)
+        ("rust-syn" ,rust-syn-1))
+       #:cargo-development-inputs
+       (("rust-tempdir" ,rust-tempdir-0.3))))
+    (native-inputs
+     (list pkg-config))
+    (inputs
+     (list sqlite))
+    (home-page "https://diesel.rs")
+    (synopsis "Code generation macros for Diesel's embedded migrations")
+    (description "This package provides code generation macros for Diesel's
+embedded migrations.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-mimalloc-0.1
   (package
     (name "rust-mimalloc")
@@ -27547,7 +33467,7 @@ drop-in allocator.")
       (origin
         (method url-fetch)
         (uri (crate-uri "mime" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "13dcm9lh01hdwfjcg74ppljyjfj1c6w3a3cwkhxf0w8wa37cfq1a"))))
@@ -27625,6 +33545,61 @@ file's MIME type by its extension.")
         ("rust-phf-codegen" ,rust-phf-codegen-0.7)
         ("rust-unicase" ,rust-unicase-1))))))
 
+(define-public rust-miniflux-api-0.3
+  (package
+    (name "rust-miniflux-api")
+    (version "0.3.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "miniflux-api" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0r0bd907v2abv40i0c0xaj87ik4w9d3syn1f4byy0ssv55dw7mdq"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:tests? #f                      ;tests use the network
+       #:cargo-inputs
+       (("rust-base64" ,rust-base64-0.13)
+        ("rust-failure" ,rust-failure-0.1)
+        ("rust-log" ,rust-log-0.4)
+        ("rust-reqwest" ,rust-reqwest-0.11)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-derive" ,rust-serde-derive-1)
+        ("rust-serde-json" ,rust-serde-json-1)
+        ("rust-url" ,rust-url-2))
+       #:cargo-development-inputs
+       (("rust-dotenv" ,rust-dotenv-0.15)
+        ("rust-tokio" ,rust-tokio-1))))
+    (native-inputs
+     (list pkg-config))
+    (inputs
+     (list openssl))
+    (home-page "https://gitlab.com/news-flash/miniflux_api")
+    (synopsis "Rust implementation of the Miniflux REST API")
+    (description
+     "This package provides a Rust implementation of the Miniflux REST API.")
+    ;; No copyright headers in the source code.  LICENSE indicates gpl3.
+    (license license:gpl3)))
+
+(define-public rust-minimal-lexical-0.1
+  (package
+    (name "rust-minimal-lexical")
+    (version "0.1.4")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "minimal-lexical" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32 "0xynhr97vyv5n5lls41dl7bfa3ba122lix9mqij1l7yprl6n6r4w"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/Alexhuszagh/minimal-lexical")
+    (synopsis "Fast float parsing conversion routines")
+    (description "Fast float parsing conversion routines.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-miniz-oxide-0.4
   (package
     (name "rust-miniz-oxide")
@@ -27662,7 +33637,7 @@ streaming API for miniz_oxide.")
       (origin
         (method url-fetch)
         (uri (crate-uri "miniz_oxide" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "198n4hfpq0qcxf275l6fpzh7b9cl7ck2xs6pjgpds74bazv9yrxa"))))
@@ -27722,7 +33697,7 @@ drop-in replacement for miniz.")
       (origin
         (method url-fetch)
         (uri (crate-uri "miniz-sys" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "00l2r4anm8g35x0js2zfdnwfbrih9m43vphdpb77c5ga3kjkm7hy"))))
@@ -27787,17 +33762,17 @@ provides high level functionalities to easily write a pager for any terminal
 application.")
     (license (list license:expat license:asl2.0))))
 
-(define-public rust-mio-0.7
+(define-public rust-mio-0.8
   (package
     (name "rust-mio")
-    (version "0.7.11")
+    (version "0.8.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "mio" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0mi9ah60l270761sz6qdhhn0hkn5msc8689b53bhnkmk0glx706g"))))
+        (base32 "1cmgipv6k536xf0a6qd359wnpxg0pfrpkr9bhy8zqh8bza2jy9xs"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
@@ -27807,8 +33782,8 @@ application.")
         ("rust-ntapi" ,rust-ntapi-0.3)
         ("rust-winapi" ,rust-winapi-0.3))
        #:cargo-development-inputs
-       (("rust-env-logger" ,rust-env-logger-0.6)
-        ("rust-rand" ,rust-rand-0.4))))
+       (("rust-env-logger" ,rust-env-logger-0.8)
+        ("rust-rand" ,rust-rand-0.8))))
     (home-page "https://github.com/tokio-rs/mio")
     (synopsis "Lightweight non-blocking IO")
     (description
@@ -27817,6 +33792,29 @@ APIs and event notification for building I/O apps with as little overhead as
 possible over the OS abstractions.")
     (license license:expat)))
 
+(define-public rust-mio-0.7
+  (package
+    (inherit rust-mio-0.8)
+    (name "rust-mio")
+    (version "0.7.11")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "mio" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0mi9ah60l270761sz6qdhhn0hkn5msc8689b53bhnkmk0glx706g"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-libc" ,rust-libc-0.2)
+        ("rust-log" ,rust-log-0.4)
+        ("rust-miow" ,rust-miow-0.3)
+        ("rust-ntapi" ,rust-ntapi-0.3)
+        ("rust-winapi" ,rust-winapi-0.3))
+       #:cargo-development-inputs
+       (("rust-env-logger" ,rust-env-logger-0.6)
+        ("rust-rand" ,rust-rand-0.4))))))
+
 (define-public rust-mio-0.6
   (package
     (inherit rust-mio-0.7)
@@ -27980,24 +33978,24 @@ possible over the OS abstractions.")
      "Unix domain socket bindings for mio.")
     (license (list license:asl2.0 license:expat))))
 
-(define-public rust-miow-0.3
+(define-public rust-miow-0.4
   (package
     (name "rust-miow")
-    (version "0.3.6")
+    (version "0.4.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "miow" version))
-       (file-name (string-append name "-" version ".crate"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "15sqdhh29dqgw5xh59clwv6scbsbvdkbmdc16hbfvyq7b2sw2css"))))
+        (base32 "03p0dgbahlysgxk0sihhf09k5h13r9aam3d6rfivdbxkj9vpydx7"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
-       (("rust-socket2" ,rust-socket2-0.3)
-        ("rust-winapi" ,rust-winapi-0.3))
+       (("rust-windows-sys" ,rust-windows-sys-0.28))
        #:cargo-development-inputs
-       (("rust-rand" ,rust-rand-0.4))))
+       (("rust-rand" ,rust-rand-0.8)
+        ("rust-socket2" ,rust-socket2-0.4))))
     (home-page "https://github.com/alexcrichton/miow")
     (synopsis "Rust I/O library for Windows")
     (description
@@ -28006,6 +34004,25 @@ IOCP and Async I/O abstractions.")
     (license (list license:asl2.0
                    license:expat))))
 
+(define-public rust-miow-0.3
+  (package
+    (inherit rust-miow-0.4)
+    (name "rust-miow")
+    (version "0.3.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "miow" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "15sqdhh29dqgw5xh59clwv6scbsbvdkbmdc16hbfvyq7b2sw2css"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-socket2" ,rust-socket2-0.3)
+        ("rust-winapi" ,rust-winapi-0.3))
+       #:cargo-development-inputs
+       (("rust-rand" ,rust-rand-0.4))))))
+
 (define-public rust-miow-0.2
   (package
     (inherit rust-miow-0.3)
@@ -28015,7 +34032,7 @@ IOCP and Async I/O abstractions.")
       (origin
         (method url-fetch)
         (uri (crate-uri "miow" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "06g9b8sqlh5gxakwqq4rrib07afwanfnxgxajrldwcgk3hxjy7wc"))))
@@ -28182,7 +34199,7 @@ checking.")
       (origin
         (method url-fetch)
         (uri (crate-uri "modifier" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0n3fmgli1nsskl0whrfzm1gk0rmwwl6pw1q4nb9sqqmn5h8wkxa1"))))
@@ -28194,8 +34211,36 @@ checking.")
       "Chaining APIs for both self -> Self and &mut self methods.")
     (license license:expat)))
 
+(define-public rust-mp4-0.9
+  (package
+    (name "rust-mp4")
+    (version "0.9.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "mp4" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "12rwsjj5fn5h198ih0ig08vz34rfjlnf8rw3d0i5jwbaay88f1kq"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-byteorder" ,rust-byteorder-1)
+        ("rust-bytes" ,rust-bytes-1)
+        ("rust-num-rational" ,rust-num-rational-0.4)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-json" ,rust-serde-json-1)
+        ("rust-thiserror" ,rust-thiserror-1))
+       #:cargo-development-inputs
+       (("rust-criterion" ,rust-criterion-0.3))))
+    (home-page "https://github.com/alfg/mp4-rust")
+    (synopsis "MP4 reader and writer library in Rust")
+    (description "mp4 is a Rust library to read and write ISO-MP4 files.")
+    (license license:expat)))
+
 (define-public rust-mp4-0.8
   (package
+    (inherit rust-mp4-0.9)
     (name "rust-mp4")
     (version "0.8.3")
     (source
@@ -28205,7 +34250,6 @@ checking.")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "14zh9dh6hwzmbchl7yh8wv84r0fniq1jcbz9x2hqq699h6l1issi"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
@@ -28214,11 +34258,34 @@ checking.")
         ("rust-num-rational" ,rust-num-rational-0.3)
         ("rust-serde" ,rust-serde-1)
         ("rust-serde-json" ,rust-serde-json-1)
-        ("rust-thiserror" ,rust-thiserror-1))))
-    (home-page "https://github.com/alfg/mp4-rust")
-    (synopsis "MP4 reader and writer library in Rust")
-    (description "mp4 is a Rust library to read and write ISO-MP4 files.")
-    (license license:expat)))
+        ("rust-thiserror" ,rust-thiserror-1))))))
+
+(define-public rust-mp4parse-0.11
+  (package
+    (name "rust-mp4parse")
+    (version "0.11.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "mp4parse" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0rd35ml4mm4xmz3n95wn5b4sgrj80q9i300759hzx1wiy2rrgsk0"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bitreader" ,rust-bitreader-0.3)
+        ("rust-byteorder" ,rust-byteorder-1)
+        ("rust-env-logger" ,rust-env-logger-0.8)
+        ("rust-fallible-collections" ,rust-fallible-collections-0.4)
+        ("rust-log" ,rust-log-0.4)
+        ("rust-num-traits" ,rust-num-traits-0.2)
+        ("rust-static-assertions" ,rust-static-assertions-1))))
+    (home-page "https://github.com/mozilla/mp4parse-rust")
+    (synopsis "Parser for ISO base media file format (mp4)")
+    (description "Parser for ISO base media file format (mp4)")
+    (license license:mpl2.0)))
 
 (define-public rust-mpris-player-0.6
   (package
@@ -28238,10 +34305,9 @@ checking.")
        (("rust-dbus" ,rust-dbus-0.6)
         ("rust-glib" ,rust-glib-0.10))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("dbus" ,dbus)
-       ("glib" ,glib)))
+     (list dbus glib))
     (home-page "https://gitlab.gnome.org/World/Rust/mpris-player")
     (synopsis "Library for creating MPRIS2 media players over D-Bus")
     (description "This package provides a library for creating MPRIS2 media
@@ -28276,8 +34342,72 @@ which defines a default trait implementation, and @code{trait_impl} which uses
 a default trait implementation you've defined.")
     (license license:lgpl2.1+)))
 
+(define-public rust-multimap-0.8
+  (package
+    (name "rust-multimap")
+    (version "0.8.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "multimap" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0sicyz4n500vdhgcxn4g8jz97cp1ijir1rnbgph3pmx9ckz4dkp5"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-serde" ,rust-serde-1))
+       #:cargo-development-inputs
+       (("rust-serde-test" ,rust-serde-test-1))))
+    (home-page "https://github.com/havarnov/multimap")
+    (synopsis "Multimap implementation")
+    (description "This package provides a multimap implementation.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-multipart-0.18
+  (package
+    (name "rust-multipart")
+    (version "0.18.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "multipart" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "10libwfbazqcyxcpgpcdf1a66jnzghwlmxlxnffg4rrqhqrwdph0"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-buf-redux" ,rust-buf-redux-0.8)
+        ("rust-clippy" ,rust-clippy-0.0)
+        ("rust-httparse" ,rust-httparse-1)
+        ("rust-hyper" ,rust-hyper-0.10)
+        ("rust-iron" ,rust-iron-0.6)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-log" ,rust-log-0.4)
+        ("rust-mime" ,rust-mime-0.3)
+        ("rust-mime-guess" ,rust-mime-guess-2)
+        ("rust-nickel" ,rust-nickel-0.11)
+        ("rust-quick-error" ,rust-quick-error-1)
+        ("rust-rand" ,rust-rand-0.8)
+        ("rust-rocket" ,rust-rocket-0.4)
+        ("rust-safemem" ,rust-safemem-0.3)
+        ("rust-tempfile" ,rust-tempfile-3)
+        ("rust-tiny-http" ,rust-tiny-http-0.6)
+        ("rust-twoway" ,rust-twoway-0.1))
+       #:cargo-development-inputs
+       (("rust-env-logger" ,rust-env-logger-0.5))))
+    (home-page "https://github.com/abonander/multipart")
+    (synopsis "Backend-agnostic extension for file uploads in HTTP libraries for Rust")
+    (description "This package provides a backend-agnostic extension for HTTP
+libraries that provides support for POST multipart/form-data requests on both
+client and server.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-multipart-0.17
   (package
+    (inherit rust-multipart-0.18)
     (name "rust-multipart")
     (version "0.17.1")
     (source
@@ -28287,7 +34417,6 @@ a default trait implementation you've defined.")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "1m3nrydgc56wjixsahipmvjgnxnw2cz7w8ryghsgahwjr3nswl6h"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
@@ -28307,15 +34436,9 @@ a default trait implementation you've defined.")
         ("rust-safemem" ,rust-safemem-0.3)
         ("rust-tempfile" ,rust-tempfile-3)
         ("rust-tiny-http" ,rust-tiny-http-0.6)
-        ("rust-twoway" ,rust-twoway-0.1))))
-    (home-page "https://github.com/abonander/multipart")
-    (synopsis
-     "Backend-agnostic extension for file uploads in HTTP libraries for Rust")
-    (description
-     "This package provides a backend-agnostic extension for HTTP libraries
-that provides support for POST multipart/form-data requests on both client and
-server.")
-    (license (list license:expat license:asl2.0))))
+        ("rust-twoway" ,rust-twoway-0.1))
+       #:cargo-development-inputs
+        (("rust-env-logger" ,rust-env-logger-0.5))))))
 
 (define-public rust-multiversion-0.6
   (package
@@ -28404,7 +34527,7 @@ library.")
        (("rust-pkg-config" ,rust-pkg-config-0.3)
         ("rust-vcpkg" ,rust-vcpkg-0.2))))
     (native-inputs
-     `(("mariadb" ,mariadb "lib")))
+     (list `(,mariadb "lib")))
     (home-page "https://github.com/sgrif/mysqlclient-sys")
     (synopsis "Auto-generated rust bindings for libmysqlclient")
     (description "This package provides auto-generated rust bindings for
@@ -28508,6 +34631,64 @@ quick compile time, and minimal dependencies.")
        #:cargo-inputs
        (("rust-rayon" ,rust-rayon-1))))))
 
+(define-public rust-nalgebra-0.26
+  (package
+    (name "rust-nalgebra")
+    (version "0.26.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "nalgebra" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32 "01hxksmgg17c4k2rzjx1h8kkjbw9rm81dsancg459zh2zrcisva7"))))
+    (build-system cargo-build-system)
+    (arguments
+      `(#:skip-build? #t
+        #:phases
+        (modify-phases %standard-phases
+         (add-after 'configure 'patch-Cargo.toml
+           (lambda _
+             (substitute* '("Cargo.toml"
+                            "guix-vendor/rust-nalgebra-0.26.2.tar.gz/Cargo.toml"
+                            "guix-vendor/rust-average-0.13.1.tar.gz/Cargo.toml")
+               ;; The resolver feature is not supported by this version of Cargo.
+               (("resolver = \"2\".*") "")))))
+        #:cargo-inputs
+        (("rust-abomonation" ,rust-abomonation-0.7)
+         ("rust-alga" ,rust-alga-0.9)
+         ("rust-approx" ,rust-approx-0.4)
+         ("rust-bytemuck" ,rust-bytemuck-1.5)
+         ("rust-glam" ,rust-glam-0.13)
+         ("rust-matrixcompare-core" ,rust-matrixcompare-core-0.1)
+         ("rust-matrixmultiply" ,rust-matrixmultiply-0.3)
+         ("rust-mint" ,rust-mint-0.5)
+         ("rust-num-complex" ,rust-num-complex-0.3)
+         ("rust-num-rational" ,rust-num-rational-0.3)
+         ("rust-num-traits" ,rust-num-traits-0.2)
+         ("rust-pest" ,rust-pest-2)
+         ("rust-pest-derive" ,rust-pest-derive-2)
+         ("rust-proptest" ,rust-proptest-1)
+         ("rust-quickcheck" ,rust-quickcheck-1)
+         ("rust-rand" ,rust-rand-0.8)
+         ("rust-rand-distr" ,rust-rand-distr-0.4)
+         ("rust-serde" ,rust-serde-1)
+         ("rust-simba" ,rust-simba-0.4)
+         ("rust-typenum" ,rust-typenum-1))
+        #:cargo-development-inputs
+        (("rust-criterion" ,rust-criterion-0.2)
+         ("rust-itertools" ,rust-itertools-0.10)
+         ("rust-matrixcompare" ,rust-matrixcompare-0.2)
+         ("rust-rand-isaac" ,rust-rand-isaac-0.3)
+         ("rust-rand-xorshift" ,rust-rand-xorshift-0.3)
+         ("rust-serde-json" ,rust-serde-json-1))))
+    (home-page "https://nalgebra.org")
+    (synopsis "Linear algebra library")
+    (description
+     "This package provides a general-purpose linear algebra library with
+transformations and statically-sized or dynamically-sized matrices.")
+    (license license:bsd-3)))
+
 (define-public rust-nalgebra-0.21
   (package
     (name "rust-nalgebra")
@@ -28626,6 +34807,42 @@ statically-sized or dynamically-sized matrices.")
        (("rust-rand-xorshift" ,rust-rand-xorshift-0.1)
         ("rust-serde-json" ,rust-serde-json-1))))))
 
+(define-public rust-nalgebra-macros-0.1
+  (package
+    (name "rust-nalgebra-macros")
+    (version "0.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "nalgebra-macros" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "063jvvvlwmzzxfr4wyiil2cn1yqj3arvghwsr2nk4ilv2jwc1z01"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'configure 'patch-Cargo.toml
+           (lambda _
+             (substitute* '("Cargo.toml"
+                            "guix-vendor/rust-nalgebra-macros-0.1.0.tar.gz/Cargo.toml"
+                            "guix-vendor/rust-nalgebra-0.26.2.tar.gz/Cargo.toml"
+                            "guix-vendor/rust-average-0.13.1.tar.gz/Cargo.toml")
+               ;; The resolver feature is not supported by this version of Cargo.
+               (("resolver = \"2\".*") "")))))
+       #:cargo-inputs
+       (("rust-proc-macro2" ,rust-proc-macro2-1)
+        ("rust-quote" ,rust-quote-1)
+        ("rust-syn" ,rust-syn-1))
+       #:cargo-development-inputs
+       (("rust-nalgebra" ,rust-nalgebra-0.26))))
+    (home-page "https://nalgebra.org")
+    (synopsis "Procedural macros for nalgebra")
+    (description "This package provides procedural macros for the nalgebra
+linear algebra library.")
+    (license license:asl2.0)))
+
 (define-public rust-named-pipe-0.4
   (package
     (name "rust-named-pipe")
@@ -28737,9 +34954,9 @@ IO of Windows's named pipes.")
          "0cjirf6n4i2lw65iaww8d4hahv3cbfm5ka9hlansvnbfgzwadzq9"))))
     (build-system cargo-build-system)
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
      `(#:cargo-inputs
        (("rust-bindgen" ,rust-bindgen-0.55)
@@ -28784,9 +35001,9 @@ IO of Windows's named pipes.")
        (("rust-hex" ,rust-hex-0.4)
         ("rust-test-cert-gen" ,rust-test-cert-gen-0.1))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (home-page "https://github.com/sfackler/rust-native-tls")
     (synopsis "Wrapper over a platform's native TLS implementation")
     (description
@@ -28837,6 +35054,41 @@ implementation.")
      "This package provides a crate to perform natural ordering for Rust.")
     (license license:expat)))
 
+(define-public rust-nb-1
+  (package
+    (name "rust-nb")
+    (version "1.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "nb" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1blc9143cqh3cn2imr050qczbnfrfdl10xxnfdggamlybnn3fv2l"))))
+    (build-system cargo-build-system)
+    (arguments `(#:skip-build? #t))
+    (home-page "https://github.com/rust-embedded/nb")
+    (synopsis "Minimal non-blocking I/O layer")
+    (description "This package provides a minimal non-blocking I/O layer.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-nb-0.1
+  (package
+    (inherit rust-nb-1)
+    (name "rust-nb")
+    (version "0.1.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "nb" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0vyh31pbwrg21f8hz1ipb9i20qwnfwx47gz92i9frdhk0pd327c0"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs (("rust-nb" ,rust-nb-1))))))
+
 (define-public rust-nb-connect-1
   (package
     (name "rust-nb-connect")
@@ -29146,7 +35398,7 @@ in Rust that can compile to WebAssembly.")
       (origin
         (method url-fetch)
         (uri (crate-uri "net2" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "126g3fgfxp06zimc1l9iyxnn9cif1hjsg7sd81nlls5nnyghsma2"))))
@@ -29168,22 +35420,19 @@ types as proposed in RFC 1158.")
 (define-public rust-nettle-7
   (package
     (name "rust-nettle")
-    (version "7.0.0")
+    (version "7.0.3")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nettle" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1n6dwy9zba8853bmxzhwaashd3np0wxpx0pj43brm0hb8n2sxbxi"))
-       (patches (search-patches "rust-nettle-disable-vendor.patch"))))
+        (base32 "1qlsq3szglkw7s089h5qh9xa787qyvkdj5cgxm4qj30fazwr0hx0"))))
     (build-system cargo-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("clang" ,clang)
-       ("gmp" ,gmp)
-       ("nettle" ,nettle)))
+     (list clang gmp nettle))
     (arguments
      `(#:skip-build? #t ;; provides nothing, has no tests
        #:cargo-inputs
@@ -29228,10 +35477,9 @@ cryptographic library.")
        (patches (search-patches "rust-nettle-sys-disable-vendor.patch"))))
     (build-system cargo-build-system)
     (native-inputs
-     `(("clang" ,clang)
-       ("pkg-config" ,pkg-config)))
+     (list clang pkg-config))
     (inputs
-     `(("nettle" ,nettle)))
+     (list nettle))
     (arguments
      `(#:cargo-inputs
        (("rust-bindgen" ,rust-bindgen-0.51)
@@ -29267,6 +35515,135 @@ cryptographic library.")
 release (fork of debug_unreachable)")
     (license license:expat)))
 
+(define-public rust-news-flash-1
+  (package
+    (name "rust-news-flash")
+    (version "1.2.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "news-flash" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0r3hz725kblxr6mhl8rkf2bffzmyya0ib3xr3jk5zm8x2jlpvlq6"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:tests? #f ; FIXME: "error reading DNS system conf" from reqwest
+       #:cargo-inputs
+       (("rust-article-scraper" ,rust-article-scraper-1)
+        ("rust-async-trait" ,rust-async-trait-0.1)
+        ("rust-base64" ,rust-base64-0.13)
+        ("rust-bitflags" ,rust-bitflags-1)
+        ("rust-bytes" ,rust-bytes-1)
+        ("rust-chrono" ,rust-chrono-0.4)
+        ("rust-diesel" ,rust-diesel-1)
+        ("rust-diesel-migrations"
+         ,rust-diesel-migrations-1)
+        ("rust-escaper" ,rust-escaper-0.1)
+        ("rust-failure" ,rust-failure-0.1)
+        ("rust-feed-rs" ,rust-feed-rs-0.6)
+        ("rust-feedbin-api" ,rust-feedbin-api-0.1)
+        ("rust-feedly-api" ,rust-feedly-api-0.4)
+        ("rust-fever-api" ,rust-fever-api-0.2)
+        ("rust-futures" ,rust-futures-0.3)
+        ("rust-hmac" ,rust-hmac-0.11)
+        ("rust-image" ,rust-image-0.23)
+        ("rust-itertools" ,rust-itertools-0.10)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-libxml" ,rust-libxml-0.3)
+        ("rust-log" ,rust-log-0.4)
+        ("rust-magic-crypt" ,rust-magic-crypt-3)
+        ("rust-mime" ,rust-mime-0.3)
+        ("rust-mime-guess" ,rust-mime-guess-2)
+        ("rust-miniflux-api" ,rust-miniflux-api-0.3)
+        ("rust-newsblur-api" ,rust-newsblur-api-0.1)
+        ("rust-obfstr" ,rust-obfstr-0.3)
+        ("rust-opml" ,rust-opml-1)
+        ("rust-parking-lot" ,rust-parking-lot-0.11)
+        ("rust-rayon" ,rust-rayon-1)
+        ("rust-regex" ,rust-regex-1)
+        ("rust-reqwest" ,rust-reqwest-0.11)
+        ("rust-rust-embed" ,rust-rust-embed-5)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-derive" ,rust-serde-derive-1)
+        ("rust-serde-json" ,rust-serde-json-1)
+        ("rust-sha-1" ,rust-sha-1-0.9)
+        ("rust-url" ,rust-url-2))
+       #:cargo-development-inputs
+       (("rust-tempfile" ,rust-tempfile-3)
+        ("rust-tokio" ,rust-tokio-1))))
+    (native-inputs
+     (list pkg-config))
+    (inputs
+     (list libxml2 openssl sqlite))
+    (home-page "https://gitlab.com/news-flash/news_flash")
+    (synopsis "Base library for NewsFlash")
+    (description "This package provides the base library for the NewsFlash
+feed reader.")
+    ;; No copyright headers in the source code.  LICENSE indicates gpl3.
+    (license license:gpl3)))
+
+(define-public rust-newsblur-api-0.1
+  (package
+    (name "rust-newsblur-api")
+    (version "0.1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "newsblur_api" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1lh5njrrk4fjc168npk1q3962dzsgmvz4fzvha46g9b83cf3jxzx"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:tests? #f ;tests use the network
+       #:cargo-inputs
+       (("rust-failure" ,rust-failure-0.1)
+        ("rust-reqwest" ,rust-reqwest-0.11)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-json" ,rust-serde-json-1)
+        ("rust-url" ,rust-url-2))
+       #:cargo-development-inputs
+       (("rust-dotenv" ,rust-dotenv-0.15)
+        ("rust-tokio" ,rust-tokio-1))))
+    (native-inputs
+     (list pkg-config))
+    (inputs
+     (list openssl))
+    (home-page "https://gitlab.com/news-flash/newsblur_api/")
+    (synopsis "Rust implementation of the NewsBlur API")
+    (description
+     "This package provides a Rust implementation of the NewsBlur API.")
+    ;; No copyright headers in the source code.  LICENSE indicates gpl3.
+    (license license:gpl3)))
+
+(define-public rust-newtype-derive-0.1
+  (package
+    (name "rust-newtype-derive")
+    (version "0.1.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "newtype-derive" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1v3170xscs65gjx5vl1zjnqp86wngbzw3n2q74ibfnqqkx6x535c"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-rustc-version" ,rust-rustc-version-0.1))
+       #:cargo-development-inputs
+       (("rust-custom-derive" ,rust-custom-derive-0.1))))
+    (home-page "https://github.com/DanielKeep/rust-custom-derive")
+    (synopsis "Macros for deriving common traits for newtype structures")
+    (description
+     "This crate provides macros for deriving common traits for newtype
+structures.")
+    (license (list license:expat
+                   license:asl2.0))))
+
 (define-public rust-nibble-vec-0.1
   (package
     (name "rust-nibble-vec")
@@ -29443,17 +35820,17 @@ nitrokey crate and others using it.")
 nitrokey-test crate.")
     (license license:gpl3+)))
 
-(define-public rust-nix-0.22
+(define-public rust-nix-0.23
   (package
     (name "rust-nix")
-    (version "0.22.1")
+    (version "0.23.1")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nix" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0cahgzxhdwsaa8491n6cn8gadgfsxk5razyfw4xr3k34f5n5smg7"))))
+        (base32 "1iimixk7y2qk0jswqich4mkd8kqyzdghcgy6203j8fmxmhbn71lz"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -29471,6 +35848,27 @@ 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.22
+  (package
+    (inherit rust-nix-0.23)
+    (name "rust-nix")
+    (version "0.22.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "nix" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0cahgzxhdwsaa8491n6cn8gadgfsxk5razyfw4xr3k34f5n5smg7"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bitflags" ,rust-bitflags-1.2)
+        ("rust-cc" ,rust-cc-1)
+        ("rust-cfg-if" ,rust-cfg-if-1)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-memoffset" ,rust-memoffset-0.6))))))
+
 (define-public rust-nix-0.21
   (package
     (inherit rust-nix-0.22)
@@ -29568,10 +35966,7 @@ while still providing platform specific APIs.")
         ("rust-sysctl" ,rust-sysctl-0.1)
         ("rust-tempfile" ,rust-tempfile-3))))
     (inputs
-     `(("rust-bitflags" ,rust-bitflags-1)
-       ("rust-cc" ,rust-cc-1)
-       ("rust-cfg-if" ,rust-cfg-if-0.1)
-       ("rust-libc" ,rust-libc-0.2)))))
+     (list rust-bitflags-1 rust-cc-1 rust-cfg-if-0.1 rust-libc-0.2))))
 
 (define-public rust-nix-0.17
   (package
@@ -29640,6 +36035,26 @@ while still providing platform specific APIs.")
         (base32
          "1kmxdlmvnmq8cfpmr3g6wk37rwi2ybdvp1z6z3831m1p23p2nwkc"))))))
 
+(define-public rust-nix-0.8
+  (package
+    (inherit rust-nix-0.15)
+    (name "rust-nix")
+    (version "0.8.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "nix" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "11v4idygamcdgqvqbz9qcz83nwiyc8bv62k2x72kawcqh9lrzr27"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bitflags" ,rust-bitflags-0.7)
+        ("rust-cfg-if" ,rust-cfg-if-0.1)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-void" ,rust-void-1))))))
+
 (define-public rust-nl80211-0.0.2
   (package
     (name "rust-nl80211")
@@ -29664,6 +36079,26 @@ while still providing platform specific APIs.")
 to nl80211 and receive messages.")
     (license license:expat)))
 
+(define-public rust-no-color-0.1
+  (package
+    (name "rust-no-color")
+    (version "0.1.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "no_color" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32 "1m0x6i5q1jav2jgajkg4irrkfgv4lakpdvmj310b90wswdyy9xdx"))))
+    (build-system cargo-build-system)
+    (arguments `(#:skip-build? #t))
+    (home-page "https://github.com/sitkevij/no_color")
+    (synopsis "Library to detect NO_COLOR environment variable")
+    (description
+"@code{no_color} is a rust library for detecting if the @code{NO_COLOR}
+environment variable is set.")
+    (license license:expat)))
+
 (define-public rust-no-panic-0.1
   (package
     (name "rust-no-panic")
@@ -29692,6 +36127,29 @@ to nl80211 and receive messages.")
 prove a function can't ever panic.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-no-std-net-0.5
+  (package
+    (name "rust-no-std-net")
+    (version "0.5.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "no-std-net" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0lkilh0wc7big3m5lsn9wqiz2xvj21kgmpbc15z92j93n51wxkhv"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-serde" ,rust-serde-1))))
+    (home-page "https://github.com/dunmatt/no-std-net")
+    (synopsis "Rust's std::net... without the @code{std}")
+    (description "This package provides Rust's std::net for environment
+without the @code{std}.")
+    (license license:expat)))
+
 (define-public rust-nodrop-0.1
   (package
     (name "rust-nodrop")
@@ -29700,7 +36158,7 @@ prove a function can't ever panic.")
       (origin
         (method url-fetch)
         (uri (crate-uri "nodrop" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1fz1v9r8ijacf0hlq0pdv5l9mz8vgqg1snmhvpjmi9aci1b4mvvj"))))
@@ -29723,7 +36181,7 @@ prove a function can't ever panic.")
       (origin
         (method url-fetch)
         (uri (crate-uri "nodrop-union" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1h59pph19rxanyqcaid8pg73s7wmzdx3zhjv5snlim5qx606zxkc"))))
@@ -29737,10 +36195,10 @@ implementation (which is unstable / requires nightly).")
     (license (list license:asl2.0
                    license:expat))))
 
-(define-public rust-nom-6
+(define-public rust-nom-7
   (package
     (name "rust-nom")
-    (version "6.0.1")
+    (version "7.0.0")
     (source
      (origin
        (method url-fetch)
@@ -29749,21 +36207,19 @@ implementation (which is unstable / requires nightly).")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1w0ppq112myzwk23c8m0wmq0nv73xvn0g9gl2kfm83aadgylq0w8"))))
+         "1ha24yclw4m74gi9p5c3d68rhrrcb7qvkgicz153p5cahck9vzbz"))))
     (build-system cargo-build-system)
     (arguments
      `(#:tests? #f  ; Tests require example directory, not included in tarball.
        #:cargo-inputs
-       (("rust-bitvec" ,rust-bitvec-0.19)
-        ("rust-lazy-static" ,rust-lazy-static-1)
-        ("rust-lexical-core" ,rust-lexical-core-0.7)
-        ("rust-memchr" ,rust-memchr-2)
-        ("rust-regex" ,rust-regex-1)
+       (("rust-memchr" ,rust-memchr-2)
+        ("rust-minimal-lexical" ,rust-minimal-lexical-0.1)
         ("rust-version-check" ,rust-version-check-0.9))
        #:cargo-development-inputs
        (("rust-criterion" ,rust-criterion-0.3)
         ("rust-doc-comment" ,rust-doc-comment-0.3)
-        ("rust-jemallocator" ,rust-jemallocator-0.3))
+        ("rust-jemallocator" ,rust-jemallocator-0.3)
+        ("rust-proptest" ,rust-proptest-1))
        #:phases
        (modify-phases %standard-phases
          (add-after 'configure 'override-jemalloc
@@ -29773,7 +36229,7 @@ implementation (which is unstable / requires nightly).")
                        (string-append jemalloc "/lib/libjemalloc_pic.a")))
              #t)))))
     (native-inputs
-     `(("jemalloc" ,jemalloc)))
+     (list jemalloc))
     (home-page "https://github.com/Geal/nom")
     (synopsis
      "Byte-oriented, zero-copy, parser combinators library")
@@ -29782,6 +36238,42 @@ implementation (which is unstable / requires nightly).")
 combinators library.")
     (license license:expat)))
 
+(define-public rust-nom-6
+  (package
+    (inherit rust-nom-7)
+    (name "rust-nom")
+    (version "6.0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "nom" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1w0ppq112myzwk23c8m0wmq0nv73xvn0g9gl2kfm83aadgylq0w8"))))
+    (arguments
+     `(#:tests? #f  ; Tests require example directory, not included in tarball.
+       #:cargo-inputs
+       (("rust-bitvec" ,rust-bitvec-0.19)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-lexical-core" ,rust-lexical-core-0.7)
+        ("rust-memchr" ,rust-memchr-2)
+        ("rust-regex" ,rust-regex-1)
+        ("rust-version-check" ,rust-version-check-0.9))
+       #:cargo-development-inputs
+       (("rust-criterion" ,rust-criterion-0.3)
+        ("rust-doc-comment" ,rust-doc-comment-0.3)
+        ("rust-jemallocator" ,rust-jemallocator-0.3))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'configure 'override-jemalloc
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((jemalloc (assoc-ref inputs "jemalloc")))
+               (setenv "JEMALLOC_OVERRIDE"
+                       (string-append jemalloc "/lib/libjemalloc_pic.a")))
+             #t)))))))
+
 (define-public rust-nom-5
   (package
     (inherit rust-nom-6)
@@ -30008,7 +36500,7 @@ with all line endings.")
 (define-public rust-notify-5
   (package
     (name "rust-notify")
-    (version "5.0.0-pre.8")
+    (version "5.0.0-pre.13")
     (source
       (origin
         (method url-fetch)
@@ -30017,7 +36509,7 @@ with all line endings.")
           (string-append name "-" version ".tar.gz"))
         (sha256
           (base32
-            "0jq1ixzi7rgq233dxbxkn129n8lidswp1glsgbdhvw7ig38brfs6"))))
+            "0za8mpacxkr62fii5h7ny4h396y0m8myd3hf08njqdg2h21kap94"))))
     (build-system cargo-build-system)
     (arguments
       `(#:skip-build? #t
@@ -30027,7 +36519,8 @@ with all line endings.")
           ,rust-crossbeam-channel-0.5)
          ("rust-filetime" ,rust-filetime-0.2)
          ("rust-fsevent" ,rust-fsevent-2)
-         ("rust-fsevent-sys" ,rust-fsevent-sys-3)
+         ("rust-fsevent-sys" ,rust-fsevent-sys-4)
+         ("rust-kqueue" ,rust-kqueue-1)
          ("rust-inotify" ,rust-inotify-0.9)
          ("rust-libc" ,rust-libc-0.2)
          ("rust-mio" ,rust-mio-0.7)
@@ -30035,14 +36528,9 @@ with all line endings.")
          ("rust-walkdir" ,rust-walkdir-2)
          ("rust-winapi" ,rust-winapi-0.3))
         #:cargo-development-inputs
-        (("rust-serde-json" ,rust-serde-json-1))
-        #:phases
-        (modify-phases %standard-phases
-          (add-after 'unpack 'fix-version-requirements
-           (lambda _
-             (substitute* "Cargo.toml"
-               (("0.7.7") ,(package-version rust-mio-0.7)))
-             #t)))))
+        (("rust-serde-json" ,rust-serde-json-1)
+         ("rust-futures" ,rust-futures-0.3)
+         ("rust-tempfile" ,rust-tempfile-3))))
     (home-page "https://github.com/notify-rs/notify")
     (synopsis
       "Cross-platform filesystem notification library")
@@ -30050,6 +36538,32 @@ with all line endings.")
       "Cross-platform filesystem notification library")
     (license (list license:cc0 license:artistic2.0))))
 
+(define-public rust-noise-0.7
+  (package
+    (name "rust-noise")
+    (version "0.7.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "noise" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0hsbw9gpsz8w9msvyvddygagd9wj93hqpg5pxz388laxfkb1s1c2"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-image" ,rust-image-0.23)
+        ("rust-rand" ,rust-rand-0.7)
+        ("rust-rand-xorshift" ,rust-rand-xorshift-0.2))
+       #:cargo-development-inputs
+       (("rust-criterion" ,rust-criterion-0.3))))
+    (home-page "https://github.com/razaekel/noise-rs")
+    (synopsis "Procedural noise generation library")
+    (description "This package provides a Rust library to generate smoothly
+varying noise for textural use and graphical display.")
+    (license (list license:asl2.0 license:expat))))
+
 (define-public rust-notify-4
   (package
     (inherit rust-notify-5)
@@ -30111,10 +36625,9 @@ with all line endings.")
              (substitute* "Cargo.toml"
                (("version = \"0.3.2\"") "version = \"0.5.0\"")))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("openssl" ,openssl)
-       ("notmuch" ,notmuch)))
+     (list openssl notmuch))
     (home-page "https://github.com/vhdirk/notmuch-rs")
     (synopsis "Rust interface and bindings for Notmuch")
     (description
@@ -30318,14 +36831,14 @@ more.")
 (define-public rust-num-bigint-0.4
   (package
     (name "rust-num-bigint")
-    (version "0.4.0")
+    (version "0.4.3")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "num-bigint" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "04k5xh7d0nxay4yfb02rj841y9g5jh45d320avi53ak221y083af"))))
+        (base32 "0py73wsa5j4izhd39nkqzqv260r0ma08vy30ky54ld3vkhlbcfpr"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -30416,39 +36929,70 @@ more.")
        #:cargo-development-inputs
        (("rust-rand" ,rust-rand-0.4))))))
 
-(define-public rust-num-bigint-dig-0.6
+(define-public rust-num-bigint-dig-0.7
   (package
     (name "rust-num-bigint-dig")
-    (version "0.6.0")
+    (version "0.7.0")
     (source
-      (origin
-        (method url-fetch)
-        (uri (crate-uri "num-bigint-dig" version))
-        (file-name (string-append name "-" version ".tar.gz"))
-        (sha256
-          (base32 "1aljx3bxfnzq35i9pkbqkj0d0hc1wjc2dd60wccjqylz1wrkrl5k"))))
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "num-bigint-dig" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1004mmipvc7pvaf3kf13i1nqh3vxf789bj72d8wl51y185aywis5"))))
     (build-system cargo-build-system)
     (arguments
-      `(#:skip-build? #t
-        #:cargo-inputs
-        (("rust-autocfg" ,rust-autocfg-0.1)
-         ("rust-byteorder" ,rust-byteorder-1)
-         ("rust-lazy-static" ,rust-lazy-static-1)
-         ("rust-libm" ,rust-libm-0.2)
-         ("rust-num-integer" ,rust-num-integer-0.1)
-         ("rust-num-iter" ,rust-num-iter-0.1)
-         ("rust-num-traits" ,rust-num-traits-0.2)
-         ("rust-rand" ,rust-rand-0.7)
-         ("rust-serde" ,rust-serde-1)
-         ("rust-smallvec" ,rust-smallvec-1)
-         ("rust-zeroize" ,rust-zeroize-1))))
-    (home-page
-      "https://github.com/dignifiedquire/num-bigint")
+     `(#:cargo-inputs
+       (("rust-autocfg" ,rust-autocfg-0.1)
+        ("rust-byteorder" ,rust-byteorder-1)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-libm" ,rust-libm-0.2)
+        ("rust-num-integer" ,rust-num-integer-0.1)
+        ("rust-num-iter" ,rust-num-iter-0.1)
+        ("rust-num-traits" ,rust-num-traits-0.2)
+        ("rust-rand" ,rust-rand-0.8)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-smallvec" ,rust-smallvec-1)
+        ("rust-zeroize" ,rust-zeroize-1))
+       #:cargo-development-inputs
+       (("rust-rand" ,rust-rand-0.8)
+        ("rust-rand-chacha" ,rust-rand-chacha-0.3)
+        ("rust-rand-isaac" ,rust-rand-isaac-0.3)
+        ("rust-rand-xorshift" ,rust-rand-xorshift-0.3)
+        ("rust-serde-test" ,rust-serde-test-1))))
+    (home-page "https://github.com/dignifiedquire/num-bigint")
     (synopsis "Big integer implementation for Rust")
-    (description "This package provides a big integer implementation
-for Rust")
+    (description "This package provides a big integer implementation for
+Rust.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-num-bigint-dig-0.6
+(package
+  (inherit rust-num-bigint-dig-0.7)
+  (name "rust-num-bigint-dig")
+  (version "0.6.0")
+  (source
+   (origin
+     (method url-fetch)
+     (uri (crate-uri "num-bigint-dig" version))
+     (file-name (string-append name "-" version ".tar.gz"))
+     (sha256
+      (base32 "1aljx3bxfnzq35i9pkbqkj0d0hc1wjc2dd60wccjqylz1wrkrl5k"))))
+  (arguments
+   `(#:skip-build? #t
+     #:cargo-inputs
+     (("rust-autocfg" ,rust-autocfg-0.1)
+      ("rust-byteorder" ,rust-byteorder-1)
+      ("rust-lazy-static" ,rust-lazy-static-1)
+      ("rust-libm" ,rust-libm-0.2)
+      ("rust-num-integer" ,rust-num-integer-0.1)
+      ("rust-num-iter" ,rust-num-iter-0.1)
+      ("rust-num-traits" ,rust-num-traits-0.2)
+      ("rust-rand" ,rust-rand-0.7)
+      ("rust-serde" ,rust-serde-1)
+      ("rust-smallvec" ,rust-smallvec-1)
+      ("rust-zeroize" ,rust-zeroize-1))))))
+
 (define-public rust-num-complex-0.4
   (package
     (name "rust-num-complex")
@@ -30538,21 +37082,19 @@ for Rust")
 (define-public rust-num-cpus-1
   (package
     (name "rust-num-cpus")
-    (version "1.13.0")
+    (version "1.13.1")
     (source
-      (origin
-        (method url-fetch)
-        (uri (crate-uri "num_cpus" version))
-        (file-name
-         (string-append name "-" version ".tar.gz"))
-        (sha256
-         (base32
-          "1cv6yxhz2zbnwn8pn1yn8grg7zsnd523947fby41a737aqvryj85"))))
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "num-cpus" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "18apx62z4j4lajj2fi6r1i8slr9rs2d0xrbj2ls85qfyxck4brhr"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
-        (("rust-hermit-abi" ,rust-hermit-abi-0.1)
-         ("rust-libc" ,rust-libc-0.2))))
+       (("rust-hermit-abi" ,rust-hermit-abi-0.1)
+        ("rust-libc" ,rust-libc-0.2))))
     (home-page "https://github.com/seanmonstar/num_cpus")
     (synopsis "Get the number of CPUs on a machine")
     (description
@@ -30895,7 +37437,7 @@ mathematics.")
       (origin
         (method url-fetch)
         (uri (crate-uri "num-traits" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0c9whknf2dm74a3cqirafy6gj83a76gl56g4v3g19k6lkwz13rcj"))))
@@ -30932,7 +37474,7 @@ giga, kibi.")
       (origin
         (method url-fetch)
         (uri (crate-uri "numtoa" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1vs9rhggqbql1p26x8nkha1j06wawwgb2jp5fs88b5gi7prvvy5q"))))
@@ -30944,6 +37486,26 @@ giga, kibi.")
      "This package can convert numbers into stack-allocated byte arrays.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-obfstr-0.3
+  (package
+    (name "rust-obfstr")
+    (version "0.3.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "obfstr" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0y5azgk8ds43m1sd5pc4hhakxzxkfcfscl24y8gsbvwdznxjqavv"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/CasualX/obfstr")
+    (synopsis "Compile time string constant obfuscation for Rust")
+    (description "This package provides a compile time string constant
+obfuscation for Rust.  The string constant itself is embedded in obfuscated
+form and deobfuscated locally.")
+    (license license:expat)))
+
 (define-public rust-obj-0.9
   (package
     (name "rust-obj")
@@ -31089,10 +37651,10 @@ Foundation framework.")
      "This package provides utilities for testing Objective-C interop.")
     (license license:expat)))
 
-(define-public rust-object-0.24
+(define-public rust-object-0.28
   (package
     (name "rust-object")
-    (version "0.24.0")
+    (version "0.28.2")
     (source
      (origin
        (method url-fetch)
@@ -31101,7 +37663,7 @@ Foundation framework.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "0w21hp41mixzaavsdpjylbylh44z2b5d2wbnf5ipkvkjq38ksnqs"))))
+         "1wgv6gx69rpn4jjqs24kvafwsic1q06iaafs5mb9hy34hp7c3x89"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -31110,14 +37672,24 @@ Foundation framework.")
          ,rust-compiler-builtins-0.1)
         ("rust-crc32fast" ,rust-crc32fast-1)
         ("rust-flate2" ,rust-flate2-1)
+        ("rust-hashbrown" ,rust-hashbrown-0.11)
         ("rust-indexmap" ,rust-indexmap-1)
+        ("rust-memchr" ,rust-memchr-2)
         ("rust-rustc-std-workspace-alloc"
          ,rust-rustc-std-workspace-alloc-1)
         ("rust-rustc-std-workspace-core"
          ,rust-rustc-std-workspace-core-1)
         ("rust-wasmparser" ,rust-wasmparser-0.57))
        #:cargo-development-inputs
-       (("rust-memmap" ,rust-memmap-0.7))))
+       (("rust-memmap" ,rust-memmap-0.7))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-version-requirements
+           (lambda _
+             (substitute* "Cargo.toml"
+               (("1.6.\\*")
+                ,(package-version rust-indexmap-1)))
+             #t)))))
     (home-page "https://github.com/gimli-rs/object")
     (synopsis "Unified interface for reading and writing object file formats")
     (description
@@ -31125,6 +37697,37 @@ Foundation framework.")
 file formats.")
     (license (list license:asl2.0 license:expat))))
 
+(define-public rust-object-0.24
+  (package
+    (inherit rust-object-0.28)
+    (name "rust-object")
+    (version "0.24.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "object" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0w21hp41mixzaavsdpjylbylh44z2b5d2wbnf5ipkvkjq38ksnqs"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-compiler-builtins"
+         ,rust-compiler-builtins-0.1)
+        ("rust-crc32fast" ,rust-crc32fast-1)
+        ("rust-flate2" ,rust-flate2-1)
+        ("rust-indexmap" ,rust-indexmap-1)
+        ("rust-rustc-std-workspace-alloc"
+         ,rust-rustc-std-workspace-alloc-1)
+        ("rust-rustc-std-workspace-core"
+         ,rust-rustc-std-workspace-core-1)
+        ("rust-wasmparser" ,rust-wasmparser-0.57))
+       #:cargo-development-inputs
+       (("rust-memmap" ,rust-memmap-0.7))))))
+
 (define-public rust-object-0.23
   (package
     (inherit rust-object-0.24)
@@ -31286,6 +37889,31 @@ Things in odds may move to more appropriate crates if we find them.")
         ("rust-memchr" ,rust-memchr-2)
         ("rust-quickcheck" ,rust-quickcheck-0.4))))))
 
+(define-public rust-oid-registry-0.2
+  (package
+    (name "rust-oid-registry")
+    (version "0.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "oid-registry" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "058qip5j5y0i95ckmw67mp73372rq16ci0lcczyq9irv76r4qmgy"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-der-parser" ,rust-der-parser-6))))
+    (home-page "https://github.com/rusticata/oid-registry")
+    (synopsis "Object Identifier (OID) database")
+    (description "This crate is a helper crate, containing a database of
+OID objects.  These objects are intended for use when manipulating ASN.1
+grammars and BER/DER encodings, for example.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-onig-6
   (package
     (name "rust-onig")
@@ -31381,7 +38009,7 @@ other crates to create safe wrappers around Oniguruma.")
 (define-public rust-once-cell-1
   (package
     (name "rust-once-cell")
-    (version "1.8.0")
+    (version "1.9.0")
     (source
      (origin
        (method url-fetch)
@@ -31389,11 +38017,12 @@ other crates to create safe wrappers around Oniguruma.")
        (file-name
         (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0mkbbxg6416z11r2yzsq91cqrkj9w1iyx5hakq15h5sbnriwnbv9"))))
+        (base32 "1mfqhrsgi368x92bwnq3vi3p5nv0n1qlrn69gfflhvkfkxfm2cns"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
-       (("rust-parking-lot" ,rust-parking-lot-0.11))
+       (("rust-atomic-polyfill" ,rust-atomic-polyfill-0.1)
+        ("rust-parking-lot" ,rust-parking-lot-0.11))
        #:cargo-development-inputs
        (("rust-crossbeam-utils" ,rust-crossbeam-utils-0.7)
         ("rust-lazy-static" ,rust-lazy-static-1)
@@ -31443,7 +38072,7 @@ contents.")
     (build-system cargo-build-system)
     (arguments `(#:skip-build? #t))
     (home-page "https://hg.sr.ht/~icefox/oorandom")
-    (synopsis "A tiny, robust PRNG implementation.")
+    (synopsis "Tiny, robust PRNG implementation")
     (description
       "This package provides a tiny, robust PRNG implementation.")
     (license license:expat)))
@@ -31483,17 +38112,17 @@ contents.")
         (base32
          "02942l2gc7w5r4js7i9063x99szic5mzzk1055j83v4diqpbpxck"))))))
 
-(define-public rust-open-1
+(define-public rust-open-2
   (package
     (name "rust-open")
-    (version "1.7.1")
+    (version "2.0.2")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "open" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "00828zcxdy3r38inz48jgnszgvqgi1a3bi2rrhij86mqsqq7msnw"))))
+        (base32 "1dq9c6dgq7iv5kvqfk8gvkfq34j5pdinfcs1hbdd4x6i62vf8vhp"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -31507,6 +38136,24 @@ contents.")
 the system.")
     (license license:expat)))
 
+(define-public rust-open-1
+  (package
+    (inherit rust-open-2)
+    (name "rust-open")
+    (version "1.7.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "open" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "00828zcxdy3r38inz48jgnszgvqgi1a3bi2rrhij86mqsqq7msnw"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-pathdiff" ,rust-pathdiff-0.2)
+        ("rust-winapi" ,rust-winapi-0.3))))))
+
 (define-public rust-opener-0.4
   (package
     (name "rust-opener")
@@ -31626,7 +38273,7 @@ the default program configured on the system.")
       (origin
         (method url-fetch)
         (uri (crate-uri "openssl-probe" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1pijrdifgsdwd45b08c2g0dsmnhz7c3kmagb70839ngrd7d29bvp"))))
@@ -31642,14 +38289,14 @@ system for OpenSSL.")
 (define-public rust-openssl-sys-0.9
   (package
     (name "rust-openssl-sys")
-    (version "0.9.64")
+    (version "0.9.68")
     (source
       (origin
         (method url-fetch)
         (uri (crate-uri "openssl-sys" version))
         (file-name (string-append name "-" version ".tar.gz"))
         (sha256
-         (base32 "1bsim2zk69q1dw6rixn48l1ci8bmz5kvbkgsks2ci079w0pzr7i0"))
+         (base32 "0l2ikxygkza3s5q3lvng4mhisdp2vdrvzkhpwhkx8vgnscjiymqw"))
         (patches (search-patches "rust-openssl-sys-no-vendor.patch"))))
     (build-system cargo-build-system)
     (arguments
@@ -31661,9 +38308,9 @@ system for OpenSSL.")
         ("rust-pkg-config" ,rust-pkg-config-0.3)
         ("rust-vcpkg" ,rust-vcpkg-0.2))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (home-page "https://github.com/sfackler/rust-openssl")
     (synopsis "FFI bindings to OpenSSL")
     (description
@@ -31733,6 +38380,30 @@ system for OpenSSL.")
      "Extra FFI bindings to OpenSSL that require a C shim.")
     (license license:expat)))
 
+(define-public rust-opml-1
+  (package
+    (name "rust-opml")
+    (version "1.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "opml" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0zr7f101inkz3rknl0r3q0qkklfxhqrji7yxmqixajfn3m5mbjfa"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-regex" ,rust-regex-1)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-strong-xml" ,rust-strong-xml-0.6)
+        ("rust-thiserror" ,rust-thiserror-1))))
+    (home-page "https://github.com/Holllo/opml")
+    (synopsis "OPML parser for Rust")
+    (description "This package provides an OPML parser for Rust.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-ord-subset-3
   (package
     (name "rust-ord-subset")
@@ -31881,10 +38552,10 @@ under its new name.")
      "This library detects the operating system type and version.")
     (license license:expat)))
 
-(define-public rust-os-pipe-0.8
+(define-public rust-os-pipe-0.9
   (package
     (name "rust-os-pipe")
-    (version "0.8.2")
+    (version "0.9.2")
     (source
      (origin
        (method url-fetch)
@@ -31893,12 +38564,12 @@ under its new name.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "049ax8shxik7mm68r2nf7xnrcq3z3p7hz54sbrcxwywxqsjdzs41"))))
+         "04yjs1hf88jjm17g8a2lr7ibxyyg460rzbgcw9f1yzihq833y8zv"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-nix" ,rust-nix-0.15)
+       (("rust-libc" ,rust-libc-0.2)
         ("rust-winapi" ,rust-winapi-0.3))))
     (home-page
      "https://github.com/oconnor663/os_pipe.rs")
@@ -31908,6 +38579,27 @@ under its new name.")
      "A cross-platform library for opening OS pipes.")
     (license license:expat)))
 
+(define-public rust-os-pipe-0.5
+  (package
+    (inherit rust-os-pipe-0.9)
+    (name "rust-os-pipe")
+    (version "0.5.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "os-pipe" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1ccwc7caq3hhgxyrglkl2fw8qzkx0kxanh9azs852w9f0jrzp2wr"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-kernel32-sys" ,rust-kernel32-sys-0.2)
+        ("rust-nix" ,rust-nix-0.8)
+        ("rust-winapi" ,rust-winapi-0.2))))))
+
 (define-public rust-os-str-bytes-2
   (package
     (name "rust-os-str-bytes")
@@ -31932,6 +38624,55 @@ under its new name.")
 platform-native strings.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-ouroboros-macro-0.14
+  (package
+    (name "rust-ouroboros-macro")
+    (version "0.14.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "ouroboros_macro" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "11cav04x82liknlrv50lpl1i1ln2jw4isdqzdjnjsg0pcpvwik9r"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-inflector" ,rust-inflector-0.11)
+        ("rust-proc-macro-error" ,rust-proc-macro-error-1)
+        ("rust-proc-macro2" ,rust-proc-macro2-1)
+        ("rust-quote" ,rust-quote-1)
+        ("rust-syn" ,rust-syn-1))))
+    (home-page "https://github.com/joshua-maros/ouroboros")
+    (synopsis "Proc macro for ouroboros")
+    (description
+     "This package provides a proc macro for the @code{ouroboros} crate.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-ouroboros-0.14
+  (package
+    (name "rust-ouroboros")
+    (version "0.14.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "ouroboros" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1ih1lna1d2is3a6aicmc7lpfhqmg046kssxpryk24kwg8j42ymh6"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-aliasable" ,rust-aliasable-0.1)
+        ("rust-ouroboros-macro" ,rust-ouroboros-macro-0.14)
+        ("rust-stable-deref-trait" ,rust-stable-deref-trait-1))))
+    (home-page "https://github.com/joshua-maros/ouroboros")
+    (synopsis "Self-referential struct generation")
+    (description
+     "Easy, safe self-referential struct generation for Rust.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-output-vt100-0.1
   (package
     (name "rust-output-vt100")
@@ -32007,7 +38748,7 @@ platform-native strings.")
       (origin
         (method url-fetch)
         (uri (crate-uri "owning_ref" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1kjj9m28wjv452jw49p1mp3d8ql058x78v4bz00avr7rvsnmpxbg"))))
@@ -32056,7 +38797,7 @@ normally prevent moving a type that has been borrowed from.")
 (define-public rust-packed-simd-2-0.3
   (package
     (name "rust-packed-simd-2")
-    (version "0.3.4")
+    (version "0.3.6")
     (source
      (origin
        (method url-fetch)
@@ -32064,19 +38805,19 @@ normally prevent moving a type that has been borrowed from.")
        (file-name
         (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32
-         "05wsm2yxxpwww6a74hi8l80qszisfar5d7whf2pd87wn5x4y0y1j"))
+        (base32 "1i8hmhsyzqsas2rhxg088mcwvzljrqhvf8lfz8b1dj6g2rkw1h3i"))
        (modules '((guix build utils)))
        (snippet
         '(begin
            ;; Unpin the dependencies.
            (substitute* "Cargo.toml"
-             (("=0.2.52") "^0.2.52")
-             (("=0.3.2") "^0.3.2"))
+             (("=0.2.73") "^0.2.73")
+             (("=0.3.23") "^0.3.23"))
            #t))))
     (build-system cargo-build-system)
     (arguments
      `(#:tests? #f  ; error[E0432]: unresolved import `packed_simd`
+       #:skip-build? #t
        #:cargo-inputs
        (("rust-cfg-if" ,rust-cfg-if-0.1)
         ("rust-core-arch" ,rust-core-arch-0.1)
@@ -32225,6 +38966,92 @@ normally prevent moving a type that has been borrowed from.")
     (description "@code{pancurses} is a @code{curses} library for Rust.")
     (license license:expat)))
 
+(define-public rust-parasail-sys-0.2
+  (package
+    (name "rust-parasail-sys")
+    (version "0.2.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "parasail-sys" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "156fwfdbcfpzmx4k274jqdp8jzmllmdnhd1ibnh7kgd9cp7ni6ac"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-build-flags '("-vv")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'set-shell-for-configure-script
+           (lambda _
+             (setenv "SHELL" (which "sh"))
+             (setenv "CONFIG_SHELL" (which "sh")))))
+       #:cargo-inputs
+       (("rust-libc" ,rust-libc-0.2))))
+    (inputs
+     (list zlib))
+    (native-inputs
+     (list libtool))
+    (home-page "https://github.com/anp/parasailors")
+    (synopsis "Bindings to the parasail pairwise genetic sequence alignment library")
+    (description
+     "This packgae provides native bindings to the parasail pairwise genetic
+sequence alignment library.")
+    (license license:expat)))
+
+(define-public rust-parasailors-0.3
+  (package
+    (name "rust-parasailors")
+    (version "0.3.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "parasailors" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0qr1qwzrq289njc3aawih15n9a8yy169wyb1gzgwzga0r25dxi3g"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-build-flags '("-vv")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'set-shell-for-configure-script
+           (lambda _
+             (setenv "SHELL" (which "sh"))
+             (setenv "CONFIG_SHELL" (which "sh")))))
+       #:cargo-inputs
+       (("rust-libc" ,rust-libc-0.2)
+        ("rust-parasail-sys" ,rust-parasail-sys-0.2))))
+    (inputs
+     (list zlib))
+    (native-inputs
+     (list libtool))
+    (home-page "https://github.com/anp/parasailors")
+    (synopsis "SIMD accelerated pairwise genetic sequence alignment")
+    (description "This package provides SIMD accelerated pairwise genetic
+sequence alignment tools.")
+    (license license:expat)))
+
+(define-public rust-paris-1
+  (package
+    (name "rust-paris")
+    (version "1.5.9")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "paris" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0i8dy41v7malj279snap1z1awpyd7hfr1nc1s7kr2dvn8xhqb786"))))
+    (build-system cargo-build-system)
+    (arguments `(#:cargo-inputs (("rust-chrono" ,rust-chrono-0.4))))
+    (home-page "https://github.com/0x20F/paris")
+    (synopsis "Simple logger for CLI apps or things you want in the terminal")
+    (description
+     "This package provides a simple logger for CLI apps or other things you
+want in the terminal.")
+    (license license:mpl2.0)))
+
 (define-public rust-parity-tokio-ipc-0.4
   (package
     (name "rust-parity-tokio-ipc")
@@ -32285,7 +39112,7 @@ normally prevent moving a type that has been borrowed from.")
       (origin
         (method url-fetch)
         (uri (crate-uri "parity-wasm" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "03qycy21avz4970zc7aj8rj5h4wvi4qsrc90a6hpws1a56mglf8y"))))
@@ -32697,6 +39524,91 @@ synchronization primitives.")
 file and the generated @file{.rs} file.")
     (license license:asl2.0)))
 
+(define-public rust-parquet-format-async-temp-0.2
+  (package
+    (name "rust-parquet-format-async-temp")
+    (version "0.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "parquet-format-async-temp" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0i7mn4x64d8g6d046y9kpb55dz8v0z67cz7lhgncxs9zr3ww5aq3"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-async-trait" ,rust-async-trait-0.1)
+        ("rust-byteorder" ,rust-byteorder-1)
+        ("rust-futures" ,rust-futures-0.3)
+        ("rust-integer-encoding" ,rust-integer-encoding-3)
+        ("rust-ordered-float" ,rust-ordered-float-1))))
+    (home-page "https://github.com/sunchao/parquet-format-rs")
+    (synopsis "Temporary crate containing thrift library + parquet definitions")
+    (description
+     "This is a temporary crate containing thrift library and parquet
+definitions compiled to support read+write async.")
+    (license license:asl2.0)))
+
+(define-public rust-parquet2-0.6
+  (package
+    (name "rust-parquet2")
+    (version "0.6.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "parquet2" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0v9xc20wmn2r1pyaxqd8zf9vnschbf8r00c5kg9332fqrmadz0nv"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-async-stream" ,rust-async-stream-0.3)
+        ("rust-bitpacking" ,rust-bitpacking-0.8)
+        ("rust-brotli" ,rust-brotli-3)
+        ("rust-flate2" ,rust-flate2-1)
+        ("rust-futures" ,rust-futures-0.3)
+        ("rust-lz4" ,rust-lz4-1)
+        ("rust-parquet-format-async-temp" ,rust-parquet-format-async-temp-0.2)
+        ("rust-snap" ,rust-snap-1)
+        ("rust-streaming-decompression" ,rust-streaming-decompression-0.1)
+        ("rust-zstd" ,rust-zstd-0.9))))
+    (home-page "https://crates.io/crates/parquet2")
+    (synopsis "Safe implementation of Parquet IO")
+    (description
+     "Parquet2 is a re-write of the official Parquet crate with performance,
+parallelism and safety in mind.")
+    (license license:asl2.0)))
+
+(define-public rust-parquet2-0.4
+  (package
+    (inherit rust-parquet2-0.6)
+    (name "rust-parquet2")
+    (version "0.4.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "parquet2" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1rsmrjy0r8q56gygycc5j0kgdbvrazh6xg6z8vcdyhn8r1v8yxbk"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-async-stream" ,rust-async-stream-0.3)
+        ("rust-bitpacking" ,rust-bitpacking-0.8)
+        ("rust-brotli" ,rust-brotli-3)
+        ("rust-flate2" ,rust-flate2-1)
+        ("rust-futures" ,rust-futures-0.3)
+        ("rust-lz4" ,rust-lz4-1)
+        ("rust-parquet-format-async-temp" ,rust-parquet-format-async-temp-0.2)
+        ("rust-snap" ,rust-snap-1)
+        ("rust-streaming-iterator" ,rust-streaming-iterator-0.1)
+        ("rust-zstd" ,rust-zstd-0.9))))))
+
 (define-public rust-parse-zoneinfo-0.3
   (package
     (name "rust-parse-zoneinfo")
@@ -32772,6 +39684,34 @@ and would-block I/O operations.")
         ("rust-tokio-core" ,rust-tokio-core-0.1))))
     (license license:bsd-3)))
 
+(define-public rust-password-hash-0.3
+  (package
+    (name "rust-password-hash")
+    (version "0.3.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "password-hash" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1n7ig9j5x2q0fk12nny40faggrs0ra5bbxp6gz5yghfwlqw1ay8x"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-base64ct" ,rust-base64ct-1)
+        ("rust-rand-core" ,rust-rand-core-0.6)
+        ("rust-subtle" ,rust-subtle-2))))
+    (home-page "https://github.com/RustCrypto/traits/tree/master/password-hash")
+    (synopsis
+     "Traits describing the functionality of password hashing algorithms")
+    (description
+     "This package provides traits which describe the functionality of
+password hashing algorithms, as well as a `no_std`-friendly implementation of
+the PHC string format (a well-defined subset of the Modular Crypt
+Format (MCF).")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-paste-1
   (package
     (name "rust-paste")
@@ -32923,8 +39863,66 @@ directory path to the provided path.")
         (base32
          "0cfg3isnx6mf3wbi7rsg4nmvywby40sbcs589n20fgi09l4p1gx3"))))))
 
+(define-public rust-pbkdf2-0.10
+  (package
+    (name "rust-pbkdf2")
+    (version "0.10.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "pbkdf2" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0d3l06x5mg96njxfsksjwl6440alf72qh4rwrpnq4fwmrz1qqqm4"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-digest" ,rust-digest-0.10)
+        ("rust-hmac" ,rust-hmac-0.12)
+        ("rust-password-hash" ,rust-password-hash-0.3)
+        ("rust-rayon" ,rust-rayon-1)
+        ("rust-sha-1" ,rust-sha-1-0.10)
+        ("rust-sha2" ,rust-sha2-0.10))
+       #:cargo-development-inputs
+       (("rust-hex-literal" ,rust-hex-literal-0.3)
+        ("rust-hmac" ,rust-hmac-0.12)
+        ("rust-sha-1" ,rust-sha-1-0.10)
+        ("rust-sha2" ,rust-sha2-0.10)
+        ("rust-streebog" ,rust-streebog-0.10))))
+    (home-page "https://github.com/RustCrypto/password-hashing")
+    (synopsis "Generic implementation of PBKDF2")
+    (description "This package contains a collection of password hashing
+algorithms, otherwise known as password-based key derivation functions, written
+in pure Rust.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-pbkdf2-0.9
+  (package
+    (inherit rust-pbkdf2-0.10)
+    (name "rust-pbkdf2")
+    (version "0.9.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "pbkdf2" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0fa7j0gdgghk64qlhzdv32yg52p0cfaz5ifhk7i4pfm1wsy98n7h"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-crypto-mac" ,rust-crypto-mac-0.11)
+        ("rust-hmac" ,rust-hmac-0.11)
+        ("rust-password-hash" ,rust-password-hash-0.3)
+        ("rust-rayon" ,rust-rayon-1)
+        ("rust-sha-1" ,rust-sha-1-0.9)
+        ("rust-sha2" ,rust-sha2-0.9))))))
+
 (define-public rust-pbkdf2-0.4
   (package
+    (inherit rust-pbkdf2-0.10)
     (name "rust-pbkdf2")
     (version "0.4.0")
     (source
@@ -32936,7 +39934,6 @@ directory path to the provided path.")
         (sha256
          (base32
           "1g8cm3nwrsydazjc1gjs549hzafgxq8qb49gixrhl3qrd9calvi1"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-base64" ,rust-base64-0.12)
@@ -32950,13 +39947,7 @@ directory path to the provided path.")
        #:cargo-development-inputs
        (("rust-hmac" ,rust-hmac-0.8)
         ("rust-sha-1" ,rust-sha-1-0.9)
-        ("rust-sha2" ,rust-sha2-0.9))))
-    (home-page "https://github.com/RustCrypto/password-hashing")
-    (synopsis "Generic implementation of PBKDF2")
-    (description "This package contains a collection of password hashing
-algorithms, otherwise known as password-based key derivation functions, written
-in pure Rust.")
-    (license (list license:expat license:asl2.0))))
+        ("rust-sha2" ,rust-sha2-0.9))))))
 
 (define-public rust-pbkdf2-0.3
   (package
@@ -33006,7 +39997,7 @@ in pure Rust.")
        (("rust-libc" ,rust-libc-0.2)
         ("rust-pkg-config" ,rust-pkg-config-0.3)
         ("rust-winapi" ,rust-winapi-0.3))))
-    (inputs `(("libpcap" ,libpcap)))
+    (inputs (list libpcap))
     (home-page "https://github.com/jmmk/rustcap")
     (synopsis "Low-level bindings to libpcap")
     (description "This package provides low-level Rust bindings to the libpcap
@@ -33034,8 +40025,7 @@ library.")
         ("rust-pcre2-sys" ,rust-pcre2-sys-0.2)
         ("rust-thread-local" ,rust-thread-local-1))))
     (native-inputs
-     `(("pcre2" ,pcre2)
-       ("pkg-config" ,pkg-config)))
+     (list pcre2 pkg-config))
     (home-page "https://github.com/BurntSushi/rust-pcre2")
     (synopsis "High level wrapper library for PCRE2")
     (description
@@ -33065,8 +40055,7 @@ library.")
         ("rust-pkg-config" ,rust-pkg-config-0.3)
         ("rust-cc" ,rust-cc-1))))
     (native-inputs
-     `(("pcre2" ,pcre2)
-       ("pkg-config" ,pkg-config)))
+     (list pcre2 pkg-config))
     (home-page
      "https://github.com/BurntSushi/rust-pcre2")
     (synopsis "Low level bindings to PCRE2")
@@ -33172,7 +40161,7 @@ pdqsort.")
       (origin
         (method url-fetch)
         (uri (crate-uri "peeking_take_while" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "16bhqr6rdyrp12zv381cxaaqqd0pwysvm1q8h2ygihvypvfprc8r"))))
@@ -33280,18 +40269,68 @@ procedural macros for rust-peg.  To use rust-peg, see the peg package.")
 runtime support for rust-peg grammars.  To use rust-peg, see the peg crate.")
     (license license:expat)))
 
-(define-public rust-percent-encoding-2
+(define-public rust-pem-1
   (package
-    (name "rust-percent-encoding")
-    (version "2.1.0")
+    (name "rust-pem")
+    (version "1.0.2")
     (source
       (origin
         (method url-fetch)
-        (uri (crate-uri "percent-encoding" version))
-        (file-name (string-append name "-" version ".crate"))
+        (uri (crate-uri "pem" version))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
-         (base32
-          "0bp3zrsk3kr47fbpipyczidbbx4g54lzxdm77ni1i3qws10mdzfl"))))
+          (base32 "0iqrvfnm71x9pvff39d5ajwn3gc9glxlv4d4h22max7342db18z9"))))
+    (build-system cargo-build-system)
+    (arguments
+      `(#:cargo-inputs
+        (("rust-base64" ,rust-base64-0.13))
+        #:cargo-development-inputs
+        (("rust-criterion" ,rust-criterion-0.3))))
+    (home-page "https://github.com/jcreekmore/pem-rs")
+    (synopsis "Parse and encode PEM-encoded data")
+    (description
+     "This package provides a Rust library for parsing and encoding
+PEM-encoded data.")
+    (license license:expat)))
+
+(define-public rust-pem-rfc7468-0.2
+  (package
+    (name "rust-pem-rfc7468")
+    (version "0.2.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "pem-rfc7468" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1m1c9jypydzabg4yscplmvff7pdcc8gg4cqg081hnlf03hxkmsc4"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs (("rust-base64ct" ,rust-base64ct-1))))
+    (home-page "https://github.com/RustCrypto/formats/tree/master/pem-rfc7468")
+    (synopsis
+     "PEM Encoding implementing a subset of Privacy-Enhanced Mail encoding")
+    (description
+     "This packages provides PEM Encoding (RFC 7468) for PKIX, PKCS, and CMS
+Structures, implementing a strict subset of the original Privacy-Enhanced Mail
+encoding intended specifically for use with cryptographic keys, certificates,
+and other messages.  It provides a no_std-friendly, constant-time
+implementation suitable for use with cryptographic private keys.")
+    (license (list license:asl2.0 license:expat))))
+
+(define-public rust-percent-encoding-2
+  (package
+    (name "rust-percent-encoding")
+    (version "2.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "percent-encoding" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0bp3zrsk3kr47fbpipyczidbbx4g54lzxdm77ni1i3qws10mdzfl"))))
     (build-system cargo-build-system)
     (home-page "https://github.com/servo/rust-url/")
     (synopsis "Percent encoding and decoding")
@@ -33308,7 +40347,7 @@ runtime support for rust-peg grammars.  To use rust-peg, see the peg crate.")
       (origin
         (method url-fetch)
         (uri (crate-uri "percent-encoding" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0cgq08v1fvr6bs5fvy390cz830lq4fak8havdasdacxcw790s09i"))))))
@@ -33394,7 +40433,7 @@ perf_event_open system call, with associated types and constants.")
       (origin
         (method url-fetch)
         (uri (crate-uri "permutohedron" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0b1pzh48j86v46wxngch6k1kx9cdw3jr3lwa86gd6jd4bmxzz1xn"))))
@@ -33511,8 +40550,36 @@ algorithm.")
      "Pest meta language parser and validator.")
     (license (list license:asl2.0 license:expat))))
 
+(define-public rust-petgraph-0.6
+  (package
+    (name "rust-petgraph")
+    (version "0.6.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "petgraph" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0kw27zzhsa82d4qpkrz91vznyxi3wm0qg0i84grfaqqbkpxa44sa"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-fixedbitset" ,rust-fixedbitset-0.4)
+        ("rust-indexmap" ,rust-indexmap-1)
+        ("rust-quickcheck" ,rust-quickcheck-0.8)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-derive" ,rust-serde-derive-1))))
+    (home-page "https://github.com/petgraph/petgraph")
+    (synopsis "Graph data structure library")
+    (description
+     "This crate is a graph data structure library.  It provides graph types
+and graph algorithms.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-petgraph-0.5
   (package
+    (inherit rust-petgraph-0.6)
     (name "rust-petgraph")
     (version "0.5.1")
     (source
@@ -33522,9 +40589,7 @@ algorithm.")
        (file-name
         (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32
-         "1dzxda6z17sfxly11m8ja3iargh73pw0s1sdgjyp0qp5dm51cza6"))))
-    (build-system cargo-build-system)
+        (base32 "1dzxda6z17sfxly11m8ja3iargh73pw0s1sdgjyp0qp5dm51cza6"))))
     (arguments
      `(#:cargo-inputs
        (("rust-fixedbitset" ,rust-fixedbitset-0.2)
@@ -33536,13 +40601,7 @@ algorithm.")
        (("rust-defmac" ,rust-defmac-0.1)
         ("rust-itertools" ,rust-itertools-0.8)
         ("rust-odds" ,rust-odds-0.2)
-        ("rust-rand" ,rust-rand-0.5))))
-    (home-page "https://github.com/petgraph/petgraph")
-    (synopsis "Graph data structure library")
-    (description
-     "Graph data structure library.  Provides graph types and graph
-algorithms.")
-    (license (list license:expat license:asl2.0))))
+        ("rust-rand" ,rust-rand-0.5))))))
 
 (define-public rust-petgraph-0.4
   (package
@@ -33578,8 +40637,33 @@ algorithms.")
                (("fn dot\\(\\) \\{" all)
                 (string-append "#[ignore] " all))))))))))
 
+(define-public rust-phf-0.10
+  (package
+    (name "rust-phf")
+    (version "0.10.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "phf" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "17s0k0z1rjczk37cpbmn718h7dkqci1kk9w2spbmjjwc06qkvz5r"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-phf-macros" ,rust-phf-macros-0.10)
+        ("rust-phf-shared" ,rust-phf-shared-0.10)
+        ("rust-proc-macro-hack" ,rust-proc-macro-hack-0.5))))
+    (home-page "https://github.com/sfackler/rust-phf")
+    (synopsis "Runtime support for perfect hash function data structures")
+    (description "This package provides runtime support for perfect hash
+function data structures.")
+    (license license:expat)))
+
 (define-public rust-phf-0.8
   (package
+    (inherit rust-phf-0.10)
     (name "rust-phf")
     (version "0.8.0")
     (source
@@ -33591,18 +40675,12 @@ algorithms.")
         (sha256
          (base32
           "04pyv8bzqvw69rd5dynd5nb85py1hf7wa4ixyhrvdz1l5qin3yrx"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-proc-macro-hack" ,rust-proc-macro-hack-0.5)
         ("rust-phf-shared" ,rust-phf-shared-0.8)
-        ("rust-phf-macros" ,rust-phf-macros-0.8))))
-    (home-page "https://github.com/sfackler/rust-phf")
-    (synopsis "Runtime support for perfect hash function data structures")
-    (description "This package provides runtime support for perfect hash
-function data structures.")
-    (license license:expat)))
+        ("rust-phf-macros" ,rust-phf-macros-0.8))))))
 
 (define-public rust-phf-0.7
   (package
@@ -33629,8 +40707,31 @@ function data structures.")
      "Runtime support for perfect hash function data structures.")
     (license license:expat)))
 
+(define-public rust-phf-codegen-0.10
+  (package
+    (name "rust-phf-codegen")
+    (version "0.10.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "phf_codegen" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1k8kdad9wk2d5972k6jmjki2xpdy2ky4zd19rv7ybm2dpjlc7cag"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-phf-generator" ,rust-phf-generator-0.10)
+        ("rust-phf-shared" ,rust-phf-shared-0.10))))
+    (home-page "https://github.com/sfackler/rust-phf")
+    (synopsis "Codegen library for PHF types")
+    (description "Codegen library for PHF types.")
+    (license license:expat)))
+
 (define-public rust-phf-codegen-0.8
   (package
+    (inherit rust-phf-codegen-0.10)
     (name "rust-phf-codegen")
     (version "0.8.0")
     (source
@@ -33642,16 +40743,11 @@ function data structures.")
         (sha256
          (base32
           "05d8w7aqqjb6039pfm6404gk5dlwrrf97kiy1n21212vb1hyxzyb"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-phf-generator" ,rust-phf-generator-0.8)
-        ("rust-phf-shared" ,rust-phf-shared-0.8))))
-    (home-page "https://github.com/sfackler/rust-phf")
-    (synopsis "Codegen library for PHF types")
-    (description "Codegen library for PHF types.")
-    (license license:expat)))
+        ("rust-phf-shared" ,rust-phf-shared-0.8))))))
 
 (define-public rust-phf-codegen-0.7
   (package
@@ -33677,8 +40773,32 @@ function data structures.")
     (description "Codegen library for PHF types.")
     (license license:expat)))
 
+(define-public rust-phf-generator-0.10
+  (package
+    (name "rust-phf-generator")
+    (version "0.10.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "phf_generator" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1mlq6hlajsvlsx6rhw49g9ricsm017lrxmgmmbk85sxm7f4qaljx"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-criterion" ,rust-criterion-0.3)
+        ("rust-phf-shared" ,rust-phf-shared-0.10)
+        ("rust-rand" ,rust-rand-0.8))))
+    (home-page "https://github.com/sfackler/rust-phf")
+    (synopsis "PHF generation logic")
+    (description "PHF generation logic.")
+    (license license:expat)))
+
 (define-public rust-phf-generator-0.8
   (package
+    (inherit rust-phf-generator-0.10)
     (name "rust-phf-generator")
     (version "0.8.0")
     (source
@@ -33690,17 +40810,12 @@ function data structures.")
         (sha256
          (base32
           "09i5338d1kixq6a60fcayz6awgxjlxcfw9ic5f02abbgr067ydhp"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-criterion" ,rust-criterion-0.3)
         ("rust-rand" ,rust-rand-0.7)
-        ("rust-phf-shared" ,rust-phf-shared-0.8))))
-    (home-page "https://github.com/sfackler/rust-phf")
-    (synopsis "PHF generation logic")
-    (description "PHF generation logic.")
-    (license license:expat)))
+        ("rust-phf-shared" ,rust-phf-shared-0.8))))))
 
 (define-public rust-phf-generator-0.7
   (package
@@ -33725,8 +40840,37 @@ function data structures.")
     (description "PHF generation logic")
     (license license:expat)))
 
+(define-public rust-phf-macros-0.10
+  (package
+    (name "rust-phf-macros")
+    (version "0.10.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "phf_macros" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1q5ljwvb10dx188i6jxzckqfimjw5pm2p4kkvmhg2q6m9lcg7zaq"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-phf-generator" ,rust-phf-generator-0.10)
+        ("rust-phf-shared" ,rust-phf-shared-0.10)
+        ("rust-proc-macro-hack" ,rust-proc-macro-hack-0.5)
+        ("rust-proc-macro2" ,rust-proc-macro2-1)
+        ("rust-quote" ,rust-quote-1)
+        ("rust-syn" ,rust-syn-1)
+        ("rust-unicase" ,rust-unicase-2))))
+    (home-page "https://github.com/sfackler/rust-phf")
+    (synopsis "Macros to generate types in the phf crate")
+    (description
+     "This package contains macros to generate types in the phf crate.")
+    (license license:expat)))
+
 (define-public rust-phf-macros-0.8
   (package
+    (inherit rust-phf-macros-0.10)
     (name "rust-phf-macros")
     (version "0.8.0")
     (source
@@ -33738,7 +40882,6 @@ function data structures.")
         (sha256
          (base32
           "170qm6yqn6b9mjlwb2xmm3iad9d5nzwgfawfwy7zr7s2zwcdwvvz"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
@@ -33747,12 +40890,7 @@ function data structures.")
         ("rust-phf-shared" ,rust-phf-shared-0.8)
         ("rust-proc-macro2" ,rust-proc-macro2-1)
         ("rust-syn" ,rust-syn-1)
-        ("rust-quote" ,rust-quote-1))))
-    (home-page "https://github.com/sfackler/rust-phf")
-    (synopsis "Macros to generate types in the phf crate")
-    (description
-     "This package contains macros to generate types in the phf crate.")
-    (license license:expat)))
+        ("rust-quote" ,rust-quote-1))))))
 
 (define-public rust-phf-macros-0.7
   (package
@@ -33786,8 +40924,33 @@ function data structures.")
      "Macros to generate types in the phf crate.")
     (license license:expat)))
 
+(define-public rust-phf-shared-0.10
+  (package
+    (name "rust-phf-shared")
+    (version "0.10.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "phf_shared" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "15n02nc8yqpd8hbxngblar2g53p3nllc93d8s8ih3p5cf7bnlydn"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-siphasher" ,rust-siphasher-0.3)
+        ("rust-uncased" ,rust-uncased-0.9)
+        ("rust-unicase" ,rust-unicase-2))))
+    (home-page "https://github.com/sfackler/rust-phf")
+    (synopsis "Support code shared by PHF libraries")
+    (description
+     "This package provides support code shared by PHF libraries.")
+    (license license:expat)))
+
 (define-public rust-phf-shared-0.8
   (package
+    (inherit rust-phf-shared-0.10)
     (name "rust-phf-shared")
     (version "0.8.0")
     (source
@@ -33799,17 +40962,11 @@ function data structures.")
         (sha256
          (base32
           "1xssnqrrcn0nr9ayqrnm8xm37ac4xvwcx8pax7jxss7yxawzh360"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-siphasher" ,rust-siphasher-0.3)
-        ("rust-unicase" ,rust-unicase-2))))
-    (home-page "https://github.com/sfackler/rust-phf")
-    (synopsis "Support code shared by PHF libraries")
-    (description
-     "This package provides support code shared by PHF libraries.")
-    (license license:expat)))
+        ("rust-unicase" ,rust-unicase-2))))))
 
 (define-public rust-phf-shared-0.7
   (package
@@ -33843,7 +41000,7 @@ function data structures.")
       (origin
         (method url-fetch)
         (uri (crate-uri "pico-sys" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1q5pg0ms6szz6b5h26h4k40zb76zbwwjgyigac4wly9qngdj4yl5"))))
@@ -33967,18 +41124,19 @@ crate.")
 (define-public rust-pin-project-lite-0.2
   (package
     (name "rust-pin-project-lite")
-    (version "0.2.4")
+    (version "0.2.7")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "pin-project-lite" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "09x8chns8apal89pndqdrr0c2nv8jw6nmi8hl38acjbc6sprg5j3"))))
+        (base32 "0hwl8iyx3h9i3i3jr2vqj07nf4ay1v1w1ga29cbjmdd6d4fd2ccd"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-development-inputs
-       (("rust-rustversion" ,rust-rustversion-1)
+       (("rust-macrotest" ,rust-macrotest-1)
+        ("rust-rustversion" ,rust-rustversion-1)
         ("rust-static-assertions" ,rust-static-assertions-1)
         ("rust-trybuild" ,rust-trybuild-1))))
     (home-page "https://github.com/taiki-e/pin-project-lite")
@@ -34023,18 +41181,107 @@ written with declarative macros.")
     (description "This crate provides utilities for pinning values on the stack.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-pkcs1-0.2
+  (package
+    (name "rust-pkcs1")
+    (version "0.2.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "pkcs1" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0b2f1a0lf5h53zrjvcqbxzjhh89gcfa1myhf6z7w10ypg61fwsqi"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-der" ,rust-der-0.4)
+        ("rust-pem-rfc7468" ,rust-pem-rfc7468-0.2)
+        ("rust-zeroize" ,rust-zeroize-1))))
+    (home-page "https://github.com/RustCrypto/formats/tree/master/pkcs1")
+    (synopsis "Implementation of Public-Key Cryptography Standards (PKCS) #1")
+    (description
+     "This package provides a pure Rust implementation of Public-Key
+Cryptography Standards (PKCS) #1: RSA Cryptography Specifications Version 2.2
+(RFC 8017)")
+    (license (list license:asl2.0 license:expat))))
+
+(define-public rust-pkcs5-0.3
+  (package
+    (name "rust-pkcs5")
+    (version "0.3.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "pkcs5" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1m3xrrwwbn9883bylgjzssfh3w1lbl7fhkb3ndz721rf27pca8sl"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-aes" ,rust-aes-0.7)
+        ("rust-block-modes" ,rust-block-modes-0.8)
+        ("rust-der" ,rust-der-0.4)
+        ("rust-des" ,rust-des-0.7)
+        ("rust-hmac" ,rust-hmac-0.11)
+        ("rust-pbkdf2" ,rust-pbkdf2-0.9)
+        ("rust-scrypt" ,rust-scrypt-0.8)
+        ("rust-sha-1" ,rust-sha-1-0.9)
+        ("rust-sha2" ,rust-sha2-0.9)
+        ("rust-spki" ,rust-spki-0.4))))
+    (home-page "https://github.com/RustCrypto/formats/tree/master/pkcs5")
+    (synopsis "Implementation of Public-Key Cryptography Standards (PKCS) #5")
+    (description
+     "This package is a pure Rust implementation of Public-Key Cryptography
+Standards (PKCS) #5: Password-Based Cryptography Specification Version
+2.1 (RFC 8018).")
+    (license (list license:asl2.0 license:expat))))
+
+(define-public rust-pkcs8-0.7
+  (package
+    (name "rust-pkcs8")
+    (version "0.7.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "pkcs8" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0iq46p6fa2b8xy6pj52zpmdy8ya3fg31dj4rc19x1fi69nvgjgpf"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-der" ,rust-der-0.4)
+        ("rust-pem-rfc7468" ,rust-pem-rfc7468-0.2)
+        ("rust-pkcs1" ,rust-pkcs1-0.2)
+        ("rust-pkcs5" ,rust-pkcs5-0.3)
+        ("rust-rand-core" ,rust-rand-core-0.6)
+        ("rust-spki" ,rust-spki-0.4)
+        ("rust-zeroize" ,rust-zeroize-1))))
+    (home-page "https://github.com/RustCrypto/formats/tree/master/pkcs8")
+    (synopsis "Implementation of Public-Key Cryptography Standards (PKCS) #8")
+    (description
+     "This package is a pure Rust implementation of Public-Key Cryptography
+Standards (PKCS) #8: Private-Key Information Syntax Specification (RFC 5208),
+with additional support for PKCS#8v2 asymmetric key packages (RFC 5958).")
+    (license (list license:asl2.0 license:expat))))
+
 (define-public rust-pkg-config-0.3
   (package
     (name "rust-pkg-config")
     (version "0.3.19")
     (source
-      (origin
-        (method url-fetch)
-        (uri (crate-uri "pkg-config" version))
-        (file-name (string-append name "-" version ".crate"))
-        (sha256
-         (base32
-          "0k4860955riciibxr8bhnklp79jydp4xfylwdn5v9kj96hxlac9q"))))
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "pkg-config" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0k4860955riciibxr8bhnklp79jydp4xfylwdn5v9kj96hxlac9q"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-development-inputs
@@ -34049,7 +41296,7 @@ written with declarative macros.")
                                "/bin/pkg-config\"")))
              #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/rust-lang/pkg-config-rs")
     (synopsis "Library to run the pkg-config system tool")
     (description
@@ -34090,7 +41337,7 @@ network packet formats.")
       (origin
         (method url-fetch)
         (uri (crate-uri "plain" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "19n1xbxb4wa7w891268bzf6cbwq4qvdb86bik1z129qb0xnnnndl"))))
@@ -34151,36 +41398,33 @@ serialization.")
         ("rust-humantime" ,rust-humantime-1)
         ("rust-byteorder" ,rust-byteorder-1))))))
 
-(define-public rust-plotters-0.2
+(define-public rust-plotters-0.3
   (package
     (name "rust-plotters")
-    (version "0.2.12")
+    (version "0.3.1")
     (source
-      (origin
-        (method url-fetch)
-        (uri (crate-uri "plotters" version))
-        (file-name
-         (string-append name "-" version ".tar.gz"))
-        (sha256
-         (base32
-          "1ssycy9an23vs9hq098c7kl1dvp5ych20d994lhsw9vx4kdbhfsf"))))
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "plotters" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0akgmm5kqghl2b1q1qkzjggiqnb9smaz54fd5374k5qbqfggv8rj"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-gif" ,rust-gif-0.10)
-        ("rust-piston-window" ,rust-piston-window-0.105)
+       (("rust-chrono" ,rust-chrono-0.4)
+        ("rust-font-kit" ,rust-font-kit-0.10)
+        ("rust-image" ,rust-image-0.23)
+        ("rust-lazy-static" ,rust-lazy-static-1)
         ("rust-num-traits" ,rust-num-traits-0.2)
+        ("rust-pathfinder-geometry" ,rust-pathfinder-geometry-0.5)
+        ("rust-plotters-backend" ,rust-plotters-backend-0.3)
+        ("rust-plotters-bitmap" ,rust-plotters-bitmap-0.3)
+        ("rust-plotters-svg" ,rust-plotters-svg-0.3)
+        ("rust-ttf-parser" ,rust-ttf-parser-0.12)
         ("rust-wasm-bindgen" ,rust-wasm-bindgen-0.2)
-        ("rust-image" ,rust-image-0.22)
-        ("rust-js-sys" ,rust-js-sys-0.3)
-        ("rust-web-sys" ,rust-web-sys-0.3)
-        ("rust-font-kit" ,rust-font-kit-0.4)
-        ("rust-chrono" ,rust-chrono-0.4)
-        ("rust-palette" ,rust-palette-0.5)
-        ("rust-cairo-rs" ,rust-cairo-rs-0.7)
-        ("rust-rusttype" ,rust-rusttype-0.8)
-        ("rust-lazy-static" ,rust-lazy-static-1))))
+        ("rust-web-sys" ,rust-web-sys-0.3))))
     (home-page "https://github.com/38/plotters")
     (synopsis "Rust drawing library focus on data plotting")
     (description
@@ -34188,6 +41432,68 @@ serialization.")
 both WASM and native applications")
     (license license:expat)))
 
+(define-public rust-plotters-backend-0.3
+  (package
+    (name "rust-plotters-backend")
+    (version "0.3.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "plotters-backend" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "075ccyz814q46dkr93zz7crj9mmyqgk0w6mmrpyz1sm0ilqig16q"))))
+    (build-system cargo-build-system)
+    (arguments `(#:skip-build? #t))
+    (home-page "https://plotters-rs.github.io")
+    (synopsis "Plotters Backend API")
+    (description "This package provides Plotters backend API.")
+    (license license:expat)))
+
+(define-public rust-plotters-bitmap-0.3
+  (package
+    (name "rust-plotters-bitmap")
+    (version "0.3.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "plotters-bitmap" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0m0bq3fqrnhgg37k6lz0m328n3ifymc965pxmqc5cpk90nljydi1"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-gif" ,rust-gif-0.11)
+        ("rust-image" ,rust-image-0.23)
+        ("rust-plotters-backend" ,rust-plotters-backend-0.3))))
+    (home-page "https://plotters-rs.github.io")
+    (synopsis "Plotters Bitmap Backend")
+    (description "This package provides Plotters bitmap backend.")
+    (license license:expat)))
+
+(define-public rust-plotters-svg-0.3
+  (package
+    (name "rust-plotters-svg")
+    (version "0.3.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "plotters-svg" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1aavi3i4jrwydw3i6x0zxs3i3c7gki7jlhg9agff35x5ixisj7sj"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-plotters-backend" ,rust-plotters-backend-0.3))))
+    (home-page "https://plotters-rs.github.io")
+    (synopsis "Plotters SVG backend")
+    (description "This package provides Plotters SVG backend.")
+    (license license:expat)))
+
 (define-public rust-plugin-0.2
   (package
     (name "rust-plugin")
@@ -34196,7 +41502,7 @@ both WASM and native applications")
       (origin
         (method url-fetch)
         (uri (crate-uri "plugin" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1q7nghkpvxxr168y2jnzh3w7qc9vfrby9n7ygy3xpj0bj71hsshs"))))
@@ -34268,7 +41574,7 @@ both WASM and native applications")
       (origin
         (method url-fetch)
         (uri (crate-uri "pocket-resources" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1n2i5vmi8fdbw89wm5nz1ws1z9f1qax911p6ksg4scmdg23z6df1"))))
@@ -34299,30 +41605,68 @@ applications.")
      "Additional trait for Read and Write to read and write Plain Old Data.")
     (license (list license:expat license:asl2.0))))
 
-(define-public rust-polars-0.15
+(define-public rust-polars-0.17
   (package
     (name "rust-polars")
-    (version "0.15.1")
+    (version "0.17.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "polars" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1sl7vs6ck05f8w8jp7v75431b4v5j2rvvvw53jqgxc5226i7a2h8"))))
+        (base32 "1655qd1khas4qm14k3hl3sh8zh2xaj505344qzm68fz98rfs553w"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-polars-core" ,rust-polars-core-0.15)
-        ("rust-polars-io" ,rust-polars-io-0.15)
-        ("rust-polars-lazy" ,rust-polars-lazy-0.15))))
+       (("rust-polars-core" ,rust-polars-core-0.17)
+        ("rust-polars-io" ,rust-polars-io-0.17)
+        ("rust-polars-lazy" ,rust-polars-lazy-0.17))))
     (home-page "https://github.com/ritchie46/polars")
     (synopsis "DataFrame Library based on Apache Arrow")
     (description
      "Polars is a dataframe Library based on Apache Arrow.")
     (license license:expat)))
 
+(define-public rust-polars-0.16
+  (package
+    (inherit rust-polars-0.17)
+    (name "rust-polars")
+    (version "0.16.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "polars" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1s4fqc3vlpz73dbagfsj3hx7y7xmpqnp7nj0cn9srijxgxq5nm73"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-polars-core" ,rust-polars-core-0.16)
+        ("rust-polars-io" ,rust-polars-io-0.16)
+        ("rust-polars-lazy" ,rust-polars-lazy-0.16))))))
+
+(define-public rust-polars-0.15
+  (package
+    (inherit rust-polars-0.16)
+    (name "rust-polars")
+    (version "0.15.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "polars" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1sl7vs6ck05f8w8jp7v75431b4v5j2rvvvw53jqgxc5226i7a2h8"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-polars-core" ,rust-polars-core-0.15)
+        ("rust-polars-io" ,rust-polars-io-0.15)
+        ("rust-polars-lazy" ,rust-polars-lazy-0.15))))))
+
 (define-public rust-polars-0.14
   (package
     (inherit rust-polars-0.15)
@@ -34363,22 +41707,22 @@ applications.")
         ("rust-polars-io" ,rust-polars-io-0.13)
         ("rust-polars-lazy" ,rust-polars-lazy-0.13))))))
 
-(define-public rust-polars-arrow-0.15
+(define-public rust-polars-arrow-0.17
   (package
     (name "rust-polars-arrow")
-    (version "0.15.1")
+    (version "0.17.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "polars-arrow" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0d8ir9dajywfqg6ck557vbvzsdmndc1ipn9mgrqi15yini1qmw2z"))))
+        (base32 "16aakfkiaqk71c3n3274r9ra44v0jrc8wwp5nqdr0srd5y6lii0w"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-arrow" ,rust-arrow-5)
+       (("rust-arrow2" ,rust-arrow2-0.7)
         ("rust-num" ,rust-num-0.4)
         ("rust-thiserror" ,rust-thiserror-1))))
     (home-page "https://github.com/ritchie46/polars")
@@ -34387,6 +41731,44 @@ applications.")
      "This crate provides Arrow interfaces for Polars DataFrame library.")
     (license license:expat)))
 
+(define-public rust-polars-arrow-0.16
+  (package
+    (inherit rust-polars-arrow-0.17)
+    (name "rust-polars-arrow")
+    (version "0.16.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "polars-arrow" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0pwx7nsayn526r9gw16yzqq3r6mn6ivcdxzsj8737whk04qy3ssb"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-arrow2" ,rust-arrow2-0.5)
+        ("rust-num" ,rust-num-0.4)
+        ("rust-thiserror" ,rust-thiserror-1))))))
+
+(define-public rust-polars-arrow-0.15
+  (package
+    (inherit rust-polars-arrow-0.16)
+    (name "rust-polars-arrow")
+    (version "0.15.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "polars-arrow" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0d8ir9dajywfqg6ck557vbvzsdmndc1ipn9mgrqi15yini1qmw2z"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-arrow" ,rust-arrow-5)
+        ("rust-num" ,rust-num-0.4)
+        ("rust-thiserror" ,rust-thiserror-1))))))
+
 (define-public rust-polars-arrow-0.14
   (package
     (inherit rust-polars-arrow-0.15)
@@ -34426,24 +41808,25 @@ applications.")
         ("rust-num" ,rust-num-0.4)
         ("rust-thiserror" ,rust-thiserror-1))))))
 
-(define-public rust-polars-core-0.15
+(define-public rust-polars-core-0.17
   (package
     (name "rust-polars-core")
-    (version "0.15.1")
+    (version "0.17.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "polars-core" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0vzyyqg0s6h3k77z7nkmqrrgnp7nbi7sh5nmlw1ggrlml9ps0aa9"))))
+        (base32 "1xjv2rja2pzcnn6sazgj2dqzy7gpbp57as6rcf0s0hnpcd054wb7"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:skip-build? #t
+     `(#:skip-build?
+       #t
        #:cargo-inputs
        (("rust-ahash" ,rust-ahash-0.7)
         ("rust-anyhow" ,rust-anyhow-1)
-        ("rust-arrow" ,rust-arrow-5)
+        ("rust-arrow2" ,rust-arrow2-0.7)
         ("rust-chrono" ,rust-chrono-0.4)
         ("rust-comfy-table" ,rust-comfy-table-1)
         ("rust-hashbrown" ,rust-hashbrown-0.11)
@@ -34453,8 +41836,7 @@ applications.")
         ("rust-ndarray" ,rust-ndarray-0.15)
         ("rust-num" ,rust-num-0.4)
         ("rust-num-cpus" ,rust-num-cpus-1)
-        ("rust-parquet" ,rust-parquet-5)
-        ("rust-polars-arrow" ,rust-polars-arrow-0.15)
+        ("rust-polars-arrow" ,rust-polars-arrow-0.17)
         ("rust-prettytable-rs" ,rust-prettytable-rs-0.8)
         ("rust-rand" ,rust-rand-0.7)
         ("rust-rand-distr" ,rust-rand-distr-0.3)
@@ -34470,6 +41852,83 @@ applications.")
      "This crate provides the core of the Polars DataFrame library.")
     (license license:expat)))
 
+(define-public rust-polars-core-0.16
+  (package
+    (inherit rust-polars-core-0.17)
+    (name "rust-polars-core")
+    (version "0.16.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "polars-core" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0knhxc2b0k5jpvm7fxm64b5hjdyqgxjjyi6cnsiy5sya3mj3v9cd"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-ahash" ,rust-ahash-0.7)
+        ("rust-anyhow" ,rust-anyhow-1)
+        ("rust-arrow2" ,rust-arrow2-0.5)
+        ("rust-chrono" ,rust-chrono-0.4)
+        ("rust-comfy-table" ,rust-comfy-table-1)
+        ("rust-hashbrown" ,rust-hashbrown-0.11)
+        ("rust-itertools" ,rust-itertools-0.10)
+        ("rust-jsonpath-lib" ,rust-jsonpath-lib-0.3)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-ndarray" ,rust-ndarray-0.15)
+        ("rust-num" ,rust-num-0.4)
+        ("rust-num-cpus" ,rust-num-cpus-1)
+        ("rust-polars-arrow" ,rust-polars-arrow-0.16)
+        ("rust-prettytable-rs" ,rust-prettytable-rs-0.8)
+        ("rust-rand" ,rust-rand-0.7)
+        ("rust-rand-distr" ,rust-rand-distr-0.3)
+        ("rust-rayon" ,rust-rayon-1)
+        ("rust-regex" ,rust-regex-1)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-json" ,rust-serde-json-1)
+        ("rust-thiserror" ,rust-thiserror-1)
+        ("rust-unsafe-unwrap" ,rust-unsafe-unwrap-0.1))))))
+
+(define-public rust-polars-core-0.15
+  (package
+    (inherit rust-polars-core-0.16)
+    (name "rust-polars-core")
+    (version "0.15.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "polars-core" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0vzyyqg0s6h3k77z7nkmqrrgnp7nbi7sh5nmlw1ggrlml9ps0aa9"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-ahash" ,rust-ahash-0.7)
+        ("rust-anyhow" ,rust-anyhow-1)
+        ("rust-arrow" ,rust-arrow-5)
+        ("rust-chrono" ,rust-chrono-0.4)
+        ("rust-comfy-table" ,rust-comfy-table-1)
+        ("rust-hashbrown" ,rust-hashbrown-0.11)
+        ("rust-itertools" ,rust-itertools-0.10)
+        ("rust-jsonpath-lib" ,rust-jsonpath-lib-0.3)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-ndarray" ,rust-ndarray-0.15)
+        ("rust-num" ,rust-num-0.4)
+        ("rust-num-cpus" ,rust-num-cpus-1)
+        ("rust-parquet" ,rust-parquet-5)
+        ("rust-polars-arrow" ,rust-polars-arrow-0.15)
+        ("rust-prettytable-rs" ,rust-prettytable-rs-0.8)
+        ("rust-rand" ,rust-rand-0.7)
+        ("rust-rand-distr" ,rust-rand-distr-0.3)
+        ("rust-rayon" ,rust-rayon-1)
+        ("rust-regex" ,rust-regex-1)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-json" ,rust-serde-json-1)
+        ("rust-thiserror" ,rust-thiserror-1)
+        ("rust-unsafe-unwrap" ,rust-unsafe-unwrap-0.1))))))
+
 (define-public rust-polars-core-0.14
   (package
     (inherit rust-polars-core-0.15)
@@ -34545,8 +42004,79 @@ applications.")
         ("rust-thiserror" ,rust-thiserror-1)
         ("rust-unsafe-unwrap" ,rust-unsafe-unwrap-0.1))))))
 
+(define-public rust-polars-io-0.17
+  (package
+    (name "rust-polars-io")
+    (version "0.17.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "polars-io" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0mq921184vwmadxz3996g0ilb4wiws3fajgxpvkkw1152pszb98i"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-ahash" ,rust-ahash-0.7)
+        ("rust-anyhow" ,rust-anyhow-1)
+        ("rust-arrow2" ,rust-arrow2-0.7)
+        ("rust-csv-core" ,rust-csv-core-0.1)
+        ("rust-dirs" ,rust-dirs-3)
+        ("rust-flate2" ,rust-flate2-1)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-lexical" ,rust-lexical-6)
+        ("rust-memchr" ,rust-memchr-2)
+        ("rust-memmap2" ,rust-memmap2-0.5)
+        ("rust-num" ,rust-num-0.4)
+        ("rust-num-cpus" ,rust-num-cpus-1)
+        ("rust-polars-arrow" ,rust-polars-arrow-0.17)
+        ("rust-polars-core" ,rust-polars-core-0.17)
+        ("rust-rayon" ,rust-rayon-1)
+        ("rust-regex" ,rust-regex-1)
+        ("rust-simdutf8" ,rust-simdutf8-0.1))))
+    (home-page "https://github.com/ritchie46/polars")
+    (synopsis "IO related logic for the Polars DataFrame library")
+    (description
+     "This crate provides IO related logic for the Polars DataFrame library.")
+    (license license:expat)))
+
+(define-public rust-polars-io-0.16
+  (package
+    (inherit rust-polars-io-0.17)
+    (name "rust-polars-io")
+    (version "0.16.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "polars-io" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0yqpjk0ymqpjq6f0mnm9hhw9xmjradx6vqzg5n54qvl6v3s3p3kh"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-ahash" ,rust-ahash-0.7)
+        ("rust-anyhow" ,rust-anyhow-1)
+        ("rust-arrow2" ,rust-arrow2-0.5)
+        ("rust-csv-core" ,rust-csv-core-0.1)
+        ("rust-dirs" ,rust-dirs-3)
+        ("rust-flate2" ,rust-flate2-1)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-lexical" ,rust-lexical-6)
+        ("rust-memmap2" ,rust-memmap2-0.2)
+        ("rust-num" ,rust-num-0.4)
+        ("rust-num-cpus" ,rust-num-cpus-1)
+        ("rust-polars-arrow" ,rust-polars-arrow-0.16)
+        ("rust-polars-core" ,rust-polars-core-0.16)
+        ("rust-rayon" ,rust-rayon-1)
+        ("rust-regex" ,rust-regex-1)
+        ("rust-simdutf8" ,rust-simdutf8-0.1))))))
+
 (define-public rust-polars-io-0.15
   (package
+    (inherit rust-polars-io-0.16)
     (name "rust-polars-io")
     (version "0.15.1")
     (source
@@ -34556,7 +42086,6 @@ applications.")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "19r2l3rxjdk25ir93l85ap4q0w5p7apjw3g57pszxph9nh2j8ba2"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
@@ -34577,12 +42106,7 @@ applications.")
         ("rust-polars-core" ,rust-polars-core-0.15)
         ("rust-rayon" ,rust-rayon-1)
         ("rust-regex" ,rust-regex-1)
-        ("rust-simdutf8" ,rust-simdutf8-0.1))))
-    (home-page "https://github.com/ritchie46/polars")
-    (synopsis "IO related logic for the Polars DataFrame library")
-    (description
-     "This crate provides IO related logic for the Polars DataFrame library.")
-    (license license:expat)))
+        ("rust-simdutf8" ,rust-simdutf8-0.1))))))
 
 (define-public rust-polars-io-0.14
   (package
@@ -34651,26 +42175,26 @@ applications.")
         ("rust-rayon" ,rust-rayon-1)
         ("rust-regex" ,rust-regex-1))))))
 
-(define-public rust-polars-lazy-0.15
+(define-public rust-polars-lazy-0.17
   (package
     (name "rust-polars-lazy")
-    (version "0.15.1")
+    (version "0.17.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "polars-lazy" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0xh3a0gjsisx62zwjmawxg9giin7bwmh7z7y4cc2d3ygy8nk19jh"))))
+        (base32 "0qabh08q4978s33d2mn2m8c90spg21frr4lhpyxx2ngsw93scgns"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-ahash" ,rust-ahash-0.7)
         ("rust-itertools" ,rust-itertools-0.10)
-        ("rust-polars-arrow" ,rust-polars-arrow-0.15)
-        ("rust-polars-core" ,rust-polars-core-0.15)
-        ("rust-polars-io" ,rust-polars-io-0.15)
+        ("rust-polars-arrow" ,rust-polars-arrow-0.17)
+        ("rust-polars-core" ,rust-polars-core-0.17)
+        ("rust-polars-io" ,rust-polars-io-0.17)
         ("rust-rayon" ,rust-rayon-1)
         ("rust-regex" ,rust-regex-1))))
     (home-page "https://github.com/ritchie46/polars")
@@ -34680,6 +42204,52 @@ applications.")
 library.")
     (license license:expat)))
 
+(define-public rust-polars-lazy-0.16
+  (package
+    (inherit rust-polars-lazy-0.17)
+    (name "rust-polars-lazy")
+    (version "0.16.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "polars-lazy" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "01bjsk880dvigyqx7aj3f8zvxpk9gl14k3s40w3dv3aanhdzq7wx"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-ahash" ,rust-ahash-0.7)
+        ("rust-itertools" ,rust-itertools-0.10)
+        ("rust-polars-arrow" ,rust-polars-arrow-0.16)
+        ("rust-polars-core" ,rust-polars-core-0.16)
+        ("rust-polars-io" ,rust-polars-io-0.16)
+        ("rust-rayon" ,rust-rayon-1)
+        ("rust-regex" ,rust-regex-1))))))
+
+(define-public rust-polars-lazy-0.15
+  (package
+    (inherit rust-polars-lazy-0.16)
+    (name "rust-polars-lazy")
+    (version "0.15.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "polars-lazy" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0xh3a0gjsisx62zwjmawxg9giin7bwmh7z7y4cc2d3ygy8nk19jh"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-ahash" ,rust-ahash-0.7)
+        ("rust-itertools" ,rust-itertools-0.10)
+        ("rust-polars-arrow" ,rust-polars-arrow-0.15)
+        ("rust-polars-core" ,rust-polars-core-0.15)
+        ("rust-polars-io" ,rust-polars-io-0.15)
+        ("rust-rayon" ,rust-rayon-1)
+        ("rust-regex" ,rust-regex-1))))))
+
 (define-public rust-polars-lazy-0.14
   (package
     (inherit rust-polars-lazy-0.15)
@@ -34752,6 +42322,33 @@ library.")
 @code{kqueue}, @code{event ports}, and @code{wepoll}.")
     (license (list license:asl2.0 license:expat))))
 
+(define-public rust-poly1305-0.7
+  (package
+    (name "rust-poly1305")
+    (version "0.7.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "poly1305" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1pkf4jlriskq9rvz8y5fjj9dw42q6yg5djijlin4n6p1dd3yp2h4"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-cpufeatures" ,rust-cpufeatures-0.2)
+        ("rust-opaque-debug" ,rust-opaque-debug-0.3)
+        ("rust-universal-hash" ,rust-universal-hash-0.4)
+        ("rust-zeroize" ,rust-zeroize-1))
+       #:cargo-development-inputs
+       (("rust-hex-literal" ,rust-hex-literal-0.3))))
+    (home-page "https://github.com/RustCrypto/universal-hashes")
+    (synopsis "Poly1305 universal hash")
+    (description
+     "Poly1305 is a universal hash function which, when combined with
+a cipher, can be used as a Message Authentication Code (MAC).")
+    (license (list license:asl2.0 license:expat))))
+
 (define-public rust-polyval-0.4
   (package
     (name "rust-polyval")
@@ -34855,8 +42452,7 @@ UDP.")
           "1hnid1d78zrr8ph12lpvp5b2cpx2fsqqgqs2yn1q23c6g7jix1y7"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:rust ,rust-1.46    ; or later
-       #:tests? #f          ; tests require postgres server.
+     `(#:tests? #f          ; tests require postgres server.
        #:cargo-inputs
        (("rust-bytes" ,rust-bytes-1)
         ("rust-fallible-iterator" ,rust-fallible-iterator-0.2)
@@ -35062,7 +42658,7 @@ and Postgres values.")
       (origin
         (method url-fetch)
         (uri (crate-uri "ppv-lite86" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1shj4q7jwj0azssr8cg51dk3kh7d4lg9rmbbz1kbqk971vc5wyi3"))))
@@ -35092,7 +42688,7 @@ for x86.")
        (("rust-pkg-config" ,rust-pkg-config-0.3)
         ("rust-vcpkg" ,rust-vcpkg-0.2))))
     (native-inputs
-     `(("postgresql" ,postgresql)))
+     (list postgresql))
     (home-page "https://crates.io/crates/pq-sys")
     (synopsis "Auto-generated rust bindings for libpq")
     (description "This package provides auto-generated rust bindings for
@@ -35126,24 +42722,26 @@ dependency to expose a precomputed hash.")
 (define-public rust-predicates-2
   (package
     (name "rust-predicates")
-    (version "2.0.0")
+    (version "2.1.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "predicates" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0xma6v1qnfjxr4hmby5b6a9vc2i5f4638c24q4p1xqmlksknrr66"))))
+        (base32 "05d749i3z8cbsr0899fzr2ksn8drbci4harcq82vjsj5krlagrcm"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-difflib" ,rust-difflib-0.4)
-        ("rust-float-cmp" ,rust-float-cmp-0.8)
+       (("rust-concolor-control" ,rust-concolor-control-0.0.7)
+        ("rust-difflib" ,rust-difflib-0.4)
+        ("rust-float-cmp" ,rust-float-cmp-0.9)
         ("rust-itertools" ,rust-itertools-0.10)
         ("rust-normalize-line-endings" ,rust-normalize-line-endings-0.3)
         ("rust-predicates-core" ,rust-predicates-core-1)
-        ("rust-regex" ,rust-regex-1))
+        ("rust-regex" ,rust-regex-1)
+        ("rust-yansi" ,rust-yansi-0.5))
        #:cargo-development-inputs
        (("rust-predicates-tree" ,rust-predicates-tree-1))))
     (home-page "https://github.com/assert-rs/predicates-rs")
@@ -35729,15 +43327,15 @@ in your code.")
 (define-public rust-proc-macro2-1
   (package
     (name "rust-proc-macro2")
-    (version "1.0.27")
+    (version "1.0.32")
     (source
       (origin
         (method url-fetch)
         (uri (crate-uri "proc-macro2" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
-          "0f3h0zl5w5090ajmmvpmhkpr4iwqnn5rip3afacabhc657vwmn7h"))))
+          "0hqbxlvhiaybakl1gai3mgps1dxsmxricxsr2rfdrh222z0qql5s"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-test-flags '("--lib")
@@ -35746,7 +43344,7 @@ in your code.")
        #:cargo-development-inputs
        (("rust-quote" ,rust-quote-1))))
     (inputs
-     `(("rust-unicode-xid" ,rust-unicode-xid-0.2)))
+     (list rust-unicode-xid-0.2))
     (home-page "https://github.com/alexcrichton/proc-macro2")
     (synopsis "Stable implementation of the upcoming new `proc_macro` API")
     (description "This package provides a stable implementation of the upcoming new
@@ -35925,8 +43523,45 @@ transfer).
 This library mimics the Git way of showing progress.")
     (license license:gpl2+)))
 
+(define-public rust-proptest-1
+  (package
+    (name "rust-proptest")
+    (version "1.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "proptest" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1rdhjnf0xma5rmsq04d31n2vq1pgbm42pjc6jn3jsj8qgz09q38y"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-bit-set" ,rust-bit-set-0.5)
+        ("rust-bitflags" ,rust-bitflags-1)
+        ("rust-byteorder" ,rust-byteorder-1)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-num-traits" ,rust-num-traits-0.2)
+        ("rust-quick-error" ,rust-quick-error-2)
+        ("rust-rand" ,rust-rand-0.8)
+        ("rust-rand-chacha" ,rust-rand-chacha-0.3)
+        ("rust-rand-xorshift" ,rust-rand-xorshift-0.3)
+        ("rust-regex-syntax" ,rust-regex-syntax-0.6)
+        ("rust-rusty-fork" ,rust-rusty-fork-0.3)
+        ("rust-tempfile" ,rust-tempfile-3)
+        ("rust-x86" ,rust-x86-0.33))
+       #:cargo-development-inputs
+       (("rust-regex" ,rust-regex-1))))
+    (home-page "https://altsysrq.github.io/proptest-book/proptest/index.html")
+    (synopsis "Hypothesis-like property-based testing and shrinking")
+    (description
+     "The @code{proptest} crate provides most of Proptest’s functionality,
+including most strategies and the testing framework itself.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-proptest-0.10
   (package
+    (inherit rust-proptest-1)
     (name "rust-proptest")
     (version "0.10.1")
     (source
@@ -35936,7 +43571,6 @@ This library mimics the Git way of showing progress.")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "0vv4cvwn1v7h0zjajmhznll554a2ri8dqw26xql3q49r246cirhj"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
@@ -35954,13 +43588,7 @@ This library mimics the Git way of showing progress.")
         ("rust-tempfile" ,rust-tempfile-3)
         ("rust-x86" ,rust-x86-0.33))
        #:cargo-development-inputs
-       (("rust-regex" ,rust-regex-1))))
-    (home-page "https://altsysrq.github.io/proptest-book/proptest/index.html")
-    (synopsis "Hypothesis-like property-based testing and shrinking")
-    (description
-     "The @code{proptest} crate provides most of Proptest’s functionality,
-including most strategies and the testing framework itself.")
-    (license (list license:expat license:asl2.0))))
+       (("rust-regex" ,rust-regex-1))))))
 
 (define-public rust-proptest-0.9
   (package
@@ -36103,6 +43731,108 @@ including most strategies and the testing framework itself.")
 trait of proptest.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-prost-derive-0.9
+  (package
+    (name "rust-prost-derive")
+    (version "0.9.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "prost-derive" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1zi0qway5anz5ik3k1yrc2av81sjcqvqy9lnivv0nzp0ccr1mk7r"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-anyhow" ,rust-anyhow-1)
+        ("rust-itertools" ,rust-itertools-0.10)
+        ("rust-proc-macro2" ,rust-proc-macro2-1)
+        ("rust-quote" ,rust-quote-1)
+        ("rust-syn" ,rust-syn-1))))
+    (home-page "https://github.com/tokio-rs/prost")
+    (synopsis "Protocol Buffers implementation for the Rust language")
+    (description
+     "This package provides a Protocol Buffers implementation for the Rust
+language.")
+    (license license:asl2.0)))
+
+(define-public rust-prost-0.9
+  (package
+    (name "rust-prost")
+    (version "0.9.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "prost" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "00b0xfn80alw7h2pzr2z4dycyvsys4h5878sifaq9zdlbhkpjj24"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bytes" ,rust-bytes-1)
+        ("rust-prost-derive" ,rust-prost-derive-0.9))))
+    (home-page "https://github.com/tokio-rs/prost")
+    (synopsis "Protocol Buffers implementation for the Rust language")
+    (description
+     "This package provides a Protocol Buffers implementation for the Rust
+language.")
+    (license license:asl2.0)))
+
+(define-public rust-psl-2
+  (package
+    (name "rust-psl")
+    (version "2.0.48")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "psl" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0a2d3z6gi7bwsi4xr6m3kq44wxyr81yqr5z76afv8kfxsc8p1nxh"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-psl-types" ,rust-psl-types-2))
+       #:cargo-development-inputs
+       (("rust-rspec", rust-rspec-1))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-version-requirements
+           (lambda _
+             (substitute* "Cargo.toml"
+               (("1.0.0") ,(package-version rust-rspec-1))))))))
+    (home-page "https://github.com/addr-rs/psl")
+    (synopsis "Extract root domain and suffix")
+    (description "This package extracts root domain and suffix from a domain
+name.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-psl-types-2
+  (package
+    (name "rust-psl-types")
+    (version "2.0.7")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "psl-types" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0kqssn9wgqpl1m26ynv7cvxanfhyjvssi2a3jc2nzpbw7q3ricv6"))))
+    (build-system cargo-build-system)
+    (arguments `(#:skip-build? #t))
+    (home-page "https://github.com/addr-rs/psl-types")
+    (synopsis "Common types for the public suffix implementation crates")
+    (description "This package provides common types for the public suffix
+implementation crates.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-psm-0.1
   (package
     (name "rust-psm")
@@ -36126,8 +43856,36 @@ trait of proptest.")
 stack pointer and inspect the properties of the stack.")
     (license (list license:isc license:asl2.0))))
 
+(define-public rust-publicsuffix-2
+  (package
+    (name "rust-publicsuffix")
+    (version "2.1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "publicsuffix" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1q9kbcqh9pa06p3kq7d3ksbnqjhs88v5wk5qg89wrgkbmpnp4a99"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-byteorder" ,rust-byteorder-1)
+        ("rust-hashbrown" ,rust-hashbrown-0.11)
+        ("rust-idna" ,rust-idna-0.2)
+        ("rust-psl-types" ,rust-psl-types-2)
+        ("rust-unicase" ,rust-unicase-2))))
+    (home-page "https://github.com/rushmorem/publicsuffix")
+    (synopsis "Domain name parsing and email address validation")
+    (description "This package provides robust domain name parsing and RFC
+compliant email address validation.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-publicsuffix-1
   (package
+    (inherit rust-publicsuffix-2)
     (name "rust-publicsuffix")
     (version "1.5.4")
     (source
@@ -36138,22 +43896,15 @@ stack pointer and inspect the properties of the stack.")
        (sha256
         (base32
          "0yvmjpywfyypfr17kxiwy6ssykgv8nmcdhfakas6548pfn8a9fiv"))))
-    (build-system cargo-build-system)
     (arguments
-     `(#:cargo-inputs
+     `(#:skip-build? #t
+       #:cargo-inputs
        (("rust-error-chain" ,rust-error-chain-0.12)
         ("rust-idna" ,rust-idna-0.2)
         ("rust-lazy-static" ,rust-lazy-static-1)
         ("rust-native-tls" ,rust-native-tls-0.2)
         ("rust-regex" ,rust-regex-1)
-        ("rust-url" ,rust-url-2))
-       #:cargo-development-inputs
-       (("rust-rspec" ,rust-rspec-1))))
-    (home-page "https://github.com/rushmorem/publicsuffix")
-    (synopsis "Domain name parsing and email address validation")
-    (description "This package provides robust domain name parsing and RFC
-compliant email address validation.")
-    (license (list license:expat license:asl2.0))))
+        ("rust-url" ,rust-url-2))))))
 
 (define-public rust-pulldown-cmark-0.8
   (package
@@ -36263,6 +44014,26 @@ compliant email address validation.")
        (("rust-bitflags" ,rust-bitflags-0.9)
         ("rust-getopts" ,rust-getopts-0.2))))))
 
+(define-public rust-pulldown-cmark-0.0.15
+  (package
+    (inherit rust-pulldown-cmark-0.8)
+    (name "rust-pulldown-cmark-15")
+    (version "0.0.15")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "pulldown-cmark" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0fr3qcxm1vnvywzxx22b3m1bqrvi9px9g05q5hgi0b1rplfr93ip"))))
+    (arguments
+     `(#:tests? #f
+       #:cargo-inputs
+       (("rust-bitflags" ,rust-bitflags-0.9)
+        ("rust-getopts" ,rust-getopts-0.2))))))
+
 (define-public rust-pulldown-cmark-0.0.8
   (package
     (inherit rust-pulldown-cmark-0.4)
@@ -36281,37 +44052,61 @@ compliant email address validation.")
        (("rust-bitflags" ,rust-bitflags-0.5)
         ("rust-getopts" ,rust-getopts-0.2))))))
 
-(define-public rust-pulldown-cmark-to-cmark-6
+(define-public rust-pulldown-cmark-to-cmark-7
   (package
     (name "rust-pulldown-cmark-to-cmark")
-    (version "6.0.0")
+    (version "7.1.1")
     (source
-      (origin
-        (method url-fetch)
-        (uri (crate-uri "pulldown-cmark-to-cmark" version))
-        (file-name
-          (string-append name "-" version ".tar.gz"))
-        (sha256
-          (base32
-            "08yyjr60jk8f4v4sqcgmna5n9y31l6lx3z9lak38wd82h63vkwp8"))))
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "pulldown-cmark-to-cmark" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "03f6bnqjzchmzs4qaf63pirgj95b0x3l2rlp1wj1z27mp734phcb"))))
     (build-system cargo-build-system)
     (arguments
-      `(#:skip-build? #t
-        #:cargo-inputs
-        (("rust-pulldown-cmark" ,rust-pulldown-cmark-0.8))
-        #:cargo-development-inputs
-        (("rust-indoc" ,rust-indoc-1)
-         ("rust-pretty-assertions"
-          ,rust-pretty-assertions-0.6))))
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-pulldown-cmark" ,rust-pulldown-cmark-0.8))
+       #:cargo-development-inputs
+       (("rust-indoc" ,rust-indoc-1)
+        ("rust-pretty-assertions"
+         ,rust-pretty-assertions-0.7))))
     (home-page
-      "https://github.com/Byron/pulldown-cmark-to-cmark")
+     "https://github.com/Byron/pulldown-cmark-to-cmark")
     (synopsis
-      "Convert pulldown-cmark Events back to the string they were parsed from")
+     "Convert pulldown-cmark Events back to the string they were parsed from")
     (description
-      "This package provides a convert pulldown-cmark Events back to the string
+     "This package provides a convert pulldown-cmark Events back to the string
 they were parsed from")
     (license license:asl2.0)))
 
+(define-public rust-pulldown-cmark-to-cmark-6
+  (package
+    (inherit rust-pulldown-cmark-to-cmark-7)
+    (name "rust-pulldown-cmark-to-cmark")
+    (version "6.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "pulldown-cmark-to-cmark" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "08yyjr60jk8f4v4sqcgmna5n9y31l6lx3z9lak38wd82h63vkwp8"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-pulldown-cmark" ,rust-pulldown-cmark-0.8))
+       #:cargo-development-inputs
+       (("rust-indoc" ,rust-indoc-1)
+        ("rust-pretty-assertions"
+         ,rust-pretty-assertions-0.6))))))
+
 (define-public rust-pulse-0.5
   (package
     (name "rust-pulse")
@@ -36359,6 +44154,128 @@ they were parsed from")
 @code{LC_COLLATE} and @code{LC_CTYPE} are not yet supported.")
     (license license:expat)))
 
+(define-public rust-pyo3-build-config-0.15
+  (package
+    (name "rust-pyo3-build-config")
+    (version "0.15.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "pyo3-build-config" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0aw5zfqwzj5rzfxjyqvrqfam138d1009jh6kia4xrgdz538y9yfv"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-once-cell" ,rust-once-cell-1))))
+    (home-page "https://github.com/pyo3/pyo3")
+    (synopsis "Build configuration for PyO3")
+    (description
+     "This package contains build configuration helpers for the PyO3
+ecosystem.")
+    (license license:asl2.0)))
+
+(define-public rust-pyo3-macros-backend-0.15
+  (package
+    (name "rust-pyo3-macros-backend")
+    (version "0.15.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "pyo3-macros-backend" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "12i1n1j8l4q4lzalsvvlw2pak1h8wnz3xcn7y82s2jgf4pl0jkzl"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-proc-macro2" ,rust-proc-macro2-1)
+        ("rust-pyo3-build-config" ,rust-pyo3-build-config-0.15)
+        ("rust-quote" ,rust-quote-1)
+        ("rust-syn" ,rust-syn-1))))
+    (home-page "https://github.com/pyo3/pyo3")
+    (synopsis "Code generation for PyO3")
+    (description
+     "This package provides code generation backends for PyO3.")
+    (license license:asl2.0)))
+
+(define-public rust-pyo3-macros-0.15
+  (package
+    (name "rust-pyo3-macros")
+    (version "0.15.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "pyo3-macros" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32 "0mfp3yz6743vrsp2vh8is3gbyzlxzx4bam5wnhi9g6hz5friww37"))))
+    (build-system cargo-build-system)
+    (arguments
+      `(#:skip-build? #t
+        #:cargo-inputs
+        (("rust-pyo3-macros-backend" ,rust-pyo3-macros-backend-0.15)
+         ("rust-quote" ,rust-quote-1)
+         ("rust-syn" ,rust-syn-1))))
+    (home-page "https://github.com/pyo3/pyo3")
+    (synopsis "Proc macros for PyO3")
+    (description
+     "This package provides compiler macros for use with PyO3.")
+    (license license:asl2.0)))
+
+(define-public rust-pyo3-0.15
+  (package
+    (name "rust-pyo3")
+    (version "0.15.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "pyo3" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "082p014xd8ipwnfsq1ln871wkslxmbrxd7kpqwa0mbq53jzivw3w"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-anyhow" ,rust-anyhow-1)
+        ("rust-cfg-if" ,rust-cfg-if-1)
+        ("rust-eyre" ,rust-eyre-0.6)
+        ("rust-hashbrown" ,rust-hashbrown-0.11)
+        ("rust-indexmap" ,rust-indexmap-1)
+        ("rust-indoc" ,rust-indoc-0.3)
+        ("rust-inventory" ,rust-inventory-0.1)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-num-bigint" ,rust-num-bigint-0.4)
+        ("rust-num-complex" ,rust-num-complex-0.4)
+        ("rust-parking-lot" ,rust-parking-lot-0.11)
+        ("rust-paste" ,rust-paste-0.1)
+        ("rust-pyo3-build-config" ,rust-pyo3-build-config-0.15)
+        ("rust-pyo3-macros" ,rust-pyo3-macros-0.15)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-unindent" ,rust-unindent-0.1))
+       #:cargo-development-inputs
+       (("rust-assert-approx-eq" ,rust-assert-approx-eq-1)
+        ("rust-bitflags" ,rust-bitflags-1.2)
+        ("rust-criterion" ,rust-criterion-0.3)
+        ("rust-half" ,rust-half-1)
+        ("rust-proptest" ,rust-proptest-0.10)
+        ("rust-rustversion" ,rust-rustversion-1)
+        ("rust-serde-json" ,rust-serde-json-1)
+        ("rust-trybuild" ,rust-trybuild-1))
+       ;; FIXME: fails to initialize Python interpreter.
+       #:tests? #f))
+    (inputs (list python))
+    (home-page "https://github.com/pyo3/pyo3")
+    (synopsis "Rust bindings for the Python interpreter")
+    (description
+     "This package provides Rust bindings for Python, including tools for
+creating native Python extension modules.  Running and interacting with
+Python code from a Rust binary is also supported.")
+    (license license:asl2.0)))
+
 (define-public rust-quantiles-0.7
   (package
     (name "rust-quantiles")
@@ -36508,18 +44425,18 @@ implementation.")
     (description "This package provides a quick csv reader and decoder in Rust.")
     (license license:expat)))
 
-(define-public rust-quick-error-1
+(define-public rust-quick-error-2
   (package
     (name "rust-quick-error")
-    (version "1.2.3")
+    (version "2.0.1")
     (source
       (origin
         (method url-fetch)
         (uri (crate-uri "quick-error" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
-          "1q6za3v78hsspisc197bg3g7rpc989qycy8ypr8ap8igv10ikl51"))))
+          "18z6r2rcjvvf8cn92xjhm2qc3jpd1ljvcbf12zv0k9p565gmb4x9"))))
     (build-system cargo-build-system)
     (home-page "https://github.com/tailhook/quick-error")
     (synopsis "Macro which makes error types pleasant to write")
@@ -36528,6 +44445,20 @@ to write.")
     (license (list license:asl2.0
                    license:expat))))
 
+(define-public rust-quick-error-1
+  (package
+    (inherit rust-quick-error-2)
+    (name "rust-quick-error")
+    (version "1.2.3")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "quick-error" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "1q6za3v78hsspisc197bg3g7rpc989qycy8ypr8ap8igv10ikl51"))))))
+
 (define-public rust-quick-xml-0.22
   (package
     (name "rust-quick-xml")
@@ -36775,6 +44706,26 @@ integers, floats, tuples, booleans, lists, strings, options and results.")
         ("rust-log" ,rust-log-0.3)
         ("rust-rand" ,rust-rand-0.3))))))
 
+(define-public rust-quickcheck-0.3
+  (package
+    (inherit rust-quickcheck-0.5)
+    (name "rust-quickcheck-3")
+    (version "0.3.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "quickcheck" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "01a6s6lmnjld9lahbl54qp7h7x2hnkkzhcyr2gdhbk460sj3scqb"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-env-logger" ,rust-env-logger-0.3)
+        ("rust-log" ,rust-log-0.3)
+        ("rust-rand" ,rust-rand-0.3))))))
+
 (define-public rust-quickcheck-0.2
   (package
     (inherit rust-quickcheck-0.4)
@@ -36857,6 +44808,31 @@ integers, floats, tuples, booleans, lists, strings, options and results.")
        #:cargo-development-inputs
        (("rust-quickcheck" ,rust-quickcheck-0.8))))))
 
+(define-public rust-quine-mc-cluskey-0.2
+  (package
+    (name "rust-quine-mc-cluskey")
+    (version "0.2.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "quine-mc-cluskey" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0iazdlwffhrlksb8yhhs1prgwpa68rwjwqm4v26hr9hrswarcn07"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-quickcheck" ,rust-quickcheck-0.3))))
+    (home-page "https://github.com/oli-obk/quine-mc_cluskey")
+    (synopsis
+     "Rust implementation of the Quine-McCluskey algorithm and Petrick's method")
+    (description
+     "This package provides a Rust implementation of the Quine-McCluskey algorithm
+and Petrick's method, an algorithm to automatically minimize boolean expressions.")
+    (license license:expat)))
+
 (define-public rust-quote-1
   (package
     (name "rust-quote")
@@ -36865,7 +44841,7 @@ integers, floats, tuples, booleans, lists, strings, options and results.")
       (origin
         (method url-fetch)
         (uri (crate-uri "quote" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "19rjmfqzk26rxbgxy5j2ckqc2v12sw2xw8l4gi8bzpn2bmsbkl63"))))
@@ -36970,7 +44946,7 @@ data.")
         ("rust-parking-lot" ,rust-parking-lot-0.11)
         ("rust-scheduled-thread-pool" ,rust-scheduled-thread-pool-0.2))))
     (home-page "https://github.com/sfackler/r2d2")
-    (synopsis "A generic connection pool")
+    (synopsis "Generic connection pool")
     (description "This package provides a generic connection pool.")
     (license (list license:expat license:asl2.0))))
 
@@ -37024,30 +45000,48 @@ Racer.")
 fashion.  It is mostly used in Racer.")
     (license license:expat)))
 
-(define-public rust-radium-0.5
+(define-public rust-radium-0.6
   (package
     (name "rust-radium")
-    (version "0.5.3")
+    (version "0.6.2")
     (source
-      (origin
-        (method url-fetch)
-        (uri (crate-uri "radium" version))
-        (file-name
-         (string-append name "-" version ".tar.gz"))
-        (sha256
-         (base32
-          "1f5vj5zy4kcsw8p87y976dm5pln6v6jfw5f0fkj7qbwfipbsj6wl"))))
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "radium" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1ys4bpp2l701ghdniz90zhkvb5ykmfw2pj0m8pfcbi7bm10qygv4"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-development-inputs
        (("rust-static-assertions" ,rust-static-assertions-1))))
-    (home-page "https://github.com/mystor/radium")
+    (home-page "https://github.com/bitvecto-rs/radium")
     (synopsis "Portable interfaces for maybe-atomic types")
     (description
      "@code{radium} provides abstractions and graceful degradation for behavior
 that must be shared-mutable, but merely may use atomic instructions to do so.")
     (license license:expat)))
 
+(define-public rust-radium-0.5
+  (package
+    (inherit rust-radium-0.6)
+    (name "rust-radium")
+    (version "0.5.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "radium" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1f5vj5zy4kcsw8p87y976dm5pln6v6jfw5f0fkj7qbwfipbsj6wl"))))
+    (arguments
+     `(#:cargo-development-inputs
+       (("rust-static-assertions" ,rust-static-assertions-1))))))
+
 (define-public rust-radix-fmt-1
   (package
     (name "rust-radix-fmt")
@@ -37098,14 +45092,14 @@ learnt from TrieMap and Sequence Trie.")
 (define-public rust-rand-0.8
   (package
     (name "rust-rand")
-    (version "0.8.3")
+    (version "0.8.4")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "rand" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0zldxfx4gi551n2fna4zz9ab22zsnzw1mj5hzi5nfs24dgkfgy8f"))))
+        (base32 "1n5wska2fbfj4dsfz8mc0pd0dgjlrb6c9anpk5mwym345rip6x9f"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -37133,7 +45127,7 @@ useful types and distributions, and some randomness-related algorithms.")
      (origin
        (method url-fetch)
        (uri (crate-uri "rand" version))
-       (file-name (string-append name "-" version ".crate"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
          "00sdaimkbz491qgi6qxkv582yivl32m2jd401kzbn94vsiwicsva"))))
@@ -37160,7 +45154,7 @@ useful types and distributions, and some randomness-related algorithms.")
       (origin
         (method url-fetch)
         (uri (crate-uri "rand" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1jl4449jcl4wgmzld6ffwqj5gwxrp8zvx8w573g1z368qg6xlwbd"))))
@@ -37242,7 +45236,7 @@ useful types and distributions, and some randomness-related algorithms.")
       (origin
         (method url-fetch)
         (uri (crate-uri "rand" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0v679h38pjjqj5h4md7v2slsvj6686qgcn7p9fbw3h43iwnk1b34"))))
@@ -37302,7 +45296,7 @@ useful types and distributions, and some randomness-related algorithms.")
       (origin
         (method url-fetch)
         (uri (crate-uri "rand_chacha" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1vxwyzs4fy1ffjc8l00fsyygpiss135irjf7nyxgq2v0lqf3lvam"))))
@@ -37364,7 +45358,7 @@ tools for implementation.")
       (origin
         (method url-fetch)
         (uri (crate-uri "rand_core" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1p09ynysrq1vcdlmcqnapq4qakl2yd1ng3kxh3qscpx09k2a6cww"))))
@@ -37382,7 +45376,7 @@ tools for implementation.")
       (origin
         (method url-fetch)
         (uri (crate-uri "rand_core" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0jzdgszfa4bliigiy4hi66k7fs3gfwi2qxn8vik84ph77fwdwvvs"))))
@@ -37410,6 +45404,41 @@ tools for implementation.")
        #:cargo-inputs
        (("rust-rand-core" ,rust-rand-core-0.3))))))
 
+(define-public rust-rand-distr-0.4
+  (package
+    (name "rust-rand-distr")
+    (version "0.4.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "rand_distr" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0brd2946xfapm2bmhmczfbwck041x7khsfhqxw1f24kxis7m8kcn"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'configure 'patch-Cargo.toml
+           (lambda _
+             (substitute* '("Cargo.toml"
+                            "guix-vendor/rust-average-0.13.1.tar.gz/Cargo.toml")
+               ;; The resolver feature is not supported by this version of Cargo.
+               (("resolver = \"2\".*") "")))))
+       #:cargo-inputs
+       (("rust-average" ,rust-average-0.13)
+        ("rust-num-traits" ,rust-num-traits-0.2)
+        ("rust-rand" ,rust-rand-0.8)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-special" ,rust-special-0.8))
+       #:cargo-development-inputs
+       (("rust-rand-pcg" ,rust-rand-pcg-0.3))))
+    (home-page "https://rust-random.github.io/book/")
+    (synopsis "Sampling from random number distributions")
+    (description "This package provides tool for sampling from random number
+distributions.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-rand-distr-0.3
   (package
     (name "rust-rand-distr")
@@ -37489,7 +45518,7 @@ generator that uses the HC-128 algorithm.")
       (origin
         (method url-fetch)
         (uri (crate-uri "rand_hc" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0g31sqwpmsirdlwr0svnacr4dbqyz339im4ssl9738cjgfpjjcfa"))))
@@ -37506,13 +45535,39 @@ generator that uses the HC-128 algorithm.")
       (origin
         (method url-fetch)
         (uri (crate-uri "rand_hc" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1i0vl8q5ddvvy0x8hf1zxny393miyzxkwqnw31ifg6p0gdy6fh3v"))))
     (arguments
      `(#:cargo-inputs (("rust-rand-core" ,rust-rand-core-0.3))))))
 
+(define-public rust-rand-isaac-0.3
+  (package
+    (name "rust-rand-isaac")
+    (version "0.3.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "rand_isaac" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0a0b188s960qknwwgvpn7zpq3fzdhvrb0gsm5ir5akqvv4y3gi7s"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-rand-core" ,rust-rand-core-0.6)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-derive" ,rust-serde-derive-1))
+       #:cargo-development-inputs
+       (("rust-bincode" ,rust-bincode-1))))
+    (home-page "https://rust-random.github.io/book/")
+    (synopsis "ISAAC random number generator")
+    (description "This package implements the @code{ISAAC} and @code{ISAAC-64}
+random number generators.  ISAAC stands for \"Indirection, Shift, Accumulate,
+Add, and Count\" which are the principal bitwise operations employed.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-rand-isaac-0.2
   (package
     (name "rust-rand-isaac")
@@ -37549,7 +45604,7 @@ Add, and Count\" which are the principal bitwise operations employed.")
       (origin
         (method url-fetch)
         (uri (crate-uri "rand_isaac" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "027flpjr4znx2csxk7gxb7vrf9c7y5mydmvg5az2afgisp4rgnfy"))))
@@ -37569,7 +45624,7 @@ Add, and Count\" which are the principal bitwise operations employed.")
       (origin
         (method url-fetch)
         (uri (crate-uri "rand_jitter" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "16z387y46bfz3csc42zxbjq89vcr1axqacncvv8qhyy93p4xarhi"))))
@@ -37620,7 +45675,7 @@ generator based on timing jitter.")
       (origin
         (method url-fetch)
         (uri (crate-uri "rand_os" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0wahppm0s64gkr2vmhcgwc0lij37in1lgfxg5rbgqlz0l5vgcxbv"))))
@@ -37636,6 +45691,33 @@ generator based on timing jitter.")
         ("rust-wasm-bindgen" ,rust-wasm-bindgen-0.2)
         ("rust-winapi" ,rust-winapi-0.3))))))
 
+(define-public rust-rand-pcg-0.3
+  (package
+    (name "rust-rand-pcg")
+    (version "0.3.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "rand_pcg" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "1w47awndfhgcc31zbji66pwndqmc6lsyairqi9b17f82f19riqbx"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-rand-core" ,rust-rand-core-0.6)
+        ("rust-serde" ,rust-serde-1))
+       #:cargo-development-inputs
+       (("rust-bincode" ,rust-bincode-1))))
+    (home-page "https://crates.io/crates/rand_pcg")
+    (synopsis
+     "Selected PCG random number generators")
+    (description
+     "This package implements a selection of PCG random number generators.")
+    (license (list license:asl2.0
+                   license:expat))))
+
 (define-public rust-rand-pcg-0.2
   (package
     (name "rust-rand-pcg")
@@ -37644,7 +45726,7 @@ generator based on timing jitter.")
       (origin
         (method url-fetch)
         (uri (crate-uri "rand_pcg" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0ab4h6s6x3py833jk61lwadq83qd1c8bih2hgi6yps9rnv0x1aqn"))))
@@ -37672,7 +45754,7 @@ generator based on timing jitter.")
       (origin
         (method url-fetch)
         (uri (crate-uri "rand_pcg" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0i0bdla18a8x4jn1w0fxsbs3jg7ajllz6azmch1zw33r06dv1ydb"))))
@@ -37685,10 +45767,10 @@ generator based on timing jitter.")
        #:cargo-development-inputs
        (("rust-bincode" ,rust-bincode-1))))))
 
-(define-public rust-rand-xorshift-0.2
+(define-public rust-rand-xorshift-0.3
   (package
     (name "rust-rand-xorshift")
-    (version "0.2.0")
+    (version "0.3.0")
     (source
      (origin
        (method url-fetch)
@@ -37697,11 +45779,11 @@ generator based on timing jitter.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1a6wy76lc5fimm1n9n8fzhp4cfjwfwxh4hx63bg3vlh1d2w1dm3p"))))
+         "13vcag7gmqspzyabfl1gr9ykvxd2142q2agrj8dkyjmfqmgg4nyj"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
-       (("rust-rand-core" ,rust-rand-core-0.5)
+       (("rust-rand-core" ,rust-rand-core-0.6)
         ("rust-serde" ,rust-serde-1))
        #:cargo-development-inputs
        (("rust-bincode" ,rust-bincode-1))))
@@ -37711,6 +45793,27 @@ generator based on timing jitter.")
      "Xorshift random number generator.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-rand-xorshift-0.2
+  (package
+    (inherit rust-rand-xorshift-0.3)
+    (name "rust-rand-xorshift")
+    (version "0.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "rand_xorshift" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1a6wy76lc5fimm1n9n8fzhp4cfjwfwxh4hx63bg3vlh1d2w1dm3p"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-rand-core" ,rust-rand-core-0.5)
+        ("rust-serde" ,rust-serde-1))
+       #:cargo-development-inputs
+       (("rust-bincode" ,rust-bincode-1))))))
+
 (define-public rust-rand-xorshift-0.1
   (package
     (name "rust-rand-xorshift")
@@ -37719,7 +45822,7 @@ generator based on timing jitter.")
       (origin
         (method url-fetch)
         (uri (crate-uri "rand_xorshift" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0p2x8nr00hricpi2m6ca5vysiha7ybnghz79yqhhx6sl4gkfkxyb"))))
@@ -37738,6 +45841,30 @@ generator based on timing jitter.")
     (license (list license:asl2.0
                    license:expat))))
 
+(define-public rust-rand-xoshiro-0.6
+  (package
+    (name "rust-rand-xoshiro")
+    (version "0.6.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "rand_xoshiro" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1ajsic84rzwz5qr0mzlay8vi17swqi684bqvwqyiim3flfrcv5vg"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-rand-core" ,rust-rand-core-0.6)
+        ("rust-serde" ,rust-serde-1))
+       #:cargo-development-inputs
+       (("rust-bincode" ,rust-bincode-1))))
+    (home-page "https://rust-random.github.io/book/")
+    (synopsis "Xoshiro, xoroshiro and splitmix64 random number generators")
+    (description "This package provides the xoshiro, xoroshiro and splitmix64
+random number generators.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-rand-xoshiro-0.4
   (package
     (name "rust-rand-xoshiro")
@@ -37808,6 +45935,24 @@ random number generators.")
        #:cargo-development-inputs
        (("rust-rand" ,rust-rand-0.6))))))
 
+(define-public rust-random-0.12
+  (package
+    (name "rust-random")
+    (version "0.12.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "random" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "03s2c59vzcr5fmxbhlhxvrsnwgic488jl4br1k4q369lhls3mlcp"))))
+    (build-system cargo-build-system)
+    (arguments `(#:skip-build? #t))
+    (home-page "https://github.com/stainless-steel/random")
+    (synopsis "Sources of randomness")
+    (description "The package provides sources of randomness.")
+    (license (list license:asl2.0 license:expat))))
+
 (define-public rust-random-fast-rng-0.1
   (package
     (name "rust-random-fast-rng")
@@ -37939,7 +46084,7 @@ libcore.")
       (origin
         (method url-fetch)
         (uri (crate-uri "rawpointer" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1qy1qvj17yh957vhffnq6agq0brvylw27xgks171qrah75wmg8v0"))))
@@ -37961,7 +46106,7 @@ and @code{ptrdistance}.")
       (origin
         (method url-fetch)
         (uri (crate-uri "rawpointer" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "06ghpm9y7gacks78s3maakha07kbnwrxif5q37r2l7z1sali3b7b"))))))
@@ -37996,14 +46141,14 @@ accessors.")
 (define-public rust-rayon-1
   (package
     (name "rust-rayon")
-    (version "1.5.0")
+    (version "1.5.1")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "rayon" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0x2n4zkrm6z3avdfh7zgcwx0wq6hx8332dx89v3j1p7s3448w3cb"))))
+        (base32 "143dl2453bazgk7rwjrickmyqd0ks3q69nfz8axcins19n0clsn0"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
@@ -38014,8 +46159,8 @@ accessors.")
        #:cargo-development-inputs
        (("rust-docopt" ,rust-docopt-1)
         ("rust-lazy-static" ,rust-lazy-static-1)
-        ("rust-rand" ,rust-rand-0.7)
-        ("rust-rand-xorshift" ,rust-rand-xorshift-0.2)
+        ("rust-rand" ,rust-rand-0.8)
+        ("rust-rand-xorshift" ,rust-rand-xorshift-0.3)
         ("rust-serde" ,rust-serde-1))))
     (home-page "https://github.com/rayon-rs/rayon")
     (synopsis "Simple work-stealing parallelism for Rust")
@@ -38075,14 +46220,14 @@ Rust.")
 (define-public rust-rayon-core-1
   (package
     (name "rust-rayon-core")
-    (version "1.9.0")
+    (version "1.9.1")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "rayon-core" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0jpsi8zf66xyx4m5f329lpgiql8775vpm6zqm7zn5p11b6n4dcws"))))
+        (base32 "13kdcnqp2p1a5a3amamfjpnm7ay463vq4dfxy4rrh9shr3i210fp"))))
     (build-system cargo-build-system)
     (arguments
      ;; One of the tests attempts to overflow the stack, but the compiler has
@@ -38132,7 +46277,7 @@ reference counting.")
       (origin
         (method url-fetch)
         (uri (crate-uri "rdrand" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1cjq0kwx1bk7jx3kzyciiish5gqsj7620dm43dc52sr8fzmm9037"))))
@@ -38166,7 +46311,7 @@ reference counting.")
     (home-page
       "https://github.com/pistondevelopers/read_color")
     (synopsis
-      "A simple library for reading hex colors")
+      "Simple library for reading hex colors")
     (description
       "This package provides a simple library for reading hex colors")
     (license (list license:expat license:asl2.0))))
@@ -38246,7 +46391,7 @@ owned memory.")
       (origin
         (method url-fetch)
         (uri (crate-uri "redox_syscall" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1kh59fpwy33w9nwd5iyc283yglq8pf2s41hnhvl48iax9mz0zk21"))))
@@ -38260,7 +46405,7 @@ owned memory.")
       (origin
         (method url-fetch)
         (uri (crate-uri "redox-termios" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0xhgvdh62mymgdl3jqrngl8hr4i8xwpnbsxnldq0l47993z1r2by"))))
@@ -38275,8 +46420,34 @@ owned memory.")
      "This package provides a Rust library to access Redox termios functions.")
     (license license:expat)))
 
+(define-public rust-redox-users-0.4
+  (package
+    (name "rust-redox-users")
+    (version "0.4.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "redox_users" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0r5y1a26flkn6gkayi558jg5dzh2m2fdsapgkpn7mj01v3rk51aj"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-getrandom" ,rust-getrandom-0.2)
+        ("rust-redox-syscall" ,rust-redox-syscall-0.2)
+        ("rust-rust-argon2" ,rust-rust-argon2-0.8))))
+    (home-page "https://gitlab.redox-os.org/redox-os/users")
+    (synopsis "Rust library to access Redox users and groups functionality")
+    (description
+     "This package provides a Rust library to access Redox users and groups
+functionality")
+    (license license:expat)))
+
 (define-public rust-redox-users-0.3
   (package
+    (inherit rust-redox-users-0.4)
     (name "rust-redox-users")
     (version "0.3.4")
     (source
@@ -38286,21 +46457,13 @@ owned memory.")
        (file-name
         (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32
-         "0cbl5w16l3bqm22i4vszclf6hzpljxicghmllw7j13az4s9k1ch9"))))
-    (build-system cargo-build-system)
+        (base32 "0cbl5w16l3bqm22i4vszclf6hzpljxicghmllw7j13az4s9k1ch9"))))
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-getrandom" ,rust-getrandom-0.1)
         ("rust-redox-syscall" ,rust-redox-syscall-0.1)
-        ("rust-rust-argon2" ,rust-rust-argon2-0.7))))
-    (home-page "https://gitlab.redox-os.org/redox-os/users")
-    (synopsis "Access Redox users and groups")
-    (description
-     "This package provides a Rust library to access Redox users and groups
-functionality.")
-    (license license:expat)))
+        ("rust-rust-argon2" ,rust-rust-argon2-0.7))))))
 
 (define-public rust-reduce-0.1
   (package
@@ -38458,8 +46621,8 @@ memory to speed up reallocation.")
         ("rust-regex-syntax" ,rust-regex-syntax-0.6))
        #:cargo-development-inputs
        (("rust-lazy-static" ,rust-lazy-static-1)
-        ("rust-quickcheck" ,rust-quickcheck-0.8)
-        ("rust-rand" ,rust-rand-0.6))))
+        ("rust-quickcheck" ,rust-quickcheck-1)
+        ("rust-rand" ,rust-rand-0.8))))
     (home-page "https://github.com/rust-lang/regex")
     (synopsis "Regular expressions for Rust")
     (description
@@ -38632,6 +46795,53 @@ uses finite automata and guarantees linear time matching on all inputs.")
        (("rust-quickcheck" ,rust-quickcheck-0.2)
         ("rust-rand" ,rust-rand-0.3))))))
 
+(define-public rust-region-3
+  (package
+    (name "rust-region")
+    (version "3.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "region" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0bji1p0c9abzh78ps5hs0ygg9pxkg7gjspll43lxr14q6v18kqbn"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bitflags" ,rust-bitflags-1)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-mach" ,rust-mach-0.3)
+        ("rust-winapi" ,rust-winapi-0.3))))
+    (home-page "https://github.com/darfink/region-rs")
+    (synopsis "Library for manipulating memory regions")
+    (description
+     "This package provides a library for manipulating memory regions.")
+    (license license:expat)))
+
+(define-public rust-region-2
+  (package
+    (inherit rust-region-3)
+    (name "rust-region")
+    (version "2.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "region" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1q4szar3ms76552iygmhsvzhvvwkgz4l94qpx600vmyw5bm58zl7"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-bitflags" ,rust-bitflags-1)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-mach" ,rust-mach-0.3)
+        ("rust-winapi" ,rust-winapi-0.3))
+       #:cargo-development-inputs
+       (("rust-memmap" ,rust-memmap-0.7))))))
+
 (define-public rust-relative-path-1
   (package
     (name "rust-relative-path")
@@ -38890,9 +47100,9 @@ uses finite automata and guarantees linear time matching on all inputs.")
         ("rust-tokio" ,rust-tokio-0.2)
         ("rust-wasm-bindgen-test" ,rust-wasm-bindgen-test-0.3))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("openssl" ,openssl)))))
+     (list openssl))))
 
 (define-public rust-reqwest-0.9
   (package
@@ -38978,7 +47188,7 @@ uses finite automata and guarantees linear time matching on all inputs.")
       (origin
         (method url-fetch)
         (uri (crate-uri "resolv-conf" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0jlzifww1h7j23jnjj49xz8q0fpd9rqpd0ks8c4y651vgw9lx0qi"))))
@@ -39103,6 +47313,52 @@ functionality as retain but gives mutable borrow to the predicate.")
         ;; build dependencies
         ("rust-cc" ,rust-cc-1))))))
 
+(define-public rust-riscv-0.7
+  (package
+    (name "rust-riscv")
+    (version "0.7.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "riscv" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1fla10m2qkcf7zqw91rrribpdaavkv6qbbzjz9q2n09igbfwq1v9"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bare-metal" ,rust-bare-metal-1)
+        ("rust-bit-field" ,rust-bit-field-0.10)
+        ("rust-riscv-target" ,rust-riscv-target-0.1))))
+    (home-page "https://github.com/rust-embedded/riscv")
+    (synopsis "Low level access to RISC-V processors")
+    (description "This crate provides low level access to RISC-V processors.")
+    (license license:isc)))
+
+(define-public rust-riscv-target-0.1
+  (package
+    (name "rust-riscv-target")
+    (version "0.1.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "riscv-target" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "08pj6f1sbddd6idjn8c1wv121bzikw9qvzhcl9icz822va697al8"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-regex" ,rust-regex-1))))
+    (home-page "https://github.com/ilya-epifanov/riscv-target")
+    (synopsis "RISC-V target string manipulation utilities")
+    (description "This package provides RISC-V target string manipulation
+utilities.")
+    (license license:isc)))
+
 (define-public rust-rle-decode-fast-1
   (package
     (name "rust-rle-decode-fast")
@@ -39129,6 +47385,29 @@ this crate is here to save you the hassle of maintaining and testing
 your own implementation.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-rlp-0.5
+  (package
+    (name "rust-rlp")
+    (version "0.5.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "rlp" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1da7b1hc4czlmsyr7ifs9bz9fv8hi5dw8q14xnmjlydfn2mhi5cr"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bytes" ,rust-bytes-1)
+        ("rust-rustc-hex" ,rust-rustc-hex-2))))
+    (home-page "https://github.com/paritytech/parity-common")
+    (synopsis "Recursive-length prefix encoding, decoding, and compression")
+    (description "This package provides Recursive-length prefix encoding,
+decoding, and compression.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-rls-span-0.5
   (package
     (name "rust-rls-span")
@@ -39188,9 +47467,9 @@ Rust Language Server.")
        (("rust-byteorder" ,rust-byteorder-1)
         ("rust-tempfile" ,rust-tempfile-3))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("lmdb" ,lmdb)))
+     (list lmdb))
     (home-page "https://github.com/mozilla/rkv")
     (synopsis "Typed key-value storage")
     (description "This package provides a typed key-value storage solution.")
@@ -39222,17 +47501,40 @@ writers and readers for primitive values with direct mapping between binary
 MessagePack format.")
     (license license:expat)))
 
-(define-public rust-rmp-serde-0.14
+(define-public rust-rmp-serde-0.15
   (package
     (name "rust-rmp-serde")
-    (version "0.14.4")
+    (version "0.15.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "rmp-serde" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "178f4qlicldm9iy74q4wdqldk5i11p1ad30wzs9avx04mpwwygkj"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-byteorder" ,rust-byteorder-1)
+        ("rust-rmp" ,rust-rmp-0.8)
+        ("rust-serde" ,rust-serde-1))))
+    (home-page "https://github.com/3Hren/msgpack-rust")
+    (synopsis "Serde bindings for RMP")
+    (description "This crate provides Serde bindings for RMP.")
+    (license license:expat)))
+
+(define-public rust-rmp-serde-0.13
+  (package
+    (name "rust-rmp-serde")
+    (version "0.13.7")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "rmp-serde" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1n2jn3yj5zbjhz5lah98yylpzhfc1c0h5fcksjp75r3gj86dgrsc"))))
+        (base32 "1lqclnffx1b3r1faicscmk9j21mijl9bj7ywgjps77vf8ic1s7h1"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -39493,61 +47795,118 @@ can handle huge texts and memory-incoherent edits with ease.")
 wildcard segments")
     (license license:expat)))
 
+(define-public rust-rowan-0.15
+  (package
+    (name "rust-rowan")
+    (version "0.15.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "rowan" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1ilxrar5npwnsb575gxh2gp8hi3032mm20sapzw72sv58gn8zski"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-countme" ,rust-countme-3)
+        ("rust-hashbrown" ,rust-hashbrown-0.11)
+        ("rust-memoffset" ,rust-memoffset-0.6)
+        ("rust-rustc-hash" ,rust-rustc-hash-1)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-text-size" ,rust-text-size-1))
+       #:cargo-development-inputs
+       (("rust-m-lexer" ,rust-m-lexer-0.0.4))))
+    (home-page "https://github.com/rust-analyzer/rowan")
+    (synopsis "Library for generic lossless syntax trees")
+    (description
+     "This package provides a library for generic lossless syntax trees.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-rowan-0.13
   (package
+    (inherit rust-rowan-0.15)
     (name "rust-rowan")
     (version "0.13.0-pre.6")
     (source
-      (origin
-        (method url-fetch)
-        (uri (crate-uri "rowan" version))
-        (file-name
-          (string-append name "-" version ".tar.gz"))
-        (sha256
-          (base32
-            "03gh3wa52135mh1an1x4hw6jba64fwfsh4lw3fsmm6jy2i7c1k42"))))
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "rowan" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "03gh3wa52135mh1an1x4hw6jba64fwfsh4lw3fsmm6jy2i7c1k42"))))
     (build-system cargo-build-system)
     (arguments
-      `(#:skip-build? #t
-        #:cargo-inputs
-        (("rust-countme" ,rust-countme-2)
-         ("rust-hashbrown" ,rust-hashbrown-0.9)
-         ("rust-memoffset" ,rust-memoffset-0.6)
-         ("rust-rustc-hash" ,rust-rustc-hash-1)
-         ("rust-serde" ,rust-serde-1)
-         ("rust-text-size" ,rust-text-size-1))
-        #:cargo-development-inputs
-        (("rust-m-lexer" ,rust-m-lexer-0.0.4))))
-    (home-page
-      "https://github.com/rust-analyzer/rowan")
-    (synopsis
-      "Library for generic lossless syntax trees")
-    (description
-      "This package provides a library for generic lossless syntax trees.")
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-countme" ,rust-countme-2)
+        ("rust-hashbrown" ,rust-hashbrown-0.9)
+        ("rust-memoffset" ,rust-memoffset-0.6)
+        ("rust-rustc-hash" ,rust-rustc-hash-1)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-text-size" ,rust-text-size-1))
+       #:cargo-development-inputs
+       (("rust-m-lexer" ,rust-m-lexer-0.0.4))))))
+
+(define-public rust-rsa-0.5
+  (package
+    (name "rust-rsa")
+    (version "0.5.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "rsa" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "039676a4mj0875phdi7vc0bd37hv84dh0dql6fmk8dl2w81jcp70"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-byteorder" ,rust-byteorder-1)
+        ("rust-digest" ,rust-digest-0.9)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-num-bigint-dig" ,rust-num-bigint-dig-0.7)
+        ("rust-num-integer" ,rust-num-integer-0.1)
+        ("rust-num-iter" ,rust-num-iter-0.1)
+        ("rust-num-traits" ,rust-num-traits-0.2)
+        ("rust-pkcs1" ,rust-pkcs1-0.2)
+        ("rust-pkcs8" ,rust-pkcs8-0.7)
+        ("rust-rand" ,rust-rand-0.8)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-subtle" ,rust-subtle-2)
+        ("rust-zeroize" ,rust-zeroize-1))))
+    (home-page "https://github.com/RustCrypto/RSA")
+    (synopsis "Pure Rust RSA implementation")
+    (description "This package provides a pure Rust RSA implementation.")
     (license (list license:expat license:asl2.0))))
 
 (define-public rust-rspec-1
   (package
     (name "rust-rspec")
-    (version "1.0.0-beta.4")
+    (version "1.0.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "rspec" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1abfzwkbxlwahb243k8d3fp6i135lx1aqmbfl79w9zlpng182ndk"))))
+        (base32 "02hfwxqjdc39ygnjysvn5qz343fahmwm16rxvxayh403d5y9wf49"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:skip-build? #t ;; TODO unpackaged dev-dependencies
-       #:cargo-inputs
-       (("rust-colored" ,rust-colored-1)
+     `(#:cargo-inputs
+       (("rust-clippy" ,rust-clippy-0.0.153)
+        ("rust-colored" ,rust-colored-2)
         ("rust-derive-new" ,rust-derive-new-0.5)
-        ("rust-derive-builder" ,rust-derive-builder-0.5)
-        ("rust-expectest" ,rust-expectest-0.9)
-        ("rust-rayon" ,rust-rayon-0.8))
-       #:cargo-development-inputs
-       (("rust-clippy" ,rust-clippy-0.0)))) ;; requires 0.0.153
+        ("rust-derive-builder" ,rust-derive-builder-0.9)
+        ("rust-expectest" ,rust-expectest-0.12)
+        ("rust-rayon" ,rust-rayon-1)
+        ("rust-time" ,rust-time-0.2))))
     (home-page "https://github.com/rust-rspec/rspec")
     (synopsis "Write Rspec-like tests with stable rust")
     (description "This package helps writing Rspec-like tests with stable
@@ -39601,6 +47960,33 @@ rust.")
          (base32
           "1b6vjfwvpcgy0q8ywywz548vhxrmhbz2sm6xyhnmj5p5xd1xfqff"))))))
 
+(define-public rust-rstest-0.6
+  (package
+    (name "rust-rstest")
+    (version "0.6.5")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "rstest" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32 "1wdd0ci0bn6fd5v5c19lhlqrpadk18fl4jzvh75b26616anlxdil"))))
+    (build-system cargo-build-system)
+    (arguments
+      `(#:skip-build? #t
+        #:cargo-inputs
+        (("rust-cfg-if" ,rust-cfg-if-1)
+         ("rust-proc-macro2" ,rust-proc-macro2-1)
+         ("rust-quote" ,rust-quote-1)
+         ("rust-rustc-version" ,rust-rustc-version-0.3)
+         ("rust-syn" ,rust-syn-1))))
+    (home-page "https://github.com/la10736/rstest")
+    (synopsis "Rust fixture based test framework")
+    (description
+      "rstest uses procedural macros to help you on writing fixtures and
+table-based tests.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-rstest-0.10
   (package
     (name "rust-rstest")
@@ -39800,7 +48186,7 @@ please consider using @code{async-std} or @code{tokio}.")
        #:cargo-inputs
        (("rust-futures-preview" ,rust-futures-preview-0.3))))
     (home-page "https://github.com/rustasync/runtime")
-    (synopsis "Traits to implement custom Runtimes.")
+    (synopsis "Traits to implement custom Runtimes")
     (description "This package provides traits to implement custom Runtimes.")
     (license (list license:expat license:asl2.0))))
 
@@ -39831,17 +48217,17 @@ please consider using @code{async-std} or @code{tokio}.")
      "This package provides a Tokio-based asynchronous runtime.")
     (license (list license:expat license:asl2.0))))
 
-(define-public rust-rusqlite-0.25
+(define-public rust-rusqlite-0.26
   (package
     (name "rust-rusqlite")
-    (version "0.25.3")
+    (version "0.26.1")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "rusqlite" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1csfxb0jff78gzakva3bwgmm5g0dk90pnalc4krrdbzsr1kwzbap"))))
+        (base32 "19sh4nnw1i7a6wacqllz20qpqpdj96jsg3dzaq61cwmd3ywv10la"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -39851,14 +48237,15 @@ please consider using @code{async-std} or @code{tokio}.")
         ("rust-chrono" ,rust-chrono-0.4)
         ("rust-csv" ,rust-csv-1)
         ("rust-fallible-iterator" ,rust-fallible-iterator-0.2)
-        ("rust-fallible-streaming-iterator" ,rust-fallible-streaming-iterator-0.1)
+        ("rust-fallible-streaming-iterator"
+         ,rust-fallible-streaming-iterator-0.1)
         ("rust-hashlink" ,rust-hashlink-0.7)
         ("rust-lazy-static" ,rust-lazy-static-1)
-        ("rust-libsqlite3-sys" ,rust-libsqlite3-sys-0.22)
+        ("rust-libsqlite3-sys" ,rust-libsqlite3-sys-0.23)
         ("rust-memchr" ,rust-memchr-2)
         ("rust-serde-json" ,rust-serde-json-1)
         ("rust-smallvec" ,rust-smallvec-1)
-        ("rust-time" ,rust-time-0.2)
+        ("rust-time" ,rust-time-0.3)
         ("rust-url" ,rust-url-2)
         ("rust-uuid" ,rust-uuid-0.8))))
     (home-page "https://github.com/rusqlite/rusqlite")
@@ -39866,6 +48253,37 @@ please consider using @code{async-std} or @code{tokio}.")
     (description "This crate provides a wrapper for SQLite.")
     (license license:expat)))
 
+(define-public rust-rusqlite-0.25
+  (package
+    (inherit rust-rusqlite-0.26)
+    (name "rust-rusqlite")
+    (version "0.25.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "rusqlite" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1csfxb0jff78gzakva3bwgmm5g0dk90pnalc4krrdbzsr1kwzbap"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bitflags" ,rust-bitflags-1)
+        ("rust-byteorder" ,rust-byteorder-1)
+        ("rust-chrono" ,rust-chrono-0.4)
+        ("rust-csv" ,rust-csv-1)
+        ("rust-fallible-iterator" ,rust-fallible-iterator-0.2)
+        ("rust-fallible-streaming-iterator" ,rust-fallible-streaming-iterator-0.1)
+        ("rust-hashlink" ,rust-hashlink-0.7)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-libsqlite3-sys" ,rust-libsqlite3-sys-0.22)
+        ("rust-memchr" ,rust-memchr-2)
+        ("rust-serde-json" ,rust-serde-json-1)
+        ("rust-smallvec" ,rust-smallvec-1)
+        ("rust-time" ,rust-time-0.2)
+        ("rust-url" ,rust-url-2)
+        ("rust-uuid" ,rust-uuid-0.8))))))
+
 (define-public rust-rusqlite-0.24
   (package
     (inherit rust-rusqlite-0.25)
@@ -39952,7 +48370,7 @@ please consider using @code{async-std} or @code{tokio}.")
              (setenv "RUSTC_BOOTSTRAP" "1")
              #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))))
+     (list pkg-config))))
 
 (define-public rust-rusqlite-0.19
   (package
@@ -39990,37 +48408,56 @@ please consider using @code{async-std} or @code{tokio}.")
         ("rust-unicase" ,rust-unicase-2)
         ("rust-uuid" ,rust-uuid-0.7))))
     (inputs
-     `(("sqlite" ,sqlite)))))
+     (list sqlite))))
 
-(define-public rust-rust-argon2-0.7
+(define-public rust-rust-argon2-0.8
   (package
     (name "rust-rust-argon2")
-    (version "0.7.0")
+    (version "0.8.3")
     (source
-      (origin
-        (method url-fetch)
-        (uri (crate-uri "rust-argon2" version))
-        (file-name
-         (string-append name "-" version ".tar.gz"))
-        (sha256
-         (base32
-          "05xh5wfxgzq3b6jys8r34f3hmqqfs8ylvf934n9z87wfv95szj1b"))))
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "rust-argon2" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1yvqkv04fqk3cbvyasibr4bqbxa6mij8jdvibakwlcsbjh6q462b"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-constant-time-eq" ,rust-constant-time-eq-0.1)
-        ("rust-base64" ,rust-base64-0.11)
+       (("rust-base64" ,rust-base64-0.13)
         ("rust-blake2b-simd" ,rust-blake2b-simd-0.5)
-        ("rust-crossbeam-utils" ,rust-crossbeam-utils-0.7))))
+        ("rust-constant-time-eq" ,rust-constant-time-eq-0.1)
+        ("rust-crossbeam-utils" ,rust-crossbeam-utils-0.8)
+        ("rust-serde" ,rust-serde-1))))
     (home-page "https://github.com/sru-systems/rust-argon2")
-    (synopsis
-     "Rust implementation of the Argon2 password hashing function")
+    (synopsis "Argon2 password hashing function in Rust")
     (description
      "This package provides a Rust implementation of the Argon2 password
 hashing function.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-rust-argon2-0.7
+  (package
+    (inherit rust-rust-argon2-0.8)
+    (name "rust-rust-argon2")
+    (version "0.7.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "rust-argon2" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "05xh5wfxgzq3b6jys8r34f3hmqqfs8ylvf934n9z87wfv95szj1b"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-constant-time-eq" ,rust-constant-time-eq-0.1)
+        ("rust-base64" ,rust-base64-0.11)
+        ("rust-blake2b-simd" ,rust-blake2b-simd-0.5)
+        ("rust-crossbeam-utils" ,rust-crossbeam-utils-0.7))))))
+
 (define-public rust-rust-argon2-0.5
   (package
     (name "rust-rust-argon2")
@@ -40099,8 +48536,7 @@ password hashing function.")
           "10k58hf367626d4akl7ifyk5qwqphfs5x6z1yay22pkyc6w7q4h1"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:rust ,rust-1.46    ; or later
-       #:tests? #f          ; not all test files included.
+     `(#:tests? #f          ; not all test files included.
        #:cargo-inputs
        (("rust-arbitrary" ,rust-arbitrary-1)
         ("rust-arrayvec" ,rust-arrayvec-0.5)
@@ -40584,10 +49020,10 @@ It is automatically published using the compiler repository at
 @url{https://www.github.com/rust-lang/rust}")
     (license (list license:expat license:asl2.0))))
 
-(define-public rust-rustc-ap-rustc-lexer-721
+(define-public rust-rustc-ap-rustc-lexer-725
   (package
     (name "rust-rustc-ap-rustc-lexer")
-    (version "721.0.0")
+    (version "725.0.0")
     (source
      (origin
        (method url-fetch)
@@ -40596,10 +49032,11 @@ It is automatically published using the compiler repository at
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1ldk41a4vxgh39p9650vhw1j7fng06pfmvb4xb2pvp22547gd89b"))))
+         "13pnbln1mnv51p1kgf6ljmzypp9q0j4aplxac5val0x2z0p78l7r"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:cargo-inputs
+     `(#:skip-build? #t
+       #:cargo-inputs
        (("rust-unicode-xid" ,rust-unicode-xid-0.2))
        #:cargo-development-inputs
        (("rust-expect-test" ,rust-expect-test-1))))
@@ -40611,6 +49048,27 @@ It is automatically published using the compiler repository at
 @url{https://www.github.com/rust-lang/rust}.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-rustc-ap-rustc-lexer-721
+  (package
+    (inherit rust-rustc-ap-rustc-lexer-725)
+    (name "rust-rustc-ap-rustc-lexer")
+    (version "721.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "rustc-ap-rustc_lexer" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1ldk41a4vxgh39p9650vhw1j7fng06pfmvb4xb2pvp22547gd89b"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-unicode-xid" ,rust-unicode-xid-0.2))
+       #:cargo-development-inputs
+       (("rust-expect-test" ,rust-expect-test-1))))))
+
 (define-public rust-rustc-ap-rustc-lexer-654
   (package
     (inherit rust-rustc-ap-rustc-lexer-721)
@@ -40766,7 +49224,7 @@ It is automatically published using the compiler repository at
       (origin
         (method url-fetch)
         (uri (crate-uri "rustc-demangle" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "10qp42sl1wrdbgbbh8rnay2grm976z7hqgz32c4y09l1c071qsac"))))
@@ -40804,6 +49262,25 @@ It is automatically published using the compiler repository at
      "This package provides a speedy, non-cryptographic hash used in rustc.")
     (license (list license:asl2.0 license:expat))))
 
+(define-public rust-rustc-hex-2
+  (package
+    (name "rust-rustc-hex")
+    (version "2.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "rustc-hex" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1mkjy2vbn5kzg67wgngwddlk4snmd8mkjkql2dzrzzfh6ajzcx9y"))))
+    (build-system cargo-build-system)
+    (arguments `(#:skip-build? #t))
+    (home-page "https://github.com/debris/rustc-hex")
+    (synopsis "Rustc-serialize compatible hex conversion traits")
+    (description "This package provides rustc-serialize compatible hex
+conversion traits.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-rustc-rayon-0.3
   (package
     (name "rust-rustc-rayon")
@@ -40887,7 +49364,7 @@ forth, as well as the ability to create custom thread-pools with ThreadPool.")
       (origin
         (method url-fetch)
         (uri (crate-uri "rustc-serialize" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1nkg3vasg7nk80ffkazizgiyv3hb1l9g3d8h17cajbkx538jiwfw"))))
@@ -40934,7 +49411,7 @@ decoding.")
       (origin
         (method url-fetch)
         (uri (crate-uri "rustc-std-workspace-core" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1309xhwyai9xpz128xrfjqkmnkvgjwddznmj7brbd8i8f58zamhr"))))
@@ -41020,29 +49497,47 @@ require unstable language features.")
      "small helper to generate version information for git packages")
     (license (list license:expat license:asl2.0))))
 
-(define-public rust-rustc-version-0.3
+(define-public rust-rustc-version-0.4
   (package
     (name "rust-rustc-version")
-    (version "0.3.3")
+    (version "0.4.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "rustc_version" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1vjmw7xcdri0spsf24mkpwpph853wrbqppihhw061i2igh4f5pzh"))))
+        (base32 "0rpk9rcdk405xhbmgclsh4pai0svn49x35aggl4nhbkd4a2zb85z"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-semver" ,rust-semver-0.11))))
-    (home-page "https://github.com/Kimundi/rustc-version-rs")
+       (("rust-semver" ,rust-semver-1))
+       #:cargo-development-inputs
+       (("rust-doc-comment" ,rust-doc-comment-0.3))))
+    (home-page "https://github.com/djc/rustc-version-rs")
     (synopsis "Library for querying the version of an installed rustc compiler")
     (description
      "This package provides a library for querying the version of an installed
 rustc compiler.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-rustc-version-0.3
+  (package/inherit rust-rustc-version-0.4
+    (name "rust-rustc-version")
+    (version "0.3.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "rustc_version" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1vjmw7xcdri0spsf24mkpwpph853wrbqppihhw061i2igh4f5pzh"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-semver" ,rust-semver-0.11))))))
+
 (define-public rust-rustc-version-0.2
   (package
     (inherit rust-rustc-version-0.3)
@@ -41061,6 +49556,22 @@ rustc compiler.")
      `(#:skip-build? #t
        #:cargo-inputs (("rust-semver" ,rust-semver-0.9))))))
 
+(define-public rust-rustc-version-0.1
+  (package
+    (inherit rust-rustc-version-0.3)
+    (name "rust-rustc-version")
+    (version "0.1.7")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "rustc_version" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1160jjsqhqr25cvhr48hmpp8v61bjvjcnxzb0cyf4373lmp3gxf5"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-semver" ,rust-semver-0.1))))))
+
 (define-public rust-rustdoc-stripper-0.1
   (package
     (name "rust-rustdoc-stripper")
@@ -41136,10 +49647,10 @@ rustc compiler.")
         `(("rust-failure" ,rust-failure-0.1)
           ,@(alist-delete "rust-anyhow" cargo-inputs)))))))
 
-(define-public rust-rustls-0.19
+(define-public rust-rustls-0.20
   (package
     (name "rust-rustls")
-    (version "0.19.0")
+    (version "0.20.2")
     (source
      (origin
        (method url-fetch)
@@ -41147,23 +49658,51 @@ rustc compiler.")
        (file-name
         (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "02wqas2pcxk75s9l9c9f1r5am7258bmqprh68pnqfvkwz0gx4kq6"))))
+        (base32 "111z24faq1i1z3gbznfgl7qp3in2fx1y1adijjsl1q7kj0i5wznk"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
+       (("rust-log" ,rust-log-0.4)
+        ("rust-ring" ,rust-ring-0.16)
+        ("rust-sct" ,rust-sct-0.7)
+        ("rust-webpki" ,rust-webpki-0.22))
+       #:cargo-development-inputs
        (("rust-base64" ,rust-base64-0.13)
+        ("rust-criterion" ,rust-criterion-0.3)
+        ("rust-env-logger" ,rust-env-logger-0.9)
         ("rust-log" ,rust-log-0.4)
-        ("rust-ring" ,rust-ring-0.16)
-        ("rust-sct" ,rust-sct-0.6)
-        ("rust-webpki" ,rust-webpki-0.21))))
-    (home-page "https://github.com/ctz/rustls")
+        ("rust-rustls-pemfile" ,rust-rustls-pemfile-0.2)
+        ("rust-webpki-roots" ,rust-webpki-roots-0.22))))
+    (home-page "https://github.com/rustls/rustls")
     (synopsis "Modern TLS library written in Rust")
     (description
      "This package provides a modern TLS library written in Rust.")
     (license
      (list license:asl2.0 license:isc license:expat))))
 
+(define-public rust-rustls-0.19
+  (package
+    (inherit rust-rustls-0.20)
+    (name "rust-rustls")
+    (version "0.19.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "rustls" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "02wqas2pcxk75s9l9c9f1r5am7258bmqprh68pnqfvkwz0gx4kq6"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-base64" ,rust-base64-0.13)
+        ("rust-log" ,rust-log-0.4)
+        ("rust-ring" ,rust-ring-0.16)
+        ("rust-sct" ,rust-sct-0.6)
+        ("rust-webpki" ,rust-webpki-0.21))))))
+
 (define-public rust-rustls-0.18
   (package
     (inherit rust-rustls-0.19)
@@ -41330,25 +49869,35 @@ rustc compiler.")
         ("rust-serde-derive" ,rust-serde-derive-1)
         ("rust-webpki-roots" ,rust-webpki-roots-0.14))))))
 
-(define-public rust-rustls-native-certs-0.5
+(define-public rust-rustls-native-certs-0.6
   (package
     (name "rust-rustls-native-certs")
-    (version "0.5.0")
+    (version "0.6.1")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "rustls-native-certs" version))
-       (file-name (string-append name "-" version ".tar.gz"))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "14i0bbbigk6r6262hvc51vz4dvqk1f3vg2f264wfvn2vi30vf1ss"))))
+        (base32
+         "0hq9h3kri19kv00gvbq61h21rarqadxh6y98wj0c2gvxlbgypaaw"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-openssl-probe" ,rust-openssl-probe-0.1)
-        ("rust-rustls" ,rust-rustls-0.19)
+        ("rust-rustls-pemfile" ,rust-rustls-pemfile-0.2)
         ("rust-schannel" ,rust-schannel-0.1)
-        ("rust-security-framework" ,rust-security-framework-2))))
+        ("rust-security-framework" ,rust-security-framework-2))
+       #:cargo-development-inputs
+       (("rust-ring" ,rust-ring-0.16)
+        ("rust-rustls" ,rust-rustls-0.20)
+        ("rust-serial-test" ,rust-serial-test-0.5)
+        ("rust-untrusted" ,rust-untrusted-0.7)
+        ("rust-webpki" ,rust-webpki-0.22)
+        ("rust-webpki-roots" ,rust-webpki-roots-0.22)
+        ("rust-x509-parser" ,rust-x509-parser-0.12))))
     (home-page "https://github.com/ctz/rustls-native-certs")
     (synopsis "Use the platform native certificate store with rustls")
     (description "@code{rustls-native-certs} allows rustls to use the platform
@@ -41356,6 +49905,26 @@ native certificate store.")
     (license
      (list license:asl2.0 license:isc license:expat))))
 
+(define-public rust-rustls-native-certs-0.5
+  (package
+    (inherit rust-rustls-native-certs-0.6)
+    (name "rust-rustls-native-certs")
+    (version "0.5.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "rustls-native-certs" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "14i0bbbigk6r6262hvc51vz4dvqk1f3vg2f264wfvn2vi30vf1ss"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-openssl-probe" ,rust-openssl-probe-0.1)
+        ("rust-rustls" ,rust-rustls-0.19)
+        ("rust-schannel" ,rust-schannel-0.1)
+        ("rust-security-framework" ,rust-security-framework-2))))))
+
 (define-public rust-rustls-native-certs-0.4
   (package
     (inherit rust-rustls-native-certs-0.5)
@@ -41382,6 +49951,29 @@ native certificate store.")
         ("rust-webpki" ,rust-webpki-0.21)
         ("rust-webpki-roots" ,rust-webpki-roots-0.20))))))
 
+(define-public rust-rustls-pemfile-0.2
+  (package
+    (name "rust-rustls-pemfile")
+    (version "0.2.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "rustls-pemfile" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1jfi97lqnnnnxhmfy6ygrsp0x70m8wsdpaw45svvz1qc6vmymssy"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-base64" ,rust-base64-0.13))
+       #:cargo-development-inputs
+       (("rust-criterion" ,rust-criterion-0.3))))
+    (home-page "https://github.com/rustls/pemfile")
+    (synopsis "Basic parser for PEM formatted keys and certificates")
+    (description "This package provides a very basic parser for the
+PEM-encodings commonly used to store keys and certificates at rest.")
+    (license (list license:asl2.0 license:isc license:expat))))
+
 (define-public rust-rusttype-0.9
   (package
     (name "rust-rusttype")
@@ -41769,6 +50361,55 @@ sub-processes using a fork-like interface.")
         (base32
          "1n3iw9kaq70dw1rvvma0gjwydbj0f2mvvqvrva69f5cl6yv1dnd0"))))))
 
+(define-public rust-rkyv-0.6
+  (package
+    (name "rust-rkyv")
+    (version "0.6.7")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "rkyv" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "01wsn0i8gsw958j892w8i4fyzjdsyhrh7c5zajig049kbqz5n4yb"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bytecheck" ,rust-bytecheck-0.5)
+        ("rust-memoffset" ,rust-memoffset-0.6)
+        ("rust-ptr-meta" ,rust-ptr-meta-0.1)
+        ("rust-rkyv-derive" ,rust-rkyv-derive-0.6)
+        ("rust-seahash" ,rust-seahash-4))))
+    (home-page "https://github.com/rkyv/rkyv")
+    (synopsis "Zero-copy deserialization framework for Rust")
+    (description "Rkyv is a zero-copy deserialization framework for Rust.")
+    (license license:expat)))
+
+(define-public rust-rkyv-derive-0.6
+  (package
+    (name "rust-rkyv-derive")
+    (version "0.6.7")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "rkyv_derive" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1mc7rnps41gdywahsffqlypsp9jqmp0r6hlh2nxm31bddfgli3xs"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-proc-macro2" ,rust-proc-macro2-1)
+        ("rust-quote" ,rust-quote-1)
+        ("rust-syn" ,rust-syn-1))))
+    (home-page "https://github.com/rkyv/rkyv")
+    (synopsis "Derive macro for zero-copy deserialization framework")
+    (description "This package provides a Derive macro for the rkyv
+deserialization framework.")
+    (license license:expat)))
+
 (define-public rust-ryu-1
   (package
     (name "rust-ryu")
@@ -41777,7 +50418,7 @@ sub-processes using a fork-like interface.")
       (origin
         (method url-fetch)
         (uri (crate-uri "ryu" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0xlx9ybzncrb7d6r9533g8ydlg6mr252pfzl4g9cqaqkpvk24mjk"))))
@@ -41799,14 +50440,14 @@ quickly convert floating point numbers to decimal strings.")
 (define-public rust-s3handler-0.7
   (package
     (name "rust-s3handler")
-    (version "0.7.3")
+    (version "0.7.5")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "s3handler" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "13m2l9m4a1mkmwvzasqsby8gls9mrihalf5gnc6scrbdqkycrnqa"))))
+        (base32 "1cgxjzlili1598j9q21kdmml2m67hmcb1fpamhw8n2xf3h7mkf80"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -41819,7 +50460,8 @@ quickly convert floating point numbers to decimal strings.")
         ("rust-failure" ,rust-failure-0.1)
         ("rust-failure-derive" ,rust-failure-derive-0.1)
         ("rust-futures" ,rust-futures-0.3)
-        ("rust-hmac" ,rust-hmac-0.4)
+        ("rust-hex" ,rust-hex-0.4)
+        ("rust-hmac" ,rust-hmac-0.11)
         ("rust-hmac-sha1" ,rust-hmac-sha1-0.1)
         ("rust-log" ,rust-log-0.4)
         ("rust-md5" ,rust-md5-0.7)
@@ -41827,12 +50469,11 @@ quickly convert floating point numbers to decimal strings.")
         ("rust-quick-xml" ,rust-quick-xml-0.22)
         ("rust-regex" ,rust-regex-1)
         ("rust-reqwest" ,rust-reqwest-0.11)
-        ("rust-rust-crypto" ,rust-rust-crypto-0.2)
         ("rust-rustc-serialize" ,rust-rustc-serialize-0.3)
         ("rust-serde" ,rust-serde-1)
         ("rust-serde-derive" ,rust-serde-derive-1)
         ("rust-serde-json" ,rust-serde-json-1)
-        ("rust-sha2" ,rust-sha2-0.6)
+        ("rust-sha2" ,rust-sha2-0.9)
         ("rust-tokio" ,rust-tokio-1)
         ("rust-url" ,rust-url-2))))
     (home-page "https://crates.io/crates/s3handler")
@@ -41925,7 +50566,7 @@ quickly convert floating point numbers to decimal strings.")
 (define-public rust-salsa-macros-0.17
   (package
     (name "rust-salsa-macros")
-    (version "0.17.0-pre.1")
+    (version "0.17.0-pre.2")
     (source
      (origin
        (method url-fetch)
@@ -41934,7 +50575,7 @@ quickly convert floating point numbers to decimal strings.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1yrjiriw5bb0gxl2dk7c5ng7g5wlkc4gd65czx5x99bzc9hc0brf"))))
+         "1xrgb38l5fhv3lqx2lwnqc3s2zrgxmj63cd7kl0vyl7m5lsjwv5c"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build?
@@ -41951,10 +50592,33 @@ quickly convert floating point numbers to decimal strings.")
      "This package provides a procedural macros for the salsa crate.")
     (license (list license:asl2.0 license:expat))))
 
+(define-public rust-salsa20-0.9
+  (package
+    (name "rust-salsa20")
+    (version "0.9.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "salsa20" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "11i646kpgimimqiq8hyi0b7ngp588f7nl9xsc317d9kdcxgvn3qc"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-cipher" ,rust-cipher-0.3)
+        ("rust-zeroize" ,rust-zeroize-1))))
+    (home-page "https://github.com/RustCrypto/stream-ciphers")
+    (synopsis "Salsa20 Stream Cipher")
+    (description "Salsa20 is a collection of stream cipher algorithms written
+in pure Rust.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-salsa-0.17
   (package
     (name "rust-salsa")
-    (version "0.17.0-pre.1")
+    (version "0.17.0-pre.2")
     (source
      (origin
        (method url-fetch)
@@ -41963,7 +50627,7 @@ quickly convert floating point numbers to decimal strings.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "10jm7s8abw0m7iffa2983kmwgmv342i9g32d1irsgmccx9hq40sq"))))
+         "0ypiig0p9969nkb7k0ydxm5bnc3jva815dfh8hqpackcnk63s8lv"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build?
@@ -41995,6 +50659,28 @@ quickly convert floating point numbers to decimal strings.")
 computation (experimental)")
     (license (list license:asl2.0 license:expat))))
 
+(define-public rust-safe-arch-0.5
+  (package
+    (name "rust-safe-arch")
+    (version "0.5.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "safe_arch" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "01ffy9aw9v1n4bcwl525zw3gnh18jk7aq38iqcn51bwnjrnkvzy1"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bytemuck" ,rust-bytemuck-1))))
+    (home-page "https://github.com/Lokathor/safe_arch")
+    (synopsis "Access core::arch safely")
+    (description "This package exposes @code{core::arch} safely via
+@code{#[cfg()]}.")
+    (license (list license:zlib license:asl2.0 license:expat))))
+
 (define-public rust-safemem-0.3
   (package
     (name "rust-safemem")
@@ -42003,7 +50689,7 @@ computation (experimental)")
       (origin
         (method url-fetch)
         (uri (crate-uri "safemem" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0wp0d2b2284lw11xhybhaszsczpbq1jbdklkxgifldcknmy3nw7g"))))
@@ -42038,7 +50724,7 @@ computation (experimental)")
       (origin
         (method url-fetch)
         (uri (crate-uri "same-file" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "00h5j1w87dmhnvbv9l8bic3y7xxsnjmssvifw2ayvgx9mb1ivz4k"))))
@@ -42150,7 +50836,7 @@ motivation for writing this library.
       (origin
         (method url-fetch)
         (uri (crate-uri "schannel" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "08d0p5iy574vdrax4l3laazic0crj7rp7vp3if5rrfkcdfq51xc7"))))
@@ -42184,7 +50870,7 @@ server functionality.")
      `(#:cargo-inputs
        (("rust-parking-lot" ,rust-parking-lot-0.11))))
     (home-page "https://github.com/sfackler/scheduled-thread-pool")
-    (synopsis "A scheduled thread pool")
+    (synopsis "Scheduled thread pool")
     (description "This package provides a scheduled thread pool.")
     (license (list license:expat license:asl2.0))))
 
@@ -42196,7 +50882,7 @@ server functionality.")
       (origin
         (method url-fetch)
         (uri (crate-uri "scoped_threadpool" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1a26d3lk40s9mrf4imhbik7caahmw2jryhhb6vqv6fplbbgzal8x"))))
@@ -42225,7 +50911,7 @@ non-'static references in parallel.")
       (origin
         (method url-fetch)
         (uri (crate-uri "scoped-tls" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1hj8lifzvivdb1z02lfnzkshpvk85nkgzxsy2hc0zky9wf894spa"))))
@@ -42248,7 +50934,7 @@ library's old @code{scoped_thread_local!} macro for providing scoped access to
       (origin
         (method url-fetch)
         (uri (crate-uri "scoped-tls" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0a2bn9d2mb07c6l16sadijy4p540g498zddfxyiq4rsqpwrglbrk"))))))
@@ -42261,7 +50947,7 @@ library's old @code{scoped_thread_local!} macro for providing scoped access to
       (origin
         (method url-fetch)
         (uri (crate-uri "scopeguard" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1kbqm85v43rq92vx7hfiay6pmcga03vrjbbfwqpyj3pwsg3b16nj"))))
@@ -42286,11 +50972,41 @@ with one of the implemented strategies.")
         (method url-fetch)
         (uri (crate-uri "scopeguard" version))
         (file-name
-          (string-append name "-" version ".crate"))
+          (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "09sy9wbqp409pkwmqni40qmwa99ldqpl48pp95m1xw8sc19qy9cl"))))))
 
+(define-public rust-scraper-0.12
+  (package
+    (name "rust-scraper")
+    (version "0.12.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "scraper" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "04icx88wdrlz1qv0dz1zc0inlfq34ajwdpih854jw368j2kjmq28"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-cssparser" ,rust-cssparser-0.27)
+        ("rust-ego-tree" ,rust-ego-tree-0.6)
+        ("rust-getopts" ,rust-getopts-0.2)
+        ("rust-html5ever" ,rust-html5ever-0.25)
+        ("rust-matches" ,rust-matches-0.1)
+        ("rust-selectors" ,rust-selectors-0.22)
+        ("rust-smallvec" ,rust-smallvec-1)
+        ("rust-tendril" ,rust-tendril-0.4))))
+    (home-page "https://github.com/programble/scraper")
+    (synopsis "HTML parsing and querying with CSS selectors")
+    (description
+     "Scraper provides an interface to Servo's html5ever and selectors crates,
+for browser-grade parsing and querying.")
+    (license license:isc)))
+
 (define-public rust-scratch-1
   (package
     (name "rust-scratch")
@@ -42315,8 +51031,36 @@ 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.8
+  (package
+    (name "rust-scrypt")
+    (version "0.8.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "scrypt" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "09fkz5sc7qx97dyi1nkv69z36diggd2c9mja33cxpsqicdy6sgg7"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-hmac" ,rust-hmac-0.12)
+        ("rust-password-hash" ,rust-password-hash-0.3)
+        ("rust-pbkdf2" ,rust-pbkdf2-0.10)
+        ("rust-salsa20" ,rust-salsa20-0.9)
+        ("rust-sha2" ,rust-sha2-0.10))))
+    (home-page "https://github.com/RustCrypto/password-hashes")
+    (synopsis "Scrypt password-based key derivation function")
+    (description
+     "This packages provides a Scrypt password-based key derivation
+function.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-scrypt-0.3
   (package
+    (inherit rust-scrypt-0.8)
     (name "rust-scrypt")
     (version "0.3.0")
     (source
@@ -42328,7 +51072,6 @@ clean}.")
         (sha256
          (base32
           "1apicbvp7cgc1z2nl5l48g8h3kp7p592r4zbkx9vsri2ivnvgv43"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-base64" ,rust-base64-0.12)
@@ -42337,12 +51080,7 @@ clean}.")
         ("rust-rand" ,rust-rand-0.7)
         ("rust-rand-core" ,rust-rand-core-0.5)
         ("rust-sha2" ,rust-sha2-0.9)
-        ("rust-subtle" ,rust-subtle-2))))
-    (home-page "https://github.com/RustCrypto/password-hashes")
-    (synopsis "Scrypt password-based key derivation function")
-    (description
-     "Scrypt password-based key derivation function.")
-    (license (list license:expat license:asl2.0))))
+        ("rust-subtle" ,rust-subtle-2))))))
 
 (define-public rust-scrypt-0.2
   (package
@@ -42478,8 +51216,30 @@ Pwrite traits from the scroll crate.")
 Pwrite traits from the scroll crate.")
     (license license:expat)))
 
+(define-public rust-sct-0.7
+  (package
+    (name "rust-sct")
+    (version "0.7.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "sct" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "193w3dg2pcn7138ab4c586pl76nkryn4h6wqlwvqj5gqr6vwsgfm"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-ring" ,rust-ring-0.16)
+        ("rust-untrusted" ,rust-untrusted-0.7))))
+    (home-page "https://github.com/ctz/sct.rs")
+    (synopsis "Certificate transparency SCT verification library")
+    (description "Certificate transparency SCT verification library.")
+    (license (list license:asl2.0 license:isc license:expat))))
+
 (define-public rust-sct-0.6
   (package
+    (inherit rust-sct-0.7)
     (name "rust-sct")
     (version "0.6.0")
     (source
@@ -42489,17 +51249,12 @@ Pwrite traits from the scroll crate.")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "0g4dz7las43kcpi9vqv9c6l1afjkdv3g3w3s7d2w7a7w77wjl173"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-ring" ,rust-ring-0.16)
         ("rust-untrusted" ,rust-untrusted-0.7))
        #:cargo-development-inputs
-       (("rust-cc" ,rust-cc-1))))
-    (home-page "https://github.com/ctz/sct.rs")
-    (synopsis "Certificate transparency SCT verification library")
-    (description "Certificate transparency SCT verification library")
-    (license (list license:asl2.0 license:isc license:expat))))
+       (("rust-cc" ,rust-cc-1))))))
 
 (define-public rust-sct-0.5
   (package
@@ -42582,6 +51337,26 @@ Pwrite traits from the scroll crate.")
 proven statistical guarantees.")
     (license license:expat)))
 
+(define-public rust-seahash-4
+  (package
+    (name "rust-seahash")
+    (version "4.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "seahash" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0sxsb64np6bvnppjz5hg4rqpnkczhsl8w8kf2a5lr1c08xppn40w"))))
+    (build-system cargo-build-system)
+    (arguments '(#:skip-build? #t))
+    (home-page "https://gitlab.redox-os.org/redox-os/seahash")
+    (synopsis "Hash function with proven statistical guarantees")
+    (description
+     "This package provides a fast, portable hash function with proven
+statistical guarantees.")
+    (license license:expat)))
+
 (define-public rust-seccomp-sys-0.1
   (package
     (name "rust-seccomp-sys")
@@ -42598,7 +51373,7 @@ proven statistical guarantees.")
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs (("rust-libc" ,rust-libc-0.2))))
-    (inputs `(("libseccomp" ,libseccomp)))
+    (inputs (list libseccomp))
     (home-page "https://github.com/polachok/seccomp-sys")
     (synopsis "Low-level bindings to libseccomp")
     (description "This package provides low-level bindings to libseccomp.")
@@ -42803,7 +51578,7 @@ macOS and iOS.")
       (origin
         (method url-fetch)
         (uri (crate-uri "security-framework-sys" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "15gqhhi206lzynd0pcbswxhvqc4p9bmpl2h9qnwfnpb16zy96573"))))
@@ -42883,6 +51658,21 @@ macOS and iOS.")
     (description "This package provides CSS Selectors matching for Rust.")
     (license license:mpl2.0)))
 
+(define-public rust-selectors-0.21
+  (package
+    (inherit rust-selectors-0.22)
+    (name "rust-selectors")
+    (version "0.21.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "selectors" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "11icfj8ix8fqjsnw3dqw83bmhd5qdhxzq2klb486akyypq0b31hv"))))))
+
 (define-public rust-sema-0.1
   (package
     (name "rust-sema")
@@ -43007,6 +51797,47 @@ macOS and iOS.")
      "Semantic version parsing and comparison.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-semver-0.6
+  (package
+    (inherit rust-semver-0.9)
+    (name "rust-semver")
+    (version "0.6.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "semver" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0drmjiwkq0znj33q9x9hw7ld8f28n9diyjs3jlh1l1v5kvn8ccbs"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-semver-parser" ,rust-semver-parser-0.7))
+       #:cargo-development-inputs
+       (("rust-crates-index" ,rust-crates-index-0.5)
+        ("rust-tempdir" ,rust-tempdir-0.3))))))
+
+(define-public rust-semver-0.1
+  (package
+    (name "rust-semver")
+    (version "0.1.20")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "semver" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1b10m0hxrr947gp41lj9vnmgl5ddwx3d41vnblsg06ppvkz11x6l"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/dtolnay/semver")
+    (synopsis "Parser and evaluator for Cargo's flavor of Semantic Versioning")
+    (description
+     "This package provides a parser and evaluator for Cargo's flavor of
+Semantic Versioning.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-semver-parser-0.10
   (package
     (name "rust-semver-parser")
@@ -43039,7 +51870,7 @@ macOS and iOS.")
       (origin
         (method url-fetch)
         (uri (crate-uri "semver-parser" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1ahqhvgpzhcsd28id7xnrjv4419i9yyalhm7d7zi430qx0hi2vml"))))))
@@ -43053,7 +51884,7 @@ macOS and iOS.")
       (origin
         (method url-fetch)
         (uri (crate-uri "semver-parser" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "18vhypw6zgccnrlm5ps1pwa0khz7ry927iznpr88b87cagr1v2iq"))))))
@@ -43081,6 +51912,49 @@ also have to make sure that the wrapper is dropped from within the original
 thread.  If any of these constraints is violated, a panic occurs.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-seq-io-0.3
+  (package
+    (name "rust-seq-io")
+    (version "0.3.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "seq_io" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1r643ihyba62vbr5l085mzz3gzfy4iba33nm2l981smvwcb8rzf6"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-buf-redux" ,rust-buf-redux-0.8)
+        ("rust-crossbeam" ,rust-crossbeam-0.8)
+        ("rust-memchr" ,rust-memchr-2)
+        ("rust-scoped-threadpool" ,rust-scoped-threadpool-0.1)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-derive" ,rust-serde-derive-1))
+       #:cargo-development-inputs
+       (("rust-bio" ,rust-bio-0.32)
+        ("rust-criterion" ,rust-criterion-0.3)
+        ("rust-fastq" ,rust-fastq-0.6)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-matches" ,rust-matches-0.1)
+        ("rust-rand" ,rust-rand-0.7)
+        ("rust-rand-isaac" ,rust-rand-isaac-0.2))))
+    (inputs
+     (list zlib))
+    (home-page "https://github.com/markschl/seq_io")
+    (synopsis "Fast FASTA, FASTQ and FASTX parsing")
+    (description "This library provides readers for the the following sequence
+formats:
+
+@itemize
+@item FASTA,
+@item FASTQ (including multi-line FASTQ),
+@item FASTX: Automatic recognition of the sequence format (either FASTA or FASTQ).
+@end itemize
+")
+    (license license:expat)))
+
 (define-public rust-seq-macro-0.2
   (package
     (name "rust-seq-macro")
@@ -43108,109 +51982,17 @@ thread.  If any of these constraints is violated, a panic occurs.")
 fragment of code.")
     (license (list license:expat license:asl2.0))))
 
-(define-public rust-sequoia-openpgp-0.9
-  (package
-    (name "rust-sequoia-openpgp")
-    (version "0.9.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (crate-uri "sequoia-openpgp" version))
-       (file-name
-        (string-append name "-" version ".tar.gz"))
-       (sha256
-        (base32
-         "007h2pi7lcph5jf5bxjydm7hjwjai33yk6dic3cxknki22lxlkfw"))))
-    (build-system cargo-build-system)
-    (arguments
-     `(#:cargo-inputs
-       (("rust-base64" ,rust-base64-0.9)
-        ("rust-buffered-reader" ,rust-buffered-reader-0.9)
-        ("rust-bzip2" ,rust-bzip2-0.3)
-        ("rust-failure" ,rust-failure-0.1)
-        ("rust-flate2" ,rust-flate2-1)
-        ("rust-idna" ,rust-idna-0.1)
-        ("rust-lalrpop" ,rust-lalrpop-0.17)
-        ("rust-lalrpop-util" ,rust-lalrpop-util-0.17)
-        ("rust-lazy-static" ,rust-lazy-static-1)
-        ("rust-memsec" ,rust-memsec-0.5)
-        ("rust-nettle" ,rust-nettle-5)
-        ("rust-quickcheck" ,rust-quickcheck-0.8)
-        ("rust-rand" ,rust-rand-0.6)
-        ("rust-sequoia-rfc2822" ,rust-sequoia-rfc2822-0.9)
-        ("rust-time" ,rust-time-0.1))
-       #:cargo-development-inputs
-       (("rust-rpassword" ,rust-rpassword-3))))
-    (native-inputs
-     `(("pkg-config" ,pkg-config)))
-    (inputs
-     `(("clang" ,clang)
-       ("nettle" ,nettle)))
-    (home-page "https://sequoia-pgp.org/")
-    (synopsis "OpenPGP data types and associated machinery")
-    (description
-     "This crate aims to provide a complete implementation of OpenPGP as
-defined by RFC 4880 as well as some extensions (e.g., RFC 6637, which
-describes ECC cryptography) for OpenPGP.  This includes support for unbuffered
-message processing.
-
-A few features that the OpenPGP community considers to be deprecated (e.g.,
-version 3 compatibility) have been left out.  We have also updated some
-OpenPGP defaults to avoid foot guns (e.g., we selected modern algorithm
-defaults).  If some functionality is missing, please file a bug report.")
-    (license license:gpl3)))
-
-(define-public rust-sequoia-rfc2822-0.9
-  (package
-    (name "rust-sequoia-rfc2822")
-    (version "0.9.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (crate-uri "sequoia-rfc2822" version))
-       (file-name
-        (string-append name "-" version ".tar.gz"))
-       (sha256
-        (base32
-         "1aj34i6862718m162rqfv69fkmvdw063s6ws7hbp42n73gb08p5c"))))
-    (build-system cargo-build-system)
-    (arguments
-     `(#:cargo-inputs
-       (("rust-failure" ,rust-failure-0.1)
-        ("rust-lalrpop" ,rust-lalrpop-0.17)
-        ("rust-lalrpop-util" ,rust-lalrpop-util-0.17))
-       #:cargo-development-inputs
-       (("rust-lazy-static" ,rust-lazy-static-1)
-        ("rust-quickcheck" ,rust-quickcheck-0.8)
-        ("rust-rand" ,rust-rand-0.6))))
-    (home-page "https://sequoia-pgp.org/")
-    (synopsis "RFC 2822 name-addr parser")
-    (description
-     "Currently, this crate only recognizes the RFC 2822 name-addr and
-addr-spec productions, i.e., things of the form:
-
-Name (Comment) <email@@example.org>
-
-and
-
-email@@example.org
-
-Although the above appear simple to parse, RFC 2822's whitespace and comment
-rules are rather complex.  This crate implements the whole grammar." )
-    (license license:gpl3)))
-
 (define-public rust-serde-1
   (package
     (name "rust-serde")
-    (version "1.0.123")
+    (version "1.0.133")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "serde" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32
-         "1bk9733mgiv5sg8yb19y8mc85fb2aaqp1k02v10alavj688idmcj"))))
+        (base32 "16lq33l09nkm0hxdhfjjmh3yjv83rrcqw9lbxb8y4q3va5km0mlp"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -43285,6 +52067,29 @@ rules are rather complex.  This crate implements the whole grammar." )
      `(#:skip-build? #t
        #:cargo-inputs (("rust-num" ,rust-num-0.2))))))
 
+(define-public rust-serde-big-array-0.3
+  (package
+    (name "rust-serde-big-array")
+    (version "0.3.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "serde-big-array" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0qpy3nk3dpxrrmcfmcnsijad10yi0jxy1x6gc6bbwywma9vhxchq"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-serde" ,rust-serde-1)
+        ("rust-serde-derive" ,rust-serde-derive-1))
+       #:cargo-development-inputs
+       (("rust-serde-json" ,rust-serde-json-1))))
+    (home-page "https://github.com/est31/serde-big-array")
+    (synopsis "Big array helper for serde")
+    (description "This package provides a big array helper for serde.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-serde-big-array-0.2
   (package
     (name "rust-serde-big-array")
@@ -43370,16 +52175,14 @@ rules are rather complex.  This crate implements the whole grammar." )
 (define-public rust-serde-cbor-0.11
   (package
     (name "rust-serde-cbor")
-    (version "0.11.1")
+    (version "0.11.2")
     (source
-      (origin
-        (method url-fetch)
-        (uri (crate-uri "serde-cbor" version))
-        (file-name
-         (string-append name "-" version ".tar.gz"))
-        (sha256
-         (base32
-          "08m62mfqjnpa543kd9r9cyxlqc6y73avhsl3n8svgs4h5zxaq60y"))))
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "serde-cbor" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1xf1bq7ixha30914pd5jl3yw9v1x6car7xgrpimvfvs5vszjxvrb"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
@@ -43560,7 +52363,7 @@ framework.")
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-rmp-serde" ,rust-rmp-serde-0.14)
+       (("rust-rmp-serde" ,rust-rmp-serde-0.15)
         ("rust-serde" ,rust-serde-1)
         ("rust-serde-json" ,rust-serde-json-1)
         ("rust-toml" ,rust-toml-0.5)
@@ -43578,15 +52381,14 @@ TOML/JSON/MessagePack strings and serializable values.")
 (define-public rust-serde-derive-1
   (package
     (name "rust-serde-derive")
-    (version "1.0.123")
+    (version "1.0.133")
     (source
-      (origin
-        (method url-fetch)
-        (uri (crate-uri "serde-derive" version))
-        (file-name (string-append name "-" version ".crate"))
-        (sha256
-         (base32
-          "0ccg4m7ww6mfs5vjdbdifri2kf1wyd4difjnqnraph2gssaw54ck"))))
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "serde-derive" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0dym0l8a0pch0mkqnhrf89n4wngzwf0d1z88hb8dhs456acic87d"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
@@ -43597,9 +52399,9 @@ TOML/JSON/MessagePack strings and serializable values.")
        (("rust-serde" ,rust-serde-1))))
     (home-page "https://serde.rs")
     (synopsis
-      "Macros 1.1 implementation of #[derive(Serialize, Deserialize)]")
+     "Macros 1.1 implementation of #[derive(Serialize, Deserialize)]")
     (description
-      "Macros 1.1 implementation of #[derive(Serialize, Deserialize)]")
+     "Macros 1.1 implementation of #[derive(Serialize, Deserialize)].")
     (license (list license:expat license:asl2.0))))
 
 (define-public rust-serde-derive-0.9
@@ -43659,19 +52461,19 @@ data.  This crate provides a wrapper that works with any existing Serde
 (define-public rust-serde-json-1
   (package
     (name "rust-serde-json")
-    (version "1.0.64")
+    (version "1.0.74")
     (source
      (origin
        (method url-fetch)
-       (uri (crate-uri "serde_json" version))
+       (uri (crate-uri "serde-json" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0y9gk3yikncrc0zajmwc0pidr7zfwafawb4gidf6mqyskzf9g7kr"))))
+        (base32 "0hiixjnrnrvvpyh58av73ds924zgzi4wl0mv8p9nan0w0v6vjazf"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-indexmap" ,rust-indexmap-1)
-        ("rust-itoa" ,rust-itoa-0.4)
+        ("rust-itoa" ,rust-itoa-1)
         ("rust-ryu" ,rust-ryu-1)
         ("rust-serde" ,rust-serde-1))
        #:cargo-development-inputs
@@ -44305,7 +53107,7 @@ functionality and without weak references.")
        (("rust-libc" ,rust-libc-0.2)
         ("rust-servo-fontconfig-sys" ,rust-servo-fontconfig-sys-4))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("fontconfig" ,fontconfig)))))
 
@@ -44359,7 +53161,7 @@ functionality and without weak references.")
         ("rust-servo-freetype-sys" ,rust-servo-freetype-sys-4)
         ("rust-pkg-config" ,rust-pkg-config-0.3))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("fontconfig" ,fontconfig)))))
 
@@ -44385,29 +53187,55 @@ functionality and without weak references.")
        (("rust-cmake" ,rust-cmake-0.1)
         ("rust-pkg-config" ,rust-pkg-config-0.3))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("freetype" ,freetype)))
+     (list freetype))
     (home-page "https://www.freetype.org/")
     (synopsis "Rust wrapper around freetype")
     (description
      "This package provides a Rust wrapper around the FreeType library.")
     (license license:mpl2.0)))  ; build.rs is mpl2.0
 
+(define-public rust-sha-1-0.10
+  (package
+    (name "rust-sha-1")
+    (version "0.10.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "sha-1" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "03zag8zk4qlv40n2yryddapv5yxkam3hdr7n53d8qrzr2gali3q2"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-cfg-if" ,rust-cfg-if-1)
+        ("rust-cpufeatures" ,rust-cpufeatures-0.2)
+        ("rust-digest" ,rust-digest-0.10)
+        ("rust-sha1-asm" ,rust-sha1-asm-0.5))))
+    (home-page "https://github.com/RustCrypto/hashes")
+    (synopsis "SHA-1 hash function")
+    (description "This crate provides a SHA-1 hash function.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-sha-1-0.9
   (package
+    (inherit rust-sha-1-0.10)
     (name "rust-sha-1")
     (version "0.9.1")
     (source
-      (origin
-        (method url-fetch)
-        (uri (crate-uri "sha-1" version))
-        (file-name
-         (string-append name "-" version ".tar.gz"))
-        (sha256
-         (base32
-          "0w37j7swjkbzgi9mf7ihkw0zfik6vl97fs6jdpqs6r68hvm3c2hp"))))
-    (build-system cargo-build-system)
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "sha-1" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0w37j7swjkbzgi9mf7ihkw0zfik6vl97fs6jdpqs6r68hvm3c2hp"))))
     (arguments
      `(#:cargo-inputs
        (("rust-block-buffer" ,rust-block-buffer-0.9)
@@ -44419,11 +53247,7 @@ functionality and without weak references.")
         ("rust-sha1-asm" ,rust-sha1-asm-0.4))
        #:cargo-development-inputs
        (("rust-digest" ,rust-digest-0.9)
-        ("rust-hex-literal" ,rust-hex-literal-0.2))))
-    (home-page "https://github.com/RustCrypto/hashes")
-    (synopsis "SHA-1 hash function")
-    (description "SHA-1 hash function.")
-    (license (list license:expat license:asl2.0))))
+        ("rust-hex-literal" ,rust-hex-literal-0.2))))))
 
 (define-public rust-sha-1-0.8
   (package
@@ -44506,10 +53330,10 @@ functionality and without weak references.")
                ((", path =.*}") "}"))
              #t)))))))
 
-(define-public rust-sha1-asm-0.4
+(define-public rust-sha1-asm-0.5
   (package
     (name "rust-sha1-asm")
-    (version "0.4.3")
+    (version "0.5.1")
     (source
      (origin
        (method url-fetch)
@@ -44518,7 +53342,7 @@ functionality and without weak references.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1i1i8viy6y30mv9v5hwhg9w6b722qkyh9c6n8bn4d27jpv14pg0s"))))
+         "1b7ab7f4n87pqdmbl1a5jrc2axf27pvbndsz9qiwwgxw01qlygan"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
@@ -44529,6 +53353,21 @@ functionality and without weak references.")
      "Assembly implementation of SHA-1 compression function.")
     (license license:expat)))
 
+(define-public rust-sha1-asm-0.4
+  (package
+    (inherit rust-sha1-asm-0.5)
+    (name "rust-sha1-asm")
+    (version "0.4.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "sha1-asm" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1i1i8viy6y30mv9v5hwhg9w6b722qkyh9c6n8bn4d27jpv14pg0s"))))))
+
 (define-public rust-sha1collisiondetection-0.2
   (package
     (name "rust-sha1collisiondetection")
@@ -44559,8 +53398,37 @@ This is a port of Marc Stevens' sha1collisiondetection algorithm to Rust.  The
 code is translated from C to Rust using c2rust.")
     (license license:expat)))
 
+(define-public rust-sha2-0.10
+  (package
+    (name "rust-sha2")
+    (version "0.10.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "sha2" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1v60pzdr3pp6y2sgg1v1nwv4169rb6psk44jmnnq51y5d60vvhwr"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-cfg-if" ,rust-cfg-if-1)
+        ("rust-cpufeatures" ,rust-cpufeatures-0.2)
+        ("rust-digest" ,rust-digest-0.10)
+        ("rust-sha2-asm" ,rust-sha2-asm-0.6))
+       #:cargo-development-inputs
+       (("rust-digest" ,rust-digest-0.10)
+        ("rust-hex-literal" ,rust-hex-literal-0.2))))
+    (home-page "https://github.com/RustCrypto/hashes")
+    (synopsis "SHA-2 hash functions")
+    (description
+     "This package provides a pure Rust implementation of the SHA-2 hash
+function family including SHA-224, SHA-256, SHA-384, and SHA-512.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-sha2-0.9
   (package
+    (inherit rust-sha2-0.10)
     (name "rust-sha2")
     (version "0.9.5")
     (source
@@ -44572,7 +53440,6 @@ code is translated from C to Rust using c2rust.")
         (sha256
          (base32
           "04lzf4swq6cijvxnc6facr3g72h5v7a5z8lz3xrkf8gxa9bswqmk"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-block-buffer" ,rust-block-buffer-0.9)
@@ -44583,13 +53450,7 @@ code is translated from C to Rust using c2rust.")
         ("rust-sha2-asm" ,rust-sha2-asm-0.6))
        #:cargo-development-inputs
        (("rust-digest" ,rust-digest-0.9)
-        ("rust-hex-literal" ,rust-hex-literal-0.2))))
-    (home-page "https://github.com/RustCrypto/hashes")
-    (synopsis "SHA-2 hash functions")
-    (description
-     "This package provides a pure Rust implementation of the SHA-2 hash
-function family including SHA-224, SHA-256, SHA-384, and SHA-512.")
-    (license (list license:expat license:asl2.0))))
+        ("rust-hex-literal" ,rust-hex-literal-0.2))))))
 
 (define-public rust-sha2-0.8
   (package
@@ -44713,6 +53574,33 @@ functions core functionality.")
        (("rust-gcc" ,rust-gcc-0.3)
         ("rust-generic-array" ,rust-generic-array-0.8))))))
 
+(define-public rust-sha3-0.9
+  (package
+    (name "rust-sha3")
+    (version "0.9.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "sha3" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32 "02d85wpvz75a0n7r2da15ikqjwzamhii11qy9gqf6pafgm0rj4gq"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-block-buffer" ,rust-block-buffer-0.9)
+        ("rust-digest" ,rust-digest-0.9)
+        ("rust-keccak" ,rust-keccak-0.1)
+        ("rust-opaque-debug" ,rust-opaque-debug-0.3))
+       #:cargo-development-inputs
+       (("rust-digest" ,rust-digest-0.9)
+        ("rust-hex-literal" ,rust-hex-literal-0.2))))
+    (home-page "https://github.com/RustCrypto/hashes")
+    (synopsis "SHA-3 (Keccak) hash function")
+    (description "This package provides a pure Rust implementation of the SHA-3
+(Keccak) hash function.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-shader-version-0.6
   (package
     (name "rust-shader-version")
@@ -44739,24 +53627,24 @@ functions core functionality.")
 picking compatible shaders.")
     (license license:expat)))
 
-(define-public rust-shadow-rs-0.6
+(define-public rust-shadow-rs-0.8
   (package
     (name "rust-shadow-rs")
-    (version "0.6.2")
+    (version "0.8.1")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "shadow-rs" version))
-       (file-name
-        (string-append name "-" version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0sps996yhchz43zfk9zysjpirz638s1hbhspp998bk6v9l6k7j10"))))
+        (base32 "0iy4f6yzag52qr93hjhm2l8crxhjblr91nffbdd8zzw0xchfjdc9"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-chrono" ,rust-chrono-0.4)
-        ("rust-git2" ,rust-git2-0.13))))
+        ("rust-git2" ,rust-git2-0.13)
+        ("rust-is-debug" ,rust-is-debug-1))))
     (home-page "https://github.com/baoyachi/shadow-rs")
     (synopsis "Recall properties of the build process at run time")
     (description
@@ -44765,6 +53653,25 @@ and environment at run time.  You can use this tool to check in production
 exactly where a binary came from and how it was built.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-shadow-rs-0.6
+  (package
+    (inherit rust-shadow-rs-0.8)
+    (name "rust-shadow-rs")
+    (version "0.6.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "shadow-rs" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0sps996yhchz43zfk9zysjpirz638s1hbhspp998bk6v9l6k7j10"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-chrono" ,rust-chrono-0.4)
+        ("rust-git2" ,rust-git2-0.13))))))
+
 (define-public rust-shadow-rs-0.5
   (package
     (inherit rust-shadow-rs-0.6)
@@ -44805,7 +53712,7 @@ exactly where a binary came from and how it was built.")
         ("rust-criterion" ,rust-criterion-0.3)
         ("rust-proptest" ,rust-proptest-0.9))))
     (home-page "https://github.com/hawkw/sharded-slab")
-    (synopsis "Lock-free concurrent slab.")
+    (synopsis "Lock-free concurrent slab")
     (description "This package provides a lock-free concurrent slab.")
     (license license:expat)))
 
@@ -44834,6 +53741,25 @@ exactly where a binary came from and how it was built.")
      "A library for using child processes from multiple threads.")
     (license license:expat)))
 
+(define-public rust-shared-child-0.2
+  (package
+    (inherit rust-shared-child-0.3)
+    (name "rust-shared-child")
+    (version "0.2.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "shared-child" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1k0ldvk9p1l0b38bwd3a29ylmwbj60c37hnqzh0hljmyin93i6q9"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-kernel32-sys" ,rust-kernel32-sys-0.2)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-winapi" ,rust-winapi-0.2))))))
+
 (define-public rust-shared-library-0.1
   (package
     (name "rust-shared-library")
@@ -44945,7 +53871,7 @@ some context).")
      (origin
        (method url-fetch)
        (uri (crate-uri "shlex" version))
-       (file-name (string-append name "-" version ".crate"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "0gf773p2snqpw69rzh8s1wdlq8dc8c1ypmiv516il1fdyb46i9a2"))))
     (build-system cargo-build-system)
@@ -44964,7 +53890,7 @@ words, like Python's shlex.")
       (origin
         (method url-fetch)
         (uri (crate-uri "shlex" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1lmv6san7g8dv6jdfp14m7bdczq9ss7j7bgsfqyqjc3jnjfippvz"))))
@@ -44979,14 +53905,14 @@ words, like Python's shlex.")
 (define-public rust-signal-hook-0.3
   (package
     (name "rust-signal-hook")
-    (version "0.3.4")
+    (version "0.3.10")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "signal-hook" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0h628smm9y22qi3szpkg3xpj31hyvs4ps29nf8cnfvy6w0zmw3vq"))))
+        (base32 "1lgg8rwyz97pqkpg4ii7iswvs5mx8sgg2pl2ahlil9vyfcfqk64w"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -45025,19 +53951,42 @@ words, like Python's shlex.")
        (("rust-tokio" ,rust-tokio-0.1)
         ("rust-version-sync" ,rust-version-sync-0.8))))))
 
+(define-public rust-signal-hook-mio-0.2
+  (package
+    (name "rust-signal-hook-mio")
+    (version "0.2.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "signal-hook-mio" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1m3yc37dxdq4ym0x7i2b9aqfnlhivwm7mvls0yzcbwn4y5kmiz99"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-libc" ,rust-libc-0.2)
+        ("rust-mio" ,rust-mio-0.7)
+        ("rust-mio" ,rust-mio-0.6)
+        ("rust-mio-uds" ,rust-mio-uds-0.6)
+        ("rust-signal-hook" ,rust-signal-hook-0.3))))
+    (home-page "https://github.com/vorner/signal-hook")
+    (synopsis "MIO support for signal-hook")
+    (description "This crate provides MIO support for signal-hook.")
+    (license (list license:asl2.0 license:expat))))
+
 (define-public rust-signal-hook-registry-1
   (package
     (name "rust-signal-hook-registry")
-    (version "1.3.0")
+    (version "1.4.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "signal-hook-registry" version))
-       (file-name
-        (string-append name "-" version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32
-         "19hirq0h33jjyh505s8hf9q5dq0ky80ygivkl3vshjv0y7zd1w8n"))))
+        (base32 "1c2mhijg54y6c1zi4630yki1vpq3z96ljfnsrdy0rb64ilr767p5"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -45075,49 +54024,48 @@ words, like Python's shlex.")
 (define-public rust-signature-1
   (package
     (name "rust-signature")
-    (version "1.2.2")
+    (version "1.5.0")
     (source
-      (origin
-        (method url-fetch)
-        (uri (crate-uri "signature" version))
-        (file-name (string-append name "-" version ".tar.gz"))
-        (sha256
-          (base32 "04325sgl06mksq21a95sbdadg3r3jn3l3nhhxj839qs7s6kn1w19"))))
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "signature" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1r4x94n6ibdd1f85cwmvi29jvyyf1l379n9yybb7jlg9lv0wcm7h"))))
     (build-system cargo-build-system)
     (arguments
-      `(#:skip-build? #t
-        #:cargo-inputs
-        (("rust-digest" ,rust-digest-0.9)
-         ("rust-rand-core" ,rust-rand-core-0.5)
-         ("rust-signature-derive"
-          ,rust-signature-derive-1))))
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-digest" ,rust-digest-0.10)
+        ("rust-rand-core" ,rust-rand-core-0.6)
+        ("rust-signature-derive" ,rust-signature-derive-1))))
     (home-page "")
     (synopsis "Traits for cryptographic signature algorithms (e.g. ECDSA,
 Ed25519)")
     (description
-      "This package contains traits which provide generic, object-safe APIs
+     "This package contains traits which provide generic, object-safe APIs
 for generating and verifying digital signatures.")
     (license (list license:asl2.0 license:expat))))
 
 (define-public rust-signature-derive-1
   (package
     (name "rust-signature-derive")
-    (version "1.0.0-pre.2")
+    (version "1.0.0-pre.4")
     (source
-      (origin
-        (method url-fetch)
-        (uri (crate-uri "signature_derive" version))
-        (file-name (string-append name "-" version ".tar.gz"))
-        (sha256
-          (base32 "0wp8b8ald7qixrcvvclhdcpmn8hkx049jlc29g57ql0304c6qrdh"))))
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "signature-derive" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0p1x0wv6grrgdn226m9rsqpcnpfwkpji7rjpalkbk1ynv0xpvf57"))))
     (build-system cargo-build-system)
     (arguments
-      `(#:skip-build? #t
-        #:cargo-inputs
-        (("rust-proc-macro2" ,rust-proc-macro2-1)
-         ("rust-quote" ,rust-quote-1)
-         ("rust-syn" ,rust-syn-1)
-         ("rust-synstructure" ,rust-synstructure-0.12))))
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-proc-macro2" ,rust-proc-macro2-1)
+        ("rust-quote" ,rust-quote-1)
+        ("rust-syn" ,rust-syn-1)
+        ("rust-synstructure" ,rust-synstructure-0.12))))
     (home-page "signature_derive")
     (synopsis "Custom derive support for the 'signature' crate")
     (description "This package provides proc macros used by the signature
@@ -45160,6 +54108,65 @@ facilitate the use of SIMD-based @dfn{Array of Struct of Array} (AoSoA) storage
 pattern in Rust.")
     (license license:bsd-3)))
 
+(define-public rust-simba-0.5
+  (package
+    (inherit rust-simba-0.1)
+    (name "rust-simba")
+    (version "0.5.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "simba" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0p1x1ndajy4j3dr9zbh79cz5k0hbj4p9bagd7cj00gc5aws0d0lf"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-approx" ,rust-approx-0.5)
+        ("rust-cordic" ,rust-cordic-0.1)
+        ("rust-decimal" ,rust-decimal-2)
+        ("rust-fixed" ,rust-fixed-1)
+        ("rust-libm" ,rust-libm-0.2)
+        ("rust-num-complex" ,rust-num-complex-0.4)
+        ("rust-num-traits" ,rust-num-traits-0.2)
+        ("rust-packed-simd-2" ,rust-packed-simd-2-0.3)
+        ("rust-paste" ,rust-paste-1)
+        ("rust-rand" ,rust-rand-0.8)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-wide" ,rust-wide-0.6))))
+    (license license:asl2.0)))
+
+(define-public rust-simba-0.4
+  (package
+    (inherit rust-simba-0.1)
+    (name "rust-simba")
+    (version "0.4.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "simba" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0k2zp645jby5s070agvqha3xqbc0gkkk3a4v7k8z724iamasjcji"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-approx" ,rust-approx-0.4)
+        ("rust-cordic" ,rust-cordic-0.1)
+        ("rust-decimal" ,rust-decimal-2)
+        ("rust-fixed" ,rust-fixed-1)
+        ("rust-libm" ,rust-libm-0.2)
+        ("rust-num-complex" ,rust-num-complex-0.3)
+        ("rust-num-traits" ,rust-num-traits-0.2)
+        ("rust-packed-simd-2" ,rust-packed-simd-2-0.3)
+        ("rust-paste" ,rust-paste-1)
+        ("rust-rand" ,rust-rand-0.8)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-wide" ,rust-wide-0.6))))
+    (license license:asl2.0)))
+
 (define-public rust-simd-0.2
   (package
     (name "rust-simd")
@@ -45279,6 +54286,60 @@ extensions.")
     (description "This package provides a diff library for Rust.")
     (license license:asl2.0)))
 
+(define-public rust-simplelog-0.11
+  (package
+    (name "rust-simplelog")
+    (version "0.11.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "simplelog" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "11h8q8lykc829f4bd5llw35p4qi9g6mp0mk1p281fq8qi48w1azc"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-ansi-term" ,rust-ansi-term-0.12)
+        ("rust-chrono" ,rust-chrono-0.4)
+        ("rust-log" ,rust-log-0.4)
+        ("rust-paris" ,rust-paris-1)
+        ("rust-termcolor" ,rust-termcolor-1))))
+    (home-page "https://github.com/drakulix/simplelog.rs")
+    (synopsis "A simple and easy-to-use logging facility for Rust's log crate")
+    (description
+     "This package provides a simple and easy-to-use logging facility for Rust's
+@code{log} crate.  It aims to be a maintainable, easy to integrate facility for
+small to medium sized project")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-simple-logger-1
+  (package
+    (name "rust-simple-logger")
+    (version "1.13.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "simple-logger" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32 "01wz5xjpski45xq8v1bg8g05flj5h1sl63aabl2c6kj0hz337pmp"))))
+    (build-system cargo-build-system)
+    (arguments
+      `(#:cargo-inputs
+        (("rust-atty" ,rust-atty-0.2)
+         ("rust-chrono" ,rust-chrono-0.4)
+         ("rust-colored" ,rust-colored-1)
+         ("rust-log" ,rust-log-0.4)
+         ("rust-winapi" ,rust-winapi-0.3))))
+    (home-page "https://github.com/borntyping/rust-simple_logger")
+    (synopsis "Logger with a readable output format")
+    (description
+      "This package provides a logger that prints all messages with
+a readable output format")
+    (license license:expat)))
+
 (define-public rust-simple-mutex-1
   (package
     (name "rust-simple-mutex")
@@ -45387,8 +54448,7 @@ variants in pure Rust.")
          "07ix5fsdnpf2xsb0k5rbiwlmsicm2237fcx7blirp9p7pljr5mhn"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:rust ,rust-1.52                ;requires the "if in const fn" feature
-       #:cargo-inputs
+     `(#:cargo-inputs
        (("rust-arbitrary" ,rust-arbitrary-1)
         ("rust-array-ops" ,rust-array-ops-0.1)
         ("rust-bitmaps" ,rust-bitmaps-2)
@@ -45460,7 +54520,7 @@ designed for @code{immutable.rs}.")
       (origin
         (method url-fetch)
         (uri (crate-uri "slab" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1y59xsa27jk84sxzswjk60xcjf8b4fm5960jwpznrrcmasyva4f1"))))
@@ -45485,6 +54545,50 @@ data type.")
         (base32 "08xw8w61zdfn1094qkq1d554vh5wmm9bqdys8gqqxc4sv2pgrd0p"))))
     (arguments `(#:skip-build? #t))))
 
+(define-public rust-pathfinder-geometry-0.5
+  (package
+    (name "rust-pathfinder-geometry")
+    (version "0.5.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "pathfinder_geometry" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32 "1lssir0s1cmrpzzrk49jm31nkssh2j715gryww6700x79rxpwyqb"))))
+    (build-system cargo-build-system)
+    (arguments
+      `(#:skip-build? #t
+        #:cargo-inputs
+        (("rust-log" ,rust-log-0.4)
+         ("rust-pathfinder-simd" ,rust-pathfinder-simd-0.5))))
+    (home-page "https://github.com/servo/pathfinder")
+    (synopsis "Basic SIMD-accelerated geometry/linear algebra")
+    (description "This package provides basic SIMD-accelerated geometry/linear
+algebra.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-pathfinder-simd-0.5
+  (package
+    (name "rust-pathfinder-simd")
+    (version "0.5.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "pathfinder_simd" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1zx6yjch2zwlnbrsq3ljnkwzs9jdf4cbh5wwjkjradahqnn4dzir"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-rustc-version" ,rust-rustc-version-0.3))))
+    (home-page "https://github.com/servo/pathfinder")
+    (synopsis "Simple SIMD Rust library")
+    (description "This package provides a simple SIMD Rust library.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-path-slash-0.1
   (package
     (name "rust-path-slash")
@@ -45506,6 +54610,95 @@ data type.")
 @samp{foo/bar}, @samp{C:/foo/bar}).")
     (license license:expat)))
 
+(define-public rust-paw-1
+  (package
+    (name "rust-paw")
+    (version "1.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "paw" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1sc481y42rb08hmww525m4539ppl8k0w14kwxp13vg2dasdzrh09"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-paw-attributes" ,rust-paw-attributes-1)
+        ("rust-paw-raw" ,rust-paw-raw-1))
+       #:cargo-development-inputs
+       (("rust-paw-structopt" ,rust-paw-structopt-1)
+        ("rust-runtime" ,rust-runtime-0.3)
+        ("rust-structopt" ,rust-structopt-0.2))))
+    (home-page "https://github.com/rust-cli/paw")
+    (synopsis "CLI argument parser")
+    (description "This package provides a CLI argument parser.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-paw-attributes-1
+  (package
+    (name "rust-paw-attributes")
+    (version "1.0.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "paw-attributes" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32 "0fda1v7y5pfmg8d2v7m0pyvif6c44qjz914jjn718pdyclrmhd8g"))))
+    (build-system cargo-build-system)
+    (arguments
+      `(#:cargo-inputs
+        (("rust-proc-macro2" ,rust-proc-macro2-1)
+         ("rust-quote" ,rust-quote-1)
+         ("rust-syn" ,rust-syn-1))))
+    (home-page "https://github.com/rust-cli/paw")
+    (synopsis "Proc Macro attributes for the Paw crate")
+    (description "This package provides Proc Macro attributes for the Paw
+crate.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-paw-raw-1
+  (package
+    (name "rust-paw-raw")
+    (version "1.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "paw-raw" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1wk76ipp34gjh42vivmgdkb2rgr26gwhn34gk7z5l378ixk5j2vz"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/rust-cli/paw")
+    (synopsis "Traits to implement custom Paw implementations")
+    (description "This package provides traits to implement custom Paw
+implementations.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-paw-structopt-1
+  (package
+    (name "rust-paw-structopt")
+    (version "1.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "paw-structopt" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1iwg83xqjpfgpy8wrq173cy7zgkyxfryd230sh34f5qsjdx7zap4"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-proc-macro2" ,rust-proc-macro2-0.4)
+        ("rust-quote" ,rust-quote-0.6)
+        ("rust-structopt" ,rust-structopt-0.2)
+        ("rust-syn" ,rust-syn-0.15))))
+    (home-page "https://github.com/rust-cli/paw")
+    (synopsis "Structopt support for the Paw crate")
+    (description "This package provides Structopt support for the Paw crate.")
+    (license (list license:expat license:asl2.0))))
+
 ;; TODO: Unbundle sleef.
 (define-public rust-sleef-sys-0.1
   (package
@@ -45919,8 +55112,39 @@ stack.")
 control on the fields.")
     (license license:expat)))
 
+(define-public rust-smol-1
+  (package
+    (name "rust-smol")
+    (version "1.2.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "smol" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1r45zng0hymqx1kb2dmxkapbin7f9rhgrdcssz0q7rzka59kpkw5"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-async-channel" ,rust-async-channel-1)
+        ("rust-async-executor" ,rust-async-executor-1)
+        ("rust-async-fs" ,rust-async-fs-1)
+        ("rust-async-io" ,rust-async-io-1)
+        ("rust-async-lock" ,rust-async-lock-2)
+        ("rust-async-net" ,rust-async-net-1)
+        ("rust-async-process" ,rust-async-process-1)
+        ("rust-blocking" ,rust-blocking-1)
+        ("rust-futures-lite" ,rust-futures-lite-1)
+        ("rust-once-cell" ,rust-once-cell-1))))
+    (home-page "https://github.com/stjepang/smol")
+    (synopsis "Small and fast async runtime")
+    (description "This package provides a small and fast async runtime.")
+    (license (list license:asl2.0 license:expat))))
+
 (define-public rust-smol-0.1
   (package
+    (inherit rust-smol-1)
     (name "rust-smol")
     (version "0.1.18")
     (source
@@ -45930,7 +55154,6 @@ control on the fields.")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "1mdflwzgw1jxwrjffqn09lb4hn6d076s1ka8lb9mgnildqybn332"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:cargo-test-flags
        '("--release" "--" "--skip=task::Task<Result<T, E>>")
@@ -45953,16 +55176,12 @@ control on the fields.")
        (("rust-criterion" ,rust-criterion-0.3)
         ("rust-futures" ,rust-futures-0.3)
         ("rust-piper" ,rust-piper-0.1)
-        ("rust-tempfile" ,rust-tempfile-3))))
-    (home-page "https://github.com/stjepang/smol")
-    (synopsis "Small and fast async runtime")
-    (description "This package provides a small and fast async runtime.")
-    (license (list license:asl2.0 license:expat))))
+        ("rust-tempfile" ,rust-tempfile-3))))))
 
 (define-public rust-smol-str-0.1
   (package
     (name "rust-smol-str")
-    (version "0.1.17")
+    (version "0.1.21")
     (source
      (origin
        (method url-fetch)
@@ -45971,7 +55190,7 @@ control on the fields.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1srj7gd14cllfwh55jwmid425rz2idpvbw7ly08448r97b7gg83c"))))
+         "1gb14a85k6mzpn6s78flwvfl5vy1czsrzlwcgidy7k00wf1mrlb1"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -45989,6 +55208,55 @@ control on the fields.")
 clone.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-snafu-derive-0.6
+  (package
+    (name "rust-snafu-derive")
+    (version "0.6.10")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "snafu-derive" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0nri7ma06g5kimpcdcm8359a55nmps5f3kcngy0j6bin7jhfy20m"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-proc-macro2" ,rust-proc-macro2-1)
+        ("rust-quote" ,rust-quote-1)
+        ("rust-syn" ,rust-syn-1))))
+    (home-page "https://github.com/shepmaster/snafu")
+    (synopsis "Ergonomic error handling library")
+    (description "Snafu aims to be an ergonomic error handling library.  This
+package provides derive macros.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-snafu-0.6
+  (package
+    (name "rust-snafu")
+    (version "0.6.10")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "snafu" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "19wwqxwb85pl040qk5xylj0vlznib3xzy9hcv2q0h8qv4qy2vcga"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-backtrace" ,rust-backtrace-0.3)
+        ("rust-doc-comment" ,rust-doc-comment-0.3)
+        ("rust-futures" ,rust-futures-0.3)
+        ("rust-futures" ,rust-futures-0.1)
+        ("rust-futures-core" ,rust-futures-core-0.3)
+        ("rust-pin-project" ,rust-pin-project-0.4)
+        ("rust-snafu-derive" ,rust-snafu-derive-0.6))))
+    (home-page "https://github.com/shepmaster/snafu")
+    (synopsis "Ergonomic error handling library")
+    (description "Snafu aims to be an ergonomic error handling library.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-snailquote-0.3
   (package
     (name "rust-snailquote")
@@ -46022,6 +55290,28 @@ More importantly, this library also provides the ability to un-escape a given
 escaped text to recover the original string.")
     (license license:gpl3)))
 
+(define-public rust-snake-case-0.3
+  (package
+    (name "rust-snake-case")
+    (version "0.3.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "snake-case" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1v4f132rk9wxiw8hb3kgnixirzr8kbfhg2lgsf4b85vbg02a0jfn"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs (("rust-serde" ,rust-serde-1))))
+    (home-page "https://github.com/emilk/snake_case")
+    (synopsis "String-like type that only contains non-empty snake_case")
+    (description
+     "This package provides a String-like type that can only contain valid
+non-empty snake_case.")
+    (license license:expat)))
+
 (define-public rust-snap-1
   (package
     (name "rust-snap")
@@ -46048,6 +55338,49 @@ escaped text to recover the original string.")
 algorithm.  Includes streaming compression and decompression.")
     (license license:bsd-3)))
 
+(define-public rust-snap-0.2
+  (package
+    (inherit rust-snap-1)
+    (name "rust-snap")
+    (version "0.2.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "snap" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0hvzvvywzw654y2r3j4jya5af8j0nf2vydfjp1w8pba47pb9gmlm"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-byteorder" ,rust-byteorder-1)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-snappy-cpp" ,rust-snappy-cpp-0.1))))))
+
+(define-public rust-snappy-cpp-0.1
+  (package
+    (name "rust-snappy-cpp")
+    (version "0.1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "snappy-cpp" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0sxga9z8sg4gp6ghyz1p8r3c6flzjw57dlqdxavhvcjr1iwcfki3"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-libc" ,rust-libc-0.2)
+        ("rust-pkg-config" ,rust-pkg-config-0.3))))
+    (home-page "https://github.com/BurntSushi/snap")
+    (synopsis "Simple Snappy C++ bindings for testing and benchmarking")
+    (description
+     "This package provides simple Snappy C++ bindings for testing and
+benchmarking.")
+    (license license:bsd-3)))
+
 (define-public rust-socket2-0.4
   (package
     (name "rust-socket2")
@@ -46063,8 +55396,7 @@ algorithm.  Includes streaming compression and decompression.")
           "18ny6m1gnf6cwp5ax0b5hr36w6yg16z7faj76b31aq2jghhgqgcy"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:rust ,rust-1.46    ; or later
-       #:cargo-inputs
+     `(#:cargo-inputs
        (("rust-libc" ,rust-libc-0.2)
         ("rust-winapi" ,rust-winapi-0.3))))
     (home-page "https://github.com/rust-lang/socket2")
@@ -46084,7 +55416,7 @@ maximal amount of configuration possible intended.")
      (origin
        (method url-fetch)
        (uri (crate-uri "socket2" version))
-       (file-name (string-append name "-" version ".crate"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "0vldz14mxqxnjqb6an2pj7mgclv7nrk45cpscwq7g3fj2c0mfbhj"))))
     (arguments
@@ -46131,7 +55463,7 @@ maximal amount of configuration possible intended.")
       (origin
         (method url-fetch)
         (uri (crate-uri "sourcefile" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1lwa6973zs4bgj29my7agfjgk4nw9hp6j7dfnr13nid85fw7rxsb"))))
@@ -46191,6 +55523,29 @@ track of where each new file and line starts.")
     (description "This package provides basic sourcemap handling for Rust.")
     (license license:bsd-3)))
 
+(define-public rust-special-0.8
+  (package
+    (name "rust-special")
+    (version "0.8.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "special" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0dknpky1bbl7xp4qwp3vjqjarfl846mk6irs2z7mvdsr843mx9i4"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-libc" ,rust-libc-0.2))
+       #:cargo-development-inputs
+       (("rust-assert" ,rust-assert-0.7)
+        ("rust-random" ,rust-random-0.12))))
+    (home-page "https://github.com/stainless-steel/special")
+    (synopsis "Special functions")
+    (description "The package provides so-called special functions.")
+    (license (list license:asl2.0 license:expat))))
+
 (define-public rust-speculate-0.1
   (package
     (name "rust-speculate")
@@ -46206,11 +55561,11 @@ track of where each new file and line starts.")
          "0ph01n3fqkmnfr1wd13dqsi4znv06xy6p4h3hqqdzk81r0r5vd1w"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:skip-build? #t
+     `(#:tests? #f
        #:cargo-inputs
        (("rust-proc-macro2" ,rust-proc-macro2-0.4)
-        ("rust-quote" ,rust-quote-1)
-        ("rust-syn" ,rust-syn-0.15)
+        ("rust-quote" ,rust-quote-0.6)
+        ("rust-syn" ,rust-syn-0.14)
         ("rust-unicode-xid" ,rust-unicode-xid-0.1))))
     (home-page "https://github.com/utkarshkukreti/speculate.rs")
     (synopsis "RSpec inspired testing framework for Rust")
@@ -46218,19 +55573,22 @@ track of where each new file and line starts.")
      "An RSpec inspired minimal testing framework for Rust.")
     (license license:expat)))
 
-(define-public rust-spin-0.5
+(define-public rust-spin-0.9
   (package
     (name "rust-spin")
-    (version "0.5.2")
+    (version "0.9.2")
     (source
-      (origin
-        (method url-fetch)
-        (uri (crate-uri "spin" version))
-        (file-name (string-append name "-" version ".crate"))
-        (sha256
-         (base32
-          "0b84m6dbzrwf2kxylnw82d3dr8w06av7rfkr8s85fb5f43rwyqvf"))))
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "spin" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1rch0my17z66fam7hbynvrcs6jk63b08jv4s04mhdksv1jz584ji"))))
     (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-lock-api" ,rust-lock-api-0.4))))
     (home-page "https://github.com/mvdnes/spin-rs")
     (synopsis "Synchronization primitives based on spinning")
     (description "This crate provides synchronization primitives based on
@@ -46238,6 +55596,19 @@ spinning.  They may contain data, are usable without @code{std},and static
 initializers are available.")
     (license license:expat)))
 
+(define-public rust-spin-0.5
+  (package
+    (inherit rust-spin-0.9)
+    (name "rust-spin")
+    (version "0.5.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "spin" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0b84m6dbzrwf2kxylnw82d3dr8w06av7rfkr8s85fb5f43rwyqvf"))))))
+
 (define-public rust-spin-0.4
   (package
     (inherit rust-spin-0.5)
@@ -46300,6 +55671,99 @@ ready.  This will probably use a lot of CPU, so be careful when you use it.")
 provided by @code{lock_api}.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-spirv-types-0.4
+  (package
+    (name "rust-spirv-types")
+    (version "0.4.0-alpha.12")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "spirv-types" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0sxcic2n04xzywww3c7mj9ah8iwr20vz3d6xvsgla1y7gs7lpk3i"))))
+    (build-system cargo-build-system)
+    (arguments `(#:skip-build? #t))
+    (home-page "https://github.com/EmbarkStudios/rust-gpu")
+    (synopsis "SPIR-V types shared between spirv-std and spirv-std-macros")
+    (description "This package provides SPIR-V types shared between spirv-std
+and spirv-std-macros.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-spirv-std-macros-0.4
+  (package
+    (name "rust-spirv-std-macros")
+    (version "0.4.0-alpha.12")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "spirv-std-macros" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "19cc15vq9ybdap39qxpf4vsz5q6li21mzgv47zqbyj5vvwaqazi0"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-heck" ,rust-heck-0.3)
+        ("rust-proc-macro2" ,rust-proc-macro2-1)
+        ("rust-quote" ,rust-quote-1)
+        ("rust-spirv-types" ,rust-spirv-types-0.4)
+        ("rust-syn" ,rust-syn-1))))
+    (home-page "https://github.com/EmbarkStudios/rust-gpu")
+    (synopsis "Macros for spirv-std")
+    (description "This package provides macros for spirv-std.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-spirv-std-0.4
+  (package
+    (name "rust-spirv-std")
+    ;; We use a slightly older version here, because of problems building glam
+    ;; 0.13.1 with more recent versions.
+    (version "0.4.0-alpha.7")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "spirv-std" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "14npd838bqnw09iab0zq94xs4yl69m6c0cdfzxa9fal0zxqlqv3j"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bitflags" ,rust-bitflags-1)
+        ("rust-num-traits" ,rust-num-traits-0.2)
+        ("rust-spirv-std-macros" ,rust-spirv-std-macros-0.4)
+        ("rust-spirv-types" ,rust-spirv-types-0.4))))
+    (home-page "https://github.com/EmbarkStudios/rust-gpu")
+    (synopsis "Standard functions and types for SPIR-V")
+    (description "This package provides standard functions and types for
+SPIR-V.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-spki-0.4
+  (package
+    (name "rust-spki")
+    (version "0.4.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "spki" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0ckgkcg6db5y94dqhmyikgn8yrsah6pyf4j197hv1c51bp0s00aw"))))
+    (build-system cargo-build-system)
+    (arguments `(#:skip-build? #t #:cargo-inputs (("rust-der" ,rust-der-0.4))))
+    (home-page "https://github.com/RustCrypto/formats/tree/master/spki")
+    (synopsis
+     "X.509 Subject Public Key Info (RFC5280) describing public keys ")
+    (description
+     "This package provides X.509 Subject Public Key Info (RFC5280)
+describing public keys as well as their associated AlgorithmIdentifiers (i.e.
+OIDs)")
+    (license (list license:asl2.0 license:expat))))
+
 (define-public rust-spmc-0.3
   (package
     (name "rust-spmc")
@@ -46321,6 +55785,45 @@ provided by @code{lock_api}.")
     (description "Simple SPMC channel")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-rspotify-0.10
+  (package
+    (name "rust-rspotify")
+    (version "0.10.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "rspotify" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32 "196wd157l3fn6hlyixgffhl2x516g4fpa3s91arhcikiifsppzgf"))))
+    (build-system cargo-build-system)
+    (arguments
+      `(#:skip-build? #t
+        #:cargo-inputs
+        (("rust-base64" ,rust-base64-0.10)
+         ("rust-chrono" ,rust-chrono-0.4)
+         ("rust-derive-builder" ,rust-derive-builder-0.7)
+         ("rust-dotenv" ,rust-dotenv-0.13)
+         ("rust-env-logger" ,rust-env-logger-0.6)
+         ("rust-failure" ,rust-failure-0.1)
+         ("rust-itertools" ,rust-itertools-0.8)
+         ("rust-lazy-static" ,rust-lazy-static-1)
+         ("rust-log" ,rust-log-0.4)
+         ("rust-percent-encoding" ,rust-percent-encoding-1)
+         ("rust-rand" ,rust-rand-0.6)
+         ("rust-random" ,rust-random-0.12)
+         ("rust-reqwest" ,rust-reqwest-0.10)
+         ("rust-serde" ,rust-serde-1)
+         ("rust-serde-derive" ,rust-serde-derive-1)
+         ("rust-serde-json" ,rust-serde-json-1)
+         ("rust-url" ,rust-url-1)
+         ("rust-webbrowser" ,rust-webbrowser-0.5))))
+    (home-page "https://github.com/ramsayleung/rspotify")
+    (synopsis "Spotify API wrapper")
+    (description "This package provides wrapper API forSpotify streaming
+service.")
+    (license license:expat)))
+
 (define-public rust-spsc-buffer-0.1
   (package
     (name "rust-spsc-buffer")
@@ -46344,6 +55847,71 @@ provided by @code{lock_api}.")
      "This package provides a single-producer single-consumer lock-free buffer.")
     (license license:expat)))
 
+(define-public rust-sqlite-0.26
+  (package
+    (name "rust-sqlite")
+    (version "0.26.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "sqlite" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0snvg09bs0n8skcxkx52lcymdn0l130a2m8fpvxpdhkyq0sabc9z"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-libc" ,rust-libc-0.2)
+        ("rust-sqlite3-sys" ,rust-sqlite3-sys-0.13))))
+    (home-page "https://github.com/stainless-steel/sqlite")
+    (synopsis "Interface to SQLite")
+    (description "The package provides an interface to SQLite.")
+    (license (list license:asl2.0 license:expat))))
+
+(define-public rust-sqlite3-src-0.3
+  (package
+    (name "rust-sqlite3-src")
+    (version "0.3.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "sqlite3-src" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "18ygmfcpkccs8s9m5s9q31rrx1mrdps387w9yp3481jswxyb0q52"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-cc" ,rust-cc-1)
+        ("rust-pkg-config" ,rust-pkg-config-0.3))))
+    (home-page "https://github.com/stainless-steel/sqlite3-src")
+    (synopsis "Provider of SQLite")
+    (description "The package provides SQLite.")
+    (license (list license:asl2.0 license:expat))))
+
+(define-public rust-sqlite3-sys-0.13
+  (package
+    (name "rust-sqlite3-sys")
+    (version "0.13.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "sqlite3-sys" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0m1f5r4xg5i3r6795q8vwqfdcq3gh1qlfjwkywnka57bz8lg1lh4"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-libc" ,rust-libc-0.2)
+        ("rust-sqlite3-src" ,rust-sqlite3-src-0.3))))
+    (home-page "https://github.com/stainless-steel/sqlite3-sys")
+    (synopsis "Bindings to SQLite")
+    (description "The package provides bindings to SQLite.")
+    (license (list license:asl2.0 license:expat))))
+
 (define-public rust-st-map-0.1
   (package
     (name "rust-st-map")
@@ -46398,7 +55966,7 @@ to the same address.")
       (origin
         (method url-fetch)
         (uri (crate-uri "stacker" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "12igajfgqz96c7vcwi91xdfsphawik6g36ndlglqih0a7bqw8vyr"))))
@@ -46447,7 +56015,7 @@ deeply recursive algorithms that may accidentally blow the stack.")
 (define-public rust-standback-0.2
   (package
     (name "rust-standback")
-    (version "0.2.10")
+    (version "0.2.17")
     (source
      (origin
        (method url-fetch)
@@ -46455,7 +56023,7 @@ deeply recursive algorithms that may accidentally blow the stack.")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1rnqv9dbq9c4nz7097v0f1d04fjwwsvvyy8rmz8lg1szxahix9rk"))))
+         "1zr8zy3kzryaggz3k0j4135m3zbd31pyqmja8cyj8yp07mpzn4z1"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-development-inputs
@@ -46521,7 +56089,7 @@ management.")
       (origin
         (method url-fetch)
         (uri (crate-uri "static-assertions" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0gsl6xmw10gvn3zs1rv99laj5ig7ylffnh71f9l34js4nr4r7sx2"))))
@@ -46542,7 +56110,7 @@ are met.")
       (origin
         (method url-fetch)
         (uri (crate-uri "static-assertions" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1lw33i89888yb3x29c6dv4mrkg3534n0rlg3r7qzh4p58xmv6gkz"))))))
@@ -46595,6 +56163,109 @@ map.")
     (description "This package provides a simple statistics library.")
     (license license:expat)))
 
+(define-public rust-statrs-0.14
+  (package
+    (name "rust-statrs")
+    (version "0.14.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "statrs" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1bdff4rsghp9hj5i5ynl6iw3pyzprd65cbf8ihmgvyv190a1y30y"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'configure 'patch-Cargo.toml
+           (lambda _
+             (substitute* '("Cargo.toml"
+                            "guix-vendor/rust-average-0.13.1.tar.gz/Cargo.toml"
+                            "guix-vendor/rust-nalgebra-0.26.2.tar.gz/Cargo.toml")
+               ;; The resolver feature is not supported by this version of Cargo.
+               (("resolver = \"2\".*") "")))))
+       #:cargo-inputs
+       (("rust-approx" ,rust-approx-0.4)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-nalgebra" ,rust-nalgebra-0.26)
+        ("rust-num-traits" ,rust-num-traits-0.2)
+        ("rust-rand" ,rust-rand-0.8))
+       #:cargo-development-inputs
+       (("rust-criterion" ,rust-criterion-0.3))))
+    (home-page "https://github.com/statrs-dev/statrs")
+    (synopsis "Statistical computing library for Rust")
+    (description "This package provides a statistical computing library for
+Rust.")
+    (license license:expat)))
+
+(define-public rust-statrs-0.13
+  (package
+    (name "rust-statrs")
+    (version "0.13.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "statrs" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0r00b60zlsn6srb6m6bzbw3w5cyihcy4w2rfjav64x4viy5bad0y"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-nalgebra" ,rust-nalgebra-0.19)
+        ("rust-rand" ,rust-rand-0.7))
+       #:cargo-development-inputs
+       (("rust-criterion" ,rust-criterion-0.3))))
+    (home-page "https://github.com/statrs-dev/statrs")
+    (synopsis "Statistical computing library for Rust")
+    (description "This package provides a statistical computing library for
+Rust.")
+    (license license:expat)))
+
+(define-public rust-statrs-0.12
+  (package
+    (name "rust-statrs")
+    (version "0.12.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "statrs" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "10hk9194ig21w08947yavf4l97g0106ph4xxlzn8ps2kwrnnzqfc"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-rand" ,rust-rand-0.7))))
+    (home-page "https://github.com/statrs-dev/statrs")
+    (synopsis "Statistical computing library for Rust")
+    (description "This package provides a statistical computing library for
+Rust.")
+    (license license:expat)))
+
+(define-public rust-stats-alloc-0.1
+  (package
+    (name "rust-stats-alloc")
+    (version "0.1.8")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "stats-alloc" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1l3rs4m0q8y78dr9r4wxwhncqakkqzic4bqc6sgrcwv2y9mwjq52"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t))
+    (home-page "https://github.com/neoeinstein/stats_alloc")
+    (synopsis "Allocator wrapper")
+    (description
+     "This package provides an allocator wrapper that allows for
+instrumenting global allocators.")
+    (license license:expat)))
+
 (define-public rust-stb-truetype-0.3
   (package
     (name "rust-stb-truetype")
@@ -46645,6 +56316,32 @@ in @code{stb_truetype.h} from C to Rust.")
 codebase.")
     (license license:expat)))
 
+(define-public rust-stderrlog-0.4
+  (package
+    (name "rust-stderrlog")
+    (version "0.4.3")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "stderrlog" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32 "09bzvmx2lzyycr1xfcvfwnvqsjg9kb4w22hb19bjqid5j2dyxr9j"))))
+    (build-system cargo-build-system)
+    (arguments
+      `(#:skip-build? #t
+        #:cargo-inputs
+        (("rust-atty" ,rust-atty-0.2.11)
+         ("rust-chrono" ,rust-chrono-0.4)
+         ("rust-log" ,rust-log-0.4)
+         ("rust-termcolor" ,rust-termcolor-1)
+         ("rust-thread-local" ,rust-thread-local-0.3.4))))
+    (home-page "https://github.com/cardoe/stderrlog-rs")
+    (synopsis "Logger that logs to stderr")
+    (description "This package provides logger that logs to stderr based
+on verbosity specified")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-stdweb-0.4
   (package
     (name "rust-stdweb")
@@ -46753,7 +56450,7 @@ you to define custom reference types outside of the @code{stdweb} library.")
       (origin
         (method url-fetch)
         (uri (crate-uri "stdweb-internal-runtime" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1h0nkppb4r8dbrbms2hw9n5xdcs392m0r5hj3b6lsx3h6fx02dr1"))))
@@ -46773,7 +56470,7 @@ crate.")
       (origin
         (method url-fetch)
         (uri (crate-uri "stdweb-internal-test-macro" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0wx3jlm98qrg1pdw149fprzs9x3x3igqkm5ll23jv2v62yddfrjf"))))
@@ -46884,6 +56581,53 @@ UTF-8.")
        (("rust-blobby" ,rust-blobby-0.1)
         ("rust-generic-array" ,rust-generic-array-0.13))))))
 
+(define-public rust-streaming-decompression-0.1
+  (package
+    (name "rust-streaming-decompression")
+    (version "0.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "streaming-decompression" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "14ncaqb723wz5xx2ws7g8d3qx9hlhrx95wllf152qx6wsnn8gilv"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-fallible-streaming-iterator"
+         ,rust-fallible-streaming-iterator-0.1))))
+    (home-page "https://crates.io/crates/streaming-decompression")
+    (synopsis "Fallible streaming iterator for compression and decompression")
+    (description
+     "This package provides a fallible streaming iterator specialized for
+compression and decompression.")
+    (license license:asl2.0)))
+
+(define-public rust-streaming-iterator-0.1
+  (package
+    (name "rust-streaming-iterator")
+    (version "0.1.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "streaming-iterator" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1xc1gyq137b020m29g85zdhbbdrksdmhf3dq4ri4fjlrfz0kacih"))))
+    (build-system cargo-build-system)
+    (arguments `(#:skip-build? #t))
+    (home-page "https://github.com/sfackler/streaming-iterator")
+    (synopsis "Streaming iterators")
+    (description "The iterator APIs in the Rust standard library do not allow
+elements to be yielded which borrow from the iterator itself.  That means, for
+example, that the @code{std::io::Lines} iterator must allocate a new
+@code{String} for each line rather than reusing an internal buffer.  The
+@code{StreamingIterator} trait instead provides access to elements being
+iterated over only by reference rather than by value.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-streaming-stats-0.2
   (package
     (name "rust-streaming-stats")
@@ -46892,7 +56636,7 @@ UTF-8.")
       (origin
         (method url-fetch)
         (uri (crate-uri "streaming-stats" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0iz5dlq51w5hxjrv6a4hpf8rrj91kgvy0s9mhj0j12il9v771mmh"))))
@@ -46907,8 +56651,33 @@ UTF-8.")
     (license (list license:unlicense
                    license:expat))))
 
+(define-public rust-streebog-0.10
+  (package
+    (name "rust-streebog")
+    (version "0.10.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "streebog" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1w7sxj3risp0zqm6r4mc73bd3fn3bnlxi4l10gp7661i5asr6ajz"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-digest" ,rust-digest-0.10))
+       #:cargo-development-inputs
+       (("rust-digest" ,rust-digest-0.10)
+        ("rust-hex-literal" ,rust-hex-literal-0.2))))
+    (home-page "https://github.com/RustCrypto/hashes")
+    (synopsis "Streebog (GOST R 34.11-2012) hash function")
+    (description
+     "This package provides a streebog (GOST R 34.11-2012) hash function.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-streebog-0.9
   (package
+    (inherit rust-streebog-0.10)
     (name "rust-streebog")
     (version "0.9.2")
     (source
@@ -46920,7 +56689,6 @@ UTF-8.")
         (sha256
          (base32
           "0lz7ajfqdqbrnj01m1xc01ch1g0s9391ma36qqkiyf1074d1r8nr"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-block-buffer" ,rust-block-buffer-0.9)
@@ -46928,11 +56696,30 @@ UTF-8.")
         ("rust-opaque-debug" ,rust-opaque-debug-0.3))
        #:cargo-development-inputs
        (("rust-digest" ,rust-digest-0.9)
-        ("rust-hex-literal" ,rust-hex-literal-0.2))))
-    (home-page "https://github.com/RustCrypto/hashes")
-    (synopsis "Streebog (GOST R 34.11-2012) hash function")
-    (description
-     "This package provides a streebog (GOST R 34.11-2012) hash function.")
+        ("rust-hex-literal" ,rust-hex-literal-0.2))))))
+
+(define-public rust-strength-reduce-0.2
+  (package
+    (name "rust-strength-reduce")
+    (version "0.2.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "strength_reduce" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0m12phq654mfxpmh2h5akqkag5ha6nlhjc2bp9jwarr5r1qjzzx3"))))
+    (build-system cargo-build-system)
+    (arguments `(#:skip-build? #t))
+    (home-page "http://github.com/ejmahler/strength_reduce")
+    (synopsis "Faster integer division and modulus operations")
+    (description "Strength_reduce implements integer division and modulo via
+@dfn{arithmetic strength reduction}.  Modern processors can do multiplication
+and shifts much faster than division, and arithmetic strength reduction is an
+algorithm to transform divisions into multiplications and shifts.  Compilers
+already perform this optimization for divisors that are known at compile time;
+this library enables this optimization for divisors that are only known at
+runtime.")
     (license (list license:expat license:asl2.0))))
 
 (define-public rust-string-0.2
@@ -47106,19 +56893,19 @@ as defined in RFC 3454.")
 (define-public rust-strip-ansi-escapes-0.1
   (package
     (name "rust-strip-ansi-escapes")
-    (version "0.1.0")
+    (version "0.1.1")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "strip-ansi-escapes" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1vmc6cwxsvp02b17b6x42mnnnn5vlc1dqbcqc2a71yms59p6fqwx"))))
+        (base32 "1n36ly9vxb1wr5q76i7995xr7c0pb1pc8g7a3a3n47vwrwwvn701"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-vte" ,rust-vte-0.3))))
+       (("rust-vte" ,rust-vte-0.10))))
     (home-page "https://github.com/luser/strip-ansi-escapes")
     (synopsis "Strip ANSI escape sequences from byte streams")
     (description
@@ -47129,6 +56916,60 @@ and write it somewhere that does not easily support them, such as a log
 file.")
     (license (list license:asl2.0 license:expat))))
 
+(define-public rust-strong-xml-0.6
+  (package
+    (name "rust-strong-xml")
+    (version "0.6.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "strong-xml" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1gxy34j42x5a572cfkkhmxamrm764pswj5r3wcwi0bwfc4xgn68x"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-jetscii" ,rust-jetscii-0.5)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-log" ,rust-log-0.4)
+        ("rust-memchr" ,rust-memchr-2)
+        ("rust-strong-xml-derive"
+         ,rust-strong-xml-derive-0.6)
+        ("rust-xmlparser" ,rust-xmlparser-0.13))
+       #:cargo-development-inputs
+       (("rust-env-logger" ,rust-env-logger-0.8))))
+    (home-page "https://github.com/PoiScript/strong-xml")
+    (synopsis "Strong typed xml")
+    (description
+     "This package provides a strong typed XML parser, based on xmlparser.")
+    (license license:expat)))
+
+(define-public rust-strong-xml-derive-0.6
+  (package
+    (name "rust-strong-xml-derive")
+    (version "0.6.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "strong-xml-derive" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1qf7smxaaglj7p9fs0csd0cyvwcy30w96pdy2aqi65ijk7s83iwj"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-proc-macro2" ,rust-proc-macro2-1)
+        ("rust-quote" ,rust-quote-1)
+        ("rust-syn" ,rust-syn-1))))
+    (home-page "https://github.com/PoiScript/strong-xml")
+    (synopsis "Strong typed XML")
+    (description
+     "This package provides a strong typed XML parser, based on xmlparser.")
+    (license license:expat)))
+
 (define-public rust-strsim-0.10
   (package
     (name "rust-strsim")
@@ -47159,7 +57000,7 @@ and Jaro-Winkler.")
      (origin
        (method url-fetch)
        (uri (crate-uri "strsim" version))
-       (file-name (string-append name "-" version ".crate"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
          "0k497pv882qn3q977ckznm13vxx927g8s1swvcv68j3c1pccwik4"))))))
@@ -47173,7 +57014,7 @@ and Jaro-Winkler.")
       (origin
         (method url-fetch)
         (uri (crate-uri "strsim" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0sjsm7hrvjdifz661pjxq5w4hf190hx53fra8dfvamacvff139cf"))))))
@@ -47327,22 +57168,22 @@ struct.")
      "Parse command line argument by defining a struct, derive crate.")
     (license (list license:asl2.0 license:expat))))
 
-(define-public rust-strum-0.20
+(define-public rust-strum-0.21
   (package
     (name "rust-strum")
-    (version "0.20.0")
+    (version "0.21.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "strum" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0p5cslmdnz261kiwmm4h7qsmv9bh83r0f9lq6f2z2mxsnl4wa63k"))))
+        (base32 "1qnd2by1zrwgx7li0hmwy7jbzjwz1ky697qjg85nga8zzny6py5a"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-strum-macros" ,rust-strum-macros-0.20))))
+       (("rust-strum-macros" ,rust-strum-macros-0.21))))
     (home-page "https://github.com/Peternator7/strum")
     (synopsis "Set of traits for working with enums and strings")
     (description
@@ -47350,6 +57191,23 @@ struct.")
 easier in Rust.")
     (license license:expat)))
 
+(define-public rust-strum-0.20
+  (package
+    (inherit rust-strum-0.21)
+    (name "rust-strum")
+    (version "0.20.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "strum" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0p5cslmdnz261kiwmm4h7qsmv9bh83r0f9lq6f2z2mxsnl4wa63k"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-strum-macros" ,rust-strum-macros-0.20))))))
+
 (define-public rust-strum-0.19
   (package
     (inherit rust-strum-0.20)
@@ -47384,17 +57242,17 @@ easier in Rust.")
      `(#:cargo-inputs
        (("rust-strum-macros" ,rust-strum-macros-0.18))))))
 
-(define-public rust-strum-macros-0.20
+(define-public rust-strum-macros-0.21
   (package
     (name "rust-strum-macros")
-    (version "0.20.1")
+    (version "0.21.1")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "strum_macros" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0j9ikvxlqzr667ghc045qkpwprjgcfmzgagln7maw4jigawcd2zf"))))
+        (base32 "1v55b1in7dn07s6vxr8dajqpvxkxjbfq6qamnjgcbnq9x3pawsnh"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -47409,6 +57267,26 @@ easier in Rust.")
      "This crate provides helpful macros for working with enums and strings.")
     (license license:expat)))
 
+(define-public rust-strum-macros-0.20
+  (package
+    (inherit rust-strum-macros-0.21)
+    (name "rust-strum-macros")
+    (version "0.20.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "strum_macros" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0j9ikvxlqzr667ghc045qkpwprjgcfmzgagln7maw4jigawcd2zf"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-heck" ,rust-heck-0.3)
+        ("rust-proc-macro2" ,rust-proc-macro2-1)
+        ("rust-quote" ,rust-quote-1)
+        ("rust-syn" ,rust-syn-1))))))
+
 (define-public rust-strum-macros-0.19
   (package
     (inherit rust-strum-macros-0.20)
@@ -47454,17 +57332,19 @@ easier in Rust.")
 (define-public rust-subtle-2
   (package
     (name "rust-subtle")
-    (version "2.2.3")
+    (version "2.4.1")
     (source
-      (origin
-        (method url-fetch)
-        (uri (crate-uri "subtle" version))
-        (file-name
-         (string-append name "-" version ".tar.gz"))
-        (sha256
-         (base32
-          "1h9jd7v0imksyl5mvnjk2rw54sa3xrril76z0md61mq2gh056bah"))))
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "subtle" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "00b6jzh9gzb0h9n25g06nqr90z3xzqppfhhb260s1hjhh4pg7pkb"))))
     (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-development-inputs (("rust-rand" ,rust-rand-0.7))))
     (home-page "https://dalek.rs/")
     (synopsis
      "Pure-Rust traits and utilities for cryptographic implementations")
@@ -47891,14 +57771,14 @@ browsers.")
 (define-public rust-syn-1
   (package
     (name "rust-syn")
-    (version "1.0.72")
+    (version "1.0.82")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "syn" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "10mb1cqmq2vpl5v6qjgqqyvhgs9yf9xv9f0dbskababrzfzcvs51"))))
+        (base32 "0ncx7gg5mvd16q5xf77hgk09nwmfq0ppsn0vgc9x9jv0pg85vbwd"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -48084,16 +57964,16 @@ a syntax tree of Rust source code.")
 (define-public rust-synstructure-0.12
   (package
     (name "rust-synstructure")
-    (version "0.12.3")
+    (version "0.12.6")
     (source
-      (origin
-        (method url-fetch)
-        (uri (crate-uri "synstructure" version))
-        (file-name
-         (string-append name "-" version ".tar.gz"))
-        (sha256
-         (base32
-          "0igmc5fzpk6fg7kgff914j05lbpc6ai2wmji312v2h8vvjhnwrb7"))))
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "synstructure" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "03r1lydbf3japnlpc4wka7y90pmz1i0danaj3f9a7b431akdlszk"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -48101,7 +57981,16 @@ a syntax tree of Rust source code.")
        (("rust-unicode-xid" ,rust-unicode-xid-0.2)
         ("rust-proc-macro2" ,rust-proc-macro2-1)
         ("rust-syn" ,rust-syn-1)
-        ("rust-quote" ,rust-quote-1))))
+        ("rust-quote" ,rust-quote-1))
+       #:cargo-development-inputs
+       (("rust-synstructure-test-traits" ,rust-synstructure-test-traits-0.1))
+       #:phases
+       (modify-phases %standard-phases
+         ;; https://github.com/mystor/synstructure/issues/51
+         (add-after 'unpack 'fix-test
+           (lambda _
+             (substitute* "src/lib.rs"
+               (("non_upper_case_globals )") "non_upper_case_globals)")))))))
     (home-page "https://github.com/mystor/synstructure")
     (synopsis "Helper methods and macros for custom derives")
     (description
@@ -48144,7 +58033,7 @@ a syntax tree of Rust source code.")
       (origin
         (method url-fetch)
         (uri (crate-uri "synstructure_test_traits" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1b3fs2b9kc1gy9dilaxqjbdl4z0mlrbbxjzkprdx953rif1c3q66"))))
@@ -48158,7 +58047,7 @@ a syntax tree of Rust source code.")
 (define-public rust-syntect-4
   (package
     (name "rust-syntect")
-    (version "4.5.0")
+    (version "4.6.0")
     (source
      (origin
        (method url-fetch)
@@ -48166,14 +58055,14 @@ a syntax tree of Rust source code.")
        (file-name
         (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1r9ij3qmq4cs83jwpk1043sai1dwdghb8lwkm34rs12d7frc5yib"))))
+        (base32 "0cd0rbi5r83p9pqph0gyj3vgr18ihh54amv9dvh0pvl0prdq284b"))))
     (build-system cargo-build-system)
     (arguments
      `(#:tests? #f                      ;missing files
        #:cargo-inputs
        (("rust-bincode" ,rust-bincode-1)
         ("rust-bitflags" ,rust-bitflags-1)
-        ("rust-fancy-regex" ,rust-fancy-regex-0.3)
+        ("rust-fancy-regex" ,rust-fancy-regex-0.7)
         ("rust-flate2" ,rust-flate2-1)
         ("rust-fnv" ,rust-fnv-1)
         ("rust-lazy-static" ,rust-lazy-static-1)
@@ -48189,7 +58078,9 @@ a syntax tree of Rust source code.")
        #:cargo-development-inputs
        (("rust-criterion" ,rust-criterion-0.3)
         ("rust-getopts" ,rust-getopts-0.2)
-        ("rust-pretty-assertions" ,rust-pretty-assertions-0.6))))
+        ("rust-pretty-assertions" ,rust-pretty-assertions-0.6)
+        ("rust-rayon" ,rust-rayon-1)
+        ("rust-regex" ,rust-regex-1))))
     (home-page "https://github.com/trishume/syntect")
     (synopsis "Library for syntax highlighting and code intelligence")
     (description
@@ -48415,7 +58306,7 @@ no_std compatible by default, only relying on alloc.")
         ("rust-seccomp-sys" ,rust-seccomp-sys-0.1)
         ("rust-strum" ,rust-strum-0.19)
         ("rust-strum-macros" ,rust-strum-macros-0.19))))
-    (inputs `(("libseccomp" ,libseccomp)))
+    (inputs (list libseccomp))
     (home-page "https://github.com/kpcyrd/syscallz-rs")
     (synopsis "Simple seccomp library for rust")
     (description "Simple seccomp library for rust")
@@ -48470,26 +58361,23 @@ no_std compatible by default, only relying on alloc.")
         ("rust-errno" ,rust-errno-0.2)
         ("rust-libc" ,rust-libc-0.2))))))
 
-(define-public rust-sysinfo-0.18
+(define-public rust-sysinfo-0.23
   (package
     (name "rust-sysinfo")
-    (version "0.18.2")
+    (version "0.23.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "sysinfo" version))
-       (file-name
-        (string-append name "-" version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32
-         "0zd974yydc4yszxgx9hiqm5ah2rqnsgyq3qrl7raf90scpxaw16l"))))
+        (base32 "14d5fgg24x4rfd6226dl1grsv5lnid0kynp6kfzb3lmylh070xcy"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-cfg-if" ,rust-cfg-if-1)
         ("rust-core-foundation-sys" ,rust-core-foundation-sys-0.8)
-        ("rust-doc-comment" ,rust-doc-comment-0.3)
         ("rust-libc" ,rust-libc-0.2)
         ("rust-ntapi" ,rust-ntapi-0.3)
         ("rust-once-cell" ,rust-once-cell-1)
@@ -48502,6 +58390,78 @@ no_std compatible by default, only relying on alloc.")
 processors, disks, components and networks.")
     (license license:expat)))
 
+(define-public rust-sysinfo-0.21
+  (package
+    (inherit rust-sysinfo-0.23)
+    (name "rust-sysinfo")
+    (version "0.21.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "sysinfo" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "16j4wfiihlq261dh2k939br6q9zzaiwh719m7lb8idj16dpxd24g"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-cfg-if" ,rust-cfg-if-1)
+        ("rust-core-foundation-sys" ,rust-core-foundation-sys-0.8)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-ntapi" ,rust-ntapi-0.3)
+        ("rust-once-cell" ,rust-once-cell-1)
+        ("rust-rayon" ,rust-rayon-1)
+        ("rust-winapi" ,rust-winapi-0.3))))))
+
+(define-public rust-sysinfo-0.20
+  (package
+    (inherit rust-sysinfo-0.21)
+    (name "rust-sysinfo")
+    (version "0.20.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "sysinfo" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0ljf8cdn50g9vrg4h9qxv070n4zd83cv63g62007qs8d8n1pimwj"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-cfg-if" ,rust-cfg-if-1)
+        ("rust-core-foundation-sys" ,rust-core-foundation-sys-0.8)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-ntapi" ,rust-ntapi-0.3)
+        ("rust-once-cell" ,rust-once-cell-1)
+        ("rust-rayon" ,rust-rayon-1)
+        ("rust-winapi" ,rust-winapi-0.3))))))
+
+(define-public rust-sysinfo-0.18
+  (package
+    (inherit rust-sysinfo-0.20)
+    (name "rust-sysinfo")
+    (version "0.18.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "sysinfo" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0zd974yydc4yszxgx9hiqm5ah2rqnsgyq3qrl7raf90scpxaw16l"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-cfg-if" ,rust-cfg-if-1)
+        ("rust-core-foundation-sys" ,rust-core-foundation-sys-0.8)
+        ("rust-doc-comment" ,rust-doc-comment-0.3)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-ntapi" ,rust-ntapi-0.3)
+        ("rust-once-cell" ,rust-once-cell-1)
+        ("rust-rayon" ,rust-rayon-1)
+        ("rust-winapi" ,rust-winapi-0.3))))))
+
 (define-public rust-sysinfo-0.16
   (package
     (inherit rust-sysinfo-0.18)
@@ -48578,8 +58538,46 @@ processors, disks, components and networks.")
     (description "Send log messages to syslog.")
     (license license:expat)))
 
+(define-public rust-system-deps-3
+  (package
+    (name "rust-system-deps")
+    (version "3.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "system-deps" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "19ig3hxgyq9d7qy8cwpl74l75ay2w0y0a4rginqb68h7hygjc328"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:tests? #f                      ;source is missing some test files
+       #:cargo-inputs
+       (("rust-anyhow" ,rust-anyhow-1)
+        ("rust-cfg-expr" ,rust-cfg-expr-0.8)
+        ("rust-heck" ,rust-heck-0.3)
+        ("rust-itertools" ,rust-itertools-0.10)
+        ("rust-pkg-config" ,rust-pkg-config-0.3)
+        ("rust-strum" ,rust-strum-0.21)
+        ("rust-strum-macros" ,rust-strum-macros-0.21)
+        ("rust-thiserror" ,rust-thiserror-1)
+        ("rust-toml" ,rust-toml-0.5)
+        ("rust-version-compare" ,rust-version-compare-0.0))
+       #:cargo-development-inputs
+       (("rust-assert-matches" ,rust-assert-matches-1)
+        ("rust-itertools" ,rust-itertools-0.10)
+        ("rust-lazy-static" ,rust-lazy-static-1))))
+    (home-page "https://github.com/gdesmott/system-deps")
+    (synopsis "Define system dependencies in @file{Cargo.toml}")
+    (description "This crate lets you write system dependencies in
+@file{Cargo.toml} metadata, rather than programmatically in @file{build.rs}.
+This makes those dependencies declarative, so other tools can read them as
+well.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-system-deps-1
   (package
+    (inherit rust-system-deps-3)
     (name "rust-system-deps")
     (version "1.3.2")
     (source
@@ -48592,9 +58590,8 @@ processors, disks, components and networks.")
        (modules '((guix build utils)))
        (snippet
         '(begin (substitute* "Cargo.toml"
-                  (("0.0.10") "0.0"))
+                  (("0.0.10") "0.0.11"))
                 #t))))
-    (build-system cargo-build-system)
     (arguments
      `(#:tests? #f                      ;source is missing some test files
        #:cargo-inputs
@@ -48604,16 +58601,9 @@ processors, disks, components and networks.")
         ("rust-strum-macros" ,rust-strum-macros-0.18)
         ("rust-thiserror" ,rust-thiserror-1)
         ("rust-toml" ,rust-toml-0.5)
-        ("rust-version-compare" ,rust-version-compare-0.0))
+        ("rust-version-compare" ,rust-version-compare-0.0.11))
        #:cargo-development-inputs
-       (("rust-itertools" ,rust-itertools-0.9))))
-    (home-page "https://github.com/gdesmott/system-deps")
-    (synopsis "Define system dependencies in @file{Cargo.toml}")
-    (description
-     "This crate lets you write system dependencies in @file{Cargo.toml}
-metadata, rather than programmatically in @file{build.rs}.  This makes those
-dependencies declarative, so other tools can read them as well.")
-    (license (list license:expat license:asl2.0))))
+       (("rust-itertools" ,rust-itertools-0.9))))))
 
 (define-public rust-tabwriter-1
   (package
@@ -48695,7 +58685,7 @@ without a mutable reference.")
          "0hvd6vk4ksgg2y99498jw52ric4lxm0i6ygpzqm95gdrhvsxyynp"))))
     (build-system cargo-build-system)
     (home-page "https://docs.rs/takeable-option/")
-    (synopsis "A small wrapper around option.")
+    (synopsis "Small wrapper around option")
     (description
      "This package provides a small wrapper around option.")
     (license (list license:asl2.0 license:expat))))
@@ -48703,16 +58693,14 @@ without a mutable reference.")
 (define-public rust-tap-1
   (package
     (name "rust-tap")
-    (version "1.0.0")
+    (version "1.0.1")
     (source
-      (origin
-        (method url-fetch)
-        (uri (crate-uri "tap" version))
-        (file-name
-         (string-append name "-" version ".tar.gz"))
-        (sha256
-         (base32
-          "13h7rw3zg3qyb4wrri8l6xbd1wrxd2rq29sqxnkd7zqs5mrlwirn"))))
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "tap" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0sc3gl4nldqpvyhqi3bbd0l9k7fngrcl4zs47n314nqqk4bpx4sm"))))
     (build-system cargo-build-system)
     (home-page "https://github.com/myrrlyn/tap")
     (synopsis "Generic extensions for tapping values in Rust")
@@ -48728,7 +58716,7 @@ without a mutable reference.")
       (origin
         (method url-fetch)
         (uri (crate-uri "tar" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1lr6v3cpkfxd2lk5ll2jd8wr1xdskwj35smnh5sfb8xvzzxnn6dk"))))
@@ -48779,53 +58767,80 @@ memory all at once.")
 @code{build.rs} scripts.")
     (license (list license:isc license:asl2.0))))
 
-(define-public rust-target-lexicon-0.10
+(define-public rust-target-lexicon-0.12
   (package
     (name "rust-target-lexicon")
-    (version "0.10.0")
+    (version "0.12.2")
     (source
-      (origin
-        (method url-fetch)
-        (uri (crate-uri "target-lexicon" version))
-        (file-name
-          (string-append name "-" version ".tar.gz"))
-        (sha256
-          (base32
-            "17diw9c3d1vb5rmwwk2ghsyhfs0gj5jm78hrwxxhmd67vhw743mb"))))
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "target-lexicon" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1zsvillq0zsggg3fb0mfmcia0f68wfclahaqc0zgln14pkfzrgyr"))))
     (build-system cargo-build-system)
     (arguments `(#:skip-build? #t))
-    (home-page
-      "https://github.com/CraneStation/target-lexicon")
-    (synopsis
-      "Targeting utilities for compilers and related tools")
+    (home-page "https://github.com/CraneStation/target-lexicon")
+    (synopsis "Targeting utilities for compilers and related tools")
     (description
-      "Targeting utilities for compilers and related tools")
+     "This package provides targeting utilities for compilers and related
+tools.")
     (license license:asl2.0)))
 
-(define-public rust-tectonic-bridge-core-0.2
+(define-public rust-target-lexicon-0.11
+  (package
+    (inherit rust-target-lexicon-0.12)
+    (name "rust-target-lexicon")
+    (version "0.11.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "target-lexicon" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0khq669rji1l0liv9mdxvddklqhxxpk6r06wbdhc18hiilw9xck2"))))
+    (arguments `(#:skip-build? #t))))
+
+(define-public rust-target-lexicon-0.10
+  (package
+    (inherit rust-target-lexicon-0.12)
+    (name "rust-target-lexicon")
+    (version "0.10.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "target-lexicon" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "17diw9c3d1vb5rmwwk2ghsyhfs0gj5jm78hrwxxhmd67vhw743mb"))))
+    (arguments `(#:skip-build? #t))))
+
+(define-public rust-tectonic-bridge-core-0.3
   (package
     (name "rust-tectonic-bridge-core")
-    (version "0.2.0")
+    (version "0.3.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "tectonic_bridge_core" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1728hdynpkc1hmaaslci0wijqni240f8mmclf8sw6nkkfbygk8zk"))))
+        (base32 "0wdc6w0nwqgpsaja55vbx7n7329cbdyqwfqaxpcdfpsf2gfz1s31"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-cbindgen" ,rust-cbindgen-0.16)
-        ("rust-cc" ,rust-cc-1)
+       (("rust-cc" ,rust-cc-1)
         ("rust-flate2" ,rust-flate2-1)
         ("rust-lazy-static" ,rust-lazy-static-1)
         ("rust-libc" ,rust-libc-0.2)
         ("rust-md-5" ,rust-md-5-0.9)
         ("rust-tectonic-errors" ,rust-tectonic-errors-0.2)
         ("rust-tectonic-io-base" ,rust-tectonic-io-base-0.3)
-        ("rust-tectonic-status-base" ,rust-tectonic-status-base-0.1))))
+        ("rust-tectonic-status-base" ,rust-tectonic-status-base-0.2))))
     (home-page "https://tectonic-typesetting.github.io/")
     (synopsis "Expose core backend APIs to the Tectonic C/C++ code")
     (description
@@ -48836,7 +58851,7 @@ the various C/C++ ``engines`` implementing the TeX software.")
 
 (define-public rust-tectonic-bridge-core-0.1
   (package
-    (inherit rust-tectonic-bridge-core-0.2)
+    (inherit rust-tectonic-bridge-core-0.3)
     (name "rust-tectonic-bridge-core")
     (version "0.1.0")
     (source
@@ -48984,17 +58999,17 @@ bindings.")
 bindings.")
     (license license:expat)))
 
-(define-public rust-tectonic-bundles-0.1
+(define-public rust-tectonic-bundles-0.2
   (package
     (name "rust-tectonic-bundles")
-    (version "0.1.0")
+    (version "0.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "tectonic_bundles" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "05x852w73d0gy9dmg69cl6ch3r2qfh4czai44nkbm6ykn190q2lc"))))
+        (base32 "17wwgfcl5nzvgzil7ayi42ljjkx9ffv4c35v6ywcmzdhk9zhki2f"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -49002,9 +59017,9 @@ bindings.")
        (("rust-flate2" ,rust-flate2-1)
         ("rust-fs2" ,rust-fs2-0.4)
         ("rust-tectonic-errors" ,rust-tectonic-errors-0.2)
-        ("rust-tectonic-geturl" ,rust-tectonic-geturl-0.2)
+        ("rust-tectonic-geturl" ,rust-tectonic-geturl-0.3)
         ("rust-tectonic-io-base" ,rust-tectonic-io-base-0.3)
-        ("rust-tectonic-status-base" ,rust-tectonic-status-base-0.1)
+        ("rust-tectonic-status-base" ,rust-tectonic-status-base-0.2)
         ("rust-zip" ,rust-zip-0.5))))
     (home-page "https://tectonic-typesetting.github.io/")
     (synopsis "Tectonic ``bundle'' (support file collection) implementations")
@@ -49218,17 +59233,17 @@ error type and utilities.")
        #:cargo-inputs
        (("rust-anyhow" ,rust-anyhow-1))))))
 
-(define-public rust-tectonic-geturl-0.2
+(define-public rust-tectonic-geturl-0.3
   (package
     (name "rust-tectonic-geturl")
-    (version "0.2.0")
+    (version "0.3.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "tectonic_geturl" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0rwndw6ixwpflrhcvn5mcshpk6gd3b1ihghp6xxsr3dgw59ad1z2"))))
+        (base32 "0ifgqhqipb2mpd80crzc40nlri4iv5dxhf7kja8wqaqrpgw364vr"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -49237,7 +59252,7 @@ error type and utilities.")
         ("rust-curl" ,rust-curl-0.4)
         ("rust-reqwest" ,rust-reqwest-0.11)
         ("rust-tectonic-errors" ,rust-tectonic-errors-0.2)
-        ("rust-tectonic-status-base" ,rust-tectonic-status-base-0.1))))
+        ("rust-tectonic-status-base" ,rust-tectonic-status-base-0.2))))
     (home-page
      "https://tectonic-typesetting.github.io/")
     (synopsis "Interface for HTTP GETs and byte-range requests")
@@ -49320,9 +59335,9 @@ streams.")
         ("rust-tectonic-cfg-support" ,rust-tectonic-cfg-support-0.1)
         ("rust-tectonic-dep-support" ,rust-tectonic-dep-support-0.1))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libpng" ,libpng)))
+     (list libpng))
     (home-page "https://tectonic-typesetting.github.io/")
     (synopsis "Xdvipdfmx's PDF, XDV, and image I/O APIs in C, as a Rust crate")
     (description
@@ -49433,7 +59448,7 @@ a C API.")
       (origin
         (method url-fetch)
         (uri (crate-uri "tempdir" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1n5n86zxpgd85y0mswrp5cfdisizq2rv3la906g6ipyc03xvbwhm"))))
@@ -49458,7 +59473,7 @@ deleting all contents when it's dropped.")
      (origin
        (method url-fetch)
        (uri (crate-uri "tempfile" version))
-       (file-name (string-append name "-" version ".crate"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "08pbf3c1i42382dc44dil5bgiawcsi0qk6zdibw10f69rxiwdhfs"))))
     (build-system cargo-build-system)
@@ -49501,6 +59516,28 @@ directories.")
         ("rust-redox-syscall" ,rust-redox-syscall-0.1)
         ("rust-winapi" ,rust-winapi-0.2))))))
 
+(define-public rust-temporary-0.6
+  (package
+    (name "rust-temporary")
+    (version "0.6.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "temporary" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1z0vg6yb54xlb5aapdwga57s5xbcvgzw2n21m2zv7flx8b4dsd5n"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-random" ,rust-random-0.12))))
+    (home-page "https://github.com/stainless-steel/temporary")
+    (synopsis "Temporary files and directories")
+    (description
+     "The package provides means of managing temporary files and directories.")
+    (license (list license:asl2.0 license:expat))))
+
 (define-public rust-tendril-0.4
   (package
     (name "rust-tendril")
@@ -49639,7 +59676,7 @@ template language.")
       (origin
         (method url-fetch)
         (uri (crate-uri "term" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1wbh8ngqkqr3f6wz902yplf60bd5yapnckvrkgmzp5nffi7n8qzs"))))
@@ -49657,7 +59694,7 @@ template language.")
       (origin
         (method url-fetch)
         (uri (crate-uri "term" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32 "109jmzddq1kz6wm2ndgddy7yrlqcw2i36ygxl0fcymc0sda7w1zj"))))
     (arguments
@@ -49762,7 +59799,7 @@ library.")
      (origin
        (method url-fetch)
        (uri (crate-uri "termcolor" version))
-       (file-name (string-append name "-" version ".crate"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "1x65i1ny4m6z1by62ra6wdcrd557p2ysm866x0pg60zby2cxizid"))))
     (build-system cargo-build-system)
@@ -49871,7 +59908,7 @@ writing colored text to a terminal.")
       (origin
         (method url-fetch)
         (uri (crate-uri "termion" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "01f9787d5nx445bqbj644v38bn0hl2swwjy9baz0dnbqi6fyqb62"))))
@@ -49897,7 +59934,7 @@ writing colored text to a terminal.")
       (origin
         (method url-fetch)
         (uri (crate-uri "termios" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "09any1p4jp4bphvb5ikagnvwjc3xn2djchy96nkpa782xb2j1dkj"))))
@@ -50200,7 +60237,7 @@ handle Unicode characters correctly.")
       (origin
         (method url-fetch)
         (uri (crate-uri "thread-id" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1h90v19fjz3x9b25ywh68z5yf2zsmm6h5zb4rl302ckbsp4z9yy7"))))
@@ -50245,7 +60282,7 @@ different for every thread.")
      (origin
        (method url-fetch)
        (uri (crate-uri "thread_local" version))
-       (file-name (string-append name "-" version ".crate"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "1gccp3grndpi6dyhzylz4hkqnkzc1xyri98n0xwwhnn90i7d4640"))))
     (build-system cargo-build-system)
@@ -50269,7 +60306,7 @@ different for every thread.")
       (origin
         (method url-fetch)
         (uri (crate-uri "thread_local" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "06rzik99p8c5js8238yhc8rk6np543ylb1dy9nrw5v80j0r3xdf6"))))
@@ -50277,6 +60314,25 @@ different for every thread.")
      `(#:skip-build? #t
        #:cargo-inputs (("rust-lazy-static" ,rust-lazy-static-1))))))
 
+(define-public rust-thread-local-0.3.4
+  (package
+    (inherit rust-thread-local-0.3)
+    (name "rust-thread-local")
+    (version "0.3.4")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "thread_local" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32 "055vj0ddb6vh0zaqdlxssfqzzpgs4ll5l5j7nqvabdzfgasw95qn"))))
+    (build-system cargo-build-system)
+    (arguments
+      `(#:skip-build? #t
+        #:cargo-inputs
+        (("rust-lazy-static" ,rust-lazy-static-0.2)
+         ("rust-unreachable" ,rust-unreachable-1))))))
+
 (define-public rust-thread-local-0.2
   (package
     (inherit rust-thread-local-0.3)
@@ -50295,6 +60351,30 @@ different for every thread.")
      `(#:cargo-inputs
        (("rust-thread-id" ,rust-thread-id-2))))))
 
+(define-public rust-thread-priority-0.4
+  (package
+    (name "rust-thread-priority")
+    (version "0.4.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "thread-priority" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1ccidjv5ra017knav1h34bzlscpx856fhz7kln3zhszh3jpr8qqg"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-libc" ,rust-libc-0.2)
+        ("rust-log" ,rust-log-0.4)
+        ("rust-winapi" ,rust-winapi-0.3))))
+    (home-page "https://github.com/vityafx/thread-priority")
+    (synopsis "Library for managing threads priority and schedule policies")
+    (description
+     "Library for managing threads priority and schedule policies.")
+    (license license:expat)))
+
 (define-public rust-thread-tree-0.3
   (package
     (name "rust-thread-tree")
@@ -50328,7 +60408,7 @@ contention between workers when delivering jobs.")
       (origin
         (method url-fetch)
         (uri (crate-uri "threadpool" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0rd89n1q7vy47w4c32cnynibffv9kj3jy3dwr0536n9lbw5ckw72"))))
@@ -50389,15 +60469,42 @@ fixed set of worker threads.")
        (("rust-libc" ,rust-libc-0.2)
         ("rust-pkg-config" ,rust-pkg-config-0.3))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libsodium" ,libsodium)))
+     (list libsodium))
     (home-page "https://nest.pijul.com/pijul_org/thrussh")
     (synopsis "Straightforward bindings to libsodium")
     (description
      "You can bind to libsodium from Rust with this crate.")
     (license (list license:asl2.0 license:expat))))
 
+(define-public rust-tiger-0.1
+  (package
+    (name "rust-tiger")
+    (version "0.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "tiger" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "01bhc7h8kxc5kjqx9sqrb3g8h4f9av6hpxzyihjq7pprphf56gj4"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-block-buffer" ,rust-block-buffer-0.9)
+        ("rust-byteorder" ,rust-byteorder-1)
+        ("rust-digest" ,rust-digest-0.9))
+       #:cargo-development-inputs
+       (("rust-digest" ,rust-digest-0.9)
+        ("rust-hex-literal" ,rust-hex-literal-0.2))))
+    (home-page "https://github.com/RustCrypto/hashes")
+    (synopsis "Tiger hash function")
+    (description
+     "This package provides the Tiger cryptographic hash function.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-tikv-jemalloc-sys-0.4
   (package
     (name "rust-tikv-jemalloc-sys")
@@ -50485,19 +60592,47 @@ fixed set of worker threads.")
 introspection APIs.")
     (license (list license:expat license:asl2.0))))
 
-(define-public rust-time-0.2
+(define-public rust-time-0.3
   (package
     (name "rust-time")
-    (version "0.2.23")
+    (version "0.3.5")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "time" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "12z95k0005rmyn9pf9v4hq80khsns7y5wfydnjr5jpci2yiyxnmw"))))
+        (base32 "1b943jf54q1667i328x3z73fsjdhcqdqccxckx1nzwwaz9ygxvs1"))))
     (build-system cargo-build-system)
     (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-itoa" ,rust-itoa-0.4)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-quickcheck" ,rust-quickcheck-1)
+        ("rust-rand" ,rust-rand-0.8)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-time-macros" ,rust-time-macros-0.2))))
+    (home-page "https://github.com/time-rs/time")
+    (synopsis "Date and time library")
+    (description "This package provides a date and time library.  It is fully
+interoperable with the standard library, and is mostly compatible with
+@code{#![no_std]}.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-time-0.2
+  (package
+    (inherit rust-time-0.3)
+    (name "rust-time")
+    (version "0.2.27")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "time" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0hm209d078jfgxzjhi5xqim64q31rlj1h70zz57qbmpbirzsjlj7"))))
+    (arguments
      `(#:cargo-inputs
        (("rust-const-fn" ,rust-const-fn-0.4)
         ("rust-libc" ,rust-libc-0.2)
@@ -50511,13 +60646,7 @@ introspection APIs.")
        #:cargo-development-inputs
        (("rust-rand" ,rust-rand-0.7)
         ("rust-serde-json" ,rust-serde-json-1)
-        ("rust-standback" ,rust-standback-0.2))))
-    (home-page "https://github.com/time-rs/time")
-    (synopsis "Date and time library")
-    (description "This package provides a date and time library.  It is fully
-interoperable with the standard library, and is mostly compatible with
-@code{#![no_std]}.")
-    (license (list license:expat license:asl2.0))))
+        ("rust-standback" ,rust-standback-0.2))))))
 
 (define-public rust-time-0.1
   (package
@@ -50527,7 +60656,7 @@ interoperable with the standard library, and is mostly compatible with
       (origin
         (method url-fetch)
         (uri (crate-uri "time" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0f14wrgxj7ya2v4msg5mni7046bsm2angm7cn3pd3yv04gpm12na"))))
@@ -50550,29 +60679,42 @@ in Rust.")
     (license (list license:asl2.0
                    license:expat))))
 
-(define-public rust-time-macros-0.1
+(define-public rust-time-macros-0.2
   (package
     (name "rust-time-macros")
-    (version "0.1.0")
+    (version "0.2.3")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "time-macros" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32
-         "0bdbxjgbxb81xgy08h5dh4qvwy95sy9x8g1y31g11g4my3lvdscs"))))
+        (base32 "1mj7pv8y9j2csrh1l8aabras36pgysbnfy18330srh4g8sihrsr5"))))
     (build-system cargo-build-system)
-    (arguments
-     `(#:cargo-inputs
-       (("rust-proc-macro-hack" ,rust-proc-macro-hack-0.5)
-        ("rust-time-macros-impl" ,rust-time-macros-impl-0.1))))
+    (arguments `(#:skip-build? #t))
     (home-page "https://github.com/time-rs/time")
     (synopsis "Procedural macros for the time crate")
     (description "This package provides procedural macros for the time
 crate.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-time-macros-0.1
+  (package
+    (inherit rust-time-macros-0.2)
+    (name "rust-time-macros")
+    (version "0.1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "time-macros" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1wg24yxpxcfmim6dgblrf8p321m7cyxpdivzvp8bcb7i4rp9qzlm"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-proc-macro-hack" ,rust-proc-macro-hack-0.5)
+        ("rust-time-macros-impl" ,rust-time-macros-impl-0.1))))))
+
 (define-public rust-time-macros-impl-0.1
   (package
     (name "rust-time-macros-impl")
@@ -50688,8 +60830,38 @@ closures after a delay or at a given timestamp.")
 manipulation in Rust.")
     (license license:expat)))
 
+(define-public rust-tiny-http-0.8
+  (package
+    (name "rust-tiny-http")
+    (version "0.8.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "tiny-http" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0fcdwpb2ghk671qjjrk6048hs3yp7f681hxpr68gamk00181prcw"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-ascii" ,rust-ascii-1)
+        ("rust-chrono" ,rust-chrono-0.4)
+        ("rust-chunked-transfer" ,rust-chunked-transfer-1)
+        ("rust-log" ,rust-log-0.4)
+        ("rust-openssl" ,rust-openssl-0.10)
+        ("rust-url" ,rust-url-2))
+       #:cargo-development-inputs
+       (("rust-fdlimit" ,rust-fdlimit-0.1)
+        ("rust-rustc-serialize" ,rust-rustc-serialize-0.3)
+        ("rust-sha1" ,rust-sha1-0.6))))
+    (home-page "https://github.com/tiny-http/tiny-http")
+    (synopsis "Low level HTTP server library")
+    (description "This package provides a low level HTTP server library.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-tiny-http-0.6
   (package
+    (inherit rust-tiny-http-0.8)
     (name "rust-tiny-http")
     (version "0.6.2")
     (source
@@ -50699,7 +60871,6 @@ manipulation in Rust.")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "0la95daknfh8g951ddb2zdz6av2459rncp6h9dh02pf98h5glq8n"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
@@ -50708,11 +60879,7 @@ manipulation in Rust.")
         ("rust-chunked-transfer" ,rust-chunked-transfer-0.3)
         ("rust-log" ,rust-log-0.4)
         ("rust-openssl" ,rust-openssl-0.10)
-        ("rust-url" ,rust-url-1))))
-    (home-page "https://github.com/tiny-http/tiny-http")
-    (synopsis "Low level HTTP server library")
-    (description "This package provides a low level HTTP server library.")
-    (license license:asl2.0)))
+        ("rust-url" ,rust-url-1))))))
 
 (define-public rust-tiny-keccak-2
   (package
@@ -50737,6 +60904,32 @@ manipulation in Rust.")
 specified in FIPS-202, SP800-185 and KangarooTwelve.")
     (license license:cc0)))
 
+(define-public rust-tinyfiledialogs-3
+  (package
+    (name "rust-tinyfiledialogs")
+    (version "3.9.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "tinyfiledialogs" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1sfx2wddmd6dg8vwn53iwlabrynn6gzfbnvhskhy89iwd9i7gidd"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-cc" ,rust-cc-1)
+        ("rust-libc" ,rust-libc-0.2))))
+    (home-page "https://github.com/jdm/tinyfiledialogs-rs")
+    (synopsis "High-level Rust binding for the tinyfiledialogs C library")
+    (description
+     "This package provides high-level Rust binding for the tinyfiledialogs
+C library.")
+    (license license:zlib)))
+
 (define-public rust-tinytemplate-1
   (package
     (name "rust-tinytemplate")
@@ -50854,7 +61047,7 @@ Fireball''.")
 (define-public rust-tokio-1
   (package
     (name "rust-tokio")
-    (version "1.2.0")
+    (version "1.15.0")
     (source
      (origin
        (method url-fetch)
@@ -50862,7 +61055,7 @@ Fireball''.")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "0fmfykdp29hjq5264mp6sa4c0wp5mlimbi0dd9mrxsk5qq20s6g8"))))
+         "0f2qwp9ljc4gf955g7qcksp0jc1bwmzxb2nf6mb7h1n2irvirgzv"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -50887,6 +61080,44 @@ Fireball''.")
 writing asynchronous I/O backed applications.")
     (license license:expat)))
 
+(define-public rust-tokio-1.8
+  (package
+    (inherit rust-tokio-1)
+    (name "rust-tokio")
+    (version "1.8.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "tokio" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1m18rs51wz6s7dwdwzr0j63kh815x4dx9k0f2c485crs7fqjw32p"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bytes" ,rust-bytes-1)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-memchr" ,rust-memchr-2)
+        ("rust-mio" ,rust-mio-0.7)
+        ("rust-num-cpus" ,rust-num-cpus-1)
+        ("rust-once-cell" ,rust-once-cell-1)
+        ("rust-parking-lot" ,rust-parking-lot-0.11)
+        ("rust-pin-project-lite" ,rust-pin-project-lite-0.2)
+        ("rust-signal-hook-registry" ,rust-signal-hook-registry-1)
+        ("rust-tokio-macros" ,rust-tokio-macros-1)
+        ("rust-tracing" ,rust-tracing-0.1)
+        ("rust-winapi" ,rust-winapi-0.3))
+       #:cargo-development-inputs
+       (("rust-async-stream" ,rust-async-stream-0.3)
+        ("rust-autocfg" ,rust-autocfg-1)
+        ("rust-nix" ,rust-nix-0.19)
+        ("rust-futures" ,rust-futures-0.3)
+        ("rust-proptest" ,rust-proptest-1)
+        ("rust-sokcet2-0.4" ,rust-socket2-0.4)
+        ("rust-tokio-stream" ,rust-tokio-stream-0.1)
+        ("rust-tokio-test" ,rust-tokio-test-0.4))))))
+
 (define-public rust-tokio-0.3
   (package
     (inherit rust-tokio-1)
@@ -51284,10 +61515,34 @@ the current thread.")
 futures efficiently")
     (license (list license:asl2.0 license:expat))))
 
+(define-public rust-tokio-io-timeout-1
+  (package
+    (name "rust-tokio-io-timeout")
+    (version "1.1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "tokio-io-timeout" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1s9dlkzsn0yng98zdmkddjx11jwawkxk3pbi8laxwh72dc89zi4h"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-pin-project-lite" ,rust-pin-project-lite-0.2)
+        ("rust-tokio" ,rust-tokio-1))))
+    (home-page "https://github.com/sfackler/tokio-io-timeout")
+    (synopsis "Tokio wrappers which apply timeouts to IO operations")
+    (description
+     "This package provides Tokio wrappers which apply timeouts to IO
+operations.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-tokio-macros-1
   (package
     (name "rust-tokio-macros")
-    (version "1.1.0")
+    (version "1.7.0")
     (source
      (origin
        (method url-fetch)
@@ -51295,7 +61550,7 @@ futures efficiently")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "0mys5zm2gcdgc0iq8nqipzn703q26x1bpw59m04shikgacdb3xya"))))
+         "1ds34qsfvgf63cjgdx3gr4pl7i76fifyar15ksbillcc8hpzfmxm"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -51356,7 +61611,7 @@ futures efficiently")
       (origin
         (method url-fetch)
         (uri (crate-uri "tokio-mock-task" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1y7q83qfk9ljjfvs82b453pmz9x1v3d6kr4x55j8mal01s6790dw"))))
@@ -51554,9 +61809,9 @@ OpenSSL.")
        (("rust-futures" ,rust-futures-0.3)
         ("rust-tokio" ,rust-tokio-0.2))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("openssl" ,openssl)))))
+     (list openssl))))
 
 (define-public rust-tokio-openssl-0.3
   (package
@@ -51594,8 +61849,7 @@ OpenSSL.")
           "12rb390i3af7zb0z2idhaf6l2m6snypwdiwjw84rmyz4qy1i6ard"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:rust ,rust-1.46
-       #:tests? #f                      ;require postgresql
+     `(#:tests? #f                      ;require postgresql
        #:cargo-inputs
        (("rust-async-trait" ,rust-async-trait-0.1)
         ("rust-byteorder" ,rust-byteorder-1)
@@ -52319,9 +62573,9 @@ pool.")
         ("rust-tokio-util" ,rust-tokio-util-0.3)
         ("rust-winapi" ,rust-winapi-0.3))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (home-page "https://tokio.rs")
     (synopsis "TLS/SSL streams for Tokio")
     (description "An implementation of TLS/SSL streams for Tokio giving an
@@ -52585,7 +62839,7 @@ stream-based WebSocket implementation.")
       (origin
         (method url-fetch)
         (uri (crate-uri "toml" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1apcmjrrjw429pjw7mqlmdwwd67g8305vwqy4kw3swr612bl44d3"))))
@@ -52657,18 +62911,127 @@ serializing Rust structures.")
     (license (list license:asl2.0
                    license:expat))))
 
+(define-public rust-tonic-0.6
+  (package
+    (name "rust-tonic")
+    (version "0.6.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "tonic" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32 "1yjsnfkkq3c7xcyxkid0zgpm8w774qqdny0im6fr0s1drxwkn814"))))
+    (build-system cargo-build-system)
+    (arguments
+      `(#:skip-build? #t
+        #:cargo-inputs
+        (("rust-async-stream" ,rust-async-stream-0.3)
+         ("rust-async-trait" ,rust-async-trait-0.1)
+         ("rust-base64" ,rust-base64-0.13)
+         ("rust-bytes" ,rust-bytes-1)
+         ("rust-flate2" ,rust-flate2-1)
+         ("rust-futures-core" ,rust-futures-core-0.3)
+         ("rust-futures-util" ,rust-futures-util-0.3)
+         ("rust-h2" ,rust-h2-0.3)
+         ("rust-http" ,rust-http-0.2)
+         ("rust-http-body" ,rust-http-body-0.4)
+         ("rust-hyper" ,rust-hyper-0.14)
+         ("rust-hyper-timeout" ,rust-hyper-timeout-0.4)
+         ("rust-percent-encoding" ,rust-percent-encoding-2)
+         ("rust-pin-project" ,rust-pin-project-1)
+         ("rust-prost" ,rust-prost-0.9)
+         ("rust-prost-derive" ,rust-prost-derive-0.9)
+         ("rust-rustls-native-certs" ,rust-rustls-native-certs-0.5)
+         ("rust-tokio" ,rust-tokio-1)
+         ("rust-tokio-rustls" ,rust-tokio-rustls-0.22)
+         ("rust-tokio-stream" ,rust-tokio-stream-0.1)
+         ("rust-tokio-util" ,rust-tokio-util-0.6)
+         ("rust-tower" ,rust-tower-0.4)
+         ("rust-tower-layer" ,rust-tower-layer-0.3)
+         ("rust-tower-service" ,rust-tower-service-0.3)
+         ("rust-tracing" ,rust-tracing-0.1)
+         ("rust-tracing-futures" ,rust-tracing-futures-0.2)
+         ("rust-webpki-roots" ,rust-webpki-roots-0.21))))
+    (home-page "https://github.com/hyperium/tonic")
+    (synopsis "gRPC over HTTP/2 implementation for Rust")
+    (description
+      "This package provides a gRPC over HTTP/2 implementation focused on high
+performance, interoperability, and flexibility.")
+    (license license:expat)))
+
+(define-public rust-totp-lite-1
+  (package
+    (name "rust-totp-lite")
+    (version "1.0.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "totp-lite" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "12ql4pi9q7sf5651588wia2l5h4mil3kv9jrrkib5gvlpvl0k05i"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-digest" ,rust-digest-0.9)
+        ("rust-hmac" ,rust-hmac-0.11)
+        ("rust-sha-1" ,rust-sha-1-0.9)
+        ("rust-sha2" ,rust-sha2-0.9))))
+    (home-page "https://github.com/fosskers/totp-lite")
+    (synopsis "Simple, correct TOTP library")
+    (description "Rust-totp-lite provides a simple, correct time-based
+One-Time Password library.")
+    (license license:expat)))
+
+(define-public rust-tower-0.4
+  (package
+    (name "rust-tower")
+    (version "0.4.10")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "tower" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "001wx4iiyhmiih9f93szjsfdm5mzlr0n093bhqf178azzw7m03n0"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-futures-core" ,rust-futures-core-0.3)
+        ("rust-futures-util" ,rust-futures-util-0.3)
+        ("rust-hdrhistogram" ,rust-hdrhistogram-6)
+        ("rust-indexmap" ,rust-indexmap-1)
+        ("rust-pin-project" ,rust-pin-project-1)
+        ("rust-pin-project-lite" ,rust-pin-project-lite-0.2)
+        ("rust-rand" ,rust-rand-0.8)
+        ("rust-slab" ,rust-slab-0.4)
+        ("rust-tokio" ,rust-tokio-1)
+        ("rust-tokio-stream" ,rust-tokio-stream-0.1)
+        ("rust-tokio-util" ,rust-tokio-util-0.6)
+        ("rust-tower-layer" ,rust-tower-layer-0.3)
+        ("rust-tower-service" ,rust-tower-service-0.3)
+        ("rust-tracing" ,rust-tracing-0.1))))
+    (home-page "https://github.com/tower-rs/tower")
+    (synopsis "Library for building clients and servers")
+    (description
+     "Tower is a library of modular and reusable components for building
+robust clients and servers.")
+    (license license:expat)))
+
 (define-public rust-tower-layer-0.3
   (package
     (name "rust-tower-layer")
-    (version "0.3.0")
+    (version "0.3.1")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "tower-layer" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32
-         "1p6i9rn5d98wsx6hi4hbxh2xqh2clwz0blcm6jrqiciq4rpnapd3"))))
+        (base32 "0qiskpgz6zzy3a894vyr9yzq0i7q142rciggc3wv1rizdm3cjfrl"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-development-inputs
@@ -52696,7 +63059,7 @@ composition between @code{Service}s.")
      `(#:cargo-development-inputs
        (("rust-http" ,rust-http-0.1))))
     (home-page "https://github.com/tower-rs/tower")
-    (synopsis "Asynchronous, request / response based, client or server.")
+    (synopsis "Asynchronous, request / response based, client or server")
     (description "This package provides a trait representing an asynchronous,
 request/response based, client or server.")
     (license license:expat)))
@@ -52823,14 +63186,14 @@ automatically instrumenting functions.")
 (define-public rust-tracing-core-0.1
   (package
     (name "rust-tracing-core")
-    (version "0.1.17")
+    (version "0.1.21")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "tracing-core" version))
-       (file-name (string-append name "-" version ".crate"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0pvbgv301vw6dq4krc14yqbyyixb42lcs4s57xw05llkgy9f63gm"))))
+        (base32 "1r262wskhm6wmc5i2bxz44nglyzqaq3x50s0h5q0ffdq6xbdckhz"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
@@ -52902,7 +63265,7 @@ data.  Moved to the tracing-subscriber crate.")
 (define-public rust-tracing-log-0.1
   (package
     (name "rust-tracing-log")
-    (version "0.1.1")
+    (version "0.1.2")
     (source
      (origin
        (method url-fetch)
@@ -52911,7 +63274,7 @@ data.  Moved to the tracing-subscriber crate.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1fdr0az98q9m5kiybvdvsb2m9mg86fdidgb5czzq2d71g1qqq3sy"))))
+         "1qv1cwvdqrgvizkszbff4fvkw0m3nn5yz68r3yaw2hcflivk94m6"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
@@ -52968,8 +63331,55 @@ with tracing (optional, enabled by the env-logger feature).
 with @code{serde}.")
     (license license:expat)))
 
+(define-public rust-tracing-subscriber-0.3
+  (package
+    (name "rust-tracing-subscriber")
+    (version "0.3.5")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "tracing-subscriber" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32 "157mz6q0ljpragrj4hsv5rchyabsbfc7r0sb0g5rik142jlbz0ax"))))
+    (build-system cargo-build-system)
+    (arguments
+      `(#:skip-build? #t
+        #:cargo-inputs
+        (("rust-ansi-term" ,rust-ansi-term-0.12)
+         ("rust-lazy-static" ,rust-lazy-static-1)
+         ("rust-matchers" ,rust-matchers-0.1)
+         ("rust-parking-lot" ,rust-parking-lot-0.11)
+         ("rust-regex" ,rust-regex-1)
+         ("rust-serde" ,rust-serde-1)
+         ("rust-serde-json" ,rust-serde-json-1)
+         ("rust-sharded-slab" ,rust-sharded-slab-0.1)
+         ("rust-smallvec" ,rust-smallvec-1)
+         ("rust-thread-local" ,rust-thread-local-1)
+         ("rust-time" ,rust-time-0.3)
+         ("rust-tracing" ,rust-tracing-0.1)
+         ("rust-tracing-core" ,rust-tracing-core-0.1)
+         ("rust-tracing-log" ,rust-tracing-log-0.1)
+         ("rust-tracing-serde" ,rust-tracing-serde-0.1))))
+    (home-page "https://tokio.rs")
+    (synopsis "Implement and compose tracing subscribers")
+    (description
+     "This package provides utilities for implementing and composing tracing
+subscribers.
+
+Tracing is a framework for instrumenting Rust programs to collect scoped,
+structured, and async-aware diagnostics.  The Subscriber trait represents the
+functionality necessary to collect this trace data.  This crate contains tools
+for composing subscribers out of smaller units of behaviour, and
+batteries-included implementations of common subscriber functionality.
+
+Tracing-subscriber is intended for use by both Subscriber authors and
+application authors using tracing to instrument their applications.")
+    (license license:expat)))
+
 (define-public rust-tracing-subscriber-0.2
   (package
+    (inherit rust-tracing-subscriber-0.3)
     (name "rust-tracing-subscriber")
     (version "0.2.15")
     (source
@@ -53005,22 +63415,7 @@ with @code{serde}.")
         ("rust-tokio" ,rust-tokio-0.2)
         ("rust-tracing" ,rust-tracing-0.1)
         ("rust-tracing-futures" ,rust-tracing-futures-0.2)
-        ("rust-tracing-log" ,rust-tracing-log-0.1))))
-    (home-page "https://tokio.rs")
-    (synopsis "Implement and compose tracing subscribers")
-    (description
-     "This package provides utilities for implementing and composing tracing
-subscribers.
-
-Tracing is a framework for instrumenting Rust programs to collect scoped,
-structured, and async-aware diagnostics.  The Subscriber trait represents the
-functionality necessary to collect this trace data.  This crate contains tools
-for composing subscribers out of smaller units of behaviour, and
-batteries-included implementations of common subscriber functionality.
-
-Tracing-subscriber is intended for use by both Subscriber authors and
-application authors using tracing to instrument their applications.")
-    (license license:expat)))
+        ("rust-tracing-log" ,rust-tracing-log-0.1))))))
 
 (define-public rust-tracing-subscriber-0.1
   (package
@@ -53055,8 +63450,43 @@ application authors using tracing to instrument their applications.")
         ("rust-tracing" ,rust-tracing-0.1)
         ("rust-tracing-log" ,rust-tracing-log-0.1))))))
 
+(define-public rust-tracing-tree-0.2
+  (package
+    (name "rust-tracing-tree")
+    (version "0.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "tracing-tree" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1rrlw6kc61q0g5y4d4i3zjfn9167xqqa5m2d13z62zrcjv4qks9w"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-ansi-term" ,rust-ansi-term-0.12)
+        ("rust-atty" ,rust-atty-0.2)
+        ("rust-tracing-core" ,rust-tracing-core-0.1)
+        ("rust-tracing-log" ,rust-tracing-log-0.1)
+        ("rust-tracing-subscriber" ,rust-tracing-subscriber-0.3))
+       #:cargo-development-inputs
+       (("rust-tracing" ,rust-tracing-0.1)
+        ("rust-glob" ,rust-glob-0.3)
+        ("rust-assert-cmd" ,rust-assert-cmd-1)
+        ("rust-log" ,rust-log-0.4))))
+    (home-page
+     "https://github.com/davidbarsky/tracing-tree")
+    (synopsis
+     "Tracing Layer which prints a tree of spans and events")
+    (description
+     "This package provides a Tracing Layer which prints a tree of spans and
+events.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-tracing-tree-0.1
   (package
+    (inherit rust-tracing-tree-0.2)
     (name "rust-tracing-tree")
     (version "0.1.9")
     (source
@@ -53082,15 +63512,7 @@ application authors using tracing to instrument their applications.")
        #:cargo-development-inputs
         (("rust-assert-cmd" ,rust-assert-cmd-1)
          ("rust-glob" ,rust-glob-0.3)
-         ("rust-log" ,rust-log-0.4))))
-    (home-page
-     "https://github.com/davidbarsky/tracing-tree")
-    (synopsis
-     "Tracing Layer which prints a tree of spans and events")
-    (description
-     "This package provides a Tracing Layer which prints a tree of spans and
-events.")
-    (license (list license:expat license:asl2.0))))
+         ("rust-log" ,rust-log-0.4))))))
 
 (define-public rust-trackable-1
   (package
@@ -53149,7 +63571,7 @@ be used directly.  See @code{rust-trackable} for more information.")
       (origin
         (method url-fetch)
         (uri (crate-uri "traitobject" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0yb0n8822mr59j200fyr2fxgzzgqljyxflx9y8bdy3rlaqngilgg"))))
@@ -53160,22 +63582,29 @@ be used directly.  See @code{rust-trackable} for more information.")
     (license (list license:asl2.0
                    license:expat))))
 
-(define-public rust-trash-1
+(define-public rust-trash-2
   (package
     (name "rust-trash")
-    (version "1.3.0")
+    (version "2.0.2")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "trash" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "04nmmh6pnlsdpgz24bwnjpyqcs66414w1sip9whlx0aln6prdpwh"))))
+        (base32 "1g3wjnr5qvgvvi144mlgf0mh80dybmy9zv2xyswpm55p5p5vdsyk"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-winapi" ,rust-winapi-0.3))))
+       (("rust-chrono" ,rust-chrono-0.4)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-log" ,rust-log-0.4)
+        ("rust-objc" ,rust-objc-0.2)
+        ("rust-scopeguard" ,rust-scopeguard-1)
+        ("rust-url" ,rust-url-2)
+        ("rust-windows" ,rust-windows-0.9)
+        ("rust-windows" ,rust-windows-0.9))))
     (home-page "https://github.com/ArturKovacs/trash-rs")
     (synopsis "Library for moving files and folders to the recycle bin")
     (description
@@ -53183,6 +63612,55 @@ be used directly.  See @code{rust-trackable} for more information.")
 recycle bin.")
     (license license:expat)))
 
+(define-public rust-trash-1
+  (package
+    (inherit rust-trash-2)
+    (name "rust-trash")
+    (version "1.3.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "trash" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "04nmmh6pnlsdpgz24bwnjpyqcs66414w1sip9whlx0aln6prdpwh"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-winapi" ,rust-winapi-0.3))))))
+
+(define-public rust-tree-magic-0.2
+  (package
+    (name "rust-tree-magic")
+    (version "0.2.3")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "tree_magic" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32 "0adndj775gjcvkf7yxdfj3pl39fcdiibswwgff23lm9yrrkr7ndi"))))
+    (build-system cargo-build-system)
+    (arguments
+      `(#:skip-build?
+        #t
+        #:cargo-inputs
+        (("rust-clap" ,rust-clap-2)
+         ("rust-fnv" ,rust-fnv-1)
+         ("rust-lazy-static" ,rust-lazy-static-1)
+         ("rust-nom" ,rust-nom-3)
+         ("rust-num-cpus" ,rust-num-cpus-1)
+         ("rust-parking-lot" ,rust-parking-lot-0.10)
+         ("rust-petgraph" ,rust-petgraph-0.5)
+         ("rust-scoped-threadpool" ,rust-scoped-threadpool-0.1)
+         ("rust-tabwriter" ,rust-tabwriter-1)
+         ("rust-walkdir" ,rust-walkdir-2))))
+    (home-page "https://github.com/aahancoc/tree_magic/")
+    (synopsis "Determines the MIME type")
+    (description "This package determines the MIME type of a file by
+traversing a filetype tree.")
+    (license license:expat)))
+
 (define-public rust-treeline-0.1
   (package
     (name "rust-treeline")
@@ -53203,6 +63681,40 @@ recycle bin.")
      "This package provides a library for visualizing tree structured data.")
     (license license:expat)))
 
+(define-public rust-triple-accel-0.4
+  (package
+    (name "rust-triple-accel")
+    (version "0.4.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "triple_accel" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0qqyhl1pdvmfbx9fgw5jc15j42d0j1i7b6pzn42zsbzvbp4qn112"))))
+    (build-system cargo-build-system)
+    (arguments `(#:skip-build? #t))
+    (home-page "https://github.com/Daniel-Liu-c0deb0t/triple_accel")
+    (synopsis "Edit distance routines accelerated using SIMD")
+    (description
+     "This package provides Rust edit distance routines accelerated using
+SIMD.  It supports fast Hamming, Levenshtein, restricted Damerau-Levenshtein,
+etc. distance calculations and string search.")
+    (license license:expat)))
+
+(define-public rust-triple-accel-0.3
+  (package
+    (inherit rust-triple-accel-0.4)
+    (name "rust-triple-accel")
+    (version "0.3.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "triple_accel" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0v795l496crk3h6yff9zh1cjyrh5s9v23fbgccc4dpz25z70jav2"))))))
+
 (define-public rust-trust-dns-https-0.20
   (package
     (name "rust-trust-dns-https")
@@ -53395,9 +63907,9 @@ extension for the Trust-DNS client to use native-tls for TLS.")
         ("rust-tokio-tls" ,rust-tokio-tls-0.3)
         ("rust-trust-dns-proto" ,rust-trust-dns-proto-0.19))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("openssl" ,openssl)))))
+     (list openssl))))
 
 (define-public rust-trust-dns-native-tls-0.18
   (package
@@ -53495,9 +64007,9 @@ extension for the Trust-DNS client to use tokio-openssl for TLS.")
        (("rust-openssl" ,rust-openssl-0.10)
         ("rust-tokio" ,rust-tokio-0.2))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("openssl" ,openssl)))))
+     (list openssl))))
 
 (define-public rust-trust-dns-openssl-0.18
   (package
@@ -53925,9 +64437,9 @@ the Trust-DNS client to use rustls for TLS.")
        #:cargo-development-inputs
        (("rust-openssl" ,rust-openssl-0.10))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("openssl" ,openssl)))))
+     (list openssl))))
 
 (define-public rust-trust-dns-rustls-0.18
   (package
@@ -53970,9 +64482,9 @@ the Trust-DNS client to use rustls for TLS.")
         (base32
          "0vbh2y7w2s5gcw33fn4hb5f927kgjm6603vw63slg9riikmsiq43"))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (arguments
      `(#:cargo-test-flags
        '("--release" "--" "--skip=tests::test_tls_client_stream_ipv4")
@@ -53996,7 +64508,7 @@ the Trust-DNS client to use rustls for TLS.")
      (origin
        (method url-fetch)
        (uri (crate-uri "try_from" version))
-       (file-name (string-append name "-" version ".crate"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
          "12wdd4ja7047sd3rx70hv2056hyc8gcdllcx3a41g1rnw64kng98"))))
@@ -54018,7 +64530,7 @@ the Trust-DNS client to use rustls for TLS.")
       (origin
         (method url-fetch)
         (uri (crate-uri "try-lock" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "10p36rx6pqi9d0zr876xa8vksx2m66ha45myakl50rn08dxyn176"))))
@@ -54047,22 +64559,20 @@ the Trust-DNS client to use rustls for TLS.")
 (define-public rust-trybuild-1
   (package
     (name "rust-trybuild")
-    (version "1.0.38")
+    (version "1.0.54")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "trybuild" version))
-       (file-name
-        (string-append name "-" version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32
-         "0l5kicbqkk8b9grdg5l2f2w9l47h0s1kjnv6lywvwk292236zc0p"))))
+        (base32 "0gzxbal0zdjnwilsisgbm59c242gvym8dafwsl5s8b5nhvzl6hzh"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-dissimilar" ,rust-dissimilar-1)
         ("rust-glob" ,rust-glob-0.3)
-        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-once-cell" ,rust-once-cell-1)
         ("rust-serde" ,rust-serde-1)
         ("rust-serde-json" ,rust-serde-json-1)
         ("rust-termcolor" ,rust-termcolor-1)
@@ -54073,17 +64583,17 @@ the Trust-DNS client to use rustls for TLS.")
      "Test harness for ui tests of compiler diagnostics.")
     (license (list license:expat license:asl2.0))))
 
-(define-public rust-ttf-parser-0.6
+(define-public rust-ttf-parser-0.12
   (package
     (name "rust-ttf-parser")
-    (version "0.6.2")
+    (version "0.12.3")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "ttf-parser" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1p4z969pwd5adayy3ijq94iiak42yfxz8hk5wnkdsirymgbpqp9y"))))
+        (base32 "1rkj90w4k21y88i69rlwb8pyfvv5lnb7x2b8yvdan21gha5gbqks"))))
     (build-system cargo-build-system)
     (arguments `(#:skip-build? #t))
     (home-page "https://github.com/RazrFalcon/ttf-parser")
@@ -54093,31 +64603,48 @@ the Trust-DNS client to use rustls for TLS.")
 parser.")
     (license (list license:expat license:asl2.0))))
 
-(define-public rust-tui-0.15
+(define-public rust-ttf-parser-0.6
+  (package
+    (inherit rust-ttf-parser-0.12)
+    (name "rust-ttf-parser")
+    (version "0.6.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "ttf-parser" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1p4z969pwd5adayy3ijq94iiak42yfxz8hk5wnkdsirymgbpqp9y"))))
+    (arguments `(#:skip-build? #t))))
+
+(define-public rust-tui-0.16
   (package
     (name "rust-tui")
-    (version "0.15.0")
+    (version "0.16.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "tui" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0w9azg9zj1nnwcwbra9pxrwy47ab0m2bhanbkchydv8lscx8y7c6"))))
+        (base32 "08qcdjmi8sn2xyh38ilr17i9bn89ic2aaqx3rybyv7h44x7cxj1r"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-bitflags" ,rust-bitflags-1)
         ("rust-cassowary" ,rust-cassowary-0.3)
-        ("rust-crossterm" ,rust-crossterm-0.19)
+        ("rust-crossterm" ,rust-crossterm-0.20)
         ("rust-easycurses" ,rust-easycurses-0.12)
         ("rust-pancurses" ,rust-pancurses-0.16)
         ("rust-rustbox" ,rust-rustbox-0.11)
         ("rust-serde" ,rust-serde-1)
         ("rust-termion" ,rust-termion-1)
         ("rust-unicode-segmentation" ,rust-unicode-segmentation-1)
-        ("rust-unicode-width" ,rust-unicode-width-0.1))))
+        ("rust-unicode-width" ,rust-unicode-width-0.1))
+       #:cargo-development-inputs
+       (("rust-argh" ,rust-argh-0.1)
+        ("rust-rand" ,rust-rand-0.8))))
     (home-page "https://github.com/fdehau/tui-rs")
     (synopsis "Library to build rich terminal user interfaces or dashboards")
     (description
@@ -54125,6 +64652,32 @@ parser.")
 or dashboards.")
     (license license:expat)))
 
+(define-public rust-tui-0.15
+  (package
+    (inherit rust-tui-0.16)
+    (name "rust-tui")
+    (version "0.15.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "tui" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0w9azg9zj1nnwcwbra9pxrwy47ab0m2bhanbkchydv8lscx8y7c6"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bitflags" ,rust-bitflags-1)
+        ("rust-cassowary" ,rust-cassowary-0.3)
+        ("rust-crossterm" ,rust-crossterm-0.19)
+        ("rust-easycurses" ,rust-easycurses-0.12)
+        ("rust-pancurses" ,rust-pancurses-0.16)
+        ("rust-rustbox" ,rust-rustbox-0.11)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-termion" ,rust-termion-1)
+        ("rust-unicode-segmentation" ,rust-unicode-segmentation-1)
+        ("rust-unicode-width" ,rust-unicode-width-0.1))))))
+
 (define-public rust-tui-0.14
   (package
     (inherit rust-tui-0.15)
@@ -54243,17 +64796,17 @@ design abstracts away all the internals of the WebSocket protocol but still
 makes them accessible for those who wants full control over the network.")
     (license (list license:expat license:asl2.0))))
 
-(define-public rust-twoway-0.1
+(define-public rust-twoway-0.2
   (package
     (name "rust-twoway")
-    (version "0.1.8")
+    (version "0.2.2")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "twoway" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1lbf64snscr3vz71jbl6i2c8zr2ndsiqbk6316z39fj1a8mipcar"))))
+        (base32 "0iqb54firzb8jinl2674vz8s6c4h30842sa3v9pcs93w1m3gnzy5"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -54269,6 +64822,20 @@ makes them accessible for those who wants full control over the network.")
 strings.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-twoway-0.1
+  (package
+    (inherit rust-twoway-0.2)
+    (name "rust-twoway")
+    (version "0.1.8")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "twoway" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+		"1lbf64snscr3vz71jbl6i2c8zr2ndsiqbk6316z39fj1a8mipcar"))))))
+
 (define-public rust-typeable-0.1
   (package
     (name "rust-typeable")
@@ -54277,7 +64844,7 @@ strings.")
       (origin
         (method url-fetch)
         (uri (crate-uri "typeable" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "11w8dywgnm32hb291izjvh4zjd037ccnkk77ahk63l913zwzc40l"))))
@@ -54287,10 +64854,10 @@ strings.")
     (description "Exposes Typeable, for getting TypeIds at runtime.")
     (license license:expat)))
 
-(define-public rust-typed-arena-1
+(define-public rust-typed-arena-2
   (package
     (name "rust-typed-arena")
-    (version "1.4.1")
+    (version "2.0.1")
     (source
      (origin
        (method url-fetch)
@@ -54299,7 +64866,7 @@ strings.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1i8yczhwcy0nnrxqck1lql3i7hvg95l0vw0dbgfb92zkms96mh66"))))
+         "1bnhphrksp9krxhsfhfimrxvkbah2pa6rf9ygmpw5lalbm6wi186"))))
     (build-system cargo-build-system)
     (arguments `(#:skip-build? #t))
     (home-page "https://github.com/SimonSapin/rust-typed-arena")
@@ -54308,6 +64875,47 @@ strings.")
      "The arena, a fast but limited type of allocator.")
     (license license:expat)))
 
+(define-public rust-typed-arena-1
+  (package
+    (inherit rust-typed-arena-2)
+    (name "rust-typed-arena")
+    (version "1.4.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "typed-arena" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1i8yczhwcy0nnrxqck1lql3i7hvg95l0vw0dbgfb92zkms96mh66"))))
+    (build-system cargo-build-system)
+    (arguments `(#:skip-build? #t))))
+
+(define-public rust-typed-builder-0.5
+  (package
+    (name "rust-typed-builder")
+    (version "0.5.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "typed-builder" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1zi9mmkz2vwg5cn8x9738vli42h21jyspvfi83y2sa6lvlja5kkq"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-proc-macro2" ,rust-proc-macro2-1)
+        ("rust-quote" ,rust-quote-1)
+        ("rust-syn" ,rust-syn-1))))
+    (home-page "https://github.com/idanarye/rust-typed-builder")
+    (synopsis "Compile-time type-checked builder derive")
+    (description
+     "This package provides compile-time type-checked builder derive.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-typed-headers-0.2
   (package
     (name "rust-typed-headers")
@@ -54362,7 +64970,7 @@ deserialization.")
       (origin
         (method url-fetch)
         (uri (crate-uri "typemap" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1xm1gbvz9qisj1l6d36hrl9pw8imr8ngs6qyanjnsad3h0yfcfv5"))))
@@ -54384,7 +64992,7 @@ deserialization.")
       (origin
         (method url-fetch)
         (uri (crate-uri "typenum" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0cvbksljz61ian21fnn0h51kphl0pwpzb932bv4s0rwy1wh8lg1p"))))
@@ -54432,7 +65040,7 @@ Unicode character database.")
       (origin
         (method url-fetch)
         (uri (crate-uri "ucd-trie" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1hh6kyzh5xygwy96wfmsf8v8czlzhps2lgbcyhj1xzy1w1xys04g"))))
@@ -54455,7 +65063,7 @@ Unicode character database.")
       (origin
         (method url-fetch)
         (uri (crate-uri "ucd-util" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "13ng291mkc9b132jjf4laj76f5nqm5qd2447rm8bry3wxbdc5kaw"))))
@@ -54575,6 +65183,30 @@ panic-free alternative to @code{core::fmt}.")
      "This package provides an utility to deal with Unix access mode.")
     (license license:expat)))
 
+(define-public rust-uncased-0.9
+  (package
+    (name "rust-uncased")
+    (version "0.9.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "uncased" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1l3flz044hfdnsddahj08dflqprfydszkm4vkf458l724xryvbjv"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-serde" ,rust-serde-1)
+        ("rust-version-check" ,rust-version-check-0.9))))
+    (home-page "https://github.com/SergioBenitez/uncased")
+    (synopsis "Case-preserving, ASCII case-insensitive, string types in Rust")
+    (description
+     "This package provides case-preserving, ASCII case-insensitive,
+@code{no_std} string types in Rust.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-unchecked-index-0.2
   (package
     (name "rust-unchecked-index")
@@ -54599,7 +65231,7 @@ panic-free alternative to @code{core::fmt}.")
 (define-public rust-ungrammar-1
   (package
     (name "rust-ungrammar")
-    (version "1.13.0")
+    (version "1.14.9")
     (source
       (origin
         (method url-fetch)
@@ -54608,7 +65240,7 @@ panic-free alternative to @code{core::fmt}.")
           (string-append name "-" version ".tar.gz"))
         (sha256
           (base32
-            "17wm4b5r3z5hqail6p609nii37y3j8dr4bxg8x0bkhkc2wa06xkn"))))
+            "1agx2hpp3sirknnx8j17mzcg222024s6vkx6s5v3s3l8zp15kgk6"))))
     (build-system cargo-build-system)
     (arguments `(#:skip-build? #t))
     (home-page
@@ -54858,7 +65490,7 @@ a member of a certain category of Unicode characters.")
 (define-public rust-unicode-normalization-0.1
   (package
     (name "rust-unicode-normalization")
-    (version "0.1.11")
+    (version "0.1.19")
     (source
      (origin
        (method url-fetch)
@@ -54866,11 +65498,11 @@ a member of a certain category of Unicode characters.")
        (file-name
         (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1kxxb5ndb5dzyp1flajjdxnbwyjw6ml9xvy0pz7b8srjn9ky4qdm"))))
+        (base32 "1yabhmg8zlcksda3ajly9hpbzqgbhknxwch8dwkfkaa1569r0ifm"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
-       (("rust-smallvec" ,rust-smallvec-1))))
+       (("rust-tinyvec" ,rust-tinyvec-1))))
     (home-page "https://github.com/unicode-rs/unicode-normalization")
     (synopsis
      "This crate provides functions for normalization of Unicode strings")
@@ -54907,7 +65539,7 @@ boundaries according to Unicode Standard Annex #29 rules.")
 (define-public rust-unicode-width-0.1
   (package
     (name "rust-unicode-width")
-    (version "0.1.8")
+    (version "0.1.9")
     (source
       (origin
         (method url-fetch)
@@ -54915,7 +65547,7 @@ boundaries according to Unicode Standard Annex #29 rules.")
         (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
-          "1qxizyi6xbcqyi4z79p523ywvmgsfcgfqb3zv3c8i6x1jcc5jdwk"))))
+          "0wq9wl69wlp6zwlxp660g9p4hm5gk91chwk14dp1gl9bxba45mry"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
@@ -54938,7 +65570,7 @@ boundaries according to Unicode Standard Annex #29 rules.")
         (method url-fetch)
         (uri (crate-uri "unicode-xid" version))
         (file-name
-          (string-append name "-" version ".crate"))
+          (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0r6mknipyy9vpz8mwmxvkx65ff2ha1n2pxqjj6f46lcn8yrhpzpp"))))
@@ -54958,7 +65590,7 @@ or XID_Continue properties according to Unicode Standard Annex #31.")
       (origin
         (method url-fetch)
         (uri (crate-uri "unicode-xid" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1z57lqh4s18rr4x0j4fw4fmp9hf9346h0kmdgqsqx0fhjr3k0wpw"))))))
@@ -55069,7 +65701,7 @@ whitespace from a string.")
       (origin
         (method url-fetch)
         (uri (crate-uri "unreachable" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0mps2il4xy2mjqc3appas27hhn2xmvixc3bzzhfrjj74gy3i0a1q"))))
@@ -55092,7 +65724,7 @@ whitespace from a string.")
       (origin
         (method url-fetch)
         (uri (crate-uri "unsafe-any" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0zwwphsqkw5qaiqmjwngnfpv9ym85qcsyj7adip9qplzjzbn00zk"))))
@@ -55134,7 +65766,7 @@ whitespace from a string.")
       (origin
         (method url-fetch)
         (uri (crate-uri "untrusted" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0jkbqaj9d3v5a91pp3wp9mffvng1nhycx6sh4qkdd9qyr62ccmm1"))))
@@ -55229,6 +65861,51 @@ type-safe zero-cost dimensional analysis.")
        (sha256
         (base32 "1vg59hnb7hh0p8kjjhgmrsnn3597722lkfdkp481wksq6vk06rg7"))))))
 
+(define-public rust-ureq-2
+  (package
+    (name "rust-ureq")
+    (version "2.4.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "ureq" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1m8nzx683iph4zfpfg2xmkkbwmgf1i403lnbhxqk4gbsj8pzm6ck"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:tests? #f                      ;tests fail
+       #:cargo-inputs
+       (("rust-base64" ,rust-base64-0.13)
+        ("rust-brotli-decompressor" ,rust-brotli-decompressor-2)
+        ("rust-chunked-transfer" ,rust-chunked-transfer-1)
+        ("rust-cookie" ,rust-cookie-0.15)
+        ("rust-cookie-store" ,rust-cookie-store-0.15)
+        ("rust-encoding-rs" ,rust-encoding-rs-0.8)
+        ("rust-flate2" ,rust-flate2-1)
+        ("rust-log" ,rust-log-0.4)
+        ("rust-native-tls" ,rust-native-tls-0.2)
+        ("rust-once-cell" ,rust-once-cell-1)
+        ("rust-rustls" ,rust-rustls-0.20)
+        ("rust-rustls-native-certs" ,rust-rustls-native-certs-0.6)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-json" ,rust-serde-json-1)
+        ("rust-socks" ,rust-socks-0.3)
+        ("rust-url" ,rust-url-2)
+        ("rust-webpki" ,rust-webpki-0.22)
+        ("rust-webpki-roots" ,rust-webpki-roots-0.22))
+       #:cargo-development-inputs
+       (("rust-env-logger" ,rust-env-logger-0.9)
+        ("rust-rustls" ,rust-rustls-0.20)
+        ("rust-rustls-pemfile" ,rust-rustls-pemfile-0.2)
+        ("rust-serde" ,rust-serde-1))))
+    (home-page "https://github.com/algesten/ureq")
+    (synopsis "Simple, safe HTTP client")
+    (description "This package provides minimal request library in Rust.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-url-2
   (package
     (name "rust-url")
@@ -55632,22 +66309,23 @@ first byte.")
 (define-public rust-v-frame-0.2
   (package
     (name "rust-v-frame")
-    (version "0.2.1")
+    (version "0.2.5")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "v_frame" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0ia1j0j1v5zp9bp91imbnbxnv937x3xfpc06nyj96yjfk8zbmxhp"))))
+        (base32 "1ay6p0arqg8cnyzv6iiad77plvjkxnmlmyvgz2qcpadv7y5942n7"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:skip-build? #t
-       #:cargo-inputs
+     `(#:cargo-inputs
        (("rust-cfg-if" ,rust-cfg-if-1)
+        ("rust-hawktracer" ,rust-rust-hawktracer-0.7)
         ("rust-noop-proc-macro" ,rust-noop-proc-macro-0.3)
         ("rust-num-derive" ,rust-num-derive-0.3)
         ("rust-num-traits" ,rust-num-traits-0.2)
+        ("rust-rayon" ,rust-rayon-1)
         ("rust-serde" ,rust-serde-1)
         ("rust-wasm-bindgen" ,rust-wasm-bindgen-0.2))))
     (home-page "https://github.com/xiph/rav1e")
@@ -55681,6 +66359,25 @@ a part of rav1e.")
     (description "This package provides anonymous structured values.")
     (license (list license:asl2.0 license:expat))))
 
+(define-public rust-vcell-0.1
+  (package
+    (name "rust-vcell")
+    (version "0.1.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "vcell" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "00n0ss2z3rh0ihig6d4w7xp72g58f7g1m6s5v4h3nc6jacdrqhvp"))))
+    (build-system cargo-build-system)
+    (arguments `(#:skip-build? #t))
+    (home-page "https://github.com/japaric/vcell")
+    (synopsis "Cell with volatile read / write operations")
+    (description "This package provides a Cell structure with volatile read /
+write operations.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-vcpkg-0.2
   (package
     (name "rust-vcpkg")
@@ -55689,7 +66386,7 @@ a part of rav1e.")
       (origin
         (method url-fetch)
         (uri (crate-uri "vcpkg" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1yvrd2b97j4hv5bfhcj3al0dpkbzkdsr6dclxqz3zqm50rhwl2xh"))))
@@ -55733,7 +66430,7 @@ a part of rav1e.")
       (origin
         (method url-fetch)
         (uri (crate-uri "vec_map" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1481w9g1dw9rxp3l6snkdqihzyrd2f8vispzqmwjwsdyhw8xzggi"))))
@@ -55806,7 +66503,7 @@ designed for reexporting.")
       (origin
         (method url-fetch)
         (uri (crate-uri "version_check" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32 "1vbaqdf802qinsq8q20w8w0qn2pv0rkq5p73ijcblrwxcvjp5adm"))))
     (build-system cargo-build-system)
@@ -55830,12 +66527,12 @@ If that fails, no determination is made, and calls return None.")
       (origin
         (method url-fetch)
         (uri (crate-uri "version_check" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1pf91pvj8n6akh7w6j5ypka6aqz08b3qpzgs0ak2kjf4frkiljwi"))))))
 
-(define-public rust-version-compare-0.0
+(define-public rust-version-compare-0.0.11
   (package
     (name "rust-version-compare")
     (version "0.0.11")
@@ -55855,6 +66552,8 @@ If that fails, no determination is made, and calls return None.")
 numbers, and test them against various comparison operators.")
     (license license:expat)))
 
+(define-public rust-version-compare-0.0 rust-version-compare-0.0.11)
+
 (define-public rust-version-sync-0.8
   (package
     (name "rust-version-sync")
@@ -55951,7 +66650,7 @@ version numbers.")
       (origin
         (method url-fetch)
         (uri (crate-uri "void" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0zc8f0ksxvmhvgx4fdg0zyn6vdnbxd2xv9hfx4nhzg6kbs4f80ka"))))
@@ -55962,6 +66661,27 @@ version numbers.")
      "The uninhabited void type for use in statically impossible cases.")
     (license license:expat)))
 
+(define-public rust-volatile-register-0.2
+  (package
+    (name "rust-volatile-register")
+    (version "0.2.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "volatile-register" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1dh8x7z1ywjzyziz3jyjj39imp37s05c46whf2pkyablkngz3s4y"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs (("rust-vcell" ,rust-vcell-0.1))))
+    (home-page "https://github.com/japaric/volatile-register")
+    (synopsis "Volatile access to memory mapped hardware registers")
+    (description "This package provides volatile access to memory mapped
+hardware registers.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-vswhom-0.1
   (package
     (name "rust-vswhom")
@@ -56331,7 +67051,7 @@ result.")
        (method url-fetch)
        (uri (crate-uri "wasi" version))
        (file-name
-        (string-append name "-" version ".crate"))
+        (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
          "1ir3pd4phdfml0cbziw9bqp7mnk0vfp9biy8bh25lln6raml4m7x"))))
@@ -56345,7 +67065,7 @@ in Rust.")
 (define-public rust-wasm-bindgen-0.2
   (package
     (name "rust-wasm-bindgen")
-    (version "0.2.69")
+    (version "0.2.78")
     (source
      (origin
        (method url-fetch)
@@ -56353,8 +67073,7 @@ in Rust.")
        (file-name
         (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32
-         "0vkkpz290k6pphmrgkayzdvk1dinxrp6c5zvr9l0zjlm2dsn9lrw"))))
+        (base32 "1kkzwj24z9ad7lq8c5ynlnpxpx8hwra6w6brl871a6dj6vi76bv3"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
@@ -56380,7 +67099,7 @@ in Rust.")
 (define-public rust-wasm-bindgen-backend-0.2
   (package
     (name "rust-wasm-bindgen-backend")
-    (version "0.2.69")
+    (version "0.2.78")
     (source
      (origin
        (method url-fetch)
@@ -56388,8 +67107,7 @@ in Rust.")
        (file-name
         (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32
-         "0qidxjmcn50v2i5hjz7al69sa3mbq0lbi276amdnw47ln6dgh50i"))))
+        (base32 "0yw3ma0ahd1cz3afxpqcgwy9rwwgmz2g8pn8nas7c95sky7vy5x3"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
@@ -56435,7 +67153,7 @@ wasm-bindgen.")
 (define-public rust-wasm-bindgen-futures-0.4
   (package
     (name "rust-wasm-bindgen-futures")
-    (version "0.4.19")
+    (version "0.4.28")
     (source
      (origin
        (method url-fetch)
@@ -56443,18 +67161,19 @@ wasm-bindgen.")
        (file-name
         (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32
-         "0d8fg2k4a4xyv28japgld7qzy2zyrnvh582pjkp88id8hmh7bs8z"))))
+        (base32 "0fax7x0iysa64iqmzq0lri8llw8v0f8acz1iq6b4qahzrcipb3cf"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:cargo-inputs
-       (("rust-cfg-if" ,rust-cfg-if-1)
-        ("rust-js-sys" ,rust-js-sys-0.3)
-        ("rust-wasm-bindgen" ,rust-wasm-bindgen-0.2)
-        ("rust-web-sys" ,rust-web-sys-0.3))
-       #:cargo-development-inputs
-       (("rust-futures-channel-preview" ,rust-futures-channel-preview-0.3)
-        ("rust-wasm-bindgen-test" ,rust-wasm-bindgen-test-0.3))))
+      `(#:cargo-inputs
+        (("rust-cfg-if" ,rust-cfg-if-1)
+         ("rust-futures-core" ,rust-futures-core-0.3)
+         ("rust-js-sys" ,rust-js-sys-0.3)
+         ("rust-wasm-bindgen" ,rust-wasm-bindgen-0.2)
+         ("rust-web-sys" ,rust-web-sys-0.3))
+        #:cargo-development-inputs
+        (("rust-futures-channel-preview" ,rust-futures-channel-preview-0.3)
+         ("rust-futures-lite" ,rust-futures-lite-1)
+         ("rust-wasm-bindgen-test" ,rust-wasm-bindgen-test-0.3))))
     (home-page "https://rustwasm.github.io/wasm-bindgen/")
     (synopsis
      "Bridging the gap between Rust Futures and JavaScript Promises")
@@ -56491,7 +67210,7 @@ wasm-bindgen.")
 (define-public rust-wasm-bindgen-macro-0.2
   (package
     (name "rust-wasm-bindgen-macro")
-    (version "0.2.69")
+    (version "0.2.78")
     (source
      (origin
        (method url-fetch)
@@ -56499,8 +67218,7 @@ wasm-bindgen.")
        (file-name
         (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32
-         "113hyzn0dpqasznzcwgmqw03i5yhjkqna7paim50h7xdbscwhsks"))))
+        (base32 "1ydcppds5qbj77c7kdinkg9qidcf7ahvwqvnb3v8nllmqkklcqfm"))))
     (build-system cargo-build-system)
     (arguments
      `(#:tests? #f      ; 'Async blocks are unstable'
@@ -56522,7 +67240,7 @@ dependency.")
 (define-public rust-wasm-bindgen-macro-support-0.2
   (package
     (name "rust-wasm-bindgen-macro-support")
-    (version "0.2.69")
+    (version "0.2.78")
     (source
      (origin
        (method url-fetch)
@@ -56530,8 +67248,7 @@ dependency.")
        (file-name
         (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32
-         "0jbmgj8zxflza1cl15k3r70fqsak4bkkfbn6qxbhbn4ry9r8r95m"))))
+        (base32 "1ay5qmbqh8hbsgf2dqkg7ia13srx3c1d6p2qvjmzhdaqlbpf00vq"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
@@ -56550,15 +67267,14 @@ attribute that is not in the shared backend crate.")
 (define-public rust-wasm-bindgen-shared-0.2
   (package
     (name "rust-wasm-bindgen-shared")
-    (version "0.2.69")
+    (version "0.2.78")
     (source
       (origin
         (method url-fetch)
         (uri (crate-uri "wasm-bindgen-shared" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
-         (base32
-          "0n3ir6gq27np22l6m96y342a6fphk1pkbzbfqx6g364kgzfi2y3y"))))
+         (base32 "1k27dc57h0brx5ish4dwmzibyif7m9lfagvph1a7s0ygi4kj6dq2"))))
     (build-system cargo-build-system)
     (home-page "https://rustwasm.github.io/wasm-bindgen/")
     (synopsis "Shared support between wasm-bindgen and wasm-bindgen cli")
@@ -56570,7 +67286,7 @@ attribute that is not in the shared backend crate.")
 (define-public rust-wasm-bindgen-test-0.3
   (package
     (name "rust-wasm-bindgen-test")
-    (version "0.3.19")
+    (version "0.3.28")
     (source
      (origin
        (method url-fetch)
@@ -56578,8 +67294,7 @@ attribute that is not in the shared backend crate.")
        (file-name
         (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32
-         "09aas82c1i249bmzjwj9szk727nm4jzaidnwnq4jlycv3w6glm83"))))
+        (base32 "0zkb3swn81blwg0kdl2y49paaxgavc122q2kygq1xxpxf5wsmwcn"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
@@ -56671,7 +67386,7 @@ attribute that is not in the shared backend crate.")
 (define-public rust-wasm-bindgen-test-macro-0.3
   (package
     (name "rust-wasm-bindgen-test-macro")
-    (version "0.3.19")
+    (version "0.3.28")
     (source
      (origin
        (method url-fetch)
@@ -56679,8 +67394,7 @@ attribute that is not in the shared backend crate.")
        (file-name
         (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32
-         "12s3h3g1f81afv0rk8idgw2mylgh5q6a30wy5yxc4940p537pq17"))))
+        (base32 "124ng2j16jf8lfdgq1lg83c7zka42fzizdaddnl9dsyz52bgf1k0"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
@@ -56701,7 +67415,7 @@ attribute that is not in the shared backend crate.")
       (origin
         (method url-fetch)
         (uri (crate-uri "wasm-bindgen-test-macro" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "19bvmw8mqlwh6wkbzgs3cnlkywrv8q2kkqggz6y0p158930xm287"))))
@@ -56794,10 +67508,91 @@ WebAssembly binary files.")
 modifications.")
     (license license:asl2.0)))
 
+(define-public rust-wl-clipboard-rs-0.4
+  (package
+    (name "rust-wl-clipboard-rs")
+    (version "0.4.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "wl-clipboard-rs" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (patches (search-patches "rust-wl-clipboard-rs-newer-wl.patch"))
+        (sha256
+          (base32 "1252cm67pkrr6ik5ys2cdyfr2zzw6ds7v351i1cmyi94yiv01l13"))))
+    (build-system cargo-build-system)
+    (arguments
+      `(#:skip-build? #t
+        #:cargo-inputs
+        (("rust-derive-new" ,rust-derive-new-0.5)
+         ("rust-derive-more" ,rust-derive-more-0.99)
+         ("rust-exitfailure" ,rust-exitfailure-0.5)
+         ("rust-failure" ,rust-failure-0.1)
+         ("rust-libc" ,rust-libc-0.2)
+         ("rust-log" ,rust-log-0.4)
+         ("rust-mime-guess" ,rust-mime-guess-2)
+         ("rust-nix" ,rust-nix-0.18)
+         ("rust-os-pipe" ,rust-os-pipe-0.9)
+         ("rust-stderrlog" ,rust-stderrlog-0.4)
+         ("rust-structopt" ,rust-structopt-0.3)
+         ("rust-tempfile" ,rust-tempfile-3)
+         ("rust-tree-magic" ,rust-tree-magic-0.2)
+         ("rust-wayland-client" ,rust-wayland-client-0.28)
+         ("rust-wayland-commons" ,rust-wayland-commons-0.28)
+         ("rust-wayland-protocols" ,rust-wayland-protocols-0.28))))
+    (home-page "https://github.com/YaLTeR/wl-clipboard-rs")
+    (synopsis "Access to the Wayland clipboard")
+    (description "This package provides access to the Wayland clipboard
+for terminal and other window-less applications.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-web-view-0.7
+  (package
+    (name "rust-web-view")
+    (version "0.7.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "web-view" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1smgmc00nk2wn8kpagp0mpsd0d9f5mvljidf2x7plbi3bymac7gf"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:tests? #f                      ;missing files
+       #:cargo-inputs
+       (("rust-boxfnonce" ,rust-boxfnonce-0.1)
+        ("rust-tinyfiledialogs" ,rust-tinyfiledialogs-3)
+        ("rust-urlencoding" ,rust-urlencoding-1)
+        ("rust-webview-sys" ,rust-webview-sys-0.6))
+       #:cargo-development-inputs
+       (("rust-actix-rt" ,rust-actix-rt-0.2)
+        ("rust-actix-web" ,rust-actix-web-1)
+        ("rust-futures" ,rust-futures-0.1)
+        ("rust-grep" ,rust-grep-0.2)
+        ("rust-mime-guess" ,rust-mime-guess-2)
+        ("rust-rust-embed" ,rust-rust-embed-5)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-derive" ,rust-serde-derive-1)
+        ("rust-serde-json" ,rust-serde-json-1)
+        ("rust-walkdir" ,rust-walkdir-2))))
+    (native-inputs
+     (list pkg-config))
+    (inputs
+     (list gtk+
+           webkitgtk-with-libsoup2))
+    (home-page "https://github.com/Boscop/web-view")
+    (synopsis "Rust bindings for webview")
+    (description
+     "This library provides a Rust binding to the original implementation of
+webview, a tiny cross-platform library to render web-based GUIs as desktop
+applications.")
+    (license license:expat)))
+
 (define-public rust-web-sys-0.3
   (package
     (name "rust-web-sys")
-    (version "0.3.37")
+    (version "0.3.55")
     (source
      (origin
        (method url-fetch)
@@ -56805,8 +67600,7 @@ modifications.")
        (file-name
         (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32
-         "1jy4q5jawzg3dxzhfwa0g3fsz7h4j0ra6y232ikc6mlcimj52vrd"))))
+        (base32 "1yz9dym9y9f9s1f99q5j5kl2dfc5kn2jpjfdnnkfmnar3igi1srq"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
@@ -56848,21 +67642,20 @@ modifications.")
 available on a platform.")
     (license (list license:expat license:asl2.0))))
 
-(define-public rust-webpki-0.21
+(define-public rust-webpki-0.22
   (package
     (name "rust-webpki")
-    (version "0.21.4")
+    (version "0.22.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "webpki" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1sm4i8c5bw3bdhi7mjk0wpvwx55hvsmyn0k2lpa4cb161038rqxq"))))
+        (base32 "1gd1gxip5kgdwmrvhj5gjxij2mgg2mavq1ych4q1h272ja0xg5gh"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:tests? #f ;; tests fail to build "missing file tests/ed25519/ee.der"
-       #:cargo-inputs
+     `(#:cargo-inputs
        (("rust-ring" ,rust-ring-0.16)
         ("rust-untrusted" ,rust-untrusted-0.7))
        #:cargo-development-inputs
@@ -56873,6 +67666,26 @@ available on a platform.")
 Verification.")
     (license license:isc)))
 
+(define-public rust-webpki-0.21
+  (package
+    (inherit rust-webpki-0.22)
+    (name "rust-webpki")
+    (version "0.21.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "webpki" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1sm4i8c5bw3bdhi7mjk0wpvwx55hvsmyn0k2lpa4cb161038rqxq"))))
+    (arguments
+     `(#:tests? #f ;; tests fail to build "missing file tests/ed25519/ee.der"
+       #:cargo-inputs
+       (("rust-ring" ,rust-ring-0.16)
+        ("rust-untrusted" ,rust-untrusted-0.7))
+       #:cargo-development-inputs
+       (("rust-base64" ,rust-base64-0.9))))))
+
 (define-public rust-webpki-0.19
   (package
     (inherit rust-webpki-0.21)
@@ -56915,28 +67728,44 @@ Verification.")
        #:cargo-development-inputs
        (("rust-base64" ,rust-base64-0.9))))))
 
-(define-public rust-webpki-roots-0.21
+(define-public rust-webpki-roots-0.22
   (package
     (name "rust-webpki-roots")
-    (version "0.21.0")
+    (version "0.22.2")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "webpki-roots" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0xi3xjjx6brqh6hwa5jsrxvflsrhjcxa2x26k62q3bcb1dz5n0c2"))))
+        (base32 "0jbll0ys9jakrvv3l1i216bbgj7jbxr7ad2dihw28xcm7s8fnb2m"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:skip-build? #t
-       #:cargo-inputs
-       (("rust-webpki" ,rust-webpki-0.21))))
-    (home-page "https://github.com/ctz/webpki-roots")
+     `(#:cargo-inputs
+       (("rust-webpki" ,rust-webpki-0.22))))
+    (home-page "https://github.com/rustls/webpki-roots")
     (synopsis "Mozilla's CA root certificates for use with webpki")
     (description "This package provides Mozilla's CA root certificates for use
 with webpki.")
     (license license:mpl2.0)))
 
+(define-public rust-webpki-roots-0.21
+  (package
+    (inherit rust-webpki-roots-0.22)
+    (name "rust-webpki-roots")
+    (version "0.21.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "webpki-roots" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0h49lkr7hrxpyr0xg1nph4m3v1l6rhg8ax9n8msvfwz48hsibgma"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-webpki" ,rust-webpki-0.21))))))
+
 (define-public rust-webpki-roots-0.20
   (package
     (inherit rust-webpki-roots-0.21)
@@ -57051,6 +67880,41 @@ with webpki.")
        (("rust-untrusted" ,rust-untrusted-0.6)
         ("rust-webpki" ,rust-webpki-0.18))))))
 
+(define-public rust-webview-sys-0.6
+  (package
+    (name "rust-webview-sys")
+    (version "0.6.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "webview-sys" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1jb6h261lzp4b9rp7iwssbc7vs5d3q4wp08a4wvgwps2q4jz0080"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-cc" ,rust-cc-1)
+        ("rust-gdk-sys" ,rust-gdk-sys-0.10)
+        ("rust-gio-sys" ,rust-gio-sys-0.10)
+        ("rust-glib-sys" ,rust-glib-sys-0.10)
+        ("rust-gobject-sys" ,rust-gobject-sys-0.10)
+        ("rust-gtk-sys" ,rust-gtk-sys-0.10)
+        ("rust-javascriptcore-rs-sys" ,rust-javascriptcore-rs-sys-0.2)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-pkg-config" ,rust-pkg-config-0.3)
+        ("rust-webkit2gtk-sys" ,rust-webkit2gtk-sys-0.12))))
+    (native-inputs
+     (list pkg-config))
+    (inputs
+     (list gtk+ webkitgtk-with-libsoup2))
+    (home-page "https://github.com/Boscop/web-view")
+    (synopsis "Rust native ffi bindings for webview")
+    (description "This library provides a Rust binding to the original
+implementation of webview, a tiny cross-platform library to render web-based
+GUIs as desktop applications.")
+    (license license:expat)))
+
 (define-public rust-weedle-0.10
   (package
     (name "rust-weedle")
@@ -57144,20 +68008,22 @@ using @code{bindgen}.")
 (define-public rust-which-4
   (package
     (name "rust-which")
-    (version "4.1.0")
+    (version "4.2.2")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "which" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1zixp9631knhnvd8c3si4wn01fldq063s86jxlmwxwmx5kj52mdm"))))
+        (base32 "1nbsy9f5sn206jzby28if4m4s0m21n97mhk8qd703g3rya77l67a"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-either" ,rust-either-1)
-        ("rust-libc" ,rust-libc-0.2))))
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-regex" ,rust-regex-1))))
     (home-page "https://github.com/harryfei/which-rs.git")
     (synopsis "Rust equivalent of Unix command @command{which}")
     (description
@@ -57273,6 +68139,25 @@ hardware of various targets.  Both in terms of explicit SIMD usage and also in
 terms of allowing LLVM's auto-vectorizer to do its job.")
     (license license:zlib)))
 
+(define-public rust-wide-0.6
+  (package
+    (inherit rust-wide-0.4)
+    (name "rust-wide")
+    (version "0.6.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "wide" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "16yqf8xsvns21clg3rk8nljq4qnsfqg240smbjqa0z520k3fgfs6"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-bytemuck" ,rust-bytemuck-1)
+        ("rust-safe-arch" ,rust-safe-arch-0.5))))
+    (license (list license:zlib license:asl2.0 license:expat))))
+
 (define-public rust-widestring-0.4
   (package
     (name "rust-widestring")
@@ -57281,7 +68166,7 @@ terms of allowing LLVM's auto-vectorizer to do its job.")
       (origin
         (method url-fetch)
         (uri (crate-uri "widestring" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "13565qy4jhpg4x0xw8mwxzzsh0p8c93p5208lh6kpwp0q01y6qx7"))))
@@ -57328,7 +68213,7 @@ command-line, uniformly on all platforms")
       (origin
         (method url-fetch)
         (uri (crate-uri "winapi" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "06gl025x418lchw1wxj64ycr7gha83m44cjr5sarhynd9xkrm0sw"))))
@@ -57339,8 +68224,8 @@ command-line, uniformly on all platforms")
        (("winapi-i686-pc-windows-gnu" ,rust-winapi-i686-pc-windows-gnu-0.4)
         ("winapi-x86-64-pc-windows-gnu" ,rust-winapi-x86-64-pc-windows-gnu-0.4))))
     (inputs
-     `(("rust-winapi-i686-pc-windows-gnu" ,rust-winapi-i686-pc-windows-gnu-0.4)
-       ("rust-winapi-x86-64-pc-windows-gnu" ,rust-winapi-x86-64-pc-windows-gnu-0.4)))
+     (list rust-winapi-i686-pc-windows-gnu-0.4
+           rust-winapi-x86-64-pc-windows-gnu-0.4))
     (home-page "https://github.com/retep998/winapi-rs")
     (synopsis "Raw FFI bindings for all of Windows API")
     (description
@@ -57357,7 +68242,7 @@ command-line, uniformly on all platforms")
       (origin
         (method url-fetch)
         (uri (crate-uri "winapi" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0yh816lh6lf56dpsgxy189c2ai1z3j8mw9si6izqb6wsjkbcjz8n"))))
@@ -57371,7 +68256,7 @@ command-line, uniformly on all platforms")
       (origin
         (method url-fetch)
         (uri (crate-uri "winapi-build" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1g4rqsgjky0a7530qajn2bbfcrl2v0zb39idgdws9b1l7gp5wc9d"))))
@@ -57415,7 +68300,7 @@ i686-pc-windows-gnu target.  Please don't use this crate directly, depend on
       (origin
         (method url-fetch)
         (uri (crate-uri "winapi-util" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0y71bp7f6d536czj40dhqk0d55wfbbwqfp2ymqf1an5ibgl6rv3h"))))
@@ -57430,6 +68315,27 @@ winapi.")
     (license (list license:unlicense
                    license:expat))))
 
+(define-public rust-winapi-wsapoll-0.1
+  (package
+    (name "rust-winapi-wsapoll")
+    (version "0.1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "winapi-wsapoll" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0vnzlcm6yrlx0xdx4g7zr41n84aj73h0p8fwh0m60mbiyl873ha4"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-winapi" ,rust-winapi-0.3))))
+    (home-page "https://github.com/psychon/winapi-wsapoll")
+    (synopsis "Safe wrapper around WSAPoll")
+    (description "This package provides safe wrapper around WSAPoll.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-winapi-x86-64-pc-windows-gnu-0.4
   (package
     (name "rust-winapi-x86-64-pc-windows-gnu")
@@ -57463,7 +68369,7 @@ x86_64-pc-windows-gnu target.  Please don't use this crate directly, depend on
       (origin
         (method url-fetch)
         (uri (crate-uri "wincolor" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "017x33ljndwc76cp5z9llgndn0nh7v8jcjaykbizkawmwy9n3pyp"))))
@@ -57653,6 +68559,28 @@ trust these primitives.")
         ("rust-serde" ,rust-serde-1)
         ("rust-winapi" ,rust-winapi-0.3))))))
 
+(define-public rust-winres-0.1
+  (package
+    (name "rust-winres")
+    (version "0.1.12")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "winres" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0v2gvqnd8iwwvb6fs69nv0mmk1z96430527n0qlfbsarxxhv53dn"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-toml" ,rust-toml-0.5))))
+    (home-page "https://github.com/mxre/winres")
+    (synopsis "Create and set windows icons and metadata for executables")
+    (description "A simple library to facilitate adding metainformation and
+icons to windows executables and dynamic libraries.")
+    (license license:expat)))
+
 (define-public rust-winutil-0.1
   (package
     (name "rust-winutil")
@@ -57661,7 +68589,7 @@ trust these primitives.")
       (origin
         (method url-fetch)
         (uri (crate-uri "winutil" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0vkyl3fbbf05n5ph5yz8sfaccrk9x3qsr25560w6w68ldf5i7bvx"))))
@@ -57732,7 +68660,7 @@ serialization.")
       (origin
         (method url-fetch)
         (uri (crate-uri "ws2_32-sys" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0ppscg5qfqaw0gzwv2a4nhn5bn01ff9iwn6ysqnzm4n8s3myz76m"))))
@@ -57771,6 +68699,31 @@ serialization.")
 non-cryptographic hashing algorithm and random number generator.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-wyz-0.4
+  (package
+    (name "rust-wyz")
+    (version "0.4.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "wyz" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "126irvwn63kxgqjk5ap1pw3p3grw2sskyg32h0v4bqawsrx057hj"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-once-cell" ,rust-once-cell-1)
+        ("rust-tap" ,rust-tap-1)
+        ("rust-typemap" ,rust-typemap-0.3))))
+    (home-page "https://myrrlyn.net/crates/wyz")
+    (synopsis "Collection of utility functions")
+    (description
+     "This package provides a collection of utility functions.")
+    (license license:expat)))
+
 (define-public rust-wyz-0.2
   (package
     (name "rust-wyz")
@@ -57791,6 +68744,66 @@ non-cryptographic hashing algorithm and random number generator.")
      "This package provides a collection of utility functions.")
     (license license:expat)))
 
+(define-public rust-x25519-dalek-1
+  (package
+    (name "rust-x25519-dalek")
+    (version "1.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "x25519-dalek" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0xz0m1pczss9r25d1r52420dl2picdypbcn5ycmlwssp9awvd4i3"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-curve25519-dalek" ,rust-curve25519-dalek-3)
+        ("rust-rand-core" ,rust-rand-core-0.5)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-zeroize" ,rust-zeroize-1))))
+    (home-page "https://dalek.rs/")
+    (synopsis "X25519 elliptic curve Diffie-Hellman key exchange")
+    (description
+     "This crate provides a pure-Rust implementation of x25519 elliptic curve
+Diffie-Hellman key exchange, with curve operations provided by
+@code{curve25519-dalek}.")
+    (license license:bsd-3)))
+
+(define-public rust-x509-parser-0.12
+  (package
+    (name "rust-x509-parser")
+    (version "0.12.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "x509-parser" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1vanwazknxwd1kmlp443bpph9qyas021ayqk6iljxdscm0v0ijgz"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-base64" ,rust-base64-0.13)
+        ("rust-chrono" ,rust-chrono-0.4)
+        ("rust-data-encoding" ,rust-data-encoding-2)
+        ("rust-der-parser" ,rust-der-parser-6)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-nom" ,rust-nom-7)
+        ("rust-oid-registry" ,rust-oid-registry-0.2)
+        ("rust-ring" ,rust-ring-0.16)
+        ("rust-rusticata-macros" ,rust-rusticata-macros-4)
+        ("rust-thiserror" ,rust-thiserror-1))))
+    (home-page "https://github.com/rusticata/x509-parser")
+    (synopsis "X.509 parser written in pure Rust")
+    (description "This crate provides a parser for the X.509 v3 format (RFC
+5280 certificates).")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-x86-0.33
   (package
     (name "rust-x86")
@@ -57801,7 +68814,12 @@ non-cryptographic hashing algorithm and random number generator.")
        (uri (crate-uri "x86" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0sas98yzn549f5lxswqra2rjdfjxh24f3ndw5dfsnwnm9rlsr1i7"))))
+        (base32 "0sas98yzn549f5lxswqra2rjdfjxh24f3ndw5dfsnwnm9rlsr1i7"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           (substitute* "Cargo.toml"
+             (("8\\.0") "8"))))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -57830,7 +68848,7 @@ languages.")
       (origin
         (method url-fetch)
         (uri (crate-uri "xattr" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0k556fb6f5jc907975j9c8iynl2fqz3rf0w6fiig83i4yi0kfk14"))))
@@ -57871,12 +68889,9 @@ extended attributes.")
         ("rust-log" ,rust-log-0.4)
         ("rust-x11" ,rust-x11-2))))
     (inputs
-     `(("libx11" ,libx11)
-       ("libxcb" ,libxcb)
-       ("xcb-proto" ,xcb-proto)))
+     (list libx11 libxcb xcb-proto))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python" ,python)))
+     (list pkg-config python))
     (home-page "https://github.com/rtbo/rust-xcb")
     (synopsis "Rust bindings and wrappers for XCB")
     (description
@@ -57908,15 +68923,16 @@ extended attributes.")
 (define-public rust-xdg-2
   (package
     (name "rust-xdg")
-    (version "2.2.0")
+    (version "2.4.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "xdg" version))
-       (file-name (string-append name "-" version ".crate"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0mws8a0fr3cqk5nh7aq9lmkmhzghvasqy4mhw6nnza06l4d6i2fh"))))
+        (base32 "00sqvl6v0sjdrrmyk2671sshnjlbjdwgb1lw0f3jchbhijazw8rs"))))
     (build-system cargo-build-system)
+    (arguments `(#:cargo-inputs (("rust-dirs" ,rust-dirs-3))))
     (home-page "https://github.com/whitequark/rust-xdg")
     (synopsis "Store and retrieve files according to XDG specification")
     (description
@@ -58127,6 +69143,26 @@ parser.")
      "This package provide a utilities for quick shell scripting in Rust.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-xxhash-rust-0.8
+  (package
+    (name "rust-xxhash-rust")
+    (version "0.8.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "xxhash-rust" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32 "1v9dk6shls1rsmidf2dxdi3460bn7ingqgvn5mf7prgnxmdy2xg5"))))
+    (build-system cargo-build-system)
+    (arguments
+      `(#:skip-build? #t))
+    (home-page "https://github.com/DoumanAsh/xxhash-rust")
+    (synopsis "Implementation of xxHash in Rust")
+    (description "This package provides an implementation of the xxHash
+algorithm in Rust.")
+    (license license:boost1.0)))
+
 (define-public rust-xz2-0.1
   (package
     (name "rust-xz2")
@@ -58151,8 +69187,7 @@ parser.")
         ("rust-rand" ,rust-rand-0.5)
         ("rust-tokio-core" ,rust-tokio-core-0.1))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("xz" ,xz)))
+     (list pkg-config xz))
     (home-page "https://github.com/alexcrichton/xz2-rs")
     (synopsis "Rust bindings to liblzma")
     (description "This package provides Rust bindings to liblzma providing
@@ -58242,10 +69277,59 @@ library.")
     (description "This package provides an implementation of zbase32.")
     (license license:lgpl3+)))
 
+(define-public rust-zerocopy-0.3
+  (package
+    (name "rust-zerocopy")
+    (version "0.3.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "zerocopy" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "00nbb6yal8f74bkpn7msjcnhisimw8s5777a63206rfnn3br45zh"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-byteorder" ,rust-byteorder-1)
+        ("rust-zerocopy-derive" ,rust-zerocopy-derive-0.2))))
+    (home-page "https://fuchsia.googlesource.com/fuchsia/+/HEAD/src/lib/zerocopy")
+    (synopsis "Utilities for zero-copy parsing and serialization")
+    (description
+     "This package provides utilities for zero-copy parsing and
+serialization.")
+    (license license:bsd-3)))
+
+(define-public rust-zerocopy-derive-0.2
+  (package
+    (name "rust-zerocopy-derive")
+    (version "0.2.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "zerocopy-derive" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1594sf9wwgpbavl1hb1avyz6n7km9apm8afc03x9y8h3spk3k76w"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-proc-macro2" ,rust-proc-macro2-1)
+        ("rust-syn" ,rust-syn-1)
+        ("rust-synstructure" ,rust-synstructure-0.12))))
+    (home-page "https://fuchsia.googlesource.com/fuchsia/+/HEAD/src/lib/zerocopy/zerocopy-derive")
+    (synopsis "Custom derive for traits from the zerocopy Rust crate")
+    (description
+     "This package provides custom derive for traits from the zerocopy Rust
+crate.")
+    (license license:bsd-3)))
+
 (define-public rust-zeroize-1
   (package
     (name "rust-zeroize")
-    (version "1.1.0")
+    (version "1.4.3")
     (source
      (origin
        (method url-fetch)
@@ -58253,11 +69337,10 @@ library.")
        (file-name
         (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1f5547q8l8bpi16yy6lix2gl9rf1qz45lj06bq7wjk525gnw5fiw"))))
+        (base32 "068nvl3n5hk6lfn5y24grf2c7anzzqfzjjccscq3md7rqp79v3fn"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:tests? #f                      ;2 doc tests fail
-       #:cargo-inputs
+     `(#:cargo-inputs
        (("rust-zeroize-derive" ,rust-zeroize-derive-1))))
     (home-page "https://github.com/iqlusioninc/crates/")
     (synopsis "Securely clear secrets from memory")
@@ -58608,28 +69691,82 @@ formatters with per-field documentation generated for each structure.
      "This package provides Rust bindings to OpenBSD's pledge(2) interface.")
     (license license:expat)))
 
-(define-public rust-ptree-0.3
+(define-public rust-ptr-meta-derive-0.1
+  (package
+    (name "rust-ptr-meta-derive")
+    (version "0.1.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "ptr_meta_derive" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1b69cav9wn67cixshizii0q5mlbl0lihx706vcrzm259zkdlbf0n"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-proc-macro2" ,rust-proc-macro2-1)
+        ("rust-quote" ,rust-quote-1)
+        ("rust-syn" ,rust-syn-1))))
+    (home-page "https://github.com/djkoloski/ptr_meta")
+    (synopsis "Macros for the ptr_meta fat pointer metadata API")
+    (description "This package provides macros for the ptr_meta API.")
+    (license license:expat)))
+
+(define-public rust-ptr-meta-0.1
+  (package
+    (name "rust-ptr-meta")
+    (version "0.1.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "ptr_meta" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1wd4wy0wxrcays4f1gy8gwcmxg7mskmivcv40p0hidh6xbvwqf07"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-ptr-meta-derive" ,rust-ptr-meta-derive-0.1))))
+    (home-page "https://github.com/djkoloski/ptr_meta")
+    (synopsis "Manipulate metadata of fat pointers")
+    (description "This package allows manipulating the metadata of fat
+pointers:
+
+@itemize
+@item Naming the metadata’s type (as an associated type)
+@item Extracting metadata from a pointer
+@item Reconstructing a pointer from a data pointer and metadata
+@item Representing vtables, the metadata for trait objects, as a type with
+  some limited API.
+@end itemize
+")
+    (license license:expat)))
+
+(define-public rust-ptree-0.4
   (package
     (name "rust-ptree")
-    (version "0.3.1")
+    (version "0.4.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "ptree" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1bp6r88hcw0ygmdfdf1gwsj6krcah2qhwp3kw284wvni080l1zcm"))))
+        (base32 "0w72k0svlj8ihbf7m7ivay7rpv38xz9ad5a06isyqsiiddwq1pm0"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-ansi-term" ,rust-ansi-term-0.12)
         ("rust-atty" ,rust-atty-0.2)
-        ("rust-config" ,rust-config-0.10)
-        ("rust-directories" ,rust-directories-2)
-        ("rust-petgraph" ,rust-petgraph-0.5)
+        ("rust-config" ,rust-config-0.11)
+        ("rust-directories" ,rust-directories-4)
+        ("rust-petgraph" ,rust-petgraph-0.6)
         ("rust-serde" ,rust-serde-1)
-        ("rust-serde-value" ,rust-serde-value-0.6)
+        ("rust-serde-value" ,rust-serde-value-0.7)
         ("rust-tint" ,rust-tint-1))))
     (home-page "https://gitlab.com/Noughmad/ptree")
     (synopsis "Pretty-print tree-like structures")
@@ -58638,31 +69775,256 @@ formatters with per-field documentation generated for each structure.
 configuration file and/or environment variables.")
     (license (list license:expat license:asl2.0))))
 
-(define-public rust-xmltree-0.8
+(define-public rust-ptree-0.3
+  (package
+    (inherit rust-ptree-0.4)
+    (name "rust-ptree")
+    (version "0.3.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "ptree" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1bp6r88hcw0ygmdfdf1gwsj6krcah2qhwp3kw284wvni080l1zcm"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-ansi-term" ,rust-ansi-term-0.12)
+        ("rust-atty" ,rust-atty-0.2)
+        ("rust-config" ,rust-config-0.10)
+        ("rust-directories" ,rust-directories-2)
+        ("rust-petgraph" ,rust-petgraph-0.5)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-value" ,rust-serde-value-0.6)
+        ("rust-tint" ,rust-tint-1))))))
+
+(define-public rust-windows-0.9
+  (package
+    (name "rust-windows")
+    (version "0.9.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "windows" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0zy9jmhkhmsng7l9qiznxpdh5ns303s875p5kf6a5q9ym0rka7rn"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-const-sha1" ,rust-const-sha1-0.2)
+        ("rust-windows-gen" ,rust-windows-gen-0.9)
+        ("rust-windows-macros" ,rust-windows-macros-0.9))))
+    (home-page "https://github.com/microsoft/windows-rs")
+    (synopsis "Rust for Windows")
+    (description "Rust for Windows")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-windows-x86-64-msvc-0.28
+  (package
+    (name "rust-windows-x86-64-msvc")
+    (version "0.28.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "windows_x86_64_msvc" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "17z8q25pd3dp6b84qm9nlayd3ym78sbryxlqmgcxvz9vpmy8qarz"))))
+    (build-system cargo-build-system)
+    (arguments `(#:skip-build? #t))
+    (home-page "https://github.com/microsoft/windows-rs")
+    (synopsis "Code gen support for the windows crate")
+    (description "This package provides code gen support for the windows
+crate.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-windows-x86-64-gnu-0.28
+  (package
+    (name "rust-windows-x86-64-gnu")
+    (version "0.28.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "windows_x86_64_gnu" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0m79bhdr54g4h4wh2q8wkjlkypb5wvl7xzhc2csiaqb5yl4z8cdw"))))
+    (build-system cargo-build-system)
+    (arguments `(#:skip-build? #t))
+    (home-page "https://github.com/microsoft/windows-rs")
+    (synopsis "Code gen support for the windows crate")
+    (description "This package provides code gen support for the windows
+crate.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-windows-i686-msvc-0.28
+  (package
+    (name "rust-windows-i686-msvc")
+    (version "0.28.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "windows_i686_msvc" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0r0z8s1wcdwd20azsdfilf2a6bz68xkavl990wy64hyc8f51bmai"))))
+    (build-system cargo-build-system)
+    (arguments `(#:skip-build? #t))
+    (home-page "https://github.com/microsoft/windows-rs")
+    (synopsis "Code gen support for the windows crate")
+    (description "This package provides code gen support for the windows
+crate.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-windows-i686-gnu-0.28
+  (package
+    (name "rust-windows-i686-gnu")
+    (version "0.28.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "windows_i686_gnu" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "12hx7qpsjg9p7jggfcplqa3mf1mzr7k7s5ybzqwg1zmg4fn2aizm"))))
+    (build-system cargo-build-system)
+    (arguments `(#:skip-build? #t))
+    (home-page "https://github.com/microsoft/windows-rs")
+    (synopsis "Code gen support for the windows crate")
+    (description "This package provides code gen support for the windows
+crate.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-windows-aarch64-msvc-0.28
+  (package
+    (name "rust-windows-aarch64-msvc")
+    (version "0.28.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "windows_aarch64_msvc" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1hpk0n2z0jzzvwlvs98b75sa4q920953nqfc119rv19nwm0mlsaj"))))
+    (build-system cargo-build-system)
+    (arguments `(#:skip-build? #t))
+    (home-page "https://github.com/microsoft/windows-rs")
+    (synopsis "Code gen support for the windows crate")
+    (description "This package provides code gen support for the windows
+crate.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-windows-sys-0.28
+  (package
+    (name "rust-windows-sys")
+    (version "0.28.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "windows-sys" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1xkghf343nll9i1yvha1a4spf53mnb5knzmnqj9adgsw5mh3kjl2"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-windows-aarch64-msvc" ,rust-windows-aarch64-msvc-0.28)
+        ("rust-windows-i686-gnu" ,rust-windows-i686-gnu-0.28)
+        ("rust-windows-i686-msvc" ,rust-windows-i686-msvc-0.28)
+        ("rust-windows-x86-64-gnu" ,rust-windows-x86-64-gnu-0.28)
+        ("rust-windows-x86-64-msvc" ,rust-windows-x86-64-msvc-0.28))))
+    (home-page "https://github.com/microsoft/windows-rs")
+    (synopsis "Rust for Windows")
+    (description "The windows crate lets you call any Windows API past,
+present, and future using code generated on the fly directly from the metadata
+describing the API and right into your Rust package where you can call them as
+if they were just another Rust module.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-windows-gen-0.9
+  (package
+    (name "rust-windows-gen")
+    (version "0.9.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "windows_gen" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0lh492px26rrna0harikyy4p7nk520pw2lv0dczp4n2xa6y4s5al"))))
+    (build-system cargo-build-system)
+    (arguments `(#:skip-build? #t #:cargo-inputs (("rust-syn" ,rust-syn-1))))
+    (home-page "https://github.com/microsoft/windows-rs")
+    (synopsis "Code gen support for the windows crate")
+    (description "Code gen support for the windows crate")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-windows-macros-0.9
+  (package
+    (name "rust-windows-macros")
+    (version "0.9.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "windows_macros" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0xivsg3lf023hs83xiab2k40fmrl11nbihcdrdkc8pc4ab398xqg"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-syn" ,rust-syn-1) ("rust-windows-gen" ,rust-windows-gen-0.9))))
+    (home-page "https://github.com/microsoft/windows-rs")
+    (synopsis "Macros for the windows crate")
+    (description "Macros for the windows crate")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-xmltree-0.10
   (package
     (name "rust-xmltree")
-    (version "0.8.0")
+    (version "0.10.3")
     (source
-      (origin
-        (method url-fetch)
-        (uri (crate-uri "xmltree" version))
-        (file-name
-          (string-append name "-" version ".tar.gz"))
-        (sha256
-          (base32
-            "0w0y0jz7lhxg05ca6ngfj0lj8sbrjh4vaqv13q7qaqkhs7lsx3pz"))))
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "xmltree" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1jqzwhr1a5cknflsshhhjlllmd1xi04qdkjsls2bnmv5mxgagn6p"))))
     (build-system cargo-build-system)
     (arguments
-      `(#:cargo-inputs
-        (("rust-indexmap" ,rust-indexmap-1)
-         ("rust-xml-rs" ,rust-xml-rs-0.7))))
-    (home-page #f)
-    (synopsis
-      "Parse an XML file into a simple tree-like structure")
-    (description
-      "Parse an XML file into a simple tree-like structure")
+     `(#:cargo-inputs
+       (("rust-indexmap" ,rust-indexmap-1)
+        ("rust-xml-rs" ,rust-xml-rs-0.8))))
+    (home-page "https://github.com/eminence/xmltree-rs")
+    (synopsis "Parse an XML file into a simple tree-like structure")
+    (description "This package provides a small library for parsing an XML
+file into an in-memory tree structure.")
     (license license:expat)))
 
+(define-public rust-xmltree-0.8
+  (package
+    (inherit rust-xmltree-0.10)
+    (name "rust-xmltree")
+    (version "0.8.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "xmltree" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0w0y0jz7lhxg05ca6ngfj0lj8sbrjh4vaqv13q7qaqkhs7lsx3pz"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-indexmap" ,rust-indexmap-1)
+        ("rust-xml-rs" ,rust-xml-rs-0.7))))))
+
 (define-public rust-svd-parser-0.9
   (package
     (name "rust-svd-parser")
@@ -58689,11 +70051,34 @@ configuration file and/or environment variables.")
         #:cargo-development-inputs
         (("rust-serde-json" ,rust-serde-json-1))))
     (home-page "https://github.com/rust-embedded/svd")
-    (synopsis "A CMSIS-SVD file parser")
+    (synopsis "CMSIS-SVD file parser")
     (description
       "This package provides a CMSIS-SVD file parser")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-svgtypes-0.5
+  (package
+    (name "rust-svgtypes")
+    (version "0.5.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "svgtypes" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32 "1zv0yb4nfyz78y8k7fmyjqgdh9vf7xc44c9pzry8640szym6ylww"))))
+    (build-system cargo-build-system)
+    (arguments
+      `(#:skip-build?
+        #t
+        #:cargo-inputs
+        (("rust-float-cmp" ,rust-float-cmp-0.5)
+         ("rust-siphasher" ,rust-siphasher-0.2))))
+    (home-page "https://github.com/RazrFalcon/svgtypes")
+    (synopsis "SVG types parser")
+    (description "This package provides SVG types parser.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-sxd-document-0.3
   (package
     (name "rust-sxd-document")
@@ -58754,8 +70139,7 @@ configuration file and/or environment variables.")
          "0gsgcs1nn38r40973l6zr1v4d85f4s9qyl32n5f20jphf5z9ba1w"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:rust ,rust-1.52                ;for rust-sized-chunks
-       #:cargo-inputs
+     `(#:cargo-inputs
        (("rust-arbitrary" ,rust-arbitrary-0.4)
         ("rust-bitmaps" ,rust-bitmaps-2)
         ("rust-proptest" ,rust-proptest-0.9)
@@ -58972,7 +70356,7 @@ variant of this library is available separately as @code{im}.")
     (home-page
       "https://github.com/storyfeet/clap_conf")
     (synopsis
-      "A library to unify commandline arguments with config files and environment variables. And make it easier for users to tell your program how to behave across the three main input sources")
+      "Library to unify commandline arguments with config files and environment variables. And make it easier for users to tell your program how to behave across the three main input sources")
     (description
       "This package provides a library to unify commandline arguments with config files and environment variables.  And make it easier for users to tell your program how to behave across the three main input sources")
     (license license:expat)))
@@ -59011,3 +70395,48 @@ variant of this library is available separately as @code{im}.")
     (description
       "Generate Rust register maps (`struct`s) from SVD files")
     (license (list license:expat license:asl2.0))))
+
+(define-public rust-xi-unicode-0.3
+  (package
+    (name "rust-xi-unicode")
+    (version "0.3.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "xi-unicode" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "12mvjgrhr7557cib69wm4q5s4srba27pg2df9l1zihrxgnbh0wx6"))))
+    (build-system cargo-build-system)
+    (arguments `(#:skip-build? #t))
+    (home-page "https://github.com/google/xi-editor")
+    (synopsis
+     "Unicode utilities for text editing, including a line breaking iterator")
+    (description
+     "This package provides Unicode utilities useful for text editing,
+including a line breaking iterator.")
+    (license license:asl2.0)))
+
+(define-public rust-shell2batch-0.4
+  (package
+    (name "rust-shell2batch")
+    (version "0.4.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "shell2batch" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32 "0r9zfhxmqnrnyk7g590333szfpsjijs2wfwy7ish240w6pp54nhq"))
+    ;; https://github.com/sagiegurari/shell2batch/issues/17
+    (patches (search-patches "rust-shell2batch-lint-fix.patch"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs (("rust-regex" ,rust-regex-1))))
+    (home-page "https://github.com/sagiegurari/shell2batch")
+    (synopsis "Basic shell scripts to windows batch scripts conversion")
+    (description "While it is not really possible to take every shell script
+and automatically convert it to a windows batch file, this library provides a
+way to convert simple shell commands to windows batch commands.")
+    (license license:asl2.0)))
diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm
index 180594509b..78cbf871ac 100644
--- a/gnu/packages/cross-base.scm
+++ b/gnu/packages/cross-base.scm
@@ -4,7 +4,7 @@
 ;;; Copyright © 2016, 2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2016 Manolis Fragkiskos Ragkousis <manolis837@gmail.com>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2019, 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2019, 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2019 Carl Dong <contact@carldong.me>
 ;;; Copyright © 2020 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;;
@@ -153,12 +153,6 @@ base compiler and using LIBC (which may be either a libc package or #f.)"
                                "--disable-decimal-float" ;would need libc
                                "--disable-libcilkrts"
 
-                              ,@(if (string-prefix? "powerpc64le-" target)
-                                   ;; On POWER9 (little endian) glibc needs
-                                   ;; the 128-bit long double type.
-                                   '("--with-long-double-128")
-                                   '())
-
                                ;; When target is any OS other than 'none' these
                                ;; libraries will fail if there is no libc
                                ;; present. See
@@ -243,6 +237,9 @@ target that libc."
         (append
          (origin-patches (package-source xgcc))
          (append (cond
+                  ((version>=? (package-version xgcc) "10.0")
+                   (search-patches "gcc-10-cross-environment-variables.patch"
+                                   "gcc-cross-gxx-include-dir.patch"))
                   ((version>=? (package-version xgcc) "8.0")
                    (search-patches "gcc-8-cross-environment-variables.patch"))
                   ((version>=? (package-version xgcc) "6.0")
@@ -341,15 +338,18 @@ target that libc."
            `(#:implicit-cross-inputs? #f
              ,@(package-arguments linux-headers))
          ((#:phases phases)
-          `(alist-replace
-            'build
-            (lambda _
-              (setenv "ARCH" ,(system->linux-architecture target))
-              (format #t "`ARCH' set to `~a' (cross compiling)~%" (getenv "ARCH"))
-
-              (invoke "make" ,(system->defconfig target))
-              (invoke "make" "mrproper" "headers_check"))
-            ,phases))))
+          `(modify-phases ,phases
+             (replace 'build
+               (lambda _
+                 (setenv "ARCH" ,(system->linux-architecture target))
+                 (format #t "`ARCH' set to `~a' (cross compiling)~%"
+                         (getenv "ARCH"))
+
+                 (invoke "make" ,(system->defconfig target))
+                 (invoke "make" "mrproper"
+                         ,@(if (version>=? (package-version linux-headers) "5.3")
+                               '("headers")
+                               '("headers_check")))))))))
       (native-inputs `(("cross-gcc" ,xgcc)
                        ("cross-binutils" ,xbinutils)
                        ,@(package-native-inputs linux-headers)))))
@@ -505,7 +505,7 @@ and the cross tool chain."
                ,@(package-arguments libc))
            ((#:configure-flags flags)
             `(cons ,(string-append "--host=" target)
-                   ,(if (hurd-triplet? target)
+                   ,(if (target-hurd? target)
                         `(cons "--disable-werror" ,flags)
                         flags)))
            ((#:phases phases)
@@ -519,7 +519,7 @@ and the cross tool chain."
                      (setenv "CROSS_LIBRARY_PATH"
                              (string-append kernel "/lib")) ; for Hurd's libihash
                      #t)))
-               ,@(if (hurd-triplet? target)
+               ,@(if (target-hurd? target)
                      '((add-after 'install 'augment-libc.so
                          (lambda* (#:key outputs #:allow-other-keys)
                            (let* ((out (assoc-ref outputs "out")))
@@ -527,35 +527,16 @@ and the cross tool chain."
                                (("/[^ ]+/lib/libc.so.0.3")
                                 (string-append out "/lib/libc.so.0.3"
                                                " libmachuser.so libhurduser.so"))))
-                           #t))
-                       ;; TODO: move to glibc in the next rebuild cycle
-                       (add-after 'unpack 'patch-libc/hurd
-                         (lambda* (#:key inputs #:allow-other-keys)
-                           (for-each
-                            (lambda (name)
-                              (let ((patch (assoc-ref inputs name)))
-                                (invoke "patch" "-p1" "--force" "-i" patch)))
-                            '("hurd-mach-print.patch"
-                              "hurd-gettyent.patch")))))
+                           #t)))
                      '())))))
 
         ;; Shadow the native "kernel-headers" because glibc's recipe expects the
         ;; "kernel-headers" input to point to the right thing.
         (propagated-inputs `(("kernel-headers" ,xheaders)))
 
-        ;; FIXME: 'static-bash' should really be an input, not a native input, but
-        ;; to do that will require building an intermediate cross libc.
-        (inputs (if (hurd-triplet? target)
-                    `(;; TODO: move to glibc in the next rebuild cycle
-                      ("hurd-mach-print.patch"
-                       ,(search-patch "glibc-hurd-mach-print.patch"))
-                      ("hurd-gettyent.patch"
-                       ,(search-patch "glibc-hurd-gettyent.patch")))
-                    '()))
-
         (native-inputs `(("cross-gcc" ,xgcc)
                          ("cross-binutils" ,xbinutils)
-                         ,@(if (hurd-triplet? target)
+                         ,@(if (target-hurd? target)
                                `(("cross-mig"
                                   ,@(assoc-ref (package-native-inputs xheaders)
                                                "cross-mig")))
diff --git a/gnu/packages/crypto.scm b/gnu/packages/crypto.scm
index af1412c44e..f07be01c97 100644
--- a/gnu/packages/crypto.scm
+++ b/gnu/packages/crypto.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014 David Thompson <davet@gnu.org>
 ;;; Copyright © 2015, 2017, 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
-;;; Copyright © 2016, 2017, 2018, 2019 Leo Famulari <leo@famulari.name>
+;;; Copyright © 2016, 2017, 2018, 2019, 2021 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2016 Lukas Gradl <lgradl@openmailbox>
 ;;; Copyright © 2016–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2016, 2017 Nikita <nikita@n0.is>
@@ -72,6 +72,7 @@
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-xyz)
+  #:use-module (gnu packages python-check)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages search)
   #:use-module (gnu packages serialization)
@@ -85,12 +86,14 @@
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
+  #:use-module (guix gexp)
   #:use-module (guix build-system cargo)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system copy)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system go)
   #:use-module (guix build-system perl)
+  #:use-module (guix build-system python)
   #:use-module (guix utils)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-26))
@@ -172,7 +175,7 @@ communication, encryption, decryption, signatures, etc.")
 (define-public libmd
   (package
     (name "libmd")
-    (version "1.0.3")
+    (version "1.0.4")
     (source (origin
             (method url-fetch)
             (uri
@@ -183,8 +186,11 @@ communication, encryption, decryption, signatures, etc.")
                              version ".tar.xz")))
             (sha256
              (base32
-              "0jmga8y94h857ilra3qjaiax3wd5pd6mx1h120zhl9fcjmzhj0js"))))
+              "03skgv013v0y9hxh6j143xdwynb5cmbmbdylvvgfsjz38889477m"))))
     (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags
+       (list "--disable-static")))
     (synopsis "Message Digest functions from BSD systems")
     (description
      "The currently provided message digest algorithms are:
@@ -225,9 +231,9 @@ communication, encryption, decryption, signatures, etc.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libbsd" ,libbsd)))
+     (list libbsd))
     (synopsis "Create and verify cryptographic signatures")
     (description "The signify utility creates and verifies cryptographic
 signatures using the elliptic curve Ed25519.  This is a Linux port of the
@@ -286,7 +292,7 @@ OpenBSD tool of the same name.")
     (arguments
      '(#:import-path "github.com/jedisct1/go-minisign"))
     (propagated-inputs
-     `(("go-golang-org-x-crypto" ,go-golang-org-x-crypto)))
+     (list go-golang-org-x-crypto))
     (home-page "https://github.com/jedisct1/go-minisign")
     (synopsis "Minisign verification library for Golang")
     (description "A Golang library to verify Minisign signatures.")
@@ -321,10 +327,7 @@ OpenBSD tool of the same name.")
        ("googletest-source" ,(package-source googletest))
        ("perl" ,perl)))
     (inputs
-     `(("attr" ,attr)
-       ("fuse" ,fuse)
-       ("openssl" ,openssl)
-       ("tinyxml2" ,tinyxml2)))
+     (list attr fuse openssl tinyxml2))
     (arguments
      `(#:configure-flags (list "-DUSE_INTERNAL_TINYXML=OFF")
        #:phases
@@ -362,43 +365,56 @@ the wrong hands.")
 (define-public keyutils
   (package
     (name "keyutils")
-    (version "1.6.1")
+    (version "1.6.3")
     (source
      (origin
-       (method url-fetch)
-       (uri
-        (string-append "https://people.redhat.com/dhowells/keyutils/keyutils-"
-                       version ".tar.bz2"))
+       (method git-fetch)
+       (uri (git-reference
+             (url (string-append "https://git.kernel.org/pub/scm/linux/kernel/"
+                                 "git/dhowells/keyutils.git"))
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
        (sha256
-        (base32 "1kk4pmyflgplkgxn2bzpc069ph9c9jdd9ikcsyd5pnaimqi5gcf8"))
+        (base32 "1095g1p5038m91wf2dxnagngpvww7ilcj8fhyviid3srvxr675i7"))
        (modules '((guix build utils)))
        ;; Create relative symbolic links instead of absolute ones to /lib/*.
        (snippet '(begin
                    (substitute* "Makefile" (("\\$\\(LNS\\) \\$\\(LIBDIR\\)/")
-                                            "$(LNS) "))
-                   #t))))
+                                            "$(LNS) "))))))
     (build-system gnu-build-system)
     (arguments
-     `(#:phases (modify-phases %standard-phases
-                  (delete 'configure))          ; no configure script
-       #:make-flags (list ,(string-append "CC=" (cc-for-target))
-                          "RPATH=-Wl,-rpath,$(DESTDIR)$(LIBDIR)"
-                          (string-append "DESTDIR="
-                                         (assoc-ref %outputs "out"))
-                          "INCLUDEDIR=/include"
-                          "LIBDIR=/lib"
-                          "MANDIR=/share/man"
-                          "SHAREDIR=/share/keyutils")
-       #:test-target "test"))
+     (list #:make-flags
+           #~(list (string-append "CC=" #$(cc-for-target))
+                   ;; "NO_ARLIB=1" would cleanly disable static libraries.
+                   "RPATH=-Wl,-rpath,$(DESTDIR)$(LIBDIR)"
+                   (string-append "DESTDIR=" #$output)
+                   "INCLUDEDIR=/include"
+                   "LIBDIR=/lib"
+                   "MANDIR=/share/man"
+                   "SHAREDIR=/share/keyutils")
+           #:phases
+           #~(modify-phases %standard-phases
+               (delete 'configure)      ; no configure script
+               (add-after 'install 'install:static
+                 (lambda _
+                   (with-directory-excursion #$output
+                     (for-each (lambda (file)
+                                 (let ((target (string-append #$output:static
+                                                              "/" file)))
+                                   (format #t "~a -> ~a\n" file target)
+                                   (mkdir-p (dirname target))
+                                   (rename-file file target)))
+                               (find-files "lib" "\\.a$"))))))
+           #:test-target "test"))
     (inputs
-     `(("mit-krb5" ,mit-krb5)))
+     (list mit-krb5))
     (home-page "https://people.redhat.com/dhowells/keyutils/")
     (synopsis "Linux key management utilities")
     (description
      "Keyutils is a set of utilities for managing the key retention facility in
 the Linux kernel, which can be used by file systems, block devices, and more to
 gain and retain the authorization and encryption keys required to perform
-secure operations. ")
+secure operations.")
     (license (list license:lgpl2.1+             ; the files keyutils.*
                    license:gpl2+))))            ; the rest
 
@@ -434,9 +450,9 @@ secure operations. ")
                (install-file "ssss.1.html" docdir)
                #t))))))
     (inputs
-     `(("gmp" ,gmp)))
+     (list gmp))
     (native-inputs
-     `(("xmltoman" ,xmltoman)))
+     (list xmltoman))
     (home-page "http://point-at-infinity.org/ssss/")
     (synopsis "Shamir's secret sharing scheme implementation")
     (description "@command{ssss-split} and @command{ssss-combine} are utilities that split
@@ -457,7 +473,7 @@ total number of shares generated.")
                (base32
                 "136nfnpaz29hngwwnzrmc858gpnvnb977gf4ldbpapw1h1k3r8mk"))))
     (build-system gnu-build-system)
-    (native-inputs `(("sudo" ,sudo)))   ;presence needed for 'check' phase
+    (native-inputs (list sudo))   ;presence needed for 'check' phase
     (inputs
      `(("zsh" ,zsh)
        ("gnupg" ,gnupg)
@@ -550,7 +566,7 @@ user's graphical desktop.")
               (install-file "FORMAT" doc)
               #t))))))
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (home-page "https://www.tarsnap.com/scrypt.html")
     (synopsis "Memory-hard encryption tool based on scrypt")
     (description "This package provides a simple password-based encryption
@@ -608,8 +624,7 @@ attacks than alternative functions such as @code{PBKDF2} or @code{bcrypt}.")
          "0yxqqcqvj51fn7b7j5xqhz65v74arzgainn66c6k7inijbmr1xws"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-nowarnings" ,perl-test-nowarnings)))
+     (list perl-module-build perl-test-nowarnings))
     (home-page "https://metacpan.org/release/Math-Random-ISAAC-XS")
     (synopsis "C implementation of the ISAAC PRNG algorithm")
     (description "ISAAC (Indirection, Shift, Accumulate, Add, and Count) is a
@@ -635,9 +650,9 @@ This package implements the same interface as @code{Math::Random::ISAAC}.")
          "0z1b3xbb3xz71h25fg6jgsccra7migq7s0vawx2rfzi0pwpz0wr7"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-nowarnings" ,perl-test-nowarnings)))
+     (list perl-test-nowarnings))
     (propagated-inputs
-     `(("perl-math-random-isaac-xs" ,perl-math-random-isaac-xs)))
+     (list perl-math-random-isaac-xs))
     (home-page "https://metacpan.org/release/Math-Random-ISAAC")
     (synopsis "Perl interface to the ISAAC PRNG algorithm")
     (description "ISAAC (Indirection, Shift, Accumulate, Add, and Count) is a
@@ -663,16 +678,15 @@ generator.")
         (base32 "1rpdds3sy5l1fhngnkrsgwsmwd54wpicx3i9ds69blcskwkcwkpc"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build-tiny" ,perl-module-build-tiny)
-       ("perl-test-fatal" ,perl-test-fatal)))
+     (list perl-module-build-tiny perl-test-fatal))
     (propagated-inputs
-     `(("perl-capture-tiny" ,perl-capture-tiny)
-       ("perl-module-find" ,perl-module-find)
-       ("perl-module-runtime" ,perl-module-runtime)
-       ("perl-moo" ,perl-moo)
-       ("perl-namespace-clean" ,perl-namespace-clean)
-       ("perl-sub-exporter" ,perl-sub-exporter)
-       ("perl-type-tiny" ,perl-type-tiny)))
+     (list perl-capture-tiny
+           perl-module-find
+           perl-module-runtime
+           perl-moo
+           perl-namespace-clean
+           perl-sub-exporter
+           perl-type-tiny))
     (home-page "https://metacpan.org/release/Crypt-Random-Source")
     (synopsis "Get weak or strong random data from pluggable sources")
     (description "This module provides implementations for a number of
@@ -693,15 +707,11 @@ byte-oriented sources of random data.")
          "0dgbf4ncll4kmgkyb9fsaxn0vf2smc9dmwqzgh3259zc2zla995z"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-list-moreutils" ,perl-list-moreutils)
-       ("perl-test-leaktrace" ,perl-test-leaktrace)
-       ("perl-test-sharedfork" ,perl-test-sharedfork)
-       ("perl-test-warn" ,perl-test-warn)))
+     (list perl-list-moreutils perl-test-leaktrace perl-test-sharedfork
+           perl-test-warn))
     (inputs
-     `(("perl-crypt-random-source" ,perl-crypt-random-source)
-       ("perl-math-random-isaac" ,perl-math-random-isaac)
-       ("perl-math-random-isaac-xs" ,perl-math-random-isaac-xs)
-       ("perl-moo" ,perl-moo)))
+     (list perl-crypt-random-source perl-math-random-isaac
+           perl-math-random-isaac-xs perl-moo))
     (home-page "https://metacpan.org/release/Math-Random-Secure")
     (synopsis "Cryptographically secure replacement for rand()")
     (description "This module is intended to provide a
@@ -790,7 +800,7 @@ data on your platform, so the seed itself will be as random as possible.
                      "Cflags: -I${includedir}\n"))
                    #t))))))))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://cryptopp.com/")
     (synopsis "C++ class library of cryptographic schemes")
     (description "Crypto++ is a C++ class library of cryptographic schemes.")
@@ -835,10 +845,45 @@ as the latest standard, SHA-3.  It is an improved version of the SHA-3 finalist
 BLAKE.")
     (license license:public-domain)))
 
+(define-public b2sum
+  ;; Upstream doesn't seem to use a versioned release workflow, so build from
+  ;; a recent commit.
+  (let ((commit "54f4faa4c16ea34bcd59d16e8da46a64b259fc07")
+        (revision "0"))
+    (package
+      (name "b2sum")
+      (version (git-version "20190724" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                       (url "https://github.com/BLAKE2/BLAKE2")
+                       (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32 "04z631v0vzl52g73v390ask5fnzi5wg83lcjkjhpmmymaz0jn152"))))
+      (build-system gnu-build-system)
+      (arguments
+       `(#:make-flags (list (string-append "CC=" ,(cc-for-target))
+                            (string-append "PREFIX=" (assoc-ref %outputs "out")))
+         #:tests? #f ; No test suite
+         #:phases
+         (modify-phases %standard-phases
+           (add-before 'build 'change-directory
+                       (lambda _
+                         (chdir "b2sum")))
+           (delete 'configure)))) ; No ./configure script
+      (home-page "https://www.blake2.net/")
+      (synopsis "BLAKE2 checksum tool")
+      (description "BLAKE2 is a cryptographic hash function faster than MD5,
+SHA-1, SHA-2, and SHA-3, yet is at least as secure as SHA-3.")
+      ;; You may also choose to redistribute this program as Apache 2.0 or the
+      ;; OpenSSL license. See 'b2sum/b2sum.c' in the source distribution.
+      (license license:cc0))))
+
 (define-public rhash
   (package
     (name "rhash")
-    (version "1.3.9")
+    (version "1.4.2")
     (source
      (origin
        (method url-fetch)
@@ -847,40 +892,40 @@ BLAKE.")
        (file-name (string-append "rhash-" version ".tar.gz"))
        (sha256
         (base32
-         "1xn9fqa6rlnhsbgami45g82dlw9i1skg2sri3ydiinwak5ph1ca2"))))
+         "0qpc1fq7gdxxl11zya1gqhl9628jjk3x60q9sna43w0yz7sh03b0"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:configure-flags
-       (list (string-append "--prefix=" (assoc-ref %outputs "out"))
-             ,@(let ((target (%current-target-system)))
-                 (if target
-                     `((string-append "--target=" ,target)
-                       (string-append "--cc="
-                                      (assoc-ref %build-inputs "cross-gcc")
-                                      "/bin/" ,target "-gcc"))
-                     '())))
-       #:make-flags
-       ;; The binaries in /bin need some help finding librhash.so.0.
-       (list (string-append "LDFLAGS=-Wl,-rpath=" %output "/lib"))
-       #:test-target "test"             ; ‘make check’ just checks the sources
-       #:phases
-       (modify-phases %standard-phases
-         (replace 'configure
-           ;; ./configure is not GNU autotools' and doesn't gracefully handle
-           ;; unrecognized options, so we must call it manually.
-           (lambda* (#:key configure-flags #:allow-other-keys)
-             (apply invoke "./configure" configure-flags)))
-         (add-before 'check 'patch-/bin/sh
-           (lambda _
-             (substitute* "Makefile"
-               (("/bin/sh") (which "sh")))
-             #t))
-         (add-after 'install 'install-library-extras
-           (lambda* (#:key make-flags #:allow-other-keys)
-             (apply invoke
-                    "make" "-C" "librhash"
-                    "install-lib-headers" "install-so-link"
-                    make-flags))))))
+     (list #:configure-flags
+           #~(list (string-append "--prefix=" #$output)
+                   #$@(let ((target (%current-target-system)))
+                        (if target
+                            #~((string-append "--target=" #$target)
+                               (string-append "--cc="
+                                              (assoc-ref %build-inputs "cross-gcc")
+                                              "/bin/" #$target "-gcc"))
+                            #~())))
+           #:make-flags
+           ;; The binaries in /bin need some help finding librhash.so.0.
+           #~(list (string-append "LDFLAGS=-Wl,-rpath=" #$output "/lib"))
+           #:test-target "test"         ; ‘make check’ just checks the sources
+           #:phases
+           #~(modify-phases %standard-phases
+              (delete 'configure)
+              (add-before 'build 'configure
+                ;; ./configure is not GNU autotools' and doesn't gracefully handle
+                ;; unrecognized options, so we must call it manually.
+                (lambda* (#:key configure-flags #:allow-other-keys)
+                  (apply invoke "./configure" configure-flags)))
+              (add-before 'check 'patch-/bin/sh
+                (lambda _
+                  (substitute* "Makefile"
+                    (("/bin/sh") (which "sh")))))
+              (add-after 'install 'install-library-extras
+                (lambda* (#:key make-flags #:allow-other-keys)
+                  (apply invoke
+                         "make" "-C" "librhash"
+                         "install-lib-headers" "install-so-link"
+                         make-flags))))))
     (home-page "https://sourceforge.net/projects/rhash/")
     (synopsis "Utility for computing hash sums")
     (description "RHash is a console utility for calculation and verification
@@ -892,14 +937,14 @@ SHA256, SHA512, SHA3, AICH, ED2K, Tiger, DC++ TTH, BitTorrent BTIH, GOST R
 (define-public botan
   (package
     (name "botan")
-    (version "2.18.1")
+    (version "2.18.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://botan.randombit.net/releases/"
                                   "Botan-" version ".tar.xz"))
               (sha256
                (base32
-                "0adf53drhk1hlpfih0175c9081bqpclw6p2afn51cmx849ib9izq"))))
+                "0zih8agygp39ff0dwi3fv8y7dnnzpz3y86kcgjbhzlxry49kn6jl"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
@@ -912,6 +957,8 @@ SHA256, SHA512, SHA3, AICH, ED2K, Tiger, DC++ TTH, BitTorrent BTIH, GOST R
                (setenv "CXXFLAGS" "-O3")
                (invoke "python" "./configure.py"
                        (string-append "--prefix=" out)
+                       "--disable-static"
+
                        ;; Otherwise, the `botan` executable cannot find
                        ;; libbotan.
                        (string-append "--ldflags=-Wl,-rpath=" lib)
@@ -931,9 +978,7 @@ SHA256, SHA512, SHA3, AICH, ED2K, Tiger, DC++ TTH, BitTorrent BTIH, GOST R
      `(("python" ,python-wrapper)
        ("python-docutils" ,python-docutils)))
     (inputs
-     `(("sqlite" ,sqlite)
-       ("bzip2" ,bzip2)
-       ("zlib" ,zlib)))
+     (list sqlite bzip2 zlib))
     (synopsis "Cryptographic library in C++11")
     (description "Botan is a cryptography library, written in C++11, offering
 the tools necessary to implement a range of practical systems, such as TLS/DTLS,
@@ -968,8 +1013,8 @@ security.")
     (license license:gpl2)))
 
 (define-public asignify
-  (let ((commit "f58e7977a599f040797975d649ed318e25cbd2d5")
-        (revision "0"))
+  (let ((commit "08af003e1f4833713db28b871759d94f9b2b1469")
+        (revision "1"))
     (package
       (name "asignify")
       (version (git-version "1.1" revision commit))
@@ -981,7 +1026,7 @@ security.")
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "1zl68qq6js6fdahxzyhvhrpyrwlv8c2zhdplycnfxyr1ckkhq8dw"))))
+                  "1zacpqa8b5lg270z1g06r5ik9vnb91crb4ivyy20381dny82xvr1"))))
       (build-system gnu-build-system)
       (arguments
        `(#:configure-flags
@@ -989,11 +1034,9 @@ security.")
                (string-append "--with-openssl="
                               (assoc-ref %build-inputs "openssl")))))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("libtool" ,libtool)))
+       (list autoconf automake libtool))
       (inputs
-       `(("openssl" ,openssl)))
+       (list openssl))
       (home-page "https://github.com/vstakhov/asignify")
       (synopsis "Cryptographic authentication and encryption tool and library")
       (description "Asignify offers public cryptographic signatures and
@@ -1061,9 +1104,7 @@ trivial to build for local use.  Portability is emphasized over performance.")
                              "--enable-module-ecdh"
                              "--enable-shared")))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("libtool" ,libtool)))
+       (list autoconf automake libtool))
       ;; WARNING: This package might need additional configure flags to run properly.
       ;; See https://github.com/archlinux/svntogit-community/blob/packages/libsecp256k1/trunk/PKGBUILD.
       (synopsis "C library for EC operations on curve secp256k1")
@@ -1101,9 +1142,7 @@ Features:
         (base32 "1rnif3iny6pz1r3g69bagzr342mm3x0v66b60csnmm1rg44bd5v1"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (arguments
      '(#:configure-flags '("--enable-module-recovery"
                            "--enable-experimental"
@@ -1151,10 +1190,9 @@ Features:
                 "0npgr6y85gzwksy8jkwa4yzvqwjprwnplx3yiw3ayk4f0ldlhaxa"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("nettle" ,nettle)
-       ("libxml2" ,libxml2)))
+     (list nettle libxml2))
     (home-page "http://stoken.sf.net")
     (synopsis "Software Token for cryptographic authentication")
     (description
@@ -1201,8 +1239,7 @@ utility/testing functions.")
                (mkdir-p man1)
                #t))))))
     (inputs
-     `(("libsodium" ,libsodium)
-       ("openssl" ,openssl)))
+     (list libsodium openssl))
     (synopsis "High-performance command-line tool for stream encryption")
     (description "Hpenc is a command-line tool for performing authenticated
 encryption (AES-GCM and ChaCha20-Poly1305) of streaming data.  It does not
@@ -1215,23 +1252,23 @@ quickly by using all your CPU cores and hardware acceleration.")
 (define-public minisign
   (package
     (name "minisign")
-    (version "0.9")
+    (version "0.10")
     (source
      (origin
-       (method url-fetch)
-       (uri
-        (string-append "https://github.com/jedisct1/minisign/releases/download/"
-                       version "/minisign-" version ".tar.gz"))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/jedisct1/minisign")
+             (commit version)))
+       (file-name (git-file-name name version))
        (sha256
-        (base32 "1h9cfvvm6lqq33b2wdar1x3w4k7zyrscavllyb0l5dmcdabq60r2"))))
+        (base32 "0gi5z03w9sg72vyjs94y0mhkzz7bbhyzcg92mgmd9r2ydpi5gads"))))
     (build-system cmake-build-system)
     (arguments
-     ; No test suite
-     `(#:tests? #f))
+     `(#:tests? #f))                    ; no test suite
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libsodium" ,libsodium)))
+     (list libsodium))
     (home-page "https://jedisct1.github.io/minisign")
     (synopsis "Tool to sign files and verify signatures")
     (description
@@ -1277,6 +1314,36 @@ API.")
     (home-page "https://matrix.org/docs/projects/other/olm/")
     (license license:asl2.0)))
 
+(define-public python-olm
+  (package
+    ;; python-olm is part of libolm and must be updated at the same time.
+    (inherit libolm)
+    (name "python-olm")
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'chdir
+           (lambda _
+             (chdir "python")))
+         (add-before 'build 'set-preprocessor
+           (lambda* (#:key inputs #:allow-other-keys)
+             (setenv "CPP" "gcc -E")))
+         (replace 'check
+           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "pytest")))))))
+    (inputs (list libolm))
+    (propagated-inputs
+     (list python-cffi python-future))
+    (native-inputs
+     (list python-pytest python-pytest-benchmark python-aspectlib))
+    (synopsis "Python bindings for libolm")
+    (description "The libolm library implements the Double Ratchet
+cryptographic ratchet.  It is written in C and C++11, and exposed as a C
+API.  This package contains its Python bindings.")))
+
 (define-public hash-extender
   (let ((commit "cb8aaee49f93e9c0d2f03eb3cafb429c9eed723d")
         (revision "2"))
@@ -1311,7 +1378,7 @@ API.")
                  (install-file "README.md" docdir)
                  #t))))))
       (inputs
-       `(("openssl" ,openssl)))
+       (list openssl))
       (synopsis "Tool for hash length extension attacks")
       (description "@command{hash_extender} is a utility for performing hash
 length extension attacks supporting MD4, MD5, RIPEMD-160, SHA-0, SHA-1,
@@ -1344,9 +1411,9 @@ SHA-256, SHA-512, and WHIRLPOOL hashes.")
                (install-file "mkp224o" bindir)
                #t))))))
     (native-inputs
-     `(("autoconf" ,autoconf)))
+     (list autoconf))
     (inputs
-     `(("libsodium" ,libsodium)))
+     (list libsodium))
     (synopsis "Tor hidden service v3 name generator")
     (description "@code{mkp224o} generates valid ed25519 (hidden service
 version 3) onion addresses.  It allows one to produce customized vanity .onion
@@ -1368,8 +1435,7 @@ addresses using a brute-force method.")
         (base32 "0bpz1hazbhfb6pqi68x55kq6a31bgh6vwij836slmi4jqiwvnh5a"))
        (file-name (git-file-name name version))))
     (inputs
-     `(("git" ,git)
-       ("openssl" ,openssl)))
+     (list git openssl))
     (build-system copy-build-system)
     (arguments
      `(#:install-plan
@@ -1448,11 +1514,7 @@ non-encrypted files.")
      `(("python" ,python-wrapper)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("boost" ,boost)
-       ("curl" ,curl)
-       ("fuse" ,fuse)
-       ("range-v3" ,range-v3)
-       ("spdlog" ,spdlog)))
+     (list boost curl fuse range-v3 spdlog))
     (home-page "https://www.cryfs.org/")
     (synopsis "Encrypted FUSE filesystem for the cloud")
     (description "CryFS encrypts your files, so you can safely store them anywhere.
@@ -1462,3 +1524,86 @@ via FUSE without root permissions.  It is similar to EncFS, but provides
 additional security and privacy measures such as hiding file sizes and directory
 structure.  However CryFS is not considered stable yet by the developers.")
     (license license:lgpl3+)))
+
+(define-public rust-blake3-0.3
+  (package
+    (name "rust-blake3")
+    ;; Version 1 requires Rust >= 1.51.
+    ;; <https://github.com/BLAKE3-team/BLAKE3/releases/tag/1.0.0>
+    (version "0.3.8")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "blake3" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32 "1cr5l5szgxm632px41kavl6cgils8h6yhdfkm6jsc5jgiivqai5n"))))
+    (build-system cargo-build-system)
+    (arguments
+      `(#:skip-build? #t
+        #:cargo-inputs
+        (("rust-arrayref" ,rust-arrayref-0.3)
+         ("rust-arrayvec" ,rust-arrayvec-0.5)
+         ("rust-cc" ,rust-cc-1)
+         ("rust-cfg-if" ,rust-cfg-if-0.1)
+         ("rust-constant-time-eq" ,rust-constant-time-eq-0.1)
+         ("rust-crypto-mac" ,rust-crypto-mac-0.8)
+         ("rust-digest" ,rust-digest-0.9)
+         ("rust-rayon" ,rust-rayon-1))))
+    (home-page "https://github.com/BLAKE3-team/BLAKE3")
+    (synopsis "BLAKE3 hash function Rust implementation")
+    (description "This crate provides the official Rust implementation of the
+BLAKE3 cryptographic hash function.  BLAKE3 is faster than MD5, SHA-1, SHA-2,
+SHA-3, and BLAKE2.")
+    ;; Users may choose between these two licenses when redistributing the
+    ;; program provided by this package.
+    (license (list license:cc0 license:asl2.0))))
+
+(define-public b3sum
+  (package
+    (name "b3sum")
+    ;; Version 1 requires Rust >= 1.51.
+    ;; <https://github.com/BLAKE3-team/BLAKE3/releases/tag/1.0.0>
+    (version "0.3.8")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "b3sum" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32 "0h3fz16q5lk6mg7r8kjkjrq5hd4injngn5m7pswjbf2pyzjmg4b4"))))
+    (build-system cargo-build-system)
+    (arguments
+      `(;; Install the source so that Cargo.toml is installed, because that is
+        ;; the only reference to the license information.
+        #:install-source? #t
+        #:phases
+        (modify-phases %standard-phases
+          (add-before 'check 'patch-tests
+            (lambda _
+              (substitute* "tests/cli_tests.rs"
+                (("/bin/sh") (which "sh")))))
+          (add-after 'install 'install-doc
+            (lambda* (#:key outputs #:allow-other-keys)
+              (let* ((out (assoc-ref outputs "out"))
+                     (doc (string-append out "/share/doc/" ,name "-"
+                                         ,(package-version this-package))))
+                (install-file "README.md" doc)))))
+        #:cargo-inputs
+        (("rust-anyhow" ,rust-anyhow-1)
+         ("rust-blake3" ,rust-blake3-0.3)
+         ("rust-clap" ,rust-clap-2)
+         ("rust-hex" ,rust-hex-0.4)
+         ("rust-memmap" ,rust-memmap-0.7)
+         ("rust-rayon" ,rust-rayon-1)
+         ("rust-wild" ,rust-wild-2))
+        #:cargo-development-inputs
+        (("rust-duct" ,rust-duct-0.13)
+         ("rust-tempfile" ,rust-tempfile-3))))
+    (home-page "https://github.com/BLAKE3-team/BLAKE3")
+    (synopsis "Command line BLAKE3 checksum tool")
+    (description "This package provides @code{b3sum}, a command line
+checksum tool based on the BLAKE3 cryptographic hash function.")
+    ;; Users may choose between these two licenses when redistributing the
+    ;; program provided by this package.
+    (license (list license:cc0 license:asl2.0))))
diff --git a/gnu/packages/cryptsetup.scm b/gnu/packages/cryptsetup.scm
index 49b82090f0..d8a6437259 100644
--- a/gnu/packages/cryptsetup.scm
+++ b/gnu/packages/cryptsetup.scm
@@ -35,7 +35,7 @@
 (define-public cryptsetup
   (package
    (name "cryptsetup")
-   (version "2.3.6")
+   (version "2.3.7")
    (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
-              "0pv34l6230ba1i5p0z6zmvfqvv3as0cwn731h2qw4xm53sibg5mj"))))
+              "1a97rvi6arsj8dikh1qsvixx9rizm89k155q2ypifqlqllr530v1"))))
    (build-system gnu-build-system)
    (arguments
     `(#:configure-flags
@@ -55,14 +55,14 @@
        ;; GRUB 2.06 supports LUKS2, but does it reliably support all set-ups…?
        "--with-default-luks-format=LUKS1")))
    (native-inputs
-    `(("pkg-config" ,pkg-config)))
+    (list pkg-config))
    (inputs
-    `(("argon2" ,argon2)
-      ("json-c" ,json-c)
-      ("libgcrypt" ,libgcrypt)
-      ("lvm2" ,lvm2)                    ; device-mapper
-      ("popt" ,popt)
-      ("util-linux" ,util-linux "lib"))) ;libuuid
+    (list argon2
+          json-c
+          libgcrypt
+          lvm2 ; device-mapper
+          popt
+          `(,util-linux "lib"))) ;libuuid
    (synopsis "Set up transparent encryption of block devices using dm-crypt")
    (description
     "Cryptsetup is a utility used to conveniently set up disk encryption based
diff --git a/gnu/packages/cups.scm b/gnu/packages/cups.scm
index e4ae35d8ae..da113ac168 100644
--- a/gnu/packages/cups.scm
+++ b/gnu/packages/cups.scm
@@ -1,12 +1,13 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015, 2019, 2021 Ricardo Wurmus <rekado@elephly.net>
-;;; Copyright © 2015, 2016, 2017, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2015, 2016, 2017, 2019, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015, 2016, 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Danny Milosavljevic <dannym@scratchpost.org>
 ;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2017 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2017–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -83,9 +84,7 @@
                               (assoc-ref %outputs "out")
                               "/lib/cups"))))
       (inputs
-       `(("ghostscript" ,ghostscript)
-         ("cups" ,cups)
-         ("zlib" ,zlib)))
+       (list ghostscript cups zlib))
       (home-page "https://github.com/pdewacht/brlaser")
       (synopsis "Brother laser printer driver")
       (description "Brlaser is a CUPS driver for Brother laser printers.  This
@@ -128,7 +127,7 @@ driver is known to work with these printers:
 (define-public cups-filters
   (package
     (name "cups-filters")
-    (version "1.27.4")
+    (version "1.28.9")
     (source(origin
               (method url-fetch)
               (uri
@@ -136,7 +135,7 @@ driver is known to work with these printers:
                               "cups-filters-" version ".tar.xz"))
               (sha256
                (base32
-                "110b1xhb5vfpcx0zq9kkas7pj281skx5dpnnr22idx509jfdzj8b"))
+                "1bk0x1rrb8wqbhh5c979ppgy6s2kqss8mjdlahgcjvd79wm3fs9g"))
               (modules '((guix build utils)))
               (snippet
                ;; install backends, banners and filters to cups-filters output
@@ -196,29 +195,31 @@ driver is known to work with these printers:
                         #t)))
                   (add-after 'install 'wrap-filters
                     (lambda* (#:key inputs outputs #:allow-other-keys)
-                      ;; Some filters expect to find 'gs' in $PATH.  We cannot
-                      ;; just hard-code its absolute file name in the source
+                      ;; Some filters expect to find things in $PATH.  We cannot
+                      ;; just hard-code all absolute file names in the source
                       ;; because foomatic-rip, for example, has tests like
                       ;; 'startswith(cmd, "gs")'.
                       (let ((out         (assoc-ref outputs "out"))
-                            (ghostscript (assoc-ref inputs "ghostscript")))
+                            (ghostscript (assoc-ref inputs "ghostscript"))
+                            (grep        (assoc-ref inputs "grep")))
                         (for-each (lambda (file)
                                     (wrap-program file
                                       `("PATH" ":" prefix
-                                        (,(string-append ghostscript
-                                                         "/bin")))))
+                                        (,(string-append ghostscript "/bin:"
+                                                         grep "/bin")))))
                                   (find-files (string-append
                                                out "/lib/cups/filter")))
                         #t))))))
     (native-inputs
-     `(("glib" ,glib "bin") ; for gdbus-codegen
-       ("pkg-config" ,pkg-config)))
+     (list `(,glib "bin") ; for gdbus-codegen
+           pkg-config))
     (inputs
      `(("avahi"        ,avahi)
        ("fontconfig"   ,fontconfig)
        ("freetype"     ,freetype)
-       ("font-dejavu"  ,font-dejavu) ; also needed by test suite
+       ("font-dejavu"  ,font-dejavu)    ; also needed by test suite
        ("ghostscript"  ,ghostscript/cups)
+       ("grep"         ,grep)
        ("ijs"          ,ijs)
        ("dbus"         ,dbus)
        ("lcms"         ,lcms)
@@ -251,16 +252,20 @@ filters for the PDF-centric printing workflow introduced by OpenPrinting.")
 (define-public cups-minimal
   (package
     (name "cups-minimal")
-    (version "2.3.3")
-    (replacement cups-minimal/fixed)
+    (version "2.3.3op2")
     (source
      (origin
-       (method url-fetch)
-       (uri (string-append "https://github.com/apple/cups/releases/download/v"
-                           version "/cups-" version "-source.tar.gz"))
+       (method git-fetch)
+       ;; Version maintained by the OpenPrinting organization, NOT a fork.  The
+       ;; CUPS author tracks the current Apple CUPS sources and includes common
+       ;; changes and bug fixes for GNU/Linux.  See its README and for example
+       ;; <https://github.com/apple/cups/issues/5917#issuecomment-819465891>.
+       (uri (git-reference
+             (url "https://github.com/OpenPrinting/cups")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
        (sha256
-        (base32
-         "1vpk0b2vq830f8fvf9z8qjsm5k141i7pi8djbinpnr78pi4dj7r6"))))
+        (base32 "126d6kd3pkhmsvbcflkcpk3y30iqlkdqyvrk9aqq88vbxzjd5ia6"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
@@ -273,21 +278,37 @@ filters for the PDF-centric printing workflow introduced by OpenPrinting.")
        #:tests? #f
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'never-cupsAdminGetServerSettings
+           ;; Instead of querying the daemon directly, this part of CUPS assumes
+           ;; that (1) it has access to a cupsd.conf under CUPS_SERVERROOT, and
+           ;; (2) the file's contents apply to the running daemon.  (1) is false
+           ;; at least on Guix Systems resulting in extremely long delays when
+           ;; loading the Web interface's /admin page.  (2) isn't valid anywhere
+           ;; because it ignores, e.g., -c FILE.
+           ;; Upstream considers this code on ‘life support’ so just neuter it.
+	   (lambda _
+	     (substitute* "cgi-bin/admin.c"
+	       (("!cupsAdminGetServerSettings" match)
+		(string-append "0 && " match)))))
+         (add-after 'unpack 'remove-Web-UI-server-settings
+           ;; The /admin page's server configuration form is questionable for
+           ;; the same reason as cupsAdminGetServerSettings, and won't work at
+           ;; all on Guix Systems.  Remove it entirely.
+           (lambda _
+             ;; SUBSTITUTE* and a patch both have (dis)advantages.  This is
+             ;; shorter & should ensure that no translation is forgotten.
+             (substitute* (find-files "templates" "^admin\\.tmpl$")
+               ((" class=\"halves\"") "")
+               (("<FORM.* ACTION=\"/jobs.*</FORM>" match)
+                (string-append match "</P>{BROKEN? "))
+               (("</FORM>}" match)
+                (string-append match "}")))))
          (add-before 'configure 'patch-makedefs
            (lambda _
              (substitute* "Makedefs.in"
                (("INITDIR.*=.*@INITDIR@") "INITDIR = @prefix@/@INITDIR@")
                (("/bin/sh") (which "sh")))
              #t))
-         ;; Make the compressed manpages writable so that the
-         ;; reset-gzip-timestamps phase does not error out.
-         (add-before 'reset-gzip-timestamps 'make-manpages-writable
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (man (string-append out "/share/man")))
-               (for-each (lambda (file) (chmod file #o644))
-                         (find-files man "\\.gz"))
-               #t)))
          (add-before 'build 'patch-tests
            (lambda _
              (substitute* "tools/ippeveprinter.c"
@@ -295,11 +316,10 @@ filters for the PDF-centric printing workflow introduced by OpenPrinting.")
                 "#elif defined(HAVE_AVAHI)"))
              #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("zlib"  ,zlib)
-       ("gnutls" ,gnutls)))
-    (home-page "https://www.cups.org")
+     (list zlib gnutls))
+    (home-page "https://openprinting.github.io/")
     (synopsis "The Common Unix Printing System")
     (description
      "CUPS is a printing system that uses the Internet Printing Protocol
@@ -313,148 +333,128 @@ device-specific programs to convert and print many types of files.")
     ;; CUPS is Apache 2.0 with exceptions, see the NOTICE file.
     (license license:asl2.0)))
 
-(define cups-minimal/fixed
-  (package-with-extra-patches
-   cups-minimal
-   (search-patches "cups-CVE-2020-10001.patch")))
-
 (define-public cups
   (package/inherit cups-minimal
     (name "cups")
     (arguments
-     `(;; Three tests fail:
-       ;; * two tests in ipp-1.1.test related to "RFC 2911 section 3.2.6:
-       ;;   Get-Jobs Operation"
-       ;; * test of number of error/warning messages, probably related to a
-       ;;   missing font.
-       #:tests? #f
-       #:configure-flags
-       '("--disable-launchd"
-         "--disable-systemd")
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'patch-makedefs
-           (lambda _
-             (substitute* "Makedefs.in"
-               (("INITDIR.*=.*@INITDIR@") "INITDIR = @prefix@/@INITDIR@")
-               (("/bin/sh") (which "sh")))
-             #t))
-         (add-before 'check 'patch-tests
-           (lambda _
-             (let ((filters (assoc-ref %build-inputs "cups-filters"))
-                   (catpath (string-append
-                             (assoc-ref %build-inputs "coreutils") "/bin/"))
-                   (testdir (string-append (getcwd) "/tmp/")))
-               (mkdir testdir)
-               (substitute* "test/run-stp-tests.sh"
-                 ((" *BASE=/tmp/") (string-append "BASE=" testdir))
-
-                 ;; allow installation of filters from output dir and from
-                 ;; cups-filters
-                 (("for dir in /usr/libexec/cups/filter /usr/lib/cups/filter")
-                  (string-append
-                   "for dir in "
-                   (assoc-ref %outputs "out") "/lib/cups/filter "
-                   filters "/lib/cups/filter"))
-
-                 ;; check for charsets in cups-filters output
-                 (("/usr/share/cups/charsets")
-                  (string-append filters "/share/cups/charsets"))
-
-                 ;; install additional required filters
-                 (("instfilter texttopdf texttopdf pdf")
-                  (string-append
-                   "instfilter texttopdf texttopdf pdf;"
-                   "instfilter imagetoraster imagetoraster raster;"
-                   "instfilter gstoraster gstoraster raster;"
-                   "instfilter urftopdf urftopdf pdf;"
-                   "instfilter rastertopdf rastertopdf pdf;"
-                   "instfilter pstopdf pstopdf pdf"))
-
-                 ;; specify location of lpstat binary
-                 (("description=\"`lpstat -l")
-                  "description=\"`../systemv/lpstat -l")
-
-                 ;; patch shebangs of embedded scripts
-                 (("#!/bin/sh") (string-append "#!" (which "sh")))
-
-                 ;; also link mime definitions from cups-filters
-                 ;; to enable the additional filters for the test suite
-                 (("ln -s \\$root/conf/mime\\.types")
-                  (string-append
-                   "ln -s " filters
-                   "/share/cups/mime/cupsfilters.types $BASE/share/mime; "
-                   "ln -s $root/conf/mime.types"))
-                 (("ln -s \\$root/conf/mime\\.convs")
-                  (string-append
-                   "ln -s " filters
-                   "/share/cups/mime/cupsfilters.convs $BASE/share/mime; "
-                   "ln -s $root/conf/mime.convs")))
-
-               ;; fix search path for "cat"
-               (substitute* "cups/testfile.c"
-                 (("cupsFileFind\\(\"cat\", \"/bin\"")
-                  (string-append "cupsFileFind(\"cat\", \"" catpath "\""))
-                 (("cupsFileFind\\(\"cat\", \"/bin:/usr/bin\"")
-                  (string-append "cupsFileFind(\"cat\", \"" catpath "\"")))
-               #t)))
-         ;; Make the compressed manpages writable so that the
-         ;; reset-gzip-timestamps phase does not error out.
-         (add-before 'reset-gzip-timestamps 'make-manpages-writable
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (man (string-append out "/share/man")))
-               (for-each (lambda (file) (chmod file #o644))
-                         (find-files man "\\.gz"))
-               #t)))
-         (add-after 'install 'install-cups-filters-symlinks
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out"))
-                   (cups-filters (assoc-ref inputs "cups-filters")))
-               ;; charsets
-               (symlink
-                (string-append cups-filters "/share/cups/charsets")
-                (string-append out "/share/charsets"))
-
-               ;; mime types, driver file, ppds
-               (for-each
-                (lambda (f)
-                  (symlink (string-append cups-filters f)
-                           (string-append out f)))
-                '("/share/cups/mime/cupsfilters.types"
-                  "/share/cups/mime/cupsfilters.convs"
-                  "/share/cups/drv/cupsfilters.drv"
-                  "/share/ppd"))
-
-               ;; filters
-               (for-each
-                (lambda (f)
-                  (symlink f
-                           (string-append out "/lib/cups/filter" (basename f))))
-                (find-files (string-append cups-filters "/lib/cups/filter")))
-
-               ;; backends
-               (for-each
-                (lambda (f)
-                  (symlink (string-append cups-filters f)
-                           (string-append out "/lib/cups/backend/"
-                                          (basename f))))
-                '("/lib/cups/backend/parallel"
-                  "/lib/cups/backend/serial"))
-
-               ;; banners
-               (let ((banners "/share/cups/banners"))
-                 (delete-file-recursively (string-append out banners))
-                 (symlink (string-append cups-filters banners)
-                          (string-append out banners)))
-
-               ;; assorted data
-               (let ((data "/share/cups/data"))
-                 (delete-file-recursively (string-append out data))
-                 (symlink (string-append cups-filters data)
-                          (string-append out data)))
-
-               #t))))))
+     (substitute-keyword-arguments (package-arguments cups-minimal)
+       ((#:tests? _ #t)
+        ;; Three tests fail:
+        ;; * two tests in ipp-1.1.test related to "RFC 2911 section 3.2.6:
+        ;;   Get-Jobs Operation"
+        ;; * test of number of error/warning messages, probably related to a
+        ;;   missing font.
+        #f)
+       ((#:configure-flags _ '())
+        `(list "--disable-launchd"
+               "--disable-systemd"))
+       ((#:phases phases '%standard-phases)
+        `(modify-phases ,phases
+           (add-before 'check 'patch-tests
+             (lambda _
+               (let ((filters (assoc-ref %build-inputs "cups-filters"))
+                     (catpath (string-append
+                               (assoc-ref %build-inputs "coreutils") "/bin/"))
+                     (testdir (string-append (getcwd) "/tmp/")))
+                 (mkdir testdir)
+                 (substitute* "test/run-stp-tests.sh"
+                   ((" *BASE=/tmp/") (string-append "BASE=" testdir))
+
+                   ;; Allow installation of filters from the output directory
+                   ;; and from cups-filters.
+                   (("for dir in /usr/libexec/cups/filter /usr/lib/cups/filter")
+                    (string-append
+                     "for dir in "
+                     (assoc-ref %outputs "out") "/lib/cups/filter "
+                     filters "/lib/cups/filter"))
+
+                   ;; Check for charsets in the default cups-filters output.
+                   (("/usr/share/cups/charsets")
+                    (string-append filters "/share/cups/charsets"))
+
+                   ;; Install additional required filters.
+                   (("instfilter texttopdf texttopdf pdf")
+                    (string-append
+                     "instfilter texttopdf texttopdf pdf;"
+                     "instfilter imagetoraster imagetoraster raster;"
+                     "instfilter gstoraster gstoraster raster;"
+                     "instfilter urftopdf urftopdf pdf;"
+                     "instfilter rastertopdf rastertopdf pdf;"
+                     "instfilter pstopdf pstopdf pdf"))
+
+                   ;; Specify the location of the lpstat binary.
+                   (("description=\"`lpstat -l")
+                    "description=\"`../systemv/lpstat -l")
+
+                   ;; Patch the shebangs of embedded scripts.
+                   (("#!/bin/sh") (string-append "#!" (which "sh")))
+
+                   ;; Also link MIME definitions from cups-filters
+                   ;; to enable the additional filters for the test suite.
+                   (("ln -s \\$root/conf/mime\\.types")
+                    (string-append
+                     "ln -s " filters
+                     "/share/cups/mime/cupsfilters.types $BASE/share/mime; "
+                     "ln -s $root/conf/mime.types"))
+                   (("ln -s \\$root/conf/mime\\.convs")
+                    (string-append
+                     "ln -s " filters
+                     "/share/cups/mime/cupsfilters.convs $BASE/share/mime; "
+                     "ln -s $root/conf/mime.convs")))
+
+                 ;; Fix the search path for the "cat" command.
+                 (substitute* "cups/testfile.c"
+                   (("cupsFileFind\\(\"cat\", \"/bin\"")
+                    (string-append "cupsFileFind(\"cat\", \"" catpath "\""))
+                   (("cupsFileFind\\(\"cat\", \"/bin:/usr/bin\"")
+                    (string-append "cupsFileFind(\"cat\", \"" catpath "\""))))))
+           (add-after 'install 'install-cups-filters-symlinks
+             (lambda* (#:key inputs outputs #:allow-other-keys)
+               (let ((out (assoc-ref outputs "out"))
+                     (cups-filters (assoc-ref inputs "cups-filters")))
+                 ;; Charsets.
+                 (symlink
+                  (string-append cups-filters "/share/cups/charsets")
+                  (string-append out "/share/charsets"))
+
+                 ;; MIME types, driver files, and PPDs.
+                 (for-each
+                  (lambda (f)
+                    (symlink (string-append cups-filters f)
+                             (string-append out f)))
+                  '("/share/cups/mime/cupsfilters.types"
+                    "/share/cups/mime/cupsfilters.convs"
+                    "/share/cups/drv/cupsfilters.drv"
+                    "/share/ppd"))
+
+                 ;; Filters.
+                 (for-each
+                  (lambda (f)
+                    (symlink f
+                             (string-append out "/lib/cups/filter"
+                                            (basename f))))
+                  (find-files (string-append cups-filters "/lib/cups/filter")))
+
+                 ;; Backends.
+                 (for-each
+                  (lambda (f)
+                    (symlink (string-append cups-filters f)
+                             (string-append out "/lib/cups/backend/"
+                                            (basename f))))
+                  '("/lib/cups/backend/parallel"
+                    "/lib/cups/backend/serial"))
+
+                 ;; Banners.
+                 (let ((banners "/share/cups/banners"))
+                   (delete-file-recursively (string-append out banners))
+                   (symlink (string-append cups-filters banners)
+                            (string-append out banners)))
+
+                 ;; Assorted data.
+                 (let ((data "/share/cups/data"))
+                   (delete-file-recursively (string-append out data))
+                   (symlink (string-append cups-filters data)
+                            (string-append out data))))))))))
     (inputs
      `(("avahi" ,avahi)
        ("gnutls" ,gnutls)
@@ -474,11 +474,7 @@ device-specific programs to convert and print many types of files.")
                 "0a52jw6rm7lr5nbyksiia0rn7sasyb5cjqcb95z1wxm2yprgi6lm"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)
-       ("glib" ,glib)
-       ("polkit" ,polkit)
-       ("cups" ,cups)))
+     (list intltool pkg-config glib polkit cups))
     (home-page "https://www.freedesktop.org/wiki/Software/cups-pk-helper/")
     (synopsis "PolicyKit helper to configure CUPS with fine-grained privileges")
     (description
@@ -490,14 +486,14 @@ should only be used as part of the Guix cups-pk-helper service.")
 (define-public hplip
   (package
     (name "hplip")
-    (version "3.21.8")
+    (version "3.21.10")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/hplip/hplip/" version
                                   "/hplip-" version ".tar.gz"))
               (sha256
                (base32
-                "076fjzgw86q817c660h1vzwdp00cyjr49b9bfi7qkhphq6am4gpi"))
+                "0q3adcp8iygravp4bq4gw14jk20c5rhnawj1333qyw8yvlghw8yy"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -512,9 +508,13 @@ should only be used as part of the Guix cups-pk-helper service.")
                   (delete-file "prnt/hpcups/ImageProcessor.h")
                   (substitute* "Makefile.in"
                     ((" -lImageProcessor ") " ")
-                    (("(\\@HPLIP_BUILD_TRUE\\@[[:blank:]]*).*libImageProcessor.*"
+                    ;; Turn shell commands inside an if…fi into harmless no-ops.
+                    (("^(\\@HPLIP_BUILD_TRUE\\@[[:blank:]]*).*libImageProcessor.*"
                       _ prefix)
-                     (string-append prefix ":; \\\n")))
+                     (string-append prefix ": ; \\\n"))
+                    ;; Remove the lines adding file targets altogether.
+                    (("^\\@FULL_BUILD_TRUE\\@.*libImageProcessor.*")
+                     ""))
 
                   ;; Install binaries under libexec/hplip instead of
                   ;; share/hplip; that'll at least ensure they get stripped.
@@ -523,8 +523,7 @@ should only be used as part of the Guix cups-pk-helper service.")
                     (("^dat2drvdir =.*")
                      "dat2drvdir = $(pkglibexecdir)\n")
                     (("^locatedriverdir =.*")
-                     "locatedriverdir = $(pkglibexecdir)\n"))
-                  #t))))
+                     "locatedriverdir = $(pkglibexecdir)\n"))))))
     (build-system gnu-build-system)
     (outputs (list "out" "ppd"))
     (home-page "https://developers.hp.com/hp-linux-imaging-and-printing")
@@ -589,8 +588,7 @@ should only be used as part of the Guix cups-pk-helper service.")
                  ;; FIXME Use beginning-of-word in regexp.
                  (("[[:blank:]]plugin\\.py[[:blank:]]") " ")
                  (("/usr/include/libusb-1.0")
-                  (string-append (assoc-ref inputs "libusb")
-                                 "/include/libusb-1.0"))
+                  (search-input-directory inputs "/include/libusb-1.0"))
                  (("hplip_statedir =.*$")
                   ;; Don't bail out while trying to create
                   ;; /var/lib/hplip.  We can safely change its value
@@ -613,8 +611,7 @@ should only be used as part of the Guix cups-pk-helper service.")
                   (string-append "rulessystemdir = " out
                                  "/lib/systemd/system"))
                  (("/etc/sane.d")
-                  (string-append out "/etc/sane.d")))
-               #t)))
+                  (string-append out "/etc/sane.d"))))))
          (add-before 'configure 'fix-build-with-python-3.8
            (lambda* (#:key inputs #:allow-other-keys)
              (let ((python (assoc-ref inputs "python")))
@@ -625,15 +622,13 @@ should only be used as part of the Guix cups-pk-helper service.")
                  (setenv "C_INCLUDE_PATH"
                          (string-append python "/include/python"
                                         (python:python-version python)
-                                        ":" (getenv "C_INCLUDE_PATH"))))
-               #t)))
+                                        ":" (getenv "C_INCLUDE_PATH")))))))
          (add-after 'install 'install-models-dat
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
                     (models-dir (string-append out
                                                "/share/hplip/data/models")))
-               (install-file "data/models/models.dat" models-dir))
-             #t))
+               (install-file "data/models/models.dat" models-dir))))
          (add-after 'install 'wrap-binaries
            ;; Scripts in /bin are all symlinks to .py files in /share/hplip.
            ;; Symlinks are immune to the Python build system's 'WRAP phase,
@@ -644,7 +639,7 @@ should only be used as part of the Guix cups-pk-helper service.")
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
                     (bin (string-append out "/bin"))
-                    (python (assoc-ref inputs "python")))
+                    (site (python:site-packages inputs outputs)))
                (with-directory-excursion bin
                  (for-each (lambda (file)
                              (let ((target (readlink file)))
@@ -653,19 +648,15 @@ should only be used as part of the Guix cups-pk-helper service.")
                                  (lambda _
                                    (format #t
                                            "#!~a~@
-                                           export PYTHONPATH=\"~a:~a\"~@
+                                           export GUIX_PYTHONPATH=\"~a:~a\"~@
                                            exec -a \"$0\" \"~a/~a\" \"$@\"~%"
                                            (which "bash")
-                                           (string-append
-                                            out "/lib/python"
-                                            (python:python-version python)
-                                            "/site-packages")
-                                           (getenv "PYTHONPATH")
+                                           site
+                                           (getenv "GUIX_PYTHONPATH")
                                            bin target)))
                                (chmod file #o755)))
                   (find-files "." (lambda (file stat)
-                                    (eq? 'symlink (stat:type stat)))))
-                 #t)))))))
+                                    (eq? 'symlink (stat:type stat))))))))))))
 
     ;; Note that the error messages printed by the tools in the case of
     ;; missing dependencies are often downright misleading.
@@ -685,8 +676,7 @@ should only be used as part of the Guix cups-pk-helper service.")
        ("sane-backends" ,sane-backends-minimal)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("perl" ,perl)
-       ("pkg-config" ,pkg-config)))))
+     (list perl pkg-config))))
 
 (define-public hplip-minimal
   (package/inherit hplip
@@ -728,11 +718,9 @@ should only be used as part of the Guix cups-pk-helper service.")
     (home-page
      "https://wiki.linuxfoundation.org/openprinting/database/foomatic")
     (native-inputs
-     `(("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list perl pkg-config))
     (inputs
-     `(("dbus" ,dbus)
-       ("a2ps" ,a2ps)))
+     (list dbus a2ps))
     (arguments
      '( ;; Specify the installation directories.
        #:configure-flags (list (string-append "ac_cv_path_CUPS_BACKENDS="
@@ -747,7 +735,7 @@ should only be used as part of the Guix cups-pk-helper service.")
                                (string-append "ac_cv_path_PPR_LIB="
                                               (assoc-ref %outputs "out")
                                               "/lib/ppr/lib")
-
+                               "CFLAGS=-fcommon"
                                ;; For some reason these are misdiagnosed.
                                "ac_cv_func_malloc_0_nonnull=yes"
                                "ac_cv_func_realloc_0_nonnull=yes")
@@ -846,14 +834,12 @@ printer/driver specific, but spooler-independent PPD file.")
        #:tests? #f                                ;no tests
        #:make-flags '("CC=gcc")))
     (inputs
-     `(("coreutils" ,coreutils)
-       ("sed" ,sed)
-       ("ghostscript" ,ghostscript)
-       ("foomatic-filters" ,foomatic-filters)))   ;for 'foomatic-rip'
+     (list coreutils sed ghostscript foomatic-filters))   ;for 'foomatic-rip'
     (native-inputs
-     `(("bc" ,bc)
-       ("groff" ,groff)))
-    (home-page "http://foo2zjs.rkkda.com/")
+     (list bc groff))
+    ;; The domain has expired and no one has meaningfully taken up the torch.
+    (home-page (string-append "https://web.archive.org/web/20210129024712/"
+                              "http://foo2zjs.rkkda.com/"))
     (synopsis "Printer driver for ZjStream-based printers")
     (description
      "foo2zjs is a printer driver for printers that use the Zenographics
@@ -914,8 +900,7 @@ HP@tie{}LaserJet, and possibly other printers.  See @file{README} for details.")
                  (for-each (cut invoke "gzip" "-9" <>)
                            (find-files "share/cups" "\\.ppd$")))))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (inputs
      `(("cups" ,cups-minimal)))
     (synopsis "ESC/P-R printer driver")
@@ -927,9 +912,6 @@ language.")
     (home-page "http://download.ebz.epson.net/dsc/search/01/search/?OSC=LX")
     (license license:gpl2+)))
 
-(define-public escpr
-  (deprecated-package "escpr" epson-inkjet-printer-escpr))
-
 (define-public splix
   ;; Last released in 2009 <https://sourceforge.net/projects/splix/files/>.
   ;; Last SVN commit was 2013 <https://svn.code.sf.net/p/splix/code/splix/>.
@@ -1018,7 +1000,7 @@ obtained and installed separately.")
      '(;; Tests require CUPS to be running
        #:tests? #f))
     (inputs
-     `(("cups" ,cups)))
+     (list cups))
     (home-page "https://github.com/zdohnal/pycups")
     (synopsis "Python bindings for libcups")
     (description
diff --git a/gnu/packages/curl.scm b/gnu/packages/curl.scm
index c61a56256c..27a98185e0 100644
--- a/gnu/packages/curl.scm
+++ b/gnu/packages/curl.scm
@@ -11,6 +11,7 @@
 ;;; Copyright © 2019, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
 ;;; Copyright © 2020 Dale Mellor <guix-devel-0brg6b@rdmp.org>
+;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2021 Jean-Baptiste Volatier <jbv@pm.me>
 ;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
 ;;;
@@ -39,13 +40,16 @@
   #:use-module (guix build-system copy)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system go)
+  #:use-module (guix build-system meson)
   #:use-module (gnu packages)
+  #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages golang)
   #:use-module (gnu packages guile)
   #:use-module (gnu packages kerberos)
+  #:use-module (gnu packages logging)
+  #:use-module (gnu packages libevent)
   #:use-module (gnu packages libidn)
-  #:use-module (gnu packages openldap)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
@@ -57,29 +61,25 @@
 (define-public curl
   (package
    (name "curl")
-   (replacement curl-7.77.0)
-   (version "7.74.0")
+   (version "7.79.1")
    (source (origin
              (method url-fetch)
              (uri (string-append "https://curl.haxx.se/download/curl-"
                                  version ".tar.xz"))
              (sha256
               (base32
-               "12w7gskrglg6qrmp822j37fmbr0icrcxv7rib1fy5xiw80n5z7cr"))
+               "129n9hi7rbg3s112chyadhp4y27ppb5i65n12wm77aw2255zf1h6"))
              (patches (search-patches "curl-use-ssl-cert-env.patch"))))
    (build-system gnu-build-system)
    (outputs '("out"
               "doc"))                             ;1.2 MiB of man3 pages
-   (inputs `(("gnutls" ,gnutls)
-             ("libidn" ,libidn)
-             ("openldap" ,openldap)
-             ("mit-krb5" ,mit-krb5)
-             ("nghttp2" ,nghttp2 "lib")
-             ("zlib" ,zlib)))
+   (inputs (list gnutls libidn mit-krb5
+                 `(,nghttp2 "lib") zlib))
    (native-inputs
-     `(("perl" ,perl)
+     `(("nghttp2" ,nghttp2)
+       ("perl" ,perl)
        ("pkg-config" ,pkg-config)
-       ("python" ,python-wrapper)))
+       ("python" ,python-minimal-wrapper)))
    (native-search-paths
     ;; These variables are introduced by curl-use-ssl-cert-env.patch.
     (list (search-path-specification
@@ -112,8 +112,7 @@
             ;; Do not save the configure options to avoid unnecessary references.
             (substitute* "curl-config.in"
               (("@CONFIGURE_OPTIONS@")
-               "\"not available\""))
-            #t))
+               "\"not available\""))))
         (add-after
          'install 'move-man3-pages
          (lambda* (#:key outputs #:allow-other-keys)
@@ -122,18 +121,17 @@
                  (doc (assoc-ref outputs "doc")))
              (mkdir-p (string-append doc "/share/man"))
              (rename-file (string-append out "/share/man/man3")
-                          (string-append doc "/share/man/man3"))
-             #t)))
-        (replace
-         'check
-         (lambda _
-           (substitute* "tests/runtests.pl"
-             (("/bin/sh") (which "sh")))
+                          (string-append doc "/share/man/man3")))))
+        (replace 'check
+          (lambda* (#:key tests? #:allow-other-keys)
+            (substitute* "tests/runtests.pl"
+              (("/bin/sh") (which "sh")))
 
-           ;; The top-level "make check" does "make -C tests quiet-test", which
-           ;; is too quiet.  Use the "test" target instead, which is more
-           ;; verbose.
-           (invoke "make" "-C" "tests" "test"))))))
+            (when tests?
+              ;; The top-level "make check" does "make -C tests quiet-test", which
+              ;; is too quiet.  Use the "test" target instead, which is more
+              ;; verbose.
+              (invoke "make" "-C" "tests" "test")))))))
    (synopsis "Command line tool for transferring data with URL syntax")
    (description
     "curl is a command line tool for transferring data with URL syntax,
@@ -147,14 +145,8 @@ tunneling, and so on.")
                                   "See COPYING in the distribution."))
    (home-page "https://curl.haxx.se/")))
 
-;; This package exists mainly to bootstrap CMake.  It must not depend on
-;; anything that uses cmake-build-system.
 (define-public curl-minimal
-  (hidden-package
-   (package/inherit
-    curl
-    (name "curl-minimal")
-    (inputs (alist-delete "openldap" (package-inputs curl))))))
+  (deprecated-package "curl-minimal" curl))
 
 (define-public curl-ssh
   (package/inherit curl
@@ -167,21 +159,6 @@ tunneling, and so on.")
        ,@(package-inputs curl)))
     (properties `((hidden? . #t)))))
 
-(define-public curl-7.77.0
-  (package
-    (inherit curl)
-    (version "7.77.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"
-                                "curl-7.77-tls-priority-string.patch"))
-       (sha256
-        (base32
-         "0jsrc97vbghvljic997r9nypc9qqddcil2lzvv032br8ahn5hr0g"))))))
-
 (define-public kurly
   (package
     (name "kurly")
@@ -214,9 +191,8 @@ tunneling, and so on.")
                             (string-append man "/kurly.1")))
                #t))))))
     (inputs
-     `(("go-github-com-alsm-ioprogress" ,go-github-com-alsm-ioprogress)
-       ("go-github-com-aki237-nscjar" ,go-github-com-aki237-nscjar)
-       ("go-github-com-urfave-cli" ,go-github-com-urfave-cli)))
+     (list go-github-com-alsm-ioprogress go-github-com-aki237-nscjar
+           go-github-com-urfave-cli))
     (synopsis "Command-line HTTP client")
     (description "kurly is an alternative to the @code{curl} program written in
 Go.  kurly is designed to operate in a similar manner to curl, with select
@@ -287,10 +263,9 @@ not offer a replacement for libcurl.")
               ;; The build system does not actually compile the Scheme module.
               ;; So we can compile it and put it in the right place in one go.
               (invoke "guild" "compile" curl.scm "-o" curl.go)))))))
-   (native-inputs `(("pkg-config" ,pkg-config)))
+   (native-inputs (list pkg-config))
    (inputs
-    `(("curl" ,curl)
-      ("guile" ,guile-3.0)))
+    (list curl guile-3.0))
    (home-page "http://www.lonelycactus.com/guile-curl.html")
    (synopsis "Curl bindings for Guile")
    (description "@code{guile-curl} is a project that has procedures that allow
@@ -303,8 +278,7 @@ FTP servers.  It is based on the curl library.")
     (inherit guile-curl)
     (name "guile2.2-curl")
     (inputs
-     `(("curl" ,curl)
-       ("guile" ,guile-2.2)))))
+     (list curl guile-2.2))))
 
 (define-public curlpp
   (package
@@ -325,7 +299,7 @@ FTP servers.  It is based on the curl library.")
      '(#:tests? #f))
     ;; The installed version needs the header files from the C library.
     (propagated-inputs
-     `(("curl" ,curl)))
+     (list curl))
     (synopsis "C++ wrapper around libcURL")
     (description
      "This package provides a free and easy-to-use client-side C++ URL
@@ -356,10 +330,34 @@ more!")
      '(#:install-plan
        '(("./h2c" "bin/"))))
     (inputs
-     `(("perl" ,perl)))
+     (list perl))
     (home-page "https://curl.se/h2c/")
     (synopsis "Convert HTTP headers to a curl command line")
     (description
      "Provided a set of HTTP request headers, h2c outputs how to invoke
 curl to obtain exactly that HTTP request.")
     (license license:expat)))
+
+(define-public coeurl
+  (package
+    (name "coeurl")
+    (version "0.1.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://nheko.im/nheko-reborn/coeurl")
+             (commit (string-append "v" version))))
+       (sha256
+        (base32
+         "0sqciagagyc0qv90g0qw8fkyvy4l8h7nbaz04chiz9gnv89hg28p"))))
+    (build-system meson-build-system)
+    (native-inputs
+     (list doctest pkg-config))
+    (inputs
+     (list curl libevent spdlog))
+    (home-page "https://nheko.im/nheko-reborn/coeurl")
+    (synopsis "Simple async wrapper around CURL for C++")
+    (description "Coeurl is a simple library to do HTTP requests
+asynchronously via cURL in C++.")
+    (license license:expat)))
diff --git a/gnu/packages/cvassistant.scm b/gnu/packages/cvassistant.scm
index 3f3a6f7492..9af5c7976f 100644
--- a/gnu/packages/cvassistant.scm
+++ b/gnu/packages/cvassistant.scm
@@ -69,9 +69,7 @@
          (replace 'configure
            (lambda _ (invoke "qmake"))))))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("quazip" ,quazip)
-       ("zlib" ,zlib)))
+     (list qtbase-5 quazip-0 zlib))
     (home-page "https://cvassistant.sourceforge.io/")
     (synopsis "Job application organizer")
     (description "Whether you're looking for a job or trying to help
diff --git a/gnu/packages/cybersecurity.scm b/gnu/packages/cybersecurity.scm
index 9ec0480515..0801c00c4f 100644
--- a/gnu/packages/cybersecurity.scm
+++ b/gnu/packages/cybersecurity.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
 ;;; Copyright © 2020, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2021 c4droid <c4droid@foxmail.com>
+;;; Copyright © 2021 Raghav Gururajan <rg@raghavgururajan.name>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -20,10 +21,14 @@
 
 (define-module (gnu packages cybersecurity)
   #:use-module (guix download)
+  #:use-module (guix git-download)
   #:use-module (guix packages)
   #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix build-system cmake)
   #:use-module (guix build-system python)
+  #:use-module (gnu packages cpp)
   #:use-module (gnu packages engineering)
+  #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages python-crypto)
@@ -32,19 +37,81 @@
   #:use-module (gnu packages bioinformatics)      ;python-intervaltree
   #:use-module (gnu packages emulators))
 
+(define-public blacksmith
+  (package
+    (name "blacksmith")
+    (version "0.0.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/comsec-group/blacksmith")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0kyp71wndf527dgza5iks5m5vj543mvxp5w7cjd8x0pilmd1xrls"))
+              (modules '((guix build utils)))
+              (snippet `(begin
+                          (delete-file-recursively "external")
+                          (substitute* "CMakeLists.txt"
+                            (("add_subdirectory\\(external\\)") "")
+                            (("[ \t]*FetchContent_MakeAvailable\\(asmjit\\)")
+                             (string-append
+                              "find_package(asmjit)\n"
+                              "find_package(nlohmann_json)")))))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:tests? #f                      ;no test-suite
+       #:imported-modules
+       ((guix build copy-build-system)
+        ,@%cmake-build-system-modules)
+       #:modules
+       (((guix build copy-build-system) #:prefix copy:)
+        (guix build cmake-build-system)
+        (guix build utils))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-build
+           (lambda _
+             (substitute* "CMakeLists.txt"
+               ;; Use default C++ standard instead.
+               (("cxx_std_17") "")
+               ;; This project tries to link argagg library, which doesn't
+               ;; exist, as argagg project is a single header file.
+               (("argagg") ""))))
+         (replace 'install
+           (lambda args
+             (apply (assoc-ref copy:%standard-phases 'install)
+                    #:install-plan
+                    '(("." "bin" #:include ("blacksmith"))
+                      ("." "lib" #:include-regexp ("\\.a$")))
+                    args))))))
+    (native-inputs
+     (list pkg-config))
+    (inputs
+     (list argagg asmjit json-modern-cxx))
+    (home-page "https://comsec.ethz.ch/research/dram/blacksmith")
+    (synopsis "Rowhammer fuzzer with non-uniform and frequency-based patterns")
+    (description
+     "Blacksmith is an implementation of Rowhammer fuzzer that crafts novel
+non-uniform Rowhammer access patterns based on the concepts of frequency,
+phase, and amplitude.  It is able to bypass recent @acronym{TRR, Target Row
+Refresh}in-DRAM mitigations effectively and as such can trigger bit flips.")
+    (license license:expat)))
+
 (define-public ropgadget
   (package
     (name "ropgadget")
-    (version "6.5")
+    (version "6.6")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "ROPGadget" version))
        (sha256
-        (base32 "0p4h8xi27xcicz8sq6xi40hbj99mcsnnla6ar2r17vqapbr5c3jc"))))
+        (base32 "08ms7x4af07970ij9899l75sghnxsa7xyx73gkn6gv0l05p1hqfw"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-capstone" ,python-capstone)))
+     (list python-capstone))
     (home-page "http://shell-storm.org/project/ROPgadget/")
     (synopsis "Semiautomatic return oriented programming")
     (description
@@ -68,23 +135,22 @@ chains of gadgets to execute system calls.")
     (arguments
      '(#:tests? #f))                 ;XXX: needs a specific version of unicorn
     (propagated-inputs
-     `(("capstone" ,capstone)
-       ("python-dateutil" ,python-dateutil)
-       ("python-intervaltree" ,python-intervaltree)
-       ("python-mako" ,python-mako)
-       ("python-packaging" ,python-packaging)
-       ("python-paramiko" ,python-paramiko)
-       ("python-psutil" ,python-psutil)
-       ("python-pyelftools" ,python-pyelftools)
-       ("python-pygments" ,python-pygments)
-       ("python-pyserial" ,python-pyserial)
-       ("python-pysocks" ,python-pysocks)
-       ("python-requests" ,python-requests)
-       ("ropgadget" ,ropgadget)
-       ("python-six" ,python-six)
-       ("python-sortedcontainers"
-        ,python-sortedcontainers)
-       ("unicorn" ,unicorn)))
+     (list capstone
+           python-dateutil
+           python-intervaltree
+           python-mako
+           python-packaging
+           python-paramiko
+           python-psutil
+           python-pyelftools
+           python-pygments
+           python-pyserial
+           python-pysocks
+           python-requests
+           ropgadget
+           python-six
+           python-sortedcontainers
+           unicorn))
     (home-page "https://github.com/Gallopsled/pwntools")
     (synopsis
      "Capture-the-flag (CTF) framework and exploit development library")
diff --git a/gnu/packages/cyrus-sasl.scm b/gnu/packages/cyrus-sasl.scm
index 43c2099968..2cd18f3e5e 100644
--- a/gnu/packages/cyrus-sasl.scm
+++ b/gnu/packages/cyrus-sasl.scm
@@ -48,14 +48,11 @@
                                      "cyrus-sasl-CVE-2019-19906.patch"))))
    (build-system gnu-build-system)
    (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
-   (inputs `(("gdbm" ,gdbm)
-             ("openssl" ,openssl)))
+     (list autoconf automake libtool))
+   (inputs (list gdbm openssl))
    (propagated-inputs
-    `(;; cyrus-sasl.pc refers to -lkrb5, so propagate it.
-      ("mit-krb5" ,mit-krb5)))
+    (list ;; cyrus-sasl.pc refers to -lkrb5, so propagate it.
+          mit-krb5))
    (arguments
     '(#:configure-flags (list (string-append "--with-plugindir="
                                              (assoc-ref %outputs "out")
diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm
index 3487b2cec2..128b349cae 100644
--- a/gnu/packages/databases.scm
+++ b/gnu/packages/databases.scm
@@ -17,12 +17,12 @@
 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2016 Andy Patterson <ajpatter@uwaterloo.ca>
 ;;; Copyright © 2016 Danny Milosavljevic <dannym+a@scratchpost.org>
-;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Marius Bakke <marius@gnu.org>
+;;; Copyright © 2016-2022 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2017, 2018 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2017, 2020 Thomas Danckaert <post@thomasdanckaert.be>
 ;;; Copyright © 2017 Jelle Licht <jlicht@fsfe.org>
 ;;; Copyright © 2017 Adriano Peluso <catonano@gmail.com>
-;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net>
+;;; Copyright © 2017, 2021 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2017–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017, 2018 Alex Vong <alexvong1995@gmail.com>
 ;;; Copyright © 2017, 2018 Ben Woodcroft <donttrustben@gmail.com>
@@ -53,6 +53,8 @@
 ;;; Copyright © 2021 Simon Streit <simon@netpanic.org>
 ;;; Copyright © 2021 Alexandre Hannud Abdo <abdo@member.fsf.org>
 ;;; Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
+;;; Copyright © 2021 jgart <jgart@dismail.de>
+;;; Copyright © 2021 Foo Chuan Wei <chuanwei.foo@hotmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -113,6 +115,7 @@
   #:use-module (gnu packages maths)
   #:use-module (gnu packages multiprecision)
   #:use-module (gnu packages ncurses)
+  #:use-module (gnu packages networking)
   #:use-module (gnu packages onc-rpc)
   #:use-module (gnu packages pantheon)
   #:use-module (gnu packages parallel)
@@ -140,12 +143,15 @@
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages tcl)
   #:use-module (gnu packages terminals)
+  #:use-module (gnu packages texinfo)
   #:use-module (gnu packages textutils)
   #:use-module (gnu packages time)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages valgrind)
   #:use-module (gnu packages web)
+  #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xml)
+  #:use-module (guix gexp)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
@@ -183,24 +189,24 @@
                                "4store-fix-buildsystem.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("perl" ,perl)
-       ("python" ,python-2)
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("gettext" ,gettext-minimal)
-       ("libtool" ,libtool)
-       ("pcre" ,pcre "bin")                       ;for 'pcre-config'
-       ("pkg-config" ,pkg-config)))
+     (list perl
+           python-2
+           autoconf
+           automake
+           gettext-minimal
+           libtool
+           `(,pcre "bin") ;for 'pcre-config'
+           pkg-config))
     (inputs
-     `(("glib" ,glib)
-       ("rasqal" ,rasqal)
-       ("libxml2" ,libxml2)
-       ("raptor2" ,raptor2)
-       ("readline" ,readline)
-       ("avahi" ,avahi)
-       ("cyrus-sasl" ,cyrus-sasl)
-       ("openssl" ,openssl)
-       ("util-linux" ,util-linux "lib")))
+     (list glib
+           rasqal
+           libxml2
+           raptor2
+           readline
+           avahi
+           cyrus-sasl
+           openssl
+           `(,util-linux "lib")))
     ;; http://www.4store.org has been down for a while now.
     (home-page "https://github.com/4store/4store")
     (synopsis "Clustered RDF storage and query engine")
@@ -241,12 +247,10 @@ either single machines or networked clusters.")
              #t)))
        #:test-target "test"))
     (inputs
-     `(("postgresql" ,postgresql)
-       ("util-linux" ,util-linux)))
+     (list postgresql util-linux))
     (native-inputs
      ;; For tests.
-     `(("ruby" ,ruby)
-       ("which" ,which)))
+     (list ruby which))
     (home-page "https://eradman.com/ephemeralpg/")
     (synopsis "Run temporary PostgreSQL databases")
     (description
@@ -272,11 +276,8 @@ garbage-collected after a configurable number of seconds (the default is
     (arguments
      '(#:tests? #f)) ;; No testsuite.
     (propagated-inputs
-     `(("ruby-httpclient" ,ruby-httpclient)
-       ("ruby-multi-json" ,ruby-multi-json)
-       ("ruby-progress_bar" ,ruby-progress_bar)
-       ("ruby-rubyzip" ,ruby-rubyzip)
-       ("ruby-thor" ,ruby-thor)))
+     (list ruby-httpclient ruby-multi-json ruby-progress_bar ruby-rubyzip
+           ruby-thor))
     (synopsis "Utility for dumping and restoring ElasticSearch indexes")
     (description
      "This package provides a utility for dumping the contents of an
@@ -422,12 +423,12 @@ ElasticSearch server")
                                  "lib/firebird/plugins/udr"))
                  #t)))))))
     (inputs
-     `(("boost" ,boost)
-       ("editline" ,editline)
-       ("icu4c" ,icu4c-67)
-       ("libtommath" ,libtommath)
-       ("ncurses" ,ncurses)
-       ("zlib" ,zlib)))
+     (list boost
+           editline
+           icu4c-67
+           libtommath
+           ncurses
+           zlib))
     (home-page "https://www.firebirdsql.org")
     (synopsis "Relational database with many ANSI SQL standard features")
     (description
@@ -465,7 +466,7 @@ database later.")
 (define-public leveldb
   (package
     (name "leveldb")
-    (version "1.22")
+    (version "1.23")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -474,12 +475,33 @@ database later.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0qrnhiyq7r4wa1a4wi82zgns35smj94mcjsc7kfs1k6ia9ys79z7"))))
+                "1chxkhb6ajdmj4p8535k4472fbmqvcismll6aapkarsr45yrvgs4"))))
     (build-system cmake-build-system)
     (arguments
-     `(#:configure-flags '("-DBUILD_SHARED_LIBS=ON" "-DLEVELDB_BUILD_TESTS=ON")))
+     (list #:configure-flags
+           #~(list "-DBUILD_SHARED_LIBS=ON"
+                   "-DLEVELDB_BUILD_TESTS=ON"
+
+                   ;; Don't install(!) the third_party test frameworks below.
+                   "-DINSTALL_GTEST=OFF"
+                   "-DBENCHMARK_ENABLE_INSTALL=OFF")
+           #:phases
+           #~(modify-phases %standard-phases
+               ;; Ceph uses leveldb and depends on RTTI.
+               (add-after 'unpack 'allow-RTTI
+                 (lambda _
+                   (substitute* "CMakeLists.txt"
+                     (("set\\(CMAKE_CXX_FLAGS \"\\$\\{CMAKE_CXX_FLAGS\\} -fno-rtti\"\\)")
+                      ""))))
+               (add-after 'unpack 'unpack-third_party-sources
+                 ;; These are only for testing, so copying source is fine.
+                 (lambda _
+                   (copy-recursively #$(package-source googletest)
+                                     "third_party/googletest")
+                   (copy-recursively #$(package-source googlebenchmark)
+                                     "third_party/benchmark"))))))
     (inputs
-     `(("snappy" ,snappy)))
+     (list snappy))
     (home-page "https://github.com/google/leveldb")
     (synopsis "Fast key-value storage library")
     (description
@@ -490,18 +512,17 @@ mapping from string keys to string values.")
 (define-public memcached
   (package
     (name "memcached")
-    (version "1.6.9")
+    (version "1.6.13")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
              "https://memcached.org/files/memcached-" version ".tar.gz"))
        (sha256
-        (base32 "1lcjy1b9krnb2gk72qd1fvivlfiyfvknfi3wngyvyk9ifzijr9nm"))))
+        (base32 "1m5mhw9ybb8qcyi6hb5kwpqanqmlnz27r54ccabc4y7nhpfvl6mx"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libevent" ,libevent)
-       ("cyrus-sasl" ,cyrus-sasl)))
+     (list libevent cyrus-sasl))
     (home-page "https://memcached.org/")
     (synopsis "In-memory caching service")
     (description "Memcached is an in-memory key-value store.  It has a small
@@ -528,17 +549,16 @@ applications.")
                (search-patches "libmemcached-build-with-gcc7.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("memcached" ,memcached)
-       ("libtool" ,libtool)
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("bison" ,bison)
-       ("flex" ,flex)
-       ("perl" ,perl)
-       ("python-sphinx" ,python-sphinx))) ;to build the HTML doc.
+     (list memcached
+           libtool
+           autoconf
+           automake
+           bison
+           flex
+           perl
+           python-sphinx)) ;to build the HTML doc.
     (inputs
-     `(("libevent" ,libevent)
-       ("cyrus-sasl" ,cyrus-sasl)))
+     (list libevent cyrus-sasl))
     (outputs '("out" "doc"))
     (arguments
      '(#:tests? #f                      ;many tests fail and use too much time
@@ -598,12 +618,9 @@ the API, and provides features such as:
            (lambda _
              (invoke "memcached" "-d"))))))
     (native-inputs
-     `(("memcached" ,memcached)
-       ("python-nose" ,python-nose)))
+     (list memcached python-nose))
     (inputs
-     `(("libmemcached" ,libmemcached)
-       ("zlib" ,zlib)
-       ("cyrus-sasl" ,cyrus-sasl)))
+     (list libmemcached zlib cyrus-sasl))
     (home-page "http://sendapatch.se/projects/pylibmc/")
     (synopsis "Python client for memcached")
     (description
@@ -612,36 +629,120 @@ around TangentOrg’s libmemcached library, and can be used as a drop-in
 replacement for the code@{python-memcached} library.")
     (license license:bsd-3)))
 
-(define-public python2-pylibmc
-  (package-with-python2 python-pylibmc))
+(define-public litecli
+ (package
+  (name "litecli")
+  (version "1.6.0")
+  (source
+   (origin
+     (method url-fetch)
+     (uri (pypi-uri "litecli" version))
+     (sha256
+      (base32 "1yb706mgzizzijm1k0fbny98jf58qh5q6f2870rbplxlfla4w9sd"))))
+  (build-system python-build-system)
+  (propagated-inputs
+   (list python-cli-helpers
+         python-click
+         python-configobj
+         python-prompt-toolkit
+         python-pygments
+         python-sqlparse))
+  (native-inputs
+   (list python-mock python-pytest))
+  (home-page "https://litecli.com")
+  (synopsis "CLI for SQLite databases")
+  (description
+   "@code{litecli} is a command-line client for SQLite databases that has
+auto-completion and syntax highlighting.")
+  (license license:bsd-3)))
+
+(define-public python-pgspecial
+  (package
+    (name "python-pgspecial")
+    (version "1.13.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pgspecial" version))
+       (sha256
+        (base32 "00ddkf565rjcxmfml1z4mmkns1aq8x5s5g85xmnz2scln42y4irq"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     (list python-click python-sqlparse python-psycopg2))
+    (home-page "https://github.com/dbcli/pgspecial")
+    (synopsis
+     "Python implementation of PostgreSQL meta commands (backslash commands)")
+    (description
+     "This Python package provides an API to execute meta-commands (AKA
+\"special\", or \"backslash commands\") on PostgreSQL.")
+    (license license:bsd-3)))
+
+(define-public pgcli
+  (package
+    (name "pgcli")
+    (version "3.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pgcli" version))
+       (sha256
+        (base32 "1dy6yzak696107pqv83296h0xhc3ahlfaydm80593gwn37krgpkc"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     (list python-cli-helpers
+           python-click
+           python-configobj
+           python-pendulum
+           python-pgspecial
+           python-prompt-toolkit
+           python-psycopg2
+           python-pygments
+           python-setproctitle
+           python-sqlparse))
+    (native-inputs
+     (list python-ipython-sql))
+    (home-page "https://www.pgcli.com")
+    (synopsis "PostgreSQL CLI with autocompletion and syntax highlighting")
+    (description
+     "@code{pgcli} is a command line interface for PostgreSQL with
+autocompletion and syntax highlighting.")
+    (license license:bsd-3)))
 
 (define-public mycli
   (package
     (name "mycli")
-    (version "1.22.2")
+    (version "1.24.1")
     (source
-      (origin
-        (method url-fetch)
-        (uri (pypi-uri "mycli" version))
-        (sha256
-          (base32 "1lq2x95553vdmhw13cxcgsd2g2i32izhsb7hxd4m1iwf9b3msbpv"))))
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "mycli" version))
+       (sha256
+        (base32 "0rij9nw20zhqr7cqnkm8daw8b1wdc9zb6ny1ji9qz5557nz9i3bl"))))
     (build-system python-build-system)
     (arguments
-     `(#:tests? #f))                    ; tests expect a running MySQL
+     '(#:tests? #f                      ; tests expect a running MySQL
+       #:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'loosen-requirements
+                    (lambda _
+                      ;; Permit newer versions of sqlparse.
+                      (substitute* "setup.py"
+                        (("<0\\.4\\.0") "<0.5.0")))))))
     (propagated-inputs
-      `(("python-cli-helpers" ,python-cli-helpers)
-        ("python-click" ,python-click)
-        ("python-configobj" ,python-configobj)
-        ("python-cryptography" ,python-cryptography)
-        ("python-prompt-toolkit" ,python-prompt-toolkit)
-        ("python-pygments" ,python-pygments)
-        ("python-pymysql" ,python-pymysql)
-        ("python-sqlparse" ,python-sqlparse)))
-    (home-page "http://mycli.net")
+     (list python-cli-helpers
+           python-click
+           python-configobj
+           python-cryptography
+           python-prompt-toolkit
+           python-pyaes
+           python-pygments
+           python-pymysql
+           python-pyperclip
+           python-sqlparse))
+    (home-page "https://www.mycli.net")
     (synopsis
-      "Terminal Client for MySQL with AutoCompletion and Syntax Highlighting")
+     "Terminal Client for MySQL with AutoCompletion and Syntax Highlighting")
     (description
-      "MyCLI is a command line interface for MySQL, MariaDB, and Percona with
+     "MyCLI is a command line interface for MySQL, MariaDB, and Percona with
 auto-completion and syntax highlighting.")
     (license license:bsd-3)))
 
@@ -721,22 +822,20 @@ auto-completion and syntax highlighting.")
                             ,(string-append sed "/bin"))))
                        #t))))))
     (native-inputs
-     `(("bison" ,bison)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list bison perl pkg-config))
     (inputs
-     `(("boost" ,boost-for-mysql)
-       ("coreutils" ,coreutils)
-       ("gawk" ,gawk)
-       ("grep" ,grep)
-       ("libaio" ,libaio)
-       ("libtirpc" ,libtirpc)
-       ("ncurses" ,ncurses)
-       ("openssl" ,openssl)
-       ("procps" ,procps)
-       ("rpcsvc-proto" ,rpcsvc-proto) ; rpcgen
-       ("sed" ,sed)
-       ("zlib" ,zlib)))
+     (list boost-for-mysql
+           coreutils
+           gawk
+           grep
+           libaio
+           libtirpc
+           ncurses
+           openssl
+           procps
+           rpcsvc-proto ; rpcgen
+           sed
+           zlib))
     (home-page "https://www.mysql.com/")
     (synopsis "Fast, easy to use, and popular database")
     (description
@@ -748,7 +847,7 @@ Language.")
 (define-public mariadb
   (package
     (name "mariadb")
-    (version "10.5.8")
+    (version "10.5.12")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://downloads.mariadb.com/MariaDB"
@@ -756,7 +855,7 @@ Language.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "1s3vfm73911cddjhgpcbkya6nz7ag2zygg56qqzwscn5ybv28j7b"))
+                "1gg4h9ahmk78cx01zyw0fqr6hhd78fsyhs0s34p3gi9hkak1qkxb"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -775,9 +874,7 @@ Language.")
                               (unless (string-suffix? "CMakeLists.txt" file)
                                 (delete-file file)))
                             (append (find-files "extra/wolfssl")
-                                    (find-files "zlib")))
-                  #t))))
-    (replacement mariadb/fixed)
+                                    (find-files "zlib")))))))
     (build-system cmake-build-system)
     (outputs '("out" "lib" "dev"))
     (arguments
@@ -832,6 +929,10 @@ Language.")
                         "/share/mysql/support-files")
          "-DINSTALL_MYSQLSHAREDIR=share/mysql"
          "-DINSTALL_SHAREDIR=share")
+       ;; The test suite has spurious failures (mostly timeouts) if run in
+       ;; parallel on various machines.  Only enable parallel tests on
+       ;; architectures which are likely to not have this issue.
+       #:parallel-tests? ,(target-x86-64?)
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'adjust-output-references
@@ -859,37 +960,32 @@ Language.")
                 "${INSTALL_INCLUDEDIR}"))
              (substitute* "cmake/mariadb_connector_c.cmake"
                (("\\\\\\$\\{CMAKE_INSTALL_PREFIX\\}/\\$\\{INSTALL_BINDIR\\}")
-                "${INSTALL_BINDIR}"))
-             #t))
+                "${INSTALL_BINDIR}"))))
          (add-after 'unpack 'adjust-tests
            (lambda _
              (let ((disabled-tests
                     '(;; These fail because root@hostname == root@localhost in
                       ;; the build environment, causing a user count mismatch.
                       ;; See <https://jira.mariadb.org/browse/MDEV-7761>.
-                      "funcs_1.is_columns_mysql"
-                      "main.join_cache"
                       "main.explain_non_select"
-                      "main.stat_tables"
-                      "main.stat_tables_innodb"
                       "main.upgrade_MDEV-19650"
                       "roles.acl_statistics"
 
+                      ;; Probably same as above, test failure reported upstream:
+                      ;; <https://jira.mariadb.org/browse/MDEV-26320>.
+                      "main.selectivity_no_engine"
+
                       ;; FIXME: This test checks various table encodings and
                       ;; fails because Guix defaults to UTF8 instead of the
                       ;; upstream default latin1_swedish_ci.  It's not easily
                       ;; substitutable because several encodings are tested.
-                      "main.sp2"
+                      "main.system_mysql_db"
 
                       ;; XXX: This test occasionally fails on i686-linux:
                       ;; <https://jira.mariadb.org/browse/MDEV-24458>
                       ,@(if (string-prefix? "i686" (%current-system))
                             '("main.myisampack")
-                            '())
-
-                      ;; This file contains a time bomb which makes it fail after
-                      ;; 2030-12-31.  See <https://bugs.gnu.org/34351> for details.
-                      "main.mysqldump"))
+                            '())))
 
                    ;; This file contains a list of known-flaky tests for this
                    ;; release.  Append our own items.
@@ -913,8 +1009,7 @@ Language.")
 
                (substitute* "mysql-test/mysql-test-run.pl"
                  (("/bin/ls") (which "ls"))
-                 (("/bin/sh") (which "sh")))
-               #t)))
+                 (("/bin/sh") (which "sh"))))))
          (add-before 'configure 'disable-plugins
            (lambda _
              (let ((disable-plugin (lambda (name)
@@ -925,24 +1020,25 @@ Language.")
                                          (format port "\n")))))
                    (disabled-plugins '(;; XXX: Causes a test failure.
                                        "disks")))
-               (for-each disable-plugin disabled-plugins)
-               #t)))
+               (for-each disable-plugin disabled-plugins))))
          (replace 'check
-           (lambda* (#:key (tests? #t) #:allow-other-keys)
+           (lambda* (#:key (tests? #t) parallel-tests? #:allow-other-keys)
              (if tests?
                  (with-directory-excursion "mysql-test"
                    (invoke "./mtr" "--verbose"
                            "--retry=3"
+                           "--suite=main"
                            "--testcase-timeout=40"
                            "--suite-timeout=600"
-                           "--parallel" (number->string (parallel-job-count))
+                           "--parallel" (number->string (if parallel-tests?
+                                                          (parallel-job-count)
+                                                          1))
                            ;; Skip the replication tests: they are very I/O
                            ;; intensive and frequently causes indeterministic
                            ;; failures even on powerful hardware.
                            "--skip-rpl"
                            "--skip-test-list=unstable-tests"))
-                 (format #t "test suite not run~%"))
-             #t))
+                 (format #t "test suite not run~%"))))
          (add-after
           'install 'post-install
           (lambda* (#:key inputs outputs #:allow-other-keys)
@@ -987,12 +1083,9 @@ Language.")
               (substitute* (list (string-append dev "/bin/mysql_config")
                                  (string-append dev "/lib/pkgconfig/mariadb.pc"))
                 (("-lssl -lcrypto" all)
-                 (string-append "-L" openssl "/lib " all)))
-
-              #t))))))
+                 (string-append "-L" openssl "/lib " all)))))))))
     (native-inputs
-     `(("bison" ,bison)
-       ("perl" ,perl)))
+     (list bison perl))
     (inputs
      `(("jemalloc" ,jemalloc)
        ("libaio" ,libaio)
@@ -1013,13 +1106,6 @@ 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")
@@ -1035,7 +1121,7 @@ as a drop-in replacement of MySQL.")
        (sha256
         (base32 "0xb8fiissblxb319y5ifqqp86zblwis789ipb753pcb4zpnsaw82"))))
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (build-system cmake-build-system)
     (arguments
      '(#:tests? #f))                    ; no tests
@@ -1048,21 +1134,19 @@ developed in C/C++ to MariaDB and MySQL databases.")
 (define-public galera
   (package
     (name "galera")
-    (version "26.4.7")
+    (version "26.4.10")
     (source (origin
               (method git-fetch)
               (uri (git-reference
-                    (commit "bac8171266cb982fe013ce496d78085438c6f23e")
                     (url "https://github.com/codership/galera")
+                    (commit (string-append "release_" version))
                     (recursive? #t)))
               (file-name (git-file-name name version))
               (sha256
-               (base32 "0h7s670pcasq8wzprhyxqfca2cghi62b8xz2kikb2a86wd453qil"))))
+               (base32 "1n6zhzwj713ixyqvcjn4ldlq0y9fxqgvmqv3cj3h4207v9lwlxxz"))))
     (build-system cmake-build-system)
     (inputs
-     `(("check" ,check)
-       ("boost" ,boost)
-       ("openssl" ,openssl)))
+     (list check boost openssl))
     (home-page "https://github.com/codership/galera/")
     (synopsis "Extension to the MariaDB database server")
     (description
@@ -1071,17 +1155,17 @@ 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
+(define-public postgresql-14
   (package
     (name "postgresql")
-    (version "13.3")
+    (version "14.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://ftp.postgresql.org/pub/source/v"
                                   version "/postgresql-" version ".tar.bz2"))
               (sha256
                (base32
-                "18dliq7h2l8irffhyyhdmfwx3si515q6gds3cxdjb9n7m17lbn9w"))
+                "07x45iycqpps0qh3ingc09jgn9rpnmc3gixx0qprhf5flwg10g2d"))
               (patches (search-patches "postgresql-disable-resolve_symlinks.patch"))))
     (build-system gnu-build-system)
     (arguments
@@ -1100,6 +1184,12 @@ and high-availability (HA).")
                                       "src/bin/psql/command.c")
                          (("/bin/sh") (which "sh")))
                        #t))
+         (add-before 'configure 'set-socket-dir
+           (lambda _
+             (substitute* '("src/include/pg_config_manual.h")
+               (("DEFAULT_PGSOCKET_DIR[^\n]*")
+                "DEFAULT_PGSOCKET_DIR \"/var/run/postgresql\""))
+             #t))
          (add-after 'build 'build-contrib
            (lambda _
              (invoke "make" "-C" "contrib")))
@@ -1122,6 +1212,18 @@ TIMESTAMP.  It also supports storage of binary large objects, including
 pictures, sounds, or video.")
     (license (license:x11-style "file://COPYRIGHT"))))
 
+(define-public postgresql-13
+  (package
+    (inherit postgresql-14)
+    (version "13.4")
+    (source (origin
+              (inherit (package-source postgresql-14))
+              (uri (string-append "https://ftp.postgresql.org/pub/source/v"
+                                  version "/postgresql-" version ".tar.bz2"))
+              (sha256
+               (base32
+                "1kf0gcsrl5n25rjlvkh87aywmn28kbwvakm5c7j1qpr4j01y34za"))))))
+
 (define-public postgresql-11
   (package
     (inherit postgresql-13)
@@ -1164,7 +1266,7 @@ pictures, sounds, or video.")
 (define-public pgloader
   (package
     (name "pgloader")
-    (version "3.6.2")
+    (version "3.6.3")
     (source
      (origin
        (method git-fetch)
@@ -1172,7 +1274,7 @@ pictures, sounds, or video.")
              (url "https://github.com/dimitri/pgloader")
              (commit (string-append "v" version))))
        (sha256
-        (base32 "06i1jd2za3ih5caj2b4vzlzags5j65vv8dfdbz0ggdrp40wfd5lh"))
+        (base32 "147dcf0rmi94p95dvifx8qy7602fvs041dv9wlg3q31ly13agwb5"))
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (arguments
@@ -1180,63 +1282,59 @@ pictures, sounds, or video.")
      ;; dependent on Quicklisp, main build target is `pgloader-standalone' which
      ;; does not require Quicklisp workarounds. There is no `install' target
      ;; configured in Makefile.
-     `(#:tests? #f
-       #:strip-binaries? #f
-       #:make-flags
-       (list "pgloader-standalone" "BUILDAPP_SBCL=buildapp")
-       #:phases
-       (modify-phases %standard-phases
-         (delete 'configure)
-         (add-after 'unpack 'set-home
-           (lambda _
-             (setenv "HOME" "/tmp")
-             #t))
-         (add-after 'unpack 'patch-Makefile
-           (lambda _
-             (substitute* "Makefile"
-               (("--sbcl.*") "--sbcl $(CL) --asdf-path . \\\n"))
-             #t))
-         (replace 'install
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((bin (string-append (assoc-ref outputs "out") "/bin")))
-               (mkdir-p bin)
-               (install-file "build/bin/pgloader"  bin))
-             #t)))))
+     (list #:tests? #f
+           #:strip-binaries? #f
+           #:make-flags
+           #~(list "pgloader-standalone" "BUILDAPP_SBCL=buildapp")
+           #:phases
+           #~(modify-phases %standard-phases
+               (delete 'configure)
+               (add-after 'unpack 'set-home
+                 (lambda _
+                   (setenv "HOME" "/tmp")))
+               (add-after 'unpack 'patch-Makefile
+                 (lambda _
+                   (substitute* "Makefile"
+                     (("--sbcl.*") "--sbcl $(CL) --asdf-path . \\\n"))))
+               (replace 'install
+                 (lambda* (#:key outputs #:allow-other-keys)
+                   (let ((bin (string-append #$output "/bin")))
+                     (mkdir-p bin)
+                     (install-file "build/bin/pgloader"  bin)))))))
     (native-inputs
-     `(("buildapp" ,buildapp)
-       ("sbcl" ,sbcl)))
+     (list buildapp sbcl))
     (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("cl-abnf" ,sbcl-cl-abnf)
-       ("cl-base64" ,sbcl-cl-base64)
-       ("cl-csv" ,sbcl-cl-csv)
-       ("cl-fad" ,sbcl-cl-fad)
-       ("cl-log" ,sbcl-cl-log)
-       ("cl-markdown" ,sbcl-cl-markdown)
-       ("cl-mustache" ,sbcl-cl-mustache)
-       ("cl-ppcre" ,sbcl-cl-ppcre)
-       ("cl-sqlite" ,sbcl-cl-sqlite)
-       ("closer-mop" ,sbcl-closer-mop)
-       ("command-line-arguments" ,sbcl-command-line-arguments)
-       ("db3" ,sbcl-db3)
-       ("drakma" ,sbcl-drakma)
-       ("esrap" ,sbcl-esrap)
-       ("flexi-streams" ,sbcl-flexi-streams)
-       ("ixf" ,sbcl-ixf)
-       ("local-time" ,sbcl-local-time)
-       ("lparallel" ,sbcl-lparallel)
-       ("metabang-bind" ,sbcl-metabang-bind)
-       ("mssql" ,sbcl-mssql)
-       ("postmodern" ,sbcl-postmodern)
-       ("py-configparser" ,sbcl-py-configparser)
-       ("qmynd" ,sbcl-qmynd)
-       ("quri" ,sbcl-quri)
-       ("split-sequence" ,sbcl-split-sequence)
-       ("trivial-backtrace" ,sbcl-trivial-backtrace)
-       ("usocket" ,sbcl-usocket)
-       ("uuid" ,sbcl-uuid)
-       ("yason" ,sbcl-yason)
-       ("zs3" ,sbcl-zs3)))
+     (list sbcl-alexandria
+           sbcl-cl-abnf
+           sbcl-cl-base64
+           sbcl-cl-csv
+           sbcl-cl-fad
+           sbcl-cl-log
+           sbcl-cl-markdown
+           sbcl-cl-mustache
+           sbcl-cl-ppcre
+           sbcl-cl-sqlite
+           sbcl-closer-mop
+           sbcl-command-line-arguments
+           sbcl-db3
+           sbcl-drakma
+           sbcl-esrap
+           sbcl-flexi-streams
+           sbcl-ixf
+           sbcl-local-time
+           sbcl-lparallel
+           sbcl-metabang-bind
+           sbcl-mssql
+           sbcl-postmodern
+           sbcl-py-configparser
+           sbcl-qmynd
+           sbcl-quri
+           sbcl-split-sequence
+           sbcl-trivial-backtrace
+           sbcl-usocket
+           sbcl-uuid
+           sbcl-yason
+           sbcl-zs3))
     (home-page "https://pgloader.io/")
     (synopsis "Tool to migrate data to PostgreSQL")
     (description
@@ -1256,9 +1354,9 @@ CSV, DB3, iXF, SQLite, MS-SQL or MySQL to PostgreSQL.")
         (base32 "1ry8lxgdc1p3k7gbw20r405jqi5lvhi5wk83kxdbiv8xv3f5kh6q"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-unittest2" ,python-unittest2)))
+     (list python-unittest2))
     (inputs
-     `(("python-cryptography" ,python-cryptography)))
+     (list python-cryptography))
     (arguments
      `(#:tests? #f))                    ; tests expect a running MySQL
     (home-page "https://github.com/PyMySQL/PyMySQL/")
@@ -1336,30 +1434,43 @@ types are supported, as is encryption.")
     (license license:gpl3+)
     (home-page "https://www.gnu.org/software/recutils/")))
 
-(define-public emacs-recutils
+(define-public emacs-rec-mode
   (package
-    (inherit recutils)
-    (name "emacs-recutils")
+    (name "emacs-rec-mode")
+    (version "1.8.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://elpa.gnu.org/packages/"
+                                  "rec-mode-" version ".tar"))
+              (sha256
+               (base32
+                "06mjj1la2v8zdhsflj3mwcp7qnkj7gxzm8wbk2pli1h8vnq2zvd0"))
+              (snippet '(begin (delete-file "rec-mode.info")))))
     (build-system emacs-build-system)
     (arguments
      '(#:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'change-directory
+         (add-before 'install 'make-info
            (lambda _
-             (chdir "etc")
-             #t)))))
-    (native-inputs '())
-    (inputs '())
+             (invoke "makeinfo" "--no-split"
+                     "-o" "rec-mode.info" "rec-mode.texi"))))))
+    (native-inputs
+     `(("texinfo" ,texinfo)))
+    (home-page "https://www.gnu.org/software/recutils/")
     (synopsis "Emacs mode for working with recutils database files")
     (description "This package provides an Emacs major mode @code{rec-mode}
 for working with GNU Recutils text-based, human-editable databases.  It
 supports editing, navigation, and querying of recutils database files
-including field and record folding.")))
+including field and record folding.")
+    (license license:gpl3+)))
+
+(define-public emacs-recutils
+  (deprecated-package "emacs-recutils" emacs-rec-mode))
 
 (define-public rocksdb
   (package
     (name "rocksdb")
-    (version "6.11.4")
+    (version "6.26.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1368,92 +1479,50 @@ including field and record folding.")))
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0n19p9cd13jg0lnibrzwkxs4xlrhyj3knypkd2ic41arbds0bdnl"))
+                "0mylma106w93kxhj89g9y1ccdq7m9m94wrmv5nyr17yc1zsk87sg"))
               (modules '((guix build utils)))
               (snippet
                '(begin
                   ;; TODO: unbundle gtest.
                   (delete-file "build_tools/gnu_parallel")
                   (substitute* "Makefile"
-                    (("build_tools/gnu_parallel") "parallel"))
-                  #t))))
-    (build-system gnu-build-system)
+                    (("build_tools/gnu_parallel") "parallel"))))))
+    (build-system cmake-build-system)
     (arguments
-     `(#:make-flags (list "CC=gcc" "V=1"
-                          ;; Ceph requires that RTTI is enabled.
-                          "USE_RTTI=1"
-                          "date=1970-01-01" ; build reproducibly
-                          (string-append "INSTALL_PATH="
-                                         (assoc-ref %outputs "out"))
-
-                          ;; Running the full test suite takes hours and require
-                          ;; a lot of disk space.  Instead we only run a subset
-                          ;; (see .travis.yml and Makefile).
-                          "ROCKSDBTESTS_END=db_tailing_iter_test")
-       #:test-target "check_some"
-       ;; Many tests fail on 32-bit platforms. There are multiple reports about
-       ;; this upstream, but it's not going to be supported any time soon.
-       #:tests? (let ((system ,(or (%current-target-system)
-                                   (%current-system))))
-                  (or (string-prefix? "x86_64-linux" system)
-                      (string-prefix? "aarch64-linux" system)))
+     `(#:configure-flags
+       (list "-DROCKSDB_BUILD_SHARED=1"
+             ;; Ceph requires that RTTI is enabled.
+             "-DUSE_RTTI=1"
+             ;; Prevent the build from passing '-march=native' to the compiler.
+             "-DPORTABLE=1")
+
+       ;; Many tests fail on 32-bit platforms. There are multiple
+       ;; reports about this upstream, but it's not going to be
+       ;; supported any time soon.  What's worse: Release builds don't
+       ;; include tests, and overriding the build system to build
+       ;; tests anyway fails with missing TEST_ symbols.
+       #:tests? #false
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'patch-Makefile
+         (add-after 'unpack 'patch-CMakeLists.txt
            (lambda _
-             (substitute* "Makefile"
-               ;; Don't depend on the static library when installing.
-               (("install: install-static")
-                "install: install-shared")
-               (("#!/bin/sh") (string-append "#!" (which "sh"))))
-             #t))
-         (delete 'configure)
-         ;; The default target is only needed for tests and built on demand.
-         (delete 'build)
-         (add-before 'check 'mount-tmp
-           ;; Use the provided workspace directory for test files.
-           ;; Otherwise, /tmp is used which is a mount namespace on /gnu/store.
-           ;; This speeds up the build when the host /tmp is a proper tmpfs or
-           ;; other fast filesystem, as opposed to /gnu which may be a HDD.
-           (lambda _
-             (let ((test-dir (string-append (getcwd) "/../test")))
-               (mkdir test-dir)
-               (setenv "TEST_TMPDIR" (canonicalize-path test-dir)))))
-         (add-before 'check 'disable-optimizations
-           (lambda _
-             ;; Prevent the build from passing '-march=native' to the compiler.
-             (setenv "PORTABLE" "1")
-             #t))
-         (add-before 'check 'disable-failing-tests
+             (substitute* "CMakeLists.txt"
+               ;; build reproducibly
+               (("set\\(BUILD_DATE \"\\$\\{TS\\}\"")
+                "set(BUILD_DATE \"1970-01-01\""))))
+         (add-after 'unpack 'build-generically
            (lambda _
-             (substitute* "Makefile"
-               ;; These tests reliably fail due to "Too many open files".
-               (("^[[:blank:]]+env_test[[:blank:]]+\\\\") "\\")
-               (("^[[:blank:]]+persistent_cache_test[[:blank:]]+\\\\") "\\"))
-             #t))
-         (add-after 'check 'build
-           ;; The default build target is a debug build for tests. The
-           ;; install target depends on the "shared_lib" release target
-           ;; so we build it here for clarity.
-           (lambda* (#:key (make-flags '()) parallel-build? #:allow-other-keys)
-               (apply invoke "make" "shared_lib"
-                      `(,@(if parallel-build?
-                              `("-j" ,(number->string (parallel-job-count)))
-                              '())
-                        ,@make-flags)))))))
+             (substitute* "CMakeLists.txt"
+               (("if\\(HAVE_SSE42\\)") "if(FALSE)")))))))
     (native-inputs
-     `(("parallel" ,parallel)
-       ("perl" ,perl)
-       ("procps" ,procps)
-       ("python" ,python-2)
-       ("which" ,which)))
+     (list parallel perl procps python which))
     (inputs
-     `(("bzip2" ,bzip2)
-       ("gflags" ,gflags)
-       ("jemalloc" ,jemalloc)
-       ("lz4" ,lz4)
-       ("snappy" ,snappy)
-       ("zlib" ,zlib)))
+     (list bzip2
+           gflags
+           jemalloc
+           lz4
+           snappy
+           zlib))
     (home-page "https://rocksdb.org/")
     (synopsis "Persistent key-value store for fast storage")
     (description
@@ -1482,13 +1551,9 @@ data in a single database.  RocksDB is partially based on @code{LevelDB}.")
               (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (inputs
-     `(("curl" ,curl)
-       ("glib" ,glib)
-       ("libxml2" ,libxml2)
-       ("ncurses" ,ncurses)
-       ("readline" ,readline)))
+     (list curl glib libxml2 ncurses readline))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
      `(#:make-flags '("CC=gcc")
        #:phases
@@ -1562,20 +1627,20 @@ for example from a shell script.")
                                     path)))))
              #t)))))
     (native-inputs
-     `(("perl-capture-tiny" ,perl-capture-tiny)
-       ("perl-io-pager" ,perl-io-pager)
-       ("perl-module-build" ,perl-module-build)
-       ("perl-module-runtime" ,perl-module-runtime)
-       ("perl-path-class" ,perl-path-class)
-       ("perl-test-deep" ,perl-test-deep)
-       ("perl-test-dir" ,perl-test-dir)
-       ("perl-test-exception" ,perl-test-exception)
-       ("perl-test-file" ,perl-test-file)
-       ("perl-test-file-contents" ,perl-test-file-contents)
-       ("perl-test-mockmodule" ,perl-test-mockmodule)
-       ("perl-test-mockobject" ,perl-test-mockobject)
-       ("perl-test-nowarnings" ,perl-test-nowarnings)
-       ("perl-test-warn" ,perl-test-warn)))
+     (list perl-capture-tiny
+           perl-io-pager
+           perl-module-build
+           perl-module-runtime
+           perl-path-class
+           perl-test-deep
+           perl-test-dir
+           perl-test-exception
+           perl-test-file
+           perl-test-file-contents
+           perl-test-mockmodule
+           perl-test-mockobject
+           perl-test-nowarnings
+           perl-test-warn))
     (inputs
      `(("perl-class-xsaccessor" ,perl-class-xsaccessor)
        ("perl-clone" ,perl-clone)
@@ -1634,10 +1699,8 @@ which uses SQL to describe changes.")
                   "0x3wy40r93p0jv3nbwj9a77wa4ff697d13r0wffmm7q9h3mzsww8"))))
       (build-system python-build-system)
       (inputs
-       `(("python-cryptography" ,python-cryptography)
-         ("python-psycopg2" ,python-psycopg2)
-         ("python-pymysql" ,python-pymysql)
-         ("python-sqlalchemy" ,python-sqlalchemy)))
+       (list python-cryptography python-psycopg2 python-pymysql
+             python-sqlalchemy))
       (home-page "https://github.com/coffeeandscripts/sqlcrush")
       (synopsis "Text console-based database viewer and editor")
       (description
@@ -1670,12 +1733,12 @@ changes.")
                (invoke "./configure"
                        (string-append "--prefix=" out))))))))
     (native-inputs
-     `(;; TODO: Build the documentation.
-       ;; ("docbook-xsl" ,docbook-xsl)
-       ;; ("libxml2" ,libxml2)
-       ;; ("libxslt" ,libxslt)
-       ("python" ,python)                         ;for the Waf build system
-       ("which" ,which)))
+     (list ;; TODO: Build the documentation.
+           ;; ("docbook-xsl" ,docbook-xsl)
+           ;; ("libxml2" ,libxml2)
+           ;; ("libxslt" ,libxslt)
+           python ;for the Waf build system
+           which))
     (home-page "https://tdb.samba.org/")
     (synopsis "Trivial database")
     (description
@@ -1716,35 +1779,35 @@ extremely small.")
         (base32 "1rh7idjjbibc1zmiaaarask434lh0lx7f2xyfwmy37k9fa0xcpmh"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-dbd-sqlite" ,perl-dbd-sqlite)
-       ("perl-file-temp" ,perl-file-temp)
-       ("perl-module-install" ,perl-module-install)
-       ("perl-package-stash" ,perl-package-stash)
-       ("perl-test-deep" ,perl-test-deep)
-       ("perl-test-exception" ,perl-test-exception)
-       ("perl-test-warn" ,perl-test-warn)))
+     (list perl-dbd-sqlite
+           perl-file-temp
+           perl-module-install
+           perl-package-stash
+           perl-test-deep
+           perl-test-exception
+           perl-test-warn))
     (propagated-inputs
-     `(("perl-class-accessor-grouped" ,perl-class-accessor-grouped)
-       ("perl-class-c3-componentised" ,perl-class-c3-componentised)
-       ("perl-class-inspector" ,perl-class-inspector)
-       ("perl-config-any" ,perl-config-any)
-       ("perl-context-preserve" ,perl-context-preserve)
-       ("perl-data-dumper-concise" ,perl-data-dumper-concise)
-       ("perl-data-page" ,perl-data-page)
-       ("perl-dbi" ,perl-dbi)
-       ("perl-devel-globaldestruction" ,perl-devel-globaldestruction)
-       ("perl-hash-merge" ,perl-hash-merge)
-       ("perl-module-find" ,perl-module-find)
-       ("perl-moo" ,perl-moo)
-       ("perl-mro-compat" ,perl-mro-compat)
-       ("perl-namespace-clean" ,perl-namespace-clean)
-       ("perl-path-class" ,perl-path-class)
-       ("perl-scalar-list-utils" ,perl-scalar-list-utils)
-       ("perl-scope-guard" ,perl-scope-guard)
-       ("perl-sql-abstract-classic" ,perl-sql-abstract-classic)
-       ("perl-sub-name" ,perl-sub-name)
-       ("perl-text-balanced" ,perl-text-balanced)
-       ("perl-try-tiny" ,perl-try-tiny)))
+     (list perl-class-accessor-grouped
+           perl-class-c3-componentised
+           perl-class-inspector
+           perl-config-any
+           perl-context-preserve
+           perl-data-dumper-concise
+           perl-data-page
+           perl-dbi
+           perl-devel-globaldestruction
+           perl-hash-merge
+           perl-module-find
+           perl-moo
+           perl-mro-compat
+           perl-namespace-clean
+           perl-path-class
+           perl-scalar-list-utils
+           perl-scope-guard
+           perl-sql-abstract-classic
+           perl-sub-name
+           perl-text-balanced
+           perl-try-tiny))
     (home-page "https://metacpan.org/release/DBIx-Class")
     (synopsis "Extensible and flexible object <-> relational mapper")
     (description "An SQL to OO mapper with an object API inspired by
@@ -1771,12 +1834,9 @@ single query, \"JOIN\", \"LEFT JOIN\", \"COUNT\", \"DISTINCT\", \"GROUP BY\",
          "09b2jahn2x12qm4f7qm1jzsxbz7qn1czp6a3fnl5l2i3l4r5421p"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-cache-cache" ,perl-cache-cache)
-       ("perl-dbd-sqlite" ,perl-dbd-sqlite)
-       ("perl-module-install" ,perl-module-install)))
+     (list perl-cache-cache perl-dbd-sqlite perl-module-install))
     (propagated-inputs
-     `(("perl-carp-clan" ,perl-carp-clan)
-       ("perl-dbix-class" ,perl-dbix-class)))
+     (list perl-carp-clan perl-dbix-class))
     (home-page "https://metacpan.org/release/DBIx-Class-Cursor-Cached")
     (synopsis "Cursor with built-in caching support")
     (description "DBIx::Class::Cursor::Cached provides a cursor class with
@@ -1797,9 +1857,9 @@ built-in caching support.")
          "1w47rh2241iy5x3a9bqsyd5kdp9sk43dksr99frzv4qn4jsazfn6"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)))
+     (list perl-module-install))
     (propagated-inputs
-     `(("perl-dbix-class" ,perl-dbix-class)))
+     (list perl-dbix-class))
     (home-page "https://metacpan.org/release/DBIx-Class-IntrospectableM2M")
     (synopsis "Introspect many-to-many relationships")
     (description "Because the many-to-many relationships are not real
@@ -1824,40 +1884,40 @@ introspected and examined.")
          "0r57fv71ypxafb85cpxph1hdqii7ipjwvc19yb6fpkvq2ggcssg8"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-config-any" ,perl-config-any)
-       ("perl-config-general" ,perl-config-general)
-       ("perl-dbd-sqlite" ,perl-dbd-sqlite)
-       ("perl-dbix-class-introspectablem2m" ,perl-dbix-class-introspectablem2m)
-       ("perl-module-install" ,perl-module-install)
-       ("perl-moose" ,perl-moose)
-       ("perl-moosex-markasmethods" ,perl-moosex-markasmethods)
-       ("perl-moosex-nonmoose" ,perl-moosex-nonmoose)
-       ("perl-namespace-autoclean" ,perl-namespace-autoclean)
-       ("perl-test-deep" ,perl-test-deep)
-       ("perl-test-differences" ,perl-test-differences)
-       ("perl-test-exception" ,perl-test-exception)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-warn" ,perl-test-warn)))
+     (list perl-config-any
+           perl-config-general
+           perl-dbd-sqlite
+           perl-dbix-class-introspectablem2m
+           perl-module-install
+           perl-moose
+           perl-moosex-markasmethods
+           perl-moosex-nonmoose
+           perl-namespace-autoclean
+           perl-test-deep
+           perl-test-differences
+           perl-test-exception
+           perl-test-pod
+           perl-test-warn))
     (propagated-inputs
-     `(("perl-class-unload" ,perl-class-unload)
-       ("perl-class-inspector" ,perl-class-inspector)
-       ("perl-class-accessor-grouped" ,perl-class-accessor-grouped)
-       ("perl-class-c3-componentised" ,perl-class-c3-componentised)
-       ("perl-carp-clan" ,perl-carp-clan)
-       ("perl-data-dump" ,perl-data-dump)
-       ("perl-dbix-class" ,perl-dbix-class)
-       ("perl-hash-merge" ,perl-hash-merge)
-       ("perl-list-moreutils" ,perl-list-moreutils)
-       ("perl-lingua-en-inflect-phrase" ,perl-lingua-en-inflect-phrase)
-       ("perl-lingua-en-inflect-number" ,perl-lingua-en-inflect-number)
-       ("perl-lingua-en-tagger" ,perl-lingua-en-tagger)
-       ("perl-namespace-clean" ,perl-namespace-clean)
-       ("perl-mro-compat" ,perl-mro-compat)
-       ("perl-scope-guard" ,perl-scope-guard)
-       ("perl-string-camelcase" ,perl-string-camelcase)
-       ("perl-string-toidentifier-en" ,perl-string-toidentifier-en)
-       ("perl-sub-name" ,perl-sub-name)
-       ("perl-try-tiny" ,perl-try-tiny)))
+     (list perl-class-unload
+           perl-class-inspector
+           perl-class-accessor-grouped
+           perl-class-c3-componentised
+           perl-carp-clan
+           perl-data-dump
+           perl-dbix-class
+           perl-hash-merge
+           perl-list-moreutils
+           perl-lingua-en-inflect-phrase
+           perl-lingua-en-inflect-number
+           perl-lingua-en-tagger
+           perl-namespace-clean
+           perl-mro-compat
+           perl-scope-guard
+           perl-string-camelcase
+           perl-string-toidentifier-en
+           perl-sub-name
+           perl-try-tiny))
     (arguments `(#:tests? #f))          ;TODO: t/20invocations.t fails
     (home-page "https://metacpan.org/release/DBIx-Class-Schema-Loader")
     (synopsis "Create a DBIx::Class::Schema based on a database")
@@ -1880,10 +1940,9 @@ columns, primary keys, unique constraints and relationships.")
          "0kcfqq7g3832wiix0sbyvlc885qghjrp2ah3akn7h2lnb22fjwy9"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-dbi" ,perl-dbi)))
+     (list perl-dbi))
     (propagated-inputs
-     `(("perl-dbi" ,perl-dbi)
-       ("postgresql" ,postgresql)))
+     (list perl-dbi postgresql))
     (home-page "https://metacpan.org/release/DBD-Pg")
     (synopsis "DBI PostgreSQL interface")
     (description "This package provides a PostgreSQL driver for the Perl5
@@ -1941,8 +2000,8 @@ columns, primary keys, unique constraints and relationships.")
                (base32
                 "1zljln5nh61gj3k22a1fv2vhx5l83waizmarwkh77hk6kzzmvrw9"))))
     (build-system perl-build-system)
-    (inputs `(("sqlite" ,sqlite)))
-    (propagated-inputs `(("perl-dbi" ,perl-dbi)))
+    (inputs (list sqlite))
+    (propagated-inputs (list perl-dbi))
     (synopsis "SQlite interface for Perl")
     (description "DBD::SQLite is a Perl DBI driver for SQLite, that includes
 the entire thing in the distribution.  So in order to get a fast transaction
@@ -1987,15 +2046,10 @@ libmysqlclient.  It will fill an array with long options, ready to be parsed by
         (base32 "0jhw91b23wc9bkfwcgvka4x5ddxk58m9bcp5ay7a3vx77nla09p9"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)
-       ("perl-test-deep" ,perl-test-deep)
-       ("perl-test-exception" ,perl-test-exception)
-       ("perl-test-warn" ,perl-test-warn)))
+     (list perl-module-install perl-test-deep perl-test-exception
+           perl-test-warn))
     (propagated-inputs
-     `(("perl-hash-merge" ,perl-hash-merge)
-       ("perl-moo" ,perl-moo)
-       ("perl-mro-compat" ,perl-mro-compat)
-       ("perl-text-balanced" ,perl-text-balanced)))
+     (list perl-hash-merge perl-moo perl-mro-compat perl-text-balanced))
     (home-page "https://metacpan.org/release/SQL-Abstract")
     (synopsis "Generate SQL from Perl data structures")
     (description "This module was inspired by the excellent DBIx::Abstract.
@@ -2019,12 +2073,9 @@ time your data changes.")
         (base32 "0a7g13hs3kdxrjn43sfli09mgsi9d6w0dfw6hlk268av17yisgaf"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-deep" ,perl-test-deep)
-       ("perl-test-exception" ,perl-test-exception)
-       ("perl-test-warn" ,perl-test-warn)))
+     (list perl-test-deep perl-test-exception perl-test-warn))
     (propagated-inputs
-     `(("perl-mro-compat" ,perl-mro-compat)
-       ("perl-sql-abstract" ,perl-sql-abstract)))
+     (list perl-mro-compat perl-sql-abstract))
     (home-page "https://metacpan.org/release/SQL-Abstract-Classic")
     (synopsis "Generate SQL from Perl data structures")
     (description
@@ -2055,14 +2106,10 @@ your data changes, as this module figures it out.")
         (base32 "0ppkx46nydzlnsxf9a8pkyb74wggfrdiiwafab143lrarlh88x0s"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-differences" ,perl-test-differences)
-       ("perl-test-exception" ,perl-test-exception)
-       ("perl-test-script" ,perl-test-script)))
+     (list perl-test-differences perl-test-exception perl-test-script))
     (propagated-inputs
-     `(("perl-class-accessor" ,perl-class-accessor)
-       ("perl-list-moreutils" ,perl-list-moreutils)
-       ("perl-regexp-common" ,perl-regexp-common)
-       ("perl-sql-tokenizer" ,perl-sql-tokenizer)))
+     (list perl-class-accessor perl-list-moreutils perl-regexp-common
+           perl-sql-tokenizer))
     (home-page "https://metacpan.org/release/SQL-SplitStatement")
     (synopsis "Split SQL code into atomic statements")
     (description "This module tries to split any SQL code, even including
@@ -2132,7 +2179,7 @@ Driver.")
              "-DBUILD_SHARED_LIBS=ON")
        #:tests? #false))
     (inputs
-     `(("unixodbc" ,unixodbc)))
+     (list unixodbc))
     (home-page "https://nanodbc.io/")
     (synopsis "C++ wrapper for the native C ODBC API")
     (description "The goal for nanodbc is to make developers happy by providing
@@ -2199,30 +2246,29 @@ easy, requiring concise and simple code.")
      "UnQLite is an in-process software library which implements a
 self-contained, serverless, zero-configuration, transactional NoSQL
 database engine.  UnQLite is a document store database similar to
-MongoDB, Redis, CouchDB, etc. as well as a standard Key/Value store
+Redis, CouchDB, etc., as well as a standard key/value store
 similar to BerkeleyDB, LevelDB, etc.")
     (license license:bsd-2)))
 
 (define-public redis
   (package
     (name "redis")
-    (version "6.2.4")
+    (version "6.2.6")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://download.redis.io/releases/redis-"
                                   version".tar.gz"))
               (sha256
                (base32
-                "0vp1d9mlfsppry3nsj9f7bmh9wjgsy3jggp24sac1hhgl43c8cms"))
+                "1ariw5x33hmmm3d5al0j3307l5kf3vhmn78wpyaz67hia1x8nasv"))
               (modules '((guix build utils)))
               (snippet
                ;; Delete bundled jemalloc, as the package will use the libc one
-               '(begin (delete-file-recursively "deps/jemalloc")
-                       #t))))
+               '(begin (delete-file-recursively "deps/jemalloc")))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("procps" ,procps)               ; for tests
-       ("tcl" ,tcl)))                   ; for tests
+     (list procps ; for tests
+           tcl))                   ; for tests
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -2233,8 +2279,7 @@ similar to BerkeleyDB, LevelDB, etc.")
                (("^TCLSH=.*")
                 (string-append "TCLSH="
                                (assoc-ref inputs "tcl")
-                               "/bin/tclsh")))
-             #t))
+                               "/bin/tclsh")))))
          (add-after 'unpack 'adjust-tests
            (lambda _
              ;; Disable failing tests
@@ -2242,8 +2287,7 @@ similar to BerkeleyDB, LevelDB, etc.")
                (("integration/failover") "")
                (("integration/replication-4") "")
                (("integration/replication-psync") "")
-               (("integration/replication[^-]") ""))
-             #t)))
+               (("integration/replication[^-]") "")))))
        #:make-flags `("CC=gcc"
                       "MALLOC=libc"
                       "LDFLAGS=-ldl"
@@ -2295,7 +2339,7 @@ one-to-one, while still providing an idiomatic interface.")
         "--disable-opt" ;"-march=native". XXX this also turns off -O0.
         (string-append "LDFLAGS=-Wl,-rpath="
                        (assoc-ref %outputs "out") "/lib"))))
-    (inputs `(("zlib" ,zlib)))
+    (inputs (list zlib))
     (home-page "https://fallabs.com/kyotocabinet/")
     (synopsis
      "Kyoto Cabinet is a modern implementation of the DBM database")
@@ -2324,7 +2368,7 @@ database and supports many programming languages.  It is a NoSQL database.")
         (string-append "LDFLAGS=-Wl,-rpath="
                        (assoc-ref %outputs "out") "/lib"))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "http://fallabs.com/tokyocabinet/")
     (synopsis "Tokyo Cabinet is a modern implementation of the DBM database")
     (description
@@ -2360,9 +2404,7 @@ organized in hash table, B+ tree, or fixed-length array.")
                (("test/fops") ""))
              #t)))))
     (inputs
-     `(("lz4" ,lz4)
-       ("zlib" ,zlib)
-       ("snappy" ,snappy)))
+     (list lz4 zlib snappy))
     (home-page "http://source.wiredtiger.com/")
     (synopsis "NoSQL data engine")
     (description
@@ -2409,14 +2451,11 @@ trees (LSM), for sustained throughput under random insert workloads.")
                             (assoc-ref %build-inputs "wiredtiger")))
        #:make-flags '("GUILE_AUTO_COMPILE=0")))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config))
     (inputs
-     `(("wiredtiger" ,wiredtiger-3)
-       ("guile" ,guile-2.2)))
+     (list wiredtiger-3 guile-2.2))
     (propagated-inputs
-     `(("guile-bytestructures" ,guile-bytestructures)))
+     (list guile-bytestructures))
     (synopsis "WiredTiger bindings for GNU Guile")
     (description
      "This package provides Guile bindings to the WiredTiger ``NoSQL''
@@ -2436,8 +2475,8 @@ database.")
       (sha256
         (base32 "1ab6rm2b8lz0g3gc8k9y79gkgajyby0zpybkdg9mk4g35y9bmyfd"))))
   (build-system perl-build-system)
-  (inputs `(("bdb" ,bdb)))
-  (native-inputs `(("perl-test-pod" ,perl-test-pod)))
+  (inputs (list bdb))
+  (native-inputs (list perl-test-pod))
   (arguments
      `(#:phases (modify-phases %standard-phases
                   (add-before
@@ -2528,7 +2567,7 @@ virtual address space — not physical RAM.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (build-system gnu-build-system)
-    (inputs `(("lmdb" ,lmdb)))
+    (inputs (list lmdb))
     (home-page "https://github.com/hoytech/lmdbxx")
     (synopsis "C++11 wrapper for the LMDB embedded B+ tree database library")
     (description "@code{lmdbxx} is a comprehensive @code{C++} wrapper for the
@@ -2552,7 +2591,7 @@ semantics.")
     (build-system gnu-build-system)
     (native-inputs
      `(("python" ,python-2)))
-    (inputs `(("postgresql" ,postgresql)))
+    (inputs (list postgresql))
     (arguments
      `(#:tests? #f   ; # FAIL:  1
        #:phases
@@ -2574,20 +2613,20 @@ on another machine, accessed via TCP/IP.")
 (define-public python-peewee
   (package
     (name "python-peewee")
-    (version "3.14.0")
+    (version "3.14.4")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "peewee" version))
        (sha256
-        (base32 "1yl49gxrg0c2x3n3r60z3lixw9am8b61s0477l9vjabhhx1yziar"))))
+        (base32 "18jidir2wid0cp8a61m9vf9mf0pdvm6nzspc8bfwdbifghr6ndcy"))))
     (build-system python-build-system)
     (arguments
      `(#:tests? #f))                    ; fails to import test data
     (inputs
-     `(("sqlite" ,sqlite)))
+     (list sqlite))
     (native-inputs
-     `(("python-cython" ,python-cython)))
+     (list python-cython))
     (home-page "https://github.com/coleifer/peewee/")
     (synopsis "Small object-relational mapping utility")
     (description
@@ -2601,51 +2640,145 @@ can autogenerate peewee models using @code{pwiz}, a model generator.")
 (define-public python2-peewee
   (package-with-python2 python-peewee))
 
+(define-public python-pypika-tortoise
+  (package
+    (name "python-pypika-tortoise")
+    (version "0.1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pypika-tortoise" version))
+       (sha256
+        (base32 "0g4z0lz739nk04b405ynqpd3y1z5nfyxjz9hqgxcw3jydsjx0cb8"))))
+    (build-system python-build-system)
+    (home-page "https://github.com/tortoise/pypika-tortoise")
+    (synopsis "Pypika fork for tortoise-orm")
+    (description "Pypika-tortoise is a fork of pypika which has been
+streamlined for its use in the context of tortoise-orm.  It removes support
+for many database kinds that tortoise-orm doesn't need, for example.")
+    (license license:asl2.0)))
+
+(define-public python-sphinxcontrib-asyncio
+  (package
+    (name "python-sphinxcontrib-asyncio")
+    (version "0.3.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "sphinxcontrib-asyncio" version))
+        (sha256
+          (base32 "0bkj010ygsr7m769llf2aq4bbjfhdwqrrabi98j8gpvyzvh2dzcr"))))
+    (build-system python-build-system)
+    (arguments '(#:tests? #f))          ;no test suite
+    (propagated-inputs (list python-sphinx))
+    (home-page "https://github.com/aio-libs/sphinxcontrib-asyncio")
+    (synopsis "Sphinx extension to support coroutines in markup")
+    (description "This package is a Sphinx extension providing additional
+coroutine-specific markup.")
+    (license license:asl2.0)))
+
+(define-public python-asyncpg
+  (package
+    (name "python-asyncpg")
+    (version "0.24.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "asyncpg" version))
+       (sha256
+        (base32 "1in0q6iffpl8ag6ady4bvwnn40igh10cpp4xgm426j1lqdis0byx"))))
+    (build-system python-build-system)
+    (propagated-inputs (list python-typing-extensions))
+    (native-inputs
+     (list postgresql
+           python-cython
+           python-flake8
+           python-pycodestyle
+           python-pytest
+           python-sphinx
+           python-sphinx-rtd-theme
+           python-sphinxcontrib-asyncio
+           python-uvloop))
+    (home-page "https://github.com/MagicStack/asyncpg")
+    (synopsis "Fast PostgreSQL database client library for Python")
+    (description "@code{asyncpg} is a database interface library designed
+specifically for PostgreSQL and Python/asyncio.  @code{asyncpg} is an
+efficient, clean implementation of PostgreSQL server binary protocol for use
+with Python's asyncio framework.")
+    (license license:asl2.0)))
+
+(define-public python-asyncmy
+  (package
+    (name "python-asyncmy")
+    (version "0.2.3")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "asyncmy" version))
+        (sha256
+          (base32 "19p81jd4w7m7v2x1jdrwibp67wzqx1a7rdw5n4qqmch3iffp97vn"))))
+    (build-system python-build-system)
+    (native-inputs (list python-cython))
+    (home-page "https://github.com/long2ice/asyncmy")
+    (synopsis "Fast MySQL driver for Python")
+    (description "@code{asyncmy} is a fast @code{asyncio} MySQL driver, which
+reuses most of @code{pymysql} and @code{aiomysql} but rewrites the core
+protocol with Cython for performance.")
+    (license license:asl2.0)))
+
+(define-public python-aiomysql
+  (package
+    (name "python-aiomysql")
+    (version "0.0.21")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "aiomysql" version))
+        (sha256
+          (base32 "0b442d0jb82z3lk19ylmm64ix88ppz7gay08bxld538ivg06j5c1"))))
+    (build-system python-build-system)
+    (arguments '(#:tests? #f))           ;test suite requires docker
+    (propagated-inputs (list python-pymysql))
+    (home-page "https://github.com/aio-libs/aiomysql")
+    (synopsis "MySQL driver for Python")
+    (description "@code{aiomysql} is a driver for accessing a MySQL database
+from the @code{asyncio} Python framework.  It depends on and reuses most parts
+of PyMySQL.  @code{aiomysql} tries to preserve the same API as the
+@code{aiopg} library.")
+    (license license:expat)))
+
 (define-public python-tortoise-orm
   (package
     (name "python-tortoise-orm")
-    (version "0.16.21")
+    (version "0.17.8")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "tortoise-orm" version))
        (sha256
-        (base32
-         "1dallk0q8q4v37klm0v3rppf2w8sjkqmypc1w8r9rraqxg1ylacp"))))
+        (base32 "1gzgiypln7lck3p95vk3i8rdx1bjbmmlcpb8xpba8cjdjvlj0l0z"))))
     (build-system python-build-system)
-    (arguments
-     `(#:tests? #f ; Pypi does not have tests and Git snapshot depends on
-                   ; poetry.
-       #:phases (modify-phases %standard-phases
-                  (add-after 'unpack 'relax-version-requirements
-                    (lambda _
-                      (substitute* "setup.py"
-                        (("pypika>=0\\.44\\.0,<0\\.45\\.0") "pypika")
-                        (("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)
-       ("python-nose2" ,python-nose2)))
+    ;; The test suite relies on asynctest, which is abandoned and doesn't
+    ;; support Python >= 3.8.
+    (arguments '(#:tests? #f))
     (propagated-inputs
-     `(("python-aiosqlite" ,python-aiosqlite)
-       ("python-pypika" ,python-pypika)
-       ("python-ciso8601" ,python-ciso8601)
-       ("python-pytz" ,python-pytz)
-       ("python-typing-extensions"
-        ,python-typing-extensions)))
-    (home-page
-     "https://github.com/tortoise/tortoise-orm")
-    (synopsis
-     "Easy async ORM for python, built with relations in mind")
-    (description
-     "Tortoise ORM is an easy-to-use asyncio ORM (Object Relational Mapper)
-inspired by Django.  Tortoise ORM was build with relations in mind and
-admiration for the excellent and popular Django ORM.  It’s engraved in its
-design that you are working not with just tables, you work with relational
-data.")
+     (list python-aiomysql
+           python-aiosqlite
+           python-asyncmy
+           python-asyncpg
+           python-ciso8601
+           python-iso8601
+           python-pypika-tortoise
+           python-pytz
+           python-rapidjson
+           python-uvloop))
+    (home-page "https://github.com/tortoise/tortoise-orm")
+    (synopsis "Asynchronous Object Relational Mapper (ORM) for Python")
+    (description "Tortoise ORM is an easy-to-use asyncio ORM (Object
+Relational Mapper) inspired by Django.  Tortoise ORM was built with relations
+in mind and admiration for the excellent and popular Django ORM.  It's
+engraved in its design that you are working not with just tables, you work
+with relational data.")
     (license license:asl2.0)))
 
 (define-public sqlcipher
@@ -2665,7 +2798,7 @@ data.")
      `(("libcrypto" ,openssl)
        ("libtcl8.6" ,tcl))) ; required for running the tests
     (native-inputs
-     `(("tcl" ,tcl)))
+     (list tcl))
     (arguments
      '(#:configure-flags
        '("--enable-tempstore=yes"
@@ -2712,7 +2845,7 @@ development.")
        (file-name (string-append name "-" version ".tar.gz"))))
     (build-system python-build-system)
     (inputs
-     `(("unixodbc" ,unixodbc)))
+     (list unixodbc))
     (arguments
      `(;; No unit tests exist.
        #:tests? #f))
@@ -2738,7 +2871,7 @@ for ODBC.")
        (file-name (string-append name "-" version ".tar.gz"))))
     (build-system python-build-system)
     (inputs
-     `(("unixodbc" ,unixodbc)))
+     (list unixodbc))
     (arguments
      `(#:tests? #f))                    ; no unit tests exist
     (home-page "https://github.com/mkleehammer/pyodbc")
@@ -2766,14 +2899,14 @@ for ODBC.")
          "0gwcpp9y09xhs21g7my2fs8ncb8i6ahlyixcx8jd3q97jbzj441l"))))
     (build-system gnu-build-system)
     (inputs
-     `(("glib" ,glib)))
+     (list glib))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)
-       ("txt2man" ,txt2man)
-       ("which" ,which)))
+     (list autoconf
+           automake
+           libtool
+           pkg-config
+           txt2man
+           which))
     (home-page "http://mdbtools.sourceforge.net/")
     (synopsis "Read Microsoft Access databases")
     (description "MDB Tools is a set of tools and applications to read the
@@ -2805,7 +2938,7 @@ etc., and an SQL engine for performing simple SQL queries.")
                   #t))))
     (build-system python-build-system)
     (inputs
-     `(("lmdb" ,lmdb)))
+     (list lmdb))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -2845,19 +2978,19 @@ Memory-Mapped Database} (LMDB), a high-performance key-value store.")
     ;; does not contain setup.py.  How to test?
     (arguments '(#:tests? #f))
     (propagated-inputs
-     `(("python-backpack" ,python-backpack)
-       ("python-blinker" ,python-blinker)
-       ("python-cleo" ,python-cleo)
-       ("python-faker" ,python-faker)
-       ("python-inflection" ,python-inflection)
-       ("python-lazy-object-proxy" ,python-lazy-object-proxy)
-       ("python-pendulum" ,python-pendulum)
-       ("python-pyaml" ,python-pyaml)
-       ("python-pygments" ,python-pygments)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-simplejson" ,python-simplejson)
-       ("python-six" ,python-six)
-       ("python-wrapt" ,python-wrapt)))
+     (list python-backpack
+           python-blinker
+           python-cleo
+           python-faker
+           python-inflection
+           python-lazy-object-proxy
+           python-pendulum
+           python-pyaml
+           python-pygments
+           python-pyyaml
+           python-simplejson
+           python-six
+           python-wrapt))
     (home-page "https://orator-orm.com/")
     (synopsis "ActiveRecord ORM for Python")
     (description
@@ -2896,10 +3029,7 @@ implementation for Python.")
                          '("libvirtuoso-t.a"
                            "libvirtuoso-t.la"))))))))
     (inputs
-     `(("openssl" ,openssl)
-       ("net-tools" ,net-tools)
-       ("readline" ,readline)
-       ("zlib" ,zlib)))
+     (list openssl net-tools readline zlib))
     (home-page "http://vos.openlinksw.com/owiki/wiki/VOS/")
     (synopsis "Multi-model database system")
     (description "Virtuoso is a scalable cross-platform server that combines
@@ -2922,11 +3052,10 @@ and web services platform functionality.")
          "177dfxsmk3k4cih6fh6v8d91bh4nqx7ns6pc07w7m7i3cvdx3c8n"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pyyaml" ,python-pyyaml)
-       ;; Not listed in setup.py, but used in ccmlib/node.py for full
-       ;; functionality
-       ("python-psutil" ,python-psutil)
-       ("python-six" ,python-six)))
+     (list python-pyyaml
+           ;; Not listed in setup.py, but used in ccmlib/node.py for full
+           ;; functionality
+           python-psutil python-six))
     (home-page "https://github.com/pcmanus/ccm")
     (synopsis "Cassandra Cluster Manager for Apache Cassandra clusters on
 localhost")
@@ -2951,7 +3080,7 @@ on localhost.")
         "1424gwq9sil2ffmnizk60q36vydkv8rxs6m7xs987kz8cdc37lqp"))))
     (build-system python-build-system)
     (inputs
-     `(("sqlite" ,sqlite)))
+     (list sqlite))
     (arguments
      `(#:python ,python-2 ; incompatible with Python 3
        #:tests? #f)) ; no test target
@@ -2965,25 +3094,26 @@ Database API 2.0T.")
 (define-public python-sqlalchemy
   (package
     (name "python-sqlalchemy")
-    (version "1.4.23")
+    (version "1.4.31")
     (source
      (origin
       (method url-fetch)
       (uri (pypi-uri "SQLAlchemy" version))
       (sha256
-       (base32 "10vm8hm8w4yfsab076ak8r4vp5v1jqdi71cky6dhha7mh5l29zvn"))))
+       (base32 "06448s883bb8fgca33bn0pfaj15la0g4cax2mmx482kqwp8mjasq"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-cython" ,python-cython) ; for C extensions
-       ("python-pytest" ,python-pytest)
-       ("python-mock"   ,python-mock))) ; for tests
+     (list python-cython ; for C extensions
+           python-pytest python-mock)) ; for tests
     (propagated-inputs
-     `(("python-greenlet" ,python-greenlet)))
+     (list python-greenlet))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda _ (invoke "py.test"))))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "py.test")))))))
     (home-page "https://www.sqlalchemy.org")
     (synopsis "Database abstraction library")
     (description
@@ -3010,8 +3140,7 @@ simple and Pythonic domain language.")
          "1bppjmv7v7m0q8gwg791pgxbx4ay7mna0zq204pn9vw28kfxcrf6"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-mypy" ,python-mypy)
-       ("python-typing-extensions" ,python-typing-extensions)))
+     (list python-mypy python-typing-extensions))
     (home-page "https://github.com/dropbox/sqlalchemy-stubs")
     (synopsis "SQLAlchemy stubs and mypy plugin")
     (description "This package contains type stubs and a mypy plugin to
@@ -3022,14 +3151,14 @@ framework.")
 (define-public python-sqlalchemy-utils
   (package
     (name "python-sqlalchemy-utils")
-    (version "0.32.21")
+    (version "0.38.2")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "SQLAlchemy-Utils" version))
         (sha256
          (base32
-          "1myn71dn8j74xglyh46f12sh8ywb7j0j732rzwq70kvwwnq32m73"))))
+          "1d6fq81489kqzxmk3l6f39sinw206lzs392frmpr5lsjzg9xc0cy"))))
     (build-system python-build-system)
     (arguments
      '(#:tests? #f)) ; FIXME: Many tests require a running database server.
@@ -3039,14 +3168,10 @@ framework.")
        ;;     (lambda _
        ;;       (zero? (system* "py.test" "sqlalchemy_utils" "tests")))))
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-sqlalchemy" ,python-sqlalchemy)))
+     (list python-six python-sqlalchemy))
     (native-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-flexmock" ,python-flexmock)
-       ("python-psycopg2" ,python-psycopg2)
-       ("python-pytest" ,python-pytest)
-       ("python-pytz" ,python-pytz)))
+     (list python-dateutil python-flexmock python-psycopg2 python-pytest
+           python-pytz))
     (home-page "https://github.com/kvesteri/sqlalchemy-utils")
     (synopsis "Various utility functions for SQLAlchemy")
     (description
@@ -3066,9 +3191,6 @@ You might also want to install the following optional dependencies:
 ")
     (license license:bsd-3)))
 
-(define-public python2-sqlalchemy-utils
-  (package-with-python2 python-sqlalchemy-utils))
-
 (define-public python-alchemy-mock
   (package
     (name "python-alchemy-mock")
@@ -3095,11 +3217,9 @@ doctest_optionflags=IGNORE_EXCEPTION_DETAIL
                       (invoke "pytest" "-vv" "--doctest-modules"
                               "alchemy_mock/"))))))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)))
+     (list python-mock python-pytest))
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-sqlalchemy" ,python-sqlalchemy)))
+     (list python-six python-sqlalchemy))
     (synopsis "Mock helpers for SQLAlchemy")
     (description
      "This package provides mock helpers for SQLAlchemy that makes it easy
@@ -3113,13 +3233,13 @@ this library provides functions to facilitate such comparisons.")
 (define-public python-alembic
   (package
     (name "python-alembic")
-    (version "1.7.1")
+    (version "1.7.5")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "alembic" version))
        (sha256
-        (base32 "1ys0a44gh544xpbzz6r5xvz3msim74f9qklyfnw0bhn9vk9n9adf"))))
+        (base32 "0lxi2g2025lz5k7k5dd5fc1lfijqi2yw6qqyjzp073z6laa8cckw"))))
     (build-system python-build-system)
     (arguments
      '(#:phases (modify-phases %standard-phases
@@ -3127,14 +3247,9 @@ this library provides functions to facilitate such comparisons.")
                     (lambda _
                       (invoke "pytest" "-vv"))))))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest-cov" ,python-pytest-cov)))
+     (list python-mock python-pytest-cov))
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-importlib-resources" ,python-importlib-resources) ;Python < 3.9
-       ("python-sqlalchemy" ,python-sqlalchemy)
-       ("python-mako" ,python-mako)
-       ("python-editor" ,python-editor)))
+     (list python-dateutil python-sqlalchemy python-mako python-editor))
     (home-page "https://bitbucket.org/zzzeek/alembic")
     (synopsis "Database migration tool for SQLAlchemy")
     (description
@@ -3159,7 +3274,7 @@ SQLAlchemy Database Toolkit for Python.")
                     (lambda _
                       (invoke "pytest"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/vivainio/pickleshare")
     (synopsis "Tiny key value database with concurrency support")
     (description
@@ -3177,13 +3292,14 @@ PickleShare.")
   (let ((pickleshare (package-with-python2
                       (strip-python2-variant python-pickleshare))))
     (package (inherit pickleshare)
-      (propagated-inputs `(("python2-pathlib2" ,python2-pathlib2)
-                           ,@(package-propagated-inputs pickleshare))))))
+      (propagated-inputs (modify-inputs (package-propagated-inputs
+                                                        pickleshare)
+                           (prepend python2-pathlib2))))))
 
 (define-public python-apsw
   (package
     (name "python-apsw")
-    (version "3.31.1-r1")
+    (version "3.36.0-r1")
     (source
       (origin
         (method url-fetch)
@@ -3191,12 +3307,12 @@ PickleShare.")
                             "/download/" version "/apsw-" version ".zip"))
         (sha256
           (base32
-           "1gap5lr6c7bp134nzvfwr693i6d0fqyaysg3ms2cayjldv616yfx"))))
+           "0w8q73147hv77dlpqrx6h1gx03acc8xqhvdpfp6vkffdm0wmqd8p"))))
     (build-system python-build-system)
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (inputs
-     `(("sqlite" ,sqlite)))
+     (list sqlite))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -3246,9 +3362,9 @@ translate the complete SQLite API into Python.")
                           (format #t "test suite not run~%"))
                       #t)))))
     (propagated-inputs
-     `(("python-typing-extensions" ,python-typing-extensions)))
+     (list python-typing-extensions))
     (native-inputs
-     `(("python-aiounittest" ,python-aiounittest)))
+     (list python-aiounittest))
     (home-page "https://github.com/jreese/aiosqlite")
     (synopsis
      "Asyncio bridge for sqlite3")
@@ -3303,29 +3419,127 @@ designed to be easy and intuitive to use.")
 (define-public python-psycopg2
   (package
     (name "python-psycopg2")
-    (version "2.8.6")
+    (version "2.9.3")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "psycopg2" version))
        (sha256
-        (base32 "0hzmk6b1hb5riqkljr5xics6p4zbvmis6knbczb7zhq7273zc8zv"))))
+        (base32 "1099as8ind9kpz30rmqzc3nir668fmpkxwayrj2sjka3ycdiv14f"))))
     (build-system python-build-system)
     (arguments
      ;; Tests would require a postgresql database "psycopg2_test"
      ;; and a running postgresql database management service.
-     `(#:tests? #f)) ; TODO re-enable after providing a test-db.
+     '(#:tests? #f)) ; TODO re-enable after providing a test-db.
     (inputs
-     `(("postgresql" ,postgresql))) ; libpq
-    (home-page "http://initd.org/psycopg/")
+     (list postgresql)) ; libpq
+    (home-page "https://www.psycopg.org/")
     (synopsis "Python PostgreSQL adapter")
     (description
      "psycopg2 is a thread-safe PostgreSQL adapter that implements DB-API
 2.0.")
     (license license:lgpl3+)))
 
-(define-public python2-psycopg2
-  (package-with-python2 python-psycopg2))
+(define-public python-psycopg-pool
+  (package
+    (name "python-psycopg-pool")
+    ;; The connection pooling code is on a different release cadence
+    ;; from the driver code, so fetch the latest PyPI release.
+    (version "3.0.3")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "psycopg-pool" version))
+              (sha256
+               (base32
+                "1nx139pwzsgrz253zjxw2sf8h713s79h4cp1falmpc39j08djb46"))))
+    (build-system python-build-system)
+    (arguments
+     (list #:tests? #f                  ;run for psycopg below
+           #:phases
+           #~(modify-phases %standard-phases
+               ;; This module requires 'psycopg', however psycopg needs this
+               ;; for its tests.  Disable sanity check to break the cycle.
+               (delete 'sanity-check))))
+    (home-page "https://www.psycopg.org/")
+    (synopsis "Connection pooler for psycopg")
+    (description
+     "This module provides connection pool implementations that can be used
+with the @code{psycopg} PostgreSQL driver.")
+    (license license:lgpl3+)))
+
+(define-public python-psycopg
+  (package
+    (name "python-psycopg")
+    (version "3.0.8")
+    (source (origin
+              ;; Fetch from git because PyPI contains only cythonized sources.
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/psycopg/psycopg")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "16i19jqd9lg9r7bc63ssh527cccrpf49g1nlayikk5qlswpzp75y"))))
+    (build-system python-build-system)
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-before 'build 'change-directory
+                 (lambda _
+                   (chdir "psycopg")))
+               (add-after 'build 'build-c-extensions
+                 (lambda _
+                   (with-directory-excursion "../psycopg_c"
+                     ((assoc-ref %standard-phases 'build)))))
+               (add-after 'install 'install-c-extensions
+                 (lambda* (#:key inputs outputs #:allow-other-keys)
+                   ;; For some reason setup.py refuses to install if the
+                   ;; installation directory is not on PYTHONPATH.
+                   (setenv "PYTHONPATH" (site-packages inputs outputs))
+                   (with-directory-excursion "../psycopg_c"
+                     ((assoc-ref %standard-phases 'install)
+                      #:inputs inputs
+                      #:outputs outputs))))
+               (add-before 'check 'start-postgresql
+                 (lambda _
+                   (let ((dbdir (string-append (getcwd) "/../pgdir")))
+                     (invoke "initdb" "-D" dbdir)
+                     (invoke "pg_ctl" "-D" dbdir
+                             "-o" (string-append "-k " dbdir)
+                             "-l" (string-append dbdir "/db.log")
+                             "start")
+
+	             (invoke "psql" "-h" dbdir "-d" "postgres"
+                             "-c" "CREATE DATABASE nixbld;"))))
+               (replace 'check
+                 (lambda* (#:key inputs tests? #:allow-other-keys)
+                   (when tests?
+                     (setenv "TZDIR" (search-input-directory inputs
+                                                             "share/zoneinfo"))
+                     (with-directory-excursion ".."
+                       (invoke "pytest" "-vv"
+                               "-o" "asyncio_mode=auto"
+                               ;; FIXME: Many of the typing tests are failing,
+                               ;; conveniently tagged as slow...
+                               "-k" "not slow"))))))))
+    (native-inputs
+     (list python-cython-3
+           python-mypy
+           python-psycopg-pool
+           python-pytest
+           python-pytest-asyncio
+           python-tenacity
+           pproxy
+           tzdata-for-tests))
+    (inputs
+     (list postgresql))
+    (home-page "https://www.psycopg.org/")
+    (synopsis "PostgreSQL driver for Python")
+    (description
+     "Psycopg 3 is a new implementation of the popular @code{psycopg2}
+database adapter for Python.")
+    (license license:lgpl3+)))
 
 (define-public python-sadisplay
   (package
@@ -3351,10 +3565,10 @@ designed to be easy and intuitive to use.")
                             (invoke "pytest" "-vv"))
                           (format #t "test suite not run~%")))))))
     (propagated-inputs
-      `(("python-sqlalchemy" ,python-sqlalchemy)))
+      (list python-sqlalchemy))
     (native-inputs
      ;; For tests.
-      `(("python-pytest" ,python-pytest)))
+      (list python-pytest))
     (home-page "https://bitbucket.org/estin/sadisplay")
     (synopsis "SQLAlchemy schema displayer")
     (description "This package provides a program to build Entity
@@ -3362,9 +3576,6 @@ Relationship diagrams from a SQLAlchemy model (or directly from the
 database).")
     (license license:bsd-3)))
 
-(define-public python2-sadisplay
-  (package-with-python2 python-sadisplay))
-
 (define-public yoyo-migrations
   (package
     (name "yoyo-migrations")
@@ -3386,8 +3597,7 @@ database).")
      ;; fails to connect to it.
      '(#:tests? #f))
     (propagated-inputs
-     `(("python-sqlparse" ,python-sqlparse)
-       ("python-tabulate" ,python-tabulate)))
+     (list python-sqlparse python-tabulate))
     (home-page "https://ollycope.com/software/yoyo/latest/")
     (synopsis "Database migrations with SQL")
     (description
@@ -3448,20 +3658,20 @@ parsing code in hiredis.  It primarily speeds up parsing of multi bulk replies."
 (define-public python-fakeredis
   (package
     (name "python-fakeredis")
-    (version "1.2.1")
+    (version "1.7.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "fakeredis" version))
        (sha256
         (base32
-         "1s12mn4q4hz7402139khn9fx56kibj7nn0d6w81hn0zs07b90wpc"))))
+         "0wacd3f558vzsrpdvgvdwy9pp6crxf8hxblz30zbsv1k63j15gf9"))))
     (build-system python-build-system)
     (arguments
      ;; no tests
      `(#:tests? #f))
     (propagated-inputs
-      `(("python-sortedcontainers" ,python-sortedcontainers)))
+     (list python-packaging python-redis python-sortedcontainers))
     (home-page "https://github.com/jamesls/fakeredis")
     (synopsis "Fake implementation of redis API for testing purposes")
     (description
@@ -3474,9 +3684,6 @@ talk to an external server such as redis.  This module can be used as a
 reasonable substitute.")
     (license license:bsd-3)))
 
-(define-public python2-fakeredis
-  (package-with-python2 python-fakeredis))
-
 (define-public python-redis
   (package
     (name "python-redis")
@@ -3531,12 +3738,9 @@ reasonable substitute.")
                                                       (getenv "PATH")))
                         (invoke "pytest" "-vv")))))))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("redis" ,redis)))
+     (list python-mock python-pytest redis))
     (propagated-inputs
-     `(("python-click" ,python-click)
-       ("python-redis" ,python-redis)))
+     (list python-click python-redis))
     (home-page "https://python-rq.org/")
     (synopsis "Simple job queues for Python")
     (description
@@ -3572,11 +3776,9 @@ is designed to have a low barrier to entry.")
                          (which "env")))
                       (invoke "./run_tests.py"))))))
     (native-inputs
-     `(("redis" ,redis)
-       ("which" ,which)))
+     (list redis which))
     (propagated-inputs
-     `(("python-croniter" ,python-croniter)
-       ("python-rq" ,python-rq)))
+     (list python-croniter python-rq))
     (synopsis "Job scheduling capabilities for RQ (Redis Queue)")
     (description
      "This package provides job scheduling capabilities to @code{python-rq}
@@ -3610,13 +3812,13 @@ is designed to have a low barrier to entry.")
 (define-public python-sqlparse
   (package
     (name "python-sqlparse")
-    (version "0.4.1")
+    (version "0.4.2")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "sqlparse" version))
               (sha256
                (base32
-                "1s2l0jgi1v7rk7smzb99iamasaz22apfkczsphn3ci4wh8pgv48g"))))
+                "1bkx52c2jh28c528b69qfk2ijfzw1laxx6lim7jr8fi6fh67600c"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -3639,12 +3841,13 @@ is designed to have a low barrier to entry.")
                            (string-append output sitedir))
                          (list python out))))))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/andialbrecht/sqlparse")
     (synopsis "Non-validating SQL parser")
     (description "Sqlparse is a non-validating SQL parser for Python.  It
 provides support for parsing, splitting and formatting SQL statements.")
-    (license license:bsd-3)))
+    (license license:bsd-3)
+    (properties '((cpe-name . "sqlparse")))))
 
 (define-public python-sql
   (package
@@ -3663,9 +3866,6 @@ provides support for parsing, splitting and formatting SQL statements.")
 transforms idiomatic python function calls to well-formed SQL queries.")
     (license license:bsd-3)))
 
-(define-public python2-sql
-  (package-with-python2 python-sql))
-
 (define-public python-pypika
   (package
     (name "python-pypika")
@@ -3681,7 +3881,7 @@ transforms idiomatic python function calls to well-formed SQL queries.")
                "001pg36sw9a36zdd1kccbymcxndphjcjbbrsy6ri7ng8h4dgz549"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-parameterized" ,python-parameterized)))
+     (list python-parameterized))
     (home-page "https://github.com/kayak/pypika")
     (synopsis "SQL query builder API for Python")
     (description
@@ -3694,7 +3894,7 @@ the SQL language using a syntax that reflects the resulting query.")
 (define-public apache-arrow
   (package
     (name "apache-arrow")
-    (version "5.0.0")
+    (version "6.0.1")
     (source
      (origin
        (method git-fetch)
@@ -3704,7 +3904,7 @@ the SQL language using a syntax that reflects the resulting query.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0275aayzy78nbxzbj93w5152sv5q2c7020ijxnf8b58v9qwfxzz0"))))
+         "0mcw361akqw4sxnnpnr9c9v1zk4hphk6gcq763pcb19yzljh88ig"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f
@@ -3743,6 +3943,10 @@ the SQL language using a syntax that reflects the resulting query.")
              "-DARROW_DEPENDENCY_SOURCE=SYSTEM"
              "-Dxsimd_SOURCE=SYSTEM"
 
+             "-DARROW_RUNTIME_SIMD_LEVEL=NONE"
+             "-DARROW_SIMD_LEVEL=NONE"
+             "-DARROW_PACKAGE_KIND=Guix"
+
              ;; Split output into its component packages.
              (string-append "-DCMAKE_INSTALL_PREFIX="
                             (assoc-ref %outputs "lib"))
@@ -3784,27 +3988,26 @@ the SQL language using a syntax that reflects the resulting query.")
              ;;"-DBENCHMARK_ENABLE_TESTING=OFF"
              "-DARROW_BUILD_STATIC=OFF")))
     (inputs
-     `(("apache-thrift" ,apache-thrift "lib")
-       ("boost" ,boost)
-       ("brotli" ,google-brotli)
+     `(("boost" ,boost)
+       ("brotli" ,brotli)
        ("bzip2" ,bzip2)
        ("double-conversion" ,double-conversion)
        ("gflags" ,gflags)
        ("glog" ,glog)
        ("grpc" ,grpc)
-       ("lz4" ,lz4)
        ("protobuf" ,protobuf)
        ("python-3" ,python)
        ("python-numpy" ,python-numpy)
        ("rapidjson" ,rapidjson)
        ("re2" ,re2)
        ("snappy" ,snappy)
-       ("utf8proc" ,utf8proc)
-       ("xsimd" ,xsimd)
-       ("zlib" ,zlib)
-       ("zstd" ,zstd "lib")))
+       ("xsimd" ,xsimd)))
+    ;; These are all listed under Requires.private in arrow.pc
+    (propagated-inputs
+     (list `(,apache-thrift "lib") lz4 utf8proc zlib
+           `(,zstd "lib")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (outputs '("out" "lib" "include"))
     (home-page "https://arrow.apache.org/")
     (synopsis "Columnar in-memory analytics")
@@ -3885,7 +4088,7 @@ other traditional Python scientific computing packages.")
                 "0ngmlvi320c5gsxab0s7qgq0ck4jdlcwvb6lbjhnfprafdp56vvx"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-urllib3" ,python-urllib3)))
+     (list python-urllib3))
     (home-page "https://github.com/crate/crate-python")
     (synopsis "CrateDB Python client")
     (description
@@ -3929,10 +4132,8 @@ simultaneous database connections by using this framework.")
                 "0m680h8cc4428xin4p733azysamzgzcmv4psjvraykrsaz6ymlj3"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(;; For tests.
-       ("inetutils" ,inetutils)
-       ("glibc-locales" ,glibc-locales)
-       ("mariadb" ,mariadb)))
+     (list ;; For tests.
+           inetutils glibc-locales mariadb))
     (inputs
      `(("libdbi" ,libdbi)
        ("mariadb:dev" ,mariadb "dev")
@@ -4046,10 +4247,33 @@ PostreSQL, SQLite, ODBC and MySQL.")
 connecting to MS SQL and Sybase servers over TCP/IP.")
     (license license:lgpl2.0+)))
 
+(define-public python-tinydb
+  (package
+    (name "python-tinydb")
+    (version "4.5.2")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "tinydb" version))
+              (sha256
+               (base32 "1x9c4s42930wwal3ds0plwb57kg5c3gj7kbpy64c29vq478b463x"))))
+    (build-system python-build-system)
+    ;; PyPi tarball does not contain tests and github repository does not
+    ;; have a setup.py file (only pyproject).
+    (arguments `(#:tests? #f))
+    (propagated-inputs
+     (list python-typing-extensions))
+    (home-page "https://github.com/msiemens/tinydb")
+    (synopsis "TinyDB is a lightweight document oriented database")
+    (description
+     "TinyDB is a small document oriented database written in pure Python
+with no external dependencies.  The targets are small apps that would
+be blown away by a SQL-DB or an external database server.")
+    (license license:expat)))
+
 (define-public sequeler
   (package
     (name "sequeler")
-    (version "0.8.1")
+    (version "0.8.2")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -4058,7 +4282,7 @@ connecting to MS SQL and Sybase servers over TCP/IP.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1q1vzc3likpiwfh6blkyiz0wr0aarj9xrm8gbi7m3p1wslkpah7c"))))
+                "0biggmsn8k7j6pdrwk29whl56qlfgvf5d9vjpgz4nyqih56wgh9j"))))
     (build-system meson-build-system)
     (arguments
      '(#:glib-or-gtk? #t
@@ -4069,8 +4293,7 @@ connecting to MS SQL and Sybase servers over TCP/IP.")
            (lambda _
              (substitute* "build-aux/meson_post_install.py"
                (("gtk-update-icon-cache") "true")
-               (("update-desktop-database") "true"))
-             #t)))))
+               (("update-desktop-database") "true")))))))
     (native-inputs
      `(;("appstream-glib" ,appstream-glib)  ; validation fails for lack of network
        ("gettext-minimal" ,gettext-minimal)
diff --git a/gnu/packages/datamash.scm b/gnu/packages/datamash.scm
index d0f4bdfbc0..4ce1dbda7d 100644
--- a/gnu/packages/datamash.scm
+++ b/gnu/packages/datamash.scm
@@ -21,10 +21,16 @@
   #:use-module (guix packages)
   #:use-module (guix licenses)
   #:use-module (guix download)
+  #:use-module (guix git-download)
   #:use-module (guix build-system gnu)
+  #:use-module (guix gexp)
+  #:use-module (guix utils)
   #:use-module (gnu packages)
+  #:use-module (gnu packages base)
+  #:use-module (gnu packages gawk)
   #:use-module (gnu packages perl)
-  #:use-module (gnu packages base))
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages python-xyz))
 
 (define-public datamash
   (package
@@ -39,8 +45,8 @@
        (base32
         "1cxdlhgz3wzjqlq8bgwad93fgqymk2abbldfzw1ffnhcp4mmjjjp"))))
     (native-inputs
-     `(("which" ,which)                 ;for tests
-       ("perl" ,perl)))                 ;for help2man
+     (list which ;for tests
+           perl))                 ;for help2man
     (build-system gnu-build-system)
     (home-page "https://www.gnu.org/software/datamash/")
     (synopsis "Scriptable statistics and data calculation")
@@ -48,3 +54,99 @@
      "Perform basic numeric, textual and statistical operations on plain text
 files.  Designed to work within standard pipelines without additional code.")
     (license gpl3+)))
+
+(define-public vnlog
+  (package
+    (name "vnlog")
+    (version "1.32")
+    (home-page "https://github.com/dkogan/vnlog")
+    (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
+                "1g4insm6gkw3c82fq8q9swkdha3cncbz1nib15yg9b2s4yl123hm"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     (list python-numpy))               ;for tests
+    (inputs
+     (list mawk
+           perl
+           perl-ipc-run
+           perl-list-moreutils
+           perl-string-shellquote
+           perl-text-diff
+           perl-text-table
+           python-wrapper))
+    (arguments
+     (list #:make-flags
+           #~(list (string-append "CC=" #$(cc-for-target))
+                   (string-append "DESTDIR=" #$output)
+                   "USRLIB=lib"
+                   "MANDIR=share/man"
+                   (string-append "PY3_MODULE_PATH=lib/python"
+                                  #$(version-major+minor
+                                     (package-version
+                                      (this-package-input "python-wrapper")))
+                                  "/site-packages")
+                   ;; Do not install the Python 2 modules.
+                   "DIST_PY2_MODULES=")
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'adjust-Makefile
+                 (lambda _
+                   (substitute* "GNUmakefile"
+                     ;; Install Perl modules to the usual location.
+                     (("/usr/share/perl5")
+                      (string-append "/lib/perl5/site_perl/"
+                                     #$(package-version
+                                        (this-package-input "perl"))))
+                     ;; Do not add a '/usr' suffix to DESTDIR.
+                     (("\\$\\(DESTDIR\\)/usr")
+                      "$(DESTDIR)")
+                     ;; Do not strip RUNPATH from the installed C library.
+                     ((".*find.*chrpath.*")
+                      ""))))
+               (add-after 'unpack 'use-absolute-mawk
+                 (lambda* (#:key inputs #:allow-other-keys)
+                   (let ((mawk (search-input-file inputs "bin/mawk")))
+                     (substitute* '("vnl-filter" "lib/Vnlog/Util.pm")
+                       (("'mawk'")
+                        (string-append "'" mawk "'"))))))
+               (delete 'configure)
+               (add-before 'check 'disable-python2-test
+                 (lambda _
+                   (delete-file "test/test_python2_parser.sh")
+                   (substitute* "GNUmakefile"
+                     ((".*test/test_python2_parser\\.sh\\.RUN.*")
+                      ""))))
+               (add-after 'install 'wrap
+                 (lambda* (#:key inputs outputs #:allow-other-keys)
+                   (let* ((out (assoc-ref outputs "out"))
+                          (PERL5LIB (string-append
+                                     out "/lib/perl5/site_perl/"
+                                     #$(package-version
+                                        (this-package-input "perl"))
+                                     ":" (getenv "PERL5LIB"))))
+                     (for-each (lambda (script)
+                                 (wrap-program script
+                                   `("PERL5LIB" ":" prefix (,PERL5LIB))))
+                               (find-files (string-append out "/bin"))))))
+               (add-after 'wrap 'check-wrapped-executables
+                 (lambda* (#:key outputs #:allow-other-keys)
+                   (let ((out (assoc-ref outputs "out")))
+                     ;; Assert that the installed Perl scripts can find
+                     ;; their dependencies even when PERL5LIB is unset.
+                     (unsetenv "PERL5LIB")
+                     (for-each (lambda (script)
+                                 (invoke/quiet script "--help"))
+                               (find-files (string-append out "/bin")
+                                           "^vnl-[[:lower:]]+$"))))))))
+    (synopsis "Process labelled tabular ASCII data on the command line")
+    (description
+     "Vnlog (pronounced @dfn{vanillog}) is a toolkit for manipulating
+tabular ASCII data with labelled fields using regular command-line tools.")
+    (license lgpl2.1+)))
diff --git a/gnu/packages/datastructures.scm b/gnu/packages/datastructures.scm
index 577e7b1430..07cd2aa872 100644
--- a/gnu/packages/datastructures.scm
+++ b/gnu/packages/datastructures.scm
@@ -25,7 +25,6 @@
   #:use-module (gnu packages)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages boost)
-  #:use-module (gnu packages build-tools)   ;for meson-0.55
   #:use-module (gnu packages perl)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
@@ -73,9 +72,7 @@ and heaps.")
         (base32 "1pk6wmi28pa8srb4szybrwfn71jldb61c5vgxsiayxcyg1ya4qqh"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (home-page "https://github.com/s-yata/marisa-trie")
     (synopsis "Trie data structure C++ library")
     (description "@acronym{MARISA, Matching Algorithm with Recursively
@@ -140,17 +137,17 @@ in between these sequences may be different in both content and length.")
 (define-public liburcu
   (package
     (name "liburcu")
-    (version "0.13.0")
+    (version "0.13.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://www.lttng.org/files/urcu/"
                                   "userspace-rcu-" version ".tar.bz2"))
               (sha256
                (base32
-                "085s437nig6bdiv9im4k4qwqbrbnc4qw9flqi16jlb493az0vcnb"))))
+                "10rh6v9j13622cjlzx31cfpghjy0kqkvn6pb42whwwcg5cyz64rj"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("perl" ,perl)))                 ; for tests
+     (list perl))                 ; for tests
     (home-page "https://liburcu.org/")
     (synopsis "User-space RCU data synchronisation library")
     (description "liburcu is a user-space @dfn{Read-Copy-Update} (RCU) data
@@ -175,7 +172,7 @@ queues, stacks, and doubly-linked lists.")
         (base32 "0k80bjbb6ss5wpmfmfji6xbyjm990hg9kcshwwnhdnh73vxkcd1m"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (arguments
      `(#:make-flags
        (list "CC=gcc")
@@ -270,7 +267,7 @@ to the structure and choosing one or more fields to act as the key.")
                           out ,version)))
               #t))))))
     (native-inputs
-     `(("libdivsufsort" ,libdivsufsort)))
+     (list libdivsufsort))
     (home-page "https://github.com/simongog/sdsl-lite")
     (synopsis "Succinct data structure library")
     (description "The Succinct Data Structure Library (SDSL) is a powerful and
@@ -296,8 +293,6 @@ equivalent succinct data structure are (most of the time) identical.")
                (base32
                 "061mkg6hc9x89zya3bw18ymxlzd8fbhjipxpva8x01lh2vp1d4f0"))))
     (build-system meson-build-system)
-    (arguments
-     `(#:meson ,meson-0.55))
     (synopsis "Typed link list for C")
     (description
      "@code{tllist} is a @dfn{typed linked list} C header file only library
@@ -349,7 +344,7 @@ bytes of memory space, where n is the length of the string.")
                 "1li70vwsksva9c4yly90hjafgqfixi1g6d52qq9p6r60vqc4pkjj"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("boost" ,boost)))  ; needed for tests
+     (list boost))  ; needed for tests
     (arguments
      `(#:phases
        (modify-phases %standard-phases
diff --git a/gnu/packages/dav.scm b/gnu/packages/dav.scm
index 9d18d94996..8738eb36f2 100644
--- a/gnu/packages/dav.scm
+++ b/gnu/packages/dav.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020 Vinicius Monego <monego@posteo.net>
+;;; Copyright © 2021 Tanguy Le Carrour <tanguy@bioneland.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -52,17 +53,15 @@
         (base32 "1xlsvrmx6jhi71j6j8z9sli5vwxasivzjyqf8zq8r0l5p7350clf"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-flake8" ,python-pytest-flake8)
-       ("python-pytest-isort" ,python-pytest-isort)
-       ("python-pytest-runner" ,python-pytest-runner)
-       ("python-waitress" ,python-waitress)))
+     (list python-pytest
+           python-pytest-cov
+           python-pytest-flake8
+           python-pytest-isort
+           python-pytest-runner
+           python-waitress))
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-defusedxml" ,python-defusedxml)
-       ("python-passlib" ,python-passlib)
-       ("python-vobject" ,python-vobject)))
+     (list python-dateutil python-defusedxml python-passlib
+           python-vobject))
     (synopsis "Basic CalDAV and CardDAV server")
     (description "Radicale is a CalDAV and CardDAV server for UNIX-like
 platforms.  Calendars and address books are available for both local and remote
@@ -87,12 +86,12 @@ clients.")
         (base32 "13ikmcja9p42azb5ccqj2bw98zybna6zlflj10hqy0kvbib70l94"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-aiohttp" ,python-aiohttp)
-       ("python-defusedxml" ,python-defusedxml)
-       ("python-dulwich" ,python-dulwich)
-       ("python-icalendar" ,python-icalendar)
-       ("python-jinja2" ,python-jinja2)
-       ("python-multidict" ,python-multidict)))
+     (list python-aiohttp
+           python-defusedxml
+           python-dulwich
+           python-icalendar
+           python-jinja2
+           python-multidict))
     (home-page "https://www.xandikos.org/")
     (synopsis "Lightweight CalDAV/CardDAV server")
     (description
@@ -117,13 +116,13 @@ efficient syncing
   (package
     (name "vdirsyncer")
     ;; When updating, check whether python-click-5 can be removed entirely.
-    (version "0.16.8")
+    (version "0.18.0")
     (source (origin
              (method url-fetch)
              (uri (pypi-uri name version))
              (sha256
               (base32
-               "1i8kp9j99rs8xdhrc1vx749zd9wznlzj0pb3s05xdm71a8pl5nxz"))))
+               "00f2bw1a2jbbd1sbci0swnd67kylr341aa9rpbxkajbp3zakxg17"))))
     (build-system python-build-system)
     (arguments
      `(#:tests? #f ; The test suite is very flakey.
@@ -152,24 +151,22 @@ efficient syncing
                 "/share/man/man1"))
             #t)))))
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-sphinx" ,python-sphinx)
-       ;; Required for testing
-       ("python-hypothesis" ,python-hypothesis)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-localserver" ,python-pytest-localserver)
-       ("python-pytest-subtesthack" ,python-pytest-subtesthack)
-       ("python-urllib3" ,python-urllib3)
-       ("python-wsgi-intercept" ,python-wsgi-intercept)
-       ("radicale" ,radicale)))
+     (list python-setuptools-scm
+           python-sphinx
+           ;; Required for testing
+           python-hypothesis
+           python-pytest
+           python-pytest-localserver
+           python-pytest-subtesthack
+           python-urllib3
+           python-wsgi-intercept
+           radicale))
     (inputs
-     `(;; XXX https://github.com/mitsuhiko/click/issues/200
-       ("python-click" ,python-click-5)))
+     (list ;; XXX https://github.com/mitsuhiko/click/issues/200
+           python-click-5))
     (propagated-inputs
-     `(("python-atomicwrites" ,python-atomicwrites)
-       ("python-click-log" ,python-click-log)
-       ("python-click-threading" ,python-click-threading)
-       ("python-requests-toolbelt" ,python-requests-toolbelt)))
+     (list python-atomicwrites python-click-log python-click-threading
+           python-requests-toolbelt))
     (synopsis "Synchronize calendars and contacts")
     (description "Vdirsyncer synchronizes your calendars and addressbooks
 between two storage locations.  The most popular purpose is to
diff --git a/gnu/packages/dbm.scm b/gnu/packages/dbm.scm
index fcef907b27..8b6804aa92 100644
--- a/gnu/packages/dbm.scm
+++ b/gnu/packages/dbm.scm
@@ -1,10 +1,12 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2016 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2016, 2020 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013, 2015 Andreas Enge <andreas@enge.fr>
-;;; Copyright © 2016, 2017, 2018, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2018, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017, 2018 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2018 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
 ;;; Copyright © 2021 Leo Le Bouter <lle-bout@zaclys.net>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -23,11 +25,13 @@
 
 (define-module (gnu packages dbm)
   #:use-module (gnu packages)
+  #:use-module (gnu packages autotools)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix build-system gnu)
-  #:use-module (guix utils))
+  #:use-module (guix utils)
+  #:use-module (ice-9 match))
 
 ;;; Commentary:
 ;;;
@@ -46,7 +50,8 @@
                                  version ".tar.gz"))
              (sha256
               (base32
-               "0ampbl2f0hb1nix195kz1syrqqxpmvnvnfvphambj7xjrl3iljg0"))))
+               "0ampbl2f0hb1nix195kz1syrqqxpmvnvnfvphambj7xjrl3iljg0"))
+             (patches (search-patches "bdb-5.3-atomics-on-gcc-9.patch"))))
     (build-system gnu-build-system)
     (outputs '("out"                             ; programs, libraries, headers
                "doc"))                           ; 94 MiB of HTML docs
@@ -55,6 +60,19 @@
        #:disallowed-references ("doc")
        #:phases
        (modify-phases %standard-phases
+         ;; The configure script is too old to recognise aarch64 and
+         ;; powerpc64le as valid architectures.  The trick below works
+         ;; for "--build", but not for "--host", so update config.sub.
+         ,@(if (and (%current-target-system)
+                    (or (target-ppc64le? (%current-target-system))
+                        (target-aarch64? (%current-target-system))))
+               `((add-after 'unpack 'update-config.sub
+                   (lambda* (#:key native-inputs #:allow-other-keys)
+                     (delete-file "dist/config.sub")
+                     (symlink
+                      (search-input-file native-inputs "/bin/config.sub")
+                      "dist/config.sub"))))
+               '())
          (replace 'configure
            (lambda* (#:key target outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out"))
@@ -70,15 +88,17 @@
                        (string-append "CONFIG_SHELL=" (which "bash"))
                        (string-append "SHELL=" (which "bash"))
 
-                       ;; Bdb doesn't recognize aarch64 as an architecture.
-                       ,@(if (string=? "aarch64-linux" (%current-system))
-                             '("--build=aarch64-unknown-linux-gnu")
-                             '())
-
-                       ;; Bdb doesn't recognize powerpc64le as an architecture.
-                       ,@(if (string=? "powerpc64le-linux" (%current-system))
-                             '("--build=powerpc64le-unknown-linux-gnu")
-                             '())
+                       ;; Bdb's config script doesn't recognize very many
+                       ;; architectures, and is a dependant on the 'config'
+                       ;; package, so we manually define the build target.
+                       ,@(match (%current-system)
+                           ("aarch64-linux"
+                            '("--build=aarch64-unknown-linux-gnu"))
+                           ("powerpc64le-linux"
+                            '("--build=powerpc64le-unknown-linux-gnu"))
+                           ("riscv64-linux"
+                            '("--build=riscv64-unknown-linux-gnu"))
+                           (_ '()))
 
                        ,@(if (%current-target-system)         ; cross building
                              '((string-append "--host=" target))
@@ -95,6 +115,12 @@
                        ;; of db_cxx.h into C++ files works; it leads to
                        ;; HAVE_CXX_STDHEADERS being defined in db_cxx.h.
                        "--enable-cxx")))))))
+    (native-inputs
+     (if (and (%current-target-system)
+              (or (target-ppc64le? (%current-target-system))
+                  (target-aarch64? (%current-target-system))))
+         `(("config" ,config)) ; for config.sub
+         '()))
     (synopsis "Berkeley database")
     (description
      "Berkeley DB is an embeddable database allowing developers the choice of
@@ -114,7 +140,9 @@ SQL, Key/Value, XML/XQuery or Java Object storage for their data model.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0a1n5hbl7027fbz5lm0vp0zzfp1hmxnz14wx3zl9563h83br5ag0"))))))
+                "0a1n5hbl7027fbz5lm0vp0zzfp1hmxnz14wx3zl9563h83br5ag0"))
+              (patch-flags '("-p0"))
+              (patches (search-patches "bdb-5.3-atomics-on-gcc-9.patch"))))))
 
 (define-public bdb-6
   (package (inherit bdb-4.8)
@@ -136,14 +164,14 @@ SQL, Key/Value, XML/XQuery or Java Object storage for their data model.")
 (define-public gdbm
   (package
     (name "gdbm")
-    (version "1.18.1")
+    (version "1.20")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnu/gdbm/gdbm-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "1p4ibds6z3ccy65lkmd6lm7js0kwifvl53r0fd759fjxgr917rl6"))))
+                "14m22j0zndd42yc0ps0bcnnjj2iq7agnp66sl882lj5k91bc1sis"))))
     (arguments `(#:configure-flags '("--enable-libgdbm-compat"
                                      "--disable-static")))
     (build-system gnu-build-system)
diff --git a/gnu/packages/dc.scm b/gnu/packages/dc.scm
index f22ac93723..41620ea6cf 100644
--- a/gnu/packages/dc.scm
+++ b/gnu/packages/dc.scm
@@ -43,14 +43,14 @@
         (base32 "1bdgqd07f026qk6vpbxqsin536znd33931m3b4z44prlm9wd6pyi"))))
     (build-system gnu-build-system)
     (inputs
-     `(("bzip2" ,bzip2)
-       ("glib" ,glib)
-       ("gnutls" ,gnutls)
-       ("ncurses" ,ncurses)
-       ("sqlite" ,sqlite)
-       ("zlib" ,zlib)))
+     (list bzip2
+           glib
+           gnutls
+           ncurses
+           sqlite
+           zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://dev.yorhel.nl/ncdc")
     (synopsis
      "Lightweight direct connect client with a friendly ncurses interface")
diff --git a/gnu/packages/debian.scm b/gnu/packages/debian.scm
index a23490f00b..9a303003d3 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, 2021 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2018, 2020, 2021, 2022 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020 Marius Bakke <marius@gnu.org>
 ;;;
@@ -71,8 +71,7 @@
                          (find-files "trusted.gpg" "\\.gpg$")))
              #t)))))
     (native-inputs
-     `(("gnupg" ,gnupg)
-       ("jetring" ,jetring)))
+     (list gnupg jetring))
     (home-page "https://packages.qa.debian.org/d/debian-archive-keyring.html")
     (synopsis "GnuPG archive keys of the Debian archive")
     (description
@@ -81,6 +80,70 @@ contains the archive keys used for that.")
     (license (list license:public-domain ; the keys
                    license:gpl2+)))) ; see debian/copyright
 
+(define-public debian-ports-archive-keyring
+  (package
+    (name "debian-ports-archive-keyring")
+    (version "2021.12.30")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append "mirror://debian/pool/main/d"
+                            "/debian-ports-archive-keyring"
+                            "/debian-ports-archive-keyring_" version ".tar.xz"))
+        (sha256
+         (base32
+          "14f9hklr8gdlp782j5ijmm0nh061zcfw9vwpr8smb7rdfzk4wk70"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:tests? #f              ; No test suite.
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)    ; No configure script.
+         (replace 'build
+           (lambda _
+             ;; gpg options derived from the debian/rules file.
+             (let ((gpg-options (list "--no-options" "--no-default-keyring"
+                                      "--no-auto-check-trustdb" "--no-keyring"
+                                      "--import-options" "import-export"
+                                      "--import")))
+               (with-output-to-file "debian-ports-archive-keyring.gpg"
+                 (lambda _
+                   (apply invoke "gpg"
+                          (append gpg-options (find-files "active-keys")))))
+               (with-output-to-file "debian-ports-archive-keyring-removed.gpg"
+                 (lambda _
+                   (apply invoke "gpg"
+                          (append gpg-options (find-files "removed-keys")))))
+               (mkdir "trusted.gpg")
+               (for-each
+                 (lambda (key)
+                   (with-output-to-file
+                     (string-append "trusted.gpg/" (basename key ".key") ".gpg")
+                     (lambda _
+                       (apply invoke "gpg" (append gpg-options (list key))))))
+                 (find-files "active-keys"))
+               #t)))
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (apt (string-append out "/etc/apt/trusted.gpg.d/"))
+                    (key (string-append out "/share/keyrings/")))
+               (install-file "debian-ports-archive-keyring.gpg" key)
+               (install-file "debian-ports-archive-keyring-removed.gpg" key)
+               (for-each (lambda (file)
+                           (install-file file apt))
+                         (find-files "trusted.gpg" "\\.gpg$")))
+             #t)))))
+    (native-inputs
+     (list gnupg))
+    (home-page "https://tracker.debian.org/pkg/debian-ports-archive-keyring")
+    (synopsis "GnuPG archive keys of the Debian ports archive")
+    (description
+     "The Debian ports-archive digitally signs its Release files.  This package
+contains the archive keys used for that.")
+    ;; "The keys in the keyrings don't fall under any copyright."
+    (license license:public-domain)))
+
 (define-public ubuntu-keyring
   (package
     (name "ubuntu-keyring")
@@ -113,8 +176,7 @@ contains the archive keys used for that.")
                                (find-files "." "ubuntu-[am].*\\.gpg$")))
                    #t)))
     (native-inputs
-     `(("tar" ,tar)
-       ("gzip" ,gzip)))
+     (list tar gzip))
     (home-page "https://launchpad.net/ubuntu/+source/ubuntu-keyring")
     (synopsis "GnuPG keys of the Ubuntu archive")
     (description
@@ -126,7 +188,7 @@ contains the archive keys used for that.")
 (define-public debootstrap
   (package
     (name "debootstrap")
-    (version "1.0.124")
+    (version "1.0.126")
     (source
       (origin
         (method git-fetch)
@@ -135,7 +197,7 @@ contains the archive keys used for that.")
               (commit version)))
         (file-name (git-file-name name version))
         (sha256
-         (base32 "0pbvrp7gb87pwmjika5hy97342mdfvm0gmy23ag8xz1nnpmn160j"))))
+         (base32 "0hfx6k86kby4xf0xqskpllq00g159j4khh66hfi6dhcdb91dgyd7"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -195,7 +257,7 @@ contains the archive keys used for that.")
        ("gnupg" ,gnupg)
        ("wget" ,wget)))
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (home-page "https://tracker.debian.org/pkg/debootstrap")
     (synopsis "Bootstrap a basic Debian system")
     (description "Debootstrap is used to create a Debian base system from
@@ -207,7 +269,7 @@ unpacking them into a directory which can eventually be chrooted into.")
 (define-public debianutils
   (package
     (name "debianutils")
-    (version "4.11.1")
+    (version "5.5-1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -216,20 +278,10 @@ unpacking them into a directory which can eventually be chrooted into.")
               (file-name (git-file-name "debianutils" version))
               (sha256
                (base32
-                "18ypb7fivch53wwrdf73yhf1fhkwn9kvw1kfdc1m450241d6191w"))))
+                "1sbdjcb44g2s1zxjf9kxrp9drf9mmh6b49a9z3k428gmc6zsci4r"))))
     (build-system gnu-build-system)
-    (arguments
-     '(#:phases (modify-phases %standard-phases
-                  (add-after 'bootstrap 'create-translations
-                    (lambda _
-                      (with-directory-excursion "po4a"
-                        (invoke "po4a" "--no-backups" "po4a.conf"))
-                      #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("gettext" ,gettext-minimal)
-       ("po4a" ,po4a)))
+     (list autoconf automake gettext-minimal po4a))
     (home-page "https://packages.debian.org/unstable/debianutils")
     (synopsis "Miscellaneous shell utilities")
     (description
@@ -271,8 +323,7 @@ debian/copyright for more information.")))))
                             "PREFIX=/")
          #:phases (modify-phases %standard-phases (delete 'configure))))
       (inputs
-       `(("wget" ,wget)
-         ("perl" ,perl)))
+       (list wget perl))
       (home-page "http://apt-mirror.github.io/")
       (synopsis "Script for mirroring a Debian repository")
       (description
@@ -284,7 +335,7 @@ other apt sources typically provided by open source developers.")
 (define-public dpkg
   (package
     (name "dpkg")
-    (version "1.20.9")
+    (version "1.21.0")
     (source
       (origin
         (method git-fetch)
@@ -293,8 +344,7 @@ other apt sources typically provided by open source developers.")
                (commit version)))
         (file-name (git-file-name name version))
         (sha256
-         (base32
-          "16wlb8hwbdvxar187bjd4pzdzj95g3l2ryi2khqqmwbyca4sjm1n"))))
+         (base32 "0g33cyd0qbyfdrphcw8m8ikj2hxqpjbyxbhvnp751515c8hgc4rx"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -303,8 +353,7 @@ other apt sources typically provided by open source developers.")
            (lambda _
              (patch-shebang "get-version")
              (with-output-to-file ".dist-version"
-               (lambda () (display ,version)))
-             #t))
+               (lambda () (display ,version)))))
          (add-after 'unpack 'set-perl-libdir
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((out  (assoc-ref outputs "out"))
@@ -312,8 +361,7 @@ other apt sources typically provided by open source developers.")
                (setenv "PERL_LIBDIR"
                        (string-append out
                                       "/lib/perl5/site_perl/"
-                                      ,(package-version perl)))
-               #t))))))
+                                      ,(package-version perl)))))))))
     (native-inputs
      `(("autoconf" ,autoconf)
        ("automake" ,automake)
@@ -322,12 +370,12 @@ other apt sources typically provided by open source developers.")
        ("pkg-config" ,pkg-config)
        ("perl-io-string" ,perl-io-string)))
     (inputs
-     `(("bzip2" ,bzip2)
-       ("libmd" ,libmd)
-       ("ncurses" ,ncurses)
-       ("perl" ,perl)
-       ("xz" ,xz)
-       ("zlib" ,zlib)))
+     (list bzip2
+           libmd
+           ncurses
+           perl
+           xz
+           zlib))
     (home-page "https://wiki.debian.org/Teams/Dpkg")
     (synopsis "Debian package management system")
     (description "This package provides the low-level infrastructure for
@@ -372,15 +420,14 @@ handling the installation and removal of Debian software packages.")
                           (string-append zsh "_reprepro"))
                #t))))))
     (inputs
-     `(("bdb" ,bdb)
-       ("bzip2" ,bzip2)
-       ("gpgme" ,gpgme)
-       ("libarchive" ,libarchive)
-       ("xz" ,xz)
-       ("zlib" ,zlib)))
+     (list bdb
+           bzip2
+           gpgme
+           libarchive
+           xz
+           zlib))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (home-page "https://salsa.debian.org/brlink/reprepro")
     (synopsis "Debian package repository producer")
     (description "Reprepro is a tool to manage a repository of Debian packages
diff --git a/gnu/packages/debug.scm b/gnu/packages/debug.scm
index 7363d45c43..3bf7f6a8e0 100644
--- a/gnu/packages/debug.scm
+++ b/gnu/packages/debug.scm
@@ -1,12 +1,14 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014, 2015, 2016, 2017, 2019, 2020, 2021 Eric Bavier <bavier@posteo.net>
+;;; Copyright © 2014, 2015, 2016, 2017, 2019-2022 Eric Bavier <bavier@posteo.net>
 ;;; 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>
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
-;;; Copyright © 2020 Morgan Smith <Morgan.J.Smith@outlook.com>
+;;; Copyright © 2020, 2021 Morgan Smith <Morgan.J.Smith@outlook.com>
 ;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
+;;; Copyright © 2021 Foo Chuan Wei <chuanwei.foo@hotmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -60,6 +62,7 @@
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages serialization)
+  #:use-module (gnu packages texinfo)
   #:use-module (gnu packages virtualization)
   #:use-module (gnu packages xdisorg)
   #:use-module (ice-9 match)
@@ -83,7 +86,7 @@
         "184wh35pf2ddx97319s6sgkzpz48xxkbwzcjpycv009bm53lh61q"))))
     (build-system gnu-build-system)
     (inputs                             ;Installed programs are perl scripts
-     `(("perl" ,perl)))
+     (list perl))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -126,7 +129,7 @@ program to exhibit a bug.")
       (sha256
        (base32 "0qx0zq8jxzx2as2zf0740g7kvgq163ayn3041di4vwk77490y76v"))))
     (build-system gnu-build-system)
-    (native-inputs `(("flex" ,flex)))
+    (native-inputs (list flex))
     (inputs
      `(("astyle"          ,astyle)
        ("llvm"            ,llvm)
@@ -176,7 +179,7 @@ tools that process C/C++ code.")
 (define-public c-vise
   (package
     (name "c-vise")
-    (version "2.3.0")
+    (version "2.4.0")
     (source
      (origin
        (method git-fetch)
@@ -184,21 +187,14 @@ tools that process C/C++ code.")
              (url "https://github.com/marxin/cvise")
              (commit (string-append "v" version))))
        (sha256
-        (base32 "0f6m58rak87gvcvxxcgp1bzbsv1q618h0iipmv0dx9jv1bn0qv43"))
+        (base32 "1i2z5q2pcwh1gpdqc24x1a2q5vzwhblzzq021nzwf304di7m18vl"))
        (file-name (git-file-name name version))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("flex" ,flex)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-flake8" ,python-pytest-flake8)))
+     (list flex python-pytest python-pytest-flake8))
     (inputs
-     `(("bash" ,bash-minimal)           ; For wrap-program
-       ("clang" ,clang)
-       ("llvm" ,llvm)
-       ("python" ,python)
-       ("python-pebble" ,python-pebble)
-       ("python-psutil" ,python-psutil)
-       ("unifdef" ,unifdef)))
+     (list bash-minimal clang llvm unifdef
+           python python-pebble python-psutil python-chardet))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -213,7 +209,7 @@ tools that process C/C++ code.")
          (add-after 'install 'wrap
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out"))
-                   (python-path (getenv "PYTHONPATH")))
+                   (python-path (getenv "GUIX_PYTHONPATH")))
                (wrap-program (string-append out "/bin/cvise")
                  `("PYTHONPATH" ":" prefix (,python-path)))
                #t))))))
@@ -251,7 +247,7 @@ tool.")
          (file-name (git-file-name name version))))
       (build-system gnu-build-system)
       (inputs
-       `(("qemu" ,qemu-for-american-fuzzy-lop)))
+       (list qemu-for-american-fuzzy-lop))
       (arguments
        `(#:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
                             (string-append "DOC_PATH=$(PREFIX)/share/doc/"
@@ -469,9 +465,7 @@ server and embedded PowerPC, and S390 guests.")
            "0k55cy7x0hlc6rgpascl6ibhcfxaash3p9r9r8kwvbm3zag1rmac"))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("go" ,go)))
+       (list autoconf automake go))
       (inputs
        `(("make-source" ,(package-source gnu-make))))
       (arguments
@@ -560,30 +554,28 @@ input.  Zzuf's behaviour is deterministic, making it easy to reproduce bugs.")
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (substitute* "gui/GameConqueror.py"
                (("/usr/bin/env python")
-                (string-append (assoc-ref %build-inputs
-                                          "python-wrapper") "/bin/python")))
-             #t))
+                (search-input-file inputs "/bin/python")))))
          (add-after 'install 'wrap-gameconqueror
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((out               (assoc-ref outputs "out"))
                    (gi-typelib-path   (getenv "GI_TYPELIB_PATH"))
-                   (python-path       (getenv "PYTHONPATH")))
+                   (python-path       (getenv "GUIX_PYTHONPATH")))
                (wrap-program (string-append out "/share/gameconqueror/GameConqueror.py")
                  `("GI_TYPELIB_PATH"        ":" prefix (,gi-typelib-path))
-                 `("PYTHONPATH"             ":" prefix (,python-path))))
+                 `("GUIX_PYTHONPATH"             ":" prefix (,python-path))))
              #t)))))
     (native-inputs
-     `(("libtool" ,libtool)
-       ("python-wrapper" ,python-wrapper)
-       ("gobject-introspection" ,gobject-introspection)
-       ("gtk+" ,gtk+)
-       ("intltool" ,intltool)
-       ("automake" ,automake)
-       ("autoconf" ,autoconf)))
+     (list libtool
+           python-wrapper
+           gobject-introspection
+           gtk+
+           intltool
+           automake
+           autoconf))
     (inputs
-     `(("readline" ,readline)))
+     (list readline))
     (propagated-inputs
-     `(("python-pygobject" ,python-pygobject)))
+     (list python-pygobject))
     (home-page "https://github.com/scanmem/scanmem")
     (synopsis "Memory scanner")
     (description "Scanmem is a debugging utility designed to isolate the
@@ -613,8 +605,8 @@ the position of the variable and allows you to modify its value.")
                 "0xlx2485y0israv2pfghmv74lxcv9i5y65agy69mif76yc4vfvif"))
               (patches (search-patches "remake-impure-dirs.patch"))))
     (inputs
-     `(("readline" ,readline)
-       ,@(package-inputs gnu-make)))
+     (modify-inputs (package-inputs gnu-make)
+       (prepend readline)))
     (home-page "http://bashdb.sourceforge.net/remake/")
     (description "Remake is an enhanced version of GNU Make that adds improved
 error reporting, better tracing, profiling, and a debugger.")
@@ -666,14 +658,9 @@ error reporting, better tracing, profiling, and a debugger.")
                       (setenv "HOME" (getcwd))
                       #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("ninja" ,ninja)
-       ("which" ,which)))
+     (list pkg-config ninja which))
     (inputs
-     `(("gdb" ,gdb)
-       ("capnproto" ,capnproto)
-       ("python" ,python)
-       ("python-pexpect" ,python-pexpect)))
+     (list gdb capnproto python python-pexpect))
     (home-page "https://rr-project.org/")
     (synopsis "Record and reply debugging framework")
     (description
@@ -742,8 +729,7 @@ program to produce symbolic backtraces.")
                       (let* ((out (assoc-ref outputs "out")))
                         (install-file "libleak.so" (string-append out "/lib"))
                         #t))))))
-    (inputs `(("libbacktrace" ,libbacktrace)
-              ("libwuya" ,libwuya)))
+    (inputs (list libbacktrace libwuya))
     (home-page "https://github.com/WuBingzheng/libleak")
     (synopsis "Memory leaks detection tool")
     (description "The libleak tool detects memory leaks by hooking memory
@@ -756,36 +742,63 @@ smaller than that of other tools such as Valgrind, and it aims to be easier to
 use than similar tools like @command{mtrace}.")
     (license license:gpl2+)))
 
-(define-public mspdebug
+(define-public cgdb
   (package
-    (name "mspdebug")
-    (version "0.25")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/dlbeer/mspdebug")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32 "0prgwb5vx6fd4bj12ss1bbb6axj2kjyriyjxqrzd58s5jyyy8d3c"))))
+    (name "cgdb")
+    (version "0.7.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://cgdb.me/files/cgdb-" version ".tar.gz"))
+       (sha256
+        (base32 "1671gpz5gx5j0zga8xy2x7h33vqh3nij93lbb6dbb366ivjknwmv"))))
     (build-system gnu-build-system)
-    (arguments
-     `(#:tests? #f                         ; no test suite
-       #:phases
-       (modify-phases %standard-phases
-         (delete 'configure))              ; no configure script
-       #:make-flags
-       (list (string-append "CC=" ,(cc-for-target))
-             "INSTALL=install"
-             (string-append "PREFIX=" %output))))
-  (inputs
-     `(("libusb-compat" ,libusb-compat)
-       ("readline" ,readline)))
-    (synopsis "Debugging tool for MSP430 MCUs")
-    (description "MspDebug supports FET430UIF, eZ430, RF2500 and Olimex
+    (inputs
+     (list ncurses readline))
+    (native-inputs
+     (list flex texinfo))
+    (home-page "https://cgdb.github.io")
+    (synopsis "Console front-end to the GNU debugger")
+    (description
+     "@code{cgdb} is a lightweight curses (terminal-based) interface to the
+GNU Debugger (GDB).  In addition to the standard gdb console, cgdb provides
+a split screen view that displays the source code as it executes.  The
+keyboard interface is modeled after vim, so vim users should feel at home
+using cgdb.")
+    (license license:gpl2+)))
+
+(define-public mspdebug
+  ;; Last official release was 24 July 2017
+  (let ((commit "4c4d94e43bc4a18ecf82070ff81cd38dd5641e3b")
+        (revision "0"))
+    (package
+      (name "mspdebug")
+      (version (git-version "0.25" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/dlbeer/mspdebug")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32 "1lgw1dsc1aglyja610ichadvgs5b0df3wlarinczb0ykf431gjln"))))
+      (build-system gnu-build-system)
+      (arguments
+       `(#:tests? #f                    ; no test suite
+         #:phases
+         (modify-phases %standard-phases
+           (delete 'configure))         ; no configure script
+         #:make-flags
+         (list (string-append "CC=" ,(cc-for-target))
+               "INSTALL=install"
+               (string-append "PREFIX=" %output))))
+      (inputs
+       (list libusb-compat readline))
+      (synopsis "Debugging tool for MSP430 MCUs")
+      (description "MspDebug supports FET430UIF, eZ430, RF2500 and Olimex
 MSP430-JTAG-TINY programmers, as well as many other compatible
 devices.  It can be used as a proxy for gdb or as an independent
 debugger with support for programming, disassembly and reverse
 engineering.")
-    (home-page "https://github.com/dlbeer/mspdebug")
-    (license license:gpl2+)))
+      (home-page "https://github.com/dlbeer/mspdebug")
+      (license license:gpl2+))))
diff --git a/gnu/packages/dejagnu.scm b/gnu/packages/dejagnu.scm
index 0dee89dfc1..08be5a8afd 100644
--- a/gnu/packages/dejagnu.scm
+++ b/gnu/packages/dejagnu.scm
@@ -38,7 +38,7 @@
        (base32
         "0qfj2wd4qk1yn9yzam6g8nmyxfazcc0knjyyibycb2ainkhp21hd"))))
     (build-system gnu-build-system)
-    (inputs `(("expect" ,expect)))
+    (inputs (list expect))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
diff --git a/gnu/packages/dhall.scm b/gnu/packages/dhall.scm
index c0776902e7..b406d89eb5 100644
--- a/gnu/packages/dhall.scm
+++ b/gnu/packages/dhall.scm
@@ -30,70 +30,73 @@
 (define-public dhall
   (package
     (name "dhall")
-    (version "1.32.0")
+    (version "1.39.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://hackage.haskell.org/package/dhall/dhall-"
                            version ".tar.gz"))
        (sha256
-        (base32 "1imj0bh5365pdizvjbw2wqz0g9hakigf1zm4fr6379qdchxpp90p"))))
+        (base32 "1by2d84fbckspczddl4npfsf89q6nprmbg0i5g8yr1psp0fpl4ab"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-aeson-pretty" ,ghc-aeson-pretty)
-       ("ghc-ansi-terminal" ,ghc-ansi-terminal)
-       ("ghc-atomic-write" ,ghc-atomic-write-0.2.0.7)
-       ("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-cborg" ,ghc-cborg)
-       ("ghc-cborg-json" ,ghc-cborg-json)
-       ("ghc-contravariant" ,ghc-contravariant)
-       ("ghc-data-fix" ,ghc-data-fix)
-       ("ghc-diff" ,ghc-diff)
-       ("ghc-dotgen" ,ghc-dotgen)
-       ("ghc-either" ,ghc-either)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-half" ,ghc-half)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-lens-family-core" ,ghc-lens-family-core)
-       ("ghc-megaparsec" ,ghc-megaparsec)
-       ("ghc-memory" ,ghc-memory)
-       ("ghc-network-uri" ,ghc-network-uri)
-       ("ghc-optparse-applicative" ,ghc-optparse-applicative)
-       ("ghc-parsers" ,ghc-parsers)
-       ("ghc-parser-combinators" ,ghc-parser-combinators)
-       ("ghc-prettyprinter" ,ghc-prettyprinter-1.6)
-       ("ghc-prettyprinter-ansi-terminal" ,ghc-prettyprinter-ansi-terminal)
-       ("ghc-pretty-simple" ,ghc-pretty-simple)
-       ("ghc-profunctors" ,ghc-profunctors)
-       ("ghc-repline" ,ghc-repline-0.3)
-       ("ghc-serialise" ,ghc-serialise)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-text-manipulate" ,ghc-text-manipulate)
-       ("ghc-th-lift-instances" ,ghc-th-lift-instances)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-uri-encode" ,ghc-uri-encode)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-cryptonite" ,ghc-cryptonite)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-http-client" ,ghc-http-client)
-       ("ghc-http-client-tls" ,ghc-http-client-tls)))
+     (list ghc-aeson
+           ghc-aeson-pretty
+           ghc-ansi-terminal
+           ghc-atomic-write-0.2.0.7
+           ghc-case-insensitive
+           ghc-cborg
+           ghc-cborg-json
+           ghc-contravariant
+           ghc-data-fix
+           ghc-diff
+           ghc-dotgen
+           ghc-either
+           ghc-exceptions
+           ghc-half
+           ghc-hashable
+           ghc-lens-family-core
+           ghc-megaparsec
+           ghc-memory
+           ghc-mmorph
+           ghc-network-uri
+           ghc-optparse-applicative
+           ghc-parsers
+           ghc-parser-combinators
+           ghc-prettyprinter
+           ghc-prettyprinter-ansi-terminal
+           ghc-pretty-simple
+           ghc-profunctors
+           ghc-pretty-simple
+           ghc-repline
+           ghc-serialise
+           ghc-scientific
+           ghc-text-manipulate
+           ghc-th-lift-instances
+           ghc-transformers-compat
+           ghc-unordered-containers
+           ghc-uri-encode
+           ghc-vector
+           ghc-cryptonite
+           ghc-http-types
+           ghc-http-client
+           ghc-http-client-tls))
     (native-inputs
-     `(("ghc-foldl" ,ghc-foldl)
-       ("ghc-generic-random" ,ghc-generic-random-1.3.0.1)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-quickcheck-instances" ,ghc-quickcheck-instances)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-special-values" ,ghc-special-values)
-       ("ghc-spoon" ,ghc-spoon)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-expected-failure" ,ghc-tasty-expected-failure)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-turtle" ,ghc-turtle)
-       ("ghc-mockery" ,ghc-mockery)
-       ("ghc-doctest" ,ghc-doctest)))
+     (list ghc-foldl
+           ghc-generic-random-1.3.0.1
+           ghc-quickcheck
+           ghc-quickcheck-instances
+           ghc-semigroups
+           ghc-special-values
+           ghc-spoon
+           ghc-tasty
+           ghc-tasty-expected-failure
+           ghc-tasty-hunit
+           ghc-tasty-quickcheck
+           ghc-tasty-silver
+           ghc-turtle
+           ghc-mockery
+           ghc-doctest))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -102,8 +105,7 @@
              (with-directory-excursion "dhall-lang/tests"
                (for-each
                 delete-file
-                '("import/failure/referentiallyInsane.dhall"
-                  "import/success/customHeadersA.dhall"
+                '("import/success/customHeadersA.dhall"
                   "import/success/noHeaderForwardingA.dhall"
                   "import/success/unit/RemoteAsTextA.dhall"
                   "import/success/unit/SimpleRemoteA.dhall"
diff --git a/gnu/packages/dico.scm b/gnu/packages/dico.scm
index fb97ee3d85..c7c1963726 100644
--- a/gnu/packages/dico.scm
+++ b/gnu/packages/dico.scm
@@ -65,7 +65,7 @@
                     (lambda _
                       ;; Test '71: append + dooffs + env' fails if $V is not 2.
                       (invoke "make" "check" "V=2"))))))
-    (native-inputs `(("groff" ,groff)))
+    (native-inputs (list groff))
     (inputs
      `(("m4" ,m4)                                 ;used at run time
        ("pcre" ,pcre)
diff --git a/gnu/packages/dictionaries.scm b/gnu/packages/dictionaries.scm
index 5ca9e128ff..f9d6e57877 100644
--- a/gnu/packages/dictionaries.scm
+++ b/gnu/packages/dictionaries.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015, 2016, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016, 2017, 2018, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Sou Bunnbu <iyzsong@gmail.com>
 ;;; Copyright © 2017, 2018, 2019, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
@@ -100,9 +100,7 @@
                              "vera.texi" "--force" "--html" "-o"
                              (string-append html "/vera.html"))))
       #:modules ((guix build utils))))
-    (native-inputs `(("texinfo" ,texinfo)
-                     ("tar" ,tar)
-                     ("gzip" ,gzip)))
+    (native-inputs (list texinfo tar gzip))
     (home-page "https://savannah.gnu.org/projects/vera/")
     (synopsis "List of acronyms")
     (description
@@ -167,7 +165,7 @@ work, such as sentence length and other readability measures.")
                (base32
                 "0chjqs3z9zs1w3l7b5lsaj682rgnkf9kibcbzhggqqcn1pbvl5sq"))))
     (build-system gnu-build-system)
-    (inputs `(("tk" ,tk)))
+    (inputs (list tk))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -178,8 +176,7 @@ work, such as sentence length and other readability measures.")
            (lambda* (#:key inputs #:allow-other-keys)
              (let ((bindir (string-append
                             (assoc-ref %outputs "out") "/bin"))
-                   (wish (string-append (assoc-ref inputs "tk")
-                          "/bin/wish8.6"))
+                   (wish (search-input-file inputs "/bin/wish8.6"))
                    (sharedir (string-append
                               (assoc-ref %outputs "out")
                               "/share/applications"))
@@ -291,9 +288,7 @@ and a Python library.")
                   (guix build utils))
        #:test-target "test"))
     (inputs
-     `(("curl" ,curl)
-       ("fribidi" ,fribidi)
-       ("rlwrap" ,rlwrap)))
+     (list curl fribidi rlwrap))
     (native-inputs
      `(("emacs" ,emacs-minimal)
        ("util-linux" ,util-linux)))     ; hexdump, for the test
@@ -309,18 +304,20 @@ translation engines from your terminal.")
 (define-public lttoolbox
   (package
     (name "lttoolbox")
-    (version "3.5.3")
+    (version "3.5.4")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
              "https://github.com/apertium/lttoolbox/releases/download/v"
-             version "/lttoolbox-" version ".tar.bz2"))
+             version "/lttoolbox-" version ".tar.xz"))
        (sha256
-        (base32 "109l91ailish1a3vya5zmfg3kb67cwyzl36ndnh8f59chsbm6n2f"))))
+        (base32 "0kn9xg9sc64amd6ah5gi4qij0bhfbmc2jjvxbjjrsdd8iq054cgm"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:phases
+     `(#:configure-flags
+       (list "--disable-static")
+       #:phases
        (modify-phases %standard-phases
          (replace 'bootstrap
            ;; The included ./autogen.sh unconditionally runs ./configure before
@@ -328,12 +325,9 @@ translation engines from your terminal.")
            (lambda _
              (invoke "autoreconf" "-vfi"))))))
     (inputs
-     `(("libxml2" ,libxml2)))
+     (list libxml2))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (home-page "https://wiki.apertium.org/wiki/Lttoolbox")
     (synopsis "Lexical processing toolbox")
     (description "Lttoolbox is a toolbox for lexical processing, morphological
@@ -359,10 +353,7 @@ word (e.g. cats) into its lemma \"cat\" and the grammatical information
        (file-name (string-append name "-" version ".tar.gz"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)
-       ("lttoolbox" ,lttoolbox)
-       ("pcre" ,pcre)))
+     (list libxml2 libxslt lttoolbox pcre))
     (native-inputs
      `(("apertium-get"
         ,(origin
@@ -434,10 +425,7 @@ intelligible and easily correctable.")
      `(("gettext" ,gettext-minimal)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("glib" ,glib)
-       ("ncurses" ,ncurses)
-       ("readline" ,readline)
-       ("zlib" ,zlib)))
+     (list glib ncurses readline zlib))
     (home-page "https://dushistov.github.io/sdcv/")
     (synopsis "Console version of StarDict")
     (description "sdcv is simple text-based utility for work with dictionaries
diff --git a/gnu/packages/diffoscope.scm b/gnu/packages/diffoscope.scm
index 35e4783b2a..743447a9d5 100644
--- a/gnu/packages/diffoscope.scm
+++ b/gnu/packages/diffoscope.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2017, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2018, 2019 Rutger Helling <rhelling@mykolab.com>
@@ -34,6 +34,7 @@
   #:use-module (gnu packages compression)
   #:use-module (gnu packages cpio)
   #:use-module (gnu packages dbm)
+  #:use-module (gnu packages file)      ;for 'file-next'
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages ghostscript)
   #:use-module (gnu packages gnome)
@@ -49,6 +50,7 @@
   #:use-module (gnu packages mono)
   #:use-module (gnu packages ocaml)
   #:use-module (gnu packages package-management)
+  #:use-module (gnu packages pascal)
   #:use-module (gnu packages patchutils)
   #:use-module (gnu packages pdf)
   #:use-module (gnu packages python-web)
@@ -72,25 +74,27 @@
 (define-public diffoscope
   (package
     (name "diffoscope")
-    (version "177")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://salsa.debian.org/reproducible-builds/diffoscope.git")
-                    (commit version)))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "02np9dq7jnq48lcmz4k1hvwc6xiqgjhrwr1vsbsfw8rxnp9vs0a5"))))
+    (version "199")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://salsa.debian.org/reproducible-builds/diffoscope.git")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0wy1nd52a4rzqhhdcdi3pfgrixz3w3q7qfc9mpc9zraq5cj94l7n"))
+       (patches
+        (search-patches "diffoscope-fix-llvm-test.patch"))))
     (build-system python-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
-                  ;; This test is broken because our `file` package has a
-                  ;; bug in berkeley-db file type detection.
-                  (add-after 'unpack 'remove-berkeley-test
+                  ;; These tests are broken because our `file` package has a
+                  ;; bug in berkeley-db and wasm file type detection.
+                  (add-after 'unpack 'remove-broken-file-type-detection-test
                     (lambda _
                       (delete-file "tests/comparators/test_berkeley_db.py")
-                      #t))
+                      (delete-file "tests/comparators/test_wasm.py")))
                   (add-after 'unpack 'embed-tool-references
                     (lambda* (#:key inputs #:allow-other-keys)
                       (substitute* "diffoscope/comparators/utils/compare.py"
@@ -106,101 +110,119 @@
                         (("\\['stat',")
                          (string-append "['" (which "stat") "',"))
                         (("\\['getfacl',")
-                         (string-append "['" (which "getfacl") "',")))
-                      #t))
+                         (string-append "['" (which "getfacl") "',")))))
                   (add-after 'build 'build-man-page
                     (lambda* (#:key (make-flags '()) #:allow-other-keys)
                       (apply invoke "make" "-C" "doc" make-flags)))
                   (add-before 'check 'writable-test-data
                     (lambda _
                       ;; Tests may need write access to tests directory.
-                      (for-each make-file-writable (find-files "tests"))
-                      #t))
+                      (for-each make-file-writable (find-files "tests"))))
+                  (add-before 'check 'fix-failing-test
+                    (lambda _
+                      ;; There is no user name mapping in the build environment.
+                      ;; Pytest made it so much harder than should be necessary,
+                      ;; so I'm leaving… this here in case I ever need it again:
+                      ;; (substitute* "tests/comparators/test_squashfs.py"
+                      ;;   (("^def test_symlink_root.*" match)     ; no, I don't
+                      ;;    (string-append                         ; know Python
+                      ;;     match "\n    raise ValueError("       ; why do you
+                      ;;     "differences_root[1].unified_diff)\n"))) ; ask
+                      (substitute* "tests/data/squashfs_root_expected_diff"
+                        (("root/root")
+                         '"0/0      "))))
                   (add-before 'check 'delete-failing-test
+                    ;; Please add new tests to fix-failing-test and not here ;-)
                     (lambda _
                       ;; This requires /sbin to be in $PATH.
-                      (delete-file "tests/test_tools.py")
-                      #t))
+                      (delete-file "tests/test_tools.py")))
                   (add-after 'install 'install-man-page
                     (lambda* (#:key outputs #:allow-other-keys)
                       (let* ((out (assoc-ref outputs "out"))
                              (man (string-append out "/share/man/man1")))
-                        (install-file "doc/diffoscope.1" man)
-                        #t))))))
-    (inputs `(("rpm" ,rpm)              ;for rpm-python
-              ("python-debian" ,python-debian)
-              ("python-libarchive-c" ,python-libarchive-c)
-              ("python-magic" ,python-magic)
-              ("python-tlsh" ,python-tlsh)
-              ("acl" ,acl)              ;for getfacl
-              ("colordiff" ,colordiff)
-              ("xxd" ,xxd)))
-    (native-inputs `(("help2man" ,help2man)
-                     ;; Below are modules used for tests.
-                     ("python-pytest" ,python-pytest)
-                     ("python-chardet" ,python-chardet)
-                     ("python-binwalk" ,python-binwalk)
-                     ("python-black" ,python-black)
-                     ("python-h5py" ,python-h5py)
-                     ("python-pypdf2" ,python-pypdf2)
-                     ("python-progressbar33" ,python-progressbar33)
-                     ;; The test suite skips tests when these are missing.
-                     ,@(match (%current-system)
-                         ;; ghc is only available on x86 currently.
-                         ((or "x86_64-linux" "i686-linux")
-                          `(("ghc" ,ghc)))
-                         (_
-                          `()))
-                     ,@(match (%current-system)
-                         ;; openjdk and dependent packages are only
-                         ;; available on x86_64 currently.
-                         ((or "x86_64-linux")
-                          `(("enjarify" ,enjarify)
-                            ;; no unversioned openjdk available
-                            ("openjdk:jdk" ,openjdk12 "jdk")))
-                         (_
-                          `()))
-                     ("abootimg" ,abootimg)
-                     ("bdb" ,bdb)
-                     ("binutils" ,binutils)
-                     ("bzip2" ,bzip2)
-                     ("cdrtools" ,cdrtools)
-                     ("colord" ,colord)
-                     ("cpio" ,cpio)
-                     ("docx2txt" ,docx2txt)
-                     ("dtc" ,dtc)
-                     ("e2fsprogs" ,e2fsprogs)
-                     ("ffmpeg" ,ffmpeg)
-                     ("gettext" ,gettext-minimal)
-                     ("ghostscript" ,ghostscript)
-                     ("giflib:bin" ,giflib "bin")
-                     ("gnumeric" ,gnumeric)
-                     ("gnupg" ,gnupg)
-                     ("hdf5" ,hdf5)
-                     ("imagemagick" ,imagemagick)
-                     ("libarchive" ,libarchive)
-                     ("llvm" ,llvm)
-                     ("lz4" ,lz4)
-                     ("mono" ,mono)
-                     ("ocaml" ,ocaml)
-                     ("odt2txt" ,odt2txt)
-                     ("openssh" ,openssh)
-                     ("openssl" ,openssl)
-                     ("pgpdump" ,pgpdump)
-                     ("poppler" ,poppler)
-                     ("python-jsbeautifier" ,python-jsbeautifier)
-                     ("r-minimal" ,r-minimal)
-                     ("rpm" ,rpm)
-                     ("sng" ,sng)
-                     ("sqlite" ,sqlite)
-                     ("squashfs-tools" ,squashfs-tools)
-                     ("tcpdump" ,tcpdump)
-                     ("unzip" ,unzip)
-                     ("wabt" ,wabt)
-                     ("xxd" ,xxd)
-                     ("xz" ,xz)
-                     ("zip" ,zip)
-                     ("zstd" ,zstd)))
+                        (install-file "doc/diffoscope.1" man)))))))
+    (inputs (list rpm ;for rpm-python
+                  python-debian
+                  python-libarchive-c
+                  python-magic
+                  python-tlsh
+                  acl ;for getfacl
+                  colordiff
+                  xxd))
+    (native-inputs
+     (append
+       (list help2man
+
+             ;; Below are packages used for tests.
+             binwalk
+             python-pytest
+             python-chardet
+             python-h5py
+             python-pypdf2
+             python-progressbar33
+
+             abootimg
+             bdb
+             binutils
+             bzip2
+             cdrtools
+             colord
+             cpio
+             docx2txt
+             dtc
+             e2fsprogs
+             ffmpeg
+
+             ;; XXX: Must be the same version as python-magic uses;
+             ;; remove when 'file' is updated.
+             file-next
+
+             fpc
+             gettext-minimal
+             ghostscript
+             `(,giflib "bin")
+             gnumeric
+             gnupg
+             hdf5
+             imagemagick
+             libarchive
+             llvm
+             lz4
+             mono
+             ocaml
+             odt2txt
+             openssh
+             openssl
+             pgpdump
+             poppler
+             python-jsbeautifier
+             r-minimal
+             rpm
+             sng
+             sqlite
+             squashfs-tools
+             tcpdump
+             unzip
+             wabt
+             xxd
+             xz
+             zip
+             zstd)
+
+       ;; Also for tests.  The test suite skips tests when these are missing.
+       (match (%current-system)
+         ;; ghc is only available on x86 currently.
+         ((or "x86_64-linux" "i686-linux")
+          (list ghc))
+         (_ '()))
+       (match (%current-system)
+         ;; openjdk and dependent packages are only
+         ;; available on x86_64 currently.
+         ((or "x86_64-linux")
+          (list enjarify)
+          ;; No unversioned openjdk available.
+          (list `(,openjdk12 "jdk")))
+         (_ '()))))
     (home-page "https://diffoscope.org/")
     (synopsis "Compare files, archives, and directories in depth")
     (description
@@ -217,7 +239,7 @@ install.")
 (define-public reprotest
   (package
     (name "reprotest")
-    (version "0.7.16")
+    (version "0.7.18")
     (source
      (origin
        (method git-fetch)
@@ -227,12 +249,9 @@ install.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0s7gyixk868dw6yqxsb1sq24mgg9ilz5s2yidd5j0zhl683n7dw9"))))
+         "19lwsxq53isgfkvlxvxqqmbjfcim3lhcxwk7m9ddfjiynhq74949"))))
     (inputs
-     `(("python-debian" ,python-debian)
-       ("python-distro" ,python-distro)
-       ("python-libarchive-c" ,python-libarchive-c)
-       ("python-rstr" ,python-rstr)))
+     (list python-debian python-distro python-libarchive-c python-rstr))
     (native-inputs
      `(("diffoscope" ,diffoscope)
        ("help2man" ,help2man)
@@ -310,10 +329,9 @@ them in detail for later analysis.")
                           (string-append share "/doc/" ,name "-" ,version)))
              #t)))))
     (propagated-inputs
-     `(("python-requests" ,python-requests)))
+     (list python-requests))
     (native-inputs
-     `(("gzip" ,gzip)
-       ("python-docutils" ,python-docutils)))
+     (list gzip python-docutils))
     (build-system python-build-system)
     (home-page "https://try.diffoscope.org")
     (synopsis "Client for remote diffoscope service")
diff --git a/gnu/packages/digest.scm b/gnu/packages/digest.scm
index 0af6720c03..4211848fdb 100644
--- a/gnu/packages/digest.scm
+++ b/gnu/packages/digest.scm
@@ -19,6 +19,7 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages digest)
+  #:use-module (guix gexp)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
@@ -66,7 +67,8 @@ Zig, V, and Nim programming language standard libraries.")
 (define-public xxhash
   (package
     (name "xxhash")
-    (version "0.8.0")
+    ;; XXX Remove the 'fix-man-page-links phase when updating.
+    (version "0.8.1")
     (source
      (origin
        (method git-fetch)
@@ -75,21 +77,27 @@ Zig, V, and Nim programming language standard libraries.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0hpbzdd6kfki5f61g103vp7pfczqkdj0js63avl0ss552jfb8h96"))))
+        (base32 "1h6080lvcr5mpbvy4fhb4i7wvhpy72nrixk3djmpai4hxq41hsnr"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:make-flags
-       (list ,(string-append "CC=" (cc-for-target))
-             ,(match (or (%current-target-system)
-                         (%current-system))
-                ;; Detect vector instruction set at run time.
-                ((or "i686-linux" "x86_64-linux") "DISPATCH=1")
-                (_ "DISPATCH=0"))
-             "XXH_FORCE_MEMORY_ACCESS=1" ; improved performance with GCC
-             (string-append "prefix=" (assoc-ref %outputs "out")))
-       #:phases
-       (modify-phases %standard-phases
-         (delete 'configure))))         ; no configure script
+     (list #:make-flags
+           #~(list #$(string-append "CC=" (cc-for-target))
+                   #$(match (or (%current-target-system)
+                                (%current-system))
+                       ;; Detect vector instruction set at run time.
+                       ((or "i686-linux" "x86_64-linux") "DISPATCH=1")
+                       (_ "DISPATCH=0"))
+                   "XXH_FORCE_MEMORY_ACCESS=1" ; improved performance with GCC
+                   (string-append "prefix=" (assoc-ref %outputs "out")))
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'fix-man-page-links
+                 ;; https://github.com/Cyan4973/xxHash/issues/647
+                 (lambda _
+                   (substitute* "Makefile"
+                     (("ln -sf \\$\\(MAN\\)")
+                      "ln -sf xxhsum.1"))))
+               (delete 'configure))))         ; no configure script
     (home-page "https://cyan4973.github.io/xxHash/")
     (synopsis "Extremely fast hash algorithm")
     (description
diff --git a/gnu/packages/direct-connect.scm b/gnu/packages/direct-connect.scm
index b2e9776f94..d342537122 100644
--- a/gnu/packages/direct-connect.scm
+++ b/gnu/packages/direct-connect.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net>
+;;; Copyright © 2022 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -18,9 +19,11 @@
 
 (define-module (gnu packages direct-connect)
   #:use-module (guix build-system scons)
+  #:use-module (guix gexp)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (gnu packages)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages gettext)
@@ -42,24 +45,33 @@
              "https://launchpad.net/linuxdcpp/1.1/1.1.0/+download/linuxdcpp-"
              version ".tar.bz2"))
        (sha256
-        (base32
-         "12i92hirmwryl1qy0n3jfrpziwzb82f61xca9jcjwyilx502f0b6"))))
+        (base32 "12i92hirmwryl1qy0n3jfrpziwzb82f61xca9jcjwyilx502f0b6"))
+       (patches (search-patches "linuxdcpp-openssl-1.1.patch"))
+       (modules '((guix build utils)))
+       (snippet
+        #~(begin
+            (substitute* "SConstruct"
+              ;; This compares single char[]acters in the version string, and
+              ;; broke when GCC went into double digits.
+              (("conf.CheckCXXVersion\\([^\\)]*\\)")
+               "True")
+              ;; Not all valid C++98 code is valid C++14 (and higher) code.
+              (("'-D_REENTRANT'" match)
+               (string-append match ", '-std=gnu++98'")))))))
     (build-system scons-build-system)
     (arguments
      `(#:scons ,scons-python2
        #:scons-flags (list (string-append "PREFIX=" %output))
        #:tests? #f)) ; no tests
     (inputs
-     `(("boost" ,boost)
-       ("bzip2" ,bzip2)
-       ("gtk+" ,gtk+-2)
-       ("libglade" ,libglade)
-       ("libnotify" ,libnotify)
-       ("openssl" ,openssl)))
+     (list boost
+           bzip2
+           gtk+-2
+           libglade
+           libnotify
+           openssl))
     (native-inputs
-     `(("bazaar" ,bazaar)
-       ("gettext-minimal" ,gettext-minimal)
-       ("pkg-config" ,pkg-config)))
+     (list bazaar gettext-minimal pkg-config))
     (home-page "https://launchpad.net/linuxdcpp/")
     (synopsis "Direct Connect client")
     (description "LinuxDC++ is a Direct Connect (DC) client.  Direct Connect
diff --git a/gnu/packages/disk.scm b/gnu/packages/disk.scm
index 7d6f3811dd..1a196f4b40 100644
--- a/gnu/packages/disk.scm
+++ b/gnu/packages/disk.scm
@@ -21,6 +21,7 @@
 ;;; Copyright © 2021 Michael Rohleder <mike@rohleder.de>
 ;;; Copyright © 2021 Mathieu Othacehe <othacehe@gnu.org>
 ;;; Copyright © 2021 Brice Waegeneire <brice@waegenei.re>
+;;; Copyright © 2021 Justin Veilleux <terramorpha@cock.li>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -58,6 +59,7 @@
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages gnupg)
+  #:use-module (gnu packages golang)
   #:use-module (gnu packages graphics)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages guile)
@@ -65,10 +67,12 @@
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages nss)
   #:use-module (gnu packages perl)
+  #:use-module (gnu packages perl-web)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages popt)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-xyz)
+  #:use-module (gnu packages qt)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages samba)
   #:use-module (gnu packages serialization)
@@ -89,6 +93,7 @@
   #:use-module (guix build-system trivial)
   #:use-module (guix build-system scons)
   #:use-module (guix download)
+  #:use-module (guix gexp)
   #:use-module (guix git-download)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
@@ -140,7 +145,7 @@
                                  "/share/man/man8"))
                  #t))))))
       (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
       (inputs
        `(("util-linux:lib" ,util-linux "lib"))) ; libblkid
       (home-page "https://bcache.evilpiepirate.org")
@@ -208,15 +213,14 @@ and write-back caching.")
                (("`which udevil 2>/dev/null`") "/run/setuid-programs/udevil"))
              #t)))))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("cifs-utils" ,cifs-utils)
-       ("curlftpfs" ,curlftpfs)
-       ("eudev" ,eudev)
-       ("fakeroot" ,fakeroot)
-       ("glib" ,glib)
-       ("sshfs" ,sshfs)))
+     (list cifs-utils
+           curlftpfs
+           eudev
+           fakeroot
+           glib
+           sshfs))
     (synopsis "Device and file system manager")
     (description "udevil is a command line program that mounts and unmounts
 removable devices without a password, shows device info, and monitors device
@@ -248,9 +252,8 @@ tmpfs/ramfs filesystems.")
                (("/usr/bin/python") (which "python")))
              #t)))))
     (inputs
-     `(("lvm2" ,lvm2)
-       ("readline" ,readline)
-       ("util-linux" ,util-linux "lib")))
+     (list lvm2 readline
+           `(,util-linux "lib")))
     (native-inputs
      `(("gettext" ,gettext-minimal)
 
@@ -334,8 +337,7 @@ tables, and it understands a variety of different formats.")
                (substitute* "autogen.sh"
                  (("\\./configure") "")))))))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)))
+       (list autoconf automake))
       (home-page "https://github.com/baruch/gpart")
       (synopsis "Guess and recover PC-style partition tables")
       (description
@@ -423,7 +425,7 @@ scheme.")
      `(#: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)))
+    (native-inputs (list lzip))
     (description
      "GNU ddrescue is a fully automated data recovery tool.  It copies data
 from one file to another, working to rescue data in case of read errors.  The
@@ -447,13 +449,12 @@ to recover data more efficiently by only reading the necessary blocks.")
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags (list "--enable-compat-symlinks")
-       #:make-flags (list (string-append "PREFIX=" %output)
-                          "CC=gcc")))
+       #:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
+                          (string-append "CC=" ,(cc-for-target)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ;; For tests.
-       ("xxd" ,xxd)))
+     (list autoconf automake
+           ;; For tests.
+           xxd))
     (home-page "https://github.com/dosfstools/dosfstools")
     (synopsis "Utilities for making and checking MS-DOS FAT file systems")
     (description
@@ -488,7 +489,7 @@ which respectively make and check MS-DOS FAT file systems.")
              ;; Add fsck.vfat symlink to match the Linux driver name.
              (symlink exe "fsck.vfat")
              #t)))))
-    (inputs `(("dosfstools" ,dosfstools/static)))
+    (inputs (list dosfstools/static))
     (home-page (package-home-page dosfstools))
     (synopsis "Statically linked fsck.fat from dosfstools")
     (description "This package provides a statically-linked @command{fsck.fat}
@@ -569,17 +570,13 @@ and can dramatically shorten the lifespan of the drive if left unchecked.")
       ;; as '/dev/disk/by-id'
      `(#:tests? #f))
     (inputs
-     `(("util-linux" ,util-linux "lib")
-       ("parted" ,parted)
-       ("glib" ,glib)
-       ("gtkmm" ,gtkmm)
-       ("libxml2" ,libxml2)))
+     (list `(,util-linux "lib") parted glib gtkmm-3 libxml2))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("itstool" ,itstool)
-       ("lvm2" ,lvm2) ; for tests
-       ("yelp-tools" ,yelp-tools)
-       ("pkg-config" ,pkg-config)))
+     (list intltool
+           itstool
+           lvm2 ; for tests
+           yelp-tools
+           pkg-config))
     (home-page "https://gparted.org/")
     (synopsis "Partition editor to graphically manage disk partitions")
     (description "GParted is a GNOME partition editor for creating,
@@ -637,10 +634,9 @@ systems.  Output format is completely customizable.")
            (lambda* (#:key make-flags #:allow-other-keys)
              (apply invoke "make" "install-extra" make-flags))))))
     (inputs
-     `(("eudev" ,eudev)
-       ("parted" ,parted)))
+     (list eudev parted))
     (home-page "http://oss.digirati.com.br/f3/")
-    (synopsis "Test real capacity of flash memory cards and such.")
+    (synopsis "Test real capacity of flash memory cards and such")
     (description "F3 (Fight Flash Fraud or Fight Fake Flash) tests the full
 capacity of a flash card (flash drive, flash disk, pendrive).  F3 writes to
 the card and then checks if can read it.  It will assure you haven't been sold
@@ -674,12 +670,11 @@ a card with a smaller capacity than stated.")
              (invoke "python" "-m" "unittest" "discover" "-v")
              #t)))))
     (native-inputs
-     `(("e2fsprogs" ,e2fsprogs)
-       ("pkg-config" ,pkg-config)))
+     (list e2fsprogs pkg-config))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (inputs
-     `(("parted" ,parted)))
+     (list parted))
     (home-page "https://github.com/dcantrell/pyparted")
     (synopsis "Parted bindings for Python")
     (description "This package provides @code{parted} bindings for Python.")
@@ -700,10 +695,9 @@ a card with a smaller capacity than stated.")
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("glib" ,glib)
-       ("sqlite" ,sqlite)))
+     (list glib sqlite))
     (arguments
      `(#:tests? #f                      ; no test suite
        #:phases
@@ -743,12 +737,11 @@ Duperemove can also take input from the @command{fdupes} program.")
                 "0lfjrpv3z4h0knd3v94fijrw2zjba51mrp3mjqx2c98wr428l26f"))))
     (build-system python-build-system)
     (inputs
-     `(("w3m" ,w3m)))
+     (list w3m))
     (native-inputs
-     `(("which" ,which)
-
-       ;; For tests.
-       ("python-pytest" ,python-pytest)))
+     (list which
+           ;; For tests.
+           python-pytest))
     (arguments
      '( ;; The 'test' target runs developer tools like pylint, which fail.
        #:test-target "test_pytest"
@@ -790,9 +783,7 @@ automatically finding out which program to use for what file type.")
                 "16rhfz6sjwxlmss1plb2wv2i3jq6wza02rmz1d2jrlnsq67p98vc"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("swig" ,swig)
-       ("python" ,python-3)))           ; used to generate the Python bindings
+     (list pkg-config swig python-3))           ; used to generate the Python bindings
     (inputs
      `(("cryptsetup" ,cryptsetup)
        ("nss" ,nss)
@@ -821,7 +812,7 @@ passphrases.")
 (define-public ndctl
   (package
     (name "ndctl")
-    (version "71.1")
+    (version "72.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -830,43 +821,47 @@ passphrases.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1vi61bm9wyawklswh9mj9zdp28ar7r97qckwnhgiyila73fb3jx2"))))
+                "1lvrhlad5n43bal053ihgbwr1k4ka2kscrjwr9rs5xnf2vy7204v"))))
     (build-system gnu-build-system)
+    (arguments
+     (list #:configure-flags
+           #~(list "--disable-asciidoctor" ; use docbook-xsl instead
+                   "--without-systemd")
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'fix-version
+                 ;; Our VERSION's always better than the build's poor guess.
+                 (lambda _
+                   (with-output-to-file "version"
+                     (lambda _ (display #$version)))))
+               (add-after 'unpack 'patch-FHS-file-names
+                 (lambda _
+                   (substitute* "git-version-gen"
+                     (("/bin/sh") (which "sh")))
+                   (substitute* "git-version"
+                     (("/bin/bash") (which "bash"))))))
+           #:make-flags
+           #~(list (string-append "BASH_COMPLETION_DIR=" #$output
+                                  "/share/bash-completion/completions"))))
     (native-inputs
-     `(("asciidoc" ,asciidoc)
-       ("automake" ,automake)
-       ("autoconf" ,autoconf)
-       ("bash-completion" ,bash-completion)
-       ("docbook-xsl" ,docbook-xsl)
-       ("libtool" ,libtool)
-       ("libxml2" ,libxml2)
-       ("pkg-config" ,pkg-config)
-       ("xmlto" ,xmlto)
-       ;; Required for offline docbook generation.
-       ("which" ,which)))
+     (list asciidoc
+           automake
+           autoconf
+           bash-completion
+           docbook-xsl
+           libtool
+           libxml2
+           pkg-config
+           xmlto
+           ;; Required for offline docbook generation.
+           which))
     (inputs
-     `(("eudev" ,eudev)
-       ("json-c" ,json-c)
-       ("keyutils" ,keyutils)
-       ("kmod" ,kmod)
-       ("util-linux" ,util-linux "lib")))
-    (arguments
-     `(#:configure-flags
-       (list "--disable-asciidoctor"    ; use docbook-xsl instead
-             "--without-systemd")
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'patch-FHS-file-names
-           (lambda _
-             (substitute* "git-version-gen"
-               (("/bin/sh") (which "sh")))
-             (substitute* "git-version"
-               (("/bin/bash") (which "bash")))
-             #t)))
-       #:make-flags
-       (let ((out (assoc-ref %outputs "out")))
-         (list (string-append "BASH_COMPLETION_DIR=" out
-                              "/share/bash-completion/completions")))))
+     (list eudev
+           iniparser
+           json-c
+           keyutils
+           kmod
+           `(,util-linux "lib")))
     (home-page "https://github.com/pmem/ndctl")
     (synopsis "Manage the non-volatile memory device sub-system in the Linux kernel")
     (description
@@ -889,8 +884,8 @@ libnvdimm (non-volatile memory device) sub-system in the Linux kernel.")
                (base32
                 "1n7vsqvh7y6yvil682q129d21yhb0cmvd5fvsbkza7ypd78inhlk"))))
     (build-system gnu-build-system)
-    (inputs `(("lvm2" ,lvm2)))
-    (native-inputs `(("which" ,which)))
+    (inputs (list lvm2))
+    (native-inputs (list which))
     (arguments
      `(#:tests? #f                      ; No tests.
        ;; Prevent a race condition where some target would attempt to link
@@ -922,16 +917,15 @@ to create devices with respective mappings for the ATARAID sets discovered.")
 (define-public libblockdev
   (package
     (name "libblockdev")
-    (version "2.25")
+    (version "2.26")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/storaged-project/"
                                   "libblockdev/releases/download/"
                                   version "-1/libblockdev-" version ".tar.gz"))
-              (patches (search-patches "libblockdev-glib-compat.patch"))
               (sha256
                (base32
-                "0s0nazkpzpn4an00qghjkk9n7gdm5a8dqfr5hfnlk5mk5lma8njm"))))
+                "0sg068jb87ljhn8yazrqxi6ri10ic2sh1lp6ikd2nqxc6l5y3h64"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -947,23 +941,22 @@ to create devices with respective mappings for the ATARAID sets discovered.")
        ("python" ,python-wrapper)
        ("util-linux" ,util-linux)))
     (inputs
-     `(("btrfs-progs" ,btrfs-progs)
-       ("cryptsetup" ,cryptsetup)
-       ("dosfstools" ,dosfstools)
-       ("dmraid" ,dmraid)
-       ("eudev" ,eudev)
-       ("glib" ,glib)
-       ("kmod" ,kmod)
-       ("libbytesize" ,libbytesize)
-       ("libyaml" ,libyaml)
-       ("lvm2" ,lvm2)
-       ("mdadm" ,mdadm)
-       ("ndctl" ,ndctl)
-       ("nss" ,nss)
-       ("parted" ,parted)
-       ("volume-key" ,volume-key)
-       ;; ("xfsprogs" ,xfsprogs) ; TODO: Package?
-       ))
+     (list btrfs-progs
+           cryptsetup
+           dosfstools
+           dmraid
+           eudev
+           glib
+           kmod
+           libbytesize
+           libyaml
+           lvm2
+           mdadm
+           ndctl
+           nss
+           parted
+           volume-key
+           xfsprogs))
     (home-page "https://github.com/storaged-project/libblockdev")
     (synopsis "Library for manipulating block devices")
     (description
@@ -1045,7 +1038,7 @@ on your file system and offers to remove it.  @command{rmlint} can find:
 (define-public lf
   (package
     (name "lf")
-    (version "13")
+    (version "25")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1054,11 +1047,14 @@ on your file system and offers to remove it.  @command{rmlint} can find:
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1ld3q75v8rvp169w5p85z1vznqs9bhck6bm2f6fykxx16hmpb6ga"))))
+                "014cybng6hc9y3ma74hpc1ac3rkz4ydflx8jbmvx81rdd08rzwz7"))))
     (build-system go-build-system)
     (native-inputs
      `(("go-github.com-mattn-go-runewidth" ,go-github.com-mattn-go-runewidth)
-       ("go-github.com-nsf-termbox-go" ,go-github.com-nsf-termbox-go)))
+       ("go-github.com-nsf-termbox-go" ,go-github.com-nsf-termbox-go)
+       ("go-golang-org-x-term" ,go-golang-org-x-term)
+       ("go-gopkg-in-djherbis-times-v1" ,go-gopkg-in-djherbis-times-v1)
+       ("go-github-com-gdamore-tcell-v2" ,go-github-com-gdamore-tcell-v2)))
     (arguments
      `(#:import-path "github.com/gokcehan/lf"))
     (home-page "https://github.com/gokcehan/lf")
@@ -1123,8 +1119,7 @@ since they are better handled by external tools.")
                    (("~/.config/xfe") xfe)))
                #t))))))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
      `(("bash" ,bash)
        ("coreutils" ,coreutils)
@@ -1190,7 +1185,7 @@ that support this feature).")
 (define-public memkind
   (package
     (name "memkind")
-    (version "1.11.0")
+    (version "1.12.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1198,19 +1193,15 @@ that support this feature).")
                     (commit (string-append "v" version))))
               (file-name (git-file-name name version))
               (sha256
-               (base32
-                "0w5hws12l167mbr4n6a6fl0mhf8mci61fsn55lh2cxz33f7q8n2x"))))
+               (base32 "1s52vl2jlrdc8nxnvf993x9mcag56qxcaniiijhmsv42a26hvjk4"))))
     (build-system gnu-build-system)
     (inputs
-     `(;; memkind patched jemalloc to add je_arenalookupx,
-       ;; je_check_reallocatex--i.e. they forked jemalloc.
-       ;("jemalloc" ,jemalloc)
-       ("ndctl" ,ndctl)
-       ("numactl" ,numactl)))
+     (list ;; memkind patched jemalloc to add je_arenalookupx,
+           ;; je_check_reallocatex--i.e. they forked jemalloc.
+           ;("jemalloc" ,jemalloc)
+           ndctl numactl))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (arguments
      `(#:configure-flags
        (list (string-append "--docdir=" (assoc-ref %outputs "out")
@@ -1225,8 +1216,7 @@ that support this feature).")
                 (("/bin/sh") (which "sh")))
                (invoke "autoconf")
                (substitute* "configure"
-                (("/bin/sh") (which "sh"))))
-             #t)))))
+                (("/bin/sh") (which "sh")))))))))
     (home-page "https://github.com/memkind/memkind")
     (synopsis "Heap manager with memory kinds (for NUMA)")
     (description "This package provides a user-extensible heap manager
@@ -1235,8 +1225,8 @@ and a partitioning of the heap between kinds of memory (for NUMA).")
     (license license:bsd-3)))
 
 (define-public mmc-utils
-  (let ((commit "e9654ebc4a6a48642848822c4a1355a9de4958d1")
-        (revision "0"))
+  (let ((commit "3969aa4804edb8aed7bcb3c958e49d0c7388b067")
+        (revision "1"))
     (package
       (name "mmc-utils")
       (version (git-version "0.1" revision commit))
@@ -1244,12 +1234,11 @@ and a partitioning of the heap between kinds of memory (for NUMA).")
         (origin
           (method git-fetch)
           (uri (git-reference
-                 (url "https://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc-utils.git")
+                 (url "https://git.kernel.org/pub/scm/utils/mmc/mmc-utils.git")
                  (commit commit)))
           (file-name (git-file-name name version))
           (sha256
-           (base32
-            "1dbsppsmky0r4z6kxwczrw8pih8bhc2pb61gsvs986r4xy6jr17a"))))
+           (base32 "0pvcm685x63afvp8795jd4vn4zs8psh8bs6j2yvk1kgrawpyk10g"))))
       (build-system gnu-build-system)
       (arguments
        `(#:tests? #f ; No test suite
@@ -1265,7 +1254,8 @@ and a partitioning of the heap between kinds of memory (for NUMA).")
                (let* ((out (assoc-ref outputs "out"))
                       (man1 (string-append out "/share/man/man1")))
                  (install-file "man/mmc.1" man1)))))))
-      (home-page "https://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc-utils.git/")
+      (home-page
+       "https://www.kernel.org/doc/html/latest/driver-api/mmc/mmc-tools.html")
       (synopsis "Configure MMC storage devices from userspace")
       (description "mmc-utils is a command-line tool for configuring and
 inspecting MMC storage devices from userspace.")
@@ -1294,10 +1284,9 @@ inspecting MMC storage devices from userspace.")
              (invoke "nosetests" "-v"
                      "--exclude" "test_bmap_helpers"))))))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-nose" ,python-nose)))
+     (list python-mock python-nose))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://github.com/intel/bmap-tools")
     (synopsis "Create block map for a file or copy a file using block map")
     (description "Bmaptool is a tool for creating the block map (bmap) for a
@@ -1338,15 +1327,9 @@ reliably with @code{bmaptool} than with traditional tools, like @code{dd} or
                     (doc (string-append out "/share/doc/" ,name "-" ,version)))
                (copy-recursively "examples" (string-append doc "/examples"))))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
-     `(("cairo" ,cairo)
-       ("pango" ,pango)
-       ("tokyocabinet" ,tokyocabinet)
-       ("ncurses" ,ncurses)))
+     (list cairo pango tokyocabinet ncurses))
     (home-page "http://duc.zevv.nl")
     (synopsis "Library and suite of tools for inspecting disk usage")
     (description "Duc maintains a database of accumulated sizes of
@@ -1356,3 +1339,47 @@ some tools, or create fancy graphs showing you where your bytes are.
 Duc comes with console utilities, ncurses and X11 user interfaces and a CGI
 wrapper for disk usage querying and visualisation.")
     (license license:lgpl3+)))
+
+(define-public qdirstat
+  (package
+    (name "qdirstat")
+    (version "1.8")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/shundhammer/qdirstat")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "079rmy3j0442y5gjh6la6w1j6jaw83wklamrf19yxi20zsm99xs7"))))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'configure
+           (lambda* (#:key outputs #:allow-other-keys)
+             (system* "qmake"
+                      (string-append "INSTALL_PREFIX="
+                                     (assoc-ref outputs "out")))))
+         (add-after 'install 'wrap
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (wrap-program (string-append
+                            (assoc-ref outputs "out")
+                            "/bin/qdirstat-cache-writer")
+               `("PERL5LIB" ":" prefix
+                 (,(string-append
+                    (assoc-ref inputs "perl-uri-escape")
+                    "/lib/perl5/site_perl")))))))))
+    (build-system gnu-build-system)
+    (inputs
+     (list bash-minimal
+           perl
+           perl-uri-escape
+           qtbase-5
+           zlib))
+    (synopsis "Storage utilisation visualization tool")
+    (description
+     "QDirStat is a graphical application to show where your disk space has
+gone and to help you to clean it up.")
+    (home-page "https://github.com/shundhammer/qdirstat")
+    (license license:gpl2)))
diff --git a/gnu/packages/display-managers.scm b/gnu/packages/display-managers.scm
index 8a0342d7c5..80aad1af5d 100644
--- a/gnu/packages/display-managers.scm
+++ b/gnu/packages/display-managers.scm
@@ -10,6 +10,8 @@
 ;;; Copyright © 2020 Fredrik Salomonsson <plattfot@gmail.com>
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
 ;;; Copyright © 2021 Zheng Junjie <873216071@qq.com>
+;;; Copyright © 2021 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2021 Petr Hodina <phodina@protonmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -37,8 +39,10 @@
   #:use-module (guix build-system trivial)
   #:use-module (guix packages)
   #:use-module (guix utils)
+  #:use-module (guix gexp)
   #:use-module (gnu packages)
   #:use-module (gnu packages admin)
+  #:use-module (gnu packages bash)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages gl)
@@ -71,47 +75,43 @@
                 "0hcdysw8ibr66vk8i7v56l0v5ijvhlq67v4460mc2xf2910g2m72"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules pkg-config qttools))
     (inputs
-     `(("elogind" ,elogind)
-       ("glib" ,glib)
-       ("libxcb" ,libxcb)
-       ("libxkbcommon" ,libxkbcommon)
-       ("linux-pam" ,linux-pam)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-
-       ;; Some user-defined themes use QtQuick components internally.  Adding
-       ;; QtQuick & co. here; they end up in QML2_IMPORT_PATH thanks to
-       ;; 'wrap-qt-program'.
-       ("qtgraphicaleffects" ,qtgraphicaleffects)
-       ("qtquickcontrols" ,qtquickcontrols)
-       ("qtquickcontrols2" ,qtquickcontrols2)
-       ("qtsvg" ,qtsvg)
-
-       ("shadow" ,shadow)
-       ("wayland" ,wayland)))
+     (list elogind
+           glib
+           libxcb
+           libxkbcommon
+           linux-pam
+           qtbase-5
+           qtdeclarative
+           ;; Some user-defined themes use QtQuick components internally.  Adding
+           ;; QtQuick & co. here; they end up in QML2_IMPORT_PATH thanks to
+           ;; 'wrap-qt-program'.
+           qtgraphicaleffects
+           qtquickcontrols
+           qtquickcontrols2
+           qtsvg
+           shadow
+           wayland))
     (arguments
      `(#:configure-flags
-       (list
-        ;; This option currently does nothing, but will presumably be enabled
-        ;; if/when <https://github.com/sddm/sddm/pull/616> is merged.
-        "-DENABLE_WAYLAND=ON"
-        "-DENABLE_PAM=ON"
-        ;; Both flags are required for elogind support.
-        "-DNO_SYSTEMD=ON" "-DUSE_ELOGIND=ON"
-        "-DCONFIG_FILE=/etc/sddm.conf"
-        ;; Set path to /etc/login.defs.
-        ;; An alternative would be to use -DUID_MIN and -DUID_MAX.
-        (string-append "-DLOGIN_DEFS_PATH="
-                       (assoc-ref %build-inputs "shadow")
-                       "/etc/login.defs")
-        (string-append "-DQT_IMPORTS_DIR="
-                       (assoc-ref %outputs "out") "/lib/qt5/qml")
-        (string-append "-DCMAKE_INSTALL_SYSCONFDIR="
-                       (assoc-ref %outputs "out") "/etc"))
+       ,#~(list
+            ;; This option currently does nothing, but will presumably be enabled
+            ;; if/when <https://github.com/sddm/sddm/pull/616> is merged.
+            "-DENABLE_WAYLAND=ON"
+            "-DENABLE_PAM=ON"
+            ;; Both flags are required for elogind support.
+            "-DNO_SYSTEMD=ON" "-DUSE_ELOGIND=ON"
+            "-DCONFIG_FILE=/etc/sddm.conf"
+            ;; Set path to /etc/login.defs.
+            ;; An alternative would be to use -DUID_MIN and -DUID_MAX.
+            (string-append "-DLOGIN_DEFS_PATH="
+                           #$(this-package-input "shadow")
+                           "/etc/login.defs")
+            (string-append "-DQT_IMPORTS_DIR="
+                           #$output "/lib/qt5/qml")
+            (string-append "-DCMAKE_INSTALL_SYSCONFDIR="
+                           #$output "/etc"))
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'embed-loginctl-reference
@@ -189,6 +189,68 @@ Guix's logo.  Based on Arch linux's archlinux-simplyblack theme.")
 easy to use, login interface with a modern yet classy touch.")
     (license license:gpl3+)))
 
+(define-public sugar-dark-sddm-theme
+  (package
+    (name "sugar-dark-sddm-theme")
+    (version "1.2")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/MarianArlt/sddm-sugar-dark")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0gx0am7vq1ywaw2rm1p015x90b75ccqxnb1sz3wy8yjl27v82yhb"))))
+    (build-system trivial-build-system)
+    (arguments
+     `(#:modules ((guix build utils))
+       #:builder
+       (begin
+         (use-modules (guix build utils))
+         (let* ((out (assoc-ref %outputs "out"))
+                (sddm-themes (string-append out "/share/sddm/themes")))
+           (mkdir-p sddm-themes)
+           (copy-recursively (assoc-ref %build-inputs "source")
+                             (string-append sddm-themes "/chili"))))))
+    (home-page "https://github.com/MarianArlt/sddm-sugar-dark")
+    (synopsis "Sugar dark theme for SDDM")
+    (description "Sugar is extremely customizable and so sweet it will
+probably cause you diabetes just from looking at it.  Sweeten the login
+experience for your users, your family and yourself")
+    (license license:gpl3+)))
+
+(define-public sugar-light-sddm-theme
+  (package
+    (name "sugar-light-sddm-theme")
+    (version "1.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/MarianArlt/sddm-sugar-light")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1sfd5bi5jcfz3hmvvr3smalywixa70g5j96qgx1220mp6rqf886k"))))
+    (build-system trivial-build-system)
+    (arguments
+     `(#:modules ((guix build utils))
+       #:builder
+       (begin
+         (use-modules (guix build utils))
+         (let* ((out (assoc-ref %outputs "out"))
+                (sddm-themes (string-append out "/share/sddm/themes")))
+           (mkdir-p sddm-themes)
+           (copy-recursively (assoc-ref %build-inputs "source")
+                             (string-append sddm-themes "/chili"))))))
+    (home-page "https://github.com/MarianArlt/sddm-sugar-light")
+    (synopsis "Sugar light theme for SDDM")
+    (description "Sugar is extremely customizable and so sweet it will
+probably cause you diabetes just from looking at it.  Sweeten the login
+experience for your users, your family and yourself")
+    (license license:gpl3+)))
+
 (define-public lightdm
   (package
     (name "lightdm")
@@ -223,7 +285,7 @@ easy to use, login interface with a modern yet classy touch.")
            ;; Run test-suite under a dbus session.
            (lambda* (#:key inputs #:allow-other-keys)
              (wrap-program "tests/src/test-python-greeter"
-               `("PYTHONPATH"      ":" prefix (,(getenv "PYTHONPATH")))
+               `("GUIX_PYTHONPATH"      ":" prefix (,(getenv "GUIX_PYTHONPATH")))
                `("GI_TYPELIB_PATH" ":" prefix (,(getenv "GI_TYPELIB_PATH"))))
 
              ;; Avoid printing locale warnings, which trip up the text
@@ -231,11 +293,11 @@ easy to use, login interface with a modern yet classy touch.")
              (unsetenv "LC_ALL")
              #t)))))
     (inputs
-     `(("audit" ,audit)
-       ("linux-pam" ,linux-pam)
-       ("shadow" ,shadow)                         ;for sbin/nologin
-       ("libgcrypt" ,libgcrypt)
-       ("libxcb" ,libxcb)))
+     (list audit
+           linux-pam
+           shadow ;for sbin/nologin
+           libgcrypt
+           libxcb))
     (native-inputs
      `(("gobject-introspection" ,gobject-introspection)
        ("pkg-config" ,pkg-config)
@@ -248,9 +310,7 @@ easy to use, login interface with a modern yet classy touch.")
        ("python-pygobject" ,python2-pygobject)))
     ;; Required by liblightdm-gobject-1.pc.
     (propagated-inputs
-     `(("glib" ,glib)
-       ("libx11" ,libx11)
-       ("libxklavier" ,libxklavier)))
+     (list glib libx11 libxklavier))
     (home-page "https://www.freedesktop.org/wiki/Software/LightDM/")
     (synopsis "Lightweight display manager")
     (description "The Light Display Manager (LightDM) is a cross-desktop
@@ -260,16 +320,16 @@ display manager which supports different greeters.")
 (define-public lightdm-gtk-greeter
   (package
     (name "lightdm-gtk-greeter")
-    (version "2.0.7")
+    (version "2.0.8")
     (source (origin
               (method url-fetch)
               (uri (string-append
-                    "https://launchpad.net/lightdm-gtk-greeter/"
-                    (version-major+minor version) "/" version
-                    "/+download/lightdm-gtk-greeter-" version ".tar.gz"))
+                    "https://github.com/xubuntu/lightdm-gtk-greeter"
+                    "/releases/download/lightdm-gtk-greeter-" version "/"
+                    "lightdm-gtk-greeter-" version ".tar.gz"))
               (sha256
                (base32
-                "1g7wc3d3vqfa7mrdhx1w9ywydgjbffla6rbrxq9k3sc62br97qms"))))
+                "04q62mvr97l9gv8h37hfarygqc7p0498ig7xclcg4kxkqw0b7yxy"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
@@ -302,16 +362,15 @@ display manager which supports different greeters.")
                  `("GIO_EXTRA_MODULES" ":" prefix (,gtk))))
              #t)))))
     (native-inputs
-     `(("exo" ,exo)
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list exo intltool pkg-config xfce4-dev-tools))
     (inputs
-     `(("lightdm" ,lightdm)
+     `(("bash" ,bash-minimal) ; for wrap-program
+       ("lightdm" ,lightdm)
        ("shared-mime-info" ,shared-mime-info)
        ("at-spi2-core" ,at-spi2-core)
        ("gtk+" ,gtk+)))
     (synopsis "GTK+ greeter for LightDM")
-    (home-page "https://launchpad.net/lightdm-gtk-greeter")
+    (home-page "https://github.com/xubuntu/lightdm-gtk-greeter")
     (description "This package provides a LightDM greeter implementation using
 GTK+, lets you select a desktop session and log in to it.")
     (license license:gpl3+)))
@@ -348,7 +407,7 @@ GTK+, lets you select a desktop session and log in to it.")
 	      ("libxmu" ,libxmu)
 	      ("xauth" ,xauth)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
diff --git a/gnu/packages/distributed.scm b/gnu/packages/distributed.scm
index 868fc589a6..182be4aaf7 100644
--- a/gnu/packages/distributed.scm
+++ b/gnu/packages/distributed.scm
@@ -58,20 +58,17 @@
                 "1p8y3mnf5yfhavhqxwf9v68prg1601h8q1pllm5z89zh661di3mj"))))
     (build-system gnu-build-system)
     (arguments '(#:configure-flags '("--disable-server")))
-    (inputs `(("openssl" ,openssl)
-              ("curl" ,curl)
-              ("wxwidgets" ,wxwidgets)
-              ("gtk+" ,gtk+)
-              ("gdk-pixbuf" ,gdk-pixbuf)
-              ("libnotify" ,libnotify)
-              ("sqlite" ,sqlite)
-              ("python" ,python)
-              ("python-pyserial" ,python-pyserial)))
+    (inputs (list openssl
+                  curl
+                  wxwidgets
+                  gtk+
+                  gdk-pixbuf
+                  libnotify
+                  sqlite
+                  python
+                  python-pyserial))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (synopsis "Help cutting-edge science research using your computer")
     (description "BOINC is a platform for high-throughput computing on a large
 scale (thousands or millions of computers).  It can be used for volunteer
diff --git a/gnu/packages/django.scm b/gnu/packages/django.scm
index f8aae1e33f..abec9e454f 100644
--- a/gnu/packages/django.scm
+++ b/gnu/packages/django.scm
@@ -6,7 +6,9 @@
 ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2018 Vijayalakshmi Vedantham <vijimay12@gmail.com>
 ;;; Copyright © 2019 Sam <smbaines8@gmail.com>
-;;; Copyright © 2020, 2021 Marius Bakke <marius@gnu.org>
+;;; Copyright © 2020, 2021, 2022 Marius Bakke <marius@gnu.org>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021 Luis Felipe López Acevedo <luis.felipe.la@protonmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -28,16 +30,19 @@
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
+  #:use-module (guix gexp)
   #:use-module (guix build-system python)
+  #:use-module (guix deprecation)
   #:use-module (gnu packages)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages compression)
   #:use-module (gnu packages databases)
   #:use-module (gnu packages check)
   #:use-module (gnu packages finance)
   #:use-module (gnu packages geo)
   #:use-module (gnu packages openldap)
   #:use-module (gnu packages python)
-  #:use-module (gnu packages python-compression)
+  #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-crypto)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
@@ -45,16 +50,16 @@
   #:use-module (gnu packages time)
   #:use-module (gnu packages xml))
 
-(define-public python-django
+(define-public python-django-4.0
   (package
     (name "python-django")
-    (version "3.2.6")
+    (version "4.0.1")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "Django" version))
               (sha256
                (base32
-                "08p0gf1n548fjba76wspcj1jb3li6lr7xi87w2xq7hylr528azzj"))))
+                "11pg33ib43pvkflgvs5gs6c9zflhpxp8dvhd109swfscrjiyx194"))))
     (build-system python-build-system)
     (arguments
      '(#:phases
@@ -64,8 +69,7 @@
              ;; The test-suite tests timezone-dependent functions, thus tzdata
              ;; needs to be available.
              (setenv "TZDIR"
-                     (string-append (assoc-ref inputs "tzdata")
-                                    "/share/zoneinfo"))
+                     (search-input-directory inputs "share/zoneinfo"))
 
              ;; Disable test for incorrect timezone: it only raises the
              ;; expected error when /usr/share/zoneinfo exists, even though
@@ -75,24 +79,13 @@
              (substitute* "tests/settings_tests/tests.py"
                ((".*def test_incorrect_timezone.*" all)
                 (string-append "    @unittest.skipIf(True, 'Disabled by Guix')\n"
-                               all)))
-
-             ;; Preserve the PYTHONPATH created by Guix when running the tests.
-             (substitute* "tests/admin_scripts/tests.py"
-               (("python_path = \\[")
-                (string-append "python_path = ['"
-                               (string-join
-                                (string-split (getenv "PYTHONPATH") #\:)
-                                "','")
-                               "', ")))
-
-             #t))
+                               all)))))
          (replace 'check
            (lambda* (#:key tests? #:allow-other-keys)
              (if tests?
                  (with-directory-excursion "tests"
-                   (setenv "PYTHONPATH"
-                           (string-append "..:" (getenv "PYTHONPATH")))
+                   ;; Tests expect PYTHONPATH to contain the root directory.
+                   (setenv "PYTHONPATH" "..")
                    (invoke "python" "runtests.py"
                            ;; By default tests run in parallel, which may cause
                            ;; various race conditions.  Run sequentially for
@@ -107,29 +100,33 @@
          (delete 'wrap))))
     ;; TODO: Install extras/django_bash_completion.
     (native-inputs
-     `(("tzdata" ,tzdata-for-tests)
-       ;; Remaining packages are test requirements taken from
-       ;; tests/requirements/py3.txt
-       ("python-docutils" ,python-docutils)
-       ;; optional for tests: ("python-geoip2" ,python-geoip2)
-       ;; optional for tests: ("python-memcached" ,python-memcached)
-       ("python-numpy" ,python-numpy)
-       ("python-pillow" ,python-pillow)
-       ("python-pyyaml" ,python-pyyaml)
-       ;; optional for tests: ("python-selenium" ,python-selenium)
-       ("python-tblib" ,python-tblib)))
+     (list tzdata-for-tests
+           ;; Remaining packages are test requirements taken from
+           ;; tests/requirements/py3.txt
+           python-docutils
+           ;; optional for tests: ("python-geoip2" ,python-geoip2)
+           ;; optional for tests: ("python-memcached" ,python-memcached)
+           python-numpy
+           python-pillow
+           python-pyyaml
+           ;; optional for tests: ("python-selenium" ,python-selenium)
+           python-tblib))
     (propagated-inputs
-     `(("python-asgiref" ,python-asgiref)
-       ("python-pytz" ,python-pytz)
-       ("python-sqlparse" ,python-sqlparse)
-
-       ;; Optional dependencies.
-       ("python-argon2-cffi" ,python-argon2-cffi)
-       ("python-bcrypt" ,python-bcrypt)
-
-       ;; This input is not strictly required, but in practice many Django
-       ;; libraries need it for test suites and similar.
-       ("python-jinja2" ,python-jinja2)))
+     (list python-asgiref
+           python-sqlparse
+           ;; Optional dependencies.
+           python-argon2-cffi
+           python-bcrypt
+           ;; This input is not strictly required, but in practice many Django
+           ;; libraries need it for test suites and similar.
+           python-jinja2))
+    (native-search-paths
+     ;; Set TZDIR when 'tzdata' is available so that timezone functionality
+     ;; works (mostly) out of the box in containerized environments.
+     ;; Note: This search path actually belongs to 'glibc'.
+     (list (search-path-specification
+            (variable "TZDIR")
+            (files '("share/zoneinfo")))))
     (home-page "https://www.djangoproject.com/")
     (synopsis "High-level Python Web framework")
     (description
@@ -140,20 +137,39 @@ to the @dfn{don't repeat yourself} (DRY) principle.")
     (license license:bsd-3)
     (properties `((cpe-name . "django")))))
 
+(define-public python-django-3.2
+  (package
+    (inherit python-django-4.0)
+    (version "3.2.11")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "Django" version))
+              (sha256
+               (base32
+                "0xbyl9fh9lk5hiwpw46s6hz98gs0fixrpq3myj5hh6vbbnz4mjb9"))))
+    (native-search-paths '())           ;no need for TZDIR
+    (propagated-inputs
+     (modify-inputs (package-propagated-inputs python-django-4.0)
+       ;; Django 4.0 deprecated pytz in favor of Pythons built-in zoneinfo.
+       (append python-pytz)))))
+
 (define-public python-django-2.2
   (package
-    (inherit python-django)
-    (version "2.2.24")
+    (inherit python-django-3.2)
+    (version "2.2.26")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "Django" version))
               (sha256
                (base32
-                "1dvx3x85lggm91x7mpvaf9nmpxyz7r97pbpnmr2k1qfy0c7gyf9k"))))
+                "13siv3bcb2yrpzzsq2k0f1yc70ya8jkmaa5kc8x29ijjglk3g9fz"))))
     (native-inputs
-     `(;; XXX: In 2.2 and 3.0, selenium is required for the test suite.
-       ("python-selenium" ,python-selenium)
-       ,@(package-native-inputs python-django)))))
+     (modify-inputs (package-native-inputs python-django-3.2)
+       (prepend ;; 2.2 requires Selenium for the test suite.
+                python-selenium)))))
+
+;; Use 3.2 LTS as the default until packages gain support for 4.x.
+(define-public python-django python-django-3.2)
 
 (define-public python-django-extensions
   (package
@@ -174,19 +190,16 @@ to the @dfn{don't repeat yourself} (DRY) principle.")
     (arguments
      '(#:tests? #f)) ;XXX: requires a Postgres or MySQL database
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-vobject" ,python-vobject)
-       ("python-werkzeug" ,python-werkzeug)
-       ("python-dateutil" ,python-dateutil)))
+     (list python-six python-vobject python-werkzeug python-dateutil
+           python-django))
     (native-inputs
-     `(("python-django" ,python-django)
-       ("python-mock" ,python-mock)
-       ("python-factory-boy" ,python-factory-boy)
-       ("python-tox" ,python-tox)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-django" ,python-pytest-django)
-       ("python-shortuuid" , python-shortuuid)))
+     (list python-mock
+           python-factory-boy
+           python-tox
+           python-pytest
+           python-pytest-cov
+           python-pytest-django
+           python-shortuuid))
     (home-page
      "https://github.com/django-extensions/django-extensions")
     (synopsis "Custom management extensions for Django")
@@ -215,16 +228,12 @@ commands, additional database fields and admin extensions.")
                (add-installed-pythonpath inputs outputs)
                (setenv "PYTHONPATH"
                        (string-append ".:"
-                                      (getenv "PYTHONPATH")))
+                                      (getenv "GUIX_PYTHONPATH")))
                (invoke "invoke" "test")))))))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-invoke" ,python-invoke)
-       ("python-pytest-django" ,python-pytest-django)
-       ("which" ,which)))
+     (list python-coverage python-invoke python-pytest-django which))
     (propagated-inputs
-     `(("python-django" ,python-django)
-       ("python-stdnum" ,python-stdnum)))
+     (list python-django python-stdnum))
     (home-page "https://django-localflavor.readthedocs.io/en/latest/")
     (synopsis "Country-specific Django helpers")
     (description "Django-LocalFlavor is a collection of assorted pieces of code
@@ -261,10 +270,9 @@ that are useful for particular countries or cultures.")
                     (lambda _
                       (invoke "python" "runtests.py"))))))
     (native-inputs
-     `(("python-django" ,python-django)
-       ("python-mock" ,python-mock)))
+     (list python-mock))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-django python-six))
     (synopsis "Easy-to-use math field/widget captcha for Django forms")
     (description
      "A multi-value-field that presents a human answerable question,
@@ -286,6 +294,8 @@ with arguments to the field constructor.")
     (build-system python-build-system)
     ;; FIXME: How to make the test templates available to Django?
     (arguments '(#:tests? #f))
+    (propagated-inputs
+     (list python-django))
     (home-page "https://github.com/divio/django-classy-tags")
     (synopsis "Class based template tags for Django")
     (description
@@ -314,11 +324,9 @@ when coding custom template tags.")
            (lambda _
              (invoke "python3" "-m" "django" "test" "--settings=tests.settings"))))))
     (propagated-inputs
-     `(("python-isort" ,python-isort)))
+     (list python-django python-isort))
     (native-inputs
-     `(("python-django" ,python-django)
-       ("python-pytest" ,python-pytest)
-       ("python-mock" ,python-mock)))
+     (list python-pytest python-mock))
     (home-page
      "https://github.com/jazzband/django-taggit")
     (synopsis
@@ -339,10 +347,8 @@ when coding custom template tags.")
         (base32
          "14gzp5cv24z0qhxb7f7k7v9jgzpaj4n8yhjq83ynpx8183fs1rz4"))))
     (build-system python-build-system)
-    (native-inputs
-     `(("python-django" ,python-django)))
     (propagated-inputs
-     `(("python-pillow" ,python-pillow)))
+     (list python-django python-pillow))
     (home-page "https://github.com/SmileyChris/easy-thumbnails")
     (synopsis "Easy thumbnails for Django")
     (description
@@ -372,31 +378,25 @@ size and quality.")
          (replace 'check
            (lambda* (#:key tests? inputs outputs #:allow-other-keys)
              (if tests?
-                 (begin
-                   (add-installed-pythonpath inputs outputs)
-                   (setenv "PYTHONPATH"
-                           (string-append ".:" ;for pytest_django_test
-                                          (getenv "PYTHONPATH")))
-                   (setenv "PYTEST_DJANGO_TEST_RUNNER" "pytest")
-                   (setenv "DJANGO_SETTINGS_MODULE"
-                           "pytest_django_test.settings_sqlite_file")
-                   (invoke "pytest" "-vv" "-k"
-                           ;; FIXME: these tests fail to locate Django templates ...
-                           (string-append "not test_django_not_loaded_without_settings"
-                                          " and not test_settings"
-                                          ;; ... and this does not discover
-                                          ;; 'pytest_django_test'.
-                                          " and not test_urls_cache_is_cleared")))
-                 (format #t "test suite not run~%"))
-             #t)))))
+               (begin
+                 (setenv "PYTEST_DJANGO_TEST_RUNNER" "pytest")
+                 (setenv "DJANGO_SETTINGS_MODULE"
+                         "pytest_django_test.settings_sqlite_file")
+                 (invoke "python" "-m" "pytest" "-vv" "-k"
+                         ;; FIXME: these tests fail to locate Django templates ...
+                         (string-append "not test_django_not_loaded_without_settings"
+                                        " and not test_settings"
+                                        ;; ... and this does not discover
+                                        ;; 'pytest_django_test'.
+                                        " and not test_urls_cache_is_cleared")))
+               (format #t "test suite not run~%")))))))
     (native-inputs
-     `(("python-django" ,python-django)
-       ("python-setuptools-scm" ,python-setuptools-scm)
-       ;; For tests.
-       ("python-pytest-xdist" ,python-pytest-xdist-next)))
+     (list python-django python-setuptools-scm
+           ;; For tests.
+           python-pytest-xdist-next))
     (propagated-inputs
-     `(("python-pytest" ,python-pytest-6)))
-    (home-page "https://pytest-django.readthedocs.io/")
+     (list python-pytest))
+    (home-page "https://pytest-django.readthedocs.org/")
     (synopsis "Django plugin for py.test")
     (description "Pytest-django is a plugin for py.test that provides a set of
 useful tools for testing Django applications and projects.")
@@ -405,14 +405,14 @@ useful tools for testing Django applications and projects.")
 (define-public python-django-haystack
   (package
     (name "python-django-haystack")
-    (version "2.8.1")
+    (version "3.1.1")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "django-haystack" version))
         (sha256
          (base32
-          "1302fqsrx8w474xk5cmnmg3hjqfprlxnjg9qlg86arsr4v4vqm4b"))))
+          "10kaa5641cakpra2x3jqgys085gdkjcyns26plfyrmfpjmmpa1bd"))))
     (build-system python-build-system)
     (arguments
      '(#:phases
@@ -420,27 +420,28 @@ useful tools for testing Django applications and projects.")
          (add-after 'unpack 'loosen-verion-restrictions
            (lambda _
              (substitute* "setup.py"
-               (("geopy.*") "geopy',\n"))
-             #t))
+               (("geopy.*") "geopy\",\n"))))
          (add-before 'check 'set-gdal-lib-path
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "GDAL_LIBRARY_PATH"
                      (string-append (assoc-ref inputs "gdal")
-                                    "/lib"))
-             #t)))
+                                    "/lib"))))
+         ;; Importing this module requires setting up a Django project.
+         (delete 'sanity-check))
        #:tests? #f)) ; OSError: libgdal.so.27: cannot open shared object file
+    (propagated-inputs
+     (list python-django))
     (native-inputs
-     `(("gdal" ,gdal)
-       ("python-coverage" ,python-coverage)
-       ("python-django" ,python-django)
-       ("python-dateutil" ,python-dateutil)
-       ("python-geopy" ,python-geopy)
-       ("python-mock" ,python-mock)
-       ("python-nose" ,python-nose)
-       ("python-requests" ,python-requests)
-       ("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-pysolr" ,python-pysolr)
-       ("python-whoosh" ,python-whoosh)))
+     (list gdal
+           python-coverage
+           python-dateutil
+           python-geopy
+           python-mock
+           python-nose
+           python-requests
+           python-setuptools-scm
+           python-pysolr
+           python-whoosh))
     (home-page "http://haystacksearch.org/")
     (synopsis "Pluggable search for Django")
     (description "Haystack provides modular search for Django.  It features a
@@ -467,10 +468,8 @@ your code.")
            (lambda _
              (invoke "python" "runtests.py"))))))
     (native-inputs
-     `(("python-django" ,python-django)
-       ("python-djangorestframework" ,python-djangorestframework)
-       ("python-django-crispy-forms" ,python-django-crispy-forms)
-       ("python-mock" ,python-mock)))
+     (list python-django python-django-rest-framework
+           python-django-crispy-forms python-mock))
     (home-page "https://django-filter.readthedocs.io/en/latest/")
     (synopsis "Reusable Django application to filter querysets dynamically")
     (description
@@ -501,12 +500,11 @@ them do this.")
              (invoke "django-admin" "test" "allauth.tests"
                      "--pythonpath=."))))))
     (propagated-inputs
-     `(("python-openid" ,python-openid)
-       ("python-requests" ,python-requests)
-       ("python-requests-oauthlib" ,python-requests-oauthlib)))
+     (list python-openid python-requests python-requests-oauthlib))
     (native-inputs
-     `(("python-django" ,python-django)
-       ("python-mock" ,python-mock)))
+     (list python-mock))
+    (inputs
+     (list python-django))
     (home-page "https://github.com/pennersr/django-allauth")
     (synopsis "Set of Django applications addressing authentication")
     (description
@@ -531,11 +529,9 @@ account authentication.")
          "1m1j2sx7q0blma0miswj3c8hrfi5q4y5cq2b816v8gagy89xgc57"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-sqlparse" ,python-sqlparse)))
+     (list python-sqlparse python-django))
     (native-inputs
-     `(("python-django" ,python-django)
-       ("python-django-jinja" ,python-django-jinja)
-       ("python-html5lib" ,python-html5lib)))
+     (list python-django-jinja python-html5lib))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -564,10 +560,8 @@ request and response as a toolbar on the rendered page.")
     (build-system python-build-system)
     (arguments '(#:tests? #f))          ;XXX: 'make check' does "echo TODO"
     (propagated-inputs
-     `(("python-django-debug-toolbar" ,python-django-debug-toolbar)
-       ("python-jsonplus" ,python-jsonplus)
-       ("python-six" ,python-six)
-       ("python-sqlalchemy" ,python-sqlalchemy)))
+     (list python-django python-django-debug-toolbar python-jsonplus
+           python-six python-sqlalchemy))
     (synopsis "Django Debug Toolbar panel for SQLAlchemy")
     (description
      "This package completely mimics the default Django Debug Toolbar SQL
@@ -591,7 +585,7 @@ queries done via the Django ORM, SQLAlchemy generated queries are displayed.")
      '(;; TODO: The django project for the tests is missing from the release.
        #:tests? #f))
     (inputs
-     `(("python-django" ,python-django)))
+     (list python-django))
     (home-page "https://github.com/twaddington/django-gravatar")
     (synopsis "Gravatar support for Django, improved version")
     (description
@@ -611,10 +605,9 @@ templatetags and a full test suite.")
                 "0fc6i77faxxv1gjlp06lv3kw64b5bhdiypaygfxh5djddgk83fwa"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-django" ,python-django)
-       ("python-nose" ,python-nose)))
+     (list python-nose))
     (propagated-inputs
-     `(("python-webassets" ,python-webassets)))
+     (list python-django python-webassets))
     (home-page "https://github.com/miracle2k/django-assets")
     (synopsis "Asset management for Django")
     (description
@@ -626,7 +619,7 @@ merging, minifying and compiling CSS and Javascript files.")
 (define-public python-django-jinja
   (package
     (name "python-django-jinja")
-    (version "2.6.0")
+    (version "2.9.1")
     (source
      (origin
        (method git-fetch)
@@ -636,12 +629,10 @@ merging, minifying and compiling CSS and Javascript files.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "06ldbkfkm6sc0p9sqpjph06gxrqpj78ih3dc2yik2fcba2y5mak1"))))
+         "0p9pkn6jjzagpnvcrl9c2vjqamkms7ymvyhhmaqqqhrlv89qnzp7"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-jinja2" ,python-jinja2)
-       ("python-pytz" ,python-pytz)
-       ("python-django-pipeline" ,python-django-pipeline)))
+     (list python-django python-jinja2 python-pytz python-django-pipeline))
     (arguments
      '(;; TODO Tests currently fail due to issues with the configuration for
        ;; django-pipeline
@@ -663,10 +654,6 @@ provides certain advantages over the builtin Jinja2 backend in Django, for
 example, explicit calls to callables from templates and better performance.")
     (license license:bsd-3)))
 
-;; JSONField is now built-in to Django, obsoleting this package.
-(define-public python-django-jsonfield
-  (deprecated-package "python-django-jsonfield" python-django))
-
 (define-public python-dj-database-url
   (package
     (name "python-dj-database-url")
@@ -712,7 +699,7 @@ conn_max_age argument to easily enable Django’s connection pool.")
                     (lambda _
                       (invoke "python" "-m" "django" "test" "-v2"
                               "--settings=tests.settings"))))))
-    (native-inputs
+    (propagated-inputs
      ;; XXX: Picklefield has not been updated in 10+ years and fails tests
      ;; with Django 3.2.
      `(("python-django@2.2" ,python-django-2.2)))
@@ -734,6 +721,8 @@ conn_max_age argument to easily enable Django’s connection pool.")
     (arguments
      ;; XXX: Tests require a Postgres database.
      `(#:tests? #f))
+    (propagated-inputs
+     (list python-django))
     (home-page "https://github.com/aykut/django-bulk-update")
     (synopsis "Simple bulk update over Django ORM or with helper function")
     (description
@@ -744,27 +733,25 @@ project aims to bulk update given objects using one query over Django ORM.")
 (define-public python-django-contact-form
   (package
     (name "python-django-contact-form")
-    (version "1.8.1")
+    (version "1.9")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "django-contact-form" version))
               (sha256
                (base32
-                "1zv7bcjfrg32gcsq3bclkld79l6mcy2wcvlj81h7q2ppv1wm8vqs"))))
+                "1my9hkrylckp5vfqg9b0kncrdlxjnwxll56sdciqn4v19i4wbq1y"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (setenv "PYTHONPATH"
-                     (string-append "./build/lib:"
-                                    (getenv "PYTHONPATH")))
              (invoke "coverage" "run" "--source" "contact_form"
                      "runtests.py"))))))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-django" ,python-django)))
+     (list python-coverage))
+    (propagated-inputs
+     (list python-django))
     (home-page "https://github.com/ubernostrum/django-contact-form")
     (synopsis "Contact form for Django")
     (description
@@ -783,10 +770,8 @@ for Django sites.")
                (base32
                 "0ccdiv784a5vnpfal36km4dyg12340rwhpr0riyy0k89wfnjn8yi"))))
     (build-system python-build-system)
-    (native-inputs
-     `(("python-django" ,python-django)))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-django python-six))
     (home-page "https://github.com/django/django-contrib-comments")
     (synopsis "Comments framework")
     (description
@@ -818,20 +803,13 @@ entries, photos, book chapters, or anything else.")
                 (which "env")))))
          (replace 'check
            (lambda*(#:key tests? #:allow-other-keys)
-             (or
-              (not tests?)
-              (begin
-                (setenv "PYTHONPATH"
-                        (string-append (getcwd) ":"
-                                       (getenv "PYTHONPATH")))
-                (setenv "DJANGO_SETTINGS_MODULE" "tests.settings")
-                (invoke "django-admin" "test" "tests"))))))))
-    (native-inputs
-     `(("python-django" ,python-django)))
+             (when tests?
+               (setenv "DJANGO_SETTINGS_MODULE" "tests.settings")
+               (invoke "django-admin" "test" "tests"
+                       "--pythonpath=.")))))))
     (propagated-inputs
-     `(("python-css-html-js-minify" ,python-css-html-js-minify)
-       ("python-slimit" ,python-slimit)
-       ("python-jsmin" ,python-jsmin)))
+     (list python-css-html-js-minify python-django python-slimit
+           python-jsmin))
     (home-page
      "https://github.com/jazzband/django-pipeline")
     (synopsis "Asset packaging library for Django")
@@ -861,14 +839,10 @@ support, and optional data-URI image and font embedding.")
              (with-directory-excursion "tests"
                (invoke "python" "runtests.py")))))))
     (native-inputs
-     `(("python-django" ,python-django)
-       ("python-fakeredis" ,python-fakeredis)
-       ("python-hiredis" ,python-hiredis)
-       ("python-mock" ,python-mock)
-       ("python-msgpack" ,python-msgpack)
-       ("redis" ,redis)))
+     (list python-fakeredis python-hiredis python-mock python-msgpack
+           redis))
     (propagated-inputs
-     `(("python-redis" ,python-redis)))
+     (list python-django python-redis))
     (home-page "https://github.com/niwibe/django-redis")
     (synopsis "Full featured redis cache backend for Django")
     (description
@@ -896,13 +870,9 @@ support, and optional data-URI image and font embedding.")
                      "--settings=django_rq.tests.settings"
                      "--pythonpath=."))))))
     (native-inputs
-     `(("python-django" ,python-django)
-       ("python-django-redis" ,python-django-redis)
-       ("python-mock" ,python-mock)
-       ("python-rq-scheduler" ,python-rq-scheduler)
-       ("redis" ,redis)))
+     (list python-django-redis python-mock python-rq-scheduler redis))
     (propagated-inputs
-     `(("python-rq" ,python-rq)))
+     (list python-django python-rq))
     (home-page "https://github.com/ui/django-rq")
     (synopsis "Django integration with RQ")
     (description
@@ -924,12 +894,9 @@ settings.py and easily use them in your project.")
     (build-system python-build-system)
     ;; FIXME: Tests require disque, Redis, MongoDB, Docker.
     (arguments '(#:tests? #f))
-    (native-inputs
-     `(("python-django" ,python-django)))
     (propagated-inputs
-     `(("python-arrow" ,python-arrow)
-       ("python-blessed" ,python-blessed)
-       ("python-django-picklefield" ,python-django-picklefield)))
+     (list python-arrow python-blessed python-django
+           python-django-picklefield))
     (home-page "https://django-q.readthedocs.io/")
     (synopsis "Multiprocessing distributed task queue for Django")
     (description
@@ -952,12 +919,11 @@ using Python multiprocessing.")
      `(#:phases (modify-phases %standard-phases
                   (replace 'check
                     (lambda _
-                      (setenv "PYTHONPATH" (string-append "./test_project:"
-                                                          "./build/lib:.:"
-                                                          (getenv "PYTHONPATH")))
-                      (invoke "django-admin.py" "test" "--settings=settings"))))))
-    (native-inputs
-     `(("python-django" ,python-django)))
+                      (invoke "django-admin"
+                              "test" "--settings=test_project.settings"
+                              "--pythonpath=."))))))
+    (propagated-inputs
+     (list python-django))
     (home-page "https://github.com/jazzband/django-sortedm2m")
     (synopsis "Drop-in replacement for django's own ManyToManyField")
     (description
@@ -981,12 +947,10 @@ the order of added relations.")
      '(#:phases (modify-phases %standard-phases
                   (replace 'check
                     (lambda _
-                      (setenv "PYTHONPATH" (string-append ".:"
-                                                          (getenv "PYTHONPATH")))
                       (setenv "DJANGO_SETTINGS_MODULE" "tests.test_settings")
-                      (invoke "django-admin.py" "test" "-v2"))))))
-    (native-inputs
-     `(("python-django" ,python-django)))
+                      (invoke "django-admin" "test" "--pythonpath=."))))))
+    (propagated-inputs
+     (list python-django))
     (home-page "https://github.com/django-compressor/django-appconf")
     (synopsis "Handle configuration defaults of packaged Django apps")
     (description
@@ -1016,17 +980,14 @@ name is purely coincidental.")
      '(#:phases (modify-phases %standard-phases
                   (replace 'check
                     (lambda _
-                      (setenv "PYTHONPATH"
-                              (string-append "./tests/test_project:./build/lib:"
-                                             (getenv "PYTHONPATH")))
+                      (setenv "PYTHONPATH" "./tests/test_project")
                       (setenv "DJANGO_SETTINGS_MODULE" "project.settings")
                       (invoke "pytest" "-vv"))))))
     (native-inputs
-     `(("python-django" ,python-django)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-django" ,python-pytest-django)))
+     (list python-pytest python-pytest-django))
     (propagated-inputs
-     `(("django-appconf" ,python-django-appconf)))
+     `(("python-django" ,python-django)
+       ("django-appconf" ,python-django-appconf)))
     (synopsis "Generate JavaScript catalog to static files")
     (description
       "A Django app that provides helper for generating JavaScript catalog to
@@ -1053,7 +1014,7 @@ static files.")
              (setenv "DJANGO_SETTINGS_MODULE" "tagging.tests.settings")
              (invoke "django-admin" "test" "--pythonpath=."))))))
     (inputs
-     `(("python-django" ,python-django)))
+     (list python-django))
     (home-page "https://github.com/Fantomas42/django-tagging")
     (synopsis "Generic tagging application for Django")
     (description "This package provides a generic tagging application for
@@ -1061,10 +1022,10 @@ Django projects, which allows association of a number of tags with any
 @code{Model} instance and makes retrieval of tags simple.")
     (license license:bsd-3)))
 
-(define-public python-djangorestframework
+(define-public python-django-rest-framework
   (package
-    (name "python-djangorestframework")
-    (version "3.12.4")
+    (name "python-django-rest-framework")
+    (version "3.13.1")
     (source
      (origin
        (method git-fetch)
@@ -1074,26 +1035,20 @@ Django projects, which allows association of a number of tags with any
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "16n17dw35wqv47m8k8fixn0yywrvd6v4r573yr4nx6lbbiyi2cqn"))))
+         "11wfb156yin6mlgcdzfmi267jsq1cld131mxgd13aqsrj06zlray"))))
     (build-system python-build-system)
     (arguments
      '(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda* (#:key tests? #:allow-other-keys)
-             ;; Add a fix from the master branch for compatibility with Django
-             ;; 3.2: https://github.com/encode/django-rest-framework/pull/7911
-             ;; Remove for versions > 3.12.4.
-             (substitute* "tests/test_fields.py"
-               (("class MockTimezone:")
-                "class MockTimezone(pytz.BaseTzInfo):"))
+           (lambda* (#:key tests? inputs #:allow-other-keys)
              (if tests?
-                 (invoke "python" "runtests.py" "--nolint")
+                 (invoke "python" "runtests.py")
                  (format #t "test suite not run~%")))))))
     (native-inputs
-     `(("python-django" ,python-django)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-django" ,python-pytest-django)))
+     (list python-pytest python-pytest-django tzdata-for-tests))
+    (propagated-inputs
+     (list python-django python-pytz))
     (home-page "https://www.django-rest-framework.org")
     (synopsis "Toolkit for building Web APIs with Django")
     (description
@@ -1101,6 +1056,9 @@ Django projects, which allows association of a number of tags with any
 provides features like a Web-browsable API and authentication policies.")
     (license license:bsd-2)))
 
+(define-public python-djangorestframework
+  (deprecated-package "python-djangorestframework" python-django-rest-framework))
+
 (define-public python-django-sekizai
   (package
     (name "python-django-sekizai")
@@ -1114,11 +1072,8 @@ provides features like a Web-browsable API and authentication policies.")
           "0vrkli625b5s1wldri3dyrfvqbxg7zxy2pg0rpjixw3b1ndz0ag8"))))
     (build-system python-build-system)
     (arguments '(#:tests? #f)) ; Tests not included with release.
-    (native-inputs
-     `(("python-django" ,python-django)))
     (propagated-inputs
-     `(("python-django-classy-tags" ,python-django-classy-tags)
-       ("python-six" ,python-six)))
+     (list python-django python-django-classy-tags python-six))
     (home-page "https://github.com/divio/django-sekizai")
     (synopsis "Template blocks for Django projects")
     (description "Sekizai means blocks in Japanese, and that is what this app
@@ -1146,8 +1101,8 @@ a single block.")
     (arguments
      '(;; No included tests
        #:tests? #f))
-    (native-inputs
-     `(("python-django" ,python-django)))
+    (propagated-inputs
+     (list python-django))
     (home-page
      "http://github.com/maraujop/django-crispy-forms")
     (synopsis "Tool to control Django forms without custom templates")
@@ -1182,15 +1137,10 @@ forms using your favorite CSS framework, without writing template code.")
        ;; https://github.com/django-compressor/django-compressor/issues/998
        #:tests? #f))
     (propagated-inputs
-     `(("python-django-appconf" ,python-django-appconf)
-       ("python-rcssmin" ,python-rcssmin)
-       ("python-rjsmin" ,python-rjsmin)))
+     (list python-django-appconf python-rcssmin python-rjsmin))
     (native-inputs
-     `(("python-beautifulsoup4" ,python-beautifulsoup4)
-       ("python-brotli" ,python-brotli)
-       ("python-csscompressor" ,python-csscompressor)
-       ("python-django-sekizai" ,python-django-sekizai)
-       ("python-mock" ,python-mock)))
+     (list python-beautifulsoup4 python-brotli python-csscompressor
+           python-django-sekizai python-mock))
     (home-page "https://django-compressor.readthedocs.io/en/latest/")
     (synopsis
      "Compress linked and inline JavaScript or CSS into single cached files")
@@ -1221,8 +1171,9 @@ template tag.")
                     (lambda _
                       (invoke "python" "runtests.py"))))))
     (native-inputs
-     `(("python-django" ,python-django)
-       ("python-mock" ,python-mock)))
+     (list python-mock))
+    (propagated-inputs
+     (list python-django))
     (synopsis "Django test helpers to manage file storage side effects")
     (description
      "This project provides tools to help reduce the side effects of using
@@ -1232,32 +1183,44 @@ FileFields during tests.")
 (define-public python-django-auth-ldap
   (package
     (name "python-django-auth-ldap")
-    (version "2.4.0")
+    (version "4.0.0")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "django-auth-ldap" version))
               (sha256
                (base32
-                "0xk6cxiqz5j3q79bd54x64f26alrlc8p7k9wkp2c768w2k1vzz30"))))
+                "0fajn4bk7m1hk0mjz97q7vlfzh7ibzv8f4qn7zhkq26f4kk7jvr7"))))
     (build-system python-build-system)
     (arguments
-     '(#:phases (modify-phases %standard-phases
-                  (replace 'check
-                    (lambda* (#:key inputs #:allow-other-keys)
-                      (let ((openldap (assoc-ref inputs "openldap")))
-                        ;; The tests need 'slapd' which is installed to the
-                        ;; libexec directory of OpenLDAP.
-                        (setenv "SLAPD" (string-append openldap "/libexec/slapd"))
-                        (setenv "SCHEMA"
-                                (string-append openldap "/etc/openldap/schema"))
-                        (invoke "python" "-m" "django" "test"
-                                "--settings" "tests.settings")))))))
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (replace 'build
+                 (lambda _
+                   ;; Set file modification times to the early 80's because
+                   ;; the Zip format does not support earlier timestamps.
+                   (setenv "SOURCE_DATE_EPOCH"
+                           (number->string (* 10 366 24 60 60)))
+                   (invoke "python" "-m" "build" "--wheel"
+                           "--no-isolation" ".")))
+               (replace 'check
+                 (lambda* (#:key inputs #:allow-other-keys)
+                   (setenv "SLAPD" (search-input-file inputs "/libexec/slapd"))
+                   (setenv "SCHEMA"
+                           (search-input-directory inputs "etc/openldap/schema"))
+                   (invoke "python" "-m" "django" "test"
+                           "--settings" "tests.settings")))
+               (replace 'install
+                 (lambda _
+                   (let ((whl (car (find-files "dist" "\\.whl$"))))
+                     (invoke "pip" "--no-cache-dir" "--no-input"
+                             "install" "--no-deps" "--prefix" #$output whl)))))))
     (native-inputs
-     `(("openldap" ,openldap)
-       ("python-django" ,python-django)
-       ("python-mock" ,python-mock)))
+     (list openldap-2.6 python-wheel python-setuptools-scm python-toml
+
+           ;; These can be removed after <https://bugs.gnu.org/46848>.
+           python-pypa-build python-pip))
     (propagated-inputs
-     `(("python-ldap" ,python-ldap)))
+     (list python-django python-ldap))
     (home-page "https://github.com/django-auth-ldap/django-auth-ldap")
     (synopsis "Django LDAP authentication backend")
     (description
@@ -1275,13 +1238,13 @@ FileFields during tests.")
                (base32
                 "06041a8icazzp73kg93c7k1ska12wvkq7fpcad0l0sm1qnxx5yx7"))))
     (build-system python-build-system)
-    (arguments '(#:tests? #f))          ;no tests
-    (native-inputs
-     `(("python-django" ,python-django)))
+    (arguments
+     '(#:tests? #f                      ;no tests
+       #:phases (modify-phases %standard-phases
+                  ;; Importing this module requires a Django project.
+                  (delete 'sanity-check))))
     (propagated-inputs
-     `(("python-certifi" ,python-certifi)
-       ("python-elasticsearch" ,python-elasticsearch)
-       ("python-six" ,python-six)))
+     (list python-certifi python-django python-elasticsearch python-six))
     (home-page "https://github.com/cipriantarta/django-logging")
     (synopsis "Log requests/responses in various formats")
     (description
@@ -1293,20 +1256,17 @@ to ElasticSearch.")
 (define-public python-django-netfields
   (package
     (name "python-django-netfields")
-    (version "1.2.2")
+    (version "1.2.4")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "django-netfields" version))
               (sha256
                (base32
-                "1c47azr5am0q8g45x0fbn0cay7vyrack6n7k6siliw1j2p0gzi7s"))))
+                "0jwlbyaxk91fq69g2y0zpfjgmjgh6l0lqm5mhys7m5968lkihvgp"))))
     (build-system python-build-system)
     (arguments '(#:tests? #f))      ;XXX: Requires a running PostgreSQL server
-    (native-inputs
-     `(("python-django" ,python-django)))
     (propagated-inputs
-     `(("python-netaddr" ,python-netaddr)
-       ("python-six" ,python-six)))
+     (list python-django python-netaddr python-psycopg2 python-six))
     (home-page "https://github.com/jimfunk/django-postgresql-netfields")
     (synopsis "PostgreSQL netfields implementation for Django")
     (description
@@ -1325,35 +1285,35 @@ to ElasticSearch.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0r4zhqhs8y6cnplwyvcb0zpijizw1ifnszs38n4w8138657f9026"))))
+                "0r4zhqhs8y6cnplwyvcb0zpijizw1ifnszs38n4w8138657f9026"))
+              (modules '((guix build utils)))
+              (snippet
+               ;; Patch for Django 4.0 compatibility, taken from upstream pull
+               ;; request: https://github.com/miki725/django-url-filter/pull/103
+               '(substitute* "url_filter/validators.py"
+                  ((" ungettext_lazy")
+                   " ngettext_lazy")))))
     (build-system python-build-system)
     (arguments
      '(#:tests? #f            ;FIXME: Django raises "Apps aren't loaded yet"!?
        #:phases (modify-phases %standard-phases
-                  (add-before 'check 'loosen-requirements
+                  (add-after 'unpack 'loosen-requirements
                     (lambda _
                       ;; Do not depend on compatibility package for old
                       ;; Python versions.
                       (substitute* "requirements.txt"
-                        (("enum-compat") ""))
-                      #t))
+                        (("enum-compat") ""))))
                   (replace 'check
                     (lambda* (#:key tests? #:allow-other-keys)
                       (if tests?
                           (begin
-                            (setenv "PYTHONPATH"
-                                    (string-append "./build/lib:.:"
-                                                   (getenv "PYTHONPATH")))
                             (setenv "DJANGO_SETTINGS_MODULE"
                                     "test_project.settings")
                             (invoke "pytest" "-vv" "--doctest-modules"
                                     "tests/" "url_filter/"))
                           (format #t "test suite not run~%")))))))
-    (native-inputs
-     `(("python-django" ,python-django)))
     (propagated-inputs
-     `(("python-cached-property" ,python-cached-property)
-       ("python-six" ,python-six)))
+     (list python-cached-property python-django python-six))
     (synopsis "Filter data via human-friendly URLs")
     (description
      "The main goal of Django URL Filter is to provide an easy URL interface
@@ -1361,3 +1321,26 @@ for filtering data.  It allows the user to safely filter by model attributes
 and also specify the lookup type for each filter (very much like
 Django's filtering system in ORM).")
     (license license:expat)))
+
+(define-public python-django-svg-image-form-field
+  (package
+    (name "python-django-svg-image-form-field")
+    (version "1.0.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/artrey/django-svg-image-form-field")
+             (commit (string-append version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "131m545khn8l20j4x2bvlvz36dlbnhj9pc98i2dw72s3bw8pgws0"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     (list python-defusedxml python-django python-pillow))
+    (home-page "https://github.com/artrey/django-svg-image-form-field")
+    (synopsis "Form field to validate SVG and other images")
+    (description "This form field allows users to provide SVG images for
+models that use Django's standard @code{ImageField}, in addition to the
+image files already supported by it.")
+    (license license:expat)))
diff --git a/gnu/packages/djvu.scm b/gnu/packages/djvu.scm
index 96071b8da1..07c77f318e 100644
--- a/gnu/packages/djvu.scm
+++ b/gnu/packages/djvu.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
 ;;; Copyright © 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2020 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2020 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2020, 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -71,13 +71,9 @@
     (build-system gnu-build-system)
     (native-inputs
      ;; The 3.5.28 release tarball isn't bootstrapped.
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (inputs
-     `(("libjpeg-turbo" ,libjpeg-turbo)
-       ("libtiff" ,libtiff)
-       ("zlib" ,zlib)))
+     (list libjpeg-turbo libtiff zlib))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -109,17 +105,9 @@ utilities.")
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list autoconf automake libtool pkg-config qttools))
     (inputs
-     `(("djvulibre" ,djvulibre)
-       ("glib" ,glib)
-       ("libxt" ,libxt)
-       ("libtiff" ,libtiff)
-       ("qtbase" ,qtbase-5)))
+     (list djvulibre glib libxt libtiff qtbase-5))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -151,7 +139,7 @@ a continuous layout.")
 (define-public pdf2djvu
   (package
     (name "pdf2djvu")
-    (version "0.9.17.1")
+    (version "0.9.18.1")
     (source
      (origin
        (method url-fetch)
@@ -159,7 +147,7 @@ a continuous layout.")
              "https://github.com/jwilk/pdf2djvu/releases/download/" version
              "/pdf2djvu-" version ".tar.xz"))
        (sha256
-        (base32 "18r648kna6ccw0m0nfxxnsmz541k69d0w9zzqvm1x2l5qyyvgfsv"))))
+        (base32 "0c595yziz81c9izf9s5sskd00qmgz2n1hp2vdcgg0dx81g3xfidb"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("gettext" ,gettext-minimal)
@@ -174,7 +162,18 @@ a continuous layout.")
        ("poppler-data" ,poppler-data)
        ("util-linux-lib" ,util-linux "lib"))) ; for libuuid
     (arguments
-     `(#:test-target "test"))
+     `(#:test-target "test"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-tests
+           (lambda _
+             (substitute* "tests/test-xmp-broken.py"
+               ;; Error message changed in recent versions of XML parser
+               (("XML parsing failure")
+                "Error in XMLValidator"))))
+         (add-before 'check 'set-home-for-tests
+           (lambda _
+             (setenv "HOME" "/tmp"))))))
     (synopsis "PDF to DjVu converter")
     (description
      "@code{pdf2djvu} creates DjVu files from PDF files.
@@ -202,12 +201,12 @@ It is able to extract:
         (base32 "0v2ax30m7j1yi4m02nzn9rc4sn4vzqh5vywdh96r64j4pwvn5s5g"))))
     (build-system gnu-build-system)
     (inputs
-     `(("djvulibre" ,djvulibre)
-       ("gawk" ,gawk)
-       ("ghostscript" ,ghostscript)
-       ("grep" ,grep)
-       ("ncurses" ,ncurses)
-       ("which" ,which)))
+     (list djvulibre
+           gawk
+           ghostscript
+           grep
+           ncurses
+           which))
     (arguments
      `(#:tests? #f ; No test suite
        #:phases
@@ -266,9 +265,7 @@ It is able to extract:
     (native-inputs
      `(("gettext" ,gettext-minimal)))
     (inputs
-     `(("libjpeg-turbo" ,libjpeg-turbo)
-       ("libtiff" ,libtiff)
-       ("zlib" ,zlib)))
+     (list libjpeg-turbo libtiff zlib))
     (arguments
      '(#:configure-flags '("--disable-static")
        #:parallel-build? #f
@@ -307,10 +304,8 @@ and white.")
         (base32 "0z403cklvxzz0qaczgv83ax0nknrd9h8micp04j9kjfdxk2sgval"))))
     (build-system python-build-system)
     (inputs
-     `(("djvulibre" ,djvulibre)
-       ("python2-djvulibre" ,python2-djvulibre)
-       ("python2-subprocess32" ,python2-subprocess32)
-       ("python2-wxpython" ,python2-wxpython)))
+     (list djvulibre python2-djvulibre python2-subprocess32
+           python2-wxpython))
     (arguments
      `(#:python ,python-2
        #:phases
@@ -349,7 +344,7 @@ It is able to:
         (base32 "0xyrnk8d2khi7q1zr28gjkjq6frz4mkb5jdl8821yzf12k7c8pbv"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("python2-nose" ,python2-nose)))
+     (list python2-nose))
     (inputs
      `(("djvulibre" ,djvulibre)
        ("minidjvu" ,minidjvu)
@@ -416,9 +411,7 @@ and background layers of images, which can then be encoded into a DjVu file.")
         (base32 "09w9rqr7z2jd5kwp178zz2yrsc82mxs7gksipg92znxzgzhmw2ng"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("libxml2" ,libxml2)
-       ("python2-nose" ,python2-nose)
-       ("python2-pillow" ,python2-pillow)))
+     (list libxml2 python2-nose python2-pillow))
     (inputs
      `(("djvulibre" ,djvulibre)
        ("ocrad" ,ocrad)
diff --git a/gnu/packages/dlang.scm b/gnu/packages/dlang.scm
index 88a0887a0a..403fcbbd6b 100644
--- a/gnu/packages/dlang.scm
+++ b/gnu/packages/dlang.scm
@@ -6,6 +6,7 @@
 ;;; Copyright © 2017, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020 Guy Fleury Iteriteka <gfleury@disroot.org>
 ;;; Copyright © 2021 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -27,6 +28,8 @@
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
+  #:use-module (guix utils)
+  #:use-module ((guix build utils) #:hide (delete which))
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system cmake)
   #:use-module (gnu packages)
@@ -37,11 +40,13 @@
   #:use-module (gnu packages gdb)
   #:use-module (gnu packages libedit)
   #:use-module (gnu packages llvm)
+  #:use-module (gnu packages ninja)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages textutils)
-  #:use-module (gnu packages xorg))
+  #:use-module (gnu packages xorg)
+  #:use-module (srfi srfi-1))
 
 (define-public rdmd
   (package
@@ -70,7 +75,7 @@
             (let ((bin (string-append (assoc-ref outputs "out") "/bin")))
               (install-file "rdmd" bin)))))))
     (native-inputs
-     `(("ldc" ,ldc)))
+     (list ldc))
     (home-page "https://github.com/D-Programming-Language/tools/")
     (synopsis "Specialized equivalent to 'make' for the D language")
     (description
@@ -81,233 +86,338 @@ minimize the amount of work necessary.  Unlike make, rdmd tracks dependencies
 and freshness without requiring additional information from the user.")
     (license license:boost1.0)))
 
-(define-public ldc-bootstrap
-    (package
-      (name "ldc")
-      (version "0.17.6")
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/ldc-developers/ldc")
-               (commit (string-append "v" version))))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32 "1q6hm4fkrcwys83x0p4kfg9xrc1b9g2qicqif2zy5z4nsfsb5vgs"))))
-      (build-system cmake-build-system)
-      (supported-systems '("x86_64-linux" "i686-linux" "armhf-linux"))
-      (properties
-       ;; Some of the tests take a very long time on ARMv7.  See
-       ;; <https://lists.gnu.org/archive/html/guix-devel/2018-02/msg00312.html>.
-       `((max-silent-time . ,(* 3600 3))))
-      (arguments
-       `(#:phases
-         (modify-phases %standard-phases
-           (add-after 'unpack 'unpack-submodule-sources
-             (lambda* (#:key inputs #:allow-other-keys)
-               (let ((unpack (lambda (input target)
-                               (let ((source (assoc-ref inputs input)))
-                                 ;; Git checkouts are directories as long as
-                                 ;; there are no patches; tarballs otherwise.
-                                 (if (file-is-directory? source)
-                                     (copy-recursively source target)
-                                     (with-directory-excursion target
-                                       (invoke "tar" "xvf" source
-                                               "--strip-components=1")))))))
-                 (unpack "phobos-src" "runtime/phobos")
-                 (unpack "druntime-src" "runtime/druntime")
-                 (unpack "dmd-testsuite-src" "tests/d2/dmd-testsuite")
-                 #t)))
-           (add-after 'unpack-submodule-sources 'patch-phobos
-             (lambda* (#:key inputs #:allow-other-keys)
-               (substitute* "runtime/phobos/std/process.d"
-                 (("/bin/sh") (which "sh"))
-                 (("echo") (which "echo")))
-               (substitute* "runtime/phobos/std/datetime.d"
-                 (("/usr/share/zoneinfo/")
-                  (string-append (assoc-ref inputs "tzdata") "/share/zoneinfo"))
-                 (("tzName == \"[+]VERSION\"")
-                  "(tzName == \"+VERSION\" || std.algorithm.endsWith(tzName, \"/leapseconds\"))"))
-               (substitute* "tests/d2/dmd-testsuite/Makefile"
-                 (("/bin/bash") (which "bash")))
-               ;; the following two tests fail on i686
-               (for-each delete-file '("tests/ir/attributes.d" "tests/ir/align.d")))))))
-      (inputs
-       `(("libconfig" ,libconfig)
-         ("libedit" ,libedit)
-         ("tzdata" ,tzdata)
-         ("zlib" ,zlib)))
-      (native-inputs
-       `(("llvm" ,llvm-6)
-         ("clang" ,clang-6)
-         ("python-lit" ,python-lit)
-         ("python-wrapper" ,python-wrapper)
-         ("unzip" ,unzip)
-         ("phobos-src"
-          ,(origin
-             (method git-fetch)
-             (uri (git-reference
-                   (url "https://github.com/ldc-developers/phobos")
-                   (commit (string-append "ldc-v" version))))
-             (file-name (git-file-name "phobos" version))
-             (sha256
-              (base32 "15jzs38wanks2jfp2izzl7zqrp4c8ai54ppsgm8ws86p3sbbkmj8"))
-             (patches (search-patches "ldc-bootstrap-disable-tests.patch"))))
-         ("druntime-src"
-          ,(origin
-             (method git-fetch)
-             (uri (git-reference
-                   (url "https://github.com/ldc-developers/druntime")
-                   (commit (string-append "ldc-v" version))))
-             (file-name (git-file-name "druntime" version))
-             (sha256
-              (base32 "00wr2kiggwnd8h7by51fhj1xc65hv1ysip5gbgdbkfar58p2d0bb"))))
-         ("dmd-testsuite-src"
-          ,(origin
-             (method git-fetch)
-             (uri (git-reference
-                   (url "https://github.com/ldc-developers/dmd-testsuite")
-                   (commit (string-append "ldc-v" version))))
-             (file-name (git-file-name "dmd-testsuite" version))
-             (sha256
-              (base32 "1d1c0979wbippldrkjf7szyj4n87hxz8dwqg1r5b3aai37g9kcky"))))))
-      (home-page "http://wiki.dlang.org/LDC")
-      (synopsis "LLVM-based compiler for the D programming language")
-      (description
-       "LDC is an LLVM compiler for the D programming language.  It is based on
+;;; The 0.17.6 version is the last release to support being bootstrapped
+;;; without a D compiler (requiring only a C++ compiler).
+;;; TODO: Bootstrap ldc from GDC (the D frontend for GCC).
+(define ldc-bootstrap-0.17
+  (package
+    (name "ldc")
+    (version "0.17.6")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/ldc-developers/ldc")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1q6hm4fkrcwys83x0p4kfg9xrc1b9g2qicqif2zy5z4nsfsb5vgs"))))
+    (build-system cmake-build-system)
+    (supported-systems '("x86_64-linux" "i686-linux" "armhf-linux"))
+    (properties
+     ;; Some of the tests take a very long time on ARMv7.  See
+     ;; <https://lists.gnu.org/archive/html/guix-devel/2018-02/msg00312.html>.
+     `((max-silent-time . ,(* 3600 3))))
+    (arguments
+     `(#:tests? #f               ;requires obsolete python-lit test dependency
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'unpack-submodule-sources
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((unpack (lambda (input target)
+                             (let ((source (assoc-ref inputs input)))
+                               ;; Git checkouts are directories as long as
+                               ;; there are no patches; tarballs otherwise.
+                               (if (file-is-directory? source)
+                                   (copy-recursively source target)
+                                   (with-directory-excursion target
+                                     (invoke "tar" "xvf" source
+                                             "--strip-components=1")))))))
+               (unpack "phobos-src" "runtime/phobos")
+               (unpack "druntime-src" "runtime/druntime")
+               (unpack "dmd-testsuite-src" "tests/d2/dmd-testsuite"))))
+         (add-after 'unpack-submodule-sources 'patch-paths
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "runtime/phobos/std/process.d"
+               (("/bin/sh") (which "sh"))
+               (("echo") (which "echo")))
+             (substitute* "runtime/phobos/std/datetime.d"
+               (("/usr/share/zoneinfo/")
+                (string-append (assoc-ref inputs "tzdata") "/share/zoneinfo"))
+               (("tzName == \"[+]VERSION\"")
+                "(tzName == \"+VERSION\" || \
+std.algorithm.endsWith(tzName, \"/leapseconds\"))")))))))
+    (inputs
+     `(("libconfig" ,libconfig)
+       ("libedit" ,libedit)
+       ("tzdata" ,tzdata)
+       ("zlib" ,zlib)))
+    (native-inputs
+     `(("llvm" ,llvm-6)
+       ("python-wrapper" ,python-wrapper)
+       ("unzip" ,unzip)
+       ("phobos-src"
+        ,(origin
+           (method git-fetch)
+           (uri (git-reference
+                 (url "https://github.com/ldc-developers/phobos")
+                 (commit (string-append "ldc-v" version))))
+           (file-name (git-file-name "phobos" version))
+           (sha256
+            (base32 "15jzs38wanks2jfp2izzl7zqrp4c8ai54ppsgm8ws86p3sbbkmj8"))))
+       ("druntime-src"
+        ,(origin
+           (method git-fetch)
+           (uri (git-reference
+                 (url "https://github.com/ldc-developers/druntime")
+                 (commit (string-append "ldc-v" version))))
+           (file-name (git-file-name "druntime" version))
+           (sha256
+            (base32 "00wr2kiggwnd8h7by51fhj1xc65hv1ysip5gbgdbkfar58p2d0bb"))))
+       ("dmd-testsuite-src"
+        ,(origin
+           (method git-fetch)
+           (uri (git-reference
+                 (url "https://github.com/ldc-developers/dmd-testsuite")
+                 (commit (string-append "ldc-v" version))))
+           (file-name (git-file-name "dmd-testsuite" version))
+           (sha256
+            (base32 "1d1c0979wbippldrkjf7szyj4n87hxz8dwqg1r5b3aai37g9kcky"))))))
+    (home-page "http://wiki.dlang.org/LDC")
+    (synopsis "LLVM-based compiler for the D programming language")
+    (description
+     "LDC is an LLVM compiler for the D programming language.  It is based on
 the latest DMD compiler that was written in C and is used for
 bootstrapping more recent compilers written in D.")
-      ;; Most of the code is released under BSD-3, except for code originally
-      ;; written for GDC, which is released under GPLv2+, and the DMD frontend,
-      ;; which is released under the "Boost Software License version 1.0".
-      (license (list license:bsd-3
-                     license:gpl2+
-                     license:boost1.0))))
+    ;; Most of the code is released under BSD-3, except for code originally
+    ;; written for GDC, which is released under GPLv2+, and the DMD frontend,
+    ;; which is released under the "Boost Software License version 1.0".
+    (license (list license:bsd-3
+                   license:gpl2+
+                   license:boost1.0))))
 
-(define-public ldc
-  ;; Phobos, druntime and dmd-testsuite library dependencies do
-  ;; not always have a newer release than the compiler, hence we
-  ;; retain this variable.
-  (let ((older-version "1.10.0")) ;; retain this because sometimes the libs are older
-    (package
-      (inherit ldc-bootstrap)
-      (name "ldc")
-      (version "1.10.0")
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/ldc-developers/ldc")
-               (commit (string-append "v" version))))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32 "0qcb2rn01wql7y8qp31blbv3hwmnh3zjgzi2n7k168cxr6rrdhlp"))))
-      (arguments
-       `(#:phases
-         (modify-phases %standard-phases
-           (add-after 'unpack 'unpack-submodule-sources
-             (lambda* (#:key inputs #:allow-other-keys)
-               (let ((unpack (lambda (input target)
-                               (let ((source (assoc-ref inputs input)))
-                                 ;; Git checkouts are directories as long as
-                                 ;; there are no patches; tarballs otherwise.
-                                 (if (file-is-directory? source)
-                                     (copy-recursively source target)
-                                     (with-directory-excursion target
-                                       (invoke "tar" "xvf" source
-                                               "--strip-components=1")))))))
-                 (unpack "phobos-src" "runtime/phobos")
-                 (unpack "druntime-src" "runtime/druntime")
-                 (unpack "dmd-testsuite-src" "tests/d2/dmd-testsuite")
-                 #t)))
-           (add-after 'unpack-submodule-sources 'patch-phobos
+;;; This is the last version that supports being built with 32 bit machines
+;;; from 0.17.
+(define ldc-bootstrap-1.12
+  (package
+    (inherit ldc-bootstrap-0.17)
+    (version "1.12.0")
+    (source
+     (origin
+       (method url-fetch)
+       ;; The official release include the matching source code releases of
+       ;; phobos, druntime and dmd-testsuite.
+       (uri (string-append "https://github.com/ldc-developers/ldc/releases"
+                           "/download/v" version "/ldc-" version "-src.tar.gz"))
+       (sha256
+        (base32 "1fdma1w8j37wkr0pqdar11slkk36qymamxnk6d9k8ybhjmxaaawm"))))
+    (arguments
+     (substitute-keyword-arguments (package-arguments ldc-bootstrap-0.17)
+       ((#:build-type _ #f) "Release")
+       ((#:configure-flags _ #f)
+        `(list "-GNinja"))
+       ((#:make-flags _ #f)             ;used as build targets
+        `(list "all"))
+       ((#:tests? _) #f)
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (delete 'unpack-submodule-sources)
+           (replace 'patch-paths
              (lambda* (#:key inputs #:allow-other-keys)
-               (substitute* '("runtime/phobos/std/process.d"
-                              "tests/linking/linker_switches.d")
+               (substitute* '("runtime/phobos/std/process.d")
                  (("/bin/sh") (which "sh"))
-                 (("echo") (which "echo")))
+                 (("echo") (which "echo")))))
+           (replace 'build
+             ;; Building with Make would result in "make: *** [Makefile:166:
+             ;; all] Error 2".
+             (lambda* (#:key make-flags parallel-tests? #:allow-other-keys)
+               (let ((job-count (number->string (or (and parallel-tests?
+                                                         (parallel-job-count))
+                                                    1))))
+                 (apply invoke "cmake" "--build" "." "-j" job-count
+                        "--target" make-flags))))
+           (replace 'install
+             (lambda _
+               (invoke "cmake" "--install" ".")))))))
+    (native-inputs
+     ;; Importing (gnu packages commencement) would introduce a cycle.
+     `(("ld-gold-wrapper" ,(module-ref (resolve-interface
+                                        '(gnu packages commencement))
+                                       'ld-gold-wrapper))
+       ("llvm" ,llvm-6)
+       ("ldc" ,ldc-bootstrap-0.17)
+       ("ninja" ,ninja)
+       ("python-wrapper" ,python-wrapper)
+       ("unzip" ,unzip)))))
+
+;;; For 32 bits systems, 1.12 cannot build 1.27 directly, so we need another
+;;; hop.
+(define ldc-bootstrap-1.24
+  (package
+    (inherit ldc-bootstrap-1.12)
+    (version "1.24.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/ldc-developers/ldc/releases"
+                           "/download/v" version "/ldc-" version "-src.tar.gz"))
+       (sha256
+        (base32 "0g5svf55i0kq55q49awmwqj9qi1n907cyrn1vjdjgs8nx6nn35gx"))))
+    (native-inputs
+     (fold alist-replace
+           (package-native-inputs ldc-bootstrap-1.12)
+           '("ldc" "llvm")
+           `((,ldc-bootstrap-1.12) (,llvm-11))))))
+
+(define ldc-bootstrap-1.27
+  (package
+    (inherit ldc-bootstrap-1.24)
+    (version "1.27.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/ldc-developers/ldc/releases"
+                           "/download/v" version "/ldc-" version "-src.tar.gz"))
+       (sha256
+        (base32 "1775001ba6n8w46ln530kb5r66vs935ingnppgddq8wqnc0gbj4k"))))
+    (native-inputs
+     (fold alist-replace
+           (package-native-inputs ldc-bootstrap-1.24)
+           '("ldc" "llvm")
+           `((,ldc-bootstrap-1.24) (,llvm-11))))))
+
+(define-public ldc
+  (package
+    (inherit ldc-bootstrap-1.27)
+    (arguments
+     (substitute-keyword-arguments (package-arguments ldc-bootstrap-1.27)
+       ((#:make-flags _ #f)
+        '(list "all"
+               ;; Also build the test runner binaries.
+               "ldc2-unittest" "all-test-runners"))
+       ((#:configure-flags flags)
+        `(,@flags "-DBUILD_SHARED_LIBS=ON"
+                  "-DLDC_LINK_MANUALLY=OFF"))
+       ((#:tests? _) #t)
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (add-after 'unpack 'fix-compiler-rt-library-discovery
+             (lambda* (#:key inputs #:allow-other-keys)
+               (let ((clang-runtime (assoc-ref inputs "clang-runtime"))
+                     (system ,(or (%current-target-system)
+                                  (%current-system))))
+                 (define (gnu-triplet->clang-arch system)
+                   (letrec-syntax
+                       ((matches (syntax-rules (=>)
+                                   ((_ (system-prefix => target) rest ...)
+                                    (if (string-prefix? system-prefix system)
+                                        target
+                                        (matches rest ...)))
+                                   ((_)
+                                    (error "Clang target for system is unknown"
+                                           system)))))
+                     (matches ("x86_64"      => "x86_64")
+                              ("i686"        => "i386")
+                              ("armhf"       => "armhf"))))
+                 ;; Coax LLVM into agreeing with Clang about system target
+                 ;; naming.
+                 (substitute* "driver/linker-gcc.cpp"
+                   (("triple.getArchName\\(\\)")
+                    (format #f "~s" (gnu-triplet->clang-arch system))))
+                 ;; Augment the configuration of the ldc2 binaries so they can
+                 ;; find the compiler-rt libraries they need to be linked with
+                 ;; for the tests.
+                 (substitute* (find-files "." "^ldc2.*\\.conf\\.in$")
+                   ((".*lib-dirs = \\[\n" all)
+                    (string-append all
+                                   "        \"" clang-runtime
+                                   "/lib/linux\",\n"))))))
+           (add-after 'unpack 'patch-paths-in-tests
+             (lambda _
                (substitute* "tests/d2/dmd-testsuite/Makefile"
                  (("/bin/bash") (which "bash")))
-               ;; disable unittests in the following files. We are discussing with
-               ;; upstream
+               (substitute* "tests/linking/linker_switches.d"
+                 (("echo") (which "echo")))
+               (substitute* "tests/d2/dmd-testsuite/dshell/test6952.d"
+                 (("/usr/bin/env bash")
+                  (which "bash")))))
+           (add-after 'unpack 'disable-problematic-tests
+             (lambda* (#:key inputs #:allow-other-keys)
+               ;; Disable unittests in the following files.
                (substitute* '("runtime/phobos/std/net/curl.d"
                               "runtime/phobos/std/datetime/systime.d"
-                              "runtime/phobos/std/datetime/timezone.d"
-                              )
+                              "runtime/phobos/std/datetime/timezone.d")
                  (("version(unittest)") "version(skipunittest)")
                  ((" unittest") " version(skipunittest) unittest"))
-               ;; the following tests require a more recent LLVM
-               (delete-file "tests/compilable/ctfe_math.d")
-               (delete-file "tests/debuginfo/nested_gdb.d")
-               (delete-file "tests/debuginfo/classtypes_gdb.d")
-               ;; for the following tests ptrace fails with EPERM
-               ;; (see <https://issues.guix.gnu.org/48541>):
-               (delete-file "tests/d2/dmd-testsuite/runnable/b18504.d")
-               (delete-file "tests/d2/dmd-testsuite/runnable/gdb14225.d")
-               (delete-file "tests/d2/dmd-testsuite/runnable/gdb14276.d")
-               (delete-file "tests/d2/dmd-testsuite/runnable/gdb14313.d")
-               (delete-file "tests/d2/dmd-testsuite/runnable/gdb14330.d")
-               (delete-file "tests/d2/dmd-testsuite/runnable/gdb1.d")
-               (delete-file "tests/d2/dmd-testsuite/runnable/gdb4149.d")
-               (delete-file "tests/d2/dmd-testsuite/runnable/gdb4181.d")
-               (delete-file "tests/d2/dmd-testsuite/runnable/gdb15729.sh")
-               ;; the following tests plugins we don't have.
+               ;; The following tests plugins we don't have.
                (delete-file "tests/plugins/addFuncEntryCall/testPlugin.d")
-               ;; the following tests requires AVX instruction set in the CPU.
-               (substitute* "tests/d2/dmd-testsuite/runnable/test_cdvecfill.d"
+               ;; The following tests requires AVX instruction set in the CPU.
+               (substitute* "tests/d2/dmd-testsuite/runnable/cdvecfill.sh"
                  (("^// DISABLED: ") "^// DISABLED: linux64 "))
-               #t))
+               ;; This unit test requires networking, fails with
+               ;; "core.exception.RangeError@std/socket.d(778): Range
+               ;; violation".
+               (substitute* "runtime/phobos/std/socket.d"
+                 (("assert\\(ih.addrList\\[0\\] == 0x7F_00_00_01\\);.*")
+                  ""))
+               ;; The GDB tests suite fails; there are a few bug reports about
+               ;; it upstream.
+               (for-each delete-file (find-files "tests" "gdb.*\\.(d|sh)$"))
+               (delete-file "tests/d2/dmd-testsuite/runnable/debug_info.d")
+               (delete-file "tests/d2/dmd-testsuite/runnable/b18504.d")
+               (substitute* "runtime/druntime/test/exceptions/Makefile"
+                 ((".*TESTS\\+=rt_trap_exceptions_drt_gdb.*")
+                  ""))
+               ;; The following tests fail on the supported 32 bit systems,
+               ;; which are not tested upstream.
+               (with-directory-excursion "tests"
+                 (let ((system ,(or (%current-target-system)
+                                    (%current-system))))
+                   (when (or (string-prefix? "armhf" system )
+                             (string-prefix? "i686" system ))
+                     (for-each delete-file
+                               '("PGO/profile_rt_calls.d"
+                                 "codegen/mangling.d"
+                                 "debuginfo/print_gdb.d"
+                                 "dynamiccompile/bind.d"
+                                 "dynamiccompile/bind_bool.d"
+                                 "dynamiccompile/bind_func_opt.d"
+                                 "dynamiccompile/bind_nested_opt.d"
+                                 "dynamiccompile/bind_opt.d"
+                                 "dynamiccompile/compiler_context.d"
+                                 "dynamiccompile/compiler_context_parallel.d"
+                                 "instrument/xray_check_pipeline.d"
+                                 "instrument/xray_link.d"
+                                 "instrument/xray_simple_execution.d"
+                                 "sanitizers/msan_noerror.d"
+                                 "sanitizers/msan_uninitialized.d"
+                                 "d2/dmd-testsuite/runnable_cxx/cppa.d")))))))
+           (add-before 'configure 'set-cc-and-cxx-to-use-clang
+             ;; The tests require to be built with Clang; build everything
+             ;; with it, for simplicity.
+             (lambda _
+               (setenv "CC" (which "clang"))
+               (setenv "CXX" (which "clang++"))))
            (replace 'check
-             (lambda* (#:key inputs outputs #:allow-other-keys)
-               ;; some tests call into gdb binary which needs SHELL and CC set
-               (setenv "SHELL" (which "sh"))
-               (setenv "CC" (string-append (assoc-ref inputs "gcc") "/bin/gcc"))
-               (invoke "make" "test" "-j" (number->string (parallel-job-count))))))))
-      (native-inputs
-       `(("llvm" ,llvm-6)
-         ("clang" ,clang-6)
-         ("ldc" ,ldc-bootstrap)
-         ("python-lit" ,python-lit)
-         ("python-wrapper" ,python-wrapper)
-         ("unzip" ,unzip)
-         ("gdb" ,gdb)
-         ("phobos-src"
-          ,(origin
-             (method git-fetch)
-             (uri (git-reference
-                   (url "https://github.com/ldc-developers/phobos")
-                   (commit (string-append "ldc-v" older-version))))
-             (file-name (git-file-name "phobos" older-version))
-             (sha256
-              (base32 "1gmlwnjdcf6s5aahadxsif9l5nyaj0rrn379g6fmhcvdk64kf509"))
-             ;; This patch deactivates some tests that depend on network access
-             ;; to pass.  It also deactivates some tests that have some reliance
-             ;; on timezone.
-             ;;
-             ;; For the network tests, there's an effort to get a version flag
-             ;; added to deactivate these tests for distribution packagers
-             ;; that is being pursued at
-             ;; <https://forum.dlang.org/post/zmdbdgnzrxyvtpqafvyg@forum.dlang.org>.
-             ;; It also deactivates a test that requires /root
-             (patches (search-patches "ldc-disable-phobos-tests.patch"))))
-         ("druntime-src"
-          ,(origin
-             (method git-fetch)
-             (uri (git-reference
-                   (url "https://github.com/ldc-developers/druntime")
-                   (commit (string-append "ldc-v" older-version))))
-             (file-name (git-file-name "druntime" older-version))
-             (sha256
-              (base32 "0a3yyjcnpvm5fbdczf76fx08kl154w17w06hlxf0j3p1p4jc85aj"))))
-         ("dmd-testsuite-src"
-          ,(origin
-             (method git-fetch)
-             (uri (git-reference
-                   (url "https://github.com/ldc-developers/dmd-testsuite")
-                   (commit (string-append "ldc-v" older-version))))
-             (file-name (git-file-name "dmd-testsuite" older-version))
-             (sha256
-              (base32 "0mm3rliki1nqiqfaha7ssvm156aa398vpvf4v6895m7nn1mz7rss")))))))))
+             (lambda* (#:key tests? parallel-tests? #:allow-other-keys)
+               (when tests?
+                 (let ((job-count (number->string
+                                   (or (and parallel-tests?
+                                            (parallel-job-count))
+                                       1))))
+                   ;; The test targets are tested separately to provide
+                   ;; finer-grained diagnostics (see:
+                   ;; https://raw.githubusercontent.com/ldc-developers/
+                   ;; ldc/master/.azure-pipelines/3-posix-test.yml)
+                   (display "running the ldc2 unit tests...\n")
+                   (invoke "ctest" "--output-on-failure" "-j" job-count
+                           "-R" "ldc2-unittest")
+                   (display "running the lit test suite...\n")
+                   (invoke "ctest" "--output-on-failure" "-j" job-count
+                           "-R" "lit-tests")
+                   (display "running the dmd test suite...\n")
+                   (invoke "ctest" "--output-on-failure" "-j" job-count
+                           "-R" "dmd-testsuite")
+                   (display "running the defaultlib unit tests and druntime \
+integration tests...\n")
+                   (invoke "ctest" "--output-on-failure" "-j" job-count
+                           "-E" "dmd-testsuite|lit-tests|ldc2-unittest")))))))))
+    (native-inputs
+     (append (delete "llvm"
+                     (alist-replace "ldc" (list ldc-bootstrap-1.27)
+                                    (package-native-inputs ldc-bootstrap-1.27)))
+         `(("clang" ,clang-11)          ;propagates llvm and clang-runtime
+           ("python-lit" ,python-lit))))))
 
 (define-public dub
   (package
@@ -338,9 +448,9 @@ bootstrapping more recent compilers written in D.")
                (install-file "bin/dub" bin)
                #t))))))
     (inputs
-     `(("curl" ,curl)))
+     (list curl))
     (native-inputs
-     `(("ldc" ,ldc)))
+     (list ldc))
     (home-page "https://code.dlang.org/getting_started")
     (synopsis "Package and build manager for D projects")
     (description
diff --git a/gnu/packages/dns.scm b/gnu/packages/dns.scm
index 45e250138e..c061c9a22d 100644
--- a/gnu/packages/dns.scm
+++ b/gnu/packages/dns.scm
@@ -9,7 +9,7 @@
 ;;; Copyright © 2016, 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017 Vasile Dumitrascu <va511e@yahoo.com>
 ;;; Copyright © 2017 Gregor Giesen <giesen@zaehlwerk.net>
-;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
+;;; Copyright © 2018, 2022 Oleg Pykhalov <go.wigust@gmail.com>
 ;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2019 Chris Marusich <cmmarusich@gmail.com>
 ;;; Copyright © 2019 Rutger Helling <rhelling@mykolab.com>
@@ -40,8 +40,8 @@
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
   #:use-module (gnu packages bash)
-  #:use-module (gnu packages certs)
   #:use-module (gnu packages check)
+  #:use-module (gnu packages curl)
   #:use-module (gnu packages databases)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages compression)
@@ -69,6 +69,7 @@
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages ragel)
+  #:use-module (gnu packages serialization)
   #:use-module (gnu packages shells)
   #:use-module (gnu packages sphinx)
   #:use-module (gnu packages swig)
@@ -77,28 +78,77 @@
   #:use-module (gnu packages web)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages)
+  #:use-module (guix gexp)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix utils)
+  #:use-module (guix build-system copy)
   #:use-module (guix build-system glib-or-gtk)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system meson)
   #:use-module (guix build-system trivial))
 
+(define-public cloudflare-cli
+  (let ((commit "2d986d3ec1b0e3158c4bd40e8918947cb74aa392")
+        (revision "1"))
+    (package
+      (name "cloudflare-cli")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/earlchew/cloudflare-cli")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "0f86g6n86kwykl3jnhqjrdfy8ybkp03ghr3dlr70q2552qw4axw2"))))
+      (build-system copy-build-system)
+      (arguments
+       `(#:install-plan '(("cloudflare-cli" "bin/") ("cloudflare-cli.sh" "bin/"))
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'find-jsonsh
+             (lambda* (#:key inputs #:allow-other-keys)
+               (substitute* "cloudflare-cli.sh"
+                 (("\\$\\{0%/\\*\\}/jsonsh")
+                  (string-append (assoc-ref inputs "json.sh") "/bin/JSON.sh")))
+               #t))
+           (add-after 'install 'wrap-program
+             (lambda* (#:key inputs outputs #:allow-other-keys)
+               (wrap-program (string-append (assoc-ref outputs "out") "/bin/cloudflare-cli")
+                 `("PATH" ":" prefix
+                   (,(string-join
+                      (map (lambda (in) (string-append (assoc-ref inputs in) "/bin"))
+                           '("grep" "curl"))
+                      ":"))))
+               #t)))))
+      (inputs
+       (list bash-minimal curl grep json.sh))
+      (synopsis
+        "CLI to edit Cloudflare DNS records")
+      (description
+        "This command line tool to update Cloudfare DNS records is useful for tasks
+such as updating dynamic DNS records or updating DNS records for the ACME DNS-01
+protocol.")
+      (home-page "https://github.com/earlchew/cloudflare-cli")
+      (license license:expat))))
+
 (define-public ldns
   (package
     (name "ldns")
-    (version "1.7.1")
+    (version "1.8.1")
     (source
      (origin
        (method url-fetch)
        (uri
         (string-append "https://www.nlnetlabs.nl/downloads/"
-                       name "/" name "-" version ".tar.gz"))
+                       "ldns/ldns-" version ".tar.gz"))
        (sha256
-        (base32 "0ac242n7996fswq1a3nlh1bbbhrsdwsq4mx7xq8ffq6aplb4rj4a"))
+        (base32 "18vzdmyg9bm45janw602d4hifjsncrv143awlwcslfjdrsmjk0lm"))
        (patches
         (search-patches
          ;; To create make-flag variables,
@@ -107,62 +157,41 @@
     (build-system gnu-build-system)
     (outputs '("out" "drill" "examples" "pyldns"))
     (arguments
-     `( ;; Tests require Tpkg.
-       ;; https://tpkg.github.io/
-       #:tests? #f
-       #:configure-flags
-       (list
-        "--disable-static"
-        "--enable-gost-anyway"
-        "--enable-rrtype-ninfo"
-        "--enable-rrtype-rkey"
-        "--enable-rrtype-ta"
-        "--enable-rrtype-avc"
-        "--enable-rrtype-doa"
-        "--enable-rrtype-amtrelay"
-        "--with-drill"
-        "--with-examples"
-        "--with-pyldns"
-        ;; Perl module DNS::LDNS not available.
-        ;; https://github.com/erikoest/DNS-LDNS.git
-        ;; "--with-p5-dns-ldns"
-        (string-append "--with-ssl="
-                       (assoc-ref %build-inputs "openssl"))
-        (string-append "--with-ca-path="
-                       (assoc-ref %build-inputs "nss-certs")
-                       "/etc/ssl/certs"))
-       #:make-flags
-       (list
-        (string-append "drillbindir="
-                       (assoc-ref %outputs "drill")
-                       "/bin")
-        (string-append "drillmandir="
-                       (assoc-ref %outputs "drill")
-                       "/share/man")
-        (string-append "examplesbindir="
-                       (assoc-ref %outputs "examples")
-                       "/bin")
-        (string-append "examplesmandir="
-                       (assoc-ref %outputs "examples")
-                       "/share/man")
-        (string-append "python_site="
-                       (assoc-ref %outputs "pyldns")
-                       "/lib/python"
-                       ,(version-major+minor
-                         (package-version python))
-                       "/site-packages"))))
+     (list
+      #:tests? #f                     ; tests require <https://tpkg.github.io>
+      #:configure-flags
+      #~(list
+         "--disable-static"
+         "--enable-gost-anyway"
+         "--enable-rrtype-ninfo"
+         "--enable-rrtype-rkey"
+         "--enable-rrtype-ta"
+         "--enable-rrtype-avc"
+         "--enable-rrtype-doa"
+         "--enable-rrtype-amtrelay"
+         "--with-drill"
+         "--with-examples"
+         "--with-pyldns"
+         ;; Perl module DNS::LDNS not available.
+         ;; https://github.com/erikoest/DNS-LDNS.git
+         ;; "--with-p5-dns-ldns"
+         (string-append "--with-ssl=" #$(this-package-input "openssl"))
+         (string-append "--with-ca-path=/etc/ssl/certs"))
+      #:make-flags
+      #~(list
+         (string-append "drillbindir=" #$output:drill "/bin")
+         (string-append "drillmandir=" #$output:drill "/share/man")
+         (string-append "examplesbindir=" #$output:examples "/bin")
+         (string-append "examplesmandir=" #$output:examples "/share/man")
+         (string-append "python_site=" #$output:pyldns "/lib/python"
+                        #$(version-major+minor (package-version
+                                                (this-package-input
+                                                 "python-wrapper")))
+                        "/site-packages"))))
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("ksh" ,oksh)
-       ("perl" ,perl)
-       ("perl-devel-checklib" ,perl-devel-checklib)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python-wrapper)
-       ("swig" ,swig)))
+     (list doxygen perl perl-devel-checklib pkg-config swig))
     (inputs
-     `(("libpcap" ,libpcap)
-       ("nss-certs" ,nss-certs)
-       ("openssl" ,openssl)))
+     (list libpcap openssl python-wrapper))
     (synopsis "DNS library that facilitates DNS tool programming")
     (description "LDNS aims to simplify DNS programming, it supports recent
 RFCs like the DNSSEC documents, and allows developers to easily create
@@ -187,84 +216,67 @@ C it should be a lot faster than Perl.")
     (build-system glib-or-gtk-build-system)
     (outputs '("out" "gui" "nm"))
     (arguments
-     `(#:test-target "test"
-       #:configure-flags
-       (list
-        (string-append "--with-ssl="
-                       (assoc-ref %build-inputs "openssl"))
-        "--with-hooks=networkmanager"
-        (string-append "--with-networkmanager-dispatch="
-                       (assoc-ref %outputs "nm")
-                       "/etc/NetworkManager/dispatcher.d")
-        (string-append "--with-xdg-autostart="
-                       (assoc-ref %outputs "gui")
-                       "/etc/xdg/autostart")
-        (string-append "--with-uidir="
-                       (assoc-ref %outputs "gui")
-                       "/share/dnssec-trigger")
-        (string-append "--with-python="
-                       (assoc-ref %build-inputs "python")
-                       "/bin/python")
-        (string-append "--with-unbound-control="
-                       (assoc-ref %build-inputs "unbound")
-                       "/sbin/unbound-control")
-        "--with-forward-zones-support")
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'patch-configure
-           (lambda _
-             (substitute* "configure"
-               (("appindicator-0.1")
-                "appindicator3-0.1"))
-             #t))
-         (add-before 'configure 'patch-makefile
-           (lambda _
-             (substitute* "Makefile.in"
-               (("/usr")
-                "$(prefix)")
-               (("/etc")
-                "$(prefix)/etc")
-               ((".*gtk-update-icon-cache.*")
-                ""))
-             #t))
-         (add-after 'install 'remove-systemd
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out")))
-               (delete-file-recursively
-                (string-append out "/lib/systemd"))
-               #t)))
-         (add-after 'remove-systemd 'move-gui
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (gui (assoc-ref outputs "gui")))
-               (mkdir-p (string-append gui "/bin"))
-               (mkdir-p (string-append gui "/share"))
-               (rename-file
-                (string-append out "/bin")
-                (string-append gui "/bin"))
-               (rename-file
-                (string-append out "/share/icons")
-                (string-append gui "/share/icons"))
-               #t)))
-         (add-after 'move-gui 'move-nm
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (nm (assoc-ref outputs "nm")))
-               (mkdir-p (string-append nm "/libexec"))
-               (rename-file
-                (string-append out "/libexec")
-                (string-append nm "/libexec"))
-               #t))))))
+     (list #:test-target "test"
+           #:configure-flags
+           #~(list
+              (string-append "--with-ssl=" #$(this-package-input "openssl"))
+              "--with-hooks=networkmanager"
+              (string-append "--with-networkmanager-dispatch="
+                             #$output:nm
+                             "/etc/NetworkManager/dispatcher.d")
+              (string-append "--with-xdg-autostart="
+                             #$output:gui
+                             "/etc/xdg/autostart")
+              (string-append "--with-uidir="
+                             #$output:gui
+                             "/share/dnssec-trigger")
+              (string-append "--with-python="
+                             #$(this-package-native-input "python-wrapper")
+                             "/bin/python")
+              (string-append "--with-unbound-control="
+                             #$(this-package-input "unbound")
+                             "/sbin/unbound-control")
+              "--with-forward-zones-support")
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'patch-configure
+                 (lambda _
+                   (substitute* "configure"
+                     (("appindicator-0.1")
+                      "appindicator3-0.1"))))
+               (add-before 'configure 'patch-makefile
+                 (lambda _
+                   (substitute* "Makefile.in"
+                     (("/usr")
+                      "$(prefix)")
+                     (("/etc")
+                      "$(prefix)/etc")
+                     ((".*gtk-update-icon-cache.*")
+                      ""))))
+               (add-after 'install 'remove-systemd
+                 (lambda _
+                   (delete-file-recursively
+                    (string-append #$output "/lib/systemd"))))
+               (add-after 'remove-systemd 'move-gui
+                 (lambda _
+                   (mkdir-p (string-append #$output:gui "/bin"))
+                   (mkdir-p (string-append #$output:gui "/share"))
+                   (rename-file
+                    (string-append #$output     "/bin")
+                    (string-append #$output:gui "/bin"))
+                   (rename-file
+                    (string-append #$output     "/share/icons")
+                    (string-append #$output:gui "/share/icons"))))
+               (add-after 'move-gui 'move-nm
+                 (lambda _
+                   (mkdir-p (string-append #$output:nm "/libexec"))
+                   (rename-file
+                    (string-append #$output    "/libexec")
+                    (string-append #$output:nm "/libexec")))))))
     (native-inputs
-     `(("cmocka" ,cmocka)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python-wrapper)))
+     (list cmocka pkg-config python-wrapper))
     (inputs
-     `(("gtk+-2" ,gtk+-2)
-       ("ldns" ,ldns)
-       ("libappindicator" ,libappindicator)
-       ("openssl" ,openssl)
-       ("unbound" ,unbound)))
+     (list gtk+-2 ldns libappindicator openssl unbound))
     (synopsis "DNSSEC protection for the DNS traffic")
     (description "DNSSEC-Trigger enables your computer to use DNSSEC protection
 for the DNS traffic.  It relies on the Unbound DNS resolver running locally on
@@ -278,7 +290,7 @@ prompt the user with the option to go with insecure DNS only.")
 (define-public dnsmasq
   (package
     (name "dnsmasq")
-    (version "2.85")
+    (version "2.86")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -286,17 +298,17 @@ prompt the user with the option to go with insecure DNS only.")
                     version ".tar.xz"))
               (sha256
                (base32
-                "1yhjwgz8g5qrqvxh6bbmg3443zi8qqjks3q872wyb1zn7n0d765d"))))
+                "027b0ycw8h8yvvkq46vnr7dv8iqn5srm4kr7hm7sq110kvy2rm98"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("dbus" ,dbus)))
+     (list dbus))
     (arguments
      `(#:phases
        (modify-phases %standard-phases (delete 'configure))
        #:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
-                          "CC=gcc"
+                          (string-append "CC=" ,(cc-for-target))
                           "COPTS=\"-DHAVE_DBUS\"")
        #:tests? #f))                    ; no ‘check’ target
     (home-page "http://www.thekelleys.org.uk/dnsmasq/doc.html")
@@ -320,29 +332,29 @@ and BOOTP/TFTP for network booting of diskless machines.")
     ;; When updating, check whether isc-dhcp's bundled copy should be as well.
     ;; The BIND release notes are available here:
     ;; https://www.isc.org/bind/
-    (version "9.16.16")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "https://ftp.isc.org/isc/bind9/" version
-                    "/bind-" version ".tar.xz"))
-              (sha256
-               (base32
-                "0yqxfq7qc26x7qhk0nkp8h7x9jggzaafm712bvfffy7qml13k4bc"))))
+    (version "9.16.25")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://ftp.isc.org/isc/bind9/" version
+                           "/bind-" version ".tar.xz"))
+       (sha256
+        (base32 "1wqzbq7jfd8zlidkfgx3fc1132xn5hrga7xznzw3x1421y2ji8wz"))
+       (patches
+        (search-patches "bind-re-add-attr-constructor-priority.patch"))))
     (build-system gnu-build-system)
     (outputs `("out" "utils"))
     (inputs
      ;; It would be nice to add GeoIP and gssapi once there are packages.
-     `(("libcap" ,libcap)
-       ("libuv" ,libuv)
-       ("libxml2" ,libxml2)
-       ("openssl" ,openssl)
-       ("p11-kit" ,p11-kit)
-       ("python" ,python)
-       ("python-ply" ,python-ply)))
+     (list libcap
+           libuv
+           libxml2
+           openssl
+           p11-kit
+           python
+           python-ply))
     (native-inputs
-     `(("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list perl pkg-config))
     (arguments
      `(#:configure-flags
        (list (string-append "--with-pkcs11="
@@ -435,13 +447,9 @@ Dynamic DNS update utility
              ;; The system version is still favored and referenced.
              (invoke "autoreconf" "-vif"))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("automake" ,automake)
-       ("autoconf" ,autoconf)
-       ("libtool" ,libtool)))
+     (list pkg-config automake autoconf libtool))
     (inputs
-     `(("libltdl" ,libltdl)
-       ("libsodium" ,libsodium)))
+     (list libltdl libsodium))
     (home-page "https://www.dnscrypt.org/")
     (synopsis "Securely send DNS requests to a remote server")
     (description
@@ -480,10 +488,9 @@ servers is included, and an up-to-date version is available at
            (lambda _
              (invoke "make" "configure"))))))
     (native-inputs
-     `(("autoconf" ,autoconf)))
+     (list autoconf))
     (inputs
-     `(("libevent" ,libevent)
-       ("libsodium" ,libsodium)))
+     (list libevent libsodium))
     (home-page "https://github.com/Cofyc/dnscrypt-wrapper")
     (synopsis "Server-side dnscrypt proxy")
     (description
@@ -520,10 +527,7 @@ the two.")
                              (string-append out "/share/man/man3"))
                #t))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (home-page "https://www.opensmtpd.org")
     (synopsis "Asynchronous resolver library by the OpenBSD project")
     (description
@@ -539,14 +543,14 @@ asynchronous fashion.")
 (define-public nsd
   (package
     (name "nsd")
-    (version "4.3.7")
+    (version "4.3.9")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://www.nlnetlabs.nl/downloads/nsd/nsd-"
                            version ".tar.gz"))
        (sha256
-        (base32 "1bg87g0i66hw16fm7gbqmzyi2rcn1hadzz0bg9b8s5mx7g2rwfzx"))))
+        (base32 "13ay2gr7ln8gl09wdqnxkrdxi51jaqsbn54yh82vvv49jbq4j5ak"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
@@ -582,12 +586,10 @@ asynchronous fashion.")
                  ((".*INSTALL.*\\$\\((config|pid|xfr|db)dir" command)
                   (string-append "#" command))
                  (("\\$\\(nsdconfigfile\\)\\.sample" file-name)
-                  (string-append doc "/examples/" file-name)))
-               #t))))
+                  (string-append doc "/examples/" file-name)))))))
        #:tests? #f))                    ; no tests
     (inputs
-     `(("libevent" ,libevent)
-       ("openssl" ,openssl)))
+     (list libevent openssl))
     (home-page "https://www.nlnetlabs.nl/projects/nsd/about/")
     (synopsis "Authoritative DNS name server")
     (description "@dfn{NSD}, short for Name Server Daemon, is an authoritative
@@ -606,6 +608,60 @@ run in a @code{chroot} jail, thus making any security flaws in NSD less likely
 to result in system-wide compromise.")
     (license (list license:bsd-3))))
 
+(define-public rbldnsd
+  (package
+    (name "rbldnsd")
+    (version "0.998b")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/spamhaus/rbldnsd")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0jj3kyir43qnjgd9rk0wz13iggf3p4p1779v0wgmx3ci0ypnglcr"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'configure
+           ;; The ./configure is hand-written and doesn't ignore unknown
+           ;; standard autotools options like CONFIG_SHELL.
+           (lambda _
+             (invoke "./configure")))
+         (replace 'install
+           ;; There is no Makefile ‘install’ target.  contrib/debian/rules has
+           ;; one but relies on Debian-specific helpers, so install manually.
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out  (assoc-ref outputs "out"))
+                    (sbin (string-append out "/sbin"))
+                    (man8 (string-append out "/share/man/man8")))
+               (install-file "rbldnsd" sbin)
+               (install-file "rbldnsd.8" man8)))))))
+    (inputs
+     (list zlib))
+    (native-inputs
+     ;; For running the test suite.  Python 3 is not yet supported by a release:
+     ;; see <https://github.com/spamhaus/rbldnsd/issues/16>.
+     `(("python" ,python-2)))
+    (home-page "https://rbldnsd.io/")
+    (synopsis
+     "Small nameserver to efficiently serve @acronym{DNSBL, DNS blocklists}")
+    (description
+     "This package contains a small DNS daemon especially made to handle queries
+of @acronym{DNSBL, DNS blocklists}, a simple way to publish IP addresses and/or
+(domain) names which are somehow notable.  Such lists are frequently used to
+refuse e-mail service to clients known to send unwanted (spam) messages.
+
+@command{rbldnsd} is not a general-purpose nameserver.  It answers to a limited
+variety of queries.  This makes it extremely fast---greatly outperforming both
+BIND and djbdns---whilst using relatively little memory.")
+    (license
+     (list license:bsd-3                ; btrie.[ch]
+           license:lgpl2.1+             ; qsort.c
+           license:gpl2+))))            ; the rest
+
 (define-public unbound
   (package
     (name "unbound")
@@ -620,15 +676,14 @@ to result in system-wide compromise.")
     (build-system gnu-build-system)
     (outputs '("out" "python"))
     (native-inputs
-     `(("flex" ,flex)
-       ("swig" ,swig)))
+     (list flex swig))
     (inputs
-     `(("expat" ,expat)
-       ("libevent" ,libevent)
-       ("nghttp2" ,nghttp2 "lib")
-       ("protobuf" ,protobuf)
-       ("python-wrapper" ,python-wrapper)
-       ("openssl" ,openssl)))
+     (list expat
+           libevent
+           `(,nghttp2 "lib")
+           protobuf
+           python-wrapper
+           openssl))
     (arguments
      `(#:configure-flags
        (list "--disable-static" ; save space and non-determinism in libunbound.a
@@ -769,36 +824,34 @@ served by AS112.  Stub and forward zones are supported.")
 (define-public yadifa
   (package
     (name "yadifa")
-    (version "2.5.0")
+    (version "2.5.3")
     (source
-     (let ((build "10188"))
+     (let ((build "10333"))
        (origin
          (method url-fetch)
          (uri
           (string-append "https://www.yadifa.eu/sites/default/files/releases/"
                          "yadifa-" version "-" build ".tar.gz"))
          (sha256
-          (base32 "05ps6fif3sqn6yzkprnp1cm81f3ja4vqc0r6vh7nvzl73gv4rp2w")))))
+          (base32 "1mwy6sfnlaslx26f3kpj9alh8i8y8bf1nbnsdd5j04hjsbavd07p")))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("which" ,which)))
+     (list which))
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (add-before 'configure 'omit-example-configurations
            (lambda _
              (substitute* "Makefile.in"
-               ((" (etc|var)") ""))
-             #t))
+               ((" (etc|var)") ""))))
          (add-after 'configure 'omit-spurious-references
            (lambda _
              ;; The many Makefile.in grep this(!) to #define BUILD_OPTIONS.
              (substitute* "config.log"
                (("(=/gnu/store/)[^-]*" _ match)
-                (string-append match "...")))
-             #t)))
+                (string-append match "..."))))))
        #:configure-flags
        (list "--sysconfdir=/etc"
              "--localstatedir=/var"
@@ -817,7 +870,7 @@ Extensions} (DNSSEC).")
 (define-public knot
   (package
     (name "knot")
-    (version "3.0.7")
+    (version "3.1.5")
     (source
      (origin
        (method git-fetch)
@@ -826,7 +879,7 @@ Extensions} (DNSSEC).")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0ihd0lfh0r1nzz2di2rqkrx5j1017xv7m54irlhccx21inwv6g3y"))
+        (base32 "145fnz740y1g0h2m07kpcimf2rx37saq2l905bl6vwa5ifybrgcq"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -834,8 +887,7 @@ Extensions} (DNSSEC).")
            (for-each delete-file (find-files "." "\\.c\\.[gt]."))
            (delete-file "src/libknot/yparser/ypbody.c")
            ;; Remove bundled library to ensure we always use the system's.
-           (delete-file-recursively "src/contrib/libbpf")
-           #t))))
+           (delete-file-recursively "src/contrib/libbpf")))))
     (build-system gnu-build-system)
     (outputs (list "out" "doc" "lib" "tools"))
     (arguments
@@ -847,9 +899,10 @@ Extensions} (DNSSEC).")
              (string-append "--libdir=" (assoc-ref %outputs "lib") "/lib")
              "--sysconfdir=/etc"
              "--localstatedir=/var"
+             "--disable-static"         ; static libraries are built by default
              "--enable-dnstap"          ; let tools read/write capture files
              "--enable-fastparser"      ; disabled by default when .git/ exists
-             "--enable-xdp=auto"        ; XXX [=yes] currently means =embedded
+             "--enable-xdp=yes"
              "--with-module-dnstap=yes") ; detailed query capturing & logging
        #:phases
        (modify-phases %standard-phases
@@ -859,8 +912,7 @@ Extensions} (DNSSEC).")
            (lambda _
              (substitute* "configure.ac"
                (("enable_xdp=yes" match)
-                (string-append match "\nlibbpf_LIBS=\"$libbpf_LIBS -lz\"")))
-             #true))
+                (string-append match "\nlibbpf_LIBS=\"$libbpf_LIBS -lz\"")))))
          (add-before 'bootstrap 'update-parser
            (lambda _
              (with-directory-excursion "src"
@@ -869,22 +921,32 @@ Extensions} (DNSSEC).")
            (lambda _
              ;; Don't install empty directories like ‘/etc’ outside the store.
              ;; This is needed even when using ‘make config_dir=... install’.
-             (substitute* "src/Makefile.in" (("\\$\\(INSTALL\\) -d") "true"))
-             #t))
+             (substitute* "src/Makefile.in" (("\\$\\(INSTALL\\) -d") "true"))))
          (add-after 'build 'build-info
-           (lambda _
-             (invoke "make" "info")))
+           (lambda* (#:key make-flags parallel-build? #:allow-other-keys)
+             (apply invoke "make" "info"
+                    `(,@(if parallel-build?
+                            `("-j" ,(number->string (parallel-job-count)))
+                            '())
+                      ,@make-flags))))
          (replace 'install
-           (lambda* (#:key outputs #:allow-other-keys)
+           (lambda* (#:key make-flags outputs parallel-build? #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
                     (doc (string-append out "/share/doc/" ,name "-" ,version))
                     (etc (string-append doc "/examples/etc")))
-               (invoke "make"
-                       (string-append "config_dir=" etc)
-                       "install"))))
+               (apply invoke "make" "install"
+                      (string-append "config_dir=" etc)
+                      `(,@(if parallel-build?
+                              `("-j" ,(number->string (parallel-job-count)))
+                              '())
+                        ,@make-flags)))))
          (add-after 'install 'install-info
-           (lambda _
-             (invoke "make" "install-info")))
+           (lambda* (#:key make-flags parallel-build? #:allow-other-keys)
+             (apply invoke "make" "install-info"
+                    `(,@(if parallel-build?
+                            `("-j" ,(number->string (parallel-job-count)))
+                            '())
+                      ,@make-flags))))
          (add-after 'install 'break-circular-:lib->:out-reference
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((lib (assoc-ref outputs "lib")))
@@ -892,8 +954,7 @@ Extensions} (DNSSEC).")
                            (substitute* file
                              (("(prefix=).*" _ assign)
                               (string-append assign lib "\n"))))
-                         (find-files lib "\\.pc$"))
-               #true)))
+                         (find-files lib "\\.pc$")))))
          (add-after 'install 'split-:tools
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out   (assoc-ref outputs "out"))
@@ -902,16 +963,15 @@ Extensions} (DNSSEC).")
                (rename-file (string-append out   "/bin")
                             (string-append tools "/bin"))
                (rename-file (string-append out   "/share/man/man1")
-                            (string-append tools "/share/man/man1"))
-               #true))))))
+                            (string-append tools "/share/man/man1"))))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)
-       ("python-sphinx" ,python-sphinx)
-       ("ragel" ,ragel)
-       ("texinfo" ,texinfo)))
+     (list autoconf
+           automake
+           libtool
+           pkg-config
+           python-sphinx
+           ragel
+           texinfo))
     (inputs
      `(("fstrm" ,fstrm)
        ("gnutls" ,gnutls)
@@ -921,6 +981,7 @@ Extensions} (DNSSEC).")
        ("libedit" ,libedit)
        ("libelf" ,libelf)
        ("libidn" ,libidn)
+       ("libmnl" ,libmnl)
        ("libnghttp2" ,nghttp2 "lib")
        ("liburcu" ,liburcu)
        ("lmdb" ,lmdb)
@@ -947,14 +1008,14 @@ synthesis, and on-the-fly re-configuration.")
 (define-public knot-resolver
   (package
     (name "knot-resolver")
-    (version "5.4.1")
+    (version "5.4.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://secure.nic.cz/files/knot-resolver/"
                                   "knot-resolver-" version ".tar.xz"))
               (sha256
                (base32
-                "0rixiqfj53rfabrz8qpnq4whx8y29d2m5w64a4jlwx7gv4nrd2zv"))))
+                "1sic5ccbbqml4c01dbikkg6qx1gg81nqi76cj79pjdllkqqn92aq"))))
     (build-system meson-build-system)
     (outputs '("out" "doc"))
     (arguments
@@ -966,8 +1027,7 @@ synthesis, and on-the-fly re-configuration.")
              ;;  Disable the default managed root TA, since we don't have
              ;;  write access to the keyfile and its directory in store.
              (substitute* "daemon/lua/sandbox.lua.in"
-               (("^trust_anchors\\.add_file.*") ""))
-             #t))
+               (("^trust_anchors\\.add_file.*") ""))))
          (add-after 'build 'build-doc
            (lambda _
              (invoke "ninja" "doc")))
@@ -998,17 +1058,16 @@ synthesis, and on-the-fly re-configuration.")
                                  (string-append p "/lib/lua/5.1/?.so"))))
                (wrap-program (string-append out "/sbin/kresd")
                  `("LUA_PATH" ";" prefix ,(map lua-path lua-*))
-                 `("LUA_CPATH" ";" prefix ,(map lua-cpath lua-*)))
-               #t))))))
+                 `("LUA_CPATH" ";" prefix ,(map lua-cpath lua-*)))))))))
     (native-inputs
-     `(("cmocka" ,cmocka)               ; for unit tests
-       ("doxygen" ,doxygen)
-       ("protobuf-c" ,protobuf-c)
-       ("pkg-config" ,pkg-config)
-       ("python-breathe" ,python-breathe)
-       ("python-sphinx" ,python-sphinx)
-       ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
-       ("texinfo" ,texinfo)))
+     (list cmocka ; for unit tests
+           doxygen
+           protobuf-c
+           pkg-config
+           python-breathe
+           python-sphinx
+           python-sphinx-rtd-theme
+           texinfo))
     (inputs
      `(("fstrm" ,fstrm)
        ("gnutls" ,gnutls)
@@ -1018,7 +1077,8 @@ synthesis, and on-the-fly re-configuration.")
        ("luajit" ,luajit)
        ;; TODO: Add optional lua modules: basexx and psl.
        ("lua-bitop" ,lua5.1-bitop)
-       ("nghttp2" ,nghttp2 "lib")))
+       ("nghttp2" ,nghttp2 "lib")
+       ("python" ,python)))
     (home-page "https://www.knot-resolver.cz/")
     (synopsis "Caching validating DNS resolver")
     (description
@@ -1045,14 +1105,13 @@ LuaJIT, both a resolver library and a daemon.")
         (base32 "0hf377g4j9r9sac75xp17nk2h58mazswz4vkg4g2gl2yyhvzq91w"))))
     (build-system trivial-build-system) ; no Makefile.PL
     (native-inputs
-     `(("bash" ,bash)
-       ("perl" ,perl)))
+     (list bash perl))
     (inputs
-     `(("inetutils" ,inetutils)         ; logger
-       ("net-tools" ,net-tools)
-       ("perl-data-validate-ip" ,perl-data-validate-ip)
-       ("perl-digest-sha1" ,perl-digest-sha1)
-       ("perl-io-socket-ssl" ,perl-io-socket-ssl)))
+     (list inetutils ; logger
+           net-tools
+           perl-data-validate-ip
+           perl-digest-sha1
+           perl-io-socket-ssl))
     (arguments
      `(#:modules ((guix build utils))
        #:builder
@@ -1150,12 +1209,9 @@ attempts the update when it has changed.")
      (arguments
       '(#:configure-flags '("--disable-static"))) ;no need for libhsk.a
      (native-inputs
-      `(("autoconf" ,autoconf)
-        ("automake" ,automake)
-        ("libtool" ,libtool)))
+      (list autoconf automake libtool))
      (inputs
-      `(("unbound" ,unbound)
-        ("libuv" ,libuv)))
+      (list unbound libuv))
      (home-page "https://www.handshake.org/")
      (synopsis "Resolver daemon for the Handshake naming protocol")
      (description
@@ -1303,7 +1359,21 @@ and TCP-capable recursive DNS server for finding domains on the internet.")
        #:configure-flags
        (list (string-append "--sysconfdir=/etc"))
        #:make-flags
-       (list (string-append "SYSCONFDIR=/" (assoc-ref %outputs "out") "/etc"))))
+       (list (string-append "SYSCONFDIR=/" (assoc-ref %outputs "out") "/etc"))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'wrap-program
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out"))
+                   (coreutils (assoc-ref inputs "coreutils-minimal")))
+               (substitute* (string-append out "/sbin/resolvconf")
+                 (("RESOLVCONF=\"\\$0\"")
+                  (format #f "\
+RESOLVCONF=\"$0\"
+PATH=~a/bin:$PATH"
+                          coreutils)))))))))
+    (inputs
+     (list coreutils-minimal))
     (home-page "https://roy.marples.name/projects/openresolv/")
     (synopsis "Resolvconf POSIX compliant implementation, a middleman for resolv.conf")
     (description "openresolv is an implementation of @command{resolvconf}, the
diff --git a/gnu/packages/docbook.scm b/gnu/packages/docbook.scm
index ba90376e8b..cb1a0d4d5e 100644
--- a/gnu/packages/docbook.scm
+++ b/gnu/packages/docbook.scm
@@ -1,11 +1,12 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2016 Mathieu Lirzin <mthl@gnu.org>
 ;;; 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>
+;;; Copyright © 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2021 Andrew Whatson <whatson@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -34,11 +35,13 @@
   #:use-module (gnu packages perl)
   #:use-module (gnu packages python)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages web-browsers)
   #:use-module (gnu packages xml)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module ((guix build utils) #:select (alist-replace))
+  #:use-module (guix build-system copy)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system trivial)
   #:use-module (guix build-system python))
@@ -75,7 +78,7 @@
                 (string-append
                  "uri=\"file://" dtd "/")))
              #t)))))
-    (native-inputs `(("unzip" ,unzip)))
+    (native-inputs (list unzip))
     (home-page "https://docbook.org")
     (synopsis "DocBook XML DTDs for document authoring")
     (description
@@ -175,15 +178,17 @@ by no means limited to these applications.)  This package provides XML DTDs.")
 (define-public docbook-xsl
   (package
     (name "docbook-xsl")
-    (version "1.79.1")
+    (version "1.79.2")
     (source (origin
               (method url-fetch)
-              (uri (string-append "mirror://sourceforge/docbook/docbook-xsl/"
-                                  version "/docbook-xsl-" version ".tar.bz2"))
-              (patches (search-patches "docbook-xsl-nonrecursive-string-subst.patch"))
+              (uri (string-append "https://github.com/docbook/xslt10-stylesheets"
+                                  "/releases/download/release%2F" version
+                                  "/docbook-xsl-" version ".tar.bz2"))
+              (patches (search-patches "docbook-xsl-support-old-url.patch"
+                                       "docbook-xsl-nonrecursive-string-subst.patch"))
               (sha256
                (base32
-                "0s59lihif2fr7rznckxr2kfyrvkirv76r1zvidp9b5mj28p4apvj"))
+                "0wd33z41kdsybyx3ay21w6bdlmgpd9kyn3mr5y520lsf8km28r9i"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -191,9 +196,12 @@ by no means limited to these applications.)  This package provides XML DTDs.")
                   #t))))
     (build-system trivial-build-system)
     (arguments
-     `(#:builder (let ((name-version (string-append ,name "-" ,version)))
+     `(#:builder (begin
                    (use-modules (guix build utils))
 
+                   (define name-version
+                     (string-append ,name "-" ,version))
+
                    (let* ((bzip2  (assoc-ref %build-inputs "bzip2"))
                           (xz     (assoc-ref %build-inputs "xz"))
                           (tar    (assoc-ref %build-inputs "tar"))
@@ -213,15 +221,69 @@ by no means limited to these applications.)  This package provides XML DTDs.")
                                        name-version "/")))
                      #t))
        #:modules ((guix build utils))))
-    (native-inputs `(("bzip2" ,bzip2)
-                     ("xz" ,xz)         ;needed for repacked tarballs
-                     ("tar" ,tar)))
+    (native-inputs (list bzip2 xz ;needed for repacked tarballs
+                         tar))
     (home-page "https://docbook.org")
     (synopsis "DocBook XSL style sheets for document authoring")
     (description
      "This package provides XSL style sheets for DocBook.")
     (license (license:x11-style "" "See 'COPYING' file."))))
 
+(define-public docbook-xsl-ns
+  (package
+    (name "docbook-xsl-ns")
+    (version "1.79.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://sourceforge/docbook/"
+                                  name "/" version "/"
+                                  name "-" version ".tar.bz2"))
+              (sha256
+               (base32
+                "170ggf5dgjar65kkn5n33kvjr3pdinpj66nnxfx8b2avw0k91jin"))))
+    (build-system copy-build-system)
+    (outputs '("out" "doc"))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         ;; XXX: The copy-build-system doesn't seem to allow installing to a
+         ;; different output.
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (xml (string-append out "/xml/xsl/" ,name "-" ,version))
+                    (doc (string-append (assoc-ref %outputs "doc")
+                                        "/share/doc/" ,name "-" ,version))
+                    (select-rx (make-regexp
+                                "(\\.xml$|\\.xsl$|\\.dtd$|\\.ent$)")))
+               ;; Install catalog.
+               (install-file "catalog.xml" xml)
+               (install-file "VERSION.xsl" xml)
+               (substitute* (string-append xml "/catalog.xml")
+                 (("rewritePrefix=\"./")
+                  (string-append "rewritePrefix=\"file://" xml "/")))
+               ;; Install style sheets.
+               (for-each (lambda (dir)
+                           (for-each (lambda (f)
+                                       (install-file
+                                        f (string-append xml "/" (dirname f))))
+                                     (find-files dir select-rx)))
+                         '("assembly" "common" "eclipse" "epub" "epub3" "fo"
+                           "highlighting" "html" "htmlhelp" "javahelp" "lib"
+                           "manpages" "params" "profiling" "roundtrip"
+                           "template" "website"
+                           "xhtml" "xhtml-1_1" "xhtml5"))
+               ;; Install documentation.
+               (install-file "NEWS" doc)
+               (install-file "RELEASE-NOTES.html" doc)
+               (copy-recursively "slides" doc)
+               (copy-recursively "webhelp" doc)))))))
+    (home-page "https://docbook.org")
+    (synopsis "DocBook XSL namespaced style sheets for document authoring")
+    (description "This package provides the @emph{namespaced} XSL style sheets
+for DocBook.")
+    (license (license:x11-style "" "See 'COPYING' file."))))
+
 (define-public docbook-dsssl
   (package
     (name "docbook-dsssl")
@@ -254,10 +316,9 @@ by no means limited to these applications.)  This package provides XML DTDs.")
            ;; The doc output contains 1.4 MiB of HTML documentation.
            (symlink docbook-dsssl-doc doc)))))
     (inputs
-     `(("docbook-dsssl-doc" ,docbook-dsssl-doc)))
+     (list docbook-dsssl-doc))
     (native-inputs
-     `(("bzip2" ,bzip2)
-       ("tar" ,tar)))
+     (list bzip2 tar))
     (home-page "https://docbook.org/")
     (synopsis "DSSSL style sheets for DocBook")
     (description "This package provides DSSSL style sheets for DocBook.")
@@ -335,9 +396,9 @@ by no means limited to these applications.)  This package provides XML DTDs.")
              (("(.*ISO 8879.*)\"iso-(.*)\\.gml\"" _ head name)
               (string-append head "\"" iso-entities-dir "/ISO" name "\"")))))))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (inputs
-     `(("iso-8879-entities" ,iso-8879-entities)))
+     (list iso-8879-entities))
     (home-page "https://docbook.org")
     (synopsis "DocBook SGML style sheets for document authoring")
     (description "This package provides SGML style sheets for DocBook.")
@@ -387,54 +448,50 @@ the in DocBook SGML DTDs.")
 (define-public dblatex
   (package
     (name "dblatex")
-    (version "0.3.11")
+    (version "0.3.12")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/dblatex/dblatex/"
-                                  "dblatex-" version "/dblatex-"
+                                  "dblatex-" version "/dblatex3-"
                                   version ".tar.bz2"))
               (sha256
                (base32
-                "0rp1bc2lgisigscq1i7zxfd2qdaxxxld6khbcxss4pq7fpi9fzkv"))))
+                "0yd09nypswy3q4scri1dg7dr99d7gd6r2dwx0xm81l9f4y32gs0n"))))
     (build-system python-build-system)
     ;; TODO: Add xfig/transfig for fig2dev utility
     (inputs
-     `(("texlive" ,(texlive-union (list texlive-amsfonts/patched
+     `(("texlive" ,(texlive-updmap.cfg (list texlive-amsfonts
                                         texlive-latex-anysize
                                         texlive-latex-appendix
+                                        texlive-latex-bookmark
                                         texlive-latex-changebar
                                         texlive-latex-colortbl
-                                        texlive-latex-eepic
-                                        texlive-latex-eso-pic
                                         texlive-latex-fancybox
                                         texlive-latex-fancyhdr
                                         texlive-latex-fancyvrb
                                         texlive-latex-float
                                         texlive-latex-footmisc
-                                        texlive-latex-hyperref
+                                        texlive-hyperref
                                         texlive-latex-jknapltx
                                         texlive-latex-listings
                                         texlive-latex-multirow
-                                        texlive-latex-oberdiek
                                         texlive-latex-overpic
                                         texlive-latex-pdfpages
+                                        texlive-latex-refcount
                                         texlive-latex-subfigure
                                         texlive-latex-titlesec
-                                        texlive-latex-url
-                                        texlive-latex-wasysym
+                                        texlive-wasysym
 
-                                        texlive-fonts-ec
                                         texlive-fonts-rsfs
-                                        texlive-fonts-stmaryrd
+                                        texlive-stmaryrd
 
-                                        texlive-generic-ifxetex)))
+                                        texlive-generic-iftex)))
        ("imagemagick" ,imagemagick)     ;for convert
        ("inkscape" ,inkscape)           ;for svg conversion
        ("docbook" ,docbook-xml)
        ("libxslt" ,libxslt)))           ;for xsltproc
     (arguments
-     `(#:python ,python-2               ;'print' syntax
-       ;; Using setuptools causes an invalid "package_base" path in
+     `(;; Using setuptools causes an invalid "package_base" path in
        ;; out/bin/.dblatex-real due to a missing leading '/'.  This is caused
        ;; by dblatex's setup.py stripping the root path when creating the
        ;; script.  (dblatex's setup.py still uses distutils and thus has to
@@ -456,8 +513,7 @@ the in DocBook SGML DTDs.")
                            (string-append (assoc-ref inputs input)
                                           "/bin"))
                          '("libxslt" "texlive"
-                           "imagemagick" "inkscape"))))
-               #t))))))
+                           "imagemagick" "inkscape"))))))))))
     (home-page "http://dblatex.sourceforge.net")
     (synopsis "DocBook to LaTeX Publishing")
     (description
@@ -479,6 +535,91 @@ DB2LaTeX.")
      (inputs (alist-replace "imagemagick" `(,imagemagick/stable)
                             (package-inputs dblatex))))))
 
+(define-public docbook-utils
+  (package
+    (name "docbook-utils")
+    (version "0.6.14")
+    (source (origin
+              (method url-fetch)
+              ;; The original sources are not accessible anymore.
+              (uri (string-append "http://deb.debian.org/debian/pool/main/"
+                                  "d/docbook-utils/docbook-utils_"
+                                  version ".orig.tar.gz"))
+              (sha256
+               (base32
+                "1scj5vgw1xz872pq54a89blcxqqm11p90yzv8a9mqq57x27apyj8"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'patch-build-system
+                    (lambda _
+                      (substitute* (find-files "." "\\.in$")
+                        ;; Do not hard-code SGML_CATALOG_FILES.
+                        ((".*SGML_CATALOG_FILES=/etc/sgml/catalog.*") "")
+                        ;; Use OpenSP and OpenJade.
+                        (("\\bjade\\b")
+                         "openjade")
+                        (("\\bnsgmls\\b")
+                         "onsgmls"))
+                      #t))
+                  (add-after 'unpack 'patch-jw.in
+                    ;; Do not override the SGML_CATALOG_FILES environment
+                    ;; variable.
+                    (lambda _
+                      (substitute* "bin/jw.in"
+                        ((".*SGML_CATALOG_FILES=`find.*")
+                         "")
+                        (("SGML_CATALOG_FILES=`echo.*")
+                         ":\n")
+                        (("SGML_CATALOG_FILES=\"\"")
+                         ":")
+                        (("\\bwhich\\b")
+                         "command -v"))
+                      #t))
+                  (add-after 'unpack 'patch-txt-backend
+                    (lambda _
+                      ;; Locate lynx, links or w3m from the PATH, not from
+                      ;; /usr/bin.
+                      (substitute* "backends/txt"
+                        (("CONVERT=/usr/bin/")
+                         "CONVERT=")
+                        (("\\[ -x /usr/bin/([^ ]+) \\]" dummy command)
+                         (string-append "command -v " command " > /dev/null")))
+                      #t)))))
+    ;; Propagated for convenience.  All these tools are used at run time to
+    ;; provide the complete functionality of the docbook-utils commands.
+    (propagated-inputs
+     (list texlive-jadetex
+           docbook-sgml-3.1
+           docbook-dsssl
+           openjade
+           opensp
+           lynx
+           perl-sgmls))
+    (home-page "https://packages.debian.org/sid/docbook-utils")
+    (synopsis "DocBook converter to other formats")
+    (description "The docbook-utils package is a collection of utilities
+intended to ease the use of SGML and XML.
+@table @command
+@item jw
+Convert a SGML DocBook file to other formats such as Hyper Text Markup
+Language (HTML), Rich Text Format (RTF), PostScript (PS), man, Portable
+Document Format (PDF), TeX, Texinfo or plain text (txt).  It can be used
+more conveniently via the following wrappers:
+@itemx docbook2dvi Convert a SGML DocBook file to the DVI format.
+@itemx docbook2html Convert a SGML DocBook file to an HTML document.
+@itemx docbook2man Convert a SGML DocBook file a man page.
+@itemx docbook2pdf Convert a SGML DocBook file to a PDF document.
+@itemx docbook2ps Convert a SGML DocBook file to a PS document.
+@itemx docbook2rtf Convert a SGML DocBook file to a RTF document.
+@itemx docbook2tex Convert a SGML DocBook file to a TeX document.
+@itemx docbook2texi Convert a SGML DocBook file to a Texinfo document.
+@itemx docbook2txt Convert a SGML DocBook file to a plain text document.
+@item sgmldiff
+Detect the differences in markup between two SGML files.
+@end table")
+    (license license:gpl2+)))
+
 (define-public docbook2x
   (package
     (name "docbook2x")
diff --git a/gnu/packages/docker.scm b/gnu/packages/docker.scm
index 8bac1b89ce..3f52f4f8db 100644
--- a/gnu/packages/docker.scm
+++ b/gnu/packages/docker.scm
@@ -57,25 +57,22 @@
 (define-public python-docker
   (package
     (name "python-docker")
-    (version "3.7.3")
+    (version "5.0.3")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "docker" version))
        (sha256
         (base32
-         "0qmrcvpaz37p85hfddsd4yc8hgqlkzs4cz09q9wmy0pz5pwajqm0"))))
+         "1yr7w8vmdis01myx26pqx7wcyz2cy1mfs421alppq3lpc9ms45nr"))))
     (build-system python-build-system)
     ;; TODO: Tests require a running Docker daemon.
     (arguments '(#:tests? #f))
     (inputs
-     `(("python-requests" ,python-requests-2.20)
-       ("python-six" ,python-six)
-       ("python-urllib3" ,python-urllib3-1.24)))
+     (list python-requests python-six python-urllib3))
     (propagated-inputs
-     `(("python-docker-pycreds" ,python-docker-pycreds)
-       ("python-paramiko" ,python-paramiko)    ;adds SSH support
-       ("python-websocket-client" ,python-websocket-client)))
+     (list python-docker-pycreds python-paramiko ;adds SSH support
+           python-websocket-client))
     (home-page "https://github.com/docker/docker-py/")
     (synopsis "Python client for Docker")
     (description "Docker-Py is a Python client for the Docker container
@@ -95,7 +92,7 @@ management tool.")
          "1kjn64wx23jmr8dcc6g7bwlmrhfmxr77gh6iphqsl39sayfxdab9"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://github.com/d11wtq/dockerpty")
     (synopsis "Python library to use the pseudo-TTY of a Docker container")
     (description "Docker PTY provides the functionality needed to operate the
@@ -106,29 +103,30 @@ client.")
 (define-public docker-compose
   (package
     (name "docker-compose")
-    (version "1.25.4")
+    (version "1.29.2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "docker-compose" version))
        (sha256
         (base32
-         "1ww8ckpj3n5jdg63qvmiqx3gk0fsrnynnnqj17fppymbwjzf5fps"))))
+         "1dq9kfak61xx7chjrzmkvbw9mvj9008k7g8q7mwi4x133p9dk32c"))))
     (build-system python-build-system)
     ;; TODO: Tests require running Docker daemon.
     (arguments '(#:tests? #f))
     (inputs
-     `(("python-cached-property"
-        ,python-cached-property)
-       ("python-docker" ,python-docker)
-       ("python-dockerpty" ,python-dockerpty)
-       ("python-docopt" ,python-docopt)
-       ("python-jsonschema" ,python-jsonschema)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-requests" ,python-requests)
-       ("python-six" ,python-six)
-       ("python-texttable" ,python-texttable)
-       ("python-websocket-client" ,python-websocket-client)))
+     (list python-cached-property
+           python-distro
+           python-docker
+           python-dockerpty
+           python-docopt
+           python-dotenv
+           python-jsonschema
+           python-pyyaml
+           python-requests
+           python-six
+           python-texttable
+           python-websocket-client-0.59))
     (home-page "https://www.docker.com/")
     (synopsis "Multi-container orchestration for Docker")
     (description "Docker Compose is a tool for defining and running
@@ -160,11 +158,9 @@ created and all the services are started as specified in the configuration.")
                (("2.4.1") ,(package-version python-flake8)))
              #t)))))
     (native-inputs
-     `(("python-flake8" ,python-flake8)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)))
+     (list python-flake8 python-pytest python-pytest-cov))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://github.com/shin-/dockerpy-creds")
     (synopsis
      "Python bindings for the Docker credentials store API")
@@ -232,14 +228,9 @@ Python without keeping their credentials in a Docker configuration file.")
                    (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)))
+     (list btrfs-progs libseccomp pigz runc util-linux))
     (native-inputs
-     `(("go" ,go)
-       ("pkg-config" ,pkg-config)))
+     (list go pkg-config))
     (synopsis "Docker container runtime")
     (description "This package provides the container daemon for Docker.
 It includes image transfer and storage, container execution and supervision,
@@ -593,10 +584,8 @@ built-in registry server of Docker.")
        ("xfsprogs" ,xfsprogs)
        ("xz" ,xz)))
     (native-inputs
-     `(("eudev" ,eudev)      ; TODO: Should be propagated by lvm2 (.pc -> .pc)
-       ("go" ,go)
-       ("gotestsum" ,gotestsum)
-       ("pkg-config" ,pkg-config)))
+     (list eudev ; TODO: Should be propagated by lvm2 (.pc -> .pc)
+           go-1.14 gotestsum pkg-config))
     (synopsis "Docker container component library, and daemon")
     (description "This package provides a framework to assemble specialized
 container systems.  It includes components for orchestration, image
@@ -667,9 +656,7 @@ provisioning etc.")
                (install-file "build/docker" out-bin)
                #t))))))
     (native-inputs
-     `(("go" ,go)
-       ("libltdl" ,libltdl)
-       ("pkg-config" ,pkg-config)))
+     (list go libltdl pkg-config))
     (synopsis "Command line interface to Docker")
     (description "This package provides a command line interface to Docker.")
     (home-page "https://www.docker.com/")
@@ -678,7 +665,7 @@ provisioning etc.")
 (define-public cqfd
   (package
     (name "cqfd")
-    (version "5.2.1")
+    (version "5.3.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -687,7 +674,7 @@ provisioning etc.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1zqgznfl7slfrddfpy2pfmablbvyf7296d3b3vcprilqb93cc7li"))))
+                "0gy4kjy6v52acfk6ffbg5sp02k6176khhkms7zlwmywq8591bpww"))))
     (build-system gnu-build-system)
     (arguments
      ;; The test suite requires a docker daemon and connectivity.
diff --git a/gnu/packages/documentation.scm b/gnu/packages/documentation.scm
index 19190f4480..6a0d8e8f2e 100644
--- a/gnu/packages/documentation.scm
+++ b/gnu/packages/documentation.scm
@@ -93,7 +93,7 @@
                 (assoc-ref outputs "out")))
              #t)))))
     (inputs
-     `(("perl" ,perl)))
+     (list perl))
     (synopsis "LaTeX documents to HTML")
     (description "LaTeX2HTML is a utility that converts LaTeX documents to web
 pages in HTML.")
@@ -160,13 +160,9 @@ release/xsl/current")
                                          "/xml/dtd/docbook/docbookx.dtd")))
                        #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)))
+     (list autoconf))
     (inputs
-     `(("python" ,python)
-       ("docbook-xml" ,docbook-xml)
-       ("docbook-xsl" ,docbook-xsl)
-       ("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)))
+     (list python docbook-xml docbook-xsl libxml2 libxslt))
     (home-page "https://asciidoc.org/")
     (synopsis "Text-based document generation system")
     (description
@@ -185,8 +181,8 @@ markup) can be customized and extended by the user.")
 (define-public doxygen
   (package
     (name "doxygen")
-    (version "1.8.17")
-    (home-page "http://www.doxygen.nl/")
+    (version "1.9.1")
+    (home-page "https://www.doxygen.nl/")
     (source (origin
              (method url-fetch)
              (uri (list (string-append home-page "files/doxygen-"
@@ -196,15 +192,11 @@ markup) can be customized and extended by the user.")
                                        ".src.tar.gz")))
              (sha256
               (base32
-               "16dmv0gm1x8rvbm82fmjvi213q8fxqxinm75pcf595flya59ific"))
-             (patches (search-patches "doxygen-test.patch"
-                                      "doxygen-1.8.17-runtests.patch"))))
+               "1lcif1qi20gf04qyjrx7x367669g17vz2ilgi4cmamp1whdsxbk7"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)
-       ("libxml2" ,libxml2)             ;provides xmllint for the tests
-       ("python" ,python)))             ;for creating the documentation
+     (list bison flex libxml2 ;provides xmllint for the tests
+           python))             ;for creating the documentation
     (inputs
      `(("bash" ,bash-minimal)))
     (arguments
@@ -218,6 +210,12 @@ markup) can be customized and extended by the user.")
              '())
        #:test-target "tests"
        #:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'disable-bibtex-test
+                    (lambda _
+                      ;; Disable test that requires bibtex to avoid a
+                      ;; circular dependency.
+                      (for-each delete-file-recursively
+                                '("testing/012" "testing/012_cite.dox"))))
                   (add-before 'configure 'patch-sh
                               (lambda* (#:key inputs #:allow-other-keys)
                                 (substitute* "src/portable.cpp"
@@ -248,8 +246,7 @@ and to some extent D.")
                                        "doc++-segfault-fix.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("flex" ,flex)
-       ("gettext" ,gettext-minimal)))
+     (list flex gettext-minimal))
     (home-page "http://docpp.sourceforge.net/")
     (synopsis "Documentation system for C, C++, IDL, and Java")
     (description
@@ -277,13 +274,11 @@ or Java class files.")
                             (assoc-ref %build-inputs "docbook-xml")
                             "/xml/dtd/docbook/catalog.xml"))))
     (inputs
-     `(("perl" ,perl)
-       ("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)
-       ;; The configure script checks for either version 4.2 or 4.1.2.
-       ("docbook-xml" ,docbook-xml-4.2)))
+     (list perl libxml2 libxslt
+           ;; The configure script checks for either version 4.2 or 4.1.2.
+           docbook-xml-4.2))
     (native-inputs
-     `(("intltool" ,intltool)))
+     (list intltool))
     (home-page "http://scrollkeeper.sourceforge.net/")
     (synopsis "Open Documentation Cataloging Project")
     (description "ScrollKeeper is a cataloging system for documentation on open
@@ -325,8 +320,7 @@ local system.")
                    `("QTWEBENGINEPROCESS_PATH" = (,qt-process-path)))
                  #t))))))
       (native-inputs
-       `(("extra-cmake-modules" ,extra-cmake-modules)
-         ("pkg-config" ,pkg-config)))
+       (list extra-cmake-modules pkg-config))
       (inputs
        `(("libarchive" ,libarchive)
          ("sqlite" ,sqlite)
diff --git a/gnu/packages/dunst.scm b/gnu/packages/dunst.scm
index ce2c04bac6..998470e411 100644
--- a/gnu/packages/dunst.scm
+++ b/gnu/packages/dunst.scm
@@ -4,6 +4,7 @@
 ;;; Copyright © 2019 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
 ;;; Copyright © 2021 Alexandru-Sergiu Marton <brown121407@posteo.ro>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -38,16 +39,16 @@
 (define-public dunst
   (package
     (name "dunst")
-    (version "1.6.1")
+    (version "1.7.3")
     (source (origin
               (method git-fetch)
               (uri (git-reference
-                     (url "https://github.com/dunst-project/dunst")
-                     (commit (string-append "v" version))))
+                    (url "https://github.com/dunst-project/dunst")
+                    (commit (string-append "v" version))))
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0lga1kj2vjbj9g9rl93nivngjmk5fkxdxwal8w96x9whwk9jvdga"))))
+                "1ra0ii805w3rrs0qqbjxzl6i79ksz42lnvbglw18h4igkza21kzj"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ; no check target
@@ -62,22 +63,21 @@
        #:phases (modify-phases %standard-phases
                   (delete 'configure))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("perl" ,perl)                   ; for pod2man
-       ("which" ,which)))
+     (list pkg-config perl ; for pod2man
+           which))
     (inputs
-     `(("dbus" ,dbus)
-       ("gdk-pixbuf" ,gdk-pixbuf+svg)   ; for svg support
-       ("glib" ,glib)
-       ("cairo" ,cairo)
-       ("pango" ,pango)
-       ("libnotify" ,libnotify)         ; for dunstify
-       ("libx11" ,libx11)
-       ("libxscrnsaver" ,libxscrnsaver)
-       ("libxinerama" ,libxinerama)
-       ("libxrandr" ,libxrandr)
-       ("libxdg-basedir" ,libxdg-basedir)
-       ("wayland" ,wayland)))           ; for wayland support
+     (list dbus
+           librsvg ; for svg support
+           glib
+           cairo
+           pango
+           libnotify ; for dunstify
+           libx11
+           libxscrnsaver
+           libxinerama
+           libxrandr
+           libxdg-basedir
+           wayland))           ; for wayland support
     (home-page "https://dunst-project.org/")
     (synopsis "Customizable and lightweight notification daemon")
     (description
diff --git a/gnu/packages/dvtm.scm b/gnu/packages/dvtm.scm
index 8515c5d06b..8c39bb7c03 100644
--- a/gnu/packages/dvtm.scm
+++ b/gnu/packages/dvtm.scm
@@ -41,7 +41,7 @@
       #:phases (modify-phases %standard-phases
                  (delete 'configure)
                  (delete 'check))))  ; no test suite
-   (inputs `(("ncurses" ,ncurses)))
+   (inputs (list ncurses))
    (synopsis "Tiling window management for the console")
    (description "dvtm brings the concept of tiling window management,
 popularized by X11-window managers like dwm, to the console.  As a console
diff --git a/gnu/packages/easyrpg.scm b/gnu/packages/easyrpg.scm
index 2350efdb79..3a5413d94a 100644
--- a/gnu/packages/easyrpg.scm
+++ b/gnu/packages/easyrpg.scm
@@ -31,6 +31,7 @@
   #:use-module (gnu packages image)
   #:use-module (gnu packages mp3)
   #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages pretty-print)
   #:use-module (gnu packages pulseaudio)
   #:use-module (gnu packages sdl)
   #:use-module (gnu packages xdisorg)
@@ -40,7 +41,7 @@
 (define-public liblcf
   (package
     (name "liblcf")
-    (version "0.6.2")
+    (version "0.7.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -48,14 +49,13 @@
                     "/liblcf-" version ".tar.gz"))
               (sha256
                (base32
-                "0n2k4brd264jg9p6918x7dnb2iimpzjh8q3v1fws58450xbgnkqc"))))
+                "10ghpwww5r3iwlaw1mvf6kamn142nyr2zwdabqghy3k4xv837cih"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (propagated-inputs
      ;; Required by 'liblcf.pc'.
-     `(("expat" ,expat)
-       ("icu" ,icu4c)))
+     (list expat icu4c))
     (home-page "https://easyrpg.org/")
     (synopsis "Library to handle RPG Maker 2000 and 2003 game data")
     (description
@@ -76,7 +76,7 @@ It can read and write LCF and XML files.")
 (define-public easyrpg-player
   (package
     (name "easyrpg-player")
-    (version "0.6.2.3")
+    (version "0.7.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -84,30 +84,32 @@ It can read and write LCF and XML files.")
                     "/easyrpg-player-" version ".tar.gz"))
               (sha256
                (base32
-                "1lahbhgyhky0hgd3xwhgg2nm8mfa9p2i1fzxi00561hnk2ya86pm"))))
+                "1hm4hdi4l8c9jw0x3kcm6iwgfv8parlfj13va3r3p90040gs7s8l"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags
        (list (string-append "--with-bash-completion-dir="
                             %output "/etc/bash_completion.d/"))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("freetype" ,freetype)
-       ("harfbuzz" ,harfbuzz)
-       ("liblcf" ,liblcf)
-       ("libpng" ,libpng)
-       ("libsndfile" ,libsndfile)
-       ("libvorbis" ,libvorbis)
-       ("libxmp" ,libxmp)
-       ("mpg123" ,mpg123)
-       ("opusfile" ,opusfile)
-       ("pixman" ,pixman)
-       ("sdl2-mixer" ,sdl2-mixer)
-       ("sdl2" ,sdl2)
-       ("speexdsp" ,speexdsp)
-       ("wildmidi" ,wildmidi)
-       ("zlib" ,zlib)))
+     (list fluidsynth
+           fmt
+           freetype
+           harfbuzz
+           liblcf
+           libpng
+           libsndfile
+           libvorbis
+           libxmp
+           mpg123
+           opusfile
+           pixman
+           sdl2-mixer
+           sdl2
+           speexdsp
+           wildmidi
+           zlib))
     (home-page "https://easyrpg.org/")
     (synopsis "Play RPG Maker 2000 and 2003 games")
     (description
diff --git a/gnu/packages/ebook.scm b/gnu/packages/ebook.scm
index abb04b6d93..207bbfcdaf 100644
--- a/gnu/packages/ebook.scm
+++ b/gnu/packages/ebook.scm
@@ -9,6 +9,7 @@
 ;;; Copyright © 2020, 2021 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2020 Zheng Junjie <873216071@qq.com>
 ;;; Copyright © 2021 la snesne <lasnesne@lagunposprasihopre.org>
+;;; Copyright © 2021 Petr Hodina <phodina@protonmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -35,6 +36,7 @@
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system meson)
   #:use-module (guix build-system python)
+  #:use-module (guix build-system qt)
   #:use-module (gnu packages)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages compression)
@@ -108,7 +110,7 @@
          "0wpn9ijlsmrpyiwg3drmgz4dms1i1i347adgqw37bkrh3vn6yq16"))))
     (build-system python-build-system)
     (inputs
-     `(("chmlib" ,chmlib)))
+     (list chmlib))
     (home-page "https://github.com/dottedmag/pychm")
     (synopsis "Handle CHM files")
     (description "This package provides a Python module for interacting
@@ -143,16 +145,17 @@ with Microsoft Compiled HTML (CHM) files")
              (delete-file "resources/calibre-portable.bat")
              (delete-file "resources/calibre-portable.sh")
              #t))
-        (patches (search-patches "calibre-no-updates-dialog.patch"
+        (patches (search-patches "calibre-fix-zeroconf.patch"
+                                 "calibre-no-updates-dialog.patch"
                                  "calibre-remove-test-sqlite.patch" ; TODO: fix test.
                                  "calibre-remove-test-unrar.patch"))))
     (build-system python-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qtbase" ,qtbase-5) ; for qmake
-       ("python-flake8" ,python-flake8)
-       ("python-pyqt-builder" ,python-pyqt-builder)
-       ("xdg-utils" ,xdg-utils)))
+     (list pkg-config
+           qtbase-5 ; for qmake
+           python-flake8
+           python-pyqt-builder
+           xdg-utils))
     (inputs
      `(("fontconfig" ,fontconfig)
        ("font-liberation" ,font-liberation)
@@ -327,7 +330,7 @@ sip-include-dirs = [\"" pyqt "/share/sip" "\"]")))
                   ;; rather than create ..calibre-real-real-s.  For more
                   ;; information see: https://issues.guix.gnu.org/43249.
                   (find-files "." (lambda (file stat)
-                                    (not (wrapper? file)))))))
+                                    (not (wrapped-program? file)))))))
              #t)))))
     (home-page "https://calibre-ebook.com/")
     (synopsis "E-book library management software")
@@ -366,16 +369,51 @@ e-books for convenient reading.")
      `(#:tests? #f)) ; No 'test' target
     (build-system cmake-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libzip" ,libzip)
-       ("libxml2" ,libxml2)))
+     (list libzip libxml2))
     (home-page "http://ebook-tools.sourceforge.net")
     (synopsis "Tools and library for dealing with various ebook file formats")
     (description "This package provides command-line tools and a library for
 accessing and converting various ebook file formats.")
     (license license:expat)))
 
+(define-public inkbox
+  (package
+    (name "inkbox")
+    (version "1.7")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url "https://alpinekobox.ddns.net/InkBox/inkbox/")
+         (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "126cqn0ixcn608lv2hd9f7zmzj4g448bnpxc7wv9cvg83qqajh5n"))))
+    (build-system qt-build-system)
+    (arguments
+     '(#:tests? #f                      ; no test suite
+       #:make-flags
+       (list (string-append "PREFIX="
+                            (assoc-ref %outputs "out")))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'prefix-opt
+           (lambda* (#:key outputs #:allow-other-keys)
+             (substitute* "inkbox.pro"
+               (("/opt/\\$\\$\\{TARGET\\}") (string-append (assoc-ref outputs "out"))))))
+         (replace 'configure
+           (lambda* (#:key make-flags #:allow-other-keys)
+             (apply invoke (cons "qmake" make-flags)))))))
+    (native-inputs
+     (list qtbase-5))
+    (home-page "https://alpinekobox.ddns.net/InkBox/inkbox/")
+    (synopsis "EBook reader")
+    (description "This package provides InkBox eBook reader.")
+    (license license:gpl3)))
+
 (define-public liblinebreak
   (package
     (name "liblinebreak")
@@ -514,12 +552,12 @@ following formats:
                     (libmagic-path     (string-append
                                         (assoc-ref %build-inputs "file")
                                         "/lib"))
-                    (python-path     (getenv "PYTHONPATH")))
+                    (python-path     (getenv "GUIX_PYTHONPATH")))
                (wrap-program (string-append out "/bin/cozy")
                  `("LD_LIBRARY_PATH" ":" prefix (,libmagic-path))
                  `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))
                  `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path))
-                 `("PYTHONPATH" ":" prefix (,python-path ,pylib)))))))))
+                 `("GUIX_PYTHONPATH" ":" prefix (,python-path ,pylib)))))))))
     (native-inputs
      `(("desktop-file-utils" ,desktop-file-utils)
        ("gettext" ,gettext-minimal)
@@ -529,26 +567,26 @@ following formats:
        ("pkg-config" ,pkg-config)
        ("python" ,python-wrapper)))
     (inputs
-     `(("file" ,file)
-       ("granite" ,granite)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gst-libav" ,gst-libav)
-       ("gst-plugins-bad" ,gst-plugins-bad)
-       ("gst-plugins-good" ,gst-plugins-good)
-       ("gst-plugins-ugly" ,gst-plugins-ugly)
-       ("gtk+" ,gtk+)
-       ("libdazzle" ,libdazzle)
-       ("libgee" ,libgee)
-       ("libhandy" ,libhandy)
-       ("python-distro" ,python-distro)
-       ("python-gst" ,python-gst)
-       ("python-mutagen" ,python-mutagen)
-       ("python-packaging" ,python-packaging)
-       ("python-peewee" ,python-peewee)
-       ("python-pycairo" ,python-pycairo)
-       ("python-pygobject" ,python-pygobject)
-       ("python-pytz" ,python-pytz)
-       ("python-requests" ,python-requests)))
+     (list file
+           granite
+           gsettings-desktop-schemas
+           gst-libav
+           gst-plugins-bad
+           gst-plugins-good
+           gst-plugins-ugly
+           gtk+
+           libdazzle
+           libgee
+           libhandy
+           python-distro
+           python-gst
+           python-mutagen
+           python-packaging
+           python-peewee
+           python-pycairo
+           python-pygobject
+           python-pytz
+           python-requests))
     (home-page "https://cozy.geigi.de/")
     (synopsis "Modern audiobook player using GTK+")
     (description
@@ -576,7 +614,7 @@ Some of the current features:
 (define-public xchm
   (package
     (name "xchm")
-    (version "1.32")
+    (version "1.33")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/rzvncj/xCHM"
@@ -584,13 +622,12 @@ Some of the current features:
                                   version "/xchm-" version ".tar.gz"))
               (sha256
                (base32
-                "0b12ym7cn65wy268kbksyhakicwb053c8xfn76q2dawrvbras9dj"))))
+                "0an09shap2wj9gzj5fsw5sc2i6paq3kc3mc52fnwg2bb2dan5qxk"))))
     (build-system gnu-build-system)
     (inputs
-     `(("wxwidgets" ,wxwidgets)
-       ("chmlib" ,chmlib)))
+     (list wxwidgets chmlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/rzvncj/xCHM")
     (synopsis "CHM file viewer")
     (description "xCHM is a graphical CHM file viewer.  It is a frontend to
@@ -612,12 +649,9 @@ the CHM library CHMLIB.")
                 "0yps72cm609xn2k7alflkdhp9kgr1w7zzyxjygz0n1kqrdcplihh"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (inputs
-     `(("zlib" ,zlib)
-       ("libxml2" ,libxml2)))
+     (list zlib libxml2))
     (home-page "https://github.com/bfabiszewski/libmobi/")
     (synopsis "C library for handling MOBI formats")
     (description "Libmobi is a C library for handling MOBI ebook
diff --git a/gnu/packages/ed.scm b/gnu/packages/ed.scm
index da4c3ddf04..a42ba40102 100644
--- a/gnu/packages/ed.scm
+++ b/gnu/packages/ed.scm
@@ -28,16 +28,16 @@
 (define-public ed
   (package
     (name "ed")
-    (version "1.16")
+    (version "1.17")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnu/ed/ed-"
                                  version ".tar.lz"))
              (sha256
               (base32
-               "0b4b1lwizvng9bvpcjnmpj2i80xz9xw2w8nfff27b2h4mca7mh6g"))))
+               "0m2yrkfjjraakxr98nsiakqrn351h99n706x9asgmdi57j43kpki"))))
     (build-system gnu-build-system)
-    (native-inputs `(("lzip" ,lzip)))
+    (native-inputs (list lzip))
     (arguments
      '(#:configure-flags '("CC=gcc")
        #:phases
diff --git a/gnu/packages/education.scm b/gnu/packages/education.scm
index 2039347ddc..1e19d83fc1 100644
--- a/gnu/packages/education.scm
+++ b/gnu/packages/education.scm
@@ -2,9 +2,9 @@
 ;;; Copyright © 2016 Danny Milosavljevic <dannym@scratchpost.org>
 ;;; Copyright © 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com>
-;;; Copyright © 2017, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2017, 2018, 2019, 2020, 2021, 2022 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2018, 2019, 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2018-2022 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2020 Robert Smith <robertsmith@posteo.net>
 ;;; Copyright © 2020 Guy Fleury Iteriteka <gfleury@disroot.org>
 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
@@ -96,15 +96,16 @@
        ;; of Gstreamer.
        (list "--enable-sdlmixer"
              "LDFLAGS=-lgmodule-2.0")
+       #:make-flags
+       (list "CFLAGS=-fcommon")
        #:phases
        (modify-phases %standard-phases
          (add-after 'set-paths 'set-sdl-paths
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "CPATH"
-                     (string-append (assoc-ref inputs "sdl-mixer")
-                                    "/include/SDL:"
-                                    (or (getenv "CPATH") "")))
-             #t)))))
+                     (string-append
+                      (search-input-directory inputs "include/SDL")
+                      ":" (or (getenv "CPATH") ""))))))))
     (inputs
      `(("gtk+" ,gtk+-2)
        ("librsvg" ,librsvg)
@@ -141,15 +142,15 @@ of categories with some of the activities available in that category.
 (define-public gcompris-qt
   (package
     (name "gcompris-qt")
-    (version "1.1")
+    (version "2.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
-             "https://gcompris.net/download/qt/src/gcompris-qt-"
+             "https://download.kde.org/stable/gcompris/qt/src/gcompris-qt-"
              version ".tar.xz"))
        (sha256
-        (base32 "1bpjwrv83rhikbycpyfpf6dbqr0xfq6amgdpqfgfph6nzr3zka7h"))))
+        (base32 "02j3xv8sa3s5g50zs15wy2giabmhg1q0b8ar73q3fpwvxkz9hcwn"))))
     (build-system qt-build-system)
     (arguments
      `(#:phases
@@ -157,32 +158,30 @@ of categories with some of the activities available in that category.
          (add-before 'check 'start-xorg-server
            (lambda* (#:key inputs #:allow-other-keys)
              ;; The test suite requires a running X server.
-             (system (string-append (assoc-ref inputs "xorg-server")
-                                    "/bin/Xvfb :1 &"))
+             (system "Xvfb :1 &")
              (setenv "DISPLAY" ":1")
              ;; The test suite wants to write to /homeless-shelter
-             (setenv "HOME" (getcwd))
-             #t)))
+             (setenv "HOME" (getcwd)))))
        #:configure-flags (list "-DQML_BOX2D_MODULE=disabled"
                                "-DBUILD_TESTING=TRUE")))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("gettext" ,gettext-minimal)
-       ("kdoctools" ,kdoctools)
-       ("perl" ,perl)
-       ("qttools" ,qttools)
-       ("xorg-server" ,xorg-server-for-tests)))
+     (list extra-cmake-modules
+           gettext-minimal
+           kdoctools
+           perl
+           qttools
+           xorg-server-for-tests))
     (inputs
-     `(("openssl" ,openssl)
-       ("python" ,python-wrapper)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtgraphicaleffects" ,qtgraphicaleffects)
-       ("qtmultimedia" ,qtmultimedia)
-       ("qtquickcontrols" ,qtquickcontrols)
-       ("qtsensors" ,qtsensors)
-       ("qtsvg" ,qtsvg)
-       ("qtxmlpatterns" ,qtxmlpatterns)))
+     (list openssl
+           python-wrapper
+           qtbase-5
+           qtdeclarative
+           qtgraphicaleffects
+           qtmultimedia
+           qtquickcontrols
+           qtsensors
+           qtsvg
+           qtxmlpatterns))
     (home-page "https://gcompris.net/index-en.html")
     (synopsis "Educational games for small children")
     (description
@@ -198,9 +197,9 @@ Currently available boards include:
 @item recognize letters after hearing their names
 @item reading practice
 @item small games (memory games, jigsaw puzzles, ...)
-@end enumerate\n")
+@end enumerate")
     (license (list license:silofl1.1    ; bundled fonts
-                   license:gpl3+))))
+                   license:agpl3+))))
 
 (define-public gotypist
   (let ((revision "0")
@@ -243,8 +242,7 @@ Currently available boards include:
                  (with-directory-excursion bin
                    (rename-file "v1" "gotypist"))))))))
       (native-inputs
-       `(("go-github-com-gizak-termui" ,go-github-com-gizak-termui)
-         ("go-github-com-stretchr-testify" ,go-github-com-stretchr-testify)))
+       (list go-github-com-gizak-termui go-github-com-stretchr-testify))
       (home-page "https://github.com/KappaDistributive/gotypist")
       (synopsis "Simple typing trainer for text terminals")
       (description
@@ -299,8 +297,7 @@ frequently used words in American English.")
                ;; Recreate Makefile
                (invoke "qmake")))))))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtmultimedia" ,qtmultimedia)))
+     (list qtbase-5 qtmultimedia))
     (home-page "https://www.tipp10.com/")
     (synopsis "Touch typing tutor")
     (description "Tipp10 is a touch typing tutor.  The ingenious thing about
@@ -316,7 +313,7 @@ easy.")
 (define-public snap
   (package
     (name "snap")
-    (version "6.9.0")
+    (version "7.0.5")
     (source
      (origin
        (method git-fetch)
@@ -325,7 +322,7 @@ easy.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1wppz57lrrribrfnaiv6jrrf703w7i6ja0dnz8yx8naxhbsglwyf"))))
+        (base32 "13j52r810yijvkj85c356c342drc3947j28z3va7kz75mi26whsf"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -339,26 +336,23 @@ easy.")
            ;; Replace the sole minified file in the package.
            (with-directory-excursion (string-append share "/src")
              (delete-file "FileSaver.min.js")
-             (symlink (string-append (assoc-ref %build-inputs "js-filesaver")
-                                     "/share/javascript/FileSaver.min.js")
+             (symlink (search-input-file %build-inputs
+                                         "/share/javascript/FileSaver.min.js")
                       "FileSaver.min.js"))
            ;; Create a "snap" executable.
            (let* ((bin (string-append out "/bin"))
                   (script (string-append bin "/snap"))
                   (snap (string-append share "/snap.html"))
-                  (bash (string-append (assoc-ref %build-inputs "bash")
-                                       "/bin/sh"))
-                  (xdg-open (string-append (assoc-ref %build-inputs "xdg-utils")
-                                           "/bin/xdg-open")))
+                  (bash (search-input-file %build-inputs "/bin/sh"))
+                  (xdg-open (search-input-file %build-inputs
+                                               "/bin/xdg-open")))
              (mkdir-p bin)
              (call-with-output-file script
                (lambda (port)
                  (format port "#!~a\n~a '~a'" bash xdg-open snap)))
              (chmod script #o555))))))
     (inputs
-     `(("bash" ,bash-minimal)
-       ("js-filesaver" ,js-filesaver)
-       ("xdg-utils" ,xdg-utils)))
+     (list bash-minimal js-filesaver xdg-utils))
     (home-page "https://snap.berkeley.edu")
     (synopsis "Visual, blocks based programming language")
     (description "Snap! (formerly BYOB) is a visual, drag-and-drop
@@ -380,8 +374,12 @@ to open the application in a web browser, for offline usage.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "http://www.bipede.fr/downloads/logiciels/"
-                           "ToutEnClic-" version "-src.zip"))
+       (uri (list
+             ;; XXX: Upstream does not exist anymore.
+             (string-append "http://www.bipede.fr/downloads/logiciels/"
+                            "ToutEnClic-" version "-src.zip")
+             (string-append "https://archive.org/download/tout-en-clic-" version
+                            "-src/ToutEnClic-" version "-src.zip")))
        (sha256
         (base32 "0xg24p925rl5bfqsq3jb2lrkidb0f3kbmay5iyxxmjsn3ra0blyh"))))
     (build-system python-build-system)
@@ -409,8 +407,7 @@ to open the application in a web browser, for offline usage.")
                (mkdir-p bin)
                (with-directory-excursion bin
                  (symlink (string-append share "/" executable ".py")
-                          executable)))
-             #t))
+                          executable)))))
          (add-after 'install 'create-desktop-file
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -428,12 +425,11 @@ to open the application in a web browser, for offline usage.")
                             Terminal=false~@
                             Icon=toutenclic~@
                             Type=Application~%"
-                           out)))
-               #t))))))
+                           out)))))))))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (inputs
-     `(("python-pyqt" ,python-pyqt)))
+     (list python-pyqt))
     (synopsis "School tools for physically disabled children")
     (description "ToutEnClic is intended to facilitate the schooling
 of physically disabled children in ordinary schools.  It is both
@@ -498,8 +494,7 @@ specialized device.")
                #t)))
          (add-after 'install 'create-executable
            (lambda* (#:key outputs inputs #:allow-other-keys)
-             (let* ((python (string-append (assoc-ref inputs "python")
-                                           "/bin/python"))
+             (let* ((python (search-input-file inputs "/bin/python"))
                     (out (assoc-ref outputs "out"))
                     (bin (string-append out "/bin"))
                     (executable (string-append bin "/childsplay")))
@@ -567,8 +562,7 @@ letters of the alphabet, spelling, eye-hand coordination, etc.")
            #t))))
     (build-system python-build-system)
     (inputs
-     `(("python2-pygame" ,python2-pygame)
-       ("python2-pygtk" ,python2-pygtk)))
+     (list python2-pygame python2-pygtk))
     (arguments
      `(#:tests? #f                      ;no test
        #:python ,python-2
@@ -592,10 +586,9 @@ letters of the alphabet, spelling, eye-hand coordination, etc.")
                ;; Install the launcher.
                (let* ((bin (string-append out "/bin"))
                       (script (string-append bin "/omnitux"))
-                      (bash (string-append (assoc-ref %build-inputs "bash")
-                                           "/bin/bash"))
-                      (python (string-append (assoc-ref %build-inputs "python")
-                                             "/bin/python2")))
+                      (bash (search-input-file %build-inputs "/bin/bash"))
+                      (python (search-input-file %build-inputs
+                                                 "/bin/python2")))
                  (mkdir-p bin)
                  (with-output-to-file script
                    (lambda ()
@@ -653,14 +646,16 @@ Portuguese, Spanish and Italian.")
 (define-public fet
   (package
     (name "fet")
-    (version "6.0.4")
+    (version "6.2.2")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://www.lalescu.ro/liviu/fet/download/"
-                           "fet-" version ".tar.bz2"))
+       (uri (let ((directory "https://www.lalescu.ro/liviu/fet/download/")
+                  (base (string-append "fet-" version ".tar.bz2")))
+              (list (string-append directory base)
+                    (string-append directory "old/" base))))
        (sha256
-        (base32 "16yajwbvm2ain1p2h81qfm8pbrdp70zljck67j9yijwyr6xqdj2a"))))
+        (base32 "1x8m543n88iqprh4zccx1zcfm20balmh0h6syrbv03cszmkvfw07"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -671,12 +666,11 @@ Portuguese, Spanish and Italian.")
                                 "src/src.pro"
                                 "src/src-cl.pro"
                                 "src/interface/fet.cpp")
-               (("/usr") (assoc-ref outputs "out")))
-             #t))
+               (("/usr") (assoc-ref outputs "out")))))
          (replace 'configure
            (lambda _ (invoke "qmake" "fet.pro"))))))
     (inputs
-     `(("qtbase" ,qtbase)))
+     (list qtbase))
     (home-page "https://www.lalescu.ro/liviu/fet/")
     (synopsis "Timetabling software")
     (description
@@ -702,14 +696,9 @@ hours.")
          (base32 "0z6c3lqikk50mkz3ipm93l48qj7b98lxyip8y6ndg9y9k0z0n878"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("cairo" ,cairo)
-       ("curl" ,curl)
-       ("gtk+" ,gtk+)
-       ("gtkdatabox" ,gtkdatabox)
-       ("pango" ,pango)))
+     (list cairo curl gtk+ gtkdatabox pango))
     (home-page "https://klavaro.sourceforge.io/en/index.html")
     (synopsis "Touch typing tutor")
     (description
@@ -730,32 +719,30 @@ language and very flexible regarding to new or unknown keyboard layouts.")
          (base32 "10lm2p8w26c9n6lhvw3301myfss0dq7hl7rawzb3hsy1lqvmvdib"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules kdoctools pkg-config))
     (inputs
-     `(("kcmutils" ,kcmutils)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kdeclarative" ,kdeclarative)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kitemviews" ,kitemviews)
-       ("kqtquickcharts" ,kqtquickcharts)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("libxcb" ,libxcb)
-       ("libxkbfile" ,libxkbfile)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtgraphicaleffects" ,qtgraphicaleffects)
-       ("qtquickcontrols2" ,qtquickcontrols2)
-       ("qtx11extras" ,qtx11extras)
-       ("qtxmlpatterns" ,qtxmlpatterns)))
+     (list kcmutils
+           kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kdeclarative
+           ki18n
+           kiconthemes
+           kitemviews
+           kqtquickcharts
+           ktextwidgets
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           libxcb
+           libxkbfile
+           qtbase-5
+           qtdeclarative
+           qtgraphicaleffects
+           qtquickcontrols2
+           qtx11extras
+           qtxmlpatterns))
     (home-page "https://edu.kde.org/ktouch/")
     (synopsis "Touch typing tutor")
     (description
@@ -785,11 +772,10 @@ adjust the level of difficulty.")
           (base32 "0dz63m9p4ggzw0yb309qmgnl664qb5q268vaa3i9v0i8qsl66d78"))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("gettext" ,gettext-minimal)   ; for msgfmt
-         ("pkg-config" ,pkg-config)))
+       (list gettext-minimal ; for msgfmt
+             pkg-config))
       (inputs
-       `(("libxml2" ,libxml2)
-         ("gtk+" ,gtk+)))
+       (list libxml2 gtk+))
       (home-page "https://kanatest.sourceforge.io/")
       (synopsis "Hiragana and Katakana simple flashcard tool")
       (description "Kanatest is a Japanese kana (Hiragana and Katakana) simple
@@ -853,8 +839,8 @@ stored and user can review his performance in any time.")
                                     (string-prefix? "python-" label)))
                                  inputs)))
                    (qtwebengineprocess
-                    (string-append (assoc-ref inputs "qtwebengine")
-                                   "/lib/qt5/libexec/QtWebEngineProcess")))
+                    (search-input-file inputs
+                                       "lib/qt5/libexec/QtWebEngineProcess")))
                ;; The program fails to find the QtWebEngineProcess program, so
                ;; we set QTWEBENGINEPROCESS_PATH to help it.  PYTHONPATH is
                ;; wrapped to avoid declaring Python libraries as propagated
@@ -866,11 +852,11 @@ stored and user can review his performance in any time.")
                              `("PATH" prefix (,(string-append
                                                 (assoc-ref inputs "mpv")
                                                 "/bin")))
-                             `("PYTHONPATH" = ,site-packages)))
+                             `("GUIX_PYTHONPATH" = ,site-packages)))
                          (find-files bin ".")))
              #t)))))
     (native-inputs
-     `(("xdg-utils" ,xdg-utils)))
+     (list xdg-utils))
     (inputs
      `(("lame" ,lame)
        ("mpv" ,mpv)
@@ -924,8 +910,13 @@ endless.  For example:
        (file-name (git-file-name name version))
        (sha256
         (base32 "13q02xpmps9qg8zrzzy2gzv4a6afgi28lxk4z242j780v0gphchp"))
-       (patches
-        (search-patches "t4k-common-libpng16.patch"))))
+       (patches (search-patches "t4k-common-libpng16.patch"))
+       (modules '((guix build utils)))
+       (snippet
+        `(begin
+           (substitute* "src/t4k_common.h"
+             (("char wrapped_lines") "extern char wrapped_lines"))
+           #t))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f                      ;FIXME: cannot find how to run tests
@@ -933,9 +924,10 @@ endless.  For example:
        (modify-phases %standard-phases
          (add-after 'set-paths 'set-sdl-paths
            (lambda* (#:key inputs #:allow-other-keys)
-             (setenv "CPATH" (string-append (assoc-ref inputs "sdl")
-                                            "/include/SDL:"
-                                            (or (getenv "CPATH") "")))))
+             (setenv "CPATH"
+                     (string-append
+                      (search-input-directory inputs "/include/SDL")
+                      ":" (or (getenv "CPATH") "")))))
          (add-after 'unpack 'fix-andika-font-path
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "src/t4k_sdl.c"
@@ -944,7 +936,7 @@ endless.  For example:
                                "/share/fonts/truetype")))
              #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("font-andika" ,font-sil-andika)
        ("libpng" ,libpng)
@@ -974,6 +966,9 @@ TuxMath and TuxType.")
        ;; Unbundle fonts.
        (snippet
         `(begin
+           ;; Remove duplicate definition.
+           (substitute* "src/menu_lan.c"
+             (("lan_player_type.*MAX_CLIENTS\\];") ""))
            (for-each delete-file (find-files "data/fonts" "\\.ttf$"))
            #t))))
     (build-system gnu-build-system)
@@ -984,10 +979,10 @@ TuxMath and TuxType.")
          (add-after 'set-paths 'set-sdl-paths
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "CPATH"
-                     (string-append (assoc-ref inputs "sdl")
-                                    "/include/SDL:"
-                                    (or (getenv "CPATH") "")))
-             #t))
+                     (string-append
+                      (search-input-directory inputs "/include/SDL")
+                      ":"
+                      (or (getenv "CPATH") "")))))
          (add-after 'install 'install-desktop-file
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -999,7 +994,7 @@ TuxMath and TuxType.")
                                      "tuxmath\\.(png|ico|svg)$"))
                #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("librsvg" ,librsvg)
        ("libxml2" ,libxml2)
@@ -1033,9 +1028,9 @@ floating through space.")
          "0psbdzirazfnn02hp3gsx7xxss9f1brv4ywp6a15ihvggjki1rxb"))))
     (build-system gnu-build-system)
     (native-inputs ; Required for building docs
-     `(("perl" ,perl)))
+     (list perl))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (synopsis "C library for accessing Japanese CD-ROM books")
     (description "The EB library is a library for accessing CD-ROM
 books, which are a common way to distribute electronic dictionaries in
@@ -1062,16 +1057,16 @@ formats.")
     (arguments
      '(#:tests? #f)) ; no test target
     (native-inputs
-     `(("qttools", qttools)))
+     (list qttools))
     (inputs
-     `(("libeb" ,libeb)
-       ("qtbase" ,qtbase-5)
-       ("qtmultimedia" ,qtmultimedia)
-       ("qtquickcontrols2" ,qtquickcontrols2)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtwebchannel" ,qtwebchannel)
-       ("qtwebengine" ,qtwebengine)
-       ("zlib" ,zlib)))
+     (list libeb
+           qtbase-5
+           qtmultimedia
+           qtquickcontrols2
+           qtdeclarative
+           qtwebchannel
+           qtwebengine
+           zlib))
     (synopsis "EPWING dictionary reader")
     (description "qolibri is a dictionary viewer for the EPWING dictionary
 format.  Most monolingual Japanese dictionaries can only be found in the
@@ -1095,16 +1090,14 @@ EPWING format.")
     (arguments
      `(#:configure-flags (list "--enable-gui=yes" "-with-readline=yes")))
     (native-inputs
-     `(("flex" ,flex)
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list flex intltool pkg-config))
     (inputs
-     `(("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("libglade" ,libglade)
-       ("ncurses" ,ncurses)
-       ("pango" ,pango)
-       ("readline" ,readline)))
+     (list glib
+           gtk+
+           libglade
+           ncurses
+           pango
+           readline))
     (home-page "https://www.gnu.org/software/mdk/manual/")
     (synopsis "Virtual development environment for Knuth's MIX")
     (description
diff --git a/gnu/packages/efi.scm b/gnu/packages/efi.scm
index 8bbd873435..4625538d26 100644
--- a/gnu/packages/efi.scm
+++ b/gnu/packages/efi.scm
@@ -143,12 +143,12 @@ information.")
              (setenv "CC" "gcc")
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("bash" ,bash)
-       ("help2man" ,help2man)
-       ("pkg-config" ,pkg-config)
-       ("util-linux" ,util-linux))) ; getopt
+     (list autoconf
+           automake
+           bash
+           help2man
+           pkg-config
+           util-linux)) ; getopt
     (inputs
      `(("gnu-efi" ,gnu-efi)
        ("libuuid" ,util-linux "lib")
@@ -202,13 +202,9 @@ information.")
              #t))
          (delete 'configure))))
     (native-inputs
-     `(("help2man" ,help2man)
-       ("perl" ,perl)
-       ("perl-file-slurp" ,perl-file-slurp)
-       ("sbsigntools" ,sbsigntools)))
+     (list help2man perl perl-file-slurp sbsigntools))
     (inputs
-     `(("gnu-efi" ,gnu-efi)
-       ("openssl" ,openssl)))
+     (list gnu-efi openssl))
     (synopsis "EFI tools (key management, variable management)")
     (description "This package provides EFI tools for EFI key management
 and EFI variable management.")
@@ -257,7 +253,7 @@ and EFI variable management.")
                                           "/libexec"))
              #t)))))
     (inputs
-     `(("gnu-efi" ,gnu-efi)))
+     (list gnu-efi))
     (synopsis "Minimal Linux loader for UEFI")
     (description "This package provides a minimal Linux loader as an UEFI
 program.")
diff --git a/gnu/packages/electronics.scm b/gnu/packages/electronics.scm
index 0e985c9750..54f246faa6 100644
--- a/gnu/packages/electronics.scm
+++ b/gnu/packages/electronics.scm
@@ -24,11 +24,13 @@
   #:use-module (guix utils)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix git-download)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system cmake)
   #:use-module (gnu packages)
   #:use-module (gnu packages algebra)
+  #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages boost)
@@ -78,11 +80,18 @@ to take care of the OS-specific details when writing software that uses serial p
                     version ".tar.gz"))
               (sha256
                (base32
-                "1h1zi1kpsgf6j2z8j8hjpv1q7n49i3fhqjn8i178rka3cym18265"))))
+                "1h1zi1kpsgf6j2z8j8hjpv1q7n49i3fhqjn8i178rka3cym18265"))
+              (patches
+               (search-patches "libsigrokdecode-python3.9-fix.patch"))))
     (outputs '("out" "doc"))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
+         (replace 'bootstrap
+           (lambda _
+             (invoke "autoconf")
+             (invoke "aclocal")
+             (invoke "automake" "-ac")))
          (add-after 'build 'build-doc
            (lambda _
              (invoke "doxygen")
@@ -94,14 +103,10 @@ to take care of the OS-specific details when writing software that uses serial p
                                               "/share/doc/libsigrokdecode"))
              #t)))))
     (native-inputs
-     `(("check" ,check-0.14)
-       ("doxygen" ,doxygen)
-       ("graphviz" ,graphviz)
-       ("pkg-config" ,pkg-config)))
+     (list check-0.14 doxygen graphviz pkg-config automake autoconf))
     ;; libsigrokdecode.pc lists "python" in Requires.private, and "glib" in Requires.
     (propagated-inputs
-     `(("glib" ,glib)
-       ("python" ,python)))
+     (list glib python))
     (build-system gnu-build-system)
     (home-page "https://www.sigrok.org/wiki/Libsigrokdecode")
     (synopsis "Library providing (streaming) protocol decoding functionality")
@@ -141,82 +146,77 @@ as simple logic analyzer and/or oscilloscope hardware.")
     (license license:gpl2+)))
 
 (define-public libsigrok
-  (package
-    (name "libsigrok")
-    (version "0.5.2")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "http://sigrok.org/download/source/libsigrok/libsigrok-"
-                    version ".tar.gz"))
-              (sha256
-               (base32
-                "0g6fl684bpqm5p2z4j12c62m45j1dircznjina63w392ns81yd2d"))))
-    (outputs '("out" "doc"))
-    (arguments
-     `(#:tests? #f                      ; tests need USB access
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'change-udev-group
-           (lambda _
-             (substitute* (find-files "contrib" "\\.rules$")
-               (("plugdev") "dialout"))
-             #t))
-         (add-after 'build 'build-doc
-           (lambda _
-             (invoke "doxygen")))
-         (add-after 'install 'install-doc
-           (lambda* (#:key outputs #:allow-other-keys)
-             (copy-recursively "doxy/html-api"
-                               (string-append (assoc-ref outputs "doc")
-                                              "/share/doc/libsigrok"))
-             #t))
-         (add-after 'install-doc 'install-udev-rules
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out   (assoc-ref outputs "out"))
-                    (rules (string-append out "/lib/udev/rules.d/")))
-               (for-each (lambda (file)
-                           (install-file file rules))
-                         (find-files "contrib" "\\.rules$"))
-               #t)))
-         (add-after 'install-udev-rules 'install-fw
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let* ((fx2lafw (assoc-ref inputs "sigrok-firmware-fx2lafw"))
-                    (out (assoc-ref outputs "out"))
-                    (dir-suffix "/share/sigrok-firmware/")
-                    (input-dir (string-append fx2lafw dir-suffix))
-                    (output-dir (string-append out dir-suffix)))
-               (for-each
-                (lambda (file)
-                  (install-file file output-dir))
-                (find-files input-dir ".")))
-             #t)))))
-    (native-inputs
-     `(("doxygen" ,doxygen)
-       ("graphviz" ,graphviz)
-       ("sigrok-firmware-fx2lafw" ,sigrok-firmware-fx2lafw)
-       ("pkg-config" ,pkg-config)))
-    (inputs
-     `(("python" ,python)
-       ("zlib" ,zlib)))
-    ;; libsigrokcxx.pc lists "glibmm" in Requires
-    ;; libsigrok.pc lists "libserialport", "libusb", "libftdi" and "libzip" in
-    ;; Requires.private and "glib" in Requires
-    (propagated-inputs
-     `(("glib" ,glib)
-       ("glibmm" ,glibmm)
-       ("libserialport" ,libserialport)
-       ("libusb" ,libusb)
-       ("libftdi" ,libftdi)
-       ("libzip" ,libzip)))
-    (build-system gnu-build-system)
-    (home-page "https://www.sigrok.org/wiki/Libsigrok")
-    (synopsis "Library which provides the basic hardware access drivers for logic
-analyzers")
-    (description "@code{libsigrok} is a shared library written in C which provides the basic hardware
-access drivers for logic analyzers and other supported devices, as well as input/output file
-format support.")
-    (license license:gpl3+)))
+  (let ((commit "a7e919a3a6b7fd511acbe1a280536b76c70c28d2")
+        (revision "1"))
+    (package
+      (name "libsigrok")
+      (version (git-version "0.5.2" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "git://sigrok.org/libsigrok")
+               (commit commit)))
+         (sha256
+          (base32 "0km3fyv5s2byrm4zpbss2527ynhw4nb67imnbawwic2a6zh9jiyc"))
+         (file-name (git-file-name name version))))
+      (outputs '("out" "doc"))
+      (arguments
+       `(#:tests? #f                      ; tests need USB access
+         #:phases
+         (modify-phases %standard-phases
+           (add-before 'configure 'change-udev-group
+             (lambda _
+               (substitute* (find-files "contrib" "\\.rules$")
+                 (("plugdev") "dialout"))))
+           (add-after 'build 'build-doc
+             (lambda _
+               (invoke "doxygen")))
+           (add-after 'install 'install-doc
+             (lambda* (#:key outputs #:allow-other-keys)
+               (copy-recursively "doxy/html-api"
+                                 (string-append (assoc-ref outputs "doc")
+                                                "/share/doc/libsigrok"))))
+           (add-after 'install-doc 'install-udev-rules
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out   (assoc-ref outputs "out"))
+                      (rules (string-append out "/lib/udev/rules.d/")))
+                 (for-each (lambda (file)
+                             (install-file file rules))
+                           (find-files "contrib" "\\.rules$")))))
+           (add-after 'install-udev-rules 'install-fw
+             (lambda* (#:key inputs outputs #:allow-other-keys)
+               (let* ((fx2lafw (assoc-ref inputs "sigrok-firmware-fx2lafw"))
+                      (out (assoc-ref outputs "out"))
+                      (dir-suffix "/share/sigrok-firmware/")
+                      (input-dir (string-append fx2lafw dir-suffix))
+                      (output-dir (string-append out dir-suffix)))
+                 (for-each
+                  (lambda (file)
+                    (install-file file output-dir))
+                  (find-files input-dir "."))))))))
+      (native-inputs
+       (list autoconf automake doxygen graphviz libtool
+             sigrok-firmware-fx2lafw pkg-config))
+      (inputs
+       (list python zlib))
+      ;; libsigrokcxx.pc lists "glibmm" in Requires libsigrok.pc lists
+      ;; "libserialport", "libusb", "libftdi" and "libzip" in Requires.private
+      ;; and "glib" in Requires
+      (propagated-inputs
+       (list glib
+             glibmm-2.64
+             libserialport
+             libusb
+             libftdi
+             libzip))
+      (build-system gnu-build-system)
+      (home-page "https://www.sigrok.org/wiki/Libsigrok")
+      (synopsis "Basic hardware access drivers for logic analyzers")
+      (description "@code{libsigrok} is a shared library written in C which
+provides the basic hardware access drivers for logic analyzers and other
+supported devices, as well as input/output file format support.")
+      (license license:gpl3+))))
 
 (define-public sigrok-cli
   (package
@@ -231,11 +231,9 @@ format support.")
                (base32
                 "1f0a2k8qdcin0pqiqq5ni4khzsnv61l21v1dfdjzayw96qzl9l3i"))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("glib" ,glib)
-       ("libsigrok" ,libsigrok)
-       ("libsigrokdecode" ,libsigrokdecode)))
+     (list glib libsigrok libsigrokdecode))
     (build-system gnu-build-system)
     (home-page "https://sigrok.org/wiki/Sigrok-cli")
     (synopsis "Command-line frontend for sigrok")
@@ -254,10 +252,11 @@ format support.")
               (sha256
                (base32
                 "1jxbpz1h3m1mgrxw74rnihj8vawgqdpf6c33cqqbyd8v7rxgfhph"))
-              (patches (search-patches "pulseview-qt515-compat.patch"))))
+              (patches (search-patches "pulseview-qt515-compat.patch"
+                                       "pulseview-glib-2.68.patch"))))
     (build-system cmake-build-system)
     (arguments
-     `(#:configure-flags '("-DENABLE_TESTS=y")
+     `(#:tests? #f ;format_time_minutes_test is failing
        #:phases
        (modify-phases %standard-phases
          (add-after 'install 'remove-empty-doc-directory
@@ -266,19 +265,17 @@ format support.")
                (with-directory-excursion (string-append out "/share")
                  ;; Use RMDIR to never risk silently deleting files.
                  (rmdir "doc/pulseview")
-                 (rmdir "doc"))
-               #t))))))
+                 (rmdir "doc"))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list pkg-config qttools))
     (inputs
-     `(("boost" ,boost)
-       ("glib" ,glib)
-       ("glibmm" ,glibmm)
-       ("libsigrok" ,libsigrok)
-       ("libsigrokdecode" ,libsigrokdecode)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)))
+     (list boost
+           glib
+           glibmm
+           libsigrok
+           libsigrokdecode
+           qtbase-5
+           qtsvg))
     (home-page "https://www.sigrok.org/wiki/PulseView")
     (synopsis "Qt based logic analyzer, oscilloscope and MSO GUI for sigrok")
     (description "PulseView is a Qt based logic analyzer, oscilloscope and MSO GUI
@@ -319,14 +316,9 @@ individual low-level driver modules.")
                 "0a5ycfc1qdmibvagc82r2mhv2i99m6pndy5i6ixas3j2297g6pgq"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("m4" ,m4)
-       ("pkg-config" ,pkg-config)))
+     (list m4 pkg-config))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("comedilib" ,comedilib)
-       ("fftw" ,fftw)
-       ("gtk+" ,gtk+)
-       ("gtkdatabox" ,gtkdatabox)))
+     (list alsa-lib comedilib fftw gtk+ gtkdatabox))
     (synopsis "Digital oscilloscope")
     (description "Xoscope is a digital oscilloscope that can acquire signals
 from ALSA, ESD, and COMEDI sources.  This package currently does not include
diff --git a/gnu/packages/elf.scm b/gnu/packages/elf.scm
index aab912648b..d4f75c9726 100644
--- a/gnu/packages/elf.scm
+++ b/gnu/packages/elf.scm
@@ -9,6 +9,7 @@
 ;;; Copyright © 2020 Mark Wielaard <mark@klomp.org>
 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
 ;;; Copyright © 2021 Leo Le Bouter <lle-bout@zaclys.net>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -32,6 +33,7 @@
   #:use-module (guix build-system gnu)
   #:use-module ((guix licenses) #:select (gpl3+ lgpl3+ lgpl2.0+))
   #:use-module (gnu packages)
+  #:use-module (gnu packages autotools)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages gcc)
@@ -47,14 +49,14 @@
 (define-public elfutils
   (package
     (name "elfutils")
-    (version "0.182")
+    (version "0.183")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://sourceware.org/elfutils/ftp/"
                                   version "/elfutils-" version ".tar.bz2"))
               (sha256
                (base32
-                "0n48dcadjy0wiilddzav2zaxdi30qkkfp160gw5mycyz9s8hdi7c"))
+                "1igjfia9x8h6fmh9nbl8mpz0i24my5iixrji99qmi79hilh7qqy3"))
               (patches (search-patches "elfutils-tests-ptrace.patch"))))
     (build-system gnu-build-system)
 
@@ -70,6 +72,7 @@
      `(#:configure-flags (list (string-append "LDFLAGS=-Wl,-rpath="
                                               (assoc-ref %outputs "out")
                                               "/lib")
+                               "--disable-static"
                                ;; TODO: Enable the debuginfo server.  It
                                ;; increases the closure size significantly
                                ;; and presents bootstrapping problems, so
@@ -97,8 +100,8 @@
                (("run-backtrace-native.sh") ""))
              #t)))))
 
-    (native-inputs `(("m4" ,m4)))
-    (inputs `(("zlib" ,zlib)))
+    (native-inputs (list m4))
+    (inputs (list zlib))
     (home-page "https://sourceware.org/elfutils/")
     (synopsis "Collection of utilities and libraries to handle ELF files and
 DWARF data")
@@ -172,8 +175,8 @@ object or archive file), @command{eu-strip} (for discarding symbols),
        ("python-sphinx" ,python-sphinx)
        ("python" ,python)))             ;for tests
     (propagated-inputs
-     `(("elfutils" ,elfutils)           ;libabigail.la says -lelf
-       ("libxml2" ,libxml2)))           ;in Requires.private of libabigail.pc
+     (list elfutils ;libabigail.la says -lelf
+           libxml2))           ;in Requires.private of libabigail.pc
     (synopsis "Analyze application binary interfaces (ABIs)")
     (description
      "@dfn{ABIGAIL} stands for the Application Binary Interface Generic
@@ -204,22 +207,32 @@ static analysis of the ELF binaries at hand.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (replace 'configure
-           (lambda* (#:key outputs #:allow-other-keys)
-             ;; This old `configure' script doesn't support
-             ;; variables passed as arguments.
-             (let ((out (assoc-ref outputs "out")))
-               (setenv "CONFIG_SHELL" (which "bash"))
-               (invoke "./configure"
-                       (string-append "--prefix=" out)
-                       ,@(if (string=? "powerpc64le-linux"
-                                       (%current-system))
-                             '("--host=powerpc64le-unknown-linux-gnu")
-                             '())
-                       ,@(if (string=? "aarch64-linux"
-                                       (%current-system))
-                             '("--host=aarch64-unknown-linux-gnu")
-                             '()))))))))
+         ;; This old 'configure' script doesn't support cross-compilation
+         ;; well.  I.e., it fails to find the cross-compiler.  Also,
+         ;; the old `configure' script doesn't support variables passed as
+         ;; arguments.  A third problem is that config.sub is too old to
+         ;; recognise aarch64 and powerpc64le.
+         ;;
+         ;; Solve this by regenerating the configure script and letting
+         ;; autoreconf update 'config.sub'.  While 'config.sub' is updated
+         ;; anyway, update 'config.guess' as well.
+         (add-before 'bootstrap 'delete-configure
+           (lambda* (#:key native-inputs inputs #:allow-other-keys)
+             (delete-file "configure")
+             (delete-file "config.sub")
+             (delete-file "config.guess")
+             (for-each (lambda (file)
+                         (install-file
+                          (string-append
+                           (assoc-ref (or native-inputs inputs) "automake")
+                           "/share/automake-"
+                           ,(version-major+minor (package-version automake))
+                           "/" file) "."))
+                       '("config.sub" "config.guess")))))))
+    (native-inputs
+     (list autoconf
+           ;; For up-to-date 'config.guess' and 'config.sub'
+           automake))
     (home-page (string-append "https://web.archive.org/web/20181111033959/"
                               "http://www.mr511.de/software/english.html"))
     (synopsis "ELF object file access library")
diff --git a/gnu/packages/elixir.scm b/gnu/packages/elixir.scm
index 2ceb3b553f..87177acce0 100644
--- a/gnu/packages/elixir.scm
+++ b/gnu/packages/elixir.scm
@@ -35,7 +35,7 @@
 (define-public elixir
   (package
     (name "elixir")
-    (version "1.12.2")
+    (version "1.12.3")
     (source
      (origin
        (method git-fetch)
@@ -44,7 +44,7 @@
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1rwmwnqxhjcdx9niva9ardx90p1qi4axxh72nw9k15hhlh2jy29x"))
+        (base32 "07fisdx755cgyghwy95gvdds38sh138z56biariml18jjw5mk3r6"))
        (patches (search-patches "elixir-path-length.patch"))))
     (build-system gnu-build-system)
     (arguments
@@ -56,8 +56,7 @@
        (modify-phases %standard-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 'make-git-checkout-writable 'replace-paths
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
@@ -82,8 +81,7 @@
                     "; fi")))
                (substitute* "bin/mix"
                  (("#!/usr/bin/env elixir")
-                  (string-append "#!" out "/bin/elixir"))))
-             #t))
+                  (string-append "#!" out "/bin/elixir"))))))
          (add-before 'build 'make-current
            ;; The Elixir compiler checks whether or not to compile files by
            ;; inspecting their timestamps.  When the timestamp is equal to the
@@ -93,17 +91,14 @@
              (for-each (lambda (file)
                          (let ((recent 1400000000))
                            (utime file recent recent 0 0)))
-                       (find-files "." ".*"))
-             #t))
+                       (find-files "." ".*"))))
          (add-before 'check 'set-home
            (lambda* (#:key inputs #:allow-other-keys)
              ;; Some tests require access to a home directory.
-             (setenv "HOME" "/tmp")
-             #t))
+             (setenv "HOME" "/tmp")))
          (delete 'configure))))
     (inputs
-     `(("erlang" ,erlang)
-       ("git" ,git)))
+     (list erlang git))
     (home-page "https://elixir-lang.org/")
     (synopsis "Elixir programming language")
     (description "Elixir is a dynamic, functional language used to build
diff --git a/gnu/packages/elm.scm b/gnu/packages/elm.scm
index feaa9c8d5c..ca7c61041b 100644
--- a/gnu/packages/elm.scm
+++ b/gnu/packages/elm.scm
@@ -52,42 +52,32 @@
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'update-constraints
+         (add-before 'configure 'update-constraints
            (lambda _
              (substitute* "elm.cabal"
-               (("ansi-terminal >= 0\\.8 && < 0\\.9,")
-                "ansi-terminal >= 0.8 && < 0.10,")
-               (("containers >= 0\\.5\\.8\\.2 && < 0\\.6,")
-                "containers >= 0.5.8.2 && < 0.7,")
-               (("http-client >= 0\\.5 && < 0\\.6,")
-                "http-client >= 0.5 && < 0.7,")
-               (("language-glsl >= 0\\.0\\.2 && < 0\\.3,")
-                "language-glsl >= 0.0.2 && < 0.4,")
-               (("network >= 2\\.4 && < 2\\.7,")
-                "network >= 2.4 && < 2.9,"))
-             #t)))))
+               (("(ansi-terminal|containers|network|http-client|language-glsl)\\s+[^,]+" all dep)
+                dep)))))))
     (inputs
-     `(("ghc-ansi-terminal" ,ghc-ansi-terminal)
-       ("ghc-ansi-wl-pprint" ,ghc-ansi-wl-pprint)
-       ("ghc-edit-distance" ,ghc-edit-distance)
-       ("ghc-file-embed" ,ghc-file-embed)
-       ("ghc-http" ,ghc-http)
-       ("ghc-http-client" ,ghc-http-client)
-       ("ghc-http-client-tls" ,ghc-http-client-tls)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-language-glsl" ,ghc-language-glsl)
-       ("ghc-logict" ,ghc-logict)
-       ("ghc-network" ,ghc-network)
-       ("ghc-raw-strings-qq" ,ghc-raw-strings-qq)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-sha" ,ghc-sha)
-       ("ghc-snap-core" ,ghc-snap-core)
-       ("ghc-snap-server" ,ghc-snap-server)
-       ("ghc-unordered-containers"
-        ,ghc-unordered-containers)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-zip-archive" ,ghc-zip-archive)))
+     (list ghc-ansi-terminal
+           ghc-ansi-wl-pprint
+           ghc-edit-distance
+           ghc-file-embed
+           ghc-http
+           ghc-http-client
+           ghc-http-client-tls
+           ghc-http-types
+           ghc-language-glsl
+           ghc-logict
+           ghc-network
+           ghc-raw-strings-qq
+           ghc-scientific
+           ghc-sha
+           ghc-snap-core
+           ghc-snap-server
+           ghc-unordered-containers
+           ghc-utf8-string
+           ghc-vector
+           ghc-zip-archive))
     (home-page "https://elm-lang.org")
     (synopsis "Programming language for Web applications")
     (description
diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm
index e0af9e3f07..9d9adbb1e5 100644
--- a/gnu/packages/emacs-xyz.scm
+++ b/gnu/packages/emacs-xyz.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014 Taylan Ulrich Bayirli/Kammer <taylanbayirli@gmail.com>
-;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014, 2015, 2016, 2017, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019 Alex Kost <alezost@gmail.com>
 ;;; Copyright © 2015 Federico Beffa <beffa@fbengineering.ch>
@@ -14,7 +14,7 @@
 ;;; Copyright © 2016, 2017 Roel Janssen <roel@gnu.org>
 ;;; Copyright © 2016, 2017 Nikita <nikita@n0.is>
 ;;; Copyright © 2016, 2019 Alex Griffin <a@ajgrf.com>
-;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2016-2022 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2016, 2017, 2018 Alex Vong <alexvong1995@gmail.com>
 ;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2017 Christopher Baines <mail@cbaines.net>
@@ -47,6 +47,7 @@
 ;;; Copyright © 2019 mikadoZero <mikadozero@yandex.com>
 ;;; Copyright © 2019 Gabriel Hondet <gabrielhondet@gmail.com>
 ;;; Copyright © 2019, 2020, 2021 Joseph LaFreniere <joseph@lafreniere.xyz>
+;;; Copyright © 2019 Todor Kondić <tk.code@protonmail.com>15669
 ;;; Copyright © 2019 Amar Singh <nly@disroot.org>
 ;;; Copyright © 2019 Baptiste Strazzulla <bstrazzull@hotmail.fr>
 ;;; Copyright © 2019 Giacomo Leidi <goodoldpaul@autistici.org>
@@ -70,14 +71,14 @@
 ;;; Copyright © 2020 Alberto Eleuterio Flores Guerrero <barbanegra+guix@posteo.mx>
 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2020 pinoaffe <pinoaffe@airmail.cc>
-;;; Copyright © 2020, 2021 Vinicius Monego <monego@posteo.net>
+;;; Copyright © 2020, 2021, 2022 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2020 Ryan Desfosses <rdes@protonmail.com>
 ;;; Copyright © 2020 Marcin Karpezo <sirmacik@wioo.waw.pl>
 ;;; Copyright © 2020 Fredrik Salomonsson <plattfot@gmail.com>
 ;;; Copyright © 2020 Eric Bavier <bavier@posteo.net>
 ;;; Copyright © 2020, 2021 Morgan Smith <Morgan.J.Smith@outlook.com>
 ;;; Copyright © 2020 Peng Mei Yu <i@pengmeiyu.com>
-;;; Copyright © 2020, 2021 Niklas Eklund <niklas.eklund@posteo.net>
+;;; Copyright © 2020, 2021, 2022 Niklas Eklund <niklas.eklund@posteo.net>
 ;;; Copyright © 2020 Marco Grassi <marco.au.grassi98@protonmail.com>
 ;;; Copyright © 2020 Tomás Ortín Fernández <tomasortin@mailbox.org>
 ;;; Copyright © 2020, 2021 Zhu Zihao <all_but_last@163.com>
@@ -89,7 +90,7 @@
 ;;; Copyright © 2020 Jonathan Rostran <rostranjj@gmail.com>
 ;;; Copyright © 2020, 2021 Noah Evans <noah@nevans.me>
 ;;; Copyright © 2020 Brit Butler <brit@kingcons.io>
-;;; Copyright © 2021 Alexandr Vityazev <avityazev@posteo.org>
+;;; Copyright © 2021, 2022 Aleksandr Vityazev <avityazev@posteo.org>
 ;;; Copyright © 2021 Yurii Kholodkov <urist.mckorobochka@gmail.com>
 ;;; Copyright © 2021 Alexey Abramov <levenson@mmer.org>
 ;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
@@ -102,6 +103,10 @@
 ;;; Copyright © 2021 Matthew James Kraai <kraai@ftbfs.org>
 ;;; Copyright © 2021 Noisytoot <noisytoot@disroot.org>
 ;;; Copyright © 2021 Simon South <simon@simonsouth.net>
+;;; Copyright © 2021 la snesne <lasnesne@lagunposprasihopre.org>
+;;; Copyright © 2021 Brian Kubisiak <brian@kubisiak.com>
+;;; Copyright © 2021, 2022 Taiju HIGASHI <higashi@taiju.info>
+;;; Copyright © 2022 Brandon Lucas <br@ndon.dk>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -124,6 +129,7 @@
   #:use-module (guix cvs-download)
   #:use-module (guix download)
   #:use-module (guix bzr-download)
+  #:use-module (guix gexp)
   #:use-module (guix git-download)
   #:use-module (guix hg-download)
   #:use-module (guix build-system gnu)
@@ -153,6 +159,7 @@
   #:use-module (gnu packages guile)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages gnome)
+  #:use-module (gnu packages graphviz)
   #:use-module (gnu packages haskell-apps)
   #:use-module (gnu packages ibus)
   #:use-module (gnu packages java)
@@ -208,6 +215,7 @@
   #:use-module (gnu packages password-utils)
   #:use-module (gnu packages pulseaudio)
   #:use-module (gnu packages sphinx)
+  #:use-module (gnu packages screen)
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages shells)
   #:use-module (gnu packages shellutils)
@@ -231,16 +239,16 @@
 (define-public emacs-geiser
   (package
     (name "emacs-geiser")
-    (version "0.17")
+    (version "0.22.1")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://gitlab.com/emacs-geiser/geiser.git")
+             (url "https://gitlab.com/emacs-geiser/geiser")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "07g1zlf9kmfish2wa6m376xba0nv6n4spw8wbmr90a56xj0qpswc"))))
+        (base32 "0q46lp73l0c975qzyn1hkvwcw5xf2sz5dpjgvb66msndyg71y495"))))
     (build-system emacs-build-system)
     (arguments
      '(#:phases
@@ -255,14 +263,13 @@
                          el-files))))
          (add-before 'install 'make-info
            (lambda _
-             ;; XXX: Fix a typo in the ".texi" file below.
-             (substitute* "doc/install.texi"
-               (("\\}\\{NonGNU ELPA\\}") ",NonGNU ELPA}"))
              (with-directory-excursion "doc"
                (invoke "makeinfo" "--no-split"
                        "-o" "geiser.info" "geiser.texi")))))))
     (native-inputs
-     `(("texinfo" ,texinfo)))
+     (list texinfo))
+    (propagated-inputs
+     (list emacs-transient))
     (home-page "https://nongnu.org/geiser/")
     (synopsis "Collection of Emacs modes for Scheme hacking")
     (description
@@ -281,7 +288,7 @@ e.g. emacs-geiser-guile for Guile.")
 (define-public emacs-geiser-guile
   (package
     (name "emacs-geiser-guile")
-    (version "0.17")
+    (version "0.21.1")
     (source
      (origin
        (method git-fetch)
@@ -290,27 +297,26 @@ e.g. emacs-geiser-guile for Guile.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0iw23nlgqppf6f00ly50m8lq85n9mv244pw3whxv0hynfjxr2ic0"))))
+        (base32 "0fk5rr7mjmb4waiagi80dhddas5mrsgqr0flag5v5b0piblixxq6"))))
     (build-system emacs-build-system)
     (arguments
-     '(#:include (cons "^src/" %default-include)
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'make-autoloads 'patch-autoloads
-           (lambda* (#:key outputs #:allow-other-keys)
-             (substitute* (string-append
-                           (elpa-directory (assoc-ref outputs "out"))
-                           "/geiser-guile-autoloads.el")
-               ;; Activating implementations fails when Geiser is not yet
-               ;; loaded, so let's defer that until it is.
-               (("\\(geiser-activate-implementation .*\\)" all)
-                (string-append
-                 "(eval-after-load 'geiser-impl '" all ")")))
-             #t)))))
+     (list
+      #:include #~(cons "^src/" %default-include)
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'make-autoloads 'patch-autoloads
+            (lambda _
+              (substitute* (string-append (elpa-directory #$output)
+                                          "/geiser-guile-autoloads.el")
+                ;; Activating implementations fails when Geiser is not yet
+                ;; loaded, so let's defer that until it is.
+                (("\\(geiser-activate-implementation .*\\)" all)
+                 (string-append
+                  "(eval-after-load 'geiser-impl '" all ")"))))))))
     (inputs
-     `(("guile" ,guile-2.2)))
+     (list guile-3.0))
     (propagated-inputs
-     `(("geiser" ,emacs-geiser)))
+     (list emacs-geiser))
     (home-page "https://nongnu.org/geiser/")
     (synopsis "Guile Scheme support for Geiser")
     (description
@@ -335,8 +341,7 @@ a generic Scheme interaction mode for the GNU Emacs editor.")
          (file-name (git-file-name name version))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("geiser" ,emacs-geiser)
-         ("auto-complete" ,emacs-auto-complete)))
+       (list emacs-geiser emacs-auto-complete))
       (synopsis "Auto-complete backend for geiser")
       (description
        "This package provides an auto-complete source for Scheme projects
@@ -361,7 +366,7 @@ using geiser.")
     (arguments
      `(#:include (cons "^geiser-gauche\\.scm$" %default-include)))
     (native-inputs
-     `(("geiser" ,emacs-geiser)))
+     (list emacs-geiser))
     (home-page "https://gitlab.com/emacs-geiser/gauche")
     (synopsis "Gauche Scheme support for Geiser")
     (description
@@ -402,9 +407,9 @@ a generic Scheme interaction mode for the GNU Emacs editor.")
                  "(eval-after-load 'geiser-impl '" all ")")))
              #t)))))
     (inputs
-     `(("racket" ,racket)))
+     (list racket))
     (propagated-inputs
-     `(("geiser" ,emacs-geiser)))
+     (list emacs-geiser))
     (home-page "https://nongnu.org/geiser/")
     (synopsis "Racket support for Geiser")
     (description
@@ -415,7 +420,7 @@ a generic Scheme interaction mode for the GNU Emacs editor.")
 (define-public emacs-geiser-chez
   (package
     (name "emacs-geiser-chez")
-    (version "0.16")
+    (version "0.17")
     (source
      (origin
        (method git-fetch)
@@ -424,8 +429,7 @@ a generic Scheme interaction mode for the GNU Emacs editor.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32
-         "0cc1z5z5cpvxa5f3n8kvms0wxlybzcg4l1bh3rwv1l1sb0lk1xzx"))))
+        (base32 "03fc9ahb0pmznkcnxzgpni4clj1zgky6vaqkc94nf8b8swniwkm9"))))
     (build-system emacs-build-system)
     (arguments
      '(#:include (cons "^src/" %default-include)
@@ -446,9 +450,9 @@ a generic Scheme interaction mode for the GNU Emacs editor.")
                 (string-append
                  "(eval-after-load 'geiser-impl '" all ")"))))))))
     (inputs
-     `(("chez-scheme" ,chez-scheme)))
+     (list chez-scheme))
     (propagated-inputs
-     `(("emacs-geiser" ,emacs-geiser)))
+     (list emacs-geiser))
     (home-page "https://nongnu.org/geiser/")
     (synopsis "Support for Chez Scheme in Geiser")
     (description
@@ -458,16 +462,16 @@ a generic Scheme interaction mode for the GNU Emacs editor.")
 (define-public emacs-vc-hgcmd
   (package
     (name "emacs-vc-hgcmd")
-    (version "1.14")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/muffinmad/emacs-vc-hgcmd")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1mm8lnwii53j32v54aahl8sf3ciwymrvc1rgy4nw2m7hcrnjsb78"))))
+    (version "1.14.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/muffinmad/emacs-vc-hgcmd")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1nlaicza4ds325827ks5gb7zn0nc536k2chq8jwbq34ybvxi93wj"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/muffinmad/emacs-vc-hgcmd")
     (synopsis "Version control (VC) backend for the Mercurial command server")
@@ -534,8 +538,7 @@ system.")
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "hypb.el"
                (("/bin/domainname")
-                (string-append (assoc-ref inputs "inetutils")
-                               "/bin/dnsdomainname")))
+                (search-input-file inputs "bin/dnsdomainname")))
              (substitute* "hyperbole.el"
                (("\\(hyperb:check-dir-user\\)") ""))))
          (add-after 'install 'install-images
@@ -547,7 +550,7 @@ system.")
                             (string-append out "/share/info/im")))
                          (find-files "man/im" "\\.png$"))))))))
     (inputs
-     `(("inetutils" ,inetutils)))
+     (list inetutils))
     (home-page "https://www.gnu.org/software/hyperbole/")
     (synopsis "The Everyday Hypertextual Information Manager")
     (description
@@ -578,7 +581,7 @@ buffers, directory trees, or the web.")
                   "04zps0d4s99f5a8ahrpyf8b6qw0c1y7rd1bsaq9nc6m4qblsvwc8"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-with-editor" ,emacs-with-editor)))
+       (list emacs-with-editor))
       (home-page "https://github.com/jojojames/hg-histedit")
       (synopsis "Emacs interface to @command{hg histedit}")
       (description "This package provides an Emacs interface to
@@ -630,18 +633,44 @@ for those who may want transient periods of unbalanced parentheses, such as
 when typing parentheses directly or commenting out code line by line.")
     (license license:gpl3+)))
 
+(define-public emacs-puni
+  ;; No tagged release upstream
+  (let ((commit "ed4a863460329a3019c286ff382e2ddc0ffdc9d7")
+        (revision "0"))
+    (package
+      (name "emacs-puni")
+      (version (git-version "0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/AmaiKinono/puni")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "14lcqf0qdkq2rklx12v12qpgfahz2bpqmnl3bzcz5myawgjjcphd"))))
+      (build-system emacs-build-system)
+      (propagated-inputs (list emacs-with-editor))
+      (home-page "https://github.com/AmaiKinono/puni")
+      (synopsis "Emacs minor mode for structured editing")
+      (description
+       "Puni is an Emacs minor mode for structured editing: soft deletion,
+expression navigating and manipulating.  It supports many major modes
+out of the box.")
+      (license license:gpl3+))))
+
 (define-public emacs-project
   (package
     (name "emacs-project")
-    (version "0.7.1")
+    (version "0.8.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/project-" version ".tar"))
        (sha256
-        (base32 "1ip8s924n50mmh068p42zi0ylvv79a2pi9sji1c2pqj2q19d7jr6"))))
+        (base32 "1x3zkbjsi04v5ny3yxqrb75vcacrj9kxmpm9mvkp0n07j5g34f68"))))
     (build-system emacs-build-system)
-    (propagated-inputs `(("emacs-xref" ,emacs-xref)))
+    (propagated-inputs (list emacs-xref))
     (home-page "http://elpa.gnu.org/packages/project.html")
     (synopsis "Operations on the current project")
     (description
@@ -652,28 +681,29 @@ some utility functions, and commands using that infrastructure.")
 (define-public git-modes
   (package
     (name "emacs-git-modes")
-    (version "1.3.0")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                     (url "https://github.com/magit/git-modes")
-                     (commit version)))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0m8qfjj5hzxwyyi34sbk11qz5fix6z80hiki0v0a838sq4f586b6"))))
+    (version "1.4.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/magit/git-modes")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0aqz65pcqc35h5z4s606f48iqn87h5v9nj3cp6n9yjxa2v7w5hfk"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/magit/git-modes")
     (synopsis "Emacs major modes for Git configuration files")
     (description
      "This package provides Emacs major modes for editing various Git
-configuration files, such as .gitattributes, .gitignore, and .git/config.")
+configuration files, such as @file{.gitattributes}, @file{.gitignore}, and
+@file{.git/config}.")
     (license license:gpl3+)))
 
 (define-public emacs-with-editor
   (package
     (name "emacs-with-editor")
-    (version "3.0.4")
+    (version "3.1.1")
     (source
      (origin
        (method git-fetch)
@@ -682,19 +712,24 @@ configuration files, such as .gitattributes, .gitignore, and .git/config.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1bmvkrfnjzrf0ch2mh75cv784mzs64i4f44l91xysapjqv46lfqn"))))
+        (base32 "06a66119rp5vfqdzqk10df3qyh9jvjl6j3pqm03jy0b110v2bfa8"))))
     (build-system emacs-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
+         (add-before 'install 'enter-lisp-directory
+           (lambda _
+             (chdir "lisp")))
          (add-before 'install 'make-info
            (lambda _
-             (invoke "makeinfo" "--no-split"
-                     "-o" "with-editor.info" "with-editor.texi"))))))
+             (with-directory-excursion "../docs"
+               (invoke "makeinfo" "--no-split"
+                       "-o" "with-editor.info" "with-editor.texi")
+               (install-file "with-editor.info" "../lisp")))))))
     (native-inputs
-     `(("texinfo" ,texinfo)))
+     (list texinfo))
     (propagated-inputs
-     `(("emacs-async" ,emacs-async)))
+     (list emacs-async))
     (home-page "https://github.com/magit/with-editor")
     (synopsis "Emacs library for using Emacsclient as EDITOR")
     (description
@@ -743,14 +778,12 @@ on stdout instead of using a socket as the Emacsclient does.")
                  (make-file-writable "libgit.el")
                  (emacs-substitute-variables "libgit.el"
                    ("libgit--module-file"
-                    (string-append (emacs:elpa-directory out) "/libegit2.so")))
-                 #t)))
+                    (string-append (emacs:elpa-directory out) "/libegit2.so"))))))
            (add-before 'install 'prepare-for-install
              (lambda _
-               (let ((s (string-append "../" ,name "-" ,version "-checkout")))
+               (let ((s "../source"))
                  (copy-file "libegit2.so" (string-append s "/libegit2.so"))
-                 (chdir s)
-                 #t)))
+                 (chdir s))))
            (replace 'install
              (lambda* (#:key outputs #:allow-other-keys)
                (let ((install (assoc-ref emacs:%standard-phases 'install)))
@@ -768,11 +801,9 @@ on stdout instead of using a socket as the Emacsclient does.")
            (add-after 'emacs-build 'validate-compiled-autoloads
              (assoc-ref emacs:%standard-phases 'validate-compiled-autoloads)))))
       (native-inputs
-       `(("pkg-config" ,pkg-config)
-         ("emacs" ,emacs-no-x)
-         ("git" ,git-minimal)))
+       (list pkg-config emacs-no-x git-minimal))
       (inputs
-       `(("libgit2" ,libgit2)))
+       (list libgit2))
       (home-page "https://github.com/magit/libegit2")
       (synopsis "Emacs bindings for libgit2")
       (description "This is an experimental module written in C providing
@@ -783,7 +814,7 @@ libgit2 bindings for Emacs, intended to boost the performance of Magit.")
 (define-public emacs-magit
   (package
     (name "emacs-magit")
-    (version "3.2.1")
+    (version "3.3.0")
     (source
      (origin
        (method git-fetch)
@@ -792,7 +823,7 @@ libgit2 bindings for Emacs, intended to boost the performance of Magit.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "179mgh8l5p7fhfmbg5rz810mhbzsxqsxd66jdb2a68vsazs1jw2m"))))
+        (base32 "0cxyvp2aav27znc7mf6c83q5pddpdniaqkrxn1r8dbgr540qmnpn"))))
     (build-system emacs-build-system)
     (arguments
      `(#:emacs ,emacs-no-x             ;module support is required
@@ -841,15 +872,11 @@ libgit2 bindings for Emacs, intended to boost the performance of Magit.")
            (lambda _
              (chdir "lisp"))))))
     (native-inputs
-     `(("texinfo" ,texinfo)))
+     (list texinfo))
     (inputs
-     `(("git" ,git)
-       ("perl" ,perl)))
+     (list git perl))
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-libgit" ,emacs-libgit)
-       ("emacs-transient" ,emacs-transient)
-       ("emacs-with-editor" ,emacs-with-editor)))
+     (list emacs-dash emacs-libgit emacs-transient emacs-with-editor))
     (home-page "https://magit.vc/")
     (synopsis "Emacs interface for the Git version control system")
     (description
@@ -874,10 +901,8 @@ rebasing, and other common Git operations.")
                (base32
                 "1v1y4fir1plz4kj0cvkcd29wibli4dw7vp4fmbxq4df76d8iy8yd"))))
     (build-system emacs-build-system)
-    (propagated-inputs `(("dash" ,emacs-dash)
-                         ("with-editor" ,emacs-with-editor)
-                         ("magit" ,emacs-magit)
-                         ("transient" ,emacs-transient)))
+    (propagated-inputs (list emacs-dash emacs-with-editor emacs-magit
+                             emacs-transient))
     (home-page "https://github.com/magit/magit-svn")
     (synopsis "Git-SVN extension to Magit")
     (description
@@ -906,9 +931,9 @@ support for Git-SVN.")
            (lambda _
              (invoke "make" "info"))))))
     (native-inputs
-     `(("texinfo" ,texinfo)))
+     (list texinfo))
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)))
+     (list emacs-dash))
     (home-page "https://github.com/magit/magit-popup")
     (synopsis "Define prefix-infix-suffix command combos")
     (description
@@ -921,20 +946,19 @@ process, passing on the arguments as command line arguments.")
 (define-public emacs-magit-annex
   (package
     (name "emacs-magit-annex")
-    (version "1.8.0")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/magit/magit-annex")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0ak4chfn95p2vj3y0wiyimj609a4jfzrfpsc1kn0is1jv3dlkl6c"))))
+    (version "1.8.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/magit/magit-annex")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1amr2c08mq1nnn6k66mgz4rzyni4np7gxm96g4qyla2cbfbachgk"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("magit" ,emacs-magit)
-       ("transient" ,emacs-transient)))
+     (list emacs-magit emacs-transient))
     (home-page "https://github.com/magit/magit-annex/")
     (synopsis "Git-annex support for Magit")
     (description
@@ -944,7 +968,7 @@ process, passing on the arguments as command line arguments.")
 (define-public emacs-minions
   (package
     (name "emacs-minions")
-    (version "0.3.4")
+    (version "0.3.7")
     (source
      (origin
        (method git-fetch)
@@ -953,10 +977,10 @@ process, passing on the arguments as command line arguments.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1rvsfg9aabvyzzxd38kvjwkm9675zcmrfhzj5x6wj0ba3n0k34q5"))))
+        (base32 "1bzxxs8mxaihpjkbxgynhsi39lbbnij28grdc3sk9sq09j9752vw"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)))
+     (list emacs-dash))
     (home-page "https://github.com/tarsius/minions")
     (synopsis "Minor-mode menu for the mode line")
     (description
@@ -976,7 +1000,7 @@ Alternatively the menu can be bound globally, for example:
 (define-public emacs-moody
   (package
     (name "emacs-moody")
-    (version "0.6.0")
+    (version "0.7.0")
     (source
      (origin
        (method git-fetch)
@@ -985,7 +1009,7 @@ Alternatively the menu can be bound globally, for example:
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "14x3hd0z0nh0dyfi434vqywi7aawfxhlqj6sp7m17np56zq32yhi"))))
+        (base32 "1xzi93hp4jrxqi3x31cpx4ff1yh2gq9y7qvv65gj19cfk9a0da88"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/tarsius/moody")
     (synopsis "Tabs and ribbons for Emacs mode-line")
@@ -1031,8 +1055,7 @@ then only the color of the mode line changes when a window becomes in-/active.")
                    (("\"wal\"") (string-append "\"" python-pywal "/bin/wal\""))))
                #t)))))
       (inputs
-       `(("python" ,python)
-         ("python-pywal" ,python-pywal)))
+       (list python python-pywal))
       (home-page "https://github.com/jcaw/theme-magic")
       (synopsis "Generate and apply color palettes based on your Emacs theme")
       (description
@@ -1079,7 +1102,7 @@ color scheme used by Visual Studio Code.")
           (base32 "1b858049n6nw4qf60fmszjrhl80x7ssh32f7glj722kwy7404kdh"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-autothemer" ,emacs-autothemer)))
+       (list emacs-autothemer))
       (home-page "https://github.com/mtreca/emacs-theme-sorcery")
       (synopsis "Dark and low-contrast Emacs theme")
       (description "Sorcery is a dark and low-contrast Emacs theme inspired by
@@ -1205,7 +1228,7 @@ automatically opened with this mode.")
         (base32 "0rh2k93c3a0vl073a3s3a3h6gkw454v1lyd7y8l3pd24vw9hc628"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("ghq" ,ghq)))
+     (list ghq))
     (home-page "https://github.com/rcoedo/emacs-ghq")
     (synopsis "Emacs interface for @code{ghq} tool")
     (description
@@ -1216,7 +1239,7 @@ organizing remote Go repository clones.")
 (define-public emacs-ghub
   (package
     (name "emacs-ghub")
-    (version "3.5.3")
+    (version "3.5.4")
     (source
      (origin
        (method git-fetch)
@@ -1225,7 +1248,7 @@ organizing remote Go repository clones.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1sn7rzfkm75vj3whhisrjk1s34lz6hc08hmf4nnznbdvyimnd013"))))
+        (base32 "1bc5z63ylb0ir5v9qngyl50svmlfd6hx9lv1ladwywncdpsslls8"))))
     (build-system emacs-build-system)
     (arguments
      `(#:phases
@@ -1234,11 +1257,9 @@ organizing remote Go repository clones.")
            (lambda _
              (invoke "make" "info"))))))
     (native-inputs
-     `(("texinfo" ,texinfo)))
+     (list texinfo))
     (propagated-inputs
-     `(("dash" ,emacs-dash)
-       ("emacs-let-alist" ,emacs-let-alist)
-       ("treepy" ,emacs-treepy)))
+     (list emacs-dash emacs-let-alist emacs-treepy))
     (home-page "https://github.com/magit/ghub")
     (synopsis "Emacs client libraries for the APIs of various Git forges")
     (description
@@ -1249,33 +1270,29 @@ handful of functions that are not resource-specific.")
     (license license:gpl3+)))
 
 (define-public emacs-typit
-  ;; Last release is from 2017.
-  (let ((commit "fa125bf43757737fbcf91958b76c38b440d54b4c")
-        (revision "2"))
-    (package
-      (name "emacs-typit")
-      (version (git-version "0.2.1" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/mrkkrp/typit")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32 "1l0qb8gjgsmjjdvxlma7g6fn2z6rj246p2kczrikq8ajg1xh61sr"))))
-      (build-system emacs-build-system)
-      (arguments
-        '(#:include (cons "^dict/" %default-include)))
-      (propagated-inputs
-       `(("emacs-f" ,emacs-f)
-         ("emacs-mmt" ,emacs-mmt)))
-      (home-page "https://github.com/mrkkrp/typit")
-      (synopsis "Typing game for Emacs with two difficulties")
-      (description "Emacs Typit is a typing game for Emacs.  Words that are
+  (package
+    (name "emacs-typit")
+    (version "0.2.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/mrkkrp/typit")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "15m4nfsig8w9hykqy9mzd014pqx4fj9yykiw273bwm384lf3dq6y"))))
+    (build-system emacs-build-system)
+    (arguments
+     '(#:include (cons "^dict/" %default-include)))
+    (propagated-inputs
+     (list emacs-f emacs-mmt))
+    (home-page "https://github.com/mrkkrp/typit")
+    (synopsis "Typing game for Emacs with two difficulties")
+    (description "Emacs Typit is a typing game for Emacs.  Words that are
 picked randomly from the most frequent words in language you're practicing,
 until time is up.")
-      (license license:gpl3+))))
+    (license license:gpl3+)))
 
 (define-public emacs-scribble-mode
   (let ((commit "217945d54de5e4bb207033f2116baa28f5c5ecf2")
@@ -1294,7 +1311,7 @@ until time is up.")
                   "1s5ccw1a5ack01wd94ywfcrar9j98agchwdh30q7iyxr0d2z4sii"))))
       (build-system emacs-build-system)
       (home-page "https://github.com/emacs-pe/scribble-mode")
-      (synopsis "Emacs mode for editing the Scribble documentation syntax.")
+      (synopsis "Emacs mode for editing the Scribble documentation syntax")
       (description
        "This package provides basic syntax highlighting and editing support
 for editing Racket's Scribble documentation syntax in Emacs.")
@@ -1328,18 +1345,14 @@ for editing Racket's Scribble documentation syntax in Emacs.")
          (add-after 'unpack 'expand-load-path
            (assoc-ref emacs:%standard-phases 'expand-load-path)))))
     (native-inputs
-    `(("autoconf" ,autoconf)
-      ("automake" ,automake)
-      ("texinfo" ,texinfo)
-      ("perl" ,perl)
-      ("emacs-minimal" ,emacs-minimal)))
-    (propagated-inputs
-     `(("emacs-bui" ,emacs-bui)
-       ("emacs-dash" ,emacs-dash)
-       ("emacs-f" ,emacs-f)
-       ("emacs-s" ,emacs-s)
-       ("gnupg" ,gnupg)
-       ("shroud" ,shroud)))
+     (list autoconf automake texinfo perl emacs-minimal))
+    (propagated-inputs
+     (list emacs-bui
+           emacs-dash
+           emacs-f
+           emacs-s
+           gnupg
+           shroud))
     (home-page "https://www.nongnu.org/emacs-shroud")
     (synopsis "Emacs interface to the Shroud password manager")
     (description
@@ -1366,8 +1379,7 @@ from within Emacs.")
           (base32 "19hgvsrqch2vp49ag6m76bi5qxd20v95z0ib838rib9as15b17wq"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-company" ,emacs-company)
-         ("emacs-flycheck" ,emacs-flycheck)))
+       (list emacs-company emacs-flycheck))
       (home-page "https://github.com/ethereum/emacs-solidity")
       (synopsis "Major mode for writing Solidity code")
       (description
@@ -1393,11 +1405,7 @@ a constant work in progress as the language itself also progresses.")
            "0jvb2ci0h0lj368qhbff3pzkxj3nhlligpbkjzi525k9rkjgm7l8"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)
-         ("emacs-org" ,emacs-org)
-         ("emacs-s" ,emacs-s)
-         ("emacs-hydra" ,emacs-hydra)
-         ("emacs-use-package" ,emacs-use-package)))
+       (list emacs-dash emacs-org emacs-s emacs-hydra emacs-use-package))
       (arguments
        `(#:phases
          (modify-phases %standard-phases
@@ -1427,79 +1435,73 @@ replacement.")
        (sha256
         (base32 "0zxbacqzr84krmhqpvzndnvlcjh1gs1x20ys0dykgd7chyhci5j5"))))
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)))
+     (list emacs-dash))
     (native-inputs
-     `(("emacs" ,emacs-minimal)
-       ("emacs-el-search" ,emacs-el-search)
-       ("emacs-stream" ,emacs-stream)
-       ("texinfo" ,texinfo)))
+     (list emacs-minimal emacs-el-search emacs-stream texinfo))
     (build-system gnu-build-system)
     (arguments
-     `(#:make-flags (list (string-append "EMACS="
-                                         (assoc-ref %build-inputs "emacs")
-                                         "/bin/emacs"))
-       #:modules ((ice-9 match)
+     (list
+      #:make-flags #~(list
+                      (string-append "EMACS=" #$emacs-minimal "/bin/emacs"))
+      #:modules `((ice-9 match)
                   (srfi srfi-26)
                   ((guix build emacs-build-system) #:prefix emacs:)
                   ,@%gnu-build-system-modules)
-       #:imported-modules (,@%gnu-build-system-modules
+      #:imported-modules `(,@%gnu-build-system-modules
                            (guix build emacs-build-system)
                            (guix build emacs-utils))
-       #:phases
-       (modify-phases %standard-phases
-         (delete 'configure)
-         (add-before 'build 'pre-build
-           (lambda* (#:key inputs #:allow-other-keys)
-             (define (el-dir store-dir)
-               (match (find-files store-dir "\\.el$")
-                 ((f1 f2 ...) (dirname f1))
-                 (_ "")))
-
-             (let ((sh (string-append (assoc-ref inputs "bash") "/bin/sh")))
-               (define emacs-prefix? (cut string-prefix? "emacs-" <>))
-
-               (setenv "SHELL" "sh")
-               (setenv "EMACSLOADPATH"
-                       (string-concatenate
-                        (map (match-lambda
-                               (((? emacs-prefix? name) . dir)
-                                (string-append (el-dir dir) ":"))
-                               (_ ""))
-                             inputs)))
-               (substitute* (find-files "." "\\.el") (("/bin/sh") sh))
-               #t)))
-         (add-before 'check 'delete-failing-tests
-           ;; XXX: these tests require GHC executable, which would be a big
-           ;; native input.
-           (lambda _
-             (with-directory-excursion "tests"
-               ;; File `haskell-indent-tests.el' fails with
-               ;; `haskell-indent-put-region-in-literate-2'
-               ;; on Emacs 27.1+
-               ;; XXX: https://github.com/haskell/haskell-mode/issues/1714
-               (for-each delete-file
-                         '("haskell-indent-tests.el"
-                           "haskell-customize-tests.el"
-                           "inferior-haskell-tests.el")))
-             #t))
-         (replace 'install
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (el-dir (emacs:elpa-directory out))
-                    (doc (string-append
-                          out "/share/doc/haskell-mode-" ,version))
-                    (info (string-append out "/share/info")))
-               (define (copy-to-dir dir files)
-                 (for-each (lambda (f)
-                             (install-file f dir))
-                           files))
-
-               (with-directory-excursion "doc"
-                 (invoke "makeinfo" "haskell-mode.texi")
-                 (install-file "haskell-mode.info" info))
-               (copy-to-dir doc '("CONTRIBUTING.md" "NEWS" "README.md"))
-               (copy-to-dir el-dir (find-files "." "\\.elc?"))
-               #t))))))
+      #:phases
+      #~(modify-phases %standard-phases
+          (delete 'configure)
+          (add-before 'build 'pre-build
+            (lambda* (#:key inputs #:allow-other-keys)
+              (define (el-dir store-dir)
+                (match (find-files store-dir "\\.el$")
+                  ((f1 f2 ...) (dirname f1))
+                  (_ "")))
+
+              (let ((sh (search-input-file inputs "/bin/sh")))
+                (define emacs-prefix? (cut string-prefix? "emacs-" <>))
+
+                (setenv "SHELL" "sh")
+                (setenv "EMACSLOADPATH"
+                        (string-concatenate
+                         (map (match-lambda
+                                (((? emacs-prefix? name) . dir)
+                                 (string-append (el-dir dir) ":"))
+                                (_ ""))
+                              inputs)))
+                (substitute* (find-files "." "\\.el") (("/bin/sh") sh)))))
+          (add-before 'check 'delete-failing-tests
+            ;; XXX: these tests require GHC executable, which would be a big
+            ;; native input.
+            (lambda _
+              (with-directory-excursion "tests"
+                ;; File `haskell-indent-tests.el' fails with
+                ;; `haskell-indent-put-region-in-literate-2'
+                ;; on Emacs 27.1+
+                ;; XXX: https://github.com/haskell/haskell-mode/issues/1714
+                (for-each delete-file
+                          '("haskell-indent-tests.el"
+                            "haskell-customize-tests.el"
+                            "inferior-haskell-tests.el")))))
+          (replace 'install
+            (lambda* (#:key outputs #:allow-other-keys)
+              (let* ((out (assoc-ref outputs "out"))
+                     (el-dir (emacs:elpa-directory out))
+                     (doc (string-append
+                           out "/share/doc/haskell-mode-" #$version))
+                     (info (string-append out "/share/info")))
+                (define (copy-to-dir dir files)
+                  (for-each (lambda (f)
+                              (install-file f dir))
+                            files))
+
+                (with-directory-excursion "doc"
+                  (invoke "makeinfo" "haskell-mode.texi")
+                  (install-file "haskell-mode.info" info))
+                (copy-to-dir doc '("CONTRIBUTING.md" "NEWS" "README.md"))
+                (copy-to-dir el-dir (find-files "." "\\.elc?"))))))))
     (home-page "https://github.com/haskell/haskell-mode")
     (synopsis "Haskell mode for Emacs")
     (description
@@ -1524,13 +1526,13 @@ programs.")
                 (file-name (git-file-name name version))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)
-         ("emacs-f" ,emacs-f)
-         ("emacs-flycheck" ,emacs-flycheck)
-         ("emacs-haskell-mode" ,emacs-haskell-mode)
-         ("emacs-s" ,emacs-s)
-         ("emacs-company" ,emacs-company)
-         ("emacs-lcr" ,emacs-lcr)))
+       (list emacs-dash
+             emacs-f
+             emacs-flycheck
+             emacs-haskell-mode
+             emacs-s
+             emacs-company
+             emacs-lcr))
       (home-page "https://github.com/jyp/dante")
       (synopsis "Minor mode for interactive Haskell")
       (description
@@ -1556,9 +1558,9 @@ supports type hints, definition-jumping, completion, and more.")
          (file-name (git-file-name name version))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)))
+       (list emacs-dash))
       (native-inputs
-       `(("emacs-shut-up" ,emacs-shut-up)))
+       (list emacs-shut-up))
       (arguments
        `(#:phases
          (modify-phases %standard-phases
@@ -1587,6 +1589,27 @@ different tools.  It highlights errors and warnings inline in the buffer, and
 provides an optional IDE-like error list.")
       (license license:gpl3+))))                     ;+GFDLv1.3+ for the manual
 
+(define-public emacs-flymake-flycheck
+  (package
+    (name "emacs-flymake-flycheck")
+    (version "20210404.2128")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://melpa.org/packages/flymake-flycheck-"
+                           version ".el"))
+       (sha256
+        (base32 "1m59ahd5gjlfwf328labwdlpcxh8ywywkwgfrlsy5jyxfc9ss4nv"))))
+    (build-system emacs-build-system)
+    (propagated-inputs (list emacs-flycheck))
+    (home-page "https://github.com/purcell/flymake-flycheck")
+    (synopsis "Use Flycheck checkers as Flymake backends")
+    (description
+     "This package provides support for running any Flycheck checker as a
+Flymake diagnostic backend.  The effect is that Flymake will control when the
+checker runs, and Flymake will receive its errors.")
+    (license license:gpl3+)))
+
 (define-public emacs-flymake-quickdef
   ;; This particular commit includes bug fixes on top of 1.0.0 release.
   (let ((version "1.0.0")
@@ -1615,7 +1638,7 @@ boilerplate code from defining new Flymake backend functions.")
 (define-public emacs-flymake-kondor
   (package
     (name "emacs-flymake-kondor")
-    (version "0.0.3")
+    (version "0.1.3")
     (source
      (origin
        (method git-fetch)
@@ -1624,10 +1647,8 @@ boilerplate code from defining new Flymake backend functions.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0h8dqk35r10pxx2w4swb3kij4y2vi17j9wfk978x8lf0wd3h3hsy"))))
+        (base32 "1vcl1q07faqqmrryyia36hbgf78g3cs51pbi0bx41yzz779ribvk"))))
     (build-system emacs-build-system)
-    (propagated-inputs
-     `(("emacs-flymake-quickdef" ,emacs-flymake-quickdef)))
     (home-page "https://github.com/turbo-cafe/flymake-kondor")
     (synopsis "Linter with clj-kondo")
     (description "This package adds Clojure syntax checker clj-kondo.")
@@ -1650,6 +1671,19 @@ boilerplate code from defining new Flymake backend functions.")
          (sha256
           (base32 "04yfb4sy41spjzk9mhm4gy0h8vnjx09p2g6nm1yzgd9a5ph9sqgl"))))
       (build-system emacs-build-system)
+      (arguments
+       '(#:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'substitute-shellcheck-path
+             (lambda* (#:key inputs #:allow-other-keys)
+               (make-file-writable "flymake-shellcheck.el")
+               (emacs-substitute-sexps "flymake-shellcheck.el"
+                 ("defcustom flymake-shellcheck-path"
+                  `(or (executable-find "shellcheck")
+                       ,(string-append (assoc-ref inputs "shellcheck")
+                                       "/bin/shellcheck")))))))))
+      (inputs
+       (list shellcheck))
       (home-page "https://github.com/federicotdn/flymake-shellcheck")
       (synopsis "Flymake backend for Bash/Sh powered by ShellCheck")
       (description
@@ -1723,7 +1757,7 @@ directly.")
       (home-page "https://bitbucket.org/agriggio/ahg")
       (synopsis "Emacs front-end for the Mercurial SCM")
       (description
-       "This packages provides a simple Emacs front-end for the Mercurial
+       "This package provides a simple Emacs front-end for the Mercurial
 Distributed @acronym{Source Control Management, SCM} system.")
       (license license:gpl3+))))
 
@@ -1755,13 +1789,13 @@ in certain cases.  It also enables recursion for anonymous functions.")
 (define-public emacs-xr
   (package
     (name "emacs-xr")
-    (version "1.21")
+    (version "1.22")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/xr-" version ".tar"))
        (sha256
-        (base32 "0mc10d33lsqs0ihcja8w78jzh2pk0dfm9m86kap6r3hi6wkr1cmi"))))
+        (base32 "1l3bqgzvbamfs4n628kg789g7vjn4v81q570gzbw2cwjgk4s6xbj"))))
     (build-system emacs-build-system)
     (home-page "https://elpa.gnu.org/packages/xr.html")
     (synopsis "Convert string regexp to rx notation")
@@ -1798,7 +1832,7 @@ skip set strings, which are arguments to @code{skip-chars-forward} and
            "0dkp7bcd7h2ds40wyszy11nmh7c2jxrwy04ayz7pbxh53ir7s2k0"))))
       (build-system emacs-build-system)
       (native-inputs
-       `(("ert-runner" ,emacs-ert-runner)))
+       (list emacs-ert-runner))
       (arguments
        `(#:tests? #t
          #:test-command '("ert-runner" "-l" "ample-regexps")))
@@ -1824,7 +1858,7 @@ and reused.")
         (base32 "1jx17g8a6pxkw4zlx3fwhqgxfzcf3019k8fklykamfrkharzsc2l"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-powerline" ,emacs-powerline)))
+     (list emacs-powerline))
     (home-page "https://github.com/AnthonyDiGirolamo/airline-themes")
     (synopsis "Vim-airline themes for Emacs Powerline")
     (description
@@ -1903,11 +1937,9 @@ optional minor mode which can apply this command automatically on save.")
        `(#:tests? #t
          #:test-command '("ert-runner")))
       (native-inputs
-       `(("ert-runner" ,emacs-ert-runner)))
+       (list emacs-ert-runner))
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)
-         ("emacs-f" ,emacs-f)
-         ("emacs-s" ,emacs-s)))
+       (list emacs-dash emacs-f emacs-s))
       (home-page "https://github.com/emacsattic/relative-buffers")
       (synopsis "Minor mode to rename buffers by project structure")
       (description
@@ -1920,16 +1952,16 @@ project root.")
 (define-public emacs-relint
   (package
     (name "emacs-relint")
-    (version "1.19")
+    (version "1.20")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/"
                            "relint-" version ".tar"))
        (sha256
-        (base32 "14z3i01pq5ljhjf5yfcjw7hxljcrwjnizkrdc1qyh9b6h3ic1bbi"))))
+        (base32 "0r20dim2r4a4bv0fmgbnq3graa7hhlai55h9qyknapqbr2j1v1h7"))))
     (build-system emacs-build-system)
-    (propagated-inputs `(("emacs-xr" ,emacs-xr)))
+    (propagated-inputs (list emacs-xr))
     (home-page "https://github.com/mattiase/relint")
     (synopsis "Elisp regexp mistake finder")
     (description
@@ -1974,83 +2006,71 @@ or unexpected behavior inside an elisp configuration file (typically
   (package
     (name "emacs-w3m")
     (version "2018-11-11")
-    (source (origin
-              (method cvs-fetch)
-              (uri (cvs-reference
-                    (root-directory
-                     ":pserver:anonymous@cvs.namazu.org:/storage/cvsroot")
-                    (module "emacs-w3m")
-                    (revision version)))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "0nvahdbjs12zg7zsk4gql02mvnv56cf1rwj2f5p42lwp3xvswiwp"))))
+    (source
+     (origin
+       (method cvs-fetch)
+       (uri (cvs-reference
+             (root-directory
+              ":pserver:anonymous@cvs.namazu.org:/storage/cvsroot")
+             (module "emacs-w3m")
+             (revision version)))
+       (file-name (string-append name "-" version "-checkout"))
+       (sha256
+        (base32 "0nvahdbjs12zg7zsk4gql02mvnv56cf1rwj2f5p42lwp3xvswiwp"))))
     (build-system gnu-build-system)
-    (native-inputs `(("autoconf" ,autoconf)
-                     ("texinfo" ,texinfo)
-                     ("emacs" ,emacs-minimal)))
-    (inputs `(("w3m" ,w3m)
-              ("imagemagick" ,imagemagick)))
+    (native-inputs (list autoconf texinfo emacs-minimal))
+    (inputs (list w3m imagemagick))
     (arguments
-     `(#:modules ((guix build gnu-build-system)
+     (list
+      #:modules '((guix build gnu-build-system)
                   ((guix build emacs-build-system) #:prefix emacs:)
                   (guix build utils)
                   (guix build emacs-utils))
-       #:imported-modules (,@%gnu-build-system-modules
+      #:imported-modules `(,@%gnu-build-system-modules
                            (guix build emacs-build-system)
                            (guix build emacs-utils))
-       #:configure-flags
-       (let ((out (assoc-ref %outputs "out")))
-         (list (string-append "--with-lispdir="
-                              (emacs:elpa-directory out))
-               (string-append "--with-icondir="
-                              out "/share/images/emacs-w3m")
-               ;; Leave .el files uncompressed, otherwise GC can't
-               ;; identify run-time dependencies.  See
-               ;; <http://lists.gnu.org/archive/html/guix-devel/2015-12/msg00208.html>
-               "--without-compress-install"))
-       #:tests? #f                              ; no check target
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'autoconf
-           (lambda _
-             (invoke "autoconf")))
-         (add-before 'configure 'support-emacs!
-           (lambda _
-             ;; For some reason 'AC_PATH_EMACS' thinks that 'Emacs 26' is
-             ;; unsupported.
-             (substitute* "configure"
-               (("EMACS_FLAVOR=unsupported")
-                "EMACS_FLAVOR=emacs"))
-             #t))
-         (add-before 'build 'patch-exec-paths
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out"))
-                   (w3m (assoc-ref inputs "w3m"))
-                   (imagemagick (assoc-ref inputs "imagemagick"))
-                   (coreutils (assoc-ref inputs "coreutils")))
-               (make-file-writable "w3m.el")
-               (emacs-substitute-variables "w3m.el"
-                 ("w3m-command" (string-append w3m "/bin/w3m"))
-                 ("w3m-touch-command"
-                  (string-append coreutils "/bin/touch"))
-                 ("w3m-icon-directory"
-                  (string-append out "/share/images/emacs-w3m")))
-               (make-file-writable "w3m-image.el")
-               (emacs-substitute-variables "w3m-image.el"
-                 ("w3m-imagick-convert-program"
-                  (string-append imagemagick "/bin/convert"))
-                 ("w3m-imagick-identify-program"
-                  (string-append imagemagick "/bin/identify")))
-               #t)))
-         (replace 'install
-           (lambda* (#:key outputs #:allow-other-keys)
-             (invoke "make" "install" "install-icons")
-             (with-directory-excursion
-                 (emacs:elpa-directory (assoc-ref outputs "out"))
-               (for-each delete-file '("ChangeLog" "ChangeLog.1"))
-               (symlink "w3m-load.el" "w3m-autoloads.el")
-               #t))))))
+      #:configure-flags
+      #~(list (string-append "--with-lispdir=" (emacs:elpa-directory #$output))
+              (string-append "--with-icondir="
+                             #$output "/share/images/emacs-w3m")
+              ;; Leave .el files uncompressed, otherwise GC can't
+              ;; identify run-time dependencies.  See
+              ;; <http://lists.gnu.org/archive/html/guix-devel/2015-12/msg00208.html>
+              "--without-compress-install")
+      #:tests? #f                       ; no check target
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'autoconf
+            (lambda _
+              (invoke "autoconf")))
+          (add-before 'configure 'support-emacs!
+            (lambda _
+              ;; For some reason 'AC_PATH_EMACS' thinks that 'Emacs 26' is
+              ;; unsupported.
+              (substitute* "configure"
+                (("EMACS_FLAVOR=unsupported") "EMACS_FLAVOR=emacs"))))
+          (add-before 'build 'patch-exec-paths
+            (lambda* (#:key inputs outputs #:allow-other-keys)
+              (let ((out (assoc-ref outputs "out")))
+                (make-file-writable "w3m.el")
+                (emacs-substitute-variables "w3m.el"
+                  ("w3m-command" (search-input-file inputs "/bin/w3m"))
+                  ("w3m-touch-command" (search-input-file inputs "/bin/touch"))
+                  ("w3m-icon-directory"
+                   (string-append out "/share/images/emacs-w3m")))
+                (make-file-writable "w3m-image.el")
+                (emacs-substitute-variables "w3m-image.el"
+                  ("w3m-imagick-convert-program"
+                   (search-input-file inputs "/bin/convert"))
+                  ("w3m-imagick-identify-program"
+                   (search-input-file inputs "/bin/identify"))))))
+          (replace 'install
+            (lambda* (#:key outputs #:allow-other-keys)
+              (invoke "make" "install" "install-icons")
+              (with-directory-excursion
+                  (emacs:elpa-directory (assoc-ref outputs "out"))
+                (for-each delete-file '("ChangeLog" "ChangeLog.1"))
+                (symlink "w3m-load.el" "w3m-autoloads.el")))))))
     (home-page "http://emacs-w3m.namazu.org/")
     (synopsis "Simple Web browser for Emacs based on w3m")
     (description
@@ -2061,25 +2081,25 @@ or unexpected behavior inside an elisp configuration file (typically
   (package
     (name "emacs-wget")
     (version "0.5.0")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "mirror://debian/pool/main/w/wget-el/wget-el_"
-                                  version ".orig.tar.gz"))
-              (sha256
-               (base32 "10byvyv9dk0ib55gfqm7bcpxmx2qbih1jd03gmihrppr2mn52nff"))))
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://debian/pool/main/w/wget-el/wget-el_"
+                           version ".orig.tar.gz"))
+       (sha256
+        (base32 "10byvyv9dk0ib55gfqm7bcpxmx2qbih1jd03gmihrppr2mn52nff"))))
     (build-system emacs-build-system)
-    (inputs `(("wget" ,wget)))
-    (native-inputs `(("emacs" ,emacs-minimal)))
+    (inputs (list wget))
+    (native-inputs
+     (list emacs-minimal))
     (arguments
-     `(#:tests? #f  ; no check target
+     `(#:tests? #f                      ;no check target
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-exec-paths
            (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let ((wget (assoc-ref inputs "wget")))
-               (emacs-substitute-variables "wget.el"
-                 ("wget-command" (string-append wget "/bin/wget"))))
-             #t)))))
+             (emacs-substitute-variables "wget.el"
+               ("wget-command" (search-input-file inputs "/bin/wget"))))))))
     (home-page "https://www.emacswiki.org/emacs/EmacsWget")
     (synopsis "Simple file downloader for Emacs based on wget")
     (description
@@ -2118,14 +2138,14 @@ incrementally confined in Isearch manner.")
 (define emacs-emms-print-metadata
   (package
     (name "emacs-emms-print-metadata")
-    (version "7.7")
+    (version "8")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/"
                            "emms-" version ".tar"))
        (sha256
-        (base32 "0n9nx4wgjxkr8nsxcq8svg0x0qkqj7bsd2j0ihy4jzj29xmyxl0h"))))
+        (base32 "1iffh6n8q9xag25m9bgnpywa27bkdvvz2gr500hdgwwddgdm4pq8"))))
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags '("emms-print-metadata")
@@ -2139,10 +2159,9 @@ incrementally confined in Isearch manner.")
                (install-file "src/emms-print-metadata"
                              (string-append out "/bin"))
                (install-file "emms-print-metadata.1"
-                             (string-append out "/share/man/man1"))
-               #t))))))
+                             (string-append out "/share/man/man1"))))))))
     (inputs
-     `(("taglib" ,taglib)))
+     (list taglib))
     (home-page "https://www.gnu.org/software/emms/")
     (synopsis "The Emacs Multimedia System")
     (description
@@ -2164,65 +2183,56 @@ light user interface.")
          (add-after 'unpack 'set-external-programs
            ;; Specify the absolute file names of the various programs
            ;; so that everything works out-of-the-box. (tinytag missing)
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let ((out     (assoc-ref outputs "out"))
-                   (emms-print-metadata (assoc-ref inputs "emms-print-metadata"))
-                   (flac    (assoc-ref inputs "flac"))
-                   (vorbis  (assoc-ref inputs "vorbis-tools"))
-                   (alsa    (assoc-ref inputs "alsa-utils"))
-                   (mpg321  (assoc-ref inputs "mpg321"))
-                   (mp3info (assoc-ref inputs "mp3info"))
-                   (mutagen (assoc-ref inputs "mutagen"))
-                   (exiftool (assoc-ref inputs "perl-image-exiftool"))
-                   (opus    (assoc-ref inputs "opus-tools")))
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((amixer (search-input-file inputs "/bin/amixer"))
+                   (emms-print-metadata
+                    (search-input-file inputs "/bin/emms-print-metadata"))
+                   (exiftool (search-input-file inputs "/bin/exiftool"))
+                   (metaflac (search-input-file inputs "/bin/metaflac"))
+                   (mp3info (search-input-file inputs "/bin/mp3info"))
+                   (mpg321 (search-input-file inputs "/bin/mpg321"))
+                   (mid3v2 (search-input-file inputs "/bin/mid3v2"))
+                   (ogg123 (search-input-file inputs "/bin/ogg123"))
+                   (ogginfo (search-input-file inputs "/bin/ogginfo"))
+                   (opusinfo (search-input-file inputs "/bin/opusinfo"))
+                   (vorbiscomment (search-input-file inputs "/bin/vorbiscomment")))
                (emacs-substitute-variables "emms-player-mpg321-remote.el"
                  ("emms-player-mpg321-remote-command"
                   (string-append mpg321 "/bin/mpg321")))
                (substitute* "emms-player-simple.el"
-                 (("\"ogg123\"")
-                  (string-append "\"" vorbis "/bin/ogg123\"")))
+                 (("\"ogg123\"") (string-append "\"" ogg123 "\"")))
                (substitute* "emms-player-simple.el"
-                 (("\"mpg321\"")
-                  (string-append "\"" mpg321 "/bin/mpg321\"")))
+                 (("\"mpg321\"") (string-append "\"" mpg321 "\"")))
                (emacs-substitute-variables "emms-info-ogginfo.el"
-                 ("emms-info-ogginfo-program-name"
-                  (string-append vorbis "/bin/ogginfo")))
+                 ("emms-info-ogginfo-program-name" ogginfo))
                (emacs-substitute-variables "emms-info-opusinfo.el"
-                 ("emms-info-opusinfo-program-name"
-                  (string-append opus "/bin/opusinfo")))
+                 ("emms-info-opusinfo-program-name" opusinfo))
                (emacs-substitute-variables "emms-info-libtag.el"
-                 ("emms-info-libtag-program-name"
-                  (string-append emms-print-metadata "/bin/emms-print-metadata")))
+                 ("emms-info-libtag-program-name" emms-print-metadata))
                (emacs-substitute-variables "emms-info-mp3info.el"
-                 ("emms-info-mp3info-program-name"
-                  (string-append mp3info "/bin/mp3info")))
+                 ("emms-info-mp3info-program-name" mp3info))
                (emacs-substitute-variables "emms-info-metaflac.el"
-                 ("emms-info-metaflac-program-name"
-                  (string-append flac "/bin/metaflac")))
+                 ("emms-info-metaflac-program-name" metaflac))
                (emacs-substitute-variables "emms-source-file.el"
                  ("emms-source-file-gnu-find" (which "find")))
                (substitute* "emms-volume-amixer.el"
-                 (("\"amixer\"")
-                  (string-append "\"" alsa "/bin/amixer\"")))
+                 (("\"amixer\"") (string-append "\"" amixer "\"")))
                (substitute* "emms-tag-editor.el"
-                 (("\"mid3v2\"")
-                  (string-append "\"" mutagen "/bin/mid3v2\""))
+                 (("\"mid3v2\"") (string-append "\"" mid3v2 "\""))
                  (("\"vorbiscomment\"")
-                  (string-append "\"" vorbis "/bin/vorbiscomment\"")))
+                  (string-append "\"" vorbiscomment "\"")))
                (substitute* "emms-info-exiftool.el"
-                 (("\"exiftool\"")
-                  (string-append "\"" exiftool "/bin/exiftool\"")))
-               #t))))))
+                 (("\"exiftool\"") (string-append "\"" exiftool "\"")))))))))
     (inputs
-     `(("emms-print-metadata" ,emacs-emms-print-metadata)
-       ("alsa-utils" ,alsa-utils)
-       ("flac" ,flac)                   ;for metaflac
-       ("vorbis-tools" ,vorbis-tools)
-       ("mpg321" ,mpg321)
-       ("mp3info" ,mp3info)
-       ("mutagen" ,python-mutagen)
-       ("perl-image-exiftool" ,perl-image-exiftool)
-       ("opus-tools" ,opus-tools)))))
+     (list emacs-emms-print-metadata
+           alsa-utils
+           flac                         ;for metaflac
+           vorbis-tools
+           mpg321
+           mp3info
+           python-mutagen
+           perl-image-exiftool
+           opus-tools))))
 
 (define-public emacs-emms-mode-line-cycle
   (package
@@ -2240,7 +2250,7 @@ light user interface.")
          "0q80f0plch6k4lhs8c9qm3mfycfbp3kn5sjrk9zxgxwnn901y9mp"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emms" ,emacs-emms)))
+     (list emacs-emms))
     (home-page "https://github.com/momomo5717/emms-mode-line-cycle")
     (synopsis "Display the EMMS mode line as a ticker")
     (description
@@ -2269,7 +2279,7 @@ within a specified width.  It is useful for displaying long track titles.")
          "147dz79vg4ym5wg3d544bw2khdb2j3hr73rw4qfm64wf0q2dj0vk"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-avy" ,emacs-avy)))
+     (list emacs-avy))
     (home-page "https://github.com/abo-abo/ace-link")
     (synopsis "Quickly follow links in Emacs")
     (description
@@ -2295,7 +2305,7 @@ letter to each link using avy.")
        (sha256
         (base32 "1rhdvrj2rjbvl7vkb0wcp6krqxcaigl7jk9z8yvhx6s4cm2qli6q"))))
     (propagated-inputs
-     `(("emacs-f" ,emacs-f)))
+     (list emacs-f))
     (build-system emacs-build-system)
     (home-page "https://github.com/ncaq/auto-sudoedit")
     (synopsis "Automatically re-open read-only files with sudo")
@@ -2370,7 +2380,7 @@ mode, Rmail, Gnus, MH-E, and VM).  BBDB is fully customizable.")
        (sha256
         (base32 "0bki658mvlchqf3prkzxz4217a95cxm58c1qmf84yp2n8h6gd0d8"))))
     (build-system emacs-build-system)
-    (propagated-inputs `(("emacs-ivy" ,emacs-ivy)))
+    (propagated-inputs (list emacs-ivy))
     (home-page "https://github.com/redguardtoo/counsel-bbdb")
     (synopsis "Ivy interface for BBDB")
     (description "This Ivy extension enables the use of @code{ivy-mode} to input
@@ -2388,20 +2398,19 @@ you can press @samp{C-M-n} to input multiple email addresses.")
 (define-public emacs-bluetooth
   (package
     (name "emacs-bluetooth")
-    (version "0.2")
+    (version "0.3")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/"
-                           "bluetooth-" version ".el"))
+                           "bluetooth-" version ".tar"))
        (sha256
-        (base32 "1dq04p6ms0zx4awlypp4crkz7dzal4xg8ac7p8fqacz196rczssp"))))
+        (base32 "1q27hk4j7k0q9vqgn9nq7q0vhn9jdqbygs7d9lv5gwfhdzdnl4az"))))
     (build-system emacs-build-system)
     (inputs
-     `(("bluez" ,bluez)
-       ("dbus" ,dbus)))
+     (list bluez dbus))
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)))
+     (list emacs-dash))
     (home-page "https://gitlab.com/rstocker/emacs-bluetooth")
     (synopsis "Manage Bluetooth devices using Emacs")
     (description
@@ -2460,7 +2469,7 @@ is set.")
 (define-public emacs-ctrlf
   (package
     (name "emacs-ctrlf")
-    (version "1.3")
+    (version "1.4")
     (source
      (origin
        (method git-fetch)
@@ -2469,7 +2478,7 @@ is set.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "06wq6scqy2ax0h6aahy2r7hn3bbmkzl4w99bkrc3cqd4ij78sc8g"))))
+        (base32 "04w708g7d1pnsc18h8fjyqkhk08jkq853alaidriamxyycvdwk0i"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/raxod502/ctrlf/")
     (synopsis "Single-buffer text search in Emacs")
@@ -2500,7 +2509,7 @@ web browsers, but follows the flow and keybindings of Isearch.")
           (base32 "1wggg8jlzg9rph4jhxp6yiri178rnasbv38838i973kjgqjxrl76"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-reformatter" ,emacs-reformatter)))
+       (list emacs-reformatter))
       (home-page "https://github.com/psibi/dhall-mode")
       (synopsis "Major mode for working with Dhall configuration language")
       (description
@@ -2518,8 +2527,8 @@ configuration language. It features:
 
 (define-public emacs-link-hint
   ;; Last release was in 2015.
-  (let ((commit "9fbf196d155016d9b8471a99318ed67a086cf257")
-        (revision "3"))
+  (let ((commit "83cd0489b16f013647d0507ef20905a0a91db433")
+        (revision "4"))
     (package
       (name "emacs-link-hint")
       (version (git-version "0.1" revision commit))
@@ -2532,10 +2541,10 @@ configuration language. It features:
          (file-name (git-file-name name version))
          (sha256
           (base32
-           "0v2g9gzf2v88ag59q1pf5vhd4qjnz3g4i6gzl27k6fi7pvlxdn39"))))
+           "0kwaia6i0asr7yqcw1anzq6lf93357cc1fphkvp0llbmxizmkzb3"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-avy" ,emacs-avy)))
+       (list emacs-avy))
       (home-page "https://github.com/noctuid/link-hint.el")
       (synopsis "Vimperator-style link-hinting in Emacs")
       (description "This package provides commands for visiting and acting on
@@ -2546,15 +2555,15 @@ links.")
   (package
     (name "emacs-ag")
     (version "0.48")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/Wilfred/ag.el")
-                    (commit version)))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1p918y24vcn2pdliaymd210xp9fvhd4a1srqbv2lfiqrh59yjidx"))))
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/Wilfred/ag.el")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1p918y24vcn2pdliaymd210xp9fvhd4a1srqbv2lfiqrh59yjidx"))))
     (build-system emacs-build-system)
     (arguments
      `(#:phases
@@ -2567,16 +2576,13 @@ links.")
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out  (assoc-ref outputs "out"))
                     (info (string-append out "/share/info")))
-               (install-file "docs/_build/texinfo/agel.info" info)
-               #t))))))
+               (install-file "docs/_build/texinfo/agel.info" info)))))))
     (native-inputs
-     `(("python-sphinx" ,python-sphinx)
-       ("texinfo" ,texinfo)))
+     (list python-sphinx texinfo))
     (propagated-inputs
-     `(("dash" ,emacs-dash)
-       ("s" ,emacs-s)
-       ;; We need to use 'ag' as the executable on remote systems.
-       ("the-silver-searcher" ,the-silver-searcher)))
+     (list emacs-dash
+           emacs-s
+           the-silver-searcher))        ;'ag' executable
     (home-page "https://github.com/Wilfred/ag.el")
     (synopsis "Front-end for ag (the-silver-searcher) for Emacs")
     (description "This package provides the ability to use the silver
@@ -2612,14 +2618,14 @@ as a library for other Emacs packages.")
 (define-public emacs-auctex
   (package
     (name "emacs-auctex")
-    (version "13.0.14")
+    (version "13.0.16")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/"
                            "auctex-" version ".tar"))
        (sha256
-        (base32 "1gmqdcg9s6xf8kvzh1j27nbimakd5cy8pwsn0il19l026kxjimr8"))))
+        (base32 "1r9piq4js45knw8sf73kk8jjinmx4m2mdinc98xrklnwcffw7hjf"))))
     (build-system emacs-build-system)
     ;; We use 'emacs' because AUCTeX requires dbus at compile time
     ;; ('emacs-minimal' does not provide dbus).
@@ -2633,17 +2639,17 @@ as a library for other Emacs packages.")
            (lambda* (#:key inputs #:allow-other-keys)
              (emacs-substitute-variables "preview.el"
                ("preview-gs-command"
-                (string-append (assoc-ref inputs "ghostscript") "/bin/gs")))
+                (search-input-file inputs "/bin/gs")))
              (substitute* "preview.el"
                (("\"dvipng ")
-                (string-append "\"" (assoc-ref inputs "texlive")
-                               "/bin/dvipng "))
+                (let ((dvipng (search-input-file inputs "/bin/dvipng")))
+                  (string-append "\"" dvipng " ")))
                (("\"dvips ")
-                (string-append "\"" (assoc-ref inputs "texlive")
-                               "/bin/dvips "))
+                (let ((dvips (search-input-file inputs "/bin/dvips")))
+                  (string-append "\"" dvips " ")))
                (("\"pdf2dsc ")
-                (string-append "\"" (assoc-ref inputs "ghostscript")
-                               "/bin/pdf2dsc ")))))
+                (let ((pdf2dsc (search-input-file inputs "/bin/pdf2dsc")))
+                  (string-append "\"" pdf2dsc " "))))))
          (add-after 'install 'install-doc
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -2653,13 +2659,12 @@ as a library for other Emacs packages.")
                  (setenv "HOME" (getenv  "TMPDIR")) ; for mktextfm
                  (invoke "pdftex" "tex-ref")
                  (install-file "tex-ref.pdf"
-                               (string-append etc-dir "/refcards")))
-               #t))))))
+                               (string-append etc-dir "/refcards")))))))))
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (inputs
-     `(("ghostscript" ,ghostscript)
-       ("texlive" ,(texlive-union (list texlive-amsfonts/patched)))))
+     (list ghostscript
+           (texlive-updmap.cfg (list texlive-amsfonts))))
     (home-page "https://www.gnu.org/software/auctex/")
     (synopsis "Integrated environment for TeX")
     (description
@@ -2684,7 +2689,7 @@ or XEmacs.")
          "0cd2pqh6k32sjidkcd8682y4l6mx52xw4a05f38kk8nsrk28m74k"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)))
+     (list emacs-dash))
     (home-page "https://github.com/sebastiansturm/autothemer")
     (synopsis "Conveniently create Emacs themes")
     (description
@@ -2706,7 +2711,7 @@ a set of simplified face specifications and a user-supplied color palette")
         (base32 "11k0dzwyn7ly34g0zcd6i0i8qwyv9di8m6fx805axrxykxb0qan2"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("emacs" ,emacs-minimal)))
+     (list emacs-minimal))
     (arguments
      `(#:configure-flags
        (list (string-append "--with-howmdir=" (emacs:elpa-directory %output)))
@@ -2763,7 +2768,7 @@ the ability to jump forward and backward to the next bookmark.")
          "0r42cagvmvvib76kd15nd9ix55ys6i549vxnls4z16s864695zpa"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-howm" ,emacs-howm)))
+     (list emacs-howm))
     (home-page "https://github.com/kiwanami/emacs-calfw/")
     (synopsis "Calendar framework for Emacs")
     (description
@@ -2850,13 +2855,9 @@ Lock key.")
                  (for-each (lambda (f) (install-file f doc))
                            (cons* "../UNLICENSE"
                                   "../WTFPL"
-                                  (find-files "." "\\.md$")))))
-             #t)))))
+                                  (find-files "." "\\.md$"))))))))))
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-s" ,emacs-s)
-       ("emacs-spark" ,emacs-spark)
-       ("emacs-ts" ,emacs-ts)))
+     (list emacs-dash emacs-s emacs-spark emacs-ts))
     (home-page "https://github.com/contrapunctus-1/chronometrist")
     (synopsis "Time tracker for Emacs")
     (description "Chronometrist is a time tracker in Emacs, largely modelled
@@ -2874,42 +2875,41 @@ Its features are:
     (license (list license:unlicense license:wtfpl2))))
 
 (define-public emacs-citeproc-el
-  ;; XXX: This commit includes a fix for an API change in libxml.
-  (let ((commit "893bcb8dcb48ac9850841b58c7b64c1969e6f3de")
-        (revision "0"))
-    (package
-      (name "emacs-citeproc-el")
-      (version (git-version "0.1.2" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/andras-simonyi/citeproc-el")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32 "0xfkp8dccflas5ps30g3fw1vifn8pp9h9cyvxr1pcmyqr9rivy8f"))))
-      (build-system emacs-build-system)
-      (arguments
-       `(#:emacs ,emacs))               ;need libxml support
-      (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)
-         ("emacs-f" ,emacs-f)
-         ("emacs-queue" ,emacs-queue)
-         ("emacs-s" ,emacs-s)))
-      (home-page "https://github.com/andras-simonyi/citeproc-el")
-      (synopsis "Citation Style Language (CSL) processor for Emacs")
-      (description
-       "Citeproc-el is an Emacs Lisp library for rendering citations
+  (package
+    (name "emacs-citeproc-el")
+    (version "0.9")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/andras-simonyi/citeproc-el")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1m5j1abyk68f3d1v781yrx2xkg42vyfgfckbj2yk2lgk6d7rz0p1"))))
+    (build-system emacs-build-system)
+    (arguments
+     `(#:emacs ,emacs))                 ;need libxml support
+    (propagated-inputs
+     (list emacs-dash
+           emacs-f
+           emacs-parsebib
+           emacs-queue
+           emacs-s
+           emacs-string-inflection))
+    (home-page "https://github.com/andras-simonyi/citeproc-el")
+    (synopsis "Citation Style Language (CSL) processor for Emacs")
+    (description
+     "Citeproc-el is an Emacs Lisp library for rendering citations
 and bibliographies in styles described in the Citation Style
 Language (CSL), an XML-based, open format to describe the formatting
 of bibliographic references.")
-      (license license:gpl3+))))
+    (license license:gpl3+)))
 
 (define-public emacs-corfu
   (package
     (name "emacs-corfu")
-    (version "0.11")
+    (version "0.17")
     (source
      (origin
        (method git-fetch)
@@ -2918,7 +2918,7 @@ of bibliographic references.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0x4aa5fk1ywlfs8gvwj3v2bycyl4nx7mzz1ci37x69bdjl9wal80"))))
+        (base32 "1jj38ik0mr33kqpc1i6hw5hqw43lz9f4nn8zsmw03crlcjf767lh"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/minad/corfu")
     (synopsis "Completion overlay region function")
@@ -2928,10 +2928,34 @@ overlay below or above the point.  Corfu can be considered the minimalistic
 @code{completion-in-region} counterpart of the Vertico minibuffer UI.")
     (license license:gpl3+)))
 
+(define-public emacs-cape
+  (package
+    (name "emacs-cape")
+    (version "0.5")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/minad/cape")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0780qymlrg3glyxypizqzwicp5ly5xavxgpmayhx8cxlgp2zlkjh"))))
+    (build-system emacs-build-system)
+    (home-page "https://github.com/minad/cape")
+    (synopsis "Completion at point extensions for Emacs")
+    (description
+     "Cape provides some Completion At Point Extensions, which can be used in
+combination with Corfu completion UI or the default completion UI.  The
+completion backends used by @code{completion-at-point} are so called
+@code{completion-at-point-functions} (Capfs).  In principle, the Capfs
+provided by Cape can also be used by Company.")
+    (license license:gpl3+)))
+
 (define-public emacs-direnv
   (package
     (name "emacs-direnv")
-    (version "2.1.0")
+    (version "2.2.0")
     (source
      (origin
        (method git-fetch)
@@ -2940,23 +2964,20 @@ overlay below or above the point.  Corfu can be considered the minimalistic
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0xkqn4604k2imas6azy1www56br8ls4iv9a44pxcd8h94j1fp44d"))))
+        (base32 "0cf5npgksl9a03mnfdhfdhlf46gr9qz9adjxz3dbckq9b1vl0dfc"))))
     (build-system emacs-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-in-direnv
            (lambda* (#:key inputs #:allow-other-keys)
-             (let* ((direnv-path (assoc-ref inputs "direnv"))
-                    (direnv-bin (string-append
-                                 "\"" direnv-path "/bin/direnv\"")))
+             (let ((direnv (search-input-file inputs "/bin/direnv")))
                (substitute* "direnv.el"
-                 (("\"direnv\"") direnv-bin))))))))
+                 (("\"direnv\"") (string-append "\"" direnv "\"")))))))))
     (inputs
-     `(("direnv" ,direnv)))
+     (list direnv))
     (propagated-inputs
-     `(("dash" ,emacs-dash)
-       ("with-editor" ,emacs-with-editor)))
+     (list emacs-dash emacs-with-editor))
     (home-page "https://github.com/wbolster/emacs-direnv")
     (synopsis "Direnv integration for Emacs")
     (description
@@ -2994,18 +3015,18 @@ that the binary uses instead of the actual binary contents.")
 (define-public emacs-form-feed
   (package
     (name "emacs-form-feed")
-    (version "0.2.2")
+    (version "0.2.3")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://github.com/wasamasa/form-feed")
+             (url "https://depp.brause.cc/form-feed.git")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "171jna631b2iqcimfsik9c66gii8nc0zdb58m077w00rn7rcxbh2"))))
+        (base32 "10mcj4x2fjq0ikq9adkd72k9zp6caqib628bmj8d67wwabvzj6mk"))))
     (build-system emacs-build-system)
-    (home-page "https://github.com/wasamasa/form-feed")
+    (home-page "https://depp.brause.cc/form-feed")
     (synopsis "Display ^L glyphs as horizontal lines")
     (description
      "This package provides a minor mode @code{form-feed-mode} to display page
@@ -3028,7 +3049,7 @@ into mode hooks and is intended to be used that way.")
          "0p79x9g94jynl83ndvqp9349vhgkzxzhnc517r8hn44iqxqf6ghg"))))
     (build-system emacs-build-system)
     (inputs
-     `(("global" ,global)))
+     (list global))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -3037,8 +3058,7 @@ into mode hooks and is intended to be used that way.")
              (chmod "ggtags.el" #o644)
              (emacs-substitute-variables "ggtags.el"
                ("ggtags-executable-directory"
-                (string-append (assoc-ref inputs "global") "/bin")))
-             #t)))))
+                (dirname (search-input-file inputs "bin/global")))))))))
     (home-page "https://github.com/leoliu/ggtags")
     (synopsis "Frontend to the GNU Global source code tagging system")
     (description "@code{ggtags} provides a frontend to the GNU Global source
@@ -3144,7 +3164,7 @@ directly inside Emacs.  It requires a Google Map Static API key to function.")
              (with-directory-excursion "texinfo"
                (substitute* "Makefile"
                  (("\\/usr\\/bin\\/gzip")
-                  (string-append (assoc-ref inputs "gzip") "/bin/gzip")))
+                  (search-input-file inputs "/bin/gzip")))
                (invoke "make"
                        "clean"
                        "info"
@@ -3158,10 +3178,9 @@ directly inside Emacs.  It requires a Google Map Static API key to function.")
                (install-file "texinfo/graphviz-dot-mode.info.gz" info)
                #t))))))
     (native-inputs
-     `(("gzip" ,gzip)
-       ("texinfo" ,texinfo)))
+     (list gzip texinfo))
     (propagated-inputs
-     `(("emacs-company" ,emacs-company)))
+     (list emacs-company))
     (home-page "http://ppareit.github.com/graphviz-dot-mode")
     (synopsis "Major mode for editing Graphviz DOT files")
     (description
@@ -3270,8 +3289,7 @@ filters, new key bindings and faces.  It can be enabled by
        (sha256
         (base32 "0z2qk1v4qkvcwl27ycqfb8vyszq5v6b8ci29b4la00yaki16p04i"))))
     (build-system emacs-build-system)
-    (inputs `(("djview" ,djview)
-              ("djvulibre" ,djvulibre)))
+    (inputs (list djview djvulibre))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -3315,8 +3333,7 @@ DjVuLibre, see @url{http://djvu.sourceforge.net/}.")
           (base32
            "0p0izjrgbayx5ybk1n6db5hbrjv9d4kpn57w4iyxdm3h96sp9cmr"))))
       (propagated-inputs
-       `(("emacs-djvu" ,emacs-djvu)
-         ("emacs-tablist" ,emacs-tablist)))
+       (list emacs-djvu emacs-tablist))
       (build-system emacs-build-system)
       (home-page "https://github.com/dalanicolai/djvu3")
       (synopsis "Extend djvu.el to display annotations and more")
@@ -3361,86 +3378,74 @@ during idle time, while Emacs is doing nothing else.")
     (license license:gpl3+)))
 
 (define-public emacs-pdf-tools
-  ;; XXX: Development branch fixes an incompatibility with Emacs 27+.  See
-  ;; <https://github.com/politza/pdf-tools/issues/616>.
-  (let ((commit "5f77dae43eb8f71e52e10ba8cf994883f74c3fb7")
-        (revision "2"))
-    (package
-      (name "emacs-pdf-tools")
-      (version (git-version "0.90" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/vedang/pdf-tools")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32 "0hzqcnxi66d0c3dq7y3dn28f3yri4zcx46yylhy0xnm3f1yja0rm"))))
-      (build-system gnu-build-system)
-      (arguments
-       `(#:tests? #f                    ; there are no tests
-         #:modules ((guix build gnu-build-system)
-                    ((guix build emacs-build-system) #:prefix emacs:)
-                    (guix build utils)
-                    (guix build emacs-utils))
-         #:imported-modules (,@%gnu-build-system-modules
-                             (guix build emacs-build-system)
-                             (guix build emacs-utils))
-         #:phases
-         (modify-phases %standard-phases
-           ;; Build server side using 'gnu-build-system'.
-           (add-after 'unpack 'enter-server-dir
-             (lambda _ (chdir "server") #t))
-           (add-after 'enter-server-dir 'autogen
-             (lambda _
-               (invoke "bash" "autogen.sh")))
-
-           ;; Build emacs side using 'emacs-build-system'.
-           (add-after 'compress-documentation 'enter-lisp-dir
-             (lambda _ (chdir "../lisp") #t))
-           (add-after 'enter-lisp-dir 'emacs-patch-variables
-             (lambda* (#:key outputs #:allow-other-keys)
-               (for-each make-file-writable (find-files "."))
+  (package
+    (name "emacs-pdf-tools")
+    (version "0.91")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/vedang/pdf-tools")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "07ixspgn4s1jg66w7m2f3sh43giakz9srhp7rpw389z32g57i1rx"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f                      ; there are no tests
+       #:modules ((guix build gnu-build-system)
+                  ((guix build emacs-build-system) #:prefix emacs:)
+                  (guix build utils)
+                  (guix build emacs-utils))
+       #:imported-modules (,@%gnu-build-system-modules
+                           (guix build emacs-build-system)
+                           (guix build emacs-utils))
+       #:phases
+       (modify-phases %standard-phases
+         ;; Build server side using 'gnu-build-system'.
+         (add-after 'unpack 'enter-server-dir
+           (lambda _ (chdir "server")))
+         (add-after 'enter-server-dir 'autogen
+           (lambda _
+             (invoke "bash" "autogen.sh")))
+         ;; Build emacs side using 'emacs-build-system'.
+         (add-after 'compress-documentation 'enter-lisp-dir
+           (lambda _ (chdir "../lisp")))
+         (add-after 'enter-lisp-dir 'emacs-patch-variables
+           (lambda* (#:key outputs #:allow-other-keys)
+             (for-each make-file-writable (find-files "."))
 
-               ;; Set path to epdfinfo program.
-               (emacs-substitute-variables "pdf-info.el"
-                 ("pdf-info-epdfinfo-program"
-                  (string-append (assoc-ref outputs "out")
-                                 "/bin/epdfinfo")))
-               ;; Set 'pdf-tools-handle-upgrades' to nil to avoid "auto
-               ;; upgrading" that pdf-tools tries to perform.
-               (emacs-substitute-variables "pdf-tools.el"
-                 ("pdf-tools-handle-upgrades" '()))))
-           (add-after 'emacs-patch-variables 'emacs-expand-load-path
-             (assoc-ref emacs:%standard-phases 'expand-load-path))
-           (add-after 'emacs-expand-load-path 'emacs-install
-             (assoc-ref emacs:%standard-phases 'install))
-           (add-after 'emacs-install 'emacs-build
-             (assoc-ref emacs:%standard-phases 'build))
-           (add-after 'emacs-install 'emacs-make-autoloads
-             (assoc-ref emacs:%standard-phases 'make-autoloads)))))
-      (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("pkg-config" ,pkg-config)
-         ("emacs" ,emacs-minimal)))
-      (inputs
-       `(("poppler" ,poppler)
-         ("cairo" ,cairo)
-         ("glib" ,glib)
-         ("libpng" ,libpng)
-         ("zlib" ,zlib)))
-      (propagated-inputs
-       `(("tablist" ,emacs-tablist)))
-      (home-page "https://github.com/politza/pdf-tools")
-      (synopsis "Emacs support library for PDF files")
-      (description
-       "PDF Tools is, among other things, a replacement of DocView for PDF
+             ;; Set path to epdfinfo program.
+             (emacs-substitute-variables "pdf-info.el"
+               ("pdf-info-epdfinfo-program"
+                (string-append (assoc-ref outputs "out")
+                               "/bin/epdfinfo")))
+             ;; Set 'pdf-tools-handle-upgrades' to nil to avoid "auto
+             ;; upgrading" that pdf-tools tries to perform.
+             (emacs-substitute-variables "pdf-tools.el"
+               ("pdf-tools-handle-upgrades" '()))))
+         (add-after 'emacs-patch-variables 'emacs-expand-load-path
+           (assoc-ref emacs:%standard-phases 'expand-load-path))
+         (add-after 'emacs-expand-load-path 'emacs-install
+           (assoc-ref emacs:%standard-phases 'install))
+         (add-after 'emacs-install 'emacs-build
+           (assoc-ref emacs:%standard-phases 'build))
+         (add-after 'emacs-install 'emacs-make-autoloads
+           (assoc-ref emacs:%standard-phases 'make-autoloads)))))
+    (native-inputs
+     (list autoconf automake emacs-minimal pkg-config))
+    (inputs
+     (list cairo glib libpng poppler zlib))
+    (propagated-inputs
+     (list emacs-tablist))
+    (home-page "https://github.com/politza/pdf-tools")
+    (synopsis "Emacs support library for PDF files")
+    (description
+     "PDF Tools is, among other things, a replacement of DocView for PDF
 files.  The key difference is that pages are not pre-rendered by
 e.g. ghostscript and stored in the file-system, but rather created on-demand
 and stored in memory.")
-      (license license:gpl3+))))
+    (license license:gpl3+)))
 
 (define-public emacs-saveplace-pdf-view
   (package
@@ -3501,7 +3506,7 @@ restore the saved place.")
                 "0sszdl4kvqbihdh8d7mybpp0d8yw2p3gyiipjcxz9xhvvmw3ww4x"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("dash" ,emacs-dash)))
+     (list emacs-dash))
     (home-page "https://notabug.org/alezost/emacs-bui")
     (synopsis "Buffer interface library for Emacs")
     (description
@@ -3527,40 +3532,36 @@ type, for example: packages, buffers, files, etc.")
                   "00xdxadbi9fxpfp60zah9190rcz3w08vl1blbhmaiy7c1hd2gi39"))))
       (build-system gnu-build-system)
       (arguments
-       `(#:modules ((guix build gnu-build-system)
+       (list
+        #:modules '((guix build gnu-build-system)
                     ((guix build emacs-build-system) #:prefix emacs:)
                     (guix build utils))
-         #:imported-modules (,@%gnu-build-system-modules
+        #:imported-modules `(,@%gnu-build-system-modules
                              (guix build emacs-build-system)
                              (guix build emacs-utils))
-         #:configure-flags
-         (list (string-append "--with-lispdir="
-                              (emacs:elpa-directory (assoc-ref %outputs "out"))))
-         #:phases
-         (modify-phases %standard-phases
-           (add-after 'unpack 'expand-load-path
-             (lambda _
-               ((assoc-ref emacs:%standard-phases 'expand-load-path)
-                #:prepend-source? #f)
-               #t)))))
+        #:configure-flags
+        #~(list (string-append "--with-lispdir="
+                               (emacs:elpa-directory #$output)))
+        #:phases
+        #~(modify-phases %standard-phases
+            (add-after 'unpack 'expand-load-path
+              (lambda _
+                ((assoc-ref emacs:%standard-phases 'expand-load-path)
+                 #:prepend-source? #f))))))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("pkg-config" ,pkg-config)
-         ("texinfo" ,texinfo)
-         ("emacs" ,emacs-minimal)))
+       (list autoconf automake emacs-minimal pkg-config texinfo))
       (inputs
        `(("guile"
           ,@(assoc-ref (package-native-inputs guix) "guile"))
          ("guix" ,guix)))
       (propagated-inputs
-       `(("geiser" ,emacs-geiser)
-         ("geiser-guile" ,emacs-geiser-guile)
-         ("guile-gcrypt" ,guile-gcrypt)
-         ("dash" ,emacs-dash)
-         ("bui" ,emacs-bui)
-         ("edit-indirect" ,emacs-edit-indirect)
-         ("magit-popup" ,emacs-magit-popup)))
+       (list emacs-bui
+             emacs-dash
+             emacs-edit-indirect
+             emacs-geiser
+             emacs-geiser-guile
+             emacs-magit-popup
+             guile-gcrypt))
       (home-page "https://emacs-guix.gitlab.io/website/")
       (synopsis "Emacs interface for GNU Guix")
       (description
@@ -3585,8 +3586,7 @@ management tasks from Emacs.  To begin with, run @code{M-x guix-about} or
                 "0i0bwbav5861j2y15j9nd5m9rdqg9q97zgcbld8pivr9nyxy63lz"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("bui" ,emacs-bui)
-       ("magit-popup" ,emacs-magit-popup)))
+     (list emacs-bui emacs-magit-popup))
     (home-page "https://notabug.org/alezost/emacs-build-farm")
     (synopsis "Emacs interface for Hydra and Cuirass build farms")
     (description
@@ -3611,7 +3611,7 @@ evaluations.  The entry point is @code{M-x build-farm} command.")
         (base32 "0vkl470vvmxap8ca773a0jvjvalmvdbbax3qvgjdclp54ml75al4"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-undercover" ,emacs-undercover)))
+     (list emacs-undercover))
     (home-page "https://github.com/Emacs-D-Mode-Maintainers/Emacs-D-Mode")
     (synopsis "Emacs major mode for editing D code")
     (description "This package provides an Emacs major mode for highlighting
@@ -3662,9 +3662,7 @@ running Extempore process, and more.")
           (base32 "0nk6jdy1y5mc3ryd0smiqghrk6iv34d5grc7f7migmshlbq0np92"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-expand-region"    ,emacs-expand-region)
-         ("emacs-multiple-cursors" ,emacs-multiple-cursors)
-         ("emacs-ryo-modal"        ,emacs-ryo-modal)))
+       (list emacs-expand-region emacs-multiple-cursors emacs-ryo-modal))
       (home-page "https://github.com/jmorag/kakoune.el")
       (synopsis "Emacs simple simulation, but not emulation, of Kakoune")
       (description "This package provides many, but not all of the editing
@@ -3759,16 +3757,16 @@ kmonad's configuration files (@file{.kbd}).")
 (define-public emacs-keycast
   (package
     (name "emacs-keycast")
-    (version "1.1.1")
+    (version "1.1.3")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://github.com/tarsius/keycast.git")
+             (url "https://github.com/tarsius/keycast")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "09xr0h2ag3pzlz455gv5h915vn1dz56gqx61jx3n7fc4a794pqxw"))))
+        (base32 "0s31b3kal4j08waa2fwz5d6269wsdywb60a7h4r5vzsrr238lks3"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/tarsius/keycast")
     (synopsis "Show current command and its key in the mode line")
@@ -3800,7 +3798,7 @@ a command.")
 (define-public emacs-olivetti
   (package
     (name "emacs-olivetti")
-    (version "2.0.3")
+    (version "2.0.4")
     (source
      (origin
        (method git-fetch)
@@ -3809,7 +3807,7 @@ a command.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0qhv4ah9bn1mjvivgxp7z1gf91d0cdr2ma5cy5xaja97ispa4l3z"))))
+        (base32 "0wc0rki4zvzdxs126g5c8d92h1vfn9slfkdx831rr9d0jx93wc7s"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/rnkn/olivetti")
     (synopsis "Emacs minor mode for a nice writing environment")
@@ -3832,7 +3830,7 @@ in the center.")
         (base32 "1khkwrrbwaimspc013n4k9mpv8g302r0zkrsqnza2x1d3qznn08y"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-queue" ,emacs-queue)))
+     (list emacs-queue))
     (home-page "https://www.dr-qubit.org/undo-tree.html")
     (synopsis "Treat undo history as a tree")
     (description
@@ -3963,7 +3961,7 @@ strings.")
           (base32 "0m90ddwm8j0y6d1ppqhd2gil1107k202blw6mzm5bdambn4nfqkf"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-markdown-mode" ,emacs-markdown-mode)))
+       (list emacs-markdown-mode))
       (home-page "https://github.com/vermiculus/sx.el")
       (synopsis "Emacs StackExchange client")
       (description
@@ -3971,10 +3969,35 @@ strings.")
 Stack Overflow, Super User, and other StackExchange sites.")
       (license license:gpl3+))))
 
+(define-public emacs-skempo
+  (package
+    (name "emacs-skempo")
+    (version "0.1.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/xFA25E/skempo")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0na465f27p6n64sf0pj0aqdi384m1wy3hxcc2d6a67hs39rkyvi9"))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     (list emacs-parent-mode))
+    (home-page "https://github.com/xFA25E/skempo")
+    (synopsis "Enhancements for skeleton/tempo + abbrev")
+    (description
+     "Skempo is an attempt to improve Emacs built-in Skeleton and Tempo
+templates.  It tries to make a unified syntax for template definitions.  It
+also adds tags and marks support for Skeleton, and Abbrev support for Tempo.")
+    (license license:gpl3+)))
+
 (define-public emacs-toc-org
   (package
     (name "emacs-toc-org")
-    (version "1.1.0")
+    (version "1.2.0")
     (source
      (origin
        (method git-fetch)
@@ -3983,7 +4006,7 @@ Stack Overflow, Super User, and other StackExchange sites.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0lk0rji85a1c0c5r9an0fdvsm4n4jyixsknmr8ywha3lfmc2p0l8"))))
+        (base32 "00a2al7ghrlabf65kfj1mk30p2pl37h6ppwlgghbgiy7rwlzkdbm"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/snosov1/toc-org")
     (synopsis "Table of Contents generator for Emacs Org mode")
@@ -4055,8 +4078,7 @@ Emacs.")
                 "1a47xk3yp1rp17fqg7ldl3d3fb888h0fz3sysqfdz1bfdgs8a9bk"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-s" ,emacs-s)
-       ("emacs-dash" ,emacs-dash)))
+     (list emacs-s emacs-dash))
     (home-page "https://github.com/rejeep/f.el")
     (synopsis "Emacs API for working with files and directories")
     (description "This package provides an Emacs library for working with
@@ -4066,7 +4088,7 @@ files and directories.")
 (define-public emacs-fountain-mode
   (package
     (name "emacs-fountain-mode")
-    (version "3.5.1")
+    (version "3.6.0")
     (source
      (origin
        (method git-fetch)
@@ -4075,7 +4097,7 @@ files and directories.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0y7dd6qq4b95scj7fay4zzhkf0g0x89npylc4v1hz59b1yyylfqy"))))
+        (base32 "14cb4r23pn98sxzh0qwjwpvm7k7q9hhpks8avydccwssm69x1s1w"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/rnkn/fountain-mode")
     (synopsis "Major mode for screenwriting in Fountain markup")
@@ -4154,8 +4176,7 @@ display and behaviour is easily customisable.")
           (base32 "1y77gjl0yznamdj0f55d418zb75k22izisjg7ikvrfsl2yfqf3pm"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-git-gutter" ,emacs-git-gutter)
-         ("emacs-fringe-helper" ,emacs-fringe-helper)))
+       (list emacs-git-gutter emacs-fringe-helper))
       (home-page "https://github.com/emacsorphanage/git-gutter-fringe")
       (synopsis "See and manage hunks of text in a version control system")
       (description
@@ -4191,7 +4212,7 @@ the URL for a commit.  URLs are added to the kill ring.")
 (define-public emacs-apheleia
   (package
     (name "emacs-apheleia")
-    (version "1.0")
+    (version "1.2")
     (source
      (origin
        (method git-fetch)
@@ -4200,7 +4221,7 @@ the URL for a commit.  URLs are added to the kill ring.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "04pls7zahy4jfkikv6fvd9vfpm4glhyanmmkx79hgi9pwdv966rf"))))
+        (base32 "06i912zybc6c1djb9xqfqydl6achgxsmx6hjy50y9lxc0f2p5py9"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/raxod502/apheleia")
     (synopsis "Reformat buffer stably")
@@ -4226,7 +4247,7 @@ saving won't move point back to the beginning of the buffer.")
          "1pz4l1xnq6s67w5yq9107vm8dg7rqf8n9dmbn90jys97c722g70n"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-transient" ,emacs-transient)))
+     (list emacs-transient))
     (home-page "https://gitlab.com/pidu/git-timemachine")
     (synopsis "Step through historic versions of Git-controlled files")
     (description "This package enables you to step through historic versions
@@ -4251,8 +4272,7 @@ of files under Git version control from within Emacs.")
      '(#:include (cons "^snippets\\/minitest-mode\\/" %default-include)
        #:exclude (delete "^[^/]*tests?\\.el$" %default-exclude)))
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-f" ,emacs-f)))
+     (list emacs-dash emacs-f))
     (home-page "https://github.com/arthurnn/minitest-emacs")
     (synopsis "Emacs minitest mode")
     (description
@@ -4311,27 +4331,27 @@ Expectations, but it can be used in other contexts.")
 (define-public emacs-ecukes
   (package
     (name "emacs-ecukes")
-    (version "0.6.17")
-    (home-page "https://github.com/ecukes/ecukes")
+    (version "0.6.18")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url home-page)
+             (url "https://github.com/ecukes/ecukes")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1isscwz4h3nx62lwfrj899lp2yc27zk1ndgr441d848495ccmshn"))))
+        (base32 "182qgddfv8nd89y1l55rs5vm5i61ayc8cxbplb8zx0alnid9xrw1"))))
     (build-system emacs-build-system)
     (arguments
      `(#:include (cons* "^feature/" "^reporters/" "^templates/" %default-include)))
     (propagated-inputs
-     `(("emacs-ansi" ,emacs-ansi)
-       ("emacs-commander" ,emacs-commander)
-       ("emacs-dash" ,emacs-dash)
-       ("emacs-espuds" ,emacs-espuds)
-       ("emacs-f" ,emacs-f)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-ansi
+           emacs-commander
+           emacs-dash
+           emacs-espuds
+           emacs-f
+           emacs-s))
+    (home-page "https://github.com/ecukes/ecukes")
     (synopsis "Cucumber for Emacs")
     (description
      "This package provides Ecukes, a Cucumber-inspired integration testing
@@ -4354,9 +4374,7 @@ intended to be.")
         (base32 "16r4j27j9yfdiy841w9q5ykkc6n3wrm7hvfacagb32mydk821ijg"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-s" ,emacs-s)
-       ("emacs-dash" ,emacs-dash)
-       ("emacs-f" ,emacs-f)))
+     (list emacs-s emacs-dash emacs-f))
     (home-page "https://github.com/ecukes/espuds")
     (synopsis "Common step definitions for Ecukes")
     (description "Espuds is a collection of the most commonly used step
@@ -4405,9 +4423,7 @@ port of @code{cl-spark} to Emacs Lisp.")
     (propagated-inputs
      ;; The version of org in Emacs 24.5 is not sufficient, and causes tables
      ;; to be rendered incorrectly
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-org" ,emacs-org)
-       ("emacs-spark" ,emacs-spark)))
+     (list emacs-dash emacs-org emacs-spark))
     (home-page "https://github.com/dakrone/es-mode")
     (synopsis "Major mode for editing Elasticsearch queries")
     (description "@code{es-mode} includes highlighting, completion and
@@ -4446,18 +4462,18 @@ keep pressing the key until it selects what you want.  There's also
     (package
       (name "emacs-explain-pause-mode")
       (version (git-version "0.1" revision commit))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://github.com/lastquestion/explain-pause-mode")
-                      (commit commit)))
-                (file-name (git-file-name name version))
-                (sha256
-                 (base32
-                  "0frnfwqal9mrnrz6q4v7vcai26ahaw81894arff1yjw372pfgv7v"))))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/lastquestion/explain-pause-mode")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0frnfwqal9mrnrz6q4v7vcai26ahaw81894arff1yjw372pfgv7v"))))
       (build-system emacs-build-system)
       (native-inputs
-       `(("emacs" ,emacs-buttercup)))
+       (list emacs-buttercup))
       (arguments
        '(#:tests? #t
          ;; Don't run case-tests as they will fail to create sockets because
@@ -4592,7 +4608,7 @@ result.")
            (lambda _
              (delete-file "projectile-ripgrep.el"))))))
     (propagated-inputs
-     `(("ripgrep" ,ripgrep)))
+     (list ripgrep))
     (home-page "https://github.com/nlamirault/ripgrep.el")
     (synopsis "Search using ripgrep from inside Emacs")
     (description "@code{ripgrep} is an Emacs search package based on the
@@ -4624,10 +4640,7 @@ result.")
                (emacs-substitute-sexps file
                  ("(defcustom rg-executable" "rg"))))))))
     (propagated-inputs
-     `(("emacs-s" ,emacs-s)
-       ("emacs-transient" ,emacs-transient)
-       ("emacs-wgrep" ,emacs-wgrep)
-       ("ripgrep" ,ripgrep)))
+     (list emacs-s emacs-transient emacs-wgrep ripgrep))
     (home-page "https://rgel.readthedocs.io/en/latest/")
     (synopsis "Search tool based on @code{ripgrep}")
     (description
@@ -4740,8 +4753,7 @@ Emacs shell script.")
         (base32 "0qmvyy3xg5qi7ws8zcs934d6afsappr1a6pgfp796xpa9vdr4y6j"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-shut-up" ,emacs-shut-up)))
+     (list emacs-dash emacs-shut-up))
     (home-page "https://github.com/sviridov/undercover.el")
     (synopsis "Test coverage library for Emacs Lisp")
     (description
@@ -4831,8 +4843,7 @@ serve files and directory listings.")
         (base32 "1ha7jl7776pk1bki5zj2q0jy66450mn8xr3aqjc0m9kj3gc9qxgw"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-simple-httpd" ,emacs-simple-httpd)
-       ("emacs-js2-mode" ,emacs-js2-mode)))
+     (list emacs-simple-httpd emacs-js2-mode))
     (arguments '(#:include '("\\.el$" "\\.js$" "\\.html$")))
     (home-page "https://github.com/skeeto/skewer-mode")
     (synopsis "Live web development in Emacs")
@@ -4859,7 +4870,7 @@ in Lisp modes.")
                   "0bny40hv9a024n01clxns351cs4j4ifhgcc7m4743xncqf612p7g"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)))
+       (list emacs-dash))
       (home-page "https://github.com/Fuco1/litable/")
       (synopsis "Dynamic evaluation replacement with Emacs")
       (description "This package provides dynamic evaluation in Emacs.")
@@ -4903,7 +4914,7 @@ Emacs can load Org files as Lisp source files directly.")
           (base32 "0z6y5f1rj28lbr30m6g4a9l6ahs66whi8861g4cx9xzhs84nwv5g"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-s" ,emacs-s)))
+       (list emacs-s))
       (home-page "https://github.com/sulami/literate-calc-mode.el")
       (synopsis "Literate programming for Emacs Calc")
       (description
@@ -4930,8 +4941,7 @@ other markup language major modes.")
         (base32 "0r814qcrhvx4qlx4sdzwdmrhiryslqclx0bnpp0qcrbx6g8qfl25"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-f" ,emacs-f)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-f emacs-s))
     (synopsis "Platform-specific paths for config, cache, and other data")
     (description
      "This package provides platform-specific paths for reading and writing
@@ -4942,18 +4952,18 @@ configuration, cache, and other data.")
   (package
     (name "emacs-string-inflection")
     (version "1.0.16")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/akicho8/string-inflection")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0wskrp3v5gi3b3s9471ijkdncnfd888qd50c72rv2p8846174paj"))))
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/akicho8/string-inflection")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0wskrp3v5gi3b3s9471ijkdncnfd888qd50c72rv2p8846174paj"))))
     (build-system emacs-build-system)
     (native-inputs
-     `(("ert-runner" ,emacs-ert-runner)))
+     (list emacs-ert-runner))
     (arguments
      `(#:tests? #t
        #:test-command '("ert-runner")))
@@ -5033,7 +5043,7 @@ boxes, and more.")
                 "1qc92xvgxmnwjixk8bxwbc1l1jj0qk9dg73jyaip6lk4g0wjk6xf"))))
     (build-system emacs-build-system)
     (inputs
-     `(("pdf2svg" ,pdf2svg)))
+     (list pdf2svg))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -5099,7 +5109,7 @@ displays the priority part of a heading as your preferred string value.")
 (define-public emacs-org-fragtog
   (package
     (name "emacs-org-fragtog")
-    (version "0.4.0")
+    (version "0.4.1")
     (source
      (origin
        (method git-fetch)
@@ -5108,10 +5118,10 @@ displays the priority part of a heading as your preferred string value.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0ra4sfy48p8pm1c7h8wlmbl68r4s0f4qc49xapvs550pm4mf3hiq"))))
+        (base32 "1912nlnk5v20szlmxr6y7chvms294z0p0hzdfgi8i3c7yrz7lmsj"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-org" ,emacs-org)))
+     (list emacs-org))
     (home-page "https://github.com/io12/org-fragtog")
     (synopsis "Toggle Org mode LaTeX fragments preview at cursor")
     (description
@@ -5157,7 +5167,7 @@ blocks with @code{org-babel} in @code{org-mode}.")
          (sha256
           (base32 "0s3931w9ab3yfml2pmq71rw21yf6hpg7m3vihxyy3vs6zli1cvmq"))))
       (propagated-inputs
-       `(("emacs-restclient" ,emacs-restclient)))
+       (list emacs-restclient))
       (build-system emacs-build-system)
       (home-page "https://github.com/alf/ob-restclient.el")
       (synopsis "Org-babel functionality for @code{restclient-mode}")
@@ -5180,7 +5190,7 @@ blocks with @code{org-babel} in @code{org-mode}.")
          (sha256
           (base32 "117zzkryznznk6h4i1jqzdn888nl019xrgxm2gza0lndx8dxsg2c"))))
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)))
+       (list emacs-dash))
       (build-system emacs-build-system)
       (home-page "https://github.com/alphapapa/org-now")
       (synopsis "Show current Org tasks in a sidebar")
@@ -5230,7 +5240,7 @@ mode-line.")
     (arguments
      '(#:include (cons "^lib\\/" %default-include)))
     (propagated-inputs
-     `(("emacs-inf-ruby" ,emacs-inf-ruby)))
+     (list emacs-inf-ruby))
     (home-page "https://github.com/dgutov/robe")
     (synopsis "Ruby code assistance tool for Emacs")
     (description
@@ -5241,29 +5251,26 @@ method and constant name completion.")
     (license license:gpl3+)))
 
 (define-public emacs-robot-mode
-  (let ((commit "32846e7e80ae3471b7c07f9709dcaa4f9b9ed4a0")
-        (revision "1"))
-    (package
-      (name "emacs-robot-mode")
-      (version (git-version "0.0.0" revision commit))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      ;; A better maintained fork of robot-mode.
-                      (url "https://github.com/jvalkeejarvi/robot-mode")
-                      (commit commit)))
-                (file-name (git-file-name name version))
-                (sha256
-                 (base32
-                  "1i8wf7m0gml8zvvmlgppjzv78b432686p1qdbzgclc7qfcvzag0d"))))
-      (build-system emacs-build-system)
-      (propagated-inputs `(("emacs-s" ,emacs-s)))
-      (home-page "https://github.com/jvalkeejarvi/robot-mode")
-      (synopsis "Emacs mode for Robot Framework")
-      (description "This major mode facilitates editing Robot Framework source
-files with features such as syntax highlighting, comments, finding keywords,
-completing keywords and smart indentation.")
-      (license license:gpl3+))))
+  (package
+    (name "emacs-robot-mode")
+    (version "0.6.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/kopoli/robot-mode")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "127lydk66n90ih39q8gxzb44rss2xllb7bn3ygxrf5m5vvl9w5rj"))))
+    (build-system emacs-build-system)
+    (home-page "https://github.com/kopoli/robot-mode")
+    (synopsis "Emacs mode for Robot Framework")
+    (description
+     "This major mode facilitates editing Robot Framework source files with
+features such as syntax highlighting, comments, finding keywords, completing
+keywords and smart indentation.")
+    (license license:gpl3+)))
 
 (define-public emacs-roguel-ike
   (package
@@ -5280,7 +5287,7 @@ completing keywords and smart indentation.")
         (base32 "0rgv4y9aa5cc2ddz3y5z8d22xmr8kf5c60h0r3g8h91jmcw3rb4z"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-popup" ,emacs-popup)))
+     (list emacs-popup))
     (arguments
      `(#:include (cons* "^roguel-ike/" "^roguel-ike-lib/" %default-include)
        #:phases
@@ -5358,7 +5365,7 @@ configuration.")
 (define-public emacs-smart-mode-line
   (package
     (name "emacs-smart-mode-line")
-    (version "2.13")
+    (version "2.14")
     (source
      (origin
        (method git-fetch)
@@ -5367,10 +5374,10 @@ configuration.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "164b697xm1rwcggv37dymhf3npbyh2bs59z8b6m5x35lb4c3lf8b"))))
+        (base32 "1h5w5lrgrmhpaqwppg5msylh7z78mvwy9mm8xiiv8w4wxvncxxl2"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-rich-minority" ,emacs-rich-minority)))
+     (list emacs-rich-minority))
     (home-page "https://github.com/Malabarba/smart-mode-line")
     (synopsis "Color-coded smart mode-line")
     (description
@@ -5535,7 +5542,7 @@ package namespace prefix is ​​hidden by a colon.")
        (sha256
         (base32 "1k2zinchs0jjllp8zkpggckyy63dkyi5yig3p46vh4w45jdzysk5"))))
     (inputs
-     `(("emacs-evil" ,emacs-evil)))
+     (list emacs-evil))
     (build-system emacs-build-system)
     (home-page "https://github.com/cofi/evil-leader")
     (synopsis "Implement <leader> feature from Vim")
@@ -5548,19 +5555,23 @@ an easy way to bind keys under a configurable prefix key.")
   (package
     (name "emacs-evil-tex")
     (version "1.0.2")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/iyefrat/evil-tex")
-                    (commit version)))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1wrx8ihimn1sx3vzzfppcwv0yfh3x95jrkxqvzj0ykckipm3zk0b"))))
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/iyefrat/evil-tex")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1wrx8ihimn1sx3vzzfppcwv0yfh3x95jrkxqvzj0ykckipm3zk0b"))))
     (build-system emacs-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'set-home
+           (lambda _ (setenv "HOME" "/tmp"))))))
     (propagated-inputs
-     `(("emacs-evil" ,emacs-evil)
-       ("emacs-auctex" ,emacs-auctex)))
+     (list emacs-auctex emacs-evil))
     (home-page "https://github.com/iyefrat/evil-tex")
     (synopsis "Evil oriented additions for editing LaTeX")
     (description "This package is a toolbox for LaTeX editing with Evil.  It
@@ -5587,8 +5598,7 @@ movements, and keymaps for quickly entering environments or
           (base32
            "031p5i3274dazp7rz6m5y38shfgszm1clmkcf58qfqlvy978ammc"))))
       (build-system emacs-build-system)
-      (propagated-inputs `(("emacs-evil" ,emacs-evil)
-                           ("emacs-names" ,emacs-names)))
+      (propagated-inputs (list emacs-evil emacs-names))
       (home-page "https://github.com/laishulu/evil-textobj-syntax/")
       (synopsis "Text objects based on syntax highlighting")
       (description
@@ -5615,7 +5625,7 @@ boundaries defined by syntax highlighting.")
            "14qldlisbmxzammr500gyha2hiv2xgyzfc6mysqii06kbcqn1ik1"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-flycheck" ,emacs-flycheck)))
+       (list emacs-flycheck))
       (home-page "https://github.com/lbolla/emacs-flycheck-flow")
       (synopsis "Flow support for @code{flycheck-mode}")
       (description
@@ -5646,8 +5656,7 @@ for Flow files.")
          (add-after 'unpack 'specify-python-location
            ;; Hard-code python3 executable location in the library.
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((python3 (string-append (assoc-ref inputs "python")
-                                           "/bin/python3")))
+             (let ((python3 (search-input-file inputs "/bin/python3")))
                (substitute* '("flycheck-grammalecte.el" "grammalecte.el")
                  (("\"python3") (string-append "\"" python3)))
                (substitute* '("conjugueur.py" "flycheck_grammalecte.py")
@@ -5658,10 +5667,11 @@ for Flow files.")
              (make-file-writable "grammalecte.el")
              (emacs-substitute-variables "grammalecte.el"
                ("grammalecte-python-package-directory"
-                (string-append (assoc-ref inputs "grammalecte")
-                               "/lib/python"
-                               ,(version-major+minor (package-version python))
-                               "/site-packages/grammalecte")))))
+                (search-input-directory
+                 inputs
+                 (string-append "lib/python"
+                                ,(version-major+minor (package-version python))
+                                "/site-packages/grammalecte"))))))
          (add-after 'unpack 'do-not-phone-home
            ;; Do not check for Grammalecte updates, ever.
            (lambda _
@@ -5669,10 +5679,9 @@ for Flow files.")
              (emacs-substitute-variables "grammalecte.el"
                ("grammalecte-check-upstream-version-delay" 0)))))))
     (inputs
-     `(("grammalecte" ,grammalecte)
-       ("python" ,python)))
+     (list grammalecte python))
     (propagated-inputs
-     `(("emacs-flycheck" ,emacs-flycheck)))
+     (list emacs-flycheck))
     (home-page "https://git.umaneti.net/flycheck-grammalecte/")
     (synopsis "Integrate Grammalecte with Flycheck")
     (description
@@ -5697,9 +5706,7 @@ repetitions for example).")
        (sha256
         (base32 "0cs5r0ik6a3bl1k3imjl0r8y1i69kx9x9m9cgxj470qk34brwyj5"))))
     (propagated-inputs
-     `(("emacs-flycheck" ,emacs-flycheck)
-       ("emacs-geiser" ,emacs-geiser)
-       ("emacs-geiser-guile" ,emacs-geiser-guile)))
+     (list emacs-flycheck emacs-geiser emacs-geiser-guile))
     (build-system emacs-build-system)
     (home-page "https://github.com/flatwhatson/flycheck-guile")
     (synopsis "GNU Guile support for Flycheck")
@@ -5721,7 +5728,7 @@ compile}.")
        (file-name (git-file-name name version))
        (sha256
         (base32 "1djrj3is0dzrl2703bw7bclf33dp4xqmy144q7xj5pvpb9v3kf50"))))
-    (inputs `(("ledger" ,ledger)))
+    (inputs (list ledger))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -5733,7 +5740,7 @@ compile}.")
                  (("\"ledger\"") (string-append "\"" ledger "\""))))
              #t)))))
     (propagated-inputs
-     `(("emacs-flycheck" ,emacs-flycheck)))
+     (list emacs-flycheck))
     (build-system emacs-build-system)
     (home-page "https://github.com/purcell/flycheck-ledger")
     (synopsis "Ledger support for Flycheck")
@@ -5758,9 +5765,7 @@ errors.")
        (sha256
         (base32 "1fh6j5w2387nh2fwwjphkhq17cgj5m2q5k0fhidvgc2w65lzbr1r"))))
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-flycheck" ,emacs-flycheck)
-       ("emacs-let-alist" ,emacs-let-alist)))
+     (list emacs-dash emacs-flycheck emacs-let-alist))
     (build-system emacs-build-system)
     (home-page "https://github.com/flycheck/flycheck-rust")
     (synopsis "Rust/Cargo support for Flycheck")
@@ -5785,8 +5790,7 @@ the current Cargo project.")
          "00py39n1383761wq6wp194pvyk94ydqdbxj9kl64g9jnipkp7849"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-flycheck" ,emacs-flycheck)
-       ("emacs-package-lint" ,emacs-package-lint)))
+     (list emacs-flycheck emacs-package-lint))
     (home-page "https://github.com/purcell/flycheck-package")
     (synopsis "Flycheck checker for elisp package metadata")
     (description
@@ -5836,9 +5840,7 @@ respective @code{*Help*} buffers.")
          "1fbcxwfvm33xcdj3cs26d9i1zyrryyjjkv7sc3mfxd45nq8d3ivj"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-f" ,emacs-f)
-       ("emacs-yaml-mode" ,emacs-yaml-mode)))
+     (list emacs-dash emacs-f emacs-yaml-mode))
     (home-page "https://github.com/meqif/docker-compose-mode/")
     (synopsis "Major mode for editing @file{docker-compose} files")
     (description
@@ -5859,49 +5861,40 @@ completion of relevant keywords.")
                (url "lp:dvc")
                (revision revision)))
          (sha256
-          (base32
-           "03pqn493w70wcpgaxvqnfgynxghw114l9pyiv3r414d84vzhan6h"))
+          (base32 "03pqn493w70wcpgaxvqnfgynxghw114l9pyiv3r414d84vzhan6h"))
          (file-name (string-append name "-" version "-checkout"))))
       (build-system gnu-build-system)
       (arguments
-       `(#:modules ((guix build gnu-build-system)
+       (list
+        #:modules `((guix build gnu-build-system)
                     ((guix build emacs-build-system) #:prefix emacs:)
                     (guix build utils))
-         #:imported-modules (,@%gnu-build-system-modules
+        #:imported-modules `(,@%gnu-build-system-modules
                              (guix build emacs-build-system)
                              (guix build emacs-utils))
-         #:configure-flags
-         (list (string-append "--with-lispdir="
-                              (emacs:elpa-directory (assoc-ref %outputs "out"))))
-         #:tests? #f                    ;no test suite
-         #:phases
-         (modify-phases %standard-phases
-           (add-before 'build 'set-home
-             ;; Something in dvc-bookmarks.el attempts to write config files in
-             ;; $HOME during the autoload generation.
-             (lambda _ (setenv "HOME" (getenv "TMPDIR")) #t))
-           (add-before 'build 'fix-texinfo
-             ;; See https://bugs.launchpad.net/dvc/+bug/1264383.
-             (lambda _
-               (substitute* "texinfo/dvc-intro.texinfo"
-                 (("@itemx update ``to''")
-                  "@item update ``to''")
-                 (("@itemx brief")
-                  "@item brief")
-                 (("@itemx full")
-                  "@item full")
-                 (("@itemx drop")
-                  "@item drop")
-                 (("@itemx left file")
-                  "@item left file"))
-               #t)))))
+        #:configure-flags
+        #~(list (string-append "--with-lispdir="
+                               (emacs:elpa-directory #$output)))
+        #:tests? #f                     ;no test suite
+        #:phases
+        #~(modify-phases %standard-phases
+            (add-before 'build 'set-home
+              ;; Something in dvc-bookmarks.el attempts to write config files
+              ;; in $HOME during the autoload generation.
+              (lambda _ (setenv "HOME" (getenv "TMPDIR"))))
+            (add-before 'build 'fix-texinfo
+              ;; See https://bugs.launchpad.net/dvc/+bug/1264383.
+              (lambda _
+                (substitute* "texinfo/dvc-intro.texinfo"
+                  (("@itemx update ``to''") "@item update ``to''")
+                  (("@itemx brief") "@item brief")
+                  (("@itemx full") "@item full")
+                  (("@itemx drop") "@item drop")
+                  (("@itemx left file") "@item left file")))))))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)         ;for aclocal
-         ("emacs" ,emacs-minimal)
-         ("texinfo" ,texinfo)))
+       (list autoconf automake emacs-minimal texinfo))
       (home-page "http://xsteve.at/prg/emacs_dvc/index.html")
-      (synopsis "Emacs front-end for various distributed version control systems.")
+      (synopsis "Emacs front-end for various distributed version control systems")
       (description "DVC is a legacy Emacs front-end for a number of
 distributed version control systems.  It currently supports GNU Arch, GNU
 Bazaar, git, Mercurial, and Monotone.  It also provides some integration with
@@ -5923,7 +5916,7 @@ Gnus, e.g., for applying patches received by email.")
         (base32 "1hncxbg5lvywzkwvdmzvrz71midy4samjq2vvxxhz90z1y5l8l29"))))
     (build-system emacs-build-system)
     (native-inputs
-     `(("emacs-undercover" ,emacs-undercover)))
+     (list emacs-undercover))
     (arguments
      `(#:emacs ,emacs
        #:phases
@@ -5980,7 +5973,7 @@ minibuffer to enable editing the minibuffer input in another buffer with
                 "1a10fc2jk37ni5sjjvf87s5nyaz2a6h2mlj5dxh4dhv5sd3bb85p"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-f" ,emacs-f)))
+     (list emacs-f))
     (home-page "http://www.gregsexton.org")
     (synopsis "Org-Babel functions for IPython evaluation")
     (description "This package adds support to Org-Babel for evaluating Python
@@ -6002,8 +5995,7 @@ source code using IPython.")
         (base32 "10x4hxrjm4pr6vg42a961h9ilqzyd0l0fv7fsbq9clxi439f1nd6"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-async" ,emacs-async)
-       ("emacs-dash" ,emacs-dash)))
+     (list emacs-async emacs-dash))
     (home-page "https://github.com/astahlman/ob-async")
     (synopsis "Asynchronous src_block execution for org-babel")
     (description "@code{ob-async} enables asynchronous execution of org-babel
@@ -6013,18 +6005,18 @@ src blocks.")
 (define-public emacs-debbugs
   (package
     (name "emacs-debbugs")
-    (version "0.29")
+    (version "0.30")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/debbugs-"
                            version ".tar"))
        (sha256
-        (base32 "1bn21d9dr9pb3vdak3v07x056xafym89kdpxavjf4avy6bry6s4d"))))
+        (base32 "05yy1hhxd59rhricb14iai71w681222sv0i703yrgg868mphl7sb"))))
     (build-system emacs-build-system)
     (arguments '(#:include '("\\.el$" "\\.wsdl$" "\\.info$")))
     (propagated-inputs
-     `(("emacs-async" ,emacs-async)))
+     (list emacs-async))
     (home-page "https://elpa.gnu.org/packages/debbugs.html")
     (synopsis "Access the Debbugs bug tracker in Emacs")
     (description
@@ -6063,15 +6055,15 @@ framework for Emacs Lisp to be used with @code{ert}.")
     (name "emacs-deferred")
     (version "0.5.1")
     (home-page "https://github.com/kiwanami/emacs-deferred")
-    (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
-                "0xy9zb6wwkgwhcxdnslqk52bq3z24chgk6prqi4ks0qcf2bwyh5h"))))
+    (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 "0xy9zb6wwkgwhcxdnslqk52bq3z24chgk6prqi4ks0qcf2bwyh5h"))))
     (build-system emacs-build-system)
     (arguments
      `(#:phases
@@ -6080,19 +6072,15 @@ framework for Emacs Lisp to be used with @code{ert}.")
            ;; Setting the SHELL environment variable is required for the tests
            ;; to find sh.
            (lambda _
-             (setenv "SHELL" (which "sh"))
-             #t))
+             (setenv "SHELL" (which "sh"))))
          (add-before 'check 'fix-makefile
            (lambda _
              (substitute* "Makefile"
-               (("\\$\\(CASK\\) exec ") ""))
-             #t)))
+               (("\\$\\(CASK\\) exec ") "")))))
        #:tests? #t
        #:test-command '("make" "test")))
     (native-inputs
-     `(("emacs-ert-expectations" ,emacs-ert-expectations)
-       ("emacs-undercover" ,emacs-undercover)
-       ("ert-runner" ,emacs-ert-runner)))
+     (list emacs-ert-expectations emacs-ert-runner emacs-undercover))
     (synopsis "Simple asynchronous functions for Emacs Lisp")
     (description
      "The @code{deferred.el} library provides support for asynchronous tasks.
@@ -6117,7 +6105,7 @@ for asynchronous tasks.")
                 "1wsk5isza8xqr84w6haal95ssifz6j2lrr5phbsdc90jb9hicbff"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-deferred" ,emacs-deferred)))
+     (list emacs-deferred))
     (synopsis "Emacs client for Jenkins")
     (description
      "Butler provides an interface to connect to Jenkins continuous
@@ -6160,12 +6148,9 @@ build jobs.")
                (copy-file "emacs-zmq.so"
                           (string-append libdir "/emacs-zmq.so"))))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
-     `(("zeromq" ,zeromq)))
+     (list zeromq))
     (home-page "https://github.com/nnicandro/emacs-zmq")
     (synopsis "Emacs bindings to ØMQ")
     (description "This package provides Emacs bindings to ØMQ.")
@@ -6235,9 +6220,7 @@ These are distributed in separate files and can be used individually.")
           (base32 "13fgmdy51gqdwijqfvb784pirx4lgva0y7ysi0c3fcx8f82cdj59"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-company" ,emacs-company)
-         ("emacs-dash" ,emacs-dash)
-         ("emacs-frame-local" ,emacs-frame-local)))
+       (list emacs-company emacs-dash emacs-frame-local))
       (home-page "https://github.com/sebastiencs/company-box")
       (synopsis "Company front-end with icons")
       (description
@@ -6265,8 +6248,7 @@ This package is not compatible with a TTY.")
                 "05ays6xkqbxcfplvx7wfc2slflmwc3aw7vkixvabk0ilvisndvgm"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-company" ,emacs-company)
-       ("emacs-posframe" ,emacs-posframe)))
+     (list emacs-company emacs-posframe))
     (home-page "https://github.com/tumashu/company-posframe")
     (synopsis "Use a posframe for @code{emacs-company}'s candidate menu")
     (description
@@ -6281,26 +6263,26 @@ languages.")
     (name "emacs-irony-mode")
     (version "1.5.0")
     (home-page "https://github.com/Sarcasm/irony-mode")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url (string-append home-page ".git"))
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1ilvfqn7hzrjjy2zrv08dbdnmgksdgsmrdcvx05s8704430ag0pb"))))
-    (build-system emacs-build-system)
-    (inputs `(("server" ,emacs-irony-mode-server)))
-    (arguments `(#:phases
-                 (modify-phases %standard-phases
-                   (add-after 'unpack 'configure
-                        (lambda* (#:key inputs #:allow-other-keys)
-                          (chmod "irony.el" #o644)
-                          (emacs-substitute-variables "irony.el"
-                            ("irony-server-install-prefix"
-                             (assoc-ref inputs "server")))
-                          #t)))))
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url (string-append home-page ".git"))
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1ilvfqn7hzrjjy2zrv08dbdnmgksdgsmrdcvx05s8704430ag0pb"))))
+    (build-system emacs-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'configure
+            (lambda _
+              (chmod "irony.el" #o644)
+              (emacs-substitute-variables "irony.el"
+                ("irony-server-install-prefix" #$emacs-irony-mode-server)))))))
+    (inputs (list emacs-irony-mode-server))
     (synopsis "C/C++/ObjC Code completion and syntax checks for Emacs")
     (description "Irony-mode provides Clang-assisted syntax checking and
 completion for C, C++, and ObjC in GNU Emacs.  Using @code{libclang} it can
@@ -6311,10 +6293,9 @@ described on the homepage.")
     (license license:gpl3+)))
 
 (define-public emacs-irony-mode-server
-  (package (inherit emacs-irony-mode)
+  (package
+    (inherit emacs-irony-mode)
     (name "emacs-irony-mode-server")
-    (inputs
-     `(("clang" ,clang)))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -6323,7 +6304,9 @@ described on the homepage.")
              (let ((out (assoc-ref outputs "out")))
                (invoke "cmake"
                        "server"
-                       (string-append "-DCMAKE_INSTALL_PREFIX=" out)) #t))))))
+                       (string-append "-DCMAKE_INSTALL_PREFIX=" out))))))))
+    (inputs
+     (list clang))
     (build-system cmake-build-system)
     (synopsis "Server for the Emacs @dfn{irony mode}")))
 
@@ -6342,8 +6325,7 @@ described on the homepage.")
        (file-name (git-file-name name version))))
     (build-system emacs-build-system)
     (inputs
-     `(("emacs-company" ,emacs-company)
-       ("emacs-irony-mode" ,emacs-irony-mode)))
+     (list emacs-company emacs-irony-mode))
     (synopsis "C++ completion backend for Company using Irony mode")
     (description "This backend for Company allows for C++ code completion
 with Irony mode using Clang tooling.")
@@ -6364,9 +6346,7 @@ with Irony mode using Clang tooling.")
                (base32 "0qa5a8wzvzxwqql92ibc9s43k8sj3vwn7skz9hfr8av0skkhx996"))))
     (build-system emacs-build-system)
     (inputs
-     `(("irony-mode" ,emacs-irony-mode)
-       ("flycheck-mode" ,emacs-flycheck)
-       ("emacs-company" ,emacs-company)))
+     (list emacs-irony-mode emacs-flycheck emacs-company))
     (synopsis "Live syntax checking frontend for Flycheck using irony-mode")
     (description "This package provides a frontend for Flycheck that lets
 irony-mode do the syntax checking.")
@@ -6388,7 +6368,7 @@ irony-mode do the syntax checking.")
         (base32 "1l5qpr66v1l12fb50yh73grb2rr85xxmbj19mm33b5rdrq2bqmmd"))))
     (build-system emacs-build-system)
     (inputs
-     `(("irony-mode" ,emacs-irony-mode)))
+     (list emacs-irony-mode))
     (synopsis "Eldoc integration for irony-mode")
     (description "Irony-eldoc is an eldoc extension that shows documentation
 for the current function or variable in the minibuffer.")
@@ -6396,31 +6376,26 @@ for the current function or variable in the minibuffer.")
     (license license:gpl3+)))
 
 (define-public emacs-company-quickhelp
-  ;; XXX: release version 2.3.0 is on an unmaintained branch for some reason,
-  ;; so we use the latest 2.2.0 commit instead
-  (let ((commit "479676cade80a9f03802ca3d956591820ed5c537")
-        (revision "1"))
-    (package
-      (name "emacs-company-quickhelp")
-      (version (git-version "2.2.0" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/expez/company-quickhelp")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32 "0hbqpnaf4hnin3nmdzmfj3v22kk9a97b6zssqs96ns36d9h52xcp"))))
-      (build-system emacs-build-system)
-      (propagated-inputs
-       `(("emacs-pos-tip" ,emacs-pos-tip)
-         ("emacs-company" ,emacs-company)))
-      (home-page "https://github.com/expez/company-quickhelp")
-      (synopsis "Popup documentation for completion candidates")
-      (description "@code{company-quickhelp} shows documentation for the
+  (package
+    (name "emacs-company-quickhelp")
+    (version "2.3.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/expez/company-quickhelp")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "08ccsfvwdpzpj0gai3xrdb2bv1nl6myjkxsc5774pbvlq9nkfdvr"))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     (list emacs-pos-tip emacs-company))
+    (home-page "https://github.com/expez/company-quickhelp")
+    (synopsis "Popup documentation for completion candidates")
+    (description "@code{company-quickhelp} shows documentation for the
 completion candidate when using the Company text completion framework.")
-      (license license:gpl3+))))
+    (license license:gpl3+)))
 
 (define-public emacs-math-symbol-lists
   (package
@@ -6457,10 +6432,7 @@ completion candidate when using the Company text completion framework.")
        (sha256
         (base32 "0dxi4h8xqq5647k7h89s4pi8nwyj3brlhsckrv3p3b1g4dr6mk3b"))))
     (inputs
-     `(("emacs-company" ,emacs-company)
-       ("emacs-company-math" ,emacs-company-math)
-       ("emacs-dash" ,emacs-dash)
-       ("emacs-yasnippet" ,emacs-yasnippet)))
+     (list emacs-company emacs-company-math emacs-dash emacs-yasnippet))
     (build-system emacs-build-system)
     (home-page "https://github.com/cpitclaudel/company-coq")
     (synopsis "Emacs extensions for Proof General's Coq mode")
@@ -6494,8 +6466,7 @@ features:
         (base32 "1y1fw926insgdl7ib9ynxjrxf3p6wfjkfxvf5vgdca7267cvcll1"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-math-symbol-lists" ,emacs-math-symbol-lists)
-       ("emacs-company" ,emacs-company)))
+     (list emacs-math-symbol-lists emacs-company))
     (home-page "https://github.com/vspinu/company-math")
     (synopsis "Completion backends for math symbols and @code{LaTeX} tags")
     (description
@@ -6564,7 +6535,7 @@ completion candidates vertically.")
           (base32 "14f15qzfmwdslml4rv37zb5d1lsjf0jibriz636hb7q7knx1n4sg"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-parent-mode" ,emacs-parent-mode)))
+       (list emacs-parent-mode))
       (home-page "https://gitlab.com/jjzmajic/handle")
       (synopsis "Handle generic functions across related major modes")
       (description "This package provides generic functions that specialize on
@@ -6633,8 +6604,7 @@ provide an incremental search that moves all fake cursors in sync.")
           (base32 "0wr86ad0yl52im6b9z0b9pzmhcn39qg5m9878yfv1nbxliw40lcd"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-phi-search" ,emacs-phi-search)
-         ("emacs-multiple-cursors" ,emacs-multiple-cursors)))
+       (list emacs-phi-search emacs-multiple-cursors))
       (home-page "https://github.com/knu/phi-search-mc.el")
       (synopsis "Extend @code{phi-search} with additional
 @code{multiple-cursors} functionality")
@@ -6683,7 +6653,7 @@ simultaneous cursors.")
           (base32 "065l04ylplng1vgykkbn2vnkcs3sn1k2cikx1ha2q8wmgx6bkvai"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)))
+       (list emacs-dash))
       (home-page "https://github.com/magnars/multifiles.el")
       (synopsis "Edit multiple files in a single Emacs buffer")
       (description
@@ -6708,7 +6678,7 @@ one Emacs buffer.")
           (base32 "16y48qrd20m20vypvys5jp4v4gc1qrqlkm75s1pk1r68i9zrw481"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-multiple-cursors" ,emacs-multiple-cursors)))
+       (list emacs-multiple-cursors))
       (home-page "https://github.com/knu/mc-extras.el")
       (synopsis "Extra functions for manipulating multiple cursors")
       (description
@@ -6756,13 +6726,9 @@ on context.")
                 "1hy1x2w0yp5brm7714d1hziz3rpkywb5jp3yj78ibmi9ifny9vri"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-lsp-mode" ,emacs-lsp-mode)
-       ("emacs-company" ,emacs-company)
-       ("emacs-s" ,emacs-s)
-       ("emacs-dash" ,emacs-dash)))
+     (list emacs-dash emacs-lsp-mode emacs-company emacs-s emacs-dash))
     (native-inputs
-     `(("emacs-buttercup" ,emacs-buttercup)))
+     (list emacs-buttercup))
     (arguments
      `(#:tests? #t
        #:test-command '("buttercup" "-L" ".")))
@@ -6866,31 +6832,33 @@ to a key in your preferred mode.")
            "0jvmzs1lsjyndqshhii2y4mnr3wghai26i3p75453zrpxpg0zvvw"))))
       (build-system emacs-build-system)
       (arguments
-       `(#:modules ((guix build emacs-build-system)
+       (list
+        #:modules '((guix build emacs-build-system)
                     ((guix build cmake-build-system) #:prefix cmake:)
                     (guix build utils))
-         #:imported-modules (,@%emacs-build-system-modules
+        #:imported-modules `(,@%emacs-build-system-modules
                              (guix build cmake-build-system))
-         #:phases
-         (modify-phases %standard-phases
-           (add-after 'unpack 'configure
-             (lambda* (#:key outputs #:allow-other-keys)
-               (substitute* "el/CMakeLists.txt"
-                 (("share/emacs/site-lisp/SuperCollider")
-                  (elpa-directory (assoc-ref outputs "out"))))
-               ((assoc-ref cmake:%standard-phases 'configure)
-                #:outputs outputs
-                #:configure-flags '("-DSC_EL_BYTECOMPILE=OFF"))))
-           (add-after 'expand-load-path 'add-el-dir-to-emacs-load-path
-             (lambda _
-               (setenv "EMACSLOADPATH"
-                       (string-append (getcwd) "/el:" (getenv "EMACSLOADPATH")))
-               #t))
-           (replace 'install (assoc-ref cmake:%standard-phases 'install)))))
+        #:phases
+        #~(modify-phases %standard-phases
+            (add-after 'unpack 'configure
+              (lambda* (#:key outputs #:allow-other-keys)
+                (substitute* "el/CMakeLists.txt"
+                  (("share/emacs/site-lisp/SuperCollider")
+                   (elpa-directory #$output)))
+                ((assoc-ref cmake:%standard-phases 'configure)
+                 #:outputs outputs
+                 #:configure-flags '("-DSC_EL_BYTECOMPILE=OFF"))))
+            (add-after 'expand-load-path 'add-el-dir-to-emacs-load-path
+              (lambda _
+                (setenv "EMACSLOADPATH"
+                        (string-append (getcwd)
+                                       "/el:"
+                                       (getenv "EMACSLOADPATH")))))
+            (replace 'install (assoc-ref cmake:%standard-phases 'install)))))
       (inputs
-       `(("supercollider" ,supercollider)))
+       (list supercollider))
       (native-inputs
-       `(("cmake" ,cmake-minimal)))
+       (list cmake-minimal))
       (home-page "https://github.com/supercollider/scel")
       (synopsis "SuperCollider Emacs interface")
       (description "@code{emacs-scel} is an Emacs interface to SuperCollider.
@@ -6902,21 +6870,24 @@ SuperCollider is a platform for audio synthesis and algorithmic composition.")
         (revision "1"))
     (package
       (name "emacs-company-auctex")
-      (version (git-version "0" revision commit))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://github.com/alexeyr/company-auctex")
-                      (commit commit)))
-                (file-name (git-file-name name version))
-                (sha256
-                 (base32
-                  "10qn7frn5wcmrlci3v6iliqzj7r9dls87h9zp3xkgrgn4bqprfp8"))))
+      (version (git-version "0.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/alexeyr/company-auctex")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "10qn7frn5wcmrlci3v6iliqzj7r9dls87h9zp3xkgrgn4bqprfp8"))))
       (build-system emacs-build-system)
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-before 'build 'set-home
+             (lambda _ (setenv "HOME" "/tmp"))))))
       (propagated-inputs
-       `(("emacs-yasnippet" ,emacs-yasnippet)
-         ("emacs-auctex" ,emacs-auctex)
-         ("emacs-company" ,emacs-company)))
+       (list emacs-auctex emacs-company emacs-yasnippet))
       (home-page "https://github.com/alexeyr/company-auctex/")
       (synopsis "Completion for @code{AUCTeX}")
       (description
@@ -6946,7 +6917,7 @@ for @code{AUCTeX}.")
         (base32
          "0dqidg2bd66pawqfarvwca93w5gqf9mikn1k2a2rmd9ymfjpziq1"))))
     (build-system emacs-build-system)
-    (inputs `(("mit-scheme" ,mit-scheme)))
+    (inputs (list mit-scheme))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -7002,8 +6973,7 @@ constants and units into an Emacs buffer.")
         (base32 "0kq40g46s8kgiafrhdq99h79rz9h5fvgz59k7ralmf86bl4sdmdb"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-s" ,emacs-s)
-       ("emacs-dash" ,emacs-dash)))
+     (list emacs-s emacs-dash))
     (home-page "https://github.com/magnars/tagedit")
     (synopsis "Some paredit-like features for html-mode")
     (description
@@ -7026,7 +6996,7 @@ in @code{html-mode}.")
         (base32 "1a25ixb7q4svqabxnhwkk43v47mbsh13qwm7qlazkd3zkr8j3cli"))))
     (build-system emacs-build-system)
     (native-inputs
-     `(("texinfo" ,texinfo)))
+     (list texinfo))
     (arguments
      `(#:include '("\\.el$" "\\.lisp$" "\\.asd$" "contrib")
        #:exclude '("^slime-tests.el" "^contrib/test/"
@@ -7114,9 +7084,7 @@ and popup menus.")
          "1cmzc0fa3jj7ajxbqhbsc8jx47k6g223sfd42c4lrqdnmh95760m"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-reformatter" ,emacs-reformatter)
-       ("python-black-macchiato" ,python-black-macchiato)))
+     (list emacs-dash emacs-reformatter python-black-macchiato))
     (arguments `(#:tests? #f))
     (home-page "https://github.com/wbolster/emacs-python-black")
     (synopsis "Reformat Python code via @code{python-black}")
@@ -7143,7 +7111,7 @@ buffers, respectively.")
     (arguments
      `(#:tests? #f))     ;tests fail with "emacs: standard input is not a tty"
     (propagated-inputs
-     `(("python-isort" ,python-isort)))
+     (list python-isort))
     (home-page "https://github.com/paetzke/py-isort.el")
     (synopsis "Sort the imports in Python buffers")
     (description
@@ -7166,7 +7134,7 @@ using @code{python-isort}.")
         (base32 "0q6bib9nr6xiq6npzbngyfcjk87yyvwzq1zirr3z1h5wadm34lsk"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-deferred" ,emacs-deferred)))
+     (list emacs-deferred))
     (home-page "https://github.com/tkf/emacs-python-environment")
     (synopsis "Provides a @code{virtualenv} API in Emacs Lisp")
     (description
@@ -7188,11 +7156,9 @@ using @code{python-isort}.")
                 "1bckxppfzd5gwn0aw4h86igb7igal9axqncq7j8zmflg7zppncf1"))))
     (build-system emacs-build-system)
     (native-inputs
-     `(("emacs-mocker" ,emacs-mocker)))
+     (list emacs-mocker))
     (propagated-inputs
-     `(("emacs-auto-complete" ,emacs-auto-complete)
-       ("emacs-python-environment" ,emacs-python-environment)
-       ("emacs-epc" ,emacs-epc)))
+     (list emacs-auto-complete emacs-python-environment emacs-epc))
     (home-page "https://github.com/tkf/emacs-jedi")
     (synopsis "Provides Python completion in Emacs")
     (description
@@ -7215,8 +7181,7 @@ the locations of docstrings, arguments, and functions.")
                 "1ihqapp4dv92794rsgyq0rmhwika60cmradqd4bn9b72ss6plxs1"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-jedi" ,emacs-jedi)
-       ("emacs-company" ,emacs-company)))
+     (list emacs-jedi emacs-company))
     (home-page "https://github.com/syohex/emacs-company-jedi")
     (synopsis "Provides Python completion in @code{company-mode}")
     (description
@@ -7273,7 +7238,7 @@ linting of manifests and integration with Puppet Debugger.")
                (invoke "makeinfo" "--no-split"
                        "-o" "purescript-mode.info" "purescript-mode.texi"))))))
       (native-inputs
-       `(("texinfo" ,texinfo)))
+       (list texinfo))
       (home-page "https://github.com/purescript-emacs/purescript-mode")
       (synopsis "Emacs major mode and related tools for Purescript")
       (description "This package provides an Emacs major mode for writing Purescript.")
@@ -7342,7 +7307,7 @@ sgml/html integration, and indentation (working with sgml).")
                   "1gf45xwjzdm8i4q6c6khk4dbg1mmp2r0awz2sjr4dcr2dbd1n7mg"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-company" ,emacs-company)))
+       (list emacs-company))
       (arguments
        `(#:include (cons "^tools\\/" %default-include)))
       (home-page "https://github.com/iquiw/company-cabal/")
@@ -7450,7 +7415,7 @@ Cucumber tool) user stories.  Also known by the name @code{cucumber.el}.")
 (define-public emacs-org-appear
   (package
     (name "emacs-org-appear")
-    (version "0.2.4")
+    (version "0.3.0")
     (source
      (origin
        (method git-fetch)
@@ -7459,7 +7424,7 @@ Cucumber tool) user stories.  Also known by the name @code{cucumber.el}.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0sfz8rpvc9hidjj81wlc48vi7ii90mssgvfnp2z215phv67npbzp"))))
+        (base32 "1pdf16agcjfzpjvz8kv39abir35rip93nkawxcpjjh4ywsdsbnm6"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/awth13/org-appear")
     (synopsis "Make invisible parts of Org fragments appear visible")
@@ -7483,8 +7448,7 @@ when the cursor enters a fragment and disappear when it leaves.")
         (base32 "13y302lyscdqrba1sfx60yf5ji2xi7fbsvjsjbw7hiz63kg6rccy"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-org" ,emacs-org)
-       ("emacs-persist" ,emacs-persist)))
+     (list emacs-org emacs-persist))
     (home-page "https://gitlab.com/phillord/org-drill")
     (synopsis "Flash card memorization system using Org mode")
     (description
@@ -7512,8 +7476,7 @@ cards created in Org mode.")
           (base32 "1if610hq5j8rbjh1caw5bwbgnsn231awwxqbpwvrh966kdxzl4qf"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)
-         ("emacs-request" ,emacs-request)))
+       (list emacs-dash emacs-request))
       (home-page "https://github.com/louietan/anki-editor")
       (synopsis "Minor mode for making Anki cards with Org mode")
       (description
@@ -7524,7 +7487,7 @@ cards created in Org mode.")
 (define-public emacs-org-mime
   (package
     (name "emacs-org-mime")
-    (version "0.2.3")
+    (version "0.2.4")
     (source
      (origin
        (method git-fetch)
@@ -7533,7 +7496,7 @@ cards created in Org mode.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1g32chan6rhlp3kvzd2lvf104i3p37q1sm0d89pq6sya0ia2as1n"))))
+        (base32 "0in83jlrwjn81qgw1i7n228sbf314bj8hkrl14ahfn0zmfll60sw"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/org-mime/org-mime")
     (synopsis "Send HTML email using Org mode HTML export")
@@ -7561,7 +7524,7 @@ email.")
           (base32 "15gd5zbxvdallyra9lmpb9i1r2mmwz0j0i0ra7j9imnbfiz3ln9r"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-htmlize" ,emacs-htmlize)))
+       (list emacs-htmlize))
       (home-page "https://github.com/jeremy-compostella/org-msg")
       (synopsis "Mix Org mode and Message mode to compose emails")
       (description
@@ -7585,7 +7548,7 @@ emails in a Outlook HTML friendly style.")
         (base32 "12inin2p6pm6vbv3yc06fx343dsp0vp07fjb35w088akhikmqh2a"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-org" ,emacs-org)))
+     (list emacs-org))
     (home-page "https://github.com/integral-dw/org-superstar-mode")
     (synopsis "Prettify headings and plain lists in Org mode")
     (description "This package prettifies headings and plain lists in
@@ -7636,7 +7599,7 @@ Features degrade gracefully when viewed from terminal.")
                (substitute* "org-pandoc-import.el"
                  (("\"pandoc\"") (string-append "\"" pandoc "/bin/pandoc\"")))))))))
     (inputs
-     `(("pandoc" ,pandoc)))
+     (list pandoc))
     (home-page "https://github.com/tecosaur/org-pandoc-import/")
     (synopsis "Read and edit non-Org file types in Org")
     (description
@@ -7666,7 +7629,7 @@ save, it exports back to the original non-Org file.")
           (base32 "0nbprh2nhnmb7ngp9ndr6zr37ashcsvpi5slv7a37x1dl7j6w1k4"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-alert" ,emacs-alert)))
+       (list emacs-alert))
       (arguments
        `(#:include (cons "^resources\\/" %default-include)
          #:tests? #t
@@ -7717,11 +7680,8 @@ started with 20 minutes.  All values are customizable.")
         (base32 "1r8kp954ciin4j7j7j8ihdkryf5x09s3ryl7bi9h2j6xqc1ij4wq"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-org-super-agenda" ,emacs-org-super-agenda)
-       ("emacs-org" ,emacs-org)
-       ("emacs-org-ql" ,emacs-org-ql)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-dash emacs-org-super-agenda emacs-org emacs-org-ql
+           emacs-s))
     (home-page "https://github.com/alphapapa/org-sidebar")
     (synopsis "Helpful sidebar for Org buffers")
     (description "This package provides a sidebar for Org buffers.  At the
@@ -7748,12 +7708,12 @@ overview of tasks in a subtree.")
          "18y5zdjc7zh4jlwz6k1nl13i721rknqm0vp4mxfnmq0sc5a0qva0"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-deferred" ,emacs-deferred)
-       ("emacs-f" ,emacs-f)
-       ("emacs-helm" ,emacs-helm)
-       ("emacs-request" ,emacs-request)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-dash
+           emacs-deferred
+           emacs-f
+           emacs-helm
+           emacs-request
+           emacs-s))
     (home-page "https://org-trello.github.io")
     (synopsis "Emacs minor mode for interacting with Trello")
     (description "This package provides an Emacs minor mode to extend
@@ -7778,7 +7738,7 @@ organizer.")
           (base32 "0x94gy1bgfd1f3p9w2bfrqj11bwy9ql0cpi1gw6srpj7kykx0lml"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-org" ,emacs-org)))
+       (list emacs-org))
       (home-page "https://github.com/mtekman/org-tanglesync.el")
       (synopsis "Sync Org source blocks with tangled external files")
       (description "This package automatically pulls changes from source code
@@ -7802,8 +7762,7 @@ to their corresponding tangled blocks.")
                   "0zs9cblnbkxa0dxw4lyllmybqizxcdx96gv8jlhx20nrjpi78piw"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-company" ,emacs-company)
-         ("emacs-dash" ,emacs-dash)))
+       (list emacs-company emacs-dash))
       (home-page "https://github.com/aaronjensen/company-flow/")
       (synopsis "Flow backend for @code{company-mode}")
       (description
@@ -7911,7 +7870,7 @@ variants.")
         (base32 "15ql8xcixgm7mbs7rsbybwszanqibq057j5b5ds89a31dw7zxf1g"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)))
+     (list emacs-dash))
     (home-page "https://github.com/bbatsov/solarized-emacs")
     (synopsis "Port of the Solarized theme for Emacs")
     (description
@@ -7981,7 +7940,7 @@ dark background.")
                 "00qq92gp1g55pzm97rh7k0dgxy44pxziridl8kqm4rbpi31r7k9p"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-autothemer" ,emacs-autothemer)))
+     (list emacs-autothemer))
     (home-page "https://github.com/greduan/emacs-theme-gruvbox")
     (synopsis "Gruvbox is a retro groove color scheme ported from Vim")
     (description
@@ -8035,7 +7994,7 @@ orange and red as accent colors.")
           (base32 "0zcnbxvlwi4d6vzsm3ag7z74qphdigmx303gppb9d614jnsfsdg2"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-ox-hugo" ,emacs-ox-hugo)))
+       (list emacs-ox-hugo))
       (home-page "https://titan-c.gitlab.io/org-cv/")
       (synopsis "Collection of export backends for Org to generate a CV")
       (description
@@ -8044,6 +8003,26 @@ a LaTeX file, which compiles into a nice CV.  In the same spirit, the Org file
 may export to Markdown so that it can be used for a web based CV.")
       (license license:gpl3+))))
 
+(define-public emacs-ox-gfm
+  (package
+    (name "emacs-ox-gfm")
+    (version "1.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/larstvei/ox-gfm")
+                    (commit (string-append "v" version))))
+              (sha256
+               (base32
+                "0drdypmgxk3238hmkqw9s3cw9wv94cyfqar5ar0bv0k69s92pxj8"))))
+    (build-system emacs-build-system)
+    (home-page "https://github.com/larstvei/ox-gfm")
+    (synopsis "Github Flavored Markdown Back-End for Org Export Engine")
+    (description "This package is a small exporter based on the Markdown
+exporter already existing in Org mode.  It supports the Github flavored
+markdown features.")
+    (license license:gpl3+)))
+
 (define-public emacs-2048-game
   (package
     (name "emacs-2048-game")
@@ -8115,7 +8094,7 @@ the game of chess.")
           (base32 "19x653lzc1dxil4ix257hciidbdmbhaxhs6qhlkwi9ygjrlrgvnk"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-request" ,emacs-request)))
+       (list emacs-request))
       (home-page "https://github.com/emacsorphanage/4clojure/")
       (synopsis "Open and evaluate 4clojure questions in Emacs")
       (description "Emacs 4clojure interacts with
@@ -8167,7 +8146,7 @@ single theme but a set of guidelines with numerous implementations.")
 (define-public emacs-solaire-mode
   (package
     (name "emacs-solaire-mode")
-    (version "2.0.3")
+    (version "2.0.4")
     (source
      (origin
        (method git-fetch)
@@ -8176,7 +8155,7 @@ single theme but a set of guidelines with numerous implementations.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0wq5ckwx3wv4c4l8f9hz3ak6v5wy4lg5yh8xlsgn1h1x6yf8afpp"))))
+        (base32 "1lkm09wznal0grpz61ikc77mjrri1x1bi79qwyf1cah9s0wv3isq"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/hlissner/emacs-solaire-mode")
     (synopsis "Change background of file-visiting buffers in Emacs")
@@ -8190,7 +8169,7 @@ them easier to distinguish from other, less important buffers.")
 (define-public emacs-embark
   (package
     (name "emacs-embark")
-    (version "0.10")
+    (version "0.15")
     (source
      (origin
        (method git-fetch)
@@ -8198,12 +8177,11 @@ them easier to distinguish from other, less important buffers.")
              (url "https://github.com/oantolin/embark")
              (commit version)))
        (sha256
-        (base32 "063hc0hganws11vjdk3ic0mxm9i0vpw6s7hzbgxvja0gjkdxjldz"))
+        (base32 "08wj0p3plvblbmfmn4vsanhldr2csrnm1lhk3g1nic5v26yi5l64"))
        (file-name (git-file-name name version))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-avy" ,emacs-avy)
-       ("emacs-consult" ,emacs-consult)))
+     (list emacs-avy emacs-consult))
     (home-page "https://github.com/oantolin/embark")
     (synopsis "Emacs mini-buffer actions rooted in keymaps")
     (description
@@ -8212,9 +8190,9 @@ offering you relevant @emph{actions} to use on a @emph{target} determined by
 the context.
 
 In the minibuffer, the target is the current best completion candidate.  In
-the @code{*Completions*} buffer the target is the completion at point.
-n a regular buffer, the target is the region if active, or else the file,
-symbol or URL at point.
+the @code{*Completions*} buffer the target is the completion at point.  In
+a regular buffer, the target is the region if active, or else the file, symbol
+or URL at point.
 
 The type of actions offered depend on the type of the target.  For files you
 get offered actions like deleting, copying, renaming, visiting in another
@@ -8226,7 +8204,7 @@ include installing, removing or visiting the homepage.")
 (define-public emacs-prescient
   (package
     (name "emacs-prescient")
-    (version "5.1")
+    (version "5.2")
     (source
      (origin
        (method git-fetch)
@@ -8235,12 +8213,10 @@ include installing, removing or visiting the homepage.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0d6kbczkamhhcmc8bf01q6k1x0g7dwjihwllzsldgga3dclyh4ks"))))
+        (base32 "024l7s0b6apbzanw3cnhjypxnxfinfb5b3nhaabrc138m5pis8j5"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-company" ,emacs-company)
-       ("emacs-ivy" ,emacs-ivy)
-       ("emacs-selectrum" ,emacs-selectrum)))
+     (list emacs-company emacs-ivy emacs-selectrum))
     (home-page "https://github.com/raxod502/prescient.el/")
     (synopsis "Emacs library for sorting and filtering candidates")
     (description
@@ -8277,7 +8253,7 @@ interface.")
 (define-public emacs-orderless
   (package
     (name "emacs-orderless")
-    (version "0.6")
+    (version "0.7")
     (source
      (origin
        (method git-fetch)
@@ -8285,7 +8261,7 @@ interface.")
              (url "https://github.com/oantolin/orderless")
              (commit version)))
        (sha256
-        (base32 "1javw5n3h3iv7f433b2ack49aka1jdpp8yxnaahzg5qbvr80hnay"))
+        (base32 "0m9nyz80j0qnn14drbgk8vn5yr7sv0z6yiz8w95ahcw2qwlgyjs7"))
        (file-name (git-file-name name version))))
     (build-system emacs-build-system)
     (arguments
@@ -8298,7 +8274,7 @@ interface.")
                            (string-append (assoc-ref outputs "out")
                                           "/share/info")))))))
     (native-inputs
-     `(("texinfo" ,texinfo)))
+     (list texinfo))
     (home-page "https://github.com/oantolin/orderless")
     (synopsis "Emacs completion style that matches multiple regexps in any order")
     (description "This package provides an orderless completion style that
@@ -8311,7 +8287,7 @@ style, or as multiple word prefixes.")
 (define-public emacs-consult
   (package
     (name "emacs-consult")
-    (version "0.11")
+    (version "0.14")
     (source
      (origin
        (method git-fetch)
@@ -8319,12 +8295,9 @@ style, or as multiple word prefixes.")
              (url "https://github.com/minad/consult")
              (commit version)))
        (sha256
-        (base32 "01kx3zg858bqyajglamxn319qabycnabzj73kl4x7sd55p2yi179"))
+        (base32 "051fjp03lj3b5kkzpdhk78g2lj37v973q0f012zld1n6937srj6h"))
        (file-name (git-file-name name version))))
     (build-system emacs-build-system)
-    (propagated-inputs
-     `(("emacs-flycheck" ,emacs-flycheck)
-       ("emacs-selectrum" ,emacs-selectrum)))
     (home-page "https://github.com/minad/consult")
     (synopsis "Consulting completing-read")
     (description "This package provides various handy commands based on the
@@ -8335,7 +8308,7 @@ list of candidates.")
 (define-public emacs-consult-notmuch
   (package
     (name "emacs-consult-notmuch")
-    (version "0.5")
+    (version "0.6")
     (source
      (origin
        (method git-fetch)
@@ -8344,11 +8317,10 @@ list of candidates.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "04ha4mysxvfz6yzbkgrl1mcwic1lwr1xx6gdy5rl6hn1wwnwam4p"))))
+        (base32 "07qbm5p4cfrrwyp8a5sw0wkdhnqbappz4xjlnjil2krhj9g39q78"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-consult" ,emacs-consult)
-       ("emacs-notmuch" ,emacs-notmuch)))
+     (list emacs-consult emacs-notmuch))
     (home-page "https://codeberg.org/jao/consult-notmuch")
     (synopsis "Search and preview Notmuch emails using Consult")
     (description
@@ -8357,27 +8329,30 @@ and present results either as single emails or full trees.")
     (license license:gpl3+)))
 
 (define-public emacs-marginalia
-  (package
-    (name "emacs-marginalia")
-    (version "0.8")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/minad/marginalia")
-             (commit version)))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "1d6xbidxcxd5gxs5cjxbx1i1wdcmgdnn3hh7fxz0sgf1gaxyp5kv"))))
-    (build-system emacs-build-system)
-    (home-page "https://github.com/minad/marginalia")
-    (synopsis "Marginalia in the minibuffer completions")
-    (description
-     "This package provides Marginalia mode which adds marginalia to the
+  ;; Upstream did not tag latest release.  The commit below matches version
+  ;; bump.
+  (let ((commit "9229d88ae4757f3439e81f51799758c009838cb4"))
+    (package
+      (name "emacs-marginalia")
+      (version "0.11")
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/minad/marginalia")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0gaqybj52skqcmxcx6k3zmw6lznzlr1fjvlaraic9m6n85xkvzki"))))
+      (build-system emacs-build-system)
+      (home-page "https://github.com/minad/marginalia")
+      (synopsis "Marginalia in the minibuffer completions")
+      (description
+       "This package provides Marginalia mode which adds marginalia to the
 minibuffer completions.  Marginalia are marks or annotations placed at the
 margin of the page of a book or in this case helpful colorful annotations
 placed at the margin of the minibuffer for your completion candidates.")
-    (license license:gpl3+)))
+      (license license:gpl3+))))
 
 (define-public emacs-smartparens
   (package
@@ -8394,8 +8369,7 @@ placed at the margin of the minibuffer for your completion candidates.")
         (base32 "0zij2f2rjjym98w68jkp10n1ckpfprlkk217c3fg16hz5nq4vnm6"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-markdown-mode" ,emacs-markdown-mode)))
+     (list emacs-dash emacs-markdown-mode))
     (home-page "https://github.com/Fuco1/smartparens")
     (synopsis "Paredit-like insertion, wrapping and navigation with user
 defined pairs")
@@ -8445,7 +8419,7 @@ bindings @code{M-p} and @code{M-p} for navigation.  When
 @code{highlight-symbol-on-navigation-p} is set, highlighting is triggered
 regardless of @code{highlight-symbol-idle-delay}.
 
-@code{highlight-symbol-query-replace} can be used to replace the symbol. ")
+@code{highlight-symbol-query-replace} can be used to replace the symbol.")
       (license license:gpl2+))))
 
 (define-public emacs-symbol-overlay
@@ -8565,7 +8539,7 @@ can be saved to and restored from a file.")
           (base32 "09s07mvg5bz3dm9sxgn40c7z6d6ry1sdjzsxwgmy825f3xm66avs"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)))
+     (list emacs-dash))
     (home-page "https://depp.brause.cc/eyebrowse/")
     (synopsis "Simple-minded way to manage window configs in Emacs")
     (description
@@ -8689,12 +8663,9 @@ after buffer changes.")
              #t)))
        #:include (cons* ".*\\.el$" %default-include)))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("emacs-test-simple" ,emacs-test-simple)))
+     (list autoconf automake emacs-test-simple))
     (propagated-inputs
-     `(("emacs-load-relative" ,emacs-load-relative)
-       ("emacs-loc-changes" ,emacs-loc-changes)))
+     (list emacs-load-relative emacs-loc-changes))
     (home-page "https://github.com/realgud/realgud/")
     (synopsis
      "Modular front-end for interacting with external debuggers")
@@ -8733,9 +8704,9 @@ a source code input file.")
 
 (define-public emacs-request
   ;; We prefer a more recent commit that has support for auth-source,
-  ;; which makes authentication more convenient for users and maintainers.
-  (let ((commit "d02d1347ffdf138cffd380cbeac62ac8732036ef")
-        (revision "0"))
+  ;; and has some bug fixes for Emacs 28.
+  (let ((commit "3336eaa97de923f74b90dda3e35985e122d40805")
+        (revision "1"))
     (package
       (name "emacs-request")
       (version (git-version "0.3.2" revision commit))
@@ -8747,12 +8718,12 @@ a source code input file.")
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "1rkpakzish2d470ca15yq3k0m1j7a2lrkvvddcyvc2rx0sncsdjs"))))
+                  "0jckwy5zhz95d6l3lz8b9b34pppcjjzy97fg1wn8mqzhf3h460ac"))))
       (build-system emacs-build-system)
       (arguments
        `(#:tests? #f))                  ; requires network access.
       (propagated-inputs
-       `(("emacs-deferred" ,emacs-deferred)))
+       (list emacs-deferred))
       (home-page "https://github.com/tkf/emacs-request")
       (synopsis "Package for speaking HTTP in Emacs Lisp")
       (description "This package provides a HTTP request library with multiple
@@ -8830,9 +8801,7 @@ automatically.")
          "08a15knkdq35pzjq82imff016fbfdib5q4glg2xmdy2b5fnk7jqa"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-hydra" ,emacs-hydra)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-dash emacs-hydra emacs-s))
     (arguments
      `(#:exclude (cons "^major-mode-hydra\\.el" %default-exclude)))
     (home-page "https://github.com/jerrypnz/major-mode-hydra.el")
@@ -8870,8 +8839,7 @@ by side to an Org buffer with your notes relevant to the current page.")
     (inherit emacs-pretty-hydra)
     (name "emacs-major-mode-hydra")
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-pretty-hydra" ,emacs-pretty-hydra)))
+     (list emacs-dash emacs-pretty-hydra))
     (arguments
      `(#:exclude (cons "^pretty-hydra\\.el" %default-exclude)))
     (synopsis "Create nice-looking hydras")
@@ -8891,7 +8859,7 @@ hydras with one column per group of heads.")))
         (base32 "0qpza1c45mr8fcpnm32cck4v22fnzz1yb7kww05rzgq1k9iivx5v"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-hydra" ,emacs-hydra)))
+     (list emacs-hydra))
     (home-page "https://github.com/abo-abo/swiper")
     (synopsis "Incremental vertical completion for Emacs")
     (description
@@ -8916,7 +8884,7 @@ expression.")
         (base32 "094zfapfn1l8wjf3djkipk0d9nks0g77sbk107pfsbr3skkzh031"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-swiper" ,emacs-swiper)))
+     (list emacs-swiper))
     (home-page "https://github.com/abo-abo/swiper")
     (synopsis "Various completion functions using Ivy")
     (description
@@ -8948,7 +8916,7 @@ The following completions are currently available:
         (base32 "197pq2cvvskib87aky907wv2am55vilr7y5dabmmm07a8vr9py0v"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-ivy" ,emacs-ivy)))
+     (list emacs-ivy))
     (home-page "https://github.com/abo-abo/swiper")
     (synopsis "Isearch with an overview")
     (description
@@ -8978,7 +8946,7 @@ matched.")
            "0d71nm9d9ajp5i6dnl8h1hw9jqp8gd1ajgninb1h13i80rplzl9k"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-ivy" ,emacs-ivy)))
+       (list emacs-ivy))
       (home-page "https://github.com/alexmurray/ivy-xref")
       (synopsis "Ivy interface for @code{xref}")
       (description "This package provides an Ivy interface for selecting from
@@ -9003,9 +8971,7 @@ matched.")
            "18crb4zh2pjf0cmv3b913m9vfng27girjwfqc3mk7vqd1r5a49yk"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-ivy" ,emacs-ivy)
-         ("emacs-password-store" ,emacs-password-store)
-         ("password-store" ,password-store)))
+       (list emacs-ivy emacs-password-store password-store))
       (home-page "https://github.com/ecraven/ivy-pass")
       (synopsis "Ivy interface for password store (pass)")
       (description "This package provides an Ivy interface for working with
@@ -9030,9 +8996,7 @@ the password store @code{pass}.")
            "1wfg6mmd5gl1qgvayyzpxlkh9s7jgn20y8l1vh1zbj1czvv51xp8"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-ivy" ,emacs-ivy)
-         ("emacs-yasnippet" ,emacs-yasnippet)
-         ("emacs-dash" ,emacs-dash)))
+       (list emacs-ivy emacs-yasnippet emacs-dash))
       (home-page "https://github.com/mkcms/ivy-yasnippet")
       (synopsis "Preview @code{yasnippets} with @code{ivy}")
       (description "This package allows you to select @code{yasnippet}
@@ -9062,7 +9026,7 @@ use it, call @code{M-x ivy-yasnippet} (but make sure you have enabled
           (base32 "1dv6vr7fv32v5m04zdy02sdajpvrnpc4i3pbh2dwfv73ff8d8yxm"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-ivy" ,emacs-ivy)))
+       (list emacs-ivy))
       (home-page "https://github.com/Yevgnen/ivy-rich")
       (synopsis "More friendly interface for @code{ivy}")
       (description
@@ -9120,7 +9084,7 @@ windows.")
          "0f3r40d5yxp2pm2j0nn86s29nqj8py0jxjbj50v4ci3hsd92d8jl"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-avy" ,emacs-avy)))
+     (list emacs-avy))
     (home-page "https://github.com/abo-abo/ace-window")
     (synopsis "Quickly switch windows in Emacs")
     (description
@@ -9172,8 +9136,7 @@ possible, and falls back to moving the left or top border otherwise.")
          "1cw513mh3gyl21qpmgwqjgpi8kwddmd4n69l4ax5a5pv3vvwrcx9"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-let-alist" ,emacs-let-alist)
-       ("emacs-imenu-list" ,emacs-imenu-list)))
+     (list emacs-let-alist emacs-imenu-list))
     (arguments
      '(#:include
        '("^[^/]+.el$"
@@ -9201,33 +9164,30 @@ window layout easily.")
     (license license:gpl3+)))
 
 (define-public emacs-iedit
-  ;; Last release version was in 2016.
-  (let ((commit "e2c100cdd67b7d82835d281ac2cd1bf4f374bc8f")
-        (revision "1"))
-    (package
-      (name "emacs-iedit")
-      (version (git-version "0.9.9.9" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/victorhge/iedit")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32 "0wr3w2id95wx2rma8n1ifjrv9rx37ly26ijc5zi58id0yrip3hnc"))))
-      (build-system emacs-build-system)
-      (home-page "https://www.emacswiki.org/emacs/Iedit")
-      (synopsis "Edit multiple regions in the same way simultaneously")
-      (description
-       "This package is an Emacs minor mode and allows you to edit one
+  (package
+    (name "emacs-iedit")
+    (version "0.9.9.9.9")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/victorhge/iedit")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "02jdyrff88n69d4kadjaac38gwcv28lhiqqa93rlqzdvmgqsbwak"))))
+    (build-system emacs-build-system)
+    (home-page "https://www.emacswiki.org/emacs/Iedit")
+    (synopsis "Edit multiple regions in the same way simultaneously")
+    (description
+     "This package is an Emacs minor mode and allows you to edit one
 occurrence of some text in a buffer (possibly narrowed) or region, and
 simultaneously have other occurrences edited in the same way.
 
 You can also use Iedit mode as a quick way to temporarily show only the buffer
 lines that match the current text being edited.  This gives you the effect of
 a temporary @code{keep-lines} or @code{occur}.")
-      (license license:gpl3+))))
+    (license license:gpl3+)))
 
 (define-public emacs-zoutline
   (package
@@ -9270,15 +9230,10 @@ navigate code in a tree-like fashion.")
                 (file-name (git-file-name name version))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-ace-window" ,emacs-ace-window)
-         ("emacs-hydra" ,emacs-hydra)
-         ("emacs-iedit" ,emacs-iedit)
-         ("emacs-swiper" ,emacs-swiper)
-         ("emacs-zoutline" ,emacs-zoutline)))
+       (list emacs-ace-window emacs-hydra emacs-iedit emacs-swiper
+             emacs-zoutline))
       (native-inputs
-       `(("which" ,which)
-         ("emacs-clojure-mode" ,emacs-clojure-mode)
-         ("emacs-undercover" ,emacs-undercover)))
+       (list which emacs-clojure-mode emacs-undercover))
       (arguments
        `(#:include (cons* "^lispy-clojure\\.clj$"
                           "^lispy-python\\.py$"
@@ -9330,8 +9285,7 @@ S-expression.")
                   "10k3hxxpx2v2k4dyad7j1bzmr1q7rzvv4y6c67pa9zcqyaw8m91v"))
                 (file-name (git-file-name name version))))
       (propagated-inputs
-       `(("emacs-evil" ,emacs-evil)
-         ("emacs-lispy" ,emacs-lispy)))
+       (list emacs-evil emacs-lispy))
       (build-system emacs-build-system)
       (synopsis "Minor mode for integrating Evil with lispy")
       (description
@@ -9359,8 +9313,7 @@ state and will work even without lispy being enabled.")
            "0xj1r7cn1rivaxhvawvmgx9fg3xilpfw4lkf2x2aqplr4s85ijas"))
          (file-name (git-file-name name version))))
       (propagated-inputs
-       `(("emacs-zoutline" ,emacs-zoutline)
-         ("emacs-lispy" ,emacs-lispy)))
+       (list emacs-zoutline emacs-lispy))
       (build-system emacs-build-system)
       (home-page "https://github.com/abo-abo/lpy")
       (synopsis "Modal editing for Python")
@@ -9386,10 +9339,7 @@ allowing unprefixed keys to insert their respective characters as expected.")
         (base32 "1ikl29rygr1habcsglz07m4ihd4ivi732kkzg8q676ihf367wa9i"))))
     (build-system emacs-build-system)
     (native-inputs
-     `(("emacs-buttercup" ,emacs-buttercup)
-       ("emacs-dash" ,emacs-dash)
-       ("emacs-paredit" ,emacs-paredit)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-buttercup emacs-dash emacs-paredit emacs-s))
     (arguments
      `(#:tests? #t
        #:test-command '("buttercup")))
@@ -9423,7 +9373,7 @@ It is recommended to use @code{clojure-mode} with Paredit or Smartparens.")
       (arguments
        `(#:include (cons* "^.*\\/" %default-include)))
       (propagated-inputs
-       `(("emacs-yasnippet" ,emacs-yasnippet)))
+       (list emacs-yasnippet))
       (home-page "https://github.com/mpenet/clojure-snippets")
       (synopsis "Yasnippets for Clojure")
       (description
@@ -9494,8 +9444,7 @@ The purpose of this library is to wrap all the quirks and hassle of
         (base32 "10rz0qm8a4bl0m86kx19zq8lri047p4sxqyny08bgm9pbam0wvwn"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-swiper" ,emacs-swiper)
-       ("jq" ,jq)))
+     (list emacs-swiper jq))
     (synopsis "Live preview @code{jq} queries using counsel")
     (description
      "This Emacs package provides the ability to live preview @code{jq}
@@ -9527,15 +9476,11 @@ queries using counsel.")
                (make-file-writable "counsel-notmuch.el")
                (emacs-substitute-variables "counsel-notmuch.el"
                  ("counsel-notmuch-path"
-                  (string-append (assoc-ref inputs "notmuch")
-                                 "/bin/notmuch")))
-               #t)))))
+                  (search-input-file inputs "/bin/notmuch"))))))))
       (inputs
-       `(("emacs-counsel" ,emacs-counsel)
-         ("notmuch" ,notmuch)
-         ("emacs-s" ,emacs-s)))
+       (list emacs-counsel notmuch emacs-s))
       (propagated-inputs
-       `(("emacs-notmuch" ,emacs-notmuch)))
+       (list emacs-notmuch))
       (home-page "https://github.com/fuxialexander/counsel-notmuch")
       (synopsis "Search emails in Notmuch asynchronously with Ivy")
       (description
@@ -9545,31 +9490,27 @@ asynchronously, with Counsel and Ivy.  Simply call
       (license license:gpl3+))))
 
 (define-public emacs-counsel-projectile
-  ;; Use a recent commit in order to fix recent breakage with Ivy.
-  (let ((commit "06b03c1080d3ccc3fa9b9c41b1ccbcf13f058e4b")
-        (revision "0"))
-    (package
-      (name "emacs-counsel-projectile")
-      (version (git-version "0.3.1" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/ericdanan/counsel-projectile")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32 "10afil6grwxj1x8fxd3ar7ikw3s3hzrkjsjin8wzchbz04389l7s"))))
-      (build-system emacs-build-system)
-      (propagated-inputs
-       `(("emacs-counsel" ,emacs-counsel)
-         ("emacs-projectile" ,emacs-projectile)))
-      (home-page "https://github.com/ericdanan/counsel-projectile")
-      (synopsis "Enhance Projectile with Ivy")
-      (description
-       "This package uses Ivy to provide additional actions for Projectile
+  (package
+    (name "emacs-counsel-projectile")
+    (version "0.3.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/ericdanan/counsel-projectile")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1vp39r5njfzchkqv9g0w77whazp070anh9gmbkp3z4n3xxbik27f"))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     (list emacs-counsel emacs-projectile))
+    (home-page "https://github.com/ericdanan/counsel-projectile")
+    (synopsis "Enhance Projectile with Ivy")
+    (description
+     "This package uses Ivy to provide additional actions for Projectile
 commands and replacements for existing functions.")
-      (license license:gpl3+))))
+    (license license:gpl3+)))
 
 (define-public emacs-qml-mode
   (package
@@ -9653,7 +9594,7 @@ languages.")
        (sha256
         (base32 "0nk12dcppdyhav6m6yf7abpywyd7amxd4237zsfd32w4zxsx39k1"))))
     (build-system emacs-build-system)
-    (propagated-inputs `(("emacs-epl" ,emacs-epl)))
+    (propagated-inputs (list emacs-epl))
     (home-page "https://github.com/lunaryorn/pkg-info.el")
     (synopsis "Information about Emacs packages")
     (description
@@ -9693,7 +9634,7 @@ ongoing operations.")
         (base32 "0hqp8r24wvzrkl630wbm0lynrcrnawv2yn2a3xgwqwwhwgva35rn"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-company" ,emacs-company)))
+     (list emacs-company))
     (home-page "https://github.com/ljos/sparql-mode")
     (synopsis "SPARQL mode for Emacs")
     (description
@@ -9833,15 +9774,12 @@ mode with the package emacs-julia-mode.")
     (arguments
      `(#:include (cons "^JuliaSnail\\.jl" %default-include)))
     (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)))
+     (list emacs-dash emacs-s emacs-spinner emacs-xref))
+    (propagated-inputs
+     (list libvterm
+           emacs-julia-mode ;required by parser
+           emacs-parsec ;required by parser
+           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
@@ -9873,7 +9811,7 @@ to all the other commands, too.")
 (define-public emacs-js2-mode
   (package
     (name "emacs-js2-mode")
-    (version "20201220")
+    (version "20211229")
     (source
      (origin
        (method git-fetch)
@@ -9882,7 +9820,7 @@ to all the other commands, too.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "00jy917cgp5xzfgs4m0spzlbqk8mg63layin8nxmn2647rfjnik4"))))
+        (base32 "1wcz3xji7viqxa5is81jd7in7x1fya6rzybm8qj9rwgdc8camvyb"))))
     (build-system emacs-build-system)
     (arguments
      `(#:tests? #t
@@ -9912,9 +9850,9 @@ strings, and code folding.")
                 "0a5mmg3cmdi73giblp07ksl06xzl9nb2m3f96ny4r3rv0ar3v1bx"))))
     (build-system emacs-build-system)
     (inputs
-     `(("node" ,node)))
+     (list node))
     (native-inputs
-     `(("emacs-ert-expectations" ,emacs-ert-expectations)))
+     (list emacs-ert-expectations))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -9982,7 +9920,7 @@ indentation and filling of comments and C preprocessor fontification.")
 (define-public emacs-tide
   (package
     (name "emacs-tide")
-    (version "4.2.3")
+    (version "4.5.4")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -9991,13 +9929,10 @@ indentation and filling of comments and C preprocessor fontification.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1fj2fghiycnzds2zxfxgj1d9mdzsvs9rvl9bwy2f1vwawqk1m48w"))))
+                "0zrapfxdarakp3kwp73c2ymjx51fsnfk6azi2y1wb2kgsdxl2yim"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-s" ,emacs-s)
-       ("emacs-flycheck" ,emacs-flycheck)
-       ("emacs-typescript-mode" ,emacs-typescript-mode)))
+     (list emacs-dash emacs-flycheck emacs-s emacs-typescript-mode))
     (home-page "https://github.com/ananthakumaran/tide")
     (synopsis "Typescript IDE for Emacs")
     (description
@@ -10058,8 +9993,7 @@ in Emacs.")
           (base32 "1z1sjn6dcqv8mmkh6nfcwhnql2z6xr9yx3hs77bfxj79pf3c466p"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-evil" ,emacs-evil)
-         ("emacs-markdown-mode" ,emacs-markdown-mode)))
+       (list emacs-evil emacs-markdown-mode))
       (home-page "https://github.com/Somelauw/evil-markdown/")
       (synopsis "Evil keybindings for @code{markdown-mode}")
       (description
@@ -10101,8 +10035,7 @@ like @code{org-edit-src-code} but for arbitrary regions.")
                 "1wy2kpli90z7p4dqr4b7f1fv99g6lfxi1kzy2bfl0p8qi40rpmyv"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-pkg-info" ,emacs-pkg-info)))
+     (list emacs-dash emacs-pkg-info))
     (home-page "https://github.com/bbatsov/projectile")
     (synopsis "Manage and navigate projects in Emacs easily")
     (description
@@ -10130,12 +10063,9 @@ If you want to mark a folder manually as a project just create an empty
                   "12bdgykfh4mwsqdazxjdvha62h3q3v33159ypy91f6x59y01fi0n"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-s" ,emacs-s)
-         ("emacs-f" ,emacs-f)
-         ("emacs-dash" ,emacs-dash)
-         ("emacs-let-alist" ,emacs-let-alist)))
+       (list emacs-s emacs-f emacs-dash emacs-let-alist))
       (native-inputs
-       `(("emacs-ert-runner" ,emacs-ert-runner)))
+       (list emacs-ert-runner))
       (arguments
        `(#:include (cons "^project-skeletons\\/" %default-include)
          ;; XXX: one failing test involving initializing a git repo
@@ -10205,14 +10135,6 @@ and RSS, with a user interface inspired by notmuch.")
          (sha256
           (base32 "0a2ibka82xq1dhy2z7rd2y9zhcj8rna8357881yz49wf55ccgm53"))))
       (build-system emacs-build-system)
-      (propagated-inputs
-       `(("emacs-elfeed" ,emacs-elfeed)
-         ("emacs-org" ,emacs-org)
-         ("emacs-dash" ,emacs-dash)
-         ("emacs-s" ,emacs-s)))
-      (native-inputs
-       `(("ert-runner" ,emacs-ert-runner)
-         ("emacs-xtest" ,emacs-xtest)))
       (arguments
        `(#:tests? #t
          #:test-command '("ert-runner" "-L" "org-mode/lisp")
@@ -10220,8 +10142,11 @@ and RSS, with a user interface inspired by notmuch.")
          (modify-phases %standard-phases
            (add-before 'check 'chmod
              (lambda _
-               (chmod "test/fixture-mark-feed-ignore.org" #o644)
-               #t)))))
+               (chmod "test/fixture-mark-feed-ignore.org" #o644))))))
+      (propagated-inputs
+       (list emacs-elfeed emacs-org emacs-dash emacs-s))
+      (native-inputs
+       (list emacs-ert-runner emacs-xtest))
       (home-page "https://github.com/remyhonig/elfeed-org")
       (synopsis "Configure Elfeed with an Org-mode file")
       (description
@@ -10247,7 +10172,7 @@ much easier.")
         (base32 "07r1qlldgd0kfikd0y737y5n42ab3nkw2s5jx7frimj41yandbdp"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-elfeed" ,emacs-elfeed)))
+     (list emacs-elfeed))
     (home-page "https://github.com/fasheng/elfeed-protocol")
     (synopsis "Fever/NewsBlur/ownCloud/tt-RSS protocols for Elfeed")
     (description
@@ -10259,7 +10184,7 @@ with Elfeed.")
 (define-public emacs-elfeed-score
   (package
     (name "emacs-elfeed-score")
-    (version "1.0.0")
+    (version "1.2.1")
     (source
      (origin
        (method git-fetch)
@@ -10268,10 +10193,10 @@ with Elfeed.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1idd7qn8hfcj04rm4v4g65wdmnv3nzh2g129hmx443nf4xbv0irb"))))
+        (base32 "10wsjq2zd6kz9182gnkjzlzywx16j29dgm1gzwynr79xmvgs4r2b"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-elfeed" ,emacs-elfeed)))
+     (list emacs-elfeed))
     (home-page "https://github.com/sp1ff/elfeed-score")
     (synopsis "Gnus-style scoring for Elfeed")
     (description
@@ -10357,8 +10282,7 @@ suggestion is taken.")
                 "0ysxblc90kjcz84siprnyxwh94scflivqbxylzkvjm7hbx93rsh1"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-f" ,emacs-f)
-       ("emacs-xterm-color" ,emacs-xterm-color)))
+     (list emacs-f emacs-xterm-color))
     (home-page "https://github.com/dieggsy/eterm-256color")
     (synopsis
      "Customizable 256 colors for Emacs @code{term} and @code{ansi-term}")
@@ -10370,23 +10294,23 @@ customizable 256 color support to @code{term} and @code{ansi-term}.")
   (package
     (name "emacs-mocker")
     (version "0.5.0")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/sigma/mocker.el")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1dc514cqbfmg33sb3j90s5jmw6jnm3wzvs0zhw3maz13bp7w6z48"))))
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/sigma/mocker.el")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1dc514cqbfmg33sb3j90s5jmw6jnm3wzvs0zhw3maz13bp7w6z48"))))
     (build-system emacs-build-system)
     (arguments
      `(#:tests? #t
        #:test-command '("ert-runner")))
     (native-inputs
-     `(("ert-runner" ,emacs-ert-runner)))
+     (list emacs-ert-runner))
     (propagated-inputs
-     `(("emacs-el-x" ,emacs-el-x)))
+     (list emacs-el-x))
     (home-page "https://github.com/sigma/mocker.el")
     (synopsis "Mocking framework for Emacs Lisp")
     (description "Mocker.el is a framework for writing tests in Emacs Lisp.
@@ -10398,21 +10322,25 @@ maximizes flexibility (at the expense of conciseness).")
   (package
     (name "emacs-find-file-in-project")
     (version "6.1.2")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/technomancy/find-file-in-project")
-                    (commit version)))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "00i62qspgmpg45gfzyq722wnni3yfmrkvlva8kmxdv5id919x1sc"))))
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/technomancy/find-file-in-project")
+             ;; The "6.1.2" tag was modified in place, initially pointing to
+             ;; 756f616f77f3829de07821480e229c587c1afec0 and then change to
+             ;; the subsequent commit,
+             ;; 52274e6001545bdf45c6477ba21bfaa8eca04755.
+             (commit "756f616f77f3829de07821480e229c587c1afec0")))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "00i62qspgmpg45gfzyq722wnni3yfmrkvlva8kmxdv5id919x1sc"))))
     (build-system emacs-build-system)
     (arguments
      `(#:tests? #t
        #:test-command '("ert-runner" "tests")))
     (native-inputs
-     `(("ert-runner" ,emacs-ert-runner)))
+     (list emacs-ert-runner))
     (home-page "https://github.com/technomancy/find-file-in-project")
     (synopsis "File/directory finder for Emacs")
     (description "@code{find-file-in-project} finds files or
@@ -10425,15 +10353,15 @@ functions to assist in reviewing changes on files.")
   (package
     (name "emacs-pyvenv")
     (version "1.21")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/jorgenschaefer/pyvenv")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "055sgk8zf4wb5nqsf3qasf5gg861zlb1831733f1qcrd2ij5gzxx"))))
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/jorgenschaefer/pyvenv")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "055sgk8zf4wb5nqsf3qasf5gg861zlb1831733f1qcrd2ij5gzxx"))))
     (build-system emacs-build-system)
     (arguments
      `(#:phases
@@ -10444,8 +10372,7 @@ functions to assist in reviewing changes on files.")
        #:tests? #t
        #:test-command '("ert-runner")))
     (native-inputs
-     `(("ert-runner" ,emacs-ert-runner)
-       ("emacs-mocker" ,emacs-mocker)))
+     (list emacs-ert-runner emacs-mocker))
     (home-page "https://github.com/jorgenschaefer/pyvenv")
     (synopsis "Python virtual environment interface for Emacs")
     (description "pyvenv.el is a minor mode to support using Python virtual
@@ -10513,86 +10440,94 @@ indentation guides in Emacs:
       (license license:gpl2+))))
 
 (define-public emacs-elpy
-  (package
-    (name "emacs-elpy")
-    (version "1.35.0")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/jorgenschaefer/elpy")
-                    (commit version)))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "07rdb9w3bxzfr07224awa541xdy116hyc2b3bpl3fc3ikddmbydk"))))
-    (build-system emacs-build-system)
-    (arguments
-     `(#:include (cons* "^elpy/[^/]+\\.py$" "^snippets\\/" %default-include)
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'patch-ffip-project-search-call
-           (lambda _
-             ;; Since version 6.0.0 of find-file-in-project,
-             ;; ffip-project-search doesn't accept a third argument anymore
-             ;; (see: https://github.com/jorgenschaefer/elpy/issues/1889).
-             (substitute* "elpy.el"
-               (("\\((ffip-project-search nil nil) project-root\\)" _ signature)
-                (format #f "(let ((ffip-project-root project-root)) (~a))"
-                        signature)))))
-         ;; The default environment of the RPC uses Virtualenv to install
-         ;; Python dependencies from PyPI.  We don't want/need this in Guix.
-         (add-before 'check 'do-not-use-virtualenv
-           (lambda _
-             (setenv "ELPY_TEST_DONT_USE_VIRTUALENV" "1")
-             (substitute* "elpy-rpc.el"
-               (("defcustom elpy-rpc-virtualenv-path 'default")
-                "defcustom elpy-rpc-virtualenv-path 'system"))))
-         (add-before 'check 'build-doc
-           (lambda _
-             (with-directory-excursion "docs"
-               (invoke "make" "info" "man"))
-             ;; Move .info file at the root so that it can installed by the
-             ;; 'move-doc phase.
-             (rename-file "docs/_build/texinfo/Elpy.info" "Elpy.info")))
-         (add-after 'build-doc 'install-manpage
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out  (assoc-ref outputs "out"))
-                    (man1 (string-append out "/share/man/man1")))
-               (mkdir-p man1)
-               (copy-file "docs/_build/man/elpy.1"
-                          (string-append man1 "/elpy.1"))))))
-       #:tests? #t
-       #:test-command '("ert-runner")))
-    (propagated-inputs
-     `(("emacs-company" ,emacs-company)
-       ("emacs-find-file-in-project" ,emacs-find-file-in-project)
-       ("emacs-highlight-indentation" ,emacs-highlight-indentation)
-       ("emacs-yasnippet" ,emacs-yasnippet)
-       ("pyvenv" ,emacs-pyvenv)
-       ("s" ,emacs-s)
-       ;; The following are recommended Python dependencies that make Elpy
-       ;; much more useful.  Installing these avoids Elpy prompting to install them
-       ;; from PyPI using pip.
-       ("python-autopep8" ,python-autopep8)
-       ("python-black" ,python-black)
-       ("python-flake8" ,python-flake8)
-       ("python-jedi" ,python-jedi)
-       ("python-rope" ,python-rope)
-       ("python-yapf" ,python-yapf)))
-    (native-inputs
-     `(("ert-runner" ,emacs-ert-runner)
-       ("emacs-f" ,emacs-f)
-       ("python" ,python-wrapper)
-       ;; For documentation.
-       ("python-sphinx" ,python-sphinx)
-       ("texinfo" ,texinfo)))
-    (home-page "https://github.com/jorgenschaefer/elpy")
-    (synopsis "Python development environment for Emacs")
-    (description "Elpy brings powerful Python editing to Emacs.  It combines
+  ;; Use the latest commit, as it contains unreleased fixes for Python 3.9 and
+  ;; Jedi 0.18.
+  (let ((commit "8d0de310d41ebf06b22321a8534546447456870c")
+        (revision "0"))
+    (package
+      (name "emacs-elpy")
+      (version (git-version "1.35.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/jorgenschaefer/elpy")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0hg6yk0wkfh2rwcc4h0bb6m2p3dg62ja22mjpa94khq52lv1piwf"))))
+      (build-system emacs-build-system)
+      (arguments
+       `(#:include (cons* "^elpy/[^/]+\\.py$" "^snippets\\/" %default-include)
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'disable-broken-tests
+             ;; Some tests are known to have problems with Python 3.9; disable
+             ;; them (see:
+             ;; https://github.com/jorgenschaefer/elpy/issues/1856).
+             ;; Aggressively remove the modules where failing tests were
+             ;; discovered, as they are similar and fail in a nondeterministic
+             ;; way.
+             (lambda _
+               (with-directory-excursion "test"
+                 (for-each delete-file
+                           (append (find-files "." "elpy-refactor")
+                               (find-files "." "elpy-multiedit")
+                             (find-files "." "elpy-pdb")
+                             (find-files "." "elpy-promise"))))))
+           ;; The default environment of the RPC uses Virtualenv to install
+           ;; Python dependencies from PyPI.  We don't want/need this in Guix.
+           (add-before 'check 'do-not-use-virtualenv
+             (lambda _
+               (setenv "ELPY_TEST_DONT_USE_VIRTUALENV" "1")
+               (substitute* "elpy-rpc.el"
+                 (("defcustom elpy-rpc-virtualenv-path 'default")
+                  "defcustom elpy-rpc-virtualenv-path 'system"))))
+           (add-before 'check 'build-doc
+             (lambda _
+               (with-directory-excursion "docs"
+                 (invoke "make" "info" "man"))
+               ;; Move .info file at the root so that it can installed by the
+               ;; 'move-doc phase.
+               (rename-file "docs/_build/texinfo/Elpy.info" "Elpy.info")))
+           (add-after 'build-doc 'install-manpage
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out  (assoc-ref outputs "out"))
+                      (man1 (string-append out "/share/man/man1")))
+                 (mkdir-p man1)
+                 (copy-file "docs/_build/man/elpy.1"
+                            (string-append man1 "/elpy.1"))))))
+         #:tests? #t
+         #:test-command '("ert-runner")))
+      (propagated-inputs
+       (list emacs-company
+             emacs-find-file-in-project
+             emacs-highlight-indentation
+             emacs-yasnippet
+             emacs-pyvenv
+             emacs-s
+             ;; The following are recommended Python dependencies that make
+             ;; Elpy much more useful.  Installing these avoids Elpy prompting
+             ;; to install them from PyPI using pip.
+             python-autopep8
+             python-black
+             python-flake8
+             python-jedi
+             python-yapf))
+      (native-inputs
+       (list emacs-ert-runner
+             emacs-f
+             python-wrapper
+             ;; For documentation.
+             python-sphinx
+             texinfo))
+      (home-page "https://github.com/jorgenschaefer/elpy")
+      (synopsis "Python development environment for Emacs")
+      (description "Elpy brings powerful Python editing to Emacs.  It combines
 and configures a number of other packages written in Emacs Lisp as well as
 Python, together offering features such as navigation, documentation,
 completion, interactive development and more.")
-    (license license:gpl3+)))
+      (license license:gpl3+))))
 
 (define-public emacs-rainbow-delimiters
   (package
@@ -10667,11 +10602,11 @@ names, e.g., @samp{#0000ff} is displayed in white with a blue background.")
 (define-public emacs-ryo-modal
   ;; Package has no release.  Version is extracted from "Version:" keyword in
   ;; main file.
-  (let ((commit "3a54312eea7023a86ca3f8eb3c03c872554bff2f")
+  (let ((commit "a10f564474cc8fa28a74b04e3b15375315223c44")
         (revision "0"))
     (package
       (name "emacs-ryo-modal")
-      (version (git-version "0.4" revision commit))
+      (version (git-version "0.45" revision commit))
       (source
        (origin
          (method git-fetch)
@@ -10680,7 +10615,7 @@ names, e.g., @samp{#0000ff} is displayed in white with a blue background.")
                (commit commit)))
          (file-name (git-file-name name version))
          (sha256
-          (base32 "1cyvp3bi6yhckbdnq98xvghmhdzghya5y9wd7hxjawibs75rza95"))))
+          (base32 "0ypm1rnyry6hb4znb8sgwfi0la6q46ihm8k99kisk0mkgz7im93d"))))
       (build-system emacs-build-system)
       (home-page "https://github.com/Kungsgeten/ryo-modal")
       (synopsis "Emacs minor mode for defining modal editing environments")
@@ -10752,7 +10687,7 @@ window edge.")
          "0y4jcja9kml1lq88r8b9myk39dgaggh7q7f3a43sj828hvzlccb7"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-visual-fill-column" ,emacs-visual-fill-column)))
+     (list emacs-visual-fill-column))
     (home-page "https://github.com/joostkremers/writeroom-mode")
     (synopsis "Distraction-free writing for Emacs")
     (description
@@ -10785,8 +10720,7 @@ restrict the text width to 80 characters.")
                     (lambda _ (setenv "HOME" (getcwd)))))))
     (native-inputs
      ;; For tests.
-     `(("aspell" ,aspell)
-       ("aspell-dict-en" ,aspell-dict-en)))
+     (list aspell aspell-dict-en))
     (home-page "https://github.com/redguardtoo/wucuo")
     (synopsis "Fast spell checker for camel case code or plain text")
     (description
@@ -10810,7 +10744,7 @@ a file, or a complete directory.")
                 "1wn94nkfv6qyyj6clvms7m7ncqf09bgszv67may530y75kylivav"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-s" ,emacs-s)))
+     (list emacs-s))
     (home-page "https://github.com/DarwinAwardWinner/ido-ubiquitous")
     (synopsis "Replacement for completing-read using ido")
     (description
@@ -10835,7 +10769,7 @@ Emacs completion function instead.")
                 "08iwvqknicqlffda7ixwgzw7q9g2g4j4nsxdw6544r85vaysi4cc"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-ido-completing-read+" ,emacs-ido-completing-read+)))
+     (list emacs-ido-completing-read+))
     (home-page "https://github.com/DarwinAwardWinner/ido-ubiquitous")
     (synopsis "Use ido (nearly) everywhere")
     (description
@@ -10843,6 +10777,28 @@ Emacs completion function instead.")
 that uses the standard completion function completing-read.")
   (license license:gpl3+)))
 
+(define-public emacs-yaml
+  (package
+    (name "emacs-yaml")
+    (version "0.3.4")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/zkry/yaml.el")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "13fjxrr7iyfagbm21p5is5jw1zv56ns2mnac145v8lqli6mrr5gx"))))
+    (build-system emacs-build-system)
+    (home-page "https://github.com/zkry/yaml.el")
+    (synopsis "YAML parser in Elisp")
+    (description
+     "@code{yaml.el} is a YAML parser written in Emacs Lisp without any
+external dependencies.  It provides an interface similar to the Emacs JSON
+parsing utility.")
+    (license license:gpl3+)))
+
 (define-public emacs-yaml-mode
   (package
     (name "emacs-yaml-mode")
@@ -10881,7 +10837,7 @@ behavior very similar to that of Python mode.")
                 "16fb4r3vq8xkzl911v7gaky95w1agfxjlpaxpjmidwx48rbcar59"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-yaml-mode" ,emacs-yaml-mode)))
+     (list emacs-yaml-mode))
     (home-page "https://gitlab.com/joewreschnig/gitlab-ci-mode/")
     (synopsis "Emacs mode for editing GitLab CI files")
     (description
@@ -10906,8 +10862,7 @@ via @code{gitlab-ci-lint}.")
                 "1c5js19zyb1z61hapvbfcl5jhrjqij46cxldgqij6al0scw44dga"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-helm" ,emacs-helm)))
+     (list emacs-dash emacs-helm))
     (home-page "https://gitlab.com/sasanidas/gitlab-snip-helm/")
     (synopsis "GitLab snippet API interaction for Emacs")
     (description "This package provides GitLab snippet API interaction for
@@ -10985,7 +10940,7 @@ ack, ag, helm and pt.")
 (define-public emacs-helm
   (package
     (name "emacs-helm")
-    (version "3.8.0")
+    (version "3.8.2")
     (source
      (origin
        (method git-fetch)
@@ -10994,11 +10949,10 @@ ack, ag, helm and pt.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1xrpv0sqmlwn94bc31k2iav284i1hl95937541ihlkhqg6v2vwrv"))))
+        (base32 "1xkxlbjpqhfhakmfi664cq7i5968941vpngq94napmhbgqydp4qn"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-async" ,emacs-async)
-       ("emacs-popup" ,emacs-popup)))
+     (list emacs-async emacs-popup))
     (home-page "https://emacs-helm.github.io/helm/")
     (synopsis
      "Incremental completion and selection narrowing framework for Emacs")
@@ -11025,7 +10979,7 @@ stuff in Emacs (like buffers, files, etc).")
           (base32 "0kcjhwwi492n9m2w894hvdavfvhj45zygy7bwvx103wvpay5h6h6"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-helm" ,emacs-helm)))
+       (list emacs-helm))
       (home-page "https://github.com/emacs-helm/helm-org")
       (synopsis "Helm interface to the Silver Searcher")
       (description
@@ -11048,7 +11002,7 @@ as well as features for editing search results.")
         (base32 "1qjay0fvryxa8n1ws6r1by512p2fylb2nj7ycm1497fcalb0d706"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-helm" ,emacs-helm)))
+     (list emacs-helm))
     (home-page "https://github.com/emacsorphanage/helm-swoop")
     (synopsis "Filter and jump to lines in an Emacs buffer using Helm")
     (description
@@ -11071,7 +11025,7 @@ for search-based navigation of buffers.")
         (base32 "0ml9yp3qaiwn7iixyxvsj3fxn7gw913qxisr47df57q4ka912law"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-helm" ,emacs-helm)))
+     (list emacs-helm))
     (home-page "https://github.com/syohex/emacs-helm-ag")
     (synopsis "Helm interface to the Silver Searcher")
     (description
@@ -11094,8 +11048,7 @@ as well as features for editing search results.")
         (base32 "05gpg90gg03yalmv9fw1y9k21i2l617iipvs0p9n80aln8nrzs8g"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-helm" ,emacs-helm)
-       ("emacs-projectile" ,emacs-projectile)))
+     (list emacs-helm emacs-projectile))
     (home-page "https://github.com/bbatsov/helm-projectile")
     (synopsis "Helm integration for Projectile")
     (description
@@ -11120,8 +11073,7 @@ as well as features for editing search results.")
            "1lkdvmjn3alhqxq2i64sdr977sbw3g0b2670d9bwyzi67qh0jxrv"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-async" ,emacs-async)
-         ("emacs-projectile" ,emacs-projectile)))
+       (list emacs-async emacs-projectile))
       (home-page "https://github.com/emacs-taskrunner/emacs-taskrunner")
       (synopsis "Retrieve tasks from various build systems and task-runners")
       (description "This package parses Makefiles and build-system files for
@@ -11146,9 +11098,7 @@ multiple project types.")
            "1wf4s4k0ap21f7g5w6128an8nsvbja7f5n889vcml5b6gjz058db"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-ivy" ,emacs-ivy)
-         ("emacs-taskrunner" ,emacs-taskrunner)
-         ("emacs-projectile" ,emacs-projectile)))
+       (list emacs-ivy emacs-taskrunner emacs-projectile))
       (home-page "https://github.com/emacs-taskrunner/ivy-taskrunner")
       (synopsis "Retrieve build-system tasks using Ivy")
       (description "This package provides an Ivy interface for selecting
@@ -11173,9 +11123,7 @@ Makefile targets.")
            "182lmr858fx6rdhp1fy7kv8dvrhzcnxzwfck1q22s6xs8x85d5q7"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-helm" ,emacs-helm)
-         ("emacs-taskrunner" ,emacs-taskrunner)
-         ("emacs-projectile" ,emacs-projectile)))
+       (list emacs-helm emacs-taskrunner emacs-projectile))
       (home-page "https://github.com/emacs-taskrunner/helm-taskrunner")
       (synopsis "Retrieve build-system tasks using Helm")
       (description "This package provides a Helm interface for selecting
@@ -11200,8 +11148,7 @@ Makefile targets.")
            "1y2v77mmd1bfkkz51cnk1l0dg3lvvxc39wlamnm7wjns66dbvlam"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-helm" ,emacs-helm)
-         ("emacs-projectile" ,emacs-projectile)))
+       (list emacs-helm emacs-projectile))
       (home-page "https://github.com/abo-abo/helm-make")
       (synopsis "Select a Makefile target with helm")
       (description "@code{helm-make} or @code{helm-make-projectile} will give
@@ -11212,7 +11159,7 @@ target will call @code{compile} on it.")
 (define-public emacs-cider
   (package
     (name "emacs-cider")
-    (version "1.1.1")
+    (version "1.2.0")
     (source
      (origin
        (method git-fetch)
@@ -11221,18 +11168,18 @@ target will call @code{compile} on it.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0psd8zrhs5w1cfmksd5sjgy9xzfs9i9zp55g97rp7zp6y5als0lx"))))
+        (base32 "1c21hdrf6b7zc65nr7wqjhcyq5a0f4aa91wrxgzx374q81xym2rf"))))
     (build-system emacs-build-system)
     (arguments
      '(#:exclude                        ;don't exclude 'cider-test.el'
        '("^\\.dir-locals\\.el$" "^test/")))
     (propagated-inputs
-     `(("emacs-clojure-mode" ,emacs-clojure-mode)
-       ("emacs-parseedn" ,emacs-parseedn)
-       ("emacs-pkg-info" ,emacs-pkg-info)
-       ("emacs-queue" ,emacs-queue)
-       ("emacs-sesman" ,emacs-sesman)
-       ("emacs-spinner" ,emacs-spinner)))
+     (list emacs-clojure-mode
+           emacs-parseedn
+           emacs-pkg-info
+           emacs-queue
+           emacs-sesman
+           emacs-spinner))
     (home-page "https://cider.mx/")
     (synopsis "Clojure development environment for Emacs")
     (description
@@ -11251,12 +11198,12 @@ CIDER).")
 
 (define-public emacs-sly
   ;; Update together with sbcl-slynk.
-  (let ((commit "fb84318c08f59bc786e047006fc81e2ace568309"))
+  (let ((commit "0470c0281498b9de072fcbf3718fc66720eeb3d0"))
     ;; Versions are not always tagged.  Besides, latest master contains
     ;; important fixes.
     (package
       (name "emacs-sly")
-      (version (git-version "1.0.43" "4" commit))
+      (version (git-version "1.0.43" "5" commit))
       (source
        (origin
          (method git-fetch)
@@ -11266,10 +11213,10 @@ CIDER).")
          (file-name (git-file-name name version))
          (sha256
           (base32
-           "0z123k9ak7yjb9bxb5qx48f33ma8066rhkqh8xc14z7shk75jybj"))))
+           "1ws2a9azmdkkg47xnd4jggna45nf0bh54gyp0799b44c4bgjp029"))))
       (build-system emacs-build-system)
       (native-inputs
-       `(("texinfo" ,texinfo)))
+       (list texinfo))
       (arguments
        `(#:include (cons* "^contrib\\/" "^lib\\/" "^slynk\\/" %default-include)
          #:phases
@@ -11348,7 +11295,7 @@ xref, etc.) are still available, but with better integration.")
            "1vfqmvayf35g6y3ljsm3rlzv5jm50qikhh4lv2zkkswj6gkkb1cv"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-sly" ,emacs-sly)))
+       (list emacs-sly))
       (arguments
        `(#:include (cons* "\\.lisp$" "\\.asd$" %default-include)
          #:phases
@@ -11359,7 +11306,7 @@ xref, etc.) are still available, but with better integration.")
       (synopsis "Quicklisp support for SLY")
       (description
        "@command{sly-quicklisp} is an external contrib for SLY that provides a
-sly-quickload command that prompts the user for a package to install. ")
+sly-quickload command that prompts the user for a package to install.")
       (license license:gpl3+))))
 
 (define-public emacs-sly-asdf
@@ -11381,8 +11328,7 @@ sly-quickload command that prompts the user for a package to install. ")
            "09x8l37wwqw74xc2frwzbfdb1if8rb3szg5akdk3v2qhik4sm3dd"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-sly" ,emacs-sly)
-         ("emacs-popup" ,emacs-popup)))
+       (list emacs-sly emacs-popup))
       (arguments
        '(#:include (cons* "\\.lisp$" "\\.asd$" %default-include)))
       (synopsis "ASDF contrib for SLY")
@@ -11410,7 +11356,7 @@ additional support for working with ASDF projects.")
            "16asd119rzqrlclps2q6yrkis8jy5an5xgzzqvb7jdyq39zxg54q"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-sly" ,emacs-sly)))
+       (list emacs-sly))
       (arguments
        '(#:include (cons* "\\.lisp$" "\\.asd$" %default-include)
          #:phases (modify-phases %standard-phases
@@ -11442,8 +11388,7 @@ file.")
            "1nxf28gn4f3n0wnv7nb5sgl36fz175y470zs9hig4kq8cp0yal0r"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-sly" ,emacs-sly)
-         ("emacs-macrostep" ,emacs-macrostep)))
+       (list emacs-sly emacs-macrostep))
       (arguments
        '(#:include (cons* "\\.lisp$" "\\.asd$" %default-include)
          #:phases
@@ -11480,9 +11425,9 @@ inside the source file.")
              #t))))
       (build-system emacs-build-system)
       (inputs
-       `(("cl-agnostic-lizard" ,cl-agnostic-lizard)))
+       (list cl-agnostic-lizard))
       (propagated-inputs
-       `(("emacs-sly" ,emacs-sly)))
+       (list emacs-sly))
       (arguments
        `(#:include (cons* "\\.lisp$" "\\.asd$" %default-include)
          #:phases
@@ -11536,7 +11481,7 @@ Common Lisp, realized as an extension to SLY.")
            "1216idyp034nkqddhw4p53jkhhdxa6xnjjmsvijpf4rxqnfqvapg"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-sly" ,emacs-sly)))
+       (list emacs-sly))
       (arguments
        '(#:include (cons* "\\.lisp$" "\\.asd$" %default-include)
          #:phases
@@ -11569,8 +11514,7 @@ using package inferred style.")
      `(#:tests? #t
        #:test-command '("buttercup" "-l" "lua-mode.el")))
     (native-inputs
-     `(("emacs-buttercup" ,emacs-buttercup)
-       ("lua" ,lua)))
+     (list emacs-buttercup lua))
     (synopsis "Major mode for lua")
     (description
      "This Emacs package provides a mode for @uref{https://www.lua.org/,
@@ -11580,7 +11524,7 @@ Lua programming language}.")
 (define-public emacs-ebuild-mode
   (package
     (name "emacs-ebuild-mode")
-    (version "1.53")
+    (version "1.55")
     (source
      (origin
        (method url-fetch)
@@ -11589,20 +11533,19 @@ Lua programming language}.")
              "ebuild-mode-" version ".tar.xz"))
        (file-name (string-append name "-" version ".tar.xz"))
        (sha256
-        (base32 "1l740qp71df9ids0c49kvp942rk8k1rfkg1hyv7ysfns5shk7b9l"))))
+        (base32 "1bs2s5g79vrbk8544lvp388cdbig0s121kwk0h10hif4kp56ka9w"))))
     (build-system emacs-build-system)
     (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (add-after 'install 'install-doc
-           (lambda* (#:key outputs #:allow-other-keys)
-             (invoke "make" "ebuild-mode.info")
-             (install-file "ebuild-mode.info"
-                           (string-append (assoc-ref outputs "out")
-                                          "/share/info"))
-             #t)))))
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'install 'install-doc
+            (lambda _
+              (invoke "make" "ebuild-mode.info")
+              (install-file "ebuild-mode.info"
+                            (string-append #$output "/share/info")))))))
     (native-inputs
-     `(("texinfo" ,texinfo)))
+     (list texinfo))
     (home-page "https://devmanual.gentoo.org")
     (synopsis "Major modes for Gentoo package files")
     (description
@@ -11638,7 +11581,7 @@ news items, openrc and runscripts.")
                  (invoke "makeinfo" "--no-split"
                          "-o" "evil.info" "evil.texi")))))))
     (build-system emacs-build-system)
-    (native-inputs `(("texinfo" ,texinfo)))
+    (native-inputs (list texinfo))
     (home-page "https://github.com/emacs-evil/evil")
     (synopsis "Extensible Vi layer for Emacs")
     (description
@@ -11650,20 +11593,19 @@ extensions.")
 (define-public emacs-evil-collection
   (package
     (name "emacs-evil-collection")
-    (version "0.0.6")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/emacs-evil/evil-collection")
-                    (commit version)))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0ssb3n1i67b6zp2j8djaalkr33x4c7zalw6vl6p5kqxkh8vy8cdf"))))
+    (version "0.0.7")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/emacs-evil/evil-collection")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1f5mbg2k527brn6b7njdjizpbzj252c53crzl8sf2564czcprqj0"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-evil" ,emacs-evil)
-       ("emacs-annalist" ,emacs-annalist)))
+     (list emacs-evil emacs-annalist))
     (arguments
      `(#:include (cons* "^modes\\/" %default-include)))
     (home-page "https://github.com/emacs-evil/evil-collection")
@@ -11691,7 +11633,7 @@ Emacs that Evil does not cover properly by default, such as @code{help-mode},
           (base32 "1p3vjrij63v9nrcyj3b5jsqzv9y7dgv9i1inx1q7x3s90vndavac"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-evil" ,emacs-evil)))
+       (list emacs-evil))
       (home-page "https://github.com/edkolev/evil-goggles")
       (synopsis "Displays visual hints when editing with evil")
       (description "Creates a visual pulse to indicate the region that is
@@ -11699,31 +11641,28 @@ being deleted, changed, yanked, or pasted when using evil commands")
       (license license:gpl3+))))
 
 (define-public emacs-goto-chg
-  (let ((commit "2af612153bc9f5bed135d25abe62f46ddaa9027f")
-        (version "1.7.3")
-        (revision "2"))
-    (package
-      (name "emacs-goto-chg")
-      (version (git-version version revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/emacs-evil/goto-chg")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32
-           "1awmvihqgw6kspx192bcp9xp56xqbma90wlhxfxmidx3bvxghwpv"))))
-      (build-system emacs-build-system)
-      (home-page "https://github.com/emacs-evil/goto-chg")
-      (synopsis "Go to the last change in the Emacs buffer")
-      (description
-       "This package provides @code{M-x goto-last-change} command that goes to
+  (package
+    (name "emacs-goto-chg")
+    (version "1.7.5")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/emacs-evil/goto-chg")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0rgdzhan4n5bd78wvivacqkp0g7jvnwzgh0571p2m4yra09a36mv"))))
+    (build-system emacs-build-system)
+    (home-page "https://github.com/emacs-evil/goto-chg")
+    (synopsis "Go to the last change in the Emacs buffer")
+    (description
+     "This package provides @code{M-x goto-last-change} command that goes to
 the point of the most recent edit in the current Emacs buffer.  When repeated,
 go to the second most recent edit, etc.  Negative argument, @kbd{C-u -}, is
 used for reverse direction.")
-      (license license:gpl2+))))
+    (license license:gpl2+)))
 
 (define-public emacs-janpath-evil-numbers
   (let ((commit "d988041c1fe6e941dc8d591390750b237f71f524")
@@ -11743,7 +11682,7 @@ used for reverse direction.")
           (base32
            "16zixhxxcb83m82f2cfiardfn99j3w41v6vh1qk6j9pplrlfw70v"))))
       (build-system emacs-build-system)
-      (propagated-inputs `(("emacs-evil" ,emacs-evil)))
+      (propagated-inputs (list emacs-evil))
       (home-page "https://github.com/janpath/evil-numbers")
       (synopsis "Increment and decrement numeric literals")
       (description
@@ -11769,7 +11708,7 @@ end of a line and increment or decrement it.")
            "0bqzch14whlmrcasakah3psrzswvkzd7mmi8hx5s64kfp29wbdhi"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-evil" ,emacs-evil)))
+       (list emacs-evil))
       (arguments
        `(#:tests? #t
          #:test-command '("make" "test")))
@@ -11796,8 +11735,7 @@ a popup window for previewing candidates.")
           (base32 "0b08y4spapl4g2292j3l4cr84gjlvm3rpma3gqld4yb1sxd7v78p"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-evil" ,emacs-evil)
-         ("emacs-paredit" ,emacs-paredit)))
+       (list emacs-evil emacs-paredit))
       (home-page "https://github.com/roman/evil-paredit")
       (synopsis "Evil extension to integrate nicely with Paredit")
       (description
@@ -11824,7 +11762,7 @@ you break the parity of parenthesis.")
           (base32
            "0k35glgsirc3cph8v5hhjrqfh4ndwh8a28qbr03y3jl8s453xcj7"))))
       (build-system emacs-build-system)
-      (propagated-inputs `(("emacs-evil" ,emacs-evil)))
+      (propagated-inputs (list emacs-evil))
       (home-page "https://github.com/wcsmith/evil-args")
       (synopsis "Motions and text objects for delimited arguments in Evil")
       (description
@@ -11847,7 +11785,7 @@ arguments, such as arguments separated by commas and semicolons.")
        (sha256
         (base32 "0s8lmmm25qabicwaj9jybpbd8mkc62yl7jnhk1lpablydjkv3w2i"))))
     (propagated-inputs
-     `(("emacs-evil" ,emacs-evil)))
+     (list emacs-evil))
     (build-system emacs-build-system)
     (home-page "https://github.com/syl20bnr/evil-escape")
     (synopsis "Escape from insert state and everything else in Emacs")
@@ -11874,8 +11812,8 @@ state and everything else in Emacs.")
           (base32
            "0bjpn4yqig17ddym6wqq5fm1b294q74hzcbj9a6gs97fqiwf88xa"))))
       (build-system emacs-build-system)
-      (propagated-inputs `(("emacs-evil" ,emacs-evil)))
-      (native-inputs `(("emacs-ert-runner" ,emacs-ert-runner)))
+      (propagated-inputs (list emacs-evil))
+      (native-inputs (list emacs-ert-runner))
       (arguments
        `(#:phases
          (modify-phases %standard-phases
@@ -11911,7 +11849,7 @@ for exchanging text.")
           (base32
            "14rpn76qrf287s3y2agmddcxi27r226i53ixjvd694ss039g0r11"))))
       (build-system emacs-build-system)
-      (propagated-inputs `(("emacs-evil" ,emacs-evil)))
+      (propagated-inputs (list emacs-evil))
       (home-page "https://github.com/Dewdrops/evil-ReplaceWithRegister")
       (synopsis "Quickly replace text with the contents of a register")
       (description
@@ -11937,7 +11875,7 @@ contents of a register.")
           (base32
            "1g6r1ydscwjvmhh1zg4q3nap4avk8lb9msdqrh7dff6pla0r2qs6"))))
       (build-system emacs-build-system)
-      (propagated-inputs `(("emacs-evil" ,emacs-evil)))
+      (propagated-inputs (list emacs-evil))
       (home-page "https://github.com/TheBB/evil-indent-plus")
       (synopsis "Text objects based on indentation")
       (description
@@ -11964,7 +11902,7 @@ surrounding lines.")
           (base32
            "074zpm6mmr1wfl6d5xdf8jk1fs4ccpbzf4ahhkwga9g71xiplszv"))))
       (build-system emacs-build-system)
-      (propagated-inputs `(("emacs-evil" ,emacs-evil)))
+      (propagated-inputs (list emacs-evil))
       (home-page "https://github.com/wbolster/evil-text-object-python")
       (synopsis "Text objects for Python")
       (description
@@ -11988,7 +11926,7 @@ surrounding lines.")
           (base32
            "1a162hynp0jcsn50c1w5a02mrw9w3q05c7lkqzqd25px3d0p772q"))))
       (build-system emacs-build-system)
-      (propagated-inputs `(("emacs-evil" ,emacs-evil)))
+      (propagated-inputs (list emacs-evil))
       (arguments
        `(#:tests? #t
          #:test-command '("make" "test")))
@@ -12016,7 +11954,7 @@ aligning text objects based on separators.")
           (base32
            "0872ix682hkdz0k8pn6sb54rqkx00rz5fxpd5j2snx406yagpaxz"))))
       (build-system emacs-build-system)
-      (propagated-inputs `(("emacs-evil" ,emacs-evil)))
+      (propagated-inputs (list emacs-evil))
       (arguments
        `(#:tests? #t
          #:test-command '("make" "test")))
@@ -12031,7 +11969,7 @@ pasting into and from @code{tmux} paste buffers.")
 (define-public emacs-evil-nerd-commenter
   (package
     (name "emacs-evil-nerd-commenter")
-    (version "3.5.5")
+    (version "3.5.6")
     (source
      (origin
        (method git-fetch)
@@ -12041,9 +11979,9 @@ pasting into and from @code{tmux} paste buffers.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1qrlg4cxlsd4cf1z8j2662pfb9p6pnqpsyb74flja9cqv6g5ylp8"))))
+         "1y6qy4gv7k8aghi5snvh248nxpgxv0daryd2794n6gfb4ciwycrr"))))
     (build-system emacs-build-system)
-    (propagated-inputs `(("emacs-evil" ,emacs-evil)))
+    (propagated-inputs (list emacs-evil))
     (home-page "https://github.com/redguardtoo/evil-nerd-commenter")
     (synopsis "Comment and uncomment lines efficiently")
     (description
@@ -12066,7 +12004,7 @@ pasting into and from @code{tmux} paste buffers.")
         (base32
          "1gfyrq7xfzmzh3x8k5f08n027dlbwi0pkkxf9c39fkxp4jngibsz"))))
     (build-system emacs-build-system)
-    (propagated-inputs `(("emacs-evil" ,emacs-evil)))
+    (propagated-inputs (list emacs-evil))
     (home-page "https://github.com/troyp/evil-visual-replace")
     (synopsis "Replacement commands for @code{evil-mode} visual blocks")
     (description
@@ -12092,7 +12030,7 @@ pasting into and from @code{tmux} paste buffers.")
           (base32
            "0mkbzw12fav945icibc2293m5haxqr3hzkyli2cf4ssk6yvn0x4c"))))
       (build-system emacs-build-system)
-      (propagated-inputs `(("emacs-evil" ,emacs-evil)))
+      (propagated-inputs (list emacs-evil))
       (home-page "https://github.com/bling/evil-visualstar")
       (synopsis "Instantly search using the visual selection")
       (description
@@ -12213,27 +12151,54 @@ passive voice.")
 (define-public emacs-org
   (package
     (name "emacs-org")
-    (version "9.5")
+    (version "9.5.2")
     (source
      (origin
-       (method url-fetch)
-       (uri (string-append "https://elpa.gnu.org/packages/org-" version ".tar"))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://git.savannah.gnu.org/git/emacs/org-mode.git")
+             (commit (string-append "release_" version))))
+       (file-name (git-file-name name version))
        (sha256
-        (base32 "16cflg5nms5nb8w86nvwkg49zkl0rvdhigkf4xpvbs0v7zb5y3ky"))))
+        (base32 "19fg3drf5h7k46fkdn3b09s69rx8a909cslg7vp2k3b2yji77fdp"))))
     (build-system emacs-build-system)
     (arguments
-     `(#:phases
+     `(#:tests? #t
+       #:test-command '("make" "test-dirty")
+       #:phases
        (modify-phases %standard-phases
-         (add-after 'install 'install-documentation
+         (delete 'build)
+         (add-before 'check 'make
+           (lambda _
+             (invoke "make" (string-append "ORGVERSION=" ,version))))
+         (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((share (string-append (assoc-ref outputs "out") "/share"))
-                    (info-dir (string-append share "/info"))
-                    (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.5.
-               ;; (install-file "orgcard.pdf" doc-dir)
-               ))))))
+             (substitute* "local.mk"
+               (("^prefix.*")
+                (string-append "prefix = " (assoc-ref outputs "out")))
+               (("^lispdir.*")
+                (string-append "lispdir = "
+                               (elpa-directory (assoc-ref outputs "out")))))
+             ;; The dependent targets for install perform cleanup that
+             ;; partially undoes our make phase
+             (substitute* "lisp/Makefile"
+               (("^install:.*") "install:\n"))
+             (invoke "make" "install")))
+         (add-after 'unpack 'fix-tests
+           (lambda* (#:key inputs #:allow-other-keys)
+             ;; These files are modified during testing
+             (with-directory-excursion "testing/examples"
+               (for-each make-file-writable
+                         '("babel.org"
+                           "ob-awk-test.org"
+                           "ob-sed-test.org"
+                           "ob-shell-test.org"))
+               ;; Specify where sh is
+               (substitute* "babel.org"
+                 (("/bin/sh" sh)
+                  (string-append (assoc-ref inputs "bash") sh)))))))))
+    (native-inputs
+     (list texinfo))
     (home-page "https://orgmode.org/")
     (synopsis "Outline-based notes management and organizer")
     (description "Org is an Emacs mode for keeping notes, maintaining TODO
@@ -12245,7 +12210,7 @@ programming and reproducible research.")
 (define-public emacs-org-contrib
   (package
     (name "emacs-org-contrib")
-    (version "0.2")
+    (version "0.3")
     (source
      (origin
        (method git-fetch)
@@ -12254,12 +12219,16 @@ programming and reproducible research.")
              (commit (string-append "release_" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0dn6arrmm0rrm2vi94fj5fjb030ggxf8cvpmi68wr0fh8xm5l1sh"))
+        (base32 "17aca4mc3gbdh6nhlcaa5ymh1yy76nwysrvy9sfcqkzvd5lgagzc"))
        ;; XXX: ob-sclang.el is packaged separately to avoid the dependency on
-       ;; SuperCollider and qtwebengine.  This will be unnecessary in 0.3+
+       ;; SuperCollider and qtwebengine.  This will be unnecessary in 0.4+
        ;; release as the file is going to be removed from the repository.
+
+       ;; XXX: org-contacts.el is now maintained in a separate repository and
+       ;; will soon be removed from org-contrib
        (modules '((guix build utils)))
-       (snippet '(begin (delete-file "lisp/ob-sclang.el")))))
+       (snippet '(begin (delete-file "lisp/ob-sclang.el")
+                        (delete-file "lisp/org-contacts.el")))))
     (build-system emacs-build-system)
     (arguments
      `(#:phases
@@ -12268,17 +12237,62 @@ programming and reproducible research.")
            (lambda _
              (chdir "lisp"))))))
     (propagated-inputs
-     `(("arduino-mode" ,emacs-arduino-mode) ;XXX: remove after 0.3+ release.
-       ("cider" ,emacs-cider)
-       ("org" ,emacs-org)))
+     (list emacs-arduino-mode ;XXX: remove after 0.4+ release.
+           emacs-cider
+           emacs-org))
     (home-page "https://git.sr.ht/~bzg/org-contrib")
     (synopsis "Unmaintained add-ons for Org mode")
     (description
      "This package contains add-ons to Org.  Be warned that these libraries
-receive little if no maintainance and there is no guaranty that they are
+receive little if no maintenance and there is no guaranty that they are
 compatible with the Org stable version.")
     (license license:gpl3+)))
 
+(define-public emacs-org-contacts
+  ;;; XXX: Upstream made no release yet.
+  (let ((commit "3d2f39f62aefb0a32d10607703e8b1d4f43821fa")
+        (revision "0"))
+    (package
+      (name "emacs-org-contacts")
+      (version (git-version "0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/stardiviner/org-contacts.el")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0a654406w8zd1hbp8ckc975jhl9mi14xzqizzwiki625dymiw5g5"))))
+      (build-system emacs-build-system)
+      (home-page "https://github.com/stardiviner/org-contacts.el")
+      (synopsis "Contacts management system for Org mode")
+      (description "Manage your contacts from Org mode.  You can auto
+complete email addresses, export contacts to a vCard file, put birthdays
+in your Org Agenda, and more.")
+      (license license:gpl3+))))
+
+(define-public emacs-org-vcard
+  (package
+    (name "emacs-org-vcard")
+    (version "0.2.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/flexibeast/org-vcard")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "14l3xqahqmnfl3sskqcr33xpcsic8dm9cr9wmbv5la3xv14n10k7"))))
+    (build-system emacs-build-system)
+    (home-page "https://github.com/flexibeast/org-vcard")
+    (synopsis "Org mode support for vCard export and import")
+    (description
+     "This package exports and imports vCard files from within GNU Emacs' Org
+mode.")
+    (license license:gpl3+)))
+
 (define-public emacs-org-pretty-table
   ;; There is no release yet.
   (let ((commit "1331c600b83d95b28730b1bfcb48369ac1cf12ef")
@@ -12308,18 +12322,18 @@ characters.")
     (inherit emacs-org-contrib)
     (name "emacs-ob-sclang")
     (source
-     (origin (inherit (package-source emacs-org-contrib))
-             (modules '((guix build utils)))
-             (snippet
-              '(begin
-                 (for-each (lambda (file)
-                             (unless (equal? file "./ob-sclang.el")
-                               (delete-file file)))
-                           (find-files "." "\\.el"))
-                 #t))))
-    (propagated-inputs
-     `(("org" ,emacs-org)
-       ("scel" ,emacs-scel)))
+     (origin
+       (inherit (package-source emacs-org-contrib))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           (with-directory-excursion "lisp"
+             (for-each (lambda (file)
+                         (unless (equal? file "./ob-sclang.el")
+                           (delete-file file)))
+                       (find-files "." "\\.el$")))))))
+    (propagated-inputs
+     (list emacs-org emacs-scel))
     (synopsis "Org Babel support for SuperCollider")
     (description "This package adds support for evaluating @code{sclang}
 Org mode source blocks.  It is extracted from the @code{emacs-org-contrib}
@@ -12410,9 +12424,7 @@ known loosely as deftheme.  Many mode-specific customizations are included.")
         (base32 "1vql8m4nj0brmv58b6lkbhykik8n6j4i7d3nylcls78y7ihc2cz8"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-flycheck" ,emacs-flycheck)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-dash emacs-flycheck emacs-s))
     (home-page "https://github.com/bradyt/dart-mode")
     (synopsis "Emacs mode for the Dart programming language")
     (description
@@ -12434,7 +12446,7 @@ basic syntax highlighting and indentation.")
                (commit commit)))
          (file-name (git-file-name name version))
          (sha256
-          (base32 "0s6rbsb0y8i8m5b9xm4gw1p1cxsxdqnqxqqb638pygz9f76mbir1"))))
+          (base32 "1ii3cgf4hlclwaraisxksv98mmhajx517i60p1cgd7vapznn2b6v"))))
       (build-system emacs-build-system)
       (arguments
        `(#:phases
@@ -12509,7 +12521,7 @@ package provides the Emacs theme.")
        (file-name (git-file-name name version))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-popup" ,emacs-popup)))
+     (list emacs-popup))
     (home-page "https://github.com/auto-complete/auto-complete")
     (synopsis "Intelligent auto-completion extension for Emacs")
     (description
@@ -12577,7 +12589,6 @@ editing nginx config files.")
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/"
                            "stream-" version ".tar"))
-       (file-name (git-file-name name version))
        (sha256
         (base32 "00c3n4gyxzv7vczqms0d62kl8zsmjfyxa92mwxn2snyx857a9jfw"))))
     (build-system emacs-build-system)
@@ -12627,8 +12638,7 @@ please.")
           (base32 "10w1ldgijdhfsrazp0y3bm76jv5wvdn94k1yp0pmc2m1896b58ak"))))
       (build-system emacs-build-system)
       (inputs
-       `(("emacs-stream" ,emacs-stream)
-         ("emacs-cl-print" ,emacs-cl-print)))
+       (list emacs-stream emacs-cl-print))
       (home-page "https://github.com/emacsmirror/el-search")
       (synopsis "Expression based interactive search for emacs-lisp-mode")
       (description "This package provides expression based interactive search
@@ -12649,9 +12659,9 @@ procedures for emacs-lisp-mode.")
        (sha256
         (base32 "0can9v336lgnq0q2ha3js0565jzp3dlwwqxhcbx5swk5kp148f07"))))
     (build-system emacs-build-system)
-    (propagated-inputs `(("emacs-dash" ,emacs-dash)))
+    (propagated-inputs (list emacs-dash))
     (native-inputs
-     `(("emacs-ert-runner" ,emacs-ert-runner)))
+     (list emacs-ert-runner))
     (arguments
      `(#:tests? #t
        #:test-command '("ert-runner")))
@@ -12714,6 +12724,30 @@ files in Emacs.  Files of this type (e.g., @file{BUILD.gn} or @file{*.gni})
 are common in Chromium-derived projects.")
     (license license:bsd-3)))
 
+(define-public emacs-bazel
+  ;; From 2021-11-21.
+  ;; No releases available.
+  (let ((commit "cdb2643dba39fe2bd64ba3b190b94d1ef1d83b18")
+        (revision "0"))
+    (package
+      (name "emacs-bazel")
+      (version (git-version "0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/bazelbuild/emacs-bazel-mode")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32 "0ln06dprnivx9zxm6n23ppyx7x4kbn0f85pxwvkq32aq7wnqz82m"))))
+      (build-system emacs-build-system)
+      (home-page "https://github.com/bazelbuild/emacs-bazel-mode")
+      (synopsis "Bazel support for Emacs")
+      (description
+       "This package provides support for the Bazel build system.  See
+@uref{https://bazel.build/} for background on Bazel.")
+      (license license:asl2.0))))
+
 (define-public emacs-gntp
   (package
     (name "emacs-gntp")
@@ -12752,8 +12786,7 @@ notifications.")
         (base32 "0lc0p5cl4hfrzw1z2ghb11k1lvljn5m08jw5fmgwgxv667kwh49r"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-gntp" ,emacs-gntp)
-       ("emacs-log4e" ,emacs-log4e)))
+     (list emacs-gntp emacs-log4e))
     (home-page "https://github.com/jwiegley/alert")
     (synopsis "Growl-style notification system for Emacs")
     (description
@@ -12799,10 +12832,7 @@ a (typically) noncontiguous set of text.")
         (base32 "1nvsfbfsma59ilf7c3vjngnmx3aapwvvvaafdy5szm5r6lkicqvg"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-alert" ,emacs-alert)
-       ("emacs-s" ,emacs-s)
-       ("emacs-ht" ,emacs-ht)
-       ("mu" ,mu)))
+     (list emacs-alert emacs-s emacs-ht mu))
     (home-page "https://github.com/iqbalansari/mu4e-alert")
     (synopsis "Desktop notification for mu4e")
     (description
@@ -12829,7 +12859,7 @@ mode-line.")
            "00y9nap61q1z2cdql4k9g7fgi2gdgd9iy5s5lzrd9a4agbx6r7sv"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("mu" ,mu)))
+       (list mu))
       (home-page "https://gitlab.com/wavexx/mu4e-jump-to-list.el")
       (synopsis "Select and view mailing lists in mu4e")
       (description
@@ -12856,7 +12886,7 @@ automatically discovered and presented in recency order.")
                   "10lzf3b70pk6rzdrgx0ww0gc94v0ydh9zj1gbsa20xw27ds7hmfn"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("mu" ,mu)))
+       (list mu))
       (home-page "https://github.com/seanfarley/mu4e-patch")
       (synopsis "Colorize patch-like emails in mu4e")
       (description
@@ -12935,7 +12965,7 @@ type an abbreviation and automatically expand it into function templates.")
     (arguments
      `(#:include (cons* "^snippets\\/" %default-include)))
     (propagated-inputs
-     `(("emacs-yasnippet" ,emacs-yasnippet)))
+     (list emacs-yasnippet))
     (home-page "https://github.com/AndreaCrotti/yasnippet-snippets")
     (synopsis "Collection of YASnippet snippets for many languages")
     (description "This package provides an extensive collection of YASnippet
@@ -12965,7 +12995,7 @@ automatically made available to YASnippet.")
       (arguments
        `(#:include (cons* "^.*\\/" %default-include)))
       (propagated-inputs
-       `(("emacs-yasnippet" ,emacs-yasnippet)))
+       (list emacs-yasnippet))
       (home-page "https://github.com/hlissner/doom-snippets")
       (synopsis "Doom Emacs' snippet library")
       (description
@@ -12991,8 +13021,7 @@ exposes a small API to assist in writing your own snippets.")
                   "1cbafjqlzxbg19xfdqsinsh7afq58gkf44rsg1qxfgm8g6zhr7f8"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-helm" ,emacs-helm)
-         ("emacs-yasnippet" ,emacs-yasnippet)))
+       (list emacs-helm emacs-yasnippet))
       (home-page "https://github.com/emacs-jp/helm-c-yasnippet")
       (synopsis "Helm integration for Yasnippet")
       (description "This Emacs library provides Helm interface for
@@ -13014,9 +13043,9 @@ Yasnippet.")
                 "13a8jpj4wwm0yjv8hnsizgjf8wi3r2ap87lyvw7g4c7snp2dydwa"))))
     (build-system emacs-build-system)
     (inputs
-     `(("recutils" ,recutils)))
+     (list recutils))
     (propagated-inputs
-     `(("emacs-helm" ,emacs-helm)))
+     (list emacs-helm))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -13053,11 +13082,7 @@ above over the network.")
          "0pm6va26kadjvbai4qsnjc2bk379w2nk6h3b5f0c2yv3q5na0p49"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-f" ,emacs-f)
-       ("emacs-helm" ,emacs-helm)
-       ("emacs-org" ,emacs-org)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-dash emacs-f emacs-helm emacs-org emacs-s))
     (home-page "https://github.com/alphapapa/helm-org-rifle")
     (synopsis "Rifle through Org files")
     (description "This package searches both headings and contents of entries
@@ -13283,58 +13308,52 @@ highlights quasi-quoted expressions.")
         (base32 "0lasj4ggsh93ingf46n16wxfx5zzxvr1igikbmdqlz3i99j331gs"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:make-flags (list (string-append "prefix="
-                                         (assoc-ref %outputs "out")))
-       #:phases
-       (modify-phases %standard-phases
-         (replace 'configure
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (setenv "SHELL" (which "sh"))
-             ;; Ensure the tclespeak.so binary is found in the correct location
-             ;; by adding the path to the Tclx library to the Tcl $auto_path
-             ;; variable.
-             (with-fluids ((%default-port-encoding "ISO-8859-1"))
-               (substitute* "servers/espeak"
-                 (("package require Tclx")
-                  (string-append "set auto_path [linsert $auto_path 0 "
-                                 (assoc-ref inputs "tclx")
-                                 "/lib]\n"
-                                 "package require Tclx"))))
-             ;; Configure Emacspeak according to etc/install.org.
-             (invoke "make" "config")))
-         (add-after 'build 'build-espeak
-           (lambda _
-             (invoke "make" "espeak")))
-         (replace 'install
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (bin (string-append out "/bin"))
-                    (lisp (string-append out "/share/emacs/site-lisp/emacspeak"))
-                    (info (string-append out "/share/info"))
-                    (emacs (string-append (assoc-ref inputs "emacs")
-                                          "/bin/emacs")))
-               ;; According to etc/install.org, the Emacspeak directory should
-               ;; be copied to its installation destination.
-               (for-each
-                (lambda (file)
-                  (copy-recursively file (string-append lisp "/" file)))
-                '("etc" "info" "js" "lisp" "media" "servers" "sounds"
-                  "stumpwm" "xsl"))
-               ;; Make sure emacspeak is loaded from the correct directory.
-               (substitute* "run"
-                 (("\\./lisp/emacspeak-setup.el")
-                  (string-append lisp "/lisp/emacspeak-setup.el")))
-               ;; Install the convenient startup script.
-               (mkdir-p bin)
-               (copy-file "run" (string-append bin "/emacspeak")))
-             #t)))
-       #:tests? #f))                    ; no check target
+     (list
+      #:make-flags #~(list (string-append "prefix=" #$output))
+      #:phases
+      #~(modify-phases %standard-phases
+          (replace 'configure
+            (lambda* (#:key inputs outputs #:allow-other-keys)
+              (setenv "SHELL" (which "sh"))
+              ;; Ensure the tclespeak.so binary is found in the correct location
+              ;; by adding the path to the Tclx library to the Tcl $auto_path
+              ;; variable.
+              (with-fluids ((%default-port-encoding "ISO-8859-1"))
+                (substitute* "servers/espeak"
+                  (("package require Tclx")
+                   (string-append "set auto_path [linsert $auto_path 0 "
+                                  #$tclx
+                                  "/lib]\n"
+                                  "package require Tclx"))))
+              ;; Configure Emacspeak according to etc/install.org.
+              (invoke "make" "config")))
+          (add-after 'build 'build-espeak
+            (lambda _
+              (invoke "make" "espeak")))
+          (replace 'install
+            (lambda* (#:key inputs outputs #:allow-other-keys)
+              (let* ((out (assoc-ref outputs "out"))
+                     (bin (string-append out "/bin"))
+                     (lisp (string-append out "/share/emacs/site-lisp/emacspeak"))
+                     (info (string-append out "/share/info"))
+                     (emacs (search-input-file inputs "/bin/emacs")))
+                ;; According to etc/install.org, the Emacspeak directory should
+                ;; be copied to its installation destination.
+                (for-each
+                 (lambda (file)
+                   (copy-recursively file (string-append lisp "/" file)))
+                 '("etc" "info" "js" "lisp" "media" "servers" "sounds"
+                   "stumpwm" "xsl"))
+                ;; Make sure emacspeak is loaded from the correct directory.
+                (substitute* "run"
+                  (("\\./lisp/emacspeak-setup.el")
+                   (string-append lisp "/lisp/emacspeak-setup.el")))
+                ;; Install the convenient startup script.
+                (mkdir-p bin)
+                (copy-file "run" (string-append bin "/emacspeak"))))))
+      #:tests? #f))                     ; no check target
     (inputs
-     `(("emacs" ,emacs)
-       ("espeak" ,espeak-ng)
-       ("perl" ,perl)
-       ("tcl" ,tcl)
-       ("tclx" ,tclx)))
+     (list emacs espeak-ng perl tcl tclx))
     (home-page "http://emacspeak.sourceforge.net")
     (synopsis "Audio desktop interface for Emacs")
     (description
@@ -13427,9 +13446,9 @@ abbreviation of the mode line displays (lighters) of minor modes.")
                 "088kl3bml0rs5bkfymgzr15ram9qvy66h1kaisrbkynh0yxvf8g9"))))
     (build-system emacs-build-system)
     (native-inputs
-     `(("texinfo" ,texinfo)))
+     (list texinfo))
     (propagated-inputs
-     `(("emacs-diminish" ,emacs-diminish)))
+     (list emacs-diminish))
     (arguments
      `(#:tests? #t
        #:test-command '("emacs" "--batch"
@@ -13458,14 +13477,14 @@ performance-oriented and tidy.")
 (define-public emacs-leaf
   (package
     (name "emacs-leaf")
-    (version "4.5.2")
+    (version "4.5.5")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/"
                            "leaf-" version ".tar"))
        (sha256
-        (base32 "0i90shhhkpdcwmfi8zv0008qgmg4g3cqd2yvpycfv9n2axvhag54"))))
+        (base32 "1rdbrf84ijapiqhq72gy8r5xgk54sf0jy31pgd3w4rl1wywh5cas"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/conao3/leaf.el")
     (synopsis "Simplify your init.el configuration, extended use-package")
@@ -13545,7 +13564,7 @@ source file, @file{jl-encrypt.el}.")
      "https://informationelle-selbstbestimmung-im-internet.de/Emacs.html")
     (synopsis "Improved S/MIME support for Gnus in Emacs")
     (propagated-inputs
-     `(("emacs-default-encrypt" ,emacs-default-encrypt)))
+     (list emacs-default-encrypt))
     (description
      ;; TRANSLATORS: ExtendSMIME, DefaultEncrypt, and emacs-default-encrypt
      ;; should not be translated.  The name "emacs-default-encrypt" refers to
@@ -13623,7 +13642,7 @@ conversion for Emacs Lisp.")
         (base32 "1jj9vmhc4s3ych08bjm1c2xwi81z1p20rj7bvxrgvb5aga2ghi9d"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-auctex" ,emacs-auctex)))
+     (list emacs-auctex))
     (home-page "https://github.com/cdominik/cdlatex")
     (synopsis "Fast Emacs input methods for LaTeX environments and
 math")
@@ -13669,11 +13688,8 @@ configuration of Chinese fonts.")
         (base32 "18il2licf8pgfcrpx2bk55gpf8f537kb9cxqz83jldkhiyry74il"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-expand-region" ,emacs-expand-region)
-       ("emacs-multiple-cursors" ,emacs-multiple-cursors)
-       ("emacs-powerline" ,emacs-powerline)
-       ("emacs-spaceline" ,emacs-spaceline)))
+     (list emacs-dash emacs-expand-region emacs-multiple-cursors
+           emacs-powerline emacs-spaceline))
     (home-page "https://github.com/jyp/boon")
     (synopsis "Ergonomic command mode for Emacs")
     (description "Boon is a complete package for modal editing with a focus on
@@ -13683,10 +13699,43 @@ commands are bound to keys reachable with the left hand and movement keys are
 reached with the right hand.")
     (license license:gpl3+)))
 
+(define-public emacs-cc-mode
+  (package
+   (name "emacs-cc-mode")
+   (version "5.35")
+   (source
+    (origin
+     (method hg-fetch)
+     (uri (hg-reference
+           (url "http://hg.code.sf.net/p/cc-mode/cc-mode")
+           (changeset
+            (string-append "Release_"
+                           (string-replace-substring version "." "_")))))
+     (file-name (hg-file-name name version))
+     (sha256
+      (base32 "03cvl61baccx57zd62nz2wy4hvij5hl2syg7byaxgrs4c7grr414"))))
+   (build-system emacs-build-system)
+   (arguments
+    '(#:tests? #t
+      #:test-command '("make" "test")
+      #:phases
+      (modify-phases %standard-phases
+        (add-before 'install 'make-info
+          (lambda _
+            (invoke "make" "info"))))))
+   (native-inputs
+    (list texinfo))
+   (home-page "http://cc-mode.sourceforge.net/")
+   (synopsis "Framework for creating major modes for C-style languages")
+   (description
+    "CC Mode is an Emacs and XEmacs mode for editing C and other languages with
+similar syntax; currently C++, Objective-C, Java, CORBA's IDL, Pike, and AWK.")
+   (license license:gpl3+)))
+
 (define-public emacs-csharp-mode
   (package
     (name "emacs-csharp-mode")
-    (version "1.0.2")
+    (version "1.1.1")
     (source
      (origin
        (method git-fetch)
@@ -13695,7 +13744,7 @@ reached with the right hand.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1gdr1y8q93xr5vlx6jj95js6rmmsspq2bn870igbaijwwsn0sf7g"))))
+        (base32 "0wfd4jdjsq8qp6pavf25y87dxvlnsqapfi4c4m3xj24baalr2dpq"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/josteink/csharp-mode")
     (synopsis "Major mode for C# code")
@@ -13706,6 +13755,53 @@ documentation generation.  In addition, it provides menu-based navigation
 using Imenu, and Compilation mode support for MSBuild, devenv and xbuild.")
     (license license:gpl3+)))
 
+(define-public emacs-vala-mode
+  ;; Upstream has no tagged release.
+  (let ((commit "d696a8177e94c81ea557ad364a3b3dcc3abbc50f")
+        (revision "0"))
+    (package
+      (name "emacs-vala-mode")
+      (version (git-version "0.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/rrthomas/vala-mode")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0g5pdq757z9d8rk489n5ilhqipdc4i4sfkjwwrxyvgjlapjc04c0"))))
+      (build-system emacs-build-system)
+      (arguments
+       '(#:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'disable-multiline-support
+             (lambda* (#:key inputs #:allow-other-keys)
+               (make-file-writable "vala-mode.el")
+               (emacs-batch-edit-file "vala-mode.el"
+                 '(progn
+                   (require 'thingatpt) ;; beginning-of-thing, end-of-thing
+                   (goto-char (point-min))
+                   (save-excursion
+                    (re-search-forward ";; Support multiline strings")
+                    (goto-char (match-beginning 0))
+                    (kill-sexp)
+                    (insert ";; FIXME: Support multiline strings
+(c-lang-defconst c-multiline-string-start-char vala nil)"))
+                   (save-excursion
+                    (re-search-forward "(defcustom vala-multiline-strings")
+                    (goto-char (match-beginning 0))
+                    (insert ";; FIXME: Support multiline strings\n")
+                    (comment-region (beginning-of-thing 'sexp)
+                                    (end-of-thing 'sexp)))
+                   (basic-save-buffer))))))))
+      (home-page "https://github.com/rrthomas/vala-mode")
+      (synopsis "Vala mode for Emacs")
+      (description
+       "This package provides a major mode for editing .vala and .vapi files
+in Emacs.")
+      (license license:gpl2+))))
+
 (define-public emacs-php-mode
   (package
     (name "emacs-php-mode")
@@ -13726,7 +13822,7 @@ using Imenu, and Compilation mode support for MSBuild, devenv and xbuild.")
          (add-after 'unpack 'enter-source-directory
            (lambda _
              (chdir "lisp"))))))
-    (propagated-inputs `(("emacs-projectile" ,emacs-projectile)))
+    (propagated-inputs (list emacs-projectile))
     (home-page "https://github.com/ejmr/php-mode")
     (synopsis "Major mode for editing PHP code")
     (description
@@ -13788,20 +13884,17 @@ containing words from the Rime project.")
 (define-public emacs-pyim
   (package
     (name "emacs-pyim")
-    (version "3.9.4")
+    (version "4.1.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/pyim-" version ".tar"))
        (sha256
-        (base32 "0ggnl2jidcklyhqd5av5kk1f855gsq29wq2nhvp1yjzn35hz6xij"))))
+        (base32 "1q4b3y72gbkl5z31brlnjqjl30lgqm2d1zlqrbkqnnfy5hjgazk9"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-async" ,emacs-async)
-       ("emacs-pyim-basedict" ,emacs-pyim-basedict)
-       ("emacs-popup" ,emacs-popup)
-       ("emacs-posframe" ,emacs-posframe)
-       ("emacs-xr" ,emacs-xr)))
+     (list emacs-async emacs-pyim-basedict emacs-popup emacs-posframe
+           emacs-xr))
     (home-page "https://github.com/tumashu/pyim")
     (synopsis "Chinese input method")
     (description
@@ -13855,14 +13948,14 @@ methods from a given list.")
 (define-public emacs-posframe
   (package
     (name "emacs-posframe")
-    (version "1.0.4")
+    (version "1.1.7")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/"
                            "posframe-" version ".tar"))
        (sha256
-        (base32 "0i2pw90gw9zb22gj8yyvcp3b2k1bxxhbjj0idvr5iz1vd9023bc6"))))
+        (base32 "13i2wxx079gfq0vbq0iwmsig5b7x4aspd1q02yqc79846f1dsx4w"))))
     (build-system emacs-build-system)
     ;; emacs-minimal does not include the function font-info.
     (arguments
@@ -13930,9 +14023,7 @@ publishing them to various output formats such as HTML, LaTeX, or PDF.")
         (base32 "1n2ymd92qpvsby6ms0l3kjhdzzc47rri2aiscc6bs07hm4mjpr9q"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-ht" ,emacs-ht)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-dash emacs-ht emacs-s))
     (home-page "https://github.com/Wilfred/mustache.el")
     (synopsis "Mustache templating library for Emacs")
     (description "Mustache templating library for Emacs, mustache is
@@ -13957,17 +14048,36 @@ and lambdas.")
         (base32 "0wsvfn409a2ivbich8b8zqza78sprirg4bl7igx536ydqclmi0n7"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-el2org" ,emacs-el2org)
-       ("emacs-ht" ,emacs-ht)
-       ("emacs-mustache" ,emacs-mustache)
-       ("emacs-simple-httpd" ,emacs-simple-httpd)))
+     (list emacs-dash emacs-el2org emacs-ht emacs-mustache
+           emacs-simple-httpd))
     (home-page "https://github.com/tumashu/org2web")
-    (synopsis "Static site generator based on org-mode ")
+    (synopsis "Static site generator based on org-mode")
     (description "Org2web is a static site generator based on org-mode,
 which code derived from Kelvin H's org-page.")
     (license license:gpl2+)))
 
+(define-public emacs-meow
+  (package
+    (name "emacs-meow")
+    (version "1.4.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/meow-edit/meow")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "04vin23bmds8dp2i1xihph9r7v43lcfz6fm23f4nvcyka9rqxc0z"))))
+    (build-system emacs-build-system)
+    (home-page "https://github.com/meow-edit/meow")
+    (synopsis "Yet another modal editing on Emacs")
+    (description "Meow is yet another modal editing mode for Emacs.  It aims
+to blend modal editing into Emacs with minimum interface with its original
+key-bindings, avoiding most if not all the hassle introduced by key-binding
+conflicts.")
+    (license license:gpl3+)))
+
 (define-public emacs-xelb
   (package
     (name "emacs-xelb")
@@ -13998,7 +14108,7 @@ which code derived from Kelvin H's org-page.")
                      (string-append "EMACS_BIN="
                                     (assoc-ref inputs "emacs")
                                     "/bin/emacs -Q")))))))
-    (native-inputs `(("xcb-proto" ,xcb-proto)))
+    (native-inputs (list xcb-proto))
     (home-page "https://github.com/ch11ng/xelb")
     (synopsis "X protocol Emacs Lisp binding")
     (description "@code{emacs-xelb} is a pure Emacs Lisp implementation of the
@@ -14010,7 +14120,7 @@ It should enable you to implement low-level X11 applications.")
 (define-public emacs-exwm
   (package
     (name "emacs-exwm")
-    (version "0.24")
+    (version "0.26")
     (synopsis "Emacs X window manager")
     (source
      (origin
@@ -14018,18 +14128,12 @@ It should enable you to implement low-level X11 applications.")
        (uri (string-append "https://elpa.gnu.org/packages/"
                            "exwm-" version ".tar"))
        (sha256
-        (base32 "0lj1a3cmbpf4h6x8k6x8cdm1qb51ca6filydnvi5zcda8zpl060s"))
-       (patches
-        ;; Patch fixing fullscreen view.  Applied upstream as
-        ;; edb930005b0ba83051ca8a59b493e9a3c8ef580a.  It can be removed in
-        ;; next release.
-        (search-patches "emacs-exwm-fix-fullscreen-states.patch"))))
+        (base32 "03pg0r8a5vb1wc5grmjgzql74p47fniv47x39gdll5s3cq0haf6q"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-xelb" ,emacs-xelb)))
+     (list emacs-xelb))
     (inputs
-     `(("xhost" ,xhost)
-       ("dbus" ,dbus)))
+     (list xhost dbus))
     ;; The following functions and variables needed by emacs-exwm are
     ;; not included in emacs-minimal:
     ;; scroll-bar-mode, fringe-mode
@@ -14059,10 +14163,10 @@ It should enable you to implement low-level X11 applications.")
                    (format #t "#!~a ~@
                      ~a +SI:localuser:$USER ~@
                      exec ~a --exit-with-session ~a \"$@\" --eval '~s' ~%"
-                           (string-append (assoc-ref inputs "bash") "/bin/sh")
-                           (string-append (assoc-ref inputs "xhost") "/bin/xhost")
-                           (string-append (assoc-ref inputs "dbus") "/bin/dbus-launch")
-                           (string-append (assoc-ref inputs "emacs") "/bin/emacs")
+                           (search-input-file inputs "/bin/sh")
+                           (search-input-file inputs "/bin/xhost")
+                           (search-input-file inputs "/bin/dbus-launch")
+                           (search-input-file inputs "/bin/emacs")
                            '(cond
                              ((file-exists-p "~/.exwm")
                               (load-file "~/.exwm"))
@@ -14094,7 +14198,7 @@ of XELB.")
     (name "emacs-exwm-no-x-toolkit")
     (synopsis "Emacs X window manager (without an X toolkit)")
     (propagated-inputs
-     `(("emacs-xelb-no-x-toolkit" ,emacs-xelb-no-x-toolkit)))
+     (list emacs-xelb-no-x-toolkit))
     (arguments
      (substitute-keyword-arguments (package-arguments emacs-exwm)
        ((#:emacs emacs) `,emacs-no-x-toolkit)))))
@@ -14138,13 +14242,9 @@ other operations.")
          "0h248mma7kky30jr9bbhmp95wchl2cx5p6kh0gxmzpbc247dn2cc"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-counsel" ,emacs-counsel)
-       ("emacs-exwm" ,emacs-exwm)
-       ("emacs-switch-window" ,emacs-switch-window)
-       ("emacs-use-package" ,emacs-use-package)))
+     (list emacs-counsel emacs-exwm emacs-switch-window emacs-use-package))
     (inputs
-     `(("xhost" ,xhost)
-       ("dbus" ,dbus)))
+     (list xhost dbus))
     ;; Need emacs instead of emacs-minimal,
     ;; for emacs's bin path will be inserted into bin/exwm-x file.
     (arguments
@@ -14175,10 +14275,10 @@ other operations.")
                    (format #t "#!~a ~@
                      ~a +SI:localuser:$USER ~@
                      exec ~a --exit-with-session ~a \"$@\" --eval '~s' ~%"
-                           (string-append (assoc-ref inputs "bash") "/bin/sh")
-                           (string-append (assoc-ref inputs "xhost") "/bin/xhost")
-                           (string-append (assoc-ref inputs "dbus") "/bin/dbus-launch")
-                           (string-append (assoc-ref inputs "emacs") "/bin/emacs")
+                           (search-input-file inputs "/bin/sh")
+                           (search-input-file inputs "/bin/xhost")
+                           (search-input-file inputs "/bin/dbus-launch")
+                           (search-input-file inputs "/bin/emacs")
                            '(require 'exwmx-loader))))
                (chmod exwm-executable #o555)
                #t))))))
@@ -14190,7 +14290,7 @@ on mouse-control.")
 (define-public emacs-gnugo
   (package
     (name "emacs-gnugo")
-    (version "3.1.1")
+    (version "3.1.2")
     (source
      (origin
        (method url-fetch)
@@ -14198,7 +14298,7 @@ on mouse-control.")
                            version ".tar"))
        (sha256
         (base32
-         "035rgiz42q042h41l4cvf0hr8igy2vyn3s1hsl2pgh2dq2jjylv6"))))
+         "138gzdyi8scqimvs49da66j8f5a43bhgpasn1bxzdj2zffwlwp6g"))))
     (build-system emacs-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
@@ -14209,8 +14309,7 @@ on mouse-control.")
                          "defvar gnugo-xpms #'gnugo-imgen-create-xpms"))
                       #t)))))
     (propagated-inputs
-     `(("emacs-ascii-art-to-unicode" ,emacs-ascii-art-to-unicode)
-       ("emacs-xpm" ,emacs-xpm)))
+     (list emacs-ascii-art-to-unicode emacs-xpm))
     (home-page "https://elpa.gnu.org/packages/gnugo.html")
     (synopsis "Emacs major mode for playing GNU Go")
     (description "This package provides an Emacs based interface for GNU Go.
@@ -14294,7 +14393,7 @@ pressed simultaneously or a single key quickly pressed twice.")
         (base32 "1gfgmr4909m36gknprcam6q4rkcqfbi6w43ky7x6jnlmgb6mxggg"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-evil" ,emacs-evil)))
+     (list emacs-evil))
     (arguments
      `(#:tests? #t
        #:test-command '("make" "test")))
@@ -14319,7 +14418,7 @@ addition of surrounding pairs, such as parentheses and quotes, in evil mode.")
         (base32 "1l8zi9wlg1f7ffm8gh92qwk3q7h6cdl8b8zkd9hcda53mq6klpjr"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-evil" ,emacs-evil)))
+     (list emacs-evil))
     (home-page "https://github.com/linktohack/evil-commentary")
     (synopsis "Comment out code in evil mode")
     (description "@code{emacs-evil-commentary} adds keybindings to easily
@@ -14346,8 +14445,7 @@ lines, and @code{gc} to comment out the target of a motion.")
           (base32 "051v8dmji90chwbsyqsqry7h35mksal2j6rgw1kpmjsni86d79y1"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)
-         ("emacs-s" ,emacs-s)))
+       (list emacs-dash emacs-s))
       (home-page "https://github.com/rejeep/ansi.el")
       (synopsis "Convert strings to ANSI")
       (description "@code{emacs-ansi} defines functions that turns simple
@@ -14373,9 +14471,7 @@ as bold, underscore or italic.")
         (base32 "1j6hhyzww7wfwk6bllbb5mk4hw4qs8hsgfbfdifsam9c6i4spm45"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-f" ,emacs-f)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-dash emacs-f emacs-s))
     (home-page "https://github.com/rejeep/commander.el")
     (synopsis "Emacs command line parser")
     (description "@code{emacs-commander} provides command line parsing for
@@ -14385,19 +14481,17 @@ Emacs.")
 (define-public emacs-eglot
   (package
     (name "emacs-eglot")
-    (version "1.7")
+    (version "1.8")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/"
                            "eglot-" version ".tar"))
        (sha256
-        (base32 "1zvs144hxq2mmq1h0ynx9hy7yyccb46f3pjg9mgq8v9cw5y678vk"))))
+        (base32 "1n04jnf3wwpxafrzfd02l53wf90brjc8p835f84k0n0rjxin99k5"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-eldoc" ,emacs-eldoc)
-       ("emacs-jsonrpc" ,emacs-jsonrpc)
-       ("emacs-project" ,emacs-project)))
+     (list emacs-eldoc emacs-jsonrpc emacs-project))
     (home-page "https://github.com/joaotavora/eglot")
     (synopsis "Client for Language Server Protocol (LSP) servers")
     (description
@@ -14449,12 +14543,12 @@ variable instead, to remind you of that variable's meaning.")
 	 "08gygn9fjank5gpi4v6ynrkn0jbknxbwsn7md4p9ndygdbmnkf98"))))
     (build-system emacs-build-system)
     (inputs
-     `(("emacs-ansi" ,emacs-ansi)
-       ("emacs-commander" ,emacs-commander)
-       ("emacs-dash" ,emacs-dash)
-       ("emacs-f" ,emacs-f)
-       ("emacs-s" ,emacs-s)
-       ("emacs-shut-up" ,emacs-shut-up)))
+     (list emacs-ansi
+           emacs-commander
+           emacs-dash
+           emacs-f
+           emacs-s
+           emacs-shut-up))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -14503,6 +14597,30 @@ running tests easier.")
     (description "This package provides a simple testing library for Emacs.")
     (license license:gpl3+)))
 
+(define-public emacs-org-transclusion
+  (package
+    (name "emacs-org-transclusion")
+    (version "1.1.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/nobiot/org-transclusion")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0qvc8f4i44d8mgkzfi9yld664cmapkbmjv4bf0l8va417ck5sm92"))))
+    (build-system emacs-build-system)
+    (home-page "https://nobiot.github.io/org-transclusion/")
+    (synopsis "Enable transclusion with Org Mode")
+    (description "Org-transclusion lets you insert a copy of text content via
+a file link or ID link within an Org file.  It lets you have the same content
+present in different buffers at the same time without copy-and-pasting it.
+Edit the source of the content, and you can refresh the transcluded copies to
+the up-to-date state.  Org-transclusion keeps your files clear of the
+transcluded copies, leaving only the links to the original content.")
+    (license license:gpl3+)))
+
 (define-public emacs-disable-mouse
   (package
     (name "emacs-disable-mouse")
@@ -14522,7 +14640,7 @@ running tests easier.")
     (description
      "Provides @code{disable-mouse-mode} and @code{global-disable-mouse-mode},
 pair of minor modes which suppress all mouse events by intercepting them and
-running a customisable handler command (@code{ignore} by default). ")
+running a customisable handler command (@code{ignore} by default).")
     (license license:gpl3+)))
 
 (define-public emacs-json-reformat
@@ -14540,12 +14658,6 @@ running a customisable handler command (@code{ignore} by default). ")
         (base32 "0qp4n2k6s69jj4gwwimkpadjv245y54wk3bxb1x96f034gkp81vs"))
        (patches (search-patches "emacs-json-reformat-fix-tests.patch"))))
     (build-system emacs-build-system)
-    (propagated-inputs
-     `(("emacs-undercover" ,emacs-undercover)))
-    (native-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-shut-up" ,emacs-shut-up)
-       ("ert-runner" ,emacs-ert-runner)))
     (arguments
      `(#:tests? #t
        #:test-command '("ert-runner")
@@ -14553,8 +14665,7 @@ running a customisable handler command (@code{ignore} by default). ")
        (modify-phases %standard-phases
          (add-before 'check 'make-tests-writable
            (lambda _
-             (for-each make-file-writable (find-files "test"))
-             #t))
+             (for-each make-file-writable (find-files "test"))))
          (add-before 'check 'delete-json-objects-order-test
            (lambda _
              (emacs-batch-edit-file "test/json-reformat-test.el"
@@ -14563,8 +14674,11 @@ running a customisable handler command (@code{ignore} by default). ")
                                "ert-deftest json-reformat-test:json-reformat-region")
                               (beginning-of-line)
                               (kill-sexp))
-                       (basic-save-buffer)))
-             #t)))))
+                       (basic-save-buffer))))))))
+    (native-inputs
+     (list emacs-dash emacs-ert-runner emacs-shut-up))
+    (propagated-inputs
+     (list emacs-undercover))
     (home-page "https://github.com/gongo/json-reformat")
     (synopsis "Reformatting tool for JSON")
     (description "@code{json-reformat} provides a reformatting tool for
@@ -14594,7 +14708,7 @@ a @url{http://json.org/, JSON} file.")
 (define-public emacs-json-mode
   (package
     (name "emacs-json-mode")
-    (version "1.7.0")
+    (version "1.8.0")
     (source
      (origin
        (method git-fetch)
@@ -14603,11 +14717,10 @@ a @url{http://json.org/, JSON} file.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0i79lqzdg59vkqwjd3q092xxn9vhxspb1vn4pkis0vfvn46g01jy"))))
+        (base32 "0r0k56q58kb133l9x9nbisz9p2kbphfgw1l4g2xp0pjqsc9wvq8z"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-json-reformat" ,emacs-json-reformat)
-       ("emacs-json-snatcher" ,emacs-json-snatcher)))
+     (list emacs-json-reformat emacs-json-snatcher))
     (home-page "https://github.com/joshwnj/json-mode")
     (synopsis "Major mode for editing JSON files")
     (description "@code{json-mode} extends the builtin js-mode syntax
@@ -14617,14 +14730,14 @@ highlighting.")
 (define-public emacs-jsonrpc
   (package
     (name "emacs-jsonrpc")
-    (version "1.0.14")
+    (version "1.0.15")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/"
-                           "jsonrpc-" version ".el"))
+                           "jsonrpc-" version ".tar"))
        (sha256
-        (base32 "069l0sqkambam4ikj9id36kdw1jdjna8v586d51m64hiz96rmvm6"))))
+        (base32 "1hx378rg12jz2zm105cvrqk0nqyzsn04l59d903l98d6lbd96rsw"))))
     (build-system emacs-build-system)
     (home-page "http://elpa.gnu.org/packages/jsonrpc.html")
     (synopsis "JSON-RPC library")
@@ -14651,7 +14764,7 @@ JSON objects.")
          "14nxfa91yg2243v4d5kvynp2645x3811ispmhmpgil3x9qbl9jg9"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)))
+     (list emacs-dash))
     (home-page "https://github.com/tminor/jsonnet-mode")
     (synopsis "Major mode for editing jsonnet files")
     (description "This package provides syntax highlighting, indenting,
@@ -14677,8 +14790,7 @@ formatting, and utility methods for jsonnet files.")
                 (file-name (git-file-name name version))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-helm" ,emacs-helm)
-         ("emacs-jq-mode" ,emacs-jq-mode)))
+       (list emacs-helm emacs-jq-mode))
       (home-page "https://github.com/pashky/restclient.el")
       (synopsis "Explore and test HTTP REST webservices")
       (description
@@ -14762,7 +14874,7 @@ whitespace in the buffer was initially clean.")
                     (string-append imagemagick "/bin/mogrify"))))
                #t)))))
       (inputs
-       `(("imagemagick" ,imagemagick)))
+       (list imagemagick))
       (home-page "https://github.com/nicferrier/eimp")
       (synopsis "Interactive image manipulation utility for Emacs")
       (description "@code{emacs-eimp} allows interactive image manipulation
@@ -14787,10 +14899,7 @@ the actual transformations.")
                   "12m81a9kjhs4cyq3lym0vp5nx6z3sfnypyzrnia76x6rjvixjf6y"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)
-         ("emacs-eimp" ,emacs-eimp)
-         ("emacs-f" ,emacs-f)
-         ("emacs-s" ,emacs-s)))
+       (list emacs-dash emacs-eimp emacs-f emacs-s))
       (home-page "https://github.com/Fuco1/dired-hacks")
       (synopsis
        "Collection of useful dired additions")
@@ -14830,7 +14939,7 @@ additions:
         (base32 "090dqaqyjmkzrz4szjpk1iip0bdvb0frp4l79393f8ki8w7c16c1"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dired-subtree" ,emacs-dired-hacks)))
+     (list emacs-dired-hacks))
     (synopsis "Sidebar for Emacs using Dired")
     (description
      "This package provides a sidebar for Emacs similar to @code{NeoTree}
@@ -14840,7 +14949,7 @@ or @code{treemacs}, but leveraging @code{Dired} to do the job of display.")
 (define-public emacs-which-key
   (package
     (name "emacs-which-key")
-    (version "3.5.3")
+    (version "3.5.4")
     (source
      (origin
        (method git-fetch)
@@ -14849,7 +14958,7 @@ or @code{treemacs}, but leveraging @code{Dired} to do the job of display.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "144i3hkgm36wnfmqk5vq390snziy3zhwifbh6q6dzs99ic77d5g6"))))
+        (base32 "0wz3bb7vzxqi3wqpn46z6ps00m9wjcpv9cfvqi7lyvm920sxzlv7"))))
     (build-system emacs-build-system)
     (arguments
      `(#:tests? #t
@@ -14882,7 +14991,7 @@ settings).")
         (base32 "1rp37rhkj8jm07dwr74vc68dhrbvyvrxjdavpb0h073ps9vl9dsc"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-which-key" ,emacs-which-key)))
+     (list emacs-which-key))
     (home-page "https://gitlab.com/jjzmajic/hercules.el")
     (synopsis "Call a chain of related commands without repeated prefix keys")
     (description
@@ -14895,21 +15004,21 @@ of commands is displayed in a handy popup.")
   (package
     (name "emacs-ws-butler")
     (version "0.6")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/lewang/ws-butler")
-                    (commit "323b651dd70ee40a25accc940b8f80c3a3185205")))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1a4b0lsmwq84qfx51c5xy4fryhb1ysld4fhgw2vr37izf53379sb"))))
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/lewang/ws-butler")
+             (commit "323b651dd70ee40a25accc940b8f80c3a3185205")))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1a4b0lsmwq84qfx51c5xy4fryhb1ysld4fhgw2vr37izf53379sb"))))
     (build-system emacs-build-system)
-    (native-inputs
-     `(("ert-runner" ,emacs-ert-runner)))
     (arguments
      `(#:tests? #t
        #:test-command '("ert-runner" "tests")))
+    (native-inputs
+     (list emacs-ert-runner))
     (home-page "https://github.com/lewang/ws-butler")
     (synopsis "Trim spaces from end of lines")
     (description
@@ -14959,9 +15068,13 @@ when browsing files with Dired.")
        (sha256
         (base32 "1w0lyz71dq8x28ira4hig1b70bqn1dr53w3k5dgch9szcf6xa86y"))))
     (build-system emacs-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'set-home
+           (lambda _ (setenv "HOME" "/tmp"))))))
     (propagated-inputs
-     `(("emacs-auctex" ,emacs-auctex)
-       ("emacs-org" ,emacs-org)))
+     (list emacs-auctex emacs-org))
     (home-page "https://github.com/et2010/org-edit-latex")
     (synopsis "Edit a LaTeX fragment just like editing a source block")
     (description
@@ -14990,6 +15103,56 @@ fragment in a dedicated buffer just like editing a source block.")
 multiplexer.")
     (license license:gpl3+)))
 
+(define-public emacs-plz
+  (let ((commit "7e456638a651bab3a814e3ea81742dd917509cbb")
+        (revision "1"))
+    (package
+      (name "emacs-plz")
+      (version (git-version "0.1-pre" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/alphapapa/plz.el")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "05kgxrps1s20im5hhq799nrs3615bvssm4r0ysgmwm203mmzsjgj"))))
+      (build-system emacs-build-system)
+      (inputs (list curl))
+      (home-page "https://github.com/alphapapa/plz.el")
+      (synopsis "HTTP library for Emacs")
+      (description
+       "This package provides HTTP library for Emacs.  It uses curl as
+a backend, which avoids some of the issues with using Emacs’s built-in url
+library.")
+      (license license:gpl3+))))
+
+(define-public emacs-ement
+  (let ((commit "c951737dc855604aba389166bb0e7366afadc533")
+        (revision "1"))
+    (package
+      (name "emacs-ement")
+      (version (git-version "0.1-pre" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/alphapapa/ement.el")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "00iwwz4hzg4g59wrb5df6snqz3ppvrsadhfp61w1pa8gvg2z9bvy"))))
+      (build-system emacs-build-system)
+      (arguments
+       `(#:emacs ,emacs))               ;need libxml support
+      (propagated-inputs
+       (list emacs-plz emacs-ts))
+      (home-page "https://github.com/alphapapa/ement.el")
+      (synopsis "Matrix client for Emacs")
+      (description "Ement.el is a Matrix client for Emacs.")
+      (license license:gpl3+))))
+
 (define-public emacs-rpm-spec-mode
   (package
     (name "emacs-rpm-spec-mode")
@@ -15028,7 +15191,7 @@ editing RPM spec files.")
         (base32 "0mc55icihxqpf8b05990q1lc2nj2792wcgyr73xsiqx0963sjaj8"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)))
+     (list emacs-dash))
     (home-page "https://github.com/jyp/lcr")
     (synopsis "Lightweight coroutines in Emacs Lisp")
     (description "This package provides macros that can translate code into
@@ -15051,10 +15214,7 @@ functions written in continuation-passing style.")
        (file-name (git-file-name name version))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-f" ,emacs-f)
-       ("emacs-flycheck" ,emacs-flycheck)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-dash emacs-f emacs-flycheck emacs-s))
     (home-page "https://github.com/jyp/attrap")
     (synopsis "Fix coding error at point")
     (description "This package provides a command to fix the Flycheck error
@@ -15076,7 +15236,7 @@ at point.")
         (base32 "04fnby2nblk8l70gv09asxkmnn53fh1pdfs77ix44npp99fyw8ix"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-popup" ,emacs-popup)))
+     (list emacs-popup))
     (arguments
      `(#:tests? #t
        #:test-command '("emacs" "--batch" "-l" "test/test.el"
@@ -15195,7 +15355,7 @@ buffer's environment.")
          "0nqqx4qlw75lmbn0v927sg3xyjkk86ihw1q3rdbbn59va41grds4"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-inheritenv" ,emacs-inheritenv)))
+     (list emacs-inheritenv))
     (home-page "https://github.com/purcell/envrc")
     (synopsis "Support for Direnv which operates buffer-locally")
     (description
@@ -15258,7 +15418,7 @@ key.  Optionally, a mouse pop-up can be added by binding
            "1v8av6jza1j00ln75zjwaca0vmmv0fhhhi94p84rlfzgzykyb9g1"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-prop-menu" ,emacs-prop-menu)))
+       (list emacs-prop-menu))
       (home-page
        "https://github.com/idris-hackers/idris-mode")
       (synopsis "Major mode for editing Idris code")
@@ -15281,14 +15441,13 @@ the latest versions of Idris 1.")
        (sha256
         (base32 "0bx4ns0jb0sqrjk1nsspvl3mhz3n12925azf7brlwb1vcgnji09v"))))
     (build-system emacs-build-system)
-    (propagated-inputs
-     `(("emacs-f" ,emacs-f)
-       ("emacs-s" ,emacs-s)))
-    (native-inputs
-     `(("ert-runner" ,emacs-ert-runner)))
     (arguments
      `(#:tests? #t
        #:test-command '("ert-runner")))
+    (native-inputs
+     (list emacs-ert-runner))
+    (propagated-inputs
+     (list emacs-f emacs-s))
     (home-page "https://github.com/rmuslimov/browse-at-remote")
     (synopsis "Open github/gitlab/bitbucket/stash page from Emacs")
     (description
@@ -15326,6 +15485,29 @@ proficiency is an advantage, since you can transform your numeric range with
 an elisp expression.")
       (license license:gpl3+))))
 
+(define-public emacs-taxy
+  (package
+    (name "emacs-taxy")
+    (version "0.8")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://elpa.gnu.org/packages/taxy-" version ".tar"))
+       (sha256
+        (base32
+         "00pc6lh35gj8vzcsn17fyazb9jsc4m6nr7cvb32w02isadv8qd3m"))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     (list emacs-magit))
+    (home-page "https://github.com/alphapapa/taxy.el")
+    (synopsis "Programmable taxonomical grouping for arbitrary objects")
+    (description
+     "Taxy provides a programmable way to classify arbitrary objects into
+a hierarchical taxonomy.  Allows you to automatically put things in nested
+groups.")
+    (license license:gpl3+)))
+
 (define-public emacs-emojify
   (package
     (name "emacs-emojify")
@@ -15344,7 +15526,7 @@ an elisp expression.")
     (arguments
      `(#:include (cons "^data/" %default-include)))
     (propagated-inputs
-     `(("emacs-ht" ,emacs-ht)))
+     (list emacs-ht))
     (home-page "https://github.com/iqbalansari/emacs-emojify")
     (synopsis "Display emojis in Emacs")
     (description "This package displays emojis in Emacs similar to how Github,
@@ -15373,7 +15555,7 @@ well as Github-style emojis like @code{:smile:}.  It provides a minor mode
       (arguments
        `(#:include (cons "^recipes/" %default-include)))
       (propagated-inputs
-       `(("emacs-ivy" ,emacs-ivy)))
+       (list emacs-ivy))
       (home-page "https://github.com/abo-abo/make-it-so")
       (synopsis "Transform files with Makefile recipes")
       (description "This package provides an interface for selecting from
@@ -15443,10 +15625,7 @@ included by default, and more can be readily added.")
          "0ylsn36zmrn8mds2z74vbyv7sd4699a4wicg4shrf2gd5bbsi72g"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-deferred" ,emacs-deferred)
-       ("emacs-esxml" ,emacs-esxml)
-       ("emacs-s" ,emacs-s)
-       ("emacs-unidecode" ,emacs-unidecode)))
+     (list emacs-deferred emacs-esxml emacs-s emacs-unidecode))
     (home-page "https://gitlab.com/fvdbeek/emacs-pubmed")
     (synopsis "Interface to PubMed")
     (description "This package provides an Emacs interface to the PubMed
@@ -15564,11 +15743,11 @@ part, which includes creating tokens.")
                            (kill-sexp))
                    (basic-save-buffer))))))))
       (native-inputs
-       `(("emacs-buttercup" ,emacs-buttercup)))
+       (list emacs-buttercup))
       ;; In order to securely connect to an IRC server using TLS, Circe requires
       ;; the GnuTLS binary.
       (propagated-inputs
-       `(("gnutls" ,gnutls)))
+       (list gnutls))
       (home-page "https://github.com/jorgenschaefer/circe")
       (synopsis "Client for IRC in Emacs")
       (description "Circe is a Client for IRC in Emacs.  It integrates well with
@@ -15616,13 +15795,13 @@ through them using @key{C-c C-SPC}.")
            (add-before 'build 'set-HOME
              (lambda _ (setenv "HOME" "/tmp") #t)))))
       (propagated-inputs
-       `(("emacs-alert" ,emacs-alert)
-         ("emacs-emojify" ,emacs-emojify)
-         ("emacs-helm" ,emacs-helm)
-         ("emacs-request" ,emacs-request)
-         ("emacs-websocket" ,emacs-websocket)
-         ("emacs-oauth2" ,emacs-oauth2)
-         ("emacs-circe" ,emacs-circe)))
+       (list emacs-alert
+             emacs-emojify
+             emacs-helm
+             emacs-request
+             emacs-websocket
+             emacs-oauth2
+             emacs-circe))
       (home-page "https://github.com/yuya373/emacs-slack")
       (synopsis "Slack client for Emacs")
       (description "This package provides an Emacs client for the Slack
@@ -15651,7 +15830,7 @@ messaging service.")
            ;; HOME needs to exist for source compilation.
            (add-before 'build 'set-HOME
              (lambda _ (setenv "HOME" "/tmp") #t)))))
-      (propagated-inputs `(("emacs-slack" ,emacs-slack)))
+      (propagated-inputs (list emacs-slack))
       (home-page "https://github.com/yuya373/helm-slack")
       (synopsis "Helm extension for emacs-slack")
       (description "This package provides an helm extension for emacs-slack
@@ -15672,7 +15851,7 @@ Slack client.")
       (file-name (git-file-name name version))
       (sha256
        (base32 "11j2k3irixp47r2iglxdmjphahqhgnxg98n2xwagwzyq99lsamj4"))))
-   (inputs `(("bash" ,bash)))
+   (inputs (list bash))
    (build-system emacs-build-system)
    (arguments
     `(#:phases
@@ -15716,14 +15895,14 @@ let users kill or mark things easily.")
 (define-public emacs-csv-mode
   (package
     (name "emacs-csv-mode")
-    (version "1.16")
+    (version "1.18")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/"
                            "csv-mode-" version ".tar"))
        (sha256
-        (base32 "1i43b2p31xhrf97xbdi35y550ysp69fasa5gcrhg6iyxw176807p"))))
+        (base32 "0fv7hvsfbc9n4hsgg3ywk8qf4ig5a986zfq0lwnjj8pcz1bpmrxj"))))
     (build-system emacs-build-system)
     (home-page "https://elpa.gnu.org/packages/csv-mode.html")
     (synopsis "Major mode for editing comma/char separated values")
@@ -15801,10 +15980,8 @@ literate programming tools for exporting, weaving and tangling.")
         (base32 "0f0yq6gmkp194nxk90ipprglf1xkmxrgz1rkgrhfslvxq4q2l81h"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-ansible-doc" ,emacs-ansible-doc)
-       ("emacs-jinja2-mode" ,emacs-jinja2-mode)
-       ("emacs-polymode" ,emacs-polymode)
-       ("emacs-yaml-mode" ,emacs-yaml-mode)))
+     (list emacs-ansible-doc emacs-jinja2-mode emacs-polymode
+           emacs-yaml-mode))
     (properties '((upstream-name . "poly-ansible")))
     (home-page "https://gitlab.com/mavit/poly-ansible/")
     (synopsis "Polymode for Ansible - Jinja2 in YAML")
@@ -15828,8 +16005,7 @@ literate programming tools for exporting, weaving and tangling.")
         (base32 "1q4qq0ql08hxkdrd2aal03560k612my7bvnfpfij3g432hn0p7v6"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-markdown-mode" ,emacs-markdown-mode)
-       ("emacs-polymode" ,emacs-polymode)))
+     (list emacs-markdown-mode emacs-polymode))
     (properties '((upstream-name . "poly-markdown")))
     (synopsis "Polymode for Markdown mode")
     (description
@@ -15852,7 +16028,7 @@ files using the major mode corresponding to each block.")
         (base32 "1jl5h4nf10xd2gdlsxi6h2n3z5zh26ffcixn68xfp5q4zl34zk8p"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-polymode" ,emacs-polymode)))
+     (list emacs-polymode))
     (home-page "https://github.com/polymode/poly-noweb")
     (synopsis "Polymode for noweb")
     (description
@@ -15899,7 +16075,7 @@ Microsoft PowerShell files.")
         (base32 "1srnwcsn2bh8gqzxixkhffk7gbnk66kd4dgvxbnps5nxqc6v0qhc"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-polymode" ,emacs-polymode)))
+     (list emacs-polymode))
     (properties '((upstream-name . "poly-org")))
     (home-page "https://github.com/polymode/poly-org")
     (synopsis "Polymode definitions for Org mode buffers")
@@ -15924,8 +16100,7 @@ languages while remaining inside the primary Org buffer.")
         (base32 "1xif339wsc79hsab3l1nnwvy20jg7s1r4akfj4qqi6qxizfhmb52"))))
     (build-system copy-build-system)
     (inputs
-     `(("bash" ,bash)
-       ("emacs" ,emacs)))
+     (list bash emacs))
     (arguments
      `(#:install-plan
        '(("eless" "bin/")
@@ -15969,7 +16144,7 @@ Features:
         (base32 "0cxv1bmbnir59k778dip5mkjyqhbh10pk9b4ayvwpgiz25dlp4ss"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-evil" ,emacs-evil)))
+     (list emacs-evil))
     (home-page "https://github.com/redguardtoo/evil-matchit")
     (synopsis "Vim matchit ported into Emacs")
     (description
@@ -15992,8 +16167,7 @@ evil mode using @kbd{%}.  It is a port of @code{matchit} for Vim.")
         (base32 "1di4qz5fbrlwbg16c2j0m7y8zqfxw027qd7zqmc3rwk9znbhg7wl"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-evil" ,emacs-evil)
-       ("emacs-smartparens" ,emacs-smartparens)))
+     (list emacs-evil emacs-smartparens))
     (home-page "https://github.com/expez/evil-smartparens")
     (synopsis "Emacs Evil integration for Smartparens")
     (description "@code{emacs-evil-smartparens} is an Emacs minor mode which
@@ -16016,7 +16190,7 @@ emulates Vim features and provides Vim-like key bindings.")
         (base32 "1ja9ggj70wf0nmma4xnc1zdzg2crq9h1cv3cj7cgwjmllflgkfq7"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-evil" ,emacs-evil)))
+     (list emacs-evil))
     (arguments
      `(#:tests? #t
        #:test-command '("emacs" "--batch"
@@ -16072,13 +16246,9 @@ supports multiple backends such as @code{vlc}, @code{mpg123},
      `(#:tests? #t
        #:test-command '("ert-runner")))
     (native-inputs
-     `(("emacs-ert-runner" ,emacs-ert-runner)
-       ("emacs-undercover" ,emacs-undercover)
-       ("emacs-shut-up" ,emacs-shut-up)
-       ("emacs-f" ,emacs-f)))
+     (list emacs-ert-runner emacs-undercover emacs-shut-up emacs-f))
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-dash emacs-s))
     (home-page "https://github.com/Groovy-Emacs-Modes/groovy-emacs-modes")
     (synopsis "Groovy related modes for Emacs")
     (description "This package provides @code{groovy-mode} for syntax
@@ -16102,7 +16272,7 @@ Grails project navigation with the grails mode.")
                  (base32
                   "0w38g88yykslg71xr99ff4vx1ffgy90b7xqvvdflr189gwk3avx1"))))
       (propagated-inputs
-       `(("emacs-groovy-modes" ,emacs-groovy-modes)))
+       (list emacs-groovy-modes))
       (build-system emacs-build-system)
       (home-page "https://github.com/john2x/jenkinsfile-mode/")
       (synopsis "Emacs major-mode for editing Jenkinsfile")
@@ -16129,7 +16299,7 @@ from @code{groovy-mode} for editing Jenkins declarative pipeline files.")
       (arguments
        `(#:tests? #t
          #:test-command '("ert-runner" "-L" "." "-L" "test")))
-      (native-inputs `(("emacs-ert-runner" ,emacs-ert-runner)))
+      (native-inputs (list emacs-ert-runner))
       (home-page "https://github.com/Emacs-Kotlin-Mode-Maintainers/kotlin-mode")
       (synopsis "Major major-mode for editing Kotlin files")
       (description
@@ -16175,7 +16345,7 @@ from @code{groovy-mode} for editing Jenkins declarative pipeline files.")
         (base32 "0yiwq2gc4gdgfhaagpawhb7yrzc4fsnyb10w5d0q4whv64cj8555"))))
     (build-system emacs-build-system)
     (native-inputs
-     `(("texinfo" ,texinfo)))
+     (list texinfo))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -16242,7 +16412,7 @@ Lisp.")
        ;; Byte-compiling the others Elisp files leads to build errors anyway.
        #:include (list "esxml.el" "esxml-query.el")))
     (propagated-inputs
-     `(("emacs-kv" ,emacs-kv)))
+     (list emacs-kv))
     (home-page "https://github.com/tali713/esxml/")
     (synopsis "SXML for EmacsLisp")
     (description "This is XML/XHTML done with S-Expressions in EmacsLisp.
@@ -16278,10 +16448,9 @@ the format.")
                 (string-append "\"" (which "unzip") "\"")))
              #t)))))
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-esxml" ,emacs-esxml)))
+     (list emacs-dash emacs-esxml))
     (inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://depp.brause.cc/nov.el/")
     (synopsis "Major mode for reading EPUBs in Emacs")
     (description "@code{nov.el} provides a major mode for reading EPUB
@@ -16317,9 +16486,6 @@ Features:
        (sha256
         (base32 "0lkisi1s7sn12nx8zh58qmsxwnk1rjwryj18wcbr148xqz3swg57"))))
     (build-system trivial-build-system)
-    (inputs
-     `(("bash" ,bash)
-       ("perl" ,perl)))
     (arguments
      `(#:modules
        ((guix build utils))
@@ -16332,15 +16498,16 @@ Features:
          ;; Patch shebangs.
          (substitute* "epipe"
            (("/usr/bin/env bash")
-            (string-append (assoc-ref %build-inputs "bash") "/bin/bash")))
+            (search-input-file %build-inputs "/bin/bash")))
          (patch-shebang "epipe.pl"
                         (list (string-append (assoc-ref %build-inputs "perl")
                                              "/bin")))
          ;; Install.
          (for-each (lambda (file)
                      (install-file file (string-append %output "/bin")))
-                   '("epipe" "epipe.pl"))
-         #t)))
+                   '("epipe" "epipe.pl")))))
+    (inputs
+     (list bash perl))
     (home-page "https://github.com/cute-jumper/epipe")
     (synopsis "Pipe to the @code{emacsclient}")
     (description "@code{epipe} provides an utility to use your editor in
@@ -16362,11 +16529,11 @@ the pipeline, featuring the support for running @code{emacsclient}.")
         (base32 "1sr007wsl2y6wqpzkmv3inbpwhvgdcb2nmqzgfg7w1awapi2r13p"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-company" ,emacs-company) ;optional
-       ("emacs-markdown-mode" ,emacs-markdown-mode) ;optional
-       ("emacs-simple-httpd" ,emacs-simple-httpd)
-       ("emacs-websocket" ,emacs-websocket)
-       ("emacs-zmq" ,emacs-zmq)))
+     (list emacs-company ;optional
+           emacs-markdown-mode ;optional
+           emacs-simple-httpd
+           emacs-websocket
+           emacs-zmq))
     (home-page "https://github.com/nnicandro/emacs-jupyter")
     (synopsis "Emacs interface to communicate with Jupyter kernels")
     (description "This package provides an Emacs interface to communicate with
@@ -16412,7 +16579,7 @@ highlighting and indentation support.")
         (base32 "05hn8kskx9lcgn7bzgam99c629zlryir2pickwrqndacjrqpdykx"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-hcl-mode" ,emacs-hcl-mode)))
+     (list emacs-hcl-mode))
     (home-page "https://github.com/syohex/emacs-terraform-mode")
     (synopsis "Major mode for Terraform")
     (description
@@ -16460,8 +16627,7 @@ the same values you get in a terminal.")
         (base32 "06iw11z61fd0g4w3562k3smcmzaq3nivvvc6gzm8y8k5pcrqzdff"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-avy" ,emacs-avy)
-       ("emacs-posframe" ,emacs-posframe)))
+     (list emacs-avy emacs-posframe))
     (home-page "https://github.com/clemera/frog-menu")
     (synopsis "Quickly pick items from ad hoc menus")
     (description
@@ -16487,9 +16653,7 @@ on which user-defined dispatch actions can act.")
            "1z00by8hiss1r2lwmzrl8pnz6jykia2849dqqm4l3z5rf6lwvc0f"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)
-         ("emacs-frog-menu" ,emacs-frog-menu)
-         ("emacs-avy" ,emacs-avy)))
+       (list emacs-dash emacs-frog-menu emacs-avy))
       (home-page "https://github.com/waymondo/frog-jump-buffer")
       (synopsis "Jump to any Emacs buffer with minimal keystrokes")
       (description
@@ -16602,7 +16766,7 @@ used with SGML-like languages: XML, HTML, XHTML, XSL, etc.")
            "1s3b9bridl78hh1mxmdk9nqlmqhibbaxk0a1cixmsf23s06w8w6l"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-undo-tree" ,emacs-undo-tree)))
+       (list emacs-undo-tree))
       (home-page "https://ergoemacs.github.io/")
       (synopsis "Emacs mode based on common modern interface and ergonomics")
       (description
@@ -16641,10 +16805,8 @@ close, copy, cut, paste, undo, redo.")
                (delete-file-recursively "src")
                (delete-file-recursively "tests"))))))
       (propagated-inputs
-       `(("emacs-auth-source-pass" ,emacs-auth-source-pass)
-         ("emacs-s" ,emacs-s)
-         ("emacs-with-editor" ,emacs-with-editor)
-         ("password-store" ,password-store)))
+       (list emacs-auth-source-pass emacs-s emacs-with-editor
+             password-store))
       (home-page "https://git.zx2c4.com/password-store/tree/contrib/emacs")
       (synopsis "Password store (pass) support for Emacs")
       (description
@@ -16667,8 +16829,7 @@ standard Unix password manager\").")
        (file-name (git-file-name name version))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-password-store" ,emacs-password-store)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-password-store emacs-s))
     (home-page "https://github.com/volrath/password-store-otp.el")
     (synopsis
      "Interact with the @code{pass-otp} extension for @code{pass} from Emacs")
@@ -16721,8 +16882,7 @@ needed.")
         (base32 "0jc8j421mlflspg24jvrqc2n3y5n3cpk3hjy560il8g36xi1049p"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-password-store" ,emacs-password-store)
-       ("emacs-f" ,emacs-f)))
+     (list emacs-password-store emacs-f))
     (home-page "https://github.com/NicolasPetton/pass")
     (synopsis "Major mode for @file{password-store.el}")
     (description "This is a major mode for managing password-store (pass)
@@ -16750,11 +16910,8 @@ and can be consulted and modified.")
           (base32 "0r0fymyai30jimm34z1cmav4wgij8ci6s1d9y7qigygfbbfrdsmj"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-company" ,emacs-company)
-         ("emacs-dash" ,emacs-dash)
-         ("emacs-flycheck" ,emacs-flycheck)
-         ("emacs-let-alist" ,emacs-let-alist)
-         ("emacs-s" ,emacs-s)))
+       (list emacs-company emacs-dash emacs-flycheck emacs-let-alist
+             emacs-s))
       (home-page "https://github.com/purescript-emacs/psc-ide-emacs")
       (synopsis "Emacs integration for PureScript's psc-ide tool")
       (description
@@ -16787,8 +16944,7 @@ protocol for PureScript programming language.  It features:
         (base32 "0lw7fg4gqwj30r0l6k2ni36sxqkf65zf0d0z3rxnpwbxlf8dlkrr"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-evil" ,emacs-evil)
-       ("emacs-anzu" ,emacs-anzu)))
+     (list emacs-evil emacs-anzu))
     (home-page "https://github.com/syohex/emacs-evil-anzu")
     (synopsis "Anzu for evil-mode")
     (description "@code{anzu} provides a minor mode that displays the current
@@ -16842,15 +16998,15 @@ object has been freed.")
   (package
     (name "emacs-emacsql")
     (version "3.0.0")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/skeeto/emacsql")
-                    (commit (string-append version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1c84gxr1majqj4b59wgdy3lzm3ap66w9qsrnkx8hdbk9895ak81g"))))
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/skeeto/emacsql")
+             (commit (string-append version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1c84gxr1majqj4b59wgdy3lzm3ap66w9qsrnkx8hdbk9895ak81g"))))
     (build-system emacs-build-system)
     (arguments
      `(#:modules ((guix build emacs-build-system)
@@ -16862,8 +17018,7 @@ object has been freed.")
          (add-before 'install 'patch-elisp-shell-shebangs
            (lambda _
              (substitute* (find-files "." "\\.el")
-               (("/bin/sh") (which "sh")))
-             #t))
+               (("/bin/sh") (which "sh")))))
          (add-after 'patch-elisp-shell-shebangs 'setenv-shell
            (lambda _
              (setenv "SHELL" "sh")))
@@ -16874,9 +17029,7 @@ object has been freed.")
            ;; This build phase installs emacs-emacsql binary.
            (lambda* (#:key outputs #:allow-other-keys)
              (install-file "sqlite/emacsql-sqlite"
-                           (string-append (assoc-ref outputs "out")
-                                          "/bin"))
-             #t))
+                           (string-append (assoc-ref outputs "out") "/bin"))))
          (add-after 'install-emacsql-sqlite 'patch-emacsql-sqlite.el
            ;; This build phase removes interactive prompts
            ;; and makes sure Emacs look for binaries in the right places.
@@ -16892,13 +17045,9 @@ object has been freed.")
                   (string-append (assoc-ref outputs "out")
                                  "/bin/emacsql-sqlite")))))))))
     (inputs
-     `(("emacs-minimal" ,emacs-minimal)
-       ("mariadb" ,mariadb "lib")
-       ("mariadb-dev" ,mariadb "dev")
-       ("postgresql" ,postgresql)))
+     (list emacs-minimal `(,mariadb "dev") `(,mariadb "lib") postgresql))
     (propagated-inputs
-     `(("emacs-finalize" ,emacs-finalize)
-       ("emacs-pg" ,emacs-pg)))
+     (list emacs-finalize emacs-pg))
     (home-page "https://github.com/skeeto/emacsql")
     (synopsis "Emacs high-level SQL database front-end")
     (description "Any readable Lisp value can be stored as a value in EmacSQL,
@@ -16911,22 +17060,16 @@ object @code{nil} corresponds 1:1 with @code{NULL} in the database.")
   (package
     (name "emacs-emacsql-sqlite3")
     (version "1.0.2")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/cireu/emacsql-sqlite3")
-                    (commit version)))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1jzvvsvi8jm2ws3y49nmpmwd3zlvf8j83rl2vwizd1aplwwdnmd6"))))
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/cireu/emacsql-sqlite3")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1jzvvsvi8jm2ws3y49nmpmwd3zlvf8j83rl2vwizd1aplwwdnmd6"))))
     (build-system emacs-build-system)
-    (native-inputs
-     `(("ert-runner" ,emacs-ert-runner)))
-    (inputs
-     `(("sqlite" ,sqlite)))
-    (propagated-inputs
-     `(("emacs-emacsql" ,emacs-emacsql)))
     (arguments
      `(#:tests? #t
        #:test-command '("emacs" "-Q" "--batch" "-L" "."
@@ -16938,8 +17081,13 @@ object @code{nil} corresponds 1:1 with @code{NULL} in the database.")
            (lambda _
              (substitute* "emacsql-sqlite3.el"
                (("\\(executable-find \"sqlite3\"\\)")
-                (string-append "\"" (which "sqlite3") "\"")))
-             #t)))))
+                (string-append "\"" (which "sqlite3") "\""))))))))
+    (native-inputs
+     (list emacs-ert-runner))
+    (inputs
+     (list sqlite))
+    (propagated-inputs
+     (list emacs-emacsql))
     (home-page "https://github.com/cireu/emacsql-sqlite3")
     (synopsis "EmacSQL backend for SQLite")
     (description "This is yet another EmacSQL backend for SQLite which uses
@@ -16962,7 +17110,7 @@ official @command{sqlite3} executable to access SQL database.")
          "1xa9rzyfm6bfskm2mfckd7jwmjwcraky7vsp7yyrnrqfksrl5na8"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-emacsql" ,emacs-emacsql)))
+     (list emacs-emacsql))
     (home-page "https://github.com/emacscollective/closql")
     (synopsis "Store EIEIO objects using EmacSQL")
     (description
@@ -16976,7 +17124,7 @@ add any additional instance slots.")
 (define-public emacs-epkg
   (package
     (name "emacs-epkg")
-    (version "3.3.1")
+    (version "3.3.2")
     (source
      (origin
        (method git-fetch)
@@ -16985,12 +17133,33 @@ add any additional instance slots.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32
-         "0z9sz9ydfjzhawh4qip41h3vid1lslaf0h14hkjz9kx8fkrzib8a"))))
+        (base32 "18kjp0f5ch4mpd6yrd83p73pw7ykp2lv5686is8vcvyyys53jrf1"))))
     (build-system emacs-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'install 'make-info
+           ;; Documentation is located in "docs/".
+           (lambda* (#:key outputs #:allow-other-keys)
+             (with-directory-excursion "docs"
+               (invoke "makeinfo" "-o" "epkg.info" "epkg.texi")
+               (let ((info (string-append (assoc-ref outputs "out")
+                                          "/share/info")))
+                 (install-file "epkg.info" info)))))
+         (add-after 'make-info 'move-to-lisp-directory
+           ;; Source code is located in "lisp/".
+           (lambda _
+             (chdir "lisp")))
+         (add-after 'expand-load-path 'add-el-dir-to-emacs-load-path
+           (lambda _
+             (setenv "EMACSLOADPATH"
+                     (string-append (getcwd)
+                                    "/lisp:"
+                                    (getenv "EMACSLOADPATH"))))))))
+    (native-inputs
+     (list texinfo))
     (propagated-inputs
-     `(("emacs-closql" ,emacs-closql)
-       ("emacs-dash" ,emacs-dash)))
+     (list emacs-closql emacs-dash))
     (home-page "https://emacsmirror.net")
     (synopsis "Browse the Emacsmirror package database")
     (description "This package provides access to a local copy of the
@@ -17145,7 +17314,7 @@ text-mode (i.e. Org-mode).")
                 "1lh9f5dgdbwfyzxk6nsg1xwdjs8gc6p9mbyyhp6f8fnk3h0y88cg"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-outorg" ,emacs-outorg)))
+     (list emacs-outorg))
     (home-page "https://github.com/alphapapa/outshine")
     (synopsis "Emacs outline with outshine")
     (description "Outshine attempts to bring the look and feel of
@@ -17173,8 +17342,7 @@ outline-mode), so there is no such thing like an outshine mode, only
                 (file-name (git-file-name name version))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-a" ,emacs-a)
-         ("emacs-dash" ,emacs-dash)))
+       (list emacs-a emacs-dash))
       (home-page "https://github.com/alphapapa/frecency.el")
       (synopsis "Sort items by frequency and recency of access")
       (description "This package provides a way of sorting items via
@@ -17182,45 +17350,46 @@ a heuristic based on frequency and recency.")
       (license license:gpl3+))))
 
 (define-public emacs-org-recent-headings
-  (package
-    (name "emacs-org-recent-headings")
-    (version "0.1")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/alphapapa/org-recent-headings")
-                    (commit version)))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0gsrzmg3mssh9s28yjm9m866fnhm1pcligssz1q6brga6dm6f2yy"))))
-    (build-system emacs-build-system)
-    (propagated-inputs
-     `(("emacs-org" ,emacs-org)
-       ("emacs-dash" ,emacs-dash)
-       ("emacs-frecency" ,emacs-frecency)))
-    (home-page "https://github.com/alphapapa/org-recent-headings")
-    (synopsis "Navigate to recently used Org headings and lists")
-    (description "This package maintains a list of recently used Org headings,
+  (let ((commit "97418d581ea030f0718794e50b005e9bae44582e")
+        (revision "0"))
+    (package
+      (name "emacs-org-recent-headings")
+      (version (git-version "0.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/alphapapa/org-recent-headings")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "1y11rlnhi36lzhc1cagninv6hlcwbvj88xfr0g0xzpbzy7hys021"))))
+      (build-system emacs-build-system)
+      (propagated-inputs
+       (list emacs-dash emacs-frecency emacs-helm emacs-org emacs-s))
+      (home-page "https://github.com/alphapapa/org-recent-headings")
+      (synopsis "Navigate to recently used Org headings and lists")
+      (description
+       "This package maintains a list of recently used Org headings,
 as well as functions for navigating between these headings.")
-    (license license:gpl3+)))
+      (license license:gpl3+))))
 
 (define-public emacs-org-super-agenda
   (package
     (name "emacs-org-super-agenda")
     (version "1.2")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/alphapapa/org-super-agenda")
-                    (commit version)))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "10l9h2n09cql4ih7nc0ma3ghdsq9l5v9xlj1lg7kq67icdwjlsvy"))))
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/alphapapa/org-super-agenda")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "10l9h2n09cql4ih7nc0ma3ghdsq9l5v9xlj1lg7kq67icdwjlsvy"))))
     (build-system emacs-build-system)
     (arguments
-     `(#:tests? #t
+     `(#:tests? #f                  ;FIXNE: Tests try to read "~/org/test.org"
        #:test-command '("test/run" "--debug")
        #:phases
        (modify-phases %standard-phases
@@ -17234,17 +17403,11 @@ as well as functions for navigating between these headings.")
              ;; https://github.com/alphapapa/org-super-agenda/issues/183).
              (substitute* "test/test.el"
                ((".*org-super-agenda-test--:auto-(map|tags).*" all)
-                (string-append all "  (skip-unless nil)\n")))
-             #t)))))
+                (string-append all "  (skip-unless nil)\n"))))))))
     (native-inputs
-     `(("emacs-f" ,emacs-f)
-       ("getopt" ,util-linux)))
-    (propagated-inputs
-     `(("emacs-org" ,emacs-org)
-       ("emacs-dash" ,emacs-dash)
-       ("emacs-ts" ,emacs-ts)
-       ("emacs-ht" ,emacs-ht)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-f util-linux))
+    (propagated-inputs
+     (list emacs-dash emacs-ht emacs-org emacs-s emacs-ts))
     (home-page "https://github.com/alphapapa/org-super-agenda")
     (synopsis "Supercharged Org agenda")
     (description "This package allows items in the Org agenda to be grouped
@@ -17291,9 +17454,7 @@ work Nicolas Rougier.")
                 "180ji6nnj6qj0rs1rdp1zlcrfsqf7ikb44ym8icbp5d6al2s4hnr"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-org" ,emacs-org)
-       ("emacs-dash" ,emacs-dash)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-org emacs-dash emacs-s))
     (home-page "https://github.com/alphapapa/org-make-toc")
     (synopsis "Maintain a table of contents for an Org file")
     (description "This package facilitates the creation and maintenance of
@@ -17315,8 +17476,7 @@ tables of contents.")
        (file-name (git-file-name name version))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-s" ,emacs-s)
-       ("emacs-dash" ,emacs-dash)))
+     (list emacs-s emacs-dash))
     (arguments
      ;; XXX: Three tests are failing because of a timezone-related issue
      ;; with how they're written.  On my machine, all the failing test
@@ -17383,16 +17543,16 @@ according to a parsing expression grammar.")
 (define-public emacs-eldev
   (package
     (name "emacs-eldev")
-    (version "0.9.1")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/doublep/eldev")
-                    (commit version)))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1jfj4f5w20qd12k6ygv0jazn2x9pxjrmqmlmibppc4ybrhhgmg0s"))))
+    (version "0.10.3")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/doublep/eldev")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1y8vz5grmlhln37lf93a3gxwh46ar0v3jj2dcvzkb36lqf1snq73"))))
     (build-system emacs-build-system)
     (arguments
      `(#:tests? #t
@@ -17402,14 +17562,13 @@ according to a parsing expression grammar.")
          (add-after 'unpack 'prepare-for-tests
            (lambda _
              (setenv "ELDEV_LOCAL" (getcwd))
-             (make-file-writable
-              "test/project-i/project-i-autoloads.el")
-             #t))
+             (make-file-writable "test/project-i/project-i-autoloads.el")))
          (add-after 'unpack 'skip-failing-tests
            ;; FIXME: 10 tests are failing.  Skip them for now.
            (lambda _
-             (substitute* '("test/init.el" "test/targets.el")
-               (("(targets-project-e-[34]|init-[1-8]).*" line)
+             (delete-file "test/upgrade-self.el")
+             (substitute* "test/init.el"
+               (("init-[1-8].*" line)
                 (string-append line "(skip-unless nil)\n")))))
          (add-after 'install 'install-eldev-executable
            ;; This constructs the eldev executable from templates and
@@ -17417,7 +17576,7 @@ according to a parsing expression grammar.")
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
                     (bin (string-append out "/bin"))
-                    (site-lisp (string-append out "/share/emacs/site-lisp")))
+                    (site-lisp (elpa-directory out)))
                (mkdir-p bin)
                (setenv "HOME" (getcwd))
                (invoke "./install.sh" bin)
@@ -17426,10 +17585,9 @@ according to a parsing expression grammar.")
                  ;; eldev doesn't try to bootstrap itself from MELPA when
                  ;; invoked.
                  (("export ELDEV_EMACS.*" all)
-                  (string-append "export ELDEV_LOCAL=" site-lisp "\n" all)))
-               #t))))))
+                  (string-append "export ELDEV_LOCAL=" site-lisp "\n" all)))))))))
     (native-inputs
-     `(("texinfo" ,texinfo)))           ;for tests
+     (list texinfo))           ;for tests
     (home-page "https://github.com/doublep/eldev/")
     (synopsis "Emacs-based build tool for Elisp")
     (description "Eldev (Elisp Development Tool) is an Emacs-based build tool,
@@ -17461,10 +17619,9 @@ parallel to Gradle — its configuration is a program on its own.")
      `(#:tests? #f
        #:test-command '("buttercup" "-L" ".")))
     (native-inputs
-     `(("emacs-buttercup" ,emacs-buttercup)
-       ("emacs-undercover" ,emacs-undercover)))
+     (list emacs-buttercup emacs-undercover))
     (propagated-inputs
-     `(("emacs-s" ,emacs-s)))
+     (list emacs-s))
     (home-page "https://github.com/DarwinAwardWinner/with-simulated-input")
     (synopsis "Non-interactive testing Emacs library")
     (description "This package provides an Emacs Lisp macro,
@@ -17490,20 +17647,19 @@ interactive commands and functions, such as @code{completing-read}.")
               (file-name (git-file-name name version))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-s" ,emacs-s)
-       ("emacs-f" ,emacs-f)
-       ("emacs-ov" ,emacs-ov)
-       ("emacs-peg" ,emacs-peg)
-       ("emacs-org-super-agenda" ,emacs-org-super-agenda)
-       ("emacs-ts" ,emacs-ts)
-       ("emacs-org" ,emacs-org)
-       ("emacs-helm" ,emacs-helm)
-       ("emacs-helm-org" ,emacs-helm-org)
-       ("emacs-dash" ,emacs-dash)
-       ("emacs-transient" ,emacs-transient)))
+     (list emacs-s
+           emacs-f
+           emacs-ov
+           emacs-peg
+           emacs-org-super-agenda
+           emacs-ts
+           emacs-org
+           emacs-helm
+           emacs-helm-org
+           emacs-dash
+           emacs-transient))
     (native-inputs
-     `(("emacs-buttercup" ,emacs-buttercup)
-       ("emacs-with-simulated-input" ,emacs-with-simulated-input)))
+     (list emacs-buttercup emacs-with-simulated-input))
     (arguments
      `(#:tests? #t
        #:test-command '("buttercup" "-L" ".")
@@ -17561,8 +17717,7 @@ Chinese to English.")
                   "1my0c6xmkh37lwi6l472lz9d86lf20h6xcllzlxm1lxa24rhva6v"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-org" ,emacs-org)
-         ("emacs-dash" ,emacs-dash)))
+       (list emacs-org emacs-dash))
       (home-page "https://github.com/alphapapa/org-auto-expand")
       (synopsis "Automatically expand certain Org headings")
       (description "This package allows a customizable set of headings in Org
@@ -17572,7 +17727,7 @@ files to be expanded upon opening them.")
 (define-public emacs-parsebib
   (package
     (name "emacs-parsebib")
-    (version "3.0.1")
+    (version "3.1")
     (source
      (origin
        (method git-fetch)
@@ -17581,7 +17736,7 @@ files to be expanded upon opening them.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1hd6izpb4irinjmfy7zxy8fqnr1fm4iw2sipvl9261nm68dzha6z"))))
+        (base32 "08vrkadjxaw1w1bx8dg12kxxkvgl65p0d7gkpfhwpvv35k0d9z3y"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/joostkremers/parsebib")
     (synopsis "Library for parsing @file{.bib} files")
@@ -17592,7 +17747,7 @@ files to be expanded upon opening them.")
 (define-public emacs-ebib
   (package
     (name "emacs-ebib")
-    (version "2.32.2")
+    (version "2.34")
     (source
      (origin
        (method git-fetch)
@@ -17601,11 +17756,10 @@ files to be expanded upon opening them.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "04kw0akp35r2ibrcav4kaf34d1xs8pckjiygv7h1nqpv6dmrgfq7"))))
+        (base32 "0al846i1dn5wrx3r0ak63m80g9j9xk2q5cpcpk63lq0l0gfdff2m"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-biblio" ,emacs-biblio)
-       ("emacs-parsebib" ,emacs-parsebib)))
+     (list emacs-biblio emacs-ivy emacs-parsebib))
     (home-page "https://joostkremers.github.io/ebib/")
     (synopsis "BibTeX database manager for Emacs")
     (description
@@ -17635,8 +17789,7 @@ with (La)TeX mode, Org mode and other Emacs editing modes.")
         (base32 "1gxjind6r235az59dr8liv03d8994mqb8a7m28j3c12q7p70aziz"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-let-alist" ,emacs-let-alist)))
+     (list emacs-dash emacs-let-alist))
     (home-page "https://github.com/cpitclaudel/biblio.el")
     (synopsis "Browse and import bibliographic references")
     (description "This package provides an extensible Emacs package for
@@ -17647,13 +17800,49 @@ and publications from various sources, by keywords or by DOI.  References are
 automatically fetched from well-curated sources, and formatted as BibTeX.")
     (license license:gpl3+)))
 
+(define-public emacs-citar
+  (package
+    (name "emacs-citar")
+    (version "0.9")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/bdarcus/citar")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "15jhpl2j4rm97cvvqzlfzxarvxvcsg64raz068psrsd2y7y2zh4c"))))
+    (build-system emacs-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'set-home
+           (lambda _ (setenv "HOME" "/tmp"))))))
+    (propagated-inputs
+     (list emacs-auctex emacs-org emacs-parsebib emacs-s))
+    (home-page "https://github.com/bdarcus/citar")
+    (synopsis "Emacs package to quickly find and act on bibliographic entries")
+    (description
+     "This package provides a completing-read front-end to browse and
+act on BibTeX, BibLaTeX, and CSL JSON bibliographic data, and LaTeX,
+markdown, and Org cite editing support.
+
+When used with Vertico (or Selectrum), Embark, and Marginalia, it
+provides similar functionality to helm-bibtex and ivy-bibtex: quick
+filtering and selecting of bibliographic entries from the minibuffer,
+and the option to run different commands against them.
+
+With Embark, it also makes available at-point actions in Org
+citations.")
+    (license license:gpl3+)))
+
 (define-public emacs-helm-bibtex
-  (let ((commit "d4471232be26793fbf56c0ac3690b5f537c378b9")
-        (revision "2"))
+  (let ((commit "aa775340ba691d2322948bfdc6a88158568a1399")
+        (revision "3"))
     (package
       (name "emacs-helm-bibtex")
-      (version (string-append "2.0.0" "-" revision "."
-                              (string-take commit 7)))
+      (version (git-version "2.0.0" revision commit))
       (source
        (origin
          (method git-fetch)
@@ -17662,17 +17851,16 @@ automatically fetched from well-curated sources, and formatted as BibTeX.")
                (commit commit)))
          (file-name (git-file-name name version))
          (sha256
-          (base32
-           "1bkzhic6qckb267025il1r3xcpz99kisphxiafni1pxvf9jafr0j"))))
+          (base32 "1d3mc17ga09m41i06khghlvixr6gsiacifnhdbrfnp0w5592aprk"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-helm" ,emacs-helm)
-         ("emacs-parsebib" ,emacs-parsebib)
-         ("emacs-s" ,emacs-s)
-         ("emacs-dash" ,emacs-dash)
-         ("emacs-f" ,emacs-f)
-         ("emacs-biblio" ,emacs-biblio)
-         ("emacs-ivy" ,emacs-ivy)))
+       (list emacs-helm
+             emacs-parsebib
+             emacs-s
+             emacs-dash
+             emacs-f
+             emacs-biblio
+             emacs-ivy))
       (home-page "https://github.com/tmalsburg/helm-bibtex")
       (synopsis "Bibliography manager based on Helm")
       (description "This package provides bibliography manager for Emacs,
@@ -17722,7 +17910,7 @@ arXiv, Google Scholar, Library of Congress, etc.
                (emacs-substitute-sexps file
                  ("(defcustom ewmctrl-wmctrl-path" (which "wmctrl")))))))))
     (inputs
-     `(("wmctrl" ,wmctrl)))
+     (list wmctrl))
     (home-page "https://github.com/flexibeast/ewmctrl")
     (synopsis "Emacs interface to @code{wmctrl}")
     (description "@code{ewmctrl} provides an Emacs interface to
@@ -17774,7 +17962,7 @@ and @code{erc-send-modify-hook} to download and show images.")
         (base32 "1kc1jzk10nfd2v20g8dwnb6a944afrwdwnkzl06w4ba8k4yim7gi"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-helm" ,emacs-helm)))
+     (list emacs-helm))
     (home-page "https://github.com/syohex/emacs-helm-gtags")
     (synopsis "Emacs Helm interface to GNU Global")
     (description
@@ -17912,7 +18100,7 @@ orient yourself in the code, and tell which statements are at a given level.")
         (base32 "1kykbb1sil5cycfa5aj8dhsxc5yrx1641i2np5kwdjid6ahdlz5r"))))
     (build-system emacs-build-system)
     (native-inputs
-     `(("emacs-buttercup" ,emacs-buttercup)))
+     (list emacs-buttercup))
     (arguments
      `(#:tests? #t
        #:test-command '("buttercup" "-L" ".")))
@@ -17960,11 +18148,8 @@ navigate and display hierarchy structures.")
                (base32
                 "1n6g6k4adzkkn1g7z4j27s35xy12c1fg2r08gv345ddr3wplq4ri"))))
     (propagated-inputs
-     `(("emacs-hierarchy" ,emacs-hierarchy)
-       ("emacs-request" ,emacs-request)
-       ("emacs-dash" ,emacs-dash)
-       ("emacs-s" ,emacs-s)
-       ("emacs-tree-mode" ,emacs-tree-mode)))
+     (list emacs-hierarchy emacs-request emacs-dash emacs-s
+           emacs-tree-mode))
     (build-system emacs-build-system)
     (home-page "https://github.com/ahungry/md4rd")
     (synopsis "Emacs Mode for Reddit")
@@ -17999,7 +18184,7 @@ navigate and display hierarchy structures.")
                             ("pulseaudio-control-pactl-path"
                              (string-append pulseaudio "/bin/pactl")))
                           #t))))))
-      (inputs `(("pulseaudio" ,pulseaudio)))
+      (inputs (list pulseaudio))
       (home-page "https://github.com/flexibeast/pulseaudio-control")
       (synopsis "Control @code{pulseaudio} from Emacs")
       (description
@@ -18009,7 +18194,7 @@ navigate and display hierarchy structures.")
 (define-public emacs-datetime
   (package
     (name "emacs-datetime")
-    (version "0.7")
+    (version "0.7.1")
     (source
      (origin
        (method git-fetch)
@@ -18018,12 +18203,12 @@ navigate and display hierarchy structures.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0g6qgp6zvrbiaq6yfzqs3bmnry43xspp3ra3hm17x80b6izdsn90"))))
+        (base32 "108zfj5hz9irgksgg48xdvvaa635m6nzclx7xaymylfcvlycskpl"))))
     (build-system emacs-build-system)
     (arguments
      `(#:include (cons "^[^/]*\\.extmap$" %default-include)))
     (inputs
-     `(("emacs-extmap" ,emacs-extmap)))
+     (list emacs-extmap))
     (home-page "https://github.com/doublep/datetime/")
     (synopsis "Library to work with dates in Emacs")
     (description "Parsing, formatting, matching and recoding
@@ -18031,12 +18216,12 @@ timestamps and date-time format strings library for Emacs.")
     (license license:gpl3+)))
 
 (define-public emacs-org-mind-map
-  (let ((commit "9d6e262bedd94daf9de269f4d56de277275677cb")
-        (revision "1"))
+  ;; XXX: Upstream does not provide any tag.  The commit below corresponds to
+  ;; an exact version bump from the main file.
+  (let ((commit "477701b15cb0c8ed7f021ca76a4cb1a7d9ad6aa5"))
     (package
       (name "emacs-org-mind-map")
-      (version (string-append "0.0.1" "-" revision "."
-                              (string-take commit 7)))
+      (version "0.4")
       (source
        (origin
          (method git-fetch)
@@ -18045,10 +18230,9 @@ timestamps and date-time format strings library for Emacs.")
                (commit commit)))
          (file-name (git-file-name name version))
          (sha256
-          (base32
-           "0jgkkgq7g64zckrmjib0hvz0qy3ynz5vz13qbmlpf096l3bb65wn"))))
+          (base32 "08sj43py6aid4vpqgsm0v5n94mcmcil0047qjk033492glz6q55c"))))
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)))
+       (list emacs-dash))
       (build-system emacs-build-system)
       (home-page "https://github.com/theodorewiles/org-mind-map")
       (synopsis "Create Graphviz directed graphs from Org files")
@@ -18077,12 +18261,12 @@ timestamps and date-time format strings library for Emacs.")
     (license license:gpl3+)))
 
 (define-public emacs-itail
-  (let ((commit "6e43c20da03be3b9c6ece93b7dc3495975ec1888")
-        (revision "1"))
+  ;; XXX: Upstream provides no tags.  The commit below corresponds to an exact
+  ;; version bump from main file.
+  (let ((commit "6e43c20da03be3b9c6ece93b7dc3495975ec1888"))
     (package
       (name "emacs-itail")
-      (version (string-append "0.0.1" "-" revision "."
-                              (string-take commit 7)))
+      (version "0.0.8")
       (source
        (origin
          (method git-fetch)
@@ -18091,15 +18275,13 @@ timestamps and date-time format strings library for Emacs.")
                (commit commit)))
          (file-name (git-file-name name version))
          (sha256
-          (base32
-           "044nzxh1hq41faxw3lix0wy78vfz304pjcaa5a11dqfz7q3gx5cv"))))
+          (base32 "044nzxh1hq41faxw3lix0wy78vfz304pjcaa5a11dqfz7q3gx5cv"))))
       (build-system emacs-build-system)
       (home-page "https://github.com/re5et/itail")
       (synopsis "Interactive @code{tail} Emacs mode")
-      (description "@code{itail} provides interactive @code{tail} mode
-that allows you to filter the tail with unix pipes and highlight the
-contents of the tailed file.  Works locally or on remote files using
-tramp.")
+      (description "@code{itail} provides interactive @code{tail} mode that
+allows you to filter the tail with Unix pipes and highlight the contents of
+the tailed file.  It works locally or on remote files using Tramp.")
       (license license:gpl3+))))
 
 (define-public emacs-loop
@@ -18117,8 +18299,7 @@ tramp.")
         (base32 "1gs95xnmnn8aa4794k7h8mw1sz1nfdh9v0caqj6yvnsdnwy74n5x"))))
     (build-system emacs-build-system)
     (native-inputs
-     `(("emacs-ert-runner" ,emacs-ert-runner)
-       ("emacs-undercover" ,emacs-undercover)))
+     (list emacs-ert-runner emacs-undercover))
     (arguments
      `(#:tests? #t
        #:test-command '("ert-runner")))
@@ -18144,15 +18325,14 @@ continue.")
         (base32 "0w7k91xf69zc0zkjrw8h8sjdjf9xq9qs5zhvajhd718lzf93564b"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-f" ,emacs-f)
-       ("emacs-list-utils" ,emacs-list-utils)
-       ("emacs-loop" ,emacs-loop)
-       ("emacs-s" ,emacs-s)
-       ("emacs-shut-up" ,emacs-shut-up)))
+     (list emacs-dash
+           emacs-f
+           emacs-list-utils
+           emacs-loop
+           emacs-s
+           emacs-shut-up))
     (native-inputs
-     `(("emacs-ert-runner" ,emacs-ert-runner)
-       ("emacs-undercover" ,emacs-undercover)))
+     (list emacs-ert-runner emacs-undercover))
     (arguments
      `(#:tests? #t
        #:test-command '("ert-runner")
@@ -18175,9 +18355,9 @@ confused by comments or @code{foo-bar} matching @code{foo}.")
 
 (define-public emacs-crdt
   ;; XXX: Upstream does not always tag new releases.  The commit below
-  ;; corresponds exactly to 0.2.6 bump.
-  (let ((commit "3bd1a57999576249d726afa5f2cae1891535747c")
-        (version "0.2.6"))
+  ;; corresponds exactly to 0.2.7 bump.
+  (let ((commit "b8a02a5c1f759003343c10f8cedef4daae95f9fe")
+        (version "0.2.7"))
     (package
       (name "emacs-crdt")
       (version version)
@@ -18189,7 +18369,7 @@ confused by comments or @code{foo-bar} matching @code{foo}.")
                (commit commit)))
          (file-name (git-file-name name version))
          (sha256
-          (base32 "0v8b9ml3357ajlxgn5ys93px4axfav48qyz2ddxgrnnfq0c1h17n"))))
+          (base32 "0av65dnfzc0qapl5cvm6ha3vax4c19y6rxbn2qy1ir87q6lpk2xc"))))
       (build-system emacs-build-system)
       (home-page "https://code.librehq.com/qhong/crdt.el")
       (synopsis "Real-time collaborative editing environment")
@@ -18243,7 +18423,7 @@ mode.")
            ;; Elisp directory is not in root of the source.
            (lambda _
              (chdir "servers"))))))
-    (propagated-inputs `(("emacs-ert-async" ,emacs-ert-async)))
+    (propagated-inputs (list emacs-ert-async))
     (home-page "https://github.com/stsquad/emacs_chrome")
     (synopsis "Server that responds to edit requests from Chromium")
     (description
@@ -18316,11 +18496,9 @@ macro takes a first argument (whose value must be an alist) and a body.")
            "01khb3xyj0ylwib6ryzzvqmkh5wvzxiq2n3l0s3h9zv7wx849bzv"))))
       (build-system emacs-build-system)
       (native-inputs
-       `(("emacs-noflet" ,emacs-noflet)
-         ("emacs-undercover" ,emacs-undercover)
-         ("emacs-buttercup" ,emacs-buttercup)))
+       (list emacs-noflet emacs-undercover emacs-buttercup))
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)))
+       (list emacs-dash))
       (arguments
      `(#:tests? #t
        #:test-command '("buttercup" "-L" ".")))
@@ -18352,12 +18530,39 @@ your Emacs.")
 within Emacs.")
       (license license:gpl3+))))
 
+(define-public emacs-svg-lib
+  ;; XXX: Upstream does not tag releases.  The commit hash below corresponds
+  ;; to the version bump.
+  (let ((commit "0486c9453449771bc3f5872f70bc5cb23580d0f4"))
+    (package
+      (name "emacs-svg-lib")
+      (version "0.2.5")
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/rougier/svg-lib")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "059vd4k7bvskkriwaiz4n2yafc3inndrr018hqfpic4k02cbwzpv"))))
+      (build-system emacs-build-system)
+      (home-page "https://github.com/rougier/svg-lib")
+      (synopsis "Emacs SVG library for creating tags, icons and bars")
+      (description
+       "This is a small Emacs library to create and display various
+SVG objects, namely tags, progress bars, progress pies and icons.
+Each object is guaranteed to fit nicely in a text buffer ensuring
+width is an integer multiple of character width.")
+      (license license:gpl3+))))
+
 (define-public emacs-svg-tag-mode
-  (let ((commit "87489d28450559078aa15b4a435143a297508e48")
-        (revision "1"))
+  ;; XXX: Upstream does not tag releases.  The commit hash below corresponds
+  ;; to the version bump.
+  (let ((commit "3b07983614bee0195534e7a8a6dcfab757da4f0b"))
     (package
       (name "emacs-svg-tag-mode")
-      (version (git-version "0.1" revision commit))
+      (version "0.3.2")
       (source
        (origin
          (method git-fetch)
@@ -18366,14 +18571,39 @@ within Emacs.")
                (commit commit)))
          (file-name (git-file-name name version))
          (sha256
-          (base32 "0gyhmv60dx0zxx4bmhzsd7q5vfnkpfwlj6539bn272fwcr7zncp8"))))
+          (base32 "0nc0y2dn67gy9cly3yamskfd9dd028xbask8gjxql934bq0ads2i"))))
       (build-system emacs-build-system)
+      (propagated-inputs
+       (list emacs-svg-lib))
       (home-page "https://github.com/rougier/svg-tag-mode")
       (synopsis "Replace keywords with SVG tags")
       (description "This package provides a minor mode that replaces keywords
 or expressions with SVG rounded box labels that are fully customizable.")
       (license license:gpl3+))))
 
+(define-public emacs-kind-icon
+  (package
+    (name "emacs-kind-icon")
+    (version "0.1.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://elpa.gnu.org/packages/kind-icon-"
+             version
+             ".tar"))
+       (sha256
+        (base32 "00pyvnq4dx51l2wbhvm6k6cx5xmy32j4h1lkr5kr8s3j5w83ip25"))))
+    (build-system emacs-build-system)
+    (propagated-inputs (list emacs-svg-lib))
+    (home-page "https://github.com/jdtsmith/kind-icon")
+    (synopsis "Completion kind icons in Emacs")
+    (description "Kind-icon mode adds a colorful icon or text prefix based
+on :company-kind for compatible completion UIs.  The \"kind\" prefix is
+typically used for differentiating completion candidates such as variables,
+functions, etc.")
+    (license license:gpl3+)))
+
 (define-public emacs-svg-icon
   (let ((commit "ebc2b8d0f6c680fd575a90e683cc7b832acd1eb7")
         (revision "1"))
@@ -18546,10 +18776,7 @@ until the top-level form is no longer a macro call.")
            "0ny2dcc7c585p7v3j6q0rpkbj1qmf2ismy8a5020jpr585xvz0hh"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-company" ,emacs-company)
-         ("emacs-s" ,emacs-s)
-         ("emacs-f" ,emacs-f)
-         ("emacs-lua-mode" ,emacs-lua-mode)))
+       (list emacs-company emacs-s emacs-f emacs-lua-mode))
       (arguments
        `(#:include (cons* "^lua\\/" %default-include)))
       (home-page "https://github.com/ptrv/company-lua")
@@ -18574,7 +18801,7 @@ until the top-level form is no longer a macro call.")
     ;; TODO: Run tests.
     (build-system emacs-build-system)
     (inputs
-     `(("emacs-undercover" ,emacs-undercover))) ; For tests.
+     (list emacs-undercover)) ; For tests.
     (home-page "https://github.com/DamienCassou/beginend")
     (synopsis "Redefine @code{M-<} and @code{M->} for Emacs modes")
     (description "@code{beginend} redefines @code{M-<} and @code{M->}
@@ -18622,7 +18849,7 @@ within Emacs.")
          "18cqxnwzzbkcj9jcaw89b210432yzhrl1dwsv48p0jbhfnr17k41"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-projectile" ,emacs-projectile)))
+     (list emacs-projectile))
     (home-page "https://github.com/purcell/ibuffer-projectile")
     (synopsis "Group ibuffer's list by projectile root")
     (description "Adds functionality to Emacs @code{ibuffer} for
@@ -18666,10 +18893,7 @@ by the status of listed files.")
        (sha256
         (base32 "0iwk4fmw8hq3ry4ky1zc7lgl4cpbnrjyk74c2xzddfspi3ks41fd"))))
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-f" ,emacs-f)
-       ("emacs-reformatter" ,emacs-reformatter)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-dash emacs-f emacs-reformatter emacs-s))
     (build-system emacs-build-system)
     (home-page "https://github.com/jcollard/elm-mode")
     (synopsis "Emacs major mode for editing Elm source code")
@@ -18706,7 +18930,7 @@ working with common core and third-party Elm tools.  Its features are:
          "1srx5f0s9x7zan7ayqd6scxfhcvr3nkd4yzs96hphd87rb18apzk"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-helm" ,emacs-helm)))
+     (list emacs-helm))
     (home-page "https://github.com/istib/helm-mode-manager/")
     (synopsis "Switch and toggle Emacs major and minor modes using Helm")
     (description "This package provides a Helm interface for toggling Emacs
@@ -18737,8 +18961,7 @@ documentation.")
         (base32 "0gihxlmfminadaqdr8d2zccd7wwygl3m0gfzxsk5izi7f8hl4w7f"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-dash emacs-s))
     (home-page "https://github.com/hylang/hy-mode")
     (synopsis "Major mode for Hylang")
     (description "This package provides a major mode for Hylang.")
@@ -18792,7 +19015,7 @@ CSS, JavaScript, JSON.")
                     `(expand-file-name "~/.bash_history"))))
                #t)))))
       (propagated-inputs
-       `(("emacs-helm" ,emacs-helm)))
+       (list emacs-helm))
       (home-page "https://github.com/yuutayamada/helm-shell-history")
       (synopsis "Find shell history with Emacs Helm")
       (description "This package provides an Emacs Helm interface to search
@@ -18815,7 +19038,7 @@ throw a shell history.")
          "1wlqyl03hhnflbyay3qlvdzqzvv5rbybcjpfddggda7ias9h0pr4"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-makey" ,emacs-makey)))
+     (list emacs-makey))
     (home-page "https://framagit.org/steckerhalter/discover-my-major/")
     (synopsis "Discover key bindings for the current Emacs major mode")
     (description "This package discovers key bindings and
@@ -18837,16 +19060,16 @@ their meaning for the current Emacs major-mode.")
         (base32 "0xd1qp8dfy8n8b2n3rsdzm8vrfl7dii142kw330s8jp3pavww1f6"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-f" ,emacs-f)
-       ("emacs-helm" ,emacs-helm)
-       ("emacs-helm-bibtex" ,emacs-helm-bibtex)
-       ("emacs-htmlize" ,emacs-htmlize)
-       ("emacs-hydra" ,emacs-hydra)
-       ("emacs-ivy" ,emacs-ivy)
-       ("emacs-key-chord" ,emacs-key-chord)
-       ("emacs-pdf-tools" ,emacs-pdf-tools)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-dash
+           emacs-f
+           emacs-helm
+           emacs-helm-bibtex
+           emacs-htmlize
+           emacs-hydra
+           emacs-ivy
+           emacs-key-chord
+           emacs-pdf-tools
+           emacs-s))
     (home-page "https://github.com/jkitchin/org-ref")
     (synopsis "Citations, cross-references and bibliographies in Org mode")
     (description
@@ -18895,20 +19118,19 @@ powerful Org contents.")
 (define-public emacs-org-re-reveal
   (package
     (name "emacs-org-re-reveal")
-    (version "3.10.0")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://gitlab.com/oer/org-re-reveal")
-                    (commit version)))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1bc01ybs498x0b6l136czp2y6js8ngwc9jkrmahnqdkkvm65il5y"))))
+    (version "3.12.4")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://gitlab.com/oer/org-re-reveal")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0j7394zcbzqfk33g2xdyb3fmw3brxy8v66vvf1j9nqlskfddh7bn"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-htmlize" ,emacs-htmlize)
-       ("emacs-org" ,emacs-org)))
+     (list emacs-htmlize emacs-org))
     (home-page "https://gitlab.com/oer/org-re-reveal")
     (synopsis "Build HTML presentations with reveal.js from Org source files")
     (description "This project started as fork of org-reveal.  It provides an
@@ -19056,8 +19278,7 @@ regions which @code{hideshow} can hide.")
            "0jj5spk14hgb7zb1cd2n8whcw4k1kd5zb6llwj96v178yaws7l8k"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-outshine" ,emacs-outshine)
-         ("emacs-outorg" ,emacs-outorg)))
+       (list emacs-outshine emacs-outorg))
       (home-page "https://github.com/alphapapa/navi")
       (synopsis "Emacs major-mode for easy buffer-navigation")
       (description
@@ -19103,14 +19324,9 @@ downloading manager for Emacs.")
         (base32 "0gdjxykqkal2x765mi51m99i5ql23i1fy909wy4mzj5ajhjfgqcc"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-elisp-refs" ,emacs-elisp-refs)
-       ("emacs-dash" ,emacs-dash)
-       ("emacs-s" ,emacs-s)
-       ("emacs-f" ,emacs-f)
-       ("emacs-shut-up" ,emacs-shut-up)))
+     (list emacs-elisp-refs emacs-dash emacs-s emacs-f emacs-shut-up))
     (native-inputs
-     `(("emacs-ert-runner" ,emacs-ert-runner)
-       ("emacs-undercover" ,emacs-undercover)))
+     (list emacs-ert-runner emacs-undercover))
     (arguments
      `(#:tests? #t
        #:test-command '("ert-runner")))
@@ -19151,8 +19367,7 @@ and doesn't require memorisation of commands.
        (sha256
         (base32 "1cchmr25z5zj7rgb2fyxkaq8kpw7i5yg1pvn42dvm09c2wrfbj46"))))
     (propagated-inputs
-     `(("emacs-datetime" ,emacs-datetime)
-       ("emacs-extmap" ,emacs-extmap)))
+     (list emacs-datetime emacs-extmap))
     (build-system emacs-build-system)
     (home-page "https://github.com/doublep/logview/")
     (synopsis "Emacs mode for viewing log files")
@@ -19176,15 +19391,14 @@ and doesn't require memorisation of commands.
          "01v8plska5d3g19sb1m4ph1i3ayprfzk8mi6mpabjy6zad397xjl"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-loop" ,emacs-loop)
-       ("emacs-dash" ,emacs-dash)
-       ("emacs-s" ,emacs-s)
-       ("emacs-f" ,emacs-f)
-       ("emacs-spinner" ,emacs-spinner)
-       ("emacs-shut-up" ,emacs-shut-up)))
+     (list emacs-loop
+           emacs-dash
+           emacs-s
+           emacs-f
+           emacs-spinner
+           emacs-shut-up))
     (native-inputs
-     `(("emacs-ert-runner" ,emacs-ert-runner)
-       ("emacs-undercover" ,emacs-undercover)))
+     (list emacs-ert-runner emacs-undercover))
     (arguments
      `(#:tests? #t
        #:test-command '("ert-runner")))
@@ -19229,7 +19443,7 @@ time is being spent during Emacs startup in order to optimize startup time.")
         (base32 "1q4kcr2ha2kir7pj0cshmgllgq51543syxkkk5jk3ksfiaba4crj"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-magit" ,emacs-magit)))
+     (list emacs-magit))
     (home-page "https://github.com/terranpro/magit-gerrit")
     (synopsis "Magit extension for Gerrit")
     (description "This Magit extension provides integration with Gerrit,
@@ -19252,7 +19466,7 @@ Emacs.")
         (base32
          "07r5x256k1fjjxs1yfg41kc94nwvnjlk2vvknkra3j8v9p0j88m7"))))
     (propagated-inputs
-     `(("magit" ,emacs-magit)))
+     (list emacs-magit))
     (build-system emacs-build-system)
     (home-page "https://github.com/danielma/magit-org-todos.el")
     (synopsis "Get todo.org into Emacs Magit status")
@@ -19302,7 +19516,7 @@ Magit.")
         (base32 "1qg48zbjdjqimw4516ymrsilz41zkib9321q0caf9474s9xyp2bi"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-helm" ,emacs-helm)))
+     (list emacs-helm))
     (home-page "https://github.com/cosmicexplorer/f3")
     (synopsis "Fantastic File Finder for Emacs")
     (description
@@ -19369,9 +19583,7 @@ Magit.")
            "0qfzsq8jh05w4zkr0cvq3i1hdn97bq344vcqjg46sib26x3wpz6r"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)
-         ("emacs-s" ,emacs-s)
-         ("emacs-ht" ,emacs-ht)))
+       (list emacs-dash emacs-s emacs-ht))
       (home-page "https://github.com/nashamri/academic-phrases")
       (synopsis "Bypass that mental block when writing your papers")
       (description
@@ -19406,7 +19618,7 @@ browse the phrases by the paper section and fill-in the blanks if required.")
        '(#:tests? #t
          #:test-command '("make" "test")))
       (propagated-inputs
-       `(("emacs-yasnippet" ,emacs-yasnippet)))
+       (list emacs-yasnippet))
       (home-page "https://github.com/abo-abo/auto-yasnippet/")
       (synopsis "Quickly create disposable yasnippets")
       (description "This package provides a hybrid of keyboard macros and
@@ -19431,7 +19643,7 @@ yasnippet fields and mirrors to be.")
         (base32 "1r07mpyr7rhd7bkg778hx6vbhb4n9ixgzkpszhgks7ri6ia38pj8"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-parent-mode" ,emacs-parent-mode)))
+     (list emacs-parent-mode))
     (home-page "https://github.com/Fanael/highlight-numbers")
     (synopsis "Highlight numbers in source code")
     (description "@code{highlight-numbers-mode} provides a minor mode for
@@ -19510,6 +19722,29 @@ interactive behavior should be different.")
 decreasing the default font size in all GUI Emacs frames.")
     (license license:gpl3+)))
 
+(define-public emacs-fixed-pitch
+  (package
+    (name "emacs-fixed-pitch")
+    (version "0.1.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/cstby/fixed-pitch-mode")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0qlavjvib0r71xdy6y6pan9dhr57lw7jhmqk60mwa8fq6km8kpkj"))))
+    (build-system emacs-build-system)
+    (home-page "https://github.com/cstby/fixed-pitch-mode")
+    (synopsis
+     "Use a monospaced typeface for code and a proportional one elsewhere")
+    (description
+     "Fixed-pitch mode is an Emacs minor mode for setting a monospaced typeface.
+This allows you to set a proportional typeface for UI elements while keeping
+a monospaced typeface for code.")
+    (license license:gpl3+)))
+
 (define-public emacs-mixed-pitch
   (package
     (name "emacs-mixed-pitch")
@@ -19598,9 +19833,7 @@ perform regression test for packages that provide font-lock rules.")
       (arguments
        `(#:include '("\\.el$" "\\.rkt$")))
       (propagated-inputs
-       `(("emacs-faceup" ,emacs-faceup)
-         ("emacs-pos-tip" ,emacs-pos-tip)
-         ("emacs-s" ,emacs-s)))
+       (list emacs-faceup emacs-pos-tip emacs-s))
       (home-page "https://www.racket-mode.com/")
       (synopsis "Major mode for the Racket language")
       (description "@code{racket-mode} provides:
@@ -19630,7 +19863,7 @@ perform regression test for packages that provide font-lock rules.")
            "00q7l4a3c0ay6g5ff9bfa2qgkiswsyh4s6pqnpg0zpzhvv5710f5"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)))
+       (list emacs-dash))
       (home-page "https://github.com/mkcms/grep-context")
       (synopsis "Increase context in compilation and grep buffers")
       (description
@@ -19654,7 +19887,7 @@ compilation/grep buffers.  Works with @code{wgrep}, @code{ack}, @code{ag},
         (base32
          "08mjsi2f9s29fkk35cj1rrparjnkm836qmbfdwdz7y51f9varjbs"))))
     (propagated-inputs
-     `(("emacs-helm" ,emacs-helm)))
+     (list emacs-helm))
     (build-system emacs-build-system)
     (home-page "https://github.com/emacs-helm/helm-firefox")
     (synopsis "Display firefox bookmarks with Emacs Helm interface")
@@ -19721,7 +19954,7 @@ decrease the number at point.")
     (synopsis "Syntax highlighting of known Elisp symbols")
     (description "Minor mode providing syntax highlighting of known Emacs Lisp
 symbols.  Currently the code distinguishes Lisp functions, built-in functions,
-macros, faces and variables.  To enable call @code{highlight-defined-mode}. ")
+macros, faces and variables.  To enable call @code{highlight-defined-mode}.")
     (license license:gpl3+)))
 
 (define-public emacs-parinfer-mode
@@ -19738,9 +19971,7 @@ macros, faces and variables.  To enable call @code{highlight-defined-mode}. ")
        (sha256
         (base32 "0v97ncb0w1slb0x8861l3yr1kqz6fgw1fwl1z9lz6hh8p2ih34sk"))))
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-rainbow-delimiters" ,emacs-rainbow-delimiters)
-       ("emacs-company" ,emacs-company)))
+     (list emacs-dash emacs-rainbow-delimiters emacs-company))
     (build-system emacs-build-system)
     (home-page "https://github.com/DogLooksGood/parinfer-mode/")
     (synopsis "Lisp structure editing mode")
@@ -19763,7 +19994,7 @@ keep Parens and Indentation inline with one another.")
                (base32
                 "0hpq1h0p69c9k6hkd2mjpprx213sc5475q7pr2zpmwrjdzgcv70z"))))
     (propagated-inputs
-     `(("emacs-helm" ,emacs-helm)))
+     (list emacs-helm))
     (build-system emacs-build-system)
     (home-page "https://github.com/emacs-helm/helm-eww/")
     (synopsis "Helm interface to EWW")
@@ -19937,7 +20168,7 @@ Emacs minor mode to escape sequences in code.")
         (base32 "1qv4cqjy2s2d2bysbq10vq1axpbd8qc3jn1s1r81lxqkcja8zasa"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-page-break-lines" ,emacs-page-break-lines)))
+     (list emacs-page-break-lines))
     (arguments
      '(#:include '("\\.el$" "\\.txt$" "\\.png$")
        #:phases
@@ -19953,7 +20184,7 @@ Emacs minor mode to escape sequences in code.")
     (home-page "https://github.com/rakanalh/emacs-dashboard")
     (synopsis "Startup screen extracted from Spacemacs")
     (description "This package provides an extensible Emacs dashboard, with
-sections for bookmarks, projectil projects, org-agenda and more. ")
+sections for bookmarks, projectil projects, org-agenda and more.")
     (license license:gpl3+)))
 
 (define-public emacs-slime-company
@@ -19971,8 +20202,7 @@ sections for bookmarks, projectil projects, org-agenda and more. ")
         (base32 "05dnnc4ms5c9yp9h65k2gbkg3pw9k38nx5wzlwdlfr4shqmw54w0"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-slime" ,emacs-slime)
-       ("emacs-company" ,emacs-company)))
+     (list emacs-slime emacs-company))
     (home-page "https://company-mode.github.io")
     (synopsis "SLIME completion backend for @code{company-mode}")
     (description
@@ -20064,8 +20294,7 @@ scroll up to read the function name and then scroll down to original position.")
         (base32 "0gpib57f7xza04g3iyihw5v15hb7pncqsmvyggib902yvcxlkvqf"))))
     (build-system emacs-build-system)
     (native-inputs
-     `(("emacs-buttercup" ,emacs-buttercup)
-       ("git" ,git)))
+     (list emacs-buttercup git))
     (arguments
      `(#:tests? #t
        #:test-command '("buttercup" "-L" ".")))
@@ -20116,9 +20345,7 @@ on drag distance.")
         (base32 "0yp0hlrgcr6yy1xkjvfckys2k24x9xg7y6336ma61bdwn5lpv0x0"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-company" ,emacs-company)
-       ("emacs-know-your-http-well" ,emacs-know-your-http-well)
-       ("emacs-restclient" ,emacs-restclient)))
+     (list emacs-company emacs-know-your-http-well emacs-restclient))
     (home-page "https://github.com/iquiw/company-restclient")
     (synopsis "Company-mode completion back-end for restclient-mode")
     (description "@code{company-mode} back-end for
@@ -20158,7 +20385,7 @@ It provides auto-completion for HTTP methods and headers in
                  ((";;; Code:") ";;; Code:\n(require 'dash)"))
                #t)))))
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)))
+       (list emacs-dash))
       (home-page "https://github.com/nicferrier/emacs-noflet")
       (synopsis "Locally override functions")
       (description "@code{emacs-noflet} lets you locally override functions,
@@ -20169,7 +20396,7 @@ through the symbol: @command{this-fn}.")
 (define-public emacs-dumb-jump
   (package
     (name "emacs-dumb-jump")
-    (version "0.5.3")
+    (version "0.5.4")
     (source
      (origin
        (method git-fetch)
@@ -20178,10 +20405,10 @@ through the symbol: @command{this-fn}.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1njf60264snhxrd36m4z687lqfkis0p9mmrr7cf1c8l0lfdvawxi"))))
+        (base32 "18d2ll5wlll6pm909hiw8w9ijdbrjvy86q6ljzx8yyrjphgn0y1y"))))
     (build-system emacs-build-system)
     (arguments
-     `(#:tests? #f ; FIXME: Tests freeze when run.
+     `(#:tests? #f                      ; FIXME: Tests freeze when run.
        #:test-command '("ert-runner")
        #:phases
        (modify-phases %standard-phases
@@ -20189,16 +20416,11 @@ through the symbol: @command{this-fn}.")
            (lambda _
              ;; Setting the SHELL environment variable is required for the
              ;; tests to find sh.
-             (setenv "SHELL" (which "sh"))
-             #t)))))
+             (setenv "SHELL" (which "sh")))))))
     (native-inputs
-     `(("emacs-el-mock" ,emacs-el-mock)
-       ("emacs-noflet" ,emacs-noflet)
-       ("emacs-undercover" ,emacs-undercover)
-       ("ert-runner" ,emacs-ert-runner)))
+     (list emacs-el-mock emacs-ert-runner emacs-noflet emacs-undercover))
     (propagated-inputs
-     `(("emacs-f" ,emacs-f)
-       ("emacs-popup" ,emacs-popup)))
+     (list emacs-f emacs-popup))
     (home-page "https://github.com/jacktasia/dumb-jump")
     (synopsis "Jump to definition for multiple languages without configuration")
     (description "Dumb Jump is an Emacs \"jump to definition\" package with
@@ -20362,7 +20584,7 @@ matching regexps.")
         (base32
          "0l2nnlr3b6df1xn0qjf5d5ryy1wcs1jczyfy795vsasd5gm3g0xh"))))
     (build-system emacs-build-system)
-    (propagated-inputs `(("emacs-company" ,emacs-company)))
+    (propagated-inputs (list emacs-company))
     (home-page "https://github.com/dieggsy/esh-autosuggest")
     (synopsis "Fish-like autosuggestions in Eshell")
     (description
@@ -20421,7 +20643,7 @@ be changed by customizing the appropriate variables.")
        ;; Tests require to have two specific calendars on a test server.
        `(#:exclude '("^org-caldav-testsuite\\.el")))
       (propagated-inputs
-       `(("emacs-org" ,emacs-org)))
+       (list emacs-org))
       (home-page "https://github.com/dengste/org-caldav")
       (synopsis "Sync Org files with external calendars via the CalDAV protocol")
       (description
@@ -20444,8 +20666,7 @@ calendar.")
         (base32 "1zr67h0w49rsi84mgf6jdili28h8782q6vjl8za0iq1hcx9zqxyf"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-deferred" ,emacs-deferred)
-       ("emacs-request" ,emacs-request)))
+     (list emacs-deferred emacs-request))
     (home-page "https://github.com/egh/zotxt-emacs")
     (synopsis "Integrate Emacs with Zotero")
     (description "This package provides two integration features between Emacs
@@ -20453,46 +20674,10 @@ and the Zotero research assistant: Insertion of links to Zotero items into an
 Org-mode file, and citations of Zotero items in Pandoc Markdown files.")
     (license license:gpl3+)))
 
-(define-public emacs-evil-magit
-  (let ((commit "98c076fbeb6d2d7d71e02dc204ba3ad5d577abda")
-        (revision "5"))
-    (package
-      (name "emacs-evil-magit")
-      (version (git-version "0.4.2" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/emacs-evil/evil-magit")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32
-           "0b4iplxh3rmy8jadhf05pgksv1798d68d1jrhfry93jca8x9crxs"))))
-      (build-system emacs-build-system)
-      (propagated-inputs
-       `(("emacs-evil" ,emacs-evil)
-         ("magit" ,emacs-magit)))
-      (arguments
-       `(#:tests? #t
-         #:test-command '("emacs" "-Q" "-batch"
-                          "-L" "."
-                          "-l" "evil-magit-tests"
-                          "-f" "ert-run-tests-batch-and-exit")))
-      (home-page
-       "https://github.com/emacs-evil/evil-magit")
-      (synopsis "Evil-based key bindings for Magit")
-      (description
-       "This Emacs library configures Magit and Evil to play well with each other.
-For some background see @url{https://github.com/magit/evil-magit/issues/1}.
-See the README at @url{https://github.com/justbur/evil-magit} for a table
-describing the key binding changes.")
-      (license license:gpl3+))))
-
 (define-public emacs-evil-multiedit
   (package
     (name "emacs-evil-multiedit")
-    (version "1.3.9")
+    (version "1.4.3")
     (source
      (origin
        (method git-fetch)
@@ -20501,26 +20686,24 @@ describing the key binding changes.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32
-         "19h3kqylqzbjv4297wkzzxdmn9yxbg6z4ga4ssrqri90xs7m3rw3"))))
+        (base32 "08ycwss58zh2zikk79jfj074q78yjcd7vbjgv5ssqvws09x5rgfq"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-evil" ,emacs-evil)
-       ("emacs-iedit" ,emacs-iedit)))
+     (list emacs-evil emacs-iedit))
     (native-inputs
-     `(("emacs-ert-runner" ,emacs-ert-runner)))
+     (list emacs-ert-runner))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-before 'check 'fix-makefile
+         (add-before 'check 'fix-checks
            (lambda _
              (substitute* "Makefile"
                (("@cask exec ") ""))
-             #t)))
+             (substitute* "test/test-helper.el"
+               (("'\\(evil iedit\\)") "nil")))))
        #:tests? #t
        #:test-command '("make" "test")))
-    (home-page
-     "https://github.com/hlissner/evil-multiedit")
+    (home-page "https://github.com/hlissner/evil-multiedit")
     (synopsis "Multiple cursors for Evil mode")
     (description
      "This plugin was an answer to the lack of proper multiple cursor support
@@ -20546,9 +20729,9 @@ defaults.")
           (base32 "0p83p90faq1p02lmsfs7zrnky3cyzgy8z4m83a81r9kakjzhkrnb"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-evil" ,emacs-evil)))
+       (list emacs-evil))
       (native-inputs
-       `(("emacs-espuds" ,emacs-espuds)))
+       (list emacs-espuds))
       (home-page "https://github.com/gabesoft/evil-mc")
       (synopsis "Interactive search compatible with @code{multiple-cursors}")
       (description "This package can be used with @code{multiple-cursors} to
@@ -20571,7 +20754,7 @@ provide an incremental search that moves all fake cursors in sync.")
           (base32
            "1fxxfkinb0gq4p5b686r7z4jrkv98zfgh5z889zkjacncv8ibswn"))))
       (build-system emacs-build-system)
-      (propagated-inputs `(("emacs-evil" ,emacs-evil)))
+      (propagated-inputs (list emacs-evil))
       (home-page
        "https://github.com/Somelauw/evil-org-mode")
       (synopsis "Evil keybindings for Org mode")
@@ -20605,7 +20788,7 @@ Org-mode.  It features:
          "1wi70r56pd5z0x4dp4m58p9asq03j74kdm4fi9vai83vsl2z9amq"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-xml-rpc" ,emacs-xml-rpc)))
+     (list emacs-xml-rpc))
     (synopsis "Manipulate pastes from the Debian Pastezone")
     (description "Debpaste is an Emacs interface for the Debian Pastezone,
 allowing you to receive, post, and delete pastes.  It communicates with the
@@ -20639,15 +20822,14 @@ using XML-RPC methods fairly transparent to the Lisp code.")
 (define-public emacs-xpm
   (package
     (name "emacs-xpm")
-    (version "1.0.4")
+    (version "1.0.5")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/xpm-"
                            version ".tar"))
        (sha256
-        (base32
-         "075miyashh9cm3b0gk6ngld3rm8bfgnh4qxnhxmmvjgzf6a64grh"))))
+        (base32 "13p6s6b2v7h4bnwdkkrd1qz84jd7g2s18w0czhpxv6hvj9sqf5hx"))))
     (build-system emacs-build-system)
     (home-page "https://elpa.gnu.org/packages/xpm.html")
     (synopsis "XPM image editing mode for Emacs")
@@ -20671,7 +20853,7 @@ cohesion with the Emacs Way.")
         (base32
          "17lqip1i1rrsvxzz4bx9rqf1fvwd3hriwg3sj6qxmfc8pylnp37q"))))
     (build-system emacs-build-system)
-    (inputs `(("fish" ,fish)))
+    (inputs (list fish))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -20722,9 +20904,7 @@ try completing.  See @code{fish-completion-fallback-on-bash-p}.")
          "1yf6yipvhhna29mzaan5vb3d5qvbrkp2awr5diyf381mvxgk8akh"))))
     (build-system emacs-build-system)
     (inputs
-     `(("scrot" ,scrot)
-       ("imagemagick" ,imagemagick)
-       ("gifsicle" ,gifsicle)))
+     (list scrot imagemagick gifsicle))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -20794,10 +20974,9 @@ on-line service.")
          "1ci37w6ahnqrfpb284gjvxmimlf61sdxb9k192yy9q983cksv2hx"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-helm" ,emacs-helm)
-       ("emacs-company" ,emacs-company)))
+     (list emacs-helm emacs-company))
     (native-inputs
-     `(("emacs-ert-runner" ,emacs-ert-runner)))
+     (list emacs-ert-runner))
     (arguments
      `(#:tests? #t
        #:test-command '("ert-runner")))
@@ -20824,7 +21003,7 @@ framework.")
           (base32
            "1n89p56qwa243w1c85i5awnaf7piwjsvfi7nmnsrwm33hix5dknk"))))
       (build-system emacs-build-system)
-      (propagated-inputs `(("emacs-helm" ,emacs-helm)))
+      (propagated-inputs (list emacs-helm))
       (home-page "https://github.com/emacs-helm/helm-descbinds")
       (synopsis "Convenient @code{describe-bindings} with Helm")
       (description
@@ -20853,8 +21032,7 @@ you searched for and execute it, or view its documentation.")
            "0r1ai6xhzayyik30w2sx9n62bxxwm12vfmjspv0daqif9az8y3vg"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-helm" ,emacs-helm)
-         ("emacs-emms" ,emacs-emms)))
+       (list emacs-helm emacs-emms))
       (home-page
        "https://github.com/emacs-helm/helm-emms")
       (synopsis "Emms for Helm")
@@ -20877,8 +21055,7 @@ from @code{emms-source-file-default-directory}.")
         (base32 "0g4k01ps14bp2az8v6dcag9llg045k2b4kdis81xx4lvw76znr9v"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-helm" ,emacs-helm)
-       ("emacs-exwm" ,emacs-exwm)))
+     (list emacs-helm emacs-exwm))
     (home-page
      "https://github.com/emacs-helm/helm-exwm")
     (synopsis "Helm for EXWM buffers")
@@ -20906,9 +21083,7 @@ See @code{helm-exwm-switch-browser} for an example.")
            "1a2yfxhz04klwhcandqvfzysxp6b7bxyxx1xk1x3kds5hif5fkl4"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)
-         ("emacs-flycheck" ,emacs-flycheck)
-         ("emacs-helm" ,emacs-helm)))
+       (list emacs-dash emacs-flycheck emacs-helm))
       (home-page "https://github.com/yasuyk/helm-flycheck")
       (synopsis "Show Flycheck errors with Helm")
       (description
@@ -20918,7 +21093,7 @@ See @code{helm-exwm-switch-browser} for an example.")
 (define-public emacs-helm-ls-git
   (package
     (name "emacs-helm-ls-git")
-    (version "1.9.2")
+    (version "1.9.3")
     (source
      (origin
        (method git-fetch)
@@ -20927,9 +21102,9 @@ See @code{helm-exwm-switch-browser} for an example.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "07jgkc8csnc2hcg4csy07zy3wjbm4fbk4lqiy82rdlxp1vad25vi"))))
+        (base32 "1bqk0z6zd3aza7ibb8h0ghya5kid4m6z01gs7jf4sr6p49rzp7hd"))))
     (build-system emacs-build-system)
-    (propagated-inputs `(("emacs-helm" ,emacs-helm)))
+    (propagated-inputs (list emacs-helm))
     (home-page "https://github.com/emacs-helm/helm-ls-git")
     (synopsis "Helm interface for listing the files in a Git repository")
     (description
@@ -20966,8 +21141,7 @@ projects unrelated to current-buffer.
           (base32 "1lh0ahxdc5b2z18m9p30gwg8sbg33sjwkjr38p7h5xsm5fm7i0fz"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-helm" ,emacs-helm)
-         ("mu" ,mu)))
+       (list emacs-helm mu))
       (home-page
        "https://github.com/emacs-helm/helm-mu")
       (synopsis
@@ -20996,8 +21170,7 @@ e.g: @code{from:Peter to:Anne flag:attach search term}.")
          "19w24isddzamkikq17vbv3y7ha22i7wc09d2nqw1j0qwhrrfkng9"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-helm" ,emacs-helm)
-       ("emacs-password-store" ,emacs-password-store)))
+     (list emacs-helm emacs-password-store))
     (home-page "https://github.com/emacs-helm/helm-pass")
     (synopsis "Helm interface to pass, the standard Unix password manager")
     (description
@@ -21027,7 +21200,7 @@ provided by other Emacs packages dealing with pass:
           (base32
            "0v66wk9nh0raih4jhrzmmyi5lbysjnmbv791vm2230ffi2hmwxnd"))))
       (build-system emacs-build-system)
-      (inputs `(("imagemagick" ,imagemagick)))
+      (inputs (list imagemagick))
       (arguments
        `(#:phases
          (modify-phases %standard-phases
@@ -21080,7 +21253,7 @@ file.")
 (define-public emacs-packed
   (package
     (name "emacs-packed")
-    (version "3.0.3")
+    (version "3.0.4")
     (source
      (origin
        (method git-fetch)
@@ -21089,8 +21262,7 @@ file.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32
-         "06blk8parnpq3qi6y5628q3v59c8dyi41glb289a0l16248qwphk"))))
+        (base32 "1gpv2vaci0m48fzn0sy7iwl1mnkkqc30bf05jjrqlpn9kpbjyf1p"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/emacscollective/packed")
     (synopsis "Package manager agnostic Emacs Lisp package utilities")
@@ -21108,6 +21280,29 @@ and might also fail at times but makes it unnecessary to maintain
 package recipes.")
     (license license:gpl3+)))
 
+(define-public emacs-dpd
+  (package
+    (name "emacs-dpd")
+    (version "0.2.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://gitlab.com/lilyp/emacs-dpd")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0wrqmpfcqp87dr5blpskf9kvm9slvffldqfxx77n15gcw516zzc8"))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     (list emacs-packed))
+    (home-page "https://gitlab.com/lilyp/emacs-dpd")
+    (synopsis "Deliver packages to package.el")
+    (description
+     "This package provides tools for generating package-desc structures and
+feeding them to package.el library.")
+    (license license:gpl3+)))
+
 (define-public emacs-picpocket
   (let ((version "41")
         (commit "fa3a49f011b5ae139728548fec7375743f61c7c7"))
@@ -21162,7 +21357,7 @@ package recipes.")
            "080s96jkcw2p288sp1vgds91rgl693iz6hi2dv56p2ih0nnivwlg"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("mu" ,mu)))
+       (list mu))
       (home-page
        "https://gitlab.com/Ambrevar/mu4e-conversation")
       (synopsis
@@ -21193,7 +21388,7 @@ maps the thread tree.")
            "1lf30q6r8nz5cjzclbb9bbymsk2y75nskvb55hnjdv93gr3j0sik"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("gnupg" ,gnupg)))
+       (list gnupg))
       (home-page "https://elpa.gnu.org/packages/pinentry.html")
       (synopsis "GnuPG Pinentry server implementation")
       (description
@@ -21270,12 +21465,9 @@ them in your web browser.")
            "0injfpxzgfhmqalba845j5l5cdcxxqz43knhxwinf36g52nfabl0"))))
       (build-system emacs-build-system)
       (inputs
-       `(("emacs-dash" ,emacs-dash)
-         ("emacs-s" ,emacs-s)
-         ("emacs-ghub" ,emacs-ghub)))
+       (list emacs-dash emacs-s emacs-ghub))
       (native-inputs
-       `(("emacs-buttercup" ,emacs-buttercup)
-         ("emacs-undercover" ,emacs-undercover)))
+       (list emacs-buttercup emacs-undercover))
       (arguments
        `(#:tests? #t
          #:test-command '("buttercup" "-L" "test/github-review-test.el")))
@@ -21302,11 +21494,9 @@ accept and reject GitHub pull requests.")
           (base32
            "1vjhrq02l8gvdn2haygzq7277hnhjchs9xrfpcnh76gqip200gx4"))))
       (build-system emacs-build-system)
-      (inputs `(("ripgrep" ,ripgrep)))
+      (inputs (list ripgrep))
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)
-         ("emacs-s" ,emacs-s)
-         ("emacs-spinner" ,emacs-spinner)))
+       (list emacs-dash emacs-s emacs-spinner))
       (arguments
        `(#:phases
          (modify-phases %standard-phases
@@ -21366,8 +21556,7 @@ text in neighboring sections.")
          "1c3gay9fkikg7h46djw1nf86fzckmv7w1zbz5fbar20klcr12pbm"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-hydra" ,emacs-hydra)))
+     (list emacs-dash emacs-hydra))
     (home-page "https://github.com/joostkremers/pandoc-mode")
     (synopsis "Minor mode for interacting with Pandoc")
     (description "This package provides a Hydra menu for interacting with the
@@ -21392,8 +21581,7 @@ Pandoc, the document-conversion tool.")
            "1c71w9s34n0i7mm4njchxn6s3ri1y6mh3akgbg4nq41d42h8iap3"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("apply-refact" ,apply-refact)
-         ("hlint" ,hlint)))
+       (list apply-refact hlint))
       (home-page "https://github.com/mpickering/hlint-refactor-mode")
       (synopsis "Emacs bindings for @code{hlint}'s @code{--refactor} option")
       (description "This package applies refactoring suggestions from
@@ -21418,9 +21606,7 @@ Pandoc, the document-conversion tool.")
            "0l4bhyr9d8ljz1f0cfg1s2cjcmh6fiwbk5mdlvc7rrwz5hxc21is"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("ccls" ,ccls)
-         ("emacs-dash" ,emacs-dash)
-         ("emacs-lsp-mode" ,emacs-lsp-mode)))
+       (list ccls emacs-dash emacs-lsp-mode))
       (home-page "https://github.com/MaskRay/emacs-ccls")
       (synopsis "Emacs support for the @code{ccls} language server")
       (description "This package extends @code{lsp-mode} to work with @code{C}
@@ -21566,7 +21752,7 @@ and 'text viewing modes' respectively.")
                         "-l" "adoc-mode-test.el"
                         "-f" "ert-run-tests-batch-and-exit")))
     (propagated-inputs
-     `(("emacs-markup-faces" ,emacs-markup-faces)))
+     (list emacs-markup-faces))
     (home-page "https://github.com/sensorflo/adoc-mode/wiki")
     (synopsis "AsciiDoc mode for Emacs")
     (description "This package provides an Emacs major mode for editing AsciiDoc
@@ -21608,14 +21794,9 @@ files.  It focuses on highlighting the document to improve readability.")
                ((" \\[`str`\\]") " str"))
              #t)))))
     (native-inputs
-     `(("emacs-ert-runner" ,emacs-ert-runner)
-       ("emacs-undercover" ,emacs-undercover)))
+     (list emacs-ert-runner emacs-undercover))
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-f" ,emacs-f)
-       ("emacs-pos-tip" ,emacs-pos-tip)
-       ("emacs-rust-mode" ,emacs-rust-mode)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-dash emacs-f emacs-pos-tip emacs-rust-mode emacs-s))
     (build-system emacs-build-system)
     (home-page "https://github.com/racer-rust/emacs-racer")
     (synopsis "Racer support for Emacs")
@@ -21629,23 +21810,20 @@ docstring of the thing at point.")
 (define-public emacs-rust-mode
   (package
     (name "emacs-rust-mode")
-    (version "0.5.0")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/rust-lang/rust-mode")
-                    (commit version)))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1f3nnl0d7p9b5cv1bpm0hj898qmr2psxfvmqr61bh684z7fgc045"))))
+    (version "1.0.3")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/rust-lang/rust-mode")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "11fdxbv51anrjfdqqpgrqz2md9qkcn5y3524lzjippqi9i31lnjn"))))
     (build-system emacs-build-system)
     (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (replace 'check
-           (lambda _
-             (invoke "sh" "run_rust_emacs_tests.sh"))))))
+     `(#:tests? #false                  ;FIXME: phase fail with status 127
+       #:test-command '("make test")))
     (home-page "https://github.com/rust-lang/rust-mode")
     (synopsis "Major Emacs mode for editing Rust source code")
     (description "This package provides a major Emacs mode for editing Rust
@@ -21654,45 +21832,42 @@ source code.")
                    license:asl2.0))))
 
 (define-public emacs-rustic
-  ;; XXX: Upstream does not tag releases.  Version is extracted from main
-  ;; file.
-  (let ((commit "bbf129cd128105de51b6c242b2551094b8d8987d")
-        (revision "0"))
-    (package
-      (name "emacs-rustic")
-      (version (git-version "1.3" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/brotzeit/rustic")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32 "09dnlvi8kf683n6q3yp4gy9d4idiyg4x6rcij8d90cvygh8i30wd"))))
-      (build-system emacs-build-system)
-      (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)
-         ("emacs-f" ,emacs-f)
-         ("emacs-flycheck" ,emacs-flycheck)
-         ("emacs-lsp-mode" ,emacs-lsp-mode)
-         ("emacs-markdown-mode" ,emacs-markdown-mode)
-         ("emacs-project" ,emacs-project)
-         ("emacs-s" ,emacs-s)
-         ("emacs-spinner" ,emacs-spinner)
-         ("emacs-xterm-color" ,emacs-xterm-color)))
-      (arguments
-       ;; Tests require rust, cargo, rustfmt, and various crates to be
-       ;; vendored.
-       `(#:tests? #f
-         #:phases
-         (modify-phases %standard-phases
-           (add-before 'check 'set-without-cask
-             (lambda _
-               (setenv "WITHOUT_CASK" "1"))))))
-      (home-page "https://github.com/brotzeit/rustic")
-      (synopsis "Rust development environment for Emacs")
-      (description "Rustic is a fork of Rust mode.
+  (package
+    (name "emacs-rustic")
+    (version "2.5")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/brotzeit/rustic")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1jx8gzcm9ka2chpq51jx4mfa12wqrj2dsrpxwylfcb9qkqjncbn5"))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     (list emacs-dash
+           emacs-f
+           emacs-flycheck
+           emacs-lsp-mode
+           emacs-markdown-mode
+           emacs-project
+           emacs-rust-mode
+           emacs-s
+           emacs-spinner
+           emacs-xterm-color))
+    (arguments
+     ;; Tests require rust, cargo, rustfmt, and various crates to be
+     ;; vendored.
+     `(#:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'set-without-cask
+           (lambda _
+             (setenv "WITHOUT_CASK" "1"))))))
+    (home-page "https://github.com/brotzeit/rustic")
+    (synopsis "Rust development environment for Emacs")
+    (description "Rustic is a fork of Rust mode.
 In addition to its predecessor, it offers the following features:
 @itemize
 @item Flycheck integration,
@@ -21706,8 +21881,8 @@ In addition to its predecessor, it offers the following features:
 @item optional Rust inline documentation,
 @item etc.
 @end itemize")
-      (license (list license:expat
-                     license:asl2.0)))))
+    (license (list license:expat
+                   license:asl2.0))))
 
 (define-public emacs-ztree
   ;; Upstream provides no tag, but the commit below matches latest release.
@@ -21751,9 +21926,7 @@ text-tree applications inside GNU Emacs.  It consists of 2 subprojects:
            "06a1gbrq3qcfsn0kyv4i24x1xxfrrwqa3kgfj4xa4va88q2vqyb5"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)
-         ("emacs-helm" ,emacs-helm)
-         ("emacs-s" ,emacs-s)))
+       (list emacs-dash emacs-helm emacs-s))
       (home-page "https://github.com/tmalsburg/helm-org-contacts")
       (synopsis "Helm source for org-contacts")
       (description "This Helm source can be used to search contacts stored in
@@ -21802,8 +21975,7 @@ buffer displays recursive dir sizes.")
                 "19za6i96xrmczdh928n5ixd7j7pvy175sz1msaiwvdjwysjr8k51"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-s" ,emacs-s)
-       ("emacs-dash" ,emacs-dash)))
+     (list emacs-s emacs-dash))
     (home-page "https://github.com/stsquad/dired-rsync/")
     (synopsis "Support for rsync from Emacs dired buffers")
     (description "This package adds a single command @code{dired-rsync} which
@@ -21865,13 +22037,13 @@ buffers – other modes on the TODO list).
          "12ay02vk6bk77k33mhlqi41m03a77y80b15rj1dbh1n6jfrjwkfy"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-async" ,emacs-async)
-       ("emacs-dash" ,emacs-dash)
-       ("emacs-f" ,emacs-f)
-       ("emacs-hl-todo" ,emacs-hl-todo)
-       ("magit" ,emacs-magit)
-       ("emacs-pcre2el" ,emacs-pcre2el)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-async
+           emacs-dash
+           emacs-f
+           emacs-hl-todo
+           emacs-magit
+           emacs-pcre2el
+           emacs-s))
     (home-page "https://github.com/alphapapa/magit-todos")
     (synopsis "Show source files' TODOs (and FIXMEs, etc) in Magit status buffer")
     (description "This package displays keyword entries from source code
@@ -21948,7 +22120,7 @@ News homepage.")
            "0zkl9jkjbx0lmp9ylv4rqg1zwqibk053s4rp7s1h0i18nzk7vn8j"))))
       (build-system emacs-build-system)
       (inputs
-       `(("youtube-dl" ,youtube-dl)))
+       (list youtube-dl))
       (arguments
        `(#:phases
          (modify-phases %standard-phases
@@ -21985,24 +22157,22 @@ can be queued at any time.")
        (sha256
         (base32 "010arhvibyw50lqhsr8bm0vj3pzry1h1vgcvxnmyryirk3dv40jl"))))
     (build-system emacs-build-system)
-    (inputs
-     `(("youtube-dl" ,youtube-dl)))
-    (propagated-inputs
-     `(("async" ,emacs-async)
-       ("transient" ,emacs-transient)))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'configure
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((youtube-dl (assoc-ref inputs "youtube-dl")))
-               ;; .el is read-only in git.
-               (make-file-writable "ytdl.el")
-               ;; Specify the absolute file names of the various programs so
-               ;; that everything works out-of-the-box.
-               (emacs-substitute-variables "ytdl.el"
-                 ("ytdl-command" (string-append youtube-dl "/bin/youtube-dl")))
-               #t))))))
+             ;; .el is read-only in git.
+             (make-file-writable "ytdl.el")
+             ;; Specify the absolute file names of the various programs so
+             ;; that everything works out-of-the-box.
+             (emacs-substitute-variables "ytdl.el"
+               ("ytdl-command"
+                (search-input-file inputs "/bin/youtube-dl"))))))))
+    (inputs
+     (list youtube-dl))
+    (propagated-inputs
+     (list emacs-async emacs-transient))
     (home-page "https://gitlab.com/tuedachu/ytdl")
     (synopsis "Emacs interface for youtube-dl")
     (description
@@ -22038,7 +22208,7 @@ depending on the downloaded URL.")
                  (substitute* "ytel.el"
                    (("\"curl\"") (string-append "\"" curl "/bin/curl\"")))))))))
       (inputs
-       `(("curl" ,curl)))
+       (list curl))
       (home-page "https://github.com/grastello/ytel")
       (synopsis "Youtube front-end for Emacs")
       (description
@@ -22066,7 +22236,7 @@ as playing them in some video player, or downloading them.")
           (base32 "0nhgzfzq1bgpbdbljx5z2hzr8ia7ybsyvvr66yj4klz0zj97rghj"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-ytel" ,emacs-ytel)))
+       (list emacs-ytel))
       (home-page "https://github.com/xFA25E/ytel-show")
       (synopsis "Browse YouTube in Emacs")
       (description
@@ -22090,12 +22260,9 @@ and comments.")
          "0v4qad54r0z7dr7kg5lpfdsazi44qvrbybx9aciyl4w9grfajphb"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-esxml" ,emacs-esxml)
-       ("emacs-request" ,emacs-request)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-dash emacs-esxml emacs-request emacs-s))
     (inputs
-     `(("pandoc" ,pandoc)))
+     (list pandoc))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -22134,7 +22301,7 @@ inserts it as an Org entry instead of displaying it in a new buffer.")
            "09wmhpym516b81dfq8smdmysh1fn610dzlyvyl2rkx8600f0fizd"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-eimp" ,emacs-eimp)))
+       (list emacs-eimp))
       (home-page "https://github.com/walseb/blimp")
       (synopsis "Emacs wrapper around all Imagemagick commands")
       (description "Blimp (Bustling Image Manipulation Package) is a complete
@@ -22159,7 +22326,7 @@ execute its commands and resize images.")
          "14dd6p89pmpf1w3nx4f9mzm4sn2b64nicws436ck7pmp223pwciv"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("wordnet" ,wordnet)))
+     (list wordnet))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -22224,8 +22391,7 @@ files are easily readable and they work nicely with version control systems.")
        #:exclude '("^test/")
        #:tests? #f))
     (propagated-inputs
-     `(("f" ,emacs-f)
-       ("memoize" ,emacs-memoize)))
+     (list emacs-f emacs-memoize))
     (home-page "https://github.com/domtronn/all-the-icons.el")
     (synopsis "Collect icon fonts and propertize them within Emacs")
     (description
@@ -22241,6 +22407,32 @@ scaling of and anti aliasing of the icons.")
     (license
      (list license:expat license:gpl3+ license:silofl1.1 license:asl2.0))))
 
+(define-public emacs-all-the-icons-completion
+  ;; XXX: No tags. Extract version from keyword in main file.
+  (let ((commit "9e7d456b0934ecb568b6f05a8445e3f4ce32261f")
+        (revision "0"))
+    (package
+      (name "emacs-all-the-icons-completion")
+      (version (git-version "0.0.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/iyefrat/all-the-icons-completion")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "04bnmmd6lyx0p39sgymqvmcy7bk8mr7sikbpy49adxi7d2891ldg"))))
+      (build-system emacs-build-system)
+      (propagated-inputs (list emacs-all-the-icons))
+      (home-page "https://github.com/iyefrat/all-the-icons-completion")
+      (synopsis "Add icons to completion candidates")
+      (description "This package adds icons to completion candidates using the
+built-in completion metadata functions.  For example, with this package,
+@code{find-file} can display a file icon for each candidate based on the file
+type.")
+      (license license:gpl3+))))
+
 (define-public emacs-wttrin
   (let ((commit "df5427ce2a5ad4dab652dbb1c4a1834d7ddc2abc")
         (revision "1"))
@@ -22258,7 +22450,7 @@ scaling of and anti aliasing of the icons.")
                   "1ai655f10iayb4vw0ass2j3x83f4vsv90326mnywkzfl3sxd432z"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-xterm-color" ,emacs-xterm-color)))
+       (list emacs-xterm-color))
       (home-page "https://github.com/bcbcarl/emacs-wttrin")
       (synopsis "Frontend for weather web service @url{wttr.in}")
       (description "This package provides local weather information from
@@ -22328,9 +22520,7 @@ themes comes with the package.")
          "1q8r95zfrh0vxna5ml2pq9b9f66clfqcl4d2qy2aizkvzyxg6skl"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("dash" ,emacs-dash)
-       ("powerline" ,emacs-powerline)
-       ("s" ,emacs-s)))
+     (list emacs-dash emacs-powerline emacs-s))
     (home-page "https://github.com/TheBB/spaceline")
     (synopsis "Powerline theme from Spacemacs")
     (description "Spaceline provides Spacemacs' mode-line theme.
@@ -22419,8 +22609,7 @@ correctly.")
                 "0mrpjhpijdrq353fnfvdj9l9xfsz390qlcvifcair9732ma7i8l0"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-helm" ,emacs-helm)
-       ("emacs-slime" ,emacs-slime)))
+     (list emacs-helm emacs-slime))
     (home-page "https://github.com/emacs-helm/helm-slime")
     (synopsis "Helm for SLIME, the Superior Lisp Interaction Mode for Emacs")
     (description "Helm-SLIME defines a few new commands:
@@ -22448,8 +22637,7 @@ correctly.")
                 "06x8wyx1r0s7askkvlbklgz1cszv34qsvv3gryndw350smk1v8kx"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-helm" ,emacs-helm)
-       ("emacs-sly" ,emacs-sly)))
+     (list emacs-helm emacs-sly))
     (home-page "https://github.com/emacs-helm/helm-sly")
     (synopsis "Helm for SLY, a Common Lisp interaction mode for Emacs")
     (description "Helm-SLY defines a few new commands:
@@ -22538,18 +22726,18 @@ Emacs.")
                   "1scfv1502yg7x4bsl253cpr6plml1j4d437vci2ggs764sh3rcqq"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("a" ,emacs-a)
-         ("anaphora" ,emacs-anaphora)
-         ("dash" ,emacs-dash)
-         ("esxml" ,emacs-esxml)
-         ("f" ,emacs-f)
-         ("frame-purpose" ,emacs-frame-purpose)
-         ("ht" ,emacs-ht)
-         ("ov" ,emacs-ov)
-         ("rainbow-identifiers" ,emacs-rainbow-identifiers)
-         ("request" ,emacs-request)
-         ("s" ,emacs-s)
-         ("tracking" ,emacs-tracking)))
+       (list emacs-a
+             emacs-anaphora
+             emacs-dash
+             emacs-esxml
+             emacs-f
+             emacs-frame-purpose
+             emacs-ht
+             emacs-ov
+             emacs-rainbow-identifiers
+             emacs-request
+             emacs-s
+             emacs-tracking))
       (home-page "https://github.com/jgkamat/matrix-client-el")
       (synopsis "Matrix client for Emacs")
       (description "@code{matrix-client} is a simple chat UI to Matrix.org
@@ -22639,7 +22827,7 @@ functions to ensure they are called with the right arguments during testing.")
                 "03c223nczpbdkjmq69panhbsq2a0zj20w329jgj4c0zsj8m1a32a"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-ansi" ,emacs-ansi)))
+     (list emacs-ansi))
     (arguments
      `(#:tests? #t
        #:test-command '("emacs" "--batch" "--quick"
@@ -22668,8 +22856,7 @@ functions to ensure they are called with the right arguments during testing.")
                 (file-name (git-file-name name version))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("wordnet" ,wordnet)
-         ("emacs-adaptive-wrap" ,emacs-adaptive-wrap)))
+       (list wordnet emacs-adaptive-wrap))
       (synopsis "Major mode for WordNet")
       (description "This Emacs package provides an interface for
 @code{wordnet}.  Features include completion, if the query is not found
@@ -22719,7 +22906,7 @@ not have any relation with variables defined by @code{defvar},
               (file-name (git-file-name name version))))
     (build-system emacs-build-system)
     (inputs
-     `(("dash" ,emacs-dash)))
+     (list emacs-dash))
     (synopsis "Purpose-specific frames for Emacs")
     (description "@code{frame-purpose} makes it easy to open purpose-specific
 frames that only show certain buffers, e.g. by buffers’ major mode, their
@@ -22730,23 +22917,20 @@ other frame parameters.")
 
 (define-public emacs-arduino-mode
   (let ((commit "23ae47c9f28f559e70b790b471f20310e163a39b")
-        (revision "1")) ;no release yet
+        (revision "1"))                 ;no release yet
     (package
       (name "emacs-arduino-mode")
       (version (git-version "0" revision commit))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://github.com/stardiviner/arduino-mode")
-                      (commit commit)))
-                (sha256
-                 (base32
-                  "08vnbz9gpah1l93fzfd87aawrhcnh2v1kyfxgsn88pdwg8awz8rx"))
-                (file-name (git-file-name name version))))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/stardiviner/arduino-mode")
+               (commit commit)))
+         (sha256
+          (base32 "08vnbz9gpah1l93fzfd87aawrhcnh2v1kyfxgsn88pdwg8awz8rx"))
+         (file-name (git-file-name name version))))
       (build-system emacs-build-system)
-      (inputs
-       `(("spinner" ,emacs-spinner)
-         ("flycheck" ,emacs-flycheck)))
       (arguments
        `(#:phases
          (modify-phases %standard-phases
@@ -22757,8 +22941,9 @@ other frame parameters.")
              (lambda _
                (substitute* "ede-arduino.el"
                  (("defmethod") "cl-defmethod")
-                 (("defgeneric") "cl-defgeneric"))
-               #t)))))
+                 (("defgeneric") "cl-defgeneric")))))))
+      (inputs
+       (list emacs-flycheck emacs-spinner))
       (synopsis "Emacs major mode for editing Arduino sketches")
       (description "Emacs major mode for editing Arduino sketches.")
       (home-page "https://github.com/stardiviner/arduino-mode")
@@ -22779,9 +22964,7 @@ other frame parameters.")
               (file-name (git-file-name name version))))
     (build-system emacs-build-system)
     (native-inputs
-     `(("emacs-buttercup" ,emacs-buttercup)
-       ("emacs-lispy" ,emacs-lispy)
-       ("emacs-evil" ,emacs-evil)))
+     (list emacs-buttercup emacs-lispy emacs-evil))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -22815,10 +22998,7 @@ advice to be recorded and displayed.")
          (file-name (git-file-name name version))))
       (build-system emacs-build-system)
       (native-inputs
-       `(("emacs-buttercup" ,emacs-buttercup)
-         ("emacs-evil" ,emacs-evil)
-         ("emacs-which-key" ,emacs-which-key)
-         ("emacs-use-package" ,emacs-use-package)))
+       (list emacs-buttercup emacs-evil emacs-which-key emacs-use-package))
       (arguments
        `(#:tests? #t
          #:test-command '("buttercup" "-L" "test/test-general.el")))
@@ -22855,7 +23035,7 @@ leader key in vim), and much more.")
                 (file-name (git-file-name name version))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-request" ,emacs-request)))
+       (list emacs-request))
       (synopsis "Simplified and community-driven man pages for Emacs")
       (description "@code{emacs-tldr} allows the user to access tldr pages
 from within emacs.  The @code{tldr} pages are a community effort to simplify
@@ -22898,7 +23078,7 @@ or a window into some windows according to a layout recipe.")
                 (file-name (git-file-name name version))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-window-layout" ,emacs-window-layout)))
+       (list emacs-window-layout))
       (synopsis "Equilibrium Emacs Window Manager")
       (description "E2WM is a window manager for Emacs.  It enables to
 customize the place of pop-up window, how the windows are split, how the
@@ -22945,8 +23125,7 @@ programs can use this table component for the application UI.")
                 (file-name (git-file-name name version))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-names" ,emacs-names)
-         ("emacs-ctable" ,emacs-ctable)))
+       (list emacs-names emacs-ctable))
       (synopsis "Solve and submit LeetCode problems from within Emacs")
       (description "This package provides an Emacs interface to LeetCode
 allowing users to log in and solve problems of their choice using Emacs.")
@@ -22969,8 +23148,7 @@ allowing users to log in and solve problems of their choice using Emacs.")
                 (file-name (git-file-name name version))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-deferred" ,emacs-deferred)
-         ("emacs-ctable" ,emacs-ctable)))
+       (list emacs-deferred emacs-ctable))
       (synopsis "RPC stack for Emacs Lisp")
       (description "This program is an asynchronous RPC stack for Emacs.
 Using this RPC stack, Emacs can communicate with the peer process
@@ -22995,15 +23173,14 @@ asynchronous communications, the RPC response is fairly good.")
                 (file-name (git-file-name name version))))
       (build-system emacs-build-system)
       (inputs
-       `(("perl" ,perl)
-         ("perl-rpc-epc-service" ,perl-rpc-epc-service)
-         ("perl-dbi" ,perl-dbi)
-         ;; TODO: Adding support for perl-dbd-mysql and others would
-         ;; dramatically increase the closure size.  Make several packages?
-         ("perl-dbd-sqlite" ,perl-dbd-sqlite)))
+       (list perl
+             perl-rpc-epc-service
+             perl-dbi
+             ;; TODO: Adding support for perl-dbd-mysql and others would
+             ;; dramatically increase the closure size.  Make several packages?
+             perl-dbd-sqlite))
       (propagated-inputs
-       `(("emacs-e2wm" ,emacs-e2wm)
-         ("emacs-epc" ,emacs-epc)))
+       (list emacs-e2wm emacs-epc))
       (arguments
        `(#:include '("\\.el$" "\\.pl$")
          #:phases
@@ -23045,7 +23222,7 @@ DBI, and provides DB-accessing API and the simple management UI.")
                 (file-name (git-file-name name version))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-edbi" ,emacs-edbi)))
+       (list emacs-edbi))
       (synopsis "Open SQLite files in Emacs")
       (description "This package is a convenience wrapper for @command{edbi}
 to open SQLite databases.")
@@ -23093,9 +23270,7 @@ chevron marks.")
         (base32 "1bqlhkxg0faddhvxx909dq46dxdxk4mdyhdpww92dmzgxdpq38sx"))))
     (build-system emacs-build-system)
     (inputs
-     `(("emacs-company" ,emacs-company)
-       ("emacs-json-mode" ,emacs-json-mode)
-       ("emacs-mmm-mode" ,emacs-mmm-mode)))
+     (list emacs-company emacs-json-mode emacs-mmm-mode))
     (home-page "https://github.com/NixOS/nix-mode")
     (synopsis "Emacs major mode for editing Nix expressions")
     (description "@code{nixos-mode} provides an Emacs major mode for editing
@@ -23141,7 +23316,7 @@ music.")
          "0pyyvbzskr44dxbmlp3y0r6s459fd51cvwjmnjaqxfxflr5v891g"))))
     (build-system emacs-build-system)
     (inputs
-     `(("emacs-libmpdel" ,emacs-libmpdel)))
+     (list emacs-libmpdel))
     (home-page "https://gitea.petton.fr/mpdel/mpdel")
     (synopsis "Emacs user interface for Music Player Daemon (MPD)")
     (description
@@ -23183,16 +23358,14 @@ stored playlists.")
                  ("(require 'vterm-module nil t)"
                   `(module-load
                     ,(string-append (assoc-ref outputs "out")
-                                    "/lib/vterm-module.so"))))
-               #t))
+                                    "/lib/vterm-module.so"))))))
            (add-after 'build 'configure
              ;; Run cmake.
              (lambda* (#:key outputs #:allow-other-keys)
                ((assoc-ref cmake:%standard-phases 'configure)
                 #:outputs outputs
                 #:out-of-source? #f
-                #:configure-flags '("-DUSE_SYSTEM_LIBVTERM=ON"))
-               #t))
+                #:configure-flags '("-DUSE_SYSTEM_LIBVTERM=ON"))))
            (add-after 'configure 'make
              ;; Run make.
              (lambda* (#:key (make-flags '()) outputs #:allow-other-keys)
@@ -23201,13 +23374,10 @@ stored playlists.")
                ;; Move the file into /lib.
                (install-file
                 "vterm-module.so"
-                (string-append (assoc-ref outputs "out") "/lib"))
-               #t)))
+                (string-append (assoc-ref outputs "out") "/lib")))))
          #:tests? #f))
       (native-inputs
-       `(("cmake" ,cmake-minimal)
-         ("libtool" ,libtool)
-         ("libvterm" ,libvterm)))
+       (list cmake-minimal libtool libvterm))
       (home-page "https://github.com/akermu/emacs-libvterm")
       (synopsis "Emacs libvterm integration")
       (description "This package implements a bridge to @code{libvterm} to
@@ -23231,7 +23401,7 @@ display a terminal in an Emacs buffer.")
          (sha256
           (base32 "0r9n23wg9cfy10h5f9zqr8jpkvw34f9rylri3nxq870awjab7rqi"))))
       (build-system emacs-build-system)
-      (propagated-inputs `(("emacs-vterm" ,emacs-vterm)))
+      (propagated-inputs (list emacs-vterm))
       (home-page "https://github.com/jixiuf/vterm-toggle")
       (synopsis "Toggle between a vterm buffer and other buffers")
       (description
@@ -23257,7 +23427,7 @@ a vterm buffer and back again.")
           (base32
            "1ja06pv007cmzjjgka95jlg31k7d29jrih1yxyblsxv85s9sg21q"))))
       (build-system emacs-build-system)
-      (propagated-inputs `(("emacs-s" ,emacs-s)))
+      (propagated-inputs (list emacs-s))
       (home-page "https://github.com/jorenvo/simple-mpc")
       (synopsis "Simple Emacs frontend to mpc")
       (description "This package provides an Emacs major mode which acts as a
@@ -23303,7 +23473,7 @@ indentation and a command to plot the file.")
                   "03gsyn95dlmsn15bl353bphi3qy7ccn5bss3f7n97kf38bllh0yf"))))
       (build-system emacs-build-system)
       (native-inputs
-       `(("emacs-faceup" ,emacs-faceup)))
+       (list emacs-faceup))
       (arguments
        `(#:include (cons "^admin\\/" %default-include)))
       (home-page "https://github.com/Lindydancer/cmake-font-lock")
@@ -23312,10 +23482,55 @@ indentation and a command to plot the file.")
 according to their use.")
       (license license:gpl3+))))
 
+(define-public emacs-dtache
+  (package
+    (name "emacs-dtache")
+    (version "0.4")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://gitlab.com/niklaseklund/dtache")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1hndv0qzibkc4177lkam30j8cgvzxd8r60v3dnqn2bmrgxw04j6b"))))
+    (arguments
+     (list
+      #:tests? #t
+      #:test-command #~(list "ert-runner")
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-before 'install 'install-dtache-env
+            (lambda _
+              (install-file "dtache-env" (string-append #$output "/bin"))))
+          (add-after 'unpack 'configure
+            (lambda* (#:key inputs #:allow-other-keys)
+              (make-file-writable "dtache.el")
+              (emacs-substitute-variables "dtache.el"
+                ("dtache-env" (string-append #$output
+                                             "/bin/dtache-env"))
+                ("dtache-dtach-program" (search-input-file
+                                         inputs
+                                         "/bin/dtach"))
+                ("dtache-shell-program" (search-input-file
+                                         inputs
+                                         "/bin/bash"))))))))
+    (build-system emacs-build-system)
+    (native-inputs (list emacs-ert-runner))
+    (inputs (list dtach))
+    (home-page "https://gitlab.com/niklaseklund/dtache")
+    (synopsis "Run and interact with detached shell commands")
+    (description
+     "The dtache package allows users to run shell commands
+detached from Emacs.  These commands are launched in sessions, using the
+program dtach.")
+    (license license:gpl3+)))
+
 (define-public emacs-dtrt-indent
   (package
     (name "emacs-dtrt-indent")
-    (version "1.4")
+    (version "1.6")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -23324,7 +23539,7 @@ according to their use.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "11r68sh3yrrfib7pixnazispwsffrygmgplffrv8qq57xrqzyxih"))))
+                "1kad2inc9k2z65if26vfiw098yklzxdx9fw8a6yicb87jgc1cz36"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/jscheid/dtrt-indent")
     (synopsis "Minor mode that guesses the indentation offset")
@@ -23349,11 +23564,9 @@ convenient to edit foreign files.")
                 "0jgiawdnzjlrpx2j1y6djwbqncdpmyfd31q1qf1890049y8ppxnb"))))
     (build-system emacs-build-system)
     (native-inputs
-     `(("emacs-el-mock" ,emacs-el-mock)
-       ("ert-runner" ,emacs-ert-runner)))
+     (list emacs-el-mock emacs-ert-runner))
     (propagated-inputs
-     `(("emacs-f" ,emacs-f)
-       ("magit" ,emacs-magit)))
+     (list emacs-f emacs-magit))
     (home-page "https://github.com/canatella/repo-el")
     (synopsis "Emacs interface for the Google Repo tool")
     (description "This package provides integration of the Google Repo tool
@@ -23383,16 +23596,16 @@ buffer and launches Magit from the status buffer for the project at point.")
 (define-public emacs-alect-themes
   (package
     (name "emacs-alect-themes")
-    (version "0.9")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/alezost/alect-themes")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0nffxpdm0sa7bynwi0rmlwpc4qmvbda5ankhzz7fmk4ap9fkjxv9"))))
+    (version "0.10")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/alezost/alect-themes")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "190clnm5x4hpzrq2wp18vxg6614ly3ciyv0y1sm9rfr9w9z5i0ya"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/alezost/alect-themes")
     (synopsis "Low contrast, light, dark and black color theme for Emacs")
@@ -23440,7 +23653,7 @@ file for Google C and C++ style.")
                   "1jdkgvd5xy9hl5q611jwah2n05abjp7qcy9sj4k1z11x0ii62b6p"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-paredit" ,emacs-paredit)))
+       (list emacs-paredit))
       (home-page "http://www.foldr.org/~michaelw/emacs/redshank/")
       (synopsis "Common Lisp Editing Extensions (for Emacs)")
       (description "Redshank is a collection of code-wrangling Emacs macros
@@ -23474,7 +23687,7 @@ recursively.  The results are cached for speed.")
 (define-public emacs-orgit
   (package
     (name "emacs-orgit")
-    (version "1.7.1")
+    (version "1.7.2")
     (home-page "https://github.com/magit/orgit")
     (source (origin
               (method git-fetch)
@@ -23484,11 +23697,10 @@ recursively.  The results are cached for speed.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0mbcr98xq3zim01dk1fbyc1vajnjwx90k62mygv343rhrd05v44m"))))
+                "0lc2lk9c7b92c1cna2pyb88x9fa4bydcqkp4zcn0khpdv54fmszq"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-magit" ,emacs-magit)))
+     (list emacs-dash emacs-magit))
     (synopsis "Support for Org links to Magit buffers")
     (description "This package defines several Org link types, which can be
 used to link to certain Magit buffers.  Use the command
@@ -23512,7 +23724,7 @@ Later you can insert it into an Org buffer using the command
         (base32 "0h1cxqqf0hixh25j679r57bq9dv0b20icf268wbnsim5xp88ngf8"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-s" ,emacs-s)))
+     (list emacs-s))
     (home-page "https://github.com/DarwinAwardWinner/amx")
     (synopsis "Alternative M-x interface for Emacs")
     (description "Amx is an alternative interface for M-x in Emacs.  It
@@ -23601,15 +23813,15 @@ constant expressions.")
        (sha256
         (base32 "0s57dq04d97dvrbxzicyk5z9f1mn8gf9w4nbgrxd9dnjqz335173"))))
     (inputs
-     `(("emacs-undercover" ,emacs-undercover)))
-    (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-docker-tramp" ,emacs-docker-tramp)
-       ("emacs-json-mode" ,emacs-json-mode)
-       ("emacs-magit-popup" ,emacs-magit-popup)
-       ("emacs-s" ,emacs-s)
-       ("emacs-tablist" ,emacs-tablist)
-       ("emacs-transient" ,emacs-transient)))
+     (list emacs-undercover))
+    (propagated-inputs
+     (list emacs-dash
+           emacs-docker-tramp
+           emacs-json-mode
+           emacs-magit-popup
+           emacs-s
+           emacs-tablist
+           emacs-transient))
     (arguments `(#:tests? #false))      ;no tests
     (build-system emacs-build-system)
     (home-page "https://github.com/Silex/docker.el")
@@ -23633,7 +23845,7 @@ constant expressions.")
          "09pd8mfa45fy95mdg52fsafj3d1d5l52rskmw6q5np59dyzwch1b"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-s" ,emacs-s)))
+     (list emacs-s))
     (home-page "https://github.com/spotify/dockerfile-mode")
     (synopsis "Major mode for editing Dockerfile")
     (description
@@ -23667,12 +23879,12 @@ the standard @code{Dockerfile} file format.")
                          (install-file f "."))
                        (find-files "clients/" "\\.el$")))))))
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-f" ,emacs-f)
-       ("emacs-ht" ,emacs-ht)
-       ("emacs-hydra" ,emacs-hydra)
-       ("emacs-markdown-mode" ,emacs-markdown-mode)
-       ("emacs-spinner" ,emacs-spinner)))
+     (list emacs-dash
+           emacs-f
+           emacs-ht
+           emacs-hydra
+           emacs-markdown-mode
+           emacs-spinner))
     (home-page "https://emacs-lsp.github.io/lsp-mode/")
     (synopsis "Emacs client and library for the Language Server Protocol")
     (description
@@ -23697,8 +23909,7 @@ Projectile.")
         (base32 "05ivqa5900139jzjhwc3nggwznhm8564dz4ydcxym2ddd63571k0"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-lsp-mode" ,emacs-lsp-mode)
-       ("emacs-treemacs" ,emacs-treemacs)))
+     (list emacs-lsp-mode emacs-treemacs))
     (home-page "https://github.com/emacs-lsp/lsp-treemacs")
     (synopsis "Integration between LSP mode and treemacs")
     (description
@@ -23721,12 +23932,9 @@ and implementation of treeview controls using treemacs as a tree renderer.")
         (base32 "1zczmcv8562lachkvcwy6njn7zkgny08iznpmrx821wr8mh52wnn"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-bui" ,emacs-bui)
-       ("emacs-lsp-mode" ,emacs-lsp-mode)
-       ("emacs-posframe" ,emacs-posframe)
-       ("emacs-lsp-treemacs" ,emacs-lsp-treemacs)))
+     (list emacs-bui emacs-lsp-mode emacs-posframe emacs-lsp-treemacs))
     (home-page "https://emacs-lsp.github.io/dap-mode")
-    (synopsis "Emacs client/library for Debug Adapter Protocol ")
+    (synopsis "Emacs client/library for Debug Adapter Protocol")
     (description
      "Dap mode is an Emacs client/library for Debug Adapter
 Protocol (DAP), a wire protocol for communication between client and
@@ -23737,51 +23945,49 @@ Debug server.")
 (define-public emacs-pfuture
   (package
     (name "emacs-pfuture")
-    (version "1.9")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/Alexander-Miller/pfuture")
-                    (commit version)))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1chpin5277vbl2xvsl04pzzk7a9dbcvclibm2496gz6yvd19pwsf"))))
+    (version "1.10.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/Alexander-Miller/pfuture")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0cks18fwir8h9b35ryz2yr5rligv1da2iqkqz0fcb5dx2a4fxwjj"))))
     (build-system emacs-build-system)
-    (home-page
-     "https://github.com/Alexander-Miller/pfuture")
+    (home-page "https://github.com/Alexander-Miller/pfuture")
     (synopsis "Simple wrapper around asynchronous processes for Emacs")
     (description "This package provides a simple wrapper around asynchronous
-processes for Emacs")
+processes for Emacs.")
     (license license:gpl3+)))
 
 (define-public emacs-treemacs
   (package
     (name "emacs-treemacs")
-    (version "2.9.1")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/Alexander-Miller/treemacs")
-                    (commit version)))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1c75b4ni8mxf58b6z9n9f7mij54aial0pbsnp390wcry57z2c77l"))))
+    (version "2.9.5")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/Alexander-Miller/treemacs")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "01qrprxfwmdzak77k2qa9fc2kb4hxddbvj30avqglj9sjaid9wmq"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-ace-window" ,emacs-ace-window)
-       ("emacs-dash" ,emacs-dash)
-       ("emacs-f" ,emacs-f)
-       ("emacs-ht" ,emacs-ht)
-       ("emacs-hydra" ,emacs-hydra)
-       ("emacs-pfuture" ,emacs-pfuture)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-ace-window
+           emacs-dash
+           emacs-f
+           emacs-ht
+           emacs-hydra
+           emacs-pfuture
+           emacs-s))
     (native-inputs
-     `(("emacs-buttercup" ,emacs-buttercup)
-       ("emacs-el-mock" ,emacs-el-mock)))
+     (list emacs-buttercup emacs-el-mock))
     (inputs
-     `(("python" ,python)))
+     (list python))
     (arguments
      `(#:tests? #t
        #:test-command '("make" "-C" "../.." "test")
@@ -23810,7 +24016,7 @@ processes for Emacs")
                (chmod "src/elisp/treemacs-customization.el" #o644)
                (emacs-substitute-variables "src/elisp/treemacs-customization.el"
                  ("treemacs-python-executable"
-                  (string-append (assoc-ref inputs "python") "/bin/python3")))
+                  (search-input-file inputs "/bin/python3")))
                (chmod "src/elisp/treemacs-async.el" #o644)
                (substitute* "src/elisp/treemacs-async.el"
                  (("src/scripts") (string-append "share/" ,name "/scripts"))))))
@@ -23839,9 +24045,11 @@ utilities.")
     (name "emacs-treemacs-extra")
     (propagated-inputs
      `(,@(package-propagated-inputs emacs-treemacs)
+       ("emacs-all-the-icons" ,emacs-all-the-icons)
        ("emacs-evil" ,emacs-evil)
        ("emacs-magit" ,emacs-magit)
        ("emacs-projectile" ,emacs-projectile)
+       ("emacs-perspective" ,emacs-perspective)
        ("emacs-persp-mode" ,emacs-persp-mode)))
     (arguments
      (substitute-keyword-arguments
@@ -23896,7 +24104,7 @@ utilities.")
                (install-file "libyaml-core.so"
                              (string-append (assoc-ref outputs "out") "/lib"))
                #t)))))
-      (native-inputs `(("libyaml" ,libyaml)))
+      (native-inputs (list libyaml))
       (home-page "https://github.com/syohex/emacs-libyaml")
       (synopsis "Libyaml bindings for Emacs")
       (description
@@ -23919,14 +24127,14 @@ files in Elisp.")
                 "1h0hqgjpk5mbylma1fkva0vx45achf0k7ab2c5y8a2449niww90h"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dap-mode" ,emacs-dap-mode)
-       ("emacs-lsp-mode" ,emacs-lsp-mode)
-       ("emacs-markdown-mode" ,emacs-markdown-mode)
-       ("emacs-dash" ,emacs-dash)
-       ("emacs-f" ,emacs-f)
-       ("emacs-ht" ,emacs-ht)
-       ("emacs-request" ,emacs-request)
-       ("emacs-treemacs" ,emacs-treemacs)))
+     (list emacs-dap-mode
+           emacs-lsp-mode
+           emacs-markdown-mode
+           emacs-dash
+           emacs-f
+           emacs-ht
+           emacs-request
+           emacs-treemacs))
     (home-page "https://github.com/emacs-lsp/lsp-java/")
     (synopsis "Java support for lsp-mode")
     (description "Emacs Java IDE using Eclipse JDT Language Server.")
@@ -23947,10 +24155,7 @@ files in Elisp.")
                 "00yirx6qzlb8fv8rd53zaw93nw72z3br40rb16scdqj1v20qsp47"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-lsp-mode" ,emacs-lsp-mode)
-       ("emacs-markdown-mode" ,emacs-markdown-mode)
-       ("emacs-flycheck" ,emacs-flycheck)))
+     (list emacs-dash emacs-lsp-mode emacs-markdown-mode emacs-flycheck))
     (home-page "https://github.com/emacs-lsp/lsp-ui")
     (synopsis "User interface extensions for @code{lsp-mode}")
     (description
@@ -23975,7 +24180,7 @@ and code peeking.")
                   "0rbizis73n1w5ig07fj1han74chbc1zpbp5bn37rj0gz608aqka8"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-lsp-mode" ,emacs-lsp-mode)))
+       (list emacs-lsp-mode))
       (home-page "https://github.com/phenix3443/lsp-lua-emmy/")
       (synopsis "Lua support in @code{lsp-mode} client for Emacs")
       (description "This package provides a Lua language support in
@@ -23997,9 +24202,7 @@ and code peeking.")
         (base32 "0nb9ypa8hyx7i38rbywh8hn2i5f9l2l567hvdr9767fk279yr97n"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-ivy" ,emacs-ivy)
-       ("emacs-lsp-mode" ,emacs-lsp-mode)))
+     (list emacs-dash emacs-ivy emacs-lsp-mode))
     (home-page "https://github.com/emacs-lsp/lsp-ivy")
     (synopsis "Provide LSP-enhanced completion for symbols")
     (description
@@ -24022,9 +24225,7 @@ workspaces with a LSP-compliant server running.")
                 "1vq3qpqm3ndqyvf5bk8qhqcr60x9ykc0ipk2a43rr3yjm4z1b6s9"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-helm" ,emacs-helm)
-       ("emacs-lsp-mode" ,emacs-lsp-mode)
-       ("emacs-dash" ,emacs-dash)))
+     (list emacs-helm emacs-lsp-mode emacs-dash))
     (home-page "https://github.com/emacs-lsp/helm-lsp")
     (synopsis "Provide LSP-enhanced completion for symbols")
     (description
@@ -24048,8 +24249,7 @@ workspaces with a LSP-compliant server running.")
                 "1k038dbdpaa411gl4071x19fklhnizhr346plxw23lsnxir9dhqc"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-helm" ,emacs-helm)
-       ("emacs-notmuch" ,emacs-notmuch)))
+     (list emacs-helm emacs-notmuch))
     (synopsis "Search emails with Emacs Notmuch and Helm")
     (description
      "This package can be used to search emails in Emacs, searching result
@@ -24060,19 +24260,19 @@ real search.")
 (define-public emacs-notmuch-maildir
   (package
     (name "emacs-notmuch-maildir")
-    (version "0.2.0")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://git.sr.ht/~tarsius/notmuch-maildir")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0pmikf1djkr07067nkgmdcxyn7l7ibswx6qlnai8v1v51f9h1g9q"))))
+    (version "0.2.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://git.sr.ht/~tarsius/notmuch-maildir")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1fqnx6hhg0cqj82yjpl7llg6vvppc3y8q9k6g67mqr7z3712bw0x"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-notmuch" ,emacs-notmuch)))
+     (list emacs-notmuch))
     (home-page "https://git.sr.ht/~tarsius/notmuch-maildir")
     (synopsis "Visualize maildirs as a tree")
     (description
@@ -24096,8 +24296,7 @@ buffer''.")
                 "1x4wnsshf9h10mp51x92vs5rxw5had4gmw6zz4f53czx1ymcv16a"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-s" ,emacs-s)
-       ("emacs-dash" ,emacs-dash)))
+     (list emacs-s emacs-dash))
     (synopsis "Convert keyboard macros to Emacs Lisp")
     (description
      "This package displays keyboard macros or latest interactive commands
@@ -24107,16 +24306,16 @@ as Emacs Lisp.")
 (define-public emacs-transient
   (package
     (name "emacs-transient")
-    (version "0.3.6")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/magit/transient")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "10k9dzs8y6i0rfckclxm5n3maylmh95993n5dvrs8rbmlcpmihvy"))))
+    (version "0.3.7")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/magit/transient")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0c7wbd0j0b802bzdpdkrx2q7wm7b9s56rk554dnadkpywhmdiqwn"))))
     (build-system emacs-build-system)
     (arguments
      `(#:tests? #f                      ;no test suite
@@ -24132,9 +24331,9 @@ as Emacs Lisp.")
            (lambda _
              (chdir "lisp"))))))
     (native-inputs
-     `(("texinfo" ,texinfo)))
+     (list texinfo))
     (propagated-inputs
-     `(("dash" ,emacs-dash)))
+     (list emacs-dash))
     (home-page "https://magit.vc/manual/transient")
     (synopsis "Transient commands in Emacs")
     (description "Taking inspiration from prefix keys and prefix arguments
@@ -24147,7 +24346,7 @@ commands (a prefix and a suffix) we prefer to call it just a \"transient\".")
 (define-public emacs-forge
   (package
      (name "emacs-forge")
-     (version "0.2.1")
+     (version "0.3.0")
      (source
       (origin
         (method git-fetch)
@@ -24156,20 +24355,8 @@ commands (a prefix and a suffix) we prefer to call it just a \"transient\".")
               (commit (string-append "v" version))))
         (file-name (git-file-name name version))
         (sha256
-         (base32
-          "0j28vc0q1h36pk0y2nidnlsc2y7n0vpfrd8civiv1zp8z0jwfyc9"))))
+         (base32 "15zm5azgl8gyd91i40a00ih4s2iwg1r8007n2gcfnmi6m4b7s0ak"))))
      (build-system emacs-build-system)
-     (native-inputs
-      `(("texinfo" ,texinfo)))
-     (propagated-inputs
-      `(("emacs-closql" ,emacs-closql)
-        ("emacs-dash" ,emacs-dash)
-        ("emacs-emacsql-sqlite" ,emacs-emacsql)
-        ("emacs-ghub" ,emacs-ghub)
-        ("emacs-let-alist" ,emacs-let-alist)
-        ("emacs-magit" ,emacs-magit)
-        ("emacs-markdown-mode" ,emacs-markdown-mode)
-        ("emacs-transient" ,emacs-transient)))
      (arguments
       `(#:tests? #f                     ;no tests
         #:phases
@@ -24183,6 +24370,18 @@ commands (a prefix and a suffix) we prefer to call it just a \"transient\".")
           (add-after 'build-info-manual 'chdir-lisp
             (lambda _
               (chdir "lisp"))))))
+     (native-inputs
+      (list texinfo))
+     (propagated-inputs
+      (list emacs-closql
+            emacs-dash
+            emacs-emacsql
+            emacs-ghub
+            emacs-let-alist
+            emacs-magit
+            emacs-markdown-mode
+            emacs-transient
+            emacs-yaml))
      (home-page "https://github.com/magit/forge/")
      (synopsis "Access Git forges from Magit")
      (description "Work with Git forges, such as Github and Gitlab, from the
@@ -24204,8 +24403,7 @@ comfort of Magit and the rest of Emacs.")
                  (base32
                   "1lfnh1glg6al677m7ci0x8g5wjdhjxlfl3nv1f1ppsw4dpnwsj9b"))))
       (propagated-inputs
-       `(("emacs-hydra" ,emacs-hydra)
-         ("emacs-transient" ,emacs-transient)))
+       (list emacs-hydra emacs-transient))
       (build-system emacs-build-system)
       (home-page "https://github.com/jojojames/matcha/")
       (synopsis "Collection of hydras with a generic interface to launch them")
@@ -24307,8 +24505,7 @@ unescaping of quotes.")
           (base32 "1kjms9d2c98ffd1qxs879qhg0n4jzic0r5kni9y4gz3v09ww8zms"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-flycheck" ,emacs-flycheck)
-         ("emacs-let-alist" ,emacs-let-alist)))
+       (list emacs-flycheck emacs-let-alist))
       (home-page "https://github.com/bsermons/flycheck-elm")
       (synopsis "Flycheck support for the Elm language")
       (description "Flycheck Elm adds Flycheck support for Elm language.")
@@ -24332,10 +24529,7 @@ unescaping of quotes.")
            "10pgsbagq6qj4mshq5sypv0q0khck92b30sc793b4g1pfpsxvgjn"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)
-         ("emacs-flycheck" ,emacs-flycheck)
-         ("emacs-haskell-mode" ,emacs-haskell-mode)
-         ("emacs-let-alist" ,emacs-let-alist)))
+       (list emacs-dash emacs-flycheck emacs-haskell-mode emacs-let-alist))
       (arguments
        `(#:include '("\\.el$" "\\.hs$")))
       (home-page "https://github.com/flycheck/flycheck-haskell")
@@ -24362,14 +24556,10 @@ buffers.")
            "08b25y3raz0p98zxk9xdd8nj9shqd6mzrqhbq1gg4cwsmi7h7ly1"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)
-         ("emacs-s" ,emacs-s)
-         ("emacs-js2-mode" ,emacs-js2-mode)
-         ("emacs-yasnippet" ,emacs-yasnippet)
-         ("emacs-multiple-cursors" ,emacs-multiple-cursors)))
+       (list emacs-dash emacs-s emacs-js2-mode emacs-yasnippet
+             emacs-multiple-cursors))
       (native-inputs
-       `(("emacs-buttercup" ,emacs-buttercup)
-         ("emacs-espuds" ,emacs-espuds)))
+       (list emacs-buttercup emacs-espuds))
       (home-page "https://github.com/magnars/js2-refactor.el")
       (synopsis "JavaScript refactoring in Emacs")
       (description "This package provides various refactoring functions for
@@ -24465,8 +24655,7 @@ parent directory using @code{Eshell}.")
           (base32 "0fn8c4hqblfjvcpg68kj2dmdjqsdnxddqbzgvakl43zckjg8pi01"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-helm" ,emacs-helm)
-         ("emacs-ivy" ,emacs-ivy)))
+       (list emacs-helm emacs-ivy))
       (home-page "https://github.com/jwiegley/springboard")
       (synopsis "Change the Emacs default directory quickly")
       (description
@@ -24493,10 +24682,9 @@ done using Helm, Ido or Ivy.")
            "1z7xkbrqznk6ni687qqknp8labcyhl8y6576hjfri89fn21385y9"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)))
+       (list emacs-dash))
       (native-inputs
-       `(("emacs-ert-runner" ,emacs-ert-runner)
-         ("emacs-undercover" ,emacs-undercover)))
+       (list emacs-ert-runner emacs-undercover))
       (arguments
        `(#:tests? #t
          #:test-command '("ert-runner")))
@@ -24507,25 +24695,24 @@ Lisp functions that call themselves in tail position.")
       (license license:gpl3+))))
 
 (define-public emacs-equake
-  (let ((commit "7eddc025ee61b83029363e22219af228b8c20681")
-        (revision "2"))
+  ;; Upstream provides no tagged releases, but the commit below matches an
+  ;; exact release.
+  (let ((commit "4d6ef75a4d91ded22caad220909518ccb67b7b87"))
     (package
       (name "emacs-equake")
-      (version (git-version "0.85" revision commit))
+      (version "0.985")
       (source
        (origin
          (method git-fetch)
          (uri (git-reference
-               (url "https://gitlab.com/emacsomancer/equake/")
+               (url "https://gitlab.com/emacsomancer/equake")
                (commit commit)))
          (file-name (git-file-name name version))
          (sha256
-          (base32
-           "1c55pbqak3d02sw6z1139baxzy401b90g0gxzcc3j6sgplz6sc6w"))))
+          (base32 "11xfr71y78idcn461p4pz7b0k01nhz15cyl97bjqq6ii5xhbhvdx"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)
-         ("emacs-tco-el" ,emacs-tco-el)))
+       (list emacs-dash))
       (home-page "https://gitlab.com/emacsomancer/equake/")
       (synopsis "Drop-down console for @code{Eshell} and terminal emulators")
       (description "This package provides a Quake-style drop-down console
@@ -24549,7 +24736,7 @@ compatible with Emacs' shell modes.")
           (base32 "197xrwph1llrzjgkhlvagiwdgfp68pb45w5afg89ndahpqc2725s"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-hydra" ,emacs-hydra)))
+       (list emacs-hydra))
       (arguments
        `(#:tests? #t
          #:test-command '("emacs" "-Q" "-batch" "-L" "."
@@ -24583,9 +24770,7 @@ output.")
            "16cjmrzflf2i1w01973sl944xrfanakba8sb4dpwi79d92xp03xy"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-vdiff" ,emacs-vdiff)
-         ("emacs-magit" ,emacs-magit)
-         ("emacs-transient" ,emacs-transient)))
+       (list emacs-vdiff emacs-magit emacs-transient))
       (home-page "https://github.com/justbur/emacs-vdiff-magit/")
       (synopsis "Frontend for diffing based on vimdiff")
       (description "This package permits comparisons of two or three buffers
@@ -24611,7 +24796,7 @@ based on diff output.")
            "0zhyhz4lhx0d8wwh1xxxf7ck4s621fk9757ql2ypxbr4iqh7sjlp"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-all-the-icons" ,emacs-all-the-icons)))
+       (list emacs-all-the-icons))
       (home-page "https://github.com/jtbm37/all-the-icons-dired/")
       (synopsis "Show icons for each file in @code{dired-mode}")
       (description "This package allows icons from @file{all-the-icons.el} to
@@ -24637,7 +24822,7 @@ be used in @code{dired-mode}.")
            "031cb8fvv5n30djr9lpl6vz3rl15zykfvjlgkjc8l33a3l5mw8j0"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-exwm" ,emacs-exwm)))
+       (list emacs-exwm))
       (home-page "https://github.com/agzam/exwm-edit/")
       (synopsis "Open temp buffers for editing text from EXWM buffers")
       (description "This package facilitates editing text from EXWM buffers by
@@ -24683,12 +24868,9 @@ invoked.")
            "02kysq57kqzg0zkhaf302ada9cp9spgp71z8vbdq4c7dl6x75h4g"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)
-         ("emacs-s" ,emacs-s)
-         ("emacs-f" ,emacs-f)))
+       (list emacs-dash emacs-s emacs-f))
       (native-inputs
-       `(("emacs-el-mock" ,emacs-el-mock)
-         ("emacs-ert-async" ,emacs-ert-async)))
+       (list emacs-el-mock emacs-ert-async))
       (home-page "https://github.com/rejeep/prodigy.el")
       (synopsis "Manage external services from within Emacs")
       (description "This package provides a GUI for defining and monitoring services.")
@@ -24728,9 +24910,7 @@ url-encoded parameters, as well as web sockets.")
          "0a0qskhy6jil583hq3mgbzdsi3m1schzyzrd46yfxdsvqiczg170"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-markdown-mode" ,emacs-markdown-mode)
-       ("emacs-websocket" ,emacs-websocket)
-       ("emacs-web-server" ,emacs-web-server)))
+     (list emacs-markdown-mode emacs-websocket emacs-web-server))
     (arguments '(#:include '("\\.el$" "\\.html$")))
     (home-page "https://github.com/ancane/markdown-preview-mode")
     (synopsis "Preview Markdown files")
@@ -24824,7 +25004,7 @@ definition-jumping and type-checking on demand.")
          "08b4hdgq4hc1yfd9pvyir2j3cqqdqa3j5svgaba97x5fzhsz7y8i"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-js2-mode" ,emacs-js2-mode)))
+     (list emacs-js2-mode))
     (arguments
      `(#:tests? #t
        #:test-command '("make" "test")))
@@ -24853,8 +25033,7 @@ support JSX syntax.")
            "0ha1qsz2p36pqa0sa2sp83lspbgx5lr7930qxnwd585liajzdd9x"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)
-         ("emacs-s" ,emacs-s)))
+       (list emacs-dash emacs-s))
       (home-page "https://github.com/gregsexton/origami.el")
       (synopsis "Flexible text-folding")
       (description "This package provides a minor mode for collapsing and
@@ -24900,7 +25079,7 @@ previewed by scrolling up and down within a @code{dired} buffer.")
         (base32 "1zmx7vfi02c8k9wnbsmka5yx3ci8fv9wl8r0cc28jn40vgrivn8c"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-counsel" ,emacs-counsel)))
+     (list emacs-counsel))
     (arguments
      `(#:tests? #f                      ;require internet access
        #:test-command '("make test")))
@@ -24925,8 +25104,7 @@ and searching through @code{Ctags} files.")
                  (base32
                   "0npd8glzk5z4n7y9mzbsbzi0cf3by19fqcki052jr3dga363lds7"))))
       (propagated-inputs
-       `(("emacs-f" ,emacs-f)
-         ("emacs-ivy" ,emacs-ivy)))
+       (list emacs-f emacs-ivy))
       (build-system emacs-build-system)
       (home-page "https://github.com/wpcarro/ivy-clipmenu.el")
       (synopsis "Ivy integration with clipmenu")
@@ -24949,8 +25127,7 @@ and searching through @code{Ctags} files.")
                  (base32 "0cg4y7hy7xbq4vrbdicfzgvyaf3cjbx2zkqd4yl0y2garz71j99l"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-org" ,emacs-org)
-         ("emacs-async" ,emacs-async)))
+       (list emacs-org emacs-async))
       (home-page "https://github.com/abo-abo/org-download")
       (synopsis "Facilitate moving images")
       (description "This package provides utilities for managing image files
@@ -24975,9 +25152,7 @@ copied into @code{org-mode} buffers.")
           (base32 "1a8ygrcag8i9hdpy2vsn0sh8lwhl9b56rv91j3rddy1jv5qx1ipb"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)
-         ("emacs-org" ,emacs-org)
-         ("emacs-s" ,emacs-s)))
+       (list emacs-dash emacs-org emacs-s))
       (home-page "https://github.com/chrisbarrett/org-drill-table")
       (synopsis "Generate Org drill cards using Org mode tables")
       (description
@@ -25004,10 +25179,9 @@ current tree.")
            "0n6d3mm43gj16v8kjjradcfik93wb89dsqnfcbskb28bvcamafid"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-async" ,emacs-async)))
+       (list emacs-async))
       (native-inputs
-       `(("emacs-undercover" ,emacs-undercover)
-         ("emacs-ert-runner" ,emacs-ert-runner)))
+       (list emacs-undercover emacs-ert-runner))
       (arguments
        `(#:tests? #t
          #:test-command '("ert-runner")
@@ -25051,8 +25225,7 @@ current tree.")
            "0r192vzry1212ihabg9pgw9xar8zdgnbgy0vsgvfm8s5wj6ny7jp"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-helm" ,emacs-helm)
-         ("emacs-dash-docs" ,emacs-dash-docs)))
+       (list emacs-helm emacs-dash-docs))
       (home-page "https://github.com/areina/helm-dash")
       (synopsis "Offline documentation browser for APIs using Dash docsets")
       (description "This package uses Helm to install and navigate through
@@ -25076,14 +25249,34 @@ Dash docsets.")
           (base32 "1fn38vbz46ijarjvhgw7iy7dj9s2a2miy95fyy9f8b5sj8nrdfvz"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-counsel" ,emacs-counsel)
-         ("emacs-dash-docs" ,emacs-dash-docs)))
+       (list emacs-counsel emacs-dash-docs))
       (home-page "https://github.com/dash-docs-el/counsel-dash")
       (synopsis "Offline documentation browser for APIs using Dash docsets")
       (description "This package uses @code{ivy-mode} to install and navigate
 through Dash docsets.")
       (license license:expat))))
 
+(define-public emacs-devdocs
+  (package
+    (name "emacs-devdocs")
+    (version "0.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://elpa.gnu.org/packages/"
+             "devdocs-" version ".tar"))
+       (sha256
+        (base32 "03asw26nsnnx7hmyqhksq165vpii0h8y6qjjn0x4sdkyyns16yp7"))))
+    (build-system emacs-build-system)
+    (home-page "https://github.com/astoff/devdocs.el")
+    (synopsis "Emacs viewer for DevDocs")
+    (description
+     "This package provides a documentation viewer similar to Emacs's
+built-in Info browser, but geared towards documentation obtained from
+@url{https://devdocs.io}.")
+    (license license:gpl3+)))
+
 (define-public emacs-cascading-dir-locals
   (let ((release "0.1")
         (revision "0")
@@ -25144,11 +25337,9 @@ all of your projects, then override or add variables on a per-project basis.")
                  ("calibredb-fetch-metadata-program"
                   (string-append calibre "/bin/fetch-ebook-metadata")))))))))
     (inputs
-     `(("calibre" ,calibre)))
+     (list calibre))
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-s" ,emacs-s)
-       ("emacs-transient" ,emacs-transient)))
+     (list emacs-dash emacs-s emacs-transient))
     (home-page "https://github.com/chenyanming/calibredb.el")
     (synopsis "Yet another calibre client for Emacs")
     (description "This package integrates calibre into Emacs.
@@ -25165,7 +25356,7 @@ all of your projects, then override or add variables on a per-project basis.")
 (define-public emacs-el-patch
   (package
     (name "emacs-el-patch")
-    (version "2.2.3")
+    (version "2.4")
     (source
      (origin
        (method git-fetch)
@@ -25174,9 +25365,14 @@ all of your projects, then override or add variables on a per-project basis.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32
-         "18djslz177q6q33y82zmg2v6n9236a76kiqfvxdk4vbqzjbq82f7"))))
+        (base32 "0vankik1dh2yd554h59s5vlzanwx8sx9j31kr15830m3hfgikygz"))))
     (build-system emacs-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         ;; XXX: The `validate-compiled-autoloads' phase fails with "Symbol’s
+         ;; value as variable is void: el-patch-deftype".
+         (delete 'validate-compiled-autoloads))))
     (home-page "https://github.com/raxod502/el-patch")
     (synopsis "Future-proof your Emacs customizations")
     (description "This package allows for an alternate definition of an Elisp
@@ -25245,7 +25441,7 @@ well as an option for visually flashing evaluated s-expressions.")
         (base32 "18qlwyjqxap2qfbz14ma6yqp4p3v4q2y8idc355s4szjdd2as2lr"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-counsel" ,emacs-counsel)))
+     (list emacs-counsel))
     (home-page "https://github.com/masasam/emacs-counsel-tramp")
     (synopsis "Ivy interface for TRAMP")
     (description
@@ -25255,14 +25451,14 @@ well as an option for visually flashing evaluated s-expressions.")
 (define-public emacs-tramp
   (package
     (name "emacs-tramp")
-    (version "2.5.1.3")
+    (version "2.5.2")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/"
                            "tramp-" version ".tar"))
        (sha256
-        (base32 "1qcwdavfrbw8yyfy5rbzbcfyqavqbz13jncahkqlgwbkqvmgh7y5"))))
+        (base32 "1j71x3q6x9xyf21capjxcp85b7z2x9khrqsd2sy2s3qwxz3jbg5n"))))
     (build-system emacs-build-system)
     (arguments
      `(#:emacs ,emacs                   ;need D-Bus
@@ -25279,7 +25475,7 @@ well as an option for visually flashing evaluated s-expressions.")
                  ("tramp-encoding-shell" (string-append sh "/bin/sh"))))
              #t)))))
     (inputs
-     `(("bash" ,bash)))
+     (list bash))
     (home-page "https://savannah.gnu.org/projects/tramp")
     (synopsis "Remote file editing package for Emacs")
     (description
@@ -25315,7 +25511,7 @@ with passwords for paths matching regexps.")
 (define-public emacs-eacl
   (package
     (name "emacs-eacl")
-    (version "2.1.0")
+    (version "2.2.0")
     (source
      (origin
        (method git-fetch)
@@ -25324,11 +25520,10 @@ with passwords for paths matching regexps.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32
-         "0n1vlzvq5mv7z1yffjjqm9ixd3r0cljr60kg55l9pj9kp72a4iv8"))))
+        (base32 "1d2krw9x1mw6jn1q07nbq2qi92fms85q3i9wa2q5drs3368l55vr"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-ivy" ,emacs-ivy)))
+     (list emacs-ivy))
     (home-page "https://github.com/redguardtoo/eacl")
     (synopsis "Auto-complete lines by using @code{grep} on a project")
     (description "This package provides auto-completion commands for single
@@ -25431,7 +25626,7 @@ C-f} to advance by #xa4 characters.
            "148a5xsnbsiddhf9cl7yxdk41lrv38h0pip91kcflw9d7l0dp7pr"))))
       (build-system emacs-build-system)
       (inputs
-       `(("helm" ,emacs-helm)))
+       (list emacs-helm))
       (synopsis "Search suggestions and article extracts from Wikipedia for Emacs")
       (description
        "This package provides an Emacs Helm interface for search suggestions
@@ -25548,9 +25743,7 @@ context, carry out the appropriate action.")
                 (file-name (git-file-name name version))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-evil" ,emacs-evil)
-         ("emacs-paredit" ,emacs-paredit)
-         ("emacs-smartparens" ,emacs-smartparens)))
+       (list emacs-evil emacs-paredit emacs-smartparens))
       (home-page "https://github.com/luxbock/evil-cleverparens")
       (synopsis "Emacs modal editing optimized for editing Lisp")
       (description "@code{evil-cleverparens} remaps Evil keybindings to allow
@@ -25560,6 +25753,117 @@ provided.  Those alternative commands are and bound by default to their
 corresponding Evil keys.")
       (license license:expat))))
 
+(define-public emacs-ntlm
+  (package
+    (name "emacs-ntlm")
+    (version "2.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://elpa.gnu.org/packages/ntlm-" version ".el"))
+       (sha256
+        (base32 "01d0bcmh8a36qf871w6bc05kjk9bmnh843m9869xw06zyvqwg9mv"))))
+    (build-system emacs-build-system)
+    (home-page "https://elpa.gnu.org/packages/ntlm.html")
+    (synopsis "NTLM (NT LanManager) authentication support")
+    (description
+     "This library is a direct translation of the Samba release 2.2.0
+implementation of Windows NT and LanManager compatible password encryption.")
+    (license license:gpl3+)))
+
+(define-public emacs-nadvice
+  (package
+    (name "emacs-nadvice")
+    (version "0.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://elpa.gnu.org/packages/"
+                           "nadvice-" version ".el"))
+       (sha256
+        (base32 "0gi3csnxbs8h7iy0scsl35sic3gv90swa89hhdjwb7qvpirfdcgw"))))
+    (build-system emacs-build-system)
+    (home-page "https://elpa.gnu.org/packages/nadvice.html")
+    (synopsis "Forward compatibility for Emacs-24.4's nadvice")
+    (description
+     "This package tries to re-implement some of nadvice.el's functionality on
+top of the old defadvice system, to help users of defadvice move to the new
+advice system without dropping support for Emacs<24.4.")
+    (license license:gpl3+)))
+
+(define-public emacs-url-http-ntlm
+  (package
+    (name "emacs-url-http-ntlm")
+    (version "2.0.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://elpa.gnu.org/packages/"
+                           "url-http-ntlm-" version ".el"))
+       (sha256
+        (base32 "1cakq2ykraci7d1gl8rnpv4f2f5ffyaidhqb1282g7i72adwmb98"))))
+    (build-system emacs-build-system)
+    (propagated-inputs (list emacs-ntlm))
+    (home-page "https://elpa.gnu.org/packages/url-http-ntlm.html")
+    (synopsis "NTLM authentication for the url library")
+    (description "This package provides a NTLM handler for the URL package.")
+    (license license:gpl3+)))
+
+(define-public emacs-soap-client
+  (package
+    (name "emacs-soap-client")
+    (version "3.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://elpa.gnu.org/packages/"
+                           "soap-client-" version ".tar"))
+       (sha256
+        (base32 "1s0bwnip22nj6kgjadd4zlj9j729hiyyjb66sr51i2mddnf9i95s"))))
+    (build-system emacs-build-system)
+    (home-page "httpa://elpa.gnu.org/packages/soap-client.html")
+    (synopsis "Access SOAP web services")
+    (description
+     "This package provides a SOAP client to access web services.")
+    (license license:gpl3+)))
+
+(define-public emacs-fsm
+  (package
+    (name "emacs-fsm")
+    (version "0.2.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://elpa.gnu.org/packages/fsm-" version ".el"))
+       (sha256
+        (base32 "1jyxyqdbfl8nv7c50q0sg3w5p7whp1sqgi7w921k5hfar4d11qqp"))))
+    (build-system emacs-build-system)
+    (home-page "https://elpa.gnu.org/packages/fsm.html")
+    (synopsis "Finite State Machine library")
+    (description
+     "This package provides Finite State Machine library to make asynchronous
+programming in Emacs Lisp easy and fun.")
+    (license license:gpl3+)))
+
+(define-public emacs-excorporate
+  (package
+    (name "emacs-excorporate")
+    (version "1.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://elpa.gnu.org/packages/"
+                           "excorporate-" version ".tar"))
+       (sha256
+        (base32 "1g0wc2kp15ra323b4rxvdh58q9c4h7m20grw6a0cs53m7l9xi62f"))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     (list emacs-fsm emacs-nadvice emacs-soap-client emacs-url-http-ntlm))
+    (home-page "https://elpa.gnu.org/packages/excorporate.html")
+    (synopsis "Exchange integration")
+    (description "This package provides Exchange integration for Emacs.")
+    (license license:gpl3+)))
+
 (define-public emacs-evil-traces
   (let ((commit "1931e3ea2c64b4aec393a9c25063c330deff55e3")
         (revision "2"))
@@ -25577,7 +25881,7 @@ corresponding Evil keys.")
                   "12p9lfxscs182vbd4dy0m5gacs3d4kyprbz5yndpwvl8g2qsqplz"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-evil" ,emacs-evil)))
+       (list emacs-evil))
       (arguments
        `(#:phases
          (modify-phases %standard-phases
@@ -25611,7 +25915,7 @@ commands in @code{evil-mode}.")
         (base32
          "1na44rbc03sr5b4z9pvnps6n4nmrqcz58nywix9825l74a419ijx"))))
     (propagated-inputs
-     `(("emacs-evil" ,emacs-evil)))
+     (list emacs-evil))
     (build-system emacs-build-system)
     (home-page "https://github.com/keith/evil-tmux-navigator")
     (synopsis
@@ -25624,14 +25928,14 @@ Emacs windows and tmux panes.")
 (define-public emacs-xclip
   (package
     (name "emacs-xclip")
-    (version "1.10")
+    (version "1.11")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/"
-                           "xclip-" version ".el"))
+                           "xclip-" version ".tar"))
        (sha256
-        (base32 "0i3i9kwfg8qmhcmqhhnrb1kljgwkccv63s9q1mjwqfjldyfh8j8i"))))
+        (base32 "0hgblj8ng7vfsdb7g1mm9m2qhzfprycdd77836l59prpak5kp55q"))))
     (build-system emacs-build-system)
     (home-page "http://elpa.gnu.org/packages/xclip.html")
     (synopsis "Copy and paste GUI clipboard from Emacs in text terminal")
@@ -25679,7 +25983,7 @@ text-property translator.")
         (base32
          "1vwfpdi7hfkxx4vi0cwg7rvqby3i0mymzdkyzrqzv30dazmcjpag"))))
     (build-system emacs-build-system)
-    (propagated-inputs `(("emacs-org" ,emacs-org)))
+    (propagated-inputs (list emacs-org))
     (home-page "https://github.com/weirdNox/org-noter")
     (synopsis "Synchronized, Org-mode, document annotator")
     (description
@@ -25728,7 +26032,7 @@ acting like notes that are made @emph{in} the document.")
           (base32 "043dqd8i8h6hbcg11rzprxin2yq5lb902zlrb7mxah44vyp8wrdi"))))
       (build-system emacs-build-system)
       (inputs
-       `(("zsh" ,zsh)))
+       (list zsh))
       (home-page "https://github.com/manateelazycat/multi-term")
       (synopsis "Manage multiple terminal buffers in Emacs")
       (description
@@ -25760,7 +26064,7 @@ it forcibly
         (base32 "0fzqm5gpadqzsl71r1bq72ki8dw8125v4nmhdd3b4rz9jy1rqm2g"))))
     (build-system emacs-build-system)
     (native-inputs
-     `(("texinfo" ,texinfo)))
+     (list texinfo))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -25794,8 +26098,7 @@ connections using TLS encryption.")
          "1r5s4mvwlxsb9ylr6dkfxpm1l0pbqkmn5gwjdcfk762cnxlam8cm"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-flycheck" ,emacs-flycheck)
-       ("emacs-all-the-icons" ,emacs-all-the-icons)))
+     (list emacs-flycheck emacs-all-the-icons))
     (home-page
      "https://gitlab.petton.fr/nico/zerodark-theme")
     (synopsis
@@ -25942,10 +26245,9 @@ format.")
                 "0iibxplgdp34bpq1yll2gmqjd8d8lnqn4mqjvx6cdf0y438yr4jz"))))
     (build-system emacs-build-system)
     (inputs
-     `(("pandoc" ,pandoc)))
+     (list pandoc))
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-ht" ,emacs-ht)))
+     (list emacs-dash emacs-ht))
     (home-page "https://github.com/kawabata/ox-pandoc")
     (synopsis "Org exporter for Pandoc")
     (description "@code{ox-pandoc} is an exporter for converting Org-mode
@@ -26011,14 +26313,14 @@ federated microblogging social network.")
 (define-public emacs-ebdb
   (package
     (name "emacs-ebdb")
-    (version "0.8.4")
+    (version "0.8.8")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/"
                            "ebdb-" version ".tar"))
        (sha256
-        (base32 "0n811af83fqpzq9513gf240gnz7qkwrjw07qs4sra4069q0pwnjr"))))
+        (base32 "035xakji5vypdpc06qp9yhg8ny7qn80h8kax6cl80p0lljplzrnn"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/girzel/ebdb")
     (synopsis "EIEIO port of BBDB, Emacs's contact-management package")
@@ -26043,11 +26345,7 @@ Lisp's (relatively new) EIEIO object oriented libraries.")
                 "1yky7vlv91501xb43xk19rr8mxlvrsxhawsc98jivf64nad5dqay"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-s" ,emacs-s)
-       ("emacs-popup" ,emacs-popup)
-       ("emacs-list-utils" ,emacs-list-utils)
-       ("emacs-iedit" ,emacs-iedit)))
+     (list emacs-dash emacs-s emacs-popup emacs-list-utils emacs-iedit))
     (home-page "https://github.com/Wilfred/emacs-refactor/")
     (synopsis "Language-specific refactoring in Emacs")
     (description "Emacs Refactor (EMR) is a framework for providing
@@ -26073,9 +26371,7 @@ a variety of languages, including elisp itself.")
     (arguments
      `(#:exclude '("flyspell-correct-avy-menu\\.el")))
     (propagated-inputs
-     `(("emacs-helm" ,emacs-helm)
-       ("emacs-ivy" ,emacs-ivy)
-       ("emacs-popup" ,emacs-popup)))
+     (list emacs-helm emacs-ivy emacs-popup))
     (home-page "https://github.com/d12frosted/flyspell-correct")
     (synopsis "Correcting words with flyspell via custom interfaces")
     (description
@@ -26103,8 +26399,7 @@ Helm and Ivy.")
            "1sqsm5sv311xfdk4f4rsnvprdf2v2vm7l1b3vqi7pc0g8adlnw1d"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emms" ,emacs-emms)
-         ("emacs-org" ,emacs-org)))
+       (list emacs-emms emacs-org))
       (home-page "https://gitlab.com/jagrg/org-emms")
       (synopsis "Play multimedia files from org-mode")
       (description
@@ -26129,10 +26424,7 @@ contains a track position, playback will start at the specified position.")
        "1hsfkkm3ykdf7n8a6k0mpzilhjpy7vllwrl2s4rfb9mhnaq5yb8y"))))
    (build-system emacs-build-system)
    (propagated-inputs
-    `(("emacs-request" ,emacs-request)
-      ("emacs-s" ,emacs-s)
-      ("emacs-dash" ,emacs-dash)
-      ("emacs-org" ,emacs-org)))
+    (list emacs-request emacs-s emacs-dash emacs-org))
    (home-page "https://github.com/ahungry/org-jira")
    (synopsis "Syncing between Jira and Org-mode")
    (description
@@ -26228,7 +26520,7 @@ keybindings for skipping from host section to host section.")
                 "1i3zmsn0w2k7p2hlzssibckm32kf05l56mkhg96x4sf06g3pwq1d"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("dash" ,emacs-dash)))
+     (list emacs-dash))
     (home-page "https://github.com/magit/ssh-agency")
     (synopsis "Manage @code{ssh-agent} from Emacs")
     (description
@@ -26335,7 +26627,7 @@ contrast and few colors.")
                  (base32 "128hdmf0jkzr12fv2r6z349qiwba6q97hsb6b1n2qlhi0v5v3mfh"))))
       (build-system emacs-build-system)
       (native-inputs
-       `(("emacs-ert-runner" ,emacs-ert-runner)))
+       (list emacs-ert-runner))
       (arguments
        `(#:tests? #t
          #:test-command '("ert-runner")
@@ -26362,7 +26654,7 @@ Emacs that integrate with major modes like Org-mode.")
 (define-public emacs-modus-themes
   (package
     (name "emacs-modus-themes")
-    (version "1.6.0")
+    (version "2.0.0")
     (source
      (origin
        (method git-fetch)
@@ -26371,7 +26663,7 @@ Emacs that integrate with major modes like Org-mode.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0fkj5as1lx6q7n6iny9x5hhhswfgg9f5ky3d82832hrq5a1jc0mg"))))
+        (base32 "0p1h5zpzhxkmhiczds453y6mf5xf7pbcqlijq6z8gy10dxx4jppf"))))
     (build-system emacs-build-system)
     (home-page "https://protesilaos.com/modus-themes/")
     (synopsis "Accessible themes (WCAG AAA)")
@@ -26387,14 +26679,8 @@ meet the needs of the numerous interfaces that are possible in the Emacs
 computing environment.")
     (license license:gpl3+)))
 
-(define-public emacs-modus-operandi-theme
-  (deprecated-package "emacs-modus-operandi-theme" emacs-modus-themes))
-
-(define-public emacs-modus-vivendi-theme
-  (deprecated-package "emacs-modus-vivendi-theme" emacs-modus-themes))
-
 (define-public emacs-punpun-theme
-  (let ((commit "2f78125609277b2478abdebd8f9d5ee10a823b65")
+  (let ((commit "7026684cd568cb691af3ced5de14c375fe6f5a1a")
         (revision "0"))
     (package
       (name "emacs-punpun-theme")
@@ -26403,14 +26689,14 @@ computing environment.")
        (origin
          (method git-fetch)
          (uri (git-reference
-               (url "https://github.com/wasamasa/punpun-theme")
+               (url "https://depp.brause.cc/punpun-theme")
                (commit commit)))
          (file-name (git-file-name name version))
          (sha256
           (base32
-           "1sgxrj3igzq86h3whfymxf4qzv9kpvcrlhbvjmnp7fwrplys0n7d"))))
+           "1nwvlp93l5lj259mchd1a2glq3jxd0h1vazsbjqfi07hsg86xjp0"))))
       (build-system emacs-build-system)
-      (home-page "https://github.com/wasamasa/punpun-theme")
+      (home-page "https://depp.brause.cc/punpun-theme")
       (synopsis "Bleak Emacs theme")
       (description
        "A bleak theme.  Uses shades of gray and the occasional splash of
@@ -26418,29 +26704,27 @@ color.  Designed for 256-color terminals.  Comes in light and dark!")
       (license license:gpl3+))))
 
 (define-public emacs-spacemacs-theme
-  (let ((commit "f79c40fb241e204539fde97200abae91e828e585")
-        (revision "1"))
-    (package
-      (name "emacs-spacemacs-theme")
-      (version (git-version "0" revision commit)) ;no release yet
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/nashamri/spacemacs-theme")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32 "1l2kkiyrskkpx8f901v0wrzaah1wjg15zdyv88spj3mh3hwd3b6n"))))
-      (build-system emacs-build-system)
-      (home-page "https://github.com/nashamri/spacemacs-theme")
-      (synopsis
-       "Light and dark theme for spacemacs that supports GUI and terminal")
-      (description
-       "Spacemacs theme is an Emacs color theme that started as
+  (package
+    (name "emacs-spacemacs-theme")
+    (version "0.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/nashamri/spacemacs-theme")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "15l9hb8f08nkxsaj8pxbg2mip4pp2msnrl0nvlq22zg40gh7pqsn"))))
+    (build-system emacs-build-system)
+    (home-page "https://github.com/nashamri/spacemacs-theme")
+    (synopsis
+     "Light and dark theme for spacemacs that supports GUI and terminal")
+    (description
+     "Spacemacs theme is an Emacs color theme that started as
 a theme for Spacemacs.  The theme comes with dark and light variants
 and it should work well with 256 color terminals.")
-      (license license:gpl3+))))
+    (license license:gpl3+)))
 
 (define-public emacs-elixir-mode
   (package
@@ -26457,7 +26741,7 @@ and it should work well with 256 color terminals.")
         (base32 "0f2a360h8bizvqk6bmgxm59g8n7id5rzwlbv6d383h15w298mcga"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-pkg-info" ,emacs-pkg-info)))
+     (list emacs-pkg-info))
     (home-page
      "https://github.com/elixir-editors/emacs-elixir")
     (synopsis "Major mode for editing Elixir files")
@@ -26516,6 +26800,31 @@ The contents and aspect is controlled by the @code{minibuffer-line-format}
 variable and the @code{minibuffer-line} face.")
     (license license:gpl3+)))
 
+(define-public emacs-minimap
+  (package
+    (name "emacs-minimap")
+    (version "1.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://elpa.gnu.org/packages/minimap-"
+             version
+             ".el"))
+       (sha256
+        (base32 "09fm0ziy8cdzzw08l7l6p63dxz2a27p3laia2v51mvbva8177ls1"))))
+    (build-system emacs-build-system)
+    (home-page "http://elpa.gnu.org/packages/minimap.html")
+    (synopsis "Sidebar showing a @emph{mini-map} of a buffer")
+    (description
+     "Minimap provides Emacs with a minimap sidebar, which is a smaller
+display of the current buffer on the side, like a scrollbar.  It highlights
+the currently shown region and updates its position automatically.  You can
+navigate in the minibar by dragging the active region with the mouse, which
+will scroll the corresponding edit buffer.  Additionally, you can overlay
+information from the tags gathered by CEDET's semantic analyzer.)")
+    (license license:gpl3+)))
+
 (define-public emacs-eshell-prompt-extras
   (package
     (name "emacs-eshell-prompt-extras")
@@ -26542,19 +26851,18 @@ available.")
 (define-public emacs-eshell-did-you-mean
   (package
     (name "emacs-eshell-did-you-mean")
-    (version "0.1")
-    (home-page "https://github.com/xuchunyang/eshell-did-you-mean")
+    (version "0.2")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url home-page)
+             (url "https://github.com/xuchunyang/eshell-did-you-mean")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32
-         "0v0wshck5n4hspcv1zk1g2nm6xiigcjp16lx0dc8wzkl6ymljvbg"))))
+        (base32 "158g8b4crm0gf5pilfxf89hdsb22gr1wbrjyx9gf45bmcll3i9vf"))))
     (build-system emacs-build-system)
+    (home-page "https://github.com/xuchunyang/eshell-did-you-mean")
     (synopsis "Display suggestions on 'command not found' in Eshell")
     (description "This library adds a list of 'Did you mean...' suggestions
 when the command was not found in Eshell.  The suggestions are found after the
@@ -26634,12 +26942,11 @@ such as:
              (lambda _
                (substitute* "flycheck-google-cpplint.el"
                  (("\"cpplint.py\"")
-                  (string-append "\"" (which "cpplint") "\"")))
-               #t)))))
+                  (string-append "\"" (which "cpplint") "\""))))))))
       (inputs
-       `(("cpplint" ,cpplint)))
+       (list cpplint))
       (propagated-inputs
-       `(("flycheck-mode" ,emacs-flycheck)))
+       (list emacs-flycheck))
       (synopsis "Google C++ checker for Flycheck")
       (description "This package provides a interface for @code{cpplint} over
 Flycheck plugin.  @code{cpplint} is a static code checker for C++, following
@@ -26663,8 +26970,7 @@ Google guidelines.")
         (base32 "1j2vfngq3512naaayv9kx0d1q2zg1xgs69l8afc7swg72h0l0imw"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("helm" ,emacs-helm)
-       ("fish-completion" ,emacs-fish-completion)))
+     (list emacs-helm emacs-fish-completion))
     (synopsis "Helm interface for Emacs fish-completion")
     (description "Helm Fish Completion is a Helm interface for Emacs
 fish-completion.  It can be used in both Eshell and M-x shell.")
@@ -26686,7 +26992,7 @@ fish-completion.  It can be used in both Eshell and M-x shell.")
         (base32 "0n8qa549c5syvgqw1h2zrakjjbygddpxzaifaq5irscgdcajrads"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("helm" ,emacs-helm)))
+     (list emacs-helm))
     (synopsis "Helm action to switch directory in Emacs REPLs")
     (description "Helm \"Switch-to-REPL\" offers the
 @code{helm-switch-to-repl} action, a generalized and extensible version of
@@ -26695,55 +27001,54 @@ other @code{helm-type-file} sources such as @code{helm-locate}.")
     (license license:gpl3+)))
 
 (define-public emacs-telega-server
-  (package
-    (name "emacs-telega-server")
-    (version "0.7.030")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/zevlg/telega.el")
-             (commit (string-append "v" version))))
-       (sha256
-        (base32 "1g29v5fgkqx43wsvh1npx0g3hj00n37lxgvxjvy85fs4h9226gl9"))
-       (file-name (git-file-name "emacs-telega" version))
-       (patches
-        (search-patches "emacs-telega-path-placeholder.patch"
-                        "emacs-telega-test-env.patch"))))
-    (build-system gnu-build-system)
-    (arguments
-     `(#:make-flags
-       (list (string-append "CC=" ,(cc-for-target))
-             (string-append "INSTALL_PREFIX="
-                            (assoc-ref %outputs "out") "/bin"))
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'enter-subdirectory
-           (lambda _ (chdir "server") #t))
-         (replace 'configure
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out")))
-               (substitute* "run_tests.py"
-                 (("^(TELEGA_SERVER = ).*$" _all prefix)
-                  (string-append prefix
-                                 "\"" out "/bin/telega-server\"\n"))))))
-         (delete 'check)
-         (add-after 'install 'check
-           (assoc-ref %standard-phases 'check))
-         (add-before 'install-license-files 'leave-subdirectory
-           (lambda _ (chdir "..") #t)))
-       #:test-target "test"))
-    (inputs
-     `(("tdlib" ,tdlib)
-       ("libappindicator" ,libappindicator)))
-    (native-inputs
-     `(("python" ,python)
-       ("pkg-config" ,pkg-config)))
-    (home-page "https://zevlg.github.io/telega.el/")
-    (synopsis "Server process of Telega")
-    (description "Telega-server is helper program to interact with Telegram
+  (let ((commit "5739794d2d0c8a4e7b77c2e37a097e19f80ac9f0")
+        (revision "0"))
+    (package
+      (name "emacs-telega-server")
+      (version (git-version  "0.8.2" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/zevlg/telega.el")
+               (commit commit)))
+         (sha256
+          (base32 "1am0b2bjjkw7zd0yq39v015a08dcbk43j4d4h8y2q8hj53ryfk5a"))
+         (file-name (git-file-name "emacs-telega" version))
+         (patches
+          (search-patches "emacs-telega-path-placeholder.patch"
+                          "emacs-telega-test-env.patch"))))
+      (build-system gnu-build-system)
+      (arguments
+       (list
+        #:make-flags
+        #~(list (string-append "CC=" #$(cc-for-target))
+                (string-append "INSTALL_PREFIX=" #$output "/bin"))
+        #:phases
+        #~(modify-phases %standard-phases
+            (add-before 'configure 'enter-subdirectory
+              (lambda _ (chdir "server")))
+            (replace 'configure
+              (lambda _
+                (substitute* "run_tests.py"
+                  (("^(TELEGA_SERVER = ).*$" _all prefix)
+                   (string-append prefix
+                                  "\"" #$output "/bin/telega-server\"\n")))))
+            (delete 'check)
+            (add-after 'install 'check
+              (assoc-ref %standard-phases 'check))
+            (add-before 'install-license-files 'leave-subdirectory
+              (lambda _ (chdir ".."))))
+        #:test-target "test"))
+      (inputs
+       (list tdlib libappindicator))
+      (native-inputs
+       (list python pkg-config))
+      (home-page "https://zevlg.github.io/telega.el/")
+      (synopsis "Server process of Telega")
+      (description "Telega-server is helper program to interact with Telegram
 service, and connect it with Emacs via inter-process communication.")
-    (license license:gpl3+)))
+      (license license:gpl3+))))
 
 (define-public emacs-telega
   (package
@@ -26761,14 +27066,14 @@ service, and connect it with Emacs via inter-process communication.")
          (add-after 'unpack 'patch-sources
            (lambda* (#:key inputs #:allow-other-keys)
              ;; Hard-code paths to `ffplay` and `ffmpeg`.
-             (let* ((ffmpeg (assoc-ref inputs "ffmpeg"))
-                    (ffmpeg-bin (string-append ffmpeg "/bin/ffmpeg"))
-                    (ffplay-bin (string-append ffmpeg "/bin/ffplay")))
+             (let* ((ffplay-bin (search-input-file inputs "/bin/ffplay"))
+                    (ffmpeg-bin (search-input-file inputs "/bin/ffmpeg")))
                (substitute* '("telega-ffplay.el" "telega-vvnote.el")
                  (("(shell-command-to-string\|concat) \"(ffmpeg\|ffprobe)"
                    all func cmd)
-                  (string-append func " \"" (assoc-ref inputs "ffmpeg")
-                                 "/bin/" cmd))
+                  (string-append func " \""
+                                 (search-input-file
+                                  inputs (string-append "/bin/" cmd))))
                  (("\\(executable-find \"ffplay\"\\)")
                   (string-append "(and (file-executable-p \"" ffplay-bin "\")"
                                  "\"" ffplay-bin "\")"))
@@ -26777,22 +27082,19 @@ service, and connect it with Emacs via inter-process communication.")
                                  "\"" ffmpeg-bin "\")"))))))
          (add-after 'unpack 'configure
            (lambda* (#:key inputs outputs #:allow-other-keys)
-             (substitute* "telega-server.el"
+             (substitute* "telega-customize.el"
                (("@TELEGA_SERVER_BIN@")
-                (string-append (assoc-ref inputs "emacs-telega-server")
-                               "/bin/telega-server")))
+                (search-input-file inputs "/bin/telega-server")))
              (substitute* "telega-util.el"
                (("@TELEGA_SHARE@")
                 (string-append (elpa-directory (assoc-ref outputs "out"))
                                "/etc"))))))))
     (inputs
-     `(("emacs-telega-server" ,emacs-telega-server)
-       ("ffmpeg" ,ffmpeg)))
+     (list emacs-telega-server ffmpeg))
     (native-inputs '())
     (propagated-inputs
-     `(("emacs-visual-fill-column" ,emacs-visual-fill-column)
-       ("emacs-company" ,emacs-company)
-       ("emacs-rainbow-identifiers" ,emacs-rainbow-identifiers)))
+     (list emacs-visual-fill-column emacs-company
+           emacs-rainbow-identifiers))
     (synopsis "GNU Emacs client for the Telegram messenger")
     (description "Telega is a full-featured, unofficial GNU Emacs-based client
 for the Telegram messaging platform.")))
@@ -26812,11 +27114,8 @@ for the Telegram messaging platform.")))
     (inputs '())
     (native-inputs '())
     (propagated-inputs
-     `(("emacs-alert" ,emacs-alert)
-       ("emacs-all-the-icons" ,emacs-all-the-icons)
-       ("emacs-dashboard" ,emacs-dashboard)
-       ("emacs-telega" ,emacs-telega)
-       ("emacs-transient" ,emacs-transient)))
+     (list emacs-alert emacs-all-the-icons emacs-dashboard emacs-telega
+           emacs-transient))
     (synopsis "Contributed packages to Telega")
     (description "Telega-contrib is a collection of third-party
 contributed packages to Telega.")))
@@ -26824,24 +27123,22 @@ contributed packages to Telega.")))
 (define-public emacs-doom-modeline
   (package
     (name "emacs-doom-modeline")
-    (version "3.2.0")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/seagle0128/doom-modeline")
-                    (commit (string-append "v" version))))
-              (sha256
-               (base32
-                "1gfkaxga919a1a19dhpbby95l8dixb1278g5d7iadjf2i3j0p3l0"))
-              (file-name (git-file-name name version))))
+    (version "3.2.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/seagle0128/doom-modeline")
+             (commit (string-append "v" version))))
+       (sha256
+        (base32 "1ji15n2rdp7bjg5iq9im6c4m12k24kqp85i3n1m9npihrb4arh54"))
+       (file-name (git-file-name name version))))
     (build-system emacs-build-system)
     (arguments
      `(#:test-command '("ert-runner")))
-    (native-inputs `(("emacs-ert-runner" ,emacs-ert-runner)))
+    (native-inputs (list emacs-ert-runner))
     (propagated-inputs
-     `(("emacs-all-the-icons" ,emacs-all-the-icons)
-       ("emacs-dash" ,emacs-dash)
-       ("emacs-shrink-path" ,emacs-shrink-path)))
+     (list emacs-all-the-icons emacs-dash emacs-shrink-path))
     (synopsis "Fancy and fast mode-line inspired by minimalism design")
     (description "Doom modeline is a complete modeline for GNU Emacs inspired
 by the Doom theme collection.  This modeline features support for mode-specific
@@ -26852,7 +27149,7 @@ icon support, git integration, and several other utilities.")
 (define-public emacs-mood-line
   (package
     (name "emacs-mood-line")
-    (version "1.2.4")
+    (version "1.2.5")
     (source
      (origin
        (method git-fetch)
@@ -26861,7 +27158,7 @@ icon support, git integration, and several other utilities.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0fh9j9fkgl433nykfzjnzap5labi4sdndfk1nv4f904ij69pmvxb"))))
+        (base32 "0z6s80j259xf8nxjxcsmp7wyvpcg5wyx58brlrbwg1aa9hl3fxga"))))
     (build-system emacs-build-system)
     (home-page "https://gitlab.com/jessieh/mood-line")
     (synopsis "Minimal mode-line for Emacs")
@@ -26906,8 +27203,7 @@ replicate some of the features of the Doom modeline package.")
         (base32 "0y0sdjixaxvywrlp2sw51wnczhk51q1svl5aghbk9rkxpwv9ys9v"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-dash emacs-s))
     (home-page "https://github.com/davidshepherd7/frames-only-mode")
     (synopsis "Use frames instead of Emacs windows")
     (description
@@ -26955,9 +27251,7 @@ with a preconfigured set of keys.")
        (file-name (git-file-name name version))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-s" ,emacs-s)
-       ("emacs-dash" ,emacs-dash)
-       ("emacs-f" ,emacs-f)))
+     (list emacs-s emacs-dash emacs-f))
     (home-page "https://gitlab.com/bennya/shrink-path.el")
     (synopsis "Fish-style path truncation in emacs-lisp")
     (description "This package provides utility functions that allow for
@@ -26991,22 +27285,22 @@ each slide with left/right keys.")
 (define-public emacs-fullframe
   (package
     (name "emacs-fullframe")
-    (version "0.5.0")
+    (version "0.5.1")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://github.com/tomterl/fullframe")
+             (url "https://git.sr.ht/~tomterl/fullframe")
              (commit version)))
        (sha256
-        (base32
-         "0m43qnhp6ibsskpjkxc86p3lrjsjc0ndqml3lbd65s79x4x7i3fi"))
+        (base32 "1q276p3bagx9fhzyzjmz449f95k1z287x4p34980d06klj11lrab"))
        (file-name (git-file-name name version))))
     (build-system emacs-build-system)
-    (home-page "https://github.com/tomterl/fullframe")
+    (home-page "https://git.sr.ht/~tomterl/fullframe")
     (synopsis "Generalized automatic execution in a single frame")
-    (description "This library provides helpers for single-window-per-frame
-execution of buffer-exposing commands.")
+    (description
+     "This library provides helpers for single-window-per-frame execution of
+buffer-exposing commands.")
     (license license:gpl3+)))
 
 (define-public emacs-eshell-toggle
@@ -27027,7 +27321,7 @@ execution of buffer-exposing commands.")
          (file-name (git-file-name name version))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)))
+       (list emacs-dash))
       (home-page "https://github.com/4DA/eshell-toggle")
       (synopsis "Show and hide an @code{eshell} instance")
       (description "This package toggles an @code{eshell} instance for the
@@ -27050,7 +27344,7 @@ current buffer.")
        (file-name (git-file-name name version))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-fullframe" ,emacs-fullframe)))
+     (list emacs-fullframe))
     (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
@@ -27080,25 +27374,41 @@ REPL appropriate to the current major mode.")
              (make-file-writable "rime.el")
              (emacs-substitute-variables "rime.el"
                ("rime-share-data-dir"
-                (string-append (assoc-ref inputs "rime-data")
-                               "/share/rime-data")))
-             #t))
+                (search-input-directory inputs
+                                        "share/rime-data")))))
          (add-before 'install 'build-emacs-module
            (lambda _
              (invoke "make" "lib"))))))
     (inputs
-     `(("librime" ,librime)
-       ("rime-data" ,rime-data)))
+     (list librime rime-data))
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-popup" ,emacs-popup)
-       ("emacs-posframe" ,emacs-posframe)))
+     (list emacs-dash emacs-popup emacs-posframe))
     (home-page "https://github.com/DogLooksGood/emacs-rime")
     (synopsis "Rime input method in Emacs")
     (description
      "Rime is an Emacs input method built upon Rime input method engine.")
     (license license:gpl3+)))
 
+(define-public emacs-bison-mode
+  (package
+    (name "emacs-bison-mode")
+    (version "0.4")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://elpa.nongnu.org/nongnu/bison-mode-"
+               version ".tar"))
+        (sha256
+          (base32 "19n9kz1ycjpxngd3clzr8lzrnnw19l8sfvlx1yqn35hk7017z7ab"))))
+    (build-system emacs-build-system)
+    (home-page "https://elpa.nongnu.org/nongnu/bison-mode.html")
+    (synopsis "Major mode for editing Bison, Yacc, and Lex files")
+    (description
+     "This Emacs package provides a major mode for editing Bison, Yacc, and
+Lex files.")
+    (license license:gpl2+)))
+
 (define-public emacs-blackout
   (let ((commit "4bac44671fca4c98d96aa94c79946bf4d4baf0ee")
         (revision "1"))
@@ -27140,8 +27450,7 @@ display of major and minor modes in the mode line.")
            "1np1f51hc3phkl5w02a9a79gl38ra2d535i784fn4pqaasvm0rq8"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-ivy" ,emacs-ivy)
-         ("emacs-dash" ,emacs-dash)))
+       (list emacs-ivy emacs-dash))
       (synopsis "Browse anything in Org mode")
       (description "This package allows Org items to be accessed via the Ivy
 interface.")
@@ -27151,18 +27460,17 @@ interface.")
 (define-public emacs-ivy-posframe
   (package
     (name "emacs-ivy-posframe")
-    (version "0.6.2")
+    (version "0.6.3")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/"
                            "ivy-posframe-" version ".tar"))
        (sha256
-        (base32 "1x6pm0pry2j7yazhxvq1gydbymwll9yg85m8qi4sh8s0pnm0vjzk"))))
+        (base32 "0b498qzaydjrhplx4d7zcrs883dlrhfiz812sv4m3pmhfwifcchh"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-ivy" ,emacs-ivy)
-       ("emacs-posframe" ,emacs-posframe)))
+     (list emacs-ivy emacs-posframe))
     (home-page "https://github.com/tumashu/ivy-posframe")
     (synopsis "Pop a posframe (a child frame) to show Ivy candidates")
     (description
@@ -27171,27 +27479,25 @@ posframe to show its candidate menu.")
     (license license:gpl3+)))
 
 (define-public emacs-shackle
-  (let ((commit "7ccbe513852a1d1700b698547efca14b8940319d")
-        (revision "1"))
-    (package
-      (name "emacs-shackle")
-      (version (git-version "1.0.3" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/wasamasa/shackle")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32
-           "0agsp8ia4irr540r898ifhjqp28n1zsq1pilv1kc272spn3qhvp9"))))
-      (build-system emacs-build-system)
-      (synopsis "Enforce rules for popups")
-      (description "This package provides a global minor mode in which users
+  (package
+    (name "emacs-shackle")
+    (version "1.0.4")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://depp.brause.cc/shackle.git")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0s4br59zpd5qq7z9074ddq9lmwnddq2ixijwi666wp5gxw45fpgg"))))
+    (build-system emacs-build-system)
+    (synopsis "Enforce rules for popups")
+    (description
+     "This package provides a global minor mode in which users
 can specify how popup-displaying functions occupy the screen.")
-      (home-page "https://github.com/wasamasa/shackle")
-      (license license:gpl3+))))
+    (home-page "https://depp.brause.cc/shackle")
+    (license license:gpl3+)))
 
 (define-public emacs-showtip
   (let ((commit "930da302809a4257e8d69425455b29e1cc91949b")
@@ -27233,9 +27539,7 @@ can specify how popup-displaying functions occupy the screen.")
           (base32 "0i1ylvw7p46pkf3yyyzcdmdhsspzymnnnvx8s0i7vynngr5x0vzh"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-popup" ,emacs-popup)
-         ("emacs-pos-tip" ,emacs-pos-tip)
-         ("emacs-showtip" ,emacs-showtip)))
+       (list emacs-popup emacs-pos-tip emacs-showtip))
       (home-page "https://www.emacswiki.org/emacs/download/sdcv.el")
       (synopsis "Emacs interface for @code{sdcv}")
       (description
@@ -27261,8 +27565,7 @@ translation using a tooltip or in a dedicated buffer.")
            "0dkfd3lap2v7b4nckzv8v7hczmzwzhbl75haqkra107ln91ldbwc"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-helm" ,emacs-helm)
-         ("emacs-lacarte" ,emacs-lacarte)))
+       (list emacs-helm emacs-lacarte))
       (synopsis "Helm interface to @code{lacarte.el}")
       (description "This package provides a Helm interface to
 @code{lacarte.el}, a package that displays mode-specific commands as menu
@@ -27288,7 +27591,7 @@ items.")
            "0x7d51a6ljl014zy7mi27vzcqqbcwg9z4drq29fr2ajk82mqhlgd"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)))
+       (list emacs-dash))
       (synopsis "Help functions for Eshell")
       (description "This package provides a @code{run-help} function inspired
 by @code{zsh} as well as @code{eldoc} support.")
@@ -27336,7 +27639,7 @@ within @code{isearch-mode}.")
            "1limw82zd8jz3mhh9rqlmhj4cjhfgybs9argfjid1an3vpyhc85i"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-helm" ,emacs-helm)))
+       (list emacs-helm))
       (synopsis "Mount/unmount volumes in Linux via Helm")
       (description "This package provides a Helm interface to run operations
 on removable volumes in Linux.")
@@ -27361,8 +27664,8 @@ on removable volumes in Linux.")
            "15frl618393bc891d0yi3mdxzvbq790a86vfvp3dyd5riz4ddg95"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-async" ,emacs-async)))
-      (synopsis "Persistent save of @code{elisp} objects.")
+       (list emacs-async))
+      (synopsis "Persistent save of @code{elisp} objects")
       (description "This package provides minor modes for saving Emacs session
 data, including buffers, window configuration, variables, and more.")
       (home-page "https://github.com/thierryvolpiatto/psession")
@@ -27371,7 +27674,7 @@ data, including buffers, window configuration, variables, and more.")
 (define-public emacs-parseedn
   (package
     (name "emacs-parseedn")
-    (version "1.0.4")
+    (version "1.0.6")
     (source
      (origin
        (method git-fetch)
@@ -27380,11 +27683,10 @@ data, including buffers, window configuration, variables, and more.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1cz2bgaddlrcqzra8q50yh90rdl0kpyf5js2vxccdsq6ngr8bnmv"))))
+        (base32 "1xp2d42yvqkimb7a15bv89bj0124lljw9cb36g49m13d7ny4fafn"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-a" ,emacs-a)
-       ("emacs-parseclj" ,emacs-parseclj)))
+     (list emacs-a emacs-parseclj))
     (home-page "https://cider.mx")
     (synopsis "EDN parser for Emacs Lisp")
     (description
@@ -27395,7 +27697,7 @@ It uses parseclj's shift-reduce parser internally.")
 (define-public emacs-parseclj
   (package
     (name "emacs-parseclj")
-    (version "1.0.4")
+    (version "1.0.6")
     (source
      (origin
        (method git-fetch)
@@ -27404,9 +27706,9 @@ It uses parseclj's shift-reduce parser internally.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "15aar5fsci2y8hy045ypdrig4z4kqrd8318im3yzyyf40y1xrz1d"))))
+        (base32 "0n0m3xc2dawgdhb68zznpsbzbbvf9fwgf9v8pzzwa2jncgi1yhh0"))))
     (build-system emacs-build-system)
-    (propagated-inputs `(("emacs-a" ,emacs-a)))
+    (propagated-inputs (list emacs-a))
     (home-page "https://cider.mx")
     (synopsis "Clojure parser for Emacs Lisp")
     (description
@@ -27437,34 +27739,31 @@ or simply disable the mode-line in buffers where it is not very useful.")
     (license license:expat)))
 
 (define-public emacs-helm-cider
-  ;; No new release since March 2018.
-  (let ((commit "9363cc537f06233345aa3af5cd46aa5681ad607b"))
-    (package
-      (name "emacs-helm-cider")
-      (version (git-version "0.4.0" "1" commit))
-      (home-page "https://github.com/clojure-emacs/helm-cider")
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url home-page)
-                      (commit commit)))
-                (file-name (git-file-name name version))
-                (sha256
-                 (base32
-                  "0vfn4smqba1vsshz48ggkj8gs94la0sxb1sq4shrb41qj2x3dci7"))))
-      (build-system emacs-build-system)
-      (propagated-inputs
-       `(("emacs-helm" ,emacs-helm)
-         ("emacs-cider" ,emacs-cider)))
-      (synopsis "Helm interface to Clojure's CIDER")
-      (description "Helm-CIDER adds Helm interfaces to
+  (package
+    (name "emacs-helm-cider")
+    (version "0.5.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/clojure-emacs/helm-cider")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0jjjy68pmmsx0biawyi5581cqh2b4zb0q8f5vs49ihpzn6zc04vk"))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     (list emacs-helm emacs-cider))
+    (home-page "https://github.com/clojure-emacs/helm-cider")
+    (synopsis "Helm interface to Clojure's CIDER")
+    (description "Helm-CIDER adds Helm interfaces to
 @command{cider-apropos}, @command{cider-apropos-documentation},
 @command{cider-browse-ns} (namespaces).
 
 It also provides original Helm commands: @command{helm-cider-spec},
 @command{helm-cider-spec-ns}, @command{helm-cider-repl-history},
 @command{helm-cider-cheatsheet}.")
-      (license license:gpl3+))))
+    (license license:gpl3+)))
 
 (define-public emacs-edn
   ;; No release since February 2016
@@ -27484,7 +27783,7 @@ It also provides original Helm commands: @command{helm-cider-spec},
                   "1xp2hjhn52k6l1g6ypva6dsklpawni7gvjafbz6404f9dyxflh7l"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-peg" ,emacs-peg)))
+       (list emacs-peg))
       (synopsis "Read and write EDN from Elisp")
       (description "This is an Emacs Lisp library for reading and writing the
 data format @code{edn}.  See @url{https://github.com/edn-format/edn}.")
@@ -27507,8 +27806,7 @@ data format @code{edn}.  See @url{https://github.com/edn-format/edn}.")
                   "015b8zxh91ljhqvn6z43gy08di54xcw9skw0i7frj3d7gk984qhl"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-helm" ,emacs-helm)
-         ("emacs-edn" ,emacs-edn)))
+       (list emacs-helm emacs-edn))
       (synopsis "Search help on clojuredocs.org with Helm")
       (description "This package provides a Helm interface to lookup Clojure
 documentation on @url{https://clojuredocs.org} with Helm.
@@ -27539,7 +27837,7 @@ pattern guessed from thing under current cursor position.
          "01lh1df0bnas1p7xlqc4i1jd67f8lxgq0q2zsvx10z8828i76j3v"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-helm" ,emacs-helm)))
+     (list emacs-helm))
     (synopsis "Convenient related-buffer selection for Emacs Helm")
     (description "Helm Selector is a collection of Helm helper functions for
 convenient buffer selection.
@@ -27571,9 +27869,9 @@ used for the creation of a new buffer of mode X.")
            "0msj7nbsb363pxamxi7n2z08cp5jizkpjbwia8f5a161wjglrihs"))))
       (build-system emacs-build-system)
       (inputs
-       `(("wordnet" ,wordnet)))
+       (list wordnet))
       (propagated-inputs
-       `(("emacs-helm" ,emacs-helm)))
+       (list emacs-helm))
       (arguments
        `(#:phases
          (modify-phases %standard-phases
@@ -27596,29 +27894,26 @@ Wordnet.")
       (license license:gpl3+))))
 
 (define-public emacs-helm-xref
-  (let ((commit "23f1174cfca7667d95828dcd388c655a4a9c877d")
-        (revision "1"))
-    (package
-      (name "emacs-helm-xref")
-      (version (git-version "0.5" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/brotzeit/helm-xref")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32
-           "0v0lkabpi1n4hgnp28jk19f7b78yk93ssm0gr0fr25yqx5zskdnk"))))
-      (build-system emacs-build-system)
-      (propagated-inputs
-       `(("emacs-helm" ,emacs-helm)))
-      (home-page "https://github.com/brotzeit/helm-xref")
-      (synopsis "Helm interface for @code{xref}")
-      (description "This package provides a Helm interface for selecting
+  (package
+    (name "emacs-helm-xref")
+    (version "1.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/brotzeit/helm-xref")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0v0wm1x11r1h9p139c5rl0r4s5q6092bmwrsnr2140ddbq34mnvy"))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     (list emacs-helm))
+    (home-page "https://github.com/brotzeit/helm-xref")
+    (synopsis "Helm interface for @code{xref}")
+    (description "This package provides a Helm interface for selecting
 @code{xref} results.")
-      (license license:gpl3+))))
+    (license license:gpl3+)))
 
 (define-public emacs-metal-mercury-mode
   (let ((commit "99e2d8fb7177cae3bfa2dec2910fc28216d5f5a8")
@@ -27639,7 +27934,7 @@ Wordnet.")
          (file-name (git-file-name name version))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)))
+       (list emacs-dash))
       (synopsis "Major mode for editing Mercury files")
       (description
        "Major mode for editing Mercury files.  This is a rewrite of the original
@@ -27705,7 +28000,7 @@ window.")
         (base32 "146qpiigz12zp1823ggxfrx090g0mxs7gz1ba7sa0iq6ibgzwwm9"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-company" ,emacs-company)))
+     (list emacs-company))
     (home-page "https://elpa.gnu.org/packages/company-ebdb.html")
     (synopsis "Company completion backend for EBDB in Message mode")
     (description "@code{company-ebdb} provides Company mode integration for
@@ -27819,7 +28114,7 @@ the current buffer.")
         (base32 "11zpqwh1mlfifbgnvhc63bvnhg340jgxssm3m43hr1sxsyb52lh6"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-switch-buffer-functions" ,emacs-switch-buffer-functions)))
+     (list emacs-switch-buffer-functions))
     (home-page "https://gitlab.com/jgkamat/erc-scrolltoplace")
     (synopsis "ERC module to replace scrolltobottom while using keep-place")
     (description "@code{erc-scrolltoplace} is an ERC module to try
@@ -27853,7 +28148,7 @@ launching other commands/applications from within Emacs, similar to the
 (define-public emacs-no-littering
   (package
     (name "emacs-no-littering")
-    (version "1.2.2")
+    (version "1.2.4")
     (source
      (origin
        (method git-fetch)
@@ -27862,7 +28157,7 @@ launching other commands/applications from within Emacs, similar to the
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1kbbbx1agzcxc5n1b6cavdx3wjxz6mgi9rafja8mk8cyaaiz0rkd"))))
+        (base32 "1gk1l5zk5r8alnzfbfsck5gxcwr55k04rd08sxmb4j9jds6w6zyv"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/emacscollective/no-littering")
     (synopsis "Help keep @file{~/.emacs.d/} clean")
@@ -27966,7 +28261,7 @@ fontifications.")
           (base32 "08zb7vc3v3wdxkzgi902vlc5ybfvm8fxrvm5drnwfsjj9873pbcb"))))
       (build-system emacs-build-system)
       (inputs
-       `(("sqlite" ,sqlite)))
+       (list sqlite))
       (arguments
        `(#:phases
          (modify-phases %standard-phases
@@ -28046,7 +28341,7 @@ variables.")
         (base32 "1rhf2hr345953mkn52i58aiq8j16ps2ckapd5f7jxmhkcpzxxfhk"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-company" ,emacs-company)))
+     (list emacs-company))
     (home-page "https://github.com/dunn/company-emoji/")
     (synopsis "Company completion back-end for emoji")
     (description
@@ -28079,11 +28374,9 @@ emoji.")
              (make-file-writable "exiftool.el")
              (emacs-substitute-variables "exiftool.el"
                ("exiftool-executable"
-                (string-append (assoc-ref inputs "perl-image-exiftool")
-                               "/bin/exiftool")))
-             #t)))))
+                (search-input-file inputs "/bin/exiftool"))))))))
     (inputs
-     `(("perl-image-exiftool" ,perl-image-exiftool)))
+     (list perl-image-exiftool))
     (home-page "https://git.systemreboot.net/exiftool.el/about/")
     (synopsis "Elisp wrapper around ExifTool")
     (description "@code{emacs-exiftool} is an Elisp wrapper around ExifTool.
@@ -28229,8 +28522,7 @@ a @samp{date} keywords, and optionally, a @samp{filetags} keyword.")
                (substitute* "Makefile"
                  (("/bin/rm") (which "rm"))))))))
       (native-inputs
-       `(("emacs-minimal" ,emacs-minimal)
-         ("ruby" ,ruby)))
+       (list emacs-minimal ruby))
       (home-page "https://github.com/skk-dev/ddskk")
       (synopsis "Simple Kana to Kanji conversion program")
       (description
@@ -28238,6 +28530,38 @@ a @samp{date} keywords, and optionally, a @samp{filetags} keyword.")
 conversion program}, a Japanese input method on Emacs.")
       (license license:gpl2+))))
 
+(define-public emacs-ddskk-nicola
+  (package
+    (inherit emacs-ddskk)
+    (name "emacs-ddskk-nicola")
+    (propagated-inputs
+     (list emacs-ddskk))
+    (arguments
+     `(#:make-flags
+       (let ((out (assoc-ref %outputs "out")))
+         (append
+          (list (string-append "PREFIX=" out)
+                (string-append "LISPDIR=" out "/share/emacs/site-lisp"))))
+       #:tests? #f                      ; no tests in this subtree
+       ,@(substitute-keyword-arguments (package-arguments emacs-ddskk)
+           ((#:phases phases)
+            `(modify-phases ,phases
+               (add-after 'unpack 'chdir
+                 (lambda _
+                   (chdir "nicola")
+                   #t))
+               (replace 'configure
+                 (lambda* (#:key outputs #:allow-other-keys)
+                   (make-file-writable "NICOLA-DDSKK-CFG")
+                   (emacs-substitute-sexps "NICOLA-DDSKK-CFG"
+                     ("setq NICOLA-DDSKK_PREFIX" ""))
+                   #t)))))))
+    (synopsis "Nicola layout for Daredevil SKK")
+    (description
+     "Daredevil SKK is a version of @acronym{SKK, Simple Kana to Kanji
+conversion program}, a Japanese input method on Emacs.  This package adds
+support for the Nicola keyboard layout to it.")))
+
 (define-public emacs-objed
   (package
     (name "emacs-objed")
@@ -28290,7 +28614,7 @@ conventions.")
                  (copy-recursively "snippets/haskell-mode" snippets)
                  #t))))))
       (propagated-inputs
-       `(("emacs-yasnippet" ,emacs-yasnippet)))
+       (list emacs-yasnippet))
       (home-page "https://github.com/haskell/haskell-snippets")
       (synopsis "Official collection of YASnippet Haskell snippets for Emacs")
       (description "Haskell-Snippets is a collection of YASnippet Haskell
@@ -28300,7 +28624,7 @@ snippets for Emacs.")
 (define-public emacs-org-roam
   (package
     (name "emacs-org-roam")
-    (version "2.1.0")
+    (version "2.2.0")
     (source
      (origin
        (method git-fetch)
@@ -28309,54 +28633,60 @@ snippets for Emacs.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "092xn0sqc7b7f6pdf7m6c3giqqbh6fq02mfz8qrg0wmx4ds1isqp"))))
+        (base32 "0q3nhw05wnqh1qgggxsj8wki4ihciqlkic2x7qbcsskjqm73j1r7"))))
     (build-system emacs-build-system)
     (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         ;; Move the extensions source files to the top level, which is included in
-         ;; the EMACSLOADPATH.
-         (add-after 'unpack 'move-source-files
-           (lambda _
-             (let ((el-files (find-files "./extensions" ".*\\.el$")))
-               (for-each (lambda (f)
-                           (rename-file f (basename f)))
-                         el-files))
-             #t))
-         (add-after 'install 'install-image
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out")))
-               (install-file "doc/images/org-ref-citelink.png"
-                             (string-append out "/share/info/images")))))
-         (add-after 'install-image 'make-info
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out")))
-               (with-directory-excursion "doc"
-                 (invoke "makeinfo" "-o" "org-roam.info" "org-roam.texi")
-                 (install-file "org-roam.info"
-                               (string-append out "/share/info")))))))))
-       (native-inputs
-        `(("texinfo" ,texinfo)))
-       (propagated-inputs
-        `(("emacs-dash" ,emacs-dash)
-          ("emacs-emacsql-sqlite3" ,emacs-emacsql-sqlite3)
-          ("emacs-f" ,emacs-f)
-          ("emacs-magit" ,emacs-magit)
-          ("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
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          ;; Move the extensions source files to the top level, which
+          ;; is included in the EMACSLOADPATH.
+          (add-after 'unpack 'move-source-files
+            (lambda _
+              (let ((el-files (find-files "./extensions" ".*\\.el$")))
+                (for-each (lambda (f)
+                            (rename-file f (basename f)))
+                          el-files))))
+          (add-after 'move-source-files 'patch-exec-paths
+            (lambda* (#:key inputs #:allow-other-keys)
+              (make-file-writable "org-roam-graph.el")
+              (emacs-substitute-variables "org-roam-graph.el"
+                ("org-roam-graph-executable"
+                 (search-input-file inputs "/bin/dot")))))
+          (add-after 'install 'install-image
+            (lambda* (#:key outputs #:allow-other-keys)
+              (install-file "doc/images/org-ref-citelink.png"
+                            (string-append #$output "/share/info/images"))))
+          (add-after 'install-image 'make-info
+            (lambda* (#:key outputs #:allow-other-keys)
+              (with-directory-excursion "doc"
+                (invoke "makeinfo" "-o" "org-roam.info" "org-roam.texi")
+                (install-file "org-roam.info"
+                              (string-append #$output "/share/info"))))))))
+    (inputs
+     (list graphviz))
+    (native-inputs
+     (list texinfo))
+    (propagated-inputs
+     (list emacs-dash
+           emacs-emacsql-sqlite3
+           emacs-f
+           emacs-magit
+           emacs-org
+           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
     (name "emacs-org-roam-bibtex")
-    (version "0.6.0")
+    (version "0.6.2")
     (source
      (origin
        (method git-fetch)
@@ -28365,12 +28695,10 @@ personal wiki.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "04vc2w7x2lyamp0qa1y274smsf9x2qxr1igrpz9f4y5ha5332px5"))))
+        (base32 "00zclyh600865ys7pqiryp3k5li9h20bypvfp2bzqi3588hn9n4i"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-helm-bibtex" ,emacs-helm-bibtex)
-       ("emacs-org-ref" ,emacs-org-ref)
-       ("emacs-org-roam" ,emacs-org-roam)))
+     (list emacs-helm-bibtex emacs-org-ref emacs-org-roam))
     (home-page "https://github.com/org-roam/org-roam-bibtex")
     (synopsis "Connector between Org Roam, BibTeX-completion, and Org Ref")
     (description
@@ -28394,10 +28722,9 @@ opening Org Ref's @code{cite:} links.")
                (base32
                 "0z2frp5mn3lp2xskwanw2rncrwa50x3aphy87vfxmhx4fqlqrzy8"))))
     (inputs
-     `(("emacs-cort" ,emacs-cort)
-       ("emacs-with-simulated-input" ,emacs-with-simulated-input)))
+     (list emacs-cort emacs-with-simulated-input))
     (propagated-inputs
-     `(("emacs-mustache" ,emacs-mustache)))
+     (list emacs-mustache))
     (arguments
      ;; FIXME: Tests fail with "Wrong type argument: sequencep, :equal".  It
      ;; seems to be an issue with Cort library.
@@ -28440,7 +28767,7 @@ comments or emails.")
 (define-public emacs-trashed
   (package
     (name "emacs-trashed")
-    (version "2.1.2")
+    (version "2.1.3")
     (source
      (origin
        (method git-fetch)
@@ -28449,7 +28776,7 @@ comments or emails.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0lfza55nbb62nmr27cwpcz2ad1vm95piq4nfd8zvkwqbn6klwmm6"))))
+        (base32 "08v7g2zgrad0r0n4pla8j3i2aql46byq82jr712cvxhydd5gnzf9"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/shingo256/trashed/")
     (synopsis "View and edit system trash can in Emacs")
@@ -28527,9 +28854,9 @@ restore that occurrence of the placeholder and move to the next.")
                          (basic-save-buffer)))
                #t))))))
     (inputs
-     `(("plantuml" ,plantuml)))
+     (list plantuml))
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)))
+     (list emacs-dash))
     (build-system emacs-build-system)
     (home-page "https://github.com/skuro/plantuml-mode")
     (synopsis "Major mode for editing PlantUML sources")
@@ -28553,7 +28880,7 @@ or region and use of locally installed binaries.")
                 "02q531c9wvdwflhggflnci4a36h2bb90bq25bbhw6i2lvrd9sk55"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-s" ,emacs-s)))
+     (list emacs-s))
     (arguments
      `(#:tests? #t
        #:test-command '("emacs" "-Q" "-batch" "-L" "."
@@ -28598,26 +28925,29 @@ rather excellent completion provided by both Bash and Zsh.")
     (license license:gpl3+)))
 
 (define-public emacs-shell-command+
-  (package
-    (name "emacs-shell-command+")
-    (version "2.2.0")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://git.sr.ht/~pkal/shell-command-plus")
-                    (commit version)))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32 "1micvz6smhjma7qbka8h3w0crb3sgrxf9lz2548iqfgww50gb0lj"))))
-    (build-system emacs-build-system)
-    (home-page "http://elpa.gnu.org/packages/shell-command+.html")
-    (synopsis "Extended Emacs @code{shell-command}")
-    (description
-     "Shell-command+ is a @code{shell-command} substitute that extends the
+  ;; XXX: Upstream did not tag last release.  The commit below corresponds to
+  ;; the exact version bump.
+  (let ((commit "bf744c63bbd1e3bbb93407bd32d6da670b23e67e"))
+    (package
+      (name "emacs-shell-command+")
+      (version "2.3.2")
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://git.sr.ht/~pkal/shell-command-plus")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32 "0prlvcryq5ngrzn5f45rkw09wbr99v7nnwps2bjrjc3wvr2rp6h0"))))
+      (build-system emacs-build-system)
+      (home-page "http://elpa.gnu.org/packages/shell-command+.html")
+      (synopsis "Extended Emacs @code{shell-command}")
+      (description
+       "Shell-command+ is a @code{shell-command} substitute that extends the
 regular Emacs command with several features.  You can for example count all
 the lines in a buffer with @code{> wc -l}, or delete all lower case letters in
 the selected region with @code{| tr -d a-z}.")
-    (license license:gpl3+)))
+      (license license:gpl3+))))
 
 (define-public emacs-shell-pop
   (let ((commit "4b4394037940a890a313d715d203d9ead2d156a6")
@@ -28663,7 +28993,7 @@ you use some other configuration.")
           (base32 "0yv38bqdp6b614lbj4v408vv5mlic3vs1v7266xrfxm1cm903apj"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-transient" ,emacs-transient)))
+       (list emacs-transient))
       (home-page "https://github.com/TatriX/tshell")
       (synopsis "Experimental buffer-oriented Emacs shell")
       (description
@@ -28674,7 +29004,7 @@ and Emacs lisp commands.")
 (define-public emacs-extmap
   (package
     (name "emacs-extmap")
-    (version "1.1.1")
+    (version "1.2.1")
     (source
      (origin
        (method git-fetch)
@@ -28683,12 +29013,11 @@ and Emacs lisp commands.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32
-         "09kia3mr4si8kn46kyiza9nl669b22vmgc70ng3mqz742lph5siw"))))
+        (base32 "00415w4l9wfpw9v0a35dm1av2w1m6s36yr9f9286jg844x6l375f"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/doublep/extmap")
     (synopsis "Externally-stored constant mapping for Emacs Lisp")
-    (description "A very simple package that lets you build a
+    (description "Extmap is a very simple package that lets you build a
 read-only, constant database that maps Emacs Lisp symbols to
 arbitrary Emacs Lisp objects.")
     (license license:gpl3+)))
@@ -28719,9 +29048,7 @@ arbitrary Emacs Lisp objects.")
                        '("csound-font-lock.el"))
              #t)))))
     (inputs
-     `(("emacs-highlight" ,emacs-highlight)
-       ("emacs-multi" ,emacs-multi)
-       ("emacs-shut-up" ,emacs-shut-up)))
+     (list emacs-highlight emacs-multi emacs-shut-up))
     (home-page "https://github.com/hlolli/csound-mode")
     (synopsis "Emacs major mode for coding in CSound")
     (description "Provides both a basic major mode for editing
@@ -28805,7 +29132,7 @@ picked up when copy-pasting text from buffer to buffer.")
                (copy-recursively "assets" assets)
                #t))))))
     (propagated-inputs
-     `(("emacs-xmlgen" ,emacs-xmlgen)))
+     (list emacs-xmlgen))
     (home-page "https://sr.ht/~brettgilio/org-webring")
     (synopsis "Generate webrings for Org-based sites / blogs")
     (description "Org-webring is an alternative implementation of a
@@ -28816,6 +29143,26 @@ web feed files and correctly parse and format the elements to be
 displayed for sharing.")
     (license license:gpl3+)))
 
+(define-public emacs-orglink
+  (package
+    (name "emacs-orglink")
+    (version "1.2.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/tarsius/orglink")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1619ly90vh2lla5rbw87a4n0rfal3wpbf7005jjiyv2ay88nc7l9"))))
+    (build-system emacs-build-system)
+    (home-page "https://github.com/tarsius/orglink")
+    (synopsis "Use Org mode links in other modes")
+    (description "This library implements support for some Org mode link types
+in other major modes.  Links can be opened and edited like in Org mode.")
+    (license license:gpl3+)))
+
 (define-public emacs-scpaste
   (let ((commit "cd4fa0aafecd839736e0b6cba68b4fc4d7045472")
         (revision "0"))
@@ -28834,7 +29181,7 @@ displayed for sharing.")
            "1nvwbwl26z03963g9c82b3ggm39r95z1vp7c9qsa9mjm46dyq27w"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-htmlize" ,emacs-htmlize)))
+       (list emacs-htmlize))
       (home-page "https://git.sr.ht/~technomancy/scpaste")
       (synopsis "Emacs-based static HTML pastebin")
       (description "This library will place an HTML copy of a
@@ -28860,8 +29207,7 @@ publicly-accessible HTTP server.")
          "118cgw5lsffqdqz95mnkw36mmnsbg9m52r2np4m7v14mjjwr9fby"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-company" ,emacs-company)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-company emacs-s))
     (home-page "https://github.com/TheBB/company-reftex")
     (synopsis "RefTeX backends for company-mode")
     (description "This package provides company-mode backends for completing
@@ -28886,7 +29232,7 @@ included with Emacs.")
                   "13kdwi4d1pvba6wv9yn1s0dl4cnq61zwf3j647d1s5ybqlrw5f4r"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-company" ,emacs-company)))
+       (list emacs-company))
       (home-page "https://github.com/xenodium/company-org-block")
       (synopsis "Emacs @code{company-complete} for Org blocks")
       (description
@@ -28912,8 +29258,7 @@ included with Emacs.")
           (base32 "1qi092mw2n08v6yr0j6hlpx0pnlcnhxjqbsrlw9pn4yin6zk91yp"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("dash" ,emacs-dash)
-         ("s" ,emacs-s)))
+       (list emacs-dash emacs-s))
       (home-page "https://github.com/plexus/html-to-hiccup")
       (synopsis "Turn HTML into Hiccup syntax")
       (description
@@ -28928,7 +29273,7 @@ web development.")
 (define-public emacs-iter2
   (package
     (name "emacs-iter2")
-    (version "1.0")
+    (version "1.1")
     (source
      (origin
        (method git-fetch)
@@ -28937,7 +29282,7 @@ web development.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0gaq3z2v1q4r9mkyq71dzmqakhi0p8g7ph4z0n3a11rvyc3z9ykx"))))
+        (base32 "12flc98nv353cqr9qbkasgdmiyf9c3iw4apzh899xw857j1h5qdr"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/doublep/iter2")
     (synopsis "Reimplementation of Elisp generators")
@@ -28995,8 +29340,7 @@ faithfully.  See @url{https://github.com/then/promise}.
         (base32 "0aav9qdswnw7ynqlzn0sm34as5fj2d85syxgg8zjabzp6646ay29"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("promise" ,emacs-promise)
-       ("iter2" ,emacs-iter2)))
+     (list emacs-promise emacs-iter2))
     (home-page "https://github.com/chuntaro/emacs-async-await")
     (synopsis "Async/Await for Emacs")
     (description "This is a simple implementation of Async/Await inspired by
@@ -29020,8 +29364,7 @@ the TypeScript implementation.")
           (base32 "02a4j0yy7330kfr3rd3k2agdj01ii6989nki598anbamq6xvj5ql"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("async-await" ,emacs-async-await)
-         ("request" ,emacs-request)))
+       (list emacs-async-await emacs-request))
       (home-page "https://github.com/4hiziri/rocket-chat")
       (synopsis "Emacs Rocket.chat client")
       (description "This package provides an Emacs client for the Rocket.chat
@@ -29107,8 +29450,6 @@ syntax highlighting and UI components.")
          (sha256
           (base32 "0g0y7q62667j0p32md1h6zb2cap9fga9qgdg7138xwjqnk0328v7"))))
       (build-system emacs-build-system)
-      (propagated-inputs
-       `(("janet-mode" ,emacs-janet-mode)))
       (arguments
        `(#:phases
          (modify-phases %standard-phases
@@ -29116,8 +29457,9 @@ syntax highlighting and UI components.")
              (lambda _
                (make-file-writable "inf-janet.el")
                (emacs-substitute-variables "inf-janet.el"
-                 ("inf-janet-program" "janet"))
-               #t)))))
+                 ("inf-janet-program" "janet")))))))
+      (propagated-inputs
+       (list emacs-janet-mode))
       (home-page "https://github.com/velkyel/inf-janet")
       (synopsis "Run an external Janet process in an Emacs buffer")
       (description
@@ -29148,14 +29490,14 @@ work on alists, hash-table and arrays.  All functions are prefixed with
 (define-public emacs-xref
   (package
     (name "emacs-xref")
-    (version "1.2.2")
+    (version "1.3.2")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/xref-"
                            version ".tar"))
        (sha256
-        (base32 "14kdy8blhs6lwg349l9lmv0bbpybgi9nsg2iic3v87j4jyi41ljm"))))
+        (base32 "13bsaxdxwn14plaam0hsrswngh3rm2k29v5ybjgjyjy4d5vwz78j"))))
     (build-system emacs-build-system)
     (home-page "http://elpa.gnu.org/packages/xref.html")
     (synopsis "Cross-referencing commands")
@@ -29179,7 +29521,7 @@ commands, in particular @code{find-definition}.")
         (base32 "1vaikknjzmhpszyi4yxjjkp1ihgmhpbnbx1s5pjy4mnhl1ibi33b"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-map" ,emacs-map)))
+     (list emacs-map))
     (home-page "https://github.com/alphapapa/burly.el")
     (synopsis "Save and restore frame/window configurations with buffers")
     (description "This package provides tools to save and restore frame and
@@ -29227,8 +29569,7 @@ rules about where space should be left to separate words and parentheses.")
         (base32 "0b9hf20iah3ym2d4kz67k0kb48dq0442zxw4zmc03zg3sxfdxh0x"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-transient" ,emacs-transient)))
+     (list emacs-dash emacs-transient))
     (home-page "https://github.com/MaximeWack/seriesTracker")
     (synopsis "Keep track of the TV shows you watch from Emacs")
     (description
@@ -29243,7 +29584,7 @@ released, and track their progress in watching a series.")
 (define-public emacs-webpaste
   (package
     (name "emacs-webpaste")
-    (version "3.2.1")
+    (version "3.2.2")
     (source
      (origin
        (method git-fetch)
@@ -29252,8 +29593,7 @@ released, and track their progress in watching a series.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32
-         "1d481pdnh7cnbyka7wn59czlci63zwfqms8n515svg92qm573ckd"))))
+        (base32 "07hj9nr7x6c9w2dnvc58cfbprgp9cqzdxflp5qlpglzdw0bi9s3c"))))
     (build-system emacs-build-system)
     (arguments
      `(#:tests? #t
@@ -29270,9 +29610,9 @@ released, and track their progress in watching a series.")
                                 "tests/integration/test-webpaste-providers.el")
                (("describe") "xdescribe")))))))
     (native-inputs
-     `(("emacs-buttercup" ,emacs-buttercup)))
+     (list emacs-buttercup))
     (propagated-inputs
-     `(("emacs-request" ,emacs-request)))
+     (list emacs-request))
     (home-page "https://github.com/etu/webpaste.el")
     (synopsis "Paste to pastebin-like services")
     (description "This mode pastes whole buffers or parts of buffers
@@ -29305,13 +29645,9 @@ and preferred services can easily be configured.")
          '("emacs" "--no-init-file" "--batch"
            "--eval=(require 'ecukes)" "--eval=(ecukes)")))
       (native-inputs
-       `(("emacs-ecukes" ,emacs-ecukes)
-         ("emacs-espuds" ,emacs-espuds)
-         ("emacs-undercover" ,emacs-undercover)
-         ("openjdk" ,openjdk9)))
+       (list emacs-ecukes emacs-espuds emacs-undercover openjdk9))
       (propagated-inputs
-       `(("emacs-origami" ,emacs-origami-el)
-         ("emacs-s" ,emacs-s)))
+       (list emacs-origami-el emacs-s))
       (synopsis "Major mode for viewing and managing Java keystores")
       (description
        "This package provides an Elisp wrapper around the Java
@@ -29332,8 +29668,7 @@ and preferred services can easily be configured.")
         (base32 "1q5caxm4rnh4jy5n88dhkdbx1afsshmfki5dl8xsqbdb3y0zq7yi"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-ivy" ,emacs-ivy)
-       ("emacs-avy" ,emacs-avy)))
+     (list emacs-ivy emacs-avy))
     (home-page "https://github.com/abo-abo/swiper")
     (synopsis "Avy integration for Ivy")
     (description
@@ -29343,7 +29678,7 @@ and preferred services can easily be configured.")
 (define-public emacs-vertico
   (package
     (name "emacs-vertico")
-    (version "0.14")
+    (version "0.19")
     (source
      (origin
        (method git-fetch)
@@ -29352,7 +29687,7 @@ and preferred services can easily be configured.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0rddk76ih44b574lsr6d6r9wa2l7c9zlb9kcyw5xvly17ciiq16h"))))
+        (base32 "1q167rwz2g58p0xrdn41vq5knmm5s6k60imnmgiprx4qz9dik2vg"))))
     (build-system emacs-build-system)
     (arguments
      `(#:phases
@@ -29364,10 +29699,9 @@ and preferred services can easily be configured.")
              (let ((el-files (find-files "./extensions" ".*\\.el$")))
                (for-each (lambda (f)
                            (rename-file f (basename f)))
-                         el-files))
-             #t)))))
+                         el-files)))))))
     (native-inputs
-     `(("texinfo" ,texinfo)))
+     (list texinfo))
     (home-page "https://github.com/minad/vertico")
     (synopsis "Vertical interactive completion")
     (description
@@ -29414,8 +29748,7 @@ files, providing syntax highlighting and indentation rules.")
         (base32 "06rln9bnq5hli5rqlm47fb68b8llpqrmzwqqv4rn7mx3854i9a5x"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-ivy" ,emacs-ivy)
-       ("emacs-hydra" ,emacs-hydra)))
+     (list emacs-ivy emacs-hydra))
     (home-page "https://github.com/abo-abo/swiper")
     (synopsis "Additional key bindings for Ivy")
     (description
@@ -29440,10 +29773,10 @@ shorter than usual, using mostly unprefixed keys.")
          "0507acyr9h4646scx316niq27vir6hl2gsgz7wdbiw0cb2drfkd1"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-yaml-mode" ,emacs-yaml-mode)))
+     (list emacs-yaml-mode))
     (home-page "https://github.com/tom-tan/cwl-mode")
     (synopsis "Emacs mode for @acronym{CWL, Common Workflow Language} files")
-    (description "This packages provides a major mode for editing
+    (description "This package provides a major mode for editing
 @acronym{CWL, Common Workflow Language} files.")
     (license license:gpl3+)))
 
@@ -29471,7 +29804,7 @@ dict.org) from within Emacs.")
 (define-public emacs-multitran
   (package
     (name "emacs-multitran")
-    (version "0.4.11")
+    (version "0.4.14")
     (source
      (origin
        (method git-fetch)
@@ -29480,7 +29813,7 @@ dict.org) from within Emacs.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0iqkgs3rrkhbj2mind4aa4qv7bf7vflnkdysd39b50jbwd7rv4fx"))))
+        (base32 "13lmhp2vm953s4phqdd119kp7s3p0kb3kqz4z6g3ga6m6py3gq3i"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/zevlg/multitran.el")
     (synopsis "Emacs interface to the multitran.com online dictionary")
@@ -29503,7 +29836,7 @@ to the @url{https://multitran.com} online dictionary.")
         (base32 "0ky167xh1hrmqsldybzjhyqjizgjzs1grn5mf8sm2j9qwcvjw2zv"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-s" ,emacs-s)))
+     (list emacs-s))
     (home-page "http://www.github.com/brunchboy/kibit-helper")
     (synopsis "Use the Kibit Leiningen plugin from Emacs")
     (description
@@ -29511,6 +29844,28 @@ to the @url{https://multitran.com} online dictionary.")
 for detecting and improve non-idiomatic Clojure source code.")
     (license license:gpl3+)))
 
+(define-public emacs-mint-mode
+  (package
+    (name "emacs-mint-mode")
+    (version "1.0.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/creatorrr/emacs-mint-mode")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1v8mp1k24lzvc0mh9l4k3fwzr4sr87f5p9ahpy7263pcbvcy11vl"))))
+    (build-system emacs-build-system)
+    (arguments '(#:include '("\\.el$" "\\.txt$")))
+    (home-page "https://github.com/creatorrr/emacs-mint-mode")
+    (synopsis "Major mode for Mint language")
+    (description
+     "Mint mode provides syntax highlighting, basic keyword auto-completion,
+and format on save for Mint programming language.")
+    (license license:gpl3+)))
+
 (define-public emacs-seeing-is-believing
   (let ((version "1.2.0") ; from .el file
         (commit "fbbe246c0fda87bb26227bb826eebadb418a220f")
@@ -29561,3 +29916,71 @@ current region or entire buffer.")
 It includes syntax highlighting, automatic indentation, and imenu integration.
 Unlike Emacs' generic ASM mode, it understands NASM-specific syntax.")
     (license license:unlicense)))
+
+(define-public emacs-global-tags
+  (let ((commit "06db25d91cc8bfb5e24e02adc04de1226c7e742d")
+        (revision "0"))
+    (package
+      (name "emacs-global-tags")
+      (version (git-version "0.7" revision commit))
+      (home-page "https://git.launchpad.net/global-tags.el/")
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url home-page)
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1q30cbqq0h1gfwlcbnx9s930li7w7a0y8sx2ivbvvyyc2j5gsk4j"))))
+      (build-system emacs-build-system)
+      (propagated-inputs
+       (list emacs-async emacs-ht))
+      (synopsis "Testeable Emacs Lisp API that wraps around GNU Global")
+      (description "This package provides a testeable Emacs Lisp API that
+wraps GNU Global calls and integration to editor using this API with
+project.el and xref.el.")
+      (license license:gpl3+))))
+
+(define-public emacs-setup
+  (package
+    (name "emacs-setup")
+    (version "1.2.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append "https://elpa.gnu.org/packages/setup-"
+                            version ".tar"))
+        (sha256
+          (base32 "1fyzkm42gsvsjpk3vahfb7asfldarixm0wsw3g66q3ad0r7cbjnz"))))
+    (build-system emacs-build-system)
+    (home-page "https://git.sr.ht/~pkal/setup")
+    (synopsis "Helpful configuration macro")
+    (description
+"The @code{setup} macro simplifies repetitive configuration patterns, by
+providing context-sensitive local macros in @code{setup} bodies.  These macros
+can be mixed with regular elisp code without any issues, allowing for
+flexible and terse configurations.  The list of local macros can be
+extended by the user via @code{setup-define}.  A list of currently known
+local macros are documented in the docstring for @code{setup}.")
+    (license license:gpl3+)))
+
+(define-public emacs-fennel-mode
+  (package
+    (name "emacs-fennel-mode")
+    (version "0.4.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://gitlab.com/technomancy/fennel-mode")
+             (commit version)))
+       (sha256
+        (base32 "0dwas3ivhxdyw6njkcadc8c17cirq325cmby04qls8zkmrvlil1w"))))
+    (build-system emacs-build-system)
+    (home-page "https://gitlab.com/technomancy/fennel-mode")
+    (synopsis "Emacs major-mode for editing Fennel code")
+    (description
+     "Fennel mode provides font-lock, indentation, navigation, and REPL for
+ Fennel code within Emacs.")
+    (license license:gpl3+)))
diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm
index 6d9950d068..bfb3f9790e 100644
--- a/gnu/packages/emacs.scm
+++ b/gnu/packages/emacs.scm
@@ -18,7 +18,7 @@
 ;;; 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 Liliana Marie Prikler <liliana.prikler@gmail.com>
+;;; Copyright © 2019, 2021 Liliana Marie Prikler <liliana.prikler@gmail.com>
 ;;; Copyright © 2019 Amin Bandali <bandali@gnu.org>
 ;;; Copyright © 2020 Jack Hill <jackhill@jackhill.us>
 ;;; Copyright © 2020 Morgan Smith <Morgan.J.Smith@outlook.com>
@@ -54,6 +54,7 @@
   #:use-module (gnu packages fribidi)
   #:use-module (gnu packages gd)
   #:use-module (gnu packages gettext)
+  #:use-module (gnu packages ghostscript)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)     ; for librsvg
   #:use-module (gnu packages gtk)
@@ -63,6 +64,7 @@
   #:use-module (gnu packages mail)      ; for mailutils
   #:use-module (gnu packages multiprecision)
   #:use-module (gnu packages ncurses)
+  #:use-module (gnu packages pdf)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages tls)
@@ -71,6 +73,7 @@
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
   #:use-module (guix utils)
+  #:use-module (ice-9 match)
   #:use-module (srfi srfi-1))
 
 (define-public emacs
@@ -128,7 +131,7 @@
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-program-file-names
-           (lambda _
+           (lambda* (#:key inputs #:allow-other-keys)
              (substitute* '("src/callproc.c"
                             "lisp/term.el"
                             "lisp/htmlfontify.el"
@@ -136,6 +139,23 @@
                             "lisp/progmodes/sh-script.el")
                (("\"/bin/sh\"")
                 (format #f "~s" (which "sh"))))
+             (substitute* "lisp/doc-view.el"
+               (("\"(gs|dvipdf|ps2pdf)\"" all what)
+                (let ((ghostscript (assoc-ref inputs "ghostscript")))
+                  (if ghostscript
+                      (string-append "\"" ghostscript "/bin/" what "\"")
+                      all)))
+               (("\"(pdftotext)\"" all what)
+                (let ((poppler (assoc-ref inputs "poppler")))
+                  (if poppler
+                      (string-append "\"" poppler "/bin/" what "\"")
+                      all))))
+             ;; match ".gvfs-fuse-daemon-real" and ".gvfsd-fuse-real"
+             ;; respectively when looking for GVFS processes.
+             (substitute* "lisp/net/tramp-gvfs.el"
+               (("\\(tramp-compat-process-running-p \"(.*)\"\\)" all process)
+                (format #f "(or ~a (tramp-compat-process-running-p ~s))"
+                        all (string-append "." process "-real"))))
              #t))
          (add-before 'configure 'fix-/bin/pwd
            (lambda _
@@ -166,8 +186,11 @@
                (with-output-to-file (string-append lisp-dir "/site-start.el")
                  (lambda ()
                    (display
-                    (string-append "(when (require 'guix-emacs nil t)\n"
-                                   "  (guix-emacs-autoload-packages))\n"))))
+                    (string-append
+                     "(when (require 'guix-emacs nil t)\n"
+                     "  (guix-emacs-autoload-packages)\n"
+                     "  (advice-add 'package-load-all-descriptors"
+                     " :after #'guix-emacs-load-package-descriptors))"))))
                ;; Remove the extraneous subdirs.el file, as it causes Emacs to
                ;; add recursively all the the sub-directories of a profile's
                ;; share/emacs/site-lisp union when added to EMACSLOADPATH,
@@ -182,15 +205,13 @@
            (lambda* (#:key outputs target #:allow-other-keys)
              (let* ((libexec (string-append (assoc-ref outputs "out")
                                             "/libexec"))
-                    ;; each of these find-files should return one file
-                    (pdmp (find-files libexec "^emacs\\.pdmp$"))
-                    (pdmp-real (find-files libexec
-                                           "^\\.emacs\\.pdmp-real$")))
-               (for-each (lambda (wrapper real)
-                           (delete-file wrapper)
-                           (rename-file real wrapper))
-                         pdmp pdmp-real))
-             #t))
+                    ;; each of these ought to only match a single file,
+                    ;; but even if not (find-files) sorts by string<,
+                    ;; so the Nth element in one maps to the Nth element of
+                    ;; the other
+                    (pdmp (find-files libexec "\\.pdmp$"))
+                    (pdmp-real (find-files libexec "\\.pdmp-real$")))
+               (for-each rename-file pdmp-real pdmp))))
          (add-after 'glib-or-gtk-wrap 'strip-double-wrap
            (lambda* (#:key outputs #:allow-other-keys)
              ;; Directly copy emacs-X.Y to emacs, so that it is not wrapped
@@ -224,16 +245,7 @@
                             ;; environment variables from emacs.
                             ;; Likewise, we don't need to patch helper binaries
                             ;; like etags, ctags or ebrowse.
-                            "^emacs(-[0-9]+(\\.[0-9]+)*)?$"))
-               #t)))
-         (add-before 'reset-gzip-timestamps 'make-compressed-files-writable
-           ;; The 'reset-gzip-timestamps phase will throw a permission error
-           ;; if gzip files aren't writable then.  This phase is needed when
-           ;; building from a git checkout.
-           (lambda _
-             (for-each make-file-writable
-                       (find-files %output ".*\\.t?gz$"))
-             #t)))))
+                            "^emacs(-[0-9]+(\\.[0-9]+)*)?$"))))))))
     (inputs
      `(("gnutls" ,gnutls)
        ("ncurses" ,ncurses)
@@ -260,13 +272,16 @@
        ("acl" ,acl)
        ("jansson" ,jansson)
        ("gmp" ,gmp)
+       ("ghostscript" ,ghostscript)
+       ("poppler" ,poppler)
 
        ;; When looking for libpng `configure' links with `-lpng -lz', so we
        ;; must also provide zlib as an input.
        ("libpng" ,libpng)
        ("zlib" ,zlib)
-
-       ("librsvg" ,librsvg)
+       ("librsvg" ,@(if (target-x86-64?)
+                         (list librsvg-bootstrap)
+                         (list librsvg-2.40)))
        ("libxpm" ,libxpm)
        ("libxml2" ,libxml2)
        ("libice" ,libice)
@@ -322,8 +337,8 @@ languages.")
           (base32
            "0igjm9kwiswn2dpiy2k9xikbdfc7njs07ry48fqz70anljj8y7y3"))))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ,@(package-native-inputs emacs))))))
+       (modify-inputs (package-native-inputs emacs)
+         (prepend autoconf))))))
 
 (define-public emacs-next-pgtk
   (let ((commit "ae18c8ec4f0ef37c8c9cda473770ff47e41291e2")
@@ -347,10 +362,9 @@ languages.")
          ((#:configure-flags flags ''())
           `(cons* "--with-pgtk" "--with-xwidgets" ,flags))))
       (propagated-inputs
-       `(("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-         ("glib-networking" ,glib-networking)))
+       (list gsettings-desktop-schemas glib-networking))
       (inputs
-       `(("webkitgtk" ,webkitgtk)
+       `(("webkitgtk" ,webkitgtk-with-libsoup2)
          ,@(package-inputs emacs-next)))
       (home-page "https://github.com/masm11/emacs")
       (synopsis "Emacs text editor with @code{pgtk} and @code{xwidgets} support")
@@ -396,7 +410,7 @@ editor (with xwidgets support)")
            (delete 'restore-emacs-pdmp)
            (delete 'strip-double-wrap)))))
     (inputs
-     `(("webkitgtk" ,webkitgtk)
+     `(("webkitgtk" ,webkitgtk-with-libsoup2)
        ("libxcomposite" ,libxcomposite)
        ,@(package-inputs emacs)))))
 
@@ -541,12 +555,12 @@ This package contains the library database.")
          "0jp61y09xqj10mclpip48qlfhniw8gwy8b28cbzxy8hq8pkwmfkq"))))
     (build-system gnu-build-system)
     (inputs
-     `(("fribidi" ,fribidi)
-       ("gd" ,gd)
-       ("libotf" ,libotf)
-       ("libxft" ,libxft)
-       ("libxml2" ,libxml2)
-       ("m17n-db" ,m17n-db)))
+     (list fribidi
+           gd
+           libotf
+           libxft
+           libxml2
+           m17n-db))
     (arguments
      `(#:parallel-build? #f))
     ;; With `guix lint' the home-page URI returns a small page saying
diff --git a/gnu/packages/embedded.scm b/gnu/packages/embedded.scm
index f388c11c3d..f7573618b9 100644
--- a/gnu/packages/embedded.scm
+++ b/gnu/packages/embedded.scm
@@ -8,7 +8,9 @@
 ;;; 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 © 2020, 2021 Simon South <simon@simonsouth.net>
 ;;; Copyright © 2021 Morgan Smith <Morgan.J.Smith@outlook.com>
+;;; Copyright © 2022 Mathieu Othacehe <othacehe@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -43,6 +45,7 @@
   #:use-module ((gnu packages base) #:prefix base:)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages boost)
+  #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages cross-base)
   #:use-module (gnu packages dejagnu)
@@ -57,9 +60,11 @@
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-crypto)
+  #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages swig)
   #:use-module (gnu packages texinfo)
+  #:use-module (gnu packages version-control)
   #:use-module (gnu packages xorg)
   #:use-module (srfi srfi-1))
 
@@ -294,9 +299,9 @@ usable on embedded products.")
            (origin-patches (package-source gcc-7))
            (search-patches "gcc-7-cross-environment-variables.patch")))))
       (native-inputs
-       `(("flex" ,flex)
-         ("isl" ,isl-0.18)
-         ,@(alist-delete "isl" (package-native-inputs xgcc))))
+       (modify-inputs (package-native-inputs xgcc)
+         (delete "isl")
+         (prepend flex isl-0.18)))
       (arguments
        (substitute-keyword-arguments (package-arguments xgcc)
          ((#:phases phases)
@@ -516,12 +521,9 @@ languages are C and C++.")
                 "0ndyfh51hiqyv2yscpj6qd091w7myxxjid3a6rx8f6k233vy826q"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
-     `(("libusb" ,libusb)))
+     (list libusb))
     (home-page "https://repo.or.cz/w/libjaylink.git")
     (synopsis "Library to interface Segger J-Link devices")
     (description "libjaylink is a shared library written in C to access
@@ -559,7 +561,7 @@ SEGGER J-Link and compatible devices.")
          )))
     (native-inputs
      ;; For tests.
-     `(("inetutils" ,inetutils)))       ; for hostname
+     (list inetutils))       ; for hostname
     (home-page "http://jim.tcl.tk/index.html")
     (synopsis "Small footprint Tcl implementation")
     (description "Jim is a small footprint implementation of the Tcl programming
@@ -567,73 +569,70 @@ language.")
     (license license:bsd-2)))
 
 (define-public openocd
-  (let ((commit "9a877a83a1c8b1f105cdc0de46c5cbc4d9e8799e")
-        (revision "0"))
-    (package
-      (name "openocd")
-      (version (string-append "0.10.0-" revision "."
-                              (string-take commit 7)))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://git.code.sf.net/p/openocd/code")
-                      (commit commit)))
-                (file-name (string-append name "-" version "-checkout"))
-                (sha256
-                 (base32
-                  "1q536cp80v2bcy6xwk08f1r2ljyw13jchx3a1z7d3ni3vqql7rc6"))))
-      (build-system gnu-build-system)
-      (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("libtool" ,libtool)
-         ("which" ,base:which)
-         ("pkg-config" ,pkg-config)
-         ("texinfo" ,texinfo)))
-      (inputs
-       `(("hidapi" ,hidapi)
-         ("jimtcl" ,jimtcl)
-         ("libftdi" ,libftdi)
-         ("libjaylink" ,libjaylink)
-         ("libusb-compat" ,libusb-compat)))
-      (arguments
-       '(#:configure-flags
-         (append (list "LIBS=-lutil"
-                       "--disable-werror"
-                       "--enable-sysfsgpio"
-                       "--disable-internal-jimtcl"
-                       "--disable-internal-libjaylink")
-                 (map (lambda (programmer)
-                        (string-append "--enable-" programmer))
-                      '("amtjtagaccel" "armjtagew" "buspirate" "ftdi"
-                        "gw16012" "jlink" "opendous" "osbdm"
-                        "parport" "aice" "cmsis-dap" "dummy" "jtag_vpi"
-                        "remote-bitbang" "rlink" "stlink" "ti-icdi" "ulink"
-                        "usbprog" "vsllink" "usb-blaster-2" "usb_blaster"
-                        "presto" "openjtag")))
-         #:phases
-         (modify-phases %standard-phases
-           (replace 'bootstrap
-             (lambda _
-               (patch-shebang "bootstrap")
-               (invoke "./bootstrap" "nosubmodule")))
-           (add-after 'autoreconf 'change-udev-group
-             (lambda _
-               (substitute* "contrib/60-openocd.rules"
-                 (("plugdev") "dialout"))
-               #t))
-           (add-after 'install 'install-udev-rules
-             (lambda* (#:key outputs #:allow-other-keys)
-               (install-file "contrib/60-openocd.rules"
-                             (string-append
-                              (assoc-ref outputs "out")
-                              "/lib/udev/rules.d/"))
-               #t)))))
-      (home-page "http://openocd.org")
-      (synopsis "On-Chip Debugger")
-      (description "OpenOCD provides on-chip programming and debugging support
+  (package
+    (name "openocd")
+    (version "0.11.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://git.code.sf.net/p/openocd/code")
+                    (commit (string-append "v" version))))
+              (file-name (string-append name "-" version "-checkout"))
+              (sha256
+               (base32
+                "0qi4sixwvw1i7c64sy221fsjs82qf3asmdk86g74ds2jjm3f8pzp"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     (list autoconf
+           automake
+           libtool
+           base:which
+           pkg-config
+           texinfo))
+    (inputs
+     (list hidapi jimtcl libftdi libjaylink libusb-compat))
+    (arguments
+     '(#:configure-flags
+       (append (list "LIBS=-lutil"
+                     "--disable-werror"
+                     "--enable-sysfsgpio"
+                     "--disable-internal-jimtcl"
+                     "--disable-internal-libjaylink")
+               (map (lambda (programmer)
+                      (string-append "--enable-" programmer))
+                    '("amtjtagaccel" "armjtagew" "buspirate" "ftdi"
+                      "gw16012" "jlink" "opendous" "osbdm"
+                      "parport" "aice" "cmsis-dap" "dummy" "jtag_vpi"
+                      "remote-bitbang" "rlink" "stlink" "ti-icdi" "ulink"
+                      "usbprog" "vsllink" "usb-blaster-2" "usb_blaster"
+                      "presto" "openjtag" "rshim" "ft232r" "xds110"
+                      "cmsis-dap-v2" "nulink" "kitprog" "jtag_dpi"
+                      "bcm2835gpio" "imx_gpio" "ep93xx" "at91rm9200"
+                      "sysfsgpio" "xlnx-pcie-xvc")))
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'bootstrap
+           (lambda _
+             ;; Make build reproducible.
+             (substitute* "src/Makefile.am"
+               (("-DPKGBLDDATE=") "-DDISABLED_PKGBLDDATE="))
+             (patch-shebang "bootstrap")
+             (invoke "./bootstrap" "nosubmodule")))
+         (add-after 'unpack 'change-udev-group
+           (lambda _
+             (substitute* "contrib/60-openocd.rules"
+               (("plugdev") "dialout"))))
+         (add-after 'install 'install-udev-rules
+           (lambda* (#:key outputs #:allow-other-keys)
+             (install-file "contrib/60-openocd.rules"
+                           (string-append
+                            (assoc-ref outputs "out")
+                            "/lib/udev/rules.d/")))))))
+    (home-page "https://openocd.org/")
+    (synopsis "On-Chip Debugger")
+    (description "OpenOCD provides on-chip programming and debugging support
 with a layered architecture of JTAG interface and TAP support.")
-      (license license:gpl2+))))
+    (license license:gpl2+)))
 
 ;; The commits for all propeller tools are the stable versions published at
 ;; https://github.com/propellerinc/propgcc in the release_1_0.  According to
@@ -698,8 +697,8 @@ with a layered architecture of JTAG interface and TAP support.")
                   (origin-patches (package-source gcc-6))
                   (search-patches "gcc-cross-environment-variables.patch")))))
       (native-inputs
-       `(("flex" ,flex)
-         ,@(package-native-inputs xgcc)))
+       (modify-inputs (package-native-inputs xgcc)
+         (prepend flex)))
       ;; All headers and cross libraries of the propeller toolchain are
       ;; installed under the "propeller-elf" prefix.
       (native-search-paths
@@ -807,9 +806,7 @@ with a layered architecture of JTAG interface and TAP support.")
              (lambda* (#:key make-flags #:allow-other-keys)
                (apply invoke "make" "install-includes" make-flags))))))
       (native-inputs
-       `(("propeller-gcc" ,propeller-gcc)
-         ("propeller-binutils" ,propeller-binutils)
-         ("perl" ,perl)))
+       (list propeller-gcc propeller-binutils perl))
       (home-page "https://github.com/parallaxinc/propgcc")
       (synopsis "C library for the Parallax Propeller")
       (description "This is a C library for the Parallax Propeller
@@ -901,8 +898,7 @@ code.")
              (lambda _ (chdir "loader") #t))
            (delete 'configure))))
       (native-inputs
-       `(("openspin" ,openspin)
-         ("propeller-toolchain" ,propeller-toolchain)))
+       (list openspin propeller-toolchain))
       (home-page "https://github.com/parallaxinc/propgcc")
       (synopsis "Loader for Parallax Propeller micro-controllers")
       (description "This package provides the tool @code{propeller-load} to
@@ -947,9 +943,7 @@ upload binaries to a Parallax Propeller micro-controller.")
                          '("testlex" "spin2cpp" "fastspin")))
              #t)))))
     (native-inputs
-     `(("bison" ,bison)
-       ("propeller-load" ,propeller-load)
-       ("propeller-toolchain" ,propeller-toolchain)))
+     (list bison propeller-load propeller-toolchain))
     (home-page "https://github.com/totalspectrum/spin2cpp")
     (synopsis "Convert Spin code to C, C++, or PASM code")
     (description "This is a set of tools for converting the Spin language for
@@ -1089,8 +1083,8 @@ the Raspberry Pi chip.")
                  (search-patches "gcc-6-fix-buffer-size.patch"
                                  "gcc-6-fix-isl-includes.patch"))))
       (native-inputs
-        `(("flex" ,flex)
-          ,@(package-native-inputs xgcc)))
+        (modify-inputs (package-native-inputs xgcc)
+          (prepend flex)))
       (synopsis "GCC for VC4")
       (description "This package provides @code{gcc} for VideoCore IV,
 the Raspberry Pi chip."))))
@@ -1111,12 +1105,9 @@ the Raspberry Pi chip."))))
             "1rypfb96k2szqgygp3jnwg2zq9kwmfz0460dsahn3r2vkzml8wn7"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libftdi" ,libftdi)
-       ("python" ,python)))
+     (list libftdi python))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("swig" ,swig)
-       ("which" ,base:which)))
+     (list pkg-config swig base:which))
     (arguments
      `(#:tests? #f ; No tests exist.
        #:parallel-build? #f  ; Would be buggy.
@@ -1256,7 +1247,7 @@ SPI, I2C, JTAG.")
              #t))
          (delete 'configure))))
     (inputs
-     `(("libx11" ,libx11)))
+     (list libx11))
     (synopsis "Freecalypso host tools")
     (description "This package provides some tools for debugging FreeCalypso phones and the FreeCalypso FCDEV3B dev board.
 
@@ -1350,20 +1341,50 @@ these identified regions.
     (home-page "https://www.freecalypso.org/")
     (license license:public-domain)))
 
+(define-public stcgal
+  (package
+    (name "stcgal")
+    (version "1.6")
+    (source (origin
+              ;; Neither the unit tests nor the "doc" subdirectory referred to
+              ;; by stcgal's setup.py is present in the source distribution on
+              ;; PyPI, so we fetch directly from the project's git repository
+              ;; instead.
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/grigorig/stcgal")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1d10qxyghz66zp7iqpm8q8rfv9jz9n609gxmfcav1lssmf1dlyk3"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     (list python-pyserial python-pyusb python-tqdm))
+    (native-inputs
+     ;; For tests.
+     (list python-pyyaml))
+    (home-page "https://github.com/grigorig/stcgal")
+    (synopsis "Programmer for STC 8051-compatible microcontrollers")
+    (description "stcgal is a command-line flash-programming tool for STC
+MCU's line of Intel 8051-compatible microcontrollers, including those in the
+STC89, STC90, STC10, STC11, STC12, STC15 and STC8 series.")
+    (license license:expat)))
+
 (define-public stlink
   (package
     (name "stlink")
-    (version "1.5.1")
+    (version "1.7.0")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
-              (url "https://github.com/texane/stlink")
+              (url "https://github.com/stlink-org/stlink")
               (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1d5gxiqpsm8fc105cxlp27af9fk339fap5h6nay21x5a7n61jgyc"))))
+         "03xypffpbp4imrczbxmq69vgkr7mbp0ps9dk815br5wwlz6vgygl"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f                      ;no tests
@@ -1375,7 +1396,7 @@ these identified regions.
          (list (string-append "-DSTLINK_UDEV_RULES_DIR=" udev-rules)
                (string-append "-DSTLINK_MODPROBED_DIR=" modprobe)))))
     (inputs
-     `(("libusb" ,libusb)))
+     (list libusb))
     (synopsis "Programmer for STM32 Discovery boards")
     (description "This package provides a firmware programmer for the STM32
 Discovery boards.  It supports two versions of the chip: ST-LINK/V1 (on
@@ -1383,7 +1404,7 @@ STM32VL discovery kits) and ST-LINK/V2 (on STM32L discovery and later kits).
 Two different transport layers are used: ST-LINK/V1 uses SCSI passthru
 commands over USB, and ST-LINK/V2 and ST-LINK/V2-1 (seen on Nucleo boards) use
 raw USB commands.")
-    (home-page "https://github.com/texane/stlink")
+    (home-page "https://github.com/stlink-org/stlink")
     ;; The flashloaders/stm32l0x.s and flashloaders/stm32lx.s source files are
     ;; licensed under the GPLv2+.
     (license (list license:bsd-3 license:gpl2+))))
@@ -1400,10 +1421,8 @@ raw USB commands.")
         (base32
          "0ql6ij1hrj2ir5wkxm96zgig5qwvfwa75w77wh2y13w6b9cqcr4b"))))
     (propagated-inputs
-     `(("python-colorama" ,python-colorama)
-       ("python-configobj" ,python-configobj)
-       ("python-pykwalify" ,python-pykwalify)
-       ("python-pyyaml" ,python-pyyaml)))
+     (list python-colorama python-configobj python-pykwalify
+           python-pyyaml))
     (build-system python-build-system)
     (home-page "https://github.com/zephyrproject-rtos/west")
     (synopsis "Zephyr RTOS Project meta-tool")
@@ -1443,7 +1462,7 @@ debugging them, and more.")
                                  config-destination)
                #t))))))
     (inputs
-     `(("mosquitto" ,mosquitto)))
+     (list mosquitto))
     (native-inputs
      `(("automake" ,automake)
        ("autoconf" ,autoconf)
@@ -1495,8 +1514,7 @@ handling communication with eBUS devices connected to a 2-wire bus system
               (string-append (assoc-ref outputs "out") "/share/man"))
              #t)))))
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)))
+     (list bison flex))
     (home-page "http://mazsola.iit.uni-miskolc.hu/ucsim/")
     (synopsis "Simulators for various microcontroller families")
     (description "μCsim is a collection of software simulators for
@@ -1586,8 +1604,7 @@ families, plus many of their variants.")
                     (("from IPython.*") ""))))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-cryptography" ,python-cryptography)
-       ("python-prettytable" ,python-prettytable)))
+     (list python-cryptography python-prettytable))
     (home-page "https://github.com/PSPReverse/psptool")
     (synopsis "Tool for dealing with AMD binary blobs")
     (description "PSPTool is a tool for dealing with AMD binary blobs")
@@ -1629,3 +1646,51 @@ families, plus many of their variants.")
 and console on a single serial port.  agent-proxy creates network sockets,
 whereas kdmx creates pseudo-ttys.")
       (license license:gpl2))))
+
+(define-public mbed-tools
+  (package
+    (name "mbed-tools")
+    (version "7.49.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "mbed-tools" version))
+       (sha256
+        (base32
+         "07w1h1093xzpg8agw9hjhki5856mam2c6f3q7jb2866n82cihkg9"))))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               ;; Remove this failing test.
+               (delete-file "tests/ci_scripts/test_sync_board_db.py")
+               (invoke "pytest" "-vv")))))))
+    (native-inputs
+     (list python-pytest
+           python-pytest-cov
+           python-factory-boy
+           python-requests-mock
+           python-semver))
+    (propagated-inputs
+     (list python-dotenv
+           python-click
+           python-pdoc3
+           python-gitpython
+           python-tqdm
+           python-tabulate
+           python-requests
+           python-psutil
+           python-pyudev
+           python-typing-extensions
+           python-jinja2
+           python-pyserial))
+    (build-system python-build-system)
+    (home-page "https://github.com/ARMmbed/mbed-tools")
+    (synopsis "ARM Mbed command line tools")
+    (description "This package is the successor of @code{mbed-cli}.  It
+provides command line tools for Mbed OS to detect Mbed enabled devices
+connected by USB, checkout Mbed projects and perform builds amongst other
+operations.")
+    (license license:asl2.0)))
diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
index 84fb848b4f..b260ca38f7 100644
--- a/gnu/packages/emulators.scm
+++ b/gnu/packages/emulators.scm
@@ -6,7 +6,7 @@
 ;;; Copyright © 2015, 2018 David Thompson <dthompson2@worcester.edu>
 ;;; Copyright © 2016 Manolis Fragkiskos Ragkousis <manolis837@gmail.com>
 ;;; Copyright © 2016, 2017, 2018, 2020 Efraim Flashner <efraim@flashner.co.il>
-;;; Copyright © 2017, 2018, 2019, 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2017-2022 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2017, 2020, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017, 2018, 2019 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz>
@@ -16,6 +16,7 @@
 ;;; Copyright © 2021 Felipe Balbi <balbi@kernel.org>
 ;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
 ;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -35,6 +36,7 @@
 (define-module (gnu packages emulators)
   #:use-module (ice-9 match)
   #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix gexp)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
@@ -47,10 +49,12 @@
   #:use-module (gnu packages audio)
   #:use-module (gnu packages autogen)
   #: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 boost)
-  #:use-module (gnu packages backup)
+  #:use-module (gnu packages build-tools)
   #:use-module (gnu packages cdrom)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
@@ -102,38 +106,39 @@
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system glib-or-gtk)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build-system meson)
   #:use-module (guix build-system python))
 
 (define-public vice
   (package
     (name "vice")
-    (version "3.5")
+    (version "3.6")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://sourceforge/vice-emu/releases/"
                            "vice-" version ".tar.gz"))
        (sha256
-        (base32
-         "03nwcldg2h7dxj6aa77ggqc0442hqc1lsq5x69h8kcmqmvx7ifan"))))
+        (base32 "1zfkl9j40v2417l1fmczdvl9yzh81jlpcy5cl2svjzb2rrffbgv5"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:configure-flags '("--disable-pdf-docs")))
+     `(#:configure-flags '("--disable-html-docs"
+                           "--disable-pdf-docs")))
     (native-inputs
-     `(("bison" ,bison)
-       ("dos2unix" ,dos2unix)
-       ("flex" ,flex)
-       ("glib" ,glib "bin")             ; for glib-genmarshal, etc.
-       ("pkg-config" ,pkg-config)))
+     (list bison
+           dos2unix
+           flex
+           `(,glib "bin") ; for glib-genmarshal, etc.
+           pkg-config))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("glew" ,glew)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("pulseaudio" ,pulseaudio)
-       ("sdl" ,sdl)
-       ("sdl-image" ,sdl-image)
-       ("xa" ,xa)))
+     (list alsa-lib
+           glew
+           glib
+           gtk+
+           pulseaudio
+           sdl
+           sdl-image
+           xa))
     (home-page "https://vice-emu.sourceforge.io/")
     (synopsis "The versatile Commodore emulator")
     (description
@@ -184,7 +189,10 @@ SuperCPU.")
          (add-after 'unpack 'fix-source
            (lambda _
              (substitute* (find-files "." ".*\\.[ch]")
-               (("\"zlib/zlib.h\"") "<zlib.h>"))))
+               (("\"zlib/zlib.h\"") "<zlib.h>"))
+             (substitute* "Makefile"
+               (("CFLAGS:=-std=gnu99" all)
+                (string-append all " -fcommon")))))
          (delete 'configure)
          (replace 'install
            (lambda* args
@@ -197,12 +205,9 @@ SuperCPU.")
                       ("shaders" "share/blastem/shaders"))
                     args))))))
     (inputs
-     `(("glew" ,glew)
-       ("mesa" ,mesa)
-       ("sdl2" ,sdl2)
-       ("zlib" ,zlib)))
+     (list glew mesa sdl2 zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.retrodev.com/blastem/")
     (synopsis "Genesis/Mega Drive emulator")
     (description "Blastem is an emulator for the Sega Genesis/Mega Drive
@@ -230,14 +235,9 @@ console.")
      `(#:configure-flags '("--enable-wifi"
                            "--enable-openal")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (inputs
-     `(("zlib" ,zlib)
-       ("sdl" ,sdl)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+-2)
-       ("glu" ,glu)))
+     (list zlib sdl glib gtk+-2 glu))
     (home-page "http://desmume.org/")
     (synopsis "Nintendo DS emulator")
     (description
@@ -284,11 +284,10 @@ console.")
            (add-before 'configure 'generate-fonts&hardcore-libvulkan-path
              (lambda* (#:key inputs outputs #:allow-other-keys)
                (let ((fontfile
-                      (string-append (assoc-ref inputs "font-wqy-microhei")
-                                     "/share/fonts/truetype/wqy-microhei.ttc"))
+                      (search-input-file inputs
+                                         "/share/fonts/truetype/wqy-microhei.ttc"))
                      (libvulkan
-                      (string-append (assoc-ref inputs "vulkan-loader")
-                                     "/lib/libvulkan.so")))
+                      (search-input-file inputs "/lib/libvulkan.so")))
                  (chdir "docs")
                  (invoke "bash" "-c" "g++ -O2 $(freetype-config \
 --cflags --libs) gc-font-tool.cpp -o gc-font-tool")
@@ -318,39 +317,39 @@ console.")
        `(("pkg-config" ,pkg-config)
          ("gettext" ,gettext-minimal)))
       (inputs
-       `(("alsa-lib" ,alsa-lib)
-         ("ao" ,ao)
-         ("bluez" ,bluez)
-         ("curl" ,curl)
-         ("eudev" ,eudev)
-         ("ffmpeg" ,ffmpeg)
-         ("font-wqy-microhei" ,font-wqy-microhei)
-         ("freetype" ,freetype)
-         ("glew" ,glew)
-         ("glib" ,glib)
-         ("glu" ,glu)
-         ("gtk+" ,gtk+-2)
-         ("hidapi" ,hidapi)
-         ("libevdev" ,libevdev)
-         ("libpng" ,libpng)
-         ("libusb" ,libusb)
-         ("libx11" ,libx11)
-         ("libxi" ,libxi)
-         ("libxrandr" ,libxrandr)
-         ("lzo" ,lzo)
-         ("mbedtls-apache" ,mbedtls-apache)
-         ("mesa" ,mesa)
-         ("miniupnpc" ,miniupnpc)
-         ("openal" ,openal)
-         ("pugixml" ,pugixml)
-         ("pulseaudio" ,pulseaudio)
-         ("qtbase" ,qtbase-5)
-         ("sdl2" ,sdl2)
-         ("sfml" ,sfml)
-         ("soil" ,soil)
-         ("soundtouch" ,soundtouch)
-         ("vulkan-loader" ,vulkan-loader)
-         ("zlib" ,zlib)))
+       (list alsa-lib
+             ao
+             bluez
+             curl
+             eudev
+             ffmpeg
+             font-wqy-microhei
+             freetype
+             glew
+             glib
+             glu
+             gtk+-2
+             hidapi
+             libevdev
+             libpng
+             libusb
+             libx11
+             libxi
+             libxrandr
+             lzo
+             mbedtls-apache
+             mesa
+             miniupnpc
+             openal
+             pugixml
+             pulseaudio
+             qtbase-5
+             sdl2
+             sfml
+             soil
+             soundtouch
+             vulkan-loader
+             zlib))
       (home-page "https://dolphin-emu.org/")
       (synopsis "Nintendo Wii and GameCube emulator")
       (description
@@ -376,15 +375,14 @@ turbo speed, networked multiplayer, and graphical enhancements.")
                 "02i648i50dwicv1vaql15rccv4g8h5blf5g6inv67lrfxpbkvlf0"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (inputs
-     `(("sdl" ,sdl)
-       ("libpng" ,libpng)
-       ("zlib" ,zlib)
-       ("alsa-lib" ,alsa-lib)
-       ("glu" ,glu)
-       ("mesa" ,mesa)))
+     (list sdl
+           libpng
+           zlib
+           alsa-lib
+           glu
+           mesa))
     (home-page "https://www.dosbox.com")
     (synopsis "X86 emulator with CGA/EGA/VGA/etc. graphics and sound")
     (description "DOSBox is a DOS-emulator that uses the SDL library.  DOSBox
@@ -398,7 +396,7 @@ older games.")
   ;; This is not a patch staging area for DOSBox, but an unaffiliated fork.
   (package
     (name "dosbox-staging")
-    (version "0.76.0")
+    (version "0.78.1")
     (source
      (origin
        (method git-fetch)
@@ -407,34 +405,30 @@ older games.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "14zlkm9qmaq2x4zdiadczsxvdnrf35w13ccvkxzd8cwrzxv84fvd"))))
-    (build-system gnu-build-system)
+        (base32 "16byip1j9ckq0ik7ilrj0fc9dal3495s48xd21drpbb8q9jwb342"))))
+    (build-system meson-build-system)
     (arguments
-     `(#:configure-flags
-       (let* ((flags (list "-O3"
-                           ;; From scripts/automator/build/gcc-defaults.
-                           "-fstrict-aliasing"
-                           "-fno-signed-zeros"
-                           "-fno-trapping-math"
-                           "-fassociative-math"
-                           "-frename-registers"
-                           "-ffunction-sections"
-                           "-fdata-sections"))
-              (CFLAGS (string-join flags " ")))
-         ;; Several files #include <SDL_net.h> instead of <SDL2/SDL_net.h>,
-         ;; including configure.ac itself.
-         (list (string-append "CPPFLAGS=-I" (assoc-ref %build-inputs "sdl2")
-                              "/include/SDL2")
-               (string-append "CFLAGS=" CFLAGS)
-               (string-append "CXXFLAGS=-DNDEBUG " CFLAGS)))))
+     (list #:configure-flags
+           #~(list
+              ;; These both try to git clone subprojects.
+              "-Dunit_tests=disabled"   ; gtest
+              "-Duse_mt32emu=false"
+              ;; Not packaged.
+              "-Duse_slirp=false")
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'fix-includes
+                 (lambda _
+                   (substitute* (find-files "." "\\.(cpp|h)")
+                     (("^(#include <)(SDL[_.])" _ include file)
+                      (string-append include "SDL2/" file))))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("alsa-lib" ,alsa-lib)
        ("fluidsynth" ,fluidsynth)
        ("libpng" ,libpng)
+       ("mesa" ,mesa)
        ("opusfile" ,opusfile)
        ("sdl2" ,(sdl-union (list sdl2 sdl2-net)))
        ("zlib" ,zlib)))
@@ -515,8 +509,7 @@ emulate a serial nullmodem over TCP/IP.")
                #t))))
        #:tests? #f))    ; test suite wants mips toolchain
     (inputs
-     `(("elfutils" ,elfutils)
-       ("qtbase" ,qtbase-5)))
+     (list elfutils qtbase-5))
     (home-page "https://github.com/cvut/QtMips")
     (synopsis "MIPS CPU emulator")
     (description "This package contains a MIPS CPU emulator.  The simulator
@@ -575,7 +568,7 @@ and a game metadata scraper.")
         (base32 "11rvm53c3p2f6zk8xbyv2j51xp8zmqnch7zravhj3fk590qrjrr2"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("alsa-lib" ,alsa-lib)
        ("ao" ,ao)
@@ -617,8 +610,7 @@ and a game metadata scraper.")
                       (bin (string-append out "/bin"))
                       (higan (string-append bin "/higan"))
                       (higan-original (string-append higan "-original"))
-                      (bash (string-append (assoc-ref inputs "bash")
-                                           "/bin/bash"))
+                      (bash (search-input-file inputs "/bin/bash"))
                       (coreutils (assoc-ref inputs "coreutils"))
                       (mkdir (string-append coreutils "/bin/mkdir"))
                       (cp (string-append coreutils "/bin/cp"))
@@ -663,14 +655,14 @@ V2.")
 (define-public mednafen
   (package
     (name "mednafen")
-    (version "1.27.1")
+    (version "1.29.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://mednafen.github.io/releases/files/"
                            "mednafen-" version ".tar.xz"))
        (sha256
-        (base32 "1ysmb56wzr17ki6f1b486r2dzjr11igd021qb4r3437l68prpa7k"))))
+        (base32 "0binkxnki8w8jgiyf3xr9503m5cynlf5vylb087vxybp53qbqgys"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
@@ -678,7 +670,7 @@ V2.")
         ;; "--with-external-mpcdec"
         "--with-external-lzo")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("alsa" ,alsa-lib)
        ("flac" ,flac)
@@ -725,7 +717,7 @@ The following systems are supported:
 (define-public mgba
   (package
     (name "mgba")
-    (version "0.9.2")
+    (version "0.9.3")
     (source
      (origin
        (method git-fetch)
@@ -734,7 +726,7 @@ The following systems are supported:
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "16kngkzf08jflqxwbgafb47091vqqb9pbhazg9cd94cy81ahz3q3"))
+        (base32 "1bg4ax5gjkr6d4cpzsgzv3bpa3i2c2b1ckwrjklqiy835b5ni6yi"))
        (modules '((guix build utils)))
        (snippet
         ;; Make sure we don't use the bundled software.
@@ -751,22 +743,21 @@ The following systems are supported:
        (list "-DUSE_LZMA=OFF"           ;do not use bundled LZMA
              "-DUSE_LIBZIP=OFF")))      ;use "zlib" instead
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list pkg-config qttools))
     (inputs
-     `(("ffmpeg" ,ffmpeg)
-       ("libedit" ,libedit)
-       ("libelf" ,libelf)
-       ("libepoxy" ,libepoxy)
-       ("libpng" ,libpng)
-       ("mesa" ,mesa)
-       ("minizip" ,minizip)
-       ("ncurses" ,ncurses)
-       ("qtbase" ,qtbase-5)
-       ("qtmultimedia" ,qtmultimedia)
-       ("sdl2" ,sdl2)
-       ("sqlite" ,sqlite)
-       ("zlib" ,zlib)))
+     (list ffmpeg
+           libedit
+           libelf
+           libepoxy
+           libpng
+           mesa
+           minizip
+           ncurses
+           qtbase-5
+           qtmultimedia
+           sdl2
+           sqlite
+           zlib))
     (home-page "https://mgba.io")
     (synopsis "Game Boy Advance emulator")
     (description
@@ -781,7 +772,7 @@ and Game Boy Color games.")
 (define-public sameboy
   (package
     (name "sameboy")
-    (version "0.14.4")
+    (version "0.14.7")
     (source
      (origin
        (method git-fetch)
@@ -790,13 +781,12 @@ and Game Boy Color games.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0zp11qm8b3cmx70pzczyh4vv4jyhlh4jnci8kn6b30c8lzl43g83"))))
+        (base32 "1r391jdh0gjnx8bwmr63dcdmq58lpm162mng2ncrx53ydbb13xxf"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("rgbds" ,rgbds)
-       ("pkg-config" ,pkg-config)))
+     (list rgbds pkg-config))
     (inputs
-     `(("sdl2" ,sdl2)))
+     (list sdl2))
     (arguments
      `(#:tests? #f                      ; There are no tests
        #:make-flags `(,(string-append "CC=" ,(cc-for-target))
@@ -815,8 +805,7 @@ and Game Boy Color games.")
                (with-directory-excursion "build/bin/SDL"
                  (install-file "sameboy" bin)
                  (delete-file "sameboy")
-                 (copy-recursively "." data))
-               #t))))))
+                 (copy-recursively "." data))))))))
     (home-page "https://sameboy.github.io/")
     (synopsis "Accurate Game Boy, Game Boy Color and Super Game Boy emulator")
     (description "SameBoy is a user friendly Game Boy, Game Boy Color
@@ -840,26 +829,26 @@ from an emulator---from save states to scaling filters.")
         (base32 "116fndl6652zrp1r6ag4xv3dzp1x52mlvadj8xwflq07fd5rhri1"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("which" ,which)))
+     (list pkg-config which))
     (inputs
-     `(("freetype" ,freetype)
-       ("glu" ,glu)
-       ("libpng" ,libpng)
-       ("mesa" ,mesa)
-       ("sdl2" ,sdl2)
-       ("zlib" ,zlib)))
+     (list freetype
+           glu
+           libpng
+           mesa
+           sdl2
+           zlib))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
          ;; The mupen64plus build system has no configure phase.
-         (delete 'configure)
+         (replace 'configure
+           (lambda _
+             (substitute* "projects/unix/Makefile"
+               (("\\$\\(CFLAGS\\)")
+                "$(CFLAGS) -fcommon"))))
          ;; Makefile is in a subdirectory.
-         (add-before
-          'build 'chdir-to-project-directory
-          (lambda _
-            (chdir "projects/unix")
-            #t)))
+         (add-before 'build 'chdir-to-project-directory
+           (lambda _ (chdir "projects/unix"))))
        #:make-flags (let ((out (assoc-ref %outputs "out")))
                       (list "all" (string-append "PREFIX=" out)))
        ;; There are no tests.
@@ -889,11 +878,9 @@ core library.")
         (base32 "0z19amfg9vr2pqjjri1ipc7hs681fzjcnb0f9y7bjhp5n8d7p6bb"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("which" ,which)))
+     (list pkg-config which))
     (inputs
-     `(("mupen64plus-core" ,mupen64plus-core)
-       ("sdl2" ,sdl2)))
+     (list mupen64plus-core sdl2))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -935,10 +922,9 @@ SDL audio plugin.")
         (base32 "1dyazfbdjycdfslq8jixqiqhziw0rlkvach2r9dz91229jmkyc9c"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("which" ,which)))
+     (list which))
     (inputs
-     `(("mupen64plus-core" ,mupen64plus-core)
-       ("sdl2" ,sdl2)))
+     (list mupen64plus-core sdl2))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -980,7 +966,7 @@ SDL input plugin.")
         (base32 "0pi31qzjjp7aypdvvnz6ms18g09c4gqzxi6328zj8sji94b75gf0"))))
     (build-system gnu-build-system)
     (inputs
-     `(("mupen64plus-core" ,mupen64plus-core)))
+     (list mupen64plus-core))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -1022,7 +1008,7 @@ high-level emulation (HLE) RSP processor plugin.")
         (base32 "0nfyjns9k8xbg3aqs7593nfaxvlj72h3l8h467442xlk8ajfcylx"))))
     (build-system gnu-build-system)
     (inputs
-     `(("mupen64plus-core" ,mupen64plus-core)))
+     (list mupen64plus-core))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -1064,11 +1050,9 @@ Z64 RSP processor plugin.")
         (base32 "1v9fqwpb6pawr8z5cm2ki7bqkks4iyr5c4jy4v5khj6h8zcv55gc"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("which" ,which)))
+     (list pkg-config which))
     (inputs
-     `(("mesa" ,mesa)
-       ("mupen64plus-core" ,mupen64plus-core)))
+     (list mesa mupen64plus-core))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -1110,12 +1094,9 @@ Arachnoid video plugin.")
         (base32 "0qn5za7g7796kh2ag3xpmhbqg0yf71g9liz6ks0rha8pz73lgs01"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("which" ,which)))
+     (list pkg-config which))
     (inputs
-     `(("mesa" ,mesa)
-       ("mupen64plus-core" ,mupen64plus-core)
-       ("sdl2" ,sdl2)))
+     (list mesa mupen64plus-core sdl2))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -1164,15 +1145,14 @@ Glide64 video plugin.")
         (base32 "08pm28a36dpr0cvr8pzw0n5ksdazp7jqvlmqfy2lwb4dm0cwhkqd"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("which" ,which)))
+     (list pkg-config which))
     (inputs
-     `(("boost" ,boost)
-       ("libpng" ,libpng)
-       ("mesa" ,mesa)
-       ("mupen64plus-core" ,mupen64plus-core)
-       ("sdl2" ,sdl2)
-       ("zlib" ,zlib)))
+     (list boost
+           libpng
+           mesa
+           mupen64plus-core
+           sdl2
+           zlib))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -1214,13 +1194,9 @@ Glide64MK2 video plugin.")
         (base32 "0rpmbcq67gsj5h5jjis146378qc1mskskvx20y1ikx59yhbamh13"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("which" ,which)))
+     (list pkg-config which))
     (inputs
-     `(("libpng" ,libpng)
-       ("mesa" ,mesa)
-       ("mupen64plus-core" ,mupen64plus-core)
-       ("sdl2" ,sdl2)))
+     (list libpng mesa mupen64plus-core sdl2))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -1263,12 +1239,9 @@ Rice Video plugin.")
        (patches (search-patches "mupen64plus-video-z64-glew-correct-path.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("which" ,which)))
+     (list pkg-config which))
     (inputs
-     `(("glew" ,glew)
-       ("mupen64plus-core" ,mupen64plus-core)
-       ("sdl2" ,sdl2)))
+     (list glew mupen64plus-core sdl2))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -1318,10 +1291,9 @@ Z64 video plugin.")
        (patches (search-patches "mupen64plus-ui-console-notice.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("which" ,which)))
+     (list pkg-config which))
     (inputs
-     `(("sdl2" ,sdl2)))
+     (list sdl2))
     ;; Mupen64Plus supports a single data directory and a single plugin
     ;; directory in its configuration, yet we need data and plugin files from
     ;; a variety of packages.  The best way to deal with this is to install
@@ -1331,13 +1303,13 @@ Z64 video plugin.")
     ;; mupen64plus-ui-console-notice also gives users instructions on what
     ;; they need to do in order to point the configuration to their profile.
     (propagated-inputs
-     `(("mupen64plus-core" ,mupen64plus-core)
-       ("mupen64plus-audio-sdl" ,mupen64plus-audio-sdl)
-       ("mupen64plus-input-sdl" ,mupen64plus-input-sdl)
-       ("mupen64plus-rsp-hle" ,mupen64plus-rsp-hle)
-       ("mupen64plus-video-glide64" ,mupen64plus-video-glide64)
-       ("mupen64plus-video-glide64mk2" ,mupen64plus-video-glide64mk2)
-       ("mupen64plus-video-rice" ,mupen64plus-video-rice)))
+     (list mupen64plus-core
+           mupen64plus-audio-sdl
+           mupen64plus-input-sdl
+           mupen64plus-rsp-hle
+           mupen64plus-video-glide64
+           mupen64plus-video-glide64mk2
+           mupen64plus-video-rice))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -1382,10 +1354,7 @@ towards a working Mupen64Plus for casual users.")
         (base32 "1g19gz33jav00rwzkpcnynf5ps41vl64a9qx0xjd6lva4bgn8s57"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("autoconf-archive" ,autoconf-archive)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf autoconf-archive automake pkg-config))
     (inputs
      `(("fltk" ,fltk)
        ("fontconfig", fontconfig)
@@ -1445,7 +1414,7 @@ as RetroArch.")
 (define-public retroarch
   (package
     (name "retroarch")
-    (version "1.9.4")
+    (version "1.9.11")
     (source
      (origin
        (method git-fetch)
@@ -1454,7 +1423,7 @@ as RetroArch.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1wky28y52nsjmannks3y1hbjgw0dvqh85gxrllr98f9y7kvk1cvf"))
+        (base32 "0hd77kw1f655s40qcz1righdhd9czqyy40rf7gigdag1bkchdx6z"))
        (patches
         (search-patches "retroarch-LIBRETRO_DIRECTORY.patch"))))
     (build-system gnu-build-system)
@@ -1516,9 +1485,7 @@ as RetroArch.")
        ("wayland" ,wayland)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("wayland-protocols" ,wayland-protocols)
-       ("which" ,which)))
+     (list pkg-config wayland-protocols which))
     (native-search-paths
      (list (search-path-specification
             (variable "LIBRETRO_DIRECTORY")
@@ -1537,14 +1504,14 @@ multi-system game/emulator system.")
 (define-public scummvm
   (package
     (name "scummvm")
-    (version "2.2.0")
+    (version "2.5.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://downloads.scummvm.org/frs/scummvm/" version
                            "/scummvm-" version ".tar.xz"))
        (sha256
-        (base32 "11vknasm5dna2vqr6gk343qynh7nhsq3kf60zayarn1vb5z6as8l"))))
+        (base32 "00az0dm85kh8rq0yqj74x0c5zrq4ybvwvnilijzl8qa5whwdpn4z"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                                 ;require "git"
@@ -1554,34 +1521,35 @@ multi-system game/emulator system.")
          (replace 'configure
            ;; configure does not work followed by both "SHELL=..." and
            ;; "CONFIG_SHELL=..."; set environment variables instead
-           (lambda* (#:key outputs configure-flags #:allow-other-keys)
+           (lambda* (#:key inputs outputs configure-flags #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
-                    (bash (which "bash"))
+                    (bash (search-input-file inputs "/bin/bash"))
                     (flags `(,(string-append "--prefix=" out)
                              ,@configure-flags)))
                (setenv "SHELL" bash)
                (setenv "CONFIG_SHELL" bash)
                (apply invoke "./configure" flags)))))))
     (native-inputs
-     `(("nasm" ,nasm)
-       ("pkg-config" ,pkg-config)))
+     (list nasm pkg-config))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("faad2" ,faad2)
-       ("fluidsynth" ,fluidsynth)
-       ("freetype" ,freetype)
-       ("fribidi" ,fribidi)
-       ("liba52" ,liba52)
-       ("libflac" ,flac)
-       ("libjpeg-turbo" ,libjpeg-turbo)
-       ("libmad" ,libmad)
-       ("libmpeg2" ,libmpeg2)
-       ("libogg" ,libogg)
-       ("libpng" ,libpng)
-       ("libtheora" ,libtheora)
-       ("libvorbis" ,libvorbis)
-       ("sdl2" ,(sdl-union (list sdl2 sdl2-net)))
-       ("zlib" ,zlib)))
+     (list alsa-lib
+           faad2
+           fluidsynth
+           freetype
+           fribidi
+           glew
+           giflib
+           liba52
+           flac
+           libjpeg-turbo
+           libmad
+           libmpeg2
+           libogg
+           libpng
+           libtheora
+           libvorbis
+           (sdl-union (list sdl2 sdl2-net))
+           zlib))
     (home-page "https://www.scummvm.org/")
     (synopsis "Engine for several graphical adventure games")
     (description "ScummVM is a program which allows you to run certain
@@ -1615,15 +1583,14 @@ play them on systems for which they were never designed!")
              (chdir (string-append "libticables2-" ,version))
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("autogen" ,autogen)
-       ("automake" ,automake)
-       ("gettext" ,gnu-gettext)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf
+           autogen
+           automake
+           gnu-gettext
+           libtool
+           pkg-config))
     (inputs
-     `(("glib" ,glib)
-       ("libusb" ,libusb)))
+     (list glib libusb))
     (synopsis "Link cable library for TI calculators")
     (description
      "This package contains libticables, a library for operations on
@@ -1658,12 +1625,9 @@ This is a part of the TiLP project.")
              (chdir (string-append "libticonv-" ,version))
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
-     `(("glib" ,glib)))
+     (list glib))
     (synopsis "Character conversion library for TI calculators")
     (description
      "This package contains libticonv, a library to support working with
@@ -1696,15 +1660,9 @@ This is a part of the TiLP project.")
              (chdir (string-append "libtifiles2-" ,version))
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("gettext" ,gnu-gettext)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake gnu-gettext libtool pkg-config))
     (inputs
-     `(("glib" ,glib)
-       ("libarchive" ,libarchive)
-       ("libticonv" ,libticonv)))
+     (list glib libarchive libticonv))
     (synopsis "File functions library for TI calculators")
     (description
      "This package contains libticonv, a library to support working with
@@ -1737,17 +1695,9 @@ This is a part of the TiLP project.")
              (chdir (string-append "libticalcs2-" ,version))
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("gettext" ,gnu-gettext)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake gnu-gettext libtool pkg-config))
     (inputs
-     `(("glib" ,glib)
-       ("libarchive" ,libarchive)
-       ("libticables2" ,libticables2)
-       ("libticonv" ,libticonv)
-       ("libtifiles2" ,libtifiles2)))
+     (list glib libarchive libticables2 libticonv libtifiles2))
     (synopsis "Support library for TI calculators")
     (description
      "This project aims to develop a multi-platform linking program for use
@@ -1761,7 +1711,7 @@ This is a part of the TiLP project.")
 (define-public mame
   (package
     (name "mame")
-    (version "0.236")
+    (version "0.239")
     (source
      (origin
        (method git-fetch)
@@ -1770,7 +1720,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 "0pxvvdirbwakl5cy7lp0zib6z176ckxx8c3mazsd7q1ddxxd3l8x"))
+        (base32 "02by0pq0j8pi5dllk90g94nbszynp9wqg75bl5x8bqrc7h80a0dq"))
        (modules '((guix build utils)))
        (snippet
         ;; Remove bundled libraries.
@@ -1782,21 +1732,20 @@ This is a part of the TiLP project.")
                          "SDL2-override" "sqlite3" "utf8proc" "zlib")))))))
     (build-system gnu-build-system)
     (arguments
-     `(#:make-flags
-       (cons*
-        ;; A 'strict-overflow' error pops up on i686 so disable '-Werror'.
-        "NOWERROR=1"
-        (string-append "QT_HOME=" (assoc-ref %build-inputs "qtbase"))
-        (string-append "SDL_INI_PATH="
-                       (assoc-ref %outputs "out")
-                       "/share/mame/ini")
-        (map (lambda (lib)
-               (string-append "USE_SYSTEM_LIB_" (string-upcase lib) "=1"))
-             '("asio" "expat" "flac" "glm" "jpeg" "lua" "portaudio" "portmidi"
-               "pugixml" "rapidjson" "sqlite3" "utf8proc" "zlib")))
-       #:tests? #f                      ;no test in regular release
-       #:phases
-       (modify-phases %standard-phases
+     (list
+      #:make-flags
+      #~(cons*
+         ;; A 'strict-overflow' error pops up on i686 so disable '-Werror'.
+         "NOWERROR=1"
+         (string-append "QT_HOME=" #$(this-package-input "qtbase"))
+         (string-append "SDL_INI_PATH=" #$output "/share/mame/ini")
+         (map (lambda (lib)
+                (string-append "USE_SYSTEM_LIB_" (string-upcase lib) "=1"))
+              '("asio" "expat" "flac" "glm" "jpeg" "lua" "portaudio" "portmidi"
+                "pugixml" "rapidjson" "sqlite3" "utf8proc" "zlib")))
+      #:tests? #f                       ;no test in regular release
+      #:phases
+      `(modify-phases %standard-phases
          (delete 'configure)
          (add-after 'build 'build-documentation
            (lambda _ (invoke "make" "-C" "docs" "man" "info")))
@@ -1904,32 +1853,32 @@ This is a part of the TiLP project.")
                            Keywords=Game;Emulator;Arcade;~%"
                            executable)))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("sphinx" ,python-sphinx)
-       ("sphinxcontrib-svg2pdfconverter" ,python-sphinxcontrib-svg2pdfconverter)
-       ("texinfo" ,texinfo)))
+     (list pkg-config
+           python-sphinx
+           python-sphinxcontrib-svg2pdfconverter
+           texinfo))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("asio" ,asio-1.12)              ;the bundled copy is at 1.11
-       ("expat" ,expat)
-       ("flac" ,flac)
-       ("fontconfig" ,fontconfig)
-       ("glm" ,glm)
-       ("libjpeg" ,libjpeg-turbo)
-       ("libxi" ,libxi)
-       ("libxinerama" ,libxinerama)
-       ("lua" ,lua)
-       ("portaudio" ,portaudio)
-       ("portmidi" ,portmidi)
-       ("pugixml" ,pugixml)
-       ("pulseaudio" ,pulseaudio)
-       ("python-wrapper" ,python-wrapper)
-       ("qtbase" ,qtbase-5)
-       ("rapidjson" ,rapidjson)
-       ("sdl" ,(sdl-union (list sdl2 sdl2-ttf)))
-       ("sqlite" ,sqlite)
-       ("utf8proc" ,utf8proc)
-       ("zlib" ,zlib)))
+     (list alsa-lib
+           asio
+           expat
+           flac
+           fontconfig
+           glm
+           libjpeg-turbo
+           libxi
+           libxinerama
+           lua
+           portaudio
+           portmidi
+           pugixml
+           pulseaudio
+           python-wrapper
+           qtbase-5
+           rapidjson
+           (sdl-union (list sdl2 sdl2-ttf))
+           sqlite
+           utf8proc
+           zlib))
     (home-page "https://www.mamedev.org")
     (synopsis "Multi-purpose emulation framework")
     (description "MAME's purpose is to preserve decades of software
@@ -1991,7 +1940,7 @@ functions.  The source code to MAME serves as this documentation.")
                (install-file "../source/data/tile/TILE.TXT" tile))
              #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("mame" ,mame)
        ("gtk" ,gtk+)
@@ -2038,8 +1987,7 @@ emulator.")
              (lambda* (#:key inputs #:allow-other-keys)
                (substitute* "cmake/FindCdio.cmake"
                  (("/usr/include/cdio")
-                  (string-append (assoc-ref inputs "libcdio") "/include/cdio")))
-               #t))
+                  (search-input-directory inputs "/include/cdio")))))
            (add-after 'install 'wrap-program
              (lambda* (#:key inputs outputs #:allow-other-keys)
                (wrap-program (string-append (assoc-ref outputs "out")
@@ -2050,17 +1998,16 @@ emulator.")
                                     "/share/glib-2.0/schemas"))))
                #t)))))
       (native-inputs
-       `(("pkg-config" ,pkg-config)
-         ("intltool" ,intltool)
-         ("glib" ,glib "bin")))
+       (list pkg-config intltool
+             `(,glib "bin")))
       (inputs
-       `(("libcdio" ,libcdio)
-         ("sdl2" ,sdl2)
-         ("gtk+" ,gtk+)
-         ("ffmpeg" ,ffmpeg)
-         ("libxv" ,libxv)
-         ("libarchive" ,libarchive)
-         ("pulseaudio" ,pulseaudio)))
+       (list libcdio
+             sdl2
+             gtk+
+             ffmpeg
+             libxv
+             libarchive
+             pulseaudio))
       (home-page "https://archive.codeplex.com/?p=pcsxr")
       (synopsis "PlayStation emulator")
       (description
@@ -2092,8 +2039,7 @@ improvements.")
                (("GTK_CFLAGS=\"\\$GTK_CFLAGS .*\"") ""))
              #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("nasm" ,nasm)))
+     (list pkg-config nasm))
     (inputs
      `(("sdl" ,sdl)
        ("gtk" ,gtk+-2)))
@@ -2130,7 +2076,7 @@ from various forks of Gens, and improved platform portability.")
        #:phases (modify-phases %standard-phases
                   (delete 'configure))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("alsa-lib" ,alsa-lib)
        ("ao" ,ao)
@@ -2182,17 +2128,6 @@ performance, features, and ease of use.")
                     (guix build utils))
          #:phases
          (modify-phases %standard-phases
-           (add-after 'unpack 'install-bindings-to-python-output
-             (lambda* (#:key outputs #:allow-other-keys)
-               ;; python-build-system will build the bindings and install them to
-               ;; the "out" output, so change the build-internal names of the
-               ;; outputs.
-               ;;
-               ;; TODO: remove this once #40469 lands, through the core-updates
-               ;; holding zone, on master.
-               (set-car! (assoc "out" outputs) "lib")
-               (set-car! (assoc "python" outputs) "out")
-               #t))
            (add-before 'build 'build-library
              (lambda* (#:key inputs #:allow-other-keys)
                (invoke "make"
@@ -2205,7 +2140,7 @@ performance, features, and ease of use.")
                        "UNICORN_STATIC=no"
                        (string-append
                         "PREFIX="
-                        (assoc-ref outputs "lib")))))
+                        (assoc-ref outputs "out")))))
            (add-before 'build 'prepare-bindings
              (lambda* (#:key outputs #:allow-other-keys)
                (chdir "bindings/python")
@@ -2218,7 +2153,7 @@ performance, features, and ease of use.")
                  (("_path_list = \\[.*")
                   (string-append
                    "_path_list = [\""
-                   (assoc-ref outputs "lib")
+                   (assoc-ref outputs "out")
                    ;; eat the rest of the list
                    "/lib\"] + 0*[")))
                #t))
@@ -2239,10 +2174,10 @@ performance, features, and ease of use.")
                (let* ((python-samples (find-files "." "sample_.*"))
                       (c-samples (find-files "../../samples" ".*\\.c"))
                       (python-docdir
-                        (string-append (assoc-ref outputs "out")
+                        (string-append (assoc-ref outputs "python")
                                        "/share/doc/unicorn/samples"))
                       (c-docdir
-                        (string-append (assoc-ref outputs "lib")
+                        (string-append (assoc-ref outputs "out")
                                        "/share/doc/unicorn/samples")))
                  (for-each (cut install-file <> c-docdir) c-samples)
                  (for-each (cut install-file <> python-docdir) python-samples)
@@ -2262,214 +2197,186 @@ framework based on QEMU.")
       (license license:gpl2+))))
 
 (define-public ppsspp
-  ;; Use a recent commit as fixes for ffmpeg 4.4 haven't been released as of
-  ;; 1.11.3.
-  (let ((commit "69fa20744958aef8da9ca052ba7675fdc1636e46")
-        (revision "1"))
-    (package
-      (name "ppsspp")
-      (version (git-version "1.11.3" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/hrydgard/ppsspp")
-               (commit commit)))
-         (sha256
-          (base32 "0r8w4hllhn6zsfxlajxw3sn3f8vsri45srr4mdwsffzcb4hvl0cr"))
-         (file-name (git-file-name name version))
-         (patches
-          (search-patches "ppsspp-disable-upgrade-and-gold.patch"))
-         (modules '((guix build utils)))
-         (snippet
-          `(begin
-             ;; The following is quite a heavy-handed way of unbundling PPSSPP.
-             ;; There are still a number of external sources, that we don't
-             ;; remove here.  Some may be packaged, others are not.
-             ;; First, we patch existing sources to include the right headers.
-             (substitute* (append (find-files "Common" ".*\\.(h|cpp)")
-                                  (find-files "Core" ".*\\.(h|cpp)")
-                                  (find-files "GPU" ".*\\.(h|cpp)")
-                                  (find-files "SDL" ".*\\.(h|cpp)")
-                                  (find-files "UI" ".*\\.(h|cpp)"))
-               ;; These headers are all hard-coded in the original source.
-               (("ext/cityhash/") "")
-               (("ext/glslang/glslang/") "glslang/")
-               (("ext/glslang/") "glslang/")
-               (("ext/miniupnp/") "")
-               (("ext/SPIRV-Cross/") "spirv_cross/")
-               (("ext/vulkan/") "vulkan/")
-               (("ext/xxhash.h") "xxhash.h")
-               ;; These definitions do not actually exist in the Vulkan headers,
-               ;; but PPSSPP defines them in ext/vulkan.
-               (("VK_FORMAT_BEGIN_RANGE") "VK_FORMAT_UNDEFINED")
-               (("VK_FORMAT_END_RANGE") "VK_FORMAT_ASTC_12x12_SRGB_BLOCK"))
-             ;; Next, we patch CMakeLists.
-             (substitute* "CMakeLists.txt"
-               ;; Drop unnecessary includes and targets.
-               (("include_directories\\(ext/glslang\\)") "")
-               (("include_directories\\(ext/xxhash\\)") "")
-               (("include_directories\\(ext/cityhash\\)") "")
-               (("include_directories\\(ext/zstd.*") "")
-               (("libzstd_static") "zstd")
-               (("set_target_properties\\(cityhash .*\\)") "")
-               ;; Fix linking to GLEW.
-               (("TARGET Ext::GLEW") "true")
-               (("target_link_libraries\\(native Ext::GLEW\\)")
-                "find_package(GLEW)\ntarget_link_libraries(native GLEW::GLEW)")
-               (("Ext::Snappy") "snappy")
-               ;; Don't search for cityhash/xxhash, we already have them.
-               (("add_library\\((city|xx)hash STATIC") "if()\nendif(")
-               (("ext/xxhash\\.[ch]") "")
-               (("ext/cityhash/.*\\.(cpp|h)") "")
-               (("if\\(USE_MINIUPNPC\\)" all)
-                (string-append all "
+  (package
+    (name "ppsspp")
+    (version "1.12.3")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/hrydgard/ppsspp")
+             (commit (string-append "v" version))))
+       (sha256
+        (base32 "1p6pmp0lhqhk9h5r9xsjicd0zn08bwx3y8533npps96ixwbm2y15"))
+       (file-name (git-file-name name version))
+       (patches
+        (search-patches "ppsspp-disable-upgrade-and-gold.patch"))
+       (modules '((guix build utils)))
+       (snippet
+        `(begin
+           ;; The following is quite a heavy-handed way of unbundling PPSSPP.
+           ;; There are still a number of external sources, that we don't
+           ;; remove here.  Some may be packaged, others are not.
+           ;; First, we patch existing sources to include the right headers.
+           (substitute* (append (find-files "Common" ".*\\.(h|cpp)")
+                                (find-files "Core" ".*\\.(h|cpp)")
+                                (find-files "GPU" ".*\\.(h|cpp)")
+                                (find-files "SDL" ".*\\.(h|cpp)")
+                                (find-files "UI" ".*\\.(h|cpp)"))
+             ;; These headers are all hard-coded in the original source.
+             (("ext/cityhash/") "")
+             (("ext/glslang/glslang/") "glslang/")
+             (("ext/glslang/") "glslang/")
+             (("ext/miniupnp/") "")
+             (("ext/SPIRV-Cross/") "spirv_cross/")
+             (("ext/vulkan/") "vulkan/")
+             (("ext/xxhash.h") "xxhash.h")
+             ;; These definitions do not actually exist in the Vulkan headers,
+             ;; but PPSSPP defines them in ext/vulkan.
+             (("VK_FORMAT_BEGIN_RANGE") "VK_FORMAT_UNDEFINED")
+             (("VK_FORMAT_END_RANGE") "VK_FORMAT_ASTC_12x12_SRGB_BLOCK"))
+           ;; Next, we patch CMakeLists.
+           (substitute* "CMakeLists.txt"
+             ;; Drop unnecessary includes and targets.
+             (("include_directories\\(ext/glslang\\)") "")
+             (("include_directories\\(ext/xxhash\\)") "")
+             (("include_directories\\(ext/cityhash\\)") "")
+             (("include_directories\\(ext/zstd.*") "")
+             (("libzstd_static") "zstd")
+             (("set_target_properties\\(cityhash .*\\)") "")
+             ;; Fix linking to GLEW.
+             (("TARGET Ext::GLEW") "true")
+             (("target_link_libraries\\(native Ext::GLEW\\)")
+              "find_package(GLEW)\ntarget_link_libraries(native GLEW::GLEW)")
+             (("Ext::Snappy") "snappy")
+             ;; Don't search for cityhash/xxhash, we already have them.
+             (("add_library\\((city|xx)hash STATIC") "if()\nendif(")
+             (("ext/xxhash\\.[ch]") "")
+             (("ext/cityhash/.*\\.(cpp|h)") "")
+             (("if\\(USE_MINIUPNPC\\)" all)
+              (string-append all "
 find_package(miniupnpc)
 target_link_libraries(${CoreLibName} miniupnpc ${LDLIBS})
 elseif(FALSE)"))
-               ;; Link all of spirv-cross.
-               (("spirv-cross-glsl" all)
-                (string-append all
-                               " spirv-cross-core spirv-cross-cpp"
-                               " spirv-cross-reflect spirv-cross-util")))
-             (substitute* "ext/CMakeLists.txt"
-               (("add_subdirectory\\(glew.*") "")
-               (("add_subdirectory\\(glslang.*") "")
-               (("add_subdirectory\\(snappy.*") "")
-               (("add_subdirectory\\(SPIRV-Cross-build.*") "")
-               (("add_subdirectory\\(zstd.*") ""))
-             ;; Finally, we can delete the bundled sources.
-             (for-each delete-file-recursively
-                       '("MoltenVK"
-                         "ext/cmake"
-                         "ext/glew"
-                         "ext/glslang" "ext/glslang-build"
-                         "ext/miniupnp" "ext/miniupnp-build"
-                         "ext/native"
-                         "ext/snappy"
-                         "ext/SPIRV-Cross" "ext/SPIRV-Cross-build"
-                         "ext/vulkan"
-                         "ext/xxhash.c"
-                         "ext/xxhash.h"
-                         "ext/zlib"
-                         "ext/zstd"))
-             ;; Since we are not including git as an input, PPSSPP is confused
-             ;; about its version.  Let's fix that here.
-             (substitute* "git-version.cmake"
-               (("unknown") ,version))))))
-      (build-system cmake-build-system)
-      (native-inputs
-       `(("pkg-config" ,pkg-config)
-         ("python" ,python)))
-      (inputs
-       `(("cityhash" ,cityhash)
-         ;; ppsspp doesn't yet build with ffmpeg 4.4 (see:
-         ("ffmpeg" ,ffmpeg)
-         ("glew" ,glew)
-         ("glslang" ,glslang)
-         ("libpng" ,libpng)
-         ("libzip" ,libzip)
-         ("mesa" ,mesa)
-         ("miniupnpc" ,miniupnpc)
-         ("sdl2" ,sdl2)
-         ("snappy" ,snappy)
-         ("spirv-cross" ,spirv-cross)
-         ("vulkan-headers" ,vulkan-headers)
-         ("vulkan-loader" ,vulkan-loader)
-         ("xxhash" ,xxhash)
-         ("zlib" ,zlib)
-         ("zstd" ,zstd "lib")
-;         ("zstd" ,zstd "static")
-         ;; TODO: unbundle armips.
-         ("armips-source" ,(package-source armips))
-         ("lang"
-          ,(let ((commit "6bd5b4bc983917ea8402f73c726b46e36f3de0b4"))
-             (origin
-               (method git-fetch)
-               (uri (git-reference
-                     (url "https://github.com/hrydgard/ppsspp-lang")
-                     (commit commit)))
-               (sha256
-                (base32 "08npr3a4xskf85gnlxidl4ksc3rhc7m5rgnj7vsbjvhvw5ap02qx"))
-               (file-name (git-file-name "ppsspp-lang" commit)))))
-         ("tests"
-          ,(let ((commit "1047400eaec6bcbdb2a64d326375ef6a6617c4ac"))
-             (origin
-               (method git-fetch)
-               (uri (git-reference
-                     (url "https://github.com/hrydgard/pspautotests")
-                     (commit commit)))
-               (sha256
-                (base32 "0nxv1lskcr8zbg6nrfai21mxsw0n5vaqhbsa41c3cxfyx5c4w2pg"))
-               (file-name (git-file-name "pspautotests" commit)))))))
-      (arguments
-       `(#:out-of-source? #f
-         #:configure-flags (list "-DUSE_DISCORD=OFF"
-                                 "-DUSE_SYSTEM_FFMPEG=ON"
-                                 "-DUSE_SYSTEM_LIBZIP=ON"
-                                 ;; for testing
-                                 "-DUNITTEST=ON" "-DHEADLESS=ON")
-         #:phases
-         (modify-phases %standard-phases
-           (add-after 'unpack 'add-external-sources
-             (lambda* (#:key inputs #:allow-other-keys)
-               ;; TODO: unbundle armips.
-               (copy-recursively (assoc-ref inputs "armips-source")
-                                 "ext/armips")
-               ;; Some tests are externalised, so we add them here.
-               (copy-recursively (assoc-ref inputs "tests")
-                                 "pspautotests")
-               ;; i18n is externalised, so we add it here.
-               (copy-recursively (assoc-ref inputs "lang")
-                                 "assets/lang")
-               #t))
-           (add-after 'unpack 'fix-unittest-build
-             (lambda _
-               (substitute* "CMakeLists.txt"
-                 (("unittest/TestVertexJit.cpp" all)
-                  (string-append all " unittest/TestShaderGenerators.cpp")))
-               (substitute* "unittest/TestVertexJit.cpp"
-                 (("#include \"unittest/UnitTest.h\"" all)
-                  (string-append all "\n#include <cmath>")))
-               #t))
-           (replace 'check
-             (lambda _
-               (for-each
-                (lambda (t) (invoke "./unitTest" t))
-                '("Arm64Emitter" "ArmEmitter" "X64Emitter" "VertexJit" "Asin"
-                  "SinCos" #|"VFPUSinCos" SIGSEGV|# "MathUtil" "Parsers" "Jit"
-                  "MatrixTranspose" "ParseLBN" "QuickTexHash" "CLZ"
-                  #|"ShaderGenerators"|#))
-               (invoke "python3" "test.py" "-g")
-               #t))
-           (replace 'install
-             (lambda* (#:key inputs outputs #:allow-other-keys)
-               (let* ((out (assoc-ref outputs "out"))
-                      (bin/ppsspp (string-append out "/bin/ppsspp"))
-                      (share (string-append out "/share/ppsspp")))
-                 (copy-recursively "icons/hicolor"
-                                   (string-append out "/share/icons/hicolor"))
-                 (install-file "PPSSPPSDL" share)
-                 (copy-recursively "assets" (string-append share "/assets"))
+             ;; Link all of spirv-cross.
+             (("spirv-cross-glsl" all)
+              (string-append all
+                             " spirv-cross-core spirv-cross-cpp"
+                             " spirv-cross-reflect spirv-cross-util")))
+           (substitute* "ext/CMakeLists.txt"
+             (("add_subdirectory\\(glew.*") "")
+             (("add_subdirectory\\(glslang.*") "")
+             (("add_subdirectory\\(snappy.*") "")
+             (("add_subdirectory\\(SPIRV-Cross-build.*") "")
+             (("add_subdirectory\\(zstd.*") ""))
+           ;; Finally, we can delete the bundled sources.
+           (for-each delete-file-recursively
+                     '("ext/cmake"
+                       "ext/glew"
+                       "ext/glslang" "ext/glslang-build"
+                       "ext/miniupnp" "ext/miniupnp-build"
+                       "ext/native"
+                       "ext/snappy"
+                       "ext/SPIRV-Cross" "ext/SPIRV-Cross-build"
+                       "ext/vulkan"
+                       "ext/xxhash.c"
+                       "ext/xxhash.h"
+                       "ext/zlib"
+                       "ext/zstd"))
+           ;; Since we are not including git as an input, PPSSPP is confused
+           ;; about its version.  Let's fix that here.
+           (substitute* "git-version.cmake"
+             (("unknown") ,version))))))
+    (build-system cmake-build-system)
+    (native-inputs (list pkg-config python))
+    (inputs (list bash
+                  cityhash
+                  ffmpeg
+                  glew
+                  glslang
+                  libpng
+                  libzip
+                  mesa
+                  miniupnpc
+                  sdl2
+                  snappy
+                  spirv-cross
+                  vulkan-headers
+                  vulkan-loader
+                  xxhash
+                  zlib
+                  `(,zstd "lib")))
+    (arguments
+     (list
+      #:out-of-source? #f
+      #:configure-flags #~(list "-DUSE_DISCORD=OFF"
+                                "-DUSE_SYSTEM_FFMPEG=ON"
+                                "-DUSE_SYSTEM_LIBZIP=ON"
+                                ;; for testing
+                                "-DUNITTEST=ON" "-DHEADLESS=ON")
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'add-external-sources
+            (lambda* (#:key inputs #:allow-other-keys)
+              ;; TODO: unbundle armips.
+              (copy-recursively #$(package-source armips) "ext/armips")
+              ;; Some tests are externalised, so we add them here.
+              (copy-recursively
+               #$(let ((commit "1047400eaec6bcbdb2a64d326375ef6a6617c4ac"))
+                   (origin
+                     (method git-fetch)
+                     (uri (git-reference
+                           (url "https://github.com/hrydgard/pspautotests")
+                           (commit commit)))
+                     (sha256
+                      (base32 "0nxv1lskcr8zbg6nrfai21mxsw0n5vaqhbsa41c3cxfyx5c4w2pg"))
+                     (file-name (git-file-name "pspautotests" commit))))
+               "pspautotests")))
+          (add-after 'unpack 'fix-unittest-build
+            (lambda _
+              (substitute* "CMakeLists.txt"
+                (("unittest/TestVertexJit.cpp" all)
+                 (string-append all " unittest/TestShaderGenerators.cpp")))
+              (substitute* "unittest/TestVertexJit.cpp"
+                (("#include \"unittest/UnitTest.h\"" all)
+                 (string-append all "\n#include <cmath>")))))
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (for-each
+                 (lambda (t) (invoke "./unitTest" t))
+                 '("Arm64Emitter" "ArmEmitter" "X64Emitter" "VertexJit" "Asin"
+                   "SinCos" "VFPUSinCos" "MathUtil" "Parsers" "Jit"
+                   "MatrixTranspose" "ParseLBN" "QuickTexHash" "CLZ"
+                   #|"ShaderGenerators"|#))
+                (invoke "python3" "test.py" "-g"))))
+          (replace 'install
+            (lambda* (#:key inputs outputs #:allow-other-keys)
+              (let* ((out (assoc-ref outputs "out"))
+                     (bin/ppsspp (string-append out "/bin/ppsspp"))
+                     (share (string-append out "/share/ppsspp")))
+                (copy-recursively "icons/hicolor"
+                                  (string-append out "/share/icons/hicolor"))
+                (install-file "PPSSPPSDL" share)
+                (copy-recursively "assets" (string-append share "/assets"))
 
-                 (make-desktop-entry-file
-                  (string-append out "/share/applications/ppsspp.desktop")
-                  #:name "PPSSPP"
-                  #:exec (string-append share "/PPSSPPSDL")
-                  #:icon "ppsspp")
-                 (mkdir-p (string-append out "/bin"))
-                 (with-output-to-file bin/ppsspp
-                   (lambda ()
-                     (format #t "#!~a~%exec ~a/PPSSPPSDL \"$@\""
-                             (which "sh") share)))
-                 (chmod bin/ppsspp #o755)
-                 #t))))))
-      (home-page "https://www.ppsspp.org/")
-      (synopsis "PSP emulator")
-      (description
-       "PPSSPP is a ``high-level'' emulator simulating the PSP operating
+                (make-desktop-entry-file
+                 (string-append out "/share/applications/ppsspp.desktop")
+                 #:name "PPSSPP"
+                 #:exec (string-append share "/PPSSPPSDL")
+                 #:icon "ppsspp")
+                (mkdir-p (string-append out "/bin"))
+                (with-output-to-file bin/ppsspp
+                  (lambda ()
+                    (format #t "#!~a~%exec ~a/PPSSPPSDL \"$@\""
+                            (search-input-file inputs "/bin/bash") share)))
+                (chmod bin/ppsspp #o755)))))))
+    (home-page "https://www.ppsspp.org/")
+    (synopsis "PSP emulator")
+    (description
+     "PPSSPP is a ``high-level'' emulator simulating the PSP operating
 system.")
-      (license license:gpl2+))))
+    (license license:gpl2+)))
 
 (define-public exomizer
   (package
@@ -2510,8 +2417,7 @@ system.")
                (install-file "exobasic" out-bin))
              #t)))))
     (native-inputs
-     `(("flex" ,flex)
-       ("bison" ,bison)))
+     (list flex bison))
     (synopsis "Compressor for use on Commodore home computers")
     (description "This program compresses files in a way that tries to be as
 efficient as possible but still allows them to be decompressed in environments
diff --git a/gnu/packages/enchant.scm b/gnu/packages/enchant.scm
index f32e59ef54..4b31c3131b 100644
--- a/gnu/packages/enchant.scm
+++ b/gnu/packages/enchant.scm
@@ -58,16 +58,16 @@
         (base32 "0wbb6dwmzlsyy224y0liis0azgzwbjdvcyzc31pw1aw6vbp36na6"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("catch" ,catch-framework2)
-       ("git" ,git-minimal)
-       ("perl" ,perl)
-       ;;FIX-ME: Building with ronn fails.
-       ;;("ronn" ,ronn)
-       ("pkg-config" ,pkg-config)))
+     (list catch-framework2
+           git-minimal
+           perl
+           ;;FIX-ME: Building with ronn fails.
+           ;;("ronn" ,ronn)
+           pkg-config))
     (inputs
-     `(("boost" ,boost)))
+     (list boost))
     (propagated-inputs
-     `(("icu4c" ,icu4c)))
+     (list icu4c))
     (synopsis "Fast and safe spellchecking C++ library")
     (description "Nuspell is a fast and safe spelling checker software
 program.  It is designed for languages with rich morphology and complex word
@@ -94,11 +94,10 @@ dictionaries.")
                            ;; Tests require a relocatable build.
                            "--enable-relocatable")))
     (inputs
-     `(("aspell" ,aspell)
-       ("hunspell" ,hunspell)))
+     (list aspell hunspell))
     (propagated-inputs
      ;; Required by enchant.pc.
-     `(("glib" ,glib)))
+     (list glib))
     (native-inputs
      `(("glib:bin" ,glib "bin")
        ("pkg-config" ,pkg-config)
@@ -157,7 +156,7 @@ working\".")
                                "    yield \"" (assoc-ref inputs "enchant")
                                "/lib/libenchant-2.so\""))))))))
     (inputs
-     `(("enchant" ,enchant)))
+     (list enchant))
     (home-page "https://github.com/pyenchant/pyenchant")
     (synopsis "Spellchecking library for Python")
     (description "PyEnchant is a spellchecking library for Python, based on the
diff --git a/gnu/packages/engineering.scm b/gnu/packages/engineering.scm
index 073d524955..23133a50eb 100644
--- a/gnu/packages/engineering.scm
+++ b/gnu/packages/engineering.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; 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 © 2015 Federico Beffa <beffa@fbengineering.ch>
 ;;; Copyright © 2016, 2018, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 David Thompson <davet@gnu.org>
@@ -23,8 +23,10 @@
 ;;; Copyright © 2020, 2021 Morgan Smith <Morgan.J.Smith@outlook.com>
 ;;; Copyright © 2021 qblade <qblade@protonmail.com>
 ;;; Copyright © 2021 Gerd Heber <gerd.heber@gmail.com>
-;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2021, 2022 Guillaume Le Vaillant <glv@posteo.net>
 ;;; Copyright © 2021 Ivan Gankevich <i.gankevich@spbu.ru>
+;;; Copyright © 2021 Petr Hodina <phodina@protonmail.com>
+;;; Copyright © 2021 Foo Chuan Wei <chuanwei.foo@hotmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -95,6 +97,7 @@
   #:use-module (gnu packages image)
   #:use-module (gnu packages image-processing)
   #:use-module (gnu packages imagemagick)
+  #:use-module (gnu packages kde-frameworks)
   #:use-module (gnu packages libevent)
   #:use-module (gnu packages libusb)
   #:use-module (gnu packages linux)               ;FIXME: for pcb
@@ -129,6 +132,7 @@
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xiph)
   #:use-module (gnu packages openkinect)
+  #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xorg))
 
 (define-public librecad
@@ -136,17 +140,18 @@
     (name "librecad")
     (version "2.2.0-rc2")
     (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "https://github.com/LibreCAD/LibreCAD/archive/"
-                    version ".tar.gz"))
-              (file-name (string-append name "-" version ".tar.gz"))
+              (method git-fetch)
+              (uri (git-reference
+                     (url "https://github.com/LibreCAD/LibreCAD")
+                     (commit version)))
+              (file-name (git-file-name name version))
               (sha256
                (base32
-                "0a7fzhxkkn2s3hkgqrw3s3wyspzfla3c5lgbsjyqzvlnrp3anxnm"))))
-    (build-system gnu-build-system)
+                "08cl4935c9vznz9qdw1zgd86rn7hl64zpfayxl07x21bhf53pn24"))))
+    (build-system qt-build-system)
     (arguments
-     '(#:phases
+     '(#:test-target "check"
+       #:phases
        (modify-phases %standard-phases
          ;; Without this patch boost complains that "make_array" is not a
          ;; member of "boost::serialization".
@@ -186,28 +191,11 @@
                (install-file "unix/librecad" bin)
                (mkdir-p share)
                (copy-recursively "unix/resources" share))
-             #t))
-         ;; Ensure that icons are found at runtime
-         (add-after 'install 'wrap-executable
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (qt '("qtbase" "qtsvg")))
-               (wrap-program (string-append out "/bin/librecad")
-                 `("QT_PLUGIN_PATH" ":" prefix
-                   ,(map (lambda (label)
-                           (string-append (assoc-ref inputs label)
-                                          "/lib/qt5/plugins/"))
-                         qt)))
-               #t))))))
+             #t)))))
     (inputs
-     `(("boost" ,boost)
-       ("muparser" ,muparser)
-       ("freetype" ,freetype)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)))
+     (list boost muparser freetype qtbase-5 qtsvg))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("which" ,which)))
+     (list pkg-config which))
     (home-page "https://librecad.org/")
     (synopsis "Computer-aided design (CAD) application")
     (description
@@ -218,7 +206,7 @@ plans and designs.")
 (define-public geda-gaf
   (package
     (name "geda-gaf")
-    (version "1.10.0")
+    (version "1.10.2")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -227,7 +215,7 @@ plans and designs.")
                     version "/geda-gaf-" version ".tar.gz"))
               (sha256
                (base32
-                "06ivgarvwbzjz2wigxzzkm8iszldi2p6x3a6jnlczjyrz4csddsy"))))
+                "19688b0671imy2i3jphcnq1120b8ymhr4wz2psiqylr82ljanqp8"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
@@ -262,9 +250,7 @@ plans and designs.")
        ("pcb" ,pcb)
        ("python" ,python-2))) ; for xorn
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("desktop-file-utils" ,desktop-file-utils)
-       ("perl" ,perl))) ; for tests
+     (list groff pkg-config desktop-file-utils perl)) ; for tests
     (home-page "http://geda-project.org/")
     (synopsis "Schematic capture, netlister, symbols, symbol checker, and utils")
     (description
@@ -325,7 +311,8 @@ utilities.")
                (string-append "--with-pcb-datadir=" pcb "/share")
                (string-append "--with-pcb-lib-path="
                               pcb "/share/pcb/pcblib-newlib:"
-                              pcb "/share/pcb/newlib")))
+                              pcb "/share/pcb/newlib")
+               "CFLAGS=-fcommon"))
        #:phases
        (modify-phases %standard-phases
          (add-before 'build 'fix-dynamic-link
@@ -337,12 +324,10 @@ utilities.")
              (substitute* '("libleptongui/scheme/schematic/ffi/gtk.scm.in"
                             "utils/attrib/lepton-attrib.scm")
                (("@LIBGTK@")
-                (string-append (assoc-ref inputs "gtk")
-                               "/lib/libgtk-3.so")))
+                (search-input-file inputs "/lib/libgtk-3.so")))
              (substitute* '("libleptongui/scheme/schematic/ffi/gobject.scm.in")
                (("@LIBGOBJECT@")
-                (string-append (assoc-ref inputs "glib")
-                               "/lib/libgobject-2.0.so")))
+                (search-input-file inputs "/lib/libgobject-2.0.so")))
              (substitute* "liblepton/scheme/lepton/ffi.scm.in"
                (("@LIBLEPTON@")
                 (string-append (assoc-ref outputs "out")
@@ -353,8 +338,7 @@ utilities.")
                                "/lib/libleptonattrib.so")))
              (substitute* "liblepton/scheme/lepton/log.scm.in"
                (("@LIBGLIB@")
-                (string-append (assoc-ref inputs "glib")
-                               "/lib/libglib-2.0.so")))
+                (search-input-file inputs "/lib/libglib-2.0.so")))
 
              ;; For finding libraries when running tests before installation.
              (setenv "LIBLEPTONGUI"
@@ -439,7 +423,8 @@ features.")))
              ;; fix of the mesa package we wrap the pcb executable such that
              ;; Mesa can find libudev.so.0 through LD_LIBRARY_PATH.
              (let* ((out (assoc-ref outputs "out"))
-                    (path (string-append (assoc-ref inputs "udev") "/lib")))
+                    (path (dirname
+                           (search-input-file inputs "/lib/libudev.so"))))
                (wrap-program (string-append out "/bin/pcb")
                  `("LD_LIBRARY_PATH" ":" prefix (,path))))
              #t))
@@ -528,7 +513,7 @@ featuring various improvements and bug fixes.")))
      ;; FIXME: with texlive-tiny citation references are rendered as question
      ;; marks.  During the build warnings like these are printed:
      ;; LaTeX Warning: Citation `nabors91' on page 2 undefined on input line 3.
-     `(("texlive" ,(texlive-union (list texlive-fonts-amsfonts)))
+     `(("texlive" ,(texlive-updmap.cfg (list texlive-amsfonts)))
        ("ghostscript" ,ghostscript)))
     (arguments
      `(#:make-flags '("CC=gcc" "RM=rm" "SHELL=sh" "all")
@@ -732,6 +717,43 @@ ready for production.")
     ;; released under GPLv3+.
     (license (list license:gpl3+ license:cc-by-sa3.0))))
 
+(define-public qelectrotech
+  (package
+    (name "qelectrotech")
+    (version "0.8.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://git.tuxfamily.org/qet/qet.git/"
+                           "snapshot/qet-" version ".tar.gz"))
+       (sha256
+        (base32 "0w70fqwhqqzga1kfp34v8z1xf9988nvvi3d5gwl2sg429p9mpsk2"))))
+    (build-system qt-build-system)
+    (arguments
+     ;; XXX: tests are built for the CMake build option but it seems to be
+     ;; broken in 0.8.0.
+     `(#:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'configure
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               ;; Patch hardcoded path before running qmake.
+               (substitute* "qelectrotech.pro" (("\\/usr\\/local") out))
+               (invoke "qmake")))))))
+    (native-inputs
+     (list pkg-config qttools))
+    (inputs
+     (list kcoreaddons kwidgetsaddons qtbase-5 qtsvg sqlite))
+    (home-page "https://qelectrotech.org/")
+    (synopsis "CAD/CAE editor focusing on schematics drawing features")
+    (description "QElectroTech, or QET in short, is a desktop application to
+create diagrams and schematics.  The software is primarily intended to create
+electrical documentation but it can also be used to draw any kinds of diagrams,
+such as those made in pneumatics, hydraulics, process industries, electronics,
+and others.")
+    (license license:gpl2+)))
+
 (define-public gerbv
   (package
     (name "gerbv")
@@ -744,6 +766,8 @@ ready for production.")
                (base32
                 "1d2k43k7i4yvbpi4sw1263a8d0q98z2n7aqhmpinpkih8a681vn5"))))
     (build-system gnu-build-system)
+    (arguments
+     '(#:configure-flags '("CFLAGS=-fcommon")))
     (native-inputs
      `(("glib:bin" ,glib "bin")         ; for glib-compile-schemas, etc.
        ("desktop-file-utils" ,desktop-file-utils)
@@ -832,13 +856,9 @@ fonts to gEDA.")
                (substitute* "CMakeLists.txt" (("-march=native") ""))
                #t)))))
       (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
       (inputs
-       `(("boost" ,boost)
-         ("libpng" ,libpng)
-         ("qtbase" ,qtbase-5)
-         ("eigen" ,eigen)
-         ("guile" ,guile-3.0)))
+       (list boost libpng qtbase-5 eigen guile-3.0))
       (home-page "https://libfive.com")
       (synopsis "Tool for programmatic computer-aided design")
       (description
@@ -848,7 +868,10 @@ function calls into the geometry kernel: everything is visible to the user.
 Even fundamental, primitive shapes are represented as code in the user-level
 language.")
       (license (list license:mpl2.0               ;library
-                     license:gpl2+)))))           ;Guile bindings and GUI
+                     license:gpl2+))              ;Guile bindings and GUI
+
+      ;; Mark as tunable to take advantage of SIMD code in Eigen.
+      (properties '((tunable? . #t))))))
 
 (define-public inspekt3d
   (let ((commit "703f52ccbfedad2bf5240bf8183d1b573c9d54ef")
@@ -885,12 +908,9 @@ language.")
                                  "/lib/libfive-guile")))
                #t)))))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("pkg-config" ,pkg-config)))
+       (list autoconf automake pkg-config))
       (inputs
-       `(("mesa" ,mesa)
-         ("guile" ,guile-3.0)))
+       (list mesa guile-3.0))
       (propagated-inputs
        `(("libfive" ,libfive)
          ("guile-opengl" ,guile3.0-opengl)))
@@ -905,7 +925,7 @@ Emacs).")
 (define-public kicad
   (package
     (name "kicad")
-    (version "5.1.6")
+    (version "5.1.12")
     (source
      (origin
        (method git-fetch)
@@ -913,7 +933,7 @@ Emacs).")
              (url "https://gitlab.com/kicad/code/kicad.git")
              (commit version)))
        (sha256
-        (base32 "1pa3z0h0679jmgxlzc833h6q85b5paxdp69kf2h93vkaryj58622"))
+        (base32 "0kgikchqxds3mp71nkg307mr4c1dgv8akbmksz4w9x8jg4i1mfqq"))
        (file-name (git-file-name name version))))
     (build-system cmake-build-system)
     (arguments
@@ -921,9 +941,12 @@ Emacs).")
        #:tests? #f                      ; no tests
        #:build-type "Release"
        #:configure-flags
-       (list "-DKICAD_SCRIPTING_PYTHON3=ON"
-             "-DKICAD_SCRIPTING_WXPYTHON_PHOENIX=ON"
-             "-DCMAKE_BUILD_WITH_INSTALL_RPATH=TRUE")
+       ,#~(list
+           "-DKICAD_SCRIPTING_PYTHON3=ON"
+           "-DKICAD_SCRIPTING_WXPYTHON_PHOENIX=ON"
+           "-DCMAKE_BUILD_WITH_INSTALL_RPATH=TRUE"
+           (string-append "-DOCC_INCLUDE_DIR="
+                          #$(this-package-input "opencascade-occt") "/include/opencascade"))
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'fix-ngspice-detection
@@ -933,6 +956,16 @@ Emacs).")
                 (string-append "NGSPICE_DLL_FILE=\""
                                (assoc-ref inputs "libngspice")
                                "/lib/libngspice.so\"")))))
+         (add-after 'unpack 'fix-python-detection
+           (lambda _
+             (substitute* "CMakeModules/FindPythonLibs.cmake"
+               (("_PYTHON3_VERSIONS 3\\.8 3\\.7")
+                "_PYTHON3_VERSIONS 3.9 3.8 3.7"))))
+         (add-after 'unpack 'add-missing-include
+           (lambda _
+             (substitute* "common/lib_tree_model.cpp"
+               (("#include <eda_pattern_match.h>" all)
+                (string-append "#include <algorithm>\n" all)))))
          (add-after 'install 'install-translations
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (copy-recursively (assoc-ref inputs "kicad-i18n")
@@ -950,9 +983,9 @@ Emacs).")
                            ,(version-major+minor
                              (package-version python))
                            "/site-packages:"
-                           (getenv "PYTHONPATH"))))
+                           (getenv "GUIX_PYTHONPATH"))))
                (wrap-program file
-                 `("PYTHONPATH" ":" prefix (,path))
+                 `("GUIX_PYTHONPATH" ":" prefix (,path))
                  `("PATH" ":" prefix
                    (,(string-append python "/bin:")))))
              #t)))))
@@ -989,12 +1022,12 @@ Emacs).")
        ("libngspice" ,libngspice)
        ("libsm" ,libsm)
        ("mesa" ,mesa)
-       ("opencascade-oce" ,opencascade-oce)
+       ("opencascade-occt" ,opencascade-occt)
        ("openssl" ,openssl)
        ("python" ,python-wrapper)
        ("wxwidgets" ,wxwidgets)
        ("wxpython" ,python-wxpython)))
-    (home-page "https://kicad-pcb.org/")
+    (home-page "https://www.kicad.org/")
     (synopsis "Electronics Design Automation Suite")
     (description "Kicad is a program for the formation of printed circuit
 boards and electrical circuits.  The software has a number of programs that
@@ -1014,7 +1047,7 @@ electrical diagrams), gerbview (viewing Gerber files) and others.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0qryi8xjm23ka363zfl7bbga0v5c31fr3d4nyxp3m168vkv9zhha"))))
+                "0y51l0r62cnxkvpc21732p3cx7pjvaqjih8193502hlv9kv1j9p6"))))
     (build-system cmake-build-system)
     (arguments
      `(#:phases
@@ -1029,13 +1062,10 @@ electrical diagrams), gerbview (viewing Gerber files) and others.")
 translations for KiCad.")
     (license license:gpl3+)))
 
-(define-public kicad-i18l
-  (deprecated-package "kicad-i18l" kicad-i18n))
-
 (define-public kicad-doc
   (package
     (name "kicad-doc")
-    (version "5.1.6")
+    (version (package-version kicad))
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1044,7 +1074,7 @@ translations for KiCad.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "03kvss8a0xrjnfvkwymm0vfd7rn9ix7i926xdzz9jg9iycrjfj3g"))))
+                "026cz4zm903i75yhdvzha2nsnk4c0w07q3gd3xw3jmsmn18imgm3"))))
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags (list "-DBUILD_FORMATS=html")
@@ -1073,12 +1103,12 @@ translations for KiCad.")
     (source (origin
               (method git-fetch)
               (uri (git-reference
-                    (url "https://github.com/KiCad/kicad-symbols")
+                    (url "https://gitlab.com/kicad/libraries/kicad-symbols.git")
                     (commit version)))
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "12w3rdy085drlikkpb27n9ni7cyg9l0pqy7hnr86cxjcw3l5wcx6"))))
+                "1zdajim409570xzis53kmrbdcf7000v2vmc90f49h214lrx2zhr2"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f))                    ; no tests exist
@@ -1102,12 +1132,12 @@ libraries.")
     (source (origin
               (method git-fetch)
               (uri (git-reference
-                    (url "https://github.com/KiCad/kicad-footprints")
+                    (url "https://gitlab.com/kicad/libraries/kicad-footprints.git")
                     (commit version)))
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1kmf91a5mmvj9izrv40mkaw1w36yjgn8daczd9rq2wlmd0rdp1zx"))))
+                "0qpii55dgv2gxqg1qq0dngdnbb9din790qi5qv0l6qqrzx843h5s"))))
     (synopsis "Official KiCad footprint libraries")
     (description "This package contains the official KiCad footprint libraries.")))
 
@@ -1119,12 +1149,12 @@ libraries.")
     (source (origin
               (method git-fetch)
               (uri (git-reference
-                    (url "https://github.com/KiCad/kicad-packages3d")
+                    (url "https://gitlab.com/kicad/libraries/kicad-packages3D.git")
                     (commit version)))
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0b9jglf77fy0n0r8xs4yqkv6zvipyfvp0z5dnqlzp32csy5aqpi1"))))
+                "12w7m5nbk9kcnlnlg4sk1sd7xgb9i2kxfi0jcbd0phs89qyl7wjr"))))
     (synopsis "Official KiCad 3D model libraries")
     (description "This package contains the official KiCad 3D model libraries.")))
 
@@ -1136,12 +1166,12 @@ libraries.")
     (source (origin
               (method git-fetch)
               (uri (git-reference
-                    (url "https://github.com/KiCad/kicad-templates")
+                    (url "https://gitlab.com/kicad/libraries/kicad-templates.git")
                     (commit version)))
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1hppcsrkn4dk6ggby6ckh0q65qxkywrbyxa4lwpaf7pxjyv498xg"))))
+                "1fbhn1l3j2rwc29aida9b408wif55i23bp9ddcs7dvf83smjm05g"))))
     (synopsis "Official KiCad project and worksheet templates")
     (description "This package contains the official KiCad project and
 worksheet templates.")))
@@ -1159,6 +1189,8 @@ worksheet templates.")))
                (base32
                 "13qj7n9826qc9shkkgd1p6vcpj78v4h9d67wbg45prg7rbnzkzds"))))
     (build-system gnu-build-system)
+    (arguments
+     '(#:configure-flags '("CFLAGS=-fcommon")))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("gtk" ,gtk+-2)
@@ -1170,6 +1202,44 @@ educational use.  As such, there is an emphasis on capabilities that improve
 the 'showing the effect of'-style of operation.")
     (license license:gpl2+)))
 
+(define-public valeronoi
+(package
+  (name "valeronoi")
+  (version "0.1.6")
+  (source
+   (origin
+     (method git-fetch)
+     (uri
+      (git-reference
+       (url "https://github.com/ccoors/Valeronoi")
+       (commit (string-append "v" version))))
+     (file-name (git-file-name name version))
+     (sha256
+      (base32 "1hpyh4mmjnxgkij7a6rynk2ril5413nkdvf8syn0lqvrmibdg7wv"))))
+  (build-system cmake-build-system)
+  (arguments
+   `(#:phases
+     (modify-phases %standard-phases
+       (replace 'check
+         (lambda* (#:key tests? #:allow-other-keys)
+           (when tests?
+             (invoke "./valeronoi-tests")))))))
+  (inputs
+   (list boost
+         cgal
+         gmp
+         libxkbcommon
+         mpfr
+         openssl
+         qtbase-5
+         qtsvg))
+  (home-page "https://github.com/ccoors/Valeronoi")
+  (synopsis "WiFi mapping companion application for Valetudo")
+  (description
+   "Valeronoi (Valetudo + Voronoi) is a companion for Valetudo for generating
+WiFi signal strength maps.  It visualizes them using a Voronoi diagram.")
+  (license license:gpl3+)))
+
 (define-public volk
   (package
     (name "volk")
@@ -1207,9 +1277,9 @@ the 'showing the effect of'-style of operation.")
                            ,(version-major+minor
                              (package-version python))
                            "/site-packages:"
-                           (getenv "PYTHONPATH"))))
+                           (getenv "GUIX_PYTHONPATH"))))
                (wrap-program file
-                 `("PYTHONPATH" ":" prefix (,path))
+                 `("GUIX_PYTHONPATH" ":" prefix (,path))
                  `("PATH" ":" prefix
                    (,(string-append python "/bin:")))))
              #t)))))
@@ -1248,7 +1318,7 @@ use on a given system.")
        ("python" ,python-wrapper)
        ("python-libxml2" ,python-libxml2)))
     (inputs
-     `(("pcre2" ,pcre2)))
+     (list pcre2))
     (home-page "https://www.gnu.org/software/libredwg/")
     (synopsis "C library to handle DWG (CAD-related) files")
     (description
@@ -1293,7 +1363,7 @@ replacement for the OpenDWG libraries.")
        ("gettext" ,gettext-minimal)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (home-page "https://salsa.debian.org/minicom-team/minicom")
     (synopsis "Serial terminal emulator")
     (description "@code{minicom} is a serial terminal emulator.")
@@ -1356,7 +1426,7 @@ send break and throttle transmission speed.")
     (native-inputs
      `(("fortran" ,gfortran)))
     (inputs
-     `(("lapack" ,lapack)))
+     (list lapack))
     (home-page "https://github.com/stevengj/harminv")
     (synopsis "Harmonic inversion solver")
     (description
@@ -1385,7 +1455,7 @@ determines the frequencies, decay constants, amplitudes, and phases of those sin
     (native-inputs
      `(("fortran" ,gfortran)))
     (inputs
-     `(("guile" ,guile-2.2)))
+     (list guile-2.2))
     (home-page "http://ab-initio.mit.edu/wiki/index.php/Libctl")
     (synopsis "Flexible control files implementation for scientific simulations")
     (description
@@ -1490,13 +1560,13 @@ developed at MIT to model electromagnetic systems.")
                 "0i37c9k6q1iglmzp9736rrgsnx7sw8xn3djqbbjw29zsyl3pf62c"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("bison" ,bison)
-       ("flex" ,flex)
-       ("libtool" ,libtool)
-       ("perl" ,perl)
-       ("perl-xml-libxml" ,perl-xml-libxml)))
+     (list autoconf
+           automake
+           bison
+           flex
+           libtool
+           perl
+           perl-xml-libxml))
     (home-page "https://github.com/Qucs/ADMS")
     (synopsis "Automatic device model synthesizer")
     (description
@@ -1549,7 +1619,7 @@ bindings for Python, Java, OCaml and more.")
     (inherit capstone)
     (name "python-capstone")
     (propagated-inputs
-     `(("capstone" ,capstone)))
+     (list capstone))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -1582,12 +1652,9 @@ bindings for Python, Java, OCaml and more.")
         (base32
          "0d69rd9h8wrzjvfrc66vmz4qd5hly2fpdcwj2bdrlb7dbwikv5c7"))))
     (build-system python-build-system)
-    (arguments
-     `(#:tests? #f))                    ;XXX: require python-reedsolo
     (propagated-inputs
-     `(("python-ecdsa" ,python-ecdsa)
-       ("python-pyaes" ,python-pyaes)
-       ("python-pyserial" ,python-pyserial)))
+     (list python-ecdsa python-pyaes python-pyserial python-reedsolo
+           python-cryptography python-bitstring))
     (home-page "https://github.com/espressif/esptool")
     (synopsis "Bootloader utility for Espressif ESP8266 & ESP32 chips")
     (description
@@ -1628,15 +1695,12 @@ bootloader in Espressif ESP8266 & ESP32 series chips.")
        (list "CC=gcc")))
     ;; TODO: Add gmp and libzip and make the build system actually find them.
     (inputs
-     `(("capstone" ,capstone)
-       ("libuv" ,libuv)
-       ("openssl" ,openssl)
-       ("zip" ,zip)))
+     (list capstone libuv openssl zip))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (propagated-inputs
      ;; In the Libs: section of r_hash.pc.
-     `(("xxhash" ,xxhash)))
+     (list xxhash))
     (home-page "https://radare.org/")
     (synopsis "Reverse engineering framework")
     (description
@@ -1695,7 +1759,7 @@ it suitable for security research and analysis.")
     (native-inputs
      `(("mpi" ,openmpi)))
     (inputs
-     `(("coreutils-minimal" ,coreutils-minimal)))
+     (list coreutils-minimal))
     (home-page "http://asco.sourceforge.net/")
     (synopsis "SPICE circuit optimizer")
     (description
@@ -1751,8 +1815,7 @@ high-performance parallel differential evolution (DE) optimization algorithm.")
              ;; https://bugs.archlinux.org/task/70563 for reference.
              "--with-readline=no")))
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)))
+     (list bison flex))
     (inputs
      `(("libxaw" ,libxaw)
        ("mpi" ,openmpi)))
@@ -1786,8 +1849,7 @@ an embedded event driven algorithm.")
            (delete 'delete-program-manuals)
            (delete 'delete-script-files)))))
     (inputs
-     `(("libngspice" ,libngspice)
-       ("readline" ,readline)))))
+     (list libngspice readline))))
 
 (define trilinos-serial-xyce
   ;; Note: This is a Trilinos containing only the packages Xyce needs, so we
@@ -1964,19 +2026,14 @@ parallel computing platforms.  It also supports serial execution.")
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "freehdl/freehdl-config"
                (("pkg-config")
-                (string-append (assoc-ref inputs "pkg-config")
-                               "/bin/pkg-config"))
+                (search-input-file inputs "/bin/pkg-config"))
                (("cat")
-                (string-append (assoc-ref inputs "coreutils")
-                               "/bin/cat")))
-             #t))
+                (search-input-file inputs "/bin/cat")))))
          (add-after 'patch-pkg-config 'setenv
            (lambda* (#:key inputs #:allow-other-keys)
-             (setenv "CXX" (string-append (assoc-ref inputs "gcc")
-                                          "/bin/g++"))
-             (setenv "SYSTEM_LIBTOOL" (string-append (assoc-ref inputs "libtool")
-                                                     "/bin/libtool"))
-             #t))
+             (setenv "CXX" (search-input-file inputs "/bin/g++"))
+             (setenv "SYSTEM_LIBTOOL"
+                     (search-input-file inputs "/bin/libtool"))))
          (add-after 'setenv 'patch-gvhdl
            (lambda _
              (substitute* "v2cc/gvhdl.in"
@@ -1987,7 +2044,7 @@ parallel computing platforms.  It also supports serial execution.")
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "freehdl/freehdl-gennodes.in"
                (("guile")
-                (string-append (assoc-ref inputs "guile") "/bin/guile"))
+                (search-input-file inputs "/bin/guile"))
                (("\\(debug") ";(debug")
                (("\\(@ ") "(apply-emit")
                (("\\(@@ ") "(apply-mini-format"))
@@ -2023,12 +2080,12 @@ parallel computing platforms.  It also supports serial execution.")
                  `("PKG_CONFIG_PATH" ":" prefix (,(string-append out "/lib/pkgconfig")))))
              #t)))))
     (inputs
-     `(("coreutils" ,coreutils)
-       ("gcc-toolchain" ,gcc-toolchain)
-       ("guile" ,guile-2.2)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)
-       ("libtool" ,libtool)))
+     (list coreutils
+           gcc-toolchain
+           guile-2.2
+           perl
+           pkg-config
+           libtool))
     (native-inputs
      `(("pkg-config-native" ,pkg-config)
        ("libtool-native" ,libtool)))
@@ -2043,22 +2100,20 @@ parallel computing platforms.  It also supports serial execution.")
 (define-public librepcb
   (package
     (name "librepcb")
-    (version "0.1.4")
+    (version "0.1.5")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://download.librepcb.org/releases/"
                            version "/librepcb-" version "-source.zip"))
        (sha256
-        (base32 "1b5dkanz3q0y5ag80w0l85hn7axrachb5m9zvyv4zvzrfy09wa88"))))
+        (base32 "0smp1p7wnrj0vh4rmz1cr2krfawc2lzx0pbzmgyay7xdp6jxympr"))))
     (build-system gnu-build-system)
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("zlib" ,zlib)))
+     (list qtbase-5 qtsvg zlib))
     (native-inputs
-     `(("qttools" ,qttools)             ; for lrelease
-       ("unzip" ,unzip)))
+     (list qttools ; for lrelease
+           unzip))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -2066,8 +2121,7 @@ parallel computing platforms.  It also supports serial execution.")
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (mkdir-p "build")
              (chdir "build")
-             (let ((lrelease (string-append (assoc-ref inputs "qttools")
-                                            "/bin/lrelease"))
+             (let ((lrelease (search-input-file inputs "/bin/lrelease"))
                    (out (assoc-ref outputs "out")))
                (invoke "qmake"
                        (string-append "QMAKE_LRELEASE=" lrelease)
@@ -2128,7 +2182,7 @@ printers.")
          "16m09xa685qhj5fqq3bcgakrwnb74xhf5f7rpqkkf9fg8plzbb1g"))))
     (build-system gnu-build-system)
     (inputs
-     `(("readline" ,readline)))
+     (list readline))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -2213,14 +2267,14 @@ simulation.")
                        (string-append "PREFIX=" out)
                        "./src/Cutter.pro")))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("openssl" ,openssl)
-       ;; Depends on radare2 4.5.1 officially, builds and works fine with
-       ;; radare2 5.0.0 but fails to build with radare2 5.1.1.
-       ("radare2" ,radare2-for-cutter)))
+     (list qtbase-5
+           qtsvg
+           openssl
+           ;; Depends on radare2 4.5.1 officially, builds and works fine with
+           ;; radare2 5.0.0 but fails to build with radare2 5.1.1.
+           radare2-for-cutter))
     (home-page "https://github.com/radareorg/cutter")
     (synopsis "GUI for radare2 reverse engineering framework")
     (description "Cutter is a GUI for radare2 reverse engineering framework.
@@ -2250,8 +2304,7 @@ engineers for reverse engineers.")
                                "-DUSE_INCLUDED_GTEST=0"
                                "-DUSE_INCLUDED_SSL=0")))
     (native-inputs
-     `(("googletest" ,googletest)
-       ("pkg-config" ,pkg-config)))
+     (list googletest pkg-config))
     (inputs
      `(("libuuid" ,util-linux "lib")
        ("libzip" ,libzip)
@@ -2377,90 +2430,98 @@ comments.")))
 (define-public freecad
   (package
     (name "freecad")
-    (version "0.19.2")
+    (version "0.19.3")
     (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 "0fhjv0x3dix1c7jml91yx63z9xifjlbhjbcdb73lw80smpxrq7mm"))))
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/FreeCAD/FreeCAD")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1dkiwnqr6bhi2d90hz7ijqd872144c9n9xxpd1vbrmxr2x8cfl88"))
+       (patches (search-patches "freecad-vtk9.patch"
+                                "freecad-boost-serialization.patch"))))
     (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)))
+     (list doxygen
+           graphviz
+           qttools
+           pkg-config
+           python-pyside-2-tools
+           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)
-       ("libxml++" ,libxml++)
-       ("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-5)
-       ("qtsvg" ,qtsvg)
-       ("qtwebkit" ,qtwebkit)
-       ("qtx11extras" ,qtx11extras)
-       ("qtxmlpatterns" ,qtxmlpatterns)
-       ("sqlite" ,sqlite)
-       ("tbb" ,tbb)
-       ("vtk" ,vtk-8)
-       ("xerces-c" ,xerces-c)
-       ("zlib" ,zlib)))
+     (list boost
+           coin3D
+           double-conversion
+           eigen
+           freetype
+           gl2ps
+           glew
+           hdf5-1.10
+           jsoncpp
+           libarea
+           libjpeg-turbo
+           libmedfile
+           libspnav
+           libtheora
+           libtiff
+           libxi
+           libxml++
+           libxmu
+           lz4
+           netcdf
+           opencascade-occt
+           openmpi
+           proj
+           python-gitpython
+           python-matplotlib
+           python-pivy
+           python-ply
+           python-pyside-2
+           python-pyyaml
+           python-shiboken-2
+           python-wrapper
+           qtbase-5
+           qtdeclarative
+           qtsvg
+           qtwebchannel
+           qtwebengine
+           qtx11extras
+           qtxmlpatterns
+           sqlite
+           tbb
+           vtk
+           xerces-c
+           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"))
+       ,#~(list
+           "-DBUILD_QT5=ON"
+           "-DBUILD_FLAT_MESH:BOOL=ON"
+           "-DBUILD_ENABLE_CXX_STD:STRING=C++17"
+           (string-append "-DCMAKE_INSTALL_LIBDIR=" #$output "/lib")
+           (string-append "-DPYSIDE2UICBINARY="
+                          #$(this-package-native-input
+                             "python-pyside-2-tools")
+                          "/bin/uic")
+           (string-append "-DPYSIDE2RCCBINARY="
+                          #$(this-package-native-input
+                             "python-pyside-2-tools")
+                          "/bin/rcc")
+           "-DPYSIDE_LIBRARY=PySide2::pyside2"
+           (string-append
+            "-DPYSIDE_INCLUDE_DIR="
+            #$(this-package-input "python-pyside-2") "/include;"
+            #$(this-package-input "python-pyside-2") "/include/PySide2;"
+            #$(this-package-input "python-pyside-2") "/include/PySide2/QtCore;"
+            #$(this-package-input "python-pyside-2") "/include/PySide2/QtWidgets;"
+            #$(this-package-input "python-pyside-2") "/include/PySide2/QtGui;")
+           "-DSHIBOKEN_LIBRARY=Shiboken2::libshiboken"
+           (string-append "-DSHIBOKEN_INCLUDE_DIR="
+                          #$(this-package-input "python-shiboken-2")
+                          "/include/shiboken2"))
        #:phases
        (modify-phases %standard-phases
          (add-before 'configure 'restore-pythonpath
@@ -2471,8 +2532,8 @@ comments.")))
            (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"))))))))))
+                 (list "GUIX_PYTHONPATH"
+                       'prefix (list (getenv "GUIX_PYTHONPATH"))))))))))
     (home-page "https://www.freecadweb.org/")
     (synopsis "Your Own 3D Parametric Modeler")
     (description
@@ -2503,7 +2564,7 @@ customization.")
         (base32
          "017h9p0x533fm4gn6pwc8kmp72rvqmcn6vznx72nkkl2b05yjx54"))))
     (build-system cmake-build-system)
-    (inputs `(("hdf5" ,hdf5-1.10)))
+    (inputs (list hdf5-1.10))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -2549,8 +2610,7 @@ interpolation toolkit.")
          (sha256
           (base32 "0pvqz6cabxqdz5y26wnj6alkn8v5d7gkx0d3h8xmg4lvy9r3kh3g"))))
       (build-system gnu-build-system)
-      (inputs `(("boost" ,boost)
-                ("python-wrapper" ,python-wrapper)))
+      (inputs (list boost python-wrapper))
       (native-inputs
        `(("cmake" ,cmake-minimal)))
       (arguments
@@ -2592,7 +2652,7 @@ operations.")
               (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (inputs
-     `(("libx11" ,libx11)))
+     (list libx11))
     (arguments `(#:tests? #f))
     (home-page "http://spacenav.sourceforge.net/")
     (synopsis
@@ -2630,7 +2690,7 @@ official SDK.")
           (base32 "01wb70m48xh5gwhv60a5brv4sxl0i0rh038w32cgnlxn5x86s9f1"))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
       (inputs
        `(("mesa" ,mesa)
          ("glu" ,glu)
@@ -2683,7 +2743,7 @@ accessible through a simple API")
         (base32 "1qr9arfdkjf7q11xhvxwzmhxqz3nhcjkyb8zzfjpz9jm54q0rc7m"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://code.google.com/archive/p/lib3ds")
     (synopsis "3DS format file toolkit")
     (description "Lib3ds is a toolkit for handling the 3DS format for 3D
@@ -2706,22 +2766,22 @@ export filters.")
                (base32 "1cgx24wxh2ah5pff51rcrk6x8qcdjpkxcdak7s4cfzmxvjlshydd"))))
     (build-system cmake-build-system)
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtscript" ,qtscript)
-       ("qtxmlpatterns" ,qtxmlpatterns)
-       ("mesa" ,mesa)
-       ("glu" ,glu)
-       ("glew" ,glew)
-       ("muparser" ,muparser)
-       ("gmp" ,gmp)
-       ("eigen" ,eigen)
-       ("libfreenect" ,libfreenect)
-       ("lib3ds" ,lib3ds)
-       ("openctm" ,openctm)
-       ;; FIXME: Compilation fails with system qhull:
-       ;; https://github.com/cnr-isti-vclab/meshlab/issues/678
-       ;; ("qhull" ,qhull)
-       ))
+     (list qtbase-5
+           qtscript
+           qtxmlpatterns
+           mesa
+           glu
+           glew
+           muparser
+           gmp
+           eigen
+           libfreenect
+           lib3ds
+           openctm
+           ;; FIXME: Compilation fails with system qhull:
+           ;; https://github.com/cnr-isti-vclab/meshlab/issues/678
+           ;; ("qhull" ,qhull)
+           ))
     (arguments
      `(#:tests? #f                                ; Has no tests
        #:phases
@@ -2751,42 +2811,70 @@ GUI.")
 (define-public poke
   (package
     (name "poke")
-    (version "1.3")
+    (version "1.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnu/poke/poke-" version
                                   ".tar.gz"))
               (sha256
-               (base32
-                "06qgry1pal2vampmbmc1lzlhf1qnjkd8py781r5h020v981n6y5s"))))
+               (base32 "095a0qal1fwnqxnal0xb4mp0n4zy97j3ww1j04ij3jb0jpr4s1ff"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  ;; Delete files generated by Bison.
+                  (delete-file "gl/parse-datetime.c")
+                  (delete-file "gl/parse-datetime-gen.h")
+                  (delete-file "jitter/example-vms/structured/structured-parser.c")
+                  (delete-file "jitter/example-vms/structured/structured-parser.h")
+                  (delete-file "jitter/jitterc/jitterc-parser.c")
+                  (delete-file "jitter/jitterc/jitterc-parser.h")
+                  (delete-file "jitter/jitter/jitter-routine-parser.c")
+                  (delete-file "jitter/jitter/jitter-routine-parser.h")
+                  (delete-file "libpoke/pkl-tab.c")
+                  (delete-file "libpoke/pkl-tab.h")
+                  (delete-file "poke/pk-map-tab.c")
+                  (delete-file "poke/pk-map-tab.h")
+                  ;; Delete files generated by flex.
+                  (delete-file "jitter/example-vms/structured/structured-scanner.c")
+                  (delete-file "jitter/example-vms/structured/structured-scanner.h")
+                  (delete-file "jitter/jitterc/jitterc-scanner.c")
+                  (delete-file "jitter/jitterc/jitterc-scanner.h")
+                  (delete-file "jitter/jitter/jitter-routine-scanner.c")
+                  (delete-file "jitter/jitter/jitter-routine-scanner.h")
+                  (delete-file "libpoke/pkl-lex.c")
+                  (delete-file "libpoke/pkl-lex.h")
+                  (delete-file "poke/pk-map-lex.c")
+                  (delete-file "poke/pk-map-lex.h")
+                  ;; Other generated files:
+                  (delete-file "jitter/example-vms/jitterlisp/jitterlispvm-vm1.c")
+                  (delete-file "jitter/example-vms/jitterlisp/jitterlispvm-vm2.c")
+                  (delete-file "jitter/example-vms/jitterlisp/jitterlispvm-vm.h")
+                  (delete-file "jitter/example-vms/structured/structuredvm-vm1.c")
+                  (delete-file "jitter/example-vms/structured/structuredvm-vm2.c")
+                  (delete-file "jitter/example-vms/structured/structuredvm-vm.h")
+                  (delete-file "jitter/example-vms/structured/structuredvm-vm-main.c")
+                  (delete-file "jitter/example-vms/uninspired/uninspired-vm1.c")
+                  (delete-file "jitter/example-vms/uninspired/uninspired-vm2.c")
+                  (delete-file "jitter/example-vms/uninspired/uninspired-vm.h")
+                  (delete-file "jitter/example-vms/uninspired/uninspired-vm-main.c")
+                  (delete-file "libpoke/pvm-vm.h")
+                  (delete-file "libpoke/pvm-vm1.c")
+                  (delete-file "libpoke/pvm-vm2.c")))))
     (build-system gnu-build-system)
     ;; The GUI, which we elide, requires tcl and tk.
-    (native-inputs `(;; Requires bison 3.6+ but we currently only have 3.5.
-                     ;; Bison 3.6 will be available in the next core update.
-                     ("bison-3.6" ,bison-3.6)
-                     ("clisp" ,clisp)
-                     ("dejagnu" ,dejagnu)
-                     ("flex" ,flex)
-                     ("libtool" ,libtool)
-                     ("perl" ,perl)
-                     ("pkg-config" ,pkg-config)
-                     ("python-2" ,python-2)
-                     ("python-3" ,python-3)))
+    (native-inputs (list bison dejagnu flex libtool pkg-config))
     ;; FIXME: Enable NBD support by adding `libnbd' (currently unpackaged).
-    (inputs `(("json-c" ,json-c)
-              ("libgc" ,libgc)
-              ("readline" ,readline)
-              ("libtextstyle" ,libtextstyle)))
+    (inputs (list json-c libgc readline libtextstyle))
     (arguments
      ;; To build the GUI, add the `--enable-gui' configure flag.
      ;; To enable the "hyperlink server", add the `--enable-hserver' flag.
      `(#:configure-flags '("--enable-mi")))
-    (home-page "http://jemarch.net/poke.html")
-    (synopsis "Interactive, extensible editor for binary data")
-    (description "GNU poke is an interactive, extensible editor for binary
-  data.  Not limited to editing basic entities such as bits and bytes, it
-  provides a full-fledged procedural, interactive programming language designed
-  to describe data structures and to operate on them.")
+    (home-page "https://www.gnu.org/software/poke/#documentation")
+    (synopsis "Editing of arbitrary binary data")
+    (description "GNU poke is an interactive, extensible editor for binary data.
+Not limited to editing basic entities such as bits and bytes, it provides a
+full-fledged procedural, interactive programming language designed to describe
+data structures and to operate on them.")
     (license license:gpl3+)))
 
 (define-public pcb2gcode
@@ -2806,17 +2894,14 @@ GUI.")
          "0nzglcyh6ban27cc73j4l7w7r9k38qivq0jz8iwnci02pfalw4ry"))))
      (build-system gnu-build-system)
      (inputs
-      `(("boost" ,boost)
-        ("geos" ,geos)
-        ("gerbv" ,gerbv)
-        ("glibmm" ,glibmm)
-        ("gtkmm" ,gtkmm-2)
-        ("librsvg" ,librsvg)))
+      (list boost
+            geos
+            gerbv
+            glibmm
+            gtkmm-2
+            librsvg))
      (native-inputs
-      `(("autoconf" ,autoconf)
-        ("automake" ,automake)
-        ("libtool" ,libtool)
-        ("pkg-config" ,pkg-config)))
+      (list autoconf automake libtool pkg-config))
      (home-page "https://github.com/pcb2gcode/pcb2gcode")
      (synopsis "Generate G-code for milling PCBs")
      (description "pcb2gcode is a command-line program for isolation routing
@@ -2843,10 +2928,9 @@ dynamic calibration of the milling depth.")
          (sha256
           (base32 "17sw78xp5wjzv25adpbq3khl8fi0avj7bgpi57q3jnvl3c68xy5z"))))
       (native-inputs
-       `(("perl" ,perl)
-         ("pkg-config" ,pkg-config)))
+       (list perl pkg-config))
       (inputs
-       `(("capstone" ,capstone)))
+       (list capstone))
       (build-system cmake-build-system)
       (arguments
        `(#:build-type "Release"
@@ -2861,6 +2945,107 @@ hot-patching the machine code of the standard C library in the memory of
 a process.")
       (license license:bsd-2))))
 
+(define-public xfoil
+  (package
+    (name "xfoil")
+    (version "6.99")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://web.mit.edu/drela/Public/web/xfoil/xfoil"
+                           version ".tgz"))
+       (sha256
+        (base32
+         "0h5y5v0qlyvi4qc943x394npz4779i8f52iksxshxkjj7xj500jw"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (add-after 'unpack 'edit-files
+           (lambda* (#:key outputs #:allow-other-keys)
+             ;; The instructions in orrs/README say that orrs/bin/osmap.f
+             ;; should be edited, but that file is never used by XFOIL.
+             ;; Instead, it is osrc/osmap.f that is used.
+             (substitute* "osrc/osmap.f"
+               (("^[ ]{6}DATA OSFILE / '/var/local/codes/orrs/osmap.dat' /")
+                (let ((replacement (string-append (make-string 6 #\space)
+                                                  "DATA OSFILE / '"
+                                                  (assoc-ref outputs "out")
+                                                  "/share/xfoil/osmap.dat' /")))
+                  ;; In fixed form Fortran, lines cannot exceed 72 columns.
+                  ;; The Guix store path exceeds this limit.
+                  (string-append
+                    (substring replacement 0 72) "\n"
+                    (make-string 5 #\space) "&" (substring replacement 72)))))
+             (substitute* "orrs/bin/Makefile_DP"
+               (("^FC = ifort")
+                "FC = gfortran")
+               (("^FLG = -O -r8")
+                "FLG = -O2 -fdefault-real-8"))
+             (substitute* "plotlib/Makefile"
+               (("^include ./config.make")
+                "include ./config.make.gfortranDP"))
+             (substitute* "bin/Makefile_gfortran"
+               (("^BINDIR = /home/codes/bin/")
+                (string-append "BINDIR = " (assoc-ref outputs "out") "/bin"))
+               (("^CC = cc")
+                "CC = gcc")
+               (("^CFLAGS = -O -DUNDERSCORE")
+                "CFLAGS = -O2 -DUNDERSCORE")
+               (("^FFLAGS = -O \\$\\(CHK\\) \\$\\(DBL\\)")
+                "FFLAGS = -O2 $(CHK) $(DBL)")
+               (("^FFLOPT = -O \\$\\(CHK\\) \\$\\(DBL\\)")
+                "FFLOPT = -O2 $(CHK) $(DBL)")
+               ;; Separate the build stage from the install stage.
+               (("\\$\\(INSTALLCMD\\) xfoil \\$\\(BINDIR\\)") "")
+               (("\\$\\(INSTALLCMD\\) pxplot \\$\\(BINDIR\\)") "")
+               (("\\$\\(INSTALLCMD\\) pplot \\$\\(BINDIR\\)") ""))))
+         (replace 'build
+           (lambda _
+             (invoke "make" "-C" "orrs/bin" "-f" "Makefile_DP" "osgen")
+             (with-directory-excursion "orrs"
+               (invoke "bin/osgen" "osmaps_ns.lst"))
+             (invoke "make" "-C" "plotlib")
+             (substitute* "bin/Makefile_gfortran"
+               (("^FFLAGS =(.*)$" _ suffix)
+                (string-append "FFLAGS = -fallow-argument-mismatch "
+                               suffix "\n")))
+             (invoke "make" "-C" "bin" "-f" "Makefile_gfortran")))
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin-dir (string-append out "/bin"))
+                    (data-dir (string-append out "/share/xfoil"))
+                    (doc-dir (string-append out "/share/doc/xfoil")))
+               (mkdir-p bin-dir)
+               (invoke "make" "-C" "bin" "-f" "Makefile_gfortran" "install")
+               (mkdir-p data-dir)
+               (install-file "orrs/osmap.dat" data-dir)
+               (mkdir-p doc-dir)
+               (install-file "xfoil_doc.txt" doc-dir)))))
+       #:tests? #f))
+    (inputs
+     (list libx11))
+    (native-inputs
+     (list gfortran))
+    (home-page "https://web.mit.edu/drela/Public/web/xfoil/")
+    (synopsis "Program for the design and analysis of subsonic airfoils")
+    (description
+     "XFOIL is an interactive program for the design and analysis of subsonic
+isolated airfoils.  It consists of a collection of menu-driven routines which
+perform various useful functions such as:
+@itemize
+@item Viscous (or inviscid) analysis of an existing airfoil
+@item Airfoil design and redesign by interactive modification of surface speed
+      distributions
+@item Airfoil redesign by interactive modification of geometric parameters
+@item Blending of airfoils
+@item Writing and reading of airfoil coordinates and polar save files
+@item Plotting of geometry, pressure distributions, and multiple polars
+@end itemize")
+    (license license:gpl2+)))
+
 (define-public libigl
   (package
     (name "libigl")
@@ -3009,7 +3194,7 @@ visualization, matrix manipulation.")
 (define-public prusa-slicer
   (package
     (name "prusa-slicer")
-    (version "2.3.3")
+    (version "2.4.0")
     (source
      (origin
        (method git-fetch)
@@ -3018,7 +3203,7 @@ visualization, matrix manipulation.")
          (url "https://github.com/prusa3d/PrusaSlicer")
          (commit (string-append "version_" version))))
        (file-name (git-file-name name version))
-       (sha256 (base32 "0w0synqi3iz9aigsgv6x1c6sg123fasbx19h4w3ic1l48r8qmpwm"))
+       (sha256 (base32 "1mb7v0khrmsgy3inmh4mjn709jlhx422kvbnrhsqziph2wwak9bz"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -3051,34 +3236,37 @@ visualization, matrix manipulation.")
          ;; Use wxWidgets 3.0.x.x to prevent GUI crashes when adding support enforcers.
          "-DSLIC3R_WX_STABLE=1")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("boost" ,boost)
-       ("cereal" ,cereal)
-       ("cgal" ,cgal)
-       ("curl" ,curl)
-       ("dbus" ,dbus)
-       ("eigen" ,eigen)
-       ("expat" ,expat)
-       ("glew" ,glew)
-       ("glib" ,glib)
-       ("gmp" ,gmp)
-       ("gtk" ,gtk+)
-       ("hidapi" ,hidapi)
-       ("ilmbase" ,ilmbase)
-       ("libigl" ,libigl)
-       ("libpng" ,libpng)
-       ("mesa" ,mesa)
-       ("mpfr" ,mpfr)
-       ("nlopt" ,nlopt)
-       ("openvdb" ,openvdb)
-       ("pango" ,pango)
-       ("tbb" ,tbb)
-       ("udev" ,eudev)
-       ("wxwidgets" ,wxwidgets)
-       ("zlib" ,zlib)))
+     (list boost
+           cereal
+           cgal
+           curl
+           dbus
+           eigen
+           expat
+           glew
+           glib
+           gmp
+           gtk+
+           hidapi
+           ilmbase
+           libigl
+           libpng
+           mesa
+           mpfr
+           nlopt
+           openvdb
+           pango
+           tbb
+           eudev
+           wxwidgets
+           zlib))
     (home-page "https://www.prusa3d.com/prusaslicer/")
     (synopsis "G-code generator for 3D printers (RepRap, Makerbot, Ultimaker etc.)")
     (description "PrusaSlicer takes 3D models (STL, OBJ, AMF) and converts them into
 G-code instructions for FFF printers or PNG layers for mSLA 3D printers.")
-    (license license:agpl3)))
+    (license license:agpl3)
+
+    ;; Mark as tunable to take advantage of SIMD code in Eigen and in libigl.
+    (properties '((tunable? . #t)))))
diff --git a/gnu/packages/enlightenment.scm b/gnu/packages/enlightenment.scm
index 9c83e9b482..f1013af43d 100644
--- a/gnu/packages/enlightenment.scm
+++ b/gnu/packages/enlightenment.scm
@@ -50,6 +50,7 @@
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages ibus)
   #:use-module (gnu packages image)
+  #:use-module (gnu packages libunwind)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages llvm)
   #:use-module (gnu packages lua)
@@ -69,7 +70,7 @@
 (define-public efl
   (package
     (name "efl")
-    (version "1.25.1")
+    (version "1.26.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -77,12 +78,13 @@
                     version ".tar.xz"))
               (sha256
                (base32
-                "0svybbrvpf6q955y6fclxh3md64z0dgmh0x54x2j60503hhs071m"))))
+                "0hm6i1f2g4mwj726rc6na38xhys1plbv9swrlc9hrpa87mz6gac6"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("check" ,check-0.14)
+     `(("check" ,check)
        ("gettext" ,gettext-minimal)
-       ("pkg-config" ,pkg-config)))
+       ("pkg-config" ,pkg-config)
+       ("python" ,python)))
     (inputs
      `(("curl" ,curl)
        ("giflib" ,giflib)
@@ -91,7 +93,11 @@
        ("ibus" ,ibus)
        ("mesa" ,mesa)
        ("libraw" ,libraw)
-       ("librsvg" ,librsvg)
+       ;; Only enable the optional SVG support on x86_64, as this is the only
+       ;; architecture where librsvg can be built.
+       ,@(if (target-x86-64?)
+             `(("librsvg" ,librsvg))
+             '())
        ("libspectre" ,libspectre)
        ("libtiff" ,libtiff)
        ("libxau" ,libxau)
@@ -127,6 +133,7 @@
        ("libjpeg" ,libjpeg-turbo)
        ("libsndfile" ,libsndfile)
        ("libpng" ,libpng)
+       ("libunwind" ,libunwind)
        ("libx11" ,libx11)
        ("libxkbcommon" ,libxkbcommon)
        ("luajit" ,luajit)
@@ -136,20 +143,23 @@
        ("wayland" ,wayland)
        ("zlib" ,zlib)))
     (arguments
-     `(#:configure-flags '("-Dembedded-lz4=false"
-                           "-Dbuild-examples=false"
-                           "-Decore-imf-loaders-disabler=scim"
-                           "-Dglib=true"
-                           "-Dmount-path=/run/setuid-programs/mount"
-                           "-Dunmount-path=/run/setuid-programs/umount"
-                           ;(string-append "-Ddictionaries-hyphen-dir="
-                           ;               (assoc-ref %build-inputs "hyphen")
-                           ;               "/share/hyphen")
-                           "-Dnetwork-backend=connman"
-                           ;; for wayland
-                           "-Dwl=true"
-                           "-Ddrm=true")
-       #:tests? #f ; Many tests fail due to timeouts and network requests.
+     `(#:configure-flags
+       `("-Dembedded-lz4=false"
+         "-Dbuild-examples=false"
+         "-Decore-imf-loaders-disabler=scim"
+         "-Dglib=true"
+         "-Dmount-path=/run/setuid-programs/mount"
+         "-Dunmount-path=/run/setuid-programs/umount"
+         "-Dnetwork-backend=connman"
+         ;; Add 'rsvg' to the default list (json, avif, heif) of disabled loaders
+         ;; unless librsvg is available.
+         ,,@(if (target-x86-64?)
+                '()
+                (list "-Devas-loaders-disabler=json,avif,heif,rsvg"))
+         ;; For Wayland.
+         "-Dwl=true"
+         "-Ddrm=true")
+       #:tests? #f     ; Many tests fail due to timeouts and network requests.
        #:phases
        (modify-phases %standard-phases
          ;; If we don't hardcode the location of libcurl.so and others then we
@@ -171,8 +181,7 @@
                   (string-append sndfile lib libsnd)))
                (substitute* "src/lib/elput/elput_logind.c"
                  (("libelogind.so.0" libelogind)
-                  (string-append elogind "/lib/" libelogind)))
-               #t)))
+                  (string-append elogind "/lib/" libelogind))))))
          (add-after 'unpack 'fix-install-paths
            (lambda _
              (substitute* "dbus-services/meson.build"
@@ -181,11 +190,10 @@
              (substitute* "src/tests/elementary/meson.build"
                (("dir_data") "meson.source_root(), 'test-output'"))
              (substitute* "data/eo/meson.build"
-               (("'usr', 'lib'") "'./' + dir_lib"))
-             #t))
+               (("'usr', 'lib'") "'./' + dir_lib"))))
          (add-after 'unpack 'set-home-directory
            ;; FATAL: Cannot create run dir '/homeless-shelter/.run' - errno=2
-           (lambda _ (setenv "HOME" "/tmp") #t)))))
+           (lambda _ (setenv "HOME" "/tmp"))))))
     (home-page "https://www.enlightenment.org/about-efl")
     (synopsis "Enlightenment Foundation Libraries")
     (description
@@ -199,7 +207,7 @@ removable devices or support for multimedia.")
 (define-public terminology
   (package
     (name "terminology")
-    (version "1.9.0")
+    (version "1.12.1")
     (source (origin
               (method url-fetch)
               (uri
@@ -207,15 +215,14 @@ removable devices or support for multimedia.")
                               "terminology/terminology-" version ".tar.xz"))
               (sha256
                (base32
-                "0v74858yvrrfy0l2pq7yn6izvqhpkb9gw2jpd3a3khjwv8kw6frz"))
+                "1aasddf2343qj798b5s8qwif3lxj4pyjax6fa9sfi6if9icdkkpq"))
               (modules '((guix build utils)))
               ;; Remove the bundled fonts.
               (snippet
                '(begin
                   (delete-file-recursively "data/fonts")
                   (substitute* "data/meson.build"
-                    (("subdir\\('fonts'\\)") ""))
-                  #t))))
+                    (("subdir\\('fonts'\\)") ""))))))
     (build-system meson-build-system)
     (arguments
      `(#:configure-flags
@@ -227,25 +234,26 @@ removable devices or support for multimedia.")
        (modify-phases %standard-phases
          (add-after 'unpack 'set-home-directory
            ;; FATAL: Cannot create run dir '/homeless-shelter/.run' - errno=2
-           (lambda _ (setenv "HOME" "/tmp") #t))
+           (lambda _ (setenv "HOME" "/tmp")))
          (replace 'check
-           (lambda _
-             (with-directory-excursion
-               (string-append "../" ,name "-" ,version "/tests")
-               (invoke "sh" "run_tests.sh" "--verbose"
-                       "-t" "../../build/src/bin/tytest"))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (with-directory-excursion
+                 (string-append "../" ,name "-" ,version "/tests")
+                 (invoke "sh" "run_tests.sh" "--verbose"
+                         "-t" "../../build/src/bin/tytest")))))
          (add-after 'install 'remove-test-binary
            (lambda* (#:key outputs #:allow-other-keys)
              ;; This file is not meant to be installed.
              (delete-file (string-append (assoc-ref outputs "out")
-                                         "/bin/tytest"))
-             #t)))))
+                                         "/bin/tytest")))))))
     (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list gettext-minimal
+           perl
+           pkg-config
+           python))
     (inputs
-     `(("efl" ,efl)))
+     (list efl))
     (home-page "https://www.enlightenment.org/about-terminology")
     (synopsis "Powerful terminal emulator based on EFL")
     (description
@@ -258,7 +266,7 @@ contents and more.")
 (define-public rage
   (package
     (name "rage")
-    (version "0.3.1")
+    (version "0.4.0")
     (source (origin
               (method url-fetch)
               (uri
@@ -267,18 +275,18 @@ contents and more.")
                 version ".tar.xz"))
               (sha256
                (base32
-                "04fdk23bbgvni212zrfy4ndg7vmshbsjgicrhckdvhay87pk9i75"))))
+                "03yal7ajh57x2jhmygc6msf3gzvqkpmzkqzj6dnam5sim8cq9rbw"))))
     (build-system meson-build-system)
     (arguments
      '(#:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'set-home-directory
            ;; FATAL: Cannot create run dir '/homeless-shelter/.run' - errno=2
-           (lambda _ (setenv "HOME" "/tmp") #t)))))
+           (lambda _ (setenv "HOME" "/tmp"))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("efl" ,efl)))
+     (list efl))
     (home-page "https://www.enlightenment.org/about-rage")
     (synopsis "Video and audio player based on EFL")
     (description
@@ -289,7 +297,7 @@ Libraries with some extra bells and whistles.")
 (define-public enlightenment
   (package
     (name "enlightenment")
-    (version "0.24.2")
+    (version "0.25.1")
     (source (origin
               (method url-fetch)
               (uri
@@ -297,21 +305,16 @@ Libraries with some extra bells and whistles.")
                               "enlightenment/enlightenment-" version ".tar.xz"))
               (sha256
                (base32
-                "1wfz0rwwsx7c1mkswn4hc9xw1i6bsdirhxiycf7ha2vcipqy465y"))
+                "0i1424vsc929h36hx04646pbrjiya6nc1nqr6s15xwvfv7imzw1c"))
               (patches (search-patches "enlightenment-fix-setuid-path.patch"))))
     (build-system meson-build-system)
     (arguments
      `(#:configure-flags
-       (let ((efl (assoc-ref %build-inputs "efl")))
-         (list "-Dsystemd=false"
-               "-Dpackagekit=false"
-               "-Dwl=true"
-               (string-append "-Dedje-cc=" efl "/bin/edje_cc")
-               (string-append "-Deldbus-codegen=" efl "/bin/eldbus-codegen")
-               (string-append "-Deet=" efl "/bin/eet")))
+       (list "-Dsystemd=false"
+             "-Dpackagekit=false"
+             "-Dwl=true")
        #:phases
        (modify-phases %standard-phases
-         (delete 'bootstrap) ; We don't want to run the autogen script.
          (add-before 'configure 'set-system-actions
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "HOME" "/tmp")
@@ -349,8 +352,7 @@ Libraries with some extra bells and whistles.")
                  (("/bin/umount") "/run/setuid-programs/umount")
                  (("/usr/bin/eject") "/run/current-system/profile/bin/eject"))
                (substitute* "src/bin/system/e_system_power.c"
-                 (("systemctl") "loginctl"))
-               #t))))))
+                 (("systemctl") "loginctl"))))))))
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("pkg-config" ,pkg-config)))
@@ -360,21 +362,20 @@ Libraries with some extra bells and whistles.")
        ("bluez" ,bluez)
        ("dbus" ,dbus)
        ("freetype" ,freetype)
+       ("libdrm" ,libdrm)
+       ("libexif" ,libexif)
        ("libxcb" ,libxcb)
        ("libxext" ,libxext)
        ("linux-pam" ,linux-pam)
-       ("puleseaudio" ,pulseaudio)
+       ("pulseaudio" ,pulseaudio)
        ("setxkbmap" ,setxkbmap)
        ("xcb-util-keysyms" ,xcb-util-keysyms)
        ("xkeyboard-config" ,xkeyboard-config)
        ("xorg-server-xwayland" ,xorg-server-xwayland)))
     (propagated-inputs
-     `(("efl" ,efl)
-       ("libxkbcommon" ,libxkbcommon)
-       ("wayland-protocols" ,wayland-protocols)
-
-       ;; Default font that applications such as IceCat require.
-       ("font-dejavu" ,font-dejavu)))
+     (list efl libxkbcommon wayland-protocols
+           ;; Default font that applications such as IceCat require.
+           font-dejavu))
     (home-page "https://www.enlightenment.org/about-enlightenment")
     (synopsis "Lightweight desktop environment")
     (description
@@ -384,9 +385,6 @@ unload unused functionality, with support for touchscreen and suitable for
 embedded systems.")
     (license license:bsd-2)))
 
-(define-public enlightenment-wayland
-  (deprecated-package "enlightenment-wayland" enlightenment))
-
 (define-public python-efl
   (package
     (name "python-efl")
@@ -434,11 +432,9 @@ embedded systems.")
             (delete-file "tests/ecore/test_11_con.py")
             #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python-cython" ,python-cython)))
+     (list pkg-config python-cython))
     (inputs
-     `(("efl" ,efl)
-       ("python-dbus" ,python-dbus)))
+     (list efl python-dbus))
     (home-page "https://www.enlightenment.org/")
     (synopsis "Python bindings for EFL")
     (description
@@ -479,8 +475,7 @@ Libraries stack (eo, evas, ecore, edje, emotion, ethumb and elementary).")
        ("gettext" ,gettext-minimal)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("clang" ,clang)
-       ("efl" ,efl)))
+     (list clang efl))
     (home-page "https://www.enlightenment.org/about-edi")
     (synopsis "Development environment for Enlightenment")
     (description "EDI is a development environment designed for and built using
@@ -512,9 +507,7 @@ and in creating applications based on the Enlightenment Foundation Library suite
                        (("'/usr/")"'"))
              #t)))))
     (propagated-inputs
-     `(("python2-efl" ,python2-efl)
-       ("python2-pypdf2" ,python2-pypdf2)
-       ("python2-pyxdg" ,python2-pyxdg)))
+     (list python2-efl python2-pypdf2 python2-pyxdg))
     (synopsis "Simple PDF viewer")
     (description
      "Simple PDF viewer based on the Enlightenment Foundation Libraries.")
@@ -524,26 +517,25 @@ and in creating applications based on the Enlightenment Foundation Library suite
 (define-public ephoto
   (package
     (name "ephoto")
-    (version "1.5")
+    (version "1.6.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://download.enlightenment.org/rel/"
                            "apps/ephoto/ephoto-" version ".tar.xz"))
        (sha256
-        (base32 "1q7v9abjp9jrs08xc7pqaac64yzax24dk1snjb9rciarzzh3mlzy"))))
-    (build-system gnu-build-system)
+        (base32 "1lvhcs4ba8h3z78nyycbww8mj4cscb8k200dcc3cdy8vrvrp7g1n"))))
+    (build-system meson-build-system)
     (arguments
      '(#:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'set-home-directory
            ;; FATAL: Cannot create run dir '/homeless-shelter/.run' - errno=2
-           (lambda _ (setenv "HOME" "/tmp") #t)))))
+           (lambda _ (setenv "HOME" "/tmp"))))))
     (native-inputs
-     `(("check" ,check)
-       ("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("efl" ,efl)))
+     (list efl))
     (home-page "https://smhouston.us/projects/ephoto/")
     (synopsis "EFL image viewer/editor/manipulator/slideshow creator")
     (description "Ephoto is an image viewer and editor written using the
@@ -571,14 +563,14 @@ directories.
 (define-public evisum
   (package
     (name "evisum")
-    (version "0.5.13")
+    (version "0.6.0")
     (source
       (origin
         (method url-fetch)
         (uri (string-append "https://download.enlightenment.org/rel/apps/"
                             "evisum/evisum-" version ".tar.xz"))
         (sha256
-         (base32 "1rjqvida4anh7gqjp6xrpk6kmhqb66r733yyr2ixphgxn33p3iac"))))
+         (base32 "1ip3rmp0hcn0pk6lv089cayx18p1b2wycgvwpnf7ghbdxg7n4q15"))))
     (build-system meson-build-system)
     (arguments
      '(#:tests? #f                      ; no tests
@@ -588,10 +580,10 @@ directories.
            (lambda _
              (setenv "HOME" (getcwd)))))))
     (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("pkg-config" ,pkg-config)))
+     (list gettext-minimal
+           pkg-config))
     (inputs
-     `(("efl" ,efl)))
+     (list efl))
     (home-page "https://www.enlightenment.org")
     (synopsis "EFL process viewer")
     (description
@@ -625,13 +617,9 @@ directories.
                   (string-append "join(\"" out "/share/epour\"")))
                #t))))))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("python-distutils-extra" ,python-distutils-extra)))
+     (list intltool python-distutils-extra))
     (inputs
-     `(("libtorrent-rasterbar" ,libtorrent-rasterbar)
-       ("python-dbus" ,python-dbus)
-       ("python-efl" ,python-efl)
-       ("python-pyxdg" ,python-pyxdg)))
+     (list libtorrent-rasterbar python-dbus python-efl python-pyxdg))
     (home-page "https://www.enlightenment.org")
     (synopsis "EFL Bittorrent client")
     (description "Epour is a BitTorrent client based on the @dfn{Enlightenment
diff --git a/gnu/packages/entr.scm b/gnu/packages/entr.scm
index 5ca40690dd..29fd5b7db6 100644
--- a/gnu/packages/entr.scm
+++ b/gnu/packages/entr.scm
@@ -59,16 +59,14 @@
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "entr.c"
                (("/bin/sh" command)
-                (string-append (assoc-ref inputs "bash") command))
+                (search-input-file inputs command))
                (("/bin/cat" command)
-                (string-append (assoc-ref inputs "coreutils") command))
+                (search-input-file inputs command))
                (("/usr(/bin/clear)" _ command)
-                (string-append (assoc-ref inputs "ncurses") command)))
+                (search-input-file inputs command)))
              #t)))))
     (inputs
-     `(("bash" ,bash)
-       ("coreutils" ,coreutils)
-       ("ncurses" ,ncurses)))
+     (list bash coreutils ncurses))
     (home-page "http://entrproject.org/")
     (synopsis "Run arbitrary commands when files change")
     (description
diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm
index 32bc12ebb8..1974fef9a9 100644
--- a/gnu/packages/erlang.scm
+++ b/gnu/packages/erlang.scm
@@ -69,9 +69,7 @@
             (base32
              "1c9ccp93pmm54mmvpiyrmj8v00pq11a60c4xv220k97i965zkwsg"))))))
     (inputs
-     `(("ncurses" ,ncurses)
-       ("openssl" ,openssl)
-       ("wxwidgets" ,wxwidgets)))
+     (list ncurses openssl wxwidgets))
     (propagated-inputs
      `(("fontconfig" ,fontconfig)
        ("glu" ,glu)
diff --git a/gnu/packages/esolangs.scm b/gnu/packages/esolangs.scm
index 753221a5f1..c37df58fe8 100644
--- a/gnu/packages/esolangs.scm
+++ b/gnu/packages/esolangs.scm
@@ -52,7 +52,7 @@
       ;; The tests are not designed to be run and evaluated automatically.
      '(#:tests? #f))
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (home-page "https://github.com/VorpalBlade/cfunge")
     (synopsis "Fast conforming Befunge93/98/109 interpreter in C")
     (description "@command{cfunge} is a fast conforming Befunge93/98/109 interpreter
@@ -75,9 +75,9 @@ identified by unique ID codes).")
         (base32 "0syw60b93iajgh91ffchirwwhm2kix2753ibx845kyrhzggmdh2l"))))
     (build-system cmake-build-system)
     (inputs
-     `(("readline" ,readline)))
+     (list readline))
     (native-inputs
-     `(("python-2" ,python-2)))         ; for the tests
+     (list python-2))         ; for the tests
     (synopsis "LOLCODE interpreter written in C")
     (description
      "@code{lci} is a LOLCODE interpreter written in C and is designed to be
@@ -122,8 +122,7 @@ whenever possible to the extent that the above points are not compromized.
          (add-before 'install 'build
            (assoc-ref gnu:%standard-phases 'build)))))
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)))
+     (list bison flex))
     (home-page "http://shakespearelang.sourceforge.net/")
     (synopsis "Write programs like Shakespearean plays")
     (description "Shakespeare is a programming language with the design goal
diff --git a/gnu/packages/fabric-management.scm b/gnu/packages/fabric-management.scm
index 08cf85cd00..982a4bfa75 100644
--- a/gnu/packages/fabric-management.scm
+++ b/gnu/packages/fabric-management.scm
@@ -56,15 +56,14 @@
         (base32 "19scwwpwqhqsyq4hbr5cflcmypss828lalxxd36yby7mbimca38y"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)
-
-       ;; The 3.3.21 'release' tarball isn't properly bootstrapped.
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list bison
+           flex
+           ;; The 3.3.21 'release' tarball isn't properly bootstrapped.
+           autoconf
+           automake
+           libtool))
     (inputs
-     `(("rdma-core" ,rdma-core)))
+     (list rdma-core))
     (arguments
      `(#:configure-flags '("--disable-static")
        #:phases
@@ -103,17 +102,11 @@ running the opensm daemon.")
         (base32 "1ns9sjwvxnklhi47d6k5x8kxdk1n7f5362y45xwxqmr7gwfvpmwa"))))
     (build-system gnu-build-system)
     (inputs
-     `(("rdma-core" ,rdma-core)
-       ("opensm" ,opensm)
-       ("glib" ,glib)))
+     (list rdma-core opensm glib))
     (outputs '("out" "lib"))
     (native-inputs
      ;; FIXME: needs rst2man for man pages
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool perl pkg-config))
     (arguments
      '(#:configure-flags
        (list (string-append "CPPFLAGS=-I" (assoc-ref %build-inputs "opensm")
@@ -159,14 +152,14 @@ interface to this library is not guaranteed to be stable.")
        (sha256
         (base32 "00x7v6cf8l5y6g9xwh1sg738ch42fhv19msx0h0090nhr0bv98v7"))))
     (build-system gnu-build-system)
-    (inputs `(("graphviz" ,graphviz)
-              ("tcl" ,tcl)
-              ("tk" ,tk)
-              ("infiniband-diags" ,infiniband-diags)
-              ("rdma-core" ,rdma-core)
-              ("opensm" ,opensm)
-              ("perl" ,perl)))
-    (native-inputs `(("swig" ,swig)))
+    (inputs (list graphviz
+                  tcl
+                  tk
+                  infiniband-diags
+                  rdma-core
+                  opensm
+                  perl))
+    (native-inputs (list swig))
     (arguments
      `(#:configure-flags
        (list (string-append "--with-osm="  (assoc-ref %build-inputs "opensm"))
@@ -219,13 +212,9 @@ testing InfiniBand networks.")
        ;; Be verbose so that compiler flags are displayed.
        #:make-flags '("V=1")))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
-     `(("numactl" ,numactl)
-       ("rdma-core" ,rdma-core)))
+     (list numactl rdma-core))
     (synopsis "Optimized communication layer for message passing in HPC")
     (description
      "Unified Communication X (UCX) provides an optimized communication layer
diff --git a/gnu/packages/fcitx.scm b/gnu/packages/fcitx.scm
index c602789b45..53680058c0 100644
--- a/gnu/packages/fcitx.scm
+++ b/gnu/packages/fcitx.scm
@@ -81,14 +81,13 @@
                  "/lib/qt5/plugins")))
              #t)))))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules pkg-config))
     (inputs
      `(("fcitx" ,fcitx)
        ("libintl" ,intltool)
        ("libxkbcommon" ,libxkbcommon)))
     (propagated-inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (synopsis "Fcitx Qt5 Input Context")
     (description "This package provides a Qt5 frontend for fcitx.")
     (home-page "https://github.com/fcitx/fcitx-qt5/")
@@ -139,11 +138,7 @@
        ("pkg-config" ,pkg-config)
        ("python-wrapper" ,python-wrapper)))
     (inputs
-     `(("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("libx11" ,libx11)
-       ("sqlite" ,sqlite)
-       ("tinyxml" ,tinyxml)))
+     (list glib gtk+ libx11 sqlite tinyxml))
     (synopsis "Intelligent Predictive Text Entry System")
     (description "Presage generates predictions by modelling natural language as
 a combination of redundant information sources.  It computes probabilities for
diff --git a/gnu/packages/fcitx5.scm b/gnu/packages/fcitx5.scm
index 737f47f20f..92fc0ea171 100644
--- a/gnu/packages/fcitx5.scm
+++ b/gnu/packages/fcitx5.scm
@@ -29,7 +29,6 @@
   #:use-module (gnu packages datastructures)
   #:use-module (gnu packages enchant)
   #:use-module (gnu packages freedesktop)
-  #:use-module (gnu packages gcc)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gtk)
@@ -69,13 +68,9 @@
            #t))))
     (build-system cmake-build-system)
     (inputs
-     `(("uthash" ,uthash)
-       ("libxcb" ,libxcb)
-       ("xcb-util" ,xcb-util)
-       ("xcb-util-keysyms" ,xcb-util-keysyms)))
+     (list uthash libxcb xcb-util xcb-util-keysyms))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules pkg-config))
     (home-page "https://github.com/fcitx/xcb-imdkit")
     (synopsis "Input method development support for XCB")
     (description "Xcb-imdkit is an implementation of xim protocol in XCB,
@@ -87,7 +82,7 @@ client.")
 (define-public fcitx5
   (package
     (name "fcitx5")
-    (version "5.0.8")
+    (version "5.0.10")
     (source
      (origin
        (method url-fetch)
@@ -95,7 +90,7 @@ client.")
              "https://download.fcitx-im.org/fcitx5/fcitx5/fcitx5-"
              version "_dict.tar.xz"))
        (sha256
-        (base32 "0536sjpgjlg0bf8imz4jf9bdsp7fhm09bkssddji56cc9mgdxx82"))))
+        (base32 "0i23skr49n6b30ybm66bkv07dcr0dan5mzxch7x83znfnrpk8z3h"))))
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags
@@ -133,9 +128,7 @@ client.")
        ("xcb-util-wm" ,xcb-util-wm)
        ("xkeyboard-config" ,xkeyboard-config)))
     (native-inputs
-     `(("gcc" ,gcc-9)                   ; for #include <charconv>
-       ("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules pkg-config))
     (native-search-paths
      (list (search-path-specification
             (variable "FCITX_ADDON_DIRS")
@@ -159,12 +152,9 @@ client.")
         (base32 "0f3raxzkq0nwdfpc9hxvg65vga09gznjjgy9dr6jlkamzx8zlyw9"))))
     (build-system cmake-build-system)
     (inputs
-     `(("fcitx5" ,fcitx5)
-       ("lua" ,lua)
-       ("gettext" ,gettext-minimal)
-       ("libpthread-stubs" ,libpthread-stubs)))
+     (list fcitx5 lua gettext-minimal libpthread-stubs))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (home-page "https://github.com/fcitx/fcitx5-lua")
     (synopsis "Lua support for Fcitx 5")
     (description "Fcitx5-lua allows writing Fcitx5 extension in Lua.")
@@ -173,22 +163,19 @@ client.")
 (define-public libime
   (package
     (name "libime")
-    (version "1.0.7")
+    (version "1.0.10")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://download.fcitx-im.org/fcitx5/libime/libime-"
                            version "_dict.tar.xz"))
        (sha256
-        (base32 "06smx1kqq3qh0xra8070cjfhw79hcm0vksrswk05wq6jyhvrk5sd"))))
+        (base32 "0dknxf5lf5a6kam39rp7y1h2p47bwb6pnlc8fsrhmiv7rw2pkq0f"))))
     (build-system cmake-build-system)
     (inputs
-     `(("fcitx5" ,fcitx5)
-       ("boost" ,boost)))
+     (list fcitx5 boost))
     (native-inputs
-     `(("gcc" ,gcc-9)                  ;for #include <filesystem> and ld support
-       ("extra-cmake-modules" ,extra-cmake-modules)
-       ("python" ,python)))             ;needed to run test
+     (list extra-cmake-modules python))             ;needed to run test
     (home-page "https://github.com/fcitx/libime")
     (synopsis "Library for implementing generic input methods")
     (description "Libime is a library for implementing various input method
@@ -198,7 +185,7 @@ editors.")
 (define-public fcitx5-gtk
   (package
     (name "fcitx5-gtk")
-    (version "5.0.7")
+    (version "5.0.9")
     (source
      (origin
        (method url-fetch)
@@ -206,7 +193,7 @@ editors.")
                            "/fcitx5-gtk/fcitx5-gtk-"
                            version ".tar.xz"))
        (sha256
-        (base32 "0x9xwyb3hnb2xl47jkj8zs34fhyf7gshy3bv3jxd66sfkjrscr5v"))))
+        (base32 "07ip4sxf3q895pp7mivv2bdwcmqjnwrmv9pg99jk73cw9bgyq00n"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f                      ;No test
@@ -238,9 +225,8 @@ editors.")
        ("libx11" ,libx11)
        ("gettext" ,gettext-minimal)))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)
-       ("glib" ,glib "bin")))           ;for glib-genmarshal
+     (list extra-cmake-modules pkg-config
+           `(,glib "bin")))           ;for glib-genmarshal
     ;; TODO: Add "lib" output to reduce the closure size of "gtk2".
     (outputs '("out" "gtk2"))
     (home-page "https://github.com/fcitx/fcitx5-gtk")
@@ -252,7 +238,7 @@ for GTK+2/GTK+3 application.")
 (define-public fcitx5-qt
   (package
     (name "fcitx5-qt")
-    (version "5.0.6")
+    (version "5.0.7")
     (source
      (origin
        (method url-fetch)
@@ -260,7 +246,7 @@ for GTK+2/GTK+3 application.")
                            "/fcitx5-qt/fcitx5-qt-"
                            version ".tar.xz"))
        (sha256
-        (base32 "0wp88cmy0gn15gkfzl5z4q4qd9j1ssdmgp1rfsbw0cp3qh5x4m69"))))
+        (base32 "1gspj3s1nz6mqbp3z6js5zf7mqicwm32isxlqh6whhwawr9w7vrk"))))
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags
@@ -274,7 +260,7 @@ for GTK+2/GTK+3 application.")
        ("qtbase" ,qtbase-5)
        ("gettext" ,gettext-minimal)))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (home-page "https://github.com/fcitx/fcitx5-qt")
     (synopsis "Qt library and IM module for Fcitx 5")
     (description "Fcitx5-qt provides Qt library for development and IM module
@@ -321,8 +307,7 @@ for Qt based application.")
        ("fcitx5-qt" ,fcitx5-qt)
        ("qtwebkit" ,qtwebkit)))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules pkg-config))
     (outputs '("out" "gui"))
     (home-page "https://github.com/fcitx/fcitx5-chinese-addons")
     (synopsis "Chinese related addons for Fcitx 5")
@@ -348,7 +333,7 @@ including input methods previous bundled inside Fcitx 4:
 (define-public fcitx5-configtool
   (package
     (name "fcitx5-configtool")
-    (version "5.0.5")
+    (version "5.0.8")
     (source
      (origin
        (method url-fetch)
@@ -356,7 +341,7 @@ including input methods previous bundled inside Fcitx 4:
              "https://download.fcitx-im.org/fcitx5"
              "/fcitx5-configtool/fcitx5-configtool-" version ".tar.xz"))
        (sha256
-        (base32 "1diwiniqvsvcdwzcx1dqxbvwsr6ajbxs67my0cpn8n22asd5mx8i"))))
+        (base32 "0rajrw914mbl0x7h08cal0sszwyvqg6v3w0vs0c9acs6m438xbw4"))))
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags
@@ -375,9 +360,7 @@ including input methods previous bundled inside Fcitx 4:
        ("gettext" ,gettext-minimal)
        ("iso-codes" ,iso-codes)))
     (native-inputs
-     `(("gcc" ,gcc-9)
-       ("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules pkg-config))
     (home-page "https://github.com/fcitx/fcitx5-configtool")
     (synopsis "Graphical configuration tool for Fcitx 5")
     (description "Fcitx5-configtool is a graphical configuration tool
diff --git a/gnu/packages/file-systems.scm b/gnu/packages/file-systems.scm
index 82b5444d02..767b7c5732 100644
--- a/gnu/packages/file-systems.scm
+++ b/gnu/packages/file-systems.scm
@@ -9,6 +9,7 @@
 ;;; Copyright © 2021 raid5atemyhomework <raid5atemyhomework@protonmail.com>
 ;;; Copyright © 2021 Stefan Reichör <stefan@xsteve.at>
 ;;; Copyright © 2021 Noisytoot <noisytoot@disroot.org>
+;;; Copyright © 2021 Kaelyn Takata <kaelyn.alexi@protonmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -26,6 +27,7 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages file-systems)
+  #:use-module (guix gexp)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
@@ -87,7 +89,7 @@
 (define-public autofs
   (package
     (name "autofs")
-    (version "5.1.7")
+    (version "5.1.8")
     (source
      (origin
        (method url-fetch)
@@ -95,7 +97,7 @@
                            "v" (version-major version) "/"
                            "autofs-" version ".tar.xz"))
        (sha256
-        (base32 "1myfz6a3wj2c4j9h5g44zj796fdi82jhp1s92w2hg6xp2632csx3"))))
+        (base32 "1zf0fgf6kr9amxq5amlgsp1v13sizwl3wvx2xl7b4r2nhmci0gdk"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
@@ -117,8 +119,7 @@
            (lambda _
              (substitute* "configure"
                (("^searchpath=\".*\"")
-                "searchpath=\"$PATH\""))
-             #t))
+                "searchpath=\"$PATH\""))))
          (add-before 'configure 'fix-rpath
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
@@ -131,24 +132,20 @@
            (lambda _
              (substitute* "modules/Makefile"
                (("ln -fs lookup_yp.so" match)
-                (string-append "# " match)))
-             #t)))))
+                (string-append "# " match))))))))
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)
-       ("pkg-config" ,pkg-config)
-       ("rpcsvc-proto" ,rpcsvc-proto)))
+     (list bison flex pkg-config rpcsvc-proto))
     (inputs
-     `(("cyrus-sasl" ,cyrus-sasl)
-       ("e2fsprogs" ,e2fsprogs)         ; for e[234]fsck
-       ("libtirpc" ,libtirpc)
-       ("libxml2" ,libxml2)             ; needed for LDAP, SASL
-       ("mit-krb5" ,mit-krb5)           ; needed for LDAP, SASL
-       ("nfs-utils" ,nfs-utils)         ; for mount.nfs
-       ("openldap" ,openldap)
-       ("openssl" ,openssl)             ; needed for SASL
-       ("sssd" ,sssd)
-       ("util-linux" ,util-linux)))     ; for mount, umount
+     (list cyrus-sasl
+           e2fsprogs ; for e[234]fsck
+           libtirpc
+           libxml2 ; needed for LDAP, SASL
+           mit-krb5 ; needed for LDAP, SASL
+           nfs-utils ; for mount.nfs
+           openldap
+           openssl ; needed for SASL
+           sssd
+           util-linux))     ; for mount, umount
     ;; XXX A directory index is the closest thing this has to a home page.
     (home-page "https://www.kernel.org/pub/linux/daemons/autofs/")
     (synopsis "Kernel-based automounter for Linux")
@@ -185,9 +182,9 @@ large and/or frequently changing (network) environment.")
        ;; ("ruby" ,ruby)
        ;; ("valgrind" ,valgrind)
        ;; ("which" ,which)
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("fuse" ,fuse)))
+     (list fuse))
     (home-page "https://bindfs.org")
     (synopsis "Bind mount a directory and alter permission bits")
     (description
@@ -199,7 +196,7 @@ another location, similar to @command{mount --bind}.  It can be used for:
 @item Sharing a directory with a list of users (or groups).
 @item Modifying permission bits using rules with chmod-like syntax.
 @item Changing the permissions with which files are created.
-@end itemize ")
+@end itemize")
     (license license:gpl2+)))
 
 (define-public cachefilesd-inotify
@@ -252,14 +249,14 @@ unmaintained---to use the @code{inotify} API instead of the deprecated
 (define-public davfs2
   (package
     (name "davfs2")
-    (version "1.6.0")
+    (version "1.6.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://download.savannah.nongnu.org/releases/"
                            "davfs2/davfs2-" version ".tar.gz"))
        (sha256
-        (base32 "0l1vnv5lfigciwg17p10zxwhzj4qw2d9kw30prr7g4dxhmb6fsrf"))))
+        (base32 "1h65j2py59b97wbzzjhp4wbkk6351v3hrjscjcfab0p5xi4bjgnf"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
@@ -278,16 +275,14 @@ unmaintained---to use the @code{inotify} API instead of the deprecated
              (substitute* "etc/Makefile.in"
                (("(dist_pkgdata_DATA =.*) davfs2.conf secrets(.*)"
                  _ prefix suffix)
-                (string-append prefix suffix)))
-             #t))
+                (string-append prefix suffix)))))
          (add-after 'unpack 'patch-file-names
            (lambda _
              ;; Don't auto-load the FUSE kernel module.  That's up to root.
              ;; XXX If/when we restore the previous behaviour, make sure not
              ;; to introduce a security hole when mount.davfs is setuid.
              (substitute* "src/kernel_interface.c"
-               (("/sbin/modprobe") "/modprobe/disabled"))
-             #t))
+               (("/sbin/modprobe") "/modprobe/disabled"))))
          (replace 'install
            (lambda* (#:key make-flags outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
@@ -295,11 +290,10 @@ unmaintained---to use the @code{inotify} API instead of the deprecated
                       (string-append "pkgsysconfdir=" out "/etc")
                       make-flags)))))))
     (inputs
-     `(("neon" ,neon)
-
-       ;; Neon requires but doesn't propagate zlib, nor would we want that.
-       ;; XZ as well, but that's already present in the build environment.
-       ("zlib" ,zlib)))
+     (list neon
+           ;; Neon requires but doesn't propagate zlib, nor would we want that.
+           ;; XZ as well, but that's already present in the build environment.
+           zlib))
     (home-page "https://savannah.nongnu.org/projects/davfs2")
     (synopsis "Mount remote WebDAV resources in the local file system")
     (description
@@ -359,19 +353,17 @@ ones.")
         (base32 "1ry2sdkfbg4bwcldk42g1i3wa3z4pr9yh9dil6ilhwcvhqiw41zc"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config))
     (inputs
-     `(("bzip2" ,bzip2)
-       ("e2fsprogs" ,e2fsprogs)
-       ("libgcrypt" ,libgcrypt)
-       ("lz4" ,lz4)
-       ("lzo" ,lzo)
-       ("util-linux" ,util-linux "lib")
-       ("xz" ,xz)
-       ("zlib" ,zlib)
-       ("zstd:lib" ,zstd "lib")))
+     (list bzip2
+           e2fsprogs
+           libgcrypt
+           lz4
+           lzo
+           `(,util-linux "lib")
+           xz
+           zlib
+           `(,zstd "lib")))
     (synopsis "File system back-up, deployment, and migration tool")
     (description
      "FSArchiver saves the contents of a file system to a compressed archive
@@ -402,11 +394,9 @@ is corrupted you'll lose the affected file(s) but not the whole back-up.")
          "04slwhr6ap9xcc27wphk22ad8yn79ngyy5z10lxams3k5liahvc2"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("fuse" ,fuse)
-       ("glib" ,glib)
-       ("libgphoto2" ,libgphoto2)))
+     (list fuse glib libgphoto2))
     (synopsis "Virtual file system for libgphoto2 using FUSE")
     (description "GPhotoFS is a FUSE file system module to mount your camera as
 a file system on Linux.  This allow using your camera with any tool able to read
@@ -415,8 +405,8 @@ from a mounted file system.")
     (license license:gpl2+)))
 
 (define-public bcachefs-tools
-  (let ((commit "d214908864b3d245a265f029a29a1eb731834e3c")
-        (revision "10"))
+  (let ((commit "b19d9f92e12c2e78d6e306e6cb7f8a7d9a7875f3")
+        (revision "13"))
     (package
       (name "bcachefs-tools")
       (version (git-version "0.1" revision commit))
@@ -428,63 +418,56 @@ from a mounted file system.")
                (commit commit)))
          (file-name (git-file-name name version))
          (sha256
-          (base32 "0w0678lp4crwxdsxih7j653sj8yp6dinmw68kmdbagdspgcv00g9"))))
+          (base32 "1ixb1fk58yjk8alpcf9a7h0fnkvpbsjxd766iz9h7qa6r1r77a6c"))))
       (build-system gnu-build-system)
       (arguments
-       `(#:make-flags
-         (list ,(string-append "VERSION=" version) ; bogus vX.Y-nogit otherwise
-               (string-append "PREFIX=" (assoc-ref %outputs "out"))
-               "INITRAMFS_DIR=$(PREFIX)/share/initramfs-tools"
-               ,(string-append "CC=" (cc-for-target))
-               ,(string-append "PKG_CONFIG=" (pkg-config-for-target))
-               "PYTEST=pytest")
-         #:phases
-         (modify-phases %standard-phases
-           (delete 'configure)          ; no configure script
-           (add-after 'install 'promote-mount.bcachefs.sh
-             ;; XXX The (optional) mount.bcachefs helper requires rust:cargo.
-             ;; This alternative shell script does the job well enough for now.
-             (lambda* (#:key inputs outputs #:allow-other-keys)
-               (let ((out (assoc-ref outputs "out")))
-               (with-directory-excursion (string-append out "/sbin")
-                 (rename-file "mount.bcachefs.sh" "mount.bcachefs")
-                 ;; WRAP-SCRIPT causes bogus ‘Insufficient arguments’ errors.
-                 (wrap-program "mount.bcachefs"
-                   `("PATH" ":" prefix
-                     ,(cons (string-append out "/sbin")
-                            (map (lambda (input)
-                                     (string-append (assoc-ref inputs input)
-                                                    "/bin"))
-                                   (list "coreutils"
-                                         "gawk"
-                                         "util-linux"))))))))))
-         #:tests? #f))                  ; XXX 6 valgrind tests fail
+       (list #:make-flags
+             #~(list (string-append "VERSION=" #$version) ; ‘v…-nogit’ otherwise
+                     (string-append "PREFIX=" #$output)
+                     "INITRAMFS_DIR=$(PREFIX)/share/initramfs-tools"
+                     (string-append "CC=" #$(cc-for-target))
+                     (string-append "PKG_CONFIG=" #$(pkg-config-for-target))
+                     "PYTEST=pytest")
+             #:phases
+             #~(modify-phases %standard-phases
+                 (delete 'configure)    ; no configure script
+                 (add-after 'install 'promote-mount.bcachefs.sh
+                   ;; XXX The (optional) ‘mount.bcachefs’ requires rust:cargo.
+                   ;; This shell alternative does the job well enough for now.
+                   (lambda _
+                     (with-directory-excursion (string-append #$output "/sbin")
+                       (rename-file "mount.bcachefs.sh" "mount.bcachefs")
+                       ;; WRAP-SCRIPT causes bogus ‘Insufficient arguments’ errors.
+                       (wrap-program "mount.bcachefs"
+                         `("PATH" ":" prefix
+                           ,(list (string-append #$output            "/sbin")
+                                  (string-append #$coreutils-minimal "/bin")
+                                  (string-append #$gawk              "/bin")
+                                  (string-append #$util-linux        "/bin"))))))))
+             #:tests? #f))                  ; XXX 6 valgrind tests fail
       (native-inputs
-       `(("pkg-config" ,pkg-config)
-
-         ;; For tests.
-         ("python-pytest" ,python-pytest)
-         ("valgrind" ,valgrind)
-
-         ;; For generating documentation with rst2man.
-         ("python" ,python)
-         ("python-docutils" ,python-docutils)))
+       (list pkg-config
+             ;; For tests.
+             python-pytest
+             valgrind
+             ;; For generating documentation with rst2man.
+             python
+             python-docutils))
       (inputs
-       `(("eudev" ,eudev)
-         ("keyutils" ,keyutils)
-         ("libaio" ,libaio)
-         ("libscrypt" ,libscrypt)
-         ("libsodium" ,libsodium)
-         ("liburcu" ,liburcu)
-         ("util-linux:lib" ,util-linux "lib") ; lib{blkid,uuid}
-         ("lz4" ,lz4)
-         ("zlib" ,zlib)
-         ("zstd:lib" ,zstd "lib")
-
-         ;; Only for mount.bcachefs.sh.
-         ("coreutils" ,coreutils-minimal)
-         ("gawk" ,gawk)
-         ("util-linux" ,util-linux)))
+       (list eudev
+             keyutils
+             libaio
+             libscrypt
+             libsodium
+             liburcu
+             `(,util-linux "lib")
+             lz4
+             zlib
+             `(,zstd "lib")
+             ;; Only for mount.bcachefs.sh.
+             coreutils-minimal
+             gawk
+             util-linux))
       (home-page "https://bcachefs.org/")
       (synopsis "Tools to create and manage bcachefs file systems")
       (description
@@ -501,48 +484,56 @@ performance and other characteristics.")
       (license license:gpl2+))))
 
 (define-public bcachefs-tools/static
-   (package
-     (inherit bcachefs-tools)
-     (name "bcachefs-tools-static")
-     (arguments
-      (substitute-keyword-arguments (package-arguments bcachefs-tools)
-        ((#:make-flags make-flags)
-         `(append ,make-flags
-                  (list "LDFLAGS=-static")))))
-     (inputs
-      `(("eudev:static" ,eudev "static")
-        ("libscrypt:static" ,libscrypt "static")
-        ("lz4:static" ,lz4 "static")
-        ("util-linux:static" ,util-linux "static") ; lib{blkid,uuid}
-        ("zlib" ,zlib "static")
-        ("zstd:static" ,zstd "static")
-        ,@(package-inputs bcachefs-tools)))))
+  (package
+    (inherit bcachefs-tools)
+    (name "bcachefs-tools-static")
+    (arguments
+     (substitute-keyword-arguments (package-arguments bcachefs-tools)
+       ((#:make-flags make-flags)
+        #~(append #$make-flags
+              (list "LDFLAGS=-static")))
+       ((#:phases phases)
+        #~(modify-phases #$phases
+            (add-after 'unpack 'skip-shared-library
+              (lambda _
+                (substitute* "Makefile"
+                  ;; Building the shared library with ‘-static’ obviously fails…
+                  (("^((all|install):.*)\\blib\\b(.*)" _ prefix suffix)
+                   (string-append prefix suffix "\n"))
+                  ;; …as does installing a now non-existent file.
+                  ((".*\\$\\(INSTALL\\).* lib.*") ""))))))))
+    (inputs (modify-inputs (package-inputs bcachefs-tools)
+              (prepend `(,eudev "static")
+                       `(,keyutils "static")
+                       `(,libscrypt "static")
+                       `(,lz4 "static")
+                       `(,util-linux "static")
+                       `(,zlib "static")
+                       `(,zstd "static"))))))
 
 (define-public bcachefs/static
   (package
     (name "bcachefs-static")
     (version (package-version bcachefs-tools))
-    (build-system trivial-build-system)
     (source #f)
-    (inputs
-     `(("bcachefs-tools" ,bcachefs-tools/static)))
+    (build-system trivial-build-system)
     (arguments
-     `(#:modules ((guix build utils))
-       #:builder
-       (begin
-         (use-modules (guix build utils)
-                      (ice-9 ftw)
-                      (srfi srfi-26))
-         (let* ((bcachefs-tools (assoc-ref %build-inputs "bcachefs-tools"))
-                (out (assoc-ref %outputs "out")))
-           (mkdir-p out)
-           (with-directory-excursion out
-             (install-file (string-append bcachefs-tools
-                                          "/sbin/bcachefs")
-                           "sbin")
-             (remove-store-references "sbin/bcachefs")
-             (invoke "sbin/bcachefs" "version") ; test suite
-             #t)))))
+     (list #:modules '((guix build utils))
+           #:builder
+           #~(begin
+               (use-modules (guix build utils)
+                            (ice-9 ftw)
+                            (srfi srfi-26))
+               (mkdir-p #$output)
+               (with-directory-excursion #$output
+                 (install-file (string-append #$(this-package-input
+                                                 "bcachefs-tools-static")
+                                              "/sbin/bcachefs")
+                               "sbin")
+                 (remove-store-references "sbin/bcachefs")
+                 (invoke "sbin/bcachefs" "version"))))) ; test suite
+    (inputs
+     (list bcachefs-tools/static))
     (home-page (package-home-page bcachefs-tools))
     (synopsis "Statically-linked bcachefs command from bcachefs-tools")
     (description "This package provides the statically-linked @command{bcachefs}
@@ -552,7 +543,7 @@ from the bcachefs-tools package.  It is meant to be used in initrds.")
 (define-public exfatprogs
   (package
     (name "exfatprogs")
-    (version "1.1.2")
+    (version "1.1.3")
     (source
      (origin
        (method git-fetch)
@@ -561,16 +552,13 @@ from the bcachefs-tools package.  It is meant to be used in initrds.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "19pbybgbfnvjb3n944ihrn1r8ch4dm8dr0d44d6w7p63dcp372xy"))))
+        (base32 "14lgwvbg6jibsdpzpcj484p9q4ixawyjxi9hw23w89c6870gglw9"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
        (list "--disable-static")))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (home-page "https://github.com/exfatprogs/exfatprogs")
     (synopsis "Tools to create, check, and repair exFAT file systems")
     (description
@@ -594,39 +582,33 @@ Extensible File Allocation Table} file systems.  Included are
          "1h8ggvhw30n2r6w11n1s458ypggdqx6ldwd61ma4yd7binrlpjq1"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("asciidoc" ,asciidoc)
-       ("docbook-xml" ,docbook-xml)
-       ("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)
-       ("pkg-config" ,pkg-config)))
+     (list asciidoc docbook-xml libxml2 libxslt pkg-config))
     (inputs
-     `(("fuse" ,fuse)
-       ("gnutls" ,gnutls)))
+     (list fuse gnutls))
     (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (delete 'configure)            ; no configure script
-         (replace 'install
-           ;; There's no ‘install’ target. Install all variants manually.
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (bin (string-append out "/bin"))
-                    (man1 (string-append out "/share/man/man1")))
-               (mkdir-p bin)
-               (mkdir-p man1)
-               (for-each
-                (lambda (variant)
-                  (let ((man1-page (string-append variant ".1")))
-                    (install-file variant bin)
-                    (install-file man1-page man1)))
-                (list "httpfs2"
-                      "httpfs2-mt"
-                      "httpfs2-ssl"
-                      "httpfs2-ssl-mt")))
-             #t)))
-       #:make-flags (list "CC=gcc")
-       #:parallel-build? #f             ; can result in missing man pages
-       #:tests? #f))                    ; no tests
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (delete 'configure)      ; no configure script
+               (replace 'install
+                 ;; There's no ‘install’ target. Install all variants manually.
+                 (lambda _
+                   (let* ((bin (string-append #$output "/bin"))
+                          (man1 (string-append #$output "/share/man/man1")))
+                     (mkdir-p bin)
+                     (mkdir-p man1)
+                     (for-each
+                      (lambda (variant)
+                        (let ((man1-page (string-append variant ".1")))
+                          (install-file variant bin)
+                          (install-file man1-page man1)))
+                      (list "httpfs2"
+                            "httpfs2-mt"
+                            "httpfs2-ssl"
+                            "httpfs2-ssl-mt"))))))
+           #:make-flags
+           #~(list (string-append "CC=" #$(cc-for-target)))
+           #:parallel-build? #f         ; can result in missing man pages
+           #:tests? #f))                ; no tests
     (home-page "https://sourceforge.net/projects/httpfs/")
     (synopsis "Mount remote files over HTTP")
     (description "httpfs2 is a @code{fuse} file system for mounting any
@@ -654,7 +636,7 @@ single file can be mounted.")
                                 "jfsutils-include-systypes.patch"))))
     (build-system gnu-build-system)
     (inputs
-     `(("util-linux" ,util-linux "lib")))
+     (list `(,util-linux "lib")))
     (home-page "http://jfs.sourceforge.net/home.html")
     (synopsis "Utilities for managing JFS file systems")
     (description
@@ -730,10 +712,9 @@ from the jfsutils package.  It is meant to be used in initrds.")
          "1pnrj0h8sgqwgsc18vz3fkqsp6vhigdbi75vdj0si1r6wgslnr7z"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("fuse" ,fuse)
-       ("attr" ,attr)))
+     (list fuse attr))
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (delete 'configure))  ; no configure script
@@ -838,11 +819,9 @@ All of this is accomplished without a centralized metadata server.")
               (("4426192") "12814800"))
              #t)))))
     (inputs
-     `(("curl" ,curl)
-       ("glib" ,glib)
-       ("fuse" ,fuse)))
+     (list curl glib fuse))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://curlftpfs.sourceforge.net/")
     (synopsis "Mount remote file systems over FTP")
     (description
@@ -852,14 +831,14 @@ All of this is accomplished without a centralized metadata server.")
 (define-public libeatmydata
   (package
     (name "libeatmydata")
-    (version "129")
+    (version "130")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://www.flamingspork.com/projects/libeatmydata/"
                            "libeatmydata-" version ".tar.gz"))
        (sha256
-        (base32 "1qycv1cvy6fr3v5rxilnsqxllwyfbqlcairlh31x2dnjsx28jnqf"))))
+        (base32 "1h212l2s0g3pv6q96d94dk7kpp9qzyxqydrrcgyp7zqjwvbiqws8"))))
     (build-system gnu-build-system)
     (arguments
      ;; All tests pass---but only if the host kernel allows PTRACE_TRACEME.
@@ -872,7 +851,8 @@ All of this is accomplished without a centralized metadata server.")
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* (list "eatmydata.in" "eatmydata.sh.in")
                (("basename|readlink|uname" command)
-                (string-append (assoc-ref inputs "coreutils") "/bin/" command)))))
+                (search-input-file inputs
+                                   (string-append "bin/" command))))))
          (add-before 'patch-file-names 'tighten-symlink-mode
            ;; When the ‘eatmydata’ helper detects that it's a symlink, it will
            ;; transparently invoke the command of the same name.  However, it's
@@ -900,14 +880,14 @@ All of this is accomplished without a centralized metadata server.")
            (method url-fetch)
            (uri (string-append "https://deb.debian.org/debian/pool/main/"
                                "libe/libeatmydata/libeatmydata_" version
-                               "-1.debian.tar.xz"))
+                               "-2.debian.tar.xz"))
            (sha256
-            (base32 "0q6kx1bf870jj52a2vm5p5xlrr89g2zs8wyhlpn80pys9p28nikx"))))
+            (base32 "1sg9g1nv3wl9ymzz33ig4ns563npkbxj67a64m7p34cc813jl95w"))))
        ;; For the test suite.
        ("strace" ,strace)
        ("which" ,which)))
     (inputs
-     `(("coreutils" ,coreutils)))
+     (list coreutils))
     (home-page "https://www.flamingspork.com/projects/libeatmydata/")
     (synopsis "Transparently ignore calls to synchronize data safely to disk")
     (description
@@ -924,7 +904,7 @@ Please, @emph{do not} use something called ``eat my data'' in such cases!
 
 However, it does not make sense to accept this performance hit if the data is
 unimportant and you can afford to lose all of it in the event of a crash, for
-example when running a software test suite.  Adding @code{}libeatmydata.so} to
+example when running a software test suite.  Adding @file{libeatmydata.so} to
 the @env{LD_PRELOAD} environment of such tasks will override all C library data
 synchronisation functions with custom @i{no-op} ones that do nothing and
 immediately return success.
@@ -948,10 +928,7 @@ A simple @command{eatmydata} script is included that does this for you.")
     (build-system gnu-build-system)
     (home-page "https://github.com/sahlberg/libnfs")
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (synopsis "Client library for accessing NFS shares")
     (description "LIBNFS is a client library for accessing NFS shares over a
 network.  LIBNFS offers three different APIs, for different use :
@@ -1006,9 +983,7 @@ network.  LIBNFS offers three different APIs, for different use :
                  (install-file "../source/README.md" doc)
                  #t))))))
       (inputs
-       `(("bzip2" ,bzip2)
-         ("fuse" ,fuse)
-         ("zlib" ,zlib)))
+       (list bzip2 fuse zlib))
       (synopsis "Read-only FUSE driver for the APFS file system")
       (description "APFS-FUSE is a read-only FUSE driver for the @dfn{Apple File
 System} (APFS).  It is currently in an experimental state — it may not be able
@@ -1019,8 +994,8 @@ APFS.")
 
 (define-public xfstests
   ;; The last release (1.1.0) is from 2011.
-  (let ((revision "0")
-        (commit "1c18b9ec2fcc94bd05ecdd136aa51c97bf3fa70d"))
+  (let ((revision "1")
+        (commit "bae1d15f6421cbe99b3e2e134c39d50248e7c261"))
     (package
       (name "xfstests")
       (version (git-version "1.1.0" revision commit))
@@ -1032,7 +1007,7 @@ APFS.")
                (commit commit)))
          (file-name (git-file-name name version))
          (sha256
-          (base32 "0rrv0rs9nhaza0jk5k0bj27w4lcd1s4a1ls8nr679qi02bgx630x"))))
+          (base32 "01y7dx5sx1xg3dycqlp2b6azclz3xcnx7vdy2rr6zmf210501xd9"))))
       (build-system gnu-build-system)
       (arguments
        `(#:phases
@@ -1050,11 +1025,9 @@ APFS.")
                                              (assoc-ref inputs "bash")
                                              match))
                              (("/bin/(rm|true)" match)
-                              (string-append (assoc-ref inputs "coreutils")
-                                             match))
+                              (search-input-file inputs match))
                              (("/usr(/bin/time)" _ match)
-                              (string-append (assoc-ref inputs "time")
-                                             match))))
+                              (search-input-file inputs match))))
                          (append (find-files "common" ".*")
                                  (find-files "tests" ".*")
                                  (find-files "tools" ".*")
@@ -1101,8 +1074,7 @@ APFS.")
                  (with-output-to-file helper
                    (lambda _
                      (format #t "#!~a --no-auto-compile\n!#\n"
-                             (string-append (assoc-ref inputs "guile")
-                                            "/bin/guile"))
+                             (search-input-file inputs "/bin/guile"))
                      (write
                       `(begin
                          (define (try proc dir)
@@ -1143,9 +1115,7 @@ xfstest's \"~a\" command (with any OPTIONs) as documented below.\n\n"
                              status))))))
                  (chmod helper #o755)))))))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("libtool" ,libtool)))
+       (list autoconf automake libtool))
       (inputs
        `(("acl" ,acl)
          ("attr" ,attr)
@@ -1175,7 +1145,7 @@ with the included @command{xfstests-check} helper.")
 (define-public zfs
   (package
     (name "zfs")
-    (version "2.1.0")
+    (version "2.1.2")
     (outputs '("out" "module" "src"))
     (source
       (origin
@@ -1184,7 +1154,7 @@ with the included @command{xfstests-check} helper.")
                               "/download/zfs-" version
                               "/zfs-" version ".tar.gz"))
           (sha256
-           (base32 "0kzkggwznp4m3503f2m4lcinbl99jg50j4asrwfpfk1862vdrgb0"))))
+           (base32 "1rxrr329y6zgkcqv0gah8bgi9ih6pqaay7mnk4xqlrhzgb8z3315"))))
     (build-system linux-module-build-system)
     (arguments
      `(;; The ZFS kernel module should not be downloaded since the license
@@ -1278,8 +1248,7 @@ with the included @command{xfstests-check} helper.")
                (substitute* '("Makefile.am" "Makefile.in")
                  (("\\$\\(prefix)/src") (string-append src "/src")))
                (substitute* (find-files "udev/rules.d/" ".rules.in$")
-                 (("/sbin/modprobe") (string-append kmod "/bin/modprobe"))))
-             #t))
+                 (("/sbin/modprobe") (string-append kmod "/bin/modprobe"))))))
          (replace 'build
            (lambda _ (invoke "make")))
          (replace 'install
@@ -1294,12 +1263,10 @@ with the included @command{xfstests-check} helper.")
                        (string-append "INSTALL_MOD_PATH=" moddir)
                        "INSTALL_MOD_STRIP=1")
                (install-file "contrib/bash_completion.d/zfs"
-                             (string-append out "/share/bash-completion/completions"))
-               #t))))))
+                             (string-append out
+                                            "/share/bash-completion/completions"))))))))
     (native-inputs
-     `(("attr" ,attr)
-       ("kmod" ,kmod)
-       ("pkg-config" ,pkg-config)))
+     (list attr kmod pkg-config))
     (inputs
      `(("eudev" ,eudev)
        ("kmod-runtime" ,kmod)
@@ -1340,7 +1307,7 @@ community.")
      ;; Note: if you are inheriting from the above zfs package in order
      ;; to provide a specific stable kernel version, you should also
      ;; inherit this package and replace the sole input below.
-     `(("zfs" ,zfs)))
+     (list zfs))
     (arguments
      `(#:tests? #f ; No tests
        #:phases
@@ -1430,15 +1397,15 @@ On Guix System, you will need to invoke the included shell scripts as
              (substitute* '("libfuse/lib/mount_util.c"
                             "libfuse/util/mount_util.c")
                (("/bin/(u?)mount" _ maybe-u)
-                (string-append (assoc-ref inputs "util-linux")
-                               "/bin/" maybe-u "mount")))
+                (search-input-file inputs
+                                   (string-append "bin/" maybe-u
+                                                  "mount"))))
              (substitute* '("libfuse/util/mount.mergerfs.c")
                (("/bin/sh" command)
                 (string-append (assoc-ref inputs "bash-minimal") command))))))))
     ;; Mergerfs bundles a heavily modified copy of fuse.
     (inputs
-     `(("bash-minimal" ,bash-minimal)
-       ("util-linux" ,util-linux)))
+     (list bash-minimal util-linux))
     (home-page "https://github.com/trapexit/mergerfs")
     (synopsis "Featureful union file system")
     (description "mergerfs is a union file system geared towards simplifying
@@ -1467,9 +1434,7 @@ is similar to mhddfs, unionfs, and aufs.")
           (base32 "15pgym6c4viy57ccgp28dnqwh12f3gr02axg86y578aqa2yaa0ad"))))
       (build-system copy-build-system)
       (inputs
-       `(("python" ,python)
-         ("python-xattr" ,python-xattr)
-         ("rsync" ,rsync)))
+       (list python python-xattr rsync))
       (arguments
        '(#:install-plan
          '(("src/" "bin/"))
@@ -1484,10 +1449,9 @@ is similar to mhddfs, unionfs, and aufs.")
                   (string-append "'" (assoc-ref inputs "coreutils") "/bin/rm'")))
                (substitute* "src/mergerfs.mktrash"
                  (("xattr")
-                  (string-append (assoc-ref inputs "python-xattr") "/bin/xattr"))
+                  (search-input-file inputs "/bin/xattr"))
                  (("mkdir")
-                  (string-append (assoc-ref inputs "coreutils") "/bin/mkdir")))
-               #t)))))
+                  (search-input-file inputs "/bin/mkdir"))))))))
       (synopsis "Tools to help manage data in a mergerfs pool")
       (description "mergerfs-tools is a suite of programs that can audit
 permissions and ownership of files and directories on a mergerfs volume,
@@ -1501,26 +1465,19 @@ compatible directories.")
 (define-public python-dropbox
   (package
     (name "python-dropbox")
-    (version "11.5.0")
+    (version "11.25.0")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "dropbox" version))
         (sha256
-         (base32
-          "16bxx9xqx2s4d9khrw57a0bj4q7nc6kq355wl4pfddn9cqvh9rg2"))))
+         (base32 "0vq9c2hp2amsxr2ys2mlgqp6a8hxmvrcwav70ri7wjzalfs32gj6"))))
     (build-system python-build-system)
     (arguments '(#:tests? #f))  ; Tests require a network connection.
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-pytest python-pytest-runner))
     (propagated-inputs
-     `(("python-certifi" ,python-certifi)
-       ("python-chardet" ,python-chardet)
-       ("python-requests" ,python-requests)
-       ("python-six" ,python-six)
-       ("python-stone" ,python-stone)
-       ("python-urllib3" ,python-urllib3)))
+     (list python-requests python-six python-stone))
     (home-page "https://www.dropbox.com/developers")
     (synopsis "Official Dropbox API Client")
     (description "This package provides a Python SDK for integrating with the
@@ -1533,24 +1490,28 @@ Dropbox API v2.")
     (version "1.0.51")
     (source
       (origin
-        (method url-fetch)
-        (uri (pypi-uri "dbxfs" version))
+        ;; Release tarball contains files not in git repository.
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://thelig.ht/code/dbxfs")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
         (sha256
          (base32
-          "1zz82d0mnql55397x4jx7z5rn857rf9zhjv895j93wpxdq10xwvk"))
+          "0bidb1gg5lqa1561f20qnj7gy323q65qwzfrb8h8gs6dsl3g6yfg"))
         (patches (search-patches "dbxfs-remove-sentry-sdk.patch"))))
     (build-system python-build-system)
     (arguments
      '(#:tests? #f)) ; tests requires safefs
     (propagated-inputs
-     `(("python-appdirs" ,python-appdirs)
-       ("python-block-tracing" ,python-block-tracing)
-       ("python-dropbox" ,python-dropbox)
-       ("python-keyring" ,python-keyring)
-       ("python-keyrings.alt" ,python-keyrings.alt)
-       ("python-privy" ,python-privy)
-       ("python-userspacefs" ,python-userspacefs)))
-  (home-page "https://github.com/rianhunter/dbxfs")
+     (list python-appdirs
+           python-block-tracing
+           python-dropbox
+           python-keyring
+           python-keyrings.alt
+           python-privy
+           python-userspacefs))
+  (home-page "https://thelig.ht/code/dbxfs/")
   (synopsis "User-space file system for Dropbox")
   (description
    "@code{dbxfs} allows you to mount your Dropbox folder as if it were a
@@ -1575,7 +1536,7 @@ local file system using FUSE.")
     (arguments
      `(#:import-path "github.com/hanwen/go-fuse"))
     (propagated-inputs
-     `(("go-golang-org-x-sys" ,go-golang-org-x-sys)))
+     (list go-golang-org-x-sys))
     (home-page "https://github.com/hanwen/go-fuse")
     (synopsis "FUSE bindings for Go")
     (description
@@ -1616,10 +1577,9 @@ local file system using FUSE.")
                  (for-each (cut install-file <> (string-append doc "/examples"))
                            (find-files "." "^config\\."))))))))
       (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
       (inputs
-       `(("fuse" ,fuse)
-         ("pcre" ,pcre)))
+       (list fuse pcre))
       (home-page "https://github.com/sloonz/rewritefs")
       (synopsis "FUSE file system that changes particular file names")
       (description
@@ -1660,8 +1620,7 @@ the XDG directory specification from @file{~/.@var{name}} to
                (rename-file (string-append out "/bin/TMSU")
                             (string-append out "/bin/tmsu"))))))))
     (inputs
-     `(("go-github-com-mattn-go-sqlite3" ,go-github-com-mattn-go-sqlite3)
-       ("go-github-com-hanwen-fuse" ,go-github-com-hanwen-fuse)))
+     (list go-github-com-mattn-go-sqlite3 go-github-com-hanwen-fuse))
     (home-page "https://github.com/oniony/TMSU")
     (synopsis "Tag files and access them through a virtual file system")
     (description
@@ -1693,10 +1652,7 @@ set up.")
        (list (string-append "--docdir=" (assoc-ref %outputs "out")
                             "/share/doc/" ,name "-" ,version))))
     (native-inputs
-     `(("automake" ,automake)
-       ("autoconf" ,autoconf)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list automake autoconf libtool pkg-config))
     (home-page "https://github.com/pali/udftools")
     (synopsis "Tools to manage UDF file systems and DVD/CD-R(W) drives")
     (description "@code{udftools} is a set of programs for reading
diff --git a/gnu/packages/file.scm b/gnu/packages/file.scm
index f811ba77c7..5e379d888b 100644
--- a/gnu/packages/file.scm
+++ b/gnu/packages/file.scm
@@ -3,6 +3,9 @@
 ;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016, 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
+;;; Copyright © 2021 Marius Bakke <marius@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -29,14 +32,14 @@
 (define-public file
   (package
     (name "file")
-    (version "5.38")
+    (version "5.39")
     (source (origin
               (method url-fetch)
               (uri (string-append "ftp://ftp.astron.com/pub/file/file-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0d7s376b4xqymnrsjxi3nsv3f5v89pzfspzml2pcajdk5by2yg2r"))))
+                "1lgs2w2sgamzf27kz5h7pajz7v62554q21fbs11n4mfrfrm2hpgh"))))
    (build-system gnu-build-system)
 
    ;; When cross-compiling, this package depends upon a native install of
@@ -55,3 +58,15 @@ extensions to tell you the type of a file, but looks at the actual contents
 of the file.  This package provides the libmagic library.")
    (license bsd-2)
    (home-page "https://www.darwinsys.com/file/")))
+
+(define-public file-next
+  (package
+    (inherit file)
+    (version "5.41")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://ftp.astron.com/pub/file/file-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "0gv027jgdr0hdkw7m9ck0nwhq583f4aa7vnz4dzdbxv4ng3k5r8k"))))))
diff --git a/gnu/packages/finance.scm b/gnu/packages/finance.scm
index 4aaab58906..5c08662f05 100644
--- a/gnu/packages/finance.scm
+++ b/gnu/packages/finance.scm
@@ -24,6 +24,8 @@
 ;;; Copyright © 2020 Giacomo Leidi <goodoldpaul@autistici.org>
 ;;; Copyright © 2021 ZmnSCPxj jxPCSnmZ <ZmnSCPxj@protonmail.com>
 ;;; Copyright © 2021 François J <francois-oss@avalenn.eu>
+;;; Copyright © 2021 Foo Chuan Wei <chuanwei.foo@hotmail.com>
+;;; Copyright © 2021 John Kehayias <john.kehayias@protonmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -55,6 +57,7 @@
   #:use-module (guix build-system go)
   #:use-module (guix build-system qt)
   #:use-module (guix deprecation)
+  #:use-module (guix gexp)
   #:use-module (guix utils)
   #:use-module (gnu packages)
   #:use-module (gnu packages aidc)
@@ -89,7 +92,9 @@
   #:use-module (gnu packages libusb)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages man)
+  #:use-module (gnu packages maths)
   #:use-module (gnu packages multiprecision)
+  #:use-module (gnu packages ncurses)
   #:use-module (gnu packages networking)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages popt)
@@ -97,11 +102,13 @@
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-crypto)
+  #:use-module (gnu packages python-science)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages sphinx)
+  #:use-module (gnu packages tex)
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages textutils)
   #:use-module (gnu packages time)
@@ -114,7 +121,7 @@
 (define-public bitcoin-core-0.21
   (package
     (name "bitcoin-core")
-    (version "0.21.1")
+    (version "0.21.2")
     (source (origin
               (method url-fetch)
               (uri
@@ -122,23 +129,23 @@
                               version "/bitcoin-" version ".tar.gz"))
               (sha256
                (base32
-                "1q51nqv64lhng5wh1cqb01jar7iswpnyyb1i7xslbkr0j9227zya"))))
+                "17nvir1yc6mf4wr1fn4xsabw49cd5p9vig8wj77vv4anzi8zfij1"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python)               ; for the tests
-       ("util-linux" ,util-linux)       ; provides the hexdump command for tests
-       ("qttools" ,qttools)))
+     (list autoconf
+           automake
+           libtool
+           pkg-config
+           python ; for the tests
+           util-linux ; provides the hexdump command for tests
+           qttools))
     (inputs
-     `(("bdb" ,bdb-4.8)                 ; 4.8 required for compatibility
-       ("boost" ,boost)
-       ("libevent" ,libevent)
-       ("miniupnpc" ,miniupnpc)
-       ("openssl" ,openssl)
-       ("qtbase" ,qtbase-5)))
+     (list bdb-4.8 ; 4.8 required for compatibility
+           boost
+           libevent
+           miniupnpc
+           openssl
+           qtbase-5))
     (arguments
      `(#:configure-flags
        (list
@@ -192,7 +199,7 @@ line client and a client based on Qt.")
 (define-public bitcoin-core-0.20
   (package
     (inherit bitcoin-core-0.21)
-    (version "0.20.1")
+    (version "0.20.2")
     (source (origin
               (method url-fetch)
               (uri
@@ -200,7 +207,7 @@ line client and a client based on Qt.")
                               version "/bitcoin-" version ".tar.gz"))
               (sha256
                (base32
-                "0y5rad68b398arh0abr2wgiwybdw0i5a4dxz9s3fk9fgdbyn5gab"))))))
+                "14smp5vmh7baabl856wlg7w7y5910jhx6c02mlkm4hkywf3yylky"))))))
 
 ;; The support lifetimes for bitcoin-core versions can be found in
 ;; <https://bitcoincore.org/en/lifecycle/#schedule>.
@@ -210,7 +217,7 @@ line client and a client based on Qt.")
 (define-public hledger
   (package
     (name "hledger")
-    (version "1.14.2")
+    (version "1.21")
     (source
      (origin
        (method url-fetch)
@@ -220,37 +227,35 @@ line client and a client based on Qt.")
              ".tar.gz"))
        (sha256
         (base32
-         "1si9zqparkdq77yji87lhcsrf11fr3gisqwsv82cabhrhc36x6l4"))))
+         "07fcfkmv4cy92njnf2qc7jh0naz96q962hxldcd7hk4k7ddv0mss"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-ansi-terminal" ,ghc-ansi-terminal)
-       ("ghc-base-compat-batteries" ,ghc-base-compat-batteries)
-       ("ghc-cmdargs" ,ghc-cmdargs)
-       ("ghc-data-default" ,ghc-data-default)
-       ("ghc-decimal" ,ghc-decimal)
-       ("ghc-diff" ,ghc-diff)
-       ("ghc-easytest" ,ghc-easytest)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-hledger-lib" ,ghc-hledger-lib)
-       ("ghc-lucid" ,ghc-lucid)
-       ("ghc-math-functions" ,ghc-math-functions)
-       ("ghc-megaparsec" ,ghc-megaparsec)
-       ("ghc-mtl-compat" ,ghc-mtl-compat)
-       ("ghc-old-time" ,ghc-old-time)
-       ("ghc-pretty-show" ,ghc-pretty-show)
-       ("ghc-regex-tdfa" ,ghc-regex-tdfa)
-       ("ghc-safe" ,ghc-safe)
-       ("ghc-shakespeare" ,ghc-shakespeare)
-       ("ghc-split" ,ghc-split)
-       ("ghc-tabular" ,ghc-tabular)
-       ("ghc-temporary" ,ghc-temporary)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("ghc-utility-ht" ,ghc-utility-ht)
-       ("ghc-wizards" ,ghc-wizards)))
-    (native-inputs
-     `(("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)))
+     (list ghc-ansi-terminal
+           ghc-base-compat-batteries
+           ghc-cmdargs
+           ghc-data-default
+           ghc-decimal
+           ghc-diff
+           ghc-hashable
+           ghc-hledger-lib
+           ghc-lucid
+           ghc-math-functions
+           ghc-megaparsec
+           ghc-old-time
+           ghc-regex-tdfa
+           ghc-safe
+           ghc-aeson
+           ghc-extra
+           ghc-tasty
+           ghc-timeit
+           ghc-shakespeare
+           ghc-split
+           ghc-tabular
+           ghc-temporary
+           ghc-unordered-containers
+           ghc-utf8-string
+           ghc-utility-ht
+           ghc-wizards))
     (home-page "https://hledger.org")
     (synopsis "Command-line interface for the hledger accounting system")
     (description
@@ -268,22 +273,19 @@ Accounting.")
 (define-public homebank
   (package
     (name "homebank")
-    (version "5.5.3")
+    (version "5.5.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://homebank.free.fr/public/homebank-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "14qhv79a2waqzmf6l571wklgwq8j1pkmjvzkj5vhh44nia8hfdh7"))))
+                "0rapdqv2j61cj2jzfk0fiby3na4k5g5i7shkqbjhld4rl2y6j1hd"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("libofx" ,libofx)
-       ("libsoup" ,libsoup)))
+     (list gtk+ libofx libsoup-minimal-2))
     (home-page "http://homebank.free.fr/")
     (synopsis "Graphical personal accounting application")
     (description "HomeBank allows you to manage your personal accounts at
@@ -304,7 +306,14 @@ and dynamically with report tools based on filtering and graphical charts.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0x6jxwss3wwzbzlwmnwb8yzjk8f9wfawif4f1b74z2qg6hc4r7f6"))))
+        (base32 "0x6jxwss3wwzbzlwmnwb8yzjk8f9wfawif4f1b74z2qg6hc4r7f6"))
+       (snippet '(begin
+                   ;; Remove test that fails due to difference in
+                   ;; reported error message (missing leading "./" in the
+                   ;; file name); started some time after Guix commit
+                   ;; 727f05e1e285aa52f5a19ec923fdc2259859b4b1
+                   (delete-file "test/regress/BF3C1F82-2.test")
+                   #true))))
     (build-system cmake-build-system)
     (arguments
      `(#:modules (,@%cmake-build-system-modules
@@ -343,24 +352,22 @@ and dynamically with report tools based on filtering and graphical charts.")
            ;; One test fails if it can't set the timezone.
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "TZDIR"
-                     (string-append (assoc-ref inputs "tzdata")
-                                    "/share/zoneinfo"))
+                     (search-input-directory inputs
+                                             "share/zoneinfo"))
              ;; Skip failing test BaselineTest_cmd-org.
              ;; This is a known upstream issue. See
              ;; https://github.com/ledger/ledger/issues/550
              (setenv "ARGS" "-E BaselineTest_cmd-org")
              #t)))))
     (inputs
-     `(("boost" ,boost)
-       ("gmp" ,gmp)
-       ("libedit" ,libedit)
-       ("mpfr" ,mpfr)
-       ("python" ,python)
-       ("utfcpp" ,utfcpp)))
+     (list boost
+           gmp
+           libedit
+           mpfr
+           python
+           utfcpp))
     (native-inputs
-     `(("groff" ,groff)
-       ("texinfo" ,texinfo)
-       ("tzdata" ,tzdata-for-tests)))
+     (list groff texinfo tzdata-for-tests))
     (home-page "https://ledger-cli.org/")
     (synopsis "Command-line double-entry accounting program")
     (description
@@ -426,9 +433,9 @@ in ability, and easy to use.")
              (with-directory-excursion "../source/test"
                (invoke "make" "test-batch")))))))
     (inputs
-     `(("ledger" ,ledger)))
+     (list ledger))
     (native-inputs
-     `(("texinfo" ,texinfo)))
+     (list texinfo))
     (home-page "https://ledger-cli.org/")
     (synopsis "Command-line double-entry accounting program")
     (description
@@ -484,7 +491,7 @@ This package provides the Emacs mode.")
                                 "for search ")))
               #t)))))
     (inputs
-     `(("icecat" ,icecat)))
+     (list icecat))
     (home-page "https://stesie.github.io/geierlein/")
     (synopsis "Free Elster client, for sending Germany VAT declarations")
     (description
@@ -518,22 +525,22 @@ do so.")
            #t))))
     (build-system python-build-system)
     (inputs
-     `(("python-pyqt" ,python-pyqt)
-       ("python-qrcode" ,python-qrcode)
-       ("python-protobuf" ,python-protobuf)
-       ("python-aiohttp" ,python-aiohttp)
-       ("python-aiohttp-socks" ,python-aiohttp-socks)
-       ("python-aiorpcx" ,python-aiorpcx-0.18)
-       ("python-certifi" ,python-certifi)
-       ("python-bitstring" ,python-bitstring)
-       ("python-attrs" ,python-attrs)
-       ("python-cryptography" ,python-cryptography)
-       ("python-qdarkstyle" ,python-qdarkstyle)
-       ("python-dnspython" ,python-dnspython)
-       ("python-hidapi" ,python-hidapi)
-       ("python-ledgerblue" ,python-ledgerblue)
-       ("python-btchip-python" ,python-btchip-python)
-       ("libsecp256k1" ,libsecp256k1)))
+     (list python-pyqt
+           python-qrcode
+           python-protobuf
+           python-aiohttp
+           python-aiohttp-socks
+           python-aiorpcx-0.18
+           python-certifi
+           python-bitstring
+           python-attrs
+           python-cryptography
+           python-qdarkstyle
+           python-dnspython
+           python-hidapi
+           python-ledgerblue
+           python-btchip-python
+           libsecp256k1))
     (arguments
      `(#:tests? #f                      ; no tests
        #:phases
@@ -548,6 +555,14 @@ do so.")
                  (("sys\\.prefix")
                   (format #f "\"~a\"" out)))
                #t)))
+         (add-after 'unpack 'relax-dnspython-version-requirement
+           ;; The version requirement for dnspython>=2.0,<2.1 makes the
+           ;; sanity-check phase fail, but the application seems to be working
+           ;; fine with dnspython 2.1 (the version we have currently).
+           (lambda _
+             (substitute* "contrib/requirements/requirements.txt"
+               (("dnspython>=.*")
+                "dnspython"))))
          (add-after 'unpack 'use-libsecp256k1-input
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "electrum/ecc_fast.py"
@@ -567,7 +582,7 @@ other machines/servers.  Electrum does not download the Bitcoin blockchain.")
 (define-public electron-cash
   (package
     (name "electron-cash")
-    (version "4.2.5")
+    (version "4.2.6")
     (source
      (origin
        (method git-fetch)
@@ -576,7 +591,7 @@ other machines/servers.  Electrum does not download the Bitcoin blockchain.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1fj797hbinxsqjwhh4l1vjsx1vzmgzf2apq7fnqqwpv9g0v2pch0"))))
+        (base32 "193krlnski9wjyfjkxfp4gcs7dgmqkwxgsy2m8x1515vb5bzv5pz"))))
     (build-system python-build-system)
     (inputs
      `(("libevent" ,libevent)
@@ -594,6 +609,7 @@ other machines/servers.  Electrum does not download the Bitcoin blockchain.")
        ("python-pyaes" ,python-pyaes)
        ("python-pyqt" ,python-pyqt)
        ("python-pysocks" ,python-pysocks)
+       ("python-qdarkstyle" ,python-qdarkstyle)
        ("python-qrcode" ,python-qrcode)
        ("python-requests" ,python-requests)
        ("python-stem" ,python-stem)
@@ -620,6 +636,11 @@ other machines/servers.  Electrum does not download the Bitcoin blockchain.")
                 (string-append "library_paths = ('"
                                (assoc-ref inputs "libsecp256k1")
                                "/lib/libsecp256k1.so.0'")))))
+         (add-after 'unpack 'relax-requirements
+           (lambda _
+             (substitute* "contrib/requirements/requirements.txt"
+               (("qdarkstyle==2\\.6\\.8")
+                "qdarkstyle"))))
          (add-after 'install 'wrap-qt
            (lambda* (#:key outputs inputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
@@ -642,7 +663,7 @@ other machines/servers.  Electroncash does not download the Bitcoin Cash blockch
   ;; the system's dynamically linked library.
   (package
     (name "monero")
-    (version "0.17.2.3")
+    (version "0.17.3.0")
     (source
      (origin
        (method git-fetch)
@@ -660,33 +681,38 @@ other machines/servers.  Electroncash does not download the Bitcoin Cash blockch
             delete-file-recursively
             '("external/miniupnp" "external/rapidjson"
               "external/unbound"))
+           ;; TODO: Remove the following when upgrading to a newer tagged
+           ;; version as it will already contain the fix for Boost 1.76.
+           (substitute* "contrib/epee/include/storages/portable_storage.h"
+             (("#include \"int-util.h\"" all)
+              (string-append all "\n#include <boost/mpl/contains.hpp>")))
            #t))
        (sha256
-        (base32 "0nax991fshfh51grhh2ryfrwwws35k16gzl1l3niva28zff2xmq6"))))
+        (base32 "1spsf7m3x4psp9s7mivr6x4886jnbq4i8ll2dl8bv5bsdhcd3pjm"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("graphviz" ,graphviz)
-       ("pkg-config" ,pkg-config)
-       ("protobuf" ,protobuf)
-       ("python" ,python)
-       ("qttools" ,qttools)))
+     (list doxygen
+           graphviz
+           pkg-config
+           protobuf
+           python
+           qttools))
     (inputs
-     `(("boost" ,boost)
-       ("cppzmq" ,cppzmq)
-       ("expat" ,expat)
-       ("hidapi" ,hidapi)
-       ("libsodium" ,libsodium)
-       ("libunwind" ,libunwind)
-       ("libusb" ,libusb)
-       ("miniupnpc" ,miniupnpc)
-       ("openssl" ,openssl)
-       ("protobuf" ,protobuf)
-       ("rapidjson" ,rapidjson)
-       ("readline" ,readline)
-       ("unbound" ,unbound)
-       ("xz" ,xz)
-       ("zeromq" ,zeromq)))
+     (list boost
+           cppzmq
+           expat
+           hidapi
+           libsodium
+           libunwind
+           libusb
+           miniupnpc
+           openssl
+           protobuf
+           rapidjson
+           readline
+           unbound
+           xz
+           zeromq))
     (arguments
      `(#:out-of-source? #t
        #:configure-flags
@@ -716,12 +742,13 @@ other machines/servers.  Electroncash does not download the Bitcoin Cash blockch
              #t))
          ;; Only try tests that don't need access to network or system
          (replace 'check
-           (lambda _
+           (lambda* (#:key tests? #:allow-other-keys)
              ;; Core tests sometimes fail, at least on i686-linux.
              ;; Let's disable them for now and just try hash tests
              ;; and unit tests.
              ;; (invoke "make" "ARGS=-R 'hash|core_tests' --verbose" "test")))
-             (invoke "make" "ARGS=-R 'hash' --verbose" "test")))
+             (when tests?
+               (invoke "make" "ARGS=-R 'hash' --verbose" "test"))))
          (add-after 'check 'unit-tests
            (lambda _
              (let ((excluded-unit-tests
@@ -752,7 +779,7 @@ the Monero command line client and daemon.")
 (define-public monero-gui
   (package
     (name "monero-gui")
-    (version "0.17.2.3")
+    (version "0.17.3.1")
     (source
      (origin
        (method git-fetch)
@@ -769,7 +796,7 @@ the Monero command line client and daemon.")
            (delete-file-recursively "monero")
            #t))
        (sha256
-        (base32 "0qb746z1sxqrja7q9lqhhbm64v83sn67az4k7gs5q90iaw584qfc"))))
+        (base32 "0mzxbi16zvpfgwykg0c7gm5dmjxr2a47kjwih36g53a7pnf04zl1"))))
     (build-system qt-build-system)
     (native-inputs
      `(,@(package-native-inputs monero)
@@ -788,10 +815,10 @@ the Monero command line client and daemon.")
     (arguments
      `(#:tests? #f ; No tests
        #:configure-flags
-       (list "-DARCH=default"
-             "-DENABLE_PASS_STRENGTH_METER=ON"
-             (string-append "-DReadline_ROOT_DIR="
-                            (assoc-ref %build-inputs "readline")))
+       ,#~(list "-DARCH=default"
+                "-DENABLE_PASS_STRENGTH_METER=ON"
+                (string-append "-DReadline_ROOT_DIR="
+                               #$(this-package-input "readline")))
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'extract-monero-sources
@@ -799,9 +826,8 @@ the Monero command line client and daemon.")
            ;; to build the GUI.
            (lambda* (#:key inputs #:allow-other-keys)
              (mkdir-p "monero")
-             (invoke "tar" "-xv" "--strip-components=1"
-                     "-C" "monero"
-                     "-f" (assoc-ref inputs "monero-source"))))
+             (copy-recursively (assoc-ref inputs "monero-source")
+                               "monero")))
          (add-after 'extract-monero-sources 'fix-build
            (lambda _
              (substitute* "src/version.js.in"
@@ -821,8 +847,7 @@ the Monero command line client and daemon.")
            ;; The monerod program must be available so that monero-wallet-gui
            ;; can start a Monero daemon if necessary.
            (lambda* (#:key inputs outputs #:allow-other-keys)
-             (symlink (string-append (assoc-ref inputs "monero")
-                                     "/bin/monerod")
+             (symlink (search-input-file inputs "/bin/monerod")
                       (string-append (assoc-ref outputs "out")
                                      "/bin/monerod")))))))
     (home-page "https://web.getmonero.org/")
@@ -833,9 +858,11 @@ the Monero GUI client.")
     (license license:bsd-3)))
 
 (define-public python-trezor-agent
+  ;; It is called 'libagent' in pypi; i.e. this is the library as opposed to
+  ;; the toplevel app called trezor-agent.
   (package
     (name "python-trezor-agent")
-    (version "0.13.1")
+    (version "0.14.4")
     (source
      (origin
        (method git-fetch)
@@ -844,7 +871,7 @@ the Monero GUI client.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0q99vbfd3h85s8rnjipnmldixabqmmlk5w9karv6f0rhyi54f4zv"))))
+        (base32 "1ksv494xpga27ifrjyn1bkqaya5h769lqb9rx1ng0n4kvmnrqr3l"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -863,20 +890,19 @@ the Monero GUI client.")
              (add-installed-pythonpath inputs outputs)
              (invoke "py.test"))))))
     (propagated-inputs
-     `(("python-configargparse" ,python-configargparse)
-       ("python-daemon" ,python-daemon)
-       ("python-docutils" ,python-docutils)
-       ("python-ecdsa" ,python-ecdsa)
-       ("python-ed25519" ,python-ed25519)
-       ("python-mnemonic" ,python-mnemonic)
-       ("python-pymsgbox" ,python-pymsgbox)
-       ("python-semver" ,python-semver)
-       ("python-unidecode" ,python-unidecode)
-       ("python-wheel" ,python-wheel)))
+     (list python-configargparse
+           python-daemon
+           python-docutils
+           python-ecdsa
+           python-hidapi
+           python-mnemonic
+           python-pymsgbox
+           python-pynacl
+           python-semver
+           python-unidecode
+           python-wheel))
     (native-inputs
-     `(("gnupg" ,gnupg)
-       ("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)))
+     (list gnupg python-mock python-pytest))
     (home-page "https://github.com/romanz/trezor-agent")
     (synopsis "Use hardware wallets as SSH and GPG agent")
     (description
@@ -884,19 +910,46 @@ the Monero GUI client.")
 Ledger Nano as a hardware SSH/GPG agent.")
     (license license:lgpl3)))
 
+(define-public trezor-gpg-pinentry-tk
+  (package
+    (name "trezor-gpg-pinentry-tk")
+    (version "0.0.10")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/rendaw/trezor-gpg-pinentry-tk/")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1mblx4favmw4nf7k9rfl00ivv77kgdiwghyz4xv5cp0v410kjaqc"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:tests? #f))        ; No test suite.
+    (inputs
+     `(("python-tkinter" ,python "tk")))
+    (home-page "https://github.com/rendaw/trezor-gpg-pinentry-tk")
+    (synopsis "GPG pinentry program for use with @code{trezor-agent}")
+    (description
+     "This package provides a GPG pinentry program for use with
+@code{trezor-agent}, or for people with number-only PINs.  It displays
+a grid of unlabeled buttons and supports configurable keyboard
+settings.")
+    (license license:bsd-2)))
+
 (define-public python-mnemonic
   (package
     (name "python-mnemonic")
-    (version "0.19")
+    (version "0.20")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "mnemonic" version))
         (sha256
-          (base32 "0cd9prmdj8wzdmc7lxbf9lz0xrlkvak5ignag406mmfbn81fndsf"))))
+          (base32 "1xi5qvj2rvi5almf9c89rl7hz1z4ms04d53pg818i4vpkmivavvw"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pbkdf2" ,python-pbkdf2)))
+     (list python-pbkdf2))
     (home-page "https://github.com/trezor/python-mnemonic")
     (synopsis "Implementation of Bitcoin BIP-0039")
     (description "@code{mnemonic} is a library that provides an implementation
@@ -919,12 +972,12 @@ of Bitcoin BIP-0039.")
             "010mghaqh1cmz3a0ifc3f40mmyplilwlw7kpha2mzyrrff46p9gb"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-ecpy" ,python-ecpy)
-       ("python-future" ,python-future)
-       ("python-hidapi" ,python-hidapi)
-       ("python-pillow" ,python-pillow)
-       ("python-protobuf" ,python-protobuf)
-       ("python-pycrypto" ,python-pycrypto)))
+     (list python-ecpy
+           python-future
+           python-hidapi
+           python-pillow
+           python-protobuf
+           python-pycrypto))
     (home-page "https://github.com/LedgerHQ/blue-loader-python")
     (synopsis "Python library to communicate with Ledger Blue/Nano S")
     (description "@code{ledgerblue} is a Python library to communicate with
@@ -949,8 +1002,7 @@ Ledger Blue/Nano S.")
     (arguments
      `(#:tests? #f)) ; those require PyQt4
     (propagated-inputs
-      `(("python-ecdsa" ,python-ecdsa)
-        ("python-hidapi" ,python-hidapi)))
+      (list python-ecdsa python-hidapi))
     (home-page "https://github.com/LedgerHQ/btchip-python")
     (synopsis "Python library to communicate with Ledger Nano dongle")
     (description
@@ -961,30 +1013,52 @@ Nano dongle.")
 (define-public python-trezor
   (package
     (name "python-trezor")
-    (version "0.12.1")
+    (version "0.12.4")
     (source
-      (origin
-        (method url-fetch)
-        (uri (pypi-uri "trezor" version))
-        (sha256
-          (base32 "1w19m9lws55k9sjhras47hpfpqwq1jm5vy135nj65yhkblygqg19"))))
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/trezor/trezor-firmware/")
+             (commit (string-append "python/v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1k0zk94jnkhr4iyngjfhfvff5mibx265q81v8jhvhd3m4clzgc45"))
+       (modules
+        '((guix build utils)
+          (srfi srfi-26)
+          (srfi srfi-1)
+          (ice-9 ftw)))
+       (snippet
+        '(begin
+           ;; Delete everything except ./python/
+           (for-each delete-file-recursively
+                     (scandir "./" (negate (cut member <> '("python" "." "..")
+                                                string=))))
+           ;; Move ./python/* to the toplevel.
+           (for-each (lambda (file-name)
+                       (rename-file (string-append "./python/" file-name)
+                                    (string-append "./" file-name)))
+                     (scandir "./python/"
+                              (negate (cut member <> '("." "..") string=))))
+           (delete-file-recursively "./python")))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-click" ,python-click)
-       ("python-construct" ,python-construct)
-       ("python-ecdsa" ,python-ecdsa)
-       ("python-libusb1" ,python-libusb1)
-       ("python-mnemonic" ,python-mnemonic)
-       ("python-requests" ,python-requests)
-       ("python-typing-extensions" ,python-typing-extensions)))
+     (list python-attrs
+           python-click
+           python-construct
+           python-ecdsa
+           python-libusb1
+           python-mnemonic
+           python-requests
+           python-typing-extensions))
     (native-inputs
      ;; For tests.
-     `(("protobuf" ,protobuf)
-       ("python-black" ,python-black)
-       ("python-protobuf" ,python-protobuf)
-       ("python-isort" ,python-isort)
-       ("python-pyqt" ,python-pyqt)
-       ("python-pytest" ,python-pytest)))
+     (list protobuf
+           python-black
+           python-protobuf
+           python-isort
+           python-pyqt
+           python-pytest))
     (home-page "https://github.com/trezor/python-trezor")
     (synopsis "Python library for communicating with TREZOR Hardware Wallet")
     (description "@code{trezor} is a Python library for communicating with
@@ -1012,11 +1086,8 @@ TREZOR Hardware Wallet.")
              (add-installed-pythonpath inputs outputs)
              (apply invoke "python" (find-files "tests/unit" "\\.py$")))))))
     (propagated-inputs
-     `(("python-ecdsa" ,python-ecdsa)
-       ("python-hidapi" ,python-hidapi)
-       ("python-libusb1" ,python-libusb1)
-       ("python-mnemonic" ,python-mnemonic)
-       ("python-protobuf" ,python-protobuf)))
+     (list python-ecdsa python-hidapi python-libusb1 python-mnemonic
+           python-protobuf))
     (home-page "https://github.com/keepkey/python-keepkey")
     (synopsis "Python library for communicating with KeepKey Hardware Wallet")
     (description "@code{keepkey} is a Python library for communicating with
@@ -1039,8 +1110,7 @@ the KeepKey Hardware Wallet.")
          "03zj602m2rln9yvr08dswy56vzkbldp8b074ixwzz525dafblr92"))))
     (build-system python-build-system)
     (inputs
-     `(("python-ledgerblue" ,python-ledgerblue)
-       ("python-trezor-agent" ,python-trezor-agent)))
+     (list python-ledgerblue python-trezor-agent))
     (home-page "https://github.com/romanz/trezor-agent")
     (synopsis "Ledger as hardware SSH/GPG agent")
     (description "This package allows using Ledger as hardware SSH/GPG agent.")
@@ -1049,31 +1119,62 @@ the KeepKey Hardware Wallet.")
 (define-public trezor-agent
   (package
     (name "trezor-agent")
-    (version "0.10.0")
+    (version "0.11.0-1")
     (source
      (origin
-       (method url-fetch)
-       (uri (pypi-uri "trezor_agent" version))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/romanz/trezor-agent")
+             ;; The version mismatch is not a mistake.  Multiple Python
+             ;; apps/packages are in the same git repo, and they have
+             ;; different versions.  The git tag seems to track libagent,
+             ;; i.e. python-trezor-agent in the Guix namespace.  See
+             ;; e.g. ./agents/trezor/setup.py.
+             (commit "v0.14.4")))
+       (file-name (git-file-name name version))
        (sha256
-        (base32
-         "144657c7bn0a667dq5fv5r6j7iilxf3h9agj29v1m2qpq40g0az8"))))
+        (base32 "1ksv494xpga27ifrjyn1bkqaya5h769lqb9rx1ng0n4kvmnrqr3l"))
+       (modules
+        '((guix build utils)
+          (ice-9 ftw)
+          (srfi srfi-1)
+          (srfi srfi-26)))
+       (snippet
+        '(begin
+           ;; Delete everything except ./agents/trezor/
+           (for-each delete-file-recursively
+                     (filter (lambda (full-name)
+                               (not (string-prefix? "./agents/trezor/" full-name)))
+                             (find-files ".")))
+           ;; Move ./agents/trezor/* to the toplevel
+           (for-each (lambda (file-name)
+                       (rename-file (string-append "./agents/trezor/" file-name)
+                                    (string-append "./" file-name)))
+                     (scandir "./agents/trezor/"
+                              (negate (cut member <> '("." "..") string=))))
+           (delete-file-recursively "./agents")))))
     (arguments
-     ;; Tests fail with "AttributeError: module 'attr' has no attribute 's'".
      `(#:phases
        (modify-phases %standard-phases
          (add-after 'wrap 'fixup-agent-py
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out")))
-               ;; overwrite the wrapper with the real thing.
+               ;; The wrap phase also wraps trezor_agent.py (besides the
+               ;; public facing executable called trezor-agent). We need to
+               ;; undo that wrapping. The reason this is needed is that the
+               ;; python easy install generates a toplevel script (?) that
+               ;; messes with argv[0] and then re-opens the python
+               ;; module. This fails when the wrapped file is actually a shell
+               ;; script, not a python file.
+               (delete-file (string-append out "/bin/.trezor_agent.py-real"))
+               ;; Overwrite the wrapped one with the real thing.
                (install-file "./trezor_agent.py"
-                             (string-append out "/bin"))
-             #t))))))
+                             (string-append out "/bin"))))))))
     (build-system python-build-system)
     (inputs
-     `(("python-trezor" ,python-trezor)
-       ("python-trezor-agent" ,python-trezor-agent)))
+     (list python-trezor python-trezor-agent))
     (native-inputs
-     `(("python-hidapi" ,python-hidapi)))
+     (list python-attrs))
     (home-page "https://github.com/romanz/trezor-agent")
     (synopsis "Using Trezor as hardware SSH/GPG agent")
     (description "This package allows using Trezor as a hardware SSH/GPG
@@ -1093,8 +1194,7 @@ agent.")
             "03779gvlx70i0nnry98i4pl1d92604ix5x6jgdfkrdgzqbh5vj27"))))
     (build-system python-build-system)
     (inputs
-     `(("python-keepkey" ,python-keepkey)
-       ("python-trezor-agent" ,python-trezor-agent)))
+     (list python-keepkey python-trezor-agent))
     (home-page "https://github.com/romanz/trezor-agent")
     (synopsis "KeepKey as hardware SSH/GPG agent")
     (description "This package allows using KeepKey as a hardware SSH/GPG
@@ -1104,13 +1204,13 @@ agent.")
 (define-public python-stdnum
   (package
     (name "python-stdnum")
-    (version "1.14")
+    (version "1.17")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "python-stdnum" version))
        (sha256
-        (base32 "070vd9zgvq0jchs4xc4j1h4r1l1lg4wwb8xs3p25k8c2xjw94fpx"))))
+        (base32 "0h4369b7gws5w5s2vhq590bk219y5k53zcmha2zwsb4i2dg2nkip"))))
     (build-system python-build-system)
     (arguments
      '(#:phases (modify-phases %standard-phases
@@ -1118,7 +1218,7 @@ agent.")
                     (lambda _
                       (invoke "nosetests"))))))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (home-page "https://arthurdejong.org/python-stdnum/")
     (synopsis "Python module to handle standardized number and code formats")
     (description
@@ -1130,7 +1230,7 @@ personal identity and company identification codes,
 international standard numbers (ISBN, IBAN, EAN, etc.)
 and various other formats.
 The module also includes implementations of the Verhoeff,
-Luhn and family of ISO/IEC 7064 check digit algorithms. ")
+Luhn and family of ISO/IEC 7064 check digit algorithms.")
     (license license:lgpl2.1+)))
 
 (define-public python2-stdnum
@@ -1150,16 +1250,25 @@ Luhn and family of ISO/IEC 7064 check digit algorithms. ")
     (arguments
      ;; FIXME: Tests fail with: "TypeError: block_uid() missing 1 required
      ;; positional argument: 'value'".
-     `(#:tests? #f))
+     `(#:tests? #f
+       #:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'loosen-requirements
+                    (lambda _
+                      (substitute* "setup.py"
+                        (("mnemonic>=0\\.19,<0.20")
+                         "mnemonic>=0.19")))))))
     (propagated-inputs
-     `(("aiohttp" ,python-aiohttp)
-       ("attrs" ,python-attrs)
-       ("base58" ,python-base58)
-       ("jsonschema" ,python-jsonschema)
-       ("libnacl" ,python-libnacl)
-       ("pyaes" ,python-pyaes)
-       ("pylibscrypt" ,python-pylibscrypt)
-       ("pypeg2" ,python-pypeg2)))
+     (list python-aiohttp
+           python-attrs
+           python-base58
+           python-jsonschema
+           python-libnacl
+           python-pyaes
+           python-pylibscrypt
+           python-graphql-core
+           python-mnemonic
+           python-websocket-client
+           python-pypeg2))
     (home-page "https://git.duniter.org/clients/python/duniterpy")
     (synopsis "Python implementation of Duniter API")
     (description "@code{duniterpy} is an implementation of
@@ -1213,7 +1322,7 @@ Its features are:
 (define-public grisbi
   (package
     (name "grisbi")
-    (version "1.2.2")
+    (version "2.0.5")
     (source
      (origin
        (method url-fetch)
@@ -1223,19 +1332,17 @@ Its features are:
              "/grisbi-" version ".tar.bz2"))
        (sha256
         (base32
-         "1piiyyxjsjbw9gcqydvknzxmmfgh8kdqal12ywrxyxih2afwnvbw"))))
+         "0gvsqw1z5wkakyi3bkq71pqb094a8lv2nbgnxw2zqkabzjmxnfmx"))))
     (build-system glib-or-gtk-build-system)
     (arguments
      `(#:configure-flags (list "--without-ofx")))
     (propagated-inputs
-     `(("dconf" ,dconf)))
+     (list dconf))
     (native-inputs
-     `(("glib" ,glib "bin")             ; glib-compile-schemas
-       ("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list `(,glib "bin") ; glib-compile-schemas
+           pkg-config intltool))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("libgsf" ,libgsf)))
+     (list gtk+ libgsf))
     (synopsis "Personal accounting application")
     (description "Grisbi is a personal accounting application written by
 French developers that is designed to follow French accounting rules.
@@ -1276,7 +1383,7 @@ trezord as a regular user instead of needing to it run as root.")
 (define-public trezord
   (package
     (name "trezord")
-    (version "2.0.30")
+    (version "2.0.31")
     (source
      (origin
        (method git-fetch)
@@ -1284,8 +1391,7 @@ trezord as a regular user instead of needing to it run as root.")
              (url "https://github.com/trezor/trezord-go")
              (commit (string-append "v" version))))
        (sha256
-        (base32
-         "1hzvk0wfgg7b4wpqjk3738yqxlv3pj5i7zxwm0jady2h97hmrqrr"))
+        (base32 "130nhk1pnr3xx9qkcij81mm3jxrl5zvvdqhvrgvrikqg3zlb6v5b"))
        (file-name (git-file-name name version))))
     (build-system go-build-system)
     (arguments
@@ -1315,22 +1421,22 @@ Trezor wallet.")
                 "1amzwy3gpl8ai90dsy7g0z51qq8vxfzbf642wn4bfynb8jmw3kx5"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python" ,python)               ; for the tests
-       ("util-linux" ,util-linux)       ; provides the hexdump command for tests
-       ("qttools" ,qttools)))
+     (list pkg-config
+           python ; for the tests
+           util-linux ; provides the hexdump command for tests
+           qttools))
     (inputs
-     `(("bdb" ,bdb-5.3)
-       ("boost" ,boost)
-       ("jemalloc" ,jemalloc)
-       ("libevent" ,libevent)
-       ("miniupnpc" ,miniupnpc)
-       ("openssl" ,openssl)
-       ("protobuf" ,protobuf)
-       ("qrencode" ,qrencode)
-       ("qtbase" ,qtbase-5)
-       ("zeromq" ,zeromq)
-       ("zlib" ,zlib)))
+     (list bdb-5.3
+           boost
+           jemalloc
+           libevent
+           miniupnpc
+           openssl
+           protobuf
+           qrencode
+           qtbase-5
+           zeromq
+           zlib))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1388,12 +1494,12 @@ a client based on Qt.  This is a fork of Bitcoin Core.")
                             (assoc-ref %build-inputs "opensp")
                             "/include/OpenSP"))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("gengetopt" ,gengetopt)
-       ("help2man" ,help2man)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf
+           automake
+           gengetopt
+           help2man
+           libtool
+           pkg-config))
     (inputs
      `(("curl" ,curl)
        ("libxml++-2" ,libxml++-2)
@@ -1426,24 +1532,24 @@ following three utilities are included with the library:
         (base32 "1cmrvh7azz0g89rsx6i8apd1li6r1lb3jrmbbf8fic1918lwv62m"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python) ; for the tests
-       ("util-linux" ,util-linux) ; provides the hexdump command for tests
-       ("qttools" ,qttools)))
+     (list autoconf
+           automake
+           libtool
+           pkg-config
+           python ; for the tests
+           util-linux ; provides the hexdump command for tests
+           qttools))
     (inputs
-     `(("bdb" ,bdb-4.8)
-       ("boost" ,boost)
-       ("libevent" ,libevent)
-       ("miniupnpc" ,miniupnpc)
-       ("openssl" ,openssl)
-       ("protobuf" ,protobuf)
-       ("qrencode" ,qrencode)
-       ("qtbase" ,qtbase-5)
-       ("zeromq" ,zeromq)
-       ("zlib" ,zlib)))
+     (list bdb-4.8
+           boost
+           libevent
+           miniupnpc
+           openssl
+           protobuf
+           qrencode
+           qtbase-5
+           zeromq
+           zlib))
     (arguments
      `(#:configure-flags
        (list
@@ -1519,12 +1625,9 @@ a Qt GUI.")
               (string-append "PREFIX=" %output)
               "features="))))))
     (native-inputs
-     `(("qttools" ,qttools)))
+     (list qttools))
     (inputs
-     `(("python" ,python)
-       ("qtbase" ,qtbase-5)
-       ("rocksdb" ,rocksdb)
-       ("zlib" ,zlib)))
+     (list python qtbase-5 rocksdb zlib))
     (home-page "https://gitlab.com/FloweeTheHub/fulcrum/")
     (synopsis "Fast and nimble SPV server for Bitcoin Cash")
     (description
@@ -1582,16 +1685,14 @@ like Flowee the Hub, which Fulcrum connects to over RPC.")
             (lambda _
               (invoke "make" "check" "-C" "testing"))))))
     (inputs
-     `(("boost" ,boost)
-       ("gmp" ,gmp)
-       ("libevent" ,libevent)
-       ("miniupnpc" ,miniupnpc)
-       ("openssl" ,openssl)
-       ("qtbase" ,qtbase-5)))
+     (list boost
+           gmp
+           libevent
+           miniupnpc
+           openssl
+           qtbase-5))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)
-       ("util-linux" ,util-linux)))       ; provides the hexdump command for tests
+     (list pkg-config qttools util-linux))       ; provides the hexdump command for tests
     (home-page "https://flowee.org")
     (synopsis "Flowee infrastructure tools and services")
     (description
@@ -1625,16 +1726,16 @@ that allows you to run services and through them access the Bitcoin Cash network
                (("'google-api-python-client',") ""))
              #t)))))
     (inputs
-     `(("python-beautifulsoup4" ,python-beautifulsoup4)
-       ("python-bottle" ,python-bottle)
-       ("python-chardet" ,python-chardet)
-       ("python-dateutil" ,python-dateutil)
-       ("python-lxml" ,python-lxml)
-       ("python-magic" ,python-magic)
-       ("python-ply" ,python-ply)
-       ("python-requests" ,python-requests)))
+     (list python-beautifulsoup4
+           python-bottle
+           python-chardet
+           python-dateutil
+           python-lxml
+           python-magic
+           python-ply
+           python-requests))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "http://furius.ca/beancount")
     (synopsis "Command-line double-entry accounting tool")
     (description
@@ -1643,30 +1744,35 @@ define financial transaction records in a text file, read them in memory,
 generate a variety of reports from them, and provides a web interface.")
     (license license:gpl2)))
 
-;; The beancount source ships with elisp in a subdirectory
 (define-public emacs-beancount
-  (package
-    (inherit beancount)
-    (name "emacs-beancount")
-    (build-system emacs-build-system)
-    (arguments
-     `(#:tests? #f ;no tests
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'install 'chdir-emacs
-           (lambda _
-             (chdir "editors/emacs")
-             #t)))))
-    (inputs '())
-    (native-inputs '())
-    (synopsis "Emacs mode for beancount")
-    (description
-      "Emacs-beancount is an Emacs mode for the Beancount accounting tool.")))
+  ;; Note that upstream has not made any release since this project moved
+  ;; into its own repository (it was originally part of beancount itself)
+  (let ((commit "dbafe6a73d90c1f64d457b356b9dbb43499f70d5")
+        (revision "0"))
+    (package
+      (name "emacs-beancount")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/beancount/beancount-mode")
+               (commit commit)))
+         (sha256
+          (base32
+           "0v9bws2gv5b00x829p7hrcxqgdp7iwxvv1vhfjka81qrw6w1fvjw"))
+         (file-name (git-file-name name version))))
+      (build-system emacs-build-system)
+      (home-page "https://github.com/beancount/beancount-mode")
+      (synopsis "Emacs mode for Beancount")
+      (description
+       "Emacs-beancount is an Emacs mode for the Beancount accounting tool.")
+      (license license:gpl3+))))
 
 (define-public hledger-web
   (package
     (name "hledger-web")
-    (version "1.14.1")
+    (version "1.21")
     (source
      (origin
        (method url-fetch)
@@ -1674,38 +1780,48 @@ generate a variety of reports from them, and provides a web interface.")
                            "hledger-web/hledger-web-" version ".tar.gz"))
        (sha256
         (base32
-         "0w59nr7mj0nx8z44cvhy1rhlj5rmx0wq4p5nfl4dycfmp7jwvsm1"))))
+         "0ivszqcypw0j2wn4r7fv7dqm1pvr0b1y6rqpxagzyk8cxn3ic9g2"))))
     (build-system haskell-build-system)
+    (arguments
+     `(#:tests? #f ; TODO: fail.
+       #:cabal-revision
+       ("1" "1hnw10ibhbafbsfj5lzlxwjg4cjnqr5bb51n6mqbi30qqabgq78x")))
     (inputs
-     `(("ghc-decimal" ,ghc-decimal)
-       ("ghc-aeson" ,ghc-aeson)
-       ("ghc-blaze-html" ,ghc-blaze-html)
-       ("ghc-blaze-markup" ,ghc-blaze-markup)
-       ("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-clientsession" ,ghc-clientsession)
-       ("ghc-cmdargs" ,ghc-cmdargs)
-       ("ghc-conduit" ,ghc-conduit)
-       ("ghc-conduit-extra" ,ghc-conduit-extra)
-       ("ghc-data-default" ,ghc-data-default)
-       ("ghc-hjsmin" ,ghc-hjsmin)
-       ("hledger" ,hledger)
-       ("ghc-hledger-lib" ,ghc-hledger-lib)
-       ("ghc-http-client" ,ghc-http-client)
-       ("ghc-http-conduit" ,ghc-http-conduit)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-json" ,ghc-json)
-       ("ghc-megaparsec" ,ghc-megaparsec)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-shakespeare" ,ghc-shakespeare)
-       ("ghc-wai" ,ghc-wai)
-       ("ghc-wai-extra" ,ghc-wai-extra)
-       ("ghc-wai-handler-launch" ,ghc-wai-handler-launch)
-       ("ghc-warp" ,ghc-warp)
-       ("ghc-yaml" ,ghc-yaml)
-       ("ghc-yesod" ,ghc-yesod)
-       ("ghc-yesod-core" ,ghc-yesod-core)
-       ("ghc-yesod-form" ,ghc-yesod-form)
-       ("ghc-yesod-static" ,ghc-yesod-static)))
+     (list ghc-aeson
+           ghc-blaze-html
+           ghc-blaze-markup
+           ghc-case-insensitive
+           ghc-clientsession
+           ghc-cmdargs
+           ghc-conduit-extra
+           ghc-conduit
+           ghc-data-default
+           ghc-decimal
+           ghc-extra
+           ghc-hjsmin
+           ghc-hledger-lib
+           ghc-hspec
+           ghc-http-client
+           ghc-http-conduit
+           ghc-http-types
+           ghc-megaparsec
+           ghc-network
+           ghc-shakespeare
+           ghc-unix-compat
+           ghc-unordered-containers
+           ghc-utf8-string
+           ghc-wai-cors
+           ghc-wai-extra
+           ghc-wai
+           ghc-wai-handler-launch
+           ghc-warp
+           ghc-yaml
+           ghc-yesod-core
+           ghc-yesod-form
+           ghc-yesod
+           ghc-yesod-static
+           ghc-yesod-test
+           hledger))
     (home-page "https://hledger.org")
     (synopsis "Web-based user interface for the hledger accounting system")
     (description "This package provides a simple Web-based User
@@ -1713,3 +1829,116 @@ Interface (UI) for the hledger accounting system.  It can be used as a
 local, single-user UI, or as a multi-user UI for viewing, adding, and
 editing on the Web.")
     (license license:gpl3)))
+
+(define-public quantlib
+  (package
+    (name "quantlib")
+    (version "1.24")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/lballabio/QuantLib/releases/download/QuantLib-v"
+             version "/QuantLib-" version ".tar.gz"))
+       (sha256
+        (base32 "1rxjhkc32a8z0g5gmh0iw5nx0fr31cjsrfgq7c8g6nib003kgnnx"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags
+       ,#~(list "--disable-static"
+                (string-append "--prefix=" #$output))))
+    (inputs (list boost))
+    (home-page "https://www.quantlib.org")
+    (synopsis "Library for quantitative finance")
+    (description
+     "The QuantLib project is aimed at providing a comprehensive software
+framework for quantitative finance.  QuantLib is a library for modeling,
+trading, and risk management in real-life.")
+    (license license:bsd-2)))
+
+(define-public optionmatrix
+  (package
+    (name "optionmatrix")
+    (version "1.4.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://sourceforge/optionmatrix/optionmatrix-"
+             version ".tar.xz"))
+       (sha256
+        (base32 "1zd0pfiphnijh1l94swb3mjrpmjsn37z11mklamd7zw6h2d4zh4d"))))
+    (build-system gnu-build-system)
+    (inputs
+     (list gsl gtk+ ncurses))
+    (native-inputs
+     (list pkg-config texinfo
+           (texlive-updmap.cfg (list texlive-epsf texlive-tex-texinfo))))
+    (home-page "https://anthonybradford.github.io/optionmatrix/")
+    (synopsis "Financial derivative calculator")
+    (description
+     "The OptionMatrix programs are financial derivative calculators.  These
+calculators are real-time multi-model option chain pricers with analytics and
+interactive controls.  This package provides a GTK+ graphical user interface
+(@code{optionmatrix}) and a curses interface (@code{optionmatrix_console}).")
+    (license license:gpl3+)))
+
+(define-public python-ta-lib
+  (package
+    (name "python-ta-lib")
+    (version "0.4.21")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "TA-Lib" version))
+       (sha256
+        (base32 "17sf222mq2vx924f15qlz5czkkq5vsnsjy9ibwkrk8lalr6g5lkl"))))
+    (build-system python-build-system)
+    (inputs
+     (list ta-lib))
+    (propagated-inputs
+     (list python-numpy))
+    (native-inputs
+     (list python-cython python-nose python-pandas))
+    (home-page "https://github.com/mrjbq7/ta-lib")
+    (synopsis "Python wrapper for TA-Lib")
+    (description
+     "This is a Python wrapper for TA-Lib based on Cython.  TA-Lib is a library
+providing common functions for the technical analysis of financial market data.")
+    (license license:bsd-2)))
+
+(define-public ta-lib
+  (package
+    (name "ta-lib")
+    (version "0.4.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://sourceforge/ta-lib/ta-lib/"
+                           version "/ta-lib-" version "-src.tar.gz"))
+       (sha256
+        (base32 "0lf69nna0aahwpgd9m9yjzbv2fbfn081djfznssa84f0n7y1xx4z"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'link-math-library
+           (lambda _
+             (substitute* "src/Makefile.am"
+               (("ta_common/libta_common.la")
+                "ta_common/libta_common.la -lm"))
+             (substitute* "src/Makefile.in"
+               (("\\$\\(libta_lib_la_LDFLAGS\\) \\$\\(LDFLAGS\\) -o \\$@")
+                "$(libta_lib_la_LDFLAGS) $(LDFLAGS) -lm -o $@")))))
+       ;; Parallel build fails with:
+       ;; mv -f .deps/gen_code-gen_code.Tpo .deps/gen_code-gen_code.Po
+       ;; mv: cannot stat '.deps/gen_code-gen_code.Tpo': No such file or directory
+       ;; Makefile:254: recipe for target 'gen_code-gen_code.o' failed
+       #:parallel-build? #f
+       #:configure-flags '("--disable-static")))
+    (home-page "https://ta-lib.org")
+    (synopsis "Technical analysis library")
+    (description
+     "TA-Lib is a library providing common functions for the technical
+analysis of financial market data.")
+    (license license:bsd-3)))
diff --git a/gnu/packages/firmware.scm b/gnu/packages/firmware.scm
index ebcb89923c..3a97765931 100644
--- a/gnu/packages/firmware.scm
+++ b/gnu/packages/firmware.scm
@@ -6,7 +6,8 @@
 ;;; Copyright © 2018, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Vagrant Cascadian <vagrant@debian.org>
 ;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
-;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2020, 2021, 2022 Marius Bakke <marius@gnu.org>
+;;; Copyright © 2021 Petr Hodina <phodina@protonmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -27,21 +28,28 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix gexp)
   #:use-module (guix utils)
   #:use-module (guix git-download)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build-system meson)
   #:use-module (gnu packages)
   #:use-module (gnu packages admin)
   #:use-module (gnu packages assembly)
   #:use-module (gnu packages base)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages cmake)
+  #:use-module (gnu packages curl)
   #:use-module (gnu packages cross-base)
   #:use-module (gnu packages flex)
   #:use-module (gnu packages gcc)
+  #:use-module (gnu packages glib)
+  #:use-module (gnu packages gnome)
+  #:use-module (gnu packages libusb)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages perl)
-  #:use-module (gnu packages python))
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages pkg-config))
 
 (define-public ath9k-htc-firmware
   (package
@@ -119,8 +127,7 @@ Linux-libre.")
            "1wgmj4d65izbhprwb5bcwimc2ryv19b9066lqzy4sa5m6wncm9cn"))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("flex" ,flex)
-         ("bison" ,bison)))
+       (list flex bison))
       (arguments
        `(#:modules ((srfi srfi-1)
                     (guix build gnu-build-system)
@@ -174,7 +181,7 @@ driver.")
          "1p60gdi7w88s7qw82d3g9v7mk887mhvidf4l5q5hh09j10h37q4x"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("b43-tools" ,b43-tools)))
+     (list b43-tools))
     (arguments
      `(#:make-flags (list (string-append "PREFIX="
                                          (assoc-ref %outputs "out")
@@ -190,19 +197,43 @@ Broadcom/AirForce chipset BCM43xx with Wireless-Core Revision 5.  It is used
 by the b43-open driver of Linux-libre.")
     (license license:gpl2)))
 
+(define-public eg25-manager
+  (package
+    (name "eg25-manager")
+    (version "0.4.2")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://gitlab.com/mobian1/devices/eg25-manager")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1czq2yi852aqkdnrxdifzcq669bdvlm7j40xivxq77jq04fggpmf"))))
+    (build-system meson-build-system)
+    (native-inputs (list curl
+                         `(,glib "bin") pkg-config))
+    (inputs (list libgpiod libgudev libusb))
+    (synopsis "Manager daemon for the Quectel EG25 mobile broadband modem")
+    (description
+     "This package provides a manager daemon for the Quectel EG25 mobile
+broadband modem as found, for example, on PinePhone.")
+    (home-page "https://gitlab.com/mobian1/devices/eg25-manager")
+    (license license:gpl3+)))
+
 (define* (make-opensbi-package platform name #:optional (arch "riscv64"))
   (package
     (name name)
-    (version "0.8")
+    (version "1.0")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://github.com/riscv/opensbi")
+             (url "https://github.com/riscv-software-src/opensbi")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1y9z0b6q6wpw7mgy31wml4djc6m8ydm71a9f1asnks4ragc7m98b"))))
+        (base32 "0srqkhd9b1mq4qkqk31dlrzy4mhljr49bzjxm0saylsbwhgxq31s"))))
     (build-system gnu-build-system)
     (native-inputs
      `(,@(if (and (not (string-prefix? "riscv64" (%current-system)))
@@ -226,13 +257,13 @@ by the b43-open driver of Linux-libre.")
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out"))
-                   (bin (find-files "." ".*fw_.*.elf$")))
+                   (bin (find-files "." "fw_.*\\.(elf|bin)$")))
                (for-each
                  (lambda (file)
                    (install-file file out))
                  bin))
              #t)))))
-    (home-page "https://github.com/riscv/opensbi")
+    (home-page "https://github.com/riscv-software-src/opensbi")
     (synopsis "RISC-V Open Source Supervisor Binary Interface")
     (description "A reference implementation of the RISC-V SBI specifications
 for platform-specific firmwares executing in M-mode.")
@@ -242,24 +273,13 @@ for platform-specific firmwares executing in M-mode.")
                    ;; platform/ariane-fpga/* is gpl2.
                    license:gpl2))))
 
-(define-public opensbi-qemu-generic
-  (make-opensbi-package "generic" "opensbi-qemu-generic"))
-
-(define-public opensbi-qemu-virt
-  (deprecated-package "opensbi-qemu-virt" opensbi-qemu-generic))
-
-(define-public opensbi-sifive-fu540
-  (make-opensbi-package "sifive/fu540" "opensbi-sifive-fu540"))
-
-(define-public opensbi-qemu-sifive-u
-  ;; Dropped upstream, as all functionality is present in the sifive-fu540
-  ;; target for recent versions of qemu, u-boot and linux.
-  (deprecated-package "opensbi-qemu-sifive-u" opensbi-sifive-fu540))
+(define-public opensbi-generic
+  (make-opensbi-package "generic" "opensbi-generic"))
 
 (define-public seabios
   (package
     (name "seabios")
-    (version "1.14.0")
+    (version "1.15.0")
     (source
      (origin
        (method git-fetch)
@@ -268,25 +288,71 @@ for platform-specific firmwares executing in M-mode.")
              (commit (string-append "rel-" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0jp4rxsv9jdzvx4gjvkybj6g1yjg8pkd2wys4sdh6c029npp6y8p"))))
+        (base32 "0gnsfmbgcvihsap8sz8c2n3qs439q44i3pwrms2nv3xcnf1sclj9"))))
     (build-system gnu-build-system)
-    (native-inputs
-     `(("python" ,python-wrapper)))
+    (native-inputs (list python-wrapper))
     (arguments
      `(#:tests? #f                      ; no check target
+       #:make-flags '("EXTRAVERSION=-guix") ;upstream wants distros to set this
+       #:modules (,@%gnu-build-system-modules
+                  (ice-9 match))
        #:phases
        (modify-phases %standard-phases
          (replace 'configure
            (lambda _
-             (setenv "CC" "gcc")
-             #t))
+             ;; Create the ".version" file that is present in release tarballs.
+             ;; Otherwise this will be regarded as an "unclean" build, and the
+             ;; build system ends up encoding the build date in the binaries.
+             (call-with-output-file ".version"
+               (lambda (port)
+                 (format port ,(package-version this-package))))
+             (setenv "CC" "gcc")))
+         (add-after 'build 'build-vgabios
+           (lambda* (#:key (make-flags ''()) #:allow-other-keys)
+             (for-each
+              (match-lambda
+                ((target . config)
+                 (let* ((dot-config (string-append (getcwd) "/" target "/.config"))
+                        (flags (append make-flags
+                                      (list (string-append "KCONFIG_CONFIG="
+                                                           dot-config)
+                                            (string-append "OUT=" target "/")))))
+                   (mkdir target)
+                   (call-with-output-file dot-config
+                     (lambda (port)
+                       (for-each (lambda (entry)
+                                   (if (string-suffix? "=n" entry)
+                                       (format port "# CONFIG_~a is not set~%"
+                                               (string-drop-right entry 2))
+                                       (format port "CONFIG_~a~%" entry)))
+                                 (cons "BUILD_VGABIOS=y" config))))
+                   (apply invoke "make" (append flags '("oldnoconfig")))
+                   (apply invoke "make" flags)
+                   (link (string-append target "/bios.bin")
+                         (string-append "out/" target ".bin")))))
+              ;; These tuples are modelled after Debians packaging:
+              ;; https://salsa.debian.org/qemu-team/seabios/-/blob/master/debian/rules
+              '(("ati"    . ("VGA_ATI=y" "VGA_PCI=y"))
+                ("bochs-display" . ("DISPLAY_BOCHS=y" "VGA_PCI=y"))
+                ("cirrus" . ("VGA_CIRRUS=y" "VGA_PCI=y"))
+                ("stdvga" . ("VGA_BOCHS=y" "VGA_PCI=y"))
+                ("virtio" . ("VGA_BOCHS_VIRTIO=y" "VGA_PCI=y"))
+                ("vmware" . ("VGA_BOCHS_VMWARE=y" "VGA_PCI=y"))
+                ("qxl"    . ("VGA_BOCHS_QXL=y" "VGA_PCI=y"))
+                ("isavga" . ("VGA_BOCHS=y" "VGA_PCI=n"))
+                ("ramfb"  . ("VGA_RAMFB=y" "VGA_PCI=n"))))))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
                     (fmw (string-append out "/share/firmware")))
                (mkdir-p fmw)
                (copy-file "out/bios.bin" (string-append fmw "/bios.bin"))
-               #t))))))
+               (for-each (lambda (bios)
+                           (install-file bios fmw))
+                         (find-files "out" "\\.bin$"))
+               (with-directory-excursion fmw
+                 ;; QEMU 1.7 and later looks only for the latter.
+                 (symlink "bios.bin" "bios-256k.bin"))))))))
     (home-page "https://www.seabios.org/SeaBIOS")
     (synopsis "x86 BIOS implementation")
     (description "SeaBIOS is an implementation of a 16bit x86 BIOS.  SeaBIOS
@@ -465,7 +531,7 @@ Virtual Machines.  OVMF contains a sample UEFI firmware for QEMU and KVM.")
 (define* (make-arm-trusted-firmware platform #:optional (arch "aarch64"))
   (package
     (name (string-append "arm-trusted-firmware-" platform))
-    (version "2.4")
+    (version "2.6")
     (source
       (origin
         (method git-fetch)
@@ -476,7 +542,7 @@ Virtual Machines.  OVMF contains a sample UEFI firmware for QEMU and KVM.")
         (file-name (git-file-name "arm-trusted-firmware" version))
        (sha256
         (base32
-         "12k0n79j156bdzqws18kpbli04kn00nh6dy42pjv6gakqrkx9px3"))))
+         "1j0rn33pwgmksqliwf2npm2px84qmbyma9iq8zpllwfc7dsl6gx9"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -511,20 +577,17 @@ Virtual Machines.  OVMF contains a sample UEFI firmware for QEMU and KVM.")
                           "DEBUG=1")
        #:tests? #f)) ; no tests
     (native-inputs
-     `(,@(if (and (not (string-prefix? "aarch64" (%current-system)))
-                  (string-prefix? "aarch64" arch))
-           ;; Needs newer gcc version for some targets
-           `(("cross-gcc" ,(cross-gcc "aarch64-linux-gnu" #:xgcc gcc-9))
-             ("cross-binutils" ,(cross-binutils "aarch64-linux-gnu")))
-           '())
-       ,@(if (and (not (string-prefix? "armhf" (%current-system)))
-                  (string-prefix? "armhf" arch))
-           ;; Needs newer gcc version for some targets
-           `(("cross-gcc" ,(cross-gcc "arm-linux-gnueabihf" #:xgcc gcc-9))
-             ("cross-binutils" ,(cross-binutils "arm-linux-gnueabihf")))
-           '())
-       ;; Needs newer gcc version for some targets
-       ("gcc" ,gcc-9)))
+     (let ((system (%current-system)))
+       (cond
+        ((and (not (string-prefix? "aarch64" system))
+              (string-prefix? "aarch64" arch))
+         (list (cross-gcc "aarch64-linux-gnu")
+               (cross-binutils "aarch64-linux-gnu")))
+        ((and (not (string-prefix? "armhf" system))
+              (string-prefix? "armhf" arch))
+         (list (cross-gcc "arm-linux-gnueabihf")
+               (cross-binutils "arm-linux-gnueabihf")))
+        (else '()))))
     (home-page "https://www.trustedfirmware.org/")
     (synopsis "Implementation of \"secure world software\"")
     (description
@@ -557,6 +620,17 @@ such as:
       (inherit base)
       (name "arm-trusted-firmware-rk3399")
       (native-inputs
-       `(("cross32-gcc" ,(cross-gcc "arm-none-eabi"))
-         ("cross32-binutils", (cross-binutils "arm-none-eabi"))
-         ,@(package-native-inputs base))))))
+       (modify-inputs (package-native-inputs base)
+         (prepend
+             (cross-gcc "arm-none-eabi")
+             (cross-binutils "arm-none-eabi")))))))
+
+(define-public arm-trusted-firmware-imx8mq
+  (let ((base (make-arm-trusted-firmware "imx8mq")))
+    (package
+      (inherit base)
+      (arguments
+       (substitute-keyword-arguments (package-arguments base)
+         ((#:make-flags flags ''())
+          ;; Adding debug symbols causes the size to exceed limits.
+          #~(delete "DEBUG=1" #$flags)))))))
diff --git a/gnu/packages/flashing-tools.scm b/gnu/packages/flashing-tools.scm
index 32c17b5ddd..764fc9b422 100644
--- a/gnu/packages/flashing-tools.scm
+++ b/gnu/packages/flashing-tools.scm
@@ -2,12 +2,13 @@
 ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2014 Manolis Fragkiskos Ragkousis <manolis837@gmail.com>
 ;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com>
-;;; Copyright © 2016, 2018 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2016, 2018, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016, 2019 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Jonathan Brielmaier <jonathan.brielmaier@web.de>
 ;;; Copyright © 2017 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2021 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2021 Mathieu Othacehe <othacehe@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -50,7 +51,8 @@
   #:use-module (gnu packages libusb)
   #:use-module (gnu packages libftdi)
   #:use-module (gnu packages pciutils)
-  #:use-module (gnu packages qt))
+  #:use-module (gnu packages qt)
+  #:use-module (gnu packages tls))
 
 (define-public flashrom
   (package
@@ -65,11 +67,8 @@
                (base32
                 "0ax4kqnh7kd3z120ypgp73qy1knz47l6qxsqzrfkd97mh5cdky71"))))
     (build-system gnu-build-system)
-    (inputs `(("dmidecode" ,dmidecode)
-              ("pciutils" ,pciutils)
-              ("libusb" ,libusb)
-              ("libftdi" ,libftdi)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list dmidecode pciutils libusb libftdi))
+    (native-inputs (list pkg-config))
     (arguments
      '(#:make-flags
        (list "CC=gcc"
@@ -84,9 +83,15 @@
              (substitute* "dmi.c"
                (("\"dmidecode\"")
                 (format #f "~S"
-                        (string-append (assoc-ref inputs "dmidecode")
-                                       "/sbin/dmidecode"))))
-             #t)))))
+                        (search-input-file inputs "/sbin/dmidecode"))))))
+         (add-before 'build 'patch-type-error
+           (lambda _
+             ;; See https://github.com/flashrom/flashrom/pull/133
+             (substitute* "libflashrom.c"
+               (("supported_boards\\[i\\].working = binfo\\[i\\].working")
+                "supported_boards[i].working = (enum flashrom_test_state)binfo[i].working")
+               (("supported_chipsets\\[i\\].status = chipset\\[i\\].status")
+                "supported_chipsets[i].status = (enum flashrom_test_state)chipset[i].status")))))))
     (home-page "https://flashrom.org/")
     (synopsis "Identify, read, write, erase, and verify ROM/flash chips")
     (description
@@ -114,7 +119,7 @@ programmer devices.")
     (inputs
      ;; Building with libusb-compat will succeed but the result will be broken.
      ;; See <https://github.com/pali/0xFFFF/issues/3>.
-     `(("libusb" ,libusb-0.1)))
+     (list libusb-0.1))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -147,12 +152,9 @@ brick your device.")
        (base32 "15m1w1qad3dj7r8n5ng1qqcaiyx1gyd6hnc3p2apgjllccdp77qg"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libelf" ,libelf)
-       ("libusb" ,libusb-compat)
-       ("libftdi" ,libftdi)))
+     (list libelf libusb-compat libftdi))
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)))
+     (list bison flex))
     (home-page "https://www.nongnu.org/avrdude/")
     (synopsis "AVR downloader and uploader")
     (description
@@ -176,9 +178,9 @@ programming} technique.")
       (patches (search-patches "dfu-programmer-fix-libusb.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libusb" ,libusb)))
+     (list libusb))
     (home-page "https://dfu-programmer.github.io/")
     (synopsis "Device firmware update programmer for Atmel chips")
     (description
@@ -190,7 +192,7 @@ ISP.")
 (define-public dfu-util
   (package
     (name "dfu-util")
-    (version "0.10")
+    (version "0.11")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -198,12 +200,12 @@ ISP.")
                     version ".tar.gz"))
               (sha256
                (base32
-                "0hlvc47ccf5hry13saqhc1j5cdq5jyjv4i05kj0mdh3rzj6wagd0"))))
+                "17piiyp08pccqmbhnswv957lkypmmm92kps79hypxvw23ai3pddl"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libusb" ,libusb)))
+     (list libusb))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "Host side of the USB Device Firmware Upgrade (DFU) protocol")
     (description
      "The DFU (Universal Serial Bus Device Firmware Upgrade) protocol is
@@ -255,7 +257,7 @@ firmware from it.")
                  (install-file "teensy_loader_cli" bin)
                  #t))))))
       (inputs
-       `(("libusb-compat" ,libusb-compat)))
+       (list libusb-compat))
       (synopsis "Command line firmware uploader for Teensy development boards")
       (description
        "The Teensy loader program communicates with your Teensy board when the
@@ -290,9 +292,9 @@ non-root users.")
          #:make-flags (list (string-append "PREFIX=" %output))
          #:tests? #f)) ; no tests
       (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
       (inputs
-       `(("libusb" ,libusb)))
+       (list libusb))
       (home-page "https://github.com/linux-rockchip/rkflashtool")
       (synopsis "Tools for flashing Rockchip devices")
       (description "Allows flashing of Rockchip based embedded linux devices.
@@ -336,9 +338,7 @@ RK3036, RK3066, RK312X, RK3168, RK3188, RK3288, RK3368.")
                (install-file "libpit/libpit.a" lib)
                #t))))))
     (inputs
-     `(("libusb" ,libusb)
-       ("qtbase" ,qtbase-5)
-       ("zlib" ,zlib)))
+     (list libusb qtbase-5 zlib))
     (home-page "https://glassechidna.com.au/heimdall/")
     (synopsis "Flash firmware onto Samsung mobile devices")
     (description "@command{heimdall} is a tool suite used to flash firmware (aka
@@ -396,8 +396,7 @@ dump Intel Firmware Descriptor data of an image file.")
                 "0nw555i0fm5kljha9h47bk70ykbwv8ddfk6qhz6kfqb79vzhy4h2"))))
     (build-system gnu-build-system)
     (inputs
-     `(("pciutils" ,pciutils)
-       ("zlib" ,zlib)))
+     (list pciutils zlib))
     (arguments
      `(#:make-flags
        (list "CC=gcc"
@@ -457,7 +456,7 @@ ME as far as possible (it only edits ME firmware image files).")
 (define-public uefitool
   (package
     (name "uefitool")
-    (version "0.27.0")
+    (version "0.28.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -465,7 +464,7 @@ ME as far as possible (it only edits ME firmware image files).")
                      (commit version)))
               (sha256
                (base32
-                "1i1p823qld927p4f1wcphqcnivb9mq7fi5xmzibxc3g9zzgnyc2h"))
+                "1n2hd2dysi5bv2iyq40phh1jxc48gdwzs414vfbxvcharcwapnja"))
               (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (arguments
@@ -477,10 +476,9 @@ ME as far as possible (it only edits ME firmware image files).")
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (install-file "UEFITool" (string-append (assoc-ref outputs "out")
-                                                     "/bin"))
-             #t)))))
+                                                     "/bin")))))))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (home-page "https://github.com/LongSoft/UEFITool/")
     (synopsis "UEFI image editor")
     (description "@code{uefitool} is a graphical image file editor for
@@ -506,18 +504,65 @@ Unifinished Extensible Firmware Interface (UEFI) images.")
                             (assoc-ref %build-inputs "bash")
                             "/bin/bash"))))
     (inputs
-     `(("boost" ,boost)
-       ("libgcrypt" ,libgcrypt)))
+     (list boost libgcrypt))
     (native-inputs
-     `(("bison" ,bison)
-       ("diffutils" ,diffutils)
-       ("ghostscript" ,ghostscript)
-       ("groff" ,groff)
-       ("libtool" ,libtool)
-       ("which" ,which)))
+     (list bison
+           diffutils
+           ghostscript
+           groff
+           libtool
+           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+)))
+
+(define-public uuu
+  (package
+    (name "uuu")
+    (version "1.4.165")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/NXPmicro/mfgtools")
+             (commit (string-append "uuu_" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0k309lp27d4k6x4qq0badbk8i47xsc6f3fffz73650iyfs4hcniw"))))
+    (arguments
+     `(#:tests? #f                      ; no tests
+       #:modules ((guix build utils)
+                  (ice-9 popen)
+                  (srfi srfi-26)
+                  (guix build cmake-build-system))
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'fix-version-gen
+           (lambda _
+             (call-with-output-file ".tarball-version"
+               (lambda (port)
+                 (display ,version port)))))
+         (add-after 'install 'install-udev-rules
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (uuu (string-append out "/bin/uuu"))
+                    (pipe (open-pipe* OPEN_READ uuu "-udev"))
+                    (rules
+                     (string-append out "/lib/udev/rules.d/70-uuu.rules")))
+               (mkdir-p (string-append out "/lib/udev/rules.d"))
+               (call-with-output-file rules
+                 (cut dump-port pipe <>))))))))
+    (build-system cmake-build-system)
+    (native-inputs
+     (list pkg-config))
+    (inputs
+     (list libusb bzip2 zlib libzip openssl))
+    (home-page "https://github.com/NXPmicro/mfgtools")
+    (synopsis "Freescale/NXP I.MX chip image deploy tools")
+    (description "@code{uuu} is a command line tool, evolved out of MFGTools.
+It can be used to upload images to I.MX SoC's using at least their boot ROM.")
+    (license license:bsd-3)))
diff --git a/gnu/packages/flex.scm b/gnu/packages/flex.scm
index 9e52f3bb38..7972675971 100644
--- a/gnu/packages/flex.scm
+++ b/gnu/packages/flex.scm
@@ -55,9 +55,8 @@
        `(("bison" ,bison-for-tests))))
     ;; m4 is not present in PATH when cross-building
     (native-inputs
-     `(("help2man" ,help2man)
-       ("m4" ,m4)))
-    (propagated-inputs `(("m4" ,m4)))
+     (list help2man m4))
+    (propagated-inputs (list m4))
     (home-page "https://github.com/westes/flex")
     (synopsis "Fast lexical analyser generator")
     (description
diff --git a/gnu/packages/fltk.scm b/gnu/packages/fltk.scm
index fbdc47e506..dee77d6aa4 100644
--- a/gnu/packages/fltk.scm
+++ b/gnu/packages/fltk.scm
@@ -54,7 +54,7 @@
        (base32 "1arp1niiz3qxm8iacpmilwpc5rinsm6hsk4a6fsxfywvkvppbb4s"))))
    (build-system gnu-build-system)
    (native-inputs
-    `(("pkg-config" ,pkg-config)))
+    (list pkg-config))
    (inputs
     `(("libjpeg" ,libjpeg-turbo)
       ("libpng" ,libpng)
@@ -135,11 +135,9 @@ UI builder called FLUID that can be used to create applications in minutes.")
     ;; ntk.pc lists "x11" and "xft" in Requires.private, and "cairo" in
     ;; Requires.
     (propagated-inputs
-     `(("cairo" ,cairo)
-       ("libxft" ,libxft)
-       ("libx11" ,libx11)))
+     (list cairo libxft libx11))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://non.tuxfamily.org/ntk/")
     (synopsis "Fork of FLTK with graphics rendering via Cairo")
     (description "The Non Tool Kit (NTK) is a fork of the Fast Light ToolKit
diff --git a/gnu/packages/fonts.scm b/gnu/packages/fonts.scm
index 23531def98..8afb453970 100644
--- a/gnu/packages/fonts.scm
+++ b/gnu/packages/fonts.scm
@@ -35,13 +35,15 @@
 ;;; Copyright © 2020 Raghav Gururajan <raghavgururajan@disroot.org>
 ;;; Copyright © 2020, 2021 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2020 Zhu Zihao <all_but_last@163.com>
-;;; Copyright © 2020 Simen Endsjø <simendsjo@gmail.com>
+;;; Copyright © 2020, 2021 Simen Endsjø <simendsjo@gmail.com>
 ;;; Copyright © 2020 Tim Van den Langenbergh <tmt_vdl@gmx.com>
 ;;; Copyright © 2020 Nicolò Balzarotti <nicolo@nixo.xyz>
 ;;; Copyright © 2021 Antoine Côté <antoine.cote@posteo.net>
 ;;; Copyright © 2021 Sergiu Ivanov <sivanov@colimite.fr>
 ;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
 ;;; Copyright © 2021 Paul A. Patience <paul@apatience.com>
+;;; Copyright © 2021 Taiju HIGASHI <higashi@taiju.info>
+;;; Copyright © 2022 Philip McGrath <philip@philipmcgrath.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -187,7 +189,7 @@ itself."))))
               (uri "https://typodermicfonts.com/wp-content/uploads/2017/06/canada1500.zip")
               (sha256
                (base32
-                "052rwhyfcz6q0g0nsr21bkbg2qb6sw7wzins5hv80qhdhi77sdaj"))))
+                "0cdcb89ab6q7b6jd898bnvrd1sifbd2xr42qgji98h8d5cq4b6fp"))))
     (build-system font-build-system)
     (home-page "https://typodermicfonts.com/canada1500/")
     (synopsis "Canadian typeface that supports English, French and Aboriginal languages")
@@ -197,21 +199,45 @@ includes lining and old-style numerals, tabular and proportional.  Greek,
 Cyrillic, Canadian Syllabics and most Latin based languages are supported.")
     (license license:cc0)))
 
-(define-public font-cantarell
+(define-public font-abattis-cantarell
   (package
     (name "font-abattis-cantarell")
-    (version "0.301")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "mirror://gnome/sources/cantarell-fonts/"
-                                  (version-major+minor version)
-                                  "/cantarell-fonts-" version ".tar.xz"))
-              (sha256
-               (base32
-                "10sycxscs9kzl451mhygyj2qj8qlny8pamskb86np7izq05dnd9x"))))
-    (build-system meson-build-system)
+    (version "0.303")
+    (source
+     (origin
+       (method url-fetch/zipbomb)
+       (uri (string-append "https://gitlab.gnome.org/GNOME/cantarell-fonts/-/"
+                           "jobs/1515399/artifacts/download"))
+       (file-name (string-append name "-" version "-static"))
+       (sha256
+        (base32 "1dz551xrrhx6l40j57ksk2alllrihghg4947z1r88dpcq3snpn1s"))))
+    (build-system font-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'unpack-source
+           ;; The actual OTF fonts are prebuilt (building them requires at least
+           ;; the currently unpackaged psautohint and its numerous dependencies;
+           ;; TODO), but unpack the source so that COPYING is installed later.
+           (lambda* (#:key outputs #:allow-other-keys)
+             (invoke "tar" "--strip-components=1" "-xvf"
+                     (string-append "build/meson-dist/cantarell-fonts-"
+                                    ,version ".tar.xz"))))
+         (add-after 'unpack 'unpack-variable-font
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((variable-font (assoc-ref inputs "variable-font")))
+               (copy-recursively (string-append variable-font "/prebuilt")
+                                 ".")))))))
     (native-inputs
-     `(("gettext" ,gettext-minimal)))   ; for msgfmt
+     `(("variable-font"
+        ,(origin
+           (method url-fetch/zipbomb)
+           (uri (string-append "https://gitlab.gnome.org/GNOME/cantarell-fonts/-/"
+                               "jobs/1515398/artifacts/download"))
+           (file-name (string-append name "-" version "-variable"))
+           (sha256
+            (base32 "0z93pbkxidsx3y98rsl2jm2qpvxv5pj0w870xhnsciglw6pc9a9i"))))
+       ("unzip" ,unzip)))
     (home-page "https://wiki.gnome.org/Projects/CantarellFonts")
     (synopsis "Cantarell sans-serif typeface")
     (description "The Cantarell font family is a contemporary Humanist
@@ -296,7 +322,7 @@ The Lato 2.010 family supports more than 100 Latin-based languages, over
                                    (find-files "." "")))))))
        #:test-target "tests"))
     ;; FreeFont anno 2012 requires a FontForge built with Python 2.
-    (native-inputs `(("fontforge" ,fontforge-20190801)))
+    (native-inputs (list fontforge-20190801))
     (home-page "https://www.gnu.org/software/freefont/")
     (synopsis "Unicode-encoded outline fonts")
     (description
@@ -307,21 +333,18 @@ The Lato 2.010 family supports more than 100 Latin-based languages, over
     (properties '((upstream-name . "freefont")
                   (ftp-directory . "/gnu/freefont")))))
 
-(define-public font-gnu-freefont-ttf
-  (deprecated-package "font-gnu-freefont-ttf" font-gnu-freefont))
-
 (define-public font-liberation
   (package
     (name "font-liberation")
-    (version "2.1.4")
+    (version "2.1.5")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
              "https://github.com/liberationfonts/liberation-fonts/"
-             "files/6418984/liberation-fonts-ttf-" version ".tar.gz"))
+             "files/7261482/liberation-fonts-ttf-" version ".tar.gz"))
        (sha256
-        (base32 "1vx5q5bif9d1cn5pvm78203sf4may2mch72aa1hx1a8avl959y16"))))
+        (base32 "1l15iwk0x75621q67qlh9wv561c0gc7x0kh9l9rrz29qpxlwd4bi"))))
     (build-system font-build-system)
     (home-page "https://github.com/liberationfonts")
     (synopsis "Fonts compatible with Arial, Times New Roman, and Courier New")
@@ -372,7 +395,7 @@ and Bitstream Vera Sans Mono).
                          (find-files "." "\\.sfd$"))
                #t))))))
     (native-inputs
-     `(("fontforge" ,fontforge)))
+     (list fontforge))
     (home-page "http://www.linuxlibertine.org/")
     (synopsis "Serif and sans serif typefaces")
     (description "The Linux Libertine fonts is a set of typefaces containing
@@ -452,11 +475,7 @@ The unified Libertinus family consists of:
                (apply invoke "make" "install-otb" (string-append "prefix=" otb)
                       make-flags)))))))
     (native-inputs
-     `(("bdftopcf" ,bdftopcf)
-       ("font-util" ,font-util)
-       ("mkfontdir" ,mkfontdir)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python)))
+     (list bdftopcf font-util mkfontdir pkg-config python))
     (home-page "http://terminus-font.sourceforge.net/")
     (synopsis "Simple bitmap programming font")
     (description "Terminus Font is a clean, fixed-width bitmap font, designed
@@ -719,7 +738,7 @@ for use at smaller text sizes")))
 (define-public font-gnu-unifont
   (package
     (name "font-gnu-unifont")
-    (version "13.0.06")
+    (version "14.0.01")
     (source
      (origin
        (method url-fetch)
@@ -729,22 +748,21 @@ for use at smaller text sizes")))
              (string-append "mirror://gnu/unifont/unifont-"
                             version "/unifont-" version ".tar.gz")))
        (sha256
-        (base32 "09g91g0gv76sadslp70m5xwfk3jf8kh7rpk2pz3l2hpldnjggpk8"))))
+        (base32 "0wkdn8h20pprna5a3hbny0qk2mgksrbxs2y6ng6qarj6rkpdmlbs"))))
     (build-system gnu-build-system)
     (outputs '("out"   ; TrueType version
                "pcf"   ; PCF (bitmap) version
                "psf"   ; PSF (console) version
                "bin")) ; Utilities to manipulate '.hex' format
     (arguments
-     '(#:tests? #f          ; no check target
+     `(#:tests? #f          ; no check target
+       #:make-flags
+       (list (string-append "CC=" ,(cc-for-target)))
        #:phases
        (modify-phases %standard-phases
-         (replace
-          'configure
-          (lambda _ (setenv "CC" "gcc") #t))
-         (replace
-          'install
-          (lambda* (#:key outputs #:allow-other-keys)
+         (delete 'configure)
+         (replace 'install
+          (lambda* (#:key make-flags outputs #:allow-other-keys)
             (let* ((ttf (string-append (assoc-ref outputs "out")
                                        "/share/fonts/truetype"))
                    (pcf (string-append (assoc-ref outputs "pcf")
@@ -752,20 +770,19 @@ for use at smaller text sizes")))
                    (psf (string-append (assoc-ref outputs "psf")
                                        "/share/consolefonts"))
                    (bin (assoc-ref outputs "bin")))
-              (invoke "make"
-                      (string-append "PREFIX=" bin)
-                      (string-append "TTFDEST=" ttf)
-                      (string-append "PCFDEST=" pcf)
-                      (string-append "CONSOLEDEST=" psf)
-                      "install")
+              (apply invoke "make" "install"
+                     (string-append "PREFIX=" bin)
+                     (string-append "TTFDEST=" ttf)
+                     (string-append "PCFDEST=" pcf)
+                     (string-append "CONSOLEDEST=" psf)
+                     make-flags)
               ;; Move Texinfo file to the right place.
               (mkdir (string-append bin "/share/info"))
               (invoke "gzip" "-9n" "doc/unifont.info")
               (install-file "doc/unifont.info.gz"
-                            (string-append bin "/share/info"))
-              #t))))))
+                            (string-append bin "/share/info"))))))))
     (inputs
-     `(("perl" ,perl))) ; for utilities
+     (list perl)) ; for utilities
     (synopsis
      "Large bitmap font covering Unicode's Basic Multilingual Plane")
     (description
@@ -821,7 +838,7 @@ visual language \"Material Design\".")
 (define-public font-borg-sans-mono
   (package
     (name "font-borg-sans-mono")
-    (version "0.3.2")
+    (version "0.3.3")
     (source
      (origin
        (method url-fetch)
@@ -830,7 +847,7 @@ visual language \"Material Design\".")
              "/releases/download/v" version "/borg-sans-mono.zip"))
        (sha256
         (base32
-         "0q16gw3ry9hpgbl2636qq00ap59xyx15jf3gzvx2ybz3gja164c4"))))
+         "0xzi866ag9w4q114bn984yjfy72pmfs563v5yy1rkbqycphgwwyp"))))
     (build-system font-build-system)
     (home-page "https://github.com/charje/borg-sans-mono")
     (synopsis "The Borg Sans Mono font")
@@ -956,7 +973,7 @@ Powerline support.")
 (define-public font-adobe-source-code-pro
   (package
     (name "font-adobe-source-code-pro")
-    (version "2.030R-ro-1.050R-it")
+    (version "2.032R-ro-1.052R-it-1.012R-VAR")
     (source
      (origin
        (method git-fetch)
@@ -965,10 +982,12 @@ Powerline support.")
              (commit (regexp-substitute/global
                       ;; The upstream tag uses "/" between the roman and italic
                       ;; versions, so substitute our "-" separator here.
-                      #f "R-ro-" version 'pre "R-ro/" 'post))))
+                      #f "((R-ro)|(R-it))(-)" version
+                      'pre 1 "/" 'post
+                      ))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0hc5kflr8xzqgdm0c3gbgb1paygznxmnivkylid69ipc7wnicx1n"))))
+        (base32 "1lqchm8z0ah5y675ycmciqvr8y1v1gcj22ysfs443gm291vy0z4v"))))
     (build-system font-build-system)
     (home-page "https://github.com/adobe-fonts/source-code-pro")
     (synopsis
@@ -1022,42 +1041,82 @@ work well in user interface (UI) environments.")
 Sans Pro family.")
     (license license:silofl1.1)))
 
-(define-public font-fira-mono
-  (package
-    (name "font-fira-mono")
-    (version "3.206")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://carrois.com/downloads/fira_mono_3_2/"
-                                  "FiraMonoFonts"
-                                  (string-replace-substring version "." "")
-                                  ".zip"))
-              (sha256
-               (base32
-                "1z65x0dw5dq6rs6p9wyfrir50rlh95vgzsxr8jcd40nqazw4jhpi"))))
-    (build-system font-build-system)
-    (home-page "https://mozilla.github.io/Fira/")
-    (synopsis "Mozilla's monospace font")
-    (description "This is the typeface used by Mozilla in Firefox OS.")
-    (license license:silofl1.1)))
-
 (define-public font-fira-sans
+  ;; Fira Sans v4.203 (which corresponds to Fira Mono v3.206) is the final
+  ;; version to include UFO sources. It is the same version packaged by other
+  ;; notable distributors, including Google Fonts. Note that the "reserved
+  ;; font name" was removed by the copyright holders.
+  ;;
+  ;; The upstream release includes a "Fira Code" which "is Fira Mono 3.206
+  ;; with less Line Space (1.0) – does not include programming ligatures". We
+  ;; do not package that: our 'font-fira-code' package (like e.g. Debian's
+  ;; "fonts-firacode") is the much better known Fira Code font by Nikita
+  ;; Prokopov, which is an older, independent adaptation of Fira Mono. For the
+  ;; historical relationship between them, see:
+  ;; https://github.com/mozilla/Fira/issues/218
+  ;;
+  ;; For a lengthy discussion of the available sources and versions,
+  ;; see: https://github.com/LiberalArtist/FiraSans/
+  ;;
+  ;; See also:
+  ;;   - https://github.com/mozilla/Fira/pull/219
+  ;;   - https://github.com/bBoxType/FiraSans/issues/4#issuecomment-695833327
   (package
     (name "font-fira-sans")
-    (version "4.202")
+    (version "4.203")
     (source (origin
               (method git-fetch)
               (uri (git-reference
-                     (url "https://github.com/mozilla/Fira")
-                     (commit version)))
+                     (url "https://github.com/bBoxType/FiraSans")
+                     (commit "a606927401bcc3951587339fee53aa882856b51b")))
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "116j26gdj5g1r124b4669372f7490vfjqw7apiwp2ggl0am5xd0w"))))
+                "1r9kb7v9jg83nnxwkl6gx9ix1rng3ksr7v33qrm46qb4fhwsyc2n"))))
     (build-system font-build-system)
+    (arguments
+     `(#:modules
+       ((ice-9 match)
+        (ice-9 regex)
+        (guix build utils)
+        (guix build font-build-system))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'chdir
+           (lambda* (#:key outputs #:allow-other-keys)
+             (define-values (pkg-name _version)
+               (package-name->name+version
+                (strip-store-file-name (assoc-ref outputs "out"))))
+             (define variant
+               (string-capitalize
+                (match:substring (string-match "fira-([a-z]+)" pkg-name) 1)))
+             (match (find-files "." (format #f "^Fira_~a_[0-9]" variant)
+                                #:directories? #t)
+               ((dir)
+                (chdir dir))))))))
+    ;; While the repository has moved,
+    ;; this specimen still works well as the home-page:
     (home-page "https://mozilla.github.io/Fira/")
-    (synopsis "Mozilla's Fira Sans Font")
-    (description "This is the typeface used by Mozilla in Firefox OS.")
+    (synopsis
+     "Humanist sans-serif with numerous weights emphasizing legibility")
+    (description "Fira Sans is a humanist sans-serif typeface with an emphasis
+on legibility, commissioned by Mozilla from Erik Spiekermann and Ralph du
+Carrois.  The large family includes 2,709 glyphs in normal, condensed, and
+compressed cuts at 11 weights (plus 6 experimental weights), each with
+corresponding italics.
+
+The package @code{font-fira-mono} provides a corresponding monospace cut.")
+    (license license:silofl1.1)))
+
+(define-public font-fira-mono
+  (package
+    (inherit font-fira-sans)
+    (name "font-fira-mono")
+    (version "3.206")
+    (synopsis "Monospace cut of Fira Sans")
+    (description
+     "Fira Mono is a monospace cut of Fira Sans (see @code{font-fira-sans}).
+It includes regular, medium, and bold weights.")
     (license license:silofl1.1)))
 
 (define-public font-fira-go
@@ -1078,30 +1137,41 @@ Sans Pro family.")
     (synopsis "Multilingual extension of the Fira Sans font family")
     (description "FiraGO is a multilingual extension of the Fira Sans font
 family.  Based on the Fira Sans 4.3 glyph set, FiraGO adds support for the
-Arabic, Devanagari, Georgian, Hebrew and Thai scripts.")
+Arabic, Devanagari, Georgian, Hebrew and Thai scripts.
+
+Note that FiraGO does not include corresponding source.")
+    ;; See:
+    ;;   - https://github.com/bBoxType/FiraGO/issues/42
+    ;;   - https://github.com/bBoxType/FiraSans/issues/4#issuecomment-699882058
+    ;; For further discussion, see comments on font-fira-sans.
     (license license:silofl1.1)))
 
 (define-public font-fira-code
   (package
     (name "font-fira-code")
-    (version "5.2")
+    (version "6.2")
     (source
      (origin
+       ;; changing to git-fetch would require building from source
        (method url-fetch/zipbomb)
        (uri (string-append "https://github.com/tonsky/FiraCode/releases/"
                            "download/" version
                            "/Fira_Code_v" version ".zip"))
        (sha256
-        (base32 "1zayrb6k0gd7xdvx7yx44dpip767q0bzhqwf4j6nf8nx02z746jj"))))
+        (base32 "0y9y7snyrr30z75kxz2zgh6q6hizcbzsf41xv6gxh97bm1dr2j89"))))
     (build-system font-build-system)
-    (home-page "https://mozilla.github.io/Fira/")
+    ;; This font began as an independent derived work of Fira Mono.
+    ;; It was never affiliated with Mozilla.
+    ;; See comments on font-fira-sans for further discussion.
+    (home-page "https://github.com/tonsky/FiraCode")
     (synopsis "Monospaced font with programming ligatures")
     (description
-     "Fira Code is an extension of the Fira Mono font containing a set of ligatures
-for common programming multi-character combinations.  This is just a font rendering
-feature: underlying code remains ASCII-compatible.  This helps to read and understand
-code faster.  For some frequent sequences like .. or //, ligatures allow us to
-correct spacing.")
+     "Fira Code is a monospace font by Nikita Prokopov featuring ligatures for
+common programming multi-character combinations.  It began as an extension of
+Fira Mono.  The ligatures are just a font rendering feature: underlying code
+remains ASCII-compatible.  They are designed to help people to read and
+understand code faster.  For some frequent sequences like @code{..} or
+@code{//}, ligatures are used to simulate proportional spacing.")
     (license license:silofl1.1)))
 
 (define-public font-awesome
@@ -1258,7 +1328,7 @@ guix repl <<EOF
              (ice-9 string-fun)
              (gnu packages fonts))
 
-(let ((new-version "7.0.3")
+(let ((new-version "11.2.0")
       (iosevka-hashes #nil)
       (iosevka-fails #nil))
   (for-each (lambda (font)
@@ -1292,7 +1362,7 @@ EOF
 (define-public font-iosevka
   (package
     (name "font-iosevka")
-    (version "7.0.3")
+    (version "11.2.0")
     (source
      (origin
        (method url-fetch/zipbomb)
@@ -1300,7 +1370,7 @@ EOF
                            "/releases/download/v" version
                            "/ttc-iosevka-" version ".zip"))
        (sha256
-        (base32 "08n1c2j38vd1qrf18ilgvq6rl7z9yrsyq9ljf037yiw6zlphx4da"))))
+        (base32 "16a5bbjy9kn62pbrmam6jvcki4xvbakxbqzv72kkpz7p10b10vz7"))))
     (build-system font-build-system)
     (home-page "https://be5invis.github.io/Iosevka/")
     (synopsis "Coders' typeface, built from code")
@@ -1323,7 +1393,7 @@ programming.  Iosevka is completely generated from its source code.")
                            "/releases/download/v" version
                            "/ttc-iosevka-slab-" version ".zip"))
        (sha256
-        (base32 "1ggrbl8gi2hv8yiw7vw8cajlv7nkz8i975165cayyzppjlrfs3nr"))))))
+        (base32 "068nd8wph44r9ka3fd7b5jhph505w08ibn3dmd7czdcp1fkr7dhi"))))))
 
 (define-public font-iosevka-term
   (package
@@ -1337,7 +1407,7 @@ programming.  Iosevka is completely generated from its source code.")
                            "/releases/download/v" version
                            "/ttf-iosevka-term-" version ".zip"))
        (sha256
-        (base32 "1jmbp3hni99l92653b356nbmj45kd54kbl6c6ws1k5jxydrjglrh"))))
+        (base32 "0a22pnr74l87ajprcki3j3fc5cryfr5krpxang0b51grkdb9l724"))))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1358,7 +1428,7 @@ programming.  Iosevka is completely generated from its source code.")
                            "releases/download/v" version "/"
                            "ttf-iosevka-term-slab-" version ".zip"))
        (sha256
-        (base32 "19fc6jbkv0aif6ds9ddxaarz2ambzln7y6k2qjsczwlbznr8cf09"))))
+        (base32 "00nsykwa1r198wrh85d42vbjwpxxsmzdn3i4fighdrd3c99fbv60"))))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1379,7 +1449,7 @@ programming.  Iosevka is completely generated from its source code.")
                            "/releases/download/v" version
                            "/ttc-iosevka-aile-" version ".zip"))
        (sha256
-        (base32 "1bkrk4dqkj45fbaac2n61a5kwxs3bk6sdm5hanw7g2h4xb83fi8d"))))))
+        (base32 "11xajywv20ah6yg3a0sqv2lp5phg8yv268dw2myz3ciazwnvdpqq"))))))
 
 (define-public font-iosevka-curly
   (package
@@ -1393,7 +1463,7 @@ programming.  Iosevka is completely generated from its source code.")
                            "releases/download/v" version  "/"
                            "ttc-iosevka-curly-" version ".zip"))
        (sha256
-        (base32 "12jdb38dlbwa58q0b0sf9sp1dcafzp9dcf71jf1wrlnn8047vxyx"))))))
+        (base32 "1ss11pdrk7k0kwbaklllz4mb961j6issjp53jpp7p9pvs4qad8xf"))))))
 
 (define-public font-iosevka-curly-slab
   (package
@@ -1407,7 +1477,7 @@ programming.  Iosevka is completely generated from its source code.")
                            "releases/download/v" version  "/"
                            "ttc-iosevka-curly-slab-" version ".zip"))
        (sha256
-        (base32 "0zn21bxyj0ni4vbdarwam2piixzvkdk769vg3k4fl3h03q56cj24"))))))
+        (base32 "141jyarpmln5q3cjyq79nw9kfm55vaiy3cin3rlamghrhjw8wg9q"))))))
 
 (define-public font-iosevka-etoile
   (package
@@ -1421,7 +1491,7 @@ programming.  Iosevka is completely generated from its source code.")
                            "/releases/download/v" version
                            "/ttc-iosevka-etoile-" version ".zip"))
        (sha256
-        (base32 "0lnpdvv20g2bg6rwl0gv83bkbgfmkbyfxshhpw9vprfs2g8k6lil"))))))
+        (base32 "097b8acia49fqpsy3w6ldk73k4abn6z9mlkl1p4iw99k26ip1sy7"))))))
 
 (define-public font-sarasa-gothic
   (package
@@ -1443,7 +1513,7 @@ programming.  Iosevka is completely generated from its source code.")
                       (mkdir "source")
                       (chdir "source")
                       (invoke "7z" "x" source))))))
-    (native-inputs `(("p7zip" ,p7zip)))
+    (native-inputs (list p7zip))
     (home-page "https://github.com/be5invis/Sarasa-Gothic")
     (license license:silofl1.1)
     (synopsis "Sarasa Gothic / 更纱黑体 / 更紗黑體 / 更紗ゴシック / 사라사 고딕")
@@ -1559,7 +1629,7 @@ resolutions.")
          (base32
           "11ml7v4iyf3hr0fbnkwz8afb8vi58wbcfnmn4gyvrwh9jk5pybdr"))))
     (build-system font-build-system)
-    (native-inputs `(("unzip" ,unzip)))
+    (native-inputs (list unzip))
     (home-page "https://opendyslexic.org/")
     (synopsis "Font for dyslexics and high readability")
     (description "OpenDyslexic is a font designed to help readability for some
@@ -1571,13 +1641,10 @@ swapping.  The italic style for OpenDyslexic has been crafted to be used for
 emphasis while still being readable.")
     (license license:silofl1.1)))
 
-(define-public font-open-dyslexic
-  (deprecated-package "font-open-dyslexic" font-opendyslexic))
-
 (define-public font-openmoji
   (package
     (name "font-openmoji")
-    (version "12.4.0")
+    (version "13.1.0")
     (source
      (origin
        (method url-fetch/zipbomb)
@@ -1587,10 +1654,10 @@ emphasis while still being readable.")
                        "/openmoji-font.zip"))
        (sha256
         (base32
-         "0wvvg5vnc950h8v23wfgjyi7rv89mgm5hqq6viqv0bxcc3azglxb"))))
+         "0xmy3hr38v03f1riwxmxdibb7iwj0qz288inqaha3pwq7pj7ln45"))))
     (build-system font-build-system)
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://openmoji.org")
     (synopsis "Font for rendering emoji characters")
     (description
@@ -1659,7 +1726,7 @@ ExtraLight, Light, Book, Medium, Semibold, Bold & ExtraBold")
                          (find-files "." "^Nachlieli.*\\.sfd$"))
                #t))))))
     (native-inputs
-     `(("fontforge" ,fontforge)))
+     (list fontforge))
     (home-page "http://culmus.sourceforge.net/")
     (synopsis "TrueType Hebrew Fonts for X11")
     (description "14 Hebrew trivial families.  Contain ASCII glyphs from various
@@ -1819,6 +1886,25 @@ formatting.")
     (home-page "https://madmalik.github.io/mononoki/")
     (license license:silofl1.1)))
 
+(define-public font-plemoljp
+  (package
+    (name "font-plemoljp")
+    (version "1.2.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/yuru7/PlemolJP/releases/download/"
+                    "v" version "/PlemolJP_v" version ".zip"))
+              (sha256
+               (base32
+                "03cwzkqg09c87lmsx9xfzdrlgjml93bhhp1dqq3qkpdfww30wkaw"))))
+    (build-system font-build-system)
+    (home-page "https://github.com/yuru7/PlemolJP")
+    (synopsis "Plex Mono Language JP")
+    (description "PlemolJP (Plex Mono Language JP) is a Japanese programming
+font that is a composite of IBM Plex Mono and IBM Plex Sans JP.")
+    (license license:silofl1.1)))
+
 (define-public font-public-sans
   (package
     (name "font-public-sans")
@@ -1944,25 +2030,25 @@ in small sizes, the text looks crisper.")
 (define-public font-juliamono
   (package
     (name "font-juliamono")
-    (version "0.031")
+    (version "0.043")
     (source
      (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/cormullion/juliamono")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/cormullion/juliamono/releases/download/"
+             "v" version "/JuliaMono-ttf.tar.gz"))
        (sha256
-        (base32 "0pcz2qaw0g0gak4plvhgg3m76h4gamffa373r52dzx0qwn1i1cf1"))))
+        (base32
+         "0vb7n9yqgasnxzps13ckklay5bla6b0i79pzmfqvjms1r37079gh"))))
     (build-system font-build-system)
     (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'delete-website-folder
-           ;; This folder contains other unrelated fonts.
-           (lambda _
-             (delete-file-recursively "website")
-             #t)))))
+     `(#:phases (modify-phases %standard-phases
+                  (replace 'unpack
+                    (lambda* (#:key source #:allow-other-keys)
+                      (mkdir "source")
+                      (chdir "source")
+                      (invoke "tar" "xzf" source))))))
+    (native-inputs (list tar))
     (home-page "https://github.com/cormullion/juliamono")
     (synopsis "Monospaced font for programming")
     (description
@@ -2050,7 +2136,7 @@ It comes in seven weights and Roman, Italic and Oblique styles.")
        ("harfbuzz" ,harfbuzz "bin")
        ("python" ,python-minimal)
        ("python-fonttools" ,python-fonttools)
-       ("python-google-brotli" ,python-google-brotli)))
+       ("python-brotli" ,python-brotli)))
     (arguments
      `(#:make-flags (list "PY=python3"
                           (string-append "DESTDIR=" %output)
@@ -2187,7 +2273,7 @@ suitable for a wide range of uses.")
 (define-public font-cozette
   (package
     (name "font-cozette")
-    (version "1.9.3")
+    (version "1.13.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -2196,21 +2282,28 @@ suitable for a wide range of uses.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0mb5ns6705piwgjw1g10czsakhyc1jnvxh342ixw8m5f1gf4595n"))))
+                "178i812n4sfsvid7jhnm683jlxqmrv4ck6qbb4nwyllhwg3gyq60"))))
     (build-system font-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'dont-depend-on-git
+           (lambda _
+             (substitute* "build.py"
+               ;; Merely importing this module requires a git repository.
+               ;; We don't use get_changelog, so just disable the import.
+               (("from cozette_builder\\.changeloggen import get_changelog")
+                ""))))
          (add-before 'install 'build
            (lambda _
              (invoke "python3" "build.py" "fonts"))))))
     (native-inputs
-     `(("fontforge" ,fontforge)
-       ("python" ,python)
-       ("python-crayons" ,python-crayons)
-       ("python-fonttools" ,python-fonttools)
-       ("python-numpy" ,python-numpy)
-       ("python-pillow" ,python-pillow)))
+     (list fontforge
+           python
+           python-crayons
+           python-fonttools
+           python-numpy
+           python-pillow))
     (home-page "https://github.com/slavfox/Cozette")
     (synopsis "Bitmap programming font")
     (description "Cozette is a 6x13px (bounding box) bitmap font based on Dina
@@ -2242,16 +2335,16 @@ half of the twentieth century.")
 (define-public font-overpass
   (package
     (name "font-overpass")
-    (version "3.0.4")
+    (version "3.0.5")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
              (url "https://github.com/RedHatOfficial/Overpass")
-             (commit version)))
+             (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1pl7zpwlx0j2xv23ahnpmbb4a5d6ib2cjck5mxqzi3jjk25rk9kb"))))
+        (base32 "1vsp94h7v5sn29hajv2ng94gyx4pqb0xgvn3gf7jp2q80gdv8pkm"))))
     (build-system font-build-system)
     (arguments
      `(#:phases
@@ -2267,3 +2360,107 @@ road signage typefaces, adapted for on-screen display and user interfaces.
 Overpass includes proportional and monospace variants.")
     (license (list license:silofl1.1
                    license:lgpl2.1))))
+
+(define-public font-cormorant
+  (package
+    (name "font-cormorant")
+    (version "3.609")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/CatharsisFonts/Cormorant")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0fjp2xk4bjx8i6jamkyjq2fdr7324fh41pbn634iwnhdvvawvbav"))))
+    (build-system font-build-system)
+    (home-page "https://github.com/CatharsisFonts/Cormorant")
+    (synopsis
+     "Extravagant display serif typeface in the spirit of Garamond")
+    (description
+     "Cormorant is an extravagant display serif typeface inspired by
+the Garamond heritage.  The design goal of Cormorant was to distill
+the aesthetic essence of Garamond, unfetter it from the limitations of
+metal printing, and allow it to bloom into its natural refined form at
+high definition.  Cormorant is characterized by scandalously small
+counters, razor-sharp serifs, dangerously smooth curves, and
+flamboyantly tall accents.  While many implementations of Garamond at
+small optical sizes already exist, Cormorant aims for the sparsely
+populated niche of display-size counterparts that exploit the high
+resolution of contemporary screens and print media to the fullest.")
+    (license license:silofl1.1)))
+
+(define-public font-bravura
+  (package
+    (name "font-bravura")
+    (version "1.393")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/steinbergmedia/bravura")
+             ;; Should be:
+             ;;   (string-append "bravura-" version)
+             ;; but missing tag for 1.393. Requested upstream at:
+             ;; https://github.com/steinbergmedia/bravura/issues/61
+             (commit "3df1714e6f9d522a8d2b6ee6888fa3e68e71199d")))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1d0a2z1gl0kzfnd5z0nv2gd226qwll13kis2xrhx213w6r849180"))))
+    (build-system font-build-system)
+    (home-page "https://www.smufl.org/fonts/")
+    (synopsis
+     "OpenType music font and SMuFL reference implementation")
+    (description
+     "Bravura is an OpenType music font and the reference implementation for
+the W3C Standard Music Font Layout (SMuFL).  Bravura draws on the heritage of
+the finest European music engraving of the 19th and early 20th centuries, with
+a bolder and more substantial look than most other music fonts: thin strokes
+are slightly thicker than in other fonts, improving the overall ``blackness''
+of the font and its legibility when read at a distance.
+
+In addition to Bravura itself, which is for use with music notation
+software (such as MuseScore), the family includes a Bravura Text variant
+optimized for using musical symbols inline with regular text.")
+    (license license:silofl1.1)))
+
+(define-public font-charter
+  (let ((butterick-version "210112")) ;; yymmdd
+    (package
+      (name "font-charter")
+      (version (string-append "2.0.0-" butterick-version))
+      (source
+       (origin
+         (method url-fetch)
+         (uri (string-append "https://practicaltypography.com/fonts/Charter%20"
+                             butterick-version ".zip"))
+         (file-name (string-append name "-" version ".zip"))
+         (sha256
+          (base32 "1j8iv2dl695zrabs2knb7jsky8mjis29a2ddpna4by8mlvqrf0ml"))))
+      (outputs '("out" "woff2"))
+      (build-system font-build-system)
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-after 'install 'install-woff2
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let ((dest (string-append (assoc-ref outputs "woff2")
+                                          "/share/fonts/woff2")))
+                 (for-each (lambda (file)
+                             (install-file file dest))
+                           (find-files "." "\\.woff2$"))))))))
+      (home-page "https://practicaltypography.com/charter.html")
+      (synopsis "Charter fonts in OpenType and TrueType formats")
+      (description "Charter was designed by Matthew Carter in 1987 and was
+contributed by Bitstream to the X Consortium in 1992.  This package provides
+OpenType, TrueType, and @acronym{WOFF2, Web Open Font Format 2} versions
+converted from the Type 1 originals by Matthew Butterick.")
+      (license
+       (license:non-copyleft
+        "file://Charter license.txt"
+        (string-append
+         "Bitstream contributed the Charter family "
+         "to the X Consortium in 1992.  "
+         "The license is also embedded in the font metadata."))))))
+/
diff --git a/gnu/packages/fontutils.scm b/gnu/packages/fontutils.scm
index fefe710677..bc082de3d3 100644
--- a/gnu/packages/fontutils.scm
+++ b/gnu/packages/fontutils.scm
@@ -8,10 +8,13 @@
 ;;; Copyright © 2017 Nikita <nikita@n0.is>
 ;;; Copyright © 2017, 2018, 2020, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
-;;; Copyright © 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2019, 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2020 Roel Janssen <roel@gnu.org>
 ;;; Copyright © 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -32,10 +35,10 @@
   #:use-module (gnu packages)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages bison)
-  #:use-module (gnu packages build-tools)   ;for meson-0.55
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages datastructures)
+  #:use-module (gnu packages docbook)
   #:use-module (gnu packages flex)
   #:use-module (gnu packages fonts)
   #:use-module (gnu packages freedesktop)
@@ -59,6 +62,7 @@
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
+  #:use-module (gnu packages tex)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
@@ -88,12 +92,11 @@
     ;; depend on it.
     `(#:configure-flags (list "--enable-freetype-config")))
    (native-inputs
-    `(("pkg-config" ,pkg-config)))
+    (list pkg-config))
    (propagated-inputs
     ;; These are all in the Requires.private field of freetype2.pc.
     ;; XXX: add harfbuzz.
-    `(("libpng" ,libpng)
-      ("zlib" ,zlib)))
+    (list libpng zlib))
    (synopsis "Font rendering library")
    (description
     "Freetype is a library that can be used by applications to access the
@@ -118,12 +121,9 @@ anti-aliased glyph bitmap generation with 256 gray levels.")
          "0zpqgihn3yh3v51ynxwr8asqrijvs4gv686clwv7bm8sawr4kfw7"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("flex" ,flex)
-       ("bison" ,bison)
-       ("pkg-config" ,pkg-config)))
+     (list flex bison pkg-config))
     (inputs
-     `(("freetype" ,freetype)
-       ("harfbuzz" ,harfbuzz)))
+     (list freetype harfbuzz))
     (arguments
      `(#:configure-flags '("--disable-static"
                            "--with-qt=no"))) ;no gui
@@ -151,7 +151,7 @@ scripts.")
          "1i97gkqa6jfzlslsngqf556kx60knlgf7yc9pzsq2pizc6f0d4zl"))))
     (build-system gnu-build-system)
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (arguments
      `(#:make-flags '(,(string-append "CC=" (cc-for-target)))
        #:tests? #f                      ;no tests
@@ -254,7 +254,7 @@ TTF (TrueType/OpenType Font) files.")
                       (invoke "make" "-j"
                               (number->string (parallel-job-count))
                               "all" "CC=gcc"))))))
-    (inputs `(("perl" ,perl)))
+    (inputs (list perl))
     (synopsis "Convert TrueType fonts to Postscript Type 1")
     (description
      "TTF2PT1 provides tools to convert most TrueType fonts (or other formats
@@ -307,9 +307,9 @@ work with most software requiring Type 1 fonts.")
                 "BUILD_SHARED_LIBS"))
              #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("brotli" ,google-brotli)))
+     (list brotli))
     (synopsis "Libraries and tools for WOFF2 font format")
     (description "WOFF2 provides libraries and tools to handle the Web Open
 Font Format (WOFF).")
@@ -317,55 +317,61 @@ Font Format (WOFF).")
     (license license:expat)))
 
 (define-public fontconfig
-  (package
-   (name "fontconfig")
-   (version "2.13.1")
-   (source (origin
-            (method url-fetch)
-            (uri (string-append
-                   "https://www.freedesktop.org/software/fontconfig/release/fontconfig-"
-                   version ".tar.bz2"))
-            (patches (search-patches "fontconfig-hurd-path-max.patch"))
-            (sha256 (base32
-                     "0hb700a68kk0ip51wdlnjjc682kvlrmb6q920mzajykdk0mdsmgn"))))
-   (build-system gnu-build-system)
-   ;; In Requires or Requires.private of fontconfig.pc.
-   (propagated-inputs `(("expat" ,expat)
-                        ("freetype" ,freetype)
-                        ("libuuid" ,util-linux "lib")))
-   (inputs
-    ;; We use to use 'gs-fonts' but they are not recognized by newer versions
-    ;; of Pango, causing many applications to fail to find fonts otherwise.
-    `(("font-dejavu" ,font-dejavu)))
-   (native-inputs
-    `(("gperf" ,gperf)
-      ("pkg-config" ,pkg-config)))
-   (arguments
-    `(#:configure-flags
-      (list "--with-cache-dir=/var/cache/fontconfig"
-            ;; register the default fonts
-            (string-append "--with-default-fonts="
-                           (assoc-ref %build-inputs "font-dejavu")
-                           "/share/fonts")
-
-            ;; Register fonts from user and system profiles.
-            (string-append "--with-add-fonts="
-                           "~/.guix-profile/share/fonts,"
-                           "/run/current-system/profile/share/fonts")
-
-            ;; python is not actually needed
-            "PYTHON=false")
-      #:phases
-      (modify-phases %standard-phases
-        (replace 'install
-                 (lambda _
-                   ;; Don't try to create /var/cache/fontconfig.
-                   (invoke "make" "install"
-                           "fc_cachedir=$(TMPDIR)"
-                           "RUN_FC_CACHE_TEST=false"))))))
-   (synopsis "Library for configuring and customizing font access")
-   (description
-    "Fontconfig can discover new fonts when installed automatically;
+  (hidden-package
+   (package
+     (name "fontconfig-minimal")
+     (version "2.13.94")
+     (source (origin
+               (method url-fetch)
+               (uri (string-append
+                     "https://www.freedesktop.org/software/"
+                     "fontconfig/release/fontconfig-" version ".tar.xz"))
+               (sha256 (base32
+                        "0g004r0bkkqz00mpm3svnnxn7d83158q0yb9ggxryizxfg5m5w55"))
+               (patches (search-patches "fontconfig-cache-ignore-mtime.patch"))))
+     (build-system gnu-build-system)
+     ;; In Requires or Requires.private of fontconfig.pc.
+     (propagated-inputs `(("expat" ,expat)
+                          ("freetype" ,freetype)
+                          ("libuuid" ,util-linux "lib")))
+     (inputs
+      ;; We use to use 'font-ghostscript' but they are not recognized by newer
+      ;; versions of Pango, causing many applications to fail to find fonts
+      ;; otherwise.
+      (list font-dejavu))
+     (native-inputs
+      `(("gperf" ,gperf)
+        ("pkg-config" ,pkg-config)
+        ("python" ,python-minimal)))    ;to avoid a cycle through tk
+     (arguments
+      `(#:configure-flags
+        (list "--disable-docs"
+              "--with-cache-dir=/var/cache/fontconfig"
+              ;; register the default fonts
+              (string-append "--with-default-fonts="
+                             (assoc-ref %build-inputs "font-dejavu")
+                             "/share/fonts"))
+        #:phases
+        (modify-phases %standard-phases
+          (add-before 'check 'skip-problematic-tests
+            (lambda _
+              ;; SOURCE_DATE_EPOCH doesn't make sense when ignoring mtime
+              (unsetenv "SOURCE_DATE_EPOCH")
+
+              (substitute* "test/run-test.sh"
+                ;; The crbug1004254 test attempts to fetch fonts from the
+                ;; network.
+                (("\\[ -x \"\\$BUILDTESTDIR\"/test-crbug1004254 \\]")
+                 "false"))))
+          (replace 'install
+            (lambda _
+              ;; Don't try to create /var/cache/fontconfig.
+              (invoke "make" "install"
+                      "fc_cachedir=$(TMPDIR)"
+                      "RUN_FC_CACHE_TEST=false"))))))
+     (synopsis "Library for configuring and customizing font access")
+     (description
+      "Fontconfig can discover new fonts when installed automatically;
 perform font name substitution, so that appropriate alternative fonts can
 be selected if fonts are missing;
 identify the set of fonts required to completely cover a set of languages;
@@ -373,10 +379,56 @@ have GUI configuration tools built as it uses an XML-based configuration file;
 efficiently and quickly find needed fonts among the set of installed fonts;
 be used in concert with the X Render Extension and FreeType to implement
 high quality, anti-aliased and subpixel rendered text on a display.")
-   ; The exact license is more X11-style than BSD-style.
-   (license (license:non-copyleft "file://COPYING"
-                       "See COPYING in the distribution."))
-   (home-page "https://www.freedesktop.org/wiki/Software/fontconfig")))
+                                        ; The exact license is more X11-style than BSD-style.
+     (license (license:non-copyleft "file://COPYING"
+                                    "See COPYING in the distribution."))
+     (native-search-paths
+      ;; Since version 2.13.94, fontconfig knows to find fonts from
+      ;; XDG_DATA_DIRS.
+      (list (search-path-specification
+             (variable "XDG_DATA_DIRS")
+             (files '("share")))))
+     (home-page "https://www.freedesktop.org/wiki/Software/fontconfig"))))
+
+;;; The documentation of fontconfig is built in a separate package, as it
+;;; causes a dramatic increase in the size of the closure of fontconfig.  This
+;;; is intentionally named 'fontconfig', as it's intended as the user-facing
+;;; fontconfig package.
+(define-public fontconfig-with-documentation
+  (package
+    (inherit fontconfig)
+    (name "fontconfig")
+    (outputs (cons "doc" (package-outputs fontconfig)))
+    (arguments
+     (substitute-keyword-arguments (package-arguments fontconfig)
+       ((#:configure-flags configure-flags)
+        `(delete "--disable-docs" ,configure-flags))
+       ((#:phases phases '%standard-phases)
+        `(modify-phases ,phases
+           (add-after 'unpack 'no-pdf-doc
+             (lambda _
+               ;; Don't build documentation as PDF.
+               (substitute* "doc/Makefile.in"
+                 (("^PDF_FILES = .*")
+                  "PDF_FILES =\n"))))
+           (add-after 'install 'move-man-sections
+             (lambda* (#:key outputs #:allow-other-keys)
+               ;; Move share/man/man{3,5} to the "doc" output.  Leave "man1" in
+               ;; "out" for convenience.
+               (let ((out (assoc-ref outputs "out"))
+                     (doc (assoc-ref outputs "doc")))
+                 (for-each (lambda (section)
+                             (let ((source (string-append out "/share/man/"
+                                                          section))
+                                   (target (string-append doc "/share/man/"
+                                                          section)))
+                               (copy-recursively source target)
+                               (delete-file-recursively source)))
+                           '("man3" "man5")))))))))
+    (native-inputs
+     (append (package-native-inputs fontconfig)
+             `(("docbook-utils" ,docbook-utils))))
+    (properties (alist-delete 'hidden? (package-properties fontconfig)))))
 
 (define-public t1lib
   (package
@@ -421,22 +473,21 @@ X11-system or any other graphical user interface.")
 (define-public teckit
   (package
     (name "teckit")
-    (version "2.5.9")                   ;signed by key 0xC9183BEA0288CDEE
+    (version "2.5.10")                  ; signed by key 0xC9183BEA0288CDEE
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://github.com/silnrsi/teckit/releases/"
                            "download/v" version "/teckit-" version ".tar.gz"))
        (sha256
-        (base32 "0gbxyip4wdibirdg2pvzayzyy927vxyd6dfyfiflx8zg88qzn8v8"))))
+        (base32 "12qnf8nhxyr4d5pc01s3vc6h726506957an4vvmmfz633cqi5796"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--disable-static")))
     (inputs
-     `(("zlib" ,zlib)
-       ("expat" ,expat)))
+     (list zlib expat))
     (native-inputs
-     `(("perl" ,perl)))                 ;for the tests
+     (list perl))                 ;for the tests
     (synopsis "Toolkit for encoding conversions")
     (description
      "TECkit is a low-level toolkit intended to be used by other applications
@@ -472,22 +523,10 @@ applications should be.")
         (base32
          "01jzhwnj1c3d68dmw15jdxly0hwkmd8ja4kw755rbkykn1ly2qyx"))))
    (build-system cmake-build-system)
-   (arguments
-    `(#:phases (modify-phases %standard-phases
-                 (add-after 'unpack 'adjust-test-PYTHONPATH
-                   (lambda _
-                     ;; Tell the build system not to override PYTHONPATH
-                     ;; while running the Python tests.
-                     (substitute* "Graphite.cmake"
-                       (("ENVIRONMENT PYTHONPATH=")
-                        (string-append "ENVIRONMENT PYTHONPATH="
-                                       (getenv "PYTHONPATH") ":")))
-                     #t)))))
    (native-inputs
-    `(("python" ,python)
-      ("python-fonttools" ,python-fonttools)))
+    (list python python-fonttools))
    (inputs
-    `(("freetype" ,freetype)))
+    (list freetype))
    (synopsis "Reimplementation of the SIL Graphite text processing engine")
    (description
     "Graphite2 is a reimplementation of the SIL Graphite text processing
@@ -510,8 +549,8 @@ and returns a sequence of positioned glyphids from the font.")
        (base32
         "1k3sxgjqq0jnpk9xxys05q32sl5hbf1lbk1gmfxcrmpdgnhli0my"))))
     (build-system gnu-build-system)
-    (native-inputs `(("ghostscript" ,ghostscript))) ;for tests
-    (inputs `(("zlib" ,zlib)))
+    (native-inputs (list ghostscript)) ;for tests
+    (inputs (list zlib))
     (arguments
      `(#:configure-flags
       `("--with-libpotrace"))) ; install library and headers
@@ -539,9 +578,9 @@ resolution.")
                (base32 "0sq6g3xaxw388akws6qrllp3kp2sxgk2dv4j79k6mm52rnihrnv8"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (propagated-inputs
-     `(("freetype" ,freetype)))
+     (list freetype))
     (home-page "https://www.nongnu.org/m17n/")
     (synopsis "Library for handling OpenType Font")
     (description "This library can read Open Type Layout Tables from an OTF
@@ -601,17 +640,17 @@ definitions.")
 (define-public fontforge
   (package
    (name "fontforge")
-   (version "20200314")
+   (version "20201107")
    (source (origin
             (method url-fetch)
             (uri (string-append
                   "https://github.com/fontforge/fontforge/releases/download/"
                   version "/fontforge-" version ".tar.xz"))
             (sha256
-             (base32 "0qf88wd6riycq56d24brybyc93ns74s0nyyavm43zp2kfcihn6fd"))))
+             (base32 "0y3c8x1i6yf6ak9m5dhr1nldgfmg7zhnwdfd57ffs698c27vmg38"))))
    (build-system cmake-build-system)
    (native-inputs
-    `(("pkg-config" ,pkg-config)))
+    (list pkg-config))
    (inputs `(("cairo"           ,cairo)
              ("fontconfig"      ,fontconfig) ;dlopen'd
              ("freetype"        ,freetype)
@@ -651,7 +690,8 @@ definitions.")
         (add-after 'install 'set-library-path
           (lambda* (#:key inputs outputs #:allow-other-keys)
             (let ((out (assoc-ref outputs "out"))
-                  (potrace (string-append (assoc-ref inputs "potrace") "/bin")))
+                  (potrace (dirname
+                            (search-input-file inputs "bin/potrace"))))
               (wrap-program (string-append out "/bin/fontforge")
                 ;; Fontforge dynamically opens libraries.
                 `("LD_LIBRARY_PATH" ":" prefix
@@ -711,11 +751,9 @@ generate bitmaps.")
     (arguments
      `(#:python ,python-2))
     (propagated-inputs
-     `(("python2-fonttools" ,python2-fonttools)))
+     (list python2-fonttools))
     (native-inputs
-     `(("unzip" ,unzip)
-       ("python2-pytest" ,python2-pytest)
-       ("python2-pytest-runner" ,python2-pytest-runner)))
+     (list unzip python2-pytest python2-pytest-runner))
     (home-page "https://github.com/unified-font-object/ufoLib")
     (synopsis "Low-level UFO reader and writer")
     (description
@@ -738,12 +776,9 @@ files.  UFO is a file format that stores fonts source files.")
     (arguments
      `(#:python ,python-2))
     (native-inputs
-     `(("unzip" ,unzip)
-       ("python2-pytest" ,python2-pytest)
-       ("python2-pytest-runner" ,python2-pytest-runner)))
+     (list unzip python2-pytest python2-pytest-runner))
     (propagated-inputs
-     `(("python2-fonttools" ,python2-fonttools)
-       ("python2-ufolib" ,python2-ufolib)))
+     (list python2-fonttools python2-ufolib))
     (home-page "https://pypi.org/project/defcon/")
     (synopsis "Flexible objects for representing @acronym{UFO, unified font object} data")
     (description
@@ -774,12 +809,12 @@ implements UFO3 as described by the UFO font format.")
     (arguments
      `(#:python ,python-2))
     (propagated-inputs
-     `(("python2-booleanoperations" ,python2-booleanoperations)
-       ("python2-defcon" ,python2-defcon)
-       ("python2-fonttools" ,python2-fonttools)
-       ("python2-pillow" ,python2-pillow)
-       ("python2-pyclipper" ,python2-pyclipper)
-       ("python2-ufolib" ,python2-ufolib)))
+     (list python2-booleanoperations
+           python2-defcon
+           python2-fonttools
+           python2-pillow
+           python2-pyclipper
+           python2-ufolib))
     (home-page "https://github.com/googlei18n/nototools")
     (synopsis "Noto fonts support tools and scripts")
     (description
@@ -800,7 +835,7 @@ maintain the Noto Fonts project.")
 (define-public fcft
   (package
     (name "fcft")
-    (version "2.4.1")
+    (version "2.5.1")
     (home-page "https://codeberg.org/dnkl/fcft")
     (source (origin
               (method git-fetch)
@@ -808,22 +843,17 @@ maintain the Noto Fonts project.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "00rwh5qfayihrq0wjx8pxqw5ah6g5ym6raxvdbqb6g6rk7m2j423"))))
+                "0dn0ic2ddi5qz6nqscsn7nlih67ad8vpclppbqwas6xavdfq6va2"))))
     (build-system meson-build-system)
-    (arguments
-     `(#:meson ,meson-0.55))
     (native-inputs
-     `(("check" ,check)
-       ("gcc" ,gcc-10)    ;TODO: Remove when the default compiler is > GCC 7.
-       ("pkg-config" ,pkg-config)
-       ("scdoc" ,scdoc)))
+     (list check pkg-config scdoc))
     (propagated-inputs
-     `(;; Required by fcft.pc.
-       ("fontconfig" ,fontconfig)
-       ("freetype" ,freetype)
-       ("harfbuzz" ,harfbuzz)
-       ("pixman" ,pixman)
-       ("tllist" ,tllist)))
+     (list ;; Required by fcft.pc.
+           fontconfig
+           freetype
+           harfbuzz
+           pixman
+           tllist))
     (synopsis "Font loading and glyph rasterization library")
     (description
      "@code{fcft} is a small font loading and glyph rasterization library
@@ -844,7 +874,7 @@ generated list of fallback fonts are checked.")
 (define-public fontmanager
   (package
    (name "fontmanager")
-   (version "0.8.4")
+   (version "0.8.7")
    (source
     (origin
       (method git-fetch)
@@ -853,8 +883,7 @@ generated list of fallback fonts are checked.")
             (commit version)))
       (file-name (git-file-name name version))
       (sha256
-       (base32
-        "09rv0srpj8ann2n1zpv1frlpxz0x10d2y21c5lys7pmfngljlxi9"))))
+       (base32 "0nyda2a6vbzyz4sn9mmrr8bkifzxmmjp7x9a3c4s6n925ccy79cn"))))
    (build-system meson-build-system)
    (arguments
     `(#:glib-or-gtk? #t
@@ -869,16 +898,16 @@ generated list of fallback fonts are checked.")
       ("glib" ,glib "bin")
       ("gobject-introspection" ,gobject-introspection)
       ("pkg-config" ,pkg-config)
-      ("vala" ,vala-0.50)
+      ("vala" ,vala-0.52)
       ("yelp-tools" ,yelp-tools)))
    (inputs
     `(("fonconfig" ,fontconfig)
       ("freetype" ,freetype)
       ("gtk+" ,gtk+)
       ("json-glib" ,json-glib)
-      ("libsoup" ,libsoup)
+      ("libsoup" ,libsoup-minimal-2)
       ("sqlite" ,sqlite)
-      ("webkitgtk" ,webkitgtk)))
+      ("webkitgtk" ,webkitgtk-with-libsoup2)))
    (home-page "https://fontmanager.github.io/")
    (synopsis "Simple font management for GTK+ desktop environments")
    (description "Font Manager is intended to provide a way for users to
@@ -891,7 +920,7 @@ work well with other GTK+ desktop environments.")
 (define-public fntsample
   (package
     (name "fntsample")
-    (version "5.3")
+    (version "5.4")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -900,7 +929,7 @@ work well with other GTK+ desktop environments.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "02rx3gp7k472304vhjwb129nw10a29s4nvgs7i2m6bpjhlk2xgs5"))))
+                "0pcqqdriv6hq64zrqd9vhdd9p2vhimjnajcxdz10qnqgrkmm751v"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f ; There are no tests.
@@ -921,8 +950,7 @@ work well with other GTK+ desktop environments.")
                                              "/lib/perl5/site_perl/"
                                              ,(package-version perl))))
                (wrap-program (string-append out "/bin/pdfoutline")
-                 `("PERL5LIB" ":" prefix (,perllib)))
-               #t))))))
+                 `("PERL5LIB" ":" prefix (,perllib)))))))))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("gettext" ,gettext-minimal)))
@@ -935,13 +963,15 @@ work well with other GTK+ desktop environments.")
        ("perl-pdf-api2" ,perl-pdf-api2)
        ("perl-libintl-perl" ,perl-libintl-perl)
        ("unicode-blocks"
-        ,(origin
-           (method url-fetch)
-           (uri "https://unicode.org/Public/UNIDATA/Blocks.txt")
-           (file-name "unicode-blocks.txt")
-           (sha256
-            (base32
-             "1xs8fnhh48gs41wg004r7m4r2azh9khmyjjlnvyzy9c6zrd212x2"))))))
+        ,(let ((version "14.0.0"))
+           (origin
+             (method url-fetch)
+             (uri (string-append "https://unicode.org/Public/"
+                                 version "/ucd/Blocks.txt"))
+             (file-name (string-append "unicode-blocks-" version ".txt"))
+             (sha256
+              (base32
+               "05vzgrvfp35mgxjgkm4wnxjjgzva8n6545i9jxd4pczpvvfp122r")))))))
     (home-page "https://github.com/eugmes/fntsample")
     (synopsis "PDF and PostScript font samples generator")
     (description "This package provides a tool that can be used to make font
@@ -952,7 +982,7 @@ Unicode Charts.  It was developed for use with DejaVu Fonts project.")
 (define-public libraqm
   (package
     (name "libraqm")
-    (version "0.7.2")
+    (version "0.8.0")
     (source
      (origin
        (method git-fetch)
@@ -961,16 +991,12 @@ Unicode Charts.  It was developed for use with DejaVu Fonts project.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1shcs5l27l7380dvacvhl8wrdq3lix0wnhzvfdh7vx2pkzjs3zk6"))))
+        (base32 "0qrdw67n14n0km2f8l0gk8scgj3ybz662s9x8jwj3rrj33nl2d1a"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("gtk-doc" ,gtk-doc/stable)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python-wrapper)))
+     (list gtk-doc/stable pkg-config python-wrapper))
     (inputs
-     `(("freetype" ,freetype)
-       ("fribidi" ,fribidi)
-       ("harfbuzz" ,harfbuzz)))
+     (list freetype fribidi harfbuzz))
     (home-page "https://github.com/HOST-Oman/libraqm")
     (synopsis "Library for complex text layout")
     (description
@@ -1002,8 +1028,7 @@ can support most writing systems covered by Unicode.")
        ;; FIXME: texlive-kpathsea doesn't come with the library and headers
        (list "--without-kpathsea")))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (home-page "https://lcdf.org/type/")
     (synopsis "Multiple font manipulation tools")
     (description "LCDF Typetools comprises several programs for manipulating
diff --git a/gnu/packages/forth.scm b/gnu/packages/forth.scm
index 4dcea19f4e..8cb6ac8391 100644
--- a/gnu/packages/forth.scm
+++ b/gnu/packages/forth.scm
@@ -49,7 +49,7 @@
                (install-file "gforth.el" emacs-sitedir)
                #t))))))
     (native-inputs
-     `(("m4" ,m4)))
+     (list m4))
     (synopsis "Forth interpreter")
     (description
      "Gforth is a fast and portable implementation of the ANSI Forth language.
diff --git a/gnu/packages/fpga.scm b/gnu/packages/fpga.scm
index 40cf9cc427..3b2938aff0 100644
--- a/gnu/packages/fpga.scm
+++ b/gnu/packages/fpga.scm
@@ -26,6 +26,7 @@
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
+  #:use-module (guix utils)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system python)
@@ -74,9 +75,9 @@
                 "1syygi1x40rdryih3galr4q8yg1w5bvdzl75hd27v1xq0l5bz3d0"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (inputs
-     `(("readline" ,readline)))
+     (list readline))
     (arguments
      `(#:tests? #f ; no check target
        #:phases
@@ -97,20 +98,20 @@ formal verification.")
 (define-public iverilog
   (package
     (name "iverilog")
-    (version "10.3")
+    (version "11.0")
     (source (origin
               (method url-fetch)
               (uri
-               (string-append "ftp://ftp.icarus.com/pub/eda/verilog/v10/"
+               (string-append "ftp://ftp.icarus.com/pub/eda/verilog/v11/"
                               "verilog-" version ".tar.gz"))
               (sha256
                (base32
-                "1vv88ckvfwq7mrysyjnilsrcrzm9d173kp9w5ivwh6rdw7klbgc6"))))
+                "1mamlrkpb2gb00g7xdddaknrvwi4jr4ng6cfjhwngzk3ddhqaiym"))))
     (build-system gnu-build-system)
+    (arguments
+     `(#:make-flags (list (string-append "CC=" ,(cc-for-target)))))
     (native-inputs
-     `(("flex" ,flex)
-       ("bison" ,bison)
-       ("ghostscript" ,ghostscript)))   ; ps2pdf
+     (list flex bison ghostscript))   ; ps2pdf
     (home-page "http://iverilog.icarus.com/")
     (synopsis "FPGA Verilog simulation and synthesis tool")
     (description "Icarus Verilog is a Verilog simulation and synthesis tool.
@@ -201,23 +202,23 @@ For synthesis, the compiler generates netlists in the desired format.")
                                                                 iverilog "\"")))
                      #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python" ,python)
-       ("bison" ,bison)
-       ("flex" ,flex)
-       ("gawk" , gawk) ; for the tests and "make" progress pretty-printing
-       ("tcl" ,tcl) ; tclsh for the tests
-       ("iverilog" ,iverilog))) ; for the tests
+     (list pkg-config
+           python
+           bison
+           flex
+           gawk ; for the tests and "make" progress pretty-printing
+           tcl ; tclsh for the tests
+           iverilog)) ; for the tests
     (inputs
-     `(("tcl" ,tcl)
-       ("readline" ,readline)
-       ("libffi" ,libffi)
-       ("graphviz" ,graphviz)
-       ("psmisc" ,psmisc)
-       ("xdot" ,xdot)
-       ("abc" ,abc)))
+     (list tcl
+           readline
+           libffi
+           graphviz
+           psmisc
+           xdot
+           abc))
     (propagated-inputs
-     `(("z3" ,z3))) ; should be in path for yosys-smtbmc
+     (list z3)) ; should be in path for yosys-smtbmc
     (home-page "http://www.clifford.at/yosys/")
     (synopsis "FPGA Verilog RTL synthesizer")
     (description "Yosys synthesizes Verilog-2005.")
@@ -258,7 +259,7 @@ For synthesis, the compiler generates netlists in the desired format.")
               #t))
           (delete 'configure))))
     (inputs
-     `(("libftdi" ,libftdi)))
+     (list libftdi))
     (native-inputs
      `(("python-3" ,python)
        ("pkg-config" ,pkg-config)))
@@ -285,12 +286,12 @@ Includes the actual FTDI connector.")
            (base32
             "1fmxsywgs45g88ra7ips5s2niiiwrkyxdcy742ws18dfk2y4vi9c"))))
       (inputs
-       `(("boost" ,boost)
-         ("eigen" ,eigen)
-         ("icestorm" ,icestorm)
-         ("python" ,python)
-         ("qtbase" ,qtbase-5)
-         ("yosys" ,yosys)))
+       (list boost
+             eigen
+             icestorm
+             python
+             qtbase-5
+             yosys))
       (build-system cmake-build-system)
       (arguments
        `(#:configure-flags `("-DARCH=ice40"
@@ -335,7 +336,7 @@ FOSS FPGA place and route tool.")
              (("#!/usr/bin/python") "#!/usr/bin/python2"))
            #t)))))
     (inputs
-     `(("icestorm" ,icestorm)))
+     (list icestorm))
     (native-inputs
      `(("git" ,git)  ; for determining its own version string
        ("yosys" ,yosys) ; for tests
@@ -349,7 +350,7 @@ FOSS FPGA place and route tool.")
 (define-public gtkwave
   (package
     (name "gtkwave")
-    (version "3.3.110")
+    (version "3.3.111")
     (source
      (origin
        (method url-fetch)
@@ -359,11 +360,10 @@ FOSS FPGA place and route tool.")
                   (string-append "http://gtkwave.sourceforge.net/"
                                  "gtkwave-" version ".tar.gz")))
        (sha256
-        (base32 "1hslmg39j9rays0cyash8zvrrbfyc55jdpq7hwc47ksr7bayvip4"))))
+        (base32 "15n2gv2hd7h23cci95ij7yr71fkxppb209sfdsmmngh3fik09rpn"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("gperf" ,gperf)
-       ("pkg-config" ,pkg-config)))
+     (list gperf pkg-config))
     (inputs
      `(("tcl" ,tcl)
        ("tk" ,tk)
@@ -400,7 +400,7 @@ simulator trace files (@dfn{FST}).")
         (base32 "1kq11if64zj84gv4w1q7l16fp17xjxl2wv5hc9dibr1z3m1gy67l"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-colorama" ,python-colorama)))
+     (list python-colorama))
     (home-page "https://m-labs.hk/gateware/migen/")
     (synopsis "Python toolbox for building complex digital hardware")
     (description
@@ -426,13 +426,13 @@ constructed by a Python program.")
     (home-page "http://www.myhdl.org/")
     (synopsis "Python as a Hardware Description Language")
     (description "This package provides a library to turn Python into
-a hardware description and verification language. ")
+a hardware description and verification language.")
     (license license:lgpl2.1+)))
 
 (define-public nvc
   (package
     (name "nvc")
-    (version "1.5.2")
+    (version "1.5.3")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -441,7 +441,7 @@ a hardware description and verification language. ")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1hjshyliaqi4vrw4q760rwmq6hvbpsvr2h4zl34k5j457004dy9l"))))
+                "1gjpwblp8isplyad3b6fl7cb5qv1rn3lf9qgf4l139y97cp2mm4s"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
@@ -452,16 +452,16 @@ a hardware description and verification language. ")
            (lambda _
              (delete-file "autogen.sh"))))))
     (native-inputs
-     `(("automake" ,automake)
-       ("autoconf" ,autoconf)
-       ("flex" ,flex)
-       ("gettext" ,gnu-gettext)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)
-       ("which" ,which)
-       ("check" ,check))) ; for the tests
+     (list automake
+           autoconf
+           flex
+           gnu-gettext
+           libtool
+           pkg-config
+           which
+           check)) ; for the tests
     (inputs
-     `(("llvm" ,llvm-9)))
+     (list llvm-9))
     (synopsis "VHDL compiler and simulator")
     (description "This package provides a VHDL compiler and simulator.")
     (home-page "https://github.com/nickg/nvc")
@@ -479,7 +479,7 @@ a hardware description and verification language. ")
              "systemc/systemc-" version ".tar.gz"))
        (sha256
         (base32 "0gvv3xmhiwx1izmzy06yslzqzh6ygrgmw53xqfmyvbz5a6ivk0ap"))))
-    (native-inputs `(("perl" ,perl)))
+    (native-inputs (list perl))
     (build-system gnu-build-system)
     (arguments '(#:configure-flags '("--enable-debug")))
     (home-page "https://accellera.org/community/systemc")
@@ -518,8 +518,7 @@ using different abstraction levels.")
        ("gettext" ,gettext-minimal)
        ("python" ,python)))
     (inputs
-     `(("perl" ,perl)
-       ("systemc" ,systemc)))
+     (list perl systemc))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags
diff --git a/gnu/packages/freedesktop.scm b/gnu/packages/freedesktop.scm
index caad0613ca..818d9966dd 100644
--- a/gnu/packages/freedesktop.scm
+++ b/gnu/packages/freedesktop.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
 ;;; Copyright © 2015, 2017 Andy Wingo <wingo@pobox.com>
-;;; Copyright © 2015, 2016, 2017, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2015-2017, 2019, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015, 2017, 2018, 2019, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015 David Hashe <david.hashe@dhashe.com>
 ;;; Copyright © 2016, 2017, 2019, 2021 Efraim Flashner <efraim@flashner.co.il>
@@ -23,7 +23,12 @@
 ;;; Copyright © 2020 Anders Thuné <asse.97@gmail.com>
 ;;; Copyright © 2020 Raghav Gururajan <raghavgururajan@disroot.org>
 ;;; Copyright © 2021 pineapples <guixuser6392@protonmail.com>
+;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
 ;;; Copyright © 2021 Robby Zambito <contact@robbyzambito.me>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
+;;; Copyright © 2021 John Kehayias <john.kehayias@protonmail.com>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2022 Daniel Meißner <daniel.meissner-i4k@ruhr-uni-bochum.de>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -45,6 +50,7 @@
   #:use-module (guix utils)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix gexp)
   #:use-module (guix git-download)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
@@ -59,6 +65,7 @@
   #:use-module (gnu packages base)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages boost)
+  #:use-module (gnu packages build-tools)
   #:use-module (gnu packages check)
   #:use-module (gnu packages cmake)
   #:use-module (gnu packages compression)
@@ -97,7 +104,9 @@
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-crypto)
   #:use-module (gnu packages python-xyz)
+  #:use-module (gnu packages qt)
   #:use-module (gnu packages rdesktop)
+  #:use-module (gnu packages rsync)
   #:use-module (gnu packages samba)
   #:use-module (gnu packages serialization)
   #:use-module (gnu packages sqlite)
@@ -184,13 +193,9 @@
        ("python" ,python-wrapper)
        ("xsltproc" ,libxslt)))
     (inputs
-     `(("libsoup" ,libsoup)
-       ("libstemmer" ,libstemmer)
-       ("libxml2" ,libxml2)
-       ("libyaml" ,libyaml)
-       ("lmdb" ,lmdb)))
+     (list libsoup-minimal-2 libstemmer libxml2 libyaml lmdb))
     (propagated-inputs
-     `(("glib" ,glib)))
+     (list glib))
     (synopsis "Tools and libraries to work with AppStream metadata")
     (description "AppStream is a cross-distribution effort for enhancing the way
 we interact with the software repositories provided by distributions by
@@ -284,15 +289,9 @@ application-centers for distributions.")
        ("python" ,python-wrapper)
        ("xsltproc" ,libxslt)))
     (inputs
-     `(("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("gupnp-igd" ,gupnp-igd)
-       ("libnice" ,libnice)))
+     (list glib gtk+ gupnp-igd libnice))
     (propagated-inputs
-     `(("gstreamer" ,gstreamer)
-       ("gst-plugins-bad" ,gst-plugins-bad)
-       ("gst-plugins-base" ,gst-plugins-base)
-       ("gst-plugins-good" ,gst-plugins-good)))
+     (list gstreamer gst-plugins-bad gst-plugins-base gst-plugins-good))
     (synopsis "The Farstream VVoIP framework")
     (description "Farstream is a collection of GStreamer modules and libraries
 for videoconferencing.")
@@ -331,8 +330,7 @@ for videoconferencing.")
        ("pkg-config" ,pkg-config)
        ("gtk-doc" ,gtk-doc/stable)))
     (inputs
-     `(("dbus" ,dbus)
-       ("glib" ,glib)))
+     (list dbus glib))
     (synopsis "Glib testing library")
     (description "Libglib-testing is a test library providing test harnesses and
 mock classes which complement the classes provided by GLib.  It is intended to
@@ -377,15 +375,15 @@ tests.")
        ("libxml2" ,libxml2)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("accountsservice" ,accountsservice)
-       ("appstream-glib" ,appstream-glib)
-       ("dbus" ,dbus)
-       ("flatpak" ,flatpak)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("libostree" ,libostree)
-       ("linux-pam" ,linux-pam)
-       ("polkit" ,polkit)))
+     (list accountsservice
+           appstream-glib
+           dbus
+           flatpak
+           glib
+           gtk+
+           libostree
+           linux-pam
+           polkit))
     (synopsis "Parental controls support")
     (description "MalContent implements parental controls support which can
 be used by applications to filter or limit the access of child accounts to
@@ -411,11 +409,7 @@ inappropriate content.")
              "1nai806smz3zcb2l5iny4x7li0fak0rzmjg6vlyhdqm8z25b166p"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("docbook-xsl" ,docbook-xsl)
-       ("docbook-xml" ,docbook-xml-4.1.2)
-       ("libxslt" ,libxslt)
-       ("w3m" ,w3m)
-       ("xmlto" ,xmlto)))
+     (list docbook-xsl docbook-xml-4.1.2 libxslt w3m xmlto))
     (inputs
      `(("awk" ,gawk)
        ("coreutils" ,coreutils)
@@ -487,14 +481,14 @@ freedesktop.org project.")
   ;; Updating this will rebuild over 700 packages through libinput-minimal.
   (package
     (name "libinput")
-    (version "1.16.4")
+    (version "1.19.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://freedesktop.org/software/libinput/"
                                   "libinput-" version ".tar.xz"))
               (sha256
                (base32
-                "0acywdjppj5i591l879bnqa9cs4vgdwnhilwk550x5x8sl33m4k5"))))
+                "10xqk05mkvsyxfxpn3vwkwb7j22d38wlbg1l1k37f6pfyc59zhqg"))))
     (build-system meson-build-system)
     (arguments
      `(#:configure-flags '("-Ddocumentation=false")
@@ -504,15 +498,14 @@ freedesktop.org project.")
        ;; Meson target anyway.
        #:build-type "release"))
     (native-inputs
-     `(("check" ,check)
-       ("pkg-config" ,pkg-config)))
+     (list check pkg-config))
     (inputs
-     `(("cairo" ,cairo)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("libevdev" ,libevdev)
-       ("libwacom" ,libwacom)
-       ("mtdev" ,mtdev)))
+     (list cairo
+           glib
+           gtk+
+           libevdev
+           libwacom
+           mtdev))
     (propagated-inputs
      `(;; libinput.h requires <libudev.h>, so propagate it.
        ("udev" ,eudev)))
@@ -562,9 +555,7 @@ other applications that need to directly deal with input devices.")
                (("^.*\\./configure.*") ""))
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (home-page "https://github.com/devnev/libxdg-basedir")
     (synopsis "Implementation of the XDG Base Directory specification")
     (description
@@ -575,7 +566,7 @@ the freedesktop.org XDG Base Directory specification.")
 (define-public elogind
   (package
     (name "elogind")
-    (version "243.7")
+    (version "246.10")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -584,47 +575,53 @@ the freedesktop.org XDG Base Directory specification.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1ccj3cbs9nsfg497wg195in1a7b9csm1jdm7z6q7vvx1ynpjxlxz"))))
+                "16045bhpwjq2nqgswln67ipg1zrz2djxlgkfngqng3jqpwagmnzq"))
+              (patches (search-patches
+                        "elogind-revert-polkit-detection.patch"))))
     (build-system meson-build-system)
     (arguments
      `(#:configure-flags
-       (let* ((out (assoc-ref %outputs "out"))
-              (sysconf (string-append out "/etc"))
-              (libexec (string-append out "/libexec/elogind"))
-              (dbuspolicy (string-append out "/etc/dbus-1/system.d"))
-              (shadow (assoc-ref %build-inputs "shadow"))
-              (shepherd (assoc-ref %build-inputs "shepherd"))
-              (halt-path (string-append shepherd "/sbin/halt"))
-              (kexec-path "")           ;not available in Guix yet
-              (nologin-path (string-append shadow "/sbin/nologin"))
-              (poweroff-path (string-append shepherd "/sbin/shutdown"))
-              (reboot-path (string-append shepherd "/sbin/reboot")))
-         (list
-          (string-append "-Drootprefix=" out)
-          (string-append "-Dsysconfdir=" sysconf)
-          (string-append "-Drootlibexecdir=" libexec)
-          (string-append "-Ddbuspolicydir=" dbuspolicy)
-          (string-append "-Dc_link_args=-Wl,-rpath=" libexec)
-          (string-append "-Dcpp_link_args=-Wl,-rpath=" libexec)
-          (string-append "-Dhalt-path=" halt-path)
-          (string-append "-Dkexec-path=" kexec-path)
-          (string-append "-Dpoweroff-path=" poweroff-path)
-          (string-append "-Dreboot-path=" reboot-path)
-          (string-append "-Dnologin-path=" nologin-path)
-          "-Dcgroup-controller=elogind"
-          "-Dman=true"
-          ;; Disable some tests.
-          "-Dslow-tests=false"))
+       ,#~(let* ((out #$output)
+                 (sysconf (string-append out "/etc"))
+                 (libexec (string-append out "/libexec/elogind"))
+                 (dbuspolicy (string-append out "/etc/dbus-1/system.d"))
+                 (kexec-tools #$(this-package-input "kexec-tools"))
+                 (shadow #$(this-package-input "shadow"))
+                 (shepherd #$(this-package-input "shepherd"))
+                 (halt-path (string-append shepherd "/sbin/halt"))
+                 (kexec-path (string-append kexec-tools "/sbin/kexec"))
+                 (nologin-path (string-append shadow "/sbin/nologin"))
+                 (poweroff-path (string-append shepherd "/sbin/shutdown"))
+                 (reboot-path (string-append shepherd "/sbin/reboot")))
+            (list
+             (string-append "-Drootprefix=" out)
+             (string-append "-Dsysconfdir=" sysconf)
+             (string-append "-Drootlibexecdir=" libexec)
+             (string-append "-Ddbuspolicydir=" dbuspolicy)
+             (string-append "-Dc_link_args=-Wl,-rpath=" libexec)
+             (string-append "-Dcpp_link_args=-Wl,-rpath=" libexec)
+             (string-append "-Dhalt-path=" halt-path)
+             (string-append "-Dkexec-path=" kexec-path)
+             (string-append "-Dpoweroff-path=" poweroff-path)
+             (string-append "-Dreboot-path=" reboot-path)
+             (string-append "-Dnologin-path=" nologin-path)
+             "-Dcgroup-controller=elogind"
+             "-Dman=true"
+             ;; Disable some tests.
+             "-Dslow-tests=false"))
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'fix-pkttyagent-path
            (lambda _
              (substitute* "meson.build"
                (("join_paths\\(bindir, 'pkttyagent'\\)")
-                "'\"/run/current-system/profile/bin/pkttyagent\"'"))
-             #t))
+                "'\"/run/current-system/profile/bin/pkttyagent\"'"))))
          (add-after 'unpack 'adjust-tests
            (lambda _
+             ;; Skip the following test, which depends on users such as 'root'
+             ;; existing in the build environment.
+             (invoke "sed" "/src\\/test\\/test-user-util.c/,+2s/^/#/g"
+                     "-i" "src/test/meson.build")
              ;; This test tries to copy some bytes from /usr/lib/os-release,
              ;; which does not exist in the build container.  Choose something
              ;; more likely to be available.
@@ -660,14 +657,12 @@ the freedesktop.org XDG Base Directory specification.")
              ;; logind system so that it can flicker the monitor, etc.
              ;; Just skip it until a more narrow selection can be made.
              (substitute* "src/libelogind/sd-login/test-login.c"
-               (("r = sd_pid_get_slice.*")
-                "return 77;"))
-             #t))
+               (("test_login\\(\\);")
+                "return 77;"))))
          (add-after 'unpack 'change-pid-file-path
            (lambda _
              (substitute* "src/login/elogind.c"
-               (("\"/run/elogind.pid\"") "\"/run/systemd/elogind.pid\""))
-             #t)))))
+               (("\"/run/elogind.pid\"") "\"/run/systemd/elogind.pid\"")))))))
     (native-inputs
      `(("docbook-xml" ,docbook-xml)
        ("docbook-xml-4.2" ,docbook-xml-4.2)
@@ -680,14 +675,15 @@ the freedesktop.org XDG Base Directory specification.")
        ("python" ,python)
        ("xsltproc" ,libxslt)))
     (inputs
-     `(("linux-pam" ,linux-pam)
-       ("libcap" ,libcap)
-       ("shadow" ,shadow)                    ;for 'nologin'
-       ("shepherd" ,shepherd)                ;for 'halt' and 'reboot', invoked
-                                             ;when pressing the power button
-       ("dbus" ,dbus)
-       ("eudev" ,eudev)
-       ("acl" ,acl)))           ;to add individual users to ACLs on /dev nodes
+     (list kexec-tools
+           linux-pam
+           libcap
+           shadow ;for 'nologin'
+           shepherd ;for 'halt' and 'reboot', invoked
+           ;when pressing the power button
+           dbus
+           eudev
+           acl))           ;to add individual users to ACLs on /dev nodes
     (home-page "https://github.com/elogind/elogind")
     (synopsis "User, seat, and session management service")
     (description "Elogind is the systemd project's \"logind\" service,
@@ -828,7 +824,8 @@ of a the system to know what users are logged in, and where.")
                                       (install-file map data))
                                     (find-files ".." "^(kbd-model-map|language-fallback-map)$"))
                           #t)))))))
-    (native-inputs (package-native-inputs elogind))
+    (native-inputs `(,@(package-native-inputs elogind)
+                     ("rsync" ,rsync)))
     (inputs `(("libmount" ,util-linux "lib")
               ("xkeyboard-config" ,xkeyboard-config)
               ("kbd" ,kbd)
@@ -859,10 +856,9 @@ with localed.  This package is extracted from the broader systemd package.")
     (arguments
      `(#:configure-flags '("-Dlogind=enabled")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("scdoc" ,scdoc)))
-    (inputs
-     `(("elogind" ,elogind)))
+     (list pkg-config scdoc))
+    (propagated-inputs
+     (list elogind))
     (home-page "https://sr.ht/~kennylevinsen/seatd")
     (synopsis "Seat management daemon and library")
     (description
@@ -898,11 +894,9 @@ allows applications to use whatever seat management is available.")
        ("python" ,python-wrapper)
        ("glib:bin" ,glib "bin")))
     (inputs
-     `(("glib" ,glib)
-       ("bash-completion" ,bash-completion)
-       ("polkit" ,polkit)))
+     (list glib bash-completion polkit))
     (propagated-inputs
-     `(("sqlite" ,sqlite)))
+     (list sqlite))
     (home-page "https://www.freedesktop.org/software/PackageKit/")
     (synopsis "API for package management, through D-Bus")
     (description
@@ -948,9 +942,7 @@ manager for the current system.")
              (invoke "nosetests" "-v"))))))
     (native-inputs
      ;; For tests.
-     `(("shared-mime-info" ,shared-mime-info)
-       ("hicolor-icon-theme" ,hicolor-icon-theme)
-       ("python-nose" ,python-nose)))
+     (list shared-mime-info hicolor-icon-theme python-nose))
     (home-page "https://www.freedesktop.org/wiki/Software/pyxdg")
     (synopsis "Implementations of freedesktop.org standards in Python")
     (description
@@ -964,43 +956,72 @@ Python.")
 (define-public wayland
   (package
     (name "wayland")
-    (version "1.18.0")
+    (version "1.19.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://wayland.freedesktop.org/releases/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0k995rn96xkplrapz5k648j651wc43kq817xk1x8280h16gsfxa6"))))
-    (build-system gnu-build-system)
+                "05bd2vphyx8qwa1mhsj1zdaiv4m4v94wrlssrn0lad8d601dkk5s"))))
+    (build-system meson-build-system)
+    (outputs '("out" "doc"))
     (arguments
-     `(#:parallel-tests? #f))
+     `(#:parallel-tests? #f
+        #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-docbook-xml
+           (lambda* (#:key native-inputs inputs #:allow-other-keys)
+             (with-directory-excursion "doc"
+               (substitute* (find-files "." "\\.xml$")
+                 (("http://www.oasis-open.org/docbook/xml/4\\.5/")
+                  (string-append (assoc-ref (or native-inputs inputs)
+                                            "docbook-xml")
+                                 "/xml/dtd/docbook/"))
+                 (("http://www.oasis-open.org/docbook/xml/4\\.2/")
+                  (string-append (assoc-ref (or native-inputs inputs)
+                                            "docbook-xml-4.2")
+                                 "/xml/dtd/docbook/"))))))
+         (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"))
+               (rename-file
+                (string-append out "/share/doc")
+                (string-append doc "/share/doc"))))))))
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("graphviz" ,graphviz)
+     `(("docbook-xml-4.2" ,docbook-xml-4.2)
+       ("docbook-xml" ,docbook-xml)
+       ("docbook-xsl" ,docbook-xsl)
+       ("dot" ,graphviz)
+       ("doxygen" ,doxygen)
        ("pkg-config" ,pkg-config)
+       ("python" ,python)
        ("xmlto" ,xmlto)
-       ("xsltproc" ,libxslt)))
+       ("xsltproc" ,libxslt)
+       ,@(if (%current-target-system)
+             `(("pkg-config-for-build" ,pkg-config-for-build)
+               ("wayland" ,this-package)) ; for wayland-scanner
+             '())))
     (inputs
-     `(("docbook-xml" ,docbook-xml)
-       ("docbook-xsl" ,docbook-xsl)
-       ("expat" ,expat)
-       ("libffi" ,libffi)
-       ("libxml2" ,libxml2))) ; for XML_CATALOG_FILES
+     (list expat libxml2))           ; for XML_CATALOG_FILES
+    (propagated-inputs
+     (list libffi))
     (home-page "https://wayland.freedesktop.org/")
-    (synopsis "Display server protocol")
-    (description
-     "Wayland is a protocol for a compositor to talk to its clients as well as
-a C library implementation of that protocol.  The compositor can be a standalone
-display server running on Linux kernel modesetting and evdev input devices, an X
-application, or a wayland client itself.  The clients can be traditional
-applications, X servers (rootless or fullscreen) or other display servers.")
-    (license license:x11)))
+    (synopsis "Core Wayland window system code and protocol")
+    (description "Wayland is a project to define a protocol for a compositor to
+talk to its clients as well as a library implementation of the protocol.  The
+compositor can be a standalone display server running on Linux kernel
+modesetting and evdev input devices, an X application, or a wayland client
+itself.  The clients can be traditional applications, X servers (rootless or
+fullscreen) or other display servers.")
+    (license license:expat)))
 
 (define-public wayland-protocols
   (package
     (name "wayland-protocols")
-    (version "1.20")
+    (version "1.23")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1008,14 +1029,17 @@ applications, X servers (rootless or fullscreen) or other display servers.")
                     "wayland-protocols-" version ".tar.xz"))
               (sha256
                (base32
-                "1rsdgvkkvxs3cjhpl6agvbkm53vm7k8rg127j9y2vn33m2hvg0lp"))))
-    (build-system gnu-build-system)
+                "0xizccackgwszjhlq7jjiv2z2gwppljx0w32ga91bxlnby8z22kc"))))
+    (build-system meson-build-system)
     (inputs
-     `(("wayland" ,wayland)))
+     (list wayland))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config python))
     (synopsis "Wayland protocols")
-    (description "This package contains XML definitions of the Wayland protocols.")
+    (description "Wayland-Protocols contains Wayland protocols that add
+functionality not available in the Wayland core protocol.  Such protocols either
+add completely new functionality, or extend the functionality of some other
+protocol either in Wayland core, or some other protocol in wayland-protocols.")
     (home-page "https://wayland.freedesktop.org")
     (license license:expat)))
 
@@ -1035,13 +1059,12 @@ applications, X servers (rootless or fullscreen) or other display servers.")
     (arguments
      `(#:tests? #f))                    ; no tests
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("mesa" ,mesa)
-       ("pugixml" ,pugixml)))
+     (list mesa pugixml))
     (propagated-inputs
-     `(;; In Requires of the .pc files.
-       ("wayland" ,wayland)))
+     (list ;; In Requires of the .pc files.
+           wayland))
     (synopsis "Wayland C++ bindings")
     (description
      "This package provides C++ bindings for the Wayland display protocol.")
@@ -1061,9 +1084,7 @@ applications, X servers (rootless or fullscreen) or other display servers.")
                 "1zlql0xgiqc3pvgbpnnvj4xvpd91pwva8qf83xfb23if377ddxaw"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("mscgen" ,mscgen)
-       ("pkg-config" ,pkg-config)
-       ("xorg-server" ,xorg-server)))
+     (list mscgen pkg-config xorg-server))
     (inputs
      `(("cairo" ,cairo-xcb)
        ("colord" ,colord)
@@ -1094,9 +1115,7 @@ applications, X servers (rootless or fullscreen) or other display servers.")
        ("wayland-protocols" ,wayland-protocols)
        ("xorg-server-xwayland" ,xorg-server-xwayland)))
     (propagated-inputs
-     `(("libxkbcommon" ,libxkbcommon)
-       ("pixman" ,pixman)
-       ("wayland" ,wayland)))
+     (list libxkbcommon pixman wayland))
     (arguments
      `(#:configure-flags
        (list
@@ -1136,8 +1155,7 @@ applications, X servers (rootless or fullscreen) or other display servers.")
          (add-before 'check 'start-xorg-server
            (lambda* (#:key inputs #:allow-other-keys)
              ;; The test suite requires a running X server.
-             (system (string-append (assoc-ref inputs "xorg-server")
-                                    "/bin/Xvfb :1 &"))
+             (system "Xvfb :1 &")
              (setenv "DISPLAY" ":1")
              #t)))))
     (home-page "https://wayland.freedesktop.org")
@@ -1173,12 +1191,9 @@ multiplexer to the KMS/DRM Linux kernel devices.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("scdoc" ,scdoc)))
+     (list pkg-config scdoc))
     (inputs
-     `(("libxkbcommon" ,libxkbcommon)
-       ("wayland" ,wayland)
-       ("wayland-protocols" ,wayland-protocols)))
+     (list libxkbcommon wayland wayland-protocols))
     (home-page "https://git.sr.ht/~sircmpwn/wev")
     (synopsis "Wayland event viewer")
     (description "Wev is a tool that opens a window, printing all events
@@ -1214,10 +1229,9 @@ XEv.")
                                          "/lib/libexempi.a"))
              #t)))))
     (native-inputs
-     `(("boost" ,boost))) ; tests
+     (list boost)) ; tests
     (inputs
-     `(("expat" ,expat)
-       ("zlib" ,zlib)))
+     (list expat zlib))
     (home-page "https://libopenraw.freedesktop.org/exempi/")
     (synopsis "XMP metadata handling library")
     (description "Exempi is an implementation of the Extensible Metadata
@@ -1238,9 +1252,9 @@ formats.")
                 "138gvgdwk6h4ljrjsr09pxk1nrki4b155hqdzyr8mlk3bwsfmw31"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("udev" ,eudev)))
+     (list eudev))
     (home-page "http://0pointer.de/blog/projects/being-smart.html")
     (synopsis "ATA S.M.A.R.T. reading and parsing library")
     (description
@@ -1272,15 +1286,15 @@ Analysis and Reporting Technology) functionality.")
        ("pkg-config" ,pkg-config)
        ("xsltproc" ,libxslt)))
     (propagated-inputs
-     `(("glib" ,glib))) ; required by udisks2.pc
+     (list glib)) ; required by udisks2.pc
     (inputs
-     `(("acl" ,acl)
-       ("cryptsetup" ,cryptsetup)
-       ("libatasmart" ,libatasmart)
-       ("libblockdev" ,libblockdev)
-       ("libgudev" ,libgudev)
-       ("polkit" ,polkit)
-       ("util-linux" ,util-linux)))
+     (list acl
+           cryptsetup
+           libatasmart
+           libblockdev
+           libgudev
+           polkit
+           util-linux))
     (outputs '("out"
                "doc"))                            ;5 MiB of gtk-doc HTML
     (arguments
@@ -1350,57 +1364,59 @@ message bus.")
 (define-public accountsservice
   (package
     (name "accountsservice")
-    (version "0.6.50")
+    (version "0.6.55")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://www.freedesktop.org/software/"
-                           "accountsservice/accountsservice-" version ".tar.xz"))
+                           "accountsservice/accountsservice-"
+                           version ".tar.xz"))
        (sha256
-        (base32 "0jn7vg1z4vxnna0hl33hbcb4bb3zpilxc2vyclh24vx4vvsjhn83"))))
-    (build-system gnu-build-system)
+        (base32 "16wwd633jak9ajyr1f1h047rmd09fhf3kzjz6g5xjsz0lwcj8azz"))))
+    (build-system meson-build-system)
     (arguments
-     '(#:tests? #f ; XXX: tests require DocBook 4.1.2
+     `(#:tests? #f ; XXX: tests require DocBook 4.1.2
        #:configure-flags
        '("--localstatedir=/var"
-         "--disable-systemd"
-         "--enable-elogind")
+         "-Dsystemdsystemunitdir=/tmp/empty"
+         "-Dsystemd=false"
+         "-Delogind=true")
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-/bin/cat
            (lambda _
              (substitute* "src/user.c"
-               (("/bin/cat") (which "cat")))
-             #t))
+               (("/bin/cat") (which "cat")))))
          (add-before
           'configure 'pre-configure
           (lambda* (#:key inputs #:allow-other-keys)
-            ;; Don't try to create /var/lib/AccountsService.
-            (substitute* "src/Makefile.in"
-              (("\\$\\(MKDIR_P\\).*/lib/AccountsService.*") "true"))
+            (substitute* "meson_post_install.py"
+              (("in dst_dirs") "in []"))
             (let ((shadow (assoc-ref inputs "shadow")))
               (substitute* '("src/user.c" "src/daemon.c")
-                (("/usr/sbin/usermod") (string-append shadow "/sbin/usermod"))
-                (("/usr/sbin/useradd") (string-append shadow "/sbin/useradd"))
-                (("/usr/sbin/userdel") (string-append shadow "/sbin/userdel"))
-                (("/usr/bin/passwd")   (string-append shadow "/bin/passwd"))
-                (("/usr/bin/chage")    (string-append shadow "/bin/chage"))))
-            #t)))))
+                (("/usr/sbin/usermod")
+                 (string-append shadow "/sbin/usermod"))
+                (("/usr/sbin/useradd")
+                 (string-append shadow "/sbin/useradd"))
+                (("/usr/sbin/userdel")
+                 (string-append shadow "/sbin/userdel"))
+                (("/usr/bin/passwd")
+                 (string-append shadow "/bin/passwd"))
+                (("/usr/bin/chage")
+                 (string-append shadow "/bin/chage")))))))))
     (native-inputs
      `(("glib:bin" ,glib "bin") ; for gdbus-codegen, etc.
        ("gobject-introspection" ,gobject-introspection)
        ("intltool" ,intltool)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("elogind" ,elogind)
-       ("polkit" ,polkit)
-       ("shadow" ,shadow)))
+     (list dbus elogind polkit shadow))
     (home-page "https://www.freedesktop.org/wiki/Software/AccountsService/")
     (synopsis "D-Bus interface for user account query and manipulation")
     (description
-     "The AccountService project provides a set of D-Bus interfaces for querying
-and manipulating user account information and an implementation of these
-interfaces, based on the useradd, usermod and userdel commands.")
+     "The AccountService project provides a set of D-Bus interfaces for
+querying and manipulating user account information and an implementation of
+these interfaces, based on the useradd, usermod and userdel commands.")
     (license license:gpl3+)))
 
 (define-public libmbim
@@ -1417,13 +1433,12 @@ interfaces, based on the useradd, usermod and userdel commands.")
                 "16q550sy84izi5ic3sbbhjnnka2fwhj8vvdrirpn9xspbsgbc3sm"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("glib:bin" ,glib "bin") ; for glib-mkenums
-       ("pkg-config" ,pkg-config)
-       ("python" ,python-wrapper)))
+     (list `(,glib "bin") ; for glib-mkenums
+           pkg-config python-wrapper))
     (propagated-inputs
-     `(("glib" ,glib))) ; required by mbim-glib.pc
+     (list glib)) ; required by mbim-glib.pc
     (inputs
-     `(("libgudev" ,libgudev)))
+     (list libgudev))
     (synopsis "Library to communicate with MBIM-powered modems")
     (home-page "https://www.freedesktop.org/wiki/Software/libmbim/")
     (description
@@ -1448,13 +1463,12 @@ which speak the Mobile Interface Broadband Model (MBIM) protocol.")
                 "0zshxqbm9ldybgrzh7pjmwmfjvvvfd0xh8qhgl8xiqdb9ply73r0"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libgudev" ,libgudev)))
+     (list libgudev))
     (native-inputs
-     `(("glib:bin" ,glib "bin") ; for glib-mkenums
-       ("pkg-config" ,pkg-config)
-       ("python" ,python-wrapper)))
+     (list `(,glib "bin") ; for glib-mkenums
+           pkg-config python-wrapper))
     (propagated-inputs
-     `(("glib" ,glib))) ; required by qmi-glib.pc
+     (list glib)) ; required by qmi-glib.pc
     (synopsis "Library to communicate with QMI-powered modems")
     (home-page "https://www.freedesktop.org/wiki/Software/libqmi/")
     (description
@@ -1490,12 +1504,9 @@ which speak the Qualcomm MSM Interface (QMI) protocol.")
        ;; For testing.
        ("dbus" ,dbus)))
     (propagated-inputs
-     `(("glib" ,glib))) ; required by mm-glib.pc
+     (list glib)) ; required by mm-glib.pc
     (inputs
-     `(("libgudev" ,libgudev)
-       ("libmbim" ,libmbim)
-       ("libqmi" ,libqmi)
-       ("polkit" ,polkit)))
+     (list libgudev libmbim libqmi polkit))
     (synopsis "Mobile broadband modems manager")
     (home-page "https://www.freedesktop.org/wiki/Software/ModemManager/")
     (description
@@ -1535,9 +1546,7 @@ modems and setup connections with them.")
        ("xsltproc" ,libxslt)))
     (propagated-inputs
      ;; telepathy-logger-0.2.pc refers to all these.
-     `(("libxml2" ,libxml2)
-       ("sqlite" ,sqlite)
-       ("telepathy-glib" ,telepathy-glib)))
+     (list libxml2 sqlite telepathy-glib))
     (synopsis "Telepathy logger library")
     (home-page "https://telepathy.freedesktop.org/")
     (description
@@ -1561,16 +1570,11 @@ different sorts of messages in different formats.")
         (base32 "1pfw4g2cicw3ykxhsy743r0fc1yqbdrqxh2c5ha6am19dajcr95l"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
-     `(("xsltproc" ,libxslt)
-       ("python" ,python-2)
-       ("python-dbus" ,python2-dbus)))
+     (list libxslt python-2 python2-dbus))
     (propagated-inputs
-     `(("telepathy-glib" ,telepathy-glib)))
+     (list telepathy-glib))
     (home-page "https://telepathy.freedesktop.org/")
     (synopsis "Telepathy IRC connection manager")
     (description
@@ -1582,7 +1586,7 @@ messaging clients such as Empathy, GNOME Shell or KDE Telepathy.")
 (define-public telepathy-mission-control
   (package
     (name "telepathy-mission-control")
-    (version "5.16.5")
+    (version "5.16.6")
     (source
      (origin
        (method url-fetch)
@@ -1590,19 +1594,15 @@ messaging clients such as Empathy, GNOME Shell or KDE Telepathy.")
                            "telepathy-mission-control/"
                            "telepathy-mission-control-" version ".tar.gz"))
        (sha256
-        (base32 "00xxv38cfdirnfvgyd56m60j0nkmsv5fz6p2ydyzsychicxl6ssc"))))
+        (base32 "0ibs575pfr0wmhfcw6ln6iz7gw2y45l3bah11rksf6g9jlwsxy1d"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("glib:bin" ,glib "bin") ; for glib-compile-schemas, etc.
-       ("pkg-config" ,pkg-config)))
+     (list `(,glib "bin") ; for glib-compile-schemas, etc.
+           pkg-config))
     (inputs
-     `(("dconf" ,dconf)
-       ("gtk-doc" ,gtk-doc)
-       ("libgnome-keyring" ,libgnome-keyring)
-       ("python" ,python-2)
-       ("xsltproc" ,libxslt)))
+     (list dconf gtk-doc libgnome-keyring python-2 libxslt))
     (propagated-inputs
-     `(("telepathy-glib" ,telepathy-glib)))
+     (list telepathy-glib))
     (home-page "https://telepathy.freedesktop.org/wiki/Components/Mission_Control/")
     (synopsis "Telepathy real-time communication framework management daemon")
     (description
@@ -1625,14 +1625,10 @@ share connections to real-time communication services without conflicting.")
     (build-system gnu-build-system)
     (arguments '(#:tests? #f)) ; require the colord system service
     (native-inputs
-     `(("gobject-introspection" ,gobject-introspection)
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)
-       ("vala" ,vala)))
+     (list gobject-introspection intltool pkg-config vala))
     (propagated-inputs
      ;; colord-gtk.pc refers to all these.
-     `(("colord" ,colord)
-       ("gtk+" ,gtk+)))
+     (list colord gtk+))
     (synopsis "GTK integration for libcolord")
     (home-page "https://www.freedesktop.org/software/colord/")
     (description
@@ -1644,7 +1640,7 @@ wish to perform colour calibration.")
 (define-public libfprint
   (package
     (name "libfprint")
-    (version "1.90.7")
+    (version "1.94.2")
     (source
      (origin
        (method git-fetch)
@@ -1653,26 +1649,26 @@ wish to perform colour calibration.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "00pmdpxxjj4sh8qjq9ch3pylgg9w019rg1bbaw53a4wr637rrz43"))))
+        (base32 "0y3wz5hlxpnvqj67bihvzfi4dwx2m2nx9byppf4jjd80x0j2630m"))))
     (build-system meson-build-system)
     (arguments
-     '(#:configure-flags
-       (list (string-append "-Dudev_rules_dir=" (assoc-ref %outputs "out")
-                            "/lib/udev/rules.d"))))
+     (list #:configure-flags
+           #~(list (string-append "-Dudev_hwdb_dir=" #$output
+                                  "/lib/udev/hwdb.d")
+                   (string-append "-Dudev_rules_dir=" #$output
+                                  "/lib/udev/rules.d"))))
     (native-inputs
-     `(("eudev" ,eudev)
-       ("glib:bin" ,glib "bin")         ; for {glib-,}mkenums
-       ("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc/stable)             ; for 88 KiB of API documentation
-       ("pkg-config" ,pkg-config)))
+     (list `(,glib "bin")               ; for {glib-,}mkenums
+           gobject-introspection
+           gtk-doc/stable               ; for 88 KiB of API documentation
+           pkg-config))
     (inputs
-     `(("glib" ,glib)
-       ("gusb" ,gusb)
-       ("nss" ,nss)                     ; for the URU4x00 driver
-
-       ;; Replacing this with cairo works but just results in a reference
-       ;; (only) to pixman in the end.
-       ("pixman" ,pixman)))
+     (list gusb
+           libgudev
+           nss                          ; for the URU4x00 driver
+           ;; Replacing this with cairo works but just results in a reference
+           ;; (only) to pixman in the end.
+           pixman))
     (home-page "https://fprint.freedesktop.org/")
     (synopsis "Library to access fingerprint readers")
     (description
@@ -1684,68 +1680,56 @@ software.")
 (define-public fprintd
   (package
     (name "fprintd")
-    (version "1.90.1")
+    (version "1.94.1")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
              (url "https://gitlab.freedesktop.org/libfprint/fprintd")
-             (commit version)))
+             (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0mbzk263x7f58i9cxhs44mrngs7zw5wkm62j5r6xlcidhmfn03cg"))))
+        (base32 "015j8ikyv48qz8vn6kfvkwwg5ydzppl1lzf7vkali9ymywywfxsw"))))
     (build-system meson-build-system)
     (arguments
-     `(#:configure-flags
-       (list "-Dsystemd_system_unit_dir=/tmp"
-             (string-append "-Ddbus_service_dir=" (assoc-ref %outputs "out")
-                            "/share/dbus-1/system-services")
-             (string-append "-Dpam_modules_dir=" (assoc-ref %outputs "out")
-                            "/lib/security"))
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'patch-output-directories
-           ;; Install files to our output, not that of the ‘owner’ package.
-           ;; These are not exposed as Meson options and must be patched.
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out")))
-               (substitute* "meson.build"
-                 (("(dbus_interfaces_dir = ).*" _ set)
-                  (string-append set "'" out "/share/dbus-1/interfaces'\n"))
-                 (("(polkit_policy_directory = ).*" _ set)
-                  (string-append set "'" out "/share/polkit-1/actions/'\n"))
-                 (("(dbus_data_dir = ).*" _ set)
-                  (string-append set "get_option('prefix')"
-                                 " / get_option('datadir')\n")))
-               #t)))
-         (add-before 'configure 'patch-mistake
-           (lambda _
-             (substitute* "meson.build"
-               (("(storage_path = )(get_option\\('prefix'\\))(.*)"
-                 _ set mistake value)
-                (string-append set "''" value "\n")))
-             #t))
-         (add-before 'configure 'patch-systemd-dependencies
-           (lambda _
-             (substitute* "meson.build"
-               (("'(libsystemd|systemd)'") "'libelogind'"))
-             #t))
-         (add-before 'configure 'ignore-test-dependencies
-           (lambda _
-             (substitute* "meson.build"
-               (("pam_wrapper_dep .*") "")
-               ((".*'(cairo|dbus|dbusmock|gi|pypamtest)': .*,.*") ""))
-             #t))
-         (add-before 'install 'no-polkit-magic
-           ;; Meson ‘magically’ invokes pkexec, which fails (not setuid).
-           (lambda _
-             (setenv "PKEXEC_UID" "something")
-             #t)))
-       #:tests? #f))                    ; XXX depend on unpackaged packages
+     (list #:configure-flags
+           #~(list "-Dsystemd_system_unit_dir=/tmp"
+                   (string-append "-Ddbus_service_dir=" #$output
+                                  "/share/dbus-1/system-services")
+                   (string-append "-Dpam_modules_dir=" #$output
+                                  "/lib/security"))
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-before 'configure 'patch-output-directories
+                 ;; Install files to our output, not that of the ‘owner’ package.
+                 ;; These are not exposed as Meson options and must be patched.
+                 (lambda* (#:key outputs #:allow-other-keys)
+                   (let ((out (assoc-ref outputs "out")))
+                     (substitute* "meson.build"
+                       (("(dbus_interfaces_dir = ).*" _ set)
+                        (string-append set "'" out "/share/dbus-1/interfaces'\n"))
+                       (("(polkit_policy_directory = ).*" _ set)
+                        (string-append set "'" out "/share/polkit-1/actions/'\n"))
+                       (("(dbus_data_dir = ).*" _ set)
+                        (string-append set "get_option('prefix')"
+                                       " / get_option('datadir')\n"))))))
+               (add-before 'configure 'patch-systemd-dependencies
+                 (lambda _
+                   (substitute* "meson.build"
+                     (("(dependency\\(')(libsystemd|systemd)" _ prefix)
+                      (string-append prefix "libelogind")))))
+               (add-before 'configure 'ignore-test-dependencies
+                 (lambda _
+                   (substitute* "meson.build"
+                     ((".*gi\\.repository\\.FPrint.*") "")
+                     (("pam_wrapper_dep .*") "")
+                     ((".*'(cairo|dbus|dbusmock|gi|pypamtest)': .*,.*") ""))
+                   (substitute* "tests/pam/meson.build"
+                     ((".*pam_wrapper.*") "")))))
+           #:tests? #f))                    ; XXX depend on unpackaged packages
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("glib:bin" ,glib "bin")         ; for glib-genmarshal
-       ("libxslt" ,libxslt)             ; for xsltproc
        ("perl" ,perl)                   ; for pod2man
        ("pkg-config" ,pkg-config)))
        ;; For tests.
@@ -1756,17 +1740,11 @@ software.")
        ;;("python-pygobject" ,python-pygobject)
        ;;("python-pypamtest" ,python-pypamtest)
     (inputs
-     `(("dbus-glib" ,dbus-glib)
-       ("elogind" ,elogind)
-       ("libfprint" ,libfprint)
-       ("linux-pam" ,linux-pam)
-       ("polkit" ,polkit)
-
-       ;; XXX These are in libfprint's Requires.private.  Meson refuses to grant
-       ;; the ‘libfprint-2’ dependency if they are not provided here.
-       ("gusb" ,gusb)
-       ("nss" ,nss)
-       ("pixman" ,pixman)))
+     (list dbus-glib
+           elogind
+           libfprint
+           linux-pam
+           polkit))
     (home-page "https://fprint.freedesktop.org/")
     (synopsis "D-Bus daemon that exposes fingerprint reader functionality")
     (description
@@ -1790,11 +1768,9 @@ to applications simultaneously competing for fingerprint readers.")
                 "02bkfi6fyk4c0gh2avd897882ww5zl7qg7bzzf28qb57kvkvsvdj"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config))
     (inputs
-     `(("glib" ,glib)))
+     (list glib))
     (home-page "https://www.freedesktop.org/wiki/Software/desktop-file-utils/")
     (synopsis "Utilities for working with desktop entries")
     (description
@@ -1869,13 +1845,10 @@ manually by a user.")
          "1qq5ag9zffx8zc5i9b4z03ar80pqj4drgk3vjdlyfapjwb9zqrf0"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-file-which" ,perl-file-which)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)
-       ("xdg-user-dirs" ,xdg-user-dirs)))
+     (list perl-module-build perl-file-which perl-test-pod
+           perl-test-pod-coverage xdg-user-dirs))
     (propagated-inputs
-     `(("perl-ipc-system-simple" ,perl-ipc-system-simple)))
+     (list perl-ipc-system-simple))
     (home-page "https://metacpan.org/release/File-BaseDir")
     (synopsis "Use the Freedesktop.org base directory specification")
     (description
@@ -1899,11 +1872,9 @@ application data and cache data.")
          "1f1maqix2kbfg2rf008m7mqnvv6nvcf9y6pcgdv2kxp2vbih370n"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+     (list perl-test-pod perl-test-pod-coverage))
     (propagated-inputs
-     `(("perl-file-basedir" ,perl-file-basedir)
-       ("perl-uri" ,perl-uri)))
+     (list perl-file-basedir perl-uri))
     (home-page "https://metacpan.org/release/File-DesktopEntry")
     (synopsis "Handle @file{.desktop} files")
     (description
@@ -1928,8 +1899,7 @@ applications define in those files.")
     ;; If the tests are fixed, add perl-test-pod, perl-test-pod-coverage, and
     ;; perl-test-tiny as native-inputs.
     (propagated-inputs
-     `(("shared-mime-info" ,shared-mime-info)
-       ("perl-file-desktopentry" ,perl-file-desktopentry)))
+     (list shared-mime-info perl-file-desktopentry))
     (arguments
      ;; Some tests fail due to requiring the mimetype of perl files to be
      ;; text/plain when they are actually application/x-perl.
@@ -1998,7 +1968,7 @@ encoding names are iconv-compatible.")
           "1bqfz85cd51sw0bvhvdq9ikccxi2ld7g5jpni4jkq1a5clrvca64"))))
   (build-system python-build-system)
   (inputs
-   `(("uchardet" ,uchardet)))
+   (list 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
@@ -2008,33 +1978,24 @@ Python, that binds to the C library @code{uchardet} to increase performance.")
 (define-public udiskie
   (package
     (name "udiskie")
-    (version "2.1.0")
+    (version "2.3.3")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "udiskie" version))
        (sha256
         (base32
-         "0smib8vbs9q37n7ynhzyw97q16fgdkcdw7fw69lci0xvyq00v1dz"))
-       ;; Remove support for the libappindicator library of the
-       ;; Unity desktop environment which is not in Guix.
-       (patches (search-patches "udiskie-no-appindicator.patch"))))
+         "0sagdmsc5km32h3jvgj843p8bicrrgfz26qhl04ibxmas6725zr0"))))
     (build-system python-build-system)
     (native-inputs
      `(("asciidoc" ,asciidoc)
        ("gettext" ,gettext-minimal)
        ("gobject-introspection" ,gobject-introspection)))
     (inputs
-     `(("gobject-introspection" ,gobject-introspection)
-       ("gtk+" ,gtk+)
-       ("libnotify" ,libnotify)
-       ("udisks" ,udisks)))
+     (list gobject-introspection gtk+ libappindicator libnotify udisks))
     (propagated-inputs
-     `(("python-docopt" ,python-docopt)
-       ("python-pygobject" ,python-pygobject)
-       ("python-keyutils" ,python-keyutils)
-       ("python-pyxdg" ,python-pyxdg)
-       ("python-pyyaml" ,python-pyyaml)))
+     (list python-docopt python-pygobject python-keyutils python-pyxdg
+           python-pyyaml))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -2116,11 +2077,7 @@ Its features include:
                      (string-append (assoc-ref inputs "docbook-xml")
                                     "/xml/dtd/docbook/catalog.xml")))))))
     (inputs
-     `(("glib" ,glib)
-       ("pango" ,pango)
-       ("libdrm" ,libdrm)
-       ("libpng" ,libpng)
-       ("eudev" ,eudev)))
+     (list glib pango libdrm libpng eudev))
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("pkg-config" ,pkg-config)
@@ -2157,8 +2114,7 @@ useful with system integration.")
        ("pkg-config" ,pkg-config)
        ("xvfb" ,xorg-server-for-tests)))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("glib" ,glib)))
+     (list gtk+ glib))
     (arguments
      `(#:make-flags '("CFLAGS=-Wno-error")
        #:phases
@@ -2192,6 +2148,13 @@ useful with system integration.")
              "https://launchpad.net/libappindicator/"
              (version-major+minor version) "/" version
              "/+download/libappindicator-" version ".tar.gz"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           ;; Fix 'multiple definitions' error from GCC 10
+           (substitute* "bindings/python/appindicatormodule.c"
+             (("^#include <pygobject.h>" all)
+              (string-append "#define NO_IMPORT_PYGOBJECT\n" all)))))
        (sha256
         (base32
          "17xlqd60v0zllrxp8bgq3k5a1jkj0svkqn8rzllcyjh8k0gpr46m"))))
@@ -2211,8 +2174,7 @@ useful with system integration.")
        ;; ("mono" ,mono) ; requires non-packaged gapi
        ("vala" ,vala)))
     (propagated-inputs
-     `(("gtk+" ,gtk+)
-       ("libdbusmenu" ,libdbusmenu)))
+     (list gtk+ libdbusmenu))
     (arguments
      ;; FIXME: do not hardcode gtk version
      `(#:configure-flags '("--with-gtk=3")
@@ -2252,62 +2214,56 @@ fallback to generic Systray support if none of those are available.")
     (license license:lgpl2.1+)))
 
 (define-public libportal
-  (let ((commit "bff3289")
-        (revision "1"))
-    (package
-      (name "libportal")
-      (version (git-version "0.3" revision commit))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://github.com/flatpak/libportal")
-                      (commit commit)))
-                (file-name (git-file-name name version))
-                (sha256
-                 (base32
-                  "104b91qircr1i9jkmm6f725awywky52aimrki303kiaadn2v8b5i"))))
-      (build-system meson-build-system)
-      (arguments
-       `(#: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"))
-                     (html "/share/gtk-doc"))
-                 (copy-recursively (string-append out html)
-                                   (string-append doc html))
-                 (delete-file-recursively (string-append out html))
-                 #t))))))
-      (native-inputs
-       `(("pkg-config" ,pkg-config)
-         ("gtk-doc" ,gtk-doc/stable)
-         ("docbook-xsl" ,docbook-xsl)
-         ("docbook-xml" ,docbook-xml)
-         ("libxml2" ,libxml2)
-         ("glib:bin" ,glib "bin")))
-      (propagated-inputs
-       `(("glib" ,glib)))
-      (outputs '("out" "doc"))
-      (home-page "https://github.com/flatpak/libportal")
-      (synopsis "Flatpak portal library")
-      (description
-       "libportal provides GIO-style async APIs for most Flatpak portals.")
-      (license license:lgpl2.1+))))
-
-(define-public xdg-desktop-portal
   (package
-    (name "xdg-desktop-portal")
-    (version "1.8.1")
+    (name "libportal")
+    (version "0.5")
     (source (origin
               (method git-fetch)
               (uri (git-reference
-                     (url "https://github.com/flatpak/xdg-desktop-portal")
-                     (commit version)))
+                    (url "https://github.com/flatpak/libportal")
+                    (commit version)))
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0pq0kmvzk56my396vh97pzw4wizwmlmzvv2kr2xv047x3044mr5n"))))
+                "0i4v0wjyiryg7jq9hp9iaplqyhwj1cqy5891s4jfldcdzvcwxwx0"))))
+    (build-system meson-build-system)
+    (arguments
+     `(#:configure-flags
+       (list "-Dbackends=gtk4,gtk3,qt5"
+             "-Ddocs=false")))          ; requires unpackaged gi-docgen
+    (native-inputs
+     (list pkg-config
+           docbook-xsl
+           docbook-xml
+           `(,glib "bin")
+           gobject-introspection
+           libxml2
+           vala))
+    (inputs
+     (list gtk
+           gtk+
+           qtbase-5
+           qtx11extras))
+    (propagated-inputs
+     (list glib))
+    (home-page "https://github.com/flatpak/libportal")
+    (synopsis "Flatpak portal library")
+    (description
+     "libportal provides GIO-style async APIs for most Flatpak portals.")
+    (license license:lgpl2.1+)))
+
+(define-public xdg-desktop-portal
+  (package
+    (name "xdg-desktop-portal")
+    (version "1.10.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/flatpak/xdg-desktop-portal/releases/download/"
+                    version "/xdg-desktop-portal-" version ".tar.xz"))
+              (sha256
+               (base32
+                "199lqr2plsy9qqnxx5a381ml8ygcbz4nkjla5pvljjcrwzlqsygd"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)
@@ -2358,16 +2314,15 @@ and others.")
 (define-public xdg-desktop-portal-gtk
   (package
     (name "xdg-desktop-portal-gtk")
-    (version "1.7.1")
+    (version "1.10.0")
     (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                     (url "https://github.com/flatpak/xdg-desktop-portal-gtk")
-                     (commit version)))
-              (file-name (git-file-name name version))
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/flatpak/xdg-desktop-portal-gtk/releases/download/"
+                    version "/xdg-desktop-portal-gtk-" version ".tar.xz"))
               (sha256
                (base32
-                "183iha9dxmvprn99ymgz17jx1lyn1fj5jyj6ghxl716zn9mxmird"))))
+                "0nlbnd6qvs92fanrmmn123vy0y2ml0v3ndxyk5x0cpfbnmxpa2f8"))))
     (build-system glib-or-gtk-build-system)
     (arguments
      `(#:phases
@@ -2378,13 +2333,22 @@ and others.")
              (for-each (lambda (po)
                          (chmod po #o666))
                        (find-files "po" "\\.po$"))
-             #t)))))
+             #t)))
+       ;; Enable Gnome portal backends
+       #:configure-flags
+       (list
+        "--enable-appchooser"
+        "--enable-wallpaper"
+        "--enable-screenshot"
+        "--enable-screencast"
+        "--enable-background"
+        "--enable-settings")))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("autoconf" ,autoconf)
        ("automake" ,automake)
        ("libtool" ,libtool)
-       ("xdg-desktop-portal" ,xdg-desktop-portal)
+       ("libxml2" ,libxml2)
        ("glib:bin" ,glib "bin")
        ("which" ,which)
        ("gettext" ,gettext-minimal)))
@@ -2394,10 +2358,8 @@ and others.")
        ("fontconfig" ,fontconfig)
        ("gnome-desktop" ,gnome-desktop)
        ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)))
-    (native-search-paths
-     (list (search-path-specification
-            (variable "XDG_DESKTOP_PORTAL_DIR")
-            (files '("share/xdg-desktop-portal/portals")))))
+    (propagated-inputs
+     (list xdg-desktop-portal))
     (home-page "https://github.com/flatpak/xdg-desktop-portal-gtk")
     (synopsis "GTK implementation of xdg-desktop-portal")
     (description
@@ -2410,7 +2372,7 @@ interfaces.")
 (define-public xdg-desktop-portal-wlr
   (package
     (name "xdg-desktop-portal-wlr")
-    (version "0.4.0")
+    (version "0.5.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -2419,22 +2381,39 @@ interfaces.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "13fbzh8bjnhk4xs8j9bpc01q3hy27zpbf0gkk1fnh3hm5pnyfyiv"))))
+                "1ipg35gv8ja39ijwbyi96qlyq2y1fjdggl40s38rv68bsya8zry1"))
+              (patches (search-patches "xdg-desktop-portal-wlr-harcoded-length.patch"))))
     (build-system meson-build-system)
     (arguments
      `(#:configure-flags
        '("-Dsystemd=disabled"
-         "-Dsd-bus-provider=libelogind")))
+         "-Dsd-bus-provider=libelogind")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'hardcode-binaries
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((sh (search-input-file inputs "/bin/sh"))
+                   (grim (search-input-file inputs "/bin/grim"))
+                   (slurp (search-input-file inputs "/bin/slurp")))
+               (substitute* "src/screenshot/screenshot.c"
+                 (("grim") grim)
+                 (("slurp") slurp)
+                 (("execl\\(\"/bin/sh\", \"/bin/sh\"")
+                  (string-append "execl(\"" sh "\", \"" sh "\"")))
+               (substitute* "src/screencast/screencast.c"
+                 (("execvp\\(\"sh")
+                  (string-append "execvp(\"" sh)))))))))
     (native-inputs
-     `(("cmake" ,cmake)
-       ("pkg-config" ,pkg-config)))
-    (inputs
-     `(("elogind" ,elogind)
-       ("iniparser" ,iniparser)
-       ("pipewire" ,pipewire-0.3)
-       ("inih" ,libinih)
-       ("wayland" ,wayland)
-       ("wayland-protocols" ,wayland-protocols)))
+     (list cmake pkg-config))
+    (inputs (list elogind
+                  bash-minimal
+                  grim
+                  iniparser
+                  libinih
+                  pipewire-0.3
+                  slurp
+                  wayland
+                  wayland-protocols))
     (home-page "https://github.com/emersion/xdg-desktop-portal-wlr")
     (synopsis "@code{xdg-desktop-portal} backend for wlroots")
     (description
@@ -2444,10 +2423,37 @@ remote-desktop @code{xdg-desktop-portal} interfaces for wlroots based
 compositors.")
     (license license:expat)))
 
+(define-public poweralertd
+  (package
+    (name "poweralertd")
+    (version "0.2.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://git.sr.ht/~kennylevinsen/poweralertd")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "19rw9q4pcqw56nmzjfglfikzx5wwjl4n08awwdhg0jy1k0bm3dvp"))))
+    (build-system meson-build-system)
+    (arguments
+     '(#:configure-flags '("-Dman-pages=enabled")))
+    (native-inputs
+     (list scdoc pkg-config bash-minimal))
+    (inputs
+     (list elogind))
+    (home-page "https://sr.ht/~kennylevinsen/poweralertd")
+    (synopsis "Power alert daemon")
+    (description "poweralertd is a daemon that watches for UPower events and
+notifies the user using any notification daemon implementing
+@code{org.freedesktop.Notifications}.")
+    (license license:gpl3+)))
+
 (define-public waypipe
   (package
     (name "waypipe")
-    (version "0.8.0")
+    (version "0.8.1")
     (source
      (origin
        (method git-fetch)
@@ -2456,22 +2462,12 @@ compositors.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1qa47ljfvb1vv3h647xwn1j5j8gfmcmdfaz4j8ygnkvj36y87vnz"))))
+        (base32 "1v08dv3dfz420v51ahz7qgv3429073kmgrf8f66s4c3jlpch2pa1"))))
     (build-system meson-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-sleep-path
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let ((coreutils (assoc-ref inputs "coreutils")))
-               (substitute* "./test/startup_failure.py"
-                 (("sleep") (string-append coreutils "/bin/sleep")))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("scdoc" ,scdoc)
-       ;; For tests
-       ("python" ,python)
-       ("coreutils" ,coreutils)))
+     (list pkg-config scdoc
+           ;; For tests
+           python))
     (home-page "https://gitlab.freedesktop.org/mstoeckl/waypipe")
     (synopsis "Proxy for Wayland protocol applications")
     (description
diff --git a/gnu/packages/freeipmi.scm b/gnu/packages/freeipmi.scm
index acd527fcee..75019dbdcc 100644
--- a/gnu/packages/freeipmi.scm
+++ b/gnu/packages/freeipmi.scm
@@ -40,7 +40,7 @@
     (arguments
      '(#:configure-flags '("--disable-static")))
     (inputs
-     `(("libgcrypt" ,libgcrypt)))
+     (list libgcrypt))
     (home-page "https://www.gnu.org/software/freeipmi/")
     (synopsis "Platform management, including sensor and power monitoring")
     (description
diff --git a/gnu/packages/fribidi.scm b/gnu/packages/fribidi.scm
index e213192aa6..1a371f2111 100644
--- a/gnu/packages/fribidi.scm
+++ b/gnu/packages/fribidi.scm
@@ -90,7 +90,7 @@ or right-to-left ordering as necessary.")
              #t)))
        #:tests? #f)) ; no tests
     (inputs
-     `(("fribidi" ,fribidi)))
+     (list fribidi))
     (home-page "https://tracker.debian.org/pkg/bidiv")
     (synopsis "BiDi viewer - command-line tool displaying logical Hebrew/Arabic")
     (description "bidiv is a simple utility for converting logical-Hebrew input
diff --git a/gnu/packages/ftp.scm b/gnu/packages/ftp.scm
index 17ad139162..3d44364918 100644
--- a/gnu/packages/ftp.scm
+++ b/gnu/packages/ftp.scm
@@ -5,6 +5,7 @@
 ;;; Copyright © 2016–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Rene Saavedra <rennes@openmailbox.org>
 ;;; Copyright © 2021 David Larsson <david.larsson@selfhosted.xyz>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -32,7 +33,6 @@
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages freedesktop)
-  #:use-module (gnu packages gcc)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gtk)
@@ -65,11 +65,9 @@
                 "03b7y0h3mf4jfq5y8zw6hv9v44z3n6i8hc1iswax96y3z7sc85y5"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("zlib" ,zlib)
-       ("readline" ,readline)
-       ("gnutls" ,gnutls)))
+     (list zlib readline gnutls))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -132,10 +130,11 @@ reliability in mind.")
                     (let ((out (assoc-ref outputs "out")))
                       (setenv "CONFIG_SHELL" (which "sh"))
                       (setenv "SHELL" (which "sh"))
+                      (setenv "CFLAGS" "-fcommon")
                       (invoke "./configure"
                               (string-append "--prefix=" out))))))
        #:tests? #f)) ;there are no tests
-    (inputs `(("ncurses" ,ncurses)))
+    (inputs (list ncurses))
     (home-page "https://www.ncftp.com/ncftp/")
     (synopsis "Command-line File Transfer Protocol (FTP) client")
     (description
@@ -161,9 +160,7 @@ FTP browser, as well as non-interactive commands such as @code{ncftpput} and
             "1ir761hjncr1bamaqcw9j7x57xi3s9jax3223bxwbq30a0vsw1pd"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("automake" ,automake)
-       ("autoconf" ,autoconf)
-       ("gettext" ,gettext-minimal)))
+     (list automake autoconf gettext-minimal))
     (home-page "http://weex.sourceforge.net/")
     (synopsis "Non-interactive client for FTP synchronization")
     (description
@@ -176,26 +173,22 @@ as required.")
 (define-public libfilezilla
   (package
     (name "libfilezilla")
-    (version "0.31.1")
+    (version "0.35.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://download.filezilla-project.org/"
                            "libfilezilla/libfilezilla-" version ".tar.bz2"))
        (sha256
-        (base32 "0vqn6gkwyin9hml39d74vcjcnbwlnk2cpc3msdlkhpq1ns3mhzcr"))))
+        (base32 "1s1a165kc1gkdmhzmvm91ddj3cbxmh7s27fwfgm921ixrq6m3qpf"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
        (list "--disable-static")))
     (native-inputs
-     `(("cppunit" ,cppunit)
-       ("gcc" ,gcc-8)                   ; XXX remove when it's the default
-       ("gettext" ,gettext-minimal)
-       ("pkg-config" ,pkg-config)))
+     (list cppunit gettext-minimal pkg-config))
     (inputs
-     `(("gnutls" ,gnutls)
-       ("nettle" ,nettle)))
+     (list gnutls nettle))
     (home-page "https://lib.filezilla-project.org")
     (synopsis "Cross-platform C++ library used by Filezilla client")
     (description
@@ -220,33 +213,30 @@ output.
 (define-public filezilla
   (package
     (name "filezilla")
-    (version "3.55.1")
+    (version "3.57.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://download.filezilla-project.org/client/"
                            "FileZilla_" version "_src.tar.bz2"))
        (sha256
-        (base32 "19bnyx89jg0ll8a8mr4y8gp26gizs11ckgrwglh27zak3zhx1y37"))))
+        (base32 "1iwrr08rik0afaxf88bghw2fw97ia8wlcsrm94jh24yafxq6rgw2"))))
     (build-system gnu-build-system)
     (arguments
       ;; Don't let filezilla phone home to check for updates.
      '(#:configure-flags '("--disable-autoupdatecheck")))
     (native-inputs
-     `(("cppunit" ,cppunit)
-       ("gettext" ,gettext-minimal)
-       ("pkg-config" ,pkg-config)
-       ("xdg-utils" ,xdg-utils)))
+     (list cppunit gettext-minimal pkg-config xdg-utils))
     (inputs
-     `(("dbus" ,dbus)
-       ("gnutls" ,gnutls)
-       ("gtk+" ,gtk+)
-       ("libfilezilla" ,libfilezilla)
-       ("libidn" ,libidn)
-       ("nettle" ,nettle)
-       ("pugixml" ,pugixml)
-       ("sqlite" ,sqlite)
-       ("wxwidgets" ,wxwidgets)))
+     (list dbus
+           gnutls
+           gtk+
+           libfilezilla
+           libidn
+           nettle
+           pugixml
+           sqlite
+           wxwidgets))
     (home-page "https://filezilla-project.org")
     (synopsis "Full-featured graphical FTP/FTPS/SFTP client")
     (description
@@ -297,9 +287,7 @@ directory comparison and more.")
                (("/usr") (assoc-ref outputs "out")))))
          (delete 'configure))))         ; no configure script
     (inputs
-     `(("libcap" ,libcap)
-       ("linux-pam" ,linux-pam)
-       ("openssl" ,openssl)))
+     (list libcap linux-pam openssl))
     (synopsis "Small FTP server with a focus on security")
     (description
      "The Very Secure File Transfer Protocol Daemon or @command{vsftpd} is a
diff --git a/gnu/packages/fvwm.scm b/gnu/packages/fvwm.scm
index 6509fb38a5..db4cde0eb1 100644
--- a/gnu/packages/fvwm.scm
+++ b/gnu/packages/fvwm.scm
@@ -65,16 +65,16 @@
        ("pkg-config" ,pkg-config)
        ("xsltproc" ,libxslt)))
     (inputs
-     `(("fribidi" ,fribidi)
-       ("libpng" ,libpng)
-       ("librsvg" ,librsvg)
-       ("libxcursor" ,libxcursor)
-       ("libxext" ,libxext)
-       ("libxft" ,libxft)
-       ("libxinerama" ,libxinerama)
-       ("libxpm" ,libxpm)
-       ("libxt" ,libxt)
-       ("readline" ,readline)))
+     (list fribidi
+           libpng
+           librsvg
+           libxcursor
+           libxext
+           libxft
+           libxinerama
+           libxpm
+           libxt
+           readline))
     (synopsis "Virtual window manager for X11")
     (description
      "FVWM is an extremely powerful ICCCM-compliant multiple virtual desktop
diff --git a/gnu/packages/game-development.scm b/gnu/packages/game-development.scm
index 06bf4041df..f417fae8d7 100644
--- a/gnu/packages/game-development.scm
+++ b/gnu/packages/game-development.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014 Tomáš Čech <sleep_walker@suse.cz>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2015, 2018 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2015, 2018, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015, 2018 Alex Kost <alezost@gmail.com>
 ;;; Copyright © 2015, 2016, 2017 David Thompson <davet@gnu.org>
 ;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
@@ -23,6 +23,9 @@
 ;;; Copyright © 2021 Alexandru-Sergiu Marton <brown121407@posteo.ro>
 ;;; Copyright © 2021 Dmitry Polyakov <polyakov@liltechdude.xyz>
 ;;; Copyright © 2020-2021 James Smith <jsubuntuxp@disroot.org>
+;;; Copyright © 2021 Ekaitz Zarraga <ekaitz@elenq.tech>
+;;; Copyright © 2021 Andy Tai <atai@atai.org>
+;;; Copyright © 2022 Felix Gruber <felgru@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -68,7 +71,6 @@
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages fribidi)
   #:use-module (gnu packages dbm)
-  #:use-module (gnu packages gcc)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
@@ -92,6 +94,7 @@
   #:use-module (gnu packages pulseaudio)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-xyz)
+  #:use-module (gnu packages readline)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages sdl)
   #:use-module (gnu packages sphinx)
@@ -110,7 +113,7 @@
 (define-public bullet
   (package
     (name "bullet")
-    (version "2.89")
+    (version "3.17")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -119,7 +122,7 @@
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "10ncf2z474jnv7p5lv01ak2mk2hib3rj5rz1zr8v2v5pnciqbijl"))
+                "0x1ghxbkvqr910sp01sjf4hlfy4sdgn2jx2qf0dsi697bzq1f3mr"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -129,9 +132,7 @@
                               '("Gwen" "clsocket" "enet" "glad" "imgui"
                                 "lua-5.2.3" "midi" "minizip" "openvr"
                                 "optionalX11" "serial" "zlib")))
-                  ;; These need files from ThirdPartyLibs.
-                  (substitute* "Extras/CMakeLists.txt"
-                    (("BulletRobotics") ""))
+
                   ;; Tests fail on linking, cannot find -lBussIK.
                   (substitute* "test/CMakeLists.txt"
                     ((" InverseDynamics")
@@ -144,6 +145,17 @@
                                "-DBUILD_CPU_DEMOS=OFF"
                                "-DBUILD_OPENGL3_DEMOS=OFF"
                                "-DBUILD_BULLET2_DEMOS=OFF"
+                               ;; openmw 0.47.0 requires bullet to be built with
+                               ;; double precision.
+                               ;; See <https://issues.guix.gnu.org/52953> for
+                               ;; more information.
+                               "-DUSE_DOUBLE_PRECISION=ON"
+                               ;; Extras/BulletRoboticsGUI needs files from
+                               ;; ThirdPartyLibs
+                               "-DBUILD_BULLET_ROBOTICS_GUI_EXTRA=OFF"
+                               ;; Extras/BulletRobotics needs files from
+                               ;; ThirdPartyLibs
+                               "-DBUILD_BULLET_ROBOTICS_EXTRA=OFF"
                                (string-append  "-DCMAKE_CXX_FLAGS=-fPIC "
                                                (or (getenv "CXXFLAGS") "")))
        #:phases
@@ -158,9 +170,7 @@
                 "# ADD_TEST(Test_BulletInverseForward"))
              #t)))))
     (inputs
-     `(("glu" ,glu)
-       ("libx11" ,libx11)
-       ("mesa" ,mesa)))
+     (list glu libx11 mesa))
     (home-page "https://pybullet.org/wordpress/")
     (synopsis "3D physics engine library")
     (description
@@ -182,11 +192,9 @@ is used in some video games and movies.")
        (base32 "0psb2za6ldrlak7s8pjvli98ij5yiwjx8j1ms2v7rj9yadx0xv8h"))))
    (build-system gnu-build-system)
    (inputs
-    `(("libpng" ,libpng)))
+    (list libpng))
    (native-inputs
-    `(("asciidoc" ,asciidoc)
-      ("pkg-config" ,pkg-config)
-      ("zstd" ,zstd)))
+    (list asciidoc pkg-config zstd))
    (home-page "https://github.com/Doom-Utils/deutex")
    (synopsis "WAD file composer for Doom and related games")
    (description
@@ -210,6 +218,7 @@ DeuTex has functions such as merging wads, etc.")
        (uri (string-append "https://binaries.openttd.org/extra/"
                            name "/" version "/" name "-" version
                            "-source.tar.xz"))
+       (patches (search-patches "grfcodec-gcc-compat.patch"))
        (sha256
         (base32 "08admgnpqcsifpicbm56apgv360fxapqpbbsp10qyk8i22w1ivsk"))))
     (build-system gnu-build-system)
@@ -235,12 +244,9 @@ DeuTex has functions such as merging wads, etc.")
                              "readme" "readme.rpn"))
                  (for-each (lambda (file)
                              (install-file file man))
-                           (find-files "." "\\.1"))))
-             #t)))))
+                           (find-files "." "\\.1")))))))))
     (inputs
-     `(("boost" ,boost)
-       ("libpng" ,libpng)
-       ("zlib" ,zlib)))
+     (list boost libpng zlib))
     (synopsis "GRF development tools")
     (description
      "The @dfn{Graphics Resource File} (GRF) development tools are a set of
@@ -305,13 +311,13 @@ PCM data.")
                         (("-Werror") ""))
                       #t)))))
     (native-inputs `(("pkgconfig" ,pkg-config)))
-    (inputs `(("bdb" ,bdb)
-              ("glib" ,glib)
-              ("guile" ,guile-3.0)
-              ("libmicrohttpd" ,libmicrohttpd)
-              ("ncurses" ,ncurses)
-              ("sdl" ,sdl)
-              ("zlib" ,zlib)))
+    (inputs (list bdb
+                  glib
+                  guile-3.0
+                  libmicrohttpd
+                  ncurses
+                  sdl
+                  zlib))
     (home-page "https://www.nongnu.org/gzochi/")
     (synopsis "Scalable middleware for multiplayer games")
     (description
@@ -340,8 +346,7 @@ provide connectivity for client applications written in any language.")
     (arguments
      '(#:tests? #f))
     (propagated-inputs
-     `(("python-pillow" ,python-pillow)
-       ("python-ply" ,python-ply)))
+     (list python-pillow python-ply))
     (home-page "https://github.com/OpenTTD/nml")
     (synopsis "NML compiler")
     (description
@@ -363,8 +368,7 @@ files) into @file{.grf} and/or @file{.nfo} files.")
          "0s5d5qzlzfmqb10iyrqi62n36ll94d99xjaznp5ca6dz1b91qkvr"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pygame" ,python-pygame)
-       ("python-uniseg" ,python-uniseg)))
+     (list python-pygame python-uniseg))
     (home-page "https://python-sge.github.io/")
     (synopsis "2D game engine for Python")
     (description
@@ -374,9 +378,6 @@ you can focus on the game itself.  This makes more rapid game development
 possible, and it also makes the SGE easy to learn.")
     (license license:lgpl3+)))
 
-(define-public python-sge-pygame
-  (deprecated-package "python-sge-pygame" python-sge))
-
 (define-public python-tmx
   (package
     (name "python-tmx")
@@ -392,7 +393,7 @@ possible, and it also makes the SGE easy to learn.")
          "073q0prg1nzlkga2b45vhscz374206qh4x68ccg00mxxwagn64z0"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "http://python-tmx.nongnu.org")
     (synopsis "Python library for the @code{Tiled} TMX format")
     (description
@@ -410,8 +411,8 @@ levels.")
     (package
       (inherit python2-tmx)
       (propagated-inputs
-       `(("python2-pathlib" ,python2-pathlib)
-         ,@(package-propagated-inputs python2-tmx))))))
+       (modify-inputs (package-propagated-inputs python2-tmx)
+         (prepend python2-pathlib))))))
 
 (define-public python-xsge
   (package
@@ -438,9 +439,9 @@ levels.")
                      "--root=/"))))
        #:tests? #f)) ; no check target
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (propagated-inputs
-     `(("python-sge" ,python-sge)))
+     (list python-sge))
     (home-page "https://python-sge.github.io/")
     (synopsis "Extensions for the SGE Game Engine")
     (description
@@ -500,9 +501,7 @@ support.")
        ("sfml" ,sfml)
        ("wxwidgets" ,wxwidgets-3.1)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("which" ,which)
-       ("zip" ,zip)))
+     (list pkg-config which zip))
     (home-page "https://slade.mancubus.net")
     (synopsis "Doom game data editor")
     (description "SLADE3 is a modern editor for Doom-engine based games and
@@ -526,12 +525,9 @@ formats such as PNG.")
                 "1ifxh3sv6gz32gahgi7ba0ivcw5mfgwnrw6iycpav150w9xla43i"))))
     (build-system gnu-build-system)
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)
-       ("zlib" ,zlib)))
+     (list qtbase-5 qtdeclarative qtsvg zlib))
     (native-inputs
-     `(("qttools" ,qttools)))
+     (list qttools))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -559,16 +555,16 @@ clone.")
 (define-public tsukundere
   (package
     (name "tsukundere")
-    (version "0.3.2")
+    (version "0.4.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
-                    (url "https://gitlab.com/leoprikler/tsukundere")
+                    (url "https://gitlab.com/lilyp/tsukundere")
                     (commit version)))
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "05y3nj8vpn40hfr2y29p8pa9hhpzibhbvfzpm0dlphjh9crq3ii4"))))
+                "11glghnff27rqh2s34g51afg93g3f5ryfz9mkyb7qj35ngl8vw5f"))))
     (build-system gnu-build-system)
     (arguments
      `(#:modules ((ice-9 match)
@@ -598,9 +594,12 @@ clone.")
                          ((label . pkg)
                           (and (string-prefix? "guile-" label) pkg)))
                        inputs))))
-               (substitute* "bin/tsukundere"
+               (substitute* "tsukundere.scm"
                  (("exec guile (.*)" _ args)
                   (string-append
+                   ;; XXX: Prevent Guile-SDL2 from blowing up by not knowing
+                   ;;      where the SDL2 libaries are.
+                   "unset LD_LIBRARY_PATH\n"
                    (format #f "export GUILE_LOAD_PATH=\"~@?\"~%"
                            "~{~a~^:~}" (map scm pkgs))
                    (format #f "export GUILE_LOAD_COMPILED_PATH=\"~@?\"~%"
@@ -614,12 +613,15 @@ clone.")
        ("automake" ,automake)
        ("gettext" ,gettext-minimal)
        ("guile" ,guile-3.0)
+       ("libtool" ,libtool)
        ("pkg-config" ,pkg-config)
        ("texinfo" ,texinfo)))
     (inputs
      `(("guile-sdl2" ,guile3.0-sdl2)
-       ("guile" ,guile-3.0)))
-    (home-page "https://gitlab.com/leoprikler/tsukundere")
+       ("guile" ,guile-3.0)
+       ("pango" ,pango)
+       ("sdl2" ,sdl2)))
+    (home-page "https://gitlab.com/lilyp/tsukundere")
     (synopsis "Visual novel engine")
     (description "Tsukundere is a game engine geared heavily towards the
 development of visual novels, written on top of Guile-SDL2.  It is still
@@ -655,7 +657,7 @@ experimental.")
              "-DSFML_OS_PKGCONFIG_DIR=lib/pkgconfig")
        #:tests? #f)) ; no tests
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("mesa" ,mesa)
        ("glew" ,glew)
@@ -669,10 +671,7 @@ experimental.")
        ("stb-image-write" ,stb-image-write)))
     (propagated-inputs
      ;; In Requires.private of pkg-config files.
-     `(("flac" ,flac)
-       ("freetype" ,freetype)
-       ("libvorbis" ,libvorbis)
-       ("openal" ,openal)))
+     (list flac freetype libvorbis openal))
     (home-page "https://www.sfml-dev.org")
     (synopsis "Simple and Fast Multimedia Library")
     (description
@@ -706,11 +705,9 @@ of five modules: system, window, graphics, audio and network.")
                         #t))))
        #:tests? #f)) ; no tests
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("desktop-file-utils" ,desktop-file-utils)))
+     (list pkg-config desktop-file-utils))
     (inputs
-     `(("sdl" ,sdl)
-       ("gtk+" ,gtk+)))
+     (list sdl gtk+))
     (synopsis "Simple sound effect generator")
     (description "Sfxr is a tool for quickly generating simple sound effects.
 Originally created for use in video game prototypes, it can generate random
@@ -773,9 +770,9 @@ garbage collection and can be extended with plugins.")
                         (("CMAKE_COMPILER_IS_GNUCC") "FALSE"))
                       #t)))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (native-inputs
-     `(("doxygen" ,doxygen)))
+     (list doxygen))
     (home-page "https://icculus.org/physfs")
     (synopsis "File system abstraction library")
     (description
@@ -792,29 +789,29 @@ archive on a per-file basis.")
 (define-public love
   (package
     (name "love")
-    (version "11.3")
-    (source (origin
-             (method url-fetch)
-             (uri (string-append "https://bitbucket.org/rude/love/downloads/"
-                                 "love-" version "-linux-src.tar.gz"))
-             (sha256
-              (base32
-               "0m8lvlabmcchskx4qpzkdlsm44360f3j0q3vvvj2388cfnvhv7v4"))))
+    (version "11.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/love2d/love/releases/download/"
+                           version "/love-" version "-linux-src.tar.gz"))
+       (sha256
+        (base32 "0sak3zjpzfs3ys315m8qvszi946fz76jcpsb58j11wplyp5fwbz3"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("devil" ,devil)
-       ("freetype" ,freetype)
-       ("libmodplug" ,libmodplug)
-       ("libtheora" ,libtheora)
-       ("libvorbis" ,libvorbis)
-       ("luajit" ,luajit)
-       ("mesa" ,mesa)
-       ("mpg123" ,mpg123)
-       ("openal" ,openal)
-       ("sdl2" ,sdl2)
-       ("zlib" ,zlib)))
+     (list devil
+           freetype
+           libmodplug
+           libtheora
+           libvorbis
+           luajit
+           mesa
+           mpg123
+           openal
+           sdl2
+           zlib))
     (synopsis "2D game framework for Lua")
     (description "LÖVE is a framework for making 2D games in the Lua
 programming language.")
@@ -848,7 +845,7 @@ programming language.")
              (substitute* "CMakeLists.txt"
                (("DESTINATION .") "DESTINATION lib/love")))))))
     (inputs
-     `(("luajit" ,luajit)))
+     (list luajit))
     (synopsis "Lightweight immediate mode GUI for LÖVE games")
     (description "LÖVE is a Lua framework for making 2D games.  Nuklear
 is a minimal state immediate mode graphical user interface toolkit.  This
@@ -859,7 +856,7 @@ package is the Nuklear bindings for LÖVE created by Kevin Harrison.")
 (define-public allegro-4
   (package
     (name "allegro")
-    (version "4.4.3")
+    (version "4.4.3.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/liballeg/allegro5/"
@@ -867,7 +864,7 @@ package is the Nuklear bindings for LÖVE created by Kevin Harrison.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "1d5ws3ihvpa6f4qc6a6drq31pajw6bblxifr4kcxzqj9br1nw28y"))))
+                "1m6lz35nk07dli26kkwz3wa50jsrxs1kb6w1nj14a911l34xn6gc"))))
     (build-system cmake-build-system)
     (arguments
      '(#:phases
@@ -879,14 +876,9 @@ package is the Nuklear bindings for LÖVE created by Kevin Harrison.")
              ;; unconditionally clobbered in the build script.
              (substitute* '("CMakeLists.txt")
                (("ADDON_LINKAGE STATIC")
-                "ADDON_LINKAGE SHARED"))
-             #t)))))
+                "ADDON_LINKAGE SHARED")))))))
     (inputs
-     `(("glu" ,glu)
-       ("libpng" ,libpng)
-       ("libvorbis" ,libvorbis)
-       ("mesa" ,mesa)
-       ("zlib" ,zlib)))
+     (list glu libpng libvorbis mesa zlib))
     (synopsis "Game programming library")
     (description "Allegro is a library mainly aimed at video game and
 multimedia programming.  It handles common, low-level tasks such as creating
@@ -927,7 +919,7 @@ etc.")
        ("physfs" ,physfs)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "Game programming library")
     (description "Allegro is a library mainly aimed at video game and
 multimedia programming.  It handles common, low-level tasks such as creating
@@ -988,7 +980,7 @@ etc.")
                             (assoc-ref %build-inputs "freetype")
                             "/include/freetype2"))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     ;; TODO: Use a patched Allegro 4 that supports window resizing.  This
     ;; patched version is bundled with Aseprite, but the patches should be
     ;; extracted and applied on top of a standalone Allegro 4 package.
@@ -1013,6 +1005,58 @@ the creation of animations, tiled graphics, texture atlases, and more.")
     (home-page "https://www.aseprite.org/")
     (license license:gpl2+)))
 
+(define-public libresprite
+  (package
+    (name "libresprite")
+    (version "1.0")
+    ;; TODO: Unbundle third party software.
+    ;; - duktape is bundled inside the project but it's hard to unbundle:
+    ;;   there are many differences from a version to the next and it is not
+    ;;   really designed to work as a shared lib.
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/LibreSprite/LibreSprite")
+                    (commit (string-append "v" version))
+                    (recursive? #t)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0djbjjh21ahlxzh0b0jp4mpfycam8h9157i4wbxkd618fraadhbp"))))
+    (build-system cmake-build-system)
+    (arguments
+     '(#:configure-flags
+       (list "-DWITH_WEBP_SUPPORT=1")
+       ;; Tests are unmaintained
+       #:tests? #f))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("curl" ,curl)
+       ("freetype" ,freetype)
+       ("giflib" ,giflib)
+       ("googletest" ,googletest)
+       ("libjpeg" ,libjpeg-turbo)
+       ("libpng" ,libpng)
+       ("libwebp" ,libwebp)
+       ("libx11" ,libx11)
+       ("libxext" ,libxext)
+       ("libxxf86dga" ,libxxf86dga)
+       ("libxxf86vm" ,libxxf86vm)
+       ("lua" ,lua)                     ; Optional
+       ("pixman" ,pixman)
+       ("sdl2" ,sdl2)
+       ("sdl2-image" ,sdl2-image)
+       ("tinyxml" ,tinyxml)
+       ("zlib" ,zlib)))
+    (synopsis "Animated sprite editor and pixel art tool")
+    (description "LibreSprite is a tool for creating 2D pixel art for video
+games.  In addition to basic pixel editing features, it can assist in the
+creation of animations, tiled graphics, texture atlases, and more.
+LibreSprite is a fork of the latest GPLv2 commit of Aseprite.")
+    (home-page "https://libresprite.github.io/")
+    (license license:gpl2+)))
+
 (define-public qqwing
   (package
     (name "qqwing")
@@ -1027,7 +1071,7 @@ the creation of animations, tiled graphics, texture atlases, and more.")
                 "0bw0papyqjg22z6irf36gs54y8236wa37b6gyn2h1spy65n76lqp"))))
     (build-system gnu-build-system)
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://qqwing.com/")
     (synopsis "Sudoku puzzle solver and generator")
     (description
@@ -1057,11 +1101,8 @@ It offers the following features:
                (base32
                 "08ddhywdy2qg17m592ng3yr0p1ih96irg8wg729g75hsxxq9ipks"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("fontconfig" ,fontconfig)
-              ("freeglute" ,freeglut)
-              ("fribidi" ,fribidi)
-              ("glew" ,glew)))
+    (native-inputs (list pkg-config))
+    (inputs (list fontconfig freeglut fribidi glew))
     (home-page "http://quesoglc.sourceforge.net")
     (synopsis "Implementation of the OpenGL Character Renderer (GLC)")
     (description
@@ -1177,7 +1218,7 @@ to create fully featured games and multimedia programs in the python language.")
 
 (define-public python-pygame-sdl2
   (let ((real-version "2.1.0")
-        (renpy-version "7.4.8"))
+        (renpy-version "7.4.11"))
     (package
       (inherit python-pygame)
       (name "python-pygame-sdl2")
@@ -1187,7 +1228,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 "1yyqcg7khac17jif86vi2d4j9l8x2vfg4h5pasrwwsy0g8386zsm"))
+         (sha256 (base32 "0nxvca16299jx6sp0ys29rqixcs21ymhqwjfkbchhss0yar7qjgz"))
          (modules '((guix build utils)))
          (snippet
           '(begin
@@ -1215,10 +1256,9 @@ to create fully featured games and multimedia programs in the python language.")
                                       "/lib -Wl,--enable-new-dtags -lSDL2"))
                #t)))))
       (inputs
-       `(("sdl-union"
-          ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))))
+       (list (sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf))))
       (native-inputs
-       `(("python-cython" ,python-cython)))
+       (list python-cython))
       (home-page "https://www.renpy.org/")
       (synopsis "Reimplementation of the Pygame API using SDL2")
       (description "Pygame_SDL2 reimplements the Pygame API using SDL2,
@@ -1233,21 +1273,19 @@ developed mainly for Ren'py.")
 (define-public python2-renpy
   (package
     (name "python2-renpy")
-    (version "7.4.8")
+    (version "7.4.11")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://www.renpy.org/dl/" version
                            "/renpy-" version "-source.tar.bz2"))
-       (sha256 (base32 "1ml3gs87xxk1iflrg5ivffr4q8fi7d65l1cx462bvvpm1rs2sa8d"))
+       (sha256 (base32 "0zkhg2sd2hglm9dkansf4h8sq7lm7iqslzl763ambp4kyfdvd07q"))
        (modules '((guix build utils)))
        (patches
         (search-patches
          "renpy-use-system-fribidi.patch"))
        (snippet
         '(with-directory-excursion "module"
-           ;; drop generated sources
-           (delete-file-recursively "gen")
            ;; drop fribidi sources
            (delete-file-recursively "fribidi-src")
            #t))))
@@ -1268,15 +1306,12 @@ developed mainly for Ren'py.")
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "module/setup.py"
                (("/usr/include/fribidi")
-                (string-append (assoc-ref inputs "fribidi")
-                               "/include/fribidi")))
-             #t))
+                (search-input-directory inputs "include/fribidi")))))
          (add-after 'set-paths 'set-build-vars
            (lambda* (#:key inputs native-inputs #:allow-other-keys)
              (setenv "RENPY_CYTHON"
-                     (string-append (assoc-ref (or native-inputs inputs)
-                                               "python2-cython")
-                                    "/bin/cython"))
+                     (search-input-file (or native-inputs inputs)
+                                        "/bin/cython"))
              (setenv "RENPY_DEPS_INSTALL" (string-join (map cdr inputs) ":"))
              #t))
          (replace 'build
@@ -1286,9 +1321,8 @@ developed mainly for Ren'py.")
              ;; named "setup.py".
              (with-directory-excursion "module"
                (apply (assoc-ref %standard-phases 'build) args))
-             ;; the above causes renpy.__init__ to be compiled but does not
-             ;; compile anything else, hence we do that here
-             (delete-file "renpy/__init__.pyc")
+             ;; The above only builds the cython modules, but nothing else,
+             ;; so we do that here.
              (invoke "python" "-m" "compileall" "renpy")
              #t))
          (replace 'install
@@ -1308,20 +1342,18 @@ developed mainly for Ren'py.")
                (delete-file-recursively (string-append out site "/renpy/common")))
              #t)))))
     (inputs
-     `(("ffmpeg" ,ffmpeg)
-       ("freetype" ,freetype)
-       ("fribidi" ,fribidi)
-       ("glew" ,glew)
-       ("libpng" ,libpng)
-       ("sdl-union"
-        ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))
-       ("xdg-utils" ,xdg-utils)))
+     (list ffmpeg
+           freetype
+           fribidi
+           glew
+           libpng
+           (sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf))
+           xdg-utils))
     (propagated-inputs
      `(("python2-future" ,python2-future)
        ("python2-pygame" ,python2-pygame-sdl2)))
     (native-inputs
-     `(("gcc" ,gcc-8) ; for const variables as initializer elements
-       ("python2-cython" ,python2-cython)))
+     (list python2-cython))
     (home-page "https://www.renpy.org/")
     (synopsis "Ren'py python module")
     (description "This package contains the shared libraries and Python modules
@@ -1416,70 +1448,17 @@ are only used to bootstrap it.")
              ;;     `-- Super Awesome Game.sh
              (let* ((out (assoc-ref outputs "out"))
                     (bin/renpy (string-append out "/bin/renpy")))
-               (mkdir-p (string-append out "/bin"))
                (copy-recursively "renpy/common"
                                  (string-append out "/share/renpy/common"))
                (copy-recursively "gui"
                                  (string-append out "/share/renpy/gui"))
 
-               (call-with-output-file bin/renpy
-                 (lambda (port)
-                   (format port "#!~a/bin/python2~%"
-                           (assoc-ref inputs "python2"))
-                   (format port "
-from __future__ import print_function
-
-import os
-import sys
-import warnings
-
-def path_to_common(renpy_base):
-    return renpy_base + \"/common\"
-
-def path_to_saves(gamedir, save_directory=None):
-    import renpy  # @UnresolvedImport
-
-    if save_directory is None:
-        save_directory = renpy.config.save_directory
-        save_directory = renpy.exports.fsencode(save_directory)
-
-    if not save_directory:
-        return gamedir + \"/saves\"
-
-    return os.path.expanduser(\"~~/.renpy/\" + save_directory)
-
-def path_to_renpy_base():
-    return \"~a\"
-
-def main():
-    renpy_base = path_to_renpy_base()
-    try:
-        import renpy.bootstrap
-        import renpy.arguments
-    except ImportError:
-        print(\"\"\"Could not import renpy.bootstrap.
-Please ensure you decompressed Ren'Py correctly, preserving the directory
-structure.\"\"\", file=sys.stderr)
-        raise
-
-    args = renpy.arguments.bootstrap()
-    if not args.basedir:
-        print(\"\"\"This Ren'py requires a basedir to launch.
-The basedir is the directory, in which .rpy files live -- usually the 'game'
-subdirectory of a game packaged by Ren'py.
-
-If you want the Ren'py launcher, use renpy-launcher instead.\"\"\",
-              file=sys.stderr)
-        sys.exit()
-
-    renpy.bootstrap.bootstrap(renpy_base)
-
-if __name__ == \"__main__\":
-    main()
-"
-                           (string-append out "/share/renpy"))))
-               (chmod bin/renpy #o755)
-               #t)))
+               (mkdir-p (string-append out "/bin"))
+               (copy-file (assoc-ref inputs "renpy.in") bin/renpy)
+               (substitute* bin/renpy
+                 (("@PYTHON@") (search-input-file inputs "bin/python2"))
+                 (("@RENPY_BASE@") (string-append out "/share/renpy")))
+               (chmod bin/renpy #o755))))
 
          (add-after 'install 'install-games
            (lambda* (#:key outputs #:allow-other-keys)
@@ -1520,7 +1499,7 @@ if __name__ == \"__main__\":
                                          (assoc-ref inputs "python"))
                                         "/site-packages")))
                (wrap-program (string-append out "/bin/renpy")
-                 `("PYTHONPATH" =
+                 `("GUIX_PYTHONPATH" =
                    (,@(delete-duplicates
                        (map
                         (lambda (store-path)
@@ -1533,13 +1512,14 @@ if __name__ == \"__main__\":
                                     inputs))))))))
                #t))))))
     (inputs
-     `(("python2-renpy" ,python2-renpy)
+     `(("renpy.in" ,(search-auxiliary-file "renpy/renpy.in"))
+       ("python2-renpy" ,python2-renpy)
        ("python2-tkinter" ,python-2 "tk")
        ("python2" ,python-2) ; for ‘fix-commands’ and ‘wrap’
        ("xdg-utils" ,xdg-utils)))
     (propagated-inputs '())
     (native-inputs
-     `(("xorg-server" ,xorg-server-for-tests)))
+     (list xorg-server-for-tests))
     (outputs
      (list "out" "tutorial" "the-question"))
     (home-page "https://www.renpy.org/")
@@ -1593,8 +1573,6 @@ games.")
     (inputs
      `(("gifsicle" ,gifsicle)
        ("sdl2" ,(sdl-union (list sdl2 sdl2-image)))))
-    (native-inputs
-     `(("gcc" ,gcc-10)))                  ; for std::filesystem
     (home-page "https://github.com/kitao/pyxel")
     (synopsis "Retro game engine for Python")
     (description "Pyxel is a game engine inspired by retro gaming consoles.
@@ -1611,6 +1589,7 @@ also comes with a built-in image and sound editor.")
               (method url-fetch)
               ;; XXX: There is no URL that contains the version. :(
               (uri "http://pulkomandy.tk/projects/GrafX2/downloads/21")
+              (file-name (string-append "grafx2-" version ".tgz"))
               (sha256
                (base32
                 "0svsy6rqmdj11b400c242i2ixihyz0hds0dgicqz6g6dcgmcl62q"))))
@@ -1627,16 +1606,16 @@ also comes with a built-in image and sound editor.")
        ;; SDL header files are referenced without the preceeding "SDL/".
        (list (string-append "CFLAGS=-I"
                             (assoc-ref %build-inputs "sdl-union")
-                            "/include/SDL")
+                            "/include/SDL"
+                            " -fcommon")
              (string-append "prefix="
                             (assoc-ref %outputs "out")))
        #:tests? #f)) ; no check target
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libpng" ,libpng)
-       ("lua" ,lua-5.1)
-       ("sdl-union" ,(sdl-union (list sdl sdl-image sdl-ttf)))))
+     (list libpng lua-5.1
+           (sdl-union (list sdl sdl-image sdl-ttf))))
     (synopsis "Bitmap paint program")
     (description "GrafX2 is a bitmap paint program inspired by the Amiga
 programs Deluxe Paint and Brilliance.  Specializing in 256-color drawing, it
@@ -1663,7 +1642,7 @@ painted with a mouse.")
     (arguments
      `(#:tests? #f))                    ; no test suite
     (inputs
-     `(("libx11" ,libx11)))
+     (list libx11))
     (synopsis "Object Oriented Input System")
     (description
      "Cross Platform Object Oriented Input Lib System is a cross platform,
@@ -1700,16 +1679,14 @@ robust and compatible with many systems and operating systems.")
              "-DMYGUI_BUILD_DEMOS=FALSE"
              "-DMYGUI_BUILD_TOOLS=FALSE")))
     (native-inputs
-     `(("boost" ,boost)
-       ("doxygen" ,doxygen)
-       ("pkg-config" ,pkg-config)))
+     (list boost doxygen pkg-config))
     (inputs
-     `(("font-dejavu" ,font-dejavu)
-       ("freetype" ,freetype)
-       ("graphviz" ,graphviz)
-       ("libx11" ,libx11)
-       ("ogre" ,ogre)
-       ("ois" ,ois)))
+     (list font-dejavu
+           freetype
+           graphviz
+           libx11
+           ogre
+           ois))
     (synopsis "Fast, flexible and simple GUI")
     (description
      "MyGUI is a library for creating Graphical User Interfaces (GUIs) for games
@@ -1735,16 +1712,15 @@ of use.")
                       "-DMYGUI_BUILD_DEMOS=FALSE"
                       "-DMYGUI_BUILD_TOOLS=FALSE")))))
     (inputs
-     `(("mesa" ,mesa)
-       ("glu" ,glu)
-       ,@(fold alist-delete (package-inputs mygui)
-               '("ogre"))))
+     (modify-inputs (package-inputs mygui)
+       (delete "ogre")
+       (prepend mesa glu)))
     (synopsis "Fast, flexible and simple GUI (OpenGL backend)")))
 
 (define-public openmw
   (package
     (name "openmw")
-    (version "0.46.0")
+    (version "0.47.0")
     (source
      (origin
        (method git-fetch)
@@ -1754,26 +1730,27 @@ of use.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0rm32zsmxvr6b0jjihfj543skhicbw5kg6shjx312clhlm035w2x"))))
+         "19mcbnjl4279qalb97msf965bjax48mx1r1qczyvwhn28h6n3bsy"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f                      ; No test target
        #:configure-flags
-       (list "-DDESIRED_QT_VERSION=5")))
+       (list "-DDESIRED_QT_VERSION=5"
+             "-DOPENMW_USE_SYSTEM_RECASTNAVIGATION=ON")))
     (native-inputs
-     `(("boost" ,boost)
-       ("doxygen" ,doxygen)
-       ("pkg-config" ,pkg-config)))
+     (list boost doxygen pkg-config))
     (inputs
-     `(("bullet" ,bullet)
-       ("ffmpeg" ,ffmpeg)
-       ("libxt" ,libxt)
-       ("mygui" ,mygui-gl)              ; OpenMW does not need Ogre.
-       ("openal" ,openal)
-       ("openscenegraph" ,openmw-openscenegraph)
-       ("qtbase" ,qtbase-5)
-       ("sdl" ,sdl2)
-       ("unshield" ,unshield)))
+     (list bullet
+           ffmpeg
+           libxt
+           lz4
+           mygui-gl              ; OpenMW does not need Ogre.
+           openal
+           openmw-openscenegraph
+           qtbase-5
+           recastnavigation
+           sdl2
+           unshield))
     (synopsis "Re-implementation of the RPG Morrowind engine")
     (description
      "OpenMW is a game engine which reimplements and extends the one that runs
@@ -1786,7 +1763,7 @@ games.")
 (define-public godot
   (package
     (name "godot")
-    (version "3.2.3")
+    (version "3.4.2")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1795,7 +1772,7 @@ games.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "19vrp5lhyvxbm6wjxzn28sn3i0s8j08ca7nani8l1nrhvlc8wi0v"))
+                "1bm9yl995chvx6jwkdia12yjrgwcpzb1r9bmj606q8z264aw2ma5"))
               (modules '((guix build utils)
                          (ice-9 ftw)
                          (srfi srfi-1)))
@@ -1810,27 +1787,30 @@ games.")
                               "assimp"
                               "certs"
                               "cvtt"
+                              "embree"
                               "enet"
                               "etc2comp"
                               "fonts"
                               "glad"
                               "jpeg-compressor"
                               "libsimplewebm"
+                              "minimp3"
                               "miniupnpc"
                               "minizip"
                               "misc"
                               "nanosvg"
+                              "oidn"
                               "pvrtccompressor"
                               "recastnavigation"
                               "squish"
+                              "stb_rect_pack"
                               "tinyexr"
                               "vhacd"
                               "xatlas")))
                       (for-each delete-file-recursively
                                 (lset-difference string=?
                                                  (scandir ".")
-                                                 (cons* "." ".." preserved-files)))))
-                  #t))))
+                                                 (cons* "." ".." preserved-files)))))))))
     (build-system scons-build-system)
     (arguments
      `(#:scons ,scons-python2
@@ -1864,8 +1844,7 @@ games.")
                (("env_base = Environment\\(tools=custom_tools\\)")
                 (string-append
                  "env_base = Environment(tools=custom_tools)\n"
-                 "env_base = Environment(ENV=os.environ)")))
-             #t))
+                 "env_base = Environment(ENV=os.environ)")))))
          ;; Build headless tools, used for packaging games without depending on X.
          (add-after 'build 'build-headless
            (lambda* (#:key scons-flags #:allow-other-keys)
@@ -1888,8 +1867,19 @@ games.")
                  (install-file "godot_server" (string-append headless "/bin")))
                ;; Tell the editor where to find zenity for OS.alert().
                (wrap-program (string-append out "/bin/godot")
-                 `("PATH" ":" prefix (,(string-append zenity "/bin")))))
-             #t))
+                 `("PATH" ":" prefix (,(string-append zenity "/bin")))))))
+         (add-after 'install 'wrap
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             ;; FIXME: Mesa tries to dlopen libudev.so.0 and fails.  Pending a
+             ;; fix of the mesa package we wrap the pcb executable such that
+             ;; Mesa can find libudev.so.0 through LD_LIBRARY_PATH.
+             ;; also append ld path for pulseaudio and alsa-lib
+             (let* ((out (assoc-ref outputs "out"))
+                    (udev_path (string-append (assoc-ref inputs "eudev") "/lib"))
+                    (pulseaudio_path (string-append (assoc-ref inputs "pulseaudio") "/lib"))
+                    (alas_lib_path (string-append (assoc-ref inputs "alsa-lib") "/lib")))
+               (wrap-program (string-append out "/bin/godot")
+                 `("LD_LIBRARY_PATH" ":" prefix (,udev_path ,pulseaudio_path ,alas_lib_path))))))
          (add-after 'install 'install-godot-desktop
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -1903,32 +1893,34 @@ games.")
                            (copy-file icon dest))
                          '("icon.png" "icon.svg")
                          `(,(string-append icons "/256x256/apps/godot.png")
-                           ,(string-append icons "/scalable/apps/godot.svg"))))
-             #t)))))
+                           ,(string-append icons "/scalable/apps/godot.svg")))))))))
     (outputs '("out" "headless"))
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("alsa-lib" ,alsa-lib)
-              ("bullet" ,bullet)
-              ("freetype" ,freetype)
-              ("glew" ,glew)
-              ("glu" ,glu)
-              ("libtheora" ,libtheora)
-              ("libvorbis" ,libvorbis)
-              ("libvpx" ,libvpx)
-              ("libwebp" ,libwebp)
-              ("libx11" ,libx11)
-              ("libxcursor" ,libxcursor)
-              ("libxi" ,libxi)
-              ("libxinerama" ,libxinerama)
-              ("libxrandr" ,libxrandr)
-              ("mbedtls" ,mbedtls-apache)
-              ("mesa" ,mesa)
-              ("opusfile" ,opusfile)
-              ("pcre2" ,pcre2)
-              ("pulseaudio" ,pulseaudio)
-              ("wslay" ,wslay)
-              ("zenity" ,zenity)
-              ("zstd" ,zstd "lib")))
+    (native-inputs
+     (list pkg-config))
+    (inputs
+     (list alsa-lib
+           bullet
+           freetype
+           glew
+           glu
+           libtheora
+           libvorbis
+           libvpx
+           libwebp
+           libx11
+           libxcursor
+           libxi
+           libxinerama
+           libxrandr
+           mbedtls-apache
+           mesa
+           opusfile
+           pcre2
+           pulseaudio
+           eudev                        ; FIXME: required by mesa
+           wslay
+           zenity
+           `(,zstd "lib")))
     (home-page "https://godotengine.org/")
     (synopsis "Advanced 2D and 3D game engine")
     (description
@@ -1959,11 +1951,10 @@ scripted in a Python-like language.")
        ;; 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)))
+     (list ;; for testing
+           googletest
+           ;; for documentation
+           doxygen graphviz))
     (synopsis "Entity component system")
     (description "EnTT is a header-only library, containing (among other things)
 @itemize
@@ -2019,8 +2010,7 @@ scripted in a Python-like language.")
               ("libpng" ,libpng)
               ("fltk" ,fltk)
               ("zlib" ,zlib)))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("xdg-utils" ,xdg-utils)))
+    (native-inputs (list pkg-config xdg-utils))
     (synopsis "Doom map editor")
     (description "Eureka is a map editor for the classic DOOM games, and a few
 related games such as Heretic and Hexen.  It comes with a 3d preview mode and
@@ -2031,29 +2021,29 @@ a 2D editor view.")
 (define-public guile-chickadee
   (package
     (name "guile-chickadee")
-    (version "0.7.0")
+    (version "0.8.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://files.dthompson.us/chickadee/"
                                   "chickadee-" version ".tar.gz"))
               (sha256
                (base32
-                "199y4kc28va6klfs19h998sfh7vx9spnrvjw7p92i47q5a7jdcp6"))))
+                "1k2dml2z57lnc36wrmwhh7avnpczxgxnshlfhpbk174vg6v609n0"))))
     (build-system gnu-build-system)
     (arguments
      '(#:make-flags '("GUILE_AUTO_COMPILE=0")))
     (propagated-inputs
      `(("guile-opengl" ,guile3.0-opengl)
-       ("guile-sdl2" ,guile3.0-sdl2)))
+       ("guile-sdl2" ,guile-sdl2)))
     (inputs
-     `(("freetype" ,freetype)
-       ("guile" ,guile-3.0)
-       ("libvorbis" ,libvorbis)
-       ("mpg123" ,mpg123)
-       ("openal" ,openal)))
+     (list freetype
+           guile-3.0-latest
+           libvorbis
+           mpg123
+           openal
+           readline))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("texinfo" ,texinfo)))
+     (list guile-3.0-latest pkg-config texinfo))
     (home-page "https://dthompson.us/projects/chickadee.html")
     (synopsis "Game development toolkit for Guile Scheme with SDL2 and OpenGL")
     (description "Chickadee is a game development toolkit for Guile Scheme
@@ -2069,9 +2059,6 @@ that parenthetically inclined game developers need to make 2D (and eventually
 @end enumerate\n")
     (license license:gpl3+)))
 
-(define-public guile3.0-chickadee
-  (deprecated-package "guile3.0-chickadee" guile-chickadee))
-
 (define-public bennu-game-development
   (package
     (name "bennu-game-development")
@@ -2108,12 +2095,8 @@ that parenthetically inclined game developers need to make 2D (and eventually
 
             i*86)"))
                #t)))))
-    (inputs `(("openssl" ,openssl)
-              ("zlib" ,zlib)))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("autoconf" ,autoconf)
-                     ("automake" ,automake)
-                     ("libtool" ,libtool)))
+    (inputs (list openssl zlib))
+    (native-inputs (list pkg-config autoconf automake libtool))
     (synopsis "Programming language to create games")
     (description "Bennu Game Development, also known as bennudg, is a
 programming language tailored at game development.  It is the successor of
@@ -2135,11 +2118,7 @@ Fenix.")
                  (("extern fixed fmul\\( int x, int y \\);") "")
                  (("extern fixed fdiv\\( int x, int y \\);") "")))
              (chdir "modules"))))))
-    (inputs `(("zlib" ,zlib)
-              ("libpng" ,libpng)
-              ("openssl" ,openssl)
-              ("sdl-mixer" ,sdl-mixer)
-              ("bennu-game-development" ,bennu-game-development)))
+    (inputs (list zlib libpng openssl sdl-mixer bennu-game-development))
     (synopsis "Modules for the Bennu Game Development programming language")
     (description "This package contains a collection of modules for the Bennu
 Game Development programming language, from CD handling through SDL to
@@ -2160,11 +2139,9 @@ joystick support.")))
                                        "plib-CVE-2012-4552.patch"))))
     (build-system gnu-build-system)
     (inputs
-     `(("mesa" ,mesa)
-       ("libxi" ,libxi)
-       ("libxmu" ,libxmu)))
+     (list mesa libxi libxmu))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://plib.sourceforge.net/")
     (synopsis "Suite of portable game libraries")
     (description "PLIB is a set of libraries that will permit programmers to
@@ -2205,8 +2182,8 @@ of the others")
          ("freetype" ,freetype)
          ("libogg" ,libogg)))
       (native-inputs
-       `(("which" ,which)               ; Else SDL_version.h won't be found.
-         ("pkg-config" ,pkg-config)))
+       (list which ; Else SDL_version.h won't be found.
+             pkg-config))
       (arguments
        '(#:tests? #f                    ; No tests.
          #:make-flags '("CC=gcc"
@@ -2337,7 +2314,7 @@ specific knowledge of the hardware they are targeting.")
                                       sdl-union)))
              #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("sdl" ,(sdl-union (list sdl sdl-image sdl-mixer)))))
     (home-page "http://perso.b2b2c.ca/~sarrazip/dev/burgerspace.html")
@@ -2385,7 +2362,7 @@ double-buffering.")
                (install-file "bin/Release/FNA.dll" (string-append out "/lib"))
                #t))))))
     (native-inputs
-     `(("mono" ,mono)))
+     (list mono))
     (inputs `(("sdl2-cs-src" ,(package-source sdl2-cs))
               ("mojoshader-src" ,(package-source mojoshader-cs))
               ("faudio-src" ,(package-source faudio))
@@ -2418,7 +2395,7 @@ focuses solely on developing a fully accurate XNA4 runtime for the desktop.")
                            "-DBUILD_TESTING=ON"
                            "-DENABLE_DOUBLE_PRECISION=ON")))
     (native-inputs
-     `(("python-sphinx" ,python-sphinx)))
+     (list python-sphinx))
     (home-page "https://github.com/danfis/libccd")
     (synopsis "Library for collision detection between two convex shapes")
     (description "@code{libccd} is library for a collision detection
@@ -2455,9 +2432,7 @@ a.k.a. XenoCollide) as described in Game Programming Gems 7.")
                (("configure_file\\(libccd/.*") ""))
              #t)))))
     (inputs
-     `(("glu" ,glu)
-       ("libccd" ,libccd)
-       ("mesa" ,mesa)))
+     (list glu libccd mesa))
     (home-page "https://www.ode.org/")
     (synopsis "High performance library for simulating rigid body dynamics")
     (description "ODE is a high performance library for simulating
@@ -2489,9 +2464,7 @@ computer games, 3D authoring tools and simulation tools.")
        #:configure-flags '("-DBUILD_STATIC=OFF"
                            "-DBUILD_DEMOS=OFF")))
     (inputs
-     `(("freeglut" ,freeglut)
-       ("libxmu" ,libxmu)
-       ("libxrandr" ,libxrandr)))
+     (list freeglut libxmu libxrandr))
     (home-page "https://chipmunk-physics.net/")
     (synopsis "Fast and lightweight 2D game physics library")
     (description "Chipmunk is a simple, lightweight, fast and portable 2D
@@ -2522,7 +2495,7 @@ rigid body physics library written in C.")
        #:configure-flags '("-DBUILD_SHARED_LIBS=ON"
                            "-DBOX2D_BUILD_TESTBED=OFF")))
     (inputs
-     `(("libx11" ,libx11)))
+     (list libx11))
     (home-page "https://box2d.org/")
     (synopsis "2D physics engine for games")
     (description "Box2D is a 2D rigid body simulation library for games.
@@ -2583,18 +2556,15 @@ physics engine is just a system for procedural animation.")
              (patch-shebang "get_version.py")
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("python" ,python)
-       ("pkg-config" ,pkg-config)
-       ("stb-sprintf" ,stb-sprintf)
-       ("stb-truetype" ,stb-truetype)))
+     (list autoconf
+           automake
+           libtool
+           python
+           pkg-config
+           stb-sprintf
+           stb-truetype))
     (inputs
-     `(("lodepng" ,lodepng)
-       ("sdl2" ,sdl2)
-       ("utf8proc" ,utf8proc)
-       ("zlib" ,zlib)))
+     (list lodepng sdl2 utf8proc zlib))
     (home-page "https://github.com/libtcod/libtcod")
     (synopsis "Library specifically designed for writing roguelikes")
     (description
@@ -2679,7 +2649,7 @@ utilities frequently used in roguelikes.")
          ("uuid.h" ,util-linux "lib")
          ("zlib" ,zlib)))
       (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
       (home-page "https://github.com/Warsow/qfusion")
       (supported-systems '("i686-linux" "x86_64-linux"))
       (synopsis "Warsow's fork of qfusion, the id Tech 2 derived game engine")
@@ -2770,10 +2740,9 @@ support.")
            (add-before 'build 'fix-env
              (lambda* (#:key inputs #:allow-other-keys)
                (setenv "CPATH"
-                       (string-append (assoc-ref inputs "sdl2-union")
-                                      "/include/SDL2:"
-                                      (or (getenv "CPATH") "")))
-               #t))
+                       (string-append
+                        (search-input-directory inputs "include/SDL2")
+                        ":" (or (getenv "CPATH") "")))))
            (add-after 'install 'really-install
              (lambda* (#:key outputs #:allow-other-keys)
                (let* ((out (assoc-ref outputs "out"))
@@ -2821,3 +2790,54 @@ fully dynamic omnidirectional shadows, global illumination, HDR lighting,
 deferred shading, morphological / temporal / multisample anti-aliasing, and
 much more.")
       (license license:zlib))))
+
+(define-public recastnavigation
+  ;; We follow master since there hasn't been a release since 1.5.1 in 2016.
+  (let ((commit "c5cbd53024c8a9d8d097a4371215e3342d2fdc87")
+        (revision "1"))
+    (package
+      (name "recastnavigation")
+      (version (git-version "1.5.1" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/recastnavigation/recastnavigation")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "034bm47gc3r285w1pnvkhmm74zz99d204b1r865gisaiq4qfbza0"))))
+      (build-system cmake-build-system)
+      (arguments
+       `(#:configure-flags (list "-DBUILD_SHARED_LIBS=ON"
+                                 "-DRECASTNAVIGATION_DEMO=OFF"
+                                 "-DRECASTNAVIGATION_TESTS=ON"
+                                 "-DRECASTNAVIGATION_EXAMPLES=OFF")))
+      (synopsis "Navigation system for games")
+      (description "Recast is state of the art navigation mesh
+construction toolset for games.
+
+@itemize
+@item It is automatic, which means that you can throw any level geometry
+      at it and you will get robust mesh out.
+@item It is fast which means swift turnaround times for level designers.
+@item It is open source so it comes with full source and you can
+      customize it to your heart's content.
+@end itemize
+
+The Recast process starts with constructing a voxel mold from a level
+geometry and then casting a navigation mesh over it.  The process
+consists of three steps, building the voxel mold, partitioning the mold
+into simple regions, peeling off the regions as simple polygons.
+
+Recast is accompanied with Detour, path-finding and spatial reasoning
+toolkit.  You can use any navigation mesh with Detour, but of course the
+data generated with Recast fits perfectly.
+
+Detour offers simple static navigation mesh which is suitable for many
+simple cases, as well as tiled navigation mesh which allows you to plug
+in and out pieces of the mesh.  The tiled mesh allows you to create
+systems where you stream new navigation data in and out as the player
+progresses the level, or you may regenerate tiles as the world changes.")
+      (home-page "https://github.com/recastnavigation/recastnavigation")
+      (license license:zlib))))
diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index dabbbe6ea1..591a3d3f38 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -5,7 +5,7 @@
 ;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Eric Bavier <bavier@posteo.net>
 ;;; Copyright © 2014 Cyrill Schenkel <cyrill.schenkel@gmail.com>
 ;;; Copyright © 2014 Sylvain Beucler <beuc@beuc.net>
-;;; Copyright © 2014, 2015, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015, 2018, 2019, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014, 2015, 2016 Sou Bunnbu <iyzsong@gmail.com>
 ;;; Copyright © 2014, 2015, 2019 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015, 2016 Andreas Enge <andreas@enge.fr>
@@ -30,7 +30,7 @@
 ;;; Copyright © 2017, 2019, 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017, 2018 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2017 Roel Janssen <roel@gnu.org>
-;;; Copyright © 2017, 2018, 2019, 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2017-2022 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2018 okapi <okapi@firemail.cc>
 ;;; Copyright © 2018 Tim Gesthuizen <tim.gesthuizen@yahoo.de>
 ;;; Copyright © 2018 Madalin Ionel-Patrascu <madalinionel.patrascu@mdc-berlin.de>
@@ -42,7 +42,7 @@
 ;;; Copyright © 2019 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2019, 2020 Jesse Gibbons <jgibbons2357+guix@gmail.com>
 ;;; Copyright © 2019 Dan Frumin <dfrumin@cs.ru.nl>
-;;; Copyright © 2019, 2020 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2019, 2020, 2021, 2022 Guillaume Le Vaillant <glv@posteo.net>
 ;;; Copyright © 2019, 2020 Timotej Lazar <timotej.lazar@araneo.si>
 ;;; Copyright © 2019 Josh Holland <josh@inv.alid.pw>
 ;;; Copyright © 2019 Pkill -9 <pkill9@runbox.com>
@@ -61,10 +61,13 @@
 ;;; Copyright © 2021 Stefan Reichör <stefan@xsteve.at>
 ;;; Copyright © 2021 Greg Hogan <code@greghogan.com>
 ;;; Copyright © 2021 David Pflug <david@pflug.io>
-;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
+;;; Copyright © 2021, 2022 Felix Gruber <felgru@posteo.net>
 ;;; Copyright © 2021 Solene Rapenne <solene@perso.pw>
 ;;; Copyright © 2021 Noisytoot <noisytoot@disroot.org>
 ;;; Copyright © 2021 Petr Hodina <phodina@protonmail.com>
+;;; Copyright © 2021 Brendan Tildesley <mail@brendan.scot>
+;;; Copyright © 2021 Christopher Baines <mail@cbaines.net>
+;;; Copyright © 2021 Foo Chuan Wei <chuanwei.foo@hotmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -149,8 +152,10 @@
   #:use-module (gnu packages kde)
   #:use-module (gnu packages kde-frameworks)
   #:use-module (gnu packages less)
+  #:use-module (gnu packages lesstif)
   #:use-module (gnu packages libcanberra)
   #:use-module (gnu packages libedit)
+  #:use-module (gnu packages libidn)
   #:use-module (gnu packages libunwind)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages llvm)
@@ -171,9 +176,11 @@
   #:use-module (gnu packages perl-check)
   #:use-module (gnu packages perl-compression)
   #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages pretty-print)
   #:use-module (gnu packages protobuf)
   #:use-module (gnu packages pulseaudio)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages readline)
@@ -189,6 +196,7 @@
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages textutils)
   #:use-module (gnu packages tls)
+  #:use-module (gnu packages unicode)
   #:use-module (gnu packages upnp)
   #:use-module (gnu packages video)
   #:use-module (gnu packages vulkan)
@@ -267,8 +275,7 @@
                     (#f "Side-scrolling game")))))
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (inputs
      `(("libxi" ,libxi)
        ("libxmu" ,libxmu)
@@ -411,14 +418,14 @@ The game includes a built-in editor so you can design and share your own maps.")
                 "18gn4sg4j5sw38ngb90sl50raliplrsgjcvy8fjwry733k0cgdjr"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libxml2" ,libxml2)
-       ("sdl" ,sdl)
-       ("sdl-image" ,sdl-image)
-       ("freeglut" ,freeglut)
-       ("libpng" ,libpng)
-       ("libjpeg-turbo" ,libjpeg-turbo)))
+     (list libxml2
+           sdl
+           sdl-image
+           freeglut
+           libpng
+           libjpeg-turbo))
     (home-page "http://www.armagetronad.org")
     (synopsis "Tron clone in 3D")
     (description "Armagetron Advanced is a multiplayer game in 3d that
@@ -469,13 +476,13 @@ physics settings to tweak as well.")
                               (string-append icons "/astromenace.png")))))
              #t)))))
     (inputs
-     `(("freealut" ,freealut)
-       ("freetype" ,freetype)
-       ("glu" ,glu)
-       ("libogg" ,libogg)
-       ("libvorbis" ,libvorbis)
-       ("openal" ,openal)
-       ("sdl2" ,sdl2)))
+     (list freealut
+           freetype
+           glu
+           libogg
+           libvorbis
+           openal
+           sdl2))
     (home-page "https://www.viewizard.com/")
     (synopsis "3D space shooter with spaceship upgrade possibilities")
     (description
@@ -540,10 +547,9 @@ regret their insolence.")
                              (string-append out "/share/man/man6"))
                #t))))))
     (native-inputs
-     `(("hicolor-icon-theme" ,hicolor-icon-theme)))
+     (list hicolor-icon-theme))
     (inputs
-     `(("boost" ,boost)
-       ("ncurses" ,ncurses)))
+     (list boost ncurses))
     (home-page "https://fph.altervista.org/prog/bastet.html")
     (synopsis "Antagonistic Tetris-style falling brick game for text terminals")
     (description
@@ -570,7 +576,7 @@ canyons and wait for the long I-shaped block to clear four rows at a time.")
          "0b4pddqz6is1771qmvcj8qqlr4in2djdbkk13agvp9yhfah2v8x7"))))
     (build-system gnu-build-system)
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (arguments
      `(#:tests? #f                      ;no tests
        #:make-flags '("CC=gcc")
@@ -707,8 +713,7 @@ possible, while battling many vicious aliens.")
          "bsd-games-add-wrapper.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("flex" ,flex)
-       ("bison" ,bison)))
+     (list flex bison))
     (inputs
      `(("curses" ,ncurses)
        ("pager" ,less)
@@ -723,8 +728,7 @@ possible, while battling many vicious aliens.")
                     (bin (string-append out "/bin"))
                     (doc (string-append out "/share/doc/bsd-games-" ,version))
                     (man (string-append out "/share/man"))
-                    (word-list (string-append (assoc-ref inputs "miscfiles")
-                                              "/share/web2"))
+                    (word-list (search-input-file inputs "/share/web2"))
                     (static-data (string-append out "/share/games/bsd-games"))
                     ;; Not a "./" because of substitute* in 'patch-install
                     ;; below.  The .// allow us not to mess with the games'
@@ -848,14 +852,14 @@ Quizzes: arithmetic and quiz.")
                          '("48" "256")))
              #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("c-ares" ,c-ares)
-       ("curl" ,curl)
-       ("glew" ,glew)
-       ("glu" ,glu)
-       ("sdl2" ,sdl2)
-       ("zlib" ,zlib)))
+     (list c-ares
+           curl
+           glew
+           glu
+           sdl2
+           zlib))
     (home-page "https://www.bzflag.org/")
     (synopsis "3D first person tank battle game")
     (description
@@ -881,7 +885,7 @@ high a score as possible.")
 (define-public cataclysm-dda
   (package
     (name "cataclysm-dda")
-    (version "0.F-2")
+    (version "0.F-3")
     (source
      (origin
        (method git-fetch)
@@ -889,7 +893,7 @@ high a score as possible.")
              (url "https://github.com/CleverRaven/Cataclysm-DDA")
              (commit version)))
        (sha256
-        (base32 "1wzsri6rh2fm7078hw0y4x7lqjs6ak4a66d05szfiinnxyn4w1ph"))
+        (base32 "1qnsz6az9qp4sbr3y4rcqhlmadrrdzafvd2xwf3db5wn0swvbjys"))
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (arguments
@@ -931,14 +935,14 @@ high a score as possible.")
        ("pkg-config" ,pkg-config)
        ("astyle" ,astyle)))
     (inputs
-     `(("freetype" ,freetype)
-       ("libogg" ,libogg)
-       ("libvorbis" ,libvorbis)
-       ("ncurses" ,ncurses)
-       ("sdl2" ,sdl2)
-       ("sdl2-image" ,sdl2-image)
-       ("sdl2-ttf" ,sdl2-ttf)
-       ("sdl2-mixer" ,sdl2-mixer)))
+     (list freetype
+           libogg
+           libvorbis
+           ncurses
+           sdl2
+           sdl2-image
+           sdl2-ttf
+           sdl2-mixer))
     (home-page "https://cataclysmdda.org/")
     (synopsis "Survival horror roguelike video game")
     (description
@@ -979,17 +983,16 @@ want what you have.")
                              "-DWITH_ORACLE=1"
                              "-DTEST=1")))
       (native-inputs
-       `(("googletest" ,googletest)
-         ("pkg-config" ,pkg-config)))
+       (list googletest pkg-config))
       (inputs
-       `(("protobuf" ,protobuf)
-         ("qtbase" ,qtbase-5)
-         ("qtmultimedia" ,qtmultimedia)
-         ("qtsvg" ,qtsvg)
-         ("qttools" ,qttools)
-         ("qtwebsockets" ,qtwebsockets)
-         ("xz" ,xz)
-         ("zlib" ,zlib)))
+       (list protobuf
+             qtbase-5
+             qtmultimedia
+             qtsvg
+             qttools
+             qtwebsockets
+             xz
+             zlib))
       (home-page "https://cockatrice.github.io")
       (synopsis "Tabletop card game simulator")
       (description "Cockatrice is a program for playing tabletop card games
@@ -1001,7 +1004,7 @@ allows users to brew while offline.")
 (define-public corsix-th
   (package
     (name "corsix-th")
-    (version "0.65")
+    (version "0.65.1")
     (source
      (origin
        (method git-fetch)
@@ -1010,7 +1013,7 @@ allows users to brew while offline.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0hp7da7b73dpn1h22rw3h8w6aaj9azn18qnp3ap3lrlqhj4fzcb3"))))
+        (base32 "0hw92ln9jm9v55drmbfqjng58yshgwfpv7fqynryrg3gvg8zhbvh"))))
     (build-system cmake-build-system)
     (arguments
      `(#:phases
@@ -1035,14 +1038,14 @@ allows users to brew while offline.")
        #:tests? #f)) ; TODO need busted package to run tests
     ;; Omit Lua-Socket dependency to disable automatic updates.
     (inputs
-     `(("ffmpeg" ,ffmpeg)
-       ("fluid-3" ,fluid-3)
-       ("freetype" ,freetype)
-       ("lua" ,lua)
-       ("lua-filesystem" ,lua-filesystem)
-       ("lua-lpeg" ,lua-lpeg)
-       ("sdl2" ,sdl2)
-       ("sdl2-mixer" ,sdl2-mixer)))
+     (list ffmpeg
+           fluid-3
+           freetype
+           lua
+           lua-filesystem
+           lua-lpeg
+           sdl2
+           sdl2-mixer))
     (home-page "https://corsixth.com")
     (synopsis "Implementation of the @i{Theme Hospital} game engine")
     (description
@@ -1084,7 +1087,7 @@ more.  This package does @emph{not} provide the game assets.")
                                     "/bin/cowsay")
                      "We're done!"))))))
     (inputs
-     `(("perl" ,perl)))
+     (list perl))
     (home-page (string-append "https://web.archive.org/web/20071026043648/"
                               "http://www.nog.net:80/~tony/warez/cowsay.shtml"))
     (synopsis "Speaking cow text filter")
@@ -1150,7 +1153,7 @@ characters and lines resulting in a rainbow effect.")
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f)) ; no tests provided
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (inputs `(("sdl" ,(sdl-union (list sdl2
                                        sdl2-image
                                        sdl2-mixer)))
@@ -1232,10 +1235,9 @@ should be placed in @file{~/.local/share/falltergeist}.")
              ;; Set correct environment for SDL.
              (lambda* (#:key inputs #:allow-other-keys)
                (setenv "CPATH"
-                       (string-append (assoc-ref inputs "sdl")
-                                      "/include/SDL:"
-                                      (or (getenv "CPATH") "")))
-               #t))
+                       (string-append
+                        (search-input-directory inputs "include/SDL")
+                        ":" (or (getenv "CPATH") "")))))
            (add-before 'build 'fix-settings-directory
              ;; Hide foobillardplus settings directory in $HOME.
              (lambda _
@@ -1261,9 +1263,7 @@ should be placed in @file{~/.local/share/falltergeist}.")
                             "foobillardplus"))
                  #t))))))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("pkg-config" ,pkg-config)))
+       (list autoconf automake pkg-config))
       (inputs
        `(("font-dejavu" ,font-dejavu)
          ("freetype" ,freetype)
@@ -1328,10 +1328,7 @@ The game features:
                   (string-append "IWAD=" wad-dir "/freedoom2.wad")))
                #t))))))
     (native-inputs
-     `(("asciidoc" ,asciidoc)
-       ("deutex" ,deutex)
-       ("python" ,python)
-       ("python-pillow" ,python-pillow)))
+     (list asciidoc deutex python python-pillow))
     (home-page "https://freedoom.github.io/")
     (synopsis "Free content game based on the Doom engine")
     (native-search-paths
@@ -1366,6 +1363,7 @@ effects and music to make a completely free game.")
      `(#:configure-flags
        (list
         (string-append "CFLAGS="
+                       "-fcommon "      ; XXX needed to build with GCC 10
                        "-I" (assoc-ref %build-inputs "sdl-gfx") "/include/SDL "
                        "-I" (assoc-ref %build-inputs "sdl-image") "/include/SDL "
                        "-I" (assoc-ref %build-inputs "sdl-mixer") "/include/SDL")
@@ -1375,7 +1373,7 @@ effects and music to make a completely free game.")
        ;;   SDL_AUDIODRIVER=dummy ./src/freedroidRPG -nb text
        #:tests? #f))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("glu" ,glu)
        ("libjpeg" ,libjpeg-turbo)
@@ -1461,7 +1459,7 @@ real-time combat.")
                          '("Help" "Patterns" "Rules" "Scripts")))
              #t)))))
     (native-inputs
-     `(("lua" ,lua)))
+     (list lua))
     (inputs
      `(("glu" ,glu)
        ("mesa" ,mesa)
@@ -1490,6 +1488,47 @@ automata.  The following features are available:
 @end enumerate")
     (license license:gpl2+)))
 
+(define-public joycond
+  (let ((commit "f9a66914622514c13997c2bf7ec20fa98e9dfc1d")
+        (revision "1"))
+    (package
+      (name "joycond")
+      (version (git-version "0.1.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/DanielOgorchock/joycond")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "07z86yp27vxc0b44jgvf1vpa69rh3wdvd1xbzcsrj3f32743pv5a"))))
+      (build-system cmake-build-system)
+      (arguments
+       `(#:tests? #f                    ;no test suite
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'fix-bin-location
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let ((out (assoc-ref outputs "out")))
+                 (substitute* "CMakeLists.txt"
+                   (("/lib/udev/rules.d")
+                    (string-append out "/lib/udev/rules.d"))
+                   (("/etc/systemd/system")
+                    (string-append out "/etc/systemd/system"))
+                   (("/etc/modules-load.d")
+                    (string-append out "/etc/modules-load.d"))
+                   (("/usr/bin")
+                    (string-append out "/bin")))))))))
+      (native-inputs (list pkg-config))
+      (inputs
+       (list eudev libevdev))
+      (home-page "https://github.com/DanielOgorchock/joycond")
+      (synopsis "Joy-Con controller daemon")
+      (description "This package provides a userspace daemon for the Nintendo
+Joy-Con controllers.")
+      (license license:gpl3))))
+
 (define-public julius
   (package
     (name "julius")
@@ -1512,9 +1551,7 @@ automata.  The following features are available:
            #t))))
     (build-system cmake-build-system)
     (inputs
-     `(("libpng" ,libpng)
-       ("sdl2" ,sdl2)
-       ("sdl2-mixer" ,sdl2-mixer)))
+     (list libpng sdl2 sdl2-mixer))
     (home-page "https://github.com/bvschaik/julius")
     (synopsis "Re-implementation of Caesar III game engine")
     (description
@@ -1580,7 +1617,7 @@ game Caesar III.  Gameplay enhancements include:
     (arguments
      `(#:tests? #f))                    ; there are no tests
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("curl" ,curl)
        ("libarchive" ,libarchive)
@@ -1629,8 +1666,7 @@ shadow mimic them to reach blocks you couldn't reach alone.")
              ;; Look for xdg-open in the store.
              (substitute* "src/core/web.c"
                (("/usr(/bin/xdg-open)" _ bin)
-                (string-append (assoc-ref inputs "xdg-utils") bin)))
-             #t))
+                (search-input-file inputs bin)))))
          (add-after 'unpack 'unbundle-fonts
            (lambda* (#:key inputs #:allow-other-keys)
              ;; Replace bundled Roboto fonts with links to the store.
@@ -1645,10 +1681,7 @@ shadow mimic them to reach blocks you couldn't reach alone.")
                   '("Roboto-Black.ttf" "Roboto-Bold.ttf" "Roboto-Medium.ttf")))
                #t))))))
     (inputs
-     `(("allegro" ,allegro)
-       ("font-google-roboto" ,font-google-roboto)
-       ("surgescript" ,surgescript)
-       ("xdg-utils" ,xdg-utils)))
+     (list allegro font-google-roboto surgescript xdg-utils))
     (home-page "https://opensurge2d.org")
     (synopsis "2D retro side-scrolling game")
     (description "@code{Open Surge} is a 2D retro side-scrolling platformer
@@ -1694,7 +1727,7 @@ built-in level editor.")
        ("fontconfig" ,fontconfig)
        ("curl" ,curl)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://www.knightsgame.org.uk/")
     (synopsis "Multiplayer dungeon game involving knights and quests")
     (description "Knights is a multiplayer game involving several knights who
@@ -1724,7 +1757,7 @@ destroying an ancient book using a special wand.")
                 "0s5fg4z5in1h39fcr69j1qc5ynmg7a8mfprk3mc3c0csq3snfwz2"))))
     (build-system meson-build-system)
     (arguments
-     '(#:glib-or-gtk? #t
+     `(#:glib-or-gtk? #t
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'skip-gtk-update-icon-cache
@@ -1734,11 +1767,7 @@ destroying an ancient book using a special wand.")
                (("gtk-update-icon-cache") "true"))
              #t)))))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("clutter" ,clutter)
-       ("clutter-gtk" ,clutter-gtk)
-       ("libgee" ,libgee)
-       ("libgnome-games-support" ,libgnome-games-support)))
+     (list gtk+ clutter clutter-gtk libgee libgnome-games-support))
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("glib:bin" ,glib "bin") ; for desktop-file-validate and appstream-util
@@ -1778,8 +1807,7 @@ in one tile.")
                (("gtk-update-icon-cache") "true"))
              #t)))))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("librsvg" ,librsvg)))
+     (list gtk+ librsvg))
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("glib:bin" ,glib "bin") ; for desktop-file-validate and appstream-util
@@ -1807,18 +1835,17 @@ such as chess or stockfish.")
         (base32
          "11xwhcli1h12k6rnhhyq4jphzrhfik7i8ah3k32pqw803460n6yf"))))
     (build-system gnu-build-system)
-    (inputs `(;; XXX: Build with an older Pango for 'pango_font_get_hb_font' and
-              ;; 'pango_coverage_get_type'.  Try removing this for versions > 1.06.002.
-              ("pango" ,pango-1.42)
-
-              ("glib" ,glib)
-              ("readline" ,readline)
-              ("gtk+" ,gtk+-2)
-              ("mesa" ,mesa)
-              ("glu" ,glu)
-              ("gtkglext" ,gtkglext)
-              ("sqlite" ,sqlite)
-              ("libcanberra" ,libcanberra)))
+    (inputs (list ;; XXX: Build with an older Pango for 'pango_font_get_hb_font' and
+                  ;; 'pango_coverage_get_type'.  Try removing this for versions > 1.06.002.
+                  pango-1.42
+                  glib
+                  readline
+                  gtk+-2
+                  mesa
+                  glu
+                  gtkglext
+                  sqlite
+                  libcanberra))
     (native-inputs `(("python-2" ,python-2)
                      ("pkg-config" ,pkg-config)))
     (arguments
@@ -1880,12 +1907,12 @@ also features an attractive, 3D representation of the playing board.")
                         (("gtk-update-icon-cache")
                          "true"))
                       #t)))))
-    (inputs `(("gtk+" ,gtk+-2)
-              ("mesa" ,mesa)
-              ("glu" ,glu)
-              ("libx11" ,libx11)
-              ("guile" ,guile-2.0)
-              ("gtkglext" ,gtkglext)))
+    (inputs (list gtk+-2
+                  mesa
+                  glu
+                  libx11
+                  guile-2.0
+                  gtkglext))
     (native-inputs `(("gettext" ,gettext-minimal)
                      ("pkg-config" ,pkg-config)))
     (home-page "https://www.gnu.org/software/gnubik/")
@@ -1936,12 +1963,11 @@ Chess).  It is similar to standard chess but this variant is far more complicate
          (add-after 'set-paths 'set-sdl-paths
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "CPATH"
-                     (string-append (assoc-ref inputs "sdl-union")
-                                    "/include/SDL:"
-                                    (or (getenv "CPATH") "")))
-             #t)))))
+                     (string-append
+                      (search-input-directory inputs "include/SDL")
+                      ":" (or (getenv "CPATH") ""))))))))
     (inputs
-     `(("sdl-union" ,(sdl-union (list sdl sdl-mixer)))))
+     (list (sdl-union (list sdl sdl-mixer))))
     (home-page "http://lgames.sourceforge.net/LTris/")
     (synopsis "Tetris clone based on the SDL library")
     (description
@@ -1970,11 +1996,9 @@ watch your CPU playing while enjoying a cup of tea!")
         (sha256
           (base32 "1liyckjp34j354qnxc1zn9730lh1p2dabrg1hap24z6xnqx0rpng"))))
     (native-inputs
-      `(("bison" ,bison)
-        ("flex" ,flex)))
+      (list bison flex))
     (inputs
-      `(("ncurses" ,ncurses)
-        ("less" ,less)))
+      (list ncurses less))
     (build-system gnu-build-system)
     (arguments
       '(#:make-flags
@@ -2110,9 +2134,7 @@ role, and your gender.")
                 (string-append assignment "$(docdir)\n")))
              #t)))))
     (inputs
-     `(("libpng" ,libpng)
-       ("mesa" ,mesa)
-       ("sdl" ,sdl)))
+     (list libpng mesa sdl))
     (home-page "http://pipewalker.sourceforge.net/")
     (synopsis "Logical tile puzzle")
     (description
@@ -2150,19 +2172,18 @@ Every puzzle has a complete solution, although there may be more than one.")
         (add-after 'set-paths 'set-sdl'paths
           (lambda* (#:key inputs #:allow-other-keys)
             (setenv "CPATH"
-                    (string-append (assoc-ref inputs "sdl-union")
-                                   "/include/SDL:"
-                                   (or (getenv "CPATH") "")))
-            #t)))))
+                    (string-append
+                     (search-input-directory inputs "/include/SDL")
+                     ":" (or (getenv "CPATH") ""))))))))
    (inputs
-    `(("fluidsynth" ,fluidsynth)
-      ("glu" ,glu)
-      ("libmad" ,libmad)
-      ("libpng" ,libpng)
-      ("libvorbis" ,libvorbis)
-      ("pcre" ,pcre)
-      ("portmidi" ,portmidi)
-      ("sdl-union" ,(sdl-union (list sdl sdl-image sdl-mixer sdl-net)))))
+    (list fluidsynth
+          glu
+          libmad
+          libpng
+          libvorbis
+          pcre
+          portmidi
+          (sdl-union (list sdl sdl-image sdl-mixer sdl-net))))
    (home-page "http://prboom-plus.sourceforge.net/")
    (synopsis "Version of the classic 3D shoot'em'up game Doom")
    (description
@@ -2210,11 +2231,9 @@ Every puzzle has a complete solution, although there may be more than one.")
                  (copy-recursively "data" data)
                  #t))))))
       (native-inputs
-       `(("unzip" ,unzip)))
+       (list unzip))
       (inputs
-       `(("python-sge-pygame" ,python-sge-pygame)
-         ("python-six" ,python-six)
-         ("python-xsge" ,python-xsge)))
+       (list python-sge python-six python-xsge))
       (home-page "https://retux-game.github.io/")
       (synopsis "Action platformer game")
       (description
@@ -2314,20 +2333,19 @@ utilizing the art assets from the @code{SuperTux} project.")
                  (lambda (p)
                    (format p "\
 #!~a
-export PYTHONPATH=~a/LIB:~a
+export GUIX_PYTHONPATH=~a/LIB:~a
 exec -a \"~a\" ~a \"$@\"\n"
-                           (which "bash") data (getenv "PYTHONPATH")
+                           (which "bash") data (getenv "GUIX_PYTHONPATH")
                            (which "python3")
                            (string-append lib "/main.py"))))
                (chmod roguebox-adventures #o555))
              #t)))))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (inputs
-     `(("python-pygame" ,python-pygame)
-       ("python-tmx" ,python-tmx)))
+     (list python-pygame python-tmx))
     (home-page "https://rogueboxadventures.tuxfamily.org")
-    (synopsis "A classical roguelike/sandbox game")
+    (synopsis "Classical roguelike/sandbox game")
     (description
      "RogueBox Adventures is a graphical roguelike with strong influences
 from sandbox games like Minecraft or Terraria.  The main idea of RogueBox
@@ -2390,9 +2408,9 @@ can be explored and changed freely.")
                    (lambda (p)
                      (format p
                              "#!~a~@
-                              export PYTHONPATH=~a:~a~@
+                              export GUIX_PYTHONPATH=~a:~a~@
                               exec -a \"~a\" ~a \"$@\"~%"
-                             (which "bash") data (getenv "PYTHONPATH")
+                             (which "bash") data (getenv "GUIX_PYTHONPATH")
                              (which "python3")
                              (string-append data "/run_game.py"))))
                  (chmod executable #o555))
@@ -2423,8 +2441,8 @@ can be explored and changed freely.")
            (lambda* (#:key outputs inputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
                     (data (string-append out "/share/seahorse-adventures"))
-                    (vera (string-append (assoc-ref inputs "font-bitstream-vera")
-                                         "/share/fonts/truetype/Vera.ttf")))
+                    (vera (search-input-file
+                           inputs "/share/fonts/truetype/Vera.ttf")))
                (let ((themes-dir (string-append data "/data/themes/")))
                  (for-each
                   (lambda (theme)
@@ -2437,8 +2455,7 @@ can be explored and changed freely.")
                  (("f_scale = 0.35") "f_scale = 0.47")))
              #t)))))
     (inputs
-     `(("font-bitstream-vera" ,font-bitstream-vera)
-       ("python-pygame" ,python-pygame)))
+     (list font-bitstream-vera python-pygame))
     (home-page "http://www.imitationpickles.org/barbie/")
     (synopsis "Help Barbie the seahorse float on bubbles to the moon")
     (description
@@ -2488,8 +2505,7 @@ and defeat them with your bubbles!")
              (setenv "XDG_RUNTIME_DIR" (getcwd))
              #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list pkg-config qttools))
     (inputs
      `(("glm" ,glm)
        ("libmodplug" ,libmodplug)
@@ -2528,8 +2544,8 @@ in mind.")
     (arguments
      `(#:tests? #false))                ; no test suite
     (inputs
-     `(("solarus" ,solarus)
-       ,@(package-inputs solarus)))
+     (modify-inputs (package-inputs solarus)
+       (prepend solarus)))
     (synopsis "Create and modify quests for the Solarus engine")
     (description
      "Solarus Quest Editor is a graphical user interface to create and
@@ -2538,16 +2554,18 @@ modify quests for the Solarus engine.")))
 (define-public superstarfighter
   (package
     (name "superstarfighter")
-    (version "0.6.4")
+    (version "0.6.5")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
              (url "https://github.com/notapixelstudio/superstarfighter")
-             (commit (string-append "v" version))))
+             ;; The commit is not tagged upstream:
+             ;; https://github.com/notapixelstudio/superstarfighter/commit/350605bf5454c26ebe2c57d8217edd03689c0573
+             (commit "32521f467616bb390e3929d07e1936ff43fe64da")))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1fly63yf5ls1xwm15if4lxwy67wi84k4gvjllljpykrl18vw2y0y"))))
+        (base32 "1ckghzrfgvk9z1n5f4ivnamm6s8h9sbv0a3aq9pp4a3yrhkgld0k"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ;there are no tests
@@ -2603,7 +2621,7 @@ runnable=true
     (native-inputs
      `(("godot-headless" ,godot "headless")))
     (inputs
-     `(("godot" ,godot)))
+     (list godot))
     (home-page "https://notapixel.itch.io/superstarfighter")
     (synopsis "Fast-paced local multiplayer arcade game")
     (description "In SuperStarfighter, up to four local players compete in a
@@ -2787,7 +2805,7 @@ equipped with spoken co-driver notes and co-driver icons.")
                                       (string-append out "/share/man/man6"))
                         #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("libjpeg" ,libjpeg-turbo)
        ("libpng" ,libpng)
@@ -2958,8 +2976,7 @@ properly.")
         "1dns0nhymak44by18sv48m4xb2skiwbi2i3nb9hl6w9iwd2i2brf"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libxaw" ,libxaw)
-       ("libxt" ,libxt)))
+     (list libxaw libxt))
     (home-page "https://www.gnu.org/software/gnushogi/")
     (synopsis "User interface for gnushogi")
     (description  "A graphical user interface for the package @code{gnushogi}.")
@@ -2993,9 +3010,9 @@ properly.")
                   (add-after 'set-paths 'set-sdl-paths
                     (lambda* (#:key inputs #:allow-other-keys)
                       (setenv "CPATH"
-                              (string-append (assoc-ref inputs "sdl-union")
-                                             "/include/SDL:"
-                                             (or (getenv "CPATH") "")))))
+                              (string-append
+                               (search-input-directory inputs "include/SDL2")
+                               ":" (or (getenv "CPATH") "")))))
                   (add-after 'patch-source-shebangs 'patch-makefile
                     (lambda* (#:key outputs #:allow-other-keys)
                       ;; Replace /usr with package output directory.
@@ -3011,8 +3028,8 @@ properly.")
                   ;; No configure script.
                   (delete 'configure))
        #:tests? #f)) ;; No check target.
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("sdl-union" ,(sdl-union (list sdl2 sdl2-image sdl2-mixer)))))
+    (native-inputs (list pkg-config))
+    (inputs (list (sdl-union (list sdl2 sdl2-image sdl2-mixer))))
     (home-page "https://github.com/nevat/abbayedesmorts-gpl")
     (synopsis "GNU/Linux port of the indie game \"l'Abbaye des Morts\"")
     (description "L'Abbaye des Morts is a 2D platform game set in 13th century
@@ -3025,15 +3042,16 @@ that beneath its ruins lay buried an ancient evil.")
 (define-public angband
   (package
     (name "angband")
-    (version "4.2.1")
+    (version "4.2.3")
     (source
      (origin
-       (method url-fetch)
-       (uri (string-append "https://rephial.org/downloads/"
-                           (version-major+minor version)
-                           "/angband-" version ".tar.gz"))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/angband/angband")
+             (commit version)))
+       (file-name (git-file-name name version))
        (sha256
-        (base32 "03qdavkj2ik02mqjxmlm5bn17ba3yxb1rirp8ghnxy3bsk4kbmxc"))
+        (base32 "1psrdbf90mb6dhq0b9z18pz1csnshz1kvwg82dvwa99apqdw0la8"))
        (modules '((guix build utils)))
        (snippet
         ;; So, some of the sounds/graphics/tilesets are under different
@@ -3054,18 +3072,10 @@ that beneath its ruins lay buried an ancient evil.")
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ; no check target
-       #:configure-flags (list (string-append "--bindir=" %output "/bin"))
-       #:phases
-       (modify-phases %standard-phases
-         (replace 'bootstrap
-           (lambda _
-             (substitute* "acinclude.m4"
-               (("ncursesw5-config") "ncursesw6-config"))
-             (invoke "sh" "autogen.sh"))))))
+       #:configure-flags (list (string-append "--bindir=" %output "/bin"))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
-    (inputs `(("ncurses" ,ncurses)))
+     (list autoconf automake))
+    (inputs (list ncurses))
     (home-page "https://rephial.org/")
     (synopsis "Dungeon exploration roguelike")
     (description "Angband is a Classic dungeon exploration roguelike.  Explore
@@ -3099,15 +3109,14 @@ fight Morgoth, the Lord of Darkness.")
               "#include <iostream>\n#include <functional>"))
            #t))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("scons-python2" ,scons-python2)))
-    (inputs `(("sdl" ,sdl)
-              ("sdl-image" ,sdl-image)
-              ("sdl-mixer" ,sdl-mixer)
-              ("mesa" ,mesa)
-              ("glu" ,glu)
-              ("libpng" ,libpng)
-              ("boost" ,boost)))
+    (native-inputs (list pkg-config scons-python2))
+    (inputs (list sdl
+                  sdl-image
+                  sdl-mixer
+                  mesa
+                  glu
+                  libpng
+                  boost))
     (arguments
      '(#:make-flags (list (string-append "PREFIX=" %output))
        #:tests? #f                      ; no check target
@@ -3166,24 +3175,21 @@ a C library, so they can easily be integrated into other programs.")
              "-Dr_gles30=true"
              "-Dshader_transpiler=true")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python" ,python)
-       ("python-docutils" ,python-docutils)
-       ("python-pygments" ,python-pygments)))
-    (inputs
-     `(("cglm" ,cglm)
-       ("freetype" ,freetype)
-       ("libpng" ,libpng)
-       ("libwebp" ,libwebp)
-       ("libzip" ,libzip)
-       ("mesa" ,mesa)
-       ("openssl" ,openssl)
-       ("opusfile" ,opusfile)
-       ("sdl2" ,sdl2)
-       ("sdl2-mixer" ,sdl2-mixer)
-       ("shaderc" ,shaderc)
-       ("spirv-cross" ,spirv-cross)
-       ("zlib" ,zlib)))
+     (list pkg-config python python-docutils python-pygments))
+    (inputs
+     (list cglm
+           freetype
+           libpng
+           libwebp
+           libzip
+           mesa
+           openssl
+           opusfile
+           sdl2
+           sdl2-mixer
+           shaderc
+           spirv-cross
+           zlib))
     (home-page "https://taisei-project.org/")
     (synopsis "Shoot'em up fangame and libre clone of Touhou Project")
     (description
@@ -3215,8 +3221,7 @@ is very small), and shoot at the adversaries that keep appear on the screen.")
          "1h9jz4m4s5l8c3figaq46ja0km1gimrkfxm4dg7mf4s84icmasbm"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -3228,7 +3233,7 @@ is very small), and shoot at the adversaries that keep appear on the screen.")
                (setenv "CONFIG_SHELL" (which "bash"))
                (invoke "./configure"
                        (string-append "--prefix=" out))))))))
-    (inputs `(("ncurses" ,ncurses)))
+    (inputs (list ncurses))
     (home-page "http://www.asty.org/cmatrix")
     (synopsis "Simulate the display from \"The Matrix\"")
     (description "CMatrix simulates the display from \"The Matrix\" and is
@@ -3368,10 +3373,9 @@ To that extent, it also includes a front-end for managing all of your D-Mods.")
                 "1yp8n3w426xnlp10xk06vfi2y3k9xrcfyck7s7qs1v0ys7n284d5"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)))
+     (list intltool))
     (inputs
-     `(("bzip2" ,bzip2)
-       ("wxwidgets" ,wxwidgets)))
+     (list bzip2 wxwidgets))
     (properties '((ftp-directory . "/freedink")
                   (upstream-name . "dfarc")))
     (home-page "https://www.gnu.org/software/freedink/")
@@ -3422,14 +3426,16 @@ exec ~a/bin/freedink -refdir ~a/share/dink\n"
          "1mkh36xnnacnz9r00b5f9ld9309k32jv6mcavklbdnca8bl56bib"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:phases
+     `(#:configure-flags '("CFLAGS=-fcommon")
+       #:phases
        (modify-phases %standard-phases
          ;; Fixes https://issues.guix.gnu.org/47195.
          (add-after 'unpack 'patch-aplay-path
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "xboard.conf"
                (("aplay -q")
-                (string-append (assoc-ref inputs "alsa-utils") "/bin/aplay -q")))))
+                (string-append (search-input-file inputs "/bin/aplay")
+                               " -q")))))
          ;; Fixes https://issues.guix.gnu.org/45236.
          (add-after 'unpack 'patch-default-engine
            (lambda* (#:key inputs #:allow-other-keys)
@@ -3439,13 +3445,9 @@ exec ~a/bin/freedink -refdir ~a/share/dink\n"
                                (assoc-ref inputs "chess")
                                "/bin/gnuchessx"))))))))
     (inputs
-     `(("alsa-utils" ,alsa-utils)
-       ("chess" ,chess)
-       ("gtk+" ,gtk+-2)
-       ("librsvg" ,librsvg)))
+     (list alsa-utils chess gtk+-2 librsvg))
     (native-inputs
-     `(("texinfo" ,texinfo)
-       ("pkg-config" ,pkg-config)))
+     (list texinfo pkg-config))
     (home-page "https://www.gnu.org/software/xboard/")
     (synopsis "Graphical user interface for chess programs")
     (description "GNU XBoard is a graphical board for all varieties of chess,
@@ -3479,8 +3481,7 @@ Portable Game Notation.")
                             (find-files "." "configure$|\\.c$"))
                   #t))))
     (build-system gnu-build-system)
-    (inputs `(("ncurses" ,ncurses)
-              ("perl" ,perl)))
+    (inputs (list ncurses perl))
     (home-page "https://www.gnu.org/software/gtypist/")
     (synopsis "Typing tutor")
     (description
@@ -3529,6 +3530,10 @@ are primarily in English, however some in other languages are provided.")
              ;; The actual source is buried a few directories deep.
              (chdir "source/Irrlicht/")
              #t))
+         (add-after 'chdir-to-source 'remove-<sys/sysctl.h>
+           (lambda _
+             (substitute* "COSOperator.cpp"
+               (("#include <sys/sysctl.h>") ""))))
          (add-after 'chdir-to-source 'fix-build-env
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
@@ -3556,7 +3561,7 @@ are primarily in English, however some in other languages are provided.")
 C++.  Features include an OpenGL renderer, extensible materials, scene graph
 management, character animation, particle and other special effects, support
 for common mesh file formats, and collision detection.")
-    (home-page "http://irrlicht.sourceforge.net/")
+    (home-page "https://irrlicht.sourceforge.io/")
     (license license:zlib)))
 
 (define-public mars
@@ -3599,10 +3604,7 @@ for common mesh file formats, and collision detection.")
                                 "/share/games/marsshooter/\";")))
               #t)))))
       (inputs
-       `(("mesa" ,mesa)
-         ("fribidi" ,fribidi)
-         ("taglib" ,taglib)
-         ("sfml" ,sfml)))
+       (list mesa fribidi taglib sfml))
       (home-page "http://mars-game.sourceforge.net/")
       (synopsis "2D space shooter")
       (description
@@ -3705,9 +3707,7 @@ reference interpreter, using the Glk API.")
                 "0wxs9vz5x9y8chghd8vp7vfk089lfb0qnzggi17zrqkrngs5zgi9"))))
     (build-system cmake-build-system)
     (inputs
-     `(("sdl2" ,sdl2)
-       ("sdl2-image" ,sdl2-image)
-       ("mesa" ,mesa)))
+     (list sdl2 sdl2-image mesa))
     (arguments
      '(#:tests? #f))                    ; No included tests
     (home-page "https://fifengine.github.io/fifechan/")
@@ -3727,85 +3727,64 @@ Widgets, and allows users to create more.")
               (uri (string-append "https://codeload.github.com/fifengine/"
                                   "fifengine/tar.gz/" version))
               (file-name (string-append name "-" version ".tar.gz"))
-              (patches (search-patches "fifengine-swig-compat.patch"))
+              (patches (search-patches "fifengine-swig-compat.patch"
+                                       "fifengine-boost-compat.patch"))
               (sha256
                (base32
                 "1y4grw25cq5iqlg05rnbyxw1njl11ypidnlsm3qy4sm3xxdvb0p8"))))
     (build-system cmake-build-system)
     (arguments
-     `(#:tests? #f            ; TODO The test running fails to run some tests.
-       #:modules ((srfi srfi-1)
-                  (guix build cmake-build-system)
-                  (guix build utils))
-       #:configure-flags
-       (list
-        (string-append "-DOPENALSOFT_INCLUDE_DIR="
-                       (assoc-ref %build-inputs "openal")
-                       "/include/AL")
-        (string-append "-DPYTHON_SITE_PACKAGES="
-                       (assoc-ref %outputs "out")
-                       "/lib/python"
-                       ,(version-major+minor (package-version python))
-                       "/site-packages"))
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'patch-run_tests.py
-           (lambda _
-             ;; Patch the test runner to exit with a status of 1 if any test
-             ;; fails, to allow detecting failures.
-             (substitute* "run_tests.py"
-               (("ERROR\\. One or more tests failed!'\\)")
-                "ERROR. One or more tests failed!')
-\t\texit(1)"))
-             #t))
-         ;; Run tests after installation so that we can make use of the built
-         ;; python modules.
-         (delete 'check)
-         (add-after 'install 'check
-           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
-             (define python-version
-               (let* ((version     (last (string-split
-                                          (assoc-ref inputs "python")
-                                          #\-)))
-                      (components  (string-split version #\.))
-                      (major+minor (take components 2)))
-                 (string-join major+minor ".")))
-
-             (when tests?
-               ;; Set PYTHONPATH so that python finds the installed modules.
-               (setenv "PYTHONPATH"
-                       (string-append (getenv "PYTHONPATH") ":"
-                                      (assoc-ref outputs "out")
-                                      "/lib/python"
-                                      python-version
-                                      "/site-packages"))
-               ;; The tests require an X server.
-               (system "Xvfb :1 &")
-               (setenv "DISPLAY" ":1")
-               (setenv "XDG_RUNTIME_DIR" "/tmp")
-               ;; Run tests
-               (chdir ,(string-append "../" name "-" version))
-               (invoke "python3" "run_tests.py" "-a"))
-             #t)))))
-    (inputs
-     `(("sdl2" ,sdl2)
-       ("sdl2-image" ,sdl2-image)
-       ("sdl2-ttf" ,sdl2-ttf)
-       ("tinyxml" ,tinyxml)
-       ("openal" ,openal)
-       ("libogg" ,libogg)
-       ("glew" ,glew)
-       ("libvorbis" ,libvorbis)
-       ("boost" ,boost)
-       ("fifechan" ,fifechan)
-       ("swig" ,swig)
-       ("python" ,python)))
-    (native-inputs
-     `(("python" ,python)
-       ("swig" ,swig)
-       ("xvfb" ,xorg-server)))
+     (list #:tests? #f         ;TODO The test running fails to run some tests.
+           #:configure-flags
+           #~(list
+              (string-append "-DOPENALSOFT_INCLUDE_DIR="
+                             (search-input-directory %build-inputs "include/AL"))
+              (string-append "-DPYTHON_SITE_PACKAGES="
+                             #$output "/lib/python"
+                             #$(version-major+minor
+                                (package-version (this-package-input "python")))
+                             "/site-packages"))
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'patch-run_tests.py
+                 (lambda _
+                   ;; Patch the test runner to exit with a status of 1 if any test
+                   ;; fails, to allow detecting failures.
+                   (substitute* "run_tests.py"
+                     (("ERROR\\. One or more tests failed!'\\)")
+                      "ERROR. One or more tests failed!')
+\t\texit(1)"))))
+               ;; Run tests after installation so that we can make use of the built
+               ;; python modules.
+               (delete 'check)
+               (add-after 'install 'check
+                 (lambda* (#:key tests? #:allow-other-keys)
+                   (when tests?
+                     ;; The tests require an X server.
+                     (system "Xvfb :1 &")
+                     (setenv "DISPLAY" ":1")
+                     (setenv "XDG_RUNTIME_DIR" "/tmp")
+                     ;; Run tests
+                     (chdir #$(string-append "../" (package-name this-package)
+                                             "-" (package-version this-package)))
+                     (invoke "python3" "run_tests.py" "-a")))))))
+    (native-inputs
+     (list python swig xorg-server-for-tests))
+    (inputs
+     (list sdl2
+           sdl2-image
+           sdl2-ttf
+           tinyxml
+           openal
+           libogg
+           glew
+           libvorbis
+           boost
+           fifechan
+           swig
+           python))
     (propagated-inputs
-     `(("python-future" ,python-future)))
+     (list python-future))
     (home-page "https://www.fifengine.net/")
     (synopsis "FIFE is a multi-platform isometric game engine written in C++")
     (description
@@ -3832,7 +3811,7 @@ games using Python as well as C++.")
              (ncurses (assoc-ref %build-inputs "ncurses")))
          (list (string-append "--with-jpeg-includedir=" libjpeg "/include")))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("freetype" ,freetype)
        ("libjpeg" ,libjpeg-turbo)
@@ -3861,7 +3840,10 @@ either by Infocom or created using the Inform compiler.")
               (base32
                "0wkahvqpzq6lzl5r49a4sd4p52frdmphnqsfdv7gdp24bykdfs6s"))))
     (build-system gnu-build-system)
-    (inputs `(("readline" ,readline)))
+    (inputs
+     (list readline))
+    (arguments
+     `(#:configure-flags '("CFLAGS=-fcommon")))
     (synopsis "Play the game of Go")
     (description
      "GNU Go is a program that plays the game of Go, in which players
@@ -3888,10 +3870,9 @@ Protocol).")
                 "0hc3qd9hv3h9qm53yxgc7iy1v1wyajwxyvil4vqvzf9ascz9dnlj"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("glu" ,glu)
-       ("sfml" ,sfml)))
+     (list glu sfml))
     (synopsis "High-speed arctic racing game based on Tux Racer")
     ;; Snarfed straight from Debian.
     (description "Extreme Tux Racer, or etracer as it is called for short, is
@@ -3909,15 +3890,16 @@ This game is based on the GPL version of the famous game TuxRacer.")
 (define-public supertuxkart
   (package
     (name "supertuxkart")
-    (version "1.2")
+    (version "1.3")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "mirror://sourceforge/supertuxkart/SuperTuxKart/"
+       (uri (string-append "https://github.com/supertuxkart/stk-code/"
+                           "releases/download/"
                            version "/SuperTuxKart-" version "-src.tar.xz"))
        (sha256
         (base32
-         "0dvx56hmy6wdhl7m9dw8zc1n3jqfp05gnxl6zs1rbfdyzl5dybh5"))
+         "1z9z13zarv28h4jrmjna5hr6m9266pm7c2kgiwhqls01k06ypazf"))
        (modules '((guix build utils)))
        (snippet
         ;; Delete bundled library sources
@@ -3927,17 +3909,18 @@ This game is based on the GPL version of the famous game TuxRacer.")
            ;; here: http://forum.freegamedev.net/viewtopic.php?f=17&t=3906
            ;; FIXME: try to unbundle angelscript, libmcpp and libraqm
            (for-each delete-file-recursively
-                     '("lib/glew"
-                       "lib/wiiuse"
-                       "lib/enet"))
+                     '("lib/dnsc"
+                       "lib/enet"
+                       "lib/mojoal"
+                       "lib/wiiuse"))
            #t))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f ; no check target
        #:configure-flags
        (list "-DUSE_WIIUSE=0"
-             "-DUSE_SYSTEM_GLEW=TRUE"
              "-DUSE_SYSTEM_ENET=TRUE"
+             "-DUSE_CRYPTO_OPENSSL=TRUE"
              ;; In order to use the system ENet library, IPv6 support (added in
              ;; SuperTuxKart version 1.1) must be disabled.
              "-DUSE_IPV6=FALSE"
@@ -3955,6 +3938,7 @@ This game is based on the GPL version of the famous game TuxRacer.")
        ("mesa" ,mesa)
        ("openal" ,openal)
        ("sdl2" ,sdl2)
+       ("sqlite" ,sqlite)
        ("zlib" ,zlib)
        ;; The following input is needed to build the bundled and modified
        ;; version of irrlicht.
@@ -3962,7 +3946,7 @@ This game is based on the GPL version of the famous game TuxRacer.")
        ("libjpeg" ,libjpeg-turbo)
        ("openssl" ,openssl)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://supertuxkart.net/Main_Page")
     (synopsis "3D kart racing game")
     (description "SuperTuxKart is a 3D kart racing game, with a focus on
@@ -4031,14 +4015,13 @@ also available.")
        ("python-pillow" ,python-pillow)
        ("python-pyyaml" ,python-pyyaml)))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("python-distro" ,python-distro)
-
-       ;; Required for tests
-       ("python-greenlet" ,python-greenlet)
-       ("python-polib" ,python-polib)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-mock" ,python-pytest-mock)))
+     (list intltool
+           python-distro
+           ;; Required for tests
+           python-greenlet
+           python-polib
+           python-pytest
+           python-pytest-mock))
     (home-page "https://unknown-horizons.org/")
     (synopsis "Isometric realtime strategy, economy and city building simulation")
     (description
@@ -4090,11 +4073,7 @@ trade and diplomacy.")
                            Categories=Game;ArcadeGame~%"
                            out)))))))))
     (inputs
-     `(("glu" ,glu)
-       ("mesa" ,mesa)
-       ("sdl" ,sdl)
-       ("sdl-image" ,sdl-image)
-       ("sdl-mixer" ,sdl-mixer)))
+     (list glu mesa sdl sdl-image sdl-mixer))
     (home-page "http://gnujump.es.gnu.org/")
     (synopsis
      "Game of jumping to the next floor, trying not to fall")
@@ -4108,7 +4087,7 @@ falling, themeable graphics and sounds, and replays.")
 (define-public wesnoth
   (package
     (name "wesnoth")
-    (version "1.14.17")
+    (version "1.16.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/wesnoth/wesnoth-"
@@ -4117,7 +4096,7 @@ falling, themeable graphics and sounds, and replays.")
                                   "wesnoth-" version ".tar.bz2"))
               (sha256
                (base32
-                "1qc4ylhc4ab51milclzhflpmzw6bg35knwqaj3b157700jkcniin"))))
+                "0cyrwmdg93pqpdm7030540jznaky9rda355i9ym8am4k9civlcwf"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f))                    ;no check target
@@ -4125,13 +4104,13 @@ falling, themeable graphics and sounds, and replays.")
      `(("gettext" ,gettext-minimal)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("boost" ,boost)
-       ("dbus" ,dbus)
-       ("fribidi" ,fribidi)
-       ("libvorbis" ,libvorbis)
-       ("openssl" ,openssl)
-       ("pango" ,pango)
-       ("sdl-union" ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))))
+     (list boost
+           dbus
+           fribidi
+           libvorbis
+           openssl
+           pango
+           (sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf))))
     (home-page "https://www.wesnoth.org/")
     (synopsis "Turn-based strategy game")
     (description
@@ -4150,10 +4129,7 @@ next campaign.")
     (inherit wesnoth)
     (name "wesnoth-server")
     (inputs
-     `(("boost" ,boost)
-       ("icu4c" ,icu4c)
-       ("openssl" ,openssl)
-       ("sdl2" ,sdl2)))
+     (list boost icu4c openssl sdl2))
     (arguments
      `(#:configure-flags '("-DENABLE_GAME=OFF")
        ,@(package-arguments wesnoth)))
@@ -4174,13 +4150,12 @@ Battle for Wesnoth}.")))
                 "1sc6f4445ciigd6yw0ri92746k4hk6ps0bvj9fm1gbp3c3fslk5n"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (inputs
-     `(("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base) ; playbin plugin
-       ("gst-plugins-good" ,gst-plugins-good) ; for wav playback
-       ("gtk+" ,gtk+)))
+     (list gstreamer
+           gst-plugins-base ; playbin plugin
+           gst-plugins-good ; for wav playback
+           gtk+))
     (arguments
      `(#:tests? #f
        #:make-flags
@@ -4226,13 +4201,10 @@ on the screen and keyboard to display letters.")
                             (assoc-ref %build-inputs "sdl-union")
                             "/include/SDL"))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("glu" ,glu)
-       ("curl" ,curl)
-       ("libxml2" ,libxml2)
-       ("mesa" ,mesa)
-       ("sdl-union" ,(sdl-union))))
+     (list glu curl libxml2 mesa
+           (sdl-union)))
     (home-page "https://manaplus.org")
     (synopsis "Client for 'The Mana World' and similar games")
     (description
@@ -4248,14 +4220,14 @@ world}, @uref{http://evolonline.org, Evol Online} and
 (define openttd-engine
   (package
     (name "openttd-engine")
-    (version "1.11.2")
+    (version "12.0")
     (source
      (origin (method url-fetch)
              (uri (string-append "https://cdn.openttd.org/openttd-releases/"
                                  version "/openttd-" version "-source.tar.xz"))
              (sha256
               (base32
-               "0v9f93lsdcv3ia28y8iihx9nj9zp6fpf5hkdrpl4ypw159d97fhg"))))
+               "1p1j5cf4ry57dcgm7qx2g2s00z1c6qgjabb4kqjp00yz00wgv85v"))))
     (build-system cmake-build-system)
     (inputs
      `(("allegro" ,allegro)
@@ -4285,7 +4257,7 @@ engine.  When you start it you will be prompted to download a graphics set.")
 (define openttd-opengfx
   (package
     (name "openttd-opengfx")
-    (version "0.6.1")
+    (version "7.1")
     (source
      (origin
        (method url-fetch)
@@ -4293,10 +4265,10 @@ engine.  When you start it you will be prompted to download a graphics set.")
                            version "/opengfx-" version "-source.tar.xz"))
        (sha256
         (base32
-         "0jgy8xv7r72m127qn09vr3rxhnbakl2990f7lldsk0d5d8n993vd"))))
+         "0nhzlk6s73qvznm5fdwcs1b42g2plf26s5ag39fvck45zm7m48jk"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:make-flags (list "CC=gcc"
+     `(#:make-flags (list (string-append "CC=" ,(cc-for-target))
                           (string-append "INSTALL_DIR="
                                          (assoc-ref %outputs "out")
                                          "/share/games/openttd/baseset/opengfx"))
@@ -4324,7 +4296,7 @@ engine.  When you start it you will be prompted to download a graphics set.")
                      ("grfcodec" ,grfcodec)
                      ("nml" ,nml)
                      ("which" ,which)
-                     ("python" ,python-2)))
+                     ("python" ,python)))
     (home-page "http://dev.openttdcoop.org/projects/opengfx")
     (synopsis "Base graphics set for OpenTTD")
     (description
@@ -4344,7 +4316,7 @@ OpenGFX provides you with...
 (define openttd-opensfx
   (package
     (name "openttd-opensfx")
-    (version "1.0.1")
+    (version "1.0.2")
     (source
      (origin
        (method url-fetch)
@@ -4353,17 +4325,17 @@ OpenGFX provides you with...
              version "/opensfx-" version "-source.tar.xz"))
        (sha256
         (base32
-         "06vycppqcxbfdqlxzna5xr303zgcmpcvj6ylw5b2ws0ssph2f1s0"))))
+         "0aym026lg0r7dp3jxxs9c0rj8lwy1fz3v9hmk3mml6sycsg3fv42"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("catcodec" ,catcodec)
-       ("python" ,python-2)
+       ("python" ,python)
        ("tar" ,tar)))
     (arguments
      `(#:make-flags
        (list (string-append "DIR_NAME=opensfx")
-             (string-append "TAR=" (assoc-ref %build-inputs "tar")
-                            "/bin/tar"))
+             (string-append "TAR="
+                            (search-input-file %build-inputs "/bin/tar")))
        ;; The check phase only verifies md5sums, see openttd-opengfx.
        #:tests? #f
        #:phases
@@ -4394,7 +4366,7 @@ the original Transport Tycoon Deluxe.")
 (define openttd-openmsx
   (package
     (name "openttd-openmsx")
-    (version "0.4.0")
+    (version "0.4.2")
     (source
      (origin
        (method url-fetch)
@@ -4403,17 +4375,19 @@ the original Transport Tycoon Deluxe.")
              version "/openmsx-" version "-source.tar.xz"))
        (sha256
         (base32
-         "0prjljsdgdxqdhhcriqskqha004ybs575xcjq80zha3pqnmrdk0k"))))
+         "0h583d8fxy78kc3jvpp78r76a48qhxrhm4q7jbnj74aw0kwrcl8g"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("grfcodec" ,grfcodec)
-       ("python" ,python-2)
+       ; Scripts are Python3 compatible, but call the interpreter as
+       ; python instead of python3.
+       ("python" ,python-wrapper)
        ("tar" ,tar)))
     (arguments
      `(#:make-flags
        (list (string-append "DIR_NAME=openmsx")
-             (string-append "TAR=" (assoc-ref %build-inputs "tar")
-                            "/bin/tar"))
+             (string-append "TAR="
+                            (search-input-file %build-inputs "/bin/tar")))
        ;; The check phase only verifies md5sums, see openttd-opengfx.
        #:tests? #f
        #:phases
@@ -4450,8 +4424,8 @@ Transport Tycoon Deluxe.")
                                   (assoc-ref outputs "out")))
               (list "opengfx" "openmsx" "opensfx")))))))
     (inputs
-     `(("timidity++" ,timidity++)
-       ,@(package-inputs openttd-engine)))
+     (modify-inputs (package-inputs openttd-engine)
+       (prepend timidity++)))
     (native-inputs
      `(("opengfx" ,openttd-opengfx)
        ("openmsx" ,openttd-openmsx)
@@ -4485,7 +4459,7 @@ Transport Tycoon Deluxe.")
                (openrct2-title-sequences (string-append out
                                          "/share/openrct2/title-sequences"))
                (source (assoc-ref %build-inputs "source"))
-               (unzip (string-append (assoc-ref %build-inputs "unzip") "/bin/unzip")))
+               (unzip (search-input-file %build-inputs "/bin/unzip")))
           (copy-file source (string-append ,name "-" ,version ".zip"))
           (invoke unzip (string-append ,name "-" ,version ".zip"))
           (delete-file (string-append ,name "-" ,version ".zip"))
@@ -4525,7 +4499,7 @@ Transport Tycoon Deluxe.")
                (openrct2-objects (string-append out
                                          "/share/openrct2/objects"))
                (source (assoc-ref %build-inputs "source"))
-               (unzip (string-append (assoc-ref %build-inputs "unzip") "/bin/unzip")))
+               (unzip (search-input-file %build-inputs "/bin/unzip")))
           (copy-file source (string-append ,name "-" ,version ".zip"))
           (invoke unzip (string-append ,name "-" ,version ".zip"))
           (delete-file (string-append ,name "-" ,version ".zip"))
@@ -4585,10 +4559,10 @@ Transport Tycoon Deluxe.")
               ("freetype" ,freetype)
               ("icu4c" ,icu4c)
               ("jansson" ,jansson)
+              ("json-modern-cxx" ,json-modern-cxx)
               ("libpng" ,libpng)
               ("libzip" ,libzip)
               ("mesa" ,mesa)
-              ("nlohmann-json-cpp" ,nlohmann-json-cpp)
               ("openrct2-objects" ,openrct2-objects)
               ("openrct2-title-sequences" ,openrct2-title-sequences)
               ("openssl" ,openssl)
@@ -4596,7 +4570,7 @@ Transport Tycoon Deluxe.")
               ("speexdsp" ,speexdsp)
               ("zlib" ,zlib)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/OpenRCT2/OpenRCT2")
     (synopsis "Free software re-implementation of RollerCoaster Tycoon 2")
     (description "OpenRCT2 is a free software re-implementation of
@@ -4625,17 +4599,14 @@ images, etc.)")
              (patches (search-patches "pinball-system-ltdl.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ("libtool" ,libtool)))
+     (list autoconf automake pkg-config libtool))
     (inputs
-     `(("glu" ,glu)
-       ("libltdl" ,libltdl)
-       ("mesa" ,mesa)
-       ("sdl" ,sdl)
-       ("sdl-image" ,sdl-image)
-       ("sdl-mixer" ,sdl-mixer)))
+     (list glu
+           libltdl
+           mesa
+           sdl
+           sdl-image
+           sdl-mixer))
     (arguments
      '(#:configure-flags
        ;; Configure tries to use pkg-config, but falls short, so:
@@ -4682,14 +4653,8 @@ are only two levels to play with, but they are very addictive.")
                (("\"beep\"")
                 (string-append "\"" (assoc-ref inputs "beep") "/bin/beep\"")))
              #t)))))
-    (inputs `(("avahi" ,avahi)
-              ("beep" ,beep)
-              ("gtk+" ,gtk+)
-              ("librsvg" ,librsvg)))
-    (native-inputs `(("intltool" ,intltool)
-                     ("itstool" ,itstool)
-                     ("libxml2" ,libxml2)
-                     ("pkg-config" ,pkg-config)))
+    (inputs (list avahi beep gtk+ librsvg))
+    (native-inputs (list intltool itstool libxml2 pkg-config))
     (synopsis "Board game inspired by The Settlers of Catan")
     (description "Pioneers is an emulation of the board game The Settlers of
 Catan.  It can be played on a local network, on the internet, and with AI
@@ -4715,7 +4680,7 @@ players.")
        ("sdl" ,(sdl-union (list sdl sdl-mixer sdl-ttf)))
        ("zlib" ,zlib)))
     (native-inputs
-     `(("font-dejavu" ,font-dejavu)))
+     (list font-dejavu))
     (arguments
      `(#:tests? #f ; no check target
        #:phases
@@ -4723,8 +4688,8 @@ players.")
           (replace 'configure
           (lambda* (#:key outputs inputs #:allow-other-keys)
             (let ((out (assoc-ref outputs "out"))
-                  (dejavu (string-append (assoc-ref inputs "font-dejavu")
-                                         "/share/fonts/truetype/DejaVuSans.ttf")))
+                  (dejavu (search-input-file
+                           inputs "/share/fonts/truetype/DejaVuSans.ttf")))
               (substitute* "Makefile"
                 (("PREFIX=/usr/local") (string-append "PREFIX=" out)))
               ;; The patch above registers a free font for use by the binary,
@@ -4748,7 +4713,7 @@ is attributed to Albert Einstein.")
 (define-public powwow
   (package
     (name "powwow")
-    (version "1.2.22")
+    (version "1.2.23")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -4756,9 +4721,9 @@ is attributed to Albert Einstein.")
                     version ".tar.gz"))
               (sha256
                (base32
-                "12i11b8zxg8vdb9d6ims8qy2lmwwr42rcqbwq3vsa1x94s51bcbp"))))
+                "1wkl6j91pp40aps2hhnsv0bndgq49smfffws4hqcn7847bpnwwm6"))))
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (build-system gnu-build-system)
     (home-page "https://www.hoopajoo.net/projects/powwow.html")
     (synopsis "MUD and telnet client")
@@ -4816,10 +4781,9 @@ http://lavachat.symlynx.com/unix/")
            (add-after 'set-paths 'set-sdl-paths
              (lambda* (#:key inputs #:allow-other-keys)
                (setenv "CPATH"
-                       (string-append (assoc-ref inputs "sdl-union")
-                                      "/include/SDL2:"
-                                      (or (getenv "CPATH") "")))
-               #t))
+                       (string-append
+                        (search-input-directory inputs "/include/SDL2")
+                        ":" (or (getenv "CPATH") "")))))
            (add-after 'install 'copy-data
              (lambda* (#:key outputs #:allow-other-keys)
                (let ((out (assoc-ref outputs "out")))
@@ -4864,14 +4828,10 @@ exec -a \"$0\" ~a/.redeclipse_server_linux-real~%"
                    (chmod "redeclipse_server_linux" #o555)))
                #t)))))
       (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
       (inputs
-       `(("curl" ,curl)
-         ("freetype" ,freetype)
-         ("glu" ,glu)
-         ("sdl-union" ,(sdl-union (list sdl2
-                                        sdl2-image
-                                        sdl2-mixer)))))
+       (list curl freetype glu
+             (sdl-union (list sdl2 sdl2-image sdl2-mixer))))
       (home-page "https://redeclipse.net/")
       (synopsis "Arena shooter derived from the Cube 2 engine")
       (description
@@ -4972,15 +4932,10 @@ capture it and get out alive?")
                   #t))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("imagemagick" ,imagemagick)
-       ("pkg-config" ,pkg-config)
-       ("util-linux" ,util-linux)
-       ("sox" ,sox)))
+     (list imagemagick pkg-config util-linux sox))
     (inputs
-     `(("boost" ,boost)
-       ("libconfig" ,libconfig)
-       ("sdl-union" ,(sdl-union (list sdl sdl-image sdl-mixer)))
-       ("zlib" ,zlib)))
+     (list boost libconfig
+           (sdl-union (list sdl sdl-image sdl-mixer)) zlib))
     (home-page "https://gitlab.com/lierolibre/lierolibre")
     (synopsis "Old-school earthworm action game")
     (description
@@ -5057,7 +5012,7 @@ fullscreen, use F5 or Alt+Enter.")
            (lambda _
              (invoke "./configure" "--prefix" (assoc-ref %outputs "out")))))))
     (native-inputs
-     `(("which" ,which)))
+     (list which))
     (inputs
      `(("python" ,python-wrapper)
        ("sdl" ,(sdl-union (list sdl sdl-image sdl-mixer sdl-ttf sdl-net)))))
@@ -5180,7 +5135,8 @@ tactics.")
        (patches
         ;; Use system Minizip.  Patch is provided by Debian, and discussed
         ;; upstream at <https://github.com/widelands/widelands/issues/399>.
-        (search-patches "widelands-system-wide_minizip.patch"))))
+        (search-patches "widelands-system-wide_minizip.patch"
+                        "widelands-add-missing-map-include.patch"))))
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags
@@ -5271,13 +5227,9 @@ of war.  Widelands also offers an Artificial Intelligence to challenge you.")
                 "0ips79j3sdy8wa64jqka0skbbqkzqiln9bbiiilh4z717q7vz9r5"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("pango" ,pango)
-       ("sdl2" ,sdl2)
-       ("sdl2-image" ,sdl2-image)
-       ("sdl2-mixer" ,sdl2-mixer)
-       ("sdl2-ttf" ,sdl2-ttf)))
+     (list pango sdl2 sdl2-image sdl2-mixer sdl2-ttf))
     (home-page "https://pr-starfighter.github.io/")
     (synopsis "2D scrolling shooter game")
     (description
@@ -5306,11 +5258,9 @@ in strikes against the evil corporation.")
                (base32
                 "0jk2w5b6s6nkzri585bbz16cif2fhqcnl5l1mq3rd98r9nil3hd1"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("gettext" ,gettext-minimal)
-              ("glu" ,glu)
-              ("quesoglc" ,quesoglc)
-              ("sdl-union" ,(sdl-union (list sdl sdl-image sdl-mixer)))))
+    (native-inputs (list pkg-config))
+    (inputs (list gettext-minimal glu quesoglc
+                  (sdl-union (list sdl sdl-image sdl-mixer))))
     (home-page "http://chromium-bsu.sourceforge.net/")
     (synopsis "Fast-paced, arcade-style, top-scrolling space shooter")
     (description
@@ -5348,8 +5298,7 @@ safety of the Chromium vessel.")
        (patches (search-patches "tuxpaint-stamps-path.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("gperf" ,gperf)
-       ("pkg-config" ,pkg-config)))
+     (list gperf pkg-config))
     (inputs
      `(("cairo" ,cairo)
        ("fribidi" ,fribidi)
@@ -5420,8 +5369,7 @@ your child be creative.")
          "1skr23k27yj3vgwfazpzxp90lb2a278gxrkr3bxw7az6zpkmb3yp"))))
     (build-system trivial-build-system)
     (native-inputs
-     `(("tar" ,tar)
-       ("gzip" ,gzip)))
+     (list tar gzip))
     (arguments
      `(#:modules ((guix build utils))
        #:builder (begin
@@ -5459,12 +5407,12 @@ with the \"Stamp\" tool within Tux Paint.")
     (native-inputs
      `(("gettext" ,gettext-minimal)))
     (inputs
-     `(("fltk" ,fltk)
-       ("libpaper" ,libpaper)
-       ;; TODO: Should the following be propagated by fltk?
-       ("libx11" ,libx11)
-       ("libxft" ,libxft)
-       ("mesa" ,mesa)))
+     (list fltk
+           libpaper
+           ;; TODO: Should the following be propagated by fltk?
+           libx11
+           libxft
+           mesa))
     (arguments
      `(#:make-flags `("VER_DATE=2018-09-01"
                       "CONFDIR=/etc/tuxpaint" ;don't write to store
@@ -5494,7 +5442,7 @@ with the \"Stamp\" tool within Tux Paint.")
 (define-public supertux
   (package
    (name "supertux")
-   (version "0.6.2")
+   (version "0.6.3")
    (source (origin
             (method url-fetch)
             (uri (string-append "https://github.com/SuperTux/supertux/"
@@ -5503,7 +5451,7 @@ with the \"Stamp\" tool within Tux Paint.")
             (file-name (string-append name "-" version ".tar.gz"))
             (sha256
              (base32
-              "167m3z4m8n76dvbv42m1fnvabpbpsxvr28zk9641916jl9pfba96"))
+              "1xkr3ka2sxp5s0spp84iv294i29s1vxqzazb6kmjc0n415h0x57p"))
             (patches
              (search-patches "supertux-unbundle-squirrel.patch"))))
    (arguments
@@ -5523,21 +5471,22 @@ with the \"Stamp\" tool within Tux Paint.")
                  (string-append "${SQUIRREL_PREFIX}/include/squirrel"))))
             #t)))))
    (build-system cmake-build-system)
-   (inputs `(("sdl2" ,sdl2)
-             ("sdl2-image" ,sdl2-image)
-             ("sdl2-mixer" ,sdl2-mixer)
-             ("openal" ,openal)
-             ("mesa" ,mesa)
-             ("glew" ,glew)
-             ("libvorbis" ,libvorbis)
-             ("libogg" ,libogg)
-             ("physfs" ,physfs)
-             ("curl" ,curl)
-             ("boost" ,boost)
-             ("freetype" ,freetype)
-             ("squirrel" ,squirrel)))
+   (inputs (list boost
+                 curl
+                 freetype
+                 glew
+                 glm
+                 libogg
+                 libvorbis
+                 mesa
+                 openal
+                 physfs
+                 sdl2
+                 sdl2-image
+                 sdl2-mixer
+                 squirrel))
    (native-inputs
-    `(("pkg-config" ,pkg-config)))
+    (list pkg-config))
    (synopsis "2D platformer game")
    (description "SuperTux is a classic 2D jump'n run sidescroller game in
 a style similar to the original Super Mario games.")
@@ -5547,7 +5496,7 @@ a style similar to the original Super Mario games.")
 (define-public tintin++
   (package
     (name "tintin++")
-    (version "2.02.11")
+    (version "2.02.12")
     (source
      (origin
        (method url-fetch)
@@ -5555,12 +5504,9 @@ a style similar to the original Super Mario games.")
                            (string-drop-right version 1)
                            "/tintin-" version ".tar.gz"))
        (sha256
-        (base32 "1xdim1ckq1kgjyxmghcnvnahq1llv2y70gz3yyvzbli63vpqk4mk"))))
+        (base32 "000sg16w7790ha8ys31qjh1ip5hl02ldfwj1zy6dqz0y5i7zvydn"))))
     (inputs
-     `(("gnutls" ,gnutls)
-       ("pcre" ,pcre)
-       ("readline" ,readline)
-       ("zlib" ,zlib)))
+     (list gnutls pcre readline zlib))
     (arguments
      '(#:tests? #f                      ; no test suite
        #:phases
@@ -5596,7 +5542,7 @@ Linux / Mac OS X servers, and an auto mapper with a VT100 map display.")
              (patches (search-patches "laby-make-install.patch"))))
     (build-system gnu-build-system)
     (inputs
-     `(("lablgtk" ,lablgtk)
+     `(("lablgtk3" ,lablgtk3)
        ("ocaml" ,ocaml)
        ("ocaml-findlib" ,ocaml-findlib)
        ("ocamlbuild" ,ocamlbuild)))
@@ -5604,15 +5550,9 @@ Linux / Mac OS X servers, and an auto mapper with a VT100 map display.")
      '(#:phases
        (modify-phases %standard-phases
          (delete 'configure)
-         (add-before 'build 'allow-unsafe-strings
-           ;; Fix a build failure with ocaml >=4.06.0.
-           ;; See <https://github.com/sgimenez/laby/issues/53>.
-           (lambda _
-             (setenv "OCAMLPARAM" "safe-string=0,_")
-             #t))
          (add-before 'build 'set-library-path
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((lablgtk (assoc-ref inputs "lablgtk")))
+             (let ((lablgtk (assoc-ref inputs "lablgtk3")))
                (setenv "LD_LIBRARY_PATH"
                        (string-append lablgtk "/lib/ocaml/stublibs"))))))
        #:tests? #f ; no 'check' target
@@ -5656,7 +5596,7 @@ programmers may also add their own favorite language.")
                (copy-recursively "data" (string-append share "/bambam/data")))
              #t)))))
     (inputs
-     `(("python-pygame" ,python-pygame)))
+     (list python-pygame))
     (home-page "https://github.com/porridge/bambam")
     (synopsis "Keyboard mashing and doodling game for babies")
     (description "Bambam is a simple baby keyboard (and gamepad) masher
@@ -5687,14 +5627,10 @@ colors, pictures, and sounds.")
                 (script (string-append out "/bin/" ,name))
                 (data   (string-append out "/share/" ,name))
                 (source (assoc-ref %build-inputs "source"))
-                (unzip  (string-append (assoc-ref %build-inputs "unzip")
-                                       "/bin/unzip"))
-                (patch  (string-append (assoc-ref %build-inputs "patch")
-                                       "/bin/patch"))
-                (bash   (string-append (assoc-ref %build-inputs "bash")
-                                       "/bin/bash"))
-                (love   (string-append (assoc-ref %build-inputs "love")
-                                       "/bin/love")))
+                (unzip  (search-input-file %build-inputs "/bin/unzip"))
+                (patch  (search-input-file %build-inputs "/bin/patch"))
+                (bash   (search-input-file %build-inputs "/bin/bash"))
+                (love   (search-input-file %build-inputs "/bin/love")))
 
            (mkdir-p (dirname script))
            (with-output-to-file script
@@ -5720,8 +5656,7 @@ colors, pictures, and sounds.")
        ("patch" ,patch)
        ("love-11.patch" ,(search-patch "mrrescue-support-love-11.patch"))))
     (inputs
-     `(("bash" ,bash)
-       ("love" ,love)))
+     (list bash love))
     (home-page "https://tangramgames.dk/games/mrrescue")
     (synopsis "Arcade-style fire fighting game")
     (description
@@ -5800,7 +5735,7 @@ throwing people around in pseudo-randomly generated buildings.")
              (let* ((data (assoc-ref inputs "hyperrogue-data"))
                     (out (assoc-ref outputs "out"))
                     (sounds (string-append out "/share/hyperrogue/sounds"))
-                    (unzip (string-append (assoc-ref inputs "unzip") "/bin/unzip")))
+                    (unzip (search-input-file inputs "/bin/unzip")))
                ;; Extract media license information into sounds directory.
                (invoke unzip "-j" data
                        (string-append
@@ -5827,13 +5762,8 @@ throwing people around in pseudo-randomly generated buildings.")
              "11yhbia45f1w9z0j67h9nynwjqmvakr9l6rnrmdrdkzin6lvzzj4"))))
        ("unzip" ,unzip)))
     (inputs
-     `(("font-dejavu" ,font-dejavu)
-       ("glew" ,glew)
-       ("libpng" ,libpng)
-       ("sdl-union" ,(sdl-union (list sdl
-                                      sdl-gfx
-                                      sdl-mixer
-                                      sdl-ttf)))))
+     (list font-dejavu glew libpng
+           (sdl-union (list sdl sdl-gfx sdl-mixer sdl-ttf))))
     (home-page "https://www.roguetemple.com/z/hyper/")
     (synopsis "Non-euclidean graphical rogue-like game")
     (description
@@ -5880,8 +5810,8 @@ symbols, it still needs graphics to render the non-euclidean world.")
                             (assoc-ref %build-inputs "sdl-union")
                             "/include/SDL"))))
     (inputs
-     `(("glu" ,glu)
-       ("sdl-union" ,(sdl-union (list sdl sdl-image)))))
+     (list glu
+           (sdl-union (list sdl sdl-image))))
     (synopsis "Shooter with space station destruction")
     (description
      "Kobo Deluxe is an enhanced version of Akira Higuchi's XKobo graphical game
@@ -5892,7 +5822,7 @@ for Un*x systems with X11.")
 (define-public freeciv
   (package
    (name "freeciv")
-   (version "2.6.5")
+   (version "2.6.6")
    (source
     (origin
      (method url-fetch)
@@ -5904,16 +5834,12 @@ for Un*x systems with X11.")
                   (version-major+minor version) "/" version
                   "/freeciv-" version ".tar.bz2")))
      (sha256
-      (base32 "0ngcj59ak71i6m8yvbr0g3aryzpw1scalpdzgfqsq4mf9p3y2r1f"))))
+      (base32 "04aq2v1ima87sap6yjb7jrm1ss63ax7v5kg7rpkj44887kfybkvv"))))
    (build-system gnu-build-system)
    (inputs
-    `(("curl" ,curl)
-      ("cyrus-sasl" ,cyrus-sasl)
-      ("gtk+" ,gtk+)
-      ("sdl-mixer" ,sdl-mixer)
-      ("zlib" ,zlib)))
+    (list curl cyrus-sasl gtk+ sdl-mixer zlib))
    (native-inputs
-    `(("pkg-config" ,pkg-config)))
+    (list pkg-config))
    (home-page "http://www.freeciv.org/")
    (synopsis "Turn-based empire building strategy game")
    (description "Freeciv is a turn-based empire building strategy game
@@ -5945,7 +5871,7 @@ into the Space Age.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (home-page "https://github.com/bartobri/no-more-secrets")
     (synopsis "Recreation of data decryption effect in \"Sneakers\"")
     (description
@@ -6012,11 +5938,12 @@ starting a decryption sequence to reveal the original plaintext characters.")
        ("sdl2" ,sdl2)
        ("wxwidgets" ,wxwidgets)))
     (native-inputs
-     `(("cppunit" ,cppunit)
-       ("pkg-config" ,pkg-config)))
+     (list cppunit pkg-config))
     (arguments
      `(#:configure-flags
-       (list (string-append "-DCUSTOM_DATA_INSTALL_PATH="
+       (list "-DCMAKE_CXX_FLAGS=-fcommon"
+             "-DCMAKE_C_FLAGS=-fcommon"
+             (string-append "-DCUSTOM_DATA_INSTALL_PATH="
                             (assoc-ref %build-inputs "megaglest-data")
                             "/share/megaglest")
              "-DBUILD_MEGAGLEST_TESTS=ON")
@@ -6037,8 +5964,8 @@ Magic, Egypt, Indians, Norsemen, Persian or Romans.")
     (license license:gpl2+)))
 
 (define-public freegish
-  (let ((commit "8795cd7adc95957883f2d3465eb9036a774667a7")
-        (revision "1"))
+  (let ((commit "21977ee5fc2008231b35160df00efe954c508b16")
+        (revision "2"))
     (package
       (name "freegish")
       (version (string-append "0-" revision "." (string-take commit 9)))
@@ -6050,7 +5977,7 @@ Magic, Egypt, Indians, Norsemen, Persian or Romans.")
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "1p1zf5qqagmcpi1db2bs02cnalpy3qiymp6yzan7k1bhmv859gsx"))
+                  "1qh0gcnbyxyzmb13jifwba4xrzj94m4w9whdvl0gnds6ricmwply"))
                 (modules '((guix build utils)))
                 ;; The audio files in the "music" directory are licensed under
                 ;; CC-BY-NC, so we delete them.
@@ -6074,13 +6001,13 @@ Magic, Egypt, Indians, Norsemen, Persian or Romans.")
                                  line)))
                #t)))))
       (inputs
-       `(("sdl-union" ,(sdl-union (list sdl sdl-mixer)))
-         ("openal" ,openal)
-         ("libvorbis" ,libvorbis)
-         ("libogg" ,libogg)
-         ("mesa" ,mesa)
-         ("libpng" ,libpng)
-         ("zlib" ,zlib)))
+       (list (sdl-union (list sdl sdl-mixer))
+             openal
+             libvorbis
+             libogg
+             mesa
+             libpng
+             zlib))
       (home-page "https://github.com/freegish/freegish")
       (synopsis "Side-scrolling physics platformer with a ball of tar")
       (description "In FreeGish you control Gish, a ball of tar who lives
@@ -6114,13 +6041,9 @@ emerges from a sewer hole and pulls her below ground.")
                             (assoc-ref %outputs "out")
                             "/share/cdogs-sdl/"))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("mesa" ,mesa)
-       ("sdl2" ,sdl2)
-       ("sdl2-image" ,sdl2-image)
-       ("sdl2-mixer" ,sdl2-mixer)))
+     (list gtk+ mesa sdl2 sdl2-image sdl2-mixer))
     (home-page "https://cxong.github.io/cdogs-sdl/")
     (synopsis "Classic overhead run-and-gun game")
     (description "C-Dogs SDL is a classic overhead run-and-gun game,
@@ -6166,11 +6089,10 @@ over 100 user-created campaigns.")
          (replace 'configure
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (setenv "CPLUS_INCLUDE_PATH"
-                     (string-append (assoc-ref inputs "sdl-union")
-                                    "/include/SDL:"
-                                    (assoc-ref inputs "python")
-                                    "/include/python2.7:"
-                                    (or (getenv "CPLUS_INCLUDE_PATH") "")))
+                     (string-append
+                      (search-input-directory inputs "include/SDL") ":"
+                      (search-input-directory inputs "include/python2.7")
+                      ":" (or (getenv "CPLUS_INCLUDE_PATH") "")))
              (substitute* "src/main/main.cpp"
                (("#include <SDL.h>" line)
                 (string-append line "
@@ -6221,7 +6143,7 @@ over 100 user-created campaigns.")
                                       sdl-image)))
        ("python" ,python-2)))
     (native-inputs
-     `(("swig" ,swig)))
+     (list swig))
     (home-page "http://kiki.sourceforge.net/")
     (synopsis "3D puzzle game")
     (description "Kiki the nano bot is a 3D puzzle game.  It is basically a
@@ -6282,18 +6204,18 @@ small robot living in the nano world, repair its maker.")
                       "datasrc/fonts/DejaVuSans.ttf")
              #t)))))
     (inputs
-     `(("freetype" ,freetype)
-       ("font-dejavu" ,font-dejavu)
-       ("glu" ,glu)
-       ("json-parser" ,json-parser)
-       ("mesa" ,mesa)
-       ("pnglite" ,pnglite)
-       ("sdl2" ,sdl2)
-       ("sdl2-image" ,sdl2-image)
-       ("sdl2-mixer" ,sdl2-mixer)
-       ("wavpack" ,wavpack)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list freetype
+           font-dejavu
+           glu
+           json-parser
+           mesa
+           pnglite
+           sdl2
+           sdl2-image
+           sdl2-mixer
+           wavpack
+           openssl
+           zlib))
     (native-inputs
      `(("googletest" ,googletest)
        ("python" ,python-wrapper)
@@ -6353,13 +6275,11 @@ The Flag.  You can even design your own maps!")
                 (string-append "#include \"SDL/SDL_" header ".h\"")))
              #t)))))
     (inputs
-     `(("xerces-c" ,xerces-c)
-       ("sdl-union" ,(sdl-union (list sdl sdl-image sdl-mixer sdl-ttf)))
-       ("curl" ,curl)
-       ("enet" ,enet)))
+     (list xerces-c
+           (sdl-union (list sdl sdl-image sdl-mixer sdl-ttf)) curl
+           enet))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("imagemagick" ,imagemagick)))
+     (list pkg-config imagemagick))
     (home-page "https://www.nongnu.org/enigma")
     (synopsis "Puzzle game with a dexterity component")
     (description "Enigma is a puzzle game with 550 unique levels.  The object
@@ -6375,18 +6295,17 @@ with the mouse isn’t always trivial.")
 (define-public chroma
   (package
     (name "chroma")
-    (version "1.18")
+    (version "1.20")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://level7.org.uk/chroma/download/chroma-"
                                   version ".tar.bz2"))
               (sha256
                (base32
-                "12bjisf5nlqinw8n4r223vld52p0p2mw3fca92vi175c46bycbzn"))))
+                "02hn448ckfxbx2fqr9wgf66rwl0vr4gl87yvsr5fc99zz9zw2f5v"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:tests? #f                      ; no tests included
-       #:configure-flags '("CFLAGS=-fgnu89-inline"))) ; fix inlines
+     `(#:tests? #f))                    ; no tests included
     (inputs
      `(("sdl-union" ,(sdl-union (list sdl sdl-image sdl-mixer sdl-ttf)))
        ("freetype" ,freetype)
@@ -6394,7 +6313,7 @@ with the mouse isn’t always trivial.")
        ("fontconfig" ,fontconfig)
        ("libxft" ,libxft)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://level7.org.uk/chroma/")
     (synopsis "Abstract puzzle game")
     (description "Chroma is an abstract puzzle game. A variety of colourful
@@ -6447,13 +6366,8 @@ becoming difficult enough to tax even the brightest of minds.")
                        "--strip-components=1"
                        "-C" data)))))))
     (inputs
-     `(("sdl-union" ,(sdl-union (list sdl
-                                      sdl-mixer
-                                      sdl-image
-                                      sdl-ttf)))
-       ("fribidi" ,fribidi)
-       ("libx11" ,libx11)
-       ("lua" ,lua-5.1)))
+     (list (sdl-union (list sdl sdl-mixer sdl-image sdl-ttf)) fribidi
+           libx11 lua-5.1))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("fillets-ng-data"
@@ -6477,14 +6391,14 @@ fish.  The whole game is accompanied by quiet, comforting music.")
 (define-public crawl
   (package
     (name "crawl")
-    (version "0.27.0")
+    (version "0.27.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://github.com/crawl/crawl/releases/download/"
                            version "/stone_soup-" version "-nodeps.tar.xz"))
        (sha256
-        (base32 "0hzkzpqmydxm1zjkdm7k4w3hldsqin3pwkj7jmfj4jijkr0zg9nq"))
+        (base32 "0nkhyhrrma8gmwxp15j84cn1k2yvyq7ar9rd0j2qjjlv2kdis5z2"))
        (patches (search-patches "crawl-upgrade-saves.patch"))))
     (build-system gnu-build-system)
     (inputs
@@ -6601,7 +6515,7 @@ monsters in a quest to find the mystifyingly fabulous Orb of Zot.")
        ;; no test target
        #:tests? #f))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("sdl2" ,sdl2)
        ("glu" ,glu)
@@ -6626,7 +6540,7 @@ fight against their plot and save his fellow rabbits from slavery.")
 (define-public 0ad-data
   (package
     (name "0ad-data")
-    (version "0.0.23b-alpha")
+    (version "0.0.25b-alpha")
     (source
      (origin
        (method url-fetch)
@@ -6634,22 +6548,9 @@ fight against their plot and save his fellow rabbits from slavery.")
                            version "-unix-data.tar.xz"))
        (file-name (string-append name "-" version ".tar.xz"))
        (sha256
-        (base32
-         "04x7729hk6zw1xj3n4s4lvaviijsnbjf5rhzvjxlr5fygvg4l6z1"))
-       (modules '((guix build utils)))
-       (snippet
-        #~(begin
-            (for-each (lambda (name)
-                        (let* ((dir (string-append "binaries/data/mods/" name))
-                               (file (string-append dir "/" name ".zip"))
-                               (unzip #$(file-append unzip "/bin/unzip")))
-                          (invoke unzip "-d" dir file)
-                          (delete-file file)))
-                      '("mod" "public"))
-            #t))))
+        (base32 "1c9zrddmjxvvacismld6fbwbw9vrdbq6g6d3424p8w5p6xg5wlwy"))))
     (build-system trivial-build-system)
-    (native-inputs `(("tar" ,tar)
-                     ("xz" ,xz)))
+    (native-inputs (list tar unzip xz))
     (arguments
      `(#:modules ((guix build utils))
        #:builder
@@ -6657,11 +6558,18 @@ fight against their plot and save his fellow rabbits from slavery.")
          (use-modules (guix build utils))
          (let ((out (assoc-ref %outputs "out"))
                (source (assoc-ref %build-inputs "source"))
-               (tar (string-append (assoc-ref %build-inputs "tar") "/bin/tar"))
+               (tar (search-input-file %build-inputs "/bin/tar"))
+               (unzip (search-input-file %build-inputs "/bin/unzip"))
                (xz-path (string-append (assoc-ref %build-inputs "xz") "/bin")))
            (setenv "PATH" xz-path)
            (mkdir out)
-           (invoke tar "xvf" source "-C" out "--strip=3")))))
+           (invoke tar "xvf" source "-C" out "--strip=3")
+           (for-each (lambda (name)
+                       (let* ((dir (string-append out "/mods/" name))
+                              (file (string-append dir "/" name ".zip")))
+                         (invoke unzip "-o" "-d" dir file)
+                         (delete-file file)))
+                     '("mod" "public"))))))
     (synopsis "Data files for 0ad")
     (description "0ad-data provides the data files required by the game 0ad.")
     (home-page "https://play0ad.com")
@@ -6679,7 +6587,7 @@ fight against their plot and save his fellow rabbits from slavery.")
 (define-public 0ad
   (package
     (name "0ad")
-    (version "0.0.23b-alpha")
+    (version "0.0.25b-alpha")
     (source
      (origin
        (method url-fetch)
@@ -6687,53 +6595,64 @@ fight against their plot and save his fellow rabbits from slavery.")
                            version "-unix-build.tar.xz"))
        (file-name (string-append name "-" version ".tar.xz"))
        (sha256
-        (base32
-         "0draa53xg69i5qhqym85658m45xhwkbiimaldj4sr3703rjgggq1"))))
-       ;; A snippet here would cause a build failure because of timestamps
-       ;; reset.  See https://bugs.gnu.org/26734.
-    (inputs
-     `(("0ad-data" ,0ad-data)
-       ("curl" ,curl)
-       ("enet" ,enet)
-       ("gloox" ,gloox)
-       ("icu4c" ,icu4c)
-       ("libpng" ,libpng)
-       ("libsodium" ,libsodium)
-       ("libvorbis" ,libvorbis)
-       ("libxcursor" ,libxcursor)
-       ("libxml2" ,libxml2)
-       ("miniupnpc" ,miniupnpc)
-       ("mozjs-38" ,mozjs-38)
-       ("openal" ,openal)
-       ("sdl2" ,sdl2)
-       ("wxwidgets" ,wxwidgets)
-       ("zlib" ,zlib)))
-    (native-inputs
-     `(("boost" ,boost)
-       ("cmake" ,cmake-minimal)
-       ("mesa" ,mesa)
-       ("pkg-config" ,pkg-config)
-       ("python-2" ,python-2)))
+        (base32 "1p9fa8f7sjb9c5wl3mawzyfqvgr614kdkhrj2k4db9vkyisws3fp"))))
+    ;; A snippet here would cause a build failure because of timestamps
+    ;; reset.  See https://bugs.gnu.org/26734.
+    (inputs
+     (list #{0ad-data}#
+           curl
+           enet
+           fmt
+           gloox
+           icu4c-68
+           libidn
+           libpng
+           libsodium
+           libvorbis
+           libxcursor
+           libxml2
+           miniupnpc
+           mozjs-78
+           openal
+           sdl2
+           wxwidgets
+           zlib))
+    (native-inputs
+     (list boost
+           cmake-minimal
+           cxxtest
+           mesa
+           pkg-config
+           python-2))
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags '("config=release" "verbose=1" "-C" "build/workspaces/gcc")
+       #:tests? #f                      ;tests fail currently
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'delete-bundles
-           (lambda _
+           (lambda* (#:key inputs #:allow-other-keys)
              (delete-file-recursively "libraries/source/spidermonkey")
-             #t))
-         (add-after 'unpack 'fix-x11-includes
+             (delete-file-recursively "libraries/source/cxxtest-4.4")
+             (substitute* "build/premake/premake5.lua"
+               (("rootdir\\.\\.\"\\/libraries\\/source\\/cxxtest-4.4\\/bin\\/cxxtestgen\"")
+                (string-append "\"" (assoc-ref inputs "cxxtest")
+                               "/bin/cxxtestgen"
+                               "\"")))))
+         (add-after 'unpack 'fix-mozjs-compatibility
+           ;; 0ad only builds fine with a specific version of mozjs
+           ;; (version 78.6 for 0ad-0.0.25).
+           ;; Here we change the error in case of version mismatch to a warning,
+           ;; and add some minor compatibility fixes.
            (lambda _
-             (substitute* "source/lib/sysdep/os/unix/x/x.cpp"
-               (("<Xlib.h>") "<X11/Xlib.h>"))
-             (substitute* "source/lib/sysdep/os/unix/x/x.cpp"
-               (("<Xatom.h>") "<X11/Xatom.h>"))
-             (substitute* "source/lib/sysdep/os/unix/x/x.cpp"
-               (("<Xcursor/Xcursor.h>") "<X11/Xcursor/Xcursor.h>"))
-             #t))
+             (substitute* "source/scriptinterface/ScriptTypes.h"
+               (("#error Your compiler is trying to use")
+                "#warning Your compiler is trying to use"))
+             (substitute* "source/scriptinterface/ScriptContext.cpp"
+               (("JS::PrepareZoneForGC\\(")
+                "JS::PrepareZoneForGC(m_cx, "))))
          (replace 'configure
-           (lambda* (#:key inputs outputs #:allow-other-keys)
+           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
              (let* ((jobs (number->string (parallel-job-count)))
                     (out (assoc-ref outputs "out"))
                     (lib (string-append out "/lib"))
@@ -6741,11 +6660,13 @@ fight against their plot and save his fellow rabbits from slavery.")
                (setenv "JOBS" (string-append "-j" jobs))
                (setenv "CC" "gcc")
                (with-directory-excursion "build/workspaces"
-                 (invoke "./update-workspaces.sh"
-                         (string-append "--libdir=" lib)
-                         (string-append "--datadir=" data)
-                         ;; TODO: "--with-system-nvtt"
-                         "--with-system-mozjs38")))))
+                 (apply invoke
+                        `("./update-workspaces.sh"
+                          ,(string-append "--libdir=" lib)
+                          ,(string-append "--datadir=" data)
+                          ;; TODO: "--with-system-nvtt"
+                          "--with-system-mozjs"
+                          ,@(if tests? '() '("--without-tests"))))))))
          (delete 'check)
          (replace 'install
            (lambda* (#:key inputs outputs #:allow-other-keys)
@@ -6755,7 +6676,9 @@ fight against their plot and save his fellow rabbits from slavery.")
                     (lib (string-append out "/lib"))
                     (data (string-append out "/share/0ad"))
                     (applications (string-append out "/share/applications"))
-                    (pixmaps (string-append out "/share/pixmaps"))
+                    (hicolor (string-append out "/share/icons/hicolor/128x128/apps"))
+                    (metainfo (string-append out "/share/metainfo"))
+                    (mime (string-append out "/share/mime/application"))
                     (0ad-data (assoc-ref inputs "0ad-data")))
                ;; data
                (copy-recursively "data" data)
@@ -6774,12 +6697,14 @@ fight against their plot and save his fellow rabbits from slavery.")
                ;; resources
                (with-directory-excursion "../build/resources"
                  (install-file "0ad.desktop" applications)
-                 (install-file "0ad.png" pixmaps))
-               #t)))
+                 (install-file "0ad.png" hicolor)
+                 (install-file "0ad.appdata.xml" metainfo)
+                 (install-file "pyrogenesis.xml" mime)))))
          (add-after 'install 'check
-           (lambda _
-             (with-directory-excursion "system"
-               (invoke "./test")))))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (with-directory-excursion "system"
+                 (invoke "./test"))))))))
     (home-page "https://play0ad.com")
     (synopsis "3D real-time strategy game of ancient warfare")
     (description "0 A.D. is a real-time strategy (RTS) game of ancient
@@ -6884,7 +6809,7 @@ Crowther & Woods, its original authors, in 1995.  It has been known as
              (("#include <GL/glext.h>") ""))))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (inputs
      `(("sdl-union" ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))
        ("glu" ,glu)
@@ -6908,9 +6833,9 @@ Crowther & Woods, its original authors, in 1995.  It has been known as
                   (add-after 'set-paths 'set-sdl-paths
                     (lambda* (#:key inputs #:allow-other-keys)
                       (setenv "CPATH"
-                              (string-append (assoc-ref inputs "sdl-union")
-                                             "/include/SDL2:"
-                                             (or (getenv "CPATH") "")))))
+                              (string-append
+                               (search-input-directory inputs "/include/SDL2")
+                               ":" (or (getenv "CPATH") "")))))
                   (delete 'check)
                   ;; premake doesn't provide install target
                   (replace 'install
@@ -7010,12 +6935,12 @@ Tales of Maj’Eyal offers engaging roguelike gameplay for the 21st century.")
                            (string-append out "/bin")))
                         #t))))))
     (build-system gnu-build-system)
-    (inputs `(("libmikmod" ,libmikmod)
-              ("libvorbis" ,libvorbis)
-              ("flac" ,flac)
-              ("mesa" ,mesa)
-              ("mpg123" ,mpg123)
-              ("sdl2" ,sdl2)))
+    (inputs (list libmikmod
+                  libvorbis
+                  flac
+                  mesa
+                  mpg123
+                  sdl2))
     (synopsis "First person shooter engine for Quake 1")
     (description "Quakespasm is a modern engine for id software's Quake 1.
 It includes support for 64 bit CPUs, custom music playback, a new sound driver,
@@ -7072,9 +6997,8 @@ some graphical niceities, and numerous bug-fixes and other improvements.")
                         #t))))
        ,@(strip-keyword-arguments '(#:make-flags #:phases)
                                   (package-arguments quakespasm))))
-    (inputs `(("vulkan-headers" ,vulkan-headers)
-              ("vulkan-loader" ,vulkan-loader)
-              ,@(package-inputs quakespasm)))
+    (inputs (modify-inputs (package-inputs quakespasm)
+              (prepend vulkan-headers vulkan-loader)))
     (description "vkquake is a modern engine for id software's Quake 1.
 It includes support for 64 bit CPUs, custom music playback, a new sound driver,
 some graphical niceities, and numerous bug-fixes and other improvements.")
@@ -7131,14 +7055,14 @@ some graphical niceities, and numerous bug-fixes and other improvements.")
                (symlink (string-append out "/lib/yamagi-quake2/q2ded")
                         (string-append out "/bin/yamagi-q2ded"))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("curl" ,curl-minimal)
-       ("libvorbis" ,libvorbis)
-       ("mesa" ,mesa)
-       ("openal" ,openal)
-       ("sdl2" ,sdl2)
-       ("zlib" ,zlib)))
+     (list curl
+           libvorbis
+           mesa
+           openal
+           sdl2
+           zlib))
     (synopsis "First person shooter engine based on quake2")
     (description "Yamagi Quake II is an enhanced client for id Software's Quake II.
 The main focus is an unchanged single player experience like back in 1997,
@@ -7168,12 +7092,9 @@ making Yamagi Quake II one of the most solid Quake II implementations available.
         (base32 "12v00z3p0ymi8f3w4b4bgl4c76irawn3kmd147r0ap6s9ssx2q6m"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("gettext" ,gettext-minimal)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake gettext-minimal pkg-config))
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (home-page "https://jubalh.github.io/nudoku/")
     (synopsis "Sudoku for your terminal")
     (description "Nudoku is a ncurses-based Sudoku game for your terminal.")
@@ -7216,8 +7137,7 @@ making Yamagi Quake II one of the most solid Quake II implementations available.
        ;; with multiple "QPainter:: ... Painter not active" warnings.
        #:tests? #f))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)))
+     (list qtbase-5 qtsvg))
     (native-inputs
      `(("cmake" ,cmake-minimal)
        ("gettext-minimal" ,gettext-minimal)
@@ -7247,19 +7167,19 @@ elements to achieve a simple goal in the most complex way possible.")
                 "1hj99jxb9n3r0bkq87p1c24862xa1xyzjyfdyyx88ckszxb05qf3"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("assimp" ,assimp)
-       ("curl" ,curl)
-       ("freetype" ,freetype)
-       ("glew" ,glew)
-       ("glu" ,glu)
-       ("libpng" ,libpng)
-       ("libsigc++" ,libsigc++)
-       ("libvorbis" ,libvorbis)
-       ("lua" ,lua-5.2)                 ;not compatible with 5.3
-       ("mesa" ,mesa)
-       ("sdl" ,(sdl-union (list sdl2 sdl2-image)))))
+     (list assimp
+           curl
+           freetype
+           glew
+           glu
+           libpng
+           libsigc++-2
+           libvorbis
+           lua-5.2                      ;not compatible with 5.3
+           mesa
+           (sdl-union (list sdl2 sdl2-image))))
     (arguments
      `(#:tests? #f                      ;tests are broken
        #:configure-flags (list "-DUSE_SYSTEM_LIBLUA:BOOL=YES"
@@ -7461,8 +7381,7 @@ You can save humanity and get programming skills!")
               ("sdl2" ,sdl2)
               ("timidity++" ,timidity++)
               ("zlib" ,zlib)))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("unzip" ,unzip)))
+    (native-inputs (list pkg-config unzip))
     (synopsis "Modern Doom 2 source port")
     (description "GZdoom is a port of the Doom 2 game engine, with a modern
 renderer.  It improves modding support with ZDoom's advanced mapping features
@@ -7481,7 +7400,7 @@ Strife, Chex Quest, and fan-created games like Harmony, Hacx and Freedoom.")
 (define-public odamex
   (package
     (name "odamex")
-    (version "0.9.3")
+    (version "0.9.5")
     (source
      (origin
        (method url-fetch)
@@ -7489,11 +7408,11 @@ Strife, Chex Quest, and fan-created games like Harmony, Hacx and Freedoom.")
              "mirror://sourceforge/odamex/Odamex/" version "/"
              "odamex-src-" version ".tar.bz2"))
        (sha256
-        (base32 "0vmw9ijb6n4wrxjxixakn7l6a6carnvs9wbbzb4vcq1brbzyrb0p"))))
+        (base32 "1x0c9vnwn336inkfamh4na8xjyfjmzfxfn49j4snqymkypjqw6jq"))))
     (build-system cmake-build-system)
     (arguments `(#:tests? #f))          ; no tests
     (native-inputs
-     `(("deutex" ,deutex)))
+     (list deutex))
     (inputs
      `(("sdl" ,sdl2)
        ("sdl-mixer" ,sdl2-mixer)
@@ -7523,11 +7442,11 @@ online.")
                (base32
                 "1iy8rx7kjvi1zjiw4zh77szzmd1sgpqajvbhprh1sj93fhbxcdfl"))))
     (build-system gnu-build-system)
-    (inputs `(("sdl2-net" ,sdl2-net)
-              ("sdl2-mixer" , sdl2-mixer)
-              ("sdl2" ,sdl2)))
+    (arguments
+     `(#:configure-flags (list "CFLAGS=-fcommon")))
+    (inputs (list sdl2-net sdl2-mixer sdl2))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "Doom source port preserving the look, feel, and bugs of vanilla
 Doom")
     (description
@@ -7562,7 +7481,8 @@ affect gameplay).")
       `(("automake" ,automake)
         ("autoreconf" ,autoconf))))
     (arguments
-     `(#:phases
+     `(#:configure-flags '("CFLAGS=-fcommon")
+       #:phases
        (modify-phases %standard-phases
          (replace 'bootstrap
            ;; The bundled autogen.sh script unconditionally runs ./configure.
@@ -7580,16 +7500,17 @@ original.")
 (define shlomif-cmake-modules
   (origin
     (method url-fetch)
-    (uri (string-append "https://bitbucket.org/shlomif/shlomif-cmake-modules/"
-                        "raw/c505713d7a7cda608f97f01577e5868a711b883e/"
-                        "shlomif-cmake-modules/Shlomif_Common.cmake"))
+    (uri (string-append
+          "https://raw.githubusercontent.com/shlomif/shlomif-cmake-modules/"
+          "89f05caf86078f783873975525230cf4fecede8a"
+          "/shlomif-cmake-modules/Shlomif_Common.cmake"))
     (sha256
-     (base32 "0kx9s1qqhhzprp1w3b67xmsns0n0v506bg5hgrshxaxpy6lqiwb2"))))
+     (base32 "05xdikw5ln0yh8p5chsmd8qnndmxg5b5vjlfpdqrjcb1ncqzywkc"))))
 
 (define-public rinutils
   (package
     (name "rinutils")
-    (version "0.2.0")
+    (version "0.10.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -7598,49 +7519,48 @@ original.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1fpxyg86ggv0h7j8aarjjxrvwlj7jycd3bw066c0dwkq2fszxsf2"))))
-    (native-inputs
-     `(("perl" ,perl)
-       ;; The following is only needed for tests.
-       ("perl-file-find-object" ,perl-file-find-object)
-       ("perl-test-differences" ,perl-test-differences)
-       ("perl-class-xsaccessor" ,perl-class-xsaccessor)
-       ("perl-io-all" ,perl-io-all)
-       ("perl-test-runvalgrind" ,perl-test-runvalgrind)
-       ("cmake-rules" ,shlomif-cmake-modules)
-       ("pkg-config" ,pkg-config)))
-    (inputs
-     `(("cmocka" ,cmocka)
-       ("perl-env-path" ,perl-env-path)
-       ("perl-inline" ,perl-inline)
-       ("perl-inline-c" ,perl-inline-c)
-       ("perl-string-shellquote" ,perl-string-shellquote)
-       ("perl-test-trailingspace" ,perl-test-trailingspace)
-       ("perl-file-find-object-rule" ,perl-file-find-object-rule)
-       ("perl-text-glob" ,perl-text-glob)
-       ("perl-number-compare" ,perl-number-compare)
-       ("perl-moo" ,perl-moo)))
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-build-env
-           (lambda* (#:key inputs #:allow-other-keys)
-             (use-modules (guix build utils))
-             (let* ((cmake-rules (assoc-ref inputs "cmake-rules")))
-               (copy-file cmake-rules
-                          (string-append "cmake/"
-                                         (strip-store-file-name cmake-rules)))
-               #t)))
-         (replace 'check
-           (lambda _
-             (with-directory-excursion "../source"
-               (setenv "FCS_TEST_BUILD" "1")
-               (setenv "RINUTILS_TEST_BUILD" "1")
-               ;; TODO: Run tests after setting RINUTILS_TEST_TIDY to `1',
-               ;; which requires tidy-all.
-               ;; (setenv "RINUTILS_TEST_TIDY" "1")
-               (invoke "perl" "CI-testing/continuous-integration-testing.pl")))))))
+                "05h9sq3w900mx8xij7qgqgqcbdk1x5gvbpz7prw2pfbzrrbiq2ns"))))
     (build-system cmake-build-system)
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'copy-cmake-modules
+                 (lambda _
+                   (copy-file #$shlomif-cmake-modules
+                              (string-append "cmake/"
+                                             (strip-store-file-name
+                                              #$shlomif-cmake-modules)))))
+               (replace 'check
+                 (lambda* (#:key tests? #:allow-other-keys)
+                   (when tests?
+                     (with-directory-excursion "../source"
+                       (setenv "FCS_TEST_BUILD" "1")
+                       (setenv "RINUTILS_TEST_BUILD" "1")
+                       ;; TODO: Run tests after setting RINUTILS_TEST_TIDY to `1',
+                       ;; which requires tidy-all.
+                       ;; (setenv "RINUTILS_TEST_TIDY" "1")
+                       (invoke "perl"
+                               "CI-testing/continuous-integration-testing.pl"))))))))
+    (native-inputs
+     (list perl
+           ;; The following are needed only for tests.
+           perl-class-xsaccessor
+           perl-file-find-object
+           perl-io-all
+           perl-test-differences
+           perl-test-runvalgrind
+           pkg-config))
+    (inputs
+     (list cmocka
+           perl-env-path
+           perl-inline
+           perl-inline-c
+           perl-string-shellquote
+           perl-test-trailingspace
+           perl-file-find-object-rule
+           perl-text-glob
+           perl-number-compare
+           perl-moo))
     (home-page "https://www.shlomifish.org/open-source/projects/")
     (synopsis "C11 / gnu11 utilities C library")
     (description "This package provides C11 / gnu11 utilities C library")
@@ -7649,7 +7569,7 @@ original.")
 (define-public fortune-mod
   (package
     (name "fortune-mod")
-    (version "2.28.0")
+    (version "3.12.0")
     (source
      (origin
        (method git-fetch)
@@ -7658,47 +7578,58 @@ original.")
              (commit (string-append "fortune-mod-" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1ppzgnffgdcmq6fq4gmdq2ig10ip2bnfgklkb3i8nc6bdxm7pb89"))))
+        (base32 "1iq3bxrw8758jqvfqaasd7w1zm0g28g9n25qccnzvr98997h6r2n"))))
     (build-system cmake-build-system)
     (arguments
-     `(#:test-target "check"
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-build-env
-           (lambda* (#:key inputs #:allow-other-keys)
-             (use-modules (guix build utils))
-             (let* ((cmake-rules (assoc-ref inputs "cmake-rules")))
-               (copy-file cmake-rules
-                          (string-append "fortune-mod/cmake/"
-                                         (strip-store-file-name cmake-rules)))
-               (chdir "fortune-mod")
-               ;; TODO: Valgrind tests fail for some reason.
-               ;; Similar issue: https://github.com/shlomif/fortune-mod/issues/21 (?)
-               (delete-file "tests/t/valgrind.t")
-               #t)))
-         (add-after 'install 'fix-install-directory
-           (lambda* (#:key outputs #:allow-other-keys)
-             ;; Move binary from "games/" to "bin/" and remove the latter.  This
-             ;; is easier than patching CMakeLists.txt since the tests hard-code
-             ;; the location as well.
-             (let* ((out   (assoc-ref outputs "out"))
-                    (bin   (string-append out "/bin"))
-                    (games (string-append out "/games")))
-               (rename-file (string-append games "/fortune")
-                            (string-append bin "/fortune"))
-               (rmdir games)
-               #t))))))
-    (inputs `(("recode" ,recode)))
-    (native-inputs
-     `(("perl" ,perl)
-       ;; The following is only needed for tests.
-       ("perl-file-find-object" ,perl-file-find-object)
-       ("perl-test-differences" ,perl-test-differences)
-       ("perl-class-xsaccessor" ,perl-class-xsaccessor)
-       ("perl-io-all" ,perl-io-all)
-       ("perl-test-runvalgrind" ,perl-test-runvalgrind)
-       ("cmake-rules" ,shlomif-cmake-modules)
-       ("rinutils" ,rinutils)))
+     (list #:test-target "check"
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'enter-build-directory
+                 (lambda _
+                   (chdir "fortune-mod")))
+               (add-after 'enter-build-directory 'symlink-rinutils
+                 (lambda _
+                   (mkdir-p "rinutils")
+                   (symlink #$(this-package-native-input "rinutils")
+                            "rinutils/rinutils")))
+               (add-after 'enter-build-directory 'copy-cmake-modules
+                 (lambda _
+                   (copy-file #$shlomif-cmake-modules
+                              (string-append "cmake/"
+                                             (strip-store-file-name
+                                              #$shlomif-cmake-modules)))))
+               (add-after 'enter-build-directory 'delete-failing-test
+                 (lambda _
+                   ;; TODO: Valgrind tests fail for some reason.  Similar issue?
+                   ;; https://github.com/shlomif/fortune-mod/issues/21
+                   (delete-file "tests/data/valgrind.t")
+                   (with-output-to-file "tests/scripts/split-valgrind.pl"
+                     (const #t))))
+               (add-after 'install 'fix-install-directory
+                 (lambda* (#:key outputs #:allow-other-keys)
+                   ;; Move binary from "games/" to "bin/" and remove the
+                   ;; latter.  This is easier than patching CMakeLists.txt
+                   ;; since the tests hard-code the location as well.
+                   (let* ((out   (assoc-ref outputs "out"))
+                          (bin   (string-append out "/bin"))
+                          (games (string-append out "/games")))
+                     (rename-file (string-append games "/fortune")
+                                  (string-append bin "/fortune"))
+                     (rmdir games)))))))
+    (inputs (list recode))
+    (native-inputs
+     (list perl
+           ;; For generating the documentation.
+           docbook-xml-5
+           docbook-xsl
+           perl-app-xml-docbook-builder
+           ;; The following are only needed for tests.
+           perl-file-find-object
+           perl-test-differences
+           perl-class-xsaccessor
+           perl-io-all
+           perl-test-runvalgrind
+           rinutils))
     (home-page "https://www.shlomifish.org/open-source/projects/fortune-mod/")
     (synopsis "The Fortune Cookie program from BSD games")
     (description "Fortune is a command-line utility which displays a random
@@ -7729,7 +7660,7 @@ quotation from a collection of quotes.")
          (let* ((out (assoc-ref %outputs "out"))
                 (xonotic (string-append out "/share/xonotic"))
                 (source (assoc-ref %build-inputs "source"))
-                (unzip (string-append (assoc-ref %build-inputs "unzip") "/bin/unzip")))
+                (unzip (search-input-file %build-inputs "/bin/unzip")))
            (copy-file source (string-append ,name "-" ,version ".zip"))
            (invoke unzip (string-append ,name "-" ,version ".zip"))
            (mkdir-p out)
@@ -7930,12 +7861,12 @@ quotation from a collection of quotes.")
        ("libpng" ,libpng)
        ("hicolor-icon-theme" ,hicolor-icon-theme)))
     (native-inputs
-     `(("unzip" ,unzip)
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ("libtool" ,libtool)
-       ("gmp" ,gmp)))
+     (list unzip
+           autoconf
+           automake
+           pkg-config
+           libtool
+           gmp))
     (home-page "https://xonotic.org")
     (synopsis "Fast-paced first-person shooter game")
     (description
@@ -7984,11 +7915,7 @@ open-source FPS of its kind.")
                (mkdir-p man)
                (install-file "doc/frotz.6" man)
                #t))))))
-    (inputs `(("libmodplug" ,libmodplug)
-              ("libsamplerate" ,libsamplerate)
-              ("libsndfile" ,libsndfile)
-              ("libvorbis" ,libvorbis)
-              ("ncurses" ,ncurses)))
+    (inputs (list libmodplug libsamplerate libsndfile libvorbis ncurses))
     (synopsis "Portable Z-machine interpreter (ncurses version) for text adventure games")
     (description "Frotz is an interpreter for Infocom games and other Z-machine
 games in the text adventure/interactive fiction genre.  This version of Frotz
@@ -7998,6 +7925,58 @@ ncurses for text display.")
     (home-page "http://frotz.sourceforge.net")
     (license license:gpl2+)))
 
+(define-public naev
+  (package
+    (name "naev")
+    (version "0.9.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/naev/naev/releases/download/v"
+                           version "/naev-" version "-source.tar.xz"))
+       (sha256
+        (base32 "1p6424n2rgrlb0h71gvww40vxs1h583d9im8bzgmv6dhgclbg0nl"))))
+    (build-system meson-build-system)
+    (arguments
+     ;; XXX: Do not add debugging symbols, which cause the build to fail.
+     `(#:configure-flags (list "--buildtype=release")
+       #:tests? #f))          ;sole test fails with a missing "/dev/dri" error
+    (native-inputs
+     (list gettext-minimal pkg-config))
+    (inputs
+     (list freetype
+           glpk
+           libpng
+           libunibreak
+           libvorbis
+           libwebp
+           libxml2
+           luajit
+           openal
+           openblas
+           physfs
+           python
+           python-pyyaml
+           (sdl-union (list sdl2 sdl2-image sdl2-mixer))
+           suitesparse))
+    (home-page "https://naev.org/")
+    (synopsis "Game about space exploration, trade and combat")
+    (description
+     "Naev is a 2d action/rpg space game that combines elements from
+the action, RPG and simulation genres.  You pilot a spaceship from
+a top-down perspective, and are more or less free to do what you want.
+As the genre name implies, you’re able to trade and engage in combat
+at will.  Beyond that, there’s an ever-growing number of story-line
+missions, equipment, and ships; even the galaxy itself grows larger
+with each release.  For the literacy-inclined, there are large amounts
+of lore accompanying everything from planets to equipment.")
+    (license (list license:gpl3
+                   license:public-domain
+                   license:expat        ;edtaa3func.c
+                   license:bsd-2        ;distance_field.c
+                   license:bsd-3        ;perlin.c
+                   ))))
+
 (define-public frotz-dumb-terminal
   (package
     (name "frotz-dumb-terminal")
@@ -8083,18 +8062,16 @@ to play games on webpages.  It can also be made into a chat bot.")
                  (install-file "doc/sfrotz.6" man)
                  #t))))))
       (native-inputs
-       `(("pkg-config" ,pkg-config)
-         ("which" ,which)
-         ("perl" ,perl)))
-      (inputs `(("sdl2" ,sdl2)
-                ("sdl2-mixer" ,sdl2-mixer)
-                ("libmodplug" ,libmodplug)
-                ("libsamplerate" ,libsamplerate)
-                ("libsndfile" ,libsndfile)
-                ("libvorbis" ,libvorbis)
-                ("ncurses" ,ncurses)
-                ("freetype" ,freetype)
-                ("libjpeg-turbo" ,libjpeg-turbo)))
+       (list pkg-config which perl))
+      (inputs (list sdl2
+                    sdl2-mixer
+                    libmodplug
+                    libsamplerate
+                    libsndfile
+                    libvorbis
+                    ncurses
+                    freetype
+                    libjpeg-turbo))
       (synopsis "Portable Z-machine interpreter (SDL port) for text adventure games")
       (description "Frotz is an interpreter for Infocom games and other Z-machine
 games in the text adventure/interactive fiction genre.  This version of Frotz
@@ -8173,11 +8150,8 @@ when packaged in Blorb container files or optionally from individual files.")
                            (find-files "bin" ".")))
                #t)))))
       (native-inputs
-       `(("perl-alien-sdl" ,perl-alien-sdl)
-         ("perl-capture-tiny" ,perl-capture-tiny)
-         ("perl-locale-maketext-lexicon" ,perl-locale-maketext-lexicon)
-         ("perl-module-build" ,perl-module-build)
-         ("pkg-config" ,pkg-config)))
+       (list perl-alien-sdl perl-capture-tiny perl-locale-maketext-lexicon
+             perl-module-build pkg-config))
       (inputs
        `(("glib" ,glib)
          ("perl-compress-bzip2" ,perl-compress-bzip2)
@@ -8217,13 +8191,10 @@ their own levels.")
                 "1b3bcdkk5xd5asq797cch9id8692grsjxrc1ss87vv11m1ck4rb3"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("glib" ,glib "bin")             ; for glib-compile-resources
-       ("gobject-introspection" ,gobject-introspection)
-       ("pkg-config" ,pkg-config)
-       ("vala" ,vala)))
+     (list `(,glib "bin") ; for glib-compile-resources
+           gobject-introspection pkg-config vala))
     (inputs
-     `(("libevdev" ,libevdev)
-       ("libgudev" ,libgudev)))
+     (list libevdev libgudev))
     (home-page "https://wiki.gnome.org/Apps/Games")
     (synopsis "Game controller library")
     (description "Libmanette is a small GObject library giving you simple
@@ -8235,15 +8206,15 @@ GameController.")
 (define-public quadrapassel
   (package
     (name "quadrapassel")
-    (version "3.36.05")
+    (version "40.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/quadrapassel/"
-                                  (version-major+minor version) "/"
+                                  (version-major version) "/"
                                   "quadrapassel-" version ".tar.xz"))
               (sha256
                (base32
-                "04abxmimh5npw8rhz1sfi6wxilgc6i1wka9mlnfwp8v1p1cb00cv"))))
+                "02n0khwy38pykw4xqpnkym6xvj2sv8izfjbaxlik3iq7890j5n0b"))))
     (build-system meson-build-system)
     (arguments
      '(#:glib-or-gtk? #t
@@ -8253,24 +8224,23 @@ GameController.")
            ;; Don't create 'icon-theme.cache'.
            (lambda _
              (substitute* "build-aux/meson_post_install.py"
-               (("gtk-update-icon-cache") (which "true")))
-             #t)))))
-    (native-inputs
-     `(("desktop-file-utils" ,desktop-file-utils) ;for desktop-file-validate
-       ("gettext" ,gettext-minimal)
-       ("glib" ,glib "bin")             ;for glib-compile-resources
-       ("itstool" ,itstool)
-       ("libxml2" ,libxml2)             ;for xmllint
-       ("pkg-config" ,pkg-config)
-       ("vala" ,vala)))
-    (inputs
-     `(("clutter" ,clutter)
-       ("clutter-gtk" ,clutter-gtk)
-       ("gsound" ,gsound)
-       ("gtk+" ,gtk+)
-       ("libcanberra" ,libcanberra)
-       ("libmanette" ,libmanette)
-       ("librsvg" ,librsvg)))
+               (("gtk-update-icon-cache") (which "true"))))))))
+    (native-inputs
+     (list desktop-file-utils           ; for desktop-file-validate
+           gettext-minimal
+           (list glib "bin")            ; for glib-compile-resources
+           itstool
+           libxml2                      ; for xmllint
+           pkg-config
+           vala))
+    (inputs
+     (list clutter
+           clutter-gtk
+           gsound
+           gtk+
+           libcanberra
+           libmanette
+           librsvg))
     (home-page "https://wiki.gnome.org/Apps/Quadrapassel")
     (synopsis "GNOME version of Tetris")
     (description "Quadrapassel comes from the classic falling-block game,
@@ -8444,8 +8414,7 @@ civilized than your own.")
                  (symlink "../stepmania/Docs" "doc/stepmania"))
                #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("yasm" ,yasm)))
+     (list pkg-config yasm))
     (inputs
      `(("alsa-lib" ,alsa-lib)
        ;; Per upstream, StepMania is only guaranteed to work with a very
@@ -8503,13 +8472,9 @@ to download and install them in @file{$HOME/.stepmania-X.Y/Songs} directory.")
            ;; `make test' doesn't actually build the test executable
            (lambda _ (invoke "make" "zerotokei"))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("cairo" ,cairo)
-       ("ffmpeg" ,ffmpeg)
-       ("pango" ,pango)
-       ("sdl2" ,sdl2)
-       ("sdl2-image" ,sdl2-image)))
+     (list cairo ffmpeg pango sdl2 sdl2-image))
     (home-page "https://github.com/fmang/oshu/")
     (synopsis "Rhythm game in which you click on circles")
     (description "@i{oshu!} is a minimalist variant of the @i{osu!} rhythm game,
@@ -8549,10 +8514,9 @@ download and unpack them separately.")
          (add-after 'set-paths 'set-sdl-paths
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "CPATH"
-                     (string-append (assoc-ref inputs "sdl")
-                                    "/include/SDL:"
-                                    (or (getenv "CPATH") "")))
-             #t))
+                     (string-append
+                      (search-input-directory inputs "/include/SDL")
+                      ":" (or (getenv "CPATH") "")))))
          (add-after 'unpack 'fix-compilation-errors
            (lambda _
              (substitute* "mrt/base_file.h"
@@ -8593,8 +8557,7 @@ download and unpack them separately.")
                                 sdl-ttf)))
        ("zlib" ,zlib)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("zip" ,zip)))
+     (list pkg-config zip))
     (home-page "http://btanks.sourceforge.net")
     (synopsis "Multiplayer tank battle game")
     (description "Battle Tanks (also known as \"btanks\") is a funny battle
@@ -8658,7 +8621,7 @@ the ground, the set ends and all balls are served again.")
     (arguments
      `(#:python ,python-2))
     (inputs
-     `(("python-pygame" ,python2-pygame)))
+     (list python2-pygame))
     (home-page "https://github.com/ryanakca/slingshot")
     (synopsis "Simple 2D shooting strategy game set in space")
     (description "Slingshot is a two-dimensional strategy game where two
@@ -8683,7 +8646,8 @@ affected by the gravity of the planets.")
          "1nfkhcm0l89jyw8yr65na97g4l385zhjf7whkyg47c3v5sdqq2g7"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:phases
+     `(#:configure-flags '("CFLAGS=-fcommon")
+       #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'fix-install-directories
            (lambda* (#:key outputs #:allow-other-keys)
@@ -8699,10 +8663,9 @@ affected by the gravity of the planets.")
          (add-after 'set-paths 'set-sdl-paths
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "CPATH"
-                     (string-append (assoc-ref inputs "sdl")
-                                    "/include/SDL:"
-                                    (or (getenv "CPATH") "")))
-             #t)))))
+                     (string-append
+                      (search-input-directory inputs "/include/SDL")
+                      ":" (or (getenv "CPATH") ""))))))))
     (inputs
      `(("fontconfig" ,fontconfig)
        ("freeglut" ,freeglut)
@@ -8770,20 +8733,20 @@ game field is extended to 4D space, which has to filled up by the gamer with
                (rename-file (string-append out "/bin/arx-install-data")
                             (string-append installer "/bin/arx-install-data"))))))))
     (inputs
-     `(("sdl2" ,sdl2)
-       ("libepoxy" ,libepoxy)
-       ("glew" ,glew)
-       ("openal" ,openal)
-       ("zlib" ,zlib)
-       ("boost" ,boost)
-       ("glm" ,glm)
-       ("freetype" ,freetype)
-       ;; The following are only needed by the arx-install-data script.
-       ("p7zip" ,p7zip) ; Install-helper uses it to extract ISO and .cab archives.
-       ("zenity" ,zenity)           ; GUI for install-helper.
-       ("wget" ,wget)     ; Used by the install-helper to download the patch.
-       ;; The install-helper needs it to extract the patch.
-       ("innoextract" ,innoextract)))
+     (list sdl2
+           libepoxy
+           glew
+           openal
+           zlib
+           boost
+           glm
+           freetype
+           ;; The following are only needed by the arx-install-data script.
+           p7zip ; Install-helper uses it to extract ISO and .cab archives.
+           zenity ; GUI for install-helper.
+           wget ; Used by the install-helper to download the patch.
+           ;; The install-helper needs it to extract the patch.
+           innoextract))
     (home-page "https://arx-libertatis.org/")
     (synopsis "Port of Arx Fatalis, a first-person role-playing game")
     (description "Arx Libertatis is a cross-platform port of Arx Fatalis, a 2002
@@ -8797,7 +8760,7 @@ where the player draws runes in real time to effect the desired spell.")
 (define-public edgar
   (package
     (name "edgar")
-    (version "1.34")
+    (version "1.35")
     (source
      (origin
        (method url-fetch)
@@ -8805,7 +8768,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 "1121rq5wk3g8rs413av84s2kcy6qj6maspgy2vsxs36c2jd3yygl"))))
+        (base32 "0hwp73ili10kzx0aibhvgxfddqm94pimdaqhpnba6jzn119834q7"))))
     (build-system gnu-build-system)
     (arguments '(#:tests? #f            ; there are no tests
                  #:make-flags
@@ -8818,20 +8781,19 @@ where the player draws runes in real time to effect the desired spell.")
                    (add-before 'build 'fix-env
                      (lambda* (#:key inputs #:allow-other-keys)
                        (setenv "CPATH"
-                               (string-append (assoc-ref inputs "sdl2-union")
-                                              "/include/SDL2:"
-                                              (or (getenv "CPATH") "")))
-                       #t)))))
-    (inputs
-     `(("sdl2-union" ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))
-       ("zlib" ,zlib)))
-    (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("gnu-gettext" ,gettext-minimal)
-       ("libtool" ,libtool)
-       ("which" ,which)))
+                               (string-append
+                                (search-input-directory inputs "/include/SDL2")
+                                ":" (or (getenv "CPATH") ""))))))))
+    (inputs
+     (list (sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf))
+           zlib))
+    (native-inputs
+     (list pkg-config
+           autoconf
+           automake
+           gettext-minimal
+           libtool
+           which))
     (synopsis "2d action platformer game")
     (description "The Legend of Edgar is a 2D platform game with a persistent world.
 When Edgar's father fails to return home after venturing out one dark and stormy night,
@@ -9012,10 +8974,8 @@ action RPGs.")
            ;; parameters.
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
-                    (bash (string-append (assoc-ref inputs "bash")
-                                         "/bin/bash"))
-                    (flare (string-append (assoc-ref inputs "flare-engine")
-                                          "/bin/flare"))
+                    (bash (search-input-file inputs "/bin/bash"))
+                    (flare (search-input-file inputs "/bin/flare"))
                     (script (string-append out "/bin/flare-game")))
                (mkdir-p (dirname script))
                (call-with-output-file script
@@ -9029,7 +8989,7 @@ exec ~a --data-path=~a/share/flare --mods=empyrean_campaign~%"
                (chmod script #o755))
              #t)))))
     (inputs
-     `(("flare-engine" ,flare-engine)))
+     (list flare-engine))
     (home-page "http://www.flarerpg.org/")
     (synopsis "Fantasy action RPG using the FLARE engine")
     (description "Flare is a single-player 2D action RPG with
@@ -9078,7 +9038,7 @@ fast-paced action and a dark fantasy style.")
                 (string-append "// " all)))
              #t)))))
     (native-inputs
-     `(("intltool" ,intltool)))
+     (list intltool))
     (inputs
      `(("sdl" ,(sdl-union (list sdl sdl-image sdl-mixer)))
        ("zlib" ,zlib)))
@@ -9141,11 +9101,9 @@ Orcus Dome from evil.")
                  (install-file "MarbleMarcher" bin))
                #t)))))
       (inputs
-       `(("eigen" ,eigen)
-         ("mesa" ,mesa)
-         ("sfml" ,sfml)))
+       (list eigen mesa sfml))
       (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
       (home-page "https://codeparade.itch.io/marblemarcher")
       (synopsis "Guide a marble across fractal landscapes")
       (description "Marble Marcher is a video game that uses a fractal physics
@@ -9163,7 +9121,7 @@ levels to unlock.")
 (define simgear
   (package
     (name "simgear")
-    (version "2018.3.5")
+    (version "2020.3.11")
     (source
      (origin
        (method url-fetch)
@@ -9171,22 +9129,31 @@ levels to unlock.")
                            (version-major+minor version) "/"
                            "simgear-" version ".tar.bz2"))
        (sha256
-        (base32 "1vkqm66r1205k3hdjmx5wmx5kvmsb0dgfzrs8n5gqnxj8szs42dl"))))
+        (base32 "0g2g3n3sb6kdimvcrn9kvlhyyrp5c6lx20fgzz8l609v5aygr3dv"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           ;; There are some bundled libraries.
+           (for-each delete-file-recursively
+                     '("3rdparty/expat/"))
+           #t))))
     (build-system cmake-build-system)
     (arguments
-     `(#:phases
+     `(#:configure-flags (list "-DSYSTEM_EXPAT=ON")
+       #:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda _
-             ;; Skip tests that require internet access.
-             (invoke "ctest" "-E" "(http|dns)"))))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               ;; Skip tests that require internet access.
+               (invoke "ctest" "-E" "(http|dns)")))))))
     (inputs
-     `(("boost" ,boost-for-mysql)       ; fails with 1.69
+     `(("boost" ,boost)
        ("curl" ,curl)
        ("expat" ,expat)
        ("mesa" ,mesa)
        ("openal" ,openal)
-       ("openscenegraph" ,openscenegraph-3.4)
+       ("openscenegraph" ,openscenegraph)
        ("zlib" ,zlib)))
     (home-page "https://home.flightgear.org/")
     (synopsis "Libraries for 3D simulations and games")
@@ -9207,41 +9174,42 @@ and also provides the base for the FlightGear Flight Simulator.")
                            (version-major+minor version) "/"
                            "flightgear-" version ".tar.bz2"))
        (sha256
-        (base32 "0ya3vb539kwi1qrifqhsj5j3k4w6s06hrllp2vdzxf6id7cgf0hc"))
+        (base32 "15sar94x13j2y1m6adgmz2q1m1i9bzj3sxqla6y3m9vyf33hc9zy"))
        (modules '((guix build utils)))
        (snippet
         '(begin
            ;; There are some bundled libraries.
            (for-each delete-file-recursively
-                     '("3rdparty/sqlite3/"))
+                     '("3rdparty/sqlite3/"
+                       "3rdparty/cppunit/"))
            #t))))
-    (build-system cmake-build-system)
+    (build-system qt-build-system)
     (arguments
      `(#:configure-flags
        (list "-DSYSTEM_SQLITE=ON"
+             "-DSYSTEM_CPPUNIT=ON"
              (string-append "-DFG_DATA_DIR="
                             (assoc-ref %outputs "out")
                             "/share/flightgear"))
-       ;; TODO: test cannot be run because the "run_test_suite" executable
-       ;; does not seem to be built.
+       ;; TODO: test suite segfaults.
        #:tests? #f
        #:phases
        (modify-phases %standard-phases
-         (add-after 'install 'wrap-executable
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out")))
-               (wrap-program (string-append out "/bin/fgfs")
-                 `("QT_PLUGIN_PATH" ":" prefix
-                   ,(map (lambda (label)
-                           (string-append (assoc-ref inputs label)
-                                          "/lib/qt5/plugins"))
-                         '("qtbase" "qtdeclarative" "qtsvg")))
-                 `("QML2_IMPORT_PATH" ":" prefix
-                   ,(map (lambda (label)
-                           (string-append (assoc-ref inputs label)
-                                          "/lib/qt5/qml"))
-                         '("qtdeclarative" "qtsvg"))))
-               #t)))
+         (add-after 'unpack 'skip-some-tests
+           (lambda _
+             (substitute* "test_suite/unit_tests/Instrumentation/test_gps.hxx"
+               (("CPPUNIT_TEST\\(testLongLegWestbound\\);" all)
+                (string-append "// " all))
+               (("CPPUNIT_TEST\\(testFinalLegCourse\\);" all)
+                (string-append "// " all)))))
+         (add-after 'build 'build-test-suite
+           (lambda* args
+             ((assoc-ref %standard-phases 'build)
+              #:make-flags (list "fgfs_test_suite"))))
+         ;; Test suite needs access to FGData so run it after 'install.
+         (delete 'check)
+         (add-after 'install-data 'check
+           (assoc-ref %standard-phases 'check))
          (add-after 'install 'install-data
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((share (string-append (assoc-ref outputs "out") "/share/flightgear")))
@@ -9251,23 +9219,23 @@ and also provides the base for the FlightGear Flight Simulator.")
                          "--strip-components=1")))
              #t)))))
     (inputs
-     `(("boost" ,boost-for-mysql)       ; same as simgear
-       ("dbus" ,dbus)
-       ("eudev" ,eudev)
-       ("freeglut" ,freeglut)
-       ("freetype" ,freetype)
-       ("glew" ,glew)
-       ("libpng" ,libpng)
-       ("openal" ,openal)
-       ("openscenegraph" ,openscenegraph-3.4)
-       ("plib" ,plib)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)
-       ("simgear" ,simgear)
-       ("speexdsp" ,speexdsp)
-       ("sqlite" ,sqlite)
-       ("zlib" ,zlib)))
+     (list boost
+           dbus
+           eudev
+           freeglut
+           freetype
+           glew
+           libpng
+           openal
+           openscenegraph
+           plib
+           qtbase-5
+           qtdeclarative
+           qtsvg
+           simgear
+           speexdsp
+           sqlite
+           zlib))
     (native-inputs
      `(("cppunit" ,cppunit)
        ("pkg-config" ,pkg-config)
@@ -9277,11 +9245,11 @@ and also provides the base for the FlightGear Flight Simulator.")
            (method url-fetch)
            (uri (string-append "mirror://sourceforge/flightgear/release-"
                                (version-major+minor version) "/"
-                               "FlightGear-" version "-data.tar.bz2"))
+                               "FlightGear-" version "-data.txz"))
            (sha256
             (base32
-             "04fv9za5zlyxlyfh6jx78y42l3jazvzl9dq2y6rzxqlcc9g5swhk"))))))
-    (home-page "https://home.flightgear.org/")
+             "0n5mw9vw1snab16c1y3i9ylkiv54az57bs2mvpq20hhg5hdiagqj"))))))
+    (home-page "https://www.flightgear.org/")
     (synopsis "Flight simulator")
     (description "The goal of the FlightGear project is to create a
 sophisticated flight simulator framework for use in research or academic
@@ -9312,7 +9280,14 @@ simulator.")
        #:tests? #f                      ;no test
        #:phases
        (modify-phases %standard-phases
-         (delete 'configure)            ;no configure script
+         ;; There is no configure script
+         (replace 'configure
+           (lambda _
+             (substitute* "Makefile"
+               (("-funroll-loops")
+                "-funroll-loops -fcommon")
+               (("SDL_CFLAGS =")
+                "SDL_CFLAGS = -fcommon"))))
          (add-after 'unpack 'fix-sdl-path
            ;; XXX: For some reason, `sdl2-config' reports stand-alone SDL
            ;; directory, not SDL-union provided as an input to the package.
@@ -9320,8 +9295,7 @@ simulator.")
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "Makefile"
                (("sdl2-config" command)
-                (string-append command " --prefix=" (assoc-ref inputs "sdl"))))
-             #t)))))
+                (string-append command " --prefix=" (assoc-ref inputs "sdl")))))))))
     (inputs
      `(("bzip2" ,bzip2)
        ("sdl" ,(sdl-union (list sdl2 sdl2-mixer sdl2-net)))
@@ -9343,6 +9317,7 @@ play with up to four players simultaneously.  It has network support.")
               (method url-fetch)
               (uri (string-append "https://www.hedgewars.org/download/releases/"
                                   "hedgewars-src-" version ".tar.bz2"))
+              (patches (search-patches "hedgewars-network-bsd.patch"))
               (sha256
                (base32
                 "0nqm9w02m0xkndlsj6ys3wr0ik8zc14zgilq7k6fwjrf3zk385i1"))))
@@ -9392,10 +9367,7 @@ play with up to four players simultaneously.  It has network support.")
        ("sdl" ,(sdl-union
                 (list sdl2 sdl2-mixer sdl2-net sdl2-ttf sdl2-image)))))
     (native-inputs
-     `(("clang" ,clang)
-       ("ghc" ,ghc)
-       ("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list clang ghc pkg-config qttools))
     (home-page "https://hedgewars.org/")
     (synopsis "Turn-based artillery game featuring fighting hedgehogs")
     (description
@@ -9430,7 +9402,7 @@ and bring the war to your enemy.")
     (arguments
      '(#:import-path "github.com/anaseto/gruid"))
     (propagated-inputs
-     `(("go-golang-org-x-image" ,go-golang-org-x-image)))
+     (list go-golang-org-x-image))
     (home-page "https://github.com/anaseto/gruid")
     (synopsis "Cross-platform grid-based UI and game framework")
     (description "The gruid module provides packages for easily building
@@ -9521,8 +9493,7 @@ on items and player adaptability for character progression.")
                 (share (string-append out "/share/drascula"))
                 (scummvm (assoc-ref %build-inputs "scummvm")))
            ;; Install data.
-           (let ((unzip (string-append (assoc-ref %build-inputs "unzip")
-                                       "/bin/unzip"))
+           (let ((unzip (search-input-file %build-inputs "/bin/unzip"))
                  (doc (string-append out "/share/doc/" ,name "-" ,version)))
              (for-each
               (lambda (input)
@@ -9548,8 +9519,7 @@ on items and player adaptability for character progression.")
            ;; Create standalone executable.
            (let* ((bin (string-append out "/bin"))
                   (executable (string-append bin "/drascula"))
-                  (bash (string-append (assoc-ref %build-inputs "bash")
-                                       "/bin/bash")))
+                  (bash (search-input-file %build-inputs "/bin/bash")))
              (mkdir-p bin)
              (with-output-to-file executable
                (lambda ()
@@ -9576,8 +9546,7 @@ on items and player adaptability for character progression.")
                           ("it" "Gioco classico di avventura punta e clicca 2D"))))
            #t))))
     (native-inputs
-     `(("bash" ,bash)
-       ("unzip" ,unzip)))
+     (list bash unzip))
     (inputs
      `(("scummvm" ,scummvm)
        ("drascula-int"
@@ -9639,8 +9608,7 @@ the World and demonstrating that he is even more evil than his brother Vlad.")
                 (bin (string-append out "/bin"))
                 (executable (string-append bin "/" ,name))
                 (scummvm (assoc-ref %build-inputs "scummvm")))
-           (let ((unzip (string-append (assoc-ref %build-inputs "unzip")
-                                       "/bin/unzip")))
+           (let ((unzip (search-input-file %build-inputs "/bin/unzip")))
              (invoke unzip "-j" (assoc-ref %build-inputs "source")))
            (let ((doc (string-append share "/doc/" ,name "-" ,version)))
              (for-each (lambda (f) (install-file f doc))
@@ -9677,10 +9645,9 @@ the World and demonstrating that he is even more evil than his brother Vlad.")
                        executable scummvm)))
            #t))))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (inputs
-     `(("bash" ,bash)
-       ("scummvm" ,scummvm)))
+     (list bash scummvm))
     (home-page "https://www.scummvm.org")
     (synopsis "2D point and click fantasy adventure game")
     (description
@@ -9746,8 +9713,7 @@ Skorl.  Maybe it would be an idea to try and escape...")
                 (bin (string-append out "/bin"))
                 (executable (string-append bin "/" ,name))
                 (scummvm (assoc-ref %build-inputs "scummvm")))
-           (let ((unzip (string-append (assoc-ref %build-inputs "unzip")
-                                       "/bin/unzip")))
+           (let ((unzip (search-input-file %build-inputs "/bin/unzip")))
              (invoke unzip "-j" (assoc-ref %build-inputs "source")))
            (let ((doc (string-append share "/doc/" ,name "-" ,version)))
              (install-file "readme.txt" doc))
@@ -9779,10 +9745,9 @@ Skorl.  Maybe it would be an idea to try and escape...")
                        executable scummvm))))
          #t)))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (inputs
-     `(("bash" ,bash)
-       ("scummvm" ,scummvm)))
+     (list bash scummvm))
     (home-page "https://www.scummvm.org/")
     (synopsis "Classic 2D point and click adventure game")
     (description "Flight of the Amazon Queen is a 2D point-and-click
@@ -9845,8 +9810,7 @@ women and 6-foot-tall pygmies.")
                 (bin (string-append out "/bin"))
                 (executable (string-append bin "/" ,name))
                 (scummvm (assoc-ref %build-inputs "scummvm")))
-           (let ((unzip (string-append (assoc-ref %build-inputs "unzip")
-                                       "/bin/unzip")))
+           (let ((unzip (search-input-file %build-inputs "/bin/unzip")))
              (invoke unzip "-j" (assoc-ref %build-inputs "source")))
            (let ((doc (string-append share "/doc/bass-" ,version)))
              (install-file "readme.txt" doc))
@@ -9880,10 +9844,9 @@ angesiedelt in einer düsteren, postapokalyptischen Vision der Zukunft~@
                        executable scummvm)))
            #t))))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (inputs
-     `(("bash" ,bash)
-       ("scummvm" ,scummvm)))
+     (list bash scummvm))
     (home-page "https://www.scummvm.org/")
     (synopsis "Classic 2D point and click science-fiction adventure game")
     (description
@@ -9922,13 +9885,9 @@ and to seek vengeance for the killing of his tribe.")
          "07gi3lsmbzzsjambgixj6xy79lh22km84z7bnzgwzxdy806lyvwb"))))
     (build-system gnu-build-system)
     (inputs
-     `(("glib" ,glib)
-       ("gtk+" ,gtk+-2)
-       ("vte" ,vte/gtk+-2)
-       ("readline" ,readline)
-       ("guile" ,guile-1.8)))
+     (list glib gtk+-2 vte/gtk+-2 readline guile-1.8))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
      `(#:make-flags
        (list
@@ -10029,21 +9988,21 @@ win.")
 (define-public freeorion
   (package
     (name "freeorion")
-    (version "0.4.10")
+    (version "0.4.10.2")
     (source
      (origin
-       (method url-fetch)
-       (uri (string-append "https://github.com/freeorion/freeorion/releases/"
-                           "download/v" version "/FreeOrion_v" version
-                           "_2020-07-10.f3d403e_Source.tar.gz"))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/freeorion/freeorion")
+             (commit (string-append "v" version))))
        (sha256
-        (base32 "12xspixrkx6mmmsdqjha0hg02r4y73pk229l0wjq9s0yp8nb8ap7"))
+        (base32 "12fhwa3cs6lvdbdhina310qk2g7zcphldsh7ibsbxn8d1m731xlk"))
+       (file-name (git-file-name name version))
        (modules '((guix build utils)))
        (snippet
         '(begin
            ;; There are some bundled fonts.
-           (for-each delete-file-recursively '("default/data/fonts"))
-           #t))))
+           (for-each delete-file-recursively '("default/data/fonts"))))))
     (build-system cmake-build-system)
     (arguments
      '(#:tests? #f                      ;no test
@@ -10105,14 +10064,14 @@ remake of that series or any other game.")
      (patches (search-patches "leela-zero-gtest.patch"))))
    (build-system cmake-build-system)
    (native-inputs
-    `(("googletest" ,googletest)))
+    (list googletest))
    (inputs
-    `(("boost" ,boost)
-      ("opencl-icd-loader" ,opencl-icd-loader)
-      ("openblas" ,openblas)
-      ("opencl-headers" ,opencl-headers)
-      ("qtbase" ,qtbase-5)
-      ("zlib" ,zlib)))
+    (list boost
+          opencl-icd-loader
+          openblas
+          opencl-headers
+          qtbase-5
+          zlib))
    (arguments
     '(#:configure-flags '("-DUSE_BLAS=YES")
       #:phases (modify-phases %standard-phases
@@ -10152,11 +10111,9 @@ can be downloaded from @url{https://zero.sjeng.org/best-network}.")
               "1gdlfqcqkqv7vph3qwq78d0qz6dhmdsranxq9bmixiisbzkqby31"))))
    (build-system gnu-build-system)
    (native-inputs
-    `(("pkg-config" ,pkg-config)))
+    (list pkg-config))
    (inputs
-    `(("qtbase" ,qtbase-5)
-      ("qtmultimedia" ,qtmultimedia)
-      ("qtsvg" ,qtsvg)))
+    (list qtbase-5 qtmultimedia qtsvg))
    (arguments
     '(#:phases
       (modify-phases %standard-phases
@@ -10169,6 +10126,11 @@ can be downloaded from @url{https://zero.sjeng.org/best-network}.")
               (("qtchooser -run-tool=(.*) -qt=qt5" _ command)
                command))
             #t))
+        (add-after 'unpack 'fix-header
+          (lambda _
+            (substitute* "src/bitarray.h"
+              (("#include <cstring>" all)
+               (string-append all "\n#include <stdexcept>")))))
         (add-after 'unpack 'fix-paths
           (lambda _
             (substitute* '("src/pics/Makefile.in"
@@ -10231,25 +10193,23 @@ can be downloaded from @url{https://zero.sjeng.org/best-network}.")
        (base32 "0mlv9qllg70p26dbrcsr820c70d3ib88hapc1z6wgjhdpmc12ni1"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)
-       ("perl" ,perl)))
-    (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("python" ,python-wrapper)
-       ("qtbase" ,qtbase-5)
-       ("qtmultimedia" ,qtmultimedia)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)))
+     (list extra-cmake-modules kdoctools perl))
+    (inputs
+     (list kcompletion
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kio
+           kwidgetsaddons
+           kxmlgui
+           libkdegames
+           python-wrapper
+           qtbase-5
+           qtmultimedia
+           qtdeclarative
+           qtsvg))
     (home-page "https://games.kde.org/")
     (synopsis "Stamp drawing toy")
     (description "KTuberling is a drawing toy intended for small children and
@@ -10282,21 +10242,20 @@ This package is part of the KDE games module.")
        (base32 "1dfq9m4njh0czz8zws46rkz6xq2n6xra5w223m3s2f5civiw5msz"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdeclarative" ,kdeclarative)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("knewstuff" ,knewstuff)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcoreaddons
+           kcrash
+           kdbusaddons
+           kdeclarative
+           ki18n
+           kio
+           knewstuff
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative
+           qtsvg))
     (home-page "https://games.kde.org/")
     (synopsis "Number logic game")
     (description "Picmi is a number logic game in which cells in a grid have
@@ -10319,22 +10278,21 @@ This package is part of the KDE games module.")
         (base32 "1lpp6pzr5dgd4si4a8c7hcvgxgqy0bgyhkx9m6jqb0zhll6dxj10"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("ktextwidgets" ,ktextwidgets)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcompletion
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kio
+           kwidgetsaddons
+           kxmlgui
+           ktextwidgets
+           libkdegames
+           qtbase-5
+           qtdeclarative))
     (home-page "https://games.kde.org/")
     (synopsis "Miniature golf game")
     (description "Kolf is a miniature golf game for one to ten players.  The
@@ -10367,18 +10325,18 @@ This package is part of the KDE games module.")
        (base32 "10ljzbf7qki5flydankrbksaihhkqpfyljb8c71fbwqwmkr7rgfq"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
-    (inputs
-     `(("kauth" ,kauth)
-       ("kcompletion" ,kcompletion)
-       ;("kconfig" ,kconfig)
-       ("kcodecs" ,kcodecs)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("ki18n" ,ki18n)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)))
+     (list extra-cmake-modules))
+    (inputs
+     (list kauth
+           kcompletion
+           ;("kconfig" ,kconfig)
+           kcodecs
+           kconfigwidgets
+           kcoreaddons
+           ki18n
+           kwidgetsaddons
+           qtbase-5
+           qtsvg))
     (home-page "https://games.kde.org/")
     (synopsis "Shared library for kmahjongg and kshisen")
     (description "Shared library and common files for kmahjongg, kshisen and
@@ -10398,21 +10356,20 @@ other Mah Jongg like games.")
        (base32 "1fcj4jb2zzbaxp7cp04w36y0c7lh77yzin66fmvrcxkl11xi2wwd"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdeclarative" ,kdeclarative)
-       ("ki18n" ,ki18n)
-       ("knewstuff" ,knewstuff)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("libkmahjongg" ,libkmahjongg)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcompletion
+           kcrash
+           kdbusaddons
+           kdeclarative
+           ki18n
+           knewstuff
+           kxmlgui
+           libkdegames
+           libkmahjongg
+           qtbase-5
+           qtdeclarative
+           qtsvg))
     (home-page "https://games.kde.org/")
     (synopsis "Tile laying patience")
     (description "In KMahjongg the tiles are scrambled and staked on top of
@@ -10438,23 +10395,23 @@ This package is part of the KDE games module.")
        (base32 "1hrwr0f1kidivsp8lnwdbqz3xxagjvjwh72r3gma8smfilybygfb"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ;("perl" ,perl)
-       ;("pkg-config" ,pkg-config)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kauth" ,kauth)
-       ("kcompletion" ,kcompletion)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("libkmahjongg" ,libkmahjongg)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list extra-cmake-modules
+           ;("perl" ,perl)
+           ;("pkg-config" ,pkg-config)
+           kdoctools))
+    (inputs
+     (list kauth
+           kcompletion
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kxmlgui
+           libkdegames
+           libkmahjongg
+           qtbase-5
+           qtdeclarative))
     (home-page "https://games.kde.org/")
     (synopsis "Shisen-Sho solitaire game")
     (description "KShisen is a solitaire-like game played using the standard
@@ -10479,27 +10436,37 @@ This package is part of the KDE games module.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-after 'install 'wrap
+         (add-after 'unpack 'fix-paths
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "src/mjresource.py"
+               (("'share', 'kmahjongglib'" all)
+                (string-append "'" (assoc-ref inputs "libkmahjongg")
+                               "/share', 'kmahjongglib'")))))
+         (add-after 'qt-wrap 'wrap
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
-               (wrap-program (string-append out "/bin/kajongg")
-                 `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH"))))
-               #t))))))
-    (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ;("perl" ,perl)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("ki18n" ,ki18n)
-       ("libkmahjongg" ,libkmahjongg)
-       ("python" ,python)
-       ("python-twisted" ,python-twisted)
-       ("python-pyqt" ,python-pyqt)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)))
+               (for-each (lambda (program)
+                           (wrap-program program
+                             `("GUIX_PYTHONPATH" ":" prefix
+                               (,(getenv "GUIX_PYTHONPATH")))))
+                         (list (string-append out "/bin/kajongg")
+                               (string-append out "/bin/kajonggserver")))))))))
+    (native-inputs
+     (list extra-cmake-modules
+           ;("perl" ,perl)
+           kdoctools))
+    (inputs
+     (list kconfig
+           kconfigwidgets
+           kcoreaddons
+           ki18n
+           libkmahjongg
+           python
+           python-twisted
+           python-pyqt
+           python-zope-interface
+           qtbase-5
+           qtsvg))
     (home-page "https://games.kde.org/")
     (synopsis "Classical Mah Jongg game for 4 players")
     (description "Kajongg is the ancient Chinese board game for 4 players.
@@ -10528,21 +10495,20 @@ This package is part of the KDE games module.")
        (base32 "0kqj2cx0ny3qq65c6w5fpnzmrwl9irg8slzvpd3anck5cnvma3j4"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kwidgetsaddons
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative))
     (home-page "https://games.kde.org/")
     (synopsis "Breakout like game")
     (description "KBreakout is similar to the classics breakout and xboing,
@@ -10566,22 +10532,21 @@ This package is part of the KDE games module.")
        (base32 "0hqjwh3jq2npqwkvh67fyn2xnq8swiasdw5jz8f0ikl0k28id775"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           ktextwidgets
+           kwidgetsaddons
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative))
     (home-page "https://games.kde.org/")
     (synopsis "Classical mine sweeper game")
     (description "KMines is a classic Minesweeper game.  The idea is to
@@ -10604,22 +10569,21 @@ This package is part of the KDE games module.")
        (base32 "0lnwj06vv4qx05hr8pzysnvrxh8y04asajrph0rsj37v8hs9g5lh"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kguiaddons" ,kguiaddons)
-       ("ki18n" ,ki18n)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcompletion
+           kconfig
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           kguiaddons
+           ki18n
+           kwidgetsaddons
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative
+           qtsvg))
     (home-page "https://games.kde.org/")
     (synopsis "Simple turn-based strategy game")
     (description "Konquest is the KDE version of Gnu-Lactic Konquest.  Players
@@ -10644,22 +10608,21 @@ This package is part of the KDE games module.")
        (base32 "0ymy0z1qlw3n653xs3dsa1xm78q4xaj09dnnci4km77rzis26vb6"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcompletion
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kio
+           kwidgetsaddons
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative
+           qtsvg))
     (home-page "https://games.kde.org/")
     (synopsis "Jezzball arcade game")
     (description "KBounce is a single player arcade game with the elements of
@@ -10683,22 +10646,21 @@ This package is part of the KDE games module.")
        (base32 "09yfm9mzbamp294cvc5finq6ilxvxr68i0dnb0m72pa4sfzmij32"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kwidgetsaddons
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative
+           qtsvg))
     (home-page "https://games.kde.org/")
     (synopsis "Single player falling blocks puzzle game")
     (description "KBlocks is the classic Tetris-like falling blocks game.
@@ -10724,25 +10686,24 @@ This package is part of the KDE games module.")
        (base32 "0pj6ry7ak1rnpb93mqypaxrcbmrhwg9ir6zhb3ybzfkfcrh67g12"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("karchive" ,karchive)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kguiaddons" ,kguiaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("glu" ,glu)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list karchive
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kguiaddons
+           ki18n
+           kiconthemes
+           kio
+           kwidgetsaddons
+           kxmlgui
+           libkdegames
+           glu
+           qtbase-5
+           qtdeclarative
+           qtsvg))
     (home-page "https://games.kde.org/")
     (synopsis "Sudoku puzzle game and solver")
     (description "KSudoku is a Sudoku game and solver, supporting a range of
@@ -10785,20 +10746,19 @@ This package is part of the KDE games module.")
        (base32 "0y8lnwawrkl4ixn7v4dg48k2zpr083krv7dv4d94b2dpkh7xfvih"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcompletion
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kwidgetsaddons
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative))
     (home-page "https://games.kde.org/")
     (synopsis "Place 5 equal pieces together, but wait, there are 3 new ones")
     (description "KLines is a simple but highly addictive one player game.
@@ -10829,20 +10789,19 @@ This package is part of the KDE games module.")
        (base32 "17ra5d3r9ajy2inj17gwd5xphzhvbzx5kpvdwyj6msx4dd9wxgfi"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcompletion
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kio
+           kwidgetsaddons
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative))
     (home-page "https://games.kde.org/")
     (synopsis "Action and puzzle solving game")
     (description "KGoldrunner is an action game where the hero runs through a
@@ -10870,23 +10829,22 @@ This package is part of the KDE games module.")
        (base32 "1iyxrx3422asa58kh0siwvi1svds5kccrym6gdfpdhlmhmciqlzi"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("knotifications" ,knotifications)
-       ("knotifyconfig" ,knotifyconfig)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           knotifications
+           knotifyconfig
+           kwidgetsaddons
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative))
     (home-page "https://games.kde.org/")
     (synopsis "Three-in-a-row game")
     (description "KDiamond is a three-in-a-row game like Bejeweled.  It
@@ -10909,21 +10867,20 @@ This package is part of the KDE games module.")
        (base32 "0plx3lv35fc8q9svbyl71mms3ji6zn58j306bvm1f8kkgg0x395b"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdnssd" ,kdnssd)
-       ("ki18n" ,ki18n)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdnssd
+           ki18n
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative
+           qtsvg))
     (home-page "https://games.kde.org/")
     (synopsis "Place 4 pieces in a row")
     (description "KFourInLine is a board game for two players based on the
@@ -10948,22 +10905,21 @@ This package is part of the KDE games module.")
        (base32 "0la5w44b0gl72g3wfp0pw8gwnm287lh7nd9k5ikpszw5nn49db0h"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("karchive" ,karchive)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list karchive
+           kcompletion
+           kconfig
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           ktextwidgets
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative
+           qtsvg))
     (home-page "https://games.kde.org/")
     (synopsis "Find atoms in a grid by shooting electrons")
     (description "KBlackbox is a game of hide and seek played on a grid of
@@ -10989,22 +10945,21 @@ This package is part of the KDE games module.")
        (base32 "060kj06vpigdy570izsjfgnmqqrpmb8bkr9arqc109hg3avl5wjz"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           ktextwidgets
+           kwidgetsaddons
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative))
     (home-page "https://games.kde.org/")
     (synopsis "Turn the board pieces to get all computers connected")
     (description "KNetWalk is a small game where you have to build up a
@@ -11031,19 +10986,18 @@ This package is part of the KDE games module.")
         (base32 "1fjcwm591jgx3bgqpi0j5fnb2l2r2h3r6lav3vhaxz4rkf56pg2a"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcompletiom" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcompletion
+           kconfig
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative))
     (home-page "https://games.kde.org/")
     (synopsis "Arcade bombing game")
     (description "Bomber is a single player arcade game.
@@ -11073,23 +11027,22 @@ This package is part of the KDE games module.")
        (base32 "1fyh7zyacb3pnlfd29jw2jmyl8a7sjw354pi234nd5x5999xw5z6"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("knewstuff" ,knewstuff)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           knewstuff
+           kwidgetsaddons
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative
+           qtsvg))
     (home-page "https://games.kde.org/")
     (synopsis "Bomberman clone")
     (description "Granatier is a clone of the classic Bomberman game,
@@ -11111,23 +11064,22 @@ This package is part of the KDE games module.")
         (base32 "10y7nm0x6zcc0gh3am69bbxyyb8azbbfyrdqsa023ggr7n04cn21"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcrash" ,kcrash)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("knewstuff" ,knewstuff)
-       ("kwallet" ,kwallet)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("phonon" ,phonon)
-       ("qca" ,qca)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)
-       ("zlib" ,zlib)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcrash
+           ki18n
+           kiconthemes
+           kio
+           knewstuff
+           kwallet
+           kxmlgui
+           libkdegames
+           phonon
+           qca
+           qtbase-5
+           qtdeclarative
+           qtsvg
+           zlib))
     (home-page "https://games.kde.org/")
     (synopsis "Computerized version of the well known strategy board game
 'Risk'")
@@ -11167,29 +11119,28 @@ This package is part of the KDE games module.")
         (base32 "0xxz9g4zxljlg20g88a5lkbwzzm9yg4vxnrfigk8m018cz0nqd5b"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("karchive" ,karchive)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kcrash" ,kcrash)
-       ("ki18n" ,ki18n)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kitemviews" ,kitemviews)
-       ("knotifications" ,knotifications)
-       ("kservice" ,kservice)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)
-       ("shared-mime-info" ,shared-mime-info)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list karchive
+           kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kcrash
+           ki18n
+           ki18n
+           kio
+           kitemviews
+           knotifications
+           kservice
+           kwidgetsaddons
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative
+           qtsvg
+           shared-mime-info))
     (home-page "https://games.kde.org/")
     (synopsis "Jigsaw puzzle game")
     (description "Palapeli is a jigsaw puzzle game.  Unlike other games in
@@ -11215,21 +11166,20 @@ This package is part of the KDE games module.")
         (base32 "0milc8fl1rj4yrwdvm60ampd47dyiys1xvqi5f0g7y6mgymgyk4x"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kiconthemes
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative))
     (home-page "https://games.kde.org/")
     (synopsis "Yahtzee dice game")
     (description "Kiriki is an addictive and fun dice game, designed to be
@@ -11254,23 +11204,22 @@ This package is part of the KDE games module.")
         (base32 "088752yzmfsnppd27p8hld4x5s7sw5fagm08024l5ra1mlicdfz9"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("knewstuff" ,knewstuff)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kio
+           knewstuff
+           ktextwidgets
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative
+           qtsvg))
     (home-page "https://games.kde.org/")
     (synopsis "Go board game")
     (description "Kigo is an open-source implementation of the popular Go
@@ -11301,22 +11250,21 @@ This package is part of the KDE games module.")
         (base32 "0h3mypwd67sss08j5vvrih5f5ss85m9kax6412y40xmsm51lz2pq"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("glu" ,glu)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list glu
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           ki18n
+           kio
+           kwidgetsaddons
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative
+           qtsvg))
     (home-page "https://games.kde.org/")
     (synopsis "Game based on Rubik's Cube")
     (description "Kubrick is a game based on the Rubik's Cube puzzle.
@@ -11343,21 +11291,20 @@ This package is part of the KDE games module.")
         (base32 "1wg9zxp64kwjxqs4qw0h7j8yhgffbmvh8j9d4dgmz45dscngnjli"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kguiaddons" ,kguiaddons)
-       ("ki18n" ,ki18n)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcompletion
+           kconfig
+           kcoreaddons
+           kcrash
+           kguiaddons
+           ki18n
+           kwidgetsaddons
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative
+           qtsvg))
     (home-page "https://games.kde.org/")
     (synopsis "Lieutnant Skat card game")
     (description "Lieutnant Skat (from German \"Offiziersskat\") is a fun and
@@ -11382,21 +11329,20 @@ This package is part of the KDE games module.")
        (base32 "14x3v6li4r3gzzwfd6ar9saq2rhc7yxs0sp9ygalzq8vq4d7i1kh"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative
+           qtsvg))
     (home-page "https://games.kde.org/")
     (synopsis "Pac-Man clone")
     (description "Kapman is a clone of the well known game Pac-Man.
@@ -11422,21 +11368,20 @@ This package is part of the KDE games module.")
         (base32 "1aixh6ygif2cm1a5g32sl5y6b5x68139pzihaxq4334c6avamdai"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative
+           qtsvg))
     (home-page "https://games.kde.org/")
     (synopsis "Two player game with shooting spaceships flying around a sun")
     (description "KSpaceduel is a space battle game for one or two players,
@@ -11458,19 +11403,18 @@ This package is part of the KDE games module.")
         (base32 "18qbac366m0xma3ary11q9zxz0wgnysppcl7kpypl6ic3nf61wqz"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcompletion
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative
+           qtsvg))
     (home-page "https://games.kde.org/")
     (synopsis "Classic pen and paper game: five in a line")
     (description "Bovo is a Gomoku (from Japanese 五目並べ - lit.  \"five
@@ -11495,21 +11439,20 @@ This package is part of the KDE games module.")
         (base32 "1296gww42nwnai7y6m2qpjqpyc30p7z9chfv5rv0n48jvdhva88y"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kwidgetsaddons
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative))
     (home-page "https://games.kde.org/")
     (synopsis "Port of the classic BSD console game robots")
     (description "Killbots is a simple game of evading killer robots.
@@ -11537,22 +11480,21 @@ This package is part of the KDE games module.")
        (base32 "0mp6g258n3xzvgf23jnhkw10xgwqwqdzqfdc6r9jq6a6m8v77swz"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kguiaddons" ,kguiaddons)
-       ("ki18n" ,ki18n)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           kguiaddons
+           ki18n
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative
+           qtsvg))
     (home-page "https://games.kde.org/")
     (synopsis "Snake race played against the computer")
     (description "KSnakeDuel is a fast action game where you steer a snake
@@ -11576,20 +11518,19 @@ This package is part of the KDE games module.")
        (base32 "180ybafizpwjsg80npy0l9142cjsnlyxwv9dz3bq6r8v4smn2g6b"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcompletion
+           kconfig
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kwidgetsaddons
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative))
     (home-page "https://games.kde.org/")
     (synopsis "Simple ball dodging game")
     (description "In Kollision you use mouse to control a small blue ball in a
@@ -11614,23 +11555,22 @@ This package is part of the KDE games module.")
        (base32 "03rqf4avn61b0v340ymmzgp7s0axygjgxq1nlp5aaqbx70zcb4lq"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kauth" ,kauth)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdnssd" ,kdnssd)
-       ("ki18n" ,ki18n)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kauth
+           kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           kdnssd
+           ki18n
+           ktextwidgets
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative))
     (home-page "https://games.kde.org/")
     (synopsis "Battleship board game with built-in game server")
     (description "KBattleship is a Battle Ship game for KDE.
@@ -11655,23 +11595,22 @@ This package is part of the KDE games module.")
        (base32 "0d3y072q61xcik9lf0pz0c9njvarwlvf6hqv5fp5jyqaf2902pmi"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdeclarative" ,kdeclarative)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           kdeclarative
+           ki18n
+           kiconthemes
+           kio
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative
+           qtsvg))
     (home-page "https://games.kde.org/")
     (synopsis "Old reversi board game, also known as othello")
     (description "KReversi is a simple one player strategy game played
@@ -11698,21 +11637,20 @@ This package is part of the KDE games module.")
        (base32 "0chd30byl2kww1k699vkygrxq2wdyvi84m2bimk23q96fl8h831y"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kwidgetsaddons
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative))
     (home-page "https://games.kde.org/")
     (synopsis "Dots and Boxes game")
     (description "KSquares is an implementation of the popular paper based
@@ -11735,22 +11673,21 @@ This package is part of the KDE games module.")
        (base32 "1mk73il4jh15z5pm3fp65hsyvmrga11c3h7w96yamy2n2bbniapq"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kio
+           kwidgetsaddons
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative
+           qtsvg))
     (home-page "https://games.kde.org/")
     (synopsis "Simple tactical game for number-crunchers")
     (description "KJumpingcube is a simple tactical game for one or two
@@ -11867,12 +11804,9 @@ the more difficult challenges.")
         (base32 "1z4pwpqyvxhlda99h6arh2rjk90fbms9q29fqizjblrdn01dlxn1"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list perl pkg-config))
     (inputs
-     `(("gtk+" ,gtk+-2)
-       ("libpng" ,libpng)
-       ("gstreamer" ,gstreamer)))
+     (list gtk+-2 libpng gstreamer))
     (arguments
      `(#:tests? #f
        #:phases
@@ -11909,13 +11843,9 @@ and chess engines.")
         (base32 "01fjchil2h6ry2ywr0dwjw2g7zd29580cr4c74d5z74h999lp6nh"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("qttools" ,qttools)))
+     (list qttools))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtmultimedia" ,qtmultimedia)
-       ("qtspeech" ,qtspeech)
-       ("qtsvg" ,qtsvg)
-       ("zlib" ,zlib)))
+     (list qtbase-5 qtmultimedia qtspeech qtsvg zlib))
     (arguments
      `(#:tests? #f
        #:phases
@@ -11924,8 +11854,7 @@ and chess engines.")
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "chessx.pro"
                (("\\$\\$\\[QT_INSTALL_BINS\\]/lrelease")
-                (string-append (assoc-ref inputs "qttools") "/bin/lrelease")))
-             #t))
+                (search-input-file inputs "/bin/lrelease")))))
          (add-after 'fix-paths 'make-qt-deterministic
            (lambda _
              (setenv "QT_RCC_SOURCE_DATE_OVERRIDE" "1")
@@ -11956,10 +11885,10 @@ etc.  You can also play games on FICS or against an engine.")
     (license license:gpl2+)))
 
 (define-public stockfish
-  (let ((neural-network-revision "3475407dc199")) ; also update hash below
+  (let ((neural-network-revision "13406b1dcbe0")) ; also update hash below
     (package
       (name "stockfish")
-      (version "14")
+      (version "14.1")
       (source
        (origin
          (method git-fetch)
@@ -11968,7 +11897,7 @@ etc.  You can also play games on FICS or against an engine.")
                (commit (string-append "sf_" version))))
          (file-name (git-file-name name version))
          (sha256
-          (base32 "046b3rq9w8lzgk07q5zazzkl93ai99ab18hr9d8n73mabjpi6zbx"))))
+          (base32 "0apqqcgpcflm3c6mcl13ln2y04f6zksnljmk4ys7naf7xk4vdgkd"))))
       (build-system gnu-build-system)
       (inputs
        `(("neural-network"
@@ -11978,7 +11907,7 @@ etc.  You can also play games on FICS or against an engine.")
                                  neural-network-revision ".nnue"))
              (sha256
               (base32
-               "11zci5kgwdw9rh8w2w4p84764g82rr666y3n8r2flwwrq5yl0x9l"))))))
+               "0vr3hcmlqqm74pn7hc54gmfs9drqvgc53nh7bvy6v8z0rcfnnh0k"))))))
       (arguments
        `(#:tests? #f
          #:make-flags (list "-C" "src"
@@ -12023,9 +11952,7 @@ ChessX.")
         (base32 "0139wxyrir10cbkvkjn548xgmp84wax8mfwk80yxbxlcdamrg257"))))
     (build-system gnu-build-system)
     (inputs
-     `(("hicolor-icon-theme" ,hicolor-icon-theme)
-       ("sdl" ,sdl)
-       ("sdl-mixer" ,sdl-mixer)))
+     (list hicolor-icon-theme sdl sdl-mixer))
     (arguments
      `(#:configure-flags
        (list
@@ -12055,9 +11982,9 @@ get high scores.")
         (base32 "1xb4immzmd419aa08lgkzf7ibxa6ax238zb2l5iw9nkgvzlh1v6l"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("flatzebra" ,flatzebra)))
+     (list flatzebra))
     (home-page "http://perso.b2b2c.ca/~sarrazip/dev/burgerspace.html")
     (synopsis "Avoid evil foodstuffs and make burgers")
     (description
@@ -12083,13 +12010,9 @@ protect you.")
         (base32 "1y7v0jhp3apb619p7asikqr1dnwb2yxbh40wbx1ppmr5f03mq9ph"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("pkg-config" ,pkg-config)))
+     (list gettext-minimal pkg-config))
     (inputs
-     `(("curl" ,curl)
-       ("enet" ,enet)
-       ("openal" ,openal)
-       ("sdl2" ,sdl2)))
+     (list curl enet openal sdl2))
     (home-page "https://7kfans.com/")
     (synopsis "Seven Kingdoms Ancient Adversaries: real-time strategy game")
     (description
@@ -12261,8 +12184,7 @@ game.")  ;thanks to Debian for description
                (("/opt/gsasl")
                 (assoc-ref inputs "gsasl"))
                (("\\$\\$\\{PREFIX\\}/include/libircclient")
-                (string-append (assoc-ref inputs "libircclient")
-                               "/include/libircclient"))
+                (search-input-directory inputs "/include/libircclient"))
                (("LIB_DIRS =")
                 (string-append "LIB_DIRS = "
                                (assoc-ref inputs "boost") "/lib")))
@@ -12290,6 +12212,80 @@ game.")  ;thanks to Debian for description
 computer opponents or against real players online.")
     (license license:agpl3+)))
 
+(define-public xblackjack
+  (package
+    (name "xblackjack")
+    (version "2.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://www.ibiblio.org/pub/X11/contrib/games/"
+                           "xblackjack-" version ".tar.gz"))
+       (sha256
+        (base32 "05h93rya7zwnx2l58f0a7wkjadymkj4y77clcr2hryhrhhy1vwjx"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'configure
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((imake (assoc-ref inputs "imake"))
+                   (out (assoc-ref outputs "out")))
+               (substitute* "Imakefile"
+                 (("EXTRA_LIBRARIES = -lXm \\$\\(DEPLIBS\\) -lbsd")
+                  "EXTRA_LIBRARIES = -lXm -lXt -lXmu -lXext -lX11")
+                 (("^#define NonStandardInstallTargets NO")
+                  "#define NonStandardInstallTargets YES")
+                 (("BINDIR = /usr/local/bin")
+                  (string-append "BINDIR = " out "/bin"))
+                 (("MANDIR = /usr/local/man/cat1")
+                  (string-append "MANDIR = " out "/share/man/man1"))
+                 (("XAPPLOADDIR = /usr/local/lib/app-defaults")
+                  (string-append "XAPPLOADDIR = " out "/lib/X11/app-defaults")))
+
+               (invoke "xmkmf")  ; Generate Makefile.
+               (substitute* "Makefile"
+                 ((imake) out)
+                 (("ETCX11DIR = /etc/X11")
+                  (string-append "ETCX11DIR = " out "/etc/X11"))
+                 ;; Fix incorrect argument given to gcc. Error message:
+                 ;; "gcc: error: DefaultGcc2AMD64Opt: No such file or directory"
+                 (("CDEBUGFLAGS = [^\n]*") ""))
+
+               ;; Fix header paths.
+               (substitute* '("Draw.c"
+                              "Strategy.c")
+                 (("^#include <X11/Xm/Xm.h>")
+                  "#include <Xm/Xm.h>"))
+               (substitute* "Strategy.c"
+                 (("^#include <X11/Xm/Label.h>")
+                  "#include <Xm/Label.h>"))
+
+               ;; Fix compilation errors.
+               (substitute* "Table.c"
+                 (("/\\* focus_moved_proc \\*/\tXtInheritFocusMovedProc,") "")
+                 (("_XmMoveObject\\(\\(RectObj\\) w, rx, ry\\);")
+                  "_XmMoveObject(w, rx, ry);")
+                 (("_XmResizeObject\\(\\(RectObj\\) managed->locs[i].w, nw, nh,")
+                  "_XmResizeObject(managed->locs[i].w, nw, nh,")))))
+         (add-after 'install 'install-man-pages
+           (lambda _
+             (invoke "make" "install.man"))))
+       #:tests? #f))  ; No check target.
+    (inputs
+     (list lesstif libx11 libxext libxmu libxt))
+    (native-inputs
+     (list imake))
+    (home-page "https://www.ibiblio.org/pub/X11/contrib/games/")
+    (synopsis "X11/Motif blackjack game")
+    (description
+     "Xblackjack is a MOTIF/OLIT based tool constructed to get you ready for
+the casino.  It was inspired by a book called \"Beat the Dealer\" by Edward
+O. Thorp, Ph.D. of UCLA.  A number of important statistics are maintained
+for display, and used by the program to implement Thorp's \"Complete Point
+System\" (high-low system).")
+    (license (license:x11-style "" "See file headers."))))
+
 (define-public azimuth
   (package
     (name "azimuth")
@@ -12319,7 +12315,7 @@ computer opponents or against real players online.")
          (add-after 'unpack 'fix-install ; set install directory
            (lambda* (#:key outputs #:allow-other-keys)
              (substitute* "Makefile" (("/usr") (assoc-ref outputs "out"))) #t)))))
-    (inputs `(("sdl" ,sdl)))
+    (inputs (list sdl))
     (home-page "https://mdsteele.games/azimuth/")
     (synopsis "Metroidvania game with vector graphics")
     (description
@@ -12340,9 +12336,7 @@ inside the Zenith Colony.")
         (base32 "0qlvkiaglqq0izfph3l04mp4rqqqm9ks6rcsrmzrggw9x706z2iv"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libx11" ,libx11)
-       ("libxt" ,libxt)
-       ("xorgproto" ,xorgproto)))
+     (list libx11 libxt xorgproto))
     (home-page "http://cgoban1.sourceforge.net/")
     (synopsis "Go client for X11")
     (description "Provides a large set of Go-related services for X11:
@@ -12401,7 +12395,7 @@ such as GnuGo.
     (inputs
      `(("sdl" ,(sdl-union (list sdl sdl-mixer)))))
     (native-inputs
-     `(("imagemagick" ,imagemagick)))
+     (list imagemagick))
     (home-page "http://hcsoftware.sourceforge.net/passage/")
     (synopsis "Memento mori game")
     (description
@@ -12429,7 +12423,7 @@ there's no right way to interpret it.")
                   "09sb9sg44fvkgfdyycrm1ndpx7cnkrglxhci41y8f3gpagnvi7jk"))))
       (build-system gnu-build-system)
       (inputs
-       `(("sdl2" ,sdl2)))
+       (list sdl2))
       (arguments
        '(#:tests? #f ;no tests
          #:make-flags
@@ -12466,7 +12460,7 @@ game FPS.")
        #:phases
        (modify-phases %standard-phases
          (delete 'configure))))
-    (inputs `(("ncurses" ,ncurses)))
+    (inputs (list ncurses))
     (home-page "https://a-nikolaev.github.io/curseofwar/")
     (synopsis "Fast-paced action strategy game")
     (description "Curse of War is a fast-paced action strategy game originally
@@ -12495,10 +12489,8 @@ available.")
       (arguments
        `(#:tests? #f                              ; no tests
          #:build-type "Release"))
-      (native-inputs
-       `(("gcc" ,gcc-11)))                    ; need C++20-compatible compiler
       (inputs
-       `(("sfml" ,sfml)))
+       (list sfml))
       (home-page "https://github.com/sandsmark/Schiffbruch/")
       (synopsis "Pixelart survival game")
       (description
@@ -12524,7 +12516,7 @@ get attention, so you get found.")
                 "1yy5r1r0hv0xggk8qd8bwk2zy7abpv89nikq4flqgi53fc5q9xl7"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:tests? #f ; no tests provided
+     `(#:tests? #f                      ; no tests provided
        #:phases
        (modify-phases %standard-phases
          (delete 'configure)
@@ -12548,6 +12540,8 @@ get attention, so you get found.")
                (chdir "..")
                (install-file "prince" bin)
                (substitute* template (("\\$ROOT") out))
+               (substitute* "src/seg009.c"
+                 (("g_argv[0]") (string-append "\"" out "\"")))
                (install-file template app)
                (rename-file (string-append app "/SDLPoP.desktop.template")
                             (string-append app "/SDLPoP.desktop"))
@@ -12555,7 +12549,7 @@ get attention, so you get found.")
                (copy-recursively "data" (string-append bin "/data"))
                (copy-recursively "doc" opt)
                (copy-recursively "mods" opt)))))))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (inputs `(("sdl" ,(sdl-union (list sdl2
                                        sdl2-image
                                        sdl2-mixer)))))
@@ -12568,18 +12562,7 @@ disassembly of the DOS version, extended with new features.")
 (define-public fheroes2
   (package
     (name "fheroes2")
-    (version "0.9.7")
-    (build-system cmake-build-system)
-    (arguments
-     `(#:tests? #f                      ; no tests
-       #:make-flags '("FHEROES2_STRICT_COMPILATION=1"
-                      "RELEASE=1")))
-    (native-inputs
-     `(("gettext" ,gettext-minimal)))
-    (inputs
-     `(("libpng" ,libpng)
-       ("sdl" ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))
-       ("zlib" ,zlib)))
+    (version "0.9.11")
     (source
      (origin
        (method git-fetch)
@@ -12588,8 +12571,18 @@ disassembly of the DOS version, extended with new features.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32
-         "0v3zh8a8yxfikcr5vkmy36c57l4nmwisz13mjavn5f7yrirf86fn"))))
+        (base32 "1m8649srzg3j2b1hs4x2y8fib6hn7v0afv4c7bjnfk4bhpi4cqd7"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:tests? #f                      ; no tests
+       #:make-flags '("FHEROES2_STRICT_COMPILATION=1"
+                      "RELEASE=1")))
+    (native-inputs
+     (list gettext-minimal))
+    (inputs
+     (list libpng
+           (sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf))
+           zlib))
     (home-page "https://ihhub.github.io/fheroes2/")
     (synopsis "Turn-based strategy game engine")
     (description "@code{fheroes2} is an implementation of Heroes of Might and
diff --git a/gnu/packages/gawk.scm b/gnu/packages/gawk.scm
index d8494e9c1c..1935e73ab7 100644
--- a/gnu/packages/gawk.scm
+++ b/gnu/packages/gawk.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2012, 2013, 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2018 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2021 Marius Bakke <marius@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -30,13 +31,13 @@
 (define-public gawk
   (package
    (name "gawk")
-   (version "5.0.1")
+   (version "5.1.0")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnu/gawk/gawk-" version
                                 ".tar.xz"))
             (sha256
-             (base32 "15570p7g2x54asvr2fsc56sxzmm08fbk4mzpcs5n92fp9vq8cklf"))))
+             (base32 "1gc2cccqy1x1bf6rhwlmd8q7dz7gnam6nwgl38bxapv6qm5flpyg"))))
    (build-system gnu-build-system)
    (arguments
     `(#:phases (modify-phases %standard-phases
@@ -55,9 +56,7 @@
                              '((substitute* "extension/Makefile.in"
                                  (("^.*: check-for-shared-lib-support" match)
                                   (string-append "### " match))))
-                             '())
-
-                       #t)))
+                             '()))))
 
                  (add-before 'check 'adjust-test-infrastructure
                    (lambda _
@@ -66,18 +65,26 @@
                      (substitute* "test/Makefile"
                        (("\\| more") ""))
 
+                     ;; Silence a warning from bash about not being able
+                     ;; to change to an ISO-8859-1 locale.  The test itself
+                     ;; works fine, but newer versions of bash give a
+                     ;; locale warning which mangles the test output.
+                     (substitute* "test/localenl.sh"
+                       (("for LC_ALL in")
+                        "for LC in")
+                       (("export LC_ALL\n")
+                        "export LC_ALL=$LC 2>/dev/null\n"))
+
                      ;; Adjust the shebang in that file since it is then diff'd
                      ;; against the actual test output.
                      (substitute* "test/watchpoint1.ok"
                        (("#! /usr/bin/gawk")
-                        (string-append "#!" (which "gawk"))))
-                     #t)))))
-
-   (inputs `(("libsigsegv" ,libsigsegv)
+                        (string-append "#!" (which "gawk")))))))))
 
-             ,@(if (%current-target-system)
-                   `(("bash" ,bash))
-                   '())))
+   (inputs (list libsigsegv
+                 ;; Use the full-fledged Bash package, otherwise the test suite
+                 ;; sometimes fail non-deterministically.
+                 bash))
 
    (home-page "https://www.gnu.org/software/gawk/")
    (synopsis "Text scanning and processing language")
@@ -87,3 +94,30 @@ language for the easy manipulation of formatted text, such as tables of data.
 Gawk features many extensions beyond the traditional implementation,
 including network access, sorting, and large libraries.")
    (license gpl3+)))
+
+(define-public mawk
+  (package
+    (name "mawk")
+    (version "1.3.4-20200120")
+    (home-page "https://invisible-island.net/mawk/mawk.html")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://invisible-mirror.net/archives/mawk"
+                                  "/mawk-" version ".tgz"))
+              (sha256
+               (base32
+                "0dw2icf8bnqd9y0clfd9pkcxz4b2phdihwci13z914mf3wgcvm3z"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  ;; Prevent tests from hard coding PATH to a bogus value.
+                  (substitute* '("test/mawktest" "test/fpe_test")
+                    (("^PATH=.*")
+                     ""))))))
+    (build-system gnu-build-system)
+    (synopsis "Text scanning and processing language")
+    (description
+     "@command{mawk} is an interpreter for the Awk programming language.
+This version aims to be smaller and faster than GNU Awk, at the expense
+of fewer features and extensions.")
+    (license gpl2))) ;version 2 only
diff --git a/gnu/packages/gcc.scm b/gnu/packages/gcc.scm
index 493ff2659f..efa0baeaa1 100644
--- a/gnu/packages/gcc.scm
+++ b/gnu/packages/gcc.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014, 2015, 2018 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2014, 2015, 2016, 2017, 2019 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2014, 2015, 2016, 2017, 2019, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2015, 2016, 2017, 2018, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Carlos Sánchez de La Lama <csanchezdll@gmail.com>
@@ -47,6 +47,7 @@
   #:use-module (guix download)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system trivial)
+  #:use-module (guix gexp)
   #:use-module (guix utils)
   #:use-module (srfi srfi-1)
   #:use-module (ice-9 regex))
@@ -80,6 +81,11 @@ where the OS part is overloaded to denote a specific ABI---into GCC
          ;; Cilk has been removed from GCC 8 anyway.
          '("--disable-libcilkrts"))
 
+        ;; glibc needs the 128-bit long double type on these architectures.
+        ((or (string-prefix? "powerpc64le-" target)
+             (string-prefix? "powerpc-" target))
+         '("--with-long-double-128"))
+
         (else
          ;; TODO: Add `arm.*-gnueabi', etc.
          '())))
@@ -165,16 +171,12 @@ where the OS part is overloaded to denote a specific ABI---into GCC
                   "lib"                    ;libgcc_s, libgomp, etc. (15+ MiB)
                   "debug"))                ;debug symbols of run-time libraries
 
-       (inputs `(("gmp" ,gmp)
-                 ("mpfr" ,mpfr)
-                 ("mpc" ,mpc)
-                 ("libelf" ,libelf)
-                 ("zlib" ,zlib)))
+       (inputs (list gmp mpfr mpc libelf zlib))
 
        ;; GCC < 5 is one of the few packages that doesn't ship .info files.
        ;; Newer texinfos fail to build the manual, so we use an older one.
-       (native-inputs `(("perl" ,perl)   ;for manpages
-                        ("texinfo" ,texinfo-5)))
+       (native-inputs (list perl ;for manpages
+                            texinfo-5))
 
        (arguments
         `(#:out-of-source? #t
@@ -275,13 +277,10 @@ where the OS part is overloaded to denote a specific ABI---into GCC
 ~a"
                                libc line))))
 
-                  ;; TODO: Make this unconditional in core-updates.
-                  ,@(if (target-powerpc?)
-                      `((when (file-exists? "gcc/config/rs6000")
-                          ;; Force powerpc libdir to be /lib and not /lib64
-                          (substitute* (find-files "gcc/config/rs6000")
-                            (("/lib64") "/lib"))))
-                      `())
+                  (when (file-exists? "gcc/config/rs6000")
+                    ;; Force powerpc libdir to be /lib and not /lib64
+                    (substitute* (find-files "gcc/config/rs6000")
+                      (("/lib64") "/lib")))
 
                   ;; Don't retain a dependency on the build-time sed.
                   (substitute* "fixincludes/fixincl.x"
@@ -330,8 +329,7 @@ where the OS part is overloaded to denote a specific ABI---into GCC
                   ;; but there's nothing useful to look for here.)
                   (substitute* "gcc/config.in"
                     (("PREFIX_INCLUDE_DIR")
-                     "PREFIX_INCLUDE_DIR_isnt_necessary_here"))
-                  #t)))
+                     "PREFIX_INCLUDE_DIR_isnt_necessary_here")))))
 
             (add-after 'configure 'post-configure
               (lambda _
@@ -339,8 +337,7 @@ where the OS part is overloaded to denote a specific ABI---into GCC
                 ;; build-time dependencies---e.g., `--with-ppl=/gnu/store/xxx'.
                 (substitute* "Makefile"
                   (("^TOPLEVEL_CONFIGURE_ARGUMENTS=(.*)$" _ rest)
-                   "TOPLEVEL_CONFIGURE_ARGUMENTS=\n"))
-                #t)))))
+                   "TOPLEVEL_CONFIGURE_ARGUMENTS=\n")))))))
 
        (native-search-paths
         ;; Use the language-specific variables rather than 'CPATH' because they
@@ -388,20 +385,17 @@ Go.  It also includes runtime support libraries for these languages.")
               ;; This is required for building with glibc-2.26.
               ;; https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81712
               (snippet
-               '(begin
-                  (for-each
-                   (lambda (dir)
-                     (substitute* (string-append "libgcc/config/"
-                                                 dir "/linux-unwind.h")
-                       (("struct ucontext") "ucontext_t")))
-                   '("aarch64" "alpha" "bfin" "i386" "m68k"
-                     "pa" "sh" "tilepro" "xtensa"))
-                  #t))))
+               '(for-each
+                 (lambda (dir)
+                   (substitute* (string-append "libgcc/config/"
+                                               dir "/linux-unwind.h")
+                     (("struct ucontext") "ucontext_t")))
+                 '("aarch64" "alpha" "bfin" "i386" "m68k"
+                   "pa" "sh" "tilepro" "xtensa")))))
     (supported-systems %supported-systems)
     (inputs
-     `(("isl" ,isl-0.11)
-       ("cloog" ,cloog)
-       ,@(package-inputs gcc-4.7)))))
+     (modify-inputs (package-inputs gcc-4.7)
+       (prepend isl-0.11 cloog)))))
 
 (define-public gcc-4.9
   (package (inherit gcc-4.8)
@@ -424,18 +418,16 @@ Go.  It also includes runtime support libraries for these languages.")
               ;; This is required for building with glibc-2.26.
               ;; https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81712
               (snippet
-               '(begin
-                  (for-each
-                   (lambda (dir)
-                     (substitute* (string-append "libgcc/config/"
-                                                 dir "/linux-unwind.h")
-                       (("struct ucontext") "ucontext_t")))
-                   '("aarch64" "alpha" "bfin" "i386" "m68k" "nios2"
-                     "pa" "sh" "tilepro" "xtensa"))
-                  #t))))
+               '(for-each
+                 (lambda (dir)
+                   (substitute* (string-append "libgcc/config/"
+                                               dir "/linux-unwind.h")
+                     (("struct ucontext") "ucontext_t")))
+                 '("aarch64" "alpha" "bfin" "i386" "m68k" "nios2"
+                   "pa" "sh" "tilepro" "xtensa")))))
     ;; Override inherited texinfo-5 with latest version.
-    (native-inputs `(("perl" ,perl)   ;for manpages
-                     ("texinfo" ,texinfo)))
+    (native-inputs (list perl ;for manpages
+                         texinfo))
     (arguments
      (if (%current-target-system)
          (package-arguments gcc-4.8)
@@ -460,8 +452,18 @@ Go.  It also includes runtime support libraries for these languages.")
                                           ":"))
                      (format #t
                              "environment variable `CPLUS_INCLUDE_PATH' changed to ~a~%"
-                             (getenv "CPLUS_INCLUDE_PATH"))
-                     #t))))))))))
+                             (getenv "CPLUS_INCLUDE_PATH"))))))))))))
+
+(define gcc-canadian-cross-objdump-snippet
+  ;; Fix 'libcc1/configure' error when cross-compiling GCC.  Without that,
+  ;; 'libcc1/configure' wrongfully determines that '-rdynamic' support is
+  ;; missing because $gcc_cv_objdump is empty:
+  ;;
+  ;;   https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67590
+  ;;   http://cgit.openembedded.org/openembedded-core/commit/?id=f6e47aa9b12f9ab61530c40e0343f451699d9077
+  #~(substitute* "libcc1/configure"
+      (("\\$gcc_cv_objdump -T")
+       "$OBJDUMP_FOR_TARGET -T")))
 
 (define-public gcc-5
   ;; Note: GCC >= 5 ships with .info files but 'make install' fails to install
@@ -483,25 +485,15 @@ Go.  It also includes runtime support libraries for these languages.")
                                        "gcc-5-source-date-epoch-2.patch"
                                        "gcc-6-libsanitizer-mode-size.patch"
                                        "gcc-fix-texi2pod.patch"
-                                       "gcc-5-hurd.patch"))
+                                       "gcc-5-hurd.patch"
+                                       ;; See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86162
+                                       "gcc-5-fix-powerpc64le-build.patch"))
               (modules '((guix build utils)))
-              (snippet
-               ;; Fix 'libcc1/configure' error when cross-compiling GCC.
-               ;; Without that, 'libcc1/configure' wrongfully determines that
-               ;; '-rdynamic' support is missing because $gcc_cv_objdump is
-               ;; empty:
-               ;;
-               ;;   https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67590
-               ;;   http://cgit.openembedded.org/openembedded-core/commit/?id=f6e47aa9b12f9ab61530c40e0343f451699d9077
-               '(begin
-                  (substitute* "libcc1/configure"
-                    (("\\$gcc_cv_objdump -T")
-                     "$OBJDUMP_FOR_TARGET -T"))
-                  #t))))
+              (snippet gcc-canadian-cross-objdump-snippet)))
     (inputs
-     `(;; GCC5 needs <isl/band.h> which is removed in later versions.
-       ("isl" ,isl-0.18)
-       ,@(package-inputs gcc-4.7)))))
+     (modify-inputs (package-inputs gcc-4.7)
+       (prepend ;; GCC5 needs <isl/band.h> which is removed in later versions.
+                isl-0.18)))))
 
 (define-public gcc-6
   (package
@@ -533,6 +525,27 @@ Go.  It also includes runtime support libraries for these languages.")
 
        ,@(package-inputs gcc-4.7)))))
 
+(define %gcc-7.5-x86_64-micro-architectures
+  ;; Suitable '-march' values for GCC 7.5 (info "(gcc) x86 Options").
+  '("core2" "nehalem" "westmere" "sandybridge" "ivybridge"
+    "haswell" "broadwell" "skylake" "bonnell" "silvermont"
+    "knl" "skylake-avx512"
+
+    "k8" "k8-sse3" "barcelona"
+    "bdver1" "bdver2" "bdver3" "bdver4"
+    "znver1"
+    "btver1" "btver2" "geode"))
+
+(define %gcc-10-x86_64-micro-architectures
+  ;; Suitable '-march' values for GCC 10.
+  (append %gcc-7.5-x86_64-micro-architectures
+      '("goldmont" "goldmont-plus" "tremont"
+        "knm" "cannonlake" "icelake-client" "icelake-server"
+        "cascadelake" "cooperlake" "tigerlake"
+
+        "znver2" "znver3")))
+
+
 (define-public gcc-7
   (package
     (inherit gcc-6)
@@ -550,7 +563,10 @@ Go.  It also includes runtime support libraries for these languages.")
     (description
      "GCC is the GNU Compiler Collection.  It provides compiler front-ends
 for several languages, including C, C++, Objective-C, Fortran, Ada, and Go.
-It also includes runtime support libraries for these languages.")))
+It also includes runtime support libraries for these languages.")
+    (properties
+     `((compiler-cpu-architectures
+        ("x86_64" ,@%gcc-7.5-x86_64-micro-architectures))))))
 
 (define-public gcc-8
   (package
@@ -565,7 +581,9 @@ It also includes runtime support libraries for these languages.")))
                 "0l7d4m9jx124xsk6xardchgy2k5j5l2b15q322k31f0va4d8826k"))
               (patches (search-patches "gcc-8-strmov-store-file-names.patch"
                                        "gcc-5.0-libvtv-runpath.patch"
-                                       "gcc-8-sort-libtool-find-output.patch"))))))
+                                       "gcc-8-sort-libtool-find-output.patch"))
+              (modules '((guix build utils)))
+              (snippet gcc-canadian-cross-objdump-snippet)))))
 
 (define-public gcc-9
   (package
@@ -580,7 +598,9 @@ It also includes runtime support libraries for these languages.")))
               "13l3p6g2krilaawbapmn9zmmrh3zdwc36mfr3msxfy038hps6pf9"))
             (patches (search-patches "gcc-9-strmov-store-file-names.patch"
                                      "gcc-9-asan-fix-limits-include.patch"
-                                     "gcc-5.0-libvtv-runpath.patch"))))))
+                                     "gcc-5.0-libvtv-runpath.patch"))
+            (modules '((guix build utils)))
+            (snippet gcc-canadian-cross-objdump-snippet)))))
 
 (define-public gcc-10
   (package
@@ -594,7 +614,12 @@ It also includes runtime support libraries for these languages.")))
              (base32
               "0i6378ig6h397zkhd7m4ccwjx5alvzrf2hm27p1pzwjhlv0h9x34"))
             (patches (search-patches "gcc-9-strmov-store-file-names.patch"
-                                     "gcc-5.0-libvtv-runpath.patch"))))))
+                                     "gcc-5.0-libvtv-runpath.patch"))
+            (modules '((guix build utils)))
+            (snippet gcc-canadian-cross-objdump-snippet)))
+   (properties
+    `((compiler-cpu-architectures
+       ("x86_64" ,@%gcc-10-x86_64-micro-architectures))))))
 
 (define-public gcc-11
   (package
@@ -608,11 +633,13 @@ It also includes runtime support libraries for these languages.")))
              (base32
               "12zs6vd2rapp42x154m479hg3h3lsafn3xhg06hp5hsldd9xr3nh"))
             (patches (search-patches "gcc-9-strmov-store-file-names.patch"
-                                     "gcc-5.0-libvtv-runpath.patch"))))))
+                                     "gcc-5.0-libvtv-runpath.patch"))
+            (modules '((guix build utils)))
+            (snippet gcc-canadian-cross-objdump-snippet)))))
 
 ;; Note: When changing the default gcc version, update
 ;;       the gcc-toolchain-* definitions.
-(define-public gcc gcc-7)
+(define-public gcc gcc-10)
 
 (define-public (make-libstdc++ gcc)
   "Return a libstdc++ package based on GCC.  The primary use case is when
@@ -623,25 +650,16 @@ using compilers other than GCC."
     (arguments
      `(#:out-of-source? #t
        #:phases
-       ;; TODO: Use the target-powerpc arm for everyone.
-        ,(if (target-powerpc?)
-           `(modify-phases %standard-phases
-              ;; Force rs6000 (i.e., powerpc) libdir to be /lib and not /lib64.
-              (add-before 'chdir 'fix-rs6000-libdir
-                (lambda _
-                  (when (file-exists? "gcc/config/rs6000")
-                    (substitute* (find-files "gcc/config/rs6000")
-                      (("/lib64") "/lib")))
-                  #t))
-              (add-before 'configure 'chdir
-                (lambda _
-                  (chdir "libstdc++-v3")
-                  #t)))
-           `(alist-cons-before 'configure 'chdir
-              (lambda _
-                (chdir "libstdc++-v3")
-                #t)
-              %standard-phases))
+       (modify-phases %standard-phases
+         ;; Force rs6000 (i.e., powerpc) libdir to be /lib and not /lib64.
+         (add-before 'chdir 'fix-rs6000-libdir
+           (lambda _
+             (when (file-exists? "gcc/config/rs6000")
+               (substitute* (find-files "gcc/config/rs6000")
+                 (("/lib64") "/lib")))))
+         (add-before 'configure 'chdir
+           (lambda _
+             (chdir "libstdc++-v3"))))
 
        #:configure-flags `("--disable-libstdcxx-pch"
                            ,(string-append "--with-gxx-include-dir="
@@ -692,16 +710,14 @@ using compilers other than GCC."
        (modify-phases %standard-phases
          (add-before 'configure 'chdir
            (lambda _
-             (chdir "libiberty")
-             #t))
+             (chdir "libiberty")))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out     (assoc-ref outputs "out"))
                     (lib     (string-append out "/lib/"))
                     (include (string-append out "/include/")))
                (install-file "libiberty.a" lib)
-               (install-file "../include/libiberty.h" include))
-             #t)))))
+               (install-file "../include/libiberty.h" include)))))))
     (inputs '())
     (outputs '("out"))
     (native-inputs '())
@@ -741,10 +757,10 @@ as the 'native-search-paths' field."
         `(modify-phases ,phases
            (add-after 'install 'remove-broken-or-conflicting-files
              (lambda* (#:key outputs #:allow-other-keys)
-               (for-each delete-file
-                         (find-files (string-append (assoc-ref outputs "out") "/bin")
-                                     ".*(c\\+\\+|cpp|g\\+\\+|gcov|gcc|gcc-.*)"))
-               #t))))))))
+               (for-each
+                delete-file
+                (find-files (string-append (assoc-ref outputs "out") "/bin")
+                            ".*(c\\+\\+|cpp|g\\+\\+|gcov|gcc|lto)(-.*)?$"))))))))))
 
 (define* (custom-gcc-gccgo gcc name languages
                            #:optional
@@ -796,12 +812,13 @@ as the 'native-search-paths' field."
 
 (define-public gfortran
   (hidden-package
-   (custom-gcc (package
-                 (inherit gcc)
-                 ;; XXX: Remove LIBSTDC++-HEADERS from the inputs just to
-                 ;; avoid a rebuild of all the GFORTRAN dependents.
-                 ;; TODO: Remove this hack on the next rebuild cycle.
-                 (inputs (alist-delete "libstdc++" (package-inputs gcc))))
+   (custom-gcc gcc
+               "gfortran" '("fortran")
+               %generic-search-paths)))
+
+(define-public gfortran-7
+  (hidden-package
+   (custom-gcc gcc-7
                "gfortran" '("fortran")
                %generic-search-paths)))
 
@@ -839,8 +856,7 @@ as the 'native-search-paths' field."
              (lambda* (#:key outputs #:allow-other-keys)
                (for-each delete-file
                          (find-files (string-append (assoc-ref outputs "out") "/bin")
-                                     ".*(c\\+\\+|cpp|g\\+\\+|gcov|gcc|gcc-.*)"))
-               #t))))))
+                                     ".*(c\\+\\+|cpp|g\\+\\+|gcov|gcc|gcc-.*)"))))))))
     (synopsis "GCC library generating machine code on-the-fly at runtime")
     (description
      "This package is part of the GNU Compiler Collection and provides an
@@ -871,9 +887,9 @@ provides the GNU compiler for the Go programming language.")
                         (tooldir (dirname (car (find-files exedir "^cgo$")))))
                    (wrap-program (string-append out "/bin/go")
                      `("GCCGOTOOLDIR" =
-                       (,(string-append "${GCCGOTOOLDIR-" tooldir "}")))
+                       (,(string-append "${GCCGOTOOLDIR:-" tooldir "}")))
                      `("GOROOT" =
-                       (,(string-append "${GOROOT-" out "}")))))))
+                       (,(string-append "${GOROOT:-" out "}")))))))
              (add-before 'configure 'fix-gotools-runpath
                (lambda _
                  (substitute* "gotools/Makefile.in"
@@ -946,7 +962,7 @@ provides the GNU compiler for the Go programming language."))
   (custom-gcc gcc-10 "gcc-objc" '("objc")
               %objc-search-paths))
 
-(define-public gcc-objc gcc-objc-7)
+(define-public gcc-objc gcc-objc-10)
 
 (define %objc++-search-paths
   (list (search-path-specification
@@ -988,7 +1004,7 @@ provides the GNU compiler for the Go programming language."))
   (custom-gcc gcc-10 "gcc-objc++" '("obj-c++")
               %objc++-search-paths))
 
-(define-public gcc-objc++ gcc-objc++-7)
+(define-public gcc-objc++ gcc-objc++-10)
 
 (define (make-libstdc++-doc gcc)
   "Return a package with the libstdc++ documentation for GCC."
@@ -998,13 +1014,13 @@ provides the GNU compiler for the Go programming language."))
     (version (package-version gcc))
     (synopsis "GNU libstdc++ documentation")
     (outputs '("out"))
-    (native-inputs `(("doxygen" ,doxygen)
-                     ("texinfo" ,texinfo)
-                     ("libxml2" ,libxml2)
-                     ("libxslt" ,libxslt)
-                     ("docbook-xml" ,docbook-xml)
-                     ("docbook-xsl" ,docbook-xsl)
-                     ("graphviz" ,graphviz))) ;for 'dot', invoked by 'doxygen'
+    (native-inputs (list doxygen
+                         texinfo
+                         libxml2
+                         libxslt
+                         docbook-xml
+                         docbook-xsl
+                         graphviz)) ;for 'dot', invoked by 'doxygen'
     (inputs '())
     (propagated-inputs '())
     (arguments
@@ -1013,8 +1029,7 @@ provides the GNU compiler for the Go programming language."))
        #:phases (modify-phases %standard-phases
                   (add-before 'configure 'chdir
                               (lambda _
-                                (chdir "libstdc++-v3")
-                                #t))
+                                (chdir "libstdc++-v3")))
                   (add-before 'configure 'set-xsl-directory
                               (lambda* (#:key inputs #:allow-other-keys)
                                 (let ((docbook (assoc-ref inputs "docbook-xsl")))
@@ -1023,8 +1038,7 @@ provides the GNU compiler for the Go programming language."))
                                     (("@XSL_STYLE_DIR@")
                                      (string-append
                                       docbook "/xml/xsl/"
-                                      (strip-store-file-name docbook))))
-                                  #t)))
+                                      (strip-store-file-name docbook)))))))
                   (replace 'build
                            (lambda _
                              ;; XXX: There's also a 'doc-info' target, but it
@@ -1051,7 +1065,7 @@ provides the GNU compiler for the Go programming language."))
 (define-public isl
   (package
     (name "isl")
-    (version "0.22.1")
+    (version "0.23")
     (source (origin
              (method url-fetch)
              (uri (list (string-append
@@ -1062,7 +1076,7 @@ provides the GNU compiler for the Go programming language."))
                                        name "-" version ".tar.bz2")))
              (sha256
               (base32
-               "1kf54jib0nind1pvakblnfhimmwzm0y1llz8470ag0di5vwqwrhs"))))
+               "0k91zck10zxs9sk3yrbb92y1j3w981w3fbwkfwd7kl779b0j52f5"))))
     (build-system gnu-build-system)
     (outputs '("out" "static"))
     (arguments
@@ -1081,9 +1095,8 @@ provides the GNU compiler for the Go programming language."))
                         ;; libtool looks for it in the usual locations.
                         (substitute* (string-append out "/lib/libisl.la")
                           (("^old_library=.*")
-                           "old_library=''\n"))
-                        #t))))))
-    (inputs `(("gmp" ,gmp)))
+                           "old_library=''\n"))))))))
+    (inputs (list gmp))
     (home-page "http://isl.gforge.inria.fr/")
     (synopsis
      "Manipulating sets and relations of integer points \
@@ -1149,8 +1162,7 @@ dependence analysis and bounds on piecewise step-polynomials.")
         "0a12rwfwp22zd0nlld0xyql11cj390rrq1prw35yjsw8wzfshjhw"))
       (file-name (string-append name "-" version ".tar.gz"))))
     (build-system gnu-build-system)
-    (inputs `(("gmp" ,gmp)
-              ("isl" ,isl-0.11)))
+    (inputs (list gmp isl-0.11))
     (arguments '(#:configure-flags '("--with-isl=system")))
     (home-page "http://www.cloog.org/")
     (synopsis "Library to generate code for scanning Z-polyhedra")
@@ -1180,7 +1192,7 @@ effective code.")
                (base32
                 "1sfsj9256w18qzylgag2h5h377aq8in8929svblfnj9svfriqcys"))))
     (build-system gnu-build-system)
-    (native-inputs `(("texinfo" ,texinfo)))
+    (native-inputs (list texinfo))
     (arguments
      '(#:phases (modify-phases %standard-phases
                   (delete 'configure)
@@ -1208,8 +1220,7 @@ effective code.")
                                            (copy-file file
                                                       (string-append html "/"
                                                                      file)))
-                                         (find-files "." "\\.html$"))
-                               #t))))))
+                                         (find-files "." "\\.html$"))))))))
     (synopsis "Reference manual for the C programming language")
     (description
      "This is a reference manual for the C programming language, as
diff --git a/gnu/packages/gd.scm b/gnu/packages/gd.scm
index 2923358d8f..9e422dbe97 100644
--- a/gnu/packages/gd.scm
+++ b/gnu/packages/gd.scm
@@ -3,7 +3,7 @@
 ;;; Copyright © 2015, 2016 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2016, 2017 Leo Famulari <leo@famulari.name>
-;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2017, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
@@ -42,7 +42,7 @@
     ;; Note: With libgd.org now pointing to github.com, genuine old
     ;; tarballs are no longer available.  Notably, versions 2.0.x are
     ;; missing.
-    (version "2.3.0")
+    (version "2.3.2")
     (source (origin
              (method url-fetch)
              (uri (string-append
@@ -50,9 +50,14 @@
                    version "/libgd-" version ".tar.xz"))
              (sha256
               (base32
-               "0n5czhxzinvjvmhkf5l9fwjdx5ip69k5k7pj6zwb6zs1k9dibngc"))
-             (patches (search-patches "gd-fix-tests-on-i686.patch"
-                                      "gd-brect-bounds.patch"))))
+               "1yypywkh8vphcy4qqpf51kxpb0a3r7rjqk3fc61rpn70hiq092j7"))
+             (patches
+              (search-patches "gd-fix-tests-on-i686.patch"
+                              "gd-brect-bounds.patch"
+                              ;; Drop when
+                              ;; https://github.com/libgd/libgd/issues/691
+                              ;; is solved.
+                              "gd-Revert-fix-303-gdlib.pc.patch"))))
     (build-system gnu-build-system)
     (arguments
       ;; As recommended by github.com/libgd/libgd/issues/278 to fix rounding
@@ -61,17 +66,16 @@
        #:configure-flags '("--disable-static")
        #:phases
        (modify-phases %standard-phases
-         ;; This test is known to fail on i686-linux:
+         ;; This test is known to fail on most architectures:
          ;; https://github.com/libgd/libgd/issues/359
          ;; TODO Replace this substitution with an upstream bug fix.
          (add-after 'unpack 'disable-failing-test
            (lambda _
              (substitute* "tests/gdimagegrayscale/basic.c"
                (("return gdNumFailures\\(\\)")
-                 "return 0"))
-             #t)))))
+                 "return 0")))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("fontconfig" ,fontconfig)
        ("freetype" ,freetype)
@@ -111,7 +115,7 @@ most common applications of GD involve website development.")
        ("libjpeg" ,libjpeg-turbo)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("perl-extutils-pkgconfig" ,perl-extutils-pkgconfig)))
+     (list perl-extutils-pkgconfig))
     (arguments
      `(#:make-maker-flags
        (list (string-append "--lib_jpeg_path="
@@ -141,10 +145,9 @@ you can create PNG images on the fly or modify existing files.")
          (add-after 'unpack 'set-env
            (lambda _ (setenv "PERL_USE_UNSAFE_INC" "1") #t)))))
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (propagated-inputs
-     `(("perl-gd" ,perl-gd)
-       ("perl-image-magick" ,perl-image-magick)))
+     (list perl-gd perl-image-magick))
     (home-page "https://metacpan.org/release/GD-SecurityImage")
     (synopsis "Security image generator")
     (description "This module provides a basic interface to create
diff --git a/gnu/packages/gdb.scm b/gnu/packages/gdb.scm
index 8c28f82992..aa9e479e46 100644
--- a/gnu/packages/gdb.scm
+++ b/gnu/packages/gdb.scm
@@ -4,7 +4,8 @@
 ;;; Copyright © 2015, 2016, 2019, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
-;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2020, 2021 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -23,6 +24,7 @@
 
 (define-module (gnu packages gdb)
   #:use-module (gnu packages)
+  #:use-module (gnu packages bash)
   #:use-module (gnu packages hurd)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages readline)
@@ -34,65 +36,74 @@
   #:use-module (gnu packages pretty-print)
   #:use-module (gnu packages python)
   #:use-module (gnu packages pkg-config)
+  #:use-module (guix download)
   #:use-module ((guix licenses) #:select (gpl3+))
   #:use-module (guix packages)
-  #:use-module (guix download)
+  #:use-module (guix utils)
   #:use-module (guix build-system gnu)
   #:use-module ((guix build utils) #:select (alist-replace))
   #:use-module (srfi srfi-1))
 
-(define-public gdb-10
+(define-public gdb-11
   (package
     (name "gdb")
-    (version "10.2")
+    (version "11.1")
     (source (origin
-             (method url-fetch)
-             (uri (string-append "mirror://gnu/gdb/gdb-"
-                                 version ".tar.xz"))
-             (sha256
-              (base32
-               "0aag1c0fw875pvhjg1qp7x8pf6gf92bjv5gcic5716scacyj58da"))))
-
+              (method url-fetch)
+              (uri (string-append "mirror://gnu/gdb/gdb-"
+                                  version ".tar.xz"))
+              (sha256
+               (base32
+                "151z6d0265hv9cgx9zqqa4bd6vbp20hrljhd6bxl7lr0gd0crkyc"))))
     (build-system gnu-build-system)
+    (outputs '("out" "debug"))
     (arguments
-     `(#:tests? #f ; FIXME "make check" fails on single-processor systems.
-
+     `(#:tests? #f                      ;FIXME: 217 unexpected failures
        #:out-of-source? #t
-
        #:modules ((srfi srfi-1)
                   ,@%gnu-build-system-modules)
-
        #:phases (modify-phases %standard-phases
-                  (add-after
-                   'configure 'post-configure
-                   (lambda _
-                     (for-each patch-makefile-SHELL
-                               (find-files "." "Makefile\\.in"))
-                     #t))
-                  (add-after
-                   'install 'remove-libs-already-in-binutils
-                   (lambda* (#:key native-inputs inputs outputs
-                             #:allow-other-keys)
-                     ;; Like Binutils, GDB installs libbfd, libopcodes, etc.
-                     ;; However, this leads to collisions when both are
-                     ;; installed, and really is none of its business,
-                     ;; conceptually.  So remove them.
-                     (let* ((binutils (or (assoc-ref inputs "binutils")
-                                          (assoc-ref native-inputs "binutils")))
-                            (out      (assoc-ref outputs "out"))
-                            (files1   (with-directory-excursion binutils
-                                        (append (find-files "lib")
-                                                (find-files "include"))))
-                            (files2   (with-directory-excursion out
-                                        (append (find-files "lib")
-                                                (find-files "include"))))
-                            (common   (lset-intersection string=?
-                                                         files1 files2)))
-                       (with-directory-excursion out
-                         (for-each delete-file common)
-                         #t)))))))
+                  (add-after 'unpack 'patch-paths
+                    (lambda* (#:key inputs #:allow-other-keys)
+                      (let ((sh (string-append (assoc-ref inputs "bash")
+                                               "/bin/sh")))
+                        (substitute* '("gdb/ser-pipe.c"
+                                       "gdbsupport/pathstuff.cc")
+                          (("\"/bin/sh\"")
+                           (format #f "~s" sh))))))
+                  ,@(if (hurd-target?)
+                        '((add-after 'unpack 'patch-gdb/hurd
+                            (lambda* (#:key inputs #:allow-other-keys)
+                              (let ((patch (assoc-ref inputs "hurd-build.patch")))
+                                (invoke "patch" "-p1" "--force" "-i" patch)))))
+                        '())
+                  (add-after 'configure 'post-configure
+                    (lambda _
+                      (for-each patch-makefile-SHELL
+                                (find-files "." "Makefile\\.in"))))
+                  (add-after 'install 'remove-libs-already-in-binutils
+                    (lambda* (#:key native-inputs inputs outputs
+                              #:allow-other-keys)
+                      ;; Like Binutils, GDB installs libbfd, libopcodes, etc.
+                      ;; However, this leads to collisions when both are
+                      ;; installed, and really is none of its business,
+                      ;; conceptually.  So remove them.
+                      (let* ((binutils (or (assoc-ref inputs "binutils")
+                                           (assoc-ref native-inputs "binutils")))
+                             (out      (assoc-ref outputs "out"))
+                             (files1   (with-directory-excursion binutils
+                                         (append (find-files "lib")
+                                             (find-files "include"))))
+                             (files2   (with-directory-excursion out
+                                         (append (find-files "lib")
+                                             (find-files "include"))))
+                             (common   (lset-intersection string=?
+                                                          files1 files2)))
+                        (with-directory-excursion out
+                          (for-each delete-file common))))))))
     (inputs
-     `(("expat" ,expat)
+     `(("bash" ,bash)
+       ("expat" ,expat)
        ("mpfr" ,mpfr)
        ("gmp" ,gmp)
        ("readline" ,readline)
@@ -106,18 +117,28 @@
        ("libxml2" ,libxml2)
 
        ;; The Hurd needs -lshouldbeinlibc.
-       ,@(if (hurd-target?) `(("hurd" ,hurd)) '())))
+       ,@(if (hurd-target?)
+             `(("hurd" ,hurd)
+               ("hurd-build.patch"
+                ,(search-patch "gdb-fix-gnu-nat-build.patch")))
+             '())))
     (native-inputs
-      `(("texinfo" ,texinfo)
-        ("dejagnu" ,dejagnu)
-        ("pkg-config" ,pkg-config)
-        ,@(if (hurd-target?)
-              ;; When cross-compiling from x86_64-linux, make sure to use a
-              ;; 32-bit MiG because we assume target i586-pc-gnu.
-              `(("mig" ,(if (%current-target-system)
-                            mig/32-bit
-                            mig)))
-              '())))
+     `(("texinfo" ,texinfo)
+       ("dejagnu" ,dejagnu)
+       ("pkg-config" ,pkg-config)
+       ,@(if (hurd-target?)
+             ;; When cross-compiling from x86_64-linux, make sure to use a
+             ;; 32-bit MiG because we assume target i586-pc-gnu.
+             `(("mig" ,(if (%current-target-system)
+                           mig/32-bit
+                           mig)))
+             '())))
+    ;; TODO: Add support for the GDB_DEBUG_FILE_DIRECTORY environment
+    ;; variable in GDB itself instead of relying on some glue code in
+    ;; the Guix-provided .gdbinit file.
+    (native-search-paths (list (search-path-specification
+                                (variable "GDB_DEBUG_FILE_DIRECTORY")
+                                (files '("lib/debug")))))
     (home-page "https://www.gnu.org/software/gdb/")
     (synopsis "The GNU debugger")
     (description
@@ -128,31 +149,13 @@ the program is running to try to fix bugs.  It can be used to debug programs
 written in C, C++, Ada, Objective-C, Pascal and more.")
     (license gpl3+)))
 
-;; This version of GDB is required by some of the Rust compilers, see
-;; <https://bugs.gnu.org/37810>.
-(define-public gdb-8.2
-  (package
-    (inherit gdb-10)
-    (version "8.2.1")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "mirror://gnu/gdb/gdb-"
-                                  version ".tar.xz"))
-              (sha256
-               (base32
-                "00i27xqawjv282a07i73lp1l02n0a3ywzhykma75qg500wll6sha"))))
-    (inputs
-     (alist-replace "guile" (list guile-2.0)
-                    (package-inputs gdb-10)))))
-
 (define-public gdb
   ;; This is the fixed version that packages depend on.  Update it rarely
   ;; enough to avoid massive rebuilds.
-  gdb-10)
+  gdb-11)
 
 (define-public gdb-minimal
-  (package/inherit
-   gdb
-   (name "gdb-minimal")
-   (inputs (fold alist-delete (package-inputs gdb)
-                 '("libxml2" "ncurses" "python-wrapper" "source-highlight")))))
+  (package/inherit gdb
+    (name "gdb-minimal")
+    (inputs (fold alist-delete (package-inputs gdb)
+                  '("libxml2" "ncurses" "python-wrapper" "source-highlight")))))
diff --git a/gnu/packages/genealogy.scm b/gnu/packages/genealogy.scm
index 2c3781d361..b8bd4339b9 100644
--- a/gnu/packages/genealogy.scm
+++ b/gnu/packages/genealogy.scm
@@ -39,7 +39,7 @@
 (define-public gramps
   (package
     (name "gramps")
-    (version "5.1.3")
+    (version "5.1.4")
     (source
      (origin
        (method git-fetch)
@@ -48,32 +48,32 @@
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "109dwkswz2h2328xkqk2zj736d117s9pp7rz5cc1qg2vxn1lpm93"))))
+        (base32 "00358nzyw686ypqv45imc5k9frcqnhla0hpx9ynna3iy6iz5006x"))))
     (build-system python-build-system)
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("intltool" ,intltool)))
     (inputs
-     `(("cairo" ,cairo)
-       ("font-gnu-freefont" ,font-gnu-freefont)
-       ("geocode-glib" ,geocode-glib)
-       ("gexiv2" ,gexiv2)
-       ("ghostscript" ,ghostscript)
-       ("gobject-introspection" ,gobject-introspection)
-       ("gtk+" ,gtk+)
-       ("gtkspell3" ,gtkspell3)
-       ("graphviz" ,graphviz)
-       ("librsvg" ,librsvg)
-       ("osm-gps-map" ,osm-gps-map)
-       ("pango" ,pango)
-       ("python-bsddb3" ,python-bsddb3)
-       ("python-pillow" ,python-pillow)
-       ("python-pycairo" ,python-pycairo)
-       ("python-pygobject" ,python-pygobject)
-       ("python-pyicu" ,python-pyicu)
-       ("rcs" ,rcs)
-       ("sqlite" ,sqlite)
-       ("xdg-utils" ,xdg-utils)))
+     (list cairo
+           font-gnu-freefont
+           geocode-glib
+           gexiv2
+           ghostscript
+           gobject-introspection
+           gtk+
+           gtkspell3
+           graphviz
+           librsvg
+           osm-gps-map
+           pango
+           python-bsddb3
+           python-pillow
+           python-pycairo
+           python-pygobject
+           python-pyicu
+           rcs
+           sqlite
+           xdg-utils))
     (arguments
      `(#:imported-modules ((guix build glib-or-gtk-build-system)
                            ,@%python-build-system-modules)
diff --git a/gnu/packages/genimage.scm b/gnu/packages/genimage.scm
index bd77e4dc33..eb50141374 100644
--- a/gnu/packages/genimage.scm
+++ b/gnu/packages/genimage.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2018 Danny Milosavljevic <dannym@scratchpost.org>
 ;;; Copyright © 2021 Vincent Legoll <vincent.legoll@gmail.com>
+;;; Copyright © 2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -40,158 +41,98 @@
   #:use-module (gnu packages virtualization))
 
 (define-public genimage
-  (package
-    (name "genimage")
-    (version "11")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/pengutronix/genimage")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "15jmh17lvm3jw9c92bjarly7iwhmnfl322d91mprfv10ppb9ip54"))
-              ;; will be shipped with release 14
-              (patches (search-patches "genimage-signedness.patch"))))
-    (build-system gnu-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'guixify
-           (lambda* (#:key inputs #:allow-other-keys)
-             ;; Note to maintainers: Check ".def =" lines in source.
-             (substitute* "config.c"
-              (("\\.def = \"cpio\"")
-               (string-append ".def = \""
-                              (assoc-ref inputs "cpio")
-                              "/bin/cpio\""))
-              (("\\.def = \"dd\"")
-               (string-append ".def = \""
-                              (assoc-ref inputs "coreutils")
-                              "/bin/dd\""))
-              (("\\.def = \"debugfs\"")
-               (string-append ".def = \""
-                              (assoc-ref inputs "e2fsprogs")
-                              "/sbin/debugfs\""))
-              (("\\.def = \"e2fsck\"")
-               (string-append ".def = \""
-                              (assoc-ref inputs "e2fsprogs")
-                              "/sbin/e2fsck\""))
-              (("\\.def = \"genext2fs\"")
-               (string-append ".def = \""
-                              (assoc-ref inputs "genext2fs")
-                              "/bin/genext2fs\""))
-              (("\\.def = \"genisoimage\"")
-               (string-append ".def = \""
-                              (assoc-ref inputs "cdrkit-libre")
-                              "/bin/genisoimage\""))
-              (("\\.def = \"mcopy\"")
-               (string-append ".def = \""
-                              (assoc-ref inputs "mtools")
-                              "/bin/mcopy\""))
-              (("\\.def = \"mmd\"")
-               (string-append ".def = \""
-                              (assoc-ref inputs "mtools")
-                              "/bin/mmd\""))
-              ;;; Note: mkcramfs is obsolete.
-              (("\\.def = \"mkdosfs\"")
-               (string-append ".def = \""
-                              (assoc-ref inputs "dosfstools")
-                              "/sbin/mkfs.fat\""))
-              (("\\.def = \"mke2fs\"")
-               (string-append ".def = \""
-                              (assoc-ref inputs "e2fsprogs")
-                              "/sbin/mke2fs\""))
-              (("\\.def = \"mkfs\\.jffs2\"")
-               (string-append ".def = \""
-                              (assoc-ref inputs "mtd-utils")
-                              "/sbin/mkfs.jffs2\""))
-              (("\\.def = \"mkfs\\.ubifs\"")
-               (string-append ".def = \""
-                              (assoc-ref inputs "mtd-utils")
-                              "/sbin/mkfs.ubifs\""))
-              (("\\.def = \"mksquashfs\"")
-               (string-append ".def = \""
-                              (assoc-ref inputs "squashfs-tools")
-                              "/bin/mksquashfs\""))
-              (("\\.def = \"qemu-img\"")
-               (string-append ".def = \""
-                              (assoc-ref inputs "qemu")
-                              "/bin/qemu-img\""))
-              (("\\.def = \"tar\"")
-               (string-append ".def = \""
-                              (assoc-ref inputs "tar")
-                              "/bin/tar\""))
-              (("\\.def = \"tune2fs\"")
-               (string-append ".def = \""
-                              (assoc-ref inputs "e2fsprogs")
-                              "/sbin/tune2fs\""))
-              (("\\.def = \"ubinize\"")
-               (string-append ".def = \""
-                              (assoc-ref inputs "mtd-utils")
-                              "/sbin/ubinize\""))
-              (("\\.def = \"mkimage\"")
-               (string-append ".def = \""
-                              (assoc-ref inputs "u-boot-tools")
-                              "/bin/mkimage\"")))
-             (substitute* "test/basic-images.test"
-              ;; Work around bug in sharness.sh.
-              (("mkdosfs")
-               "mkfs.fat")
-              ;; Work around bug in sharness.sh.
-              (("dd,mkfs\\.fat,mcopy")
-               "dd,mkfs_fat,mcopy")
-              ;; Should be in the next upstream release.
-              (("qemu_img") "qemu-img"))
-             (substitute* "util.c"
-              (("\"/bin/sh\"")
-               (string-append "\"" (assoc-ref inputs "bash") "/bin/sh\"")))
-             ;; We don't have /etc/passwd so uid 0 is not known as "root".
-             ;; Thus patch it out.
-             (substitute* '("test/ext2test.dump"
-                            "test/ext3test.dump"
-                            "test/ext4test.dump"
-                            "test/ext2test-percent.dump"
-                            "test/mke2fs.dump")
-              (("root") "unknown"))
-             #t))
-         (add-before 'check 'setenv-check
-           (lambda _
-             ;; Our container doesn't provide access to /etc/mtab
-             (setenv "EXT2FS_NO_MTAB_OK" "1")
-             ;; Make test reproducible
-             (setenv "GENIMAGE_MKFJFFS2" "mkfs.jffs2 -U")
-             (setenv "GENIMAGE_MKE2FS" "mke2fs -E no_copy_xattrs")
-             #t))
-         (replace 'check
-           (lambda _
-             (invoke "make" "TEST_LOG_COMPILER=" "check"))))))
-    (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ;;; Note: cramfs is obsolete.
-       ("dtc" ,dtc) ; for the tests
-       ("pkg-config" ,pkg-config)
-       ("util-linux" ,util-linux))) ; for the tests
-    (inputs
-     `(("bash" ,bash)
-       ("cdrkit-libre" ,cdrkit-libre)
-       ("cpio" ,cpio)
-       ;; Note: invoked by final executable.
-       ("coreutils" ,coreutils) ; chmod, dd
-       ("dosfstools" ,dosfstools)
-       ("e2fsprogs" ,e2fsprogs)
-       ("genext2fs" ,genext2fs)
-       ("libconfuse" ,libconfuse)
-       ("mtd-utils" ,mtd-utils)
-       ("mtools" ,mtools)
-       ("qemu" ,qemu-minimal)
-       ("squashfs-tools" ,squashfs-tools)
-       ("tar" ,tar)
-       ("u-boot-tools" ,u-boot-tools)))
-    (synopsis "Create Flash images according to specification")
-    (description "@command{genimage} creates Flash images according to a
+  (let ((commit "11bb04455eaf5434f0723c91a2224918ebd0a196")
+        (revision "1"))
+    (package
+      (name "genimage")
+      (version (git-version "14" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/pengutronix/genimage")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1dq3lk0awk12v2aidry35gvrci5a3nr6rzcq0j9hyyf0w1z1rn0l"))
+                (patches
+                 (search-patches "genimage-mke2fs-test.patch"))))
+      (build-system gnu-build-system)
+      (arguments
+       `(#:modules
+         ((ice-9 match)
+          ,@%gnu-build-system-modules)
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'guixify
+             (lambda* (#:key inputs #:allow-other-keys)
+               (map (match-lambda
+                      ((input directory regexp)
+                       (substitute* "config.c"
+                         (((format #f "\\.def = \"(~a)\"" regexp) _ command)
+                          (format #f ".def = \"~a/~a/~a\""
+                                  (assoc-ref inputs input) directory command)))))
+                    '(("cpio"           "bin"  "cpio")
+                      ("coreutils"      "bin"  "dd")
+                      ("e2fsprogs"      "sbin" "debugfs|e2fsck|mke2fs|tune2fs")
+                      ("genext2fs"      "bin"  "genext2fs")
+                      ("cdrkit-libre"   "bin"  "genisoimage")
+                      ("mtools"         "bin"  "mcopy|mmd")
+                      ;; mkcramfs is obsolete.
+                      ("dosfstools"     "sbin" "mkdosfs")
+                      ("mtd-utils"      "sbin" "mkfs.(jffs2|ubifs)|ubinize")
+                      ("squashfs-tools" "bin"  "mksquashfs")
+                      ("qemu"           "bin"  "qemu-img")
+                      ("tar"            "bin"  "tar")
+                      ("u-boot-tools"   "bin"  "mkimage")))
+               (substitute* "util.c"
+                 (("\"/bin/sh\"")
+                  (string-append "\"" (assoc-ref inputs "bash") "/bin/sh\"")))))
+           (add-before 'check 'fix-failing-tests
+             (lambda _
+               ;; We don't have /etc/passwd so uid 0 is not known as "root".
+               ;; Thus patch it out.
+               (substitute* '("test/ext2test.0.dump"
+                              "test/ext3test.0.dump"
+                              "test/ext4test.0.dump"
+                              "test/ext2test-percent.0.dump"
+                              "test/mke2fs.0.dump")
+                 (("root") "unknown"))))
+           (add-before 'check 'setenv-check
+             (lambda _
+               ;; Our container doesn't provide access to /etc/mtab
+               (setenv "EXT2FS_NO_MTAB_OK" "1")
+               ;; Make test reproducible
+               (setenv "GENIMAGE_MKFJFFS2" "mkfs.jffs2 -U")
+               (setenv "GENIMAGE_MKE2FS" "mke2fs -E no_copy_xattrs")))
+           (replace 'check
+             (lambda _
+               (invoke "make" "TEST_LOG_COMPILER=" "check"))))))
+      (native-inputs
+       (list autoconf
+             automake
+             ;;; Note: cramfs is obsolete.
+             dtc ; for the tests
+             pkg-config
+             util-linux)) ; for the tests
+      (inputs
+       `(("bash" ,bash)
+         ("cdrkit-libre" ,cdrkit-libre)
+         ("cpio" ,cpio)
+         ;; Note: invoked by final executable.
+         ("coreutils" ,coreutils) ; chmod, dd
+         ("dosfstools" ,dosfstools)
+         ("e2fsprogs" ,e2fsprogs)
+         ("genext2fs" ,genext2fs)
+         ("libconfuse" ,libconfuse)
+         ("mtd-utils" ,mtd-utils)
+         ("mtools" ,mtools)
+         ("qemu" ,qemu-minimal)
+         ("squashfs-tools" ,squashfs-tools)
+         ("tar" ,tar)
+         ("u-boot-tools" ,u-boot-tools)))
+      (synopsis "Create Flash images according to specification")
+      (description "@command{genimage} creates Flash images according to a
 specification file.")
-    (home-page "https://github.com/pengutronix/genimage")
-    (license license:gpl2)))
+      (home-page "https://github.com/pengutronix/genimage")
+      (license license:gpl2))))
diff --git a/gnu/packages/geo.scm b/gnu/packages/geo.scm
index 9d4a1a8955..23cec0f9b7 100644
--- a/gnu/packages/geo.scm
+++ b/gnu/packages/geo.scm
@@ -6,8 +6,8 @@
 ;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2018, 2019 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2018 Joshua Sierles, Nextjournal <joshua@nextjournal.com>
-;;; Copyright © 2018, 2019, 2020 Julien Lepiller <julien@lepiller.eu>
-;;; Copyright © 2019, 2020, 2021 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2018, 2019, 2020, 2021 Julien Lepiller <julien@lepiller.eu>
+;;; Copyright © 2019, 2020, 2021, 2022 Guillaume Le Vaillant <glv@posteo.net>
 ;;; Copyright © 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2019, 2021 Wiktor Żelazny <wzelazny@vurv.cz>
 ;;; Copyright © 2019, 2020 Hartmut Goebel <h.goebel@crazy-compilers.com>
@@ -17,6 +17,7 @@
 ;;; Copyright © 2021 Sharlatan Hellseher <sharlatanus@gmail.com>
 ;;; Copyright © 2021 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2021 Clément Lassieur <clement@lassieur.org>
+;;; Copyright © 2021 Nikolay Korotkiy <sikmir@disroot.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -59,8 +60,11 @@
   #:use-module (gnu packages bash)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages boost)
+  #:use-module (gnu packages build-tools)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages cpp)
+  #:use-module (gnu packages cups)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages databases)
   #:use-module (gnu packages datastructures)
@@ -75,6 +79,7 @@
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages gps)
+  #:use-module (gnu packages graphics)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages haskell-apps)
   #:use-module (gnu packages image)
@@ -84,6 +89,7 @@
   #:use-module (gnu packages kde)
   #:use-module (gnu packages lua)
   #:use-module (gnu packages maths)
+  #:use-module (gnu packages multiprecision)
   #:use-module (gnu packages pcre)
   #:use-module (gnu packages pdf)
   #:use-module (gnu packages perl)
@@ -92,7 +98,9 @@
   #:use-module (gnu packages protobuf)
   #:use-module (gnu packages pulseaudio)
   #: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-science)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
@@ -161,10 +169,9 @@
        ("seed" ,seed)
        ("vala" ,vala)))
     (inputs
-     `(("expat" ,expat)
-       ("glib" ,glib)))
+     (list expat glib))
     (propagated-inputs
-     `(("cairo" ,cairo)))
+     (list cairo))
     (synopsis "Map-rendering for OpenSteetMap")
     (description "Memphis is a map-rendering application and a library for
 OpenStreetMap written in C using eXpat, Cairo and GLib.")
@@ -194,7 +201,7 @@ OpenStreetMap written in C using eXpat, Cairo and GLib.")
                         (("/bin/sh") (which "sh")))
                       #t)))))
     (inputs
-     `(("glib" ,glib)))
+     (list glib))
     (home-page "https://geos.osgeo.org/")
     (synopsis "Geometry Engine for Geographic Information Systems")
     (description
@@ -211,15 +218,15 @@ topology functions.")
 (define-public gnome-maps
   (package
     (name "gnome-maps")
-    (version "3.38.5")
+    (version "41.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
-                                  (version-major+minor version) "/"
+                                  (version-major version) "/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1llgzm2ni3iy31dznqkc81vadv0fpqgpz2l9zzrj5jshvyq0akgh"))))
+                "037xmkmcmcw87vb1c1s3y225m8757k331cvk1m8cshf6mx61p0l1"))))
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
@@ -229,23 +236,13 @@ topology functions.")
            ;; Don't create 'icon-theme.cache'.
            (lambda _
              (substitute* "meson_post_install.py"
-               (("gtk-update-icon-cache") "true"))
-             #t))
+               (("gtk-update-icon-cache") "true"))))
          (add-after 'unpack 'patch-dbus-service
            (lambda* (#:key outputs #:allow-other-keys)
              (substitute* "data/org.gnome.Maps.service.in"
                (("@pkgdatadir@/org.gnome.Maps")
-                (string-append  (assoc-ref outputs "out") "/bin/gnome-maps")))
-             #t))
-         (add-after 'unpack 'fix-broken-tests
-           (lambda _
-             ;; For some reason setting LC_ALL=C and LANG=C as done in the
-             ;; build system does not prevent these gratuitous commas from
-             ;; being inserted.
-             (substitute* "tests/utilsTest.js"
-               (("1001 m") "1,001 m")
-               (("1000 ft") "1,000 ft")
-               (("5282 ft") "5,282 ft"))))
+                (string-append  (assoc-ref outputs "out")
+                                "/bin/gnome-maps")))))
          (add-after 'install 'wrap
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out"))
@@ -283,11 +280,12 @@ topology functions.")
        ("folks" ,folks)
        ("libchamplain" ,libchamplain)
        ("libgee" ,libgee)
+       ("libhandy" ,libhandy)
        ("libsecret" ,libsecret)
-       ("libsoup" ,libsoup)
+       ("libsoup" ,libsoup-minimal-2)
        ("libgweather" ,libgweather)
        ("libxml2" ,libxml2)
-       ("gdk-pixbuf" ,gdk-pixbuf+svg)
+       ("librsvg" ,librsvg)
        ("glib-networking" ,glib-networking)
        ("geoclue" ,geoclue)
        ("geocode-glib" ,geocode-glib)
@@ -298,7 +296,7 @@ topology functions.")
        ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
        ("gtk+" ,gtk+)
        ("rest" ,rest)
-       ("webkitgtk" ,webkitgtk)))
+       ("webkitgtk" ,webkitgtk-with-libsoup2)))
     (synopsis "Graphical map viewer and wayfinding program")
     (description "GNOME Maps is a graphical map viewer.  It uses map data from
 the OpenStreetMap project.  It can provide directions for walking, bicycling,
@@ -330,12 +328,10 @@ and driving.")
            #t))))
     (build-system gnu-build-system)
     (inputs
-     `(("libjpeg-turbo" ,libjpeg-turbo)
-       ("libtiff" ,libtiff)
-       ("zlib" ,zlib)))
+     (list libjpeg-turbo libtiff zlib))
     (propagated-inputs
-     `(;; libgeotiff headers include proj headers, so ensure those are available.
-       ("proj" ,proj)))
+     (list ;; libgeotiff headers include proj headers, so ensure those are available.
+           proj))
     (arguments
      `(#:configure-flags
        (list "--disable-static"
@@ -370,27 +366,27 @@ writing GeoTIFF information tags.")
          "1x24gqp4hsq97c31ncwxblab0x0863q8v1z42jil7lvsq3glqa7p"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list 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")))
+     (list cairo
+           curl
+           freetype
+           freexl
+           giflib
+           libgeotiff
+           libjpeg-turbo
+           libpng
+           librttopo
+           libspatialite
+           libtiff
+           libwebp
+           libxml2
+           lz4
+           minizip
+           openjpeg
+           proj
+           sqlite
+           `(,zstd "lib")))
     (synopsis "Library to work with huge raster coverages using a SpatiaLite")
     (description
      "librasterlite2 is a library that stores and retrieves huge raster
@@ -447,12 +443,9 @@ coverages using a SpatiaLite DBMS.")
                              (string-append "LIBTOOLIZE=" libtoolize "\n"))))
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
-     `(("geos" ,geos)))
+     (list geos))
     (synopsis "Library to handle SQL/MM topologies")
     (description
      "The RT Topology Library exposes an API to create and manage standard
@@ -474,28 +467,26 @@ coverages using a SpatiaLite DBMS.")
          "164y82rw2lrp5glfc0rkn7n6xvx5dvlgmh7bb7815067251wkjzf"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("freexl" ,freexl)
-       ("geos" ,geos)
-       ("librttopo" ,librttopo)
-       ("libxml2" ,libxml2)
-       ("minizip" ,minizip)
-       ("proj" ,proj)
-       ("sqlite" ,sqlite)))
+     (list freexl
+           geos
+           librttopo
+           libxml2
+           minizip
+           proj
+           sqlite))
     (arguments
      `(#:configure-flags
        '("--enable-rttopo=yes")
        #:phases
        (modify-phases %standard-phases
-         ;; 3 tests are failing, ignore them:
+         ;; 1 test is failing, ignore it:
          (add-after 'unpack 'ignore-broken-tests
            (lambda _
              (substitute* '("test/Makefile.in")
-               (("\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)))))
+               (("check_wms\\$\\(EXEEXT\\) check_drop_rename\\$\\(EXEEXT\\) ")
+                "check_wms$(EXEEXT) ")))))))
     (synopsis "Extend SQLite to support Spatial SQL capabilities")
     (description
      "SpatiaLite is a library intended to extend the SQLite core to support
@@ -514,7 +505,7 @@ fully fledged Spatial SQL capabilities.")
 (define-public proj
   (package
     (name "proj")
-    (version "6.3.1")
+    (version "7.2.1")
     (source
      (origin
        (method url-fetch)
@@ -522,22 +513,30 @@ fully fledged Spatial SQL capabilities.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "1y46ij32j9b4x1kjnnlykcwk3kkjwkg44sfc1ziwm3a3g0ki3q3d"))))
-    (build-system gnu-build-system)
+         "050apzdn0isxpsblys1shrl9ccli5vd32kgswlgx1imrbwpg915k"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:configure-flags '("-DUSE_EXTERNAL_GTEST=ON")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-version
+           (lambda _
+             (substitute* "CMakeLists.txt"
+               (("MAJOR 7 MINOR 2 PATCH 0") "MAJOR 7 MINOR 2 PATCH 1")))))))
     (inputs
-     `(("sqlite" ,sqlite)))
+     (list curl libjpeg-turbo libtiff sqlite))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list googletest pkg-config))
     (home-page "https://proj.org/")
     (synopsis "Coordinate transformation software")
     (description
      "Proj is a generic coordinate transformation software that transforms
-geospatial coordinates from one coordinate reference system (CRS) to another.
-This includes cartographic projections as well as geodetic transformations.
-PROJ includes command line applications for easy conversion of coordinates
-from text files or directly from user input.  In addition, proj also exposes
-an application programming interface that lets developers use the
-functionality of proj in their own software.")
+geospatial coordinates from one @acronym{CRS, coordinate reference system}
+to another.  This includes cartographic projections as well as geodetic
+transformations.  Proj includes command line applications for easy
+conversion of coordinates from text files or directly from user input.
+In addition, Proj also exposes an application programming interface that
+lets developers use the functionality of Proj in their own software.")
     (license (list license:expat
                    ;; src/projections/patterson.cpp
                    license:asl2.0
@@ -578,7 +577,7 @@ functionality of proj in their own software.")
                (("\tPROJ_LIB.*" all) (string-append  "#" all)))
              #t)))))
     (inputs
-     `(("glib" ,glib)))
+     (list glib))
     (home-page "https://proj.org/")
     (synopsis "Cartographic Projections Library")
     (description
@@ -594,6 +593,144 @@ projections.")
                    ;; cmake/*
                    license:boost1.0))))
 
+(define-public python-pyproj
+  (package
+    (name "python-pyproj")
+    (version "3.2.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "pyproj" version))
+        (sha256
+          (base32
+            "0xrqpy708qlyd7nqjra0dl7nvkqzaj9w0v7wq4j5pxazha9n14sa"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'set-proj-path
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((proj (assoc-ref inputs "proj")))
+               (setenv "PROJ_DIR" proj)
+               (substitute* "pyproj/datadir.py"
+                 (("(internal_datadir = ).*$" all var)
+                  (string-append var "Path(\"" proj "/share/proj\")\n")))))))))
+    (inputs
+      (list proj))
+    (propagated-inputs
+      (list python-certifi))
+    (native-inputs
+      (list python-cython python-numpy python-pandas python-pytest
+            python-xarray))
+    (home-page "https://github.com/pyproj4/pyproj")
+    (synopsis
+      "Python interface to PROJ")
+    (description
+      "This package provides a Python interface to PROJ, a cartographic
+projections and coordinate transformations library.")
+    (license license:expat)))
+
+(define-public python-fiona
+  (package
+    (name "python-fiona")
+    (version "1.8.20")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "Fiona" version))
+        (sha256
+          (base32
+            "0fql7i7dg1xpbadmk8d26dwp91v7faixxc4wq14zg0kvhp9041d7"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'remove-local-fiona
+           (lambda _
+             ; This would otherwise interfere with finding the installed
+             ; fiona when running tests.
+             (delete-file-recursively "fiona")))
+         (replace 'check
+           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+             (add-installed-pythonpath inputs outputs)
+             (setenv "GDAL_ENABLE_DEPRECATED_DRIVER_GTM" "YES")
+             (when tests?
+               (invoke "pytest"
+                       "-m" "not network and not wheel"
+                       ;; FIXME: Find why the
+                       ;;   test_no_append_driver_cannot_append[PCIDSK]
+                       ;; test is failing.
+                       "-k" "not test_no_append_driver_cannot_append")))))))
+    (inputs
+      (list gdal))
+    (propagated-inputs
+      (list python-attrs
+            python-certifi
+            python-click
+            python-click-plugins
+            python-cligj
+            python-munch
+            python-setuptools
+            python-six
+            python-pytz))
+    (native-inputs
+      (list gdal ; for gdal-config
+            python-boto3
+            python-cython
+            python-pytest
+            python-pytest-cov))
+    (home-page "https://github.com/Toblerity/Fiona")
+    (synopsis
+      "Fiona reads and writes spatial data files")
+    (description
+      "Fiona is GDAL’s neat and nimble vector API for Python programmers.
+Fiona is designed to be simple and dependable.  It focuses on reading
+and writing data in standard Python IO style and relies upon familiar
+Python types and protocols such as files, dictionaries, mappings, and
+iterators instead of classes specific to OGR.  Fiona can read and write
+real-world data using multi-layered GIS formats and zipped virtual file
+systems and integrates readily with other Python GIS packages such as
+pyproj, Rtree, and Shapely.")
+    (license license:bsd-3)))
+
+(define-public python-geopandas
+  (package
+    (name "python-geopandas")
+    (version "0.10.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "geopandas" version))
+        (sha256
+          (base32
+            "1nvim2i47ap1zdwy6kxydskf1cir5g4ij8124wvmrqij0zklggzg"))))
+    (build-system python-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "pytest"
+                       ; Disable test that fails with
+                       ; NotImplementedError in pandas.
+                       "-k" "not test_fillna_no_op_returns_copy"
+                       ; Disable tests that require internet access.
+                       "-m" "not web")))))))
+    (propagated-inputs
+      (list python-fiona python-pandas python-pyproj python-shapely))
+    (native-inputs
+      (list python-pytest))
+    (home-page "http://geopandas.org")
+    (synopsis "Geographic pandas extensions")
+    (description "The goal of GeoPandas is to make working with
+geospatial data in Python easier.  It combines the capabilities of
+Pandas and Shapely, providing geospatial operations in Pandas and a
+high-level interface to multiple geometries to Shapely.  GeoPandas
+enables you to easily do operations in Python that would otherwise
+require a spatial database such as PostGIS.")
+    (license license:bsd-3)))
+
 (define-public mapnik
   (package
     (name "mapnik")
@@ -608,21 +745,21 @@ projections.")
          "06frcikaj2mgz3abfk5h0z4j3hbksi0zikwjngbjv4p5f3pwxf8q"))))
     (build-system scons-build-system)
     (inputs
-     `(("boost" ,boost)
-       ("cairo" ,cairo)
-       ("freetype" ,freetype)
-       ("harfbuzz" ,harfbuzz)
-       ("icu4c" ,icu4c)
-       ("libjpeg-turbo" ,libjpeg-turbo)
-       ("libpng" ,libpng)
-       ("libtiff" ,libtiff)
-       ("libwebp" ,libwebp)
-       ("libxml2" ,libxml2)
-       ("proj.4" ,proj.4)
-       ("sqlite" ,sqlite)
-       ("zlib" ,zlib)))
+     (list boost
+           cairo
+           freetype
+           harfbuzz
+           icu4c
+           libjpeg-turbo
+           libpng
+           libtiff
+           libwebp
+           libxml2
+           proj.4
+           sqlite
+           zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
      `(#:scons ,scons-python2
        #:scons-flags
@@ -663,28 +800,28 @@ development.")
         (base32 "0cyv4cycl073p9lnnnglcb72qn71g8h9g5zn4gzw7swcy5nxjj5s"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("curl" ,curl)
-       ("freexl" ,freexl)
-       ("geos" ,geos)
-       ("giflib" ,giflib)
-       ("libjpeg-turbo" ,libjpeg-turbo)
-       ("librasterlite2" ,librasterlite2)
-       ("librttopo" ,librttopo)
-       ("libspatialite" ,libspatialite)
-       ("libwebp" ,libwebp)
-       ("libxlsxwriter" ,libxlsxwriter)
-       ("libxml2" ,libxml2)
-       ("lz4" ,lz4)
-       ("minizip" ,minizip)
-       ("openjpeg" ,openjpeg)
-       ("postgresql" ,postgresql)
-       ("proj" ,proj)
-       ("sqlite" ,sqlite)
-       ("virtualpg" ,virtualpg)
-       ("wxwidgets" ,wxwidgets)
-       ("zstd" ,zstd "lib")))
+     (list curl
+           freexl
+           geos
+           giflib
+           libjpeg-turbo
+           librasterlite2
+           librttopo
+           libspatialite
+           libwebp
+           libxlsxwriter
+           libxml2
+           lz4
+           minizip
+           openjpeg
+           postgresql
+           proj
+           sqlite
+           virtualpg
+           wxwidgets
+           `(,zstd "lib")))
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (add-after 'unpack 'fix-gui
@@ -704,7 +841,7 @@ development.")
 (define-public gdal
   (package
     (name "gdal")
-    (version "3.1.2")
+    (version "3.3.3")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -712,7 +849,7 @@ development.")
                      version ".tar.gz"))
               (sha256
                (base32
-                "1p6nmlsr8wbyq350pa6c22vrp98dcsa7yjnqsbhdbp74yj53nw9r"))
+                "0nk09lws1hk873yn5f4wzqfvr82gm4hw3gq8w9g1h0kvf6j5x4i8"))
               (modules '((guix build utils)))
               (snippet
                 `(begin
@@ -756,24 +893,24 @@ development.")
              (substitute* "frmts/mrf/mrf_band.cpp"
                (("\"../zlib/zlib.h\"") "<zlib.h>")))))))
     (inputs
-     `(("expat" ,expat)
-       ("freexl" ,freexl)
-       ("geos" ,geos)
-       ("giflib" ,giflib)
-       ("json-c" ,json-c)
-       ("libgeotiff" ,libgeotiff)
-       ("libjpeg-turbo" ,libjpeg-turbo)
-       ("libpng" ,libpng)
-       ("libtiff" ,libtiff)
-       ("libwebp" ,libwebp)
-       ("netcdf" ,netcdf)
-       ("pcre" ,pcre)
-       ("postgresql" ,postgresql) ; libpq
-       ("proj" ,proj)
-       ("sqlite" ,sqlite)
-       ("zlib" ,zlib)))
+     (list expat
+           freexl
+           geos
+           giflib
+           json-c
+           libgeotiff
+           libjpeg-turbo
+           libpng
+           libtiff
+           libwebp
+           netcdf
+           pcre
+           postgresql ; libpq
+           proj
+           sqlite
+           zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://gdal.org/")
     (synopsis "Raster and vector geospatial data format library")
     (description "GDAL is a translator library for raster and vector geospatial
@@ -816,9 +953,9 @@ utilities for data translation and processing.")
              #t)))))
     (native-inputs '())
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (inputs
-     `(("gdal" ,gdal)))
+     (list gdal))
     (synopsis "GDAL (Geospatial Data Abstraction Library) python bindings")))
 
 (define-public python-pyshp
@@ -844,8 +981,7 @@ utilities for data translation and processing.")
                ;; This is the only test file.
                (invoke "python" "-m" "pytest" "test_shapefile.py")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-pytest python-pytest-runner))
     (home-page "https://github.com/GeospatialPython/pyshp")
     (synopsis "Read/write support for ESRI Shapefile format")
     (description
@@ -877,19 +1013,16 @@ utilities for data translation and processing.")
                        ;; This one too but it's not marked as such.
                        "-k" "not test_gridliner_labels_bbox_style")))))))
     (propagated-inputs
-     `(("python-matplotlib" ,python-matplotlib)
-       ("python-numpy" ,python-numpy)
-       ("python-pykdtree" ,python-pykdtree)
-       ("python-pyshp" ,python-pyshp)
-       ("python-scipy" ,python-scipy)
-       ("python-shapely" ,python-shapely)))
+     (list python-matplotlib
+           python-numpy
+           python-pykdtree
+           python-pyshp
+           python-scipy
+           python-shapely))
     (inputs
-     `(("geos" ,geos)
-       ("proj" ,proj)))
+     (list geos proj))
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-flufl-lock" ,python-flufl-lock)
-       ("python-pytest" ,python-pytest)))
+     (list python-cython python-flufl-lock python-pytest))
     (home-page "https://scitools.org.uk/cartopy/docs/latest/")
     (synopsis "Cartographic library for visualisation")
     (description
@@ -911,14 +1044,14 @@ Shapely capabilities
 (define-public postgis
   (package
     (name "postgis")
-    (version "3.1.2")
+    (version "3.2.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://download.osgeo.org/postgis/source/postgis-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0ch7gry8a1i9114mlhklxryn7ja3flsz6pxj9r5p09k92xh3gp9c"))))
+                "1zbwa15rsvr05rmcidk21q3amndd0q4df4psp3zhqz4lqraf3fbs"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f
@@ -935,19 +1068,18 @@ Shapely capabilities
                (("\\$\\(DESTDIR\\)\\$\\(PGSQL_BINDIR\\)")
                 (string-append (assoc-ref outputs "out") "/bin"))))))))
     (inputs
-     `(("gdal" ,gdal)
-       ("geos" ,geos)
-       ("giflib" ,giflib)
-       ("json-c" ,json-c)
-       ("libjpeg" ,libjpeg-turbo)
-       ("libxml2" ,libxml2)
-       ("pcre" ,pcre)
-       ("postgresql" ,postgresql)
-       ("protobuf-c" ,protobuf-c)
-       ("proj" ,proj)))
+     (list gdal
+           geos
+           giflib
+           json-c
+           libjpeg-turbo
+           libxml2
+           pcre
+           postgresql
+           protobuf-c
+           proj))
     (native-inputs
-     `(("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list perl pkg-config))
     (home-page "https://postgis.net")
     (synopsis "Spatial database extender for PostgreSQL")
     (description "PostGIS is a spatial database extender for PostgreSQL
@@ -1008,7 +1140,7 @@ delivered to any client.")
 (define-public imposm3
   (package
     (name "imposm3")
-    (version "0.6.0-alpha.4")
+    (version "0.11.1")
     (source
       (origin
         (method url-fetch)
@@ -1017,7 +1149,7 @@ delivered to any client.")
     (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
-          "06f0kwmv52yd5m9jlckqxqmkf0cnqy3hamakrvg9lspplyqrds80"))))
+          "1w7b221z5k9254zn01imycxkyw62xigqizhwvrgxqmq1m9r5410l"))))
     (build-system go-build-system)
     (arguments
      `(#:import-path "github.com/omniscale/imposm3/cmd/imposm"
@@ -1030,8 +1162,7 @@ delivered to any client.")
                (("0.0.0-dev") ,version))
              #t)))))
     (inputs
-     `(("geos" ,geos)
-       ("leveldb" ,leveldb)))
+     (list geos leveldb))
     (home-page "https://imposm.org/")
     (synopsis "OpenStreetMap importer for PostGIS")
     (description "Imposm is an importer for OpenStreetMap data.  It reads PBF
@@ -1047,7 +1178,7 @@ to create databases that are optimized for rendering/tile/map-services.")
 (define-public libosmium
   (package
     (name "libosmium")
-    (version "2.15.6")
+    (version "2.17.2")
     (source
      (origin
        (method git-fetch)
@@ -1056,21 +1187,22 @@ to create databases that are optimized for rendering/tile/map-services.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0rqy18bbakp41f44y5id9ixh0ar2dby46z17p4115z8k1vv9znq2"))))
+        (base32 "0xgwicnzlyr8pcpgx528xrzh7g6rjfd7f80bi30478fnp8mq8rzr"))))
     (build-system cmake-build-system)
     (propagated-inputs
-     `(("boost" ,boost)
-       ("bzip2" ,bzip2)
-       ("expat" ,expat)
-       ("gdal" ,gdal)
-       ("geos" ,geos)
-       ("proj" ,proj)
-       ("protozero" ,protozero)
-       ("sparsehash" ,sparsehash)
-       ("utfcpp" ,utfcpp)
-       ("zlib" ,zlib)))
+     (list boost
+           bzip2
+           expat
+           gdal
+           geos
+           lz4
+           proj
+           protozero
+           sparsehash
+           utfcpp
+           zlib))
     (native-inputs
-     `(("doxygen" ,doxygen)))
+     (list doxygen))
     (home-page "https://osmcode.org/libosmium/")
     (synopsis "C++ library for working with OpenStreetMap data")
     (description "Libosmium is a fast and flexible C++ library for working with
@@ -1080,7 +1212,7 @@ OpenStreetMap data.")
 (define-public osm2pgsql
   (package
     (name "osm2pgsql")
-    (version "1.2.2")
+    (version "1.5.1")
     (source
      (origin
        (method git-fetch)
@@ -1089,7 +1221,7 @@ OpenStreetMap data.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1j35aa8qinhavliqi5pdm0viyi7lm5xyk402rliaxxs1r2hbsafn"))
+        (base32 "0i18mskcs087dn3f3h9n7j0wafn8502m0h13mrjwin38xsz0crfj"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -1107,18 +1239,17 @@ OpenStreetMap data.")
                             (assoc-ref %build-inputs "protozero")
                             "/include"))))
     (inputs
-     `(("boost" ,boost)
-       ("bzip2" ,bzip2)
-       ("expat" ,expat)
-       ("libosmium" ,libosmium)
-       ("lua" ,lua)
-       ("postgresql" ,postgresql)
-       ("proj" ,proj)
-       ("protozero" ,protozero)
-       ("zlib" ,zlib)))
+     (list boost
+           bzip2
+           expat
+           libosmium
+           lua
+           postgresql
+           proj
+           protozero
+           zlib))
     (native-inputs
-     `(("python" ,python)
-       ("python-psycopg2" ,python-psycopg2)))
+     (list python python-psycopg2))
     (home-page "https://github.com/openstreetmap/osm2pgsql")
     (synopsis "OSM data importer to postgresql")
     (description "Osm2pgsql is a tool for loading OpenStreetMap data into a
@@ -1148,9 +1279,7 @@ map, geocoding with Nominatim, or general analysis.")
        (list (string-append "CC=" ,(cc-for-target))
              (string-append "PREFIX=" (assoc-ref %outputs "out")))))
     (inputs
-     `(("perl" ,perl)
-       ("sqlite" ,sqlite)
-       ("zlib" ,zlib)))
+     (list perl sqlite zlib))
     (home-page "https://github.com/mapbox/tippecanoe")
     (synopsis "Vector tile server for maps")
     (description "Tippecanoe creates scale-independent view of data, so that
@@ -1174,10 +1303,9 @@ dropping features at lower levels.")
          "1m8d3r1q1v05pkr8k9czrmb4xjszw6hvgsf3kn9pf0v14gpn4r8f"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "https://gitlab.com/osm-c-tools/osmctools")
     (synopsis "Tools to convert, filter and update OpenStreetMap data files")
     (description "This project contains a few tools which are used in the
@@ -1200,15 +1328,9 @@ OpenStreetMap data files.")
          "11imsf4cz1dpxdjh178k2s29axmq86rkfg1pqmn7incyxmjzhbwg"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("gnome-common" ,gnome-common)
-       ("gtk-doc" ,gtk-doc/stable)
-       ("pkg-config" ,pkg-config)))
+     (list gnome-common gtk-doc/stable pkg-config))
     (inputs
-     `(("cairo" ,cairo)
-       ("glib" ,glib)
-       ("gobject-introspection" ,gobject-introspection)
-       ("gtk+" ,gtk+)
-       ("libsoup" ,libsoup)))
+     (list cairo glib gobject-introspection gtk+ libsoup-minimal-2))
     (home-page "https://nzjrs.github.io/osm-gps-map/")
     (synopsis "GTK+ widget for displaying OpenStreetMap tiles")
     (description
@@ -1228,6 +1350,7 @@ map display.  Downloads map data from a number of websites, including
                      (url "https://github.com/opengribs/XyGrib")
                      (commit (string-append "v" version))))
               (file-name (git-file-name name version))
+              (patches (search-patches "xygrib-fix-finding-data.patch"))
               (sha256
                (base32
                 "0xzsm8pr0zjk3f8j880fg5n82jyxn8xf1330qmmq1fqv7rsrg9ia"))
@@ -1242,18 +1365,15 @@ map display.  Downloads map data from a number of websites, including
                   #t))))
     (build-system cmake-build-system)
     (arguments
-     `(#:phases
+     `(#:configure-flags (list "-DGNU_PACKAGE=ON")
+
+       #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-directories
            (lambda* (#:key inputs #:allow-other-keys)
              (let ((jpeg (assoc-ref inputs "openjpeg"))
                    (font (assoc-ref inputs "font-liberation")))
                (substitute* "CMakeLists.txt"
-                 ;; Find libjpeg.
-                 (("/usr") jpeg)
-                 ;; Fix install locations.
-                 (("set\\(PREFIX_BIN.*") "set(PREFIX_BIN \"bin\")\n")
-                 (("set\\(PREFIX_PKGDATA.*") "set(PREFIX_PKGDATA \"share/${PROJECT_NAME}\")\n")
                  ;; Skip looking for the static library.
                  (("\"libnova.a\"") ""))
                ;; Don't use the bundled font-liberation.
@@ -1262,20 +1382,23 @@ map display.  Downloads map data from a number of websites, including
                   (string-append "\"" font "/share/fonts/truetype/\"")))
                (substitute* "src/util/Util.h"
                  (("pathData\\(\\)\\+\"data/fonts/\"")
-                  (string-append "\"" font "/share/fonts/\""))))
-             #t)))
+                  (string-append "\"" font "/share/fonts/\"")))))))
        #:tests? #f)) ; no tests
     (native-inputs
-     `(("qttools" ,qttools)))
+     (list qttools))
     (inputs
-     `(("bzip2" ,bzip2)
-       ("font-liberation" ,font-liberation)
-       ("libnova" ,libnova)
-       ("libpng" ,libpng)
-       ("openjpeg" ,openjpeg)
-       ("proj.4" ,proj.4)
-       ("qtbase" ,qtbase-5)
-       ("zlib" ,zlib)))
+     (list bzip2
+           font-liberation
+           libnova
+           libpng
+           openjpeg
+           proj
+           qtbase-5
+           zlib))
+    (native-search-paths
+     (list (search-path-specification
+            (variable "XDG_DATA_DIRS")
+            (files '("share")))))
     (synopsis "Weather Forecast Visualization")
     (description
      "XyGrib is a Grib file reader and visualizes meteorological data providing
@@ -1323,6 +1446,40 @@ persisted.
 ")
     (license license:expat)))
 
+(define-public python-rtree
+  (package
+    (name "python-rtree")
+    (version "0.9.7")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "Rtree" version))
+       (sha256
+        (base32 "0gna530vy6rh76035cqh7i2lx199cvxjrzjczg9rm6k96k5751xy"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'find-libspatialindex
+           (lambda* (#:key inputs #:allow-other-keys)
+             (setenv "SPATIALINDEX_C_LIBRARY"
+                     (string-append (assoc-ref inputs "libspatialindex")
+                                    "/lib/libspatialindex.so"))))
+         (replace 'check
+           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "python" "-m" "pytest")))))))
+    (native-inputs
+     (list python-numpy python-pytest python-wheel))
+    (inputs
+     (list libspatialindex))
+    (home-page "https://github.com/Toblerity/rtree")
+    (synopsis "R-Tree spatial index for Python GIS")
+    (description
+     "RTree is a Python package with bindings for @code{libspatialindex}.")
+    (license license:expat)))
+
 (define-public java-jmapviewer
   (package
     (name "java-jmapviewer")
@@ -1337,7 +1494,7 @@ persisted.
                 "0sy6r5fkbb9bclw0is6gwnbzz627m7pjfnsqydxz58pbndakkhrv"))))
     (build-system ant-build-system)
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (arguments
      `(#:build-target "pack"
        #:tests? #f; No tests
@@ -1393,11 +1550,9 @@ an independent project by the JOSM team.")
                        file))
              #t)))))
     (inputs
-     `(("java-jetbrains-annotations" ,java-jetbrains-annotations)))
+     (list java-jetbrains-annotations))
     (native-inputs
-     `(("javacc" ,javacc)
-       ("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list javacc java-junit java-hamcrest-core))
     (home-page "https://github.com/simonpoole/OpeningHoursParser")
     (synopsis "Java parser for the OpenStreetMap opening hour format")
     (description "This is a very simplistic parser for string values according
@@ -1407,7 +1562,7 @@ to the OSM opening hours specification.")
 (define-public josm
   (package
     (name "josm")
-    (version "18193")
+    (version "18360")
     (source (origin
               (method svn-fetch)
               (uri (svn-reference
@@ -1416,7 +1571,7 @@ to the OSM opening hours specification.")
                      (recursive? #f)))
               (sha256
                (base32
-                "162hdck29bkag1d97nisx8v7395pdw00bl7nf0p02hr30fc1fcrh"))
+                "0j7fhzh6hs2b5r1a3d1xpy6f5r6q1kh79bck28raang8ldd754c6"))
               (file-name (string-append name "-" version "-checkout"))
               (modules '((guix build utils)))
             (snippet
@@ -1425,19 +1580,19 @@ to the OSM opening hours specification.")
                 #t))))
     (build-system ant-build-system)
     (native-inputs
-     `(("javacc" ,javacc)))
+     (list javacc))
     (inputs
-     `(("java-commons-jcs" ,java-commons-jcs)
-       ("java-commons-compress" ,java-commons-compress)
-       ("java-jmapviewer" ,java-jmapviewer)
-       ("java-jsonp-api" ,java-jsonp-api)
-       ("java-jsonp-impl" ,java-jsonp-impl); runtime dependency
-       ("java-jsr305" ,java-jsr305)
-       ("java-metadata-extractor" ,java-metadata-extractor)
-       ("java-opening-hours-parser" ,java-opening-hours-parser)
-       ("java-openjfx-media" ,java-openjfx-media)
-       ("java-signpost-core" ,java-signpost-core)
-       ("java-svg-salamander" ,java-svg-salamander)))
+     (list java-commons-jcs
+           java-commons-compress
+           java-jmapviewer
+           java-jsonp-api
+           java-jsonp-impl ; runtime dependency
+           java-jsr305
+           java-metadata-extractor
+           java-opening-hours-parser
+           java-openjfx-media
+           java-signpost-core
+           java-svg-salamander))
     (arguments
      `(#:tests? #f
        #:jar-name "josm.jar"
@@ -1576,7 +1731,7 @@ ways, and relations) and their metadata tags.")
      `(#:make-flags
        (list ,(string-append "CC=" (cc-for-target)))))
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (home-page "https://maxmind.github.io/libmaxminddb/")
     (synopsis "C library for the MaxMind DB file format")
     (description "The libmaxminddb library provides a C library for reading
@@ -1601,7 +1756,7 @@ associated with an address.")
     (arguments
      `(#:tests? #f)) ;; Tests require a copy of the maxmind database
     (inputs
-     `(("libmaxminddb" ,libmaxminddb)))
+     (list libmaxminddb))
     (home-page "https://www.maxmind.com/")
     (synopsis "Reader for the MaxMind DB format")
     (description "MaxMind DB is a binary file format that stores data indexed
@@ -1624,8 +1779,7 @@ MaxMind DB files.")
     (arguments
      `(#:tests? #f)) ;; Tests require a copy of the maxmind database
     (inputs
-     `(("python-maxminddb" ,python-maxminddb)
-       ("python-requests" ,python-requests)))
+     (list python-maxminddb python-requests))
     (home-page "https://www.maxmind.com/")
     (synopsis "MaxMind GeoIP2 API")
     (description "Provides an API for the GeoIP2 web services and databases.
@@ -1645,11 +1799,9 @@ The API also works with MaxMind’s free GeoLite2 databases.")
       (base32 "1xa7l2bjn832nk6bc7b481nv8hd2gj41jwhg0d2qy10lqdvjpn5b"))))
    (build-system gnu-build-system)
    (native-inputs
-    `(("perl" ,perl)))
+    (list perl))
    (inputs
-    `(("bzip2" ,bzip2)
-      ("xz" ,xz)
-      ("zlib" ,zlib)))
+    (list bzip2 xz zlib))
    (arguments
     `(#:test-target "test"
       #:phases
@@ -1677,7 +1829,7 @@ using the dataset of topographical information collected by
 (define-public qmapshack
   (package
     (name "qmapshack")
-    (version "1.15.2")
+    (version "1.16.1")
     (source
      (origin
        (method git-fetch)
@@ -1686,24 +1838,23 @@ using the dataset of topographical information collected by
              (commit (string-append "V_" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1l1j2axf94pdqwirwwhwy3y6k8v1aix78ifqbv6j8sv131h2j7y7"))))
+        (base32 "184fqmsfzr3b333ssizjk6gvv7mncmygq8dj5r7rsvs5md26z2ys"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list pkg-config qttools))
     (inputs
-     `(("gdal" ,gdal)
-       ("libjpeg-turbo" ,libjpeg-turbo)
-       ("proj" ,proj)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtlocation" ,qtlocation)
-       ("qtwebchannel" ,qtwebchannel)
-       ("qtwebengine" ,qtwebengine)
-       ("quazip" ,quazip)
-       ("routino" ,routino)
-       ("sqlite" ,sqlite)                      ; See wrap phase
-       ("zlib" ,zlib)))
+     (list gdal
+           libjpeg-turbo
+           proj
+           qtbase-5
+           qtdeclarative
+           qtlocation
+           qtwebchannel
+           qtwebengine
+           quazip
+           routino
+           sqlite ; See wrap phase
+           zlib))
     (arguments
      `(#:tests? #f
        #:phases
@@ -1715,27 +1866,7 @@ using the dataset of topographical information collected by
                 (string-append all "\nfind_package(Qt5Positioning REQUIRED)")))
              (substitute* "cmake/Modules/FindROUTINO.cmake"
                (("/usr/local")
-                (assoc-ref inputs "routino")))
-             ;; The following fixes are included as patches in the sources
-             ;; of QMapShack, but they are not applied by default, for
-             ;; some reason...
-             (invoke "patch" "-p1" "-i" "FindPROJ4.patch")
-             (invoke "patch" "-p1" "-i" "FindQuaZip5.patch")
-             #t))
-         (add-after 'install 'wrap
-           ;; The program fails to find the QtWebEngineProcess program,
-           ;; so we set QTWEBENGINEPROCESS_PATH to help it.
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let ((bin (string-append (assoc-ref outputs "out") "/bin"))
-                   (qtwebengineprocess (string-append
-                                        (assoc-ref inputs "qtwebengine")
-                                        "/lib/qt5/libexec/QtWebEngineProcess")))
-               (for-each (lambda (program)
-                           (wrap-program program
-                             `("QTWEBENGINEPROCESS_PATH" =
-                               (,qtwebengineprocess))))
-                         (find-files bin ".*")))
-             #t)))))
+                (assoc-ref inputs "routino"))))))))
     (synopsis "GPS mapping application")
     (description
      "QMapShack can be used to plan your next outdoor trip or to visualize and
@@ -1757,8 +1888,7 @@ QLandkarte GT application.")
         (base32 "0igif2bxf4dr82glxz9gyx5mmni0r2dsnx9p9k6pxv3c4lfhaz6v"))))
     (build-system gnu-build-system)
     (inputs
-     `(("expat" ,expat)
-       ("zlib" ,zlib)))
+     (list expat zlib))
     (synopsis "Data extractor for OpenStreetMap files")
     (description
      "ReadOSM is a library to extract valid data from within an OpenStreetMap
@@ -1783,9 +1913,7 @@ input file (in @code{.osm} or @code{.osm.pbf} format).")
         (base32 "1lzch0jf6yqhw391phhafzw4ghmiz98zkf698h4fmq109fa2vhqd"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (home-page "http://shapelib.maptools.org/")
     (synopsis "Provides C library to write and update ESRI Shapefiles")
     (description
@@ -1807,18 +1935,18 @@ associated attribute file (@file{.dbf}).")
         (base32 "070p6pg541wvwb28wkn7k0z1qdyirik2qc2jpj4pf0vzx02w414n"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("expat" ,expat)
-       ("freexl" ,freexl)
-       ("geos" ,geos)
-       ("librttopo" ,librttopo)
-       ("libspatialite" ,libspatialite)
-       ("libxml2" ,libxml2)
-       ("minizip" ,minizip)
-       ("proj" ,proj)
-       ("readosm" ,readosm)
-       ("sqlite" ,sqlite)))
+     (list expat
+           freexl
+           geos
+           librttopo
+           libspatialite
+           libxml2
+           minizip
+           proj
+           readosm
+           sqlite))
     (synopsis "Collection of command line tools for SpatiaLite")
     (description
      "@code{spatialite-tools} is a collection of Command Line Interface (CLI)
@@ -1839,8 +1967,7 @@ tools supporting SpatiaLite.")
         (base32 "12z0l7368r4116ljzg7nljy5hf425r11vxc540w79wlzikmynamy"))))
     (build-system gnu-build-system)
     (inputs
-     `(("postgresql" ,postgresql)
-       ("sqlite" ,sqlite)))
+     (list postgresql sqlite))
     (synopsis "Allow SQLite/SpatiaLite to access PostgreSQL/PostGIS tables")
     (description
      "VirtualPG is a dynamic extension for the SQLite DBMS.  It implements
@@ -1855,7 +1982,7 @@ exchanged form one Spatial DBMS and the other.")
 (define-public opencpn
   (package
     (name "opencpn")
-    (version "5.0.0")
+    (version "5.2.4")
     (source
      (origin
        (method git-fetch)
@@ -1864,45 +1991,49 @@ exchanged form one Spatial DBMS and the other.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1xv3h6svw9aay5ixpql231md3pf00qxvhg62z88daraf18hlkfja"))))
+        (base32 "0ffx0lmz1mp5433zqyxigy4qqav32xprpagd66krvihkyvqp2y6y"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("bzip2" ,bzip2)
-       ("cairo" ,cairo)
-       ("curl" ,curl)
-       ("glu" ,glu)
-       ("gtk+" ,gtk+)
-       ("libarchive" ,libarchive)
-       ("libelf" ,libelf)
-       ("libexif" ,libexif)
-       ("libsndfile" ,libsndfile)
-       ("lz4" ,lz4)
-       ("mesa" ,mesa)
-       ("pango" ,pango)
-       ("portaudio" ,portaudio)
-       ("sqlite" ,sqlite)
-       ("tinyxml" ,tinyxml)
-       ("wxsvg" ,wxsvg)
-       ("wxwidgets" ,wxwidgets)
-       ("xz" ,xz)
-       ("zlib" ,zlib)))
+     (list bzip2
+           cairo
+           curl
+           glu
+           gtk+
+           libarchive
+           libelf
+           libexif
+           libsndfile
+           lz4
+           mesa
+           pango
+           portaudio
+           sqlite
+           tinyxml
+           wxsvg
+           wxwidgets
+           xz
+           zlib))
     (arguments
-     `(#:configure-flags '("-DENABLE_PORTAUDIO=ON"
-                           "-DENABLE_SNDFILE=ON"
-                           "-DBUNDLE_TCDATA=ON"
-                           "-DBUNDLE_GSHHS=CRUDE")
+     `(#:configure-flags '("-DOCPN_USE_BUNDLED_LIBS=OFF"
+                           "-DOCPN_ENABLE_PORTAUDIO=ON"
+                           "-DOCPN_ENABLE_SNDFILE=ON"
+                           "-DOCPN_BUNDLE_TCDATA=ON"
+                           "-DOCPN_BUNDLE_GSHHS=ON")
        #:tests? #f ; No tests defined
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'fix-build
-           (lambda _
+           (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "CMakeLists.txt"
-               (("set\\(wxWidgets_CONFIG_OPTIONS.*--toolkit=gtk3" all)
-                (string-append all " --libs all")))
-             #t)))))
+               (("wx-32.c; cc")
+                 "wx-32.c; gcc")
+               (("\"/bin/sh\" \"-c\"")
+                (string-append "\"" (which "bash") "\" \"-c\""))
+               (("include\\(TargetSetup\\)")
+                "set(PKG_TARGET \"guix\")\nset(PKG_TARGET_VERSION 1)")))))))
     (synopsis "Chart plotter and marine GPS navigation software")
     (description
      "OpenCPN is a chart plotter and marine navigation software designed to be
@@ -1920,8 +2051,48 @@ track your position right from your laptop.")
                    license:sgifreeb2.0
                    license:zlib))))
 
+(define-public openorienteering-mapper
+  (package
+    (name "openorienteering-mapper")
+    (version "0.9.5")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/OpenOrienteering/mapper")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "11b578h8f3q9yvphbjhqmy2w1cfc9skslzawypqmc3k44v24aj0s"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:tests? #f
+       #:configure-flags
+       (list
+        "-DLICENSING_PROVIDER:BOOL=OFF"
+        "-DMapper_MANUAL_QTHELP:BOOL=OFF")))
+    (inputs
+     `(("clipper" ,clipper)
+       ("cups" ,cups)
+       ("gdal" ,gdal)
+       ("proj" ,proj)
+       ("qtbase" ,qtbase-5)
+       ("qtimageformats" ,qtimageformats)
+       ("qtlocation" ,qtlocation)
+       ("qtsensors" ,qtsensors)
+       ("zlib" ,zlib)))
+    (native-inputs
+     `(("doxygen" ,doxygen)
+       ("qttools" ,qttools)))
+    (home-page "https://www.openorienteering.org/apps/mapper/")
+    (synopsis "OpenOrienteering Mapper (OOM)")
+    (description
+     "OpenOrienteering Mapper is a software for creating maps for the
+orienteering sport.")
+    (license license:gpl3+)))
+
 (define-public grass
-  (let* ((version "7.8.5")
+  (let* ((version "7.8.6")
          (majorminor (string-join (list-head (string-split version #\.) 2) ""))
          (grassxx (string-append "grass" majorminor)))
     (package
@@ -1933,7 +2104,7 @@ track your position right from your laptop.")
          (uri (string-append "https://grass.osgeo.org/" grassxx
                              "/source/grass-" version ".tar.gz"))
          (sha256
-          (base32 "0dzzhgcsrszzinvjir50nvzq873b8gsp0p9k8fvcrv14amkbnnd3"))))
+          (base32 "1glk74ly3j0x8ymn4jp73s6y8qv7p3g5nv4gvb6l9qqplyq1fpnq"))))
       (build-system gnu-build-system)
       (inputs
        `(("bzip2" ,bzip2)
@@ -1953,7 +2124,7 @@ track your position right from your laptop.")
          ("openblas" ,openblas)
          ("perl" ,perl)
          ("postgresql" ,postgresql)
-         ("proj.4" ,proj.4)
+         ("proj" ,proj)
          ("python" ,python)
          ("python-dateutil" ,python-dateutil)
          ("python-numpy" ,python-numpy)
@@ -1979,8 +2150,7 @@ track your position right from your laptop.")
          (modify-phases %standard-phases
            (replace 'configure
              (lambda* (#:key inputs outputs #:allow-other-keys)
-               (let ((shell (string-append (assoc-ref inputs "bash")
-                                           "/bin/bash")))
+               (let ((shell (search-input-file inputs "/bin/bash")))
                  (setenv "SHELL" shell)
                  (setenv "CONFIG_SHELL" shell)
                  (setenv "LDFLAGS" (string-append "-Wl,-rpath -Wl,"
@@ -2009,7 +2179,7 @@ track your position right from your laptop.")
                        "--with-netcdf"
                        "--with-postgres"
                        (string-append "--with-proj-share="
-                                      (assoc-ref inputs "proj.4")
+                                      (assoc-ref inputs "proj")
                                       "/share/proj")
                        "--with-pthread"
                        "--with-readline"
@@ -2056,24 +2226,23 @@ visualization.")
         (base32 "1n051yxxkylly0k9rlkx2ih3j2lf9d4csg00sm7161r7nhjvggd1"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("swig" ,swig)))
+     (list pkg-config swig))
     (inputs
-     `(("curl" ,curl)
-       ("fftw" ,fftw)
-       ("gdal" ,gdal)
-       ("hdf5" ,hdf5)
-       ("jasper" ,jasper)
-       ("libharu" ,libharu)
-       ("libtiff" ,libtiff)
-       ("opencv" ,opencv)
-       ("postgresql" ,postgresql)
-       ("proj" ,proj)
-       ("python" ,python)
-       ("qhull" ,qhull)
-       ("unixodbc" ,unixodbc)
-       ("vigra" ,vigra)
-       ("wxwidgets" ,wxwidgets)))
+     (list curl
+           fftw
+           gdal
+           hdf5
+           jasper
+           libharu
+           libtiff
+           opencv
+           postgresql
+           proj
+           python
+           qhull
+           unixodbc
+           vigra
+           wxwidgets))
     (arguments
      '(#:configure-flags '("--enable-python")))
     (synopsis "System for Automated Geoscientific Analyses")
@@ -2105,6 +2274,8 @@ growing set of geoscientific methods.")
        #:imported-modules (,@%cmake-build-system-modules
                            (guix build python-build-system)
                            (guix build qt-utils))
+       #:configure-flags
+       '("-DWITH_QTWEBKIT=NO")
        #:phases
        (modify-phases %standard-phases
          ;; Configure correct path to PyQt5 SIP directory
@@ -2151,10 +2322,10 @@ growing set of geoscientific methods.")
                (("^REV=.*") "REV=currentrev\n"))
              #t))
          (replace 'check
-           (lambda* (#:key inputs #:allow-other-keys)
+           (lambda* (#:key inputs tests? #:allow-other-keys)
+             (when tests?
              (setenv "HOME" "/tmp")
-             (system (string-append (assoc-ref inputs "xorg-server")
-                                    "/bin/Xvfb :1 &"))
+             (system "Xvfb :1 &")
              (setenv "DISPLAY" ":1")
              (setenv "TRAVIS" "true")
              (setenv "CTEST_OUTPUT_ON_FAILURE" "1")
@@ -2176,6 +2347,7 @@ growing set of geoscientific methods.")
                              "PyCoreAdittions"
                              "PyQgsAnnotation"
                              "PyQgsAppStartup"
+                             "PyQgsAuthBasicMethod"
                              "PyQgsAuthenticationSystem"
                              "PyQgsAuxiliaryStorage"
                              "PyQgsDBManagerGpkg"
@@ -2231,11 +2403,14 @@ growing set of geoscientific methods.")
                              "qgis_imagecachetest"
                              "qgis_labelingenginetest"
                              "qgis_layouthtmltest"
+                             "qgis_layoutlabeltest"
                              "qgis_layoutmanualtabletest"
                              "qgis_layoutmapgridtest"
                              "qgis_layoutmaptest"
+                             "qgis_layoutmultiframetest"
                              "qgis_layoutpicturetest"
                              "qgis_layouttabletest"
+                             "qgis_layouttest"
                              "qgis_mapdevicepixelratiotest"
                              "qgis_maprendererjobtest"
                              "qgis_ogrproviderguitest"
@@ -2252,7 +2427,7 @@ growing set of geoscientific methods.")
                              "qgis_taskmanagertest"
                              "qgis_wcsprovidertest"
                              "qgis_ziplayertest")
-                           "|"))))
+                           "|")))))
          (add-after 'install 'wrap-python
            (assoc-ref python:%standard-phases 'wrap))
          (add-after 'wrap-python 'wrap-qt
@@ -2280,62 +2455,61 @@ growing set of geoscientific methods.")
                  `("GISBASE" = (,grass))))
              #t)))))
     (inputs
-     `(("exiv2" ,exiv2)
-       ("expat" ,expat)
-       ("gdal" ,gdal)
-       ("geos" ,geos)
-       ("gpsbabel" ,gpsbabel)
-       ("grass" ,grass)
-       ("gsl" ,gsl)
-       ("hdf5" ,hdf5)
-       ("libspatialindex" ,libspatialindex)
-       ("libspatialite" ,libspatialite)
-       ("libxml2" ,libxml2)
-       ("libzip" ,libzip)
-       ("netcdf" ,netcdf)
-       ("postgresql" ,postgresql)
-       ("proj" ,proj)
-       ("protobuf" ,protobuf)
-       ("python" ,python)
-       ("python-chardet" ,python-chardet)
-       ("python-dateutil" ,python-dateutil)
-       ("python-future" ,python-future)
-       ("python-gdal" ,python-gdal)
-       ("python-jinja2" ,python-jinja2)
-       ("python-numpy" ,python-numpy)
-       ("python-owslib" ,python-owslib)
-       ("python-psycopg2" ,python-psycopg2)
-       ("python-pygments" ,python-pygments)
-       ("python-pyqt+qscintilla" ,python-pyqt+qscintilla)
-       ("python-pytz" ,python-pytz)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-requests" ,python-requests)
-       ("python-sip" ,python-sip)
-       ("python-six" ,python-six)
-       ("python-urllib3" ,python-urllib3)
-       ("qca" ,qca)
-       ("qscintilla" ,qscintilla)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtkeychain" ,qtkeychain)
-       ("qtlocation" ,qtlocation)
-       ("qtserialport" ,qtserialport)
-       ("qtsvg" ,qtsvg)
-       ("qtwebkit" ,qtwebkit)
-       ("qwt" ,qwt)
-       ;;("saga" ,saga)
-       ("sqlite" ,sqlite)))
+     (list exiv2
+           expat
+           gdal
+           geos
+           gpsbabel
+           grass
+           gsl
+           hdf5
+           libspatialindex
+           libspatialite
+           libxml2
+           libzip
+           netcdf
+           postgresql
+           proj
+           protobuf
+           python
+           python-chardet
+           python-dateutil
+           python-future
+           python-gdal
+           python-jinja2
+           python-numpy
+           python-owslib
+           python-psycopg2
+           python-pygments
+           python-pyqt+qscintilla
+           python-pytz
+           python-pyyaml
+           python-requests
+           python-sip
+           python-six
+           python-urllib3
+           qca
+           qscintilla
+           qtbase-5
+           qtdeclarative
+           qtkeychain
+           qtlocation
+           qtserialport
+           qtsvg
+           qwt
+           ;;("saga" ,saga)
+           sqlite))
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)
-       ("perl" ,perl)
-       ("perl-yaml-tiny" ,perl-yaml-tiny)
-       ("pkg-config" ,pkg-config)
-       ("python-mock" ,python-mock)
-       ("python-nose2" ,python-nose2)
-       ("qttools" ,qttools)
-       ("shellcheck" ,shellcheck)
-       ("xorg-server" ,xorg-server-for-tests)))
+     (list bison
+           flex
+           perl
+           perl-yaml-tiny
+           pkg-config
+           python-mock
+           python-nose2
+           qttools
+           shellcheck
+           xorg-server-for-tests))
     (home-page "https://qgis.org")
     (synopsis "Geographical information system")
     (description "QGIS is an easy to use Geographical Information
@@ -2412,16 +2586,16 @@ architecture.")
           "0fx0cv0kgbvynpmjgsvq2fpsyngd5idiscdn8pd5201f1ngii3mq"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-geographiclib" ,python-geographiclib)))
+     (list python-geographiclib))
     (native-inputs
-     `(("python-async-generator" ,python-async-generator)
-       ("python-coverage" ,python-coverage)
-       ("python-flake8" ,python-flake8)
-       ("python-isort" ,python-isort)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-aiohttp" ,python-pytest-aiohttp)
-       ("python-readme-renderer" ,python-readme-renderer)
-       ("python-pytz" ,python-pytz)))
+     (list python-async-generator
+           python-coverage
+           python-flake8
+           python-isort
+           python-pytest
+           python-pytest-aiohttp
+           python-readme-renderer
+           python-pytz))
     (home-page "https://github.com/geopy/geopy")
     (synopsis "Geocoding library for Python")
     (description "@code{geopy} is a Python client for several popular geocoding
@@ -2430,42 +2604,41 @@ coordinates of addresses, cities, countries, and landmarks across the globe
 using third-party geocoders and other data sources.")
     (license license:expat)))
 
-(define-public marble-qt
-  (let ((release "17.08")
-        (commit "fc7166eeef784732033c999ba605364f9c82d21c")
-        (revision "1"))
-    (package
-      (name "marble-qt")
-      (version (git-version release revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://invent.kde.org/education/marble.git/")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32 "0m0sf3sddaib7vc5lhbmh7ziw07p1hahg02f65sgfylyl5f5kj92"))
-         (patches (search-patches
-                   "marble-qt-add-qt-headers.patch"))))
-      (build-system cmake-build-system)
-      (arguments
-       `(#:tests? #f ; libmarblewidget-qt5.so.28 not found
-         #:configure-flags
-         '("-DCMAKE_BUILD_TYPE=Release"
-           "-DWITH_KF5=FALSE")))
-      (native-inputs
-       `(("qttools" ,qttools)))
-      (inputs
-       `(("qtbase" ,qtbase-5)
-         ("qtsvg" ,qtsvg)
-         ("qtdeclarative" ,qtdeclarative)
-         ("qtwebkit" ,qtwebkit)
-         ("qtlocation" ,qtlocation)))
-      (home-page "https://marble.kde.org/")
-      (synopsis "Virtual globe and world atlas")
-      (description "Marble is similar to a desktop globe.  At closer scale it
-becomes a world atlas, while OpenStreetMap takes the user to street level.  It
-supports searching for places of interest, viewing Wikipedia articles,
-creating routes by drag and drop and more.")
-      (license license:gpl3))))
+(define-public gplates
+  (package
+    (name "gplates")
+    (version "2.3.0")
+    (source (origin
+              (method url-fetch)
+              (uri "https://www.earthbyte.org/download/8421/")
+              (file-name (string-append name "-" version ".tar.bz2"))
+              (sha256
+               (base32
+                "0lrcmcxc924ixddii8cyglqlwwxvk7f00g4yzbss5i3fgcbh8n96"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:configure-flags (list "-DBoost_NO_BOOST_CMAKE=ON")
+       #:tests? #f)) ;no test target
+    (inputs
+     `(("boost" ,boost)
+       ("cgal" ,cgal)
+       ("gdal" ,gdal)
+       ("glew" ,glew)
+       ("glu" ,glu)
+       ("gmp" ,gmp)
+       ("mesa" ,mesa)
+       ("mpfr" ,mpfr)
+       ("proj" ,proj)
+       ("python-3" ,python-3)
+       ("python-numpy" ,python-numpy)
+       ("qt" ,qtbase-5)
+       ("qtsvg" ,qtsvg)
+       ("qtxmlpatterns" ,qtxmlpatterns)
+       ("qwt" ,qwt)
+       ("zlib" ,zlib)))
+    (home-page "https://www.gplates.org")
+    (synopsis "Plate tectonics simulation program")
+    (description "GPlates is a plate tectonics program.  Manipulate
+reconstructions of geological and paleogeographic features through geological
+time.  Interactively visualize vector, raster and volume data.")
+    (license license:gpl2+)))
diff --git a/gnu/packages/gettext.scm b/gnu/packages/gettext.scm
index 82604ee9be..d606acf798 100644
--- a/gnu/packages/gettext.scm
+++ b/gnu/packages/gettext.scm
@@ -4,7 +4,7 @@
 ;;; Copyright © 2015, 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016, 2019 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Alex Kost <alezost@gmail.com>
-;;; Copyright © 2017, 2019 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2017, 2019, 2020 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2017 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
@@ -31,6 +31,7 @@
   #:use-module ((guix licenses) #:select (gpl2+ gpl3+ bsd-3))
   #:use-module (gnu packages)
   #:use-module (guix packages)
+  #:use-module (guix gexp)
   #:use-module (guix download)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system perl)
@@ -52,73 +53,81 @@
 (define-public gettext-minimal
   (package
     (name "gettext-minimal")
-    (version "0.20.1")
+    (version "0.21")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnu/gettext/gettext-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0p3zwkk27wm2m2ccfqm57nj7vqkmfpn7ja1nf65zmhz8qqs5chb6"))))
+                "04kbg1sx0ncfrsbr85ggjslqkzzb243fcw9nyh3rrv1a22ihszf7"))))
     (build-system gnu-build-system)
     (outputs '("out"
                "doc"))                            ;9 MiB of HTML
     (inputs
-     `(("libunistring" ,libunistring)
-       ("libxml2" ,libxml2)
-
-       ;; TODO: ncurses is only needed for the 'libtextstyle' library.
-       ;; The next version of gettext can use a separate libtextstyle,
-       ;; but for now we include it here in 'gettext-minimal'.
-       ("ncurses" ,ncurses)))
+     (list libunistring
+           libxml2
+           ;; TODO: ncurses is only needed for the 'libtextstyle' library.
+           ;; The next version of gettext can use a separate libtextstyle,
+           ;; but for now we include it here in 'gettext-minimal'.
+           ncurses))
     (arguments
-     `(#:configure-flags '("--with-included-libunistring=no"
-                           "--with-included-libxml=no")
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'patch-source-shebangs 'patch-fixed-paths
-           (lambda _
-             (substitute* '("gettext-tools/config.h.in"
-                            "gettext-tools/gnulib-tests/init.sh"
-                            "gettext-tools/tests/init.sh"
-                            "gettext-tools/system-tests/run-test")
-               (("/bin/sh") "sh"))
-             (substitute* '("gettext-tools/src/project-id"
-                            "gettext-tools/projects/KDE/trigger"
-                            "gettext-tools/projects/GNOME/trigger")
-               (("/bin/pwd") "pwd"))
-             #t))
-        (add-before 'check 'patch-tests
-         (lambda* (#:key inputs #:allow-other-keys)
-           (let* ((bash (which "sh")))
-             ;; Some of the files we're patching are
-             ;; ISO-8859-1-encoded, so choose it as the default
-             ;; encoding so the byte encoding is preserved.
-             (with-fluids ((%default-port-encoding #f))
-               (substitute*
-                   (find-files "gettext-tools/tests"
-                               "^(lang-sh|msg(exec|filter)-[0-9])")
-                 (("#![[:blank:]]/bin/sh")
-                  (format #f "#!~a" bash)))
+     (list #:configure-flags #~'("--with-included-libunistring=no"
+                                 "--with-included-libxml=no")
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-before 'patch-source-shebangs 'patch-fixed-paths
+                 (lambda _
+                   (substitute* '("gettext-tools/config.h.in"
+                                  "gettext-tools/gnulib-tests/init.sh"
+                                  "gettext-tools/tests/init.sh"
+                                  "gettext-tools/system-tests/run-test")
+                     (("/bin/sh") "sh"))
+                   (substitute* '("gettext-tools/src/project-id"
+                                  "gettext-tools/projects/KDE/trigger"
+                                  "gettext-tools/projects/GNOME/trigger")
+                     (("/bin/pwd") "pwd"))
+                   #t))
+               (add-before 'check 'patch-tests
+                 (lambda* (#:key inputs #:allow-other-keys)
+                   (let* ((bash (which "sh")))
+                     ;; Some of the files we're patching are
+                     ;; ISO-8859-1-encoded, so choose it as the default
+                     ;; encoding so the byte encoding is preserved.
+                     (with-fluids ((%default-port-encoding #f))
+                       (substitute*
+                           (find-files "gettext-tools/tests"
+                                       "^(lang-sh|msg(exec|filter)-[0-9])")
+                         (("#![[:blank:]]/bin/sh")
+                          (format #f "#!~a" bash)))
+
+                       (substitute* (cons "gettext-tools/src/msginit.c"
+                                          (find-files "gettext-tools/gnulib-tests"
+                                                      "posix_spawn"))
+                         (("/bin/sh")
+                          bash))
 
-               (substitute* (cons "gettext-tools/src/msginit.c"
-                                  (find-files "gettext-tools/gnulib-tests"
-                                              "posix_spawn"))
-                 (("/bin/sh")
-                  bash))
+                       (substitute* "gettext-tools/src/project-id"
+                         (("/bin/pwd")
+                          "pwd"))
 
-               (substitute* "gettext-tools/src/project-id"
-                 (("/bin/pwd")
-                  "pwd"))
+                       ;; Work around Gnulib test failures on armhf-linux.
+                       #$@(if (target-arm32?)
+                              #~((with-directory-excursion "gettext-tools"
+                                   (invoke "patch" "--force" "-p1" "-i"
+                                           #$(local-file
+                                              (search-patch
+                                               "coreutils-gnulib-tests.patch")))))
+                              '())
 
-               #t)))))
+                       #t)))))
 
        ;; When tests fail, we want to know the details.
-       #:make-flags '("VERBOSE=yes"
-                      ,@(if (hurd-target?)
-                            ;; Linking to libgettextlib.so makes test-raise fail
-                            '("XFAIL_TESTS=test-raise")
-                            '()))))
+       #:make-flags #~'("VERBOSE=yes"
+                        #$@(if (hurd-target?)
+                               ;; Linking to libgettextlib.so makes test-raise fail
+                               '("XFAIL_TESTS=test-raise")
+                               '()))))
     (home-page "https://www.gnu.org/software/gettext/")
     (synopsis
      "Tools and documentation for translation (used to build other packages)")
@@ -144,16 +153,16 @@ translated messages from the catalogs.  Nearly all GNU packages use Gettext.")
     (arguments
      (substitute-keyword-arguments (package-arguments gettext-minimal)
        ((#:phases phases)
-        `(modify-phases ,phases
-           (add-after 'install 'add-emacs-autoloads
-             (lambda* (#:key outputs #:allow-other-keys)
-               ;; Make 'po-mode' and other things available by default.
-               (with-directory-excursion
-                   (string-append (assoc-ref outputs "out")
-                                  "/share/emacs/site-lisp")
-                 (symlink "start-po.el" "gettext-autoloads.el")
-                 #t)))))))
-    (native-inputs `(("emacs" ,emacs-minimal))) ; for Emacs tools
+        #~(modify-phases #$phases
+            (add-after 'install 'add-emacs-autoloads
+              (lambda* (#:key outputs #:allow-other-keys)
+                ;; Make 'po-mode' and other things available by default.
+                (with-directory-excursion
+                    (string-append (assoc-ref outputs "out")
+                                   "/share/emacs/site-lisp")
+                  (symlink "start-po.el" "gettext-autoloads.el")
+                  #t)))))))
+    (native-inputs `(("emacs" ,emacs-minimal)))   ; for Emacs tools
     (synopsis "Tools and documentation for translation")))
 
 (define-public libtextstyle
@@ -199,22 +208,21 @@ color, font attributes (weight, posture), or underlining.")
         (base32 "0kgbm0af7jwpfspa2xxiy9nc2l1r2s1rhbhz4r229zcqv49ak6sq"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-bump2version" ,python-bump2version)
-       ("python-flake8" ,python-flake8)
-       ("python-flake8-implicit-str-concat" ,python-flake8-implicit-str-concat)
-       ("python-flake8-print" ,python-flake8-print)
-       ("python-isort" ,python-isort)
-       ("python-pre-commit" ,python-pre-commit)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-sphinx" ,python-sphinx)
-       ("python-sphinx-argparse" ,python-sphinx-argparse)
-       ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
-       ("python-twine" ,python-twine)
-       ("python-yamllint" ,python-yamllint)))
+     (list python-bump2version
+           python-flake8
+           python-flake8-implicit-str-concat
+           python-flake8-print
+           python-isort
+           python-pre-commit
+           python-pytest
+           python-pytest-cov
+           python-sphinx
+           python-sphinx-argparse
+           python-sphinx-rtd-theme
+           python-twine
+           python-yamllint))
     (propagated-inputs
-     `(("python-polib" ,python-polib)
-       ("python-pymd4c" ,python-pymd4c)))
+     (list python-polib python-pymd4c))
     (home-page "https://github.com/mondeja/mdpo")
     (synopsis "Markdown file translation utilities using pofiles")
     (description
@@ -238,24 +246,19 @@ from Markdown files.")
      `(#:phases
        (modify-phases %standard-phases
          (add-after 'install 'wrap-programs
-          (lambda* (#:key outputs #:allow-other-keys)
+          (lambda* (#:key inputs outputs #:allow-other-keys)
             ;; Make sure all executables in "bin" find the Perl modules
-            ;; provided by this package at runtime.
+            ;; required by this package at runtime.
             (let* ((out  (assoc-ref outputs "out"))
                    (bin  (string-append out "/bin/"))
-                   (path (string-append out "/lib/perl5/site_perl")))
+                   (Pod::Parser (assoc-ref inputs "perl-pod-parser"))
+                   (path (string-append out "/lib/perl5/site_perl:"
+                                        Pod::Parser "/lib/perl5/site_perl")))
               (for-each (lambda (file)
                           (wrap-program file
                             `("PERL5LIB" ":" prefix (,path))))
                         (find-files bin "\\.*$"))
               #t)))
-         (add-before 'reset-gzip-timestamps 'make-compressed-files-writable
-           (lambda* (#:key outputs #:allow-other-keys)
-             (for-each make-file-writable
-                       (find-files (string-append (assoc-ref outputs "out")
-                                                  "/share/man")
-                                   ".*\\.gz$"))
-             #t))
          (add-after 'unpack 'patch-docbook-xml
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* (find-files "." ".*\\.xml(-good)?")
@@ -263,6 +266,13 @@ from Markdown files.")
                 (string-append (assoc-ref inputs "docbook-xml")
                                "/xml/dtd/docbook/")))
              #t))
+         (add-before 'build 'do-not-override-PERL5LIB
+           (lambda _
+             ;; Don't hard-code PERL5LIB to include just the build directory
+             ;; so that the build script finds modules from inputs.
+             (substitute* "Po4aBuilder.pm"
+               (("PERL5LIB=lib") ""))
+             (setenv "PERL5LIB" (string-append (getenv "PERL5LIB") ":lib"))))
          (add-before 'check 'disable-failing-tests
            (lambda _
              ;; FIXME: these tests require SGMLS.pm.
@@ -286,6 +296,8 @@ from Markdown files.")
        ("perl-test-pod" ,perl-test-pod)
        ("perl-yaml-tiny" ,perl-yaml-tiny)
        ("texlive" ,texlive-tiny)))
+    (inputs
+     (list perl-pod-parser))
     (home-page "https://po4a.org/")
     (synopsis "Scripts to ease maintenance of translations")
     (description
diff --git a/gnu/packages/ghostscript.scm b/gnu/packages/ghostscript.scm
index 03a516dc52..ca522e52ab 100644
--- a/gnu/packages/ghostscript.scm
+++ b/gnu/packages/ghostscript.scm
@@ -4,11 +4,12 @@
 ;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2013, 2015, 2016, 2017, 2019 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017 Alex Vong <alexvong1995@gmail.com>
-;;; Copyright © 2017, 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2017, 2018, 2019, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018, 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
+;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -48,15 +49,14 @@
 (define-public lcms
   (package
    (name "lcms")
-   (version "2.9")
+   (version "2.12")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://sourceforge/lcms/lcms/" version
                                 "/lcms2-" version ".tar.gz"))
 
-            (patches (search-patches "lcms-CVE-2018-16435.patch"))
             (sha256 (base32
-                     "083xisy6z01zhm7p7rgk4bx9d6zlr8l20qkfv1g29ylnhgwzvij8"))))
+                     "1x8hzq8kw16lgjxmqpnqah1p3hrqqhjpcl1ymiah8434x22kjrhq"))))
    (build-system gnu-build-system)
    (arguments
     `(#:configure-flags '("--disable-static")))
@@ -69,7 +69,7 @@
 focus on accuracy and performance.  It uses the International Color
 Consortium standard (ICC), approved as ISO 15076-1.")
    (license license:x11)
-   (home-page "http://www.littlecms.com/")
+   (home-page "https://www.littlecms.com/")
    (properties '((cpe-name . "little_cms_color_engine")))))
 
 (define-public libpaper
@@ -88,7 +88,7 @@ Consortium standard (ICC), approved as ISO 15076-1.")
                      "0zhcx67afb6b5r936w5jmaydj3ks8zh83n9rm5sv3m3k8q8jib1q"))))
    (build-system gnu-build-system)
    (native-inputs
-    `(("automake" ,automake))) ; For up to date 'config.guess' and 'config.sub'.
+    (list automake)) ; For up to date 'config.guess' and 'config.sub'.
    (arguments
     `(#:configure-flags '("--disable-static")
       #:phases
@@ -124,7 +124,7 @@ paper size.")
             (sha256 (base32
                      "1r4ab1fvgganm02kmm70b2r1azwzbav2am41gbigpa2bb1wynlrq"))))
    (build-system gnu-build-system)
-   (inputs `(("perl" ,perl)))
+   (inputs (list perl))
    (arguments
     `(#:tests? #f ; none provided
       #:phases
@@ -159,7 +159,7 @@ printing, and psresize, for adjusting page sizes.")
 (define-public ghostscript
   (package
     (name "ghostscript")
-    (version "9.52")
+    (version "9.54.0")
     (source
       (origin
         (method url-fetch)
@@ -169,10 +169,8 @@ printing, and psresize, for adjusting page sizes.")
                             "/ghostscript-" version ".tar.xz"))
         (sha256
          (base32
-          "0z1w42y2jmcpl2m1l3z0sfii6zmvzcwcgzn6bydklia6ig7jli2p"))
-        (patches (search-patches "ghostscript-freetype-compat.patch"
-                                 "ghostscript-CVE-2020-15900.patch"
-                                 "ghostscript-no-header-creationdate.patch"
+          "0fvfvv6di5s6j4sy4gaw65klm23dby39bkdjxxq4w3v0vqyb9dy2"))
+        (patches (search-patches "ghostscript-no-header-creationdate.patch"
                                  "ghostscript-no-header-id.patch"
                                  "ghostscript-no-header-uuid.patch"))
         (modules '((guix build utils)))
@@ -206,7 +204,7 @@ printing, and psresize, for adjusting page sizes.")
              "--enable-dynamic"
              "--disable-compile-inits"
              (string-append "--with-fontpath="
-                            (assoc-ref %build-inputs "gs-fonts")
+                            (assoc-ref %build-inputs "font-ghostscript")
                             "/share/fonts/type1/ghostscript")
 
              ,@(if (%current-target-system)
@@ -268,7 +266,7 @@ printing, and psresize, for adjusting page sizes.")
     (native-inputs
      `(("perl" ,perl)
        ("pkg-config" ,pkg-config)       ;needed for freetype
-       ("python" ,python-wrapper)
+       ("python" ,python-minimal-wrapper)
        ("tcl" ,tcl)
 
        ;; When cross-compiling, some of the natively-built tools require all
@@ -280,7 +278,7 @@ printing, and psresize, for adjusting page sizes.")
     (inputs
      `(("fontconfig" ,fontconfig)
        ("freetype" ,freetype)
-       ("gs-fonts" ,gs-fonts)
+       ("font-ghostscript" ,font-ghostscript)
        ("jbig2dec" ,jbig2dec)
        ("libjpeg" ,libjpeg-turbo)
        ("libpaper" ,libpaper)
@@ -316,9 +314,7 @@ output file formats and printers.")
    (source (package-source ghostscript))
    (build-system gnu-build-system)
    (native-inputs
-    `(("libtool"    ,libtool)
-      ("automake"   ,automake)
-      ("autoconf"   ,autoconf)))
+    (list libtool automake autoconf))
    (arguments
     `(#:phases
       (modify-phases %standard-phases
@@ -345,9 +341,9 @@ architecture.")
    (license license:expat)
    (home-page (package-home-page ghostscript))))
 
-(define-public gs-fonts
+(define-public font-ghostscript
   (package
-   (name "gs-fonts")
+   (name "font-ghostscript")
    (version "8.11")
    (source (origin
             (method url-fetch)
@@ -386,19 +382,23 @@ Ghostscript.  It currently includes the 35 standard PostScript fonts.")
    (license license:gpl2)
    (home-page "https://sourceforge.net/projects/gs-fonts/")))
 
+(define-public gs-fonts
+  (deprecated-package "gs-fonts" font-ghostscript))
+
 (define-public libspectre
   (package
    (name "libspectre")
-   (version "0.2.8")
+   (version "0.2.9")
    (source (origin
             (method url-fetch)
-            (uri (string-append "https://libspectre.freedesktop.org/releases/libspectre-"
-                                version ".tar.gz"))
-            (sha256 (base32
-                     "1a67iglsc3r05mzngyg9kb1gy8whq4fgsnyjwi7bqfw2i7rnl9b5"))))
+            (uri (string-append "https://libspectre.freedesktop.org/releases"
+                                "/libspectre-" version ".tar.gz"))
+            (sha256
+             (base32
+              "1vgvxp77d5d9chhx4i9cv9hifw4x10jgw6aw8l2v90dgnm99rbj9"))))
    (build-system gnu-build-system)
-   (inputs `(("ghostscript" ,ghostscript)))
-   (native-inputs `(("pkg-config" ,pkg-config)))
+   (inputs (list ghostscript))
+   (native-inputs (list pkg-config))
    (synopsis "Postscript rendering library")
    (description
     "libspectre is a small library for rendering Postscript documents.
diff --git a/gnu/packages/gimp.scm b/gnu/packages/gimp.scm
index 2da57ee8ee..0ad75de700 100644
--- a/gnu/packages/gimp.scm
+++ b/gnu/packages/gimp.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014, 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016, 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016, 2017, 2018, 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
@@ -7,6 +7,7 @@
 ;;; Copyright © 2018 Thorsten Wilms <t_w_@freenet.de>
 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
+;;; Copyright © 2021 Vinicius Monego <monego@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -38,6 +39,8 @@
   #:use-module (gnu packages base)
   #:use-module (gnu packages build-tools)
   #:use-module (gnu packages documentation)
+  #:use-module (gnu packages fontutils)
+  #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages graphviz)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages glib)
@@ -49,11 +52,13 @@
   #:use-module (gnu packages compression)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages linux)
+  #:use-module (gnu packages maths)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages patchutils)
   #:use-module (gnu packages pdf)
   #:use-module (gnu packages photo)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages sdl)
   #:use-module (gnu packages web)
   #:use-module (gnu packages xorg))
 
@@ -117,15 +122,15 @@
                 (string-append doc "/share/doc/poly2tri-c"))
                #t))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("doxygen" ,doxygen)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)
-       ("unzip" ,unzip)
-       ("which" ,which)))
+     (list autoconf
+           automake
+           doxygen
+           libtool
+           pkg-config
+           unzip
+           which))
     (propagated-inputs
-     `(("glib" ,glib)))
+     (list glib))
     (synopsis "2D constrained Delaunay triangulation library")
     (description "Poly2Tri-C is a library for generating, refining and rendering
 2-Dimensional Constrained Delaunay Triangulations.")
@@ -151,7 +156,7 @@
     (arguments
      `(#:glib-or-gtk? #t))   ; To wrap binaries and/or compile schemas
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (propagated-inputs
      `(("alsa" ,alsa-lib)
        ("cairo" ,cairo)
@@ -168,7 +173,7 @@ of a larger interface.")
 (define-public babl
   (package
     (name "babl")
-    (version "0.1.86")
+    (version "0.1.88")
     (source (origin
               (method url-fetch)
               (uri (list (string-append "https://download.gimp.org/pub/babl/"
@@ -182,17 +187,17 @@ of a larger interface.")
                                         "/babl-" version ".tar.xz")))
               (sha256
                (base32
-                "1w68h81kqkqnziixrx21qs0gfv2z79651h19sxn226xdb58mjgqb"))))
+                "0fbh2ss1dy3sba4xjmfm4vxxjmx9a6rzgba9ycjygchbm957y3ag"))))
     (build-system meson-build-system)
     (arguments
-     `(#:meson ,meson-0.55
-       #:configure-flags
-       (list "-Denable-gir=false")))
+     `(#:configure-flags
+       (list "-Denable-gir=false"
+             "-Dwith-docs=false")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list gobject-introspection pkg-config vala))
     (propagated-inputs
      ;; Propagated to satisfy ‘babl.pc’.
-     `(("lcms" ,lcms)))
+     (list lcms))
     (home-page "https://gegl.org/babl/")
     (synopsis "Image pixel format conversion library")
     (description
@@ -208,25 +213,24 @@ provided, as well as a framework to add new color models and data types.")
 (define-public gegl
   (package
     (name "gegl")
-    (version "0.4.30")
-    (source (origin
-              (method url-fetch)
-              (uri (list (string-append "https://download.gimp.org/pub/gegl/"
-                                        (string-take version 3)
-                                        "/gegl-" version ".tar.xz")
-                         (string-append "https://ftp.gtk.org/pub/gegl/"
-                                        (version-major+minor version)
-                                        "/gegl-" version ".tar.xz")
-                         (string-append "ftp://ftp.gtk.org/pub/gegl/"
-                                        (version-major+minor version)
-                                        "/gegl-" version ".tar.xz")))
-              (sha256
-               (base32
-                "1pd8xkx70k0fsi1hrzrmaify7112wjmxzk0p6bi6js89yhn7h4n1"))))
+    (version "0.4.34")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (list (string-append "https://download.gimp.org/pub/gegl/"
+                                 (string-take version 3)
+                                 "/gegl-" version ".tar.xz")
+                  (string-append "https://ftp.gtk.org/pub/gegl/"
+                                 (version-major+minor version)
+                                 "/gegl-" version ".tar.xz")
+                  (string-append "ftp://ftp.gtk.org/pub/gegl/"
+                                 (version-major+minor version)
+                                 "/gegl-" version ".tar.xz")))
+       (sha256
+        (base32 "1amazk6g9dk76rxwaqa81j87ql5vgz539n6xk88wccdllnyg0qzg"))))
     (build-system meson-build-system)
     (arguments
-     `(#:meson ,meson-0.55
-       #:configure-flags
+     `(#:configure-flags
        (list "-Dintrospection=false")
        #:phases
        (modify-phases %standard-phases
@@ -241,22 +245,35 @@ provided, as well as a framework to add new color models and data types.")
                 (string-append match "0")))
              (substitute* (find-files "tests" "^meson\\.build$")
                (("timeout ?: [0-9]+" match)
-                (string-append match "0")))
-             #t)))))
+                (string-append match "0"))))))))
     ;; These are propagated to satisfy 'gegl-0.4.pc'.
     (propagated-inputs
-     `(("babl" ,babl)
-       ("glib" ,glib)
-       ("json-glib" ,json-glib)))
+     (list babl glib json-glib))
     (inputs
+     ;; All inputs except libjpeg and libpng are optional.
      `(("cairo" ,cairo)
-       ("pango" ,pango)
+       ("gdk-pixbuf" ,gdk-pixbuf)
+       ("gexiv2" ,gexiv2)
+       ("jasper" ,jasper)
+       ("libjpeg" ,libjpeg-turbo)
+       ("libnsgif" ,libnsgif)
        ("libpng" ,libpng)
-       ("libjpeg" ,libjpeg-turbo)))
+       ("libraw" ,libraw)
+       ("librsvg" ,librsvg)
+       ("libspiro" ,libspiro)
+       ("libtiff" ,libtiff)
+       ("libwebp" ,libwebp)
+       ("maxflow" ,maxflow)
+       ("openexr" ,openexr-2)
+       ("pango" ,pango)
+       ("poppler" ,poppler)
+       ("sdl2" ,sdl2)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("glib" ,glib "bin")             ; for gtester
-       ("intltool" ,intltool)))
+     (list `(,glib "bin")               ; for gtester
+           gobject-introspection
+           intltool
+           pkg-config
+           vala))
     (home-page "https://gegl.org")
     (synopsis "Graph based image processing framework")
     (description "GEGL (Generic Graphics Library) provides infrastructure to
@@ -269,7 +286,7 @@ buffers.")
 (define-public gimp
   (package
     (name "gimp")
-    (version "2.10.24")
+    (version "2.10.30")
     (source
      (origin
        (method url-fetch)
@@ -277,7 +294,7 @@ buffers.")
                            (version-major+minor version)
                            "/gimp-" version ".tar.bz2"))
        (sha256
-        (base32 "17lq6ns5qhspd171zqh76yf98xnn5n0hcl7hbhbx63cc6ribf6xx"))))
+        (base32 "1p375gaw2daip6aiv1icrlpws5m1my5kalxkxrvl4zgdfsm5v0c8"))))
     (build-system gnu-build-system)
     (outputs '("out"
                "doc"))                            ; 9 MiB of gtk-doc HTML
@@ -304,7 +321,7 @@ buffers.")
            ;; Install 'sitecustomize.py' into gimp's python directory to
            ;; add pygobject and pygtk to pygimp's search path.
            (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((pythonpath (getenv "PYTHONPATH"))
+             (let* ((pythonpath (getenv "GUIX_PYTHONPATH"))
                     (out        (assoc-ref outputs "out"))
                     (sitecustomize.py
                      (string-append
@@ -315,30 +332,36 @@ buffers.")
                    (format port "for dir in '~a'.split(':'):~%" pythonpath)
                    (format port "    site.addsitedir(dir)~%")))))))))
     (inputs
-     `(("babl" ,babl)
+     `(("atk" ,atk)
+       ("babl" ,babl)
+       ("gegl" ,gegl)
+       ("gexiv2" ,gexiv2)
        ("glib" ,glib)
        ("glib-networking" ,glib-networking)
-       ("libtiff" ,libtiff)
-       ("libwebp" ,libwebp)
-       ("libjpeg" ,libjpeg-turbo)
-       ("atk" ,atk)
-       ("gexiv2" ,gexiv2)
        ("gtk+" ,gtk+-2)
+       ("libjpeg" ,libjpeg-turbo)
        ("libmypaint" ,libmypaint)
+       ("libtiff" ,libtiff)
+       ("libwebp" ,libwebp)
        ("mypaint-brushes" ,mypaint-brushes-1.3)
-       ("exif" ,libexif)                ; optional, EXIF + XMP support
-       ("lcms" ,lcms)                   ; optional, color management
-       ("librsvg" ,librsvg)             ; optional, SVG support
-       ("libxcursor" ,libxcursor)       ; optional, Mouse Cursor support
-       ("poppler" ,poppler)             ; optional, PDF support
-       ("poppler-data" ,poppler-data)
-       ("python" ,python-2)             ; optional, Python support
-       ("python2-pygtk" ,python2-pygtk) ; optional, Python support
-       ("gegl" ,gegl)))
+       ("exif" ,libexif)                  ; optional, EXIF + XMP support
+       ("ghostscript" ,ghostscript)       ; optional, EPS + PS support
+       ("lcms" ,lcms)                     ; optional, color management
+       ("libheif" ,libheif)               ; optional, HEIF + AVIF support
+       ("libmng" ,libmng)                 ; optional, MNG support
+       ("librsvg" ,librsvg)               ; optional, SVG support
+       ("libxcursor" ,libxcursor)         ; optional, Mouse Cursor support
+       ("openexr" ,openexr-2)             ; optional, EXR support
+       ("openjpeg" ,openjpeg)             ; optional, JPEG 2000 support
+       ("poppler" ,poppler)               ; optional, PDF support
+       ("poppler-data" ,poppler-data)     ; optional, PDF support
+       ("python" ,python-2)               ; optional, Python support
+       ("python2-pygtk" ,python2-pygtk))) ; optional, Python support
     (native-inputs
-     `(("glib:bin" ,glib "bin") ; for glib-compile-resources and gdbus-codegen
-       ("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     `(("desktop-file-utils" ,desktop-file-utils)
+       ("glib:bin" ,glib "bin") ; for glib-compile-resources and gdbus-codegen
+       ("intltool" ,intltool)
+       ("pkg-config" ,pkg-config)))
     (home-page "https://www.gimp.org")
     (synopsis "GNU Image Manipulation Program")
     (description
@@ -369,8 +392,8 @@ that is extensible via a plugin system.")
          (replace 'configure
            (lambda* (#:key inputs #:allow-other-keys)
              (mkdir-p "tmppkgconfig")
-             (copy-file (string-append (assoc-ref inputs "gegl")
-                                       "/lib/pkgconfig/gegl-0.4.pc")
+             (copy-file (search-input-file inputs
+                                           "/lib/pkgconfig/gegl-0.4.pc")
                         "tmppkgconfig/gegl-0.3.pc")
              (setenv "PKG_CONFIG_PATH"
                      (string-append "tmppkgconfig:"
@@ -390,17 +413,17 @@ that is extensible via a plugin system.")
                (mkdir-p target))
              #t)))))
     (inputs
-     `(("fftw" ,fftw)
-       ("gimp" ,gimp)
-       ;; needed by gimp-2.0.pc
-       ("gdk-pixbuf" ,gdk-pixbuf)
-       ("gegl" ,gegl)
-       ("cairo" ,cairo)
-       ("glib" ,glib)
-       ;; needed by gimpui-2.0.pc
-       ("gtk+" ,gtk+-2)))
+     (list fftw
+           gimp
+           ;; needed by gimp-2.0.pc
+           gdk-pixbuf
+           gegl
+           cairo
+           glib
+           ;; needed by gimpui-2.0.pc
+           gtk+-2))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.lprp.fr/gimp_plugin_en/#fourier")
     (synopsis "GIMP plug-in to edit image in fourier space")
     (description
@@ -424,14 +447,12 @@ inverse fourier transform.")
                 "0priwpmc7dizccqvn21ig6d649bprl3xl1hmjj7nddznjgr585vl"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     ;; As needed by 'libmypaint.pc'.
     (propagated-inputs
-     `(("json-c" ,json-c)
-       ("gobject-introspection" ,gobject-introspection)))
+     (list json-c gobject-introspection))
     (inputs
-     `(("glib" ,glib)))
+     (list glib))
     (synopsis "Artistic brushes library")
     (description "Libmypaint, also called \"brushlib\", is a library for making
 brushstrokes which is used by MyPaint and GIMP.")
@@ -453,8 +474,7 @@ brushstrokes which is used by MyPaint and GIMP.")
         (base32 "0kcqz13vzpy24dhmrx9hbs6s7hqb8y305vciznm15h277sabpmw9"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (synopsis "Default brushes for MyPaint")
     (description "This package provides the default set of brushes for
 MyPaint.")
@@ -530,12 +550,12 @@ MyPaint.")
        ("intltool" ,intltool)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("gimp" ,gimp)
-       ("gdk-pixbuf" ,gdk-pixbuf)                 ; needed by gimp-2.0.pc
-       ("cairo" ,cairo)
-       ("gegl" ,gegl)
-       ("gtk+" ,gtk+-2)                           ; needed by gimpui-2.0.pc
-       ("glib" ,glib)))
+     (list gimp
+           gdk-pixbuf ; needed by gimp-2.0.pc
+           cairo
+           gegl
+           gtk+-2 ; needed by gimpui-2.0.pc
+           glib))
     (home-page "https://github.com/bootchk/resynthesizer")
     (synopsis "GIMP plugins for texture synthesis")
     (description
@@ -608,7 +628,7 @@ transferring the style of an image.")
            ;; Install 'sitecustomize.py' into glimpse's python directory to
            ;; add pygobject and pygtk to pygimp's search path.
            (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((pythonpath (getenv "PYTHONPATH"))
+             (let* ((pythonpath (getenv "GUIX_PYTHONPATH"))
                     (out        (assoc-ref outputs "out"))
                     (sitecustomize.py
                      (string-append
diff --git a/gnu/packages/gkrellm.scm b/gnu/packages/gkrellm.scm
index 153e27c7f0..1f9e74e7b4 100644
--- a/gnu/packages/gkrellm.scm
+++ b/gnu/packages/gkrellm.scm
@@ -46,7 +46,7 @@
        ("libice" ,libice)
        ("libsm" ,libsm)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
      `(#:tests? #f                      ; there is no check target
        #:phases
diff --git a/gnu/packages/gl.scm b/gnu/packages/gl.scm
index a417e363bb..fa49679870 100644
--- a/gnu/packages/gl.scm
+++ b/gnu/packages/gl.scm
@@ -12,8 +12,10 @@
 ;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz>
 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2020 Giacomo Leidi <goodoldpaul@autistici.org>
+;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2020 Kei Kebreau <kkebreau@posteo.net>
 ;;; Copyright © 2021 Ivan Gankevich <i.gankevich@spbu.ru>
+;;; Copyright © 2021 John Kehayias <john.kehayias@protonmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -81,7 +83,7 @@
                 "1xqhk9bn10nbvffw3r4p4rjslwz1l7gaycc0x2pqkr2irp7q9x7n"))))
     (build-system gnu-build-system)
     (propagated-inputs
-     `(("mesa" ,mesa))) ; according to glu.pc
+     (list mesa)) ; according to glu.pc
     (home-page "http://www.opengl.org/archives/resources/faq/technical/glu.htm")
     (synopsis "Mesa OpenGL Utility library")
     (description
@@ -106,6 +108,7 @@ as ASCII text.")
               (uri (string-append
                     "mirror://sourceforge/freeglut/freeglut/"
                     version "/freeglut-" version ".tar.gz"))
+              (patches (search-patches "freeglut-gcc-compat.patch"))
               (sha256
                (base32
                 "0s6sk49q8ijgbsrrryb7dzqx2fa744jhx1wck5cz5jia2010w06l"))))
@@ -113,14 +116,10 @@ as ASCII text.")
     (arguments
      '(#:tests? #f                      ;no test target
        #:configure-flags '("-DFREEGLUT_BUILD_STATIC_LIBS=OFF")))
-    (inputs `(("libx11" ,libx11)
-              ("libxi" ,libxi)
-              ("libxrandr" ,libxrandr)
-              ("libxxf86vm" ,libxxf86vm)))
+    (inputs (list libx11 libxi libxrandr libxxf86vm))
     (propagated-inputs
      ;; Headers from Mesa and GLU are needed.
-     `(("glu" ,glu)
-       ("mesa" ,mesa)))
+     (list glu mesa))
     (home-page "http://freeglut.sourceforge.net/")
     (synopsis "Alternative to the OpenGL Utility Toolkit (GLUT)")
     (description
@@ -171,15 +170,10 @@ the X-Consortium license.")
     (arguments
      `(#:configure-flags '("--disable-static")))
     ;; The pkg-config file lists "freetype2" as Requires.private.
-    (propagated-inputs `(("freetype" ,freetype)))
-    (inputs `(("libx11" ,libx11)
-              ("mesa" ,mesa)
-              ("glu" ,glu)))
+    (propagated-inputs (list freetype))
+    (inputs (list libx11 mesa glu))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list pkg-config autoconf automake libtool))
     (synopsis "Font rendering library for OpenGL applications")
     (description
      "FTGL is a font rendering library for OpenGL applications.  Supported
@@ -202,11 +196,9 @@ Polygon meshes, and Extruded polygon meshes.")
         (base32 "1fg323fk7wlv2xh6lw66wswgcv6qi8aaadk7c28h2f2lj1s7njnf"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (inputs
-     `(("mesa-headers" ,mesa-headers)))
+     (list mesa-headers))
     (home-page "https://github.com/divVerent/s2tc")
     (synopsis "S3 Texture Compression implementation")
     (description
@@ -235,7 +227,7 @@ also known as DXTn or DXTC) for Mesa.")
 (define-public mesa
   (package
     (name "mesa")
-    (version "20.2.4")
+    (version "21.3.2")
     (source
       (origin
         (method url-fetch)
@@ -247,30 +239,29 @@ also known as DXTn or DXTC) for Mesa.")
                                   version "/mesa-" version ".tar.xz")))
         (sha256
          (base32
-          "14m09bk7akj0k02lg8fhvvzbdsashlbdsgl2cw7wbqfj2mhdqwh5"))
+          "1g96y59bw10ml8h4jl259g41jdmf5ww3jbwqpz1sprq7hgxvmrz2"))
         (patches
          (search-patches "mesa-skip-tests.patch"))))
     (build-system meson-build-system)
     (propagated-inputs
-      `(;; The following are in the Requires.private field of gl.pc.
-        ("libdrm" ,libdrm)
-        ("libvdpau" ,libvdpau)
-        ("libx11" ,libx11)
-        ("libxdamage" ,libxdamage)
-        ("libxfixes" ,libxfixes)
-        ("libxshmfence" ,libxshmfence)
-        ("libxxf86vm" ,libxxf86vm)
-        ("xorgproto" ,xorgproto)))
+      (list ;; The following are in the Requires.private field of gl.pc.
+            libdrm
+            libvdpau
+            libx11
+            libxdamage
+            libxfixes
+            libxshmfence
+            libxxf86vm
+            xorgproto))
     (inputs
       `(("expat" ,expat)
         ("libelf" ,elfutils)  ;required for r600 when using llvm
         ("libva" ,(force libva-without-mesa))
         ("libxml2" ,libxml2)
-        ;; TODO: Add 'libxml2-python' for OpenGL ES 1.1 and 2.0 support
         ("libxrandr" ,libxrandr)
         ("libxvmc" ,libxvmc)
         ,@(match (%current-system)
-            ((or "x86_64-linux" "i686-linux" "powerpc64le-linux")
+            ((or "x86_64-linux" "i686-linux" "powerpc64le-linux" "aarch64-linux" "powerpc-linux")
              ;; Note: update the 'clang' input of mesa-opencl when bumping this.
              `(("llvm" ,llvm-11)))
             (_
@@ -282,12 +273,13 @@ also known as DXTn or DXTC) for Mesa.")
         ("flex" ,flex)
         ("gettext" ,gettext-minimal)
         ,@(match (%current-system)
-            ((or "x86_64-linux" "i686-linux" "powerpc64le-linux")
+            ((or "x86_64-linux" "i686-linux" "powerpc64le-linux" "aarch64-linux" "powerpc-linux")
              `(("glslang" ,glslang)))
             (_
              `()))
         ("pkg-config" ,pkg-config)
         ("python" ,python-wrapper)
+        ("python-libxml2", python-libxml2) ;for OpenGL ES 1.1 and 2.0 support
         ("python-mako" ,python-mako)
         ("which" ,(@ (gnu packages base) which))))
     (outputs '("out" "bin"))
@@ -297,37 +289,39 @@ also known as DXTn or DXTC) for Mesa.")
              ((or "armhf-linux" "aarch64-linux")
               ;; 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"
+             ((or "powerpc64le-linux" "powerpc-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,
          ;; omx requires libomxil-bellagio
-         "-Dplatforms=x11,drm,surfaceless,wayland"
+         "-Dplatforms=x11,wayland"
          "-Dglx=dri"        ;Thread Local Storage, improves performance
          ;; "-Dopencl=true"
          ;; "-Domx=true"
-         "-Dosmesa=gallium"
-         "-Dgallium-xa=true"
+         "-Dosmesa=true"
+         "-Dgallium-xa=enabled"
 
          ;; features required by wayland
-         "-Dgles2=true"
-         "-Dgbm=true"
-         "-Dshared-glapi=true"
+         "-Dgles2=enabled"
+         "-Dgbm=enabled"
+         "-Dshared-glapi=enabled"
 
          ;; Explicitly enable Vulkan on some architectures.
          ,@(match (%current-system)
              ((or "i686-linux" "x86_64-linux")
               '("-Dvulkan-drivers=intel,amd"))
-             ("powerpc64le-linux"
-              '("-Dvulkan-drivers=amd"))
+             ((or "powerpc64le-linux" "powerpc-linux")
+              '("-Dvulkan-drivers=amd,swrast"))
+             ("aarch64-linux"
+              '("-Dvulkan-drivers=freedreno,amd,broadcom,swrast"))
              (_
               '("-Dvulkan-drivers=auto")))
 
          ;; Enable the Vulkan overlay layer on architectures using llvm.
          ,@(match (%current-system)
-             ((or "x86_64-linux" "i686-linux" "powerpc64le-linux")
-              '("-Dvulkan-overlay-layer=true"))
+             ((or "x86_64-linux" "i686-linux" "powerpc64le-linux" "aarch64-linux" "powerpc-linux")
+              '("-Dvulkan-layers=device-select,overlay"))
              (_
               '()))
 
@@ -339,10 +333,10 @@ also known as DXTn or DXTC) for Mesa.")
          ,@(match (%current-system)
              ((or "x86_64-linux" "i686-linux")
               '("-Ddri-drivers=i915,i965,nouveau,r200,r100"
-                "-Dllvm=true"))         ; default is x86/x86_64 only
-             ("powerpc64le-linux"
+                "-Dllvm=enabled"))      ; default is x86/x86_64 only
+             ((or "powerpc64le-linux" "aarch64-linux" "powerpc-linux")
               '("-Ddri-drivers=nouveau,r200,r100"
-                "-Dllvm=true"))
+                "-Dllvm=enabled"))
              (_
               '("-Ddri-drivers=nouveau,r200,r100"))))
 
@@ -356,25 +350,47 @@ 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
-               ;; report: <https://bugs.freedesktop.org/show_bug.cgi?id=110612>.
-               `((add-after 'unpack 'disable-failing-test
-                   (lambda _
-                     (substitute* "src/util/tests/format/meson.build"
-                       (("'u_format_test',") ""))
-                     #t)))
-               '())
+         (add-after 'unpack 'disable-failing-test
+           (lambda _
+             ;; Disable the intel vulkan (anv_state_pool) tests, as they may
+             ;; fail in a nondeterministic fashion (see:
+             ;; https://gitlab.freedesktop.org/mesa/mesa/-/issues/5446).
+             (substitute* "src/intel/vulkan/meson.build"
+               (("if with_tests")
+                "if false"))
+             ,@(match (%current-system)
+                 ("powerpc64le-linux"
+                  ;; Disable some of the llvmpipe tests.
+                  `((substitute* "src/gallium/drivers/llvmpipe/lp_test_arit.c"
+                      (("0\\.5, ") ""))))
+                 ("powerpc-linux"
+                  ;; There are some tests which fail specifically on powerpc.
+                  `((substitute* '(;; LLVM ERROR: Relocation type not implemented yet!
+                                   "src/gallium/drivers/llvmpipe/meson.build"
+                                   ;; This is probably a big-endian test failure.
+                                   "src/gallium/targets/osmesa/meson.build")
+                      (("if with_tests") "if not with_tests"))
+                    (substitute* "src/util/tests/format/meson.build"
+                      ;; This is definately an endian-ness test failure.
+                      (("'u_format_test', ") ""))
+                    ;; It is only this portion of the test which fails.
+                    (substitute* "src/mesa/main/tests/meson.build"
+                      ((".*mesa_formats.*") ""))
+                    ;; This test times out and receives SIGTERM.
+                    (substitute* "src/amd/common/meson.build"
+                      (("and not with_platform_windows") "and with_platform_windows"))))
+                 ("i686-linux"
+                  ;; Disable new test from Mesa 19 that fails on i686.  Upstream
+                  ;; report: <https://bugs.freedesktop.org/show_bug.cgi?id=110612>.
+                  `((substitute* "src/util/tests/format/meson.build"
+                      (("'u_format_test',") ""))))
+                 ("aarch64-linux"
+                  ;; The ir3_disasm test segfaults.
+                  ;; The simplest way to skip it is to run a different test instead.
+                  `((substitute* "src/freedreno/ir3/meson.build"
+                      (("disasm\\.c'") "delay.c',\n    link_args: ld_args_build_id"))))
+                 (_
+                  '((display "No tests to disable on this architecture.\n"))))))
          (add-before 'configure 'fix-dlopen-libnames
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
@@ -392,28 +408,18 @@ also known as DXTn or DXTC) for Mesa.")
                  ;; it's never installed since Mesa removed its
                  ;; egl_gallium support.
                  (("\"gbm_dri\\.so")
-                  (string-append "\"" out "/lib/dri/gbm_dri.so")))
-               #t)))
+                  (string-append "\"" out "/lib/dri/gbm_dri.so"))))))
          (add-after 'install 'split-outputs
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out"))
                    (bin (assoc-ref outputs "bin")))
-               ,@(match (%current-system)
-                   ((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.
-                    '((copy-recursively (string-append out "/bin")
-                                        (string-append bin "/bin"))
-                      (delete-file-recursively (string-append out "/bin"))))
-                   (_
-                    ;; XXX: On architectures without the Vulkan overlay layer
-                    ;; just create an empty file because outputs can not be
-                    ;; added conditionally.
-                    '((mkdir-p (string-append bin "/bin"))
-                      (call-with-output-file (string-append bin "/bin/.empty")
-                        (const #t)))))
-               #t)))
+               ;; Not all architectures have the Vulkan overlay control script.
+               (mkdir-p (string-append out "/bin"))
+               (call-with-output-file (string-append out "/bin/.empty")
+                 (const #t))
+               (copy-recursively (string-append out "/bin")
+                                 (string-append bin "/bin"))
+               (delete-file-recursively (string-append out "/bin")))))
          (add-after 'install 'symlinks-instead-of-hard-links
            (lambda* (#:key outputs #:allow-other-keys)
              ;; All the drivers and gallium targets create hard links upon
@@ -447,8 +453,7 @@ also known as DXTn or DXTC) for Mesa.")
                                                        file)
                                               (symlink reference file)))
                                         others))))
-                         (delete-duplicates inodes))
-               #t))))))
+                         (delete-duplicates inodes))))))))
     (home-page "https://mesa3d.org/")
     (synopsis "OpenGL and Vulkan implementations")
     (description "Mesa is a free implementation of the OpenGL and Vulkan
@@ -460,6 +465,10 @@ from software emulation to complete hardware acceleration for modern GPUs.")
 (define-public mesa-opencl
   (package/inherit mesa
     (name "mesa-opencl")
+    (source (origin
+              (inherit (package-source mesa))
+              (patches (cons (search-patch "mesa-opencl-all-targets.patch")
+                             (origin-patches (package-source mesa))))))
     (arguments
      (substitute-keyword-arguments (package-arguments mesa)
        ((#:configure-flags flags)
@@ -538,7 +547,7 @@ from software emulation to complete hardware acceleration for modern GPUs.")
        ("glut" ,freeglut)
        ("glew" ,glew)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -588,13 +597,10 @@ glxgears, glxheads, and glxinfo.")
                                          (assoc-ref %outputs "out")))
        #:tests? #f))                              ;no 'check' target
     (inputs
-     `(("libxi" ,libxi)
-       ("libxmu" ,libxmu)
-       ("libx11" ,libx11)
-       ("mesa" ,mesa)))
+     (list libxi libxmu libx11 mesa))
 
     ;; <GL/glew.h> includes <GL/glu.h>.
-    (propagated-inputs `(("glu" ,glu)))
+    (propagated-inputs (list glu))
 
     (home-page "http://glew.sourceforge.net/")
     (synopsis "OpenGL extension loading library for C and C++")
@@ -617,11 +623,8 @@ extension functionality is exposed in a single header file.")
               (base32
                "13qfx4xh8baryxqrv986l848ygd0piqwm6s2s90pxk9c0m9vklim"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("guile" ,guile-2.2)
-              ("mesa" ,mesa)
-              ("glu" ,glu)
-              ("freeglut" ,freeglut)))
+    (native-inputs (list pkg-config))
+    (inputs (list guile-2.2 mesa glu freeglut))
     (arguments
      '(#:phases (modify-phases %standard-phases
                  (add-after 'configure 'patch-makefile
@@ -671,15 +674,12 @@ OpenGL graphics API.")
                   "_guile_versions_to_search=\"3.0 "))
                #t))))))
     (inputs
-     `(("guile" ,guile-3.0)
-       ("mesa" ,mesa)
-       ("glu" ,glu)
-       ("freeglut" ,freeglut)))))
+     (list guile-3.0 mesa glu freeglut))))
 
 (define-public libepoxy
   (package
     (name "libepoxy")
-    (version "1.5.4")
+    (version "1.5.5")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -687,7 +687,7 @@ OpenGL graphics API.")
                     version "/libepoxy-" version ".tar.xz"))
               (sha256
                (base32
-                "1ll9fach4v30dsyd47s5ial4gaiwihzr2afb77vxxzzy3mlcrlhb"))))
+                "0mh5bdgqfd8m4wj6jlvn4ac94sgfa8r6ish75ciwrhdw47dn65i6"))))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -705,12 +705,12 @@ OpenGL graphics API.")
                #t))))))
     (build-system meson-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python" ,python)))
-    (inputs
-     `(("mesa" ,mesa)))
+     (list pkg-config python))
+    (propagated-inputs
+     ;; epoxy.pc: 'Requires.private: gl egl'
+     (list mesa))
     (home-page "https://github.com/anholt/libepoxy/")
-    (synopsis "A library for handling OpenGL function pointer management")
+    (synopsis "Library for handling OpenGL function pointer management")
     (description
      "A library for handling OpenGL function pointer management.")
     (license license:x11)))
@@ -742,11 +742,9 @@ OpenGL graphics API.")
                         (("if with_glx")
                          "if false")))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("xorgproto" ,xorgproto)))
+     (list libx11 libxext xorgproto))
     (synopsis "Vendor-neutral OpenGL dispatch library")
     (description
      "libglvnd is a vendor-neutral dispatch layer for arbitrating OpenGL
@@ -793,9 +791,9 @@ Both GLX and EGL are supported, in any combination with OpenGL and OpenGL ES.")
                           ;; Remove these flags from 'install' commands.
                           (("-o root -g root") ""))))))))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (inputs
-     `(("mesa" ,mesa)))
+     (list mesa))
     (home-page "https://www.lonesock.net/soil.html")
     (synopsis "OpenGL texture loading library")
     (description
@@ -820,18 +818,16 @@ OpenGL.")
      '(#:tests? #f ; no test target
        #:configure-flags '("-DBUILD_SHARED_LIBS=ON")))
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("unzip" ,unzip)))
+     (list doxygen unzip))
     (propagated-inputs
-     `(("mesa" ,mesa)                             ;included in public headers
-
-       ;; These are in 'Requires.private' of 'glfw3.pc'.
-       ("libx11" ,libx11)
-       ("libxrandr" ,libxrandr)
-       ("libxi" ,libxi)
-       ("libxinerama" ,libxinerama)
-       ("libxcursor" ,libxcursor)
-       ("libxxf86vm" ,libxxf86vm)))
+     (list mesa ;included in public headers
+           ;; These are in 'Requires.private' of 'glfw3.pc'.
+           libx11
+           libxrandr
+           libxi
+           libxinerama
+           libxcursor
+           libxxf86vm))
     (home-page "https://www.glfw.org")
     (synopsis "OpenGL application development library")
     (description
@@ -859,7 +855,7 @@ and surfaces, receiving input and events.")
       (build-system cmake-build-system)
       (arguments `(#:tests? #f))        ; no tests included
       (inputs
-       `(("mesa" ,mesa)))
+       (list mesa))
       ;; Extempore refuses to build on architectures other than x86_64
       (supported-systems '("x86_64-linux"))
       (home-page "https://github.com/extemporelang/nanovg")
@@ -884,9 +880,7 @@ and visualizations.")
         (base32 "1sgzv547h7hrskb9qd0x5yp45kmhvibjwj2mfswv95lg070h074d"))))
     (build-system cmake-build-system)
     (inputs
-     `(("libpng" ,libpng)
-       ("mesa" ,mesa)
-       ("zlib" ,zlib)))
+     (list libpng mesa zlib))
     (arguments
      `(#:tests? #f))                    ; no tests
     (home-page "http://www.geuz.org/gl2ps/")
@@ -922,12 +916,8 @@ mixed vector/bitmap output.")
                                          (assoc-ref %outputs "out") "/lib")
                           "-DVGL_USESSL=1"))) ; use OpenSSL
     (build-system cmake-build-system)
-    (inputs `(("glu" ,glu)
-              ("libjpeg-turbo" ,libjpeg-turbo)
-              ("libxtst" ,libxtst)
-              ("mesa" ,mesa)
-              ("openssl" ,openssl)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list glu libjpeg-turbo libxtst mesa openssl))
+    (native-inputs (list pkg-config))
     (home-page "https://www.virtualgl.org")
     (synopsis "Redirects 3D commands from an OpenGL application onto a 3D
 graphics card")
@@ -1044,7 +1034,7 @@ the glProgramViewportFlip before it was replaced with glProgramViewportInfo.")
                  (install-file "csharp/bin/MojoShader-CS.dll" (string-append out "/lib"))
                  #t))))))
       (native-inputs
-       `(("mono" ,mono)))
+       (list mono))
       (home-page "https://github.com/FNA-XNA/MojoShader")
       (synopsis "C# wrapper for MojoShader")
       (description
@@ -1094,17 +1084,17 @@ is written in a way that can be used for any general C# application.")
                  (("libGLESv2.so") (string-append mesa "/lib/libGLESv2.so")))
                #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("eudev" ,eudev)
-       ("libdrm" ,libdrm)
-       ("libjpeg-turbo" ,libjpeg-turbo)
-       ("libpng" ,libpng)
-       ("libx11" ,libx11)
-       ("libxcb" ,libxcb)
-       ("mesa" ,mesa)
-       ("wayland" ,wayland)
-       ("wayland-protocols" ,wayland-protocols)))
+     (list eudev
+           libdrm
+           libjpeg-turbo
+           libpng
+           libx11
+           libxcb
+           mesa
+           wayland
+           wayland-protocols))
     (home-page "https://github.com/glmark2/glmark2")
     (synopsis "OpenGL 2.0 and OpenGL ES 2.0 benchmark")
     (description
diff --git a/gnu/packages/glib.scm b/gnu/packages/glib.scm
index 1a94113fe7..7e6acc0984 100644
--- a/gnu/packages/glib.scm
+++ b/gnu/packages/glib.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015, 2016, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2016, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013, 2015 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
 ;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2021 Mark H Weaver <mhw@netris.org>
@@ -11,9 +11,12 @@
 ;;; Copyright © 2018 Alex Vong <alexvong1995@gmail.com>
 ;;; Copyright © 2019 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2019 Giacomo Leidi <goodoldpaul@autistici.org>
-;;; Copyright © 2019, 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2019, 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2020 Nicolò Balzarotti <nicolo@nixo.xyz>
+;;; Copyright © 2020 Florian Pelz <pelzflorian@pelzflorian.de>
+;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2020 Arthur Margerit <ruhtra.mar@gmail.com>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -34,16 +37,20 @@
   #:use-module (gnu packages)
   #:use-module (gnu packages backup)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages bash)
   #:use-module (gnu packages bison)
+  #:use-module (gnu packages boost)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages docbook)
   #:use-module (gnu packages documentation)
+  #:use-module (gnu packages elf)
   #:use-module (gnu packages enlightenment)
   #:use-module (gnu packages file)
   #:use-module (gnu packages flex)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages gnome)
+  #:use-module (gnu packages graphviz)
   #:use-module (gnu packages gperf)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages libffi)
@@ -59,7 +66,6 @@
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-xyz)
-  #:use-module (gnu packages selinux)
   #:use-module (gnu packages web)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
@@ -72,6 +78,8 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix utils)
+  #:use-module (guix gexp)
+  #:use-module (srfi srfi-26)
   #:use-module ((srfi srfi-1) #:hide (zip))
 
   ;; Export variables up-front to allow circular dependency with the 'xorg'
@@ -91,7 +99,7 @@
 (define dbus
   (package
     (name "dbus")
-    (version "1.12.16")
+    (version "1.12.20")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -99,9 +107,8 @@
                     version ".tar.gz"))
               (sha256
                (base32
-                "107ckxaff1cv4q6kmfdi2fb1nlsv03312a7kf6lb4biglhpjv8jl"))
-              (patches (search-patches "dbus-CVE-2020-12049.patch"
-                                       "dbus-helper-search-path.patch"))))
+                "1zp5gpx61v1cpqf2zwb1cidhp9xylvw49d3zydkxqk6b1qa20xpp"))
+              (patches (search-patches "dbus-helper-search-path.patch"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags
@@ -134,20 +141,20 @@
                             "sysconfdir=/tmp/dummy"
                             "install"))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ;; Dependencies to generate the doc.
-       ("docbook-xml" ,docbook-xml-4.4)
-       ("docbook-xsl" ,docbook-xsl)
-       ("doxygen" ,doxygen)
-       ("xmlto" ,xmlto)
-       ("libxml2" ,libxml2)             ;for XML_CATALOG_FILES
-       ("libxslt" ,libxslt)
-       ("yelp-tools" ,yelp-tools)))
+     (list pkg-config
+           ;; Dependencies to generate the doc.
+           docbook-xml-4.4
+           docbook-xsl
+           doxygen
+           xmlto
+           libxml2 ;for XML_CATALOG_FILES
+           libxslt
+           yelp-tools))
     (inputs
-     `(("expat" ,expat)
-       ;; Add a dependency on libx11 so that 'dbus-launch' has support for
-       ;; '--autolaunch'.
-       ("libx11" ,libx11)))
+     (list expat
+           ;; Add a dependency on libx11 so that 'dbus-launch' has support for
+           ;; '--autolaunch'.
+           libx11))
     (outputs '("out" "doc"))            ;22 MiB of HTML doc
     (home-page "https://www.freedesktop.org/wiki/Software/dbus/")
     (synopsis "Message bus for inter-process communication (IPC)")
@@ -171,254 +178,174 @@ shared NFS home directories.")
 
 (define glib
   (package
-   (name "glib")
-   (version "2.62.6")
-   (replacement glib/fixed)
-   (source (origin
-            (method url-fetch)
-            (uri (string-append "mirror://gnome/sources/"
-                                name "/" (string-take version 4) "/"
-                                name "-" version ".tar.xz"))
-            (sha256
-             (base32
-              "174bsmbmcvaw69ff9g60q5sx0fn23rkhqcwqz17h5s7sprps4kqh"))
-            (patches (search-patches "glib-appinfo-watch.patch"
-                                     "glib-tests-timer.patch"))
-            (modules '((guix build utils)))
-            (snippet
-             '(begin
-                (substitute* "tests/spawn-test.c"
-                  (("/bin/sh") "sh"))
-                #t))))
-   (build-system meson-build-system)
-   (outputs '("out"           ; everything
-              "bin"))         ; glib-mkenums, gtester, etc.; depends on Python
-   (propagated-inputs
-    `(("pcre" ,pcre)  ; in the Requires.private field of glib-2.0.pc
-      ("libffi" ,libffi) ; in the Requires.private field of gobject-2.0.pc
-      ;; These are in the Requires.private field of gio-2.0.pc
-      ("util-linux" ,util-linux "lib")  ;for libmount
-      ("libselinux" ,libselinux)
-      ("zlib" ,zlib)))
-   (native-inputs
-    `(("gettext" ,gettext-minimal)
-      ("m4" ,m4) ; for installing m4 macros
-      ("dbus" ,dbus)                              ; for GDBus tests
-      ("pkg-config" ,pkg-config)
-      ("python" ,python-wrapper)
-      ("perl" ,perl)                              ; needed by GIO tests
-      ("tzdata" ,tzdata-for-tests)))                  ; for tests/gdatetime.c
-   (arguments
-    `(#:disallowed-references (,tzdata-for-tests)
-      #:phases
-      (modify-phases %standard-phases
-        (add-after 'unpack 'patch-dbus-launch-path
-          (lambda* (#:key inputs #:allow-other-keys)
-            (let ((dbus (assoc-ref inputs "dbus")))
-              (substitute* "gio/gdbusaddress.c"
-                (("command_line = g_strdup_printf \\(\"dbus-launch")
-                 (string-append "command_line = g_strdup_printf (\""
-                                dbus "/bin/dbus-launch")))
-              #t)))
-        (add-after 'unpack 'patch-gio-launch-desktop
-          (lambda* (#:key outputs #:allow-other-keys)
-            (let ((out (assoc-ref outputs "out")))
-              ;; See also <https://gitlab.gnome.org/GNOME/glib/issues/1633>
-              ;; for another future fix.
-              (substitute* "gio/gdesktopappinfo.c"
-               (("gio-launch-desktop")
-                (string-append out "/libexec/gio-launch-desktop")))
-              #t)))
-        ;; TODO: Remove the conditional in the next core-updates cycle.
-        ;; Needed to build glib on slower ARM nodes.
-        ,@(if (string-prefix? "arm" (%current-system))
-              `((add-after 'unpack 'increase-test-timeout
-                  (lambda _
-                    (substitute* "meson.build"
-                      (("test_timeout = 60")
-                       "test_timeout = 120")
-                      (("test_timeout_slow = 120")
-                       "test_timeout_slow = 180")))))
-              '())
-        (add-before 'build 'pre-build
-          (lambda* (#:key inputs outputs #:allow-other-keys)
-            ;; For tests/gdatetime.c.
-            (setenv "TZDIR"
-                    (string-append (assoc-ref inputs "tzdata")
-                                   "/share/zoneinfo"))
-
-            ;; Some tests want write access there.
-            (setenv "HOME" (getcwd))
-            (setenv "XDG_CACHE_HOME" (getcwd))
-            #t))
-        (add-after 'unpack 'disable-failing-tests
-          (lambda _
-            (let ((disable
-                   (lambda (test-file test-paths)
-                     (define pattern+procs
-                       (map (lambda (test-path)
-                              (cons
-                               ;; XXX: only works for single line statements.
-                               (format #f "g_test_add_func.*\"~a\".*" test-path)
-                               (const "")))
-                            test-paths))
-                     (substitute test-file pattern+procs)))
-                  (failing-tests
-                   '(("glib/tests/thread.c"
-                      (;; prlimit(2) returns ENOSYS on Linux 2.6.32-5-xen-amd64
-                       ;; as found on hydra.gnu.org, and strace(1) doesn't
-                       ;; recognize it.
-                       "/thread/thread4"))
-
-                     ;; This tries to find programs in FHS directories.
-                     ("glib/tests/utils.c"
-                      ("/utils/find-program"))
-
-                     ;; This fails because "glib/tests/echo-script" cannot be
-                     ;; found.
-                     ("glib/tests/spawn-singlethread.c"
-                      ("/gthread/spawn-script"))
-
-                     ("glib/tests/timer.c"
-                      (;; fails if compiler optimizations are enabled, which they
-                       ;; are by default.
-                       "/timer/stop"))
-
-                     ("gio/tests/gapplication.c"
-                      (;; XXX: proven to be unreliable.  See:
-                       ;;  <https://bugs.debian.org/756273>
-                       ;;  <http://bugs.gnu.org/18445>
-                       "/gapplication/quit"
-
-                       ;; XXX: fails randomly for unknown reason. See:
-                       ;;  <https://lists.gnu.org/archive/html/guix-devel/2016-04/msg00215.html>
-                       "/gapplication/local-actions"))
-
-                     ("gio/tests/contenttype.c"
-                      (;; XXX: requires shared-mime-info.
-                       "/contenttype/guess"
-                       "/contenttype/guess_svg_from_data"
-                       "/contenttype/subtype"
-                       "/contenttype/list"
-                       "/contenttype/icon"
-                       "/contenttype/symbolic-icon"
-                       "/contenttype/tree"))
-
-                     ("gio/tests/appinfo.c"
-                      (;; XXX: requires update-desktop-database.
-                       "/appinfo/associations"))
-
-                     ("gio/tests/desktop-app-info.c"
-                      (;; XXX: requires update-desktop-database.
-                       "/desktop-app-info/delete"
-                       "/desktop-app-info/default"
-                       "/desktop-app-info/fallback"
-                       "/desktop-app-info/lastused"
-                       "/desktop-app-info/search"))
-
-                     ("gio/tests/gdbus-peer.c"
-                      (;; Requires /etc/machine-id.
-                       "/gdbus/codegen-peer-to-peer"))
-
-                     ("gio/tests/gdbus-address-get-session.c"
-                      (;; Requires /etc/machine-id.
-                       "/gdbus/x11-autolaunch"))
-
-                     ("gio/tests/gsocketclient-slow.c"
-                      (;; These tests tries to resolve "localhost", and fails.
-                       "/socket-client/happy-eyeballs/slow"
-                       "/socket-client/happy-eyeballs/cancellation/delayed"))
-
-                     )))
-              (for-each (lambda (x) (apply disable x)) failing-tests)
-              #t)))
-        (replace 'check
-          (lambda _
-            (setenv "MESON_TESTTHREADS"
-                    (number->string (parallel-job-count)))
-            ;; Do not run tests marked as "flaky".
-            (invoke "meson" "test" "--no-suite" "flaky")))
-        ;; TODO: meson does not permit the bindir to be outside of prefix.
-        ;; See https://github.com/mesonbuild/meson/issues/2561
-        ;; We can remove this once meson is patched.
-        (add-after 'install 'move-executables
-          (lambda* (#:key outputs #:allow-other-keys)
-            (let ((out (assoc-ref outputs "out"))
-                  (bin (assoc-ref outputs "bin")))
-              (mkdir-p bin)
-              (rename-file (string-append out "/bin")
-                           (string-append bin "/bin"))
-              ;; This one is an implementation detail of glib.
-              ;; It is wrong that that's in "/bin" in the first place,
-              ;; but that's what upstream is doing right now.
-              ;; See <https://gitlab.gnome.org/GNOME/glib/issues/1633>.
-              (mkdir (string-append out "/libexec"))
-              (rename-file (string-append bin "/bin/gio-launch-desktop")
-                           (string-append out "/libexec/gio-launch-desktop"))
-              ;; Do not refer to "bindir", which points to "${prefix}/bin".
-              ;; We don't patch "bindir" to point to "$bin/bin", because that
-              ;; would create a reference cycle between the "out" and "bin"
-              ;; outputs.
-              (substitute* (list (string-append out "/lib/pkgconfig/gio-2.0.pc")
-                                 (string-append out "/lib/pkgconfig/glib-2.0.pc"))
-                (("bindir=\\$\\{prefix\\}/bin") "")
-                (("=\\$\\{bindir\\}/") "="))
-              #t))))))
-      ;; TODO: see above for explanation.
-      ;; #:configure-flags (list (string-append "--bindir="
-      ;;                                        (assoc-ref %outputs "bin")
-      ;;                                        "/bin"))
-
-   (native-search-paths
-    ;; This variable is not really "owned" by GLib, but several related
-    ;; packages refer to it: gobject-introspection's tools use it as a search
-    ;; path for .gir files, and it's also a search path for schemas produced
-    ;; by 'glib-compile-schemas'.
-    (list (search-path-specification
-           (variable "XDG_DATA_DIRS")
-           (files '("share")))
-          ;; To load extra gio modules from glib-networking, etc.
-          (search-path-specification
-           (variable "GIO_EXTRA_MODULES")
-           (files '("lib/gio/modules")))))
-   (search-paths native-search-paths)
-   (properties '((hidden? . #t)))
-
-   (synopsis "Thread-safe general utility library; basis of GTK+ and GNOME")
-   (description
-    "GLib provides data structure handling for C, portability wrappers,
-and interfaces for such runtime functionality as an event loop, threads,
-dynamic loading, and an object system.")
-   (home-page "https://developer.gnome.org/glib/")
-   (license license:lgpl2.1+)))
+    (name "glib")
+    (version "2.70.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri
+        (string-append "mirror://gnome/sources/"
+                       name "/" (string-take version 4) "/"
+                       name "-" version ".tar.xz"))
+       (sha256
+        (base32 "0vw08p4jllavp9qmlqg1yl1zanmy53yid46wipas6gfdhnf4al85"))
+       (patches
+        (search-patches "glib-appinfo-watch.patch"
+                        "glib-skip-failing-test.patch"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           (substitute* "tests/spawn-test.c"
+             (("/bin/sh") "sh"))))))
+    (build-system meson-build-system)
+    (outputs '("out"                    ;libraries, locales, etc
+               "static"                 ;static libraries
+               "bin"                    ;executables; depends on Python
+               "debug"))
+    (arguments
+     `(#:disallowed-references
+       (,tzdata-for-tests
+        ;; Verify glib-mkenums, gtester, ... use the cross-compiled
+        ;; python.
+        ,@(if (%current-target-system)
+              (map (cut gexp-input <> #:native? #t)
+                   `(,(this-package-native-input "python")
+                     ,(this-package-native-input "python-wrapper")))
+              '()))
+       #:configure-flags ,#~(list "--default-library=both"
+                                  "-Dman=false"
+                                  "-Dselinux=disabled"
+                                  (string-append "--bindir="
+                                                 #$output:bin "/bin"))
+       #:phases
+       (modify-phases %standard-phases
+         ;; Needed to pass the test phase on slower ARM and i686 machines.
+         (add-after 'unpack 'increase-test-timeout
+           (lambda _
+             (substitute* "meson.build"
+               (("(test_timeout.*) = ([[:digit:]]+)" all first second)
+                (string-append first " = " second "0")))))
+         (add-after 'unpack 'disable-failing-tests
+           (lambda _
+             (substitute* "gio/tests/meson.build"
+               ((".*'testfilemonitor'.*") ;marked as flaky
+                ""))
+             (with-directory-excursion "glib/tests"
+               (substitute* '("unix.c" "utils.c")
+                 (("[ \t]*g_test_add_func.*;") "")))
+             (with-directory-excursion "gio/tests"
+               (substitute* '("contenttype.c" "gdbus-address-get-session.c"
+                              "gdbus-peer.c" "appinfo.c" "desktop-app-info.c")
+                 (("[ \t]*g_test_add_func.*;") "")))
 
-(define glib/fixed
-  (package
-    (inherit glib)
-    (source (origin
-              (inherit (package-source glib))
-              (patches
-               (append (search-patches "glib-CVE-2021-27218.patch"
-                                       "glib-CVE-2021-27219-01.patch"
-                                       "glib-CVE-2021-27219-02.patch"
-                                       "glib-CVE-2021-27219-03.patch"
-                                       "glib-CVE-2021-27219-04.patch"
-                                       "glib-CVE-2021-27219-05.patch"
-                                       "glib-CVE-2021-27219-06.patch"
-                                       "glib-CVE-2021-27219-07.patch"
-                                       "glib-CVE-2021-27219-08.patch"
-                                       "glib-CVE-2021-27219-09.patch"
-                                       "glib-CVE-2021-27219-10.patch"
-                                       "glib-CVE-2021-27219-11.patch"
-                                       "glib-CVE-2021-27219-12.patch"
-                                       "glib-CVE-2021-27219-13.patch"
-                                       "glib-CVE-2021-27219-14.patch"
-                                       "glib-CVE-2021-27219-15.patch"
-                                       "glib-CVE-2021-27219-16.patch"
-                                       "glib-CVE-2021-27219-17.patch"
-                                       "glib-CVE-2021-27219-18.patch"
-                                       "glib-CVE-2021-28153.patch")
-                       (origin-patches (package-source glib))))))))
+             ,@(if (target-x86-32?)
+                   ;; Comment out parts of timer.c that fail on i686 due to
+                   ;; excess precision when building with GCC 10:
+                   ;; <https://gitlab.gnome.org/GNOME/glib/-/issues/820>.
+                   '((substitute* "glib/tests/timer.c"
+                       (("^  g_assert_cmpuint \\(micros.*" all)
+                        (string-append "//" all "\n"))
+                       (("^  g_assert_cmpfloat \\(elapsed, ==.*" all)
+                        (string-append "//" all "\n"))))
+                   '())))
+         ;; Python references are not being patched in patch-phase of build,
+         ;; despite using python-wrapper as input. So we patch them manually.
+         ;;
+         ;; These python scripts are both used during build and installed,
+         ;; so at first, use a python from 'native-inputs', not 'inputs'. When
+         ;; cross-compiling, the 'patch-shebangs' phase will replace
+         ;; the native python with a python from 'inputs'.
+         (add-after 'unpack 'patch-python-references
+           (lambda* (#:key native-inputs inputs #:allow-other-keys)
+             (substitute* '("gio/gdbus-2.0/codegen/gdbus-codegen.in"
+                            "glib/gtester-report.in"
+                            "gobject/glib-genmarshal.in"
+                            "gobject/glib-mkenums.in")
+               (("@PYTHON@")
+                (search-input-file (or native-inputs inputs)
+                                   (string-append
+                                    "/bin/python"
+                                    ,(version-major+minor
+                                      (package-version python))))))))
+         (add-before 'check 'pre-check
+           (lambda* (#:key native-inputs inputs outputs #:allow-other-keys)
+             ;; For tests/gdatetime.c.
+             (setenv "TZDIR"
+                     (search-input-directory (or native-inputs inputs)
+                                             "share/zoneinfo"))
+             ;; Some tests want write access there.
+             (setenv "HOME" (getcwd))
+             (setenv "XDG_CACHE_HOME" (getcwd))))
+         (add-after 'install 'move-static-libraries
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out"))
+                   (static (assoc-ref outputs "static")))
+               (mkdir-p (string-append static "/lib"))
+               (for-each (lambda (a)
+                           (rename-file a (string-append static "/lib/"
+                                                         (basename a))))
+                         (find-files out "\\.a$")))))
+         (add-after 'install 'patch-pkg-config-files
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               ;; Do not refer to "bindir", which points to "${prefix}/bin".
+               ;; We don't patch "bindir" to point to "$bin/bin", because that
+               ;; would create a reference cycle between the "out" and "bin"
+               ;; outputs.
+               (substitute*
+                   (list
+                    (string-append out "/lib/pkgconfig/gio-2.0.pc")
+                    (string-append out "/lib/pkgconfig/glib-2.0.pc"))
+                 (("^bindir=.*")
+                  "")
+                 (("=\\$\\{bindir\\}/")
+                  "="))))))))
+    (native-inputs
+     `(("gettext" ,gettext-minimal)
+       ("m4" ,m4)                       ; for installing m4 macros
+       ("perl" ,perl)                   ; needed by GIO tests
+       ("pkg-config" ,pkg-config)
+       ("python" ,python)               ; For 'patch-python-references
+       ("python-wrapper" ,python-wrapper)
+       ("tzdata" ,tzdata-for-tests)))   ; for tests/gdatetime.c
+    (inputs
+     (list bash-completion
+           ;; "python", "python-wrapper" and "bash-minimal"
+           ;; are for the 'patch-shebangs' phase, to make
+           ;; sure the installed scripts end up with a correct shebang
+           ;; when cross-compiling.
+           python
+           python-wrapper
+           bash-minimal
+           dbus
+           libelf))
+    (propagated-inputs
+     (list libffi ; in the Requires.private field of gobject-2.0.pc
+           pcre ; in the Requires.private field of glib-2.0.pc
+           `(,util-linux "lib") ;for libmount
+           zlib))         ; in the Requires.private field of glib-2.0.pc
+    (native-search-paths
+     ;; This variable is not really "owned" by GLib, but several related
+     ;; packages refer to it: gobject-introspection's tools use it as a search
+     ;; path for .gir files, and it's also a search path for schemas produced
+     ;; by 'glib-compile-schemas'.
+     (list
+      (search-path-specification
+       (variable "XDG_DATA_DIRS")
+       (files '("share")))
+      ;; To load extra gio modules from glib-networking, etc.
+      (search-path-specification
+       (variable "GIO_EXTRA_MODULES")
+       (files '("lib/gio/modules")))))
+    (search-paths native-search-paths)
+    (synopsis "Low-level core library for GNOME projects")
+    (description "GLib provides the core application building blocks for
+libraries and applications written in C.  It provides the core object system
+used in GNOME, the main loop implementation, and a large set of utility
+functions for strings and common data structures.")
+    (home-page "https://wiki.gnome.org/Projects/GLib")
+    (license license:lgpl2.1+)
+    (properties '((hidden? . #t)))))
 
 (define-public glib-with-documentation
   ;; glib's doc must be built in a separate package since it requires gtk-doc,
@@ -427,95 +354,146 @@ dynamic loading, and an object system.")
     (properties (alist-delete 'hidden? (package-properties glib)))
     (outputs (cons "doc" (package-outputs glib))) ; 20 MiB of GTK-Doc reference
     (native-inputs
-     `(("gtk-doc" ,gtk-doc)             ; for the doc
-       ("docbook-xml" ,docbook-xml)
+     `(("docbook-xml-4.2" ,docbook-xml-4.2)
+       ("docbook-xml-4.5" ,docbook-xml)
+       ("docbook-xsl" ,docbook-xsl)
+       ("gtk-doc" ,gtk-doc)
        ("libxml2" ,libxml2)
+       ("xsltproc" ,libxslt)
        ,@(package-native-inputs glib)))
     (arguments
      (substitute-keyword-arguments (package-arguments glib)
        ((#:configure-flags flags ''())
-        `(cons "-Dgtk_doc=true" ,flags))
+        #~(cons "-Dgtk_doc=true"
+                (delete "-Dman=false" #$flags)))
        ((#:phases phases)
         `(modify-phases ,phases
+           (add-after 'unpack 'patch-docbook-xml
+             (lambda* (#:key inputs #:allow-other-keys)
+               (with-directory-excursion "docs"
+                 (substitute* (find-files "." "\\.xml$")
+                   (("http://www.oasis-open.org/docbook/xml/4\\.5/")
+                    (string-append (assoc-ref inputs "docbook-xml-4.5")
+                                   "/xml/dtd/docbook/"))
+                   (("http://www.oasis-open.org/docbook/xml/4\\.2/")
+                    (string-append (assoc-ref inputs "docbook-xml-4.2")
+                                   "/xml/dtd/docbook/"))))))
            (add-after 'install 'move-doc
              (lambda* (#:key outputs #:allow-other-keys)
-               (let ((out (assoc-ref outputs "out"))
-                     (doc (assoc-ref outputs "doc"))
-                     (html (string-append "/share/gtk-doc")))
-                 (copy-recursively (string-append out html)
-                                   (string-append doc html))
-                 (delete-file-recursively (string-append out html))
-                 #t)))))))))
+               (let* ((out (assoc-ref outputs "out"))
+                      (doc (assoc-ref outputs "doc"))
+                      (html (string-append "/share/gtk-doc")))
+                 (mkdir-p (string-append doc "/share"))
+                 (rename-file
+                  (string-append out html)
+                  (string-append doc html)))))))))))
 
-;;; TODO: Merge into glib as a 'static' output on core-updates.
-(define-public glib-static
-  (hidden-package
-   (package
-     (inherit glib)
-     (name "glib-static")
-     (outputs '("out"))
-     (arguments
-      (substitute-keyword-arguments (package-arguments glib)
-        ((#:configure-flags flags ''())
-         `(cons* "--default-library=static"
-                 "-Dselinux=disabled"
-                 "-Dman=false"
-                 "-Dgtk_doc=false"
-                 "-Dinternal_pcre=false"
-                 ,flags))
-        ((#:phases phases)
-         `(modify-phases ,phases
-            (delete 'move-executables)
-            (replace 'install
-              ;; Only install the static libraries.
-              (lambda* (#:key outputs #:allow-other-keys)
-                (let* ((out (assoc-ref outputs "out"))
-                       (lib (string-append out "/lib")))
-                  (for-each (lambda (f)
-                              (install-file f lib))
-                            (find-files "." "\\.a$"))))))))))))
+(define (python-extension-suffix python triplet)
+  "Determine the suffix for C extensions for PYTHON when compiled
+for TRIPLET."
+  ;; python uses strings like 'x86_64-linux-gnu' instead of
+  ;; 'x86_64-unknown-linux-gnu'.
+  (define normalised-system
+    (string-replace-substring triplet "-unknown-" "-"))
+  (define major.minor (version-major+minor (package-version python)))
+  (define majorminor (string-delete #\. major.minor))
+  (string-append
+    ;; If guix' python package used "--with-pydebug", a #\d would
+    ;; need to be added, likewise "--with-pymalloc" and "--with-wide-unicode"
+    ;; would require a #\m and #\u, see cpython's configure.ac.
+    ".cpython-" majorminor "-" normalised-system
+    (if (target-mingw? triplet)
+        ".dll"
+        ".so")))
+
+(define (correct-library-name-phase python name)
+  "Return a G-exp evaluating to a phase renaming the python extension NAME
+from what Meson thinks its name should be to what python expects its name
+to be.  NAME must not include the platform-specific suffix.  This can only
+be used when cross-compiling."
+  #~(lambda _
+      (define name #$name)
+      (define native-suffix
+        #$(python-extension-suffix python
+                                   (nix-system->gnu-triplet (%current-system))))
+      (define target-suffix
+        #$(python-extension-suffix python (%current-target-system)))
+      (define native-name
+        (string-append name native-suffix))
+      (define target-name
+        (string-append name target-suffix))
+      (rename-file native-name target-name)))
 
 (define gobject-introspection
   (package
     (name "gobject-introspection")
-    (version "1.62.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri
-        (string-append "mirror://gnome/sources/"
-                       "gobject-introspection/" (version-major+minor version)
-                       "/gobject-introspection-" version ".tar.xz"))
-       (sha256
-        (base32 "18lhglg9v6y83lhqzyifc1z0wrlawzrhzzxx0a3h1g7xaz97xvmi"))
-       (patches
-        (search-patches
-         "gobject-introspection-cc.patch"
-         "gobject-introspection-girepository.patch"
-         "gobject-introspection-absolute-shlib-path.patch"))))
+    (version "1.66.1")
+    (source (origin
+             (method url-fetch)
+             (uri (string-append "mirror://gnome/sources/"
+                   "gobject-introspection/" (version-major+minor version)
+                   "/gobject-introspection-" version ".tar.xz"))
+             (sha256
+              (base32 "078n0q7b6z682mf4irclrksm73cyixq295mqnqifl9plwmgaai6x"))
+             (patches (search-patches
+                       "gobject-introspection-cc.patch"
+                       "gobject-introspection-girepository.patch"
+                       "gobject-introspection-absolute-shlib-path.patch"))))
     (build-system meson-build-system)
     (arguments
-     `(#:phases
+     `(,@(if (%current-target-system)
+             `(#:configure-flags
+               '("-Dgi_cross_use_prebuilt_gi=true"
+                 ;; Building introspection data requires running binaries
+                 ;; for ‘host’ on ‘build’, so don't do that.
+                 ;;
+                 ;; TODO: it would be nice to have introspection data anyways
+                 ;; as discussed here: https://issues.guix.gnu.org/50201#60.
+                 "-Dbuild_introspection_data=false"))
+             '())
+       #:phases
+       ,#~
        (modify-phases %standard-phases
+         #$@(if (%current-target-system)
+                ;; 'typelibs' is undefined.
+                `((add-after 'unpack 'set-typelibs
+                    (lambda _
+                      (substitute* "meson.build"
+                        (("\\bsources: typelibs\\b")
+                         "sources: []")))))
+                '())
          (add-after 'unpack 'do-not-use-/usr/bin/env
            (lambda _
              (substitute* "tools/g-ir-tool-template.in"
                (("#!@PYTHON_CMD@")
-                (string-append "#!" (which "python3"))))
-             #t)))))
+                (string-append "#!" (which "python3"))))))
+         #$@(if (%current-target-system)
+               ;; Meson gives python extensions an incorrect name, see
+               ;; <https://github.com/mesonbuild/meson/issues/7049>.
+                #~((add-after 'install 'rename-library
+                     #$(correct-library-name-phase
+                         (this-package-input "python")
+                         #~(string-append #$output
+                                          "/lib/gobject-introspection/giscanner"
+                                          "/_giscanner"))))
+                #~()))))
     (native-inputs
      `(("glib" ,glib "bin")
-       ("pkg-config" ,pkg-config)))
+       ("pkg-config" ,pkg-config)
+       ("bison" ,bison)
+       ("flex" ,flex)))
     (inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)
-       ("glib" ,glib)
-       ("python" ,python-wrapper)
+     `(,@(if (%current-target-system)
+             `(("python" ,python))
+             `(("bison" ,bison)
+               ("flex" ,flex)
+               ("python" ,python-wrapper)))
        ("zlib" ,zlib)))
     (propagated-inputs
-     `(;; In practice, GIR users will need libffi when using
-       ;; gobject-introspection.
-       ("libffi" ,libffi)))
+     (list glib
+           ;; In practice, GIR users will need libffi when using
+           ;; gobject-introspection.
+           libffi))
     (native-search-paths
      (list
       (search-path-specification
@@ -551,7 +529,7 @@ provide bindings to call into the C library.")
                "1karx4sb7bnm2j67q0q74hspkfn6lqprpy5r99vkn5bb36a4viv7"))))
     (build-system gnu-build-system)
     (inputs
-     `(("file" ,file)))
+     (list file))
     (propagated-inputs
      `(;; Propagate gettext because users expect it to be there, and so does
        ;; the `intltool-update' script.
@@ -599,9 +577,7 @@ The intltool collection can be used to do these things:
                "1acjgf8zlyk7qckdk19iqaca4jcmywd7vxjbcs1mm6kaf8icqcv2"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libxml2" ,libxml2)
-       ("python-libxml2" ,python-libxml2)
-       ("python" ,python)))
+     (list libxml2 python-libxml2 python))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -610,7 +586,7 @@ The intltool collection can be used to do these things:
              (let ((prog (string-append (assoc-ref outputs "out")
                                         "/bin/itstool")))
                (wrap-program prog
-                 `("PYTHONPATH" = (,(getenv "PYTHONPATH"))))
+                 `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH"))))
                #t))))))
     (home-page "http://www.itstool.org")
     (synopsis "Tool to translate XML documents with PO files")
@@ -647,14 +623,22 @@ translated.")
               (base32
                "09g8swvc95bk1z6j8sw463p2v0dqmgm2zjfndf7i8sbcyq67dr3w"))))
     (build-system gnu-build-system)
+    (arguments
+     (if (%current-target-system)
+         `(#:configure-flags
+           ;; Run a native 'dbus-binding-tool' instead of a cross-compiled
+           ;; 'dbus-binding-tool' when cross-compiling.
+           ,#~(list
+               (string-append
+                "--with-dbus-binding-tool="
+                #+(file-append this-package "/bin/dbus-binding-tool"))))
+         '()))
     (propagated-inputs ; according to dbus-glib-1.pc
-     `(("dbus" ,dbus)
-       ("glib" ,glib)))
+     (list dbus glib))
     (inputs
-     `(("expat" ,expat)))
+     (list expat))
     (native-inputs
-     `(("glib" ,glib "bin")
-       ("pkg-config" ,pkg-config)))
+     (list `(,glib "bin") pkg-config))
     (home-page "https://dbus.freedesktop.org/doc/dbus-glib/")
     (synopsis "D-Bus GLib bindings")
     (description
@@ -665,66 +649,148 @@ by GDBus included in Glib.")
 (define libsigc++
   (package
     (name "libsigc++")
-    (version "2.10.3")
+    (version "3.0.6")
     (source (origin
-             (method url-fetch)
-             (uri (string-append "mirror://gnome/sources/libsigc++/"
-                                 (version-major+minor version) "/"
-                                 name "-" version ".tar.xz"))
-             (sha256
-              (base32
-               "11j7j1jv4z58d9s7jvl42fnqa1dzl4idgil9r45cjv1w673dys0b"))))
-    (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("m4" ,m4)))
+              (method url-fetch)
+              (uri (string-append "mirror://gnome/sources/libsigc++/"
+                                  (version-major+minor version) "/"
+                                  name "-" version ".tar.xz"))
+              (sha256
+               (base32
+                "1kn57b039lg20182lnchl1ys27vf34brn43f895cal8nc7sdq3mp"))))
+    (build-system meson-build-system)
+    (outputs '("out" "doc"))
+    (arguments
+     `(#:configure-flags
+       (list
+        "-Dbuild-documentation=true")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-docbook-xml
+           (lambda* (#:key inputs #:allow-other-keys)
+             (with-directory-excursion "docs"
+               (substitute* (find-files "." "\\.xml$")
+                 (("http://www.oasis-open.org/docbook/xml/4\\.1\\.2/")
+                  (string-append (assoc-ref inputs "docbook-xml")
+                                 "/xml/dtd/docbook/"))))
+             #t))
+         (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"))
+               (rename-file
+                (string-append out "/share/doc")
+                (string-append doc "/share/doc"))
+               #t))))))
+    (native-inputs
+     `(("docbook-xml" ,docbook-xml-4.1.2)
+       ("docbook-xsl" ,docbook-xsl)
+       ("dot" ,graphviz)
+       ("doxygen" ,doxygen)
+       ("m4" ,m4)
+       ("mm-common" ,mm-common)
+       ("perl" ,perl)
+       ("pkg-config" ,pkg-config)
+       ("xmllint" ,libxml2)
+       ("xsltproc" ,libxslt)))
+    (inputs
+     (list boost))
     (home-page "https://libsigcplusplus.github.io/libsigcplusplus/")
     (synopsis "Type-safe callback system for standard C++")
     (description
      "Libsigc++ implements a type-safe callback system for standard C++.  It
-allows you to define signals and to connect those signals to any callback
-function, either global or a member function, regardless of whether it is
-static or virtual.
+     allows you to define signals and to connect those signals to any callback
+     function, either global or a member function, regardless of whether it is
+     static or virtual.
 
-It also contains adaptor classes for connection of dissimilar callbacks and
-has an ease of use unmatched by other C++ callback libraries.")
-    (license license:lgpl2.1+)))
+     It also contains adaptor classes for connection of dissimilar callbacks and
+     has an ease of use unmatched by other C++ callback libraries.")
+    (license license:lgpl3+)))
+
+ (define-public libsigc++-2
+   (package
+    (inherit libsigc++)
+    (name "libsigc++")
+    (version "2.9.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri
+        (string-append "mirror://gnome/sources/libsigc++/"
+                       (version-major+minor version)
+                       "/libsigc++-" version ".tar.xz"))
+       (sha256
+        (base32 "0zq963d0sss82q62fdfjs7l9iwbdch51albck18cb631ml0v7y8b"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-docbook-xml
+           (lambda* (#:key inputs #:allow-other-keys)
+             (with-directory-excursion "docs"
+               (substitute* (find-files "." "\\.xml$")
+                 (("http://www.oasis-open.org/docbook/xml/4\\.1\\.2/")
+                  (string-append (assoc-ref inputs "docbook-xml")
+                                 "/xml/dtd/docbook/"))))
+             #t))
+         (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"))
+               (rename-file
+                (string-append out "/share/doc")
+                (string-append doc "/share/doc"))
+               #t))))))))
 
 (define glibmm
   (package
     (name "glibmm")
-    (version "2.62.0")
+    (version "2.70.0")
     (source (origin
-             (method url-fetch)
-             (uri (string-append "mirror://gnome/sources/glibmm/"
-                                 (version-major+minor version)
-                                 "/glibmm-" version ".tar.xz"))
-             (sha256
-              (base32
-               "1ziwx6r7k7wbvg4qq1rgrv8zninapgrmhn1hs6926a3krh9ryr9n"))))
-    (build-system gnu-build-system)
+              (method url-fetch)
+              (uri (string-append "mirror://gnome/sources/glibmm/"
+                                  (version-major+minor version)
+                                  "/glibmm-" version ".tar.xz"))
+              (sha256
+               (base32
+                "085mzpphz71sh5wh71ppikwnxsgn4pk3s4bzz6ingj6wxn5gs240"))))
+    (build-system meson-build-system)
+    (outputs '("out" "doc"))
     (arguments
-     `(#:phases
+     `(#:configure-flags
+       (list "-Dbuild-documentation=true")
+       #:phases
        (modify-phases %standard-phases
-         (add-before 'build 'pre-build
+         (add-after 'unpack 'disable-failing-tests
            (lambda _
-             ;; This test uses /etc/fstab as an example file to read
-             ;; from; choose a better example.
-             (substitute* "tests/giomm_simple/main.cc"
-               (("/etc/fstab")
-                (string-append (getcwd)
-                               "/tests/giomm_simple/main.cc")))
-
-             ;; This test does a DNS lookup, and then expects to be able
-             ;; to open a TLS session; just skip it.
-             (substitute* "tests/giomm_tls_client/main.cc"
-               (("Gio::init.*$")
-                "return 77;\n"))
-             #t)))))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("glib" ,glib "bin")))
+             (substitute* "tests/meson.build"
+               ;; This test uses /etc/fstab as an example file to read
+               ;; from; disable it.
+               (("[ \t]*.*giomm_simple.*$") "")
+               ;; This test does a DNS lookup, and then expects to be able
+               ;; to open a TLS session; just skip it.
+               (("[ \t]*.*giomm_tls_client.*$") ""))))
+         (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"))
+               (rename-file
+                (string-append out "/share/doc")
+                (string-append doc "/share/doc"))))))))
+    (native-inputs
+     (list graphviz
+           doxygen
+           `(,glib "bin")
+           m4
+           mm-common
+           perl
+           pkg-config
+           libxslt))
     (propagated-inputs
-     `(("libsigc++" ,libsigc++)
-       ("glib" ,glib)))
+     (list libsigc++ glib))
     (home-page "https://gtkmm.org/")
     (synopsis "C++ interface to the GLib library")
     (description
@@ -736,7 +802,7 @@ useful for C++.")
    (package
     (inherit glibmm)
     (name "glibmm")
-    (version "2.64.2")
+    (version "2.64.5")
     (source
      (origin
        (method url-fetch)
@@ -745,10 +811,10 @@ useful for C++.")
                        (version-major+minor version)
                        "/glibmm-" version ".tar.xz"))
        (sha256
-        (base32 "1v6lp23fr2qh4zshcnm28sn29j3nzgsvcqj2nhmrnvamipjq4lm7"))))
+        (base32 "11m37sbx0i18cl17d0fkq0bik4bbzlb5n8kcl651jhci5ipci3sh"))))
      (propagated-inputs
-      `(("libsigc++" ,libsigc++)
-        ("glib" ,glib)))))
+      (modify-inputs (package-propagated-inputs glibmm)
+        (replace "libsigc++" libsigc++-2)))))
 
 (define-public python2-pygobject-2
   (package
@@ -778,7 +844,7 @@ useful for C++.")
        ("python2-pycairo" ,python2-pycairo)
        ("gobject-introspection" ,gobject-introspection)))
     (propagated-inputs
-     `(("libffi" ,libffi)))             ;mentioned in pygobject-2.0.pc
+     (list libffi))             ;mentioned in pygobject-2.0.pc
     (arguments
      `(#:tests? #f                      ;segfaults during tests
        #:configure-flags '("LIBS=-lcairo-gobject")))
@@ -812,19 +878,24 @@ useful for C++.")
                        '("test_atoms.py" "test_overrides_gtk.py"))
              #t)))))
     (build-system meson-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               ;; The default 90 seconds can be too low on slower machines.
+               (invoke "meson" "test" "--timeout-multiplier" "5")))))))
     (native-inputs
      `(("glib-bin" ,glib "bin")
        ("pkg-config" ,pkg-config)
        ("python-pytest" ,python-pytest)
        ("python-wrapper" ,python-wrapper))) ; For patching shebangs
     (inputs
-     `(("python" ,python)
-       ("python-pycairo" ,python-pycairo)
-       ("gobject-introspection" ,gobject-introspection)))
+     (list python python-pycairo gobject-introspection))
     (propagated-inputs
      ;; pygobject-3.0.pc refers to all these.
-     `(("glib" ,glib)
-       ("libffi" ,libffi)))
+     (list glib libffi))
     ;; For finding typelib files, since gobject-introscpetion isn't propagated.
     (native-search-paths (package-native-search-paths gobject-introspection))
     (home-page "https://live.gnome.org/PyGObject")
@@ -877,10 +948,9 @@ useful for C++.")
                 "1q5075d6v2g5sm675hyzrcpxsrh09z83crfci8b0wl3jwmnz0frg"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-extutils-depends" ,perl-extutils-depends)
-       ("perl-extutils-pkgconfig" ,perl-extutils-pkgconfig)))
+     (list perl-extutils-depends perl-extutils-pkgconfig))
     (propagated-inputs
-     `(("glib" ,glib)))
+     (list glib))
     (home-page "https://metacpan.org/release/Glib")
     (synopsis "Perl wrappers for the GLib utility and Object libraries")
     (description "This module provides perl access to GLib and GLib's GObject
@@ -903,12 +973,9 @@ up the Gnome environment, and are used in many unrelated projects.")
         (base32 "0mxg6pz8qfyipw0ypr54alij0c4adzg94f62702b2a6hkp5jhij6"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-extutils-depends" ,perl-extutils-depends)
-       ("perl-extutils-pkgconfig" ,perl-extutils-pkgconfig)))
+     (list perl-extutils-depends perl-extutils-pkgconfig))
     (propagated-inputs
-     `(("gobject-introspection" ,gobject-introspection)
-       ("perl-cairo-gobject" ,perl-cairo-gobject)
-       ("perl-glib" ,perl-glib)))
+     (list gobject-introspection perl-cairo-gobject perl-glib))
     (home-page "https://metacpan.org/dist/Glib-Object-Introspection")
     (synopsis "Dynamically create Perl language bindings")
     (description "Glib::Object::Introspection uses the gobject-introspection and
@@ -919,7 +986,7 @@ libraries.  Examples include gtk+, webkit, libsoup and many more.")
 (define telepathy-glib
   (package
     (name "telepathy-glib")
-    (version "0.24.1")
+    (version "0.24.2")
     (source
      (origin
       (method url-fetch)
@@ -929,19 +996,7 @@ libraries.  Examples include gtk+, webkit, libsoup and many more.")
          "telepathy-glib-" version ".tar.gz"))
        (sha256
         (base32
-         "1symyzbjmxvksn2ifdkk50lafjm2llf2sbmky062gq2pz3cg23cy"))
-       (patches
-        (list
-         (search-patch "telepathy-glib-channel-memory-leak.patch")
-         ;; Don't use the same test name for multiple tests.
-         ;; <https://bugs.freedesktop.org/show_bug.cgi?id=92245>
-         (origin
-           (method url-fetch)
-           (uri "https://bugs.freedesktop.org/attachment.cgi?id=118608")
-           (file-name (string-append "telepathy-glib-duplicate-tests.patch"))
-           (sha256
-            (base32
-             "0z261fwrszxb28ccg3hsg9rizig4s84zvwmx6y31a4pyv7bvs5w3")))))))
+         "1w3kja8j3gz2apal79bi3hq44xk5g78aphrqbw983l6df7bp98xh"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--enable-vala-bindings")
@@ -973,9 +1028,7 @@ libraries.  Examples include gtk+, webkit, libsoup and many more.")
        ("xsltproc" ,libxslt)))
     (propagated-inputs
      ;; There are all in the Requires.private field of telepathy-glib.pc.
-     `(("dbus" ,dbus)
-       ("dbus-glib" ,dbus-glib)
-       ("glib" ,glib)))
+     (list dbus dbus-glib glib))
     (home-page "https://telepathy.freedesktop.org/wiki/")
     (synopsis "GLib Real-time communications framework over D-Bus")
     (description "Telepathy is a flexible, modular communications framework
@@ -1004,14 +1057,11 @@ This package provides the library for GLib applications.")
                 "0qafmy2i6dzx4n1dqp6pygyy6gjljnb7hwjcj2z11c1wgclsq4dw"))))
     (build-system gnu-build-system)
     (propagated-inputs
-     `(("dbus" ,dbus)))                      ;mentioned in the pkg-config file
+     (list dbus))                      ;mentioned in the pkg-config file
     (inputs
-     `(("efl" ,efl)
-       ("expat" ,expat)
-       ("glib" ,glib)
-       ("libunwind" ,libunwind)))
+     (list efl expat glib libunwind))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
      `(;; The 'configure' machinery fails to detect that it needs -lpthread.
        #:configure-flags (list "LDFLAGS=-lpthread")
@@ -1046,14 +1096,13 @@ programming language.  It also provides the @command{dbusxx-xml2cpp} and
      `(#:configure-flags '("-DENABLE_TESTS=ON"
                            "-DENABLE_TOOLS=ON"
                            "-DENABLE_GLIBMM=ON")))
-    (inputs `(("dbus" ,dbus)
-              ("libsigc++" ,libsigc++)
-              ("glibmm" ,glibmm)
-              ("python" ,python)
-              ("popt" ,popt)
-              ("expat" ,expat)))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("m4" ,m4)))
+    (inputs (list dbus
+                  libsigc++
+                  glibmm
+                  python
+                  popt
+                  expat))
+    (native-inputs (list pkg-config m4))
     (synopsis "C++ wrapper for dbus")
     (description "Dbus-cxx is a C++ wrapper for dbus.\n
 It exposes the C API to allow direct manipulation and
@@ -1097,7 +1146,7 @@ Some codes examples can be find at:
        ("gtk+" ,gtk+)
        ("json-glib" ,json-glib)
        ("libarchive" ,libarchive)
-       ("libsoup" ,libsoup)))
+       ("libsoup" ,libsoup-minimal-2)))
     (arguments
      `(#:configure-flags
        (list "-Ddep11=false"
@@ -1136,13 +1185,11 @@ metadata.")
          "1g0w8i5scmh7kfy9mmvv8q326627qf38z26mvczmn8x1yjgar8g7"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+     (list pkg-config perl-test-pod perl-test-pod-coverage))
     (inputs
-     `(("dbus" ,dbus)))
+     (list dbus))
     (propagated-inputs
-     `(("perl-xml-twig" ,perl-xml-twig)))
+     (list perl-xml-twig))
     (home-page "https://metacpan.org/release/Net-DBus")
     (synopsis "Extension for the DBus bindings")
     (description "@code{Net::DBus} provides a Perl XS API to the DBus
@@ -1164,9 +1211,9 @@ of the DBus APIs, not concerning itself yet with the GLib or QT wrappers.")
          "1z4mbv8z0rad604xahijpg5szzi8qak07hbahh230z4jf96fkxvj"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("dbus-glib" ,dbus-glib)))
+     (list dbus-glib))
     (home-page "https://metacpan.org/release/Net-DBus-GLib")
     (synopsis "Perl extension for the DBus GLib bindings")
     (description "This package provides an extension to the @code{Net::DBus}
@@ -1227,18 +1274,16 @@ simple methods via GObject-Introspection.")
                 "03sj1h0c2l08xa8phw013fnxr4fgav7l2mkjhzf9xk3dykwxcj8p"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-
-       ;; For tests.
-       ("dbus" ,dbus)
-
-       ;; These are required to build the manual.
-       ("docbook-xml" ,docbook-xml-4.3)
-       ("docbook-xsl" ,docbook-xsl)
-       ("libxml2" ,libxml2)
-       ("xsltproc" ,libxslt)))
+     (list pkg-config
+           ;; For tests.
+           dbus
+           ;; These are required to build the manual.
+           docbook-xml-4.3
+           docbook-xsl
+           libxml2
+           libxslt))
     (inputs
-     `(("glib" ,glib)))
+     (list glib))
     (home-page "https://github.com/flatpak/xdg-dbus-proxy")
     (synopsis "D-Bus connection proxy")
     (description
@@ -1276,9 +1321,7 @@ to the host system, optionally with filters applied.")
                (("/bin/true") (which "true")))
              #t)))))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("glib" ,glib)
-       ("dbus-glib" ,dbus-glib)))
+     (list gtk+ glib dbus-glib))
     (native-inputs
      `(("glib:bin" ,glib "bin")
        ("intltool" ,intltool)
diff --git a/gnu/packages/gnome-xyz.scm b/gnu/packages/gnome-xyz.scm
index d4a6772254..7f67f12672 100644
--- a/gnu/packages/gnome-xyz.scm
+++ b/gnu/packages/gnome-xyz.scm
@@ -11,6 +11,11 @@
 ;;; Copyright © 2020 Ellis Kenyo <me@elken.dev>
 ;;; Copyright © 2020 Stefan Reichör <stefan@xsteve.at>
 ;;; Copyright © 2021 Vinicius Monego <monego@posteo.net>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2021 Songlin Jiang <hollowman@hollowman.ml>
+;;; Copyright © 2021 Justin Veilleux <terramorpha@cock.li>
+;;; Copyright © 2021 Attila Lendvai <attila@lendvai.name>
+;;; Copyright © 2021 Charles Jackson <charles.b.jackson@protonmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -32,13 +37,19 @@
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system copy)
   #:use-module (guix build-system meson)
+  #:use-module (guix gexp)
   #:use-module (guix git-download)
   #:use-module (guix packages)
   #:use-module (guix utils)
   #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages acl)
+  #:use-module (gnu packages attr)
   #:use-module (gnu packages autotools)
+  #:use-module (gnu packages backup)
   #:use-module (gnu packages base)
   #:use-module (gnu packages bash)
+  #:use-module (gnu packages build-tools)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
@@ -76,11 +87,10 @@
                (("^\"\\$srcdir/configure\".*") ""))
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     ;; When Arc is missing an icon, it looks in the Moka icon theme for it.
     (propagated-inputs
-     `(("moka-icon-theme" ,moka-icon-theme)))
+     (list moka-icon-theme))
     (synopsis "Arc icon theme")
     (description "The Arc icon theme provides a set of icons matching the
 style of the Arc GTK theme.  Icons missing from the Arc theme are provided by
@@ -143,8 +153,7 @@ the Obsidian icon theme.")
              (substitute* "meson.build"
                (("meson.add_install_script.*") "")))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (synopsis "Faba icon theme")
     (description
      "Faba is a minimal icon set used as a basis for other themes such as
@@ -170,7 +179,7 @@ Moka")
     (propagated-inputs
      ;; Moka is based on Faba by using it as a fallback icon set instead of
      ;; bundling it, so we need to add it as a propagated input.
-     `(("faba-icon-theme" ,faba-icon-theme)))
+     (list faba-icon-theme))
     (synopsis "Moka icon theme")
     (description "Moka is a stylized desktop icon set, designed to be clear,
 simple and consistent.")
@@ -237,26 +246,29 @@ GNOME Shell.")
 (define-public gnome-shell-extension-clipboard-indicator
   (package
     (name "gnome-shell-extension-clipboard-indicator")
-    (version "34")
+    (version "39")
     (source (origin
               (method git-fetch)
               (uri (git-reference
-                    (url (string-append "https://github.com/Tudmotu/"
-                                        "gnome-shell-extension-clipboard-indicator.git"))
+                    (url
+                     (string-append
+                      "https://github.com/Tudmotu/"
+                      "gnome-shell-extension-clipboard-indicator"))
                     (commit (string-append "v" version))))
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0i00psc1ky70zljd14jzr627y7nd8xwnwrh4xpajl1f6djabh12s"))
+                "1kq6bzxki7lwmw690f4qml8pvfwafpqpsfnq2kyjhrp8nh39axwi"))
               (modules '((guix build utils)))
               (snippet
                ;; Remove pre-compiled settings schemas and translations from
                ;; source, as they are generated as part of build. Upstream
                ;; includes them for people who want to run the software
                ;; directly from source tree.
-               '(begin (delete-file "schemas/gschemas.compiled")
-                       (for-each delete-file (find-files "locale" "\\.mo$"))
-                       #t))))
+               '(begin
+                  (delete-file "schemas/gschemas.compiled")
+                  (for-each delete-file
+                            (find-files "locale" "\\.mo$"))))))
     (build-system copy-build-system)
     (arguments
      '(#:install-plan
@@ -267,20 +279,48 @@ GNOME Shell.")
          (add-before 'install 'compile-schemas
            (lambda _
              (with-directory-excursion "schemas"
-               (invoke "glib-compile-schemas" "."))
-             #t))
-         (add-before 'install 'compile-locales
-           (lambda _ (invoke "./compile-locales.sh")
-                   #t)))))
+               (invoke "glib-compile-schemas" ".")))))))
     (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("glib:bin" ,glib "bin")))       ; for glib-compile-schemas
+     (list `(,glib "bin") gettext-minimal))
     (home-page "https://github.com/Tudmotu/gnome-shell-extension-clipboard-indicator")
     (synopsis "Clipboard manager extension for GNOME Shell")
     (description "Clipboard Indicator is a clipboard manager for GNOME Shell
 that caches clipboard history.")
     (license license:expat)))
 
+(define-public gnome-shell-extension-customize-ibus
+  (package
+    (name "gnome-shell-extension-customize-ibus")
+    (version "78")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/openSUSE/Customize-IBus.git")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1hnnsjriq7xaakk8biwz55mn077lnm9nsmi4wz5zk7clgxmasvq9"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:make-flags
+       (list (string-append "VERSION=" ,version)
+             (string-append "INSTALLBASE=" (assoc-ref %outputs "out")
+                            "/share/gnome-shell/extensions"))
+       #:tests? #f ; No test target
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'bootstrap)
+         (delete 'configure))))
+    (native-inputs
+     `(("gettext" ,gettext-minimal)
+       ("glib:bin" ,glib "bin")))
+    (home-page "https://github.com/openSUSE/Customize-IBus")
+    (synopsis "GNOME Shell Extension for IBus Customization")
+    (description "Customize IBus provides full customization of appearance,
+behavior, system tray and input source indicator for IBus.")
+    (license license:gpl3+)))
+
 (define-public gnome-shell-extension-topicons-redux
   (package
     (name "gnome-shell-extension-topicons-redux")
@@ -296,7 +336,7 @@ that caches clipboard history.")
         (base32 "1dli9xb545n3xlj6q4wl0y5gzkm903zs47p8fiq71pdvbr6v38rj"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("glib" ,glib "bin")))
+     (list `(,glib "bin")))
     (arguments
      `(#:tests? #f                      ;no test defined in the project
        #:phases
@@ -325,7 +365,7 @@ easier to keep track of applications running in the background.")
 (define-public gnome-shell-extension-dash-to-dock
   (package
     (name "gnome-shell-extension-dash-to-dock")
-    (version "67")
+    (version "71")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -334,7 +374,7 @@ easier to keep track of applications running in the background.")
                                            version))))
               (sha256
                (base32
-                "1746xm0iyvyzj6m3pvjx11smh9w1s7naz426ki0dlr5l7jh3mpy5"))
+                "12b6ljzs5071zs0kcf5yj4jfhq10b1gnldv0hmbksnqzz5g719wf"))
               (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (arguments
@@ -349,9 +389,10 @@ easier to keep track of applications running in the background.")
     (native-inputs
      `(("glib:bin" ,glib "bin")
        ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+       ("pkg-config" ,pkg-config)
+       ("sassc" ,sassc)))
     (propagated-inputs
-     `(("glib" ,glib)))
+     (list glib))
     (synopsis "Transforms GNOME's dash into a dock")
     (description "This extension moves the dash out of the
 overview, transforming it into a dock for easier application launching and
@@ -436,7 +477,6 @@ faster window switching.")
        ("nautilus" ,nautilus)
        ("openssh" ,openssh)
        ("openssl" ,openssl)
-       ("python-nautilus" ,python-nautilus)
        ("python-pygobject" ,python-pygobject)
        ("upower" ,upower)))
     (native-inputs
@@ -486,10 +526,9 @@ control.")
                  (copy-recursively dir (string-append out pre dir))
                  #t))))))
       (native-inputs
-       `(("glib" ,glib "bin")
-         ("intltool" ,intltool)))
+       (list `(,glib "bin") intltool))
       (propagated-inputs
-       `(("glib" ,glib)))
+       (list glib))
       (synopsis "Hide app icon from GNOME's panel")
       (description "This extension hides the icon and/or title of the
 currently focused application in the top panel of the GNOME shell.")
@@ -501,10 +540,61 @@ currently focused application in the top panel of the GNOME shell.")
         (list license:gpl2
               license:gpl3)))))
 
+(define-public gnome-shell-extension-just-perfection
+  (package
+    (name "gnome-shell-extension-just-perfection")
+    (version "16.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://gitlab.gnome.org/jrahmatzadeh/just-perfection/")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "05zbzgs92zqlmjq4h2q2gggrf1qiz8l6739zzg1x5090gvk4iak3"))))
+    (build-system copy-build-system)
+    (arguments
+     `(#:install-plan
+       '(("src"
+          "share/gnome-shell/extensions/just-perfection-desktop@just-perfection"
+          #:include-regexp ("\\.css$" "\\.compiled$" "\\.js(on)?$" "\\.ui$"))
+         ("locale"
+          "share/gnome-shell/extensions/just-perfection-desktop@just-perfection/"))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'drop-executable-bits
+           (lambda _
+             (for-each
+              (lambda (file)
+                (let ((stat (lstat file)))
+                  (chmod file (logand (stat:mode stat) (lognot #o111)))))
+              (find-files "." #:directories? #f))))
+         (add-before 'install 'build
+           (lambda _
+             (invoke "glib-compile-schemas" "src/schemas")
+             (for-each
+              (lambda (file)
+                (let* ((base (basename file))
+                       (noext (substring base 0 (- (string-length base) 3)))
+                       (dest (string-append "locale/" noext "/LC_MESSAGES/"))
+                       (out (string-append dest "just-perfection.mo")))
+                  (mkdir-p dest)
+                  (invoke "msgfmt" "-c" file "-o" out)))
+              (find-files "po" "\\.po$")))))))
+    (native-inputs
+     (list `(,glib "bin") gettext-minimal))
+    (home-page "https://gitlab.gnome.org/jrahmatzadeh/just-perfection")
+    (synopsis "Customize GNOME Shell behaviour")
+    (description "Just Perfection allows you to change various settings, that
+GNOME Shell itself does not provide out of the box, such as the ability to hide
+certain elements or change animation speeds.")
+    (license license:gpl3)))
+
 (define-public gnome-shell-extension-dash-to-panel
   (package
     (name "gnome-shell-extension-dash-to-panel")
-    (version "38")
+    (version "45")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -512,7 +602,7 @@ currently focused application in the top panel of the GNOME shell.")
                     (commit (string-append "v" version))))
               (sha256
                (base32
-                "1kvybb49l1vf0fvh8d0c6xkwnry8m330scamf5x40y63d4i213j1"))
+                "05bfd3b1g9zd86pl1rpgfqsmip271lasyfj8phpqf1gdds5yz6f6"))
               (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (arguments
@@ -528,11 +618,10 @@ currently focused application in the top panel of the GNOME shell.")
          (delete 'bootstrap)
          (delete 'configure))))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (propagated-inputs
-     `(("glib" ,glib)
-       ("glib" ,glib "bin")))
+     (list glib
+           `(,glib "bin")))
     (synopsis "Icon taskbar for GNOME Shell")
     (description "This extension moves the dash into the gnome main
 panel so that the application launchers and system tray are combined
@@ -600,10 +689,222 @@ scrollable tiling of windows and per monitor workspaces.  It's inspired by paper
 notebooks and tiling window managers.")
     (license license:gpl3)))
 
+(define-public gpaste
+  (package
+    (name "gpaste")
+    (version "3.42.2")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/Keruspe/GPaste")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1k5qvgzwl357k72qfim5zfas2a0n6j24jnlm1v472l7h6gb6lssm"))
+              (patches
+               (search-patches "gpaste-fix-paths.patch"))))
+    (build-system meson-build-system)
+    (native-inputs
+     (list autoconf automake gettext-minimal gobject-introspection
+           (list glib "bin")            ; for glib-compile-resources
+           libtool pkg-config vala))
+    (inputs
+     (list appstream-glib libarchive gjs mutter graphene))
+    (arguments
+     (list #:meson meson-0.59      ;positional arguments error with meson 0.60
+           #:glib-or-gtk? #true
+           #:configure-flags
+           #~(list
+              (string-append "-Dcontrol-center-keybindings-dir="
+                             #$output "/share/gnome-control-center/keybindings")
+              (string-append "-Ddbus-services-dir="
+                             #$output "/share/dbus-1/services")
+              (string-append "-Dsystemd-user-unit-dir="
+                             #$output "/etc/systemd/user"))
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'fix-introspection-install-dir
+                 (lambda* (#:key outputs #:allow-other-keys)
+                   (let ((out (assoc-ref outputs "out")))
+                     (substitute* '("src/gnome-shell/extension.js"
+                                    "src/gnome-shell/prefs.js")
+                       (("@typelibPath@")
+                        (string-append out "/lib/girepository-1.0/")))))))))
+    (home-page "https://github.com/Keruspe/GPaste")
+    (synopsis "Clipboard management system for GNOME Shell")
+    (description "GPaste is a clipboard manager, a tool which allows you to
+keep a trace of what you’re copying and pasting.  Is is really useful when
+you go through tons of documentation and you want to keep around a bunch of
+functions you might want to use, for example.  The clipboard manager will
+store an history of everything you do, so that you can get back to older
+copies you now want to paste.")
+    (license license:bsd-2)))
+
+(define-public gnome-shell-extension-vertical-overview
+  (package
+    (name "gnome-shell-extension-vertical-overview")
+    (version "8")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/RensAlthuis/vertical-overview")
+             (commit (string-append "v" version))))
+       (sha256
+        (base32
+         "01vz48p3bh7p3ybdyw0s0ahs18lk2kzk9x4ad46s0dnwmmsyhww9"))
+       (file-name (git-file-name name version))
+       (snippet
+        '(begin (delete-file "schemas/gschemas.compiled")))))
+    (build-system copy-build-system)
+    (arguments
+     `(#:install-plan
+       '(("." ,(string-append
+                "share/gnome-shell/extensions/"
+                "vertical-overview@RensAlthuis.github.com")
+          #:include-regexp ("\\.js(on)?$" "\\.css$" "\\.ui$" "\\.png$"
+                            "\\.xml$" "\\.compiled$")))
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'install 'compile-schemas
+           (lambda _
+             (with-directory-excursion "schemas"
+               (invoke "glib-compile-schemas" ".")))))))
+    (native-inputs
+     (list `(,glib "bin")))  ; for glib-compile-resources
+    (home-page "https://github.com/RensAlthuis/vertical-overview")
+    (synopsis "Provides a vertical overview in Gnome 40 and upper")
+    (description "This Gnome extension replaces the new horizontally oriented
+Gnome overview with something that resembles the old vertically oriented
+style.")
+    (license license:gpl3)))
+
+(define-public gnome-shell-extension-jiggle
+  (package
+    (name "gnome-shell-extension-jiggle")
+    (version "8")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/jeffchannell/jiggle/")
+             (commit version)))
+       (sha256
+        (base32
+         "1wbdx2bp22bdwj51ckgivwglkmckr7z8kfwvc8nv4y376hjz5jxz"))
+       (file-name (git-file-name name version))
+       (snippet
+        '(begin (delete-file "schemas/gschemas.compiled")))))
+    (build-system copy-build-system)
+    (arguments
+     `(#:install-plan
+       '(("." ,(string-append
+                "share/gnome-shell/extensions/"
+                "jiggle@jeffchannell.com")
+          #:include-regexp ("\\.js(on)?$" "\\.css$" "\\.ui$" "\\.png$"
+                            "\\.xml$" "\\.compiled$")))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-version
+           (lambda _
+             (substitute* "metadata.json"
+               (("\"40.0\"") "\"40\", \"41\""))))
+         (add-before 'install 'compile-schemas
+           (lambda _
+             (with-directory-excursion "schemas"
+               (invoke "glib-compile-schemas" ".")))))))
+    (native-inputs
+     (list `(,glib "bin")))  ; for glib-compile-resources
+    (home-page "https://github.com/jeffchannell/jiggle")
+    (synopsis "Mouse cursor enlargement for small and fast movements")
+    (description "Jiggle is a Gnome Shell extension that highlights the cursor
+position when the mouse is moved rapidly.")
+    (license license:gpl2)))
+
+(define-public gnome-shell-extension-burn-my-windows
+  (package
+    (name "gnome-shell-extension-burn-my-windows")
+    (version "7")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/Schneegans/Burn-My-Windows/")
+             (commit (string-append "v" version))))
+       (sha256
+        (base32
+         "1513kh6dfvnaj5jq2mm7rv1k54v91hjckgim1dpqlxwnv4gi9krd"))
+       (file-name (git-file-name name version))))
+    (build-system copy-build-system)
+    (arguments
+     `(#:install-plan
+       '(("." ,(string-append
+                "share/gnome-shell/extensions/"
+                "burn-my-windows@schneegans.github.com")
+          #:include-regexp ("\\.js(on)?$" "\\.css$" "\\.ui$" "\\.png$"
+                            "\\.xml$" "\\.compiled$" "\\.gresource$")))
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'install 'compile-resources
+           (lambda _
+             (invoke "make" "resources/burn-my-windows.gresource")))
+         (add-before 'install 'compile-schemas
+           (lambda _
+             (with-directory-excursion "schemas"
+               (invoke "glib-compile-schemas" ".")))))))
+    (native-inputs
+     (list `(,glib "bin")))  ; for glib-compile-resources
+    (home-page "https://github.com/Schneegans/Burn-My-Windows")
+    (synopsis "Application closing effects extension")
+    (description "Burn My Windows is a shell extension that stylizes the
+animation of closing windowed applications.")
+    (license license:gpl3)))
+
+(define-public gnome-shell-extension-blur-my-shell
+  (package
+    (name "gnome-shell-extension-blur-my-shell")
+    (version "27")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/aunetx/blur-my-shell")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0l318lgc2zrp8fskabiv28knwp3b5i2y8bd3164da4pkf1jsl468"))
+       (snippet
+        '(begin (delete-file "src/schemas/gschemas.compiled")))))
+    (build-system copy-build-system)
+    (arguments
+     `(#:install-plan
+       '(("." ,(string-append
+                "share/gnome-shell/extensions/"
+                "blur-my-shell@aunetx")
+          #:include-regexp ("\\.js(on)?$" "\\.css$" "\\.ui$" "\\.png$"
+                            "\\.xml$" "\\.compiled$")))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'cd-src
+           (lambda _ (chdir "src")))
+         (add-before 'install 'compile-schemas
+           (lambda _
+             (with-directory-excursion "schemas"
+               (invoke "glib-compile-schemas" ".")))))))
+    (native-inputs
+     (list (list glib "bin"))) ; for glib-compile-schemas
+    (home-page "https://github.com/aunetx/blur-my-shell")
+    (synopsis "Blurs different parts of the GNOME Shell")
+    (description "Blur My Shell adds a blur look to different parts of the
+GNOME Shell, including the top panel, dash and overview.")
+    (license license:gpl3)))
+
 (define-public arc-theme
   (package
     (name "arc-theme")
-    (version "20201013")
+    (version "20210412")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -612,31 +913,26 @@ notebooks and tiling window managers.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1x2l1mwjx68dwf3jb1i90c1q8nqsl1wf2zggcn8im6590k5yv39s"))))
-    (build-system gnu-build-system)
+                "0zs44dagp6baiyszlr1kj5ncap43fg32dv07rl46nxbds2p65lh4"))))
+    (build-system meson-build-system)
     (arguments
      '(#:configure-flags
-       (list "--disable-cinnamon")
+       '("-Dthemes=gnome-shell,gtk2,gtk3,metacity,plank,unity,xfwm")
        #:phases
        (modify-phases %standard-phases
-         ;; autogen.sh calls configure at the end of the script.
-         (replace 'bootstrap
-           (lambda _ (invoke "autoreconf" "-vfi")))
          (add-before 'build 'set-home   ;placate Inkscape
            (lambda _
              (setenv "HOME" (getcwd))
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("glib" ,glib "bin")             ; for glib-compile-resources
-       ("gnome-shell" ,gnome-shell)
-       ("gtk+" ,gtk+)
-       ("inkscape" ,inkscape)
-       ("optipng" ,optipng)
-       ("pkg-config" ,pkg-config)
-       ("sassc" ,sassc/libsass-3.5)))
-    (synopsis "A flat GTK+ theme with transparent elements")
+     (list `(,glib "bin") ; for glib-compile-resources
+           gnome-shell
+           gtk+
+           inkscape
+           optipng
+           pkg-config
+           sassc/libsass-3.5))
+    (synopsis "Flat GTK+ theme with transparent elements")
     (description "Arc is a flat theme with transparent elements for GTK 3, GTK
 2, and GNOME Shell which supports GTK 3 and GTK 2 based desktop environments
 like GNOME, Unity, Budgie, Pantheon, XFCE, Mate, etc.")
@@ -660,12 +956,12 @@ like GNOME, Unity, Budgie, Pantheon, XFCE, Mate, etc.")
                 "154qawiga792iimkpk3a6q8f4gm4r158wmsagkbqqbhj33kxgxhg"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("gtk+" ,gtk+)
-       ("glib:bin" ,glib "bin")         ; for "glib-compile-resources"
-       ("librsvg" ,librsvg)
-       ("pkg-config" ,pkg-config)
-       ("ruby-sass" ,ruby-sass)
-       ("sassc" ,sassc)))
+     (list gtk+
+           `(,glib "bin") ; for "glib-compile-resources"
+           librsvg
+           pkg-config
+           ruby-sass
+           sassc))
     (home-page "https://shimmerproject.org/")
     (synopsis "Grey GTK+ theme based on Bluebird")
     (description "Greybird is a grey derivative of the Bluebird theme by the
@@ -707,10 +1003,9 @@ Shimmer Project.  It supports GNOME, Unity, and Xfce.")
            (invoke "./install.sh" "-d" themesdir)
            #t))))
     (inputs
-     `(("gtk-engines" ,gtk-engines)))
+     (list gtk-engines))
     (native-inputs
-     `(("bash" ,bash)
-       ("coreutils" ,coreutils)))
+     (list bash coreutils))
     (synopsis "Flat design theme for GTK 3, GTK 2 and GNOME-Shell")
     (description "Matcha is a flat Design theme for GTK 3, GTK 2 and
 Gnome-Shell which supports GTK 3 and GTK 2 based desktop environments
@@ -735,8 +1030,7 @@ like Gnome, Unity, Budgie, Pantheon, XFCE, Mate and others.")
             "0qaxxafsn5zd2ysgr0jyv5j73360mfdmxyd55askswlsfphssn74"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("gtk+" ,gtk+)
-       ("sassc" ,sassc)))
+     (list gtk+ sassc))
     (home-page "https://github.com/nana-4/materia-theme")
     (synopsis "Material Design theme for a wide range of environments")
     (description "Materia is a Material Design theme for GNOME/GTK based
@@ -779,9 +1073,6 @@ dark elements.  It supports GNOME, Unity, Xfce, and Openbox.")
     (home-page "https://numixproject.github.io")
     (license license:gpl3+)))
 
-(define-public numix-theme
-  (deprecated-package "numix-theme" numix-gtk-theme))
-
 (define-public orchis-theme
   (package
     (name "orchis-theme")
@@ -832,11 +1123,10 @@ dark elements.  It supports GNOME, Unity, Xfce, and Openbox.")
              (apply invoke "./install.sh" configure-flags)
              #t)))))
     (inputs
-     `(("gtk-engines" ,gtk-engines)))
+     (list gtk-engines))
     (native-inputs
-     `(;("coreutils" ,coreutils)
-       ("gtk+" ,gtk+)
-       ("sassc" ,sassc)))
+     (list ;("coreutils" ,coreutils)
+           gtk+ sassc))
     (home-page "https://github.com/vinceliuice/Orchis-theme")
     (synopsis "Material Design theme for a wide range of environments")
     (description "Orchis is a Material Design them for GNOME/GTK based
@@ -846,10 +1136,41 @@ variants.")
                    license:lgpl2.1         ; Some style sheets.
                    license:cc-by-sa4.0)))) ; Some icons
 
+(define-public eiciel
+  (package
+    (name "eiciel")
+    (version "0.9.13.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/rofirrim/eiciel")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0rhhw0h1hyg5kvxhjxkdz03vylgax6912mg8j4lvcz6wlsa4wkvj"))))
+    (build-system meson-build-system)
+    (arguments
+     `(#:glib-or-gtk? #t
+       #:tests? #f ; no tests
+       #:configure-flags
+       (list (string-append "-Dnautilus-extension-dir="
+                            (assoc-ref %outputs "out")
+                            "/lib/nautilus/site-extensions"))))
+    (native-inputs
+     (list gettext-minimal pkg-config))
+    (inputs
+     (list acl attr glibmm-2.64 gtkmm-3 nautilus))
+    (home-page "https://rofi.roger-ferrer.org/eiciel")
+    (synopsis "Manage extended file attributes")
+    (description "Eiciel is a plugin for nautilus to graphically edit ACL and
+extended file attributes.  It also functions as a standalone command.")
+    (license license:gpl2+)))
+
 (define-public markets
   (package
     (name "markets")
-    (version "0.5.2")
+    (version "0.5.3")
     (source
       (origin
         (method git-fetch)
@@ -859,7 +1180,7 @@ variants.")
         (file-name (git-file-name name version))
         (sha256
          (base32
-          "0nk1bs7i6b7r90g5qwd3s2m462vk3kvza0drq7rzb5sdaiz9ccnz"))))
+          "0sfdmz7cp8i2bymippp8jyxsidxjn69v9cqm40q77j81kfm84bfv"))))
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
@@ -876,17 +1197,17 @@ variants.")
              (substitute* "build-aux/meson/postinstall.py"
                (("update-desktop-database") "true")))))))
     (inputs
-     `(("gtk3" ,gtk+)
-       ("gettext" ,gettext-minimal)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("libgee" ,libgee)
-       ("libhandy" ,libhandy)
-       ("libsoup" ,libsoup)
-       ("json-glib" ,json-glib)
-       ("vala" ,vala)))
+     (list gtk+
+           gettext-minimal
+           gsettings-desktop-schemas
+           libgee
+           libhandy
+           libsoup-minimal-2
+           json-glib
+           vala))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("glib" ,glib "bin"))) ; for 'glib-compile-resources'
+     (list pkg-config
+           `(,glib "bin"))) ; for 'glib-compile-resources'
     (home-page "https://github.com/bitstower/markets")
     (synopsis "Stock, currency and cryptocurrency tracker")
     (description
@@ -900,7 +1221,7 @@ track stocks, currencies and cryptocurrencies.")
     ;; Note to maintainer: VLS must be built with a Vala toolchain the same
     ;; version or newer. Therefore when you update this package you may need
     ;; to update Vala too.
-    (version "0.48.1")
+    (version "0.48.3")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -908,17 +1229,13 @@ track stocks, currencies and cryptocurrencies.")
                     (commit version)))
               (file-name (git-file-name name version))
               (sha256
-               (base32 "12k095052jkvbiyz8gzkj6w7r7p16d5m18fyikl48yvh5nln8fw0"))))
+               (base32 "1gnvc91gdp3wj9r3r3xxfr09f9lw39cfypn2q5f0443dhhmp059j"))))
     (build-system meson-build-system)
     (arguments '(#:glib-or-gtk? #t))
     (inputs
-     `(("glib" ,glib)
-       ("json-glib" ,json-glib)
-       ("jsonrpc-glib" ,jsonrpc-glib)
-       ("libgee" ,libgee)
-       ("vala" ,vala-0.50)))
+     (list glib json-glib jsonrpc-glib libgee vala))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/benwaffle/vala-language-server")
     (synopsis "Language server for Vala")
     (description "The Vala language server is an implementation of the Vala
@@ -956,40 +1273,38 @@ palette.")
    (license license:gpl3))))
 
 (define-public tiramisu
-  (let ((commit "8eb946dae0e2f98d3850d89e1bb535640e8c3266")
-        (revision "0"))
-    (package
-      (name "tiramisu")
-      (version (git-version "1.0" revision commit))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://github.com/Sweets/tiramisu")
-                      (commit commit)))
-                (sha256
-                 (base32
-                  "0wz2r8369d40vnxswknx0zxzbs03gzv0nc8al4g0ffg972p15j25"))
-                (file-name (git-file-name name version))))
-      (build-system gnu-build-system)
-      (arguments
-       `(#:phases
-         (modify-phases %standard-phases
-           (delete 'configure)
-           (delete 'check)
-           (replace 'install
-             (lambda* (#:key outputs #:allow-other-keys)
-               (let ((out (assoc-ref outputs "out")))
-                 (install-file "tiramisu" (string-append out "/bin"))
-                 #t))))
-         #:make-flags
-         (list (string-append "CC=" ,(cc-for-target)))))
-      (inputs
-       `(("glib" ,glib)))
-      (native-inputs
-       `(("pkg-config" ,pkg-config)))
-      (home-page "https://github.com/Sweets/tiramisu")
-      (synopsis "Desktop notifications, the UNIX way")
-      (description "tiramisu is a notification daemon based on dunst that
-outputs notifications to STDOUT in order to allow the user to process
-notifications any way they prefer.")
-      (license license:expat))))
+  (package
+    (name "tiramisu")
+    (version "2.0.20211107")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/Sweets/tiramisu")
+                    (commit version)))
+              (sha256
+               (base32
+                "1n1x1ybbwbanibw7b90k7v4cadagl41li17hz2l8s2sapacvq3mw"))
+              (file-name (git-file-name name version))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (delete 'check)
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (install-file "tiramisu" (string-append out "/bin"))
+               #t))))
+       #:make-flags
+       (list (string-append "CC=" ,(cc-for-target)))))
+    (inputs
+     (list glib))
+    (native-inputs
+     (list pkg-config vala))
+    (home-page "https://github.com/Sweets/tiramisu")
+    (synopsis "Desktop notifications, the UNIX way")
+    (description "tiramisu is a notification daemon based on dunst that outputs
+notifications to STDOUT in order to allow the user to process notifications any
+way they prefer.")
+    (license license:expat)))
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index a71e7f86dd..2fe1f4de39 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -27,19 +27,19 @@
 ;;; Copyright © 2017, 2018 nee <nee-git@hidamari.blue>
 ;;; Copyright © 2017 Chris Marusich <cmmarusich@gmail.com>
 ;;; Copyright © 2017 Mohammed Sadiq <sadiq@sadiqpk.org>
-;;; Copyright © 2017, 2020 Brendan Tildesley <mail@brendan.scot>
+;;; Copyright © 2017, 2020, 2021 Brendan Tildesley <mail@brendan.scot>
 ;;; Copyright © 2017, 2018 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2018 Jovany Leandro G.C <bit4bit@riseup.net>
 ;;; Copyright © 2018 Vasile Dumitrascu <va511e@yahoo.com>
 ;;; Copyright © 2018 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
 ;;; Copyright © 2018, 2019 Timothy Sample <samplet@ngyro.com>
 ;;; Copyright © 2019 Danny Milosavljevic <dannym@scratchpost.org>
-;;; Copyright © 2019, 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2019, 2020, 2022 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2019 Florian Pelz <pelzflorian@pelzflorian.de>
 ;;; Copyright © 2019 Giacomo Leidi <goodoldpaul@autistici.org>
 ;;; Copyright © 2019 Jelle Licht <jlicht@fsfe.org>
 ;;; Copyright © 2019 Jonathan Frederickson <jonathan@terracrypt.net>
-;;; Copyright © 2019, 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2019, 2020, 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2019, 2020 Martin Becze <mjbecze@riseup.net>
 ;;; Copyright © 2019 David Wilson <david@daviwil.com>
 ;;; Copyright © 2019, 2020 Raghav Gururajan <raghavgururajan@disroot.org>
@@ -48,7 +48,7 @@
 ;;; Copyright © 2020 Oleg Pykhalov <go.wigust@gmail.com>
 ;;; Copyright © 2020 Pierre Neidhardt <mail@ambrevar.xyz>
 ;;; Copyright © 2020 raingloom <raingloom@riseup.net>
-;;; Copyright © 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2020 Naga Malleswari <nagamalli@riseup.net>
 ;;; Copyright © 2020 Ryan Prior <rprior@protonmail.com>
 ;;; Copyright © 2020, 2021 Vinicius Monego <monego@posteo.net>
@@ -60,7 +60,15 @@
 ;;; Copyright © 2020, 2021 Sébastien Lerique <sl@eauchat.org>
 ;;; Copyright © 2021 Trevor Hass <thass@okstate.edu>
 ;;; Copyright © 2021 Solene Rapenne <solene@perso.pw>
+;;; Copyright © 2021, 2022 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
+;;; Copyright © 2021 Josselin Poiret <josselin.poiret@protonmail.ch>
 ;;; Copyright © 2021 Mathieu Othacehe <othacehe@gnu.org>
+;;; Copyright © 2022 Daniel Meißner <daniel.meissner-i4k@ruhr-uni-bochum.de>
+;;; Copyright © 2022 Pierre Langlois <pierre.langlois@gmx.com>
+;;; Copyright © 2022 John Kehayias <john.kehayias@protonmail.com>
+;;; Copyright © 2022 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -106,6 +114,7 @@
   #:use-module (gnu packages djvu)
   #:use-module (gnu packages dns)
   #:use-module (gnu packages docbook)
+  #:use-module (gnu packages docker)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages enchant)
   #:use-module (gnu packages flex)
@@ -136,6 +145,7 @@
   #:use-module (gnu packages inkscape)
   #:use-module (gnu packages iso-codes)
   #:use-module (gnu packages kerberos)
+  #:use-module (gnu packages language)
   #:use-module (gnu packages libcanberra)
   #:use-module (gnu packages libffi)
   #:use-module (gnu packages libunistring)
@@ -143,8 +153,11 @@
   #:use-module (gnu packages libusb)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages lirc)
+  #:use-module (gnu packages llvm)
   #:use-module (gnu packages lua)
   #:use-module (gnu packages mail)
+  #:use-module (gnu packages man)
+  #:use-module (gnu packages markup)
   #:use-module (gnu packages mp3)
   #:use-module (gnu packages multiprecision)
   #:use-module (gnu packages music)
@@ -162,7 +175,6 @@
   #:use-module (gnu packages pdf)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages photo)
-  #:use-module (gnu packages php)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages polkit)
   #:use-module (gnu packages popt)
@@ -170,7 +182,6 @@
   #:use-module (gnu packages protobuf)
   #:use-module (gnu packages pulseaudio)
   #:use-module (gnu packages python)
-  #:use-module (gnu packages python-compression)
   #:use-module (gnu packages python-crypto)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
@@ -249,6 +260,11 @@
                   (string-append (assoc-ref inputs "docbook-xml-4.1.2")
                                  "/xml/dtd/docbook/"))))
              #t))
+         (add-before 'check 'set-home
+           (lambda _
+             ;; A test using GIO expects ~/.config/glib-2.0/settings to be
+             ;; writable.
+             (setenv "HOME" (getcwd))))
          (add-after 'install 'move-doc
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -267,11 +283,7 @@
        ("gtk-doc" ,gtk-doc/stable)
        ("pkg-config" ,pkg-config)))
     (propagated-inputs
-     `(("glib" ,glib)
-       ("glib-networking" ,glib-networking)
-       ("gssdp" ,gssdp)
-       ("gupnp" ,gupnp)
-       ("libsoup" ,libsoup)))
+     (list glib glib-networking gssdp gupnp libsoup))
     (synopsis "UPnP IGD for GNOME")
     (description "GUPnP-IGD is a library to handle UPnP IGD port mapping.")
     (home-page "https://gitlab.gnome.org/GNOME/gupnp-igd")
@@ -280,7 +292,7 @@
 (define-public brasero
   (package
     (name "brasero")
-    (version "3.12.2")
+    (version "3.12.3")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnome/sources/brasero/"
@@ -288,7 +300,7 @@
                                  "brasero-" version ".tar.xz"))
              (sha256
               (base32
-               "0h90y674j26rvjahb8cc0w79zx477rb6zaqcj26wzvq8kmpic8k8"))))
+               "05gabybkl7xfinwx97i4scp9hic0dlxj7gh03dyj0hd16fp9wx47"))))
     (build-system glib-or-gtk-build-system)
     (arguments
      `(#:configure-flags (list
@@ -300,32 +312,33 @@
                                          "/lib/girepository-1.0"))
        #:phases
        (modify-phases %standard-phases
-         (add-before 'configure 'embed-growisofs
+         (add-before 'configure 'embed-growisofs-reference
            (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "plugins/growisofs/burn-growisofs.c"
-               (("\"growisofs") (string-append "\"" (which "growisofs"))))
-             #t)))))
+             (let ((dvd+rw-tools (assoc-ref inputs "dvd+rw-tools")))
+               (substitute* "plugins/growisofs/burn-growisofs.c"
+                 (("(\")(growisofs)" _ prefix command)
+                  (string-append prefix dvd+rw-tools "/bin/" command)))))))))
     (propagated-inputs
-     `(("hicolor-icon-theme" ,hicolor-icon-theme)))
-    (native-inputs
-     `(("intltool" ,intltool)
-       ("itstool" ,itstool)
-       ("glib" ,glib "bin")                       ; glib-compile-schemas, etc.
-       ("gobject-introspection" ,gobject-introspection)
-       ("pkg-config" ,pkg-config)))
-    (inputs
-     `(("dvd+rw-tools" ,dvd+rw-tools)
-       ("glib" ,glib)
-       ("gnome-doc-utils" ,gnome-doc-utils)
-       ("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base)
-       ("gtk+" ,gtk+)
-       ("libcanberra" ,libcanberra)
-       ("libice" ,libice)
-       ("libnotify" ,libnotify)
-       ("libsm" ,libsm)
-       ("libxml2" ,libxml2)
-       ("totem-pl-parser" ,totem-pl-parser)))
+     (list hicolor-icon-theme))
+    (native-inputs
+     (list intltool
+           itstool
+           `(,glib "bin") ; glib-compile-schemas, etc.
+           gobject-introspection
+           pkg-config))
+    (inputs
+     (list dvd+rw-tools
+           glib
+           gnome-doc-utils
+           gstreamer
+           gst-plugins-base
+           gtk+
+           libcanberra
+           libice
+           libnotify
+           libsm
+           libxml2
+           totem-pl-parser))
     (home-page "https://wiki.gnome.org/Apps/Brasero")
     (synopsis "CD/DVD burning tool for Gnome")
     (description "Brasero is an application to burn CD/DVD for the Gnome
@@ -333,46 +346,32 @@ Desktop.  It is designed to be as simple as possible and has some unique
 features to enable users to create their discs easily and quickly.")
     (license license:gpl2+)))
 
-(define-public libcloudproviders
+;;; Minimal variant, used to break a cycle with Inkscape.
+(define-public libcloudproviders-minimal
   (package
-    (name "libcloudproviders")
+    (name "libcloudproviders-minimal")
     (version "0.3.1")
     (source
      (origin
        (method url-fetch)
        (uri
-        (string-append "mirror://gnome/sources/" name "/"
-                       (version-major+minor version) "/"
-                       name "-" version ".tar.xz"))
+        (string-append "mirror://gnome/sources/libcloudproviders/"
+                       (version-major+minor version)
+                       "/libcloudproviders-" version ".tar.xz"))
        (sha256
         (base32 "0aars24myf6n8b8hm1n12hsgcm54097kpbpm4ba31zp1l4y22qs7"))))
     (build-system meson-build-system)
-    (outputs '("out" "doc"))
     (arguments
-     `(#:glib-or-gtk? #t     ; To wrap binaries and/or compile schemas
-       #:configure-flags
-       (list
-        "-Denable-gtk-doc=true")
-       #: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"))
-               (rename-file
-                (string-append out "/share/gtk-doc")
-                (string-append doc "/share/gtk-doc"))
-               #t))))))
+     `(#:glib-or-gtk? #t             ; To wrap binaries and/or compile schemas
+       #:configure-flags (list "-Dintrospection=false"
+                               "-Denable-gtk-doc=false"
+                               "-Dvapigen=false")))
     (native-inputs
      `(("glib:bin" ,glib "bin")
-       ("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc/stable)
        ("pkg-config" ,pkg-config)
        ("vala" ,vala)))
     (inputs
-     `(("glib" ,glib)
-       ("glib-networking" ,glib-networking)))
+     (list glib glib-networking))
     (synopsis "Cloudproviders Integration API")
     (description "Libcloudproviders is a DBus API that allows cloud storage sync
 clients to expose their services.  Clients such as file managers and desktop
@@ -381,6 +380,31 @@ services.")
     (home-page "https://csorianognome.wordpress.com/2015/07/07/cloud-providers/")
     (license license:lgpl3+)))
 
+(define-public libcloudproviders
+  (package/inherit libcloudproviders-minimal
+    (name "libcloudproviders")
+    (version "0.3.1")
+    (outputs (cons "doc" (package-outputs libcloudproviders-minimal)))
+    (arguments
+     (substitute-keyword-arguments (package-arguments libcloudproviders-minimal)
+       ((#:configure-flags _)
+        '(list "-Denable-gtk-doc=true")) ;false by default
+       ((#:phases phases '%standard-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"))
+                 (rename-file
+                  (string-append out "/share/gtk-doc")
+                  (string-append doc "/share/gtk-doc")))))))))
+    (native-inputs
+     (append
+         `(("gobject-introspection" ,gobject-introspection)
+           ("gtk-doc" ,gtk-doc/stable))
+         (package-native-inputs libcloudproviders-minimal)))))
+
 (define-public libgrss
   (package
     (name "libgrss")
@@ -416,14 +440,10 @@ services.")
                                  "/xml/dtd/docbook/"))))
              #t)))))
     (native-inputs
-     `(("docbook-xml" ,docbook-xml-4.1.2)
-       ("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc/stable)
-       ("pkg-config" ,pkg-config)))
+     (list docbook-xml-4.1.2 gobject-introspection gtk-doc/stable
+           pkg-config))
     (propagated-inputs
-     `(("glib" ,glib)
-       ("libsoup" ,libsoup)
-       ("libxml2" ,libxml2)))
+     (list glib libsoup libxml2))
     (synopsis "Glib library for feeds")
     (description "LibGRSS is a Glib abstraction to handle feeds in RSS, Atom,
 and other formats.")
@@ -577,23 +597,20 @@ in JavaScript.")
                                  "/xml/dtd/docbook/"))))
              #t)))))
     (native-inputs
-     `(("check" ,check)
-       ("docbook-xml" ,docbook-xml-4.3)
-       ("gobject-introspection" ,gobject-introspection)
-       ("pedansee" ,pedansee)
-       ("pkg-config" ,pkg-config)
-       ("vala" ,vala)))
+     (list check
+           docbook-xml-4.3
+           gobject-introspection
+           pedansee
+           pkg-config
+           vala))
     (inputs
      `(("avahi" ,avahi)
-       ("gdk-pixbuf" ,gdk-pixbuf+svg)
+       ("librsvg" ,librsvg)
        ("gee" ,libgee)
        ("gst-plugins-base" ,gst-plugins-base)
        ("gtk+" ,gtk+)))
     (propagated-inputs
-     `(("glib" ,glib)
-       ("glib-networking" ,glib-networking)
-       ("gstreamer" ,gstreamer)
-       ("libsoup" ,libsoup)))
+     (list glib glib-networking gstreamer libsoup-minimal-2))
     (synopsis "Media management library")
     (description "Libdmapsharing is a library which allows programs to access,
 share and control the playback of media content using DMAP (DAAP, DPAP & DACP).
@@ -624,11 +641,9 @@ It is written in C using GObject and libsoup.")
                        (assoc-ref %outputs "doc")
                        "/share/gtk-doc/html"))))
     (native-inputs
-     `(("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc/stable)
-       ("pkg-config" ,pkg-config)))
+     (list gobject-introspection gtk-doc/stable pkg-config))
     (propagated-inputs
-     `(("glib" ,glib)))
+     (list glib))
     (synopsis "GLib Testing Framework")
     (description "GTX is a small collection of convenience functions intended to
 enhance the GLib testing framework.  With specific emphasis on easing the pain
@@ -705,7 +720,7 @@ of writing test cases for asynchronous interactions.")
     (inputs
      `(("icu" ,icu4c)))
     (propagated-inputs
-     `(("glib" ,glib)))
+     (list glib))
     (synopsis "Model to synchronize multiple instances over DBus")
     (description "Dee is a library that uses DBus to provide objects allowing
 you to create Model-View-Controller type programs across DBus.  It also consists
@@ -786,7 +801,7 @@ of known objects without needing a central registrar.")
        ("python-rdflib" ,python-rdflib)
        ("xapian-config" ,xapian)))
     (propagated-inputs
-     `(("glib" ,glib)))
+     (list glib))
     (synopsis "Desktop Activity Logging")
     (description "Zeitgeist is a service which logs the users’s activities and
 events, anywhere from files opened to websites visited and conversations.  It
@@ -815,44 +830,42 @@ patterns.")
                 "1h049mzqnlcfqwrhmzbq3pzzdglvy2bn9fj1p8wql7a60pn8sr32"))))
     (build-system meson-build-system)
     (arguments
-     `(#:glib-or-gtk? #t
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'skip-gtk-update-icon-cache
-           (lambda _
-             (substitute* "meson_post_install.py"
-               (("gtk-update-icon-cache") (which "true")))
-             #t))
-         (add-after 'unpack 'unpack-libgd
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let ((libgd (assoc-ref inputs "libgd")))
-               (copy-recursively libgd "subprojects/libgd")
-               #t))))))
-    (inputs
-     `(("glib" ,glib)
-       ("gnome-autoar" ,gnome-autoar)
-       ("gnome-online-accounts:lib" ,gnome-online-accounts "lib")
-       ("gspell" ,gspell)
-       ("gtk+" ,gtk+)
-       ("json-glib" ,json-glib)
-       ("libcanberra" ,libcanberra)
-       ("libsoup" ,libsoup)
-       ("rest" ,rest)))
-    (native-inputs
-     `(("desktop-file-utils" ,desktop-file-utils) ; for update-desktop-database
-       ("gettext" ,gettext-minimal)
-       ("glib:bin" ,glib "bin")
-       ("itstool" ,itstool)
-       ("libgd"
-        ,(origin
-           (method git-fetch)
-           (uri (git-reference
-                 (url "https://gitlab.gnome.org/GNOME/libgd")
-                 (commit "c7c7ff4e05d3fe82854219091cf116cce6b19de0")))
-           (file-name (git-file-name "libgd" version))
-           (sha256
-            (base32 "16yld0ap7qj1n96h4f2sqkjmibg7xx5xwkqxdfzam2nmyfdlrrrs"))))
-       ("pkg-config" ,pkg-config)))
+     (list
+      #:glib-or-gtk? #t
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'skip-gtk-update-icon-cache
+            (lambda _
+              (substitute* "meson_post_install.py"
+                (("gtk-update-icon-cache") (which "true")))))
+          (add-after 'unpack 'unpack-libgd
+            (lambda _
+              (copy-recursively
+               #$(origin
+                   (method git-fetch)
+                   (uri (git-reference
+                         (url "https://gitlab.gnome.org/GNOME/libgd")
+                         (commit "c7c7ff4e05d3fe82854219091cf116cce6b19de0")))
+                   (file-name (git-file-name "libgd" version))
+                   (sha256
+                    (base32
+                     "16yld0ap7qj1n96h4f2sqkjmibg7xx5xwkqxdfzam2nmyfdlrrrs")))
+               "subprojects/libgd"))))))
+    (inputs (list glib
+                  gnome-autoar
+                  `(,gnome-online-accounts "lib")
+                  gspell
+                  gtk+
+                  json-glib
+                  libcanberra
+                  libsoup
+                  rest))
+    (native-inputs (list desktop-file-utils ;for update-desktop-database
+                         gettext-minimal
+                         `(,glib "bin")
+                         itstool
+                         pkg-config
+                         python))
     (home-page "https://wiki.gnome.org/Apps/Recipes")
     (synopsis "Discover recipes for preparing food")
     (description "GNOME Recipes helps you discover what to cook today,
@@ -862,17 +875,17 @@ tomorrow, the rest of the week and for special occasions.")
 (define-public gnome-photos
   (package
     (name "gnome-photos")
-    (version "3.34.2")
+    (version "40.0")
     (source
      (origin
        (method url-fetch)
        (uri
         (string-append "mirror://gnome/sources/" name "/"
-                       (version-major+minor version) "/"
+                       (version-major version) "/"
                        name "-" version ".tar.xz"))
        (sha256
         (base32
-         "06ml5sf8xhpan410msqz085hmfc7082d368pb82yq646y9pcfn9w"))))
+         "1bzi79plw6ji6qlckhxnwfnswy6jpnhzmmyanml2i2xg73hp6bg0"))))
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
@@ -888,8 +901,8 @@ tomorrow, the rest of the week and for special occasions.")
              (let*
                  ((out (assoc-ref outputs "out")))
                (wrap-program (string-append out "/bin/gnome-photos")
-                 `("GRL_PLUGIN_PATH" = (,(getenv "GRL_PLUGIN_PATH")))))
-             #t)))))
+                 `("GRL_PLUGIN_PATH" =
+                   (,(getenv "GRL_PLUGIN_PATH"))))))))))
     (native-inputs
      `(("dbus" ,dbus)
        ("desktop-file-utils" ,desktop-file-utils)
@@ -904,7 +917,7 @@ tomorrow, the rest of the week and for special occasions.")
     (inputs
      `(("babl" ,babl)
        ("cairo" ,cairo)
-       ("gdk-pixbuf" ,gdk-pixbuf+svg)
+       ("librsvg" ,librsvg)
        ("gegl" ,gegl)
        ("geocode-glib" ,geocode-glib)
        ("gexiv2" ,gexiv2)
@@ -916,6 +929,7 @@ tomorrow, the rest of the week and for special occasions.")
        ("libdazzle" ,libdazzle)
        ("libgdata" ,libgdata)
        ("libgfbgraph" ,gfbgraph)
+       ("libhandy" ,libhandy)
        ("libjpeg" ,libjpeg-turbo)
        ("libpng" ,libpng)
        ("librest" ,rest)
@@ -932,17 +946,17 @@ cloud integration is offered through GNOME Online Accounts.")
 (define-public gnome-music
   (package
     (name "gnome-music")
-    (version "3.34.5")
+    (version "40.1.1")
     (source
      (origin
        (method url-fetch)
        (uri
         (string-append "mirror://gnome/sources/" name "/"
-                       (version-major+minor version) "/"
+                       (version-major version) "/"
                        name "-" version ".tar.xz"))
        (sha256
         (base32
-         "1r5sfw5cbd6qqh27lzhblazir0bfi3k7nqppw66qw990isqm5psy"))))
+         "0lcdal4qdhclr8961p57xf010y92l6wwmkw86lyi9wy224z6gjr0"))))
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
@@ -957,11 +971,14 @@ cloud integration is offered through GNOME Online Accounts.")
                                           (package-version python))
                                         "/site-packages")))
                (wrap-program (string-append out "/bin/gnome-music")
-                 `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH")))
-                 `("GST_PLUGIN_SYSTEM_PATH" = (,(getenv "GST_PLUGIN_SYSTEM_PATH")))
-                 `("GRL_PLUGIN_PATH" = (,(getenv "GRL_PLUGIN_PATH")))
-                 `("PYTHONPATH" = (,(getenv "PYTHONPATH") ,pylib))))
-             #t)))))
+                 `("GI_TYPELIB_PATH" =
+                   (,(getenv "GI_TYPELIB_PATH")))
+                 `("GST_PLUGIN_SYSTEM_PATH" =
+                   (,(getenv "GST_PLUGIN_SYSTEM_PATH")))
+                 `("GRL_PLUGIN_PATH" =
+                   (,(getenv "GRL_PLUGIN_PATH")))
+                 `("GUIX_PYTHONPATH" =
+                   (,(getenv "GUIX_PYTHONPATH") ,pylib)))))))))
     (native-inputs
      `(("desktop-file-utils" ,desktop-file-utils)
        ("gettext" ,gettext-minimal)
@@ -975,13 +992,16 @@ cloud integration is offered through GNOME Online Accounts.")
        ("grilo" ,grilo)
        ("grilo-plugins" ,grilo-plugins)
        ("gst-plugins-base" ,gst-plugins-base)
+       ("gst-plugins-good" ,gst-plugins-good)
        ("gstreamer" ,gstreamer)
        ("gvfs" ,gvfs)
+       ("json-glib" ,json-glib)
        ("libdazzle" ,libdazzle)
        ("libmediaart" ,libmediaart)
-       ("libsoup" ,libsoup)
+       ("libsoup" ,libsoup-minimal-2)
        ("pycairo" ,python-pycairo)
        ("pygobject" ,python-pygobject)
+       ("python" ,python)
        ("tracker" ,tracker)
        ("tracker-miners" ,tracker-miners)))
     (synopsis "Simple music player for GNOME desktop")
@@ -1019,7 +1039,7 @@ between different kinds of computer systems.")
 (define-public tepl
   (package
     (name "tepl")
-    (version "4.4.0")
+    (version "6.00.0")
     (source
      (origin
        (method url-fetch)
@@ -1029,26 +1049,42 @@ between different kinds of computer systems.")
                        name "-" version ".tar.xz"))
        (sha256
         (base32
-         "0mm2z849hnni7597an05mrv0dckrxjngpf2xfa0g5s17i8x6gxp6"))))
-    (build-system glib-or-gtk-build-system)
+         "0qvs7s86gqyyrzi0r5fbrj8zczlgv8xhdjswgbgc1afwjnl9fqx8"))))
+    (build-system meson-build-system)
     (arguments
-     `(#:tests? #f))                    ; FIX-ME: Requires gvfs
+     `(#:glib-or-gtk? #t
+       #:tests? #f))                    ; FIX-ME: Requires gvfs
     (native-inputs
-     `(("gobject-introspection" ,gobject-introspection)
-       ("pkg-config" ,pkg-config)))
+     (list `(,glib "bin") gobject-introspection pkg-config))
     (inputs
-     `(("amtk" ,amtk)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("gtksourceview" ,gtksourceview)
-       ("libxml2" ,libxml2)
-       ("uchardet" ,uchardet)))
+     (list amtk
+           glib
+           gtk+
+           gtksourceview
+           libxml2
+           uchardet))
     (synopsis "Text editor product line")
     (description "Tepl is a library that eases the development of
 GtkSourceView-based text editors and IDEs.")
     (home-page "https://wiki.gnome.org/Projects/Tepl")
     (license license:lgpl2.1+)))
 
+(define-public tepl-5
+  (package
+    (inherit tepl)
+    (name "tepl")
+    (version "5.0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri
+        (string-append "mirror://gnome/sources/" name "/"
+                       (version-major+minor version) "/"
+                       name "-" version ".tar.xz"))
+       (sha256
+        (base32
+         "0118j64s4fb350phbgda2rk6sv19rfgglxc7nf248llzc1klj9xi"))))))
+
 (define-public krb5-auth-dialog
   (package
     (name "krb5-auth-dialog")
@@ -1065,17 +1101,9 @@ GtkSourceView-based text editors and IDEs.")
          "1w91gsvmifqhiam3xqf88i5rk2w6qadjalmbvvamjdc37j0vdc6x"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("itstool" ,itstool)
-       ("libxml2" ,libxml2)
-       ("pkg-config" ,pkg-config)
-       ("python-wrapper" ,python-wrapper)))
+     (list intltool itstool libxml2 pkg-config python-wrapper))
     (inputs
-     `(("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("libnotify" ,libnotify)
-       ("mit-krb5" ,mit-krb5)
-       ("network-manager" ,network-manager)))
+     (list glib gtk+ libnotify mit-krb5 network-manager))
     (synopsis "Popup dialogs for Kerberos 5")
     (description "krb5-auth-dialog is a simple dialog that monitors Kerberos
 tickets, and pops up a dialog when they are about to expire.")
@@ -1098,12 +1126,9 @@ tickets, and pops up a dialog when they are about to expire.")
          "1rgchqi4j2ll7d6a7lgy7id0w9rrkwkgic1096fbm2zx6n7pc4yx"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("x11" ,libx11)))
+     (list glib gtk+ libx11))
     (synopsis "Notification Daemon for GNOME Desktop")
     (description "Notification-Daemon is the server implementation of the
 freedesktop.org desktop notification specification.")
@@ -1124,28 +1149,22 @@ freedesktop.org desktop notification specification.")
                 "1x8yvjy0yg17qyhmqws8xh2k8dvzrhpwqz7j1cfwzalrb1i9c5g8"))))
     (build-system meson-build-system)
     (arguments
-     `(#:meson ,meson-0.55
-       #:phases
+     `(#:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'patch
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "util/mm-common-prepare.in"
-              (("ln") (string-append (assoc-ref inputs "coreutils")
-                                     "/bin/ln"))
-              (("cp") (string-append (assoc-ref inputs "coreutils")
-                                     "/bin/cp"))
-              (("sed") (string-append (assoc-ref inputs "sed")
-                                      "/bin/sed"))
-              (("cat") (string-append (assoc-ref inputs "coreutils")
-                                      "/bin/cat")))
-             #t)))))
+               (("ln") (search-input-file inputs "/bin/ln"))
+               (("cp") (search-input-file inputs "/bin/cp"))
+               (("sed") (search-input-file inputs "/bin/sed"))
+               (("cat") (search-input-file inputs "/bin/cat"))))))))
     (native-inputs
      `(("coreutils" ,coreutils)
        ("gettext" ,gettext-minimal)
        ("pkg-config" ,pkg-config)
        ("sed" ,sed)))
     (inputs
-     `(("python" ,python)))
+     (list python))
     (synopsis "Module of GNOME C++ bindings")
     (description "The mm-common module provides the build infrastructure
 and utilities shared among the GNOME C++ binding libraries.  Release
@@ -1191,9 +1210,7 @@ Library reference documentation.")
       ("gtk-doc" ,gtk-doc/stable)
       ("pkg-config" ,pkg-config)))
    (inputs
-    `(("avahi" ,avahi)
-      ("libgudev" ,libgudev)
-      ("libsoup" ,libsoup)))
+    (list avahi libgudev libsoup))
    (synopsis "WebDav server implementation using libsoup")
    (description "PhoDav was initially developed as a file-sharing mechanism for Spice,
 but it is generic enough to be reused in other projects,
@@ -1204,7 +1221,7 @@ in particular in the GNOME desktop.")
 (define-public gnome-color-manager
   (package
    (name "gnome-color-manager")
-   (version "3.32.0")
+   (version "3.36.0")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnome/sources/" name "/"
@@ -1212,7 +1229,7 @@ in particular in the GNOME desktop.")
                                 name "-" version ".tar.xz"))
             (sha256
              (base32
-              "1vpxa2zjz3lkq9ldjg0fl65db9s6b4kcs8nyaqfz3jygma7ifg3w"))))
+              "0fxdng74d8hwhfx1nwl1i4jx9h9f6c2hkyc12f01kqbjcimrxnwx"))))
    (build-system meson-build-system)
    (arguments
     `(#:glib-or-gtk? #t
@@ -1234,19 +1251,19 @@ in particular in the GNOME desktop.")
       ("pkg-config" ,pkg-config)
       ("xorg-server" ,xorg-server-for-tests)))
    (inputs
-    `(("adwaita-icon-theme" ,adwaita-icon-theme)
-      ("appstream-glib" ,appstream-glib)
-      ("colord-gtk" ,colord-gtk)
-      ("exiv2" ,exiv2)
-      ("gnome-desktop" ,gnome-desktop)
-      ("libcanberra" ,libcanberra)
-      ("libexif" ,libexif)
-      ("libtiff" ,libtiff)
-      ("libxrandr" ,libxrandr)
-      ("libxtst" ,libxtst)
-      ("libxxf86vm" ,libxxf86vm)
-      ("vte" ,vte)
-      ("xorgproto" ,xorgproto)))
+    (list adwaita-icon-theme
+          appstream-glib
+          colord-gtk
+          exiv2
+          gnome-desktop
+          libcanberra
+          libexif
+          libtiff
+          libxrandr
+          libxtst
+          libxxf86vm
+          vte
+          xorgproto))
    (synopsis "Color profile manager for the GNOME desktop")
    (description "GNOME Color Manager is a session framework that makes
 it easy to manage, install and generate color profiles
@@ -1265,13 +1282,30 @@ in the GNOME desktop.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1n2jz9i8a42zwxx5h8j2gdy6q1vyydh4vl00r0al7w8jzdh24p44"))))
+                "1n2jz9i8a42zwxx5h8j2gdy6q1vyydh4vl00r0al7w8jzdh24p44"))
+              (patches
+               (search-patches
+                "gnome-online-miners-tracker-3.patch"))))
     (build-system glib-or-gtk-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-configure
+           (lambda _
+             (substitute* "configure.ac"
+               (("AX_CHECK_ENABLE_DEBUG.*")
+                ""))))
+         (add-after 'fix-configure 'autoreconf
+           (lambda _
+             (invoke "autoreconf" "-vif"))))))
     (native-inputs
-     `(("gettext" ,gettext-minimal)
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("gettext" ,gettext-minimal)
        ("glib:bin" ,glib "bin")
        ("gobject-introspection" ,gobject-introspection)
        ("gtk+:bin" ,gtk+ "bin")
+       ("libtool" ,libtool)
        ("pkg-config" ,pkg-config)))
     (inputs
      `(("gnome-online-accounts" ,gnome-online-accounts)
@@ -1310,8 +1344,10 @@ It has miners for Facebook, Flickr, Google, ownCloud and SkyDrive.")
       ("pkg-config" ,pkg-config)
       ("vala" ,vala)))
    (inputs
-    `(("gtk+" ,gtk+)
-      ("libsoup" ,libsoup)))
+    (list gtk+))
+   (propagated-inputs
+    ;; The .pc file "Requires" libsoup-2.4.
+    `(("libsoup" ,libsoup-minimal-2)))
    (synopsis "GObject-based API over @acronym{SSDP, Simple Service Discovery
 Protocol} for GNOME")
    (description "This package provides a library to handle resource discovery
@@ -1333,6 +1369,13 @@ a debugging tool, @command{gssdp-device-sniffer}.")
              (base32
               "1ld7mrpdv9cszmfzh7i19qx4li25j3fr7x1jp38l8phzlmz3187p"))))
    (build-system meson-build-system)
+   (arguments
+    `(#:phases
+      (modify-phases %standard-phases
+        (add-before 'check 'pre-check
+          (lambda _
+            ;; Tests require a writable HOME.
+            (setenv "HOME" (getcwd)))))))
    (native-inputs
     `(("gettext" ,gettext-minimal)
       ("glib:bin" ,glib "bin")
@@ -1341,12 +1384,10 @@ a debugging tool, @command{gssdp-device-sniffer}.")
       ("pkg-config" ,pkg-config)
       ("vala" ,vala)))
    (inputs
-    `(("gssdp" ,gssdp)
-      ("gtk+" ,gtk+)
-      ("libsoup" ,libsoup)))
+    (list gssdp gtk+ libsoup))
    (propagated-inputs
-    `(;; For ‘org.gnome.system.proxy’.
-      ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)))
+    (list ;; For ‘org.gnome.system.proxy’.
+          gsettings-desktop-schemas))
    (synopsis "PnP API for GNOME")
    (description "This package provides GUPnP, an object-oriented framework
 for creating UPnP devices and control points, written in C using
@@ -1368,19 +1409,17 @@ for creating UPnP devices and control points, written in C using
               "0spzd2saax7w776p5laixdam6d7smyynr9qszhbmq7f14y13cghj"))))
    (build-system gnu-build-system)
    (native-inputs
-    `(("gettext" ,gettext-minimal)
-      ("glib:bin" ,glib "bin")
-      ("gobject-introspection" ,gobject-introspection)
-      ("gtk-doc" ,gtk-doc/stable)
-      ("libxml" ,libxml2)
-      ("pkg-config" ,pkg-config)
-      ("vala" ,vala)))
+    (list gettext-minimal
+          `(,glib "bin")
+          gobject-introspection
+          gtk-doc/stable
+          libxml2
+          pkg-config
+          vala))
    (inputs
-    `(("gstreamer" ,gstreamer)
-      ("gupnp" ,gupnp)))
+    (list gstreamer gupnp))
    (propagated-inputs
-    `(("gst-plugins-base" ,gst-plugins-base)
-      ("gst-plugins-good" ,gst-plugins-good)))
+    (list gst-plugins-base gst-plugins-good))
    (synopsis "GUPnP DLNA for GNOME")
    (description "This package provides a small utility library to
 support DLNA-related tasks such as media profile guessing, transcoding to a
@@ -1402,15 +1441,15 @@ given profile, etc.  DLNA is a subset of UPnP A/V.")
               "1p3grslwqm9bc8rmpn4l48d7v9s84nina4r9xbd932dbj8acz7b8"))))
    (build-system gnu-build-system)
    (native-inputs
-    `(("gettext" ,gettext-minimal)
-      ("glib:bin" ,glib "bin")
-      ("gobject-introspection" ,gobject-introspection)
-      ("gtk-doc" ,gtk-doc/stable)
-      ("libxml" ,libxml2)
-      ("pkg-config" ,pkg-config)))
+    (list gettext-minimal
+          `(,glib "bin")
+          gobject-introspection
+          gtk-doc/stable
+          libxml2
+          pkg-config
+          vala))
    (inputs
-    `(("gtk+" ,gtk+)
-      ("gupnp" ,gupnp)))
+    (list gtk+ gupnp))
    (synopsis "GUPnP A/V for GNOME")
    (description "This package provides a small library for handling
 and implementation of UPnP A/V profiles.")
@@ -1430,17 +1469,11 @@ and implementation of UPnP A/V profiles.")
                (base32
                 "1mlw1qgj8nkd9ll6b6h54r1gfdy3zp8a8xqz7qfyfaj85jjgbph7"))))
     (build-system meson-build-system)
-    (arguments
-     `(#:meson ,meson-next))
     (native-inputs
-     `(("glib:bin" ,glib "bin")
-       ("pkg-config" ,pkg-config)))
+     (list `(,glib "bin") pkg-config))
     (inputs
-     `(("gdk-pixbuf" ,gdk-pixbuf)
-       ("gettext" ,gettext-minimal)
-       ("gobject-introspection" ,gobject-introspection)
-       ("gtk+:doc" ,gtk+ "doc")
-       ("vala" ,vala)))
+     (list gdk-pixbuf gettext-minimal gobject-introspection
+           `(,gtk+ "doc") vala))
     (synopsis "Media art library for the GNOME desktop")
     (description
      "The libmediaart library is the foundation for media art caching,
@@ -1451,18 +1484,18 @@ extraction, and lookup for applications on the desktop.")
 (define-public gnome-initial-setup
   (package
    (name "gnome-initial-setup")
-   (version "3.32.1")
+   (version "40.4")
    (source (origin
             (method url-fetch)
            (uri (string-append "mirror://gnome/sources/gnome-initial-setup/"
-                                (version-major+minor version)
+                                (version-major version)
                                 "/gnome-initial-setup-" version ".tar.xz"))
             (sha256
              (base32
-              "1gwhp7dalyc8zsb2pa66cmpdrj2d6drbq5p331sq6zp8ds10k9ry"))))
+              "06q3p4f8g9zr7a4mw3qr556mi0dg9qzrj8n46ybdz93fxs26aaj1"))))
    (build-system meson-build-system)
    (arguments
-    '(#:configure-flags '(;; Enable camera support for user selfie.
+    `(#:configure-flags '(;; Enable camera support for user selfie.
                           "-Dcheese=auto"
                           "-Dsystemd=false")
       #:phases (modify-phases %standard-phases
@@ -1485,10 +1518,10 @@ extraction, and lookup for applications on the desktop.")
    (inputs
     `(("accountsservice" ,accountsservice)
       ;("adwaita-icon-theme" ,adwaita-icon-theme)
+      ("elogind" ,elogind)
       ("gdm" ,gdm)
       ("geoclue" ,geoclue)
       ("gnome-desktop" ,gnome-desktop)
-      ("gnome-getting-started-docs" ,gnome-getting-started-docs)
       ("gnome-online-accounts" ,gnome-online-accounts)
       ("gnome-online-accounts:lib" ,gnome-online-accounts "lib")
       ("gstreamer" ,gstreamer)
@@ -1504,7 +1537,7 @@ extraction, and lookup for applications on the desktop.")
       ("pwquality" ,libpwquality)
       ("rest" ,rest)
       ("upower" ,upower)
-      ("webkitgtk" ,webkitgtk)
+      ("webkitgtk" ,webkitgtk-with-libsoup2)
       ("libgnomekbd" ,libgnomekbd)))
    (synopsis "Initial setup wizard for GNOME desktop")
    (description "This package provides a set-up wizard when a
@@ -1516,7 +1549,7 @@ tour of all gnome components and allows the user to set them up.")
 (define-public gnome-user-share
   (package
    (name "gnome-user-share")
-   (version "3.33.1")
+   (version "3.34.0")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnome/sources/" name "/"
@@ -1524,12 +1557,12 @@ tour of all gnome components and allows the user to set them up.")
                                 name "-" version ".tar.xz"))
             (sha256
              (base32
-              "0lf790pyamdyj7180ils8vizjl8brxcg7jsm1iavfp9ay4wa8mz7"))))
+              "04r9ck9v4i0d31grbli1d4slw2d6dcsfkpaybkwbzi7wnj72l30x"))))
    (build-system meson-build-system)
    (arguments
     `(#:glib-or-gtk? #t
       #:configure-flags
-       `("-Dsystemd=false"
+       `("-Dsystemduserunitdir=/tmp/empty"
          ;; Enable nautilus extension for file sharing.
          "-Dnautilus_extension=true")))
    (native-inputs
@@ -1540,12 +1573,12 @@ tour of all gnome components and allows the user to set them up.")
       ("pkg-config" ,pkg-config)
       ("yelp-tools" ,yelp-tools)))
    (inputs
-    `(("glib" ,glib)
-      ("gnome-bluetooth" ,gnome-bluetooth)
-      ("gtk+" ,gtk+)
-      ("libcanberra" ,libcanberra)
-      ("libnotify" ,libnotify)
-      ("nautilus" ,nautilus)))      ; For nautilus extension.
+    (list glib
+          gnome-bluetooth
+          gtk+
+          libcanberra
+          libnotify
+          nautilus))      ; For nautilus extension.
    (synopsis "File sharing for GNOME desktop")
    (description "GNOME User Share is a small package that binds together
 various free software projects to bring easy to use user-level file
@@ -1556,7 +1589,7 @@ sharing to the masses.")
 (define-public sushi
   (package
     (name "sushi")
-    (version "3.32.1")
+    (version "3.38.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
@@ -1564,7 +1597,7 @@ sharing to the masses.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "02idvqjk76lii9xyg3b1yz4rw721709bdm5j8ikjym6amcghl0aj"))))
+                "1sc8i0vrw6bn43rklnwp2fl1gq0r0xfd3bszcqxd0a2mh46d3rpk"))))
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
@@ -1574,11 +1607,11 @@ sharing to the masses.")
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((prog (string-append (assoc-ref outputs "out")
                                         "/bin/sushi")))
-               ;; Put existing typelibs before sushi's deps, so as to correctly
-               ;; infer gdk-pixbuf
+               ;; Put existing typelibs before sushi's deps, so as to
+               ;; correctly infer gdk-pixbuf.
                (wrap-program prog
-                 `("GI_TYPELIB_PATH" suffix (,(getenv "GI_TYPELIB_PATH"))))
-               #t))))))
+                 `("GI_TYPELIB_PATH" suffix
+                   (,(getenv "GI_TYPELIB_PATH"))))))))))
     (native-inputs
      `(("glib:bin" ,glib "bin")
        ("gettext" ,gettext-minimal)
@@ -1594,23 +1627,23 @@ sharing to the masses.")
        ("gjs" ,gjs)
        ("gst-plugins-base" ,gst-plugins-base)
        ("gstreamer" ,gstreamer)
-       ("gtksourceview" ,gtksourceview-3)
+       ("gtksourceview" ,gtksourceview)
        ("harfbuzz" ,harfbuzz)
        ("libepoxy" ,libepoxy)
        ("libmusicbrainz" ,libmusicbrainz)
        ("libxml2" ,libxml2)
        ("neon" ,neon)
-       ("webkitgtk" ,webkitgtk)))
+       ("webkitgtk" ,webkitgtk-with-libsoup2)))
     (synopsis "File previewer for the GNOME desktop")
-    (description "Sushi is a DBus-activated service that allows applications to
-preview files on the GNOME desktop.")
+    (description "Sushi is a DBus-activated service that allows applications
+to preview files on the GNOME desktop.")
     (home-page "https://gitlab.gnome.org/GNOME/sushi")
     (license license:gpl2+)))
 
 (define-public rygel
   (package
     (name "rygel")
-    (version "0.38.3")
+    (version "0.40.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
@@ -1618,29 +1651,41 @@ preview files on the GNOME desktop.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "003xficqb08r1dgid20i7cn889lbfwrglpx78rjd5nkvgxbimhh8"))))
-    (build-system gnu-build-system)
-    (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc/stable)
-       ("pkg-config" ,pkg-config)
-       ("vala" ,vala)))
-    (inputs
-     `(("gdk-pixbuf" ,gdk-pixbuf)
-       ("gssdp" ,gssdp)
-       ("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base)
-       ("gtk+" ,gtk+)
-       ("gupnp" ,gupnp)
-       ("gupnp-av" ,gupnp-av)
-       ("gupnp-dlna" ,gupnp-dlna)
-       ("libgee" ,libgee)
-       ("libmediaart" ,libmediaart)
-       ("libsoup" ,libsoup)
-       ("libxslt" ,libxslt)
-       ("libunistring" ,libunistring)
-       ("tracker" ,tracker)))
+                "0bd3d2swa8lq47b9r04x8xwdr9nhjnrwqi6scygd134wb5vxfh22"))))
+    (build-system meson-build-system)
+    (arguments
+     ;; Disable the tracker plugin.
+     '(#:configure-flags
+       (list "-Dplugins=external,gst-launch,lms,media-export,
+mpris,playbin,ruih,tracker3")))
+    (native-inputs
+     (list gettext-minimal
+           `(,glib "bin")               ; for glib-compile-schemas, etc.
+           gobject-introspection
+           gtk-doc/stable
+           pkg-config
+           python
+           vala
+           docbook-xml
+           docbook-xsl
+           libxslt))
+    (inputs
+     (list gdk-pixbuf
+           gssdp
+           gstreamer
+           gst-plugins-base
+           gst-editing-services
+           gtk+
+           gupnp
+           gupnp-av
+           gupnp-dlna
+           json-glib
+           libgee
+           libmediaart
+           libsoup
+           libxslt
+           libunistring
+           tracker))
     (synopsis "Share audio, video, and pictures with other devices")
     (description
      "Rygel is a home media solution (@dfn{UPnP AV MediaServer and
@@ -1690,11 +1735,8 @@ client devices can handle.")
        ("pkg-config" ,pkg-config)
        ("vala" ,vala)))
     (inputs
-     `(("gcr" ,gcr)
-       ("gtk+" ,gtk+)
-       ("iso-codes" ,iso-codes)
-       ("mobile-broadband-provider-info" ,mobile-broadband-provider-info)
-       ("network-manager" ,network-manager)))
+     (list gcr gtk+ iso-codes mobile-broadband-provider-info
+           network-manager))
     (synopsis "Network Manager's applet library")
     (description "Libnma is an applet library for Network Manager.  It was
 initially part of network-manager-applet and has now become a separate
@@ -1707,7 +1749,7 @@ project.")
 (define-public gnome-menus
   (package
     (name "gnome-menus")
-    (version "3.32.0")
+    (version "3.36.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/gnome-menus/"
@@ -1715,12 +1757,10 @@ project.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0x2blzqrapmbsbfzxjcdcpa3vkw9hq5k96h9kvjmy9kl415wcl68"))))
+                "07xvaf8s0fiv0035nk8zpzymn5www76w2a1vflrgqmp9plw8yd6r"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("glib" ,glib)
-       ("pkg-config" ,pkg-config)))
+     (list gettext-minimal glib pkg-config))
     (synopsis "Menu support for GNOME desktop")
     (description "GNOME Menus contains the libgnome-menu library, the layout
 configuration files for the GNOME menu, as well as a simple menu editor.")
@@ -1730,14 +1770,14 @@ configuration files for the GNOME menu, as well as a simple menu editor.")
 (define-public deja-dup
   (package
     (name "deja-dup")
-    (version "40.6")
+    (version "42.8")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://gitlab.gnome.org/World/deja-dup/-/archive/"
                                   version "/deja-dup-" version ".tar.bz2"))
               (sha256
                (base32
-                "0lwazh6crby5wpy9fg6zvwy4plqbhs2f98bm5lbizjdlbh88n5q0"))))
+                "0d1jnlxpk52x56aqxz1g2xb4y4sm24h08p2di8mc1k8n8b52rpi4"))))
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
@@ -1773,19 +1813,28 @@ configuration files for the GNOME menu, as well as a simple menu editor.")
            (lambda _
              (substitute* "data/post-install.sh"
                (("gtk-update-icon-cache") "true"))
-             #t)))))
+             #t))
+         (add-after 'install 'wrap-program
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             ;; Add duplicity to the search path
+             (wrap-program (string-append (assoc-ref outputs "out")
+                                          "/bin/deja-dup")
+               `("PATH" ":" prefix
+                 (,(string-append (assoc-ref inputs "duplicity") "/bin")))))))))
     (inputs
-     `(("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
+     `(("bash-minimal" ,bash-minimal)
        ("duplicity" ,duplicity)
-       ("python" ,python)
-       ("python-pygobject" ,python-pygobject)
+       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
        ("gtk+" ,gtk+)
        ("json-glib" ,json-glib)
-       ("libnotify" ,libnotify)
        ("libgpg-error" ,libgpg-error)
+       ("libnotify" ,libnotify)
        ("libsecret" ,libsecret)
-       ("libsoup" ,libsoup)
-       ("packagekit" ,packagekit)))
+       ("libsoup" ,libsoup-minimal-2)
+       ("libhandy" ,libhandy)
+       ("packagekit" ,packagekit)
+       ("python" ,python)
+       ("python-pygobject" ,python-pygobject)))
     (native-inputs
      `(("appstream-glib" ,appstream-glib)
        ("desktop-file-utils" ,desktop-file-utils)
@@ -1806,7 +1855,7 @@ either on a local, or remote machine via a number of methods.")
 (define-public gnome-commander
   (package
     (name "gnome-commander")
-    (version "1.12.2")
+    (version "1.12.3.1")
     (source
      (origin
        (method url-fetch)
@@ -1814,24 +1863,20 @@ either on a local, or remote machine via a number of methods.")
                            (version-major+minor version)  "/"
                            "gnome-commander-" version ".tar.xz"))
        (sha256
-        (base32 "0f7l2pkyh3r1qk4hhavl7387l3bq5my3snpdppiavcpnji28dpa5"))))
+        (base32 "0fhmfxh6kbchggvpbin7d4g4fq5vc49y0w48wdkyxln5dswidss2"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("desktop-file-utils" ,desktop-file-utils)
-       ("gcc" ,gcc-8) ;required for -Wcast-function-type
-       ("gettext" ,gettext-minimal)
-       ("glib:bin" ,glib "bin")
-       ("gobject-introspection" ,gobject-introspection)
-       ("googletest" ,googletest)
-       ("intltool" ,intltool)
-       ("itstool" ,itstool)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
-    (inputs
-     `(("gconf" ,gconf)
-       ("gnome-vfs" ,gnome-vfs)
-       ("gtk+" ,gtk+-2)
-       ("libxml2" ,libxml2)))
+     (list desktop-file-utils
+           gettext-minimal
+           `(,glib "bin")
+           gobject-introspection
+           googletest
+           intltool
+           itstool
+           libtool
+           pkg-config))
+    (inputs
+     (list gconf gnome-vfs gtk+-2 libxml2))
     (home-page "https://gcmd.github.io/")
     (synopsis "Two-pane graphical file manager for the GNOME desktop")
     (description
@@ -1844,21 +1889,18 @@ and running smart commands.")
 (define-public gnome-user-docs
   (package
    (name "gnome-user-docs")
-   (version "3.32.3")
+   (version "40.5")
    (source
     (origin
       (method url-fetch)
       (uri (string-append "mirror://gnome/sources/gnome-user-docs/"
-                          (version-major+minor version)
+                          (version-major version)
                           "/gnome-user-docs-" version ".tar.xz"))
       (sha256
-       (base32 "0dvsl0ldg8rf7yq0r4dv1pn41s7gjgcqp7agkbflkbmhrl6vbhig"))))
+       (base32 "0p6ysdqlfc7vvzsrcanl9bhsc7666sv42xxzpbgsf5j55z3yrkpr"))))
    (build-system gnu-build-system)
    (native-inputs
-    `(("gettext" ,gettext-minimal)
-      ("itstool" ,itstool)
-      ("pkg-config" ,pkg-config)
-      ("xmllint" ,libxml2)))
+    (list gettext-minimal itstool pkg-config libxml2))
    (synopsis "User documentation for the GNOME desktop")
    (description
     "The GNOME User Documentation explains how to use the GNOME desktop and its
@@ -1867,34 +1909,6 @@ and system administrators.")
    (home-page "https://live.gnome.org/DocumentationProject")
    (license license:cc-by3.0)))
 
-(define-public gnome-getting-started-docs
-  (package
-   (name "gnome-getting-started-docs")
-   (version "3.32.2")
-   (source
-    (origin
-      (method url-fetch)
-      (uri (string-append "mirror://gnome/sources/gnome-getting-started-docs/"
-                          (version-major+minor version)
-                          "/gnome-getting-started-docs-" version ".tar.xz"))
-      (sha256
-       (base32 "1v4k465mlzrhgcdddzs6bmm0yliyrfx6jg3gh0s17a08i0w5rbwq"))))
-   (build-system gnu-build-system)
-   (native-inputs
-    `(("gettext" ,gettext-minimal)
-      ("itstool" ,itstool)
-      ("pkg-config" ,pkg-config)
-      ("xmllint" ,libxml2)))
-   (synopsis "Help to get new users started with the GNOME desktop")
-   (description
-    "The GNOME Getting Started Documentation contains GNOME's intuitive
-\"Getting Started\" tour, with video guides, that can be viewed with Yelp.
-
-It is normally used together with @command{gnome-initial-setup}, but is also
-useful as a tutorial and users' guide for new or less experienced users.")
-   (home-page "https://live.gnome.org/DocumentationProject")
-   (license license:cc-by-sa3.0)))
-
 (define-public dia
   ;; This version from GNOME's repository includes fixes for compiling with
   ;; recent versions of the build tools.  The latest activity on the
@@ -1915,21 +1929,22 @@ useful as a tutorial and users' guide for new or less experienced users.")
                  (base32
                   "04r8dspa6nmicrifhi3sh46hqvyy88hzq37xx99q3q1mwsrpmwy8"))))
       (build-system meson-build-system)
+      (arguments `(#:meson ,meson-0.59))
       (inputs
-       `(("graphene" ,graphene)
-         ("gtk+" ,gtk+-2)
-         ("libxml2" ,libxml2)
-         ("libxslt" ,libxslt)
-         ("poppler" ,poppler)
-         ;; Without Python 2, build fails: plug-ins/python/meson.build:4:0:
-         ;; ERROR: Unknown method "dependency" in object.
-         ("python-2" ,python-2)))
+       (list graphene
+             gtk+-2
+             libxml2
+             libxslt
+
+             ;; XXX: PDF plugin fails to build with poppler 21.07.0.
+             ;; poppler
+
+             ;; Without Python 2, build fails: plug-ins/python/meson.build:4:0:
+             ;; ERROR: Unknown method "dependency" in object.
+             python-2))
       (native-inputs
-       `(("appstream-glib" ,appstream-glib)
-         ("docbook-xsl" ,docbook-xsl)
-         ("glib" ,glib "bin")
-         ("intltool" ,intltool)
-         ("pkg-config" ,pkg-config)))
+       (list appstream-glib docbook-xsl
+             `(,glib "bin") intltool pkg-config))
       (home-page "https://wiki.gnome.org/Apps/Dia")
       (synopsis "Diagram creation for GNOME")
       (description "Dia can be used to draw different types of diagrams, and
@@ -1938,12 +1953,10 @@ relationship modeling, and network diagrams.  The program supports various file
 formats like PNG, SVG, PDF and EPS.")
       (license license:gpl2+))))
 
-;; This is the unstable release, but it is required for the current stable
-;; release of gvfs (1.38.1).
 (define-public libgdata
   (package
     (name "libgdata")
-    (version "0.17.9")
+    (version "0.18.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
@@ -1951,34 +1964,30 @@ formats like PNG, SVG, PDF and EPS.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0fj54yqxdapdppisqm1xcyrpgcichdmipq0a0spzz6009ikzgi45"))))
-    (build-system gnu-build-system)
+                "1iq4d1qy0vkmy29xvr13dgz4pxvn5v3yi2swryld0ajinvp951fx"))))
+    (build-system meson-build-system)
     (arguments
      '(#:phases
        (modify-phases %standard-phases
-         (add-before 'check 'disable-failing-tests
+         (add-before 'check 'set-home-for-tests
            (lambda _
-             ;; The PicasaWeb API tests fail with gnome-online-accounts@3.24.2.
-             ;; They have been removed in libgdata 0.17.6, so just do the same.
-             (substitute* "gdata/tests/Makefile"
-               (("picasaweb\\$\\(EXEEXT\\) ") ""))
-             #t)))))
+             (setenv "HOME" "/tmp"))))))
     (native-inputs
      `(("glib:bin" ,glib "bin")
+       ("gobject-introspection" ,gobject-introspection)
        ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
        ("intltool" ,intltool)
        ("pkg-config" ,pkg-config)
        ("uhttpmock" ,uhttpmock)))
     (inputs
-     `(("cyrus-sasl" ,cyrus-sasl)
-       ("glib-networking" ,glib-networking)))
+     (list cyrus-sasl glib-networking vala))
     (propagated-inputs
      `(("gcr" ,gcr)
        ("glib" ,glib)
        ("gnome-online-accounts:lib" ,gnome-online-accounts "lib")
        ("json-glib" ,json-glib)
        ("liboauth" ,liboauth)
-       ("libsoup" ,libsoup)
+       ("libsoup" ,libsoup-minimal-2)
        ("libxml2" ,libxml2)))
     (home-page "https://wiki.gnome.org/Projects/libgdata")
     (synopsis "Library for accessing online service APIs")
@@ -2002,18 +2011,12 @@ access the common Google services, and has full asynchronous support.")
                 "07156nj7yrp3h9zyzx6mjwxwmfijialb4gi5d6dwyp53arr8c9vd"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("gobject-introspection" ,gobject-introspection)
-       ("pkg-config" ,pkg-config)))
+     (list gobject-introspection pkg-config))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("libjpeg" ,libjpeg-turbo)
-       ("lcms" ,lcms)
-       ("libtiff" ,libtiff)))
+     (list gtk+ libjpeg-turbo lcms libtiff))
     (propagated-inputs
      ;; In Requires of libgxps.pc.
-     `(("cairo" ,cairo)
-       ("glib" ,glib)
-       ("libarchive" ,libarchive)))
+     (list cairo glib libarchive))
     (home-page "https://wiki.gnome.org/Projects/libgxps")
     (synopsis "GObject-based library for handling and rendering XPS documents")
     (description
@@ -2025,16 +2028,16 @@ to other formats.")
 (define-public gnome-characters
   (package
     (name "gnome-characters")
-    (version "3.30.0")
+    (version "40.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://gnome/sources/"
-                           "gnome-characters/" (version-major+minor version)
+                           "gnome-characters/" (version-major version)
                            "/gnome-characters-" version ".tar.xz"))
        (sha256
         (base32
-         "08cwz39iwgsyyb2wqhb8vfbmh1cwfkgfiy7adp08w7rwqi99x3dp"))))
+         "0z2xa4w921bzpzj6gv88pvbrijcnnwni6jxynwz0ybaravyzaqha"))))
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
@@ -2046,8 +2049,7 @@ to other formats.")
                       (wrap-program (string-append (assoc-ref outputs "out")
                                                    "/bin/gnome-characters")
                         `("GI_TYPELIB_PATH" ":" prefix
-                          (,(getenv "GI_TYPELIB_PATH"))))
-                      #t)))))
+                          (,(getenv "GI_TYPELIB_PATH")))))))))
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("glib:bin" ,glib "bin")
@@ -2055,10 +2057,7 @@ to other formats.")
        ("pkg-config" ,pkg-config)
        ("python" ,python-minimal)))
     (inputs
-     `(("gjs" ,gjs)
-       ("gtk+" ,gtk+)
-       ("libunistring" ,libunistring)
-       ("gnome-desktop" ,gnome-desktop)))
+     (list gjs gtk+ libhandy libunistring gnome-desktop))
     (home-page "https://wiki.gnome.org/Apps/CharacterMap")
     (synopsis "Find and insert unusual characters")
     (description "Characters is a simple utility application to find
@@ -2091,18 +2090,18 @@ commonly used macros.")
 (define-public gnome-contacts
   (package
     (name "gnome-contacts")
-    (version "3.34")
+    (version "40.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/gnome-contacts/"
-                                  (version-major+minor version) "/"
+                                  (version-major version) "/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "04igc9xvyc4kb5xf5g2missnvyvj9zv5cqxf5k4z7hb0sv42wq4r"))))
+                "0w2g5xhw65adzvwzakrj5kaim4sw1w7s8qqwm3nm6inq50znzpn9"))))
     (build-system meson-build-system)
     (arguments
-     `(#:configure-flags '("-Dcheese=false")
+     `(#:configure-flags '("-Dcheese=disabled")
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'generate-vapis
@@ -2113,16 +2112,16 @@ commonly used macros.")
 
              (invoke "vapigen" "--directory=vapi" "--pkg=gio-2.0"
                      "--library=goa-1.0"
-                     (string-append goa "/share/gir-1.0/Goa-1.0.gir"))
-             #t))
+                     (string-append goa "/share/gir-1.0/Goa-1.0.gir"))))
          (add-after 'unpack 'skip-gtk-update-icon-cache
            ;; Don't create 'icon-theme.cache'.
            (lambda _
              (substitute* "build-aux/meson_post_install.py"
-               (("gtk-update-icon-cache") "true"))
-             #t)))))
+               (("gtk-update-icon-cache") "true")))))))
     (native-inputs
-     `(("glib:bin" ,glib "bin")
+     `(("docbook-xml" ,docbook-xml-4.2)
+       ("docbook-xsl" ,docbook-xsl)
+       ("glib:bin" ,glib "bin")
        ("pkg-config" ,pkg-config)))
     (inputs
      `(("docbook-xml" ,docbook-xml)
@@ -2135,12 +2134,12 @@ commonly used macros.")
        ("gst-plugins-base" ,gst-plugins-base)
        ("gtk+" ,gtk+)
        ("libgee" ,libgee)
+       ("libhandy" ,libhandy)
        ("libxslt" ,libxslt)
        ("telepathy-glib" ,telepathy-glib)
        ("vala" ,vala)))
     (propagated-inputs
-     `(("folks" ,folks)
-       ("telepathy-mission-control" ,telepathy-mission-control)))
+     (list folks telepathy-mission-control))
     (synopsis "GNOME's integrated address book")
     (description
      "GNOME Contacts organizes your contact information from online and
@@ -2151,16 +2150,16 @@ offline sources, providing a centralized place for managing your contacts.")
 (define-public gnome-desktop
   (package
     (name "gnome-desktop")
-    (version "3.34.2")
+    (version "40.4")
     (source
      (origin
       (method url-fetch)
       (uri (string-append "mirror://gnome/sources/" name "/"
-                          (version-major+minor version)  "/"
+                          (version-major version)  "/"
                           name "-" version ".tar.xz"))
       (sha256
        (base32
-        "1v983xirwp1y6ggz97bh742ak6gff0hxb359dgn37nikjxhvm0a0"))))
+        "1vs5knn2yj6a449p9bn5w5407i1yvxfxg8xv844qgl70hpsrdbl8"))))
     (build-system meson-build-system)
     (arguments
      '(#:phases
@@ -2190,10 +2189,11 @@ offline sources, providing a centralized place for managing your contacts.")
              ;; Tests require a running X server and locales.
              (system "Xvfb :1 &")
              (setenv "DISPLAY" ":1")
+             (setenv "XDG_CACHE_HOME" "/tmp/xdg-cache")
+             (setenv "XDG_CONFIG_HOME" "/tmp")
              (setenv "GUIX_LOCPATH"
-                     (string-append (assoc-ref inputs "glibc-locales")
-                                    "/lib/locale"))
-             #t)))))
+                     (search-input-directory inputs
+                                             "lib/locale")))))))
     (native-inputs
      `(("glib:bin" ,glib "bin") ; for gdbus-codegen
        ("glibc-locales" ,glibc-locales) ; for tests
@@ -2205,19 +2205,19 @@ offline sources, providing a centralized place for managing your contacts.")
        ("xorg-server" ,xorg-server-for-tests)))
     (propagated-inputs
      ;; Required by gnome-desktop-3.0.pc.
-     `(("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gtk+" ,gtk+)
-       ("iso-codes" ,iso-codes)
-       ("libseccomp" ,libseccomp)
-       ("libx11" ,libx11)
-       ("xkeyboard-config" ,xkeyboard-config)))
-    (inputs
-     `(("gdk-pixbuf" ,gdk-pixbuf)
-       ("glib" ,glib)
-       ("bubblewrap" ,bubblewrap)
-       ("libxext" ,libxext)
-       ("libxkbfile" ,libxkbfile)
-       ("libxrandr" ,libxrandr)))
+     (list gsettings-desktop-schemas
+           gtk+
+           iso-codes
+           libseccomp
+           libx11
+           xkeyboard-config))
+    (inputs
+     (list gdk-pixbuf
+           glib
+           bubblewrap
+           libxext
+           libxkbfile
+           libxrandr))
     (home-page "https://www.gnome.org/")
     (synopsis
      "Libgnome-desktop, gnome-about, and desktop-wide documents")
@@ -2246,13 +2246,13 @@ The gnome-about program helps find which version of GNOME is installed.")
         "19n4x25ndzngaciiyd8dd6s2mf9gv6nv3wv27ggns2smm7zkj1nb"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("docbook-xml" ,docbook-xml-4.4)
-       ("python2-libxml2" ,python2-libxml2)
-       ("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)
-       ("pkg-config" ,pkg-config)
-       ("python-2" ,python-2)))
+     (list intltool
+           docbook-xml-4.4
+           python2-libxml2
+           libxml2
+           libxslt
+           pkg-config
+           python-2))
     (home-page "https://wiki.gnome.org/GnomeDocUtils")
     (synopsis
      "Documentation utilities for the Gnome project")
@@ -2265,18 +2265,18 @@ and keep up to date translations of documentation.")
 (define-public gnome-disk-utility
   (package
     (name "gnome-disk-utility")
-    (version "3.34.0")
+    (version "40.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
-                                  (version-major+minor version) "/"
+                                  (version-major version) "/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1mb7q90lnlp97dhxhnadhjagcfd12dfqzp0vj9h6b1r61pzhy97y"))))
+                "1rr1ypb89p51b6428yqvczmpmylwjfnhnkgx78hzm3vxm3m15lff"))))
     (build-system meson-build-system)
     (arguments
-     '(#:configure-flags '("-Dlogind=libelogind")
+     `(#:configure-flags '("-Dlogind=libelogind")
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'skip-gtk-update-icon-cache
@@ -2294,17 +2294,18 @@ and keep up to date translations of documentation.")
        ("libxml2" ,libxml2)
        ("libxslt" ,libxslt)))
     (inputs
-     `(("elogind" ,elogind)
-       ("glib" ,glib)
-       ("appstream-glib" ,appstream-glib)
-       ("gnome-settings-daemon" ,gnome-settings-daemon)
-       ("gtk+" ,gtk+)
-       ("libcanberra" ,libcanberra)
-       ("libdvdread" ,libdvdread)
-       ("libnotify" ,libnotify)
-       ("libpwquality" ,libpwquality)
-       ("libsecret" ,libsecret)
-       ("udisks" ,udisks)))
+     (list elogind
+           glib
+           appstream-glib
+           gnome-settings-daemon
+           gtk+
+           libcanberra
+           libdvdread
+           libhandy
+           libnotify
+           libpwquality
+           libsecret
+           udisks))
     (home-page "https://git.gnome.org/browse/gnome-disk-utility")
     (synopsis "Disk management utility for GNOME")
     (description "Disk management utility for GNOME.")
@@ -2313,18 +2314,18 @@ and keep up to date translations of documentation.")
 (define-public gnome-font-viewer
   (package
     (name "gnome-font-viewer")
-    (version "3.30.0")
+    (version "40.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/gnome-font-viewer/"
-                                  (version-major+minor version)
+                                  (version-major version)
                                   "/gnome-font-viewer-" version ".tar.xz"))
               (sha256
                (base32
-                "1wwnx2zrlbd2d6np7m9s78alx6j6ranrnh1g2z6zrv9qcj8rpzz5"))))
+                "0hpyi0sz3gcqqs9lkwyk8b6hr39m3n27432x98kxr436jj37dk6j"))))
     (build-system meson-build-system)
     (arguments
-     '(#:phases
+     `(#:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-post-install-script
            (lambda _
@@ -2346,9 +2347,7 @@ and keep up to date translations of documentation.")
        ("glib:bin" ,glib "bin")
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("glib" ,glib)
-       ("gnome-desktop" ,gnome-desktop)
-       ("gtk+" ,gtk+)))
+     (list glib gnome-desktop gtk+ libhandy libxml2))
     (home-page "https://gitlab.gnome.org/GNOME/gnome-font-viewer")
     (synopsis "GNOME Fonts")
     (description "Application to show you the fonts installed on your computer
@@ -2359,7 +2358,7 @@ the font would look under various sizes.")
 (define-public gcr
   (package
     (name "gcr")
-    (version "3.34.0")
+    (version "3.41.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
@@ -2367,8 +2366,8 @@ the font would look under various sizes.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0925snsixzkwh49xiayqmj6fcrmklqk8kyy0jkv7m64h9abm1pr9"))))
-    (build-system gnu-build-system)
+                "00fsf82ycac8qi0kkiq759p6jrn63pyz4ksn4wnq7m4ax94zq289"))))
+    (build-system meson-build-system)
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -2376,23 +2375,38 @@ the font would look under various sizes.")
          ;; build environment.
          (add-after 'unpack 'disable-failing-tests
            (lambda _
-             (substitute* "Makefile.in"
-               (("[[:blank:]]+test-system-prompt\\$\\(EXEEXT\\)")
+             (substitute* "gcr/meson.build"
+               (("[[:blank:]]+'system-prompt',")
                 ""))
              #t))
+         (add-after 'unpack 'skip-gtk-update-icon-cache
+           ;; Don't create 'icon-theme.cache'.
+           (lambda _
+             (substitute* "meson_post_install.py"
+               (("gtk-update-icon-cache") "true"))
+             #t))
+         (add-after 'unpack 'fix-systemd-detection
+           (lambda _
+             (substitute* "gcr/gcr-ssh-agent-service.c"
+               (("#ifdef WITH_SYSTEMD")
+                "#if (WITH_SYSTEMD)"))))
          (add-before 'check 'pre-check
            (lambda _
              ;; Some tests expect to write to $HOME.
              (setenv "HOME" "/tmp")
              #t)))))
     (inputs
-     `(("dbus" ,dbus)
-       ("gnupg" ,gnupg)                ;called as a child process during tests
-       ("libgcrypt" ,libgcrypt)))
+     (list dbus gnupg ;called as a child process during tests
+           libgcrypt libsecret))
     (native-inputs
      `(("python" ,python-wrapper)       ;for tests
+       ("openssh" ,openssh)             ;for tests
        ("pkg-config" ,pkg-config)
        ("gettext" ,gettext-minimal)
+       ("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("libtool" ,libtool)
+       ("gtk-doc" ,gtk-doc)
        ("glib" ,glib "bin")
        ("gobject-introspection" ,gobject-introspection)
        ("libxml2" ,libxml2)
@@ -2400,9 +2414,7 @@ the font would look under various sizes.")
        ("xsltproc" ,libxslt)))
     ;; mentioned in gck.pc, gcr.pc and gcr-ui.pc
     (propagated-inputs
-     `(("p11-kit" ,p11-kit)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)))
+     (list p11-kit glib gtk+))
     (home-page "https://www.gnome.org")
     (synopsis "Libraries for displaying certificates and accessing key stores")
     (description
@@ -2429,20 +2441,20 @@ GNOME Desktop.")
                 "154qcr0x6f68f4q526y87imv0rscmp34n47nk1pp82rsq52h2zna"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("glib" ,glib "bin")             ; for glib-genmarshal, etc.
-       ("gnome-common" ,gnome-common)
-       ("gtk-doc" ,gtk-doc/stable)
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)
-       ("libtool" ,libtool)
-       ("which" ,which)))
-    (inputs
-     `(("libxml2" ,libxml2)))
+     (list autoconf
+           automake
+           `(,glib "bin") ; for glib-genmarshal, etc.
+           gnome-common
+           gtk-doc/stable
+           intltool
+           pkg-config
+           libtool
+           which))
+    (inputs
+     (list libxml2))
     (propagated-inputs
      ;; The gdl-3.0.pc file 'Requires' GTK+.
-     `(("gtk+" ,gtk+)))
+     (list gtk+))
     (home-page "https://gitlab.gnome.org/GNOME/gdl/")
     (synopsis "GNOME docking library")
     (description "This library provides docking features for gtk+.")
@@ -2481,15 +2493,13 @@ GNOME Desktop.")
                "10vpjhgbjm7z2djy04qakd02qlzpd02xnbfjhk2aqwjzn3xpihf4"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libgcrypt" ,libgcrypt)
-       ("dbus" ,dbus)))
+     (list libgcrypt dbus))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("glib" ,glib "bin")
-       ("intltool" ,intltool)))
+     (list pkg-config
+           `(,glib "bin") intltool))
     (propagated-inputs
      ;; Referred to in .h files and .pc.
-     `(("glib" ,glib)))
+     (list glib))
     (home-page "https://www.gnome.org")
     (synopsis "Accessing passwords from the GNOME keyring")
     (description
@@ -2501,15 +2511,15 @@ GNOME Desktop.")
 (define-public gnome-keyring
   (package
     (name "gnome-keyring")
-    (version "3.34.0")
+    (version "40.0")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnome/sources/" name "/"
-                                 (version-major+minor version)  "/"
+                                 (version-major version)  "/"
                                  name "-" version ".tar.xz"))
              (sha256
               (base32
-               "0hqrsh5g9q9lm190f0m85q4nki8k4ng7wphl6qbccdry59aakkg9"))))
+               "0cdrlcw814zayhvlaxqs1sm9bqlfijlp22dzzd0g5zg2isq4vlm3"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ;48 of 603 tests fail because /var/lib/dbus/machine-id does
@@ -2546,11 +2556,7 @@ GNOME Desktop.")
              (invoke "aclocal")
              (invoke "automake" "-ac"))))))
     (inputs
-     `(("libgcrypt" ,libgcrypt)
-       ("linux-pam" ,linux-pam)
-       ("openssh" ,openssh)
-       ("dbus" ,dbus)
-       ("gcr" ,gcr)))
+     (list libgcrypt linux-pam openssh dbus gcr))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("glib" ,glib "bin")
@@ -2560,10 +2566,10 @@ GNOME Desktop.")
        ("autoconf" ,autoconf)
        ("automake" ,automake)
        ("libxslt" ,libxslt) ;for documentation
-       ("docbook-xml" ,docbook-xml-4.2)
+       ("docbook-xml" ,docbook-xml-4.3)
        ("docbook-xsl" ,docbook-xsl)))
     (propagated-inputs
-     `(("gcr" ,gcr)))
+     (list gcr))
     (home-page "https://www.gnome.org")
     (synopsis "Daemon to store passwords and encryption keys")
     (description
@@ -2579,55 +2585,59 @@ forgotten when the session ends.")
 (define-public evince
   (package
     (name "evince")
-    (version "3.36.5")
+    (version "40.2")
     (source (origin
-             (method url-fetch)
-             (uri (string-append "mirror://gnome/sources/evince/"
-                                 (version-major+minor version) "/"
-                                 "evince-" version ".tar.xz"))
-             (sha256
-              (base32
-               "0z79jl0j9xq9wgwkfr0d1w1qrdy4447y8shs407n5srr0vixc3bg"))))
-    (build-system glib-or-gtk-build-system)
+              (method url-fetch)
+              (uri "mirror://gnome/sources/evince/40/evince-40.2.tar.xz")
+              (sha256
+               (base32
+                "0xrwls1bhvny8vvd7mfjy9p26zjch0pd6x6j9jn9g2ka6xwyrxqg"))))
+    (build-system meson-build-system)
     (arguments
-     `(#:configure-flags '("--disable-nautilus" "--enable-introspection")
+     `(#:glib-or-gtk? #t
+       #:build-type "release"
+       #:configure-flags
+       '("-Dnautilus=false"
+         "-Dintrospection=true"
+         ;; XXX: Generating the documentation fails because the
+         ;; libevdocument.devhelp document cannot be created. This seems to be
+         ;; caused by a problem during the XSL transformation.
+         "-Dgtk_doc=false")
        #:phases
        (modify-phases %standard-phases
-         (add-before 'install 'skip-gtk-update-icon-cache
+         (add-after 'unpack 'skip-gtk-update-icon-cache
            ;; Don't create 'icon-theme.cache'.
            (lambda _
-             (substitute* "data/Makefile"
+             (substitute* "meson_post_install.py"
                (("gtk-update-icon-cache") "true"))
              #t)))))
     (inputs
-     `(("libarchive" ,libarchive)
-       ("libgxps" ,libgxps)
-       ("libspectre" ,libspectre)
-       ("djvulibre" ,djvulibre)
-       ("ghostscript" ,ghostscript)
-       ("poppler" ,poppler)
-       ("libtiff" ,libtiff)
-       ("texlive-libkpathsea" ,texlive-libkpathsea) ; for DVI support
-       ("gnome-desktop" ,gnome-desktop)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gspell" ,gspell)
-       ("libgnome-keyring" ,libgnome-keyring)
-       ("adwaita-icon-theme" ,adwaita-icon-theme)
-       ("gdk-pixbuf" ,gdk-pixbuf)
-       ("atk" ,atk)
-       ("pango" ,pango)
-       ("gtk+" ,gtk+)
-       ("glib" ,glib)
-       ("libxml2" ,libxml2)
-       ("libsm" ,libsm)
-       ("libice" ,libice)
-       ("shared-mime-info" ,shared-mime-info)
-       ("dconf" ,dconf)
-       ("libcanberra" ,libcanberra)
-       ("libsecret" ,libsecret)
-
-       ;; For tests.
-       ("dogtail" ,python2-dogtail)))
+     (list libarchive
+           libgxps
+           libspectre
+           djvulibre
+           ghostscript
+           poppler
+           libtiff
+           texlive-libkpathsea ; for DVI support
+           gnome-desktop
+           gsettings-desktop-schemas
+           gspell
+           libgnome-keyring
+           adwaita-icon-theme
+           gdk-pixbuf
+           atk
+           pango
+           gtk+
+           glib
+           libxml2
+           libsm
+           libice
+           shared-mime-info
+           dconf
+           libcanberra
+           libsecret
+           libhandy))
     (native-inputs
      `(("itstool" ,itstool)
        ("intltool" ,intltool)
@@ -2647,45 +2657,40 @@ on the GNOME Desktop with a single simple application.")
 (define-public gsettings-desktop-schemas
   (package
     (name "gsettings-desktop-schemas")
-    (version "3.34.0")
+    (version "41.0")
     (source
      (origin
-      (method url-fetch)
-      (uri (string-append "mirror://gnome/sources/" name "/"
-                          (version-major+minor version)  "/"
-                          name "-" version ".tar.xz"))
-      (sha256
-       (base32
-        "1bayr76aylawf2fhyjhv9zgk4kpv7ivrrmd80khb0h3h1wk092r8"))))
+       (method url-fetch)
+       (uri (string-append "mirror://gnome/sources/" name "/"
+                           (version-major version)  "/"
+                           name "-" version ".tar.xz"))
+       (sha256
+        (base32
+         "1v9jagk679m01nji0acirynxinziv036618c7xc49l4nwmr9ja3p"))))
     (build-system meson-build-system)
     (arguments
-     '(#:phases (modify-phases %standard-phases
+     `(#:phases (modify-phases %standard-phases
                   (add-after 'unpack 'patch-schemas
                     (lambda* (#:key inputs #:allow-other-keys)
-                      (let ((theme (assoc-ref inputs "gnome-backgrounds")))
-                        (substitute* (find-files "schemas"
-                                                 "\\.gschema\\.xml\\.in$")
-                          ;; Provide the correct file name of the default GNOME
-                          ;; background, 'adwaita-timed.xml'.
-                          (("@datadir@/backgrounds/gnome")
-                           (string-append theme "/share/backgrounds/gnome"))
-                          ;; Do not reference fonts, that may not exist.
-                          (("'Source Code Pro 10'") "'Monospace 11'"))
-                        #t))))))
-    (inputs
-     `(("glib" ,glib)
-       ("gnome-backgrounds" ,gnome-backgrounds)))
-    (native-inputs
-     `(("intltool" ,intltool)
-       ("glib" ,glib "bin")                       ; glib-compile-schemas, etc.
-       ("gobject-introspection" ,gobject-introspection)
-       ("pkg-config" ,pkg-config)))
+                      (substitute* (find-files "schemas"
+                                               "\\.gschema\\.xml\\.in$")
+                        ;; Provide the correct file name of the default
+                        ;; GNOME background, 'adwaita-timed.xml'.
+                        (("@datadir@/backgrounds/gnome")
+                         (search-input-directory inputs
+                                                 "/share/backgrounds/gnome"))
+                        ;; Do not reference fonts, that may not exist.
+                        (("'Source Code Pro 10'") "'Monospace 11'")))))))
+    (inputs (list glib gnome-backgrounds))
+    (native-inputs (list gettext-minimal
+                         `(,glib "bin") ;glib-compile-schemas, etc.
+                         gobject-introspection
+                         pkg-config
+                         python))  ;for build-aux/meson/post-install.py
     (home-page "https://launchpad.net/gsettings-desktop-schemas")
-    (synopsis
-     "GNOME settings for various desktop components")
-    (description
-     "Gsettings-desktop-schemas contains a collection of GSettings schemas
-for settings shared by various components of the GNOME desktop.")
+    (synopsis "GNOME settings for various desktop components")
+    (description "Gsettings-desktop-schemas contains a collection of GSettings
+schemas for settings shared by various components of the GNOME desktop.")
     (license license:lgpl2.1+)))
 
 (define-public python-liblarch
@@ -2712,11 +2717,11 @@ for settings shared by various components of the GNOME desktop.")
              (setenv "DISPLAY" ":1")
              #t)))))
     (native-inputs
-     `(("xorg-server" ,xorg-server-for-tests)))
+     (list xorg-server-for-tests))
     (inputs
-     `(("gtk+" ,gtk+)))
+     (list gtk+))
     (propagated-inputs
-     `(("python-pygobject" ,python-pygobject)))
+     (list python-pygobject))
     (home-page "https://wiki.gnome.org/Projects/liblarch")
     (synopsis "Library to easily handle complex data structures")
     (description
@@ -2757,7 +2762,7 @@ and how they are displayed (View).")
                                            (package-version python))
                                          "/site-packages")))
                (wrap-program prog
-                 `("PYTHONPATH" = (,(getenv "PYTHONPATH") ,pylib))
+                 `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH") ,pylib))
                  `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH"))))
                #t))))))
     (native-inputs
@@ -2768,16 +2773,16 @@ and how they are displayed (View).")
        ("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-dbus" ,python-dbus)
-       ("python-liblarch" ,python-liblarch)
-       ("python-lxml" ,python-lxml)
-       ("python-pycairo" ,python-pycairo)
-       ("python-pygobject" ,python-pygobject)
-       ("python-pyxdg" ,python-pyxdg)))
+     (list librsvg
+           gsettings-desktop-schemas
+           gtk+
+           pango
+           python-dbus
+           python-liblarch
+           python-lxml
+           python-pycairo
+           python-pygobject
+           python-pyxdg))
     (home-page "https://wiki.gnome.org/Apps/GTG")
     (synopsis "Personal organizer for the GNOME desktop")
     (description
@@ -2803,8 +2808,7 @@ know, from small tasks to large projects.")
         "1mc3v28fdfqanx3lqx233vcr4glb4c2376k0kx2v91a4vxwqcdxi"))))
     (build-system gnu-build-system)
     (inputs
-     `(("perl" ,perl)
-       ("perl-xml-simple" ,perl-xml-simple)))
+     (list perl perl-xml-simple))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -2847,9 +2851,7 @@ GNOME and KDE desktops to the icon names proposed in the specification.")
               (true      (string-append coreutils "/bin/true")))
          (list (string-append "GTK_UPDATE_ICON_CACHE=" true)))))
     (native-inputs
-     `(("icon-naming-utils" ,icon-naming-utils)
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list icon-naming-utils intltool pkg-config))
     (home-page "https://wiki.gnome.org/Personalization")
     (synopsis "GNOME icon theme")
     (description "Icons for the GNOME desktop.")
@@ -2857,19 +2859,23 @@ GNOME and KDE desktops to the icon names proposed in the specification.")
 
 ;; gnome-icon-theme was renamed to adwaita-icon-theme after version 3.12.0.
 (define-public adwaita-icon-theme
-  (package (inherit gnome-icon-theme)
+  (package/inherit gnome-icon-theme
     (name "adwaita-icon-theme")
-    (version "3.34.3")
+    (version "40.1.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
-                                  (version-major+minor version) "/"
+                                  (version-major version) "/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "025rj1fskw1y448hiar4a9icyzpyr242nlh9xhsmyp8jb71dihp7"))))
+                "1xpqa1rgmixlp953938d08xvf7kv36h747ysial8g65dsrp46v0b"))))
     (native-inputs
-     `(("gtk-encode-symbolic-svg" ,gtk+ "bin")))))
+     ;; The following requires the SVG pixbuf loader, provided by librsvg,
+     ;; available on x86_64 only.
+     `(,@(if (target-64bit?)
+             `(("gtk-encode-symbolic-svg" ,gtk+ "bin"))
+             '())))))
 
 (define-public tango-icon-theme
   (package
@@ -2884,10 +2890,7 @@ GNOME and KDE desktops to the icon names proposed in the specification.")
                 "034r9s944b4yikyfgn602yv7s54wdzlq0qfvqh52b9x6kbx08h79"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("icon-naming-utils" ,icon-naming-utils)
-       ("intltool" ,intltool)
-       ("imagemagick" ,imagemagick)
-       ("pkg-config" ,pkg-config)))
+     (list icon-naming-utils intltool imagemagick pkg-config))
     (home-page "http://tango-project.org/")
     (synopsis "Tango icon theme")
     (description "This is an icon theme that follows the Tango visual
@@ -2912,8 +2915,7 @@ guidelines.")
      ;; The build system appears not to be parallel-safe.
      '(#:parallel-build? #f))
     (inputs
-     `(("glib" ,glib)
-       ("libxml2" ,libxml2)))
+     (list glib libxml2))
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("itstool" ,itstool)
@@ -2980,29 +2982,29 @@ database is translated at Transifex.")
                        "scp-dbus-service"))))
              #t)))))
     (inputs
-     `(("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gobject-introspection" ,gobject-introspection)
-       ("python" ,python)
-       ("cups" ,cups)
-       ("gtk+" ,gtk+)
-       ("python-dbus" ,python-dbus)
-       ("python-pygobject" ,python-pygobject)
-       ("python-pycups" ,python-pycups)
-       ("python-requests" ,python-requests)
-       ("python-pycairo" ,python-pycairo)
-       ("libnotify" ,libnotify)
-       ("packagekit" ,packagekit)))
-    (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("desktop-file-utils" ,desktop-file-utils)
-       ("glib" ,glib)
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("intltool" ,intltool)
-       ("xmlto" ,xmlto)
-       ("docbook-xml" ,docbook-xml-4.1.2)
-       ("docbook-xsl" ,docbook-xsl)
-       ("libxml2" ,libxml2)))
+     (list gsettings-desktop-schemas
+           gobject-introspection
+           python
+           cups
+           gtk+
+           python-dbus
+           python-pygobject
+           python-pycups
+           python-requests
+           python-pycairo
+           libnotify
+           packagekit))
+    (native-inputs
+     (list pkg-config
+           desktop-file-utils
+           glib
+           autoconf
+           automake
+           intltool
+           xmlto
+           docbook-xml-4.1.2
+           docbook-xsl
+           libxml2))
     (home-page "https://github.com/zdohnal/system-config-printer")
     (synopsis "CUPS administration tool")
     (description
@@ -3062,12 +3064,10 @@ configuring CUPS.")
                                "/manpages/docbook.xsl")))
              #t)))))
     (propagated-inputs
-     `(;; In Requires of libnotify.pc.
-       ("gdk-pixbuf" ,gdk-pixbuf)
-       ("glib" ,glib)))
+     (list ;; In Requires of libnotify.pc.
+           gdk-pixbuf glib))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("libpng" ,libpng)))
+     (list gtk+ libpng))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("glib" ,glib "bin")
@@ -3090,7 +3090,7 @@ some form of information without getting in the user's way.")
 (define-public libpeas
   (package
     (name "libpeas")
-    (version "1.28.0")
+    (version "1.30.0")
     (source
      (origin
       (method url-fetch)
@@ -3099,7 +3099,7 @@ some form of information without getting in the user's way.")
                           name "-" version ".tar.xz"))
       (sha256
        (base32
-        "05cb7drn6arc4gi02wgsvzibigi2riz5gnfnmlb0zmbfnj9ikna2"))))
+        "18xrk1c1ixlhkmykcfiafrl2am470ws687xqvjlq40zwkcp5dx8b"))))
     (build-system meson-build-system)
     (arguments
      '(#:phases
@@ -3109,14 +3109,13 @@ some form of information without getting in the user's way.")
              (let ((xorg-server (assoc-ref inputs "xorg-server"))
                    (disp ":1"))
                (setenv "DISPLAY" disp)
+               (setenv "XDG_CACHE_HOME" "/tmp/xdg-cache")
+               (setenv "XDG_CONFIG_HOME" "/tmp")
                ;; Tests require a running X server.
                (system (format #f "~a/bin/Xvfb ~a &" xorg-server disp))
                #t))))))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("glade" ,glade3)
-       ("python" ,python)
-       ("python-pygobject" ,python-pygobject)))
+     (list gtk+ glade3 python python-pygobject))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("gettext" ,gettext-minimal)
@@ -3125,7 +3124,7 @@ some form of information without getting in the user's way.")
        ("xorg-server" ,xorg-server-for-tests)))
     (propagated-inputs
      ;; The .pc file "Requires" gobject-introspection.
-     `(("gobject-introspection" ,gobject-introspection)))
+     (list gobject-introspection))
     (home-page "https://wiki.gnome.org/Libpeas")
     (synopsis "GObject plugin system")
     (description
@@ -3159,14 +3158,10 @@ API.")
              (substitute* "gdk/gdkglshapes.c"
                ((" index") " triangle_index"))
              #t)))))
-    (inputs `(("gtk+" ,gtk+-2)
-              ("mesa" ,mesa)
-              ("glu" ,glu)
-              ("libx11" ,libx11)
-              ("libxt" ,libxt)))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("glib" ,glib "bin")))
-    (propagated-inputs `(("pangox-compat" ,pangox-compat)))
+    (inputs (list gtk+-2 mesa glu libx11 libxt))
+    (native-inputs (list pkg-config
+                         `(,glib "bin")))
+    (propagated-inputs (list pangox-compat))
     (home-page "https://projects.gnome.org/gtkglext")
     (synopsis "OpenGL extension to GTK+")
     (description "GtkGLExt is an OpenGL extension to GTK+.  It provides
@@ -3177,7 +3172,7 @@ API add-ons to make GTK+ widgets OpenGL-capable.")
 (define-public glade3
   (package
     (name "glade")
-    (version "3.36.0")
+    (version "3.38.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
@@ -3185,30 +3180,48 @@ API add-ons to make GTK+ widgets OpenGL-capable.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "023gx8rj51njn8fsb6ma5kz1irjpxi4js0n8rwy22inc4ysldd8r"))))
-    (build-system glib-or-gtk-build-system)
+                "1dxsiz9ahqkxg2a1dw9sbd8jg59y5pdz4c1gvnbmql48gmj8gz4q"))
+              (patches (search-patches
+                        "glade-gls-set-script-name.patch"
+                        "glade-test-widget-null-icon.patch"))))
+    (build-system meson-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'skip-gtk-update-icon-cache
+           ;; Don't create 'icon-theme.cache'.
+           (lambda _
+             (substitute* "meson_post_install.py"
+               (("gtk-update-icon-cache") "true"))))
+
+         ,@(if (this-package-native-input "gjs")
+               '()
+               '((add-after 'unpack 'skip-gjs-test
+                   (lambda _
+                     ;; When the optional dependency on GJS is missing, skip
+                     ;; the GJS plugin tests.
+                     (substitute* "tests/modules.c"
+                       (("g_test_add.*JavaScript.*" all)
+                        (string-append "// " all "\n")))
+                     (delete-file "tests/catalogs/gjsplugin.xml")))))
+
          (add-before 'configure 'fix-docbook
            (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "man/Makefile.in"
-               (("http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl")
+             (substitute* "man/meson.build"
+               (("http://docbook.sourceforge.net/release/xsl/\
+current/manpages/docbook.xsl")
                 (string-append (assoc-ref inputs "docbook-xsl")
                                "/xml/xsl/docbook-xsl-"
                                ,(package-version docbook-xsl)
-                               "/manpages/docbook.xsl")))
-             #t))
+                               "/manpages/docbook.xsl")))))
          (add-before 'check 'pre-check
            (lambda _
              (setenv "HOME" "/tmp")
              ;; Tests require a running X server.
              (system "Xvfb :1 &")
-             (setenv "DISPLAY" ":1")
-             #t)))))
+             (setenv "DISPLAY" ":1"))))))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("libxml2" ,libxml2)))
+     (list gtk+ libxml2))
     (native-inputs
      `(("hicolor-icon-theme" ,hicolor-icon-theme)
        ("intltool" ,intltool)
@@ -3216,7 +3229,17 @@ API add-ons to make GTK+ widgets OpenGL-capable.")
        ("libxslt" ,libxslt) ;for xsltproc
        ("docbook-xml" ,docbook-xml-4.2)
        ("docbook-xsl" ,docbook-xsl)
-       ("python" ,python-2)
+       ("glib:bin" ,glib "bin")
+       ("python" ,python)
+       ("python-pygobject" ,python-pygobject)
+       ("gobject-introspection" ,gobject-introspection)
+
+       ;; GJS depends on Rust, which is x86_64-only so far, so remove the GJS
+       ;; dependency on other platforms (FIXME).
+       ,@(if (target-x86-64?)
+             `(("gjs" ,gjs))
+             '())
+
        ("pkg-config" ,pkg-config)
        ("xorg-server" ,xorg-server-for-tests)))
     (home-page "https://glade.gnome.org")
@@ -3247,11 +3270,9 @@ the GNOME desktop environment.")
                 "1m110rbj5d2raxcdp4iz0qp172284945awrsbdlq99ksmqsc4zkn"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("glib" ,glib)
-       ("libxml2" ,libxml2)
-       ("zlib" ,zlib)))
+     (list glib libxml2 zlib))
     (home-page "https://github.com/GNOME/libcroco")
     (synopsis "CSS2 parsing and manipulation library")
     (description
@@ -3275,105 +3296,67 @@ XML/CSS rendering engine.")
               (sha256
                (base32
                 "0kbpp9ksl7977xiga37sk1gdw1r039v6zviqznl7alvvg39yp26i"))))
-    (build-system gnu-build-system)
-    (arguments
-     '(#:configure-flags '("--disable-static")))
-    (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("gettext" ,gettext-minimal)
-
-       ;; For tests.
-       ("perl" ,perl)
-       ("perl-xml-parser" ,perl-xml-parser)))
-    (inputs
-     `(("zlib" ,zlib)
-       ("bzip2" ,bzip2)))
-    (propagated-inputs
-     `(("gdk-pixbuf" ,gdk-pixbuf)
-       ("glib" ,glib)
-       ("libxml2" ,libxml2)))
-    (home-page "https://www.gnome.org/projects/libgsf")
-    (synopsis "GNOME's Structured File Library")
-    (description
-     "Libgsf aims to provide an efficient extensible I/O abstraction for
-dealing with different structured file formats.")
-
-    ;; LGPLv2.1-only.
-    (license license:lgpl2.1)))
-
-(define-public librsvg
-  (package
-    (name "librsvg")
-    (version "2.40.21")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "mirror://gnome/sources/" name "/"
-                                  (version-major+minor version)  "/"
-                                  name "-" version ".tar.xz"))
-              (sha256
-               (base32
-                "1fljkag2gr7c4k5mn798lgf9903xslz8h51bgvl89nnay42qjqpp"))))
-    (build-system gnu-build-system)
-    (outputs '("out" "debug"))
+    (build-system glib-or-gtk-build-system)
+    (outputs '("out" "bin" "doc"))
     (arguments
      `(#:configure-flags
-       (list "--disable-static"
-             "--enable-vala") ; needed for e.g. gnome-mines
+       (list
+        "--disable-static"
+        "--enable-introspection"
+        (string-append "--with-gir-dir="
+                       (assoc-ref %outputs "out")
+                       "/share/gir-"
+                       ,(version-major
+                         (package-version gobject-introspection))
+                       ".0")
+        (string-append "--with-typelib-dir="
+                       (assoc-ref %outputs "out")
+                       "/lib/girepository-"
+                       ,(version-major
+                         (package-version gobject-introspection))
+                       ".0")
+        (string-append "--with-html-dir="
+                       (assoc-ref %outputs "doc")
+                       "/share/gtk-doc/html")
+        "--with-zlib"
+        "--with-bz2")
        #:phases
        (modify-phases %standard-phases
-         (add-before 'configure 'pre-configure
+         (add-after 'unpack 'patch-docbook-xml
            (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "gdk-pixbuf-loader/Makefile.in"
-               ;; By default the gdk-pixbuf loader is installed under
-               ;; gdk-pixbuf's prefix.  Work around that.
-               (("gdk_pixbuf_moduledir = .*$")
-                (string-append "gdk_pixbuf_moduledir = "
-                               "$(prefix)/lib/gdk-pixbuf-2.0/2.10.0/"
-                                "loaders\n"))
-               ;; Drop the 'loaders.cache' file, it's in gdk-pixbuf+svg.
-               (("gdk_pixbuf_cache_file = .*$")
-                "gdk_pixbuf_cache_file = $(TMPDIR)/loaders.cache\n"))
-             #t))
-         (add-before 'check 'remove-failing-tests
-           (lambda _
-             (with-directory-excursion "tests/fixtures/reftests"
-               (for-each delete-file
-                         '(;; This test fails on i686:
-                           "svg1.1/masking-path-04-b.svg"
-                           ;; This test fails on armhf:
-                           "svg1.1/masking-mask-01-b.svg"
-                           ;; This test fails on aarch64:
-                           "bugs/777834-empty-text-children.svg")))
+             (with-directory-excursion "doc"
+               (substitute* "gsf-docs.xml"
+                 (("http://www.oasis-open.org/docbook/xml/4.5/")
+                  (string-append (assoc-ref inputs "docbook-xml")
+                                 "/xml/dtd/docbook/"))))
              #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("vala" ,vala)
-       ("glib" ,glib "bin")                               ; glib-mkenums, etc.
-       ("gobject-introspection" ,gobject-introspection))) ; g-ir-compiler, etc.
-    (inputs
-     `(;; XXX: 1.44 causes some test failures, so we stick with 1.42 for
-       ;; this ancient version of librsvg.
-       ("pango" ,pango-1.42)
-       ("libcroco" ,libcroco)
-       ("bzip2" ,bzip2)
-       ("libgsf" ,libgsf)
-       ("libxml2" ,libxml2)))
+     `(("docbook-xml" ,docbook-xml)
+       ("gettext" ,gettext-minimal)
+       ("gobject-introspection" ,gobject-introspection)
+       ("perl" ,perl)
+       ("perl-xml-parser" ,perl-xml-parser)
+       ("pkg-config" ,pkg-config)
+       ("python" ,python-wrapper)))
+    (inputs
+     (list bzip2 gdk-pixbuf zlib))
     (propagated-inputs
-     ;; librsvg-2.0.pc refers to all of that.
-     `(("cairo" ,cairo)
-       ("gdk-pixbuf" ,gdk-pixbuf)
-       ("glib" ,glib)))
-    (home-page "https://wiki.gnome.org/LibRsvg")
-    (synopsis "Render SVG files using Cairo")
-    (description
-     "Librsvg is a C library to render SVG files using the Cairo 2D graphics
-library.")
-    (license license:lgpl2.0+)))
+     (list glib libxml2))
+    (synopsis "G Structured File Library")
+    (description "Libgsf aims to provide an efficient extensible I/O abstraction
+for dealing with different structured file formats.")
+    (home-page "https://gitlab.gnome.org/GNOME/libgsf")
+    (license
+     (list
+      ;; Library
+      license:lgpl2.1+
+      ;; Others
+      license:lgpl2.0+))))
 
-(define-public librsvg-next
+(define-public librsvg
   (package
-    (name "librsvg-next")
-    (version "2.50.3")
+    (name "librsvg")
+    (version "2.50.7")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/librsvg/"
@@ -3381,13 +3364,12 @@ library.")
                                   "librsvg-" version ".tar.xz"))
               (sha256
                (base32
-                "0n79i4wj9hm0d3bbn4xvknq5ylhqs16pvhaqr1rxspx9wfc8lad4"))
+                "1g3f8byg5w08fx1bka12mmpl59v6a4q2p827w6m2la6mijq63yzz"))
               (modules '((guix build utils)))
               (snippet
-               '(begin (delete-file-recursively "vendor")
-                       #t))))
+               '(begin (delete-file-recursively "vendor")))))
     (build-system cargo-build-system)
-    (outputs '("out" "debug" "doc"))
+    (outputs '("out" "doc" "debug"))
     (arguments
      `(#:install-source? #f
        #:modules
@@ -3449,8 +3431,7 @@ library.")
                (substitute* "rsvg-docs.xml"
                  (("http://www.oasis-open.org/docbook/xml/4.3/")
                   (string-append (assoc-ref inputs "docbook-xml")
-                                 "/xml/dtd/docbook/"))))
-             #t))
+                                 "/xml/dtd/docbook/"))))))
          (add-after 'unpack 'prepare-for-build
            (lambda _
              ;; In lieu of #:make-flags
@@ -3458,39 +3439,37 @@ library.")
              ;; Something about the build environment resists building
              ;; successfully with the '--locked' flag.
              (substitute* '("Makefile.am" "Makefile.in")
-               (("--locked") ""))
-             #t))
+               (("--locked") ""))))
          (add-before 'configure 'pre-configure
-           (lambda _
+           (lambda* (#:key outputs #:allow-other-keys)
              (substitute* "gdk-pixbuf-loader/Makefile.in"
                ;; By default the gdk-pixbuf loader is installed under
                ;; gdk-pixbuf's prefix.  Work around that.
                (("gdk_pixbuf_moduledir = .*$")
                 (string-append "gdk_pixbuf_moduledir = "
-                               "$(prefix)/lib/gdk-pixbuf-2.0/2.10.0/"
-                               "loaders\n"))
-               ;; Drop the 'loaders.cache' file, it's in gdk-pixbuf+svg.
-               (("gdk_pixbuf_cache_file = .*$")
-                "gdk_pixbuf_cache_file = $(TMPDIR)/loaders.cache\n"))
-             #t))
+                               "$(prefix)/"
+                               ,(dirname %gdk-pixbuf-loaders-cache-file) "/"
+                               "loaders\n")))
+             (substitute* "configure"
+               (("gdk_pixbuf_cache_file=.*")
+                (string-append "gdk_pixbuf_cache_file="
+                               (assoc-ref outputs "out") "/"
+                               ,%gdk-pixbuf-loaders-cache-file "\n")))))
          (add-after 'configure 'gnu-configure
-           (lambda* (#:key inputs native-inputs outputs #:allow-other-keys)
-             ((assoc-ref gnu:%standard-phases 'configure)
-              #:native-inputs native-inputs
-              #:inputs inputs
-              #:outputs outputs
-              #:configure-flags
-              (list "--disable-static"
-                    "--enable-vala"
-               (string-append "--with-html-dir="
-                              (assoc-ref %outputs "doc")
-                              "/share/gtk-doc/html")))))
+           (lambda* (#:key outputs #:allow-other-keys #:rest args)
+             (apply (assoc-ref gnu:%standard-phases 'configure)
+                    #:configure-flags
+                    (list "--disable-static"
+                          "--enable-vala"
+                          (string-append "--with-html-dir="
+                                         (assoc-ref outputs "doc")
+                                         "/share/gtk-doc/html"))
+                    args)))
          (add-after 'configure 'dont-vendor-self
            (lambda* (#:key vendor-dir #:allow-other-keys)
              ;; Don't keep the whole tarball in the vendor directory
              (delete-file-recursively
-              (string-append vendor-dir "/" ,name "-" ,version ".tar.xz"))
-             #t))
+              (string-append vendor-dir "/" ,name "-" ,version ".tar.xz"))))
          (replace 'build
            (assoc-ref gnu:%standard-phases 'build))
          (add-before 'check 'ignore-failing-tests
@@ -3516,8 +3495,7 @@ library.")
                (("fn multiple_input_files_not_allowed_for_png_output" all)
                 (string-append "#[ignore] " all))
                (("fn stylesheet_option_error" all)
-                (string-append "#[ignore] " all)))
-             #t))
+                (string-append "#[ignore] " all)))))
          (replace 'check
            (lambda* args
              ((assoc-ref gnu:%standard-phases 'check)
@@ -3525,26 +3503,24 @@ library.")
          (replace 'install
            (assoc-ref gnu:%standard-phases 'install)))))
     (native-inputs
-     `(("docbook-xml" ,docbook-xml-4.3)
-       ("glib" ,glib "bin")
-       ("gobject-introspection" ,gobject-introspection)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python-wrapper)
-       ("ruby" ,ruby)
-       ("vala" ,vala)))
-    (inputs
-     `(("bzip2" ,bzip2)
-       ("fontconfig" ,fontconfig)
-       ("freetype" ,freetype)
-       ("harfbuzz" ,harfbuzz)
-       ("libcroco" ,libcroco)
-       ("libgsf" ,libgsf)
-       ("libxml2" ,libxml2)
-       ("pango" ,pango)))
+     (list docbook-xml-4.3
+           `(,glib "bin")
+           gobject-introspection
+           pkg-config
+           python-wrapper
+           ruby
+           vala))
+    (inputs
+     (list bzip2
+           fontconfig
+           freetype
+           harfbuzz
+           libcroco
+           libgsf
+           libxml2
+           pango))
     (propagated-inputs
-     `(("cairo" ,cairo)
-       ("gdk-pixbuf" ,gdk-pixbuf)
-       ("glib" ,glib)))
+     (list cairo gdk-pixbuf glib))
     (synopsis "SVG rendering library")
     (description "Librsvg is a library to render SVG images to Cairo surfaces.
 GNOME uses this to render SVG icons.  Outside of GNOME, other desktop
@@ -3553,6 +3529,104 @@ diagrams.")
     (home-page "https://wiki.gnome.org/LibRsvg")
     (license license:lgpl2.1+)))
 
+;; This copy of librsvg uses the bundled rust libraries. It is useful for
+;; packages which have too many dependencies to be rebuilt as frequently
+;; as the rust inputs are updated.
+;; TODO: Remove this package and use packaged rust libraries!
+(define-public librsvg-bootstrap
+  (package
+    (inherit librsvg)
+    (name "librsvg")
+    (version "2.50.7")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnome/sources/librsvg/"
+                                  (version-major+minor version)  "/"
+                                  "librsvg-" version ".tar.xz"))
+              (sha256
+               (base32
+                "1g3f8byg5w08fx1bka12mmpl59v6a4q2p827w6m2la6mijq63yzz"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  (for-each delete-file (find-files "vendor" "\\.a$"))))))
+    (arguments
+     (substitute-keyword-arguments (package-arguments librsvg)
+       ((#:vendor-dir _ "vendor") "vendor")
+       ((#:cargo-inputs _) '())
+       ((#:cargo-development-inputs _) '())))
+    (properties '((hidden? . #t)))))
+
+(define-public librsvg-2.40
+  ;; This is the last version implemented in C.
+  (package
+    (inherit librsvg)
+    (version "2.40.21")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnome/sources/librsvg/"
+                                  (version-major+minor version)
+                                  "/librsvg-" version ".tar.xz"))
+              (sha256
+               (base32
+                "1fljkag2gr7c4k5mn798lgf9903xslz8h51bgvl89nnay42qjqpp"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags (list "--disable-static")
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'pre-configure
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "gdk-pixbuf-loader/Makefile.in"
+               ;; By default the gdk-pixbuf loader is installed under
+               ;; gdk-pixbuf's prefix.  Work around that.
+               (("gdk_pixbuf_moduledir = .*$")
+                (string-append "gdk_pixbuf_moduledir = "
+                               "$(prefix)/lib/gdk-pixbuf-2.0/2.10.0/"
+                                "loaders\n"))
+               ;; Drop the 'loaders.cache' file, it's in gdk-pixbuf+svg.
+               (("gdk_pixbuf_cache_file = .*$")
+                "gdk_pixbuf_cache_file = $(TMPDIR)/loaders.cache\n"))
+             #t))
+         (add-before 'check 'remove-failing-tests
+           (lambda _
+             (with-directory-excursion "tests/fixtures/reftests"
+               (for-each delete-file
+                         '(;; This test fails on i686:
+                           "svg1.1/masking-path-04-b.svg"
+                           ;; This test fails on armhf:
+                           "svg1.1/masking-mask-01-b.svg"
+                           ;; This test fails on aarch64:
+                           "bugs/777834-empty-text-children.svg"
+
+                           ;; These two tests fail due to slightly different
+                           ;; text rendering (different kerning or similar),
+                           ;; nothing alarming.
+                           "bugs/340047.svg"
+                           "bugs/749415.svg"))))))))
+    (native-inputs
+     (list pkg-config
+           `(,glib "bin") ; glib-mkenums, etc.
+           gobject-introspection)) ; g-ir-compiler, etc.
+    (inputs
+     (list pango libcroco bzip2 libgsf libxml2))
+    (propagated-inputs
+     ;; librsvg-2.0.pc refers to all of that.
+     (list cairo gdk-pixbuf glib))
+    (synopsis "Render SVG files using Cairo (ancient C version)")
+    (properties '((hidden? . #t)))))
+
+(define* (librsvg-for-system #:optional
+                             (system (or (%current-target-system)
+                                         (%current-system))))
+  ;; Since librsvg 2.50 depends on Rust, and Rust is only correctly supported
+  ;; on x86_64 so far, use the ancient C version on other platforms (FIXME).
+  (if (string-prefix? "x86_64-" system)
+      librsvg
+      librsvg-2.40))
+
+(export librsvg-for-system)
+
 (define-public libidl
   (package
     (name "libidl")
@@ -3566,11 +3640,9 @@ diagrams.")
                (base32
                 "08129my8s9fbrk0vqvnmx6ph4nid744g5vbwphzkaik51664vln5"))))
     (build-system gnu-build-system)
-    (inputs `(("glib" ,glib)))
+    (inputs (list glib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("flex" ,flex)
-       ("bison" ,bison)))
+     (list pkg-config flex bison))
     (home-page "http://freecode.com/projects/libidl")
     (synopsis "Create trees of CORBA Interface Definition Language files")
     (description  "Libidl is a library for creating trees of CORBA Interface
@@ -3610,15 +3682,22 @@ functionality was designed to be as reusable and portable as possible.")
        ;; ... which they then completly ignore !!
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'fix-parallel-build
+           ;; Parallel build fails because of a failed dependency,
+           ;; https://bugzilla.gnome.org/show_bug.cgi?id=732274
+           (lambda _
+             (substitute* "src/services/name/Makefile.am"
+               (("orbit_name_server_2_DEPENDENCIES = \\$(DEPS) CosNaming.h")
+                "orbit_name_server_2_DEPENDENCIES = \
+$(DEPS) CosNaming.h libname-server-2.a"))))
          (add-before 'configure 'ignore-deprecations
            (lambda _
              (substitute* "linc2/src/Makefile.in"
-               (("-DG_DISABLE_DEPRECATED") "-DGLIB_DISABLE_DEPRECATION_WARNINGS"))
-             #t)))))
-    (inputs `(("glib" ,glib)
-              ("libidl" ,libidl)))
+               (("-DG_DISABLE_DEPRECATED")
+                "-DGLIB_DISABLE_DEPRECATION_WARNINGS")))))))
+    (inputs (list glib libidl))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://projects.gnome.org/orbit2/")
     (synopsis "CORBA 2.4-compliant Object Request Broker")
     (description  "ORBit2 is a CORBA 2.4-compliant Object Request Broker (orb)
@@ -3663,18 +3742,16 @@ featuring mature C, C++ and Python bindings.")
        ;; at <https://forums.gentoo.org/viewtopic-t-223376-start-550.html>.
        ;; Thus, disable parallel builds.
        #:parallel-build? #f))
-    (inputs `(("popt" ,popt)
-              ("libxml2" ,libxml2)))
+    (inputs (list popt libxml2))
     ;; The following are Required by the .pc file
     (propagated-inputs
-     `(("glib" ,glib)
-       ("orbit2" ,orbit2)))
+     (list glib orbit2))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)
-       ("glib" ,glib "bin")             ; for glib-genmarshal, etc.
-       ("flex" ,flex)
-       ("bison" ,bison)))
+     (list intltool
+           pkg-config
+           `(,glib "bin") ; for glib-genmarshal, etc.
+           flex
+           bison))
     (home-page "https://developer.gnome.org/libbonobo/")
     (synopsis "Framework for creating reusable components for use in GNOME applications")
     (description "Bonobo is a framework for creating reusable components for
@@ -3699,14 +3776,13 @@ use in GNOME applications, built on top of CORBA.")
               (sha256
                (base32 "0k3q9nh53yhc9qxf1zaicz4sk8p3kzq4ndjdsgpaa2db0ccbj4hr"))))
     (build-system gnu-build-system)
-    (inputs `(("dbus-glib" ,dbus-glib)
-              ("libxml2" ,libxml2)))
-    (propagated-inputs `(("glib" ,glib) ; referred to in the .pc file
-                         ("orbit2" ,orbit2)))
+    (inputs (list dbus-glib libxml2))
+    (propagated-inputs (list glib ; referred to in the .pc file
+                             orbit2))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("glib" ,glib "bin")             ; for glib-genmarshal, etc.
-       ("pkg-config" ,pkg-config)))
+     (list intltool
+           `(,glib "bin") ; for glib-genmarshal, etc.
+           pkg-config))
     (home-page "https://projects.gnome.org/gconf/")
     (synopsis "Store application preferences")
     (description "Gconf is a system for storing application preferences.  It
@@ -3729,8 +3805,7 @@ is intended for user preferences; not arbitrary data storage.")
                 "1mvg8glb2a40yilmyabmb7fkbzlqd3i3d31kbkabqnq86xdnn69p"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("perl" ,perl)
-       ("intltool" ,intltool)))
+     (list perl intltool))
     (arguments
      '(#:phases (modify-phases %standard-phases
                   (add-after 'configure 'use-our-intltool
@@ -3777,15 +3852,10 @@ designed to be accessed through the MIME functions in GnomeVFS.")
              (substitute* "test/test-async-cancel.c"
                (("EXIT_FAILURE") "77"))
              #t)))))
-    (inputs `(("libxml2" ,libxml2)
-              ("dbus-glib" ,dbus-glib)
-              ("gconf" ,gconf)
-              ("gnome-mime-data" ,gnome-mime-data)
-              ("zlib" ,zlib)))
+    (inputs (list libxml2 dbus-glib gconf gnome-mime-data zlib))
     (native-inputs
-     `(("glib" ,glib "bin")             ; for glib-mkenums, etc.
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list `(,glib "bin") ; for glib-mkenums, etc.
+           intltool pkg-config))
     (home-page "https://developer.gnome.org/gnome-vfs/")
     (synopsis "Access files and folders in GNOME applications")
     (description
@@ -3818,21 +3888,16 @@ to access local and remote files with a single consistent API.")
              (substitute* "libgnome/Makefile.in"
                (("-DG_DISABLE_DEPRECATED") "-DGLIB_DISABLE_DEPRECATION_WARNINGS"))
              #t)))))
-    (inputs `(("libxml2" ,libxml2)))
+    (inputs (list libxml2))
     (native-inputs
-     `(("glib" ,glib "bin")             ; for glib-mkenums, etc.
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list `(,glib "bin") ; for glib-mkenums, etc.
+           intltool pkg-config))
     ;; The following are listed as Required in the .pc file
     ;; (except for libcanberra -- which seems to be oversight on the part
     ;; of the upstream developers -- anything that links against libgnome,
     ;; must also link against libcanberra
     (propagated-inputs
-     `(("libcanberra" ,libcanberra)
-       ("libbonobo" ,libbonobo)
-       ("gconf" ,gconf)
-       ("gnome-vfs" ,gnome-vfs)
-       ("popt" ,popt)))                       ;gnome-program.h includes popt.h
+     (list libcanberra libbonobo gconf gnome-vfs popt))                       ;gnome-program.h includes popt.h
     (home-page "https://developer.gnome.org/libgnome/")
     (synopsis "Useful routines for building applications")
     (description  "The libgnome library provides a number of useful routines
@@ -3856,7 +3921,7 @@ files and URIs, and displaying help.")
                 "1yknfkyzgz9s616is0l9gp5aray0f2ry4dw533jgzj8gq5s1xhgx"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://people.gnome.org/~mathieu/libart")
     (synopsis "2D drawing library")
     (description  "Libart is a 2D drawing library intended as a
@@ -3879,12 +3944,11 @@ high-quality vector-based 2D library with antialiasing and alpha composition.")
                 "1nhnq4lfkk8ljkdafscwaggx0h95mq0rxnd7zgqyq0xb6kkqbjm8"))))
     (build-system gnu-build-system)
     ;; Mentioned as Required in the .pc file
-    (propagated-inputs `(("libart-lgpl" ,libart-lgpl)
-                         ("gtk+" ,gtk+-2)))
+    (propagated-inputs (list libart-lgpl gtk+-2))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("glib" ,glib "bin")             ; for glib-genmarshal, etc.
-       ("pkg-config" ,pkg-config)))
+     (list intltool
+           `(,glib "bin") ; for glib-genmarshal, etc.
+           pkg-config))
     (home-page "https://developer.gnome.org/libgnomecanvas/")
     (synopsis "Flexible widget for creating interactive structured graphics")
     (description  "The GnomeCanvas widget provides a flexible widget for
@@ -3904,10 +3968,9 @@ creating interactive structured graphics.")
                (base32
                 "0679hcnpam2gkag2i63sm0wdm35gwvzafnz1354mg6j5gzwpfrcr"))))
     (build-system gnu-build-system)
-    (propagated-inputs `(("libgnomecanvas" ,libgnomecanvas)))
+    (propagated-inputs (list libgnomecanvas))
     (native-inputs
-     `(("gtkmm-2" ,gtkmm-2)
-       ("pkg-config" ,pkg-config)))
+     (list gtkmm-2 pkg-config))
     (home-page "https://gtkmm.org")
     (synopsis "C++ bindings to the GNOME Canvas library")
     (description "C++ bindings to the GNOME Canvas library.")
@@ -3928,19 +3991,12 @@ creating interactive structured graphics.")
                 "03rwbli76crkjl6gp422wrc9lqpl174k56cp9i96b7l8jlj2yddf"))))
     (build-system gnu-build-system)
     ;; Mentioned as Required in the .pc file
-    (propagated-inputs `(("libbonoboui" ,libbonoboui)
-                         ("libgnome" ,libgnome)
-                         ("libgnomecanvas" ,libgnomecanvas)
-                         ("libgnome-keyring" ,libgnome-keyring)))
-    (inputs `(("libjpeg" ,libjpeg-turbo)
-              ("popt" ,popt)
-              ("libbonobo" ,libbonobo)
-              ("libxml2" ,libxml2)
-              ("libglade" ,libglade)))
-    (native-inputs
-     `(("glib" ,glib "bin")             ; for glib-mkenums, etc.
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+    (propagated-inputs (list libbonoboui libgnome libgnomecanvas
+                             libgnome-keyring))
+    (inputs (list libjpeg-turbo popt libbonobo libxml2 libglade))
+    (native-inputs
+     (list `(,glib "bin") ; for glib-mkenums, etc.
+           intltool pkg-config))
     (home-page "https://developer.gnome.org/libgnomeui/")
     (synopsis "Additional widgets for applications")
     (description "The libgnomeui library provides additional widgets for
@@ -3962,12 +4018,11 @@ ported to GTK+.")
                 "1v2x2s04jry4gpabws92i0wq2ghd47yr5n9nhgnkd7c38xv1wdk4"))))
     (build-system gnu-build-system)
     (inputs
-     `(("python" ,python))) ;; needed for the optional libglade-convert program
+     (list python)) ;; needed for the optional libglade-convert program
     (propagated-inputs
-     `(("gtk+-2" ,gtk+-2)
-       ("libxml2" ,libxml2))) ; required by libglade-2.0.pc
+     (list gtk+-2 libxml2)) ; required by libglade-2.0.pc
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://developer.gnome.org/libglade")
     (synopsis "Load glade interfaces and access the glade built widgets")
     (description "Libglade is a library that provides interfaces for loading
@@ -4002,18 +4057,14 @@ widgets built in the loading process.")
                ;; Therefore we must do it.
                (zero? (system (format #f "~a/bin/Xvfb ~a &" xorg-server disp)))))))))
     ;; Mentioned as Required by the .pc file
-    (propagated-inputs `(("libxml2" ,libxml2)))
+    (propagated-inputs (list libxml2))
     (inputs
-     `(("popt" ,popt)
-       ("pangox-compat" ,pangox-compat)
-       ("libgnome" ,libgnome)
-       ("libgnomecanvas" ,libgnomecanvas)
-       ("libglade" ,libglade)))
+     (list popt pangox-compat libgnome libgnomecanvas libglade))
     (native-inputs
-     `(("glib" ,glib "bin")             ; for glib-genmarshal, etc.
-       ("intltool" ,intltool)
-       ("xorg-server" ,xorg-server-for-tests) ; For running the tests
-       ("pkg-config" ,pkg-config)))
+     (list `(,glib "bin") ; for glib-genmarshal, etc.
+           intltool
+           xorg-server-for-tests ; For running the tests
+           pkg-config))
     (home-page "https://developer.gnome.org/libbonoboui/")
     (synopsis "Some user interface controls using Bonobo")
     (description  "The Bonobo UI library provides a number of user interface
@@ -4034,14 +4085,12 @@ controls using the Bonobo component framework.")
                 "1jp3p1lnwnwi6fxl2rz3166cmwzwy9vqz896anpwc3wdy9f875cm"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("glib" ,glib "bin") ; for glib-mkenums
-       ("gobject-introspection" ,gobject-introspection) ; for g-ir-scanner
-       ("intltool" ,intltool)))
+     (list pkg-config
+           `(,glib "bin") ; for glib-mkenums
+           gobject-introspection ; for g-ir-scanner
+           intltool))
     (propagated-inputs
-     `(("gtk+" ,gtk+)
-       ("libxres" ,libxres)
-       ("startup-notification" ,startup-notification)))
+     (list gtk+ libxres startup-notification))
     (home-page "https://developer.gnome.org/libwnck/")
     (synopsis "Window Navigator Construction Kit")
     (description
@@ -4066,12 +4115,9 @@ Hints specification (EWMH).")
                 "15713yl0f8f3p99jzqqfmbicrdswd3vwpx7r3bkf1bgh6d9lvs4b"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (propagated-inputs
-     `(("gtk+" ,gtk+-2)
-       ("libxres" ,libxres)
-       ("startup-notification" ,startup-notification)))))
+     (list gtk+-2 libxres startup-notification))))
 
 (define-public goffice
   (package
@@ -4092,15 +4138,10 @@ Hints specification (EWMH).")
                                               (assoc-ref %outputs "doc")
                                               "/share/gtk-doc/html"))))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("libgsf" ,libgsf)
-       ("librsvg" ,librsvg)
-       ("libxslt" ,libxslt)
-       ("libxml2" ,libxml2)))
+     (list gtk+ libgsf librsvg libxslt libxml2))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("glib" ,glib "bin")
-       ("pkg-config" ,pkg-config)))
+     (list intltool
+           `(,glib "bin") pkg-config))
     (home-page "https://developer.gnome.org/goffice/")
     (synopsis "Document-centric objects and utilities")
     (description "A GLib/GTK+ set of document-centric objects and utilities.")
@@ -4132,7 +4173,7 @@ Hints specification (EWMH).")
        ,@(package-arguments goffice)))
     (propagated-inputs
      ;; libgoffice-0.8.pc mentions libgsf-1
-     `(("libgsf" ,libgsf)))
+     (list libgsf))
     (inputs
      `(("gtk" ,gtk+-2)
        ,@(alist-delete "gtk" (package-inputs goffice))))))
@@ -4169,16 +4210,16 @@ Hints specification (EWMH).")
                                (assoc-ref outputs "out")
                                "/goffice/plugins"))))))))
     (inputs
-     `(("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("goffice" ,goffice)
-       ("libgsf" ,libgsf)
-       ("librsvg" ,librsvg)
-       ("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)
-       ("python" ,python)
-       ("python-pygobject" ,python-pygobject)
-       ("zlib" ,zlib)))
+     (list glib
+           gtk+
+           goffice
+           libgsf
+           librsvg
+           libxml2
+           libxslt
+           python
+           python-pygobject
+           zlib))
     (native-inputs
      `(("bison" ,bison)
        ("docbook-xml" ,docbook-xml)
@@ -4226,7 +4267,7 @@ engineering.")
                                            (package-version python))
                                          "/site-packages")))
                (wrap-program prog
-                 `("PYTHONPATH" = (,(getenv "PYTHONPATH") ,pylib))
+                 `("PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH") ,pylib))
                  `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH"))))))))))
     (native-inputs
      `(("desktop-file-utils" ,desktop-file-utils)
@@ -4236,12 +4277,12 @@ engineering.")
        ("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)))
+     (list librsvg
+           gsettings-desktop-schemas
+           gtk+
+           pango
+           python-pycairo
+           python-pygobject))
     (home-page "https://maoschanz.github.io/drawing/")
     (synopsis "Basic image editor for GNOME")
     (description
@@ -4287,15 +4328,15 @@ engineering.")
 (define-public seahorse
   (package
     (name "seahorse")
-    (version "3.36.2")
+    (version "41.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://gnome/sources/" name "/"
-                           (version-major+minor version) "/" name "-"
+                           (version-major version) "/" name "-"
                            version ".tar.xz"))
        (sha256
-        (base32 "16wmxxppgcgfj8zkagcny5af1c81x32ysm9d6j9f2k7bmik21ss5"))))
+        (base32 "1x99i7kdvd8hbxcs5rfrq7nw6r9bfzaw263zaigjjj04h6gc1vp6"))))
     (build-system meson-build-system)
     (arguments
      '(#:glib-or-gtk? #t
@@ -4306,7 +4347,11 @@ engineering.")
            (lambda _
              (substitute* "build-aux/meson_post_install.py"
                (("gtk-update-icon-cache") "true"))
-             #t)))))
+             #t))
+         (add-before 'check 'pre-check
+           (lambda _
+             ;; Tests require a writable HOME.
+             (setenv "HOME" (getcwd)))))))
     (inputs
      `(("gtk+" ,gtk+)
        ("gcr" ,gcr)
@@ -4315,15 +4360,16 @@ engineering.")
        ("openldap" ,openldap)
        ("openssh" ,openssh)
        ("avahi" ,avahi)
-       ("libhandy" ,libhandy-0.0)
+       ("libhandy" ,libhandy)
        ("libpwquality" ,libpwquality)
        ("libsecret" ,libsecret)
-       ("libsoup" ,libsoup)))
+       ("libsoup" ,libsoup-minimal-2)))
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("glib:bin" ,glib "bin")
        ("itstool" ,itstool)
        ("pkg-config" ,pkg-config)
+       ("python" ,python)
        ("vala" ,vala)
        ("xmllint" ,libxml2)))
     (home-page "https://wiki.gnome.org/Apps/Seahorse")
@@ -4336,52 +4382,61 @@ passwords in the GNOME keyring.")
 (define-public vala
   (package
     (name "vala")
-    (version "0.46.5")
+    (version "0.54.2")
     (source (origin
               (method url-fetch)
-              (uri (string-append "mirror://gnome/sources/" name "/"
+              (uri (string-append "mirror://gnome/sources/vala/"
                                   (version-major+minor version) "/"
-                                  name "-" version ".tar.xz"))
+                                  "vala-" version ".tar.xz"))
               (sha256
                (base32
-                "07fv895sp9wq74b20qig7hic0r4ynrr5pfaqba02r44xb794fy0s"))))
-    (build-system gnu-build-system)
+                "048k5c6c6y7jyb961krnrb7m0kghr0yrkpnfx3j5ckbx652yfkc8"))))
+    (build-system glib-or-gtk-build-system)
     (arguments
-     '(#:phases
+     '(#:configure-flags '("--enable-coverage")
+       #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'patch-docbook-xml
+           (lambda* (#:key inputs #:allow-other-keys)
+             (with-directory-excursion "doc/manual"
+               (substitute* '("manual.xml" "version.xml.in")
+                 (("http://www.oasis-open.org/docbook/xml/4.4/")
+                  (string-append (assoc-ref inputs "docbook-xml")
+                                 "/xml/dtd/docbook/"))))))
          (add-before 'check 'pre-check
-                     (lambda _
-                       (setenv "CC" "gcc")
-                       (substitute* "valadoc/tests/testrunner.sh"
-                         (("export PKG_CONFIG_PATH=" m)
-                          (string-append m "$PKG_CONFIG_PATH:")))
-                       ;; For missing '/etc/machine-id'.
-                       (setenv "DBUS_FATAL_WARNINGS" "0")
-                       #t)))))
+           (lambda _
+             (setenv "CC" "gcc")
+             (substitute* "valadoc/tests/libvaladoc\
+/tests-extra-environment.sh"
+               (("export PKG_CONFIG_PATH=" m)
+                (string-append m "$PKG_CONFIG_PATH:"))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
+     `(("bison" ,bison)
+       ("dbus" ,dbus)                   ; for dbus tests
+       ("docbook-xml" ,docbook-xml-4.4)
+       ("docbook-xsl" ,docbook-xsl)
        ("flex" ,flex)
-       ("bison" ,bison)
-       ("xsltproc" ,libxslt)
-       ("dbus" ,dbus)                                     ; for dbus tests
-       ("gobject-introspection" ,gobject-introspection))) ; for gir tests
-    (inputs
-     `(("graphviz" ,graphviz)))
+       ("gobject-introspection" ,gobject-introspection) ; for gir tests
+       ("help2man" ,help2man)
+       ("perl" ,perl)
+       ("pkg-config" ,pkg-config)
+       ("xsltproc" ,libxslt)))
     (propagated-inputs
-     `(("glib" ,glib))) ; required by libvala-0.40.pc
+     `(("glib" ,glib)                   ; required by libvala-0.40.pc
+       ("libgvc" ,graphviz)))
     (home-page "https://wiki.gnome.org/Projects/Vala/")
-    (synopsis "Compiler for the GObject type system")
-    (description
-     "Vala is a programming language that aims to bring modern programming
-language features to GNOME developers without imposing any additional runtime
-requirements and without using a different ABI compared to applications and
-libraries written in C.")
+    (synopsis "Compiler using the GObject type system")
+    (description "Vala is a programming language using modern high level
+abstractions without imposing additional runtime requirements and without using
+a different ABI compared to applications and libraries written in C.  Vala uses
+the GObject type system and has additional code generation routines that make
+targeting the GNOME stack simple.")
     (license license:lgpl2.1+)))
 
-(define-public vala-0.50
-  (package
-    (inherit vala)
-    (version "0.50.2")
+;;; An older variant kept to build libsoup-minimal-2.
+(define-public vala-0.52
+  (package/inherit vala
+    (version "0.52.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/vala/"
@@ -4389,12 +4444,12 @@ libraries written in C.")
                                   "vala-" version ".tar.xz"))
               (sha256
                (base32
-                "1nnf0x6vk0a9p2y6z7jwjfvmlxh3qhj581v381r0y1sxsv35s39c"))))))
+                "12y6p8wdjp01vmfhxg2cgh32xnyqq6ivblvrar9clnj6vc867qhx"))))))
 
 (define-public vte
   (package
     (name "vte")
-    (version "0.60.3")
+    (version "0.64.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/vte/"
@@ -4402,7 +4457,7 @@ libraries written in C.")
                                   "vte-" version ".tar.xz"))
               (sha256
                (base32
-                "0al2v6fn061v4j1wwvppim1q283y2a6s0iyl29hxhmx3h48nxdzy"))))
+                "063ys3330cvhbz1dln9irhciavb2prw098lvhpcc2rx6cl5q4g1b"))))
     (build-system meson-build-system)
     (arguments
      `(#:configure-flags
@@ -4415,11 +4470,12 @@ libraries written in C.")
        ("gobject-introspection" ,gobject-introspection)
        ("glib" ,glib "bin")             ; for glib-genmarshal, etc.
        ("gperf" ,gperf)
+       ("python" ,python)
        ("xmllint" ,libxml2)))
     (propagated-inputs
-     `(("gtk+" ,gtk+)                   ; required by vte-2.91.pc
-       ("gnutls" ,gnutls)               ; ditto
-       ("pcre2" ,pcre2)))               ; ditto
+     (list gtk+ ; required by vte-2.91.pc
+           gnutls ; ditto
+           pcre2))               ; ditto
     (home-page "https://www.gnome.org/")
     (synopsis "Virtual Terminal Emulator")
     (description
@@ -4443,11 +4499,8 @@ editors, IDEs, etc.")
                (base32
                 "0rnm5c6m3abbm81jsfdas0y80z299ny54gr4syn4bfrms3s4g19l"))))
     (build-system meson-build-system)
-    (native-inputs
-     `(("gtk-doc" ,gtk-doc/stable)
-       ,@(package-native-inputs vte)))
     (arguments
-     `(#:configure-flags '("-Ddocs=true")))
+     (list #:configure-flags #~(list "-Ddocs=false")))
   (synopsis "Enhanced VTE terminal widget")
   (description
    "VTE is a library (libvte) implementing a terminal emulator widget for
@@ -4474,12 +4527,11 @@ selection and URL hints.")))
     (arguments
      '(#:configure-flags '("--disable-python")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-       ("glib" ,glib "bin")))   ; for glib-genmarshal, etc.
+     (list pkg-config intltool
+           `(,glib "bin")))   ; for glib-genmarshal, etc.
     (propagated-inputs
-     `(("gtk+" ,gtk+-2)         ; required by libvte.pc
-       ("ncurses" ,ncurses))))) ; required by libvte.la
+     (list gtk+-2 ; required by libvte.pc
+           ncurses)))) ; required by libvte.la
 
 (define-public vinagre
   (package
@@ -4499,7 +4551,8 @@ selection and URL hints.")))
     (arguments
      ;; Disable -Werror and such, to avoid build failures on compilation
      ;; warnings.
-     '(#:configure-flags '("--enable-compile-warnings=minimum")
+     '(#:configure-flags '("--enable-compile-warnings=minimum"
+                           "CFLAGS=-O2 -g -fcommon")
        #:phases
        (modify-phases %standard-phases
          (add-before 'install 'skip-gtk-update-icon-cache
@@ -4519,15 +4572,15 @@ selection and URL hints.")))
        ("itstool" ,itstool)
        ("glib-bin" ,glib "bin")))                 ;for glib-compile-schemas
     (inputs
-     `(("libxml2" ,libxml2)
-       ("gtk-vnc" ,gtk-vnc)
-       ("gnome-keyring" ,gnome-keyring)
-       ("libsecret" ,libsecret)
-       ("freerdp" ,freerdp)
-       ("spice" ,spice)
-       ("spice-gtk" ,spice-gtk)
-       ("telepathy-glib" ,telepathy-glib)
-       ("vte" ,vte)))
+     (list libxml2
+           gtk-vnc
+           gnome-keyring
+           libsecret
+           freerdp
+           spice
+           spice-gtk
+           telepathy-glib
+           vte))
     (home-page "https://wiki.gnome.org/Apps/Vinagre")
     (synopsis "Remote desktop viewer for GNOME")
     (description "Vinagre is a remote display client supporting the VNC, SPICE
@@ -4537,7 +4590,7 @@ and RDP protocols.")
 (define-public dconf
   (package
     (name "dconf")
-    (version "0.36.0")
+    (version "0.40.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -4546,14 +4599,13 @@ and RDP protocols.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0bfs069pjv6lhp7xrzmrhz3876ay2ryqxzc6mlva1hhz34ibprlz"))))
+                "0cs5nayg080y8pb9b7qccm1ni8wkicdmqp1jsgc22110r6j24zyg"))))
     (build-system meson-build-system)
     (propagated-inputs
      ;; In Requires of dconf.pc.
-     `(("glib" ,glib)))
+     (list glib))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("dbus" ,dbus)))
+     (list gtk+ dbus))
     (native-inputs
      `(("bash-completion" ,bash-completion)
        ("libxslt" ,libxslt)                     ;for xsltproc
@@ -4563,10 +4615,11 @@ and RDP protocols.")
        ("glib:bin" ,glib "bin")
        ("gtk-doc" ,gtk-doc/stable)
        ("pkg-config" ,pkg-config)
+       ("python" ,python)
        ("vala" ,vala)))
     (arguments
      `(#:glib-or-gtk? #t
-       #:configure-flags '("-Denable-gtk-doc=true")
+       #:configure-flags '("-Dgtk_doc=true")
        #:phases (modify-phases %standard-phases
                   (add-after 'unpack 'increase-test-timeout
                     (lambda _
@@ -4574,8 +4627,7 @@ and RDP protocols.")
                       ;; much longer than the default of 30 seconds.
                       (substitute* "tests/meson.build"
                         (("test\\(unit_test\\[0\\], exe" all)
-                         (string-append all ", timeout : 90")))
-                      #t)))))
+                         (string-append all ", timeout: 300"))))))))
     (home-page "https://developer.gnome.org/dconf/")
     (synopsis "Low-level GNOME configuration system")
     (description "Dconf is a low-level configuration system.  Its main purpose
@@ -4583,36 +4635,91 @@ is to provide a backend to GSettings on platforms that don't already have
 configuration storage systems.")
     (license license:lgpl2.1+)))
 
-(define-public json-glib
+(define-public json-glib-minimal
   (package
-    (name "json-glib")
-    (version "1.4.4")
+    (name "json-glib-minimal")
+    (version "1.6.2")
     (source (origin
               (method url-fetch)
-              (uri (string-append "mirror://gnome/sources/" name "/"
-                                  (version-major+minor version) "/"
-                                  name "-" version ".tar.xz"))
+              (uri (string-append "mirror://gnome/sources/json-glib/"
+                                  (version-major+minor version)
+                                  "/json-glib-" version ".tar.xz"))
               (sha256
                (base32
-                "0ixwyis47v5bkx6h8a1iqlw3638cxcv57ivxv4gw2gaig51my33j"))))
+                "092g2dyy1hhl0ix9kp33wcab0pg1qicnsv0cj5ms9g9qs336cgd3"))))
     (build-system meson-build-system)
+    (arguments
+     `(#:glib-or-gtk? #t))           ; To wrap binaries and/or compile schemas
     (native-inputs
      `(("gettext" ,gettext-minimal)
-       ("glib" ,glib "bin")              ;for glib-mkenums and glib-genmarshal
-       ("gobject-introspection" ,gobject-introspection)
+       ("glib" ,glib "bin")             ;for glib-mkenums and glib-genmarshal
        ("pkg-config" ,pkg-config)))
+    (inputs
+     (list bash-minimal))
     (propagated-inputs
-     `(("glib" ,glib)))                         ;according to json-glib-1.0.pc
+     (list glib))                 ;according to json-glib-1.0.pc
     (home-page "https://wiki.gnome.org/Projects/JsonGlib")
-    (synopsis "Compiler for the GObject type system")
-    (description
-     "JSON-GLib is a C library based on GLib providing serialization and
-deserialization support for the JavaScript Object Notation (JSON) format
-described by RFC 4627.  It provides parser and generator GObject classes and
-various wrappers for the complex data types employed by JSON, such as arrays
-and objects.")
+    (synopsis "Glib and GObject implementation of JSON")
+    (description "JSON-GLib is a library providing serialization and
+described by RFC 4627.  It implements a full JSON parser and generator using
+GLib and GObject, and integrates JSON with GLib data types.")
     (license license:lgpl2.1+)))
 
+(define-public json-glib
+  (package/inherit json-glib-minimal
+    (name "json-glib")
+    (outputs (cons "doc" (package-outputs json-glib-minimal)))
+    (arguments
+     (substitute-keyword-arguments (package-arguments json-glib-minimal)
+       ((#:configure-flags _)
+        `(list "-Ddocs=true"
+               "-Dman=true"
+               ,@(if (%current-target-system)
+                     ;; If enabled, gtkdoc-scangobj will try to execute a
+                     ;; cross-compiled binary.
+                     '("-Dgtk_doc=disabled"
+                       ;; Trying to build introspection data when cross-compiling
+                       ;; causes errors during linking.
+                       "-Dintrospection=disabled")
+                     '())))
+       ((#:phases phases '%standard-phases)
+        `(modify-phases ,phases
+           (add-after 'unpack 'patch-docbook
+             (lambda* (#:key native-inputs inputs #:allow-other-keys)
+               (with-directory-excursion "doc"
+                 (substitute* (find-files "." "\\.xml$")
+                   (("http://www.oasis-open.org/docbook/xml/4\\.3/")
+                    (string-append (assoc-ref (or native-inputs inputs)
+                                              "docbook-xml")
+                                   "/xml/dtd/docbook/")))
+                 (substitute* "meson.build"
+                   (("http://docbook.sourceforge.net/release/xsl/current/")
+                    (string-append (assoc-ref (or native-inputs inputs)
+                                              "docbook-xsl")
+                                   "/xml/xsl/docbook-xsl-1.79.2/"))))))
+           ;; When cross-compiling, there are no docs to move.
+           ,(if (%current-target-system)
+                '(add-after 'install 'stub-docs
+                   (lambda* (#:key outputs #:allow-other-keys)
+                     ;; The daemon doesn't like empty output paths.
+                     (mkdir (assoc-ref outputs "doc"))))
+                '(add-after 'install 'move-docs
+                   (lambda* (#:key outputs #:allow-other-keys)
+                     (let* ((out (assoc-ref outputs "out"))
+                            (doc (assoc-ref outputs "doc")))
+                       (mkdir-p (string-append doc "/share"))
+                       (rename-file
+                        (string-append out "/share/gtk-doc")
+                        (string-append doc "/share/gtk-doc"))))))))))
+    (native-inputs
+     (append
+         `(("docbook-xml" ,docbook-xml-4.3)
+           ("docbook-xsl" ,docbook-xsl)
+           ("gobject-introspection" ,gobject-introspection)
+           ("gtk-doc" ,gtk-doc)
+           ("xsltproc" ,libxslt))
+         (package-native-inputs json-glib-minimal)))))
+
 (define-public libxklavier
   (package
     (name "libxklavier")
@@ -4646,14 +4753,9 @@ and objects.")
        ("libtool" ,libtool)))
     (propagated-inputs
      ;; Required by libxklavier.pc.
-     `(("glib"    ,glib)
-       ("libxml2" ,libxml2)))
+     (list glib libxml2))
     (inputs
-     `(("iso-codes"        ,iso-codes)
-       ("libxi"            ,libxi)
-       ("libxkbfile"       ,libxkbfile)
-       ("xkbcomp"          ,xkbcomp)
-       ("xkeyboard-config" ,xkeyboard-config)))
+     (list iso-codes libxi libxkbfile xkbcomp xkeyboard-config))
     (home-page "https://www.freedesktop.org/wiki/Software/LibXklavier/")
     (synopsis "High-level API for X Keyboard Extension")
     (description
@@ -4679,11 +4781,9 @@ indicators etc).")
          "1s8f9rns9v7qlwjv9qh9lr8crp88dpzfm45hj47zc3ivpy0dbnq9"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("python" ,python-2)
-       ("python2-pygtk" ,python2-pygtk)
-       ("librsvg" ,librsvg)))
+     (list python-2 python2-pygtk librsvg))
     (home-page "https://www.gnome.org")
     (synopsis "Python bindings to librsvg")
     (description
@@ -4697,7 +4797,7 @@ library.")
 (define-public glib-networking
   (package
     (name "glib-networking")
-    (version "2.62.2")
+    (version "2.70.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/glib-networking/"
@@ -4705,23 +4805,36 @@ library.")
                                   "glib-networking-" version ".tar.xz"))
               (sha256
                (base32
-                "0i2mw75297ql72h47vyvff3hqa0kcmqybblj52fqrarb0kfbhi06"))))
+                "0dbg1na239mbavn4hknkax5sns9q2dbdnqw9wcpmhv58mzkhid36"))
+              (patches
+               (search-patches "glib-networking-gnutls-binding.patch"))))
     (build-system meson-build-system)
     (arguments
-     `(#:configure-flags '("-Dlibproxy_support=false")))
+     (if (target-64bit?)
+         '()
+         (list #:phases
+               #~(modify-phases %standard-phases
+                   (add-after 'unpack 'work-around-32-bit-time-t
+                     (lambda _
+                       (invoke "patch" "--force" "-p1" "-i"
+                               #$(local-file
+                                  (search-patch
+                                   "glib-networking-32-bit-time.patch")))))))))
     (native-inputs
      `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+       ("gettext" ,gettext-minimal)))
     (inputs
-     `(("glib" ,glib)
-       ("gnutls" ,gnutls)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)))
-    (home-page "https://www.gnome.org")
-    (synopsis "Network-related GIO modules")
+     (list glib gnutls gsettings-desktop-schemas libproxy))
+    (home-page "https://wiki.gnome.org/Projects/GLib")
+    (synopsis "Network extensions for GLib")
     (description
-     "This package contains various network related extensions for the GIO
-library.")
-    (license license:lgpl2.0+)))
+     "Glib-networking contains the implementations of certain GLib networking
+features that cannot be implemented directly in GLib itself because of their
+dependencies.  Currently it contains GnuTLS and OpenSSL-based implementations of
+GTlsBackend, a libproxy-based implementation of GProxyResolver,
+GLibproxyResolver, and a GNOME GProxyResolver that uses the proxy information
+from the GSettings schemas in gsettings-desktop-schemas.")
+    (license license:lgpl2.1+)))
 
 (define-public rest
   (package
@@ -4747,7 +4860,7 @@ library.")
     (propagated-inputs
      ;; rest-0.7.pc refers to all these.
      `(("glib"    ,glib)
-       ("libsoup" ,libsoup)
+       ("libsoup" ,libsoup-minimal-2)
        ("libxml2" ,libxml2)))
     (home-page "https://www.gtk.org/")
     (synopsis "RESTful web api query library")
@@ -4757,10 +4870,11 @@ claim to be \"RESTful\".  It includes convenience wrappers for libsoup and
 libxml to ease remote use of the RESTful API.")
     (license license:lgpl2.1+)))
 
-(define-public libsoup
+;;; A minimal version of libsoup used to prevent a cycle with Inkscape.
+(define-public libsoup-minimal
   (package
-    (name "libsoup")
-    (version "2.72.0")
+    (name "libsoup-minimal")
+    (version "3.0.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/libsoup/"
@@ -4768,25 +4882,12 @@ libxml to ease remote use of the RESTful API.")
                                   "libsoup-" version ".tar.xz"))
               (sha256
                (base32
-                "11skbyw2pw32178q3h8pi7xqa41b2x4k6q4k9f75zxmh8s23y30p"))))
+                "0ysnvvfd2f6w2z6g31spqqb8wgyamixc7mryzbbpyw0z15g8plsv"))))
     (build-system meson-build-system)
-    (outputs '("out" "doc"))
     (arguments
-     `(#:modules ((guix build utils)
-                  (guix build meson-build-system)
-                  (ice-9 popen))
-
-       #:configure-flags '("-Dgtk_doc=true")
+     `(#:configure-flags '("-Dgtk_doc=false")
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'patch-docbook-xml
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let ((xmldoc (string-append (assoc-ref inputs "docbook-xml")
-                                          "/xml/dtd/docbook")))
-               (substitute* (find-files "docs/reference")
-                 (("http://.*/docbookx\\.dtd")
-                  (string-append xmldoc "/docbookx.dtd")))
-               #t)))
          (add-after 'unpack 'adjust-tests
            (lambda _
              ;; This test fails due to missing /etc/nsswitch.conf
@@ -4795,93 +4896,37 @@ libxml to ease remote use of the RESTful API.")
                ((".*/sockets/unconnected.*") ""))
 
              ;; These fail because "subdomain.localhost" does not resolve in
-             ;; the build environment.
-             (substitute* "tests/hsts-test.c"
-               ((".*/hsts/basic.*") "")
-               ((".*/hsts/subdomains.*") "")
-               ((".*/hsts/superdomain.*") "")
-               ((".*/hsts/utf8-address.*") ""))
+             ;; the build environment.  Moreover, the hsts-test suite fails on
+             ;; i686-linux because of errors from `session_get_uri' like
+             ;; "Unexpected status 200 OK (expected 301 Moved Permanently)"
+             ;; (see: https://gitlab.gnome.org/GNOME/libsoup/-/issues/239).
+             (substitute* "tests/meson.build"
+               ((".*'name': 'hsts'.*") ""))
              (substitute* "tests/hsts-db-test.c"
-               ((".*/hsts-db/subdomains.*") ""))
-
-             ;; Generate a self-signed certificate that has "localhost" as its
-             ;; 'dnsName'.  Failing to do that, and starting with GnuTLS
-             ;; 3.5.12, tests such as "ssl-tests" fail:
-             ;;
-             ;; ERROR:ssl-test.c:406:do_tls_interaction_test: Unexpected status 6 Unacceptable TLS certificate (expected 200 OK)
-             ;;
-             ;; 'certtool' is interactive so we have to pipe it the answers.
-             ;; Reported at <https://bugzilla.gnome.org/show_bug.cgi?id=784696>.
-             (let ((pipe (open-output-pipe "certtool --generate-self-signed \
- --load-privkey tests/test-key.pem --outfile tests/test-cert.pem")))
-               (for-each (lambda (line)
-                           (display line pipe)
-                           (newline pipe))
-                         '(""               ;Common name
-                           ""               ;UID
-                           "Guix"           ;Organizational unit name
-                           "GNU"            ;Organization name
-                           ""               ;Locality name
-                           ""               ;State or province
-                           ""               ;Country
-                           ""               ;subject's domain component (DC)
-                           ""               ;E-mail
-                           ""               ;serial number
-                           "-1"             ;expiration time
-                           "N"              ;belong to authority?
-                           "N"              ;web client certificate?
-                           "N"              ;IPsec IKE?
-                           "Y"              ;web server certificate?
-                           "localhost"      ;dnsName of subject
-                           ""               ;dnsName of subject (end)
-                           ""               ;URI of subject
-                           "127.0.0.1"      ;IP address of subject
-                           ""               ;signing?
-                           ""               ;encryption (RSA)?
-                           ""               ;data encryption?
-                           ""               ;sign OCSP requests?
-                           ""               ;sign code?
-                           ""               ;time stamping?
-                           ""               ;email protection?
-                           ""               ;URI of the CRL distribution point
-                           "y"              ;above info OK?
-                           ))
-               (close-pipe pipe))
-             #t))
-         (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"))
-               (copy-recursively (string-append out "/share/gtk-doc")
-                                 (string-append doc "/share/gtk-doc"))
-               (delete-file-recursively (string-append out "/share/gtk-doc"))
-               #t))))))
-    (native-inputs
-     `(("docbook-xml" ,docbook-xml-4.1.2)
-       ("glib:bin" ,glib "bin")                   ; for glib-mkenums
-       ("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc/stable)
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python-wrapper)
-       ("vala" ,vala)
-       ("php" ,php)
-       ("curl" ,curl)
-       ("gnutls" ,gnutls)                         ;for 'certtool'
-       ("httpd" ,httpd)))
+               ((".*/hsts-db/subdomains.*") "")))))))
+    (native-inputs
+     (list `(,glib "bin") ;for glib-mkenums
+           gobject-introspection
+           intltool
+           pkg-config
+           python-wrapper
+           vala
+           curl
+           gnutls ;for 'certtool'
+           httpd))
     (propagated-inputs
-     ;; libsoup-2.4.pc refers to all of these (except where otherwise noted)
-     `(("brotli" ,google-brotli)
-       ("glib" ,glib)
-       ("glib-networking" ,glib-networking)       ; for GIO runtime modules
-       ("libpsl" ,libpsl)
-       ("libxml2" ,libxml2)
-       ("sqlite" ,sqlite)
-       ("zlib" ,zlib)))
-    (inputs
-     `(("mit-krb5" ,mit-krb5)
-       ("ntlm_auth" ,samba))) ; For ntlm_auth support
+     ;; libsoup-3.0.pc refers to all of these (except where otherwise noted)
+     (list brotli
+           glib
+           glib-networking ; for GIO runtime modules
+           libpsl
+           nghttp2 ;for pkg-config
+           `(,nghttp2 "lib")
+           libxml2
+           sqlite
+           zlib))
+    (inputs
+     (list mit-krb5 samba/fixed))     ; For ntlm_auth support
     (home-page "https://wiki.gnome.org/Projects/libsoup")
     (synopsis "GLib-based HTTP Library")
     (description
@@ -4889,20 +4934,61 @@ libxml to ease remote use of the RESTful API.")
 and the GLib main loop, to integrate well with GNOME applications.")
     (license license:lgpl2.0+)))
 
+;;; An older variant kept to build the 'rest' package.
+(define-public libsoup-minimal-2
+  (package/inherit libsoup-minimal
+    (version "2.72.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnome/sources/libsoup/"
+                                  (version-major+minor version) "/"
+                                  "libsoup-" version ".tar.xz"))
+              (sha256
+               (base32
+                "11skbyw2pw32178q3h8pi7xqa41b2x4k6q4k9f75zxmh8s23y30p"))))
+    (arguments
+     (substitute-keyword-arguments (package-arguments libsoup-minimal)
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (add-after 'unpack 'disable-failing-tests
+             (lambda _
+               ;; Disable the SSL test, failing since 2.68 and resolved in
+               ;; libsoup 3.
+               (substitute* "tests/meson.build"
+                 (("[ \t]*\\['ssl', true, \\[\\]\\],") ""))))))))
+    (native-inputs
+     (modify-inputs (package-native-inputs libsoup-minimal)
+       (replace "vala" vala-0.52)))))
 
-;;; A minimal version of libsoup used to prevent a cycle with Inkscape.
-(define-public libsoup-minimal
-  (package/inherit libsoup
-    (name "libsoup-minimal")
-    (outputs (delete "doc" (package-outputs libsoup)))
+(define-public libsoup
+  (package/inherit libsoup-minimal
+    (name "libsoup")
+    (outputs (cons "doc" (package-outputs libsoup-minimal)))
     (arguments
-     (substitute-keyword-arguments (package-arguments libsoup)
+     (substitute-keyword-arguments (package-arguments libsoup-minimal)
        ((#:configure-flags configure-flags)
-        `(delete "-Dgtk_doc=true" ,configure-flags))
+        `(cons "-Dgtk_doc=true"
+               (delete "-Dgtk_doc=false" ,configure-flags)))
        ((#:phases phases)
         `(modify-phases ,phases
-           (delete 'move-doc)))))
-    (native-inputs (alist-delete "gtk-doc" (package-native-inputs libsoup)))))
+           (add-after 'unpack 'patch-docbook-xml
+             (lambda* (#:key inputs #:allow-other-keys)
+               (let ((xmldoc (string-append (assoc-ref inputs "docbook-xml")
+                                            "/xml/dtd/docbook")))
+                 (substitute* (find-files "docs/reference")
+                   (("http://.*/docbookx\\.dtd")
+                    (string-append xmldoc "/docbookx.dtd"))))))
+           (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"))
+                 (copy-recursively (string-append out "/share/gtk-doc")
+                                   (string-append doc "/share/gtk-doc"))
+                 (delete-file-recursively
+                  (string-append out "/share/gtk-doc")))))))))
+    (native-inputs (modify-inputs (package-native-inputs libsoup-minimal)
+                     (prepend docbook-xml-4.1.2 gtk-doc)))))
 
 (define-public libsecret
   (package
@@ -4940,13 +5026,11 @@ and the GLib main loop, to integrate well with GNOME applications.")
        ;("python2-pygobject" ,python2-pygobject)
        ;("python2-pygobject-2" ,python2-pygobject-2)))
     (propagated-inputs
-     `(("glib" ,glib))) ; required by libsecret-1.pc
+     (list glib)) ; required by libsecret-1.pc
     (inputs
      ;; The ‘build’ phase complains about missing docbook-xml-4.2 but adding it
      ;; doesn't seem to affect the build result.
-     `(("docbook-xsl" ,docbook-xsl)
-       ("libgcrypt" ,libgcrypt)
-       ("libxml2" ,libxml2))) ; for XML_CATALOG_FILES
+     (list docbook-xsl libgcrypt libxml2)) ; for XML_CATALOG_FILES
     (home-page "https://wiki.gnome.org/Projects/Libsecret/")
     (synopsis "GObject bindings for \"Secret Service\" API")
     (description
@@ -4986,9 +5070,7 @@ and other secrets.  It communicates with the \"Secret Service\" using DBus.")
        ("vala" ,vala)
        ("xmllint" ,libxml2)))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("libgnome-games-support" ,libgnome-games-support)
-       ("librsvg" ,librsvg)))
+     (list gtk+ libgnome-games-support librsvg))
     (home-page "https://wiki.gnome.org/Apps/Five%20or%20more")
     (synopsis "Logic puzzle game")
     (description "Five or More is a game where you try to align
@@ -5000,25 +5082,24 @@ and other secrets.  It communicates with the \"Secret Service\" using DBus.")
 (define-public gnome-mines
   (package
     (name "gnome-mines")
-    (version "3.36.1")
+    (version "40.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://gnome/sources/" name "/"
-                           (version-major+minor version) "/"
+                           (version-major version) "/"
                            name "-" version ".tar.xz"))
        (sha256
-        (base32 "0m2680r94nk61imym4x73j03jwfjd8cxm592m5ybiqdfdw6i723i"))))
+        (base32 "0sf6kdvhr4pr3hddnj6ql9larz2wy108sri31id6x9g459nbly8z"))))
     (build-system meson-build-system)
     (arguments
-     '(#:glib-or-gtk? #t
+     `(#:glib-or-gtk? #t
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'skip-gtk-update-icon-cache
            (lambda _
              (substitute* "build-aux/meson_post_install.py"
-               (("gtk-update-icon-cache") (which "true")))
-             #t)))))
+               (("gtk-update-icon-cache") (which "true"))))))))
     (native-inputs
      `(("glib:bin" ,glib "bin")       ; for glib-compile-resources
        ("pkg-config" ,pkg-config)
@@ -5029,9 +5110,7 @@ and other secrets.  It communicates with the \"Secret Service\" using DBus.")
        ("yelp" ,yelp)
        ("appstream-glib" ,appstream-glib)))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("libgnome-games-support" ,libgnome-games-support)
-       ("librsvg" ,librsvg)))
+     (list gtk+ libgnome-games-support librsvg))
     (home-page "https://wiki.gnome.org/Apps/Mines")
     (synopsis "Minesweeper game")
     (description
@@ -5066,13 +5145,13 @@ floating in an ocean using only your brain and a little bit of luck.")
      `(("glib:bin" ,glib "bin")
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("glib" ,glib)                   ; for gio
-       ("gusb" ,gusb)
-       ("udisks" ,udisks)
-       ("libgudev" ,libgudev)
-       ("libcanberra" ,libcanberra)
-       ("polkit" ,polkit)))
+     (list gtk+
+           glib ; for gio
+           gusb
+           udisks
+           libgudev
+           libcanberra
+           polkit))
     (home-page "https://wiki.gnome.org/Apps/MultiWriter")
     (synopsis "Write to multiple USB devices at once")
     (description
@@ -5083,26 +5162,25 @@ once.")
 (define-public gnome-sudoku
   (package
     (name "gnome-sudoku")
-    (version "3.34.1")
+    (version "40.2")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://gnome/sources/" name "/"
-                           (version-major+minor version) "/"
+                           (version-major version) "/"
                            name "-" version ".tar.xz"))
        (sha256
         (base32
-         "025y85r4qqardivvwiwhbmgarziykdy224m8zlrq8b79zv82793b"))))
+         "18slsxifad5cjz4fqi818i66jc9b7kzgn01qxa0ra4y7wcqha4in"))))
     (build-system meson-build-system)
     (arguments
-     '(#:glib-or-gtk? #t
+     `(#:glib-or-gtk? #t
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'skip-gtk-update-icon-cache
            (lambda _
              (substitute* "build-aux/post_install.py"
-               (("gtk-update-icon-cache") (which "true")))
-             #t)))))
+               (("gtk-update-icon-cache") (which "true"))))))))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("desktop-file-utils" ,desktop-file-utils)
@@ -5112,11 +5190,7 @@ once.")
        ("vala" ,vala)
        ("xmllint" ,libxml2)))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("json-glib" ,json-glib)
-       ("libgee" ,libgee)
-       ("librsvg" ,librsvg)
-       ("qqwing" ,qqwing)))
+     (list gtk+ json-glib libgee librsvg qqwing))
     (home-page "https://wiki.gnome.org/Apps/Sudoku")
     (synopsis "Japanese logic game")
     (description
@@ -5129,7 +5203,7 @@ more fun.")
 (define-public gnome-terminal
   (package
     (name "gnome-terminal")
-    (version "3.34.2")
+    (version "3.40.3")
     (source
      (origin
        (method url-fetch)
@@ -5138,7 +5212,7 @@ more fun.")
                            name "-" version ".tar.xz"))
        (sha256
         (base32
-         "0gc004f9b5k94gkdanmqjz3wqgnpny0l3nqm8zd19h4f0ps27mrv"))))
+         "08hsic7sn32xw12i3j0ard2bhfhp8gmzqm0pa8xzl5l1jhzsmsfb"))))
     (build-system glib-or-gtk-build-system)
     (arguments
      '(#:configure-flags
@@ -5147,24 +5221,26 @@ more fun.")
        #:phases
        (modify-phases %standard-phases
          (add-before 'configure 'patch-/bin/true
-                     (lambda _
-                       (substitute* "configure"
-                         (("/bin/true") (which "true"))))))))
+           (lambda _
+             (substitute* "configure"
+               (("/bin/true") (which "true"))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
+     `(("docbook-xsl" ,docbook-xsl)
+       ("pkg-config" ,pkg-config)
        ("desktop-file-utils" ,desktop-file-utils)
        ("intltool" ,intltool)
        ("itstool" ,itstool)
+       ("libxslt" ,libxslt)
        ("xmllint" ,libxml2)))
     (propagated-inputs
-     `(("dconf" ,dconf)))
-    (inputs
-     `(("gtk+" ,gtk+)
-       ("vte" ,vte)
-       ("gnutls" ,gnutls)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("util-linux" ,util-linux "lib")
-       ("vala" ,vala)))
+     (list dconf))
+    (inputs
+     (list gtk+
+           vte
+           gnutls
+           gsettings-desktop-schemas
+           `(,util-linux "lib")
+           vala))
     (home-page "https://wiki.gnome.org/Apps/Terminal")
     (synopsis "Terminal emulator")
     (description
@@ -5176,9 +5252,9 @@ It supports several profiles, multiple tabs and implements several
 keyboard shortcuts.")
     (license license:gpl3+)))
 
-(define-public colord
+(define-public colord-minimal
   (package
-    (name "colord")
+    (name "colord-minimal")
     (version "1.4.5")
     (source
      (origin
@@ -5189,33 +5265,27 @@ keyboard shortcuts.")
         (base32 "05sydi6qqqx1rrqwnga1vbg9srkf89wdcfw5w4p4m7r37m2flx5p"))))
     (build-system meson-build-system)
     (arguments
-     '(;; FIXME: One test fails:
+     '( ;; FIXME: One test fails:
        ;; /colord/icc-store (in lib/colord/colord-self-test-private):
        ;; Incorrect content type for /tmp/colord-vkve/already-exists.icc, got
        ;; application/x-zerosize
        #:tests? #f
        #:glib-or-gtk? #t
-       #:configure-flags (list "-Dlocalstatedir=/var"
-                               ;; No dep on systemd.
-                               "-Dsystemd=false"
-                               ;; Wants to install to global completion dir;
-                               ;; punt.
+       #:configure-flags (list "-Dargyllcms_sensor=false" ;requires spotread
                                "-Dbash_completion=false"
                                "-Ddaemon_user=colord"
+                               "-Ddocs=false"
+                               "-Dlocalstatedir=/var"
+                               "-Dman=false"
                                "-Dsane=true"
-                               "-Dvapi=true"
-                               ;; Requires spotread.
-                               "-Dargyllcms_sensor=false"
-                               ;; TODO: Requires docbook2x.
-                               "-Dman=false")
+                               "-Dsystemd=false") ;no systemd
        #:phases
        (modify-phases %standard-phases
          (add-before 'configure 'patch-build-system
            (lambda* (#:key outputs #:allow-other-keys)
              (substitute* "rules/meson.build"
                (("udev.get_pkgconfig_variable\\('udevdir'\\)")
-                (string-append "'" (assoc-ref outputs "out") "/lib/udev'")))
-             #t))
+                (string-append "'" (assoc-ref outputs "out") "/lib/udev'")))))
          (add-before 'configure 'set-sqlite3-file-name
            (lambda* (#:key inputs #:allow-other-keys)
              ;; "colormgr dump" works by invoking the "sqlite3" command.
@@ -5223,13 +5293,10 @@ keyboard shortcuts.")
              (let ((sqlite (assoc-ref inputs "sqlite")))
                (substitute* "client/cd-util.c"
                  (("\"sqlite3\"")
-                  (string-append "\"" sqlite "/bin/sqlite3\"")))
-               #t))))))
+                  (string-append "\"" sqlite "/bin/sqlite3\"")))))))))
     (native-inputs
      `(("glib:bin" ,glib "bin")         ; for glib-compile-resources, etc.
        ("gettext" ,gettext-minimal)
-       ("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc/stable)
        ("pkg-config" ,pkg-config)
        ("vala" ,vala)))
     (propagated-inputs
@@ -5239,7 +5306,8 @@ keyboard shortcuts.")
        ("udev" ,eudev)))
     (inputs
      `(("dbus-glib" ,dbus-glib)
-       ("gusb" ,gusb)
+       ("gobject-introspection" ,gobject-introspection)
+       ("gusb" ,gusb-minimal)
        ("libgudev" ,libgudev)
        ("libusb" ,libusb)
        ("polkit" ,polkit)
@@ -5253,6 +5321,41 @@ install and generate color profiles to accurately color manage input and
 output devices.")
     (license license:gpl2+)))
 
+(define-public colord
+  (package/inherit colord-minimal
+    (name "colord")
+    (arguments
+     (substitute-keyword-arguments
+         (package-arguments colord-minimal)
+       ((#:configure-flags flags)
+        `(begin
+           (use-modules (srfi srfi-1))
+           (append '("-Dbash_completion=true"
+                     "-Ddocs=true"
+                     "-Dman=true"
+                     "-Dvapi=true")
+               (fold delete ,flags '("-Dbash_completion=false"
+                                     "-Ddocs=false"
+                                     "-Dman=false")))))
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (add-after 'unpack 'fix-bash-completion-dir
+             (lambda* (#:key outputs #:allow-other-keys)
+               (substitute* "data/meson.build"
+                 (("bash_completion.get_pkgconfig_variable\
+\\('completionsdir'\\)")
+                  (string-append "'" (assoc-ref outputs "out")
+                                 "/etc/bash_completion.d'")))))))))
+    (native-inputs
+     (append
+         `(("bash-completion" ,bash-completion)
+           ("docbook-xsl-ns" ,docbook-xsl-ns)
+           ("gtk-doc" ,gtk-doc/stable)
+           ("libxml2" ,libxml2)         ;for XML_CATALOG_FILES
+           ("libxslt" ,libxslt)
+           ("vala" ,vala))              ;for VAPI, needed by simple-scan
+         (package-native-inputs colord-minimal)))))
+
 (define-public geoclue
   (package
     (name "geoclue")
@@ -5268,20 +5371,20 @@ output devices.")
        (patches (search-patches "geoclue-config.patch"))))
     (build-system meson-build-system)
     (arguments
-     '(#:configure-flags (list "-Dbus-srv-user=geoclue")))
+     '(#:configure-flags (list "-Ddbus-srv-user=geoclue")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("gobject-introspection" ,gobject-introspection)
-       ("modem-manager" ,modem-manager)
-       ("libnotify" ,libnotify)
-       ("gtk-doc" ,gtk-doc/stable)
-       ("intltool" ,intltool)))
+     (list pkg-config
+           gobject-introspection
+           modem-manager
+           libnotify
+           gtk-doc/stable
+           intltool))
     (inputs
      `(("avahi" ,avahi)
        ("glib:bin" ,glib "bin")
        ("glib-networking" ,glib-networking)
        ("json-glib" ,json-glib)
-       ("libsoup" ,libsoup)))
+       ("libsoup" ,libsoup-minimal-2)))
     (home-page "https://gitlab.freedesktop.org/geoclue/geoclue/-/wikis/home")
     (synopsis "Geolocation service")
     (description "Geoclue is a D-Bus service that provides location
@@ -5311,9 +5414,7 @@ permission from user.")
          (add-before 'check 'set-locales
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "GUIX_LOCPATH"
-                     (string-append (assoc-ref inputs "glibc-locales")
-                                    "/lib/locale"))
-             #t)))))
+                     (search-input-directory inputs "lib/locale")))))))
     (native-inputs
      `(("glib:bin" ,glib "bin") ; for glib-mkenums
        ("glibc-locales" ,glibc-locales) ; for tests
@@ -5324,9 +5425,9 @@ permission from user.")
        ("json-glib" ,json-glib)))
     (propagated-inputs
      ;; geocode-glib-1.0.pc refers to GIO.
-     `(("glib" ,glib)))
+     (list glib))
     (inputs
-     `(("libsoup" ,libsoup)))
+     `(("libsoup" ,libsoup-minimal-2)))
     (home-page "https://github.com/GNOME/geocode-glib/")
     (synopsis "Geocoding and reverse-geocoding library")
     (description
@@ -5339,7 +5440,7 @@ faster results and to avoid unnecessary server load.")
 (define-public upower
   (package
     (name "upower")
-    (version "0.99.12")
+    (version "0.99.13")
     (source
      (origin
        (method git-fetch)
@@ -5351,7 +5452,7 @@ faster results and to avoid unnecessary server load.")
                                                 version)))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "00q63yc8vp5cq05vhpwq3qglapdm8hg0lrqkzdwkphk30qzb6hv6"))
+        (base32 "0khwg6jpq81dcylkpi7cn75bjzif0q9qscwvirrk41krma23iddj"))
        (patches (search-patches "upower-builddir.patch"))
        (modules '((guix build utils)))
        (snippet
@@ -5364,8 +5465,7 @@ faster results and to avoid unnecessary server load.")
            ;; location.
            (substitute* "src/Makefile.am"
              (("^dbusconfdir =.*$")
-              "dbusconfdir = $(sysconfdir)/dbus-1/system.d\n"))
-           #t))))
+              "dbusconfdir = $(sysconfdir)/dbus-1/system.d\n"))))))
     (build-system glib-or-gtk-build-system)
     (arguments
      '(#:phases
@@ -5374,40 +5474,36 @@ faster results and to avoid unnecessary server load.")
            (lambda* (#:key inputs #:allow-other-keys)
              (let ((umockdev (string-append (assoc-ref inputs "umockdev")
                                             "/lib")))
-               (setenv "LD_LIBRARY_PATH" umockdev))
-             #t)))
+               (setenv "LD_LIBRARY_PATH" umockdev)))))
        #:configure-flags (list "--localstatedir=/var"
                                (string-append "--with-udevrulesdir="
                                               (assoc-ref %outputs "out")
                                               "/lib/udev/rules.d"))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc)
-       ("intltool" ,intltool)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python)
-       ("which" ,which)                 ; for ./autogen.sh
-
-       ;; For tests.
-       ("python-dbus" ,python-dbus)
-       ("python-dbusmock" ,python-dbusmock)
-       ("python-pygobject" ,python-pygobject)
-       ("umockdev" ,umockdev)
-
-       ;; For man pages.
-       ("docbook-xsl" ,docbook-xsl)
-       ("libxslt" ,libxslt)             ; for 'xsltproc'
-       ("libxml2" ,libxml2)))           ; for 'XML_CATALOG_FILES'
-    (inputs
-     `(("dbus-glib" ,dbus-glib)
-       ("libgudev" ,libgudev)
-       ("libusb" ,libusb)))
+     (list autoconf
+           automake
+           gobject-introspection
+           gtk-doc
+           intltool
+           libtool
+           pkg-config
+           python
+           which ; for ./autogen.sh
+           ;; For tests.
+           python-dbus
+           python-dbusmock
+           python-packaging
+           python-pygobject
+           umockdev
+           ;; For man pages.
+           docbook-xsl
+           libxslt ; for 'xsltproc'
+           libxml2))           ; for 'XML_CATALOG_FILES'
+    (inputs
+     (list dbus-glib libgudev libusb))
     (propagated-inputs
      ;; In Requires of upower-glib.pc.
-     `(("glib" ,glib)))
+     (list glib))
     (home-page "https://upower.freedesktop.org/")
     (synopsis "System daemon for managing power devices")
     (description
@@ -5420,15 +5516,15 @@ service via the system message bus.")
 (define-public libgweather
   (package
     (name "libgweather")
-    (version "3.34.0")
+    (version "40.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
-                                  (version-major+minor version) "/"
+                                  (version-major version) "/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1fgiqswkhiaijanml3mb16ajn5aanrk7x6yiwagp9n9rssam6902"))))
+                "1rkf4yv43qcahyx7bismdv6z2vh5azdnm1fqfmnzrada9cm8ykna"))))
     (build-system meson-build-system)
     (arguments
      `(#:tests? #f ; one of two tests requires network access
@@ -5440,18 +5536,20 @@ service via the system message bus.")
      `(("glib:bin" ,glib "bin") ; for glib-mkenums
        ("gobject-introspection" ,gobject-introspection)
        ("pkg-config" ,pkg-config)
+       ("python" ,python)
        ("vala" ,vala)
-       ("intltool" ,intltool)))
+       ("intltool" ,intltool)
+       ("python-pygobject" ,python-pygobject)))
     (propagated-inputs
      ;; gweather-3.0.pc refers to GTK+, GDK-Pixbuf, GLib/GObject, libxml, and
      ;; libsoup.
      `(("gtk+" ,gtk+)
        ("gdk-pixbuf" ,gdk-pixbuf)
        ("libxml2" ,libxml2)
-       ("libsoup" ,libsoup)
+       ("libsoup" ,libsoup-minimal-2)
        ("geocode-glib" ,geocode-glib)))
     (inputs
-     `(("tzdata" ,tzdata)))
+     (list tzdata))
     (home-page "https://wiki.gnome.org/action/show/Projects/LibGWeather")
     (synopsis "Location, time zone, and weather library for GNOME")
     (description
@@ -5462,24 +5560,23 @@ services for numerous locations.")
 (define-public gnome-settings-daemon
   (package
     (name "gnome-settings-daemon")
-    (version "3.34.1")
+    (version "41.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://gnome/sources/" name "/"
-                           (version-major+minor version) "/"
+                           (version-major version) "/"
                            name "-" version ".tar.xz"))
        (sha256
         (base32
-         "07y1gbicz0pbxmdgwrdzyc4byy30wfwpbqgvnx27gnpqmc5s50cr"))
+         "111qcvlqjpasnswdniy5n53wyrs1y7a91qx1w4nsppnizdhn7jp6"))
        (patches (search-patches "gnome-settings-daemon-gc.patch"))))
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
        #:configure-flags
        (list (string-append "-Dudev_dir="
-                            (assoc-ref %outputs "out")
-                            "/lib/udev/rules.d/")
+                            (assoc-ref %outputs "out") "/lib/udev")
              "-Dsystemd=false"
              ;; Otherwise, the RUNPATH will lack the final path component.
              (string-append "-Dc_link_args=-Wl,-rpath="
@@ -5497,8 +5594,7 @@ services for numerous locations.")
                         (substitute* "plugins/housekeeping/gsd-disk-space.c"
                           (("g_find_program_in_path \\(DISK_SPACE_ANALYZER\\)")
                            (string-append "g_strdup (\"" baobab
-                                          "/bin/baobab\")")))
-                        #t))))
+                                          "/bin/baobab\")")))))))
 
        ;; Color management test can't reach the colord system service.
        #:tests? #f))
@@ -5511,32 +5607,32 @@ services for numerous locations.")
        ("docbook-xml" ,docbook-xml-4.2)
        ("docbook-xsl" ,docbook-xsl)))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("baobab" ,baobab)
-       ("colord" ,colord)
-       ("libgudev" ,libgudev)
-       ("upower" ,upower)
-       ("polkit" ,polkit)
-       ("pulseaudio" ,pulseaudio)
-       ("libcanberra" ,libcanberra)
-       ("libx11" ,libx11)
-       ("libxtst" ,libxtst)
-       ("lcms" ,lcms)
-       ("libnotify" ,libnotify)
-       ("geoclue" ,geoclue)
-       ("geocode-glib" ,geocode-glib)
-       ("libgweather" ,libgweather)
-       ("gnome-desktop" ,gnome-desktop)
-       ("nss" ,nss)
-       ("cups" ,cups)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("libwacom" ,libwacom)
-       ("librsvg" ,librsvg)
-       ("xf86-input-wacom" ,xf86-input-wacom)
-       ("wayland" ,wayland)
-       ("network-manager" ,network-manager)
-       ("gcr" ,gcr)
-       ("modem-manager" ,modem-manager)))
+     (list alsa-lib
+           baobab
+           colord
+           libgudev
+           upower
+           polkit
+           pulseaudio
+           libcanberra
+           libx11
+           libxtst
+           lcms
+           libnotify
+           geoclue
+           geocode-glib
+           libgweather
+           gnome-desktop
+           nss
+           cups
+           gsettings-desktop-schemas
+           libwacom
+           (librsvg-for-system)
+           xf86-input-wacom
+           wayland
+           network-manager
+           gcr
+           modem-manager))
     (home-page "https://www.gnome.org")
     (synopsis "GNOME settings daemon")
     (description
@@ -5563,18 +5659,12 @@ settings, themes, mouse settings, and startup of other daemons.")
     ;; FIXME: Tests require gvfs.
     `(#:tests? #f))
    (native-inputs
-    `(("intltool" ,intltool)
-      ("glib" ,glib "bin")
-      ("gobject-introspection" ,gobject-introspection)
-      ("pkg-config" ,pkg-config)))
+    (list intltool
+          `(,glib "bin") gobject-introspection pkg-config))
    (propagated-inputs
-    `(("glib" ,glib)
-      ("gmime" ,gmime)
-      ("libarchive" ,libarchive)
-      ("libgcrypt" ,libgcrypt)
-      ("libxml2" ,libxml2)))
+    (list glib gmime libarchive libgcrypt libxml2))
    (inputs
-    `(("libsoup" ,libsoup)))
+    (list libsoup))
    (home-page "https://projects.gnome.org/totem")
    (synopsis "Library to parse and save media playlists for GNOME")
    (description "Totem-pl-parser is a GObjects-based library to parse and save
@@ -5606,10 +5696,7 @@ playlists in a variety of formats.")
        ("pkg-config" ,pkg-config)
        ("xmllint" ,libxml2)))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("guile" ,guile-2.2)
-       ("libcanberra" ,libcanberra)
-       ("librsvg" ,librsvg)))
+     (list gtk+ guile-2.2 libcanberra librsvg))
     (home-page "https://wiki.gnome.org/Apps/Aisleriot")
     (synopsis "Solitaire card games")
     (description
@@ -5620,7 +5707,7 @@ which are easy to play with the aid of a mouse.")
 (define-public amtk
   (package
     (name "amtk")
-    (version "5.0.2")
+    (version "5.3.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/amtk/"
@@ -5628,18 +5715,14 @@ which are easy to play with the aid of a mouse.")
                                   "amtk-" version ".tar.xz"))
               (sha256
                (base32
-                "11jgz2i9wjzv4alrxl1qyxiapb52w7vs5ygfgsw0qgdap8gqkk3i"))))
-    (build-system gnu-build-system)
-    (arguments
-     '(#:configure-flags '("--enable-gtk-doc")))
+                "12v3nj1bb7507ndprjggq0hpz8k719b4bwvl8sm43p3ibmn27anm"))))
+    (build-system meson-build-system)
     (native-inputs
-     `(("gobject-introspection" ,gobject-introspection)
-       ("glib:bin" ,glib "bin")         ; for glib-mkenums
-       ("gtk-doc" ,gtk-doc/stable)
-       ("pkg-config" ,pkg-config)))
+     (list gobject-introspection
+           `(,glib "bin") ; for glib-mkenums
+           gtk-doc/stable pkg-config))
     (inputs
-     `(("glib" ,glib)
-       ("gtk+" ,gtk+)))
+     (list glib gtk+))
     (home-page "https://wiki.gnome.org/Projects/Amtk")
     (synopsis "Actions, Menus and Toolbars Kit for GTK+ applications")
     (description
@@ -5651,26 +5734,32 @@ both a traditional UI or a modern UI with a GtkHeaderBar.")
 (define-public devhelp
   (package
     (name "devhelp")
-    (version "3.34.0")
+    (version "41.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
-                                  (version-major+minor version) "/"
+                                  (version-major version) "/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0zpmn6fgkgiayvn4diia5df0s6s7dqrdnp3nrvpavsmgn0vhb4pg"))))
+                "1lk0gycjvs6gibhy0zs3ffkrkzrkyl5nkp7n60hgpa6syjq91apc"))))
     (build-system meson-build-system)
     (arguments
-     '(#:glib-or-gtk? #t
+     `(#:glib-or-gtk? #t
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'skip-gtk-update-icon-cache
            ;; Don't create 'icon-theme.cache'.
            (lambda _
-             (substitute* "meson_post_install.py"
-               (("gtk-update-icon-cache") "true"))
-             #t)))))
+             (substitute* "build-aux/meson/meson_post_install.py"
+               (("gtk-update-icon-cache") "true"))))
+         (add-after 'unpack 'fix-devhelp-gir-inputs
+           ;; It still mentions webkitgtk 4.0
+           (lambda _
+             (substitute* "devhelp/meson.build"
+               (("'WebKit2-4.0'") "'WebKit2-4.1'")))))))
+    (propagated-inputs
+     (list gsettings-desktop-schemas))
     (native-inputs
      `(("intltool" ,intltool)
        ("itstool" ,itstool)
@@ -5678,9 +5767,7 @@ both a traditional UI or a modern UI with a GtkHeaderBar.")
        ("glib:bin" ,glib "bin") ; for glib-mkmenus
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("amtk" ,amtk)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("webkitgtk" ,webkitgtk)))
+     (list amtk gsettings-desktop-schemas webkitgtk))
     (home-page "https://wiki.gnome.org/Apps/Devhelp")
     (synopsis "API documentation browser for GNOME")
     (description
@@ -5689,6 +5776,22 @@ natively with GTK-Doc (the API reference system developed for GTK+ and used
 throughout GNOME for API documentation).")
     (license license:gpl2+)))
 
+(define-public devhelp-with-libsoup2
+  (package/inherit devhelp
+    (arguments
+     (substitute-keyword-arguments (package-arguments devhelp)
+       ((#:phases phases '%standard-phases)
+        `(modify-phases %standard-phases
+           (add-after 'unpack 'skip-gtk-update-icon-cache
+             ;; Don't create 'icon-theme.cache'.
+             (lambda _
+               (substitute* "build-aux/meson/meson_post_install.py"
+                 (("gtk-update-icon-cache") "true"))))))))
+    (inputs
+     `(("amtk" ,amtk)
+       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
+       ("webkitgtk" ,webkitgtk-with-libsoup2)))))
+
 (define-public cogl
   (package
     (name "cogl")
@@ -5710,21 +5813,21 @@ throughout GNOME for API documentation).")
        ("xorg-server" ,xorg-server-for-tests)
        ("pkg-config" ,pkg-config)))
     (propagated-inputs
-     `(("glib" ,glib)
-       ("gdk-pixbuf" ,gdk-pixbuf)
-       ("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxfixes" ,libxfixes)
-       ("libxdamage" ,libxdamage)
-       ("libxcomposite" ,libxcomposite)
-       ("libxrandr" ,libxrandr)))
-    (inputs
-     `(("mesa" ,mesa)
-       ("cairo" ,cairo)
-       ("pango" ,pango)
-       ("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base)
-       ("wayland" ,wayland)))
+     (list glib
+           gdk-pixbuf
+           libx11
+           libxext
+           libxfixes
+           libxdamage
+           libxcomposite
+           libxrandr))
+    (inputs
+     (list mesa
+           cairo
+           pango
+           gstreamer
+           gst-plugins-base
+           wayland))
     (arguments
      `(#:disallowed-references (,xorg-server-for-tests)
        #:configure-flags (list "--enable-cogl-gst"
@@ -5796,16 +5899,16 @@ without stepping on each others toes.")
        ("pkg-config" ,pkg-config)
        ("xsltproc" ,libxslt)))
     (propagated-inputs
-     `(("cogl" ,cogl)
-       ("cairo" ,cairo)
-       ("atk" ,atk)
-       ("gtk+" ,gtk+)
-       ("json-glib" ,json-glib)
-       ("glib" ,glib)
-       ("libxcomposite" ,libxcomposite)
-       ("libxdamage" ,libxdamage)
-       ("libxext" ,libxext)
-       ("xinput" ,xinput)))
+     (list cogl
+           cairo
+           atk
+           gtk+
+           json-glib
+           glib
+           libxcomposite
+           libxdamage
+           libxext
+           xinput))
     (inputs
      `(("libxkbcommon" ,libxkbcommon)
        ("udev" ,eudev)))
@@ -5842,12 +5945,10 @@ presentations, kiosk style applications and so on.")
          "01ibniy4ich0fgpam53q252idm7f4fn5xg5qvizcfww90gn9652j"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("gobject-introspection" ,gobject-introspection)))
+     (list pkg-config gobject-introspection))
     (propagated-inputs
      ;; clutter-gtk.pc refers to all these.
-     `(("clutter" ,clutter)
-       ("gtk+" ,gtk+)))
+     (list clutter gtk+))
     (home-page "http://www.clutter-project.org")
     (synopsis "OpenGL-based interactive canvas library GTK+ widget")
     (description
@@ -5870,13 +5971,10 @@ presentations, kiosk style applications and so on.")
         (base32 "17czmpl92dzi4h3rn5rishk015yi3jwiw29zv8qan94xcmnbssgy"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("glib:bin" ,glib "bin")         ; for glib-mkenums
-       ("pkg-config" ,pkg-config)
-       ("gobject-introspection" ,gobject-introspection)))
+     (list `(,glib "bin") ; for glib-mkenums
+           pkg-config gobject-introspection))
     (inputs
-     `(("clutter" ,clutter)
-       ("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base)))
+     (list clutter gstreamer gst-plugins-base))
     (home-page "http://www.clutter-project.org")
     (synopsis "Integration library for using GStreamer with Clutter")
     (description
@@ -5889,7 +5987,7 @@ OpenGL-based interactive canvas library.")
 (define-public libchamplain
   (package
     (name "libchamplain")
-    (version "0.12.16")
+    (version "0.12.20")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -5897,22 +5995,19 @@ OpenGL-based interactive canvas library.")
                     version ".tar.xz"))
               (sha256
                (base32
-                "13chvc2n074i0jw5jlb8i7cysda4yqx58ca6y3mrlrl9g37k2zja"))))
-    (build-system gnu-build-system)
-    (arguments '(#:configure-flags '("--enable-vala")))
+                "0rihpb0npqpihqcdz4w03rq6xl7jdckfqskvv9diq2hkrnzv8ch2"))))
+    (build-system meson-build-system)
     (native-inputs
-     `(("gobject-introspection" ,gobject-introspection)
-       ("pkg-config" ,pkg-config)
-       ("vala" ,vala)))
+     (list gobject-introspection pkg-config vala))
     (propagated-inputs
-     `(("libsoup" ,libsoup)
-       ("sqlite" ,sqlite)
-       ("clutter" ,clutter)
-       ("clutter-gtk" ,clutter-gtk)
-       ("glib:bin" ,glib "bin")                   ;glib-mkenums, etc.
-       ("cairo" ,cairo)
-       ("gtk+3" ,gtk+)
-       ("glib" ,glib)))
+     (list libsoup-minimal-2
+           sqlite
+           clutter
+           clutter-gtk
+           `(,glib "bin") ;glib-mkenums, etc.
+           cairo
+           gtk+
+           glib))
     (home-page "https://projects.gnome.org/libchamplain/")
     (synopsis "C library providing a ClutterActor to display maps")
     (description
@@ -5937,13 +6032,9 @@ such as OpenStreetMap, OpenCycleMap, OpenAerialMap, and Maps for free.")
          "1zaqqwwkyiswib3v1v8wafpbifpbpak0nn2kp13pizzn9bwz1s5w"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)
-       ("gobject-introspection" ,gobject-introspection)))
+     (list intltool pkg-config gobject-introspection))
     (inputs
-     `(("glib" ,glib)
-       ("gdk-pixbuf" ,gdk-pixbuf)
-       ("sqlite" ,sqlite)))
+     (list glib gdk-pixbuf sqlite))
     ;; XXX TODO: Figure out how to run the test suite.
     (arguments `(#:tests? #f))
     (home-page "https://wiki.gnome.org/Projects/Gom")
@@ -5977,13 +6068,10 @@ queries upon that data.")
                 (setenv "HOME" (getcwd))
                 #t)))))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)
-       ("vala" ,vala)))
+     (list intltool pkg-config vala))
     (propagated-inputs
      ;; Required by libgnome-games-support-1.0.pc
-     `(("gtk+" ,gtk+)
-       ("libgee" ,libgee)))
+     (list gtk+ libgee))
     (home-page "https://www.gnome.org/")
     (synopsis "Useful functionality shared among GNOME games")
     (description
@@ -6023,9 +6111,7 @@ GNOME Games, but it may be used by others.")
        ("vala" ,vala)
        ("xmllint" ,libxml2)))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("libgnome-games-support" ,libgnome-games-support)
-       ("librsvg" ,librsvg)))
+     (list gtk+ libgnome-games-support librsvg))
     (home-page "https://wiki.gnome.org/Apps/Klotski")
     (synopsis "Sliding block puzzles")
     (description
@@ -6038,7 +6124,7 @@ as possible!")
 (define-public grilo
   (package
     (name "grilo")
-    (version "0.3.12")
+    (version "0.3.13")
     (source
      (origin
        (method url-fetch)
@@ -6046,23 +6132,23 @@ as possible!")
                            (version-major+minor version) "/"
                            "grilo-" version ".tar.xz"))
        (sha256
-        (base32 "0w8sq5g6g1rg85h53vbll8va70fcp6082mlpmy98aa03444ddyyv"))))
+        (base32 "0ywjvh7xw4ql1q4fvl0q5n06n08pga1g1nc9l7c3x5214gr3fj6i"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("glib:bin" ,glib "bin")         ; for glib-mkenums and glib-genmarshal
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)
-       ("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc/stable)
-       ("vala" ,vala)))
-    (inputs
-     `(("cyrus-sasl" ,cyrus-sasl)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("libxml2" ,libxml2)
-       ("liboauth" ,liboauth)
-       ("libsoup" ,libsoup)
-       ("totem-pl-parser" ,totem-pl-parser)))
+     (list `(,glib "bin") ; for glib-mkenums and glib-genmarshal
+           intltool
+           pkg-config
+           gobject-introspection
+           gtk-doc/stable
+           vala))
+    (inputs
+     (list cyrus-sasl
+           glib
+           gtk+
+           libxml2
+           liboauth
+           libsoup-minimal-2
+           totem-pl-parser))
     (native-search-paths
      (list (search-path-specification
             (variable "GRL_PLUGIN_PATH")
@@ -6078,7 +6164,7 @@ for application developers.")
 (define-public grilo-plugins
   (package
     (name "grilo-plugins")
-    (version "0.3.11")
+    (version "0.3.13")
     (source
      (origin
        (method url-fetch)
@@ -6086,7 +6172,7 @@ for application developers.")
                            (version-major+minor version) "/"
                            name "-" version ".tar.xz"))
        (sha256
-        (base32 "0wyd3n5mn7b77hxylkc3f62v01mlavh96901pz342hwrn42ydqnx"))))
+        (base32 "1y10nnd711qxwgpz6spzp1rnk50fyf11kk1n71a31ab4fgb0ahqw"))))
     (build-system meson-build-system)
     (native-inputs
      `(("gettext" ,gettext-minimal)
@@ -6109,12 +6195,24 @@ for application developers.")
        ("libmediaart" ,libmediaart)
        ;("librest" ,rest) ; unused
        ("libsoup" ,libsoup)
+       ("python-pygobject" ,python-pygobject)
        ("totam-pl-parser" ,totem-pl-parser)
-       ("tracker" ,tracker))) ; unused because it's too old
+       ("tracker" ,tracker)
+       ("tracker-miners" ,tracker-miners)))
     (arguments
      `(#:glib-or-gtk? #t
        ;;Disable lua-factory as it needs missing dependencies
-       #:configure-flags '("-Denable-lua-factory=no")))
+       #:configure-flags '("-Denable-lua-factory=no")
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'set-shell
+           (lambda _
+             (setenv "SHELL" (which "bash"))))
+         ;; Disable the tracker test that requires the UPower daemon.
+         (add-before 'configure 'fix-tests
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "tests/tracker3/meson.build"
+               (("'test_tracker3'.*") "")))))))
     (home-page "https://live.gnome.org/Grilo")
     (synopsis "Plugins for the Grilo media discovery library")
     (description
@@ -6146,37 +6244,37 @@ discovery protocols.")
        ("xmllint" ,libxml2)
        ("xorg-server" ,xorg-server-for-tests)))
     (propagated-inputs
-     `(("dconf" ,dconf)))
-    (inputs
-     `(("gtk+" ,gtk+)
-       ("gdk-pixbuf" ,gdk-pixbuf)
-       ("atk" ,atk)
-       ("cairo" ,cairo)
-       ("dbus-glib" ,dbus-glib)
-       ("clutter" ,clutter)
-       ("clutter-gtk" ,clutter-gtk)
-       ("clutter-gst" ,clutter-gst)
-       ("xorgproto" ,xorgproto)
-       ("libxxf86vm" ,libxxf86vm)
-       ("libxtst" ,libxtst)
-       ("libxrandr" ,libxrandr)
-       ("libxml2" ,libxml2)
-       ("libsoup" ,libsoup)
-       ("libpeas" ,libpeas)
-       ("librsvg" ,librsvg)
-       ("lirc" ,lirc)
-       ("gnome-desktop" ,gnome-desktop)
-       ("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base)
-       ("gst-plugins-good" ,gst-plugins-good)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("adwaita-icon-theme" ,adwaita-icon-theme)
-       ("python" ,python)
-       ("python-pygobject" ,python-pygobject)
-       ("totem-pl-parser" ,totem-pl-parser)
-       ("grilo" ,grilo)
-       ("grilo-plugins" ,grilo-plugins)
-       ("vala" ,vala)))
+     (list dconf))
+    (inputs
+     (list gtk+
+           gdk-pixbuf
+           atk
+           cairo
+           dbus-glib
+           clutter
+           clutter-gtk
+           clutter-gst
+           xorgproto
+           libxxf86vm
+           libxtst
+           libxrandr
+           libxml2
+           libsoup
+           libpeas
+           librsvg
+           lirc
+           gnome-desktop
+           gstreamer
+           gst-plugins-base
+           gst-plugins-good
+           gsettings-desktop-schemas
+           adwaita-icon-theme
+           python
+           python-pygobject
+           totem-pl-parser
+           grilo
+           grilo-plugins
+           vala))
     (arguments
      `(#:glib-or-gtk? #t
 
@@ -6258,15 +6356,15 @@ which can read a large number of file formats.")
                  (gi-typelib-path   (getenv "GI_TYPELIB_PATH"))
                  (gst-plugin-path   (getenv "GST_PLUGIN_SYSTEM_PATH"))
                  (grl-plugin-path   (getenv "GRL_PLUGIN_PATH"))
-                 (python-path       (getenv "PYTHONPATH")))
+                 (python-path       (getenv "GUIX_PYTHONPATH")))
              (wrap-program (string-append out "/bin/rhythmbox")
                `("GI_TYPELIB_PATH"        ":" prefix (,gi-typelib-path))
                `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path))
                `("GRL_PLUGIN_PATH"        ":" prefix (,grl-plugin-path))
-               `("PYTHONPATH"             ":" prefix (,python-path))))
+               `("GUIX_PYTHONPATH"             ":" prefix (,python-path))))
            #t)))))
    (propagated-inputs
-    `(("dconf" ,dconf)))
+    (list dconf))
    (native-inputs
     `(("itstool" ,itstool)
       ("intltool" ,intltool)
@@ -6280,7 +6378,7 @@ which can read a large number of file formats.")
       ("tdb" ,tdb)
       ("gnome-desktop" ,gnome-desktop)
       ("python" ,python)
-      ("python-pygobject" ,python2-pygobject)
+      ("python-pygobject" ,python-pygobject)
       ("vala" ,vala)
       ("gmime" ,gmime)
       ("adwaita-icon-theme" ,adwaita-icon-theme)
@@ -6296,6 +6394,7 @@ which can read a large number of file formats.")
       ("libsoup" ,libsoup)
       ("libnotify" ,libnotify)
       ("libpeas" ,libpeas)
+      ("libsoup" ,libsoup-minimal-2)
       ("lirc" ,lirc)
       ;; TODO: clutter* only used by visualizer plugin, which also requires mx
       ;;("clutter" ,clutter)
@@ -6318,15 +6417,17 @@ supports playlists, song ratings, and any codecs installed through gstreamer.")
 (define-public eog
  (package
    (name "eog")
-   (version "3.34.1")
+   (version "40.3")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnome/sources/" name "/"
-                                (version-major+minor version) "/"
+                                (version-major version) "/"
                                 name "-" version ".tar.xz"))
             (sha256
              (base32
-              "0b7ld4azs9xbdjsk9b91ywhdzvxgajhndiwiivxjzbr0hjgp7c7x"))))
+              "0ddjwcd77nw0rxb5x5bz5hd671m8gya9827p8rsnb58x103kpai8"))
+            ;; XXX: Remove when upgrading to 42.0
+            (patches (search-patches "eog-update-libportal-usage.patch"))))
    (build-system meson-build-system)
    (arguments
     `(#:configure-flags
@@ -6339,17 +6440,15 @@ supports playlists, song ratings, and any codecs installed through gstreamer.")
            ;; Don't create 'icon-theme.cache'.
            (lambda _
              (substitute* "meson_post_install.py"
-               (("gtk-update-icon-cache") "true"))
-             #t))
+               (("gtk-update-icon-cache") "true"))))
         (add-after 'install 'wrap-eog
           (lambda* (#:key outputs #:allow-other-keys)
             (let ((out               (assoc-ref outputs "out"))
                   (gi-typelib-path   (getenv "GI_TYPELIB_PATH")))
               (wrap-program (string-append out "/bin/eog")
-                `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))))
-            #t)))))
+                `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path)))))))))
    (propagated-inputs
-    `(("dconf" ,dconf)))
+    (list dconf))
    (native-inputs
     `(("intltool" ,intltool)
       ("itstool" ,itstool)
@@ -6365,8 +6464,9 @@ supports playlists, song ratings, and any codecs installed through gstreamer.")
       ("lcms" ,lcms)
       ("libexif" ,libexif)
       ("libpeas" ,libpeas)
+      ("libportal" ,libportal)
       ("libjpeg" ,libjpeg-turbo)
-      ("librsvg" ,librsvg-next)
+      ("librsvg" ,librsvg)
       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
       ("gtk+" ,gtk+)))
    (home-page "https://wiki.gnome.org/Apps/EyeOfGnome")
@@ -6382,7 +6482,7 @@ supports image conversion, rotation, and slideshows.")
   ;; 'XDG_DATA_DIRS' appropriately set.
   (package
     (name "eog-plugins")
-    (version "3.26.4")
+    (version "3.26.8")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/eog-plugins/"
@@ -6390,20 +6490,19 @@ supports image conversion, rotation, and slideshows.")
                                   "eog-plugins-" version ".tar.xz"))
               (sha256
                (base32
-                "0pd7fqa4ciy5844k5s1c6rlsqkk8pxd8cchxjcjhxlsngm9lynnx"))))
+                "1dcxdjp7x092wn0iq7975f9b05ksb5kl5mxmyiqmydrja91ryw40"))))
     (build-system gnu-build-system)
     (home-page "https://wiki.gnome.org/Apps/EyeOfGnome/Plugins")
     (synopsis "Extensions for the Eye of GNOME image viewer")
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("gettext" ,gettext-minimal)))
+     (list pkg-config gettext-minimal))
     (inputs
-     `(("eog" ,eog)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("libpeas" ,libpeas)
-       ("libexif" ,libexif)
-       ("libchamplain" ,libchamplain)))
+     (list eog
+           glib
+           gtk+
+           libpeas
+           libexif
+           libchamplain))
     (description
      "This package provides plugins for the Eye of GNOME (EOG) image viewer,
 notably:
@@ -6437,8 +6536,8 @@ side panel;
        ("gobject-introspection" ,gobject-introspection)
        ("pkg-config" ,pkg-config)))
     (propagated-inputs
-     `(("glib" ,glib)                   ; in Requires of gudev-1.0.pc
-       ("eudev" ,eudev)))               ; in Requires.private of gudev-1.0.pc
+     (list glib ; in Requires of gudev-1.0.pc
+           eudev))               ; in Requires.private of gudev-1.0.pc
     (inputs
      `(("udev" ,eudev)))
     (home-page "https://wiki.gnome.org/Projects/libgudev")
@@ -6451,7 +6550,7 @@ part of udev-extras, then udev, then systemd.  It's now a project on its own.")
 (define-public gvfs
   (package
     (name "gvfs")
-    (version "1.40.2")
+    (version "1.48.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/gvfs/"
@@ -6459,13 +6558,10 @@ part of udev-extras, then udev, then systemd.  It's now a project on its own.")
                                   "gvfs-" version ".tar.xz"))
               (sha256
                (base32
-                "07lpcfric3h0302n9b1pwa38mjb76r9s98kg2867y2d1qvzfivxx"))
-              ;; This patch may be removed when upgrading to version 1.46.x.
-              (patches
-               (search-patches "gvfs-add-support-for-libplist-2.2.patch"))))
+                "1hlxl6368h6nyqp1888szxs9hnpcw98k3h23dgqi29xd38klzsmj"))))
     (build-system meson-build-system)
     (arguments
-     '(#:glib-or-gtk? #t
+     `(#:glib-or-gtk? #t
        #:configure-flags
        (list "-Dsystemduserunitdir=no"
              "-Dtmpfilesdir=no"
@@ -6473,7 +6569,7 @@ part of udev-extras, then udev, then systemd.  It's now a project on its own.")
              (string-append "-Dc_link_args=-Wl,-rpath="
                             (assoc-ref %outputs "out") "/lib/gvfs"))))
     (native-inputs
-     `(("glib:bin" ,glib "bin") ; for glib-genmarshal, etc.
+     `(("glib:bin" ,glib "bin")         ;for glib-genmarshal, etc.
        ("gettext" ,gettext-minimal)
        ("gtk-doc" ,gtk-doc/stable)
        ("pkg-config" ,pkg-config)
@@ -6484,10 +6580,11 @@ part of udev-extras, then udev, then systemd.  It's now a project on its own.")
        ("docbook-xsl" ,docbook-xsl)
        ("dbus" ,dbus)
        ("elogind" ,elogind)
-       ("fuse" ,fuse)
+       ("fuse" ,fuse-3)
        ("gcr" ,gcr)
        ("glib" ,glib)
        ("gnome-online-accounts" ,gnome-online-accounts)
+       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
        ("libarchive" ,libarchive)
        ("libbluray" ,libbluray)
        ("libcap" ,libcap)
@@ -6506,47 +6603,47 @@ part of udev-extras, then udev, then systemd.  It's now a project on its own.")
        ("openssh" ,openssh)
        ("polkit" ,polkit)
        ("udisks" ,udisks)))
-    ;; CVE-2019-{12447,12448,12449} are fixed in the 1.40.2 release.
-    (properties '((lint-hidden-cve . ("CVE-2019-12447"
-                                      "CVE-2019-12448"
-                                      "CVE-2019-12449"))))
     (home-page "https://wiki.gnome.org/gvfs/")
     (synopsis "Userspace virtual file system for GIO")
     (description
      "GVFS is a userspace virtual file system designed to work with the I/O
-abstraction of GIO.  It contains a GIO module that seamlessly adds GVFS support
-to all applications using the GIO API.  It also supports exposing the GVFS
-mounts to non-GIO applications using FUSE.
+abstraction of GIO.  It contains a GIO module that seamlessly adds GVFS
+support to all applications using the GIO API.  It also supports exposing the
+GVFS mounts to non-GIO applications using FUSE.
 
 GVFS comes with a set of backends, including trash support, SFTP, SMB, HTTP,
 DAV, and others.")
     (license license:lgpl2.0+)))
 
-(define-public gusb
+(define-public gusb-minimal
   (package
-    (name "gusb")
+    (name "gusb-minimal")
     (version "0.3.5")
     (source (origin
               (method git-fetch)
               (uri (git-reference
-                     (url "https://github.com/hughsie/libgusb")
-                     (commit version)))
+                    (url "https://github.com/hughsie/libgusb")
+                    (commit version)))
               (file-name (git-file-name name version))
               (sha256
                (base32
                 "0ifhdqhpyxwsg0z9s1anj7cf5pya5qsqyp5ksh9n7mqwa4lrjkl8"))))
     (build-system meson-build-system)
-    (native-inputs
-     `(("gobject-introspection" ,gobject-introspection)
-       ("pkg-config" ,pkg-config)
-       ("vala" ,vala)
-       ("gtk-doc" ,gtk-doc/stable)))
+    (arguments
+     `(#:tests? #f          ;libusb fails to initialize.  Wonder what that is.
+       #:configure-flags
+       (cons "-Ddocs=false"
+             (if ,(%current-target-system)
+                 ;; Introspection data cannot currently be cross-compiled.
+                 '("-Dintrospection=false"
+                   ;; Requires introspection data.
+                   "-Dvapi=false")
+                 '()))))
+    (native-inputs
+     (list gobject-introspection pkg-config python vala))
     (propagated-inputs
      ;; Both of these are required by gusb.pc.
-     `(("glib" ,glib)
-       ("libusb" ,libusb)))
-    (arguments
-     `(#:tests? #f)) ;libusb fails to initialize.  Wonder what that is.
+     (list glib libusb))
     (home-page "https://github.com/hughsie/libgusb")
     (synopsis "GLib binding for libusb1")
     (description
@@ -6556,37 +6653,51 @@ and integration into a mainloop.  This makes it easy to integrate low level
 USB transfers with your high-level application or system daemon.")
     (license license:lgpl2.1+)))
 
+(define-public gusb
+  (package/inherit gusb-minimal
+    (name "gusb")
+    (arguments
+     (substitute-keyword-arguments (package-arguments gusb-minimal)
+       ((#:configure-flags flags)
+        `(cons "-Ddocs=true"
+               (delete "-Ddocs=false" ,flags)))))
+    (native-inputs
+     (cons `("gtk-doc" ,gtk-doc/stable)
+           (package-native-inputs gusb-minimal)))))
+
 (define-public simple-scan
   (package
     (name "simple-scan")
-    (version "3.38.2")
+    (version "40.7")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://gnome/sources/simple-scan/"
-                           (version-major+minor version) "/"
+                           (version-major version) "/"
                            "simple-scan-" version ".tar.xz"))
        (sha256
-        (base32 "02sdkhxgr6i7iy481h4xavgaqd0a5dlsipzwrm4qd242jrr813d8"))))
+        (base32 "0lrxmk8xqvrb5gn5mpgqij133giwvrgavy49m55d7xssrd91hmbw"))))
     (build-system meson-build-system)
     ;; TODO: Fix icons in home screen, About dialogue, and scan menu.
     (arguments
-     '(#:glib-or-gtk? #t))
-    (inputs
-     `(("gtk" ,gtk+)
-       ("zlib" ,zlib)
-       ("cairo" ,cairo)
-       ("colord" ,colord)
-       ("gdk-pixbuf" ,gdk-pixbuf)
-       ("gusb" ,gusb)
-       ("libsane" ,sane-backends)))
+     `(#:glib-or-gtk? #t))
     (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("itstool" ,itstool)
-       ("glib" ,glib "bin")             ; glib-compile-schemas, etc.
-       ("pkg-config" ,pkg-config)
-       ("vala" ,vala)
-       ("xmllint" ,libxml2)))
+     (list gettext-minimal
+           itstool
+           `(,glib "bin")               ; glib-compile-schemas, etc.
+           pkg-config
+           python
+           vala
+           libxml2))
+    (inputs
+     (list gtk+
+           zlib
+           cairo
+           colord
+           gdk-pixbuf
+           gusb
+           libhandy
+           sane-backends))
     (home-page "https://gitlab.gnome.org/GNOME/simple-scan")
     (synopsis "Document and image scanner")
     (description
@@ -6632,7 +6743,7 @@ almost all of them.")
                            ":")))
                (wrap-program (string-append out "/bin/eolie")
                  `("LD_LIBRARY_PATH" ":" prefix (,path))
-                 `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH")))
+                 `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH")))
                  `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH")))))
              #t)))))
     (native-inputs
@@ -6669,48 +6780,46 @@ a secret password store, an adblocker, and a modern UI.")
 (define-public epiphany
   (package
     (name "epiphany")
-    (version "3.34.4")
+    (version "41.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/epiphany/"
-                                  (version-major+minor version) "/"
+                                  (version-major version) "/"
                                   "epiphany-" version ".tar.xz"))
               (sha256
                (base32
-                "13ar3s40cds1rplwbzx0fzigf120w0rydiv05r3k6zpc0zy91qb0"))))
-
+                "0k7b22zq3z1kllzqxgwsvwb1lp0j6rjb3k1hvhna3i573wc4mpji"))
+              (patches
+               (search-patches "epiphany-update-libportal-usage.patch"))))
     (build-system meson-build-system)
     (arguments
-     '(#:glib-or-gtk? #t
+     `(#:glib-or-gtk? #t
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'skip-gtk-update-icon-cache
            ;; Don't create 'icon-theme.cache'.
            (lambda _
              (substitute* "post_install.py"
-               (("gtk-update-icon-cache") "true"))
-             #t))
+               (("gtk-update-icon-cache") "true"))))
          (add-after 'unpack 'disable-failing-tests
            (lambda _
              (substitute* "tests/meson.build"
-               ;; embed_shell fails, because webkitgtk apparently no longer supports
-               ;; overriding the ftp schema
-               ;; web_app_utils fails due to missing network access
+               ;; embed_shell fails, because webkitgtk apparently no longer
+               ;; supports overriding the ftp schema web_app_utils fails due
+               ;; to missing network access.
                (("(embed_shell|web_app_utils)_test,")
-                "find_program('sh'), args: ['-c', 'exit 77'],"))
-             #t))
+                "find_program('sh'), args: ['-c', 'exit 77'],"))))
          (add-before 'check 'pre-check
            (lambda _
              ;; Tests require a running X server.
              (system "Xvfb :1 &")
-             (setenv "DISPLAY" ":1")
-             #t)))
+             (setenv "DISPLAY" ":1"))))
        #:configure-flags
        ;; Otherwise, the RUNPATH will lack the final 'epiphany' path component.
        (list (string-append "-Dc_link_args=-Wl,-rpath="
                             (assoc-ref %outputs "out") "/lib/epiphany"))))
     (propagated-inputs
-     `(("dconf" ,dconf)))
+     (list dconf))
     (native-inputs
      `(("desktop-file-utils" ,desktop-file-utils) ; for update-desktop-database
        ("glib:bin" ,glib "bin") ; for glib-mkenums
@@ -6722,19 +6831,22 @@ a secret password store, an adblocker, and a modern UI.")
     (inputs
      `(("avahi" ,avahi)
        ("gcr" ,gcr)
-       ("gdk-pixbuf+svg" ,gdk-pixbuf+svg) ; for loading SVG files
+       ("librsvg" ,librsvg) ; for loading SVG files
        ("glib-networking" ,glib-networking)
        ("gnome-desktop" ,gnome-desktop)
        ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
        ("json-glib" ,json-glib)
        ("iso-codes" ,iso-codes)
+       ("libarchive" ,libarchive)
        ("libdazzle" ,libdazzle)
+       ("libhandy" ,libhandy)
        ("libnotify" ,libnotify)
+       ("libportal" ,libportal)
        ("libsecret" ,libsecret)
        ("libxslt" ,libxslt)
        ("nettle" ,nettle) ; for hogweed
        ("sqlite" ,sqlite)
-       ("webkitgtk" ,webkitgtk)))
+       ("webkitgtk" ,webkitgtk-with-libsoup2)))
     (home-page "https://wiki.gnome.org/Apps/Web")
     (synopsis "GNOME web browser")
     (description
@@ -6778,7 +6890,7 @@ principles are simplicity and standards compliance.")
             (let ((prog (string-append (assoc-ref outputs "out")
                                        "/bin/d-feet")))
               (wrap-program prog
-                `("PYTHONPATH" = (,(getenv "PYTHONPATH")))
+                `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH")))
                 `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH"))))
               #t))))))
     (native-inputs
@@ -6804,21 +6916,28 @@ of running programs and invoke methods on those interfaces.")
 (define-public yelp-xsl
   (package
     (name "yelp-xsl")
-    (version "3.34.2")
+    (version "41.0")
     (source
      (origin
        (method url-fetch)
        (uri
         (string-append "mirror://gnome/sources/" name "/"
-                       (version-major+minor version) "/"
+                       (version-major version) "/"
                        name "-" version ".tar.xz"))
        (sha256
-        (base32 "1bdpgkzawhqmw52l6zx8czzg1ndfgcf1p44m2bxjdpqkc4afcgqc"))))
+        (base32 "19d46rkajvr0f04560vlrzwvac88x5j8ilvzwkawbn5vjg069kf8"))))
     (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags
+       (list
+        "--enable-doc")))
     (native-inputs
-     `(("gettext-minimal" ,gettext-minimal)
+     `(("ducktype" ,mallard-ducktype)
+       ("gettext" ,gettext-minimal)
+       ("intltool" ,intltool)
        ("itstool" ,itstool)
-       ("xmllint" ,libxml2)))
+       ("xmllint" ,libxml2)
+       ("xsltproc" ,libxslt)))
     (synopsis "XSL stylesheets for Yelp")
     (description "Yelp-XSL is a collection of programs and data files to help
 you build, maintain, and distribute documentation.  It provides XSLT stylesheets
@@ -6839,29 +6958,23 @@ jQuery.Syntax JavaScript libraries.")
 (define-public yelp
   (package
     (name "yelp")
-    (version "3.32.2")
+    (version "41.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
-                                  (version-major+minor version) "/"
+                                  (version-major version) "/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0yrl96icmmrxvg7sxl519gzg9qb368cmzgrr9ddh181ignkxzx7f"))))
+                "11shrqass8ak8m10nayqssa6sbrrxa13ffpamvqi1c0yzkxdk9r5"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("glib:bin" ,glib "bin") ; for glib-genmarshal, etc.
-       ("intltool" ,intltool)
-       ("itstool" ,itstool)
-       ("pkg-config" ,pkg-config)))
+     (list `(,glib "bin") ; for glib-genmarshal, etc.
+           intltool itstool pkg-config))
     (propagated-inputs
-     `(("dconf" ,dconf)))
+     (list dconf))
     (inputs
-     `(("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("libxslt" ,libxslt)
-       ("sqlite" ,sqlite)
-       ("webkitgtk" ,webkitgtk)
-       ("yelp-xsl" ,yelp-xsl)))
+     (list gsettings-desktop-schemas libxslt sqlite webkitgtk yelp-xsl))
     (home-page "https://wiki.gnome.org/Apps/Yelp")
     (synopsis "GNOME help browser")
     (description
@@ -6885,9 +6998,9 @@ freedesktop.org help system specification.")
         (base32 "1yg8f5g5wadhmy4yfd9yjhvd8vll4gq4l86ibp0b42qbxnsmcf0q"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("yelp-xsl" ,yelp-xsl)))
+     (list yelp-xsl))
     (propagated-inputs
      ;; Needed by `yelp-build', `yelp-check' or 'yelp.m4'.
      `(("itstool" ,itstool)
@@ -6927,11 +7040,9 @@ wraps things up in a developer-friendly way.")
                 (("@INTROSPECTION_TYPELIBDIR@")
                  (string-append out "/lib/girepository-1.0/")))))))))
     (native-inputs
-     `(("glib" ,glib "bin")
-       ("pkg-config" ,pkg-config)))
+     (list `(,glib "bin") pkg-config))
     (inputs
-     `(("glib" ,glib)
-       ("gobject-introspection" ,gobject-introspection)))
+     (list glib gobject-introspection))
     (home-page "https://wiki.gnome.org/Projects/Libgee")
     (synopsis "GObject collection library")
     (description
@@ -6953,16 +7064,13 @@ classes for commonly used data structures.")
                 "0k4ljzzz5dwqndw8awvlw3ala8rh3b2rk9i4jzvywc53mi9ba8i3"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("gcr" ,gcr)
-       ("glib" ,glib "bin")
-       ("pkg-config" ,pkg-config)
-       ("vala" ,vala)))
+     (list gcr
+           `(,glib "bin") pkg-config vala))
     (propagated-inputs
      ;; Listed in "Requires" section of gexiv2.pc
-     `(("exiv2" ,exiv2)))
+     (list exiv2))
     (inputs
-     `(("glib" ,glib)
-       ("gobject-introspection" ,gobject-introspection)))
+     (list glib gobject-introspection))
     (home-page "https://wiki.gnome.org/Projects/gexiv2")
     (synopsis "GObject wrapper around the Exiv2 photo metadata library")
     (description
@@ -6995,12 +7103,13 @@ metadata in photo and video files of various formats.")
                (("update-desktop-database") (which "true")))
              #t)))))
     (propagated-inputs
-     `(("dconf" ,dconf)))
+     (list dconf))
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("glib:bin" ,glib "bin")
        ("itstool" ,itstool)
        ("pkg-config" ,pkg-config)
+       ("python" ,python)
        ("vala" ,vala)))
     (inputs
      `(("gcr" ,gcr)
@@ -7013,10 +7122,9 @@ metadata in photo and video files of various formats.")
        ("libgphoto2" ,libgphoto2)
        ("libgudev" ,libgudev)
        ("libraw" ,libraw)
-       ("libsoup" ,libsoup)
        ("libxml2" ,libxml2)
        ("sqlite" ,sqlite)
-       ("webkitgtk" ,webkitgtk)))
+       ("webkitgtk" ,webkitgtk-with-libsoup2)))
     (home-page "https://wiki.gnome.org/Apps/Shotwell")
     (synopsis "Photo manager for GNOME 3")
     (description
@@ -7029,7 +7137,7 @@ share them with others via social networking and more.")
 (define-public file-roller
   (package
     (name "file-roller")
-    (version "3.38.0")
+    (version "3.40.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/file-roller/"
@@ -7037,24 +7145,25 @@ share them with others via social networking and more.")
                                   "file-roller-" version ".tar.xz"))
               (sha256
                (base32
-                "06ikvjjcgb8nxabkn2rywy76a1c7s6w8dszaxvaxldbxarp1qgbj"))))
+                "039w1dcpa5ypmv6sm634alk9vbcdkyvy595vkh5gn032jsiqca2a"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("desktop-file-utils" ,desktop-file-utils) ; for update-desktop-database
-       ("intltool" ,intltool)
-       ("itstool" ,itstool)
-       ("pkg-config" ,pkg-config)
-       ("gtk+" ,gtk+ "bin") ; gtk-update-icon-cache
-       ("glib:bin" ,glib "bin")))
+     (list desktop-file-utils ; for update-desktop-database
+           intltool
+           itstool
+           pkg-config
+           python
+           `(,gtk+ "bin") ; gtk-update-icon-cache
+           `(,glib "bin")))
     ;; TODO: Add libnautilus.
     (inputs
-     `(("gtk+" ,gtk+)
-       ("gdk-pixbuf" ,gdk-pixbuf)
-       ("json-glib" ,json-glib)
-       ("libarchive" ,libarchive)
-       ("libnotify" ,libnotify)
-       ("nettle" ,nettle)
-       ("libxml2" ,libxml2)))
+     (list gtk+
+           gdk-pixbuf
+           json-glib
+           libarchive
+           libnotify
+           nettle
+           libxml2))
     (synopsis "Graphical archive manager for GNOME")
     (description "File Roller is an archive manager for the GNOME desktop
 environment that allows users to view, unpack, and create compressed archives
@@ -7065,44 +7174,34 @@ such as gzip tarballs.")
 (define-public gnome-session
   (package
     (name "gnome-session")
-    (version "3.34.2")
+    (version "40.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
-                                  (version-major+minor version) "/"
+                                  (version-major version) "/"
                                   name "-" version ".tar.xz"))
+              (patches (search-patches "gnome-session-support-elogind.patch"))
               (sha256
                (base32
-                "1qgqp97f8k2zi2ydvhds14zsjzfj7cv521r6wx5sw0qacn0p7dwb"))))
+                "02z0xr6sv9ibl7awbw9j4y05hf4jk1zgvsbbmh7n27hhjvsvc8pl"))))
     (arguments
-     '(#:glib-or-gtk? #t
+     `(#:glib-or-gtk? #t
        #:phases
        (modify-phases %standard-phases
-         (add-before 'configure 'pre-configure
-           (lambda* (#:key outputs #:allow-other-keys)
-             ;; Use elogind instead of systemd.
-             (substitute* "meson.build"
-               (("libsystemd-login") "libelogind")
-               (("and libsystemd_daemon_dep.found.*") ","))
-             (substitute* "gnome-session/gsm-systemd.c"
-               (("#include <systemd/sd-login.h>")
-                "#include <elogind/sd-login.h>"))
-             ;; Remove uses of the systemd daemon.
-             (substitute* "gnome-session/gsm-autostart-app.c"
-               (("#ifdef HAVE_SYSTEMD") "#if 0"))
-             #t))
          (add-after 'install 'wrap-gnome-session
            (lambda* (#:key inputs outputs #:allow-other-keys)
              ;; Make sure 'gnome-session' finds the 'gsettings' program.
              (let ((glib (assoc-ref inputs "glib:bin"))
                    (out  (assoc-ref outputs "out")))
                (wrap-program (string-append out "/bin/gnome-session")
-                 `("PATH" ":" prefix (,(string-append glib "/bin"))))
-               #t))))
+                 `("PATH" ":" prefix (,(string-append glib "/bin"))))))))
 
        #:configure-flags
        '("-Ddocbook=false" ; FIXME: disabled because of docbook validation error
          "-Dman=false" ; FIXME: disabled because of docbook validation error
+         "-Delogind=true"
+         "-Dsystemd=false"
+         "-Dsystemd_session=disable"
          "-Dsystemd_journal=false")))
     (build-system meson-build-system)
     (native-inputs
@@ -7115,17 +7214,17 @@ such as gzip tarballs.")
        ("docbook-xml" ,docbook-xml)
        ("xmlto" ,xmlto)))
     (inputs
-     `(("elogind" ,elogind)
-       ("gnome-desktop" ,gnome-desktop)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gtk+" ,gtk+)
-       ("json-glib" ,json-glib)
-       ("libsm" ,libsm)
-       ("libxcomposite" ,libxcomposite)
-       ("libxtst" ,libxtst)
-       ("mesa" ,mesa)
-       ("upower" ,upower)
-       ("xtrans" ,xtrans)))
+     (list elogind
+           gnome-desktop
+           gsettings-desktop-schemas
+           gtk+
+           json-glib
+           libsm
+           libxcomposite
+           libxtst
+           mesa
+           upower
+           xtrans))
     (synopsis "Session manager for GNOME")
     (description
      "This package contains the GNOME session manager, as well as a
@@ -7136,7 +7235,7 @@ configuration program to choose applications starting on login.")
 (define-public gjs
   (package
     (name "gjs")
-    (version "1.58.3")
+    (version "1.70.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
@@ -7144,30 +7243,29 @@ configuration program to choose applications starting on login.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1bkksx362007zs8c31ydygb29spwa5g5kch1ad2grc2sp53wv7ya"))))
-    (build-system gnu-build-system)
+                "0pqwhq0znprs0h5ixz396912acwzk9zvjfhi9qvh52ii38s2j1jb"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  (substitute* "installed-tests/scripts/testCommandLine.sh"
+                    (("Valentín") "")
+                    (("☭") ""))))))
+    (build-system meson-build-system)
     (arguments
-     '(#:phases
+     ;; Use meson-0.59, otherwise we'd get "ERROR: "install_dir" must be
+     ;; specified when installing a target".
+     `(#:meson ,meson-0.59
+       #:configure-flags '("-Dinstalled_tests=false")
+       #:phases
        (modify-phases %standard-phases
-         (add-before
-          'check 'pre-check
-          (lambda _
-            ;; The test suite requires a running X server.
-            (system "Xvfb :1 &")
-            (setenv "DISPLAY" ":1")
-
-            ;; For the missing /etc/machine-id.
-            (setenv "DBUS_FATAL_WARNINGS" "0")
+         (add-before 'check 'pre-check
+           (lambda _
+             ;; The test suite requires a running X server.
+             (system "Xvfb :1 &")
+             (setenv "DISPLAY" ":1")
 
-            ;; Our mozjs-38 package does not compile the required Intl API
-            ;; support for these failing tests.
-            (substitute* "installed-tests/js/testLocale.js"
-              ((".*toBeDefined.*") "")
-              ((".*expect\\(datestr\\).*") ""))
-            (substitute* "installed-tests/scripts/testCommandLine.sh"
-              (("Valentín") "")
-              (("☭") ""))
-            #t)))))
+             ;; For the missing /etc/machine-id.
+             (setenv "DBUS_FATAL_WARNINGS" "0"))))))
     (native-inputs
      `(("glib:bin" ,glib "bin")       ; for glib-compile-resources
        ("pkg-config" ,pkg-config)
@@ -7179,12 +7277,9 @@ configuration program to choose applications starting on login.")
        ("xvfb" ,xorg-server-for-tests)))
     (propagated-inputs
      ;; These are all in the Requires.private field of gjs-1.0.pc.
-     `(("cairo" ,cairo)
-       ("gobject-introspection" ,gobject-introspection)
-       ("mozjs" ,mozjs-60)))
+     (list cairo gobject-introspection mozjs-78))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("readline" ,readline)))
+     (list gtk+ readline))
     (synopsis "Javascript bindings for GNOME")
     (home-page "https://live.gnome.org/Gjs")
     (description
@@ -7195,15 +7290,15 @@ javascript engine and the GObject introspection framework.")
 (define-public gedit
   (package
     (name "gedit")
-    (version "3.34.1")
+    (version "40.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
-                                  (version-major+minor version) "/"
+                                  (version-major version) "/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1inm50sdfw63by1lf4f1swb59mpyxlly0g5rdg99j5l3357fzygb"))))
+                "149ngl9qw6h59546lir1pa7hvw23ppsnqlj9mfqphmmn5jl99qsm"))))
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
@@ -7237,17 +7332,17 @@ javascript engine and the GObject introspection framework.")
              (let ((out               (assoc-ref outputs "out"))
                    (gtksourceview     (assoc-ref inputs "gtksourceview"))
                    (gi-typelib-path   (getenv "GI_TYPELIB_PATH"))
-                   (python-path       (getenv "PYTHONPATH")))
+                   (python-path       (getenv "GUIX_PYTHONPATH")))
                (wrap-program (string-append out "/bin/gedit")
                  ;; For plugins.
                  `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))
-                 `("PYTHONPATH" ":" prefix (,python-path))
+                 `("GUIX_PYTHONPATH" ":" prefix (,python-path))
                  ;; For language-specs.
                  `("XDG_DATA_DIRS" ":" prefix (,(string-append gtksourceview
                                                                "/share")))))
              #t)))))
     (propagated-inputs
-     `(("dconf" ,dconf)))
+     (list dconf))
     (native-inputs
      `(("desktop-file-utils" ,desktop-file-utils) ; for update-desktop-database
        ("intltool" ,intltool)
@@ -7265,21 +7360,23 @@ javascript engine and the GObject introspection framework.")
             (base32 "16yld0ap7qj1n96h4f2sqkjmibg7xx5xwkqxdfzam2nmyfdlrrrs"))))
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("glib" ,glib)
-       ("gspell" ,gspell)
-       ("gtk+" ,gtk+)
-       ("gtksourceview" ,gtksourceview)
-       ("libpeas" ,libpeas)
-       ("libxml2" ,libxml2)
-       ("iso-codes" ,iso-codes)
-       ("python-pygobject" ,python-pygobject)
-       ("python" ,python)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("libx11" ,libx11)
-       ("vala" ,vala)
-       ("adwaita-icon-theme" ,adwaita-icon-theme)
-       ("libsoup" ,libsoup)
-       ("gnome-desktop" ,gnome-desktop)))
+     (list amtk
+           glib
+           gspell
+           gtk+
+           gtksourceview
+           libpeas
+           libxml2
+           iso-codes
+           python-pygobject
+           python
+           tepl
+           gsettings-desktop-schemas
+           libx11
+           vala
+           adwaita-icon-theme
+           libsoup
+           gnome-desktop))
     (home-page "https://wiki.gnome.org/Apps/Gedit")
     (synopsis "GNOME text editor")
     (description "While aiming at simplicity and ease of use, gedit is a
@@ -7300,12 +7397,9 @@ powerful general purpose text editor.")
                 "15fdh8xfdhnwcynyh4byx3mrjxbyprqnwxzi7qn3g5wwaqryg1p7"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("itstool" ,itstool)
-       ("pkg-config" ,pkg-config)))
+     (list gettext-minimal itstool pkg-config))
     (inputs
-     `(("libnotify" ,libnotify)
-       ("webkitgtk" ,webkitgtk)))
+     (list libnotify webkitgtk))
     (synopsis "Display graphical dialog boxes from shell scripts")
     (home-page "https://www.gnome.org")
     (description
@@ -7316,69 +7410,144 @@ to display dialog boxes from the commandline and shell scripts.")
 (define-public mutter
   (package
     (name "mutter")
-    (version "3.34.2")
+    (version "41.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
-                                  (version-major+minor version) "/"
+                                  (version-major version) "/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0b8bz5kvs7rlwvqsg87cf6jhrrj95vgd1l235mjx8rip35ipfvrd"))))
+                "17pqrm48kddqrc3fl96n5knhaxyn0crg0zv7zpmqhk848jks307s"))))
     ;; NOTE: Since version 3.21.x, mutter now bundles and exports forked
     ;; versions of cogl and clutter.  As a result, many of the inputs,
     ;; propagated-inputs, and configure flags used in cogl and clutter are
     ;; needed here as well.
     (build-system meson-build-system)
     (arguments
-     '(;; XXX: All mutter tests fail with the following error:
-       ;;   Settings schema 'org.gnome.mutter' is not installed
-       #:tests? #f
+     `(#:imported-modules (,@%meson-build-system-modules
+                           (guix build syscalls))
+       #:modules ((guix build meson-build-system)
+                  (guix build syscalls)
+                  (guix build utils)
+                  (ice-9 match))
        #:glib-or-gtk? #t
        #:configure-flags
-       ;; TODO: Enable profiler when Sysprof is packaged.
-       (list "-Dprofiler=false"
-             ;; Otherwise, the RUNPATH will lack the final path component.
-             (string-append "-Dc_link_args=-Wl,-rpath="
-                            (assoc-ref %outputs "out") "/lib:"
-                            (assoc-ref %outputs "out") "/lib/mutter-5")
-
-             ;; The following flags are needed for the bundled clutter
-             (string-append "-Dxwayland_path="
-                            (assoc-ref %build-inputs "xorg-server-xwayland")
-                            "/bin/Xwayland")
-
-             ;; the remaining flags are needed for the bundled cogl
-             (string-append "-Dopengl_libname="
-                            (assoc-ref %build-inputs "mesa")
-                            "/lib/libGL.so"))
-       #:phases (modify-phases %standard-phases
-                  (add-after 'unpack 'fix-build-with-mesa-20
-                    (lambda _
-                      ;; Mimic upstream commit a444a4c5f58ea516ad for
-                      ;; compatibility with Mesa 20.  Remove for 3.36.
-                      (substitute* '("src/backends/meta-egl-ext.h"
-                                     "src/backends/meta-egl.c"
-                                     "src/backends/meta-egl.h")
-                        (("#include <EGL/eglext\\.h>" all)
-                         (string-append all "\n#include <EGL/eglmesaext.h>")))
-                      (substitute* "cogl/cogl/meson.build"
-                        (("#include <EGL/eglext\\.h>" all)
-                         (string-append all "\\n#include <EGL/eglmesaext.h>")))
-                      #t)))))
+       (list
+        ;; Otherwise, the RUNPATH will lack the final path component.
+        (string-append "-Dc_link_args=-Wl,-rpath="
+                       (assoc-ref %outputs "out") "/lib:"
+                       (assoc-ref %outputs "out") "/lib/mutter-9")
+        ;; Disable systemd support.
+        "-Dsystemd=false"
+        ;; The following flags are needed for the bundled clutter
+        (string-append "-Dxwayland_path="
+                       (assoc-ref %build-inputs "xorg-server-xwayland")
+                       "/bin/Xwayland")
+        ;; the remaining flags are needed for the bundled cogl
+        (string-append "-Dopengl_libname="
+                       (assoc-ref %build-inputs "mesa")
+                       "/lib/libGL.so")
+        (string-append "-Dgles2_libname="
+                       (assoc-ref %build-inputs "mesa")
+                       "/lib/libGLESv2.so")
+        "-Degl_device=true"              ;false by default
+        "-Dwayland_eglstream=true")      ;false by default
+       #:test-options
+       (list "--verbose")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-dlopen-calls
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "src/wayland/meta-wayland-egl-stream.c"
+               (("libnvidia-egl-wayland.so.1")
+                (string-append (assoc-ref inputs "egl-wayland")
+                               "/lib/libnvidia-egl-wayland.so.1")))))
+         (add-before 'configure 'set-udev-dir
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (setenv "PKG_CONFIG_UDEV_UDEVDIR"
+                     (string-append (assoc-ref outputs "out")
+                                    "/lib/udev"))))
+         (add-after 'unpack 'disable-problematic-tests
+           (lambda _
+             ;; The native-headless test hangs due to attempting to use audio,
+             ;; unavailable in the container.
+             ;; Note: the following sed expression deletes the whole test(...)
+             ;; expression paragraph.  For an explanation, see: info '(sed)
+             ;; Multiline techniques'.
+             (invoke "sed" "/./{H;$!d} ; x ; s/^.*native-headless.*$//"
+                     "-i" "src/tests/meson.build")))
+         (replace 'check
+           (lambda* (#:key tests? test-options parallel-tests?
+                     #:allow-other-keys)
+             (when tests?
+               ;; Setup (see the 'test-mutter' CI target at
+               ;; https://gitlab.gnome.org/GNOME/mutter/-/raw/main/.gitlab-ci.yml).
+               (setenv "XDG_RUNTIME_DIR" "runtime-dir")
+               (setenv "GSETTINGS_SCHEMA_DIR" "data")
+               (setenv "MUTTER_DEBUG_DUMMY_MODE_SPECS" "800x600@10.0")
+               (setenv "PIPEWIRE_DEBUG" "2")
+               (setenv "PIPEWIRE_LOG" "meson-logs/pipewire.log")
+               (setenv "XVFB_SERVER_ARGS" "+iglx -noreset")
+               (setenv "G_SLICE" "always-malloc")
+               (setenv "MALLOC_CHECK" "3")
+               (setenv "NO_AT_BRIDGE" "1")
+               ;; This is needed, otherwise the "mutter:core+mutter/unit /
+               ;; anonymous-file" test would fail (see:
+               ;; https://gitlab.gnome.org/GNOME/mutter/-/issues/2017).
+               (setenv "CI_JOB_ID" "1")
+
+               (invoke "glib-compile-schemas" (getenv "GSETTINGS_SCHEMA_DIR"))
+               (mkdir-p (getenv "XDG_RUNTIME_DIR"))
+               (chmod (getenv "XDG_RUNTIME_DIR") #o755)
+               (invoke "pipewire" "--version") ;check for pipewire
+               (system "pipewire &")    ;always returns 0 due to forking
+
+               (setenv "MESON_TESTTHREADS"
+                       (if parallel-tests?
+                           (number->string (parallel-job-count))
+                           "1"))
+               (match (primitive-fork)
+                 (0                     ;child process
+                  (set-child-subreaper!)
+                  ;; Use tini so that signals are properly handled and
+                  ;; doubly-forked processes get reaped; otherwise,
+                  ;; python-dbusmock would waste time polling for the dbus
+                  ;; processes it spawns to be reaped, in vain.
+                  (apply execlp "tini" "--"
+                         "dbus-run-session" "--"
+                         "xvfb-run" "-a" "-s" (getenv "XVFB_SERVER_ARGS")
+                         "meson" "test" "-t" "0" "--print-errorlogs"
+                         test-options))
+                 (pid
+                  (match (waitpid pid)
+                    ((_ . status)
+                     (unless (zero? status)
+                       (error "`meson test' exited with status"
+                              status))))))))))))
     (native-inputs
      `(("desktop-file-utils" ,desktop-file-utils) ; for update-desktop-database
-       ("glib:bin" ,glib "bin") ; for glib-compile-schemas, etc.
+       ("glib:bin" ,glib "bin")         ; for glib-compile-schemas, etc.
        ("gobject-introspection" ,gobject-introspection)
        ("intltool" ,intltool)
        ("pkg-config" ,pkg-config)
-       ("xorg-server" ,xorg-server-for-tests)
+       ("xvfb-run" ,xvfb-run)
        ;; For git build
        ("autoconf" ,autoconf)
        ("automake" ,automake)
-       ("libtool" ,libtool)))
+       ("libtool" ,libtool)
+       ;; For tests.
+       ;; Warnings are configured to be fatal during the tests; add an icon
+       ;; theme to please libxcursor.
+       ("adwaita-icon-theme" ,adwaita-icon-theme)
+       ("libxcursor" ,libxcursor)       ;for XCURSOR_PATH
+       ("pipewire" ,pipewire-0.3)
+       ("python" ,python)
+       ("python-dbus" ,python-dbus)
+       ("python-dbusmock" ,python-dbusmock)
+       ("tini" ,tini)))                 ;acting as init (zombie reaper)
     (propagated-inputs
-     `(;; libmutter.pc refers to these:
+     `( ;; libmutter.pc refers to these:
        ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
        ("gtk+" ,gtk+)
        ;; mutter-clutter-1.0.pc and mutter-cogl-1.0.pc refer to these:
@@ -7390,19 +7559,23 @@ to display dialog boxes from the commandline and shell scripts.")
        ("libinput" ,libinput)
        ("libx11" ,libx11)
        ("libxcomposite" ,libxcomposite)
+       ("libxcvt" ,libxcvt)
        ("libxdamage" ,libxdamage)
        ("libxext" ,libxext)
        ("libxfixes" ,libxfixes)
        ("libxkbcommon" ,libxkbcommon)
+       ("libxml2" ,libxml2)
        ("libxrandr" ,libxrandr)
        ("mesa" ,mesa)
        ("pango" ,pango)
        ("udev" ,eudev)
        ("xinput" ,xinput)))
     (inputs
-     `(("elogind" ,elogind)
+     `(("egl-wayland" ,egl-wayland)     ;for wayland-eglstream-protocols
+       ("elogind" ,elogind)
        ("gnome-desktop" ,gnome-desktop)
        ("gnome-settings-daemon" ,gnome-settings-daemon)
+       ("graphene" ,graphene)
        ("libcanberra-gtk" ,libcanberra)
        ("libgudev" ,libgudev)
        ("libice" ,libice)
@@ -7411,8 +7584,9 @@ to display dialog boxes from the commandline and shell scripts.")
        ("libxkbfile" ,libxkbfile)
        ("libxrandr" ,libxrandr)
        ("libxtst" ,libxtst)
-       ("pipewire" ,pipewire)
+       ("pipewire" ,pipewire-0.3)
        ("startup-notification" ,startup-notification)
+       ("sysprof" ,sysprof)
        ("upower-glib" ,upower)
        ("xkeyboard-config" ,xkeyboard-config)
        ("xorg-server-xwayland" ,xorg-server-xwayland)
@@ -7429,7 +7603,7 @@ window manager.")
 (define-public gnome-online-accounts
   (package
     (name "gnome-online-accounts")
-    (version "3.36.0")
+    (version "3.43.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
@@ -7437,7 +7611,7 @@ window manager.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0bigfi225g1prnxpb9lcc1i7mdcrkplwb05vilc43jik12cn53qw"))))
+                "1s5pmy3hx6hhnyi40r7b773py9kn2qbkxnpxv6149z9fl5ikdjrv"))))
     (outputs '("out" "lib"))
     (build-system glib-or-gtk-build-system)
     (arguments
@@ -7456,8 +7630,7 @@ window manager.")
                  (("@datadir@") (string-append lib "/share")))
                ;; Make sure gobject-introspection knows about the output
                ;; too (see <https://bugs.gnu.org/36535>).
-               (setenv "outputs" "out lib")
-               #t))))))
+               (setenv "outputs" "out lib")))))))
     (native-inputs
      `(("glib:bin" ,glib "bin") ; for glib-compile-schemas, etc.
        ("gobject-introspection" ,gobject-introspection)
@@ -7466,39 +7639,37 @@ window manager.")
        ("vala" ,vala)
        ("xsltproc" ,libxslt)))
     (propagated-inputs
-     `(("glib" ,glib)           ; required by goa-1.0.pc
-       ("gtk+" ,gtk+)))         ; required by goa-backend-1.0.pc
+     (list glib ; required by goa-1.0.pc
+           gtk+))         ; required by goa-backend-1.0.pc
     (inputs
      `(("docbook-xsl" ,docbook-xsl)
        ("json-glib" ,json-glib)
        ("libsecret" ,libsecret)
        ("rest" ,rest)
-       ("webkitgtk" ,webkitgtk)))
+       ;; WebKitGtk propagates libsoup 3, which causes the build to fail; so
+       ;; use a special variant.
+       ("webkitgtk" ,webkitgtk-with-libsoup2)))
     (synopsis "Single sign-on framework for GNOME")
     (home-page "https://wiki.gnome.org/Projects/GnomeOnlineAccounts")
     (description
      "GNOME Online Accounts provides interfaces so that applications and
-libraries in GNOME can access the user's online accounts.  It has providers for
-Google, ownCloud, Facebook, Flickr, Windows Live, Pocket, Foursquare, Microsoft
-Exchange, Last.fm, IMAP/SMTP, Jabber, SIP and Kerberos.")
+libraries in GNOME can access the user's online accounts.  It has providers
+for Google, ownCloud, Facebook, Flickr, Windows Live, Pocket, Foursquare,
+Microsoft Exchange, Last.fm, IMAP/SMTP, Jabber, SIP and Kerberos.")
     (license license:lgpl2.0+)))
 
 (define-public evolution-data-server
   (package
     (name "evolution-data-server")
-    (version "3.34.2")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "mirror://gnome/sources/" name "/"
-                                  (version-major+minor version) "/"
-                                  name "-" version ".tar.xz"))
-              (patches (search-patches "evolution-data-server-locales.patch"
-                                       "evolution-data-server-libical-compat.patch"
-                                       "evolution-data-server-CVE-2020-14928.patch"
-                                       "evolution-data-server-CVE-2020-16117.patch"))
-              (sha256
-               (base32
-                "16z85y6hhazcrp5ngw47w4x9r0j8zrj7awv5im58hhp0xs19zf1y"))))
+    (version "3.42.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://gnome/sources/" name "/"
+                           (version-major+minor version) "/"
+                           name "-" version ".tar.xz"))
+       (sha256
+        (base32 "0a7my8spwcaf2i2fz8ndddi1drv6l9gxq0qblmnkxzyhfwm7zrp6"))))
     (build-system cmake-build-system)
     (arguments
      '(#:configure-flags
@@ -7524,27 +7695,25 @@ Exchange, Last.fm, IMAP/SMTP, Jabber, SIP and Kerberos.")
              ;; assertion failed (g_slist_length (contacts) == 20): (0 == 20)
              (delete-file-recursively "tests/book-migration")
              (substitute* "tests/CMakeLists.txt"
-               (("add_subdirectory\\(book-migration\\)") ""))
-             #t))
+               (("add_subdirectory\\(book-migration\\)") ""))))
          (add-after 'unpack 'patch-paths
           (lambda _
             (substitute* '("tests/test-server-utils/e-test-server-utils.c"
                            "tests/libedata-book/data-test-utils.c"
                            "tests/libedata-book/test-book-cache-utils.c"
                            "tests/libedata-cal/test-cal-cache-utils.c")
-              (("/bin/rm") (which "rm")))
-            #t))
+              (("/bin/rm") (which "rm")))))
          (add-before 'configure 'dont-override-rpath
            (lambda _
              (substitute* "CMakeLists.txt"
                ;; CMakeLists.txt hard-codes runpath to just the libdir.
                ;; Remove it so the configure flag is respected.
-               (("SET\\(CMAKE_INSTALL_RPATH .*") ""))
-             #t)))))
+               (("SET\\(CMAKE_INSTALL_RPATH .*") "")))))))
     (native-inputs
      `(("glib:bin" ,glib "bin") ; for glib-mkenums, etc.
        ("gobject-introspection" ,gobject-introspection)
        ("gperf" ,gperf)
+       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
        ("intltool" ,intltool)
        ("pkg-config" ,pkg-config)
        ("vala" ,vala)
@@ -7554,7 +7723,7 @@ Exchange, Last.fm, IMAP/SMTP, Jabber, SIP and Kerberos.")
      `(("gtk+" ,gtk+)
        ("libical" ,libical)
        ("libsecret" ,libsecret)
-       ("libsoup" ,libsoup)
+       ("libsoup" ,libsoup-minimal-2)
        ("nss" ,nss)
        ("sqlite" ,sqlite)))
     (inputs
@@ -7566,7 +7735,7 @@ Exchange, Last.fm, IMAP/SMTP, Jabber, SIP and Kerberos.")
        ("libgweather" ,libgweather)
        ("mit-krb5" ,mit-krb5)
        ("openldap" ,openldap)
-       ("webkitgtk" ,webkitgtk)))
+       ("webkitgtk" ,webkitgtk-with-libsoup2)))
     (synopsis "Store address books and calendars")
     (home-page "https://wiki.gnome.org/Apps/Evolution")
     (description
@@ -7604,12 +7773,12 @@ Evolution (hence the name), but is now used by other packages as well.")
          (add-after 'install 'wrap-programs
           (lambda* (#:key outputs #:allow-other-keys)
             (let* ((out (assoc-ref outputs "out"))
-                   (python-path (getenv "PYTHONPATH"))
+                   (python-path (getenv "GUIX_PYTHONPATH"))
                    (gi-typelib-path (getenv "GI_TYPELIB_PATH")))
               (for-each
                (lambda (prog)
                  (wrap-program prog
-                   `("PYTHONPATH"      ":" prefix (,python-path))
+                   `("GUIX_PYTHONPATH"      ":" prefix (,python-path))
                    `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))))
                (list (string-append out "/bin/caribou-preferences")
                      (string-append out "/libexec/antler-keyboard"))))
@@ -7624,10 +7793,7 @@ Evolution (hence the name), but is now used by other packages as well.")
        ("xsltproc" ,libxslt)))
     (propagated-inputs
      ;; caribou-1.0.pc refers to all these.
-     `(("libgee" ,libgee)
-       ("libxklavier" ,libxklavier)
-       ("libxtst" ,libxtst)
-       ("gtk+" ,gtk+)))
+     (list libgee libxklavier libxtst gtk+))
     (inputs
      `(("clutter" ,clutter)
        ("dconf" ,dconf)
@@ -7643,30 +7809,24 @@ users.")
 (define-public network-manager
   (package
     (name "network-manager")
-    (version "1.24.0")
+    (version "1.32.12")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/NetworkManager/"
                                   (version-major+minor version) "/"
                                   "NetworkManager-" version ".tar.xz"))
-              (patches (search-patches "network-manager-plugin-path.patch"))
+              (patches (search-patches "network-manager-plugin-path.patch"
+                                       "network-manager-meson.patch"))
               (sha256
                (base32
-                "06044fl60bjlj7c6rqqfbm5795h61h6yzp7ch392hzcnm46wwhn3"))
-              (modules '((guix build utils)))
-              (snippet
-               '(begin
-                  (substitute* "src/devices/wwan/nm-modem-manager.c"
-                    (("systemd") "elogind"))
-                  #t))))
+                "0jzmz0zw64dgvdn2g7pppr7bkywpbxcbdb1viv6p7zh2lnh3dax8"))))
     (build-system meson-build-system)
     (outputs '("out"
-               "doc")) ; 8 MiB of gtk-doc HTML
+               "doc"))                  ; 8 MiB of gtk-doc HTML
     (arguments
      `(#:configure-flags
        (let ((out      (assoc-ref %outputs "out"))
-             (dhclient (string-append (assoc-ref %build-inputs "isc-dhcp")
-                                      "/sbin/dhclient")))
+             (dhclient (search-input-file %build-inputs "/sbin/dhclient")))
          (list
           ;; Otherwise, the RUNPATH will lack the final 'NetworkManager' path
           ;; component.
@@ -7695,6 +7855,13 @@ users.")
           (string-append "-Ddhclient=" dhclient)))
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'patch-dlopen-call-to-libjansson.so
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "src/libnm-glib-aux/nm-json-aux.c"
+               (("(handle = dlopen\\()soname" _ head)
+                (string-append
+                 head "\"" (search-input-file inputs
+                                              "lib/libjansson.so") "\"")))))
          (add-before 'configure 'pre-configure
            (lambda _
              ;; These tests try to test aspects of network-manager's
@@ -7702,33 +7869,33 @@ users.")
              ;; cope with being already in the Guix build jail as that jail
              ;; lacks some features that they would like to proxy over (like
              ;; a /sys mount).
-             (substitute* "src/platform/tests/meson.build"
+             (substitute* "src/core/tests/meson.build"
+               ((".*test-l3cfg.*") ""))
+             (substitute* "src/core/devices/tests/meson.build"
+               ((".*test-acd.*") "")
+               ((".*test-lldp.*") ""))
+             (substitute* "src/core/platform/tests/meson.build"
                ((".*test-address-linux.*") "")
                ((".*test-cleanup-linux.*") "")
                ((".*test-link-linux.*") "")
-               ((".*test-route-linux.*") ""))
-             (substitute* "src/devices/tests/meson.build"
-               ((".*test-acd.*") "")
-               ((".*test-lldp.*") ""))
-             #t))
+               ((".*test-lldp.*") "")
+               ((".*test-route-linux.*") "")
+               ((".*test-tc-linux.*") ""))))
          (add-after 'unpack 'patch-docbook-xml
            (lambda* (#:key inputs #:allow-other-keys)
              (let ((xmldoc (string-append (assoc-ref inputs "docbook-xml")
                                           "/xml/dtd/docbook")))
                (substitute* (find-files "." ".*\\.(xsl|xml)")
                  (("http://.*/docbookx\\.dtd")
-                  (string-append xmldoc "/docbookx.dtd")))
-               #t)))
+                  (string-append xmldoc "/docbookx.dtd"))))))
          (add-before 'check 'pre-check
            (lambda _
              ;; For the missing /etc/machine-id.
-             (setenv "DBUS_FATAL_WARNINGS" "0")
-             #t))
+             (setenv "DBUS_FATAL_WARNINGS" "0")))
          (add-before 'install 'no-polkit-magic
            ;; Meson ‘magically’ invokes pkexec, which fails (not setuid).
            (lambda _
-             (setenv "PKEXEC_UID" "something")
-             #t))
+             (setenv "PKEXEC_UID" "something")))
          (add-after 'install 'move-doc
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out"))
@@ -7739,10 +7906,9 @@ users.")
                                              (string-append doc directory))
                            (delete-file-recursively
                             (string-append out directory)))
-                         '("/share/doc" "/share/gtk-doc"))
-               #t))))))
+                         '("/share/doc" "/share/gtk-doc"))))))))
     (propagated-inputs
-     `(("glib" ,glib)))
+     (list glib))
     (native-inputs
      `(("glib:bin" ,glib "bin")         ; for gdbus-codegen
        ("gtk-doc" ,gtk-doc/stable)
@@ -7774,11 +7940,12 @@ users.")
        ("libgudev" ,libgudev)
        ("libndp" ,libndp)
        ("libnl" ,libnl)
+       ("libselinux" ,libselinux)
        ("libsoup" ,libsoup)
        ("mobile-broadband-provider-info" ,mobile-broadband-provider-info)
        ("modem-manager" ,modem-manager)
-       ("newt" ,newt)                       ;for the 'nmtui' console interface
-       ("openresolv" ,openresolv)           ; alternative resolv.conf manager
+       ("newt" ,newt)                   ;for the 'nmtui' console interface
+       ("openresolv" ,openresolv)       ; alternative resolv.conf manager
        ("polkit" ,polkit)
        ("ppp" ,ppp)
        ("readline" ,readline)
@@ -7819,10 +7986,8 @@ services.")
        (modify-phases %standard-phases
          (add-after 'configure 'patch-path
            (lambda* (#:key inputs outputs #:allow-other-keys #:rest args)
-             (let* ((ovpn (string-append (assoc-ref inputs "openvpn")
-                                         "/sbin/openvpn"))
-                    (modprobe (string-append (assoc-ref inputs "kmod")
-                                             "/bin/modprobe"))
+             (let* ((ovpn (search-input-file inputs "/sbin/openvpn"))
+                    (modprobe (search-input-file inputs "/bin/modprobe"))
                     (pretty-ovpn (string-append "\"" ovpn "\"")))
                (for-each
                 (lambda (file)
@@ -7834,15 +7999,14 @@ services.")
                 '("src/nm-openvpn-service.c" "properties/nm-openvpn-editor.c")))
              #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("kmod" ,kmod)
-       ("openvpn" ,openvpn)
-       ("network-manager" ,network-manager)
-       ("libnma" ,libnma)
-       ("libsecret" ,libsecret)))
+     (list gtk+
+           kmod
+           openvpn
+           network-manager
+           libnma
+           libsecret))
     (home-page "https://wiki.gnome.org/Projects/NetworkManager/VPN")
     (synopsis "OpenVPN plug-in for NetworkManager")
     (description
@@ -7875,10 +8039,8 @@ to virtual private networks (VPNs) via OpenVPN.")
        (modify-phases %standard-phases
          (add-after 'configure 'patch-path
            (lambda* (#:key inputs outputs #:allow-other-keys #:rest args)
-             (let* ((vpnc (string-append (assoc-ref inputs "vpnc")
-                                         "/sbin/vpnc"))
-                    (modprobe (string-append (assoc-ref inputs "kmod")
-                                             "/bin/modprobe"))
+             (let* ((vpnc (search-input-file inputs "/sbin/vpnc"))
+                    (modprobe (search-input-file inputs "/bin/modprobe"))
                     (pretty-ovpn (string-append "\"" vpnc "\"")))
                (substitute* "src/nm-vpnc-service.c"
                     (("\"/usr/local/sbin/vpnc\"") pretty-ovpn)
@@ -7887,15 +8049,14 @@ to virtual private networks (VPNs) via OpenVPN.")
                     (("/sbin/modprobe") modprobe)))
              #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("kmod" ,kmod)
-       ("vpnc" ,vpnc)
-       ("network-manager" ,network-manager)
-       ("libnma" ,libnma)
-       ("libsecret" ,libsecret)))
+     (list gtk+
+           kmod
+           vpnc
+           network-manager
+           libnma
+           libsecret))
     (home-page "https://wiki.gnome.org/Projects/NetworkManager/VPN")
     (synopsis "VPNC plug-in for NetworkManager")
     (description
@@ -7924,28 +8085,25 @@ Compatible with Cisco VPN concentrators configured to use IPsec.")
        (modify-phases %standard-phases
          (add-after 'configure 'patch-path
            (lambda* (#:key inputs outputs #:allow-other-keys #:rest args)
-             (let* ((openconnect (string-append (assoc-ref inputs "openconnect")
-                                         "/sbin/openconnect"))
-                    (modprobe (string-append (assoc-ref inputs "kmod")
-                                             "/bin/modprobe"))
+             (let* ((openconnect (search-input-file inputs
+                                                    "/sbin/openconnect"))
+                    (modprobe (search-input-file inputs "/bin/modprobe"))
                     (pretty-ovpn (string-append "\"" openconnect "\"")))
                (substitute* "src/nm-openconnect-service.c"
                  (("\"/usr(/local)?/s?bin/openconnect\"") pretty-ovpn)
                  (("/sbin/modprobe") modprobe)))
              #t)))))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("libnma" ,libnma)
-       ("pkg-config" ,pkg-config)))
+     (list intltool libnma pkg-config))
     (inputs
-     `(("gcr" ,gcr)
-       ("gtk+" ,gtk+)
-       ("kmod" ,kmod)
-       ("libsecret" ,libsecret)
-       ("libxml2" ,libxml2)
-       ("lz4" ,lz4)
-       ("network-manager" ,network-manager)
-       ("openconnect" ,openconnect)))
+     (list gcr
+           gtk+
+           kmod
+           libsecret
+           libxml2
+           lz4
+           network-manager
+           openconnect))
     (home-page "https://wiki.gnome.org/Projects/NetworkManager/VPN")
     (synopsis "OpenConnect plug-in for NetworkManager")
     (description
@@ -7995,7 +8153,7 @@ Cisco's AnyConnect SSL VPN.")
                 "1gj6lqqi613j2m49v9i82lqg1rv7kwwc8z4nxjcwpaa0ins803f7"))))
     (build-system meson-build-system)
     (arguments
-     '(#:glib-or-gtk? #t
+     `(#:glib-or-gtk? #t
        #:configure-flags
        '("-Dappindicator=yes")))
     (native-inputs
@@ -8006,20 +8164,18 @@ Cisco's AnyConnect SSL VPN.")
        ("pkg-config" ,pkg-config)))
     (propagated-inputs
      ;; libnm-gtk.pc refers to all these.
-     `(("dbus-glib" ,dbus-glib)
-       ("gtk+" ,gtk+)
-       ("network-manager" ,network-manager)
-       ;; nm-applet need by org.gnome.nm-applet.gschema.xml
-       ("libnma" ,libnma)))
-    (inputs
-     `(("gcr" ,gcr)
-       ("libappindicator" ,libappindicator)
-       ("libgudev" ,libgudev)
-       ("libnotify" ,libnotify)
-       ("libsecret" ,libsecret)
-       ("libselinux" ,libselinux)
-       ("jansson" ,jansson) ; for team support
-       ("modem-manager" ,modem-manager)))
+     (list dbus-glib gtk+ network-manager
+           ;; nm-applet need by org.gnome.nm-applet.gschema.xml
+           libnma))
+    (inputs
+     (list gcr
+           libappindicator
+           libgudev
+           libnotify
+           libsecret
+           libselinux
+           jansson ; for team support
+           modem-manager))
     (synopsis "Applet for managing network connections")
     (home-page "https://wiki.gnome.org/Projects/NetworkManager")
     (description
@@ -8062,20 +8218,19 @@ the available networks and allows users to easily switch between them.")
                   (string-append xsldoc "/html/chunk.xsl")))))))))
     (propagated-inputs
      ;; libxml++-3.0.pc refers to all these.
-     `(("glibmm" ,glibmm)
-       ("libxml2" ,libxml2)))
-    (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("doxygen" ,doxygen)
-       ("docbook-xml" ,docbook-xml)
-       ("docbook-xsl" ,docbook-xsl)
-       ("graphviz" ,graphviz) ; for dot
-       ("libtool" ,libtool)
-       ("libxslt" ,libxslt)
-       ("mm-common" ,mm-common)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list glibmm-2.64 libxml2))
+    (native-inputs
+     (list autoconf
+           automake
+           doxygen
+           docbook-xml
+           docbook-xsl
+           graphviz ; for dot
+           libtool
+           libxslt
+           mm-common
+           perl
+           pkg-config))
     (home-page "https://github.com/libxmlplusplus/libxmlplusplus/")
     (synopsis "C++ bindings to the libxml2 XML parser library")
     (description
@@ -8103,128 +8258,151 @@ library.")
 (define-public gdm
   (package
     (name "gdm")
-    (version "3.34.1")
+    (version "40.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
-                                  (version-major+minor version) "/"
+                                  (version-major version) "/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1lyqvcwxhwxklbxn4xjswjzr6fhjix6h28mi9ypn34wdm9bzcpg8"))
-              (patches (search-patches "gdm-default-session.patch"))))
-    (build-system glib-or-gtk-build-system)
+                "1zbks7bwbys1pn7sk0aq0dbn09adx51amb441z4z4j28cvma3f5b"))
+              (patches
+               (search-patches
+                "gdm-default-session.patch"
+                "gdm-elogind-support.patch"
+                "gdm-remove-hardcoded-xwayland-path.patch"
+                "gdm-wayland-session-wrapper-from-env.patch"
+                "gdm-pass-gdk-pixbuf-loader-env.patch"))))
+    (build-system meson-build-system)
     (arguments
-     '(#:configure-flags
-       `("--without-plymouth"
-         "--disable-systemd-journal"
-
-         ;; Using --with-initial-vt=7 allows GDM to run alongside TTY 1,
-         ;; instead of having to replace it (i.e., stopping the mingetty
-         ;; service for TTY 1 before starting GDM).
-         "--with-initial-vt=7"
-
-         ;; Use '/etc/environment' for locale settings instead of the
-         ;; systemd-specific '/etc/locale.conf'.
-         "--with-lang-file=/etc/environment"
-
-         ,(string-append "--with-udevdir="
-                         (assoc-ref %outputs "out") "/lib/udev")
-
-         "--localstatedir=/var"
-         ,(string-append "--with-default-path="
-                         (string-join '("/run/setuid-programs"
-                                        "/run/current-system/profile/bin"
-                                        "/run/current-system/profile/sbin")
-                                      ":"))
-         ;; Put GDM in bindir so that glib-or-gtk-build-system wraps the
-         ;; XDG_DATA_DIRS so that it finds its schemas.
-         "--sbindir" ,(string-append (assoc-ref %outputs "out") "/bin"))
+     `(#:glib-or-gtk? #t
+       #:configure-flags
+       ,#~(list
+           "-Dplymouth=disabled"
+           "-Dsystemd-journal=false"
+
+           ;; Using --with-initial-vt=7 allows GDM to run alongside TTY 1,
+           ;; instead of having to replace it (i.e., stopping the mingetty
+           ;; service for TTY 1 before starting GDM).
+           "-Dinitial-vt=7"
+
+           ;; Use elogind instead of systemd.
+           "-Dlogind-provider=elogind"
+           "-Dsystemdsystemunitdir=no"
+           "-Dsystemduserunitdir=no"
+
+           ;; Use '/etc/environment' for locale settings instead of the
+           ;; systemd-specific '/etc/locale.conf'.
+           "-Dlang-file=/etc/environment"
+
+           (string-append "-Dudev-dir=" #$output "/lib/udev")
+
+           "--localstatedir=/var"
+           (string-append "-Ddefault-path="
+                          (string-join '("/run/setuid-programs"
+                                         "/run/current-system/profile/bin"
+                                         "/run/current-system/profile/sbin")
+                                       ":"))
+           ;; Put GDM in bindir so that glib-or-gtk-build-system wraps the
+           ;; XDG_DATA_DIRS so that it finds its schemas.
+           "--sbindir" (string-append #$output "/bin"))
        #:phases
        (modify-phases %standard-phases
          (add-before
-          'configure 'pre-configure
-          (lambda* (#:key inputs outputs #:allow-other-keys)
-            ;; We don't have <systemd/sd-daemon.h>.
-            (substitute* '("common/gdm-log.c"
-                           "daemon/gdm-server.c"
-                           "daemon/gdm-session-worker.c"
-                           "daemon/gdm-session-worker-job.c")
-              (("#include <systemd/sd-daemon\\.h>") ""))
-            ;; Use elogind for sd-login.
-            (substitute* '("common/gdm-common.c"
-                           "daemon/gdm-local-display-factory.c"
-                           "daemon/gdm-manager.c"
-                           "libgdm/gdm-user-switching.c")
-              (("#include <systemd/sd-login\\.h>")
-               "#include <elogind/sd-login.h>"))
-            ;; Check for elogind.
-            (substitute* '("configure")
-              (("libsystemd")
-               "libelogind"))
-            ;; Look for system-installed sessions in
-            ;; /run/current-system/profile/share.
-            (substitute* '("libgdm/gdm-sessions.c"
-                           "daemon/gdm-session.c"
-                           "daemon/gdm-display.c"
-                           "daemon/gdm-launch-environment.c")
-              (("DATADIR \"/x")
-               "\"/run/current-system/profile/share/x")
-              (("DATADIR \"/wayland")
-               "\"/run/current-system/profile/share/wayland")
-              (("DATADIR \"/gnome")
-               "\"/run/current-system/profile/share/gnome"))
-            (let ((propagate '("GDM_CUSTOM_CONF"
-                               "GDM_DBUS_DAEMON"
-                               "GDM_X_SERVER"
-                               "GDM_X_SESSION"
-                               ;; XXX: Remove this once GNOME Shell is
-                               ;; a dependency of GDM.
-                               "XDG_DATA_DIRS")))
-              (substitute* "daemon/gdm-session.c"
-                (("set_up_session_environment \\(self\\);")
-                 (apply string-append
-                        "set_up_session_environment (self);\n"
-                        (map (lambda (name)
-                               (string-append
-                                "gdm_session_set_environment_variable "
-                                "(self, \"" name "\","
-                                "g_getenv (\"" name "\"));\n"))
-                             propagate)))))
-            ;; Find the configuration file using an environment variable.
-            (substitute* '("common/gdm-settings.c")
-              (("GDM_CUSTOM_CONF")
-               (string-append "(g_getenv(\"GDM_CUSTOM_CONF\") != NULL"
-                              " ? g_getenv(\"GDM_CUSTOM_CONF\")"
-                              " : GDM_CUSTOM_CONF)")))
-            ;; Use service-supplied path to X.
-            (substitute* '("daemon/gdm-server.c")
-              (("\\(X_SERVER X_SERVER_ARG_FORMAT")
-               "(\"%s\" X_SERVER_ARG_FORMAT, g_getenv (\"GDM_X_SERVER\")"))
-            (substitute* '("daemon/gdm-wayland-session.c"
-                           "daemon/gdm-x-session.c")
-              (("\"dbus-daemon\"")
-               "g_getenv (\"GDM_DBUS_DAEMON\")")
-              (("X_SERVER")
-               "g_getenv (\"GDM_X_SERVER\")")
-              (("GDMCONFDIR \"/Xsession\"")
-               "g_getenv (\"GDM_X_SESSION\")"))
-            ;; Use an absolute path for GNOME Session.
-            (substitute* "daemon/gdm-launch-environment.c"
-              (("\"gnome-session\"")
-               (string-append "\"" (assoc-ref inputs "gnome-session")
-                              "/bin/gnome-session\"")))
-            ;; Do not automatically select the placeholder session.
-            (substitute* "daemon/gdm-session.c"
-              (("!g_str_has_suffix [(]base_name, \"\\.desktop\"[)]")
-               (string-append "!g_str_has_suffix (base_name, \".desktop\") || "
-                              "(g_strcmp0(search_dirs[i], \""
-                              (assoc-ref outputs "out") "/share/gdm/BuiltInSessions/"
-                              "\") == 0 && "
-                              "g_strcmp0(base_name, \"fail.desktop\") == 0)"))
-              (("g_error [(]\"GdmSession: no session desktop files installed, aborting\\.\\.\\.\"[)];")
-               "{ self->fallback_session_name = g_strdup(\"fail\"); goto out; }"))
-            #t))
+             'configure 'pre-configure
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             ;; We don't have <systemd/sd-daemon.h>.
+             (substitute* '("common/gdm-log.c"
+                            "daemon/gdm-server.c"
+                            "daemon/gdm-session-worker.c"
+                            "daemon/gdm-session-worker-job.c")
+               (("#include <systemd/sd-daemon\\.h>") ""))
+             ;; Use elogind for sd-login.
+             (substitute* '("common/gdm-common.c"
+                            "daemon/gdm-local-display-factory.c"
+                            "daemon/gdm-manager.c"
+                            "libgdm/gdm-user-switching.c")
+               (("#include <systemd/sd-login\\.h>")
+                "#include <elogind/sd-login.h>"))
+             ;; Look for system-installed sessions in
+             ;; /run/current-system/profile/share.
+             (substitute* '("libgdm/gdm-sessions.c"
+                            "daemon/gdm-session.c"
+                            "daemon/gdm-display.c"
+                            "daemon/gdm-launch-environment.c")
+               (("DATADIR \"/x")
+                "\"/run/current-system/profile/share/x")
+               (("DATADIR \"/wayland")
+                "\"/run/current-system/profile/share/wayland")
+               (("DATADIR \"/gnome")
+                "\"/run/current-system/profile/share/gnome"))
+             (let ((propagate '("GDM_CUSTOM_CONF"
+                                "GDM_DBUS_DAEMON"
+                                "GDM_X_SERVER"
+                                "GDM_X_SESSION"
+                                ;; XXX: Remove this once GNOME Shell is
+                                ;; a dependency of GDM.
+                                "XDG_DATA_DIRS")))
+               (substitute* "daemon/gdm-session.c"
+                 (("set_up_session_environment \\(self\\);")
+                  (apply string-append
+                         "set_up_session_environment (self);\n"
+                         (map (lambda (name)
+                                (string-append
+                                 "gdm_session_set_environment_variable "
+                                 "(self, \"" name "\","
+                                 "g_getenv (\"" name "\"));\n"))
+                              propagate)))))
+             ;; Find the configuration file using an environment variable.
+             (substitute* '("common/gdm-settings.c")
+               (("GDM_CUSTOM_CONF")
+                (string-append "(g_getenv(\"GDM_CUSTOM_CONF\") != NULL"
+                               " ? g_getenv(\"GDM_CUSTOM_CONF\")"
+                               " : GDM_CUSTOM_CONF)")))
+             ;; Use service-supplied path to X.
+             (substitute* '("daemon/gdm-server.c")
+               (("\\(X_SERVER X_SERVER_ARG_FORMAT")
+                "(\"%s\" X_SERVER_ARG_FORMAT, g_getenv (\"GDM_X_SERVER\")"))
+             (substitute* '("daemon/gdm-wayland-session.c"
+                            "daemon/gdm-x-session.c")
+               (("\"dbus-daemon\"")
+                "g_getenv (\"GDM_DBUS_DAEMON\")")
+               (("X_SERVER")
+                "g_getenv (\"GDM_X_SERVER\")")
+               (("GDMCONFDIR \"/Xsession\"")
+                "g_getenv (\"GDM_X_SESSION\")"))
+             ;; Use an absolute path for GNOME Session.
+             (substitute* "daemon/gdm-launch-environment.c"
+               (("\"gnome-session\"")
+                (string-append "\"" (assoc-ref inputs "gnome-session")
+                               "/bin/gnome-session\"")))
+             ;; Do not automatically select the placeholder session.
+             (substitute* "daemon/gdm-session.c"
+               (("!g_str_has_suffix [(]base_name, \"\\.desktop\"[)]")
+                (string-append "!g_str_has_suffix (base_name, \".desktop\") || "
+                               "(g_strcmp0(search_dirs[i], \""
+                               (assoc-ref outputs "out") "/share/gdm/BuiltInSessions/"
+                               "\") == 0 && "
+                               "g_strcmp0(base_name, \"fail.desktop\") == 0)"))
+               (("g_error [(]\"GdmSession: no session desktop files installed, aborting\\.\\.\\.\"[)];")
+                "{ self->fallback_session_name = g_strdup(\"fail\"); goto out; }"))))
+         (add-before 'install 'install-logo
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (guix-icons (assoc-ref inputs "guix-icons"))
+                    (icon
+                     (string-append guix-icons "/share/icons/hicolor/\
+scalable/apps/guix-white-icon.svg"))
+                    (schema
+                     (string-append out "/share/glib-2.0/schemas/\
+org.gnome.login-screen.gschema.override")))
+               (mkdir-p (dirname schema))
+               (with-output-to-file schema
+                 (lambda ()
+                   (format #t "\
+[org.gnome.login-screen]
+logo='~a'~%" icon))))))
          ;; GDM requires that there be at least one desktop entry
          ;; file.  This phase installs a hidden one that simply
          ;; fails.  This enables users to use GDM with a
@@ -8246,8 +8424,7 @@ library.")
                       "Name=Fail\n"
                       "Comment=This session fails immediately.\n"
                       "NoDisplay=true\n"
-                      "Exec=false\n"))))
-               #t)))
+                      "Exec=false\n")))))))
          ;; GDM needs GNOME Session to run these applications.  We link
          ;; their autostart files in `share/gdm/greeter/autostart'
          ;; because GDM explicitly tells GNOME Session to look there.
@@ -8264,26 +8441,28 @@ library.")
                (with-directory-excursion autostart
                  (for-each (lambda (desktop)
                              (symlink desktop (basename desktop)))
-                           (find-files (string-append settings "/etc/xdg"))))
-               #t))))))
+                           (find-files
+                            (string-append settings "/etc/xdg"))))))))))
     (native-inputs
      `(("dconf" ,dconf)
        ("glib:bin" ,glib "bin") ; for glib-compile-schemas, etc.
        ("gobject-introspection" ,gobject-introspection)
+       ("guix-icons" ,guix-icons)
        ("intltool" ,intltool)
        ("itstool" ,itstool)
        ("pkg-config" ,pkg-config)
        ("xmllint" ,libxml2)))
     (inputs
-     `(("accountsservice" ,accountsservice)
-       ("check" ,check-0.14)            ;for testing
-       ("elogind" ,elogind)
-       ("gnome-session" ,gnome-session)
-       ("gnome-settings-daemon" ,gnome-settings-daemon)
-       ("gtk+" ,gtk+)
-       ("iso-codes" ,iso-codes)
-       ("libcanberra" ,libcanberra)
-       ("linux-pam" ,linux-pam)))
+     (list accountsservice
+           check-0.14 ;for testing
+           elogind
+           eudev
+           gnome-session
+           gnome-settings-daemon
+           gtk+
+           iso-codes
+           libcanberra
+           linux-pam))
     (synopsis "Display manager for GNOME")
     (home-page "https://wiki.gnome.org/Projects/GDM/")
     (description
@@ -8305,12 +8484,9 @@ providing graphical log-ins and managing local and remote displays.")
                 "1m6jbqk8maa52gxrf223442fr5bvvxgb7ham6v039i3r1i62gwvq"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("gobject-introspection" ,gobject-introspection)
-       ("intltool" ,intltool)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list gobject-introspection intltool perl pkg-config))
     (propagated-inputs
-     `(("glib" ,glib))) ; required by libgtop-2.0.pc
+     (list glib)) ; required by libgtop-2.0.pc
     (synopsis "Portable system access library")
     (home-page "https://www.gnome.org/")
     (description
@@ -8321,15 +8497,15 @@ usage and information about running processes.")
 (define-public gnome-bluetooth
   (package
     (name "gnome-bluetooth")
-    (version "3.34.2")
+    (version "3.34.5")
     (source (origin
               (method url-fetch)
-              (uri (string-append "mirror://gnome/sources/" name "/"
+              (uri (string-append "mirror://gnome/sources/gnome-bluetooth/"
                                   (version-major+minor version) "/"
-                                  name "-" version ".tar.xz"))
+                                  "gnome-bluetooth-" version ".tar.xz"))
               (sha256
                (base32
-                "0lmjvb49vgr4jjplrisv6pi29jsn1q42715i6c5a0p9ad3gawyyv"))))
+                "1a9ynlwwkb3wpg293ym517vmrkk63y809mmcv9a21k5yr199x53c"))))
     (build-system meson-build-system)
     (native-inputs
      `(("glib:bin" ,glib "bin") ; for gdbus-codegen, etc.
@@ -8337,15 +8513,14 @@ usage and information about running processes.")
        ("gobject-introspection" ,gobject-introspection)
        ("intltool" ,intltool)
        ("pkg-config" ,pkg-config)
+       ("python" ,python)
+       ("python-dbus" ,python-dbus)
        ("xmllint" ,libxml2)))
     (propagated-inputs
      ;; gnome-bluetooth-1.0.pc refers to all these.
-     `(("glib" ,glib)
-       ("gtk+" ,gtk+)))
+     (list glib gtk+))
     (inputs
-     `(("eudev" ,eudev)
-       ("libcanberra" ,libcanberra)
-       ("libnotify" ,libnotify)))
+     (list eudev libcanberra libnotify python-dbus))
     (synopsis "GNOME Bluetooth subsystem")
     (home-page "https://wiki.gnome.org/Projects/GnomeBluetooth")
     (description
@@ -8356,18 +8531,20 @@ devices using the GNOME desktop.")
 (define-public gnome-control-center
   (package
     (name "gnome-control-center")
-    (version "3.34.2")
+    (version "41.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
-                                  (version-major+minor version) "/"
+                                  (version-major version) "/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "054igagvmyzpaa5nwzz98gv7bk7l5dwp6g813707132si3szlpx8"))))
+                "0j72ixhli621psbrma86qxy0spv6gpjx6k9hg2jih97c6dmzqwc2"))
+              (patches (search-patches
+                        "gnome-control-center-libexecdir.patch"))))
     (build-system meson-build-system)
     (arguments
-     '(#:glib-or-gtk? #t
+     `(#:glib-or-gtk? #t
        #:configure-flags
        (list "-Dcheese=false"
              (string-append "-Dgnome_session_libexecdir="
@@ -8392,8 +8569,8 @@ devices using the GNOME desktop.")
                  (("\"gkbd-keyboard-display")
                   (string-append "\"" libgnomekbd
                                  "/bin/gkbd-keyboard-display")))
-               (substitute* '("panels/network/net-device-wifi.c"
-                              "panels/network/net-device.c"
+               (substitute* '("panels/network/net-device-bluetooth.c"
+                              "panels/network/net-device-mobile.c"
                               "panels/network/connection-editor/net-connection-editor.c")
                  (("\"nm-connection-editor")
                   (string-append "\"" nm-applet
@@ -8401,63 +8578,67 @@ devices using the GNOME desktop.")
                (substitute* '("panels/user-accounts/run-passwd.c")
                  (("/usr/bin/passwd")
                   "/run/setuid-programs/passwd"))
-               (substitute* "panels/info/cc-info-overview-panel.c"
+               (substitute* "panels/info-overview/cc-info-overview-panel.c"
                  (("DATADIR \"/gnome/gnome-version.xml\"")
                   (string-append "\"" gnome-desktop
-                                 "/share/gnome/gnome-version.xml\"")))
-               #t)))
+                                 "/share/gnome/gnome-version.xml\""))))))
          (add-after 'unpack 'skip-gtk-update-icon-cache
            ;; Don't create 'icon-theme.cache'.
            (lambda _
              (substitute* "build-aux/meson/meson_post_install.py"
-               (("gtk-update-icon-cache") (which "true")))
-             #t)))))
-    (native-inputs
-     `(("glib:bin" ,glib "bin") ; for glib-mkenums, etc.
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)
-       ("xsltproc" ,libxslt)
-       ;; For tests
-       ("hicolor-icon-theme" ,hicolor-icon-theme)
-       ("python-dbusmock" ,python-dbusmock)
-       ("xorg-server" ,xorg-server-for-tests)))
-    (inputs
-     `(("accountsservice" ,accountsservice)
-       ("clutter-gtk" ,clutter-gtk)
-       ("colord-gtk" ,colord-gtk)
-       ("cups" ,cups)
-       ("dconf" ,dconf)
-       ("docbook-xsl" ,docbook-xsl)
-       ("gdk-pixbuf" ,gdk-pixbuf) ; for loading SVG files
-       ("gnome-bluetooth" ,gnome-bluetooth)
-       ("gnome-desktop" ,gnome-desktop)
-       ("gnome-online-accounts" ,gnome-online-accounts)
-       ("gnome-online-accounts:lib" ,gnome-online-accounts "lib")
-       ("gnome-session" ,gnome-session)
-       ("gnome-settings-daemon" ,gnome-settings-daemon)
-       ("grilo" ,grilo)
-       ("gsound" ,gsound)
-       ("ibus" ,ibus)
-       ("libcanberra" ,libcanberra)
-       ("libgnomekbd" ,libgnomekbd)
-       ("libgudev" ,libgudev)
-       ("libgtop" ,libgtop)
-       ("libnma" ,libnma)
-       ("libpwquality" ,libpwquality)
-       ("libsecret" ,libsecret)
-       ("libsoup" ,libsoup)
-       ("libxml2" ,libxml2)
-       ("libwacom" ,libwacom)
-       ("mesa" ,mesa)
-       ("mit-krb5" ,mit-krb5)
-       ("modem-manager" ,modem-manager)
-       ("network-manager-applet" ,network-manager-applet)
-       ("polkit" ,polkit)
-       ("pulseaudio" ,pulseaudio)
-       ("smbclient" ,samba)
-       ("tzdata" ,tzdata)
-       ("udisks" ,udisks)
-       ("upower" ,upower)))
+               (("gtk-update-icon-cache") (which "true")))))
+         (add-before 'install 'no-polkit-magic
+           ;; Meson ‘magically’ invokes pkexec, which fails (not setuid).
+           (lambda _
+             (setenv "PKEXEC_UID" "something"))))))
+    (native-inputs
+     (list `(,glib "bin")               ;for glib-mkenums, etc.
+           intltool
+           pkg-config
+           python
+           libxslt
+           ;; For tests
+           hicolor-icon-theme
+           python-dbusmock
+           xorg-server-for-tests))
+    (inputs
+     (list accountsservice
+           clutter-gtk
+           colord-gtk
+           cups
+           dconf
+           docbook-xsl
+           gcr
+           gnome-bluetooth
+           gnome-desktop
+           gnome-online-accounts
+           `(,gnome-online-accounts "lib")
+           gnome-session
+           gnome-settings-daemon
+           grilo
+           gsound
+           ibus
+           libcanberra
+           libgnomekbd
+           libgudev
+           libgtop
+           libnma
+           libpwquality
+           librsvg                      ;for loading SVG files
+           libsecret
+           libsoup-minimal-2
+           libxml2
+           libwacom
+           mesa
+           mit-krb5
+           modem-manager
+           network-manager-applet
+           polkit
+           pulseaudio
+           samba
+           tzdata
+           udisks
+           upower))
     (synopsis "Utilities to configure the GNOME desktop")
     (home-page "https://www.gnome.org/")
     (description
@@ -8470,35 +8651,21 @@ properties, screen resolution, and other GNOME parameters.")
 (define-public gnome-shell
   (package
     (name "gnome-shell")
-    (version "3.34.5")
+    (version "41.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
-                                  (version-major+minor version) "/"
+                                  (version-major version) "/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0l3mdn7g2c22mdhrqkxvvc1pk2w0v32f2v4a6n1phvaalwcg75nj"))
-              (patches (search-patches "gnome-shell-CVE-2020-17489.patch"
-                                       "gnome-shell-theme.patch"
-                                       "gnome-shell-disable-test.patch"))
-              (modules '((guix build utils)))
-              (snippet
-               #~(begin
-                   ;; Copy images for use on the GDM log-in screen.
-                   (copy-file #$(file-append %artwork-repository
-                                             "/slim/0.x/background.png")
-                              "data/theme/guix-background.png")
-                   (copy-file #$(file-append %artwork-repository
-                                             "/logo/Guix-horizontal-white.svg")
-                              "data/theme/guix-logo.svg")
-                   #t))))
+                "0ragmcln210zvzhc2br33yprbkj9drjzd7inp5sdxra0a7l73yaj"))))
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
-       #:disallowed-references ((,glib "bin")
-                                ,inkscape ,libxslt
-                                ,ruby-sass)
+       #:disallowed-references ,(list (gexp-input glib "bin")
+                                      (gexp-input libxslt)
+                                      (gexp-input ruby-sass))
        #:configure-flags
        (list "-Dsystemd=false"
              ;; Otherwise, the RUNPATH will lack the final path component.
@@ -8519,13 +8686,12 @@ properties, screen resolution, and other GNOME parameters.")
                               out "/share/gnome-control-center/keybindings")))
                (substitute* "meson.build"
                  (("keysdir =.*")
-                  (string-append "keysdir = '" keysdir "'\n")))
-               #t)))
-         (add-before 'configure 'convert-logo-to-png
-           (lambda* (#:key inputs #:allow-other-keys)
-             ;; Convert the logo from SVG to PNG.
-             (invoke "inkscape" "--export-png=data/theme/guix-logo.png"
-                     "data/theme/guix-logo.svg")))
+                  (string-append "keysdir = '" keysdir "'\n"))))))
+         (add-after 'unpack 'skip-gtk-update-icon-cache
+           ;; Don't create 'icon-theme.cache'.
+           (lambda _
+             (substitute* "meson/postinstall.py"
+               (("gtk-update-icon-cache") "true"))))
          (add-before 'configure 'record-absolute-file-names
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "js/misc/ibusManager.js"
@@ -8535,51 +8701,65 @@ properties, screen resolution, and other GNOME parameters.")
              (substitute* "js/ui/status/keyboard.js"
                (("'gkbd-keyboard-display'")
                 (string-append "'" (assoc-ref inputs "libgnomekbd")
-                               "/bin/gkbd-keyboard-display'")))
-             #t))
+                               "/bin/gkbd-keyboard-display'")))))
          (add-before 'check 'pre-check
            (lambda* (#:key inputs #:allow-other-keys)
              ;; Tests require a running X server.
              (system "Xvfb :1 &")
              (setenv "DISPLAY" ":1")
-             #t))
+             (setenv "HOME" "/tmp")))   ;to avoid "fatal" warnings
          (add-after 'install 'wrap-programs
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((out              (assoc-ref outputs "out"))
                    (gi-typelib-path  (getenv "GI_TYPELIB_PATH"))
-                   (python-path      (getenv "PYTHONPATH")))
-               (wrap-program (string-append out "/bin/gnome-shell")
-                 `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))
-                 ;; FIXME: gnome-shell loads these libraries with unqualified
-                 ;; names only, so they need to be on LD_LIBRARY_PATH.  The
-                 ;; alternative might be to patch gnome-shell.
-                 `("LD_LIBRARY_PATH" ":" prefix
-                   ,(map (lambda (pkg)
-                           (string-append (assoc-ref inputs pkg) "/lib"))
-                         '("gdk-pixbuf"
-                           "gnome-bluetooth" "librsvg" "libgweather"))))
+                   (python-path      (getenv "GUIX_PYTHONPATH")))
                (for-each
                 (lambda (prog)
                   (wrap-program (string-append out "/bin/" prog)
-                    `("PYTHONPATH"      ":" prefix (,python-path))
                     `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))))
-                '("gnome-shell-extension-tool" "gnome-shell-perf-tool"))
-               #t)))
+                '("gnome-shell" "gnome-extensions-app"))
+               (substitute* (string-append out "/share/gnome-shell/"
+                                           "org.gnome.Shell.Extensions")
+                 (("imports\\.package\\.start" all)
+                  (string-append "'" gi-typelib-path "'.split(':').forEach("
+                                 "path => imports.gi.GIRepository.Repository."
+                                 "prepend_search_path(path));\n"
+                                 all)))
+               (for-each
+                (lambda (prog)
+                  (wrap-program (string-append out "/bin/" prog)
+                    `("GUIX_PYTHONPATH"      ":" prefix (,python-path))
+                    `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))))
+                '("gnome-shell-perf-tool")))))
+         (add-after 'install 'rewire
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (for-each
+              (lambda (tool)
+                (call-with-output-file (string-append
+                                        (assoc-ref outputs "out")
+                                        "/bin/" tool)
+                  (lambda (port)
+                    (format port "#!~a
+printf '~a is deprecated.  Use the \"gnome-extensions\" CLI or \
+\"gnome-extensions-app\" instead.\\n'"
+                            (search-input-file inputs "bin/bash")
+                            tool))))
+              '("gnome-shell-extension-tool" "gnome-shell-extension-prefs"))))
          (replace 'glib-or-gtk-wrap
            (let ((wrap (assoc-ref %standard-phases 'glib-or-gtk-wrap)))
              (lambda* (#:key inputs outputs #:allow-other-keys #:rest rest)
-               ;; By default Inkscape et al. would end up in the XDG_DATA_DIRS
+               ;; By default intltool et al. would end up in the XDG_DATA_DIRS
                ;; settings of the wrappers created by the 'glib-or-gtk-wrap'
                ;; phase.  Fix that since we don't need these.
                (wrap #:inputs (fold alist-delete inputs
-                                    '("inkscape" "intltool" "glib:bin"))
+                                    '("intltool" "glib:bin"))
                      #:outputs outputs)))))))
     (native-inputs
      `(("asciidoc" ,asciidoc)
        ("glib:bin" ,glib "bin") ; for glib-compile-schemas, etc.
        ("desktop-file-utils" ,desktop-file-utils) ; for update-desktop-database
        ("gobject-introspection" ,gobject-introspection)
-       ("inkscape" ,inkscape)
+       ("hicolor-icon-theme" ,hicolor-icon-theme)
        ("intltool" ,intltool)
        ("pkg-config" ,pkg-config)
        ("python" ,python)
@@ -8589,42 +8769,41 @@ properties, screen resolution, and other GNOME parameters.")
        ;; For tests
        ("xorg-server" ,xorg-server-for-tests)))
     (inputs
-     `(("accountsservice" ,accountsservice)
-       ("caribou" ,caribou)
-       ("docbook-xsl" ,docbook-xsl)
-       ("evolution-data-server" ,evolution-data-server)
-       ("gcr" ,gcr)
-       ("gdm" ,gdm)
-       ("gdk-pixbuf" ,gdk-pixbuf+svg)
-       ("gjs" ,gjs)
-       ("gnome-autoar" ,gnome-autoar)
-       ("gnome-bluetooth" ,gnome-bluetooth)
-       ("gnome-desktop" ,gnome-desktop)
-       ("gnome-settings-daemon" ,gnome-settings-daemon)
-       ("gst-plugins-base" ,gst-plugins-base)
-       ("ibus" ,ibus)
-       ("libcanberra" ,libcanberra)
-       ("libcroco" ,libcroco)
-       ("libgnomekbd" ,libgnomekbd)               ;for gkbd-keyboard-display
-       ("libgweather" ,libgweather)
-       ("libnma" ,libnma)
-       ("libsoup" ,libsoup)
-       ("mesa-headers" ,mesa-headers)
-       ("mutter" ,mutter)
-       ("network-manager-applet" ,network-manager-applet)
-       ("polkit" ,polkit)
-       ("pulseaudio" ,pulseaudio)
-       ("python-pygobject" ,python-pygobject)
-       ("startup-notification" ,startup-notification)
-       ("telepathy-logger" ,telepathy-logger)
-       ("upower" ,upower)
-       ;; XXX: These requirements were added in 3.24, but no mention in NEWS.
-       ;; Missing propagation? See also: <https://bugs.gnu.org/27264>
-       ("librsvg" ,librsvg)
-       ("geoclue" ,geoclue)))
-    ;; CVE-2019-3820 was fixed before GNOME 3.34 was released, in upstream
-    ;; commit f0a7395b3006360905ccdc642982f9fc67378927.
-    (properties '((lint-hidden-cve . ("CVE-2019-3820"))))
+     (list accountsservice
+           caribou
+           docbook-xsl
+           evolution-data-server
+           gcr
+           gdm
+           librsvg
+           gjs
+           gtk
+           gnome-autoar
+           gnome-bluetooth
+           gnome-desktop
+           gnome-settings-daemon
+           graphene
+           gst-plugins-base
+           ibus
+           libcanberra
+           libcroco
+           libgnomekbd ;for gkbd-keyboard-display
+           libgweather
+           libnma
+           libsoup
+           mesa-headers
+           mutter
+           network-manager-applet
+           polkit
+           pulseaudio
+           python-pygobject
+           startup-notification
+           telepathy-logger
+           upower
+           ;; XXX: These requirements were added in 3.24, but no mention in NEWS.
+           ;; Missing propagation? See also: <https://bugs.gnu.org/27264>
+           librsvg
+           geoclue))
     (synopsis "Desktop shell for GNOME")
     (home-page "https://wiki.gnome.org/Projects/GnomeShell")
     (description
@@ -8649,7 +8828,11 @@ like switching to windows and launching applications.")
     (arguments
      `(#:glib-or-gtk? #t))   ; To wrap binaries and/or compile schemas
     (native-inputs
-     `(("gjs" ,gjs)
+     `(;; GJS depends on Rust, which is x86_64-only so far, so remove the GJS
+       ;; dependency on other platforms (FIXME).
+       ,@(if (target-x86-64?)
+             `(("gjs" ,gjs))
+             '())
        ("glib:bin" ,glib "bin")
        ("gobject-introspection" ,gobject-introspection)
        ("intltool" ,intltool)
@@ -8660,7 +8843,7 @@ like switching to windows and launching applications.")
        ("vala" ,vala)))
     (inputs
      `(("cairo" ,cairo)
-       ("gdk-pixbuf" ,gdk-pixbuf+svg)
+       ("librsvg" ,(librsvg-for-system))
        ("glib" ,glib)
        ("gnutls" ,gnutls)
        ("libgcrypt" ,libgcrypt)
@@ -8669,7 +8852,7 @@ like switching to windows and launching applications.")
        ("x11" ,libx11)
        ("zlib" ,zlib)))
     (propagated-inputs
-     `(("gtk+" ,gtk+)))
+     (list gtk+))
     (synopsis "VNC client viewer widget for GTK+")
     (description "GTK-VNC is a project providing client side APIs for the RFB
 protocol / VNC remote desktop technology.  It is built using coroutines allowing
@@ -8681,7 +8864,7 @@ core C library, and bindings for Python (PyGTK).")
 (define-public gnome-autoar
   (package
     (name "gnome-autoar")
-    (version "0.3.3")
+    (version "0.4.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
@@ -8689,15 +8872,15 @@ core C library, and bindings for Python (PyGTK).")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "012w7rhhpxvlrnnhqy01vwzg1wxqpy8jbqgizn47wnip7bvh0917"))))
-    (build-system glib-or-gtk-build-system)
+                "03hmm7cjgjvyxlflghfa89s1amj16qapl2c9pv0r2bfrp87dasv4"))))
+    (build-system meson-build-system)
     (native-inputs
-     `(("gobject-introspection" ,gobject-introspection)
-       ("pkg-config" ,pkg-config)))
+     (list gobject-introspection
+           `(,glib "bin") pkg-config))
     (propagated-inputs
-     `(("libarchive" ,libarchive)))  ; Required by gnome-autoar-0.pc
+     (list libarchive))  ; Required by gnome-autoar-0.pc
     (inputs
-     `(("gtk+" ,gtk+)))
+     (list gtk+))
     (synopsis "Archives integration support for GNOME")
     (home-page "https://git.gnome.org/browse/gnome-autoar/")
     (description
@@ -8708,7 +8891,7 @@ easy, safe, and automatic.")
 (define-public tracker
   (package
     (name "tracker")
-    (version "2.3.5")
+    (version "3.1.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/tracker/"
@@ -8716,7 +8899,7 @@ easy, safe, and automatic.")
                                   "tracker-" version ".tar.xz"))
               (sha256
                (base32
-                "1ixxyqjlv7pnl4j8g6b72fkbjvzfspza8y71ppkncry8i6xkr223"))))
+                "13zcc07wd51sz7kglk3xbjrsq7d835cxfr7iwjr7nn2xcri8jdns"))))
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
@@ -8724,20 +8907,43 @@ easy, safe, and automatic.")
        ;; Otherwise, the RUNPATH will lack the final path component.
        (list (string-append "-Dc_link_args=-Wl,-rpath="
                             (assoc-ref %outputs "out") "/lib:"
-                            (assoc-ref %outputs "out") "/lib/tracker-2.0"))
+                            (assoc-ref %outputs "out") "/lib/tracker-3.0")
+             "-Ddocs=false"
+             "-Dsystemd_user_services=false")
        #:phases
        (modify-phases %standard-phases
-         (add-before 'check 'pre-check
+         (add-before 'configure 'set-shell
            (lambda _
-             ;; Some tests expect to write to $HOME.
-             (setenv "HOME" "/tmp")
-             #t)))))
+             (setenv "SHELL" (which "bash"))))
+         (add-before 'configure 'fix-paths
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let* ((manpage "/etc/asciidoc/docbook-xsl/manpage.xsl")
+                    (file (search-input-file inputs manpage)))
+               (substitute* "docs/manpages/meson.build"
+                 (("/etc/asciidoc[^']+")
+                  file)))))
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               ;; Some tests expect to write to $HOME.
+               (setenv "HOME" "/tmp")
+               (invoke "dbus-run-session" "--" "meson" "test"
+                       "--print-errorlogs")))))))
     (native-inputs
      `(("glib:bin" ,glib "bin")
        ("gobject-introspection" ,gobject-introspection)
+       ("docbook-xsl" ,docbook-xsl)
+       ("docbook-xml-4.5" ,docbook-xml)
+       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
+       ("asciidoc" ,asciidoc)
+       ("xsltproc" ,libxslt)
+       ("cmake-minimal" ,cmake-minimal)
        ("python-pygobject" ,python-pygobject)
+       ("gtk-doc" ,gtk-doc/stable)
        ("intltool" ,intltool)
+       ("dbus" ,dbus)
        ("pkg-config" ,pkg-config)
+       ("python" ,python)
        ("vala" ,vala)))
     (inputs
      `(("dbus" ,dbus)
@@ -8745,7 +8951,7 @@ easy, safe, and automatic.")
        ("libxml2" ,libxml2)
        ("icu4c" ,icu4c)                 ; libunistring gets miner-miner-fs test to fail.
        ("json-glib" ,json-glib)
-       ("libsoup" ,libsoup)))
+       ("libsoup" ,libsoup-minimal-2))) ; tracker-miners requires the same version.
     (synopsis "Metadata database, indexer and search tool")
     (home-page "https://wiki.gnome.org/Projects/Tracker")
     (description
@@ -8767,7 +8973,7 @@ found by Tracker.  This means that GNOME Music doesn't need to maintain a
 database of its own.
 
 If you need to go beyond simple searches, Tracker is also a linked data
-endpoint and it understands SPARQL. ")
+endpoint and it understands SPARQL.")
     ;; https://gitlab.gnome.org/GNOME/tracker/-/blob/master/COPYING:
     ;; src/libtracker-*/* and src/tracker-extract/* are covered by lgpl2.1+,
     ;; libstemmer is bsd-3 and the rest is gpl2+.
@@ -8778,7 +8984,7 @@ endpoint and it understands SPARQL. ")
 (define-public tracker-miners
   (package
     (name "tracker-miners")
-    (version "2.3.4")
+    (version "3.1.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/tracker-miners/"
@@ -8786,7 +8992,7 @@ endpoint and it understands SPARQL. ")
                                   "/tracker-miners-" version ".tar.xz"))
               (sha256
                (base32
-                "10wy8d8ski52k809p7s6lbw72qmg05bbmhnl00vx4qrbzqyxvc0b"))))
+                "0fpd69lgm8cckbamcf9c2q57glxf0s3jcfwkq8p3s4lfsvdclmd0"))))
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
@@ -8795,16 +9001,54 @@ endpoint and it understands SPARQL. ")
              ;; Ensure the RUNPATH contains all installed library locations.
              (string-append "-Dc_link_args=-Wl,-rpath="
                             (assoc-ref %outputs "out")
-                            "/lib/tracker-miners-2.0")
+                            "/lib/tracker-miners-3.0")
              ;; TODO: Enable functional tests. Currently, the following error
              ;; appears:
              ;; Exception: The functional tests require DConf to be the default
              ;; GSettings backend. Got GKeyfileSettingsBackend instead.
-             "-Dfunctional_tests=false")))
+             "-Dfunctional_tests=false"
+             "-Dsystemd_user_services=false")
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'set-shell
+           (lambda _
+             (setenv "SHELL" (which "bash"))))
+         (add-before 'configure 'fix-paths
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let* ((manpage "/etc/asciidoc/docbook-xsl/manpage.xsl")
+                    (file (search-input-file inputs manpage)))
+               (substitute* "docs/manpages/meson.build"
+                 (("/etc/asciidoc[^']+")
+                  file)))))
+         (add-before 'configure 'fix-tests
+           (lambda* (#:key inputs #:allow-other-keys)
+             ;; Disable those tests that require the functional_tests option
+             ;; to be true and the UPower daemon to be started.
+             (substitute* "examples/python/meson.build"
+               (("foreach example_name:.*")
+                "foreach example_name: []"))
+             ;; Disable this test that is failing randomly:
+             ;; https://gitlab.gnome.org/GNOME/tracker-miners/-/issues/170.
+            (substitute* "tests/libtracker-miner/meson.build"
+               (("'miner-fs'.*")
+                ""))))
+        (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               ;; Some tests expect to write to $HOME.
+               (setenv "HOME" "/tmp")
+               (setenv "LANG" "en_US.UTF-8")
+               (invoke "dbus-run-session" "--" "meson" "test"
+                       "--print-errorlogs")))))))
     (native-inputs
      `(("dbus" ,dbus)
        ("intltool" ,intltool)
        ("glib:bin" ,glib "bin")
+       ("docbook-xsl" ,docbook-xsl)
+       ("docbook-xml-4.5" ,docbook-xml)
+       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
+       ("asciidoc" ,asciidoc)
+       ("xsltproc" ,libxslt)
        ("gobject-introspection" ,gobject-introspection)
        ("pkg-config" ,pkg-config)
        ("python-pygobject" ,python-pygobject)))
@@ -8816,6 +9060,7 @@ endpoint and it understands SPARQL. ")
        ("glib" ,glib)
        ("gstreamer" ,gstreamer)
        ("icu4c" ,icu4c)
+       ("json-glib" ,json-glib)
        ("libcue" ,libcue)
        ("libexif" ,libexif)
        ("libgsf" ,libgsf)
@@ -8825,10 +9070,12 @@ endpoint and it understands SPARQL. ")
        ("libosinfo" ,libosinfo)
        ("libpng" ,libpng)
        ("libseccomp" ,libseccomp)
+       ("libsoup" ,libsoup-minimal-2) ; because tracker requires this version.
        ("libtiff" ,libtiff)
        ("libvorbis" ,libvorbis)
        ("libxml2" ,libxml2)
        ("poppler" ,poppler)
+       ("shared-mime-info" ,shared-mime-info)
        ("taglib" ,taglib)
        ("totem-pl-parser" ,totem-pl-parser)
        ("tracker" ,tracker)
@@ -8849,55 +9096,88 @@ shared object databases, search tools and indexing.")
 (define-public nautilus
   (package
     (name "nautilus")
-    (version "3.34.2")
+    (version "41.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
-                                  (version-major+minor version) "/"
+                                  (version-major version) "/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "19zqwq4qyyncc5wq3xls0f7rsavnw741k336p2h7kx35p4kf41mv"))))
+                "0bsqh241m43x3qb3z0mjakjic610ncl95zhjdgls649phnc30qry"))
+              (patches
+               ;; This patch is already upstream and can be removed next
+               ;; release.
+               (search-patches "nautilus-add-libportal-gtk3.patch"))))
     (build-system meson-build-system)
     (arguments
-     '(#:glib-or-gtk? #t
+     `(#:glib-or-gtk? #t
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'make-extensible
+           (lambda _
+             (substitute* "src/nautilus-module.c"
+               (("static gboolean initialized = FALSE;" all)
+                (string-append all "
+const char *extension_path;
+char **extension_dirs, **d;
+")
+                )
+               (("load_module_dir \\(NAUTILUS_EXTENSIONDIR\\);" all)
+                (string-append all
+                               "
+extension_path = g_getenv (\"NAUTILUS_EXTENSION_PATH\");
+if (extension_path)
+{
+    extension_dirs = g_strsplit (extension_path, \":\", -1);
+    for (d = extension_dirs; d != NULL && *d != NULL; d++)
+        load_module_dir(*d);
+    g_strfreev(extension_dirs);
+}
+")))))
          (add-after 'unpack 'skip-gtk-update-icon-cache
            ;; Don't create 'icon-theme.cache'.
            (lambda _
              (substitute* "build-aux/meson/postinstall.py"
-               (("gtk-update-icon-cache") "true"))
-             #t)))
+               (("gtk-update-icon-cache") "true")))))
        ;; XXX: FAIL: check-nautilus
        ;;   Settings schema 'org.gnome.nautilus.preferences' is not installed
        #:tests? #f))
     (native-inputs
-     `(("desktop-file-utils" ,desktop-file-utils) ; for update-desktop-database
-       ("glib:bin" ,glib "bin")         ; for glib-mkenums, etc.
-       ("gobject-introspection" ,gobject-introspection)
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
-    (inputs
-     `(("dconf" ,dconf)
-       ("gexiv2" ,gexiv2)
-       ("gvfs" ,gvfs)
-       ("exempi" ,exempi)
-       ("gnome-desktop" ,gnome-desktop)
-       ("gnome-autoar" ,gnome-autoar)
-       ("gst-plugins-base" ,gst-plugins-base)
-       ("libseccomp" ,libseccomp)
-       ("libselinux" ,libselinux)
-       ("tracker" ,tracker)
-       ("tracker-miners" ,tracker-miners)
-       ;; XXX: gtk+ is required by libnautilus-extension.pc
-       ;;
-       ;; Don't propagate it to reduces "profile pollution" of the 'gnome' meta
-       ;; package.  See:
-       ;; <http://lists.gnu.org/archive/html/guix-devel/2016-03/msg00283.html>.
-       ("gtk+" ,gtk+)
-       ("libexif" ,libexif)
-       ("libxml2" ,libxml2)))
+     (list desktop-file-utils     ; for update-desktop-database
+           `(,glib "bin")         ; for glib-mkenums, etc.
+           gobject-introspection
+           intltool
+           pkg-config
+           python))
+    (inputs
+     (list dconf
+           gexiv2
+           gvfs
+           exempi
+           gnome-desktop
+           gnome-autoar
+           gst-plugins-base
+           json-glib
+           libhandy
+           libportal
+           libseccomp
+           libselinux
+           libsoup-minimal-2 ; to satisfy tracker dependencies
+           tracker
+           tracker-miners
+           ;; XXX: gtk+ is required by libnautilus-extension.pc
+           ;;
+           ;; Don't propagate it to reduces "profile pollution" of the 'gnome' meta
+           ;; package.  See:
+           ;; <http://lists.gnu.org/archive/html/guix-devel/2016-03/msg00283.html>.
+           gtk+
+           libexif
+           libxml2))
+    (native-search-paths
+     (list (search-path-specification
+            (variable "NAUTILUS_EXTENSION_PATH")
+            (files '("lib/nautilus/site-extensions")))))
     (synopsis "File manager for GNOME")
     (home-page "https://wiki.gnome.org/Apps/Nautilus")
     (description
@@ -8909,22 +9189,23 @@ files.")
 (define-public baobab
   (package
     (name "baobab")
-    (version "3.38.0")
+    (version "40.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
                     "mirror://gnome/sources/" name "/"
-                    (version-major+minor version) "/"
+                    (version-major version) "/"
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0ac3fbl15l836yvgw724q4whbkws9v4b6l2xy6bnp0b0g0a6i104"))))
+                "19yii3bdgivxrcka1c4g6dpbmql5nyawwhzlsph7z6bs68nambm6"))))
     (build-system meson-build-system)
     (arguments
      '(#:glib-or-gtk? #t))
     (native-inputs
      `(("intltool" ,intltool)
        ("pkg-config" ,pkg-config)
+       ("python" ,python)
        ("desktop-file-utils" ,desktop-file-utils) ; for update-desktop-database
        ("gtk+-bin" ,gtk+ "bin") ; for gtk-update-icon-cache
        ("itstool" ,itstool)
@@ -8932,7 +9213,7 @@ files.")
        ("glib" ,glib "bin")
        ("vala" ,vala)))
     (inputs
-     `(("gtk+" ,gtk+)))
+     (list gtk+ libhandy))
     (synopsis "Disk usage analyzer for GNOME")
     (description
      "Baobab (Disk Usage Analyzer) is a graphical application to analyse disk
@@ -8945,19 +9226,18 @@ is complete it provides a graphical representation of each selected folder.")
 (define-public gnome-backgrounds
   (package
     (name "gnome-backgrounds")
-    (version "3.34.0")
+    (version "41.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://gnome/sources/" name "/"
-                           (version-major+minor version) "/"
+                           (version-major version) "/"
                            name "-" version ".tar.xz"))
        (sha256
         (base32
-         "0zxlwy55fz7i582hch2wnj8zy1kzikssgaix0l2y41ccp5nzpdy2"))))
+         "0i9id5z72dqddh94648zylyf41amqq5lhny8sbyg1v8v4q6sr88x"))))
     (build-system meson-build-system)
-    (native-inputs
-     `(("intltool" ,intltool)))
+    (native-inputs (list gettext-minimal))
     (home-page "https://gitlab.gnome.org/GNOME/gnome-backgrounds")
     (synopsis "Background images for the GNOME desktop")
     (description
@@ -8973,16 +9253,18 @@ can add your own files to the collection.")
 (define-public gnome-screenshot
   (package
     (name "gnome-screenshot")
-    (version "3.34.0")
+    (version "40.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://gnome/sources/" name "/"
-                           (version-major+minor version) "/"
+                           (version-major version) "/"
                            name "-" version ".tar.xz"))
        (sha256
         (base32
-         "1rmiq890j7gfn5mcz31xy6jfnnxgc17dq67bhn2k9m5ylbvza2n8"))))
+         "1qm544ymwibk31s30k47vnn79xg30m18r7l4di0c57g375dak31n"))
+       (patches
+        (search-patches "gnome-screenshot-meson-0.60.patch"))))
     (build-system meson-build-system)
     (arguments
      '(#:phases
@@ -8991,19 +9273,16 @@ can add your own files to the collection.")
            ;; Don't create 'icon-theme.cache'.
            (lambda _
              (substitute* "build-aux/postinstall.py"
-               (("gtk-update-icon-cache") "true"))
-             #t)))))
+               (("gtk-update-icon-cache") "true")))))))
     (native-inputs
      `(("glib:bin" ,glib "bin") ; for glib-compile-schemas, etc.
        ("desktop-file-utils" ,desktop-file-utils) ; for update-desktop-database
        ("intltool" ,intltool)
        ("appstream-glib" ,appstream-glib)
-       ("pkg-config" ,pkg-config)))
+       ("pkg-config" ,pkg-config)
+       ("python" ,python)))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("libcanberra" ,libcanberra)
-       ("libx11" ,libx11)
-       ("libxext" ,libxext)))
+     (list gtk+ libcanberra libhandy libx11 libxext))
     (home-page "https://gitlab.gnome.org/GNOME/gnome-screenshot")
     (synopsis "Take pictures of your screen")
     (description
@@ -9015,7 +9294,7 @@ beautifying border effects.")
 (define-public dconf-editor
   (package
     (name "dconf-editor")
-    (version "3.34.2")
+    (version "3.38.3")
     (source
      (origin
        (method url-fetch)
@@ -9024,7 +9303,7 @@ beautifying border effects.")
                            name "-" version ".tar.xz"))
        (sha256
         (base32
-         "0pwxjada2vaf69ihpjgp9nky54iykvxq63lp1vl8pxjanif2mk6f"))))
+         "1qvrxrk1h8bd75xwasxbvlkqrw6xkavjimvc7sslkw6lvb3z86jp"))))
     (build-system meson-build-system)
     (native-inputs
      `(("glib:bin" ,glib "bin") ; for glib-compile-schemas, gio-2.0.
@@ -9033,9 +9312,7 @@ beautifying border effects.")
        ("pkg-config" ,pkg-config)
        ("vala" ,vala)))
     (inputs
-     `(("dconf" ,dconf)
-       ("gtk+" ,gtk+)
-       ("libxml2" ,libxml2)))
+     (list dconf gtk+ libxml2))
     (home-page "https://gitlab.gnome.org/GNOME/dconf-editor")
     (synopsis "Graphical editor for GNOME's dconf configuration system")
     (description
@@ -9051,8 +9328,7 @@ software that do not provide their own configuration interface.")
     (build-system trivial-build-system)
     (source #f)
     (propagated-inputs
-     `(("nautilus" ,nautilus)
-       ("evince" ,evince)))
+     (list nautilus evince))
     (arguments
      `(#:modules ((guix build utils))
        #:builder
@@ -9092,15 +9368,15 @@ associations for GNOME.")
               "1y0x1wyakj3ya33hgj0w1jkbcn50q21gmn2zyalxysqp55i1ij8x"))))
    (build-system glib-or-gtk-build-system)
    (native-inputs
-    `(("gettext" ,gettext-minimal)
-      ("glib:bin" ,glib "bin")
-      ("gobject-introspection" ,gobject-introspection)
-      ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-      ("gtk+:bin" ,gtk+ "bin")
-      ("pkg-config" ,pkg-config)))
+    (list gettext-minimal
+          `(,glib "bin")
+          gobject-introspection
+          gsettings-desktop-schemas
+          `(,gtk+ "bin")
+          pkg-config))
    (inputs
-    `(("glib-networking" ,glib-networking) ; GIO plugin--for the tests
-      ("librest" ,rest)))
+    (list glib-networking ; GIO plugin--for the tests
+          rest))
    (synopsis "GoVirt Library")
    (description "GoVirt is a GObject wrapper for the oVirt REST API.")
    (home-page "https://gitlab.gnome.org/GNOME/libgovirt")
@@ -9109,15 +9385,15 @@ associations for GNOME.")
 (define-public gnome-weather
   (package
    (name "gnome-weather")
-   (version "3.34.0")
+   (version "40.1")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnome/sources/" name "/"
-                                (version-major+minor version) "/"
+                                (version-major version) "/"
                                 name "-" version ".tar.xz"))
             (sha256
              (base32
-              "1g63xzs17i36if923b36k9fwbk0nqa5vz6zh1k6q2axrzhhpx1i4"))))
+              "0k9wnyinvx6433r07kvjyahgqc605g7gbpf3d0h6vi4p8x61849x"))))
    (build-system meson-build-system)
    (native-inputs
     `(("gettext" ,gettext-minimal)
@@ -9126,34 +9402,38 @@ associations for GNOME.")
       ("gtk+:bin" ,gtk+ "bin")
       ("pkg-config" ,pkg-config)))
    (inputs
-    `( ;("adwaita-icon-theme" ,adwaita-icon-theme)
-      ("appstream-glib" ,appstream-glib)
-      ("geoclue" ,geoclue)
-      ("gdk-pixbuf" ,gdk-pixbuf)
-      ("gjs" ,gjs)
-      ("gnome-desktop" ,gnome-desktop)
-      ("libgweather" ,libgweather)))
+    (list appstream-glib
+          geoclue
+          gjs
+          gnome-desktop
+          libgweather
+          libhandy))
    (arguments
     `(#:glib-or-gtk? #t
       #:phases
-      (modify-phases %standard-phases
-        (add-after 'install 'fix-desktop-file
-          ;; FIXME: "gapplication launch org.gnome.Weather" fails for some reason.
-          ;; See https://issues.guix.gnu.org/issue/39324.
-          (lambda* (#:key outputs #:allow-other-keys)
-            (let* ((out (assoc-ref outputs "out"))
-                   (applications (string-append out "/share/applications")))
-              (substitute* (string-append applications "/org.gnome.Weather.desktop")
-                (("Exec=.*") "Exec=gnome-weather\n"))
-              #t)))
-        (add-after 'install 'wrap
-          (lambda* (#:key inputs outputs #:allow-other-keys)
-            (let ((out               (assoc-ref outputs "out"))
-                  (gi-typelib-path   (getenv "GI_TYPELIB_PATH")))
-              ;; GNOME Weather needs the typelib files of GTK+, Pango etc at runtime.
-              (wrap-program (string-append out "/bin/gnome-weather")
-                `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path)))
-              #t))))))
+      ,#~(modify-phases %standard-phases
+           (add-after 'unpack 'fix-service-file
+             (lambda _
+               (substitute* "data/org.gnome.Weather.service.in"
+                 (("Exec=[[:graph:]]+")
+                  (string-append "Exec=" #$output
+                                 "/bin/gnome-weather")))))
+           (add-after 'install 'fix-desktop-file
+             ;; FIXME: "gapplication launch org.gnome.Weather" fails for some
+             ;; reason.  See https://issues.guix.gnu.org/issue/39324.
+             (lambda _
+               (let ((applications
+                      (string-append #$output "/share/applications")))
+                 (substitute* (string-append applications
+                                             "/org.gnome.Weather.desktop")
+                   (("Exec=.*") "Exec=gnome-weather\n")))))
+           (add-after 'install 'wrap
+             (lambda _
+               (let ((gi-typelib-path   (getenv "GI_TYPELIB_PATH")))
+                 ;; GNOME Weather needs the typelib files of GTK+, Pango etc
+                 ;; at runtime.
+                 (wrap-program (string-append #$output "/bin/gnome-weather")
+                   `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path)))))))))
    (synopsis "Weather monitoring for GNOME desktop")
    (description "GNOME Weather is a small application that allows you to
 monitor the current weather conditions for your city, or anywhere in the
@@ -9169,15 +9449,12 @@ world.")
     (build-system trivial-build-system)
     (arguments '(#:builder (begin (mkdir %output) #t)))
     (propagated-inputs
-     ;; TODO: Add or remove packages according to:
-     ;;       <https://calc.disroot.org/2nu6mpf88ynq.html>.
-     `(
-     ;; GNOME-Core-OS-Services
+     `(;; GNOME-Core-OS-Services
        ("accountsservice" ,accountsservice)
        ("network-manager" ,network-manager)
        ("packagekit" ,packagekit)
        ("upower" ,upower)
-     ;; GNOME-Core-Shell
+       ;; GNOME-Core-Shell
        ("adwaita-icon-theme" ,adwaita-icon-theme)
        ("gdm" ,gdm)
        ("glib-networking" ,glib-networking)
@@ -9186,7 +9463,6 @@ world.")
        ("gnome-color-manager" ,gnome-color-manager)
        ("gnome-control-center" ,gnome-control-center)
        ("gnome-desktop" ,gnome-desktop)
-       ("gnome-getting-started-docs" ,gnome-getting-started-docs)
        ("gnome-initial-setup" ,gnome-initial-setup)
        ("gnome-keyring" ,gnome-keyring)
        ("gnome-menus" ,gnome-menus)
@@ -9203,7 +9479,7 @@ world.")
        ("orca" ,orca)
        ("rygel" ,rygel)
        ("sushi" ,sushi)
-     ;; GNOME-Core-Utilities
+       ;; GNOME-Core-Utilities
        ("baobab" ,baobab)
        ("cheese" ,cheese)
        ;; XXX: EoG requires librsvg-next, which depends on Rust, which currently
@@ -9224,8 +9500,8 @@ world.")
        ("gnome-disk-utility" ,gnome-disk-utility)
        ("gnome-font-viewer" ,gnome-font-viewer)
        ("gnome-maps" ,gnome-maps)
-       ; TODO: ("gnome-music" ,gnome-music)
-       ; TODO: ("gnome-photos" ,gnome-photos)
+       ("gnome-music" ,gnome-music)
+       ("gnome-photos" ,gnome-photos)
        ("gnome-screenshot" ,gnome-screenshot)
        ("gnome-system-monitor" ,gnome-system-monitor)
        ("gnome-terminal" ,gnome-terminal)
@@ -9233,17 +9509,18 @@ world.")
        ("nautilus" ,nautilus)
        ("simple-scan" ,simple-scan)
        ("totem" ,totem)
+       ("tracker-miners" ,tracker-miners)
        ("yelp" ,yelp)
-     ;; Others
+       ;; Others
        ("hicolor-icon-theme" ,hicolor-icon-theme)
        ("gnome-online-accounts" ,gnome-online-accounts)
 
        ;; Packages not part of GNOME proper but that are needed for a good
        ;; experience.  See <https://bugs.gnu.org/39646>.
        ;; XXX: Find out exactly which ones are needed and why.
-       ("font-cantarell"            ,font-cantarell)
+       ("font-abattis-cantarell"            ,font-abattis-cantarell)
        ("font-dejavu"               ,font-dejavu)
-       ("at-spi2-core"              ,at-spi2-core)
+       ("at-spi2-core"              ,at-spi2-core-minimal)
        ("dbus"                      ,dbus)
        ("dconf"                     ,dconf)
        ("desktop-file-utils"        ,desktop-file-utils)
@@ -9298,18 +9575,15 @@ documents and diagrams, playing media, scanning, and much more.")
                  (("-Werror") ""))
                #t)))))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("gnome-common" ,gnome-common)
-         ("intltool" ,intltool)
-         ("libtool" ,libtool)
-         ("pkg-config" ,pkg-config)
-         ("which" ,which)))
+       (list autoconf
+             automake
+             gnome-common
+             intltool
+             libtool
+             pkg-config
+             which))
       (inputs
-       `(("glib" ,glib)
-         ("gstreamer" ,gstreamer)
-         ("gst-plugins-base" ,gst-plugins-base)
-         ("gtk+" ,gtk+)))
+       (list glib gstreamer gst-plugins-base gtk+))
       (synopsis "Desktop recording program")
       (description "Byzanz is a simple desktop recording program with a
 command-line interface.  It can record part or all of an X display for a
@@ -9332,7 +9606,8 @@ specified duration and save it as a GIF encoded animated image file.")
         (base32 "1c4r9rnrz5gazrfg0z2rcwax4nscs7z391bcjcl74k6ln3blwzpr"))))
     (build-system meson-build-system)
     (arguments
-     `(#:glib-or-gtk? #t
+     `(#:meson ,meson-0.59
+       #:glib-or-gtk? #t
        #:phases
        (modify-phases %standard-phases
          (add-after 'glib-or-gtk-wrap 'python-and-gi-wrap
@@ -9342,32 +9617,33 @@ specified duration and save it as a GIF encoded animated image file.")
                    (pylib (string-append (assoc-ref outputs "out")
                                          "/lib/python"
                                          ,(version-major+minor
-                                           (package-version python))
+                                           (package-version
+                                            (this-package-input "python")))
                                          "/site-packages")))
                (wrap-program prog
-                 `("PYTHONPATH" = (,(getenv "PYTHONPATH") ,pylib))
-                 `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH"))))
-               #t))))))
+                 `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH") ,pylib))
+                 `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH"))))))))))
     (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
-     `(("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gtk+" ,gtk+)
-       ("libhandy" ,libhandy-0.0)
-       ("libsecret" ,libsecret)
-       ("python-beautifulsoup4" ,python-beautifulsoup4)
-       ("python-pillow" ,python-pillow)
-       ("python-pyfavicon" ,python-pyfavicon)
-       ("python-pygobject" ,python-pygobject)
-       ("python-pyotp" ,python-pyotp)
-       ("python-pyzbar" ,python-pyzbar)
-       ("yoyo-migrations" ,yoyo-migrations)
-       ("zbar" ,zbar)))
+     (list desktop-file-utils
+           gettext-minimal
+           `(,glib "bin")
+           gobject-introspection
+           `(,gtk+ "bin")
+           pkg-config))
+    (inputs
+     (list gsettings-desktop-schemas
+           gtk+
+           libhandy-0.0
+           libsecret
+           python
+           python-beautifulsoup4
+           python-pillow
+           python-pyfavicon
+           python-pygobject
+           python-pyotp
+           python-pyzbar
+           yoyo-migrations
+           zbar))
     (home-page "https://gitlab.gnome.org/World/Authenticator/")
     (synopsis "Two-factor authentication application built for GNOME")
     (description
@@ -9389,23 +9665,20 @@ Features:
 (define-public gsound
   (package
     (name "gsound")
-    (version "1.0.2")
+    (version "1.0.3")
     (source (origin
               (method url-fetch)
-              (uri (string-append "mirror://gnome/sources/" name "/"
+              (uri (string-append "mirror://gnome/sources/gsound/"
                                   (version-major+minor version) "/"
-                                  name "-" version ".tar.xz"))
+                                  "gsound-" version ".tar.xz"))
               (sha256
                (base32
-                "0lwfwx2c99qrp08pfaj59pks5dphsnxjgrxyadz065d8xqqgza5v"))))
-    (build-system glib-or-gtk-build-system)
+                "06l80xgykj7x1kqkjvcq06pwj2rmca458zvs053qc55x3sg06bfa"))))
+    (build-system meson-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("gobject-introspection" ,gobject-introspection)
-       ("vala" ,vala)))
-    (inputs
-     `(("glib" ,glib)
-       ("libcanberra" ,libcanberra)))
+     (list pkg-config gobject-introspection vala))
+    (propagated-inputs
+     (list libcanberra))   ; in Requires.private of gsound.pc
     (home-page "https://wiki.gnome.org/Projects/GSound")
     (synopsis "GObject wrapper for libcanberra")
     (description
@@ -9428,13 +9701,9 @@ library.")
                 "0zn3s7ryjc3k1abj4k55dr2na844l451nrg9s6cvnnhh569zj99x"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("gobject-introspection" ,gobject-introspection)
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list gobject-introspection intltool pkg-config))
     (inputs
-     `(("gnome-online-accounts:lib" ,gnome-online-accounts "lib")
-       ("json-glib" ,json-glib)
-       ("rest" ,rest)))
+     (list `(,gnome-online-accounts "lib") json-glib rest))
     (home-page "https://wiki.gnome.org/Projects/Zapojit")
     (synopsis "Library for accessing SkyDrive and Hotmail")
     (description
@@ -9445,15 +9714,15 @@ Microsoft SkyDrive and Hotmail, using their REST protocols.")
 (define-public gnome-clocks
   (package
     (name "gnome-clocks")
-    (version "3.34.0")
+    (version "40.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
-                                  (version-major+minor version) "/"
+                                  (version-major version) "/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0g7hjk55smhkd09hwa9kag3h5a12l494wj89w9smpdk3ghsmy6b1"))))
+                "02d3jg46sn8d9gd4dsaly22gg5vkbz2gpq4pmwpvncb4rsqk7sn2"))))
     (build-system meson-build-system)
     (arguments
      '(#:glib-or-gtk? #t
@@ -9463,8 +9732,7 @@ Microsoft SkyDrive and Hotmail, using their REST protocols.")
            ;; Don't create 'icon-theme.cache'.
            (lambda _
              (substitute* "build-aux/post-install.py"
-               (("gtk-update-icon-cache") "true"))
-             #t)))))
+               (("gtk-update-icon-cache") "true")))))))
     (native-inputs
      `(("vala" ,vala)
        ("pkg-config" ,pkg-config)
@@ -9473,13 +9741,14 @@ Microsoft SkyDrive and Hotmail, using their REST protocols.")
        ("gettext" ,gettext-minimal)
        ("itstool" ,itstool)))
     (inputs
-     `(("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("gsound" ,gsound)
-       ("geoclue" ,geoclue)
-       ("geocode-glib" ,geocode-glib)
-       ("libgweather" ,libgweather)
-       ("gnome-desktop" ,gnome-desktop)))
+     (list glib
+           gtk+
+           gsound
+           geoclue
+           geocode-glib
+           libgweather
+           libhandy
+           gnome-desktop))
     (home-page "https://wiki.gnome.org/Apps/Clocks")
     (synopsis "GNOME's clock application")
     (description
@@ -9490,18 +9759,18 @@ desktop.  It supports world clock, stop watch, alarms, and count down timer.")
 (define-public gnome-calendar
   (package
     (name "gnome-calendar")
-    (version "3.34.2")
+    (version "40.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
-                                  (version-major+minor version) "/"
+                                  (version-major version) "/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1bnmd191044zn2kr6f5vg7sm5q59qf7z652awll1f7s6ahijr8rw"))))
+                "0czasxnmbw2zm21lmxam8qixacagciq3f815s809hn0f9byh2dwy"))))
     (build-system meson-build-system)
     (arguments
-     '(#:glib-or-gtk? #t
+     `(#:glib-or-gtk? #t
        ;; gnome-calendar has to be installed before the tests can be run
        ;; https://bugzilla.gnome.org/show_bug.cgi?id=788224
        #:tests? #f
@@ -9523,9 +9792,10 @@ desktop.  It supports world clock, stop watch, alarms, and count down timer.")
        ("libdazzle" ,libdazzle)
        ("libedataserverui" ,evolution-data-server)
        ("libgweather" ,libgweather)
+       ("libhandy" ,libhandy)
        ("geoclue" ,geoclue)))
     (propagated-inputs
-     `(("evolution-data-server" ,evolution-data-server)))
+     (list evolution-data-server))
     (home-page "https://wiki.gnome.org/Apps/Calendar")
     (synopsis "GNOME's calendar application")
     (description
@@ -9536,90 +9806,92 @@ desktop.  It supports multiple calendars, month, week and year view.")
 (define-public gnome-todo
   (package
     (name "gnome-todo")
-    (version "3.28.1")
+    (version "41.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
-                                  (version-major+minor version) "/"
+                                  (version-major version) "/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "08ygqbib72jlf9y0a16k54zz51sncpq2wa18wp81v46q8301ymy7"))
-              (patches
-               (search-patches "gnome-todo-delete-esource-duplicate.patch"))))
+                "1r94880d4khbjhhfnhaba3y3d4hv2bri82rzfzxn27s5iybpqras"))
+              (patches (search-patches "gnome-todo-libportal.patch"))))
     (build-system meson-build-system)
     (arguments
-     '(#:glib-or-gtk? #t
-       #:phases (modify-phases %standard-phases
-                  (add-after
-                      'install 'wrap-gnome-todo
-                    (lambda* (#:key inputs outputs #:allow-other-keys)
-                      (let ((out               (assoc-ref outputs "out"))
-                            (gi-typelib-path   (getenv "GI_TYPELIB_PATH"))
-                            (python-path       (getenv "PYTHONPATH")))
-                        (wrap-program (string-append out "/bin/gnome-todo")
-                          ;; XXX: gi plugins are broken.
-                          ;; See https://bugzilla.gnome.org/show_bug.cgi?id=787212
-                          ;; For plugins.
-                          `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))
-                          `("PYTHONPATH" ":" prefix (,python-path))))
-                      #t)))))
-    (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("gobject-introspection" ,gobject-introspection)
-       ("glib:bin" ,glib "bin")         ; For glib-compile-resources
-       ("gtk+-bin" ,gtk+ "bin")         ; For gtk-update-icon-cache
-       ("pkg-config" ,pkg-config)))
-    (inputs
-     `(("rest" ,rest)                   ; For Todoist plugin
-       ("json-glib" ,json-glib)         ; For Todoist plugin
-       ("libedataserverui" ,evolution-data-server)
-       ("libical" ,libical)
-       ("libpeas" ,libpeas)
-       ("python-pygobject" ,python-pygobject)
-       ("evolution-data-server" ,evolution-data-server)
-       ("gnome-online-accounts:lib" ,gnome-online-accounts "lib")
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)))
+     (list
+      #:glib-or-gtk? #t
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'skip-gtk-update-icon-cache
+            (lambda _
+              (substitute* "build-aux/meson/meson_post_install.py"
+                (("gtk-update-icon-cache") "true"))))
+          (delete 'check)
+          (add-after 'install 'check
+            (assoc-ref %standard-phases
+                       'check))
+          (add-before 'check 'pre-check
+            (lambda _
+              (setenv "GSETTINGS_SCHEMA_DIR"
+                      (string-append #$output "/share/glib-2.0/schemas")))))))
+    (native-inputs
+     (list gettext-minimal
+           gobject-introspection
+           `(,glib "bin")               ;for glib-compile-resources
+           `(,gtk "bin")                ;for gtk-update-icon-cache
+           itstool
+           pkg-config))
+    (inputs
+     (list rest                         ;for Todoist plugin
+           gtk
+           json-glib                    ;for Todoist plugin
+           libadwaita
+           evolution-data-server
+           libical
+           libpeas
+           libportal
+           python-pygobject
+           evolution-data-server
+           `(,gnome-online-accounts "lib")
+           gsettings-desktop-schemas))
     (home-page "https://wiki.gnome.org/Apps/Todo")
     (synopsis "GNOME's ToDo Application")
-    (description
-     "GNOME To Do is a simplistic personal task manager designed to perfectly
-fit the GNOME desktop.")
+    (description "GNOME To Do is a simplistic personal task manager designed
+to perfectly fit the GNOME desktop.")
     (license license:gpl3+)))
 
 (define-public gnome-dictionary
   (package
     (name "gnome-dictionary")
-    (version "3.26.1")
+    (version "40.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
-                                  (version-major+minor version) "/"
+                                  (version-major version) "/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "007k2bq8iplg4psdpz074r5d4zxvn4s95qym4rw9hs6giljbrf0n"))))
+                "1d8dhcfys788vv27v34i3s3x3jdvdi2kqn2a5p8c937a9hm0qr9f"))))
     (build-system meson-build-system)
-    (arguments '(#:glib-or-gtk? #t
-                 #:phases (modify-phases %standard-phases
-                            (add-after 'unpack 'patch-install-script
-                              (lambda _
-                                ;; This script attempts to compile glib schemas
-                                ;; and create an empty MIME database.  We do
-                                ;; that elsewhere, so prevent it from running.
-                                (substitute* "build-aux/post-install.sh"
-                                  (("\\[ -z \"\\$DESTDIR\" \\]") "false"))
-                                #t)))))
+    (arguments
+     `(#:glib-or-gtk? #t
+       #:meson ,meson-0.59
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'skip-gtk-update-icon-cache
+           ;; Don't create 'icon-theme.cache'.
+           (lambda _
+             (substitute* "build-aux/meson/post-install.py"
+               (("gtk-update-icon-cache") "true")))))))
     (native-inputs
-     `(("glib:bin" ,glib "bin")
-       ("gobject-introspection" ,gobject-introspection)
-       ("intltool" ,intltool)
-       ("itstool" ,itstool)
-       ("pkg-config" ,pkg-config)
-       ("xmllint" ,libxml2)))
+     (list `(,glib "bin")
+           gobject-introspection
+           intltool
+           itstool
+           pkg-config
+           libxml2))
     (inputs
-     `(("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gtk+" ,gtk+)))
+     (list gsettings-desktop-schemas gtk+))
     (home-page "https://wiki.gnome.org/Apps/Dictionary")
     (synopsis "Look up words in dictionary sources")
     (description
@@ -9630,17 +9902,17 @@ existing databases over the internet.")
 (define-public gnome-tweaks
   (package
     (name "gnome-tweaks")
-    (version "3.34.1")
+    (version "40.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/gnome-tweaks/"
-                                  (version-major+minor version) "/"
+                                  (version-major version) "/"
                                   "gnome-tweaks-" version ".tar.xz"))
               (patches
                (list (search-patch "gnome-tweaks-search-paths.patch")))
               (sha256
                (base32
-                "19y62dj4n5i6v4zpjllxl51dch6ndy8xs45v5aqmmq9xyfrqk5yq"))))
+                "0sn3xsjhnini0f2dyi1ymrr3fb8mi7w5j5lsyw11rc5h67h3ypzr"))))
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
@@ -9654,31 +9926,37 @@ existing databases over the internet.")
            ;; Don't create 'icon-theme.cache'.
            (lambda _
              (substitute* "meson-postinstall.py"
-               (("gtk-update-icon-cache") "true"))
-             #t))
+               (("gtk-update-icon-cache") "true"))))
          (add-after 'install 'wrap
            (@@ (guix build python-build-system) wrap))
-         (add-after 'wrap 'wrap-gi-typelib
+         (add-after 'wrap 'wrap-gi-typelib-and-python
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((out               (assoc-ref outputs "out"))
                    (gi-typelib-path   (getenv "GI_TYPELIB_PATH")))
-               (wrap-program (string-append out "/bin/gnome-tweaks")
-                 `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))))
-             #t)))))
-    (native-inputs
-     `(("intltool" ,intltool)
+               (let ((python-path
+                      (string-append out "/lib/python"
+                                     ,(version-major+minor
+                                       (package-version python))
+                                     "/site-packages")))
+                 (wrap-program (string-append out "/bin/gnome-tweaks")
+                   `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))
+                   `("GUIX_PYTHONPATH" ":" prefix (,python-path))))))))))
+    (native-inputs
+     `(("glib:bin" ,glib "bin") ; for glib-compile-resources, etc.
+       ("intltool" ,intltool)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("gnome-desktop" ,gnome-desktop)
-       ("gtk+" ,gtk+)
-       ("gobject-introspection" ,gobject-introspection)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("libhandy" ,libhandy-0.0)
-       ("libnotify" ,libnotify)
-       ("libsoup" ,libsoup)
-       ("nautilus" ,nautilus)
-       ("python" ,python)
-       ("python-pygobject" ,python-pygobject)))
+     (list bash-minimal ; to execute the wrapper program
+           gnome-desktop
+           gtk+
+           gobject-introspection
+           gsettings-desktop-schemas
+           libhandy
+           libnotify
+           libsoup
+           nautilus
+           python
+           python-pygobject))
     (synopsis "Customize advanced GNOME 3 options")
     (home-page "https://wiki.gnome.org/Apps/Tweaks")
     (description
@@ -9691,15 +9969,15 @@ GNOME Shell appearance and extension, etc.")
 (define-public gnome-shell-extensions
   (package
     (name "gnome-shell-extensions")
-    (version "3.34.2")
+    (version "41.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
-                                  (version-major+minor version)  "/"
+                                  (version-major version)  "/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1f5l35l3kdkzrv49xmg1sh11vwmgjbg7hx3gb91i39bfl1snxqd1"))))
+                "0s7wcsa0ysdgh5zpxpa95id5rz4ajb2r1561v5szjf4b8k0slkyq"))))
     (build-system meson-build-system)
     (arguments
      '(#:configure-flags '("-Dextension_set=all")))
@@ -9708,7 +9986,7 @@ GNOME Shell appearance and extension, etc.")
        ("intltool" ,intltool)
        ("pkg-config" ,pkg-config)))
     (propagated-inputs
-     `(("glib" ,glib)))
+     (list glib))
     (synopsis "Extensions for GNOME Shell")
     (description "GNOME Shell extensions modify and extend GNOME Shell
 functionality and behavior.")
@@ -9718,7 +9996,7 @@ functionality and behavior.")
 (define-public folks
   (package
     (name "folks")
-    (version "0.13.1")
+    (version "0.15.3")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -9727,7 +10005,7 @@ functionality and behavior.")
                     "folks-" version ".tar.xz"))
               (sha256
                (base32
-                "0pda8sx4ap3lyri5fdrnakl29la1zkhwlc9bmnp13qigp1iwdw9x"))))
+                "19a4qp9ry8y24jx1v5456qn9lnw843571vkkah3bxx4ky3x3gmr1"))))
     (build-system meson-build-system)
     (arguments
      '(#:phases
@@ -9736,22 +10014,23 @@ functionality and behavior.")
            ;; Don't create 'icon-theme.cache'.
            (lambda _
              (substitute* "meson_post_install.py"
-               (("gtk-update-icon-cache") "true"))
-             #t)))))
-    (inputs
-     `(("bdb" ,bdb)
-       ("dbus-glib" ,dbus-glib)
-       ("evolution-data-server" ,evolution-data-server)
-       ("glib" ,glib)
-       ("libgee" ,libgee)
-       ("readline" ,readline)
-       ("telepathy-glib" ,telepathy-glib)))
-    (native-inputs
-     `(("glib:bin" ,glib "bin")
-       ("gobject-introspection" ,gobject-introspection)
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)
-       ("vala" ,vala)))
+               (("gtk-update-icon-cache") "true")))))))
+    (inputs
+     (list bdb
+           dbus-glib
+           evolution-data-server
+           glib
+           libgee
+           readline
+           telepathy-glib))
+    (native-inputs
+     (list `(,glib "bin")
+           gobject-introspection
+           python-dbusmock
+           intltool
+           pkg-config
+           python
+           vala))
     (synopsis "Library to aggregate data about people")
     (description "Libfolks is a library that aggregates information about people
 from multiple sources (e.g., Telepathy connection managers for IM contacts,
@@ -9781,15 +10060,14 @@ compiled.")
                            "--enable-gtk-doc"
                            "--enable-introspection")))
     (native-inputs
-     `(("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc/stable)
-       ("pkg-config" ,pkg-config)
-
-       ;; The 0.2.4 ‘release’ tarball isn't bootstrapped.
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("which" ,which)))
+     (list gobject-introspection
+           gtk-doc/stable
+           pkg-config
+           ;; The 0.2.4 ‘release’ tarball isn't bootstrapped.
+           autoconf
+           automake
+           libtool
+           which))
     (inputs
      `(("json-glib" ,json-glib)
        ("gnome-online-accounts:lib" ,gnome-online-accounts "lib")
@@ -9814,14 +10092,11 @@ GLib/GObject code.")
                 "0y962ykn3rr9gylj0pwpww7bi20lmhvsw6qvxs5bisbn2mih5jpp"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("glib" ,glib "bin")
-       ("intltool" ,intltool)))
+     (list pkg-config
+           `(,glib "bin") intltool))
     (propagated-inputs
      ;; Referred to in .h files and .pc.
-     `(("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("libxklavier" ,libxklavier)))
+     (list glib gtk+ libxklavier))
     (home-page "https://www.gnome.org")
     (synopsis "GNOME keyboard configuration library")
     (description
@@ -9857,7 +10132,7 @@ environment, which can notably display keyboard layouts.")
        ("gtk-doc" ,gtk-doc/stable)))
     (propagated-inputs
      ;; Referred to in .h files and .pc.
-     `(("gtk+" ,gtk+)))
+     (list gtk+))
     (home-page "https://wiki.gnome.org/Attic/LibUnique")
     (synopsis "Library for writing single instance applications")
     (description
@@ -9872,33 +10147,42 @@ handling the startup notification side.")
 (define-public gnome-calculator
   (package
     (name "gnome-calculator")
-    (version "3.34.1")
+    (version "41.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://gnome/sources/" name "/"
-                           (version-major+minor version) "/"
+                           (version-major version) "/"
                            name "-" version ".tar.xz"))
        (sha256
         (base32
-         "0lbh87255zzggqzai6543qg920y52bl4vs5m5h5087ghzg14hlsd"))))
+         "16fwwfnw1w8p53ffny6zkff5cfsmg7xax9kmfgb7czjqv15w0vd6"))))
     (build-system meson-build-system)
-    (arguments '(#:glib-or-gtk? #t))
-    (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("glib:bin" ,glib "bin") ; for glib-compile-schemas, gio-2.0.
-       ("gtk+:bin" ,gtk+ "bin") ; for gtk-update-icon-cache
-       ("itstool" ,itstool)
-       ("vala" ,vala)
-       ("pkg-config" ,pkg-config)))
-    (inputs
-     `(("glib" ,glib)
-       ("gtksourceview" ,gtksourceview)
-       ("libgee" ,libgee)
-       ("libsoup" ,libsoup)
-       ("libxml2" ,libxml2)
-       ("mpc" ,mpc)
-       ("mpfr" ,mpfr)))
+    (arguments
+     '(#:glib-or-gtk? #t
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'pre-check
+           (lambda _
+             ;; Tests require a writable HOME.
+             (setenv "HOME" (getcwd)))))))
+    (native-inputs
+     (list gettext-minimal
+           `(,glib "bin")               ;for glib-compile-schemas, gio-2.0.
+           `(,gtk+ "bin")               ;for gtk-update-icon-cache
+           itstool
+           vala
+           pkg-config
+           python))
+    (inputs
+     (list `(,glib "bin")
+           gtksourceview
+           libgee
+           libhandy
+           libsoup-minimal-2
+           libxml2
+           mpc
+           mpfr))
     (home-page "https://wiki.gnome.org/Apps/Calculator")
     (synopsis "Desktop calculator")
     (description
@@ -9921,14 +10205,10 @@ is suitable as a default application in a Desktop environment.")
          "0l0g5x8g6dwhf5ksnqqrjjsycy57kcvdslkmsr6bl3vrsjd7qml3"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("gtk+:bin" ,gtk+ "bin")
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake
+           `(,gtk+ "bin") intltool pkg-config))
     (inputs
-     `(("gtksourceview" ,gtksourceview-3)
-       ("libsm" ,libsm)))
+     (list gtksourceview-3 libsm))
     (home-page "https://wiki.gnome.org/Apps/Xpad")
     (synopsis "Virtual sticky note")
     (description
@@ -10034,9 +10314,7 @@ only know by its Unicode name or code point.")
        ("gtk+:bin" ,gtk+ "bin")
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gtk+" ,gtk+)
-       ("libportal" ,libportal)))
+     (list gsettings-desktop-schemas gtk+ libportal))
     (home-page "https://www.hjdskes.nl/projects/gcolor3/")
     (synopsis "Simple color chooser written in GTK3")
     (description "Color Picker is a simple color chooser written in GTK3.  It
@@ -10056,15 +10334,9 @@ supports both X and Wayland display servers.")
         (base32 "09hgxq139kbkjda5y073lqhq1z1x7cx0j80jh77afrqa3y9c53wl"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("desktop-file-utils" ,desktop-file-utils)
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list desktop-file-utils intltool pkg-config))
     (inputs
-     `(("enchant" ,enchant)
-       ("gtk+" ,gtk+)
-       ("python" ,python-wrapper)
-       ("xmllint" ,libxml2)
-       ("gucharmap" ,gucharmap)))
+     (list enchant gtk+ python-wrapper libxml2 gucharmap))
     (home-page "http://bluefish.openoffice.nl")
     (synopsis "Web development studio")
     (description
@@ -10076,35 +10348,36 @@ Bluefish supports many programming and markup languages.")
 (define-public gnome-system-monitor
   (package
     (name "gnome-system-monitor")
-    (version "3.32.1")
+    (version "41.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://gnome/sources/" name "/"
-                           (version-major+minor version) "/"
+                           (version-major version) "/"
                            name "-" version ".tar.xz"))
        (sha256
         (base32
-         "1wd43qdgjav6xamq5z5cy8fri5zr01jga3plc9w95gcia0rk3ha8"))))
+         "0pwy2c95rm0ym3x5pr6rqg7zh58crjxyns4r52q99ds937349z67"))))
     (build-system meson-build-system)
     (arguments
      '(#:glib-or-gtk? #t
        #:configure-flags '("-Dsystemd=false")))
     (native-inputs
-     `(("glib:bin" ,glib "bin") ; for glib-mkenums.
-       ("gtk+" ,gtk+ "bin") ; gtk-update-icon-cache
-       ("intltool" ,intltool)
-       ("itstool" ,itstool)
-       ("libgtop" ,libgtop)
-       ("polkit" ,polkit)
-       ("pkg-config" ,pkg-config)))
-    (inputs
-     `(("gdk-pixbuf" ,gdk-pixbuf) ; for loading SVG files.
-       ("gtk+" ,gtk+)
-       ("gtkmm" ,gtkmm)
-       ("librsvg" ,librsvg)
-       ("libxml2" ,libxml2)
-       ("libwnck" ,libwnck)))
+     (list `(,glib "bin")               ;for glib-mkenums.
+           `(,gtk+ "bin")               ;gtk-update-icon-cache
+           intltool
+           itstool
+           libgtop
+           polkit
+           pkg-config))
+    (inputs
+     (list gdk-pixbuf                   ;for loading SVG files.
+           gtk+
+           gtkmm-3
+           libhandy
+           librsvg
+           libxml2
+           libwnck))
     (home-page "https://wiki.gnome.org/Apps/SystemMonitor")
     (synopsis "Process viewer and system resource monitor for GNOME")
     (description
@@ -10141,11 +10414,11 @@ from gi.repository import Gtk
 from gi.repository import Atspi"))
              #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("python" ,python)))
+     (list python))
     (propagated-inputs
-     `(("python-pygobject" ,python-pygobject)))
+     (list python-pygobject))
     (synopsis "Python client bindings for D-Bus AT-SPI")
     (home-page "https://wiki.linuxfoundation.org/accessibility\
 /atk/at-spi/at-spi_on_d-bus")
@@ -10166,16 +10439,16 @@ accessibility infrastructure.")
 (define-public orca
   (package
     (name "orca")
-    (version "3.34.1")
+    (version "41.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
                     "mirror://gnome/sources/" name "/"
-                    (version-major+minor version) "/"
+                    (version-major version) "/"
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1q38n7hyshkiszmn361skxjynxr31lcms7a1iny6d0zlpmh1vnk4"))))
+                "1gflnsv6d5qn5rh1f16yfa0q0yv8yvd0l5lbwrsdg7z18lafb5vn"))))
     (build-system glib-or-gtk-build-system)
     (arguments
      '(#:phases
@@ -10185,8 +10458,7 @@ accessibility infrastructure.")
              (let ((xkbcomp (string-append
                              (assoc-ref inputs "xkbcomp") "/bin/xkbcomp")))
                (substitute* "src/orca/orca.py"
-                 (("'xkbcomp'") (format #f "'~a'" xkbcomp))))
-             #t))
+                 (("'xkbcomp'") (format #f "'~a'" xkbcomp))))))
          (add-after 'install 'wrap-orca
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out  (assoc-ref outputs "out"))
@@ -10196,26 +10468,25 @@ accessibility infrastructure.")
                    (,(getenv "GI_TYPELIB_PATH")))
                  `("GST_PLUGIN_SYSTEM_PATH" ":" prefix
                    (,(getenv "GST_PLUGIN_SYSTEM_PATH")))
-                 `("PYTHONPATH" ":" prefix
-                   (,(getenv "PYTHONPATH")))))
-             #t)))))
-    (native-inputs
-     `(("intltool" ,intltool)
-       ("itstool" ,itstool)
-       ("pkg-config" ,pkg-config)
-       ("xmllint" ,libxml2)))
-    (inputs
-     `(("at-spi2-atk" ,at-spi2-atk)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base)
-       ("gst-plugins-good" ,gst-plugins-good)
-       ("gtk+" ,gtk+)
-       ("python" ,python)
-       ("python-pygobject" ,python-pygobject)
-       ("python-pyatspi" ,python-pyatspi)
-       ("python-speechd" ,speech-dispatcher)
-       ("xkbcomp" ,xkbcomp)))
+                 `("GUIX_PYTHONPATH" ":" prefix
+                   (,(getenv "GUIX_PYTHONPATH"))))))))))
+    (native-inputs
+     (list intltool
+           itstool
+           pkg-config
+           libxml2))
+    (inputs
+     (list at-spi2-atk
+           gsettings-desktop-schemas
+           gstreamer
+           gst-plugins-base
+           gst-plugins-good
+           gtk+
+           python
+           python-pygobject
+           python-pyatspi
+           speech-dispatcher
+           xkbcomp))
     (synopsis
      "Screen reader for individuals who are blind or visually impaired")
     (home-page "https://wiki.gnome.org/Projects/Orca")
@@ -10255,11 +10526,9 @@ that support the Assistive Technology Service Provider Interface (AT-SPI).")
              ;; Allow Enchant and its Aspell backend to find the en_US
              ;; dictionary.
              (setenv "ASPELL_DICT_DIR"
-                     (string-append (assoc-ref inputs "aspell-dict-en")
-                                    "/lib/aspell"))
-             #t)))))
+                     (search-input-directory inputs "/lib/aspell")))))))
     (inputs
-     `(("iso-codes" ,iso-codes)))
+     (list iso-codes))
     (native-inputs
      `(("glib" ,glib "bin")
        ("gobject-introspection" ,gobject-introspection)
@@ -10272,9 +10541,7 @@ that support the Assistive Technology Service Provider Interface (AT-SPI).")
        ("xorg-server" ,xorg-server-for-tests)))
     (propagated-inputs
      ;; Referred by .pc file.
-     `(("enchant" ,enchant)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)))
+     (list enchant glib gtk+))
     (home-page "https://wiki.gnome.org/Projects/gspell")
     (synopsis "GNOME's alternative spell checker")
     (description
@@ -10306,19 +10573,17 @@ text views, and buttons to choose the language.")
                    '("--build=aarch64-unknown-linux-gnu")
                    '()))))
     (inputs
-     `(("libgnomecanvas" ,libgnomecanvas)
-       ("libgnomeui" ,libgnomeui)
-       ("libglade" ,libglade)
-       ("gnome-vfs" ,gnome-vfs)
-       ("gconf" ,gconf)
-       ("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)
-       ("gtk+" ,gtk+)
-       ("glib" ,glib)))
-    (native-inputs
-     `(("intltool" ,intltool)
-       ("scrollkeeper" ,scrollkeeper)
-       ("pkg-config" ,pkg-config)))
+     (list libgnomecanvas
+           libgnomeui
+           libglade
+           gnome-vfs
+           gconf
+           libxml2
+           libxslt
+           gtk+
+           glib))
+    (native-inputs
+     (list intltool scrollkeeper pkg-config))
     (home-page "https://wiki.gnome.org/Apps/Planner")
     (synopsis "Project management software for the GNOME desktop")
     (description
@@ -10335,14 +10600,14 @@ views can be printed as PDF or PostScript files, or exported to HTML.")
 (define-public lollypop
   (package
     (name "lollypop")
-    (version "1.4.6")
+    (version "1.4.24")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://adishatz.org/lollypop/"
                            "lollypop-" version ".tar.xz"))
        (sha256
-        (base32 "1hlahr50gsagx1ifcdk4yn43xps6w0vqn0gnd6xckfc7qmg1pgq7"))))
+        (base32 "10cw3x75siibmnbh4zhfmf2vd08fqjs3lj3l4wpk6zj9h22ncfxw"))))
     (build-system meson-build-system)
     (arguments
      `(#:imported-modules
@@ -10366,8 +10631,7 @@ views can be printed as PDF or PostScript files, or exported to HTML.")
          (add-after 'install 'wrap-python
            (assoc-ref python:%standard-phases 'wrap)))))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("itstool" ,itstool)
+     `(("gettext" ,gettext-minimal)
        ("glib:bin" ,glib "bin")         ; For glib-compile-resources
        ("gtk+:bin" ,gtk+ "bin")         ; For gtk-update-icon-cache
        ("pkg-config" ,pkg-config)))
@@ -10379,7 +10643,7 @@ views can be printed as PDF or PostScript files, or exported to HTML.")
        ("libnotify" ,libnotify)
        ("libsecret" ,libsecret)
        ("libhandy" ,libhandy)
-       ("libsoup" ,libsoup)
+       ("libsoup" ,libsoup-minimal-2)
        ("python" ,python)
        ("python-beautifulsoup4" ,python-beautifulsoup4)
        ("python-gst" ,python-gst)
@@ -10390,10 +10654,9 @@ views can be printed as PDF or PostScript files, or exported to HTML.")
        ("totem-pl-parser" ,totem-pl-parser)
        ("webkitgtk" ,webkitgtk)))
     (propagated-inputs
-     `(;; gst-plugins-base is required to start Lollypop,
-       ;; the others are required to play streaming.
-       ("gst-plugins-good" ,gst-plugins-good)
-       ("gst-plugins-ugly" ,gst-plugins-ugly)))
+     (list ;; gst-plugins-base is required to start Lollypop,
+           ;; the others are required to play streaming.
+           gst-plugins-good gst-plugins-ugly))
     (home-page "https://wiki.gnome.org/Apps/Lollypop")
     (synopsis "GNOME music playing application")
     (description
@@ -10417,8 +10680,7 @@ automatically and it can stream songs from online music services and charts.")
                 "1j6h98whgkcxrh30bwvnxvyqxrxchgpdgqhl0j71xz7x72dqxijd"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("pkg-config" ,pkg-config)))
+     (list gettext-minimal pkg-config))
     (home-page "https://wiki.gnome.org/Projects/GnomeVideoEffects")
     (synopsis "Video effects for Cheese and other GNOME applications")
     (description
@@ -10437,7 +10699,8 @@ photo-booth-like software, such as Cheese.")
                                   version ".tar.xz"))
               (sha256
                (base32
-                "0vyim2avlgq3a48rgdfz5g21kqk11mfb53b2l883340v88mp7ll8"))))
+                "0vyim2avlgq3a48rgdfz5g21kqk11mfb53b2l883340v88mp7ll8"))
+              (patches (search-patches "cheese-vala-update.patch"))))
     (arguments
      `(#:glib-or-gtk? #t
        ;; Tests require GDK.
@@ -10479,23 +10742,23 @@ photo-booth-like software, such as Cheese.")
        ("pkg-config" ,pkg-config)
        ("vala" ,vala)))
     (propagated-inputs
-     `(("gnome-video-effects" ,gnome-video-effects)
-       ("clutter" ,clutter)
-       ("clutter-gst" ,clutter-gst)
-       ("clutter-gtk" ,clutter-gtk)
-       ("libcanberra" ,libcanberra)
-       ("gdk-pixbuf" ,gdk-pixbuf)
-       ("glib" ,glib)
-       ("gstreamer" ,gstreamer)))
-    (inputs
-     `(("gnome-desktop" ,gnome-desktop)
-       ("gobject-introspection" ,gobject-introspection)
-       ("gst-plugins-base" ,gst-plugins-base)
-       ("gst-plugins-good" ,gst-plugins-good)
-       ("gst-plugins-bad" ,gst-plugins-bad)
-       ("gtk+" ,gtk+)
-       ("libx11" ,libx11)
-       ("libxtst" ,libxtst)))
+     (list gnome-video-effects
+           clutter
+           clutter-gst
+           clutter-gtk
+           libcanberra
+           gdk-pixbuf
+           glib
+           gstreamer))
+    (inputs
+     (list gnome-desktop
+           gobject-introspection
+           gst-plugins-base
+           gst-plugins-good
+           gst-plugins-bad
+           gtk+
+           libx11
+           libxtst))
     (home-page "https://wiki.gnome.org/Apps/Cheese")
     (synopsis "Webcam photo booth software for GNOME")
     (description
@@ -10506,49 +10769,50 @@ apply fancy special effects and lets you share the fun with others.")
 (define-public passwordsafe
   (package
     (name "passwordsafe")
-    (version "5.0")
+    (version "5.1")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://gitlab.gnome.org/World/PasswordSafe")
+             (url "https://gitlab.gnome.org/World/secrets")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1xh64bbg10gnfzlck5jvqy2zk6hbk9cyqgv85xc9kbdvs8n4lhgh"))))
+        (base32 "0kd43j6i017wdsqj6d5gnxhfv4ijnh3xahlw7md2gh51i8p682j6"))))
     (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/gnome-passwordsafe"))
-                   (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
-     `(("glib" ,glib)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gtk+" ,gtk+)
-       ("libhandy" ,libhandy)
-       ("libpwquality" ,libpwquality)
-       ("python-pygobject" ,python-pygobject)
-       ("python-pykeepass" ,python-pykeepass)))
+     (list #:glib-or-gtk? #t
+           #:meson meson-0.59
+           #: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 #$output
+                                              "/bin/gnome-passwordsafe"))
+                         (pylib (string-append
+                                 #$output "/lib/python"
+                                 #$(version-major+minor
+                                    (package-version (this-package-input "python")))
+                                 "/site-packages")))
+                     (wrap-program prog
+                       `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH") ,pylib))
+                       `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH"))))))))))
+    (native-inputs
+     (list desktop-file-utils
+           gettext-minimal
+           `(,glib "bin")
+           gobject-introspection
+           `(,gtk+ "bin")
+           pkg-config))
+    (inputs
+     (list glib
+           gsettings-desktop-schemas
+           gtk+
+           libhandy
+           libpwquality
+           python
+           python-pygobject
+           python-pykeepass))
     (home-page "https://gitlab.gnome.org/World/PasswordSafe")
     (synopsis "Password manager for the GNOME desktop")
     (description
@@ -10572,23 +10836,19 @@ and uncluttered interface for the management of password databases.")
          "19qg4xv0f9rkq34lragkmhii1llxsa87llbl28i759b0ks4f6sny"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("desktop-file-utils" ,desktop-file-utils)
-       ("intltool" ,intltool)
-       ("itstool" ,itstool)
-       ("pkg-config" ,pkg-config)
-       ("xmllint" ,libxml2)))
-    (inputs
-     `(("gtk+" ,gtk+)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base)
-       ("gst-plugins-good" ,gst-plugins-good)
-       ("iso-codes" ,iso-codes)
-       ("libbrasero-media3" ,brasero)
-       ("libcanberra" ,libcanberra)
-       ("libdiscid" ,libdiscid)
-       ("libmusicbrainz" ,libmusicbrainz)
-       ("neon" ,neon)))
+     (list desktop-file-utils intltool itstool pkg-config libxml2))
+    (inputs
+     (list gtk+
+           gsettings-desktop-schemas
+           gstreamer
+           gst-plugins-base
+           gst-plugins-good
+           iso-codes
+           brasero
+           libcanberra
+           libdiscid
+           libmusicbrainz
+           neon))
     (home-page "https://wiki.gnome.org/Apps/SoundJuicer")
     (synopsis "Audio music cd ripper")
     (description "Sound Juicer extracts audio from compact discs and convert it
@@ -10639,23 +10899,19 @@ mp3, Ogg Vorbis and FLAC")
        ("pkg-config" ,pkg-config)
        ("glib:bin" ,glib "bin")))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("python" ,python)
-       ("python-pygobject" ,python-pygobject)
-       ("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base)))
+     (list gtk+ python python-pygobject gstreamer gst-plugins-base))
     (home-page "https://soundconverter.org/")
     (synopsis "Convert between audio formats with a graphical interface")
     (description
      "SoundConverter supports converting between many audio formats including
 Opus, Ogg Vorbis, FLAC and more.  It supports parallel conversion, and
-configurable file renaming. ")
+configurable file renaming.")
     (license license:gpl3)))
 
 (define-public workrave
   (package
     (name "workrave")
-    (version "1.10.43")
+    (version "1.10.48")
     (source
      (origin
        (method git-fetch)
@@ -10666,22 +10922,22 @@ configurable file renaming. ")
                                          version)))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1baa9qjzd4b3q1zy5vhvyrx0hyz17mk237373ca48647897kw4cr"))))
+        (base32 "0qcknxylk9mr0xzszsd1rkgh2zpnix20m998dfclkm9x8zh9pvyr"))))
     (build-system glib-or-gtk-build-system)
     (arguments
      ;; The only tests are maintainer tests (in po/), which fail.
      `(#:tests? #f))
-    (inputs `(("glib" ,glib)
-              ("gtk+" ,gtk+)
-              ("gdk-pixbuf" ,gdk-pixbuf)
-              ("gtkmm" ,gtkmm)
-              ("glibmm" ,glibmm)
-              ("libx11" ,libx11)
-              ("libxtst" ,libxtst)
-              ("dconf" ,dconf)
-              ("libice" ,libice)
-              ("libsm" ,libsm)
-              ("libxscrnsaver" ,libxscrnsaver)))
+    (inputs (list glib
+                  gtk+
+                  gdk-pixbuf
+                  gtkmm-3
+                  glibmm
+                  libx11
+                  libxtst
+                  dconf
+                  libice
+                  libsm
+                  libxscrnsaver))
     (native-inputs `(("boost" ,boost)
                      ("pkg-config" ,pkg-config)
                      ("gettext" ,gettext-minimal)
@@ -10764,15 +11020,12 @@ hexadecimal or ASCII.  It is useful for editing binary files in general.")
              (setenv "DISPLAY" ":1")
              #t)))))
     (native-inputs
-     `(("glib" ,glib "bin")             ; glib-compile-resources
-       ("pkg-config" ,pkg-config)
-       ;; For tests.
-       ("xorg-server" ,xorg-server-for-tests)))
+     (list `(,glib "bin") ; glib-compile-resources
+           pkg-config
+           ;; For tests.
+           xorg-server-for-tests))
     (inputs
-     `(("glib" ,glib)
-       ("gobject-introspection" ,gobject-introspection)
-       ("gtk+" ,gtk+)
-       ("vala" ,vala)))
+     (list glib gobject-introspection gtk+ vala))
     (home-page "https://gitlab.gnome.org/GNOME/libdazzle")
     (synopsis "Companion library to GObject and Gtk+")
     (description "The libdazzle library is a companion library to GObject and
@@ -10785,7 +11038,7 @@ generic enough to work for everyone.")
 (define-public evolution
   (package
     (name "evolution")
-    (version "3.34.2")
+    (version "3.42.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/evolution/"
@@ -10793,8 +11046,7 @@ generic enough to work for everyone.")
                                   "evolution-" version ".tar.xz"))
               (sha256
                (base32
-                "164vy8h432pjglafn8y2ms4gsvk3kbgc63h5qp0mk5dv4smsp29c"))
-              (patches (search-patches "evolution-CVE-2020-11879.patch"))))
+                "0igfzapdvgfx2gnpwfkjfkn7l5j186wk88ni39vqas1sl7ijlls6"))))
     (build-system cmake-build-system)
     (arguments
      `(#:imported-modules (,@%cmake-build-system-modules
@@ -10816,17 +11068,14 @@ generic enough to work for everyone.")
              (substitute* "src/modules/alarm-notify/CMakeLists.txt"
                (("\\$\\{edsuimoduledir\\}")
                 (string-append (assoc-ref outputs "out")
-                               "/lib/evolution-data-server/ui-modules")))
-             #t))
+                               "/lib/evolution-data-server/ui-modules")))))
          (add-after 'install 'glib-or-gtk-compile-schemas
            (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-compile-schemas))
          (add-after 'install 'glib-or-gtk-wrap
            (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap)))))
     (native-inputs
-     `(("glib" ,glib "bin")             ; glib-mkenums
-       ("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-       ("itstool" ,itstool)))
+     (list `(,glib "bin") ; glib-mkenums
+           pkg-config intltool itstool))
     (inputs
      `(("enchant" ,enchant)
        ("evolution-data-server" ,evolution-data-server) ; must be the same version
@@ -10842,7 +11091,7 @@ generic enough to work for everyone.")
        ("libsoup" ,libsoup)
        ("nss" ,nss)
        ("openldap" ,openldap)
-       ("webkitgtk" ,webkitgtk)
+       ("webkitgtk" ,webkitgtk-with-libsoup2) ; because of evolution-data-server
        ("ytnef" ,ytnef)))
     (home-page "https://gitlab.gnome.org/GNOME/evolution")
     (synopsis "Manage your email, contacts and schedule")
@@ -10857,7 +11106,7 @@ functionality.")
 (define-public gthumb
   (package
     (name "gthumb")
-    (version "3.10.3")
+    (version "3.12.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/gthumb/"
@@ -10865,7 +11114,7 @@ functionality.")
                                   "gthumb-" version ".tar.xz"))
               (sha256
                (base32
-                "04n2sgasc03kiczyzkq362pjilj12hq2r5qj07lynqr9rivkzdys"))))
+                "0grqiq6v26z8avl7mj24xy4i9bl1niwpqhqw6rblprl40c1zrvrx"))))
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
@@ -10878,23 +11127,27 @@ functionality.")
                             (assoc-ref %outputs "out")
                             "/lib/gthumb/extensions"))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
+     `(("desktop-file-utils" ,desktop-file-utils) ; for update-desktop-database
        ("glib:bin" ,glib "bin")                   ; for glib-compile-resources
        ("gtk+:bin" ,gtk+ "bin")                   ; for gtk-update-icon-cache
-       ("desktop-file-utils" ,desktop-file-utils) ; for update-desktop-database
        ("intltool" ,intltool)
-       ("itstool" ,itstool)))
+       ("itstool" ,itstool)
+       ("pkg-config" ,pkg-config)))
     (inputs
-     `(("exiv2" ,exiv2)
-       ("gtk" ,gtk+)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gstreamer" ,gstreamer)
-       ("clutter" ,clutter)
+     `(("clutter" ,clutter)
        ("clutter-gst" ,clutter-gst)
        ("clutter-gtk" ,clutter-gtk)
+       ("colord" ,colord)
+       ("exiv2" ,exiv2)
+       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
+       ("gstreamer" ,gstreamer)
+       ("gtk" ,gtk+)
+       ("libheif" ,libheif)
        ("libjpeg" ,libjpeg-turbo)
+       ("libraw" ,libraw)
+       ("librsvg" ,librsvg)
        ("libtiff" ,libtiff)
-       ("libraw" ,libraw)))
+       ("libwebp" ,libwebp)))
     (home-page "https://wiki.gnome.org/Apps/Gthumb")
     (synopsis "GNOME image viewer and browser")
     (description "GThumb is an image viewer, browser, organizer, editor and
@@ -10935,7 +11188,7 @@ advanced image management tool")
        ("python-pygobject" ,python-pygobject)
        ("vte" ,vte)))
     (propagated-inputs
-     `(("python-configobj" ,python-configobj)))
+     (list python-configobj))
     (arguments
      ;; One test out of 28 fails due to dbus-python and python-notify; skip
      ;; tests.
@@ -10952,8 +11205,7 @@ advanced image management tool")
              ;; python-dbus cannot be found but it's really there.  See
              ;; https://github.com/SpotlightKid/jack-select/issues/2
              (substitute* "setup.py"
-               (("'dbus-python',") ""))
-             #t))
+               (("'dbus-python',") ""))))
          (add-after 'install 'wrap-program
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((prog (string-append (assoc-ref outputs "out")
@@ -10964,9 +11216,8 @@ advanced image management tool")
                                            (package-version python))
                                          "/site-packages")))
                (wrap-program prog
-                 `("PYTHONPATH" = (,(getenv "PYTHONPATH") ,pylib))
-                 `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH"))))
-               #t)))
+                 `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH") ,pylib))
+                 `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH")))))))
          (add-after 'wrap-program 'glib-or-gtk-wrap
            (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap)))))
     (home-page "https://gnome-terminator.org/")
@@ -10979,7 +11230,7 @@ tabs, and it supports drag and drop re-ordering of terminals.")
 (define-public libhandy
   (package
     (name "libhandy")
-    (version "1.2.2")
+    (version "1.5.0")
     (source
      (origin
        (method git-fetch)
@@ -10988,14 +11239,26 @@ tabs, and it supports drag and drop re-ordering of terminals.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0345x7gif6yjm95y62lww71lj84wfwsr2p32r3iww8shavb8scyk"))))
+        (base32 "19gl0xxybraw2iyn6cdi9w7nps825lb2bhav7d2x51wla0lq3kdc"))))
     (build-system meson-build-system)
     (arguments
      `(#:configure-flags
        '("-Dglade_catalog=enabled"
-         "-Dgtk_doc=true")
+         ;; XXX: Generating the documentation fails because the
+         ;; libhandy.devhelp2 document cannot be created. This seems to be
+         ;; caused by a problem during the XSL transformation.
+         "-Dgtk_doc=false")
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'patch-docbook-xml
+           (lambda* (#:key inputs #:allow-other-keys)
+             (for-each
+              (lambda (file)
+                (substitute* file
+                  (("http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd")
+                   (search-input-file inputs
+                                      "/xml/dtd/docbook/docbookx.dtd"))))
+              (find-files "doc" "\\.xml"))))
          (add-before 'check 'pre-check
            (lambda _
              ;; Tests require a running X server.
@@ -11003,13 +11266,15 @@ tabs, and it supports drag and drop re-ordering of terminals.")
              (setenv "DISPLAY" ":1")
              #t)))))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("glade" ,glade3)
-       ("libxml2" ,libxml2)))
+     (list gtk+ glade3))
     (native-inputs
      `(("glib:bin" ,glib "bin")
        ("gobject-introspection" ,gobject-introspection) ; for g-ir-scanner
        ("vala" ,vala)
+       ("libxml2" ,libxml2)
+       ("libxslt" ,libxslt)
+       ("docbook-xsl" ,docbook-xsl)
+       ("docbook-xml" ,docbook-xml-4.3)
        ("gtk-doc" ,gtk-doc/stable)
        ("pkg-config" ,pkg-config)
        ("gettext" ,gettext-minimal)
@@ -11045,7 +11310,7 @@ for usage on small and big screens.")
 (define-public libgit2-glib
   (package
     (name "libgit2-glib")
-    (version "0.99.0.1")
+    (version "1.0.0.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
@@ -11053,21 +11318,20 @@ for usage on small and big screens.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1pmrcnsa7qdda73c3dxf47733mwprmj5ljpw3acxbj6r8k27anp0"))))
+                "0mrb21cgqmbhbxqxwx76yry1ifqj1k4vy6455n6s034m6rlms2j6"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("glib:bin" ,glib "bin") ;; For glib-mkenums
-       ("gobject-introspection" ,gobject-introspection)
-       ("pkg-config" ,pkg-config)
-       ("python-pygobject" ,python-pygobject)
-       ("python-wrapper" ,python-wrapper)
-       ("vala" ,vala)))
+     (list `(,glib "bin") ;; For glib-mkenums
+           gobject-introspection
+           pkg-config
+           python-pygobject
+           python-wrapper
+           vala))
     (inputs
-     `(("glib" ,glib)
-       ("libssh2" ,libssh2)))
+     (list glib libssh2))
     (propagated-inputs
-     `(;; In Requires of libgit2-glib.pc.
-       ("libgit2" ,libgit2)))
+     (list ;; In Requires of libgit2-glib.pc.
+           libgit2))
     (synopsis "GLib wrapper around the libgit2 Git access library")
     (description "libgit2-glib is a GLib wrapper library around the libgit2 Git
 access library.  It only implements the core plumbing functions, not really the
@@ -11104,6 +11368,19 @@ higher level porcelain stuff.")
              (substitute* "tests/libgitg/test-commit.vala"
                (("/bin/bash") (which "bash")))
              #t))
+         ;; XXX: Remove upon next version bump
+         (add-after 'unpack 'harden
+           (lambda _
+             ;; See <https://gitlab.gnome.org/GNOME/gitg/-/issues/337>
+             (substitute* "libgitg/gitg-date.vala"
+               (("(val\|tzs) == null" all val)
+                (string-append val " == null || " val " == \"\""))
+               (("(val\|tzs) != null" all val)
+                (string-append val " != null && " val " != \"\"")))
+             ;; See <https://gitlab.gnome.org/GNOME/gitg/-/merge_requests/159>
+             (substitute* "gitg/gitg-action-support.vala"
+               (("stash_if_needed\\((.*), Gitg.Ref head" all other)
+                (string-append "stash_if_needed(" other ", Gitg.Ref? head")))))
          (add-after 'glib-or-gtk-wrap 'wrap-typelib
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((prog (string-append (assoc-ref outputs "out")
@@ -11112,19 +11389,19 @@ higher level porcelain stuff.")
                  `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH"))))
                #t))))))
     (inputs
-     `(("glib" ,glib)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gtk+" ,gtk+)
-       ("gtkspell3" ,gtkspell3)
-       ("gtksourceview" ,gtksourceview-3)
-       ("json-glib" ,json-glib)
-       ("libdazzle" ,libdazzle)
-       ("libgee" ,libgee)
-       ("libgit2-glib" ,libgit2-glib)
-       ("libpeas" ,libpeas)
-       ("libsecret" ,libsecret)
-       ("libsoup" ,libsoup)
-       ("libxml2" ,libxml2)))
+     (list glib
+           gsettings-desktop-schemas
+           gtk+
+           gtkspell3
+           gtksourceview-3
+           json-glib
+           libdazzle
+           libgee
+           libgit2-glib
+           libpeas
+           libsecret
+           libsoup-minimal-2
+           libxml2))
     (native-inputs
      `(("glib:bin" ,glib "bin")
        ("gtk+:bin" ,gtk+ "bin")
@@ -11157,6 +11434,13 @@ repository and commit your work.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
+         ;; The 'config.sub' is too old to recognise aarch64.
+         ,@(if (and=> (%current-target-system) target-aarch64?)
+               `((add-after 'unpack 'replace-config.sub
+                   (lambda _
+                     (delete-file "config.sub")
+                     (symlink (which "config.sub") "config.sub"))))
+               '())
          (add-after 'unpack 'remove-deprecated-macro
            (lambda _
              (substitute* '("server/gam_node.c"
@@ -11164,12 +11448,38 @@ repository and commit your work.")
                             "server/gam_node.h"
                             "server/gam_subscription.c")
                (("G_CONST_RETURN") "const"))
-             #t)))))
-    (inputs
-     `(("glib" ,glib)))
+             #t))
+         ;; The configure script runs a test program unconditionally,
+         ;; without an option to manually set the test result.
+         ;; Override this test anyway.
+         ,@(if (%current-target-system)
+               `((add-after 'bootstrap 'set-have-abstract-sockets
+                   (lambda _
+                     (define in-abstract-sockets-test? #f)
+                     (substitute* "configure"
+                       (("^#### Abstract sockets\n$")
+                        (set! in-abstract-sockets-test? #t)
+                        "#### Abstract sockets\n")
+                       (("^have_abstract_sockets=no\n$")
+                        (set! in-abstract-sockets-test? #f)
+                        ;; ‘Abstract sockets’ appear to be Linux-only.
+                        (string-append "have_abstract_sockets="
+                                       ,(if (target-linux?)
+                                            "yes"
+                                            "no")
+                                       "\nif false; then\nif false; then :\n"))
+                       (("^(.*\n)$" line)
+                        (if in-abstract-sockets-test?
+                            "" ; delete
+                            line))))))
+               '()))))
+    (inputs
+     (list glib))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     `(("pkg-config" ,pkg-config)
+       ,@(if (and=> (%current-target-system) target-aarch64?)
+             `(("config" ,config))
+             '())))
     (home-page "https://people.gnome.org/~veillard/gamin/")
     (synopsis "File alteration monitor")
     (description
@@ -11181,19 +11491,19 @@ library which detects when a file or a directory has been modified.")
 (define-public gnome-mahjongg
   (package
     (name "gnome-mahjongg")
-    (version "3.35.1")
+    (version "3.38.3")
     (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://gitlab.gnome.org/GNOME/gnome-mahjongg.git")
-                    (commit version)))
-              (file-name (git-file-name name version))
+              (method url-fetch)
+              (uri (string-append "mirror://gnome/sources/" name "/"
+                                  (version-major+minor version) "/" name "-"
+                                  version ".tar.xz"))
               (sha256
                (base32
-                "019a66a4m5w4kkb0sm6gxj0wi54n06zdxdlmyqw7h8kbakjizv7l"))))
+                "144ia3zn9rhwa1xbdkvsz6m0dsysl6mxvqw9bnrlh845hmyy9cfj"))))
     (build-system meson-build-system)
     (arguments
-     `(#:glib-or-gtk? #t))
+     `(#:meson ,meson-0.59
+       #:glib-or-gtk? #t))
     (native-inputs
      `(("appstream-glib" ,appstream-glib)
        ("gettext" ,gettext-minimal)
@@ -11203,14 +11513,12 @@ library which detects when a file or a directory has been modified.")
        ("pkg-config" ,pkg-config)
        ("vala" ,vala)))
     (propagated-inputs
-     `(("dconf" ,dconf)))
+     (list dconf))
     (inputs
-     `(("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("librsvg" ,librsvg)))
+     (list glib gtk+))
     (synopsis "Mahjongg tile-matching game")
     (description "GNOME Mahjongg is a game based on the classic Chinese
-tile-matching game Mahjong.  It features multiple board layouts, tile themes,
+tile-matching game Mahjongg.  It features multiple board layouts, tile themes,
 and a high score table.")
     (home-page "https://wiki.gnome.org/Apps/Mahjongg")
     (license license:gpl2+)))
@@ -11256,53 +11564,60 @@ index files needed for Adwaita to be used outside of GNOME.")
 (define-public gnote
   (package
     (name "gnote")
-    (version "3.38.1")
+    (version "41.2")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://gnome/sources/" name "/"
-                           (version-major+minor version)  "/"
+                           (version-major version)  "/"
                            "gnote-" version ".tar.xz"))
        (sha256
-        (base32 "1adjfjhmsm2d33999khjyzvli6kiz1jlzavn77jhd49kfzhxa9y4"))))
-    (build-system glib-or-gtk-build-system)
-    (native-inputs
-     `(("desktop-file-utils" ,desktop-file-utils)
-       ("glib:bin" ,glib "bin")
-       ("gobject-introspection" ,gobject-introspection)
-       ("intltool" ,intltool)
-       ("itstool" ,itstool)
-       ("pkg-config" ,pkg-config)
-       ("unittest-cpp" ,unittest-cpp))) ;FIXME: not found by pkg-config
-    (inputs
-     `(("glibmm" ,glibmm)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gspell" ,gspell)
-       ("gtk+" ,gtk+)
-       ("gtkmm" ,gtkmm)
-       ("libsecret" ,libsecret)
-       ("libuuid" ,util-linux "lib")
-       ("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)))
+        (base32 "0gs2j988rwfrxckb8qxlkyxnvqsv30q32myqish6hssfa51yzc11"))))
+    (build-system meson-build-system)
+    (arguments
+     `(#:glib-or-gtk? #t
+       #:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'skip-gtk-update-icon-cache
+                    ;; Don't create 'icon-theme.cache'.
+                    (lambda _
+                      (substitute* "post-install.py"
+                        (("gtk-update-icon-cache") "true")))))))
+    (native-inputs
+     (list desktop-file-utils
+           `(,glib "bin")
+           gobject-introspection
+           intltool
+           itstool
+           pkg-config
+           python))
+    (inputs
+     (list glibmm
+           gsettings-desktop-schemas
+           gspell
+           gtk+
+           gtkmm-3
+           libsecret
+           `(,util-linux "lib")
+           libxml2
+           libxslt))
     (synopsis "Note-taking application for the GNOME desktop")
-    (description
-     "Gnote is a note-taking application written for the GNOME desktop
-environment.")
+    (description "Gnote is a note-taking application written for the GNOME
+desktop environment.")
     (home-page "https://wiki.gnome.org/Apps/Gnote")
     (license license:gpl3+)))
 
 (define-public polari
   (package
     (name "polari")
-    (version "3.36.3")
+    (version "41.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/polari/"
-                                  (version-major+minor version)
+                                  (version-major version)
                                   "/polari-" version ".tar.xz"))
               (sha256
                (base32
-                "0fpmrvhd40yay051bzn4x3gsrzdv42nav0pm5ps0np8wk1z689jg"))))
+                "1ss0x8idwar1q9p9535kzqb8idy7k2r48vrbjiyccw03cs0mzc53"))))
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
@@ -11311,34 +11626,38 @@ environment.")
          (add-after 'unpack 'skip-gtk-update-icon-cache
            (lambda _
              (substitute* "meson/meson-postinstall.sh"
-               (("gtk-update-icon-cache") (which "true")))
-             #t))
+               (("gtk-update-icon-cache") (which "true")))))
+         (add-after 'install 'fix-desktop-file
+           ;; Hardcode launcher to be on the safe side
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (substitute* (string-append out "/share/applications/"
+                                           "org.gnome.Polari.desktop")
+                 (("Exec=.*") (string-append "Exec=" out "/bin/polari\n"))))))
          (add-after 'glib-or-gtk-wrap 'wrap-typelib
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((prog (string-append (assoc-ref outputs "out")
                                         "/bin/polari")))
                (wrap-program prog
-                 `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH"))))
-               #t))))))
+                 `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH"))))))))))
     (inputs
-     `(("glib" ,glib)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gspell" ,gspell)
-       ("gtk+" ,gtk+)
-       ("gjs" ,gjs)
-       ("libsecret" ,libsecret)
-       ("libsoup" ,libsoup)
-       ("telepathy-glib" ,telepathy-glib)
-       ("telepathy-logger" ,telepathy-logger)))
-    (native-inputs
-     `(("glib:bin" ,glib "bin")
-       ("gobject-introspection" ,gobject-introspection)
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)
-       ("yelp-tools" ,yelp-tools)))
+     (list glib
+           gsettings-desktop-schemas
+           gspell
+           gtk
+           gjs
+           libsecret
+           libsoup-minimal-2
+           telepathy-glib
+           telepathy-logger))
+    (native-inputs
+     (list `(,glib "bin")
+           gobject-introspection
+           intltool
+           pkg-config
+           yelp-tools))
     (propagated-inputs
-     `(("telepathy-idle" ,telepathy-idle)
-       ("telepathy-mission-control" ,telepathy-mission-control)))
+     (list telepathy-idle telepathy-mission-control))
     (synopsis "Simple IRC Client")
     (description
      "Polari is a simple Internet Relay Chat (IRC) client that is designed to
@@ -11349,49 +11668,55 @@ integrate seamlessly with the GNOME desktop.")
 (define-public gnome-boxes
   (package
     (name "gnome-boxes")
-    (version "3.36.6")
+    (version "41.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://gnome/sources/gnome-boxes/"
-                           (version-major+minor version) "/"
+                           (version-major version) "/"
                            "gnome-boxes-" version ".tar.xz"))
        (sha256
-        (base32 "0c3cw90xqqcpacc2z06ljs0gg8saxizfgjzg9alhpwgz3gl4c5pg"))))
+        (base32 "1wzhm8n485cqhbai4qshgrwl05ix881g8gjshilrj6vg8p1li79h"))
+       (patches
+        (search-patches "gnome-boxes-add-guix-logo.patch"))))
     (build-system meson-build-system)
     (arguments
-     '(#:glib-or-gtk? #t
+     `(#:glib-or-gtk? #t
        #:configure-flags (list "-Drdp=false"
                                (string-append "-Dc_link_args=-Wl,-rpath="
                                               (assoc-ref %outputs "out")
                                               "/lib/gnome-boxes"))))
     (native-inputs
-     `(("glib:bin" ,glib "bin")             ; for glib-compile-resources
-       ("gtk+:bin" ,gtk+ "bin")             ; for gtk-update-icon-cache
-       ("desktop-file-utils" ,desktop-file-utils) ; for update-desktop-database
-       ("itstool" ,itstool)
-       ("intltool" ,intltool)
-       ("vala" ,vala)
-       ("pkg-config" ,pkg-config)))
-    (inputs
-     `(("libarchive" ,libarchive)
-       ("glib-networking" ,glib-networking) ;for TLS support
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gtk" ,gtk+)
-       ("gtk-vnc" ,gtk-vnc)
-       ("libosinfo" ,libosinfo)
-       ("libsecret" ,libsecret)
-       ("libsoup" ,libsoup)
-       ("libusb" ,libusb)
-       ("libvirt" ,libvirt)
-       ("libvirt-glib" ,libvirt-glib)
-       ("libxml" ,libxml2)
-       ("spice-gtk" ,spice-gtk)
-       ("sparql-query" ,sparql-query)
-       ("vte" ,vte)
-       ("webkitgtk" ,webkitgtk)
-       ("tracker" ,tracker)
-       ("libgudev" ,libgudev)))
+     (list `(,glib "bin")               ;for glib-compile-resources
+           `(,gtk+ "bin")               ;for gtk-update-icon-cache
+           desktop-file-utils           ;for update-desktop-database
+           itstool
+           intltool
+           vala
+           pkg-config
+           python))
+    (inputs
+     (list libarchive
+           glib-networking              ;for TLS support
+           gsettings-desktop-schemas
+           gtk+
+           gtk-vnc
+           gtksourceview
+           json-glib
+           libhandy
+           libosinfo
+           libsecret
+           libsoup-minimal-2
+           libusb
+           libvirt
+           libvirt-glib
+           libxml2
+           spice-gtk
+           sparql-query
+           vte
+           webkitgtk-with-libsoup2      ;for webkit2gtk-4.0
+           tracker
+           libgudev))
     (home-page "https://wiki.gnome.org/Apps/Boxes")
     (synopsis "View, access, and manage remote and virtual systems")
     (description "GNOME Boxes is a simple application to view, access, and
@@ -11408,67 +11733,84 @@ these services on the Guix System.")
 (define-public geary
   (package
     (name "geary")
-    (version "3.34.1")
+    (version "40.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
-                    (url "https://gitlab.gnome.org/GNOME/geary")
-                    (commit version)))
+                    (url "https://gitlab.gnome.org/GNOME/geary.git")
+                    (commit (string-append "gnome-" version))))
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "01cc921kyh3zxz07biqbdzkjgmdcc36kwjyajm4y382a75cl5zg7"))
-              (patches (search-patches "geary-CVE-2020-24661.patch"))))
+                "04hvw86r8sczvjm1z3ls5y5y5h6nyfb648rjkfx05ib00mqq5v1x"))))
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
+       #:configure-flags
+       '("-Dprofile=release")
        #:phases (modify-phases %standard-phases
                   (add-after 'unpack 'disable-failing-tests
                     (lambda _
-                      (substitute* "test/meson.build"
-                        (("test\\('client-tests', geary_test_client_bin\\)")
-                         ""))
-                      #t))
+                      (substitute* "test/test-client.vala"
+                        (("client.add_suite\\(new Application.CertificateManagerTest\\(\\).suite\\);")
+                         ""))))
+                  (add-after 'unpack 'generate-vapis
+                    (lambda* (#:key inputs #:allow-other-keys)
+                      ;; It’s not possible to generate the GMime vapi, because
+                      ;; there’s custom metadata that gmime didn’t
+                      ;; install. Thus, the vapi should be built and installed
+                      ;; with gmime.
+                      (define gmime
+                        (assoc-ref inputs "gmime"))
+                      (copy-file (string-append gmime "/share/vala/vapi/gmime-3.0.vapi")
+                                 "bindings/vapi/gmime-3.0.vapi")))
                   (add-after 'unpack 'disable-postinstall-script
                     (lambda _
-                      (substitute* "meson.build"
-                        (("meson.add_install_script\\(\
-join_paths\\('build-aux', 'post_install.py'\\)\\)")
-                         ""))
-                      #t))
+                      (substitute* "build-aux/post_install.py"
+                        (("gtk-update-icon-cache")
+                         "true"))))
+                  (add-before 'check 'setup-home
+                    (lambda _
+                      ;; Tests require a writable HOME.
+                      (setenv "HOME" (getcwd))))
                   (add-before 'check 'setup-xvfb
                     (lambda _
                       (system "Xvfb :1 &")
-                      (setenv "DISPLAY" ":1")
-                      #t)))))
+                      (setenv "DISPLAY" ":1"))))))
     (inputs
      `(("enchant" ,enchant)
        ("folks" ,folks)
        ("gcr" ,gcr)
        ("glib" ,glib)
-       ("gmime" ,gmime-2.6)
+       ("gmime" ,gmime)
        ("gnome-online-accounts:lib"
         ,gnome-online-accounts "lib")
+       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
        ("gspell" ,gspell)
+       ("gsound" ,gsound)
        ("gtk+" ,gtk+)
        ("iso-codes" ,iso-codes)
        ("json-glib" ,json-glib)
        ("libcanberra" ,libcanberra)
        ("libgee" ,libgee)
-       ("libhandy" ,libhandy-0.0)
+       ("libhandy" ,libhandy)
        ("libpeas" ,libpeas)
        ("libsecret" ,libsecret)
+       ("libstemmer" ,libstemmer)
        ("libunwind" ,libunwind)
        ("sqlite" ,sqlite)
-       ("webkitgtk" ,webkitgtk)
+       ("webkitgtk" ,webkitgtk-with-libsoup2)
        ("ytnef" ,ytnef)))
     (native-inputs
      `(("appstream-glib" ,appstream-glib)
        ("cmake-minimal" ,cmake-minimal)
        ("desktop-file-utils" ,desktop-file-utils)
        ("gettext" ,gettext-minimal)
+       ("glib" ,glib)
        ("glib:bin" ,glib "bin")
+       ("gmime" ,gmime)
        ("gobject-introspection" ,gobject-introspection)
+       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
        ("itstool" ,itstool)
        ("libarchive" ,libarchive)
        ("libxml2" ,libxml2)
@@ -11516,9 +11858,9 @@ to.")
        ("itstool" ,itstool)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("librsvg" ,librsvg)
-       ("libxml2" ,libxml2)))
+     (list gtk+ librsvg libxml2))
+    (arguments
+     `(#:configure-flags '("CFLAGS=-fcommon")))
     (home-page "https://glabels.org/")
     (synopsis "Program for creating labels and business cards")
     (description
@@ -11527,11 +11869,10 @@ designed to work with various laser/ink-jet peel-off label and business
 card sheets that you’ll find at most office supply stores.")
     (license license:gpl3+)))
 
-;; Version 3.38.0 is out but requires tepl>=5 which requires glib>=2.64.
 (define-public gnome-latex
   (package
     (name "gnome-latex")
-    (version "3.36.0")
+    (version "3.38.0")
     (source
      (origin
        (method url-fetch)
@@ -11539,28 +11880,28 @@ card sheets that you’ll find at most office supply stores.")
                            (version-major+minor version)  "/"
                            "gnome-latex-" version ".tar.xz"))
        (sha256
-        (base32 "1869kr1zhcp04mzbi67lwgk497w840dbbc7427i9yh9b9s7j6mqn"))))
+        (base32 "0xqd49pgi82dygqnxj08i1v22b0vwwhx3zvdinhrx4jny339yam8"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("glib:bin" ,glib "bin")
-       ("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc/stable)
-       ("intltool" ,intltool)
-       ("itstool" ,itstool)
-       ("pkg-config" ,pkg-config)
-       ("vala" ,vala)))
-    (inputs
-     `(("amtk" ,amtk)
-       ("dconf" ,dconf)
-       ("glib" ,glib)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gspell" ,gspell)
-       ("gtk+" ,gtk+)
-       ("gtksourceview" ,gtksourceview)
-       ("libgee" ,libgee)
-       ("tepl" ,tepl)
-       ("uchardet" ,uchardet)))
+     (list gettext-minimal
+           `(,glib "bin")
+           gobject-introspection
+           gtk-doc/stable
+           intltool
+           itstool
+           pkg-config
+           vala))
+    (inputs
+     (list amtk
+           dconf
+           glib
+           gsettings-desktop-schemas
+           gspell
+           gtk+
+           gtksourceview
+           libgee
+           tepl-5
+           uchardet))
     (home-page "https://wiki.gnome.org/Apps/GNOME-LaTeX")
     (synopsis "LaTeX editor for the GNOME desktop")
     (description
@@ -11598,7 +11939,7 @@ and toolbars.")
                                            (package-version python))
                                          "/site-packages")))
                (wrap-program prog
-                 `("PYTHONPATH" = (,(getenv "PYTHONPATH") ,pylib))
+                 `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH") ,pylib))
                  `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH"))))
                #t))))))
     (native-inputs
@@ -11630,7 +11971,7 @@ GTK+.  It integrates well with the GNOME desktop environment.")
 (define-public apostrophe
   (package
     (name "apostrophe")
-    (version "2.4")
+    (version "2.5")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -11639,17 +11980,17 @@ GTK+.  It integrates well with the GNOME desktop environment.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1qzy3zhi18wf42m034s8kcmx9gl05j620x3hf6rnycq2fvy7g4gz"))))
+                "06yfiflmj3ip7ppcz41nb3xpgb5ggw5h74w0v87yaqqkq7qh31lp"))))
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
+       #:meson ,meson-0.59              ;fails with 0.60
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-meson
            (lambda _
              (substitute* "build-aux/meson_post_install.py"
-               (("gtk-update-icon-cache") "true"))
-             #t))
+               (("gtk-update-icon-cache") "true"))))
          (add-after 'glib-or-gtk-wrap 'python-and-gi-wrap
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((prog (string-append (assoc-ref outputs "out")
@@ -11657,43 +11998,46 @@ GTK+.  It integrates well with the GNOME desktop environment.")
                    (pylib (string-append (assoc-ref outputs "out")
                                          "/lib/python"
                                          ,(version-major+minor
-                                           (package-version python))
+                                           (package-version
+                                            (this-package-input "python")))
                                          "/site-packages")))
                (wrap-program prog
-                 `("PYTHONPATH" = (,(getenv "PYTHONPATH") ,pylib))
+                 `("PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH") ,pylib))
                  `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH")))
-                 `("PATH" prefix (,(string-append (assoc-ref inputs "pandoc")
-                                                  "/bin"))))
-               #t))))))
-    (inputs
-     `(("glib" ,glib)
-       ("gobject-introspection" ,gobject-introspection)
-       ("gspell" ,gspell)
-       ("gtk+" ,gtk+)
-       ("libhandy" ,libhandy)
-       ("pandoc" ,pandoc)
-       ("python-chardet" ,python-chardet)
-       ("python-levenshtein" ,python-levenshtein)
-       ("python-regex" ,python-regex)
-       ("python-pycairo" ,python-pycairo)
-       ("python-pygobject" ,python-pygobject)
-       ("python-pyenchant" ,python-pyenchant)
-       ("python-pypandoc" ,python-pypandoc)
-       ("webkitgtk" ,webkitgtk)))
-    (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("glib:bin" ,glib "bin")
-       ("pkg-config" ,pkg-config)))
+                 `("PATH" prefix (,(dirname
+                                    (search-input-file inputs
+                                                       "/bin/pandoc")))))))))))
+    (inputs
+     (list glib
+           gobject-introspection
+           gspell
+           gtk+
+           libhandy
+           pandoc
+           python
+           python-chardet
+           python-levenshtein
+           python-regex
+           python-pycairo
+           python-pygobject
+           python-pyenchant
+           python-pypandoc
+           webkitgtk))
+    (native-inputs
+     (list gettext-minimal
+           `(,glib "bin")
+           pkg-config
+           sassc))
     (home-page "https://gitlab.gnome.org/somas/apostrophe")
     (synopsis "Markdown editor written in Python with GTK+")
-    (description "Apostrophe is a GTK+ based distraction free Markdown editor.
+    (description "Apostrophe is a GTK+ based distraction-free Markdown editor.
 It uses pandoc as back-end for parsing Markdown.")
     (license license:gpl3)))
 
 (define-public libratbag
   (package
     (name "libratbag")
-    (version "0.14")
+    (version "0.16")
     (source
      (origin
        (method git-fetch)
@@ -11702,7 +12046,7 @@ It uses pandoc as back-end for parsing Markdown.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1fpwp2sj8mf98bqasq2h8qwgprxi7k3iw33gcfid3d1lbyiacw0x"))))
+        (base32 "0jjf6xc3a37icp5dvbxla3ai9is2ns31m0llbfq1bmb6dk8cd4n0"))))
     (build-system meson-build-system)
     (arguments
      `(#:configure-flags
@@ -11722,21 +12066,19 @@ It uses pandoc as back-end for parsing Markdown.")
                     (pygo (string-append
                            (assoc-ref inputs "python-pygobject") site))
                     (python-wrap
-                     `("PYTHONPATH" = (,evdev ,pygo))))
+                     `("GUIX_PYTHONPATH" = (,evdev ,pygo))))
                (wrap-program (string-append out "/bin/" "ratbagctl")
                  python-wrap)
                #t))))))
     (native-inputs
-     `(("check" ,check)
-       ("pkg-config" ,pkg-config)
-       ("swig" ,swig)
-       ("valgrind" ,valgrind)))
+     (list check pkg-config swig valgrind))
     (inputs
      `(("glib" ,glib)
        ("json-glib" ,json-glib)
        ("libevdev" ,libevdev)
        ("libsystemd" ,elogind)
        ("libunistring" ,libunistring)
+       ("python" ,python)
        ("python-evdev" ,python-evdev)
        ("python-pygobject" ,python-pygobject)
        ("udev" ,eudev)))
@@ -11760,7 +12102,7 @@ your operating-system definition:
 (define-public piper
   (package
     (name "piper")
-    (version "0.5.1")
+    (version "0.6")
     (source
      (origin
        (method git-fetch)
@@ -11768,24 +12110,25 @@ your operating-system definition:
              (url "https://github.com/libratbag/piper")
              (commit version)))
        (sha256
-        (base32 "1nfjnsiwg2rs6gkjsxzhr2708i6di149dgwq3cf6l12rxqpb8arj"))
+        (base32 "02x4d4n0078slj2pl0rvgayrrxvna6y6vj8fxfamvazsh5xyfzwk"))
        (file-name (git-file-name name version))))
     (build-system meson-build-system)
     (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("glib:bin" ,glib "bin")
-       ("gobject-introspection" ,gobject-introspection)
-       ("pkg-config" ,pkg-config)
-       ("python-flake8" ,python-flake8)))
-    (inputs
-     `(("adwaita-icon-theme" ,adwaita-icon-theme)
-       ("gtk" ,gtk+)
-       ("gtk:bin" ,gtk+ "bin")
-       ("librsvg" ,librsvg)
-       ("python-evdev" ,python-evdev)
-       ("python-lxml" ,python-lxml)
-       ("python-pycairo" ,python-pycairo)
-       ("python-pygobject" ,python-pygobject)))
+     (list gettext-minimal
+           `(,glib "bin")
+           gobject-introspection
+           pkg-config
+           python-flake8))
+    (inputs
+     (list adwaita-icon-theme
+           gtk+
+           `(,gtk+ "bin")
+           libratbag
+           python
+           python-evdev
+           python-lxml
+           python-pycairo
+           python-pygobject))
     (arguments
      `(#:imported-modules ((guix build python-build-system)
                            ,@%meson-build-system-modules)
@@ -11798,8 +12141,7 @@ your operating-system definition:
          (add-after 'unpack 'dont-update-gtk-icon-cache
            (lambda _
              (substitute* "meson.build"
-               (("meson.add_install_script('meson_install.sh')") ""))
-             #t))
+               (("meson.add_install_script('meson_install.sh')") ""))))
          ;; TODO: Switch to wrap-script when it is fixed.
          (add-after 'install 'wrap-python
            (assoc-ref python:%standard-phases 'wrap))
@@ -11807,8 +12149,7 @@ your operating-system definition:
            (lambda* (#:key outputs #:allow-other-keys)
              (wrap-program
                  (string-append (assoc-ref outputs "out" )"/bin/piper")
-               `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH"))))
-             #t)))))
+               `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH")))))))))
     (home-page "https://github.com/libratbag/piper/")
     (synopsis "Configure bindings and LEDs on gaming mice")
     (description "Piper is a GTK+ application for configuring gaming mice with
@@ -11824,7 +12165,7 @@ provided there is a DBus service present:
 (define-public parlatype
   (package
     (name "parlatype")
-    (version "2.1")
+    (version "3.1")
     (source
      (origin
        (method git-fetch)
@@ -11833,13 +12174,17 @@ provided there is a DBus service present:
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1c15ja0rwz3jj8bnqdq0nmqka39iwrhy8krdv2a2x8nl4shfpmv0"))))
+        (base32 "0cqrzbkyksfsm57riirmjkwf2nf2dgl1xpps1wvqxpij475qcb9b"))))
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
        #:tests? #f                      ;require internet access
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'skip-gtk-update-icon-cache
+           (lambda _
+             (substitute* "data/meson_post_install.py"
+               (("gtk-update-icon-cache") "true"))))
          (add-after 'install 'wrap-parlatype
            ;; Add gstreamer plugin provided in this package to system's
            ;; plugins.
@@ -11850,24 +12195,24 @@ provided there is a DBus service present:
                                       ":"
                                       (getenv "GST_PLUGIN_SYSTEM_PATH"))))
                (wrap-program (string-append out "/bin/parlatype")
-                 `("GST_PLUGIN_SYSTEM_PATH" ":" = (,gst-plugin-path))))
-             #t)))))
-    (native-inputs
-     `(("appstream-glib" ,appstream-glib)
-       ("desktop-file-utils" ,desktop-file-utils) ;for desktop-file-validate
-       ("gettext" ,gettext-minimal)
-       ("glib" ,glib "bin")             ;for glib-compile-resources
-       ("pkg-config" ,pkg-config)
-       ("yelp-tools" ,yelp-tools)))
-    (inputs
-     `(("gst-plugins-base" ,gst-plugins-base)
-       ("gst-plugins-good" ,gst-plugins-good)
-       ("gstreamer" ,gstreamer)
-       ("gtk+" ,gtk+)
-       ("pocketsphinx" ,pocketsphinx)
-       ("pulseaudio" ,pulseaudio)
-       ("sphinxbase" ,sphinxbase)))
-    (home-page "http://gkarsay.github.io/parlatype/")
+                 `("GST_PLUGIN_SYSTEM_PATH" ":" = (,gst-plugin-path)))))))))
+    (native-inputs
+     (list appstream-glib
+           desktop-file-utils           ;for desktop-file-validate
+           gettext-minimal
+           `(,glib "bin")               ;for glib-compile-resources
+           pkg-config
+           yelp-tools))
+    (inputs
+     (list gst-plugins-base
+           gst-plugins-good
+           gstreamer
+           gtk+
+           iso-codes
+           pocketsphinx
+           pulseaudio
+           sphinxbase))
+    (home-page "https://www.parlatype.org")
     (synopsis "GNOME audio player for transcription")
     (description "Parlatype is an audio player for the GNOME desktop
 environment.  Its main purpose is the manual transcription of spoken
@@ -11888,13 +12233,11 @@ audio files.")
                 "0j05x4xv2cp3cbmp30m68z8g4rdw7b030ip4wszyfj9ya15v5kni"))))
     (build-system meson-build-system)
     (inputs
-     `(("json-glib" ,json-glib)
-       ("glib" ,glib)))
+     (list json-glib glib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("glib:bin" ,glib "bin") ; for glib-genmarshal, etc.
-       ("gobject-introspection" ,gobject-introspection)
-       ("vala" ,vala)))
+     (list pkg-config
+           `(,glib "bin") ; for glib-genmarshal, etc.
+           gobject-introspection vala))
     (home-page "https://gitlab.gnome.org/GNOME/jsonrpc-glib")
     (synopsis "JSON-RPC library for GLib")
     (description "Jsonrpc-GLib is a library to communicate with JSON-RPC based
@@ -11919,17 +12262,11 @@ host to avoid parser overhead and memory-allocator fragmentation.")
                 "1wbkzxnqjydfgjvp7vz4ghczcz740zcb1yn90cb6gb5md4n6qx2y"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("glib:bin" ,glib "bin")
-       ("gobject-introspection" ,gobject-introspection)
-       ("pkg-config" ,pkg-config)
-       ("vala" ,vala)))
+     (list `(,glib "bin") gobject-introspection pkg-config vala))
     (inputs
-     `(("dbus" ,dbus)
-       ("gsound" ,gsound)
-       ("json-glib" ,json-glib)
-       ("libgudev" ,libgudev)))
+     (list dbus gsound json-glib libgudev))
     (propagated-inputs
-     `(("glib" ,glib))) ; in Requires of libfeedback-0.0.pc
+     (list glib)) ; in Requires of libfeedback-0.0.pc
     (synopsis "Haptic/visual/audio feedback via DBus")
     (description "Feedbackd provides a DBus daemon to act on events to provide
 haptic, visual and audio feedback.  It offers the libfeedbackd library and
@@ -11941,7 +12278,7 @@ GObject introspection bindings.")
 (define-public sysprof
   (package
     (name "sysprof")
-    (version "3.36.0")
+    (version "3.42.1")
     (source
      (origin
        (method url-fetch)
@@ -11949,7 +12286,7 @@ GObject introspection bindings.")
                            (version-major+minor version) "/"
                            "sysprof-" version ".tar.xz"))
        (sha256
-        (base32 "024i0gzqnm79rpr4gqxdvcj6gvf82xdlcp2p1k9ikcppmi6xnw46"))))
+        (base32 "0090986ar3lz9m9fy7l5y9ibzzmgsx54cm6gp8ggsxgf0habi5hp"))))
     (build-system meson-build-system)
     (arguments
      `(#:configure-flags
@@ -11965,11 +12302,10 @@ GObject introspection bindings.")
                (("gtk-update-icon-cache") "true")
                (("update-desktop-database") "true"))
              #t)))))
+    (propagated-inputs
+     (list polkit))
     (inputs
-     `(("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("libdazzle" ,libdazzle)
-       ("polkit" ,polkit)))
+     (list glib gtk+ json-glib libdazzle polkit))
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("glib:bin" ,glib "bin") ; for gdbus-codegen, etc.
@@ -11992,86 +12328,90 @@ libraries.  Applications do not need to be recompiled--or even restarted.")
 (define-public gnome-builder
   (package
     (name "gnome-builder")
-    (version "3.36.1")
+    (version "41.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
-                                  (version-major+minor version) "/"
+                                  (version-major version) "/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "17pvmd5jypar8dkr6w56hvf7jnq4l1wih2wwgkrv7sblr7rkkar2"))))
+                "04p031i999dccbnlbysmr6f93x7dji7b559j6yhdsqbqgxb7ncan"))
+              (patches
+               (search-patches "gnome-builder-update-libportal.patch"))))
     (build-system meson-build-system)
     (arguments
-     `(#:configure-flags (list "-Dnetwork_tests=false"
-                               ;; TODO: Enable all plugins...
-                               "-Dplugin_clang=false"
-                               "-Dplugin_flatpak=false"
-                               "-Dplugin_glade=false"
-                               ;; XXX: This one has been shown not to work in
-                               ;;      <https://issues.guix.gnu.org/45272>
-                               "-Dplugin_jedi=false"
-                               ;; ... except this one.
-                               "-Dplugin_update_manager=false")
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'patch-meson
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "build-aux/meson/post_install.py"
-               (("gtk-update-icon-cache") "true")
-               (("update-desktop-database") "true"))
-             (substitute* "src/libide/meson.build"
-               (("/usr/lib")
-                (string-append (assoc-ref inputs "python-pygobject")
-                               "/lib")))
-             #t))
-         (add-after 'configure 'fix-ninja
-           (lambda _
-             ;; #43296: meson(?) incorrectly assumes we want to link
-             ;;         this PIE against a static libselinux.
-             (substitute* "build.ninja"
-               (("libselinux\\.a") "libselinux.so"))
-             #t))
-         (add-before 'check 'pre-check
-           (lambda _
-             (system "Xvfb :1 &")
-             (setenv "DISPLAY" ":1")
-             #t)))))
-    (inputs
-     `(("devhelp" ,devhelp)
-       ("gspell" ,gspell)
-       ("gtk+" ,gtk+)
-       ("json-glib" ,json-glib)
-       ("jsonrpc-glib" ,jsonrpc-glib)
-       ("libdazzle" ,libdazzle)
-       ("libgit2-glib" ,libgit2-glib)
-       ("libpeas" ,libpeas)
-       ("python-pygobject" ,python-pygobject)
-       ("sysprof" ,sysprof)
-       ("template-glib" ,template-glib)
-       ("vte" ,vte)
-       ("webkitgtk" ,webkitgtk)))
-    (propagated-inputs
-     `(("gtksourceview" ,gtksourceview)))         ;needed for settings
-    (native-inputs
-     `(("desktop-file-utils" ,desktop-file-utils) ;for desktop-file-validate
-       ("glib:bin" ,glib "bin")
-       ("gettext" ,gettext-minimal)
-       ("pkg-config" ,pkg-config)
-       ("vala" ,vala)
-       ("xorg-server" ,xorg-server-for-tests)))
+     (list
+      #:glib-or-gtk? #t ;To wrap binaries and compile schemas
+      #:configure-flags
+      #~(list "-Dnetwork_tests=false"
+              ;; TODO: Enable all plugins...
+              ;; Flatpak plugin wants libsoup 2
+              "-Dplugin_flatpak=false"
+              ;; ... except this one.
+              "-Dplugin_update_manager=false")
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'patch-meson
+            (lambda* (#:key inputs #:allow-other-keys)
+              (substitute* "build-aux/meson/post_install.py"
+                (("gtk-update-icon-cache") "true")
+                (("update-desktop-database") "true"))
+              (substitute* "src/libide/meson.build"
+                (("/usr/lib") (string-append (assoc-ref inputs
+                                                        "python-pygobject")
+                                             "/lib")))))
+          (add-after 'configure 'fix-ninja
+            (lambda _
+              ;; #43296: meson(?) incorrectly assumes we want to link
+              ;; this PIE against a static libselinux.
+              (substitute* "build.ninja"
+                (("libselinux\\.a") "libselinux.so"))))
+          (add-before 'check 'pre-check
+            (lambda _
+              (system "Xvfb :1 &")
+              (setenv "DISPLAY" ":1"))))))
+    (inputs (list cmark
+                  clang
+                  devhelp-with-libsoup2
+                  glade3
+                  gspell
+                  gtk+
+                  json-glib
+                  jsonrpc-glib
+                  libdazzle
+                  libgit2-glib
+                  libpeas
+                  libportal
+                  libsoup-minimal-2
+                  llvm
+                  python
+                  python-pygobject
+                  sysprof
+                  template-glib
+                  vte
+                  webkitgtk-with-libsoup2))
+    (propagated-inputs (list gtksourceview)) ; needed for settings
+    (native-inputs (list desktop-file-utils  ; for desktop-file-validate
+                         `(,glib "bin")
+                         gettext-minimal
+                         pkg-config
+                         python              ; for meson scripts
+                         vala
+                         xorg-server-for-tests))
     (home-page "https://wiki.gnome.org/Apps/Builder")
     (synopsis "Toolsmith for GNOME-based applications")
-    (description "Builder aims to be an integrated development
-environment (IDE) for writing GNOME-based software.  It features fuzzy search,
-auto-completion, a mini code map, documentation browsing, Git integration, an
-integrated profiler via Sysprof, debugging support, and more.")
+    (description
+     "Builder aims to be an integrated development environment (IDE) for
+writing GNOME-based software.  It features fuzzy search, auto-completion,
+a mini code map, documentation browsing, Git integration, an integrated
+profiler via Sysprof, debugging support, and more.")
     (license license:gpl3+)))
 
 (define-public komikku
   (package
     (name "komikku")
-    (version "0.34.0")
+    (version "0.36.1")
     (source
      (origin
        (method git-fetch)
@@ -12081,7 +12421,7 @@ integrated profiler via Sysprof, debugging support, and more.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0cphy0m1zbcfrn75982b0flvry605a9x15i93sbqcbhqjvp6y9wm"))))
+         "0iqis1b248gj1jb1yzw5dcs99bm078hixg9ir0vb961ymwzv2mmc"))))
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
@@ -12104,35 +12444,36 @@ integrated profiler via Sysprof, debugging support, and more.")
             (let ((prog (string-append (assoc-ref outputs "out")
                                        "/bin/komikku")))
               (wrap-program prog
-                `("PYTHONPATH" = (,(getenv "PYTHONPATH")))
+                `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH")))
                 `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH"))))
               #t))))))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("libhandy" ,libhandy)
-       ("libnotify" ,libnotify)
-       ("libsecret" ,libsecret)
-       ("python-beautifulsoup4" ,python-beautifulsoup4)
-       ("python-brotli" ,python-brotli)
-       ("python-cloudscraper" ,python-cloudscraper)
-       ("python-dateparser" ,python-dateparser)
-       ("python-keyring" ,python-keyring)
-       ("python-lxml" ,python-lxml)
-       ("python-magic" ,python-magic)
-       ("python-natsort" ,python-natsort)
-       ("python-pillow" ,python-pillow)
-       ("python-pure-protobuf" ,python-pure-protobuf)
-       ("python-pycairo" ,python-pycairo)
-       ("python-pygobject" ,python-pygobject)
-       ("python-requests" ,python-requests)
-       ("python-unidecode" ,python-unidecode)
-       ("webkitgtk" ,webkitgtk)))
-    (native-inputs
-     `(("desktop-file-utils" ,desktop-file-utils)
-       ("gettext" ,gettext-minimal)
-       ("glib:bin" ,glib "bin")
-       ("gobject-introspection" ,gobject-introspection)
-       ("pkg-config" ,pkg-config)))
+     (list gtk+
+           libhandy
+           libnotify
+           libsecret
+           python
+           python-beautifulsoup4
+           python-brotli
+           python-cloudscraper
+           python-dateparser
+           python-keyring
+           python-lxml
+           python-magic
+           python-natsort
+           python-pillow
+           python-pure-protobuf
+           python-pycairo
+           python-pygobject
+           python-requests
+           python-unidecode
+           webkitgtk-with-libsoup2))
+    (native-inputs
+     (list desktop-file-utils
+           gettext-minimal
+           `(,glib "bin")
+           gobject-introspection
+           pkg-config))
     (home-page "https://gitlab.com/valos/Komikku")
     (synopsis "Manga reader for GNOME")
     (description "Komikku is an online/offline manga reader for GNOME,
@@ -12152,10 +12493,15 @@ developed with the aim of being used with the Librem 5 phone.")
                                                version "." "_")))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "18rg773gq9v3cdywpmrp12c5xyp97ir9yqjinccpi22sksb1kl8a"))))
+        (base32 "18rg773gq9v3cdywpmrp12c5xyp97ir9yqjinccpi22sksb1kl8a"))
+       (modules '((guix build utils)))
+       (snippet
+        ;; Remove the bundled sqlite, but keep its header because code relies
+        ;; on this header variant.
+        '(delete-file "libgda/sqlite/sqlite-src/sqlite3.c"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:configure-flags '("--enable-vala")
+     `(#:configure-flags '("--enable-system-sqlite" "--enable-vala")
        ;; There's a race between check_cnc_lock and check_threaded_cnc
        ;; in tests/multi-threading.
        #:parallel-tests? #f
@@ -12186,15 +12532,16 @@ developed with the aim of being used with the Librem 5 phone.")
                         (string-append moduledir "/" shlib))
                #t))))))
     (propagated-inputs
-     `(("libxml2" ,libxml2)))           ; required by libgda-5.0.pc
+     (list libxml2))           ; required by libgda-5.0.pc
     (inputs
-     `(("glib" ,glib)
-       ("glade" ,glade3)
-       ("gtk+" ,gtk+)
-       ("libsecret" ,libsecret)
-       ("libxslt" ,libxslt)
-       ("openssl" ,openssl)
-       ("vala" ,vala)))
+     (list glib
+           glade3
+           gtk+
+           libsecret
+           libxslt
+           openssl
+           sqlite
+           vala))
     (native-inputs
      `(("autoconf" ,autoconf)
        ("autoconf-archive" ,autoconf-archive)
@@ -12222,15 +12569,15 @@ your data.")
 (define-public gtranslator
   (package
     (name "gtranslator")
-    (version "3.36.0")
+    (version "40.0")
         (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
-                                  (version-major+minor version) "/"
+                                  (version-major version) "/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1lxd2nkji4jk8g2xmyc1a1r3ww710ddk91zh9psmx8xlb4xivaid"))))
+                "0d48nc11z0m91scy21ah56ysxns82zvswx8lglvlkig1vqvblgpc"))))
     (build-system meson-build-system)
     (inputs
      `(("json-glib" ,json-glib)
@@ -12242,13 +12589,14 @@ your data.")
        ("gspell" ,gspell)
        ("libdazzle" ,libdazzle)
        ("libgda" ,libgda)
-       ("libsoup" ,libsoup)))
+       ("libhandy" ,libhandy)
+       ("libsoup" ,libsoup-minimal-2)))
     (native-inputs
      `(("glib:bin" ,glib "bin")
        ("itstool" ,itstool)
        ("pkg-config" ,pkg-config)))
     (propagated-inputs
-     `(("gtksourceview" ,gtksourceview))) ; required for source view
+     (list gtksourceview)) ; required for source view
     (arguments
      `(#:build-type "release"
        #:glib-or-gtk? #t
@@ -12296,7 +12644,7 @@ world.")
                                           (package-version python))
                                         "/site-packages")))
               (wrap-program prog
-                `("PYTHONPATH" = (,(getenv "PYTHONPATH") ,pylib))
+                `("PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH") ,pylib))
                 `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH"))))
               #t))))))
     (native-inputs
@@ -12332,6 +12680,47 @@ world.")
 Document Analysis and Recognition program.")
     (license license:gpl3+)))
 
+(define-public libadwaita
+  (let ((commit "8d66b987a19979d9d7b85dacc6bad5ce0c8743fe")
+        (revision "1"))
+    (package
+      (name "libadwaita")
+      (version (git-version "0.0.1" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://gitlab.gnome.org/GNOME/libadwaita.git")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0i3wav6jsyi4w4i2r1rad769m5y5s9djj4zqb7dfyh0bad24ba3q"))))
+      (build-system meson-build-system)
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-before 'check 'pre-check
+             (lambda* (#:key inputs #:allow-other-keys)
+               ;; Tests require a running X server.
+               (system "Xvfb :1 &")
+               (setenv "DISPLAY" ":1"))))))
+      (native-inputs
+       `(("sassc" ,sassc)
+         ("glib:bin" ,glib "bin")
+         ("gtk-doc" ,gtk-doc/stable)
+         ("pkg-config" ,pkg-config)
+         ("vala" ,vala)
+         ("xvfb" ,xorg-server-for-tests)))
+      (inputs
+       (list gtk gobject-introspection libportal))
+      (home-page "https://gnome.pages.gitlab.gnome.org/libadwaita/")
+      (synopsis "Building blocks for GNOME applications")
+      (description
+       "@code{libadwaita} offers widgets and objects to build GNOME
+applications scaling from desktop workstations to mobile phones.  It is the
+successor of @code{libhandy} for GTK4.")
+      (license license:lgpl2.1+))))
+
 (define-public gnome-power-manager
   (package
     (name "gnome-power-manager")
@@ -12346,17 +12735,57 @@ Document Analysis and Recognition program.")
                 "0drfn3wcc8l4n07qwv6p0rw2dwcd00hwzda282q62l6sasks2b2g"))))
     (build-system meson-build-system)
     (inputs
-     `(("upower" ,upower)
-       ("gtk+" ,gtk+)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("adwaita-icon-theme" ,adwaita-icon-theme)))
+     (list upower gtk+ gsettings-desktop-schemas adwaita-icon-theme))
     (native-inputs
-     `(("desktop-file-utils" ,desktop-file-utils)
-       ("glib:bin" ,glib "bin")
-       ("gettext" ,gettext-minimal)
-       ("pkg-config" ,pkg-config)))
+     (list desktop-file-utils
+           `(,glib "bin") gettext-minimal pkg-config))
     (home-page "https://gitlab.gnome.org/GNOME/gnome-power-manager")
     (synopsis "Power management daemon for the GNOME desktop")
     (description "@code{gnome-power-manager} is a tool for viewing present and
 historical battery usage and related statistics.")
     (license license:gpl2)))
+
+(define-public xffm+
+  (package
+    (name "xffm+")
+    (version "0.94")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://sourceforge/xffm/xffm+/xffm+-"
+                                  version ".tar.bz2"))
+              (sha256
+               (base32
+                "0gwbgmjzlgv9ba95cgaigjnc9njzi7qznhvzp0qrnnlq3nbcm1k1"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:tests? #f ; No tests exist
+       #:configure-flags
+       (let ((shared-mime-info (assoc-ref %build-inputs "shared-mime-info"))
+             (out (assoc-ref %outputs "out")))
+         (list (string-append "-DFREEDESKTOP_GLOBS=" shared-mime-info
+                              "/share/mime/globs")
+               (string-append "-DFREEDESKTOP_ALIAS=" shared-mime-info
+                              "/share/mime/aliases")
+               (string-append "-DFREEDESKTOP_ICONS=" shared-mime-info
+                              "/share/mime/generic-icons")
+               (string-append "-DCMAKE_INSTALL_PREFIX=" out)
+               (string-append "-DPREFIX_BIN=" out "/bin")))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-installation-destination
+           (lambda* (#:key outputs #:allow-other-keys)
+             (substitute* "CMakeLists.txt"
+              ;; This is done so we can override.
+              (("^set.CMAKE_INSTALL_PREFIX") "set(QCMAKE_INSTALL_PREFIX")
+              ;; This is done so we can override.
+              (("`set.PREFIX_BIN") "set(QPREFIX_BIN")))))))
+    (native-inputs
+     (list cmake pkg-config intltool gnu-gettext))
+    (inputs
+     (list glib gtk+ libx11 libsm libxv libxaw libxcb libxkbfile
+           shared-mime-info))
+    (synopsis "File manager")
+    (description "This package provides a graphical file manager.")
+    (home-page "http://xffm.org/")
+    (license license:gpl3+)
+    (properties '((upstream-name . "xffm")))))
diff --git a/gnu/packages/gnu-pw-mgr.scm b/gnu/packages/gnu-pw-mgr.scm
index d6f0cd6f86..08968f1241 100644
--- a/gnu/packages/gnu-pw-mgr.scm
+++ b/gnu/packages/gnu-pw-mgr.scm
@@ -55,7 +55,7 @@
                (("/dev/tty") "/dev/null"))
              #t)))))
     (native-inputs
-     `(("which" ,which)))
+     (list which))
     (home-page "https://www.gnu.org/software/gnu-pw-mgr/")
     (synopsis "Retrieve login credentials without recording passwords")
     (description
diff --git a/gnu/packages/gnucash.scm b/gnu/packages/gnucash.scm
index f28c034f55..ee7ca3cfde 100644
--- a/gnu/packages/gnucash.scm
+++ b/gnu/packages/gnucash.scm
@@ -5,7 +5,7 @@
 ;;; Copyright © 2017 Chris Marusich <cmmarusich@gmail.com>
 ;;; Copyright © 2017, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 Maxim Cournoyer <maxim.cournoyer@gmail.com>
-;;; Copyright © 2019 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2019, 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;; Copyright © 2020 Prafulla Giri <pratheblackdiamond@gmail.com>
 ;;; Copyright © 2020 Christopher Lam <christopher.lck@gmail.com>
 ;;;
@@ -63,15 +63,14 @@
   ;; directory.
   (package
     (name "gnucash")
-    (version "4.2")
+    (version "4.6")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://sourceforge/gnucash/gnucash%20%28stable%29/"
                            version "/gnucash-" version ".tar.bz2"))
        (sha256
-        (base32
-         "020k1mm909dcgs52ls4v7xx3yn8gqazi9awyr81l6y7pkq1spn2n"))))
+        (base32 "0csp8iddhc901vv09gl5lj970g6ili696vwj4vdpkiprp7gh26r5"))))
     (build-system cmake-build-system)
     (inputs
      `(("guile" ,guile-3.0)
@@ -84,7 +83,7 @@
        ("libofx" ,libofx)
        ("libxml2" ,libxml2)
        ("libxslt" ,libxslt)
-       ("webkitgtk" ,webkitgtk)
+       ("webkitgtk" ,webkitgtk-with-libsoup2)
        ("aqbanking" ,aqbanking)
        ("python" ,python)
        ("perl-date-manip" ,perl-date-manip)
@@ -93,6 +92,7 @@
     (native-inputs
      `(("glib" ,glib "bin")             ; glib-compile-schemas, etc.
        ("intltool" ,intltool)
+       ("gmp" ,gmp)
        ("googlemock" ,(package-source googletest))
        ("googletest" ,googletest)
        ("gnucash-docs" ,gnucash-docs)
@@ -100,7 +100,7 @@
        ("pkg-config" ,pkg-config)))
     (propagated-inputs
      ;; dconf is required at runtime according to README.dependencies.
-     `(("dconf" ,dconf)))
+     (list dconf))
     (outputs '("out" "doc" "debug" "python"))
     (arguments
      `(#:test-target "check"
@@ -231,8 +231,7 @@ installed as well as Yelp, the Gnome help browser.")
          (uri (string-append "mirror://sourceforge/gnucash/gnucash%20%28stable%29/"
                              version "/gnucash-docs-" version revision ".tar.gz"))
          (sha256
-          (base32
-           "1p1rbv0gyi07nh5pzhk3xm46w66kjyaipb6rpaq9yb9gil1nl7q5"))))
+          (base32 "1365k4wb8zfm2zyg7zqyvajbzh9311m2zi1vpvbpp8p4sibqjksw"))))
       (build-system gnu-build-system)
       ;; These are native-inputs because they are only required for building the
       ;; documentation.
@@ -275,12 +274,9 @@ to be read using the GNOME Yelp program.")
              (string-append "--with-openssl-libs="
                             (assoc-ref %build-inputs "openssl") "/lib"))))
     (inputs
-     `(("libgcrypt" ,libgcrypt)
-       ("gnutls" ,gnutls)
-       ("openssl" ,openssl)
-       ("gtk+" ,gtk+)))
+     (list libgcrypt gnutls openssl gtk+))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.aquamaniac.de/sites/aqbanking/index.php")
     (synopsis "Utility library for networking and security applications")
     (description
@@ -293,29 +289,25 @@ applications and libraries.  It is used by AqBanking.")
 (define-public aqbanking
   (package
     (name "aqbanking")
-    (version "6.3.0")
+    (version "6.3.2")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://www.aquamaniac.de/rdm/attachments/"
-                           "download/372/aqbanking-" version ".tar.gz"))
+                           "download/386/aqbanking-" version ".tar.gz"))
        (sha256
-        (base32 "1k2mhdnk0jc0inq1hmp74m3y7azxrjm8r07x5k1pp4ic0yi5vs50"))))
+        (base32 "061l7qja7x557650kphbg1gzxc52a7557nibgdhv5jwqf8pv8ym9"))))
     (build-system gnu-build-system)
     (arguments
      `(;; Parallel building fails because aqhbci is required before it's
        ;; built.
        #:parallel-build? #f))
     (propagated-inputs
-     `(("gwenhywfar" ,gwenhywfar)))
+     (list gwenhywfar))
     (inputs
-     `(("gmp" ,gmp)
-       ("xmlsec" ,xmlsec)
-       ("gnutls" ,gnutls)))
+     (list gmp xmlsec gnutls))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("gettext-minimal" ,gettext-minimal)
-       ("libltdl" ,libltdl)))
+     (list pkg-config gettext-minimal libltdl))
     (home-page "https://www.aquamaniac.de/sites/aqbanking/index.php")
     (synopsis "Interface for online banking tasks")
     (description
diff --git a/gnu/packages/gnunet.scm b/gnu/packages/gnunet.scm
index d0a9955005..5c0dd348cc 100644
--- a/gnu/packages/gnunet.scm
+++ b/gnu/packages/gnunet.scm
@@ -113,7 +113,7 @@
       ("libvorbis" ,libvorbis)
       ("zlib" ,zlib)))
    (native-inputs
-    `(("pkg-config" ,pkg-config)))
+    (list pkg-config))
    (outputs '("out"
               "static")) ; 420 KiB .a files
    (arguments
@@ -164,14 +164,11 @@ tool to extract metadata from a file and print the results.")
                                 version ".tar.gz"))
             (sha256
              (base32
-              "0bh39irwzkv48fkw43skfgkk8ka3793bx1lm21sgw6zxi0djyyx3"))))
+              "0bh39irwzkv48fkw43skfgkk8ka3793bx1lm21sgw6zxi0djyyx3"))
+            (patches (search-patches "libmicrohttpd-0.9.73-test-ssl3.patch"))))
    (build-system gnu-build-system)
    (inputs
-    `(("curl" ,curl)
-      ("gnutls" ,gnutls/dane)
-      ("libgcrypt" ,libgcrypt)
-      ("openssl" ,openssl)
-      ("zlib" ,zlib)))
+    (list curl gnutls/dane libgcrypt openssl zlib))
    (synopsis "C library implementing an HTTP 1.1 server")
    (description
     "GNU libmicrohttpd is a small, embeddable HTTP server implemented as a
@@ -200,10 +197,7 @@ authentication and support for SSL3 and TLS.")
              ("libidn2" ,libidn2)
              ("zlib" ,zlib)))
    (native-inputs
-    `(("libtool" ,libtool)
-      ("perl" ,perl)
-      ("pkg-config" ,pkg-config)
-      ("python" ,python)))
+    (list libtool perl pkg-config python))
    (arguments
     `(#:configure-flags
       ;; All of these produce errors during configure.
@@ -289,11 +283,8 @@ supports HTTP, HTTPS and GnuTLS.")
       ("zbar" ,zbar)
       ("zlib" ,zlib)))
    (native-inputs
-    `(("curl" ,curl)
-      ("pkg-config" ,pkg-config)
-      ("python" ,python)
-      ("xxd" ,xxd)
-      ("which" ,(@ (gnu packages base) which))))
+    (list curl pkg-config python xxd
+          (@ (gnu packages base) which)))
    (arguments
     '(#:parallel-tests? #f ; Parallel tests aren't supported.
       #:phases
@@ -367,11 +358,8 @@ kinds of basic applications for the foundation of a GNU internet.")
                  (base32
                   "0nqc18jh9j30y4l6yh6j35byfg6qalq7yr3frv9rk10qa041c2sv"))))
       (build-system gnu-build-system)
-      (native-inputs `(("pkg-config" ,pkg-config)
-                       ("autoconf" ,autoconf)
-                       ("automake" ,automake)))
-      (inputs `(("guile" ,guile-2.0)
-                ("gnunet" ,gnunet)))
+      (native-inputs (list pkg-config autoconf automake))
+      (inputs (list guile-2.0 gnunet))
       (synopsis "Guile bindings for GNUnet services")
       (description
        "This package provides Guile bindings to the client libraries of various
@@ -410,8 +398,7 @@ services.")
        ("libunique" ,libunique)
        ("qrencode" ,qrencode)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("libglade" ,libglade)))
+     (list pkg-config libglade))
     (synopsis "Graphical front-end tools for GNUnet")
     (properties '((ftp-server . "ftp.gnu.org")
                   (ftp-directory . "/gnunet")))))
diff --git a/gnu/packages/gnupg.scm b/gnu/packages/gnupg.scm
index 127945fdc3..cde7427d07 100644
--- a/gnu/packages/gnupg.scm
+++ b/gnu/packages/gnupg.scm
@@ -4,7 +4,7 @@
 ;;; Copyright © 2014, 2018 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2014, 2015, 2016, 2020 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
-;;; 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 © 2015, 2016, 2017, 2019 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016 Christine Lemmer-Webber <cwebber@dustycloud.org>
 ;;; Copyright © 2016, 2017 Nikita <nikita@n0.is>
@@ -18,7 +18,9 @@
 ;;; Copyright © 2018 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
 ;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2020 Fredrik Salomonsson <plattfot@posteo.net>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;; Copyright © 2021 Nikita Domnitskii <nikita@domnitskii.me>
+;;; Copyright © 2021 Aleksandr Vityazev <avityazev@posteo.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -73,6 +75,7 @@
   #:use-module (gnu packages xml)
   #:use-module (gnu packages popt)
   #:use-module (gnu packages xdisorg)
+  #:use-module (guix gexp)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix utils)
@@ -80,13 +83,14 @@
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system perl)
   #:use-module (guix build-system python)
+  #:use-module (ice-9 match)
   #:use-module (guix build-system meson)
   #:use-module (srfi srfi-1))
 
 (define-public libgpg-error
   (package
     (name "libgpg-error")
-    (version "1.37")
+    (version "1.42")
     (source
      (origin
       (method url-fetch)
@@ -94,32 +98,48 @@
                           version ".tar.bz2"))
       (sha256
        (base32
-        "0qwpx8mbc2l421a22l0l1hpzkip9jng06bbzgxwpkkvk5bvnybdk"))))
+        "08syj8mlarww8mh8x3s0x6hjqbnxp2lkg3hab57qqpv1dh7yf1zw"))))
     (build-system gnu-build-system)
     (arguments
      (if (%current-target-system)
-         `(#:modules ((ice-9 match)
-                      (guix build gnu-build-system)
+         `(#:modules ((guix build gnu-build-system)
                       (guix build utils))
            #:phases
            (modify-phases %standard-phases
+             ;; If this is left out, some generated header
+             ;; files will be sprinkled with ‘\c’, which
+             ;; the compiler won't like.
+             (add-after 'unpack 'fix-gen-lock-obj.sh
+               (lambda _
+                 (substitute* "src/gen-lock-obj.sh"
+                   (("if test -n `echo -n`") "if ! test -n `echo -n`"))))
              ;; When cross-compiling, some platform specific properties cannot
              ;; be detected. Create a symlink to the appropriate platform
-             ;; file. See Cross-Compiling section at:
+             ;; file if required. Note that these platform files depend on
+             ;; both the operating system and architecture!
+             ;;
+             ;; See Cross-Compiling section at:
              ;; https://github.com/gpg/libgpg-error/blob/master/README
              (add-after 'unpack 'cross-symlinks
-               (lambda* (#:key target inputs #:allow-other-keys)
-                 (let ((triplet
-                        (match (string-take target
-                                            (string-index target #\-))
-                          ("armhf" "arm-unknown-linux-gnueabi")
-                          ("mips64el" "mips-unknown-linux-gnu")
-                          (x
-                           (string-append x "-unknown-linux-gnu")))))
-                   (symlink
-                    (string-append "lock-obj-pub." triplet ".h")
-                    "src/syscfg/lock-obj-pub.linux-gnu.h"))
-                 #t))))
+               (lambda _
+                 (define (link triplet source)
+                   (symlink (string-append "lock-obj-pub." triplet ".h")
+                            (string-append "src/syscfg/lock-obj-pub."
+                                           source ".h")))
+                 ,(let* ((target (%current-target-system))
+                         (architecture
+                          (string-take target (string-index target #\-))))
+                    (cond ((target-linux? target)
+                           (match architecture
+                             ("armhf"
+                              `(link "arm-unknown-linux-gnueabi" "linux-gnu"))
+                             ("mips64el"
+                              `(link "mips-unknown-linux-gnu" "linux-gnu"))
+                             ;; Don't always link to the "linux-gnu"
+                             ;; configuration, as this is not correct for
+                             ;; all architectures.
+                             (_ #t)))
+                          (#t #t)))))))
          '()))
     (native-inputs `(("gettext" ,gettext-minimal)))
     (home-page "https://gnupg.org")
@@ -136,14 +156,14 @@ Daemon and possibly more in the future.")
 (define-public libgcrypt
   (package
     (name "libgcrypt")
-    (version "1.8.5")
+    (version "1.8.8")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnupg/libgcrypt/libgcrypt-"
                                  version ".tar.bz2"))
              (sha256
               (base32
-                "1hvsazms1bfd769q0ngl0r9g5i4m9mpz9jmvvrdzyzk3rfa2ljiv"))))
+               "1xasrh9zxhgj2n5n8dvpzbwn1mzpmlzy270xhbq2gl8xk2xy4pc9"))))
     (build-system gnu-build-system)
     (propagated-inputs
      `(("libgpg-error-host" ,libgpg-error)))
@@ -175,7 +195,7 @@ generation.")
 (define-public libassuan
   (package
     (name "libassuan")
-    (version "2.5.4")
+    (version "2.5.5")
     (source
      (origin
       (method url-fetch)
@@ -183,11 +203,10 @@ generation.")
                           version ".tar.bz2"))
       (sha256
        (base32
-        "1w7vnnycq4z7gf4bk38pi4hrb8qrrzgfpz3cd7frwldxnfbfx060"))))
+        "1r1lvcp67gn5lfrj1g388sd77ca6qwnmxndirdysd71gk362z34f"))))
     (build-system gnu-build-system)
     (propagated-inputs
-     `(("libgpg-error" ,libgpg-error)
-       ("pth" ,pth)))
+     (list libgpg-error pth))
     (home-page "https://gnupg.org")
     (synopsis
      "IPC library used by GnuPG and related software")
@@ -203,7 +222,7 @@ provided.")
 (define-public libksba
   (package
     (name "libksba")
-    (version "1.5.0")
+    (version "1.6.0")
     (source
      (origin
       (method url-fetch)
@@ -212,12 +231,10 @@ provided.")
             version ".tar.bz2"))
       (sha256
        (base32
-        "1fm0mf3wq9fmyi1rmc1vk2fafn6liiw2mgxml3g7ybbb44lz2jmf"))))
+        "12x40y9ihs8nw2xs2y2vjfw90mhikbm5rvabma0dh5frybk87mns"))))
     (build-system gnu-build-system)
     (propagated-inputs
-     `(("libgpg-error" ,libgpg-error)))
-    (native-inputs
-     `(("libgpg-error" ,libgpg-error)))
+     (list libgpg-error))
     (arguments
      `(#:configure-flags
        (list ,@(if (%current-target-system)
@@ -262,30 +279,34 @@ compatible to GNU Pth.")
 (define-public gnupg
   (package
     (name "gnupg")
-    (version "2.2.30")
+    ;; Note: The 2.2.X releases are Long Term Support (LTS), so stick to it
+    ;; for our stable 'gnupg'.
+    ;; Note2: 2.2.33 currently suffers from regressions, so do not update to it
+    ;; (see: https://dev.gnupg.org/T5742).
+    (version "2.2.32")
     (source (origin
               (method url-fetch)
-              (uri (string-append "mirror://gnupg/gnupg/gnupg-" version
+              (uri (string-append "ftp://ftp.gnupg.org/gcrypt/gnupg/gnupg-" version
                                   ".tar.bz2"))
               (patches (search-patches "gnupg-default-pinentry.patch"))
               (sha256
                (base32
-                "1111ry31gaxv76miqsy6l0kwxwlx8sz0jk41jhyrjwx649p6sqyc"))))
+                "0506gv54z10c96z5821z9p0ksibk1pfilsmag39ffqrcz0sinmxj"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("gnutls" ,gnutls)
-       ("libassuan" ,libassuan)
-       ("libgcrypt" ,libgcrypt)
-       ("libgpg-error" ,libgpg-error)
-       ("libksba" ,libksba)
-       ("npth" ,npth)
-       ("openldap" ,openldap)
-       ("pcsc-lite" ,pcsc-lite)
-       ("readline" ,readline)
-       ("sqlite" ,sqlite)
-       ("zlib" ,zlib)))
+     (list gnutls
+           libassuan
+           libgcrypt
+           libgpg-error
+           libksba
+           npth
+           openldap
+           pcsc-lite
+           readline
+           sqlite
+           zlib))
    (arguments
     `(#:configure-flags '(;; Otherwise, the test suite looks for the `gpg`
                           ;; executable in its installation directory in
@@ -339,22 +360,18 @@ libskba (working with X.509 certificates and CMS data).")
                                   ".tar.bz2"))
               (sha256
                (base32
-                "1fkq4sqldvf6a25mm2qz95swv1qjg464736091w51djiwqbjyin9"))))
+                "1fkq4sqldvf6a25mm2qz95swv1qjg464736091w51djiwqbjyin9"))
+              (patches (search-patches "gnupg-1-build-with-gcc10.patch"))))
     (native-inputs '())
     (inputs
-     `(("zlib" ,zlib)
-       ("bzip2" ,bzip2)
-       ("curl" ,curl)
-       ("readline" ,readline)
-       ("libgpg-error" ,libgpg-error)))
+     (list zlib bzip2 curl readline libgpg-error))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-check-sh
            (lambda _
              (substitute* "checks/Makefile.in"
-               (("/bin/sh") (which "sh")))
-             #t)))))))
+               (("/bin/sh") (which "sh"))))))))))
 
 (define-public gpgme
   (package
@@ -368,12 +385,12 @@ libskba (working with X.509 certificates and CMS data).")
        (base32 "1bg13l5s8x9p1v0jyv29n84bay27pflindpzjsc9gj7i4wdkrg7f"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("gnupg" ,gnupg)))
+     (list gnupg))
     (propagated-inputs
      ;; Needs to be propagated because gpgme.h includes gpg-error.h.
-     `(("libgpg-error" ,libgpg-error)))
+     (list libgpg-error))
     (inputs
-     `(("libassuan" ,libassuan)))
+     (list libassuan))
     (home-page "https://www.gnupg.org/related_software/gpgme/")
     (synopsis "Library providing simplified access to GnuPG functionality")
     (description
@@ -404,15 +421,13 @@ and every application benefits from this.")
                         "lang/cpp/src/libgpgmepp.la")
                (symlink (string-append gpgme "/lib/libgpgme.la")
                         "src/libgpgme.la"))
-             (chdir "lang/qt")
-             #t)))))
+             (chdir "lang/qt"))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ,@(package-native-inputs gpgme)))
+     (modify-inputs (package-native-inputs gpgme)
+       (prepend pkg-config)))
     (inputs
-     `(("gpgme" ,gpgme)
-       ("qtbase" ,qtbase-5)
-       ,@(package-inputs gpgme)))
+     (modify-inputs (package-inputs gpgme)
+       (prepend gpgme qtbase-5)))
     (synopsis "Qt API bindings for gpgme")
     (description "QGpgme provides a very high level Qt API around GpgMEpp.
 
@@ -448,17 +463,14 @@ gpgpme starting with version 1.7.")
                ;; When cross-compiling, the bash script 'libgcrypt-config'
                ;; must be accessible during the configure phase.
                (setenv "PATH"
-                       (string-append (assoc-ref inputs "libgcrypt")
-                                      "/bin:" (getenv "PATH")))))))))
+                       (string-append
+                        (dirname
+                         (search-input-file inputs "bin/libgcrypt-config"))
+                        ":" (getenv "PATH")))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("texinfo" ,texinfo)
-       ("guile" ,guile-3.0)))
+     (list pkg-config autoconf automake texinfo guile-3.0))
     (inputs
-     `(("guile" ,guile-3.0)
-       ("libgcrypt" ,libgcrypt)))
+     (list guile-3.0 libgcrypt))
     (synopsis "Cryptography library for Guile using Libgcrypt")
     (description
      "Guile-Gcrypt provides a Guile interface to a subset of the
@@ -472,25 +484,22 @@ interface (FFI) of Guile.")
   (package (inherit guile-gcrypt)
     (name "guile2.0-gcrypt")
     (native-inputs
-     `(("guile" ,guile-2.0)
-       ,@(alist-delete "guile" (package-native-inputs guile-gcrypt))))
+     (modify-inputs (package-native-inputs guile-gcrypt)
+       (replace "guile" guile-2.0)))
     (inputs
-     `(("guile" ,guile-2.0)
-       ,@(alist-delete "guile" (package-inputs guile-gcrypt))))))
+     (modify-inputs (package-inputs guile-gcrypt)
+       (replace "guile" guile-2.0)))))
 
 (define-public guile2.2-gcrypt
   (package
     (inherit guile-gcrypt)
     (name "guile2.2-gcrypt")
     (native-inputs
-     `(("guile" ,guile-2.2)
-       ,@(alist-delete "guile" (package-native-inputs guile-gcrypt))))
+     (modify-inputs (package-native-inputs guile-gcrypt)
+       (replace "guile" guile-2.2)))
     (inputs
-     `(("guile" ,guile-2.2)
-       ,@(alist-delete "guile" (package-inputs guile-gcrypt))))))
-
-(define-public guile3.0-gcrypt
-  (deprecated-package "guile3.0-gcrypt" guile-gcrypt))
+     (modify-inputs (package-inputs guile-gcrypt)
+       (replace "guile" guile-2.2)))))
 
 (define-public python-gpg
   (package
@@ -513,9 +522,9 @@ interface (FFI) of Guile.")
              #t)))
        #:tests? #f)) ; No test suite.
     (inputs
-     `(("gpgme" ,gpgme)))
+     (list gpgme))
     (native-inputs
-     `(("swig" ,swig)))
+     (list swig))
     (home-page (package-home-page gpgme))
     (synopsis "Python bindings for GPGME GnuPG cryptography library")
     (description "This package provides Python bindings to the GPGME GnuPG
@@ -551,9 +560,9 @@ distributed separately.")
            (lambda _ (invoke "make" "check"))))))
     (build-system python-build-system)
     (native-inputs
-     `(("gnupg" ,gnupg-1)))
+     (list gnupg-1))
     (inputs
-     `(("gpgme" ,gpgme)))
+     (list gpgme))
     (home-page "https://launchpad.net/pygpgme")
     (synopsis "Python module for working with OpenPGP messages")
     (description
@@ -567,41 +576,38 @@ decrypt messages using the OpenPGP format by making use of GPGME.")
 (define-public python-gnupg
   (package
     (name "python-gnupg")
-    (version "0.4.4")
+    (version "0.4.8")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "python-gnupg" version))
        (sha256
         (base32
-         "03pvjyp6q9pr8qa22i38az06ddzhvzy5kj192hxa3gbhnchg1nj5"))))
+         "1mq7hljy3bjkxdvh3qx2bv4y0b66l9pmc6i06ys75y7dbjpf2kdn"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda _
-             (substitute* "test_gnupg.py"
-               ;; Unsure why this test fails.
-               (("'test_search_keys'") "True")
-               (("def test_search_keys") "def disabled__search_keys"))
-             (setenv "USERNAME" "guixbuilder")
-             ;; The doctests are extremely slow and sometimes time out,
-             ;; so we disable them.
-             (invoke "python"
-                     "test_gnupg.py" "--no-doctests"))))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (substitute* "test_gnupg.py"
+                 ;; Unsure why this test fails.
+                 (("'test_search_keys'") "True")
+                 (("def test_search_keys") "def disabled__search_keys"))
+               (setenv "USERNAME" "guixbuilder")
+               ;; The doctests are extremely slow and sometimes time out,
+               ;; so we disable them.
+               (invoke "python" "test_gnupg.py" "--no-doctests")))))))
     (native-inputs
-     `(("gnupg" ,gnupg-1)))
-    (home-page "https://packages.python.org/python-gnupg/index.html")
+     (list gnupg))
+    (home-page "https://pythonhosted.org/python-gnupg/index.html")
     (synopsis "Wrapper for the GNU Privacy Guard")
     (description
       "This module allows easy access to GnuPG’s key management, encryption
 and signature functionality from Python programs.")
     (license license:bsd-3)))
 
-(define-public python2-gnupg
-  (package-with-python2 python-gnupg))
-
 (define-public perl-gnupg-interface
   (package
     (name "perl-gnupg-interface")
@@ -623,14 +629,11 @@ and signature functionality from Python programs.")
              (delete-file "t/encrypt_symmetrically.t")
              #t)))))
     (inputs
-     `(("gnupg" ,gnupg-1)))
+     (list gnupg-1))
     (propagated-inputs
-     `(("perl-moo" ,perl-moo)
-       ("perl-moox-handlesvia" ,perl-moox-handlesvia)
-       ("perl-moox-late" ,perl-moox-late)))
+     (list perl-moo perl-moox-handlesvia perl-moox-late))
     (native-inputs
-     `(("which" ,which)
-       ("perl-module-install" ,perl-module-install)))
+     (list which perl-module-install))
     (home-page "https://metacpan.org/release/GnuPG-Interface")
     (synopsis "Perl interface to GnuPG")
     (description "@code{GnuPG::Interface} and its associated modules are
@@ -663,8 +666,7 @@ signing, decryption, verification, and key-listing parsing.")
         (add-before
          'build 'set-gpg-file-name
          (lambda* (#:key inputs outputs #:allow-other-keys)
-           (let* ((gpg (string-append (assoc-ref inputs "gpg")
-                                      "/bin/gpg")))
+           (let* ((gpg (search-input-file inputs "/bin/gpg")))
              (substitute* "libpius/constants.py"
                (("/usr/bin/gpg2") gpg))
              #t))))))
@@ -701,12 +703,12 @@ PGP keysigning parties.")
      ;; 'configure phase.
      `(("autoconf" ,autoconf-wrapper)
        ("automake" ,automake)))
-    (inputs `(("perl" ,perl)
-              ("perl-text-template" ,perl-text-template)
-              ("perl-mime-tools" ,perl-mime-tools)
-              ("perl-gnupg-interface" ,perl-gnupg-interface)
-              ("perl-net-idn-encode" ,perl-net-idn-encode)
-              ("libmd" ,libmd)))
+    (inputs (list perl
+                  perl-text-template
+                  perl-mime-tools
+                  perl-gnupg-interface
+                  perl-net-idn-encode
+                  libmd))
     (arguments
      `(#:tests? #f ; no test suite
        #:phases
@@ -789,23 +791,22 @@ including tools for signing keys, keyring analysis, and party preparation.
 (define-public pinentry-tty
   (package
     (name "pinentry-tty")
-    (version "1.1.1")
+    (version "1.2.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnupg/pinentry/pinentry-"
                                   version ".tar.bz2"))
               (sha256
                (base32
-                "0zx5vg6wws2sp2yxwi01b8i1pnsqkydncpj7x0p8xl9y05ja04nd"))))
+                "0w34c4x5hkxaxnnkcrm1azlzwzxcziv5dkci3xcd0hz0ld2j01qh"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags '("--enable-pinentry-tty")))
     (inputs
-     `(("ncurses" ,ncurses)
-       ("libassuan" ,libassuan)
-       ("libsecret" ,libsecret "out")))
+     (list ncurses libassuan
+           `(,libsecret "out")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://gnupg.org/aegypten2/")
     (synopsis "GnuPG's interface to passphrase input")
     (description
@@ -833,9 +834,8 @@ enter a passphrase when required by @code{gpg} or other software.")))
     (arguments
      `(#:configure-flags '("--enable-fallback-curses")))
     (inputs
-     `(("gtk+" ,gtk+-2)
-       ("glib" ,glib)
-       ,@(package-inputs pinentry-tty)))
+     (modify-inputs (package-inputs pinentry-tty)
+       (prepend gtk+-2 glib)))
     (description
      "Pinentry provides a console and a GTK+ GUI that allows users to enter a
 passphrase when @code{gpg} is run and needs it.")))
@@ -845,10 +845,8 @@ passphrase when @code{gpg} is run and needs it.")))
     (inherit pinentry-tty)
     (name "pinentry-gnome3")
     (inputs
-     `(("gtk+" ,gtk+-2)
-       ("gcr" ,gcr)
-       ("glib" ,glib)
-       ,@(package-inputs pinentry-tty)))
+     (modify-inputs (package-inputs pinentry-tty)
+       (prepend gtk+-2 gcr glib)))
     (arguments
      `(#:configure-flags '("--enable-pinentry-gnome3"
                            "--enable-fallback-curses")))
@@ -864,8 +862,8 @@ software.")))
     (arguments
      `(#:configure-flags '("--enable-fallback-curses")))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ,@(package-inputs pinentry-tty)))
+     (modify-inputs (package-inputs pinentry-tty)
+       (prepend qtbase-5)))
   (description
    "Pinentry provides a console and a Qt GUI that allows users to enter a
 passphrase when @code{gpg} is run and needs it.")))
@@ -888,8 +886,8 @@ passphrase when @code{gpg} is run and needs it.")))
        ("gettext" ,gettext-minimal)
        ,@(package-native-inputs pinentry-tty)))
     (inputs
-     `(("efl" ,efl)
-       ,@(package-inputs pinentry-tty)))
+     (modify-inputs (package-inputs pinentry-tty)
+       (prepend efl)))
     (description
    "Pinentry provides a console and a graphical interface for @acronym{EFL,
 the Enlightenment Foundation Libraries} that allows users to enter a
@@ -932,13 +930,8 @@ passphrase when @code{gpg} is run and needs it.")))
            (lambda* rest
              (invoke "make" "installcheck"))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("autoconf-archive" ,autoconf-archive)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ("texinfo" ,texinfo)))
-    (inputs `(("guile" ,guile-3.0)
-              ("rofi" ,rofi)))
+     (list autoconf autoconf-archive automake pkg-config texinfo))
+    (inputs (list guile-3.0 rofi))
     (synopsis "Rofi GUI for GnuPG's passphrase input")
     (description "Pinentry-rofi is a simple graphical user interface for
 passphrase or PIN when required by @code{gpg} or other software.  It is using
@@ -950,7 +943,7 @@ with @code{rofi-pass} a good front end for @code{password-store}.")
 (define-public pinentry-bemenu
   (package
     (name "pinentry-bemenu")
-    (version "0.7.0")
+    (version "0.7.1")
     (source
      (origin
        (method git-fetch)
@@ -959,15 +952,12 @@ with @code{rofi-pass} a good front end for @code{password-store}.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1faxaydhc9lr97b2r3sylcy320bn54g4a5p727y3227mz3gg1mn1"))))
+        (base32 "09nw49pyfs65m35a40kpzh6h0mf5yyjzmzq3jxp660885m0b29g8"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("bemenu" ,bemenu)
-       ("libassuan" ,libassuan)
-       ("libgpg-error" ,libgpg-error)
-       ("popt" ,popt)))
+     (list bemenu libassuan libgpg-error popt))
     (home-page "https://github.com/t-8ch/pinentry-bemenu")
     (synopsis "Pinentry implementation based on @code{bemenu}")
     (description
@@ -1013,22 +1003,21 @@ them to transform your existing public key into a secret key.")
 (define-public pgpdump
   (package
     (name "pgpdump")
-    (version "0.33")
+    (version "0.34")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://www.mew.org/~kazu/proj/pgpdump/pgpdump-"
                            version ".tar.gz"))
        (sha256
-        (base32 "1j001jra2m89n6cys3n0hs574bipjdzfxhzpnd4jfyv95mqwl7n4"))))
+        (base32 "080ayqqxb13ngpg6zvaipszwnjadafw3ni7w7gg189cmh3lab7cq"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:tests? #f ; no make check
-       #:configure-flags (list "--prefix=/")
-       #:make-flags (list ,(string-append "CC=" (cc-for-target))
-                          (string-append "DESTDIR=" (assoc-ref %outputs "out")))))
+     (list #:tests? #f                  ; no make check
+           #:make-flags
+           #~(list (string-append "CC=" #$(cc-for-target)))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "https://www.mew.org/~kazu/proj/pgpdump/en/")
     (synopsis "PGP packet visualizer")
     (description "pgpdump displays the sequence of OpenPGP or PGP version 2
@@ -1061,7 +1050,7 @@ however, pgpdump produces more detailed and easier to understand output.")
                  `("PATH" ":" prefix (,(string-append gnupg "/bin"))))
                #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("gnupg" ,gnupg)
        ("gpgme" ,gpgme)
@@ -1081,7 +1070,7 @@ files, to verify signatures, and to manage the private and public keys.")
 (define-public parcimonie
   (package
     (name "parcimonie")
-    (version "0.11.0")
+    (version "0.12.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://gaffer.boum.org/intrigeri/files/"
@@ -1089,70 +1078,61 @@ files, to verify signatures, and to manage the private and public keys.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "14pvapvzrxh1yh8zgcj1llmc2dd8g1fgzskxlja21gmw8c88aqdk"))))
+                "10gal2h8ihg7nnzy3adw942axd2ia1rcn1fw3a3v07n5mm8kqrx9"))))
     (build-system perl-build-system)
     (inputs
-     `(("gnupg" ,gnupg)
-       ("perl-config-general" ,perl-config-general)
-       ("perl-clone" ,perl-clone)
-       ("perl-data" ,perl-data)
-       ("perl-exporter-tiny" ,perl-exporter-tiny)
-       ("perl-file-homedir" ,perl-file-homedir)
-       ("perl-file-sharedir" ,perl-file-sharedir)
-       ("perl-file-which" ,perl-file-which)
-       ("perl-getopt-long-descriptive" ,perl-getopt-long-descriptive)
-       ("perl-gnupg-interface" ,perl-gnupg-interface)
-       ("perl-ipc-system-simple" ,perl-ipc-system-simple)
-       ("perl-list-moreutils" ,perl-list-moreutils)
-       ("perl-libintl-perl" ,perl-libintl-perl) ; Locale::TextDomain
-       ("perl-lwp-online" ,perl-lwp-online)
-       ("perl-module-build" ,perl-module-build)
-       ("perl-module-pluggable-object" ,perl-module-pluggable)
-       ("perl-moo" ,perl-moo)
-       ("perl-moox-handlesvia" ,perl-moox-handlesvia)
-       ("perl-moox-late" ,perl-moox-late)
-       ("perl-moox-options" ,perl-moox-options)
-       ("perl-moox-strictconstructor" ,perl-moox-strictconstructor)
-       ("perl-namespace-clean" ,perl-namespace-clean)
-       ("perl-net-dbus" ,perl-net-dbus)
-       ("perl-net-dbus-glib" ,perl-net-dbus-glib)
-       ("perl-path-tiny" ,perl-path-tiny)
-       ("perl-strictures" ,perl-strictures-2)
-       ("perl-test-most" ,perl-test-most)
-       ("perl-test-trap" ,perl-test-trap)
-       ("perl-time-duration" ,perl-time-duration)
-       ("perl-time-duration-parse" ,perl-time-duration-parse)
-       ("perl-try-tiny" ,perl-try-tiny)
-       ("perl-type-tiny" ,perl-type-tiny)
-       ("perl-types-path-tiny" ,perl-types-path-tiny)
-       ("perl-unicode-linebreak" ,perl-unicode-linebreak)
-       ("perl-xml-parser" ,perl-xml-parser)
-       ("perl-xml-twig" ,perl-xml-twig)
-       ("torsocks" ,torsocks)))
+     (list gnupg
+           perl-clone
+           perl-config-general
+           perl-file-homedir
+           perl-file-sharedir
+           perl-file-which
+           perl-gnupg-interface
+           perl-ipc-system-simple
+           perl-json
+           perl-list-moreutils
+           perl-moo
+           perl-moox-late
+           perl-moox-options
+           perl-moox-strictconstructor
+           perl-namespace-clean
+           perl-net-dbus
+           perl-pango
+           perl-path-tiny
+           perl-time-duration
+           perl-time-duration-parse
+           perl-try-tiny
+           perl-type-tiny
+           perl-types-path-tiny
+           torsocks))
     (native-inputs
-     `(("xorg-server" ,xorg-server-for-tests)))
+     (list perl-file-which
+           perl-gnupg-interface
+           perl-list-moreutils
+           perl-lwp-online
+           perl-module-build
+           perl-strictures-2
+           perl-test-most
+           perl-test-trap
+           xorg-server-for-tests))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          ;; Needed for using gpg-connect-agent during tests.
          (add-before 'check 'prepare-for-tests
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((xorg-server (assoc-ref inputs "xorg-server")))
-               (system (string-append xorg-server "/bin/Xvfb :1 &"))
+             (let ((Xvfb (search-input-file inputs "/bin/Xvfb")))
+               (system (string-append Xvfb " :1 &"))
                (setenv "DISPLAY" ":1")
                (setenv "HOME" "/tmp")
-               ;; These tests are known to fail
+               ;; These tests expect usable gnupg configurations.
                (delete-file "t/32-keyserver_defined_on_command_line.t")
-               (delete-file "t/33-checkGpgHasDefinedKeyserver.t")
-               ;; The applet is deprecated upstream.
-               (delete-file "t/00-load_all.t")
-               #t)))
+               (delete-file "t/33-checkGpgHasDefinedKeyserver.t"))))
          (add-before 'install 'fix-references
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (substitute* "lib/App/Parcimonie/GnuPG/Interface.pm"
                ;; Skip check whether dependencies are in the PATH
-               (("defined which.*") ""))
-             #t))
+               (("defined which.*") ""))))
          (add-after 'install 'wrap-program
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -1160,9 +1140,8 @@ files, to verify signatures, and to manage the private and public keys.")
                                             ,(package-version perl))))
                (wrap-program (string-append out "/bin/parcimonie")
                  `("PERL5LIB" ":"
-                   prefix (,(string-append perllib ":" (getenv "PERL5LIB")))))
-               #t))))))
-    (home-page "https://gaffer.boum.org/intrigeri/code/parcimonie/")
+                   prefix (,(string-append perllib ":" (getenv "PERL5LIB")))))))))))
+    (home-page "https://salsa.debian.org/intrigeri/parcimonie")
     (synopsis "Incrementally refreshes a GnuPG keyring")
     (description "Parcimonie incrementaly refreshes a GnuPG keyring in a way
 that makes it hard to correlate the keyring content to an individual, and
@@ -1170,6 +1149,7 @@ makes it hard to locate an individual based on an identifying subset of her
 keyring content.  Parcimonie is a daemon that fetches one key at a time using
 the Tor network, waits a bit, changes the Tor circuit being used, and starts
 over.")
+    (properties '((upstream-name . "App-Parcimonie")))
     (license license:gpl1+)))
 
 (define-public jetring
@@ -1192,8 +1172,7 @@ over.")
          (delete 'configure) ; no configure script
          (add-before 'install 'hardlink-gnupg
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((gpg (string-append (assoc-ref inputs "gnupg")
-                                       "/bin/gpg")))
+             (let ((gpg (search-input-file inputs "/bin/gpg")))
                (substitute* (find-files "." "jetring-[[:alpha:]]+$")
                  (("gpg -") (string-append gpg " -"))
                  (("\\\"gpg\\\"") (string-append "\"" gpg "\"")))
@@ -1212,8 +1191,7 @@ over.")
                #t))))
        #:tests? #f)) ; no test phase
     (inputs
-     `(("gnupg" ,gnupg)
-       ("perl" ,perl)))
+     (list gnupg perl))
     (home-page "https://joeyh.name/code/jetring/")
     (synopsis "GnuPG keyring maintenance using changesets")
     (description
diff --git a/gnu/packages/gnustep.scm b/gnu/packages/gnustep.scm
index 012afebd01..eef3863949 100644
--- a/gnu/packages/gnustep.scm
+++ b/gnu/packages/gnustep.scm
@@ -54,7 +54,7 @@
     (arguments
      '(#:tests? #f)) ; no check target
     (native-inputs
-     `(("which" ,which)))
+     (list which))
     (home-page "http://gnustep.org")
     (synopsis "GNUstep make package")
     (description "The makefile package is a simple, powerful and extensible way
@@ -144,7 +144,7 @@ to easily create cross-compiled binaries.")
        ("libpng" ,libpng)
        ("libtiff" ,libtiff)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://windowmaker.org/")
     (description
      "Window Maker is an X11 window manager originally designed to provide
@@ -170,13 +170,9 @@ interface.  It is fast, feature rich, easy to configure, and easy to use.")
     (build-system gnu-build-system)
     (arguments '(#:tests? #f)) ; no "check" target
     (inputs
-     `(("glib" ,glib)
-       ("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxpm" ,libxpm)
-       ("upower" ,upower)))
+     (list glib libx11 libxext libxpm upower))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.dockapps.net/wmbattery")
     (synopsis "Display laptop battery info")
     (description
@@ -200,11 +196,9 @@ graph), and battery status (high - green, low - yellow, or critical - red).")
                 "01s37d8cfpncza1mlw13ar4rcwbrc1vgaj3ifhglmlcnzvvayg0n"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxpm" ,libxpm)))
+     (list libx11 libxext libxpm))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://www.thregr.org/~wavexx/software/wmnd/")
     (synopsis "Network interface monitor")
     (description
@@ -226,11 +220,9 @@ other compatible window managers.")
                 "1334y0axnxydwv05d172f405iljrfakg4kcyg9kmn46v6ywv424g"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxpm" ,libxpm)))
+     (list libx11 libxext libxpm))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.dockapps.net/wmcpuload")
     (synopsis "Monitor CPU usage")
     (description
@@ -255,14 +247,10 @@ on.")
                 "1lx276ba8r2yydhmwj1g586jdqg695ad89ng36fr3mb067gvb2rz"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxpm" ,libxpm)))
+     (list libx11 libxext libxpm))
     ;; wmclock requires autoreconf to generate its configure script.
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config))
     (home-page "https://www.dockapps.net/wmclock")
     (synopsis "Display the date and time")
     (description
@@ -286,10 +274,9 @@ display, and can run a user-specified program on mouse click.")
                (search-patches "wmfire-update-for-new-gdk-versions.patch"))))
     (build-system gnu-build-system)
     (inputs
-     `(("gtk+" ,gtk+-2)
-       ("libgtop" ,libgtop)))
+     (list gtk+-2 libgtop))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://www.improbability.net/")
     (synopsis "Display flames to represent resource usage")
     (description
diff --git a/gnu/packages/gnuzilla.scm b/gnu/packages/gnuzilla.scm
index de53d4ef30..a9b5ed9fe9 100644
--- a/gnu/packages/gnuzilla.scm
+++ b/gnu/packages/gnuzilla.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013, 2015 Andreas Enge <andreas@enge.fr>
-;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
 ;;; Copyright © 2016, 2017, 2018, 2019, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Alex Griffin <a@ajgrf.com>
@@ -13,9 +13,12 @@
 ;;; Copyright © 2020 Oleg Pykhalov <go.wigust@gmail.com>
 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
 ;;; Copyright © 2019, 2020 Adrian Malacoda <malacoda@monarch-pass.net>
-;;; Copyright © 2020 Jonathan Brielmaier <jonathan.brielmaier@web.de>
+;;; Copyright © 2020, 2021, 2022 Jonathan Brielmaier <jonathan.brielmaier@web.de>
 ;;; Copyright © 2020 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2021 Brice Waegeneire <brice@waegenei.re>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021 Baptiste Strazzul <bstrazzull@hotmail.fr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -51,6 +54,7 @@
   #:use-module (gnu packages admin)
   #:use-module (gnu packages audio)
   #:use-module (gnu packages autotools)
+  #:use-module (gnu packages m4)
   #:use-module (gnu packages base)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages databases)
@@ -65,6 +69,7 @@
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages fontutils)
+  #:use-module (gnu packages fonts)
   #:use-module (gnu packages libevent)
   #:use-module (gnu packages libreoffice)  ;for hunspell
   #:use-module (gnu packages image)
@@ -75,6 +80,7 @@
   #:use-module (gnu packages node)
   #:use-module (gnu packages xorg)
   #:use-module (gnu packages gl)
+  #:use-module (gnu packages pciutils)
   #:use-module (gnu packages assembly)
   #:use-module (gnu packages rust)
   #:use-module (gnu packages rust-apps)
@@ -113,9 +119,9 @@
        ("pkg-config" ,pkg-config)
        ("python" ,python-2)))
     (propagated-inputs
-     `(("nspr" ,nspr))) ; in the Requires.private field of mozjs-17.0.pc
+     (list nspr)) ; in the Requires.private field of mozjs-17.0.pc
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (arguments
      `(;; XXX: parallel build fails, lacking:
        ;;   mkdir -p "system_wrapper_js/"
@@ -190,8 +196,7 @@ in C/C++.")
                                 '("--host=aarch64-unknown-linux-gnu")
                                 '())))))))))
     (inputs
-     `(("libffi" ,libffi)
-       ("zlib" ,zlib)))))
+     (list libffi zlib))))
 
 (define-public mozjs-38
   (package
@@ -274,10 +279,7 @@ in C/C++.")
        ("pkg-config" ,pkg-config)
        ("python-2" ,python-2)))
     (inputs
-     `(("libffi" ,libffi)
-       ("readline" ,readline)
-       ("icu4c" ,icu4c)
-       ("zlib" ,zlib)))))
+     (list libffi readline icu4c zlib))))
 
 (define-public mozjs-52
   ;; No releases yet at <https://archive.mozilla.org/pub/spidermonkey/releases/>.
@@ -338,15 +340,13 @@ in C/C++.")
                (let ((out (assoc-ref outputs "out")))
                  (setenv "SHELL" (which "sh"))
                  (setenv "CONFIG_SHELL" (which "sh"))
-                 (setenv "AUTOCONF" (string-append (assoc-ref inputs "autoconf")
-                                                   "/bin/autoconf"))
+                 (setenv "AUTOCONF" (which "autoconf"))
                  (apply invoke "./configure"
                         (cons (string-append "--prefix=" out)
                               configure-flags))))))))
       (native-inputs
-       `(("autoconf" ,autoconf-2.13)
-         ("automake" ,automake)
-         ,@(package-native-inputs mozjs-38))))))
+       (modify-inputs (package-native-inputs mozjs-38)
+         (prepend autoconf-2.13 automake))))))
 
 (define-public mozjs-60
   ;; No releases yet at <https://archive.mozilla.org/pub/spidermonkey/releases/>.
@@ -355,7 +355,7 @@ in C/C++.")
   ;; we take the Debian version instead, because it is easier to work with.
   (package
     (inherit mozjs-38)
-    (version "60.2.3-2")
+    (version "60.2.3-4")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -364,27 +364,46 @@ in C/C++.")
               (file-name (git-file-name "mozjs" version))
               (sha256
                (base32
-                "091w050rwzrdcbgyi934k2viyccmlqxrp13sm2mql71mabb5dai6"))))
+                "1xl6avsj9gkgma71p56jzs7nasc767k3n1frnmri5pad4rj94bij"))))
     (arguments
      `(#:tests? #f ; FIXME: all tests pass, but then the check phase fails anyway.
        #:test-target "check-jstests"
        #:configure-flags
-       '("--enable-ctypes"
-         "--enable-optimize"
-         "--enable-pie"
-         "--enable-readline"
-         "--enable-shared-js"
-         "--enable-system-ffi"
-         "--with-system-nspr"
-         "--with-system-zlib"
-         "--with-system-icu"
-         "--with-intl-api"
-         ;; This is important because without it gjs will segfault during the
-         ;; configure phase.  With jemalloc only the standalone mozjs console
-         ;; will work.
-         "--disable-jemalloc")
+       ,#~(quasiquote
+           ("--enable-ctypes"
+            "--enable-optimize"
+            "--enable-pie"
+            "--enable-readline"
+            "--enable-shared-js"
+            "--enable-system-ffi"
+            "--with-system-nspr"
+            #$@(if (%current-target-system)
+                   #~(,(string-append "--with-nspr-prefix="
+                                      #$(this-package-input "nspr")))
+                   #~())
+            "--with-system-zlib"
+            "--with-system-icu"
+            "--with-intl-api"
+            ;; This is important because without it gjs will segfault during the
+            ;; configure phase.  With jemalloc only the standalone mozjs console
+            ;; will work.
+            "--disable-jemalloc"
+            ;; Mozilla deviates from Autotools conventions due to historical
+            ;; reasons.
+            #$@(if (%current-target-system)
+                   #~(#$(string-append
+                         "--host="
+                         (nix-system->gnu-triplet (%current-system)))
+                      #$(string-append "--target=" (%current-target-system)))
+                   #~())))
        #:phases
        (modify-phases %standard-phases
+         ;; Make sure pkg-config will be found.
+         ,@(if (%current-target-system)
+               `((add-before 'configure 'set-PKG-CONFIG
+                   (lambda _
+                     (setenv "PKG_CONFIG" ,(pkg-config-for-target)))))
+               '())
          (replace 'configure
            (lambda* (#:key inputs outputs configure-flags #:allow-other-keys)
              ;; The configure script does not accept environment variables as
@@ -395,8 +414,7 @@ in C/C++.")
                (chdir "run-configure-from-here")
                (setenv "SHELL" (which "sh"))
                (setenv "CONFIG_SHELL" (which "sh"))
-               (setenv "AUTOCONF" (string-append (assoc-ref inputs "autoconf")
-                                                 "/bin/autoconf"))
+               (setenv "AUTOCONF" (which "autoconf"))
                (apply invoke "../js/src/configure"
                       (cons (string-append "--prefix=" out)
                             configure-flags))
@@ -418,7 +436,7 @@ in C/C++.")
 (define-public mozjs-78
   (package
     (inherit mozjs-60)
-    (version "78.13.0")
+    (version "78.15.0")
     (source (origin
               (method url-fetch)
               ;; TODO: Switch to IceCat source once available on ftp.gnu.org.
@@ -427,7 +445,7 @@ in C/C++.")
                                   version "esr.source.tar.xz"))
               (sha256
                (base32
-                "0v2g5clp9qlsbqfjb6yz614nq8x8c4k1p6m4axyv6g27qbiaky8r"))))
+                "0l91cxdc5v9fps79ckb1kid4gw6v5qng1jd9zvaacwaiv628shx4"))))
     (arguments
      `(#:imported-modules ,%cargo-utils-modules ;for `generate-all-checksums'
        #:modules ((guix build cargo-utils)
@@ -445,7 +463,10 @@ in C/C++.")
          "--enable-hardening"
          "--enable-optimize"
          "--enable-release"
-         "--enable-rust-simd"
+         ;; FIXME: rust-simd is disabled otherwise the build fails with
+         ;; "error: `[u32; 64]` is forbidden as the type of a const generic
+         ;; parameter".
+         "--disable-rust-simd"
          "--enable-readline"
          "--enable-shared-js"
          "--with-system-icu"
@@ -477,8 +498,7 @@ in C/C++.")
                (chdir "run-configure-from-here")
                (setenv "SHELL" (which "sh"))
                (setenv "CONFIG_SHELL" (which "sh"))
-               (setenv "AUTOCONF" (string-append (assoc-ref inputs "autoconf")
-                                                 "/bin/autoconf"))
+               (setenv "AUTOCONF" (which "autoconf"))
                (apply invoke "../js/src/configure"
                       (cons (string-append "--prefix=" out)
                             configure-flags))
@@ -554,18 +574,16 @@ in C/C++.")
        ("rust" ,rust)
        ("cargo" ,rust "cargo")))
     (inputs
-     `(("icu4c" ,icu4c-68)
-       ("readline" ,readline)
-       ("zlib" ,zlib)))))
+     (list icu4c readline zlib))))
 
 (define mozilla-compare-locales
   (origin
     (method hg-fetch)
     (uri (hg-reference
           (url "https://hg.mozilla.org/l10n/compare-locales/")
-          (changeset "RELEASE_8_0_0")))
+          (changeset "RELEASE_8_1_0")))
     (file-name "mozilla-compare-locales")
-    (sha256 (base32 "0052wq92sg4i776x407b5838jx9h3phl9xy69m2q34f31n3gdyk2"))))
+    (sha256 (base32 "00bpkaqf2ng1nn9ajyb5mli0jq58q5fm2n3yy90jy0hp4q2gbs50"))))
 
 (define (mozilla-locale locale changeset hash-string)
   (origin
@@ -585,108 +603,110 @@ in C/C++.")
   (mozilla-locales
    ;;                      sha256                            changeset    locale
    ;;---------------------------------------------------------------------------
-   ("1q1p7nl97478hkf1msbbcdh98k6fn87xwqihbw8np00ll5gk9k4v" "97cf3c155484" "ach")
-   ("0sajpblp639l448xywx7xlybjr5dm0rfrzx511a8pa9wn7dma4mf" "46929b4dda4e" "af")
-   ("04s756aaf1yyli1dn1vfdjymgyjs1pz2n7jvz76j27x4nzdgss7l" "96ffd2b04ba3" "an")
-   ("16nw7slm7irsnjf81r6zl273kbzri8sdbimzgzxwm0vh6xr61rgs" "1c4231166ddf" "ar")
-   ("0i0qrj4j8zjv55cisbmr21dp8mz933hc9wkpn3abz5k5pn84gpry" "bc4384b8be78" "ast")
-   ("1r77mmwg9x1jfa7g5lqa31rgyfrnix1zj80ibn5rq9gyhhsdrwbd" "dd56aead51fa" "az")
-   ("1kzjpy5bnvps8di72ksynhbhc9bpw1ml6hvphm74z8dz55ai4c18" "9d2bff64ddfb" "be")
-   ("1fygvjgph3siknfm7l0fh9y4ava72z1rxkip1zgmcdgq7jz8wzpf" "3808f4fe4db6" "bg")
-   ("1x9nlqia441xh04rhkmkw6qrgpwnyqw0grrf5n2qw96939wnmgl7" "5ca8752ed8df" "bn")
-   ("18yyxqzab44bgqx7h052d5nxyhv0l5bidgr16z1b3ak2crsfyx9q" "4c5d30ca9bf2" "br")
-   ("11bschjz7pgsm4r1qan5l4s3nkzm5jb0kivpp186wd1xsjci5bjb" "cf2478a7eae1" "bs")
-   ("12bak64nl6qi092l55xv330vh38mfsicrrf4wi693nn7zqb3mbpw" "4aa2cc349211" "ca")
-   ("0p97d7pnxqs971rr5c57i6cw3mx1mp3iasa0xdmdk0zpz9pjd3s4" "806914072144" "ca-valencia")
-   ("1rligf98h9r16mw3r3n5jalzi74xn2dnh6hkiixp7s2bvhjicwa4" "db2163383129" "cak")
-   ("18y5j8ljh72mj2nbx0m64mi3fyjbwyx992i004sv3zvs4d4z18w4" "d1d09eedddde" "cs")
-   ("12i4m9q6f8sl8arm8ja4gs4sl9m59p3kddlqi68srpz9mk66rqxz" "1caf58c64227" "cy")
-   ("16wacsd23zd4j0yi6vbj033wylia8hlpswx949x5hy1h9817j4vn" "9ef3b56aa243" "da")
-   ("1ddxnqpfi1wnciwmzkvvjinb51h22bg70r0dn7db17q64p4271rk" "a050b0eaec0a" "de")
-   ("0gw5h52rw3bc2lwffnv845sjwwj22gmabchmpa1rw2y6087dc7zk" "613135cb0759" "dsb")
-   ("0v17da37w1kbs73i6xql4c9xng6rfachyylpy3w8hpibpvi7i30n" "903db7c76b31" "el")
-   ("0ky1nj4kp070nriw0igsa64l39plcv2365zl8lqpbydyp6clwc3m" "6bb74673e9aa" "en-CA")
-   ("15jck6si2l4h5lrs8zjx56y97p70njpi26nnq6xfmvj1dk5qb4g2" "c06bd83a9295" "en-GB")
-   ("1gc400n8j8qk70vdw7fkf4m9yviia35cmj6361pxnyvsjrgm4qvm" "ae0fda5114c4" "eo")
-   ("0y01lahdrd3krsh6nrr3iw36r2x4advh5qw54vf92w11l3aiyvfz" "0c294dc9ce40" "es-AR")
-   ("16jjbsfa62dxk36ccziv7nmh26c1s0b05960in6zs5nnfrv4yh35" "7c30b2981fb4" "es-CL")
-   ("0qh8c8f8dsv1v56n1mcpn84l39bpnqfl8v8iacq12zh322srr549" "ad1444f4f833" "es-ES")
-   ("1vh3hm5r4ch6mk3ymbk12b9rppwc75fmbi0i7cml82kxsi77bzw5" "0a26cdb23536" "es-MX")
-   ("159l92jxx48lgba1g8ig3mdzhwsf3jpg3nx1g9blq4majk5hqr6q" "65a38a830795" "et")
-   ("1ha8y1wbgb66dqm26x1q2xwygy7bblkjz40y9vh5d2qlpr3fn0av" "21e0930b221d" "eu")
-   ("0rq4pcw6klm0bbljm1wdfvna8bpa35cm47hh2s63i2xdax4scahf" "5a4bb020cf09" "fa")
-   ("1py2594gsvpgrxnplz278ffb7grsf384kzjskrl1zyps0jw8fb1x" "4a4f712cd4aa" "ff")
-   ("1dyd55ngsglp1w2gh0yaacwb0vsq23gdvnj76f2x6g39h1li9s0z" "9c51cd915e2b" "fi")
-   ("0kimwivpq6pr63jh1k9fszsv8bi8vns3scg76mmnvbhh2ca8q7wj" "4f9e24a696ee" "fr")
-   ("1sbbnnp12lgy5qan2kix02942830b1969bd7jxrv7piwqfch9i06" "9e21a0eeb5b1" "fy-NL")
-   ("0dsvvyfrzkx5h44gqgdci7arb8h4lq48w20cnr8fc7j17grvnkzz" "999a995bc09d" "ga-IE")
-   ("1487msbsgrfzmyijhf6a4wbqdjpd7b7ki9nwrjjjjlnbw0h0ljpb" "6a9ddcab3240" "gd")
-   ("1kzc4fwr18kgisdzba2acj1ag8mxbifqpk5p30jv68nmvqfsvl8d" "51eb5e352db9" "gl")
-   ("13gy3wn44kcxr7j3sbl69fp415875f4vb0gm91hx0fysqlvryhcs" "b9de1ffe3224" "gn")
-   ("0w5nvzpjn5vr35c1852rlff581vpy71nc096cz125852kyqkzkc3" "5b3307475ada" "gu-IN")
-   ("1ycakc4qpy9vcy50j3ricryjfnjr9v3a5ijj6bbfl4y6aks157fy" "c742df968ffd" "he")
-   ("1b2jf83c500wm5wcdnijq0b7y4m8n6271smq8pygahn5nq17f0gq" "1a3039a52b8a" "hi-IN")
-   ("19bbw8ix5m83cf4yarcmjl7jqa8xfabwqnh3nj6vi52rwvn7whk5" "8dc50e269ef3" "hr")
-   ("12rrsvgg6bb2h8fhni7jbx8pv983q8ym5fhfjim957n9q2yp5db6" "67e40f48dec7" "hsb")
-   ("0apyh713p3hrlj8041xwblcssahbmsqp9v9hbmb50ayf4z850kr1" "40073a597b1b" "hu")
-   ("0q0r076lq250d3vmnz9d92wj137c2v8i362c2avmkgp5zr3mcl0z" "2ea33335afdb" "hy-AM")
-   ("0qza33gdc1i9259dwd2f7vd78s0a6rg34aqdkhcn7f2l6ybw6xd6" "930041db15eb" "ia")
-   ("1211h0gp7gianh3qf76w04gfzk4n2bnyc9i8dviyz0vh4cjbx11m" "08811a49b41c" "id")
-   ("12lcr841g1j7453s7gb51vrvxmshx4ha3h1jx4vh8wr891xv8l6a" "2f7a8d31e0ba" "is")
-   ("1x585g0r2kcv0d3phnxx85bk5g0pi1yl0hwp4idv19yc9hslr04s" "188357cc04b4" "it")
-   ("09v35g9v7j6x0p1hggydm3a1rmq2fh4z7g1l88z3w5k6wq2nhj1b" "45cee0ba4771" "ja")
-   ("0prs3vycfvvaffjigdgyxiq41ak2rc34lnan5a6cwdqjgy7z450s" "d60a19d9bf17" "ja-JP-mac")
-   ("1nskzm8rgczrbgcxlzzq5zqdfd456ad0cylq27nf0wjiyq6kjzcm" "00cb00e78672" "ka")
-   ("0g6zznmhiam172nm7g2qzfpk415mna8kiihm73z2sdns64xb3ymg" "77a293a4bced" "kab")
-   ("17dld9lrym7rpvpvnkssivp4wx1f11zpk86wczbq1h52qgd70p55" "2c9b33a56d5d" "kk")
-   ("1nlzl8930c8ql3yq425wyqlxvq8arrjv20xpm5g7yfxd54av89ac" "9cddd42af05c" "km")
-   ("07hkrcdksvrqk816yimd036dlw15nc4sjk4gmw16ywbp093v0mqq" "e0c2969a8398" "kn")
-   ("08aqggvk3qbv5bzks9i1iba9akhkpm01d2c9k0zf41mpr2r5yfg2" "827567d0dafc" "ko")
-   ("0vagaiwy80bs1k3gkacshlzb5zchkcshx0ypwirvayc63sw4yl8l" "694b2a24e868" "lij")
-   ("1r43kp1kzahrbza0hiyavqplk9h08pzsb6rpjy79jr6l1iqb89sy" "d6728db7e060" "lt")
-   ("0sq2wbsj79xl7fi454k6q5xdhxyck1whjz315rv37vphqpx86b9b" "61e9b33f4d94" "lv")
-   ("0q8jxg1af22hs9wjdf0jd3bqk4rafxyzvsjl35k75am7l2y1fl3c" "9e482f6dd72c" "mk")
-   ("1zsfzjrzbc58d30a9yz12h5vphywgpw8xg6y6zn3677a785dvr20" "1fd2763336a4" "mr")
-   ("1rzygkkpn1a59daygd3hdaqph2np6sqvpgh68j0xr4il958ymnsm" "67ddab62dab4" "ms")
-   ("16jp6w5gizfxs7jvncg3ly13m59vqvh4rlmjd0q23m5g5ff9sklc" "3ed015b51bf3" "my")
-   ("1wfv023j67lb4iyf49fsknwm4z3xy0xqcf25b2nzanggxj26n01x" "d01801233a8f" "nb-NO")
-   ("1946vfia58vbjfippb5pfsskbjj95w7hb340smn6ry2vmza99mxp" "582defb08fb2" "ne-NP")
-   ("12w5ywh4c3s55y3zqc48cp1gcpwwjg444yfh1bghhhb9ni1xkh5i" "05f6359a29a6" "nl")
-   ("17jb076320cgkw1ypwmws2vjxsqlv2ww8aaisa3j334vbrw1m4zx" "50b41a1ddded" "nn-NO")
-   ("1y840j0v5zdgj94cbacy6j1snf44rynmzxq3yk8i26arcar62akl" "a6a138531a44" "oc")
-   ("0jq1hq4xhqxpa26r8pb1bgbaljgfkhn9l6p5pbnslkllpbh70q6l" "e70a3afaef25" "pa-IN")
-   ("1hih138skwy2gb8q10ngg6zalrk3aa3d549mg79gqzxbi5zy19fw" "e035f33389eb" "pl")
-   ("1hhif4hx4k351wm1bzykzycfzb5q8msxmiwh5r1cy32rh8wkxwhh" "54098495f37f" "pt-BR")
-   ("0gkjs12rxjml1m3mljskpz1gr6aph0c31nwpwdqybfg54w9qslib" "3fdf021f624e" "pt-PT")
-   ("0anyvwd9v6mr8y3ww33s6qnxkawqn5lz65vrxx3m3kzky63ai1xk" "794f9374eb87" "rm")
-   ("1p4drj25gsfv7lwgm5saazh38iqrh53952n8i4bmxpn0nadbm2n5" "71ce18bcf6cc" "ro")
-   ("17yssf4axd3zvncl4ka4wkfnwcn0z0arp3390vb9cps67na29p36" "3a9587227699" "ru")
-   ("0xk6rksspcw1222v4rgk5a6gzrpx64k29hm7p9qkqwd70s34yj46" "c020582a72ce" "si")
-   ("1ax5ibydyn7sj208r66zcxlcr8dxdqrw28vqyjif4jx583rp4lfp" "745a699b7f51" "sk")
-   ("13rin7hm1dv8g0hbcv8mp2hiwpk1k5bhzvkqpqajkkik4lx523mc" "8e437e2351ef" "sl")
-   ("0yh5jkl5zw3f7x1w2w6zfj3dyvcl4wj1zv4di7qsq2nl2yyizf7x" "2d99e2eff94f" "son")
-   ("0vzq7s27jsdbw5k59wfykysg1kd8w229ab5d4zjdf30l59igkahh" "69bbdf07bd80" "sq")
-   ("1mwivvs8vrk6vjq6i33kwlrlisra7dy35521ayps9p2rz2dll4rr" "215df5c5125c" "sr")
-   ("0g97yz1rg5cfflj8vvq3sqliyvm06x818z9yldfh5rjg1y6n9fjd" "8be00a1a50d4" "sv-SE")
-   ("0ii02jn3lh2i6d0s95whx9aj6w3x8axc7w1rlzj0lc2s9n52krz3" "170a84339dbe" "ta")
-   ("1ss7symad2crapxjqc0xhc0n17l79r5vf7flvkgk7npjky4vb7nv" "72a79a304f7f" "te")
-   ("11iqmg8zamgscnvs4n2xpw3g9azn6w38qs313wiwm86pyx6694ss" "8e91ce3064c5" "th")
-   ("1zgkvn9flb8by62ip9r3gmpgxwgkww1zhml5mwa0djq3ppfdgi1c" "0f914d0cda56" "tl")
-   ("1filkhdak6dbrd83q602x1qw1703nlm53nm9gcyab8s16gsx6ylz" "62ca6a8eaeba" "tr")
-   ("0cgagdy0ixprk3knczdmkqxkmx4ybmshhh0956kxbd0iab0dfcf6" "f110ccac4cde" "trs")
-   ("1f1ghk67zwnwc5x3nk82vcv94nf8glngkfya1hg074q3088sj9pa" "56c0102d5f1c" "uk")
-   ("0iyw1b2jjylkdwxv9sxvj4ikxl64sx612b2dvvmf1di8bw86w74r" "7d53bce5ae98" "ur")
-   ("1q83cp5pfgs8l03zirwi8r5qp8qyh4zvxdx1ilgaqqlyg42yql7c" "9b500e1a054d" "uz")
-   ("1d4nkybz2hk64ay04k965b9lc5nhhpmzcs5ww3b6q4n93rf9c2z7" "2a000025928a" "vi")
-   ("1cnrsfnyl3sw3sxsggmjwydvphb2diy0vzknvxdhpnvq3ln18hga" "74724087c25b" "xh")
-   ("1j6l66v1xw27z8w78mpsnmqgv8m277mf4r0hgqcrb4zx7xc2vqyy" "527e5e090608" "zh-CN")
-   ("1frwx35klpyz3sdwrkz7945ivb2dwaawhhyfnz4092h9hn7rc4ky" "6cd366ad2947" "zh-TW")))
+   ("0f2lkv79gqf46f74905mab3zwyz1532chxlf9d28s548p1hw6lv9" "8312cd2e0777" "ach")
+   ("1v5jpmd0b04mizm9pjffp4r9q121vpq3yzkkxcgmrcwj4gc5jb2y" "21bf766c19d8" "af")
+   ("1fqjiq2la543z5pbbvd9kfs0wdc2phmqjbxascfsak854qy1z9f9" "34b6a4f0790d" "an")
+   ("0pl6j99xnali25glyr3g9fmj67v9vqmhd9k74i97f8q5n4xmv3ym" "513c3e8dac97" "ar")
+   ("0d1fbk9jcai19pi8b7i4y4r0gscqi1inr9dbahd6h0xbxfwc0zif" "19ca0cd0d1bf" "ast")
+   ("08f9b63wxxy28zaimjn1ab9w51bvrarc3pp75s7v6kzm5bk1jwic" "44aa0dad7964" "az")
+   ("15pksy9bgaxcbcnvvp8jwqnqxvvhq9vnljpai6jlh52yyrsglbwi" "5e4499355167" "be")
+   ("0gdg84jp1i4il4nc6gwaswdhc4ljbb9inyip7vhkng09v3pmwm0h" "98d006107851" "bg")
+   ("0i6vl0ag74phj4l38cvds1ds3jjdal1c8d7hy6pf4aqrp4ai32mh" "2ca52cbb680a" "bn")
+   ("16yavargwq8rhipzpmrrvyh68g3a6disz9g5m8xbhxvixhcsi5fr" "ce92556a0a90" "br")
+   ("1512dzp394pj66i13nsz76qh6fmjpz7r7fmvk8d0h7pjk0d6n0dy" "1c79dabdb120" "bs")
+   ("19wg0kbr2ihbn4lscsxg9agz04r8bsih4692vfgb6nyn1z8vx2i0" "a22912c01617" "ca")
+   ("1ixpzjb7caq1d9c7c044rxg3ymxs3hjw120kq85v004jrrb4d9c6" "34bf3fd631d4" "ca-valencia")
+   ("1abizdmd1c56syni1aanwwrfvmgzz25fmimbj2324bcw801ma9h0" "e2e4ba2c37bc" "cak")
+   ("0wgrg2wiz1jcj52nd4zl4shfkjhbngfj6p1gw1ywj266hk8g6pvw" "a60792bff6ff" "cs")
+   ("132f29111jd2z9yxpakkyri80mi2ggnik6zxaxqrp4vlcrd1fxd2" "66369fcad8c7" "cy")
+   ("04lpic3cxdj1imcwjkbk81avp9dpa1c9b1zcchrr1a4vyy4yfjpy" "af198d43f7d6" "da")
+   ("1h0rkwlsqls8k1qi1y68plw6xk0z2c5xc2y4nqywiirl71yz7fi5" "816fcef20c05" "de")
+   ("11lzdyl1h42zb1x2yxiv3r0wih8jy1gr0gzs5d1isdq53sa9cqnq" "962e5a544415" "dsb")
+   ("146jgrhl41k6zbxg58hxh1s088padsjz7ny8nm59i9i8d00jpv0a" "e7c49fd88463" "el")
+   ("1qppr44hdnrb1z1igcd1p0w5sy9vpihzilkl2w44y0v0v9rigppv" "5a0e35b08a48" "en-CA")
+   ("1v2irfms24cx9g5s6r1glmp2c000wi91axyca1pn37s7c01r0n4b" "72f8c5d8305d" "en-GB")
+   ("1y0rbbmax1w6jy4jacy27xgy4aqnd43izysw8qjwm0qhhfjvf3xh" "40994fca693d" "eo")
+   ("0kmjvinqpb3y81mqda1qq8k202aa36as9z1z775745bx6sbvkggz" "6cf3c836995d" "es-AR")
+   ("06rvd1z3l0r7hwnsnw90i0f5j2ysbv6wd3cl64g0bgifmwjk75hi" "8727dda3935e" "es-CL")
+   ("0gzw1rn9nzpgcrrc10indnbqqpax87azczrfxv8mn5n56j734hc0" "5351aba49895" "es-ES")
+   ("0bnmgisxfkb6rb12avhipbsj1yr0dyv56qjj9471gnc2ppq7k3c9" "dd834a4af402" "es-MX")
+   ("1951975h9w813qxanbk3frjz7c8knzx5rvq9i82j9i6x6a3fh6fi" "1f2150796079" "et")
+   ("1vkb5rd0k6vh9dbll3fhyzg8rfpkxxkd2rxwf66b8l3hg4fqd7f2" "2911663f4a7c" "eu")
+   ("1cj9zblfp94h86m7zd762bfmcfz0yxc1q4ra35s4wnnlqajarzwj" "04ec3c3bbe92" "fa")
+   ("1ininsyzaj7xd8ppmklm3zglgw1i0nhdy43iiyva32hb592zxy4m" "0cf866f9bc4e" "ff")
+   ("1hc308d71iygarrpliv7pxjz49gxwqg10d0pv8j4sbb2pw39bprl" "04a600fc54a4" "fi")
+   ("02nl54db9130rg59wmrrnh0z726fg5ir1njfcnhxagb4g5b7s69f" "64a3576df276" "fr")
+   ("1qbby23qlkxjz3vwlk8pd2w1w4cxdff8cq7j0ipk44mijkxkry0c" "c84177dfa254" "fy-NL")
+   ("1x23pg36ld5qnrmdn149rkl85ia8lmiqbzcac2bm0iqprnjdszii" "31590cffac56" "ga-IE")
+   ("005fpyr1lvw23dja3yrzx4y8wdih7vx6ljjpisf4pd3k5zai4x81" "ba4f274ac4a1" "gd")
+   ("0kdlb5q74n0fl5fxfy873s392kry69dmdl8b4gvqdyh5sy66vsqm" "56b41bdcd401" "gl")
+   ("0v8r8b0nrk1l4xipzhq16klmh0pinzcrma0s0gyhgzqqli6z7aym" "59e2afb65c08" "gn")
+   ("1grb1lq1f9p5jxgh9v78jl1wswxmsqxkcssm35l30k6y24pglr0m" "33b4409fb615" "gu-IN")
+   ("172fg55y8l90ix4c8s5x7f8mg6rc7779p6l852cnnkfqjgqa5a5f" "92f9f8238189" "he")
+   ("0i52nmg0yv3y1y3rkinxcyh51mgjksk7c3jlc8014801m3zvyxj7" "00090f7a2a3f" "hi-IN")
+   ("074q8n00yq54kzk632dwbs64r0sygvybbvwpd6hbvfpn38lz8hxf" "6e4a3fdc01f3" "hr")
+   ("1jxiz8zyxbpnwgk5xkwfxlr5f1zfyc88jcsajy8wcaifdkld3cwn" "7fd9bc25e49d" "hsb")
+   ("0ca11pmkzyd9ccrnrbmk0jrpcb03k88v4zivxblnxj4w03g0hyhq" "ce3b378ce950" "hu")
+   ("1yszljbh8f7w6lckfw22jwximy3yhis4430lfynfb8lh9nm0fw59" "c91a4a3e8821" "hy-AM")
+   ("0hhl8b8szqlhjdxhsa81zmgr303kr0jx5d6rzbi840qwf01h12sz" "4f235acc839e" "ia")
+   ("063yfk3nz3kignbri7r9sr3jwr5p9yyqc6sckgqs94hx6lvc355p" "fface86a34e4" "id")
+   ("1qszxkgliall4haaq6v0xayxikq43ddcdsn1d4m1mwyp7gdpbry5" "5978ae767b44" "is")
+   ("1fsfz9iz5pdd5r9ckdal6grvddchsc4r3r8gn4w6f2bja6vpbs05" "0c7d2a0e1304" "it")
+   ("1phkw0apiicgbw2nq3g392xncw1v2c4yac595h3nchs4q6rp9pd9" "1c923f3e88b9" "ja")
+   ("1y4gc4l6g72nphhsw4aqhcl80a7wi9qdy61h66c6jc6h14i7278d" "66f700940cfa" "ja-JP-mac")
+   ("0iqwj0y19zqcdclnn92z490s1g9vh2qr9gmkyfnpsz69llxidx1j" "49b4a7c6bb2c" "ka")
+   ("111nm2khff0zxnqqfc68rbi3j0b1nx5r4xai7b8yymyv1i0qbsxd" "4854facbd60b" "kab")
+   ("12p7lg2p6pcqdlb4bqbz5isxilw2r9vb8344sh8zrvv9cb9jq04f" "d2fda8a1b287" "kk")
+   ("142vpw9npqgc8b5zcg5cy2lh07s4mg8xfbaymg44fb4j3s6agw88" "3a5a1cae9b93" "km")
+   ("00v1sd2byj2ksxw1020z142cdlxa7ri2v1rzjrhay9l465bj3k8x" "6ed122b33cac" "kn")
+   ("1s07yhwzpxj0l5vj5lzbvgw115sjx1g2zgbqca5wln95dds39npl" "49bc07645a47" "ko")
+   ("1b4brfww0w7x1h3ff19i6xi8xq2cb1hxysilira6yq4rb6vhlmly" "93f04df12616" "lij")
+   ("1i30my0bbgm9z02rxxi7x4vc69bs3bnjs9l2q6jd8xvs1ga3vc7n" "e1f4e0d87509" "lt")
+   ("1bjh4xlx6562hxq527cqcn4b5295dsdpwn4c4y5ci902nlh6fc8l" "daea4ba4e7f4" "lv")
+   ("0vig42slcx6bhpisyc1bnyklr95lbv7vqd1ckiywp5c5qzfa9afi" "0c4ca0f4fc17" "mk")
+   ("10qfnkqi2snmgvm4vcrmp2489klchv3hn2c4rmkdhi5bilfk42jx" "9be8d5951976" "mr")
+   ("1bkn8ds3fyz710ck4gg4g5vpv23bi573ssm9xbiyl8y59pvbig9b" "0f44d0bcfda2" "ms")
+   ("1j9af3axbijn0s8y96310mvgaq5a36m0r3ij550jv5bv52862crj" "ccbf0c4355d6" "my")
+   ("0lspnp9jn3rrgz3djnmc0qrb6ymigvqnr3fb0jbhmf83r4yfs8z1" "a6cf2c6e3594" "nb-NO")
+   ("1xp2884m9gqm9gaakc747bd9j55wssrh3qsf4y4k02ijh08sfmwb" "c1636a1a7507" "ne-NP")
+   ("0y1fxp9pxia6x2wxdharh2ynvzdqcmzpya1gdb89pcv5qyrzqgcl" "60ed1c2397a6" "nl")
+   ("1nbp924p7fp2c76ym71wp34vk96z89i4g2rfgpsi54cgv42a6vgq" "a7f9a3d35875" "nn-NO")
+   ("1yrmhyvb6skypcyvi6j3py51sdkq9vn35zkryx6rdp8ygqwm1va7" "9ac29828960e" "oc")
+   ("0rn2414ji1icar627arf5rjwl9r9vxhznbfsyxgrmrf0p6dp72fv" "87720cc32205" "pa-IN")
+   ("09lam6yaprc8zyisq0pcdj4afpg930c2x3x47gdxnqfyhmcfygs7" "56b2c592ffba" "pl")
+   ("0mbc1a8wvjs3k928qh0k800d230251i0rw0myhdpc6mk3xjna7i5" "89f1b173c9b1" "pt-BR")
+   ("1v1qa5slllz78222rlqr4b8k7c8dapmx8d7s5nb90wdffic0zcqy" "27adc5dad781" "pt-PT")
+   ("04k6h5d7c740lz1hx1vavj6p0fmhgn9mm3nwvk4p9iccy5nw5pmf" "83e2e4833fc3" "rm")
+   ("0f0hz792wr17mgi6n190dliqx67479aqg3y2ak0jg0fiz2c8qr7p" "69cdc288966f" "ro")
+   ("17yngj0v30687m7fa1ls0g86vjg8jzxs7bnsca91jpxf3ij44xp6" "03046775600f" "ru")
+   ("1fvz23nphs9i4gdkx9fcy5ahdk2f879281pchclwi0qlciq7digr" "61ea93a50fff" "sco")
+   ("0yc1iwqbnpnf1i7yz3zqrx6g8pinc7l53pvbczywfkq3rz6wmmf5" "2b134d24c046" "si")
+   ("0kizljksn2vn4yw7qlv7c8h2m75f7n9ddg6n6ag3hwxxip83hn4y" "6d69c24dc8db" "sk")
+   ("1ll936b18wy464623jc5smf3c6dpimh0qwn28a991h7zcw31n3kp" "29e195d1d160" "sl")
+   ("14w9n994z9gf0wx7vrqisyxkngvhmmnayx8r0vwiq8k7jy81sxlm" "60a3b235fe1d" "son")
+   ("0z7bcfvq6x6dxf4d4bbjsg36r5npkr89087b0j360ljampk6c2fn" "8588cbc89847" "sq")
+   ("1fcq9g89lhzckzr2qb6x0w0z6q486n9jdqfi6h70dx8b069b3jfj" "198f7e89f10d" "sr")
+   ("0ap3m1sbibnaj9s2l139m7l8cc8s2ky4jlxwgzbxdzvqxfz7n954" "b098e2ebc049" "sv-SE")
+   ("0k93gnwfs5mahb9vz1c65ddcbkav0cwhxnrww3qk7gcmn7q88gqk" "25951b964d5b" "szl")
+   ("0b0v5pcwvhvhg8vlzy26g3j0m1r8svrpq07hq0q7lxldwlb48phz" "94659c83c9d8" "ta")
+   ("1v35cl6m3ikzsriq6zkjzjs3p9bhl8zmbp2gl14mga1f1zy4kcah" "eb59646a5d36" "te")
+   ("0y3r30mjgxngjraqmf5cm00kgqx2pvhbvy8sfxb3fhypv9vda3yr" "10d257301a2d" "th")
+   ("1inyqk495py20jwjvs4yl0n5ncf3hhb896bs1lwfsgpvbvr5hbq1" "9be6adca0e51" "tl")
+   ("0vsirjs655cia9n8dys2r84bvg303hcxkk2w6a9j3dkbifq5ymk6" "51354c936bf6" "tr")
+   ("050x882c0ywil290k4g861njw70ffw2y55dqk3w0kffi972mm909" "d7510f2d01dc" "trs")
+   ("001ykwxkwibavbi1k42b1hmysb3gmrwcs68zmw96m1vc80p29nz1" "4d1fa878042b" "uk")
+   ("0lsz6jlmmsqdg47pdx8b1djjvcavi0wlyr0mkpyhjgpginag21zx" "ad3035f28183" "ur")
+   ("0d3ggm3q76pkpg4n3lz2ji4pbb47n885byqxbp7sk6n9vlgzir7l" "8ea7a5a051db" "uz")
+   ("0v7d8y6xsr6yf2s1sjxnsjmw0hdnj91f0w2da6spkifb52lmbv6v" "67fe2acb306f" "vi")
+   ("0j8l09vzqlw4zlkyp6wkh44c5gr1xgbcmnawks1zj7xz02ambwii" "abc22dfb6d84" "xh")
+   ("1c01pbyswixkjg42714fvfy33b09mpdbf4d8f8kcs88c86jpf07z" "d6d6f9bb6113" "zh-CN")
+   ("0yq8fqdz862pnlbvfsqfc152rhpsqgncvp8bqkd653mdfv4qkwr4" "0cbdc5f1a048" "zh-TW")))
 
 ;; XXXX: Workaround 'snippet' limitations.
 (define computed-origin-method (@@ (guix packages) computed-origin-method))
 
-(define %icecat-version "78.14.0-guix0-preview1")
-(define %icecat-build-id "20210907000000") ;must be of the form YYYYMMDDhhmmss
+(define %icecat-version "91.5.0-guix0-preview1")
+(define %icecat-build-id "20220111000000") ;must be of the form YYYYMMDDhhmmss
 
 ;; 'icecat-source' is a "computed" origin that generates an IceCat tarball
 ;; from the corresponding upstream Firefox ESR tarball, using the 'makeicecat'
@@ -708,11 +728,11 @@ in C/C++.")
                   "firefox-" upstream-firefox-version ".source.tar.xz"))
             (sha256
              (base32
-              "1ymjlg6p23c510m764pqr4sldrvk0c7g490a29js2cqc2nj2h3ma"))))
+              "04y8nj1f065b3dn354f1ns3cm9xp4kljr5ippvmfdqr7cb4xjp7l"))))
 
-         (upstream-icecat-base-version "78.7.0") ; maybe older than base-version
+         (upstream-icecat-base-version "91.5.0") ; maybe older than base-version
          ;;(gnuzilla-commit (string-append "v" upstream-icecat-base-version))
-         (gnuzilla-commit "abfe5eebaca3c2787f1a9505669393674493c177")
+         (gnuzilla-commit "c0a504578cb694522c65bb6c36396df8142d4a2a")
          (gnuzilla-source
           (origin
             (method git-fetch)
@@ -724,7 +744,7 @@ in C/C++.")
                                       (string-take gnuzilla-commit 8)))
             (sha256
              (base32
-              "00ws3540x5whpicc5fx4k949ff73cqvajz6jp13ahn49wqdads47"))))
+              "016g8vdr6w6six4f705cmbdrfknmy4bk1qjjrvsdpah4bf6c2s2c"))))
 
          ;; 'search-patch' returns either a valid file name or #f, so wrap it
          ;; in 'assume-valid-file-name' to avoid 'local-file' warnings.
@@ -749,10 +769,10 @@ in C/C++.")
                     (icecat-dir
                      (string-append "icecat-" #$%icecat-version)))
 
-                (mkdir "/tmp/bin")
                 (set-path-environment-variable
                  "PATH" '("bin")
-                 (list "/tmp"
+                 (list #+rename
+                       #+python
                        #+(canonical-package bash)
                        #+(canonical-package coreutils)
                        #+(canonical-package findutils)
@@ -762,11 +782,20 @@ in C/C++.")
                        #+(canonical-package grep)
                        #+(canonical-package bzip2)
                        #+(canonical-package gzip)
-                       #+(canonical-package tar)
-                       #+rename))
+                       #+(canonical-package tar)))
 
-                (symlink #+(file-append rename "/bin/rename")
-                         "/tmp/bin/prename")
+                (set-path-environment-variable
+                 "PYTHONPATH"
+                 (list #+(format #f "lib/python~a/site-packages"
+                                 (version-major+minor
+                                  (package-version python))))
+                 '#+(cons python-jsonschema
+                          (map second
+                               (package-transitive-propagated-inputs
+                                python-jsonschema))))
+
+                ;; Needed by the 'makeicecat' script.
+                (setenv "RENAME_CMD" "rename")
 
                 ;; We copy the gnuzilla source directory because it is
                 ;; read-only in 'gnuzilla-source', and the makeicecat script
@@ -783,20 +812,22 @@ in C/C++.")
                           "-p1" "--input" #+makeicecat-patch)
                   (patch-shebang "makeicecat")
                   (substitute* "makeicecat"
-                    (("^FFMAJOR=(.*)" all ffmajor)
+                    (("^readonly FFMAJOR=(.*)" all ffmajor)
                      (unless (string=? #$major-version
                                        (string-trim-both ffmajor))
                        ;; The makeicecat script cannot be expected to work
                        ;; properly on a different version of Firefox, even if
                        ;; no errors occur during execution.
                        (error "makeicecat major version mismatch"))
-                     (string-append "FFMAJOR=" #$major-version "\n"))
-                    (("^FFMINOR=.*")
-                     (string-append "FFMINOR=" #$minor-version "\n"))
-                    (("^FFSUB=.*")
-                     (string-append "FFSUB=" #$sub-version "\n"))
-                    (("^DATA=.*")
-                     "DATA=/tmp/gnuzilla/data\n")
+                     (string-append "readonly FFMAJOR=" #$major-version "\n"))
+                    (("^readonly FFMINOR=.*")
+                     (string-append "readonly FFMINOR=" #$minor-version "\n"))
+                    (("^readonly FFSUB=.*")
+                     (string-append "readonly FFSUB=" #$sub-version "\n"))
+                    (("^readonly DATADIR=.*")
+                     "readonly DATADIR=/tmp/gnuzilla/data\n")
+                    (("^readonly SOURCEDIR=.*")
+                     (string-append "readonly SOURCEDIR=" icecat-dir "\n"))
                     (("/bin/sed")
                      #+(file-append (canonical-package sed) "/bin/sed"))))
 
@@ -834,14 +865,15 @@ in C/C++.")
                                       #:log (%make-void-port "w"))
                     (delete-file "compare-locales/.gitignore")
                     (delete-file "compare-locales/.hgignore")
-                    (delete-file "compare-locales/.hgtags"))
+                    (delete-file "compare-locales/.hgtags")))
 
-                  (format #t "Running makeicecat script...~%")
-                  (force-output)
-                  (invoke "bash" "/tmp/gnuzilla/makeicecat"))
+                (format #t "Running makeicecat script...~%")
+                (force-output)
+                (invoke "bash" "/tmp/gnuzilla/makeicecat")
 
                 (format #t "Packing IceCat source tarball...~%")
                 (force-output)
+                (setenv "XZ_DEFAULTS" (string-join (%xz-parallel-args)))
                 (invoke "tar" "cfa" #$output
                         ;; Avoid non-determinism in the archive.  We set the
                         ;; mtime of files in the archive to early 1980 because
@@ -852,9 +884,7 @@ in C/C++.")
                         "--owner=root:0"
                         "--group=root:0"
                         "--sort=name"
-                        icecat-dir)
-
-                #t))))))))
+                        icecat-dir)))))))))
 
 (define-public icecat
   (package
@@ -872,12 +902,15 @@ in C/C++.")
        ("gtk+" ,gtk+)
        ("gtk+-2" ,gtk+-2)
        ;; UNBUNDLE-ME! ("graphite2" ,graphite2)
+       ("cairo" ,cairo)
        ("pango" ,pango)
        ("freetype" ,freetype)
+       ("font-dejavu" ,font-dejavu)
        ;; UNBUNDLE-ME! ("harfbuzz" ,harfbuzz)
        ("libcanberra" ,libcanberra)
        ("libgnome" ,libgnome)
        ("libjpeg-turbo" ,libjpeg-turbo)
+       ("libpng-apng" ,libpng-apng)
        ;; UNBUNDLE-ME! ("libogg" ,libogg)
        ;; UNBUNDLE-ME! ("libtheora" ,libtheora) ; wants theora-1.2, not yet released
        ;; UNBUNDLE-ME! ("libvorbis" ,libvorbis)
@@ -889,29 +922,31 @@ in C/C++.")
        ("libxt" ,libxt)
        ("libffi" ,libffi)
        ("ffmpeg" ,ffmpeg)
-       ;; UNBUNDLE-ME! ("libvpx" ,libvpx)
-       ("icu4c" ,icu4c-67)
+       ("libvpx" ,libvpx)
+       ("icu4c" ,icu4c)
        ("pixman" ,pixman)
        ("pulseaudio" ,pulseaudio)
        ("mesa" ,mesa)
+       ("pciutils" ,pciutils)
        ("mit-krb5" ,mit-krb5)
+       ("hunspell" ,hunspell)
+       ("libnotify" ,libnotify)
        ;; See <https://bugs.gnu.org/32833>
        ;;   and related comments in the 'remove-bundled-libraries' phase.
        ;; UNBUNDLE-ME! ("nspr" ,nspr)
        ;; UNBUNDLE-ME! ("nss" ,nss)
        ("shared-mime-info" ,shared-mime-info)
-       ;; UNBUNDLE-ME! ("sqlite" ,sqlite)
+       ("sqlite" ,sqlite)
        ("eudev" ,eudev)
        ("unzip" ,unzip)
        ("zip" ,zip)
-       ;; UNBUNDLE-ME! ("zlib" ,zlib)
-       ))
+       ("zlib" ,zlib)))
     (native-inputs
      ;; The following patches are specific to the Guix packaging of IceCat,
      ;; and therefore we prefer to leave them out of 'source', which should be
      ;; a tarball suitable for compilation on any system that IceCat supports.
      ;; (Bug fixes and security fixes, however, should go in 'source').
-     `(;; XXX TODO: Adapt these patches to IceCat 68.
+     `(;; XXX TODO: Adapt these patches to IceCat 91.
        ;; ("icecat-avoid-bundled-libraries.patch"
        ;;  ,(search-patch "icecat-avoid-bundled-libraries.patch"))
        ;; ("icecat-use-system-graphite2+harfbuzz.patch"
@@ -921,11 +956,11 @@ in C/C++.")
 
        ("patch" ,(canonical-package patch))
 
-       ("rust" ,rust-1.41)
-       ("cargo" ,rust-1.41 "cargo")
-       ("rust-cbindgen" ,rust-cbindgen-0.14)
-       ("llvm" ,llvm)
-       ("clang" ,clang)
+       ("rust" ,rust)
+       ("cargo" ,rust "cargo")
+       ("rust-cbindgen" ,rust-cbindgen-0.19)
+       ("llvm" ,llvm-11)
+       ("clang" ,clang-11)
        ("perl" ,perl)
        ("node" ,node)
        ("python" ,python)
@@ -934,16 +969,17 @@ in C/C++.")
        ("yasm" ,yasm)
        ("nasm" ,nasm)  ; XXX FIXME: only needed on x86_64 and i686
        ("pkg-config" ,pkg-config)
-       ("autoconf" ,autoconf-2.13)
+       ("m4" ,m4)
        ("which" ,which)))
     (arguments
-     `(#:tests? #f          ; no check target
-       #:out-of-source? #t  ; must be built outside of the source directory
+     `(#:tests? #f  ;not worth the cost
 
-       #:configure-flags `("--enable-default-toolkit=cairo-gtk3-wayland"
+       ;; Some dynamic lib was determined at runtime, so rpath check may fail.
+       #:validate-runpath? #f
 
+       #:configure-flags `("--enable-application=browser"
                            "--with-distribution-id=org.gnu"
-
+                           "--enable-geckodriver"
                            ;; Do not require addons in the global app or
                            ;; system directories to be signed by Mozilla.
                            "--with-unsigned-addon-scopes=app,system"
@@ -961,6 +997,12 @@ in C/C++.")
                            "--disable-debug"
                            "--disable-debug-symbols"
 
+                           "--enable-rust-simd"
+                           "--enable-release"
+                           "--enable-optimize"
+                           "--enable-strip"
+                           "--disable-elf-hack"
+
                            ;; Clang is needed to build Stylo, Mozilla's new
                            ;; CSS engine.  We must specify the clang paths
                            ;; manually, because otherwise the Mozilla build
@@ -981,7 +1023,8 @@ in C/C++.")
 
                            ;; Avoid bundled libraries.
                            "--with-system-jpeg"        ; must be libjpeg-turbo
-                           ;; UNBUNDLE-ME! "--with-system-zlib"
+                           "--with-system-png"         ; must be libpng-apng
+                           "--with-system-zlib"
                            ;; UNBUNDLE-ME! "--with-system-bz2"
                            ;; UNBUNDLE-ME! "--with-system-libevent"
                            ;; UNBUNDLE-ME! "--with-system-ogg"
@@ -1001,26 +1044,14 @@ in C/C++.")
                            "--enable-system-pixman"
                            "--enable-system-ffi"
                            ;; UNBUNDLE-ME! "--enable-system-sqlite"
-
-                           ;; Fails with "--with-system-png won't work because
-                           ;; the system's libpng doesn't have APNG support".
-                           ;; According to
-                           ;; http://sourceforge.net/projects/libpng-apng/ ,
-                           ;; "the Animated Portable Network Graphics (APNG)
-                           ;; is an unofficial extension of the Portable
-                           ;; Network Graphics (PNG) format";
-                           ;; we probably do not wish to support it.
-                           ;; "--with-system-png"
                            )
 
        #:imported-modules ,%cargo-utils-modules ;for `generate-all-checksums'
 
        #:modules ((ice-9 ftw)
-                  (ice-9 rdelim)
-                  (ice-9 regex)
                   (ice-9 match)
-                  (srfi srfi-34)
-                  (srfi srfi-35)
+                  (srfi srfi-1)
+                  (srfi srfi-26)
                   (rnrs bytevectors)
                   (rnrs io ports)
                   (guix elf)
@@ -1040,8 +1071,7 @@ in C/C++.")
                               (format #t "applying '~a'...~%" file)
                               (invoke patch "--force" "--no-backup-if-mismatch"
                                       "-p1" "--input" file))))
-                         (or native-inputs inputs)))
-             #t))
+                         (or native-inputs inputs)))))
          (add-after 'apply-guix-specific-patches 'remove-bundled-libraries
            (lambda _
              ;; Remove bundled libraries that we don't use, since they may
@@ -1090,56 +1120,45 @@ in C/C++.")
                          ;; UNBUNDLE-ME! "gfx/graphite2"
                          "js/src/ctypes/libffi"
                          ;; UNBUNDLE-ME! "db/sqlite3"
-                         ))
-             #t))
-         (add-after 'remove-bundled-libraries 'link-libxul-with-libraries
-           (lambda _
-             ;; libxul.so dynamically opens libraries, so here we explicitly
-             ;; link them into libxul.so instead.
-             ;;
-             ;; TODO: It might be preferable to patch in absolute file names in
-             ;; calls to dlopen or PR_LoadLibrary, but that didn't seem to
-             ;; work.  More investigation is needed.
-             (substitute* "toolkit/library/moz.build"
-               (("^# This library needs to be last" all)
-                (string-append "OS_LIBS += [
-    'GL', 'gnome-2', 'canberra', 'Xss', 'cups', 'gssapi_krb5',
-    'avcodec', 'avutil', 'pulse' ]\n\n"
-                               all)))
-             #t))
-         (add-after 'link-libxul-with-libraries 'fix-ffmpeg-runtime-linker
+                         ))))
+         (add-after 'remove-bundled-libraries 'fix-ffmpeg-runtime-linker
            (lambda* (#:key inputs #:allow-other-keys)
              (let* ((ffmpeg (assoc-ref inputs "ffmpeg"))
                     (libavcodec (string-append ffmpeg "/lib/libavcodec.so")))
                ;; Arrange to load libavcodec.so by its absolute file name.
                (substitute* "dom/media/platforms/ffmpeg/FFmpegRuntimeLinker.cpp"
                  (("libavcodec\\.so")
-                  libavcodec))
-               ;; Populate the sandbox read-path whitelist as needed by ffmpeg.
-               (let* ((mime-info (assoc-ref inputs "shared-mime-info"))
-                      (libavcodec-runpath (call-with-input-file libavcodec
-                                            (compose elf-dynamic-info-runpath
-                                                     elf-dynamic-info
-                                                     parse-elf
-                                                     get-bytevector-all)))
-                      (whitelist (cons (string-append mime-info "/share/mime/")
-                                       (map (lambda (dir)
-                                              (string-append dir "/"))
-                                            libavcodec-runpath)))
-                      (whitelist-string (string-join whitelist ","))
-                      (port (open-file "browser/app/profile/icecat.js" "a")))
-                 (format #t "setting 'security.sandbox.content.read_path_whitelist' to '~a'~%"
-                         whitelist-string)
-                 (format port "~%pref(\"security.sandbox.content.read_path_whitelist\", ~S);~%"
-                         whitelist-string)
-                 (close-output-port port))
-               #t)))
-         (replace 'bootstrap
-           (lambda _
-             (invoke "sh" "-c" "autoconf old-configure.in > old-configure")
-             ;; 'configure' must be newer than 'old-configure.in', or else the
-             ;; build system will raise an alarm and abort.
-             (invoke "touch" "configure")))
+                  libavcodec)))))
+         (add-after 'fix-ffmpeg-runtime-linker 'build-sandbox-whitelist
+           (lambda* (#:key inputs #:allow-other-keys)
+             (define (runpath-of lib)
+               (call-with-input-file lib
+                 (compose elf-dynamic-info-runpath
+                          elf-dynamic-info
+                          parse-elf
+                          get-bytevector-all)))
+             (define (runpaths-of-input label)
+               (let* ((dir (string-append (assoc-ref inputs label) "/lib"))
+                      (libs (find-files dir "\\.so$")))
+                 (append-map runpath-of libs)))
+             ;; Populate the sandbox read-path whitelist as needed by ffmpeg.
+             (let* ((whitelist
+                     (map (cut string-append <> "/")
+                          (delete-duplicates
+                           `(,(string-append (assoc-ref inputs "shared-mime-info")
+                                             "/share/mime")
+                             ,(string-append (assoc-ref inputs "font-dejavu")
+                                             "/share/fonts")
+                             "/run/current-system/profile/share/fonts"
+                             ,@(append-map runpaths-of-input
+                                           '("mesa" "ffmpeg"))))))
+                    (whitelist-string (string-join whitelist ","))
+                    (port (open-file "browser/app/profile/icecat.js" "a")))
+               (format #t "setting 'security.sandbox.content.read_path_whitelist' to '~a'~%"
+                       whitelist-string)
+               (format port "~%pref(\"security.sandbox.content.read_path_whitelist\", ~S);~%"
+                       whitelist-string)
+               (close-output-port port))))
          (add-after 'patch-source-shebangs 'patch-cargo-checksums
            (lambda _
              (use-modules (guix build cargo-utils))
@@ -1168,8 +1187,8 @@ in C/C++.")
                            "intl"
                            "servo"
                            "security/manager/ssl"
-                           "build")))
-             #t))
+                           "build")))))
+         (delete 'bootstrap)
          (replace 'configure
            ;; configure does not work followed by both "SHELL=..." and
            ;; "CONFIG_SHELL=..."; set environment variables instead
@@ -1177,57 +1196,92 @@ in C/C++.")
              (let* ((out (assoc-ref outputs "out"))
                     (bash (which "bash"))
                     (abs-srcdir (getcwd))
-                    (srcdir (string-append "../" (basename abs-srcdir)))
                     (flags `(,(string-append "--prefix=" out)
                              ,(string-append "--with-l10n-base="
                                              abs-srcdir "/l10n")
                              ,@configure-flags)))
                (setenv "SHELL" bash)
                (setenv "CONFIG_SHELL" bash)
-               (setenv "AUTOCONF" (which "autoconf")) ; must be autoconf-2.13
-               (setenv "CC" "gcc")  ; apparently needed when Stylo is enabled
-               (setenv "MOZ_BUILD_DATE" ,%icecat-build-id) ; avoid timestamp
+
+               (setenv "AR" "llvm-ar")
+               (setenv "NM" "llvm-nm")
+               (setenv "CC" "clang")
+               (setenv "CXX" "clang++")
                (setenv "LDFLAGS" (string-append "-Wl,-rpath="
                                                 (assoc-ref outputs "out")
                                                 "/lib/icecat"))
-               (mkdir "../build")
-               (chdir "../build")
+
+               (setenv "MACH_USE_SYSTEM_PYTHON" "1")
+               (setenv "MOZ_NOSPAM" "1")
+               (setenv "MOZ_BUILD_DATE" ,%icecat-build-id) ; avoid timestamp
+
                (format #t "build directory: ~s~%" (getcwd))
                (format #t "configure flags: ~s~%" flags)
-               (apply invoke bash
-                      (string-append srcdir "/configure")
-                      flags))))
+
+               (call-with-output-file "mozconfig"
+                 (lambda (out)
+                   (for-each (lambda (flag)
+                               (format out "ac_add_options ~a\n" flag))
+                             flags)))
+
+               (invoke "./mach" "configure"))))
          (replace 'build
-           ;; The build system often spuriously fails.  See
-           ;; <https://bugs.gentoo.org/show_bug.cgi?id=680934>.  To
-           ;; work around this, we try the standard 'build' phase up
-           ;; to 5 times.
-           (lambda args
-             (let ((build (assoc-ref %standard-phases 'build)))
-               (let retry ((remaining-attempts 5))
-                 (if (= remaining-attempts 1)
-                     (apply build args)
-                     (guard (c ((invoke-error? c)
-                                (format #t "~%Retrying build! (~a attempts remaining)~%~%"
-                                        (- remaining-attempts 1))
-                                (force-output)
-                                (retry (- remaining-attempts 1))))
-                       (apply build args)))))))
+           (lambda* (#:key (make-flags '()) (parallel-build? #t)
+                     #:allow-other-keys)
+             (apply invoke "./mach" "build"
+                    ;; mach will use parallel build if possible by default
+                    `(,@(if parallel-build?
+                            '()
+                            '("-j1"))
+                      ,@make-flags))))
          (add-after 'build 'neutralise-store-references
            (lambda _
              ;; Mangle the store references to compilers & other build tools in
              ;; about:buildconfig, reducing IceCat's closure by 1 GiB on x86-64.
-             (substitute*
-                 "dist/bin/chrome/toolkit/content/global/buildconfig.html"
-               (((format #f "(~a/)([0-9a-df-np-sv-z]{32})"
-                         (regexp-quote (%store-directory)))
-                 _ store hash)
-                (string-append store
-                               (string-take hash 8)
-                               "<!-- Guix: not a runtime dependency -->"
-                               (string-drop hash 8))))
-             #t))
-         (add-before 'configure 'install-desktop-entry
+             (let* ((obj-dir (match (scandir "." (cut string-prefix? "obj-" <>))
+                               ((dir) dir)))
+                    (file (string-append
+                           obj-dir
+                           "/dist/bin/chrome/toolkit/content/global/buildconfig.html")))
+               (substitute* file
+                 (("[0-9a-df-np-sv-z]{32}" hash)
+                  (string-append (string-take hash 8)
+                                 "<!-- Guix: not a runtime dependency -->"
+                                 (string-drop hash 8)))))))
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (invoke "./mach" "install")
+             ;; The geckodriver binary is not installed by the above, for some
+             ;; reason.  Use 'find-files' to avoid having to deal with the
+             ;; system/architecture-specific file name.
+             (install-file (first (find-files "." "geckodriver"))
+                           (string-append (assoc-ref outputs "out") "/bin"))))
+         (add-after 'install 'wrap-program
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (lib (string-append out "/lib"))
+                    (gtk (assoc-ref inputs "gtk+"))
+                    (gtk-share (string-append gtk "/share"))
+                    (ld-libs (map (lambda (label)
+                                    (string-append (assoc-ref inputs label)
+                                                   "/lib"))
+                              '("libpng-apng"
+                                "libxscrnsaver"
+                                "mesa"
+                                "pciutils"
+                                "mit-krb5"
+                                "eudev"
+                                "pulseaudio"
+                                ;; For the integration of native notifications
+                                "libnotify"))))
+               (wrap-program (car (find-files lib "^icecat$"))
+                 `("XDG_DATA_DIRS" prefix (,gtk-share))
+                 ;; The following line is commented out because the icecat
+                 ;; package on guix has been observed to be unstable when
+                 ;; using wayland, and the bundled extensions stop working.
+                 ;;   `("MOZ_ENABLE_WAYLAND" = ("1"))
+                 `("LD_LIBRARY_PATH" prefix ,ld-libs)))))
+         (add-after 'wrap-program 'install-desktop-entry
            (lambda* (#:key outputs #:allow-other-keys)
              ;; Install the '.desktop' file.
              (let* ((desktop-file "taskcluster/docker/icecat-snap/icecat.desktop")
@@ -1239,8 +1293,7 @@ in C/C++.")
                  (("Icon=.*")          "Icon=icecat\n")
                  (("NewWindow")        "new-window")
                  (("NewPrivateWindow") "new-private-window"))
-               (install-file desktop-file applications)
-               #t)))
+               (install-file desktop-file applications))))
          (add-after 'install-desktop-entry 'install-icons
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
@@ -1254,39 +1307,17 @@ in C/C++.")
                       (copy-file file (string-append icons "/icecat.png"))))
                   '("default16.png" "default22.png" "default24.png"
                     "default32.png" "default48.png" "content/icon64.png"
-                    "mozicon128.png" "default256.png"))
-                 #t))))
-         ;; This fixes the file chooser crash that happens with GTK 3.
-         (add-after 'install 'wrap-program
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (lib (string-append out "/lib"))
-                    (gtk (assoc-ref inputs "gtk+"))
-                    (gtk-share (string-append gtk "/share"))
-                    (ld-libs (map (lambda (lib)
-                                    (string-append (assoc-ref inputs lib)
-                                                   "/lib"))
-                              '("libxscrnsaver"
-                                "mesa"
-                                "mit-krb5"
-                                "eudev"
-                                "pulseaudio"))))
-               (wrap-program (car (find-files lib "^icecat$"))
-                 `("XDG_DATA_DIRS" prefix (,gtk-share))
-                 ;; The following line is commented out because the icecat
-                 ;; package on guix has been observed to be unstable when
-                 ;; using wayland, and the bundled extensions stop working.
-                 ;;   `("MOZ_ENABLE_WAYLAND" = ("1"))
-                 `("LD_LIBRARY_PATH" prefix ,ld-libs))
-               #t))))))
+                    "mozicon128.png" "default256.png")))))))))
     (home-page "https://www.gnu.org/software/gnuzilla/")
     (synopsis "Entirely free browser derived from Mozilla Firefox")
     (description
      "IceCat is the GNU version of the Firefox browser.  It is entirely free
 software, which does not recommend non-free plugins and addons.  It also
-features built-in privacy-protecting features.
+features built-in privacy-protecting features.  This package also includes the
+@command{geckodriver} command, which can be useful for automated web
+testing.
 
-WARNING: IceCat 78 has not yet been released by the upstream IceCat project.
+WARNING: IceCat 91 has not yet been released by the upstream IceCat project.
 This is a preview release, and does not currently meet the privacy-respecting
 standards of the IceCat project.")
     (license license:mpl2.0)     ;and others, see toolkit/content/license.html
@@ -1296,11 +1327,11 @@ standards of the IceCat project.")
        (cpe-version . ,(first (string-split version #\-)))))))
 
 ;; Update this together with icecat!
-(define %icedove-build-id "20210810000000") ;must be of the form YYYYMMDDhhmmss
+(define %icedove-build-id "20220111000000") ;must be of the form YYYYMMDDhhmmss
 (define-public icedove
   (package
     (name "icedove")
-    (version "78.13.0")
+    (version "91.5")
     (source icecat-source)
     (properties
      `((cpe-name . "thunderbird_esr")))
@@ -1319,7 +1350,6 @@ standards of the IceCat project.")
              (mkdir "comm")
              (copy-recursively (assoc-ref inputs "thunderbird-sources")
                                "comm")
-             (delete-file-recursively "obj-x86_64-pc-linux-gnu")
              (delete-file "sourcestamp.txt")
              #t))
          (add-after 'patch-source-shebangs 'patch-cargo-checksums
@@ -1341,14 +1371,12 @@ standards of the IceCat project.")
          (add-after 'patch-source-shebangs 'fix-profile-setting
            (lambda _
              (substitute* "comm/mail/moz.configure"
-               (("'MOZ_DEDICATED_PROFILES', True")
-                "'MOZ_DEDICATED_PROFILES', False"))
+               (("MOZ_DEDICATED_PROFILES, True")
+                "MOZ_DEDICATED_PROFILES, False"))
              #t))
          (add-after 'prepare-thunderbird-sources 'rename-to-icedove
            (lambda _
              (substitute* "comm/mail/confvars.sh"
-               (("MOZ_APP_BASENAME=Thunderbird")
-                "MOZ_APP_BASENAME=Icedove\nMOZ_APP_DISPLAYNAME=Icedove")
                (("MOZ_APP_NAME=thunderbird")
                 "MOZ_APP_NAME=icedove")
                (("MOZ_UPDATER=1")
@@ -1392,7 +1420,8 @@ standards of the IceCat project.")
                               "enterprisepolicies/schemas/moz.build")
                  (("Thunderbird") "Icedove")))
              (substitute* '("comm/mailnews/base/prefs/content/accountUtils.js"
-                            "comm/common/src/customizeToolbar.js")
+                            "comm/mail/base/content/customizeToolbar.js"
+                            "comm/suite/components/customizeToolbar.js")
                (("AppConstants.MOZ_APP_NAME (.)= \"thunderbird" _ e)
                 (format #f "AppConstants.MOZ_APP_NAME ~a= \"icedove" e)))
 
@@ -1426,6 +1455,7 @@ standards of the IceCat project.")
                                "<!-- Guix: not a runtime dependency -->"
                                (string-drop hash 8))))
              #t))
+         (delete 'bootstrap)
          (replace 'configure
            (lambda* (#:key inputs outputs configure-flags #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -1436,22 +1466,24 @@ standards of the IceCat project.")
                              ,@configure-flags))
                     (mozconfig (string-append (getcwd) "/.mozconfig")))
                (setenv "SHELL" bash)
-               (setenv "AUTOCONF"
-                       (string-append (assoc-ref %build-inputs
-                                                 "autoconf")
-                                      "/bin/autoconf"))
                (setenv "CONFIG_SHELL" bash)
                (setenv "QA_CONFIGURE_OPTIONS" ".*")
                (setenv "MOZBUILD_STATE_PATH"
                        (string-append (getcwd) "/mach_state"))
                (setenv "MOZCONFIG"
                        (string-append (getcwd) "/.mozconfig"))
-               (setenv "CC" "gcc")
+
+               (setenv "AR" "llvm-ar")
+               (setenv "NM" "llvm-nm")
+               (setenv "CC" "clang")
+               (setenv "CXX" "clang++")
+
                (setenv "MOZ_NOSPAM" "1")
+               (setenv "MACH_USE_SYSTEM_PYTHON" "1")
                (setenv "PYTHON"
-                       (string-append (assoc-ref inputs "python2")
-                                      "/bin/python"))
+                       (search-input-file inputs "/bin/python"))
                (setenv "MOZ_BUILD_DATE" ,%icedove-build-id) ; avoid timestamp
+               (setenv "MOZ_APP_NAME" "icedove")
                (setenv "LDFLAGS" (string-append "-Wl,-rpath="
                                                 (assoc-ref outputs "out")
                                                 "/lib/icedove"))
@@ -1471,7 +1503,6 @@ standards of the IceCat project.")
                      "ac_add_options --disable-updater\n"
                      "ac_add_options --disable-webrtc\n"
                      "ac_add_options --enable-application=comm/mail\n"
-                     "ac_add_options --enable-calendar\n"
                      "ac_add_options --enable-default-toolkit=\"cairo-gtk3\"\n"
                      "ac_add_options --enable-optimize\n"
                      "ac_add_options --enable-pulseaudio\n"
@@ -1488,7 +1519,7 @@ standards of the IceCat project.")
                      "ac_add_options --with-system-jpeg\n"
                      "ac_add_options --with-system-libevent\n"
                      "ac_add_options --with-system-nspr\n"
-                     "ac_add_options --with-system-nss\n"
+                     ;"ac_add_options --with-system-nss\n"
                      "ac_add_options --with-system-zlib\n"
                      "ac_add_options --with-user-appdir=\\.icedove\n"
                      "mk_add_options MOZ_MAKE_FLAGS=-j"
@@ -1553,7 +1584,7 @@ standards of the IceCat project.")
        ("gtk+" ,gtk+)
        ("gtk+-2" ,gtk+-2)
        ("hunspell" ,hunspell)
-       ("icu4c" ,icu4c-67)
+       ("icu4c" ,icu4c)
        ("libcanberra" ,libcanberra)
        ("libevent" ,libevent)
        ("libffi" ,libffi)
@@ -1568,8 +1599,9 @@ standards of the IceCat project.")
        ("libxt" ,libxt)
        ("mesa" ,mesa)
        ("mit-krb5" ,mit-krb5)
-       ("nspr" ,nspr)
-       ("nss" ,nss)
+       ("nspr" ,nspr-4.32)
+       ; FIXME: create nss >= 3.68 after core-updates merge
+       ;("nss" ,nss)
        ("pango" ,pango)
        ("pixman" ,pixman)
        ("pulseaudio" ,pulseaudio)
@@ -1585,28 +1617,28 @@ 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 "adcfedf831da719455116546865f9a5faea848a6"))
+        ,(let ((changeset "bcd2aab51cd0889d506d29455210d65602b97430"))
            (origin
              (method hg-fetch)
              (uri (hg-reference
-                   (url "https://hg.mozilla.org/releases/comm-esr78")
+                   (url "https://hg.mozilla.org/releases/comm-esr91")
                    (changeset changeset)))
              (file-name (string-append "thunderbird-" version "-checkout"))
              (sha256
               (base32
-               "1dahf3y8bm3kh7amf341wnmh82a2r0ksqihc6dwiakh6x86a94cm")))))
-       ("autoconf" ,autoconf-2.13)
-       ("cargo" ,rust-1.41 "cargo")
-       ("clang" ,clang)
-       ("llvm" ,llvm)
+               "0aj8a8qbm71n34yi58y04bn4h9zz2rciz0cm3hh58rsmcqs1s9ym")))))
+       ("cargo" ,rust "cargo")
+       ("clang" ,clang-11)
+       ("llvm" ,llvm-11)
+       ("m4" ,m4)
        ("nasm" ,nasm)
        ("node" ,node)
        ("perl" ,perl)
        ("pkg-config" ,pkg-config)
        ("python" ,python)
        ("python2" ,python-2.7)
-       ("rust" ,rust-1.41)
-       ("rust-cbindgen" ,rust-cbindgen-0.14)
+       ("rust" ,rust)
+       ("rust-cbindgen" ,rust-cbindgen-0.19)
        ("which" ,which)
        ("yasm" ,yasm)))
     (home-page "https://www.thunderbird.net")
@@ -1667,8 +1699,7 @@ Thunderbird.  It supports email, news feeds, chat, calendar and contacts.")
                 "17yyyxp47z4m8hnflcq34rc1y871515kr3f1y42j1l0yx3g0il07"))))
     (build-system trivial-build-system)
     (inputs
-     `(("nss" ,nss)
-       ("python" ,python)))
+     (list nss python))
     (arguments
      `(#:modules ((guix build utils))
        #:builder
@@ -1691,3 +1722,41 @@ Thunderbird.  It supports email, news feeds, chat, calendar and contacts.")
     (description "Firefox Decrypt is a tool to extract passwords from
 Mozilla (Firefox, Waterfox, Thunderbird, SeaMonkey) profiles.")
     (license license:gpl3+)))
+
+(define-public lz4json
+  (package
+    (name "lz4json")
+    (version "2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url "https://github.com/andikleen/lz4json")
+         (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1xxn8yzr6j8j6prmbj6mxspdczigarfiv3vlm9k70yxmky65ijh3"))))
+    (build-system gnu-build-system)
+    (native-inputs (list pkg-config))
+    (inputs (list lz4))
+    (arguments
+     `(#:tests? #f                              ; no check target
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)                    ; no configure script
+         (replace 'install                      ; no install target
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin"))
+                    (man (string-append out "/share/man/man1")))
+               (install-file "lz4jsoncat" bin)
+               (install-file "lz4jsoncat.1" man)))))
+       #:make-flags `(,(string-append "CC=" ,(cc-for-target)))))
+    (home-page "https://github.com/andikleen/lz4json")
+    (synopsis "C decompress tool for mozilla lz4json format")
+    (description
+     "@code{lz4json} is a little utility to unpack lz4json files as generated
+by Firefox's bookmark backups and session restore.  This is a different format
+from what the normal lz4 utility expects.  The data is dumped to stdout.")
+    (license license:bsd-2)))
diff --git a/gnu/packages/gobby.scm b/gnu/packages/gobby.scm
index 0e1910d7ce..f948074c39 100644
--- a/gnu/packages/gobby.scm
+++ b/gnu/packages/gobby.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2017, 2019 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2021 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -24,6 +25,7 @@
   #:use-module (guix download)
   #:use-module (guix utils)
   #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix build-system glib-or-gtk)
   #:use-module (guix build-system gnu)
   #:use-module (gnu packages)
   #:use-module (gnu packages glib)
@@ -47,7 +49,7 @@
                 "088yqq60wjx3jqjlhl12893p15gl9asjpavrbhh590qzpqndhp8m"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
      `(#:configure-flags
        (list "--disable-static")
@@ -63,8 +65,7 @@
                 (string-append "gnutls_priority_set_direct"
                                "(session, \"NORMAL:+ANON-DH\", NULL)"))))))))
     (inputs
-     `(("libsigc++" ,libsigc++)
-       ("gnutls" ,gnutls)))
+     (list libsigc++-2 gnutls))
     (home-page "https://gobby.github.io/")
     (synopsis "Network access framework for IPv4/IPv6")
     (description
@@ -88,11 +89,9 @@
      `(#:configure-flags
        (list "--disable-static")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libsigc++" ,libsigc++)
-       ("gnutls" ,gnutls)
-       ("libnet6" ,libnet6)))
+     (list libsigc++-2 gnutls libnet6))
     (home-page "https://gobby.github.io/")
     (synopsis "Library for building collaborative editors")
     (description
@@ -117,8 +116,7 @@ documents in one session.  Obby is used by the Gobby collaborative editor.")
                 "0w8q01lf6bcdz537b29m7rwlbc7k87b12vnpm1h6219ypvzqkgcc"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (inputs
      `(("libxml++-2" ,libxml++-2)
        ("gnutls" ,gnutls)
@@ -143,7 +141,7 @@ connect to a server running the old 0.4 protocol.")
 (define-public gobby
   (package
     (name "gobby")
-    (version "0.5.0")
+    (version "0.6.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://releases.0x539.de/gobby/gobby-"
@@ -151,16 +149,15 @@ connect to a server running the old 0.4 protocol.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "165x0r668ma5blziisvbr8qig3jw9hf7i6w8r7wwvz3wsac3bswc"))))
-    (build-system gnu-build-system)
+                "1p2wbnchxy2wdzk19p7bxfpbq5zawa0l500na57jp8jgk3qz7czx"))))
+    (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool itstool))
     (inputs
      `(("gnutls" ,gnutls)
        ("gsasl" ,gsasl)
-       ("gtkmm-2" ,gtkmm-2)
-       ("gtksourceview-2" ,gtksourceview-2)
+       ("gtkmm" ,gtkmm-3)
+       ("gtksourceview" ,gtksourceview-3)
        ("libinfinity" ,libinfinity)
        ("libxml++-2" ,libxml++-2)))
     (arguments
@@ -195,12 +192,9 @@ together over the internet in real-time.")
          "17i3g61hxz9pzl3ryd1yr15142r25m06jfzjrpdy7ic1b8vjjw3f"))))
     (build-system gnu-build-system)
     (inputs
-     `(("glib" ,glib)
-       ("gsasl" ,gsasl)
-       ("gtk+" ,gtk+)
-       ("libxml2" ,libxml2)))
+     (list glib gsasl gtk+ libxml2))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
      `(#:configure-flags (list "--disable-static"
                                "--with-inftextgtk"
diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm
index 3a088be095..f148c0d48a 100644
--- a/gnu/packages/golang.scm
+++ b/gnu/packages/golang.scm
@@ -1,8 +1,8 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021, 2022 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>
+;;; Copyright © 2016, 2019, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016, 2017 Petter <petter@mykolab.ch>
 ;;; Copyright © 2016, 2017, 2018, 2019, 2020 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2017 Sergei Trofimovich <slyfox@inbox.ru>
@@ -30,6 +30,9 @@
 ;;; Copyright © 2021 Raghav Gururajan <rg@raghavgururajan.name>
 ;;; Copyright © 2021 jgart <jgart@dismail.de>
 ;;; Copyright © 2021 Bonface Munyoki Kilyungi <me@bonfacemunyoki.com>
+;;; Copyright © 2021 Chadwain Holness <chadwainholness@gmail.com>
+;;; Copyright © 2021 Philip McGrath <philip@philipmcgrath.com>
+;;; Copyright © 2021 Lu Hui <luhux76@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -60,10 +63,13 @@
   #:use-module (gnu packages admin)
   #:use-module (gnu packages base)
   #:use-module ((gnu packages bootstrap) #:select (glibc-dynamic-linker))
+  #:use-module (gnu packages check)
   #:use-module (gnu packages gcc)
   #:use-module (gnu packages glib)
+  #:use-module (gnu packages gnupg)
   #:use-module (gnu packages lua)
   #:use-module (gnu packages mp3)
+  #:use-module (gnu packages password-utils)
   #:use-module (gnu packages pcre)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
@@ -227,10 +233,7 @@
        ("pcre" ,pcre)
        ("gcc:lib" ,(canonical-package gcc) "lib")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("which" ,which)
-       ("net-base" ,net-base)
-       ("perl" ,perl)))
+     (list pkg-config which net-base perl))
 
     (home-page "https://golang.org/")
     (synopsis "Compiler and libraries for Go, a statically-typed language")
@@ -270,7 +273,8 @@ in the style of communicating sequential processes (@dfn{CSP}).")
              (lambda* (#:key inputs outputs #:allow-other-keys)
                (let* ((gcclib (string-append (assoc-ref inputs "gcc:lib") "/lib"))
                       (ld (string-append (assoc-ref inputs "libc") "/lib"))
-                      (loader (car (find-files ld "^ld-linux.+")))
+                      (loader (car (append (find-files ld "^ld-linux.+")
+                                           (find-files ld "^ld(64)?\\.so.+"))))
                       (net-base (assoc-ref inputs "net-base"))
                       (tzdata-path
                        (string-append (assoc-ref inputs "tzdata") "/share/zoneinfo"))
@@ -308,6 +312,11 @@ in the style of communicating sequential processes (@dfn{CSP}).")
                    (("/bin/pwd") (which "pwd"))
                    (("/bin/sh") (which "sh")))
 
+                 ;; Backport fix for go-1.14 with GCC 9+
+                 ;; https://github.com/golang/go/issues/39157
+                 (substitute* "cmd/go/note_test.go"
+                   (("cannot find 'ld'") "cannot find [‘']ld[’']"))
+
                  ;; Add libgcc to runpath
                  (substitute* "cmd/link/internal/ld/lib.go"
                    (("!rpath.set") "true"))
@@ -402,6 +411,7 @@ in the style of communicating sequential processes (@dfn{CSP}).")
                  (setenv "GOOS" "linux")
                  (setenv "GOROOT" (dirname (getcwd)))
                  (setenv "GOROOT_FINAL" output)
+                 (setenv "GOCACHE" "/tmp/go-cache")
                  (setenv "CGO_ENABLED" "1")
                  (invoke "sh" "all.bash"))))
            (replace 'install
@@ -440,7 +450,9 @@ in the style of communicating sequential processes (@dfn{CSP}).")
                  (copy-recursively "../" output)
                  #t)))))))
     (native-inputs
-     `(("go" ,go-1.4)
+     `(,@(if (member (%current-system) (package-supported-systems go-1.4))
+           `(("go" ,go-1.4))
+           `(("go" ,gccgo-10)))
        ("go-skip-gc-test.patch" ,(search-patch "go-skip-gc-test.patch"))
        ,@(match (%current-system)
            ((or "armhf-linux" "aarch64-linux")
@@ -453,7 +465,7 @@ in the style of communicating sequential processes (@dfn{CSP}).")
   (package
     (inherit go-1.14)
     (name "go")
-    (version "1.16.8")
+    (version "1.16.13")
     (source
      (origin
        (method git-fetch)
@@ -463,7 +475,7 @@ in the style of communicating sequential processes (@dfn{CSP}).")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "00zv65v09kr2cljxxqypk980r4b4aqjijhbw4ikppn8km68h831n"))))
+         "03f37dspn4h5kqf0nqwmnl858wx6hngnlvbnrjl1ll6ihc5j66jz"))))
     (arguments
      (substitute-keyword-arguments (package-arguments go-1.14)
        ((#:tests? _) #t)
@@ -612,7 +624,7 @@ in the style of communicating sequential processes (@dfn{CSP}).")
   (package
     (inherit go-1.16)
     (name "go")
-    (version "1.17.1")
+    (version "1.17.6")
     (source
      (origin
        (method git-fetch)
@@ -622,12 +634,15 @@ in the style of communicating sequential processes (@dfn{CSP}).")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0wk99lwpzp4qwrksl932lm9vb70nyf4vgb5lxwh7gzjcbhlqj992"))))
+         "05k292i9qayfy5wh96z4kjmx1mfd5birnr25vb0blzaam72mcsgw"))))
     (outputs '("out" "tests")) ; 'tests' contains distribution tests.
     (arguments
      `(#:modules ((ice-9 match)
                   (guix build gnu-build-system)
                   (guix build utils))
+       ;; TODO: Disable the test(s) in misc/cgo/test/cgo_test.go
+       ;; that cause segfaults in the test suite.
+       #:tests? ,(not (target-aarch64?))
        #:phases
        (modify-phases %standard-phases
          (replace 'configure
@@ -677,6 +692,29 @@ in the style of communicating sequential processes (@dfn{CSP}).")
                   (string-append net-base "/etc/services")))
                (substitute* "src/time/zoneinfo_unix.go"
                  (("/usr/share/zoneinfo/") tzdata-path)))))
+         ;; Keep this synchronized with the package inputs.
+         ,@(if (target-arm?)
+             '((add-after 'unpack 'patch-gcc:lib
+                 (lambda* (#:key inputs #:allow-other-keys)
+                   (let* ((gcclib (string-append (assoc-ref inputs "gcc:lib") "/lib")))
+                     ;; Add libgcc to runpath
+                     (substitute* "src/cmd/link/internal/ld/lib.go"
+                       (("!rpath.set") "true"))
+                     (substitute* "src/cmd/go/internal/work/gccgo.go"
+                       (("cgoldflags := \\[\\]string\\{\\}")
+                        (string-append "cgoldflags := []string{"
+                                       "\"-Wl,-rpath=" gcclib "\""
+                                       "}"))
+                       (("\"-lgcc_s\", ")
+                        (string-append
+                         "\"-Wl,-rpath=" gcclib "\", \"-lgcc_s\", ")))
+                     (substitute* "src/cmd/go/internal/work/gc.go"
+                       (("ldflags = setextld\\(ldflags, compiler\\)")
+                        (string-append
+                         "ldflags = setextld(ldflags, compiler)\n"
+                         "ldflags = append(ldflags, \"-r\")\n"
+                         "ldflags = append(ldflags, \"" gcclib "\")\n")))))))
+             '())
          (add-after 'patch-source 'disable-failing-tests
            (lambda _
              ;; Disable failing tests: these tests attempt to access
@@ -788,9 +826,47 @@ in the style of communicating sequential processes (@dfn{CSP}).")
                   (install-file file (string-append out "/share/doc/go")))
                 '("AUTHORS" "CONTRIBUTORS" "CONTRIBUTING.md" "PATENTS"
                   "README.md" "SECURITY.md"))))))))
-    (inputs (alist-delete "gcc:lib" (package-inputs go-1.16)))))
+    (inputs (if (not (target-arm?))
+              (alist-delete "gcc:lib" (package-inputs go-1.16))
+              (package-inputs go-1.16)))
+    (native-inputs
+     (if (not (member (%current-system) (package-supported-systems go-1.4)))
+       ;; gccgo-10.4, 11.3 and lower has a bug which causes bootstrapping
+       ;; to fail. Use go-1.16 until we have a newer version available.
+       (alist-replace "go" (list go-1.16) (package-native-inputs go-1.16))
+       (package-native-inputs go-1.16)))))
 
-(define-public go go-1.14)
+(define-public go go-1.17)
+
+(define-public (make-go-std go)
+  "Return a package which builds the standard library for Go compiler GO."
+  (package
+    (name (string-append (package-name go) "-std"))
+    (version (package-version go))
+    (source #f)
+    (build-system go-build-system)
+    (arguments
+     `(#:import-path "std"
+       #:build-flags `("-pkgdir" "pkg") ; "Install" to build directory.
+       #:allow-go-reference? #t
+       #:substitutable? #f ; Faster to build than download.
+       #:tests? #f ; Already tested in the main Go build.
+       #:go ,go
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'unpack)
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (out-cache (string-append out "/var/cache/go/build")))
+               (copy-recursively (getenv "GOCACHE") out-cache)
+               (delete-file (string-append out-cache "/trim.txt"))
+               (delete-file (string-append out-cache "/README")))))
+         (delete 'install-license-files))))
+    (home-page (package-home-page go))
+    (synopsis "Cached standard library build for Go")
+    (description (package-description go))
+    (license (package-license go))))
 
 (define-public go-0xacab-org-leap-shapeshifter
   (let ((commit "0aa6226582efb8e563540ec1d3c5cfcd19200474")
@@ -812,11 +888,9 @@ in the style of communicating sequential processes (@dfn{CSP}).")
       (arguments
        `(#:import-path "0xacab.org/leap/shapeshifter"))
       (propagated-inputs
-       `(("go-github-com-operatorfoundation-obfs4"
-          ,go-github-com-operatorfoundation-obfs4)
-         ("go-github-com-operatorfoundation-shapeshifter-transports"
-          ,go-github-com-operatorfoundation-shapeshifter-transports)
-         ("go-golang-org-x-net" ,go-golang-org-x-net)))
+       (list go-github-com-operatorfoundation-obfs4
+             go-github-com-operatorfoundation-shapeshifter-transports
+             go-golang-org-x-net))
       (home-page "https://0xacab.org/leap/shapeshifter")
       (synopsis "Shapeshifter Dispatcher Library")
       (description "Shapeshifter provides network protocol shapeshifting
@@ -923,33 +997,21 @@ filtering devices.")
                "github.com/OperatorFoundation/shapeshifter-transports/transports/shadow/v2"
                "github.com/OperatorFoundation/shapeshifter-transports/transports/shadow/v3")))))))
     (native-inputs
-     `(("go-github-com-stretchr-testify"
-        ,go-github-com-stretchr-testify)))
+     (list go-github-com-stretchr-testify))
     (propagated-inputs
-     `(("go-github-com-aead-chacha20"
-        ,go-github-com-aead-chacha20)
-       ("go-github-com-blanu-dust"
-        ,go-github-com-blanu-dust)
-       ("go-github-com-deckarep-golang-set"
-        ,go-github-com-deckarep-golang-set)
-       ("go-github-com-kataras-golog"
-        ,go-github-com-kataras-golog)
-       ("go-github-com-mufti1-interconv"
-        ,go-github-com-mufti1-interconv)
-       ("go-github-com-opentracing-opentracing-go"
-        ,go-github-com-opentracing-opentracing-go)
-       ("go-github-com-operatorfoundation-monolith-go"
-        ,go-github-com-operatorfoundation-monolith-go)
-       ("go-github-com-operatorfoundation-obfs4"
-        ,go-github-com-operatorfoundation-obfs4)
-       ("go-github-com-operatorfoundation-shapeshifter-ipc"
-        ,go-github-com-operatorfoundation-shapeshifter-ipc)
-       ("go-github-com-shadowsocks-go-shadowsocks2"
-        ,go-github-com-shadowsocks-go-shadowsocks2)
-       ("go-golang-org-x-crypto" ,go-golang-org-x-crypto)
-       ("go-golang-org-x-net" ,go-golang-org-x-net)
-       ("go-torproject-org-pluggable-transports-goptlib"
-        ,go-torproject-org-pluggable-transports-goptlib)))
+     (list go-github-com-aead-chacha20
+           go-github-com-blanu-dust
+           go-github-com-deckarep-golang-set
+           go-github-com-kataras-golog
+           go-github-com-mufti1-interconv
+           go-github-com-opentracing-opentracing-go
+           go-github-com-operatorfoundation-monolith-go
+           go-github-com-operatorfoundation-obfs4
+           go-github-com-operatorfoundation-shapeshifter-ipc
+           go-github-com-shadowsocks-go-shadowsocks2
+           go-golang-org-x-crypto
+           go-golang-org-x-net
+           go-torproject-org-pluggable-transports-goptlib))
     (home-page "https://github.com/OperatorFoundation/shapeshifter-transports")
     (synopsis "Go implementation of Pluggable Transports")
     (description "Shapeshifter-Transports is a set of Pluggable Transports
@@ -978,8 +1040,7 @@ networks where it would otherwise be blocked or heavily throttled.")
     (arguments
      `(#:import-path "github.com/kataras/golog"))
     (propagated-inputs
-     `(("go-github-com-kataras-pio"
-        ,go-github-com-kataras-pio)))
+     (list go-github-com-kataras-pio))
     (home-page "https://github.com/kataras/golog")
     (synopsis "Logging foundation for Go applications")
     (description "GoLog is a level-based logger written in Go.")
@@ -1028,12 +1089,8 @@ terminals.")
     (arguments
      `(#:import-path "github.com/shadowsocks/go-shadowsocks2"))
     (propagated-inputs
-     `(("go-github-com-riobard-go-bloom"
-        ,go-github-com-riobard-go-bloom)
-       ("go-golang-org-x-crypto" ,go-golang-org-x-crypto)
-       ("go-golang-org-x-net" ,go-golang-org-x-net)
-       ("go-golang-org-x-sys" ,go-golang-org-x-sys)
-       ("go-golang-org-x-text" ,go-golang-org-x-text)))
+     (list go-github-com-riobard-go-bloom go-golang-org-x-crypto
+           go-golang-org-x-net go-golang-org-x-sys go-golang-org-x-text))
     (home-page "https://github.com/shadowsocks/go-shadowsocks2")
     (synopsis "Shadowsocks tunnel proxy")
     (description "Go-ShadowSocks is a Go implementation of the Shadowsocks tunnel
@@ -1084,7 +1141,7 @@ proxy protocol.")
       (arguments
        `(#:import-path "github.com/aead/chacha20"))
       (propagated-inputs
-       `(("go-golang-org-x-sys" ,go-golang-org-x-sys)))
+       (list go-golang-org-x-sys))
       (home-page "https://github.com/aead/chacha20")
       (synopsis "ChaCha20 and XChaCha20 stream ciphers")
       (description "ChaCha is a stream cipher family created by Daniel Bernstein.
@@ -1135,8 +1192,7 @@ standardized in RFC 7539.")
     (arguments
      `(#:import-path "github.com/opentracing/opentracing-go"))
     (native-inputs
-     `(("go-github-com-stretchr-testify"
-        ,go-github-com-stretchr-testify)))
+     (list go-github-com-stretchr-testify))
     (home-page "https://github.com/opentracing/opentracing-go")
     (synopsis "OpenTracing API for Go")
     (description "OpenTracing-Go is a Go implementation of the OpenTracing API.")
@@ -1162,8 +1218,7 @@ standardized in RFC 7539.")
        #:unpack-path "github.com/OperatorFoundation/monolith-go"
        #:import-path "github.com/OperatorFoundation/monolith-go/monolith"))
     (propagated-inputs
-     `(("go-github-com-deckarep-golang-set"
-        ,go-github-com-deckarep-golang-set)))
+     (list go-github-com-deckarep-golang-set))
     (home-page "https://github.com/OperatorFoundation/monolith-go")
     (synopsis "Byte sequences library")
     (description "Monolith-Go is a Go library for working with byte sequences.")
@@ -1209,10 +1264,8 @@ standardized in RFC 7539.")
       (build-system go-build-system)
       (arguments `(#:import-path "howett.net/plist"))
       (inputs
-       `(("go-github.com-jessevdk-go-flags" ,go-github.com-jessevdk-go-flags)
-         ("go-github-com-kr-pretty" ,go-github-com-kr-pretty)
-         ("go-gopkg-in-check-v1" ,go-gopkg-in-check-v1)
-         ("go-gopkg-in-yaml-v2" ,go-gopkg-in-yaml-v2)))
+       (list go-github.com-jessevdk-go-flags go-github-com-kr-pretty
+             go-gopkg-in-check-v1 go-gopkg-in-yaml-v2))
       (home-page "https://github.com/DHowett/go-plist")
       (synopsis "Apple property list transcoder")
       (description "This list transcoder supports encoding/decoding property
@@ -1301,11 +1354,8 @@ types.")
                "github.com/blanu/Dust/go/v2/interface"
                "github.com/blanu/Dust/go/v2/shaping")))))))
     (propagated-inputs
-     `(("go-github-com-operatorfoundation-ed25519"
-        ,go-github-com-operatorfoundation-ed25519)
-       ("go-github-com-op-go-logging"
-        ,go-github-com-op-go-logging)
-       ("go-golang-org-x-crypto" ,go-golang-org-x-crypto)))
+     (list go-github-com-operatorfoundation-ed25519
+           go-github-com-op-go-logging go-golang-org-x-crypto))
     (home-page "https://github.com/blanu/Dust")
     (synopsis "Censorship-resistant internet transport protocol")
     (description "Dust is an Internet protocol designed to resist a number of
@@ -1502,16 +1552,12 @@ protocol from the Pluggable Transports 2.0 specification.")
                "github.com/OperatorFoundation/obfs4/proxy_dialers/proxy_socks4"
                "github.com/OperatorFoundation/obfs4/transports")))))))
     (propagated-inputs
-     `(("go-github-com-dchest-siphash"
-        ,go-github-com-dchest-siphash)
-       ("go-github-com-operatorfoundation-ed25519"
-        ,go-github-com-operatorfoundation-ed25519)
-       ("go-github-com-willscott-goturn"
-        ,go-github-com-willscott-goturn)
-       ("go-golang-org-x-crypto" ,go-golang-org-x-crypto)
-       ("go-golang-org-x-net" ,go-golang-org-x-net)
-       ("go-torproject-org-pluggable-transports-goptlib"
-        ,go-torproject-org-pluggable-transports-goptlib)))
+     (list go-github-com-dchest-siphash
+           go-github-com-operatorfoundation-ed25519
+           go-github-com-willscott-goturn
+           go-golang-org-x-crypto
+           go-golang-org-x-net
+           go-torproject-org-pluggable-transports-goptlib))
     (home-page "https://github.com/OperatorFoundation/obfs4")
     (synopsis "Network obfourscator to scramble network traffic")
     (description "Obfs4 is a look-like nothing obfuscation protocol that
@@ -1599,7 +1645,7 @@ Go.")
     (arguments
      `(#:import-path "github.com/sevlyar/go-daemon"))
     (propagated-inputs
-     `(("go-golang-org-x-sys" ,go-golang-org-x-sys)))
+     (list go-golang-org-x-sys))
     (home-page "https://github.com/sevlyar/go-daemon")
     (synopsis "Library for writing system daemons")
     (description "Go-Daemon is a library for writing system daemons in Go.")
@@ -1636,9 +1682,7 @@ Go.")
                (substitute* "src/github.com/keybase/go-ps/process_openbsd.go"
                  (("^// \\+build ignore") "")))))))
       (native-inputs
-       `(("coreutils" ,coreutils)
-         ("go-github-com-stretchr-testify"
-          ,go-github-com-stretchr-testify)))
+       (list coreutils go-github-com-stretchr-testify))
       (home-page "https://github.com/keybase/go-ps")
       (synopsis "Process list library for Go")
       (description "Go-Ps is a library for Go that implements OS-specific APIs
@@ -1839,10 +1883,8 @@ jar struct to manage the cookies added to the cookie jar.")
      '(#:unpack-path "github.com/gizak/termui"
        #:import-path "github.com/gizak/termui/v3"))
     (propagated-inputs
-     `(("go-github.com-mattn-go-runewidth" ,go-github.com-mattn-go-runewidth)
-       ("go-github-com-mitchellh-go-wordwrap"
-        ,go-github-com-mitchellh-go-wordwrap)
-       ("go-github.com-nsf-termbox-go" ,go-github.com-nsf-termbox-go)))
+     (list go-github.com-mattn-go-runewidth
+           go-github-com-mitchellh-go-wordwrap go-github.com-nsf-termbox-go))
     (home-page "https://github.com/gizak/termui")
     (synopsis "Terminal dashboard widget Go library")
     (description
@@ -1893,7 +1935,7 @@ mouse, and terminal resizing events.")
     (arguments
      '(#:import-path "github.com/mitchellh/go-wordwrap"))
     (propagated-inputs
-     `(("go-gopkg-in-yaml-v2" ,go-gopkg-in-yaml-v2)))
+     (list go-gopkg-in-yaml-v2))
     (home-page "https://github.com/mitchellh/go-wordwrap")
     (synopsis "Go library for word-wrapping strings")
     (description
@@ -1944,7 +1986,7 @@ generally useful thing to do.")
     (arguments
      '(#:import-path "github.com/daviddengcn/go-colortext"))
     (native-inputs
-     `(("go-github-com-golangplus-testing" ,go-github-com-golangplus-testing)))
+     (list go-github-com-golangplus-testing))
     (synopsis "Change the color of console text and background")
     (description
      "This is a package to change the color of the text and background in the
@@ -1971,7 +2013,7 @@ Under Windows, the console APIs are used.  Otherwise, ANSI texts are output.")
     (arguments
      '(#:import-path "github.com/golangplus/testing"))
     (propagated-inputs
-     `(("go-github-com-golangplus-fmt" ,go-github-com-golangplus-fmt)))
+     (list go-github-com-golangplus-fmt))
     (synopsis "Additions to Go's standard testing package")
     (description "This package provides additions to Go's stdlib testing.")
     (license license:bsd-3)))
@@ -1994,7 +2036,7 @@ Under Windows, the console APIs are used.  Otherwise, ANSI texts are output.")
     (arguments
      '(#:import-path "github.com/leodido/go-urn"))
     (native-inputs
-     `(("go-github-com-stretchr-testify" ,go-github-com-stretchr-testify)))
+     (list go-github-com-stretchr-testify))
     (synopsis "Parser for uniform resource names as seen on RFC 2141")
     (description
      "This package implements a parser for uniform resource names (URN) as
@@ -2101,7 +2143,7 @@ implemented features include
     (arguments
      '(#:import-path "github.com/go-playground/universal-translator"))
     (propagated-inputs
-     `(("go-github-com-go-playground-locales" ,go-github-com-go-playground-locales)))
+     (list go-github-com-go-playground-locales))
     (synopsis "Translator using Unicode CLDR data and pluralization rules")
     (description
      "This package offers an Internalization Translator for Go using
@@ -2139,12 +2181,10 @@ professionally translated
     (arguments
      '(#:import-path "gopkg.in/go-playground/validator.v9"))
     (native-inputs
-     `(("go-gopkg-in-go-playground-assert-v1"
-        ,go-gopkg-in-go-playground-assert-v1)))
+     (list go-gopkg-in-go-playground-assert-v1))
     (propagated-inputs
-     `(("go-github-com-go-playground-universal-translator"
-        ,go-github-com-go-playground-universal-translator)
-       ("go-github-com-leodido-go-urn" ,go-github-com-leodido-go-urn)))
+     (list go-github-com-go-playground-universal-translator
+           go-github-com-leodido-go-urn))
     (synopsis "Validator for structs and individual fields based on tags")
     (description
      "This package implements value validations for structs and individual
@@ -2189,10 +2229,9 @@ web framework
      '(#:import-path "github.com/aws/aws-sdk-go/aws"
        #:unpack-path "github.com/aws/aws-sdk-go"))
     (propagated-inputs
-     `(("go-github-com-go-sql-driver-mysql" ,go-github-com-go-sql-driver-mysql)
-       ("go-github-com-jmespath-go-jmespath" ,go-github-com-jmespath-go-jmespath)
-       ("go-github-com-pkg-errors" ,go-github-com-pkg-errors)
-       ("go-golang-org-x-net" ,go-golang-org-x-net)))
+     (list go-github-com-go-sql-driver-mysql
+           go-github-com-jmespath-go-jmespath go-github-com-pkg-errors
+           go-golang-org-x-net))
     (home-page "https://github.com/aws/aws-sdk-go")
     (synopsis "Library to access Amazon Web Services (AWS)")
     (description
@@ -2299,7 +2338,7 @@ per-goroutine.")
     (arguments
      `(#:import-path "github.com/saracen/walker"))
     (inputs
-     `(("go-golang-org-x-sync" ,go-golang-org-x-sync)))
+     (list go-golang-org-x-sync))
     (home-page "https://github.com/saracen/walker")
     (synopsis "Faster, parallel version of Go's filepath.Walk")
     (license license:expat)
@@ -2331,31 +2370,31 @@ command-line parsers.")
     (license license:expat)))
 
 (define-public go-github-com-hashicorp-hcl
-  (let ((commit "23c074d0eceb2b8a5bfdbb271ab780cde70f05a8")
-        (revision "0"))
-    (package
-      (name "go-github-com-hashicorp-hcl")
-      (version (git-version "0.0.0" revision commit))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                       (url "https://github.com/hashicorp/hcl")
-                       (commit commit)))
-                (file-name (git-file-name name version))
-                (sha256
-                  (base32
-                    "0db4lpqb5m130rmfy3s3gjjf4dxllypmyrzxv6ggqhkmwmc7w4mc"))))
-      (build-system go-build-system)
-      (arguments
-       '(#:tests? #f
-         #:import-path "github.com/hashicorp/hcl"))
-      (synopsis "Go implementation of HashiCorp Configuration Language")
-      (description
-       "This package contains the main implementation of the @acronym{HCL,
+  (package
+    (name "go-github-com-hashicorp-hcl")
+    (version "1.0.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/hashicorp/hcl")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0q6ml0qqs0yil76mpn4mdx4lp94id8vbv575qm60jzl1ijcl5i66"))))
+    (build-system go-build-system)
+    (arguments
+     '(#:import-path "github.com/hashicorp/hcl"))
+    (native-inputs
+     (list go-github-com-davecgh-go-spew))
+    (synopsis "Go implementation of HashiCorp Configuration Language V1")
+    (description
+     "This package contains the main implementation of the @acronym{HCL,
 HashiCorp Configuration Language}.  HCL is designed to be a language for
 expressing configuration which is easy for both humans and machines to read.")
-      (home-page "https://github.com/hashicorp/hcl")
-      (license license:mpl2.0))))
+    (home-page "https://github.com/hashicorp/hcl")
+    (license license:mpl2.0)))
 
 (define-public go-golang-org-x-tools
   (let ((commit "8b927904ee0dec805c89aaf9172f4459296ed6e8")
@@ -2412,18 +2451,9 @@ Go programming language.")
          #:phases
          (modify-phases %standard-phases
            ;; Source-only package
-           (delete 'build)
-           (add-before 'reset-gzip-timestamps 'make-gzip-archive-writable
-             (lambda* (#:key outputs #:allow-other-keys)
-               (map (lambda (file)
-                      (make-file-writable file))
-                    (find-files
-                      (string-append (assoc-ref outputs "out")
-                                     "/src/golang.org/x/crypto/ed25519/testdata")
-                      ".*\\.gz$"))
-               #t)))))
+           (delete 'build))))
       (propagated-inputs
-       `(("go-golang-org-x-sys" ,go-golang-org-x-sys)))
+       (list go-golang-org-x-sys))
       (synopsis "Supplementary cryptographic libraries in Go")
       (description "This package provides supplementary cryptographic libraries
 for the Go language.")
@@ -2638,7 +2668,7 @@ time.")
       (arguments
        `(#:import-path "golang.org/x/oauth2"))
       (propagated-inputs
-       `(("go-golang-org-x-net" ,go-golang-org-x-net)))
+       (list go-golang-org-x-net))
       (home-page "https://go.googlesource.com/oauth2")
       (synopsis "Client implementation of the OAuth 2.0 spec")
       (description "This package contains a client implementation for OAuth 2.0
@@ -2669,6 +2699,41 @@ time.")
       (home-page "https://godoc.org/golang.org/x/xerrors")
       (license license:bsd-3))))
 
+(define-public go-golang-org-x-mod
+  (let ((commit "0f08993efd8a8ec67e75bcccf86b0e1569b0ab0a")
+        (revision "0"))
+    (package
+      (name "go-golang-org-x-mod")
+      (version (git-version "0.5.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/golang/mod")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0pl0jc5jvg7hxj4z66zg6kglnq5g7li09f3k9klwvyr4jx5dw88k"))))
+      (build-system go-build-system)
+      (arguments
+       '(#:import-path "golang.org/x/mod/"
+         #:tests? #f
+         #:phases
+         (modify-phases %standard-phases
+           ;; Source-only package
+           (delete 'build))))
+      (home-page "https://golang.org/x/mod")
+      (synopsis "Tools to work directly with Go module mechanics")
+      (description
+       "This repository holds packages for writing tools that work directly
+with Go module mechanics.  That is, it is for direct manipulation of Go modules
+themselves.
+
+The specific case of loading packages should still be done by invoking the
+@command{go} command, which remains the single point of truth for package
+loading algorithms.")
+      (license license:bsd-3))))
+
 (define-public go-github-com-burntsushi-toml
   (package
     (name "go-github-com-burntsushi-toml")
@@ -2712,8 +2777,7 @@ is similar to Go's standard library @code{json} and @code{xml} package.")
       (arguments
        '(#:import-path "github.com/getsentry/raven-go"))
       (propagated-inputs
-       `(("go-github-com-certifi-gocertifi" ,go-github-com-certifi-gocertifi)
-         ("go-github-com-pkg-errors" ,go-github-com-pkg-errors)))
+       (list go-github-com-certifi-gocertifi go-github-com-pkg-errors))
       (home-page "https://github.com/getsentry/raven-go")
       (synopsis "Sentry client in Go")
       (description "This package is a Go client API for the Sentry event/error
@@ -2789,10 +2853,19 @@ Go.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0pcdvakxgddaiwcdj73ra4da05a3q4cgwbpm2w75ycq4kzv8ij8k"))))
+         "0pcdvakxgddaiwcdj73ra4da05a3q4cgwbpm2w75ycq4kzv8ij8k"))
+        (modules '((guix build utils)))
+        (snippet
+         '(begin
+            (delete-file-recursively "vendor")))))
     (build-system go-build-system)
     (arguments
      '(#:import-path "github.com/stretchr/objx"))
+    (propagated-inputs
+     (list go-github-com-davecgh-go-spew
+           go-github-com-pmezard-go-difflib))
+    (inputs
+     (list go-github-com-stretchr-testify-bootstrap))
     (home-page "https://github.com/stretchr/objx")
     (synopsis "Go package for dealing with maps, slices, JSON and other data")
     (description "This package provides a Go library for dealing with maps,
@@ -2802,7 +2875,7 @@ slices, JSON and other data.")
 (define-public go-github-com-stretchr-testify
   (package
     (name "go-github-com-stretchr-testify")
-    (version "1.5.1")
+    (version "1.7.0")
     (source
      (origin
        (method git-fetch)
@@ -2812,7 +2885,7 @@ slices, JSON and other data.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "09r89m1wy4cjv2nps1ykp00qjpi0531r07q3s34hr7m6njk4srkl"))))
+         "0ixgjsvafr3513pz3r6pmgk074s2dxkll0dadvl25gkf30rkmh10"))))
     (build-system go-build-system)
     (arguments
      '(#:import-path "github.com/stretchr/testify"))
@@ -2820,7 +2893,7 @@ slices, JSON and other data.")
      `(("github.com/davecgh/go-spew" ,go-github-com-davecgh-go-spew)
        ("github.com/pmezard/go-difflib" ,go-github-com-pmezard-go-difflib)
        ("github.com/stretchr/objx" ,go-github-com-stretchr-objx)
-       ("gopkg.in/yaml.v2" ,go-gopkg-in-yaml-v2)))
+       ("gopkg.in/yaml.v3" ,go-gopkg-in-yaml-v3)))
     (home-page "https://github.com/stretchr/testify")
     (synopsis "Go helper library for tests and invariant checking")
     (description "This package provide many tools for testifying that your
@@ -2835,6 +2908,17 @@ Features include:
 @end itemize")
     (license license:expat)))
 
+(define go-github-com-stretchr-testify-bootstrap
+  (package
+    (inherit go-github-com-stretchr-testify)
+    (arguments
+     '(#:import-path "github.com/stretchr/testify"
+       #:tests? #f
+       #:phases (modify-phases %standard-phases
+                  (delete 'build))))
+    (propagated-inputs
+     (list go-gopkg-in-yaml-v3))))
+
 (define-public go-github-com-tevino-abool
   (let ((commit
           "3c25f2fe7cd0ef3eabefce1d90efd69a65d35b12")
@@ -3000,41 +3084,6 @@ with the HTTP protocol definition.")
 API service accounts for Go.")
     (license license:asl2.0)))
 
-(define-public go-github-com-google-gmail-oauth2-tools-go-sendgmail
-  (let ((commit "e3229155a4037267ce40f1a3a681f53221aa4d8d")
-        (revision "0"))
-    (package
-      (name "go-github-com-google-gmail-oauth2-tools-go-sendgmail")
-      (version (git-version "0.0.0" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/google/gmail-oauth2-tools")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32
-           "1cxpkiaajhq1gjsg47r2b5xgck0r63pvkyrkm7af8c8dw7fyn64f"))))
-      (propagated-inputs
-       `(("go-golang-org-x-oauth2" ,go-golang-org-x-oauth2)
-         ("go-cloud-google-com-go-compute-metadata"
-          ,go-cloud-google-com-go-compute-metadata)))
-      (build-system go-build-system)
-      (arguments
-       '(#:unpack-path "github.com/google/gmail-oauth2-tools"
-         #:import-path "github.com/google/gmail-oauth2-tools/go/sendgmail"))
-      (home-page
-       "https://github.com/google/gmail-oauth2-tools/tree/master/go/sendgmail")
-      (synopsis
-       "Sendmail-compatible tool for using Gmail with @code{git send-email}")
-      (description
-       "The @command{sendgmail} command provides a minimal sendmail-compatible
-front-end that connects to Gmail using OAuth2.  It is specifically designed
-for use with @code{git send-email}.  The command needs a Gmail API key to
-function.")
-      (license license:asl2.0))))
-
 (define-public go-github-com-google-cadvisor
   (let ((commit "2ed7198f77395ee9a172878a0a7ab92ab59a2cfd")
         (revision "0"))
@@ -3303,7 +3352,7 @@ middleware for Go web applications and services.")
     (arguments
      `(#:import-path "github.com/spf13/cast"))
     (native-inputs
-     `(("go-github-com-stretchr-testify" ,go-github-com-stretchr-testify)))
+     (list go-github-com-stretchr-testify))
     (home-page "https://github.com/spf13/cast")
     (synopsis "Safe and easy casting from one type to another in Go")
     (description "Safe and easy casting from one type to another in Go")
@@ -3352,7 +3401,7 @@ applications as well as a program to generate applications and command files.")
     (arguments
      `(#:import-path "github.com/spf13/jwalterweatherman"))
     (native-inputs
-     `(("go-github-com-stretchr-testify" ,go-github-com-stretchr-testify)))
+     (list go-github-com-stretchr-testify))
     (home-page "https://github.com/spf13/jwalterweatherman")
     (synopsis "Go logging library")
     (description "Go logging library")
@@ -3417,7 +3466,7 @@ GNU extensions} to the POSIX recommendations for command-line options.")
        ("gopkg.in/ini.v1" ,go-gopkg-in-ini-v1)
        ("gopkg.in/yaml.v2" ,go-gopkg-in-yaml-v2)))
     (native-inputs
-     `(("go-github-com-stretchr-testify" ,go-github-com-stretchr-testify)))
+     (list go-github-com-stretchr-testify))
     (home-page "https://github.com/spf13/viper")
     (synopsis "Go configuration with fangs")
     (description
@@ -3541,7 +3590,7 @@ application's http.Handlers.")
     (arguments
      `(#:import-path "github.com/subosito/gotenv"))
     (native-inputs
-     `(("go-github-com-stretchr-testify" ,go-github-com-stretchr-testify)))
+     (list go-github-com-stretchr-testify))
     (home-page "https://github.com/subosito/gotenv")
     (synopsis "Go library for loading environment variables from files")
     (description "Go library for loading environment variables from files")
@@ -3563,11 +3612,9 @@ application's http.Handlers.")
          "0rvqzic2zz7fpxyizmqxwmhv1m52ii9bgxnqa6km8wsa0l08wh42"))))
     (build-system go-build-system)
     (propagated-inputs
-     `(("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)))
+     (list go-github-com-davecgh-go-spew go-github-com-pmezard-go-difflib
+           go-github-com-stretchr-testify go-golang-org-x-crypto
+           go-golang-org-x-sys))
     (arguments
      '(#:import-path "github.com/sirupsen/logrus"))
     (home-page "https://github.com/sirupsen/logrus")
@@ -3593,7 +3640,7 @@ compatible with the standard library logger.")
     (arguments
      `(#:import-path "github.com/rifflock/lfshook"))
     (propagated-inputs
-     `(("go-github-com-sirupsen-logrus" ,go-github-com-sirupsen-logrus)))
+     (list go-github-com-sirupsen-logrus))
     (home-page "https://github.com/rifflock/lfshook")
     (synopsis "Local File System hook for Logrus logger")
     (description "This package provides a hook for Logrus to write directly to
@@ -3648,8 +3695,7 @@ finding resources located relative to the executable file.")
            "0x0cn7l5gda2khsfypix7adxd5yqighzn04mxjw6hc4ayrh7his5"))))
       (build-system go-build-system)
       (native-inputs
-       `(("go-github-com-kardianos-osext"
-          ,go-github-com-kardianos-osext)))
+       (list go-github-com-kardianos-osext))
       (arguments
        '(#:tests? #f                ;FIXME tests fail: Service is not running.
          #:import-path "github.com/ayufan/golang-kardianos-service"))
@@ -3680,23 +3726,10 @@ SysVinit, and more.")
            "1yg2zrikn3vkvkx5mn51p6bfjk840qdkn7ahhhvvcsc8mpigrjc6"))))
       (build-system go-build-system)
       (native-inputs
-       `(("go-golang-org-x-sys" ,go-golang-org-x-sys)
-         ("go-github-com-sirupsen-logrus"
-          ,go-github-com-sirupsen-logrus)
-         ("go-golang-org-x-crypto"
-          ,go-golang-org-x-crypto)))
+       (list go-golang-org-x-sys go-github-com-sirupsen-logrus
+             go-golang-org-x-crypto))
       (arguments
-       '(#:import-path "github.com/docker/distribution"
-         #:phases
-         (modify-phases %standard-phases
-           (add-before 'reset-gzip-timestamps 'make-gzip-archive-writable
-             (lambda* (#:key outputs #:allow-other-keys)
-               (map (lambda (file)
-                      (make-file-writable file))
-                    (find-files
-                     (assoc-ref outputs "out")
-                     ".*\\.gz$"))
-               #t)))))
+       '(#:import-path "github.com/docker/distribution"))
       (home-page
        "https://github.com/docker/distribution")
       (synopsis "This package is a Docker toolset to pack, ship, store, and
@@ -3806,7 +3839,7 @@ which satisfies the cron expression.")
     (arguments
      '(#:import-path "gopkg.in/check.v1"))
     (propagated-inputs
-     `(("go-github-com-kr-pretty" ,go-github-com-kr-pretty)))
+     (list go-github-com-kr-pretty))
     (home-page "https://gopkg.in/check.v1")
     (synopsis "Test framework for the Go language")
     (description "This package provides a test library for the Go language.")
@@ -3839,7 +3872,7 @@ which satisfies the cron expression.")
 (define-public go-gopkg-in-yaml-v2
   (package
     (name "go-gopkg-in-yaml-v2")
-    (version "2.2.2")
+    (version "2.4.0")
     (source
       (origin
         (method git-fetch)
@@ -3849,12 +3882,23 @@ which satisfies the cron expression.")
         (file-name (git-file-name name version))
         (sha256
          (base32
-          "01wj12jzsdqlnidpyjssmj0r4yavlqy7dwrg7adqd8dicjc4ncsa"))))
+          "1pbmrpj7gcws34g8vwna4i2nhm9p6235piww36436xhyaa10cldr"))
+        (modules '((guix build utils)))
+        (snippet
+         '(begin
+            ;; https://github.com/go-yaml/yaml/issues/441 and
+            ;; https://github.com/go-yaml/yaml/pull/442
+            ;; Don't assume 64-bit wide integers
+            (substitute* "decode_test.go"
+              (("bin: (-0b1000000000000000000000000000000000000000000000000000000000000000)" all number)
+               (string-append "int64_min_base2: " number))
+              (("map\\[string\\]interface\\{\\}\\{\"bin\": -9223372036854775808\\}")
+               "map[string]int64{\"int64_min_base2\": math.MinInt64}"))))))
     (build-system go-build-system)
     (arguments
      '(#:import-path "gopkg.in/yaml.v2"))
     (native-inputs
-     `(("go-gopkg-in-check-v1" ,go-gopkg-in-check-v1)))
+     (list go-gopkg-in-check-v1))
     (home-page "https://gopkg.in/yaml.v2")
     (synopsis "YAML reader and writer for the Go language")
     (description
@@ -3879,7 +3923,7 @@ values.")
     (arguments
      '(#:import-path "gopkg.in/yaml.v3"))
     (native-inputs
-     `(("go-gopkg-in-check-v1" ,go-gopkg-in-check-v1)))
+     (list go-gopkg-in-check-v1))
     (home-page "https://gopkg.in/yaml.v3")
     (synopsis "YAML reader and writer for the Go language")
     (description
@@ -3904,7 +3948,7 @@ The yaml package supports most of YAML 1.2, but preserves some behavior from
          "0h671sv7hfprja495kavazkalkx7xzaqksjh13brcnwq67ijrali"))))
     (build-system go-build-system)
     (propagated-inputs
-     `(("go-golang-org-x-sys" ,go-golang-org-x-sys)))
+     (list go-golang-org-x-sys))
     (arguments
      '(#:import-path "github.com/mattn/go-isatty"))
     (home-page "https://github.com/mattn/go-isatty")
@@ -3931,8 +3975,7 @@ terminal.")
          "0q34zqwbnls72md8q8mhj368s7p3i4xspvs3rk8fs76s0pn7dr2l"))))
     (build-system go-build-system)
     (native-inputs
-     `(("go-github-com-mattn-go-isatty"
-        ,go-github-com-mattn-go-isatty)))
+     (list go-github-com-mattn-go-isatty))
     (arguments
      '(#:import-path "github.com/mattn/go-colorable"))
     (synopsis "Handle ANSI color escapes on Windows")
@@ -3984,10 +4027,7 @@ makes it possible to handle ANSI color escapes on Windows.")
            "00bz22314j26736w1f0q4jy9d9dfaml17vn890n5zqy3cmvmww1j"))))
       (build-system go-build-system)
       (native-inputs
-       `(("go-github-com-mattn-go-isatty"
-          ,go-github-com-mattn-go-isatty)
-         ("go-github-com-mattn-go-colorable"
-          ,go-github-com-mattn-go-colorable)))
+       (list go-github-com-mattn-go-isatty go-github-com-mattn-go-colorable))
       (arguments
        '(#:import-path "github.com/mgutz/ansi"))
       (home-page "https://github.com/mgutz/ansi")
@@ -4019,7 +4059,7 @@ generate ANSI colored strings.")
       ;; be built again.  Thus its CGO requirements must be made available in
       ;; the environment, that is, they must be propagated.
       (propagated-inputs
-       `(("lua" ,lua)))
+       (list lua))
       (arguments
        `(#:unpack-path "github.com/aarzilli/golua"
          #:import-path "github.com/aarzilli/golua/lua"
@@ -4061,8 +4101,7 @@ run a Lua virtual machine.")
            "1izcp7p8nagjwqd13shb0020w7xhppib1a3glw2d1468bflhksnm"))))
       (build-system go-build-system)
       (native-inputs
-       `(("lua" ,lua)
-         ("go-github-com-aarzilli-golua" ,go-github-com-aarzilli-golua)))
+       (list lua go-github-com-aarzilli-golua))
       (arguments
        `(#:unpack-path "gitlab.com/ambrevar/golua"
          #:import-path "gitlab.com/ambrevar/golua/unicode"
@@ -4154,7 +4193,7 @@ similar word.")
            "1acjgw9cz1l0l9mzkyk7irz6cfk31wnxgbwa805fvm1rqcjzin2c"))))
       (build-system go-build-system)
       (native-inputs
-       `(("go-github-com-aarzilli-golua" ,go-github-com-aarzilli-golua)))
+       (list go-github-com-aarzilli-golua))
       (arguments
        `(#:tests? #f                    ; Upstream tests are broken.
          #:import-path "github.com/stevedonovan/luar"))
@@ -4195,7 +4234,7 @@ be performed.")
            "0rjfms0csjqi91xnddzx3rcrcaikc7xc027617px3kdwdap80ir4"))))
       (build-system go-build-system)
       (native-inputs
-       `(("go-github-com-kr-text" ,go-github-com-kr-text)))
+       (list go-github-com-kr-text))
       (arguments
        `(#:tests? #f                    ; Upstream tests seem to be broken.
          #:import-path "github.com/michiwend/golang-pretty"))
@@ -4229,8 +4268,7 @@ functions in packages @code{fmt} and @code{log}.")
            "1li9daw0kghb80rdmxbh7g72qhxcvx3rvhwq5gs0jrr9hb8pjvcn"))))
       (build-system go-build-system)
       (native-inputs
-       `(("go-github-com-michiwend-golang-pretty" ,go-github-com-michiwend-golang-pretty)
-         ("go-github-com-kr-text" ,go-github-com-kr-text)))
+       (list go-github-com-michiwend-golang-pretty go-github-com-kr-text))
       (arguments
        `(#:import-path "github.com/michiwend/gomusicbrainz"))
       (home-page "https://github.com/michiwend/gomusicbrainz")
@@ -4262,8 +4300,7 @@ and lookup requests.  Browse requests are not supported yet.")
       ;; be built again.  Thus its CGO requirements must be made available in
       ;; the environment, that is, they must be propagated.
       (propagated-inputs
-       `(("pkg-config" ,pkg-config)
-         ("taglib" ,taglib)))
+       (list pkg-config taglib))
       (arguments
        `(#:import-path "github.com/wtolson/go-taglib"
          ;; Tests don't pass "vet" on Go since 1.11.  See
@@ -4428,7 +4465,7 @@ implementing the same interface.")
        '(#:unpack-path "github.com/btcsuite/btcd"
          #:import-path "github.com/btcsuite/btcd/btcec"))
       (native-inputs
-       `(("go-github-com-davecgh-go-spew" ,go-github-com-davecgh-go-spew)))
+       (list go-github-com-davecgh-go-spew))
       (home-page "https://github.com/btcsuite/btcd")
       (synopsis "Elliptic curve cryptography to work with Bitcoin")
       (description "Package @command{btcec} implements elliptic curve
@@ -4499,10 +4536,8 @@ Architecture Processors\" by J. Guilford et al.")
       (arguments
        '(#:import-path "github.com/libp2p/go-libp2p-crypto"))
       (native-inputs
-       `(("go-golang-org-x-crypto" ,go-golang-org-x-crypto)
-         ("go-github-com-btcsuite-btcd-btcec" ,go-github-com-btcsuite-btcd-btcec)
-         ("go-github-com-gogo-protobuf" ,go-github-com-gogo-protobuf)
-         ("go-github-com-minio-sha256-simd" ,go-github-com-minio-sha256-simd)))
+       (list go-golang-org-x-crypto go-github-com-btcsuite-btcd-btcec
+             go-github-com-gogo-protobuf go-github-com-minio-sha256-simd))
       (home-page
        "https://github.com/libp2p/go-libp2p-crypto")
       (synopsis "Various cryptographic utilities used by IPFS")
@@ -4666,12 +4701,12 @@ required by Go's standard Hash interface.")
       (arguments
        '(#:import-path "github.com/multiformats/go-multihash"))
       (native-inputs
-       `(("go-github-com-mr-tron-base58" ,go-github-com-mr-tron-base58)
-         ("go-github-com-gxed-hashland-keccakpg" ,go-github-com-gxed-hashland-keccakpg)
-         ("go-github-com-minio-blake2b-simd" ,go-github-com-minio-blake2b-simd)
-         ("go-github-com-minio-sha256-simd" ,go-github-com-minio-sha256-simd)
-         ("go-github-com-spaolacci-murmur3" ,go-github-com-spaolacci-murmur3)
-         ("go-golang-org-x-crypto" ,go-golang-org-x-crypto)))
+       (list go-github-com-mr-tron-base58
+             go-github-com-gxed-hashland-keccakpg
+             go-github-com-minio-blake2b-simd
+             go-github-com-minio-sha256-simd
+             go-github-com-spaolacci-murmur3
+             go-golang-org-x-crypto))
       (home-page "https://github.com/multiformats/go-multihash")
       (synopsis "Multihash implementation in Go")
       (description "Multihash implementation in Go.")
@@ -4697,16 +4732,16 @@ required by Go's standard Hash interface.")
       (arguments
        '(#:import-path "github.com/libp2p/go-libp2p-peer"))
       (native-inputs
-       `(("go-github-com-libp2p-go-libp2p-crypto" ,go-github-com-libp2p-go-libp2p-crypto)
-         ("go-github-com-gogo-protobuf" ,go-github-com-gogo-protobuf)
-         ("go-github-com-minio-sha256-simd" ,go-github-com-minio-sha256-simd)
-         ("go-github-com-minio-blake2b-simd" ,go-github-com-minio-blake2b-simd)
-         ("go-github-com-btcsuite-btcd-btcec" ,go-github-com-btcsuite-btcd-btcec)
-         ("go-github-com-mr-tron-base58" ,go-github-com-mr-tron-base58)
-         ("go-github-com-multiformats-go-multihash" ,go-github-com-multiformats-go-multihash)
-         ("go-github-com-gxed-hashland-keccakpg" ,go-github-com-gxed-hashland-keccakpg)
-         ("go-github-com-spaolacci-murmur3" ,go-github-com-spaolacci-murmur3)
-         ("go-golang-org-x-crypto" ,go-golang-org-x-crypto)))
+       (list go-github-com-libp2p-go-libp2p-crypto
+             go-github-com-gogo-protobuf
+             go-github-com-minio-sha256-simd
+             go-github-com-minio-blake2b-simd
+             go-github-com-btcsuite-btcd-btcec
+             go-github-com-mr-tron-base58
+             go-github-com-multiformats-go-multihash
+             go-github-com-gxed-hashland-keccakpg
+             go-github-com-spaolacci-murmur3
+             go-golang-org-x-crypto))
       (home-page "https://github.com/libp2p/go-libp2p-peer")
       (synopsis "PKI based identities for use in go-libp2p")
       (description "PKI based identities for use in @command{go-libp2p}.")
@@ -4757,19 +4792,19 @@ required by Go's standard Hash interface.")
       (arguments
        '(#:import-path "github.com/libp2p/go-libp2p-metrics"))
       (native-inputs
-       `(("go-github-com-libp2p-go-flow-metrics" ,go-github-com-libp2p-go-flow-metrics)
-         ("go-github-com-libp2p-go-libp2p-peer" ,go-github-com-libp2p-go-libp2p-peer)
-         ("go-github-com-libp2p-go-libp2p-protocol" ,go-github-com-libp2p-go-libp2p-protocol)
-         ("go-github-com-libp2p-go-libp2p-crypto" ,go-github-com-libp2p-go-libp2p-crypto)
-         ("go-github-com-mr-tron-base58" ,go-github-com-mr-tron-base58)
-         ("go-github-com-multiformats-go-multihash" ,go-github-com-multiformats-go-multihash)
-         ("go-github-com-btcsuite-btcd-btcec" ,go-github-com-btcsuite-btcd-btcec)
-         ("go-github-com-gogo-protobuf" ,go-github-com-gogo-protobuf)
-         ("go-github-com-gxed-hashland-keccakpg" ,go-github-com-gxed-hashland-keccakpg)
-         ("go-github-com-minio-blake2b-simd" ,go-github-com-minio-blake2b-simd)
-         ("go-github-com-minio-sha256-simd" ,go-github-com-minio-sha256-simd)
-         ("go-github-com-spaolacci-murmur3" ,go-github-com-spaolacci-murmur3)
-         ("go-golang-org-x-crypto" ,go-golang-org-x-crypto)))
+       (list go-github-com-libp2p-go-flow-metrics
+             go-github-com-libp2p-go-libp2p-peer
+             go-github-com-libp2p-go-libp2p-protocol
+             go-github-com-libp2p-go-libp2p-crypto
+             go-github-com-mr-tron-base58
+             go-github-com-multiformats-go-multihash
+             go-github-com-btcsuite-btcd-btcec
+             go-github-com-gogo-protobuf
+             go-github-com-gxed-hashland-keccakpg
+             go-github-com-minio-blake2b-simd
+             go-github-com-minio-sha256-simd
+             go-github-com-spaolacci-murmur3
+             go-golang-org-x-crypto))
       (home-page "https://github.com/libp2p/go-libp2p-metrics")
       (synopsis "Connection wrapper for go-libp2p that provides bandwidth metrics")
       (description "A connection wrapper for @command{go-libp2p} that provides bandwidth
@@ -4879,7 +4914,7 @@ unknown structures such as those decoded from JSON.")
     (arguments
      `(#:import-path "github.com/mitchellh/copystructure"))
     (native-inputs
-     `(("go-github-com-mitchellh-reflectwalk" ,go-github-com-mitchellh-reflectwalk)))
+     (list go-github-com-mitchellh-reflectwalk))
     (home-page "https://github.com/mitchellh/copystructure")
     (synopsis "Go library for decoding deep copying values")
     (description "@code{copystructure} is a Go library for deep copying values
@@ -4911,13 +4946,13 @@ references.")
        '(#:import-path
          "github.com/multiformats/go-multiaddr"))
       (native-inputs
-       `(("go-github-com-multiformats-go-multihash" ,go-github-com-multiformats-go-multihash)
-         ("go-github-com-gxed-hashland-keccakpg" ,go-github-com-gxed-hashland-keccakpg)
-         ("go-github-com-minio-blake2b-simd" ,go-github-com-minio-blake2b-simd)
-         ("go-github-com-minio-sha256-simd" ,go-github-com-minio-sha256-simd)
-         ("go-github-com-mr-tron-base58" ,go-github-com-mr-tron-base58)
-         ("go-github-com-spaolacci-murmur3" ,go-github-com-spaolacci-murmur3)
-         ("go-golang-org-x-crypto" ,go-golang-org-x-crypto)))
+       (list go-github-com-multiformats-go-multihash
+             go-github-com-gxed-hashland-keccakpg
+             go-github-com-minio-blake2b-simd
+             go-github-com-minio-sha256-simd
+             go-github-com-mr-tron-base58
+             go-github-com-spaolacci-murmur3
+             go-golang-org-x-crypto))
       (home-page "https://github.com/multiformats/go-multiaddr")
       (synopsis "Composable and future-proof network addresses")
       (description "Multiaddr is a standard way to represent addresses that
@@ -4954,14 +4989,14 @@ does the following:
                ;; TODO: Tests fail because they try to access the network.
                #:tests? #f)))
       (native-inputs
-       `(("go-github-com-multiformats-go-multiaddr" ,go-github-com-multiformats-go-multiaddr)
-         ("go-github-com-multiformats-go-multihash" ,go-github-com-multiformats-go-multihash)
-         ("go-github-com-gxed-hashland-keccakpg" ,go-github-com-gxed-hashland-keccakpg)
-         ("go-github-com-minio-blake2b-simd" ,go-github-com-minio-blake2b-simd)
-         ("go-github-com-minio-sha256-simd" ,go-github-com-minio-sha256-simd)
-         ("go-github-com-mr-tron-base58" ,go-github-com-mr-tron-base58)
-         ("go-github-com-spaolacci-murmur3" ,go-github-com-spaolacci-murmur3)
-         ("go-golang-org-x-crypto" ,go-golang-org-x-crypto)))
+       (list go-github-com-multiformats-go-multiaddr
+             go-github-com-multiformats-go-multihash
+             go-github-com-gxed-hashland-keccakpg
+             go-github-com-minio-blake2b-simd
+             go-github-com-minio-sha256-simd
+             go-github-com-mr-tron-base58
+             go-github-com-spaolacci-murmur3
+             go-golang-org-x-crypto))
       (home-page "https://github.com/multiformats/go-multiaddr-net")
       (synopsis "Multiaddress net tools")
       (description "This package provides Multiaddr specific versions of
@@ -5048,7 +5083,7 @@ as conversion to and from @command{net.Addr}.")
        '(#:import-path
          "github.com/sabhiram/go-gitignore"))
       (native-inputs
-       `(("go-github-com-stretchr-testify" ,go-github-com-stretchr-testify)))
+       (list go-github-com-stretchr-testify))
       (home-page "https://github.com/sabhiram/go-gitignore")
       (synopsis "Gitignore parser for Go")
       (description "A @command{.gitignore} parser for Go.")
@@ -5073,7 +5108,7 @@ as conversion to and from @command{net.Addr}.")
     (arguments
      '(#:import-path "github.com/urfave/cli"))
     (propagated-inputs
-     `(("go-github-com-go-md2man" ,go-github-com-go-md2man)))
+     (list go-github-com-go-md2man))
     (home-page "https://github.com/urfave/cli")
     (synopsis "Simple, fast, and fun package for building command line apps in Go")
     (description "@command{cli} is a simple, fast, and fun package for
@@ -5123,7 +5158,7 @@ fast and distributable command line applications in an expressive way.")
     (arguments
      '(#:import-path "github.com/cpuguy83/go-md2man"))
     (propagated-inputs
-     `(("go-github-com-russross-blackfriday" ,go-github-com-russross-blackfriday)))
+     (list go-github-com-russross-blackfriday))
     (home-page "https://github.com/cpuguy83/go-md2man")
     (synopsis "Convert markdown into roff")
     (description "Go-md2man is a Go program that converts markdown to roff for
@@ -5148,10 +5183,9 @@ the purpose of building man pages.")
     (arguments
      '(#:import-path "github.com/russross/blackfriday"))
     (propagated-inputs
-     `(("go-github-com-shurcool-sanitized-anchor-name"
-        ,go-github-com-shurcool-sanitized-anchor-name)))
+     (list go-github-com-shurcool-sanitized-anchor-name))
     (native-inputs
-     `(("go-github-com-pmezard-go-difflib" ,go-github-com-pmezard-go-difflib)))
+     (list go-github-com-pmezard-go-difflib))
     (home-page "https://github.com/russross/blackfriday")
     (synopsis "Markdown processor in Go")
     (description "Blackfriday is a Markdown processor in Go.")
@@ -5343,7 +5377,7 @@ format in Go.")
                 "0vzfz06y9q8gs2nxx0kys0591vzp78k0fvpb8digi5n15h3b25hy"))))
     (build-system go-build-system)
     (propagated-inputs
-     `(("go-github-com-kr-text" ,go-github-com-kr-text)))
+     (list go-github-com-kr-text))
     (arguments
      '(#:import-path "github.com/kr/pretty"))
     (synopsis "Pretty printer for Go values")
@@ -5370,7 +5404,7 @@ format in Go.")
      '(#:import-path "github.com/kylelemons/godebug/diff"
        #:unpack-path "github.com/kylelemons/godebug"))
     (home-page "https://github.com/kylelemons/godebug")
-    (synopsis "Pretty printer for Go values.")
+    (synopsis "Pretty printer for Go values")
     (description
      "This package will pretty print a compact representation of a Go data
 structure.  It can also produce a much more verbose, one-item-per-line
@@ -5451,7 +5485,7 @@ golang's database/sql package.")
 (define-public go-golang-org-colorful
   (package
     (name "go-golang-org-colorful")
-    (version "1.0.2")
+    (version "1.2.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -5460,12 +5494,12 @@ golang's database/sql package.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0fig06880bvk1l92j4127v4x9sar4ds7ga8959gxxghb2w70b7l2"))))
+                "08c3fkf27r16izjjd4w94xd1z7w1r4mdalbl53ms2ka2j465s3qs"))))
     (build-system go-build-system)
     (arguments
      '(#:import-path "github.com/lucasb-eyer/go-colorful"))
     (native-inputs
-     `(("go-golang-org-sql-mock" ,go-golang-org-sql-mock)))
+     (list go-golang-org-sql-mock))
     (synopsis "Convert between colorspaces and generate colors")
     (description "This package implements Go's @code{color.Color} interface
 and provides a means of converting colors stored as RGB to various
@@ -5491,7 +5525,7 @@ colorspaces.")
     (arguments
      '(#:import-path "github.com/gdamore/encoding"))
     (inputs
-     `(("go-golang-org-x-text" ,go-golang-org-x-text)))
+     (list go-golang-org-x-text))
     (home-page "https://github.com/gdamore/encoding")
     (synopsis "Provide encodings missing from Go")
     (description "This package provides useful encodings not included in the
@@ -5518,22 +5552,10 @@ non-UTF-friendly sources.")
            "0il2nnxp2cqiy73m49215dnf9in3vd25ji8qxbmq87c5qy7i1q9d"))))
       (build-system go-build-system)
       (arguments
-       `(#:import-path "github.com/gdamore/tcell"
-         #:phases
-         (modify-phases %standard-phases
-           (add-before 'reset-gzip-timestamps 'make-files-writable
-             (lambda* (#:key outputs #:allow-other-keys)
-               ;; Make sure .gz files are writable so that the
-               ;; 'reset-gzip-timestamps' phase can do its work.
-               (let ((out (assoc-ref outputs "out")))
-                 (for-each make-file-writable
-                           (find-files out "\\.gz$"))
-                 #t))))))
+       `(#:import-path "github.com/gdamore/tcell"))
       (inputs
-       `(("go-github.com-mattn-go-runewidth" ,go-github.com-mattn-go-runewidth)
-         ("go-golang-org-colorful" ,go-golang-org-colorful)
-         ("go-golang-org-x-text" ,go-golang-org-x-text)
-         ("go-github-com-gdamore-encoding" ,go-github-com-gdamore-encoding)))
+       (list go-github.com-mattn-go-runewidth go-golang-org-colorful
+             go-golang-org-x-text go-github-com-gdamore-encoding))
       (home-page "https://github.com/gdamore/tcell")
       (synopsis "Provide a cell-based view for text terminals")
       (description "This package includes a full parser and expander for
@@ -5569,9 +5591,8 @@ systems.")
                  (for-each make-file-writable
                            (find-files out "\\.gz$"))))))))
       (propagated-inputs
-       `(("go-golang-org-x-term" ,go-golang-org-x-term)
-         ("go-golang-org-x-sys" ,go-golang-org-x-sys)
-         ,@(package-inputs go-github-com-gdamore-tcell)))))
+       (modify-inputs (package-inputs go-github-com-gdamore-tcell)
+         (prepend go-golang-org-x-term go-golang-org-x-sys)))))
 
 (define-public go-github-com-mattn-go-shellwords
   (let ((commit "2444a32a19f450fabaa0bb3e96a703f15d9a97d2")
@@ -5670,7 +5691,7 @@ mutex, simply ignore the RLock/RUnlock functions.")
        ;; The test suite requires networking.
        #:tests? #f))
     (propagated-inputs
-     `(("go-golang-org-x-crypto" ,go-golang-org-x-crypto)))
+     (list go-golang-org-x-crypto))
     (synopsis "TLS 1.3 with QUIC in Go")
     (description "This package provides @code{qtls}, a QUIC-capable variant of
 the Go standard library's TLS 1.3 implementation.")
@@ -5716,7 +5737,7 @@ internal ChaCha20 package.")
     (arguments
      '(#:import-path "github.com/cheekybits/genny"))
     (propagated-inputs
-     `(("go-golang-org-x-tools" ,go-golang-org-x-tools)))
+     (list go-golang-org-x-tools))
     (synopsis "Generics for Go")
     (description "This package provides @code{genny}, a Go language
 implementation of generics.")
@@ -5742,11 +5763,10 @@ implementation of generics.")
        ;; XXX More packages required...
        #:tests? #f))
     (propagated-inputs
-     `(("go-golang-org-x-crypto" ,go-golang-org-x-crypto)
-       ("go-github-com-cheekybits-genny" ,go-github-com-cheekybits-genny)
-       ("go-github-com-marten-seemann-chacha20" ,go-github-com-marten-seemann-chacha20)
-       ("go-github-com-marten-seemann-qtls" ,go-github-com-marten-seemann-qtls)
-       ("go-github-com-golang-protobuf-proto" ,go-github-com-golang-protobuf-proto)))
+     (list go-golang-org-x-crypto go-github-com-cheekybits-genny
+           go-github-com-marten-seemann-chacha20
+           go-github-com-marten-seemann-qtls
+           go-github-com-golang-protobuf-proto))
     (synopsis "QUIC in Go")
     (description "This package provides a Go language implementation of the QUIC
 network protocol.")
@@ -5770,7 +5790,7 @@ network protocol.")
     (arguments
      '(#:import-path "github.com/francoispqt/gojay"))
     (propagated-inputs
-     `(("go-github-com-stretchr-testify" ,go-github-com-stretchr-testify)))
+     (list go-github-com-stretchr-testify))
     (synopsis "JSON encoder/decoder with powerful stream API for Golang")
     (description "GoJay is a performant JSON encoder/decoder for Golang.  It has
 a simple API and doesn't use reflection.  It relies on small interfaces to
@@ -5916,7 +5936,7 @@ fnmatch gist (https://gist.github.com/kballard/272720).")
       (arguments
        '(#:import-path "github.com/ddevault/go-libvterm"))
       (propagated-inputs
-       `(("go-github-com-mattn-go-pointer" ,go-github-com-mattn-go-pointer)))
+       (list go-github-com-mattn-go-pointer))
       (home-page "https://github.com/ddevault/go-libvterm")
       (synopsis "Go binding to libvterm")
       (description
@@ -5941,7 +5961,7 @@ fnmatch gist (https://gist.github.com/kballard/272720).")
     (arguments
      '(#:import-path "github.com/emersion/go-imap"))
     (native-inputs
-     `(("go-golang-org-x-text" ,go-golang-org-x-text)))
+     (list go-golang-org-x-text))
     (home-page "https://github.com/emersion/go-imap")
     (synopsis "IMAP4rev1 library written in Go")
     (description "This package provides an IMAP4rev1 library written in Go.  It
@@ -5992,9 +6012,8 @@ can be used to build a client and/or a server.")
       (arguments
        '(#:import-path "github.com/emersion/go-imap-idle"))
       (native-inputs
-       `(("go-github-com-emersion-go-imap" ,go-github-com-emersion-go-imap)
-         ("go-github-com-emersion-go-sasl" ,go-github-com-emersion-go-sasl)
-         ("go-golang-org-x-text" ,go-golang-org-x-text)))
+       (list go-github-com-emersion-go-imap go-github-com-emersion-go-sasl
+             go-golang-org-x-text))
       (home-page "https://github.com/emersion/go-imap-idle")
       (synopsis "IDLE extension for go-imap")
       (description "This package provides an IDLE extension for go-imap.")
@@ -6012,10 +6031,17 @@ can be used to build a client and/or a server.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1zc0zlilf03h121f9jqq3ar0hfm7706547zysxp2qxbm920pz7h0"))))
+                "1zc0zlilf03h121f9jqq3ar0hfm7706547zysxp2qxbm920pz7h0"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  (delete-file-recursively "vendor")))))
     (build-system go-build-system)
     (arguments
      '(#:import-path "github.com/fatih/color"))
+    (propagated-inputs
+     (list go-github-com-mattn-go-colorable
+           go-github-com-mattn-go-isatty))
     (synopsis "Print colored text in Go")
     (description "This package provides an ANSI color package to output
 colorized or SGR defined output to the standard output.")
@@ -6040,7 +6066,7 @@ colorized or SGR defined output to the standard output.")
      '(#:import-path "github.com/google/go-cmp/cmp"
        #:unpack-path "github.com/google/go-cmp"))
     (propagated-inputs
-     `(("go-golang-org-x-xerrors" ,go-golang-org-x-xerrors)))
+     (list go-golang-org-x-xerrors))
     (synopsis "Determine equality of values in Go")
     (description "This package provides a more powerful and safer
 alternative to @code{reflect.DeepEqual} for comparing whether two values
@@ -6140,8 +6166,7 @@ into URL query parameters.")
        #:import-path "github.com/google/go-github/v26/github"
        #:unpack-path "github.com/google/go-github/v26"))
     (native-inputs
-     `(("go-github-com-google-go-querystring" ,go-github-com-google-go-querystring)
-       ("go-golang-org-x-crypto" ,go-golang-org-x-crypto)))
+     (list go-github-com-google-go-querystring go-golang-org-x-crypto))
     (home-page "https://github.com/google/go-github/")
     (synopsis "Client library for accessing the GitHub API v3")
     (description "@code{go-github} is a Go client library for accessing the
@@ -6229,9 +6254,7 @@ common task.")
 (define-public go-gotest-tools-internal-format
   (package (inherit (go-gotest-tools-package "internal/format"))
     (native-inputs
-     `(("go-github-com-pkg-errors" ,go-github-com-pkg-errors)
-       ("go-github-com-google-go-cmp-cmp"
-        ,go-github-com-google-go-cmp-cmp)))
+     (list go-github-com-pkg-errors go-github-com-google-go-cmp-cmp))
     (synopsis "Formats messages for use with gotest-tools")
     (description "This package provides a way to format messages for use
 with gotest-tools.")))
@@ -6245,8 +6268,7 @@ with gotest-tools.")))
 (define-public go-gotest-tools-internal-source
   (package (inherit (go-gotest-tools-package "internal/source"))
     (native-inputs
-     `(("go-github-com-pkg-errors" ,go-github-com-pkg-errors)
-       ("go-github-com-google-go-cmp-cmp" ,go-github-com-google-go-cmp-cmp)))
+     (list go-github-com-pkg-errors go-github-com-google-go-cmp-cmp))
     (synopsis "Source code AST formatters for gotest-tools")
     (description "This package provides source code AST formatters for
 gotest-tools.")))
@@ -6261,9 +6283,7 @@ gotest-tools.")))
     ;(propagated-inputs
     ; `(("go-gotest-tools-internal-format" ,go-gotest-tools-internal-format)))
     (native-inputs
-     `(("go-github-com-pkg-errors" ,go-github-com-pkg-errors)
-       ("go-github-com-google-go-cmp-cmp"
-        ,go-github-com-google-go-cmp-cmp)))
+     (list go-github-com-pkg-errors go-github-com-google-go-cmp-cmp))
     (synopsis "Compare values and fail a test when a comparison fails")
     (description "This package provides a way to compare values and fail a
 test when a comparison fails.")
@@ -6287,29 +6307,22 @@ test when a comparison fails.")
     (arguments
      '(#:import-path "gotest.tools/gotestsum"))
     (native-inputs
-     `(("go-github-com-fatih-color" ,go-github-com-fatih-color)
-       ("go-golang.org-x-sync-errgroup" ,go-golang.org-x-sync-errgroup)
-       ("go-github-com-pkg-errors" ,go-github-com-pkg-errors)
-       ("go-github-com-sirupsen-logrus"
-        ,go-github-com-sirupsen-logrus)
-       ("go-github-com-spf13-pflag" ,go-github-com-spf13-pflag)
-       ("go-github-com-jonboulle-clockwork"
-        ,go-github-com-jonboulle-clockwork)
-       ("go-golang-org-x-crypto" ,go-golang-org-x-crypto)
-       ("go-gotest-tools-assert" ,go-gotest-tools-assert)
-       ("go-github-com-google-go-cmp-cmp"
-        ,go-github-com-google-go-cmp-cmp)
-       ;; TODO: This would be better as a propagated-input of
-       ;; go-gotest-tools-assert, but that does not work for
-       ;; some reason.
-       ("go-gotest-tools-internal-format"
-        ,go-gotest-tools-internal-format)
-       ("go-gotest-tools-internal-difflib"
-        ,go-gotest-tools-internal-difflib)
-       ("go-gotest-tools-internal-source"
-        ,go-gotest-tools-internal-source)
-       ("go-github-com-google-go-cmp-cmp"
-        ,go-github-com-google-go-cmp-cmp)))
+     (list go-github-com-fatih-color
+           go-golang.org-x-sync-errgroup
+           go-github-com-pkg-errors
+           go-github-com-sirupsen-logrus
+           go-github-com-spf13-pflag
+           go-github-com-jonboulle-clockwork
+           go-golang-org-x-crypto
+           go-gotest-tools-assert
+           go-github-com-google-go-cmp-cmp
+           ;; TODO: This would be better as a propagated-input of
+           ;; go-gotest-tools-assert, but that does not work for
+           ;; some reason.
+           go-gotest-tools-internal-format
+           go-gotest-tools-internal-difflib
+           go-gotest-tools-internal-source
+           go-github-com-google-go-cmp-cmp))
     (synopsis "Go test runner with output optimized for humans")
     (description "This package provides a @code{go test} runner with output
 optimized for humans, JUnit XML for CI integration, and a summary of the
@@ -6361,7 +6374,7 @@ data serialization format.")
     (home-page "https://github.com/mattn/go-zglob")
     (synopsis "Glob library that descends into other directories")
     (description " A glob library that implements descending into other
-directories.  It is optimized for filewalking. ")
+directories.  It is optimized for filewalking.")
     (license license:expat)))
 
 (define-public go-github-com-mattn-go-sqlite3
@@ -6436,8 +6449,7 @@ efficient space usage.")
                (("spaolacci") "twmb"))
              #t)))))
     (propagated-inputs
-     `(("go-github-com-twmb-murmur3" ,go-github-com-twmb-murmur3)
-       ("go-github-com-willf-bitset" ,go-github-com-willf-bitset)))
+     (list go-github-com-twmb-murmur3 go-github-com-willf-bitset))
     (synopsis "Bloom filters in Go")
     (description "This package provides a Go implementation of bloom filters,
 based on murmurhash.")
@@ -6489,7 +6501,7 @@ characters with their ASCII approximations.")
       (arguments
        `(#:import-path "github.com/golang/freetype"))
       (propagated-inputs
-       `(("go-golang-org-x-image" ,go-golang-org-x-image)))
+       (list go-golang-org-x-image))
       (home-page "https://github.com/golang/freetype")
       (synopsis "Freetype font rasterizer in the Go programming language")
       (description "The Freetype font rasterizer in the Go programming language.")
@@ -6514,7 +6526,7 @@ characters with their ASCII approximations.")
      `(#:tests? #f      ; Issue with test flags.
        #:import-path "github.com/fogleman/gg"))
     (propagated-inputs
-     `(("go-github-com-golang-freetype" ,go-github-com-golang-freetype)))
+     (list go-github-com-golang-freetype))
     (home-page "https://github.com/fogleman/gg")
     (synopsis "2D rendering in Go")
     (description "@code{gg} is a library for rendering 2D graphics in pure Go.")
@@ -6639,8 +6651,7 @@ used by other processes.")
       (arguments
        `(#:import-path "github.com/surgebase/porter2"))
       (native-inputs
-       `(("go-github-com-stretchr-testify" ,go-github-com-stretchr-testify)
-         ("go-github-com-surge-glog" ,go-github-com-surge-glog)))
+       (list go-github-com-stretchr-testify go-github-com-surge-glog))
       (home-page "https://github.com/surgebase/porter2")
       (synopsis "Go library implementing english Porter2 stemmer")
       (description "Porter2 implements the
@@ -6739,7 +6750,7 @@ which are widely used in other languages but absent in Go package strings.")
     (arguments
      `(#:import-path "github.com/imdario/mergo"))
     (native-inputs
-     `(("go-gopkg-in-yaml-v2" ,go-gopkg-in-yaml-v2)))
+     (list go-gopkg-in-yaml-v2))
     (home-page "https://github.com/imdario/mergo/")
     (synopsis "Helper to merge structs and maps in Golang")
     (description "Helper to merge structs and maps in Golang.  Useful for
@@ -6769,16 +6780,16 @@ maps (because they are not addressable using Go reflection).")
      `(#:tests? #f ;network tests only
        #:import-path "github.com/Masterminds/sprig"))
     (native-inputs
-     `(("go-github-com-masterminds-goutils" ,go-github-com-masterminds-goutils)
-       ("go-github-com-masterminds-semver" ,go-github-com-masterminds-semver)
-       ("go-github-com-google-uuid" ,go-github-com-google-uuid)
-       ("go-github-com-huandu-xstrings" ,go-github-com-huandu-xstrings)
-       ("go-github-com-imdario-mergo" ,go-github-com-imdario-mergo)
-       ("go-github-com-mitchellh-reflectwalk" ,go-github-com-mitchellh-reflectwalk)
-       ("go-github-com-mitchellh-copystructure" ,go-github-com-mitchellh-copystructure)
-       ("go-github-com-spf13-cast" ,go-github-com-spf13-cast)
-       ("go-golang-org-x-crypto" ,go-golang-org-x-crypto)
-       ("go-github-com-stretchr-testify" ,go-github-com-stretchr-testify)))
+     (list go-github-com-masterminds-goutils
+           go-github-com-masterminds-semver
+           go-github-com-google-uuid
+           go-github-com-huandu-xstrings
+           go-github-com-imdario-mergo
+           go-github-com-mitchellh-reflectwalk
+           go-github-com-mitchellh-copystructure
+           go-github-com-spf13-cast
+           go-golang-org-x-crypto
+           go-github-com-stretchr-testify))
     (home-page "https://github.com/Masterminds/sprig/")
     (synopsis "Template functions for Go templates")
     (description "Sprig is a library that provides more than 100 commonly used
@@ -6853,7 +6864,7 @@ matching and globbing with support for \"doublestar\" patterns.")
     (arguments
      `(#:import-path "github.com/alecthomas/colour"))
     (native-inputs
-     `(("go-github-com-mattn-go-isatty" ,go-github-com-mattn-go-isatty)))
+     (list go-github-com-mattn-go-isatty))
     (home-page "https://github.com/alecthomas/colour/")
     (synopsis "Colour terminal text for Go")
     (description "Package colour provides Quake-style colour formatting for
@@ -6883,7 +6894,7 @@ stripped.")
       (arguments
        `(#:import-path "github.com/alecthomas/repr"))
       (native-inputs
-       `(("go-github-com-stretchr-testify" ,go-github-com-stretchr-testify)))
+       (list go-github-com-stretchr-testify))
       (home-page "https://github.com/alecthomas/repr/")
       (synopsis "Represent Go values in an almost direct form")
       (description "This package attempts to represent Go values in a form that
@@ -6908,7 +6919,7 @@ can be used almost directly in Go source code.")
      `(#:import-path "github.com/sergi/go-diff/diffmatchpatch"
        #:unpack-path "github.com/sergi/go-diff"))
     (native-inputs
-     `(("go-github-com-stretchr-testify" ,go-github-com-stretchr-testify)))
+     (list go-github-com-stretchr-testify))
     (home-page "https://github.com/sergi/go-diff/")
     (synopsis "Algorithms to perform operations for synchronizing plain text")
     (description "@code{go-diff} offers algorithms to perform operations required for
@@ -6939,10 +6950,8 @@ synchronizing plain text:
       (arguments
        `(#:import-path "github.com/alecthomas/assert"))
       (native-inputs
-       `(("go-github-com-mattn-go-isatty" ,go-github-com-mattn-go-isatty)
-         ("go-github-com-alecthomas-colour" ,go-github-com-alecthomas-colour)
-         ("go-github-com-alecthomas-repr" ,go-github-com-alecthomas-repr)
-         ("go-github-com-sergi-go-diff" ,go-github-com-sergi-go-diff)))
+       (list go-github-com-mattn-go-isatty go-github-com-alecthomas-colour
+             go-github-com-alecthomas-repr go-github-com-sergi-go-diff))
       (home-page "https://github.com/alecthomas/assert/")
       (synopsis "Go assertion library")
       (description "Assertion library that:
@@ -6970,12 +6979,12 @@ synchronizing plain text:
     (arguments
      `(#:import-path "github.com/alecthomas/chroma"))
     (native-inputs
-     `(("go-github-com-dlclark-regexp2" ,go-github-com-dlclark-regexp2)
-       ("go-github-com-alecthomas-assert" ,go-github-com-alecthomas-assert)
-       ("go-github-com-alecthomas-colour" ,go-github-com-alecthomas-colour)
-       ("go-github-com-alecthomas-repr" ,go-github-com-alecthomas-repr)
-       ("go-github-com-mattn-go-isatty" ,go-github-com-mattn-go-isatty)
-       ("go-github-com-sergi-go-diff" ,go-github-com-sergi-go-diff)))
+     (list go-github-com-dlclark-regexp2
+           go-github-com-alecthomas-assert
+           go-github-com-alecthomas-colour
+           go-github-com-alecthomas-repr
+           go-github-com-mattn-go-isatty
+           go-github-com-sergi-go-diff))
     (home-page "https://github.com/alecthomas/chroma/")
     (synopsis "General purpose syntax highlighter in pure Go")
     (description "Chroma takes source code and other structured text and
@@ -6999,7 +7008,7 @@ converts it into syntax highlighted HTML, ANSI-coloured text, etc.")
     (arguments
      `(#:import-path "github.com/andybalholm/cascadia"))
     (native-inputs
-     `(("go-golang-org-x-net" ,go-golang-org-x-net)))
+     (list go-golang-org-x-net))
     (home-page "https://github.com/andybalholm/cascadia/")
     (synopsis "CSS selectors for HTML")
     (description "The Cascadia package implements CSS selectors for use with
@@ -7023,8 +7032,7 @@ the parse trees produced by the html package.")
     (arguments
      `(#:import-path "github.com/PuerkitoBio/goquery"))
     (propagated-inputs
-     `(("go-github-com-andybalholm-cascadia" ,go-github-com-andybalholm-cascadia)
-       ("go-golang-org-x-net" ,go-golang-org-x-net)))
+     (list go-github-com-andybalholm-cascadia go-golang-org-x-net))
     (home-page "https://github.com/PuerkitoBio/goquery")
     (synopsis "Features similar to jQuery to the Go language")
     (description "@code{goquery} brings a syntax and a set of features similar
@@ -7049,9 +7057,8 @@ to jQuery to the Go language.")
     (arguments
      '(#:import-path "github.com/jmespath/go-jmespath"))
     (native-inputs
-     `(("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-gopkg-in-yaml-v2" ,go-gopkg-in-yaml-v2)))
+     (list go-github-com-davecgh-go-spew go-github-com-pmezard-go-difflib
+           go-gopkg-in-yaml-v2))
     (home-page "https://github.com/jmespath/go-jmespath")
     (synopsis "Golang implementation of JMESPath")
     (description
@@ -7076,10 +7083,9 @@ transforms one JSON document into another through a JMESPath expression.")
     (arguments
      `(#:import-path "github.com/aymerick/douceur"))
     (native-inputs
-     `(("go-github-com-puerkitobio-goquery" ,go-github-com-puerkitobio-goquery)
-       ("go-github-com-andybalholm-cascadia" ,go-github-com-andybalholm-cascadia)
-       ("go-golang-org-x-net" ,go-golang-org-x-net)
-       ("go-github-com-gorilla-css" ,go-github-com-gorilla-css)))
+     (list go-github-com-puerkitobio-goquery
+           go-github-com-andybalholm-cascadia go-golang-org-x-net
+           go-github-com-gorilla-css))
     (home-page "https://github.com/aymerick/douceur/")
     (synopsis "CSS parser and inliner")
     (description "This package provides a CSS parser and inliner.")
@@ -7101,12 +7107,13 @@ transforms one JSON document into another through a JMESPath expression.")
     (build-system go-build-system)
     (arguments
      `(#:import-path "github.com/chris-ramon/douceur"))
+    (propagated-inputs
+     (list go-github-com-aymerick-douceur
+           go-github-com-gorilla-css))
     (native-inputs
-     `(("go-github-com-aymerick-douceur" ,go-github-com-aymerick-douceur)
-       ("go-github-com-puerkitobio-goquery" ,go-github-com-puerkitobio-goquery)
-       ("go-github-com-andybalholm-cascadia" ,go-github-com-andybalholm-cascadia)
-       ("go-golang-org-x-net" ,go-golang-org-x-net)
-       ("go-github-com-gorilla-css" ,go-github-com-gorilla-css)))
+     (list go-github-com-puerkitobio-goquery
+           go-github-com-andybalholm-cascadia
+           go-golang-org-x-net))
     (home-page "https://github.com/chris-ramon/douceur/")
     (synopsis "CSS parser and inliner")
     (description "This package provides a CSS parser and inliner.")
@@ -7128,11 +7135,9 @@ transforms one JSON document into another through a JMESPath expression.")
     (build-system go-build-system)
     (arguments
      `(#:import-path "github.com/microcosm-cc/bluemonday"))
-    (native-inputs
-     `(("go-github-com-chris-ramon-douceur" ,go-github-com-chris-ramon-douceur)
-       ("go-github-com-aymerick-douceur" ,go-github-com-aymerick-douceur)
-       ("go-github-com-gorilla-css" ,go-github-com-gorilla-css)
-       ("go-golang-org-x-net" ,go-golang-org-x-net)))
+    (propagated-inputs
+     (list go-github-com-chris-ramon-douceur
+           go-golang-org-x-net))
     (home-page "https://github.com/microcosm-cc/bluemonday/")
     (synopsis "HTML sanitizer")
     (description "@code{bluemonday} is a HTML sanitizer implemented in Go.")
@@ -7141,7 +7146,7 @@ transforms one JSON document into another through a JMESPath expression.")
 (define-public go-github-com-muesli-reflow-wordwrap
   (package
     (name "go-github-com-muesli-reflow-wordwrap")
-    (version "0.1.0")
+    (version "0.3.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -7150,13 +7155,13 @@ transforms one JSON document into another through a JMESPath expression.")
               (file-name (git-file-name "go-github-com-muesli-reflow" version))
               (sha256
                (base32
-                "1vhynm2n1az13fn03lp0gi28p9mznq1mblglh8f2rb9y1vkd2dqr"))))
+                "09zcz2cqdwgj1ilya5pqwndryk6lansn87x63fcm8j1xn74vd2ry"))))
     (build-system go-build-system)
     (arguments
      `(#:import-path "github.com/muesli/reflow/wordwrap"
        #:unpack-path "github.com/muesli/reflow"))
     (native-inputs
-     `(("go-github.com-mattn-go-runewidth" ,go-github.com-mattn-go-runewidth)))
+     (list go-github.com-mattn-go-runewidth))
     (home-page "https://github.com/muesli/reflow/")
     (synopsis "Collection of methods helping to transform blocks of text")
     (description "This package provides a collection of ANSI-aware methods and
@@ -7187,10 +7192,18 @@ io.Writers helping you to transform blocks of text.")
      `(#:import-path "github.com/muesli/reflow/padding"
        #:unpack-path "github.com/muesli/reflow"))))
 
+(define-public go-github-com-muesli-reflow-truncate
+  (package
+    (inherit go-github-com-muesli-reflow-wordwrap)
+    (name "go-github-com-muesli-reflow-truncate")
+    (arguments
+     `(#:import-path "github.com/muesli/reflow/truncate"
+       #:unpack-path "github.com/muesli/reflow"))))
+
 (define-public go-github-com-muesli-termenv
   (package
     (name "go-github-com-muesli-termenv")
-    (version "0.7.0")
+    (version "0.8.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -7199,15 +7212,13 @@ io.Writers helping you to transform blocks of text.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "09fwrdhy7c9qlf70h97f5inh6xvkfq1vi8fwx9q7bwmjjbiykk8m"))))
+                "0m24ljq1nq7z933fcvg99fw0fhxj9rb5ll4rlay7z2f2p59mrbdp"))))
     (build-system go-build-system)
     (arguments
      `(#:import-path "github.com/muesli/termenv"))
     (native-inputs
-     `(("go-github-com-google-goterm" ,go-github-com-google-goterm)
-       ("go-golang-org-colorful" ,go-golang-org-colorful)
-       ("go-github-com-mattn-go-isatty" ,go-github-com-mattn-go-isatty)
-       ("go-github.com-mattn-go-runewidth" ,go-github.com-mattn-go-runewidth)))
+     (list go-github-com-google-goterm go-golang-org-colorful
+           go-github-com-mattn-go-isatty go-github.com-mattn-go-runewidth))
     (home-page "https://github.com/muesli/termenv/")
     (synopsis "Advanced styling options on the terminal")
     (description "termenv lets you safely use advanced styling options on the
@@ -7236,7 +7247,7 @@ escape sequences and color conversions.")
     (arguments
      `(#:import-path "github.com/nwidger/jsoncolor"))
     (native-inputs
-     `(("go-github-com-fatih-color" ,go-github-com-fatih-color)))
+     (list go-github-com-fatih-color))
     (synopsis "Colorized JSON marshalling and encoding")
     (description
      "@code{jsoncolor} is a drop-in replacement for @code{encoding/json}'s
@@ -7260,8 +7271,8 @@ which produce colorized output using github.com/fatih/color.")
     (build-system go-build-system)
     (arguments
      `(#:import-path "github.com/olekukonko/tablewriter"))
-    (native-inputs
-     `(("go-github.com-mattn-go-runewidth" ,go-github.com-mattn-go-runewidth)))
+    (propagated-inputs
+     (list go-github.com-mattn-go-runewidth))
     (home-page "https://github.com/olekukonko/tablewriter/")
     (synopsis "Generate ASCII table")
     (description "This package generates ASCII tables.  Features:
@@ -7322,25 +7333,25 @@ which produce colorized output using github.com/fatih/color.")
     (arguments
      `(#:import-path "github.com/charmbracelet/glamour"))
     (native-inputs
-     `(("go-github-com-alecthomas-chroma" ,go-github-com-alecthomas-chroma)
-       ("go-github-com-danwakefield-fnmatch" ,go-github-com-danwakefield-fnmatch)
-       ("go-github-com-dlclark-regexp2" ,go-github-com-dlclark-regexp2)
-       ("go-github-com-microcosm-cc-bluemonday" ,go-github-com-microcosm-cc-bluemonday)
-       ("go-github-com-chris-ramon-douceur" ,go-github-com-chris-ramon-douceur)
-       ("go-github-com-aymerick-douceur" ,go-github-com-aymerick-douceur)
-       ("go-github-com-gorilla-css" ,go-github-com-gorilla-css)
-       ("go-github-com-muesli-reflow-ansi" ,go-github-com-muesli-reflow-ansi)
-       ("go-github-com-muesli-reflow-wordwrap" ,go-github-com-muesli-reflow-wordwrap)
-       ("go-github-com-muesli-reflow-indent" ,go-github-com-muesli-reflow-indent)
-       ("go-github-com-muesli-reflow-padding" ,go-github-com-muesli-reflow-padding)
-       ("go-github.com-mattn-go-runewidth" ,go-github.com-mattn-go-runewidth)
-       ("go-github-com-muesli-termenv" ,go-github-com-muesli-termenv)
-       ("go-github-com-google-goterm" ,go-github-com-google-goterm)
-       ("go-golang-org-colorful" ,go-golang-org-colorful)
-       ("go-github-com-mattn-go-isatty" ,go-github-com-mattn-go-isatty)
-       ("go-github-com-olekukonko-tablewriter" ,go-github-com-olekukonko-tablewriter)
-       ("go-github-com-yuin-goldmark" ,go-github-com-yuin-goldmark)
-       ("go-golang-org-x-net" ,go-golang-org-x-net)))
+     (list go-github-com-alecthomas-chroma
+           go-github-com-danwakefield-fnmatch
+           go-github-com-dlclark-regexp2
+           go-github-com-microcosm-cc-bluemonday
+           go-github-com-chris-ramon-douceur
+           go-github-com-aymerick-douceur
+           go-github-com-gorilla-css
+           go-github-com-muesli-reflow-ansi
+           go-github-com-muesli-reflow-wordwrap
+           go-github-com-muesli-reflow-indent
+           go-github-com-muesli-reflow-padding
+           go-github.com-mattn-go-runewidth
+           go-github-com-muesli-termenv
+           go-github-com-google-goterm
+           go-golang-org-colorful
+           go-github-com-mattn-go-isatty
+           go-github-com-olekukonko-tablewriter
+           go-github-com-yuin-goldmark
+           go-golang-org-x-net))
     (home-page "https://github.com/charmbracelet/glamour/")
     (synopsis "Write handsome command-line tools with glamour")
     (description "@code{glamour} lets you render markdown documents and
@@ -7435,8 +7446,7 @@ errors (warnings).")
     (arguments
      `(#:import-path "github.com/go-git/gcfg"))
     (native-inputs
-     `(("go-gopkg-in-warnings" ,go-gopkg-in-warnings)
-       ("go-github-com-pkg-errors" ,go-github-com-pkg-errors)))
+     (list go-gopkg-in-warnings go-github-com-pkg-errors))
     (build-system go-build-system)
     (home-page "https://github.com/go-git/gcfg/")
     (synopsis "Gcfg reads INI-style configuration files into Go structs")
@@ -7460,7 +7470,7 @@ errors (warnings).")
     (arguments
      `(#:import-path "github.com/go-git/go-billy/v5"))
     (native-inputs
-     `(("go-gopkg-in-check-v1" ,go-gopkg-in-check-v1)))
+     (list go-gopkg-in-check-v1))
     (home-page "https://github.com/go-git/go-billy/")
     (synopsis "File system abstraction for Go")
     (description "Billy implements an interface based on the OS's standard
@@ -7538,13 +7548,13 @@ can manipulate a @file{ssh_config} file from a program.")
     (arguments
      `(#:import-path "github.com/xanzy/ssh-agent"))
     (native-inputs
-     `(("go-golang-org-x-crypto" ,go-golang-org-x-crypto)))
+     (list go-golang-org-x-crypto))
     (home-page "https://github.com/xanzy/ssh-agent/")
     (synopsis "Control ssh-agent from Go")
     (description "Package agent implements the ssh-agent protocol, and
 provides both a client and a server.  The client can talk to a standard
 ssh-agent that uses UNIX sockets, and one could implement an alternative
-ssh-agent process using the sample server. ")
+ssh-agent process using the sample server.")
     (license license:asl2.0)))
 
 (define-public go-github-com-alcortesm-tgz
@@ -7575,11 +7585,8 @@ ssh-agent process using the sample server. ")
        `(#:import-path "github.com/alcortesm/tgz"
          #:phases
          (modify-phases %standard-phases
-           (add-after 'unpack 'make-git-checkout-writable
-             (lambda* (#:key outputs #:allow-other-keys)
-               (for-each make-file-writable (find-files "."))
-               (for-each make-file-writable (find-files (assoc-ref outputs "out")))
-               #t)))))
+           ;; Files are test fixtures, not generated.
+           (delete 'reset-gzip-timestamps))))
       (home-page "https://github.com/alcortesm/tgz/")
       (synopsis "Go library to extract tgz files to temporal directories")
       (description "This package provides a Go library to extract tgz files to
@@ -7606,10 +7613,8 @@ temporal directories.")
        (modify-phases %standard-phases
          (delete 'reset-gzip-timestamps))))
     (native-inputs
-     `(("go-github-com-alcortesm-tgz" ,go-github-com-alcortesm-tgz)
-       ("go-github-com-go-git-go-billy" ,go-github-com-go-git-go-billy)
-       ("go-golang-org-x-sys" ,go-golang-org-x-sys)
-       ("go-gopkg-in-check-v1" ,go-gopkg-in-check-v1)))
+     (list go-github-com-alcortesm-tgz go-github-com-go-git-go-billy
+           go-golang-org-x-sys go-gopkg-in-check-v1))
     (home-page "https://github.com/go-git/go-git-fixtures/")
     (synopsis "Fixtures used by @code{go-git}")
     (description "This package provides fixtures used by @code{go-git}.")
@@ -7634,7 +7639,7 @@ temporal directories.")
       (arguments
        `(#:import-path "github.com/pkg/diff"))
       (native-inputs
-       `(("go-github-com-sergi-go-diff" ,go-github-com-sergi-go-diff)))
+       (list go-github-com-sergi-go-diff))
       (home-page "https://github.com/pkg/diff/")
       (synopsis "Create and print diffs")
       (description
@@ -7680,7 +7685,7 @@ temporal directories.")
     (arguments
      `(#:import-path "github.com/twpayne/go-vfs"))
     (native-inputs
-     `(("go-github-com-bmatcuk-doublestar" ,go-github-com-bmatcuk-doublestar)))
+     (list go-github-com-bmatcuk-doublestar))
     (home-page "https://github.com/twpayne/go-vfs/")
     (synopsis "Abstraction of the @code{os} and @code{ioutil} Go packages")
     (description "Package @code{vfs} provides an abstraction of the @code{os}
@@ -7704,8 +7709,7 @@ and @code{ioutil} packages that is easy to test.")
     (arguments
      `(#:import-path "github.com/twpayne/go-vfsafero"))
     (native-inputs
-     `(("go-github-com-twpayne-go-vfs" ,go-github-com-twpayne-go-vfs)
-       ("go-github-com-spf13-afero" ,go-github-com-spf13-afero)))
+     (list go-github-com-twpayne-go-vfs go-github-com-spf13-afero))
     (home-page "https://github.com/twpayne/go-vfsafero/")
     (synopsis "Compatibility later between @code{go-vfs} and @code{afero}")
     (description
@@ -7730,8 +7734,7 @@ and @code{ioutil} packages that is easy to test.")
     (arguments
      `(#:import-path "github.com/twpayne/go-xdg/v3"))
     (native-inputs
-     `(("go-github-com-stretchr-testify" ,go-github-com-stretchr-testify)
-       ("go-github-com-twpayne-go-vfs" ,go-github-com-twpayne-go-vfs)))
+     (list go-github-com-stretchr-testify go-github-com-twpayne-go-vfs))
     (home-page "https://github.com/twpayne/go-xdg/")
     (synopsis "Functions related to freedesktop.org")
     (description "Package @code{xdg} provides functions related to
@@ -7756,7 +7759,7 @@ and @code{ioutil} packages that is easy to test.")
      `(#:tests? #f ;no /var/run/dbus/system_bus_socket
        #:import-path "github.com/godbus/dbus"))
     (native-inputs
-     `(("dbus" ,dbus))) ;dbus-launch
+     (list dbus)) ;dbus-launch
     (home-page "https://github.com/godbus/dbus/")
     (synopsis "Native Go client bindings for the D-Bus")
     (description "@code{dbus} is a library that implements native Go client
@@ -7781,8 +7784,7 @@ bindings for the D-Bus message bus system.")
      `(#:tests? #f ;XXX: Fix dbus tests
        #:import-path "github.com/zalando/go-keyring"))
     (native-inputs
-     `(("go-github-com-godbus-dbus" ,go-github-com-godbus-dbus)
-       ("dbus" ,dbus)))
+     (list go-github-com-godbus-dbus dbus))
     (home-page "https://github.com/zalando/go-keyring/")
     (synopsis "Library for working with system keyring")
     (description "@code{go-keyring} is a library for setting, getting and
@@ -7806,7 +7808,7 @@ deleting secrets from the system keyring.")
     (arguments
      `(#:import-path "go.etcd.io/bbolt"))
     (propagated-inputs
-     `(("go-golang-org-x-sys" ,go-golang-org-x-sys)))
+     (list go-golang-org-x-sys))
     (home-page "https://pkg.go.dev/go.etcd.io/bbolt/")
     (synopsis "Low-level key/value store in Go")
     (description "This package implements a low-level key/value store in Go.")
@@ -7909,36 +7911,42 @@ error messages.")
 inspired by the causal messaging system in the Pony programming language.")
       (license license:expat))))
 
-(define-public go-github-com-cheggaaa-pb
+(define-public go-github-com-cheggaaa-pb-v3
   (package
-    (name "go-github-com-cheggaaa-pb")
-    (version "3.0.4")
+    (name "go-github-com-cheggaaa-pb-v3")
+    (version "3.0.8")
     (source
-      (origin
+     (origin
        (method git-fetch)
        (uri (git-reference
              (url "https://github.com/cheggaaa/pb/")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32
-         "0xhsv9yf3fz918ay6w0d87jnb3hk9vxvi16jk172kqq26x7jixd0"))))
+        (base32 "0d701s2niy39r650d1phjw19h4l27b1yfc2ih6s31f56b3zzqspx"))))
     (build-system go-build-system)
     (arguments
-     '(#:import-path "github.com/cheggaaa/pb/"))
+     '(#:import-path "github.com/cheggaaa/pb/v3"
+       ;; XXX: it does have tests but I'm not sure how to run them.
+       ;; go-build-system is looking in the wrong directory.
+       #:tests? #f))
     (propagated-inputs
-     `(("go-github-com-fatih-color" ,go-github-com-fatih-color)
-       ("go-github-com-mattn-go-colorable" ,go-github-com-mattn-go-colorable)
-       ("go-github.com-mattn-go-runewidth" ,go-github.com-mattn-go-runewidth)
-       ("go-golang-org-x-sys" ,go-golang-org-x-sys)))
-    (native-inputs
-     `(("go-github-com-mattn-go-isatty" ,go-github-com-mattn-go-isatty)))
+     (list go-golang-org-x-sys
+           go-github-com-rivo-uniseg
+           go-github-com-mattn-go-runewidth
+           go-github-com-mattn-go-isatty
+           go-github-com-mattn-go-colorable
+           go-github-com-fatih-color
+           go-github-com-vividcortex-ewma))
     (home-page "https://github.com/cheggaaa/pb/")
     (synopsis "Console progress bar for Go")
     (description "This package is a Go library that draws progress bars on
 the terminal.")
     (license license:bsd-3)))
 
+(define-public go-github-com-cheggaaa-pb
+  (deprecated-package "go-github-com-cheggaaa-pb" go-github-com-cheggaaa-pb-v3))
+
 (define-public go-github-com-gologme-log
   ;; this is the same as v1.2.0, only the LICENSE file changed
   (let ((commit "720ba0b3ccf0a91bc6018c9967a2479f93f56a55"))
@@ -7985,8 +7993,7 @@ additions.")
     (arguments
      '(#:import-path "github.com/frankban/quicktest"))
     (propagated-inputs
-     `(("go-github-com-google-go-cmp-cmp" ,go-github-com-google-go-cmp-cmp)
-       ("go-github-com-kr-pretty" ,go-github-com-kr-pretty)))
+     (list go-github-com-google-go-cmp-cmp go-github-com-kr-pretty))
     (home-page "https://github.com/frankban/quicktest")
     (synopsis "Quick helpers for testing Go applications")
     (description
@@ -8042,7 +8049,7 @@ tests.")
                  (invoke "go" "test" import-path "-tags" "dev"))
              #t)))))
     (propagated-inputs
-     `(("libsass" ,libsass)))
+     (list libsass))
     (native-inputs
      `(("go-github-com-frankban-quicktest" ,go-github-com-frankban-quicktest)
        ("libsass-src" ,(package-source libsass))))
@@ -8110,7 +8117,7 @@ JSON data to the machine.")
        ;; source: golang.zx2c4.com/wireguard
        (uri (git-reference
              (url "https://git.zx2c4.com/wireguard-go/")
-             (commit (string-append "v" version))))
+             (commit version)))
        (file-name (git-file-name name version))
        (sha256
         (base32
@@ -8119,10 +8126,8 @@ JSON data to the machine.")
     (arguments
      '(#:import-path "golang.zx2c4.com/wireguard"))
     (propagated-inputs
-     `(("go-golang-org-x-crypto" ,go-golang-org-x-crypto)
-       ("go-golang-org-x-net" ,go-golang-org-x-net)
-       ("go-golang-org-x-sys" ,go-golang-org-x-sys)
-       ("go-golang-org-x-text" ,go-golang-org-x-text)))
+     (list go-golang-org-x-crypto go-golang-org-x-net go-golang-org-x-sys
+           go-golang-org-x-text))
     (home-page "https://git.zx2c4.com/wireguard")
     (synopsis "Implementation of WireGuard in Go")
     (description "This package is a Go Implementation of WireGuard.")
@@ -8172,11 +8177,9 @@ modifying them.")
     (arguments
      `(#:import-path "github.com/goccy/go-yaml"))
     (propagated-inputs
-     `(("go-github-com-fatih-color" ,go-github-com-fatih-color)
-       ("go-golang-org-x-xerrors" ,go-golang-org-x-xerrors)))
+     (list go-github-com-fatih-color go-golang-org-x-xerrors))
     (native-inputs
-     `(("go-gopkg-in-go-playground-validator-v9"
-        ,go-gopkg-in-go-playground-validator-v9)))
+     (list go-gopkg-in-go-playground-validator-v9))
     (synopsis "YAML support for the Go language")
     (description
      "This package provides features beyond the
@@ -8259,7 +8262,7 @@ compressed streams in Go.")
        ;; and require network access.
        #:tests? #f))
     (propagated-inputs
-     `(("go-github-com-goccy-yaml" ,go-github-com-goccy-yaml)))
+     (list go-github-com-goccy-yaml))
     (synopsis "Go library to get configuration values from gitconfig")
     (description "@{gitconfig} is a package to get configuration values from gitconfig.")
     (license license:expat)))
@@ -8312,7 +8315,7 @@ algorithm.")
           (base32 "16p77p3d1v26qd3knxn087jqlad2qm23q8m796cdr66hrdc0gahq"))))
       (build-system go-build-system)
       (inputs
-       `(("pulseaudio" ,pulseaudio)))
+       (list pulseaudio))
       (arguments
        `(#:import-path "github.com/akosmarton/papipes"
          #:phases
@@ -8350,8 +8353,7 @@ sinks and sources.")
           (base32 "1awwczsa9yy99p035ckajqfs8m6mab0lz82mzlj1c5cj9lnmwplj"))))
       (build-system go-build-system)
       (propagated-inputs
-       `(("pkg-config" ,pkg-config)
-         ("pulseaudio" ,pulseaudio)))
+       (list pkg-config pulseaudio))
       (arguments
        '(#:import-path "github.com/mesilliac/pulse-simple"))
       (home-page "https://github.com/mesilliac/pulse-simple")
@@ -8401,8 +8403,7 @@ programs that use traditional command lines.")
     (arguments
      '(#:import-path "go.uber.org/atomic"))
     (native-inputs
-     `(("go-github-com-stretchr-testify" ,go-github-com-stretchr-testify)
-       ("go-github-com-davecgh-go-spew" ,go-github-com-davecgh-go-spew)))
+     (list go-github-com-stretchr-testify go-github-com-davecgh-go-spew))
     (home-page "https://go.uber.org/atomic")
     (synopsis "Wrapper types for sync/atomic")
     (description
@@ -8427,9 +8428,9 @@ atomic access.")
     (arguments
      '(#:import-path "go.uber.org/multierr"))
     (native-inputs
-     `(("go-github-com-stretchr-testify" ,go-github-com-stretchr-testify)))
+     (list go-github-com-stretchr-testify))
     (propagated-inputs
-     `(("go-go-uber-org-atomic" ,go-go-uber-org-atomic)))
+     (list go-go-uber-org-atomic))
     (home-page "https://go.uber.org/multierr")
     (synopsis "Error combination for Go")
     (description
@@ -8456,7 +8457,7 @@ atomic access.")
        '(#:import-path "golang.org/x/lint"
          #:tests? #f)) ;; TODO: Fix tests
       (propagated-inputs
-       `(("go-golang-org-x-tools" ,go-golang-org-x-tools)))
+       (list go-golang-org-x-tools))
       (home-page "https://golang.org/x/lint")
       (synopsis "Linter for Go source code")
       (description
@@ -8510,9 +8511,8 @@ tools with similar semantics.")
        (modify-phases %standard-phases
          (delete 'build))))
     (propagated-inputs
-     `(("go-golang-org-x-tools" ,go-golang-org-x-tools)
-       ("go-github-com-kisielk-gotool",go-github-com-kisielk-gotool)
-       ("go-github-com-burntsushi-toml" ,go-github-com-burntsushi-toml)))
+     (list go-golang-org-x-tools go-github-com-kisielk-gotool
+           go-github-com-burntsushi-toml))
     (home-page "https://honnef.co/go/tools")
     (synopsis "Staticcheck advanced Go linter")
     (description
@@ -8539,14 +8539,11 @@ simplifications, and enforces style rules.")
      '(#:import-path "go.uber.org/zap"
        #:tests? #f)) ; TODO: Fix tests
     (native-inputs
-     `(("go-github-com-stretchr-testify" ,go-github-com-stretchr-testify)
-       ("go-golang-org-x-lint" ,go-golang-org-x-lint)
-       ("go-honnef-co-go-tools" ,go-honnef-co-go-tools)))
+     (list go-github-com-stretchr-testify go-golang-org-x-lint
+           go-honnef-co-go-tools))
     (propagated-inputs
-     `(("go-github-com-pkg-errors" ,go-github-com-pkg-errors)
-       ("go-go-uber-org-atomic" ,go-go-uber-org-atomic)
-       ("go-go-uber-org-multierr" ,go-go-uber-org-multierr)
-       ("go-gopkg-in-yaml-v2" ,go-gopkg-in-yaml-v2)))
+     (list go-github-com-pkg-errors go-go-uber-org-atomic
+           go-go-uber-org-multierr go-gopkg-in-yaml-v2))
     (home-page "https://go.uber.org/zap")
     (synopsis "Logging library for Go")
     (description
@@ -8621,7 +8618,7 @@ back.")
     (arguments
      '(#:import-path "lukechampine.com/blake3"))
     (propagated-inputs
-     `(("go-github-com-klauspost-cpuid" ,go-github-com-klauspost-cpuid)))
+     (list go-github-com-klauspost-cpuid))
     (home-page "https://pkg.go.dev/lukechampine.com/blake3")
     (synopsis "Implementation of the BLAKE3 cryptographic hash function")
     (description "@code{blake3} implements the BLAKE3 cryptographic hash
@@ -8647,7 +8644,7 @@ performance for large inputs and outputs.")
     (build-system go-build-system)
     (arguments '(#:import-path "golang.org/x/term"))
     (propagated-inputs
-     `(("go-golang-org-x-sys" ,go-golang-org-x-sys)))
+     (list go-golang-org-x-sys))
     (home-page "https://pkg.go.dev/golang.org/x/term")
     (synopsis "Go terminal/console support")
     (description "@code{term} provides support functions for dealing with
@@ -8672,8 +8669,7 @@ terminals, as commonly found on Unix systems.")
     (arguments
      '(#:import-path "github.com/flynn/noise"))
     (propagated-inputs
-     `(("go-gopkg-in-check-v1" ,go-gopkg-in-check-v1)
-       ("go-golang-org-x-crypto" ,go-golang-org-x-crypto)))
+     (list go-gopkg-in-check-v1 go-golang-org-x-crypto))
     (home-page "https://github.com/flynn/noise")
     (synopsis "Go implementation of the Noise protocol framework")
     (description "@code{noise} implements the Noise protocol framework.  Noise
@@ -8708,7 +8704,7 @@ zero round-trip encryption, and other advanced features.")
              (for-each make-file-writable
                        (find-files (assoc-ref outputs "out") ".gz$")))))))
     (propagated-inputs
-     `(("go-github-com-golang-snappy" ,go-github-com-golang-snappy)))
+     (list go-github-com-golang-snappy))
     (home-page "https://github.com/klauspost/compress")
     (synopsis "Go compression library")
     (description "@code{compress} provides various compression algorithms.")
@@ -8738,46 +8734,610 @@ zero round-trip encryption, and other advanced features.")
 non-cryptographic hash algorithm, working at speeds close to RAM limits.")
     (license license:asl2.0)))
 
-(define-public go-github-com-aswinkarthik-csvdiff
+(define-public go-gopkg-in-djherbis-times-v1
   (package
-    (name "go-github-com-aswinkarthik-csvdiff")
-    (version "1.4.0")
+    (name "go-gopkg-in-djherbis-times-v1")
+    (version "1.5.0")
+    (home-page "https://gopkg.in/djherbis/times.v1")
     (source
-      (origin
-        (method git-fetch)
-        (uri (git-reference
-               (url "https://github.com/aswinkarthik/csvdiff")
-               (commit (string-append "v" version))))
-        (file-name (git-file-name name version))
-        (sha256
-         (base32
-          "0cd1ikxsypjqisfnmr7zix3g7x8p892w77086465chyd39gpk97b"))))
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url home-page)
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1xvl3rgjif5yf62p16yk05kxrsmzhz1kkqisvw4k02svzq10qbfy"))))
+    (build-system go-build-system)
+    (arguments
+     '(#:import-path "gopkg.in/djherbis/times.v1"))
+    (synopsis "Go library for getting file times")
+    (description
+     "Provides a platform-independent way to get atime, mtime, ctime and btime for files.")
+    (license license:expat)))
+
+(define-public go-github-com-vividcortex-ewma
+  (package
+    (name "go-github-com-vividcortex-ewma")
+    (version "1.2.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/VividCortex/ewma")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0whx516l9nm4n41spagb605ry7kfnz1qha96mcshnfjlahhnnylq"))))
+    (build-system go-build-system)
+    (arguments '(#:import-path "github.com/vividcortex/ewma"))
+    (home-page "https://github.com/VividCortex/ewma")
+    (synopsis "Exponentially Weighted Moving Average algorithms for Go")
+    (description
+     "This package implements algorithms for exponentially weighted moving
+averages.")
+    (license license:expat)))
+
+(define-public go-github-com-rivo-uniseg
+  (package
+    (name "go-github-com-rivo-uniseg")
+    (version "0.2.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/rivo/uniseg")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0j7h22vfmjj562vr8gpsyrkrwp1pq9ayh5fylv24skxb467g9f0q"))))
+    (build-system go-build-system)
+    (arguments '(#:import-path "github.com/rivo/uniseg"))
+    (home-page "https://github.com/rivo/uniseg")
+    (synopsis "Unicode Text Segmentation for Go")
+    (description
+     "This package implements Unicode Text Segmentation according to
+@url{https://unicode.org/reports/tr29/, Unicode Standard Annex #29}.")
+    (license license:expat)))
+
+(define-public go-github-com-mattn-go-runewidth
+  (package
+    (name "go-github-com-mattn-go-runewidth")
+    (version "0.0.13")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/mattn/go-runewidth")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1yir0f3wc5z5hnkwhvx5qb6nmpfb05zp2gvfjvna63s8kmla1rrn"))))
+    (build-system go-build-system)
+    (arguments '(#:import-path "github.com/mattn/go-runewidth"))
+    (propagated-inputs
+     (list go-github-com-rivo-uniseg))
+    (home-page "https://github.com/mattn/go-runewidth")
+    (synopsis "Rune width implementation for Go")
+    (description
+     "This package provides functions to get the fixed width of a character or
+string.")
+    (license license:expat)))
+
+
+(define-public go-github-com-charmbracelet-bubbletea
+  (package
+    (name "go-github-com-charmbracelet-bubbletea")
+    (version "0.13.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/charmbracelet/bubbletea")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1105cggi5fwqx69m0vrhgwx6kaw82w4ahn58sj0a81603c4yvrk0"))))
     (build-system go-build-system)
     (arguments
-     '(#:import-path "github.com/aswinkarthik/csvdiff"))
+     `(#:import-path "github.com/charmbracelet/bubbletea"))
     (propagated-inputs
-     `(("go-golang-org-x-sys" ,go-golang-org-x-sys)
-       ("go-github-com-stretchr-testify" ,go-github-com-stretchr-testify)
-       ("go-github-com-spf13-cobra" ,go-github-com-spf13-cobra)
-       ("go-github-com-spf13-afero" ,go-github-com-spf13-afero)
-       ("go-github-com-spaolacci-murmur3" ,go-github-com-spaolacci-murmur3)
-       ("go-github-com-mattn-go-colorable" ,go-github-com-mattn-go-colorable)
-       ("go-github-com-fatih-color" ,go-github-com-fatih-color)
-       ("go-github-com-cespare-xxhash" ,go-github-com-cespare-xxhash)
-       ("go-github-com-oneofone-xxhash" ,go-github-com-oneofone-xxhash)))
-    (home-page "https://github.com/aswinkarthik/csvdiff")
-    (synopsis "Fast diff tool for comparing CSV files")
-    (description "@code{csvdiff} is a diff tool to compute changes between two
-CSV files.  It can compare CSV files with a million records in under 2
-seconds.  It is specifically suited for comparing CSV files dumped from
-database tables.  GNU Diff is orders of magnitude faster for comparing line by
-line.  @code{csvdiff} supports
+     `(("github.com/mattn/go-isatty" ,go-github-com-mattn-go-isatty)
+       ("github.com/muesli/termenv" ,go-github-com-muesli-termenv)
+       ("github.com/mattn/go-runewidth" ,go-github.com-mattn-go-runewidth)
+       ("go-github-com-muesli-reflow-indent" ,go-github-com-muesli-reflow-indent)
+       ("go-github-com-muesli-reflow-ansi" ,go-github-com-muesli-reflow-ansi)
+       ("go-golang-org-colorful" ,go-golang-org-colorful)
+       ("github.com/containerd/console" ,go-github-com-containerd-console)
+       ("go-github-com-muesli-reflow-truncate" ,go-github-com-muesli-reflow-truncate)
+       ("go-golang-org-x-crypto" ,go-golang-org-x-crypto)
+       ("go-golang-org-x-sys" ,go-golang-org-x-sys)
+       ("go-golang-org-x-term" ,go-golang-org-x-term)
+       ("github.com/mattn/go-isatty" ,go-github-com-mattn-go-isatty)))
+    (home-page "https://github.com/charmbracelet/bubbletea")
+    (synopsis "Powerful little TUI framework")
+    (description
+     "Bubble Tea is a Go framework based on The Elm Architecture.  It is
+well-suited for simple and complex terminal applications, either inline,
+full-window, or a mix of both.")
+    (license license:asl2.0)))
 
+(define-public go-github-com-containerd-console
+  (package
+    (name "go-github-com-containerd-console")
+    (version "1.0.3")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/containerd/console")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0pgx0y8x23jwc2f9jfk5hd5aslqk599nj6c7dj5846xvnkz2x7p2"))))
+    (build-system go-build-system)
+    (arguments
+     `(#:import-path "github.com/containerd/console"))
+    (propagated-inputs
+     `(("golang.org/x/sys" ,go-golang-org-x-sys)))
+    (home-page "https://github.com/containerd/console")
+    (synopsis "Console package for Go")
+    (description
+     "This is Golang package for dealing with consoles.  It has few
+dependencies and a simple API.")
+    (license license:asl2.0)))
+
+(define-public go-github-com-arceliar-ironwood
+  (package
+    (name "go-github-com-arceliar-ironwood")
+    (version "0.0.0-20210912013146-c2bc55bb349c")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/Arceliar/ironwood")
+             (commit (go-version->git-ref version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1dfkqnkfxwlwcsk8g9r1pv84lfzgn8r1vam13zlmk81cgan2r6fx"))))
+    (build-system go-build-system)
+    (arguments
+     '(#:import-path "github.com/Arceliar/ironwood"
+       #:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         ;; Source-only package
+         (delete 'build))))
+    (propagated-inputs
+     (list go-golang-org-x-crypto go-github-com-arceliar-phony))
+    (home-page "https://github.com/Arceliar/ironwood")
+    (synopsis "Experimental network routing library")
+    (description
+     "Ironwood is a routing library with a @code{net.PacketConn}-compatible
+interface using @code{ed25519.PublicKey}s as addresses.  Basically, you use it
+when you want to communicate with some other nodes in a network, but you can't
+guarantee that you can directly connect to every node in that network.  It was
+written to test improvements to / replace the routing logic in
+@url{https://github.com/yggdrasil-network/yggdrasil-go,Yggdrasil}, but it may
+be useful for other network applications.")
+    (license license:mpl2.0)))
+
+(define-public go-github-com-mtibben-percent
+  (package
+    (name "go-github-com-mtibben-percent")
+    (version "0.2.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/mtibben/percent")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1iqivw8pigj259rj5yifibbvic70f9hb7k24a4sa967s4fj6agb6"))))
+    (build-system go-build-system)
+    (arguments
+     '(#:import-path "github.com/mtibben/percent"
+       #:phases %standard-phases))
+    (synopsis "Package percent escapes strings using percent-encoding")
+    (description
+     "Package percent escapes strings using percent-encoding.")
+    (home-page "https://github.com/mtibben/percent")
+    (license license:expat)))
+
+(define-public go-github-com-percent
+  (deprecated-package "go-github-com-percent" go-github-com-mtibben-percent))
+
+(define-public go-github-com-dvsekhvalnov-jose2go
+  (package
+    (name "go-github-com-dvsekhvalnov-jose2go")
+    (version "1.5.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/dvsekhvalnov/jose2go")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1pzfmv2dxb3m455bi1ks4q3i0dcw1sazxk8k96wrgpkwgglyxj3n"))))
+    (build-system go-build-system)
+    (native-inputs
+     (list go-gopkg-in-check-v1))
+    (arguments
+     '(#:import-path "github.com/dvsekhvalnov/jose2go"
+       #:phases %standard-phases))
+    (synopsis "Go implementation of Javascript Object Signing and Encryption spec")
+    (description
+     "This package provides a Go library for generating, decoding, and
+encrypting JSON Web Tokens (JWT).  It relies only on the standard library.")
+    (home-page "https://github.com/dvsekhvalnov/jose2go")
+    (license license:expat)))
+
+(define-public aws-vault
+  (package
+    (name "aws-vault")
+    (version "6.3.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/99designs/aws-vault")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "02zw0kl77yr56mw1fbvr51c4mz2265c9al2nzvnqqzdx5aha7nf8"))))
+    (build-system go-build-system)
+    (native-inputs
+     (list go-github-com-99designs-go-keyring
+           go-github-com-mtibben-androiddnsfix
+           go-github-com-mtibben-percent
+           go-github-com-jmespath-go-jmespath
+           go-github-com-aws-aws-sdk-go
+           go-github-com-dvsekhvalnov-jose2go
+           go-github-com-godbus-dbus
+           go-github-com-gsterjov-go-libsecret
+           go-github-com-mitchellh-go-homedir
+           go-golang-org-x-crypto
+           go-golang-org-x-sys
+           go-gopkg-in-ini
+           go-github-com-skratchdot-open-golang
+           go-github-com-alecthomas-kingpin
+           go-github-com-alecthomas-template
+           go-github-com-alecthomas-units))
+    (arguments
+     `(#:import-path "github.com/99designs/aws-vault"
+       #:install-source? #f
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'patch-version
+           (lambda _
+             (substitute* "src/github.com/99designs/aws-vault/main.go"
+               (("var Version = \"dev\"")
+                (string-append "var Version = \"v" ,version "\"")))))
+         (add-after 'build 'contrib
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (zsh-site-dir (string-append out "/share/zsh/site-functions"))
+                    (bash-completion-dir
+                     (string-append out "/share/bash-completion/completions"))
+                    (fish-completion-dir
+                     (string-append out "/share/fish/completions")))
+               (for-each mkdir-p
+                         `(,zsh-site-dir ,bash-completion-dir ,fish-completion-dir))
+               (with-directory-excursion
+                   "src/github.com/99designs/aws-vault/contrib/completions"
+                 (copy-file "zsh/aws-vault.zsh"
+                            (string-append zsh-site-dir "/_aws-vault"))
+                 (copy-file "bash/aws-vault.bash"
+                            (string-append bash-completion-dir "/aws-vault"))
+                 (copy-file "fish/aws-vault.fish"
+                            (string-append fish-completion-dir "/aws-vault.fish")))))))))
+    (synopsis
+     "Vault for securely storing and accessing AWS credentials")
+    (description
+     "AWS Vault is a tool to securely store and access @acronym{Amazon Web
+Services,AWS} credentials.
+
+AWS Vault stores IAM credentials in your operating system's secure keystore and
+then generates temporary credentials from those to expose to your shell and
+applications.  It's designed to be complementary to the AWS CLI tools, and is
+aware of your profiles and configuration in ~/.aws/config.")
+    (home-page "https://github.com/99designs/aws-vault")
+    (license license:expat)))
+
+(define-public go-github-com-gsterjov-go-libsecret
+  (let ((commit "a6f4afe4910cad8688db3e0e9b9ac92ad22d54e1")
+        (revision "0"))
+    (package
+      (name "go-github-com-gsterjov-go-libsecret")
+      (version "5.0.1")
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/gsterjov/go-libsecret")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "09zaiadnll83vs22ib89agg7anj0blw5fywvmckxllsgif6ak6v7"))))
+      (build-system go-build-system)
+      (native-inputs
+       (list go-github-com-godbus-dbus))
+      (arguments
+       '(#:import-path "github.com/gsterjov/go-libsecret"
+         #:phases %standard-phases))
+      (synopsis "Manage secrets via the \"Secret Service\" DBus API")
+      (description
+       "This native Go library manages secrets via the freedesktop.org
+\"Secret Service\" DBus interface.")
+      (home-page "https://github.com/gsterjov/go-libsecret")
+      (license license:expat))))
+
+(define-public go-github-com-go-libsecret
+  (deprecated-package "go-github-com-go-libsecret" go-github-com-gsterjov-go-libsecret))
+
+(define-public go-github-com-99designs-go-keyring
+  (package
+    (name "go-github-com-99designs-go-keyring")
+    (version "1.1.6")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/99designs/keyring")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "08rcdqpxaa9n348q10fw40q4gxpjajkyrighykk71i7mxzwkcgwn"))))
+    (build-system go-build-system)
+    (native-inputs
+     (list go-golang-org-x-crypto
+           go-golang-org-x-sys
+           go-github-com-mtibben-percent
+           go-github-com-mitchellh-go-homedir
+           go-github-com-dvsekhvalnov-jose2go
+           go-github-com-godbus-dbus
+           go-github-com-gsterjov-go-libsecret
+           password-store
+           gnupg))
+    (arguments
+     '(#:import-path "github.com/99designs/keyring"
+       #:tests? #f))                              ;XXX: tests require Vagrant
+    (synopsis "Go library providing a uniform interface for various secure
+credential stores")
+    (description
+     "Keyring provides utility functions for and a common interface to a range
+of secure credential storage services.  Originally developed as part of AWS
+Vault, a command line tool for securely managing AWS access from developer
+workstations.
+
+Currently Keyring supports the following backends: macOS/OSX Keychain, Windows
+pcredential store, Pass, Secret Service, KDE Wallet, Encrypted File.")
+    (home-page "https://github.com/99designs/keyring")
+    (license license:expat)))
+
+(define-public go-github-com-mtibben-androiddnsfix
+  (let ((commit "ff02804463540c36e3a148dcf4b009d003cf2a31")
+        (revision "0"))
+    (package
+      (name "go-github-com-mtibben-androiddnsfix")
+      (version (git-version "0.0.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/mtibben/androiddnsfix")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1pcbjs793kd0yg3dcp79agfxm7xm3sldx2r7v66ipzpcq0j2npi2"))))
+      (build-system go-build-system)
+      (arguments
+       '(#:import-path "github.com/mtibben/androiddnsfix"
+         #:phases %standard-phases))
+      (synopsis "Work around lack of @file{/etc/resolv.conf} on Android")
+      (description
+       "This package allows Go applications to work around lack of
+@file{/etc/resolv.conf} on Android, as described in
+@url{https://github.com/golang/go/issues/8877}.")
+      (home-page "https://github.com/mtibben/androiddnsfix")
+      (license license:expat))))
+
+(define-public go-github-com-androiddnsfix
+  (deprecated-package "go-github-com-androiddnsfix" go-github-com-mtibben-androiddnsfix))
+
+(define-public go-github-com-aws-aws-sdk-go
+  (package
+    (name "go-github-com-aws-aws-sdk-go")
+    (version "1.36.18")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/aws/aws-sdk-go")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "169mkkw1cff1px6326krwvfpfj07sb4y5rbn003gi4bk176h6ry9"))))
+    (build-system go-build-system)
+    (propagated-inputs
+     (list go-github-com-jmespath-go-jmespath))
+    (arguments
+     '(#:import-path "github.com/aws/aws-sdk-go"
+       #:phases %standard-phases))
+    (synopsis "The official AWS SDK for the Go programming language")
+    (description
+     "The official AWS SDK for the Go programming language.")
+    (home-page "https://github.com/aws/aws-sdk-go")
+    (license license:asl2.0)))
+
+(define-public go-gopkg-in-ini
+  (package
+    (name "go-gopkg-in-ini")
+    (version "1.62.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://gopkg.in/ini.v1")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1dm9ydqyflasp5li22kb0w73s6kp2swii8naqfhnz64v171gmm5v"))))
+    (build-system go-build-system)
+    (native-inputs
+     (list go-github.com-smartystreets-goconvey))
+    (arguments
+     '(#:import-path "gopkg.in/ini.v1"
+       #:phases %standard-phases))
+    (synopsis "INI file read and write functionality in Go")
+    (description
+     "This package provides INI file read and write functionality in Go.")
+    (home-page "https://gopkg.in/ini.v1")
+    (license license:asl2.0)))
+
+(define-public go-github-com-skratchdot-open-golang
+  (let ((commit "79abb63cd66e41cb1473e26d11ebdcd68b04c8e5")
+        (revision "0"))
+    (package
+      (name "go-github-com-skratchdot-open-golang")
+      (version "1.42.0")
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/skratchdot/open-golang")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0jc13jn8cj7p14n79zhav2nwga6kf9rqs01ic5k7j7agwzzly3ww"))))
+      (build-system go-build-system)
+      (arguments
+       '(#:import-path "github.com/skratchdot/open-golang"
+         #:phases (modify-phases %standard-phases
+                    (delete 'build)
+                    (delete 'check))))
+      (synopsis "Open a file, directory, or URI using the default application")
+      (description
+       "Open a file, directory, or URI using the OS's default application for
+that object type.  Optionally, you can specify an application to use.  On
+GNU/Linux, this is a proxy for the @command{xdg-open} command.")
+      (home-page "https://github.com/skratchdot/open-golang")
+      (license license:expat))))
+
+(define-public go-github-com-alecthomas-kingpin
+  (package
+    (name "go-github-com-alecthomas-kingpin")
+    (version "2.2.6")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/alecthomas/kingpin")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0mndnv3hdngr3bxp7yxfd47cas4prv98sqw534mx7vp38gd88n5r"))))
+    (build-system go-build-system)
+    (native-inputs
+     (list go-github-com-alecthomas-template go-github-com-alecthomas-units
+           go-github-com-stretchr-testify))
+    (arguments
+     '(#:import-path "github.com/alecthomas/kingpin"
+       #:phases %standard-phases))
+    (synopsis "Go library provides utilities for building command line interfaces")
+    (description
+     "Go library provides utilities for building command line interfaces.")
+    (home-page "https://github.com/alecthomas/kingpin")
+    (license license:expat)))
+
+(define-public go-github-com-kingpin
+  (deprecated-package "go-github-com-kingpin" go-github-com-alecthomas-kingpin))
+
+(define-public go-github-com-alecthomas-template
+  (let ((commit "a0175ee3bccc567396460bf5acd36800cb10c49c")
+        (revision "0"))
+    (package
+      (name "go-github-com-alecthomas-template")
+      (version (git-version "0.0.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/alecthomas/template")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0qjgvvh26vk1cyfq9fadyhfgdj36f1iapbmr5xp6zqipldz8ffxj"))))
+      (build-system go-build-system)
+      (arguments
+       '(#:import-path "github.com/alecthomas/template"
+         #:phases %standard-phases))
+      (synopsis "Fork of Go's text/template adding newline elision")
+      (description
+       "This is a fork of Go 1.4's text/template package with one addition: a
+backslash immediately after a closing delimiter will delete all subsequent
+newlines until a non-newline.")
+      (home-page "https://github.com/alecthomas/template")
+      (license license:bsd-3))))
+
+(define-public go-github-com-alecthomas-units
+  (let ((commit "2efee857e7cfd4f3d0138cc3cbb1b4966962b93a")
+        (revision "0"))
+    (package
+      (name "go-github-com-alecthomas-units")
+      (version "0.0.0")
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/alecthomas/units")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1j65b91qb9sbrml9cpabfrcf07wmgzzghrl7809hjjhrmbzri5bl"))))
+      (build-system go-build-system)
+      (native-inputs
+       (list go-github-com-stretchr-testify))
+      (arguments
+       '(#:import-path "github.com/alecthomas/units"
+         #:phases %standard-phases))
+      (synopsis "Helpful unit multipliers and functions for Go")
+      (description
+       "This library provides unit multipliers and functions for Go.")
+      (home-page "https://github.com/alecthomas/units")
+      (license license:expat))))
+
+(define-public go-github-com-dreamacro-go-shadowsocks2
+  (package
+    (name "go-github-com-dreamacro-go-shadowsocks2")
+    (version "0.1.7")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/Dreamacro/go-shadowsocks2")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0sjr3r77fav6q0ii6dnp4px9gaz7cq861a0yxppvb6a58420bx3h"))))
+    (build-system go-build-system)
+    (arguments '(#:import-path "github.com/Dreamacro/go-shadowsocks2"))
+    (propagated-inputs (list go-golang-org-x-crypto))
+    (home-page "https://github.com/Dreamacro/go-shadowsocks2")
+    (synopsis "Shadowsocks implementation in Go")
+    (description
+     "This package is @code{shadowsocks} implementation in Go
+
+Features:
 @itemize
-@item Selective comparison of fields in a row
-@item Specifying group of columns as primary-key to uniquely identify a row
-@item Ignoring columns
-@item Several output formats including colored git style output or
-JSON for post-processing
+@item SOCKS5 proxy
+@item Support for Netfilter TCP redirect (IPv6 should work but not tested)
+@item UDP tunneling (e.g. relay DNS packets)
+@item TCP tunneling (e.g. benchmark with iperf3)
 @end itemize")
-    (license license:expat)))
+    (license license:asl2.0)))
diff --git a/gnu/packages/gpodder.scm b/gnu/packages/gpodder.scm
index 07df1da2f2..8df7c0c22b 100644
--- a/gnu/packages/gpodder.scm
+++ b/gnu/packages/gpodder.scm
@@ -62,26 +62,26 @@
        (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-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-httpserver" ,python-pytest-httpserver)
-       ("which" ,which)))
+     (list intltool
+           python-coverage
+           python-minimock
+           python-pytest
+           python-pytest-cov
+           python-pytest-httpserver
+           which))
     (inputs
-     `(("bash-minimal" ,bash-minimal)
-       ("gtk+" ,gtk+)
-       ("python-pygobject" ,python-pygobject)
-       ("python-pycairo" ,python-pycairo)
-       ("python-requests" ,python-requests)
-       ("python-dbus" ,python-dbus)
-       ("python-html5lib" ,python-html5lib)
-       ("python-mutagen" ,python-mutagen)
-       ("python-mygpoclient" ,python-mygpoclient)
-       ("python-podcastparser" ,python-podcastparser)
-       ("youtube-dl" ,youtube-dl)
-       ("xdg-utils" ,xdg-utils)))
+     (list bash-minimal
+           gtk+
+           python-pygobject
+           python-pycairo
+           python-requests
+           python-dbus
+           python-html5lib
+           python-mutagen
+           python-mygpoclient
+           python-podcastparser
+           youtube-dl
+           xdg-utils))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -94,9 +94,6 @@
                #t)))
          (replace 'check
            (lambda* (#:key tests? #:allow-other-keys)
-             ; The `unittest' target overrides the PYTHONPATH variable.
-             (substitute* "makefile"
-               (("PYTHONPATH=src/") "PYTHONPATH=${PYTHONPATH}:src/"))
              (when tests?
                (invoke "make" "unittest"))))
          ;; 'msgmerge' introduces non-determinism by resetting the
@@ -147,7 +144,7 @@ locally for later listening.")
                                        "libmygpo-qt-missing-qt5-modules.patch"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("qt" ,qtbase-5)))
     (arguments
@@ -175,9 +172,7 @@ and track podcasts.")
          "1fi5x6k1mngr0iviw2s4n1f3y2x7pwqy5ivkcrjdprzvwr37f0mh"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-minimock" ,python-minimock)
-       ("python-nose" ,python-nose)))
+     (list python-coverage python-minimock python-nose))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -203,7 +198,7 @@ downloading episode status changes.")
        (sha256
         (base32 "0m24r2qhck0win44xfhxajbppkss4ha6am0042s0xyq3408883m3"))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -233,15 +228,8 @@ in Python.")
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)
-       ("ronn-ng" ,ronn-ng)))
-    (inputs `(("curl" ,curl)
-              ("glib" ,glib)
-              ("id3lib" ,id3lib)
-              ("libxml2" ,libxml2)))
+     (list autoconf automake libtool pkg-config ronn-ng))
+    (inputs (list curl glib id3lib libxml2))
     (synopsis "Command line podcast downloader")
     (description
      "castget is a simple, command-line based RSS enclosure downloader.  It is
diff --git a/gnu/packages/gps.scm b/gnu/packages/gps.scm
index 03bff15760..1c8f9af5b1 100644
--- a/gnu/packages/gps.scm
+++ b/gnu/packages/gps.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014, 2015 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021, 2022 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2020 Guillaume Le Vaillant <glv@posteo.net>
@@ -82,14 +82,9 @@
      `(#:configure-flags
        '("--with-zlib=system")))
     (inputs
-     `(("expat" ,expat)
-       ("libusb" ,libusb)
-       ("qtbase" ,qtbase-5)
-       ("zlib" ,zlib)))
+     (list expat libusb qtbase-5 zlib))
     (native-inputs
-     `(("which" ,which)
-       ("qttools" ,qttools)
-       ("libxml2" ,libxml2)))              ;'xmllint' needed for the KML tests
+     (list which qttools libxml2))              ;'xmllint' needed for the KML tests
     (home-page "https://www.gpsbabel.org/")
     (synopsis "Convert and exchange data with GPS and map programs")
     (description
@@ -127,14 +122,9 @@ manipulate maps.")
                                "\n")))
              #t)))))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("libxml2" ,libxml2)
-       ("exiv2" ,exiv2)))
+     (list gtk+ libxml2 exiv2))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("docbook-xml" ,docbook-xml)
-       ("docbook-xsl" ,docbook-xsl)
-       ("libxslt" ,libxslt)))
+     (list pkg-config docbook-xml docbook-xsl libxslt))
     (home-page "https://dfandrich.github.io/gpscorrelate/")
     (synopsis "GPS photo correlation tool to geo-localize images")
     (description
@@ -148,7 +138,7 @@ between two other data points.")
 (define-public gama
   (package
     (name "gama")
-    (version "2.15")
+    (version "2.17")
     (source
       (origin
         (method url-fetch)
@@ -156,20 +146,18 @@ between two other data points.")
                             version ".tar.gz"))
         (sha256
          (base32
-          "1lsa7k9anxla2r3wxzg2yhxgxlp8xibz56gaxhgf5rd3mzf51flx"))
+          "1x8qz43q254mz0fyna9pxxna2sj8pcrm8bwxw840d36lh1qj6983"))
         (modules '((guix build utils)))
         (snippet
          '(begin
             (delete-file-recursively "lib/expat")
-            (for-each delete-file (find-files "doc/fig" "\\.pdf$"))
-            #t))))
+            (for-each delete-file (find-files "doc/fig" "\\.pdf$"))))))
     (build-system gnu-build-system)
     (arguments '(#:parallel-tests? #f)) ; race condition
     (native-inputs
-     `(("libxml2" ,libxml2)))
+     (list libxml2))
     (inputs
-     `(("expat" ,expat)
-       ("sqlite" ,sqlite)))
+     (list expat sqlite))
     (home-page "https://www.gnu.org/software/gama/")
     (synopsis "Adjustment of geodetic networks")
     (description
@@ -182,7 +170,7 @@ coordinates as well as partial support for adjustments in global coordinate syst
 (define-public gpxsee
   (package
     (name "gpxsee")
-    (version "7.37")
+    (version "10.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -191,7 +179,7 @@ coordinates as well as partial support for adjustments in global coordinate syst
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0fpb43smh0kwic5pdxs46c0hkqj8g084h72pa024x1my6w12y9b8"))))
+                "0kj7130imhppb0bam34a1xr2lxk76fyida31idzvfk3m7z39w02w"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
@@ -206,9 +194,9 @@ coordinates as well as partial support for adjustments in global coordinate syst
                      (string-append "PREFIX="
                                     (assoc-ref outputs "out"))))))))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5 qtlocation))
     (native-inputs
-     `(("qttools" ,qttools)))
+     (list qttools))
     (home-page "https://www.gpxsee.org")
     (synopsis "GPS log file viewer and analyzer")
     (description
@@ -221,31 +209,30 @@ such as elevation, speed, heart rate, power, temperature, and gear shifts.")
 (define-public gpsd
   (package
     (name "gpsd")
-    (version "3.23")
+    (version "3.23.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://download-mirror.savannah.gnu.org"
                            "/releases/gpsd/gpsd-" version ".tar.xz"))
        (sha256
-        (base32 "1px9im0qfn8k7mnvjcw5myakzd7mad2drwyzji400hpwyswjjr73"))))
+        (base32 "1hd8b09is4gd73lpsdywxxdx11iijikmqgxd0y57pic3yxnlcb6a"))))
     (build-system scons-build-system)
     (native-inputs
-     `(("bc" ,bc)
-       ("pkg-config" ,pkg-config)))
+     (list bc pkg-config))
     (inputs
-     `(("bluez" ,bluez)
-       ("dbus" ,dbus)
-       ("gtk+" ,gtk+)
-       ("libcap" ,libcap)
-       ("libusb" ,libusb)
-       ("ncurses" ,ncurses)
-       ("python" ,python)
-       ("python-pycairo" ,python-pycairo)
-       ("python-pygobject" ,python-pygobject)
-       ("python-pyserial" ,python-pyserial)
-       ("python-wrapper" ,python-wrapper)
-       ("qtbase" ,qtbase-5)))
+     (list bluez
+           dbus
+           gtk+
+           libcap
+           libusb
+           ncurses
+           python
+           python-pycairo
+           python-pygobject
+           python-pyserial
+           python-wrapper
+           qtbase-5))
     (arguments
      `(#:scons-flags
        (list (string-append "prefix=" %output)
@@ -261,8 +248,7 @@ such as elevation, speed, heart rate, power, temperature, and gear shifts.")
              (setenv "TAR" "noop")
              (substitute* "SConscript"
                (("envs = \\{\\}")
-                "envs = os.environ"))
-             #t))
+                "envs = os.environ"))))
          (add-after 'install 'wrap-python-scripts
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -281,10 +267,9 @@ such as elevation, speed, heart rate, power, temperature, and gear shifts.")
                                              ":")))
                (for-each (lambda (script)
                            (wrap-program (string-append out "/bin/" script)
-                             `("PYTHONPATH" ":" prefix (,pythonpath))))
+                             `("GUIX_PYTHONPATH" ":" prefix (,pythonpath))))
                          '("gegps" "gpscat" "gpsfake" "gpsprof"
-                           "ubxtool" "xgps" "xgpsspeed" "zerk")))
-             #t)))))
+                           "ubxtool" "xgps" "xgpsspeed" "zerk"))))))))
     (synopsis "GPS service daemon")
     (description
      "@code{gpsd} is a service daemon that monitors one or more GPSes or AIS
diff --git a/gnu/packages/graph.scm b/gnu/packages/graph.scm
index c9486935ae..de68ff78b1 100644
--- a/gnu/packages/graph.scm
+++ b/gnu/packages/graph.scm
@@ -8,6 +8,8 @@
 ;;; Copyright © 2020 Pierre Langlois <pierre.langlos@gmx.com>
 ;;; Copyright © 2021 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2021 Alexandre Hannud Abdo <abdo@member.fsf.org>
+;;; Copyright © 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2022 Marius Bakke <marius@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -26,6 +28,7 @@
 
 (define-module (gnu packages graph)
   #:use-module (guix download)
+  #:use-module (guix gexp)
   #:use-module (guix git-download)
   #:use-module (guix packages)
   #:use-module (guix utils)
@@ -35,7 +38,6 @@
   #:use-module (guix build-system r)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (gnu packages)
-  #:use-module (gnu packages gcc)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages bioconductor)
   #:use-module (gnu packages bioinformatics)
@@ -61,31 +63,72 @@
   #:use-module (gnu packages time)
   #:use-module (gnu packages xml))
 
+(define-public plfit
+  (package
+    (name "plfit")
+    (version "0.9.3")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/ntamas/plfit")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "03x5jbvg8vwr92682swy58ljxrhqwmga1xzd0cpfbfmda41gm2fb"))))
+    (build-system cmake-build-system)
+    (arguments
+     '(#:configure-flags (list "-DBUILD_SHARED_LIBS=ON")))
+    (home-page "https://github.com/ntamas/plfit")
+    (synopsis "Tool for fitting power-law distributions to empirical data")
+    (description "The @command{plfit} command fits power-law distributions to
+empirical (discrete or continuous) data, according to the method of Clauset,
+Shalizi and Newman (@cite{Clauset A, Shalizi CR and Newman MEJ: Power-law
+distributions in empirical data.  SIAM Review 51, 661-703 (2009)}).")
+    (license license:gpl2+)))
+
 (define-public igraph
   (package
     (name "igraph")
-    (version "0.8.4")
+    (version "0.9.6")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://github.com/igraph/igraph/releases/"
                            "download/" version "/igraph-" version ".tar.gz"))
+       (modules '((guix build utils)))
+       (snippet '(begin
+                   ;; Fully unbundle igraph (see:
+                   ;; https://github.com/igraph/igraph/issues/1897).
+                   (delete-file-recursively "vendor")
+                   (substitute* "CMakeLists.txt"
+                     (("add_subdirectory\\(vendor\\).*")
+                      ""))
+                   ;; Help CMake to find our plfit headers.
+                   (substitute* "etc/cmake/FindPLFIT.cmake"
+                     (("^  NAMES plfit.h.*" all)
+                      (string-append all
+                                     "  PATH_SUFFIXES plfit")))
+                   (substitute* '("src/CMakeLists.txt"
+                                  "etc/cmake/benchmark_helpers.cmake")
+                     ;; Remove bundling related variables.
+                     ((".*_IS_VENDORED.*")
+                      ""))))
        (sha256
-        (base32 "127q6q40kbmvd62yhbz6dlfk370qiq98s1iscyagpgbpjwb4xvyf"))))
-    (build-system gnu-build-system)
+        (base32 "11zkj9bpqcadb0rc4ahvjp9047dp9hna8cn3b0vl3zpc9v2rwabw"))))
+    (build-system cmake-build-system)
     (arguments
-     `(#:configure-flags
-       (list "--disable-static"
-             "--with-external-glpk"
-             "--with-external-blas"
-             "--with-external-lapack")))
+     '(#:configure-flags (list "-DBUILD_SHARED_LIBS=ON")))
+    (native-inputs (list pkg-config))
     (inputs
-     `(("gmp" ,gmp)
-       ("glpk" ,glpk)
-       ("libxml2" ,libxml2)
-       ("lapack" ,lapack)
-       ("openblas" ,openblas)
-       ("zlib" ,zlib)))
+     (list arpack-ng
+           gmp
+           glpk
+           libxml2
+           lapack
+           openblas
+           plfit
+           suitesparse))
     (home-page "https://igraph.org")
     (synopsis "Network analysis and visualization")
     (description
@@ -96,37 +139,47 @@ more.")
     (license license:gpl2+)))
 
 (define-public python-igraph
-  (package (inherit igraph)
+  (package
+    (inherit igraph)
     (name "python-igraph")
-    (version "0.8.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "python-igraph" version))
-       (sha256
-        (base32 "0wkxrs28qdvnrz7d4jzcf2bh6v2yqzx3wyfziihfgsi2gn6n60a6"))))
+    (version "0.9.9")
+    (source (origin
+              (method git-fetch)
+              ;; The PyPI archive lacks tests.
+              (uri (git-reference
+                    (url "https://github.com/igraph/python-igraph")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0ravcww2jcr8fgi97gdxv00s5nkx59ljxy928nnniyd0231bqwlc"))))
     (build-system python-build-system)
     (arguments
-     '(#:configure-flags
-       (list "--use-pkg-config")
-       #:phases
-       (modify-phases %standard-phases
-         (replace 'build
-           (lambda _
-             (invoke "python" "./setup.py" "build" "--use-pkg-config")))
-         (delete 'check)
-         (add-after 'install 'check
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (add-installed-pythonpath inputs outputs)
-             (invoke "pytest" "-v"))))))
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'specify-libigraph-location
+            (lambda _
+              (let ((igraph #$(this-package-input "igraph")))
+                (substitute* "setup.py"
+                  (("(LIBIGRAPH_FALLBACK_INCLUDE_DIRS = ).*" _ var)
+                   (string-append
+                    var (format #f "[~s]~%" (string-append igraph
+                                                           "/include/igraph"))))
+                  (("(LIBIGRAPH_FALLBACK_LIBRARY_DIRS = ).*" _ var)
+                   (string-append
+                    var (format #f "[~s]~%" (string-append igraph "/lib"))))))))
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (invoke "pytest" "-v")))))))
     (inputs
-     `(("igraph" ,igraph)))
+     (list igraph))
     (propagated-inputs
-     `(("python-texttable" ,python-texttable)))
+     (list python-texttable))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python-pytest" ,python-pytest)))
-    (home-page "https://pypi.org/project/python-igraph/")
+     (list python-pytest))
+    (home-page "https://igraph.org/python/")
     (synopsis "Python bindings for the igraph network analysis library")))
 
 (define-public r-rbiofabric
@@ -146,7 +199,7 @@ more.")
                   "1yahqrcrqpbcywv73y9rlmyz8apdnp08afialibrr93ch0p06f8z"))))
       (build-system r-build-system)
       (propagated-inputs
-       `(("r-igraph" ,r-igraph)))
+       (list r-igraph))
       (home-page "http://www.biofabric.org/")
       (synopsis "BioFabric network visualization")
       (description "This package provides an implementation of the function
@@ -183,32 +236,23 @@ lines.")
                (invoke "pytest" "-x" "plotly/tests/test_io")
                ;; FIXME: Add optional dependencies and enable their tests.
                ;; (invoke "pytest" "-x" "plotly/tests/test_optional")
-               (invoke "pytest" "_plotly_utils/tests"))
-             #t))
-         (add-before 'reset-gzip-timestamps 'make-files-writable
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out")))
-               (for-each (lambda (file) (chmod file #o644))
-                 (find-files out "\\.gz"))
-               #t))))))
+               (invoke "pytest" "_plotly_utils/tests")))))))
     (native-inputs
-     `(("python-ipywidgets" ,python-ipywidgets)
-       ("python-pytest" ,python-pytest)
-       ("python-xarray" ,python-xarray)))
+     (list python-ipywidgets python-pytest python-xarray))
     (propagated-inputs
-     `(("python-ipython" ,python-ipython)
-       ("python-pandas" ,python-pandas)
-       ("python-pillow" ,python-pillow)
-       ("python-requests" ,python-requests)
-       ("python-retrying" ,python-retrying)
-       ("python-six" ,python-six)
-       ("python-statsmodels" ,python-statsmodels)))
+     (list python-ipython
+           python-pandas
+           python-pillow
+           python-requests
+           python-retrying
+           python-six
+           python-statsmodels))
     (home-page "https://plotly.com/python/")
     (synopsis "Interactive plotting library for Python")
     (description "Plotly's Python graphing library makes interactive,
 publication-quality graphs online.  Examples of how to make line plots, scatter
 plots, area charts, bar charts, error bars, box plots, histograms, heatmaps,
-subplots, multiple-axes, polar charts, and bubble charts. ")
+subplots, multiple-axes, polar charts, and bubble charts.")
     (license license:expat)))
 
 (define-public python-plotly-2.4.1
@@ -223,12 +267,12 @@ subplots, multiple-axes, polar charts, and bubble charts. ")
           "0s9gk2fl53x8wwncs3fwii1vzfngr0sskv15v3mpshqmrqfrk27m"))))
    (native-inputs '())
    (propagated-inputs
-    `(("python-decorator" ,python-decorator)
-      ("python-nbformat" ,python-nbformat)
-      ("python-pandas" ,python-pandas)
-      ("python-pytz" ,python-pytz)
-      ("python-requests" ,python-requests)
-      ("python-six" ,python-six)))
+    (list python-decorator
+          python-nbformat
+          python-pandas
+          python-pytz
+          python-requests
+          python-six))
     (arguments
      '(#:tests? #f)))) ; The tests are not distributed in the release
 
@@ -243,9 +287,10 @@ subplots, multiple-axes, polar charts, and bubble charts. ")
        (sha256
         (base32 "1sqp97fwh4asx0jr72x8hil8z8fcg2xq92jklmh2m599pvgnx19a"))))
     (build-system python-build-system)
+    (native-inputs
+     (list python-setuptools))          ;for use_2to3 support
     (propagated-inputs
-     `(("python-networkx" ,python-networkx)
-       ("python-numpy" ,python-numpy)))
+     (list python-networkx python-numpy))
     (home-page "https://github.com/taynaud/python-louvain")
     (synopsis "Louvain algorithm for community detection")
     (description
@@ -269,13 +314,11 @@ algorithm for community detection in large networks.")
                 "0w31537sifkf65sck1iaip5i6d8g64pa3wdwad83d6p9jwkck57k"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-ddt" ,python-ddt)
-       ("python-igraph" ,python-igraph)))
+     (list python-ddt python-igraph))
     (inputs
-     `(("igraph" ,igraph)))
+     (list igraph))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python-pytest" ,python-pytest)))
+     (list pkg-config python-pytest))
     (home-page "https://github.com/vtraag/louvain-igraph")
     (synopsis "Algorithm for methods of community detection in large networks")
     (description
@@ -366,9 +409,9 @@ install(TARGETS ${faiss_lib}_static ARCHIVE DESTINATION lib)
                              "/test"))
              #t)))))
     (inputs
-     `(("openblas" ,openblas)))
+     (list openblas))
     (native-inputs
-     `(("googletest" ,googletest)))
+     (list googletest))
     (home-page "https://github.com/facebookresearch/faiss")
     (synopsis "Efficient similarity search and clustering of dense vectors")
     (description "Faiss is a library for efficient similarity search and
@@ -418,8 +461,7 @@ CPUFLAGS = ~{~a ~}~%"
        ("python*" ,python)
        ("swig" ,swig)))
     (propagated-inputs
-     `(("python-matplotlib" ,python-matplotlib)
-       ("python-numpy" ,python-numpy)))
+     (list python-matplotlib python-numpy))
     (description "Faiss is a library for efficient similarity search and
 clustering of dense vectors.  This package provides Python bindings to the
 Faiss library.")))
@@ -436,13 +478,22 @@ Faiss library.")))
         (base32
          "15fwld9hdw357rd026mzcwpah5liy4f33vc9x9kwy37g71b2rjf1"))))
     (build-system python-build-system)
-    (arguments '(#:tests? #f)) ; tests are not included
+    (arguments
+     '(#:tests? #f                      ;tests are not included
+       #:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'fix-requirements
+                    (lambda _
+                      (substitute* "setup.py"
+                        (("python-igraph >=")
+                         "igraph >=")))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     ;; XXX: setuptools >= 58 as shipped with Python 3.9+ removes support
+     ;; for lib2to3, so use this older variant.
+     (list pkg-config python-setuptools))
     (inputs
-     `(("igraph" ,igraph)))
+     (list igraph))
     (propagated-inputs
-     `(("python-igraph" ,python-igraph)))
+     (list python-igraph))
     (home-page "https://github.com/vtraag/leidenalg")
     (synopsis "Community detection in large networks")
     (description
@@ -472,9 +523,7 @@ of the Louvain algorithm, for a number of different methods.")
          "01cm7ay1njkfsdnmnvh5zwc7wg7x189hq1vbfhh9p3ihrbnmqzh8"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (synopsis "Embedding of planar graphs")
     (description "The package provides a reference implementation of the
 linear time edge addition algorithm for embedding planar graphs and
@@ -498,9 +547,9 @@ isolating planarity obstructions.")
          "1rv2v42x2506x7f10349m1wpmmfxrv9l032bkminni2gbip9cjg0"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("igraph" ,igraph)))
+     (list igraph))
     (home-page "https://sourceforge.net/projects/rankwidth/")
     (synopsis "Rank-width and rank-decomposition of graphs")
     (description "rw computes rank-width and rank-decompositions
@@ -521,9 +570,9 @@ of graphs.")
          "08yw3maxhn5fl1lff81gmcrpa4j9aas4mmby1g9w5qcr0np82d1w"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("gd" ,gd)))
+     (list gd))
     (home-page "http://www.mcternan.me.uk/mscgen/")
     (synopsis "Message Sequence Chart Generator")
     (description "Mscgen is a small program that parses Message Sequence Chart
@@ -550,36 +599,28 @@ transformed into common image formats for display or printing.")
                 "0v58in4rwk9fhjarjw6xfxpx5zz2z13sy3yvd14b5kr0884yw6sz"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:configure-flags
+     `(#:imported-modules (,@%gnu-build-system-modules
+                           (guix build python-build-system))
+       #:modules (,@%gnu-build-system-modules
+                  ((guix build python-build-system) #:select (site-packages)))
+       #:configure-flags
        (list (string-append "--with-boost="
                             (assoc-ref %build-inputs "boost"))
              (string-append "--with-python-module-path="
-                            (assoc-ref %outputs "out")
-                            "/lib/python"
-                            ,(version-major+minor
-                              (package-version
-                               (car (assoc-ref
-                                     (package-inputs this-package)
-                                     "python"))))
-                            "/site-packages/"))))
+                            (site-packages %build-inputs %outputs)))))
     (native-inputs
-     `(("gcc-10" ,gcc-10)
-       ("ncurses" ,ncurses)
-       ("pkg-config" ,pkg-config)))
+     (list ncurses pkg-config))
     (inputs
-     `(("boost" ,boost)
-       ("cairomm" ,cairomm)
-       ("cgal" ,cgal)
-       ("expat" ,expat)
-       ("gmp" ,gmp)
-       ("gtk+" ,gtk+)
-       ("python" ,python-wrapper)
-       ("sparsehash" ,sparsehash)))
+     (list boost
+           cairomm-1.14
+           cgal
+           expat
+           gmp
+           gtk+
+           python-wrapper
+           sparsehash))
     (propagated-inputs
-     `(("python-matplotlib" ,python-matplotlib)
-       ("python-numpy" ,python-numpy)
-       ("python-pycairo" ,python-pycairo)
-       ("python-scipy" ,python-scipy)))
+     (list python-matplotlib python-numpy python-pycairo python-scipy))
     (synopsis "Manipulate and analyze graphs with Python efficiently")
     (description "Graph-tool is an efficient Python module for manipulation
 and statistical analysis of graphs (a.k.a. networks).  Contrary to most other
diff --git a/gnu/packages/graphics.scm b/gnu/packages/graphics.scm
index de7cdc2232..b69ab52aec 100644
--- a/gnu/packages/graphics.scm
+++ b/gnu/packages/graphics.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2015, 2016 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2015, 2016, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; 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>
@@ -26,6 +26,7 @@
 ;;; Copyright © 2021 Antoine Côté <antoine.cote@posteo.net>
 ;;; Copyright © 2021 Andy Tai <atai@atai.org>
 ;;; Copyright © 2021 Ekaitz Zarraga <ekaitz@elenq.tech>
+;;; Copyright © 2021 Vinicius Monego <monego@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -78,6 +79,7 @@
   #:use-module (gnu packages kde-frameworks)
   #:use-module (gnu packages libusb)
   #:use-module (gnu packages linux)
+  #:use-module (gnu packages llvm)
   #:use-module (gnu packages lua)
   #:use-module (gnu packages maths)
   #:use-module (gnu packages mp3)
@@ -95,6 +97,7 @@
   #:use-module (gnu packages qt)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages sdl)
+  #:use-module (gnu packages serialization)
   #:use-module (gnu packages stb)
   #:use-module (gnu packages swig)
   #:use-module (gnu packages tbb)
@@ -118,85 +121,6 @@
   #:use-module (guix packages)
   #:use-module (guix utils))
 
-(define-public eglexternalplatform
-  (package
-    (name "eglexternalplatform")
-    (version "1.1")
-    (source
-     (origin
-       (method git-fetch)
-       (uri
-        (git-reference
-         (url "https://github.com/NVIDIA/eglexternalplatform")
-         (commit version)))
-       (file-name
-        (git-file-name name version))
-       (sha256
-        (base32 "0lr5s2xa1zn220ghmbsiwgmx77l156wk54c7hybia0xpr9yr2nhb"))))
-    (build-system copy-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'patch-pkgconfig
-           (lambda* (#:key outputs #:allow-other-keys)
-             (substitute* "eglexternalplatform.pc"
-               (("/usr")
-                (assoc-ref outputs "out")))
-             #t))
-         (add-after 'install 'revise
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out")))
-               (mkdir-p (string-append out "/include/EGL"))
-               (rename-file
-                (string-append out "/interface")
-                (string-append out "/include/EGL"))
-               (mkdir-p (string-append out "/share/pkgconfig"))
-               (rename-file
-                (string-append out "/eglexternalplatform.pc")
-                (string-append out "/share/pkgconfig/eglexternalplatform.pc"))
-               (for-each delete-file-recursively
-                         (list
-                          (string-append out "/samples")
-                          (string-append out "/COPYING")
-                          (string-append out "/README.md"))))
-             #t)))))
-    (synopsis "EGL External Platform interface")
-    (description "EGLExternalPlatform is an specification of the EGL External
-Platform interface for writing EGL platforms and their interactions with modern
-window systems on top of existing low-level EGL platform implementations.  This
-keeps window system implementation specifics out of EGL drivers by using
-application-facing EGL functions.")
-    (home-page "https://github.com/NVIDIA/eglexternalplatform")
-    (license license:expat)))
-
-(define-public egl-wayland
-  (package
-    (name "egl-wayland")
-    (version "1.1.7")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/NVIDIA/egl-wayland")
-             (commit version)))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "0xcx1132zwyp4qps074m72ngjlfmysi1jc2d0lp1ml1r9bllkam6"))))
-    (build-system meson-build-system)
-    (native-inputs
-     `(("pkg-config" ,pkg-config)))
-    (inputs
-     `(("mesa" ,mesa)
-       ("wayland" ,wayland)))
-    (propagated-inputs
-     `(("eglexternalplatform" ,eglexternalplatform)))
-    (synopsis "EGLStream-based Wayland external platform")
-    (description "EGL-Wayland is an implementation of a EGL External Platform
-library to add client-side Wayland support to EGL on top of EGLDevice and
-EGLStream families of extensions.")
-    (home-page "https://github.com/NVIDIA/egl-wayland")
-    (license license:expat)))
-
 (define-public mmm
   (package
     (name "mmm")
@@ -214,12 +138,9 @@ EGLStream families of extensions.")
         (base32 "1xmcv6rwinqsbr863rgl9005h2jlmd7k2qrwsc1h4fb8r61ykpjl"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("luajit" ,luajit)
-       ("pkg-config" ,pkg-config)))
+     (list luajit pkg-config))
     (inputs
-     `(("alsa" ,alsa-lib)
-       ("sdl" ,sdl)
-       ("sdl2" ,sdl2)))
+     (list alsa-lib sdl sdl2))
     (synopsis "Memory Mapped Machine")
     (description "MMM is a shared memory protocol for virtualising access to
 framebuffer graphics, audio output and input event.")
@@ -250,11 +171,7 @@ framebuffer graphics, audio output and input event.")
                (("^.*\\$srcdir/configure.*") ""))
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool perl pkg-config))
     (inputs
      `(("alsa" ,alsa-lib)
        ("ffmpeg" ,ffmpeg)
@@ -267,7 +184,6 @@ framebuffer graphics, audio output and input event.")
        ("libcddb" ,libcddb)
        ("libdrm" ,libdrm)
        ("libtimidity" ,libtimidity)
-       ("linux-headers" ,linux-libre-headers)
        ("mad" ,libmad)
        ("mng" ,libmng)
        ("mpeg2" ,libmpeg2)
@@ -288,7 +204,7 @@ framebuffer graphics, audio output and input event.")
        ("xproto" ,xorgproto)
        ("zlib" ,zlib)))
     (propagated-inputs
-     `(("flux" ,flux)))
+     (list flux))
     (synopsis "DFB Graphics Library")
     (description "DirectFB is a graphics library which was designed with embedded
 systems in mind.  It offers maximum hardware accelerated performance at a
@@ -312,10 +228,7 @@ minimum of resource usage and overhead.")
         (base32 "11f3ypg0sdq5kj69zgz6kih1yrzgm48r16spyvzwvlswng147410"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (synopsis "Interface description language")
     (description "Flux is an interface description language used by DirectFB.
 Fluxcomp compiles .flux files to .cpp or .c files.")
@@ -347,7 +260,7 @@ Fluxcomp compiles .flux files to .cpp or .c files.")
                                 "/include/freetype2"))))
              #t)))))
     (native-inputs
-     `(("doxygen" ,doxygen)))
+     (list doxygen))
     (inputs
      `(("bzip2" ,lbzip2)
        ("freetype" ,freetype)
@@ -453,8 +366,7 @@ with the @command{autotrace} utility or as a C library, @code{libautotrace}.")
          (list
           "-DEMBREE_ISPC_SUPPORT=OFF")))
     (inputs
-     `(("tbb" ,tbb)
-       ("glfw" ,glfw)))
+     (list tbb glfw))
     (home-page "https://www.embree.org/")
     (synopsis "High performance ray tracing kernels")
     (description
@@ -466,7 +378,7 @@ applications.")
 (define-public openvdb
   (package
     (name "openvdb")
-    (version "8.0.1")
+    (version "8.2.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -476,20 +388,16 @@ applications.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0qzx6l5c183k6j9zki31gg9aixf5s1j46wdi7wr1h3bz7k53syg9"))))
+                "0856697hnwk8xsp29kx8y2p1kliy0bdwfsznxm38v4690vna15rk"))))
     (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)))
+     (list boost c-blosc ilmbase tbb zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list 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
@@ -502,14 +410,14 @@ typically encountered in feature film production.")
 (define-public blender
   (package
     (name "blender")
-    (version "2.92.0")
+    (version "3.0.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://download.blender.org/source/"
                                   "blender-" version ".tar.xz"))
               (sha256
                (base32
-                "15a5vffn18a920286x0avbc2rap56k6y531wgibq68r90g2cz4g7"))))
+                "1jzirg60c2lhln78a7phbsk2ssvcdqxqb3awp895m0pqrlmz7w2h"))))
     (build-system cmake-build-system)
     (arguments
       (let ((python-version (version-major+minor (package-version python))))
@@ -552,14 +460,19 @@ typically encountered in feature film production.")
                #t))
            (add-after 'set-paths 'add-ilmbase-include-path
              (lambda* (#:key inputs #:allow-other-keys)
-               ;; OpenEXR propagates ilmbase, but its include files do not appear
-               ;; in the CPATH, so we need to add "$ilmbase/include/OpenEXR/" to
-               ;; the CPATH to satisfy the dependency on "half.h".
-               (setenv "CPATH"
-                       (string-append (assoc-ref inputs "ilmbase")
-                                      "/include/OpenEXR"
-                                      ":" (or (getenv "CPATH") "")))
-               #t))))))
+               ;; OpenEXR propagates ilmbase, but its include files do not
+               ;; appear in the C_INCLUDE_PATH, so we need to add
+               ;; "$ilmbase/include/OpenEXR/" to the C_INCLUDE_PATH to satisfy
+               ;; the dependency on "half.h" and "Iex.h".
+               (let ((headers (string-append
+                               (assoc-ref inputs "ilmbase")
+                               "/include/OpenEXR")))
+                 (setenv "C_INCLUDE_PATH"
+                         (string-append headers ":"
+                                        (or (getenv "C_INCLUDE_PATH") "")))
+                 (setenv "CPLUS_INCLUDE_PATH"
+                         (string-append headers ":"
+                                        (or (getenv "CPLUS_INCLUDE_PATH") ""))))))))))
     (inputs
      `(("boost" ,boost)
        ("jemalloc" ,jemalloc)
@@ -568,7 +481,7 @@ typically encountered in feature film production.")
        ("libxrender" ,libxrender)
        ("opencolorio" ,opencolorio)
        ("openimageio" ,openimageio)
-       ("openexr" ,openexr)
+       ("openexr" ,openexr-2)
        ("opensubdiv" ,opensubdiv)
        ("ilmbase" ,ilmbase)
        ("openjpeg" ,openjpeg)
@@ -588,6 +501,7 @@ typically encountered in feature film production.")
        ("openvdb" ,openvdb)
        ("tbb" ,tbb)
        ("zlib" ,zlib)
+       ("zstd" ,zstd "lib")
        ("embree" ,embree)))
     (home-page "https://blender.org/")
     (synopsis "3D graphics creation suite")
@@ -598,104 +512,6 @@ compositing and motion tracking, even video editing and game creation.  The
 application can be customized via its API for Python scripting.")
     (license license:gpl2+)))
 
-(define-public blender-2.79
-  (package
-    (name "blender")
-    (version "2.79b")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://download.blender.org/source/"
-                                  "blender-" version ".tar.gz"))
-              (sha256
-               (base32
-                "1g4kcdqmf67srzhi3hkdnr4z1ph4h9sza1pahz38mrj998q4r52c"))
-              (patches (search-patches "blender-2.79-newer-ffmpeg.patch"
-                                       "blender-2.79-oiio2.patch"
-                                       ;; The following patches may be
-                                       ;; needed when the default GCC is
-                                       ;; updated:
-                                       ;;   "blender-2.79-gcc8.patch"
-                                       ;;   "blender-2.79-gcc9.patch"
-                                       "blender-2.79-python-3.7-fix.patch"
-                                       "blender-2.79-python-3.8-fix.patch"))))
-    (build-system cmake-build-system)
-    (arguments
-      (let ((python-version (version-major+minor (package-version python))))
-       `(;; Test files are very large and not included in the release tarball.
-         #:tests? #f
-         #:configure-flags
-         (list "-DWITH_CODEC_FFMPEG=ON"
-               "-DWITH_CODEC_SNDFILE=ON"
-               "-DWITH_CYCLES=ON"
-               "-DWITH_DOC_MANPAGE=ON"
-               "-DWITH_FFTW3=ON"
-               "-DWITH_GAMEENGINE=ON"
-               "-DWITH_IMAGE_OPENJPEG=ON"
-               "-DWITH_INPUT_NDOF=ON"
-               "-DWITH_INSTALL_PORTABLE=OFF"
-               "-DWITH_JACK=ON"
-               "-DWITH_MOD_OCEANSIM=ON"
-               "-DWITH_PLAYER=ON"
-               "-DWITH_PYTHON_INSTALL=OFF"
-               "-DWITH_PYTHON_INSTALL=OFF"
-               "-DWITH_SYSTEM_OPENJPEG=ON"
-               (string-append "-DPYTHON_LIBRARY=python" ,python-version)
-               (string-append "-DPYTHON_LIBPATH=" (assoc-ref %build-inputs "python")
-                              "/lib")
-               (string-append "-DPYTHON_INCLUDE_DIR=" (assoc-ref %build-inputs "python")
-                              "/include/python" ,python-version)
-               (string-append "-DPYTHON_VERSION=" ,python-version))
-         #:phases
-         (modify-phases %standard-phases
-           (add-after 'unpack 'fix-broken-import
-             (lambda _
-               (substitute* "release/scripts/addons/io_scene_fbx/json2fbx.py"
-                 (("import encode_bin") "from . import encode_bin"))
-               #t))
-           (add-after 'set-paths 'add-ilmbase-include-path
-             (lambda* (#:key inputs #:allow-other-keys)
-               ;; OpenEXR propagates ilmbase, but its include files do not appear
-               ;; in the CPATH, so we need to add "$ilmbase/include/OpenEXR/" to
-               ;; the CPATH to satisfy the dependency on "half.h".
-               (setenv "CPATH"
-                       (string-append (assoc-ref inputs "ilmbase")
-                                      "/include/OpenEXR"
-                                      ":" (or (getenv "CPATH") "")))
-               #t))))))
-    (inputs
-     `(("boost" ,boost)
-       ("jemalloc" ,jemalloc)
-       ("libx11" ,libx11)
-       ("opencolorio" ,opencolorio)
-       ("openimageio" ,openimageio)
-       ("openexr" ,openexr)
-       ("ilmbase" ,ilmbase)
-       ("openjpeg" ,openjpeg)
-       ("libjpeg" ,libjpeg-turbo)
-       ("libpng" ,libpng)
-       ("libtiff" ,libtiff)
-       ("ffmpeg" ,ffmpeg)
-       ("fftw" ,fftw)
-       ("jack" ,jack-1)
-       ("libsndfile" ,libsndfile)
-       ("freetype" ,freetype)
-       ("glew" ,glew)
-       ("openal" ,openal)
-       ("pugixml" ,pugixml)
-       ("python" ,python)
-       ("zlib" ,zlib)))
-    (home-page "https://blender.org/")
-    (synopsis "3D graphics creation suite")
-    (description
-     "Blender is a 3D graphics creation suite.  It supports the entirety of
-the 3D pipeline—modeling, rigging, animation, simulation, rendering,
-compositing and motion tracking, even video editing and game creation.  The
-application can be customized via its API for Python scripting.
-
-NOTE: This older version of Blender is the last release that does not require
-OpenGL 3.  It is retained for use with older computers.")
-    (license license:gpl2+)))
-
 (define-public goxel
   (package
     (name "goxel")
@@ -716,7 +532,7 @@ OpenGL 3.  It is retained for use with older computers.")
        #:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
                           "release")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("gtk3" ,gtk+)
        ("glfw" ,glfw)
@@ -744,7 +560,7 @@ and export to various formats including the format used by Magicavoxel.")
                 "1rhyqfhzifdj7yibyanph3rh13ykw3i98dnn8mz65j780472hw28"))))
     (build-system cmake-build-system)
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "http://www.assimp.org/")
     (synopsis "Asset import library")
     (description
@@ -756,6 +572,72 @@ vertices, sorting by primitive type, merging of redundant materials and many
 more.")
     (license license:bsd-3)))
 
+(define-public openshadinglanguage
+  (package
+    (name "openshadinglanguage")
+    (version "1.11.16.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/AcademySoftwareFoundation/OpenShadingLanguage")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0x0lc163vl2b57l75bf5zxlr6vm2y1f1izlxdnrw3vsapv3r9k9g"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:configure-flags (list "-DUSE_PARTIO=OFF") ; TODO: not packaged
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'set-paths 'add-ilmbase-include-path
+           (lambda* (#:key inputs #:allow-other-keys)
+             ;; OpenEXR 2 propagates ilmbase, but its include files do not
+             ;; appear in the C_INCLUDE_PATH.
+             (let ((headers (string-append
+                             (assoc-ref inputs "ilmbase")
+                             "/include/OpenEXR")))
+               (setenv "C_INCLUDE_PATH"
+                       (string-append headers ":"
+                                      (or (getenv "C_INCLUDE_PATH") "")))
+               (setenv "CPLUS_INCLUDE_PATH"
+                       (string-append headers ":"
+                                      (or (getenv "CPLUS_INCLUDE_PATH") ""))))))
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "ctest" "--exclude-regex"
+                       (string-join
+                        (list
+                         "osl-imageio"       ; OIIO not compiled with freetype
+                         "osl-imageio.opt"   ; OIIO not compiled with freetype
+                         "texture-udim"      ; file does not exist
+                         "texture-udim.opt"  ; file does not exist
+                         "example-deformer"  ; could not find OSLConfig
+                         "python-oslquery")  ; no module oslquery
+                        "|"))))))))
+    (native-inputs
+     (list bison
+           clang
+           flex
+           llvm
+           pybind11
+           python-wrapper))
+    (inputs
+     (list boost
+           imath
+           openexr-2
+           openimageio
+           pugixml
+           qtbase-5
+           zlib))
+    (home-page "https://github.com/AcademySoftwareFoundation/OpenShadingLanguage")
+    (synopsis "Shading language for production GI renderers")
+    (description "Open Shading Language (OSL) is a language for programmable
+shading in advanced renderers and other applications, ideal for describing
+materials, lights, displacement, and pattern generation.")
+    (license license:bsd-3)))
+
 (define-public cgal
   (package
     (name "cgal")
@@ -777,9 +659,7 @@ more.")
                             ,name "-" ,version))
        #:tests? #f))                    ; no test target
     (inputs
-     `(("mpfr" ,mpfr)
-       ("gmp" ,gmp)
-       ("boost" ,boost)))
+     (list mpfr gmp boost))
     (home-page "https://www.cgal.org/")
     (synopsis "Computational geometry algorithms library")
     (description
@@ -796,6 +676,28 @@ many more.")
     ;; permissive licenses.
     (license license:gpl3+)))
 
+(define-public imath
+  (package
+    (name "imath")
+    (version "3.1.3")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/AcademySoftwareFoundation/Imath")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1nyld18mf220ghm1vidnfnn0rdns9z5i4l9s66xgd0kfdgarb31f"))))
+    (build-system cmake-build-system)
+    (home-page "https://github.com/AcademySoftwareFoundation/Imath")
+    (synopsis "Library of math operations for computer graphics")
+    (description
+     "Imath is a C++ representation of 2D and 3D vectors and matrices and other
+mathematical objects, functions, and data types common in computer graphics
+applications, including the \"half\" 16-bit floating-point type.")
+    (license license:bsd-3)))
+
 (define-public ilmbase
   (package
     (name "ilmbase")
@@ -864,7 +766,17 @@ exception-handling library.")
                (substitute* '("src/cython/CMakeLists.txt"
                               "src/py2geom/CMakeLists.txt")
                  (("PYTHON_LIB_INSTALL \"[^\"]*\"")
-                  (format #f "PYTHON_LIB_INSTALL ~s" site-package)))))))))
+                  (format #f "PYTHON_LIB_INSTALL ~s" site-package))))))
+         ,@(if (target-x86-32?)
+               `((add-after 'unpack 'skip-faulty-test
+                   (lambda _
+                     ;; This test fails on i686 when comparing floating point
+                     ;; values, probably due to excess precision.  However,
+                     ;; '-fexcess-precision' is not implemented for C++ in
+                     ;; GCC 10 so just skip it.
+                     (substitute* "tests/CMakeLists.txt"
+                       (("bezier-test") "")))))
+               '()))))
     (native-inputs `(("python" ,python-wrapper)
                      ("googletest" ,googletest)
                      ("pkg-config" ,pkg-config)))
@@ -874,7 +786,7 @@ exception-handling library.")
               ("glib" ,glib)
               ("gsl" ,gsl)))
     (propagated-inputs
-     `(("boost" ,boost)))               ;referred to in 2geom/pathvector.h.
+     (list boost))               ;referred to in 2geom/pathvector.h.
     (home-page "https://gitlab.com/inkscape/lib2geom/")
     (synopsis "C++ 2D graphics library")
     (description "2geom is a C++ library of mathematics for paths, curves,
@@ -889,17 +801,17 @@ basic geometries.")
 (define-public pstoedit
   (package
     (name "pstoedit")
-    (version "3.75")
+    (version "3.77")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/pstoedit/pstoedit/"
                                   version "/pstoedit-" version ".tar.gz"))
               (sha256
                (base32
-                "1kv46g2wsvsvcngkavxl5gnw3l6g5xqnh4kmyx4b39a01d8xiddp"))))
+                "02av76j75g5sq3bg353yl6dlllda9ihmmk4c8hvgiscix816nv4s"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("ghostscript" ,ghostscript)
        ("imagemagick" ,imagemagick)
@@ -978,9 +890,7 @@ other vector formats such as:
             (base32 "1xhk34pzpha6k5l2j150capq66y8czhmsi04ib09wvb34ahqxpby"))))
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("freetype" ,freetype)
-       ("stb-rect-pack" ,stb-rect-pack)
-       ("stb-truetype" ,stb-truetype)))
+     (list freetype stb-rect-pack stb-truetype))
     (home-page "https://github.com/ocornut/imgui")
     (synopsis "Immediate-mode C++ GUI library with minimal dependencies")
     (description
@@ -997,6 +907,30 @@ applications, full-screen applications, and embedded platforms without standard
 operating system features.")
     (license license:expat)))           ; some examples/ use the zlib licence
 
+(define-public alembic
+  (package
+    (name "alembic")
+    (version "1.8.3")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/alembic/alembic")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0glfx3cm7r8zn3cn7j4x4ch1ab6igfis0i2lcy23jc56q87r8yj2"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:configure-flags (list "-DUSE_HDF5=ON")))
+    (inputs
+     (list hdf5 imath zlib))
+    (home-page "http://www.alembic.io/")
+    (synopsis "Framework for storing and sharing scene data")
+    (description "Alembic is a computer graphics interchange framework.  It
+distills complex, animated scenes into a set of baked geometric results.")
+    (license license:bsd-3)))
+
 (define-public ogre
   (package
     (name "ogre")
@@ -1047,16 +981,16 @@ operating system features.")
        ("googletest" ,googletest-1.8)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("font-dejavu" ,font-dejavu)
-       ("freeimage" ,freeimage)
-       ("freetype" ,freetype)
-       ("glu" ,glu)
-       ("libxaw" ,libxaw)
-       ("libxrandr" ,libxrandr)
-       ("pugixml" ,pugixml)
-       ("sdl2" ,sdl2)
-       ("tinyxml" ,tinyxml)
-       ("zziplib" ,zziplib)))
+     (list font-dejavu
+           freeimage
+           freetype
+           glu
+           libxaw
+           libxrandr
+           pugixml
+           sdl2
+           tinyxml
+           zziplib))
     (synopsis "Scene-oriented, flexible 3D engine written in C++")
     (description
      "OGRE (Object-Oriented Graphics Rendering Engine) is a scene-oriented,
@@ -1069,17 +1003,46 @@ graphics.")
 (define-public openexr
   (package
     (name "openexr")
+    (version "3.1.3")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/AcademySoftwareFoundation/openexr")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0c9vla0kbsbbhkk42jlbf94nzfb1anqh7dy9b0b3nna1qr6v4bh6"))))
+    (build-system cmake-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         ;; /var/tmp does not exist in the Guix build environment
+         (add-after 'unpack 'patch-test-directory
+           (lambda _
+             (substitute* '("src/test/OpenEXRUtilTest/tmpDir.h"
+                            "src/test/OpenEXRFuzzTest/tmpDir.h"
+                            "src/test/OpenEXRTest/tmpDir.h"
+                            "src/test/OpenEXRCoreTest/main.cpp")
+               (("/var/tmp") "/tmp")))))))
+    (inputs
+     (list imath zlib))
+    (home-page "https://www.openexr.com/")
+    (synopsis "High-dynamic-range file format library")
+    (description
+     "OpenEXR provides the specification and reference implementation of the
+EXR file format.  The purpose of EXR format is to accurately and efficiently
+represent high-dynamic-range scene-linear image data and associated metadata,
+with strong support for multi-part, multi-channel use cases.")
+    (license license:bsd-3)))
+
+(define-public openexr-2
+  (package
+    (name "openexr")
     (version (package-version ilmbase))
     (source (origin
               (inherit (package-source ilmbase))
-              (file-name (git-file-name "openexr" version))
-              (modules '((guix build utils)))
-              (snippet
-               '(begin
-                  (substitute* (find-files "OpenEXR" "tmpDir\\.h")
-                    (("\"/var/tmp/\"")
-                     "\"/tmp/\""))
-                  #t))))
+              (file-name (git-file-name "openexr" version))))
     (build-system cmake-build-system)
     (arguments
      `(#:phases
@@ -1088,6 +1051,12 @@ graphics.")
            (lambda _
              (chdir "OpenEXR")
              #t))
+         (add-after 'change-directory 'patch-test-directory
+           (lambda _
+             (substitute* '("IlmImfFuzzTest/tmpDir.h"
+                            "IlmImfTest/tmpDir.h"
+                            "IlmImfUtilTest/tmpDir.h")
+               (("/var/tmp") "/tmp"))))
          (add-after 'change-directory 'increase-test-timeout
            (lambda _
              ;; On armhf-linux, we need to override the CTest default
@@ -1109,22 +1078,19 @@ graphics.")
                      #t)))
                '()))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (propagated-inputs
-     `(("ilmbase" ,ilmbase)                       ;used in public headers
-       ("zlib" ,zlib)))                           ;OpenEXR.pc reads "-lz"
-    (home-page "https://www.openexr.com/")
-    (synopsis "High-dynamic range file format library")
-    (description
-     "OpenEXR is a high dynamic-range (HDR) image file format developed for
-use in computer imaging applications.  The IlmImf C++ libraries support
-storage of the \"EXR\" file format for storing 16-bit floating-point images.")
-    (license license:bsd-3)))
+     (list ilmbase ;used in public headers
+           zlib))                           ;OpenEXR.pc reads "-lz"
+    (home-page (package-home-page openexr))
+    (synopsis (package-synopsis openexr))
+    (description (package-description openexr))
+    (license (package-license openexr))))
 
 (define-public openimageio
   (package
     (name "openimageio")
-    (version "2.2.10.1")
+    (version "2.2.11.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1133,7 +1099,7 @@ storage of the \"EXR\" file format for storing 16-bit floating-point images.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0wzh5n527l7ia1754cf9xmbvv4ya6hj34dy6cbq9xk9372h8gd9q"))))
+                "1i9r6vgz15aj1yzbf5a9lqhlyakjs793yrw5gw720l84lcyigad7"))))
     (build-system cmake-build-system)
     ;; FIXME: To run all tests successfully, test image sets from multiple
     ;; third party sources have to be present.  For details see
@@ -1142,15 +1108,16 @@ storage of the \"EXR\" file format for storing 16-bit floating-point images.")
      `(#:tests? #f
        #:configure-flags (list "-DUSE_EXTERNAL_PUGIXML=1")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("boost" ,boost)
        ("fmt" ,fmt)
+       ("libheif" ,libheif)
        ("libpng" ,libpng)
        ("libjpeg" ,libjpeg-turbo)
        ("libtiff" ,libtiff)
        ("giflib" ,giflib)
-       ("openexr" ,openexr)
+       ("openexr" ,openexr-2)
        ("ilmbase" ,ilmbase)
        ("pugixml" ,pugixml)
        ("python" ,python-wrapper)
@@ -1192,8 +1159,7 @@ visual effects work for film.")
                             (assoc-ref %outputs "out") "/lib:"
                             (assoc-ref %outputs "out") "/lib64"))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("unzip" ,unzip)))
+     (list pkg-config unzip))
     (inputs
      `(("giflib" ,giflib)
        ("libjpeg" ,libjpeg-turbo)       ; required for the JPEG texture plugin.
@@ -1212,32 +1178,56 @@ virtual reality, scientific visualization and modeling.")
     ;; LGPL 2.1, but with 4 exceptions. This version is called OSGPL.
     (license license:lgpl2.1)))
 
-;; We need this for simgear
-(define-public openscenegraph-3.4
-  (package (inherit openscenegraph)
-    (name "openscenegraph")
-    (version "3.4.1")
+(define-public gr-framework
+  (package
+    (name "gr-framework")
+    (version "0.58.1")
     (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/openscenegraph/OpenSceneGraph")
-             (commit (string-append "OpenSceneGraph-" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "1fbzg1ihjpxk6smlq80p3h3ggllbr16ihd2fxpfwzam8yr8yxip9"))))
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/sciapp/gr")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "0q1rz4iyxbh0dc22y4w28ry3hr0yypdwdm6pw2zlwgjya7wkbvsw"))
+        (modules '((guix build utils)))
+        (snippet
+         '(begin
+            (delete-file-recursively "3rdparty")
+            #t))))
+    (build-system cmake-build-system)
     (arguments
-     (substitute-keyword-arguments (package-arguments openscenegraph)
-       ((#:configure-flags flags)
-        `(cons
-          ;; The jpeg plugin requires conversion between integers and booleans
-          "-DCMAKE_CXX_FLAGS=-fpermissive"
-          ,flags))))
+     `(#:tests? #f))    ; no test target
     (inputs
-     `(("libjpeg" ,libjpeg-turbo)
-       ,@(package-inputs openscenegraph)))))
-
+     `(("bzip2" ,bzip2)
+       ("cairo" ,cairo)
+       ("fontconfig" ,fontconfig)
+       ("ffmpeg" ,ffmpeg)
+       ("freetype" ,freetype)
+       ("ghostscript" ,ghostscript)
+       ("glfw" ,glfw)
+       ("libjpeg-turbo" ,libjpeg-turbo)
+       ("libpng" ,libpng)
+       ("libtiff" ,libtiff)
+       ("libx11" ,libx11)
+       ("libxft" ,libxft)
+       ("libxt" ,libxt)
+       ("pixman" ,pixman)
+       ("qtbase" ,qtbase-5)
+       ("qhull" ,qhull)
+       ("zlib" ,zlib)))
+    (home-page "https://gr-framework.org/")
+    (synopsis "Graphics library for visualisation applications")
+    (description "GR is a universal framework for cross-platform visualization
+applications.  It offers developers a compact, portable and consistent graphics
+library for their programs.  Applications range from publication quality 2D
+graphs to the representation of complex 3D scenes.  GR is essentially based on
+an implementation of a @acronym{GKS, Graphical Kernel System}.  As a
+self-contained system it can quickly and easily be integrated into existing
+applications (i.e. using the @code{ctypes} mechanism in Python or @code{ccall}
+in Julia).")
+    (license license:expat)))
 
 (define-public openmw-openscenegraph
   ;; OpenMW prefers its own fork of openscenegraph:
@@ -1295,15 +1285,13 @@ virtual reality, scientific visualization and modeling.")
                   #t))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config))
     (inputs
      `(("boost" ,boost)
        ("libjpeg" ,libjpeg-turbo)
        ("libpng" ,libpng)
        ("libtiff" ,libtiff)
-       ("openexr" ,openexr)
+       ("openexr" ,openexr-2)
        ("sdl" ,sdl)
        ("zlib" ,zlib)))
     (arguments
@@ -1380,11 +1368,7 @@ realistic reflections, shading, perspective and other effects.")
     ;; These libraries are listed in the "Required" section of the pkg-config
     ;; file.
     (propagated-inputs
-     `(("librsvg" ,librsvg)
-       ("cairo" ,cairo)
-       ("pango" ,pango)
-       ("libxml2" ,libxml2)
-       ("python2-enum34" ,python2-enum34)))
+     (list librsvg cairo pango libxml2 python2-enum34))
     (inputs
      `(("gdk-pixbuf" ,gdk-pixbuf)
        ("libpng" ,libpng-1.2)
@@ -1424,7 +1408,7 @@ and is connected to the programming logic using data bindings and commands.")
     (arguments '(#:tests? #f))                    ;no 'test' target
 
     ;; Headers include OpenEXR and IlmBase headers.
-    (propagated-inputs `(("openexr" ,openexr)))
+    (propagated-inputs (list openexr-2))
 
     (home-page "http://ampasctl.sourceforge.net")
     (synopsis "Color Transformation Language")
@@ -1485,13 +1469,9 @@ exec -a \"$0\" ~a/.brdf-real~%"
                             (chmod "brdf" #o555)))
                         #t)))))
       (native-inputs
-       `(("qttools" ,qttools))) ;for 'qmake'
+       (list qttools)) ;for 'qmake'
       (inputs
-       `(("qtbase" ,qtbase-5)
-         ("mesa" ,mesa)
-         ("glew" ,glew)
-         ("freeglut" ,freeglut)
-         ("zlib" ,zlib)))
+       (list qtbase-5 mesa glew freeglut zlib))
       (home-page "https://www.disneyanimation.com/technology/brdf.html")
       (synopsis
        "Analyze bidirectional reflectance distribution functions (BRDFs)")
@@ -1523,7 +1503,8 @@ and understanding different BRDFs (and other component functions).")
                                         version ".tar.gz")))
               (sha256
                (base32 "07wii4i824vy9qsvjsgqxppgqmfdxq0xa87i5yk53fijriadq7mb"))
-              (patches (search-patches "agg-am_c_prototype.patch"))))
+              (patches (search-patches "agg-am_c_prototype.patch"
+                                       "agg-2.5-gcc8.patch"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags
@@ -1540,14 +1521,9 @@ and understanding different BRDFs (and other component functions).")
              (substitute* "autogen.sh" (("./configure") "# ./configure"))
              (invoke "sh" "autogen.sh"))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("libtool" ,libtool)
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list pkg-config libtool autoconf automake))
     (inputs
-     `(("libx11" ,libx11)
-       ("freetype" ,freetype)
-       ("sdl" ,sdl)))
+     (list libx11 freetype sdl))
 
     ;; Antigrain.com was discontinued.
     (home-page "http://agg.sourceforge.net/antigrain.com/index.html")
@@ -1575,7 +1551,7 @@ rendering @acronym{SVG, Scalable Vector Graphics}.")
                   (replace 'check
                     (lambda _ (invoke "pytest" "pastel" "tests/"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/sdispater/pastel")
     (synopsis "Library to colorize strings in your terminal")
     (description "Pastel is a simple library to help you colorize strings in
@@ -1646,7 +1622,7 @@ your terminal.")
                  `("PERL5LIB" ":" prefix (,perl5lib)))
                #t))))))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     ;; TODO: Add missing optional dependency: facedetect.
     (inputs
      `(("imagemagick" ,imagemagick)
@@ -1692,20 +1668,19 @@ requirements.")
                   (add-before 'check 'start-xorg-server
                     (lambda* (#:key inputs #:allow-other-keys)
                       ;; The test suite requires a running X server.
-                      (system (string-append (assoc-ref inputs "xorg-server")
-                                             "/bin/Xvfb :1 &"))
+                      (system "Xvfb :1 &")
                       (setenv "DISPLAY" ":1")
                       #t)))))
     (native-inputs
-     `(("xorg-server" ,xorg-server-for-tests)))
+     (list xorg-server-for-tests))
     (inputs
-     `(("glew" ,glew)
-       ("libxrandr" ,libxrandr)
-       ("libxcursor" ,libxcursor)
-       ("libxinerama" ,libxinerama)
-       ("libxi" ,libxi)
-       ("zlib" ,zlib)
-       ("glfw" ,glfw)))
+     (list glew
+           libxrandr
+           libxcursor
+           libxinerama
+           libxi
+           zlib
+           glfw))
     (home-page "https://graphics.pixar.com/opensubdiv/")
     (synopsis "High performance subdivision surface evaluation")
     (description "OpenSubdiv is a set of libraries that implement high
@@ -1742,8 +1717,7 @@ and GPU architectures.")
            (add-before 'build 'skip-example
              (lambda _ (chdir "src") #t)))))
       (inputs
-       `(("glew" ,glew)
-         ("freeglut" ,freeglut)))
+       (list glew freeglut))
       (synopsis "Library for rendering Constructive Solid Geometry (CSG)")
       (description
        "OpenCSG is a library for rendering Constructive Solid Geometry (CSG) using
@@ -1780,12 +1754,9 @@ or by subtracting one shape from the other.")
              #t))))
       (build-system cmake-build-system)
       (native-inputs
-       `(("doxygen" ,doxygen)
-         ("graphviz" ,graphviz)))
+       (list doxygen graphviz))
       (inputs
-       `(("boost" ,boost)
-         ("freeglut" ,freeglut)
-         ("glew" ,glew)))
+       (list boost freeglut glew))
       (arguments
        `(#:configure-flags
          (list
@@ -1833,12 +1804,9 @@ software in the scientific and engineering community.")
              #t))))
     (build-system cmake-build-system)
     (native-inputs
-      `(("doxygen" ,doxygen)
-        ("graphviz" ,graphviz)))
+      (list doxygen graphviz))
     (inputs
-      `(("boost" ,boost)
-        ("freeglut" ,freeglut)
-        ("glew" ,glew)))
+      (list boost freeglut glew))
     (arguments
       `(#:configure-flags
         (list
@@ -1912,22 +1880,21 @@ Automated palette selection is supported.")
        '(#:configure-flags
          (list "-DTESTS=ON" "-DTOOLS=ON" "-DKIS_TABLET=ON")))
       (native-inputs
-       `(("extra-cmake-modules" ,extra-cmake-modules)
-         ("pkg-config" ,pkg-config)))
+       (list extra-cmake-modules pkg-config))
       (inputs
-       `(("giflib" ,giflib)
-         ("karchive" ,karchive)
-         ("kdnssd" ,kdnssd)
-         ("libmicrohttpd" ,libmicrohttpd)
-         ("libsodium" ,libsodium)
-         ("libvpx" ,libvpx)
-         ("libxi" ,libxi)
-         ;; ("miniupnpc" ,miniupnpc) ;segfaults for some reason
-         ("qtbase" ,qtbase-5)
-         ("qtkeychain" ,qtkeychain)
-         ("qtmultimedia" ,qtmultimedia)
-         ("qtsvg" ,qtsvg)
-         ("qtx11extras" ,qtx11extras)))
+       (list giflib
+             karchive
+             kdnssd
+             libmicrohttpd
+             libsodium
+             libvpx
+             libxi
+             ;; ("miniupnpc" ,miniupnpc) ;segfaults for some reason
+             qtbase-5
+             qtkeychain
+             qtmultimedia
+             qtsvg
+             qtx11extras))
       (home-page "https://drawpile.net")
       (synopsis "Collaborative drawing program")
       (description "Drawpile is a drawing program that allows share the canvas
@@ -1948,6 +1915,38 @@ Some feature highlights:
 @end itemize\n")
       (license license:gpl3+))))
 
+(define-public openxr
+  (package
+    (name "openxr")
+    (version "1.0.20")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/KhronosGroup/OpenXR-SDK")
+             (commit (string-append "release-" version))))
+       (file-name (git-file-name name version))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           ;; Delete bundled jsoncpp.
+           (delete-file-recursively "src/external/jsoncpp")))
+       (sha256
+        (base32 "1jd7jjxlrdi8kjnmn3sad7dgb4h48dbxryfb9snf0kifn47bi20m"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:tests? #f))                    ; there are no tests
+    (native-inputs
+     (list pkg-config python shaderc vulkan-headers))
+    (inputs
+     (list jsoncpp mesa vulkan-loader wayland))
+    (home-page "https://www.khronos.org/openxr/")
+    (synopsis "Generated headers and sources for OpenXR loader")
+    (description "This package contains OpenXR headers, as well as source code
+and build scripts for the OpenXR loader.")
+    ;; Dual licensed.  Either license applies.
+    (license (list license:asl2.0 license:expat))))
+
 (define-public monado
   (package
     (name "monado")
@@ -1972,9 +1971,7 @@ Some feature highlights:
        ("v4l" ,v4l-utils)
        ("vulkan-loader" ,vulkan-loader)))
     (native-inputs
-     `(("eigen" ,eigen)
-       ("pkg-config" ,pkg-config)
-       ("vulkan-headers" ,vulkan-headers)))
+     (list eigen pkg-config vulkan-headers))
     (arguments
      `(#:configure-flags
        (list "-Dinstall-active-runtime=false")))
diff --git a/gnu/packages/graphviz.scm b/gnu/packages/graphviz.scm
index 5685864d4c..dfbb28a8a9 100644
--- a/gnu/packages/graphviz.scm
+++ b/gnu/packages/graphviz.scm
@@ -1,15 +1,17 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2015, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015, 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Theodoros Foradis <theodoros@foradis.org>
 ;;; Copyright © 2017, 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Gábor Boskovits <boskovits@gmail.com>
 ;;; Copyright © 2018 Mathieu Lirzin <mthl@gnu.org>
-;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2020, 2022 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
 ;;; Copyright © 2020 Pjotr Prins <pjotr.guix@thebird.nl>
 ;;; Copyright © 2021 Bonface Munyoki Kilyungi <me@bonfacemunyoki.com>
+;;; Copyright © 2021 Giacomo Leidi <goodoldpaul@autistici.org>
+;;; Copyright © 2021 Justin Veilleux <terramorpha@cock.li>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -33,6 +35,7 @@
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix utils)
+  #:use-module (guix gexp)
   #:use-module (gnu packages)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages bison)
@@ -49,6 +52,7 @@
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-check)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages sphinx)
@@ -62,48 +66,48 @@
 (define-public graphviz
   (package
     (name "graphviz")
-    (replacement graphviz/fixed)
-    (version "2.42.3")
+    (version "2.49.0")
     (source (origin
               (method url-fetch)
-              (uri (string-append
-                    "https://www2.graphviz.org/Packages/stable/portable_source/"
-                    "graphviz-" version ".tar.gz"))
+              (uri (string-append "https://gitlab.com/api/v4/projects/4207231"
+                                  "/packages/generic/graphviz-releases/"
+                                  version "/graphviz-" version ".tar.xz"))
               (sha256
                (base32
-                "1pbswjbx3fjdlsxcm7cmlsl5bvaa3d6gcnr0cr8x3c8pag13zbwg"))))
+                "042s6mbi681pwgffqww2ap780230nrsrfpfiz9a41dcjb5a0m524"))))
     (build-system gnu-build-system)
     (arguments
      ;; FIXME: rtest/rtest.sh is a ksh script (!).  Add ksh as an input.
-     '(#:tests? #f
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'install 'move-docs
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out"))
-                   (doc (assoc-ref outputs "doc")))
-               (mkdir-p (string-append doc "/share/graphviz"))
-               (rename-file (string-append out "/share/graphviz/doc")
-                            (string-append doc "/share/graphviz/doc"))
-               #t)))
-         (add-after 'move-docs 'move-guile-bindings
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (lib (string-append out "/lib"))
-                    (extdir (string-append lib
-                                           "/guile/2.0/extensions")))
-               (mkdir-p extdir)
-               (rename-file (string-append
-                             lib "/graphviz/guile/libgv_guile.so")
-                            (string-append extdir
-                                           "/libgv_guile.so"))
-               #t))))))
+     (list #:tests? #f
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'install 'move-docs
+                 (lambda* (#:key outputs #:allow-other-keys)
+                   (let ((out (assoc-ref outputs "out"))
+                         (doc (assoc-ref outputs "doc")))
+                     (mkdir-p (string-append doc "/share/graphviz"))
+                     (rename-file (string-append out "/share/graphviz/doc")
+                                  (string-append doc "/share/graphviz/doc")))))
+               (add-after 'move-docs 'move-guile-bindings
+                 (lambda* (#:key outputs #:allow-other-keys)
+                   (let* ((out (assoc-ref outputs "out"))
+                          (lib (string-append out "/lib"))
+                          (extdir (string-append lib "/guile/"
+                                                 #$(version-major+minor
+                                                    (package-version
+                                                     (this-package-input "guile")))
+                                                 "/extensions")))
+                     (mkdir-p extdir)
+                     (rename-file (string-append
+                                   lib "/graphviz/guile/libgv_guile.so")
+                                  (string-append extdir
+                                                 "/libgv_guile.so"))))))))
     (inputs
      `(("libXrender" ,libxrender)
        ("libX11" ,libx11)
        ("gts" ,gts)
-       ("gd" ,gd)                                 ; FIXME: Our GD is too old
-       ("guile" ,guile-2.0)                       ;Guile bindings
+       ("gd" ,gd)
+       ("guile" ,guile-3.0)                       ;Guile bindings
        ("pango" ,pango)
        ("fontconfig" ,fontconfig)
        ("freetype" ,freetype)
@@ -113,9 +117,7 @@
        ("libjpeg" ,libjpeg-turbo)
        ("libpng" ,libpng)))
     (native-inputs
-     `(("bison" ,bison)
-       ("swig" ,swig)
-       ("pkg-config" ,pkg-config)))
+     (list bison swig pkg-config))
     (outputs '("out" "doc"))                      ; 5 MiB of html + pdfs
     (home-page "https://www.graphviz.org/")
     (synopsis "Graph visualization software")
@@ -127,15 +129,6 @@ software engineering, database and web design, machine learning, and in visual
 interfaces for other technical domains.")
     (license license:epl1.0)))
 
-(define-public graphviz/fixed
-  (hidden-package
-    (package
-      (inherit graphviz)
-      (source (origin
-                (inherit (package-source graphviz))
-                (patches (append (search-patches "graphviz-CVE-2020-18032.patch")
-                                 (origin-patches (package-source graphviz)))))))))
-
 ;; Older Graphviz needed for pygraphviz.  See
 ;; https://github.com/pygraphviz/pygraphviz/issues/175
 (define-public graphviz-2.38
@@ -158,27 +151,28 @@ interfaces for other technical domains.")
       (arguments
        (substitute-keyword-arguments (package-arguments graphviz)
          ((#:phases phases)
-          `(modify-phases ,phases
-             (add-after 'unpack 'prepare-bootstrap
-               (lambda _
-                 (substitute* "autogen.sh"
-                   (("/bin/sh") (which "sh"))
-                   (("\\$GRAPHVIZ_VERSION_DATE") "0"))
-                 (setenv "CONFIG_SHELL" (which "sh"))
-                 (setenv "SHELL" (which "sh"))
+          #~(modify-phases #$phases
+              (add-after 'unpack 'prepare-bootstrap
+                (lambda _
+                  (substitute* "autogen.sh"
+                    (("/bin/sh") (which "sh"))
+                    (("\\$GRAPHVIZ_VERSION_DATE") "0"))
+                  (setenv "CONFIG_SHELL" (which "sh"))
+                  (setenv "SHELL" (which "sh"))
 
-                 (map make-file-writable (find-files "." ".*"))
-                 #t))
-             (replace 'bootstrap
-               (lambda _ (invoke (which "sh") "autogen.sh" "NOCONFIG") #t))))))
+                  (map make-file-writable (find-files "." ".*"))
+                  #t))
+              (replace 'bootstrap
+                (lambda _
+                  (invoke (which "sh") "autogen.sh" "NOCONFIG") #t))))))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("libtool" ,libtool)
-         ("flex" ,flex)
-         ("perl" ,perl)
-         ("tcl" ,tcl)
-         ,@(package-native-inputs graphviz))))))
+       (modify-inputs (package-native-inputs graphviz)
+         (prepend autoconf
+                  automake
+                  libtool
+                  flex
+                  perl
+                  tcl))))))
 
 (define-public python-graphviz
   (package
@@ -200,14 +194,13 @@ interfaces for other technical domains.")
                           (format #t "test suite not run~%"))
                       #t)))))
     (native-inputs
-     `(("unzip" ,unzip)
-
-       ;; For tests.
-       ("graphviz" ,graphviz)
-       ("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-mock" ,python-pytest-mock)))
+     (list unzip
+           ;; For tests.
+           graphviz
+           python-mock
+           python-pytest
+           python-pytest-cov
+           python-pytest-mock))
     (home-page "https://github.com/xflr6/graphviz")
     (synopsis "Simple Python interface for Graphviz")
     (description
@@ -221,7 +214,7 @@ visualization tool suite.")
 (define-public python-pygraphviz
   (package
     (name "python-pygraphviz")
-    (version "1.5")
+    (version "1.7")
     (source
      (origin
        (method git-fetch)
@@ -231,19 +224,13 @@ visualization tool suite.")
        (file-name (string-append "pygraphviz-" version "-checkout"))
        (sha256
         (base32
-         "1yldym38m8ckgflln83i88143pd9fjj1vfp23sq39fs6np5g0nzp"))))
+         "0jqc3dzy9n0hn3b99zq8jp53901zpjzvvi5ns5mbaxg8kdrb1lfx"))))
     (build-system python-build-system)
-    (arguments
-     `(#:configure-flags
-       (let ((graphviz (assoc-ref %build-inputs "graphviz")))
-         (list (string-append "--include-path=" graphviz "/include")
-               (string-append "--library-path=" graphviz "/lib")))))
     (inputs
-     `(("graphviz" ,graphviz-2.38)))
+     (list graphviz))
     (native-inputs
-     `(("python-nose" ,python-nose)
-       ("python-mock" ,python-mock)
-       ("python-doctest-ignore-unicode" ,python-doctest-ignore-unicode)))
+     (list python-nose python-mock python-pytest
+           python-doctest-ignore-unicode))
     (home-page "https://pygraphviz.github.io")
     (synopsis "Python interface to Graphviz")
     (description "PyGraphviz is a Python interface to the Graphviz graph
@@ -252,13 +239,10 @@ write, and draw graphs using Python to access the Graphviz graph data
 structure and layout algorithms.")
     (license license:bsd-3)))
 
-(define-public python2-pygraphviz
-  (package-with-python2 python-pygraphviz))
-
 (define-public python-uqbar
   (package
     (name "python-uqbar")
-    (version "0.5.1")
+    (version "0.5.6")
     (source
      (origin
        (method git-fetch)
@@ -268,7 +252,7 @@ structure and layout algorithms.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0413nyhd8z8v3lvsgaghhafnyxg90fi1q80j1kbl21gpmpnc9a7n"))))
+         "1ml3x2mf7nlnvrh9lari5yk0sz2mmg39jwsbjxnpzhnw4kcwpdrs"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -277,8 +261,8 @@ structure and layout algorithms.")
            (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"))
+               (("sphinx-rtd-theme >= 0.5.0") "sphinx-rtd-theme >= 0.2.4")
+               (("black") "black >= 19.10b0"))
              #t))
          (replace 'check
            (lambda* (#:key tests? #:allow-other-keys)
@@ -286,17 +270,15 @@ structure and layout algorithms.")
                (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)))
+     (list graphviz
+           python-flake8
+           python-isort
+           python-mypy
+           python-pytest
+           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)))
+     (list python-black python-sphinx python-sphinx-rtd-theme
+           python-unidecode))
     (home-page "https://github.com/josiah-wolf-oberholtzer/uqbar")
     (synopsis "Tools for building documentation with Sphinx, Graphviz and LaTeX")
     (description
@@ -328,10 +310,10 @@ Graphviz and LaTeX.")
        ;; See <http://sourceforge.net/p/gts/bugs/41/>.
        #:tests? #f))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (propagated-inputs
      ;; The gts.pc file has glib-2.0 as required.
-     `(("glib" ,glib)))
+     (list glib))
     (home-page "http://gts.sourceforge.net/")
 
     ;; Note: Despite the name, this is not official GNU software.
@@ -365,17 +347,18 @@ Graphviz and LaTeX.")
                     (assoc-ref inputs "gtk+") "/lib/girepository-1.0"
                     ":" (assoc-ref inputs "pango") "/lib/girepository-1.0"
                     ":" (assoc-ref inputs "gdk-pixbuf") "/lib/girepository-1.0"
-                    ":" (assoc-ref inputs "atk") "/lib/girepository-1.0")))
+                    ":" (assoc-ref inputs "atk") "/lib/girepository-1.0"
+                    ":" (assoc-ref inputs "harfbuzz") "/lib/girepository-1.0")))
                `("PATH" ":" prefix
-                 (,(string-append (assoc-ref inputs "graphviz") "/bin"))))
-             #t)))))
+                 (,(dirname (search-input-file inputs "bin/dot"))))))))))
     (inputs
-     `(("atk" ,atk)
-       ("gdk-pixbuf" ,gdk-pixbuf+svg)
-       ("graphviz" ,graphviz)
-       ("gtk+" ,gtk+)
-       ("python-pycairo" ,python-pycairo)
-       ("python-pygobject" ,python-pygobject)))
+     (list atk
+           librsvg
+           harfbuzz
+           graphviz
+           gtk+
+           python-pycairo
+           python-pygobject))
     (home-page "https://pypi.org/project/xdot/")
     (synopsis "Interactive viewer for graphviz dot files")
     (description "Xdot is an interactive viewer for graphs written in
@@ -387,15 +370,14 @@ can be used either as a standalone application, or as a Python library.")
 (define-public python-pydot
   (package
     (name "python-pydot")
-    (version "1.4.1")
+    (version "1.4.2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pydot" version))
        (sha256
         (base32
-         "00az4cbf8bv447lkk9xi6pjm7gcc7ia33y4pm71fwfwis56rv76l"))
-       (patches (search-patches "python-pydot-regression-test.patch"))))
+         "0z80zwldf7ffkwrpm28hixsiqp3053j7g281xd6phmnbkfiq3014"))))
     (build-system python-build-system)
     (arguments
      '(#:phases
@@ -406,14 +388,14 @@ can be used either as a standalone application, or as a Python library.")
              (when tests?
                (add-installed-pythonpath inputs outputs)
                (with-directory-excursion "test"
-                 (invoke "python" "pydot_unittest.py")))
-             #t)))))
+                 (invoke "python" "pydot_unittest.py"))))))))
     (native-inputs
      ;; For tests.
-     `(("graphviz" ,graphviz)
-       ("python-chardet" ,python-chardet)))
+     (list graphviz python-chardet))
     (propagated-inputs
-     `(("python-pyparsing" ,python-pyparsing)))
+     ;; XXX: Two test failures with 3.0+:
+     ;; https://github.com/pydot/pydot/issues/277
+     (list python-pyparsing-2.4.7))
     (home-page "https://github.com/pydot/pydot")
     (synopsis "Python interface to Graphviz's DOT language")
     (description
@@ -438,10 +420,9 @@ graphs in Graphviz's DOT language, written in pure Python.")
     (arguments
      `(#:python ,python-2))
     (inputs
-     `(("texlive-latex-preview" ,texlive-latex-preview)
-       ("graphviz" ,graphviz)))
+     (list texlive-latex-preview graphviz))
     (propagated-inputs
-     `(("python-pyparsing" ,python2-pyparsing)))
+     (list python2-pyparsing))
     (home-page "https://github.com/kjellmf/dot2tex")
     (synopsis "Graphviz to LaTeX converter")
     (description
@@ -456,3 +437,45 @@ This approach allows:
 @item Using backend specific styles to customize the output
 @end itemize")
     (license license:expat)))
+
+(define-public gprof2dot
+  (package
+    (name "gprof2dot")
+    (version "2021.02.21")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/jrfonseca/gprof2dot")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1jjhsjf5fdi1fkn7mvhnzkh6cynl8gcjrygd3cya5mmda3akhzic"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "python" "tests/test.py")))))))
+    (native-inputs
+     (list graphviz))
+    (home-page "https://github.com/jrfonseca/gprof2dot")
+    (synopsis "Generate a dot graph from the output of several profilers")
+    (description "This package provides a Python script to convert the output
+from many profilers into a dot graph.
+
+It can:
+
+@itemize
+
+@item prune nodes and edges below a certain threshold;
+@item use an heuristic to propagate time inside mutually recursive functions;
+@item use color efficiently to draw attention to hot-spots;
+@item work on any platform where Python and Graphviz is available.
+
+@end itemize")
+    (license license:lgpl3+)))
diff --git a/gnu/packages/groff.scm b/gnu/packages/groff.scm
index fdb8440a39..1d2af7ff07 100644
--- a/gnu/packages/groff.scm
+++ b/gnu/packages/groff.scm
@@ -60,7 +60,7 @@
    ;; own HTML doc, nor does it change its capabilities, so we removed netpbm
    ;; from 'inputs'.
 
-   (inputs `(("ghostscript" ,ghostscript)))
+   (inputs (list ghostscript))
 
    ;; When cross-compiling, this package depends upon a native install of
    ;; itself.
@@ -207,7 +207,7 @@ is usually the formatter of \"man\" documentation pages.")
                  #t))))))
       (native-inputs `(("html-tree" ,perl-html-tree))) ; for test
       (inputs
-       `(("perl" ,perl)))
+       (list perl))
       (home-page "https://daniel.haxx.se/projects/roffit/")
       (synopsis "Convert nroff files to HTML")
       (description
@@ -250,9 +250,7 @@ It is typically used to display man pages on a web site.")
                                          "ruby-nokogiri")))))
              #t)))))
     (inputs
-     `(("ruby-kramdown" ,ruby-kramdown)
-       ("ruby-mustache" ,ruby-mustache)
-       ("ruby-nokogiri" ,ruby-nokogiri)))
+     (list ruby-kramdown ruby-mustache ruby-nokogiri))
     (synopsis
      "Build manuals in HTML and Unix man page format from Markdown")
     (description
diff --git a/gnu/packages/groovy.scm b/gnu/packages/groovy.scm
index c44a17b59e..ecbd0cb0bd 100644
--- a/gnu/packages/groovy.scm
+++ b/gnu/packages/groovy.scm
@@ -102,7 +102,7 @@
        ("java-asm-util" ,java-asm-util-8)
        ("java-classpathx-servletapi" ,java-classpathx-servletapi)
        ("java-commons-cli" ,java-commons-cli)
-       ("java-jansi" ,java-jansi)
+       ("java-jansi" ,java-jansi-1)
        ("java-jline-2" ,java-jline-2)
        ("java-picocli" ,java-picocli)
        ("java-xstream" ,java-xstream)))
@@ -827,7 +827,7 @@ and modify groovy's @dfn{Abstract Syntax Tree} (AST)."))))
                      "java-jansi" "java-jline-2"))
                  ;; antlr.jar is present twice in antlr2.  Symlink doesn't like
                  ;; it, so we symlink it here.
-                 (symlink (string-append (assoc-ref inputs "antlr2") "/lib/antlr.jar")
+                 (symlink (search-input-file inputs "/lib/antlr.jar")
                           (string-append out-lib "/antlr.jar"))
                  (for-each
                    (lambda (tool)
diff --git a/gnu/packages/gsasl.scm b/gnu/packages/gsasl.scm
index d2aba5450d..787bbae2bb 100644
--- a/gnu/packages/gsasl.scm
+++ b/gnu/packages/gsasl.scm
@@ -62,9 +62,7 @@
             (sha256 (base32
                      "1syyvh3k659xf1hdv9pilnnhbbhs6vfapayp4xgdcc8mfgf9v4gz"))))
    (build-system gnu-build-system)
-   (inputs `(("nettle" ,nettle)
-             ("shishi" ,shishi)
-             ("zlib" ,zlib)))
+   (inputs (list nettle shishi zlib))
    (synopsis "Generic Security Service library")
    (description
     "The GNU Generic Security Service provides a free implementation of the
@@ -92,18 +90,14 @@ the underlying security implementation.")
     `(#:configure-flags '("--with-gssapi-impl=mit"
                           "--disable-static")))
    (inputs
-    `(("libgcrypt" ,libgcrypt)
-      ("libidn" ,libidn)
-      ("libntlm" ,libntlm)
-      ("mit-krb5" ,mit-krb5)
-      ("zlib" ,zlib)))
+    (list libgcrypt libidn libntlm mit-krb5 zlib))
    (native-inputs
-    `(;; Needed for cross compiling.
-      ("libgcrypt" ,libgcrypt)))
+    (list ;; Needed for cross compiling.
+          libgcrypt))
    (propagated-inputs
     ;; Propagate GnuTLS because libgnutls.la reads `-lnettle', and Nettle is a
     ;; propagated input of GnuTLS.
-    `(("gnutls" ,gnutls)))
+    (list gnutls))
    (synopsis "Simple Authentication and Security Layer library")
    (description
     "GNU SASL is an implementation of the Simple Authentication and
diff --git a/gnu/packages/gstreamer.scm b/gnu/packages/gstreamer.scm
index 86ff9eb552..8ff8e6242b 100644
--- a/gnu/packages/gstreamer.scm
+++ b/gnu/packages/gstreamer.scm
@@ -149,18 +149,15 @@ and for middleware components.")
                (base32 "1v8gq54n1pg8izn7s15yylwjf8r1l1dmzbm2yvf6pv2fmb4mz41b"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list doxygen perl pkg-config))
     (inputs
-     `(("glu" ,glu)
-       ("libraw1394" ,libraw1394)
-       ("libusb" ,libusb)
-       ("libxv" ,libxv)
-       ("linux-headers" ,linux-libre-headers)
-       ("mesa" ,mesa)
-       ("sdl" ,sdl)
-       ("v4l" ,v4l-utils)))
+     (list glu
+           libraw1394
+           libusb
+           libxv
+           mesa
+           sdl
+           v4l-utils))
     (synopsis "1394-Based Digital Camera Control Library")
     (description "LibDC1394 is a library that provides functionality to control
 any camera that conforms to the 1394-Based Digital Camera Specification written
@@ -252,7 +249,7 @@ and very fast.")
        ("libtool" ,libtool)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("sdl" ,sdl)))
+     (list sdl))
     (native-search-paths
      (list
       (search-path-specification
@@ -311,13 +308,13 @@ applications that want audio visualisation and audio visualisation plugins.")
     (inputs
      `(("alsa-lib" ,alsa-lib)
        ("esound" ,esound)
-       ("gdk-pixbuf" ,gdk-pixbuf+svg)
+       ("librsvg" ,librsvg)
        ("gtk+" ,gtk+-2)
        ("jack" ,jack-2)
        ("libx11" ,libx11)
        ("libxext" ,libxext)))
     (propagated-inputs
-     `(("libvisual" ,libvisual)))
+     (list libvisual))
     (synopsis "Audio visualisation library")
     (description "Libvisual is a library that acts as a middle layer between
 applications that want audio visualisation and audio visualisation plugins.")
@@ -340,20 +337,18 @@ applications that want audio visualisation and audio visualisation plugins.")
         (base32 "141jg70fim276i8k2kyypm84gy89i1k9mm4yf68mfwnybvjw1d6n"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("gettext" ,gettext-minimal)
-       ("gnome-common" ,gnome-common)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)
-       ("tcsh" ,tcsh)                      ; for the tests
-       ("which" ,which)))
+     (list autoconf
+           automake
+           gettext-minimal
+           gnome-common
+           libtool
+           pkg-config
+           tcsh ; for the tests
+           which))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("pcaudiolib" ,pcaudiolib)
-       ("tcp-wrappers" ,tcp-wrappers)))
+     (list alsa-lib pcaudiolib tcp-wrappers))
     (propagated-inputs
-     `(("audiofile" ,audiofile)))
+     (list audiofile))
     (synopsis "Enlightened Sound Daemon")
     (description "The Enlightened Sound Daemon mixes several audio streams for
 playback by a single audio device.  You can also pre-load samples, and play them
@@ -395,7 +390,7 @@ http://www.tux.org/~ricdude/overview.html")
                 "if (error) return 77;"))
              #t)))))
     (native-inputs
-     `(("gtk-doc" ,gtk-doc/stable)))
+     (list gtk-doc/stable))
     (home-page "https://gstreamer.freedesktop.org/modules/orc.html")
     (synopsis "Oil runtime compiler")
     (description
@@ -437,8 +432,7 @@ arrays of data.")
                      (string-append ,name "-" ,version
                                     "/devhelp/books/GStreamer")))))))
     (native-inputs
-     `(("tar" ,tar)
-       ("xz" ,xz)))
+     (list tar xz))
     (home-page "https://gstreamer.freedesktop.org/")
     (synopsis "Developer documentation for GStreamer")
     (description
@@ -497,14 +491,21 @@ the GStreamer multimedia framework.")
                         "")
                        (("tcase_add_test \\(tc_chain, test_stress_reschedule.*")
                         "")))))
-               '()))))
+               '())
+         (add-after 'unpack 'disable-problematic-tests
+           (lambda _
+             ;; Disable the 'pipelines-seek' test, which appears to be load
+             ;; sensitive (see:
+             ;; https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/854).
+             (substitute* "tests/check/meson.build"
+               ((".*'pipelines/seek.c'.*")
+                "")))))))
     (propagated-inputs
      ;; In gstreamer-1.0.pc:
      ;;   Requires: glib-2.0, gobject-2.0
      ;;   Requires.private: gmodule-no-export-2.0 libunwind libdw
-     `(("elfutils" ,elfutils)           ; libdw
-       ("glib" ,glib)
-       ("libunwind" ,libunwind)))
+     (list elfutils ; libdw
+           glib libunwind))
     (native-inputs
      `(("bash-completion" ,bash-completion)
        ("bison" ,bison)
@@ -516,10 +517,9 @@ the GStreamer multimedia framework.")
        ("pkg-config" ,pkg-config)
        ("python-wrapper" ,python-wrapper)))
     (inputs
-     `(("gmp" ,gmp)
-       ("libcap" ,libcap)
-       ;; For tests.
-       ("gsl" ,gsl)))
+     (list gmp libcap
+           ;; For tests.
+           gsl))
     (native-search-paths
      (list (search-path-specification
             (variable "GST_PLUGIN_SYSTEM_PATH")
@@ -597,11 +597,17 @@ This package provides the core library and elements.")
      `(#:phases
        (modify-phases %standard-phases
          ,@%common-gstreamer-phases
+         (add-after 'unpack 'disable-problematic-tests
+           (lambda _
+             (substitute* "tests/check/meson.build"
+               ;; This test causes nondeterministic failures (see:
+               ;; https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/950).
+               ((".*'elements/appsrc.c'.*")
+                ""))))
          (add-before 'configure 'patch
            (lambda _
              (substitute* "tests/check/libs/pbutils.c"
-               (("/bin/sh") (which "sh")))
-             #t))
+               (("/bin/sh") (which "sh")))))
          (add-before 'check 'pre-check
            (lambda _
              ;; Tests require a running X server.
@@ -612,8 +618,7 @@ This package provides the core library and elements.")
              ;; Tests look for $XDG_RUNTIME_DIR.
              (setenv "XDG_RUNTIME_DIR" (getcwd))
              ;; For missing '/etc/machine-id'.
-             (setenv "DBUS_FATAL_WARNINGS" "0")
-             #t)))))
+             (setenv "DBUS_FATAL_WARNINGS" "0"))))))
     (home-page "https://gstreamer.freedesktop.org/")
     (synopsis
      "Plugins for the GStreamer multimedia library")
@@ -668,7 +673,7 @@ for the GStreamer multimedia library.")
        ("bzip2" ,bzip2)
        ("cairo" ,cairo)
        ("flac" ,flac)
-       ("gdk-pixbuf" ,gdk-pixbuf+svg)
+       ("librsvg" ,(librsvg-for-system))
        ("glib" ,glib)
        ("glib-networking" ,glib-networking)
        ("glu" ,glu)
@@ -701,8 +706,7 @@ for the GStreamer multimedia library.")
        ("wavpack" ,wavpack)
        ("zlib" ,zlib)))
     (propagated-inputs
-     `(("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base)))
+     (list gstreamer gst-plugins-base))
     (synopsis "GStreamer plugins and helper libraries")
     (description "GStreamer-Plugins-Good is a collection of plug-ins you'd want
 to have right next to you on the battlefield.  Shooting sharp and making no
@@ -722,10 +726,16 @@ model to base your own plug-in on, here it is.")
                                   name "/" name "-" version ".tar.xz"))
               (sha256
                (base32
-                "13k7mm2wmsbhd04a20v9lj4afpf0w33ambpwlrw8bl7hjhxr4r51"))))
+                "13k7mm2wmsbhd04a20v9lj4afpf0w33ambpwlrw8bl7hjhxr4r51"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  ;; Delete bundled copy of usrsctp.
+                  (delete-file-recursively "ext/sctp/usrsctp")))))
     (build-system meson-build-system)
     (arguments
-     `(#:glib-or-gtk? #t     ; To wrap binaries and/or compile schemas
+     `(#:configure-flags '("-Dsctp-internal-usrsctp=disabled")
+       #:glib-or-gtk? #t     ; To wrap binaries and/or compile schemas
        #:phases
        (modify-phases %standard-phases
          ,@%common-gstreamer-phases
@@ -754,6 +764,11 @@ model to base your own plug-in on, here it is.")
                  ((".*elements/msdkh264enc\\.c.*") "")
                  ((".*elements/svthevcenc\\.c.*") "")
 
+                 ;; The 'elements_shm.test_shm_live' test sometimes times out
+                 ;; (see:
+                 ;; https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/790).
+                 ((".*'elements/shm\\.c'.*") "")
+
                  ;; FIXME: Why is this failing.
                  ((".*elements/dash_mpd\\.c.*") "")
 
@@ -761,7 +776,12 @@ model to base your own plug-in on, here it is.")
                  ;; https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/932
                  ((".*elements/curlhttpsrc\\.c.*") "")
                  ;; https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/1412
-                 ((".*elements/dtls\\.c.*") "")))))
+                 ((".*elements/dtls\\.c.*") ""))
+               (substitute* "tests/check/elements/zxing.c"
+                 ;; zxing 1.2.0 seemingly changed the type representation of
+                 ;; the EAN_13 structure; disable it.
+                 ((".*\"EAN_13\".*")
+                  "")))))
          (add-before 'check 'pre-check
            (lambda _
              ;; Tests require a running X server.
@@ -774,8 +794,7 @@ model to base your own plug-in on, here it is.")
              ;; For missing '/etc/machine-id'.
              (setenv "DBUS_FATAL_WARNINGS" "0"))))))
     (propagated-inputs
-     `(("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base)))
+     (list gstreamer gst-plugins-base))
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("glib:bin" ,glib "bin")         ; for glib-mkenums, etc.
@@ -871,6 +890,7 @@ model to base your own plug-in on, here it is.")
        ("svthevcenc" ,svt-hevc)
        ("tinyalsa" ,tinyalsa)
        ("transcode" ,transcode)
+       ("usrsctp" ,usrsctp)
        ("v4l" ,v4l-utils)
        ("voaacenc", vo-aacenc)
        ("voamrwbenc" ,vo-amrwbenc)
@@ -881,9 +901,8 @@ model to base your own plug-in on, here it is.")
        ("webrtcdsp" ,webrtc-audio-processing)
        ("wildmidi" ,wildmidi)
        ("wpebackend-fdo" ,wpebackend-fdo)
-       ;; ("wpewebkit" ,wpewebkit)
        ("zbar" ,zbar)
-       ("zxing" ,zxing-cpp)))
+       ("zxing" ,zxing-cpp-1.2)))
     (home-page "https://gstreamer.freedesktop.org/")
     (synopsis "Plugins for the GStreamer multimedia library")
     (description
@@ -930,18 +949,17 @@ par compared to the rest.")
        ("python-wrapper" ,python-wrapper)
        ("xorg-server" ,xorg-server-for-tests)))
     (inputs
-     `(("glib" ,glib)
-       ("glib-networking" ,glib-networking)
-       ("liba52" ,liba52)
-       ("libcdio" ,libcdio)
-       ("libdvdread" ,libdvdread)
-       ("libmpeg2" ,libmpeg2)
-       ("libx264" ,libx264)
-       ("opencore-amr" ,opencore-amr)
-       ("orc" ,orc)))
+     (list glib
+           glib-networking
+           liba52
+           libcdio
+           libdvdread
+           libmpeg2
+           libx264
+           opencore-amr
+           orc))
     (propagated-inputs
-     `(("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base)))
+     (list gstreamer gst-plugins-base))
     (synopsis "GStreamer plugins and helper libraries")
     (description "Gst-Plugins-Ugly are the ones that might have a patent noose
 around their neck, or a lock-up license, or any other problem that makes you
@@ -964,15 +982,11 @@ think twice about shipping them.")
         (base32 "0j55jgk9sbhinfx2gsg21q609x6yzrixrn5xxlxd378fj6500bl2"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("perl" ,perl)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python-wrapper)
-       ("ruby" ,ruby)))
+     (list perl pkg-config python-wrapper ruby))
     (inputs
-     `(("ffmpeg" ,ffmpeg)))
+     (list ffmpeg))
     (propagated-inputs
-     `(("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base)))
+     (list gstreamer gst-plugins-base))
     (synopsis "GStreamer plugins and helper libraries")
     (description "Gst-Libav contains a GStreamer plugin for using the encoders,
 decoders, muxers, and demuxers provided by FFmpeg.")
@@ -999,13 +1013,9 @@ decoders, muxers, and demuxers provided by FFmpeg.")
        #:phases (modify-phases %standard-phases
                   ,@%common-gstreamer-phases)))
     (propagated-inputs
-     `(("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base)))
+     (list gstreamer gst-plugins-base))
     (inputs
-     `(("glib" ,glib)
-       ("glib-networking" ,glib-networking)
-       ("gtk+" ,gtk+)
-       ("libxml2" ,libxml2)))
+     (list glib glib-networking gtk+ libxml2))
     (native-inputs
      `(("flex" ,flex)
        ("gobject-introspection" ,gobject-introspection)
@@ -1044,13 +1054,6 @@ given, also pass them to the build system instead of the ones used by PKG."
                     (("'auto'") "'disabled'"))
                   #t)))))))))
 
-(define-public gst-transcoder
-  (deprecated-package
-   "gst-transcoder"
-   (gst-plugins/selection gst-plugins-bad
-                          #:plugins '("transcoder")
-                          #:configure-flags '("-Dintrospection=enabled"))))
-
 (define-public python-gst
   (package
     (name "python-gst")
@@ -1075,11 +1078,9 @@ given, also pass them to the build system instead of the ones used by PKG."
               "-Dpygi-overrides-dir="
               (python:site-packages %build-inputs %outputs) "gi/overrides"))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python" ,python)))
+     (list pkg-config python))
     (propagated-inputs
-     `(("gst-plugins-base" ,gst-plugins-base)
-       ("python-pygobject" ,python-pygobject)))
+     (list gst-plugins-base python-pygobject))
     (home-page "https://gstreamer.freedesktop.org/")
     (synopsis "GStreamer GObject Introspection overrides for Python")
     (description
@@ -1100,12 +1101,9 @@ be used by Python applications using GStreamer.")
                 "0zaa117n4wkya9p903vkj8hj58lmdb66pxsdx5wwcv7nffbp5d67"))))
     (build-system gnu-build-system)
     (inputs
-     `(("gtk+" ,gtk+-2)
-       ("ncurses" ,ncurses)
-       ("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base)))
+     (list gtk+-2 ncurses gstreamer gst-plugins-base))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://space.twc.de/~stefan/gst123.php")
     (synopsis "Flexible command line media player based on gstreamer")
     (description "The program gst123 is designed to be a more flexible command
diff --git a/gnu/packages/gtk.scm b/gnu/packages/gtk.scm
index 905dd9f1d7..ced9d621aa 100644
--- a/gnu/packages/gtk.scm
+++ b/gnu/packages/gtk.scm
@@ -27,6 +27,8 @@
 ;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2021 Simon Streit <simon@netpanic.org>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
+;;; Copyright © 2021 Wamm K. D. <jaft.r@outlook.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -45,11 +47,13 @@
 
 (define-module (gnu packages gtk)
   #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix gexp)
   #:use-module (guix utils)
   #: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 cmake)
   #:use-module (guix build-system glib-or-gtk)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system meson)
@@ -60,6 +64,9 @@
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages bash)
+  #:use-module (gnu packages boost)
+  #:use-module (gnu packages build-tools)
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
@@ -74,21 +81,30 @@
   #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
+  #:use-module (gnu packages graphviz)
   #:use-module (gnu packages icu4c)
   #:use-module (gnu packages image)
+  #:use-module (gnu packages iso-codes)
   #:use-module (gnu packages libffi)
   #:use-module (gnu packages linux)
+  #:use-module (gnu packages m4)
+  #:use-module (gnu packages man)
   #:use-module (gnu packages pdf)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages perl-check)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages pretty-print)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-xyz)
+  #:use-module (gnu packages gstreamer)
   #:use-module (gnu packages guile)
   #:use-module (gnu packages guile-xyz)
   #:use-module (gnu packages cups)
   #:use-module (gnu packages version-control)
+  #:use-module (gnu packages video)
+  #:use-module (gnu packages vulkan)
+  #:use-module (gnu packages web)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
   #:use-module (gnu packages xdisorg)
@@ -99,86 +115,110 @@
 
 (define-public atk
   (package
-   (name "atk")
-   (version "2.34.1")
-   (source (origin
-            (method url-fetch)
-            (uri (string-append "mirror://gnome/sources/" name "/"
-                                (version-major+minor version)  "/"
-                                name "-" version ".tar.xz"))
-            (sha256
-             (base32
-              "1jwp16r6p5z66k4b2v8zlzhyshhwlmyi27ippkrgqr8jsary7w6l"))))
-   (build-system meson-build-system)
-   (propagated-inputs `(("glib" ,glib))) ; required by atk.pc
-   (native-inputs
-    `(("pkg-config" ,pkg-config)
-      ("gettext" ,gettext-minimal)
-      ("glib" ,glib "bin")                               ; glib-mkenums, etc.
-      ("gobject-introspection" ,gobject-introspection))) ; g-ir-compiler, etc.
-   (synopsis "GNOME accessibility toolkit")
-   (description
-    "ATK provides the set of accessibility interfaces that are implemented
+    (name "atk")
+    (version "2.36.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnome/sources/" name "/"
+                                  (version-major+minor version)  "/"
+                                  name "-" version ".tar.xz"))
+              (sha256
+               (base32
+                "1217cmmykjgkkim0zr1lv5j13733m4w5vipmy4ivw0ll6rz28xpv"))))
+    (build-system meson-build-system)
+    (arguments
+     `(#:glib-or-gtk? #t ; To wrap binaries and/or compile schemas
+       ,@(if (%current-target-system)
+             `(#:configure-flags
+               ;; introspection requires running binaries for the host system
+               ;; on the build system.
+               '("-Dintrospection=false"))
+             '())))
+    (propagated-inputs (list glib)) ; required by atk.pc
+    (native-inputs
+     `(("gettext" ,gettext-minimal)
+       ("glib" ,glib "bin")             ; glib-mkenums, etc.
+       ("gobject-introspection" ,gobject-introspection) ; g-ir-compiler, etc.
+       ("pkg-config" ,pkg-config)))
+    (synopsis "GNOME accessibility toolkit")
+    (description
+     "ATK provides the set of accessibility interfaces that are implemented
 by other toolkits and applications.  Using the ATK interfaces, accessibility
 tools have full access to view and control running applications.")
-   (license license:lgpl2.0+)
-   (home-page "https://developer.gnome.org/atk/")))
+    (license license:lgpl2.1+)
+    (home-page "https://wiki.gnome.org/Accessibility")))
 
 (define-public cairo
   (package
-   (name "cairo")
-   (version "1.16.0")
-   (source (origin
-            (method url-fetch)
-            (uri (string-append "https://cairographics.org/releases/cairo-"
-                                version ".tar.xz"))
-            (patches (search-patches "cairo-CVE-2018-19876.patch"
-                                     "cairo-CVE-2020-35492.patch"))
-            (sha256
-             (base32
-              "0c930mk5xr2bshbdljv005j3j8zr47gqmkry3q6qgvqky6rjjysy"))))
-   (build-system gnu-build-system)
-   (propagated-inputs
-    `(("fontconfig" ,fontconfig)
-      ("freetype" ,freetype)
-      ("glib" ,glib)
-      ("libpng" ,libpng)
-      ("libx11" ,libx11)
-      ("libxext" ,libxext)
-      ("libxrender" ,libxrender)
-      ("pixman" ,pixman)))
-   (inputs
-    `(("ghostscript" ,ghostscript)
-      ("libspectre" ,libspectre)
-      ("poppler" ,poppler)
-      ("xorgproto" ,xorgproto)
-      ("zlib" ,zlib)))
-   (native-inputs
-     `(("pkg-config" ,pkg-config)
-      ("python" ,python-wrapper)))
+    (name "cairo")
+    (version "1.16.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri
+        (string-append "https://cairographics.org/releases/cairo-"
+                       version ".tar.xz"))
+       (sha256
+        (base32 "0c930mk5xr2bshbdljv005j3j8zr47gqmkry3q6qgvqky6rjjysy"))
+       (patches (search-patches
+		 "cairo-CVE-2018-19876.patch"
+		 "cairo-CVE-2020-35492.patch"))))
+    (build-system glib-or-gtk-build-system)
+    (outputs '("out" "doc"))
     (arguments
-     `(#:tests? #f  ; see http://lists.gnu.org/archive/html/bug-guix/2013-06/msg00085.html
-       #:configure-flags '("--enable-tee"      ;needed for GNU Icecat
-                           "--enable-xml"      ;for cairo-xml support
-                           "--disable-static")))
-   (synopsis "2D graphics library")
-   (description
-    "Cairo is a 2D graphics library with support for multiple output devices.
-Currently supported output targets include the X Window System (via both
-Xlib and XCB), Quartz, Win32, image buffers, PostScript, PDF, and SVG file
-output.  Experimental backends include OpenGL, BeOS, OS/2, and DirectFB.
-
-Cairo is designed to produce consistent output on all output media while
-taking advantage of display hardware acceleration when available
-eg. through the X Render Extension).
-
-The cairo API provides operations similar to the drawing operators of
-PostScript and PDF.  Operations in cairo including stroking and filling cubic
-Bézier splines, transforming and compositing translucent images, and
-antialiased text rendering.  All drawing operations can be transformed by any
-affine transformation (scale, rotation, shear, etc.).")
-   (license license:lgpl2.1) ; or Mozilla Public License 1.1
-   (home-page "https://cairographics.org/")))
+     `(#:tests? #f ; see http://lists.gnu.org/archive/html/bug-guix/2013-06/msg00085.html
+       #:configure-flags
+       (list
+        "--disable-static"
+        ;; XXX: To be enabled.
+        ;; "--enable-gallium=yes"
+        ;; "--enable-gl=yes"
+        ;; " --enable-glesv2=yes"
+        ;; "--enable-glesv3=yes"
+        ;; "--enable-cogl=yes"
+        ;; "--enable-directfb=yes"
+        ;; "--enable-vg=yes"
+        "--enable-tee=yes"              ;needed for GNU IceCat
+        "--enable-xml=yes"              ;for cairo-xml support
+        (string-append "--with-html-dir="
+                       (assoc-ref %outputs "doc")
+                       "/share/gtk-doc/html"))))
+    (native-inputs
+     `(("gobject-introspection" ,gobject-introspection)
+       ("pkg-config" ,pkg-config)
+       ("python" ,python-wrapper)))
+    (inputs
+     `(("bash-minimal" ,bash-minimal)
+       ("drm" ,libdrm)
+       ("ghostscript" ,ghostscript)
+       ("libspectre" ,libspectre)
+       ("poppler" ,poppler)))
+    (propagated-inputs
+     `( ;; ("cogl" ,cogl)
+       ;; ("directfb" ,directfb)
+       ("fontconfig" ,fontconfig)
+       ("freetype" ,freetype)
+       ("glib" ,glib)
+       ;; ("gtk+" ,gtk+)
+       ("libpng" ,libpng)
+       ;; ("librsvg" ,librsvg)
+       ;; ("opengl" ,mesa)
+       ("pixman" ,pixman)
+       ("x11" ,libx11)
+       ("xcb" ,libxcb)
+       ("xext" ,libxext)
+       ("xrender" ,libxrender)))
+    (synopsis "Multi-platform 2D graphics library")
+    (description "Cairo is a 2D graphics library with support for multiple output
+devices.  Currently supported output targets include the X Window System (via
+both Xlib and XCB), Quartz, Win32, image buffers, PostScript, PDF, and SVG file
+output.  Experimental backends include OpenGL, BeOS, OS/2, and DirectFB.")
+    (home-page "https://cairographics.org/")
+    (license
+     ;; This project is dual-licensed.
+     (list
+      license:lgpl2.1+
+      license:mpl1.1))))
 
 (define-public cairo-sans-poppler
   ;; Variant used to break the dependency cycle between Poppler and Cairo.
@@ -201,25 +241,23 @@ affine transformation (scale, rotation, shear, etc.).")
 (define-public harfbuzz
   (package
    (name "harfbuzz")
-   (version "2.6.4")
+   (version "2.8.2")
    (source (origin
              (method url-fetch)
-             (uri (string-append "https://www.freedesktop.org/software/"
-                                 "harfbuzz/release/harfbuzz-"
+             (uri (string-append "https://github.com/harfbuzz/harfbuzz"
+                                 "/releases/download/" version "/harfbuzz-"
                                  version ".tar.xz"))
              (sha256
               (base32
-               "04iwq13w6zkdhljmsxrzgg4fyh04qnwfn57rgrl9kmijc7cvh4wl"))))
+               "1rvv86wpm3y04fqns1655268rhvhvms469837709v2z2bhwn316m"))))
    (build-system gnu-build-system)
    (outputs '("out"
               "bin")) ; 160K, only hb-view depend on cairo
    (inputs
-    `(("cairo" ,cairo)))
+    (list cairo))
    (propagated-inputs
     ;; There are all in the Requires or Requires.private field of '.pc'.
-    `(("glib" ,glib)
-      ("graphite2" ,graphite2)
-      ("icu4c" ,icu4c)))
+    (list glib graphite2 icu4c))
    (native-inputs
     `(("glib:bin" ,glib "bin")          ;for glib-mkenums
       ("gobject-introspection" ,gobject-introspection)
@@ -238,6 +276,19 @@ affine transformation (scale, rotation, shear, etc.).")
                        "See 'COPYING' in the distribution."))
    (home-page "https://www.freedesktop.org/wiki/Software/HarfBuzz/")))
 
+(define-public harfbuzz-3.0
+  (package
+    (inherit harfbuzz)
+    (version "3.0.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/harfbuzz/harfbuzz"
+                                  "/releases/download/" version
+                                  "/harfbuzz-" version ".tar.xz"))
+              (sha256
+               (base32
+                "1ngk8vn06rryx3s4v5pbl91bw1j1pd4431n77rw3j5a533hhwsq3"))))))
+
 (define-public libdatrie
   (package
     (name "libdatrie")
@@ -253,14 +304,15 @@ affine transformation (scale, rotation, shear, etc.).")
     (build-system gnu-build-system)
     (outputs '("out" "doc"))
     (arguments
-     `(#:configure-flags
-       (list
-        (string-append "--with-html-docdir="
-                       (assoc-ref %outputs "doc")
-                       "/share/doc/datrie/html"))))
+     (list #:configure-flags
+           #~(list (string-append "--with-html-docdir=" #$output:doc
+                                  "/share/doc/datrie/html"))
+
+           ;; Several tests refer to the 'test.tri' file, leading to race
+           ;; conditions when running tests in parallel.
+           #:parallel-tests? #f))
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("pkg-config" ,pkg-config)))
+     (list doxygen pkg-config))
     (synopsis "Double-Array Trie Library")
     (description "Libdatrie is an implementation of double-array structure for
 representing trie.  Trie is a kind of digital search tree.")
@@ -288,7 +340,8 @@ representing trie.  Trie is a kind of digital search tree.")
                        (assoc-ref %outputs "doc")
                        "/share/doc/libthai/html"))))
     (native-inputs
-     `(("doxygen" ,doxygen)
+     `(("datrie" ,libdatrie)
+       ("doxygen" ,doxygen)
        ("pkg-config" ,pkg-config)))
     (propagated-inputs
      `(("datrie" ,libdatrie)))
@@ -301,54 +354,60 @@ applications.")
 
 (define-public pango
   (package
-   (name "pango")
-   (version "1.44.7")
-   (source (origin
-            (method url-fetch)
-            (uri (string-append "mirror://gnome/sources/pango/"
-                                (version-major+minor version) "/"
-                                name "-" version ".tar.xz"))
-            (patches (search-patches "pango-skip-libthai-test.patch"))
-            (sha256
-             (base32
-              "07qvxa2sk90chp1l12han6vxvy098mc37sdqcznyywyv2g6bd9b6"))))
-   (build-system meson-build-system)
-   (arguments
-    '(#:phases (modify-phases %standard-phases
-                 (add-after 'unpack 'disable-cantarell-tests
-                   (lambda _
-                     (substitute* "tests/meson.build"
-                       ;; XXX FIXME: These tests require "font-cantarell", but
-                       ;; adding it here would introduce a circular dependency.
-                       (("\\[ 'test-harfbuzz'.*") "")
-                       (("\\[ 'test-itemize'.*") "")
-                       (("\\[ 'test-layout'.*") ""))
-                     #t)))))
-   (propagated-inputs
-    ;; These are all in Requires or Requires.private of the '.pc' files.
-    `(("cairo" ,cairo)
-      ("fribidi" ,fribidi)
-      ("fontconfig" ,fontconfig)
-      ("freetype" ,freetype)
-      ("glib" ,glib)
-      ("harfbuzz" ,harfbuzz)
-
-      ;; Some packages, such as Openbox, expect Pango to be built with the
-      ;; optional libxft support.
-      ("libxft" ,libxft)))
-   (inputs
-    `(("zlib" ,zlib)))
-   (native-inputs
-    `(("pkg-config" ,pkg-config)
-      ("glib" ,glib "bin")                               ; glib-mkenums, etc.
-      ("gobject-introspection" ,gobject-introspection))) ; g-ir-compiler, etc.
-   (synopsis "GNOME text and font handling library")
-   (description
-    "Pango is the core text and font handling library used in GNOME
-applications.  It has extensive support for the different writing systems
-used throughout the world.")
-   (license license:lgpl2.0+)
-   (home-page "https://developer.gnome.org/pango/")))
+    (name "pango")
+    (version "1.48.10")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnome/sources/pango/"
+                                  (version-major+minor version) "/"
+                                  name "-" version ".tar.xz"))
+              (patches (search-patches "pango-skip-libthai-test.patch"))
+              (sha256
+               (base32
+                "166wxhsjb6hb0dk7wkkdcmpvasl9n0a0aa64mdgagzfdidwzbq91"))))
+    (build-system meson-build-system)
+    (arguments
+     '(#:glib-or-gtk? #t             ; To wrap binaries and/or compile schemas
+       #:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'disable-cantarell-tests
+                    (lambda _
+                      (substitute* "tests/meson.build"
+                        ;; XXX FIXME: These tests require "font-abattis-cantarell", but
+                        ;; adding it here would introduce a circular dependency.
+                        (("\\[ 'test-layout'.*") "")
+                        (("\\[ 'test-itemize'.*") "")
+                        (("\\[ 'test-font'.*") "")
+                        (("\\[ 'test-harfbuzz'.*") "")))))))
+    (propagated-inputs
+     ;; These are all in Requires or Requires.private of the '.pc' files.
+     `(("cairo" ,cairo)
+       ("fontconfig" ,fontconfig)
+       ("freetype" ,freetype)
+       ("fribidi" ,fribidi)
+       ("glib" ,glib)
+       ("harfbuzz" ,harfbuzz)
+       ("libthai" ,libthai)
+       ;; Some packages, such as Openbox, expect Pango to be built with the
+       ;; optional libxft support.
+       ("libxft" ,libxft)
+       ("libxrender" ,libxrender)))
+    (inputs
+     (list bash-minimal zlib))
+    (native-inputs
+     `(("glib" ,glib "bin")                             ; glib-mkenums, etc.
+       ("gobject-introspection" ,gobject-introspection) ; g-ir-compiler, etc.
+       ("help2man" ,help2man)
+       ("perl" ,perl)
+       ("pkg-config" ,pkg-config)
+       ("python" ,python-wrapper)))
+    (synopsis "Text and font handling library")
+    (description "Pango is a library for laying out and rendering of text, with
+an emphasis on internationalization.  Pango can be used anywhere that text
+layout is needed, though most of the work on Pango so far has been done in the
+context of the GTK+ widget toolkit.  Pango forms the core of text and font
+handling for GTK+-2.x.")
+    (home-page "https://pango.gnome.org/")
+    (license license:lgpl2.0+)))
 
 (define-public pango-1.42
   (package
@@ -368,10 +427,11 @@ used throughout the world.")
                  (add-after 'configure 'disable-layout-test
                    (lambda _
                      ;; This test requires that fontconfig uses bitmap fonts
-                     ;; such as "gs-fonts"; however providing such a package
-                     ;; alone is not enough, as the requirement comes from
-                     ;; deeper in the font stack.  Since this version of Pango
-                     ;; is only used for librsvg, simply disable the test.
+                     ;; such as "font-ghostscript"; however providing such a
+                     ;; package alone is not enough, as the requirement comes
+                     ;; from deeper in the font stack.  Since this version of
+                     ;; Pango is only used for librsvg, simply disable the
+                     ;; test.
                      (substitute* "tests/Makefile"
                        (("test-layout\\$\\(EXEEXT\\)") ""))
                      #t)))))))
@@ -390,11 +450,9 @@ used throughout the world.")
                "0ip0ziys6mrqqmz4n71ays0kf5cs1xflj1gfpvs4fgy2nsrr482m"))))
     (build-system gnu-build-system)
     (inputs
-     `(("glib" ,glib)
-       ("pango" ,pango-1.42)))
+     (list glib pango-1.42))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (home-page "https://developer.gnome.org/pango")
     (synopsis "Obsolete pango functions")
     (description  "Pangox was a X backend to pango.  It is now obsolete and no
@@ -429,8 +487,8 @@ functions which were removed.")
      `(("gtk" ,gtk+-2)
        ("gtkmm" ,gtkmm-2)))
     (native-inputs
-     `(("glib" ,glib "bin")             ; for glib-genmarshal, etc.
-       ("pkg-config" ,pkg-config)))
+     (list `(,glib "bin") ; for glib-genmarshal, etc.
+           pkg-config))
     (home-page "https://drobilla.net/software/ganv/")
     (synopsis "GTK+ widget for interactive graph-like environments")
     (description
@@ -456,12 +514,12 @@ diagrams.")
                   "gtksourceview-2-add-default-directory.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("glib" ,glib "bin")             ; for glib-genmarshal, etc.
-       ("pkg-config" ,pkg-config)
-       ;; For testing.
-       ("xorg-server" ,xorg-server-for-tests)
-       ("shared-mime-info" ,shared-mime-info)))
+     (list intltool
+           `(,glib "bin") ; for glib-genmarshal, etc.
+           pkg-config
+           ;; For testing.
+           xorg-server-for-tests
+           shared-mime-info))
     (propagated-inputs
      ;; As per the pkg-config file.
      `(("gtk" ,gtk+-2)
@@ -535,9 +593,7 @@ printing and other features typical of a source code editor.")
       ("shared-mime-info" ,shared-mime-info)))
    (propagated-inputs
     ;; gtksourceview-3.0.pc refers to all these.
-    `(("glib" ,glib)
-      ("gtk+" ,gtk+)
-      ("libxml2" ,libxml2)))
+    (list glib gtk+ libxml2))
    (home-page "https://wiki.gnome.org/Projects/GtkSourceView")
    (synopsis "GNOME source code widget")
    (description "GtkSourceView is a text widget that extends the standard
@@ -561,43 +617,42 @@ highlighting and other features typical of a source code editor.")
 (define-public gdk-pixbuf
   (package
     (name "gdk-pixbuf")
-    (version "2.40.0")
+    (version "2.42.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
                                   (version-major+minor version)  "/"
                                   name "-" version ".tar.xz"))
-              (patches (search-patches "gdk-pixbuf-CVE-2020-29385.patch"))
               (sha256
                (base32
-                "1rnlx9yfw970maxi2x6niaxmih5la11q1ilr7gzshz2kk585k0hm"))))
+                "0k9f9177qxaryaxprwrhqnv5p2gdq4a8i6y05gm98qa8izc5v77y"))))
     (build-system meson-build-system)
     (outputs '("out" "debug"))
     (arguments
-     `(#:configure-flags '("-Dinstalled_tests=false")
-       #:modules ((guix build meson-build-system)
-                  (guix build utils)
-                  (srfi srfi-1))
+     `(#:glib-or-gtk? #t             ; To wrap binaries and/or compile schemas
+       #:configure-flags '("-Dinstalled_tests=false")
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'disable-failing-tests
+         (add-after 'unpack 'patch-docbook
+           (lambda* (#:key native-inputs inputs #:allow-other-keys)
+             (with-directory-excursion "docs"
+               (substitute* "meson.build"
+                 (("http://docbook.sourceforge.net/release/xsl/current/")
+                  (string-append (assoc-ref ,(if (%current-target-system)
+                                                 '(or native-inputs inputs)
+                                                 'inputs) "docbook-xsl")
+                                 "/xml/xsl/docbook-xsl-1.79.2/")))
+               (substitute* (find-files "." "\\.xml$")
+                 (("http://www.oasis-open.org/docbook/xml/4\\.3/")
+                  (string-append (assoc-ref ,(if (%current-target-system)
+                                                 '(or native-inputs inputs)
+                                                 'inputs) "docbook-xml")
+                                 "/xml/dtd/docbook/"))))))
+         (add-before 'configure 'disable-failing-tests
            (lambda _
              (substitute* "tests/meson.build"
-               ;; XXX FIXME: This test fails on armhf machines with:
-               ;; SKIP Not enough memory to load bitmap image
-               ;; ERROR: cve-2015-4491 - too few tests run (expected 4, got 2)
-               ((".*'cve-2015-4491'.*") "")
-               ;; XXX FIXME: This test fails with:
-               ;; ERROR:pixbuf-jpeg.c:74:test_type9_rotation_exif_tag:
-               ;; assertion failed (error == NULL): Data differ
-               ;; (gdk-pixbuf-error-quark, 0)
-               ((".*'pixbuf-jpeg'.*") ""))))
-         (replace 'shrink-runpath
-           ;; Workaround until core-updates is merged (this is fixed in commit
-           ;; ca080b3efb).
-           (lambda* (#:key outputs #:allow-other-keys #:rest args)
-             (apply (assoc-ref %standard-phases 'shrink-runpath)
-                    `(,@args #:outputs ,(alist-delete "debug" outputs)))))
+               (("\\[ 'pixbuf-fail', \\['conform', 'slow'\\], \\],")
+                ""))))
          ;; The slow tests take longer than the specified timeout.
          ,@(if (any (cute string=? <> (%current-system))
                     '("armhf-linux" "aarch64-linux"))
@@ -606,337 +661,584 @@ highlighting and other features typical of a source code editor.")
                      (invoke "meson" "test" "--timeout-multiplier" "5"))))
                '()))))
     (propagated-inputs
-     `( ;; Required by gdk-pixbuf-2.0.pc
-       ("glib" ,glib)
-       ("libpng" ,libpng)
-       ;; Used for testing and required at runtime.
-       ("shared-mime-info" ,shared-mime-info)))
+     (list ;; Required by gdk-pixbuf-2.0.pc
+           glib
+           ;; Required by gdk-pixbuf-xlib-2.0.pc
+           libx11
+           ;; Used for testing and required at runtime.
+           shared-mime-info))
     (inputs
-     `(("libjpeg" ,libjpeg-turbo)
-       ("libtiff" ,libtiff)
-       ("libx11"  ,libx11)))
+     `(,@(if (%current-target-system)
+             `(("bash-minimal" ,bash-minimal)) ; for glib-or-gtk-wrap
+             '())
+       ("libjpeg" ,libjpeg-turbo)
+       ("libpng"  ,libpng)
+       ("libtiff" ,libtiff)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
+     `(("docbook-xml" ,docbook-xml-4.3)
+       ("docbook-xsl" ,docbook-xsl)
        ("gettext" ,gettext-minimal)
-       ("glib" ,glib "bin")                               ; glib-mkenums, etc.
-       ("gobject-introspection" ,gobject-introspection))) ; g-ir-compiler, etc.
-    (synopsis "GNOME image loading and manipulation library")
-    (description
-     "GdkPixbuf is a library for image loading and manipulation developed
-in the GNOME project.")
-    (license license:lgpl2.0+)
-    (home-page "https://developer.gnome.org/gdk-pixbuf/")))
-
-;; To build gdk-pixbuf with SVG support, we need librsvg, and librsvg depends
-;; on gdk-pixbuf, so this new variable.  Also, librsvg adds 90MiB to the
-;; closure size.
-(define-public gdk-pixbuf+svg
-  (package/inherit gdk-pixbuf
-    (name "gdk-pixbuf+svg")
-    (inputs
-     `(("librsvg" ,librsvg)
-       ,@(package-inputs gdk-pixbuf)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments gdk-pixbuf)
-       ((#:phases phases)
-        `(modify-phases ,phases
-           (add-after 'install 'register-svg-loader
-             (lambda* (#:key inputs outputs #:allow-other-keys)
-               (let* ((out     (assoc-ref outputs "out"))
-                      (librsvg (assoc-ref inputs "librsvg"))
-                      (loaders
-                       (append
-                        (find-files out "^libpixbufloader-.*\\.so$")
-                        (find-files librsvg "^libpixbufloader-.*\\.so$")))
-                      (gdk-pixbuf-query-loaders
-                       (string-append out "/bin/gdk-pixbuf-query-loaders")))
-                 (apply invoke gdk-pixbuf-query-loaders
-                        "--update-cache" loaders))))))))
-    (synopsis
-     "GNOME image loading and manipulation library, with SVG support")))
+       ("glib" ,glib "bin")                             ; glib-mkenums, etc.
+       ("gobject-introspection" ,gobject-introspection) ; g-ir-compiler, etc.
+       ("perl" ,perl)
+       ("pkg-config" ,pkg-config)
+       ("xsltproc" ,libxslt)))
+    (native-search-paths
+     ;; This file is produced by the gdk-pixbuf-loaders-cache-file
+     ;; profile hook.
+     (list (search-path-specification
+            (variable "GDK_PIXBUF_MODULE_FILE")
+            (files (list %gdk-pixbuf-loaders-cache-file))
+            (separator #f)              ;single valued
+            (file-type 'regular))))
+    (synopsis "Image loading library")
+    (description "GdkPixbuf is a library that loads image data in various
+formats and stores it as linear buffers in memory.  The buffers can then be
+scaled, composited, modified, saved, or rendered.")
+    (home-page "https://wiki.gnome.org/Projects/GdkPixbuf")
+    (license license:lgpl2.1+)))
 
-(define-public at-spi2-core
-  (package
-   (name "at-spi2-core")
-   (version "2.34.0")
-   (source (origin
-            (method url-fetch)
-            (uri (string-append "mirror://gnome/sources/" name "/"
-                                (version-major+minor version)  "/"
-                                name "-" version ".tar.xz"))
-            (sha256
-             (base32
-              "1ihixwhh3c16q6253qj9gf69741rb2pi51822a4rylsfcyywsafn"))))
-   (build-system meson-build-system)
-   (outputs '("out" "doc"))
-   (arguments
-    '(#:configure-flags
-      (list "-Ddocs=true")
-      #:phases
-      (modify-phases %standard-phases
-        (add-after 'unpack 'set-documentation-path
-          (lambda* (#:key outputs #:allow-other-keys)
-            ;; Ensure that the cross-references point to the "doc" output.
-            (substitute* "doc/libatspi/meson.build"
-              (("docpath =.*")
-               (string-append "docpath = '" (assoc-ref outputs "doc") "/share/gtk-doc/html'\n")))
-            #t))
-        (add-before 'install 'prepare-doc-directory
-          (lambda* (#:key outputs #:allow-other-keys)
-            (mkdir-p (string-append (assoc-ref outputs "doc") "/share"))
-            #t))
-        (add-after 'install 'move-documentation
-          (lambda* (#:key outputs #:allow-other-keys)
-            (let ((out (assoc-ref outputs "out"))
-                  (doc (assoc-ref outputs "doc")))
-              (copy-recursively
-               (string-append out "/share/gtk-doc")
-               (string-append doc "/share/gtk-doc"))
-              (delete-file-recursively
-               (string-append out "/share/gtk-doc")))
-            #t))
-        (add-after 'install 'check
-          (lambda _
-            (setenv "HOME" (getenv "TMPDIR")) ; xfconfd requires a writable HOME
-            ;; Run test-suite under a dbus session.
-            (setenv "XDG_DATA_DIRS"     ; for finding org.xfce.Xfconf.service
-                    (string-append %output "/share"))
-            ;; Don't fail on missing  '/etc/machine-id'.
-            (setenv "DBUS_FATAL_WARNINGS" "0") ;
-            (invoke "dbus-launch" "ninja" "test")))
-         (delete 'check))))
-   (propagated-inputs
-    ;; atspi-2.pc refers to all these.
-    `(("dbus" ,dbus)
-      ("glib" ,glib)
-      ("libxi" ,libxi)
-      ("libxtst" ,libxtst)))
-   (native-inputs
-    `(("gettext" ,gettext-minimal)
-      ("gobject-introspection" ,gobject-introspection)
-      ("gtk-doc" ,gtk-doc/stable)
-      ("glib" ,glib "bin")
-      ("pkg-config" ,pkg-config)))
-   (synopsis "Assistive Technology Service Provider Interface, core components")
-   (description
-    "The Assistive Technology Service Provider Interface, core components,
+;;; A minimal variant used to prevent a cycle with Inkscape.
+(define-public at-spi2-core-minimal
+  (hidden-package
+   (package
+     (name "at-spi2-core")
+     (version "2.40.0")
+     (source (origin
+               (method url-fetch)
+               (uri (string-append "mirror://gnome/sources/" name "/"
+                                   (version-major+minor version)  "/"
+                                   name "-" version ".tar.xz"))
+               (sha256
+                (base32
+                 "0a9l6cfxynjn6jcp29d72i75xbkrzs1l5kmqcwmfal801b9sg5j1"))))
+     (build-system meson-build-system)
+     (arguments
+      '(#:glib-or-gtk? #t    ; To wrap binaries and/or compile schemas
+        #:phases
+        (modify-phases %standard-phases
+          (add-after 'install 'check
+            (lambda _
+              (setenv "HOME" (getenv "TMPDIR")) ; xfconfd requires a writable HOME
+              ;; Run test-suite under a dbus session.
+              (setenv "XDG_DATA_DIRS" ; for finding org.xfce.Xfconf.service
+                      (string-append %output "/share"))
+              ;; Don't fail on missing  '/etc/machine-id'.
+              (setenv "DBUS_FATAL_WARNINGS" "0") ;
+              (invoke "dbus-launch" "ninja" "test")))
+          (delete 'check))))
+     (inputs
+      (list bash-minimal))
+     (propagated-inputs
+      ;; atspi-2.pc refers to all these.
+      (list dbus glib libx11 libxi libxtst))
+     (native-inputs
+      `(("gettext" ,gettext-minimal)
+        ("glib" ,glib "bin")
+        ("gobject-introspection" ,gobject-introspection)
+        ("pkg-config" ,pkg-config)
+        ("python" ,python-wrapper)))
+     (synopsis "Assistive Technology Service Provider Interface, core components")
+     (description
+      "The Assistive Technology Service Provider Interface, core components,
 is part of the GNOME accessibility project.")
-   (license license:lgpl2.0+)
-   (home-page "https://projects.gnome.org/accessibility/")))
+     (license license:lgpl2.1+)
+     (home-page "https://wiki.gnome.org/Accessibility/"))))
 
-;;; A minimal variant used to prevent a cycle with Inkscape.
-(define at-spi2-core-minimal
-  (package
-    (inherit at-spi2-core)
-    (name "at-spi2-core-minimal")
-    (outputs (delete "doc" (package-outputs at-spi2-core)))
+(define-public at-spi2-core
+  (package/inherit at-spi2-core-minimal
+    (outputs (cons "doc" (package-outputs at-spi2-core-minimal)))
     (arguments
-     (substitute-keyword-arguments (package-arguments at-spi2-core)
-       ((#:configure-flags configure-flags)
-        `(delete "-Ddocs=true" ,configure-flags))
+     (substitute-keyword-arguments (package-arguments at-spi2-core-minimal)
+       ((#:configure-flags flags ''())
+        `(cons ,(if (%current-target-system)
+                    "-Ddocs=false"
+                    "-Ddocs=true")
+               ,flags))
        ((#:phases phases)
         `(modify-phases ,phases
-           (delete 'set-documentation-path)
-           (delete 'prepare-doc-directory)
-           (delete 'move-documentation)))))
+           (add-after 'unpack 'set-documentation-path
+             (lambda* (#:key outputs #:allow-other-keys)
+               ;; Ensure that the cross-references point to the "doc" output.
+               (substitute* "doc/libatspi/meson.build"
+                 (("docpath =.*")
+                  (string-append "docpath = '" (assoc-ref outputs "doc")
+                                 "/share/gtk-doc/html'\n")))))
+           (add-before 'install 'prepare-doc-directory
+             (lambda* (#:key outputs #:allow-other-keys)
+               (mkdir-p (string-append (assoc-ref outputs "doc") "/share"))))
+           ,@(if (%current-target-system)
+                 '()
+                 '((add-after 'install 'move-documentation
+                     (lambda* (#:key outputs #:allow-other-keys)
+                       (let ((out (assoc-ref outputs "out"))
+                             (doc (assoc-ref outputs "doc")))
+                         (copy-recursively
+                          (string-append out "/share/gtk-doc")
+                          (string-append doc "/share/gtk-doc"))
+                         (delete-file-recursively
+                          (string-append out "/share/gtk-doc")))))))))))
     (native-inputs
-     (alist-delete "gtk-doc" (package-native-inputs at-spi2-core)))))
+     (append `(("docbook-xml" ,docbook-xml-4.3)
+               ("gtk-doc" ,gtk-doc/stable)
+               ("libxml2" ,libxml2))    ;for XML_CATALOG_FILES
+         (package-native-inputs at-spi2-core-minimal)))
+    (properties (alist-delete 'hidden?
+                              (package-properties at-spi2-core-minimal)))))
 
 (define-public at-spi2-atk
   (package
-   (name "at-spi2-atk")
-   (version "2.34.1")
-   (source (origin
-            (method url-fetch)
-            (uri (string-append "mirror://gnome/sources/" name "/"
-                                (version-major+minor version)  "/"
-                                name "-" version ".tar.xz"))
-            (sha256
-             (base32
-              "05ncp7s5nddjinffs26mcvpbd63vk1m3cv5y530p3plgfhqgjvbp"))))
-   (build-system meson-build-system)
-   (arguments
-    '(#:phases
-      (modify-phases %standard-phases
-        (replace 'check
-                 ;; Run test-suite under a dbus session.
-                 (lambda _
-                   (setenv "DBUS_FATAL_WARNINGS" "0")
-                   (invoke "dbus-launch" "meson" "test"))))))
-   (propagated-inputs
-    ;; TODO: Replace by at-spi2-core-minimal in the next staging window, or
-    ;; when Inkscape 0.92 is upgraded to 1.0 to avoid a cycle.
-    `(("at-spi2-core" ,at-spi2-core))) ; required by atk-bridge-2.0.pc
-   (inputs
-    `(("atk" ,atk)))
-   (native-inputs
-    `(("pkg-config" ,pkg-config)
-      ;; For tests.
-      ("dbus" ,dbus)
-      ("libxml2" ,libxml2)))
-   (synopsis "Assistive Technology Service Provider Interface, ATK bindings")
-   (description
-    "The Assistive Technology Service Provider Interface
+    (name "at-spi2-atk")
+    (version "2.38.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnome/sources/" name "/"
+                                  (version-major+minor version)  "/"
+                                  name "-" version ".tar.xz"))
+              (sha256
+               (base32
+                "0ks6r9sx27l80n3a7yjmkilxv48cqj183wc7cap3caw2myjhi86g"))))
+    (build-system meson-build-system)
+    (arguments
+     `(#:glib-or-gtk? #t     ; To wrap binaries and/or compile schemas
+       ;; Compiling tests requires "libxml2" to be in 'inputs'.
+       ,@(if (%current-target-system)
+             `(#:configure-flags '("-Dtests=false"))
+             '())
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           ;; Run test-suite under a dbus session.
+           (lambda _
+             (setenv "DBUS_FATAL_WARNINGS" "0")
+             (invoke "dbus-launch" "meson" "test"))))))
+    (propagated-inputs
+     (list at-spi2-core-minimal)) ; required by atk-bridge-2.0.pc
+    (inputs
+     (list atk glib))
+    (native-inputs
+     (list dbus ; For tests
+           gobject-introspection libxml2 pkg-config))
+    (synopsis "Assistive Technology Service Provider Interface, ATK bindings")
+    (description
+     "The Assistive Technology Service Provider Interface
 is part of the GNOME accessibility project.")
-   (license license:lgpl2.0+)
-   (home-page "https://projects.gnome.org/accessibility/")))
+    (license license:lgpl2.1+)
+    (home-page "https://wiki.gnome.org/Accessibility/")))
 
 (define-public gtk+-2
   (package
-   (name "gtk+")
-   (version "2.24.32")
-   (source (origin
-            (method url-fetch)
-            (uri (string-append "mirror://gnome/sources/" name "/"
-                                (version-major+minor version)  "/"
-                                name "-" version ".tar.xz"))
-            (sha256
-             (base32
-              "0bjq7ja9gwcv6n5q4qkvdjjx40wsdiikksz1zqxvxsm5vlyskj5n"))
-            (patches (search-patches "gtk2-respect-GUIX_GTK2_PATH.patch"
-                                     "gtk2-respect-GUIX_GTK2_IM_MODULE_FILE.patch"
-                                     "gtk2-theme-paths.patch"))))
-   (build-system gnu-build-system)
-   (outputs '("out" "bin" "doc" "debug"))
-   (propagated-inputs
-    `(("atk" ,atk)
-      ("gdk-pixbuf" ,gdk-pixbuf+svg)
-      ("pango" ,pango)))
-   (inputs
-    `(("cups" ,cups)
-      ("libxcomposite" ,libxcomposite)
-      ("libxcursor" ,libxcursor)
-      ("libxdamage" ,libxdamage)
-      ("libxi" ,libxi)
-      ("libxinerama" ,libxinerama)
-      ("libxrandr" ,libxrandr)))
-   (native-inputs
-    `(("perl" ,perl)
-      ("gettext" ,gettext-minimal)
-      ("glib" ,glib "bin")
-      ("gobject-introspection" ,gobject-introspection)
-      ("pkg-config" ,pkg-config)
-      ("python-wrapper" ,python-wrapper)))
-   (arguments
-    `(#:configure-flags
-      (list "--with-xinput=yes"
-            (string-append "--with-html-dir="
-                           (assoc-ref %outputs "doc")
-                           "/share/gtk-doc/html"))
-      #:phases
-      (modify-phases %standard-phases
-        (add-before 'configure 'disable-tests
-          (lambda _
-            ;; FIXME: re-enable tests requiring an X server
-            (substitute* "gtk/Makefile.in"
-              (("SUBDIRS = theme-bits . tests") "SUBDIRS = theme-bits ."))
-            #t))
-        (add-after 'install 'remove-cache
-          (lambda* (#:key outputs #:allow-other-keys)
-	    (for-each
+    (name "gtk+")
+    (version "2.24.33")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnome/sources/" name "/"
+                                  (version-major+minor version)  "/"
+                                  name "-" version ".tar.xz"))
+              (sha256
+               (base32
+                "1nn6kks1zyvb5xikr9y2k7r9bwjy1g4b0m0s66532bclymbwfamc"))
+              (patches (search-patches "gtk2-respect-GUIX_GTK2_PATH.patch"
+                                       "gtk2-respect-GUIX_GTK2_IM_MODULE_FILE.patch"
+                                       "gtk2-theme-paths.patch"
+                                       "gtk2-fix-builder-test.patch"))))
+    (build-system gnu-build-system)
+    (outputs '("out" "bin" "doc" "debug"))
+    (propagated-inputs
+     (list atk cairo
+           (if (target-x86-64?)
+             librsvg-bootstrap
+             librsvg-2.40)
+           glib pango))
+    (inputs
+     (list cups
+           libx11
+           libxcomposite
+           libxcursor
+           libxext
+           libxdamage
+           libxi
+           libxinerama
+           libxkbcommon
+           libxrandr
+           libxrender
+           libxshmfence))
+    (native-inputs
+     (list gettext-minimal
+           `(,glib "bin")
+           gobject-introspection
+           intltool
+           perl
+           pkg-config
+           python-wrapper
+           xorg-server-for-tests))
+    (arguments
+     `(#:parallel-tests? #f
+       #:configure-flags
+       (list "--with-xinput=yes"
+             (string-append "--with-html-dir="
+                            (assoc-ref %outputs "doc")
+                            "/share/gtk-doc/html"))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'disable-failing-tests
+           (lambda _
+             (substitute* "gtk/Makefile.in"
+               (("aliasfilescheck\\.sh") ""))
+             (substitute* "gtk/tests/recentmanager.c"
+               (("g_test_add_func \\(\"/recent-manager.*;") ""))
+             (substitute* "gtk/tests/defaultvalue.c"
+               (("return g_test_run\\(\\);") ""))
+             #t))
+         (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" (getcwd))
+             ;; Tests look for $XDG_RUNTIME_DIR.
+             (setenv "XDG_RUNTIME_DIR" (getcwd))
+             ;; For missing '/etc/machine-id'.
+             (setenv "DBUS_FATAL_WARNINGS" "0")
+             #t))
+         (add-after 'install 'remove-cache
+           (lambda* (#:key outputs #:allow-other-keys)
+	     (for-each
 	      delete-file
 	      (find-files (assoc-ref outputs "out") "immodules.cache"))
-            #t)))))
-   (native-search-paths
-    (list (search-path-specification
-           (variable "GUIX_GTK2_PATH")
-           (files '("lib/gtk-2.0")))))
-   (synopsis "Cross-platform toolkit for creating graphical user interfaces")
-   (description
-    "GTK+, or the GIMP Toolkit, is a multi-platform toolkit for creating
+             #t)))))
+    (native-search-paths
+     (list (search-path-specification
+            (variable "GUIX_GTK2_PATH")
+            (files '("lib/gtk-2.0")))))
+    (search-paths native-search-paths)
+    (synopsis "Cross-platform toolkit for creating graphical user interfaces")
+    (description
+     "GTK+, or the GIMP Toolkit, is a multi-platform toolkit for creating
 graphical user interfaces.  Offering a complete set of widgets, GTK+ is
 suitable for projects ranging from small one-off tools to complete
 application suites.")
-   (license license:lgpl2.0+)
-   (home-page "https://www.gtk.org/")))
+    (license license:lgpl2.0+)
+    (home-page "https://www.gtk.org/")))
 
 (define-public gtk+
-  (package (inherit gtk+-2)
-   (name "gtk+")
-   (version "3.24.24")
-   (source (origin
-            (method url-fetch)
-            (uri (string-append "mirror://gnome/sources/" name "/"
-                                (version-major+minor version)  "/"
-                                name "-" version ".tar.xz"))
-            (sha256
-             (base32
-              "12ipk1d376bai9v820qzhxba93kkh5abi6mhyqr4hwjvqmkl77fc"))
-            (patches (search-patches "gtk3-respect-GUIX_GTK3_PATH.patch"
-                                     "gtk3-respect-GUIX_GTK3_IM_MODULE_FILE.patch"))))
-   (propagated-inputs
-    `(("at-spi2-atk" ,at-spi2-atk)
-      ("atk" ,atk)
-      ("gdk-pixbuf" ,gdk-pixbuf+svg)
-      ("libepoxy" ,libepoxy)
-      ("libxcursor" ,libxcursor)
-      ("libxi" ,libxi)
-      ("libxinerama" ,libxinerama)
-      ("libxkbcommon" ,libxkbcommon)
-      ("libxdamage" ,libxdamage)
-      ("libxrandr" ,libxrandr)
-      ("mesa" ,mesa)
-      ("pango" ,pango)
-      ("wayland" ,wayland)
-      ("wayland-protocols" ,wayland-protocols)))
-   (inputs
-    `(("libxml2" ,libxml2)
-      ;; XXX: colord depends on mozjs (through polkit), which fails on
-      ;;      on non-intel systems now.
-      ;;("colord" ,colord)
-      ("cups" ,cups)                            ;for printing support
-      ;; XXX: rest depends on p11-kit, which fails on mips64el now.
-      ;;("rest" ,rest)
-      ("json-glib" ,json-glib)))
-   (native-inputs
-    `(("perl" ,perl)
-      ("glib" ,glib "bin")
-      ("gettext" ,gettext-minimal)
-      ("pkg-config" ,pkg-config)
-      ("gobject-introspection" ,gobject-introspection)
-      ("python-wrapper" ,python-wrapper)
-      ;; By using a special xorg-server for GTK+'s tests, we reduce the impact
-      ;; of updating xorg-server directly on the master branch.
-      ("xorg-server" ,xorg-server-for-tests)))
-   (arguments
-    `(#:disallowed-references (,xorg-server-for-tests)
-      ;; 47 MiB goes to "out" (24 of which is locale data!), and 26 MiB goes
-      ;; to "doc".
-      #:configure-flags (list (string-append "--with-html-dir="
-                                             (assoc-ref %outputs "doc")
-                                             "/share/gtk-doc/html")
-                              ;; The header file <gdk/gdkwayland.h> is required
-                              ;; by gnome-control-center
-                              "--enable-wayland-backend"
-                              ;; This is necessary to build both backends.
-                              "--enable-x11-backend"
-                              ;; This enables the HTML5 websocket backend.
-                              "--enable-broadway-backend")
-      #:phases (modify-phases %standard-phases
-        (add-before 'configure 'pre-configure
-          (lambda _
-            ;; Disable most tests, failing in the chroot with the message:
-            ;; D-Bus library appears to be incorrectly set up; failed to read
-            ;; machine uuid: Failed to open "/etc/machine-id": No such file or
-            ;; directory.
-            ;; See the manual page for dbus-uuidgen to correct this issue.
-            (substitute* "testsuite/Makefile.in"
-              (("SUBDIRS = gdk gtk a11y css reftests")
-               "SUBDIRS = gdk"))
-            #t))
-        (add-after 'install 'move-desktop-files
-          ;; Move desktop files into 'bin' to avoid cycle references.
-          (lambda* (#:key outputs #:allow-other-keys)
-            (let ((out (assoc-ref outputs "out"))
-                  (bin (assoc-ref outputs "bin")))
-              (mkdir-p (string-append bin "/share"))
-              (rename-file (string-append out "/share/applications")
-                           (string-append bin "/share/applications"))
-              #t))))))
-   (native-search-paths
-    (list (search-path-specification
-           (variable "GUIX_GTK3_PATH")
-           (files '("lib/gtk-3.0")))))))
+  (package
+    (inherit gtk+-2)
+    (name "gtk+")
+    (version "3.24.30")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://gnome/sources/" name "/"
+                           (version-major+minor version)  "/"
+                           name "-" version ".tar.xz"))
+       (sha256
+        (base32
+         "1a9vg840fjq1mmm403b67k624qrkxh9shaz9pv7z9l8a6bzvyxds"))
+       (patches (search-patches "gtk3-respect-GUIX_GTK3_PATH.patch"
+                                "gtk3-respect-GUIX_GTK3_IM_MODULE_FILE.patch"))))
+    (propagated-inputs
+     (list atk
+           at-spi2-atk
+           cairo
+           fribidi
+           fontconfig
+           freetype
+           (if (target-x86-64?)
+             librsvg-bootstrap
+             librsvg-2.40)
+           glib
+           libcloudproviders-minimal
+           libepoxy
+           libx11
+           libxcomposite
+           libxcursor
+           libxdamage
+           libxext
+           libxfixes
+           libxi
+           libxinerama
+           libxkbcommon
+           libxrandr
+           libxrender
+           mesa
+           pango
+           wayland
+           wayland-protocols))
+    (inputs
+     (list colord-minimal ;to prevent a cycle with inkscape
+           cups
+           graphene
+           harfbuzz
+           iso-codes
+           json-glib-minimal
+           libxml2
+           rest))
+    (native-inputs
+     (list docbook-xml-4.1.2
+           gettext-minimal
+           `(,glib "bin")
+           gobject-introspection
+           hicolor-icon-theme
+           perl
+           pkg-config
+           python-wrapper
+           sassc
+           ;; By using a special xorg-server for GTK+'s tests, we reduce the impact
+           ;; of updating xorg-server directly on the master branch.
+           xorg-server-for-tests
+           libxslt))
+    (arguments
+     `(#:imported-modules ((guix build glib-or-gtk-build-system)
+                           ,@%gnu-build-system-modules)
+       #:modules ((guix build utils)
+                  (guix build gnu-build-system)
+                  ((guix build glib-or-gtk-build-system) #:prefix glib-or-gtk:))
+       #:disallowed-references (,xorg-server-for-tests)
+       ;; 47 MiB goes to "out" (24 of which is locale data!), and 26 MiB goes
+       ;; to "doc".
+       #:configure-flags (list (string-append "--with-html-dir="
+                                              (assoc-ref %outputs "doc")
+                                              "/share/gtk-doc/html")
+                               "--enable-cloudproviders"
+                               ;; The header file <gdk/gdkwayland.h> is required
+                               ;; by gnome-control-center
+                               "--enable-wayland-backend"
+                               ;; This is necessary to build both backends.
+                               "--enable-x11-backend"
+                               ;; This enables the HTML5 websocket backend.
+                               "--enable-broadway-backend")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'generate-gdk-pixbuf-loaders-cache-file
+           (assoc-ref glib-or-gtk:%standard-phases
+                      'generate-gdk-pixbuf-loaders-cache-file))
+         (add-after 'unpack 'disable-failing-tests
+           (lambda _
+             (substitute* "testsuite/gtk/Makefile.in"
+               (("builderparser cellarea check-icon-names check-cursor-names")
+                "builderparser cellarea check-cursor-names")
+               (("notify no-gtk-init object objects-finalize papersize rbtree")
+                "no-gtk-init papersize rbtree")
+               (("stylecontext templates textbuffer textiter treemodel treepath")
+                "stylecontext textbuffer textiter treemodel treepath"))
+             (substitute* "testsuite/a11y/Makefile.in"
+               (("accessibility-dump tree-performance text children derive")
+                "tree-performance text children derive"))
+             (substitute* "testsuite/reftests/Makefile.in"
+               (("TEST_PROGS = gtk-reftest")
+                "TEST_PROGS = "))
+             #t))
+         (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" (getcwd))
+             ;; Tests look for $XDG_RUNTIME_DIR.
+             (setenv "XDG_RUNTIME_DIR" (getcwd))
+             ;; For missing '/etc/machine-id'.
+             (setenv "DBUS_FATAL_WARNINGS" "0")
+             #t))
+         (add-after 'install 'move-desktop-files
+           ;; Move desktop files into 'bin' to avoid cycle references.
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out"))
+                   (bin (assoc-ref outputs "bin")))
+               (mkdir-p (string-append bin "/share"))
+               (rename-file (string-append out "/share/applications")
+                            (string-append bin "/share/applications"))
+               #t))))))
+    (native-search-paths
+     (list (search-path-specification
+            (variable "GUIX_GTK3_PATH")
+            (files '("lib/gtk-3.0")))))))
+
+(define-public gtk
+  (package
+    (name "gtk")
+    (version "4.4.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://gnome/sources/" name "/"
+                           (version-major+minor version)  "/"
+                           name "-" version ".tar.xz"))
+       (sha256
+        (base32 "1x6xlc063nqp7cg6py4kq1kpw9pkq49ifk5kki0brc667ncdmahg"))
+       (patches
+        (search-patches "gtk4-respect-GUIX_GTK4_PATH.patch"
+                        "gtk-introspection-test.patch"))))
+    (build-system meson-build-system)
+    (outputs '("out" "bin" "doc"))
+    (arguments
+     `(#:modules ((guix build utils)
+                  (guix build meson-build-system)
+                  ((guix build glib-or-gtk-build-system) #:prefix glib-or-gtk:))
+       #:configure-flags
+       (list
+        "-Dbroadway-backend=true"      ;for broadway display-backend
+        "-Dcloudproviders=enabled"     ;for cloud-providers support
+        "-Dtracker=enabled"            ;for filechooser search support
+        "-Dcolord=enabled"             ;for color printing support
+        ,@(if (%current-target-system)
+              ;; If true, gtkdoc-scangobj will try to execute a
+              ;; cross-compiled binary.
+              '("-Dgtk_doc=false")
+              '("-Dgtk_doc=true"))
+        "-Dman-pages=true")
+       #:parallel-tests? #f             ;parallel tests are not supported
+       #:test-options '("--setup=x11"   ;defaults to wayland
+                        ;; Use the same test options as upstream uses for
+                        ;; their CI.
+                        "--suite=gtk"
+                        "--no-suite=gsk-compare-broadway")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'generate-gdk-pixbuf-loaders-cache-file
+           (assoc-ref glib-or-gtk:%standard-phases
+                      'generate-gdk-pixbuf-loaders-cache-file))
+         (add-after 'unpack 'patch
+           (lambda* (#:key inputs native-inputs outputs #:allow-other-keys)
+             ;; Correct DTD resources of docbook.
+             (substitute* (find-files "docs" "\\.xml$")
+               (("http://www.oasis-open.org/docbook/xml/4.3/")
+                (string-append
+                 (assoc-ref (or native-inputs inputs) "docbook-xml-4.3")
+                 "/xml/dtd/docbook/")))
+             ;; Disable building of icon cache.
+             (substitute* "meson.build"
+               (("gtk_update_icon_cache: true")
+                "gtk_update_icon_cache: false"))
+             ;; Disable failing tests.
+             (substitute* (find-files "testsuite" "meson.build")
+               (("[ \t]*'empty-text.node',") "")
+               (("[ \t]*'testswitch.node',") "")
+               (("[ \t]*'widgetfactory.node',") ""))
+             (substitute* "testsuite/reftests/meson.build"
+               (("[ \t]*'label-wrap-justify.ui',") "")) ))
+         (add-before 'build 'set-cache
+           (lambda _
+             (setenv "XDG_CACHE_HOME" (getcwd))))
+         (add-before 'check 'pre-check
+           (lambda* (#:key inputs #:allow-other-keys)
+             ;; Tests require a running X server.
+             (system "Xvfb :1 +extension GLX &")
+             (setenv "DISPLAY" ":1")
+             ;; Tests write to $HOME.
+             (setenv "HOME" (getcwd))
+             ;; Tests look for those variables.
+             (setenv "XDG_RUNTIME_DIR" (getcwd))
+             ;; For missing '/etc/machine-id'.
+             (setenv "DBUS_FATAL_WARNINGS" "0")
+             ;; Required for the calendar test.
+             (setenv "TZDIR" (search-input-directory inputs
+                                                     "share/zoneinfo"))))
+         (add-after 'install 'move-files
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (assoc-ref outputs "bin"))
+                    (doc (assoc-ref outputs "doc")))
+               (for-each mkdir-p
+                         (list
+                          (string-append bin "/bin")
+                          (string-append bin "/share/applications")
+                          (string-append bin "/share/icons")
+                          (string-append bin "/share/man")
+                          (string-append bin "/share/metainfo")
+                          (string-append doc "/share/doc")))
+               ;; Move programs and related files to output 'bin'.
+               (for-each (lambda (dir)
+                           (rename-file
+                            (string-append out dir)
+                            (string-append bin dir)))
+                         (list
+                          "/bin"
+                          "/share/applications"
+                          "/share/icons"
+                          "/share/man"
+                          "/share/metainfo"))
+               ;; Move HTML documentation to output 'doc'.
+               (rename-file
+                (string-append out "/share/doc")
+                (string-append doc "/share/doc"))))))))
+    (native-inputs
+     `(("docbook-xml-4.3" ,docbook-xml-4.3)
+       ("docbook-xsl" ,docbook-xsl)
+       ("gettext-minimal" ,gettext-minimal)
+       ("glib:bin" ,glib "bin")
+       ("gobject-introspection" ,gobject-introspection) ;for building introspection data
+       ("graphene" ,graphene)
+       ("gtk-doc" ,gtk-doc)             ;for building documentation
+       ("intltool" ,intltool)
+       ("libxslt" ,libxslt)             ;for building man-pages
+       ("pkg-config" ,pkg-config)
+       ("python-pygobject" ,python-pygobject)
+       ;; These python modules are required for building documentation.
+       ("python-jinja2" ,python-jinja2)
+       ("python-markdown" ,python-markdown)
+       ("python-markupsafe" ,python-markupsafe)
+       ("python-pygments" ,python-pygments)
+       ("python-toml" ,python-toml)
+       ("python-typogrify" ,python-typogrify)
+       ("sassc" ,sassc)                 ;for building themes
+       ("tzdata" ,tzdata-for-tests)
+       ("vala" ,vala)
+       ("xorg-server-for-tests" ,xorg-server-for-tests)))
+    (inputs
+     (list colord ;for color printing support
+           cups ;for CUPS print-backend
+           ffmpeg ;for ffmpeg media-backend
+           fribidi
+           gstreamer ;for gstreamer media-backend
+           gst-plugins-bad ;provides gstreamer-player
+           gst-plugins-base ;provides gstreamer-gl
+           harfbuzz
+           iso-codes
+           json-glib
+           libcloudproviders ;for cloud-providers support
+           librsvg
+           python
+           rest
+           tracker))          ;for filechooser search support
+    (propagated-inputs
+     ;; Following dependencies are referenced in .pc files.
+     `(("cairo" ,cairo)
+       ("fontconfig" ,fontconfig)
+       ("librsvg" ,librsvg)
+       ("glib" ,glib)
+       ("graphene" ,graphene)
+       ("libepoxy" ,libepoxy)
+       ("libx11" ,libx11)               ;for x11 display-backend
+       ("libxcomposite" ,libxcomposite)
+       ("libxcursor" ,libxcursor)
+       ("libxdamage" ,libxdamage)
+       ("libxext" ,libxext)
+       ("libxfixes" ,libxfixes)
+       ("libxi" ,libxi)
+       ("libxinerama" ,libxinerama)     ;for xinerama support
+       ("libxkbcommon" ,libxkbcommon)
+       ("libxrandr" ,libxrandr)
+       ("libxrender" ,libxrender)
+       ("pango" ,pango)
+       ("vulkan-headers" ,vulkan-headers)
+       ("vulkan-loader" ,vulkan-loader) ;for vulkan graphics API support
+       ("wayland" ,wayland)             ;for wayland display-backend
+       ("wayland-protocols" ,wayland-protocols)))
+    (native-search-paths
+     (list
+      (search-path-specification
+       (variable "GUIX_GTK4_PATH")
+       (files '("lib/gtk-4.0")))))
+    (search-paths native-search-paths)
+    (home-page "https://www.gtk.org/")
+    (synopsis "Cross-platform widget toolkit")
+    (description "GTK is a multi-platform toolkit for creating graphical user
+interfaces.  Offering a complete set of widgets, GTK is suitable for projects
+ranging from small one-off tools to complete application suites.")
+    (license license:lgpl2.1+)))
 
 ;;;
 ;;; Guile bindings.
@@ -998,14 +1300,12 @@ application suites.")
                          (find-files module-dir "\\.scm$"))
                #t))))))
     (inputs
-     `(("guile-lib" ,guile-lib)
-       ("expat" ,expat)
-       ("guile" ,guile-3.0)))
+     (list guile-lib expat guile-3.0))
     (propagated-inputs
      ;; The .pc file refers to 'cairo'.
-     `(("cairo" ,cairo)))
+     (list cairo))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.nongnu.org/guile-cairo/")
     (synopsis "Cairo bindings for GNU Guile")
     (description
@@ -1027,9 +1327,6 @@ exceptions, macros, and a dynamic programming environment.")
        ,@(fold alist-delete (package-inputs guile-cairo)
                '("guile" "guile-lib"))))))
 
-(define-public guile3.0-cairo
-  (deprecated-package "guile3.0-cairo" guile-cairo))
-
 (define-public guile-rsvg
   ;; Use a recent snapshot that supports Guile 2.2 and beyond.
   (let ((commit "05c6a2fd67e4fea1a7c3ff776729dc931bae6678")
@@ -1087,15 +1384,10 @@ exceptions, macros, and a dynamic programming environment.")
                                        file "-o" go)))
                            (find-files module-dir "\\.scm$"))
                  #t))))))
-      (native-inputs `(("pkg-config" ,pkg-config)
-                       ("autoconf" ,autoconf)
-                       ("automake" ,automake)
-                       ("libtool" ,libtool)
-                       ("texinfo" ,texinfo)))
-      (inputs `(("guile" ,guile-3.0)
-                ("librsvg" ,librsvg)
-                ("guile-lib" ,guile-lib)))        ;for (unit-test)
-      (propagated-inputs `(("guile-cairo" ,guile-cairo)))
+      (native-inputs (list pkg-config autoconf automake libtool texinfo))
+      (inputs (list guile-3.0
+                    (librsvg-for-system) guile-lib))        ;for (unit-test)
+      (propagated-inputs (list guile-cairo))
       (synopsis "Render SVG images using Cairo from Guile")
       (description
        "Guile-RSVG wraps the RSVG library for Guile, allowing you to render SVG
@@ -1114,9 +1406,6 @@ images onto Cairo surfaces.")
                '("guile" "guile-lib"))))
     (propagated-inputs `(("guile-cairo" ,guile2.2-cairo)))))
 
-(define-public guile3.0-rsvg
-  (deprecated-package "guile3.0-rsvg" guile-rsvg))
-
 (define-public guile-present
   (package
     (name "guile-present")
@@ -1160,13 +1449,11 @@ images onto Cairo surfaces.")
                                  out "/share/guile/site/" version " -C "
                                  out "/lib/guile/" version "/site-ccache "))))
              #t)))))
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("guile" ,guile-3.0)))
+    (native-inputs (list pkg-config))
+    (inputs (list guile-3.0))
     (propagated-inputs
      ;; These are used by the (present …) modules.
-     `(("guile-lib" ,guile-lib)
-       ("guile-cairo" ,guile-cairo)
-       ("guile-rsvg" ,guile-rsvg)))
+     (list guile-lib guile-cairo guile-rsvg))
     (home-page "https://wingolog.org/software/guile-present/")
     (synopsis "Create SVG or PDF presentations in Guile")
     (description
@@ -1181,15 +1468,12 @@ documents.")
   (package
     (inherit guile-present)
     (name "guile2.2-present")
-    (inputs `(("guile" ,guile-2.2)))
+    (inputs (list guile-2.2))
     (propagated-inputs
      `(("guile-lib" ,guile2.2-lib)
        ("guile-cairo" ,guile2.2-cairo)
        ("guile-rsvg" ,guile2.2-rsvg)))))
 
-(define-public guile3.0-present
-  (deprecated-package "guile3.0-present" guile-present))
-
 (define-public guile-gnome
    (package
     (name "guile-gnome")
@@ -1205,23 +1489,23 @@ documents.")
                "1gnf3j96nip5kl99a268i0dy1hj7s1cfs66sps3zwysnkd7qr399"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("atk" ,atk)
-       ;;("corba" ,corba) ; not packaged yet
-       ("gconf" ,gconf)
-       ("gobject-introspection" ,gobject-introspection)
-       ;;("gthread" ,gthread) ; not packaged yet
-       ("gnome-vfs" ,gnome-vfs)
-       ("gdk-pixbuf" ,gdk-pixbuf)
-       ("gtk+" ,gtk+-2)
-       ("libglade" ,libglade)
-       ("libgnome" ,libgnome)
-       ("libgnomecanvas" ,libgnomecanvas)
-       ("libgnomeui" ,libgnomeui)
-       ("pango" ,pango)
-       ("libffi" ,libffi)
-       ("glib" ,glib)))
-    (inputs `(("guile" ,guile-2.2)))
+     (list pkg-config
+           atk
+           ;;("corba" ,corba) ; not packaged yet
+           gconf
+           gobject-introspection
+           ;;("gthread" ,gthread) ; not packaged yet
+           gnome-vfs
+           gdk-pixbuf
+           gtk+-2
+           libglade
+           libgnome
+           libgnomecanvas
+           libgnomeui
+           pango
+           libffi
+           glib))
+    (inputs (list guile-2.2))
     (propagated-inputs
      `(("guile-cairo" ,guile2.2-cairo)
        ("g-wrap" ,g-wrap)
@@ -1253,24 +1537,45 @@ guile-gnome-platform (GNOME developer libraries), and guile-gtksourceview.")
 (define-public cairomm
   (package
     (name "cairomm")
-    (version "1.12.2")
+    (version "1.16.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://www.cairographics.org/releases/"
-                                  name "-" version ".tar.gz"))
+                                  name "-" version ".tar.xz"))
               (sha256
                (base32
-                "16fmigxsaz85c3lgcls7biwyz8zy8c8h3jndfm54cxxas3a7zi25"))))
-    (build-system gnu-build-system)
+                "1ya4y7qa000cjawqwswbqv26y5icfkmhs5iiiil4dxgrqn91923y"))))
+    (build-system meson-build-system)
+    (outputs '("out" "doc"))
     (arguments
-     ;; The examples lack -lcairo.
-     '(#:make-flags '("LDFLAGS=-lcairo")))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+     `(#:glib-or-gtk? #t     ; To wrap binaries and/or compile schemas
+       #:configure-flags
+       (list
+        "-Dbuild-documentation=true"
+        "-Dboost-shared=true")
+       #: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"))
+               (rename-file
+                (string-append out "/share/doc")
+                (string-append doc "/share/doc"))
+               #t))))))
+    (native-inputs
+     `(("boost" ,boost)
+       ("dot" ,graphviz)
+       ("doxygen" ,doxygen)
+       ("mm-common" ,mm-common)
+       ("perl" ,perl)
+       ("pkg-config" ,pkg-config)
+       ("xsltproc" ,libxslt)))
+    (inputs
+     `(("fontconfig" ,fontconfig)))
     (propagated-inputs
-     `(("libsigc++" ,libsigc++)
-       ("freetype" ,freetype)
-       ("fontconfig" ,fontconfig)
-       ("cairo" ,cairo)))
+     (list libsigc++ cairo))
     (home-page "https://cairographics.org/")
     (synopsis "C++ bindings to the Cairo 2D graphics library")
     (description
@@ -1278,42 +1583,64 @@ guile-gnome-platform (GNOME developer libraries), and guile-gtksourceview.")
 library.")
     (license license:lgpl2.0+)))
 
-(define-public cairomm-1.13
+(define-public cairomm-1.14
   (package
     (inherit cairomm)
     (name "cairomm")
-    (version "1.13.1")
+    (version "1.14.2")
     (source
      (origin
        (method url-fetch)
        (uri
         (string-append "https://www.cairographics.org/releases/"
-                       name "-" version ".tar.gz"))
+                       name "-" version ".tar.xz"))
        (sha256
-        (base32 "1xlfl0fm5mgv53lr8xjv2kqsk3bz67qkk6qzvbrqmbvbvvbqp9wp"))))
+        (base32 "1qwdj9xw1w651kqwh82nipbryimm1ir5n3c6q34nphsx576bj9h1"))))
     (propagated-inputs
-     `(("cairo" ,cairo)
-       ("sigc++" ,libsigc++)))))
+     (modify-inputs (package-propagated-inputs cairomm)
+       (prepend libsigc++-2)))))
 
 (define-public pangomm
   (package
     (name "pangomm")
-    (version "2.42.0")
+    (version "2.48.0")
     (source (origin
-             (method url-fetch)
-             (uri (string-append "mirror://gnome/sources/" name "/"
-                                 (version-major+minor version)  "/"
-                                 name "-" version ".tar.xz"))
-             (sha256
-              (base32
-               "0mmzxp3wniaafkxr30sb22mq9x44xckb5d60h1bl99lkzxks0vfa"))))
-    (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+              (method url-fetch)
+              (uri (string-append "mirror://gnome/sources/" name "/"
+                                  (version-major+minor version)  "/"
+                                  name "-" version ".tar.xz"))
+              (sha256
+               (base32
+                "0y2vyp6azvhrii6rzs89kr08wg8z1p562awyr812131zqdsd83ly"))))
+    (build-system meson-build-system)
+    (outputs '("out" "doc"))
+    (arguments
+     `(#:glib-or-gtk? #t     ; To wrap binaries and/or compile schemas
+       #:configure-flags
+       (list
+        "-Dbuild-documentation=true")
+       #: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"))
+               (rename-file
+                (string-append out "/share/doc")
+                (string-append doc "/share/doc"))
+               #t))))))
+    (native-inputs
+     `(("dot" ,graphviz)
+       ("doxygen" ,doxygen)
+       ("m4" ,m4)
+       ("mm-common" ,mm-common)
+       ("perl" ,perl)
+       ("pkg-config" ,pkg-config)
+       ("python" ,python)
+       ("xsltproc" ,libxslt)))
     (propagated-inputs
-     `(("cairo" ,cairo)
-       ("cairomm" ,cairomm)
-       ("glibmm" ,glibmm)
-       ("pango" ,pango)))
+     (list cairo cairomm glibmm pango))
     (home-page "https://pango.gnome.org//")
     (synopsis "C++ interface to the Pango text rendering library")
     (description
@@ -1321,11 +1648,11 @@ library.")
 library.")
     (license license:lgpl2.1+)))
 
-(define-public pangomm-2.42
+(define-public pangomm-2.46
   (package
     (inherit pangomm)
     (name "pangomm")
-    (version "2.42.1")
+    (version "2.46.0")
     (source
      (origin
        (method url-fetch)
@@ -1334,102 +1661,187 @@ library.")
                        (version-major+minor version)  "/"
                        name "-" version ".tar.xz"))
        (sha256
-        (base32 "03zli5amizhv9bfklwfq7xyf0b5dagchx1lnz9f0v1rhk69h9gql"))))
+        (base32 "06zczkaxf5p5kjgnzrfylzi40w9a8lxpndgs7rpn12qrsq27sy6k"))))
     (propagated-inputs
-     `(("cairomm" ,cairomm-1.13)
-       ("glibmm" ,glibmm-2.64)
-       ("pango" ,pango)))))
+     (list cairomm-1.14 glibmm-2.64 pango))))
 
 (define-public atkmm
   (package
     (name "atkmm")
-    (version "2.28.0")
+    (version "2.36.0")
     (source (origin
-             (method url-fetch)
-             (uri (string-append "mirror://gnome/sources/" name "/"
-                                 (version-major+minor version)  "/"
-                                 name "-" version ".tar.xz"))
-             (sha256
-              (base32
-               "0fnxrspxkhhbrjphqrpvl3zjm66n50s4cywrrrwkhbflgy8zqk2c"))))
-    (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+              (method url-fetch)
+              (uri (string-append "mirror://gnome/sources/" name "/"
+                                  (version-major+minor version)  "/"
+                                  name "-" version ".tar.xz"))
+              (sha256
+               (base32
+                "0wwr0663jrqx2klsasffd9wpk3kqnwisj1y3ahdkjdk5hzrsjgy9"))))
+    (build-system meson-build-system)
+    (outputs '("out" "doc"))
+    (arguments
+     `(#:glib-or-gtk? #t     ; To wrap binaries and/or compile schemas
+       #:configure-flags
+       (list
+        "-Dbuild-documentation=true")
+       #: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"))
+               (rename-file
+                (string-append out "/share/doc")
+                (string-append doc "/share/doc"))))))))
+    (native-inputs
+     `(("dot" ,graphviz)
+       ("doxygen" ,doxygen)
+       ("m4" ,m4)
+       ("mm-common" ,mm-common)
+       ("perl" ,perl)
+       ("pkg-config" ,pkg-config)
+       ("python" ,python)
+       ("xsltproc" ,libxslt)))
     (propagated-inputs
-     `(("glibmm" ,glibmm) ("atk" ,atk)))
-    (home-page "https://www.gtkmm.org")
-    (synopsis "C++ interface to the ATK accessibility library")
-    (description
-     "ATKmm provides a C++ programming interface to the ATK accessibility
-toolkit.")
-    (license license:lgpl2.1+)))
+     (list glibmm atk))
+    (synopsis "C++ bindings for ATK")
+    (description "ATKmm is the C++ binding for the ATK library.")
+    (home-page "https://wiki.gnome.org/Accessibility")
+    (license
+     (list
+      ;; Library
+      license:lgpl2.1+
+      ;; Tools
+      license:gpl2+))))
+
+(define-public atkmm-2.28
+  (package
+    (inherit atkmm)
+    (name "atkmm")
+    (version "2.28.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri
+        (string-append "mirror://gnome/sources/" name "/"
+                       (version-major+minor version)  "/"
+                       name "-" version ".tar.xz"))
+       (sha256
+        (base32 "1b8vycqzr3lfvk2l73f4kk74hj48081zbh9r1r2ilr3h8xh7cs0i"))))
+    (propagated-inputs
+     (modify-inputs (package-propagated-inputs atkmm)
+       (replace "glibmm" glibmm-2.64)))))
 
 (define-public gtkmm
   (package
     (name "gtkmm")
-    (version "3.24.2")
-    (source (origin
-             (method url-fetch)
-             (uri (string-append "mirror://gnome/sources/" name "/"
-                                 (version-major+minor version)  "/"
-                                 name "-" version ".tar.xz"))
-             (sha256
-              (base32
-               "1hxdnhavjyvbcpxhd5z17l9fj4182028s66lc0s16qqqrldhjwbd"))))
-    (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("glib" ,glib "bin")        ;for 'glib-compile-resources'
-                     ("xorg-server" ,xorg-server-for-tests)))
-    (propagated-inputs
-     `(("pangomm" ,pangomm)
-       ("cairomm" ,cairomm)
-       ("atkmm" ,atkmm)
-       ("gtk+" ,gtk+)
-       ("glibmm" ,glibmm)))
+    (version "4.4.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri
+        (string-append "mirror://gnome/sources/" name "/"
+                       (version-major+minor version)  "/"
+                       name "-" version ".tar.xz"))
+       (sha256
+        (base32 "1nhdf1s437k41af6frbqw2sky46qci0hgkg9h86a9rlnc0r69d1f"))))
+    (build-system meson-build-system)
+    (outputs '("out" "doc"))
     (arguments
-     `(#:disallowed-references (,xorg-server-for-tests)
-       #:phases (modify-phases %standard-phases
-                  (add-before 'check 'run-xvfb
-                    (lambda* (#:key inputs #:allow-other-keys)
-                      (let ((xorg-server (assoc-ref inputs "xorg-server")))
-                        ;; Tests such as 'object_move/test' require a running
-                        ;; X server.
-                        (system (string-append xorg-server "/bin/Xvfb :1 &"))
-                        (setenv "DISPLAY" ":1")
-                        ;; Don't fail because of the missing /etc/machine-id.
-                        (setenv "DBUS_FATAL_WARNINGS" "0")
-                        #t))))))
+     `(#:configure-flags '("-Dbuild-documentation=true")
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'set-cache
+           (lambda _
+             (setenv "XDG_CACHE_HOME" (getcwd))))
+         (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" (getcwd))
+             (setenv "XDG_RUNTIME_DIR" (getcwd))
+             ;; For missing '/etc/machine-id'.
+             (setenv "DBUS_FATAL_WARNINGS" "0")))
+         (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"))
+               (rename-file
+                (string-append out "/share/doc")
+                (string-append doc "/share/doc"))))))))
+    (native-inputs
+     `(("dot" ,graphviz)
+       ("doxygen" ,doxygen)
+       ("glib:bin" ,glib "bin")
+       ("m4" ,m4)
+       ("mm-common" ,mm-common)
+       ("perl" ,perl)
+       ("pkg-config" ,pkg-config)
+       ("python" ,python)
+       ("xsltproc" ,libxslt)
+       ("xorg-server" ,xorg-server-for-tests)))
+    (propagated-inputs
+     (list atkmm cairomm glibmm gtk pangomm))
+    (synopsis "C++ Interfaces for GTK+ and GNOME")
+    (description "GTKmm is the official C++ interface for the popular GUI
+library GTK+.  Highlights include typesafe callbacks, and a comprehensive set
+of widgets that are easily extensible via inheritance.  You can create user
+interfaces either in code or with the Glade User Interface designer, using
+libglademm.  There's extensive documentation, including API reference and a
+tutorial.")
     (home-page "https://gtkmm.org/")
-    (synopsis
-     "C++ interface to the GTK+ graphical user interface library")
-    (description
-     "gtkmm is the official C++ interface for the popular GUI library GTK+.
-Highlights include typesafe callbacks, and a comprehensive set of widgets that
-are easily extensible via inheritance.  You can create user interfaces either
-in code or with the Glade User Interface designer, using libglademm.  There's
-extensive documentation, including API reference and a tutorial.")
-    (license license:lgpl2.1+)))
+    (license
+     (list
+      ;; Library
+      license:lgpl2.1+
+      ;; Tools
+      license:gpl2+))))
 
+(define-public gtkmm-3
+  (package
+    (inherit gtkmm)
+    (name "gtkmm")
+    (version "3.24.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri
+        (string-append "mirror://gnome/sources/" name "/"
+                       (version-major+minor version)  "/"
+                       name "-" version ".tar.xz"))
+       (sha256
+        (base32 "1ri2msp3cmzi6r65ghwb8gfavfaxv0axpwi3q60nm7v8hvg36qw5"))))
+    (propagated-inputs
+     `(("atkmm-2.28" ,atkmm-2.28)
+       ("cairomm-1.14" ,cairomm-1.14)
+       ("glibmm" ,glibmm)
+       ("gtk+" ,gtk+)
+       ("pangomm-2.42" ,pangomm-2.46)))))
 
 (define-public gtkmm-2
-  (package (inherit gtkmm)
+  (package
+    (inherit gtkmm)
     (name "gtkmm")
     (version "2.24.5")
-    (source (origin
-             (method url-fetch)
-             (uri (string-append "mirror://gnome/sources/" name "/"
-                                 (version-major+minor version)  "/"
-                                 name "-" version ".tar.xz"))
-             (sha256
-              (base32
-               "0wkbzvsx4kgw16f6xjdc1dz7f77ldngdila4yi5lw2zrgcxsb006"))))
-    (arguments '())
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (source
+     (origin
+       (method url-fetch)
+       (uri
+        (string-append "mirror://gnome/sources/" name "/"
+                       (version-major+minor version)  "/"
+                       name "-" version ".tar.xz"))
+       (sha256
+        (base32 "0wkbzvsx4kgw16f6xjdc1dz7f77ldngdila4yi5lw2zrgcxsb006"))))
+    (build-system gnu-build-system)
+    (arguments
+     (strip-keyword-arguments
+      '(#:configure-flags) (package-arguments gtkmm)))
     (propagated-inputs
-     `(("pangomm" ,pangomm)
-       ("cairomm" ,cairomm)
-       ("atkmm" ,atkmm)
-       ("gtk+" ,gtk+-2)
-       ("glibmm" ,glibmm)))))
+     (list atkmm-2.28 cairomm-1.14 glibmm-2.64 gtk+-2 pangomm-2.46))))
 
 (define-public gtksourceviewmm
   (package
@@ -1444,12 +1856,10 @@ extensive documentation, including API reference and a tutorial.")
                (base32 "0fgvmhm4h4qmxig87qvangs6ijw53mi40siz7pixlxbrsgiil22i"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (propagated-inputs
      ;; In 'Requires' of gtksourceviewmm-3.0.pc.
-     `(("glibmm" ,glibmm)
-       ("gtkmm" ,gtkmm)
-       ("gtksourceview" ,gtksourceview-3)))
+     (list glibmm gtkmm-3 gtksourceview-3))
     (synopsis "C++ interface to the GTK+ 'GtkTextView' widget")
     (description
      "gtksourceviewmm is a portable C++ library that extends the standard GTK+
@@ -1477,10 +1887,9 @@ printing and other features typical of a source code editor.")
         "1326aa2ybhhhrvz3n4p22z5sic25m016ddb5yq0hvbprnw6a35an"))))
     (build-system python-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python-pytest" ,python-pytest)))
+     (list pkg-config python-pytest))
     (propagated-inputs                  ;pycairo.pc references cairo
-     `(("cairo" ,cairo)))
+     (list cairo))
     (home-page "https://cairographics.org/pycairo/")
     (synopsis "Python bindings for cairo")
     (description
@@ -1523,7 +1932,7 @@ printing and other features typical of a source code editor.")
     (outputs '("out"
                "doc"))                            ;13 MiB of gtk-doc HTML
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("python" ,python-2)
 
@@ -1590,10 +1999,9 @@ write GNOME applications.")
                 "0zq78dv22arg35ma6kah9cwfd1zx8gg7amsibzd128qw81p766c2"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-extutils-depends" ,perl-extutils-depends)
-       ("perl-extutils-pkgconfig" ,perl-extutils-pkgconfig)))
+     (list perl-extutils-depends perl-extutils-pkgconfig))
     (propagated-inputs
-     `(("cairo" ,cairo)))
+     (list cairo))
     (home-page "https://metacpan.org/release/Cairo")
     (synopsis "Perl interface to the cairo 2d vector graphics library")
     (description "Cairo provides Perl bindings for the vector graphics library
@@ -1614,11 +2022,9 @@ produces identical output on all those targets.")
         (base32 "0l2wcz77ndmbgvxx34gdm919a3dxh9fixqr47p50n78ysx2692cd"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-extutils-depends" ,perl-extutils-depends)
-       ("perl-extutils-pkgconfig" ,perl-extutils-pkgconfig)))
+     (list perl-extutils-depends perl-extutils-pkgconfig))
     (propagated-inputs
-     `(("perl-cairo" ,perl-cairo)
-       ("perl-glib" ,perl-glib)))
+     (list perl-cairo perl-glib))
     (home-page "https://metacpan.org/dist/Cairo-GObject")
     (synopsis "Integrate Cairo into the Glib type system")
     (description "Cairo::GObject registers Cairo's types with Glib's type systems,
@@ -1638,12 +2044,11 @@ so that they can be used normally in signals and properties.")
                 "0ry9jfvfgdwzalxcvwsgr7plhk3agx7p40l0fqdf3vrf7ds47i29"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-extutils-depends" ,perl-extutils-depends)
-       ("perl-extutils-pkgconfig" ,perl-extutils-pkgconfig)))
+     (list perl-extutils-depends perl-extutils-pkgconfig))
     (inputs
-     `(("gtk+" ,gtk+-2)))
+     (list gtk+-2))
     (propagated-inputs
-     `(("perl-pango" ,perl-pango)))
+     (list perl-pango))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1691,11 +2096,8 @@ yet remaining very close in spirit to original API.")
        ("perl-test-simple" ,perl-test-simple)
        ("xorg-server" ,xorg-server-for-tests)))
     (propagated-inputs
-     `(("gtk+" ,gtk+)
-       ("perl-cairo-gobject" ,perl-cairo-gobject)
-       ("perl-carp" ,perl-carp)
-       ("perl-exporter" ,perl-exporter)
-       ("perl-glib-object-introspection" ,perl-glib-object-introspection)))
+     (list gtk+ perl-cairo-gobject perl-carp perl-exporter
+           perl-glib-object-introspection))
     (home-page "https://metacpan.org/dist/Gtk3")
     (synopsis "Perl interface to the 3.x series of the gtk+ toolkit")
     (description "Perl bindings to the 3.x series of the gtk+ toolkit.
@@ -1717,13 +2119,11 @@ yet remaining very close in spirit to original API.")
                 "0wdcidnfnb6nm79fzfs39ivawj3x8m98a147fmcxgv1zvwia9c1l"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-extutils-depends" ,perl-extutils-depends)
-       ("perl-extutils-pkgconfig" ,perl-extutils-pkgconfig)))
+     (list perl-extutils-depends perl-extutils-pkgconfig))
     (inputs
-     `(("pango" ,pango)))
+     (list pango))
     (propagated-inputs
-     `(("perl-cairo" ,perl-cairo)
-       ("perl-glib" ,perl-glib)))
+     (list perl-cairo perl-glib))
     (home-page "https://metacpan.org/release/Pango")
     (synopsis "Layout and render international text")
     (description "Pango is a library for laying out and rendering text, with an
@@ -1760,7 +2160,7 @@ and routines to assist in editing internationalized text.")
                      ("glib:bin" ,glib "bin")
                      ("xorg-server" ,xorg-server-for-tests)))
     ;; Listed in 'Requires.private' of 'girara.pc'.
-    (propagated-inputs `(("gtk+" ,gtk+)))
+    (propagated-inputs (list gtk+))
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (add-before 'check 'start-xserver
@@ -1793,7 +2193,7 @@ information.")
 (define-public gtk-doc
   (package
     (name "gtk-doc")
-    (version "1.28")
+    (version "1.33.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
@@ -1801,8 +2201,10 @@ information.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "05apmwibkmn1icx05l8aw241lhymcx01zvk5i499cb150bijj7li"))))
-    (build-system gnu-build-system)
+                "0hxza8qp52lrq7s1vbilz2vh4170cail560zi8khl0zb42d706yc"))
+              (patches
+               (search-patches "gtk-doc-respect-xml-catalog.patch"))))
+    (build-system meson-build-system)
     (arguments
      `(#:parallel-tests? #f
        #:phases
@@ -1810,82 +2212,67 @@ information.")
          (add-after 'unpack 'patch-gtk-doc-scan
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "gtk-doc.xsl"
-              (("http://docbook.sourceforge.net/release/xsl/current/html/chunk.xsl")
-               (string-append (assoc-ref inputs "docbook-xsl")
-                              "/xml/xsl/docbook-xsl-"
-                              ,(package-version docbook-xsl)
-                              "/html/chunk.xsl"))
-              (("http://docbook.sourceforge.net/release/xsl/current/common/en.xml")
-               (string-append (assoc-ref inputs "docbook-xsl")
-                              "/xml/xsl/docbook-xsl-"
-                              ,(package-version docbook-xsl)
-                              "/common/en.xml")))
-             #t))
-         (add-after 'patch-gtk-doc-scan 'patch-test-out
-           (lambda _
-             ;; sanity.sh counts the number of status lines.  Since our
-             ;; texlive regenerates the fonts every time and the font
-             ;; generator metafont outputs a lot of extra lines, this
-             ;; test would always fail.  Disable it for now.
-             (substitute* "tests/Makefile.in"
-              (("empty.sh sanity.sh") "empty.sh"))
+               (("http://docbook.sourceforge.net/release/xsl/current/html/chunk.xsl")
+                (string-append (assoc-ref inputs "docbook-xsl")
+                               "/xml/xsl/docbook-xsl-"
+                               ,(package-version docbook-xsl)
+                               "/html/chunk.xsl"))
+               (("http://docbook.sourceforge.net/release/xsl/current/common/en.xml")
+                (string-append (assoc-ref inputs "docbook-xsl")
+                               "/xml/xsl/docbook-xsl-"
+                               ,(package-version docbook-xsl)
+                               "/common/en.xml")))
              #t))
-         (add-before 'build 'set-HOME
+         (add-after 'unpack 'disable-failing-tests
            (lambda _
-             ;; FIXME: dblatex with texlive-union does not find the built
-             ;; metafonts, so it tries to generate them in HOME.
-             (setenv "HOME" "/tmp")
-             #t))
-         (add-before 'configure 'fix-docbook
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "configure"
-               ;; The configure check is overzealous about making sure that
-               ;; things are in place -- it uses the xmlcatalog tool to make
-               ;; sure that docbook-xsl is available, but this tool can only
-               ;; look in one catalog file, unlike the $XML_CATALOG_FILES
-               ;; variable that Guix defines.  Fool the test by using the
-               ;; docbook-xsl catalog explicitly and get on with life.
-               (("\"\\$XML_CATALOG_FILE\" \
-\"http://docbook.sourceforge.net/release/xsl/")
-                (string-append (car (find-files (assoc-ref inputs "docbook-xsl")
-                                                "^catalog.xml$"))
-                               " \"http://docbook.sourceforge.net/release/xsl/")))
+             (substitute* "tests/Makefile.am"
+               (("annotations.sh bugs.sh empty.sh fail.sh gobject.sh program.sh")
+                ""))
              #t))
          (add-after 'install 'wrap-executables
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
                (for-each (lambda (prog)
                            (wrap-program prog
-                             `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH")))))
-                         (find-files (string-append out "/bin")))
-               #t))))
-       #:configure-flags
-       (list (string-append "--with-xml-catalog="
-                            (assoc-ref %build-inputs "docbook-xml")
-                            "/xml/dtd/docbook/catalog.xml"))))
+                             `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH")))))
+                         (find-files (string-append out "/bin")))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
+     `(("gettext" ,gettext-minimal)
+       ("glib:bin" ,glib "bin")
+       ("gobject-introspection" ,gobject-introspection)
        ("itstool" ,itstool)
-       ("libxml" ,libxml2)
-       ("gettext" ,gettext-minimal)
-       ("bc" ,bc)))
+       ("perl" ,perl)
+       ("pkg-config" ,pkg-config)
+       ("python-wrapper" ,python-wrapper)))
     (inputs
-     `(("perl" ,perl)
-       ("python" ,python)
-       ("xsltproc" ,libxslt)
-       ("dblatex" ,dblatex)
-       ("docbook-xml" ,docbook-xml-4.3)
-       ("docbook-xsl" ,docbook-xsl)
-       ("source-highlight" ,source-highlight)
-       ("glib" ,glib)
-       ("python-six" ,python-six)))
-    (home-page "https://www.gtk.org/gtk-doc/")
-    (synopsis "Documentation generator from C source code")
-    (description
-     "GTK-Doc generates API documentation from comments added to C code.  It is
-typically used to document the public API of GTK+ and GNOME libraries, but it
-can also be used to document application code.")
-    (license license:gpl2+)))
+     (list bc
+           dblatex
+           docbook-xml-4.3
+           docbook-xsl
+           glib
+           libxml2
+           libxslt
+           python
+           python-anytree
+           python-lxml
+           python-parameterized
+           python-pygments
+           python-unittest2
+           source-highlight
+           yelp-tools))
+    (home-page "https://wiki.gnome.org/DocumentationProject/GtkDoc")
+    (synopsis "GTK+ DocBook Documentation Generator")
+    (description "GtkDoc is a tool used to extract API documentation from C-code
+like Doxygen, but handles documentation of GObject (including signals and
+properties) that makes it very suitable for GTK+ apps and libraries.  It uses
+docbook for intermediate files and can produce html by default and pdf/man-pages
+with some extra work.")
+    (license
+     (list
+      ;; Docs.
+      license:fdl1.1+
+      ;; 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
@@ -1915,11 +2302,10 @@ can also be used to document application code.")
      `(#:configure-flags
        `("--enable-animation")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (inputs
      ;; Don't propagate GTK+ to reduce "profile pollution".
-     `(("gtk+" ,gtk+-2))) ; required by gtk-engines-2.pc
+     (list gtk+-2)) ; required by gtk-engines-2.pc
     (home-page "https://live.gnome.org/GnomeArt")
     (synopsis "Theming engines for GTK+ 2.x")
     (description
@@ -1946,10 +2332,9 @@ Redmond95 and ThinIce.")
        `("--enable-animation"
          "--enable-animationrtl")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (propagated-inputs
-     `(("gtk+" ,gtk+-2)))
+     (list gtk+-2))
     (home-page "https://live.gnome.org/GnomeArt")
     (synopsis "Cairo-based theming engine for GTK+ 2.x")
     (description
@@ -1970,15 +2355,11 @@ glass artworks done by Venicians glass blowers.")
                 "0cjp6xdcnzh6kka42w9g0w2ihqjlq8yl8hjm9wsfnixk6qwgch5h"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)
-       ("vala" ,vala)))
+     (list intltool pkg-config vala))
     (inputs
-     `(("gobject-introspection" ,gobject-introspection)
-       ("gtk+" ,gtk+)
-       ("pango" ,pango)))
+     (list gobject-introspection gtk+ pango))
     (propagated-inputs
-     `(("enchant" ,enchant)))           ; gtkspell3-3.0.pc refers to it
+     (list enchant))           ; gtkspell3-3.0.pc refers to it
     (home-page "http://gtkspell.sourceforge.net")
     (synopsis "Spell-checking addon for GTK's TextView widget")
     (description
@@ -2001,12 +2382,9 @@ misspelled words in a GtkTextView widget.")
         (base32 "05xi29v2y0rvb33fmvrz7r9j4l858qj7ngwd7dp4pzpkkaybjln0"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake intltool pkg-config))
     (inputs
-     `(("gtk+" ,gtk+-2)))
+     (list gtk+-2))
     (home-page "https://github.com/CristianHenzel/ClipIt")
     (synopsis "Lightweight GTK+ clipboard manager")
     (description
@@ -2018,7 +2396,7 @@ Parcellite and adds bugfixes and features.")
 (define-public graphene
   (package
     (name "graphene")
-    (version "1.10.0")
+    (version "1.10.6")
     (source
      (origin
        (method git-fetch)
@@ -2028,21 +2406,24 @@ Parcellite and adds bugfixes and features.")
          (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "14a0j1rvjlc7yhfdmhmckdmkzy4ch61qbzywdlw1xv58h23wx29p"))))
+        (base32 "0g2jjy6xizzjxlp0dr81h1f5l16dzcnhznhj6jvhpdjqcvgp98xr"))))
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t     ; To wrap binaries and/or compile schemas
        #:configure-flags
        (list
-        "-Dinstalled_tests=false")))
+        "-Dinstalled_tests=false"
+        ,@(if (%current-target-system)
+              ;; Introspection requires running binaries for 'host' on 'build'.
+              '("-Dintrospection=false")
+              '()))))
     (native-inputs
-     `(("git" ,git-minimal)
+     `(("git" ,git-minimal/fixed)
        ("gobject-introspection" ,gobject-introspection)
        ("mutest" ,mutest)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("glib" ,glib)
-       ("python" ,python)))
+     (list glib python))
     (synopsis "Thin layer of graphic data types")
     (description "Graphene provides graphic types and their relative API; it
 does not deal with windowing system surfaces, drawing, scene graphs, or input.")
@@ -2062,12 +2443,11 @@ does not deal with windowing system surfaces, drawing, scene graphs, or input.")
         (base32 "09rzgp7gabnzab460x874a1ibgyjiibpwzsz5srn9zs6jv2jdxjb"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("glib" ,glib "bin")             ; for glib-genmarshal, etc.
-       ("pkg-config" ,pkg-config)))
+     (list `(,glib "bin") ; for glib-genmarshal, etc.
+           pkg-config))
     ;; In 'Requires' of spread-sheet-widget.pc.
     (propagated-inputs
-     `(("glib" ,glib)
-       ("gtk+" ,gtk+)))
+     (list glib gtk+))
     (home-page "https://www.gnu.org/software/ssw/")
     (synopsis "Gtk+ widget for dealing with 2-D tabular data")
     (description
@@ -2076,6 +2456,40 @@ viewing and manipulating 2 dimensional tabular data in a manner similar to many
 popular spread sheet programs.")
     (license license:gpl3+)))
 
+(define-public pnmixer
+  (package
+    (name "pnmixer")
+    (version "0.7.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/nicklan/pnmixer/")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0416pa933ddf4b7ph9zxhk5jppkk7ppcq1aqph6xsrfnka4yb148"))))
+    (build-system cmake-build-system)
+    (arguments `(#:tests? #f))          ;no check target
+    (native-inputs
+     (list gettext-minimal pkg-config))
+    (inputs
+     (list alsa-lib glib gtk+ libnotify libx11))
+    (home-page "https://github.com/nicklan/pnmixer/")
+    (synopsis "Simple mixer application designed to run in system tray")
+    (description
+     "PNMixer is a simple mixer application designed to run in system tray.
+It integrates nicely into desktop environments that don't have a panel that
+supports applets and therefore can't run a mixer applet.  In particular, it's
+been used quite a lot with fbpanel and tint2 but should run fine in any system
+tray.
+
+PNMixer is designed to work on systems that use ALSA for sound management.
+Any other sound driver like OSS or FFADO are, currently, not supported.  There
+is no official PulseAudio support, at the moment, but it seems that PNMixer
+behaves quite well anyway when PA is running.")
+    (license license:gpl3)))
+
 (define-public volumeicon
   (package
     (name "volumeicon")
@@ -2092,12 +2506,9 @@ popular spread sheet programs.")
      `(#:configure-flags
        (list "--enable-notify")))       ; optional libnotify support
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("gtk+" ,gtk+)
-       ("libnotify" ,libnotify)))
+     (list alsa-lib gtk+ libnotify))
     (home-page "http://nullwise.com/volumeicon.html")
     (synopsis "System tray volume applet")
     (description
@@ -2136,13 +2547,9 @@ independent of your desktop environment, and supports global key bindings.")
            (lambda _
              (invoke "intltoolize" "--force" "--automake"))))))
     (inputs
-     `(("gspell" ,gspell)
-       ("gtk+" ,gtk+)))
+     (list gspell gtk+))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake intltool pkg-config))
     (home-page "https://sourceforge.net/projects/yad-dialog/")
     (synopsis "GTK+ dialog boxes for shell scripts")
     (description
@@ -2166,8 +2573,8 @@ shell scripts.  Example of how to use @code{yad} can be consulted at
               (base32
                "0fgzz39007fdjwq72scp0qygp2v3zc5f1xkm0sxaa8zxm25g1bra"))))
    (build-system gnu-build-system)
-   (inputs `(("gtk+" ,gtk+)))
-   (native-inputs `(("pkg-config" ,pkg-config)))
+   (inputs (list gtk+))
+   (native-inputs (list pkg-config))
    (arguments
     `(#:tests? #f                       ; no check
       #:make-flags
@@ -2273,10 +2680,8 @@ displayed on the other side of the bus.")
         (base32 "1kcp4p3s7sdh9lwniybjdarfy8z69j2j23hfrw98amhwhq39gdcc"))))
     (build-system meson-build-system)
     (arguments `(#:configure-flags (list "-Dtests=true")))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("gobject-introspection" ,gobject-introspection)))
-    (inputs `(("wayland" ,wayland)
-              ("gtk+" ,gtk+)))
+    (native-inputs (list pkg-config gobject-introspection))
+    (inputs (list wayland gtk+))
     (home-page "https://github.com/wmww/gtk-layer-shell")
     (synopsis "Library to create Wayland desktop components using the Layer
 Shell protocol")
@@ -2308,10 +2713,7 @@ popovers.")
        ("pkg-config" ,pkg-config)
        ("python" ,python)))
     (inputs
-     `(("cairo" ,cairo)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("python-pygobject" ,python-pygobject)))
+     (list cairo glib gtk+ python-pygobject))
     (arguments
      `(#:configure-flags '("--disable-rebuilds"
                            "--disable-static")
@@ -2350,7 +2752,8 @@ library for drawing.")
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags (list "--enable-glade"
-                               "--enable-introspection")
+                               "--enable-introspection"
+                               "CFLAGS=-fcommon")
        #:phases
        (modify-phases %standard-phases
          ;; The "configure" script is present, but otherwise the project is
@@ -2360,11 +2763,14 @@ library for drawing.")
            (lambda _
              (delete-file "configure")
              #t))
-         (add-after 'unpack 'rename-type
+         (add-after 'unpack 'patch-for-compatibility
            (lambda _
              (substitute* "glade/glade-gtksheet-editor.c"
                (("GladeEditableIface") "GladeEditableInterface"))
-             #t))
+             ;; Glade 3.37 renamed the macro GWA_GET_CLASS to
+             ;; GLADE_WIDGET_ADAPTOR_GET_ADAPTOR_CLASS.
+             (substitute* "glade/glade-gtksheet-editor.c"
+               (("GWA_GET_CLASS") "GLADE_WIDGET_ADAPTOR_GET_ADAPTOR_CLASS"))))
          ;; Fix glade install directories.
          (add-before 'bootstrap 'configure-glade-directories
            (lambda* (#:key outputs #:allow-other-keys)
@@ -2377,16 +2783,9 @@ library for drawing.")
                 (string-append (assoc-ref outputs "out") "/share/pixmaps")))
              #t)))))
     (inputs
-     `(("glade" ,glade3)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("libxml2" ,libxml2)))
+     (list glade3 glib gtk+ libxml2))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("gobject-introspection" ,gobject-introspection)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake gobject-introspection libtool pkg-config))
     (home-page "https://fpaquet.github.io/gtksheet/")
     (synopsis "Spreadsheet widget for GTK+")
     (description "GtkSheet is a matrix widget for GTK+.  It consists of an
@@ -2418,9 +2817,9 @@ foreground and background colors, text justification and more.")
         (base32 "1qykm551bx8j8pfgxs60l2vhpi8lv4r8va69zvn2594lchh71vlb"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("gtk+" ,gtk+)))
+     (list gtk+))
     (synopsis "Display widget for dynamic data")
     (description "GtkDatabox is a widget for live display of large amounts of
 fluctuating numerical data.  It enables data presentation (for example, on
@@ -2457,14 +2856,9 @@ user interaction (e.g.  measuring distances).")
                   (string-append pulse "/lib/libpulse.so.0")))
                #t))))))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("libxfixes" ,libxfixes)
-       ("pulseaudio" ,pulseaudio)))
+     (list gtk+ libxfixes pulseaudio))
     (propagated-inputs
-     `(("python-click" ,python-click)
-       ("python-pycairo" ,python-pycairo)
-       ("python-pygobject" ,python-pygobject)
-       ("python-pyyaml" ,python-pyyaml)))
+     (list python-click python-pycairo python-pygobject python-pyyaml))
     (home-page "https://buzz.github.io/volctl/")
     (synopsis "Per-application volume control and on-screen display (OSD) for graphical desktops")
     (description "Volctl is a PulseAudio-enabled tray icon volume control and
diff --git a/gnu/packages/guile-wm.scm b/gnu/packages/guile-wm.scm
index e2c1bd432b..911cda8968 100644
--- a/gnu/packages/guile-wm.scm
+++ b/gnu/packages/guile-wm.scm
@@ -58,9 +58,7 @@
                                             "--with-guile-site-ccache-dir="
                                             (assoc-ref %outputs "out")
                                             "/lib/guile/2.2/site-ccache"))))
-      (native-inputs `(("guile" ,guile-2.2)
-                       ("pkg-config" ,pkg-config)
-                       ("texinfo" ,texinfo)))
+      (native-inputs (list guile-2.2 pkg-config texinfo))
       (inputs `(("guile" ,guile-2.2)
                 ("xcb" ,xcb-proto)))
       (home-page "https://github.com/mwitmer/guile-xcb")
@@ -174,12 +172,8 @@ dependencies.")
                                     Type=Application~%"
                              ,name ,synopsis %output))))
                #t)))))
-      (native-inputs `(("guile" ,guile-2.2)
-                       ("guile-xcb" ,guile-xcb)
-                       ("pkg-config" ,pkg-config)
-                       ("texinfo" ,texinfo)))
-      (inputs `(("guile" ,guile-2.2)
-                ("guile-xcb" ,guile-xcb)))
+      (native-inputs (list guile-2.2 guile-xcb pkg-config texinfo))
+      (inputs (list guile-2.2 guile-xcb))
       (home-page "https://github.com/mwitmer/guile-wm/releases")
       (description
        "Guile-WM is a simple window manager that's completely customizable—you
diff --git a/gnu/packages/guile-xyz.scm b/gnu/packages/guile-xyz.scm
index 6936e9699b..e2cf793acc 100644
--- a/gnu/packages/guile-xyz.scm
+++ b/gnu/packages/guile-xyz.scm
@@ -6,7 +6,7 @@
 ;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016 Erik Edrosa <erik.edrosa@gmail.com>
 ;;; Copyright © 2016, 2019, 2020, 2021 Eraim Flashner <efraim@flashner.co.il>
-;;; Copyright © 2016, 2017 Alex Kost <alezost@gmail.com>
+;;; Copyright © 2016, 2017, 2021 Alex Kost <alezost@gmail.com>
 ;;; Copyright © 2016, 2017 Adonay "adfeno" Felipe Nogueira <https://libreplanet.org/wiki/User:Adfeno> <adfeno@openmailbox.org>
 ;;; Copyright © 2016, 2021 Amirouche <amirouche@hypermove.net>
 ;;; Copyright © 2016, 2019, 2021 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
@@ -17,7 +17,7 @@
 ;;; Copyright © 2017 Nikita <nikita@n0.is>
 ;;; Copyright © 2017, 2018, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
-;;; Copyright © 2018, 2019, 2020, 2021 Arun Isaac <arunisaac@systemreboot.net>
+;;; Copyright © 2018, 2019, 2020, 2021, 2022 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2018 Pierre-Antoine Rouby <pierre-antoine.rouby@inria.fr>
 ;;; Copyright © 2018 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2019 swedebugia <swedebugia@riseup.net>
@@ -38,6 +38,7 @@
 ;;; Copyright © 2021 Leo Le Bouter <lle-bout@zaclys.net>
 ;;; Copyright © 2021 Zelphir Kaltstahl <zelphirkaltstahl@posteo.de>
 ;;; Copyright © 2021 Oleg Pykhalov <go.wigust@gmail.com>
+;;; Copyright © 2021, 2022 Artyom V. Poptsov <poptsov.artyom@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -57,6 +58,7 @@
 (define-module (gnu packages guile-xyz)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (gnu packages)
+  #:use-module (gnu packages admin)
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages aspell)
   #:use-module (gnu packages autotools)
@@ -167,17 +169,13 @@
                   #t))))
     (build-system gnu-build-system)
     (inputs
-     `(("guile" ,guile-3.0)
-       ("nspr" ,nspr)
-       ("nss" ,nss)))
+     (list guile-3.0 nspr nss))
     ;; FIXME the bundled csv contains one more exported procedure
     ;; (sxml->csv-string) than guile-csv. The author is maintainer of both
     ;; projects.
     ;; TODO: Add guile-dbi and guile-dbd optional dependencies.
     (propagated-inputs
-     `(("guile-json" ,guile-json-3)
-       ("guile-readline" ,guile-readline)
-       ("guile-redis" ,guile-redis)))
+     (list guile-json-3 guile-readline guile-redis))
     (native-inputs
      `(("bash"       ,bash)         ;for the `source' builtin
        ("pkgconfig"  ,pkg-config)
@@ -274,7 +272,7 @@ more.")
           (base32 "038gwrhfywgs8372q478wn4623lhcmkknfj4p8yaa93bykfc0fml"))))
       (build-system guile-build-system)
       (native-inputs
-       `(("guile" ,guile-3.0)))
+       (list guile-3.0))
       (home-page "https://github.com/joshwalters/guile-pipe")
       (synopsis "Guile pipe macros for functional chaining")
       (description
@@ -298,7 +296,7 @@ to UNIX pipes (@code{|}), Clojure's threading macros (@code{->} and
         (base32 "14wyrs3m1649l3km4pl2175dmap1372j5h8nkhykrbxg5xqp6ivd"))))
     (build-system guile-build-system)
     (native-inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (home-page "https://git.sr.ht/~brown121407/f.scm")
     (synopsis "Library for working with files and directories")
     (description
@@ -343,12 +341,10 @@ AM_SCM_LOG_FLAGS =  --no-auto-compile -s")
                  (("tests/database.scm") ""))
                #t)))))
       (inputs
-       `(("guile" ,guile-2.0)))
+       (list guile-2.0))
       (native-inputs
-       `(("zip" ,zip) ; for tests
-         ("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("texinfo" ,texinfo)))
+       (list zip ; for tests
+             autoconf automake texinfo))
       (synopsis "Package manager for Guile")
       (description
        "Guildhall is a package manager written for Guile Scheme.  A guild is
@@ -394,9 +390,8 @@ $(datadir)/guile/site/$(GUILE_EFFECTIVE_VERSION)\n"))
                            (string-append "\"" aspell
                                           "/lib/libaspell\"")))
                         #t))))))
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("guile" ,guile-2.2)
-              ("aspell" ,aspell)))
+    (native-inputs (list pkg-config))
+    (inputs (list guile-2.2 aspell))
     (home-page "https://github.com/spk121/guile-aspell")
     (synopsis "Spell-checking from Guile")
     (description
@@ -504,11 +499,7 @@ and then run @command{scm example.scm}.")
                (base32
                 "031wm13srak3wsnll7j2mbbi29g1pcm4swdb71ds9yn567pn20qw"))))
     (build-system gnu-build-system)
-    (native-inputs `(("autoconf" ,autoconf)
-                     ("automake" ,automake)
-                     ("guile" ,guile-2.2)
-                     ("pkg-config" ,pkg-config)
-                     ("texinfo" ,texinfo)))
+    (native-inputs (list autoconf automake guile-2.2 pkg-config texinfo))
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (add-before 'configure 'setenv
@@ -540,9 +531,9 @@ Note that 8sync is only available for Guile 2.2.")
                 "08gaqrgjlly9k5si72vvpbr4xhq5v52l5ma5y6a7spid5dd057cy"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("guile" ,guile-2.2)))
+     (list guile-3.0))
     (home-page "https://github.com/alezost/guile-daemon")
     (synopsis "Evaluate code in a running Guile process")
     (description
@@ -554,7 +545,7 @@ you send to a FIFO file.")
 (define-public guile-dsv
   (package
     (name "guile-dsv")
-    (version "0.4.0")
+    (version "0.5.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -563,15 +554,12 @@ you send to a FIFO file.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1mvyc8i38j56frjh3p6vwziv8lrzlyqndz30663h5nwcp0044sdn"))))
+                "0s9zan08ala7432pn44z3vmb3sc19rf18zfr9mskydnam5xn6qlw"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ("texinfo" ,texinfo)))
-    (inputs `(("guile" ,guile-3.0)))
-    (propagated-inputs `(("guile-lib" ,guile-lib)))
+     (list autoconf automake pkg-config texinfo))
+    (inputs (list guile-3.0))
+    (propagated-inputs (list guile-lib))
     (arguments
      `(#:modules (((guix build guile-build-system)
                    #:select (target-guile-effective-version))
@@ -579,21 +567,6 @@ you send to a FIFO file.")
        #:imported-modules ((guix build guile-build-system)
                            ,@%gnu-build-system-modules)
        #:phases (modify-phases %standard-phases
-                  (add-before 'configure 'set-guilesitedir
-                    (lambda _
-                      (substitute* "Makefile.in"
-                        (("^guilesitedir =.*$")
-                         "guilesitedir = \
-$(datadir)/guile/site/$(GUILE_EFFECTIVE_VERSION)\n"))
-                      (substitute* "modules/Makefile.in"
-                        (("^guilesitedir =.*$")
-                         "guilesitedir = \
-$(datadir)/guile/site/$(GUILE_EFFECTIVE_VERSION)\n"))
-                      (substitute* "modules/dsv/Makefile.in"
-                        (("^guilesitedir =.*$")
-                         "guilesitedir = \
-$(datadir)/guile/site/$(GUILE_EFFECTIVE_VERSION)\n"))
-                      #t))
                   (add-after 'install 'wrap-program
                     (lambda* (#:key inputs outputs #:allow-other-keys)
                       (let* ((out (assoc-ref outputs "out"))
@@ -624,7 +597,7 @@ Unix-style DSV format and RFC 4180 format.")
   (package
     (inherit guile-dsv)
     (name "guile2.2-dsv")
-    (inputs `(("guile" ,guile-2.2)))
+    (inputs (list guile-2.2))
     (propagated-inputs `(("guile-lib" ,guile2.2-lib)))))
 
 (define-public guile-fibers
@@ -681,10 +654,9 @@ Unix-style DSV format and RFC 4180 format.")
                         (rename-file old new)
                         #t))))))
     (native-inputs
-     `(("texinfo" ,texinfo)
-       ("pkg-config" ,pkg-config)))
+     (list texinfo pkg-config))
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (synopsis "Lightweight concurrency facility for Guile")
     (description
      "Fibers is a Guile library that implements a a lightweight concurrency
@@ -704,10 +676,7 @@ is not available for Guile 2.0.")
   (package
     (inherit guile-fibers)
     (name "guile2.2-fibers")
-    (inputs `(("guile" ,guile-2.2)))))
-
-(define-public guile3.0-fibers
-  (deprecated-package "guile3.0-fibers" guile-fibers))
+    (inputs (list guile-2.2))))
 
 (define-public guile-filesystem
   (package
@@ -724,12 +693,9 @@ is not available for Guile 2.0.")
                 "1shmkc0y9r2sj3kw7hrsnamnp7y8xifkhf3m3rnfxczqg63k67vy"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ("texinfo" ,texinfo)))
+     (list autoconf automake pkg-config texinfo))
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (home-page "https://gitlab.com/leoprikler/guile-filesystem")
     (synopsis "Complementary library to Guile's built-in file system procedures")
     (description "@code{guile-filesystem} provides a set of utility functions,
@@ -740,13 +706,13 @@ that augment Guile's support for handling files and their names.")
   (package
     (inherit guile-filesystem)
     (name "guile2.0-filesystem")
-    (inputs `(("guile" ,guile-2.0)))))
+    (inputs (list guile-2.0))))
 
 (define-public guile2.2-filesystem
   (package
     (inherit guile-filesystem)
     (name "guile2.2-filesystem")
-    (inputs `(("guile" ,guile-2.2)))))
+    (inputs (list guile-2.2))))
 
 (define-public guile-syntax-highlight
   (package
@@ -771,9 +737,9 @@ that augment Guile's support for handling files and their names.")
                   #t))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (synopsis "General-purpose syntax highlighter for GNU Guile")
     (description "Guile-syntax-highlight is a general-purpose syntax
 highlighting library for GNU Guile.  It can parse code written in various
@@ -799,20 +765,15 @@ HTML (via SXML) or any other format for rendering.")
                  (base32
                   "18zlg4mkgd3swgv2ggfz91ivnnzc0zhvc9ybgrxg1y762va9hyvj"))))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("texinfo" ,texinfo)
-         ,@(package-native-inputs guile-syntax-highlight)))
+       (modify-inputs (package-native-inputs guile-syntax-highlight)
+         (prepend autoconf automake texinfo)))
       (properties '((hidden? . #t))))))
 
 (define-public guile2.2-syntax-highlight
   (package
     (inherit guile-syntax-highlight)
     (name "guile2.2-syntax-highlight")
-    (inputs `(("guile" ,guile-2.2)))))
-
-(define-public guile3.0-syntax-highlight
-  (deprecated-package "guile3.0-syntax-highlight" guile-syntax-highlight))
+    (inputs (list guile-2.2))))
 
 (define-public guile-sjson
   (package
@@ -835,11 +796,9 @@ HTML (via SXML) or any other format for rendering.")
                   #t))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config))
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (home-page "https://gitlab.com/dustyweb/guile-sjson")
     (synopsis "S-expression based json reader/writer for Guile")
     (description "guile-sjson is a json reader/writer for Guile.
@@ -850,11 +809,11 @@ It has a nice, simple s-expression based syntax.")
   (package
     (inherit guile-sjson)
     (name "guile2.2-sjson")
-    (inputs `(("guile" ,guile-2.2)))))
+    (inputs (list guile-2.2))))
 
 (define-public guile-squee
-  (let ((commit "c1497a216e881cfde39d6aa7c73d0bf6b497c89b")
-        (revision "2"))
+  (let ((commit "a151fd006fa819945ca1d4749b173854269b9f70")
+        (revision "3"))
     (package
       (name "guile-squee")
       (version (string-append "0-" revision "." (string-take commit 7)))
@@ -866,7 +825,7 @@ It has a nice, simple s-expression based syntax.")
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "1alskrplnyl1n5wb39drn72cwplp47a8cpdd1n9cdnw3jhk5p12p"))))
+                  "1jps14z8653ah2kr367iayzyi3ql2s55l77xrafz7gk3mzcvgrrg"))))
       (build-system guile-build-system)
       (arguments
        '(#:phases
@@ -877,13 +836,12 @@ It has a nice, simple s-expression based syntax.")
                  (("dynamic-link \"libpq\"")
                   (string-append
                    "dynamic-link \""
-                   (assoc-ref inputs "postgresql") "/lib/libpq.so"
-                   "\"")))
-               #t)))))
+                   (search-input-file inputs "/lib/libpq.so")
+                   "\""))))))))
       (inputs
-       `(("postgresql" ,postgresql)))
+       (list postgresql))
       (native-inputs
-       `(("guile" ,guile-3.0)))
+       (list guile-3.0))
       (home-page "https://notabug.org/cwebber/guile-squee")
       (synopsis "Connect to PostgreSQL using Guile")
       (description
@@ -895,12 +853,8 @@ using Guile's foreign function interface.")
   (package
     (inherit guile-squee)
     (name "guile2.2-squee")
-    (native-inputs `(("guile" ,guile-2.2)
-                     ,@(alist-delete "guile"
-                                     (package-native-inputs guile-squee))))))
-
-(define-public guile3.0-squee
-  (deprecated-package "guile3.0-squee" guile-squee))
+    (native-inputs (modify-inputs (package-native-inputs guile-squee)
+                     (replace "guile" guile-2.2)))))
 
 (define-public guile-colorized
   (package
@@ -917,7 +871,7 @@ using Guile's foreign function interface.")
         (base32 "10mv8c63159r3qvwwdvsgnsvdg7nc2ghak85zapwqpv4ywrqp9zc"))))
     (build-system guile-build-system)
     (native-inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (home-page "https://gitlab.com/NalaGinrut/guile-colorized")
     (synopsis "Colorized REPL for Guile")
     (description
@@ -928,10 +882,7 @@ using Guile's foreign function interface.")
   (package
     (inherit guile-colorized)
     (name "guile2.2-colorized")
-    (native-inputs `(("guile" ,guile-2.2)))))
-
-(define-public guile3.0-colorized
-  (deprecated-package "guile3.0-colorized" guile-colorized))
+    (native-inputs (list guile-2.2))))
 
 (define-public guile-pfds
   (package
@@ -983,7 +934,7 @@ using Guile's foreign function interface.")
                                   "sequences.sls"
                                   "sets.sls")))))))
     (native-inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (synopsis "Purely functional data structures for Guile")
     (description
      "This package provides purely functional data structures written in R6RS
@@ -1025,12 +976,10 @@ Vicare Scheme and IronScheme.  Right now it contains:
                (("\\/share\\/guile\\/site") "/share/guile/site/2.0"))
              #t)))))
     (native-inputs
-     `(("procps" ,procps)               ; fake-cluster-control uses ps
-       ("guile" ,guile-2.0)
-       ("postgresql" ,postgresql)))
+     (list procps ; fake-cluster-control uses ps
+           guile-2.0 postgresql))
     (inputs
-     `(("guile" ,guile-2.0)
-       ("postgresql" ,postgresql)))
+     (list guile-2.0 postgresql))
     (home-page "https://www.nongnu.org/guile-pg/")
     (synopsis "Guile modules for accessing PostgreSQL")
     (description
@@ -1058,12 +1007,9 @@ works with Guile 1.4.x to 2.0.x.")
               (file-name (string-append name "-" version "-checkout"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("guile" ,guile-3.0)))
+     (list pkg-config autoconf automake guile-3.0))
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (home-page "https://git.cbaines.net/guile/prometheus")
     (synopsis "Prometheus client library for Guile")
     (description
@@ -1076,7 +1022,7 @@ types are supported.")
   (package
     (inherit guile-pfds)
     (name "guile2.2-pfds")
-    (native-inputs `(("guile" ,guile-2.2)))
+    (native-inputs (list guile-2.2))
     (arguments
      (substitute-keyword-arguments (package-arguments guile-pfds)
        ((#:phases phases)
@@ -1094,9 +1040,6 @@ types are supported.")
                          (find-files "." "\\.sls$"))
                #t))))))))
 
-(define-public guile3.0-pfds
-  (deprecated-package "guile3.0-pfds" guile-pfds))
-
 (define-public guile-aa-tree
   (package
     (name "guile-aa-tree")
@@ -1109,7 +1052,7 @@ types are supported.")
                (base32
                 "0044c105r3q9vpl17pv3phl1b79kjm1llhkakqgiasixyav01blh"))))
     (build-system guile-build-system)
-    (native-inputs `(("guile" ,guile-2.2)))
+    (native-inputs (list guile-2.2))
     ;; https://savannah.nongnu.org/projects/guile-aa-tree
     (home-page "https://qlfiles.net/guile-aa-tree/")
     (synopsis "AA tree data structure for Guile")
@@ -1143,12 +1086,9 @@ convenient nested tree operations.")
          '("GUILE_AUTO_COMPILE=0"))) ;to prevent guild warnings
 
       (native-inputs
-       `(("guile" ,guile-3.0)))
+       (list guile-3.0))
       (inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("pkg-config" ,pkg-config)
-         ("zeromq" ,zeromq)))
+       (list autoconf automake pkg-config zeromq))
       (home-page "https://github.com/jerry40/guile-simple-zmq")
       (synopsis "Guile wrapper over ZeroMQ library")
       (description
@@ -1160,10 +1100,7 @@ messaging library.")
   (package
     (inherit guile-simple-zmq)
     (name "guile2.2-simple-zmq")
-    (native-inputs `(("guile" ,guile-2.2)))))
-
-(define-public guile3.0-simple-zmq
-  (deprecated-package "guile3.0-simple-zmq" guile-simple-zmq))
+    (native-inputs (list guile-2.2))))
 
 (define-public jupyter-guile-kernel
   (let ((commit "f25fb90b95529b17a006a807bd04e6aee12ea304")
@@ -1190,9 +1127,7 @@ messaging library.")
                         ;; command.
                         (substitute* "src/hmac.scm"
                           (("openssl")
-                           (string-append (assoc-ref inputs "openssl")
-                                          "/bin/openssl")))
-                        #t))
+                           (search-input-file inputs "/bin/openssl")))))
 
                     ;; XXX: The code uses 'include' to include its own source
                     ;; files, and "-L src" isn't enough in this case.
@@ -1244,10 +1179,7 @@ messaging library.")
                                               ", \"-s"))))
                           #t))))))
       (inputs
-       `(("openssl" ,openssl)
-         ("guile" ,guile-3.0)
-         ("guile-json" ,guile-json-3)
-         ("guile-simple-zmq" ,guile-simple-zmq)))
+       (list openssl guile-3.0 guile-json-3 guile-simple-zmq))
       (synopsis "Guile kernel for the Jupyter Notebook")
       (description
        "This package provides a Guile 2.x kernel for the Jupyter Notebook.  It
@@ -1268,9 +1200,9 @@ allows users to interact with the Guile REPL through Jupyter.")
              (base32 "1jf4972f9fpm0rd865xpnc9mzl3xv6vhfnp0iygadydy905z9nln"))))
    (build-system gnu-build-system)
    (native-inputs
-    `(("pkg-config" ,pkg-config)))
+    (list pkg-config))
    (inputs
-    `(("guile" ,guile-3.0)))
+    (list guile-3.0))
    (home-page "https://github.com/roelj/guile-sparql")
    (synopsis "SPARQL module for Guile")
    (description "This package provides the functionality to query a SPARQL
@@ -1291,10 +1223,9 @@ using S-expressions.")
                 "1cc63nw3xdfjrfk8c58r6d5lidmfq5cpqcy32yd5xp81yccprvn9"))))
     (build-system gnu-build-system)
     (propagated-inputs
-     `(("guile-email" ,guile-email)))
+     (list guile-email))
     (native-inputs
-     `(("guile" ,guile-3.0)
-       ("pkg-config" ,pkg-config)))
+     (list guile-3.0 pkg-config))
     (home-page "https://savannah.gnu.org/projects/guile-debbugs/")
     (synopsis "Guile interface to the Debbugs bug tracking service")
     (description
@@ -1314,13 +1245,14 @@ tracker's SOAP service, such as @url{https://bugs.gnu.org}.")
              version ".tar.lz"))
        (sha256
         (base32
-         "1rc8r0fgvflnyq5ckl7ii8sghpsgpkzxa8vskjr1ak2kyar6m35k"))))
+         "1rc8r0fgvflnyq5ckl7ii8sghpsgpkzxa8vskjr1ak2kyar6m35k"))
+       (patches
+        (search-patches "guile-email-fix-tests.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("lzip" ,lzip)))
+     (list pkg-config lzip))
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (arguments
      '(#:make-flags '("GUILE_AUTO_COMPILE=0"))) ; to prevent guild warnings
     (home-page "https://guile-email.systemreboot.net")
@@ -1332,8 +1264,8 @@ format.")
     (license license:agpl3+)))
 
 (define-public guile-email-latest
-  (let ((commit "ca0520a33c9042a68691d85c6849f88412ca8357")
-        (revision "1"))
+  (let ((commit "ea60bb902d3677d5c653851c7aa6afbbf710140e")
+        (revision "2"))
     (package
       (inherit guile-email)
       (name "guile-email-latest")
@@ -1347,22 +1279,16 @@ format.")
          (file-name (git-file-name name version))
          (sha256
           (base32
-           "1l5mikalawq83786rnb9zky908ncsd5dna9vyz6bx6kc2frrl7xv"))))
+           "1g4rn7ai3nfxmpppc8qbpv8b18wnsld29y5xa58cv9b8pf3pbwnj"))))
       (native-inputs
-       `(("pkg-config" ,pkg-config)
-         ("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("texinfo" ,texinfo))))))
+       (list pkg-config autoconf automake texinfo)))))
 
 (define-public guile2.2-email
   (package
     (inherit guile-email)
     (name "guile2.2-email")
-    (inputs `(("guile" ,guile-2.2)
-              ,@(alist-delete "guile" (package-inputs guile-email))))))
-
-(define-public guile3.0-email
-  (deprecated-package "guile3.0-email" guile-email))
+    (inputs (modify-inputs (package-inputs guile-email)
+              (replace "guile" guile-2.2)))))
 
 (define-public guile-newt
   (package
@@ -1382,12 +1308,9 @@ format.")
      '(#:make-flags
        '("GUILE_AUTO_COMPILE=0"))) ;to prevent guild warnings
     (inputs
-     `(("guile" ,guile-3.0)
-       ("newt" ,newt)))
+     (list guile-3.0 newt))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config))
     (synopsis "Guile bindings to Newt")
     (description
      "This package provides bindings for Newt, a programming library for
@@ -1400,11 +1323,8 @@ Scheme by using Guile’s foreign function interface.")
   (package
     (inherit guile-newt)
     (name "guile2.2-newt")
-    (inputs `(("guile" ,guile-2.2)
-              ,@(alist-delete "guile" (package-inputs guile-newt))))))
-
-(define-public guile3.0-newt
-  (deprecated-package "guile3.0-newt" guile-newt))
+    (inputs (modify-inputs (package-inputs guile-newt)
+              (replace "guile" guile-2.2)))))
 
 (define-public guile-mastodon
   (let ((commit "74b75bcf547df92acee1e0466ecd7ec07f775392")
@@ -1423,15 +1343,9 @@ Scheme by using Guile’s foreign function interface.")
                   "1wx5h6wa9c0na8mrnr2nv1nzjvq68zyrly8yyp11dsskhaw4y33h"))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("emacs" ,emacs-minimal)
-         ("pkg-config" ,pkg-config)
-         ("texinfo" ,texinfo)))
+       (list autoconf automake emacs-minimal pkg-config texinfo))
       (inputs
-       `(("guile" ,guile-3.0)
-         ("gnutls" ,gnutls)
-         ("guile-json" ,guile-json-4)))
+       (list guile-3.0 gnutls 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
@@ -1458,14 +1372,11 @@ microblogging service.")
      '(#:make-flags
        '("GUILE_AUTO_COMPILE=0"))) ;to prevent guild warnings
     (inputs
-     `(("guile" ,guile-3.0)
-       ("parted" ,parted)))
+     (list guile-3.0 parted))
     (propagated-inputs
-     `(("guile-bytestructures" ,guile-bytestructures)))
+     (list guile-bytestructures))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config))
     (synopsis "Guile bindings to GNU Parted")
     (description
      "This package provides bindings for GNU Parted library, a C library
@@ -1478,18 +1389,15 @@ written in pure Scheme by using Guile's foreign function interface.")
   (package
     (inherit guile-parted)
     (name "guile2.2-parted")
-    (inputs `(("guile" ,guile-2.2)
-              ,@(alist-delete "guile" (package-inputs guile-parted))))
+    (inputs (modify-inputs (package-inputs guile-parted)
+              (replace "guile" guile-2.2)))
     (propagated-inputs
      `(("guile-bytestructures" ,guile2.2-bytestructures)))))
 
-(define-public guile3.0-parted
-  (deprecated-package "guile3.0-parted" guile-parted))
-
 (define-public guile-xosd
   (package
     (name "guile-xosd")
-    (version "0.2.1")
+    (version "0.2.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/alezost/" name
@@ -1497,16 +1405,22 @@ written in pure Scheme by using Guile's foreign function interface.")
                                   "/" name "-" version ".tar.gz"))
               (sha256
                (base32
-                "1ri5065c16kmgrf2pysn2ymxjqi5302lhpb07wkl1jr75ym8fn8p"))))
+                "10r29bpyrsvjalnzkam2falj9k34lvxmch05zs606zp1nk93whp3"))))
     (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'set-cpath
+           (lambda* (#:key inputs #:allow-other-keys)
+             (setenv "CPATH"
+                     (string-append
+                      (assoc-ref inputs "guile") "/include/guile/3.0:"
+                      (or (getenv "CPATH") "")))
+             #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("guile" ,guile-2.2)
-       ("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxinerama" ,libxinerama)
-       ("xosd" ,xosd)))
+     (list guile-3.0 libx11 libxext libxinerama xosd))
     (home-page "https://github.com/alezost/guile-xosd")
     (synopsis "XOSD bindings for Guile")
     (description
@@ -1518,143 +1432,147 @@ library}.")
 (define-public guile-dbi
   (package
     (name "guile-dbi")
-    (version "2.1.6")
+    (version "2.1.8")
     (source (origin
               (method git-fetch)
               (uri (git-reference
-                    (url "https://example.org") ;only hosted on Software Heritage
-                    (commit "e19b019e9683faf66c3f385b20fcc112e65f8c6e")))
+                    (url "https://github.com/opencog/guile-dbi")
+                    (commit (string-append "guile-dbi-" version))))
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "09ys5hj7gnj5w1iv1m194j06jk6b8sdhc8j6hcv3bprq1428kyxw"))))
+                "123m4j82bi60s1v95pjh4djb7bh6zdwmljbpyg7zq8ni2gyal7lw"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:configure-flags
-       (list (string-append
-              "--with-guile-site-dir=" %output "/share/guile/site/2.2"))
-       #:make-flags
+     `(#:modules (((guix build guile-build-system)
+                   #:select (target-guile-effective-version))
+                  ,@%gnu-build-system-modules)
+       #:imported-modules ((guix build guile-build-system)
+                           ,@%gnu-build-system-modules)
+       #:configure-flags
        (list (string-append
-              "LDFLAGS=-Wl,-rpath=" %output "/lib:"
-              (assoc-ref %build-inputs "guile-dbd-sqlite3") "/lib" ":"
-              (assoc-ref %build-inputs "guile-dbd-postgresql") "/lib"))
+              "--with-guile-site-dir=" %output "/share/guile/site/"
+              (target-guile-effective-version (assoc-ref %build-inputs "guile"))))
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'chdir
+           (lambda _
+             ;; The upstream Git repository contains all the code, so change
+             ;; to the directory specific to guile-dbi.
+             (chdir "guile-dbi")))
          (add-after 'install 'patch-extension-path
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out     (assoc-ref outputs "out"))
-                    (dbi.scm (string-append
-                              out "/share/guile/site/2.2/dbi/dbi.scm"))
-                    (ext     (string-append out "/lib/libguile-dbi")))
-               (substitute* dbi.scm (("libguile-dbi") ext))
-               #t))))))
-    (inputs
-     `(("guile-dbd-sqlite3" ,guile-dbd-sqlite3)
-       ("guile-dbd-postgresql" ,guile-dbd-postgresql))) ; only shared library, no scheme files
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (dbi.scm (string-append out "/share/guile/site/"
+                                            (target-guile-effective-version
+                                             (assoc-ref inputs "guile"))
+                                            "/dbi/dbi.scm"))
+                    (ext (string-append out "/lib/libguile-dbi")))
+               (substitute* dbi.scm (("libguile-dbi") ext))))))))
+    (native-inputs
+     (list autoconf automake libtool perl texinfo))
     (propagated-inputs
-     `(("guile" ,guile-2.2)))
+     (list guile-2.2))
     (synopsis "Guile database abstraction layer")
-    (home-page "https://web.archive.org/web/20160328232717/http://home.gna.org/guile-dbi/guile-dbi.html")
+    (home-page "https://github.com/opencog/guile-dbi")
     (description
      "guile-dbi is a library for Guile that provides a convenient interface to
 SQL databases.  Database programming with guile-dbi is generic in that the same
 programming interface is presented regardless of which database system is used.
 It currently supports MySQL, Postgres and SQLite3.")
-    (license license:gpl2+)))
+    (license license:gpl2+)
+    (native-search-paths
+     (list (search-path-specification
+            (variable "GUILE_DBD_PATH")
+            (files '("lib")))))))
 
-(define guile-dbi-bootstrap
+(define-public guile-dbd-sqlite3
   (package
     (inherit guile-dbi)
-    (name "guile-dbi-bootstrap")
-    (inputs '())
+    (name "guile-dbd-sqlite3")
     (arguments
      (substitute-keyword-arguments (package-arguments guile-dbi)
-       ((#:make-flags _) '(list))))))
-
-(define-public guile-dbd-sqlite3
-  (package
-    (name "guile-dbd-sqlite3")
-    (version "2.1.6")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://example.org") ;only hosted on Software Heritage
-                    (commit "0758c615e9e85ad76d153d5dc6179881f1f50089")))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1rwf3z6ib6nkhfnk2nw8p6fqirdx2pparcrlmsm0i2ii62plpqhb"))))
-    (build-system gnu-build-system)
-    (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("guile-dbi-bootstrap" ,guile-dbi-bootstrap))) ; only required for headers
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (replace 'chdir
+             (lambda _
+               ;; The upstream Git repository contains all the code, so change
+               ;; to the directory specific to guile-dbd-sqlite3.
+               (chdir "guile-dbd-sqlite3")))
+           (delete 'patch-extension-path)))))
     (inputs
-     `(("sqlite" ,sqlite)
-       ("zlib" ,(@ (gnu packages compression) zlib))))
+     (list sqlite zlib))
+    (native-inputs
+     (modify-inputs (package-native-inputs guile-dbi)
+       (prepend guile-dbi ; only required for headers
+                pkg-config)))
     (synopsis "Guile DBI driver for SQLite")
-    ;; Unofficial home-page.
-    ;; Added by b9cbfa52f71505de8447fefabd97f16d0a9cbde6 (2016-06)
-    (home-page "https://github.com/jkalbhenn/guile-dbd-sqlite3")
     (description
      "guile-dbi is a library for Guile that provides a convenient interface to
-SQL databases.  This package implements the interface for SQLite.")
-    (license license:gpl2+)))
+SQL databases.  This package implements the interface for SQLite.")))
 
 (define-public guile-dbd-postgresql
-  (let ((commit "e97589b6b018b206c901e4cc24db463407a4036b")
-        (revision 0))
-    (package
-      (name "guile-dbd-postgresql")
-      (version (string-append
-                "2.1.6-" (number->string revision) "." (string-take commit 7)))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/opencog/guile-dbi")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32 "0n1gv9a0kdys10a4qmnrwvg5sydwb03880asri4gqdchcj3fimni"))))
-      (build-system gnu-build-system)
-      (arguments
-       '(#:phases
-         (modify-phases %standard-phases
-           (add-after 'unpack 'chdir
+  (package
+    (inherit guile-dbi)
+    (name "guile-dbd-postgresql")
+    (arguments
+     (substitute-keyword-arguments (package-arguments guile-dbi)
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (replace 'chdir
              (lambda _
                ;; The upstream Git repository contains all the code, so change
-               ;; to the relevant directory.
-               (chdir "guile-dbd-postgresql")
-               #t))
-           (add-after 'chdir 'patch-src/Makefile.am
-             (lambda* (#:key inputs #:allow-other-keys)
-               (substitute* "src/Makefile.am"
-                 (("/usr/include")
-                  (string-append (assoc-ref inputs "postgresql") "/include")))
-               #t))
-           (add-after 'patch-src/Makefile.am 'patch-src
+               ;; to the directory specific to guile-dbd-mysql.
+               (chdir "guile-dbd-postgresql")))
+           (add-after 'chdir 'patch-src
              (lambda _
                (substitute* "src/guile-dbd-postgresql.c"
-                 (("postgresql/libpq-fe\\.h") "libpq-fe.h"))
-               #t)))))
-      (native-inputs
-       `(("pkg-config" ,pkg-config)
-         ("automake" ,automake)
-         ("autoconf" ,autoconf)
-         ("perl" ,perl)
-         ("libtool" ,libtool)
-         ("guile-dbi-bootstrap" ,guile-dbi-bootstrap)))
-      (inputs
-       `(("postgresql" ,postgresql)
-         ("zlib" ,zlib)))
-      (synopsis "Guile DBI driver for PostgreSQL")
-      (home-page
-       "https://github.com/opencog/guile-dbi/tree/master/guile-dbd-postgresql")
-      (description
-       "@code{guile-dbi} is a library for Guile that provides a convenient
+                 (("postgresql/libpq-fe\\.h") "libpq-fe.h"))))
+           (delete 'patch-extension-path)))))
+    (inputs
+     (list postgresql zlib))
+    (native-inputs
+     (modify-inputs (package-native-inputs guile-dbi)
+       (prepend guile-dbi ; only required for headers
+                )))
+    (synopsis "Guile DBI driver for PostgreSQL")
+    (description
+     "@code{guile-dbi} is a library for Guile that provides a convenient
 interface to SQL databases.  This package implements the interface for
-PostgreSQL.")
-      (license license:gpl2+))))
+PostgreSQL.")))
+
+(define-public guile-dbd-mysql
+  (package
+    (inherit guile-dbi)
+    (name "guile-dbd-mysql")
+    (arguments
+     (substitute-keyword-arguments (package-arguments guile-dbi)
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (replace 'chdir
+             (lambda _
+               ;; The upstream Git repository contains all the code, so change
+               ;; to the directory specific to guile-dbd-mysql.
+               (chdir "guile-dbd-mysql")))
+           (add-after 'chdir 'patch-src
+             (lambda _
+               (substitute* "configure.ac"
+                 (("mariadbclient") "mariadb"))
+               (substitute* "src/guile-dbd-mysql.c"
+                 (("<mariadb/") "<mysql/"))))
+           (delete 'patch-extension-path)))))
+    (inputs
+     (list `(,mariadb "dev")
+           `(,mariadb "lib") zlib))
+    (native-inputs
+     (modify-inputs (package-native-inputs guile-dbi)
+       (prepend guile-dbi ; only required for headers
+                )))
+    (synopsis "Guile DBI driver for MySQL")
+    (description "@code{guile-dbi} is a library for Guile that provides a
+convenient interface to SQL databases.  This package implements the interface
+for MySQL.")
+    (license license:gpl2+)))
 
 (define-public guile-config
   (package
@@ -1671,11 +1589,8 @@ PostgreSQL.")
                 "09028ylbddjdp3d67zdjz3pnsjqz6zs2bfck5rr3dfaa0qjap40n"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ("texinfo" ,texinfo)))
-    (inputs `(("guile" ,guile-3.0)))
+     (list autoconf automake pkg-config texinfo))
+    (inputs (list guile-3.0))
     (synopsis
      "Guile application configuration parsing library.")
     (description
@@ -1694,11 +1609,8 @@ above command-line parameters.")
   (package
     (inherit guile-config)
     (name "guile2.2-config")
-    (inputs `(("guile" ,guile-2.2)
-              ,@(alist-delete "guile" (package-inputs guile-config))))))
-
-(define-public guile3.0-config
-  (deprecated-package "guile3.0-config" guile-config))
+    (inputs (modify-inputs (package-inputs guile-config)
+              (replace "guile" guile-2.2)))))
 
 (define-public guile-hall
   (package
@@ -1762,13 +1674,10 @@ above command-line parameters.")
                           ,''("hall"))
                         #t))))))))
     (native-inputs
-      `(("autoconf" ,autoconf)
-        ("automake" ,automake)
-        ("pkg-config" ,pkg-config)
-        ("texinfo" ,texinfo)))
-    (inputs `(("guile" ,guile-3.0)))
+      (list autoconf automake pkg-config texinfo))
+    (inputs (list guile-3.0))
     (propagated-inputs
-     `(("guile-config" ,guile-config)))
+     (list guile-config))
     (synopsis "Guile project tooling")
     (description
      "Hall is a command-line application and a set of Guile libraries that
@@ -1782,16 +1691,13 @@ provides tight coupling to Guix.")
   (package
     (inherit guile-hall)
     (name "guile2.2-hall")
-    (inputs `(("guile" ,guile-2.2)
-              ,@(alist-delete "guile" (package-inputs guile-hall))))
+    (inputs (modify-inputs (package-inputs guile-hall)
+              (replace "guile" guile-2.2)))
     (propagated-inputs
      `(("guile-config" ,guile2.2-config)
        ,@(alist-delete "guile-config"
                        (package-propagated-inputs guile-hall))))))
 
-(define-public guile3.0-hall
-  (deprecated-package "guile3.0-hall" guile-hall))
-
 (define-public guile-ics
   (package
     (name "guile-ics")
@@ -1814,6 +1720,9 @@ provides tight coupling to Guix.")
                      "GUILE_PKG([3.0 2.2 2.0])\n"))
                   #t))))
     (build-system gnu-build-system)
+    ;; XXX: Tests expect 'test-runner-current' to not return #f after
+    ;; 'test-end', which is no longer the case in Guile 3.0.7.
+    (arguments '(#:tests? #f))
     (native-inputs
      `(("autoconf" ,autoconf)
        ("automake" ,automake)
@@ -1821,8 +1730,8 @@ provides tight coupling to Guix.")
        ;; Gettext brings 'AC_LIB_LINKFLAGS_FROM_LIBS'.
        ("gettext" ,gettext-minimal)
        ("pkg-config" ,pkg-config)))
-    (inputs `(("guile" ,guile-3.0) ("which" ,which)))
-    (propagated-inputs `(("guile-lib" ,guile-lib)))
+    (inputs (list guile-3.0 which))
+    (propagated-inputs (list guile-lib))
     (home-page "https://github.com/artyom-poptsov/guile-ics")
     (synopsis "Guile parser library for the iCalendar format")
     (description
@@ -1836,13 +1745,10 @@ The library is shipped with documentation in Info format and usage examples.")
   (package
     (inherit guile-ics)
     (name "guile2.2-ics")
-    (inputs `(("guile" ,guile-2.2)
-              ,@(alist-delete "guile" (package-inputs guile-ics))))
+    (inputs (modify-inputs (package-inputs guile-ics)
+              (replace "guile" guile-2.2)))
     (propagated-inputs `(("guile-lib" ,guile2.2-lib)))))
 
-(define-public guile3.0-ics
-  (deprecated-package "guile3.0-ics" guile-ics))
-
 (define-public guile-imanifest
   (let ((commit "ccd5a2111b008d778106f5595a3a585954d95d0")
         (revision "0"))
@@ -1860,11 +1766,9 @@ The library is shipped with documentation in Info format and usage examples.")
                   "0i5qllcrhdjhspyj7j9h4dc9y37d3cfbpackmybm3030qgfxqirf"))))
       (build-system guile-build-system)
       (native-inputs
-       `(("guile" ,guile-3.0)))
+       (list guile-3.0))
       (propagated-inputs
-       `(("guile-readline" ,guile-readline)
-         ("guile-colorized" ,guile-colorized)
-         ("guix" ,guix)))
+       (list guile-readline guile-colorized guix))
       (home-page "https://sr.ht/~brown121407/guile-imanifest")
       (synopsis "Interactive Guix manifests")
       (description "This package provides functions to generate Guix manifests
@@ -1875,7 +1779,7 @@ user which package sets would they like to install from it.")
 (define-public guile-wisp
   (package
     (name "guile-wisp")
-    (version "1.0.5")
+    (version "1.0.6")
     (source (origin
               (method hg-fetch)
               (uri (hg-reference
@@ -1884,7 +1788,7 @@ user which package sets would they like to install from it.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "00iknn03gf421gg3061g35fbraqrkcqypkrfn10rhlgg6j0lgk67"))))
+                "0df0vch2p6qymz3f96clrkl2gphjk6x7fbya236yzxc07hkz2j3g"))))
     (build-system gnu-build-system)
     (arguments
      `(#:modules ((guix build gnu-build-system)
@@ -1900,13 +1804,11 @@ user which package sets would they like to install from it.")
        (modify-phases %standard-phases
          (replace 'bootstrap
            (lambda _
-             (invoke "autoreconf" "-vif")
-             #t))
+             (invoke "autoreconf" "-vif")))
          (add-before 'configure 'patch-/usr/bin/env
            (lambda _
              (substitute* "Makefile.in"
-               (("/usr/bin/env bash") (which "bash")))
-             #t))
+               (("/usr/bin/env bash") (which "bash")))))
          ;; auto compilation breaks, but if we set HOME to /tmp,
          ;; that works ok
          (add-before 'check 'auto-compile-hacky-workaround
@@ -1930,8 +1832,7 @@ user which package sets would they like to install from it.")
                                   (go   (string-append object-dir base ".go")))
                              (invoke "guild" "compile" "-L" module-dir
                                      file "-o" go)))
-                         (find-files module-dir "\\.scm$"))
-               #t)))
+                         (find-files module-dir "\\.scm$")))))
          (add-after 'install 'install-emacs-files
            (assoc-ref emacs:%standard-phases 'install))
          (add-after 'install-emacs-files 'compile-emacs-files
@@ -1940,7 +1841,7 @@ user which package sets would they like to install from it.")
            (assoc-ref emacs:%standard-phases 'make-autoloads)))))
     (home-page "https://www.draketo.de/english/wisp")
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (native-inputs
      `(("autoconf" ,autoconf)
        ("automake" ,automake)
@@ -1958,15 +1859,12 @@ users and in some situations.")
   (package
     (inherit guile-wisp)
     (name "guile2.2-wisp")
-    (inputs `(("guile" ,guile-2.2)))))
-
-(define-public guile3.0-wisp
-  (deprecated-package "guile3.0-wisp" guile-wisp))
+    (inputs (list guile-2.2))))
 
 (define-public guile-udev
   (package
     (name "guile-udev")
-    (version "0.1.0")
+    (version "0.2.3")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1975,19 +1873,18 @@ users and in some situations.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1l6csncjqnx58c6c3wdl7rshnhk4pzhjq2q8lnkg483564s9w5py"))))
+                "0xvh4wscxmiqm8lnmfyh5cjzn89kv2wslkfvqvcjhinzpnpbg91x"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("gettext" ,gettext-minimal)
-       ("libtool" ,libtool)
-       ("texinfo" ,texinfo)
-       ("pkg-config" ,pkg-config)
-       ("which" ,which)))
+     (list autoconf
+           automake
+           gettext-minimal
+           libtool
+           texinfo
+           pkg-config
+           which))
     (inputs
-     `(("guile" ,guile-3.0)
-       ("eudev" ,eudev)))
+     (list guile-3.0 eudev))
     (home-page "https://github.com/artyom-poptsov/guile-udev")
     (synopsis "Guile bindings to libudev")
     (description
@@ -2031,15 +1928,11 @@ users and in some situations.")
              (string-append "--with-libgslcblas-prefix="
                             (assoc-ref %build-inputs "gsl")))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (propagated-inputs
-     `(("guile-sdl" ,guile-sdl)
-       ("guile-opengl" ,guile-opengl)))
+     (list guile-sdl guile-opengl))
     (inputs
-     `(("guile" ,guile-2.2)
-       ("gsl" ,gsl)
-       ("freeimage" ,freeimage)
-       ("mesa" ,mesa)))
+     (list guile-2.2 gsl freeimage mesa))
     (synopsis "2D/3D game engine for GNU Guile")
     (description "Sly is a 2D/3D game engine written in Guile Scheme.  Sly
 features a functional reactive programming interface and live coding
@@ -2078,7 +1971,7 @@ capabilities.")
          ("gtk" ,gtk+)
          ("glib" ,glib)))
       (propagated-inputs
-       `(("gobject-introspection" ,gobject-introspection)))
+       (list gobject-introspection))
       (arguments
        `(#:phases
          (modify-phases %standard-phases
@@ -2147,12 +2040,11 @@ object-oriented programming system, GOOPS.")
                 "0ak0bha37dfpj9kmyw1r8fj8nva639aw5xr66wr5gd3l1rqf5xhg"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (propagated-inputs
-     `(("guile" ,guile-2.2)
-       ("guile-lib" ,guile-lib)))
+     (list guile-2.2 guile-lib))
     (inputs
-     `(("libffi" ,libffi)))
+     (list libffi))
     (arguments
      `(#:configure-flags '("--disable-Werror")
        #:phases
@@ -2190,7 +2082,7 @@ provides access to that interface and its types from the Scheme level.")
                   "09q51zkw2fypad5xixskfzw2cjhjgs5cswdp3i7cpp651rb3zndh"))))
       (build-system guile-build-system)
       (native-inputs
-       `(("guile" ,guile-2.2)))
+       (list guile-2.2))
       (home-page "https://github.com/fisherdj/miniAdapton")
       (synopsis "Minimal implementation of incremental computation in Guile
 Scheme")
@@ -2227,12 +2119,12 @@ understand, extend, and port to host languages other than Scheme.")
                (when tests?
                  (invoke "guile" "-L" "." "-s" "test.scm")))))))
       (native-inputs
-       `(("guile" ,guile-3.0)))
+       (list guile-3.0))
       (home-page "https://github.com/lloda/guile-raw-strings")
       (synopsis "Guile reader extension for `raw strings'")
       (description "This package provides A Guile reader extension for `raw
 strings', it lets you write verbatim strings without having to escape double
-quotes. ")
+quotes.")
       (license license:public-domain))))
 
 (define-public guile-reader
@@ -2247,9 +2139,8 @@ quotes. ")
                 (base32
                  "1fyjckmygkhq22lq8nqc86yl5zzbqd7a944dnz5c1f6vx92b9hiq"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkgconfig" ,pkg-config)
-                     ("gperf" ,gperf)))
-    (inputs `(("guile" ,guile-3.0)))
+    (native-inputs (list pkg-config gperf))
+    (inputs (list guile-3.0))
     (synopsis "Framework for building readers for GNU Guile")
     (description
      "Guile-Reader is a simple framework for building readers for GNU Guile.
@@ -2270,7 +2161,7 @@ many readers as needed).")
   (package
     (inherit guile-reader)
     (name "guile2.2-reader")
-    (inputs `(("guile" ,guile-2.2)))))
+    (inputs (list guile-2.2))))
 
 (define-public guile-ncurses
   (package
@@ -2284,9 +2175,8 @@ many readers as needed).")
               (base32
                "038xbffalhymg26lvmzgf7ljilxz2f2zmqg5r5nfzbipfbprwjhf"))))
     (build-system gnu-build-system)
-    (inputs `(("ncurses" ,ncurses)
-              ("guile" ,guile-3.0)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list ncurses guile-3.0))
+    (native-inputs (list pkg-config))
     (arguments
      `(#:modules ((guix build gnu-build-system)
                   ((guix build guile-build-system)
@@ -2323,11 +2213,7 @@ library.")
   (package
     (inherit guile-ncurses)
     (name "guile2.2-ncurses")
-    (inputs `(("ncurses" ,ncurses)
-              ("guile" ,guile-2.2)))))
-
-(define-public guile3.0-ncurses
-  (deprecated-package "guile3.0-ncurses" guile-ncurses))
+    (inputs (list ncurses guile-2.2))))
 
 (define-public guile-ncurses/gpm
   (package
@@ -2336,13 +2222,6 @@ library.")
     (inputs `(("ncurses" ,ncurses/gpm)
               ("guile" ,guile-3.0)))))
 
-(define-public guile3.0-ncurses/gpm
-  (package
-    (inherit guile3.0-ncurses)
-    (name "guile3.0-ncurses-with-gpm")
-    (inputs `(("ncurses" ,ncurses/gpm)
-              ("guile" ,guile-3.0)))))
-
 (define-public guile-lib
   (package
     (name "guile-lib")
@@ -2374,7 +2253,7 @@ $(libdir)/guile/@GUILE_EFFECTIVE_VERSION@/site-ccache\n")))))))
        ("guile" ,guile-3.0)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("guile" ,guile-3.0)))           ;for cross-compilation
+     (list guile-3.0))           ;for cross-compilation
     (home-page "https://www.nongnu.org/guile-lib/")
     (synopsis "Collection of useful Guile Scheme modules")
     (description
@@ -2438,9 +2317,6 @@ for Guile\".  It provides the following modules:
      (alist-replace "guile" (list guile-2.2)
                     (package-inputs guile-lib)))))
 
-(define-public guile3.0-lib
-  (deprecated-package "guile3.0-lib" guile-lib))
-
 (define-public guile-minikanren
   (package
     (name "guile-minikanren")
@@ -2456,7 +2332,7 @@ for Guile\".  It provides the following modules:
                 "0r50jlpzi940jlmxyy3ddqqwmj5r12gb4bcv0ssini9v8km13xz6"))))
     (build-system guile-build-system)
     (native-inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (home-page "https://github.com/ijp/minikanren")
     (synopsis "MiniKanren declarative logic system, packaged for Guile")
     (description
@@ -2475,16 +2351,13 @@ See http://minikanren.org/ for more on miniKanren generally.")
   (package
     (inherit guile-minikanren)
     (name "guile2.0-minikanren")
-    (native-inputs `(("guile" ,guile-2.0)))))
+    (native-inputs (list guile-2.0))))
 
 (define-public guile2.2-minikanren
   (package
     (inherit guile-minikanren)
     (name "guile2.2-minikanren")
-    (native-inputs `(("guile" ,guile-2.2)))))
-
-(define-public guile3.0-minikanren
-  (deprecated-package "guile3.0-minikanren" guile-minikanren))
+    (native-inputs (list guile-2.2))))
 
 (define-public guile-irregex
   (package
@@ -2517,7 +2390,7 @@ See http://minikanren.org/ for more on miniKanren generally.")
                       #t)))
        #:source-directory "src"))
     (native-inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (home-page "http://synthcode.com/scheme/irregex")
     (synopsis "S-expression based regular expressions")
     (description
@@ -2530,16 +2403,13 @@ inspired by the SCSH regular expression system.")
   (package
     (inherit guile-irregex)
     (name "guile2.0-irregex")
-    (native-inputs `(("guile" ,guile-2.0)))))
+    (native-inputs (list guile-2.0))))
 
 (define-public guile2.2-irregex
   (package
     (inherit guile-irregex)
     (name "guile2.2-irregex")
-    (native-inputs `(("guile" ,guile-2.2)))))
-
-(define-public guile3.0-irregex
-  (deprecated-package "guile3.0-irregex" guile-irregex))
+    (native-inputs (list guile-2.2))))
 
 (define-public haunt
   (package
@@ -2594,15 +2464,13 @@ inspired by the SCSH regular expression system.")
                                          deps))))
                              #t)))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("texinfo" ,texinfo)))
+     (list pkg-config texinfo))
     (inputs
      ;; Depend on the latest Guile to avoid bytecode compatibility issues when
      ;; using modules built against the latest version.
-     `(("guile" ,guile-3.0-latest)))
+     (list guile-3.0-latest))
     (propagated-inputs
-     `(("guile-reader" ,guile-reader)
-       ("guile-commonmark" ,guile-commonmark)))
+     (list guile-reader guile-commonmark))
     (synopsis "Functional static site generator")
     (description "Haunt is a static site generator written in Guile
 Scheme.  Haunt features a functional build system and an extensible
@@ -2614,7 +2482,7 @@ interface for reading articles in any format.")
   (package
     (inherit haunt)
     (name "guile2.2-haunt")
-    (inputs `(("guile" ,guile-2.2)))
+    (inputs (list guile-2.2))
     (propagated-inputs
      `(("guile-reader" ,guile2.2-reader)
        ("guile-commonmark" ,guile2.2-commonmark)))))
@@ -2623,10 +2491,7 @@ interface for reading articles in any format.")
   (package
     (inherit haunt)
     (name "guile2.0-haunt")
-    (inputs `(("guile" ,guile-2.0)))))
-
-(define-public guile3.0-haunt
-  (deprecated-package "guile3.0-haunt" haunt))
+    (inputs (list guile-2.0))))
 
 (define-public guile-redis
   (package
@@ -2646,10 +2511,7 @@ interface for reading articles in any format.")
     (arguments
      '(#:make-flags '("GUILE_AUTO_COMPILE=0")))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ("guile" ,guile-3.0)))
+     (list autoconf automake pkg-config guile-3.0))
     (synopsis "Redis client library for Guile")
     (description "Guile-redis provides a Scheme interface to the Redis
 key-value cache and store.")
@@ -2659,9 +2521,8 @@ key-value cache and store.")
   (package
     (inherit guile-redis)
     (name "guile2.2-redis")
-    (native-inputs `(("guile" ,guile-2.2)
-                     ,@(alist-delete "guile"
-                                     (package-native-inputs guile-redis))))))
+    (native-inputs (modify-inputs (package-native-inputs guile-redis)
+                     (replace "guile" guile-2.2)))))
 
 (define-public guile2.0-redis
   (package
@@ -2679,9 +2540,8 @@ key-value cache and store.")
                 "(rnrs io ports)"))
              #t)))
        ,@(package-arguments guile-redis)))
-    (native-inputs `(("guile" ,guile-2.0)
-                     ,@(alist-delete "guile"
-                                     (package-native-inputs guile-redis))))))
+    (native-inputs (modify-inputs (package-native-inputs guile-redis)
+                     (replace "guile" guile-2.0)))))
 
 (define-public guile-commonmark
   (package
@@ -2718,9 +2578,9 @@ key-value cache and store.")
                (("\\(exit.*") ""))
              #t)))))
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "CommonMark parser for Guile")
     (description
      "guile-commonmark is a library for parsing CommonMark, a fully specified
@@ -2735,16 +2595,13 @@ is no support for parsing block and inline level HTML.")
   (package
     (inherit guile-commonmark)
     (name "guile2.2-commonmark")
-    (inputs `(("guile" ,guile-2.2)))))
+    (inputs (list guile-2.2))))
 
 (define-public guile2.0-commonmark
   (package
     (inherit guile-commonmark)
     (name "guile2.0-commonmark")
-    (inputs `(("guile" ,guile-2.0)))))
-
-(define-public guile3.0-commonmark
-  (deprecated-package "guile3.0-commonmark" guile-commonmark))
+    (inputs (list guile-2.0))))
 
 (define-public mcron
   (package
@@ -2780,7 +2637,7 @@ is no support for parsing block and inline level HTML.")
                      ("tzdata" ,tzdata-for-tests)
                      ("guile-native"              ;for 'guild compile'
                       ,@(assoc-ref (package-inputs this-package) "guile"))))
-    (inputs `(("guile" ,guile-3.0)))
+    (inputs (list guile-3.0))
     (home-page "https://www.gnu.org/software/mcron/")
     (synopsis "Run jobs at scheduled times")
     (description
@@ -2794,10 +2651,7 @@ format is also supported.")
   (package
     (inherit mcron)
     (name "guile2.2-mcron")
-    (inputs `(("guile" ,guile-2.2)))))
-
-(define-public guile3.0-mcron
-  (deprecated-package "guile3.0-mcron" mcron))
+    (inputs (list guile-2.2))))
 
 (define-public guile-picture-language
   (let ((commit "a1322bf11945465241ca5b742a70893f24156d12")
@@ -2816,16 +2670,11 @@ format is also supported.")
                   "03i528z92ainccgm28shg4haxiav5x4cyhyi5dggq1rm027vbm99"))))
       (build-system gnu-build-system)
       (inputs
-       `(("guile" ,guile-3.0)))
+       (list guile-3.0))
       (propagated-inputs
-       `(("guile-cairo" ,guile-cairo)
-         ("guile-rsvg" ,guile-rsvg)))
+       (list guile-cairo guile-rsvg))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("librsvg" ,librsvg)
-         ("pkg-config" ,pkg-config)
-         ("texinfo" ,texinfo)))
+       (list autoconf automake librsvg pkg-config texinfo))
       (home-page "https://git.elephly.net/software/guile-picture-language.git")
       (synopsis "Picture language for Guile")
       (description
@@ -2839,14 +2688,9 @@ The picture values can directly be displayed in Geiser.")
   (package
     (inherit guile-picture-language)
     (name "guile2.2-picture-language")
-    (inputs `(("guile" ,guile-2.2)))
+    (inputs (list guile-2.2))
     (propagated-inputs
-     `(("guile-cairo" ,guile2.2-cairo)
-       ("guile-rsvg" ,guile2.2-rsvg)))))
-
-(define-public guile3.0-picture-language
-  (deprecated-package "guile3.0-picture-language"
-                      guile-picture-language))
+     (list guile2.2-cairo guile2.2-rsvg))))
 
 (define-public guile-studio
   (let ((commit "dd0ad42e51feafebda7cc29afe7c8bc7a182a842")
@@ -2890,25 +2734,25 @@ The picture values can directly be displayed in Geiser.")
            (delete 'configure)
            (delete 'install))))
       (inputs
-       `(("guile" ,guile-3.0)
-         ("guile-picture-language" ,guile-picture-language)
-         ("emacs" ,emacs)
-         ("emacs-f" ,emacs-f)                       ; needed by doom-modeline
-         ("emacs-memoize" ,emacs-memoize)           ; needed by all-the-icons
-         ("emacs-all-the-icons" ,emacs-all-the-icons) ; needed by doom-modeline
-         ("emacs-all-the-icons-dired" ,emacs-all-the-icons-dired)
-         ("emacs-dired-sidebar" ,emacs-dired-sidebar)
-         ("emacs-doom-modeline" ,emacs-doom-modeline)
-         ("emacs-modus-themes" ,emacs-modus-themes)
-         ("emacs-geiser" ,emacs-geiser)
-         ("emacs-geiser-guile" ,emacs-geiser-guile)
-         ("emacs-company" ,emacs-company)
-         ("emacs-ivy" ,emacs-ivy)
-         ("emacs-flycheck" ,emacs-flycheck)
-         ("emacs-flycheck-guile" ,emacs-flycheck-guile)
-         ("emacs-paren-face" ,emacs-paren-face)))
+       (list guile-3.0
+             guile-picture-language
+             emacs
+             emacs-f ; needed by doom-modeline
+             emacs-memoize ; needed by all-the-icons
+             emacs-all-the-icons ; needed by doom-modeline
+             emacs-all-the-icons-dired
+             emacs-dired-sidebar
+             emacs-doom-modeline
+             emacs-modus-themes
+             emacs-geiser
+             emacs-geiser-guile
+             emacs-company
+             emacs-ivy
+             emacs-flycheck
+             emacs-flycheck-guile
+             emacs-paren-face))
       (native-inputs
-       `(("texinfo" ,texinfo)))
+       (list texinfo))
       (home-page "https://gnu.org/software/guile")
       (synopsis "IDE for Guile")
       (description
@@ -2943,11 +2787,9 @@ completion, a simple mode line, etc.")
              (delete-file "parser/stis-parser/lang/.#calc.scm")
              #t)))))
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config))
     (home-page "https://gitlab.com/tampe/stis-parser")
     (synopsis "Parser combinator framework")
     (description
@@ -2980,7 +2822,7 @@ chunks can be expressions as well as simple tokens.")
                (("/usr/local/lib/guile")
                 (string-append (assoc-ref outputs "out") "/lib/guile"))
                (("/usr/local/include/guile")
-                (string-append (assoc-ref inputs "guile") "/include/guile"))
+                (search-input-directory inputs "/include/guile"))
                (("-L/usr/local/lib")
                 (string-append "-L" (assoc-ref inputs "guile") "/lib")))
              #t))
@@ -2992,12 +2834,9 @@ chunks can be expressions as well as simple tokens.")
                   (format #f "\"~a/lib/guile/3.0/extensions/libguile-persist\"" out)))
                #t))))))
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (home-page "https://gitlab.com/tampe/guile-persist")
     (synopsis "Persistence programming framework for Guile")
     (description
@@ -3061,15 +2900,9 @@ serializing continuations or delimited continuations.")
                    (,compiled-path)))
                #t))))))
     (inputs
-     `(("guile" ,guile-3.0)
-       ("guile-persist" ,guile-persist)
-       ("guile-readline" ,guile-readline)
-       ("guile-stis-parser" ,guile-stis-parser)))
+     (list guile-3.0 guile-persist guile-readline guile-stis-parser))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (synopsis "Python implementation in Guile")
     (description
      "This package allows you to compile a Guile Python file to any target
@@ -3099,9 +2932,9 @@ from @code{tree-il}.")
                 "guilemoddir = $(datadir)/guile/site/$(GUILE_EFFECTIVE_VERSION)\n"))
              #t)))))
     (inputs
-     `(("guile" ,guile-2.2)))
+     (list guile-2.2))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://gitlab.com/brandoninvergo/guile-file-names")
     (synopsis "Manipulate file names")
     (description
@@ -3116,14 +2949,14 @@ list of components.  This module takes care of that for you.")
 (define-public guile-gi
   (package
     (name "guile-gi")
-    (version "0.3.1")
+    (version "0.3.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://lonelycactus.com/tarball/guile_gi-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "1ljcfyar1nb6h4jskxnnzrcxcsblawc50qqfdn8cax3zqfskmvzj"))))
+                "019mbhgyga57k2074kg97mh3qsa8ny9l0kjgqids8cg3c6vbjdby"))))
     (build-system glib-or-gtk-build-system)
     (arguments
      `(#:configure-flags '("--with-gnu-filesystem-hierarchy")
@@ -3131,8 +2964,19 @@ list of components.  This module takes care of that for you.")
                   (guix build utils)
                   (ice-9 popen)
                   (ice-9 rdelim))
+       #:disallowed-references ,(list gtk+ webkitgtk)
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'remove-dotted-circle-from-combining-character
+           ;; The test/string.scm files contain ◌̀, which is a dotted circle
+           ;; (U+25cc) followed by an upper combining character (U+0300). The
+           ;; old guile 3.0.2 reader incorrectly ignores the dotted circle,
+           ;; and parses it as the combining character alone, but the new
+           ;; guile reader does not.
+           ;; See https://github.com/spk121/guile-gi/issues/112
+           (lambda* _
+             (substitute* "test/string.scm"
+               (("#\\\\◌̀") "#\\x0300"))))
          (add-after 'unpack 'patch-references-to-extension
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((effective (read-line
@@ -3160,19 +3004,13 @@ list of components.  This module takes care of that for you.")
              (setenv "DISPLAY" ":1")
              #t)))))
     (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("glib:bin" ,glib "bin") ; for glib-compile-resources
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)
-       ("xorg-server" ,xorg-server)))
-    (propagated-inputs
-     `(("glib" ,glib)
-       ("gobject-introspection" ,gobject-introspection)
-       ("gssettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gtk+" ,gtk+)
-       ("guile-lib" ,guile-lib)
-       ("webkitgtk" ,webkitgtk)))
-    (inputs `(("guile" ,guile-3.0)))
+     (list gettext-minimal
+           `(,glib "bin") ; for glib-compile-resources
+           libtool pkg-config xorg-server))
+    (propagated-inputs (list gobject-introspection))
+    (inputs (list guile-3.0 glib
+                  ;; For tests, only relevant when compiling natively
+                  gtk+ webkitgtk))
     (home-page "https://github.com/spk121/guile-gi")
     (synopsis "GObject bindings for Guile")
     (description
@@ -3186,11 +3024,8 @@ pre-alpha code.")
     (inherit guile-gi)
     (name "guile2.2-gi")
     (inputs
-     `(("guile" ,guile-2.2)
-       ,@(alist-delete "guile" (package-inputs guile-gi))))))
-
-(define-public guile3.0-gi
-  (deprecated-package "guile3.0-gi" guile-gi))
+     (modify-inputs (package-inputs guile-gi)
+       (replace "guile" guile-2.2)))))
 
 (define-public guile-srfi-89
   (package
@@ -3208,7 +3043,7 @@ pre-alpha code.")
        (file-name (git-file-name name version))))
     (build-system guile-build-system)
     (native-inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (home-page "https://gitlab.com/mjbecze/guile-srfi-89")
     (synopsis "Hygienic implementation of SRFI-89 for Guile")
     (description
@@ -3232,7 +3067,7 @@ parameters, which  define* and lambda* special forms")
        (file-name (git-file-name name version))))
     (build-system guile-build-system)
     (native-inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (home-page "https://gitlab.com/mjbecze/guile-srfi-145")
     (synopsis "SRFI-145 port for Guile")
     (description
@@ -3256,11 +3091,9 @@ denote the invalidity of certain code paths in a Scheme program.")
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config))
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (home-page "https://gitlab.com/samplet/guile-srfi-158")
     (synopsis "SRFI 158 (Generators and Accumulators) for Guile")
     (description "This package provides an implementation of SRFI 158
@@ -3291,7 +3124,7 @@ implementation in a thin Guile compatibility layer.")
        ;; should not be compiled separately, but they must be installed.
        '(#:not-compiled-file-regexp "-impl\\.scm$"))
       (inputs
-       `(("guile" ,guile-2.2)))
+       (list guile-2.2))
       (synopsis "Formatting combinators for Guile")
       (description
        "The @code{(srfi-159)} module and its sub-modules implement the
@@ -3328,9 +3161,9 @@ more expressive and flexible than the traditional @code{format} procedure.")
       (arguments
        '(#:not-compiled-file-regexp "body\\.scm$"))
       (native-inputs
-       `(("guile" ,guile-3.0)))
+       (list guile-3.0))
       (propagated-inputs
-       `(("guile-srfi-145" ,guile-srfi-145)))
+       (list guile-srfi-145))
       (home-page "https://srfi.schemers.org/srfi-180/")
       (synopsis "JSON parser and printer for Guile")
       (description
@@ -3339,6 +3172,51 @@ It also supports parsing JSON objects that may be bigger than memory with a stre
 API.")
       (license license:expat))))
 
+(define-public guile-srfi-189
+  (let ((commit "a0e3786702956c9e510d92746474ac988c2010ec")
+        (revision "0"))
+    (package
+      (name "guile-srfi-189")
+      (version (git-version "0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               ;; This is a fork of:
+               ;; (url "https://github.com/scheme-requests-for-implementation/srfi-189")
+               ;; Upstream merge requested at:
+               ;; https://github.com/scheme-requests-for-implementation/srfi-189/pull/21
+               ;; TODO switch over to the official repo when the PR gets merged
+               (url "https://github.com/attila-lendvai-patches/srfi-189")
+               (commit commit)))
+         (sha256
+          (base32
+           "0iqv4sjwbp4k87r9l9abzbs5yjcljm69m91kb1ypb03b0rx7napy"))
+         (modules '((guix build utils)))
+         (snippet
+          '(begin
+             (delete-file "test-syntax.scm")
+             (delete-file "test.scm")))
+         (file-name (git-file-name name version))))
+      (build-system guile-build-system)
+      (arguments
+       '(#:not-compiled-file-regexp "srfi/189\\.scm$")) ; it's INCLUDE'd
+      (native-inputs
+       (list guile-3.0))
+      (propagated-inputs
+       (list guile-srfi-145))
+      (home-page "https://srfi.schemers.org/srfi-189/")
+      (synopsis "Scheme SRFI implementation of Maybe and Either")
+      (description
+       "This SRFI defines two disjoint immutable container types known as
+Maybe and Either, both of which can contain objects collectively known
+as their payload.  A Maybe object is either a Just object or the unique
+object Nothing (which has no payload); an Either object is either a Right
+object or a Left object.  Maybe represents the concept of optional values;
+Either represents the concept of values which are either correct (Right)
+or errors (Left).")
+      (license license:expat))))
+
 (define-public emacsy
   (package
     (name "emacsy")
@@ -3379,14 +3257,14 @@ API.")
        ("perl" ,perl)
        ("pkg-config" ,pkg-config)
        ("texinfo" ,texinfo)
-       ("texlive" ,(texlive-union (list texlive-generic-epsf)))))
+       ("texlive" ,(texlive-updmap.cfg (list texlive-epsf)))))
     (inputs
-     `(("dbus-glib" ,dbus-glib)
-       ("guile" ,guile-3.0)
-       ("guile-lib" ,guile-lib)
-       ("guile-readline" ,guile-readline)
-       ("freeglut" ,freeglut)
-       ("webkitgtk" ,webkitgtk)))
+     (list dbus-glib
+           guile-3.0
+           guile-lib
+           guile-readline
+           freeglut
+           webkitgtk))
     (propagated-inputs
      `(("glib-networking" ,glib-networking)
        ("gssettings-desktop-schemas" ,gsettings-desktop-schemas)))
@@ -3498,10 +3376,7 @@ in C using Gtk+-3 and WebKitGtk.")
                     #t))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("pkg-config" ,pkg-config)
-         ("guile" ,guile-2.2)))
+       (list autoconf automake pkg-config guile-2.2))
       (synopsis "JPEG file parsing library for Guile")
       (description
        "Guile-JPEG is a Scheme library to parse JPEG image files and to
@@ -3569,6 +3444,16 @@ perform geometrical transforms on JPEG images.")
                   (srfi srfi-26))
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'fix-webkitgtk
+           (lambda _
+             ;; Adapt to the version we have in Guix.
+             (substitute* "configure.ac"
+               (("webkit2gtk-4\\.0") "webkit2gtk-4.1")
+               (("webkit2gtk-web-extension-4\\.0")
+                "webkit2gtk-web-extension-4.1"))
+
+             (substitute* "typelib/Makefile.am"
+               (("WebKit2-4\\.0") "WebKit2-4.1"))))
          (add-before 'check 'start-xorg-server
            (lambda* (#:key inputs #:allow-other-keys)
              ;; The test suite requires a running X server.
@@ -3659,11 +3544,9 @@ feature-set, fully programmable in Guile Scheme.")
                      (string-append (assoc-ref inputs "vigra-c") "/lib"))
              #t)))))
     (inputs
-     `(("vigra" ,vigra)
-       ("vigra-c" ,vigra-c)
-       ("guile" ,guile-2.2)))
+     (list vigra vigra-c guile-2.2))
     (native-inputs
-     `(("texlive" ,(texlive-union (list texlive-booktabs
+     `(("texlive" ,(texlive-updmap.cfg (list texlive-booktabs
                                         texlive-lm
                                         texlive-siunitx
                                         texlive-standalone
@@ -3713,8 +3596,7 @@ clean and easy to use high level API.")
                (invoke "guile" "-L" "mod"
                        "-s" "test/test-ffi-fftw.scm"))))))
       (inputs
-       `(("fftw" ,fftw)
-         ("guile" ,guile-2.2)))
+       (list fftw guile-2.2))
       (home-page "https://github.com/lloda/guile-ffi-fftw/")
       (synopsis "Access FFTW through Guile's FFI")
       (description "This is a minimal set of Guile FFI bindings for the FFTW
@@ -3742,9 +3624,9 @@ anything other than straight complex DFTs.")
        (modify-phases %standard-phases
          (delete 'build))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("guile" ,guile-2.2)))
+     (list guile-2.2))
     (home-page "https://ngyro.com/software/srfi-64-driver.html")
     (synopsis "Automake test driver for SRFI 64 test suites")
     (description "This package provides an Automake test driver that can
@@ -3765,9 +3647,9 @@ tests being run, resulting clearer and more specific output.")
                 "109p4n39ln44cxvwdccf9kgb96qx54makvd2ir521ssz6wchjyag"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (home-page "https://ngyro.com/software/guile-semver.html")
     (synopsis "Semantic Versioning (SemVer) for Guile")
     (description "This Guile library provides tools for reading,
@@ -3775,15 +3657,12 @@ comparing, and writing Semantic Versions.  It also includes ranges in
 the style of the Node Package Manager (NPM).")
     (license license:gpl3+)))
 
-(define-public guile3.0-semver
-  (deprecated-package "guile3.0-semver" guile-semver))
-
 (define-public guile2.2-semver
   (package
     (inherit guile-semver)
     (name "guile2.2-semver")
     (inputs
-     `(("guile" ,guile-2.2)))))
+     (list guile-2.2))))
 
 (define-public guile-hashing
   (package
@@ -3828,7 +3707,7 @@ the style of the Node Package Manager (NPM).")
                       (rename-file "private" "hashing/private")
                       #t)))))
     (native-inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (synopsis "Cryprographic hash functions implemented in Scheme")
     (description
      "The @code{(hashing @dots{})} modules implement cryptographic hash
@@ -3841,10 +3720,7 @@ SHA-512).")
     (inherit guile-hashing)
     (name "guile2.2-hashing")
     (native-inputs
-     `(("guile" ,guile-2.2)))))
-
-(define-public guile3.0-hashing
-  (deprecated-package "guile3.0-hashing" guile-hashing))
+     (list guile-2.2))))
 
 (define-public guile-packrat
   (package
@@ -3873,7 +3749,7 @@ SHA-512).")
                          (object->string '(only (guile) error))))
                       #t)))))
     (native-inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (synopsis "Packrat parser library in R6RS Scheme")
     (description
      "This is an R6RS Scheme adaptation of the
@@ -3933,9 +3809,9 @@ and space linear in the size of the input text.")
 
                       #t)))))
     (native-inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (propagated-inputs
-     `(("guile-packrat" ,guile-packrat)))
+     (list guile-packrat))
     (synopsis "D-Bus protocol implementation in R6RS Scheme")
     (description
      "AC/D-Bus is an implementation of the D-Bus wire protocol.  D-Bus is an
@@ -3971,15 +3847,11 @@ gnome-keyring, and many more.")
                     #t))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("pkg-config" ,pkg-config)
-         ("texinfo" ,texinfo)))
+       (list autoconf automake pkg-config texinfo))
       (inputs
-       `(("guile" ,guile-3.0)))
+       (list guile-3.0))
       (propagated-inputs
-       `(("guile-irregex" ,guile-irregex)
-         ("guile-gcrypt" ,guile-gcrypt)))
+       (list guile-irregex guile-gcrypt))
       (home-page "https://notabug.org/cwebber/guile-webutils")
       (synopsis "Web application authoring utilities for Guile")
       (description
@@ -3992,10 +3864,9 @@ as signed sessions, multipart message support, etc.")
     (inherit guile-webutils)
     (name "guile2.2-webutils")
     (inputs
-     `(("guile" ,guile-2.2)))
+     (list guile-2.2))
     (propagated-inputs
-     `(("guile-irregex" ,guile2.2-irregex)
-       ("guile-gcrypt" ,guile2.2-gcrypt)))))
+     (list guile2.2-irregex guile2.2-gcrypt))))
 
 (define-public guile-lens
   (let ((commit "14b15d07255f9d3f55d40a3b750d13c9ee3a154f")
@@ -4021,12 +3892,12 @@ as signed sessions, multipart message support, etc.")
                (setenv "HOME" "/tmp")   ; for ~/.hall
                (invoke "hall" "dist" "-x"))))))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("guile" ,guile-3.0)
-         ("guile-hall" ,guile-hall)
-         ("pkg-config" ,pkg-config)
-         ("texinfo" ,texinfo)))
+       (list autoconf
+             automake
+             guile-3.0
+             guile-hall
+             pkg-config
+             texinfo))
       (home-page "https://gitlab.com/a-sassmannshausen/guile-lens.git")
       (synopsis "Composable lenses for data structures in Guile")
       (description
@@ -4041,8 +3912,8 @@ over, or update a value in arbitrary data structures.")
     (inherit guile-lens)
     (name "guile2.2-lens")
     (native-inputs
-     `(("guile" ,guile-2.2)
-       ,@(alist-delete "guile" (package-native-inputs guile-lens))))))
+     (modify-inputs (package-native-inputs guile-lens)
+       (replace "guile" guile-2.2)))))
 
 (define-public guile-xapian
   (package
@@ -4057,21 +3928,26 @@ over, or update a value in arbitrary data structures.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "16k61f1jn3g48jaf3730b9l0izr5j933jzyri73nmcnjd09gm35i"))))
+         "16k61f1jn3g48jaf3730b9l0izr5j933jzyri73nmcnjd09gm35i"))
+       (modules '((guix build utils)))
+       (snippet
+        ;; Guile >= 3.0.7 no longer uses libltdl so we need to explicitly add
+        ;; ".libs" so that 'load-extension' finds the '.so' file.
+        '(substitute* "pre-inst-env.in"
+           (("^LD_LIBRARY_PATH=.*$")
+            "LD_LIBRARY_PATH=\"$abs_top_builddir/.libs\"\n")))))
     (build-system gnu-build-system)
     (arguments
      '(#:make-flags '("GUILE_AUTO_COMPILE=0"))) ; to prevent guild warnings
     (inputs
-     `(("guile" ,guile-3.0)
-       ("xapian" ,xapian)
-       ("zlib" ,zlib)))
+     (list guile-3.0 xapian zlib))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("autoconf-archive" ,autoconf-archive)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)
-       ("swig" ,swig)))
+     (list autoconf
+           autoconf-archive
+           automake
+           libtool
+           pkg-config
+           swig))
     (synopsis "Guile bindings for Xapian")
     (description "@code{guile-xapian} provides Guile bindings for Xapian, a
 search engine library.  Xapian is a highly adaptable toolkit which allows
@@ -4085,11 +3961,8 @@ models and also supports a rich set of boolean query operators.")
     (inherit guile-xapian)
     (name "guile2.2-xapian")
     (inputs
-     `(("guile" ,guile-2.2)
-       ,@(alist-delete "guile" (package-inputs guile-xapian))))))
-
-(define-public guile3.0-xapian
-  (deprecated-package "guile3.0-xapian" guile-xapian))
+     (modify-inputs (package-inputs guile-xapian)
+       (replace "guile" guile-2.2)))))
 
 (define-public guile-torrent
   (package
@@ -4106,14 +3979,14 @@ models and also supports a rich set of boolean query operators.")
                       "1yiagi55ncq1x7s9n7salzywjm4l96y3n7y3s47a9anvz87mrmim"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("guile" ,guile-2.2)
-       ("texinfo" ,texinfo)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf
+           automake
+           guile-2.2
+           texinfo
+           perl
+           pkg-config))
     (propagated-inputs
-     `(("guile-gcrypt" ,guile-gcrypt)))
+     (list guile-gcrypt))
     (home-page "https://github.com/o-nly/torrent")
     (synopsis "Torrent library for GNU Guile")
     (description "This package provides facilities for working with
@@ -4140,12 +4013,9 @@ according to Bitorrent BEP003.")
       (arguments
        `(#:configure-flags '("--enable-gnutls=yes")))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("texinfo" ,texinfo)))
+       (list autoconf automake texinfo))
       (inputs
-       `(("gnutls" ,gnutls)
-         ("guile" ,guile-3.0)))
+       (list gnutls guile-3.0))
       (home-page "https://github.com/rekado/guile-irc")
       (synopsis "IRC library for Guile")
       (description "This package provides a Guile library for @dfn{Internet
@@ -4174,20 +4044,15 @@ Relay Chat} (IRC).")
        '(#:make-flags
          '("GUILE_AUTO_COMPILE=0")))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("pkg-config" ,pkg-config)))
+       (list autoconf automake pkg-config))
       (inputs
-       `(("guile" ,guile-3.0)))
+       (list guile-3.0))
       (synopsis "Websocket server/client for Guile")
       (description "Guile-websocket provides an implementation of the
 WebSocket protocol as defined by RFC 6455.")
       (home-page "https://git.dthompson.us/guile-websocket.git")
       (license license:lgpl3+))))
 
-(define-public guile3.0-websocket
-  (deprecated-package "guile3.0-websocket" guile-websocket))
-
 (define-public guile-rdf
   (package
     (name "guile-rdf")
@@ -4206,12 +4071,9 @@ WebSocket protocol as defined by RFC 6455.")
     (arguments
      `(#:tests? #f)); tests require network
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (native-inputs
-     `(("automake" ,automake)
-       ("autoconf" ,autoconf)
-       ("pkg-config" ,pkg-config)
-       ("texinfo" ,texinfo)))
+     (list automake autoconf pkg-config texinfo))
     (home-page "https://framagit.org/tyreunom/guile-rdf")
     (synopsis "Guile implementation of the RDF abstract and concrete syntaxes")
     (description "Guile RDF is an implementation of the RDF (Resource Description
@@ -4247,12 +4109,9 @@ manipulating graphs and datasets.")
        ("guile-json" ,guile-json-4)
        ("guile-rdf" ,guile-rdf)))
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (native-inputs
-     `(("automake" ,automake)
-       ("autoconf" ,autoconf)
-       ("pkg-config" ,pkg-config)
-       ("texinfo" ,texinfo)))
+     (list automake autoconf pkg-config texinfo))
     (home-page "https://framagit.org/tyreunom/guile-jsonld")
     (synopsis "Guile implementation of the JsonLD API specification")
     (description "Guile JsonLD is an implementation of the JsonLD (Json for
@@ -4298,7 +4157,7 @@ more objects or strings, represented by a Json object or an IRI.")
                                 files)
                       #t)))))
     (native-inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (home-page "https://github.com/weinholt/struct-pack")
     (synopsis "R6RS library for working with packed byte structures")
     (description
@@ -4342,9 +4201,9 @@ similar to struct in Python or pack and unpack in Perl.")
                                 files)
                       #t)))))
     (native-inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (propagated-inputs
-     `(("guile-struct-pack" ,guile-struct-pack)))
+     (list guile-struct-pack))
     (home-page "https://github.com/weinholt/machine-code")
     (synopsis "Tools that relate to machine code and object formats")
     (description
@@ -4390,7 +4249,7 @@ object formats and related areas.")
                                 files)
                       #t)))))
     (native-inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (home-page "https://github.com/weinholt/laesare")
     (synopsis "R6RS Scheme library that provides a reader")
     (description
@@ -4444,14 +4303,9 @@ errors.")
                           out (target-guile-effective-version))))
                #t))))))
       (inputs
-       `(("guile" ,guile-3.0)
-         ("avahi" ,avahi)))
+       (list guile-3.0 avahi))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("libtool" ,libtool)
-         ("pkg-config" ,pkg-config)
-         ("texinfo" ,texinfo)))
+       (list autoconf automake libtool pkg-config texinfo))
       (synopsis "Guile bindings to Avahi")
       (description
        "This package provides bindings for Avahi.  It allows programmers to
@@ -4461,45 +4315,6 @@ Discovery (DNS-SD).")
       (home-page "https://www.nongnu.org/guile-avahi/")
       (license license:lgpl3+))))
 
-(define-public guile-mkdir-p
-  (package
-    (name "guile-mkdir-p")
-    (version "1.0.1")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://code.divoplade.fr/mkdir-p.git")
-             (commit (string-append "v" version))))
-       (sha256
-        (base32 "01k20rjcv6p0spmw8ls776aar6bfw0jxw46d2n12w0cb2p79xjv8"))
-       (file-name (git-file-name name version))
-       (snippet
-        `(begin
-           (with-output-to-file ".tarball-version"
-             (lambda _ (format #t "~a~%" ,version)))
-           #t))))
-    (build-system gnu-build-system)
-    (arguments `())
-    (native-inputs
-     `(("guile" ,guile-3.0)
-       ("texinfo" ,texinfo)
-       ("autoconf" ,autoconf)
-       ("autoconf-archive" ,autoconf-archive)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ("gettext" ,gettext-minimal)))
-    (inputs `(("guile" ,guile-3.0)))
-    (synopsis "Implementation of a recursive @code{mkdir} for Guile")
-    (description
-     "This package provides within the @code{(mkdir-p)} module the
-@code{mkdir-p} function that tries to create the chain of directories
-recursively.  It also provides new versions of @code{open-output-file},
-@code{call-with-output-file} and @code{with-output-to-file} to create the
-directory of its argument if it does not exist.")
-    (home-page "https://mkdir-p.divoplade.fr")
-    (license license:asl2.0)))
-
 (define-public guile-jwt
   (package
     (name "guile-jwt")
@@ -4516,13 +4331,11 @@ directory of its argument if it does not exist.")
          "1p8sapiv5im18rjnzc8xnw6y7dr661rycf9g10z5ww0dl4rfz3z1"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config))
     (propagated-inputs
-     `(("guile-json" ,guile-json-4)))
+     (list guile-json-4))
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (home-page "https://github.com/aconchillo/guile-jwt")
     (synopsis "JSON Web Token library for Guile")
     (description
@@ -4547,12 +4360,9 @@ JWT.  Supported algorithms: HS256, HS384, HS512.")
     (build-system gnu-build-system)
     (arguments `())
     (native-inputs
-      `(("autoconf" ,autoconf)
-        ("automake" ,automake)
-        ("pkg-config" ,pkg-config)
-        ("texinfo" ,texinfo)))
-    (inputs `(("guile" ,guile-3.0)))
-    (propagated-inputs `(("libsodium" ,libsodium)))
+      (list autoconf automake pkg-config texinfo))
+    (inputs (list guile-3.0))
+    (propagated-inputs (list libsodium))
     (synopsis "Guile bindings to the libsodium cryptographic library")
     (description
      "This package provides Guile bindings to the libsodium cryptographic library
@@ -4576,15 +4386,15 @@ tools.")
     (build-system gnu-build-system)
     (arguments '())
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ("texinfo" ,texinfo)
-       ;; test dependency
-       ("guile-srfi-180" ,guile-srfi-180)))
-    (inputs `(("guile" ,guile-3.0)))
+     (list autoconf
+           automake
+           pkg-config
+           texinfo
+           ;; test dependency
+           guile-srfi-180))
+    (inputs (list guile-3.0))
     (propagated-inputs
-     `(("guile-sodium" ,guile-sodium)))
+     (list guile-sodium))
     (synopsis "Guile implementation of the Encoding for Robust Immutable Storage (ERIS)")
     (description
      "Guile-ERIS is the reference implementation of the Encoding for Robust
@@ -4612,7 +4422,7 @@ read-capability.")
     (arguments
      `(#:compile-flags '("--r6rs")))
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (home-page "https://gitlab.com/joolean/r6rs-protobuf/")
     (synopsis "Scheme implementation of Protocol Buffers")
     (description
@@ -4643,18 +4453,18 @@ including parsing and code generation.")
              (delete-file-recursively "docs")
              #t))
          (add-after 'install 'install-info-documentation
-           (lambda* (#:key outputs #:allow-other-keys)
+           (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((share (string-append (assoc-ref outputs "out") "/share"))
                     (doc (string-append share "/doc/" ,name "-" ,version))
                     (info (string-append share "/info/"))
-                    (makeinfo (string-append (assoc-ref %build-inputs "texinfo")
-                                             "/bin/makeinfo")))
+                    (makeinfo (search-input-file inputs
+                                                 "/bin/makeinfo")))
                (invoke makeinfo "guile-shapefile.texi" "-o" info)
                #t))))))
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (native-inputs
-     `(("texinfo" ,texinfo)))
+     (list texinfo))
     (home-page "https://github.com/HugoNikanor/guile-shapefile")
     (synopsis "Parse shapefiles in Guile")
     (description
@@ -4677,16 +4487,11 @@ including parsing and code generation.")
          "1m2x62n3x5hi5vnsvv2zgqhgpzrfq7r5095fzzjd1aaybi9i9igg"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ("texinfo" ,texinfo)
-       ("sed" ,sed)))
+     (list autoconf automake pkg-config texinfo sed))
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (propagated-inputs
-     `(("guile-bytestructures" ,guile-bytestructures)
-       ("nyacc" ,nyacc)))
+     (list guile-bytestructures nyacc))
     (home-page "https://git.elephly.net/software/guile-drmaa.git")
     (synopsis "Guile bindings to DRMAA")
     (description "This project provides Guile bindings to the DRMAA library
@@ -4695,8 +4500,8 @@ schedulers.")
     (license license:gpl3+)))
 
 (define-public guile-libyaml
-  (let ((commit "f5d33a6880e96571d3cb079ed7755ffc156cac46")
-        (revision "1"))
+  (let ((commit "2bdacb72a65ab63264b2edc9dac9692df7ec9b3e")
+        (revision "2"))
     (package
       (name "guile-libyaml")
       (version (git-version "0" revision commit))
@@ -4709,7 +4514,7 @@ schedulers.")
          (file-name (git-file-name name version))
          (sha256
           (base32
-           "12x91983fh1j39zy7kbk19acc1rqdh8515ddx1mh7l26j04k9wgq"))))
+           "1bssby1ri1vjll2rvi8b33xr2ghwjyxsd4yc15najj3h8n2ss87i"))))
       (build-system gnu-build-system)
       (arguments
        `(#:modules (((guix build guile-build-system)
@@ -4723,38 +4528,23 @@ schedulers.")
            (delete 'configure)
            (add-after 'unpack 'remove-unused-files
              (lambda* (#:key inputs #:allow-other-keys)
-               (for-each delete-file
-                         '("guix.scm" "demo1.yml" "demo1.scm"
-                           "yaml/libyaml.scm"
-                           ;; This file is mismatched with the generated FFI code.
-                           "yaml/ffi-help-rt.scm"))
-               (copy-file (string-append (assoc-ref inputs "nyacc")
-                                         "/share/guile/site/3.0/system/ffi-help-rt.scm")
-                          "yaml/ffi-help-rt.scm")
-               (substitute* "yaml/ffi-help-rt.scm"
-                 (("system ffi-help-rt") "yaml ffi-help-rt"))
-               #true))
+               (for-each delete-file '("guix.scm" "demo1.yml" "demo1.scm"))))
            (add-before 'build 'build-ffi
              (lambda* (#:key inputs #:allow-other-keys)
                (invoke "guild" "compile-ffi"
                        "--no-exec" ; allow us to patch the generated file
                        "yaml/libyaml.ffi")
                (substitute* "yaml/libyaml.scm"
-                 (("system ffi-help-rt") "yaml ffi-help-rt")
                  (("dynamic-link \"libyaml\"")
                   (format #false "dynamic-link \"~a/lib/libyaml\""
-                          (assoc-ref inputs "libyaml"))))
-               #true))
+                          (assoc-ref inputs "libyaml"))))))
            (replace 'build
              (assoc-ref guile:%standard-phases 'build))
            (delete 'install))))
       (inputs
-       `(("guile" ,guile-3.0)
-         ("libyaml" ,libyaml)))
+       (list guile-3.0 libyaml))
       (propagated-inputs
-       `(("guile-bytestructures" ,guile-bytestructures)))
-      (native-inputs
-       `(("nyacc" ,nyacc)))
+       (list guile-bytestructures nyacc))
       (home-page "https://github.com/mwette/guile-libyaml")
       (synopsis "Guile wrapper for libyaml")
       (description
@@ -4780,9 +4570,9 @@ ffi-helper from nyacc.")
       (build-system cmake-build-system)
       (arguments `(#:tests? #f))
       (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
       (inputs
-       `(("guile" ,guile-2.2)))
+       (list guile-2.2))
       (home-page "https://github.com/arximboldi/schmutz")
       (synopsis "Bind C++ code to Scheme")
       (description "Schmutz is a header-only library to declare Scheme bindings
@@ -4805,11 +4595,8 @@ or @code{LuaBind} but for Scheme.")
     (build-system gnu-build-system)
     (arguments `())
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ("texinfo" ,texinfo)))
-    (inputs `(("guile" ,guile-3.0)))
+     (list autoconf automake pkg-config texinfo))
+    (inputs (list guile-3.0))
     (synopsis "Guile implementation of CBOR")
     (description
      "The Concise Binary Object Representation (CBOR), as specified by RFC 8949, is
@@ -4833,9 +4620,9 @@ a Guile implementation of CBOR.")
                 "03mwi1l3354x52nar0zwhcm0x29yai9xjln4p4gbchwvx5dsr6fb"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (home-page "https://ngyro.com/software/guile-quickcheck.html")
     (synopsis "Randomized property-based testing for Guile")
     (description "Guile-Quickcheck is a library for random testing of program
@@ -4860,7 +4647,7 @@ in a large number of randomly generated test cases.")
          "118d84p443w7hrslv8hjyhgws631ia08mggiyklkmk0b9plfdsvz"))))
     (build-system guile-build-system)
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (home-page "https://notabug.org/ZelphirKaltstahl/guile-fslib")
     (synopsis "Helper functions for working with locations in file systems")
     (description
@@ -4871,7 +4658,7 @@ locations.")
 (define-public guile-netlink
   (package
     (name "guile-netlink")
-    (version "1.0.1")
+    (version "1.1.1")
     (source
      (origin
        (method git-fetch)
@@ -4881,17 +4668,16 @@ locations.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "03zmsha2d7whlwb52gna83jdas9bqi18rq3sss7kkicv814qb35g"))))
+         "0jcl6mzqy04if5drflmygmggbgzsxa42mlmskqb3cfqmksq0zj0y"))))
     (build-system gnu-build-system)
-    (arguments
-     `(#:tests? #f)); no tests
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (native-inputs
-     `(("automake" ,automake)
-       ("autoconf" ,autoconf)
-       ("pkg-config" ,pkg-config)
-       ("texinfo" ,texinfo)))
+     (list automake
+           autoconf
+           pkg-config
+           guile-3.0 ;for 'guild compile' + guile.m4
+           texinfo))
     (home-page "https://git.lepiller.eu/guile-netlink")
     (synopsis "Netlink protocol implementation for Guile")
     (description "Guile Netlink is a GNU Guile library providing an implementation
@@ -4901,3 +4687,240 @@ It provides a generic library for writing implementations of a netlink
 protocol, a low-level rtnetlink implementation that uses that library and a
 high-level API for network management that uses rtnetlink.")
     (license license:gpl3+)))
+
+(define-public guile-gitlab
+  (package
+    (name "guile-gitlab")
+    (version "0.2.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/artyom-poptsov/guile-gitlab")
+             (commit (string-append "v" version))))
+       (file-name (string-append name "-" version))
+       (sha256
+        (base32
+         "0srkmchd4kmfa7q65r6fdzwklhgdlck1ll0s7smzs8ddjdgz2lwm"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:make-flags '("GUILE_AUTO_COMPILE=0")     ;to prevent guild warnings
+       #:modules (((guix build guile-build-system)
+                   #:select (target-guile-effective-version))
+                  ,@%gnu-build-system-modules)
+       #:imported-modules ((guix build guile-build-system)
+                           ,@%gnu-build-system-modules)
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'wrap-program
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((out       (assoc-ref outputs "out"))
+                    (bin       (string-append out "/bin"))
+                    (guile-lib (assoc-ref inputs "guile-lib"))
+                    (json      (assoc-ref inputs "guile-json"))
+                    (tls       (assoc-ref inputs "guile-gnutls"))
+                    (version   (target-guile-effective-version))
+                    (scm       (string-append "/share/guile/site/"
+                                              version))
+                    (go        (string-append  "/lib/guile/"
+                                               version "/site-ccache")))
+               (wrap-program (string-append bin "/gitlab-cli")
+                 `("GUILE_LOAD_PATH" prefix
+                   (,(string-append out scm)
+                    ,(string-append guile-lib scm)
+                    ,(string-append json scm)
+                    ,(string-append tls scm)))
+                 `("GUILE_LOAD_COMPILED_PATH" prefix
+                   (,(string-append out go)
+                    ,(string-append guile-lib go)
+                    ,(string-append json go)
+                    ,(string-append tls go))))))))))
+    (native-inputs
+     (list autoconf automake pkg-config texinfo))
+    (inputs
+     `(("bash" ,bash-minimal)
+       ("guile" ,guile-2.2)
+       ("guile-json" ,guile2.2-json)
+       ("guile-lib" ,guile2.2-lib)
+       ("guile-gnutls" ,guile2.2-gnutls)))
+    (home-page "https://github.com/artyom-poptsov/guile-gitlab")
+    (synopsis "Guile interface to GitLab")
+    (description
+     "This package provides bindings to the GitLab Community Edition REST API
+as well as the @samp{gitlab-cli} command line tool for interacting with a
+GitLab instance.")
+    (license license:gpl3)))
+
+(define-public guile-smc
+  (package
+    (name "guile-smc")
+    (version "0.3.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/artyom-poptsov/guile-smc")
+             (commit (string-append "v" version))))
+       (file-name (string-append name "-" version))
+       (sha256
+        (base32
+         "0szkjmasi70m1vppck7nhdxg4lnxzjq6mihi6r1552s8sxm5z008"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:make-flags '("GUILE_AUTO_COMPILE=0")     ;to prevent guild warnings
+       #:modules (((guix build guile-build-system)
+                   #:select (target-guile-effective-version))
+                  ,@%gnu-build-system-modules)
+       #:imported-modules ((guix build guile-build-system)
+                           ,@%gnu-build-system-modules)
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'strip)
+         (add-after 'configure 'patch
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (substitute* "modules/smc/core/log.scm"
+               (("  #:use-module \\(logging logger\\)")
+                (string-append
+                 "  #:use-module (logging logger)\n"
+                 "  #:use-module (logging rotating-log)"))
+               (("#:init-value \"logger\"")
+                (format #f
+                        "#:init-value \"~a/bin/logger\""
+                        (assoc-ref inputs "inetutils")))
+             (("\\(add-handler! %logger %syslog\\)")
+              (string-append
+               "(add-handler! %logger\n"
+               "              (make <rotating-log>\n"
+               "                    #:file-name \"smc.log\"))\n")))
+             #t))
+         (add-after 'install 'wrap-program
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((out       (assoc-ref outputs "out"))
+                    (bin       (string-append out "/bin"))
+                    (guile-lib (assoc-ref inputs "guile-lib"))
+                    (version   (target-guile-effective-version))
+                    (scm       (string-append "/share/guile/site/"
+                                              version))
+                    (go        (string-append  "/lib/guile/"
+                                               version "/site-ccache")))
+               (wrap-program (string-append bin "/smc")
+                 `("GUILE_LOAD_PATH" prefix
+                   (,(string-append out scm)
+                    ,(string-append guile-lib scm)))
+                 `("GUILE_LOAD_COMPILED_PATH" prefix
+                   (,(string-append out go)
+                    ,(string-append guile-lib go)))))
+             #t)))))
+    (native-inputs
+     (list autoconf automake pkg-config texinfo))
+    (inputs
+     `(("bash"      ,bash-minimal)
+       ("guile"     ,guile-3.0)
+       ("guile-lib" ,guile-lib)
+       ("inetutils" ,inetutils)))
+    (home-page "https://github.com/artyom-poptsov/guile-smc")
+    (synopsis "GNU Guile state machine compiler")
+    (description
+     "Guile-SMC is a state machine compiler that allows users to describe
+finite state machines (FSMs) in Scheme in terms of transition tables.  It is
+capable to generate such transition tables from a @url{https://plantuml.com/,
+PlantUML} state diagrams.
+
+A transition table can be verified and checked for dead-ends and infinite
+loops.  Also Guile-SMC FSMs gather statistics when they run.
+
+Guile-SMC comes with a Scheme program called @command{smc} -- a state machine
+compiler itself.  It produces a Scheme code for an FSM from the PlantUML
+format.  This tool is meant to be called on a PlantUML file when a program
+with a FSM is being built (for example, from a Makefile.)")
+    (license license:gpl3)))
+
+(define-public guile-ini
+  (package
+    (name "guile-ini")
+    (version "0.3.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/artyom-poptsov/guile-ini")
+             (commit (string-append "v" version))))
+       (file-name (string-append name "-" version))
+       (sha256
+        (base32
+         "0injn60530valhx3gsmdp72g6z886yf0n08hscky21h3dafm14kc"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:make-flags '("GUILE_AUTO_COMPILE=0")))     ;to prevent guild warnings
+    (native-inputs
+     (list autoconf automake pkg-config texinfo))
+    (inputs
+     `(("bash" ,bash-minimal)
+       ("guile" ,guile-3.0)
+       ("guile-lib" ,guile-lib)))
+    (propagated-inputs
+     (list guile-smc))
+    (home-page "https://github.com/artyom-poptsov/guile-ini")
+    (synopsis "Guile library for INI format support")
+    (description
+     "@code{guile-ini} is a GNU Guile library for working with the
+@url{https://en.wikipedia.org/wiki/INI_file, INI format}.  This library
+provides API for reading and writing INI data.")
+    (license license:gpl3)))
+
+(define-public guile-schemetran
+  (let ((commit "3f5e15273ee88ba60ad8caf2de6302ad2bab582b")
+        (revision "1"))
+    (package
+      (name "guile-schemetran")
+      (version (git-version "0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://gitlab.com/codetk/schemetran")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "1r4nq7wmy854hvbkcc23sidn4kq3p7r4p15y5czwvd52p9djff3m"))))
+      (build-system guile-build-system)
+      (arguments
+       (list #:not-compiled-file-regexp "/doc/.*\\.scm$"
+             #:source-directory "src"))
+      (inputs
+       (list guile-3.0))
+      (home-page "https://gitlab.com/codetk/schemetran")
+      (synopsis "Write Fortran in Scheme")
+      (description
+       "Fortran is great in expressing operations on multi-dimensional arrays
+of numbers.  Scheme is great at expressing your coding thoughts.  This project
+is an attempt to combine both into something useful.")
+      (license license:asl2.0))))
+
+(define-public guile-kolam
+  (package
+    (name "guile-kolam")
+    (version "0.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://kolam.systemreboot.net/releases/kolam-"
+                           version ".tar.lz"))
+       (sha256
+        (base32
+         "083r3n3wvzysa9jhlwjj1xppdm6ja56rkizr6hvj4q1806v8n6mn"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:make-flags '("GUILE_AUTO_COMPILE=0"))) ; to prevent guild warnings
+    (native-inputs
+     (list guile-3.0 lzip))
+    (propagated-inputs
+     (list guile-json-4))
+    (home-page "https://kolam.systemreboot.net")
+    (synopsis "GraphQL implementation for Scheme")
+    (description "@code{guile-kolam} is a GraphQL implementation for Scheme.  kolam
+features a parser to parse and serialize GraphQL documents, a type system to
+create GraphQL schemas, an execution engine to execute GraphQL queries, and a
+HTTP handler to implement a HTTP GraphQL endpoint.")
+    (license license:agpl3+)))
diff --git a/gnu/packages/guile.scm b/gnu/packages/guile.scm
index 99372c4668..6cfd609916 100644
--- a/gnu/packages/guile.scm
+++ b/gnu/packages/guile.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012-2022 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 Cyril Roelandt <tipecaml@gmail.com>
 ;;; Copyright © 2014, 2016, 2018 David Thompson <davet@gnu.org>
 ;;; Copyright © 2014, 2017, 2018 Mark H Weaver <mhw@netris.org>
@@ -16,6 +16,8 @@
 ;;; Copyright © 2018 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2019 Taylan Kammer <taylan.kammer@gmail.com>
 ;;; Copyright © 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
+;;; Copyright © 2021 Timothy Sample <samplet@ngyro.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -62,9 +64,7 @@
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system guile)
   #:use-module (guix deprecation)
-  #:use-module (guix utils)
-  #:use-module (ice-9 match)
-  #:use-module ((srfi srfi-1) #:prefix srfi-1:))
+  #:use-module (guix utils))
 
 ;;; Commentary:
 ;;;
@@ -85,7 +85,12 @@
               "0l200a0v7h8bh0cwz6v7hc13ds39cgqsmfrks55b1rbj5vniyiy3"))
             (patches (search-patches "guile-1.8-cpp-4.5.patch"))))
    (build-system gnu-build-system)
-   (arguments '(#:configure-flags '("--disable-error-on-warning")
+   (arguments '(#:configure-flags '("--disable-error-on-warning"
+
+                                    ;; Build with '-O1' to work around GC
+                                    ;; crash on x86_64:
+                                    ;; <https://issues.guix.gnu.org/50427>.
+                                    "CFLAGS=-O1 -g -Wall")
 
                 ;; Insert a phase before `configure' to patch things up.
                 #:phases
@@ -104,21 +109,24 @@
 
                       ;; The usual /bin/sh...
                       (substitute* "ice-9/popen.scm"
-                        (("/bin/sh") (which "sh")))
-                      #t)))))
+                        (("/bin/sh") (which "sh"))))))
+
+                ;; XXX: Several numerical tests and tests related to
+                ;; 'inet-pton' fail on glibc 2.33/GCC 10.  Disable them.
+                ;; TODO: Remove this package when its dependents no longer
+                ;; need it.
+                #:tests? #f))
 
    ;; When cross-compiling, a native version of Guile itself is needed.
    (native-inputs (if (%current-target-system)
                       `(("self" ,this-package))
                       '()))
 
-   (inputs `(("gawk" ,gawk)
-             ("readline" ,readline)))
+   (inputs (list gawk readline))
 
    ;; Since `guile-1.8.pc' has "Libs: ... -lgmp -lltdl", these must be
    ;; propagated.
-   (propagated-inputs `(("gmp" ,gmp)
-                        ("libltdl" ,libltdl)))
+   (propagated-inputs (list gmp libltdl))
 
    (native-search-paths
     (list (search-path-specification
@@ -179,7 +187,15 @@ without requiring the source code to be rewritten.")
    (outputs '("out" "debug"))
 
    (arguments
-    `(#:configure-flags '("--disable-static") ; saves 3 MiB
+    `(#:configure-flags
+      ,(if (target-x86-32?)               ;<https://issues.guix.gnu.org/49368>
+           ''("--disable-static" "CFLAGS=-g -O2 -fexcess-precision=standard")
+           ''("--disable-static"))                ;saves 3 MiB
+
+      ;; Work around non-reproducible .go files as described in
+      ;; <https://bugs.gnu.org/20272>, which affects 2.0, 2.2, and 3.0 so far.
+      #:parallel-build? #f
+
       #:phases
       (modify-phases %standard-phases
         ,@(if (hurd-system?)
@@ -246,7 +262,8 @@ without requiring the source code to be rewritten.")
                 "013mydzhfswqci6xmyc1ajzd59pfbdak15i0b090nhr9bzm7dxyd"))
               (modules '((guix build utils)))
               (patches (search-patches
-                        "guile-2.2-skip-oom-test.patch"))
+                        "guile-2.2-skip-oom-test.patch"
+                        "guile-2.2-skip-so-test.patch"))
 
               ;; Remove the pre-built object files.  Instead, build everything
               ;; from source, at the expense of significantly longer build
@@ -255,6 +272,14 @@ without requiring the source code to be rewritten.")
                           (for-each delete-file
                                     (find-files "prebuilt" "\\.go$"))
                           #t))))
+    (arguments
+     (substitute-keyword-arguments (package-arguments guile-2.0)
+       ((#:configure-flags flags ''())
+        (if (target-x86-32?)            ;<https://issues.guix.gnu.org/49368>
+            `(append '("--disable-static")
+                 '("CFLAGS=-g -O2 -fexcess-precision=standard"))
+            flags))))
+
     (properties '((timeout . 72000)               ;20 hours
                   (max-silent-time . 36000)))     ;10 hours (needed on ARM
                                                   ;  when heavily loaded)
@@ -285,21 +310,75 @@ without requiring the source code to be rewritten.")
   (package
     (inherit guile-2.2)
     (name "guile")
-    (version "3.0.2")
+    (version "3.0.7")
     (source (origin
               (inherit (package-source guile-2.2))
+              (patches '())     ; We no longer need the patches.
               (uri (string-append "mirror://gnu/guile/guile-"
                                   version ".tar.xz"))
               (sha256
                (base32
-                "12lziar4j27j9whqp2n18427q45y9ghq7gdd8lqhmj1k0lr7vi2k"))))
+                "1dwiwsrpm4f96alfnz6wibq378242z4f16vsxgy1n9r00v3qczgm"))
+              ;; Replace the snippet because the oom-test still
+              ;; fails on some 32-bit architectures.
+              (snippet '(begin
+                          (substitute* "test-suite/standalone/Makefile.in"
+                            (("test-out-of-memory") ""))
+                          (for-each delete-file
+                                    (find-files "prebuilt" "\\.go$"))))))
+
+    ;; Build with the bundled mini-GMP to avoid interference with GnuTLS' own
+    ;; use of GMP via Nettle: <https://issues.guix.gnu.org/46330>.
+    (propagated-inputs
+     (modify-inputs (package-propagated-inputs guile-2.2)
+       (delete "gmp" "libltdl")))
     (arguments
-     ;; XXX: JIT-enabled Guile crashes in obscure ways on GNU/Hurd.
-     (if (hurd-target?)
-         (substitute-keyword-arguments (package-arguments guile-2.2)
-           ((#:configure-flags flags ''())
-            `(cons "--disable-jit" ,flags)))
-         (package-arguments guile-2.2)))
+     (substitute-keyword-arguments (package-arguments guile-2.0)
+       ((#:configure-flags flags ''())
+        ;; XXX: JIT-enabled Guile crashes in obscure ways on GNU/Hurd.
+        `(cons* ,@(if (hurd-target?)
+                      '("--disable-jit")
+                      '())
+                ;; -fexcess-precision=standard is required when compiling for
+                ;; i686-linux, otherwise "numbers.test" will fail
+                ;; (see <https://issues.guix.gnu.org/49368> and
+                ;; <https://issues.guix.gnu.org/49659>).
+                ;; TODO: Keep this in GUILE-2.2 and remove from here on next
+                ;; rebuild cycle.
+                ,@(if (target-x86-32?)
+                      '("CFLAGS=-g -O2 -fexcess-precision=standard")
+                      '())
+                "--enable-mini-gmp"
+                '("--disable-static")))
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (add-before 'check 'disable-stack-overflow-test
+             (lambda _
+               ;; This test can invoke the "OOM killer", especially when
+               ;; running on emulated hardware (QEMU).  Skip it.
+               (substitute* "test-suite/standalone/test-stack-overflow"
+                 (("!#")
+                  "!#\n(exit 77)\n"))))
+
+           ,@(if (string-prefix? "powerpc-" (%current-system))
+                 `((add-after 'unpack 'adjust-bootstrap-flags
+                     (lambda _
+                       ;; Upstream knows about suggested solution.
+                       ;; https://debbugs.gnu.org/cgi/bugreport.cgi?bug=45214
+                       (substitute* "bootstrap/Makefile.in"
+                         (("^GUILE_OPTIMIZATIONS.*")
+                          "GUILE_OPTIMIZATIONS = -O1 -Oresolve-primitives -Ocps\n")))))
+                 '())
+           ,@(if (or (target-ppc32?)
+                     (target-riscv64?))
+               `((add-after 'unpack 'skip-failing-fdes-test
+                   (lambda _
+                     ;; ERROR: ((system-error "seek" "~A" ("Bad file descriptor") (9)))
+                     (substitute* "test-suite/tests/ports.test"
+                       (("fdes not closed\"" all) (string-append all "(exit 77)")))
+                     #t)))
+               '())))))
+
     (native-search-paths
      (list (search-path-specification
             (variable "GUILE_LOAD_PATH")
@@ -310,31 +389,7 @@ without requiring the source code to be rewritten.")
                      "share/guile/site/3.0")))))))
 
 (define-public guile-3.0-latest
-  ;; TODO: Make this 'guile-3.0' on the next rebuild cycle.
-  (package
-    (inherit guile-3.0)
-    (version "3.0.7")
-    (source (origin
-              (inherit (package-source guile-3.0)) ;preserve snippet
-              (patches '())
-              (uri (string-append "mirror://gnu/guile/guile-"
-                                  version ".tar.xz"))
-              (sha256
-               (base32
-                "1dwiwsrpm4f96alfnz6wibq378242z4f16vsxgy1n9r00v3qczgm"))))
-
-    ;; Build with the bundled mini-GMP to avoid interference with GnuTLS' own
-    ;; use of GMP via Nettle: <https://issues.guix.gnu.org/46330>.  Use
-    ;; LIBGC/DISABLE-MUNMAP to work around <https://bugs.gnu.org/40525>.
-    ;; Remove libltdl, which is no longer used.
-    (propagated-inputs
-     `(("bdw-gc" ,libgc/disable-munmap)
-       ,@(srfi-1:fold srfi-1:alist-delete (package-propagated-inputs guile-3.0)
-                      '("gmp" "libltdl" "bdw-gc"))))
-    (arguments
-     (substitute-keyword-arguments (package-arguments guile-3.0)
-       ((#:configure-flags flags ''())
-        `(cons "--enable-mini-gmp" ,flags))))))
+  guile-3.0)
 
 (define-public guile-3.0/libgc-7
   ;; Using libgc-7 avoid crashes that can occur, particularly when loading
@@ -344,8 +399,8 @@ without requiring the source code to be rewritten.")
    (package
      (inherit guile-3.0-latest)
      (propagated-inputs
-      `(("bdw-gc" ,libgc-7)
-        ,@(srfi-1:alist-delete "bdw-gc" (package-propagated-inputs guile-3.0)))))))
+      (modify-inputs (package-propagated-inputs guile-3.0)
+        (replace "bdw-gc" libgc-7))))))
 
 (define-public guile-3.0/fixed
   ;; A package of Guile that's rarely changed.  It is the one used in the
@@ -358,9 +413,9 @@ without requiring the source code to be rewritten.")
                                                 ;  when heavily loaded)
 
 (define-public guile-next
-  (let ((version "3.0.5")
+  (let ((version "3.0.7")
         (revision "0")
-        (commit "91547abf54d5e0795afda2781259ab8923eb527b"))
+        (commit "d70c1dbebf9ac0fd45af4578c23983ec4a7da535"))
     (package
       (inherit guile-3.0)
       (name "guile-next")
@@ -374,7 +429,7 @@ without requiring the source code to be rewritten.")
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "09i1c77h2shygylfk0av31jsc1my6zjl230b2cx6vyl58q8c0cqy"))))
+                  "05rsk9lh5kchbav3lwfwgvgybrykqqjmkkc6689fhb3mjr5m3dqj"))))
       (arguments
        (substitute-keyword-arguments (package-arguments guile-3.0)
          ((#:phases phases '%standard-phases)
@@ -386,14 +441,14 @@ without requiring the source code to be rewritten.")
                  (delete-file "test-suite/tests/version.test")
                  #t))))))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("libtool" ,libtool)
-         ("flex" ,flex)
-         ("gettext" ,gnu-gettext)
-         ("texinfo" ,texinfo)
-         ("gperf" ,gperf)
-         ,@(package-native-inputs guile-3.0)))
+       (modify-inputs (package-native-inputs guile-3.0)
+         (prepend autoconf
+                  automake
+                  libtool
+                  flex
+                  gnu-gettext
+                  texinfo
+                  gperf)))
       (synopsis "Development version of GNU Guile"))))
 
 (define* (make-guile-readline guile #:optional (name "guile-readline"))
@@ -403,7 +458,8 @@ without requiring the source code to be rewritten.")
     (source (package-source guile))
     (build-system gnu-build-system)
     (arguments
-     '(#:configure-flags '("--disable-silent-rules")
+     '(#:configure-flags '("--disable-silent-rules"
+                           "--enable-mini-gmp")   ;for Guile >= 3.0.6
        #:phases (modify-phases %standard-phases
                   (add-before 'build 'chdir
                     (lambda* (#:key outputs #:allow-other-keys)
@@ -479,39 +535,6 @@ GNU@tie{}Guile.  Use the @code{(ice-9 readline)} module and call its
                            (guile-variant-package-name "guile2.2")
                            #:deep? #f))
 
-(define-syntax define-deprecated-guile3.0-package
-  (lambda (s)
-    "Define a deprecated package alias for \"guile3.0-something\"."
-    (syntax-case s ()
-      ((_ name)
-       (and (identifier? #'name)
-            (string-prefix? "guile3.0-" (symbol->string (syntax->datum
-                                                         #'name))))
-       (let ((->guile (lambda (str)
-                        (let ((base (string-drop str
-                                                 (string-length "guile3.0-"))))
-                          (string-append "guile-" base)))))
-         (with-syntax ((package-name (symbol->string (syntax->datum #'name)))
-                       (package
-                         (datum->syntax
-                          #'name
-                          (string->symbol
-                           (->guile (symbol->string (syntax->datum
-                                                     #'name))))))
-                       (old-name
-                        ;; XXX: This is the name generated by
-                        ;; 'define-deprecated'.
-                        (datum->syntax
-                         #'name
-                         (symbol-append '% (syntax->datum #'name)
-                                        '/deprecated))))
-           #'(begin
-               (define-deprecated name package
-                 (deprecated-package package-name package))
-               (export old-name))))))))
-
-(define-deprecated-guile3.0-package guile3.0-readline)
-
 (define-public guile-for-guile-emacs
   (let ((commit "15ca78482ac0dd2e3eb36dcb31765d8652d7106d")
         (revision "1"))
@@ -545,18 +568,18 @@ GNU@tie{}Guile.  Use the @code{(ice-9 readline)} module and call its
                  ;; FAIL: test-out-of-memory
                  (substitute* "test-suite/standalone/Makefile.am"
                    (("(check_SCRIPTS|TESTS) \\+= test-out-of-memory") ""))
-                 
+
                  (patch-shebang "build-aux/git-version-gen")
                  (invoke "sh" "autogen.sh")
                  #t))))))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("libtool" ,libtool)
-         ("flex" ,flex)
-         ("texinfo" ,texinfo)
-         ("gettext" ,gettext-minimal)
-         ,@(package-native-inputs guile-2.2))))))
+       (modify-inputs (package-native-inputs guile-2.2)
+         (prepend autoconf
+                  automake
+                  libtool
+                  flex
+                  texinfo
+                  gettext-minimal))))))
 
 
 ;;;
@@ -578,9 +601,8 @@ GNU@tie{}Guile.  Use the @code{(ice-9 readline)} module and call its
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags '("GUILE_AUTO_COMPILE=0")))   ;to prevent guild warnings
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("guile" ,guile-2.2)))
-    (inputs `(("guile" ,guile-2.2)))
+    (native-inputs (list pkg-config guile-2.2))
+    (inputs (list guile-2.2))
     (synopsis "JSON module for Guile")
     (description
      "Guile-JSON supports parsing and building JSON documents according to the
@@ -618,12 +640,8 @@ specification.  These are the main features:
               (sha256
                (base32
                 "0nj0684qgh6ppkbdyxqfyjwsv2qbyairxpi8fzrhsi3xnc7jn4im"))))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("guile" ,guile-3.0)))
-    (inputs `(("guile" ,guile-3.0)))))
-
-(define-public guile3.0-json
-  (deprecated-package "guile3.0-json" guile-json-3))
+    (native-inputs (list pkg-config guile-3.0))
+    (inputs (list guile-3.0))))
 
 (define-public guile-json-4
   (package
@@ -679,10 +697,8 @@ specification.  These are the main features:
                          (format #f "(dynamic-link \"~a/lib/libgdbm.so\")"
                                  (assoc-ref inputs "gdbm"))))
                       #t)))))
-    (native-inputs
-     `(("guile" ,guile-3.0)))
-    (inputs
-     `(("gdbm" ,gdbm)))
+    (native-inputs (list guile-3.0))
+    (inputs (list gdbm))
     (home-page "https://github.com/ijp/guile-gdbm")
     (synopsis "Guile bindings to the GDBM library via Guile's FFI")
     (description
@@ -696,8 +712,6 @@ Guile's foreign function interface.")
 (define-public guile2.2-gdbm-ffi
   (package-for-guile-2.2 guile-gdbm-ffi))
 
-(define-deprecated-guile3.0-package guile3.0-gdbm-ffi)
-
 (define-public guile-sqlite3
   (package
     (name "guile-sqlite3")
@@ -713,14 +727,8 @@ Guile's foreign function interface.")
                 "1nryy9j3bk34i0alkmc9bmqsm0ayz92k1cdf752mvhyjjn8nr928"))
               (file-name (string-append name "-" version "-checkout"))))
     (build-system gnu-build-system)
-    (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("guile" ,guile-3.0)
-       ("pkg-config" ,pkg-config)))
-    (inputs
-     `(("guile" ,guile-3.0)
-       ("sqlite" ,sqlite)))
+    (native-inputs (list autoconf automake guile-3.0 pkg-config))
+    (inputs (list guile-3.0 sqlite))
     (synopsis "Access SQLite databases from Guile")
     (description
      "This package provides Guile bindings to the SQLite database system.")
@@ -732,8 +740,6 @@ Guile's foreign function interface.")
 (define-public guile2.2-sqlite3
   (package-for-guile-2.2 guile-sqlite3))
 
-(define-deprecated-guile3.0-package guile3.0-sqlite3)
-
 (define-public guile-bytestructures
   (package
     (name "guile-bytestructures")
@@ -760,13 +766,8 @@ Guile's foreign function interface.")
                              (doc (string-append out "/share/doc/" package)))
                         (install-file "README.md" doc)
                         #t))))))
-    (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ("guile" ,guile-3.0)))
-    (inputs
-     `(("guile" ,guile-3.0)))
+    (native-inputs (list autoconf automake pkg-config guile-3.0))
+    (inputs (list guile-3.0))
     (synopsis "Structured access to bytevector contents for Guile")
     (description
      "Guile bytestructures offers a system imitating the type system
@@ -783,8 +784,6 @@ type system, elevating types to first-class status.")
 (define-public guile2.2-bytestructures
   (package-for-guile-2.2 guile-bytestructures))
 
-(define-deprecated-guile3.0-package guile3.0-bytestructures)
-
 (define-public guile-git
   (package
     (name "guile-git")
@@ -798,22 +797,18 @@ type system, elevating types to first-class status.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "11a51acibwi2hpaygmrpn6nwbr4lqalc87ihrgj3mhz6swbsk9n7"))))
+                "11a51acibwi2hpaygmrpn6nwbr4lqalc87ihrgj3mhz6swbsk9n7"))
+              (patches (search-patches
+                        "guile-git-adjust-for-libgit2-1.2.0.patch"))))
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags '("GUILE_AUTO_COMPILE=0")))     ; to prevent guild warnings
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("texinfo" ,texinfo)
-       ("guile" ,guile-3.0)
-       ("guile-bytestructures" ,guile-bytestructures)))
+     (list pkg-config autoconf automake texinfo guile-3.0 guile-bytestructures))
     (inputs
-     `(("guile" ,guile-3.0)
-       ("libgit2" ,libgit2)))
+     (list guile-3.0 libgit2))
     (propagated-inputs
-     `(("guile-bytestructures" ,guile-bytestructures)))
+     (list guile-bytestructures))
     (synopsis "Guile bindings for libgit2")
     (description
      "This package provides Guile bindings to libgit2, a library to
@@ -826,8 +821,6 @@ manipulate repositories of the Git version control system.")
 (define-public guile2.0-git
   (package-for-guile-2.0 guile-git))
 
-(define-deprecated-guile3.0-package guile3.0-git)
-
 (define-public guile-zlib
   (package
     (name "guile-zlib")
@@ -850,16 +843,8 @@ manipulate repositories of the Git version control system.")
     (arguments
      '(#:make-flags
        '("GUILE_AUTO_COMPILE=0"))) ;to prevent guild warnings
-    (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ,@(if (%current-target-system)
-             `(("guile" ,guile-3.0))   ;for 'guild compile' and 'guile-3.0.pc'
-             '())))
-    (inputs
-     `(("guile" ,guile-3.0)
-       ("zlib" ,zlib)))
+    (native-inputs (list autoconf automake pkg-config guile-3.0))
+    (inputs (list guile-3.0 zlib))
     (synopsis "Guile bindings to zlib")
     (description
      "This package provides Guile bindings for zlib, a lossless
@@ -889,16 +874,8 @@ Guile's foreign function interface.")
     (arguments
      '(#:make-flags
        '("GUILE_AUTO_COMPILE=0"))) ;to prevent guild warnings
-    (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ,@(if (%current-target-system)
-             `(("guile" ,guile-3.0))   ;for 'guild compile' and 'guile-3.0.pc'
-             '())))
-    (inputs
-     `(("guile" ,guile-3.0)
-       ("lzlib" ,lzlib)))
+    (native-inputs (list autoconf automake pkg-config guile-3.0))
+    (inputs (list guile-3.0 lzlib))
     (synopsis "Guile bindings to lzlib")
     (description
      "This package provides Guile bindings for lzlib, a C library for
@@ -924,18 +901,35 @@ pure Scheme by using Guile's foreign function interface.")
                (base32
                 "1c8l7829b5yx8wdc0mrhzjfwb6h9hb7cd8dfxcr71a7vlsi86310"))))
     (build-system gnu-build-system)
-    (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ("guile" ,guile-3.0)))
-    (inputs
-     `(("zstd" ,zstd "lib")
-       ("guile" ,guile-3.0)))
+    (native-inputs (list autoconf automake pkg-config guile-3.0))
+    (inputs (list `(,zstd "lib") guile-3.0))
     (synopsis "GNU Guile bindings to the zstd compression library")
     (description
      "This package provides a GNU Guile interface to the zstd (``zstandard'')
 compression library.")
     (license license:gpl3+)))
 
+(define-public guile-lzma
+  (package
+    (name "guile-lzma")
+    (version "0.1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://files.ngyro.com/guile-lzma/guile-lzma-"
+                           version ".tar.gz"))
+       (sha256
+        (base32 "0pnfzk92p9y5ymjq6rq619b9fy0dflv56jwg00wlvvbjssb6i1ib"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     (list autoconf automake guile-3.0 guile-bytestructures pkg-config))
+    (inputs (list guile-3.0 xz))
+    (propagated-inputs (list guile-bytestructures))
+    (home-page "https://ngyro.com/software/guile-lzma.html")
+    (synopsis "Guile bindings for liblzma (XZ)")
+    (description "Guile-LZMA is a Guile wrapper for the liblzma (XZ)
+library.  It exposes an interface similar to other Guile compression
+libraries, like Guile-zlib.")
+    (license license:gpl3+)))
+
 ;;; guile.scm ends here
diff --git a/gnu/packages/gv.scm b/gnu/packages/gv.scm
index b2e1fbb211..f18051261c 100644
--- a/gnu/packages/gv.scm
+++ b/gnu/packages/gv.scm
@@ -64,7 +64,7 @@
              ("libxpm" ,libxpm)
              ("zlib" ,zlib)))
    (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
    (synopsis "PostScript and PDF viewer using Ghostscript as a back-end")
    (description
     "GNU GV is a graphical user interface to the Ghostscript interpreter.
diff --git a/gnu/packages/gxmessage.scm b/gnu/packages/gxmessage.scm
index 0150dd0d6f..498c13d25e 100644
--- a/gnu/packages/gxmessage.scm
+++ b/gnu/packages/gxmessage.scm
@@ -48,10 +48,9 @@
                (("gtk-update-icon-cache") "true"))
              #t)))))
     (inputs
-     `(("gtk+" ,gtk+)))
+     (list gtk+))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (home-page "https://www.gnu.org/software/gxmessage/")
     (synopsis "Open popup message window with buttons for return")
     (description "GNU gxmessage is a program that pops up dialog windows, which display
diff --git a/gnu/packages/hardware.scm b/gnu/packages/hardware.scm
index ff21c9c724..a93db0be3f 100644
--- a/gnu/packages/hardware.scm
+++ b/gnu/packages/hardware.scm
@@ -5,6 +5,12 @@
 ;;; Copyright © 2021 Evgeny Pisemsky <evgeny@pisemsky.com>
 ;;; Copyright © 2021 Léo Le Bouter <lle-bout@zaclys.net>
 ;;; Copyright © 2021 Denis Carikli <GNUtoo@cyberdimension.org>
+;;; Copyright © 2021 Petr Hodina <phodina@protonmail.com>
+;;; Copyright © 2021 Raghav Gururajan <rg@raghavgururajan.name>
+;;; Copyright © 2021 Vinicius Monego <monego@posteo.net>
+;;; Copyright © 2021, 2022 John Kehayias <john.kehayias@protonmail.com>
+;;; Copyright © 2022 Zhu Zihao <all_but_last@163.com>
+;;; Copyright © 2022 Maxime Devos <maximedevos@telenet.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -22,6 +28,7 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages hardware)
+  #:use-module (gnu packages)
   #:use-module (gnu packages admin)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages bash)
@@ -31,6 +38,7 @@
   #:use-module (gnu packages crypto)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages documentation)
+  #:use-module (gnu packages flex)
   #:use-module (gnu packages gcc)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages glib)
@@ -49,23 +57,128 @@
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages tls)
+  #:use-module (gnu packages virtualization)
   #:use-module (gnu packages web)
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build-system meson)
   #:use-module (guix build-system python)
   #:use-module (guix download)
+  #:use-module (guix gexp)
   #:use-module (guix git-download)
   #:use-module (guix svn-download)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
-  #:use-module (guix utils))
+  #:use-module (guix utils)
+  #:use-module (srfi srfi-1))
 
 ;; This is a module for packages related to physical hardware that don't (yet)
 ;; have a more specific home like gps.scm, security-token.scm, &c.
 
+(define-public hwinfo
+  (package
+    (name "hwinfo")
+    (version "21.80")
+    (home-page "https://github.com/openSUSE/hwinfo")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url home-page)
+         (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "07058vjqdcd3la8y4b92f7fvcqxvmw1p0q4lg5kcn85pvbbg52ag"))
+       (modules
+        '((guix build utils)))
+       (snippet
+        `(begin
+           ;; Remove git2log program file.
+           (delete-file "git2log")
+           ;; Remove variables that depends on git2log.
+           (substitute* "Makefile"
+             (("GIT2LOG.*\\:=.*$") "")
+             (("GITDEPS.*\\:=.*$") "")
+             (("BRANCH.*\\:=.*$") ""))
+           ;; Create version file.
+           (call-with-output-file "VERSION"
+             (lambda (port)
+               (format port ,version)))))))
+    (build-system gnu-build-system)
+    (outputs '("out" "dev" "doc"))
+    (arguments
+     `(#:tests? #f                      ; no test-suite available
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (dev (assoc-ref outputs "dev"))
+                    (doc (assoc-ref outputs "doc"))
+                    (incl-dir (string-append dev "/include"))
+                    (lib-dir (string-append dev "/lib"))
+                    (sbin-dir (string-append out "/sbin"))
+                    (share-dir (string-append out "/share"))
+                    (doc-dir (string-append doc "/share/doc")))
+               ;; Generate HTML documentation in the output "doc".
+               (mkdir-p doc-dir)
+               (substitute* "doc/libhd.doxy"
+                 (("OUTPUT_DIRECTORY.*=.*libhd")
+                  (string-append "OUTPUT_DIRECTORY = " doc-dir "/libhd")))
+               ;; Correct values of the version and install directories.
+               (substitute* "Makefile"
+                 (("VERSION.*\\:=.*$")
+                  (string-append "VERSION := " ,version "\n"))
+                 (("LIBDIR.*\\?=.*$")
+                  (string-append "LIBDIR ?= " lib-dir "\n"))
+                 (("/usr/include") incl-dir)
+                 (("/(usr|var)/(lib|lib64)") lib-dir)
+                 (("/usr/sbin") sbin-dir)
+                 (("/usr/share") share-dir)
+                 (("\\$\\(DESTDIR\\)/sbin ") ""))
+               ;; Add output "dev" to the run-path.
+               (substitute* "Makefile.common"
+                 (("-Lsrc")
+                  (string-append "-Lsrc " "-Wl,-rpath=" lib-dir)))
+               ;; Correct program name of the lexical analyzer.
+               (substitute* "src/isdn/cdb/Makefile"
+                 (("lex isdn_cdb.lex") "flex isdn_cdb.lex"))
+               ;; Patch pkgconfig file to point to output "dev".
+               (substitute* "hwinfo.pc.in"
+                 (("/usr") dev)))))
+         (delete 'configure)
+         (replace 'build
+           (lambda _
+             (setenv "CC" ,(cc-for-target))
+             (invoke "make" "shared")
+             (invoke "make" "doc")))
+         (add-after 'install 'install-manpages
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (man-dir (string-append out "/share/man"))
+                    (man1-dir (string-append man-dir "/man1"))
+                    (man8-dir (string-append man-dir "/man8")))
+               (for-each
+                (lambda (x) (install-file x man1-dir))
+                (find-files "doc" "\\.1$"))
+               (for-each
+                (lambda (y) (install-file y man8-dir))
+                (find-files "doc" "\\.8$"))))))))
+    (native-inputs
+     (list doxygen flex perl pkg-config))
+    (inputs
+     `(("libx86emu" ,libx86emu)
+       ("util-linux:lib" ,util-linux "lib")))
+    (synopsis "Hardware information tool")
+    (description "HwInfo is used to probe for the hardware present in the system.
+It can be used to generate a system overview log which can be later used for
+support.")
+    (license license:gpl2+)))
+
 (define-public ddcutil
   (package
     (name "ddcutil")
@@ -79,15 +192,15 @@
         (base32 "19kkwb9ijzn6ya3mvjanggh1c96fcc0lkbk7xnyi2qp6wsr4nhxp"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("eudev" ,eudev)
-       ("glib" ,glib)
-       ("libdrm" ,libdrm)               ; enhanced diagnostics
-       ("libusb" ,libusb)               ; support USB monitors
-       ("libx11" ,libx11)               ; enhanced diagnostics
-       ("libxrandr" ,libxrandr)
-       ("zlib" ,zlib)))
+     (list eudev
+           glib
+           libdrm ; enhanced diagnostics
+           libusb ; support USB monitors
+           libx11 ; enhanced diagnostics
+           libxrandr
+           zlib))
     (home-page "https://www.ddcutil.com/")
     (synopsis "Control external monitor settings")
     (description
@@ -125,12 +238,9 @@ calibrated, and restored when the calibration is applied.")
     (arguments
      '(#:tests? #f))                    ; No test suite
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list pkg-config qttools))
     (inputs
-     `(("ddcutil" ,ddcutil)
-       ("glib" ,glib)
-       ("qtbase" ,qtbase-5)))
+     (list ddcutil glib qtbase-5))
     (home-page "https://www.ddcutil.com/")
     (synopsis "Graphical user interface for ddcutil")
     (description "ddcui is a graphical user interface for ddcutil, implemented
@@ -198,11 +308,7 @@ human-readable format and checks if it conforms to the standards.")
          ;; build container.
          #:tests? #f))
       (inputs
-       `(("python2" ,python-2)
-         ("python2-pycurl", python2-pycurl)
-         ("python2-pygtk", python2-pygtk)
-         ("pciutils", pciutils)
-         ("usbutils", usbutils)))
+       (list python-2 python2-pycurl python2-pygtk pciutils usbutils))
       (synopsis "Graphical client for the h-node hardware database
 project")
       (description
@@ -215,6 +321,66 @@ whether the hardware works with a fully free operating system or not.")
       (home-page "https://savannah.nongnu.org/projects/h-client/")
       (license license:gpl3+))))
 
+(define-public headsetcontrol
+  (package
+    (name "headsetcontrol")
+    (version "2.6")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/Sapd/HeadsetControl")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0a7zimzi71416pmn6z0l1dn1c2x8p702hkd0k6da9rsznff85a88"))))
+    (build-system cmake-build-system)
+    (inputs
+     (list hidapi))
+    (home-page "https://github.com/Sapd/HeadsetControl")
+    (synopsis "Sidetone and Battery status for USB headsets")
+    (description
+     "Headsetcontrol is a tool to control certain aspects of USB-connected
+headsets.  Currently, support is provided for adjusting sidetone, getting
+battery state, controlling LEDs, and setting the inactive time.")
+    (license license:gpl3+)))
+
+(define-public hueplusplus
+  (package
+    (name "hueplusplus")
+    (version "1.1.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/enwi/hueplusplus")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1jy8m2a0h0kf0aw8jbniz069q9j7cx67b1zlv2vz1ymq921qk0pm"))
+       (patches
+        (search-patches "hueplusplus-mbedtls.patch"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:tests? #f)) ;; Tests require Google's gtest and gmock
+    (inputs
+     (list mbedtls-apache))
+    (synopsis "C++ library to control Philips Hue lights")
+    (description "Hueplusplus is a library for controlling Philips Hue lights.
+Features:
+
+@itemize
+@item find bridges with SSDP or set an ip manually
+@item all common light functions (brightness, color, temperature)
+@item extended @code{alert()} functions, which alert in a specific
+color (good for notifications)
+@item supports sensors, rules, groups, scenes and schedules
+@item streaming with entertainment mode
+@item documented with doxygen
+@end itemize")
+    (home-page "https://github.com/enwi/hueplusplus")
+    (license license:lgpl3+)))
+
 (define-public i7z
   (let ((revision "0")
         (commit "1a41ff13db747e962456ddbb5ccb2b7fc43ca0cb"))
@@ -230,6 +396,8 @@ whether the hardware works with a fully free operating system or not.")
          (file-name (git-file-name name version))
          (sha256
           (base32 "0jxm63a8y1mfl1sa4mzzfs3bgnym6achj1yc0jglmp05xal16lm1"))
+         (patches
+          (search-patches "i7z-gcc-10.patch"))
          (modules '((guix build utils)))
          (snippet
           '(begin
@@ -247,7 +415,7 @@ whether the hardware works with a fully free operating system or not.")
          (modify-phases %standard-phases
            (delete 'configure))))       ; no configure script
       (inputs
-       `(("ncurses" ,ncurses)))
+       (list ncurses))
       (home-page "https://github.com/afontenot/i7z")
       (synopsis "Thermal and C-state reporting on older Intel Core CPUs")
       (description
@@ -287,7 +455,7 @@ information can be viewed in real time and/or logged to a file.")
        ("perl" ,perl)
        ("python" ,python)))
     (inputs
-     `(("libxml2" ,libxml2)))
+     (list libxml2))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -347,7 +515,7 @@ specific SMBIOS tables.")
                #t))))))
     (native-inputs
      ;; Newer GCCs fail with a deluge of "multiple definition of `__foo'" errors.
-     `(("gcc" ,gcc-4.9)))
+     (list gcc-4.9))
     (supported-systems (list "i686-linux" "x86_64-linux"))
     (home-page "https://www.memtest.org/")
     (synopsis "Thorough real-mode memory tester")
@@ -438,7 +606,7 @@ It can also be told to test memory starting at a particular physical address.")
                #t))))
        #:tests? #f))                    ; no test suite
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     ;; These registers and the CPUID instruction only exist on (most) x86 chips.
     (supported-systems (list "i686-linux" "x86_64-linux"))
     (home-page "https://01.org/msr-tools/")
@@ -460,10 +628,108 @@ MSR addresses differ (greatly) between processors, and any such modification can
 be dangerous and may void your CPU or system board's warranty.")
     (license license:gpl2)))     ; cpuid.c is gpl2, {rd,wr}msr.c are gpl2+
 
+(define-public openhmd
+  (package
+    (name "openhmd")
+    (version "0.3.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/OpenHMD/OpenHMD")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1hkpdl4zgycag5k8njvqpx01apxmm8m8pvhlsxgxpqiqy9a38ccg"))))
+    (build-system meson-build-system)
+    (arguments
+     `(#:tests? #f)) ; no test target although there is a test folder
+    (native-inputs
+     (list pkg-config))
+    (inputs
+     (list hidapi))
+    (home-page "http://www.openhmd.net/")
+    (synopsis "API and drivers for immersive technology")
+    (description "OpenHMD aims to provide an API and drivers for immersive
+technology, such as head mounted displays with built in head tracking.")
+    (license license:boost1.0)))
+
+(define-public openrgb
+  (package
+    (name "openrgb")
+    (version "0.7")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://gitlab.com/CalcProgrammer1/OpenRGB")
+             (commit (string-append "release_" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0xhfaz0b74nfnh7il2cz5c0338xlzay00g6hc2h3lsncarj8d5n7"))
+       (patches
+        (search-patches "openrgb-unbundle-hueplusplus.patch"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           ;; Delete the bundled hueplusplus and json libraries.
+           (delete-file-recursively "dependencies/hueplusplus-1.0.0")
+           (delete-file-recursively "dependencies/json")))))
+    (build-system cmake-build-system)
+    (arguments
+     (list
+       #:tests? #f ; doesn't have tests
+       #:make-flags
+       #~(list (string-append "INSTALL_ROOT=" #$output ))
+       #:phases
+       #~(modify-phases %standard-phases
+           (add-after 'unpack 'unbundle
+             (lambda* (#:key inputs #:allow-other-keys)
+               (substitute* "OpenRGB.pro"
+                 (("dependencies/hueplusplus-1.0.0/include/hueplusplus")
+                  (string-append #$(this-package-input "hueplusplus")
+                                 "/include/hueplusplus"))
+                 (("dependencies/json")
+                  (string-append #$(this-package-input "json-modern-cxx")
+                                 "/include/nlohmann")))))
+           ;; Call qmake instead of configure to create a Makefile.
+           (replace 'configure
+             (lambda _ (invoke "qmake" "PREFIX=/" "OpenRGB.pro"))))))
+    (inputs
+     (list hidapi
+           hueplusplus
+           json-modern-cxx
+           libusb
+           mbedtls-apache
+           qtbase-5))
+    (native-inputs
+     (list pkg-config))
+    (synopsis "RGB lighting control")
+    (description
+     "OpenRGB is lighting control that doesn't depend on manufacturer software.
+ASUS, ASRock, Corsair, G.Skill, Gigabyte, HyperX, MSI, Razer, ThermalTake, and more
+supported.
+
+Features:
+
+@itemize
+@item Set colors and select effect modes for a wide variety of RGB hardware
+@item Save and load profiles
+@item Control lighting from third party software using the OpenRGB SDK
+@item Command line interface
+@item Connect multiple instances of OpenRGB to synchronize lighting across multiple PCs
+@item Can operate standalone or in a client/headless server configuration
+@item View device information
+@item No official/manufacturer software required
+@item Graphical view of device LEDs makes creating custom patterns easy
+@end itemize")
+    (home-page "https://openrgb.org/")
+    (license license:gpl2))) ; Included libccmmk is lgpl3+, CRC is bsd-3
+
 (define-public wavemon
   (package
     (name "wavemon")
-    (version "0.9.3")
+    (version "0.9.4")
     (source
      (origin
        (method git-fetch)
@@ -472,7 +738,7 @@ be dangerous and may void your CPU or system board's warranty.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0m9n5asjxs1ir5rqprigqcrm976mgjvh4yql1jhfnbszwbf95193"))))
+        (base32 "0s3yz15vzx90fxyb8bgryksn0cr2gpz9inbcx4qjrgs7zfbm4pgh"))))
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags
@@ -483,11 +749,9 @@ be dangerous and may void your CPU or system board's warranty.")
                             "/share/doc/" ,name "-" ,version))
        #:tests? #f))                    ; no tests
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libcap" ,libcap)
-       ("libnl" ,libnl)
-       ("ncurses" ,ncurses)))
+     (list libcap libnl ncurses))
     (home-page "https://github.com/uoaerg/wavemon")
     (synopsis "Wireless network device monitor")
     (description
@@ -519,11 +783,9 @@ supported by the Linux kernel.")
           (base32 "0zwrkqfxd671iy69v3q0844gfdpm1yk51i9qh2rqc969bd8glxga"))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("pkg-config" ,pkg-config)))
+       (list autoconf automake pkg-config))
       (inputs
-       `(("libusb" ,libusb)))
+       (list libusb))
       (home-page "https://github.com/rockchip-linux/rkdeveloptool")
       (synopsis "Read from and write to RockChicp devices over USB")
       (description
@@ -547,8 +809,7 @@ as the Pinebook Pro.")
                 "008vvw504kh40br5v2xkqavnp9vpmjvf768faqzv1d00fd53ingn"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("xmllint" ,libxml2)))
+     (list pkg-config libxml2))
     (home-page "https://clusterlabs.github.io/libqb/")
     (synopsis "Library providing high performance logging, tracing, ipc, and poll")
     (description "Libqb is a library with the primary purpose of providing
@@ -655,15 +916,14 @@ Simply put, it is a USB device whitelisting tool.")
         (base32 "0gv3xj9sbk1wsyijfw9xjnvy8pg7j4arjnma2r2kfi18qy32wd30"))))
     (build-system gnu-build-system)
     (inputs
-     `(("glib" ,glib)
-       ("gtk+" ,gtk+-2)))
+     (list glib gtk+-2))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("intltool" ,intltool)
-       ("libtool" ,libtool)
-       ("glib" ,glib "bin")
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf
+           intltool
+           libtool
+           `(,glib "bin")
+           automake
+           pkg-config))
     (synopsis "Simple screen testing tool")
     (description "This is a program for testing the quality of CRT/LCD
 screens.  It displays various patterns and allows you to estimate the quality
@@ -685,11 +945,9 @@ of your CRT/LCD monitor.")
         (base32 "05xynpwq851fp8f5fy7ac0blvz8mr5m5cbqj3gslgbwv63kjnfbq"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("curl" ,curl)
-       ("json-c" ,json-c)
-       ("openssl" ,openssl)))
+     (list curl json-c openssl))
     (home-page "https://tpm2-software.github.io/")
     (synopsis "OSS Implementation of the TCG TPM2 Software Stack (TSS2)")
     (description
@@ -698,3 +956,54 @@ of your CRT/LCD monitor.")
 libtss2-esys, libtss2-sys, libtss2-mu, libtss2-tcti-device, libtss2-tcti-swtpm
 and libtss2-tcti-mssim.")
     (license license:bsd-2)))
+
+(define-public libcpuid
+  ;; We need to remove blobs from the source, first we have to isolate the blob
+  ;; source in build system.
+  ;; See https://github.com/anrieff/libcpuid/pull/159.
+  (let ((commit "2e61160983f32ba840b2246d3c3850c44626ab0d")
+        (revision "1"))
+    (package
+      (name "libcpuid")
+      (version (git-version "0.5.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/anrieff/libcpuid")
+               (commit commit)))
+         (sha256
+          (base32 "1mphvkiqq6z33sq6i490fq27sbyylacwrf8bg7ccvpcjms208sww"))
+         (modules '((guix build utils)))
+         (snippet
+          ;; Now remove blobs.
+          #~(begin
+              (delete-file "libcpuid/msrdriver.c")
+              (delete-file-recursively "contrib/MSR Driver")))
+         (file-name (git-file-name name version))))
+      (build-system cmake-build-system)
+      (arguments
+       (list
+        #:configure-flags #~(list "-DLIBCPUID_TESTS=ON")
+        #:phases
+        #~(modify-phases %standard-phases
+            (add-after 'unpack 'absolutize
+              (lambda* (#:key inputs #:allow-other-keys)
+                ;; Linux specific
+                (when #$(target-linux?)
+                  (substitute* "libcpuid/rdmsr.c"
+                    (("modprobe") (which "modprobe")))))))))
+      (inputs
+       (if (target-linux?)
+           (list kmod)
+           '()))
+      (native-inputs (list python-3))   ;required by tests
+      (supported-systems
+       (filter (lambda (t) (or (target-x86-64? t) (target-x86-32? t)))
+               %supported-systems))
+      (home-page "https://libcpuid.sourceforge.net/")
+      (synopsis "Small library for x86 CPU detection and feature extraction")
+      (description "Libcpuid is a small C library to get vendor, model, branding
+string, code name and other information from x86 CPU. This library is not to be
+confused with the @code{cpuid} command line utility from package @code{cpuid}.")
+      (license license:bsd-2))))
diff --git a/gnu/packages/haskell-apps.scm b/gnu/packages/haskell-apps.scm
index 486f5411b6..7f777a0873 100644
--- a/gnu/packages/haskell-apps.scm
+++ b/gnu/packages/haskell-apps.scm
@@ -40,6 +40,7 @@
   #:use-module (guix packages)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix build-system haskell)
+  #:use-module (gnu packages)
   #:use-module (gnu packages base)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages gl)
@@ -58,7 +59,7 @@
 (define-public apply-refact
   (package
     (name "apply-refact")
-    (version "0.6.0.0")
+    (version "0.9.3.0")
     (source
      (origin
        (method url-fetch)
@@ -67,23 +68,20 @@
              version ".tar.gz"))
        (sha256
         (base32
-         "0p2mqgjcqr1zcmk8zgr0yq7g8z1agsa6l493lkj6g3ya9lyhxgig"))))
+         "1sn5g71sx8xa4ggyk49m661iip6zrzl65vb87l16l31kf79bbm7w"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-refact" ,ghc-refact)
-       ("ghc-exactprint" ,ghc-exactprint)
-       ("ghc-syb" ,ghc-syb)
-       ("ghc-temporary" ,ghc-temporary)
-       ("ghc-filemanip" ,ghc-filemanip)
-       ("ghc-unix-compat" ,ghc-unix-compat)
-       ("ghc-optparse-applicative"
-        ,ghc-optparse-applicative)))
+     (list ghc-refact
+           ghc-exactprint
+           ghc-syb
+           ghc-extra
+           ghc-uniplate
+           ghc-filemanip
+           ghc-unix-compat
+           ghc-optparse-applicative))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-golden" ,ghc-tasty-golden)
-       ("ghc-tasty-expected-failure"
-        ,ghc-tasty-expected-failure)
-       ("ghc-silently" ,ghc-silently)))
+     (list ghc-tasty ghc-tasty-golden ghc-tasty-expected-failure
+           ghc-silently))
     (home-page "https://hackage.haskell.org/package/apply-refact")
     (synopsis "Perform refactorings specified by the refact library")
     (description
@@ -91,14 +89,12 @@
 library.  It is primarily used with HLint's @code{--refactor} flag.")
     (license license:bsd-3)))
 
-;; In Stackage LTS 14, this package is at 2.4.1.0.  However, that
-;; version requires version 2.4.1.0 of the 'Cabal' package, which is
-;; provided by GHC 8.6.5 at version 2.4.0.1.  Hence, we use an older
-;; version to match the compiler's library.
+;; cabal-install depends on Cabal, which is part of GHC. You can only
+;; update this packages after updating GHC.
 (define-public cabal-install
  (package
   (name "cabal-install")
-   (version "2.4.0.0")
+   (version "3.2.0.0")
    (source
     (origin
      (method url-fetch)
@@ -106,36 +102,35 @@ library.  It is primarily used with HLint's @code{--refactor} flag.")
             "https://hackage.haskell.org/package/cabal-install/cabal-install-"
             version
             ".tar.gz"))
+      (patches (search-patches "cabal-install-base16-bytestring1.0.patch"
+                               "cabal-install-ghc8.10.patch"))
       (sha256
-       (base32 "1xmyl0x8wqfrnray6ky5wy0g0samv4264fbdlzxhqsvk9dbfja8k"))))
+       (base32 "1c0cc256bha97aj7l0lf76l5swlnmwcqppiz8l4cl5xgba4mwmd0"))))
    (build-system haskell-build-system)
-   (arguments
-    `(#:cabal-revision
-      ("2" "1xil5pim6j1ckqj61zz6l7xpfxxr3rkw2hvpws2f7pr9shk645dl")
-      #:phases
+    (arguments
+     `(#:phases
        (modify-phases %standard-phases
          (add-before 'configure 'update-constraints
            (lambda _
              (substitute* "cabal-install.cabal"
-               (("zip-archive >= 0\\.3\\.2\\.5 && < 0\\.4,")
-                "zip-archive >= 0.3.2.5 && <= 0.4.1,"))
-             #t)))))
+               (("(base|base16-bytestring|random)\\s+[^,]+" all dep)
+                dep)))))))
    (inputs
-    `(("ghc-async" ,ghc-async)
-      ("ghc-base16-bytestring" ,ghc-base16-bytestring)
-      ("ghc-cryptohash-sha256" ,ghc-cryptohash-sha256)
-      ("ghc-echo" ,ghc-echo)
-      ("ghc-edit-distance" ,ghc-edit-distance)
-      ("ghc-hackage-security" ,ghc-hackage-security)
-      ("ghc-hashable" ,ghc-hashable)
-      ("ghc-http" ,ghc-http)
-      ("ghc-network-uri" ,ghc-network-uri)
-      ("ghc-network" ,ghc-network)
-      ("ghc-random" ,ghc-random)
-      ("ghc-resolv" ,ghc-resolv)
-      ("ghc-tar" ,ghc-tar)
-      ("ghc-zip-archive" ,ghc-zip-archive)
-      ("ghc-zlib" ,ghc-zlib)))
+    (list ghc-async
+          ghc-base16-bytestring
+          ghc-cryptohash-sha256
+          ghc-echo
+          ghc-edit-distance
+          ghc-hackage-security
+          ghc-hashable
+          ghc-http
+          ghc-network-uri
+          ghc-network
+          ghc-random
+          ghc-resolv
+          ghc-tar
+          ghc-zip-archive
+          ghc-zlib))
    (home-page "https://www.haskell.org/cabal/")
    (synopsis "Command-line interface for Cabal and Hackage")
    (description
@@ -144,41 +139,10 @@ Haskell software by automating the fetching, configuration, compilation and
 installation of Haskell libraries and programs.")
    (license license:bsd-3)))
 
-(define-public corrode
-  (let ((revision "0")
-        (commit "b6699fb2fa552a07c6091276285a44133e5c9789"))
-    (package
-      (name "corrode")
-      (version (git-version "0.0.0" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/jameysharp/corrode")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32 "02v0yyj6sk4gpg2222wzsdqjxn8w66scbnf6b20x0kbmc69qcz4r"))))
-      (build-system haskell-build-system)
-      (inputs
-       `(("ghc-language-c" ,ghc-language-c)
-         ("ghc-markdown-unlit" ,ghc-markdown-unlit)))
-      (home-page "https://github.com/jameysharp/corrode")
-      (synopsis "Automatic semantics-preserving translation from C to Rust")
-      (description
-       "This program reads a C source file and prints an equivalent module in
-Rust syntax.  It is intended to be useful for two different purposes:
-
-@enumerate
-@item Partial automation for migrating legacy code that was implemented in C.
-@item A new, complementary approach to static analysis for C programs.
-@end enumerate\n")
-      (license license:gpl2+))))
-
 (define-public cpphs
   (package
     (name "cpphs")
-    (version "1.20.8")
+    (version "1.20.9.1")
     (source
      (origin
        (method url-fetch)
@@ -187,12 +151,10 @@ Rust syntax.  It is intended to be useful for two different purposes:
              name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1bh524asqhk9v1s0wvipl0hgn7l63iy3js867yv0z3h5v2kn8vg5"))))
+         "17wi7fma2qaqdm1hwgaam3fd140v9bpa8ky0wg708h1pqc5v2nbz"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-polyparse" ,ghc-polyparse)
-       ("ghc-old-locale" ,ghc-old-locale)
-       ("ghc-old-time" ,ghc-old-time)))
+     (list ghc-polyparse ghc-old-locale ghc-old-time))
     (home-page "http://projects.haskell.org/cpphs/")
     (synopsis "Liberalised re-implementation of cpp, the C pre-processor")
     (description "Cpphs is a re-implementation of the C pre-processor that is
@@ -210,7 +172,7 @@ unlit literate code files; and an option to turn off macro-expansion.")
 (define-public darcs
   (package
     (name "darcs")
-    (version "2.14.2")
+    (version "2.16.4")
     (source
      (origin
        (method url-fetch)
@@ -218,7 +180,7 @@ unlit literate code files; and an option to turn off macro-expansion.")
                            "darcs-" version ".tar.gz"))
        (sha256
         (base32
-         "0zm2486gyhiga1amclbg92cd09bvki6vgh0ll75hv5kl72j61lb5"))
+         "07dygwh6p4fsrlgxmq6r7yvxmf4n2y04izzd30jzqgs0pi9645p4"))
        (modules '((guix build utils)))
        ;; Remove time-dependent code for reproducibility.
        (snippet
@@ -229,8 +191,7 @@ unlit literate code files; and an option to turn off macro-expansion.")
            #t))))
     (build-system haskell-build-system)
     (arguments
-     `(#:cabal-revision
-       ("1" "0xl7j5cm704pbl2ms0dkydh7jvrz0ym76d725ifpg4h902m1zkhg")
+     `(#:tests? #f ; TODO: Needs QuickCheck ==2.13.*, and more…
        #:configure-flags '("-fpkgconfig" "-fcurl" "-flibiconv" "-fthreaded"
                            "-fnetwork-uri" "-fhttp" "--flag=executable"
                            "--flag=library")
@@ -244,53 +205,58 @@ unlit literate code files; and an option to turn off macro-expansion.")
          (add-before 'configure 'update-constraints
            (lambda _
              (substitute* "darcs.cabal"
-               (("QuickCheck   >= 2\\.8\\.2 && < 2\\.13,")
-                "QuickCheck   >= 2.8.2 && < 2.14,"))
-             #t)))))
+               (("(constraints)\\s+[^,]+" all dep)
+                dep)
+               (("(cryptonite)\\s+[^,]+" all dep)
+                dep)))))))
     (inputs
-     `(("ghc-cmdargs" ,ghc-cmdargs)
-       ("ghc-split" ,ghc-split)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-findbin" ,ghc-findbin)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-async" ,ghc-async)
-       ("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-base16-bytestring" ,ghc-base16-bytestring)
-       ("ghc-bytestring-builder" ,ghc-bytestring-builder)
-       ("ghc-cryptohash" ,ghc-cryptohash)
-       ("ghc-data-ordlist" ,ghc-data-ordlist)
-       ("ghc-fgl" ,ghc-fgl)
-       ("ghc-system-filepath" ,ghc-system-filepath)
-       ("ghc-graphviz" ,ghc-graphviz)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-html" ,ghc-html)
-       ("ghc-mmap" ,ghc-mmap)
-       ("ghc-old-time" ,ghc-old-time)
-       ("ghc-random" ,ghc-random)
-       ("ghc-regex-applicative" ,ghc-regex-applicative)
-       ("ghc-regex-compat-tdfa" ,ghc-regex-compat-tdfa)
-       ("ghc-sandi" ,ghc-sandi)
-       ("ghc-shelly" ,ghc-shelly)
-       ("ghc-tar" ,ghc-tar)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)
-       ("ghc-unix-compat" ,ghc-unix-compat)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-zip-archive" ,ghc-zip-archive)
-       ("ghc-zlib" ,ghc-zlib)
-       ("ghc-http" ,ghc-http)
-       ("curl" ,curl)
-       ("ghc" ,ghc)
-       ("ncurses" ,ncurses)
-       ("perl" ,perl)
-       ("libiconv" ,libiconv)
-       ("ghc-network" ,ghc-network)
-       ("ghc-network-uri" ,ghc-network-uri)))
+     (list ghc-cmdargs
+           ghc-split
+           ghc-test-framework-quickcheck2
+           ghc-test-framework-hunit
+           ghc-test-framework
+           ghc-quickcheck
+           ghc-constraints
+           ghc-findbin
+           ghc-hunit
+           ghc-cryptonite
+           ghc-http-conduit
+           ghc-http-types
+           ghc-async
+           ghc-attoparsec
+           ghc-base16-bytestring
+           ghc-bytestring-builder
+           ghc-cryptohash
+           ghc-data-ordlist
+           ghc-fgl
+           ghc-system-filepath
+           ghc-graphviz
+           ghc-hashable
+           ghc-html
+           ghc-mmap
+           ghc-old-time
+           ghc-random
+           ghc-regex-applicative
+           ghc-regex-compat-tdfa
+           ghc-sandi
+           ghc-shelly
+           ghc-tar
+           ghc-transformers-compat
+           ghc-unix-compat
+           ghc-utf8-string
+           ghc-vector
+           ghc-zip-archive
+           ghc-zlib
+           ghc-http
+           curl
+           ghc
+           ncurses
+           perl
+           libiconv
+           ghc-network
+           ghc-network-uri))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://darcs.net")
     (synopsis "Distributed Revision Control System")
     (description
@@ -322,14 +288,10 @@ unique algebra of patches called @url{http://darcs.net/Theory,Patchtheory}.
         (base32 "0yqc1pkfajnr56gnh43sbj50r7c3r41b2jfz07ivgl6phi4frjbq"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-extra" ,ghc-extra)
-       ("ghc-ansi-terminal" ,ghc-ansi-terminal)
-       ("ghc-cmdargs" ,ghc-cmdargs)
-       ("ghc-fsnotify" ,ghc-fsnotify)
-       ("ghc-terminal-size" ,ghc-terminal-size)))
+     (list ghc-extra ghc-ansi-terminal ghc-cmdargs ghc-fsnotify
+           ghc-terminal-size))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+     (list ghc-tasty ghc-tasty-hunit))
     (home-page "https://github.com/ndmitchell/ghcid#readme")
     (synopsis "GHCi based bare bones IDE")
     (description
@@ -344,14 +306,14 @@ to @code{cabal repl}).")
 (define-public git-annex
   (package
     (name "git-annex")
-    (version "8.20210903")
+    (version "8.20211231")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://hackage.haskell.org/package/"
                            "git-annex/git-annex-" version ".tar.gz"))
        (sha256
-        (base32 "1p6zgk98jmxvqdin5xsdxhgq276bjdr2spi0wabj8x0ziry97rvl"))))
+        (base32 "0cpa3rl8vcm0arima8x9m5q0a9r05z0851ibr1vcria2z0mmwmi7"))))
     (build-system haskell-build-system)
     (arguments
      `(#:configure-flags
@@ -400,15 +362,15 @@ to @code{cabal repl}).")
                  (format out "main = buildMansOrWarn~%")))
              (invoke "runhaskell" "Build/MakeMans.hs")))
          (replace 'check
-           (lambda _
+           (lambda* (#:key tests? #:allow-other-keys)
              ;; We need to set the path so that Git recognizes
              ;; `git annex' as a custom command.
              (setenv "PATH" (string-append (getenv "PATH") ":"
                                            (getcwd) "/dist/build/git-annex"))
-             (with-directory-excursion "dist/build/git-annex"
-               (symlink "git-annex" "git-annex-shell"))
-             (invoke "git-annex" "test")
-             #t))
+             (when tests?
+               (with-directory-excursion "dist/build/git-annex"
+                 (symlink "git-annex" "git-annex-shell"))
+               (invoke "git-annex" "test"))))
          (add-after 'check 'unpatch-shell-and-rebuild
            (lambda args
              ;; Undo `patch-shell-for-tests'.
@@ -442,69 +404,66 @@ to @code{cabal repl}).")
                (lambda ()
                  (display "static output not used\n"))))))))
     (inputs
-     `(("curl" ,curl)
-       ("ghc-aeson" ,ghc-aeson)
-       ("ghc-async" ,ghc-async)
-       ("ghc-aws" ,ghc-aws)
-       ("ghc-bloomfilter" ,ghc-bloomfilter)
-       ("ghc-byteable" ,ghc-byteable)
-       ("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-concurrent-output" ,ghc-concurrent-output)
-       ("ghc-crypto-api" ,ghc-crypto-api)
-       ("ghc-cryptonite" ,ghc-cryptonite)
-       ("ghc-data-default" ,ghc-data-default)
-       ("ghc-dav" ,ghc-dav)
-       ("ghc-disk-free-space" ,ghc-disk-free-space)
-       ("ghc-dlist" ,ghc-dlist)
-       ("ghc-edit-distance" ,ghc-edit-distance)
-       ("ghc-esqueleto" ,ghc-esqueleto)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-feed" ,ghc-feed)
-       ("ghc-filepath-bytestring" ,ghc-filepath-bytestring)
-       ("ghc-free" ,ghc-free)
-       ("ghc-hinotify" ,ghc-hinotify)
-       ("ghc-hslogger" ,ghc-hslogger)
-       ("ghc-http-client" ,ghc-http-client)
-       ("ghc-http-conduit" ,ghc-http-conduit)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-ifelse" ,ghc-ifelse)
-       ("ghc-magic" ,ghc-magic)
-       ("ghc-memory" ,ghc-memory)
-       ("ghc-monad-control" ,ghc-monad-control)
-       ("ghc-monad-logger" ,ghc-monad-logger)
-       ("ghc-mountpoints" ,ghc-mountpoints)
-       ("ghc-network" ,ghc-network)
-       ("ghc-network-info" ,ghc-network-info)
-       ("ghc-network-multicast" ,ghc-network-multicast)
-       ("ghc-old-locale" ,ghc-old-locale)
-       ("ghc-optparse-applicative" ,ghc-optparse-applicative)
-       ("ghc-persistent" ,ghc-persistent)
-       ("ghc-persistent-sqlite" ,ghc-persistent-sqlite)
-       ("ghc-persistent-template" ,ghc-persistent-template)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-random" ,ghc-random)
-       ("ghc-regex-tdfa" ,ghc-regex-tdfa)
-       ("ghc-resourcet" ,ghc-resourcet)
-       ("ghc-safesemaphore" ,ghc-safesemaphore)
-       ("ghc-sandi" ,ghc-sandi)
-       ("ghc-securemem" ,ghc-securemem)
-       ("ghc-socks" ,ghc-socks)
-       ("ghc-split" ,ghc-split)
-       ("ghc-stm-chans" ,ghc-stm-chans)
-       ("ghc-tagsoup" ,ghc-tagsoup)
-       ("ghc-torrent" ,ghc-torrent)
-       ("ghc-unix-compat" ,ghc-unix-compat)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("ghc-uuid" ,ghc-uuid)
-       ("git" ,git)
-       ("rsync" ,rsync)))
+     (list curl
+           ghc-aeson
+           ghc-async
+           ghc-aws
+           ghc-bloomfilter
+           ghc-byteable
+           ghc-case-insensitive
+           ghc-concurrent-output
+           ghc-crypto-api
+           ghc-cryptonite
+           ghc-data-default
+           ghc-dav
+           ghc-disk-free-space
+           ghc-dlist
+           ghc-edit-distance
+           ghc-esqueleto
+           ghc-exceptions
+           ghc-feed
+           ghc-filepath-bytestring
+           ghc-free
+           ghc-hinotify
+           ghc-hslogger
+           ghc-http-client
+           ghc-http-conduit
+           ghc-http-types
+           ghc-ifelse
+           ghc-magic
+           ghc-memory
+           ghc-monad-control
+           ghc-monad-logger
+           ghc-mountpoints
+           ghc-network
+           ghc-network-info
+           ghc-network-multicast
+           ghc-old-locale
+           ghc-optparse-applicative
+           ghc-persistent
+           ghc-persistent-sqlite
+           ghc-persistent-template
+           ghc-quickcheck
+           ghc-random
+           ghc-regex-tdfa
+           ghc-resourcet
+           ghc-safesemaphore
+           ghc-sandi
+           ghc-securemem
+           ghc-socks
+           ghc-split
+           ghc-stm-chans
+           ghc-tagsoup
+           ghc-torrent
+           ghc-unix-compat
+           ghc-unordered-containers
+           ghc-utf8-string
+           ghc-uuid
+           git
+           rsync))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-tasty-rerun" ,ghc-tasty-rerun)
-       ("perl" ,perl)))
+     (list ghc-tasty ghc-tasty-hunit ghc-tasty-quickcheck ghc-tasty-rerun
+           perl))
     (home-page "https://git-annex.branchable.com/")
     (synopsis "Manage files with Git, without checking in their contents")
     (description "This package allows managing files with Git, without
@@ -525,7 +484,7 @@ used to keep a folder in sync between computers.")
 (define-public hlint
   (package
     (name "hlint")
-    (version "2.1.26")
+    (version "3.2.7")
     (source
      (origin
        (method url-fetch)
@@ -534,24 +493,25 @@ used to keep a folder in sync between computers.")
              "/" name "-" version ".tar.gz"))
        (sha256
         (base32
-         "16zkkpbfrd69853cdqf597fva969lirfc86b039i9zd7ghlrcayc"))))
+         "0z6gxndrh7blzapkdn6fq1pkbkjlmbgjbq9ydnvy2wm00fb3v73g"))))
     (build-system haskell-build-system)
     (inputs
-     `(("cpphs" ,cpphs)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-yaml" ,ghc-yaml)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-data-default" ,ghc-data-default)
-       ("ghc-cmdargs" ,ghc-cmdargs)
-       ("ghc-haskell-src-exts" ,ghc-haskell-src-exts)
-       ("ghc-haskell-src-exts-util" ,ghc-haskell-src-exts-util)
-       ("ghc-uniplate" ,ghc-uniplate)
-       ("ghc-ansi-terminal" ,ghc-ansi-terminal)
-       ("ghc-extra" ,ghc-extra)
-       ("ghc-refact" ,ghc-refact)
-       ("ghc-aeson" ,ghc-aeson)
-       ("ghc-lib-parser" ,ghc-lib-parser)
-       ("hscolour" ,hscolour)))
+     (list ghc-unordered-containers
+           ghc-yaml
+           ghc-vector
+           ghc-data-default
+           ghc-file-embed
+           ghc-utf8-string
+           cpphs
+           ghc-filepattern
+           ghc-lib-parser-ex
+           hscolour
+           ghc-cmdargs
+           ghc-uniplate
+           ghc-ansi-terminal
+           ghc-extra
+           ghc-refact
+           ghc-aeson))
     (home-page "https://github.com/ndmitchell/hlint")
     (synopsis "Suggest improvements for Haskell source code")
     (description "HLint reads Haskell programs and suggests changes that
@@ -562,7 +522,7 @@ unwanted suggestions, and to add your own custom suggestions.")
 (define-public hoogle
   (package
     (name "hoogle")
-    (version "5.0.17.11")
+    (version "5.0.18.2")
     (source
      (origin
        (method url-fetch)
@@ -572,38 +532,38 @@ unwanted suggestions, and to add your own custom suggestions.")
          version ".tar.gz"))
        (sha256
         (base32
-         "1svp8z9pad8z2j386pr0dda0ds8ddxab0salnz4gm51q877w93p1"))))
+         "1xacx2f33x1a4qlv25f8rlmb4wi0cjfzrj22nlnkrd0knghik3m7"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-aeson" ,ghc-aeson)
-       ("ghc-blaze-html" ,ghc-blaze-html)
-       ("ghc-blaze-markup" ,ghc-blaze-markup)
-       ("ghc-cmdargs" ,ghc-cmdargs)
-       ("ghc-conduit" ,ghc-conduit)
-       ("ghc-conduit-extra" ,ghc-conduit-extra)
-       ("ghc-connection" ,ghc-connection)
-       ("ghc-extra" ,ghc-extra)
-       ("ghc-foundation" ,ghc-foundation)
-       ("ghc-old-locale" ,ghc-old-locale)
-       ("ghc-haskell-src-exts" ,ghc-haskell-src-exts)
-       ("ghc-http-conduit" ,ghc-http-conduit)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-js-flot" ,ghc-js-flot)
-       ("ghc-js-jquery" ,ghc-js-jquery)
-       ("ghc-mmap" ,ghc-mmap)
-       ("ghc-process-extras" ,ghc-process-extras)
-       ("ghc-resourcet" ,ghc-resourcet)
-       ("ghc-storable-tuple" ,ghc-storable-tuple)
-       ("ghc-tar" ,ghc-tar)
-       ("ghc-uniplate" ,ghc-uniplate)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-wai" ,ghc-wai)
-       ("ghc-wai-logger" ,ghc-wai-logger)
-       ("ghc-warp" ,ghc-warp)
-       ("ghc-warp-tls" ,ghc-warp-tls)
-       ("ghc-zlib" ,ghc-zlib)))
+     (list ghc-quickcheck
+           ghc-aeson
+           ghc-blaze-html
+           ghc-blaze-markup
+           ghc-cmdargs
+           ghc-conduit
+           ghc-conduit-extra
+           ghc-connection
+           ghc-extra
+           ghc-foundation
+           ghc-old-locale
+           ghc-haskell-src-exts
+           ghc-http-conduit
+           ghc-http-types
+           ghc-js-flot
+           ghc-js-jquery
+           ghc-mmap
+           ghc-process-extras
+           ghc-resourcet
+           ghc-storable-tuple
+           ghc-tar
+           ghc-uniplate
+           ghc-utf8-string
+           ghc-vector
+           ghc-wai
+           ghc-wai-logger
+           ghc-warp
+           ghc-warp-tls
+           ghc-zlib))
     (home-page "https://hoogle.haskell.org/")
     (synopsis "Haskell API Search")
     (description "Hoogle is a Haskell API search engine, which allows
@@ -675,17 +635,17 @@ and mIRC chat codes.")
                (copy-recursively "keymap" (string-append doc "/keymap"))
                #t))))))
     (inputs
-     `(("ghc-cereal" ,ghc-cereal)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-lens" ,ghc-lens)
-       ("ghc-megaparsec" ,ghc-megaparsec)
-       ("ghc-optparse-applicative" ,ghc-optparse-applicative)
-       ("ghc-resourcet" ,ghc-resourcet)
-       ("ghc-rio" ,ghc-rio)
-       ("ghc-unagi-chan" ,ghc-unagi-chan)
-       ("ghc-unliftio" ,ghc-unliftio)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)))
+     (list ghc-cereal
+           ghc-exceptions
+           ghc-hashable
+           ghc-lens
+           ghc-megaparsec
+           ghc-optparse-applicative
+           ghc-resourcet
+           ghc-rio
+           ghc-unagi-chan
+           ghc-unliftio
+           ghc-unordered-containers))
     (home-page "https://github.com/david-janssen/kmonad")
     (synopsis "Advanced keyboard manager")
     (description "KMonad is a keyboard remapping utility that supports
@@ -710,13 +670,18 @@ Wayland, and Linux console environments alike.")
         (base32 "1ispgl8rc2scr6v8bb6sks7px856jf61x74zj2iyddrn5qamkb3n"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-megaparsec" ,ghc-megaparsec)
-       ("ghc-parser-combinators" ,ghc-parser-combinators)
-       ("ghc-cmdargs" ,ghc-cmdargs)
-       ("ghc-safe-exceptions" ,ghc-safe-exceptions)))
+     (list ghc-megaparsec ghc-parser-combinators ghc-cmdargs
+           ghc-safe-exceptions))
     (arguments
      `(#:cabal-revision
-       ("1" "1hsj0jh6siph3afd9c2wii09sffl48rzqv653n4clpd8qy0rn48d")))
+       ("1" "1hsj0jh6siph3afd9c2wii09sffl48rzqv653n4clpd8qy0rn48d")
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'update-constraints
+           (lambda _
+             (substitute* "nixfmt.cabal"
+               (("(base|megaparsec)\\s+[^,]+" all dep)
+                dep)))))))
     (home-page "https://github.com/serokell/nixfmt")
     (synopsis "Opinionated formatter for Nix")
     (description
@@ -739,19 +704,19 @@ formatting by forgetting all existing formatting during parsing.")
         (base32 "1baw360dcnyavacf7a8v6wq4m5g6bcmyybkckv4cz7r4xl5p3qws"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxscrnsaver" ,libxscrnsaver)
-       ("ghc-x11" ,ghc-x11)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-microlens" ,ghc-microlens)
-       ("ghc-microlens-mtl" ,ghc-microlens-mtl)
-       ("ghc-protolude" ,ghc-protolude-0.3)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-wordexp" ,ghc-wordexp)))
+     (list libx11
+           libxext
+           libxscrnsaver
+           ghc-x11
+           ghc-exceptions
+           ghc-hashable
+           ghc-microlens
+           ghc-microlens-mtl
+           ghc-protolude
+           ghc-vector
+           ghc-wordexp))
     (home-page "https://github.com/erebe/greenclip")
     (synopsis "Simple Clipboard manager")
     (description "@code{greenclip} is a clipboard manager written in
@@ -783,14 +748,14 @@ Haskell.")
                                     "/lib"))))
                #t))))))
     (inputs
-     `(("ghc-extensible-exceptions" ,ghc-extensible-exceptions)
-       ("ghc-random" ,ghc-random)
-       ("ghc-glut" ,ghc-glut)
-       ("freeglut" ,freeglut)
-       ("ghc-opengl" ,ghc-opengl)
-       ("ghc-sdl2" ,ghc-sdl2)
-       ("ghc-sdl2-image" ,ghc-sdl2-image)
-       ("ghc-sdl2-mixer" ,ghc-sdl2-mixer)))
+     (list ghc-extensible-exceptions
+           ghc-random
+           ghc-glut
+           freeglut
+           ghc-opengl
+           ghc-sdl2
+           ghc-sdl2-image
+           ghc-sdl2-mixer))
     (home-page "https://www.gamecreation.org/games/raincat")
     (synopsis "Puzzle game with a cat in lead role")
     (description "Project Raincat is a game developed by Carnegie Mellon
@@ -829,14 +794,14 @@ is programmed in Haskell.")
                  (display "static output not used\n")))
              #t)))))
     (inputs
-     `(("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-data-default" ,ghc-data-default)
-       ("ghc-ifelse" ,ghc-ifelse)
-       ("ghc-monad-loops" ,ghc-monad-loops)
-       ("ghc-ncurses" ,ghc-ncurses)
-       ("ghc-optparse-applicative" ,ghc-optparse-applicative)
-       ("ghc-random" ,ghc-random)
-       ("ghc-vector" ,ghc-vector)))
+     (list ghc-case-insensitive
+           ghc-data-default
+           ghc-ifelse
+           ghc-monad-loops
+           ghc-ncurses
+           ghc-optparse-applicative
+           ghc-random
+           ghc-vector))
     (home-page "https://joeyh.name/code/scroll/")
     (synopsis "scroll(6), a roguelike game")
     (description
@@ -848,7 +813,7 @@ too slow and you'll get wound up in the scroll and crushed.")
 (define-public shellcheck
   (package
     (name "shellcheck")
-    (version "0.7.1")
+    (version "0.8.0")
     (source
      (origin
        (method url-fetch)
@@ -856,11 +821,12 @@ too slow and you'll get wound up in the scroll and crushed.")
              "https://hackage.haskell.org/package/ShellCheck/ShellCheck-"
              version ".tar.gz"))
        (sha256
-        (base32 "06m4wh891nah3y0br4wh3adpsb16zawkb2ijgf1vcz61fznj6ps1"))
+        (base32 "05jlapp4m997w36h2wszdxz9gvczdczaylypsbn14jqpb650w232"))
        (file-name (string-append name "-" version ".tar.gz"))))
     (build-system haskell-build-system)
     (arguments
-     '(#:phases
+     '(#:haddock? #f ; TODO: Fails to build.
+       #:phases
        (modify-phases %standard-phases
          (add-after 'build 'build-man-page
            (lambda _
@@ -871,12 +837,9 @@ too slow and you'll get wound up in the scroll and crushed.")
                            (string-append (assoc-ref outputs "out")
                                           "/share/man/man1/")))))))
     (native-inputs
-     `(("pandoc" ,pandoc)))
+     (list pandoc))
     (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-diff" ,ghc-diff)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-regex-tdfa" ,ghc-regex-tdfa)))
+     (list ghc-aeson ghc-diff ghc-quickcheck ghc-regex-tdfa))
     (home-page "https://www.shellcheck.net/")
     (synopsis "Static analysis for shell scripts")
     (description "@code{shellcheck} provides static analysis for
@@ -928,16 +891,16 @@ advanced user's otherwise working script to fail under future circumstances.
                    (format #t "test suite not run~%"))
                #t))))))
     (inputs
-     `(("ghc-diff" ,ghc-diff)
-       ("ghc-cmdargs" ,ghc-cmdargs)
-       ("ghc-filemanip" ,ghc-filemanip)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-pretty-show" ,ghc-pretty-show)
-       ("ghc-regex-tdfa" ,ghc-regex-tdfa)
-       ("ghc-safe" ,ghc-safe)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)))
+     (list ghc-diff
+           ghc-cmdargs
+           ghc-filemanip
+           ghc-hunit
+           ghc-pretty-show
+           ghc-regex-tdfa
+           ghc-safe
+           ghc-utf8-string
+           ghc-test-framework
+           ghc-test-framework-hunit))
     (home-page "https://github.com/simonmichael/shelltestrunner")
     (synopsis "Test CLI programs")
     (description
@@ -950,30 +913,32 @@ output, stderr, and exit status.")
 (define-public stylish-haskell
   (package
     (name "stylish-haskell")
-    (version "0.9.2.2")
+    (version "0.13.0.0")
     (source
      (origin
        (method url-fetch)
        (uri
         (string-append
-         "mirror://hackage/package/stylish-haskell/"
+         "https://hackage.haskell.org/package/stylish-haskell/"
          "stylish-haskell-" version ".tar.gz"))
        (sha256
         (base32
-         "1zs624xqp6j8vrl6pfv18dm8vz8hvz25grri65ximxhcizgwhnax"))))
+         "0x9w3zh1lzp6l5xj3mynnlr0fzb5mbv0wwpfxp8fr6bk0jcrzjwf"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-file-embed" ,ghc-file-embed)
-       ("ghc-haskell-src-exts" ,ghc-haskell-src-exts)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-syb" ,ghc-syb)
-       ("ghc-yaml" ,ghc-yaml)
-       ("ghc-strict" ,ghc-strict)
-       ("ghc-optparse-applicative" ,ghc-optparse-applicative)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)))
+     (list ghc-aeson
+           ghc-file-embed
+           ghc-haskell-src-exts
+           ghc-semigroups
+           ghc-syb
+           ghc-hsyaml
+           ghc-hsyaml-aeson
+           ghc-lib-parser
+           ghc-strict
+           ghc-optparse-applicative
+           ghc-hunit
+           ghc-test-framework
+           ghc-test-framework-hunit))
     (home-page "https://github.com/jaspervdj/stylish-haskell")
     (synopsis "Haskell code prettifier")
     (description "Stylish-haskell is a Haskell code prettifier.  The goal is
@@ -999,6 +964,3 @@ Replace some ASCII sequences by their Unicode equivalent (turned off by
 default)
 @end itemize")
     (license license:bsd-3)))
-
-(define-public ghc-stylish-haskell
-  (deprecated-package "ghc-stylish-haskell" stylish-haskell))
diff --git a/gnu/packages/haskell-check.scm b/gnu/packages/haskell-check.scm
index a200c1b60c..62433cdb15 100644
--- a/gnu/packages/haskell-check.scm
+++ b/gnu/packages/haskell-check.scm
@@ -13,6 +13,7 @@
 ;;; Copyright © 2019 Timothy Sample <samplet@ngyro.com>
 ;;; Copyright © 2020 John Soo <jsoo1@asu.edu>
 ;;; Copyright © 2020 Carlo Holl <carloholl@gmail.com>
+;;; Copyright © 2021 John Kehayias <john.kehayias@protonmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -32,6 +33,7 @@
 (define-module (gnu packages haskell-check)
   #:use-module (gnu packages)
   #:use-module (gnu packages haskell-crypto)
+  #:use-module (gnu packages haskell-web)
   #:use-module (gnu packages haskell-xyz)
   #:use-module (guix build-system haskell)
   #:use-module (guix download)
@@ -42,7 +44,7 @@
 (define-public ghc-tasty-ant-xml
   (package
     (name "ghc-tasty-ant-xml")
-    (version "1.1.6")
+    (version "1.1.8")
     (source
      (origin
        (method url-fetch)
@@ -52,13 +54,10 @@
              ".tar.gz"))
        (sha256
         (base32
-         "13qqpl1prr9dda87dp45mqybay24n8rhxxgvpc9j34kh72g8j5qw"))))
+         "0h9mllhw9cd0rn34xhj8grwmbny7z7hpd8qmp9lfcdj0s4qx9vx8"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-generic-deriving" ,ghc-generic-deriving)
-       ("ghc-xml" ,ghc-xml)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-tasty" ,ghc-tasty)))
+     (list ghc-generic-deriving ghc-xml ghc-tagged ghc-tasty))
     (home-page
      "https://github.com/ocharles/tasty-ant-xml")
     (synopsis
@@ -72,7 +71,7 @@ framework.")
 (define-public ghc-tasty-smallcheck
   (package
     (name "ghc-tasty-smallcheck")
-    (version "0.8.1")
+    (version "0.8.2")
     (source
      (origin
        (method url-fetch)
@@ -82,13 +81,10 @@ framework.")
              ".tar.gz"))
        (sha256
         (base32
-         "1n66ngzllf3xrlqykwszlkwsi96n5nkm7xbpfq7774vpvfnafjri"))))
+         "0csgwn3vch0jnpqyyfnrfjq4z0dpl67imh5a7byll3hhlyidgjym"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-smallcheck" ,ghc-smallcheck)
-       ("ghc-async" ,ghc-async)
-       ("ghc-tagged" ,ghc-tagged)))
+     (list ghc-tasty ghc-smallcheck ghc-async ghc-tagged))
     (home-page "https://documentup.com/feuerbach/tasty")
     (synopsis "SmallCheck support for the Tasty test framework")
     (description "This package provides SmallCheck support for the Tasty
@@ -98,7 +94,7 @@ Haskell test framework.")
 (define-public ghc-tasty-quickcheck
   (package
     (name "ghc-tasty-quickcheck")
-    (version "0.10.1")
+    (version "0.10.1.2")
     (source
      (origin
        (method url-fetch)
@@ -107,16 +103,16 @@ Haskell test framework.")
              "tasty-quickcheck-" version ".tar.gz"))
        (sha256
         (base32
-         "0k4vvd5vmrncv1s6gdf03l4xijwlk428sb9jfx8n1zaz02971msh"))))
+         "0i1i78587znqzwps49milyr5n2k388ld2kr9ysz1vw8gcw51qq49"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-random" ,ghc-random)
-       ("ghc-ansi-terminal" ,ghc-ansi-terminal)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-pcre-light" ,ghc-pcre-light)))
+     (list ghc-quickcheck
+           ghc-tagged
+           ghc-tasty
+           ghc-random
+           ghc-ansi-terminal
+           ghc-tasty-hunit
+           ghc-pcre-light))
     (home-page "http://documentup.com/feuerbach/tasty")
     (synopsis "QuickCheck support for the Tasty test framework")
     (description "This package provides QuickCheck support for the Tasty
@@ -126,7 +122,7 @@ Haskell test framework.")
 (define-public ghc-tasty-golden
   (package
     (name "ghc-tasty-golden")
-    (version "2.3.2")
+    (version "2.3.4")
     (source
      (origin
        (method url-fetch)
@@ -136,16 +132,16 @@ Haskell test framework.")
              ".tar.gz"))
        (sha256
         (base32
-         "0k3ibjhjc9vcwzrjnl4rnwvfm8l81q347nb7dgvcib6n5wm3s404"))))
+         "1nskavqgfxx1cw7q6c0cmizlwj54rnlv93yhgssaa77gv1nbvwpn"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-temporary" ,ghc-temporary)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-optparse-applicative" ,ghc-optparse-applicative)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-async" ,ghc-async)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-temporary-rc" ,ghc-temporary-rc)))
+     (list ghc-async
+           ghc-optparse-applicative
+           ghc-tagged
+           ghc-tasty
+           ghc-temporary
+           ghc-unix-compat))
+    (native-inputs (list ghc-tasty-hunit))
     (home-page
      "https://github.com/feuerbach/tasty-golden")
     (synopsis "Golden tests support for tasty")
@@ -159,7 +155,7 @@ contains the correct result for the test.")
 (define-public ghc-tasty
   (package
     (name "ghc-tasty")
-    (version "1.2.3")
+    (version "1.4.2")
     (source
      (origin
        (method url-fetch)
@@ -169,17 +165,17 @@ contains the correct result for the test.")
              ".tar.gz"))
        (sha256
         (base32
-         "0qpn0avpw4w1qq5r2gwh2piipj0llqq6ylagr3xnqiraq6mhg8cc"))))
+         "0574hbqzxzyv6vsk5kzbf04kz58y0iy8x9ydcj4b8fpncgmgy63g"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-tagged" ,ghc-tagged)
-       ("ghc-regex-tdfa" ,ghc-regex-tdfa)
-       ("ghc-optparse-applicative" ,ghc-optparse-applicative)
-       ("ghc-unbounded-delays" ,ghc-unbounded-delays)
-       ("ghc-async" ,ghc-async)
-       ("ghc-ansi-terminal" ,ghc-ansi-terminal)
-       ("ghc-clock-bootstrap" ,ghc-clock-bootstrap)
-       ("ghc-wcwidth" ,ghc-wcwidth-bootstrap)))
+     (list ghc-tagged
+           ghc-regex-tdfa
+           ghc-optparse-applicative
+           ghc-unbounded-delays
+           ghc-async
+           ghc-ansi-terminal
+           ghc-clock-bootstrap
+           ghc-wcwidth-bootstrap))
     (home-page "http://documentup.com/feuerbach/tasty")
     (synopsis "Modern and extensible testing framework")
     (description "Tasty is a modern testing framework for Haskell.  It lets
@@ -190,7 +186,7 @@ and any other types of tests into a single test suite.")
 (define-public ghc-tasty-hedgehog
   (package
     (name "ghc-tasty-hedgehog")
-    (version "1.0.0.1")
+    (version "1.1.0.0")
     (source
      (origin
        (method url-fetch)
@@ -198,17 +194,12 @@ and any other types of tests into a single test suite.")
                            "tasty-hedgehog/tasty-hedgehog-" version ".tar.gz"))
        (sha256
         (base32
-         "1mbg5q0c0xfrk4npfj60pi693igb7r5l78x6xf9fk2jglw0nmxhz"))))
+         "0cy49z8n124xh2ra2482vfy5if1n6d9lbdjma2zg1mxfj0k0zyfb"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-tagged" ,ghc-tagged)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-hedgehog" ,ghc-hedgehog)))
+     (list ghc-tagged ghc-tasty ghc-hedgehog))
     (native-inputs
-     `(("ghc-tasty-expected-failure" ,ghc-tasty-expected-failure)))
-    (arguments
-     `(#:cabal-revision
-       ("1" "1n6797fm8swyrk8cw7zxz593gq82wx8dayvm204rmgcz75bslcpn")))
+     (list ghc-tasty-expected-failure))
     (home-page "https://github.com/qfpl/tasty-hedgehog")
     (synopsis "Integration for tasty and hedgehog")
     (description "This package provides the means for integrating the
@@ -220,28 +211,29 @@ framework}.")
 (define-public ghc-tasty-hspec
   (package
     (name "ghc-tasty-hspec")
-    (version "1.1.5.1")
+    (version "1.1.6")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
-             "mirror://hackage/package/tasty-hspec/tasty-hspec-"
+             "https://hackage.haskell.org/package/tasty-hspec/tasty-hspec-"
              version
              ".tar.gz"))
        (sha256
         (base32
-         "0i9kdzjpk750sa078jj3iyhp72k0177zk7vxl131r6dkyz09x27y"))))
+         "02s82ijs2ringqxsqbm7m3vcy5brmwxa617azxv0v2phi3rdkjvl"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-hspec-core" ,ghc-hspec-core)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-smallcheck" ,ghc-tasty-smallcheck)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+     (list ghc-hspec
+           ghc-hspec-core
+           ghc-quickcheck
+           ghc-tagged
+           ghc-tasty
+           ghc-tasty-smallcheck
+           ghc-tasty-quickcheck))
     (arguments
      `(#:cabal-revision
-       ("4" "1yppwhs2r2rlwrzli9ccv5ldgl95h5p7pqhsr898r3das6daf6sk")))
+       ("1" "0za15rg0szacxq9yfxxjzddr77ai7ng5827a20pj9dr5anjlnajj")))
     (home-page
      "https://github.com/mitchellwrosen/tasty-hspec")
     (synopsis
@@ -253,7 +245,7 @@ framework}.")
 (define-public ghc-tasty-hunit
   (package
     (name "ghc-tasty-hunit")
-    (version "0.10.0.2")
+    (version "0.10.0.3")
     (source
      (origin
        (method url-fetch)
@@ -263,11 +255,10 @@ framework}.")
              ".tar.gz"))
        (sha256
         (base32
-         "1xvf5xs0r8xqkcg354klz4wyzwyzvinalyl6f4fnxwqmzrgch8s8"))))
+         "0gz6zz3w7s44pymw33xcxnawryl27zk33766sab96nz2xh91kvxp"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-call-stack" ,ghc-call-stack-boot)
-       ("ghc-tasty" ,ghc-tasty)))
+     (list ghc-call-stack-boot ghc-tasty))
     (home-page "http://documentup.com/feuerbach/tasty")
     (synopsis "HUnit support for the Tasty test framework")
     (description "This package provides HUnit support for the Tasty Haskell
@@ -287,9 +278,7 @@ test framework.")
                 "14yvlpli6cv6bn3kh8mlfp4x1l6ns4fvmfv6hmj75cvxyzq029d7"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+     (list ghc-tasty ghc-tasty-quickcheck ghc-tasty-hunit))
     (home-page "https://github.com/vincenthz/tasty-kat")
     (synopsis "Known Answer Tests (KAT) framework for tasty")
     (description
@@ -300,7 +289,7 @@ tasty.")
 (define-public ghc-tasty-lua
   (package
     (name "ghc-tasty-lua")
-    (version "0.2.0.1")
+    (version "0.2.3.2")
     (source
      (origin
        (method url-fetch)
@@ -308,14 +297,12 @@ tasty.")
                            "tasty-lua/tasty-lua-" version ".tar.gz"))
        (sha256
         (base32
-         "0xlj36rrhkx312h7smx6ay20rhlhxvw2ma2ckdnzv1pvmdn6p5qx"))))
+         "0wa73ihkjcxi50lgpdzwwdx7s903lqi79hw7hxlvhbcvdly1cq53"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-file-embed" ,ghc-file-embed)
-       ("ghc-hslua" ,ghc-hslua)
-       ("ghc-tasty" ,ghc-tasty)))
+     (list ghc-file-embed ghc-hslua ghc-tasty))
     (native-inputs
-     `(("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+     (list ghc-tasty-hunit))
     (home-page "https://github.com/hslua/tasty-lua")
     (synopsis "Write tests in Lua, integrate into tasty")
     (description "This package gives users the ability to define tasty tests
@@ -337,9 +324,7 @@ from Lua.")
          "0b2ivrw2257m4cy4rjnkwqlarh83j1y3zywnmaqqqbvy667sqnj3"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-haskell-src-exts" ,ghc-haskell-src-exts)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+     (list ghc-haskell-src-exts ghc-tasty ghc-tasty-hunit))
     (home-page "https://github.com/bennofs/tasty-th")
     (synopsis "Automatically generate tasty TestTrees")
     (description
@@ -352,7 +337,7 @@ test-framework.")
 (define-public ghc-tasty-rerun
   (package
     (name "ghc-tasty-rerun")
-    (version "1.1.14")
+    (version "1.1.18")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -360,14 +345,11 @@ test-framework.")
                     "tasty-rerun-" version ".tar.gz"))
               (sha256
                (base32
-                "0s0zj8ds4g1w2cjzm2lh25ivg962jigqdrbj08v3dbz64lx4mlzr"))))
+                "0sccp5zx9v2rx741nbmgd8mzjhy5m4v74hk26d23xz93ph8aqx7s"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-optparse-applicative" ,ghc-optparse-applicative)
-       ("ghc-reducers" ,ghc-reducers)
-       ("ghc-split" ,ghc-split)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-tasty" ,ghc-tasty)))
+     (list ghc-optparse-applicative ghc-reducers ghc-split ghc-tagged
+           ghc-tasty))
     (home-page "https://github.com/ocharles/tasty-rerun")
     (synopsis "Run tests by filtering the test tree")
     (description "This package adds the ability to run tests by filtering the
@@ -379,7 +361,7 @@ been added since previous test run.")
 (define-public ghc-tasty-expected-failure
   (package
     (name "ghc-tasty-expected-failure")
-    (version "0.11.1.2")
+    (version "0.12.3")
     (source
      (origin
        (method url-fetch)
@@ -388,11 +370,16 @@ been added since previous test run.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "175gdk1mkslcwjxajkbl4zmaigzf8h4svzd7va5qb519y0dxk28n"))))
+         "0zlgxs24d54byfhvwdg85xk1572zpjs71bjlxxrxcvralrfcq1yb"))))
     (build-system haskell-build-system)
+    (arguments `(#:tests? #f)) ; TODO: Loops.
+;    (native-inputs
+;     `(("ghc-tasty-hunit" ,ghc-tasty-hunit)
+;       ("ghc-tasty-golden" ,ghc-tasty-golden)
+;       ("ghc-hedgehog" ,ghc-hedgehog)
+;       ("ghc-tasty-hedgehog" ,ghc-tasty-hedgehog)))
     (inputs
-     `(("ghc-tagged" ,ghc-tagged)
-       ("ghc-tasty" ,ghc-tasty)))
+     (list ghc-tagged ghc-tasty ghc-unbounded-delays))
     (home-page "https://github.com/nomeata/tasty-expected-failure")
     (synopsis "Mark tasty tests as failure expected")
     (description
@@ -405,7 +392,7 @@ development.")
 (define-public ghc-quickcheck-instances
   (package
     (name "ghc-quickcheck-instances")
-    (version "0.3.22")
+    (version "0.3.25.2")
     (source
      (origin
        (method url-fetch)
@@ -415,24 +402,28 @@ development.")
              version ".tar.gz"))
        (sha256
         (base32
-         "14asr9r7da3w7p4hjj51w2yb002nz8x0np8hdz9z4yjvi60vyrax"))))
+         "0ihqbarl2ddrfgq3mq09lswwn8213qpw13g49qxs5mjkcm6gbk3h"))))
     (build-system haskell-build-system)
     (arguments
      `(#:cabal-revision
-       ("2" "1ia5fjhpg7rz793552v88gv2iqx7hl9mi2g09m0llasy1cpzc9jr")))
+       ("2" "1lsa3pbg4ljlk29fhm3mdklnx3hwffyga1nr5krbpcyc3ywq8fq8")))
     (inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-base-compat" ,ghc-base-compat)
-       ("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-old-time" ,ghc-old-time)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-time-compat" ,ghc-time-compat)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-uuid-types" ,ghc-uuid-types)
-       ("ghc-vector" ,ghc-vector)))
+     (list ghc-case-insensitive
+           ghc-data-fix
+           ghc-hashable
+           ghc-integer-logarithms
+           ghc-old-time
+           ghc-quickcheck
+           ghc-scientific
+           ghc-splitmix
+           ghc-strict
+           ghc-tagged
+           ghc-these
+           ghc-time-compat
+           ghc-transformers-compat
+           ghc-unordered-containers
+           ghc-uuid-types
+           ghc-vector))
     (home-page "https://github.com/aslatter/qc-instances")
     (synopsis "Common quickcheck instances")
     (description "This package provides QuickCheck instances for types
@@ -453,7 +444,7 @@ provided by the Haskell Platform.")
         (base32
          "0s43s1bzbg3gwsjgm7fpyksd1339f0m26dlw2famxwyzgvm0a80k"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-quickcheck" ,ghc-quickcheck)))
+    (inputs (list ghc-quickcheck))
     (home-page
      "https://github.com/bos/quickcheck-unicode")
     (synopsis "Generator functions Unicode-related tests")
@@ -477,8 +468,7 @@ testing Unicode-related software.")
          "08k4v7pkgjf30pv5j2dfv1gqv6hclxlniyq2sps8zq4zswcr2xzv"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-hunit" ,ghc-hunit)))
+     (list ghc-quickcheck ghc-hunit))
     (home-page
      "https://github.com/hspec/quickcheck-io#readme")
     (synopsis "Use HUnit assertions as QuickCheck properties")
@@ -489,8 +479,7 @@ use HUnit assertions as QuickCheck properties.")
 (define-public ghc-quickcheck
   (package
     (name "ghc-quickcheck")
-    (version "2.13.2")
-    (outputs '("out" "static" "doc"))
+    (version "2.14.2")
     (source
      (origin
        (method url-fetch)
@@ -500,11 +489,10 @@ use HUnit assertions as QuickCheck properties.")
              ".tar.gz"))
        (sha256
         (base32
-         "0426j43af8v3qmdjjqxivazsvr3a2brac8yw09vpgpjkb2m0nmkv"))))
+         "1wrnrm9sq4s0bly0q58y80g4153q45iglqa34xsi2q3bd62nqyyq"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-random" ,ghc-random)
-       ("ghc-splitmix" ,ghc-splitmix-bootstrap)))
+     (list ghc-random ghc-splitmix-bootstrap))
     (home-page "https://github.com/nick8325/quickcheck")
     (synopsis "Automatic testing of Haskell programs")
     (description
@@ -529,11 +517,9 @@ expressed in Haskell, using combinators defined in the QuickCheck library.")
         (base32 "1kyam4cy7qmnizjwjm8jamq43w7f0fs6ljfplwj0ib6wi2kjh0wv"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)))
+     (list ghc-hspec))
     (inputs
-     `(("ghc-ieee754" ,ghc-ieee754)
-       ("ghc-pretty-show" ,ghc-pretty-show)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-ieee754 ghc-pretty-show ghc-quickcheck))
     (home-page "https://github.com/s9gf4ult/quickcheck-assertions")
     (synopsis "HUnit-like assertions for QuickCheck")
     (description
@@ -558,10 +544,9 @@ HUnit.")
     (arguments
      `(#:tests? #f  ; FIXME: Tests do not build.
        #:cabal-revision
-       ("5" "18g92ajx3ghznd6k3ihj22ln29n676ailzwx3k0f1kj3bmpilnh6")))
+       ("6" "0wbq9wiaag69nsqxwijzhs5y1hb9kbpkp1x65dvx158cxp8i9w9r")))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-hunit ghc-quickcheck))
     (inputs
      `(("ghc-ansi-terminal" ,ghc-ansi-terminal)
        ("ghc-ansi-wl-pprint" ,ghc-ansi-wl-pprint)
@@ -600,9 +585,7 @@ reporting and test statistics output.")
      `(#:cabal-revision
        ("3" "0i9mlalv7cl1iq43ld5myrnpszq5rxmd79hk495dcb08rglhgl3z")))
     (inputs
-     `(("ghc-extensible-exceptions" ,ghc-extensible-exceptions)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-test-framework" ,ghc-test-framework)))
+     (list ghc-extensible-exceptions ghc-hunit ghc-test-framework))
     (home-page "https://batterseapower.github.io/test-framework/")
     (synopsis "HUnit support for test-framework")
     (description
@@ -625,12 +608,10 @@ reporting and test statistics output.")
     (build-system haskell-build-system)
     (arguments
      `(#:cabal-revision
-       ("1" "1vmpk70h1594h9s216d3ngkb399fpny1d3sh4gg0vrc75p4as68d")))
+       ("3" "0mglqfimla4vvv80mg08aj76zf4993wmngqlirh05h8i9nmgv6lh")))
     (inputs
-     `(("ghc-extensible-exceptions" ,ghc-extensible-exceptions)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-random" ,ghc-random)
-       ("ghc-test-framework" ,ghc-test-framework)))
+     (list ghc-extensible-exceptions ghc-quickcheck ghc-random
+           ghc-test-framework))
     (home-page "https://batterseapower.github.io/test-framework/")
     (synopsis "QuickCheck2 support for test-framework")
     (description
@@ -652,8 +633,7 @@ package.")
         (base32 "1xpgpk1gp4w7w46b4rhj80fa0bcyz8asj2dcjb5x1c37b7rw90b0"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-smallcheck" ,ghc-smallcheck)
-       ("ghc-test-framework" ,ghc-test-framework)))
+     (list ghc-smallcheck ghc-test-framework))
     (home-page "https://github.com/Bodigrim/smallcheck")
     (synopsis "SmallCheck support for test-framework")
     (description
@@ -676,10 +656,8 @@ test-framework.  New projects should use ghc-tasty-smallcheck instead.")
          "12lw7yj02jb9s0i7rb98jjam43j2h0gzmnbj9zi933fx7sg0sy4b"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-language-haskell-extract" ,ghc-language-haskell-extract)
-       ("ghc-haskell-src-exts" ,ghc-haskell-src-exts)
-       ("ghc-regex-posix" ,ghc-regex-posix)))
+     (list ghc-test-framework ghc-language-haskell-extract
+           ghc-haskell-src-exts ghc-regex-posix))
     (home-page "https://github.com/finnsson/test-generator")
     (synopsis "Auto generate the HUnit- and Quickcheck-bulk-code
 using Template Haskell")
@@ -698,7 +676,7 @@ using Template Haskell")
 (define-public ghc-hunit
   (package
     (name "ghc-hunit")
-    (version "1.6.0.0")
+    (version "1.6.2.0")
     (outputs '("out" "static" "doc"))
     (source
      (origin
@@ -707,12 +685,12 @@ using Template Haskell")
                            "HUnit-" version ".tar.gz"))
        (sha256
         (base32
-         "1pnhwqq5v8h48gbp3ibv3skfj25mf4zs5svxcavq93p9cswycj3l"))))
+         "1as4sw5y39c3zrmr6sb8zbw74c9gdn4401y0dx45ih7zf6457dxh"))))
     (build-system haskell-build-system)
     (inputs
      ;; We cannot use ghc-call-stack there, because it depends on
      ;; ghc-nanospec, which depends on ghc-hunit.
-     `(("ghc-call-stack" ,ghc-call-stack-boot)))
+     (list ghc-call-stack-boot))
     (home-page "http://hunit.sourceforge.net/")
     (synopsis "Unit testing framework for Haskell")
     (description
@@ -723,7 +701,7 @@ JUnit tool for Java.")
 (define-public hspec-discover
   (package
     (name "hspec-discover")
-    (version "2.7.1")
+    (version "2.7.10")
     (source
      (origin
        (method url-fetch)
@@ -732,11 +710,10 @@ JUnit tool for Java.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "0r47fm94wa6qrhp8cc1zzkjrxc32rnagfn9m9ga4dm6p6ydw4c8b"))))
+         "13yzvd3b679skvs1insk4s0wc4zvmz6hs38kc8q0j6vzqq06smqa"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-hspec-meta" ,ghc-hspec-meta)))
+     (list ghc-quickcheck ghc-hspec-meta))
     (home-page "https://hspec.github.io/")
     (synopsis "Automatically discover and run Hspec tests")
     (description "hspec-discover is a tool which automatically discovers and
@@ -746,7 +723,7 @@ runs Hspec tests.")
 (define-public ghc-hspec-core
   (package
     (name "ghc-hspec-core")
-    (version "2.7.1")
+    (version "2.7.10")
     (source
      (origin
        (method url-fetch)
@@ -754,19 +731,19 @@ runs Hspec tests.")
                            "hspec-core-" version ".tar.gz"))
        (sha256
         (base32
-         "08vk8588lap00hsln8zl64dazbb28lzk4b4h5vnm7xvhg7r21k1c"))))
+         "12k9yp5gznrda449ir60d5wv3xl7nnyffkb5mhfc0svw9f8lxlv1"))))
     (build-system haskell-build-system)
     (arguments `(#:tests? #f)) ; FIXME: testing libraries are missing.
     (inputs
-     `(("ghc-setenv" ,ghc-setenv)
-       ("ghc-ansi-terminal" ,ghc-ansi-terminal)
-       ("ghc-clock" ,ghc-clock)
-       ("ghc-quickcheck-io" ,ghc-quickcheck-io)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-hspec-expectations" ,ghc-hspec-expectations)
-       ("ghc-silently" ,ghc-silently)
-       ("ghc-tf-random" ,ghc-tf-random)))
+     (list ghc-setenv
+           ghc-ansi-terminal
+           ghc-clock
+           ghc-quickcheck-io
+           ghc-hunit
+           ghc-quickcheck
+           ghc-hspec-expectations
+           ghc-silently
+           ghc-tf-random))
     (home-page "https://hspec.github.io/")
     (synopsis "Testing framework for Haskell")
     (description "This library exposes internal types and functions that can
@@ -776,7 +753,7 @@ be used to extend Hspec's functionality.")
 (define-public ghc-hspec-meta
   (package
     (name "ghc-hspec-meta")
-    (version "2.6.0")
+    (version "2.7.8")
     (source
      (origin
        (method url-fetch)
@@ -784,17 +761,17 @@ be used to extend Hspec's functionality.")
                            "hspec-meta-" version ".tar.gz"))
        (sha256
         (base32
-         "1n1a4633wfivylglji8920f67mx7qz8j4q58n8p7dxk6yg4h3mz6"))))
+         "0sfj0n2hy1r8ifysgbcmfdygcd7vyzr13ldkcp0l2ml337f8j0si"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-ansi-terminal" ,ghc-ansi-terminal)
-       ("ghc-clock" ,ghc-clock)
-       ("ghc-hspec-expectations" ,ghc-hspec-expectations)
-       ("ghc-setenv" ,ghc-setenv)
-       ("ghc-random" ,ghc-random)
-       ("ghc-quickcheck-io" ,ghc-quickcheck-io)))
+     (list ghc-quickcheck
+           ghc-hunit
+           ghc-ansi-terminal
+           ghc-clock
+           ghc-hspec-expectations
+           ghc-setenv
+           ghc-random
+           ghc-quickcheck-io))
     (home-page "https://hspec.github.io/")
     (synopsis "Version of Hspec to test Hspec itself")
     (description "This library provides a stable version of Hspec which is
@@ -804,7 +781,7 @@ used to test the in-development version of Hspec.")
 (define-public ghc-hspec
   (package
     (name "ghc-hspec")
-    (version "2.7.1")
+    (version "2.7.10")
     (source
      (origin
        (method url-fetch)
@@ -812,17 +789,17 @@ used to test the in-development version of Hspec.")
                            "hspec-" version ".tar.gz"))
        (sha256
         (base32
-         "1x8rcr7j1azcaw0fg1xzp8j0gr4ias36z09aj24i4xp8pnyfp341"))))
+         "0z0lwrmrqkglr78n6k2c36n4h68142bh785ys0x4jaibjshvs6rw"))))
     (build-system haskell-build-system)
     (outputs '("out" "static" "doc"))
     (inputs
-     `(("ghc-hspec-core" ,ghc-hspec-core)
-       ("hspec-discover" ,hspec-discover)
-       ("ghc-hspec-expectations" ,ghc-hspec-expectations)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-stringbuilder" ,ghc-stringbuilder)
-       ("ghc-hspec-meta" ,ghc-hspec-meta)))
+     (list ghc-hspec-core
+           hspec-discover
+           ghc-hspec-expectations
+           ghc-quickcheck
+           ghc-hunit
+           ghc-stringbuilder
+           ghc-hspec-meta))
     (home-page "https://hspec.github.io/")
     (synopsis "Testing Framework for Haskell")
     (description "This library provides the Hspec testing framework for
@@ -843,12 +820,9 @@ Haskell, inspired by the Ruby library RSpec.")
                 "0hhzxaa3fxz5mk5qcsrnfr98a7bn3szx2ydgr0x9mbqmm1jg06rc"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-hspec-core" ,ghc-hspec-core)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-hspec-core ghc-hunit ghc-hspec ghc-quickcheck))
     (native-inputs
-     `(("hspec-discover" ,hspec-discover)))
+     (list hspec-discover))
     (home-page "https://hspec.github.io/")
     (synopsis "Contributed functionality for Hspec")
     (description
@@ -871,7 +845,7 @@ Haskell, inspired by the Ruby library RSpec.")
     (build-system haskell-build-system)
     ;; Tests depend on ghc-nanospec.
     (arguments '(#:tests? #f))
-    (inputs `(("ghc-hunit" ,ghc-hunit)))
+    (inputs (list ghc-hunit))
     (home-page "https://github.com/sol/hspec-expectations")
     (synopsis "Catchy combinators for HUnit")
     (description "This library provides catchy combinators for HUnit, see
@@ -893,8 +867,7 @@ Haskell, inspired by the Ruby library RSpec.")
          "1rcmhl9bhyfvanalnf1r86wkx6rq6wdvagnw1h011jcnnb1cq56g"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-silently" ,ghc-silently)))
+     (list ghc-hspec ghc-silently))
     (home-page "https://github.com/hspec/nanospec#readme")
     (synopsis "Lightweight implementation of a subset of Hspec's API")
     (description
@@ -916,14 +889,14 @@ minimal dependencies.")
         (base32
          "19wqignlq90qwpam01hnmmrxaxh5lkax9l1l6rlbi4a07nvp1dnz"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-quickcheck" ,ghc-quickcheck)
-              ("ghc-hunit" ,ghc-hunit)
-              ("ghc-test-framework" ,ghc-test-framework)
-              ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
-              ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-              ("ghc-byteable" ,ghc-byteable)
-              ("ghc-securemem" ,ghc-securemem)
-              ("ghc-crypto-cipher-types" ,ghc-crypto-cipher-types)))
+    (inputs (list ghc-quickcheck
+                  ghc-hunit
+                  ghc-test-framework
+                  ghc-test-framework-quickcheck2
+                  ghc-test-framework-hunit
+                  ghc-byteable
+                  ghc-securemem
+                  ghc-crypto-cipher-types))
     (home-page "https://github.com/vincenthz/hs-crypto-cipher")
     (synopsis "Generic cryptography cipher tests for Haskell")
     (description " This Haskell package contains generic tests for
@@ -934,36 +907,33 @@ implementations of cryptographic ciphers.")
 (define-public ghc-hedgehog
   (package
     (name "ghc-hedgehog")
-    (version "1.0.1")
+    (version "1.0.5")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
-             "mirror://hackage/package/hedgehog/hedgehog-"
+             "https://hackage.haskell.org/package/hedgehog/hedgehog-"
              version
              ".tar.gz"))
        (sha256
         (base32
-         "1qc7hkqbnsk3f5r26wc35r3qiy941nmcxhfqgcq9027kw4gs0bi0"))))
+         "1qsqs8lmxa3wmw228cwi98vvvh9hqbc9d43i1sy2c9igw9xlhfi6"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-ansi-terminal" ,ghc-ansi-terminal)
-       ("ghc-async" ,ghc-async)
-       ("ghc-concurrent-output" ,ghc-concurrent-output)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-fail" ,ghc-fail)
-       ("ghc-lifted-async" ,ghc-lifted-async)
-       ("ghc-mmorph" ,ghc-mmorph)
-       ("ghc-monad-control" ,ghc-monad-control)
-       ("ghc-pretty-show" ,ghc-pretty-show)
-       ("ghc-primitive" ,ghc-primitive)
-       ("ghc-random" ,ghc-random)
-       ("ghc-resourcet" ,ghc-resourcet)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-th-lift" ,ghc-th-lift)
-       ("ghc-transformers-base" ,ghc-transformers-base)
-       ("ghc-wl-pprint-annotated"
-        ,ghc-wl-pprint-annotated)))
+     (list ghc-ansi-terminal
+           ghc-async
+           ghc-concurrent-output
+           ghc-erf
+           ;("ghc-exceptions" ,ghc-exceptions)
+           ghc-lifted-async
+           ghc-mmorph
+           ghc-monad-control
+           ghc-pretty-show
+           ghc-primitive
+           ghc-random
+           ghc-resourcet
+           ghc-transformers-base
+           ghc-wl-pprint-annotated))
     (home-page "https://hedgehog.qa")
     (synopsis "Property-based testing in the spirt of QuickCheck")
     (description
@@ -989,6 +959,9 @@ To get started quickly, see the examples:
         (base32
          "03if74imlhhk7m56nci5f1wclniwqdmwl4hl177040j1gnlac9i0"))))
     (build-system haskell-build-system)
+    (arguments
+     `(#:cabal-revision
+       ("2" "05v1awad3d1wvc763xcgvxm4n6n7bs7byc6s14kdbw35zcaddlcb")))
     (home-page "https://github.com/phadej/cabal-doctest")
     (synopsis "Setup.hs helper for running doctests")
     (description
@@ -1034,10 +1007,8 @@ testing frameworks.")
             "1v2qzzpf1s008g7q6q67glf7vbm1pkpq4rc3ii74f4g6vhfx610r"))))
     (build-system haskell-build-system)
     (inputs
-      `(("ghc-quickcheck" ,ghc-quickcheck)
-        ("ghc-size-based" ,ghc-size-based)
-        ("ghc-testing-type-modifiers" ,ghc-testing-type-modifiers)
-        ("ghc-semigroups" ,ghc-semigroups)))
+      (list ghc-quickcheck ghc-size-based ghc-testing-type-modifiers
+            ghc-semigroups))
     (home-page "https://github.com/JonasDuregard/testing-feat")
     (synopsis "Functional Enumeration of Algebraic Types")
     (description "Feat (Functional Enumeration of Algebraic Types)
@@ -1050,7 +1021,7 @@ random testing, and hybrids of the two.")
 (define-public ghc-inspection-testing
   (package
     (name "ghc-inspection-testing")
-    (version "0.4.2.2")
+    (version "0.4.6.0")
     (source
      (origin
        (method url-fetch)
@@ -1059,7 +1030,7 @@ random testing, and hybrids of the two.")
              "inspection-testing-" version ".tar.gz"))
        (sha256
         (base32
-         "1bppz99p6ix6hah8lbr9mapl2zxgmkg9i7h6hk8wq6zf54hwz3yp"))))
+         "0qz1npyycj4bvyly9xmjbnhw569l52h38gx02rk0r7zhapw83aig"))))
     (build-system haskell-build-system)
     (home-page
      "https://github.com/nomeata/inspection-testing")
@@ -1087,28 +1058,191 @@ See the documentation in \"Test.Inspection\" or the project webpage for more
 examples and more information.")
     (license license:expat)))
 
-(define-public ghc-easytest
+(define-public ghc-quickcheck-classes
   (package
-    (name "ghc-easytest")
-    (version "0.2.1")
+    (name "ghc-quickcheck-classes")
+    (version "0.6.5.0")
     (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/easytest/easytest-"
-             version ".tar.gz"))
-       (sha256
-        (base32
-         "0gdyawzlw6d15yz7ji599xjgfr0g7l1iq11ffr4aw3j6g3dc6m8i"))))
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/quickcheck-classes/quickcheck-classes-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32 "19iw15mvb7gws3ljdxqwsbb4pmfc0sfflf8szgmrhiqr3k82mqv2"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-async" ,ghc-async)
-       ("ghc-random" ,ghc-random)
-       ("ghc-call-stack" ,ghc-call-stack)))
-    (home-page "https://github.com/joelburget/easytest")
-    (synopsis "Testing library for Haskell")
-    (description "EasyTest is a testing toolkit, meant to replace most uses of
-QuickCheck, SmallCheck, HUnit, and frameworks like Tasty, etc.  Tests can be
-written with ordinary Haskell code, with control flow explicit and under
-programmer control.")
+      (list ghc-quickcheck
+            ghc-primitive
+            ghc-primitive-addr
+            ghc-quickcheck-classes-base
+            ghc-aeson
+            ghc-semigroupoids
+            ghc-semirings
+            ghc-vector))
+    (native-inputs
+      (list ghc-base-orphans
+            ghc-tagged
+            ghc-base-orphans
+            ghc-tagged
+            ghc-tasty
+            ghc-tasty-quickcheck))
+    (home-page "https://github.com/andrewthad/quickcheck-classes#readme")
+    (synopsis "QuickCheck common typeclasses")
+    (description
+      "This library provides QuickCheck properties to ensure that typeclass
+instances adhere to the set of laws that they are supposed to.  There are
+other libraries that do similar things, such as @code{genvalidity-hspec} and
+@code{checkers}.  This library differs from other solutions by not introducing
+any new typeclasses that the user needs to learn.  /Note:/ on GHC < 8.5, this
+library uses the higher-kinded typeclasses (@code{Data.Functor.Classes.Show1},
+@code{Data.Functor.Classes.Eq1}, @code{Data.Functor.Classes.Ord1}, etc.), but
+on GHC >= 8.5, it uses @code{-XQuantifiedConstraints} to express these
+constraints more cleanly.")
+    (license license:bsd-3)))
+
+(define-public ghc-quickcheck-classes-base
+  (package
+    (name "ghc-quickcheck-classes-base")
+    (version "0.6.2.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/quickcheck-classes-base/quickcheck-classes-base-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32 "16c6gq4cqpkwnq1pzkhm6r7mrwk4an50ha5w77bmiia2qkhla6ch"))))
+    (build-system haskell-build-system)
+    (inputs
+      (list ghc-quickcheck
+            ghc-contravariant
+            ghc-bifunctors
+            ghc-semigroups
+            ghc-fail
+            ghc-tagged))
+    (home-page "https://github.com/andrewthad/quickcheck-classes#readme")
+    (synopsis "QuickCheck common typeclasses from `base`")
+    (description
+      "This library is a minimal variant of `quickcheck-classes`
+that only provides laws for typeclasses from `base`. The main
+purpose of splitting this out is so that `primitive` can depend
+on `quickcheck-classes-base` in its test suite, avoiding the
+circular dependency that arises if `quickcheck-classes` is used
+instead. . This library provides QuickCheck properties to ensure
+that typeclass instances adhere to the set of laws that they are
+supposed to. There are other libraries that do similar things,
+such as `genvalidity-hspec` and `checkers`. This library differs
+from other solutions by not introducing any new typeclasses that
+the user needs to learn. . /Note:/ on GHC < 8.5, this library
+uses the higher-kinded typeclasses ('Data.Functor.Classes.Show1',
+'Data.Functor.Classes.Eq1', 'Data.Functor.Classes.Ord1', etc.),
+but on GHC >= 8.5, it uses `-XQuantifiedConstraints` to express
+these constraints more cleanly.")
+    (license license:bsd-3)))
+
+(define-public ghc-doctest-lib
+  (package
+    (name "ghc-doctest-lib")
+    (version "0.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/doctest-lib/doctest-lib-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32 "1vswam0dhw52dihgnzirh18gqs8rj8h6jd7pl6y1mg2f9f9zmih2"))))
+    (build-system haskell-build-system)
+    (home-page "https://hub.darcs.net/thielema/doctest-lib/")
+    (synopsis "Parts of doctest exposed as library")
+    (description
+      "Parts of doctest exposed as library. For use with the doctest-extract utility.")
+    (license license:expat)))
+
+(define-public ghc-doctest-exitcode-stdio
+  (package
+    (name "ghc-doctest-exitcode-stdio")
+    (version "0.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/doctest-exitcode-stdio/doctest-exitcode-stdio-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32 "1g3c7yrqq2mwqbmvs8vkx1a3cf0p0x74b7fnn344dsk7bsfpgv0x"))))
+    (build-system haskell-build-system)
+    (inputs
+      (list ghc-doctest-lib ghc-quickcheck ghc-semigroups))
+    (home-page "https://hub.darcs.net/thielema/doctest-exitcode-stdio/")
+    (synopsis "Run Doctests in a @code{Cabal.Test.exitcode-stdio} environment")
+    (description
+      "This package allows on to run Doctests in a Cabal.Test.exitcode-stdio
+environment.")
+    (license license:bsd-3)))
+
+(define-public ghc-cabal-doctest
+  (package
+    (name "ghc-cabal-doctest")
+    (version "1.0.8")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/cabal-doctest/cabal-doctest-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32 "03if74imlhhk7m56nci5f1wclniwqdmwl4hl177040j1gnlac9i0"))))
+    (build-system haskell-build-system)
+    (arguments
+      `(#:cabal-revision
+        ("2" "05v1awad3d1wvc763xcgvxm4n6n7bs7byc6s14kdbw35zcaddlcb")))
+    (home-page "https://github.com/phadej/cabal-doctest")
+    (synopsis "@file{Setup.hs} helper for Doctests running")
+    (description
+      "This package provides helpers for running Doctests in @file{Setup.hs}.")
+    (license license:bsd-3)))
+
+(define-public ghc-tasty-silver
+  (package
+    (name "ghc-tasty-silver")
+    (version "3.2.3")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/tasty-silver/tasty-silver-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32 "0nvh2k8iqqkanmp7lpwd3asimyarzisly8wavbdahcxryn0j4xb7"))))
+    (build-system haskell-build-system)
+    (inputs
+      (list ghc-ansi-terminal
+            ghc-async
+            ghc-optparse-applicative
+            ghc-process-extras
+            ghc-regex-tdfa
+            ghc-semigroups
+            ghc-tagged
+            ghc-tasty
+            ghc-temporary))
+    (native-inputs
+     (list ghc-tasty-hunit ghc-silently))
+    (home-page "https://github.com/phile314/tasty-silver")
+    (synopsis "Fancy test runner, including support for golden tests")
+    (description
+      "This package provides a fancy test runner and support for @dfn{golden
+testing}.  A golden test is an IO action that writes its result to a file.  To
+pass the test, this output file should be identical to the corresponding
+``golden'' file, which contains the correct result for the test.  The test
+runner allows filtering tests using regexes, and to interactively inspect the
+result of golden tests.")
     (license license:expat)))
+
diff --git a/gnu/packages/haskell-crypto.scm b/gnu/packages/haskell-crypto.scm
index 032c6fb899..422e00035b 100644
--- a/gnu/packages/haskell-crypto.scm
+++ b/gnu/packages/haskell-crypto.scm
@@ -37,7 +37,7 @@
 (define-public ghc-asn1-types
   (package
     (name "ghc-asn1-types")
-    (version "0.3.3")
+    (version "0.3.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://hackage.haskell.org/package/"
@@ -45,11 +45,10 @@
                                   version ".tar.gz"))
               (sha256
                (base32
-                "162lacdl9jr42pdhaj9hxqlba6hjxm6g866anna74q6v3cvw5ssp"))))
+                "1a119qxhxhr0yn37r26dkydm6g5kykdkx98ghb59i4ipa6i95vkq"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-memory" ,ghc-memory)
-       ("ghc-hourglass" ,ghc-hourglass)))
+     (list ghc-memory ghc-hourglass))
     (home-page "https://github.com/vincenthz/hs-asn1-types")
     (synopsis "ASN.1 types for Haskell")
     (description
@@ -71,11 +70,9 @@ format.")
                 "02nsr30h5yic1mk7znf0q4z3n560ip017n60hg7ya25rsfmxxy6r"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-hourglass" ,ghc-hourglass)
-       ("ghc-asn1-types" ,ghc-asn1-types)))
+     (list ghc-hourglass ghc-asn1-types))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+     (list ghc-tasty ghc-tasty-quickcheck))
     (home-page "https://github.com/vincenthz/hs-asn1")
     (synopsis "ASN1 data reader and writer in RAW, BER and DER forms")
     (description
@@ -97,8 +94,7 @@ supports for high level forms of ASN1 (BER, and DER).")
                 "17pk8y3nwv9b9i5j15qlmwi7fmq9ab2z4kfpjk2rvcrh9lsf27wg"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-asn1-types" ,ghc-asn1-types)
-       ("ghc-asn1-encoding" ,ghc-asn1-encoding)))
+     (list ghc-asn1-types ghc-asn1-encoding))
     (home-page "https://github.com/vincenthz/hs-asn1")
     (synopsis "Simple monadic parser for ASN1 stream types")
     (description
@@ -120,9 +116,7 @@ when ASN1 pattern matching is not convenient.")
         (base32
          "19bsmkqkpnvh01b77pmyarx00fic15j4hvg4pzscrj4prskrx2i9"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-cereal" ,ghc-cereal)
-              ("ghc-tagged" ,ghc-tagged)
-              ("ghc-entropy" ,ghc-entropy)))
+    (inputs (list ghc-cereal ghc-tagged ghc-entropy))
     (home-page "https://github.com/TomMD/crypto-api")
     (synopsis "Provides generic interface for cryptographic operations
 for Haskell")
@@ -152,13 +146,13 @@ algorithm (ex: padding) is within scope of this package.")
          "0w3j43jdrlj28jryp18hc6q84nkl2yf4vs1hhgrsk7gb9kfyqjpl"))))
     (build-system haskell-build-system)
     (outputs '("out" "static" "doc"))
-    (inputs `(("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
-              ("ghc-crypto-api" ,ghc-crypto-api)
-              ("ghc-cereal" ,ghc-cereal)
-              ("ghc-test-framework" ,ghc-test-framework)
-              ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-              ("ghc-hunit" ,ghc-hunit)
-              ("ghc-quickcheck" ,ghc-quickcheck)))
+    (inputs (list ghc-test-framework-quickcheck2
+                  ghc-crypto-api
+                  ghc-cereal
+                  ghc-test-framework
+                  ghc-test-framework-hunit
+                  ghc-hunit
+                  ghc-quickcheck))
     (home-page "https://github.com/TomMD/crypto-api-tests")
     (synopsis "Test framework and KATs for cryptographic operations for Haskell")
     (description "This Haskell package provides a test framework for hash and
@@ -181,14 +175,14 @@ for common cryptographic algorithms are included.")
          "1yr2iyb779znj79j3fq4ky8l1y8a600a2x1fx9p5pmpwq5zq93y2"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-byteable" ,ghc-byteable)
-       ("ghc-cryptonite" ,ghc-cryptonite)
-       ("ghc-memory" ,ghc-memory)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+     (list ghc-byteable
+           ghc-cryptonite
+           ghc-memory
+           ghc-hunit
+           ghc-quickcheck
+           ghc-tasty
+           ghc-tasty-quickcheck
+           ghc-tasty-hunit))
     (home-page "https://github.com/vincenthz/hs-cryptohash")
     (synopsis "Collection of cryptographic hashes in Haskell")
     (description
@@ -201,7 +195,7 @@ that hides the C implementation.")
 (define-public ghc-cryptohash-md5
   (package
     (name "ghc-cryptohash-md5")
-    (version "0.11.100.1")
+    (version "0.11.101.0")
     (source
      (origin
        (method url-fetch)
@@ -210,17 +204,10 @@ that hides the C implementation.")
                            "cryptohash-md5-" version ".tar.gz"))
        (sha256
         (base32
-         "1y8q7s2bn4gdknw1wjikdnar2b5pgz3nv3220lxrlgpsf23x82vi"))))
+         "018g13hkmq5782i24b4518hcd926fl6x6fh5hd7b9wlxwc5dn21v"))))
     (build-system haskell-build-system)
-    (arguments
-     `(#:cabal-revision
-       ("4" "0gzaibjkipijwj9m9l6wrhfk5s3kdvfbhdl7cl1373cjfs41v0m3")
-       #:tests? #f)) ; tests require old version of ghc-hunit (0.9)
-    (native-inputs `(("ghc-base16-bytestring" ,ghc-base16-bytestring)
-                     ("ghc-puremd5" ,ghc-puremd5)
-                     ("ghc-tasty" ,ghc-tasty)
-                     ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-                     ("ghc-hunit" ,ghc-hunit)))
+    (native-inputs (list ghc-base16-bytestring ghc-puremd5 ghc-tasty
+                         ghc-tasty-hunit ghc-tasty-quickcheck))
     (home-page "https://github.com/hvr/cryptohash-md5")
     (synopsis "MD5 implementation for Haskell")
     (description "This Haskell package provides implementation of MD5.")
@@ -242,13 +229,10 @@ that hides the C implementation.")
     (build-system haskell-build-system)
     (arguments
      `(#:cabal-revision
-       ("4" "0qb2wasfc4dpf6f9ahvhlv8njb3p3p9iwblg4032ssi95cg85718")
+       ("6" "10rpxrmqgwihmplczglwxf5q3l13z9j3kvi065z884y4dymmnkgc")
        #:tests? #f)) ; tests require old version of ghc-hunit (0.9)
-    (native-inputs `(("ghc-base16-bytestring" ,ghc-base16-bytestring)
-                     ("ghc-sha" ,ghc-sha)
-                     ("ghc-tasty" ,ghc-tasty)
-                     ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-                     ("ghc-hunit" ,ghc-hunit)))
+    (native-inputs (list ghc-base16-bytestring ghc-sha ghc-tasty
+                         ghc-tasty-quickcheck ghc-hunit))
     (home-page "https://github.com/hvr/cryptohash-sha1")
     (synopsis "SHA-1 implementation for Haskell")
     (description "This Haskell package provides an incremental and one-pass,
@@ -263,7 +247,7 @@ the C implementation.")
 (define-public ghc-cryptohash-sha256
   (package
     (name "ghc-cryptohash-sha256")
-    (version "0.11.101.0")
+    (version "0.11.102.1")
     (source
      (origin
        (method url-fetch)
@@ -272,19 +256,15 @@ the C implementation.")
                            "cryptohash-sha256-" version ".tar.gz"))
        (sha256
         (base32
-         "1p85vajcgw9hmq8zsz9krzx0vxh7aggwbg5w9ws8w97avcsn8xaj"))))
+         "1xkb7iqplbw4fy1122p79xf1zcb7k44rl0wmfj1q06l7cdqxr9vk"))))
     (build-system haskell-build-system)
     (arguments
      `(#:cabal-revision
-       ("3" "1arhz4y792kx439s2zv9x291gvvl2zxcfx9sq0nxsjlz7c3hpyp1")
-       #:tests? #f)) ; tests require old version of ghc-hunit (0.9)
-    (inputs
-     `(("ghc-base16-bytestring" ,ghc-base16-bytestring)))
+       ("1" "0v5ppc7r2lxbk49h1kwj4b5vyb1dw2fnppykvp5m9rm0p3vhlykr")
+       #:tests? #f)) ; TODO: tasty ==1.1.*
     (native-inputs
-     `(("ghc-sha" ,ghc-sha)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-hunit" ,ghc-hunit)))
+     (list ghc-base16-bytestring ghc-sha ghc-tasty ghc-tasty-hunit
+           ghc-tasty-quickcheck))
     (home-page "https://github.com/hvr/cryptohash-sha1")
     (synopsis "SHA-256 implementation for Haskell")
     (description "This Haskell package provides an incremental and
@@ -299,7 +279,7 @@ the C implementation.")
 (define-public ghc-cryptonite
   (package
     (name "ghc-cryptonite")
-    (version "0.25")
+    (version "0.29")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://hackage.haskell.org/package/"
@@ -307,21 +287,16 @@ the C implementation.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "131wbbdr5yavs5k1ah9sz6fqx1ffyvaxf66pwjzsfc47mwc1mgl9"))))
+                "13xhp3hshb8x06bw37kp16c9jpjmgfn06nkj9drz745fv8f04fnq"))))
     (build-system haskell-build-system)
     ;; FIXME: tests are broken.
     ;; See https://github.com/haskell-crypto/cryptonite/issues/260
     (arguments '(#:tests? #f))
     (outputs '("out" "static" "doc"))
     (inputs
-     `(("ghc-basement" ,ghc-basement)
-       ("ghc-memory" ,ghc-memory)
-       ("ghc-byteable" ,ghc-byteable)))
+     (list ghc-basement ghc-memory ghc-byteable))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-kat" ,ghc-tasty-kat)))
+     (list ghc-tasty ghc-tasty-quickcheck ghc-tasty-hunit ghc-tasty-kat))
     (home-page "https://github.com/haskell-crypto/cryptonite")
     (synopsis "Cryptography primitives")
     (description
@@ -334,7 +309,7 @@ generators, and more.")
 (define-public ghc-digest
   (package
     (name "ghc-digest")
-    (version "0.0.1.2")
+    (version "0.0.1.3")
     (source
      (origin
        (method url-fetch)
@@ -344,12 +319,12 @@ generators, and more.")
              ".tar.gz"))
        (sha256
         (base32
-         "04gy2zp8yzvv7j9bdfvmfzcz3sqyqa6rwslqcn4vyair2vmif5v4"))))
+         "1l5383l5pvp018rj3vabrppnzcqrr2g0dvgvmsrbjdn02wzab5jm"))))
     (build-system haskell-build-system)
     (arguments
      `(#:extra-directories ("zlib")))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page
      "https://hackage.haskell.org/package/digest")
     (synopsis
@@ -363,7 +338,7 @@ are implemented as FFI bindings to efficient code from zlib.")
 (define-public ghc-entropy
   (package
     (name "ghc-entropy")
-    (version "0.4.1.5")
+    (version "0.4.1.6")
     (source
      (origin
        (method url-fetch)
@@ -371,7 +346,7 @@ are implemented as FFI bindings to efficient code from zlib.")
                            "entropy-" version "/"
                            "entropy-" version ".tar.gz"))
        (sha256
-        (base32 "0szf8hi1pi8g0kxnkcymh65gk1b0niyl1nnkckzdqyar87qal0jm"))))
+        (base32 "0qmzz0zgad13zl0kjrxz6cxg8ckn2w8saas2a2j72vbafpzmkixd"))))
     (build-system haskell-build-system)
     (home-page "https://github.com/TomMD/entropy")
     (synopsis "Provides platform independent entropy source for Haskell")
@@ -392,14 +367,10 @@ to obtain cryptographically strong entropy.")
                 "1m7qjsxrd8m88cvkqmr8kscril500j2a9y0iynvksjyjkhdlq33p"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-basement" ,ghc-basement)
-       ("ghc-memory" ,ghc-memory)))
+     (list ghc-basement ghc-memory))
     (native-inputs
-     `(("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-test-framework ghc-test-framework-quickcheck2
+           ghc-test-framework-hunit ghc-hunit ghc-quickcheck))
     (home-page "https://github.com/vincenthz/hs-pem")
     (synopsis "Privacy Enhanced Mail (PEM) format reader and writer")
     (description
@@ -410,7 +381,7 @@ Mail} (PEM) format.")
 (define-public ghc-puremd5
   (package
     (name "ghc-puremd5")
-    (version "2.1.3")
+    (version "2.1.4")
     (source
      (origin
        (method url-fetch)
@@ -419,17 +390,12 @@ Mail} (PEM) format.")
                            "pureMD5-" version ".tar.gz"))
        (sha256
         (base32
-         "0zdilz41cla2ck7mcw1a9702gyg2abq94mqahr4vci9sbs53bwxy"))))
+         "0qwkvxwi9wh6knn69rg2hvc8ngmv1if77kmpcnp0xqr0l30fwavq"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-cereal" ,ghc-cereal)
-              ("ghc-crypto-api" ,ghc-crypto-api)
-              ("ghc-tagged" ,ghc-tagged)))
-    (native-inputs `(("ghc-crypto-api-tests" ,ghc-crypto-api-tests)
-                     ("ghc-quickcheck" ,ghc-quickcheck)
-                     ("ghc-test-framework" ,ghc-test-framework)
-                     ("ghc-test-framework-quickcheck2"
-                      ,ghc-test-framework-quickcheck2)
-                     ("ghc-pretty-hex" ,ghc-pretty-hex)))
+    (inputs (list ghc-cereal ghc-crypto-api ghc-tagged))
+    (native-inputs (list ghc-crypto-api-tests ghc-quickcheck
+                         ghc-test-framework ghc-test-framework-quickcheck2
+                         ghc-pretty-hex))
     (home-page "https://github.com/TomMD/pureMD5")
     (synopsis "Haskell implementation of the MD5 hash algorithm")
     (description "This package provides a Haskell-only implementation of
@@ -450,9 +416,8 @@ interface.")
                 "0i4b2wjisivdy72synal711ywhx05mfqfba5n65rk8qidggm1nbb"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)))
+     (list ghc-quickcheck ghc-test-framework
+           ghc-test-framework-quickcheck2))
     (home-page "https://hackage.haskell.org/package/SHA")
     (synopsis "SHA suite of message digest functions")
     (description
@@ -477,16 +442,15 @@ libraries, like OpenSSL.")
                 "1j67c35g8334jx7x32hh6awhr43dplp0qwal5gnlkmx09axzrc5i"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-memory" ,ghc-memory)
-       ("ghc-hourglass" ,ghc-hourglass)
-       ("ghc-pem" ,ghc-pem)
-       ("ghc-asn1-types" ,ghc-asn1-types)
-       ("ghc-asn1-encoding" ,ghc-asn1-encoding)
-       ("ghc-asn1-parse" ,ghc-asn1-parse)
-       ("ghc-cryptonite" ,ghc-cryptonite)))
+     (list ghc-memory
+           ghc-hourglass
+           ghc-pem
+           ghc-asn1-types
+           ghc-asn1-encoding
+           ghc-asn1-parse
+           ghc-cryptonite))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+     (list ghc-tasty ghc-tasty-quickcheck))
     (home-page "https://github.com/vincenthz/hs-certificate")
     (synopsis "X509 reader and writer")
     (description
@@ -507,14 +471,10 @@ libraries, like OpenSSL.")
                 "1y8yyr1i95jkllg8k0z54k5v4vachp848clc07m33xpxidn3b1lp"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-pem" ,ghc-pem)
-       ("ghc-asn1-types" ,ghc-asn1-types)
-       ("ghc-asn1-encoding" ,ghc-asn1-encoding)
-       ("ghc-cryptonite" ,ghc-cryptonite)
-       ("ghc-x509" ,ghc-x509)))
+     (list ghc-pem ghc-asn1-types ghc-asn1-encoding ghc-cryptonite
+           ghc-x509))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+     (list ghc-tasty ghc-tasty-hunit))
     (home-page "https://github.com/vincenthz/hs-certificate")
     (synopsis "X.509 collection accessing and storing methods")
     (description
@@ -536,19 +496,18 @@ collections, certificates, revocation lists, and exception lists.")
                 "16yihzljql3z8w5rgdl95fv3hgk7yd86kbl9b3glllsark5j2hzr"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-memory" ,ghc-memory)
-       ("ghc-byteable" ,ghc-byteable)
-       ("ghc-hourglass" ,ghc-hourglass)
-       ("ghc-data-default-class" ,ghc-data-default-class)
-       ("ghc-pem" ,ghc-pem)
-       ("ghc-asn1-types" ,ghc-asn1-types)
-       ("ghc-asn1-encoding" ,ghc-asn1-encoding)
-       ("ghc-x509" ,ghc-x509)
-       ("ghc-x509-store" ,ghc-x509-store)
-       ("ghc-cryptonite" ,ghc-cryptonite)))
+     (list ghc-memory
+           ghc-byteable
+           ghc-hourglass
+           ghc-data-default-class
+           ghc-pem
+           ghc-asn1-types
+           ghc-asn1-encoding
+           ghc-x509
+           ghc-x509-store
+           ghc-cryptonite))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+     (list ghc-tasty ghc-tasty-hunit))
     (home-page "https://github.com/vincenthz/hs-certificate")
     (synopsis "X.509 certificate and revocation list validation")
     (description
@@ -570,9 +529,7 @@ list validation.")
                 "06a4m9c7vlr9nhp9gmqbb46arf0yj1dkdm4nip03hzy67spdmp20"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-pem" ,ghc-pem)
-       ("ghc-x509" ,ghc-x509)
-       ("ghc-x509-store" ,ghc-x509-store)))
+     (list ghc-pem ghc-x509 ghc-x509-store))
     (home-page "https://github.com/vincenthz/hs-certificate")
     (synopsis "Handle system X.509 accessors and storage")
     (description
@@ -594,8 +551,7 @@ for X.509 certificates.")
         (base32
          "03qa1i1kj07pfrxsi7fiaqnnd0vi94jd4jfswbmnm4gp1nvzcwr0"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-byteable" ,ghc-byteable)
-              ("ghc-securemem" ,ghc-securemem)))
+    (inputs (list ghc-byteable ghc-securemem))
     (home-page "https://github.com/vincenthz/hs-crypto-cipher")
     (synopsis "Generic cryptography cipher types for Haskell")
     (description "This Haskell package provides basic typeclasses and types
@@ -616,13 +572,10 @@ for symmetric ciphers.")
         (base32
          "05ahz6kjq0fl1w66gpiqy0vndli5yx1pbsbw9ni3viwqas4p3cfk"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-byteable" ,ghc-byteable)
-              ("ghc-securemem" ,ghc-securemem)
-              ("ghc-crypto-cipher-types" ,ghc-crypto-cipher-types)))
-    (native-inputs `(("ghc-quickcheck" ,ghc-quickcheck)
-                     ("ghc-test-framework" ,ghc-test-framework)
-                     ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
-                     ("ghc-crypto-cipher-tests" ,ghc-crypto-cipher-tests)))
+    (inputs (list ghc-byteable ghc-securemem ghc-crypto-cipher-types))
+    (native-inputs (list ghc-quickcheck ghc-test-framework
+                         ghc-test-framework-quickcheck2
+                         ghc-crypto-cipher-tests))
     (home-page "https://github.com/vincenthz/hs-cipher-aes")
     (synopsis "AES cipher implementation with advanced mode of operations for
 Haskell")
@@ -656,8 +609,7 @@ AES-NI available, or you'll need to use a different implementation.")
         (base32
          "0139kbbb2h7vshf68y3fvjda29lhj7jjwl4vq78w4y8k8hc7l2hp"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-securemem" ,ghc-securemem)
-              ("ghc-vector" ,ghc-vector)))
+    (inputs (list ghc-securemem ghc-vector))
     (home-page "https://github.com/vincenthz/hs-crypto-random")
     (synopsis "Simple cryptographic random related types for Haskell")
     (description "Simple cryptographic random related types: a safe
@@ -678,9 +630,7 @@ abstraction for CPRNGs.")
         (base32
          "1wr15kbmk1g3l8a75n0iwbzqg24ixv78slwzwb2q6rlcvq0jlnb4"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-byteable" ,ghc-byteable)
-              ("ghc-crypto-random" ,ghc-crypto-random)
-              ("ghc-cipher-aes" ,ghc-cipher-aes)))
+    (inputs (list ghc-byteable ghc-crypto-random ghc-cipher-aes))
     (home-page "https://github.com/vincenthz/hs-cprng-aes")
     (synopsis "Crypto Pseudo Random Number Generator using AES in counter mode
 in Haskell")
@@ -726,7 +676,7 @@ percent.
     (build-system haskell-build-system)
     (arguments
      `(#:cabal-revision
-       ("2" "1cq6h3jqkb1kvd9fjfhsllg5gq78sdiyf2gy9862xhlbv6wil19f")
+       ("3" "1yidh86ymzwmp2b449pwim6vvfcs1qgkkncbixw1zmb7wj6v167v")
        ;; We omit these test suites because they require old versions of
        ;; packages and packages we do not have.
        #:configure-flags
@@ -743,32 +693,30 @@ guidelines.")
 (define-public ghc-tls
   (package
     (name "ghc-tls")
-    (version "1.4.1")
+    (version "1.5.5")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://hackage.haskell.org/package/"
                                   "tls/tls-" version ".tar.gz"))
               (sha256
                (base32
-                "1y083724mym28n6xfaz7pcc7zqxdhjpaxpbvzxfbs25qq2px3smv"))))
+                "0j1rxxq5lzs584nk19610mk7mmsqqkgfxw2qj74ibb1zsk7baj4a"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-cereal" ,ghc-cereal)
-       ("ghc-data-default-class" ,ghc-data-default-class)
-       ("ghc-memory" ,ghc-memory)
-       ("ghc-cryptonite" ,ghc-cryptonite)
-       ("ghc-asn1-types" ,ghc-asn1-types)
-       ("ghc-asn1-encoding" ,ghc-asn1-encoding)
-       ("ghc-x509" ,ghc-x509)
-       ("ghc-x509-store" ,ghc-x509-store)
-       ("ghc-x509-validation" ,ghc-x509-validation)
-       ("ghc-async" ,ghc-async)
-       ("ghc-network" ,ghc-network)
-       ("ghc-hourglass" ,ghc-hourglass)))
+     (list ghc-cereal
+           ghc-data-default-class
+           ghc-memory
+           ghc-cryptonite
+           ghc-asn1-types
+           ghc-asn1-encoding
+           ghc-x509
+           ghc-x509-store
+           ghc-x509-validation
+           ghc-async
+           ghc-network
+           ghc-hourglass))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-tasty ghc-tasty-quickcheck ghc-quickcheck))
     (home-page "https://github.com/vincenthz/hs-tls")
     (synopsis
      "TLS/SSL protocol native implementation (Server and Client)")
@@ -785,7 +733,7 @@ extensions.")
 (define-public ghc-hsopenssl
   (package
     (name "ghc-hsopenssl")
-    (version "0.11.4.17")
+    (version "0.11.7.2")
     (source
      (origin
        (method url-fetch)
@@ -793,13 +741,12 @@ extensions.")
                            "HsOpenSSL/HsOpenSSL-" version ".tar.gz"))
        (sha256
         (base32
-         "0qivl9clmybfglwxqp2sq308rv4ia4rhwshcsc8b029bvpp0mpsi"))))
+         "0ysdfl8ck3nzhx597fa13dqf31jq5gzwajlak6r91jajks9w0dl5"))))
     (build-system haskell-build-system)
     (arguments
      `(#:extra-directories ("openssl")))
     (inputs
-     `(("ghc-network" ,ghc-network)
-       ("openssl" ,openssl)))
+     (list ghc-network openssl))
     (home-page "https://github.com/vshabanov/HsOpenSSL")
     (synopsis "Partial OpenSSL binding for Haskell")
     (description "HsOpenSSL is an OpenSSL binding for Haskell.  It can
@@ -815,7 +762,7 @@ implementation of SSL.")
 (define-public ghc-openssl-streams
   (package
     (name "ghc-openssl-streams")
-    (version "1.2.2.0")
+    (version "1.2.3.0")
     (source
      (origin
        (method url-fetch)
@@ -824,16 +771,12 @@ implementation of SSL.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "0rplym6ayydkpr7x9mw3l13p0vzzfzzxw244d7sd3jcvaxpv0rmr"))))
+         "10pnnpzgb5xr811kc9qdk7h2cgn6hk2yiyhnzz8f8p0fjzc0pwjm"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-hsopenssl" ,ghc-hsopenssl)
-       ("ghc-io-streams" ,ghc-io-streams)
-       ("ghc-network" ,ghc-network)))
+     (list ghc-hsopenssl ghc-io-streams ghc-network))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)))
+     (list ghc-hunit ghc-test-framework ghc-test-framework-hunit))
     (home-page "https://hackage.haskell.org/package/openssl-streams")
     (synopsis "OpenSSL network support for io-streams")
     (description "This library contains io-streams routines for secure
@@ -855,17 +798,15 @@ networking using OpenSSL (by way of HsOpenSSL).")
          "1bldcmda4xh52mw1wfrjljv8crhw3al7v7kv1j0vidvr7ymnjpbh"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-conduit" ,ghc-conduit)
-       ("ghc-conduit-extra" ,ghc-conduit-extra)
-       ("ghc-cryptonite" ,ghc-cryptonite)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-memory" ,ghc-memory)
-       ("ghc-resourcet" ,ghc-resourcet)))
+     (list ghc-conduit
+           ghc-conduit-extra
+           ghc-cryptonite
+           ghc-exceptions
+           ghc-memory
+           ghc-resourcet))
     (native-inputs
-     `(("ghc-conduit-combinators" ,ghc-conduit-combinators)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+     (list ghc-conduit-combinators ghc-tasty ghc-tasty-hunit
+           ghc-tasty-quickcheck))
     (arguments
      `(#:cabal-revision
        ("1" "1hh2nzfz4qpxgivfilgk4ll416lph8b2fdkzpzrmqfjglivydfmz")))
diff --git a/gnu/packages/haskell-web.scm b/gnu/packages/haskell-web.scm
index a250bb4262..34dd2556be 100644
--- a/gnu/packages/haskell-web.scm
+++ b/gnu/packages/haskell-web.scm
@@ -55,7 +55,7 @@
          "1m9sx6gr9y9yxvkmcap8xsks8cnhznvma1mrfl39zljkv005azms"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-quickcheck))
     (home-page "https://github.com/ndmitchell/tagsoup")
     (synopsis
      "Parsing and extracting information from (possibly malformed) HTML/XML
@@ -71,7 +71,7 @@ for screen-scraping.")
 (define-public ghc-cookie
   (package
     (name "ghc-cookie")
-    (version "0.4.4")
+    (version "0.4.5")
     (source
      (origin
        (method url-fetch)
@@ -81,17 +81,17 @@ for screen-scraping.")
              ".tar.gz"))
        (sha256
         (base32
-         "1qy09i0jh2z9i9avy2khf8a8afq4fqgnv0fyrszgfg4kmq2fsi9j"))))
+         "10rmdasb7mypbwxdj2mhr810vqhkakpik7hyd8fvj60hng8r8zvh"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-old-locale" ,ghc-old-locale)
-       ("ghc-blaze-builder" ,ghc-blaze-builder)
-       ("ghc-data-default-class" ,ghc-data-default-class)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+     (list ghc-old-locale
+           ghc-blaze-builder
+           ghc-data-default-class
+           ghc-hunit
+           ghc-quickcheck
+           ghc-tasty
+           ghc-tasty-hunit
+           ghc-tasty-quickcheck))
     (home-page "https://github.com/snoyberg/cookie")
     (synopsis "HTTP cookie parsing and rendering")
     (description "HTTP cookie parsing and rendering library for Haskell.")
@@ -110,7 +110,7 @@ for screen-scraping.")
                 "0vj4hpaa30jz7c702xpsfvqaqdxz28zslsqnsfx6bf6dpwvck1wh"))))
     (build-system haskell-build-system)
     (inputs
-     `(("curl" ,curl)))
+     (list curl))
     (home-page "https://hackage.haskell.org/package/curl")
     (synopsis "Haskell bindings for libcurl")
     (description
@@ -132,9 +132,7 @@ This package provides a Haskell binding to libcurl.")
          "19dgdimpzr7pxk7pqvyin6j87gmvnf0rm35gzhmna8qr835wy3sr"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-network-bsd" ,ghc-network-bsd)
-       ("ghc-network-uri" ,ghc-network-uri)
-       ("ghc-network" ,ghc-network)))
+     (list ghc-network-bsd ghc-network-uri ghc-network))
     (home-page "https://hackage.haskell.org/package/httpd-shed")
     (synopsis "Simple web-server with an interact style API")
     (description
@@ -157,13 +155,10 @@ requests, and the library is intended for implementing Ajax APIs.")
          "05j00b9nqmwh9zaq9y9x50k81v2pd3j7a71kd91zlnbl8xk4m2jf"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-doctest" ,ghc-doctest)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-quickcheck-instances" ,ghc-quickcheck-instances)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-doctest ghc-hspec ghc-quickcheck ghc-quickcheck-instances
+           hspec-discover))
     (inputs
-     `(("ghc-case-insensitive" ,ghc-case-insensitive)))
+     (list ghc-case-insensitive))
     (home-page "https://github.com/aristidb/http-types")
     (synopsis "Generic HTTP types for Haskell")
     (description "This package provides generic HTTP types for Haskell (for
@@ -173,7 +168,7 @@ both client and server code).")
 (define-public ghc-http
   (package
     (name "ghc-http")
-    (version "4000.3.14")
+    (version "4000.3.16")
     (outputs '("out" "static" "doc"))
     (source
      (origin
@@ -182,23 +177,21 @@ both client and server code).")
                            "HTTP-" version ".tar.gz"))
        (sha256
         (base32
-         "0yv8mbjicpl7l2017c4dhm49117lblgwpy1llv368wci1vrxf0m6"))))
+         "0bgyj3ahqlyg0jw6qsm2sncp8mklc4h0dj91s043vb3ig01iq2fn"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-httpd-shed" ,ghc-httpd-shed)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)))
+     (list ghc-httpd-shed ghc-hunit ghc-test-framework
+           ghc-test-framework-hunit))
     (inputs
-     `(("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-conduit" ,ghc-conduit)
-       ("ghc-conduit-extra" ,ghc-conduit-extra)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-old-time" ,ghc-old-time)
-       ("ghc-puremd5" ,ghc-puremd5)
-       ("ghc-network" ,ghc-network)
-       ("ghc-network-uri" ,ghc-network-uri)
-       ("ghc-split" ,ghc-split)))
+     (list ghc-case-insensitive
+           ghc-conduit
+           ghc-conduit-extra
+           ghc-http-types
+           ghc-old-time
+           ghc-puremd5
+           ghc-network
+           ghc-network-uri
+           ghc-split))
     (arguments
      `(#:tests? #f  ; FIXME: currently missing libraries used for tests.
        #:phases
@@ -228,7 +221,7 @@ responses coming back.")
 (define-public ghc-http-client
   (package
     (name "ghc-http-client")
-    (version "0.6.4")
+    (version "0.6.4.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://hackage.haskell.org/package/"
@@ -236,29 +229,29 @@ responses coming back.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "1n9rnbp8lwkd4whi2anniywi4y1bn9kx6nzfigfvz28d7pn7i4in"))))
+                "1y12xfh6xvsfvyapbssmgrpjz025rmyccprbnmzhs0y1cmlz6hjp"))))
     (build-system haskell-build-system)
     ;; Tests require access to the web.
     (arguments `(#:tests? #f))
     (inputs
-     `(("ghc-async" ,ghc-async)
-       ("ghc-base64-bytestring" ,ghc-base64-bytestring)
-       ("ghc-blaze-builder" ,ghc-blaze-builder)
-       ("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-cookie" ,ghc-cookie)
-       ("ghc-data-default-class" ,ghc-data-default-class)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-memory" ,ghc-memory)
-       ("ghc-mime-types" ,ghc-mime-types)
-       ("ghc-monad-control" ,ghc-monad-control)
-       ("ghc-network" ,ghc-network)
-       ("ghc-network-uri" ,ghc-network-uri)
-       ("ghc-random" ,ghc-random)
-       ("ghc-streaming-commons" ,ghc-streaming-commons)
-       ("ghc-zlib" ,ghc-zlib)))
+     (list ghc-async
+           ghc-base64-bytestring
+           ghc-blaze-builder
+           ghc-case-insensitive
+           ghc-cookie
+           ghc-data-default-class
+           ghc-exceptions
+           ghc-http-types
+           ghc-memory
+           ghc-mime-types
+           ghc-monad-control
+           ghc-network
+           ghc-network-uri
+           ghc-random
+           ghc-streaming-commons
+           ghc-zlib))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)))
+     (list ghc-hspec))
     (home-page "https://github.com/snoyberg/http-client")
     (synopsis "HTTP client engine")
     (description
@@ -282,14 +275,14 @@ for more user-friendly packages.")
     ;; Tests require Internet access
     (arguments `(#:tests? #f))
     (inputs
-     `(("ghc-data-default-class" ,ghc-data-default-class)
-       ("ghc-http-client" ,ghc-http-client)
-       ("ghc-connection" ,ghc-connection)
-       ("ghc-network" ,ghc-network)
-       ("ghc-tls" ,ghc-tls)
-       ("ghc-http-types" ,ghc-http-types)))
+     (list ghc-data-default-class
+           ghc-http-client
+           ghc-connection
+           ghc-network
+           ghc-tls
+           ghc-http-types))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)))
+     (list ghc-hspec))
     (home-page "https://github.com/snoyberg/http-client")
     (synopsis "Backend for http-client using the TLS library")
     (description
@@ -301,7 +294,7 @@ libraries, such as http-conduit.")
 (define-public ghc-http-date
   (package
     (name "ghc-http-date")
-    (version "0.0.8")
+    (version "0.0.11")
     (source
      (origin
        (method url-fetch)
@@ -310,15 +303,12 @@ libraries, such as http-conduit.")
                            "http-date-" version ".tar.gz"))
        (sha256
         (base32
-         "09slbzqayjnqqz9zybk7slgzvizgplikqgg4b2flzgks91466k0g"))))
+         "1lzlrj2flcnz3k5kfhf11nk5n8m6kcya0lkwrsnzxgfr3an27y9j"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-attoparsec" ,ghc-attoparsec)))
+     (list ghc-attoparsec))
     (native-inputs
-     `(("ghc-doctest" ,ghc-doctest)
-       ("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)
-       ("ghc-old-locale" ,ghc-old-locale)))
+     (list ghc-doctest ghc-hspec hspec-discover ghc-old-locale))
     (home-page "https://github.com/kazu-yamamoto/http-date")
     (synopsis "HTTP Date parser/formatter")
     (description "Library for Parsing and formatting HTTP
@@ -328,7 +318,7 @@ Date in Haskell.")
 (define-public ghc-http2
   (package
     (name "ghc-http2")
-    (version "1.6.5")
+    (version "3.0.2")
     (source
      (origin
        (method url-fetch)
@@ -337,23 +327,31 @@ Date in Haskell.")
                            "http2-" version ".tar.gz"))
        (sha256
         (base32
-         "1vlmy8vnp6ml2n2pr11aa5fzigldsscgzmibrni64ykgfvpd3sqn"))))
+         "13c2z35gdimncgpyg5dn5cpjvd83rbrigc8b40crg36678m0k0d1"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-network-byte-order" ,ghc-network-byte-order)
-       ("ghc-aeson" ,ghc-aeson)
-       ("ghc-aeson-pretty" ,ghc-aeson-pretty)
-       ("ghc-base16-bytestring" ,ghc-base16-bytestring)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-word8" ,ghc-word8)
-       ("ghc-psqueues" ,ghc-psqueues)))
+     (list ghc-aeson
+           ghc-aeson-pretty
+           ghc-base16-bytestring
+           ghc-case-insensitive
+           ghc-cryptonite
+           ghc-http-types
+           ghc-network-byte-order
+           ghc-network
+           ghc-network-run
+           ghc-psqueues
+           ghc-time-manager
+           ghc-unix-time
+           ghc-unordered-containers
+           ghc-vector
+           ghc-word8))
     (native-inputs
-     `(("ghc-glob" ,ghc-glob)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-doctest" ,ghc-doctest)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-async
+           ghc-doctest
+           ghc-glob
+           ghc-hspec
+           hspec-discover
+           ghc-typed-process))
     (home-page "https://github.com/kazu-yamamoto/http2")
     (synopsis "HTTP/2 library including frames, priority queues and HPACK")
     (description "This package provides a HTTP/2.0 library including frames
@@ -363,7 +361,7 @@ and HPACK.  Currently HTTP/2 16 framing and HPACK 10 is supported.")
 (define-public ghc-http-conduit
   (package
     (name  "ghc-http-conduit")
-    (version "2.3.7.3")
+    (version "2.3.8")
     (source
      (origin
        (method url-fetch)
@@ -372,46 +370,46 @@ and HPACK.  Currently HTTP/2 16 framing and HPACK 10 is supported.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "00rshi1y0h8y4rvsnnad0bppxgpvp40sk7lw1kxmdwy8pi8xrvbs"))))
+         "1bj24phbcb7s3k6v48l5gk82m3m23j8zy9l7c5ccxp3ghn9z5gng"))))
     (build-system haskell-build-system)
     ;; FIXME: `httpLbs TLS` in test-suite `test` fails with
     ;; ConnectionFailure getProtocolByName: does not exist (no such protocol
     ;; name: tcp)
     (arguments `(#:tests? #f))
     (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-resourcet" ,ghc-resourcet)
-       ("ghc-conduit" ,ghc-conduit)
-       ("ghc-conduit-extra" ,ghc-conduit-extra)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-lifted-base" ,ghc-lifted-base)
-       ("ghc-http-client" ,ghc-http-client)
-       ("ghc-http-client-tls" ,ghc-http-client-tls)
-       ("ghc-monad-control" ,ghc-monad-control)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-unliftio" ,ghc-unliftio)))
+     (list ghc-aeson
+           ghc-resourcet
+           ghc-conduit
+           ghc-conduit-extra
+           ghc-http-types
+           ghc-lifted-base
+           ghc-http-client
+           ghc-http-client-tls
+           ghc-monad-control
+           ghc-exceptions
+           ghc-unliftio))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-data-default-class" ,ghc-data-default-class)
-       ("ghc-connection" ,ghc-connection)
-       ("ghc-warp-tls" ,ghc-warp-tls)
-       ("ghc-blaze-builder" ,ghc-blaze-builder)
-       ("ghc-conduit" ,ghc-conduit)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-lifted-base" ,ghc-lifted-base)
-       ("ghc-network" ,ghc-network)
-       ("ghc-wai" ,ghc-wai)
-       ("ghc-warp" ,ghc-warp)
-       ("ghc-wai-conduit" ,ghc-wai-conduit)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-cookie" ,ghc-cookie)
-       ("ghc-conduit-extra" ,ghc-conduit-extra)
-       ("ghc-streaming-commons" ,ghc-streaming-commons)
-       ("ghc-aeson" ,ghc-aeson)
-       ("ghc-temporary" ,ghc-temporary)
-       ("ghc-resourcet" ,ghc-resourcet)))
+     (list ghc-hunit
+           ghc-hspec
+           ghc-data-default-class
+           ghc-connection
+           ghc-warp-tls
+           ghc-blaze-builder
+           ghc-conduit
+           ghc-utf8-string
+           ghc-case-insensitive
+           ghc-lifted-base
+           ghc-network
+           ghc-wai
+           ghc-warp
+           ghc-wai-conduit
+           ghc-http-types
+           ghc-cookie
+           ghc-conduit-extra
+           ghc-streaming-commons
+           ghc-aeson
+           ghc-temporary
+           ghc-resourcet))
     (home-page "https://hackage.haskell.org/package/http-conduit")
     (synopsis "HTTP/HTTPS client with conduit interface")
     (description "This library uses attoparsec for parsing the actual
@@ -434,23 +432,21 @@ which allow you to avoid direct usage of conduits.")
          "1a6i5njf85b2lhg8m83njagcf09wih5q2irnyb2890s724qr277v"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-word8" ,ghc-word8)
-       ("ghc-blaze-builder" ,ghc-blaze-builder)
-       ("ghc-http-client" ,ghc-http-client)
-       ("ghc-wai" ,ghc-wai)
-       ("ghc-network" ,ghc-network)
-       ("ghc-conduit" ,ghc-conduit)
-       ("ghc-conduit-extra" ,ghc-conduit-extra)
-       ("ghc-wai-logger" ,ghc-wai-logger)
-       ("ghc-resourcet" ,ghc-resourcet)
-       ("ghc-unliftio" ,ghc-unliftio)
-       ("ghc-streaming-commons" ,ghc-streaming-commons)))
+     (list ghc-case-insensitive
+           ghc-http-types
+           ghc-word8
+           ghc-blaze-builder
+           ghc-http-client
+           ghc-wai
+           ghc-network
+           ghc-conduit
+           ghc-conduit-extra
+           ghc-wai-logger
+           ghc-resourcet
+           ghc-unliftio
+           ghc-streaming-commons))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-warp" ,ghc-warp)
-       ("ghc-http-conduit" ,ghc-http-conduit)))
+     (list ghc-hspec ghc-warp ghc-http-conduit))
     (home-page
      "https://github.com/fpco/http-reverse-proxy")
     (synopsis
@@ -464,7 +460,7 @@ approach performs full request/response parsing via WAI and http-conduit.")
 (define-public ghc-wai
   (package
     (name "ghc-wai")
-    (version "3.2.2.1")
+    (version "3.2.3")
     (source
      (origin
        (method url-fetch)
@@ -474,20 +470,17 @@ approach performs full request/response parsing via WAI and http-conduit.")
              ".tar.gz"))
        (sha256
         (base32
-         "058871axlq6r0gcqxbjw37w57df9xbv81dmz99b1zq59wf329xzy"))))
+         "1y19h9v0cq1fl17ywcyyvd6419fhgyw2s0yk0ki8z60021adcx2m"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-bytestring-builder" ,ghc-bytestring-builder)
-       ("ghc-unix-compat" ,ghc-unix-compat)
-       ("ghc-vault" ,ghc-vault)
-       ("ghc-blaze-builder" ,ghc-blaze-builder)
-       ("ghc-network" ,ghc-network)
-       ("ghc-http-types" ,ghc-http-types)))
+     (list ghc-bytestring-builder
+           ghc-unix-compat
+           ghc-vault
+           ghc-blaze-builder
+           ghc-network
+           ghc-http-types))
     (native-inputs
-     `(("hspec-discover" ,hspec-discover)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-hspec" ,ghc-hspec)))
+     (list hspec-discover ghc-quickcheck ghc-hunit ghc-hspec))
     (home-page "https://hackage.haskell.org/package/wai")
     (synopsis "Web application interface for Haskell")
     (description "This package provides a Web Application Interface (WAI)
@@ -498,7 +491,7 @@ communication between web applications and web servers.")
 (define-public ghc-wai-logger
   (package
     (name "ghc-wai-logger")
-    (version "2.3.5")
+    (version "2.3.6")
     (source
      (origin
        (method url-fetch)
@@ -508,21 +501,21 @@ communication between web applications and web servers.")
              ".tar.gz"))
        (sha256
         (base32
-         "05gbipyw0672irynsc3wqvvgzqixhmq69ay2mxh2phb734r8bcmm"))))
+         "0hbm7if28p6qa36cgpyq6i569275si53z9gsl2g1z8x09z3xiyz2"))))
     (build-system haskell-build-system)
     (arguments `(#:tests? #f)) ; FIXME: Tests cannot find libraries exported
                                ; by propagated-inputs.
     (inputs
-     `(("ghc-auto-update" ,ghc-auto-update)
-       ("ghc-byteorder" ,ghc-byteorder)
-       ("ghc-easy-file" ,ghc-easy-file)
-       ("ghc-unix-time" ,ghc-unix-time)
-       ("ghc-blaze-builder" ,ghc-blaze-builder)
-       ("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-fast-logger" ,ghc-fast-logger)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-network" ,ghc-network)
-       ("ghc-wai" ,ghc-wai)))
+     (list ghc-auto-update
+           ghc-byteorder
+           ghc-easy-file
+           ghc-unix-time
+           ghc-blaze-builder
+           ghc-case-insensitive
+           ghc-fast-logger
+           ghc-http-types
+           ghc-network
+           ghc-wai))
     (home-page "https://hackage.haskell.org/package/wai-logger")
     (synopsis "Logging system for WAI")
     (description "This package provides the logging system for WAI.")
@@ -531,7 +524,7 @@ communication between web applications and web servers.")
 (define-public ghc-wai-extra
   (package
     (name "ghc-wai-extra")
-    (version "3.0.28")
+    (version "3.1.7")
     (source
      (origin
        (method url-fetch)
@@ -541,35 +534,29 @@ communication between web applications and web servers.")
              ".tar.gz"))
        (sha256
         (base32
-         "0iky7k4kirngvk1p2nz19zgzffb5hppfaxdjan80v06ikc8w1wm7"))))
+         "1avf7bjcsbs8l6klp5kkd0cd2dc5n0j0a2yf8813pnwfn5b7qyd4"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-ansi-terminal" ,ghc-ansi-terminal)
-       ("ghc-base64-bytestring" ,ghc-base64-bytestring)
-       ("ghc-cookie" ,ghc-cookie)
-       ("ghc-network" ,ghc-network)
-       ("ghc-lifted-base" ,ghc-lifted-base)
-       ("ghc-streaming-commons" ,ghc-streaming-commons)
-       ("ghc-stringsearch" ,ghc-stringsearch)
-       ("ghc-resourcet" ,ghc-resourcet)
-       ("ghc-fast-logger" ,ghc-fast-logger)
-       ("ghc-wai-logger" ,ghc-wai-logger)
-       ("ghc-zlib" ,ghc-zlib)
-       ("ghc-word8" ,ghc-word8)
-       ("ghc-iproute" ,ghc-iproute)
-       ("ghc-void" ,ghc-void)
-       ("ghc-wai" ,ghc-wai)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-http2" ,ghc-http2)
-       ("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-data-default-class" ,ghc-data-default-class)
-       ("ghc-unix-compat" ,ghc-unix-compat)
-       ("ghc-vault" ,ghc-vault)
-       ("ghc-aeson" ,ghc-aeson)))
+     (list ghc-ansi-terminal
+           ghc-base64-bytestring
+           ghc-call-stack
+           ghc-cookie
+           ghc-network
+           ghc-streaming-commons
+           ghc-resourcet
+           ghc-fast-logger
+           ghc-wai-logger
+           ghc-word8
+           ghc-iproute
+           ghc-wai
+           ghc-http-types
+           ghc-http2
+           ghc-case-insensitive
+           ghc-data-default-class
+           ghc-vault
+           ghc-aeson))
     (native-inputs
-     `(("hspec-discover" ,hspec-discover)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-hunit" ,ghc-hunit)))
+     (list hspec-discover ghc-hspec ghc-hunit ghc-zlib))
     (home-page "https://github.com/yesodweb/wai")
     (synopsis "Some basic WAI handlers and middleware")
     (description "This library provides basic WAI handlers and middleware
@@ -591,10 +578,7 @@ functionality.")
          "07yn41rn2skd5p3wqqa09wa761vj7ibl8l19gh4bi4i8slxhk417"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-conduit" ,ghc-conduit)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-wai" ,ghc-wai)
-       ("ghc-blaze-builder" ,ghc-blaze-builder)))
+     (list ghc-conduit ghc-http-types ghc-wai ghc-blaze-builder))
     (home-page "https://github.com/yesodweb/wai")
     (synopsis "Conduit wrappers for Haskell's WAI")
     (description "This package provides data streaming abstraction for
@@ -620,15 +604,17 @@ Haskell's Web Application Interface (WAI).")
      `(;; XXX: As of 0.0.4, one property test ("Identical output as Blaze")
        ;; fails on i686-linux.
        #:tests? ,(not (string-prefix? "i686" (or (%current-target-system)
-                                                 (%current-system))))))
+                                                 (%current-system))))
+       #:cabal-revision
+       ("3" "15hg352id2f4x0dnvv47bdiz6gv5hp5a2mki9yzmhc7ajpk31mdd")))
     (native-inputs
-     `(("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-blaze-builder" ,ghc-blaze-builder)
-       ("ghc-hedgehog" ,ghc-hedgehog)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hedgehog" ,ghc-tasty-hedgehog)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-doctest" ,ghc-doctest)))
+     (list ghc-attoparsec
+           ghc-blaze-builder
+           ghc-hedgehog
+           ghc-tasty
+           ghc-tasty-hedgehog
+           ghc-tasty-hunit
+           ghc-doctest))
     (home-page "https://github.com/sjakobi/bsb-http-chunked")
     (synopsis "Chunked HTTP transfer encoding for bytestring builders")
     (description "This Haskell library contains functions for encoding
@@ -639,7 +625,7 @@ transfers.")
 (define-public ghc-warp
   (package
     (name "ghc-warp")
-    (version "3.2.28")
+    (version "3.3.17")
     (source
      (origin
        (method url-fetch)
@@ -647,36 +633,38 @@ transfers.")
                            "warp-" version "/" "warp-" version
                            ".tar.gz"))
        (sha256
-        (base32 "0w2w3aiccpb2f8zssqiszcxzqdysihqi5xply23lwif5arz4saw7"))))
+        (base32 "0v54ca3wpa79gdyiikwhbv9h8b5vr3d60piq3ndb2v7s7fi1qpm0"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-async" ,ghc-async)
-       ("ghc-auto-update" ,ghc-auto-update)
-       ("ghc-bsb-http-chunked" ,ghc-bsb-http-chunked)
-       ("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-iproute" ,ghc-iproute)
-       ("ghc-network" ,ghc-network)
-       ("ghc-streaming-commons" ,ghc-streaming-commons)
-       ("ghc-time-manager" ,ghc-time-manager)
-       ("ghc-unix-compat" ,ghc-unix-compat)
-       ("ghc-vault" ,ghc-vault)
-       ("ghc-wai" ,ghc-wai)
-       ("ghc-word8" ,ghc-word8)
-       ("ghc-http-date" ,ghc-http-date)
-       ("ghc-simple-sendfile" ,ghc-simple-sendfile)
-       ("ghc-http2" ,ghc-http2)))
+     (list ghc-async
+           ghc-auto-update
+           ghc-bsb-http-chunked
+           ghc-case-insensitive
+           ghc-hashable
+           ghc-http-types
+           ghc-iproute
+           ghc-network
+           ghc-streaming-commons
+           ghc-time-manager
+           ghc-unix-compat
+           ghc-vault
+           ghc-wai
+           ghc-word8
+           ghc-http-date
+           ghc-simple-sendfile
+           ghc-unliftio
+           ghc-x509
+           ghc-http2))
     (native-inputs
-     `(("curl" ,curl)
-       ("ghc-silently" ,ghc-silently)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-doctest" ,ghc-doctest)
-       ("ghc-lifted-base" ,ghc-lifted-base)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-http-client" ,ghc-http-client)
-       ("hspec-discover" ,hspec-discover)))
+     (list curl
+           ghc-silently
+           ghc-hspec
+           ghc-doctest
+           ghc-lifted-base
+           ghc-quickcheck
+           ghc-hunit
+           ghc-http-client
+           hspec-discover))
     (home-page "https://github.com/yesodweb/wai")
     (synopsis "HTTP server library for Haskell's WAI")
     (description "Warp is a server library for HTTP/1.x and HTTP/2
@@ -686,7 +674,7 @@ based WAI (Web Application Interface in Haskell).")
 (define-public ghc-tls-session-manager
   (package
   (name "ghc-tls-session-manager")
-  (version "0.0.3")
+  (version "0.0.4")
   (source
     (origin
       (method url-fetch)
@@ -696,13 +684,10 @@ based WAI (Web Application Interface in Haskell).")
              version ".tar.gz"))
       (sha256
         (base32
-          "0k57flqp2b4bipafiyfipnqmdqv04ky39yr4s4s9sx577zz2j2yi"))))
+          "134kb5nz668f4xrr5g98g7fc1bwb3ri6q433a1i6asjkniwpy85s"))))
   (build-system haskell-build-system)
   (inputs
-    `(("ghc-auto-update" ,ghc-auto-update)
-      ("ghc-clock" ,ghc-clock)
-      ("ghc-psqueues" ,ghc-psqueues)
-      ("ghc-tls" ,ghc-tls)))
+    (list ghc-auto-update ghc-clock ghc-psqueues ghc-tls))
   (home-page "https://hackage.haskell.org/package/tls-session-manager")
   (synopsis "In-memory TLS session manager")
   (description "This Haskell library provides a TLS session manager with
@@ -712,7 +697,7 @@ limitation, automatic pruning, energy saving and replay resistance.")
 (define-public ghc-warp-tls
   (package
     (name "ghc-warp-tls")
-    (version "3.2.8")
+    (version "3.3.2")
     (source
      (origin
        (method url-fetch)
@@ -721,17 +706,18 @@ limitation, automatic pruning, energy saving and replay resistance.")
                            "warp-tls-" version ".tar.gz"))
        (sha256
         (base32
-         "1z5jzl40x1gp249fk8h51gkw6m3hzxchm2bp3kbpqdgmw8r5im8y"))))
+         "0b9viw26ymzq4q8snfddz3w59sqcf5ankxnw6f99iacxjhk6zs6m"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-cryptonite" ,ghc-cryptonite)
-       ("ghc-data-default-class" ,ghc-data-default-class)
-       ("ghc-network" ,ghc-network)
-       ("ghc-streaming-commons" ,ghc-streaming-commons)
-       ("ghc-tls" ,ghc-tls)
-       ("ghc-tls-session-manager" ,ghc-tls-session-manager)
-       ("ghc-wai" ,ghc-wai)
-       ("ghc-warp" ,ghc-warp)))
+     (list ghc-cryptonite
+           ghc-data-default-class
+           ghc-network
+           ghc-streaming-commons
+           ghc-tls
+           ghc-tls-session-manager
+           ghc-unliftio
+           ghc-wai
+           ghc-warp))
     (home-page "https://github.com/yesodweb/wai")
     (synopsis "SSL/TLS support for Warp")
     (description "This package provides SSL/TLS support for Warp,
@@ -741,34 +727,33 @@ a WAI handler, via the native Haskell TLS implementation.")
 (define-public ghc-websockets
   (package
     (name "ghc-websockets")
-    (version "0.12.6.1")
+    (version "0.12.7.2")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
-             "mirror://hackage/package/websockets/websockets-"
+             "https://hackage.haskell.org/package/websockets/websockets-"
              version
              ".tar.gz"))
        (sha256
         (base32
-         "1vp3790w3hmr6v96314vdx74f7sg2c7hvnc93gafq0xhbxnr7nvx"))))
+         "1b92a41l2var1ccg350mh2bjmb2plb6d79yzvmlwkd41nifmmi44"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-base64-bytestring" ,ghc-base64-bytestring)
-       ("ghc-bytestring-builder" ,ghc-bytestring-builder)
-       ("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-network" ,ghc-network)
-       ("ghc-random" ,ghc-random)
-       ("ghc-sha" ,ghc-sha)
-       ("ghc-streaming-commons" ,ghc-streaming-commons)
-       ("ghc-entropy" ,ghc-entropy)))
+     (list ghc-attoparsec
+           ghc-base64-bytestring
+           ghc-bytestring-builder
+           ghc-case-insensitive
+           ghc-network
+           ghc-random
+           ghc-sha
+           ghc-clock
+           ghc-async
+           ghc-streaming-commons
+           ghc-entropy))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)))
+     (list ghc-hunit ghc-quickcheck ghc-test-framework
+           ghc-test-framework-hunit ghc-test-framework-quickcheck2))
     (home-page "https://jaspervdj.be/websockets/")
     (synopsis
      "Write WebSocket-capable servers in Haskell")
@@ -805,11 +790,8 @@ See also:
          "0b2xmdsrsqpssyib53wbr6r8hf75789ndyyanv37sv99iyqcwz4i"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-wai" ,ghc-wai)
-       ("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-network" ,ghc-network)
-       ("ghc-websockets" ,ghc-websockets)
-       ("ghc-http-types" ,ghc-http-types)))
+     (list ghc-wai ghc-case-insensitive ghc-network ghc-websockets
+           ghc-http-types))
     (arguments
      `(#:configure-flags '("--flags=-example")))
     (home-page "https://github.com/yesodweb/wai")
@@ -834,14 +816,9 @@ See also:
          "1d72s3a6520iwwc1wbn9v2znqgbw6a5wwzb23iq8ny9ccnjyx1dk"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-tagsoup" ,ghc-tagsoup)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("ghc-css-text" ,ghc-css-text)
-       ("ghc-network-uri" ,ghc-network-uri)))
+     (list ghc-tagsoup ghc-utf8-string ghc-css-text ghc-network-uri))
     (native-inputs
-     `(("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-hunit" ,ghc-hunit)))
+     (list ghc-attoparsec ghc-hspec ghc-hunit))
     (home-page "https://github.com/yesodweb/haskell-xss-sanitize")
     (synopsis "Sanitize untrusted HTML to prevent XSS attacks")
     (description "This library provides @code{sanitizeXSS}.  Run untrusted
@@ -865,9 +842,7 @@ attacks.")
          "0ynd9f4hn2sfwqzbsa0y7phmxq8za7jiblpjwx0ry8b372zhgxaz"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-attoparsec ghc-hspec ghc-quickcheck))
     (home-page "https://www.yesodweb.com/")
     (synopsis "CSS parser and renderer")
     (description "This package provides a CSS parser and renderer for
@@ -919,7 +894,7 @@ documents.")
 (define-public ghc-html-conduit
   (package
     (name "ghc-html-conduit")
-    (version "1.3.2.1")
+    (version "1.3.2.2")
     (source
      (origin
        (method url-fetch)
@@ -928,18 +903,17 @@ documents.")
              "html-conduit-" version ".tar.gz"))
        (sha256
         (base32
-         "196c8zcnjp1pc5qvqxd8arx3xkw0a90rvg9mmiw2l4zwnx65709n"))))
+         "09bwrdam3y47kqllgg6w098ghqb8jb10dp4wxirsvx5ddpx9zpi6"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-resourcet" ,ghc-resourcet)
-       ("ghc-conduit" ,ghc-conduit)
-       ("ghc-xml-conduit" ,ghc-xml-conduit)
-       ("ghc-xml-types" ,ghc-xml-types)
-       ("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-conduit-extra" ,ghc-conduit-extra)))
+     (list ghc-resourcet
+           ghc-conduit
+           ghc-xml-conduit
+           ghc-xml-types
+           ghc-attoparsec
+           ghc-conduit-extra))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-hunit" ,ghc-hunit)))
+     (list ghc-hspec ghc-hunit))
     (home-page "https://github.com/snoyberg/xml")
     (synopsis "Parse HTML documents using xml-conduit datatypes")
     (description
@@ -965,16 +939,15 @@ entity decoding bugfixes applied.")
         (base32
          "0k1r1hddjgqighazcazxrx6xfhvy2gm8il8l82ainv3cai13yl30"))))
     (build-system haskell-build-system)
-    (outputs '("out" "static" "doc"))
+    (arguments
+     `(#:tests? #f ; TODO: Depends on quickcheck<2.14
+       #:cabal-revision
+       ("1" "0wvlfb3rd9cm3p894p5rl9kggrsr5da3n8x9ydrbagx91yvkxns9")))
     (inputs
-     `(("ghc-blaze-builder" ,ghc-blaze-builder)
-       ("ghc-blaze-markup" ,ghc-blaze-markup)))
+     (list ghc-blaze-builder ghc-blaze-markup))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)))
+     (list ghc-hunit ghc-quickcheck ghc-test-framework
+           ghc-test-framework-hunit ghc-test-framework-quickcheck2))
     (home-page "http://jaspervdj.be/blaze")
     (synopsis "Fast HTML combinator library")
     (description "This library provides HTML combinators for Haskell.")
@@ -983,7 +956,7 @@ entity decoding bugfixes applied.")
 (define-public ghc-aeson
   (package
     (name "ghc-aeson")
-    (version "1.4.5.0")
+    (version "1.5.6.0")
     (source
      (origin
        (method url-fetch)
@@ -993,33 +966,43 @@ entity decoding bugfixes applied.")
              ".tar.gz"))
        (sha256
         (base32
-         "1jhabz1lbbv6yqxqiybifi86cb5xlsadrn368n5dd0wzzc7ja4iz"))))
+         "1s5z4bgb5150h6a4cjf5vh8dmyrn6ilh29gh05999v6jwd5w6q83"))))
     (build-system haskell-build-system)
-    (arguments `(#:tests? #f)) ; FIXME: testing libraries are missing.
+    (arguments
+     `(#:tests? #f ; FIXME: testing libraries are missing.
+       #:cabal-revision
+       ("2" "1zxkarvmbgc2cpcc9sx1rlqm7nfh473052898ypiwk8azawp1hbj")))
     (outputs '("out" "static" "doc"))
     (inputs
-     `(("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-base-compat" ,ghc-base-compat)
-       ("ghc-dlist" ,ghc-dlist)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-th-abstraction" ,ghc-th-abstraction)
-       ("ghc-time-locale-compat" ,ghc-time-locale-compat)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-uuid-types" ,ghc-uuid-types)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-integer-logarithms" ,ghc-integer-logarithms)
-       ("ghc-base-orphans" ,ghc-base-orphans)
-       ("ghc-base16-bytestring" ,ghc-base16-bytestring)
-       ("ghc-generic-deriving" ,ghc-generic-deriving)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
-       ("ghc-quickcheck-instances" ,ghc-quickcheck-instances)
-       ("ghc-hashable-time" ,ghc-hashable-time)))
+     (list ghc-attoparsec
+           ghc-base-compat-batteries
+           ghc-data-fix
+           ghc-dlist
+           ghc-hashable
+           ghc-primitive
+           ghc-scientific
+           ghc-strict
+           ghc-tagged
+           ghc-th-abstraction
+           ghc-these
+           ghc-time-compat
+           ghc-unordered-containers
+           ghc-uuid-types
+           ghc-vector))
+;    (native-inputs
+;     `(("ghc-base16-bytestring" ,ghc-base16-bytestring)
+;       ("ghc-base-compat" ,ghc-base-compat)
+;       ("ghc-base-orphans" ,ghc-base-orphans)
+;       ("ghc-diff" ,ghc-diff)
+;       ("ghc-generic-deriving" ,ghc-generic-deriving)
+;       ("ghc-hashable-time" ,ghc-hashable-time)
+;       ("ghc-integer-logarithms" ,ghc-integer-logarithms)
+;       ("ghc-quickcheck" ,ghc-quickcheck)
+;       ("ghc-quickcheck-instances" ,ghc-quickcheck-instances)
+;       ("ghc-tasty" ,ghc-tasty)
+;       ("ghc-tasty-golden" ,ghc-tasty-golden)
+;       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
+;       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
     (home-page "https://github.com/bos/aeson")
     (synopsis "Fast JSON parsing and encoding")
     (description "This package provides a JSON parsing and encoding library
@@ -1030,7 +1013,7 @@ naming: in Greek mythology, Aeson was the father of Jason.)")
 (define-public ghc-aeson-pretty
   (package
     (name "ghc-aeson-pretty")
-    (version "0.8.8")
+    (version "0.8.9")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1038,16 +1021,16 @@ naming: in Greek mythology, Aeson was the father of Jason.)")
                     version ".tar.gz"))
               (sha256
                (base32
-                "09n7gs91y1fbw6gjszrd2na3isnvk3y5rsi90lzjrwywnqfadkl1"))))
+                "021az9az6xik9c9s3rnar5fr1lgy2h3igibf5ixnc7ps3m2lzg2x"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-base-compat" ,ghc-base-compat)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-cmdargs" ,ghc-cmdargs)))
+     (list ghc-aeson
+           ghc-base-compat
+           ghc-scientific
+           ghc-vector
+           ghc-unordered-containers
+           ghc-attoparsec
+           ghc-cmdargs))
     (home-page "https://github.com/informatikr/aeson-pretty")
     (synopsis "JSON pretty-printing library and command-line tool")
     (description
@@ -1063,25 +1046,24 @@ essentially the opposite of pretty-printing.")
 (define-public ghc-aeson-qq
   (package
     (name "ghc-aeson-qq")
-    (version "0.8.2")
+    (version "0.8.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://hackage.haskell.org/package/"
                                   "aeson-qq/aeson-qq-" version ".tar.gz"))
               (sha256
                (base32
-                "0ln13jqyfh5726hdrk1rad9a6cgrrj201plmwcfcpvq18v4m5ckd"))))
+                "0dpklq2xdhrkg1rdc7zfdjnzm6c3qxx2i1xskrqdxpqi84ffnlyh"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-base-compat" ,ghc-base-compat)
-       ("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-aeson" ,ghc-aeson)
-       ("ghc-haskell-src-meta" ,ghc-haskell-src-meta)))
+     (list ghc-base-compat
+           ghc-attoparsec
+           ghc-scientific
+           ghc-vector
+           ghc-aeson
+           ghc-haskell-src-meta))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-hspec hspec-discover))
     (home-page "https://github.com/zalora/aeson-qq")
     (synopsis "JSON quasiquoter for Haskell")
     (description
@@ -1106,13 +1088,13 @@ of a JSON value into a @code{Data.Aeson.Value}.")
          "09vkyrhwak3bmpfsqcd2az8hfqqkxyhg468hv5avgisy0nzh3w38"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-dlist" ,ghc-dlist)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)
-       ("ghc-void" ,ghc-void)))
+     (list ghc-aeson
+           ghc-unordered-containers
+           ghc-dlist
+           ghc-scientific
+           ghc-vector
+           ghc-transformers-compat
+           ghc-void))
     (home-page
      "https://github.com/hdgarrood/aeson-better-errors")
     (synopsis
@@ -1126,7 +1108,7 @@ good error messages when parsing fails.  See also
 (define-public ghc-multipart
   (package
     (name "ghc-multipart")
-    (version "0.1.3")
+    (version "0.2.1")
     (source
      (origin
        (method url-fetch)
@@ -1136,10 +1118,10 @@ good error messages when parsing fails.  See also
              ".tar.gz"))
        (sha256
         (base32
-         "1x4n4yyva22dhfr1pg5ki112qvvzb4hyd7bwpm189iq4gcp52q4z"))))
+         "0p6n4knxpjv70nbl6cmd6x7gkdjsjqp4ya7fz00bfrqp7jvhlivn"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-stringsearch" ,ghc-stringsearch)))
+     (list ghc-stringsearch))
     (home-page
      "http://www.github.com/silkapp/multipart")
     (synopsis
@@ -1151,7 +1133,7 @@ good error messages when parsing fails.  See also
 (define-public ghc-uri-encode
   (package
     (name "ghc-uri-encode")
-    (version "1.5.0.5")
+    (version "1.5.0.7")
     (source
      (origin
        (method url-fetch)
@@ -1160,11 +1142,10 @@ good error messages when parsing fails.  See also
              version ".tar.gz"))
        (sha256
         (base32
-         "11miwb5vvnn17m92ykz1pzg9x6s8fbpz3mmsyqs2s4b3mn55haz8"))))
+         "0lj2h701af12539p957rw24bxr07mfqd5r4h52i42f43ax165767"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-utf8-string" ,ghc-utf8-string)
-       ("ghc-network-uri" ,ghc-network-uri)))
+     (list ghc-utf8-string ghc-network-uri))
     (home-page "https://hackage.haskell.org/package/uri-encode")
     (synopsis "Unicode aware uri-encoding")
     (description "Unicode aware uri-encoding for Haskell.")
@@ -1184,9 +1165,7 @@ good error messages when parsing fails.  See also
         (base32
          "0vx3sivcsld76058925hym2j6hm3g71f0qjr7v59f1g2afgx82q8"))))
     (build-system haskell-build-system)
-    (native-inputs `(("ghc-hunit" ,ghc-hunit)
-                     ("ghc-hspec" ,ghc-hspec)
-                     ("ghc-quickcheck" ,ghc-quickcheck)))
+    (native-inputs (list ghc-hunit ghc-hspec ghc-quickcheck))
     (home-page "https://github.com/yesodweb/path-pieces")
     (synopsis "Used in Yesod to automatically marshall data in the request path")
     (description  "This Haskell package provides two typeclasses for converting
@@ -1207,10 +1186,8 @@ Haskell data types to and from route pieces.")
         (base32
          "1jdqdk0rz2wnvw735clnj8jh0a9rkrbqjg7vk3w6wczdql6cm0pq"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-cereal" ,ghc-cereal)
-              ("ghc-tagged" ,ghc-tagged)
-              ("ghc-crpto-api" ,ghc-crypto-api)))
-    (native-inputs `(("ghc-hspec" ,ghc-hspec)))
+    (inputs (list ghc-cereal ghc-tagged ghc-crypto-api))
+    (native-inputs (list ghc-hspec))
     (home-page "https://github.com/yesodweb/path-pieces")
     (synopsis "Skein family of cryptographic hash functions for Haskell")
     (description "@uref{(http://www.skein-hash.info, Skein} is a family of
@@ -1235,19 +1212,17 @@ This Haskell package uses bindings to the optimized C implementation of Skein.")
         (base32
          "0s6h4ykj16mpf7nlw2iqn2ji0p8g1fn5ni0s7yqaili6vv2as5ar"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-cereal" ,ghc-cereal)
-              ("ghc-tagged" ,ghc-tagged)
-              ("ghc-crypto-api" ,ghc-crypto-api)
-              ("ghc-skein" ,ghc-skein)
-              ("ghc-base64-bytestring" ,ghc-base64-bytestring)
-              ("ghc-entropy" ,ghc-entropy)
-              ("ghc-cprng-aes" ,ghc-cprng-aes)
-              ("ghc-cipher-aes" ,ghc-cipher-aes)
-              ("ghc-crypto-random" ,ghc-crypto-random)
-              ("ghc-setenv" ,ghc-setenv)))
-    (native-inputs `(("ghc-hunit" ,ghc-hunit)
-                     ("ghc-hspec" ,ghc-hspec)
-                     ("ghc-quickcheck" ,ghc-quickcheck)))
+    (inputs (list ghc-cereal
+                  ghc-tagged
+                  ghc-crypto-api
+                  ghc-skein
+                  ghc-base64-bytestring
+                  ghc-entropy
+                  ghc-cprng-aes
+                  ghc-cipher-aes
+                  ghc-crypto-random
+                  ghc-setenv))
+    (native-inputs (list ghc-hunit ghc-hspec ghc-quickcheck))
     (home-page "https://github.com/yesodweb/clientsession/tree/master")
     (synopsis "Haskell library for securely store session data in a
 client-side cookie")
@@ -1259,7 +1234,7 @@ avoid any issues with characters.")
 (define-public ghc-yesod-core
   (package
     (name "ghc-yesod-core")
-    (version "1.6.17.2")
+    (version "1.6.21.0")
     (source
      (origin
        (method url-fetch)
@@ -1268,56 +1243,56 @@ avoid any issues with characters.")
                            "yesod-core-" version ".tar.gz"))
        (sha256
         (base32
-         "0rcfksbxnwcpg5qh9vjkddv39q95mx4nxzgix51bbwa128hhzcwf"))))
-    (build-system haskell-build-system)
-    (inputs `(("ghc-wai" ,ghc-wai)
-              ("ghc-extra" ,ghc-extra)
-              ("ghc-shakespeare" ,ghc-shakespeare)
-              ("ghc-blaze-builder" ,ghc-blaze-builder)
-              ("ghc-clientsession" ,ghc-clientsession)
-              ("ghc-random" ,ghc-random)
-              ("ghc-cereal" ,ghc-cereal)
-              ("ghc-old-locale" ,ghc-old-locale)
-              ("ghc-unliftio" ,ghc-unliftio)
-              ("ghc-unordered-containers" ,ghc-unordered-containers)
-              ("ghc-monad-control" ,ghc-monad-control)
-              ("ghc-transformers-base" ,ghc-transformers-base)
-              ("ghc-cookie" ,ghc-cookie)
-              ("ghc-http-types" ,ghc-http-types)
-              ("ghc-case-insensitive" ,ghc-case-insensitive)
-              ("ghc-vector" ,ghc-vector)
-              ("ghc-aeson" ,ghc-aeson)
-              ("ghc-fast-logger" ,ghc-fast-logger)
-              ("ghc-wai-logger" ,ghc-wai-logger)
-              ("ghc-monad-logger" ,ghc-monad-logger)
-              ("ghc-conduit" ,ghc-conduit)
-              ("ghc-resourcet" ,ghc-resourcet)
-              ("ghc-rio" ,ghc-rio)
-              ("ghc-lifted-base" ,ghc-lifted-base)
-              ("ghc-blaze-html" ,ghc-blaze-html)
-              ("ghc-blaze-markup" ,ghc-blaze-markup)
-              ("ghc-data-default" ,ghc-data-default)
-              ("ghc-safe" ,ghc-safe)
-              ("ghc-warp" ,ghc-warp)
-              ("ghc-unix-compat" ,ghc-unix-compat)
-              ("ghc-conduit-extra" ,ghc-conduit-extra)
-              ("ghc-exceptions" ,ghc-exceptions)
-              ("ghc-deepseq-generics" ,ghc-deepseq-generics)
-              ("ghc-mwc-random" ,ghc-mwc-random)
-              ("ghc-primitive" ,ghc-primitive)
-              ("ghc-word8" ,ghc-word8)
-              ("ghc-auto-update" ,ghc-auto-update)
-              ("ghc-semigroups" ,ghc-semigroups)
-              ("ghc-byteable" ,ghc-byteable)))
-    (native-inputs `(("ghc-hspec" ,ghc-hspec)
-                     ("ghc-path-pieces" ,ghc-path-pieces)
-                     ("ghc-hunit" ,ghc-hunit)
-                     ("ghc-hspec-expectations" ,ghc-hspec-expectations)
-                     ("ghc-quickcheck" ,ghc-quickcheck)
-                     ("ghc-network" ,ghc-network)
-                     ("ghc-async" ,ghc-async)
-                     ("ghc-streaming-commons" ,ghc-streaming-commons)
-                     ("ghc-wai-extra" ,ghc-wai-extra)))
+         "0wmh7ip318p89lyy6k5mvxkkpq43knp41wlq9iaf3icz0ahqdmb7"))))
+    (build-system haskell-build-system)
+    (inputs (list ghc-wai
+                  ghc-extra
+                  ghc-shakespeare
+                  ghc-blaze-builder
+                  ghc-clientsession
+                  ghc-random
+                  ghc-cereal
+                  ghc-old-locale
+                  ghc-unliftio
+                  ghc-unordered-containers
+                  ghc-monad-control
+                  ghc-transformers-base
+                  ghc-cookie
+                  ghc-http-types
+                  ghc-case-insensitive
+                  ghc-vector
+                  ghc-aeson
+                  ghc-fast-logger
+                  ghc-wai-logger
+                  ghc-monad-logger
+                  ghc-conduit
+                  ghc-resourcet
+                  ghc-rio
+                  ghc-lifted-base
+                  ghc-blaze-html
+                  ghc-blaze-markup
+                  ghc-data-default
+                  ghc-safe
+                  ghc-warp
+                  ghc-unix-compat
+                  ghc-conduit-extra
+                  ghc-exceptions
+                  ghc-deepseq-generics
+                  ghc-mwc-random
+                  ghc-primitive
+                  ghc-word8
+                  ghc-auto-update
+                  ghc-semigroups
+                  ghc-byteable))
+    (native-inputs (list ghc-hspec
+                         ghc-path-pieces
+                         ghc-hunit
+                         ghc-hspec-expectations
+                         ghc-quickcheck
+                         ghc-network
+                         ghc-async
+                         ghc-streaming-commons
+                         ghc-wai-extra))
     (home-page "https://www.yesodweb.com")
     (synopsis "Core package for the Yesod web framework")
     (description "This Haskell package provides all core functionality, for
@@ -1328,7 +1303,7 @@ functions, widgets, etc.")
 (define-public ghc-yesod-persistent
   (package
     (name "ghc-yesod-persistent")
-    (version "1.6.0.4")
+    (version "1.6.0.7")
     (source
      (origin
        (method url-fetch)
@@ -1337,20 +1312,18 @@ functions, widgets, etc.")
                            "yesod-persistent-" version ".tar.gz"))
        (sha256
         (base32
-         "1gsiw2zx6z7za7a164h0fxfggkrdqz6fn0qyb2zn9qr7r2jbg1c0"))))
+         "102xmp7n08sk1g5rv31jpln2v9kqf1zsqsnmi83mnhmgggcbj1k4"))))
     (build-system haskell-build-system)
     (arguments `(#:tests? #f)) ; FIXME: hspec-discover not available in PATH.
-    (inputs `(("ghc-yesod-core" ,ghc-yesod-core)
-              ("ghc-persistent" ,ghc-persistent)
-              ("ghc-persistent-template" ,ghc-persistent-template)
-              ("ghc-blaze-builder" ,ghc-blaze-builder)
-              ("ghc-conduit" ,ghc-conduit)
-              ("ghc-resourcet" ,ghc-resourcet)
-              ("ghc-resource-pool" ,ghc-resource-pool)))
-    (native-inputs `(("ghc-hspec" ,ghc-hspec)
-                     ("ghc-wai-extra" ,ghc-wai-extra)
-                     ("ghc-yesod-core" ,ghc-yesod-core)
-                     ("ghc-persistent-sqlite" ,ghc-persistent-sqlite)))
+    (inputs (list ghc-yesod-core
+                  ghc-persistent
+                  ghc-persistent-template
+                  ghc-blaze-builder
+                  ghc-conduit
+                  ghc-resourcet
+                  ghc-resource-pool))
+    (native-inputs (list ghc-hspec ghc-wai-extra ghc-yesod-core
+                         ghc-persistent-sqlite))
     (home-page "https://www.yesodweb.com/")
     (synopsis "Helpers for using Persistent from Yesod")
     (description "This Haskell package provides helpers for using Persistent
@@ -1360,7 +1333,7 @@ from Yesod.")
 (define-public ghc-yesod-form
     (package
     (name "ghc-yesod-form")
-    (version "1.6.7")
+    (version "1.7.0")
     (source
       (origin
         (method url-fetch)
@@ -1370,39 +1343,39 @@ from Yesod.")
                ".tar.gz"))
         (sha256
           (base32
-            "0mny71dyp6cp5akyp5wvmrhmip5rkqi8ibdn3lipvmajx9h58r5d"))))
+            "170gby381h5pg9njn908cyx2931yiv79x3rc5npg2rd74kif06vi"))))
     (build-system haskell-build-system)
     (inputs
-      `(("ghc-yesod-core" ,ghc-yesod-core)
-        ("ghc-yesod-persistent" ,ghc-yesod-persistent)
-        ("ghc-shakespeare" ,ghc-shakespeare)
-        ("ghc-persistent" ,ghc-persistent)
-        ("ghc-data-default" ,ghc-data-default)
-        ("ghc-xss-sanitize" ,ghc-xss-sanitize)
-        ("ghc-blaze-builder" ,ghc-blaze-builder)
-        ("ghc-email-validate" ,ghc-email-validate)
-        ("ghc-wai" ,ghc-wai)
-        ("ghc-blaze-html" ,ghc-blaze-html)
-        ("ghc-blaze-markup" ,ghc-blaze-markup)
-        ("ghc-attoparsec" ,ghc-attoparsec)
-        ("ghc-byteable" ,ghc-byteable)
-        ("ghc-aeson" ,ghc-aeson)
-        ("ghc-resourcet" ,ghc-resourcet)
-        ("ghc-semigroups" ,ghc-semigroups)
-        ("ghc-network-uri" ,ghc-network-uri)
-        ("ghc-hspec" ,ghc-hspec)))
+      (list ghc-yesod-core
+            ghc-yesod-persistent
+            ghc-shakespeare
+            ghc-persistent
+            ghc-data-default
+            ghc-xss-sanitize
+            ghc-blaze-builder
+            ghc-email-validate
+            ghc-wai
+            ghc-blaze-html
+            ghc-blaze-markup
+            ghc-attoparsec
+            ghc-byteable
+            ghc-aeson
+            ghc-resourcet
+            ghc-semigroups
+            ghc-network-uri
+            ghc-hspec))
     (home-page "https://www.yesodweb.com")
     (synopsis "Form handling support for Yesod Web Framework")
     (description "This Haskell package provides a set of basic form inputs such
 as text, number, time, checkbox, select, textarea, etc through the
 @code{Yesod.Form.Fields} module.  Also, there is @code{Yesod.Form.Nic} module
-providing richtext field using Nic editor. ")
+providing richtext field using Nic editor.")
     (license license:expat)))
 
 (define-public ghc-yesod
   (package
     (name "ghc-yesod")
-    (version "1.6.0")
+    (version "1.6.1.2")
     (source
      (origin
        (method url-fetch)
@@ -1411,31 +1384,26 @@ providing richtext field using Nic editor. ")
              version ".tar.gz"))
        (sha256
         (base32
-         "0wx77nbpzdh40p1bm527kimfj48vs9d2avpvvz2w42zi3pz2y94a"))))
+         "13r0ispprj41kgn2rkc7zhy1rxfmgpjbmdlnys15h0ihhh3zhw2f"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-yesod-core" ,ghc-yesod-core)
-       ("ghc-yesod-persistent" ,ghc-yesod-persistent)
-       ("ghc-yesod-form" ,ghc-yesod-form)
-       ("ghc-monad-control" ,ghc-monad-control)
-       ("ghc-wai" ,ghc-wai)
-       ("ghc-wai-extra" ,ghc-wai-extra)
-       ("ghc-warp" ,ghc-warp)
-       ("ghc-blaze-html" ,ghc-blaze-html)
-       ("ghc-blaze-markup" ,ghc-blaze-markup)
-       ("ghc-aeson" ,ghc-aeson)
-       ("ghc-data-default-class" ,ghc-data-default-class)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-yaml" ,ghc-yaml)
-       ("ghc-monad-logger" ,ghc-monad-logger)
-       ("ghc-fast-logger" ,ghc-fast-logger)
-       ("ghc-conduit" ,ghc-conduit)
-       ("ghc-conduit-extra" ,ghc-conduit-extra)
-       ("ghc-resourcet" ,ghc-resourcet)
-       ("ghc-shakespeare" ,ghc-shakespeare)
-       ("ghc-streaming-commons" ,ghc-streaming-commons)
-       ("ghc-wai-logger" ,ghc-wai-logger)
-       ("ghc-semigroups" ,ghc-semigroups)))
+     (list ghc-yesod-core
+           ghc-yesod-persistent
+           ghc-yesod-form
+           ghc-wai
+           ghc-wai-extra
+           ghc-warp
+           ghc-aeson
+           ghc-file-embed
+           ghc-data-default-class
+           ghc-unordered-containers
+           ghc-yaml
+           ghc-monad-logger
+           ghc-fast-logger
+           ghc-conduit
+           ghc-shakespeare
+           ghc-streaming-commons
+           ghc-wai-logger))
     (home-page "https://www.yesodweb.com")
     (synopsis "Framework for creating type-safe, RESTful web applications")
     (description "The Haskell package package groups together the various
@@ -1446,7 +1414,7 @@ whereas most of the core code lives in @code{ghc-yesod-core}.")
 (define-public ghc-hxt-charproperties
   (package
     (name "ghc-hxt-charproperties")
-    (version "9.4.0.0")
+    (version "9.5.0.0")
     (source
      (origin
        (method url-fetch)
@@ -1455,7 +1423,7 @@ whereas most of the core code lives in @code{ghc-yesod-core}.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "1bk88hj2pqlvcnyfncqyb9j7w9vvdxcq3cgr0w2l09c0abas23pm"))))
+         "0jm98jddbsd60jc2bz8wa71rslagbaqf00ia7fvfsaiaa54nk0r8"))))
     (build-system haskell-build-system)
     (home-page "https://github.com/UweSchmidt/hxt")
     (synopsis "Character properties and classes for XML and Unicode")
@@ -1481,7 +1449,7 @@ supported Unicode version is 7.0.0")
          "0rj48cy8z4fl3zpg5bpa458kqr83adav6jnqv4i71dclpprj6n3v"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-hxt-charproperties" ,ghc-hxt-charproperties)))
+     (list ghc-hxt-charproperties))
     (home-page
      "http://www.fh-wedel.de/~si/HXmlToolbox/index.html https://github.com/UweSchmidt/hxt")
     (synopsis
@@ -1496,7 +1464,7 @@ ignored.")
 (define-public ghc-hxt-regex-xmlschema
   (package
     (name "ghc-hxt-regex-xmlschema")
-    (version "9.2.0.3")
+    (version "9.2.0.7")
     (source
      (origin
        (method url-fetch)
@@ -1505,11 +1473,10 @@ ignored.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "1c4jr0439f5yc05h7iz53fa47g6l2wrvqp6gvwf01mlqajk3nx7l"))))
+         "0ynrf65m7abq2fjnarlwq6i1r99pl89npibxx05rlplcgpybrdmr"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-hxt-charproperties" ,ghc-hxt-charproperties)
-       ("ghc-hunit" ,ghc-hunit)))
+     (list ghc-hxt-charproperties ghc-hunit))
     (home-page "https://wiki.haskell.org/Regular_expressions_for_XML_Schema")
     (synopsis "Regular expression library for W3C XML Schema regular expressions")
     (description
@@ -1521,7 +1488,7 @@ derivations of regular expressions.")
 (define-public ghc-hxt
   (package
     (name "ghc-hxt")
-    (version "9.3.1.18")
+    (version "9.3.1.22")
     (source
      (origin
        (method url-fetch)
@@ -1531,14 +1498,12 @@ derivations of regular expressions.")
              ".tar.gz"))
        (sha256
         (base32
-         "0836k65px3w9c5h1h2bmzq5a7mp6ajxwvfg3pfr2kbxwkgc0j63j"))))
+         "1n9snbdl46x23ka7bbsls1vsn0plpmfmbpbl0msjfm92fkk2yq7g"))))
     (build-system haskell-build-system)
     (outputs '("out" "static" "doc"))
     (inputs
-     `(("ghc-hxt-charproperties" ,ghc-hxt-charproperties)
-       ("ghc-hxt-unicode" ,ghc-hxt-unicode)
-       ("ghc-hxt-regex-xmlschema" ,ghc-hxt-regex-xmlschema)
-       ("ghc-network-uri" ,ghc-network-uri)))
+     (list ghc-hxt-charproperties ghc-hxt-unicode ghc-hxt-regex-xmlschema
+           ghc-network-uri))
     (home-page "https://github.com/UweSchmidt/hxt")
     (synopsis "Collection of tools for processing XML with Haskell")
     (description
@@ -1549,7 +1514,7 @@ introduces a more general approach for processing XML with Haskell.")
 (define-public ghc-http-common
   (package
     (name "ghc-http-common")
-    (version "0.8.2.0")
+    (version "0.8.3.4")
     (source
      (origin
        (method url-fetch)
@@ -1557,14 +1522,15 @@ introduces a more general approach for processing XML with Haskell.")
                            "http-common/http-common-" version ".tar.gz"))
        (sha256
         (base32
-         "14s5a178sb2vm5k00rs21760mds5dz2gs10k9iyn22h01mxyf599"))))
+         "1xpbnfac0fqa5r670ggwm4kq3cmz9jpaw9bx40j9w9qiw6xi4i28"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-base64-bytestring" ,ghc-base64-bytestring)
-       ("ghc-blaze-builder" ,ghc-blaze-builder)
-       ("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-network" ,ghc-network)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)))
+     (list ghc-base64-bytestring
+           ghc-blaze-builder
+           ghc-case-insensitive
+           ghc-network
+           ghc-random
+           ghc-unordered-containers))
     (home-page "https://github.com/afcowie/http-streams/")
     (synopsis "Common types for HTTP clients and servers")
     (description "Base types used by a variety of HTTP clients and
@@ -1577,7 +1543,7 @@ pipes-http re-export this package's types and functions.")
 (define-public ghc-http-streams
   (package
     (name "ghc-http-streams")
-    (version "0.8.6.1")
+    (version "0.8.9.4")
     (source
      (origin
        (method url-fetch)
@@ -1585,21 +1551,21 @@ pipes-http re-export this package's types and functions.")
                            "http-streams/http-streams-" version ".tar.gz"))
        (sha256
         (base32
-         "18vxd35n7s3z4gjvad94bknc8z1w9d7ccgphnhsxlz5cackizmxq"))))
+         "03xdcb0v735xdrkjlm1w56mskh3x08cbsjrcd7wn4li65ixc20xa"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-base64-bytestring" ,ghc-base64-bytestring)
-       ("ghc-blaze-builder" ,ghc-blaze-builder)
-       ("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-io-streams" ,ghc-io-streams)
-       ("ghc-hsopenssl" ,ghc-hsopenssl)
-       ("ghc-openssl-streams" ,ghc-openssl-streams)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-aeson" ,ghc-aeson)
-       ("ghc-http-common" ,ghc-http-common)
-       ("ghc-network-uri" ,ghc-network-uri)
-       ("ghc-network" ,ghc-network)))
+     (list ghc-attoparsec
+           ghc-base64-bytestring
+           ghc-blaze-builder
+           ghc-case-insensitive
+           ghc-io-streams
+           ghc-hsopenssl
+           ghc-openssl-streams
+           ghc-unordered-containers
+           ghc-aeson
+           ghc-http-common
+           ghc-network-uri
+           ghc-network))
     (arguments
      `(#:tests? #f)) ; tests rely on an outdated version of snap-server
     (home-page "https://github.com/afcowie/http-streams/")
@@ -1613,7 +1579,7 @@ deal with the result.")
 (define-public ghc-snap-core
   (package
     (name "ghc-snap-core")
-    (version "1.0.4.0")
+    (version "1.0.4.2")
     (source
      (origin
        (method url-fetch)
@@ -1621,34 +1587,38 @@ deal with the result.")
                            "snap-core/snap-core-" version ".tar.gz"))
        (sha256
         (base32
-         "0dklxgrbqhnb6bc4ic358g4fyj11ywmjrkxxhqcjmci2hhpn00mr"))))
+         "0zxdhx4wk70bkn71574lyz3zhq79yy98rv05r4564rd100xw3fqs"))))
     (build-system haskell-build-system)
+    (arguments
+     `(#:tests? #f ; TODO: Fail to compile.
+       #:cabal-revision
+       ("1" "065v61clskzikywv0gy9n4fjaszi2fnjklal83kqbzhzzgkf83ng")))
     (inputs
-     `(("ghc-old-locale" ,ghc-old-locale)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-bytestring-builder" ,ghc-bytestring-builder)
-       ("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-lifted-base" ,ghc-lifted-base)
-       ("ghc-io-streams" ,ghc-io-streams)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-monad-control" ,ghc-monad-control)
-       ("ghc-random" ,ghc-random)
-       ("ghc-readable" ,ghc-readable)
-       ("ghc-regex-posix" ,ghc-regex-posix)
-       ("ghc-transformers-base" ,ghc-transformers-base)
-       ("ghc-unix-compat" ,ghc-unix-compat)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-network-uri" ,ghc-network-uri)
-       ("ghc-network" ,ghc-network)))
+     (list ghc-old-locale
+           ghc-hunit
+           ghc-attoparsec
+           ghc-bytestring-builder
+           ghc-case-insensitive
+           ghc-lifted-base
+           ghc-io-streams
+           ghc-hashable
+           ghc-monad-control
+           ghc-random
+           ghc-readable
+           ghc-regex-posix
+           ghc-transformers-base
+           ghc-unix-compat
+           ghc-unordered-containers
+           ghc-vector
+           ghc-network-uri
+           ghc-network))
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-parallel" ,ghc-parallel)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
-       ("ghc-zlib" ,ghc-zlib)))
+     (list ghc-quickcheck
+           ghc-parallel
+           ghc-test-framework
+           ghc-test-framework-hunit
+           ghc-test-framework-quickcheck2
+           ghc-zlib))
     (home-page "http://snapframework.com/")
     (synopsis "Haskell Web Framework (core interfaces and types)")
     (description "Snap is a simple and fast web development framework
@@ -1660,7 +1630,7 @@ contains the core definitions and types for the Snap framework.")
 (define-public ghc-snap-server
   (package
     (name "ghc-snap-server")
-    (version "1.1.1.1")
+    (version "1.1.2.0")
     (source
      (origin
        (method url-fetch)
@@ -1668,38 +1638,35 @@ contains the core definitions and types for the Snap framework.")
                            "snap-server/snap-server-" version ".tar.gz"))
        (sha256
         (base32
-         "0lw475wp0lnrbgc3jcfif3qjjc3pmrh2k74d8cgpnc1304g6a2s5"))))
+         "0w4yv9a5ilpma0335ariwap2iscmdbaaif88lq3cm7px910nyc4j"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-blaze-builder" ,ghc-blaze-builder)
-       ("ghc-bytestring-builder" ,ghc-bytestring-builder)
-       ("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-clock" ,ghc-clock)
-       ("ghc-io-streams" ,ghc-io-streams)
-       ("ghc-io-streams-haproxy" ,ghc-io-streams-haproxy)
-       ("ghc-lifted-base" ,ghc-lifted-base)
-       ("ghc-network" ,ghc-network)
-       ("ghc-old-locale" ,ghc-old-locale)
-       ("ghc-snap-core" ,ghc-snap-core)
-       ("ghc-unix-compat" ,ghc-unix-compat)
-       ("ghc-vector" ,ghc-vector)))
+     (list ghc-attoparsec
+           ghc-blaze-builder
+           ghc-bytestring-builder
+           ghc-case-insensitive
+           ghc-clock
+           ghc-io-streams
+           ghc-io-streams-haproxy
+           ghc-lifted-base
+           ghc-network
+           ghc-old-locale
+           ghc-snap-core
+           ghc-unix-compat
+           ghc-vector))
     (native-inputs
-     `(("ghc-base16-bytestring" ,ghc-base16-bytestring)
-       ("ghc-monad-control" ,ghc-monad-control)
-       ("ghc-random" ,ghc-random)
-       ("ghc-threads" ,ghc-threads)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-http-streams" ,ghc-http-streams)
-       ("ghc-http-common" ,ghc-http-common)
-       ("ghc-parallel" ,ghc-parallel)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)))
-    (arguments
-     `(#:cabal-revision
-       ("1" "094b7ll47lxd4lvr6kd59jyw0vz686gw5cx16w758d6fli0cy3x3")))
+     (list ghc-base16-bytestring
+           ghc-monad-control
+           ghc-random
+           ghc-threads
+           ghc-hunit
+           ghc-quickcheck
+           ghc-http-streams
+           ghc-http-common
+           ghc-parallel
+           ghc-test-framework
+           ghc-test-framework-hunit
+           ghc-test-framework-quickcheck2))
     (home-page "http://snapframework.com/")
     (synopsis "Web server for the Snap Framework")
     (description "Snap is a simple and fast web development framework
@@ -1753,7 +1720,7 @@ users (e.g. Debian).")
          "0yjyzqh3qzhy5h3nql1fckw0gcfb0f4wj9pm85nafpfqp2kg58hv"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-http" ,ghc-http)))
+     (list ghc-http))
     (home-page "https://github.com/ndmitchell/js-flot")
     (synopsis "Obtain minified flot code")
     (description "This package bundles the minified
@@ -1767,7 +1734,7 @@ requirements of downstream users (e.g. Debian).")
 (define-public ghc-happstack-server
   (package
     (name "ghc-happstack-server")
-    (version "7.5.4")
+    (version "7.7.1.1")
     (source
      (origin
        (method url-fetch)
@@ -1776,32 +1743,30 @@ requirements of downstream users (e.g. Debian).")
              version ".tar.gz"))
        (sha256
         (base32
-         "0i7csvmwv7n68gkwqzi985p2mjdgzipjnlj873sdiknhx9pfmq70"))))
+         "0nc5rnvrzl9m3pinmdq234m80qkf4jszbdqnd567f7lh09yiqw9n"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-network" ,ghc-network)
-       ("ghc-network-bsd" ,ghc-network-bsd)
-       ("ghc-network-uri" ,ghc-network-uri)
-       ("ghc-base64-bytestring" ,ghc-base64-bytestring)
-       ("ghc-blaze-html" ,ghc-blaze-html)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-extensible-exceptions"
-        ,ghc-extensible-exceptions)
-       ("ghc-hslogger" ,ghc-hslogger)
-       ("ghc-html" ,ghc-html)
-       ("ghc-monad-control" ,ghc-monad-control)
-       ("ghc-old-locale" ,ghc-old-locale)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-sendfile" ,ghc-sendfile)
-       ("ghc-system-filepath" ,ghc-system-filepath)
-       ("ghc-syb" ,ghc-syb)
-       ("ghc-threads" ,ghc-threads)
-       ("ghc-transformers-base" ,ghc-transformers-base)
-       ("ghc-transformers-compat"
-        ,ghc-transformers-compat)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("ghc-zlib" ,ghc-zlib)))
-    (native-inputs `(("ghc-hunit" ,ghc-hunit)))
+     (list ghc-network
+           ghc-network-bsd
+           ghc-network-uri
+           ghc-base64-bytestring
+           ghc-blaze-html
+           ghc-exceptions
+           ghc-extensible-exceptions
+           ghc-hslogger
+           ghc-html
+           ghc-monad-control
+           ghc-old-locale
+           ghc-semigroups
+           ghc-sendfile
+           ghc-system-filepath
+           ghc-syb
+           ghc-threads
+           ghc-transformers-base
+           ghc-transformers-compat
+           ghc-utf8-string
+           ghc-zlib))
+    (native-inputs (list ghc-hunit))
     (home-page "http://happstack.com")
     (synopsis "Web related tools and services for Haskell")
     (description
@@ -1824,7 +1789,7 @@ cookies, serving files, and more.")
         (base32
          "0988snmx3bylpw3kcq8hsgji8idc6xcrcfp275qjv3apfdgc9rp0"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-network" ,ghc-network)))
+    (inputs (list ghc-network))
     (home-page
      "https://hub.darcs.net/stepcut/sendfile")
     (synopsis "Portable sendfile library for Haskell")
@@ -1835,7 +1800,7 @@ cookies, serving files, and more.")
 (define-public ghc-scalpel-core
   (package
     (name "ghc-scalpel-core")
-    (version "0.6.0")
+    (version "0.6.2")
     (source
       (origin
         (method url-fetch)
@@ -1844,17 +1809,17 @@ cookies, serving files, and more.")
                "scalpel-core-" version ".tar.gz"))
         (sha256
          (base32
-          "1qf0gnidyh8zk0acj99vn6hsj37m410lrm50sqpiv1i36rpmmsqh"))))
+          "07mjff8aqwabx8yhq8bd7jpnarkkrjqss8h8s2wkfmfj808fllmf"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-data-default" ,ghc-data-default)
-       ("ghc-fail" ,ghc-fail)
-       ("ghc-pointedlist" ,ghc-pointedlist)
-       ("ghc-regex-base" ,ghc-regex-base)
-       ("ghc-regex-tdfa" ,ghc-regex-tdfa)
-       ("ghc-tagsoup" ,ghc-tagsoup)
-       ("ghc-vector" ,ghc-vector)))
-    (native-inputs `(("ghc-hunit" ,ghc-hunit)))
+     (list ghc-data-default
+           ghc-fail
+           ghc-pointedlist
+           ghc-regex-base
+           ghc-regex-tdfa
+           ghc-tagsoup
+           ghc-vector))
+    (native-inputs (list ghc-hunit))
     (home-page "https://github.com/fimad/scalpel")
     (synopsis
      "High level web scraping library for Haskell")
@@ -1867,7 +1832,7 @@ non-Haskell dependencies.")
 (define-public ghc-scalpel
   (package
     (name "ghc-scalpel")
-    (version "0.6.0")
+    (version "0.6.2")
     (source
       (origin
         (method url-fetch)
@@ -1876,15 +1841,15 @@ non-Haskell dependencies.")
                "scalpel-" version ".tar.gz"))
         (sha256
          (base32
-          "0jbrfcgljl8kbcwi2zqx1jp3c3dpxrkc94za44x56kcz68n89hlz"))))
+          "04hhvk0yjxha3yg6n9fxivrz97hpjjiiblnj0bvs5myax1ggkjch"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-scalpel-core" ,ghc-scalpel-core)
-       ("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-data-default" ,ghc-data-default)
-       ("ghc-http-client" ,ghc-http-client)
-       ("ghc-http-client-tls" ,ghc-http-client-tls)
-       ("ghc-tagsoup" ,ghc-tagsoup)))
+     (list ghc-scalpel-core
+           ghc-case-insensitive
+           ghc-data-default
+           ghc-http-client
+           ghc-http-client-tls
+           ghc-tagsoup))
     (home-page "https://github.com/fimad/scalpel")
     (synopsis
      "High level web scraping library for Haskell")
@@ -1897,23 +1862,21 @@ declarative and monadic interface.")
 (define-public ghc-sourcemap
   (package
     (name "ghc-sourcemap")
-    (version "0.1.6")
+    (version "0.1.6.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
-             "mirror://hackage/package/sourcemap/sourcemap-"
+             "https://hackage.haskell.org/package/sourcemap/sourcemap-"
              version
              ".tar.gz"))
        (sha256
         (base32
-         "0ynfm44ym8y592wnzdwa0d05dbkffyyg5sm26y5ylzpynk64r85r"))))
+         "0kz8xpcd5syg5s4qa2qq8ylaxjhabj127w42may46vv6i0q1bf8a"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-utf8-string" ,ghc-utf8-string)))
+     (list ghc-aeson ghc-unordered-containers ghc-attoparsec
+           ghc-utf8-string))
     (arguments
      `(#:tests? #f ; FIXME: Fail to compile
        #:cabal-revision
@@ -1931,27 +1894,22 @@ proposed by Google and Mozilla here
 (define-public ghc-language-javascript
   (package
     (name "ghc-language-javascript")
-    (version "0.7.0.0")
+    (version "0.7.1.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
-             "mirror://hackage/package/language-javascript/language-javascript-"
+             "https://hackage.haskell.org/package/language-javascript/language-javascript-"
              version
              ".tar.gz"))
        (sha256
         (base32
-         "15bpqpkjf2y3fk8wff9zlnkpsjc63bnbvhlkxrs9alj0bikq17nk"))))
+         "0s6igb54cxm2jywgc3sq53f52gcsc39wd3g78yisfzvl9jm3d86i"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-blaze-builder" ,ghc-blaze-builder)
-       ("ghc-utf8-string" ,ghc-utf8-string)))
+     (list ghc-blaze-builder ghc-utf8-string))
     (native-inputs
-     `(("ghc-alex" ,ghc-alex)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-happy" ,ghc-happy)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-utf8-light" ,ghc-utf8-light)))
+     (list ghc-alex ghc-quickcheck ghc-happy ghc-hspec ghc-utf8-light))
     (home-page
      "https://github.com/erikd/language-javascript")
     (synopsis "Parser for JavaScript")
@@ -1976,14 +1934,10 @@ as frontend to hjsmin.")
          "0wvygg3rdbxzrmr61a9w6ddv9pfric85ih8hnxyk0ydzn7i59abs"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-aeson-better-errors" ,ghc-aeson-better-errors)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-transformers" ,ghc-transformers)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)))
+     (list ghc-aeson ghc-aeson-better-errors ghc-scientific
+           ghc-transformers ghc-unordered-containers))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+     (list ghc-tasty ghc-tasty-hunit))
     (home-page "https://github.com/hdgarrood/bower-json")
     (synopsis "Read bower.json from Haskell")
     (description
@@ -2004,21 +1958,21 @@ Bower's package manifest file, bower.json.")
         (base32 "1isvi4fahq70lzxfz23as7qzkc01g7kba568l6flrgd0j1984fsy"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-data-default" ,ghc-data-default)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-http-client" ,ghc-http-client)
-       ("ghc-http-client-tls" ,ghc-http-client-tls)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-lens" ,ghc-lens)
-       ("ghc-transformers-base" ,ghc-transformers-base)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("ghc-xml-conduit" ,ghc-xml-conduit)
-       ("ghc-xml-hamlet" ,ghc-xml-hamlet)
-       ("ghc-network" ,ghc-network)
-       ("ghc-network-uri" ,ghc-network-uri)
-       ("ghc-optparse-applicative" ,ghc-optparse-applicative)))
+     (list ghc-case-insensitive
+           ghc-data-default
+           ghc-exceptions
+           ghc-http-client
+           ghc-http-client-tls
+           ghc-http-types
+           ghc-lens
+           ghc-transformers-base
+           ghc-transformers-compat
+           ghc-utf8-string
+           ghc-xml-conduit
+           ghc-xml-hamlet
+           ghc-network
+           ghc-network-uri
+           ghc-optparse-applicative))
     (home-page "http://floss.scru.org/hDAV")
     (synopsis "RFC 4918 WebDAV support")
     (description "This package provides a library for the Web Distributed
@@ -2029,7 +1983,7 @@ Authoring and Versioning (WebDAV) extensions to HTTP as well an executable,
 (define-public ghc-yesod-test
   (package
     (name "ghc-yesod-test")
-    (version "1.6.9")
+    (version "1.6.12")
     (source
      (origin
        (method url-fetch)
@@ -2037,34 +1991,31 @@ Authoring and Versioning (WebDAV) extensions to HTTP as well an executable,
                            "yesod-test/yesod-test-" version ".tar.gz"))
        (sha256
         (base32
-         "0v25lqq7hgd5lggnyfd9kamkzd4126rd7vlhc131n253n4by4yak"))))
+         "1xgy7dzhqjgllqcpyyxs0spdg6vlz2c1sjvni7w7qnsf0ckyw2l8"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-aeson" ,ghc-aeson)
-       ("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-blaze-builder" ,ghc-blaze-builder)
-       ("ghc-blaze-html" ,ghc-blaze-html)
-       ("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-conduit" ,ghc-conduit)
-       ("ghc-cookie" ,ghc-cookie)
-       ("ghc-hspec-core" ,ghc-hspec-core)
-       ("ghc-html-conduit" ,ghc-html-conduit)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-network" ,ghc-network)
-       ("ghc-memory" ,ghc-memory)
-       ("ghc-pretty-show" ,ghc-pretty-show)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-wai" ,ghc-wai)
-       ("ghc-wai-extra" ,ghc-wai-extra)
-       ("ghc-xml-conduit" ,ghc-xml-conduit)
-       ("ghc-xml-types" ,ghc-xml-types)
-       ("ghc-yesod-core" ,ghc-yesod-core)))
+     (list ghc-hunit
+           ghc-aeson
+           ghc-attoparsec
+           ghc-blaze-builder
+           ghc-blaze-html
+           ghc-case-insensitive
+           ghc-conduit
+           ghc-cookie
+           ghc-hspec-core
+           ghc-html-conduit
+           ghc-http-types
+           ghc-network
+           ghc-memory
+           ghc-pretty-show
+           ghc-semigroups
+           ghc-wai
+           ghc-wai-extra
+           ghc-xml-conduit
+           ghc-xml-types
+           ghc-yesod-core))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-yesod-form" ,ghc-yesod-form)
-       ("ghc-unliftio" ,ghc-unliftio)
-       ("ghc-unliftio-core" ,ghc-unliftio-core)))
+     (list ghc-hspec ghc-yesod-form ghc-unliftio ghc-unliftio-core))
     (home-page "https://www.yesodweb.com")
     (synopsis "Integration testing for WAI/Yesod Applications")
     (description "This package's main goal is to encourage integration
@@ -2077,7 +2028,7 @@ HTML responses using CSS selectors.")
 (define-public ghc-wai-app-static
   (package
     (name "ghc-wai-app-static")
-    (version "3.1.7.1")
+    (version "3.1.7.2")
     (source
      (origin
        (method url-fetch)
@@ -2086,33 +2037,30 @@ HTML responses using CSS selectors.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "10k6jb450p89r6dgpnwh428gg0wfw2qbx9n126jkvbchcjr1f4v8"))))
+         "138gd5482psq0wbm8s1az672lksi7vbavq6ayiyjkliivf6xpry8"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-wai" ,ghc-wai)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-unix-compat" ,ghc-unix-compat)
-       ("ghc-old-locale" ,ghc-old-locale)
-       ("ghc-file-embed" ,ghc-file-embed)
-       ("ghc-cryptonite" ,ghc-cryptonite)
-       ("ghc-memory" ,ghc-memory)
-       ("ghc-http-date" ,ghc-http-date)
-       ("ghc-blaze-html" ,ghc-blaze-html)
-       ("ghc-blaze-markup" ,ghc-blaze-markup)
-       ("ghc-mime-types" ,ghc-mime-types)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-zlib" ,ghc-zlib)
-       ("ghc-wai-extra" ,ghc-wai-extra)
-       ("ghc-optparse-applicative" ,ghc-optparse-applicative)
-       ("ghc-warp" ,ghc-warp)))
+     (list ghc-wai
+           ghc-http-types
+           ghc-unix-compat
+           ghc-old-locale
+           ghc-file-embed
+           ghc-cryptonite
+           ghc-memory
+           ghc-http-date
+           ghc-blaze-html
+           ghc-blaze-markup
+           ghc-mime-types
+           ghc-unordered-containers
+           ghc-zlib
+           ghc-wai-extra
+           ghc-optparse-applicative
+           ghc-warp))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-network" ,ghc-network)
-       ("ghc-temporary" ,ghc-temporary)
-       ("ghc-mockery" ,ghc-mockery)))
+     (list ghc-hspec ghc-network ghc-temporary ghc-mockery))
     (arguments
      `(#:cabal-revision
-       ("1" "0bkmml30rzifvb7nxddj3pxczk0kniahra19mjn0qrkzy1n5752p")))
+       ("1" "1q7zwjasysgbp9rdp75535igd7s6mhi2bnl4pzsn6vbyfw3qnsxd")))
     (home-page "https://www.yesodweb.com/book/web-application-interface")
     (synopsis "WAI application for static serving")
     (description "This package provides a Web Application
@@ -2141,10 +2089,9 @@ helper functions and datatypes for use outside of WAI.")
              (substitute* '("test/test-cli.hs" "test/cli/core/runner")
                (("dist-newstyle") "dist")))))))
     (inputs
-     `(("ghc-language-javascript" ,ghc-language-javascript)
-       ("ghc-optparse-applicative" ,ghc-optparse-applicative)))
+     (list ghc-language-javascript ghc-optparse-applicative))
     (native-inputs
-     `(("ghc-extra" ,ghc-extra)))
+     (list ghc-extra))
     (home-page "https://github.com/erikd/hjsmin")
     (synopsis "Haskell implementation of a JavaScript minifier")
     (description "This library provides tools reduce the size of
@@ -2155,7 +2102,7 @@ syntactic elements, without changing the semantics.")
 (define-public ghc-yesod-static
   (package
     (name "ghc-yesod-static")
-    (version "1.6.0.1")
+    (version "1.6.1.0")
     (source
      (origin
        (method url-fetch)
@@ -2163,35 +2110,31 @@ syntactic elements, without changing the semantics.")
                            "yesod-static/yesod-static-" version ".tar.gz"))
        (sha256
         (base32
-         "1jd0ryfr2vyrwasyvbqmc6j4ngv1lgz78w427f169l7gyl1firxb"))))
+         "18f5hm9ncvkzl8bkn39cg841z0k5iqs5w45afsyk9y6k98pjd54p"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-async" ,ghc-async)
-       ("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-base64-bytestring" ,ghc-base64-bytestring)
-       ("ghc-blaze-builder" ,ghc-blaze-builder)
-       ("ghc-conduit" ,ghc-conduit)
-       ("ghc-cryptonite" ,ghc-cryptonite)
-       ("ghc-cryptonite-conduit" ,ghc-cryptonite-conduit)
-       ("ghc-css-text" ,ghc-css-text)
-       ("ghc-data-default" ,ghc-data-default)
-       ("ghc-file-embed" ,ghc-file-embed)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-hjsmin" ,ghc-hjsmin)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-memory" ,ghc-memory)
-       ("ghc-mime-types" ,ghc-mime-types)
-       ("ghc-unix-compat" ,ghc-unix-compat)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-wai" ,ghc-wai)
-       ("ghc-wai-app-static" ,ghc-wai-app-static)
-       ("ghc-yesod-core" ,ghc-yesod-core)))
+     (list ghc-async
+           ghc-attoparsec
+           ghc-base64-bytestring
+           ghc-blaze-builder
+           ghc-conduit
+           ghc-cryptonite
+           ghc-cryptonite-conduit
+           ghc-css-text
+           ghc-data-default
+           ghc-file-embed
+           ghc-hashable
+           ghc-hjsmin
+           ghc-http-types
+           ghc-memory
+           ghc-mime-types
+           ghc-unix-compat
+           ghc-unordered-containers
+           ghc-wai
+           ghc-wai-app-static
+           ghc-yesod-core))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-yesod-test" ,ghc-yesod-test)
-       ("ghc-wai-extra" ,ghc-wai-extra)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-rio" ,ghc-rio)))
+     (list ghc-hspec ghc-yesod-test ghc-wai-extra ghc-hunit ghc-rio))
     (home-page "https://www.yesodweb.com/")
     (synopsis "Static file serving subsite for Yesod")
     (description "This package provides a static file serving subsite
@@ -2213,11 +2156,8 @@ for the Yesod Web Framework.")
          "1ifqgyc1ccig5angh5l1iq7vyms4lvi8wzvysg5dw82nml49n02m"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-wai" ,ghc-wai)
-       ("ghc-warp" ,ghc-warp)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-streaming-commons" ,ghc-streaming-commons)
-       ("ghc-async" ,ghc-async)))
+     (list ghc-wai ghc-warp ghc-http-types ghc-streaming-commons
+           ghc-async))
     (home-page "https://hackage.haskell.org/package/wai-handler-launch")
     (synopsis "Launch a Web application in the default browser")
     (description "This package handles cross-platform Web browser
@@ -2248,25 +2188,44 @@ server no longer receives pings, it shuts down.")
            (lambda _
              (invoke "runhaskell" "Setup.hs" "test" "unit-tests"))))))
     (inputs
-     `(("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-base-unicode-symbols" ,ghc-base-unicode-symbols)
-       ("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-wai" ,ghc-wai)))
+     (list ghc-attoparsec ghc-base-unicode-symbols ghc-case-insensitive
+           ghc-http-types ghc-wai))
     (native-inputs
-     `(("ghc-network" ,ghc-network)
-       ("ghc-wai-websockets" ,ghc-wai-websockets)
-       ("ghc-warp" ,ghc-warp)
-       ("ghc-websockets" ,ghc-websockets)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-wai-extra" ,ghc-wai-extra)
-       ("ghc-wai-websockets" ,ghc-wai-websockets)
-       ("ghc-warp" ,ghc-warp)
-       ("ghc-websockets" ,ghc-websockets)))
+     (list ghc-network
+           ghc-wai-websockets
+           ghc-warp
+           ghc-websockets
+           ghc-tasty
+           ghc-tasty-hunit
+           ghc-wai-extra
+           ghc-wai-websockets
+           ghc-warp
+           ghc-websockets))
     (home-page "https://github.com/larskuhtz/wai-cors")
     (synopsis "Cross-Origin Resource Sharing (CORS) for WAI")
     (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)))
+
+(define-public ghc-network-run
+  (package
+    (name "ghc-network-run")
+    (version "0.2.4")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/network-run/network-run-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32 "0w3dmwk03j4n01xkiq8m4sqa27bskh239mpw7m4ihjmkxqcwc5gl"))))
+    (build-system haskell-build-system)
+    (inputs (list ghc-network))
+    (home-page "https://hackage.haskell.org/package/network-run")
+    (synopsis "Simple network runner library")
+    (description
+     "This package provides a simple network runner library in Haskell.")
+    (license license:bsd-3)))
+
diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index f421458e15..a42baebde6 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -3,7 +3,7 @@
 ;;; Copyright © 2015 Siniša Biđin <sinisa@bidin.eu>
 ;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
 ;;; Copyright © 2015, 2019 Eric Bavier <bavier@member.fsf.org>
-;;; Copyright © 2016, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2016, 2018, 2019, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016, 2017 Nikita <nikita@n0.is>
 ;;; Copyright © 2016, 2019 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2015, 2016, 2017, 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
@@ -29,6 +29,7 @@
 ;;; Copyright © 2020 Carlo Holl <carloholl@gmail.com>
 ;;; Copyright © 2020 Christine Lemmer-Webber <cwebber@dustycloud.org>
 ;;; Copyright © 2021 Alice BRENON <alice.brenon@ens-lyon.fr>
+;;; Copyright © 2021 John Kehayias <john.kehayias@protonmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -49,6 +50,7 @@
   #:use-module (gnu packages)
   #:use-module (gnu packages base)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages databases)
   #:use-module (gnu packages emacs)
   #:use-module (gnu packages gl)
   #:use-module (gnu packages graphviz)
@@ -68,6 +70,7 @@
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages sdl)
   #:use-module (gnu packages serialization)
+  #:use-module (gnu packages tls)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
   #:use-module (guix build-system haskell)
@@ -92,7 +95,7 @@
         (base32
          "18jwswjxwzc9bjiy4ds6hw2a74ki797jmfcifxd2ga4kh7ri1ah9"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-random" ,ghc-random)))
+    (inputs (list ghc-random))
     (home-page "https://github.com/rrnewton/haskell-lockfree/wiki")
     (synopsis "Abstract, parameterized interface to mutable Deques for Haskell")
     (description "This Haskell package provides an abstract interface to
@@ -141,7 +144,7 @@ module for more details.")
 (define-public ghc-active
   (package
     (name "ghc-active")
-    (version "0.2.0.14")
+    (version "0.2.0.15")
     (source
      (origin
        (method url-fetch)
@@ -149,16 +152,13 @@ module for more details.")
                            "active/active-" version ".tar.gz"))
        (sha256
         (base32
-         "0x3b4ln6csa554qls28wbxvclkbdz3yi60i1m0q5ing0cs16fifz"))))
+         "019xr66pahsssqr2hybs88mga4qshv1vmd22j7624wqafqm57d74"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-vector" ,ghc-vector)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-semigroupoids" ,ghc-semigroupoids)
-       ("ghc-lens" ,ghc-lens)
-       ("ghc-linear" ,ghc-linear)))
+     (list ghc-vector ghc-semigroups ghc-semigroupoids ghc-lens
+           ghc-linear))
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-quickcheck))
     (home-page "https://hackage.haskell.org/package/active")
     (synopsis "Abstractions for animation")
     (description "This package defines an @code{Active} abstraction for
@@ -187,20 +187,18 @@ diagrams framework}.")
      `(#:cabal-revision
        ("2" "1yfsjx7dqikg3hvld7i91xfsg5lawmr5980lvfd794sybmgxsf17")))
     (inputs
-     `(("ghc-profunctors" ,ghc-profunctors)
-       ("ghc-comonad" ,ghc-comonad)
-       ("ghc-contravariant" ,ghc-contravariant)
-       ("ghc-distributive" ,ghc-distributive)
-       ("ghc-free" ,ghc-free)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-semigroupoids" ,ghc-semigroupoids)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)
-       ("ghc-void" ,ghc-void)))
-    (native-inputs
-     `(("ghc-generic-deriving" ,ghc-generic-deriving)
-       ("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-profunctors
+           ghc-comonad
+           ghc-contravariant
+           ghc-distributive
+           ghc-free
+           ghc-tagged
+           ghc-semigroupoids
+           ghc-semigroups
+           ghc-transformers-compat
+           ghc-void))
+    (native-inputs
+     (list ghc-generic-deriving ghc-hspec hspec-discover))
     (home-page "https://github.com/ekmett/adjunctions/")
     (synopsis "Adjunctions and representable functors")
     (description "This library provides adjunctions and representable functors
@@ -210,7 +208,7 @@ for Haskell.")
 (define-public ghc-aeson-compat
   (package
     (name "ghc-aeson-compat")
-    (version "0.3.9")
+    (version "0.3.10")
     (source
      (origin
        (method url-fetch)
@@ -219,22 +217,25 @@ for Haskell.")
                            "aeson-compat-" version ".tar.gz"))
        (sha256
         (base32
-         "1j13gykv4ryvmr14w5blz0nnpdb4p0hpa27wahw3mhb1lwdr8hz0"))))
-    (build-system haskell-build-system)
-    (arguments `(#:tests? #f))  ;  FIXME: Tests require QuickCheck >= 2.10
-    (inputs `(("ghc-base-compat" ,ghc-base-compat)
-              ("ghc-aeson" ,ghc-aeson)
-              ("ghc-attoparsec" ,ghc-attoparsec)
-              ("ghc-attoparsec" ,ghc-attoparsec-iso8601)
-              ("ghc-exceptions" ,ghc-exceptions)
-              ("ghc-hashable" ,ghc-hashable)
-              ("ghc-scientific" ,ghc-scientific)
-              ("ghc-time-locale-compat" ,ghc-time-locale-compat)
-              ("ghc-unordered-containers" ,ghc-unordered-containers)
-              ("ghc-vector" ,ghc-vector)
-              ("ghc-tagged" ,ghc-tagged)
-              ("ghc-semigroups" ,ghc-semigroups)
-              ("ghc-nats" ,ghc-nats)))
+         "0ia3qfdpbrzhwwg4ywpdwca0z1m85k081pcz6jh1sx8qjsvcr71w"))))
+    (build-system haskell-build-system)
+    (inputs (list ghc-base-compat
+                  ghc-aeson
+                  ghc-attoparsec
+                  ghc-attoparsec-iso8601
+                  ghc-hashable
+                  ghc-scientific
+                  ghc-time-locale-compat
+                  ghc-unordered-containers
+                  ghc-vector
+                  ghc-tagged))
+    (native-inputs
+     (list ghc-tasty
+           ghc-tasty-hunit
+           ghc-tasty-quickcheck
+           ghc-quickcheck
+           ghc-quickcheck-instances
+           ghc-base-orphans))
     (home-page "https://github.com/phadej/aeson-compat")
     (synopsis "Compatibility layer for ghc-aeson")
     (description "This Haskell package provides compatibility layer for
@@ -244,7 +245,7 @@ ghc-aeson.")
 (define-public ghc-aeson-diff
   (package
     (name "ghc-aeson-diff")
-    (version "1.1.0.7")
+    (version "1.1.0.9")
     (source
      (origin
        (method url-fetch)
@@ -252,26 +253,26 @@ ghc-aeson.")
                            "aeson-diff/aeson-diff-" version ".tar.gz"))
        (sha256
         (base32
-         "01d48pd7d1mb9cd5yxfajln8rmjdjq8ch91s0lav4qw1azv6vp2r"))))
+         "18bm4qyjjwgrr6dxc4y0vai0z6qgrh2lcqb4jrr4xqs4cxrlwr92"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-edit-distance-vector" ,ghc-edit-distance-vector)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-optparse-applicative" ,ghc-optparse-applicative)))
-    (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-quickcheck-instances" ,ghc-quickcheck-instances)
-       ("ghc-glob" ,ghc-glob)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-quickcheck-instances" ,ghc-quickcheck-instances)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-doctest" ,ghc-doctest)
-       ("hlint" ,hlint)))
+     (list ghc-aeson
+           ghc-edit-distance-vector
+           ghc-hashable
+           ghc-scientific
+           ghc-unordered-containers
+           ghc-vector
+           ghc-semigroups
+           ghc-optparse-applicative))
+    (native-inputs
+     (list ghc-quickcheck
+           ghc-quickcheck-instances
+           ghc-glob
+           ghc-quickcheck
+           ghc-quickcheck-instances
+           ghc-quickcheck
+           ghc-doctest
+           hlint))
     (home-page "https://github.com/thsutton/aeson-diff")
     (synopsis "Extract and apply patches to JSON documents")
     (description "This is a small library for working with changes to JSON
@@ -283,7 +284,7 @@ systems.")
 (define-public ghc-alex
   (package
     (name "ghc-alex")
-    (version "3.2.4")
+    (version "3.2.6")
     (source
      (origin
        (method url-fetch)
@@ -293,7 +294,7 @@ systems.")
              ".tar.gz"))
        (sha256
         (base32
-         "0cpjixgsr0b2x4s6hz4aa6gnmjw9i7xd9nlfi8m37zqlidq4v3nm"))))
+         "042lrkn0dbpjn5ivj6j26jzb1fwrj8c1aj18ykxja89isg0hiali"))))
     (build-system haskell-build-system)
     (arguments
      `(#:phases
@@ -304,9 +305,9 @@ systems.")
                                            (getenv "PATH")))
              (setenv "alex_datadir" (string-append (getcwd) "/data"))
              #t)))))
-    (inputs `(("ghc-quickcheck" ,ghc-quickcheck)))
+    (inputs (list ghc-quickcheck))
     (native-inputs
-     `(("which" ,which)))
+     (list which))
     (home-page "https://www.haskell.org/alex/")
     (synopsis
      "Tool for generating lexical analysers in Haskell")
@@ -335,10 +336,9 @@ tool lex or flex for C/C++.")
     (arguments
      `(#:extra-directories ("alsa-lib")))
     (inputs
-     `(("ghc-extensible-exceptions" ,ghc-extensible-exceptions)
-       ("alsa-lib" ,alsa-lib)))
+     (list ghc-extensible-exceptions alsa-lib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://wiki.haskell.org/ALSA")
     (synopsis "Binding to the ALSA Library API (Exceptions)")
     (description "This package provides access to ALSA infrastructure, that is
@@ -360,8 +360,8 @@ needed by both alsa-seq and alsa-pcm.")
       (base32
        "00ny2p3276jilidjs44npc8zmbhynz3f2lpmlwwl6swwx5yijsnb"))))
    (build-system haskell-build-system)
-   (inputs `(("ghc-alsa-core" ,ghc-alsa-core)))
-   (native-inputs `(("ghc-c2hs" ,ghc-c2hs)))
+   (inputs (list ghc-alsa-core))
+   (native-inputs (list ghc-c2hs))
    (home-page "https://github.com/ttuegel/alsa-mixer")
    (synopsis "Bindings to the ALSA simple mixer API")
    (description
@@ -396,7 +396,7 @@ a variety of ways.")
 (define-public ghc-ansi-terminal
   (package
     (name "ghc-ansi-terminal")
-    (version "0.9.1")
+    (version "0.11")
     (source
      (origin
        (method url-fetch)
@@ -406,10 +406,10 @@ a variety of ways.")
              ".tar.gz"))
        (sha256
         (base32
-         "1yr0ld0kqns3w3j9gl62bdwshvyazidx4dv1qkvq19ivnf08w23l"))))
+         "14rp62c7y79n9dmmi7m0l9n3mcq6dh331b4yyyrivm5da6g1nqf6"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-colour" ,ghc-colour)))
+     (list ghc-colour))
     (home-page "https://github.com/feuerbach/ansi-terminal")
     (synopsis "ANSI terminal support for Haskell")
     (description "This package provides ANSI terminal support for Haskell.  It
@@ -431,8 +431,11 @@ cursor, and changing the title.")
         (base32
          "1b2fg8px98dzbaqyns10kvs8kn6cl1hdq5wb9saz40izrpkyicm7"))))
     (build-system haskell-build-system)
+    (arguments
+     `(#:cabal-revision
+       ("2" "1xrv66v5hqchjhj8a0g3awy1qpsswk2jqb4w4yh3mm1py5s0dlr0")))
     (inputs
-     `(("ghc-ansi-terminal" ,ghc-ansi-terminal)))
+     (list ghc-ansi-terminal))
     (home-page "https://github.com/ekmett/ansi-wl-pprint")
     (synopsis "Wadler/Leijen Pretty Printer for colored ANSI terminal output")
     (description "This is a pretty printing library based on Wadler's paper
@@ -465,7 +468,7 @@ style.")
 (define-public ghc-assoc
   (package
     (name "ghc-assoc")
-    (version "1.0.1")
+    (version "1.0.2")
     (source
      (origin
        (method url-fetch)
@@ -475,11 +478,10 @@ style.")
              ".tar.gz"))
        (sha256
         (base32
-         "1m9n4vp190bvn2wcrd4ggfwa9pi93jp0zgx02mdgywn2zfidw020"))))
+         "0kqlizznjy94fm8zr1ng633yxbinjff7cnsiaqs7m33ix338v66q"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-bifunctors" ,ghc-bifunctors)
-       ("ghc-tagged" ,ghc-tagged)))
+     (list ghc-bifunctors ghc-tagged))
     (home-page
      "http://hackage.haskell.org/package/assoc")
     (synopsis
@@ -493,7 +495,7 @@ similar operations (e.g. @code{Either}, @code{These}).")
 (define-public ghc-async
   (package
     (name "ghc-async")
-    (version "2.2.2")
+    (version "2.2.4")
     (source
      (origin
        (method url-fetch)
@@ -503,13 +505,12 @@ similar operations (e.g. @code{Either}, @code{These}).")
              ".tar.gz"))
        (sha256
         (base32
-         "1zxvfcyy4sg8lmzphi5dgnavksj5pav6rbvd5kc48lf4hanb2jjb"))))
+         "09d7w3krfhnmf9dp6yffa9wykinhw541wibnjgnlyv77w1dzhka8"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-hashable" ,ghc-hashable)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)))
+     (list ghc-hashable))
+    (native-inputs
+     (list ghc-hunit ghc-test-framework ghc-test-framework-hunit))
     (home-page "https://github.com/simonmar/async")
     (synopsis "Library to run IO operations asynchronously")
     (description "Async provides a library to run IO operations
@@ -521,7 +522,7 @@ will eventually deliver a value of type @code{a}.")
 (define-public ghc-atomic-primops
   (package
     (name "ghc-atomic-primops")
-    (version "0.8.3")
+    (version "0.8.4")
     (source
      (origin
        (method url-fetch)
@@ -529,9 +530,9 @@ will eventually deliver a value of type @code{a}.")
                            "/atomic-primops-" version ".tar.gz"))
        (sha256
         (base32
-         "03n5dmyplrqgbyf8dr91izkxci7gkl3i3fnp82i5ld869zrgjfh0"))))
+         "0gidqyk913vhcz3q4vnpadx3vkkrwb66rqhsxvdba8g2p5z63a12"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-primitive" ,ghc-primitive)))
+    (inputs (list ghc-primitive))
     (home-page "https://github.com/rrnewton/haskell-lockfree/wiki")
     (synopsis "Safe approach to CAS and other atomic ops")
     (description
@@ -556,13 +557,9 @@ This library provides a safer method based on the concept of @code{Ticket}s.")
          "1xs3shwnlj8hmnm3q6jc8nv78z0481i5n4hrqqdmbpx8grvlnqyl"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-temporary" ,ghc-temporary)
-       ("ghc-unix-compat" ,ghc-unix-compat)))
+     (list ghc-temporary ghc-unix-compat))
     (native-inputs
-     `(("ghc-temporary" ,ghc-temporary)
-       ("ghc-unix-compat" ,ghc-unix-compat)
-       ("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-temporary ghc-unix-compat ghc-hspec hspec-discover))
     (home-page "https://github.com/stackbuilders/atomic-write")
     (synopsis "Atomically write to a file")
     (description
@@ -591,7 +588,7 @@ permissions while atomically writing to a file.")
 (define-public ghc-attoparsec
   (package
     (name "ghc-attoparsec")
-    (version "0.13.2.3")
+    (version "0.13.2.5")
     (source
      (origin
        (method url-fetch)
@@ -601,7 +598,7 @@ permissions while atomically writing to a file.")
              ".tar.gz"))
        (sha256
         (base32
-         "1ngjn9h5n0vyki0m2jir4mg85875ysswy9hznpmj1r856mqwc6ix"))))
+         "0vv88m5m7ynjrg114psp4j4s69f1a5va3bvn293vymqrma7g7q11"))))
     (build-system haskell-build-system)
     (arguments
      `(#:phases
@@ -617,13 +614,10 @@ permissions while atomically writing to a file.")
                ((", testProperty \"satisfyWith\" satisfyWith")
                 "")))))))
     (inputs
-     `(("ghc-scientific" ,ghc-scientific)))
+     (list ghc-scientific))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-quickcheck-unicode" ,ghc-quickcheck-unicode)
-       ("ghc-vector" ,ghc-vector)))
+     (list ghc-tasty ghc-tasty-quickcheck ghc-quickcheck
+           ghc-quickcheck-unicode ghc-vector))
     (home-page "https://github.com/bos/attoparsec")
     (synopsis "Fast combinator parsing for bytestrings and text")
     (description "This library provides a fast parser combinator library,
@@ -644,7 +638,7 @@ complicated text/binary file formats.")
 (define-public ghc-attoparsec-iso8601
   (package
     (name "ghc-attoparsec-iso8601")
-    (version "1.0.1.0")
+    (version "1.0.2.0")
     (source
      (origin
        (method url-fetch)
@@ -653,13 +647,12 @@ complicated text/binary file formats.")
                            "attoparsec-iso8601-" version ".tar.gz"))
        (sha256
         (base32
-         "0hj10w15qp2z5bz2v4xahhmbgzclpyfi5l2sv97wqycysg9gp7s9"))))
+         "162gc101mwhmjbfhhv1wm3yvk2h4ra34wpw5x87735cfqxvjv582"))))
     (build-system haskell-build-system)
     (arguments
      `(#:cabal-revision
-       ("1" "1rjhscmczgs1bwyqx7lvkm8py3ylxjd2797mrzgnq60fvm292750")))
-    (inputs `(("ghc-attoparsec" ,ghc-attoparsec)
-              ("ghc-base-compat" ,ghc-base-compat)))
+       ("2" "18557xy5gvkhj0sb35wwxmhqirkiqrkwm0y0pqygsr0aimccs5zm")))
+    (inputs (list ghc-attoparsec ghc-base-compat-batteries ghc-time-compat))
     (home-page "https://github.com/bos/aeson")
     (synopsis "Parse ISO 8601 dates")
     (description "Haskell library for parsing of ISO 8601 dates, originally
@@ -682,10 +675,7 @@ from aeson.")
          "1i36xc2i34aync8271x3pv515l3zb53i518dybn8ghqkhzf27q7l"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-retry" ,ghc-retry)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-hspec ghc-hunit ghc-retry hspec-discover))
     (home-page "https://github.com/yesodweb/wai")
     (synopsis "Efficiently run periodic, on-demand actions")
     (description "This library provides mechanisms to efficiently run
@@ -695,52 +685,64 @@ periodic, on-demand actions in Haskell.")
 (define-public ghc-aws
   (package
     (name "ghc-aws")
-    (version "0.20")
+    (version "0.22")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://hackage.haskell.org/package/"
                            "aws-" version "/aws-" version ".tar.gz"))
        (sha256 (base32
-                "0pwpabmypi1w8rni9qfwabgn95jks4h8dyw6889mn8xzsrhdhyf0"))))
-    (build-system haskell-build-system)
-    (arguments `(#:tests? #f)) ; Tests require AWS credentials.
-    (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-base16-bytestring" ,ghc-base16-bytestring)
-       ("ghc-base64-bytestring" ,ghc-base64-bytestring)
-       ("ghc-blaze-builder" ,ghc-blaze-builder)
-       ("ghc-byteable" ,ghc-byteable)
-       ("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-cereal" ,ghc-cereal)
-       ("ghc-conduit" ,ghc-conduit)
-       ("ghc-conduit-extra" ,ghc-conduit-extra)
-       ("ghc-cryptonite" ,ghc-cryptonite)
-       ("ghc-data-default" ,ghc-data-default)
-       ("ghc-http-conduit" ,ghc-http-conduit)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-lifted-base" ,ghc-lifted-base)
-       ("ghc-monad-control" ,ghc-monad-control)
-       ("ghc-network" ,ghc-network)
-       ("ghc-old-locale" ,ghc-old-locale)
-       ("ghc-safe" ,ghc-safe)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-xml-conduit" ,ghc-xml-conduit)))
-    (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-errors" ,ghc-errors)
-       ("ghc-http-client" ,ghc-http-client)
-       ("ghc-http-client-tls" ,ghc-http-client-tls)
-       ("ghc-quickcheck-instances" ,ghc-quickcheck-instances)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-conduit-combinators" ,ghc-conduit-combinators)))
+                "1l3f94mpih7slz37ikyjkyrwvlf110w87997d8sbnbd8glwlcb8r"))))
+    (build-system haskell-build-system)
+    (arguments
+     `(#:tests? #f ; Tests require AWS credentials.
+       #:configure-flags (list "-fNetworkBSD") ; Use network-bsd.
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'update-constraints
+           (lambda _
+             (substitute* "aws.cabal"
+               (("(base16-bytestring)\\s+==\\s+0\\.1\\.\\*" all dep)
+                dep)
+               (("(base64-bytestring)\\s+==\\s+1\\.0\\.\\*" all dep)
+                dep)))))))
+    (inputs
+     (list ghc-aeson
+           ghc-attoparsec
+           ghc-base16-bytestring
+           ghc-base64-bytestring
+           ghc-blaze-builder
+           ghc-byteable
+           ghc-case-insensitive
+           ghc-cereal
+           ghc-conduit
+           ghc-conduit-extra
+           ghc-cryptonite
+           ghc-data-default
+           ghc-http-conduit
+           ghc-http-types
+           ghc-lifted-base
+           ghc-monad-control
+           ghc-network
+           ghc-network-bsd
+           ghc-old-locale
+           ghc-safe
+           ghc-scientific
+           ghc-tagged
+           ghc-unordered-containers
+           ghc-utf8-string
+           ghc-vector
+           ghc-xml-conduit))
+    (native-inputs
+     (list ghc-quickcheck
+           ghc-errors
+           ghc-http-client
+           ghc-http-client-tls
+           ghc-quickcheck-instances
+           ghc-tasty
+           ghc-tasty-quickcheck
+           ghc-tasty-hunit
+           ghc-conduit-combinators))
     (home-page "https://github.com/aristidb/aws")
     (synopsis "Amazon Web Services for Haskell")
     (description "This package attempts to provide support for using
@@ -752,7 +754,7 @@ Web Services.")
 (define-public ghc-base16-bytestring
   (package
     (name "ghc-base16-bytestring")
-    (version "0.1.1.6")
+    (version "1.0.1.0")
     (source
      (origin
        (method url-fetch)
@@ -761,8 +763,11 @@ Web Services.")
              "base16-bytestring-" version ".tar.gz"))
        (sha256
         (base32
-         "0jf40m3yijqw6wd1rwwvviww46fasphaay9m9rgqyhf5aahnbzjs"))))
+         "1ynnplw8iz3v5ld0xxgpxgasb0hg62x62wxxf5lx6lxyb15hmiy0"))))
     (build-system haskell-build-system)
+    (native-inputs
+     (list ghc-hunit ghc-quickcheck ghc-test-framework
+           ghc-test-framework-hunit ghc-test-framework-quickcheck2))
     (home-page "https://github.com/bos/base16-bytestring")
     (synopsis "Fast base16 (hex) encoding and decoding for ByteStrings")
     (description
@@ -773,7 +778,7 @@ data quickly and efficiently, using the ByteString type.")
 (define-public ghc-base64-bytestring
   (package
     (name "ghc-base64-bytestring")
-    (version "1.0.0.2")
+    (version "1.1.0.0")
     (source
      (origin
        (method url-fetch)
@@ -782,7 +787,7 @@ data quickly and efficiently, using the ByteString type.")
              version
              ".tar.gz"))
        (sha256
-        (base32 "13305brzlac24pifiqd5a2z10c6k6amhpdy9cc0z5ryrkgnm8dhr"))))
+        (base32 "1adcnkcx4nh3d59k94bkndj0wkgbvchz576qwlpaa7148a86q391"))))
     (build-system haskell-build-system)
     (arguments `(#:tests? #f))         ; FIXME: testing libraries are missing.
     (home-page "https://github.com/bos/base64-bytestring")
@@ -794,7 +799,7 @@ Haskell @code{ByteString}s.")
 (define-public ghc-base-compat
   (package
     (name "ghc-base-compat")
-    (version "0.10.5")
+    (version "0.11.2")
     (source
      (origin
        (method url-fetch)
@@ -804,13 +809,11 @@ Haskell @code{ByteString}s.")
              ".tar.gz"))
        (sha256
         (base32
-         "0hgvlqcr852hfp52jp99snhbj550mvxxpi8qn15d8ml9aqhyl2lr"))))
+         "1nyvkaij4m01jndw72xl8931czz1xp6jpnynpajabys2ahabb9jk"))))
     (build-system haskell-build-system)
     (outputs '("out" "static" "doc"))
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-quickcheck ghc-hspec hspec-discover))
     (home-page "https://hackage.haskell.org/package/base-compat")
     (synopsis "Haskell compiler compatibility library")
     (description "This library provides functions available in later versions
@@ -821,7 +824,7 @@ pragmas in your code.")
 (define-public ghc-base-compat-batteries
   (package
     (name "ghc-base-compat-batteries")
-    (version "0.10.5")
+    (version "0.11.2")
     (source
      (origin
        (method url-fetch)
@@ -830,17 +833,12 @@ pragmas in your code.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "1vkhc639vqiv5p39jn1v312z32i7yk5q2lf0ap4jxl1v8p8wyp8p"))))
+         "08rh9nlm9ir28fm42xim06ga8qwdqdcvkbb5ckz99bwnmajndq1i"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-base-compat" ,ghc-base-compat)))
+     (list ghc-base-compat))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("hspec-discover" ,hspec-discover)))
-    (arguments
-     `(#:cabal-revision
-       ("1" "15sn2qc8k0hxbb2nai341kkrci98hlhzcj2ci087m0zxcg5jcdbp")))
+     (list ghc-hspec ghc-quickcheck hspec-discover))
     (home-page "https://hackage.haskell.org/package/base-compat-batteries")
     (synopsis "base-compat with extra batteries")
     (description "This library provides functions available in later
@@ -854,7 +852,7 @@ than @code{base-compat}, which has no dependencies.")
 (define-public ghc-basement
   (package
     (name "ghc-basement")
-    (version "0.0.11")
+    (version "0.0.12")
     (source
      (origin
        (method url-fetch)
@@ -862,7 +860,7 @@ than @code{base-compat}, which has no dependencies.")
                            "basement/basement-" version ".tar.gz"))
        (sha256
         (base32
-         "0srlws74yiraqaapgcjd9p5d1fwb3zr9swcz74jpjm55fls2nn37"))))
+         "12zsnxkgv86im2prslk6ddhy0zwpawwjc1h4ff63kpxp2xdl7i2k"))))
     (build-system haskell-build-system)
     (outputs '("out" "static" "doc"))
     (home-page "https://github.com/haskell-foundation/foundation")
@@ -875,7 +873,7 @@ packages.")
 (define-public ghc-base-orphans
   (package
     (name "ghc-base-orphans")
-    (version "0.8.1")
+    (version "0.8.5")
     (source
      (origin
        (method url-fetch)
@@ -885,12 +883,10 @@ packages.")
              ".tar.gz"))
        (sha256
         (base32
-         "1nwr9av27i9p72k0sn96mw3ywdczw65dy5gd5wxpabhhxlxdcas4"))))
+         "1lw1jhrrsdq7x9wr2bwkxq9mscidcad0n30kh9gfk8kgifl5xh9k"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-quickcheck ghc-hspec hspec-discover))
     (home-page "https://hackage.haskell.org/package/base-orphans")
     (synopsis "Orphan instances for backwards compatibility")
     (description "This package defines orphan instances that mimic instances
@@ -900,7 +896,7 @@ available in later versions of base to a wider (older) range of compilers.")
 (define-public ghc-base-prelude
   (package
     (name "ghc-base-prelude")
-    (version "1.3")
+    (version "1.4")
     (source
      (origin
        (method url-fetch)
@@ -909,7 +905,7 @@ available in later versions of base to a wider (older) range of compilers.")
                            "base-prelude-" version ".tar.gz"))
        (sha256
         (base32
-         "1zk728sd09hh2r4xwz4lazsrrgg5cshydn64932sm0vckplndk73"))))
+         "0nn5v2y9kl7i3n21250m7cvn55lvkmzj22wx6q4kaag5ycwwczrs"))))
     (build-system haskell-build-system)
     (outputs '("out" "static" "doc"))
     (home-page "https://github.com/nikita-volkov/base-prelude")
@@ -934,17 +930,17 @@ the bounds of \"base\" as well.")
 (define-public ghc-base-unicode-symbols
   (package
     (name "ghc-base-unicode-symbols")
-    (version "0.2.3")
+    (version "0.2.4.2")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
-             "mirror://hackage/package/base-unicode-symbols/base-unicode-symbols-"
+             "https://hackage.haskell.org/package/base-unicode-symbols/base-unicode-symbols-"
              version
              ".tar.gz"))
        (sha256
         (base32
-         "1ia6li7qjg1zkak4gf6mnbshw45mq9bfjr0jch58ds0lscmvwyzf"))))
+         "0qkhp4ybmx4nbqqkrmw3hkm47bv61i2wpi20qb09wvk10g2dcr23"))))
     (build-system haskell-build-system)
     (home-page "https://wiki.haskell.org/Unicode-symbols")
     (synopsis "Unicode alternatives for common functions and operators")
@@ -974,10 +970,7 @@ stand for certain ASCII character sequences, i.e. → instead of @code{->},
          "0yckmnvm6i4vw0mykj4fzl4ldsf67v8d2h0vp1bakyj84n4myx8h"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-hashable" ,ghc-hashable)
-       ("ghc-unordered-containers"
-        ,ghc-unordered-containers)
-       ("ghc-vector" ,ghc-vector)))
+     (list ghc-hashable ghc-unordered-containers ghc-vector))
     (home-page "https://github.com/snoyberg/basic-prelude#readme")
     (synopsis "Enhanced core prelude; a common foundation for alternate preludes")
     (description
@@ -1012,10 +1005,9 @@ wishing to create a new prelude should use CorePrelude.")
         (base32 "0znv0y3b3zm5jvhlvj5f5s7y93db67j9yd59w1bnrw2pqv30gqaq"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-transformers-compat" ,ghc-transformers-compat)))
+     (list ghc-transformers-compat))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-hspec ghc-quickcheck))
     (home-page "https://hackage.haskell.org/package/bencode")
     (synopsis "Parsers and printers for bencoded data")
     (description
@@ -1027,7 +1019,7 @@ storing and transmitting loosely structured data.")
 (define-public ghc-bifunctors
   (package
     (name "ghc-bifunctors")
-    (version "5.5.5")
+    (version "5.5.11")
     (source
      (origin
        (method url-fetch)
@@ -1037,19 +1029,17 @@ storing and transmitting loosely structured data.")
              ".tar.gz"))
        (sha256
         (base32
-         "0rn47q8dzv0g1fyams99p4py6q0asxdc50q9k0nj497brk738xcb"))))
+         "070964w7gz578379lyj6xvdbcf367csmz22cryarjr5bz9r9csrb"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-base-orphans" ,ghc-base-orphans)
-       ("ghc-comonad" ,ghc-comonad)
-       ("ghc-th-abstraction" ,ghc-th-abstraction)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-semigroups" ,ghc-semigroups)))
+     (list ghc-base-orphans
+           ghc-comonad
+           ghc-th-abstraction
+           ghc-transformers-compat
+           ghc-tagged
+           ghc-semigroups))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-hspec hspec-discover ghc-quickcheck))
     (home-page "https://github.com/ekmett/bifunctors/")
     (synopsis "Bifunctors for Haskell")
     (description "This package provides bifunctors for Haskell.")
@@ -1104,7 +1094,7 @@ functions.")
 (define-public ghc-blaze-builder
   (package
     (name "ghc-blaze-builder")
-    (version "0.4.1.0")
+    (version "0.4.2.2")
     (source
      (origin
        (method url-fetch)
@@ -1114,11 +1104,17 @@ functions.")
              ".tar.gz"))
        (sha256
         (base32
-         "05681dih2d8s96an945wkbwl05w8ddbcfx8n3r3ck79ydyb8pz4i"))))
+         "0rxg6vjr0ji6g1nngrqpl4k1q9w66fwkhld9cqm5yfhx0a69kp1c"))))
     (build-system haskell-build-system)
-    (arguments `(#:tests? #f))          ; FIXME: Missing test libraries.
     (inputs
-     `(("ghc-utf8-string" ,ghc-utf8-string)))
+     (list ghc-bytestring-builder ghc-semigroups))
+    (native-inputs
+     (list ghc-hunit
+           ghc-quickcheck
+           ghc-test-framework
+           ghc-test-framework-hunit
+           ghc-test-framework-quickcheck2
+           ghc-utf8-string))
     (home-page "https://github.com/lpsmith/blaze-builder")
     (synopsis "Efficient buffered output")
     (description "This library provides an implementation of the older
@@ -1131,7 +1127,7 @@ interoperate with code that uses the new implementation.")
 (define-public ghc-blaze-markup
   (package
     (name "ghc-blaze-markup")
-    (version "0.8.2.3")
+    (version "0.8.2.8")
     (source
      (origin
        (method url-fetch)
@@ -1140,7 +1136,7 @@ interoperate with code that uses the new implementation.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "1g9m7ansj7fdyzhz1wqkbzn5amjm50vjgjdwkbjc5qqhagnv1y3j"))))
+         "0jd30wg5yz0a97b36zwqg4hv8faifza1n2gys3l1p3fwf9l3zz23"))))
     (build-system haskell-build-system)
     (arguments
      `(#:phases
@@ -1151,13 +1147,10 @@ interoperate with code that uses the new implementation.")
                (("tasty            >= 1\\.0  && < 1\\.1")
                 "tasty            >= 1.0  && < 1.2")))))))
     (inputs
-     `(("ghc-blaze-builder" ,ghc-blaze-builder)))
+     (list ghc-blaze-builder))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+     (list ghc-hunit ghc-quickcheck ghc-tasty ghc-tasty-hunit
+           ghc-tasty-quickcheck))
     (home-page "https://jaspervdj.be/blaze")
     (synopsis "Fast markup combinator library for Haskell")
     (description "This library provides core modules of a markup combinator
@@ -1178,10 +1171,8 @@ library for Haskell.")
          "03vrmncg1c10a2wcg5skq30m1yiknn7nwxz2gblyyfaxglshspkc"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-random" ,ghc-random)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)))
+     (list ghc-quickcheck ghc-random ghc-test-framework
+           ghc-test-framework-quickcheck2))
     (home-page "https://github.com/bos/bloomfilter")
     (synopsis "Pure and impure Bloom filter implementations")
     (description "This package provides both mutable and immutable Bloom
@@ -1202,8 +1193,7 @@ interface.")
         (base32 "1hsnmw95i58d4bkpxby3ddsj1cawypw4mdyb18m393s5i8p7iq9q"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-split" ,ghc-split)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-split ghc-quickcheck))
     (home-page "https://hackage.haskell.org/package/boxes")
     (synopsis "2D text pretty-printing library")
     (description
@@ -1258,7 +1248,7 @@ system.")
 (define-public ghc-bytes
   (package
    (name "ghc-bytes")
-   (version "0.15.5")
+   (version "0.17.1")
    (source
     (origin
      (method url-fetch)
@@ -1269,16 +1259,15 @@ system.")
      (file-name (string-append name "-" version ".tar.gz"))
      (sha256
       (base32
-       "063il2vrn0p88r9gzndh4ijs0mxj37khkc9ym9bqdsv7ngk3b683"))))
+       "1qmps8vvg98wfm9xm734hwzi56bsk8r1zc6vx20rlhc79krv5s9s"))))
    (build-system haskell-build-system)
-   (inputs `(("ghc-cereal" ,ghc-cereal)
-             ("cabal-doctest" ,cabal-doctest)
-             ("ghc-doctest" ,ghc-doctest)
-             ("ghc-scientific" ,ghc-scientific)
-             ("ghc-transformers-compat" ,ghc-transformers-compat)
-             ("ghc-unordered-containers" ,ghc-unordered-containers)
-             ("ghc-void" ,ghc-void)
-             ("ghc-vector" ,ghc-vector)))
+   (inputs (list ghc-binary-orphans
+                 ghc-cereal
+                 ghc-hashable
+                 ghc-scientific
+                 ghc-transformers-compat
+                 ghc-unordered-containers
+                 ghc-void))
    (synopsis "Serialization between @code{binary} and @code{cereal}")
    (description "This package provides a simple compatibility shim that lets
 you work with both @code{binary} and @code{cereal} with one chunk of
@@ -1324,20 +1313,10 @@ Compatibility package for older packages.")
     (build-system haskell-build-system)
     (arguments
      `(#:cabal-revision
-       ("1" "0x11aj6w1lijh84jcdq1qgyvdnc7i9ivbyq4wf9rxicg57viisz9")
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'update-constraints
-           (lambda _
-             (substitute* "bytestring-handle.cabal"
-               (("QuickCheck >= 2\\.1\\.2 && < 2\\.11")
-                "QuickCheck >= 2.1.2 && < 2.14")))))))
-    (inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)))
+       ("2" "1x1sy3dz2ph9v6jk22wmcv5gk2bka5fv4s68i8q0j9m9pk085w37")))
+    (inputs
+     (list ghc-hunit ghc-quickcheck ghc-test-framework
+           ghc-test-framework-hunit ghc-test-framework-quickcheck2))
     (home-page "https://hub.darcs.net/ganesh/bytestring-handle")
     (synopsis "ByteString-backed Handles")
     (description "ByteString-backed Handles") ; There is no description
@@ -1346,7 +1325,7 @@ Compatibility package for older packages.")
 (define-public ghc-bytestring-lexing
   (package
     (name "ghc-bytestring-lexing")
-    (version "0.5.0.2")
+    (version "0.5.0.7")
     (source
      (origin
        (method url-fetch)
@@ -1355,8 +1334,10 @@ Compatibility package for older packages.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "0wrzniawhgpphc6yx1v972gyqxdbv0pizaz9bafahrshyb9svy81"))))
+         "1p7i2haix4m11an3djaq65cnd293hzwqy4cd2i8jxzcl248pk6iy"))))
     (build-system haskell-build-system)
+    (native-inputs
+     (list ghc-tasty ghc-tasty-quickcheck ghc-tasty-smallcheck))
     (home-page "http://code.haskell.org/~wren/")
     (synopsis "Parse and produce literals from strict or lazy bytestrings")
     (description
@@ -1378,13 +1359,10 @@ from strict or lazy bytestrings.")
          "0a21zin5plsl37hkxh2jv8cxwyjrbs2fy7n5cyrzgdaa7lmp6b7b"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-bindings-dsl" ,ghc-bindings-dsl)
-       ("ghc-conduit" ,ghc-conduit)
-       ("ghc-data-default-class" ,ghc-data-default-class)
-       ("ghc-resourcet" ,ghc-resourcet)))
+     (list ghc-bindings-dsl ghc-conduit ghc-data-default-class
+           ghc-resourcet))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-random" ,ghc-random)))
+     (list ghc-hspec ghc-random))
     (home-page "https://github.com/snoyberg/bzlib-conduit")
     (synopsis "Streaming compression/decompression via conduits")
     (description
@@ -1395,7 +1373,7 @@ streaming compression and decompression.")
 (define-public ghc-c2hs
   (package
     (name "ghc-c2hs")
-    (version "0.28.6")
+    (version "0.28.8")
     (source
      (origin
        (method url-fetch)
@@ -1405,19 +1383,24 @@ streaming compression and decompression.")
              ".tar.gz"))
        (sha256
         (base32
-         "1nplgxfin139x12sb656f5870rpdclrhzi8mq8pry035qld15pci"))))
+         "0k482wv94jbpwd96a2c2lc7qz9k8072slx7l7943472nzk7k41ir"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-language-c" ,ghc-language-c)
-       ("ghc-dlist" ,ghc-dlist)))
+     (list ghc-language-c ghc-dlist))
     (native-inputs
-     `(("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-shelly" ,ghc-shelly)))
+     (list ghc-test-framework ghc-test-framework-hunit ghc-hunit
+           ghc-shelly))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
+         ;; The tarball on Hackage does not ship these tests. See
+         ;; https://github.com/haskell/c2hs/issues/269
+         (add-after 'unpack 'disable-tests
+           (lambda _
+             (substitute* "tests/test-bugs.hs"
+               ((", testCase \"Issue #242\" issue242") ""))
+             (substitute* "tests/test-system.hs"
+               ((", testCase \"Interruptible\" test_interruptible") ""))))
          (add-before 'check 'set-cc
            ;; add a cc executable in the path, needed for some tests to pass
            (lambda* (#:key inputs #:allow-other-keys)
@@ -1447,7 +1430,7 @@ imported with the correct Haskell types.")
 (define-public ghc-cairo
   (package
     (name "ghc-cairo")
-    (version "0.13.5.0")
+    (version "0.13.8.1")
     (source
      (origin
        (method url-fetch)
@@ -1455,62 +1438,12 @@ imported with the correct Haskell types.")
                            "cairo-" version ".tar.gz"))
        (sha256
         (base32
-         "1wxylv4d8120ri0vgar168ikqa9m6533ipdwi38qlmxmw20ws2j2"))))
+         "1hpkyhrlg1d24s34kq6d379z8l8fvznm98wpq37haqjma4nl25hk"))))
     (build-system haskell-build-system)
-    (arguments
-     `(#:modules ((guix build haskell-build-system)
-                  (guix build utils)
-                  (ice-9 match)
-                  (srfi srfi-26))
-       #:phases
-       (modify-phases %standard-phases
-         ;; FIXME: This is a copy of the standard configure phase with a tiny
-         ;; difference: this package needs the -package-db flag to be passed
-         ;; to "runhaskell" in addition to the "configure" action, because it
-         ;; depends on gtk2hs-buildtools, which provide setup hooks.  Without
-         ;; this option the Setup.hs file cannot be evaluated.  The
-         ;; haskell-build-system should be changed to pass "-package-db" to
-         ;; "runhaskell" in any case.
-         (replace 'configure
-           (lambda* (#:key outputs inputs tests? (configure-flags '())
-                     #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (name-version (strip-store-file-name out))
-                    (input-dirs (match inputs
-                                  (((_ . dir) ...)
-                                   dir)
-                                  (_ '())))
-                    (ghc-path (getenv "GHC_PACKAGE_PATH"))
-                    (params (append `(,(string-append "--prefix=" out))
-                                    `(,(string-append "--libdir=" out "/lib"))
-                                    `(,(string-append "--bindir=" out "/bin"))
-                                    `(,(string-append
-                                        "--docdir=" out
-                                        "/share/doc/" name-version))
-                                    '("--libsubdir=$compiler/$pkg-$version")
-                                    '("--package-db=../package.conf.d")
-                                    '("--global")
-                                    `(,@(map
-                                         (cut string-append "--extra-include-dirs=" <>)
-                                         (search-path-as-list '("include") input-dirs)))
-                                    `(,@(map
-                                         (cut string-append "--extra-lib-dirs=" <>)
-                                         (search-path-as-list '("lib") input-dirs)))
-                                    (if tests?
-                                        '("--enable-tests")
-                                        '())
-                                    configure-flags)))
-               (unsetenv "GHC_PACKAGE_PATH")
-               (apply invoke "runhaskell" "-package-db=../package.conf.d"
-                      "Setup.hs" "configure" params)
-               (setenv "GHC_PACKAGE_PATH" ghc-path)
-               #t))))))
     (inputs
-     `(("ghc-utf8-string" ,ghc-utf8-string)
-       ("cairo" ,cairo)))
+     (list ghc-utf8-string cairo))
     (native-inputs
-     `(("ghc-gtk2hs-buildtools" ,ghc-gtk2hs-buildtools)
-       ("pkg-config" ,pkg-config)))
+     (list ghc-gtk2hs-buildtools pkg-config))
     (home-page "http://projects.haskell.org/gtk2hs/")
     (synopsis "Haskell bindings to the Cairo vector graphics library")
     (description
@@ -1522,7 +1455,7 @@ documents, amongst others.")
 (define-public ghc-call-stack
   (package
     (name "ghc-call-stack")
-    (version "0.1.0")
+    (version "0.3.0")
     (source
      (origin
        (method url-fetch)
@@ -1531,9 +1464,9 @@ documents, amongst others.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "1qmihf5jafmc79sk52l6gpx75f5bnla2lp62kh3p34x3j84mwpzj"))))
+         "0ski7ihdxah7x4x07qgkjljg8hzqs9d6aa5k4cmr40bzp3i8s3mq"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-nanospec" ,ghc-nanospec)))
+    (native-inputs (list ghc-nanospec))
     (home-page "https://github.com/sol/call-stack#readme")
     (synopsis "Use GHC call-stacks in a backward compatible way")
     (description "This package provides a compatibility layer for using GHC
@@ -1547,12 +1480,12 @@ call stacks with different versions of the compiler.")
    (package
      (inherit ghc-call-stack)
      (arguments '(#:tests? #f))
-     (inputs '()))))
+     (native-inputs '()))))
 
 (define-public ghc-case-insensitive
   (package
     (name "ghc-case-insensitive")
-    (version "1.2.0.11")
+    (version "1.2.1.0")
     (outputs '("out" "static" "doc"))
     (source
      (origin
@@ -1563,11 +1496,11 @@ call stacks with different versions of the compiler.")
              ".tar.gz"))
        (sha256
         (base32
-         "1qrpxfirsxckg7jv28f5ah2qc8lh95hp7rnqkbqs1ahcwlbnvkm7"))))
+         "01p40hfjyldfds5jg6vlvvn3ihs4ki63xn6fh8yzngaz1izc2v99"))))
     (build-system haskell-build-system)
     ;; these inputs are necessary to use this library
     (inputs
-     `(("ghc-hashable" ,ghc-hashable)))
+     (list ghc-hashable))
     (arguments
      `(#:tests? #f)) ; FIXME: currently missing libraries used for tests.
     (home-page
@@ -1596,25 +1529,25 @@ the resulting type will be insensitive to cases.")
          "01h1zrdqb313cjd4rqm1107azzx4czqi018c2djf66a5i7ajl3dk"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-only" ,ghc-only)
-       ("ghc-text-short" ,ghc-text-short)
-       ("ghc-bytestring-builder" ,ghc-bytestring-builder)))
-    (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-quickcheck-instances" ,ghc-quickcheck-instances)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)))
+     (list ghc-attoparsec
+           ghc-hashable
+           ghc-scientific
+           ghc-unordered-containers
+           ghc-vector
+           ghc-only
+           ghc-text-short
+           ghc-bytestring-builder))
+    (native-inputs
+     (list ghc-hunit
+           ghc-quickcheck
+           ghc-quickcheck-instances
+           ghc-test-framework
+           ghc-test-framework-hunit
+           ghc-test-framework-quickcheck2))
     (arguments
      `(#:cabal-revision
-       ("1"
-        "1ph8rf91z4nf1ryrh9s4gd1kq98jlgk2manwddkpch8k0n9xvfk4")
+       ("4"
+        "19rkq41r5vj8drnj850b1wqnc54mxpw0x5z54brq0nvyww5f8ai8")
        #:configure-flags '("--flags=-bytestring--lt-0_10_4")))
     (home-page "https://github.com/haskell-hvr/cassava")
     (synopsis "CSV parsing and encoding library")
@@ -1664,7 +1597,7 @@ very simple example of encoding CSV data:
 (define-public ghc-cassava-megaparsec
   (package
     (name "ghc-cassava-megaparsec")
-    (version "2.0.1")
+    (version "2.0.4")
     (source
      (origin
        (method url-fetch)
@@ -1675,16 +1608,12 @@ very simple example of encoding CSV data:
              ".tar.gz"))
        (sha256
         (base32
-         "0q4skw98nzy6icmgpwqvgw0c5pqcgi25rf7nmwh2pksvv94pi3p3"))))
+         "0pg9z38jmrylbj683b6pf7psipp7lrdq6mn1hbj8v2gj5lh8yf8n"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-cassava" ,ghc-cassava)
-       ("ghc-megaparsec" ,ghc-megaparsec)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-vector" ,ghc-vector)))
+     (list ghc-cassava ghc-megaparsec ghc-unordered-containers ghc-vector))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-hspec-megaparsec" ,ghc-hspec-megaparsec)))
+     (list ghc-hspec ghc-hspec-megaparsec))
     (home-page "https://github.com/stackbuilders/cassava-megaparsec")
     (synopsis "Megaparsec parser for CSV files that plays nicely with Cassava")
     (description
@@ -1695,32 +1624,31 @@ provides for better error messages at the expense of some speed.")
 (define-public ghc-cborg
   (package
     (name "ghc-cborg")
-    (version "0.2.2.0")
+    (version "0.2.5.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
-             "mirror://hackage/package/cborg/cborg-"
+             "https://hackage.haskell.org/package/cborg/cborg-"
              version
              ".tar.gz"))
        (sha256
         (base32
-         "1rdnvy0w17s70ikmbyrnwax5rvqh19l95sh8i7ipgxi23z1r0bp1"))))
+         "08da498bpbnl5c919m45mjm7sr78nn6qs7xyl0smfgd06wwm65xf"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-half" ,ghc-half)
-       ("ghc-primitive" ,ghc-primitive)))
+     (list ghc-half ghc-primitive))
     (native-inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-base64-bytestring" ,ghc-base64-bytestring)
-       ("ghc-base16-bytestring" ,ghc-base16-bytestring)
-       ("ghc-fail" ,ghc-fail)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-vector" ,ghc-vector)))
+     (list ghc-aeson
+           ghc-base64-bytestring
+           ghc-base16-bytestring
+           ghc-fail
+           ghc-quickcheck
+           ghc-scientific
+           ghc-tasty
+           ghc-tasty-hunit
+           ghc-tasty-quickcheck
+           ghc-vector))
     (home-page "http://hackage.haskell.org/package/cborg")
     (synopsis "Concise Binary Object Representation")
     (description
@@ -1754,15 +1682,18 @@ command-line utility for working with CBOR data.")
        (sha256
         (base32 "0ysilz7rrjk94sqr3a61s98hr9qfi1xg13bskmlpc6mpgi2s4s5b"))))
     (build-system haskell-build-system)
-    (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-aeson-pretty" ,ghc-aeson-pretty)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-cborg" ,ghc-cborg)))
+    (arguments
+     `(#:cabal-revision
+       ("3" "1sn2f9nfjcbr0n62n4kklbdi3pzpwrcy7ilg7m3v41nwrk53ifwy")))
+    (inputs
+     (list ghc-aeson
+           ghc-aeson-pretty
+           ghc-unordered-containers
+           ghc-scientific
+           ghc-vector
+           ghc-cborg))
     (home-page "https://github.com/well-typed/cborg")
-    (synopsis "A library for encoding JSON as CBOR")
+    (synopsis "Library for encoding JSON as CBOR")
     (description
      "This package implements the bijection between JSON and CBOR
 defined in the CBOR specification, RFC 7049.")
@@ -1784,10 +1715,8 @@ defined in the CBOR specification, RFC 7049.")
          "1mqvd1iwzr50az4y24332x3g3wsrzw8j1iwph02vr7jbjfn8i7id"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-fail" ,ghc-fail)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)))
+     (list ghc-quickcheck ghc-fail ghc-test-framework
+           ghc-test-framework-quickcheck2))
     (home-page "https://hackage.haskell.org/package/cereal")
     (synopsis "Binary serialization library")
     (description "This package provides a binary serialization library,
@@ -1810,11 +1739,9 @@ parser isolation, and labeled blocks for better error messages.")
          "1srr7agvgfw78q5s1npjq5sgynvhjgllpihiv37ylkwqm4c4ap6r"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-conduit" ,ghc-conduit)
-       ("ghc-resourcet" ,ghc-resourcet)
-       ("ghc-cereal" ,ghc-cereal)))
+     (list ghc-conduit ghc-resourcet ghc-cereal))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)))
+     (list ghc-hunit))
     (home-page "https://github.com/snoyberg/conduit")
     (synopsis "Turn Data.Serialize Gets and Puts into Sources, Sinks, and Conduits")
     (description
@@ -1825,7 +1752,7 @@ parser isolation, and labeled blocks for better error messages.")
 (define-public ghc-cgi
   (package
     (name "ghc-cgi")
-    (version "3001.4.0.0")
+    (version "3001.5.0.0")
     (source
      (origin
        (method url-fetch)
@@ -1835,16 +1762,12 @@ parser isolation, and labeled blocks for better error messages.")
              ".tar.gz"))
        (sha256
         (base32
-         "1d0nh5ymkqskkp4yn0gfz4mff8i0cxyw1wws8xxp6k1mg1ywa25k"))))
+         "09wvp9vkqasns4flw9z46nhcy96r4qxjv6h47d5f90drz77pmm8a"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-multipart" ,ghc-multipart)
-       ("ghc-network-uri" ,ghc-network-uri)
-       ("ghc-network" ,ghc-network)))
+     (list ghc-exceptions ghc-multipart ghc-network-uri ghc-network))
     (native-inputs
-     `(("ghc-doctest" ,ghc-doctest)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-doctest ghc-quickcheck))
     (home-page
      "https://github.com/cheecheeo/haskell-cgi")
     (synopsis "Library for writing CGI programs")
@@ -1855,7 +1778,7 @@ parser isolation, and labeled blocks for better error messages.")
 (define-public ghc-charset
   (package
     (name "ghc-charset")
-    (version "0.3.7.1")
+    (version "0.3.8")
     (source
      (origin
        (method url-fetch)
@@ -1865,14 +1788,10 @@ parser isolation, and labeled blocks for better error messages.")
              ".tar.gz"))
        (sha256
         (base32
-         "1gn0m96qpjww8hpp2g1as5yy0wcwy4iq73h3kz6g0yxxhcl5sh9x"))))
+         "1rw6y2insgljbi5l1nwqwv9v865sswjly9rvwipd8zajkgks7aks"))))
     (build-system haskell-build-system)
-    (arguments
-     `(#:cabal-revision
-       ("1" "1z6nxw2g9vgsjq0g159sk8mwj68lwzxzi5iv5ynha0h85jcqxszy")))
     (inputs
-     `(("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)))
+     (list ghc-semigroups ghc-unordered-containers))
     (home-page "https://github.com/ekmett/charset")
     (synopsis "Fast unicode character sets for Haskell")
     (description "This package provides fast unicode character sets for
@@ -1882,7 +1801,7 @@ Haskell, based on complemented PATRICIA tries.")
 (define-public ghc-chart
   (package
     (name "ghc-chart")
-    (version "1.9.1")
+    (version "1.9.3")
     (source
      (origin
        (method url-fetch)
@@ -1890,15 +1809,18 @@ Haskell, based on complemented PATRICIA tries.")
                            "Chart-" version ".tar.gz"))
        (sha256
         (base32
-         "1pn735k9ifxlb9mdh8xy7wi22cxni8xyr28n8zx9w0j6vprcg89l"))))
+         "0p69kq5kh40gd4y8wqabypmw67pqh42vaaw64zv9sf8j075g85ry"))))
     (build-system haskell-build-system)
-    (inputs
-     `(("ghc-old-locale" ,ghc-old-locale)
-       ("ghc-lens" ,ghc-lens)
-       ("ghc-colour" ,ghc-colour)
-       ("ghc-data-default-class" ,ghc-data-default-class)
-       ("ghc-operational" ,ghc-operational)
-       ("ghc-vector" ,ghc-vector)))
+    (arguments
+     `(#:cabal-revision
+       ("2" "04mmsm54mdqcrypvgawhhbwjscmky3j7g5841bc71c0q6d33h2k4")))
+    (inputs
+     (list ghc-old-locale
+           ghc-lens
+           ghc-colour
+           ghc-data-default-class
+           ghc-operational
+           ghc-vector))
     (home-page "https://github.com/timbod7/haskell-chart/wiki")
     (synopsis "Library for generating 2D charts and plots")
     (description
@@ -1909,7 +1831,7 @@ backends provided by the @code{Cairo} and @code{Diagrams} libraries.")
 (define-public ghc-chart-cairo
   (package
     (name "ghc-chart-cairo")
-    (version "1.9.1")
+    (version "1.9.3")
     (source
      (origin
        (method url-fetch)
@@ -1917,16 +1839,20 @@ backends provided by the @code{Cairo} and @code{Diagrams} libraries.")
                            "Chart-cairo-" version ".tar.gz"))
        (sha256
         (base32
-         "0hknj4rsjf2m8p5pyq5zff8ai7v80yvmxb5c6n0bkgxs4317nbl9"))))
+         "0clm68alzsakkn5m4h49dgx33crajacsykb4hry2fh9zxp9j743f"))))
     (build-system haskell-build-system)
-    (inputs
-     `(("ghc-old-locale" ,ghc-old-locale)
-       ("ghc-cairo" ,ghc-cairo)
-       ("ghc-colour" ,ghc-colour)
-       ("ghc-data-default-class" ,ghc-data-default-class)
-       ("ghc-operational" ,ghc-operational)
-       ("ghc-lens" ,ghc-lens)
-       ("ghc-chart" ,ghc-chart)))
+    (arguments
+     `(#:cabal-revision
+       ("2" "0z93znn3dpgj80iiz3a67m90x0j9ljr0jd1ws9jkzj7rk88014gp")))
+    (inputs
+     (list ghc-old-locale
+           ghc-cairo
+           ghc-colour
+           ghc-data-default-class
+           ghc-operational
+           ghc-lens
+           ghc-chart
+           zlib))
     (home-page "https://github.com/timbod7/haskell-chart/wiki")
     (synopsis "Cairo backend for Charts")
     (description "This package provides a Cairo vector graphics rendering
@@ -1936,7 +1862,7 @@ backend for the Charts library.")
 (define-public ghc-chasingbottoms
   (package
     (name "ghc-chasingbottoms")
-    (version "1.3.1.7")
+    (version "1.3.1.10")
     (source
      (origin
        (method url-fetch)
@@ -1944,12 +1870,10 @@ backend for the Charts library.")
                            "ChasingBottoms-" version ".tar.gz"))
        (sha256
         (base32
-         "0ziiqfsvv1ypdra6kd0bhbsl852i0wqn43jkfii38yl879cdacan"))))
+         "1flr56hd8ny0ddlv1agi0ikdjv5wgx0aba6xqdsn3nv6dyw9nbf3"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-random" ,ghc-random)
-       ("ghc-syb" ,ghc-syb)))
+     (list ghc-quickcheck ghc-random ghc-syb))
     (home-page "https://hackage.haskell.org/package/ChasingBottoms")
     (synopsis "Testing of partial and infinite values in Haskell")
     (description
@@ -1966,7 +1890,7 @@ Partial and Infinite Values\"}.")
 (define-public ghc-cheapskate
   (package
     (name "ghc-cheapskate")
-    (version "0.1.1.1")
+    (version "0.1.1.2")
     (source
      (origin
        (method url-fetch)
@@ -1976,14 +1900,11 @@ Partial and Infinite Values\"}.")
              ".tar.gz"))
        (sha256
         (base32
-         "0qnyd8bni2rby6b02ff4bvfdhm1hwc8vzpmnms84jgrlg1lly3fm"))))
+         "17n6laihqrjn62l8qw4565nf77zkvrl68bjmc3vzr4ckqfblhdzd"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-blaze-html" ,ghc-blaze-html)
-       ("ghc-xss-sanitize" ,ghc-xss-sanitize)
-       ("ghc-data-default" ,ghc-data-default)
-       ("ghc-syb" ,ghc-syb)
-       ("ghc-uniplate" ,ghc-uniplate)))
+     (list ghc-blaze-html ghc-xss-sanitize ghc-data-default ghc-syb
+           ghc-uniplate))
     (home-page "https://github.com/jgm/cheapskate")
     (synopsis "Experimental markdown processor")
     (description "Cheapskate is an experimental Markdown processor in pure
@@ -2011,10 +1932,8 @@ cross-site scripting (@dfn{XSS}) attacks.")
      `(#:cabal-revision
        ("1" "1q93wrw03ix4cmnkz3lzkixcvvizw6i2ia2zifdfak1dvxnblxk0")))
     (inputs
-     `(("ghc-options-bootstrap" ,ghc-options-bootstrap)
-       ("ghc-patience" ,ghc-patience)
-       ("ghc-random" ,ghc-random)
-       ("ghc-ansi-terminal" ,ghc-ansi-terminal)))
+     (list ghc-options-bootstrap ghc-patience ghc-random
+           ghc-ansi-terminal))
     (home-page "https://john-millikin.com/software/chell/")
     (synopsis "Simple and intuitive library for automated testing")
     (description
@@ -2045,12 +1964,10 @@ testing strategies.")
            (lambda _
              (substitute* "chell-quickcheck.cabal"
                (("QuickCheck >= 2\\.3 && < 2\\.13")
-                "QuickCheck >= 2.3 && < 2.14")))))))
+                "QuickCheck >= 2.3 && < 2.15")))))))
     (inputs
-     `(("ghc-chell" ,ghc-chell)
-       ("ghc-chell-quickcheck-bootstrap" ,ghc-chell-quickcheck-bootstrap)
-       ("ghc-random" ,ghc-random)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-chell ghc-chell-quickcheck-bootstrap ghc-random
+           ghc-quickcheck))
     (home-page "https://john-millikin.com/software/chell/")
     (synopsis "QuickCheck support for the Chell testing library")
     (description "More complex tests for @code{chell}.")
@@ -2082,7 +1999,7 @@ testing strategies.")
            (lambda _
              (substitute* "chell-quickcheck.cabal"
                (("QuickCheck >= 2\\.3 && < 2\\.13")
-                "QuickCheck >= 2.3 && < 2.14")))))))
+                "QuickCheck >= 2.3 && < 2.15")))))))
     (home-page "https://john-millikin.com/software/chell/")
     (synopsis "QuickCheck support for the Chell testing library")
     (description "More complex tests for @code{chell}.")
@@ -2102,8 +2019,7 @@ testing strategies.")
         (base32
          "16m7y7fwrirbjbqqcsfmr4yxa9qvfax6r7pw0zl9ky71ms0wa47p"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-vector" ,ghc-vector)
-              ("ghc-semigroups" ,ghc-semigroups)))
+    (inputs (list ghc-vector ghc-semigroups))
     (home-page "https://github.com/snoyberg/mono-traversable")
     (synopsis "Typeclasses for dealing with various chunked data
 representations for Haskell")
@@ -2114,7 +2030,7 @@ classy-prelude.")
 (define-public ghc-clock
   (package
     (name "ghc-clock")
-    (version "0.8")
+    (version "0.8.2")
     (source
      (origin
        (method url-fetch)
@@ -2123,11 +2039,10 @@ classy-prelude.")
              "clock/"
              "clock-" version ".tar.gz"))
        (sha256
-        (base32 "0539w9bjw6xbfv9v6aq9hijszxqdnqhilwpbwpql1400ji95r8q8"))))
+        (base32 "0qg4ljwmw28vvxjzr4sknh8220abjcx2b0sq3ljqprh3qw8b2p8b"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+     (list ghc-tasty ghc-tasty-quickcheck))
     (home-page "https://hackage.haskell.org/package/clock")
     (synopsis "High-resolution clock for Haskell")
     (description "A package for convenient access to high-resolution clock and
@@ -2159,7 +2074,7 @@ timer functions of different operating systems via a unified API.")
                 "1p41z6z8dqxk62287lvhhg4ayy9laai9ljh4azsnzb029v6mbv0d"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)))
+     (list ghc-hunit))
     (home-page "https://github.com/jgm/commonmark-hs")
     (synopsis "Fast, accurate CommonMark (Markdown) parser and renderer")
     (description
@@ -2172,7 +2087,7 @@ sources, and does not require prior installation of the C library.")
 (define-public ghc-cmark-gfm
   (package
     (name "ghc-cmark-gfm")
-    (version "0.2.0")
+    (version "0.2.2")
     (source
      (origin
        (method url-fetch)
@@ -2181,10 +2096,10 @@ sources, and does not require prior installation of the C library.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "03xflrkyw84qv3yjly5iks9311bqv5cmrmsylr763v4ph0fn7rjq"))))
+         "1skzdg1icmhn0zrkhbnba4200ymah8sd5msk4qfgawrk77zilw7f"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)))
+     (list ghc-hunit))
     (home-page "https://github.com/kivikakk/cmark-gfm-hs")
     (synopsis
      "Fast, accurate GitHub Flavored Markdown parser and renderer")
@@ -2198,7 +2113,7 @@ of the C library.")
 (define-public ghc-cmdargs
   (package
     (name "ghc-cmdargs")
-    (version "0.10.20")
+    (version "0.10.21")
     (source
      (origin
        (method url-fetch)
@@ -2207,7 +2122,7 @@ of the C library.")
              version ".tar.gz"))
        (sha256
         (base32
-         "0cbkmgrcnwgigg6z88y3c09gm7g6dwm7gzbgr53h8k1xik29s9hf"))))
+         "0xfabq187n1vqrnnm4ciprpl0dcjq97rksyjnpcniwva9rffmn7p"))))
     (build-system haskell-build-system)
     (outputs '("out" "static" "doc"))
     (home-page
@@ -2220,7 +2135,7 @@ of the C library.")
 (define-public ghc-code-page
   (package
   (name "ghc-code-page")
-  (version "0.2")
+  (version "0.2.1")
   (source
    (origin
      (method url-fetch)
@@ -2229,7 +2144,7 @@ of the C library.")
            version ".tar.gz"))
       (sha256
        (base32
-        "0i0qbrbhvrwkbikqb7hh7yxaipaavwzvyrw211d0vkz99f62mqxz"))))
+        "1aiavczjk6f2kc1cdwjc1mwkr4d9shiz3xwmfbzsdn0yqqchxydj"))))
   (build-system haskell-build-system)
   (home-page "https://github.com/RyanGlScott/code-page")
   (synopsis "Windows code page library for Haskell")
@@ -2239,35 +2154,35 @@ nothing.")
   (license license:bsd-3)))
 
 (define-public ghc-colour
-(package
-  (name "ghc-colour")
-  (version "2.3.5")
-  (source
-   (origin
-     (method url-fetch)
-     (uri (string-append
-           "https://hackage.haskell.org/package/colour/colour-"
-           version ".tar.gz"))
-     (sha256
-      (base32
-       "1rq4l46jx4lpdppy71wf7m1n7pw2jwy788rm35ycwzb1g4clg39v"))))
-  (arguments
-   ;; The tests for this package have the following dependency cycle:
-   ;; ghc-test-framework -> ghc-ansi-terminal -> ghc-colour.
-   `(#:tests? #f))
-  (build-system haskell-build-system)
-  (home-page "https://wiki.haskell.org/Colour")
-  (synopsis "Model for human colour perception")
-  (description
-   "This package provides a data type for colours and transparency.
+  (package
+    (name "ghc-colour")
+    (version "2.3.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/colour/colour-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "0wgqj64mh2y2zk77kv59k3xb3dk4wmgfp988y74sp9a4d76mvlrc"))))
+    (arguments
+     ;; The tests for this package have the following dependency cycle:
+     ;; ghc-test-framework -> ghc-ansi-terminal -> ghc-colour.
+     `(#:tests? #f))
+    (build-system haskell-build-system)
+    (home-page "https://wiki.haskell.org/Colour")
+    (synopsis "Model for human colour perception")
+    (description
+     "This package provides a data type for colours and transparency.
 Colours can be blended and composed.  Various colour spaces are
 supported.  A module of colour names (\"Data.Colour.Names\") is provided.")
-  (license license:expat)))
+    (license license:expat)))
 
 (define-public ghc-comonad
   (package
     (name "ghc-comonad")
-    (version "5.0.5")
+    (version "5.0.8")
     (source
      (origin
        (method url-fetch)
@@ -2277,17 +2192,11 @@ supported.  A module of colour names (\"Data.Colour.Names\") is provided.")
              ".tar.gz"))
        (sha256
         (base32
-         "1l7snp2mszgnjgd0nc9kzfyd13vla0rlazqi03rwx2akcxk14n3c"))))
+         "04rxycp2pbkrvhjgpgx08jmsipjz4cdmhv59dbp47k4jq8ndyv7g"))))
     (build-system haskell-build-system)
-    (native-inputs
-     `(("cabal-doctest" ,cabal-doctest)
-       ("ghc-doctest" ,ghc-doctest)))
     (inputs
-     `(("ghc-contravariant" ,ghc-contravariant)
-       ("ghc-distributive" ,ghc-distributive)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)))
+     (list ghc-distributive ghc-tagged ghc-indexed-traversable
+           ghc-transformers-compat))
     (home-page "https://github.com/ekmett/comonad/")
     (synopsis "Comonads for Haskell")
     (description "This library provides @code{Comonad}s for Haskell.")
@@ -2333,13 +2242,10 @@ postfix notation.  For more information on stack based languages, see
      ;; XXX: The ReadWriteLock 'stressTest' fails.
      `(#:tests? #f))
     (inputs
-     `(("ghc-unbounded-delays" ,ghc-unbounded-delays)))
+     (list ghc-unbounded-delays))
     (native-inputs
-     `(("ghc-async" ,ghc-async)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-random" ,ghc-random)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)))
+     (list ghc-async ghc-hunit ghc-random ghc-test-framework
+           ghc-test-framework-hunit))
     (home-page "https://github.com/basvandijk/concurrent-extra")
     (synopsis "Extra concurrency primitives")
     (description "This Haskell library offers (among other things) the
@@ -2369,23 +2275,20 @@ Python.")
 (define-public ghc-concurrent-output
   (package
     (name "ghc-concurrent-output")
-    (version "1.10.11")
+    (version "1.10.12")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
-             "mirror://hackage/package/concurrent-output/concurrent-output-"
+             "https://hackage.haskell.org/package/concurrent-output/concurrent-output-"
              version
              ".tar.gz"))
        (sha256
         (base32
-         "1d1aaqg5814k59b0iws3fh06p3g2siaj922gkhs75qgncj0my2p3"))))
+         "081wpag1d5znr0ynrjvkc14xl816m88vz9hgfm3g3sp6ak7s3y47"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-async" ,ghc-async)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-ansi-terminal" ,ghc-ansi-terminal)
-       ("ghc-terminal-size" ,ghc-terminal-size)))
+     (list ghc-async ghc-exceptions ghc-ansi-terminal ghc-terminal-size))
     (home-page
      "https://hackage.haskell.org/package/concurrent-output")
     (synopsis
@@ -2413,24 +2316,21 @@ concurrent threads.  Can be used for progress displays etc.")
     (build-system haskell-build-system)
     (outputs '("out" "static" "doc"))
     (inputs
-     `(("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-lifted-base" ,ghc-lifted-base)
-       ("ghc-mono-traversable" ,ghc-mono-traversable)
-       ("ghc-mmorph" ,ghc-mmorph)
-       ("ghc-resourcet" ,ghc-resourcet)
-       ("ghc-silently" ,ghc-silently)
-       ("ghc-transformers-base" ,ghc-transformers-base)
-       ("ghc-unliftio" ,ghc-unliftio)
-       ("ghc-unliftio-core" ,ghc-unliftio-core)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-void" ,ghc-void)))
-    (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-safe" ,ghc-safe)
-       ("ghc-split" ,ghc-split)))
+     (list ghc-exceptions
+           ghc-lifted-base
+           ghc-mono-traversable
+           ghc-mmorph
+           ghc-resourcet
+           ghc-silently
+           ghc-transformers-base
+           ghc-unliftio
+           ghc-unliftio-core
+           ghc-vector
+           ghc-void))
+    (native-inputs
+     (list ghc-quickcheck ghc-hspec ghc-safe ghc-split))
     (home-page "https://github.com/snoyberg/conduit")
-    (synopsis "Streaming data library ")
+    (synopsis "Streaming data library")
     (description
      "The conduit package is a solution to the streaming data problem,
 allowing for production, transformation, and consumption of streams of data
@@ -2454,26 +2354,24 @@ space as enumerator/iteratee and pipes.")
          "0c1jwz30kkvimx7lb61782yk0kyfamrf5bqc3g1h7g51lk8bbv9i"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-async" ,ghc-async)
-       ("ghc-bzlib-conduit" ,ghc-bzlib-conduit)
-       ("ghc-conduit" ,ghc-conduit)
-       ("ghc-conduit-combinators" ,ghc-conduit-combinators)
-       ("ghc-conduit-extra" ,ghc-conduit-extra)
-       ("ghc-conduit-zstd" ,ghc-conduit-zstd)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-lzma-conduit" ,ghc-lzma-conduit)
-       ("ghc-monad-control" ,ghc-monad-control)
-       ("ghc-pqueue" ,ghc-pqueue)
-       ("ghc-resourcet" ,ghc-resourcet)
-       ("ghc-stm-conduit" ,ghc-stm-conduit)
-       ("ghc-streaming-commons" ,ghc-streaming-commons)
-       ("ghc-unliftio-core" ,ghc-unliftio-core)
-       ("ghc-vector" ,ghc-vector)))
-    (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework-th" ,ghc-test-framework-th)))
+     (list ghc-async
+           ghc-bzlib-conduit
+           ghc-conduit
+           ghc-conduit-combinators
+           ghc-conduit-extra
+           ghc-conduit-zstd
+           ghc-exceptions
+           ghc-lzma-conduit
+           ghc-monad-control
+           ghc-pqueue
+           ghc-resourcet
+           ghc-stm-conduit
+           ghc-streaming-commons
+           ghc-unliftio-core
+           ghc-vector))
+    (native-inputs
+     (list ghc-hunit ghc-test-framework ghc-test-framework-hunit
+           ghc-test-framework-th))
     (home-page "https://github.com/luispedro/conduit-algorithms#readme")
     (synopsis "Conduit-based algorithms")
     (description
@@ -2495,24 +2393,21 @@ level asynchronous processing and some other utilities.")
         (base32
          "1lz70vwp4y4lpsivxl0cshq7aq3968rh48r6rjvpyaj2l0bdj5wp"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-conduit" ,ghc-conduit)
-              ("ghc-conduit-extra" ,ghc-conduit-extra)
-              ("ghc-transformers-base" ,ghc-transformers-base)
-              ("ghc-primitive" ,ghc-primitive)
-              ("ghc-vector" ,ghc-vector)
-              ("ghc-void" ,ghc-void)
-              ("ghc-mwc-random" ,ghc-mwc-random)
-              ("ghc-unix-compat" ,ghc-unix-compat)
-              ("ghc-base16-bytestring" ,ghc-base16-bytestring)
-              ("ghc-base64-bytestring" ,ghc-base64-bytestring)
-              ("ghc-resourcet" ,ghc-resourcet)
-              ("ghc-monad-control" ,ghc-monad-control)
-              ("ghc-chunked-data" ,ghc-chunked-data)
-              ("ghc-mono-traversable" ,ghc-mono-traversable)))
-    (native-inputs `(("ghc-hspec" ,ghc-hspec)
-                     ("ghc-silently" ,ghc-silently)
-                     ("ghc-safe" ,ghc-safe)
-                     ("ghc-quickcheck" ,ghc-quickcheck)))
+    (inputs (list ghc-conduit
+                  ghc-conduit-extra
+                  ghc-transformers-base
+                  ghc-primitive
+                  ghc-vector
+                  ghc-void
+                  ghc-mwc-random
+                  ghc-unix-compat
+                  ghc-base16-bytestring
+                  ghc-base64-bytestring
+                  ghc-resourcet
+                  ghc-monad-control
+                  ghc-chunked-data
+                  ghc-mono-traversable))
+    (native-inputs (list ghc-hspec ghc-silently ghc-safe ghc-quickcheck))
     (home-page "https://github.com/snoyberg/mono-traversable")
     (synopsis "Commonly used conduit functions, for both chunked and
 unchunked data")
@@ -2523,7 +2418,7 @@ as well as a convenient Conduit module.")
 (define-public ghc-conduit-extra
   (package
     (name "ghc-conduit-extra")
-    (version "1.3.4")
+    (version "1.3.5")
     (source
      (origin
        (method url-fetch)
@@ -2532,26 +2427,26 @@ as well as a convenient Conduit module.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "1d853d39vj5pb8yxfcsnjwdzqzkm34ixzbnba8bslpihb7182wxi"))))
+         "1n8js1y1rdswvp0bkjmmz19fag19bdxgwsrqz93yc09w43p8sr4a"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-conduit" ,ghc-conduit)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-monad-control" ,ghc-monad-control)
-       ("ghc-transformers-base" ,ghc-transformers-base)
-       ("ghc-typed-process" ,ghc-typed-process)
-       ("ghc-async" ,ghc-async)
-       ("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-blaze-builder" ,ghc-blaze-builder)
-       ("ghc-network" ,ghc-network)
-       ("ghc-primitive" ,ghc-primitive)
-       ("ghc-resourcet" ,ghc-resourcet)
-       ("ghc-streaming-commons" ,ghc-streaming-commons)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-bytestring-builder" ,ghc-bytestring-builder)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-conduit
+           ghc-exceptions
+           ghc-monad-control
+           ghc-transformers-base
+           ghc-typed-process
+           ghc-async
+           ghc-attoparsec
+           ghc-blaze-builder
+           ghc-network
+           ghc-primitive
+           ghc-resourcet
+           ghc-streaming-commons
+           ghc-hspec
+           ghc-bytestring-builder
+           ghc-quickcheck))
     (native-inputs
-     `(("hspec-discover" ,hspec-discover)))
+     (list hspec-discover))
     (home-page "https://github.com/snoyberg/conduit")
     (synopsis "Conduit adapters for common libraries")
     (description
@@ -2565,7 +2460,7 @@ dependencies.  The basic idea is that this package should only depend on
 (define-public ghc-conduit-zstd
   (package
     (name "ghc-conduit-zstd")
-    (version "0.0.1.1")
+    (version "0.0.2.0")
     (source
      (origin
        (method url-fetch)
@@ -2573,18 +2468,13 @@ dependencies.  The basic idea is that this package should only depend on
                            "conduit-zstd/conduit-zstd-" version ".tar.gz"))
        (sha256
         (base32
-         "04h7w2903hgw4gjcx2pg29yinnmfapawvc19hd3r57rr12fzb0c6"))))
+         "0f0ir4zs3skw33c8mfppxhfsyqh1c2cnc4gkf8bvv3bdiikdj1yl"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-conduit" ,ghc-conduit)
-       ("ghc-zstd" ,ghc-zstd)))
+     (list ghc-conduit ghc-zstd))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-conduit-combinators" ,ghc-conduit-combinators)
-       ("ghc-conduit-extra" ,ghc-conduit-extra)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework-th" ,ghc-test-framework-th)))
+     (list ghc-conduit-combinators ghc-conduit-extra
+           ghc-quickcheck-instances ghc-tasty ghc-tasty-quickcheck))
     (home-page "https://github.com/luispedro/conduit-zstd#readme")
     (synopsis "Conduit-based ZStd Compression")
     (description "Zstandard compression packaged as a conduit.  This is
@@ -2612,13 +2502,9 @@ interface}.")
        #:cabal-revision
        ("2" "0iwraaa0y1b3xdsg760j1wpylkqshky0k2djcg0k4s97lrwqpbcz")))
     (native-inputs
-     `(("ghc-doctest" ,ghc-doctest)
-       ("ghc-hedgehog" ,ghc-hedgehog)
-       ("ghc-ini" ,ghc-ini)
-       ("ghc-microlens" ,ghc-microlens)))
+     (list ghc-doctest ghc-hedgehog ghc-ini ghc-microlens))
     (inputs
-     `(("ghc-megaparsec" ,ghc-megaparsec)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)))
+     (list ghc-megaparsec ghc-unordered-containers))
     (home-page "https://github.com/aisamanra/config-ini")
     (synopsis "Monadic Haskell DSL for parsing simple INI configuration files")
     (description
@@ -2646,14 +2532,10 @@ human-readable error messages when things go wrong.")
          "1d1iq1knwiq6ia5g64rw5hqm6dakz912qj13r89737rfcxmrkfbf"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-unix-compat" ,ghc-unix-compat)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)))
+     (list ghc-attoparsec ghc-hashable ghc-unix-compat
+           ghc-unordered-containers))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)))
+     (list ghc-hunit ghc-test-framework ghc-test-framework-hunit))
     (home-page "https://github.com/bos/configurator")
     (synopsis "Configuration management")
     (description
@@ -2687,15 +2569,15 @@ and daemons.  The features include:
                 "1nbmafhlg0wy4aa3p7amjddbamdz6avzrxn4py3lvhrjqn4raxax"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-byteable" ,ghc-byteable)
-       ("ghc-data-default-class" ,ghc-data-default-class)
-       ("ghc-network" ,ghc-network)
-       ("ghc-tls" ,ghc-tls)
-       ("ghc-socks" ,ghc-socks)
-       ("ghc-x509" ,ghc-x509)
-       ("ghc-x509-store" ,ghc-x509-store)
-       ("ghc-x509-system" ,ghc-x509-system)
-       ("ghc-x509-validation" ,ghc-x509-validation)))
+     (list ghc-byteable
+           ghc-data-default-class
+           ghc-network
+           ghc-tls
+           ghc-socks
+           ghc-x509
+           ghc-x509-store
+           ghc-x509-system
+           ghc-x509-validation))
     (home-page "https://github.com/vincenthz/hs-connection")
     (synopsis "Simple and easy network connections API")
     (description
@@ -2707,7 +2589,7 @@ the choice of SSL/TLS, and SOCKS.")
 (define-public ghc-constraints
   (package
     (name "ghc-constraints")
-    (version "0.10.1")
+    (version "0.13")
     (source
      (origin
        (method url-fetch)
@@ -2716,15 +2598,13 @@ the choice of SSL/TLS, and SOCKS.")
              version ".tar.gz"))
        (sha256
         (base32
-         "1xy3vv78jxc17hm0z7qqspxjwv7l2jbcbj670yrl2f053qkfr02q"))))
+         "143558jykvya7y8134dx30g6nh27q5s61nbq369p69igd1aayncj"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-hashable" ,ghc-hashable)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)))
+     (list ghc-hashable ghc-semigroups ghc-transformers-compat
+           ghc-type-equality))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-hspec hspec-discover))
     (home-page "https://github.com/ekmett/constraints/")
     (synopsis "Constraint manipulation")
     (description
@@ -2736,7 +2616,7 @@ a vocabulary for working with them.")
 (define-public ghc-contravariant
   (package
     (name "ghc-contravariant")
-    (version "1.5.2")
+    (version "1.5.5")
     (source
      (origin
        (method url-fetch)
@@ -2746,13 +2626,10 @@ a vocabulary for working with them.")
              ".tar.gz"))
        (sha256
         (base32
-         "0366gl62wwwdbl9i6kqy60asf60876k55v91la6bmhnwwcj2q9n4"))))
+         "1ynz89vfn7czxpa203zmdqknkvpylzzl9rlkpasx1anph1jxcbq6"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-void" ,ghc-void)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)
-       ("ghc-statevar" ,ghc-statevar)
-       ("ghc-semigroups" ,ghc-semigroups)))
+     (list ghc-void ghc-transformers-compat ghc-statevar ghc-semigroups))
     (home-page
      "https://github.com/ekmett/contravariant/")
     (synopsis "Contravariant functors")
@@ -2762,7 +2639,7 @@ a vocabulary for working with them.")
 (define-public ghc-contravariant-extras
   (package
     (name "ghc-contravariant-extras")
-    (version "0.3.4")
+    (version "0.3.5.2")
     (source
      (origin
        (method url-fetch)
@@ -2771,16 +2648,10 @@ a vocabulary for working with them.")
                            "contravariant-extras-" version ".tar.gz"))
        (sha256
         (base32
-         "0gg62ccl94kvh7mnvdq09pifqxjx2kgs189si90nmg44bafj7a9n"))))
+         "0ikwzg0992j870yp0x2ssf4mv2hw2nml979apg493m72xnvr1jz9"))))
     (build-system haskell-build-system)
-    (arguments
-     `(#:cabal-revision
-       ("1" "1h2955ahga6i4fn7k8v66l03v77p6fhsac6ck8gpabkc08ij60wp")))
     (inputs
-     `(("ghc-tuple-th" ,ghc-tuple-th)
-       ("ghc-contravariant" ,ghc-contravariant)
-       ("ghc-base-prelude" ,ghc-base-prelude)
-       ("ghc-semigroups" ,ghc-semigroups)))
+     (list ghc-contravariant ghc-template-haskell-compat-v0208))
     (home-page "https://github.com/nikita-volkov/contravariant-extras")
     (synopsis "Extras for the @code{ghc-contravariant} Haskell package")
     (description "This Haskell package provides extras for the
@@ -2831,8 +2702,7 @@ Free Monads, MPC'08}
          "0v18ap1mccnndgxmbfgyjdicg8jlss01bd5fq8a576dr0h4sgyg9"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-old-time" ,ghc-old-time)
-       ("ghc-old-locale" ,ghc-old-locale)))
+     (list ghc-old-time ghc-old-locale))
     (home-page "https://hackage.haskell.org/package/convertible")
     (synopsis "Typeclasses and instances for converting between types")
     (description
@@ -2858,6 +2728,14 @@ function performs the conversion you desire.")
         (base32
          "00767ai09wm7f0yzmpqck3cpgxncpr9djnmmz5l17ajz69139x4c"))))
     (build-system haskell-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'fix-Setup.hs
+           (lambda _
+             (substitute* "Setup.hs"
+               (("defaultMainWithHooks defaultUserHooks")
+                "defaultMain")))))))
     (home-page "http://hackage.haskell.org/package/csv")
     (synopsis "CSV loader and dumper")
     (description
@@ -2870,15 +2748,15 @@ lingua franca for spreadsheets, and for certain web services.")
 (define-public ghc-data-accessor
   (package
     (name "ghc-data-accessor")
-    (version "0.2.2.8")
+    (version "0.2.3")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
-             "mirror://hackage/package/data-accessor/data-accessor-"
+             "https://hackage.haskell.org/package/data-accessor/data-accessor-"
              version ".tar.gz"))
        (sha256
-        (base32 "1fq4gygxbz0bd0mzgvc1sl3m4gjnsv8nbgpnmdpa29zj5lb9agxc"))))
+        (base32 "0f1yvvzr24qgrx6k2g101s7vp012802iw6kli903n28nig93yn0x"))))
     (build-system haskell-build-system)
     (home-page "https://wiki.haskell.org/Record_access")
     (synopsis
@@ -2900,7 +2778,7 @@ manipulating fields of records.")
        (sha256
         (base32 "0yp030vafbpddl27m606aibbbr5ar5j5bsv4bksscz3cq4yq5j10"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-data-accessor" ,ghc-data-accessor)))
+    (inputs (list ghc-data-accessor))
     (home-page "https://wiki.haskell.org/Record_access")
     (synopsis "Use Accessor to access state in transformers State monad")
     (description "This package provides Haskell modules to allow use of
@@ -2920,7 +2798,7 @@ Accessor to access state in transformers State monad.")
         (base32 "1mwfhnmvi3vicyjzl33m6pcipi2v887zazyqxygq258ndd010s9m"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-quickcheck))
     (arguments
      `(#:cabal-revision
        ("1" "13hg7a3d4ky8b765dl03ryxg28lq8iaqj5ky3j51r0i1i4f2a9hy")))
@@ -2948,16 +2826,10 @@ observed.")
         (base32 "04d5n8ybmcxba9qb6h389w9zfq1lvj81b82jh6maqp6pkhkmvydh"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-data-default-class"
-        ,ghc-data-default-class)
-       ("ghc-data-default-instances-base"
-        ,ghc-data-default-instances-base)
-       ("ghc-data-default-instances-containers"
-        ,ghc-data-default-instances-containers)
-       ("ghc-data-default-instances-dlist"
-        ,ghc-data-default-instances-dlist)
-       ("ghc-data-default-instances-old-locale"
-        ,ghc-data-default-instances-old-locale)))
+     (list ghc-data-default-class ghc-data-default-instances-base
+           ghc-data-default-instances-containers
+           ghc-data-default-instances-dlist
+           ghc-data-default-instances-old-locale))
     (home-page "https://hackage.haskell.org/package/data-default")
     (synopsis "Types with default values")
     (description
@@ -3000,7 +2872,7 @@ packages.")
         (base32 "0ym1sw3ssdzzifxxhh76qlv8kkmb2iclc158incv1dklyr9y8kw4"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-data-default-class" ,ghc-data-default-class)))
+     (list ghc-data-default-class))
     (home-page "https://hackage.haskell.org/package/data-default-instances-base")
     (synopsis "Default instances for types in base")
     (description
@@ -3023,7 +2895,7 @@ package.")
         (base32 "06h8xka031w752a7cjlzghvr8adqbl95xj9z5zc1b62w02phfpm5"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-data-default-class" ,ghc-data-default-class)))
+     (list ghc-data-default-class))
     (home-page "https://hackage.haskell.org/package/data-default-instances-containers")
     (synopsis "Default instances for types in containers")
     (description "Provides default instances for types from the containers
@@ -3045,8 +2917,7 @@ package.")
         (base32 "0narkdqiprhgayjiawrr4390h4rq4pl2pb6mvixbv2phrc8kfs3x"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-data-default-class" ,ghc-data-default-class)
-       ("ghc-dlist" ,ghc-dlist)))
+     (list ghc-data-default-class ghc-dlist))
     (home-page "https://hackage.haskell.org/package/data-default-instances-dlist")
     (synopsis "Default instances for types in dlist")
     (description "Provides default instances for types from the dlist
@@ -3068,8 +2939,7 @@ package.")
           (base32 "00h81i5phib741yj517p8mbnc48myvfj8axzsw44k34m48lv1lv0"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-data-default-class" ,ghc-data-default-class)
-       ("ghc-old-locale" ,ghc-old-locale)))
+     (list ghc-data-default-class ghc-old-locale))
     (home-page
       "https://hackage.haskell.org/package/data-default-instances-old-locale")
     (synopsis "Default instances for types in old-locale")
@@ -3080,16 +2950,17 @@ package.")
 (define-public ghc-data-fix
   (package
     (name "ghc-data-fix")
-    (version "0.2.0")
+    (version "0.3.2")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
-             "mirror://hackage/package/data-fix/"
+             "https://hackage.haskell.org/package/data-fix/"
              "data-fix-" version ".tar.gz"))
        (sha256
-        (base32 "14hk6hq5hdb3l5bhmzhw086jpzlvp9qbw9dzw30wlz5jbh2ihmvy"))))
+        (base32 "1k0rcbb6dzv0ggdxqa2bh4jr829y0bczjrg98mrk5733q0xjs5rs"))))
     (build-system haskell-build-system)
+    (inputs (list ghc-hashable))
     (home-page "https://github.com/spell-music/data-fix")
     (synopsis "Fixpoint data types")
     (description
@@ -3112,9 +2983,8 @@ Thanks for contribution to: Matej Kollar, Herbert Valerio Riedel")
         (base32 "1ghbqvc48gf9p8wiy71hdpaj7by3b9cw6wgwi3qqz8iw054xs5wi"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)))
+     (list ghc-quickcheck ghc-test-framework
+           ghc-test-framework-quickcheck2))
     (home-page "https://hackage.haskell.org/package/data-hash")
     (synopsis "Combinators for building fast hashing functions")
     (description
@@ -3145,37 +3015,37 @@ It includes hashing functions for all basic Haskell98 types.")
 (define-public ghc-dbus
   (package
     (name "ghc-dbus")
-    (version "1.2.7")
+    (version "1.2.17")
     (source
       (origin
         (method url-fetch)
         (uri
          (string-append
-          "mirror://hackage/package/dbus/dbus-"
+          "https://hackage.haskell.org/package/dbus/dbus-"
           version ".tar.gz"))
         (sha256
           (base32
-            "0ypkjlw9fn65g7p28kb3p82glk7qs7p7vyffccw7qxa3z57s12w5"))))
-    (build-system haskell-build-system)
-    (inputs
-      `(("ghc-cereal" ,ghc-cereal)
-        ("ghc-conduit" ,ghc-conduit)
-        ("ghc-exceptions" ,ghc-exceptions)
-        ("ghc-lens" ,ghc-lens)
-        ("ghc-network" ,ghc-network)
-        ("ghc-random" ,ghc-random)
-        ("ghc-split" ,ghc-split)
-        ("ghc-th-lift" ,ghc-th-lift)
-        ("ghc-vector" ,ghc-vector)
-        ("ghc-xml-conduit" ,ghc-xml-conduit)
-        ("ghc-xml-types" ,ghc-xml-types)))
-    (native-inputs
-      `(("ghc-extra" ,ghc-extra)
-        ("ghc-quickcheck" ,ghc-quickcheck)
-        ("ghc-resourcet" ,ghc-resourcet)
-        ("ghc-tasty" ,ghc-tasty)
-        ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-        ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+            "0iyfnkxcnm1vl379ry88fqxgn2y8q6ilsvpic6ciassnyv5pcbrv"))))
+    (build-system haskell-build-system)
+    (inputs
+      (list ghc-cereal
+            ghc-conduit
+            ghc-exceptions
+            ghc-lens
+            ghc-network
+            ghc-random
+            ghc-split
+            ghc-th-lift
+            ghc-vector
+            ghc-xml-conduit
+            ghc-xml-types))
+    (native-inputs
+      (list ghc-extra
+            ghc-quickcheck
+            ghc-resourcet
+            ghc-tasty
+            ghc-tasty-hunit
+            ghc-tasty-quickcheck))
     ;; FIXME - Some tests try to talk to network.
     (arguments `(#:tests? #f))
     (home-page "https://github.com/rblaze/haskell-dbus")
@@ -3194,7 +3064,7 @@ interfaces common to foreign bindings.")
 (define-public ghc-decimal
   (package
     (name "ghc-decimal")
-    (version "0.5.1")
+    (version "0.5.2")
     (source
      (origin
        (method url-fetch)
@@ -3204,14 +3074,11 @@ interfaces common to foreign bindings.")
              ".tar.gz"))
        (sha256
         (base32
-         "0k7kh05mr2f54w1lpgq1nln0h8k6s6h99dyp5jzsb9cfbb3aap2p"))))
+         "19w7i9f0lbiyzwa0v3bm95233vi7f1688f0xms6cnjsf88h04ym3"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)))
+     (list ghc-hunit ghc-quickcheck ghc-test-framework
+           ghc-test-framework-quickcheck2 ghc-test-framework-hunit))
     (home-page "https://github.com/PaulJohnson/Haskell-Decimal")
     (synopsis "Decimal numbers with variable precision")
     (description
@@ -3235,11 +3102,9 @@ value.")
     (build-system haskell-build-system)
     (arguments
      `(#:cabal-revision
-       ("4" "0928s2qnbqsjzrm94x88rvmvbigfmhcyp4m73gw6asinp2qg1kii")))
+       ("6" "1qwnpdjsrqzn18pjmvv9aqz3l12fbdcimf62wkj33yfh69rx4s42")))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)))
+     (list ghc-hunit ghc-test-framework ghc-test-framework-hunit))
     (home-page "https://github.com/hvr/deepseq-generics")
     (synopsis "Generic RNF implementation")
     (description
@@ -3263,15 +3128,14 @@ providing an @code{rnf} implementation.")
          "1m7jjxahqxj7ilic3r9806mwp5rnnsmn8vvipkmk40xl65wplxzp"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-math-functions" ,ghc-math-functions)
-       ("ghc-primitive" ,ghc-primitive)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-vector-algorithms" ,ghc-vector-algorithms)
-       ("ghc-vector-th-unbox" ,ghc-vector-th-unbox)
-       ("ghc-vector-binary-instances" ,ghc-vector-binary-instances)))
+     (list ghc-math-functions
+           ghc-primitive
+           ghc-vector
+           ghc-vector-algorithms
+           ghc-vector-th-unbox
+           ghc-vector-binary-instances))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-hspec ghc-quickcheck))
     (home-page "https://hackage.haskell.org/package/dense-linear-algebra")
     (synopsis "Simple and incomplete implementation of linear algebra")
     (description "This library is simply a collection of linear-algebra
@@ -3294,13 +3158,9 @@ related modules split from the statistics library.")
          "0y5693zm2kvqjilybbmrcv1g6n6x2p6zjgi0k0axjw1sdhh1g237"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-bifunctors" ,ghc-bifunctors)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-vector" ,ghc-vector)))
+     (list ghc-aeson ghc-bifunctors ghc-scientific ghc-vector))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-hspec" ,ghc-hspec)))
+     (list ghc-hunit ghc-hspec))
     (home-page
      "https://github.com/chrisdone/descriptive")
     (synopsis
@@ -3313,7 +3173,7 @@ and parsers with useful semantics.")
 (define-public ghc-diagrams-core
   (package
     (name "ghc-diagrams-core")
-    (version "1.4.2")
+    (version "1.5.0")
     (source
      (origin
        (method url-fetch)
@@ -3321,18 +3181,18 @@ and parsers with useful semantics.")
                            "diagrams-core/diagrams-core-" version ".tar.gz"))
        (sha256
         (base32
-         "0qgb43vy23g4fxh3nmxfq6jyp34imqvkhgflaa6rz0iq6d60gl43"))))
+         "0y3smp3hiyfdirdak3j4048cgqv7a5q9p2jb6z8na2llys5mrmdn"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-monoid-extras" ,ghc-monoid-extras)
-       ("ghc-dual-tree" ,ghc-dual-tree)
-       ("ghc-lens" ,ghc-lens)
-       ("ghc-linear" ,ghc-linear)
-       ("ghc-adjunctions" ,ghc-adjunctions)
-       ("ghc-distributive" ,ghc-distributive)
-       ("ghc-profunctors" ,ghc-profunctors)))
+     (list ghc-unordered-containers
+           ghc-semigroups
+           ghc-monoid-extras
+           ghc-dual-tree
+           ghc-lens
+           ghc-linear
+           ghc-adjunctions
+           ghc-distributive
+           ghc-profunctors))
     (home-page "https://archives.haskell.org/projects.haskell.org/diagrams/")
     (synopsis "Core libraries for diagrams embedded domain-specific language")
     (description "This package provides the core modules underlying
@@ -3343,7 +3203,7 @@ declarative drawing.")
 (define-public ghc-diagrams-lib
   (package
     (name "ghc-diagrams-lib")
-    (version "1.4.2.3")
+    (version "1.4.4")
     (source
      (origin
        (method url-fetch)
@@ -3351,40 +3211,38 @@ declarative drawing.")
                            "diagrams-lib/diagrams-lib-" version ".tar.gz"))
        (sha256
         (base32
-         "175yzi5kw4yd8ykdkpf64q85c7j3p89l90m3h6qcsx9ipv6av9r5"))))
-    (build-system haskell-build-system)
-    (inputs
-     `(("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-monoid-extras" ,ghc-monoid-extras)
-       ("ghc-dual-tree" ,ghc-dual-tree)
-       ("ghc-diagrams-core" ,ghc-diagrams-core)
-       ("ghc-diagrams-solve" ,ghc-diagrams-solve)
-       ("ghc-active" ,ghc-active)
-       ("ghc-colour" ,ghc-colour)
-       ("ghc-data-default-class" ,ghc-data-default-class)
-       ("ghc-fingertree" ,ghc-fingertree)
-       ("ghc-intervals" ,ghc-intervals)
-       ("ghc-lens" ,ghc-lens)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-optparse-applicative" ,ghc-optparse-applicative)
-       ("ghc-juicypixels" ,ghc-juicypixels)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-linear" ,ghc-linear)
-       ("ghc-adjunctions" ,ghc-adjunctions)
-       ("ghc-distributive" ,ghc-distributive)
-       ("ghc-fsnotify" ,ghc-fsnotify)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-profunctors" ,ghc-profunctors)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-cereal" ,ghc-cereal)))
-    (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-numeric-extras" ,ghc-numeric-extras)))
+         "09np7kj8si8kcb854f95a0cq392mgbxif8lnazbpfsa1k87d9vzy"))))
+    (build-system haskell-build-system)
+    (inputs
+     (list ghc-semigroups
+           ghc-monoid-extras
+           ghc-dual-tree
+           ghc-diagrams-core
+           ghc-diagrams-solve
+           ghc-active
+           ghc-colour
+           ghc-data-default-class
+           ghc-fingertree
+           ghc-intervals
+           ghc-lens
+           ghc-tagged
+           ghc-optparse-applicative
+           ghc-juicypixels
+           ghc-hashable
+           ghc-linear
+           ghc-adjunctions
+           ghc-distributive
+           ghc-fsnotify
+           ghc-unordered-containers
+           ghc-profunctors
+           ghc-exceptions
+           ghc-cereal))
+    (native-inputs
+     (list ghc-tasty ghc-tasty-hunit ghc-tasty-quickcheck
+           ghc-numeric-extras))
     (arguments
      `(#:cabal-revision
-       ("3" "157y2qdsh0aczs81vzlm377mks976mpv6y3aqnchwsnr7apzp8ai")))
+       ("1" "1c7kpnbvxwdcmk5znqyig3l6s986ppj168ck5v72dfbp8cjvwa8i")))
     (home-page "https://archives.haskell.org/projects.haskell.org/diagrams/")
     (synopsis "Embedded domain-specific language for declarative graphics")
     (description "Diagrams is a flexible, extensible embedded
@@ -3397,7 +3255,7 @@ primitives and operations for creating diagrams.")
 (define-public ghc-diagrams-solve
   (package
     (name "ghc-diagrams-solve")
-    (version "0.1.1")
+    (version "0.1.3")
     (source
      (origin
        (method url-fetch)
@@ -3406,15 +3264,13 @@ primitives and operations for creating diagrams.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "17agchqkmj14b17sw50kzxq4hm056g5d8yy0wnqn5w8h1d0my7x4"))))
+         "09qqwcvbvd3a0j5fnp40dbzw0i3py9c7kgizj2aawajwbyjvpd17"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+     (list ghc-tasty ghc-tasty-hunit ghc-tasty-quickcheck))
     (arguments
      `(#:cabal-revision
-       ("5" "1yl8cs05fzqcz49p601am1ij66m9pa70yamhfxgcvya2pf8nimlf")))
+       ("1" "0dp61igq17l7hvhs3167skdi1vmlm773qrrmsqmj08951l4cgv0h")))
     (home-page "https://archives.haskell.org/projects.haskell.org/diagrams/")
     (synopsis "Pure Haskell solver routines used by diagrams")
     (description "This library provides Pure Haskell solver routines for
@@ -3428,7 +3284,7 @@ and cyclic tridiagonal linear systems.")
 (define-public ghc-diagrams-svg
   (package
     (name "ghc-diagrams-svg")
-    (version "1.4.2")
+    (version "1.4.3")
     (source
      (origin
        (method url-fetch)
@@ -3436,24 +3292,24 @@ and cyclic tridiagonal linear systems.")
                            "diagrams-svg/diagrams-svg-" version ".tar.gz"))
        (sha256
         (base32
-         "1lnyxx45yawqas7hmvvannwaa3ycf1l9g40lsl2m8sl2ja6vcmal"))))
+         "1ysv6cz0fngrndl4wjmw4hrdj2rik5fxa1dkxzwnlgf1xwpvxgk8"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-base64-bytestring" ,ghc-base64-bytestring)
-       ("ghc-colour" ,ghc-colour)
-       ("ghc-diagrams-core" ,ghc-diagrams-core)
-       ("ghc-diagrams-lib" ,ghc-diagrams-lib)
-       ("ghc-monoid-extras" ,ghc-monoid-extras)
-       ("ghc-svg-builder" ,ghc-svg-builder)
-       ("ghc-juicypixels" ,ghc-juicypixels)
-       ("ghc-split" ,ghc-split)
-       ("ghc-lens" ,ghc-lens)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-optparse-applicative" ,ghc-optparse-applicative)
-       ("ghc-semigroups" ,ghc-semigroups)))
+     (list ghc-base64-bytestring
+           ghc-colour
+           ghc-diagrams-core
+           ghc-diagrams-lib
+           ghc-monoid-extras
+           ghc-svg-builder
+           ghc-juicypixels
+           ghc-split
+           ghc-lens
+           ghc-hashable
+           ghc-optparse-applicative
+           ghc-semigroups))
     (arguments
      `(#:cabal-revision
-       ("2" "15sn85xaachw4cj56w61bjcwrbf4qmnkfl8mbgdapxi5k0y4f2qv")))
+       ("4" "0irjf0g1barr06fy409r0ld2hypihrhh6n80ig3487xxny6gfzs0")))
     (home-page "https://archives.haskell.org/projects.haskell.org/diagrams/")
     (synopsis "Scalable Vector Grpahics backend for the diagrams framework")
     (description "This package provides a modular backend for rendering
@@ -3487,20 +3343,18 @@ members are shared.")
 (define-public ghc-diff
   (package
     (name "ghc-diff")
-    (version "0.3.4")
+    (version "0.4.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://hackage.haskell.org/package/"
                                   "Diff/Diff-" version ".tar.gz"))
-              (patches (search-patches "ghc-diff-swap-cover-args.patch"))
               (sha256
                (base32
-                "0bqcdvhxx8dmqc3793m6axg813wv9ldz2j37f1wygbbrbbndmdvp"))))
+                "1is9y5rlqyxacnj6kbi6h9laym5shp699r0hkj5p9d6qi84sr43j"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)))
+     (list ghc-quickcheck ghc-test-framework
+           ghc-test-framework-quickcheck2))
     (home-page "https://hub.darcs.net/sterlingclover/Diff")
     (synopsis "O(ND) diff algorithm in Haskell")
     (description
@@ -3531,7 +3385,7 @@ disk space usage.")
 (define-public ghc-distributive
   (package
     (name "ghc-distributive")
-    (version "0.6.2")
+    (version "0.6.2.1")
     (source
      (origin
        (method url-fetch)
@@ -3541,19 +3395,13 @@ disk space usage.")
              ".tar.gz"))
        (sha256
         (base32
-         "1j93zkfffm6s16kgr0j0z87y5ds28rw0r2gyc5ncwcylvrqy4kl2"))))
+         "14bb66qyfn43bj688igfvnfjw7iycjf4n2k38sm8rxbqw2916dfp"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-tagged" ,ghc-tagged)
-       ("ghc-base-orphans" ,ghc-base-orphans)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-generic-deriving" ,ghc-generic-deriving)))
+     (list ghc-tagged ghc-base-orphans ghc-transformers-compat
+           ghc-semigroups ghc-generic-deriving))
     (native-inputs
-     `(("cabal-doctest" ,cabal-doctest)
-       ("ghc-doctest" ,ghc-doctest)
-       ("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)))
+     (list cabal-doctest ghc-doctest ghc-hspec hspec-discover))
     (home-page "https://github.com/ekmett/distributive/")
     (synopsis "Distributive functors for Haskell")
     (description "This package provides distributive functors for Haskell.
@@ -3563,7 +3411,7 @@ Dual to @code{Traversable}.")
 (define-public ghc-dlist
   (package
     (name "ghc-dlist")
-    (version "0.8.0.7")
+    (version "1.0")
     (source
      (origin
        (method url-fetch)
@@ -3572,10 +3420,10 @@ Dual to @code{Traversable}.")
              version
              ".tar.gz"))
        (sha256
-        (base32 "0b5spkzvj2kx8pk86xz0djkxs13j7dryf5fl16dk4mlp1wh6mh53"))))
+        (base32 "0581a60xw4gw7pmqlmg5w2hr4hm9yjgx4c2z6v63y5xv51rn6g8p"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-quickcheck))
     (home-page "https://github.com/spl/dlist")
     (synopsis "Difference lists")
     (description
@@ -3587,7 +3435,7 @@ Writer monad), where list append quickly becomes too expensive.")
 (define-public ghc-doctemplates
   (package
     (name "ghc-doctemplates")
-    (version "0.2.2.1")
+    (version "0.9")
     (source
      (origin
        (method url-fetch)
@@ -3596,17 +3444,20 @@ Writer monad), where list append quickly becomes too expensive.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "1gyckfg3kgvzhxw14i7iwrw0crygvsp86sy53bbr1yn7bxbgn33b"))))
+         "048h8ka849h1f0xxwkasjbrrwq03rfz2m7aqg5xc5286kp02w9ns"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-blaze-markup" ,ghc-blaze-markup)
-       ("ghc-blaze-html" ,ghc-blaze-html)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-scientific" ,ghc-scientific)))
+     (list ghc-aeson
+           ghc-doclayout
+           ghc-hsyaml
+           ghc-safe
+           ghc-scientific
+           ghc-text-conversions
+           ghc-unordered-containers
+           ghc-vector))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)))
+     (list ghc-glob ghc-tasty ghc-tasty-golden ghc-tasty-hunit
+           ghc-temporary))
     (home-page "https://github.com/jgm/doctemplates#readme")
     (synopsis "Pandoc-style document templates")
     (description
@@ -3616,7 +3467,7 @@ Writer monad), where list append quickly becomes too expensive.")
 (define-public ghc-doctest
   (package
     (name "ghc-doctest")
-    (version "0.16.2")
+    (version "0.17")
     (source
      (origin
        (method url-fetch)
@@ -3626,22 +3477,19 @@ Writer monad), where list append quickly becomes too expensive.")
              ".tar.gz"))
        (sha256
         (base32
-         "0lk4cjfzi5bx2snfzw1zi06li0gvgz3ckfh2kwa98l7nxfdl39ag"))))
+         "0f0knggq6yjcznyri35fll619q5jr8vcsbiyvdiz4prkawhaa4pz"))))
     (build-system haskell-build-system)
     (arguments `(#:tests? #f))          ; FIXME: missing test framework
     (inputs
-     `(("ghc-base-compat" ,ghc-base-compat)
-       ("ghc-code-page" ,ghc-code-page)
-       ("ghc-paths" ,ghc-paths)
-       ("ghc-syb" ,ghc-syb)))
-    (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-mockery" ,ghc-mockery)
-       ("ghc-setenv" ,ghc-setenv)
-       ("ghc-silently" ,ghc-silently)
-       ("ghc-stringbuilder" ,ghc-stringbuilder)))
+     (list ghc-base-compat ghc-code-page ghc-paths ghc-syb))
+    (native-inputs
+     (list ghc-hunit
+           ghc-quickcheck
+           ghc-hspec
+           ghc-mockery
+           ghc-setenv
+           ghc-silently
+           ghc-stringbuilder))
     (home-page
      "https://github.com/sol/doctest#readme")
     (synopsis "Test interactive Haskell examples")
@@ -3653,17 +3501,17 @@ It is modeled after doctest for Python, see
 (define-public ghc-dotgen
   (package
     (name "ghc-dotgen")
-    (version "0.4.2")
+    (version "0.4.3")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
-             "mirror://hackage/package/dotgen/dotgen-"
+             "https://hackage.haskell.org/package/dotgen/dotgen-"
              version
              ".tar.gz"))
        (sha256
         (base32
-         "148q93qsmqgr5pzdwvpjqfd6bdm1pwzcp2rblfwswx2x8c5f43fg"))))
+         "1jcn5m9342jrdq7jln2v9msf9978ngrx0pq9rrjh8izhvbvph76s"))))
     (build-system haskell-build-system)
     (home-page "https://github.com/ku-fpg/dotgen")
     (synopsis
@@ -3689,10 +3537,8 @@ monadic interface for building graphs.")
          "0sx2kc1gw72mjvd8vph8bbjw5whfxfv92rsdhjg1c0al75rf3ka4"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)))
+     (list ghc-hunit ghc-test-framework ghc-test-framework-hunit
+           ghc-test-framework-quickcheck2))
     (home-page "https://github.com/bos/double-conversion")
     (synopsis "Fast conversion between double precision floating point and text")
     (description
@@ -3703,7 +3549,7 @@ between double precision floating point and text.")
 (define-public ghc-dual-tree
   (package
     (name "ghc-dual-tree")
-    (version "0.2.2.1")
+    (version "0.2.3.0")
     (source
      (origin
        (method url-fetch)
@@ -3711,15 +3557,17 @@ between double precision floating point and text.")
                            "dual-tree/dual-tree-" version ".tar.gz"))
        (sha256
         (base32
-         "17kdfnf0df0z5pkiifxrlmyd1xd7hjjaazd2kzyajl0gd00vbszx"))))
+         "0qyn7kb42wvlcvb1wbf1qx3isc2y6k3hzp5iq6ab0r0llw9g6qlg"))))
     (build-system haskell-build-system)
+    (arguments
+     `(#:tests? #f ; TODO: ghc-testing-feat does not build.
+       #:cabal-revision
+       ("1" "1babd7ybsgk73x57yl35q0n1i7mbbqmv4am710kq1hzg3in4g9dv")))
     (inputs
-     `(("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-newtype-generics" ,ghc-newtype-generics)
-       ("ghc-monoid-extras" ,ghc-monoid-extras)))
-    (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-testing-feat" ,ghc-testing-feat)))
+     (list ghc-semigroups ghc-newtype-generics ghc-monoid-extras))
+;    (native-inputs
+;     `(("ghc-quickcheck" ,ghc-quickcheck)
+;       ("ghc-testing-feat" ,ghc-testing-feat)))
     (home-page "https://hackage.haskell.org/package/dual-tree")
     (synopsis "Rose trees with cached and accumulating monoidal annotations")
     (description "Rose (@math{n}-ary) trees with both upwards- (i.e.
@@ -3763,7 +3611,7 @@ diagrams framework}, but potentially has other applications as well.")
        (sha256
         (base32 "18kndgvdj2apjpfga6fp7m16y1gx8zrwp3c5vfj03sx4v6jvciqk"))))
     (build-system haskell-build-system)
-    (propagated-inputs `(("gnuplot" ,gnuplot)))
+    (propagated-inputs (list gnuplot))
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (add-after 'unpack 'fix-setup-suffix
@@ -3777,7 +3625,7 @@ Haskell, using gnuplot for rendering.")
 (define-public ghc-echo
   (package
     (name "ghc-echo")
-    (version "0.1.3")
+    (version "0.1.4")
     (source
      (origin
        (method url-fetch)
@@ -3786,7 +3634,7 @@ Haskell, using gnuplot for rendering.")
              version ".tar.gz"))
        (sha256
         (base32
-         "1vw5ykpwhr39wc0hhcgq3r8dh59zq6ib4zxbz1qd2wl21wqhfkvh"))))
+         "0hqfdd4kvpp59cjjv790bkf72yqr9xjfqlbjcrdsc9a8j3r1pzn9"))))
     (build-system haskell-build-system)
     (arguments
      `(#:cabal-revision
@@ -3800,53 +3648,6 @@ This library provides an alternative interface which works with both
 MinTTY and other consoles.")
     (license license:bsd-3)))
 
-(define-public ghc-edisonapi
-  (package
-    (name "ghc-edisonapi")
-    (version "1.3.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/EdisonAPI"
-                           "/EdisonAPI-" version ".tar.gz"))
-       (sha256
-        (base32 "0vmmlsj8ggbpwx6fkf5fvb6jp0zpx6iba6b28m80lllr2p8bi8wm"))))
-    (build-system haskell-build-system)
-    (home-page "http://rwd.rdockins.name/edison/home/")
-    (synopsis "Library of efficient, purely-functional data structures (API)")
-    (description
-     "Edison is a library of purely functional data structures written by
-Chris Okasaki.  It is named after Thomas Alva Edison and for the mnemonic
-value EDiSon (Efficient Data Structures).  Edison provides several families of
-abstractions, each with multiple implementations.  The main abstractions
-provided by Edison are: Sequences such as stacks, queues, and dequeues;
-Collections such as sets, bags and heaps; and Associative Collections such as
-finite maps and priority queues where the priority and element are distinct.")
-    (license license:expat)))
-
-(define-public ghc-edisoncore
-  (package
-    (name "ghc-edisoncore")
-    (version "1.3.2.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/EdisonCore"
-                           "/EdisonCore-" version ".tar.gz"))
-       (sha256
-        (base32 "0fgj5iwiv3v2gdgx7kjcr15dcs4x1kvmjspp3p99wyhh0x6h3ikk"))))
-    (build-system haskell-build-system)
-    (inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-edisonapi" ,ghc-edisonapi)))
-    (home-page "http://rwd.rdockins.name/edison/home/")
-    (synopsis "Library of efficient, purely-functional data structures")
-    (description
-     "This package provides the core Edison data structure implementations,
-including multiple sequence, set, bag, and finite map concrete implementations
-with various performance characteristics.")
-    (license license:expat)))
-
 (define-public ghc-edit-distance
   (package
     (name "ghc-edit-distance")
@@ -3860,18 +3661,12 @@ with various performance characteristics.")
         (base32 "0jkca97zyv23yyilp3jydcrzxqhyk27swhzh82llvban5zp8b21y"))))
     (build-system haskell-build-system)
     (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'update-constraints
-           (lambda _
-             (substitute* "edit-distance.cabal"
-               (("QuickCheck >= 2\\.4 && <2\\.9")
-                "QuickCheck >= 2.4 && < 2.14")))))))
-    (inputs
-     `(("ghc-random" ,ghc-random)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)))
+     `(#:tests? #f ; TODO: Needs quickcheck<2.10
+       #:cabal-revision
+       ("1" "1vjn4ryzdilz7l1ad7czh11nw48h5mj8if7ij3q0mmc3sffa8csd")))
+    (inputs
+     (list ghc-random ghc-test-framework ghc-quickcheck
+           ghc-test-framework-quickcheck2))
     (home-page "https://github.com/phadej/edit-distance")
     (synopsis "Levenshtein and restricted Damerau-Levenshtein edit distances")
     (description
@@ -3895,10 +3690,9 @@ Damerau-Levenshtein algorithms.")
          "07qgc8dyi9kkzkd3xcd78wdlljy0xwhz65b4r2qg2piidpcdvpxp"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-vector" ,ghc-vector)))
+     (list ghc-vector))
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-quickcheck-instances" ,ghc-quickcheck-instances)))
+     (list ghc-quickcheck ghc-quickcheck-instances))
     (home-page "https://github.com/thsutton/edit-distance-vector")
     (synopsis "Calculate edit distances and edit scripts between vectors")
     (description "This package provides implementation of the
@@ -3927,6 +3721,9 @@ but is otherwise agnostic to:
         (base32
          "09yzki8ss56xhy9vggdw1rls86b2kf55hjl5wi0vbv02d8fxahq2"))))
     (build-system haskell-build-system)
+    (arguments
+     `(#:cabal-revision
+       ("1" "03bgnq55lc6f1nx4p662gidfsyyfm3xm4fi84h77wnsppxrpa5j1")))
     (inputs `(("ghc-bifunctors" ,ghc-bifunctors)
               ("ghc-exceptions" ,ghc-exceptions)
               ("ghc-free" ,ghc-free)
@@ -3938,9 +3735,8 @@ but is otherwise agnostic to:
               ("ghc-semigroupoids" ,ghc-semigroupoids)
               ("ghc-transformers-base" ,ghc-transformers-base)))
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)))
+     (list ghc-quickcheck ghc-test-framework
+           ghc-test-framework-quickcheck2))
     (home-page "https://github.com/ekmett/either")
     (synopsis "Provides an either monad transformer for Haskell")
     (description "This Haskell package provides an either monad transformer.")
@@ -3949,7 +3745,7 @@ but is otherwise agnostic to:
 (define-public ghc-email-validate
   (package
     (name "ghc-email-validate")
-    (version "2.3.2.12")
+    (version "2.3.2.15")
     (source
      (origin
        (method url-fetch)
@@ -3960,13 +3756,10 @@ but is otherwise agnostic to:
              ".tar.gz"))
        (sha256
         (base32
-         "0ar3cfjia3x11chb7w60mi7hp5djanms883ddk875l6lifr2lyqf"))))
+         "0n67wss6k8lhwfkybkhsa04bbdfdv541sacbxlylkx2hqpj5r5gh"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-doctest" ,ghc-doctest)))
+     (list ghc-attoparsec ghc-hspec ghc-quickcheck ghc-doctest))
     (home-page
      "https://github.com/Porges/email-validate-hs")
     (synopsis "Email address validator for Haskell")
@@ -3992,13 +3785,10 @@ address string against RFC 5322.")
     ;; "thread blocked indefinitely in an MVar operation"
     (arguments '(#:tests? #f))
     (inputs
-     `(("ghc-lifted-base" ,ghc-lifted-base)
-       ("ghc-monad-control" ,ghc-monad-control)
-       ("ghc-async" ,ghc-async)
-       ("ghc-transformers-base" ,ghc-transformers-base)))
+     (list ghc-lifted-base ghc-monad-control ghc-async
+           ghc-transformers-base))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-hspec ghc-quickcheck))
     (home-page "https://github.com/jcristovao/enclosed-exceptions")
     (synopsis "Catch all exceptions from within an enclosed computation")
     (description
@@ -4020,10 +3810,8 @@ asynchronous exceptions.")
         (base32 "167njzd1cf32aa7br90rjafrxy6hw3fxkk8awifqbxjrcwm5maqp"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-stmonadtrans" ,ghc-stmonadtrans)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)
-       ("ghc-fail" ,ghc-fail)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-stmonadtrans ghc-transformers-compat ghc-fail
+           ghc-quickcheck))
     (home-page "https://github.com/pa-ba/equivalence")
     (synopsis "Maintaining an equivalence relation implemented as union-find")
     (description
@@ -4070,11 +3858,9 @@ Double.")
          "0hqw82m8bbrxy5vgdwb83bhzdx070ibqrm9rshyja7cb808ahijm"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-base-orphans" ,ghc-base-orphans)))
+     (list ghc-base-orphans))
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-quickcheck ghc-hspec hspec-discover))
     (home-page "https://hackage.haskell.org/package/errorcall-eq-instance")
     (synopsis "Orphan Eq instance for ErrorCall")
     (description
@@ -4097,10 +3883,8 @@ This package provides an orphan instance.")
          "0x8znwn31qcx6kqx99wp7bc86kckfb39ncz3zxvj1s07kxlfawk7"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)
-       ("ghc-unexceptionalio" ,ghc-unexceptionalio)
-       ("ghc-safe" ,ghc-safe)))
+     (list ghc-exceptions ghc-transformers-compat ghc-unexceptionalio
+           ghc-safe))
     (home-page "https://github.com/gabriel439/haskell-errors-library")
     (synopsis "Error handling library for Haskell")
     (description "This library encourages an error-handling style that
@@ -4110,7 +3894,7 @@ directly uses the type system, rather than out-of-band exceptions.")
 (define-public ghc-esqueleto
   (package
     (name "ghc-esqueleto")
-    (version "3.3.1.1")
+    (version "3.5.3.0")
     (source
      (origin
        (method url-fetch)
@@ -4118,46 +3902,33 @@ directly uses the type system, rather than out-of-band exceptions.")
                            "esqueleto/esqueleto-" version ".tar.gz"))
        (sha256
         (base32
-         "1qi28ma8j5kfygjxnixlazxsyrkdqv8ljz3icwqi5dlscsnj6v3v"))))
+         "0z3cf49sha6q965qw2m08jfmb91ki2rsdpnr7l39lka5b4ffxjlz"))))
     (build-system haskell-build-system)
     (arguments
-     `(#:haddock? #f  ; Haddock reports an internal error.
-       #:phases
-       (modify-phases %standard-phases
-         ;; This package normally runs tests for the MySQL, PostgreSQL, and
-         ;; SQLite backends.  Since we only have Haskell packages for
-         ;; SQLite, we remove the other two test suites.  FIXME: Add the
-         ;; other backends and run all three test suites.
-         (add-before 'configure 'remove-non-sqlite-test-suites
-           (lambda _
-             (use-modules (ice-9 rdelim))
-             (with-atomic-file-replacement "esqueleto.cabal"
-               (lambda (in out)
-                 (let loop ((line (read-line in 'concat)) (deleting? #f))
-                   (cond
-                    ((eof-object? line) #t)
-                    ((string-every char-set:whitespace line)
-                     (unless deleting? (display line out))
-                     (loop (read-line in 'concat) #f))
-                    ((member line '("test-suite mysql\n"
-                                    "test-suite postgresql\n"))
-                     (loop (read-line in 'concat) #t))
-                    (else
-                     (unless deleting? (display line out))
-                     (loop (read-line in 'concat) deleting?)))))))))))
-    (inputs
-     `(("ghc-blaze-html" ,ghc-blaze-html)
-       ("ghc-conduit" ,ghc-conduit)
-       ("ghc-monad-logger" ,ghc-monad-logger)
-       ("ghc-persistent" ,ghc-persistent)
-       ("ghc-resourcet" ,ghc-resourcet)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-unliftio" ,ghc-unliftio)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)))
-    (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-persistent-sqlite" ,ghc-persistent-sqlite)
-       ("ghc-persistent-template" ,ghc-persistent-template)))
+     `(#:tests? #f))  ; TODO: Cannot connect to mysql server.
+    (inputs
+     (list ghc-aeson
+           ghc-attoparsec
+           ghc-blaze-html
+           ghc-conduit
+           ghc-monad-logger
+           ghc-persistent
+           ghc-resourcet
+           ghc-tagged
+           ghc-unliftio
+           ghc-unordered-containers
+           openssl
+           zlib))
+    (native-inputs
+     (list ghc-hspec-core
+           ghc-hspec
+           ghc-mysql
+           ghc-mysql-simple
+           ghc-persistent-mysql
+           ghc-persistent-postgresql
+           ghc-persistent-sqlite
+           ghc-postgresql-simple
+           ghc-quickcheck))
     (home-page "https://github.com/bitemyapp/esqueleto")
     (synopsis "Type-safe embedded domain specific language for SQL queries")
     (description "This library provides a type-safe embedded domain specific
@@ -4170,7 +3941,7 @@ generated SQL and optimize it for your backend.")
 (define-public ghc-exactprint
   (package
     (name "ghc-exactprint")
-    (version "0.6.1")
+    (version "0.6.4")
     (source
      (origin
        (method url-fetch)
@@ -4179,17 +3950,12 @@ generated SQL and optimize it for your backend.")
              "ghc-exactprint/ghc-exactprint-" version ".tar.gz"))
        (sha256
         (base32
-         "12nqpqmi9c57a3hgpfy8q073zryz66ylmcvf29hyffpj7vmmnvhl"))))
+         "0a6baza962d4pz2m02hxmh8234i47zkizmwhsy68namr05dmlgpw"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-paths" ,ghc-paths)
-       ("ghc-syb" ,ghc-syb)
-       ("ghc-free" ,ghc-free)))
+     (list ghc-paths ghc-syb ghc-free))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-diff" ,ghc-diff)
-       ("ghc-silently" ,ghc-silently)
-       ("ghc-filemanip" ,ghc-filemanip)))
+     (list ghc-hunit ghc-diff ghc-silently ghc-filemanip))
     (home-page
      "https://hackage.haskell.org/package/ghc-exactprint")
     (synopsis "ExactPrint for GHC")
@@ -4202,7 +3968,7 @@ excluding @file{.lhs} files.")
 (define-public ghc-exceptions
   (package
     (name "ghc-exceptions")
-    (version "0.10.3")
+    (version "0.10.4")
     (source
      (origin
        (method url-fetch)
@@ -4212,15 +3978,16 @@ excluding @file{.lhs} files.")
              ".tar.gz"))
        (sha256
         (base32
-         "1w25j4ys5s6v239vbqlbipm9fdwxl1j2ap2lzms7f7rgnik5ir24"))))
+         "1kw4pmx7j7zwbdwm0dyn9rcs6kp4byfxy48861yxdz6gam1zn2sd"))))
     (build-system haskell-build-system)
+    (arguments
+     `(#:cabal-revision
+       ("2" "1154g0dqil2xf4wc1v6gndzhnbf5saf2dzf77c6lcjxssx360m6j")))
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)))
+     (list ghc-quickcheck ghc-test-framework ghc-test-framework-hunit
+           ghc-test-framework-quickcheck2))
     (inputs
-     `(("ghc-transformers-compat" ,ghc-transformers-compat)))
+     (list ghc-transformers-compat))
     (home-page "https://github.com/ekmett/exceptions/")
     (synopsis "Extensible optionally-pure exceptions")
     (description "This library provides extensible optionally-pure exceptions
@@ -4272,7 +4039,7 @@ versions of GHC (i.e., < 6.10).")
 (define-public ghc-extra
   (package
     (name "ghc-extra")
-    (version "1.6.21")
+    (version "1.7.9")
     (source
      (origin
        (method url-fetch)
@@ -4282,13 +4049,11 @@ versions of GHC (i.e., < 6.10).")
              ".tar.gz"))
        (sha256
         (base32
-         "1gjx98w4w61g043k6rzc8i34cbxpcigi8lb6i7pp1vwp8w8jm5vl"))))
+         "17fzmxwrv0w7inhq7kia36prc2nsx845r9v56sihqvr17fk2cvpn"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-clock" ,ghc-clock)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-quickcheck-instances" ,ghc-quickcheck-instances)))
+     (list ghc-clock ghc-semigroups ghc-quickcheck
+           ghc-quickcheck-instances))
     (home-page "https://github.com/ndmitchell/extra")
     (synopsis "Extra Haskell functions")
     (description "This library provides extra functions for the standard
@@ -4325,7 +4090,7 @@ when used with GHC versions which already provide the
 (define-public ghc-fast-logger
   (package
     (name "ghc-fast-logger")
-    (version "2.4.17")
+    (version "3.0.5")
     (source
      (origin
        (method url-fetch)
@@ -4335,16 +4100,12 @@ when used with GHC versions which already provide the
              ".tar.gz"))
        (sha256
         (base32
-         "02mxb1ckvx1s2r2m11l5i2l5rdl7232p0f61af6773haykjp0qxk"))))
+         "1mbnah6n8lig494523czcd95dfn01f438qai9pf20wpa2gdbz4x6"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-auto-update" ,ghc-auto-update)
-       ("ghc-easy-file" ,ghc-easy-file)
-       ("ghc-unix-time" ,ghc-unix-time)
-       ("ghc-unix-compat" ,ghc-unix-compat)))
+     (list ghc-auto-update ghc-easy-file ghc-unix-time ghc-unix-compat))
     (native-inputs
-     `(("hspec-discover" ,hspec-discover)
-       ("ghc-hspec" ,ghc-hspec)))
+     (list hspec-discover ghc-hspec))
     (home-page "https://hackage.haskell.org/package/fast-logger")
     (synopsis "Fast logging system")
     (description "This library provides a fast logging system for Haskell.")
@@ -4353,7 +4114,7 @@ when used with GHC versions which already provide the
 (define-public ghc-feed
   (package
     (name "ghc-feed")
-    (version "1.2.0.1")
+    (version "1.3.2.0")
     (source
      (origin
        (method url-fetch)
@@ -4361,22 +4122,26 @@ when used with GHC versions which already provide the
                            "feed/feed-" version ".tar.gz"))
        (sha256
         (base32
-         "004lwdng4slj6yl8mgscr3cgj0zzc8hzkf4450dby2l6cardg4w0"))))
+         "0kv3vx3njqlhwvkmf12m1gmwl8jj97kfa60da2362vwdavhcf4dk"))))
     (build-system haskell-build-system)
+    (arguments `(#:tests? #f)) ; TODO: Fail.
     (inputs
-     `(("ghc-base-compat" ,ghc-base-compat)
-       ("ghc-old-locale" ,ghc-old-locale)
-       ("ghc-old-time" ,ghc-old-time)
-       ("ghc-safe" ,ghc-safe)
-       ("ghc-time-locale-compat" ,ghc-time-locale-compat)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("ghc-xml-conduit" ,ghc-xml-conduit)
-       ("ghc-xml-types" ,ghc-xml-types)))
+     (list ghc-base-compat
+           ghc-old-locale
+           ghc-old-time
+           ghc-safe
+           ghc-time-locale-compat
+           ghc-utf8-string
+           ghc-xml-conduit
+           ghc-xml-types))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-markdown-unlit" ,ghc-markdown-unlit)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)))
+     (list ghc-doctest-driver-gen
+           ghc-doctest
+           ghc-hunit
+           ghc-markdown-unlit
+           ghc-syb
+           ghc-test-framework
+           ghc-test-framework-hunit))
     (home-page "https://github.com/bergmark/feed")
     (synopsis "Haskell package for handling various syndication formats")
     (description "This Haskell package includes tools for generating and
@@ -4386,7 +4151,7 @@ consuming feeds in both RSS (Really Simple Syndication) and Atom format.")
 (define-public ghc-fgl
   (package
     (name "ghc-fgl")
-    (version "5.7.0.1")
+    (version "5.7.0.3")
     (outputs '("out" "static" "doc"))
     (source
      (origin
@@ -4397,7 +4162,7 @@ consuming feeds in both RSS (Really Simple Syndication) and Atom format.")
              ".tar.gz"))
        (sha256
         (base32
-         "04793yh778ck3kz1z2svnfdwwls2kisbnky4lzvf4zjfgpv7mkpz"))))
+         "04k5grp5d381wkc7sxgcl0sd3z3nlm6l6mmh103vhzh6p49vhs99"))))
     (build-system haskell-build-system)
     (arguments
      `(#:phases
@@ -4410,8 +4175,7 @@ consuming feeds in both RSS (Really Simple Syndication) and Atom format.")
                (("hspec >= 2\\.1 && < 2\\.7")
                 "hspec >= 2.1 && < 2.8")))))))
     (inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-hspec ghc-quickcheck))
     (home-page "https://web.engr.oregonstate.edu/~erwig/fgl/haskell")
     (synopsis
      "Martin Erwig's Functional Graph Library")
@@ -4424,7 +4188,7 @@ encourages inductive, recursive definitions of graph algorithms.")
 (define-public ghc-fgl-arbitrary
   (package
     (name "ghc-fgl-arbitrary")
-    (version "0.2.0.3")
+    (version "0.2.0.6")
     (source
      (origin
        (method url-fetch)
@@ -4433,22 +4197,10 @@ encourages inductive, recursive definitions of graph algorithms.")
              version ".tar.gz"))
        (sha256
         (base32
-         "0ln1szgfy8fa78l3issq4fx3aqnnd54w3cb4wssrfi48vd5rkfjm"))))
+         "1mykbd1r43gpsn10ys8q3nr0i4wnhn6wq23hcici18mxxji11wkc"))))
     (build-system haskell-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'update-constraints
-           (lambda _
-             (substitute* "fgl-arbitrary.cabal"
-               (("QuickCheck >= 2\\.3 && < 2\\.10")
-                "QuickCheck >= 2.3 && < 2.14")
-               (("hspec >= 2\\.1 && < 2\\.5")
-                "hspec >= 2.1 && < 2.8")))))))
     (inputs
-     `(("ghc-fgl" ,ghc-fgl)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-hspec" ,ghc-hspec)))
+     (list ghc-fgl ghc-quickcheck ghc-hspec))
     (home-page "https://hackage.haskell.org/package/fgl-arbitrary")
     (synopsis "QuickCheck support for fgl")
     (description
@@ -4461,7 +4213,7 @@ for generating graph-like data structures.")
 (define-public ghc-file-embed
   (package
     (name "ghc-file-embed")
-    (version "0.0.11")
+    (version "0.0.15.0")
     (source
      (origin
        (method url-fetch)
@@ -4469,7 +4221,7 @@ for generating graph-like data structures.")
                            "file-embed-" version ".tar.gz"))
        (sha256
         (base32
-         "0l6dkwccbzzyx8rcav03lya2334dgi3vfwk96h7l93l0fc4x19gf"))))
+         "1pavxj642phrkq67620g10wqykjfhmm9yj2rm8pja83sadfvhrph"))))
     (build-system haskell-build-system)
     (home-page "https://github.com/snoyberg/file-embed")
     (synopsis "Use Template Haskell to embed file contents directly")
@@ -4492,7 +4244,7 @@ embedded in your Haskell code.")
                 "0ilqr8jv41zxcj5qyicg29m8s30b9v70x6f9h2h2rw5ap8bxldl8"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-unix-compat" ,ghc-unix-compat)))
+     (list ghc-unix-compat))
     (home-page "https://github.com/bos/filemanip")
     (synopsis "File and directory manipulation for Haskell")
     (description
@@ -4504,7 +4256,7 @@ file contents, and more.")
 (define-public ghc-filepath-bytestring
   (package
     (name "ghc-filepath-bytestring")
-    (version "1.4.2.1.6")
+    (version "1.4.2.1.8")
     (source
      (origin
        (method url-fetch)
@@ -4513,10 +4265,10 @@ file contents, and more.")
               "filepath-bytestring-" version ".tar.gz"))
        (sha256
         (base32
-         "11xrrzdkm5i96dazbz0gi1qp8nnj2lwbnxzwy7f4cnahskz4f4g7"))))
+         "0qrrvbjpjsk75ghqrdqzwqg7wjgm3rr9kk7p04ax98ilv90pm0ip"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-quickcheck))
     (home-page "https://hackage.haskell.org/package/filepath-bytestring")
     (synopsis "Library for manipulating RawFilePaths in a cross-platform way")
     (description "This package provides a drop-in replacement for the standard
@@ -4562,11 +4314,8 @@ an executable.")
          "0zvandj8fysck7ygpn0dw5bhrhmj1s63i326nalxbfkh2ls4iacm"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)))
+     (list ghc-hunit ghc-quickcheck ghc-test-framework
+           ghc-test-framework-hunit ghc-test-framework-quickcheck2))
     (home-page "https://hackage.haskell.org/package/fingertree")
     (synopsis "Generic finger-tree structure")
     (description "This library provides finger trees, a general sequence
@@ -4619,7 +4368,7 @@ arithmetic.")
 (define-public ghc-fmlist
   (package
     (name "ghc-fmlist")
-    (version "0.9.3")
+    (version "0.9.4")
     (source
      (origin
        (method url-fetch)
@@ -4629,7 +4378,7 @@ arithmetic.")
          version ".tar.gz"))
        (sha256
         (base32
-         "1w9nhm2zybdx4c1lalkajwqr8wcs731lfjld2r8gknd7y96x8pwf"))))
+         "19h95ph7lh7llw6j1v1rssrdi5k7xw8x0iac9rgzss371s2w3g9d"))))
     (build-system haskell-build-system)
     (home-page "https://github.com/sjoerdvisscher/fmlist")
     (synopsis "FoldMap lists")
@@ -4643,7 +4392,7 @@ completely unverified though.")
 (define-public ghc-foldl
   (package
     (name "ghc-foldl")
-    (version "1.4.5")
+    (version "1.4.12")
     (source
      (origin
        (method url-fetch)
@@ -4652,20 +4401,20 @@ completely unverified though.")
                            "foldl-" version ".tar.gz"))
        (sha256
         (base32
-         "19qjmzc7gaxfwgqbgy0kq4vhbxvh3qjnwsxnc7pzwws2if5bv80b"))))
+         "0zf4yljh3s2ddxa7dhzdglmylj14kfldhkclc44g37zvjq6kcnag"))))
     (build-system haskell-build-system)
     (outputs '("out" "static" "doc"))
-    (inputs `(("ghc-mwc-randam" ,ghc-mwc-random)
-              ("ghc-primitive" ,ghc-primitive)
-              ("ghc-vector" ,ghc-vector)
-              ("ghc-unordered-containers" ,ghc-unordered-containers)
-              ("ghc-hashable" ,ghc-hashable)
-              ("ghc-contravariant" ,ghc-contravariant)
-              ("ghc-semigroups" ,ghc-semigroups)
-              ("ghc-profunctors" ,ghc-profunctors)
-              ("ghc-semigroupoids" ,ghc-semigroupoids)
-              ("ghc-comonad" ,ghc-comonad)
-              ("ghc-vector-builder" ,ghc-vector-builder)))
+    (inputs (list ghc-comonad
+                  ghc-contravariant
+                  ghc-hashable
+                  ghc-primitive
+                  ghc-profunctors
+                  ghc-random
+                  ghc-semigroupoids
+                  ghc-semigroups
+                  ghc-unordered-containers
+                  ghc-vector))
+    (native-inputs (list ghc-doctest))
     (home-page "https://github.com/Gabriel439/Haskell-Foldl-Library")
     (synopsis "Composable, streaming, and efficient left folds for Haskell")
     (description "This Haskell library provides strict left folds that stream
@@ -4677,7 +4426,7 @@ and are often as efficient as hand-written folds.")
 (define-public ghc-foundation
   (package
     (name "ghc-foundation")
-    (version "0.0.25")
+    (version "0.0.26.1")
     (source
      (origin
        (method url-fetch)
@@ -4685,7 +4434,7 @@ and are often as efficient as hand-written folds.")
                            "foundation/foundation-" version ".tar.gz"))
        (sha256
         (base32
-         "0q6kx57ygmznlpf8n499hid4x6mj3180paijx0a8dgi9hh7man61"))))
+         "1hri3raqf6nhh6631gfm2yrkv4039gb0cqfa9cqmjp8bbqv28w5d"))))
     (build-system haskell-build-system)
     (arguments
      `(#:phases
@@ -4698,7 +4447,7 @@ and are often as efficient as hand-written folds.")
                ((", testDividible proxy") ""))
              #t)))))
     (outputs '("out" "static" "doc"))
-    (inputs `(("ghc-basement" ,ghc-basement)))
+    (inputs (list ghc-basement))
     (home-page "https://github.com/haskell-foundation/foundation")
     (synopsis "Alternative prelude with batteries and no dependencies")
     (description
@@ -4722,7 +4471,7 @@ Foundation has the following goals:
 (define-public ghc-free
   (package
     (name "ghc-free")
-    (version "5.1.2")
+    (version "5.1.7")
     (source
      (origin
        (method url-fetch)
@@ -4732,20 +4481,20 @@ Foundation has the following goals:
              ".tar.gz"))
        (sha256
         (base32
-         "0vlf3f2ckl3cr7z2zl8c9c8qkdlfgvmh04gxkp2fg0z9dz80nlyb"))))
+         "121b81wxjk30nc27ivwzxjxi1dcwc30y0gy8l6wac3dxwvkx2c5j"))))
     (build-system haskell-build-system)
     (outputs '("out" "static" "doc"))
     (inputs
-     `(("ghc-prelude-extras" ,ghc-prelude-extras)
-       ("ghc-profunctors" ,ghc-profunctors)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-bifunctors" ,ghc-bifunctors)
-       ("ghc-comonad" ,ghc-comonad)
-       ("ghc-distributive" ,ghc-distributive)
-       ("ghc-semigroupoids" ,ghc-semigroupoids)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-transformers-base" ,ghc-transformers-base)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)))
+     (list ghc-prelude-extras
+           ghc-profunctors
+           ghc-exceptions
+           ghc-bifunctors
+           ghc-comonad
+           ghc-distributive
+           ghc-semigroupoids
+           ghc-semigroups
+           ghc-transformers-base
+           ghc-transformers-compat))
     (home-page "https://github.com/ekmett/free/")
     (synopsis "Unrestricted monads for Haskell")
     (description "This library provides free monads, which are useful for many
@@ -4771,16 +4520,16 @@ definition of @code{Monad}.")
                 "19bdbz9wb9jvln6yg6qm0hz0w84bypvkxf0wjhgrgd52f9gidlny"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-async" ,ghc-async)
-       ("ghc-unix-compat" ,ghc-unix-compat)
-       ("ghc-hinotify" ,ghc-hinotify)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-random" ,ghc-random)
-       ("ghc-shelly" ,ghc-shelly)
-       ("ghc-temporary" ,ghc-temporary)))
+     (list ghc-async
+           ghc-unix-compat
+           ghc-hinotify
+           ghc-tasty
+           ghc-tasty-hunit
+           ghc-random
+           ghc-shelly
+           ghc-temporary))
     (home-page "https://github.com/haskell-fswatch/hfsnotify")
-    (synopsis "Cross platform library for file change notification.")
+    (synopsis "Cross platform library for file change notification")
     (description "Cross platform library for file creation, modification, and
 deletion notification. This library builds upon existing libraries for platform
 specific Windows, Mac, and Linux file system event notification.")
@@ -4789,7 +4538,7 @@ specific Windows, Mac, and Linux file system event notification.")
 (define-public ghc-generic-deriving
   (package
     (name "ghc-generic-deriving")
-    (version "1.12.4")
+    (version "1.14.1")
     (source
      (origin
        (method url-fetch)
@@ -4799,14 +4548,13 @@ specific Windows, Mac, and Linux file system event notification.")
              ".tar.gz"))
        (sha256
         (base32
-         "0vdg9qdq35jl3m11a87wk8cq1y71qm4i1g1b2pxki0wk70yw20a4"))))
+         "19qpahcfhs9nqqv6na8znybrvpw885cajbdnrfylxbsmm0sys4s7"))))
     (build-system haskell-build-system)
     (outputs '("out" "static" "doc"))
     (inputs
-     `(("ghc-th-abstraction" ,ghc-th-abstraction)))
+     (list ghc-th-abstraction))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-hspec hspec-discover))
     (home-page "https://hackage.haskell.org/package/generic-deriving")
     (synopsis "Generalise the deriving mechanism to arbitrary classes")
     (description "This package provides functionality for generalising the
@@ -4826,9 +4574,9 @@ deriving mechanism in Haskell to arbitrary classes.")
        (sha256
         (base32 "130lmblycxnpqbsl7vf6a90zccibnvcb5zaclfajcn3by39007lv"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-quickcheck" ,ghc-quickcheck)))
+    (inputs (list ghc-quickcheck))
     (native-inputs
-     `(("ghc-inspection-testing" ,ghc-inspection-testing)))
+     (list ghc-inspection-testing))
     (arguments
      `(#:cabal-revision
        ("1" "1d0hx41r7yq2a86ydnfh2fv540ah8cz05l071s2z4wxcjw0ymyn4")))
@@ -4856,7 +4604,7 @@ and @code{withBaseCase}) or implicitly (@code{genericArbitrary'}).")
 (define-public ghc-generic-random-1.3.0.1
   (package
     (inherit ghc-generic-random)
-    (version "1.3.0.1")
+    (version "1.4.0.0")
     (source
      (origin
        (method url-fetch)
@@ -4864,13 +4612,13 @@ and @code{withBaseCase}) or implicitly (@code{genericArbitrary'}).")
              "https://hackage.haskell.org/package/generic-random/"
              "generic-random-" version ".tar.gz"))
        (sha256
-        (base32 "0d9w7xcmsb31b95fr9d5jwbsajcl1yi4347dlbw4bybil2vjwd7k"))))
+        (base32 "12rvb1dzrfjc46n9vdcw3yv773iih8vwhrac3hpzq70yp2z77jdw"))))
     (arguments '())))
 
 (define-public ghc-generics-sop
   (package
     (name "ghc-generics-sop")
-    (version "0.4.0.1")
+    (version "0.5.1.1")
     (source
      (origin
        (method url-fetch)
@@ -4879,12 +4627,11 @@ and @code{withBaseCase}) or implicitly (@code{genericArbitrary'}).")
                            "generics-sop-" version ".tar.gz"))
        (sha256
         (base32
-         "160knr2phnzh2gldfv954lz029jzc7y8kz5xpmbf4z3vb5ngm6fw"))))
+         "1n65wjdbb9fswa43ys5k6c746c905877lw5ij33y66iabj5w7dw1"))))
     (build-system haskell-build-system)
     (outputs '("out" "static" "doc"))
     (inputs
-     `(("ghc-sop-core" ,ghc-sop-core)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)))
+     (list ghc-sop-core ghc-th-abstraction))
     (home-page "https://github.com/well-typed/generics-sop")
     (synopsis "Generic Programming using True Sums of Products for Haskell")
     (description "This Haskell package supports the definition of generic
@@ -4896,7 +4643,7 @@ each constructor are represented using an n-ary product.")
 (define-public ghc-geniplate-mirror
   (package
     (name "ghc-geniplate-mirror")
-    (version "0.7.6")
+    (version "0.7.8")
     (source
      (origin
        (method url-fetch)
@@ -4904,11 +4651,8 @@ each constructor are represented using an n-ary product.")
                            "/geniplate-mirror"
                            "/geniplate-mirror-" version ".tar.gz"))
        (sha256
-        (base32 "1y0m0bw5zpm1y1y6d9qmxj3swl8j8hlw1shxbr5awycf6k884ssb"))))
+        (base32 "1kw4q7l556sfd82r2p0z3cv4sg8kcr45wb4s2sy996bs3ymn8fjb"))))
     (build-system haskell-build-system)
-    (arguments
-     `(#:cabal-revision
-       ("2" "03fg4vfm1wgq4mylggawdx0bfvbbjmdn700sqx7v3hk1bx0kjfzh")))
     (home-page "https://github.com/danr/geniplate")
     (synopsis "Use Template Haskell to generate Uniplate-like functions")
     (description
@@ -4920,7 +4664,7 @@ geniplate} package, written by Lennart Augustsson.")
 (define-public ghc-genvalidity
   (package
     (name "ghc-genvalidity")
-    (version "0.8.0.0")
+    (version "0.11.0.2")
     (source
      (origin
        (method url-fetch)
@@ -4930,15 +4674,12 @@ geniplate} package, written by Lennart Augustsson.")
              ".tar.gz"))
        (sha256
         (base32
-         "0w38aq9hfyymidncgkrs6yvja7j573d9sap5qfg5rz910fhsij9a"))))
+         "16bd5dx0ngc8z7mij23i2l3a8v3c112x8ksd623alik18zx7pi8j"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-validity" ,ghc-validity)))
+     (list ghc-quickcheck ghc-validity))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)
-       ("ghc-hspec-core" ,ghc-hspec-core)))
+     (list ghc-hspec hspec-discover ghc-hspec-core))
     (home-page
      "https://github.com/NorfairKing/validity")
     (synopsis
@@ -4951,7 +4692,7 @@ with the @code{Validity} typeclass.")
 (define-public ghc-genvalidity-property
   (package
     (name "ghc-genvalidity-property")
-    (version "0.4.0.0")
+    (version "0.5.0.1")
     (source
      (origin
        (method url-fetch)
@@ -4962,15 +4703,16 @@ with the @code{Validity} typeclass.")
              ".tar.gz"))
        (sha256
         (base32
-         "0zayycx62226w54rvkxwhvqhznsr33dk3ds55yyqrfqbnhvph1s9"))))
+         "0cvzc4z4771vpycwfgcj0yswyglzl6cl1h2wrfhs224nrcmk5a7z"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-genvalidity" ,ghc-genvalidity)
-       ("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)
-       ("ghc-validity" ,ghc-validity)))
-    (native-inputs `(("ghc-doctest" ,ghc-doctest)))
+     (list ghc-quickcheck
+           ghc-genvalidity
+           ghc-hspec
+           hspec-discover
+           ghc-pretty-show
+           ghc-validity))
+    (native-inputs (list ghc-doctest))
     (home-page
      "https://github.com/NorfairKing/validity")
     (synopsis
@@ -4995,16 +4737,9 @@ properties for functions operating on them.")
          "1rszkcn1rg38wf35538ljk5bbqjc57y9sb3a0al7qxm82gy8yigr"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-base-compat" ,ghc-base-compat)
-       ("ghc-base-orphans" ,ghc-base-orphans)
-       ("ghc-generics-sop" ,ghc-generics-sop)
-       ("ghc-tagged" ,ghc-tagged)))
+     (list ghc-base-compat ghc-base-orphans ghc-generics-sop ghc-tagged))
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-safe" ,ghc-safe)
-       ("ghc-silently" ,ghc-silently)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-quickcheck ghc-hspec ghc-safe ghc-silently hspec-discover))
     (home-page "https://github.com/soenkehahn/getopt-generics")
     (synopsis "Create command line interfaces with ease")
     (description "This library provides tools to create command line
@@ -5023,7 +4758,7 @@ interfaces with ease.")
        (sha256
         (base32 "0cl3lfm6k1h8fxp2vxa6ihfp4v8igkz9h35iwyq2frzm4kdn96d8"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-base-compat" ,ghc-base-compat)))
+    (inputs (list ghc-base-compat))
     (home-page "https://github.com/acfoltzer/gitrev")
     (synopsis "Compile git revision info into Haskell projects")
     (description
@@ -5036,7 +4771,7 @@ info for more informative bug reports.")
 (define-public ghc-glob
   (package
     (name "ghc-glob")
-    (version "0.10.0")
+    (version "0.10.1")
     (source
      (origin
        (method url-fetch)
@@ -5045,18 +4780,13 @@ info for more informative bug reports.")
                            "Glob-" version ".tar.gz"))
        (sha256
         (base32
-         "0953f91f62ncna402vsrfzdcyxhdpjna3bgdw017kad0dfymacs7"))))
+         "05fknrb114qvfzv6324ngx0fz43cwgrhrc700l3h2is9jinlgr6a"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-dlist" ,ghc-dlist)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)))
+     (list ghc-dlist ghc-semigroups ghc-transformers-compat))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)))
+     (list ghc-hunit ghc-quickcheck ghc-test-framework
+           ghc-test-framework-hunit ghc-test-framework-quickcheck2))
     (home-page "http://iki.fi/matti.niemenmaa/glob/")
     (synopsis "Haskell library matching glob patterns against file paths")
     (description "This package provides a Haskell library for @dfn{globbing}:
@@ -5079,7 +4809,7 @@ matching patterns against file paths.")
          "1i2xi35n5z0d372px9mh6cyhgg1m0cfaiy3fnspkf6kbn9fgsqxq"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-openglraw" ,ghc-openglraw)))
+     (list ghc-openglraw))
     (home-page "https://wiki.haskell.org/Opengl")
     (synopsis "Raw Haskell bindings GLU")
     (description "GLURaw is a raw Haskell binding for the GLU 1.3 OpenGL
@@ -5090,7 +4820,7 @@ basis for a nicer interface.")
 (define-public ghc-glut
   (package
     (name "ghc-glut")
-    (version "2.7.0.15")
+    (version "2.7.0.16")
     (source
      (origin
        (method url-fetch)
@@ -5100,13 +4830,10 @@ basis for a nicer interface.")
              ".tar.gz"))
        (sha256
         (base32
-         "0271vnf6wllhxjwy0m348x90kv27aybxcbqkkglmd5w4cpwjg5g9"))))
+         "0vdkfj4wjzigdpzgr5l001y9wkhwgl00mclr26gf93kps14fkymn"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-statevar" ,ghc-statevar)
-       ("ghc-opengl" ,ghc-opengl)
-       ("ghc-openglraw" ,ghc-openglraw)
-       ("freeglut" ,freeglut)))
+     (list ghc-statevar ghc-opengl ghc-openglraw freeglut))
     (home-page "https://wiki.haskell.org/Opengl")
     (synopsis "Haskell bindings for the OpenGL Utility Toolkit")
     (description "This library provides Haskell bindings for the OpenGL
@@ -5117,23 +4844,23 @@ programs.")
 (define-public ghc-gnuplot
   (package
     (name "ghc-gnuplot")
-    (version "0.5.6")
+    (version "0.5.6.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
-             "mirror://hackage/package/gnuplot/gnuplot-"
+             "https://hackage.haskell.org/package/gnuplot/gnuplot-"
              version ".tar.gz"))
        (sha256
-        (base32 "1g6xgnlkh17avivn1rlq7l2nvs26dvrbx4rkfld0bf6kyqaqwrgp"))))
+        (base32 "1rfq94lnsyjr8y9p5r56jpllv3p8rvh9xxzjji016b6r5adi8cnb"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-temporary" ,ghc-temporary)
-       ("ghc-utility-ht" ,ghc-utility-ht)
-       ("ghc-data-accessor-transformers" ,ghc-data-accessor-transformers)
-       ("ghc-data-accessor" ,ghc-data-accessor)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("gnuplot" ,gnuplot)))
+     (list ghc-temporary
+           ghc-utility-ht
+           ghc-data-accessor-transformers
+           ghc-data-accessor
+           ghc-semigroups
+           gnuplot))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -5152,38 +4879,25 @@ programs.")
 (define-public ghc-graphviz
   (package
     (name "ghc-graphviz")
-    (version "2999.20.0.3")
+    (version "2999.20.1.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://hackage.haskell.org/package/"
                                   "graphviz/graphviz-" version ".tar.gz"))
               (sha256
                (base32
-                "04k26zw61nfv1pkd00iaq89pgsaiym0sf4cbzkmm2k2fj5xa587g"))))
+                "0l0zxgb938hh09qirggbaskq79mgj3s081cnr42y5vm1rp1jir2s"))))
     (build-system haskell-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'update-constraints
-           (lambda _
-             (substitute* "graphviz.cabal"
-               (("QuickCheck >= 2\\.3 && < 2\\.13")
-                "QuickCheck >= 2.3 && < 2.14")
-               (("hspec >= 2\\.1 && < 2\\.7")
-                "hspec >= 2.1 && < 2.8")))))))
     (inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-colour" ,ghc-colour)
-       ("ghc-dlist" ,ghc-dlist)
-       ("ghc-fgl" ,ghc-fgl)
-       ("ghc-fgl-arbitrary" ,ghc-fgl-arbitrary)
-       ("ghc-polyparse" ,ghc-polyparse)
-       ("ghc-temporary" ,ghc-temporary)
-       ("ghc-wl-pprint-text" ,ghc-wl-pprint-text)))
+     (list ghc-colour
+           ghc-dlist
+           ghc-fgl
+           ghc-polyparse
+           ghc-temporary
+           ghc-wl-pprint-text))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("graphviz" ,graphviz)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-hspec graphviz ghc-fgl-arbitrary ghc-quickcheck
+           hspec-discover))
     (home-page "https://hackage.haskell.org/package/graphviz")
     (synopsis "Bindings to Graphviz for graph visualisation")
     (description
@@ -5207,7 +4921,7 @@ and edge labels with positional information, etc.
 (define-public ghc-groups
   (package
     (name "ghc-groups")
-    (version "0.4.1.0")
+    (version "0.5.3")
     (source
       (origin
         (method url-fetch)
@@ -5215,7 +4929,7 @@ and edge labels with positional information, etc.
                             "groups/groups-" version ".tar.gz"))
         (sha256
           (base32
-            "0ggkygkyxw5ga4cza82bjvdraavl294k0h6b62d2px7z3nvqhifx"))))
+            "0f5c8dg9b74glfw2sdvdcl9c8igs6knz1bayk4gvvzvypsl547nf"))))
     (build-system haskell-build-system)
     (home-page "https://hackage.haskell.org/package/groups")
     (synopsis "Haskell 98 groups")
@@ -5226,7 +4940,7 @@ monoid with invertibility.")
 (define-public ghc-gtk2hs-buildtools
   (package
     (name "ghc-gtk2hs-buildtools")
-    (version "0.13.5.4")
+    (version "0.13.8.1")
     (source
      (origin
        (method url-fetch)
@@ -5235,14 +4949,12 @@ monoid with invertibility.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "1flxsacxwmabzzalhn8558kmj95z01c0lmikrn56nxh7p62nxm25"))))
+         "102x753jbc90lfm9s0ng5kvm0risqwpar331xwsd752as0bms142"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-random" ,ghc-random)
-       ("ghc-hashtables" ,ghc-hashtables)))
+     (list ghc-random ghc-hashtables))
     (native-inputs
-     `(("ghc-alex" ,ghc-alex)
-       ("ghc-happy" ,ghc-happy)))
+     (list ghc-alex ghc-happy))
     (home-page "http://projects.haskell.org/gtk2hs/")
     (synopsis "Tools to build the Gtk2Hs suite of user interface libraries")
     (description
@@ -5257,7 +4969,7 @@ tools are not needed to actually run Gtk2Hs programs.")
 (define-public ghc-hackage-security
   (package
     (name "ghc-hackage-security")
-    (version "0.5.3.0")
+    (version "0.6.0.1")
     (source
      (origin
        (method url-fetch)
@@ -5266,30 +4978,31 @@ tools are not needed to actually run Gtk2Hs programs.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "08bwawc7ramgdh54vcly2m9pvfchp0ahhs8117jajni6x4bnx66v"))))
+         "05rgz31cmp52137j4jk0074z8lfgk8mrf2x56bzw28asmxrv8qli"))))
     (build-system haskell-build-system)
     (arguments
      `(#:cabal-revision
-       ("6" "1xs2nkzlvkdz8g27yzfxbjdbdadfmgiydnlpn5dm77cg18r495ay")
+       ("8" "1xpzcdpfz0agbv75sadsylq6r8pq7zr0pyzbzrz0nz130yixsv5f")
        #:tests? #f)) ; Tests fail because of framework updates.
     (inputs
-     `(("ghc-base16-bytestring" ,ghc-base16-bytestring)
-       ("ghc-base64-bytestring" ,ghc-base64-bytestring)
-       ("ghc-cryptohash-sha256" ,ghc-cryptohash-sha256)
-       ("ghc-ed25519" ,ghc-ed25519)
-       ("ghc-network" ,ghc-network)
-       ("ghc-network-uri" ,ghc-network-uri)
-       ("ghc-tar" ,ghc-tar)
-       ("ghc-zlib" ,ghc-zlib)))
-    (native-inputs
-     `(("ghc-network-uri" ,ghc-network-uri)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-tar" ,ghc-tar)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-temporary" ,ghc-temporary)
-       ("ghc-zlib" ,ghc-zlib)))
+     (list ghc-base16-bytestring
+           ghc-base64-bytestring
+           ghc-cryptohash-sha256
+           ghc-ed25519
+           ghc-lukko
+           ghc-network
+           ghc-network-uri
+           ghc-tar
+           ghc-zlib))
+    (native-inputs
+     (list ghc-aeson
+           ghc-quickcheck
+           ghc-tasty
+           ghc-tasty-hunit
+           ghc-tasty-quickcheck
+           ghc-temporary
+           ghc-unordered-containers
+           ghc-vector))
     (home-page "https://github.com/haskell/hackage-security")
     (synopsis "Hackage security library")
     (description "This Hackage security library provides both server and
@@ -5304,7 +5017,7 @@ Tor project}.")
 (define-public ghc-haddock
   (package
     (name "ghc-haddock")
-    (version "2.22.0")
+    (version "2.24.2")
     (source
      (origin
        (method url-fetch)
@@ -5314,39 +5027,21 @@ Tor project}.")
              ".tar.gz"))
        (sha256
         (base32
-         "1k42z2zh550rl93c8pa9cg2xsanp6wvb031xvan6cmngnplmdib6"))))
+         "1ha4hrnidwkmwalqwd1ixa2933as5n4sj1lvz0cx89a3png7r930"))))
     (build-system haskell-build-system)
     (arguments
-     `(#:phases
+     `(#:tests? #f ; TODO: haddock-test does not build.
+       #:phases
        (modify-phases %standard-phases
-         ;; The release tarball for 2.22.0 is missing the test data for
-         ;; the Hoogle test, causing it to fail.  This is fixed in the
-         ;; next release, but for now we disable it.
-         (add-before 'configure 'remove-hoogle-test
-           (lambda _
-             (use-modules (ice-9 rdelim))
-             (with-atomic-file-replacement "haddock.cabal"
-               (lambda (in out)
-                 (let loop ((line (read-line in 'concat)) (deleting? #f))
-                   (cond
-                    ((eof-object? line) #t)
-                    ((string-every char-set:whitespace line)
-                     (unless deleting? (display line out))
-                     (loop (read-line in 'concat) #f))
-                    ((string=? line "test-suite hoogle-test\n")
-                     (loop (read-line in 'concat) #t))
-                    (else
-                     (unless deleting? (display line out))
-                     (loop (read-line in 'concat) deleting?))))))))
          (add-before 'check 'add-haddock-to-path
            (lambda _
              (setenv "PATH" (string-append (getcwd) "/dist/build/haddock"
                                            ":" (getenv "PATH")))
              #t)))))
-    (inputs `(("ghc-haddock-api" ,ghc-haddock-api)))
-    (native-inputs
-     `(("ghc-haddock-test" ,ghc-haddock-test)
-       ("ghc-hspec" ,ghc-hspec)))
+    (inputs (list ghc-haddock-api))
+;    (native-inputs
+;     `(("ghc-haddock-test" ,ghc-haddock-test)
+;       ("ghc-hspec" ,ghc-hspec)))
     (home-page "https://www.haskell.org/haddock/")
     (synopsis
      "Documentation-generation tool for Haskell libraries")
@@ -5357,7 +5052,7 @@ Tor project}.")
 (define-public ghc-haddock-api
   (package
     (name "ghc-haddock-api")
-    (version "2.22.0")
+    (version "2.24.2")
     (source
      (origin
        (method url-fetch)
@@ -5365,28 +5060,14 @@ Tor project}.")
              "https://hackage.haskell.org/package/haddock-api/haddock-api-"
              version
              ".tar.gz"))
-       (patches (search-patches "ghc-haddock-api-fix-haddock.patch"))
        (sha256
         (base32
-         "149q4zlf4m7wcrr4af2n2flh0jxjsypshbc229vsj1m0kmz4z014"))))
+         "1jj2csi85nlywsyvnbwhclfdz27j2kyfbhrl9cm7av0243br9vg1"))))
     (build-system haskell-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'update-constraints
-           (lambda _
-             (substitute* "haddock-api.cabal"
-               (("QuickCheck      \\^>= 2\\.11")
-                "QuickCheck      ^>= 2.13")
-               (("hspec           >= 2\\.4\\.4 && < 2\\.6")
-                "hspec           >= 2.4.4 && < 2.8")))))))
-    (inputs
-     `(("ghc-paths" ,ghc-paths)
-       ("ghc-haddock-library" ,ghc-haddock-library)))
-    (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)))
+    (inputs
+     (list ghc-paths ghc-haddock-library))
+    (native-inputs
+     (list ghc-quickcheck ghc-hspec hspec-discover))
     (home-page "https://www.haskell.org/haddock/")
     (synopsis "API for documentation-generation tool Haddock")
     (description "This package provides an API to Haddock, the
@@ -5396,7 +5077,7 @@ documentation-generation tool for Haskell libraries.")
 (define-public ghc-haddock-library
   (package
     (name "ghc-haddock-library")
-    (version "1.7.0")
+    (version "1.10.0")
     (source
      (origin
        (method url-fetch)
@@ -5406,26 +5087,16 @@ documentation-generation tool for Haskell libraries.")
              ".tar.gz"))
        (sha256
         (base32
-         "04fhcjk0pvsaqvsgp2w06cv2qvshq1xs1bwc157q4lmkgr57khp7"))))
+         "15ak06q8yp11xz1hwr0sg2jqi3r78p1n89ik05hicqvxl3awf1pq"))))
     (build-system haskell-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         ;; Since there is no revised Cabal file upstream, we have to
-         ;; patch it manually.
-         (add-before 'configure 'relax-test-suite-dependencies
-           (lambda _
-             (substitute* "haddock-library.cabal"
-               (("hspec\\s*>= 2.4.4   && < 2.6") "hspec")
-               (("QuickCheck\\s*\\^>= 2.11") "QuickCheck"))
-             #t)))))
+    (arguments `(#:tests? #f)) ; TODO: optparse-applicative ==0.15.*, tree-diff ==0.1.*
     (native-inputs
-     `(("ghc-base-compat" ,ghc-base-compat)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-optparse-applicative" ,ghc-optparse-applicative)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-tree-diff" ,ghc-tree-diff)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-base-compat
+           ghc-hspec
+           ghc-optparse-applicative
+           ghc-quickcheck
+           ghc-tree-diff
+           hspec-discover))
     (home-page "https://www.haskell.org/haddock/")
     (synopsis "Library exposing some functionality of Haddock")
     (description
@@ -5472,7 +5143,7 @@ the ‘haddock’ package.")
 (define-public ghc-half
   (package
     (name "ghc-half")
-    (version "0.3")
+    (version "0.3.1")
     (source
      (origin
        (method url-fetch)
@@ -5481,11 +5152,11 @@ the ‘haddock’ package.")
              version ".tar.gz"))
        (sha256
         (base32
-         "14r0nx8hm5fic9gz0ybjjw4kyc758zfgvhhwvzsshpx5caq6zch6"))))
+         "1l8m2spqg0ac50qys2jk5b32v6wxklbbk5ypjp3ga6z14hkw7bz2"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-test-framework ghc-test-framework-quickcheck2
+           ghc-quickcheck))
     (home-page "https://github.com/ekmett/half")
     (synopsis "Half-precision floating-point computations")
     (description "This library provides a half-precision floating-point
@@ -5495,7 +5166,7 @@ computation library for Haskell.")
 (define-public ghc-happy
   (package
     (name "ghc-happy")
-    (version "1.19.12")
+    (version "1.20.0")
     (source
      (origin
        (method url-fetch)
@@ -5505,7 +5176,7 @@ computation library for Haskell.")
              ".tar.gz"))
        (sha256
         (base32
-         "03xlmq6qmdx4zvzw8bp33kd9g7yvcq5cz4wg50xilw812kj276pv"))))
+         "1346r2x5ravs5fqma65bzjragqbb2g6v41wz9maknwm2jf7kl79v"))))
     (build-system haskell-build-system)
     (arguments
      `(#:phases
@@ -5527,8 +5198,7 @@ Happy works in a similar way to the yacc tool for C.")
 (define-public ghc-hashable
   (package
     (name "ghc-hashable")
-    (version "1.2.7.0")
-    (outputs '("out" "static" "doc"))
+    (version "1.3.0.0")
     (source
      (origin
        (method url-fetch)
@@ -5538,19 +5208,15 @@ Happy works in a similar way to the yacc tool for C.")
              ".tar.gz"))
        (sha256
         (base32
-         "1gra8gq3kb7b2sd845h55yxlrfqx3ii004c6vjhga8v0b30fzdgc"))))
+         "1d4sn4xjf0swrfg8pl93ipavbj12ch3a9aykhkl6mjnczc9m8bl2"))))
     (build-system haskell-build-system)
     (arguments
-     `(#:cabal-revision
-       ("1" "197063dpl0wn67dp7a06yc2hxp81n24ykk7klbjx0fndm5n87dh3")))
-    (inputs
-     `(("ghc-random" ,ghc-random)))
+     `(#:tests? #f ; TODO: Tests require random<1.2
+       #:cabal-revision
+       ("2" "16va8hx4ynw0n5s2warhs13ilj7hrs5fcdn140h1fiix480as36n")))
     (native-inputs
-     `(("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-test-framework ghc-test-framework-hunit
+           ghc-test-framework-quickcheck2 ghc-hunit ghc-quickcheck))
     (home-page "https://github.com/tibbe/hashable")
     (synopsis "Class for types that can be converted to a hash value")
     (description
@@ -5573,7 +5239,7 @@ combine hash values.")
 (define-public ghc-hashable-time
   (package
     (name "ghc-hashable-time")
-    (version "0.2.0.2")
+    (version "0.2.1")
     (source
      (origin
        (method url-fetch)
@@ -5583,12 +5249,13 @@ combine hash values.")
              ".tar.gz"))
        (sha256
         (base32
-         "1q7y4plqqwy5286hhx2fygn12h8lqk0y047b597sbdckskxzfqgs"))))
+         "1zw2gqagpbwq1hgx5rlvy6mhsnb15cxg3pmhawwv0ylfihmx2yxh"))))
     (build-system haskell-build-system)
     (arguments
      `(#:cabal-revision
-       ("2" "006phc5y9rrvsshdcmjmhxzxh8dpgs685mpqbkjm9c40xb1ydjbz")))
-    (inputs `(("ghc-hashable" ,ghc-hashable)))
+       ("1" "151gxiprdlj3masa95vvrxal9nwa72n3p1y15xyj4hp7mvvl4s2l")))
+    (inputs
+     (list ghc-hashable ghc-time-compat))
     (home-page "https://hackage.haskell.org/package/hashable-time")
     (synopsis "Hashable instances for Data.Time")
     (description
@@ -5599,7 +5266,7 @@ combine hash values.")
 (define-public ghc-hashtables
   (package
     (name "ghc-hashtables")
-    (version "1.2.3.4")
+    (version "1.2.4.1")
     (source
      (origin
        (method url-fetch)
@@ -5607,12 +5274,17 @@ combine hash values.")
              "https://hackage.haskell.org/package/hashtables/hashtables-"
              version ".tar.gz"))
        (sha256
-        (base32 "1rjmxnr30g4hygiywkpz5p9sanh0abs7ap4zc1kgd8zv04kycp0j"))))
+        (base32 "0vgggm7bqq55zmqj6qji89bfj3k1rdkikkfhyg81vsqf0f3bzhqa"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-hashable" ,ghc-hashable)
-       ("ghc-primitive" ,ghc-primitive)
-       ("ghc-vector" ,ghc-vector)))
+     (list ghc-hashable ghc-primitive ghc-vector))
+    (native-inputs
+     (list ghc-mwc-random
+           ghc-quickcheck
+           ghc-hunit
+           ghc-test-framework
+           ghc-test-framework-quickcheck2
+           ghc-test-framework-hunit))
     (home-page "https://github.com/gregorycollins/hashtables")
     (synopsis "Haskell Mutable hash tables in the ST monad")
     (description "This package provides a Haskell library including a
@@ -5621,7 +5293,7 @@ monad, as well as a typeclass abstracting their common operations, and
 a set of wrappers to use the hash tables in the IO monad.")
     (license license:bsd-3)))
 
-(define-public ghc-haskeline-0.8
+(define-public ghc-haskeline
   (package
     (name "ghc-haskeline")
     (version "0.8.0.0")
@@ -5636,8 +5308,8 @@ a set of wrappers to use the hash tables in the IO monad.")
         (base32
          "0gqsa5s0drim9m42hv4wrq61mnvcdylxysfxfw3acncwilfrn9pb"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-exceptions" ,ghc-exceptions)))
-    (native-inputs `(("ghc-hunit" ,ghc-hunit)))
+    (inputs (list ghc-exceptions))
+    (native-inputs (list ghc-hunit))
     ;; FIXME: Tests failing
     (arguments `(#:tests? #f))
     (home-page "https://github.com/judah/haskeline")
@@ -5655,7 +5327,7 @@ Haskeline runs both on POSIX-compatible systems and on Windows.")
 (define-public ghc-haskell-lexer
   (package
     (name "ghc-haskell-lexer")
-    (version "1.0.2")
+    (version "1.1")
     (source
      (origin
        (method url-fetch)
@@ -5663,7 +5335,7 @@ Haskeline runs both on POSIX-compatible systems and on Windows.")
              "https://hackage.haskell.org/package/haskell-lexer/haskell-lexer-"
              version ".tar.gz"))
        (sha256
-        (base32 "1wyxd8x33x4v5vxyzkhm610pl86gbkc8y439092fr1735q9g7kfq"))))
+        (base32 "1mb3np20ig0hbgnfxrzr3lczq7ya4p76g20lvnxch8ikck61afii"))))
     (build-system haskell-build-system)
     (home-page "https://hackage.haskell.org/package/haskell-lexer")
     (synopsis "Fully compliant Haskell 98 lexer")
@@ -5674,7 +5346,7 @@ Haskeline runs both on POSIX-compatible systems and on Windows.")
 (define-public ghc-haskell-src
   (package
     (name "ghc-haskell-src")
-    (version "1.0.3.0")
+    (version "1.0.3.1")
     (source
      (origin
        (method url-fetch)
@@ -5684,11 +5356,13 @@ Haskeline runs both on POSIX-compatible systems and on Windows.")
              ".tar.gz"))
        (sha256
         (base32
-         "1g4dj1f0j68bhn4ixfac63wjzy6gsp6kwgxryb1k5nl3i0g99d5l"))))
+         "0cjigvshk4b8wqdk0v0hz9ag1kyjjsmqsy4a1m3n28ac008cg746"))))
     (build-system haskell-build-system)
+    (arguments
+     `(#:cabal-revision
+       ("4" "0cyqdw77clzz7mq0b4c0jg2d1kdz9xii41268w2psmqmfpyn29pc")))
     (inputs
-     `(("ghc-happy" ,ghc-happy)
-       ("ghc-syb" ,ghc-syb)))
+     (list ghc-happy ghc-syb))
     (home-page
      "https://hackage.haskell.org/package/haskell-src")
     (synopsis
@@ -5703,7 +5377,7 @@ package are to parse or generate Haskell 98 code.")
 (define-public ghc-haskell-src-exts
   (package
     (name "ghc-haskell-src-exts")
-    (version "1.21.1")
+    (version "1.23.1")
     (source
      (origin
        (method url-fetch)
@@ -5713,18 +5387,13 @@ package are to parse or generate Haskell 98 code.")
              ".tar.gz"))
        (sha256
         (base32
-         "0q1y8n3d82gid9bcx8wxsqqmj9mq11fg3gp5yzpfbw958dhi3j9f"))))
+         "01bcrxs9af4yqpclw43aijmsd1g19qhyzb47blz7vzwz2r3k11b7"))))
     (build-system haskell-build-system)
     (outputs '("out" "static" "doc"))
     (inputs
-     `(("cpphs" ,cpphs)
-       ("ghc-happy" ,ghc-happy)
-       ("ghc-pretty-show" ,ghc-pretty-show)))
+     (list cpphs ghc-happy ghc-pretty-show))
     (native-inputs
-     `(("ghc-smallcheck" ,ghc-smallcheck)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-smallcheck" ,ghc-tasty-smallcheck)
-       ("ghc-tasty-golden" ,ghc-tasty-golden)))
+     (list ghc-smallcheck ghc-tasty ghc-tasty-smallcheck ghc-tasty-golden))
     (home-page "https://github.com/haskell-suite/haskell-src-exts")
     (synopsis "Library for manipulating Haskell source")
     (description "Haskell-Source with Extensions (HSE, haskell-src-exts) is an
@@ -5749,10 +5418,8 @@ patterns as per the HaRP extension as well as HSX-style embedded XML syntax.")
          "0fvqi72m74p7q5sbpy8m2chm8a1lgy10mfrcxcz8wrh59vngj0n8"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-data-default" ,ghc-data-default)
-       ("ghc-haskell-src-exts" ,ghc-haskell-src-exts)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-uniplate" ,ghc-uniplate)))
+     (list ghc-data-default ghc-haskell-src-exts ghc-semigroups
+           ghc-uniplate))
     (home-page "https://github.com/pepeiborra/haskell-src-exts-util")
     (synopsis "Helper functions for working with haskell-src-exts trees")
     (description
@@ -5763,7 +5430,7 @@ patterns as per the HaRP extension as well as HSX-style embedded XML syntax.")
 (define-public ghc-haskell-src-meta
   (package
     (name "ghc-haskell-src-meta")
-    (version "0.8.3")
+    (version "0.8.7")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://hackage.haskell.org/package/"
@@ -5771,16 +5438,12 @@ patterns as per the HaRP extension as well as HSX-style embedded XML syntax.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "17znnaqj2hnnfyc9p9xjzbs97h2jh1h4f4qbw648y3xa14wx5ra9"))))
+                "1yy2dfb1ip1zqx3xh28g92209555abzvxrxiwcl95j27zzqxc6in"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-haskell-src-exts" ,ghc-haskell-src-exts)
-       ("ghc-syb" ,ghc-syb)
-       ("ghc-th-orphans" ,ghc-th-orphans)))
+     (list ghc-haskell-src-exts ghc-syb ghc-th-orphans))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+     (list ghc-hunit ghc-tasty ghc-tasty-hunit))
     (home-page "https://hackage.haskell.org/package/haskell-src-meta")
     (synopsis "Parse source to template-haskell abstract syntax")
     (description
@@ -5791,7 +5454,7 @@ template-haskell abstract syntax.")
 (define-public ghc-hasktags
   (package
     (name "ghc-hasktags")
-    (version "0.71.2")
+    (version "0.72.0")
     (source
      (origin
        (method url-fetch)
@@ -5801,16 +5464,15 @@ template-haskell abstract syntax.")
              ".tar.gz"))
        (sha256
         (base32
-         "1s2k9qrgy1jily96img2pmn7g35mwnnfiw6si3aw32jfhg5zsh1c"))))
+         "09p79w16fgpqi6bwq162769xdrnyb7wnmz56k00nz6dj1a0bbbdd"))))
     (build-system haskell-build-system)
+    (arguments
+     `(#:cabal-revision
+       ("1" "0q39ssdgm6lcmqj92frjvr53i34divx53zli0qar39mx8ka1l8ml")))
     (inputs
-     `(("ghc-system-filepath" ,ghc-system-filepath)
-       ("ghc-optparse-applicative" ,ghc-optparse-applicative)))
+     (list ghc-system-filepath ghc-optparse-applicative))
     (native-inputs
-     `(("ghc-json" ,ghc-json)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("ghc-microlens-platform" ,ghc-microlens-platform)
-       ("ghc-hunit" ,ghc-hunit)))
+     (list ghc-json ghc-utf8-string ghc-microlens-platform ghc-hunit))
     (home-page "https://github.com/MarcWeber/hasktags")
     (synopsis "Make @code{Ctags} and @code{Etags} files for Haskell programs")
     (description
@@ -5821,7 +5483,7 @@ Vim.")
 (define-public ghc-hex
   (package
     (name "ghc-hex")
-    (version "0.1.2")
+    (version "0.2.0")
     (source
      (origin
        (method url-fetch)
@@ -5830,7 +5492,7 @@ Vim.")
                            "hex-" version ".tar.gz"))
        (sha256
         (base32
-         "1v31xiaivrrn0q2jz8919wvkjplv1kxna5ajhsj701fqxm1i5vhj"))))
+         "1mc66758254d93m7vab7q6lhn7qphzxd6wyc3v6yq1diy0gji4va"))))
     (build-system haskell-build-system)
     (home-page "https://hackage.haskell.org/package/hex")
     (synopsis "Convert strings into hexadecimal and back")
@@ -5852,11 +5514,9 @@ hexadecimal string representation.")
                 "1bqv00gfmrsf0jjr4qf3lhshvfkyzmhbi3pjb6mafbnsyn2k7f6q"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-diff" ,ghc-diff)
-       ("ghc-regex-pcre-builtin" ,ghc-regex-pcre-builtin)))
+     (list ghc-diff ghc-regex-pcre-builtin))
     (native-inputs
-     `(("ghc-blaze-html" ,ghc-blaze-html)
-       ("ghc-utf8-string" ,ghc-utf8-string)))
+     (list ghc-blaze-html ghc-utf8-string))
     (home-page "https://github.com/jgm/highlighting-kate")
     (synopsis "Syntax highlighting library")
     (description
@@ -5871,7 +5531,7 @@ descriptions.")
 (define-public ghc-hindent
   (package
     (name "ghc-hindent")
-    (version "5.3.1")
+    (version "5.3.2")
     (source
      (origin
        (method url-fetch)
@@ -5881,7 +5541,7 @@ descriptions.")
              ".tar.gz"))
        (sha256
         (base32
-         "008s8zm9qs972b7v5kkmr8l3i9kc6zm7yj33mkw6dv69b7h3c01l"))))
+         "129gkn8qg68wsd60mq8yk7hrqsc8sd8v56xn41m5ii3hriq1mmv7"))))
     (build-system haskell-build-system)
     (arguments
      `(#:modules ((guix build haskell-build-system)
@@ -5896,8 +5556,7 @@ descriptions.")
              (let* ((out   (assoc-ref outputs "out"))
                     (elisp-file "elisp/hindent.el")
                     (dest  (string-append out "/share/emacs/site-lisp"))
-                    (emacs (string-append (assoc-ref inputs "emacs")
-                                          "/bin/emacs")))
+                    (emacs (search-input-file inputs "/bin/emacs")))
                (make-file-writable elisp-file)
                (emacs-substitute-variables elisp-file
                  ("hindent-process-path"
@@ -5905,15 +5564,15 @@ descriptions.")
                (install-file elisp-file dest)
                (emacs-generate-autoloads "hindent" dest)))))))
     (inputs
-     `(("ghc-haskell-src-exts" ,ghc-haskell-src-exts)
-       ("ghc-monad-loops" ,ghc-monad-loops)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-yaml" ,ghc-yaml)
-       ("ghc-unix-compat" ,ghc-unix-compat)
-       ("ghc-path" ,ghc-path)
-       ("ghc-path-io" ,ghc-path-io)
-       ("ghc-optparse-applicative" ,ghc-optparse-applicative)))
+     (list ghc-haskell-src-exts
+           ghc-monad-loops
+           ghc-utf8-string
+           ghc-exceptions
+           ghc-yaml
+           ghc-unix-compat
+           ghc-path
+           ghc-path-io
+           ghc-optparse-applicative))
     (native-inputs
      `(("ghc-hspec" ,ghc-hspec)
        ("ghc-diff" ,ghc-diff)
@@ -5929,7 +5588,7 @@ library and an executable.")
 (define-public ghc-hinotify
   (package
     (name "ghc-hinotify")
-    (version "0.4")
+    (version "0.4.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -5937,10 +5596,10 @@ library and an executable.")
                     "hinotify-" version ".tar.gz"))
               (sha256
                (base32
-                "1x1lm685ws2q0z0ibwq6x3l72xh67mj06s36xiga3al48d92q63x"))))
+                "06pqfikfa61i45g92b65br83kplwmizqkm42yp8d0ddgmq0b21qk"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-async" ,ghc-async)))
+     (list ghc-async))
     (home-page "https://github.com/kolmodin/hinotify.git")
     (synopsis "Haskell binding to inotify")
     (description "This library provides a wrapper to the Linux kernel's inotify
@@ -5951,7 +5610,7 @@ accessed or modified.")
 (define-public ghc-hledger-lib
   (package
     (name "ghc-hledger-lib")
-    (version "1.14.1")
+    (version "1.21")
     (source
      (origin
        (method url-fetch)
@@ -5961,35 +5620,38 @@ accessed or modified.")
              ".tar.gz"))
        (sha256
         (base32
-         "1w6qp01cak6spnpldm01czlm6i5a2alw47w76875l2nagrc4rfp2"))))
-    (build-system haskell-build-system)
-    (inputs
-     `(("ghc-ansi-terminal" ,ghc-ansi-terminal)
-       ("ghc-base-compat-batteries" ,ghc-base-compat-batteries)
-       ("ghc-blaze-markup" ,ghc-blaze-markup)
-       ("ghc-call-stack" ,ghc-call-stack)
-       ("ghc-cassava" ,ghc-cassava)
-       ("ghc-cassava-megaparsec" ,ghc-cassava-megaparsec)
-       ("ghc-cmdargs" ,ghc-cmdargs)
-       ("ghc-data-default" ,ghc-data-default)
-       ("ghc-decimal" ,ghc-decimal)
-       ("ghc-easytest" ,ghc-easytest)
-       ("ghc-extra" ,ghc-extra)
-       ("ghc-file-embed" ,ghc-file-embed)
-       ("ghc-glob" ,ghc-glob)
-       ("ghc-hashtables" ,ghc-hashtables)
-       ("ghc-megaparsec" ,ghc-megaparsec)
-       ("ghc-mtl-compat" ,ghc-mtl-compat)
-       ("ghc-old-time" ,ghc-old-time)
-       ("ghc-parser-combinators" ,ghc-parser-combinators)
-       ("ghc-pretty-show" ,ghc-pretty-show)
-       ("ghc-regex-tdfa" ,ghc-regex-tdfa)
-       ("ghc-safe" ,ghc-safe)
-       ("ghc-split" ,ghc-split)
-       ("ghc-tabular" ,ghc-tabular)
-       ("ghc-uglymemo" ,ghc-uglymemo)
-       ("ghc-utf8-string" ,ghc-utf8-string)))
-    (native-inputs `(("ghc-doctest" ,ghc-doctest)))
+         "00prslqk8vnbyz388cpc0nsamzy8xcjzday5q9n3m9lx4p2dhb5y"))))
+    (build-system haskell-build-system)
+    (inputs
+     (list ghc-aeson
+           ghc-aeson-pretty
+           ghc-ansi-terminal
+           ghc-base-compat-batteries
+           ghc-blaze-markup
+           ghc-call-stack
+           ghc-cassava
+           ghc-cassava-megaparsec
+           ghc-cmdargs
+           ghc-data-default
+           ghc-decimal
+           ghc-extra
+           ghc-file-embed
+           ghc-glob
+           ghc-hashtables
+           ghc-megaparsec
+           ghc-old-time
+           ghc-parser-combinators
+           ghc-pretty-simple
+           ghc-regex-tdfa
+           ghc-safe
+           ghc-tabular
+           ghc-tasty
+           ghc-tasty-hunit
+           ghc-timeit
+           ghc-uglymemo
+           ghc-unordered-containers
+           ghc-utf8-string))
+    (native-inputs (list ghc-doctest))
     (home-page "https://hledger.org")
     (synopsis "Reusable library providing the core functionality of hledger")
     (description
@@ -6007,7 +5669,7 @@ Accounting.")
 (define-public ghc-hmatrix
   (package
     (name "ghc-hmatrix")
-    (version "0.20.0.0")
+    (version "0.20.2")
     (source
      (origin
        (method url-fetch)
@@ -6015,18 +5677,18 @@ Accounting.")
              "https://hackage.haskell.org/package/hmatrix/hmatrix-"
              version ".tar.gz"))
        (sha256
-        (base32 "1sqy1aci5zfagkb34mz3xdil7cl96z4b4cx28cha54vc5sx1lhpg"))))
+        (base32 "05462prqkbqpxfbzsgsp8waf0sirg2qz6lzsk7r1ll752n7gqkbg"))))
     (build-system haskell-build-system)
     (arguments
      `(#:extra-directories ("lapack")))
     (inputs
-     `(("ghc-random" ,ghc-random)
-       ("ghc-split" ,ghc-split)
-       ("ghc-storable-complex" ,ghc-storable-complex)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-vector" ,ghc-vector)
-       ;;("openblas" ,openblas)
-       ("lapack" ,lapack)))
+     (list ghc-random
+           ghc-split
+           ghc-storable-complex
+           ghc-semigroups
+           ghc-vector
+           ;;("openblas" ,openblas)
+           lapack))
     ;; Guix's OpenBLAS is built with the flag "NO_LAPACK=1" which
     ;; disables inclusion of the LAPACK functions.
     ;; (arguments `(#:configure-flags '("--flags=openblas")))
@@ -6053,11 +5715,8 @@ numerical computations based on BLAS and LAPACK.")
     (arguments
      `(#:extra-directories ("gsl")))
     (inputs
-     `(("ghc-hmatrix" ,ghc-hmatrix)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-random" ,ghc-random)
-       ("gsl" ,gsl)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+     (list ghc-hmatrix ghc-vector ghc-random gsl))
+    (native-inputs (list pkg-config))
     (home-page "https://github.com/albertoruiz/hmatrix")
     (synopsis "Haskell GSL binding")
     (description "This Haskell library provides a purely functional
@@ -6080,11 +5739,8 @@ using GSL.")
         (base32 "1cq049sj3q5r06x7i35hqrkf2jc4p4kfi9zv0jmi2vp7w4644i5q"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-vector" ,ghc-vector)
-       ("ghc-storable-complex" ,ghc-storable-complex)
-       ("ghc-hmatrix" ,ghc-hmatrix)
-       ("gsl" ,gsl)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+     (list ghc-vector ghc-storable-complex ghc-hmatrix gsl))
+    (native-inputs (list pkg-config))
     (home-page "http://code.haskell.org/hmatrix-gsl-stats")
     (synopsis "GSL Statistics interface for Haskell")
     (description "This Haskell library provides a purely functional
@@ -6106,8 +5762,7 @@ interface for statistics based on hmatrix and GSL.")
         (base32 "1mywr61kr852sbff26n9x95kswx9l4ycbv6s68qsbkh02xzqq7qz"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-hmatrix" ,ghc-hmatrix)
-       ("ghc-hmatrix-gsl" ,ghc-hmatrix-gsl)))
+     (list ghc-hmatrix ghc-hmatrix-gsl))
     (home-page "https://github.com/albertoruiz/hmatrix")
     (synopsis "Haskell interface to GSL special functions")
     (description "This library provides an interface to GSL special
@@ -6146,11 +5801,9 @@ determine the hostname.")
                 "0jnay5j13vpz6i1rkaj3j0d9v8jfpri499xn3l7wd01f81f5ncs4"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-old-locale" ,ghc-old-locale)))
+     (list ghc-old-locale))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+     (list ghc-tasty ghc-tasty-quickcheck ghc-tasty-hunit))
     (home-page "https://github.com/vincenthz/hs-hourglass")
     (synopsis "Simple time-related library for Haskell")
     (description
@@ -6164,38 +5817,37 @@ representations of current time.")
 (define-public ghc-hpack
   (package
     (name "ghc-hpack")
-    (version "0.31.2")
+    (version "0.34.5")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://hackage.haskell.org/package/hpack/"
                            "hpack-" version ".tar.gz"))
-       (patches (search-patches "ghc-hpack-fix-tests.patch"))
        (sha256
         (base32
-         "1l2d6185lawwhsj70swxkvcacm0hvcn9qsrlx4ph4gs6k578603g"))))
-    (build-system haskell-build-system)
-    (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-bifunctors" ,ghc-bifunctors)
-       ("ghc-cryptonite" ,ghc-cryptonite)
-       ("ghc-glob" ,ghc-glob)
-       ("ghc-http-client" ,ghc-http-client)
-       ("ghc-http-client-tls" ,ghc-http-client-tls)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-infer-license" ,ghc-infer-license)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-yaml" ,ghc-yaml)))
-    (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-interpolate" ,ghc-interpolate)
-       ("ghc-mockery" ,ghc-mockery)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-temporary" ,ghc-temporary)
-       ("hspec-discover" ,hspec-discover)))
+         "0gmm6jgi1sgyilphww6apq1x04grqznm7xhyb7g1rj5j7my40ws2"))))
+    (build-system haskell-build-system)
+    (inputs
+     (list ghc-aeson
+           ghc-bifunctors
+           ghc-cryptonite
+           ghc-glob
+           ghc-http-client
+           ghc-http-client-tls
+           ghc-http-types
+           ghc-infer-license
+           ghc-scientific
+           ghc-unordered-containers
+           ghc-vector
+           ghc-yaml))
+    (native-inputs
+     (list ghc-hspec
+           ghc-hunit
+           ghc-interpolate
+           ghc-mockery
+           ghc-quickcheck
+           ghc-temporary
+           hspec-discover))
     (home-page "https://github.com/sol/hpack")
     (synopsis "Tools for an alternative Haskell package format")
     (description
@@ -6210,7 +5862,7 @@ are described in a file named @code{package.yaml}.  Both @code{cabal2nix} and
 (define-public ghc-hspec-megaparsec
   (package
     (name "ghc-hspec-megaparsec")
-    (version "2.0.1")
+    (version "2.2.0")
     (source
      (origin
        (method url-fetch)
@@ -6221,13 +5873,12 @@ are described in a file named @code{package.yaml}.  Both @code{cabal2nix} and
              ".tar.gz"))
        (sha256
         (base32
-         "0w8nn2rh01lkiwsiyqh3gviklhfmy0245rakj94dmliyljw8skfg"))))
+         "0hyf06gzzqd6sqd76crwxycwgx804sd39z7i0c2vmv1qgsxv82gn"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-hspec-expectations" ,ghc-hspec-expectations)
-       ("ghc-megaparsec" ,ghc-megaparsec)))
+     (list ghc-hspec-expectations ghc-megaparsec))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)))
+     (list ghc-hspec))
     (home-page "https://github.com/mrkkrp/hspec-megaparsec")
     (synopsis "Utility functions for testing Megaparsec parsers with Hspec")
     (description
@@ -6238,7 +5889,7 @@ with Hspec.")
 (define-public ghc-hs-bibutils
   (package
     (name "ghc-hs-bibutils")
-    (version "6.7.0.0")
+    (version "6.10.0.0")
     (source
      (origin
        (method url-fetch)
@@ -6247,9 +5898,9 @@ with Hspec.")
              version ".tar.gz"))
        (sha256
         (base32
-         "1qfyssl76lm4g09yxr3y10kmf8cnzls46g5h0ijk0wpk9wlhbln5"))))
+         "1wnpy1v5rbii2iwlcc9psnww8pkirv9zl21s64cmbi6q7dv15g3n"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-syb" ,ghc-syb)))
+    (inputs (list ghc-syb))
     (home-page "https://hackage.haskell.org/package/hs-bibutils")
     (synopsis "Haskell bindings to bibutils")
     (description
@@ -6261,7 +5912,7 @@ MODS-format XML intermediate.")
 (define-public ghc-hslogger
   (package
     (name "ghc-hslogger")
-    (version "1.2.12")
+    (version "1.3.1.0")
     (source
      (origin
        (method url-fetch)
@@ -6269,13 +5920,15 @@ MODS-format XML intermediate.")
                            "hslogger-" version "/" "hslogger-"
                            version ".tar.gz"))
        (sha256 (base32
-                "0ykcsk7wqygvrg60r5kpl6xfinr706al8pfyk5wj67wjs24lqypr"))))
+                "0nyar9xcblx5jwks85y8f4jfy9k1h4ss6rvj4mdbiidrq3v688vz"))))
     (build-system haskell-build-system)
+    (arguments
+     `(#:cabal-revision
+       ("3" "04mda3bwr2a00f5nbkqc84d46lmqfsk3gibzg3amdh74ngb451xq")))
     (inputs
-     `(("ghc-network" ,ghc-network)
-       ("ghc-old-locale" ,ghc-old-locale)))
+     (list ghc-network ghc-old-locale))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)))
+     (list ghc-hunit ghc-network-bsd))
     (home-page "https://software.complete.org/hslogger")
     (synopsis "Logging framework for Haskell, similar to Python's logging module")
     (description "Hslogger lets each log message have a priority and source be
@@ -6287,29 +5940,28 @@ handler built in.")
 (define-public ghc-hslua
   (package
     (name "ghc-hslua")
-    (version "1.0.3.2")
+    (version "1.3.0.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://hackage.haskell.org/package/"
                                   "hslua/hslua-" version ".tar.gz"))
               (sha256
                (base32
-                "183bgl5jcx5y2r94lviqfw0a5w9089nxjd1z40k8vx9y2h60pm6j"))))
+                "0p39xm0mmxzs5x6aim11qkb7npn0d9h7li2kwfhry0dijd1vm18i"))))
     (build-system haskell-build-system)
     (arguments
      `(#:configure-flags '("-fsystem-lua")
        #:extra-directories ("lua")))
     (inputs
-     `(("lua" ,lua)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-fail" ,ghc-fail)))
+     (list lua ghc-base-compat))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-expected-failure" ,ghc-tasty-expected-failure)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-quickcheck-instances" ,ghc-quickcheck-instances)))
+     (list ghc-tasty
+           ghc-tasty-hunit
+           ghc-tasty-quickcheck
+           ghc-quickcheck
+           ghc-quickcheck-instances
+           ghc-fail
+           ghc-semigroups))
     (home-page "https://hackage.haskell.org/package/hslua")
     (synopsis "Lua language interpreter embedding in Haskell")
     (description
@@ -6320,7 +5972,7 @@ described in @url{https://www.lua.org/}.")
 (define-public ghc-hslua-module-system
   (package
     (name "ghc-hslua-module-system")
-    (version "0.2.1")
+    (version "0.2.2.1")
     (source
      (origin
        (method url-fetch)
@@ -6329,15 +5981,12 @@ described in @url{https://www.lua.org/}.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "1m7wz3g5c34pyizqw5mllzhsy2vziddhlbhjfwdvd7nhd3p4v3hh"))))
+         "0hk2splyasbplnggknjhlb423axc5b32xq8aq8zal4vvwlqhzvf1"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-hslua" ,ghc-hslua)
-       ("ghc-temporary" ,ghc-temporary)))
+     (list ghc-hslua ghc-temporary))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+     (list ghc-tasty ghc-tasty-lua ghc-tasty-hunit))
     (home-page "https://github.com/hslua/hslua-module-system")
     (synopsis "Lua module wrapper around Haskell's System module")
     (description "This library provides access to system information and
@@ -6350,7 +5999,7 @@ already been loaded before the loader can be added.")
 (define-public ghc-hslua-module-text
   (package
     (name "ghc-hslua-module-text")
-    (version "0.2.1")
+    (version "0.3.0.1")
     (source
      (origin
        (method url-fetch)
@@ -6359,13 +6008,12 @@ already been loaded before the loader can be added.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "1ikdwvvxhbd5wmfr85dzs2ccamh9rbbpgy899z7s1vlv5q1dj0hk"))))
+         "1vmd15n905i2pcsx748hz3h9kv5nnv74y663rj57q8mp0b40cbfl"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-hslua" ,ghc-hslua)))
+     (list ghc-hslua))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+     (list ghc-tasty ghc-tasty-lua ghc-tasty-hunit))
     (home-page "https://github.com/hslua/hslua-module-text")
     (synopsis "Lua module for text")
     (description
@@ -6377,7 +6025,7 @@ for Haskell.  The functions provided by this module are @code{upper},
 (define-public ghc-hsyaml
   (package
     (name "ghc-hsyaml")
-    (version "0.1.2.0")
+    (version "0.2.1.0")
     (source
      (origin
        (method url-fetch)
@@ -6385,11 +6033,17 @@ for Haskell.  The functions provided by this module are @code{upper},
                            "HsYAML/HsYAML-" version ".tar.gz"))
        (sha256
         (base32
-         "1pajfhj16559v64ixm8j7bvxdqmxg6c3c0z3wz7in8ckswgzfp54"))))
+         "10qzhsg789h37q22hm9p27dx4rhbykcbxp7p3pvkws8fr7ajgxv0"))))
     (build-system haskell-build-system)
     (arguments
-     `(#:cabal-revision
-       ("1" "0j6qmmcz5yqh89hs2cq453maix50q61vl2h0ahj5lg02bygn42cf")))
+     `(#:tests? #f ; TODO: Loops.
+       #:cabal-revision
+       ("2" "0f7867jfzlmlqnkv3fjrzjvvfzjlvhbm10kmg7n0qk69ic8grkbc")))
+;    (native-inputs
+;     `(("ghc-hsyaml" ,ghc-hsyaml)
+;       ("ghc-quickcheck" ,ghc-quickcheck)
+;       ("ghc-tasty" ,ghc-tasty)
+;       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
     (home-page "https://github.com/haskell-hvr/HsYAML")
     (synopsis "Pure Haskell YAML 1.2 parser")
     (description "This library provides a
@@ -6422,7 +6076,7 @@ for user-defined custom schemas).
 (define-public ghc-http-api-data
   (package
     (name "ghc-http-api-data")
-    (version "0.4.1")
+    (version "0.4.2")
     (source
      (origin
        (method url-fetch)
@@ -6431,25 +6085,25 @@ for user-defined custom schemas).
                            "http-api-data-" version ".tar.gz"))
        (sha256
         (base32
-         "1ps4bvln43gz72dr9mc3c9n1rn38c4rz6m49vxzz9nz6jz1978rv"))))
-    (build-system haskell-build-system)
-    (inputs `(("ghc-attoparsec" ,ghc-attoparsec)
-              ("ghc-attoparsec-iso8601" ,ghc-attoparsec-iso8601)
-              ("ghc-cookie" ,ghc-cookie)
-              ("ghc-hashable" ,ghc-hashable)
-              ("ghc-http-types" ,ghc-http-types)
-              ("ghc-time-compat" ,ghc-time-compat)
-              ("ghc-unordered-containers" ,ghc-unordered-containers)
-              ("ghc-uuid-types" ,ghc-uuid-types)))
-    (native-inputs
-     `(("cabal-doctest" ,cabal-doctest)
-       ("ghc-nats" ,ghc-nats)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-quickcheck-instances" ,ghc-quickcheck-instances)
-       ("ghc-doctest" ,ghc-doctest)
-       ("hspec-discover" ,hspec-discover)))
+         "0xzfvxxh33ivlnrnzmm19cni3jgb5ph18n9hykkw3d6l3rhwzcnl"))))
+    (build-system haskell-build-system)
+    (inputs (list ghc-attoparsec
+                  ghc-attoparsec-iso8601
+                  ghc-cookie
+                  ghc-hashable
+                  ghc-http-types
+                  ghc-time-compat
+                  ghc-unordered-containers
+                  ghc-uuid-types))
+    (native-inputs
+     (list cabal-doctest
+           ghc-nats
+           ghc-hunit
+           ghc-hspec
+           ghc-quickcheck
+           ghc-quickcheck-instances
+           ghc-doctest
+           hspec-discover))
     (home-page "https://github.com/fizruk/http-api-data")
     (synopsis "Convert to/from HTTP API data like URL pieces, headers and
 query parameters")
@@ -6513,10 +6167,9 @@ monads with anaphoric variants on @code{if} and @code{when} and a C-like
     ;; This package needs an older version of tasty.
     (arguments '(#:tests? #f))
     (inputs
-     `(("ghc-concatenative" ,ghc-concatenative)))
+     (list ghc-concatenative))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+     (list ghc-tasty ghc-tasty-hunit))
     (home-page "https://github.com/jaspervdj/indents")
     (synopsis "Indentation sensitive parser-combinators for parsec")
     (description
@@ -6539,10 +6192,9 @@ lines continued at an indented level below.")
          "0wlfm6bf55kfvm74xar9lmjg5v1103rs9m3grw1rq5bmcmhzxrhj"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-text-metrics" ,ghc-text-metrics)))
+     (list ghc-text-metrics))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-hspec hspec-discover))
     (home-page "https://hackage.haskell.org/package/infer-license")
     (synopsis "Infer software license from a given license file")
     (description "This library provides tools to infer a software
@@ -6561,10 +6213,9 @@ license from a given license file.")
        (sha256
         (base32 "0mvwii8jbh2ll54qb9dij5m66c6324s2y4vrwz1qr4wz40m3qa8l"))))
     (build-system haskell-build-system)
-    (native-inputs `(("ghc-hspec" ,ghc-hspec)))
+    (native-inputs (list ghc-hspec))
     (inputs
-     `(("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)))
+     (list ghc-attoparsec ghc-unordered-containers))
     (home-page "https://github.com/chrisdone/ini")
     (synopsis
      "Haskell library to easily handle configuration files in the INI format")
@@ -6576,7 +6227,7 @@ read and write configuration files in the simple INI format.")
 (define-public ghc-inline-c
   (package
     (name "ghc-inline-c")
-    (version "0.7.0.1")
+    (version "0.9.1.5")
     (source
      (origin
        (method url-fetch)
@@ -6584,20 +6235,14 @@ read and write configuration files in the simple INI format.")
                            "inline-c-" version ".tar.gz"))
        (sha256
         (base32
-         "19scbviwiv1fbsdcjji3dscjg7w0xa8r97xwkqqrwm7zhvrg5wns"))))
+         "0a0m3bhh910c5g46cwkxgflsgw5ab7lzymwll9hijyvwgnsw3h7i"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-ansi-wl-pprint" ,ghc-ansi-wl-pprint)
-       ("ghc-cryptohash" ,ghc-cryptohash)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-parsers" ,ghc-parsers)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-vector" ,ghc-vector)))
-    (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-raw-strings-qq" ,ghc-raw-strings-qq)
-       ("ghc-regex-posix" ,ghc-regex-posix)))
+     (list ghc-ansi-wl-pprint ghc-hashable ghc-parsers
+           ghc-unordered-containers ghc-vector))
+    (native-inputs
+     (list ghc-quickcheck ghc-hspec ghc-raw-strings-qq ghc-regex-posix
+           ghc-split))
     (home-page "https://hackage.haskell.org/package/inline-c")
     (synopsis "Write Haskell source files including C code inline")
     (description
@@ -6610,7 +6255,7 @@ minimal overhead.  No FFI required.")
 (define-public ghc-inline-c-cpp
   (package
     (name "ghc-inline-c-cpp")
-    (version "0.3.0.3")
+    (version "0.4.0.3")
     (source
      (origin
        (method url-fetch)
@@ -6618,13 +6263,12 @@ minimal overhead.  No FFI required.")
                            "inline-c-cpp-" version ".tar.gz"))
        (sha256
         (base32
-         "1sxwx9dh60qfpa72dymj015zwd6prhb70x5mkabqzi7nhg3aakln"))))
+         "0bqrhyic3cw1pqg7knsmkqx5swpr4kvf9bmz0mhmqbl6brmv5il0"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-inline-c" ,ghc-inline-c)
-       ("ghc-safe-exceptions" ,ghc-safe-exceptions)))
+     (list ghc-inline-c ghc-safe-exceptions))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)))
+     (list ghc-hspec))
     (home-page "https://hackage.haskell.org/package/inline-c-cpp")
     (synopsis "Lets you embed C++ code into Haskell")
     (description
@@ -6635,7 +6279,7 @@ minimal overhead.  No FFI required.")
 (define-public ghc-integer-logarithms
   (package
     (name "ghc-integer-logarithms")
-    (version "1.0.3")
+    (version "1.0.3.1")
     (source
      (origin
        (method url-fetch)
@@ -6644,23 +6288,16 @@ minimal overhead.  No FFI required.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "05pc5hws66csvcvfswlwcr2fplwn1lbssvwifjxkbbwqhq0n5qjs"))))
+         "0zzapclfabc76g8jzsbsqwdllx2zn0gp4raq076ib6v0mfgry2lv"))))
     (build-system haskell-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'update-constraints
-           (lambda _
-             (substitute* "integer-logarithms.cabal"
-               (("tasty >= 0\\.10 && < 1\\.1")
-                "tasty >= 0.10 && < 1.2")))))))
-    (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-smallcheck" ,ghc-smallcheck)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-tasty-smallcheck" ,ghc-tasty-smallcheck)))
+    (arguments `(#:tests? #f)) ; TODO: Needs tasty<1.4
+    (native-inputs
+     (list ghc-quickcheck
+           ghc-smallcheck
+           ghc-tasty
+           ghc-tasty-hunit
+           ghc-tasty-quickcheck
+           ghc-tasty-smallcheck))
     (home-page "https://github.com/Bodigrim/integer-logarithms")
     (synopsis "Integer logarithms")
     (description
@@ -6683,7 +6320,7 @@ in migrated modules.")
 (define-public ghc-interpolate
   (package
     (name "ghc-interpolate")
-    (version "0.2.0")
+    (version "0.2.1")
     (source
      (origin
        (method url-fetch)
@@ -6691,16 +6328,13 @@ in migrated modules.")
                            "interpolate-" version ".tar.gz"))
        (sha256
         (base32
-         "1gkaj98yz363v38fv78sqby236mp8yqwqcilx7kr2b9z0w3204bf"))))
+         "03jrkj9c62w0c2awym8mhpsgpd0jffl50cqwfrm7bbdfhd8dsxi7"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-haskell-src-meta" ,ghc-haskell-src-meta)))
+     (list ghc-haskell-src-meta))
     (native-inputs
-     `(("ghc-base-compat" ,ghc-base-compat)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-quickcheck-instances" ,ghc-quickcheck-instances)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-base-compat ghc-hspec ghc-quickcheck
+           ghc-quickcheck-instances hspec-discover))
     (home-page "https://github.com/sol/interpolate")
     (synopsis "String interpolation library")
     (description "This package provides a string interpolation library for
@@ -6710,7 +6344,7 @@ Haskell.")
 (define-public ghc-intervalmap
   (package
     (name "ghc-intervalmap")
-    (version "0.6.1.1")
+    (version "0.6.1.2")
     (source
      (origin
        (method url-fetch)
@@ -6718,10 +6352,10 @@ Haskell.")
                            "IntervalMap-" version ".tar.gz"))
        (sha256
         (base32
-         "0vdlvxvhf7vjyv0mfn6jaj2i2gclqv8419ck32s2jxfcmki5m5g8"))))
+         "03smzhwk1zf5na544b0azp49j4gvafqsih9ggwf6yng38yhixwld"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-quickcheck))
     (home-page "http://www.chr-breitkopf.de/comp/IntervalMap")
     (synopsis "Containers for intervals, with efficient search")
     (description
@@ -6733,7 +6367,7 @@ example code on the home page for a quick introduction.")
 (define-public ghc-intervals
   (package
     (name "ghc-intervals")
-    (version "0.8.1")
+    (version "0.9.2")
     (source
      (origin
        (method url-fetch)
@@ -6741,28 +6375,22 @@ example code on the home page for a quick introduction.")
                            "intervals/intervals-" version ".tar.gz"))
        (sha256
         (base32
-         "00vyxf3ba9d7aas3npfapr53w71fslgh69fczjb25axr66fvzqww"))))
+         "1qibvgys8lw61x9na3iy3dcglyj9qyhcbfc00glnagl7cbk1shlv"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-distributive" ,ghc-distributive)))
+     (list ghc-distributive))
     (native-inputs
-     `(("cabal-doctest" ,cabal-doctest)
-       ("ghc-doctest" ,ghc-doctest)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
-    (arguments
-     `(#:cabal-revision
-       ("4" "1qx3q0v13l1zaln9zdk8chxpxhshbz5x0vqm0qda7d1kpv7h6a7r")))
+     (list ghc-quickcheck))
     (home-page "https://github.com/ekmett/intervals")
     (synopsis "Interval arithmetic")
-    (description "This library provides
-@code{Numeric.Interval.Interval}, which represets a closed, convex set
-of floating point values.")
+    (description "This library provides @code{Numeric.Interval.Interval},
+which represets a closed, convex set of floating point values.")
     (license license:bsd-3)))
 
 (define-public ghc-invariant
   (package
     (name "ghc-invariant")
-    (version "0.5.3")
+    (version "0.5.4")
     (source
      (origin
        (method url-fetch)
@@ -6771,23 +6399,21 @@ of floating point values.")
              version ".tar.gz"))
        (sha256
         (base32
-         "03245nhcqxx6b0yw81fzqaqd7cgllmx8awzhvs2xv7ys73pmsgnp"))))
+         "1jlp0gbfjsx7k08275djh8m3v4rpg8llw5gdkg9s9qfx0lc0mymr"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-bifunctors" ,ghc-bifunctors)
-       ("ghc-comonad" ,ghc-comonad)
-       ("ghc-contravariant" ,ghc-contravariant)
-       ("ghc-profunctors" ,ghc-profunctors)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-statevar" ,ghc-statevar)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-th-abstraction" ,ghc-th-abstraction)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)))
+     (list ghc-bifunctors
+           ghc-comonad
+           ghc-contravariant
+           ghc-profunctors
+           ghc-semigroups
+           ghc-statevar
+           ghc-tagged
+           ghc-th-abstraction
+           ghc-transformers-compat
+           ghc-unordered-containers))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-hspec ghc-quickcheck hspec-discover))
     (home-page "https://github.com/nfrisby/invariant-functors")
     (synopsis "Haskell98 invariant functors")
     (description "Haskell98 invariant functors (also known as exponential
@@ -6798,7 +6424,7 @@ functors).  For more information, see Edward Kmett's article
 (define-public ghc-io-streams
   (package
     (name "ghc-io-streams")
-    (version "1.5.1.0")
+    (version "1.5.2.1")
     (source
      (origin
        (method url-fetch)
@@ -6806,22 +6432,22 @@ functors).  For more information, see Edward Kmett's article
                            "io-streams/io-streams-" version ".tar.gz"))
        (sha256
         (base32
-         "1c7byr943x41nxpc3bnz152fvfbmakafq2958wyf9qiyp2pz18la"))))
+         "1y3sqmxrwiksz7pl4hf3vzvg8p8n00qnv98nj5xbpcadlh468rny"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-bytestring-builder" ,ghc-bytestring-builder)
-       ("ghc-network" ,ghc-network)
-       ("ghc-primitive" ,ghc-primitive)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-zlib-bindings" ,ghc-zlib-bindings)))
+     (list ghc-attoparsec
+           ghc-bytestring-builder
+           ghc-network
+           ghc-primitive
+           ghc-vector
+           ghc-zlib-bindings))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
-       ("ghc-zlib" ,ghc-zlib)))
+     (list ghc-hunit
+           ghc-quickcheck
+           ghc-test-framework
+           ghc-test-framework-hunit
+           ghc-test-framework-quickcheck2
+           ghc-zlib))
     (home-page "https://hackage.haskell.org/package/io-streams")
     (synopsis "Simple and composable stream I/O")
     (description "This library contains simple and easy-to-use
@@ -6842,14 +6468,13 @@ primitives for I/O using streams.")
         (base32
          "1dcn5hd4fiwyq7m01r6fi93vfvygca5s6mz87c78m0zyj29clkmp"))))
     (build-system haskell-build-system)
+    (arguments
+     `(#:cabal-revision
+       ("3" "02k9halblgnynlm781ahc81yxla8z7cck1gikm8555v78rf5hv7x")))
     (inputs
-     `(("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-io-streams" ,ghc-io-streams)
-       ("ghc-network" ,ghc-network)))
+     (list ghc-attoparsec ghc-io-streams ghc-network))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)))
+     (list ghc-hunit ghc-test-framework ghc-test-framework-hunit))
     (home-page "http://snapframework.com/")
     (synopsis "HAProxy protocol 1.5 support for io-streams")
     (description "HAProxy protocol version 1.5 support
@@ -6862,7 +6487,7 @@ through a forwarding proxy that is configured to speak this protocol.")
 (define-public ghc-iproute
   (package
     (name "ghc-iproute")
-    (version "1.7.7")
+    (version "1.7.11")
     (source
      (origin
        (method url-fetch)
@@ -6872,15 +6497,12 @@ through a forwarding proxy that is configured to speak this protocol.")
              ".tar.gz"))
        (sha256
         (base32
-         "0gab5930nvzrpvisx3x43ydnp2rd4fbmy9cq1zpgqy1adx5gx8z6"))))
+         "12wa59b1zgjqp8dmygq2x44ml0cb89fhn1k0zkj4aqz7rhkwsp90"))))
     (build-system haskell-build-system)
     (arguments `(#:tests? #f)) ; FIXME: Tests cannot find System.ByteOrder,
                                ; exported by ghc-byteorder.  Doctest issue.
     (inputs
-     `(("ghc-appar" ,ghc-appar)
-       ("ghc-byteorder" ,ghc-byteorder)
-       ("ghc-network" ,ghc-network)
-       ("ghc-safe" ,ghc-safe)))
+     (list ghc-appar ghc-byteorder ghc-network ghc-safe))
     (home-page "https://www.mew.org/~kazu/proj/iproute/")
     (synopsis "IP routing table")
     (description "IP Routing Table is a tree of IP ranges to search one of
@@ -6891,7 +6513,7 @@ removed.  Both IPv4 and IPv6 are supported.")
 (define-public ghc-ipynb
   (package
     (name "ghc-ipynb")
-    (version "0.1")
+    (version "0.1.0.2")
     (source
      (origin
        (method url-fetch)
@@ -6899,20 +6521,13 @@ removed.  Both IPv4 and IPv6 are supported.")
                            "ipynb/ipynb-" version ".tar.gz"))
        (sha256
         (base32
-         "0daadhzil4q573mqb0rpvjzm0vpkzgzqcimw480qpvlh6rhppwj5"))))
+         "0qky4l5aaiq7ypwbxh0mr7s572290fi596f18dg68qpyzc49a9kx"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-base64-bytestring" ,ghc-base64-bytestring)
-       ("ghc-aeson" ,ghc-aeson)
-       ("ghc-semigroups" ,ghc-semigroups)))
+     (list ghc-unordered-containers ghc-base64-bytestring ghc-aeson
+           ghc-semigroups))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-aeson-diff" ,ghc-aeson-diff)
-       ("ghc-microlens-aeson" ,ghc-microlens-aeson)
-       ("ghc-microlens" ,ghc-microlens)
-       ("ghc-vector" ,ghc-vector)))
+     (list ghc-tasty ghc-tasty-hunit ghc-microlens-aeson ghc-microlens))
     (home-page "https://hackage.haskell.org/package/ipynb")
     (synopsis "Data structure for working with Jupyter notebooks")
     (description "This library defines a data structure for representing
@@ -6935,7 +6550,7 @@ instances for conversion to and from JSON .ipynb files.")
     (arguments
      `(#:extra-directories ("wireless-tools")))
     (inputs
-     `(("wireless-tools" ,wireless-tools)))
+     (list wireless-tools))
     (home-page "https://github.com/jaor/iwlib")
     (synopsis "Haskell binding to the iw wireless networking library")
     (description
@@ -6947,7 +6562,7 @@ supported systems.")
 (define-public ghc-json
   (package
     (name "ghc-json")
-    (version "0.9.3")
+    (version "0.10")
     (source
      (origin
        (method url-fetch)
@@ -6955,21 +6570,24 @@ supported systems.")
                            "json-" version ".tar.gz"))
        (sha256
         (base32
-         "1z8s3mfg76p2flqqd2wqsi96l5bg8k8w8m58zlv81pw3k7h1vbwb"))))
+         "1fjnd2r4gl2hfqx158db3cn3rsyin4ch7rf9scb2hcy90cy6l10c"))))
     (build-system haskell-build-system)
+    (arguments
+     `(#:cabal-revision
+       ("1" "16fp0y95gaibjravzj1hxdkng1cr8zqjqzd14m48kf4jrq3npz6r")))
     (inputs
-     `(("ghc-syb" ,ghc-syb)))
+     (list ghc-syb))
     (home-page "https://hackage.haskell.org/package/json")
     (synopsis "Serializes Haskell data to and from JSON")
     (description "This package provides a parser and pretty printer for
-converting between Haskell values and JSON.
-JSON (JavaScript Object Notation) is a lightweight data-interchange format.")
+converting between Haskell values and JSON.  @acronym{JavaScript Object
+Notation, JSON} is a lightweight data-interchange format.")
     (license license:bsd-3)))
 
 (define-public ghc-juicypixels
   (package
     (name "ghc-juicypixels")
-    (version "3.3.4")
+    (version "3.3.6")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://hackage.haskell.org/package/"
@@ -6977,14 +6595,11 @@ JSON (JavaScript Object Notation) is a lightweight data-interchange format.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0qacrnz2qcykj3f6c4k2p8qd31pa2slpv3ykfblgizrfh3401q6x"))))
+                "1f8giivsqxma19ax78dr7j4gir12iyfqn2mlsd27zzl8dn7dy6w1"))))
     (build-system haskell-build-system)
     (outputs '("out" "static" "doc"))
     (inputs
-     `(("ghc-zlib" ,ghc-zlib)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-primitive" ,ghc-primitive)
-       ("ghc-mmap" ,ghc-mmap)))
+     (list ghc-zlib ghc-vector ghc-primitive))
     (home-page "https://github.com/Twinside/Juicy.Pixels")
     (synopsis "Picture loading and serialization library")
     (description
@@ -6995,7 +6610,7 @@ TIFF and GIF formats.")
 (define-public ghc-kan-extensions
   (package
     (name "ghc-kan-extensions")
-    (version "5.2")
+    (version "5.2.3")
     (source
      (origin
        (method url-fetch)
@@ -7005,18 +6620,18 @@ TIFF and GIF formats.")
              ".tar.gz"))
        (sha256
         (base32
-         "1lyvyiwwh962j2nnnsqzlvp5zq6z8p3spvhmji99cjvldxc7wwkb"))))
+         "1rkjxwc2k2425d2shdra6wzd4f4dpj76hxmq8mish4f0lz9gxxml"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-adjunctions" ,ghc-adjunctions)
-       ("ghc-comonad" ,ghc-comonad)
-       ("ghc-contravariant" ,ghc-contravariant)
-       ("ghc-distributive" ,ghc-distributive)
-       ("ghc-free" ,ghc-free)
-       ("ghc-invariant" ,ghc-invariant)
-       ("ghc-semigroupoids" ,ghc-semigroupoids)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)))
+     (list ghc-adjunctions
+           ghc-comonad
+           ghc-contravariant
+           ghc-distributive
+           ghc-free
+           ghc-invariant
+           ghc-semigroupoids
+           ghc-tagged
+           ghc-transformers-compat))
     (home-page "https://github.com/ekmett/kan-extensions/")
     (synopsis "Kan extensions library")
     (description "This library provides Kan extensions, Kan lifts, various
@@ -7036,10 +6651,9 @@ forms of the Yoneda lemma, and (co)density (co)monads for Haskell.")
         (base32
          "0bi02jdirkys8v7flf39vrpla2a74z1z0sdhy9lb9v7cmcc6rmpk"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-syb" ,ghc-syb)))
+    (inputs (list ghc-syb))
     (native-inputs
-     `(("ghc-happy" ,ghc-happy)
-       ("ghc-alex" ,ghc-alex)))
+     (list ghc-happy ghc-alex))
     (home-page "https://visq.github.io/language-c/")
     (synopsis "Analysis and generation of C code")
     (description
@@ -7061,7 +6675,7 @@ and a large set of GNU extensions.")
         (base32
          "0hdg67ainlqpjjghg3qin6fg4p783m0zmjqh4rd5gyizwiplxkp1"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-prettyclass" ,ghc-prettyclass)))
+    (inputs (list ghc-prettyclass))
     (arguments
      `(#:tests? #f
        #:cabal-revision
@@ -7082,12 +6696,23 @@ representation, parsing, and pretty-printing of GLSL 1.50 code.")
        (uri (string-append "https://hackage.haskell.org/package/"
                            "language-haskell-extract-" version "/"
                            "language-haskell-extract-" version ".tar.gz"))
+       (patches (search-patches "ghc-language-haskell-extract-ghc-8.10.patch"))
        (sha256
         (base32
          "1nxcs7g8a1sp91bzpy4cj6s31k5pvc3gvig04cbrggv5cvjidnhl"))))
     (build-system haskell-build-system)
+    (arguments
+     `(#:cabal-revision
+       ("1" "1chx4g8ngb1hpyh3r9rbl8rkjkm67klms4wmw3p1g2llg47vvqip")
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'update-constraints
+           (lambda _
+             (substitute* "language-haskell-extract.cabal"
+               (("(template-haskell)\\s+[^,]+" all dep)
+                dep)))))))
     (inputs
-     `(("ghc-regex-posix" ,ghc-regex-posix)))
+     (list ghc-regex-posix ghc-template-haskell))
     (home-page "https://github.com/finnsson/template-helper")
     (synopsis "Haskell module to automatically extract functions from
 the local code")
@@ -7103,7 +6728,7 @@ with @code{wc} (for a web service).")
 (define-public ghc-lens
   (package
     (name "ghc-lens")
-    (version "4.17.1")
+    (version "4.19.2")
     (source
      (origin
        (method url-fetch)
@@ -7111,43 +6736,46 @@ with @code{wc} (for a web service).")
                            version ".tar.gz"))
        (sha256
         (base32
-         "1gpkc53l2cggnfrgg5k4ih82rycjbdvpj9pnbi5cq8ms0dbvs4a7"))))
+         "0fy2vr5r11cc6ana8m2swqgs3zals4kims55vd6119bi76p5iy2j"))))
     (build-system haskell-build-system)
+    (arguments
+     `(#:tests? #f ; TODO: Needs vector<0.12.2
+       #:cabal-revision
+       ("6" "1k08my9rh1il3ibiyhljxkgndfgk143pn5a6nyzjnckw3la09myl")))
     (outputs '("out" "static" "doc"))
     (inputs
-     `(("ghc-base-orphans" ,ghc-base-orphans)
-       ("ghc-bifunctors" ,ghc-bifunctors)
-       ("ghc-distributive" ,ghc-distributive)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-free" ,ghc-free)
-       ("ghc-kan-extensions" ,ghc-kan-extensions)
-       ("ghc-parallel" ,ghc-parallel)
-       ("ghc-reflection" ,ghc-reflection)
-       ("ghc-semigroupoids" ,ghc-semigroupoids)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-call-stack" ,ghc-call-stack)
-       ("ghc-comonad" ,ghc-comonad)
-       ("ghc-contravariant" ,ghc-contravariant)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-profunctors" ,ghc-profunctors)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-void" ,ghc-void)
-       ("ghc-generic-deriving" ,ghc-generic-deriving)
-       ("ghc-nats" ,ghc-nats)
-       ("ghc-simple-reflect" ,ghc-simple-reflect)
-       ("hlint" ,hlint)))
-    (native-inputs
-     `(("cabal-doctest" ,cabal-doctest)
-       ("ghc-doctest" ,ghc-doctest)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework-th" ,ghc-test-framework-th)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-base-orphans
+           ghc-bifunctors
+           ghc-distributive
+           ghc-exceptions
+           ghc-free
+           ghc-kan-extensions
+           ghc-parallel
+           ghc-reflection
+           ghc-semigroupoids
+           ghc-vector
+           ghc-call-stack
+           ghc-comonad
+           ghc-contravariant
+           ghc-hashable
+           ghc-profunctors
+           ghc-semigroups
+           ghc-tagged
+           ghc-transformers-compat
+           ghc-unordered-containers
+           ghc-void
+           ghc-generic-deriving
+           ghc-nats
+           ghc-simple-reflect
+           hlint))
+    (native-inputs
+     (list cabal-doctest
+           ghc-doctest
+           ghc-hunit
+           ghc-test-framework
+           ghc-test-framework-hunit
+           ghc-test-framework-quickcheck2
+           ghc-quickcheck))
     (home-page "https://github.com/ekmett/lens/")
     (synopsis "Lenses, Folds and Traversals")
     (description "This library provides @code{Control.Lens}.  The combinators
@@ -7159,17 +6787,17 @@ indexed variants.")
 (define-public ghc-lens-family-core
   (package
     (name "ghc-lens-family-core")
-    (version "1.2.3")
+    (version "2.0.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
-             "mirror://hackage/package/lens-family-core/lens-family-core-"
+             "https://hackage.haskell.org/package/lens-family-core/lens-family-core-"
              version
              ".tar.gz"))
        (sha256
         (base32
-         "009rf10pj1cb50v44cc1pq7qvfrmkkk9dikahs9qmvbvgl3mykwi"))))
+         "0ni6s873hy2h3b316835ssmlyr05yinb3a8jq5b01p9ppp9zrd0r"))))
     (build-system haskell-build-system)
     (home-page
      "http://hackage.haskell.org/package/lens-family-core")
@@ -7205,8 +6833,8 @@ lenses and traversals for those who require Haskell 98.")
         (base32
          "0g7jnhng3j7z5517aaqga0144aamibsbpgm3yynwyfzkq1kp0f28"))))
     (build-system haskell-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("libffi" ,libffi)))
+    (native-inputs (list pkg-config))
+    (inputs (list libffi))
     (home-page "https://hackage.haskell.org/package/libffi")
     (synopsis "Haskell binding to libffi")
     (description
@@ -7217,32 +6845,23 @@ to be called from Haskell.")
 (define-public ghc-libmpd
   (package
     (name "ghc-libmpd")
-    (version "0.9.0.10")
+    (version "0.10.0.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
-             "mirror://hackage/package/libmpd/libmpd-"
+             "https://hackage.haskell.org/package/libmpd/libmpd-"
              version
              ".tar.gz"))
        (sha256
         (base32
-         "0vy287mn1vk8kvij5i3hc0p02l886cpsq5dds7kl6g520si3abkb"))))
+         "088vlir0n3wps2p5ydgyx51p41nfjcm2v02sszpyjj3c8z7f4qkh"))))
     (build-system haskell-build-system)
-    ;; Tests fail on i686.
-    ;; See https://github.com/vimus/libmpd-haskell/issues/112
-    (arguments `(#:tests? #f))
     (inputs
-     `(("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-old-locale" ,ghc-old-locale)
-       ("ghc-data-default-class" ,ghc-data-default-class)
-       ("ghc-network" ,ghc-network)
-       ("ghc-safe-exceptions" ,ghc-safe-exceptions)
-       ("ghc-utf8-string" ,ghc-utf8-string)))
+     (list ghc-attoparsec ghc-data-default-class ghc-network
+           ghc-safe-exceptions ghc-utf8-string))
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-quickcheck ghc-hspec hspec-discover))
     (home-page "https://github.com/vimus/libmpd-haskell")
     (synopsis "Haskell client library for the Music Player Daemon")
     (description "This package provides a pure Haskell client library for the
@@ -7252,7 +6871,7 @@ Music Player Daemon.")
 (define-public ghc-lib-parser
   (package
     (name "ghc-lib-parser")
-    (version "8.8.0.20190424")
+    (version "8.10.7.20210828")
     (source
      (origin
        (method url-fetch)
@@ -7260,12 +6879,11 @@ Music Player Daemon.")
                            "ghc-lib-parser/ghc-lib-parser-" version ".tar.gz"))
        (sha256
         (base32
-         "12gsh994pr13bsybwlravmi21la66dyw74pk74yfw2pnz682wv10"))))
+         "178v4f7q9ndqmlhg2vhlk6ifm3ilajlrz8iw84vggzs7rp0fnlx0"))))
     (build-system haskell-build-system)
     (outputs '("out" "static" "doc")) ; documentation is 39M
     (native-inputs
-     `(("ghc-alex" ,ghc-alex)
-       ("ghc-happy" ,ghc-happy)))
+     (list ghc-alex ghc-happy))
     (home-page "https://github.com/digital-asset/ghc-lib")
     (synopsis "The GHC API, decoupled from GHC versions")
     (description "This library implements the GHC API.  It is like the
@@ -7287,7 +6905,7 @@ compiler versions.")
          "01zvk86kg726lf2vnlr7dxiz7g3xwi5a4ak9gcfbwyhynkzjmsfi"))))
     (build-system haskell-build-system)
     (inputs
-     `(("libxml2" ,libxml2)))
+     (list libxml2))
     (arguments
      `(#:configure-flags
        `(,(string-append "--extra-include-dirs="
@@ -7302,7 +6920,7 @@ compiler versions.")
 (define-public ghc-libyaml
   (package
     (name "ghc-libyaml")
-    (version "0.1.1.0")
+    (version "0.1.2")
     (source
      (origin
        (method url-fetch)
@@ -7310,7 +6928,7 @@ compiler versions.")
                            "libyaml/libyaml-" version ".tar.gz"))
        (sha256
         (base32
-         "0psznm9c3yjsyj9aj8m2svvv9m2v0x90hnwarcx5sbswyi3l00va"))
+         "1dcpbsjg6n305l07isxmavgp01lbv1qggy16acjyxjlz35pxchlg"))
        (modules '((guix build utils)))
        (snippet
         ;; Delete bundled LibYAML.
@@ -7322,11 +6940,9 @@ compiler versions.")
      `(#:configure-flags `("--flags=system-libyaml")
        #:extra-directories ("libyaml+static")))
     (inputs
-     `(("ghc-conduit" ,ghc-conduit)
-       ("ghc-resourcet" ,ghc-resourcet)
-       ("libyaml+static" ,libyaml+static)))
+     (list ghc-conduit ghc-resourcet libyaml+static))
     (home-page "https://github.com/snoyberg/yaml#readme")
-    (synopsis "Low-level, streaming YAML interface.")
+    (synopsis "Low-level, streaming YAML interface")
     (description "This package provides a Haskell wrapper over the
 LibYAML C library.")
     (license license:bsd-3)))
@@ -7334,7 +6950,7 @@ LibYAML C library.")
 (define-public ghc-lifted-async
   (package
     (name "ghc-lifted-async")
-    (version "0.10.0.4")
+    (version "0.10.2.1")
     (source
      (origin
        (method url-fetch)
@@ -7343,19 +6959,19 @@ LibYAML C library.")
              version ".tar.gz"))
        (sha256
         (base32
-         "0cwl1d0wjpdk0v1l1qxiqiksmak950c8gx169c1q77cg0z18ijf9"))))
+         "0j4f5471qfxkxy84ri87bcvp30ikh4m30imcggwn8m5v8igp218d"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-async" ,ghc-async)
-       ("ghc-lifted-base" ,ghc-lifted-base)
-       ("ghc-transformers-base" ,ghc-transformers-base)
-       ("ghc-monad-control" ,ghc-monad-control)
-       ("ghc-constraints" ,ghc-constraints)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-expected-failure" ,ghc-tasty-expected-failure)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-th" ,ghc-tasty-th)))
+     (list ghc-async
+           ghc-lifted-base
+           ghc-transformers-base
+           ghc-monad-control
+           ghc-constraints
+           ghc-hunit
+           ghc-tasty
+           ghc-tasty-expected-failure
+           ghc-tasty-hunit
+           ghc-tasty-th))
     (home-page "https://github.com/maoe/lifted-async")
     (synopsis "Run lifted IO operations asynchronously and wait for their results")
     (description
@@ -7380,10 +6996,8 @@ instance of @code{MonadBase} or @code{MonadBaseControl}.")
     (build-system haskell-build-system)
     (arguments `(#:tests? #f)) ; FIXME: Missing testing libraries.
     (inputs
-     `(("ghc-transformers-base" ,ghc-transformers-base)
-       ("ghc-monad-control" ,ghc-monad-control)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)
-       ("ghc-hunit" ,ghc-hunit)))
+     (list ghc-transformers-base ghc-monad-control ghc-transformers-compat
+           ghc-hunit))
     (home-page "https://github.com/basvandijk/lifted-base")
     (synopsis "Lifted IO operations from the base library")
     (description "Lifted-base exports IO operations from the @code{base}
@@ -7396,7 +7010,7 @@ Kaseorg.")
 (define-public ghc-linear
   (package
     (name "ghc-linear")
-    (version "1.20.9")
+    (version "1.21.6")
     (source
      (origin
        (method url-fetch)
@@ -7404,31 +7018,31 @@ Kaseorg.")
                            "linear-" version ".tar.gz"))
        (sha256
         (base32
-         "0h7yqigq593n7wsl7nz6a5f137wznm7y679wsii0ph0zsc4v5af5"))))
-    (build-system haskell-build-system)
-    (inputs
-     `(("ghc-adjunctions" ,ghc-adjunctions)
-       ("ghc-base-orphans" ,ghc-base-orphans)
-       ("ghc-bytes" ,ghc-bytes)
-       ("ghc-cereal" ,ghc-cereal)
-       ("ghc-distributive" ,ghc-distributive)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-lens" ,ghc-lens)
-       ("ghc-reflection" ,ghc-reflection)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-semigroupoids" ,ghc-semigroupoids)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-void" ,ghc-void)))
-    (native-inputs
-     `(("cabal-doctest" ,cabal-doctest)
-       ("ghc-doctest" ,ghc-doctest)
-       ("ghc-simple-reflect" ,ghc-simple-reflect)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-hunit" ,ghc-hunit)))
+         "0ax6prmc7b53w0lz5ddc40wrjj9bm7wldpp57283gx9hdf8qrb35"))))
+    (build-system haskell-build-system)
+    (inputs
+     (list ghc-adjunctions
+           ghc-base-orphans
+           ghc-bytes
+           ghc-cereal
+           ghc-distributive
+           ghc-hashable
+           ghc-lens
+           ghc-reflection
+           ghc-semigroups
+           ghc-semigroupoids
+           ghc-tagged
+           ghc-transformers-compat
+           ghc-unordered-containers
+           ghc-vector
+           ghc-void))
+    (native-inputs
+     (list cabal-doctest
+           ghc-doctest
+           ghc-simple-reflect
+           ghc-test-framework
+           ghc-test-framework-hunit
+           ghc-hunit))
     (home-page "https://github.com/ekmett/linear/")
     (synopsis "Linear algebra library for Haskell")
     (description
@@ -7439,7 +7053,7 @@ vector spaces.")
 (define-public ghc-listlike
   (package
     (name "ghc-listlike")
-    (version "4.6.2")
+    (version "4.7.6")
     (source
      (origin
        (method url-fetch)
@@ -7449,16 +7063,16 @@ vector spaces.")
          version ".tar.gz"))
        (sha256
         (base32
-         "0m65x8yaq7q50gznln8mga2wrc8cvjx6gw9rim8s7xqcrx6y5zjh"))))
+         "08jip0q2f9qc95wcqka2lrqpf8r7sswsi5104w73kyrbmfirqnrd"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-vector" ,ghc-vector)
-       ("ghc-dlist" ,ghc-dlist)
-       ("ghc-fmlist" ,ghc-fmlist)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-random" ,ghc-random)
-       ("ghc-utf8-string" ,ghc-utf8-string)))
+     (list ghc-vector
+           ghc-dlist
+           ghc-fmlist
+           ghc-hunit
+           ghc-quickcheck
+           ghc-random
+           ghc-utf8-string))
     (home-page "https://github.com/JohnLato/listlike")
     (synopsis "Generic support for list-like structures")
     (description "The ListLike module provides a common interface to the
@@ -7485,13 +7099,9 @@ can handle infinite lists.")
          "0pxb5ah8r5pzpz2ibqw3g9g1isigb4z7pbzfrwr8kmcjn74ab3kf"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-fail" ,ghc-fail)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)))
+     (list ghc-attoparsec ghc-fail ghc-unordered-containers))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+     (list ghc-tasty ghc-tasty-hunit ghc-tasty-quickcheck))
     (home-page "https://github.com/llvm-hs/llvm-hs/")
     (synopsis "Pure Haskell LLVM functionality (no FFI)")
     (description "llvm-hs-pure is a set of pure Haskell types and functions
@@ -7514,19 +7124,16 @@ llvm-hs-pure does not require LLVM to be available.")
          "0723xgh45h9cyxmmjsvxnsp8bpn1ljy4qgh7a7vqq3sj9d6wzq00"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("ghc-llvm-hs-pure" ,ghc-llvm-hs-pure)
-       ("llvm" ,llvm-9)))
+     (list ghc-attoparsec ghc-exceptions ghc-utf8-string ghc-llvm-hs-pure
+           llvm-9))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-temporary" ,ghc-temporary)
-       ("ghc-pretty-show" ,ghc-pretty-show)
-       ("ghc-temporary" ,ghc-temporary)))
+     (list ghc-tasty
+           ghc-tasty-hunit
+           ghc-tasty-quickcheck
+           ghc-quickcheck
+           ghc-temporary
+           ghc-pretty-show
+           ghc-temporary))
     (home-page "https://github.com/llvm-hs/llvm-hs/")
     (synopsis "General purpose LLVM bindings for Haskell")
     (description "llvm-hs is a set of Haskell bindings for LLVM.  Unlike other
@@ -7551,8 +7158,7 @@ into Haskell.")
                 "0d0lwxxgd16is9aw6v3ps4r9prv3dj8xscmm45fvzq3nicjiawcf"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-hspec hspec-discover))
     (home-page "https://hackage.haskell.org/package/logging-facade")
     (synopsis "Simple logging abstraction that allows multiple back-ends")
     (description
@@ -7563,7 +7169,7 @@ back-ends.")
 (define-public ghc-logict
   (package
     (name "ghc-logict")
-    (version "0.7.0.2")
+    (version "0.7.1.0")
     (source
      (origin
        (method url-fetch)
@@ -7573,11 +7179,11 @@ back-ends.")
              ".tar.gz"))
        (sha256
         (base32
-         "1xfgdsxg0lp8m0a2cb83rcxrnnc37asfikay2kydi933anh9ihfc"))))
+         "1d22b7r8lnak5k8ars166cxbk1lv7gf8g0qs604irsx2s474ybi7"))))
     (build-system haskell-build-system)
+    (inputs (list ghc-fail))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+     (list ghc-async ghc-tasty ghc-tasty-hunit))
     (home-page "http://code.haskell.org/~dolio/")
     (synopsis "Backtracking logic-programming monad")
     (description "This library provides a continuation-based, backtracking,
@@ -7590,7 +7196,7 @@ online}.")
 (define-public ghc-lucid
   (package
     (name "ghc-lucid")
-    (version "2.9.12")
+    (version "2.9.12.1")
     (source
      (origin
        (method url-fetch)
@@ -7600,17 +7206,13 @@ online}.")
              ".tar.gz"))
        (sha256
         (base32
-         "156wniydd1hlb7rygbm95zln8ky8lai8rn2apkkv0rax9cdw6jrh"))))
+         "0nky4pqxd6828kg3js90ks6r3hxs5x48ibfz37pw2dr7y1nygq21"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-blaze-builder" ,ghc-blaze-builder)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-mmorph" ,ghc-mmorph)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)))
+     (list ghc-blaze-builder ghc-hashable ghc-mmorph
+           ghc-unordered-containers))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-bifunctors" ,ghc-bifunctors)))
+     (list ghc-hunit ghc-hspec ghc-bifunctors))
     (arguments
      `(#:cabal-revision
        ("1"
@@ -7645,13 +7247,10 @@ Same combinator can be used for attributes and elements
     (arguments
      '(#:tests? #f ; requires older versions of QuickCheck and tasty.
        #:cabal-revision
-       ("3" "1sify6gnsalyp6dakfzi0mdy5jcz2kcp9jsdsgkmxd40nfzgd44m")))
+       ("6" "1sh2g5wkh0m6646cxnii0k20f0crwdcnprfl9jfg7gxn5875bkip")))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+     (list ghc-hunit ghc-quickcheck ghc-tasty ghc-tasty-hunit
+           ghc-tasty-quickcheck))
     (home-page "https://github.com/hvr/lzma")
     (synopsis "LZMA/XZ compression and decompression")
     (description
@@ -7663,7 +7262,7 @@ monadic incremental interface is provided as well.")
 (define-public ghc-lzma-conduit
   (package
     (name "ghc-lzma-conduit")
-    (version "1.2.1")
+    (version "1.2.2")
     (source
      (origin
        (method url-fetch)
@@ -7671,19 +7270,17 @@ monadic incremental interface is provided as well.")
                            "lzma-conduit-" version ".tar.gz"))
        (sha256
         (base32
-         "0hm72da7xk9l3zxjh274yg444vf405djxqbkf3q3p2qhicmxlmg9"))))
+         "1z6q16hzp2r5a4gdbg9akky5l9bfarzzhzswrgvh0v28ax400whb"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-conduit" ,ghc-conduit)
-       ("ghc-lzma" ,ghc-lzma)
-       ("ghc-resourcet" ,ghc-resourcet)))
+     (list ghc-conduit ghc-lzma ghc-resourcet))
     (native-inputs
-     `(("ghc-base-compat" ,ghc-base-compat)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-base-compat
+           ghc-test-framework
+           ghc-test-framework-hunit
+           ghc-test-framework-quickcheck2
+           ghc-hunit
+           ghc-quickcheck))
     (home-page "https://github.com/alphaHeavy/lzma-conduit")
     (synopsis "Conduit interface for lzma/xz compression")
     (description
@@ -7716,17 +7313,17 @@ than its name.")
 (define-public ghc-managed
   (package
     (name "ghc-managed")
-    (version "1.0.6")
+    (version "1.0.8")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
-             "mirror://hackage/package/managed/managed-"
+             "https://hackage.haskell.org/package/managed/managed-"
              version
              ".tar.gz"))
        (sha256
         (base32
-         "1kbrw99yh5x5blykmx2n88mplbbi4ss1ij5j17b7asw6q0ihm9zi"))))
+         "00wzfy9facwgimrilz7bxaigr79w10733h8zfgyhll644p2rnz38"))))
     (build-system haskell-build-system)
     (home-page "http://hackage.haskell.org/package/managed")
     (synopsis "Monad for managed values")
@@ -7752,24 +7349,24 @@ orphan instances
 (define-public ghc-markdown-unlit
   (package
     (name "ghc-markdown-unlit")
-    (version "0.5.0")
+    (version "0.5.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
-                    "mirror://hackage/package/markdown-unlit/"
+                    "https://hackage.haskell.org/package/markdown-unlit/"
                     "markdown-unlit-" version ".tar.gz"))
               (sha256
                (base32
-                "1gy79vr85vcp13rdjh0hz7zv6daqqffww4j0cqn2lpjjh9xhsbg7"))))
+                "0njzn56m8z6lm70xyixbylbnpjz1gk7x8vdsdvi3qld9m66gc3n7"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-base-compat" ,ghc-base-compat)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-silently" ,ghc-silently)
-       ("ghc-stringbuilder" ,ghc-stringbuilder)
-       ("ghc-temporary" ,ghc-temporary)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-base-compat
+           ghc-hspec
+           ghc-quickcheck
+           ghc-silently
+           ghc-stringbuilder
+           ghc-temporary
+           hspec-discover))
     (home-page "https://github.com/sol/markdown-unlit#readme")
     (synopsis "Literate Haskell support for Markdown")
     (description "This package allows you to have a README.md that at the
@@ -7779,7 +7376,7 @@ same time is a literate Haskell program.")
 (define-public ghc-math-functions
   (package
     (name "ghc-math-functions")
-    (version "0.3.3.0")
+    (version "0.3.4.2")
     (source
      (origin
        (method url-fetch)
@@ -7788,20 +7385,18 @@ same time is a literate Haskell program.")
                            "math-functions-" version ".tar.gz"))
        (sha256
         (base32
-         "1s5nbs40sc3r4z08n0j8bw40cy0zkp03fjjn3p27zkd4fvm9kib3"))))
+         "18y1hlc8p6yyxa14zdbm84aaq58kksbrlfp3rj2bd4ilsb00mrf1"))))
     (build-system haskell-build-system)
     (arguments `(#:tests? #f))  ; FIXME: 1 test fails.
     (inputs
-     `(("ghc-data-default-class" ,ghc-data-default-class)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-vector-th-unbox" ,ghc-vector-th-unbox)))
+     (list ghc-data-default-class ghc-vector ghc-vector-th-unbox))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-erf" ,ghc-erf)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)))
+     (list ghc-hunit
+           ghc-quickcheck
+           ghc-erf
+           ghc-test-framework
+           ghc-test-framework-hunit
+           ghc-test-framework-quickcheck2))
     (home-page "https://github.com/bos/math-functions")
     (synopsis "Special functions and Chebyshev polynomials for Haskell")
     (description "This Haskell library provides implementations of
@@ -7812,7 +7407,7 @@ functions are often useful in statistical and numerical computing.")
 (define-public ghc-megaparsec
   (package
     (name "ghc-megaparsec")
-    (version "7.0.5")
+    (version "9.0.1")
     (source
      (origin
        (method url-fetch)
@@ -7821,17 +7416,12 @@ functions are often useful in statistical and numerical computing.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "0bqx1icbmk8s7wmbcdzsgnlh607c7kzg8l80cp02dxr5valjxp7j"))))
+         "00953zvxfyjibw8c1ssmixxh0cwn59pz24zbh6s34rk3v14vqa3j"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-parser-combinators" ,ghc-parser-combinators)
-       ("ghc-scientific" ,ghc-scientific)))
+     (list ghc-case-insensitive ghc-parser-combinators ghc-scientific))
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-hspec-expectations" ,ghc-hspec-expectations)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-quickcheck ghc-hspec ghc-hspec-expectations hspec-discover))
     (home-page "https://github.com/mrkkrp/megaparsec")
     (synopsis "Monadic parser combinators")
     (description
@@ -7843,22 +7433,19 @@ speed, flexibility, and quality of parse errors.")
 (define-public ghc-memory
   (package
     (name "ghc-memory")
-    (version "0.14.18")
+    (version "0.15.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://hackage.haskell.org/package/"
                                   "memory/memory-" version ".tar.gz"))
               (sha256
                (base32
-                "01rmq3vagxzjmm96qnfxk4f0516cn12bp5m8inn8h5r918bqsigm"))))
+                "0a9mxcddnqn4359hk59d6l2zbh0vp154yb5vs1a8jw4l38n8kzz3"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-basement" ,ghc-basement)
-       ("ghc-foundation" ,ghc-foundation)))
+     (list ghc-basement ghc-foundation))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+     (list ghc-tasty ghc-tasty-quickcheck ghc-tasty-hunit))
     (home-page "https://github.com/vincenthz/hs-memory")
     (synopsis "Memory abstractions for Haskell")
     (description
@@ -7872,7 +7459,7 @@ set, memory copy, ..) and more")
 (define-public ghc-memotrie
   (package
     (name "ghc-memotrie")
-    (version "0.6.9")
+    (version "0.6.10")
     (source
      (origin
        (method url-fetch)
@@ -7882,10 +7469,10 @@ set, memory copy, ..) and more")
              ".tar.gz"))
        (sha256
         (base32
-         "157p0pi6rrq74a35mq6zkkycv4ah7xhkbrcmnkb9xf7pznw4aq0x"))))
+         "0lxsarhyhhkp58wpbp7b08scmjxq7s46jfl9vhp2yfq973hz0kaq"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-newtype-generics" ,ghc-newtype-generics)))
+     (list ghc-newtype-generics))
     (home-page "https://github.com/conal/MemoTrie")
     (synopsis "Trie-based memo functions")
     (description "This package provides a functional library for creating
@@ -7895,7 +7482,7 @@ efficient memo functions using tries.")
 (define-public ghc-microlens
   (package
     (name "ghc-microlens")
-    (version "0.4.10")
+    (version "0.4.12.0")
     (source
      (origin
        (method url-fetch)
@@ -7904,10 +7491,10 @@ efficient memo functions using tries.")
                            "microlens-" version ".tar.gz"))
        (sha256
         (base32
-         "1v277yyy4p9q57xr2lfp6qs24agglfczmcabrapxrzci3jfshmcw"))))
+         "10q7gl9yavcln58sxdxzih7ff0ixxq5hpd87icvxw97yqf1p6hmm"))))
     (build-system haskell-build-system)
     (home-page
-     "https://github.com/aelve/microlens")
+     "https://github.com/monadfix/microlens")
     (synopsis "Provides a tiny lens Haskell library with no dependencies")
     (description "This Haskell package provides a lens library, just like
 @code{ghc-lens}, but smaller.  It provides essential lenses and
@@ -7920,29 +7507,27 @@ stripped.  As the result, this package has no dependencies.")
 (define-public ghc-microlens-aeson
   (package
     (name "ghc-microlens-aeson")
-    (version "2.3.0.4")
+    (version "2.3.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://hackage.haskell.org/package/"
                            "microlens-aeson/microlens-aeson-"
                            version ".tar.gz"))
-       (patches (search-patches "ghc-microlens-aeson-fix-tests.patch"))
        (sha256
         (base32
-         "0w630kk5bnily1qh41081gqgbwmslrh5ad21899gwnb2r3jripyw"))))
+         "074mzpk7av6i0xf7xy42jpzgljlmyw805md1vz4sqy85m99f0ikr"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-microlens" ,ghc-microlens)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-vector" ,ghc-vector)))
+     (list ghc-aeson
+           ghc-attoparsec
+           ghc-hashable
+           ghc-microlens
+           ghc-scientific
+           ghc-unordered-containers
+           ghc-vector))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+     (list ghc-tasty ghc-tasty-hunit))
     (home-page "https://github.com/fosskers/microlens-aeson")
     (synopsis "Law-abiding lenses for Aeson, using microlens")
     (description "This library provides law-abiding lenses for Aeson, using
@@ -7952,7 +7537,7 @@ microlens.")
 (define-public ghc-microlens-ghc
   (package
     (name "ghc-microlens-ghc")
-    (version "0.4.10")
+    (version "0.4.13")
     (source
      (origin
        (method url-fetch)
@@ -7962,9 +7547,9 @@ microlens.")
              ".tar.gz"))
        (sha256
         (base32
-         "102dbrdsdadxbbhvx8avv1wbk84767a7lkb8ckp3zxk9g7qlly33"))))
+         "1r6x788br3f9rksj0dmk1nyh5mfvd9zzasclf1mi3rxhb7c0j926"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-microlens" ,ghc-microlens)))
+    (inputs (list ghc-microlens))
     (home-page "https://github.com/monadfix/microlens")
     (synopsis "Use @code{microlens} with GHC libraries like @code{array}")
     (description "This library provides everything that @code{microlens}
@@ -7978,7 +7563,7 @@ microlens} family; see the readme
 (define-public ghc-microlens-mtl
   (package
     (name "ghc-microlens-mtl")
-    (version "0.1.11.1")
+    (version "0.2.0.1")
     (source
      (origin
        (method url-fetch)
@@ -7988,11 +7573,10 @@ microlens} family; see the readme
              ".tar.gz"))
        (sha256
         (base32
-         "0l6z1gkzwcpv89bxf5vgfrjb6gq2pj7sjjc53nvi5b9alx34zryk"))))
+         "0ijy7xyd5lbc3calhcrhy8czkf3fjcxrv68p7kd2a5b352rfi7fp"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-microlens" ,ghc-microlens)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)))
+     (list ghc-microlens ghc-transformers-compat))
     (home-page "https://github.com/monadfix/microlens")
     (synopsis
      "@code{microlens} support for Reader/Writer/State from mtl")
@@ -8007,7 +7591,7 @@ readme @uref{https://github.com/aelve/microlens#readme, on Github}.")
 (define-public ghc-microlens-platform
   (package
     (name "ghc-microlens-platform")
-    (version "0.3.11")
+    (version "0.4.2")
     (source
      (origin
        (method url-fetch)
@@ -8016,16 +7600,16 @@ readme @uref{https://github.com/aelve/microlens#readme, on Github}.")
              "microlens-platform/microlens-platform-" version ".tar.gz"))
        (sha256
         (base32
-         "18950lxgmsg5ksvyyi3zs1smjmb1qf1q73a3p3g44bh21miz0xwb"))))
+         "0yf0z0glq2d6mpclzswc64h9w2cck4fd8l8ffm89pyb0a5n8m4c7"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-hashable" ,ghc-hashable)
-       ("ghc-microlens" ,ghc-microlens)
-       ("ghc-microlens-ghc" ,ghc-microlens-ghc)
-       ("ghc-microlens-mtl" ,ghc-microlens-mtl)
-       ("ghc-microlens-th" ,ghc-microlens-th)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-vector" ,ghc-vector)))
+     (list ghc-hashable
+           ghc-microlens
+           ghc-microlens-ghc
+           ghc-microlens-mtl
+           ghc-microlens-th
+           ghc-unordered-containers
+           ghc-vector))
     (home-page "https://github.com/monadfix/microlens")
     (synopsis "Feature-complete microlens")
     (description
@@ -8050,7 +7634,7 @@ readme @uref{https://github.com/aelve/microlens#readme, on Github}.")
 (define-public ghc-microlens-th
   (package
     (name "ghc-microlens-th")
-    (version "0.4.2.3")
+    (version "0.4.3.10")
     (source
      (origin
        (method url-fetch)
@@ -8059,13 +7643,10 @@ readme @uref{https://github.com/aelve/microlens#readme, on Github}.")
                            "microlens-th-" version ".tar.gz"))
        (sha256
         (base32
-         "13qw0pwcgd6f6i39rwgqwcwk1d4da5x7wv3gna7gdlxaq331h41j"))))
+         "1dg2xhj85fy8q39m5dd94kjlabjyxgc0336vzkg0174l6l110l1c"))))
     (build-system haskell-build-system)
-    (arguments
-     `(#:cabal-revision
-       ("1" "167in7b1qhgrspx81bdm2jyg9qji66sk7id282c0s99kmp0d01n6")))
-    (inputs `(("ghc-microlens" ,ghc-microlens)
-              ("ghc-th-abstraction" ,ghc-th-abstraction)))
+    (inputs (list ghc-microlens ghc-th-abstraction))
+    (native-inputs (list ghc-tagged))
     (home-page
      "https://github.com/aelve/microlens")
     (synopsis "Automatic generation of record lenses for
@@ -8079,7 +7660,7 @@ used both from lens and microlens).")
 (define-public ghc-missingh
   (package
     (name "ghc-missingh")
-    (version "1.4.1.0")
+    (version "1.4.3.0")
     (source
      (origin
        (method url-fetch)
@@ -8087,24 +7668,26 @@ used both from lens and microlens).")
                            "MissingH-" version ".tar.gz"))
        (sha256
         (base32
-         "1jp0vk6w9a7fzrbxfhx773105jp2s1n50klq9ak6spfl7bgx5v29"))))
+         "196cniya5wzcv2d777nr0f7hinclpals4ia1mkzzv35870pqr6lw"))))
     (build-system haskell-build-system)
-    ;; Tests require the unmaintained testpack package, which depends on the
-    ;; outdated QuickCheck version 2.7, which can no longer be built with
-    ;; recent versions of GHC and Haskell libraries.
-    (arguments '(#:tests? #f))
-    (inputs
-     `(("ghc-network" ,ghc-network)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-regex-compat" ,ghc-regex-compat)
-       ("ghc-hslogger" ,ghc-hslogger)
-       ("ghc-random" ,ghc-random)
-       ("ghc-old-time" ,ghc-old-time)
-       ("ghc-old-locale" ,ghc-old-locale)))
-    (native-inputs
-     `(("ghc-errorcall-eq-instance" ,ghc-errorcall-eq-instance)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-hunit" ,ghc-hunit)))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'update-constraints
+           (lambda _
+             (substitute* "MissingH.cabal"
+               (("(random)\\s+[^,]+" all dep)
+                dep)))))))
+    (inputs
+     (list ghc-network
+           ghc-hunit
+           ghc-regex-compat
+           ghc-hslogger
+           ghc-random
+           ghc-old-time
+           ghc-old-locale))
+    (native-inputs
+     (list ghc-errorcall-eq-instance ghc-quickcheck ghc-hunit))
     ;; ‘Official’ <http://software.complete.org/missingh> redirects to a 404.
     (home-page "https://github.com/haskell-hvr/missingh")
     (synopsis "Large utility library")
@@ -8138,7 +7721,7 @@ do on-demand loading.")
 (define-public ghc-mmorph
   (package
     (name "ghc-mmorph")
-    (version "1.1.3")
+    (version "1.1.5")
     (source
      (origin
        (method url-fetch)
@@ -8148,10 +7731,10 @@ do on-demand loading.")
              ".tar.gz"))
        (sha256
         (base32
-         "0rfsy9n9mlinpmqi2s17fhc67fzma2ig5fbmh6m5m830canzf8vr"))))
+         "0bq9m3hlfax1826gg5yhih79x33rvfx59wdh8yf43azd7l74bys6"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-transformers-compat" ,ghc-transformers-compat)))
+     (list ghc-transformers-compat))
     (home-page "https://hackage.haskell.org/package/mmorph")
     (synopsis "Monad morphisms")
     (description
@@ -8172,12 +7755,9 @@ manipulating monad transformer stacks.")
                 "09ypgm3z69gq8mj6y66ss58kbjnk15r8frwcwbqcfbfksfnfv8dp"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-temporary" ,ghc-temporary)
-       ("ghc-logging-facade" ,ghc-logging-facade)
-       ("ghc-base-compat" ,ghc-base-compat)))
+     (list ghc-temporary ghc-logging-facade ghc-base-compat))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-hspec hspec-discover))
     (home-page "https://hackage.haskell.org/package/mockery")
     (synopsis "Support functions for automated testing")
     (description
@@ -8187,7 +7767,7 @@ manipulating monad transformer stacks.")
 (define-public ghc-monad-control
   (package
     (name "ghc-monad-control")
-    (version "1.0.2.3")
+    (version "1.0.3.1")
     (source
      (origin
        (method url-fetch)
@@ -8196,11 +7776,10 @@ manipulating monad transformer stacks.")
              "/monad-control-" version ".tar.gz"))
        (sha256
         (base32
-         "1c92833gr6cadidjdp8mlznkpp8lyxl0w3y7d19y8yi3klc3843c"))))
+         "0g3if9km8ik80bcy130a826ig9wlk4bnf0qli3vmwdwr9nhaw2xf"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-transformers-base" ,ghc-transformers-base)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)))
+     (list ghc-transformers-base ghc-transformers-compat))
     (home-page "https://github.com/basvandijk/monad-control")
     (synopsis "Monad transformers to lift control operations like exception
 catching")
@@ -8212,7 +7791,7 @@ a subset of @code{MonadBase} into which generic control operations such as
 (define-public ghc-monad-logger
   (package
     (name "ghc-monad-logger")
-    (version "0.3.30")
+    (version "0.3.36")
     (source
      (origin
        (method url-fetch)
@@ -8221,20 +7800,20 @@ a subset of @code{MonadBase} into which generic control operations such as
                            "monad-logger-" version ".tar.gz"))
        (sha256
         (base32
-         "102l0v75hbvkmrypiyg4ybb6rbc7nij5nxs1aihmqfdpg04rkkp7"))))
-    (build-system haskell-build-system)
-    (inputs `(("ghc-transformers-compat" ,ghc-transformers-compat)
-              ("ghc-stm-chans" ,ghc-stm-chans)
-              ("ghc-lifted-base" ,ghc-lifted-base)
-              ("ghc-resourcet" ,ghc-resourcet)
-              ("ghc-conduit" ,ghc-conduit)
-              ("ghc-conduit-extra" ,ghc-conduit-extra)
-              ("ghc-fast-logger" ,ghc-fast-logger)
-              ("ghc-transformers-base" ,ghc-transformers-base)
-              ("ghc-monad-control" ,ghc-monad-control)
-              ("ghc-monad-loops" ,ghc-monad-loops)
-              ("ghc-blaze-builder" ,ghc-blaze-builder)
-              ("ghc-exceptions" ,ghc-exceptions)))
+         "12rw0k01gkhiqjm2fhxgkmribksmizhj14xphfn8fkd86wzl0vbh"))))
+    (build-system haskell-build-system)
+    (inputs (list ghc-transformers-compat
+                  ghc-stm-chans
+                  ghc-lifted-base
+                  ghc-resourcet
+                  ghc-conduit
+                  ghc-conduit-extra
+                  ghc-fast-logger
+                  ghc-transformers-base
+                  ghc-monad-control
+                  ghc-monad-loops
+                  ghc-blaze-builder
+                  ghc-exceptions))
     (home-page "https://github.com/kazu-yamamoto/logger")
     (synopsis "Provides a class of monads which can log messages for Haskell")
     (description "This Haskell package uses a monad transformer approach
@@ -8258,8 +7837,7 @@ code locations of messages.")
         (base32
          "062c2sn3hc8h50p1mhqkpyv6x8dydz2zh3ridvlfjq9nqimszaky"))))
     (build-system haskell-build-system)
-    (native-inputs `(("ghc-tasty" ,ghc-tasty)
-                     ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+    (native-inputs (list ghc-tasty ghc-tasty-hunit))
     (home-page "https://github.com/mokus0/monad-loops")
     (synopsis "Monadic loops for Haskell")
     (description "This Haskell package provides some useful control
@@ -8269,30 +7847,30 @@ operators for looping.")
 (define-public ghc-monad-par
   (package
     (name "ghc-monad-par")
-    (version "0.3.4.8")
+    (version "0.3.5")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://hackage.haskell.org/package/"
                            "monad-par-" version "/"
                            "monad-par-" version ".tar.gz"))
-       (patches (search-patches "ghc-monad-par-fix-tests.patch"))
-       (sha256
-        (base32
-         "0ldrzqy24fsszvn2a2nr77m2ih7xm0h9bgkjyv1l274aj18xyk7q"))))
-    (build-system haskell-build-system)
-    (inputs `(("ghc-abstract-par" ,ghc-abstract-par)
-              ("ghc-abstract-deque" ,ghc-abstract-deque)
-              ("ghc-monad-par-extras" ,ghc-monad-par-extras)
-              ("ghc-mwc-random" ,ghc-mwc-random)
-              ("ghc-parallel" ,ghc-parallel)))
-    (native-inputs `(("ghc-quickcheck" ,ghc-quickcheck)
-                     ("ghc-hunit" ,ghc-hunit)
-                     ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-                     ("ghc-test-framework-quickcheck2"
-                      ,ghc-test-framework-quickcheck2)
-                     ("ghc-test-framework" ,ghc-test-framework)
-                     ("ghc-test-framework-th" ,ghc-test-framework-th)))
+       (sha256
+        (base32
+         "1a8m99g9x1ivch4vhksk7fdzygbil3d33w8gdqngxbmwdikdafl2"))))
+    (build-system haskell-build-system)
+    (arguments
+     `(#:tests? #f ; TODO: ghc-test-framework-th does not build.
+       #:cabal-revision
+       ("1" "17l7zjykf5iqjmw1pq4iwls7v9x9d3in94iikxabx43q5l2iccsm")))
+    (inputs (list ghc-abstract-par ghc-abstract-deque ghc-monad-par-extras
+                  ghc-mwc-random ghc-parallel))
+    (native-inputs (list ghc-quickcheck
+                         ghc-hunit
+                         ghc-test-framework-hunit
+                         ghc-test-framework-quickcheck2
+                         ghc-test-framework
+                         ;("ghc-test-framework-th" ,ghc-test-framework-th)
+                         ))
     (home-page "https://github.com/simonmar/monad-par")
     (synopsis "Haskell library for parallel programming based on a monad")
     (description "The @code{Par} monad offers an API for parallel
@@ -8316,9 +7894,7 @@ that are much lighter weight than IO-threads.")
         (base32
          "0bl4bd6jzdc5zm20q1g67ppkfh6j6yn8fwj6msjayj621cck67p2"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-abstract-par" ,ghc-abstract-par)
-              ("ghc-cereal" ,ghc-cereal)
-              ("ghc-random" ,ghc-random)))
+    (inputs (list ghc-abstract-par ghc-cereal ghc-random))
     (home-page "https://github.com/simonmar/monad-par")
     (synopsis "Combinators and extra features for Par monads for Haskell")
     (description "This Haskell package provides additional data structures,
@@ -8328,7 +7904,7 @@ and other added capabilities layered on top of the @code{Par} monad.")
 (define-public ghc-monadrandom
   (package
     (name "ghc-monadrandom")
-    (version "0.5.1.1")
+    (version "0.5.3")
     (source
      (origin
        (method url-fetch)
@@ -8337,12 +7913,10 @@ and other added capabilities layered on top of the @code{Par} monad.")
                            "MonadRandom-" version ".tar.gz"))
        (sha256
         (base32
-         "0w44jl1n3kqvqaflh82l1wj3xxbhzfs3kf4m8rk7w6fgg8llmnmb"))))
+         "17qaw1gg42p9v6f87dj5vih7l88lddbyd8880ananj8avanls617"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-transformers-compat" ,ghc-transformers-compat)
-              ("ghc-primitive" ,ghc-primitive)
-              ("ghc-fail" ,ghc-fail)
-              ("ghc-random" ,ghc-random)))
+    (inputs (list ghc-transformers-compat ghc-primitive ghc-fail
+                  ghc-random))
     (home-page "https://github.com/byorgey/MonadRandom")
     (synopsis "Random-number generation monad for Haskell")
     (description "This Haskell package provides support for computations
@@ -8375,7 +7949,7 @@ the @code{mtl-tf} package.")
 (define-public ghc-mono-traversable
   (package
     (name "ghc-mono-traversable")
-    (version "1.0.13.0")
+    (version "1.0.15.3")
     (source
      (origin
        (method url-fetch)
@@ -8384,19 +7958,12 @@ the @code{mtl-tf} package.")
                            "mono-traversable-" version ".tar.gz"))
        (sha256
         (base32
-         "1bqy982lpdb83lacfy76n8kqw5bvd31avxj25kg8gkgycdh0g0ma"))))
+         "1dvlp7r7r1lc3fxkwaz68f1nffg83240q8a989x24x1x67rj1clq"))))
     (build-system haskell-build-system)
     (outputs '("out" "static" "doc"))
-    (inputs `(("ghc-unordered-containers" ,ghc-unordered-containers)
-              ("ghc-hashable" ,ghc-hashable)
-              ("ghc-vector" ,ghc-vector)
-              ("ghc-vector-algorithms" ,ghc-vector-algorithms)
-              ("ghc-split" ,ghc-split)))
-    (native-inputs `(("ghc-hspec" ,ghc-hspec)
-                     ("ghc-hunit" ,ghc-hunit)
-                     ("ghc-quickcheck" ,ghc-quickcheck)
-                     ("ghc-semigroups" ,ghc-semigroups)
-                     ("ghc-foldl" ,ghc-foldl)))
+    (inputs (list ghc-unordered-containers ghc-hashable ghc-vector
+                  ghc-vector-algorithms ghc-split))
+    (native-inputs (list ghc-hspec ghc-hunit ghc-quickcheck ghc-foldl))
     (home-page "https://github.com/snoyberg/mono-traversable")
     (synopsis "Haskell classes for mapping, folding, and traversing monomorphic
 containers")
@@ -8410,7 +7977,7 @@ data structures as non-empty.")
 (define-public ghc-monoid-extras
   (package
     (name "ghc-monoid-extras")
-    (version "0.5.1")
+    (version "0.6")
     (source
      (origin
        (method url-fetch)
@@ -8418,15 +7985,10 @@ data structures as non-empty.")
                            "monoid-extras/monoid-extras-" version ".tar.gz"))
        (sha256
         (base32
-         "0xfrkgqn9d31z54l617m3w3kkd5m9vjb4yl247r3zzql3mpb1f37"))))
+         "0ki1d3b1xpf653qj7brlqdgngghwrnmapy5gja75iiydfx2506a1"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-groups" ,ghc-groups)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-semigroupoids" ,ghc-semigroupoids)))
-    (arguments
-     `(#:cabal-revision
-       ("1" "0b8x5d6vh7mpigvjvcd8f38a1nyzn1vfdqypslw7z9fgsr742913")))
+     (list ghc-groups ghc-semigroupoids))
     (home-page "https://hackage.haskell.org/package/monoid-extras")
     (synopsis "Various extra monoid-related definitions and utilities")
     (description "This package provides various extra monoid-related
@@ -8517,7 +8079,7 @@ binding.")
 (define-public ghc-mwc-random
   (package
     (name "ghc-mwc-random")
-    (version "0.14.0.0")
+    (version "0.15.0.2")
     (source
      (origin
        (method url-fetch)
@@ -8526,20 +8088,15 @@ binding.")
                            "mwc-random-" version ".tar.gz"))
        (sha256
         (base32
-         "18pg24sw3b79b32cwx8q01q4k0lm34mwr3l6cdkchl8alvd0wdq0"))))
+         "0ny2mw4am24d6ykrm8rbcjnrq6p2cjmzjb4m6qfk54wfdxflvmim"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-primitive" ,ghc-primitive)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-math-functions" ,ghc-math-functions)))
+     (list ghc-primitive ghc-vector ghc-math-functions))
     (arguments
      `(#:tests? #f)) ; FIXME: Test-Suite `spec` fails.
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)))
+     (list ghc-hunit ghc-quickcheck ghc-test-framework
+           ghc-test-framework-hunit ghc-test-framework-quickcheck2))
     (home-page "https://github.com/bos/mwc-random")
     (synopsis "Random number generation library for Haskell")
     (description "This Haskell package contains code for generating
@@ -8570,7 +8127,7 @@ between 2 and 3 times faster than the Mersenne Twister.")
     (build-system haskell-build-system)
     (arguments `(#:haddock? #f))
     (inputs
-     `(("ghc-hashable" ,ghc-hashable)))
+     (list ghc-hashable))
     (home-page "https://hackage.haskell.org/package/nats")
     (synopsis "Natural numbers")
     (description "This library provides the natural numbers for Haskell.")
@@ -8613,8 +8170,8 @@ between 2 and 3 times faster than the Mersenne Twister.")
        #:cabal-revision
        ("1"
         "1wfdy716s5p1sqp2gsg43x8wch2dxg0vmbbndlb2h3d8c9jzxnca")))
-    (inputs `(("ncurses" ,ncurses)))
-    (native-inputs `(("ghc-c2hs" ,ghc-c2hs)))
+    (inputs (list ncurses))
+    (native-inputs (list ghc-c2hs))
     (home-page "https://john-millikin.com/software/haskell-ncurses/")
     (synopsis "Modernised bindings to GNU ncurses")
     (description "GNU ncurses is a library for creating command-line application
@@ -8625,7 +8182,7 @@ ncurses.")
 (define-public ghc-network
   (package
     (name "ghc-network")
-    (version "2.8.0.1")
+    (version "3.1.1.1")
     (outputs '("out" "static" "doc"))
     (source
      (origin
@@ -8636,15 +8193,13 @@ ncurses.")
              ".tar.gz"))
        (sha256
         (base32
-         "0im8k51rw3ahmr23ny10pshwbz09jfg0fdpam0hzf2hgxnzmvxb1"))))
+         "16ic2hgvadyiy0zfnyd2zknf8rxqmwzpy5mw5x9apwpzfc0mkvyp"))))
     (build-system haskell-build-system)
     ;; The regression tests depend on an unpublished module.
     (arguments `(#:tests? #f))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-doctest" ,ghc-doctest)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)))
+     (list ghc-hunit ghc-doctest ghc-test-framework
+           ghc-test-framework-hunit))
     (home-page "https://github.com/haskell/network")
     (synopsis "Low-level networking interface")
     (description
@@ -8654,7 +8209,7 @@ ncurses.")
 (define-public ghc-network-bsd
   (package
     (name "ghc-network-bsd")
-    (version "2.8.0.0")
+    (version "2.8.1.0")
     (source
      (origin
        (method url-fetch)
@@ -8662,10 +8217,13 @@ ncurses.")
                            "network-bsd/network-bsd-" version ".tar.gz"))
        (sha256
         (base32
-         "0dfbwgrr28y6ypw7p1ppqg7v746qf14569q4xazj4ahdjw2xkpi5"))))
+         "0kid0811lv4x761fd5gv6lsc8p5j2bn41rfd366pjb642p562jfr"))))
     (build-system haskell-build-system)
+    (arguments
+     `(#:cabal-revision
+       ("4" "1gd9a8j7fwg0jz0s6il5fk9sl0hm19ja1w56ix51wa0qi2h5x56d")))
     (inputs
-     `(("ghc-network" ,ghc-network)))
+     (list ghc-network))
     (home-page "https://github.com/haskell/network-bsd")
     (synopsis "POSIX network database (<netdb.h>) API")
     (description "This package provides Haskell bindings to the the POSIX
@@ -8675,7 +8233,7 @@ network database (<netdb.h>) API.")
 (define-public ghc-network-byte-order
   (package
     (name "ghc-network-byte-order")
-    (version "0.1.1.1")
+    (version "0.1.6")
     (source
      (origin
        (method url-fetch)
@@ -8684,10 +8242,10 @@ network database (<netdb.h>) API.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "19cs6157amcc925vwr92q1azwwzkbam5g0k70i6qi80fhpikh37c"))))
+         "0pnwcg13k4qw82n0zc1xibyc24sc77y79j5a62pqdmjrnz4wrc7j"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-doctest" ,ghc-doctest)))
+     (list ghc-doctest))
     (home-page "https://hackage.haskell.org/package/network-byte-order")
     (synopsis "Network byte order utilities")
     (description "This library provides peek and poke functions for network
@@ -8732,8 +8290,7 @@ IPv4, IPv6 and MAC addresses.")
          "0whvi0pbwjy6dbwfdf9rv1j3yr3lcmfp3q7a8pwq63g537l4l2l3"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-network" ,ghc-network)
-       ("ghc-network-bsd" ,ghc-network-bsd)))
+     (list ghc-network ghc-network-bsd))
     (home-page
      "http://hackage.haskell.org/package/network-multicast")
     (synopsis "Simple multicast library for Haskell")
@@ -8749,7 +8306,7 @@ sending UDP datagrams over multicast (class D) addresses.")
 (define-public ghc-network-uri
   (package
     (name "ghc-network-uri")
-    (version "2.6.1.0")
+    (version "2.6.4.1")
     (outputs '("out" "static" "doc"))
     (source
      (origin
@@ -8760,14 +8317,13 @@ sending UDP datagrams over multicast (class D) addresses.")
              ".tar.gz"))
        (sha256
         (base32
-         "1w27zkvn39kjr9lmw9421y8w43h572ycsfafsb7kyvr3a4ihlgj2"))))
+         "111m485rx2kyqdymi1x6sl08hi6lp34q3f41yqcx99086swnv1ap"))))
     (build-system haskell-build-system)
-    (arguments
-     `(#:tests? #f))  ; FIXME: currently missing libraries used for tests.
     (inputs
-     `(("ghc-network" ,ghc-network)))
+     (list ghc-th-compat))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)))
+     (list ghc-hunit ghc-quickcheck ghc-tasty ghc-tasty-hunit
+           ghc-tasty-quickcheck))
     (home-page
      "https://github.com/haskell/network-uri")
     (synopsis "Library for URI manipulation")
@@ -8779,7 +8335,7 @@ sending UDP datagrams over multicast (class D) addresses.")
 (define-public ghc-newtype-generics
   (package
     (name "ghc-newtype-generics")
-    (version "0.5.4")
+    (version "0.6")
     (source
      (origin
        (method url-fetch)
@@ -8788,11 +8344,10 @@ sending UDP datagrams over multicast (class D) addresses.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "0cprfg4n0z62cnix1qrbc79bfdd4s50b05fj9m9hk6vm1pc3szq0"))))
+         "04bymwhkvlsgcsd0v630mndrzf0xnh3v81ba6nfzwcvbg3ksr2wa"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-hspec hspec-discover))
     (home-page "https://github.com/sjakobi/newtype-generics")
     (synopsis "Typeclass and set of functions for working with newtypes")
     (description "The @code{Newtype} typeclass represents the packing and
@@ -8818,9 +8373,7 @@ and an alternative to newtype-th.")
          "0f01q916dzkl1i0v15qrw9cviycki5g3fgi6x8gs45iwbzssq52n"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-utility-ht" ,ghc-utility-ht)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-semigroups ghc-utility-ht ghc-quickcheck))
     (home-page "https://hackage.haskell.org/package/non-negative")
     (synopsis "Non-negative numbers class")
     (description "This library provides a class for non-negative numbers,
@@ -8843,11 +8396,12 @@ of Peano numbers).")
         (base32
          "1q9ph0aq51mvdvydnriqd12sfin36pfb8f588zgac1ybn8r64ksb"))))
     (build-system haskell-build-system)
+    (arguments
+     `(#:cabal-revision
+       ("2" "09xvg4lpmb1hw153afhbjrdg9v3npfwpdfhpv5y8b0qvb4zi3n9q")))
     (inputs
-     `(("ghc-base64-bytestring" ,ghc-base64-bytestring)
-       ("ghc-entropy" ,ghc-entropy)
-       ("ghc-unliftio" ,ghc-unliftio)
-       ("ghc-unliftio-core" ,ghc-unliftio-core)))
+     (list ghc-base64-bytestring ghc-entropy ghc-unliftio
+           ghc-unliftio-core))
     (home-page "https://github.com/prowdsponsor/nonce")
     (synopsis "Generate cryptographic nonces in Haskell")
     (description
@@ -8945,7 +8499,7 @@ date and time formats.")
      `(#:cabal-revision
        ("2" "1j6ln1dkvhdvnwl33bp0xf9lhc4sybqk0aw42p8cq81xwwzbn7y9")))
     (inputs
-     `(("ghc-old-locale" ,ghc-old-locale)))
+     (list ghc-old-locale))
     (home-page "https://hackage.haskell.org/package/old-time")
     (synopsis "Time compatibility library for Haskell")
     (description "Old-time is a package for backwards compatibility with the
@@ -9004,10 +8558,7 @@ traditionally so named type-wrapper for attaching typeclass instances.")
      `(#:cabal-revision
        ("1" "1748mrb6r9mpf5jbrx436lwbg8w6dadyy8dhxw2dwnrj5z7zf741")))
     (inputs
-     `(("ghc-objectname" ,ghc-objectname)
-       ("ghc-gluraw" ,ghc-gluraw)
-       ("ghc-statevar" ,ghc-statevar)
-       ("ghc-openglraw" ,ghc-openglraw)))
+     (list ghc-objectname ghc-gluraw ghc-statevar ghc-openglraw))
     (home-page "https://wiki.haskell.org/Opengl")
     (synopsis "Haskell bindings for the OpenGL graphics system")
     (description "This package provides Haskell bindings for the OpenGL
@@ -9018,7 +8569,7 @@ version 1.3).")
 (define-public ghc-openglraw
   (package
     (name "ghc-openglraw")
-    (version "3.3.3.0")
+    (version "3.3.4.0")
     (source
      (origin
        (method url-fetch)
@@ -9028,14 +8579,12 @@ version 1.3).")
              ".tar.gz"))
        (sha256
         (base32
-         "0zgllb4bcash2i2cispa3j565aw3dpxs41ghmhpvyvi4a6xmyldx"))))
+         "0gmsmysqzpm13qnyq4vvqxm4dzw25nayfd9wi5x645pympm6jqbm"))))
     (build-system haskell-build-system)
     (arguments
      `(#:extra-directories ("glu")))
     (inputs
-     `(("ghc-half" ,ghc-half)
-       ("ghc-fixed" ,ghc-fixed)
-       ("glu" ,glu)))
+     (list ghc-half ghc-fixed glu))
     (home-page "https://wiki.haskell.org/Opengl")
     (synopsis "Raw Haskell bindings for the OpenGL graphics system")
     (description "OpenGLRaw is a raw Haskell binding for the OpenGL 4.5
@@ -9052,7 +8601,7 @@ found at runtime, a userError is thrown.")
 (define-public ghc-operational
   (package
     (name "ghc-operational")
-    (version "0.2.3.5")
+    (version "0.2.4.0")
     (source
      (origin
        (method url-fetch)
@@ -9060,10 +8609,10 @@ found at runtime, a userError is thrown.")
                            "operational-" version ".tar.gz"))
        (sha256
         (base32
-         "1x2abg2q9d26h1vzj40r6k7k3gqgappbs4g9d853vvg77837km4i"))))
+         "1hwmwbsxzwv68b39rv4gn3da6irv8zm89gqrkc3rdsgwi5ziyn3i"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-random" ,ghc-random)))
+     (list ghc-random))
     (home-page "http://wiki.haskell.org/Operational")
     (synopsis "Implementation of difficult monads made easy with operational semantics")
     (description
@@ -9120,9 +8669,7 @@ arguments.")
                (("chell >= 0\\.4 && < 0\\.5") "chell >= 0.4 && < 0.6"))
              #t)))))
     (inputs
-     `(("ghc-monads-tf" ,ghc-monads-tf)
-       ("ghc-chell" ,ghc-chell)
-       ("ghc-chell-quickcheck" ,ghc-chell-quickcheck)))
+     (list ghc-monads-tf ghc-chell ghc-chell-quickcheck))
     (home-page "https://john-millikin.com/software/haskell-options/")
     (synopsis "Powerful and easy-to-use command-line option parser")
     (description
@@ -9160,7 +8707,7 @@ easily work with command-line options.")
 (define-public ghc-optparse-applicative
   (package
     (name "ghc-optparse-applicative")
-    (version "0.14.3.0")
+    (version "0.16.1.0")
     (source
      (origin
        (method url-fetch)
@@ -9169,16 +8716,15 @@ easily work with command-line options.")
              "/optparse-applicative-" version ".tar.gz"))
        (sha256
         (base32
-         "0qvn1s7jwrabbpmqmh6d6iafln3v3h9ddmxj2y4m0njmzq166ivj"))))
+         "16nnrkmgd28h540f17nb017ziq4gbzgkxpdraqicaczkca1jf1b2"))))
     (build-system haskell-build-system)
     (arguments
      `(#:cabal-revision
-       ("2" "1a08dqjly1xy730f6jf45frr8g8gap0n1vg9b0mpzpydv0kgzmrp")))
+       ("1" "0401ik87gm9gjpch6lmkczygp59na3f1j7bcs6mc2r929c2xgsqn")))
     (inputs
-     `(("ghc-transformers-compat" ,ghc-transformers-compat)
-       ("ghc-ansi-wl-pprint" ,ghc-ansi-wl-pprint)))
+     (list ghc-transformers-compat ghc-ansi-wl-pprint))
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-quickcheck))
     (home-page "https://github.com/pcapriotti/optparse-applicative")
     (synopsis "Utilities and combinators for parsing command line options")
     (description "This package provides utilities and combinators for parsing
@@ -9188,7 +8734,7 @@ command line options in Haskell.")
 (define-public ghc-jira-wiki-markup
   (package
     (name "ghc-jira-wiki-markup")
-    (version "1.0.0")
+    (version "1.4.0")
     (source
      (origin
        (method url-fetch)
@@ -9196,11 +8742,10 @@ command line options in Haskell.")
              "https://hackage.haskell.org/package/jira-wiki-markup/"
              "jira-wiki-markup-" version ".tar.gz"))
        (sha256
-        (base32 "1sl2jjcsqg61si33mxjwpf8zdn56kbbgcwqqqzbgifx2qbv4wmf8"))))
+        (base32 "0p6axj6km4440ss5naw68r3r85si4qxqgrklp6ssfyapawy0s88w"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+     (list ghc-tasty ghc-tasty-hunit))
     (home-page "https://github.com/tarleb/jira-wiki-markup")
     (synopsis "Handle Jira wiki markup")
     (description
@@ -9211,7 +8756,7 @@ to other formats.")
 (define-public ghc-emojis
   (package
     (name "ghc-emojis")
-    (version "0.1")
+    (version "0.1.2")
     (source
      (origin
        (method url-fetch)
@@ -9219,12 +8764,12 @@ to other formats.")
              "https://hackage.haskell.org/package/emojis/"
              "emojis-" version ".tar.gz"))
        (sha256
-        (base32 "1c6zkj9gmk1y90gbdrn50hyp7mw1mggzhnr2khqd728ryipw60ss"))))
+        (base32 "09x2xrppwypi369y7rzf3ln2g7c3g9qfckn2gydxpfzglcp9rziw"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)))
+     (list ghc-hunit))
     (home-page "https://github.com/jgm/emojis#readme")
-    (synopsis "Conversion between emoji characters and their names.")
+    (synopsis "Conversion between emoji characters and their names")
     (description
      "This package provides functions for converting emoji names to emoji
 characters and vice versa.
@@ -9244,7 +8789,7 @@ require aeson
 (define-public ghc-text-conversions
   (package
     (name "ghc-text-conversions")
-    (version "0.3.0")
+    (version "0.3.1")
     (source
      (origin
        (method url-fetch)
@@ -9252,15 +8797,12 @@ require aeson
              "https://hackage.haskell.org/package/text-conversions/"
              "text-conversions-" version ".tar.gz"))
        (sha256
-        (base32 "089c56vdj9xysqfr1hnvbnrghlg83q6w10xk02gflpsidcpvwmhp"))))
+        (base32 "0kbxin1q8xj9sgdl185gncrdjwcfzndp8sl5qll8y93l60yq8dxi"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-base16-bytestring" ,ghc-base16-bytestring)
-       ("ghc-base64-bytestring" ,ghc-base64-bytestring)
-       ("ghc-errors" ,ghc-errors)))
+     (list ghc-base16-bytestring ghc-base64-bytestring ghc-errors))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-hspec hspec-discover))
     (home-page "https://github.com/cjdev/text-conversions#readme")
     (synopsis "Safe conversions between textual types")
     (description "Safe conversions between textual types")
@@ -9281,17 +8823,14 @@ require aeson
         (base32
          "0xyrxlb602z8bc9sr2y1fag0x56a20yj5qrkvy7iwc6hnznrynxz"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-hashable" ,ghc-hashable)))
+    (inputs (list ghc-hashable))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-quickcheck-instances"
-        ,ghc-quickcheck-instances)))
+     (list ghc-tasty ghc-tasty-quickcheck ghc-tasty-hunit
+           ghc-quickcheck-instances))
     (arguments
-     `(#:cabal-revision
-       ("2"
-        "17cb7p0qywf2dsrq3g8qb3ssknd9wl5k0nc2pxz9gc3l8rxpkw51")))
+     `(#:tests? #f ; TODO: Needs tasty<1.3
+       #:cabal-revision
+       ("3" "1wjy98ihhipzr34b310sgjjq3cc12aydhckbrgr21kxkzwglm4nv")))
     (home-page "https://hackage.haskell.org/package/text-short")
     (synopsis "Memory-efficient representation of Unicode text strings")
     (description "This package provides the @code{ShortText} type which
@@ -9308,21 +8847,19 @@ plus the length of the UTF-8 encoded payload.")
 (define-public ghc-text-zipper
   (package
     (name "ghc-text-zipper")
-    (version "0.10.1")
+    (version "0.11")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://hackage.haskell.org/package/text-zipper/"
                            "text-zipper-" version ".tar.gz"))
        (sha256
-        (base32 "0jxicjp0ak1fyl1n3yspxq6hv9l90zzy75glsv8bc2svsn9ypyls"))))
+        (base32 "07l1pyx93gv95cn1wh1di129axhm9sqsn4znykliacv60ld854ys"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-hspec ghc-quickcheck hspec-discover))
     (inputs
-     `(("ghc-vector" ,ghc-vector)))
+     (list ghc-vector))
     (home-page "https://github.com/jtdaugherty/text-zipper/")
     (synopsis "Text editor zipper library")
     (description
@@ -9338,7 +8875,7 @@ Implementations using both of these examples are provided.")
 (define-public ghc-doclayout
   (package
     (name "ghc-doclayout")
-    (version "0.3")
+    (version "0.3.1.1")
     (source
      (origin
        (method url-fetch)
@@ -9346,14 +8883,13 @@ Implementations using both of these examples are provided.")
              "https://hackage.haskell.org/package/doclayout/"
              "doclayout-" version ".tar.gz"))
        (sha256
-        (base32 "1wmnwq28jcyd6c80srivsnd5znmyl9sgmwwnlk2crwiiwqadbal7"))))
+        (base32 "1p9kgjlf7y4p1symvkwndgs4lvyw2c45bsgld09y9r4aiqbhdrxp"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-safe" ,ghc-safe)))
+     (list ghc-safe ghc-emojis))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-golden" ,ghc-tasty-golden)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+     (list ghc-tasty ghc-tasty-golden ghc-tasty-hunit
+           ghc-tasty-quickcheck))
     (home-page "https://github.com/jgm/doclayout")
     (synopsis "Pretty-printing library for laying out text documents")
     (description
@@ -9365,17 +8901,15 @@ code.  It was designed for use in @code{Pandoc}.")
 (define-public ghc-pandoc
   (package
     (name "ghc-pandoc")
-    (version "2.7.3")
+    (version "2.14.0.3")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://hackage.haskell.org/package/pandoc/pandoc-"
                            version ".tar.gz"))
-       (patches (search-patches "ghc-pandoc-fix-html-tests.patch"
-                                "ghc-pandoc-fix-latex-test.patch"))
        (sha256
         (base32
-         "0dpjrr40h54cljzhvixyym07z792a9izg6b9dmqpjlgcg4rj0xx8"))))
+         "1pgd6125mrvzj2faxbsfmackb7kchzcr6bjkrwqbyn9hzxdzbqw2"))))
     (build-system haskell-build-system)
     (arguments
      `(#:phases
@@ -9389,54 +8923,68 @@ code.  It was designed for use in @code{Pandoc}.")
              #t)))))
     (outputs '("out" "static" "doc"))
     (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-aeson-pretty" ,ghc-aeson-pretty)
-       ("ghc-base64-bytestring" ,ghc-base64-bytestring)
-       ("ghc-blaze-html" ,ghc-blaze-html)
-       ("ghc-blaze-markup" ,ghc-blaze-markup)
-       ("ghc-cmark-gfm" ,ghc-cmark-gfm)
-       ("ghc-data-default" ,ghc-data-default)
-       ("ghc-diff" ,ghc-diff)
-       ("ghc-doctemplates" ,ghc-doctemplates)
-       ("ghc-executable-path" ,ghc-executable-path)
-       ("ghc-glob" ,ghc-glob)
-       ("ghc-haddock-library" ,ghc-haddock-library)
-       ("ghc-hslua" ,ghc-hslua)
-       ("ghc-hslua-module-system" ,ghc-hslua-module-system)
-       ("ghc-hslua-module-text" ,ghc-hslua-module-text)
-       ("ghc-hsyaml" ,ghc-hsyaml)
-       ("ghc-http" ,ghc-http)
-       ("ghc-http-client" ,ghc-http-client)
-       ("ghc-http-client-tls" ,ghc-http-client-tls)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-ipynb" ,ghc-ipynb)
-       ("ghc-juicypixels" ,ghc-juicypixels)
-       ("ghc-network" ,ghc-network)
-       ("ghc-network-uri" ,ghc-network-uri)
-       ("ghc-pandoc-types" ,ghc-pandoc-types)
-       ("ghc-random" ,ghc-random)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-sha" ,ghc-sha)
-       ("ghc-skylighting" ,ghc-skylighting)
-       ("ghc-split" ,ghc-split)
-       ("ghc-syb" ,ghc-syb)
-       ("ghc-tagsoup" ,ghc-tagsoup)
-       ("ghc-temporary" ,ghc-temporary)
-       ("ghc-texmath" ,ghc-texmath)
-       ("ghc-unicode-transforms" ,ghc-unicode-transforms)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-xml" ,ghc-xml)
-       ("ghc-zip-archive" ,ghc-zip-archive)
-       ("ghc-zlib" ,ghc-zlib)))
-    (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-golden" ,ghc-tasty-golden)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-lua" ,ghc-tasty-lua)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-hunit" ,ghc-hunit)))
+     (list ghc-aeson
+           ghc-aeson-pretty
+           ghc-attoparsec
+           ghc-base64-bytestring
+           ghc-base-compat
+           ghc-blaze-html
+           ghc-blaze-markup
+           ghc-case-insensitive
+           ghc-citeproc
+           ghc-commonmark-extensions
+           ghc-commonmark
+           ghc-commonmark-pandoc
+           ghc-connection
+           ghc-data-default
+           ghc-doclayout
+           ghc-doctemplates
+           ghc-emojis
+           ghc-file-embed
+           ghc-glob
+           ghc-haddock-library
+           ghc-hslua
+           ghc-hslua-module-path
+           ghc-hslua-module-system
+           ghc-hslua-module-text
+           ghc-hsyaml
+           ghc-http-client
+           ghc-http-client-tls
+           ghc-http
+           ghc-http-types
+           ghc-ipynb
+           ghc-jira-wiki-markup
+           ghc-juicypixels
+           ghc-network
+           ghc-network-uri
+           ghc-pandoc-types
+           ghc-random
+           ghc-safe
+           ghc-scientific
+           ghc-sha
+           ghc-skylighting-core
+           ghc-skylighting
+           ghc-split
+           ghc-syb
+           ghc-tagsoup
+           ghc-temporary
+           ghc-texmath
+           ghc-text-conversions
+           ghc-unicode-collation
+           ghc-unicode-transforms
+           ghc-unordered-containers
+           ghc-xml-conduit
+           ghc-xml
+           ghc-zip-archive
+           ghc-zlib))
+    (native-inputs
+     (list ghc-tasty
+           ghc-tasty-golden
+           ghc-tasty-hunit
+           ghc-tasty-lua
+           ghc-tasty-quickcheck
+           ghc-diff
+           ghc-quickcheck))
     (home-page "https://pandoc.org")
     (synopsis "Conversion between markup formats")
     (description
@@ -9528,9 +9076,13 @@ getDataFileName name = do
               inputs)
              #t))
          (delete 'check)
+         ;; Remove libraries. If you need them, install ghc-pandoc instead.
+         (add-after 'register 'delete-libraries
+           (lambda* (#:key outputs #:allow-other-keys)
+             (delete-file-recursively (string-append (assoc-ref outputs "out") "/lib"))))
          (add-after 'install 'post-install-check
            (assoc-ref %standard-phases 'check)))))
-    (outputs '("out" "lib" "static" "doc"))
+    (outputs '("out" "doc" "static"))
     (inputs
      (let* ((direct-inputs (package-inputs ghc-pandoc))
             (all-static-inputs
@@ -9540,7 +9092,9 @@ getDataFileName name = do
                   (delete-duplicates
                    (append (map cadr direct-inputs)
                            (filter (lambda (pkg)
-                                     (string-prefix? "ghc-" (package-name pkg)))
+                                     (and
+                                      (string-prefix? "ghc-" (package-name pkg))
+                                      (not (string=? "ghc-next" (package-name pkg)))))
                                    (package-closure
                                     (map cadr direct-inputs))))))))
        `(("zlib:static" ,zlib "static")
@@ -9555,178 +9109,18 @@ getDataFileName name = do
                   (delete-duplicates
                    (append (map cadr direct-inputs)
                            (filter (lambda (pkg)
-                                     (string-prefix? "ghc-" (package-name pkg)))
+                                     (and
+                                      (string-prefix? "ghc-" (package-name pkg))
+                                      (not (string=? "ghc-next" (package-name pkg)))))
                                    (package-closure
                                     (map cadr direct-inputs))))))))
        `(,@all-static-inputs
          ,@direct-inputs)))))
 
-(define-public ghc-pandoc-citeproc
-  (package
-    (name "ghc-pandoc-citeproc")
-    (version "0.16.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "pandoc-citeproc/pandoc-citeproc-"
-                           version ".tar.gz"))
-       (sha256
-        (base32
-         "15mm17awgi1b5yazwhr5nh8b59qml1qk6pz6gpyijks70fq2arsv"))))
-    (build-system haskell-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         ;; Many YAML tests (44) are failing do to changes in ghc-yaml:
-         ;; <https://github.com/jgm/pandoc-citeproc/issues/342>.
-         (add-before 'configure 'patch-tests
-           (lambda _
-             (substitute* "tests/test-pandoc-citeproc.hs"
-               (("let allTests = citeprocTests \\+\\+ biblio2yamlTests")
-                "let allTests = citeprocTests"))))
-         ;; Tests need to be run after installation.
-         (delete 'check)
-         (add-after 'install 'post-install-check
-           (assoc-ref %standard-phases 'check)))))
-    (inputs
-     `(("ghc-pandoc-types" ,ghc-pandoc-types)
-       ("ghc-pandoc" ,ghc-pandoc)
-       ("ghc-tagsoup" ,ghc-tagsoup)
-       ("ghc-aeson" ,ghc-aeson)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-xml-conduit" ,ghc-xml-conduit)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-data-default" ,ghc-data-default)
-       ("ghc-setenv" ,ghc-setenv)
-       ("ghc-split" ,ghc-split)
-       ("ghc-yaml" ,ghc-yaml)
-       ("ghc-hs-bibutils" ,ghc-hs-bibutils)
-       ("ghc-rfc5051" ,ghc-rfc5051)
-       ("ghc-syb" ,ghc-syb)
-       ("ghc-old-locale" ,ghc-old-locale)
-       ("ghc-aeson-pretty" ,ghc-aeson-pretty)
-       ("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-temporary" ,ghc-temporary)))
-    (home-page "https://github.com/jgm/pandoc-citeproc")
-    (synopsis "Library for using pandoc with citeproc")
-    (description
-     "The @code{pandoc-citeproc} library exports functions for using the
-citeproc system with pandoc.  It relies on @code{citeproc-hs}, a library for
-rendering bibliographic reference citations into a variety of styles using a
-macro language called @dfn{Citation Style Language} (CSL).  This package also
-contains an executable @code{pandoc-citeproc}, which works as a pandoc filter,
-and also has a mode for converting bibliographic databases a YAML format
-suitable for inclusion in pandoc YAML metadata.")
-    (license license:bsd-3)))
-
-(define-public pandoc-citeproc
-  (package (inherit ghc-pandoc-citeproc)
-    (name "pandoc-citeproc")
-    (arguments
-     `(#:configure-flags
-       (list "-fstatic"
-             "--disable-shared"
-             "--disable-executable-dynamic"
-             ;; That's where we place all static libraries
-             "--extra-lib-dirs=static-libs/"
-             "--ghc-option=-static")
-       #:modules ((guix build haskell-build-system)
-                  (guix build utils)
-                  (ice-9 match)
-                  (srfi srfi-1))
-       #:phases
-       (modify-phases %standard-phases
-         ;; Many YAML tests (44) are failing do to changes in ghc-yaml:
-         ;; <https://github.com/jgm/pandoc-citeproc/issues/342>.
-         (add-before 'configure 'patch-tests
-           (lambda _
-             (substitute* "tests/test-pandoc-citeproc.hs"
-               (("let allTests = citeprocTests \\+\\+ biblio2yamlTests")
-                "let allTests = citeprocTests"))))
-         ;; Tests need to be run after installation.
-         (delete 'check)
-         (add-after 'install 'post-install-check
-           (assoc-ref %standard-phases 'check))
-         (add-after 'unpack 'create-simple-paths-module
-           (lambda* (#:key outputs #:allow-other-keys)
-             (call-with-output-file "Paths_pandoc_citeproc.hs"
-               (lambda (port)
-                 (format port "\
-{-# LANGUAGE CPP #-}
-{-# LANGUAGE NoRebindableSyntax #-}
-{-# OPTIONS_GHC -fno-warn-missing-import-lists #-}
-module Paths_pandoc_citeproc (version,getDataFileName) where
-import Prelude
-import Data.Version (Version(..))
-import System.Info
-version :: Version
-version = Version [~a] []
-
-datadir :: FilePath
-datadir = \"~a/share/\" ++
-  arch ++ \"-\" ++
-  os ++ \"-\" ++
-  compilerName ++ \"-~a/pandoc-citeproc-~a\"
-
-getDataDir :: IO FilePath
-getDataDir = return datadir
-
-getDataFileName :: FilePath -> IO FilePath
-getDataFileName name = do
-  dir <- getDataDir
-  return (dir ++ \"/\" ++ name)
-"
-                         (string-map (lambda (chr) (if (eq? chr #\.) #\, chr))
-                                     ,(package-version ghc-pandoc-citeproc))
-                         (assoc-ref outputs "out")
-                         ,(package-version ghc)
-                         ,(package-version ghc-pandoc-citeproc))))
-             #t))
-         (add-after 'unpack 'prepare-static-libraries
-           (lambda* (#:key inputs #:allow-other-keys)
-             (mkdir-p (string-append (getcwd) "/static-libs"))
-             (for-each
-              (lambda (input)
-                (when (or (string-prefix? "static-" (car input))
-                          (string-prefix? "ghc" (car input)))
-                  (match (find-files (cdr input) "\\.a$")
-                    ((and (first . rest) libs)
-                     (for-each (lambda (lib)
-                                 (let ((target (string-append (getcwd) "/static-libs/"
-                                                              (basename lib))))
-                                   (unless (file-exists? target)
-                                     (symlink first target))))
-                               libs))
-                    (_ #f))))
-              inputs)
-             #t)))))
-    (inputs
-     (let* ((direct-inputs
-             (cons `("ghc-pandoc" ,pandoc)
-                   (alist-delete "ghc-pandoc"
-                                 (package-inputs ghc-pandoc-citeproc))))
-            (all-static-inputs
-             (map (lambda (pkg)
-                    (list (string-append "static-" (package-name pkg))
-                          pkg "static"))
-                  (delete-duplicates
-                   (append (map cadr direct-inputs)
-                           (filter (lambda (pkg)
-                                     (string-prefix? "ghc-" (package-name pkg)))
-                                   (package-closure
-                                    (map cadr direct-inputs))))))))
-       `(("zlib:static" ,zlib "static")
-         ("pandoc" ,pandoc "lib")
-         ,@all-static-inputs
-         ,@direct-inputs)))
-    (outputs '("out" "lib" "static" "doc"))
-    (synopsis "Pandoc filter for bibliographic references")))
-
 (define-public ghc-pandoc-types
   (package
     (name "ghc-pandoc-types")
-    (version "1.17.6.1")
+    (version "1.22.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://hackage.haskell.org/package/"
@@ -9734,7 +9128,7 @@ getDataFileName name = do
                                   version ".tar.gz"))
               (sha256
                (base32
-                "1d6ygq991ddria71l7hg9yd7lq94sjy4m71rdws1v8hq943c4d0q"))))
+                "0z2j306jsiriwhib0201hsllwyck7qcvqci5c25frwsmknr3mls2"))))
     (build-system haskell-build-system)
     (arguments
      `(#:phases
@@ -9757,15 +9151,14 @@ version = Version [~a] []
 " (string-map (lambda (chr) (if (eq? chr #\.) #\, chr)) ,version))))
              #t)))))
     (inputs
-     `(("ghc-syb" ,ghc-syb)
-       ("ghc-aeson" ,ghc-aeson)
-       ("ghc-string-qq" ,ghc-string-qq)))
-    (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
-       ("ghc-hunit" ,ghc-hunit)))
+     (list ghc-syb ghc-aeson))
+    (native-inputs
+     (list ghc-quickcheck
+           ghc-test-framework
+           ghc-test-framework-hunit
+           ghc-test-framework-quickcheck2
+           ghc-string-qq
+           ghc-hunit))
     (home-page "https://pandoc.org")
     (synopsis "Types for representing a structured document")
     (description
@@ -9790,6 +9183,9 @@ building up, manipulating and serialising @code{Pandoc} structures.")
         (base32
          "1xkfi96w6yfpppd0nw1rnszdxmvifwzm699ilv6332ra3akm610p"))))
     (build-system haskell-build-system)
+    (arguments
+     `(#:cabal-revision
+       ("3" "1lv3y3zrdfc09nsiqxg7mzcahgnqi6z9caspd4lvifhhfrqy2722")))
     (home-page "https://hackage.haskell.org/package/parallel")
     (synopsis "Parallel programming library")
     (description
@@ -9818,7 +9214,7 @@ building up, manipulating and serialising @code{Pandoc} structures.")
 (define-public ghc-parser-combinators
   (package
     (name "ghc-parser-combinators")
-    (version "1.1.0")
+    (version "1.2.1")
     (source
      (origin
        (method url-fetch)
@@ -9827,7 +9223,7 @@ building up, manipulating and serialising @code{Pandoc} structures.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "149yhbnrrl108h1jinrsxni3rwrldhphpk9bbmbpr90q5fbl4xmc"))))
+         "0k95nvgnl5820y094yfh7b868l0xd1diclm4kx9560p5rm02w5h3"))))
     (build-system haskell-build-system)
     (home-page "https://github.com/mrkkrp/parser-combinators")
     (synopsis "Commonly useful parser combinators")
@@ -9854,11 +9250,12 @@ combinators.")
     (arguments `(#:tests? #f)) ; FIXME: Test fails with "cannot satisfy
                                ; -package attoparsec-0.13.0.1"
     (inputs
-     `(("ghc-base-orphans" ,ghc-base-orphans)
-       ("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-charset" ,ghc-charset)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)))
+     (list ghc-base-orphans
+           ghc-attoparsec
+           ghc-scientific
+           ghc-semigroups
+           ghc-charset
+           ghc-unordered-containers))
     (home-page "https://github.com/ekmett/parsers/")
     (synopsis "Parsing combinators")
     (description "This library provides convenient combinators for working
@@ -9871,7 +9268,7 @@ the parsers provided by @code{parsec}, @code{attoparsec} and @code{base}'s
 (define-public ghc-path
   (package
     (name "ghc-path")
-    (version "0.6.1")
+    (version "0.8.0")
     (source
      (origin
        (method url-fetch)
@@ -9881,25 +9278,21 @@ the parsers provided by @code{parsec}, @code{attoparsec} and @code{base}'s
              ".tar.gz"))
        (sha256
         (base32
-         "0nayla4k1gb821k8y5b9miflv1bi8f0czf9rqr044nrr2dddi2sb"))))
+         "0vzsa41q5sxs1ni72yv1vfpnc6r5mjdwnmdb6jrs6cszb2xlkjr4"))))
     (build-system haskell-build-system)
     (arguments
-     ;; TODO: There are some Windows-related tests and modules that need to be
-     ;; danced around.
-     `(#:tests? #f
-       #:cabal-revision
-       ("1" "05b1zwx2a893h4h5wvgpc5g5pyx71hfmx409rqisd8s1bq1hn463")))
+     `(#:cabal-revision
+       ("1" "02vhx94mqapyigvayb6cj7p7snn354pb542n3qyvsm0gih52wlja")))
     (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-hashable" ,ghc-hashable)))
+     (list ghc-aeson ghc-hashable))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-genvalidity" ,ghc-genvalidity)
-       ("ghc-genvalidity-property" ,ghc-genvalidity-property)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-validity" ,ghc-validity)))
+     (list ghc-hspec
+           ghc-quickcheck
+           ghc-genvalidity
+           ghc-genvalidity-hspec
+           ghc-genvalidity-property
+           ghc-hspec
+           ghc-validity))
     (home-page
      "https://hackage.haskell.org/package/path")
     (synopsis "Support for well-typed paths")
@@ -9910,7 +9303,7 @@ invariants.")
 (define-public ghc-path-io
   (package
     (name "ghc-path-io")
-    (version "1.4.2")
+    (version "1.6.3")
     (source
      (origin
        (method url-fetch)
@@ -9920,17 +9313,20 @@ invariants.")
              ".tar.gz"))
        (sha256
         (base32
-         "0jqx3mi4an4kb3kg78n1p3xrz832yrfrnvj795b0xhkv6h1z5ir3"))))
+         "1dnc48hf8x83p0jy05qi8j8gmfmsy50swnql9ssdv74lsryp615n"))))
     (build-system haskell-build-system)
+    (arguments
+     `(#:cabal-revision
+       ("3" "0rsr9r2175lf7zcz2sns0mhxkvl21pm50sjidjq5v75nalrsw6rp")))
     (inputs
-     `(("ghc-dlist" ,ghc-dlist)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-path" ,ghc-path)
-       ("ghc-transformers-base" ,ghc-transformers-base)
-       ("ghc-unix-compat" ,ghc-unix-compat)
-       ("ghc-temporary" ,ghc-temporary)))
+     (list ghc-dlist
+           ghc-exceptions
+           ghc-path
+           ghc-transformers-base
+           ghc-unix-compat
+           ghc-temporary))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)))
+     (list ghc-hspec))
     (home-page
      "https://github.com/mrkkrp/path-io")
     (synopsis "Functions for manipulating well-typed paths")
@@ -10013,7 +9409,7 @@ rules.")
 (define-public ghc-pcre-light
   (package
     (name "ghc-pcre-light")
-    (version "0.4.0.4")
+    (version "0.4.1.0")
     (source
      (origin
        (method url-fetch)
@@ -10023,14 +9419,14 @@ rules.")
              ".tar.gz"))
        (sha256
         (base32
-         "0xcyi1fivwg7a92mch5bcqzmrfxzqj42rmb3m8kgs61x4qwpxj82"))))
+         "0lqvsmc6bfhdv6igm3fmw8nklyhw3j3jsl0s1k6r3fhb6ambzxhn"))))
     (build-system haskell-build-system)
     (arguments
      `(#:extra-directories ("pcre")))
     (inputs
-     `(("pcre" ,pcre)))
+     (list pcre))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config ghc-hunit))
     (home-page "https://github.com/Daniel-Diaz/pcre-light")
     (synopsis "Haskell library for Perl 5 compatible regular expressions")
     (description "This package provides a small, efficient, and portable regex
@@ -10042,7 +9438,7 @@ syntax and semantics as Perl 5.")
 (define-public ghc-persistent
   (package
     (name "ghc-persistent")
-    (version "2.10.4")
+    (version "2.13.2.1")
     (source
      (origin
        (method url-fetch)
@@ -10051,39 +9447,41 @@ syntax and semantics as Perl 5.")
              "persistent-" version ".tar.gz"))
        (sha256
         (base32
-         "1cxswz72sqdg2z1nbpgp1k5qr41djgk8qbf8nz7wfppsrhacyffi"))))
-    (build-system haskell-build-system)
-    (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-base64-bytestring" ,ghc-base64-bytestring)
-       ("ghc-blaze-html" ,ghc-blaze-html)
-       ("ghc-conduit" ,ghc-conduit)
-       ("ghc-fast-logger" ,ghc-fast-logger)
-       ("ghc-http-api-data" ,ghc-http-api-data)
-       ("ghc-monad-logger" ,ghc-monad-logger)
-       ("ghc-path-pieces" ,ghc-path-pieces)
-       ("ghc-resource-pool" ,ghc-resource-pool)
-       ("ghc-resourcet" ,ghc-resourcet)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-silently" ,ghc-silently)
-       ("ghc-unliftio-core" ,ghc-unliftio-core)
-       ("ghc-unliftio" ,ghc-unliftio)
-       ("ghc-unordered-containers"
-        ,ghc-unordered-containers)
-       ("ghc-vector" ,ghc-vector)))
-    (native-inputs `(("ghc-hspec" ,ghc-hspec)))
+         "13lp9i94f57qhifdmr1vnsrra34526f7kqa1sybcaj2jh2v3q85k"))))
+    (build-system haskell-build-system)
+    (inputs
+     (list ghc-aeson
+           ghc-attoparsec
+           ghc-base64-bytestring
+           ghc-blaze-html
+           ghc-conduit
+           ghc-fast-logger
+           ghc-http-api-data
+           ghc-lift-type
+           ghc-monad-logger
+           ghc-path-pieces
+           ghc-resource-pool
+           ghc-resourcet
+           ghc-scientific
+           ghc-silently
+           ghc-th-lift-instances
+           ghc-unliftio-core
+           ghc-unliftio
+           ghc-unordered-containers
+           ghc-vector))
+    (native-inputs
+     (list ghc-hspec ghc-quickcheck ghc-quickcheck-instances
+           ghc-shakespeare))
     (home-page "https://www.yesodweb.com/book/persistent")
     (synopsis "Type-safe, multi-backend data serialization for Haskell")
     (description "This Haskell package allows Haskell programs to access data
-storage systems like PostgreSQL, SQLite, MySQL and MongoDB in a type-safe
-way.")
+storage systems like PostgreSQL, SQLite, and MariaDB in a type-safe way.")
     (license license:expat)))
 
 (define-public ghc-persistent-sqlite
   (package
     (name "ghc-persistent-sqlite")
-    (version "2.10.5.2")
+    (version "2.13.0.3")
     (source
      (origin
        (method url-fetch)
@@ -10092,31 +9490,29 @@ way.")
              "persistent-sqlite-" version ".tar.gz"))
        (sha256
         (base32
-         "0agag3cgivl6mk38pqzr0qw5lxps9p2bgdwvi5658l46hs7bixxn"))))
-    (build-system haskell-build-system)
-    (inputs
-     `(("ghc-persistent" ,ghc-persistent)
-       ("ghc-aeson" ,ghc-aeson)
-       ("ghc-conduit" ,ghc-conduit)
-       ("ghc-microlens-th" ,ghc-microlens-th)
-       ("ghc-monad-logger" ,ghc-monad-logger)
-       ("ghc-resource-pool" ,ghc-resource-pool)
-       ("ghc-resourcet" ,ghc-resourcet)
-       ("ghc-unliftio-core" ,ghc-unliftio-core)
-       ("ghc-unordered-containers"
-        ,ghc-unordered-containers)))
-    (native-inputs
-     `(("ghc-persistent-template"
-        ,ghc-persistent-template)
-       ("ghc-persistent-test" ,ghc-persistent-test)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-fast-logger" ,ghc-fast-logger)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-system-fileio" ,ghc-system-fileio)
-       ("ghc-system-filepath" ,ghc-system-filepath)
-       ("ghc-temporary" ,ghc-temporary)))
+         "12za89crbk74mya4qxpw5fp5fqp64vwz5s8vbjd7m8r3j3vbw338"))))
+    (build-system haskell-build-system)
+    (inputs
+     (list ghc-persistent
+           ghc-aeson
+           ghc-conduit
+           ghc-microlens-th
+           ghc-monad-logger
+           ghc-resource-pool
+           ghc-resourcet
+           ghc-unliftio-core
+           ghc-unordered-containers))
+    (native-inputs
+     (list ghc-persistent-template
+           ghc-persistent-test
+           ghc-exceptions
+           ghc-fast-logger
+           ghc-hspec
+           ghc-hunit
+           ghc-quickcheck
+           ghc-system-fileio
+           ghc-system-filepath
+           ghc-temporary))
     (home-page
      "https://www.yesodweb.com/book/persistent")
     (synopsis "Backend for the persistent library using sqlite3")
@@ -10128,7 +9524,7 @@ system dependencies.")
 (define-public ghc-persistent-template
   (package
     (name "ghc-persistent-template")
-    (version "2.8.0")
+    (version "2.12.0.0")
     (source
      (origin
        (method url-fetch)
@@ -10137,21 +9533,19 @@ system dependencies.")
              "persistent-template-" version ".tar.gz"))
        (sha256
         (base32
-         "16yjrl0gh4jbs4skr7iv6a55lny59bqhd6hjmvch1cl9j5d0c0g3"))))
+         "0c9cs27j43azimj74s2m2cdks87682ibpy1xbyzvygipgmb8nj6w"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-persistent" ,ghc-persistent)
-       ("ghc-aeson" ,ghc-aeson)
-       ("ghc-http-api-data" ,ghc-http-api-data)
-       ("ghc-monad-control" ,ghc-monad-control)
-       ("ghc-monad-logger" ,ghc-monad-logger)
-       ("ghc-path-pieces" ,ghc-path-pieces)
-       ("ghc-th-lift-instances" ,ghc-th-lift-instances)
-       ("ghc-unordered-containers"
-        ,ghc-unordered-containers)))
+     (list ghc-persistent
+           ghc-aeson
+           ghc-http-api-data
+           ghc-monad-control
+           ghc-monad-logger
+           ghc-path-pieces
+           ghc-th-lift-instances
+           ghc-unordered-containers))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-hspec ghc-quickcheck))
     (home-page "https://www.yesodweb.com/book/persistent")
     (synopsis "Type-safe, non-relational, multi-backend persistence")
     (description "This Haskell package provides interfaces and helper
@@ -10161,7 +9555,7 @@ functions for the ghc-persistent package.")
 (define-public ghc-persistent-test
   (package
     (name "ghc-persistent-test")
-    (version "2.0.3.1")
+    (version "2.13.0.3")
     (source
      (origin
        (method url-fetch)
@@ -10170,29 +9564,26 @@ functions for the ghc-persistent package.")
              "persistent-test-" version ".tar.gz"))
        (sha256
         (base32
-         "11aq5cy0n43jamf6mg4sr4300bc2zdbjxsczzxwjkb4hzs0ijsdv"))))
+         "07q53jvhz00cf10k7a8fkvykgwcl10fgzh8k9gv1d248f336crvs"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-blaze-html" ,ghc-blaze-html)
-       ("ghc-conduit" ,ghc-conduit)
-       ("ghc-monad-control" ,ghc-monad-control)
-       ("ghc-monad-logger" ,ghc-monad-logger)
-       ("ghc-path-pieces" ,ghc-path-pieces)
-       ("ghc-persistent" ,ghc-persistent)
-       ("ghc-persistent-template" ,ghc-persistent-template)
-       ("ghc-random" ,ghc-random)
-       ("ghc-resourcet" ,ghc-resourcet)
-       ("ghc-transformers-base" ,ghc-transformers-base)
-       ("ghc-unliftio" ,ghc-unliftio)
-       ("ghc-unliftio-core" ,ghc-unliftio-core)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)))
-    (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-quickcheck-instances" ,ghc-quickcheck-instances)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-hspec-expectations" ,ghc-hspec-expectations)
-       ("ghc-hunit" ,ghc-hunit)))
+     (list ghc-aeson
+           ghc-blaze-html
+           ghc-conduit
+           ghc-monad-control
+           ghc-monad-logger
+           ghc-path-pieces
+           ghc-persistent
+           ghc-persistent-template
+           ghc-random
+           ghc-resourcet
+           ghc-transformers-base
+           ghc-unliftio
+           ghc-unliftio-core
+           ghc-unordered-containers))
+    (native-inputs
+     (list ghc-quickcheck ghc-quickcheck-instances ghc-hspec
+           ghc-hspec-expectations ghc-hunit))
     (home-page "https://www.yesodweb.com/book/persistent")
     (synopsis "Tests for the Persistent database library")
     (description
@@ -10217,13 +9608,10 @@ libraries.")
          "15g6qh0fb7kjj3l0w8cama7cxgnhnhybw760md9yy7cqfq15cfzg"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-vector" ,ghc-vector)))
+     (list ghc-vector))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-doctest" ,ghc-doctest)))
+     (list ghc-hunit ghc-tasty ghc-tasty-hunit ghc-tasty-quickcheck
+           ghc-doctest))
     (home-page
      "https://github.com/quchen/pgp-wordlist")
     (synopsis
@@ -10243,7 +9631,7 @@ For further information, see
 (define-public ghc-pipes
   (package
     (name "ghc-pipes")
-    (version "4.3.13")
+    (version "4.3.16")
     (source
      (origin
        (method url-fetch)
@@ -10252,18 +9640,13 @@ For further information, see
              "pipes-" version ".tar.gz"))
        (sha256
         (base32
-         "1ch3xr5f5if0psd3lsyrpkwrgh36synnzqcpimghprys68l4zfkn"))))
+         "163lx5sf68zx5kik5h1fjsyckwr9shdsn5k2dsjq3mhg077nxqgl"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-mmorph" ,ghc-mmorph)
-       ("ghc-void" ,ghc-void)
-       ("ghc-semigroups" ,ghc-semigroups)))
+     (list ghc-exceptions ghc-mmorph ghc-void ghc-semigroups))
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-quickcheck2"
-        ,ghc-test-framework-quickcheck2)))
+     (list ghc-quickcheck ghc-test-framework
+           ghc-test-framework-quickcheck2))
     (home-page
      "https://hackage.haskell.org/package/pipes")
     (synopsis "Compositional pipelines")
@@ -10311,7 +9694,7 @@ other end when progressing past the actual edge.")
 (define-public ghc-polyparse
   (package
     (name "ghc-polyparse")
-    (version "1.12.1")
+    (version "1.13")
     (source
      (origin
        (method url-fetch)
@@ -10321,8 +9704,11 @@ other end when progressing past the actual edge.")
              ".tar.gz"))
        (sha256
         (base32
-         "19fs18g7fvfdkm9zy28cgighjcxfa6mcpqgyp6whmsjkb3h393fx"))))
+         "0yvhg718dlksiw3v27m2d8m1sn4r4f5s0p56zq3lynhy1sc74k0w"))))
     (build-system haskell-build-system)
+    (arguments
+     `(#:cabal-revision
+       ("2" "1n5q6w7x46cvcq7j1pg9jx9h72vcsc5di35rbkmwgjw6pq4w4gfl")))
     (home-page
      "http://code.haskell.org/~malcolm/polyparse/")
     (synopsis
@@ -10339,7 +9725,7 @@ Strings.")
 (define-public ghc-pqueue
   (package
     (name "ghc-pqueue")
-    (version "1.4.1.2")
+    (version "1.4.1.3")
     (source
      (origin
        (method url-fetch)
@@ -10347,10 +9733,10 @@ Strings.")
                            "pqueue/pqueue-" version ".tar.gz"))
        (sha256
         (base32
-         "1v4zhv2sc1zsw91hvnarkjhayx2dnf7ccxz6rrhsqpcs0szaranj"))))
+         "1sz7hlnfd86hbwrgqxczmsjsl1ki0ryi9dgzscxlsgjkdgcdia2p"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-quickcheck))
     (home-page "https://hackage.haskell.org/package/pqueue")
     (synopsis "Reliable, persistent, fast priority queues")
     (description
@@ -10404,23 +9790,25 @@ types.")
 (define-public ghc-prettyprinter
   (package
     (name "ghc-prettyprinter")
-    (version "1.2.1.1")
+    (version "1.7.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
-             "mirror://hackage/package/prettyprinter/prettyprinter-"
+             "https://hackage.haskell.org/package/prettyprinter/prettyprinter-"
              version
              ".tar.gz"))
        (sha256
-        (base32 "1p9c3q55hba4c0zyxc624g5df7wgsclpsmd8wqpdnmib882q9d1v"))))
+        (base32 "0i8b3wjjpdvp5b857j065jwyrpgcnzgk75imrj7i3yhl668acvjy"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-doctest" ,ghc-doctest)
-       ("ghc-pgp-wordlist" ,ghc-pgp-wordlist)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+     (list ghc-doctest
+           ghc-pgp-wordlist
+           ghc-quickcheck
+           ghc-quickcheck-instances
+           ghc-tasty
+           ghc-tasty-hunit
+           ghc-tasty-quickcheck))
     (home-page "https://github.com/quchen/prettyprinter")
     (synopsis
      "Modern, easy to use, well-documented, extensible pretty-printer")
@@ -10430,40 +9818,22 @@ ANSI terminal backend exists, HTML backend is trivial to implement, no name
 clashes, @code{Text}-based, extensible.")
     (license license:bsd-2)))
 
-(define-public ghc-prettyprinter-1.6
-  (package
-    (inherit ghc-prettyprinter)
-    (version "1.6.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "mirror://hackage/package/prettyprinter/prettyprinter-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32 "10fphxh8lvdaw7i8jyllwmj87w02db92mf99zfw5vddp9mv6b5rz"))))
-    (inputs
-     `(("ghc-quickckeck-instances" , ghc-quickcheck-instances)
-       ,@(package-inputs ghc-prettyprinter)))))
-
 (define-public ghc-prettyprinter-ansi-terminal
   (package
     (name "ghc-prettyprinter-ansi-terminal")
-    (version "1.1.1.2")
+    (version "1.1.3")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
-             "mirror://hackage/package/prettyprinter-ansi-terminal/"
+             "https://hackage.haskell.org/package/prettyprinter-ansi-terminal/"
              "prettyprinter-ansi-terminal-" version ".tar.gz"))
        (sha256
-        (base32 "0ha6vz707qzb5ky7kdsnw2zgphg2dnxrpbrxy8gaw119vwhb9q6k"))))
+        (base32 "1cqxbcmy9ykk4pssq5hp6h51g2h547zfz549awh0c1fni8q3jdw1"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-ansi-terminal" ,ghc-ansi-terminal)
-       ("ghc-prettyprinter" ,ghc-prettyprinter-1.6)))
-    (native-inputs `(("ghc-doctest" ,ghc-doctest)))
+     (list ghc-ansi-terminal ghc-prettyprinter))
+    (native-inputs (list ghc-doctest))
     (home-page
      "https://github.com/quchen/prettyprinter")
     (synopsis
@@ -10474,7 +9844,7 @@ clashes, @code{Text}-based, extensible.")
 (define-public ghc-pretty-hex
   (package
     (name "ghc-pretty-hex")
-    (version "1.0")
+    (version "1.1")
     (source
      (origin
        (method url-fetch)
@@ -10483,7 +9853,7 @@ clashes, @code{Text}-based, extensible.")
                            "pretty-hex-" version ".tar.gz"))
        (sha256
         (base32
-         "0ylwkvvjvmpprha9nx83xb8gkhyanhk5fffc0r7lb96n4ch5z6pz"))))
+         "0c8pa0rdb2q8rf4acy4gww0hj5lrzclzdh52yi2aiaaij4lqzir7"))))
     (build-system haskell-build-system)
     (home-page "https://github.com/GaloisInc/hexdump")
     (synopsis "Haskell library for hex dumps of ByteStrings")
@@ -10494,7 +9864,7 @@ ByteStrings in the style of other common *nix hex dump tools.")
 (define-public ghc-pretty-show
   (package
     (name "ghc-pretty-show")
-    (version "1.9.5")
+    (version "1.10")
     (source
      (origin
        (method url-fetch)
@@ -10502,11 +9872,10 @@ ByteStrings in the style of other common *nix hex dump tools.")
                            "pretty-show-" version ".tar.gz"))
        (sha256
         (base32
-         "0gs2pabi4qa4b0r5vffpf9b1cf5n9y2939a3lljjw7cmg6xvx5dh"))))
+         "1lkgvbv00v1amvpqli6y4dzsbs25l4v3wlagvhwx8qxhw2390zrh"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-haskell-lexer" ,ghc-haskell-lexer)
-       ("ghc-happy" ,ghc-happy)))
+     (list ghc-haskell-lexer ghc-happy))
     (home-page "https://wiki.github.com/yav/pretty-show")
     (synopsis "Tools for working with derived `Show` instances")
     (description
@@ -10522,23 +9891,22 @@ examination.")
 (define-public ghc-pretty-simple
   (package
     (name "ghc-pretty-simple")
-    (version "2.2.0.1")
+    (version "4.0.0.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
-             "mirror://hackage/package/pretty-simple/"
+             "https://hackage.haskell.org/package/pretty-simple/"
              "pretty-simple-" version ".tar.gz"))
        (sha256
-        (base32 "0wsi9235ihm15s145lxi7325vv2k4bhighc5m88kn1lk0pl81aqq"))))
+        (base32 "1srvx854ml2gffnkxr2fm12xk8syjsk078rfzrq0a3idwgv46myw"))))
     (build-system haskell-build-system)
+
     (inputs
-     `(("ghc-ansi-terminal" ,ghc-ansi-terminal)
-       ("ghc-glob" ,ghc-glob)
-       ("ghc-optparse-applicative" ,ghc-optparse-applicative)
-       ("ghc-aeson" ,ghc-aeson)))
+     (list ghc-aeson ghc-optparse-applicative
+           ghc-prettyprinter-ansi-terminal ghc-prettyprinter))
     (native-inputs
-     `(("ghc-doctest" ,ghc-doctest)))
+     (list cabal-doctest ghc-doctest ghc-glob ghc-quickcheck))
     (home-page "https://github.com/cdepillabout/pretty-simple")
     (synopsis "Pretty printer for data types with a 'Show' instance")
     (description
@@ -10549,8 +9917,7 @@ Show instance.")
 (define-public ghc-primitive
   (package
     (name "ghc-primitive")
-    (version "0.6.4.0")
-    (outputs '("out" "static" "doc"))
+    (version "0.7.2.0")
     (source
      (origin
        (method url-fetch)
@@ -10560,11 +9927,17 @@ Show instance.")
              ".tar.gz"))
        (sha256
         (base32
-         "0r0cda7acvplgwaxy69kviv4jp7kkfi038by68gj4yfx4iwszgjc"))))
+         "1facmq2wxhn5mbgd209zz5swyaw1q970fv3hd84klaxrhabqaxwi"))))
     (build-system haskell-build-system)
-    (arguments
-     `(#:cabal-revision
-       ("1" "18a14k1yiam1m4l29rin9a0y53yp3nxvkz358nysld8aqwy2qsjv")))
+    (arguments `(#:tests? #f)) ; TODO: Loops.
+;    (native-inputs
+;     `(("ghc-base-orphans" ,ghc-base-orphans)
+;       ("ghc-quickcheck-classes-base" ,ghc-quickcheck-classes-base)
+;       ("ghc-quickcheck" ,ghc-quickcheck)
+;       ("ghc-tasty" ,ghc-tasty)
+;       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
+;       ("ghc-tagged" ,ghc-tagged)
+;       ("ghc-transformers-compat" ,ghc-transformers-compat)))
     (home-page
      "https://github.com/haskell/primitive")
     (synopsis "Primitive memory-related operations")
@@ -10572,6 +9945,28 @@ Show instance.")
      "This package provides various primitive memory-related operations.")
     (license license:bsd-3)))
 
+(define-public ghc-primitive-addr
+  (package
+    (name "ghc-primitive-addr")
+    (version "0.1.0.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/primitive-addr/primitive-addr-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32 "06r1p56wm8rbjxnlaqbmc3rbsj1rsv5scwnh80lsn0xw56jc70a2"))))
+    (build-system haskell-build-system)
+    (inputs (list ghc-primitive))
+    (home-page "https://github.com/haskell-primitive/primitive-addr")
+    (synopsis "Addresses to unmanaged memory")
+    (description
+     "This library provides the @code{Data.Primitive.Addr} module that was a part
+of the @code{primitive} library before @code{primitive-0.7.0.0}.")
+    (license license:bsd-3)))
+
 (define-public ghc-process-extras
   (package
     (name "ghc-process-extras")
@@ -10588,10 +9983,7 @@ Show instance.")
          "0klqgr37f1z2z6i0a9b0giapmq0p35l5k9kz1p7f0k1597w7agi9"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-data-default" ,ghc-data-default)
-       ("ghc-generic-deriving" ,ghc-generic-deriving)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-listlike" ,ghc-listlike)))
+     (list ghc-data-default ghc-generic-deriving ghc-hunit ghc-listlike))
     (home-page "https://github.com/seereason/process-extras")
     (synopsis "Extra tools for managing processes")
     (description "This package extends
@@ -10605,7 +9997,7 @@ API.")
 (define-public ghc-profunctors
   (package
     (name "ghc-profunctors")
-    (version "5.3")
+    (version "5.6.2")
     (source
      (origin
        (method url-fetch)
@@ -10615,17 +10007,17 @@ API.")
              ".tar.gz"))
        (sha256
         (base32
-         "1dx3nkc27yxsrbrhh3iwhq7dl1xn6bj7n62yx6nh8vmpbg62lqvl"))))
+         "0an9v003ivxmjid0s51qznbjhd5fsa1dkcfsrhxllnjja1xmv5b5"))))
     (build-system haskell-build-system)
     (outputs '("out" "static" "doc"))
     (inputs
-     `(("ghc-base-orphans" ,ghc-base-orphans)
-       ("ghc-bifunctors" ,ghc-bifunctors)
-       ("ghc-comonad" ,ghc-comonad)
-       ("ghc-contravariant" ,ghc-contravariant)
-       ("ghc-distributive" ,ghc-distributive)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-tagged" ,ghc-tagged)))
+     (list ghc-base-orphans
+           ghc-bifunctors
+           ghc-comonad
+           ghc-contravariant
+           ghc-distributive
+           ghc-semigroups
+           ghc-tagged))
     (home-page "https://github.com/ekmett/profunctors/")
     (synopsis "Profunctors for Haskell")
     (description "This library provides profunctors for Haskell.")
@@ -10634,7 +10026,7 @@ API.")
 (define-public ghc-project-template
   (package
     (name "ghc-project-template")
-    (version "0.2.0.1")
+    (version "0.2.1.0")
     (source
      (origin
        (method url-fetch)
@@ -10643,21 +10035,13 @@ API.")
              version ".tar.gz"))
        (sha256
         (base32
-         "1p69ww4rhah2qxragl615wl4a6mk4x9w09am8knmz3s4lxpljlpb"))))
+         "0ac43x36i6b595jhflif1qqhri1rrqw90ama5n7rsh0ffnzyb69d"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-base64-bytestring" ,ghc-base64-bytestring)
-       ("ghc-conduit" ,ghc-conduit)
-       ("ghc-conduit-extra" ,ghc-conduit-extra)
-       ("ghc-resourcet" ,ghc-resourcet)))
+     (list ghc-base64-bytestring ghc-conduit ghc-conduit-extra
+           ghc-resourcet))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
-    (arguments
-     `(#:cabal-revision
-       ("1"
-        "0lq3sqnq0nr0gbvgzp0lqdl3j3mqdmdlf8xsw0j3pjh581xj3k0a")))
+     (list ghc-hspec hspec-discover ghc-quickcheck))
     (home-page "https://github.com/fpco/haskell-ide")
     (synopsis "Specify Haskell project templates and generate files")
     (description
@@ -10674,23 +10058,21 @@ the ideal templating system.")
 (define-public ghc-protolude
   (package
     (name "ghc-protolude")
-    (version "0.2.3")
+    (version "0.3.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
-             "mirror://hackage/package/protolude/protolude-"
+             "https://hackage.haskell.org/package/protolude/protolude-"
              version
              ".tar.gz"))
        (sha256
         (base32
-         "0zzkyxz0vmcbncpid7gp72fpjj0fla3gqhlfkij5c5lg12skjgfj"))))
+         "1b6wprbwfdjyvds2bm6na0fbqgzdkj5ikkk33whbkyh3krd3i0s0"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-async" ,ghc-async)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-mtl-compat" ,ghc-mtl-compat)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)))
+     (list ghc-async ghc-hashable ghc-mtl-compat ghc-paths
+           ghc-transformers-compat))
     (home-page "https://github.com/protolude/protolude")
     (synopsis "Sensible set of defaults for writing custom Preludes")
     (description
@@ -10698,22 +10080,6 @@ the ideal templating system.")
 replace the standard one provided by GHC.")
     (license license:expat)))
 
-(define-public ghc-protolude-0.3
-  (package
-    (inherit ghc-protolude)
-    (name "ghc-protolude")
-    (version "0.3.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "mirror://hackage/package/protolude/protolude-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "1b6wprbwfdjyvds2bm6na0fbqgzdkj5ikkk33whbkyh3krd3i0s0"))))))
-
 (define-public ghc-psqueue
   (package
     (name "ghc-psqueue")
@@ -10726,6 +10092,9 @@ replace the standard one provided by GHC.")
                (base32
                 "1cik7sw10sacsijmfhghzy54gm1qcyxw14shlp86lx8z89kcnkza"))))
     (build-system haskell-build-system)
+    (arguments
+     '(#:cabal-revision
+       ("2" "0n1yrv1x1dxbjn9hjr8lk4k5in9c75ixzldlmszayi26bvax7329")))
     (home-page "https://hackage.haskell.org/package/PSQueue")
     (synopsis "Priority search queue")
     (description
@@ -10751,15 +10120,19 @@ keys, in linear time.")
         (base32
          "1yckx2csqswghiy9nfj03cybmza8104nmnpbpcc9ngwlbmakn9i6"))))
     (build-system haskell-build-system)
+    (arguments
+     '(#:tests? #f ; TODO: Needs quickcheck<2.14
+       #:cabal-revision
+       ("1" "0d0mm3c8x31dasfzp1884r2irkm3c9irvvbahjzfr1bzzxfb7vyv")))
     (inputs
-     `(("ghc-hashable" ,ghc-hashable)))
+     (list ghc-hashable))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+     (list ghc-hunit
+           ghc-quickcheck
+           ghc-tagged
+           ghc-tasty
+           ghc-tasty-hunit
+           ghc-tasty-quickcheck))
     (home-page "https://github.com/jaspervdj/psqueues")
     (synopsis "Pure priority search queues")
     (description "The psqueues package provides
@@ -10817,10 +10190,7 @@ Typical applications of Priority Search Queues include:
          "1cpvlwzg3qznhygrr78f75p65mnljd9v5cvnagfxjqppnrkay6bj"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-base64-bytestring" ,ghc-base64-bytestring)
-       ("ghc-cryptohash" ,ghc-cryptohash)
-       ("ghc-random" ,ghc-random)
-       ("ghc-byteable" ,ghc-byteable)))
+     (list ghc-base64-bytestring ghc-cryptohash ghc-random ghc-byteable))
     (home-page "https://github.com/PeterScott/pwstore")
     (synopsis "Secure password storage")
     (description
@@ -10835,7 +10205,7 @@ usable.")
 (define-public ghc-random
   (package
     (name "ghc-random")
-    (version "1.1")
+    (version "1.2.0")
     (outputs '("out" "static" "doc"))
     (source
      (origin
@@ -10845,14 +10215,41 @@ usable.")
              version
              ".tar.gz"))
        (sha256
-        (base32 "0nis3lbkp8vfx8pkr6v7b7kr5m334bzb0fk9vxqklnp2aw8a865p"))))
+        (base32 "1pmr7zbbqg58kihhhwj8figf5jdchhi7ik2apsyxbgsqq3vrqlg4"))))
     (build-system haskell-build-system)
+    (arguments
+     `(#:tests? #f
+       #:cabal-revision
+       ("6" "1hzfz9b1cxrsya8i53yx145iypaakfsfjix7l8girhx7vbz0cm8r")))
+    (inputs `(("ghc-splitmix" ,ghc-splitmix-bootstrap)))
+   ;; ghc-random is widely used and causes quite a few loops.
+;    (native-inputs
+;     `(("ghc-doctest" ,ghc-doctest)
+;       ("ghc-mwc-random" ,ghc-mwc-random)
+;       ("ghc-primitive" ,ghc-primitive)
+;       ("ghc-unliftio" ,ghc-unliftio)
+;       ("ghc-vector" ,ghc-vector)
+;       ("ghc-smallcheck" ,ghc-smallcheck)
+;       ("ghc-tasty" ,ghc-tasty)
+;       ("ghc-tasty-smallcheck" ,ghc-tasty-smallcheck)
+;       ("ghc-tasty-expected-failure" ,ghc-tasty-expected-failure)
+;       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
     (home-page "https://hackage.haskell.org/package/random")
     (synopsis "Random number library")
     (description "This package provides a basic random number generation
 library, including the ability to split random number generators.")
     (license license:bsd-3)))
 
+(define-public ghc-random-bootstrap
+  (package
+    (inherit ghc-random)
+    (name "ghc-random-bootstrap")
+    (arguments
+     `(#:tests? #f
+       ,@(package-arguments ghc-random)))
+    (native-inputs '())
+    (properties '((hidden? #t)))))
+
 (define-public ghc-raw-strings-qq
   (package
     (name "ghc-raw-strings-qq")
@@ -10867,7 +10264,7 @@ library, including the ability to split random number generators.")
         (base32
          "1lxy1wy3awf52968iy5y9r5z4qgnn2sxkdrh7js3m9gadb11w09f"))))
     (build-system haskell-build-system)
-    (native-inputs `(("ghc-hunit" ,ghc-hunit)))
+    (native-inputs (list ghc-hunit))
     (home-page "https://github.com/23Skidoo/raw-strings-qq")
     (synopsis "Raw string literals for Haskell")
     (description
@@ -10901,7 +10298,7 @@ includes efficient implementations for common data types.")
 (define-public ghc-rebase
   (package
     (name "ghc-rebase")
-    (version "1.3.1.1")
+    (version "1.13.0.1")
     (source
      (origin
        (method url-fetch)
@@ -10910,24 +10307,26 @@ includes efficient implementations for common data types.")
                            "rebase-" version ".tar.gz"))
        (sha256
         (base32
-         "0q4m2fa7wkgxs0grir8rlqwibasmi3s1x7c107ynndwfm62nzv0a"))))
+         "0sh1vha10n28c4jb97p99xglghqph8ppydqzbnb2h25a34057927"))))
     (build-system haskell-build-system)
     (outputs '("out" "static" "doc"))
-    (inputs `(("ghc-hashable" ,ghc-hashable)
-              ("ghc-vector" ,ghc-vector)
-              ("ghc-unordered-containers" ,ghc-unordered-containers)
-              ("ghc-scientific" ,ghc-scientific)
-              ("ghc-uuid" ,ghc-uuid)
-              ("ghc-dlist" ,ghc-dlist)
-              ("ghc-void" ,ghc-void)
-              ("ghc-bifunctors" ,ghc-bifunctors)
-              ("ghc-profunctors" ,ghc-profunctors)
-              ("ghc-contravariant" ,ghc-contravariant)
-              ("ghc-contravariant-extras" ,ghc-contravariant-extras)
-              ("ghc-semigroups" ,ghc-semigroups)
-              ("ghc-either" ,ghc-either)
-              ("ghc-fail" ,ghc-fail)
-              ("ghc-base-prelude" ,ghc-base-prelude)))
+    (inputs
+     (list ghc-bifunctors
+           ghc-comonad
+           ghc-contravariant
+           ghc-dlist
+           ghc-either
+           ghc-hashable
+           ghc-hashable-time
+           ghc-profunctors
+           ghc-scientific
+           ghc-selective
+           ghc-semigroupoids
+           ghc-unordered-containers
+           ghc-uuid-types
+           ghc-vector
+           ghc-vector-instances
+           ghc-void))
     (home-page "https://github.com/nikita-volkov/rebase")
     (synopsis "Progressive alternative to the base package
 for Haskell")
@@ -10969,12 +10368,12 @@ the community, with the missing features being added with pull-requests.")
         (base32
          "09wf8pl9ycglcv6qj5ba26gkg2s5iy81hsx9xp0q8na0cwvp71ki"))))
     (build-system haskell-build-system)
+    (arguments
+     '(#:cabal-revision
+       ("2" "1kd38n9h2hxl09khvkvkhnflgm6rbky1zkw3iazlpb8xk9zkk39s")))
     (inputs
-     `(("ghc-fingertree" ,ghc-fingertree)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-semigroupoids" ,ghc-semigroupoids)
-       ("ghc-semigroups" ,ghc-semigroups)))
+     (list ghc-fingertree ghc-hashable ghc-unordered-containers
+           ghc-semigroupoids ghc-semigroups))
     (home-page "https://github.com/ekmett/reducers/")
     (synopsis "Semigroups, specialized containers and a general map/reduce framework")
     (description "This library provides various semigroups, specialized
@@ -11006,7 +10405,7 @@ specify refactorings without depending on GHC.")
 (define-public ghc-reflection
   (package
     (name "ghc-reflection")
-    (version "2.1.5")
+    (version "2.1.6")
     (source
      (origin
        (method url-fetch)
@@ -11016,13 +10415,11 @@ specify refactorings without depending on GHC.")
              ".tar.gz"))
        (sha256
         (base32
-         "0xr947nj1vww5b8fwqmypxm3y3j5sxl4z8wnf834f83jzfzyjbi7"))))
+         "1kd6dgnp99dzbkxdnj01g81j03v7zq5cwg0sf19rlcmvgs8i8gmz"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-tagged" ,ghc-tagged)))
+    (inputs (list ghc-tagged))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-hspec ghc-quickcheck hspec-discover))
     (home-page "https://github.com/ekmett/reflection")
     (synopsis "Reify arbitrary terms into types that can be reflected back
 into terms")
@@ -11035,7 +10432,7 @@ configurations to coexist without resorting to mutable global variables or
 (define-public ghc-regex
   (package
     (name "ghc-regex")
-    (version "1.0.2.0")
+    (version "1.1.0.0")
     (source
      (origin
        (method url-fetch)
@@ -11043,7 +10440,7 @@ configurations to coexist without resorting to mutable global variables or
                            "regex-" version ".tar.gz"))
        (sha256
         (base32
-         "1f2z025hif1fr24b5khq3qxxyvpxrnhyx8xmbms332arw28rpkda"))))
+         "02hxgy5ck3h5pwd5gzs4565qbql8457cjdbbc2yrk236qzc1qa8x"))))
     (build-system haskell-build-system)
     (arguments
      `(#:phases
@@ -11057,15 +10454,14 @@ configurations to coexist without resorting to mutable global variables or
                 "template-haskell >= 2.7\n"))
              #t)))))
     (inputs
-     `(("ghc-base-compat" ,ghc-base-compat)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-regex-base" ,ghc-regex-base)
-       ("ghc-regex-pcre-builtin" ,ghc-regex-pcre-builtin)
-       ("ghc-regex-tdfa" ,ghc-regex-tdfa)
-       ("ghc-regex-tdfa-text" ,ghc-regex-tdfa-text)
-       ("ghc-time-locale-compat" ,ghc-time-locale-compat)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-utf8-string" ,ghc-utf8-string)))
+     (list ghc-base-compat
+           ghc-hashable
+           ghc-regex-base
+           ghc-regex-pcre-builtin
+           ghc-regex-tdfa
+           ghc-time-locale-compat
+           ghc-unordered-containers
+           ghc-utf8-string))
     (home-page "http://regex.uk")
     (synopsis "Toolkit for regex-base")
     (description
@@ -11080,7 +10476,7 @@ copious examples.")
 (define-public ghc-regex-applicative
   (package
     (name "ghc-regex-applicative")
-    (version "0.3.3.1")
+    (version "0.3.4")
     (source
      (origin
        (method url-fetch)
@@ -11089,13 +10485,11 @@ copious examples.")
              "regex-applicative-" version ".tar.gz"))
        (sha256
         (base32
-         "0p0anx5vamrhrdvviwkh2zn6pa3pv2bjb7nfyc7dvz2q7g14y1lg"))))
+         "0di66pi2kq5rrsn0k6pwakzwa0bgi9jfb2csm72kp5gzqdws8s8p"))))
     (build-system haskell-build-system)
-    (inputs
-     `(("ghc-smallcheck" ,ghc-smallcheck)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-smallcheck" ,ghc-tasty-smallcheck)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+    (inputs (list ghc-filtrable))
+    (native-inputs
+     (list ghc-smallcheck ghc-tasty ghc-tasty-hunit ghc-tasty-smallcheck))
     (home-page "https://github.com/feuerbach/regex-applicative")
     (synopsis "Regex-based parsing with applicative interface")
     (description
@@ -11106,7 +10500,7 @@ regular expressions.  Parsers can be built using Applicative interface.")
 (define-public ghc-regex-base
   (package
     (name "ghc-regex-base")
-    (version "0.93.2")
+    (version "0.94.0.1")
     (source
      (origin
        (method url-fetch)
@@ -11116,7 +10510,7 @@ regular expressions.  Parsers can be built using Applicative interface.")
              ".tar.gz"))
        (sha256
         (base32
-         "0y1j4h2pg12c853nzmczs263di7xkkmlnsq5dlp5wgbgl49mgp10"))))
+         "1ngdmmrxs1rhvib052c6shfa40yad82jylylikz327r0zxpxkcbi"))))
     (build-system haskell-build-system)
     (home-page
      "https://sourceforge.net/projects/lazy-regex")
@@ -11128,7 +10522,7 @@ regex-posix, regex-pcre, regex-parsec, regex-tdfa, regex-dfa.")
 (define-public ghc-regex-compat
   (package
     (name "ghc-regex-compat")
-    (version "0.95.1")
+    (version "0.95.2.1")
     (source
      (origin
        (method url-fetch)
@@ -11138,11 +10532,10 @@ regex-posix, regex-pcre, regex-parsec, regex-tdfa, regex-dfa.")
              ".tar.gz"))
        (sha256
         (base32
-         "0fwmima3f04p9y4h3c23493n1xj629ia2dxaisqm6rynljjv2z6m"))))
+         "0ivrdrcphrz3g6nr5wbsmfiv8i82caw0kf6z5qlmlq7xf9n3hywg"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-regex-base" ,ghc-regex-base)
-       ("ghc-regex-posix" ,ghc-regex-posix)))
+     (list ghc-regex-base ghc-regex-posix))
     (home-page "https://sourceforge.net/projects/lazy-regex")
     (synopsis "Replaces/Enhances Text.Regex")
     (description "This library provides one module layer over
@@ -11164,8 +10557,7 @@ regex-posix, regex-pcre, regex-parsec, regex-tdfa, regex-dfa.")
          "1p90fn90yhp7fvljjdqjp41cszidcfz4pw7fwvzyx4739b98x8sg"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-regex-base" ,ghc-regex-base)
-       ("ghc-regex-tdfa" ,ghc-regex-tdfa)))
+     (list ghc-regex-base ghc-regex-tdfa))
     (home-page "https://hub.darcs.net/shelarcy/regex-compat-tdfa")
     (synopsis "Unicode Support version of Text.Regex, using regex-tdfa")
     (description
@@ -11178,20 +10570,22 @@ this problem.")
 (define-public ghc-regex-pcre
   (package
     (name "ghc-regex-pcre")
-    (version "0.94.4")
+    (version "0.95.0.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://hackage.haskell.org/package/"
                                   "regex-pcre/regex-pcre-" version ".tar.gz"))
               (sha256
                (base32
-                "1h16w994g9s62iwkdqa7bar2n9cfixmkzz2rm8svm960qr57valf"))))
+                "0nn76q4bsjnxim0j0d01jifmh36as9jdpcvm001a851vvq86zb8n"))))
     (build-system haskell-build-system)
     (arguments
-     `(#:extra-directories ("pcre")))
+     `(#:extra-directories ("pcre")
+       #:cabal-revision
+       ("3" "1mxy2y7dmv37hhsasm17x2mb9dhmzza13pc7jfrk77inpig78ib8")))
+    (native-inputs (list pkg-config))
     (inputs
-     `(("ghc-regex-base" ,ghc-regex-base)
-       ("pcre" ,pcre)))
+     (list ghc-regex-base pcre))
     (home-page "https://hackage.haskell.org/package/regex-pcre")
     (synopsis "Enhancement of the builtin Text.Regex library")
     (description
@@ -11203,7 +10597,7 @@ expressions.")
 (define-public ghc-regex-pcre-builtin
   (package
     (name "ghc-regex-pcre-builtin")
-    (version "0.94.5.8.8.35")
+    (version "0.95.2.3.8.44")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://hackage.haskell.org/package/"
@@ -11211,10 +10605,10 @@ expressions.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "1s755qdg1mxrf125sh83bsc5kjkrj8fkq8wf6dg1jan86c7p7gl4"))))
+                "0pn55ssrwr05c9sa9jvp0knvzjksz04wn3pmzf5dz4xgbyjadkna"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-regex-base" ,ghc-regex-base)))
+     (list ghc-regex-base))
     (home-page "https://hackage.haskell.org/package/regex-pcre-builtin")
     (synopsis "Enhancement of the builtin Text.Regex library")
     (description
@@ -11226,7 +10620,7 @@ providing the PCRE backend to accompany regex-base, with bundled code from
 (define-public ghc-regex-posix
   (package
     (name "ghc-regex-posix")
-    (version "0.95.2")
+    (version "0.96.0.1")
     (source
      (origin
        (method url-fetch)
@@ -11236,10 +10630,10 @@ providing the PCRE backend to accompany regex-base, with bundled code from
              ".tar.gz"))
        (sha256
         (base32
-         "0gkhzhj8nvfn1ija31c7xnl6p0gadwii9ihyp219ck2arlhrj0an"))))
+         "1715b57z67q4hg0jz44wkxrxi3v7n5iagw6gw48pf8hr34wpr0n7"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-regex-base" ,ghc-regex-base)))
+     (list ghc-regex-base))
     (home-page "https://sourceforge.net/projects/lazy-regex")
     (synopsis "POSIX regular expressions for Haskell")
     (description "This library provides the POSIX regex backend used by the
@@ -11249,7 +10643,7 @@ Haskell library @code{regex-base}.")
 (define-public ghc-regex-tdfa
   (package
     (name "ghc-regex-tdfa")
-    (version "1.2.3.2")
+    (version "1.3.1.1")
     (source
      (origin
        (method url-fetch)
@@ -11258,58 +10652,39 @@ Haskell library @code{regex-base}.")
              version ".tar.gz"))
        (sha256
         (base32
-         "03yhpqrqz977nwlnhnyz9dacnbzw8xb6j18h365rkgmbc05sb3hf"))))
+         "1msrq31k4jmn2lmrdzn87jqarqhw265ca69rfg5jpa5adrzm3gmi"))))
     (build-system haskell-build-system)
-    (outputs '("out" "static" "doc"))
+    (arguments
+     '(#:cabal-revision
+       ("1" "02gwf740vs0jy3l6dgw72r8c04yggshia6w16n140ncpsici8c4r")))
     (inputs
-     `(("ghc-regex-base" ,ghc-regex-base)))
+     (list ghc-regex-base))
+    (native-inputs (list ghc-utf8-string))
     (home-page "https://github.com/haskell-hvr/regex-tdfa")
-    (synopsis "POSIX extended regular expressions in Haskell.")
+    (synopsis "POSIX extended regular expressions in Haskell")
     (description
      "Regex-tdfa is a pure Haskell regular expression library implementing POSIX
 extended regular expressions.  It is a \"tagged\" DFA regex engine. It is
 inspired by libtre.")
     (license license:bsd-3)))
 
-(define-public ghc-regex-tdfa-text
-  (package
-    (name "ghc-regex-tdfa-text")
-    (version "1.0.0.3")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/regex-tdfa-text/"
-             "regex-tdfa-text-" version ".tar.gz"))
-       (sha256
-        (base32
-         "0090g6lgbdm9lywpqm2d3724nnnh24nx3vnlqr96qc2w486pmmrq"))))
-    (build-system haskell-build-system)
-    (inputs
-     `(("ghc-regex-base" ,ghc-regex-base)
-       ("ghc-regex-tdfa" ,ghc-regex-tdfa)))
-    (home-page
-     "https://hackage.haskell.org/package/regex-tdfa-text")
-    (synopsis "Text interface for regex-tdfa")
-    (description
-     "This provides an extra text interface for regex-tdfa.")
-    (license license:bsd-3)))
-
 (define-public ghc-repline
   (package
     (name "ghc-repline")
-    (version "0.2.0.0")
+    (version "0.4.0.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
-             "mirror://hackage/package/repline/repline-"
+             "https://hackage.haskell.org/package/repline/repline-"
              version
              ".tar.gz"))
        (sha256
         (base32
-         "1ph21kbbanlcs8n5lwk16g9vqkb98mkbz5mzwrp8j2rls2921izc"))))
+         "1dspwi28krinkxdd7waq4y6plz0dfmzz72885p9pcqp1r14qrhj3"))))
     (build-system haskell-build-system)
+    (inputs
+     (list ghc-exceptions ghc-haskeline))
     (home-page "https://github.com/sdiehl/repline")
     (synopsis "Haskeline wrapper for GHCi-like REPL interfaces")
     (description
@@ -11317,28 +10692,10 @@ inspired by libtre.")
 normal mtl transformers.")
     (license license:expat)))
 
-(define-public ghc-repline-0.3
-  (package
-    (inherit ghc-repline)
-    (version "0.3.0.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "mirror://hackage/package/repline/repline-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "0niihfyggg2qisadg7w49cr5k5qyyynia93iip0ng2bbmzwi88g8"))))
-    (inputs
-     `(("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-haskeline" ,ghc-haskeline-0.8)))))
-
 (define-public ghc-rerebase
   (package
     (name "ghc-rerebase")
-    (version "1.3.1.1")
+    (version "1.13.0.1")
     (source
      (origin
        (method url-fetch)
@@ -11347,11 +10704,11 @@ normal mtl transformers.")
              version ".tar.gz"))
        (sha256
         (base32
-         "1jbqif6k249rkknm2zwk8v8jil3kgi9ar53358v8l4ffx346rm82"))))
+         "0j50l96whwi65ir35nfhn24h6103zy1ilfjsqiax63ajzw169fkv"))))
     (build-system haskell-build-system)
     (outputs '("out" "static" "doc"))
     (inputs
-     `(("ghc-rebase" ,ghc-rebase)))
+     (list ghc-rebase))
     (home-page "https://github.com/nikita-volkov/rerebase")
     (synopsis "Reexports from ``base'' with many other standard libraries")
     (description "A rich drop-in replacement for @code{base}.  For details and
@@ -11362,7 +10719,7 @@ the project's home page}.")
 (define-public ghc-resolv
   (package
     (name "ghc-resolv")
-    (version "0.1.1.2")
+    (version "0.1.2.0")
     (source
      (origin
        (method url-fetch)
@@ -11371,22 +10728,16 @@ the project's home page}.")
              version ".tar.gz"))
        (sha256
         (base32
-         "0wczdy3vmpfcfwjn1m95bygc5d83m97xxmavhdvy5ayn8c402fp4"))))
+         "0wa6wsh6i52q4ah2z0hgzlks325kigch4yniz0y15nw4skxbm8l1"))))
     (build-system haskell-build-system)
     (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'update-constraints
-           (lambda _
-             (substitute* "resolv.cabal"
-               (("tasty         >= 1\\.1     && < 1\\.2")
-                "tasty         >= 1.1     && < 1.3"))
-             #t)))))
+     `(#:tests? #f ; TODO: tasty >=1.2.3 && <1.3 || >=1.3.1 && <1.4
+       #:cabal-revision
+       ("3" "0af5dsdyn04i76d012xhhfkkml10bqzl6q2yivkhf8rlvh1fiii5")))
     (inputs
-     `(("ghc-base16-bytestring" ,ghc-base16-bytestring)))
+     (list ghc-base16-bytestring))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+     (list ghc-tasty ghc-tasty-hunit))
     (home-page "https://github.com/haskell/hackage-security")
     (synopsis "Domain Name Service (DNS) lookup via @code{libresolv}")
     (description "This package implements an API for accessing the
@@ -11410,10 +10761,8 @@ Unix systems.")
         (base32
          "04mw8b9djb14zp4rdi6h7mc3zizh597ffiinfbr4m0m8psifw9w6"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-hashable" ,ghc-hashable)
-              ("ghc-monad-control" ,ghc-monad-control)
-              ("ghc-transformers-base" ,ghc-transformers-base)
-              ("ghc-vector" ,ghc-vector)))
+    (inputs (list ghc-hashable ghc-monad-control ghc-transformers-base
+                  ghc-vector))
     (home-page "https://github.com/bos/pool")
     (synopsis "Striped resource pooling implementation in Haskell")
     (description "This Haskell package provides striped pooling abstraction
@@ -11424,7 +10773,7 @@ connections.")
 (define-public ghc-resourcet
   (package
     (name "ghc-resourcet")
-    (version "1.2.2")
+    (version "1.2.4.3")
     (source
      (origin
        (method url-fetch)
@@ -11432,18 +10781,17 @@ connections.")
                            "resourcet-" version ".tar.gz"))
        (sha256
         (base32
-         "1rfbfcv3r1h29y0yqr3x6a1s04lbc3vzm3jqnfg4f9rqp9d448qk"))))
+         "0zrvnikw1a0r2j59k12fxikyrg0ki5a7xhqhjgfl9h6dqpz54h85"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-transformers-base" ,ghc-transformers-base)
-       ("ghc-monad-control" ,ghc-monad-control)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)
-       ("ghc-mmorph" ,ghc-mmorph)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-unliftio-core" ,ghc-unliftio-core)))
+     (list ghc-transformers-base
+           ghc-monad-control
+           ghc-transformers-compat
+           ghc-mmorph
+           ghc-exceptions
+           ghc-unliftio-core))
     (native-inputs
-     `(("ghc-lifted-base" ,ghc-lifted-base)
-       ("ghc-hspec" ,ghc-hspec)))
+     (list ghc-lifted-base ghc-hspec))
     (home-page "https://github.com/snoyberg/conduit")
     (synopsis "Deterministic allocation and freeing of scarce resources")
     (description "ResourceT is a monad transformer which creates a region of
@@ -11453,7 +10801,7 @@ code where you can safely allocate resources.")
 (define-public ghc-retry
   (package
     (name "ghc-retry")
-    (version "0.8.1.0")
+    (version "0.8.1.2")
     (source
      (origin
        (method url-fetch)
@@ -11461,17 +10809,13 @@ code where you can safely allocate resources.")
                            "retry/retry-" version ".tar.gz"))
        (sha256
         (base32
-         "02k03r86amg1vbrsvb644342ym13d9jwkzki9sk93pdg5l8j35dj"))))
+         "0nwyis42xpmxfw8nz8qn59r3v7q0dkfzkzkhllgn30cdjbbmwhf5"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-random" ,ghc-random)))
+     (list ghc-exceptions ghc-random))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-hedgehog" ,ghc-tasty-hedgehog)
-       ("ghc-hedgehog" ,ghc-hedgehog)))
+     (list ghc-hunit ghc-tasty ghc-tasty-hunit ghc-tasty-hedgehog
+           ghc-hedgehog))
     (home-page "https://github.com/Soostone/retry")
     (synopsis "Retry combinators for monadic actions that may fail")
     (description "This package exposes combinators that can wrap
@@ -11487,7 +10831,7 @@ the query instead of simply raising an exception.")
 (define-public ghc-rfc5051
   (package
     (name "ghc-rfc5051")
-    (version "0.1.0.4")
+    (version "0.2")
     (source
      (origin
        (method url-fetch)
@@ -11495,7 +10839,7 @@ the query instead of simply raising an exception.")
                            "rfc5051-" version ".tar.gz"))
        (sha256
         (base32
-         "1lxkq414ni986ciml4gbvf463fn55z299knky7pq3ixb1qislpb1"))))
+         "0nri7js5ymywh2gi3li25wrkl1nf712qhbzw5hn46fib83qsq73k"))))
     (build-system haskell-build-system)
     (home-page "https://hackage.haskell.org/package/rfc5051")
     (synopsis "Simple unicode collation as per RFC5051")
@@ -11510,7 +10854,7 @@ better for some purposes.")
 (define-public ghc-rio
   (package
     (name "ghc-rio")
-    (version "0.1.12.0")
+    (version "0.1.21.0")
     (source
      (origin
        (method url-fetch)
@@ -11519,22 +10863,22 @@ better for some purposes.")
              version ".tar.gz"))
        (sha256
         (base32
-         "0xzjkh6aavynpyskikhs8dmv0zhkiqiwz9zdn80zbd25b2182pif"))))
+         "013m4xgsmg8h1rba9krxppz49lc5wz26gksms5zibsjj0w59m58h"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-microlens" ,ghc-microlens)
-       ("ghc-primitive" ,ghc-primitive)
-       ("ghc-typed-process" ,ghc-typed-process)
-       ("ghc-unliftio" ,ghc-unliftio)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-vector" ,ghc-vector)))
+     (list ghc-hashable
+           ghc-microlens
+           ghc-microlens-mtl
+           ghc-primitive
+           ghc-typed-process
+           ghc-unliftio-core
+           ghc-unliftio
+           ghc-unordered-containers
+           ghc-vector))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-hspec ghc-quickcheck hspec-discover))
     (home-page "https://github.com/commercialhaskell/rio#readme")
-    (synopsis "A standard library for Haskell")
+    (synopsis "Standard library for Haskell")
     (description "This package works as a prelude replacement for Haskell,
 providing more functionality and types out of the box than the standard
 prelude (such as common data types like @code{ByteString} and
@@ -11551,7 +10895,7 @@ expose it from another module in the hierarchy.
 (define-public ghc-safe
   (package
     (name "ghc-safe")
-    (version "0.3.17")
+    (version "0.3.19")
     (source
      (origin
        (method url-fetch)
@@ -11561,10 +10905,10 @@ expose it from another module in the hierarchy.
              ".tar.gz"))
        (sha256
         (base32
-         "0p3yaf5slvyz1cyy51jq64c5rlp8yzwim8iy2dlnk42if4gc9ibr"))))
+         "18pp6cn9np9jgs01x9mac6wk41k34g86fx5ibfarbapqr1138115"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-quickcheck))
     (home-page "https://github.com/ndmitchell/safe#readme")
     (synopsis "Library of safe (exception free) functions")
     (description "This library provides wrappers around @code{Prelude} and
@@ -11575,7 +10919,7 @@ exceptions.")
 (define-public ghc-safe-exceptions
   (package
     (name "ghc-safe-exceptions")
-    (version "0.1.7.0")
+    (version "0.1.7.2")
     (source
      (origin
        (method url-fetch)
@@ -11584,16 +10928,10 @@ exceptions.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "0sd0zfsm9pcll5bzzj523rbn45adjrnavdkz52hgmdjjgdcdrk8q"))))
+         "15a80s87f603w8l7fnaba2cyqx62042vvcidpjzyga2685wpyqv9"))))
     (build-system haskell-build-system)
-    (arguments
-     '(#:cabal-revision
-       ("4" "0fid41gishzsyb47wzxhd5falandfirqcp760hcja81qjpfmqd32")))
-    (inputs `(("ghc-exceptions" ,ghc-exceptions)))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-void" ,ghc-void)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-hspec ghc-void hspec-discover))
     (home-page "https://github.com/fpco/safe-exceptions")
     (synopsis "Safe, consistent, and easy exception handling")
     (description "Runtime exceptions - as exposed in @code{base} by the
@@ -11619,15 +10957,11 @@ handling wrong.")
          "04g3070cbjdqj0h9l9ii6470xcbn40xfv4fr89a8yvnkdim9nyfm"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-conduit" ,ghc-conduit)
-       ("ghc-conduit-combinators" ,ghc-conduit-combinators)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-resourcet" ,ghc-resourcet)))
+     (list ghc-conduit ghc-conduit-combinators ghc-exceptions
+           ghc-resourcet))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework-th" ,ghc-test-framework-th)))
+     (list ghc-hunit ghc-test-framework ghc-test-framework-hunit
+           ghc-test-framework-th))
     (home-page "https://github.com/luispedro/safeio")
     (synopsis "Write output to disk atomically")
     (description
@@ -11649,7 +10983,7 @@ avoid the problem of partial intermediate files.")
          "0rpg9j6fy70i0b9dkrip9d6wim0nac0snp7qzbhykjkqlcvvgr91"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)))
+     (list ghc-hunit))
     (home-page "https://github.com/ChrisKuklewicz/SafeSemaphore")
     (synopsis "Exception safe semaphores")
     (description "This library provides exception safe semaphores that can be
@@ -11672,14 +11006,14 @@ are not exception safe and can be broken by @code{killThread}.")
          "1ndgai8idlxyccvkz5zsgq06v58blc30i6hkky5b1sf5x6gs2h29"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-stringsearch" ,ghc-stringsearch)
-       ("ghc-conduit" ,ghc-conduit)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-tasty-th" ,ghc-tasty-th)))
+     (list ghc-stringsearch
+           ghc-conduit
+           ghc-exceptions
+           ghc-hunit
+           ghc-tasty
+           ghc-tasty-hunit
+           ghc-tasty-quickcheck
+           ghc-tasty-th))
     (home-page "https://hackage.haskell.org/package/sandi")
     (synopsis "Data encoding library")
     (description "Reasonably fast data encoding library.")
@@ -11701,9 +11035,7 @@ are not exception safe and can be broken by @code{killThread}.")
          "1r5kffjfwpas45g74sip8glrj1m9nygrnxjm7xgw898rq9pnafgn"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)
-       ("ghc-unliftio" ,ghc-unliftio)))
+     (list ghc-hspec hspec-discover ghc-unliftio))
     (home-page "https://github.com/fpco/say")
     (synopsis
      "Send textual messages to a Handle in a thread-friendly way")
@@ -11722,7 +11054,7 @@ as sending some messages to the terminal - that has the following properties:
 (define-public ghc-scientific
   (package
     (name "ghc-scientific")
-    (version "0.3.6.2")
+    (version "0.3.7.0")
     (source
      (origin
        (method url-fetch)
@@ -11732,20 +11064,18 @@ as sending some messages to the terminal - that has the following properties:
              ".tar.gz"))
        (sha256
         (base32
-         "03ql2f0ac8bsl524idy9xxa3kxisb2sj3avflzw580j5hzy0m397"))))
+         "1aa3ngb71l2sh1x2829napnr1w285q0sn2f7z2wvi3ynng2238d3"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-integer-logarithms" ,ghc-integer-logarithms)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-primitive" ,ghc-primitive)))
+     (list ghc-integer-logarithms ghc-hashable ghc-primitive))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-ant-xml" ,ghc-tasty-ant-xml)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-smallcheck" ,ghc-tasty-smallcheck)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-smallcheck" ,ghc-smallcheck)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-tasty
+           ghc-tasty-ant-xml
+           ghc-tasty-hunit
+           ghc-tasty-smallcheck
+           ghc-tasty-quickcheck
+           ghc-smallcheck
+           ghc-quickcheck))
     (home-page "https://github.com/basvandijk/scientific")
     (synopsis "Numbers represented using scientific notation")
     (description "This package provides @code{Data.Scientific}, which provides
@@ -11783,7 +11113,7 @@ notation}.")
          "00y67v80a8l09i3k76z09lg25kw72ivl09nag8ckdlk4a0cfnzfq"))))
     (build-system haskell-build-system)
     (inputs
-     `(("sdl" ,sdl)))
+     (list sdl))
     (home-page "https://hackage.haskell.org/package/SDL")
     (synopsis "LibSDL for Haskell")
     (description "Simple DirectMedia Layer (libSDL) is a cross-platform
@@ -11796,7 +11126,7 @@ award winning Linux port of \"Civilization: Call To Power.\"")
 (define-public ghc-sdl2
   (package
     (name "ghc-sdl2")
-    (version "2.5.0.0")
+    (version "2.5.3.0")
     (source
      (origin
        (method url-fetch)
@@ -11804,18 +11134,13 @@ award winning Linux port of \"Civilization: Call To Power.\"")
                            "sdl2/sdl2-" version ".tar.gz"))
        (sha256
         (base32
-         "1x368yhdd55b3cvx8dvj1sj6nzygzigbhrwhssjs4k0rcxlwqfw8"))))
+         "08l24cb92spnx3bn26bj0z2cszpsawhaa9vvhblvsr3d6z76065q"))))
     (build-system haskell-build-system)
     (arguments '(#:tests? #f)) ; tests require graphical environment
     (inputs
-     `(("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-linear" ,ghc-linear)
-       ("ghc-statevar" ,ghc-statevar)
-       ("ghc-vector" ,ghc-vector)
-       ("sdl2" ,sdl2)))
+     (list ghc-exceptions ghc-linear ghc-statevar ghc-vector sdl2))
     (native-inputs
-     `(("ghc-weigh" ,ghc-weigh)
-       ("pkg-config" ,pkg-config)))
+     (list ghc-weigh pkg-config))
     (home-page "https://hackage.haskell.org/package/sdl2")
     (synopsis "High- and low-level bindings to the SDL library")
     (description
@@ -11843,10 +11168,9 @@ programming.")
          "1pr6dkg73cy9z0w54lrkj9c5bhxj56nl92lxikjy8kz6nyr455rr"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-sdl2" ,ghc-sdl2)
-       ("sdl2-image" ,sdl2-image)))
+     (list ghc-sdl2 sdl2-image))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://hackage.haskell.org/package/sdl2-image")
     (synopsis "Bindings to SDL2_image")
     (description "This package provides Haskell bindings to
@@ -11867,14 +11191,14 @@ programming.")
          "1k8avyccq5l9z7bwxigim312yaancxl1sr3q6a96bcm7pnhiak0g"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-data-default-class" ,ghc-data-default-class)
-       ("ghc-lifted-base" ,ghc-lifted-base)
-       ("ghc-monad-control" ,ghc-monad-control)
-       ("ghc-sdl2" ,ghc-sdl2)
-       ("ghc-vector" ,ghc-vector)
-       ("sdl2-mixer" ,sdl2-mixer)))
+     (list ghc-data-default-class
+           ghc-lifted-base
+           ghc-monad-control
+           ghc-sdl2
+           ghc-vector
+           sdl2-mixer))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://hackage.haskell.org/package/sdl2-mixer")
     (synopsis "Bindings to SDL2 mixer")
     (description "This package provides Haskell bindings to
@@ -11902,8 +11226,7 @@ programming.")
               (sdl-image-include (string-append sdl-image "/include/SDL")))
          (list (string-append "--extra-include-dirs=" sdl-image-include)))))
     (inputs
-     `(("ghc-sdl" ,ghc-sdl)
-       ("sdl-image" ,sdl-image)))
+     (list ghc-sdl sdl-image))
     (home-page "https://hackage.haskell.org/package/SDL-image")
     (synopsis "Haskell bindings to libSDL_image")
     (description "SDL_image is an image file loading library.  It loads images
@@ -11932,8 +11255,7 @@ PNG, PNM, TGA, TIFF, XCF, XPM, XV.")
               (sdl-mixer-include (string-append sdl-mixer "/include/SDL")))
          (list (string-append "--extra-include-dirs=" sdl-mixer-include)))))
     (inputs
-     `(("ghc-sdl" ,ghc-sdl)
-       ("sdl-mixer" ,sdl-mixer)))
+     (list ghc-sdl sdl-mixer))
     (home-page "https://hackage.haskell.org/package/SDL-mixer")
     (synopsis "Haskell bindings to libSDL_mixer")
     (description "SDL_mixer is a sample multi-channel audio mixer library.  It
@@ -11956,8 +11278,7 @@ MIDI, Ogg Vorbis, and SMPEG MP3 libraries.")
         (base32
          "19hnw2cfbsfjynxq1bq9f6djbxhsc1k751ml0y1ab3ah913mm29j"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-byteable" ,ghc-byteable)
-              ("ghc-memory" ,ghc-memory)))
+    (inputs (list ghc-byteable ghc-memory))
     (home-page "https://github.com/vincenthz/hs-securemem")
     (synopsis "Auto-scrubbing and const-time-eq memory chunk abstraction for
 Haskell")
@@ -11968,7 +11289,7 @@ a memory chunk that will be auto-scrubbed after it run out of scope.")
 (define-public ghc-semialign
   (package
     (name "ghc-semialign")
-    (version "1")
+    (version "1.1.0.1")
     (source
      (origin
        (method url-fetch)
@@ -11978,24 +11299,20 @@ a memory chunk that will be auto-scrubbed after it run out of scope.")
              ".tar.gz"))
        (sha256
         (base32
-         "004x0a80sqqdgvsyk4z0nasxpi6z3g1d8kgwj804bj9ka8dlc75m"))))
+         "11qs4imy3cq4cx9mm6g30r6qk3rngqrmz7lkl5379gs1yvgvs44q"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-these" ,ghc-these)
-       ("ghc-base-compat" ,ghc-base-compat)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-semigroupoids" ,ghc-semigroupoids)))
-    (arguments
-     `(#:cabal-revision
-       ("1"
-        "0qnqnyfng4kwy2h2anrcy5id2ijnawava3zcc5h5b8ri1y6ks6zi")))
+     (list ghc-these
+           ghc-base-compat
+           ghc-hashable
+           ghc-tagged
+           ghc-unordered-containers
+           ghc-vector
+           ghc-semigroupoids))
     (home-page
      "https://github.com/isomorphism/these")
     (synopsis
-     "Align and Zip type-classes from the common Semialign ancestor ")
+     "Align and Zip type-classes from the common Semialign ancestor")
     (description
      "The major use of @code{These} of this is provided by the
 @code{align} member of @code{Semialign} class, representing a
@@ -12008,7 +11325,7 @@ class, forming lattice-like structure.")
 (define-public ghc-semigroupoids
   (package
     (name "ghc-semigroupoids")
-    (version "5.3.3")
+    (version "5.3.6")
     (source
      (origin
        (method url-fetch)
@@ -12018,23 +11335,20 @@ class, forming lattice-like structure.")
              ".tar.gz"))
        (sha256
         (base32
-         "016hc4imr9l4szs3p7f1aahvxr5wv4clvr3qzrm3nibssg5vrs61"))))
+         "0glhqc9x8i5z3bdg23xvl2lfns95msid3h3x0jksna7i6c8j869n"))))
     (build-system haskell-build-system)
     (outputs '("out" "static" "doc"))
     (inputs
-     `(("ghc-base-orphans" ,ghc-base-orphans)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)
-       ("ghc-bifunctors" ,ghc-bifunctors)
-       ("ghc-comonad" ,ghc-comonad)
-       ("ghc-contravariant" ,ghc-contravariant)
-       ("ghc-distributive" ,ghc-distributive)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)))
-    (native-inputs
-     `(("cabal-doctest" ,cabal-doctest)
-       ("ghc-doctest" ,ghc-doctest)))
+     (list ghc-base-orphans
+           ghc-transformers-compat
+           ghc-bifunctors
+           ghc-comonad
+           ghc-contravariant
+           ghc-distributive
+           ghc-generic-deriving
+           ghc-hashable
+           ghc-tagged
+           ghc-unordered-containers))
     (home-page "https://github.com/ekmett/semigroupoids")
     (synopsis "Semigroupoids operations for Haskell")
     (description "This library provides a wide array of (semi)groupoids and
@@ -12050,7 +11364,7 @@ just a @code{Semigroup} are added.")
 (define-public ghc-semigroups
   (package
     (name "ghc-semigroups")
-    (version "0.18.5")
+    (version "0.19.2")
     (source
      (origin
        (method url-fetch)
@@ -12060,13 +11374,10 @@ just a @code{Semigroup} are added.")
              ".tar.gz"))
        (sha256
         (base32
-         "17g29h62g1k51ghhvzkw72zksjgi6vs6bfipkj81pqw1dsprcamb"))))
+         "0h1sl3i6k8csy5zkkpy65rxzds9wg577z83aaakybr3n1gcv4855"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-nats" ,ghc-nats)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-hashable" ,ghc-hashable)))
+     (list ghc-nats ghc-tagged ghc-unordered-containers ghc-hashable))
     (home-page "https://github.com/ekmett/semigroups/")
     (synopsis "Semigroup operations for Haskell")
     (description "This package provides semigroups for Haskell.  In
@@ -12083,43 +11394,72 @@ semigroup.")
     (inherit ghc-semigroups)
     (name "ghc-semigroups-bootstrap")
     (inputs
-     `(("ghc-nats" ,ghc-nats-bootstrap)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-unordered-containers" ,ghc-unordered-containers-bootstrap)
-       ("ghc-hashable" ,ghc-hashable-bootstrap)))
+     (list ghc-nats-bootstrap ghc-tagged
+           ghc-unordered-containers-bootstrap ghc-hashable-bootstrap))
     (properties '((hidden? #t)))))
 
+(define-public ghc-semirings
+  (package
+    (name "ghc-semirings")
+    (version "0.6")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/semirings/semirings-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32 "16q535bvjl7395sqkx6zlw48y4fzr7irp44pcp7w9irpn4cncdcr"))))
+    (build-system haskell-build-system)
+    (inputs
+      (list ghc-base-compat-batteries ghc-hashable ghc-unordered-containers))
+    (arguments
+      `(#:cabal-revision
+        ("1" "1c06yhfa053sv3rfz0d72a33l5qb0xmj1b3hy2z7pzxrcay6g1yc")))
+    (home-page "https://github.com/chessai/semirings")
+    (synopsis "Two monoids as one, in holy haskimony")
+    (description
+     "Haskellers are usually familiar with monoids and semigroups.  A monoid has an
+appending operation @code{<>} (or @code{mappend}), and an identity element,
+@code{mempty}.  A semigroup has an appending @code{<>} operation, but does not
+require a @code{mempty} element.  A Semiring has two appending operations,
+@code{plus} and @code{times}, and two respective identity elements,
+@code{zero} and @code{one}.  More formally, a Semiring R is a set equipped
+with two binary relations @code{+} and @code{*}, such that: (R,+) is a
+commutative monoid with identity element 0, (R,*) is a monoid with identity
+element 1, (*) left and right distributes over addition, and . multiplication
+by @code{0} annihilates R.")
+    (license license:bsd-3)))
+
 (define-public ghc-serialise
   (package
     (name "ghc-serialise")
-    (version "0.2.1.0")
+    (version "0.2.3.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
-             "mirror://hackage/package/serialise/serialise-"
+             "https://hackage.haskell.org/package/serialise/serialise-"
              version
              ".tar.gz"))
        (sha256
         (base32
-         "19ary6ivzk8z7wcxhm860qmh7pwqj0qjqzav1h42y85l608zqgh4"))))
+         "0vp4wyxpximpx10pssfgdsir1pc23zb62fg3kj3iblpzqfrryy69"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-cborg" ,ghc-cborg)
-       ("ghc-half" ,ghc-half)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-primitive" ,ghc-primitive)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-vector" ,ghc-vector)))
+     (list ghc-cborg
+           ghc-half
+           ghc-hashable
+           ghc-primitive
+           ghc-unordered-containers
+           ghc-vector))
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-quickcheck-instances" ,ghc-quickcheck-instances)))
+     (list ghc-quickcheck ghc-tasty ghc-tasty-hunit ghc-tasty-quickcheck
+           ghc-quickcheck-instances))
     (arguments
      `(#:cabal-revision
-       ("1" "1rknhad1i8bpknsnphmcmb6dnb48c2p2c13ia2qqch3hkhsvfpr6")))
+       ("2" "1qcsp15v0swxy2qlvc40fil09zq32y3wl00y3passc2a4b4yhmr4")))
     (home-page "https://github.com/well-typed/cborg")
     (synopsis "Binary serialisation library for Haskell values")
     (description
@@ -12163,7 +11503,7 @@ environment variables.")
 (define-public ghc-setlocale
   (package
     (name "ghc-setlocale")
-    (version "1.0.0.9")
+    (version "1.0.0.10")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -12171,7 +11511,7 @@ environment variables.")
                     version "/setlocale-" version ".tar.gz"))
               (sha256
                (base32
-                "18b6xafspzxrmz5m9r9nzy3z053crqi59xc8n8aqd4gw0pvqdcrv"))))
+                "19rv89jkhq5ic7j5rzpygnmsbzim2mn8ip0m292za613q88gywir"))))
     (build-system haskell-build-system)
     (home-page "https://hackage.haskell.org/package/setlocale")
     (synopsis "Haskell bindings to setlocale")
@@ -12182,7 +11522,7 @@ environment variables.")
 (define-public ghc-shakespeare
   (package
     (name "ghc-shakespeare")
-    (version "2.0.22")
+    (version "2.0.25")
     (source
      (origin
        (method url-fetch)
@@ -12191,18 +11531,16 @@ environment variables.")
                            "shakespeare-" version ".tar.gz"))
        (sha256
         (base32
-         "1mc1a0vv070gcawwcx6vzpj6gpfh1qnlqrndiyfic3p500y656vh"))))
+         "1fjv3yg425d87d3dih0l3ff95g5a5yp9w85m58sjara6xqivj9s4"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-aeson" ,ghc-aeson)
-              ("ghc-blaze-markup" ,ghc-blaze-markup)
-              ("ghc-blaze-html" ,ghc-blaze-html)
-              ("ghc-exceptions" ,ghc-exceptions)
-              ("ghc-vector" ,ghc-vector)
-              ("ghc-unordered-containers" ,ghc-unordered-containers)
-              ("ghc-scientific" ,ghc-scientific)))
-    (native-inputs `(("ghc-hspec" ,ghc-hspec)
-                     ("ghc-hunit" ,ghc-hunit)
-                     ("hspec-discover" ,hspec-discover)))
+    (inputs (list ghc-aeson
+                  ghc-blaze-markup
+                  ghc-blaze-html
+                  ghc-vector
+                  ghc-th-lift
+                  ghc-unordered-containers
+                  ghc-scientific))
+    (native-inputs (list ghc-hspec ghc-hunit hspec-discover))
     (home-page "https://www.yesodweb.com/book/shakespearean-templates")
     (synopsis "Family of type-safe template languages for Haskell")
     (description "This Haskell package provides a family of type-safe
@@ -12214,7 +11552,7 @@ interpolates variables according to the type being inserted.")
 (define-public ghc-shelly
   (package
     (name "ghc-shelly")
-    (version "1.8.1")
+    (version "1.9.0")
     (source
      (origin
        (method url-fetch)
@@ -12223,22 +11561,22 @@ interpolates variables according to the type being inserted.")
              version ".tar.gz"))
        (sha256
         (base32
-         "023fbvbqs5gdwm30j5517gbdcc7fvz0md70dgwgpypkskj3i926y"))))
+         "1kma77gixhyciimh19p64h1ndbcrs9qhk8fgyv71iqh5q57zvday"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-unix-compat" ,ghc-unix-compat)
-       ("ghc-system-filepath-bootstrap" ,ghc-system-filepath-bootstrap)
-       ("ghc-system-fileio-bootstrap" ,ghc-system-fileio-bootstrap)
-       ("ghc-monad-control" ,ghc-monad-control)
-       ("ghc-lifted-base" ,ghc-lifted-base)
-       ("ghc-lifted-async" ,ghc-lifted-async)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-enclosed-exceptions" ,ghc-enclosed-exceptions)
-       ("ghc-async" ,ghc-async)
-       ("ghc-transformers-base" ,ghc-transformers-base)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-hspec-contrib" ,ghc-hspec-contrib)))
+     (list ghc-unix-compat
+           ghc-system-filepath-bootstrap
+           ghc-system-fileio-bootstrap
+           ghc-monad-control
+           ghc-lifted-base
+           ghc-lifted-async
+           ghc-exceptions
+           ghc-enclosed-exceptions
+           ghc-async
+           ghc-transformers-base
+           ghc-hunit
+           ghc-hspec
+           ghc-hspec-contrib))
     (home-page "https://github.com/yesodweb/Shelly.hs")
     (synopsis "Shell-like (systems) programming in Haskell")
     (description
@@ -12262,8 +11600,6 @@ spirit to POSIX shells.  Shelly is originally forked  from the Shellish package.
          "1lgs1gsr5dp0x21diqn4l03fxgai2kgdmj85gqp0iz3zykvbmjbz"))))
     (build-system haskell-build-system)
     (arguments `(#:tests? #f)) ;; circular dependency with nanospec
-    ;; (inputs
-    ;;  `(("ghc-temporary" ,ghc-temporary)))
     (home-page "https://github.com/hspec/silently")
     (synopsis "Prevent writing to stdout")
     (description "This package provides functions to prevent or capture
@@ -12312,13 +11648,9 @@ them.")
          "112j0qfsjazf9wg1zywf7hjybgsiywk9wkm27yi8xzv27hmlv1mn"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-conduit" ,ghc-conduit)
-       ("ghc-conduit-extra" ,ghc-conduit-extra)
-       ("ghc-network" ,ghc-network)
-       ("ghc-resourcet" ,ghc-resourcet)))
+     (list ghc-conduit ghc-conduit-extra ghc-network ghc-resourcet))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-hspec hspec-discover))
     (home-page "https://github.com/kazu-yamamoto/simple-sendfile")
     (synopsis "Cross platform library for the sendfile system call")
     (description "This library tries to call minimum system calls which
@@ -12339,12 +11671,18 @@ are the bottleneck of web servers.")
          "06hmlic0n73ncwlkpx49xlv09bzsrr27ncnp5byhzlknak2gd7vp"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-dictionary-sharing" ,ghc-dictionary-sharing)
-       ("ghc-testing-type-modifiers" ,ghc-testing-type-modifiers)
-       ("ghc-semigroups" ,ghc-semigroups)))
+     (list ghc-dictionary-sharing ghc-testing-type-modifiers
+           ghc-template-haskell))
     (arguments
      `(#:cabal-revision
-       ("1" "0kax1ypjyglkn6iff1x4yz12y7f2n249m95xvdhrc63hsa4xlcqv")))
+       ("1" "0kax1ypjyglkn6iff1x4yz12y7f2n249m95xvdhrc63hsa4xlcqv")
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'update-constraints
+           (lambda _
+             (substitute* "size-based.cabal"
+               (("(template-haskell)\\s+.+$" all dep)
+                (string-append dep "\n"))))))))
     (home-page "https://hackage.haskell.org/package/size-based")
     (synopsis "Sized functors for size-based enumerations")
     (description "This library provides a framework for size-based
@@ -12354,7 +11692,7 @@ enumerations.")
 (define-public ghc-skylighting-core
   (package
     (name "ghc-skylighting-core")
-    (version "0.8.2.1")
+    (version "0.10.5.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://hackage.haskell.org/package/"
@@ -12362,29 +11700,27 @@ enumerations.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0hdchivb4af9w7v5v7lrwfwawd3kcwmpzk69m1vkkm3pis8lcr1s"))))
-    (build-system haskell-build-system)
-    (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-ansi-terminal" ,ghc-ansi-terminal)
-       ("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-base64-bytestring" ,ghc-base64-bytestring)
-       ("ghc-blaze-html" ,ghc-blaze-html)
-       ("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-colour" ,ghc-colour)
-       ("ghc-hxt" ,ghc-hxt)
-       ("ghc-regex-pcre-builtin" ,ghc-regex-pcre-builtin)
-       ("ghc-safe" ,ghc-safe)
-       ("ghc-utf8-string" ,ghc-utf8-string)))
-    (native-inputs
-     `(("ghc-diff" ,ghc-diff)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-pretty-show" ,ghc-pretty-show)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-golden" ,ghc-tasty-golden)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+                "0bskci0gng6nf324wna9ss4xbr1mwjkgk3mlfkr96r1m3wza5g3d"))))
+    (build-system haskell-build-system)
+    (inputs
+     (list ghc-aeson
+           ghc-ansi-terminal
+           ghc-attoparsec
+           ghc-base64-bytestring
+           ghc-blaze-html
+           ghc-case-insensitive
+           ghc-colour
+           ghc-safe
+           ghc-utf8-string
+           ghc-xml-conduit))
+    (native-inputs
+     (list ghc-diff
+           ghc-pretty-show
+           ghc-quickcheck
+           ghc-tasty
+           ghc-tasty-golden
+           ghc-tasty-hunit
+           ghc-tasty-quickcheck))
     (home-page "https://github.com/jgm/skylighting")
     (synopsis "Syntax highlighting library")
     (description "Skylighting is a syntax highlighting library with support
@@ -12398,22 +11734,22 @@ provided.  Skylighting is intended to be the successor to highlighting-kate.")
   (package
     (inherit ghc-skylighting-core)
     (name "ghc-skylighting")
-    (version "0.8.2.1")
+    (version "0.10.5.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://hackage.haskell.org/package/skylighting-"
                                   version "/skylighting-" version ".tar.gz"))
               (sha256
                (base32
-                "1xls8ycad77m55ax4hp55k60h3pi5sm3m32hycbc8baixbgfx5xz"))))
+                "152ywiy7h04xjy0fdl571jwahl6c9350isqbm4p0na4cjd9cczzh"))))
     (inputs
-     `(("ghc-skylighting-core" ,ghc-skylighting-core)
-       ,@(package-inputs ghc-skylighting-core)))))
+     (modify-inputs (package-inputs ghc-skylighting-core)
+       (prepend ghc-skylighting-core)))))
 
 (define-public ghc-smallcheck
   (package
     (name "ghc-smallcheck")
-    (version "1.1.5")
+    (version "1.2.1")
     (source
      (origin
        (method url-fetch)
@@ -12423,10 +11759,10 @@ provided.  Skylighting is intended to be the successor to highlighting-kate.")
              ".tar.gz"))
        (sha256
         (base32
-         "195fj7w3v03d1y1nm2ylavzrwxjcdbq0lb6zsw1dwyx5jmwfc84h"))))
+         "0sf87zjlrgjw7q6a0499g2ywx66zvpv6rg6953fjc18fnl8rs7z4"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-logict" ,ghc-logict)))
+     (list ghc-logict))
     (home-page
      "https://github.com/feuerbach/smallcheck")
     (synopsis "Property-based testing library")
@@ -12448,9 +11784,7 @@ automatically by SmallCheck.")
                 "0wvaxy3dkv97wrncjv1rxrmjr4014hgxz82kixvcwqdhidalfi3k"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-cereal" ,ghc-cereal)
-       ("ghc-basement" ,ghc-basement)
-       ("ghc-network" ,ghc-network)))
+     (list ghc-cereal ghc-basement ghc-network))
     (home-page "https://github.com/vincenthz/hs-socks")
     (synopsis "SOCKS proxy (version 5) implementation")
     (description
@@ -12460,7 +11794,7 @@ automatically by SmallCheck.")
 (define-public ghc-sop-core
   (package
     (name "ghc-sop-core")
-    (version "0.4.0.0")
+    (version "0.5.0.1")
     (source
      (origin
        (method url-fetch)
@@ -12468,7 +11802,7 @@ automatically by SmallCheck.")
                            "sop-core/sop-core-" version ".tar.gz"))
        (sha256
         (base32
-         "07ci2mh8cbjvipb576rxsj3iyhkj5c5dnsns4xkdppp2p3pv10d3"))))
+         "1c4xk4bw1ij4gpgy35iv08bhcxhv1siy55qnvp2xd6wcc3qnghys"))))
     (build-system haskell-build-system)
     (home-page "https://hackage.haskell.org/package/sop-core")
     (synopsis "True Sums of Products")
@@ -12495,9 +11829,7 @@ generics-sop}.")
          "1kkdw2c4d2hha99v9f89ahmifjxp7fxmxyfwq9a8xk6s0h9xs51w"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-scientific" ,ghc-scientific)
-       ("ghc-ieee754" ,ghc-ieee754)
-       ("ghc-nats" ,ghc-nats)))
+     (list ghc-scientific ghc-ieee754 ghc-nats))
     (home-page
      "https://github.com/minad/special-values#readme")
     (synopsis "Typeclass providing special values")
@@ -12509,8 +11841,7 @@ used for example by QuickCheck, see quickcheck-special."  )
 (define-public ghc-split
   (package
     (name "ghc-split")
-    (version "0.2.3.3")
-    (outputs '("out" "static" "doc"))
+    (version "0.2.3.4")
     (source
      (origin
        (method url-fetch)
@@ -12520,13 +11851,13 @@ used for example by QuickCheck, see quickcheck-special."  )
              ".tar.gz"))
        (sha256
         (base32
-         "04qlmkcyklznl03gsjg95b4nzb6i96gdapqg60rny9szgi7ngk8x"))))
+         "0ahzdjcxw5wywr3w4msspia99k6fkckddam1m5506h4z9h8fa7r7"))))
     (build-system haskell-build-system)
     (arguments
      `(#:cabal-revision
-       ("2" "1c8bcssxq5rkxkixgms6w6x6lzf4n7cxk6cx6av1dp3lixdy9j34")))
+       ("1" "06pmlvyrz4rr7rsrghpyrdypprphm9522rvnz4l3i8333n4pb304")))
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-quickcheck))
     (home-page "https://hackage.haskell.org/package/split")
     (synopsis "Combinator library for splitting lists")
     (description "This package provides a collection of Haskell functions for
@@ -12537,7 +11868,7 @@ mainstream languages.")
 (define-public ghc-splitmix
   (package
     (name "ghc-splitmix")
-    (version "0.0.3")
+    (version "0.1.0.3")
     (source
      (origin
        (method url-fetch)
@@ -12545,16 +11876,19 @@ mainstream languages.")
                            "splitmix/splitmix-" version ".tar.gz"))
        (sha256
         (base32
-         "1k0amgkz7rvyz3lnw7m786ilnr1cibwhx9sc4qynq329gxan5r7w"))))
+         "0das5n44dhlcv5i233iakx37d17kidqvhrvp6w9nd7hc015ry026"))))
     (build-system haskell-build-system)
-    (inputs
-     `(("ghc-random" ,ghc-random)))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-async" ,ghc-async)
-       ("ghc-base-compat-batteries" ,ghc-base-compat-batteries)
-       ("ghc-tf-random" ,ghc-tf-random)
-       ("ghc-vector" ,ghc-vector)))
+     (list ghc-async
+           ghc-base-compat-batteries
+           ghc-base-compat
+           ghc-hunit
+           ghc-math-functions
+           ghc-random-bootstrap
+           ghc-test-framework
+           ghc-test-framework-hunit
+           ghc-tf-random
+           ghc-vector))
     (home-page "https://hackage.haskell.org/package/splitmix")
     (synopsis "Fast and splittable pseudorandom number generator")
     (description "This package provides a Pure Haskell implementation of the
@@ -12613,7 +11947,7 @@ Note that this suffers from the
 (define-public ghc-statevar
   (package
     (name "ghc-statevar")
-    (version "1.2")
+    (version "1.2.2")
     (source
      (origin
        (method url-fetch)
@@ -12623,7 +11957,7 @@ Note that this suffers from the
              ".tar.gz"))
        (sha256
         (base32
-         "12sz6zkc9j5z3lwrjvljrkfxa5vhwnir5wsarigz2f6d3w13dh5g"))))
+         "098q4lk60najzpbfal4bg4sh7izxm840aa5h4ycaamjn77d3jjsy"))))
     (build-system haskell-build-system)
     (home-page "https://hackage.haskell.org/package/StateVar")
     (synopsis "State variables for Haskell")
@@ -12634,7 +11968,7 @@ in the @code{IO} monad, like @code{IORef}s or parts of the OpenGL state.")
 (define-public ghc-statistics
   (package
     (name "ghc-statistics")
-    (version "0.15.1.1")
+    (version "0.15.2.0")
     (source
      (origin
        (method url-fetch)
@@ -12643,31 +11977,33 @@ in the @code{IO} monad, like @code{IORef}s or parts of the OpenGL state.")
                            "statistics-" version ".tar.gz"))
        (sha256
         (base32
-         "015rn74f1glii26j4b2fh1fc63xvxzrh2xckiancz48kc8jdzabj"))))
+         "0j9awbg47fzb58k5z2wgkp6a0042j7hqrl1g6lyflrbsfswdp5n4"))))
     (build-system haskell-build-system)
     (arguments
      '(;; Two tests fail: "Discrete CDF is OK" and "Quantile is CDF inverse".
-       #:tests? #f))
-    (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-async" ,ghc-async)
-       ("ghc-base-orphans" ,ghc-base-orphans)
-       ("ghc-dense-linear-algebra" ,ghc-dense-linear-algebra)
-       ("ghc-math-functions" ,ghc-math-functions)
-       ("ghc-monad-par" ,ghc-monad-par)
-       ("ghc-mwc-random" ,ghc-mwc-random)
-       ("ghc-primitive" ,ghc-primitive)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-vector-algorithms" ,ghc-vector-algorithms)
-       ("ghc-vector-th-unbox" ,ghc-vector-th-unbox)
-       ("ghc-vector-binary-instances" ,ghc-vector-binary-instances)))
-    (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-ieee754" ,ghc-ieee754)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)))
+       #:tests? #t))
+    (inputs
+     (list ghc-aeson
+           ghc-async
+           ghc-base-orphans
+           ghc-data-default-class
+           ghc-dense-linear-algebra
+           ghc-math-functions
+           ghc-monad-par
+           ghc-mwc-random
+           ghc-primitive
+           ghc-vector
+           ghc-vector-algorithms
+           ghc-vector-th-unbox
+           ghc-vector-binary-instances))
+    (native-inputs
+     (list ghc-erf
+           ghc-ieee754
+           ghc-quickcheck
+           ghc-tasty-expected-failure
+           ghc-tasty
+           ghc-tasty-hunit
+           ghc-tasty-quickcheck))
     (home-page "https://github.com/bos/mwc-random")
     (synopsis "Haskell library of statistical types, data, and functions")
     (description "This library provides a number of common functions
@@ -12695,7 +12031,7 @@ and regression and autocorrelation analysis.
 (define-public ghc-stm-chans
   (package
     (name "ghc-stm-chans")
-    (version "3.0.0.4")
+    (version "3.0.0.6")
     (source
      (origin
        (method url-fetch)
@@ -12704,7 +12040,7 @@ and regression and autocorrelation analysis.
                            "stm-chans-" version ".tar.gz"))
        (sha256
         (base32
-         "0f27sp09yha43xk9q55sc185jyjs5h7gq2dhsyx6bm9kz9dzqi13"))))
+         "04hafqjq8ngvhcavkfx88a0zky8yc7i18q2n9ajav03kns1kwvpa"))))
     (build-system haskell-build-system)
     (home-page "https://hackage.haskell.org/package/stm-chans")
     (synopsis "Additional types of channels for ghc-stm")
@@ -12727,23 +12063,23 @@ features.")
          "0hhlxvpp7mah8dcvkknh6skx44jfk3092zz2w52zlr255bkmn3p8"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-stm-chans" ,ghc-stm-chans)
-       ("ghc-cereal" ,ghc-cereal)
-       ("ghc-cereal-conduit" ,ghc-cereal-conduit)
-       ("ghc-conduit" ,ghc-conduit)
-       ("ghc-conduit-extra" ,ghc-conduit-extra)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-resourcet" ,ghc-resourcet)
-       ("ghc-async" ,ghc-async)
-       ("ghc-monad-loops" ,ghc-monad-loops)
-       ("ghc-unliftio" ,ghc-unliftio)))
-    (native-inputs
-     `(("ghc-doctest" ,ghc-doctest)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)))
+     (list ghc-stm-chans
+           ghc-cereal
+           ghc-cereal-conduit
+           ghc-conduit
+           ghc-conduit-extra
+           ghc-exceptions
+           ghc-resourcet
+           ghc-async
+           ghc-monad-loops
+           ghc-unliftio))
+    (native-inputs
+     (list ghc-doctest
+           ghc-quickcheck
+           ghc-hunit
+           ghc-test-framework
+           ghc-test-framework-hunit
+           ghc-test-framework-quickcheck2))
     (home-page "https://github.com/cgaebel/stm-conduit")
     (synopsis "Introduces conduits to channels and promotes using conduits concurrently")
     (description
@@ -12754,15 +12090,22 @@ source and a sink.")
 (define-public ghc-stmonadtrans
   (package
     (name "ghc-stmonadtrans")
-    (version "0.4.3")
+    (version "0.4.6")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://hackage.haskell.org/package/STMonadTrans"
                            "/STMonadTrans-" version ".tar.gz"))
        (sha256
-        (base32 "1nr26fnmi5fdjc6d00w13kjhmfyvb5b837d0006w4dj0yxndaksp"))))
+        (base32 "0rvhh0hhwz601ibpzisry7xf3j61r5sxfgp47imaa37i5bvrlynb"))))
     (build-system haskell-build-system)
+    (arguments `(#:tests? #f)) ; TODO: Loops.
+    (inputs (list ghc-fail))
+;    (native-inputs
+;     `(("ghc-tasty" ,ghc-tasty)
+;       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
+;       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
+;       ("ghc-stmonadtrans" ,ghc-stmonadtrans)))
     (home-page "https://hackage.haskell.org/package/STMonadTrans")
     (synopsis "Monad transformer version of the ST monad")
     (description
@@ -12784,7 +12127,7 @@ for strict state threads.")
         (base32 "0fnwbfmd5vsaaqvf9182qdcjrzcfjd1zhdyvjwzifbwvn6r9kx4s"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-base-orphans" ,ghc-base-orphans)))
+     (list ghc-base-orphans))
     (home-page "https://github.com/cartazio/storable-complex")
     (synopsis "Haskell Storable instance for Complex")
     (description "This package provides a Haskell library including a
@@ -12795,7 +12138,7 @@ and Fortran complex data types.")
 (define-public ghc-storable-record
   (package
     (name "ghc-storable-record")
-    (version "0.0.4")
+    (version "0.0.5")
     (source
      (origin
        (method url-fetch)
@@ -12805,13 +12148,10 @@ and Fortran complex data types.")
          "storable-record-" version ".tar.gz"))
        (sha256
         (base32
-         "0hjs1km0fc9ch0i1rbycxia5w3939hk4p4md73ikgg4aipqb5zyf"))))
+         "17nf0bx3g169cpslf8prr5h5lvxl389m23rbsyb3kdai45fibpwf"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-utility-ht" ,ghc-utility-ht)
-       ("ghc-storablevector" ,ghc-storablevector)
-       ("ghc-timeit" ,ghc-timeit)))
+     (list ghc-semigroups ghc-utility-ht ghc-storablevector ghc-timeit))
     (home-page "https://hackage.haskell.org/package/storable-record")
     (synopsis "Elegant definition of Storable instances for records")
     (description "With this package you can build a Storable instance of
@@ -12840,9 +12180,7 @@ alignment of the record elements.")
          "0dfzhxgkn1l6ls7zh6iifhyvhm8l47n40z0ar23c6ibsa94w1ynw"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-storable-record" ,ghc-storable-record)
-       ("ghc-utility-ht" ,ghc-utility-ht)
-       ("ghc-base-orphans" ,ghc-base-orphans)))
+     (list ghc-storable-record ghc-utility-ht ghc-base-orphans))
     (home-page "https://hackage.haskell.org/package/storable-tuple")
     (synopsis "Storable instance for pairs and triples")
     (description "This package provides a Storable instance for pairs
@@ -12855,7 +12193,7 @@ together.")
 (define-public ghc-storablevector
   (package
     (name "ghc-storablevector")
-    (version "0.2.13")
+    (version "0.2.13.1")
     (source
      (origin
        (method url-fetch)
@@ -12865,15 +12203,15 @@ together.")
          version ".tar.gz"))
        (sha256
         (base32
-         "1zmr738vwnhnyxbikayqnaz31ilv2qlmscp6iqgl7adcfbal4dzq"))))
+         "06fgxbnc5vwmiv7dxywj7ncjhmxv0wjs0bys5hza6mrwn3sw5r2w"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-non-negative" ,ghc-non-negative)
-       ("ghc-utility-ht" ,ghc-utility-ht)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-unsafe" ,ghc-unsafe)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-syb" ,ghc-syb)))
+     (list ghc-non-negative
+           ghc-utility-ht
+           ghc-semigroups
+           ghc-unsafe
+           ghc-quickcheck
+           ghc-syb))
     (home-page "https://wiki.haskell.org/Storable_Vector")
     (synopsis "Fast, packed, strict storable arrays with a list interface")
     (description "This library provides fast, packed, strict storable
@@ -12905,15 +12243,9 @@ a library that provides fusion with lazy lists.")
          "1lmyx3wkjsayhy5yilzvy0kf8qwmycwlk26r1d8f3cxbfhkr7s52"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-async" ,ghc-async)
-       ("ghc-blaze-builder" ,ghc-blaze-builder)
-       ("ghc-network" ,ghc-network)
-       ("ghc-random" ,ghc-random)
-       ("ghc-zlib" ,ghc-zlib)))
+     (list ghc-async ghc-blaze-builder ghc-network ghc-random ghc-zlib))
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-quickcheck ghc-hspec hspec-discover))
     (home-page "https://hackage.haskell.org/package/streaming-commons")
     (synopsis "Conduit and pipes needed by some streaming data libraries")
     (description "This package provides low-dependency functionality commonly
@@ -12924,15 +12256,17 @@ needed by various Haskell streaming data libraries, such as @code{conduit} and
 (define-public ghc-strict
   (package
     (name "ghc-strict")
-    (version "0.3.2")
+    (version "0.4.0.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://hackage.haskell.org/package/strict/strict-"
                            version ".tar.gz"))
        (sha256
-        (base32 "08cjajqz9h47fkq98mlf3rc8n5ghbmnmgn8pfsl3bdldjdkmmlrc"))))
+        (base32 "0hb24a09c3agsq7sdv8r2b2jc2f4g1blg2xvj4cfadynib0apxnz"))))
     (build-system haskell-build-system)
+    (inputs
+     (list ghc-hashable ghc-these ghc-assoc))
     (home-page "https://hackage.haskell.org/package/strict")
     (synopsis "Strict data types and String IO")
     (description
@@ -12980,7 +12314,7 @@ literals.")
          "0wfxkw4x6j6jq9nd82k83g2k3hskpsvk1dp4cpkshvjr4wg9qny8"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)))
+     (list ghc-hunit))
     (home-page "https://hackage.haskell.org/package/string-qq")
     (synopsis
      "QuasiQuoter for non-interpolated strings, texts and bytestrings.")
@@ -13029,12 +12363,10 @@ occurrences of a substring (the first in case of overlaps) with another.")
          "1k420f497lzkymmxin88ql6ib8dziic43avykv31yq65rgrf7l2g"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-blaze-builder" ,ghc-blaze-builder)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)))
+     (list ghc-blaze-builder ghc-hashable ghc-unordered-containers))
     (arguments
      `(#:cabal-revision
-       ("1" "1bhp9gvid2iis411k1vvyj5krzc4ahxcqcd9cwx9h37jxg180xw1")))
+       ("3" "1zc7shja5i63rn7kd9mnq2m052qhp7nh44qy8qp93dm64v9m9pi2")))
     (home-page "https://github.com/diagrams/svg-builder.git")
     (synopsis "Domain-specific language for building Scalable Vector Graphics")
     (description "Easy-to-write domain-specific language (DSL) for
@@ -13044,7 +12376,7 @@ building Scalable Vector Graphics (SVG).")
 (define-public ghc-syb
   (package
     (name "ghc-syb")
-    (version "0.7.1")
+    (version "0.7.2.1")
     (outputs '("out" "static" "doc"))
     (source
      (origin
@@ -13055,10 +12387,10 @@ building Scalable Vector Graphics (SVG).")
              ".tar.gz"))
        (sha256
         (base32
-         "0077vxzyi9ppbphi2ialac3p376k49qly1kskdgf57wdwix9qjp0"))))
+         "15ld5929n3lzfb5sy9nnm77x2l6i2sgsxw47jdrqcrz6fxpwc1qq"))))
     (build-system haskell-build-system)
-    (inputs
-     `(("ghc-hunit" ,ghc-hunit)))
+    (native-inputs
+     (list ghc-tasty ghc-tasty-hunit))
     (home-page
      "http://www.cs.uu.nl/wiki/GenericProgramming/SYB")
     (synopsis "Scrap Your Boilerplate")
@@ -13093,9 +12425,7 @@ variety of traversals.")
                (("chell >= 0\\.4 && < 0\\.5") "chell >= 0.4"))
              #t)))))
     (inputs
-     `(("ghc-system-filepath" ,ghc-system-filepath)
-       ("ghc-chell" ,ghc-chell)
-       ("ghc-temporary" ,ghc-temporary)))
+     (list ghc-system-filepath ghc-chell ghc-temporary))
     (home-page "https://github.com/fpco/haskell-filesystem")
     (synopsis "Consistent file system interaction across GHC versions")
     (description
@@ -13137,7 +12467,6 @@ In particular, this library supports working with POSIX files that have paths
 which can't be decoded in the current locale encoding.")
     (license license:expat)))
 
-
 (define-public ghc-system-filepath
   (package
     (name "ghc-system-filepath")
@@ -13152,16 +12481,12 @@ which can't be decoded in the current locale encoding.")
         (base32
          "14yras4pz2dh55xpwmazcgxijvi8913pjgzb9iw50mjq1lycwmhn"))))
     (build-system haskell-build-system)
-    ;; FIXME: One of the tests fails:
-    ;; [ FAIL  ] tests.validity.posix
-    ;; note: seed=7310214548328823169
-    ;; *** Failed! Falsifiable (after 24 tests):
-    ;; FilePath "/r2\ENQ52\t ;$/o\US=/okG\146\&6\n<u\DC3/5\182\223a\DELN\EOT#\NUL/`[m/\USEKV\ETX([)b6/\ACK\SOo\245\ETBO/f\128\STX`|\EM\"/*\EMA\USD3/\143\&4/\CAN?\SUBee\CANR/9/B0\187Kx4/Vqr\232'b:/\a\234\DLE.\"\179/\ENQ{J/|/G)@^\237/\219ml/\DC3pd\ESC"
-    (arguments `(#:tests? #f))
-    (inputs
-     `(("ghc-chell" ,ghc-chell)
-       ("ghc-chell-quickcheck" ,ghc-chell-quickcheck)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+    (arguments
+     `(#:tests? #f ; TODO: Needs chell ==0.4.*
+       #:cabal-revision
+       ("1" "18llfvisghrn9w9yfgacqn51gs50a0lngah3bmg852h0swj7vkp8")))
+    (native-inputs
+     (list ghc-chell ghc-chell-quickcheck ghc-quickcheck))
     (home-page "https://github.com/fpco/haskell-filesystem")
     (synopsis "High-level, byte-based file and directory path manipulations")
     (description
@@ -13203,7 +12528,7 @@ increasing type safety.")
 (define-public ghc-tabular
   (package
     (name "ghc-tabular")
-    (version "0.2.2.7")
+    (version "0.2.2.8")
     (source
      (origin
        (method url-fetch)
@@ -13213,11 +12538,10 @@ increasing type safety.")
              ".tar.gz"))
        (sha256
         (base32
-         "1ysgq7rrks7f98nnvxil8xz1q27hxdgz4szbjhqwzbwd209dmy0k"))))
+         "0z936gh8n8i8qdkagyxwd9gqq13skd5fv013vdvwsibrxkm0czfb"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-csv" ,ghc-csv)
-       ("ghc-html" ,ghc-html)))
+     (list ghc-csv ghc-html))
     (home-page "https://github.com/bgamari/tabular")
     (synopsis "Two-dimensional data tables with rendering functions")
     (description
@@ -13247,7 +12571,7 @@ B 3 ||       meh |   well... ||  worst ever |          ok
 (define-public ghc-tagged
   (package
     (name "ghc-tagged")
-    (version "0.8.6")
+    (version "0.8.6.1")
     (source
      (origin
        (method url-fetch)
@@ -13257,13 +12581,13 @@ B 3 ||       meh |   well... ||  worst ever |          ok
              ".tar.gz"))
        (sha256
         (base32
-         "1pciqzxf9ncv954v4r527xkxkn7r5hcr13mfw5dg1xjci3qdw5md"))))
+         "00kcc6lmj7v3xm2r3wzw5jja27m4alcw1wi8yiismd0bbzwzrq7m"))))
     (build-system haskell-build-system)
     (arguments
      `(#:cabal-revision
-       ("1" "070xwfw7y81hd63il76dmwbdl9ca1rd07c54zynfx6vpr4wyx4vh")))
+       ("2" "0qi63c3z40i9qm44r571yjzcpb8d473vj2km4kq0fij0ljc7vii9")))
     (inputs
-     `(("ghc-transformers-compat" ,ghc-transformers-compat)))
+     (list ghc-transformers-compat))
     (home-page "https://hackage.haskell.org/package/tagged")
     (synopsis "Haskell phantom types to avoid passing dummy arguments")
     (description "This library provides phantom types for Haskell 98, to avoid
@@ -13284,13 +12608,12 @@ having to unsafely pass dummy arguments.")
         (base32
          "1ppim7cgmn7ng8zbdrwkxhhizc30h15h1c9cdlzamc5jcagl915k"))))
     (build-system haskell-build-system)
-    ;; FIXME: 2/24 tests fail.
-    (arguments `(#:tests? #f))
+    (arguments
+     `(#:cabal-revision
+       ("4" "03a33nj9k62f318qgmp5pgk7i99c8cyqy5f7m7p0bwc5ni39ysfq")))
     (inputs
-     `(("ghc-bytestring-handle" ,ghc-bytestring-handle)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+     (list ghc-bytestring-handle ghc-quickcheck ghc-tasty
+           ghc-tasty-quickcheck))
     (home-page "https://hackage.haskell.org/package/tar")
     (synopsis "Reading, writing and manipulating \".tar\" archive files")
     (description
@@ -13317,15 +12640,10 @@ an index.")
          "0bgn3hyf20g1gfnzy8f41s7nj54kfcyjk2izw99svrw8f3dphi80"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-conduit" ,ghc-conduit)
-       ("ghc-conduit-combinators" ,ghc-conduit-combinators)
-       ("ghc-safe-exceptions" ,ghc-safe-exceptions)))
+     (list ghc-conduit ghc-conduit-combinators ghc-safe-exceptions))
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-conduit-extra" ,ghc-conduit-extra)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-weigh" ,ghc-weigh)))
+     (list ghc-quickcheck ghc-conduit-extra ghc-hspec ghc-hspec
+           ghc-weigh))
     (home-page "https://github.com/snoyberg/tar-conduit#readme")
     (synopsis "Extract and create tar files using conduit for streaming")
     (description "This library provides a conduit-based, streaming
@@ -13348,12 +12666,9 @@ interface for extracting and creating tar files.")
          "144qhwfwg37l3k313raf4ssiz16jbgwlm1nf4flgqpsbd69jji4c"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-random" ,ghc-random)))
+     (list ghc-exceptions ghc-random))
     (native-inputs
-     `(("ghc-base-compat" ,ghc-base-compat)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+     (list ghc-base-compat ghc-tasty ghc-tasty-hunit))
     (home-page "https://www.github.com/batterseapower/temporary")
     (synopsis "Temporary file and directory support")
     (description "The functions for creating temporary files and directories
@@ -13378,7 +12693,7 @@ installed.")
         (base32
          "1nqih0qks439k3pr5kmbbc8rjdw730slrxlflqb27fbxbzb8skqs"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-exceptions" ,ghc-exceptions)))
+    (inputs (list ghc-exceptions))
     (home-page
      "https://www.github.com/feuerbach/temporary")
     (synopsis
@@ -13414,23 +12729,19 @@ dependency.")
 (define-public ghc-texmath
   (package
     (name "ghc-texmath")
-    (version "0.11.3")
+    (version "0.12.3.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://hackage.haskell.org/package/"
                                   "texmath/texmath-" version ".tar.gz"))
               (sha256
                (base32
-                "03rpxbp43bjs62mmw4hv4785n6f6nbf8kj2y9mma5nzk6i2xs09f"))))
+                "1d9r3na7hmkgr0j63fs50ssll506l1wyqhw0dpap7jk0rdz8pv6n"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-syb" ,ghc-syb)
-       ("ghc-network-uri" ,ghc-network-uri)
-       ("ghc-split" ,ghc-split)
-       ("ghc-temporary" ,ghc-temporary)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("ghc-xml" ,ghc-xml)
-       ("ghc-pandoc-types" ,ghc-pandoc-types)))
+     (list ghc-syb ghc-network-uri ghc-split ghc-xml ghc-pandoc-types))
+    (native-inputs
+     (list ghc-temporary ghc-utf8-string))
     (home-page "https://github.com/jgm/texmath")
     (synopsis "Conversion between formats used to represent mathematics")
     (description
@@ -13467,7 +12778,7 @@ text package.")
 (define-public ghc-text-manipulate
   (package
     (name "ghc-text-manipulate")
-    (version "0.2.0.1")
+    (version "0.3.0.0")
     (source
      (origin
        (method url-fetch)
@@ -13478,11 +12789,10 @@ text package.")
              ".tar.gz"))
        (sha256
         (base32
-         "0bwxyjj3ll45srxhsp2ihikgqglvjc6m02ixr8xpvyqwkcfwgsg0"))))
+         "0pmzp38m3r0k6ps97b1wqplxlgvvlaid09x53jl3gxng0fwq910a"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+     (list ghc-tasty ghc-tasty-hunit))
     (home-page
      "https://github.com/brendanhay/text-manipulate")
     (synopsis
@@ -13505,7 +12815,7 @@ upgraded.  Consider yourself warned!")
 (define-public ghc-text-metrics
   (package
     (name "ghc-text-metrics")
-    (version "0.3.0")
+    (version "0.3.1")
     (source
      (origin
        (method url-fetch)
@@ -13513,13 +12823,12 @@ upgraded.  Consider yourself warned!")
                            "text-metrics/text-metrics-" version ".tar.gz"))
        (sha256
         (base32
-         "18mzxwkdvjp31r720ai9bnxr638qq8x3a2v408bz0d8f0rsayx1q"))))
+         "17bp1lnbkqr5ykrcd6v5sqv0fhljck7hky8zrrpw7rlkb1f3sdc2"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-vector" ,ghc-vector)))
+     (list ghc-vector))
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-hspec" ,ghc-hspec)))
+     (list ghc-quickcheck ghc-hspec))
     (arguments
      `(#:cabal-revision
        ("4" "017drxq9x56b345d8w5m8xdsi1zzs0z16pbdx8j35cd1lsnh3kf1")))
@@ -13545,8 +12854,7 @@ string metrics efficiently.")
         (base32 "0445r2nns6009fmq0xbfpyv7jpzwv0snccjdg7hwj4xk4z0cwc1f"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-primitive" ,ghc-primitive)
-       ("ghc-random" ,ghc-random)))
+     (list ghc-primitive ghc-random))
     (home-page "https://hackage.haskell.org/package/tf-random")
     (synopsis "High-quality splittable pseudorandom number generator")
     (description "This package contains an implementation of a high-quality
@@ -13559,7 +12867,7 @@ Hashing\" by Claessen, Pałka for details and the rationale of the design.")
 (define-public ghc-th-abstraction
   (package
     (name "ghc-th-abstraction")
-    (version "0.3.1.0")
+    (version "0.4.3.0")
     (source
      (origin
        (method url-fetch)
@@ -13568,7 +12876,7 @@ Hashing\" by Claessen, Pałka for details and the rationale of the design.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "1f81w0gshvc816cf9qz0f19jsrzh6wpzmmy317xrgn63dv61p7jb"))))
+         "01nyscmjriga4fh4362b4zjad48hdv33asjkd28sj8hx3pii7fy8"))))
     (build-system haskell-build-system)
     (home-page "https://github.com/glguy/th-abstraction")
     (synopsis "Nicer interface for reified information about data types")
@@ -13582,7 +12890,7 @@ Template Haskell.")
 (define-public ghc-th-expand-syns
   (package
     (name "ghc-th-expand-syns")
-    (version "0.4.5.0")
+    (version "0.4.8.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://hackage.haskell.org/package/"
@@ -13590,10 +12898,13 @@ Template Haskell.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "1p4wfyycan8zsp9wi7npx36qwbfsbcgdyxi3ii51scf69dkrx42y"))))
+                "1mw0yxfbmicv0irfrcz4s6pn39za7yjd7zz09ialwym1b46624si"))))
     (build-system haskell-build-system)
+    (arguments
+     `(#:cabal-revision
+       ("1" "0l30cmwm20lgjpvr3a5yxj6429s1hqahjsij8z2ap88754phd41l")))
     (inputs
-     `(("ghc-syb" ,ghc-syb)))
+     (list ghc-syb ghc-th-abstraction))
     (home-page "https://hackage.haskell.org/package/th-expand-syns")
     (synopsis "Expands type synonyms in Template Haskell ASTs")
     (description
@@ -13604,17 +12915,17 @@ Template Haskell.")
 (define-public ghc-th-lift
   (package
     (name "ghc-th-lift")
-    (version "0.8.0.1")
+    (version "0.8.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://hackage.haskell.org/package/"
                                   "th-lift/th-lift-" version ".tar.gz"))
               (sha256
                (base32
-                "1a6qlbdg15cfr5rvl9g3blgwx4v1p0xic0pzv13zx165xbc36ld0"))))
+                "1r2wrnrn6qwy6ysyfnlqn6xbfckw0b22h8n00pk67bhhg81jfn9s"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-th-abstraction" ,ghc-th-abstraction)))
+     (list ghc-th-abstraction))
     (home-page "https://github.com/mboes/th-lift")
     (synopsis "Derive Template Haskell's Lift class for datatypes")
     (description
@@ -13625,7 +12936,7 @@ datatypes.")
 (define-public ghc-th-lift-instances
   (package
     (name "ghc-th-lift-instances")
-    (version "0.1.14")
+    (version "0.1.18")
     (source
      (origin
        (method url-fetch)
@@ -13634,14 +12945,12 @@ datatypes.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "0r1b4jnvcj64wp4hfccwkl4a70n1p1q7qzyx6ax7cmd8k961jz78"))))
+         "09nv1zsffvv6zfz1fjzcqrla3lc350qr4i4xf7wgvzp049sprrdy"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-th-lift" ,ghc-th-lift)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-th-lift ghc-vector ghc-quickcheck))
     (home-page "https://github.com/bennofs/th-lift-instances/")
-    (synopsis "Lift instances for template-haskell for common data types.")
+    (synopsis "Lift instances for template-haskell for common data types")
     (description "Most data types in the Haskell platform do not have Lift
 instances.  This package provides orphan instances for @code{containers},
 @code{text}, @code{bytestring} and @code{vector}.")
@@ -13650,22 +12959,27 @@ instances.  This package provides orphan instances for @code{containers},
 (define-public ghc-th-orphans
   (package
     (name "ghc-th-orphans")
-    (version "0.13.9")
+    (version "0.13.12")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://hackage.haskell.org/package/"
                                   "th-orphans/th-orphans-" version ".tar.gz"))
               (sha256
                (base32
-                "1xj1gssv77hdx1r3ndg8k49v3ipj3a6r7crkyvx13jrps3m6ng1z"))))
+                "03n6qxnpxhbzyzbyrjq77d1y62dwgx39mmxfwmnc04l8pawgrxxz"))))
     (build-system haskell-build-system)
+    (arguments
+     `(#:cabal-revision
+       ("1" "0vfz9dl5g9xwp2zmwqc5gngyvjaqj3i0s97vbcslafcqhdqw3qaj")))
     (inputs
-     `(("ghc-th-lift" ,ghc-th-lift)
-       ("ghc-th-lift-instances" ,ghc-th-lift-instances)
-       ("ghc-th-reify-many" ,ghc-th-reify-many)
-       ("ghc-generic-deriving" ,ghc-generic-deriving)))
+     (list ghc-th-lift
+           ghc-th-lift-instances
+           ghc-th-reify-many
+           ghc-th-compat
+           ghc-th-expand-syns
+           ghc-generic-deriving))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)))
+     (list ghc-hspec))
     (home-page "https://hackage.haskell.org/package/th-orphans")
     (synopsis "Orphan instances for TH datatypes")
     (description
@@ -13678,7 +12992,7 @@ package, and that's where the version number started.")
 (define-public ghc-these
   (package
     (name "ghc-these")
-    (version "1.0.1")
+    (version "1.1.1.1")
     (source
      (origin
        (method url-fetch)
@@ -13688,20 +13002,13 @@ package, and that's where the version number started.")
              ".tar.gz"))
        (sha256
         (base32
-         "1k0pi65g7cm9hzdw6my6bzz2zvddkmj1qs45ymqmi316bpiixk3r"))))
+         "027m1gd7i6jf2ppfkld9qrv3xnxg276587pmx10z9phpdvswk66p"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-base-compat" ,ghc-base-compat)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-aeson" ,ghc-aeson)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-assoc" ,ghc-assoc)
-       ("ghc-semigroupoids" ,ghc-semigroupoids)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-hashable ghc-assoc))
     (arguments
      `(#:cabal-revision
-       ("1"
-        "0923r86fnmgpx0msm68aszirh2n19nn5bccgjxfh2146jw4z7w3z")))
+       ("2" "16x3am622jn97j1d9879x7j5zbjn33bkfaa0dq0xyp1fbc0s7h5x")))
     (home-page
      "https://github.com/isomorphism/these")
     (synopsis "Either-or-both data type")
@@ -13746,10 +13053,8 @@ variant of @code{These}.
          "0bjnjhnq3km6xqk0fn1fgyz5xdw4h6lylbwwbcmkkfzwcz0c76hk"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-concurrent-extra" ,ghc-concurrent-extra)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)))
+     (list ghc-concurrent-extra ghc-hunit ghc-test-framework
+           ghc-test-framework-hunit))
     (home-page "https://github.com/basvandijk/threads")
     (synopsis "Fork threads and wait for their result")
     (description "This package provides functions to fork threads and
@@ -13772,7 +13077,7 @@ package is similar to the @code{threadmanager}, @code{async} and
 (define-public ghc-th-reify-many
   (package
     (name "ghc-th-reify-many")
-    (version "0.1.9")
+    (version "0.1.10")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://hackage.haskell.org/package/"
@@ -13780,11 +13085,10 @@ package is similar to the @code{threadmanager}, @code{async} and
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0hxf56filzqnyrc8q7766vai80y6cgrrbrczx6n93caskl1dv2gq"))))
+                "19g4gc1q3zxbylmvrgk3dqjzychq2k02i7fwvs3vhbrg4ihhw9cx"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-safe" ,ghc-safe)
-       ("ghc-th-expand-syns" ,ghc-th-expand-syns)))
+     (list ghc-safe ghc-th-expand-syns))
     (home-page "https://github.com/mgsloan/th-reify-many")
     (synopsis "Recurseively reify template haskell datatype info")
     (description
@@ -13797,7 +13101,7 @@ function which generates instances.")
 (define-public ghc-time-compat
   (package
     (name "ghc-time-compat")
-    (version "1.9.2.2")
+    (version "1.9.5")
     (source
      (origin
        (method url-fetch)
@@ -13805,21 +13109,21 @@ function which generates instances.")
                            "time-compat/time-compat-" version ".tar.gz"))
        (sha256
         (base32
-         "05va0rqs759vbridbcl6hksp967j9anjvys8vx72fnfkhlrn2s52"))))
+         "19p3056i6kh8lgcdsnwsh8pj80xyi23kmw9n7hmdacczs5kv49ii"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-base-orphans" ,ghc-base-orphans)))
+     (list ghc-base-orphans))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-base-compat" ,ghc-base-compat)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+     (list ghc-hunit
+           ghc-base-compat
+           ghc-quickcheck
+           ghc-tagged
+           ghc-tasty
+           ghc-tasty-hunit
+           ghc-tasty-quickcheck))
     (arguments
      `(#:cabal-revision
-       ("1" "0k8ph4sydaiqp8dav4if6hpiaq8h1xsr93khmdr7a1mmfwdxr64r")))
+       ("1" "1f6r8cyfgzpfg9nrsqbf99pi44fyds9wcmgwxb4s0zmlb5dbv1m5")))
     (home-page "https://github.com/phadej/time-compat")
     (synopsis "Compatibility package for time")
     (description "This package tries to compat as many @code{time}
@@ -13840,7 +13144,7 @@ features as possible.")
         (base32
          "0b2hmj8wwrfkndwzgm11qr496ca2ahwdxcj3m0ii91bxvrk1bzq7"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-old-locale" ,ghc-old-locale)))
+    (inputs (list ghc-old-locale))
     (home-page "https://github.com/khibino/haskell-time-locale-compat")
     (synopsis "Compatibility of TimeLocale between old-locale and time-1.5")
     (description "This package contains a wrapped name module for
@@ -13861,7 +13165,7 @@ features as possible.")
          "1nzwj0fxz370ks6vr1sylcidx33rnqq45y3q9yv9n4dj43nid9lh"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-auto-update" ,ghc-auto-update)))
+     (list ghc-auto-update))
     (home-page "https://github.com/yesodweb/wai")
     (synopsis "Scalable timer")
     (description "This library contains scalable timer functions provided by a
@@ -13915,21 +13219,20 @@ create timezone series, see the ghc-timezone-olson package.")
 (define-public ghc-timezone-olson
   (package
    (name "ghc-timezone-olson")
-   (version "0.1.9")
+   (version "0.2.0")
    (source
     (origin
      (method url-fetch)
      (uri
       (string-append
-       "mirror://hackage/package/timezone-olson/timezone-olson-"
+       "https://hackage.haskell.org/package/timezone-olson/timezone-olson-"
        version ".tar.gz"))
      (sha256
       (base32
-       "05abywx1nrcaz0nqzfy4zw62bc5qd7pdfnjvv4drxkwv084ha8rj"))))
+       "0b9vh27b9nz803yhd93d5z63bs370lvn4vkdajxaak9clxlw6mwg"))))
    (build-system haskell-build-system)
    (inputs
-    `(("ghc-timezone-series" ,ghc-timezone-series)
-      ("ghc-extensible-exceptions" ,ghc-extensible-exceptions)))
+    (list ghc-timezone-series ghc-extensible-exceptions))
    (home-page "https://archives.haskell.org/projects.haskell.org/time-ng/")
    (synopsis "Parser and renderer for binary Olson timezone files")
    (description
@@ -13944,7 +13247,7 @@ objects from the timezone-series package.")
 (define-public ghc-tldr
   (package
     (name "ghc-tldr")
-    (version "0.4.0.2")
+    (version "0.9.2")
     (source
      (origin
        (method url-fetch)
@@ -13954,16 +13257,18 @@ objects from the timezone-series package.")
              ".tar.gz"))
        (sha256
         (base32
-         "1zy9yyg7bxiyz1prkvrscggsb9p0f8y0nqxxxzlgzvnh2nmqf8f2"))))
+         "1yypb9zhsj9ks7bbw2sayqv3rn9y8z3w5p1xmsnwb4w99dqmvcx5"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-cmark" ,ghc-cmark)
-       ("ghc-optparse-applicative" ,ghc-optparse-applicative)
-       ("ghc-typed-process" ,ghc-typed-process)
-       ("ghc-semigroups" ,ghc-semigroups)))
+     (list ghc-ansi-terminal
+           ghc-attoparsec
+           ghc-cmark
+           ghc-http-conduit
+           ghc-optparse-applicative
+           ghc-semigroups
+           ghc-zip-archive))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-golden" ,ghc-tasty-golden)))
+     (list ghc-tasty ghc-tasty-golden))
     (home-page "https://github.com/psibi/tldr-hs#readme")
     (synopsis "Haskell tldr client")
     (description "This package provides the @command{tldr} command and a
@@ -13986,8 +13291,7 @@ man pages with practical examples.")
         (base32 "0m7s0q7f8c7glxzqhf2j86ch5xhk6jnzwwsa4mkywag22119c290"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-bencode" ,ghc-bencode)
-       ("ghc-syb" ,ghc-syb)))
+     (list ghc-bencode ghc-syb))
     (home-page "https://hackage.haskell.org/package/torrent")
     (synopsis "BitTorrent file parser and generator")
     (description "This library provides support for parsing and generating
@@ -14036,7 +13340,7 @@ other transformers.")
 (define-public ghc-transformers-base
   (package
     (name "ghc-transformers-base")
-    (version "0.4.5.2")
+    (version "0.4.6")
     (source
      (origin
        (method url-fetch)
@@ -14046,10 +13350,10 @@ other transformers.")
              ".tar.gz"))
        (sha256
         (base32
-         "1s256bi0yh0x2hp2gwd30f3mg1cv53zz397dv1yhfsnfzmihrj6h"))))
+         "146g69yxmlrmvqnzwcw4frxfl3z04lda9zqwcqib34dnkrlghfrj"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-transformers-compat" ,ghc-transformers-compat)))
+     (list ghc-transformers-compat))
     (home-page
      "https://hackage.haskell.org/package/transformers-compat")
     (synopsis
@@ -14063,7 +13367,7 @@ compatibility to run on old versions of the platform.")
 (define-public ghc-transformers-compat
   (package
     (name "ghc-transformers-compat")
-    (version "0.6.5")
+    (version "0.6.6")
     (source
      (origin
        (method url-fetch)
@@ -14072,7 +13376,7 @@ compatibility to run on old versions of the platform.")
              "/transformers-compat-" version ".tar.gz"))
        (sha256
         (base32
-         "02v2fjbvcrlpvhcsssap8dy8y9pp95jykrlc5arm39sxa48wyrys"))))
+         "1yd936az31g9995frc84g05rrb5b7w59ajssc5183lp6wm8h4bky"))))
     (build-system haskell-build-system)
     (home-page "https://github.com/ekmett/transformers-compat/")
     (synopsis "Small compatibility shim between transformers 0.3 and 0.4")
@@ -14085,7 +13389,7 @@ but also need those types.")
 (define-public ghc-tree-diff
   (package
     (name "ghc-tree-diff")
-    (version "0.1")
+    (version "0.2.1")
     (source
      (origin
        (method url-fetch)
@@ -14095,31 +13399,31 @@ but also need those types.")
              ".tar.gz"))
        (sha256
         (base32
-         "1156nbqn0pn9lp4zjsy4vv5g5wmy4zxwmbqdgvq349rydynh3ng3"))))
+         "0bybi4qp7nj9117yza5qqgw2f7s6rk3i7q642jqd7sdn3bx5cnap"))))
     (build-system haskell-build-system)
-    (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-ansi-wl-pprint" ,ghc-ansi-wl-pprint)
-       ("ghc-ansi-terminal" ,ghc-ansi-terminal)
-       ("ghc-base-compat" ,ghc-base-compat)
-       ("ghc-bytestring-builder" ,ghc-bytestring-builder)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-parsers" ,ghc-parsers)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-uuid-types" ,ghc-uuid-types)
-       ("ghc-vector" ,ghc-vector)))
-    (native-inputs
-     `(("ghc-base-compat" ,ghc-base-compat)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-ansi-terminal" ,ghc-ansi-terminal)
-       ("ghc-ansi-wl-pprint" ,ghc-ansi-wl-pprint)
-       ("ghc-trifecta" ,ghc-trifecta)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-golden" ,ghc-tasty-golden)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+    (arguments
+     `(#:cabal-revision
+       ("1" "0brlnq5ddmambidll1dn4jnjac2i44a9hd5hwp2p0rbh1s8jfyhm")))
+    (inputs
+     (list ghc-aeson
+           ghc-ansi-terminal
+           ghc-ansi-wl-pprint
+           ghc-base-compat
+           ghc-bytestring-builder
+           ghc-hashable
+           ghc-parsers
+           ghc-primitive
+           ghc-quickcheck
+           ghc-scientific
+           ghc-semialign
+           ghc-strict
+           ghc-tagged
+           ghc-these
+           ghc-unordered-containers
+           ghc-uuid-types
+           ghc-vector))
+    (native-inputs
+     (list ghc-trifecta ghc-tasty ghc-tasty-golden ghc-tasty-quickcheck))
     (home-page "https://github.com/phadej/tree-diff")
     (synopsis "Compute difference between (expression) trees")
     (description "This Haskell library provides a function for computing
@@ -14131,7 +13435,7 @@ compute the difference between arbitrary abstract datatypes (ADTs) using
 (define-public ghc-trifecta
   (package
     (name "ghc-trifecta")
-    (version "2")
+    (version "2.1.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -14139,33 +13443,28 @@ compute the difference between arbitrary abstract datatypes (ADTs) using
                     "trifecta-" version ".tar.gz"))
               (sha256
                (base32
-                "0hznd8i65s81xy13i2qc7cvipw3lfb2yhkv53apbdsh6sbljz5sk"))))
-    (build-system haskell-build-system)
-    (arguments
-     `(#:tests? #f ; doctest suite fails to build on i686
-       #:cabal-revision
-       ("4" "0xbwyvwl6f2zylk60f2akwgq03qv49113xil7b1z1s3vlwbn5aj1")))
-    (inputs
-     `(("ghc-reducers" ,ghc-reducers)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-ansi-wl-pprint" ,ghc-ansi-wl-pprint)
-       ("ghc-ansi-terminal" ,ghc-ansi-terminal)
-       ("ghc-blaze-builder" ,ghc-blaze-builder)
-       ("ghc-blaze-html" ,ghc-blaze-html)
-       ("ghc-blaze-markup" ,ghc-blaze-markup)
-       ("ghc-charset" ,ghc-charset)
-       ("ghc-comonad" ,ghc-comonad)
-       ("ghc-fingertree" ,ghc-fingertree)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-lens" ,ghc-lens)
-       ("ghc-parsers" ,ghc-parsers)
-       ("ghc-profunctors" ,ghc-profunctors)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-utf8-string" ,ghc-utf8-string)))
-    (native-inputs
-     `(("cabal-doctest" ,cabal-doctest)
-       ("ghc-doctest" ,ghc-doctest)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+                "1lhzi0xxvilvgjy3yf3f85wfmrks562hhsnl0kg1xwji36rgwp6y"))))
+    (build-system haskell-build-system)
+    (inputs
+     (list ghc-ansi-terminal
+           ghc-blaze-builder
+           ghc-blaze-html
+           ghc-blaze-markup
+           ghc-charset
+           ghc-comonad
+           ghc-fingertree
+           ghc-hashable
+           ghc-indexed-traversable
+           ghc-lens
+           ghc-parsers
+           ghc-prettyprinter-ansi-terminal
+           ghc-prettyprinter
+           ghc-profunctors
+           ghc-reducers
+           ghc-unordered-containers
+           ghc-utf8-string))
+    (native-inputs
+     (list ghc-quickcheck))
     (home-page "https://github.com/ekmett/trifecta/")
     (synopsis "Parser combinator library with convenient diagnostics")
     (description "Trifecta is a modern parser combinator library for Haskell,
@@ -14197,40 +13496,36 @@ statically known size.")
 (define-public ghc-turtle
   (package
     (name "ghc-turtle")
-    (version "1.5.15")
+    (version "1.5.22")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
-             "mirror://hackage/package/turtle/turtle-"
+             "https://hackage.haskell.org/package/turtle/turtle-"
              version
              ".tar.gz"))
        (sha256
         (base32
-         "0yckgsc2a4g5x867gni80ldp226bsnhncfbil4ql6v2zwm4r8p7f"))))
+         "14lf43b5rxci6p9sy1gkb715m4b1s4rl65swn2qpdqv3h2yvpi4s"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-ansi-wl-pprint" ,ghc-ansi-wl-pprint)
-       ("ghc-async" ,ghc-async)
-       ("ghc-clock" ,ghc-clock)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-foldl" ,ghc-foldl)
-       ("ghc-hostname" ,ghc-hostname)
-       ("ghc-managed" ,ghc-managed)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-system-filepath" ,ghc-system-filepath)
-       ("ghc-system-fileio" ,ghc-system-fileio)
-       ("ghc-streaming-commons" ,ghc-streaming-commons)
-       ("ghc-temporary" ,ghc-temporary)
-       ("ghc-optparse-applicative" ,ghc-optparse-applicative)
-       ("ghc-optional-args" ,ghc-optional-args)
-       ("ghc-unix-compat" ,ghc-unix-compat)))
+     (list ghc-ansi-wl-pprint
+           ghc-async
+           ghc-clock
+           ghc-exceptions
+           ghc-foldl
+           ghc-hostname
+           ghc-managed
+           ghc-semigroups
+           ghc-system-filepath
+           ghc-system-fileio
+           ghc-streaming-commons
+           ghc-temporary
+           ghc-optparse-applicative
+           ghc-optional-args
+           ghc-unix-compat))
     (native-inputs
-     `(("ghc-doctest" ,ghc-doctest)
-       ("ghc-fail" ,ghc-fail)))
-    (arguments
-     `(#:cabal-revision
-       ("1" "02q1rv7zx31xz9wnmcqwd4w3iw7623p07iyi21zr0cqlignic5pg")))
+     (list ghc-doctest ghc-fail))
     (home-page
      "http://hackage.haskell.org/package/turtle")
     (synopsis "Shell programming, Haskell-style")
@@ -14260,7 +13555,7 @@ similar functionality.")
 (define-public ghc-typed-process
   (package
     (name "ghc-typed-process")
-    (version "0.2.6.0")
+    (version "0.2.6.3")
     (source
      (origin
        (method url-fetch)
@@ -14269,16 +13564,12 @@ similar functionality.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "1cf2pfym8zdxvvy7xv72ixj7wy3rjrdss6f57k1ysgs66cgsi8ii"))))
+         "071mw4yv4xr5n82si33qbcqcxvcr7h56zlyd8gmsfrsdnacbq47k"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-async" ,ghc-async)
-       ("ghc-unliftio-core" ,ghc-unliftio-core)))
+     (list ghc-async ghc-unliftio-core))
     (native-inputs
-     `(("ghc-base64-bytestring" ,ghc-base64-bytestring)
-       ("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)
-       ("ghc-temporary" ,ghc-temporary)))
+     (list ghc-base64-bytestring ghc-hspec hspec-discover ghc-temporary))
     (home-page "https://haskell-lang.org/library/typed-process")
     (synopsis "Run external processes with strong typing of streams")
     (description
@@ -14312,7 +13603,7 @@ function.")
 (define-public ghc-unagi-chan
   (package
     (name "ghc-unagi-chan")
-    (version "0.4.1.2")
+    (version "0.4.1.3")
     (source
      (origin
        (method url-fetch)
@@ -14320,16 +13611,12 @@ function.")
                            "/unagi-chan-" version ".tar.gz"))
        (sha256
         (base32
-         "1lnl5n4jnjmm4chp461glcwkrrw63rjz3fvprwxcy3lkpbkrqvgn"))))
+         "15fnk9x4fd2ryp31fjfrwm8k61m3a0qyb95m4065zc0yi0jyacp2"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-atomic-primops" ,ghc-atomic-primops)
-       ("ghc-primitive" ,ghc-primitive)))
+     (list ghc-atomic-primops ghc-primitive))
     (arguments
-     `(#:tests? #f ; FIXME: Tests expect primitive 0.7
-       #:cabal-revision
-       ("1"
-        "09pqi867wskwgc5lpn197f895mbn1174ydgllvcppcsmrz2b6yr6")))
+     `(#:tests? #f)) ; TODO: Fail.
     (home-page "https://hackage.haskell.org/package/unagi-chan")
     (synopsis "Fast concurrent queues with a Chan-like API, and more")
     (description
@@ -14343,7 +13630,7 @@ instruction is not available.")
 (define-public ghc-unbounded-delays
   (package
     (name "ghc-unbounded-delays")
-    (version "0.1.1.0")
+    (version "0.1.1.1")
     (source
      (origin
        (method url-fetch)
@@ -14353,7 +13640,7 @@ instruction is not available.")
              ".tar.gz"))
        (sha256
         (base32
-         "1ir9fghbrc214c97bwafk5ck6cacxz1pdnq4i18p604d1b8zg9wa"))))
+         "11b1vmlfv4pmmpl4kva58w7cf50xsj819cq3wzqgnbz3px9pxbar"))))
     (build-system haskell-build-system)
     (home-page "https://github.com/basvandijk/unbounded-delays")
     (synopsis "Unbounded thread delays and timeouts")
@@ -14366,15 +13653,17 @@ unbounded @code{Integer} type.")
 (define-public ghc-unexceptionalio
   (package
     (name "ghc-unexceptionalio")
-    (version "0.4.0")
+    (version "0.5.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://hackage.haskell.org/package/"
                            "unexceptionalio-" version "/" "unexceptionalio-"
                            version ".tar.gz"))
-       (sha256 (base32 "09gynk472l7nn5l2w320n4dwigwp0wh0shfp6dyw6r5h2jdxz18p"))))
+       (sha256 (base32 "07py2nffdgxpz8sryvqcghzb2kiiagpdf5ja1dia4z0rpwi79smh"))))
     (build-system haskell-build-system)
+    (native-inputs
+     (list ghc-hunit ghc-test-framework ghc-test-framework-hunit))
     (home-page "https://github.com/singpolyma/unexceptionalio")
     (synopsis "IO without any non-error, synchronous exceptions")
     (description "When you've caught all the exceptions that can be
@@ -14384,7 +13673,7 @@ handled safely, this is what you're left with.")
 (define-public ghc-unicode-transforms
   (package
     (name "ghc-unicode-transforms")
-    (version "0.3.6")
+    (version "0.3.7.1")
     (source
      (origin
        (method url-fetch)
@@ -14393,14 +13682,10 @@ handled safely, this is what you're left with.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "1akscvyssif4hki3g6hy0jmjyr8cqly1whzvzj0km2b3qh0x09l3"))))
+         "1010sahi4mjzqmxqlj3w73rlymbl2370x5vizjqbx7mb86kxzx4f"))))
     (build-system haskell-build-system)
-    (inputs
-     `(("ghc-bitarray" ,ghc-bitarray)))
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-getopt-generics" ,ghc-getopt-generics)
-       ("ghc-split" ,ghc-split)))
+     (list ghc-quickcheck ghc-getopt-generics ghc-split ghc-hspec))
     (home-page "https://github.com/composewell/unicode-transforms")
     (synopsis "Unicode normalization")
     (description "This library provides tools for fast Unicode 12.1.0
@@ -14435,7 +13720,7 @@ constant-time:
 (define-public ghc-uniplate
   (package
     (name "ghc-uniplate")
-    (version "1.6.12")
+    (version "1.6.13")
     (source
      (origin
        (method url-fetch)
@@ -14445,12 +13730,10 @@ constant-time:
              ".tar.gz"))
        (sha256
         (base32
-         "1dx8f9aw27fz8kw0ad1nm6355w5rdl7bjvb427v2bsgnng30pipw"))))
+         "1lis5qcb5j7yzd1cqjaqpb6bmkyjfb7l4nhk3ykmcma4513cjxz7"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-syb" ,ghc-syb)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)))
+     (list ghc-syb ghc-hashable ghc-unordered-containers))
     (home-page "https://github.com/ndmitchell/uniplate")
     (synopsis "Simple, concise and fast generic operations")
     (description "Uniplate is a library for writing simple and concise generic
@@ -14461,7 +13744,7 @@ work, but is substantially simpler and faster.")
 (define-public ghc-unix-compat
   (package
     (name "ghc-unix-compat")
-    (version "0.5.2")
+    (version "0.5.3")
     (source
      (origin
        (method url-fetch)
@@ -14471,7 +13754,7 @@ work, but is substantially simpler and faster.")
              ".tar.gz"))
        (sha256
         (base32
-         "1a8brv9fax76b1fymslzyghwa6ma8yijiyyhn12msl3i5x24x6k5"))))
+         "1j75i3dj489rz60ij3nfza774mb7mw33amhdkm10dd0dxabvb4q8"))))
     (build-system haskell-build-system)
     (home-page
      "https://github.com/jystic/unix-compat")
@@ -14501,8 +13784,7 @@ isn't available, portable implementations are used.")
      `(#:tests? #f)) ; FIXME: Test fails with "System.Time not found".  This
                      ; is weird, that should be provided by GHC 7.10.2.
     (inputs
-     `(("ghc-old-time" ,ghc-old-time)
-       ("ghc-old-locale" ,ghc-old-locale)))
+     (list ghc-old-time ghc-old-locale))
     (home-page "https://hackage.haskell.org/package/unix-time")
     (synopsis "Unix time parser/formatter and utilities")
     (description "This library provides fast parsing and formatting utilities
@@ -14512,7 +13794,7 @@ for Unix time in Haskell.")
 (define-public ghc-unliftio
   (package
     (name "ghc-unliftio")
-    (version "0.2.12")
+    (version "0.2.20")
     (source
      (origin
        (method url-fetch)
@@ -14522,14 +13804,13 @@ for Unix time in Haskell.")
              ".tar.gz"))
        (sha256
         (base32
-         "02gy1zrxgzg4xmzm8lafsf1nyr3as1q20r8ld73xg3q7rkag9acg"))))
+         "0mbm57h7r16qd7kpglbm50qrnfjmazd70avbrl647n4jwhlrp7my"))))
     (build-system haskell-build-system)
     (arguments `(#:tests? #f)) ; FIXME: hspec-discover not in PATH
     (outputs '("out" "static" "doc"))
     (inputs
-     `(("ghc-async" ,ghc-async)
-       ("ghc-unliftio-core" ,ghc-unliftio-core)))
-    (native-inputs `(("ghc-hspec" ,ghc-hspec)))
+     (list ghc-async ghc-unliftio-core))
+    (native-inputs (list ghc-hspec))
     (home-page "https://github.com/fpco/unliftio")
     (synopsis "Provides MonadUnliftIO typecplass for unlifting monads to
 IO (batteries included)")
@@ -14541,7 +13822,7 @@ working with it.")
 (define-public ghc-unliftio-core
   (package
     (name "ghc-unliftio-core")
-    (version "0.1.2.0")
+    (version "0.2.0.1")
     (source
      (origin
        (method url-fetch)
@@ -14550,11 +13831,11 @@ working with it.")
                            "unliftio-core-" version ".tar.gz"))
        (sha256
         (base32
-         "0y3siyx3drkw7igs380a87h8qfbbgcyxxlcnshp698hcc4yqphr4"))))
+         "16i97jax8rys57l0g0qswfwxh1cl5bgw2lw525rm6bzajw90v7wi"))))
     (build-system haskell-build-system)
     (arguments
      `(#:cabal-revision
-       ("2" "0jqrjjbgicx48wzcjxs1xmih48ay79rhmrz6081dldlfxynli6vz")))
+       ("2" "1xx9nmxxg87nhwxgbmmw0xbrppnjc23ppyryar04i3njyg9wvazr")))
     (home-page
      "https://github.com/fpco/unliftio/tree/master/unliftio-core#readme")
     (synopsis "The MonadUnliftIO typeclass for unlifting monads to IO")
@@ -14566,7 +13847,7 @@ functions.")
 (define-public ghc-unordered-containers
   (package
     (name "ghc-unordered-containers")
-    (version "0.2.10.0")
+    (version "0.2.14.0")
     (outputs '("out" "static" "doc"))
     (source
      (origin
@@ -14576,16 +13857,16 @@ functions.")
              "/unordered-containers-" version ".tar.gz"))
        (sha256
         (base32
-         "0wy5hfrs880hh8hvp648bl07ws777n3kkmczzdszr7papnyigwb5"))))
+         "0rw8kmg7xjlacmr1hcpin95abkd387awf154s9ran7zg9jllh3x1"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-chasingbottoms" ,ghc-chasingbottoms)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
-       ("ghc-hashable" ,ghc-hashable)))
+     (list ghc-chasingbottoms
+           ghc-hunit
+           ghc-quickcheck
+           ghc-test-framework
+           ghc-test-framework-hunit
+           ghc-test-framework-quickcheck2
+           ghc-hashable))
     (home-page
      "https://github.com/tibbe/unordered-containers")
     (synopsis
@@ -14635,7 +13916,7 @@ a style ready for qualification, that is, you should import them by
 (define-public ghc-uri-bytestring
   (package
     (name "ghc-uri-bytestring")
-    (version "0.3.2.2")
+    (version "0.3.3.1")
     (source
      (origin
        (method url-fetch)
@@ -14644,19 +13925,17 @@ a style ready for qualification, that is, you should import them by
                            "uri-bytestring-" version ".tar.gz"))
        (sha256
         (base32
-         "0spzv3mwlpxiamd7347sxwcy2xri16ak1y7p1v4fisnvq4jprm67"))))
+         "0s0k26v5x6601rbpkjkl5vp3dkp9xwj1dlgy4xkl470i4sna1rzk"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-attoparsec" ,ghc-attoparsec)
-              ("ghc-blaze-builder" ,ghc-blaze-builder)
-              ("ghc-th-lift-instances" ,ghc-th-lift-instances)))
-    (native-inputs `(("ghc-hunit" ,ghc-hunit)
-                     ("ghc-tasty" ,ghc-tasty)
-                     ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-                     ("ghc-hedgehog" ,ghc-hedgehog)
-                     ("ghc-tasty-hedgehog" ,ghc-tasty-hedgehog)
-                     ("ghc-base-compat" ,ghc-base-compat)
-                     ("ghc-semigroups" ,ghc-semigroups)
-                     ("ghc-safe" ,ghc-safe)))
+    (inputs (list ghc-attoparsec ghc-blaze-builder ghc-th-lift-instances))
+    (native-inputs (list ghc-hunit
+                         ghc-tasty
+                         ghc-tasty-hunit
+                         ghc-hedgehog
+                         ghc-tasty-hedgehog
+                         ghc-base-compat
+                         ghc-semigroups
+                         ghc-safe))
     (home-page "https://github.com/Soostone/uri-bytestring")
     (synopsis "Haskell URI parsing as ByteStrings")
     (description "This Haskell package aims to be an RFC3986 compliant URI
@@ -14691,7 +13970,7 @@ including only one module.")
 (define-public ghc-utf8-string
   (package
     (name "ghc-utf8-string")
-    (version "1.0.1.1")
+    (version "1.0.2")
     (source
      (origin
        (method url-fetch)
@@ -14700,11 +13979,9 @@ including only one module.")
              version
              ".tar.gz"))
        (sha256
-        (base32 "0h7imvxkahiy8pzr8cpsimifdfvv18lizrb33k6mnq70rcx9w2zv"))))
+        (base32 "16mh36ffva9rh6k37bi1046pgpj14h0cnmj1iir700v0lynxwj7f"))))
     (build-system haskell-build-system)
-    (arguments
-     `(#:cabal-revision
-       ("3" "02vhj5gykkqa2dyn7s6gn8is1b5fdn9xcqqvlls268g7cpv6rk38")))
+    (native-inputs (list ghc-hunit))
     (home-page "https://github.com/glguy/utf8-string/")
     (synopsis "Support for reading and writing UTF8 Strings")
     (description
@@ -14716,16 +13993,17 @@ UTF8 without truncation.")
 (define-public ghc-utility-ht
   (package
     (name "ghc-utility-ht")
-    (version "0.0.14")
+    (version "0.0.16")
     (home-page "https://hackage.haskell.org/package/utility-ht")
     (source
      (origin
        (method url-fetch)
        (uri (string-append home-page "/utility-ht-" version ".tar.gz"))
        (sha256
-        (base32 "1a7bgk7wv7sqbxbiv7kankiimr3wij7zdm7s83zwsf886ghyxhk9"))))
+        (base32 "10dvmfhhhj5w4wz5drhvs6i0yv35kbbcbzhy6ci34r3ppcik5rdw"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-quickcheck" ,ghc-quickcheck)))
+    (native-inputs
+     (list ghc-quickcheck ghc-doctest-exitcode-stdio ghc-doctest-lib))
     (synopsis "Haskell helper functions for Lists, Maybes, Tuples, Functions")
     (description "This package includes Hakell modules providing various
 helper functions for Lists, Maybes, Tuples, Functions.")
@@ -14734,7 +14012,7 @@ helper functions for Lists, Maybes, Tuples, Functions.")
 (define-public ghc-uuid
   (package
     (name "ghc-uuid")
-    (version "1.3.13")
+    (version "1.3.15")
     (source
      (origin
        (method url-fetch)
@@ -14743,32 +14021,16 @@ helper functions for Lists, Maybes, Tuples, Functions.")
                            "uuid-" version ".tar.gz"))
        (sha256
         (base32
-         "09xhk42yhxvqmka0iqrv3338asncz8cap3j0ic0ps896f2581b6z"))))
+         "0r05h16gd7fgfpq9iz43jcn9jzrgfa0gk4cv1xy0p4rli66rb1gq"))))
     (build-system haskell-build-system)
-    (arguments
-     `(#:cabal-revision
-       ("2" "0m185q62jkfb5jsv358nxbnrkv8y8hd0qqvgvh22wvc5g9ipz0r9")
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'strip-test-framework-constraints
-           (lambda _
-             (substitute* "uuid.cabal"
-               (("HUnit            >= 1\\.2   && < 1\\.4") "HUnit")
-               (("QuickCheck       >= 2\\.4   && < 2\\.10") "QuickCheck")
-               (("tasty            >= 0\\.10  && < 0\\.12") "tasty")
-               (("tasty-hunit      == 0\\.9\\.\\*") "tasty-hunit")
-               (("tasty-quickcheck == 0\\.8\\.\\*") "tasty-quickcheck")))))))
-    (inputs `(("ghc-cryptohash-sha1" ,ghc-cryptohash-sha1)
-              ("ghc-cryptohash-md5" ,ghc-cryptohash-md5)
-              ("ghc-entropy" ,ghc-entropy)
-              ("ghc-network-info" ,ghc-network-info)
-              ("ghc-random" ,ghc-random)
-              ("ghc-uuid-types" ,ghc-uuid-types)))
-    (native-inputs `(("ghc-hunit" ,ghc-hunit)
-                     ("ghc-quickcheck" ,ghc-quickcheck)
-                     ("ghc-tasty" ,ghc-tasty)
-                     ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-                     ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+    (inputs (list ghc-cryptohash-sha1
+                  ghc-cryptohash-md5
+                  ghc-entropy
+                  ghc-network-info
+                  ghc-random
+                  ghc-uuid-types))
+    (native-inputs (list ghc-quickcheck ghc-tasty ghc-tasty-hunit
+                         ghc-tasty-quickcheck))
     (home-page "https://github.com/hvr/uuid")
     (synopsis "Haskell library to create, compare, parse, and print UUIDs")
     (description "This Haskell library provides utilities creating, comparing,
@@ -14778,7 +14040,7 @@ parsing and printing @dfn{Universally Unique Identifiers} or UUIDs.")
 (define-public ghc-uuid-types
   (package
     (name "ghc-uuid-types")
-    (version "1.0.3")
+    (version "1.0.5")
     (source
      (origin
        (method url-fetch)
@@ -14787,26 +14049,12 @@ parsing and printing @dfn{Universally Unique Identifiers} or UUIDs.")
                            "uuid-types-" version ".tar.gz"))
        (sha256
         (base32
-         "1zdka5jnm1h6k36w3nr647yf3b5lqb336g3fkprhd6san9x52xlj"))))
+         "1pd7xd6inkmmwjscf7pmiwqjks9y0gi1p8ahqbapvh34gadvhs5d"))))
     (build-system haskell-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'strip-test-framework-constraints
-           (lambda _
-             (substitute* "uuid-types.cabal"
-               (("HUnit >=1\\.2 && < 1\\.4") "HUnit")
-               (("QuickCheck >=2\\.4 && < 2\\.9") "QuickCheck")
-               (("tasty >= 0\\.10 && < 0\\.12") "tasty")
-               (("tasty-hunit == 0\\.9\\.\\*") "tasty-hunit")
-               (("tasty-quickcheck == 0\\.8\\.\\*") "tasty-quickcheck")))))))
-    (inputs `(("ghc-hashable" ,ghc-hashable)
-              ("ghc-random" ,ghc-random)))
-    (native-inputs `(("ghc-hunit" ,ghc-hunit)
-                     ("ghc-quickcheck" ,ghc-quickcheck)
-                     ("ghc-tasty" ,ghc-tasty)
-                     ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-                     ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+    (arguments `(#:tests? #f)) ; TODO: Wrong byteorder version?
+    (inputs (list ghc-hashable ghc-random))
+    (native-inputs (list ghc-byteorder ghc-quickcheck ghc-tasty
+                         ghc-tasty-hunit ghc-tasty-quickcheck))
     (home-page "https://github.com/hvr/uuid")
     (synopsis "Haskell type definitions for UUIDs")
     (description "This Haskell library contains type definitions for
@@ -14818,29 +14066,23 @@ functions.")
 (define-public ghc-validation
   (package
     (name "ghc-validation")
-    (version "1.1")
+    (version "1.1.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
-             "mirror://hackage/package/validation/validation-"
+             "https://hackage.haskell.org/package/validation/validation-"
              version
              ".tar.gz"))
        (sha256
         (base32
-         "1acj7mh3581ks405xswxw6667z7y1y0slisg6jvp6chc191ji9l5"))))
+         "1dv7azpljdcf7irbnznnz31hq611bn1aj2m6ywghz3hgv835qqak"))))
     (build-system haskell-build-system)
-    (arguments
-     `(#:cabal-revision
-       ("1" "1rrjg9z399k6pb55nv85mlr5bkmdqbjwkvl1cy7ydccdx6ks4syp")))
     (inputs
-     `(("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-semigroupoids" ,ghc-semigroupoids)
-       ("ghc-bifunctors" ,ghc-bifunctors)
-       ("ghc-lens" ,ghc-lens)))
+     (list ghc-semigroups ghc-semigroupoids ghc-assoc ghc-bifunctors
+           ghc-lens))
     (native-inputs
-     `(("ghc-hedgehog" ,ghc-hedgehog)
-       ("ghc-hunit" ,ghc-hunit)))
+     (list ghc-hedgehog ghc-hunit))
     (home-page "https://github.com/qfpl/validation")
     (synopsis
      "Data-type like Either but with an accumulating Applicative")
@@ -14865,7 +14107,7 @@ example of, \"An applicative functor that is not a monad.\"")
 (define-public ghc-validity
   (package
     (name "ghc-validity")
-    (version "0.9.0.2")
+    (version "0.11.0.1")
     (source
      (origin
        (method url-fetch)
@@ -14875,10 +14117,9 @@ example of, \"An applicative functor that is not a monad.\"")
              ".tar.gz"))
        (sha256
         (base32
-         "1aa93lp1pqwv7vhx19nazlig8qhbp3psblbz360s5lii3s5rli2v"))))
+         "086nj5ymp4mxxfw9qjgjhd4j3z7gl2y9d89p0b7bkap5ampgdw2x"))))
     (build-system haskell-build-system)
-    (native-inputs `(("ghc-hspec" ,ghc-hspec)
-                     ("hspec-discover" ,hspec-discover)))
+    (native-inputs (list ghc-hspec hspec-discover))
     (home-page
      "https://github.com/NorfairKing/validity")
     (synopsis "Validity typeclass")
@@ -14891,7 +14132,7 @@ explicit by providing a function to check whether the invariants hold.")
 (define-public ghc-vault
   (package
     (name "ghc-vault")
-    (version "0.3.1.3")
+    (version "0.3.1.5")
     (source
      (origin
        (method url-fetch)
@@ -14901,12 +14142,10 @@ explicit by providing a function to check whether the invariants hold.")
              ".tar.gz"))
        (sha256
         (base32
-         "0vdm472vn734xa27jjm2mjacl37mxiqaaahvm4hzqjgyh4cqq377"))))
+         "181ksk1yixjg0jiggw5jvm8am8m8c7lim4xaixf8qnaqvxm6namc"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-semigroups" ,ghc-semigroups)))
+     (list ghc-unordered-containers ghc-hashable ghc-semigroups))
     (home-page
      "https://github.com/HeinrichApfelmus/vault")
     (synopsis "Persistent store for arbitrary values")
@@ -14921,7 +14160,7 @@ representing a store for a single element.")
 (define-public ghc-vector
   (package
     (name "ghc-vector")
-    (version "0.12.0.3")
+    (version "0.12.3.1")
     (outputs '("out" "static" "doc"))
     (source
      (origin
@@ -14932,21 +14171,19 @@ representing a store for a single element.")
              ".tar.gz"))
        (sha256
         (base32
-         "1a756s4w759ji3als5alfxwlckh5zcmykfg9rll4mlr2knzvz8mq"))))
+         "0dczbcisxhhix859dng5zhxkn3xvlnllsq60apqzvmyl5g056jpv"))))
     (build-system haskell-build-system)
     ;; FIXME: To simplify upgrading all Haskell packages, we leave the tests
     ;; disabled for now.
     (arguments
      `(#:tests? #f))
     (inputs
-     `(("ghc-primitive" ,ghc-primitive)
-       ("ghc-random" ,ghc-random)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ;; ("ghc-hunit" ,ghc-hunit)
-       ;; ("ghc-test-framework" ,ghc-test-framework)
-       ;; ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ;; ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
-       ))
+     (list ghc-primitive
+           ;; ("ghc-hunit" ,ghc-hunit)
+           ;; ("ghc-test-framework" ,ghc-test-framework)
+           ;; ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
+           ;; ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
+           ))
     (home-page "https://github.com/haskell/vector")
     (synopsis "Efficient Arrays")
     (description "This library provides an efficient implementation of
@@ -14957,7 +14194,7 @@ optimisation framework.")
 (define-public ghc-vector-algorithms
   (package
     (name "ghc-vector-algorithms")
-    (version "0.8.0.1")
+    (version "0.8.0.4")
     (source
      (origin
        (method url-fetch)
@@ -14966,12 +14203,12 @@ optimisation framework.")
                            "vector-algorithms-" version ".tar.gz"))
        (sha256
         (base32
-         "1zip8r7hh5g12xrjvhbg38z6hfxy7l6h6pl88qcqc0ygdmwdxg0m"))))
+         "0fxg6w0vh5g2vzw4alajj9ywdijfn9nyx28hbckhmwwbfxb6l5vn"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-vector" ,ghc-vector)))
+     (list ghc-vector))
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-quickcheck))
     (home-page "https://github.com/bos/math-functions")
     (synopsis "Algorithms for vector arrays in Haskell")
     (description "This Haskell library algorithms for vector arrays.")
@@ -14980,7 +14217,7 @@ optimisation framework.")
 (define-public ghc-vector-binary-instances
   (package
     (name "ghc-vector-binary-instances")
-    (version "0.2.5.1")
+    (version "0.2.5.2")
     (source
      (origin
        (method url-fetch)
@@ -14990,13 +14227,12 @@ optimisation framework.")
              version ".tar.gz"))
        (sha256
         (base32
-         "04n5cqm1v95pw1bp68l9drjkxqiy2vswxdq0fy1rqcgxisgvji9r"))))
+         "0kgmlb4rf89b18d348cf2k06xfhdpamhmvq7iz5pab5014hknbmp"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-vector" ,ghc-vector)))
+     (list ghc-vector))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+     (list ghc-tasty ghc-tasty-quickcheck))
     (home-page "https://github.com/bos/vector-binary-instances")
     (synopsis "Instances of Data.Binary and Data.Serialize for vector")
     (description "This library provides instances of @code{Binary} for the
@@ -15009,7 +14245,7 @@ boxed and storable vectors.")
 (define-public ghc-vector-builder
   (package
     (name "ghc-vector-builder")
-    (version "0.3.8")
+    (version "0.3.8.2")
     (source
      (origin
        (method url-fetch)
@@ -15018,18 +14254,16 @@ boxed and storable vectors.")
                            "vector-builder-" version ".tar.gz"))
        (sha256
         (base32
-         "0ww0l52p8s6gmh985adnjbvm1vrqpqbm08qdcrvxwhhcqmxgv6m3"))))
+         "1g1zxp6xcwcq3372a5qqs44cl09a48p21m1jsys5bsampprlmcgs"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-vector" ,ghc-vector)
-              ("ghc-semigroups" ,ghc-semigroups)
-              ("ghc-base-prelude" ,ghc-base-prelude)))
-    (native-inputs `(("ghc-attoparsec" ,ghc-attoparsec)
-                     ("ghc-tasty" ,ghc-tasty)
-                     ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-                     ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-                     ("ghc-hunit" ,ghc-hunit)
-                     ("ghc-quickcheck-instances" ,ghc-quickcheck-instances)
-                     ("ghc-rerebase" ,ghc-rerebase)))
+    (inputs (list ghc-vector ghc-semigroups ghc-base-prelude))
+    (native-inputs (list ghc-attoparsec
+                         ghc-tasty
+                         ghc-tasty-hunit
+                         ghc-tasty-quickcheck
+                         ghc-hunit
+                         ghc-quickcheck-instances
+                         ghc-rerebase))
     (home-page "https://github.com/nikita-volkov/vector-builder")
     (synopsis "Vector builder for Haskell")
     (description "This Haskell package provides an API for constructing vectors.
@@ -15038,13 +14272,13 @@ It provides the composable @code{Builder} abstraction, which has instances of th
 
 You would first use the @code{Builder} abstraction to specify the structure of
 the vector; then you can execute the builder to actually produce the
-vector. ")
+vector.")
     (license license:expat)))
 
 (define-public ghc-vector-th-unbox
   (package
     (name "ghc-vector-th-unbox")
-    (version "0.2.1.7")
+    (version "0.2.1.9")
     (source
      (origin
        (method url-fetch)
@@ -15053,11 +14287,10 @@ vector. ")
                            "vector-th-unbox-" version ".tar.gz"))
        (sha256
         (base32
-         "0q8dqnbv1c2gi7jjdhqj14abj1vik23ki6lq4iz2sz18yc7q69fi"))))
+         "0jbzm31d91kxn8m0h6iplj54h756q6f4zzdrnb2w7rzz5zskgqyl"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-vector" ,ghc-vector)
-       ("ghc-data-default" ,ghc-data-default)))
+     (list ghc-vector ghc-data-default))
     (home-page "https://github.com/liyang/vector-th-unbox")
     (synopsis "Deriver for Data.Vector.Unboxed using Template Haskell")
     (description "This Haskell library provides a Template Haskell
@@ -15081,8 +14314,7 @@ and from some existing type with an Unbox instance.")
          "05vk3x1r9a2pqnzfji475m5gdih2im1h7rbi2sc67p1pvj6pbbsk"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-hashable" ,ghc-hashable)))
+     (list ghc-semigroups ghc-hashable))
     (home-page "https://github.com/ekmett/void")
     (synopsis
      "Logically uninhabited data type")
@@ -15114,14 +14346,9 @@ given term should not exist.")
                (("temporary.* < 1\\.3")
                 "temporary >= 1.1 && < 1.4")))))))
     (inputs
-     `(("ghc-cereal" ,ghc-cereal)
-       ("ghc-data-default-class"
-        ,ghc-data-default-class)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-temporary" ,ghc-temporary)))
+     (list ghc-cereal ghc-data-default-class ghc-quickcheck ghc-temporary))
     (native-inputs
-     `(("hspec-discover" ,hspec-discover)
-       ("ghc-hspec" ,ghc-hspec)))
+     (list hspec-discover ghc-hspec))
     (home-page "https://github.com/mrkkrp/wave")
     (synopsis "Work with WAVE and RF64 files in Haskell")
     (description "This package allows you to work with WAVE and RF64
@@ -15142,9 +14369,7 @@ files in Haskell.")
          "1n1fq7v64b59ajf5g50iqj9sa34wm7s2j3viay0kxpmvlcv8gipz"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-setlocale" ,ghc-setlocale)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("ghc-attoparsec" ,ghc-attoparsec)))
+     (list ghc-setlocale ghc-utf8-string ghc-attoparsec))
     (home-page "https://github.com/solidsnack/wcwidth/")
     (synopsis "Haskell bindings to wcwidth")
     (description "This package provides Haskell bindings to your system's
@@ -15158,15 +14383,13 @@ widths to the Char type.")
     (inherit ghc-wcwidth)
     (name "ghc-wcwidth-bootstrap")
     (inputs
-     `(("ghc-setlocale" ,ghc-setlocale)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("ghc-attoparsec" ,ghc-attoparsec-bootstrap)))
+     (list ghc-setlocale ghc-utf8-string ghc-attoparsec-bootstrap))
     (properties '((hidden? #t)))))
 
 (define-public ghc-weigh
   (package
     (name "ghc-weigh")
-    (version "0.0.14")
+    (version "0.0.16")
     (source
      (origin
        (method url-fetch)
@@ -15174,11 +14397,10 @@ widths to the Char type.")
                            "weigh-" version ".tar.gz"))
        (sha256
         (base32
-         "0l85marb5rl9nr1c0id42dnr5i9fk1jciy5h6lywhb34w3hbj61g"))))
+         "13pbjr7fzqy3s9c1nd2jhfwzbpccmpfwdn7y46z9k2bfkch1jam9"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-split" ,ghc-split)
-       ("ghc-temporary" ,ghc-temporary)))
+     (list ghc-split ghc-temporary))
     (home-page "https://github.com/fpco/weigh#readme")
     (synopsis "Measure allocations of a Haskell functions/values")
     (description "This package provides tools to measure the memory usage of a
@@ -15201,7 +14423,7 @@ Haskell value or function.")
          "1clvbd1ckhvy29qrbmpkn7bya7300fq6znnps23nn3nxyrxhsr85"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-control-monad-free" ,ghc-control-monad-free)))
+     (list ghc-control-monad-free))
     (arguments
      `(#:cabal-revision
        ("1"
@@ -15264,8 +14486,7 @@ instances of the @code{Pretty} class.")
          "1br7qyf27iza213inwhf9bm2k6in0zbmfw6w4clqlc9f9cj2nrkb"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+     (list ghc-tasty ghc-tasty-hunit))
     (home-page
      "https://github.com/minad/wl-pprint-annotated#readme")
     (synopsis
@@ -15281,7 +14502,7 @@ modernized interface.")
 (define-public ghc-wl-pprint-text
   (package
     (name "ghc-wl-pprint-text")
-    (version "1.2.0.0")
+    (version "1.2.0.1")
     (source
      (origin
        (method url-fetch)
@@ -15290,10 +14511,10 @@ modernized interface.")
              version ".tar.gz"))
        (sha256
         (base32
-         "0g3w92rad6x5appfb22rbzcas2ix2h0hy91sdxhq8a4a5cnlrpa0"))))
+         "030ckgzz14sv2c317g4j5g68hyq9xi40cmv0apwclw6sc6xgsvly"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-base-compat" ,ghc-base-compat)))
+     (list ghc-base-compat))
     (home-page "https://hackage.haskell.org/package/wl-pprint-text")
     (synopsis "Wadler/Leijen Pretty Printer for Text values")
     (description
@@ -15312,7 +14533,7 @@ modernized interface.")
        (sha256
         (base32 "15rcqhg9vb7qisk9ryjnyhhfgigxksnkrczycaw2rin08wczjwpb"))))
     (build-system haskell-build-system)
-    (native-inputs `(("ghc-hspec" ,ghc-hspec)))
+    (native-inputs (list ghc-hspec))
     (arguments
      `(#:cabal-revision
        ("1" "1k4w4g053vhmpp08542hrqaw81p3p35i567xgdarqmpghfrk68pp")))
@@ -15338,8 +14559,7 @@ modernized interface.")
          "12jx7f13d2h1djq4fh4dyrab61sm49mj1w61j3rzp2vjfm696c16"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-hspec hspec-discover))
     (home-page "https://hackage.haskell.org/package/word8")
     (synopsis "Word8 library for Haskell")
     (description "Word8 library to be used with @code{Data.ByteString}.")
@@ -15360,9 +14580,9 @@ modernized interface.")
         (base32
          "1mbcrq89jz0dcibw66w0jdy4f4bfpx4zwjfs98rm3jjgdikwdzb4"))))
     (build-system haskell-build-system)
-    (native-inputs `(("ghc-c2hs" ,ghc-c2hs)))
+    (native-inputs (list ghc-c2hs))
     (inputs
-     `(("ghc-semigroups" ,ghc-semigroups)))
+     (list ghc-semigroups))
     (home-page "https://hackage.haskell.org/package/wordexp")
     (synopsis "Library wrapping @code{wordexp} for Haskell")
     (description "@code{wordexp(3)} wrapper library for Haskell to perform
@@ -15372,24 +14592,21 @@ word expansion like a posix-shell.")
 (define-public ghc-x11
   (package
     (name "ghc-x11")
-    (version "1.9.1")
+    (version "1.10.2")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://hackage.haskell.org/package/X11/"
                            "X11-" version ".tar.gz"))
        (sha256
-        (base32 "0gg6852mrlgl8zng1j84fismz7k81jr5fk92glgkscf8q6ryg0bm"))))
+        (base32 "1ip207l97s8nw4daxp9s254agk8f0wibpf0prx0n695klqyn8bz1"))))
     (build-system haskell-build-system)
     (arguments
      `(#:extra-directories
        ("libx11" "libxrandr" "libxinerama" "libxscrnsaver")))
     (inputs
-     `(("libx11" ,libx11)
-       ("libxrandr" ,libxrandr)
-       ("libxinerama" ,libxinerama)
-       ("libxscrnsaver" ,libxscrnsaver)
-       ("ghc-data-default" ,ghc-data-default)))
+     (list libx11 libxrandr libxinerama libxscrnsaver
+           ghc-data-default-class))
     (home-page "https://github.com/haskell-pkg-janitors/X11")
     (synopsis "Bindings to the X11 graphics library")
     (description
@@ -15411,13 +14628,9 @@ bindings are a direct translation of the C bindings.")
     (arguments
      `(#:extra-directories ("libx11" "libxft" "xorgproto")))
     (inputs
-     `(("ghc-x11" ,ghc-x11)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("libx11" ,libx11)
-       ("libxft" ,libxft)
-       ("xorgproto" ,xorgproto)))
+     (list ghc-x11 ghc-utf8-string libx11 libxft xorgproto))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (build-system haskell-build-system)
     (home-page "https://hackage.haskell.org/package/X11-xft")
     (synopsis "Bindings to Xft")
@@ -15468,7 +14681,7 @@ parts.")
 (define-public ghc-xml-conduit
   (package
     (name "ghc-xml-conduit")
-    (version "1.8.0.1")
+    (version "1.9.1.1")
     (source
      (origin
        (method url-fetch)
@@ -15476,21 +14689,19 @@ parts.")
                            "xml-conduit-" version ".tar.gz"))
        (sha256
         (base32
-         "177gmyigxql1pn3ncz0r8annwv5cbxnihbgrrg1dhm4gmc9jy2wq"))))
+         "1zzh7xnmbm68dab1vqsjkr6ghxqgnla5nik4amrwlmhbdih1gcdx"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-conduit" ,ghc-conduit)
-       ("ghc-conduit-extra" ,ghc-conduit-extra)
-       ("ghc-doctest" ,ghc-doctest)
-       ("ghc-resourcet" ,ghc-resourcet)
-       ("ghc-xml-types" ,ghc-xml-types)
-       ("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-data-default-class" ,ghc-data-default-class)
-       ("ghc-blaze-markup" ,ghc-blaze-markup)
-       ("ghc-blaze-html" ,ghc-blaze-html)
-       ("ghc-monad-control" ,ghc-monad-control)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-hunit" ,ghc-hunit)))
+     (list ghc-conduit
+           ghc-conduit-extra
+           ghc-resourcet
+           ghc-xml-types
+           ghc-attoparsec
+           ghc-data-default-class
+           ghc-blaze-markup
+           ghc-blaze-html))
+    (native-inputs
+     (list ghc-doctest ghc-hspec ghc-cabal-doctest ghc-hunit))
     (home-page "https://github.com/snoyberg/xml")
     (synopsis "Utilities for dealing with XML with the conduit package")
     (description
@@ -15501,7 +14712,7 @@ the @code{conduit} package.")
 (define-public ghc-xml-types
   (package
     (name "ghc-xml-types")
-    (version "0.3.6")
+    (version "0.3.8")
     (source
      (origin
        (method url-fetch)
@@ -15509,7 +14720,7 @@ the @code{conduit} package.")
                            "xml-types-" version ".tar.gz"))
        (sha256
         (base32
-         "1jgqxsa9p2q3h6nymbfmvhldqrqlwrhrzmwadlyc0li50x0d8dwr"))))
+         "102cm0nvfmf9gn8hvn5z8qvmg931laczs33wwd5iyz9bc37f9mfs"))))
     (build-system haskell-build-system)
     (home-page "https://john-millikin.com/software/haskell-xml/")
     (synopsis "Basic types for representing XML")
@@ -15530,11 +14741,9 @@ documents.")
         (base32 "0jrhcjy7ww59dafg857f2g2df1fw2jmbwcs1q379ph0pc5rxj3lj"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-shakespeare" ,ghc-shakespeare)
-       ("ghc-xml-conduit" ,ghc-xml-conduit)))
+     (list ghc-shakespeare ghc-xml-conduit))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-hunit" ,ghc-hunit)))
+     (list ghc-hspec ghc-hunit))
     (home-page "https://www.yesodweb.com/")
     (synopsis "Hamlet-style quasiquoter for XML content")
     (description "This package provides a type-safe tool for generating XML
@@ -15544,34 +14753,33 @@ code via quasi-quoting built on top of @code{ghc-shakespeare}.")
 (define-public ghc-yaml
   (package
     (name "ghc-yaml")
-    (version "0.11.1.2")
+    (version "0.11.7.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://hackage.haskell.org/package/"
                                   "yaml/yaml-" version ".tar.gz"))
               (sha256
                (base32
-                "028pz77n92l6kjgjv263h4b6yhw1iibdbf3a3dkn5qnz537xpzhc"))))
-    (build-system haskell-build-system)
-    (inputs
-     `(("ghc-conduit" ,ghc-conduit)
-       ("ghc-resourcet" ,ghc-resourcet)
-       ("ghc-aeson" ,ghc-aeson)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-temporary" ,ghc-temporary)
-       ("ghc-enclosed-exceptions" ,ghc-enclosed-exceptions)
-       ("ghc-base-compat" ,ghc-base-compat)
-       ("ghc-libyaml" ,ghc-libyaml)))
-    (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-hunit" ,ghc-hunit)
-       ("hspec-discover" ,hspec-discover)
-       ("ghc-mockery" ,ghc-mockery)
-       ("ghc-raw-strings-qq" ,ghc-raw-strings-qq)))
+                "0s08kw0hqxixxripwjmz7b4yh9130dws3jaj460x8ds8q4b6khbx"))))
+    (build-system haskell-build-system)
+    (inputs
+     (list ghc-conduit
+           ghc-resourcet
+           ghc-aeson
+           ghc-unordered-containers
+           ghc-vector
+           ghc-attoparsec
+           ghc-scientific
+           ghc-libyaml
+           ghc-optparse-applicative))
+    (native-inputs
+     (list ghc-hspec
+           ghc-hunit
+           ghc-base-compat
+           hspec-discover
+           ghc-mockery
+           ghc-raw-strings-qq
+           ghc-temporary))
     (home-page "https://github.com/snoyberg/yaml/")
     (synopsis "Parsing and rendering YAML documents")
     (description
@@ -15604,13 +14812,9 @@ code via quasi-quoting built on top of @code{ghc-shakespeare}.")
                (setenv "PATH" (string-append unzip "/bin:" which "/bin:" path))
                #t))))))
     (inputs
-     `(("ghc-digest" ,ghc-digest)
-       ("ghc-temporary" ,ghc-temporary)
-       ("ghc-zlib" ,ghc-zlib)))
+     (list ghc-digest ghc-temporary ghc-zlib))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("unzip" ,unzip)
-       ("which" ,which)))
+     (list ghc-hunit unzip which))
     (home-page "https://hackage.haskell.org/package/zip-archive")
     (synopsis "Zip archive library for Haskell")
     (description "The zip-archive library provides functions for creating,
@@ -15620,7 +14824,7 @@ modifying, and extracting files from zip archives in Haskell.")
 (define-public ghc-zlib
   (package
     (name "ghc-zlib")
-    (version "0.6.2.1")
+    (version "0.6.2.3")
     (outputs '("out" "static" "doc"))
     (source
      (origin
@@ -15631,7 +14835,7 @@ modifying, and extracting files from zip archives in Haskell.")
              ".tar.gz"))
        (sha256
         (base32
-         "1l11jraslcrp9d4wnhwfyhwk4fsiq1aq8i6vj81vcq1m2zzi1y7h"))))
+         "125wbayk8ifp0gp8cb52afck2ziwvqfrjzbmwmy52g6bz7fnnzw0"))))
     (build-system haskell-build-system)
     (arguments
      `(#:extra-directories ("zlib")
@@ -15643,12 +14847,9 @@ modifying, and extracting files from zip archives in Haskell.")
                (("tasty            >= 0\\.8 && < 0\\.12") "tasty")
                (("tasty-hunit      >= 0\\.8 && < 0\\.10") "tasty-hunit")
                (("tasty-quickcheck == 0\\.8\\.\\*") "tasty-quickcheck")))))))
-    (inputs `(("zlib" ,zlib)))
+    (inputs (list zlib))
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+     (list ghc-quickcheck ghc-tasty ghc-tasty-hunit ghc-tasty-quickcheck))
     (home-page "https://hackage.haskell.org/package/zlib")
     (synopsis
      "Compression and decompression in the gzip and zlib formats")
@@ -15675,10 +14876,9 @@ provides access to the full zlib feature set.")
          "02ciywlz4wdlymgc3jsnicz9kzvymjw1www2163gxidnz4wb8fy8"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-zlib" ,ghc-zlib)))
+     (list ghc-zlib))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-hspec ghc-quickcheck))
     (arguments
      `(#:cabal-revision
        ("2" "0fq49694gqkab8m0vq4i879blswczwd66n7xh4r4gwiahf0ryvqc")))
@@ -15691,7 +14891,7 @@ provides access to the full zlib feature set.")
 (define-public ghc-zstd
   (package
     (name "ghc-zstd")
-    (version "0.1.1.2")
+    (version "0.1.3.0")
     (source
      (origin
        (method url-fetch)
@@ -15699,12 +14899,11 @@ provides access to the full zlib feature set.")
                            "zstd/zstd-" version ".tar.gz"))
        (sha256
         (base32
-         "147s496zvw13akxqzg65mgfvk3bvhrcilxgf8n786prxg5cm4jz2"))))
+         "0vghl48cxcqy72sqk2gpi7rvy5ya36j13vndaxi6kck6bqivbhm0"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)))
+     (list ghc-quickcheck ghc-test-framework
+           ghc-test-framework-quickcheck2))
     (home-page "https://github.com/luispedro/hs-zstd")
     (synopsis "Haskell bindings to the Zstandard compression algorithm")
     (description "This library provides Haskell bindings to the
@@ -15712,3 +14911,1176 @@ Zstandard compression algorithm, a fast lossless compression algorithm
 targeting real-time compression scenarios at zlib-level and better
 compression ratios.")
     (license license:bsd-3)))
+
+(define-public ghc-indexed-traversable
+  (package
+    (name "ghc-indexed-traversable")
+    (version "0.1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/indexed-traversable/indexed-traversable-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32 "0fc18vdm1894yjbjkj9wjm27bf37ac3gvkzak677mgiw2pinmhvs"))))
+    (build-system haskell-build-system)
+    (inputs (list ghc-generic-deriving))
+    (arguments
+     `(#:cabal-revision
+       ("1" "0krvp9v5dh4w2076kar48cpkk62ndqp769v2ai3b38rsa5bj6q74")))
+    (home-page "https://hackage.haskell.org/package/indexed-traversable")
+    (synopsis "Indexed Functor, Foldable, and Traversable typeclasses")
+    (description
+     "This Haskell package provides three useful generalizations:
+
+@example
+class Functor f => FunctorWithIndex i f | f -> i where
+  imap :: (i -> a -> b) -> f a -> f b
+@end example
+
+@example
+class Foldable f => FoldableWithIndex i f | f -> i where
+  ifoldMap :: Monoid m => (i -> a -> m) -> f a -> m
+@end example
+
+@example
+class (FunctorWithIndex i t, FoldableWithIndex i t, Traversable t)
+       => TraversableWithIndex i t | t -> i where
+  itraverse :: Applicative f => (i -> a -> f b) -> t a -> f (t b)
+@end example
+
+The @code{ghc-keys} package provides similar functionality, but uses
+associated @code{TypeFamilies} instead of @code{FunctionalDependencies}.")
+    (license license:bsd-2)))
+
+(define-public ghc-type-equality
+  (package
+    (name "ghc-type-equality")
+    (version "1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/type-equality/type-equality-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32 "1s4cl11rvvv7n95i3pq9lmmx08kwh4z7l3d1hbv4wi8il81baa27"))))
+    (build-system haskell-build-system)
+    (arguments
+     `(#:cabal-revision
+       ("2" "1a3irpv5kyg3rywhmcp5fwg5irrdbdr0hrlw7asdk113nakrba7j")))
+    (home-page "https://github.com/hesselink/type-equality")
+    (synopsis "@code{Data.Type.Equality} compatibility package")
+    (description
+     "This library defines a propositional equality data type, shims
+@code{Data.Type.Equality} as well as possible for older GHC versions (< 7.8).
+
+@example
+data a :~: b where
+  Refl :: a :~: a
+@end example
+
+The module @code{Data.Type.Equality.Hetero} shims @@code{:~~:} equality, and
+for compilers with @code{PolyKinds}.")
+    (license license:bsd-3)))
+
+(define-public ghc-selective
+  (package
+    (name "ghc-selective")
+    (version "0.4.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/selective/selective-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32 "1mg5hnr3f4zjh3ajy16jkxj630rnfa9iqnnmpjqd9gkjdxpssd5l"))))
+    (build-system haskell-build-system)
+    (native-inputs
+     (list ghc-quickcheck ghc-tasty ghc-tasty-expected-failure
+           ghc-tasty-quickcheck))
+    (home-page "https://github.com/snowleopard/selective")
+    (synopsis "Selective applicative functors")
+    (description
+     "This package implements selective applicative functors, which allow you
+to declare your effects statically, and select which to execute dynamically.
+See the
+@uref{https://www.staff.ncl.ac.uk/andrey.mokhov/selective-functors.pdf, paper
+on selective functors} for more details.")
+    (license license:expat)))
+
+(define-public ghc-keys
+  (package
+    (name "ghc-keys")
+    (version "3.12.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/keys/keys-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32 "0ik6wsff306dnbz0v3gpiajlj5b558hrk9176fzcb2fclf4447nm"))))
+    (build-system haskell-build-system)
+    (inputs
+     (list ghc-comonad
+           ghc-free
+           ghc-hashable
+           ghc-semigroupoids
+           ghc-semigroups
+           ghc-tagged
+           ghc-transformers-compat
+           ghc-unordered-containers))
+    (home-page "http://github.com/ekmett/keys/")
+    (synopsis "Keyed functors and containers")
+    (description
+     "This package provides a bunch of ad hoc classes for accessing parts of
+a container.  In practice this package is largely subsumed by the
+@code{ghc-lens}, but it is maintained for now as it has much simpler
+dependencies.")
+    (license license:bsd-3)))
+
+(define-public ghc-pointed
+  (package
+    (name "ghc-pointed")
+    (version "5.0.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/pointed/pointed-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32 "07p92y62dibys3xa59rvx52xyyr39nghl73z7hzwnksa3ry3vfmq"))))
+    (build-system haskell-build-system)
+    (inputs
+     (list ghc-data-default-class
+           ghc-comonad
+           ghc-kan-extensions
+           ghc-semigroupoids
+           ghc-semigroups
+           ghc-tagged
+           ghc-transformers-compat
+           ghc-hashable
+           ghc-unordered-containers))
+    (home-page "https://github.com/ekmett/pointed/")
+    (synopsis "Pointed and copointed data types")
+    (description
+     "This Haskell library provides pointed and copointed data types.")
+    (license license:bsd-3)))
+
+(define-public ghc-vector-instances
+  (package
+    (name "ghc-vector-instances")
+    (version "3.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/vector-instances/vector-instances-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32 "10akvpa5w9bp0d8hflab63r9laa9gy2hv167smhjsdzq1kplc0hv"))))
+    (build-system haskell-build-system)
+    (inputs
+     (list ghc-vector
+           ghc-semigroupoids
+           ghc-semigroups
+           ghc-comonad
+           ghc-pointed
+           ghc-keys
+           ghc-hashable))
+    (home-page "https://github.com/ekmett/vector-instances")
+    (synopsis "Orphan instances for @code{Data.Vector}")
+    (description
+     "This Haskell library provides a place for lots of orphan instances for
+the @code{ghc-vector} package.")
+    (license license:bsd-3)))
+
+(define-public ghc-th-compat
+  (package
+    (name "ghc-th-compat")
+    (version "0.1.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/th-compat/th-compat-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32 "1il1hs5yjfkb417c224pw1vrh4anyprasfwmjbd4fkviyv55jl3b"))))
+    (build-system haskell-build-system)
+    (native-inputs
+     (list ghc-base-compat ghc-hspec hspec-discover))
+    (home-page "https://github.com/haskell-compat/th-compat")
+    (synopsis
+     "Backward- and forward-compatible @code{Quote} and @code{Code} types")
+    (description
+     "This package defines a @code{Language.Haskell.TH.Syntax.Compat} module,
+which backports the @code{Quote} and @code{Code} types to work across a wide
+range of @code{template-haskell} versions.  On recent versions of
+@code{template-haskell} (2.17.0.0 or later), this module simply re-exports
+@code{Quote} and @code{Code} from @code{Language.Haskell.TH.Syntax}.")
+    (license license:bsd-3)))
+
+(define-public ghc-filepattern
+  (package
+    (name "ghc-filepattern")
+    (version "0.1.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/filepattern/filepattern-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32 "0nznzji5haxl4ninm2a79dqf4c7fj6pc3z9gdc6wbf5h1pp14afr"))))
+    (build-system haskell-build-system)
+    (inputs
+     (list ghc-extra ghc-semigroups))
+    (native-inputs (list ghc-quickcheck))
+    (home-page "https://github.com/ndmitchell/filepattern")
+    (synopsis "File path glob-like matching")
+    (description
+     "This package provides Haskell library for matching files using patterns
+such as @code{\\\"src\\/**\\/*.png\\\"} for all @@file{.png} files recursively
+under the @@file{src} directory.
+
+Some of its features include:
+
+@itemize
+@item All matching is O(n).
+
+@item Most functions pre-compute some information given only one argument.
+
+@item Uses @code{match} and @code{substitute} to extract suitable strings from
+the @code{*} and @code{**} matches, and substitutes them back into other
+patterns.
+
+@item Uses @code{step} and @code{matchMany} to perform bulk matching of many
+patterns against many paths simultaneously.
+
+@item Uses @code{System.FilePattern.Directory} to perform optimised directory
+traverals using patterns.
+@end itemize")
+    (license license:bsd-3)))
+
+(define-public ghc-lib-parser-ex
+  (package
+    (name "ghc-lib-parser-ex")
+    (version "8.10.0.23")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/ghc-lib-parser-ex/ghc-lib-parser-ex-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32 "0r5sl7hhn0cxp0b1dskx1lshplc0yka7hcvs2nh10nrj07fjd3vj"))))
+    (build-system haskell-build-system)
+    (inputs (list ghc-uniplate))
+    (native-inputs
+     (list ghc-tasty ghc-tasty-hunit ghc-extra))
+    (home-page "https://github.com/shayne-fletcher/ghc-lib-parser-ex")
+    (synopsis "Algorithms on GHC parse trees")
+    (description
+     "The @code{ghc-lib-parser-ex} package contains GHC API parse tree utilities.")
+    (license license:bsd-3)))
+
+(define-public ghc-lift-type
+  (package
+    (name "ghc-lift-type")
+    (version "0.1.0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/lift-type/lift-type-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32 "1195iyf0s8zmibjmvd10bszyccp1a2g4wdysn7yk10d3j0q9xdxf"))))
+    (build-system haskell-build-system)
+    (home-page "https://github.com/parsonsmatt/lift-type")
+    (synopsis
+     "Lift a type from a Typeable constraint to a Template Haskell type")
+    (description
+     "This library provides a utility function @code{liftType}, which accepts a type
+application argument and returns the Template Haskell @code{Type} representation of
+it.")
+    (license license:bsd-3)))
+
+(define-public ghc-unicode-collation
+  (package
+    (name "ghc-unicode-collation")
+    (version "0.1.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/unicode-collation/unicode-collation-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32 "0nbxkpd29ivdi6vcikbaasffkcz9m2vd4nhv29p6gmvckzmhj7zi"))))
+    (build-system haskell-build-system)
+    (inputs (list ghc-th-lift-instances))
+    (native-inputs
+     (list ghc-tasty ghc-tasty-quickcheck ghc-tasty-hunit
+           ghc-unicode-transforms ghc-doctest))
+    (home-page "https://github.com/jgm/unicode-collation")
+    (synopsis "Haskell implementation of the Unicode Collation Algorithm")
+    (description
+     "This library provides a pure Haskell implementation of the Unicode
+Collation Algorithm described at @uref{http://www.unicode.org/reports/tr10/}.
+It is not as fully-featured or as performant as @code{text-icu}, but it avoids
+a dependency on a large C library.  Locale-specific tailorings are also
+provided.")
+    (license license:bsd-3)))
+
+(define-public ghc-citeproc
+  (package
+    (name "ghc-citeproc")
+    (version "0.4.0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/citeproc/citeproc-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32 "13hgbcbr7jbyfbxp8fsc43c2wq4fhlbxzqwh1plfkdi5n9bif1lv"))))
+    (build-system haskell-build-system)
+    (inputs
+     (list ghc-safe
+           ghc-case-insensitive
+           ghc-vector
+           ghc-scientific
+           ghc-uniplate
+           ghc-xml-conduit
+           ghc-attoparsec
+           ghc-data-default
+           ghc-aeson
+           ghc-file-embed
+           ghc-pandoc-types
+           ghc-unicode-collation
+           ghc-base-compat
+           ghc-aeson-pretty))
+    (native-inputs (list ghc-timeit ghc-diff))
+    (home-page "https://hackage.haskell.org/package/citeproc")
+    (synopsis "Generate citations and bibliography from CSL styles")
+    (description
+     "@code{ghc-citeproc} parses @acronym{Citation Style Language, CSL} style files
+and uses them to generate a list of formatted citations and bibliography
+entries.  For more information about CSL, see @uref{https://citationstyles.org/}.")
+    (license license:bsd-2)))
+
+(define-public ghc-commonmark
+  (package
+    (name "ghc-commonmark")
+    (version "0.2.1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/commonmark/commonmark-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32 "105szy7l4ji255fwv0kbfcy3i3a3a4197zgj6s9jb12kwbn6n0c7"))))
+    (build-system haskell-build-system)
+    (inputs (list ghc-unicode-transforms))
+    (native-inputs
+     (list ghc-tasty ghc-tasty-quickcheck ghc-tasty-hunit))
+    (home-page "https://github.com/jgm/commonmark-hs")
+    (synopsis "Pure Haskell Commonmark parser")
+    (description
+     "This library provides the core data types and functions for parsing
+@uref{https://spec.commonmark.org, Commonmark}.  The parser is fully
+Commonmark-compliant and passes the test suite.  It is designed to be
+customizable and easily extensible.  To customize the output, create an AST,
+or support a new output format, one need only define some new typeclass
+instances.  It is also easy to add new syntax elements or modify existing
+ones.
+
+Accurate information about source positions is available for all block and
+inline elements.  Thus the library can be used to create an accurate syntax
+highlighter or an editor with live preview. The parser has been designed for
+robust performance even in pathological cases that tend to cause stack
+overflows or exponential slowdowns in other parsers, with parsing speed that
+varies linearly with input length.")
+    (license license:bsd-3)))
+
+(define-public ghc-commonmark-extensions
+  (package
+    (name "ghc-commonmark-extensions")
+    (version "0.2.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/commonmark-extensions/commonmark-extensions-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32 "0jm6w84p2a2gyaljvnlvjjwrwnir1lss3ps53d0bd8mkvhixxrqr"))))
+    (build-system haskell-build-system)
+    (inputs
+     (list ghc-network-uri ghc-commonmark ghc-emojis))
+    (native-inputs
+     (list ghc-tasty ghc-tasty-hunit))
+    (home-page "https://github.com/jgm/commonmark-hs")
+    (synopsis "Extensions for @code{ghc-commonmark}")
+    (description
+     "This library provides some useful extensions for @code{ghc-commonmark}
+to parser core commonmark syntax: smart quotes, definition lists, tables,
+footnotes, math, and more.")
+    (license license:bsd-3)))
+
+(define-public ghc-commonmark-pandoc
+  (package
+    (name "ghc-commonmark-pandoc")
+    (version "0.2.1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/commonmark-pandoc/commonmark-pandoc-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32 "15rfaz49msswb7gh5wyxpm9vckbf3wzyd2m5m2f3hggb82ydk5cp"))))
+    (build-system haskell-build-system)
+    (inputs
+     (list ghc-commonmark ghc-commonmark-extensions ghc-pandoc-types))
+    (home-page "https://github.com/jgm/commonmark-hs")
+    (synopsis "Bridge between Commonmark and Pandoc AST")
+    (description
+     "This library provides typeclasses for rendering @code{ghc-commonmark} to
+Pandoc types.")
+    (license license:bsd-3)))
+
+(define-public ghc-hslua-module-path
+  (package
+    (name "ghc-hslua-module-path")
+    (version "0.1.0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/hslua-module-path/hslua-module-path-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32 "1zxfljcn74rky26ijqmba6grpj0h9plgr47wxdaf7gcz1y8dhn68"))))
+    (build-system haskell-build-system)
+    (inputs (list ghc-hslua))
+    (native-inputs
+     (list ghc-tasty ghc-tasty-hunit ghc-tasty-lua))
+    (home-page "https://github.com/hslua/hslua-module-path")
+    (synopsis "Lua module to work with file paths")
+    (description
+     "This Haskell library provides a Lua module to work with file paths in a
+platform independent way.")
+    (license license:expat)))
+
+(define-public ghc-template-haskell
+  (package
+    (name "ghc-template-haskell")
+    (version "2.16.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/template-haskell/template-haskell-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32 "1nk1cv35szp80qkhbyh5gn6vn194zzl0wz186qrqdrdx3a9r9w4g"))))
+    (build-system haskell-build-system)
+    (inputs (list ghc-boot-th))
+    (home-page "http://hackage.haskell.org/package/template-haskell")
+    (synopsis "Support library for Template Haskell")
+    (description
+     "This package provides modules containing facilities for manipulating
+Haskell source code using Template Haskell. See
+@uref{http://www.haskell.org/haskellwiki/Template_Haskell} for more
+information.")
+    (license license:bsd-3)))
+
+(define-public ghc-genvalidity-hspec
+  (package
+    (name "ghc-genvalidity-hspec")
+    (version "0.7.0.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/genvalidity-hspec/genvalidity-hspec-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32 "0aajx07n2rznyqxb0c4pn9j2cvkzw5brz9ki4grhhigbcri3jzmv"))))
+    (build-system haskell-build-system)
+    (inputs
+     (list ghc-quickcheck
+           ghc-genvalidity
+           ghc-genvalidity-property
+           ghc-hspec
+           hspec-discover
+           ghc-hspec-core
+           ghc-validity))
+    (home-page "https://github.com/NorfairKing/validity")
+    (synopsis "Standard spec's for @code{GenValidity} instances")
+    (description
+     "This haskell library provides validity and validity-based testing for
+@code{ghc-hspec}.")
+    (license license:expat)))
+
+(define-public ghc-boot-th
+  (package
+    (name "ghc-boot-th")
+    (version "8.10.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/ghc-boot-th/ghc-boot-th-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32 "0vhhmsd32p7zn9vhpv4d0k0b55n2dyhzy42xblndrma617kz8gli"))))
+    (build-system haskell-build-system)
+    (home-page "http://hackage.haskell.org/package/ghc-boot-th")
+    (synopsis
+     "Shared functionality between GHC and Template Haskell")
+    (description
+     "This library contains various bits shared between GHC and Template
+Haskell.  This package exists to ensure that @code{template-haskell} has a
+minimal set of transitive dependencies, since it is intended to be depended
+upon by user code.")
+    (license license:bsd-3)))
+
+(define-public ghc-binary-orphans
+  (package
+    (name "ghc-binary-orphans")
+    (version "1.0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/binary-orphans/binary-orphans-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32 "0gbmn5rpvyxhw5bxjmxwld6918lslv03b2f6hshssaw1il5x86j3"))))
+    (build-system haskell-build-system)
+    (native-inputs
+     (list ghc-quickcheck ghc-quickcheck-instances ghc-tagged ghc-tasty
+           ghc-tasty-quickcheck))
+    (arguments
+     `(#:cabal-revision
+       ("5" "1h2d37szfrcwn9rphnijn4q9l947b0wwqjs1aqmm62xkhbad7jf6")))
+    (home-page "http://hackage.haskell.org/package/binary-orphans")
+    (synopsis "Compatibility package for binary")
+    (description
+     "This package provides instances defined in later versions of
+@code{ghc-binary} package.")
+    (license license:bsd-3)))
+
+(define-public ghc-netlink
+  (package
+    (name "ghc-netlink")
+    (version "1.1.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/netlink/netlink-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32 "1q8sxycv93sap6dgbw70scklnpjj5vav6qlvsxm5500jlvb3jnf0"))))
+    (build-system haskell-build-system)
+    (inputs
+     (list ghc-cereal ghc-monad-loops ghc-pretty-hex ghc-language-c
+           ghc-regex-pcre))
+    (home-page "https://github.com/Ongy/netlink-hs")
+    (synopsis "Netlink communication for Haskell")
+    (description
+     "This is library provides utility to use Netlink from Haskell.  The scope of
+this package extends over general Netlink support to specific implementations
+of Netlink families.")
+    (license license:bsd-3)))
+
+(define-public ghc-doctest-driver-gen
+  (package
+    (name "ghc-doctest-driver-gen")
+    (version "0.3.0.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/doctest-driver-gen/doctest-driver-gen-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32 "1fbqi4s4ajxhyv4a7nbh3v98limla0z8rfqlh02pwc1a90qpwy1a"))))
+    (build-system haskell-build-system)
+    (arguments `(#:tests? #f)) ; TODO: Fail to open shared library.
+    (native-inputs (list ghc-doctest))
+    (home-page "https://github.com/Hexirp/doctest-driver-gen")
+    (synopsis "Generate driver file for Doctest's Cabal integration")
+    (description
+     "@code{ghc-doctest-driver-gen} is a Doctest's driver file generator.  It
+lets you automatically generate driver file for Doctest's Cabal integration.")
+    (license license:bsd-3)))
+
+(define-public ghc-template-haskell-compat-v0208
+  (package
+    (name "ghc-template-haskell-compat-v0208")
+    (version "0.1.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/template-haskell-compat-v0208/template-haskell-compat-v0208-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32 "1s2ba86y2r9n4r1dwfg734y3nfqxak560s8srd04kbn623hnrkw8"))))
+    (build-system haskell-build-system)
+    (home-page "https://github.com/nikita-volkov/template-haskell-compat-v0208")
+    (synopsis "Backwards compatibility layer for Template Haskell newer than 2.8")
+    (description
+     "This package provides a backwards compatibility layer for Template
+Haskell newer than 2.8.")
+    (license license:expat)))
+
+(define-public ghc-mysql
+  (package
+    (name "ghc-mysql")
+    (version "0.2.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/mysql/mysql-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32 "051w428arxbix06a52dacqjpnkfx42zbazxsd3l9d857dsd0kl3g"))))
+    (build-system haskell-build-system)
+    (arguments `(#:tests? #f)) ; TODO: Fails to connect to server.
+    (inputs
+     (list mysql zlib openssl))
+    (native-inputs (list ghc-hspec))
+    (home-page "https://github.com/paul-rouse/mysql")
+    (synopsis "Low-level MySQL client library")
+    (description
+     "This library provides Haskell bindings to the MySQL @code{mysqlclient}
+client library.  It is a fairly faithful, low level library that implements
+most of the MySQL client API.  The major departure from the C API is that in
+Haskell, resource management is mostly automatic and safe.
+
+This library deliberately avoids the question of providing a ``good'' API.
+Its purpose is to serve as a base upon which higher-level libraries can be
+built.")
+    (license license:bsd-3)))
+
+(define-public ghc-blaze-textual
+  (package
+    (name "ghc-blaze-textual")
+    (version "0.2.2.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/blaze-textual/blaze-textual-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32 "0zjnwnjpcpnnm0815h9ngr3a3iy0szsnb3nrcavkbx4905s9k4bs"))))
+    (build-system haskell-build-system)
+    (inputs
+     (list ghc-blaze-builder ghc-old-locale ghc-vector))
+    (native-inputs
+     (list ghc-quickcheck ghc-double-conversion ghc-test-framework
+           ghc-test-framework-quickcheck2))
+    (home-page "https://github.com/bos/blaze-textual")
+    (synopsis "Fast rendering of common datatypes")
+    (description
+     "@code{ghc-blaze-textual} is a fast Haskell library for rendering common
+Haskell datatypes in text form using the @code{ghc-blaze-builder} library.")
+    (license license:bsd-3)))
+
+(define-public ghc-mysql-simple
+  (package
+    (name "ghc-mysql-simple")
+    (version "0.4.7")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/mysql-simple/mysql-simple-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32 "1mhmszpq64h8kxr20iaj1laq46wr2gaqc8xxq1k821i7jfxfld6j"))))
+    (build-system haskell-build-system)
+    (arguments `(#:tests? #f)) ; TODO: Fails to connect to server.
+    (inputs
+     (list ghc-attoparsec
+           ghc-base16-bytestring
+           ghc-blaze-builder
+           ghc-mysql
+           ghc-pcre-light
+           ghc-old-locale
+           ghc-blaze-textual
+           ghc-vector
+           openssl
+           zlib))
+    (native-inputs (list ghc-hspec))
+    (home-page "https://github.com/paul-rouse/mysql-simple")
+    (synopsis "Mid-level MySQL client library")
+    (description
+     "This library implements mid-level Haskell bindings to the MySQL
+@code{mysqlclient} client library.  It is aimed at speed and ease of use.")
+    (license license:bsd-3)))
+
+(define-public ghc-persistent-qq
+  (package
+    (name "ghc-persistent-qq")
+    (version "2.12.0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/persistent-qq/persistent-qq-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32 "1dvniapxjaw2vmdqd5cplwxdxiy2l6z6gns8gp3ci3rn3xp0pf6p"))))
+    (build-system haskell-build-system)
+    (inputs
+     (list ghc-haskell-src-meta ghc-persistent))
+    (native-inputs
+     (list ghc-hunit
+           ghc-aeson
+           ghc-fast-logger
+           ghc-hspec
+           ghc-monad-logger
+           ghc-persistent-sqlite
+           ghc-resourcet
+           ghc-unliftio))
+    (home-page "https://github.com/yesodweb/persistent")
+    (synopsis "Quasi-quoter for raw SQL for @code{ghc-persistent}")
+    (description
+     "This package provides a quasi-quoter for raw @acronym{SQL, Structured Query
+Language} for @code{ghc-persistent}.")
+    (license license:expat)))
+
+(define-public ghc-persistent-mysql
+  (package
+    (name "ghc-persistent-mysql")
+    (version "2.13.0.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/persistent-mysql/persistent-mysql-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32 "18ji7a7lb1mjgqvi2mv2cg4vlgjkyzg2hgp09s7c9v071p3ll732"))))
+    (build-system haskell-build-system)
+    (arguments `(#:tests? #f)) ; TODO: Fails to import MaybeFieldDefsTest.
+    (inputs
+     (list ghc-persistent
+           ghc-aeson
+           ghc-blaze-builder
+           ghc-conduit
+           ghc-monad-logger
+           ghc-mysql
+           ghc-mysql-simple
+           ghc-resourcet
+           ghc-resource-pool
+           ghc-unliftio-core
+           openssl
+           zlib))
+    (native-inputs
+     (list ghc-fast-logger
+           ghc-hspec
+           ghc-http-api-data
+           ghc-hunit
+           ghc-path-pieces
+           ghc-persistent-qq
+           ghc-persistent-test
+           ghc-quickcheck
+           ghc-quickcheck-instances))
+    (home-page "http://www.yesodweb.com/book/persistent")
+    (synopsis
+     "Backend for the @code{ghc-persistent} library using MySQL database server")
+    (description
+     "This package contains a backend for @code{ghc-persistent} using the MySQL database
+server.  Internally it uses the @code{ghc-mysql-simple} and @code{mysql} packages in order
+to access the database.  This package supports only MySQL 5.1 and above.
+However, it has been tested only on MySQL 5.5.  Only the InnoDB storage engine
+is officially supported.")
+    (license license:expat)))
+
+(define-public ghc-hspec-expectations-lifted
+  (package
+    (name "ghc-hspec-expectations-lifted")
+    (version "0.10.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/hspec-expectations-lifted/hspec-expectations-lifted-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32 "0a1qwz0n80lph8m9cq6cb06m8bsmqgg8ifx0acpylvrrkd8g3k92"))))
+    (build-system haskell-build-system)
+    (inputs (list ghc-hspec-expectations))
+    (home-page "https://hackage.haskell.org/package/hspec-expectations-lifted")
+    (synopsis "Version of @code{ghc-hspec-expectations} generalized to @code{MonadIO}")
+    (description
+     "This package provides a version of @code{ghc-hspec-expectations} generalized
+to @code{MonadIO}.")
+    (license license:expat)))
+
+(define-public ghc-string-conversions
+  (package
+    (name "ghc-string-conversions")
+    (version "0.4.0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/string-conversions/string-conversions-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32 "150rdank90h7v08x0wq4dffjbxv2daf5v9sqfs5mab76kinwxg26"))))
+    (build-system haskell-build-system)
+    (inputs (list ghc-utf8-string))
+    (native-inputs
+     (list hspec-discover ghc-hspec ghc-quickcheck-instances
+           ghc-quickcheck))
+    (home-page "https://github.com/soenkehahn/string-conversions")
+    (synopsis "Simplify dealing with different types for strings")
+    (description
+     "This package provides a simple type class for converting values of different
+string types into values of other string types.")
+    (license license:bsd-3)))
+
+(define-public ghc-postgresql-libpq
+  (package
+    (name "ghc-postgresql-libpq")
+    (version "0.9.4.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/postgresql-libpq/postgresql-libpq-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32 "1gfnhc5pibn7zmifdf2g0c112xrpzsk756ln2kjzqljkspf4dqp3"))))
+    (build-system haskell-build-system)
+    (arguments
+     `(#:cabal-revision
+       ("1" "1clivf13z15w954a0kcfkv8yc0d8kx61b68x2hk7a9236ck7l2m2")))
+    (inputs (list postgresql))
+    (home-page "https://github.com/haskellari/postgresql-libpq")
+    (synopsis "Low-level bindings to @code{libpq}")
+    (description
+     "This package provides bindings to @code{libpq}: the C application
+programmer's interface to PostgreSQL.  @code{libpq} is a set of library
+functions that allow client programs to pass queries to the PostgreSQL backend
+server and to receive the results of these queries.")
+    (license license:bsd-3)))
+
+(define-public ghc-postgresql-simple
+  (package
+    (name "ghc-postgresql-simple")
+    (version "0.6.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/postgresql-simple/postgresql-simple-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32 "0rz2bklxp4pvbxb2w49h5p6pbwabn6d5d4j4mrya4fpa0d13k43d"))))
+    (build-system haskell-build-system)
+    (inputs
+     (list ghc-time-compat
+           ghc-aeson
+           ghc-attoparsec
+           ghc-bytestring-builder
+           ghc-case-insensitive
+           ghc-hashable
+           ghc-only
+           ghc-postgresql-libpq
+           ghc-scientific
+           ghc-uuid-types
+           ghc-vector))
+    (native-inputs
+     (list ghc-inspection-testing
+           ghc-tasty
+           ghc-tasty-hunit
+           ghc-base16-bytestring
+           ghc-cryptohash-md5
+           ghc-hunit
+           ghc-tasty
+           ghc-tasty-golden
+           ghc-tasty-hunit))
+    (arguments
+     `(#:cabal-revision
+       ("2" "1kwjlj0bsc1yd4dgfc0ydawq9acfjlf0bymwc830dryp16wpj9zv")))
+    (home-page "http://hackage.haskell.org/package/postgresql-simple")
+    (synopsis "Mid-Level PostgreSQL client library")
+    (description
+     "This package provides a mid-Level PostgreSQL client library, forked from
+@code{ghc-mysql-simple}.")
+    (license license:bsd-3)))
+
+(define-public ghc-persistent-postgresql
+  (package
+    (name "ghc-persistent-postgresql")
+    (version "2.13.2.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/persistent-postgresql/persistent-postgresql-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32 "07pnr8m0nk43jaz6l293lzx4ivyqgnw94fjypazzm008b4irh7ir"))))
+    (build-system haskell-build-system)
+    (arguments `(#:tests? #f)) ; TODO: Cannot import MaybeFieldDefsTest.
+    (inputs
+     (list ghc-persistent
+           ghc-aeson
+           ghc-attoparsec
+           ghc-blaze-builder
+           ghc-conduit
+           ghc-monad-logger
+           ghc-postgresql-simple
+           ghc-postgresql-libpq
+           ghc-resourcet
+           ghc-resource-pool
+           ghc-string-conversions
+           ghc-unliftio-core
+           ghc-unliftio))
+    (native-inputs
+     (list ghc-persistent-qq
+           ghc-persistent-test
+           ghc-fast-logger
+           ghc-hunit
+           ghc-hspec
+           ghc-hspec-expectations
+           ghc-hspec-expectations-lifted
+           ghc-quickcheck
+           ghc-quickcheck-instances
+           ghc-path-pieces
+           ghc-http-api-data
+           ghc-unordered-containers
+           ghc-vector))
+    (home-page "http://www.yesodweb.com/book/persistent")
+    (synopsis "Backend for the @code{ghc-persistent library} using Postgresql")
+    (description
+     "This package provides a backend for the @code{ghc-persistent} library
+using the @code{ghc-postgresql-simple} package.")
+    (license license:expat)))
+
+(define-public ghc-filtrable
+  (package
+    (name "ghc-filtrable")
+    (version "0.1.6.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/filtrable/filtrable-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32 "058jl7wjaxzvcayc9qzpikxvi9x42civ4sb02jh66rcvpndbfh5y"))))
+    (build-system haskell-build-system)
+    (arguments `(#:tests? #f)) ; TODO: Needs tasty >=1.3.1 && <1.4
+    (native-inputs
+     (list ghc-smallcheck ghc-tasty ghc-tasty-smallcheck))
+    (home-page "https://github.com/strake/filtrable.hs")
+    (synopsis "Class of filtrable containers")
+    (description "This package provides filtrable containers.")
+    (license license:bsd-3)))
+
+(define-public ghc-filelock
+  (package
+    (name "ghc-filelock")
+    (version "0.1.1.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/filelock/filelock-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32 "06a44i7a956d7xkk2na4090xj2a7b7a228pk4spmccs4x20ymssh"))))
+    (build-system haskell-build-system)
+    (native-inputs
+     (list ghc-async ghc-async))
+    (home-page "https://github.com/takano-akio/filelock")
+    (synopsis "Portable interface to file locking")
+    (description
+     "This package provides an interface to file locking functionalities.")
+    (license license:public-domain)))
+
+(define-public ghc-hsyaml-aeson
+  (package
+    (name "ghc-hsyaml-aeson")
+    (version "0.2.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/HsYAML-aeson/HsYAML-aeson-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32 "12sxww260pc0bbpiyirm7911haxhljdi2f08a9ddpbgw8d5n7ffg"))))
+    (build-system haskell-build-system)
+    (inputs
+     (list ghc-hsyaml ghc-aeson ghc-scientific ghc-unordered-containers
+           ghc-vector))
+    (arguments
+     `(#:cabal-revision
+       ("3" "0vhdndyj5f07vvvnssn5ybdja5wmaydq0n2lfpihvdg4dkhczrx2")))
+    (home-page "https://hackage.haskell.org/package/HsYAML-aeson")
+    (synopsis "JSON to YAML adapter")
+    (description
+     "The @uref{https://yaml.org/spec/1.2/spec.html, YAML 1.2} format provides
+a much richer data-model and feature-set than the
+@uref{https://tools.ietf.org/html/rfc7159, @acronym{JavaScript Object
+Notation, JSON}} format.  However, sometimes it's desirable to ignore the extra
+capabilities and treat YAML as if it was merely a more convenient markup
+format for humans to write JSON data.  To this end this module provides a
+compatibility layer atop @code{ghc-hsyaml} ,which allows decoding YAML
+documents in the more limited JSON data-model while also providing convenience
+by reusing @code{ghc-aeson}'s @code{FromJSON} instances for decoding the YAML
+data into native Haskell data types.")
+    (license license:gpl2+)))
+
+(define-public ghc-lukko
+  (package
+    (name "ghc-lukko")
+    (version "0.1.1.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/lukko/lukko-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32 "07xb926kixqv5scqdl8w34z42zjzdpbq06f0ha3f3nm3rxhgn3m8"))))
+    (build-system haskell-build-system)
+    (native-inputs
+     (list ghc-async
+           ghc-singleton-bool
+           ghc-tasty
+           ghc-tasty-expected-failure
+           ghc-tasty-hunit
+           ghc-temporary))
+    (arguments
+     `(#:cabal-revision
+       ("1" "0mmq1q82mrbayiij0p8wdnkf0j8drmq1iibg8kn4cak3nrn9pd1d")))
+    (home-page "https://hackage.haskell.org/package/lukko")
+    (synopsis "File locking")
+    (description
+     "This package provides access to platform dependent file locking APIs.  There
+are alternative file locking packages:
+
+@itemize
+@item @code{GHC.IO.Handle.Lock} in @code{base >= 4.10} is good enough for most
+use cases.  However, uses only @code{Handle}s so these locks cannot be used
+for intra-process locking.
+
+@item @code{ghc-filelock} doesn't support @acronym{OFD, open file descriptor}
+locking.
+@end itemize")
+
+    (license (list license:gpl2+ license:bsd-3))))
+
+(define-public ghc-dec
+  (package
+    (name "ghc-dec")
+    (version "0.0.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/dec/dec-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32 "0yslffafmqfkvhcw2arpc53hfmn1788z85ss9lxnbclr29lbvzgc"))))
+    (build-system haskell-build-system)
+    (home-page "https://github.com/phadej/vec")
+    (synopsis "Decidable propositions")
+    (description
+     "This package provides a @code{Dec} type for representing deciable
+relations.
+
+@example
+type Neg a = a -> Void
+
+data Dec a
+    = Yes a
+    | No (Neg a)
+@end example")
+    (license license:bsd-3)))
+
+(define-public ghc-singleton-bool
+  (package
+    (name "ghc-singleton-bool")
+    (version "0.1.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/singleton-bool/singleton-bool-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32 "17w9vv6arn7vvc7kykqcx81q2364ji43khrryl27r1cjx9yxapa0"))))
+    (build-system haskell-build-system)
+    (inputs (list ghc-dec))
+    (arguments
+     `(#:cabal-revision
+       ("3" "11rhzpy4xiry39bbxzwrqff75f0f4g7z0vkr3v9l8rv3w40jlf7x")))
+    (home-page "https://github.com/phadej/singleton-bool")
+    (synopsis "Type-level booleans")
+    (description
+     "This package provides Type-level booleans.")
+    (license license:bsd-3)))
+
diff --git a/gnu/packages/haskell.scm b/gnu/packages/haskell.scm
index 6b134ab1cc..699b45e45a 100644
--- a/gnu/packages/haskell.scm
+++ b/gnu/packages/haskell.scm
@@ -3,7 +3,7 @@
 ;;; Copyright © 2015 Siniša Biđin <sinisa@bidin.eu>
 ;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
 ;;; Copyright © 2015, 2019 Eric Bavier <bavier@member.fsf.org>
-;;; Copyright © 2016, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2016, 2018, 2019, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016, 2017 Nikita <nikita@n0.is>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Ricardo Wurmus <rekado@elephly.net>
@@ -22,6 +22,7 @@
 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2021 Matthew James Kraai <kraai@ftbfs.org>
 ;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
+;;; Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -91,7 +92,7 @@
                (setenv "HASKELLPROG" "./bin/clisp-haskell")
                #t)))))
       (inputs
-       `(("clisp" ,clisp)))
+       (list clisp))
       (home-page "https://git.elephly.net/software/yale-haskell.git")
       (synopsis "Port of the Yale Haskell system to CLISP")
       (description "This package provides the Yale Haskell system running on
@@ -248,9 +249,8 @@ top of CLISP.")
                      (gmp-lib (string-append gmp "/lib"))
                      (gmp-include (string-append gmp "/include"))
                      (ncurses-lib
-                      (string-append (assoc-ref inputs "ncurses") "/lib"))
-                     (ld-so (string-append (assoc-ref inputs "libc")
-                                           ,(glibc-dynamic-linker)))
+                      (dirname (search-input-file inputs "/lib/libncurses.so")))
+                     (ld-so (search-input-file inputs ,(glibc-dynamic-linker)))
                      (libtinfo-dir
                       (string-append ghc-bootstrap-prefix
                                      "/lib/ghc-7.8.4/terminfo-0.4.0.0")))
@@ -422,9 +422,7 @@ interactive environment for the functional language Haskell.")
        (sha256
         (base32 "1ch4j2asg7pr52ai1hwzykxyj553wndg7wq93i47ql4fllspf48i"))))
     (inputs
-     `(("gmp" ,gmp)
-       ("ncurses" ,ncurses)
-       ("libffi" ,libffi)))
+     (list gmp ncurses libffi))
     (native-inputs
      `(("perl" ,perl)
        ("python" ,python)               ; for tests
@@ -612,14 +610,9 @@ interactive environment for the functional language Haskell.")
                                 (file-pattern ".*\\.conf\\.d$")
                                 (file-type 'directory))))))
 
-;; Versions newer than ghc defined below (i.e. the compiler
-;; haskell-build-system uses) should use ghc-next as their name to
-;; ensure ghc (without version specification) and ghc-* packages are
-;; always compatible. See https://issues.guix.gnu.org/issue/47335.
-
 (define-public ghc-8.8
   (package (inherit ghc-8.6)
-    (name "ghc-next")
+    (name "ghc")
     (version "8.8.4")
     (source
      (origin
@@ -640,7 +633,7 @@ interactive environment for the functional language Haskell.")
            (sha256
             (base32
              "0c55pj2820q26rikhpf636sn4mjgqsxjrl94vsywrh79dxp3k14z"))))
-       ("git" ,git)                     ; invoked during tests
+       ("git" ,git-minimal/fixed)                 ; invoked during tests
        ,@(filter (match-lambda
                    (("ghc-bootstrap" . _) #f)
                    (("ghc-testsuite" . _) #f)
@@ -672,7 +665,7 @@ interactive environment for the functional language Haskell.")
 (define-public ghc-8.10
   (package
     (inherit ghc-8.8)
-    (name "ghc-next")
+    (name "ghc")
     (version "8.10.7")
     (source
      (origin
@@ -693,7 +686,7 @@ interactive environment for the functional language Haskell.")
            (sha256
             (base32
              "1zl25gg6bpx5601k8h3cqnns1xfc0nqgwnh8jvn2s65ra3f2g1nz"))))
-       ("git" ,git-minimal)                     ; invoked during tests
+       ("git" ,git-minimal/fixed)                 ; invoked during tests
        ,@(filter (match-lambda
                    (("ghc-bootstrap" . _) #f)
                    (("ghc-testsuite" . _) #f)
@@ -715,7 +708,21 @@ interactive environment for the functional language Haskell.")
                (substitute* '("testsuite/tests/driver/T16521/all.T")
                  (("extra_files" all) (string-append "[" all))
                  (("\\]\\), " all)
-                  (string-append all "expect_broken(0)], ")))))))))
+                  (string-append all "expect_broken(0)], ")))))
+           ;; TODO: Turn this into an undconditional patch on the next rebuild.
+           ,@(if (string-prefix? "i686" (or (%current-target-system)
+                                                  (%current-system)))
+              '((add-after 'skip-more-tests 'skip-failing-tests-i686
+                 (lambda _
+                   (substitute* '("testsuite/tests/codeGen/should_compile/all.T")
+                     (("(test\\('T15155l', )when\\(unregisterised\\(\\), skip\\)" all before)
+                      (string-append before "when(arch('i386'), skip)")))
+                   ;; Unexpected failures:
+                   ;;    quasiquotation/T14028.run  T14028 [bad stderr] (dyn)
+                   (substitute* '("testsuite/tests/quasiquotation/all.T")
+                     (("unless\\(config.have_ext_interp, skip\\),")
+                      "unless(config.have_ext_interp, skip), when(arch('i386'), skip),")))))
+              '())))))
     (native-search-paths (list (search-path-specification
                                 (variable "GHC_PACKAGE_PATH")
                                 (files (list
@@ -723,7 +730,12 @@ interactive environment for the functional language Haskell.")
                                 (file-pattern ".*\\.conf\\.d$")
                                 (file-type 'directory))))))
 
-(define-public ghc-8 ghc-8.6)
+;; Versions newer than ghc defined below (i.e. the compiler
+;; haskell-build-system uses) should use ghc-next as their name to
+;; ensure ghc (without version specification) and ghc-* packages are
+;; always compatible. See https://issues.guix.gnu.org/issue/47335.
+
+(define-public ghc-8 ghc-8.10)
 
 (define-public ghc ghc-8)
 
diff --git a/gnu/packages/hexedit.scm b/gnu/packages/hexedit.scm
index e5ea18cde6..20f3cbfe7b 100644
--- a/gnu/packages/hexedit.scm
+++ b/gnu/packages/hexedit.scm
@@ -60,11 +60,9 @@
                                "/share/man/man1/hexedit.1.gz\"")))
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (inputs
-     `(("man-db" ,man-db)
-       ("ncurses" ,ncurses)))
+     (list man-db ncurses))
     (synopsis "View and edit files or devices in hexadecimal or ASCII")
     (description "hexedit shows a file both in ASCII and in hexadecimal.  The
 file can be a device as the file is read a piece at a time.  You can modify
@@ -86,8 +84,7 @@ the file and search through it.")
                 "0w2xnw3z9ws9qrdpb80q55h6ynhh3aziixcfn45x91bzrbifix9i"))))
     (build-system gnu-build-system)
     (inputs
-     `(("lzo" ,lzo)
-       ("ncurses" ,ncurses)))
+     (list lzo ncurses))
     (synopsis "Viewer, editor, and analyzer for executable binaries")
     (description
      "ht is a terminal-based program to view, edit, and analyze any file, but
@@ -112,7 +109,7 @@ Development Environment} (IDE).")
     (build-system gnu-build-system)
     (arguments '(#:tests? #f))          ; no check target
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (synopsis "Binary file editor")
     (description "@command{bvi} is a display-oriented editor for binary files,
 based on the @command{vi} text editor.")
diff --git a/gnu/packages/hugs.scm b/gnu/packages/hugs.scm
index a14b8a8583..c9915e4cd6 100644
--- a/gnu/packages/hugs.scm
+++ b/gnu/packages/hugs.scm
@@ -72,7 +72,7 @@
              #t)))
        #:tests? #f)) ; no test target
     ;; FIXME: Fails to build with GCC 5.
-    (native-inputs `(("gcc" ,gcc-4.9)))
+    (native-inputs (list gcc-4.9))
     (home-page "https://www.haskell.org/hugs/")
     (synopsis "Functional programming system based on Haskell 98")
     (description
diff --git a/gnu/packages/hurd.scm b/gnu/packages/hurd.scm
index 59a7b55943..d6ce00e15d 100644
--- a/gnu/packages/hurd.scm
+++ b/gnu/packages/hurd.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014, 2015, 2016, 2017 Manolis Fragkiskos Ragkousis <manolis837@gmail.com>
-;;; Copyright © 2018, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2018, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
@@ -51,20 +51,16 @@
             hurd-target?
             hurd-triplet?))
 
-(define (hurd-triplet? triplet)
-  (and (string-suffix? "-gnu" triplet)
-       (not (string-contains triplet "linux"))))
-
 (define (hurd-target?)
   "Return true if the cross-compilation target or the current system is
 GNU/Hurd."
-  (or (and=> (%current-target-system) hurd-triplet?)
+  (or (and=> (%current-target-system) target-hurd?)
       (and (not (%current-target-system))
-           (and=> (%current-system) hurd-triplet?))))
+           (and=> (%current-system) target-hurd?))))
 
 (define (hurd-system?)
   "Return true if the current system is the Hurd."
-  (and=> (%current-system) hurd-triplet?))
+  (and=> (%current-system) target-hurd?))
 
 (define (hurd-source-url version)
   (string-append "mirror://gnu/hurd/hurd-"
@@ -106,9 +102,7 @@ GNU/Hurd."
 
            #:tests? #f))
        (native-inputs
-        `(("autoconf" ,autoconf)
-          ("automake" ,automake)
-          ("texinfo" ,texinfo-4)))
+        (list autoconf automake texinfo-4))
        (home-page "https://www.gnu.org/software/hurd/microkernel/mach/gnumach.html")
        (synopsis "GNU Mach kernel headers")
        (description
@@ -129,12 +123,9 @@ GNU/Hurd."
         "1gyda8sq6b379nx01hkpbd85lz39irdvz2b9wbr63gicicx8i706"))))
     (build-system gnu-build-system)
     ;; Flex is needed both at build and run time.
-    (inputs `(("gnumach-headers" ,gnumach-headers)
-              ("flex" ,flex)
-              ("perl" ,perl)))
+    (inputs (list gnumach-headers flex perl))
     (native-inputs
-     `(("flex" ,flex)
-       ("bison" ,bison)))
+     (list flex bison))
     (arguments `(#:tests? #f
                  #:phases
                  (modify-phases %standard-phases
@@ -186,9 +177,7 @@ communication.")
                (file-name (git-file-name name version))))
      (build-system gnu-build-system)
      (native-inputs
-      `(("mig" ,mig)
-        ("autoconf" ,autoconf)
-        ("automake" ,automake)))
+      (list mig autoconf automake))
      (arguments
       `(#:phases
         (modify-phases %standard-phases
@@ -233,7 +222,7 @@ Library and other user programs.")
 (define-public hurd-minimal
   (package (inherit hurd-headers)
     (name "hurd-minimal")
-    (inputs `(("glibc-hurd-headers" ,glibc/hurd-headers)))
+    (inputs (list glibc/hurd-headers))
     (arguments
      (substitute-keyword-arguments (package-arguments hurd-headers)
        ((#:phases _)
@@ -289,9 +278,7 @@ Library for GNU/Hurd.")
                         (union-build (assoc-ref %outputs "out")
                                      directories)
                         #t))))))
-    (inputs `(("gnumach-headers" ,gnumach-headers)
-              ("hurd-headers" ,hurd-headers)
-              ("hurd-minimal" ,hurd-minimal)))
+    (inputs (list gnumach-headers hurd-headers hurd-minimal))
     (synopsis "Union of the Hurd headers and libraries")
     (description
      "This package contains the union of the Mach and Hurd headers and the
@@ -305,6 +292,8 @@ Hurd-minimal package which are needed for both glibc and GCC.")
     (name "gnumach")
     (arguments
      (substitute-keyword-arguments (package-arguments gnumach-headers)
+       ((#:make-flags flags ''())
+        `(cons "CFLAGS=-fcommon" ,flags))
        ((#:configure-flags flags ''())
         `(cons "--enable-kdb" ,flags))            ;enable kernel debugger
        ((#:phases phases '%standard-phases)
@@ -314,14 +303,9 @@ Hurd-minimal package which are needed for both glibc and GCC.")
                (let* ((out  (assoc-ref outputs "out"))
                       (boot (string-append out "/boot")))
                  (invoke "make" "gnumach.gz")
-                 (install-file "gnumach.gz" boot)
-                 #t)))))))
+                 (install-file "gnumach.gz" boot))))))))
     (native-inputs
-     `(("mig" ,mig)
-       ("perl" ,perl)
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("texinfo" ,texinfo-4)))
+     (list mig perl autoconf automake texinfo-4))
     (supported-systems (cons "i686-linux" %hurd-systems))
     (synopsis "Microkernel of the GNU system")
     (description
@@ -378,9 +362,10 @@ Hurd-minimal package which are needed for both glibc and GCC.")
            (lambda* (#:key inputs #:allow-other-keys)
              (for-each (lambda (var)
                          (setenv var
-                                 (string-append (assoc-ref inputs "libtirpc")
-                                                "/include/tirpc:"
-                                                (or (getenv var) ""))))
+                                 (string-append
+                                  (search-input-directory inputs
+                                                          "include/tirpc")
+                                  ":" (or (getenv var) ""))))
                        '("CROSS_C_INCLUDE_PATH" "C_INCLUDE_PATH"
                          "CROSS_CPATH" "CPATH"))
              #t))
@@ -510,16 +495,18 @@ exec ${system}/rc \"$@\"
                (copy-file "unifont"
                           (string-append datadir "/vga-system.bdf"))
                #t))))
-       #:configure-flags (list (string-append "LDFLAGS=-Wl,-rpath="
-                                              %output "/lib")
-                          "--disable-ncursesw"
-                          "--without-libbz2"
-                          "--without-libz"
-                          "--without-parted"
-                          ;; This is needed to pass the configure check for
-                          ;; clnt_create
-                          "ac_func_search_save_LIBS=-ltirpc"
-                          "ac_cv_search_clnt_create=false")))
+       #:configure-flags
+       ,#~(list (string-append "LDFLAGS=-Wl,-rpath="
+                               #$output "/lib")
+                "--disable-ncursesw"
+                "--without-libbz2"
+                "--without-libz"
+                "--without-parted"
+                ;; This is needed to pass the configure check for
+                ;; clnt_create
+                "ac_func_search_save_LIBS=-ltirpc"
+                "ac_cv_search_clnt_create=false"
+                "CFLAGS=-fcommon")))
     (build-system gnu-build-system)
     (inputs
      `(("glibc-hurd-headers" ,glibc/hurd-headers)
@@ -581,15 +568,15 @@ implementing them.")
       (build-system gnu-build-system)
       (arguments
        `(#:make-flags
-         (list (string-append "SHELL=" (assoc-ref %build-inputs "bash")
-                              "/bin/bash")
+         (list (string-append "SHELL="
+                              (search-input-file %build-inputs "/bin/bash"))
                "PKGDIR=libdde_linux26"
                ,@(if (%current-target-system)
                      (list "CC=i586-pc-gnu-gcc"
                            "LINK_PROGRAM=i586-pc-gnu-gcc")
                      (list "CC=gcc")))
          #:configure-flags
-         (list (string-append "LDFLAGS=-Wl,-rpath=" %output "/lib"))
+         ,#~(list (string-append "LDFLAGS=-Wl,-rpath=" #$output "/lib"))
          #:phases
          (modify-phases %standard-phases
            (delete 'configure)
@@ -625,9 +612,7 @@ implementing them.")
                                             "/bin"))
                #t)))))
       (inputs
-       `(("hurd" ,hurd)
-         ("libpciaccess" ,libpciaccess)
-         ("zlib" ,zlib)))
+       (list hurd libpciaccess zlib))
       (native-inputs
        `(("coreutils" ,coreutils)
          ("gawk" ,gawk)
diff --git a/gnu/packages/hyperledger.scm b/gnu/packages/hyperledger.scm
index 82680cd5e4..2a4b87e927 100644
--- a/gnu/packages/hyperledger.scm
+++ b/gnu/packages/hyperledger.scm
@@ -63,10 +63,7 @@
               (file-name (git-file-name name version))))
     (build-system go-build-system)
     (native-inputs
-     `(("which" ,which)
-       ("docker-cli" ,docker-cli)
-       ("git" ,git)
-       ("curl" ,curl)))
+     (list which docker-cli git curl))
     (arguments
      `(#:import-path "github.com/hyperledger/fabric"
        #:unpack-path "github.com/hyperledger/fabric"
@@ -122,7 +119,7 @@ different components.")
                 "0kr1zwah8mhnpfrpk3h6hdafyqdl3ixhs7czdfscqv6vxqfiabc4"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("googletest" ,googletest)))
+     (list googletest))
     (arguments
      `(#:tests? #f      ; Tests don't build because CMake cannot find GTest main.
        #:configure-flags '("-DHUNTER_ENABLED=OFF"
@@ -182,20 +179,16 @@ link-time.  New implementations can be added as well.")
        #:test-target "."))
     ;; https://github.com/hyperledger/iroha/blob/master/vcpkg/VCPKG_DEPS_LIST
     (native-inputs
-     `(("fmt" ,fmt)
-       ("googletest" ,googletest)
-       ("rapidjson" ,rapidjson)
-       ("rxcpp" ,rxcpp)
-       ("spdlog" ,spdlog)))
+     (list fmt googletest rapidjson rxcpp spdlog))
     (inputs
-     `(("boost" ,boost)
-       ("gflags" ,gflags)
-       ("grpc" ,grpc-1.16.1)
-       ("hyperledger-iroha-ed25519" ,hyperledger-iroha-ed25519)
-       ("postgresql" ,postgresql)
-       ("protobuf" ,protobuf)
-       ("soci" ,soci)
-       ("tbb" ,tbb)))
+     (list boost
+           gflags
+           grpc-1.16.1
+           hyperledger-iroha-ed25519
+           postgresql
+           protobuf
+           soci
+           tbb))
     (synopsis "Simple, decentralized ledger")
     (description "Iroha is a distributed ledger technology (DLT).  Iroha has
 essential functionality for your asset, information and identity management
diff --git a/gnu/packages/i2p.scm b/gnu/packages/i2p.scm
index 1a9958c8d0..b945018ba8 100644
--- a/gnu/packages/i2p.scm
+++ b/gnu/packages/i2p.scm
@@ -44,10 +44,7 @@
         (base32 "1a35grcfw5a9dsj0rnm2i86fjf4px96xbnjj3hkril7hv5jvl37k"))))
     (build-system cmake-build-system)
     (inputs
-     `(("boost" ,boost)
-       ("miniupnpc" ,miniupnpc)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list boost miniupnpc openssl zlib))
     (arguments
      '(#:configure-flags
        (let ((source (assoc-ref %build-inputs "source")))
diff --git a/gnu/packages/ibus.scm b/gnu/packages/ibus.scm
index 48a2445c7d..edaeb59641 100644
--- a/gnu/packages/ibus.scm
+++ b/gnu/packages/ibus.scm
@@ -7,6 +7,8 @@
 ;;; Copyright © 2018, 2019, 2020, 2021 Peng Mei Yu <pengmeiyu@riseup.net>
 ;;; Copyright © 2020 kanichos <kanichos@yandex.ru>
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
+;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
+;;; Copyright © 2021 Songlin Jiang <hollowman@hollowman.ml>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -31,6 +33,7 @@
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system glib-or-gtk)
+  #:use-module (guix build-system python)
   #:use-module (guix utils)
   #:use-module (gnu packages)
   #:use-module (gnu packages anthy)
@@ -42,6 +45,7 @@
   #:use-module (gnu packages databases)
   #:use-module (gnu packages datastructures)
   #:use-module (gnu packages dbm)
+  #:use-module (gnu packages docbook)
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages glib)
@@ -49,18 +53,22 @@
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages iso-codes)
   #:use-module (gnu packages logging)
+  #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-xyz)
+  #:use-module (gnu packages python-web)
   #:use-module (gnu packages serialization)
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages textutils)
   #:use-module (gnu packages unicode)
-  #:use-module (gnu packages xorg))
+  #:use-module (gnu packages xorg)
+  #:use-module (gnu packages xdisorg))
 
 (define-public ibus
   (package
     (name "ibus")
-    (version "1.5.22")
+    (version "1.5.24")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/ibus/ibus/"
@@ -68,12 +76,14 @@
                                   version "/ibus-" version ".tar.gz"))
               (sha256
                (base32
-                "0jmy2w01phpmqnjnfnak7nvfna57mpgfnl87jwc4iai8ijjynw41"))))
+                "07s2ly75xv50bqg37mn37i9akqvcfd45k2mbplxrsqk3a2b3mwxb"))))
     (build-system glib-or-gtk-build-system)
+    (outputs '("out" "doc"))
     (arguments
-     `(#:tests? #f  ; tests fail because there's no connection to dbus
-       #:parallel-build? #f ; race condition discovered with emoji support
+     `(#:parallel-build? #f ; race condition discovered with emoji support
        #:configure-flags (list "--enable-python-library"
+                               "--enable-gtk-doc"
+                               "--enable-memconf"
                                (string-append
                                 "--with-unicode-emoji-dir="
                                 (assoc-ref %build-inputs "unicode-emoji")
@@ -88,6 +98,20 @@
                                "--enable-wayland")
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'disable-failing-tests
+           (lambda _
+             ;; These tests require /etc/machine-id.
+             (with-directory-excursion "src/tests"
+               (substitute* '("ibus-share.c" "ibus-compose.c"
+                              "ibus-keypress.c")
+                 (("[ \t]*return g_test_run \\(\\);") "")))))
+         (add-after 'unpack 'patch-docbook-xml
+           (lambda* (#:key inputs #:allow-other-keys)
+             (with-directory-excursion "docs/reference/ibus"
+               (substitute* "ibus-docs.sgml.in"
+                 (("http://www.oasis-open.org/docbook/xml/4.1.2/")
+                  (string-append (assoc-ref inputs "docbook-xml")
+                                 "/xml/dtd/docbook/"))))))
          (add-after 'unpack 'patch-python-target-directories
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((root (string-append (assoc-ref outputs "out")
@@ -98,13 +122,11 @@
                  (("(py2?overridesdir)=.*" _ var)
                   (string-append var "=" root "/gi/overrides/"))
                  (("(pkgpython2dir=).*" _ var)
-                  (string-append var root "/ibus"))))
-             #t))
+                  (string-append var root "/ibus"))))))
          (add-before 'configure 'disable-dconf-update
            (lambda _
              (substitute* "data/dconf/Makefile.in"
-               (("dconf update") "echo dconf update"))
-             #t))
+               (("dconf update") "echo dconf update"))))
          (add-after 'unpack 'delete-generated-files
            (lambda _
              (for-each (lambda (file)
@@ -112,53 +134,85 @@
                            (when (file-exists? c)
                              (format #t "deleting ~a\n" c)
                              (delete-file c))))
-                       (find-files "." "\\.vala"))
-             #t))
+                       (find-files "." "\\.vala"))))
          (add-after 'unpack 'fix-paths
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "src/ibusenginesimple.c"
                (("/usr/share/X11/locale")
-                (string-append (assoc-ref inputs "libx11")
-                               "/share/X11/locale")))
+                (search-input-directory inputs
+                                        "share/X11/locale")))
              (substitute* "ui/gtk3/xkblayout.vala"
                (("\"(setxkbmap|xmodmap)\"" _ prog)
-                (string-append "\"" (assoc-ref inputs prog) "/bin/" prog "\"")))
-             #t))
+                (string-append "\""
+                               (search-input-file inputs
+                                                  (string-append "bin/" prog))
+                               "\"")))))
+         (add-before 'check 'pre-check
+           (lambda _
+             ;; Tests write to $HOME.
+             (setenv "HOME" (getcwd))
+             ;; Tests look for $XDG_RUNTIME_DIR.
+             (setenv "XDG_RUNTIME_DIR" (getcwd))
+             ;; For missing '/etc/machine-id'.
+             (setenv "DBUS_FATAL_WARNINGS" "0")
+             ;; Tests require a running X server.
+             (system "Xvfb :1 +extension GLX &")
+             (setenv "DISPLAY" ":1")
+             ;; Tests require running iBus daemon.
+             (system "./bus/ibus-daemon --daemonize")))
+         (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"))
+               (rename-file
+                (string-append out "/share/gtk-doc")
+                (string-append doc "/share/gtk-doc")))))
          (add-after 'wrap-program 'wrap-with-additional-paths
            (lambda* (#:key outputs #:allow-other-keys)
              ;; Make sure 'ibus-setup' runs with the correct PYTHONPATH and
              ;; GI_TYPELIB_PATH.
              (let ((out (assoc-ref outputs "out")))
                (wrap-program (string-append out "/bin/ibus-setup")
-                 `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH")))
+                 `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH")))
                  `("GI_TYPELIB_PATH" ":" prefix
                    (,(getenv "GI_TYPELIB_PATH")
-                    ,(string-append out "/lib/girepository-1.0")))))
-             #t)))))
+                    ,(string-append out "/lib/girepository-1.0"))))))))))
     (inputs
      `(("dbus" ,dbus)
        ("dconf" ,dconf)
-       ("gconf" ,gconf)
+       ("glib" ,glib)
        ("gtk2" ,gtk+-2)
        ("gtk+" ,gtk+)
+       ("iso-codes" ,iso-codes)
        ("json-glib" ,json-glib)
        ("libnotify" ,libnotify)
        ("libx11" ,libx11)
+       ("libxkbcommon" ,libxkbcommon)
+       ("libxtst" ,libxtst)
+       ("pygobject" ,python-pygobject)
+       ("python" ,python)
+       ("python-dbus" ,python-dbus)
        ("setxkbmap" ,setxkbmap)
+       ("ucd" ,ucd)
+       ("unicode-cldr-common" ,unicode-cldr-common)
+       ("unicode-emoji" ,unicode-emoji)
        ("wayland" ,wayland)
-       ("xmodmap" ,xmodmap)
-       ("iso-codes" ,iso-codes)
-       ("pygobject2" ,python-pygobject)
-       ("python" ,python)))
+       ("xmodmap" ,xmodmap)))
     (native-inputs
-     `(("glib" ,glib "bin") ; for glib-genmarshal
+     `(("docbook-xml" ,docbook-xml-4.1.2)
+       ("glib" ,glib "bin")             ; for glib-genmarshal
        ("gettext" ,gettext-minimal)
+       ("gnome-common" ,gnome-common)
        ("gobject-introspection" ,gobject-introspection) ; for g-ir-compiler
-       ("ucd" ,ucd)
-       ("unicode-emoji" ,unicode-emoji)
-       ("unicode-cldr-common" ,unicode-cldr-common)
+       ("gtk+:bin" ,gtk+ "bin")
+       ("gtk-doc" ,gtk-doc)
+       ("perl" ,perl)
+       ("pkg-config" ,pkg-config)
+       ("python-wrapper" ,python-wrapper)
        ("vala" ,vala)
-       ("pkg-config" ,pkg-config)))
+       ("which" ,which)
+       ("xorg-server" ,xorg-server-for-tests)))
     (native-search-paths
      (list (search-path-specification
             (variable "IBUS_COMPONENT_PATH")
@@ -195,8 +249,8 @@ may also simplify input method development.")
              ;; PYTHONPATH and GI_TYPELIB_PATH.
              (let ((out (assoc-ref outputs "out")))
                (wrap-program (string-append out "/libexec/ibus-setup-libpinyin")
-                 `("PYTHONPATH" ":" =
-                   (,(getenv "PYTHONPATH")
+                 `("GUIX_PYTHONPATH" ":" prefix
+                   (,(getenv "GUIX_PYTHONPATH")
                     ,(string-append (assoc-ref inputs "ibus")
                                     "/lib/girepository-1.0")
                     ,(string-append (assoc-ref outputs "out")
@@ -217,9 +271,8 @@ may also simplify input method development.")
        ("pygobject2" ,python-pygobject)
        ("gtk+" ,gtk+)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-       ("glib" ,glib "bin")))
+     (list pkg-config intltool
+           `(,glib "bin")))
     (synopsis "Chinese pinyin and ZhuYin input methods for IBus")
     (description
      "This package includes a Chinese pinyin input method and a Chinese
@@ -241,10 +294,9 @@ ZhuYin (Bopomofo) input method based on libpinyin for IBus.")
                 "10h5mjgv4ibhispvr3s1k36a4aclx4dcvcc2knd4sg1xibw0dp4w"))))
     (build-system gnu-build-system)
     (inputs
-     `(("glib" ,glib)
-       ("bdb" ,bdb)))
+     (list glib bdb))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "Library to handle Chinese pinyin")
     (description
      "The libpinyin C++ library provides algorithms needed for sentence-based
@@ -277,8 +329,8 @@ Chinese pinyin input methods.")
                (for-each
                 (lambda (prog)
                   (wrap-program (string-append out "/libexec/" prog)
-                    `("PYTHONPATH" ":" prefix
-                      (,(getenv "PYTHONPATH")))
+                    `("GUIX_PYTHONPATH" ":" prefix
+                      (,(getenv "GUIX_PYTHONPATH")))
                     `("GI_TYPELIB_PATH" ":" prefix
                       (,(getenv "GI_TYPELIB_PATH")
                        ,(string-append out "/lib/girepository-1.0")))))
@@ -290,11 +342,7 @@ Chinese pinyin input methods.")
        ("pkg-config" ,pkg-config)
        ("python" ,python)))
     (inputs
-     `(("anthy" ,anthy)
-       ("gtk+" ,gtk+)
-       ("ibus" ,ibus)
-       ("gobject-introspection" ,gobject-introspection)
-       ("python-pygobject" ,python-pygobject)))
+     (list anthy gtk+ ibus gobject-introspection python-pygobject))
     (synopsis "Anthy Japanese language input method for IBus")
     (description "IBus-Anthy is an engine for the input bus \"IBus\").  It
 adds the Anthy Japanese language input method to IBus.  Because most graphical
@@ -317,6 +365,7 @@ Japanese language input in most graphical applications.")
        (sha256
         (base32
          "0pqk0i3zcii3fx5laj9qzbgd58jvq6wn31j76w4zix2i4b1lqcqv"))
+       (patches (search-patches "librime-fix-build-with-gcc10.patch"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -335,17 +384,15 @@ Japanese language input in most graphical applications.")
                (("link_directories\\($\\{PROJECT_SOURCE_DIR\\}/thirdparty/lib\\)") ""))
              #t)))))
     (inputs
-     `(("boost" ,boost)
-       ("capnproto" ,capnproto)
-       ("glog" ,glog)
-       ("leveldb" ,leveldb)
-       ("marisa" ,marisa)
-       ("opencc" ,opencc)
-       ("yaml-cpp" ,yaml-cpp)))
+     (list boost
+           capnproto
+           glog
+           leveldb
+           marisa
+           opencc
+           yaml-cpp))
     (native-inputs
-     `(("googletest" ,googletest)
-       ("pkg-config" ,pkg-config)
-       ("xorgproto" ,xorgproto))) ; keysym.h
+     (list googletest pkg-config xorgproto)) ; keysym.h
     (home-page "https://rime.im/")
     (synopsis "The core library of Rime Input Method Engine")
     (description "@dfn{librime} is the core library of Rime Input Method
@@ -689,12 +736,12 @@ Method Engine.")
                 "DESTINATION \"${CMAKE_INSTALL_DATADIR}/rime-data\""))
              #t)))))
     (inputs
-     `(("gdk-pixbuf" ,gdk-pixbuf)
-       ("glib" ,glib)
-       ("ibus" ,ibus)
-       ("libnotify" ,libnotify)
-       ("librime" ,librime)
-       ("rime-data" ,rime-data)))
+     (list gdk-pixbuf
+           glib
+           ibus
+           libnotify
+           librime
+           rime-data))
     (native-inputs
      `(("cmake" ,cmake-minimal)
        ("pkg-config" ,pkg-config)))
@@ -749,7 +796,7 @@ hanja dictionary and small hangul character classification.")
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (wrap-program (string-append (assoc-ref outputs "out")
                                           "/libexec/ibus-setup-hangul")
-               `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH")))
+               `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH")))
                `("LD_LIBRARY_PATH" ":" prefix
                  (,(string-append (assoc-ref inputs "libhangul") "/lib")))
                `("GI_TYPELIB_PATH" ":" prefix
@@ -760,14 +807,41 @@ hanja dictionary and small hangul character classification.")
        ("gettext" ,gettext-minimal)
        ("glib:bin" ,glib "bin")))
     (inputs
-     `(("ibus" ,ibus)
-       ("glib" ,glib)
-       ("python-pygobject" ,python-pygobject)
-       ("gtk+" ,gtk+)
-       ("libhangul" ,libhangul)
-       ("python" ,python)))
+     (list ibus
+           glib
+           python-pygobject
+           gtk+
+           libhangul
+           python))
     (home-page "https://github.com/libhangul/ibus-hangul")
     (synopsis "Hangul engine for IBus")
     (description
      "ibus-hangul is a Korean input method engine for IBus.")
     (license gpl2+)))
+
+(define-public ibus-theme-tools
+  (package
+    (name "ibus-theme-tools")
+    (version "4.2.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/openSUSE/IBus-Theme-Tools")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0i8vwnikwd1bfpv4xlgzc51gn6s18q58nqhvcdiyjzcmy3z344c2"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:tests? #f)) ; No tests
+    (propagated-inputs
+     (list python-tinycss2 python-pygobject))
+    (native-inputs
+     `(("gettext" ,gettext-minimal)))
+    (home-page "https://github.com/openSUSE/IBus-Theme-Tools")
+    (synopsis "Tool for IBus Themes")
+    (description "IBus Theme Tools can extract IBus-specific settings from
+GTK themes to apply both within and without GNOME Shell.")
+    (license gpl3+)))
diff --git a/gnu/packages/icu4c.scm b/gnu/packages/icu4c.scm
index 12f8393900..5b8f00863a 100644
--- a/gnu/packages/icu4c.scm
+++ b/gnu/packages/icu4c.scm
@@ -1,13 +1,14 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2015, 2016 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2019, 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2020 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
 ;;; Copyright © 2020 Julien Lepiller <julien@lepiller.eu>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -29,6 +30,7 @@
   #:use-module (gnu packages java)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages python)
+  #:use-module (guix gexp)
   #:use-module (guix licenses)
   #:use-module (guix packages)
   #:use-module (guix utils)
@@ -39,7 +41,7 @@
 (define-public icu4c
   (package
    (name "icu4c")
-   (version "66.1")
+   (version "69.1")
    (source (origin
             (method url-fetch)
             (uri (string-append
@@ -48,10 +50,8 @@
                   "/icu4c-"
                   (string-map (lambda (x) (if (char=? x #\.) #\_ x)) version)
                   "-src.tgz"))
-            (patch-flags '("-p2"))
-            (patches (search-patches "icu4c-CVE-2020-10531.patch"))
             (sha256
-             (base32 "0bharwzc9nzkbrcf405z2nb3h7q0711z450arz0mjmdrk8hg58sj"))))
+             (base32 "0icps0avkwy5df3wwc5kybxcg63hcgk4phdh9g244g0xrmx7pfjc"))))
    (build-system gnu-build-system)
    ;; When cross-compiling, this package needs a source directory of a
    ;; native-build of itself.
@@ -61,7 +61,7 @@
             `(("icu4c-build-root" ,icu4c-build-root))
             '())))
    (inputs
-    `(("perl" ,perl)))
+    (list perl))
    (arguments
     `(#:configure-flags
       (list
@@ -98,10 +98,10 @@ C/C++ part.")
    (license x11)
    (home-page "http://site.icu-project.org/")))
 
-(define-public icu4c-67
+(define-public icu4c-70
   (package
     (inherit icu4c)
-    (version "67.1")
+    (version "70.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -112,12 +112,12 @@ C/C++ part.")
                     "-src.tgz"))
               (sha256
                (base32
-                "1p6mhvxl0xr2n0g6xdps3mwzwlv6mjsz3xlpm793p9aiybb0ra4l"))))))
+                "1m9zgkaf5lyh65nyc6n0n5bs2f5k53nnj1ih6nskpwbvq4l5884d"))))))
 
-(define-public icu4c-68
+(define-public icu4c-67
   (package
     (inherit icu4c)
-    (version "68.2")
+    (version "67.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -128,12 +128,12 @@ C/C++ part.")
                     "-src.tgz"))
               (sha256
                (base32
-                "09fng7a80xj8d5r1cgbgq8r47dsw5jsr6si9p2cj2ylhwgg974f7"))))))
+                "1p6mhvxl0xr2n0g6xdps3mwzwlv6mjsz3xlpm793p9aiybb0ra4l"))))))
 
-(define-public icu4c-69
+(define-public icu4c-68
   (package
     (inherit icu4c)
-    (version "69.1")
+    (version "68.2")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -144,7 +144,7 @@ C/C++ part.")
                     "-src.tgz"))
               (sha256
                (base32
-                "0icps0avkwy5df3wwc5kybxcg63hcgk4phdh9g244g0xrmx7pfjc"))))))
+                "09fng7a80xj8d5r1cgbgq8r47dsw5jsr6si9p2cj2ylhwgg974f7"))))))
 
 (define-public icu4c-build-root
   (package
@@ -168,7 +168,7 @@ C/C++ part.")
 (define-public java-icu4j
   (package
     (name "java-icu4j")
-    (version "66.1")
+    (version "70.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -178,46 +178,42 @@ C/C++ part.")
                     (string-map (lambda (x) (if (char=? x #\.) #\_ x)) version)
                     ".tgz"))
               (sha256
-               (base32 "1ahdyz9209lwl7knb2l3gmnkkby221p0vpgx70fj4j02rdzgvw0d"))))
+               (base32 "0qrs75iyzn19kf54q55jn8wf6xjlpkrihdwqpxm39jdh2hz4cgvj"))))
     (build-system ant-build-system)
     (arguments
      `(#:make-flags
-       (list (string-append "-Djunit.core.jar="
-                            (car (find-files
-                                   (assoc-ref %build-inputs "java-junit")
-                                   ".*.jar$")))
-             (string-append "-Djunit.junitparams.jar="
-                            (car (find-files
-                                   (assoc-ref %build-inputs "java-junitparams")
-                                   ".*.jar$")))
-             (string-append "-Djunit.hamcrest.jar="
-                            (car (find-files
-                                   (assoc-ref %build-inputs "java-hamcrest-core")
-                                   ".*.jar$"))))
+       ,#~(list
+           (string-append "-Djunit.core.jar="
+                          (car (find-files
+                                #$(this-package-native-input "java-junit")
+                                ".*.jar$")))
+           (string-append "-Djunit.junitparams.jar="
+                          (car (find-files
+                                #$(this-package-native-input "java-junitparams")
+                                ".*.jar$")))
+           (string-append "-Djunit.hamcrest.jar="
+                          (car (find-files
+                                #$(this-package-native-input "java-hamcrest-core")
+                                ".*.jar$"))))
        #:phases
        (modify-phases %standard-phases
          (add-before 'configure 'chdir
            (lambda _
-             (chdir "..")
-             #t))
+             (chdir "..")))
          (add-before 'build 'remove-ivy
            (lambda _
              ;; This target wants to download ivy and use it to download
              ;; junit.
              (substitute* "build.xml"
-               (("depends=\"test-init-junit-dependency\"") ""))
-             #t))
+               (("depends=\"test-init-junit-dependency\"") ""))))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((share (string-append (assoc-ref outputs "out")
                                          "/share/java/")))
                (mkdir-p share)
-               (install-file "icu4j.jar" share)
-               #t))))))
+               (install-file "icu4j.jar" share)))))))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-junitparams" ,java-junitparams)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-junitparams java-hamcrest-core))
     (home-page "http://site.icu-project.org/")
     (synopsis "International Components for Unicode")
     (description
diff --git a/gnu/packages/idris.scm b/gnu/packages/idris.scm
index ca2772b904..3e480e06b4 100644
--- a/gnu/packages/idris.scm
+++ b/gnu/packages/idris.scm
@@ -47,44 +47,43 @@
               (sha256
                (base32
                 "1pachwc6msw3n1mz2z1r1w6h518w9gbhdvbaa5vi1qp3cn3wm6q4"))
-              (patches (search-patches "idris-disable-test.patch"))))
+              (patches (search-patches "idris-disable-test.patch"
+                                       "idris-build-with-haskeline-0.8.patch"
+                                       "idris-build-with-megaparsec-9.patch"))))
     (build-system haskell-build-system)
     (native-inputs                      ;For tests
-     `(("perl" ,perl)
-       ("ghc-cheapskate" ,ghc-cheapskate)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-golden" ,ghc-tasty-golden)
-       ("ghc-tasty-rerun" ,ghc-tasty-rerun)))
+     (list perl ghc-cheapskate ghc-tasty ghc-tasty-golden
+           ghc-tasty-rerun))
     (inputs
-     `(("gmp" ,gmp)
-       ("ncurses" ,ncurses)
-       ("ghc-aeson" ,ghc-aeson)
-       ("ghc-annotated-wl-pprint" ,ghc-annotated-wl-pprint)
-       ("ghc-ansi-terminal" ,ghc-ansi-terminal)
-       ("ghc-ansi-wl-pprint" ,ghc-ansi-wl-pprint)
-       ("ghc-async" ,ghc-async)
-       ("ghc-base64-bytestring" ,ghc-base64-bytestring)
-       ("ghc-blaze-html" ,ghc-blaze-html)
-       ("ghc-blaze-markup" ,ghc-blaze-markup)
-       ("ghc-cheapskate" ,ghc-cheapskate)
-       ("ghc-code-page" ,ghc-code-page)
-       ("ghc-fingertree" ,ghc-fingertree)
-       ("ghc-fsnotify" ,ghc-fsnotify)
-       ("ghc-ieee754" ,ghc-ieee754)
-       ("ghc-libffi" ,ghc-libffi)
-       ("ghc-megaparsec" ,ghc-megaparsec)
-       ("ghc-network" ,ghc-network)
-       ("ghc-optparse-applicative" ,ghc-optparse-applicative)
-       ("ghc-regex-tdfa" ,ghc-regex-tdfa)
-       ("ghc-safe" ,ghc-safe)
-       ("ghc-split" ,ghc-split)
-       ("ghc-terminal-size" ,ghc-terminal-size)
-       ("ghc-uniplate" ,ghc-uniplate)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-vector-binary-instances" ,ghc-vector-binary-instances)
-       ("ghc-zip-archive" ,ghc-zip-archive)))
+     (list gmp
+           ncurses
+           ghc-aeson
+           ghc-annotated-wl-pprint
+           ghc-ansi-terminal
+           ghc-ansi-wl-pprint
+           ghc-async
+           ghc-base64-bytestring
+           ghc-blaze-html
+           ghc-blaze-markup
+           ghc-cheapskate
+           ghc-code-page
+           ghc-fingertree
+           ghc-fsnotify
+           ghc-ieee754
+           ghc-libffi
+           ghc-megaparsec
+           ghc-network
+           ghc-optparse-applicative
+           ghc-regex-tdfa
+           ghc-safe
+           ghc-split
+           ghc-terminal-size
+           ghc-uniplate
+           ghc-unordered-containers
+           ghc-utf8-string
+           ghc-vector
+           ghc-vector-binary-instances
+           ghc-zip-archive))
     (arguments
      `(#:configure-flags
        (list (string-append "--datasubdir="
@@ -97,12 +96,11 @@
            (lambda _
              (setenv "LD_LIBRARY_PATH" (string-append (getcwd) "/dist/build"))
              #t))
-         (add-after 'unpack 'update-constraints
+         (add-before 'configure 'update-constraints
            (lambda _
              (substitute* "idris.cabal"
-               (("ansi-terminal < 0\\.9") "ansi-terminal < 0.10")
-               (("cheapskate >= 0\\.1\\.1\\.2 && < 0\\.2") "cheapskate >= 0.1.1.1 && < 0.2"))
-             #t))
+               (("(aeson|ansi-terminal|haskeline|megaparsec|optparse-applicative)\\s+[^,]+" all dep)
+                dep))))
          (add-before 'configure 'set-cc-command
            (lambda _
              (setenv "CC" "gcc")
@@ -213,7 +211,7 @@ Epigram and Agda.")
                   "1pkxnn3ryr0v0cin4nasw7kgkc9dnnpja1nfbj466mf3qv5s98af"))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("idris" ,idris)))
+       (list idris))
       (arguments (idris-default-arguments name))
       (home-page "https://github.com/ziman/lightyear")
       (synopsis "Lightweight parser combinator library for Idris")
@@ -238,7 +236,7 @@ difference: backtracking.")
                   "0g7c3y9smifdz4sivi3qmvymhdr7v9kfq45fmfmmvkqcrix0spzn"))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("idris" ,idris)))
+       (list idris))
       (arguments (idris-default-arguments name))
       (home-page "https://github.com/shayan-najd/wl-pprint")
       (synopsis "Pretty printing library")
@@ -263,7 +261,7 @@ wl-pprint library.")
                   "02vbsd3rmgnj0l1qq787709qcxjbr9890cbad4ykn27f77jk81h4"))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("idris" ,idris)))
+       (list idris))
       (arguments (idris-default-arguments name))
       (home-page "https://github.com/HuwCampbell/Idris-Bifunctors")
       (synopsis "Bifunctor library")
@@ -287,9 +285,9 @@ excellent Haskell Bifunctors package from Edward Kmett.")
                   "06jzfj6rad08rk92w8jk5byi79svmyg0mrcqhibgx8rkjjy6vmai"))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("idris" ,idris)))
+       (list idris))
       (propagated-inputs
-       `(("idris-bifunctors" ,idris-bifunctors)))
+       (list idris-bifunctors))
       (arguments (idris-default-arguments name))
       (home-page "https://github.com/HuwCampbell/idris-lens")
       (synopsis "Van Laarhoven lenses for Idris")
diff --git a/gnu/packages/idutils.scm b/gnu/packages/idutils.scm
index 26472c6900..6d2f003734 100644
--- a/gnu/packages/idutils.scm
+++ b/gnu/packages/idutils.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2015, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -36,7 +36,6 @@
              (sha256
               (base32
                "1hmai3422iaqnp34kkzxdnywl7n7pvlxp11vrw66ybxn9wxg90c1"))
-             (patches (search-patches "diffutils-gets-undeclared.patch"))
              (modules '((guix build utils)))
              (snippet
               '(begin
@@ -49,8 +48,15 @@
                                    "# define _IO_IN_BACKUP 0x100\n"
                                    "#endif\n\n"
                                    "/* BSD stdio derived implementations")))
-                 #t))))
+
+                 ;; 'gets' is deprecated in glibc 2.33 and its declaration is
+                 ;; no longer visible by default from <stdio.h>.
+                 (substitute* "lib/stdio.in.h"
+                   (("_GL_WARN_ON_USE \\(gets.*") ""))))))
     (build-system gnu-build-system)
+    (arguments
+     ;; XXX: These Gnulib tests fail with GCC 10 and glibc 2.33; skip them.
+     '(#:make-flags '("XFAIL_TESTS=test-sprintf-posix test-isnanl-nolibm")))
     (native-inputs `(("emacs" ,emacs-minimal)))
     (home-page "https://www.gnu.org/software/idutils/")
     (synopsis "Identifier database utilities")
diff --git a/gnu/packages/image-processing.scm b/gnu/packages/image-processing.scm
index df77bef192..272f400f67 100644
--- a/gnu/packages/image-processing.scm
+++ b/gnu/packages/image-processing.scm
@@ -17,6 +17,8 @@
 ;;; Copyright © 2021 Andy Tai <atai@atai.org>
 ;;; Copyright © 2021 Ekaitz Zarraga <ekaitz@elenq.tech>
 ;;; Copyright © 2021 Paul Garlick <pgarlick@tourbillion-technology.com>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2021 Ivan Gankevich <i.gankevich@spbu.ru>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -56,6 +58,7 @@
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages geo)
   #:use-module (gnu packages ghostscript)
+  #:use-module (gnu packages gimp)
   #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
@@ -103,15 +106,15 @@
         (base32 "13j5yf3p6qj3mr17d77r3kcqchf055hgvk1w15vmdr8f54mwcnb8"))))
     (build-system cmake-build-system)
     (inputs
-     `(("icu4c" ,icu4c)
-       ("libjpeg" ,libjpeg-turbo)
-       ("libpng" ,libpng)
-       ("libtiff" ,libtiff)
-       ("libxml2" ,libxml2)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list icu4c
+           libjpeg-turbo
+           libpng
+           libtiff
+           libxml2
+           openssl
+           zlib))
     (native-inputs
-     `(("doxygen" ,doxygen)))           ; for HTML documentation
+     (list doxygen))           ; for HTML documentation
     (home-page "https://dcmtk.org")
     (synopsis "Libraries and programs implementing parts of the DICOM standard")
     (description "DCMTK is a collection of libraries and applications
@@ -160,7 +163,7 @@ licences similar to the Modified BSD licence."))))
        ("maxflow" ,maxflow)
        ("niftilib" ,niftilib)
        ("nlopt" ,nlopt)
-       ("openexr" ,openexr)
+       ("openexr" ,openexr-2)
        ("python-lxml" ,python2-lxml)
        ("vtk" ,vtk)))
     (native-inputs
@@ -223,15 +226,12 @@ of external libraries that provide additional functionality.")
                (("/bin/sh") (which "bash")))
              #t)))))
     (native-inputs
-     `(("git" ,git)
-       ("pkg-config" ,pkg-config)))
+     (list git pkg-config))
     (inputs
      ;; XXX Adding freeglut, glew, ilmbase, mesa, and openimageio for
      ;; ocioconvert fails: error: conflicting declaration ?typedef void
      ;; (* PFNGLGETFRAGMENTMATERIALFVSGIXPROC)(GLenum, GLenum, GLfloat*)
-     `(("lcms" ,lcms)
-       ("openexr" ,openexr)
-       ("tinyxml" ,tinyxml)))
+     (list lcms openexr-2 tinyxml))
     (home-page "https://opencolorio.org")
     (synopsis "Color management for visual effects and animation")
     (description
@@ -332,7 +332,7 @@ many popular formats.")
        ("mesa" ,mesa)
        ("netcdf" ,netcdf)
        ("png" ,libpng)
-       ("proj" ,proj.4)
+       ("proj" ,proj)
        ("python", python)
        ;("pugixml" ,pugixml)
        ("sqlite" ,sqlite)
@@ -342,98 +342,7 @@ many popular formats.")
     (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
-     "The Visualization Toolkit (VTK) is a C++ library for 3D computer graphics,
-image processing and visualization.  It supports a wide variety of
-visualization algorithms including: scalar, vector, tensor, texture, and
-volumetric methods; and advanced modeling techniques such as: implicit
-modeling, polygon reduction, mesh smoothing, cutting, contouring, and Delaunay
-triangulation.  VTK has an extensive information visualization framework, has
-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
-    (name "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"))
-              (patches
-               (search-patches "vtk-8-fix-freetypetools-build-failure.patch"))
-              (modules '((guix build utils)))
-              (snippet
-               '(begin
-                  (for-each
-                    (lambda (dir)
-                      (delete-file-recursively
-                        (string-append "ThirdParty/" dir "/vtk" dir)))
-                    ;; ogg, pugixml depended upon unconditionally
-                    '("doubleconversion" "eigen" "expat" "freetype" "gl2ps"
-                      "glew" "hdf5" "jpeg" "jsoncpp" "libproj" "libxml2" "lz4"
-                      "netcdf" "png" "sqlite" "theora" "tiff" "zlib"))
-                  #t))))
-    (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")
-       #:tests? #f))        ;XXX: test data not included
-    (inputs
-     `(("double-conversion" ,double-conversion)
-       ("eigen" ,eigen)
-       ("expat" ,expat)
-       ("freetype" ,freetype)
-       ("gl2ps" ,gl2ps)
-       ("glew" ,glew)
-       ("glu" ,glu)
-       ("hdf5" ,hdf5)
-       ("jpeg" ,libjpeg-turbo)
-       ("jsoncpp" ,jsoncpp)
-       ;("libogg" ,libogg)
-       ("libtheora" ,libtheora)
-       ("libX11" ,libx11)
-       ("libxml2" ,libxml2)
-       ("libXt" ,libxt)
-       ("lz4" ,lz4)
-       ("mesa" ,mesa)
-       ("netcdf" ,netcdf)
-       ("png" ,libpng)
-       ("proj" ,proj.4)
-       ;("pugixml" ,pugixml)
-       ("sqlite" ,sqlite)
-       ("tiff" ,libtiff)
-       ("xorgproto" ,xorgproto)
-       ("zlib" ,zlib)))
+     (list libogg))
     (home-page "https://vtk.org/")
     (synopsis "Libraries for 3D computer graphics")
     (description
@@ -460,13 +369,13 @@ integrates with various databases on GUI toolkits such as Qt and Tk.")
                (base32
                 "0pla1r5mvkgl4sl213gfdhzrypdgai0h3z5mfgm6p9jz9hsr794j"))))
     (inputs
-     `(("jsoncpp" ,jsoncpp-for-tensorflow)
-       ,@(alist-delete "jsoncpp" (package-inputs vtk))))))
+     (modify-inputs (package-inputs vtk)
+       (replace "jsoncpp" jsoncpp-for-tensorflow)))))
 
 (define-public opencv
   (package
     (name "opencv")
-    (version "3.4.3")
+    (version "4.5.4")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -475,14 +384,34 @@ integrates with various databases on GUI toolkits such as Qt and Tk.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "06bc61r8myym4s8im10brdjfg4wxkrvsbhhl7vr1msdan2xddzi3"))
-              (patches
-               (search-patches "opencv-fix-build-of-grfmt_jpeg2000.cpp.patch"))
+                "0gf2xs3r4s51m20mpf0wdidpk0xzp3m2w6jx72fwldhn0pshlmcj"))
               (modules '((guix build utils)))
               (snippet
                '(begin
-                  ;; Remove external libraries. We have all available in Guix:
-                  (delete-file-recursively "3rdparty")
+                  ;; Remove external libraries. We have almost all available
+                  ;; in Guix:
+                  (with-directory-excursion "3rdparty"
+                    (for-each delete-file-recursively
+                              '("carotene"
+                                "cpufeatures"
+                                "ffmpeg"
+                                "include"
+                                "ippicv"
+                                "ittnotify"
+                                "libjasper"
+                                "libjpeg"
+                                "libjpeg-turbo"
+                                "libpng"
+                                "libtengine"
+                                "libtiff"
+                                "libwebp"
+                                "openexr"
+                                "openjpeg"
+                                "openvx"
+                                "protobuf"
+                                ;;"quirc"
+                                "tbb"
+                                "zlib")))
 
                   ;; Milky icon set is non-free:
                   (delete-file-recursively "modules/highgui/src/files_Qt/Milky")
@@ -490,12 +419,12 @@ integrates with various databases on GUI toolkits such as Qt and Tk.")
                   ;; Some jars found:
                   (for-each delete-file
                             '("modules/java/test/pure_test/lib/junit-4.11.jar"
-                              "samples/java/sbt/sbt/sbt-launch.jar"))
-                  #t))))
+                              "samples/java/sbt/sbt/sbt-launch.jar"))))))
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags
-       (list "-DWITH_IPP=OFF"
+       (list "-DWITH_ADE=OFF" ;we don't have a package for ade yet
+             "-DWITH_IPP=OFF"
              "-DWITH_ITT=OFF"
              "-DWITH_CAROTENE=OFF" ; only visible on arm/aarch64
              "-DENABLE_PRECOMPILED_HEADERS=OFF"
@@ -548,60 +477,46 @@ integrates with various databases on GUI toolkits such as Qt and Tk.")
        (modify-phases %standard-phases
          (add-after 'unpack 'disable-broken-tests
            (lambda _
-             ;; These tests fails with:
-             ;; vtkXOpenGLRenderWindow (0x723990): Could not find a decent config
-             ;; I think we have no OpenGL support with the Xvfb.
-             (substitute* '("modules/viz/test/test_tutorial3.cpp"
-                            "modules/viz/test/test_main.cpp"
-                            "modules/viz/test/tests_simple.cpp"
-                            "modules/viz/test/test_viz3d.cpp")
-               (("(TEST\\(Viz, )([a-z].*\\).*)" all pre post)
-                (string-append pre "DISABLED_" post)))
-
-             ;; This one fails with "unknown file: Failure"
+             ;; This test fails with "unknown file: Failure"
              ;; But I couldn't figure out which file was missing:
              (substitute* "../opencv-contrib/modules/face/test/test_face_align.cpp"
                (("(TEST\\(CV_Face_FacemarkKazemi, )(can_detect_landmarks\\).*)"
                  all pre post)
                 (string-append pre "DISABLED_" post)))
 
-             ;; Failure reason: Bad accuracy
-             ;; Incorrect count of accurate poses [2nd case]: 90.000000 / 94.000000
-             (substitute* "../opencv-contrib/modules/rgbd/test/test_odometry.cpp"
-               (("(TEST\\(RGBD_Odometry_Rgbd, )(algorithmic\\).*)" all pre post)
+             ;; This test fails with a comparison between the expected 396 and
+             ;; the actual 440 in file size.
+             (substitute* "modules/imgcodecs/test/test_exr.impl.hpp"
+               (("(TEST\\(Imgcodecs_EXR, )(readWrite_32FC1\\).*)" all pre post)
                 (string-append pre "DISABLED_" post)))
-             #t))
 
+             ;; These fail with protobuf parse errors that come from
+             ;; opencv-extra/testdata.
+             (substitute* "modules/dnn/test/test_layers.cpp"
+               (("(TEST_P\\(Test_Caffe_layers, )\
+(Accum\\).*|DataAugmentation\\).*|Resample\\).*|Correlation\\).*)" all pre post)
+                (string-append pre "DISABLED_" post)))))
          (add-after 'unpack 'unpack-submodule-sources
            (lambda* (#:key inputs #:allow-other-keys)
              (mkdir "../opencv-extra")
              (mkdir "../opencv-contrib")
              (copy-recursively (assoc-ref inputs "opencv-extra")
                                "../opencv-extra")
-             (invoke "tar" "xvf"
-                     (assoc-ref inputs "opencv-contrib")
-                     "--strip-components=1"
-                     "-C" "../opencv-contrib")))
-
-         (add-after 'set-paths 'add-ilmbase-include-path
+             (copy-recursively (assoc-ref inputs "opencv-contrib")
+                               "../opencv-contrib")))
+         (add-after 'build 'do-not-install-3rdparty-file
+           (lambda _
+             (substitute* "cmake_install.cmake"
+               (("file\\(INSTALL .*source/3rdparty/include/opencl/LICENSE.txt.*") "\n"))))
+         (add-before 'check 'start-xserver
            (lambda* (#:key inputs #:allow-other-keys)
-           ;; OpenEXR propagates ilmbase, but its include files do not appear
-           ;; in the CPATH, so we need to add "$ilmbase/include/OpenEXR/" to
-           ;; the CPATH to satisfy the dependency on "ImathVec.h".
-           (setenv "CPATH"
-                   (string-append (assoc-ref inputs "ilmbase")
-                                  "/include/OpenEXR"
-                                  ":" (or (getenv "CPATH") "")))
-           #t))
-       (add-before 'check 'start-xserver
-         (lambda* (#:key inputs #:allow-other-keys)
-           (let ((xorg-server (assoc-ref inputs "xorg-server"))
-                 (disp ":1"))
-             (setenv "HOME" (getcwd))
-             (setenv "DISPLAY" disp)
-             ;; There must be a running X server and make check doesn't start one.
-             ;; Therefore we must do it.
-             (zero? (system (format #f "~a/bin/Xvfb ~a &" xorg-server disp)))))))))
+             (let ((xorg-server (assoc-ref inputs "xorg-server"))
+                   (disp ":1"))
+               (setenv "HOME" (getcwd))
+               (setenv "DISPLAY" disp)
+               ;; There must be a running X server and make check doesn't start one.
+               ;; Therefore we must do it.
+               (zero? (system (format #f "~a/bin/Xvfb ~a &" xorg-server disp)))))))))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("xorg-server" ,xorg-server-for-tests) ; For running the tests
@@ -609,48 +524,50 @@ integrates with various databases on GUI toolkits such as Qt and Tk.")
         ,(origin
            (method git-fetch)
            (uri (git-reference
-                  (url "https://github.com/opencv/opencv_extra")
-                  (commit version)))
+                 (url "https://github.com/opencv/opencv_extra")
+                 (commit version)))
            (file-name (git-file-name "opencv_extra" version))
            (sha256
-            (base32 "08p5xnq8n1jw8svvz0fnirfg7q8dm3p4a5dl7527s5xj0f9qn7lp"))))
+            (base32 "1fg2hxdvphdvagc2fkmhqk7qql9mp7pj2bmp8kmd7vicpr72qk82"))))
        ("opencv-contrib"
         ,(origin
            (method git-fetch)
            (uri (git-reference
-                  (url "https://github.com/opencv/opencv_contrib")
-                  (commit version)))
+                 (url "https://github.com/opencv/opencv_contrib")
+                 (commit version)))
            (file-name (git-file-name "opencv_contrib" version))
-           (patches (search-patches "opencv-rgbd-aarch64-test-fix.patch"))
            (sha256
-            (base32 "1f334glf39nk42mpqq6j732h3ql2mpz89jd4mcl678s8n73nfjh2"))))))
-    (inputs `(("libjpeg" ,libjpeg-turbo)
-              ("libpng" ,libpng)
-              ("jasper" ,jasper)
-              ;; ffmpeg 4.0 causes core dumps in tests.
-              ("ffmpeg" ,ffmpeg-3.4)
-              ("libtiff" ,libtiff)
-              ("hdf5" ,hdf5)
-              ("libgphoto2" ,libgphoto2)
-              ("libwebp" ,libwebp)
-              ("zlib" ,zlib)
-              ("gtkglext" ,gtkglext)
-              ("openexr" ,openexr)
-              ("ilmbase" ,ilmbase)
-              ("gtk+" ,gtk+-2)
-              ("python-numpy" ,python-numpy)
-              ("protobuf" ,protobuf)
-              ("vtk" ,vtk)
-              ("python" ,python)))
+            (base32 "0ga0l4ranp1834gxgp487ll1amvmssa02l2nk5ja5w0rx4d8hh26"))))))
+    (inputs
+     (list ffmpeg
+           gtk+
+           gtkglext
+           hdf5
+           ilmbase
+           imath ;should be propagated by openexr
+           jasper
+           libgphoto2
+           libjpeg-turbo
+           libpng
+           libtiff
+           libwebp
+           openblas
+           openexr
+           openjpeg
+           protobuf
+           python
+           python-numpy
+           vtk
+           zlib))
     ;; These three CVEs are not a problem of OpenCV, see:
     ;; https://github.com/opencv/opencv/issues/10998
     (properties '((lint-hidden-cve . ("CVE-2018-7712"
                                       "CVE-2018-7713"
                                       "CVE-2018-7714"))))
     (synopsis "Computer vision library")
-    (description "OpenCV is a library aimed at
-real-time computer vision, including several hundred computer
-vision algorithms.  It can be used to do things like:
+    (description "OpenCV is a library aimed at real-time computer vision,
+including several hundred computer vision algorithms.  It can be used to do
+things like:
 
 @itemize
 @item image and video input and output
@@ -681,30 +598,29 @@ vision algorithms.  It can be used to do things like:
         (base32 "0vjsh3i0861f6h9as3bch956cidz824zz499pvhjs3lfjn6hhs14"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("gobject-introspection" ,gobject-introspection)
-       ("pkg-config" ,pkg-config)))
+     (list gobject-introspection pkg-config))
     (inputs
-     `(("expat" ,expat)
-       ("fftw" ,fftw)
-       ("giflib" ,giflib)
-       ("glib" ,glib)
-       ("hdf5" ,hdf5)
-       ("imagemagick" ,imagemagick)
-       ("lcms" ,lcms)
-       ("libexif" ,libexif)
-       ("libgsf" ,libgsf)
-       ("libjpeg" ,libjpeg-turbo)
-       ("libpng" ,libpng)
-       ("librsvg" ,librsvg)
-       ("libtiff" ,libtiff)
-       ("libxml2" ,libxml2)
-       ("libwebp" ,libwebp)
-       ("matio" ,matio)
-       ("niftilib" ,niftilib)
-       ("openexr" ,openexr)
-       ("orc" ,orc)
-       ("pango" ,pango)
-       ("poppler" ,poppler)))
+     (list expat
+           fftw
+           giflib
+           glib
+           hdf5
+           imagemagick
+           lcms
+           libexif
+           libgsf
+           libjpeg-turbo
+           libpng
+           librsvg
+           libtiff
+           libxml2
+           libwebp
+           matio
+           niftilib
+           openexr-2
+           orc
+           pango
+           poppler))
     (home-page "https://libvips.github.io/libvips/")
     (synopsis "Multithreaded image processing system with low memory needs")
     (description
@@ -720,14 +636,14 @@ due to its architecture which automatically parallelises the image workflows.")
 (define-public gmic
   (package
     (name "gmic")
-    (version "2.9.7")
+    (version "3.0.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://gmic.eu/files/source/gmic_"
                            version ".tar.gz"))
        (sha256
-        (base32 "05kzaplsl5qvxs7v6g73q0lq8dii8g6v77ap609188m7gr43f9cl"))))
+        (base32 "080inz0wisv3rhvbnzrgcs3j25wq86gybp68yi56gw6vwswnn19z"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f ;there are no tests
@@ -743,18 +659,19 @@ due to its architecture which automatically parallelises the image workflows.")
                       "-Wl,-rpath="
                       (assoc-ref outputs "out") "/lib")))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("curl" ,curl)
-       ("fftw" ,fftw)
-       ("graphicsmagick" ,graphicsmagick)
-       ("libjpeg-turbo" ,libjpeg-turbo)
-       ("libpng" ,libpng)
-       ("libtiff" ,libtiff)
-       ("libx11" ,libx11)
-       ;;("opencv" ,opencv) ;OpenCV is currently broken in the CI
-       ("openexr" ,openexr)
-       ("zlib" ,zlib)))
+     (list curl
+           fftw
+           graphicsmagick
+           imath
+           libjpeg-turbo
+           libpng
+           libtiff
+           libx11
+           ;;opencv ;OpenCV is currently broken in the CI
+           openexr
+           zlib))
     (home-page "https://gmic.eu/")
     (synopsis "Full-featured framework for digital image processing")
     (description "G'MIC is a full-featured framework for digital image
@@ -780,12 +697,10 @@ including 2D color images.")
             (add-after 'unpack 'qt-chdir
               (lambda _ (chdir "gmic-qt") #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list pkg-config qttools))
     (inputs
-     `(("gmic" ,gmic)
-       ("qtbase" ,qtbase-5)
-       ,@(package-inputs gmic)))
+     (modify-inputs (package-inputs gmic)
+       (prepend gmic qtbase-5)))
     (synopsis "Qt frontend for the G'MIC image processing framework")
     (license license:gpl3+)))
 
@@ -801,6 +716,22 @@ including 2D color images.")
                               (assoc-ref %build-inputs "gmic") "/lib")))))
     (synopsis "Krita plugin for the G'MIC image processing framework")))
 
+(define-public gmic-qt-gimp
+  (package
+    (inherit gmic-qt)
+    (name "gmic-qt-gimp")
+    (inputs
+     ;; GIMP and its dependencies.
+     (modify-inputs (package-inputs gmic-qt)
+       (prepend gimp gdk-pixbuf cairo gegl)))
+    (arguments
+     (substitute-keyword-arguments (package-arguments gmic-qt)
+       ((#:configure-flags flags)
+        '(list "-DGMIC_QT_HOST=gimp" "-DENABLE_DYNAMIC_LINKING=ON"
+               (string-append "-DGMIC_LIB_PATH="
+                              (assoc-ref %build-inputs "gmic") "/lib")))))
+    (synopsis "GIMP plugin for the G'MIC image processing framework")))
+
 (define-public nip2
   (package
     (name "nip2")
@@ -840,13 +771,11 @@ including 2D color images.")
        ("matio" ,matio)
        ("lcms" ,lcms)
        ("libwebp" ,libwebp)
-       ("openexr" ,openexr)
+       ("openexr" ,openexr-2)
        ("poppler" ,poppler)
        ("gsl" ,gsl)))
     (native-inputs
-     `(("flex" ,flex)
-       ("bison" ,bison)
-       ("pkg-config" ,pkg-config)))
+     (list flex bison pkg-config))
     (home-page "https://github.com/libvips/nip2")
     (synopsis "Spreadsheet-like GUI for libvips")
     (description "This package provide a graphical user interface (GUI) for
@@ -886,11 +815,7 @@ recalculates.")
            #t))))
     (build-system cmake-build-system)
     (inputs
-     `(("libgeotiff" ,libgeotiff)
-       ("libtiff" ,libtiff)
-       ("libjpeg" ,libjpeg-turbo)
-       ("libpng" ,libpng)
-       ("zlib" ,zlib)))
+     (list libgeotiff libtiff libjpeg-turbo libpng zlib))
     (home-page "https://github.com/vxl/vxl/")
     (synopsis "Collection of C++ libraries for computer vision")
     (description "VXL (the Vision-something-Libraries) is a collection of C++
@@ -976,8 +901,7 @@ libraries designed for computer vision research and implementation.")
        ("vxl" ,vxl-1)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("googletest" ,googletest)
-       ("pkg-config" ,pkg-config)))
+     (list googletest pkg-config))
     (home-page "https://github.com/InsightSoftwareConsortium/ITK/")
     (synopsis "Scientific image processing, segmentation and registration")
     (description "The Insight Toolkit (ITK) is a toolkit for N-dimensional
@@ -1233,7 +1157,7 @@ substituted by matching images.")
            "0kixwjb2x457dq7927hkh34c803p7yh1pmn6n61rk9shqrcg492h"))))
       (build-system qt-build-system)
       (native-inputs
-       `(("qttools" ,qttools)))
+       (list qttools))
       (inputs
        `(("boost" ,boost)
          ("libjpeg" ,libjpeg-turbo)
@@ -1276,9 +1200,7 @@ and Scan Tailor Enhanced versions as well as including many more bug fixes.")
         (base32 "14m92dskzw7bwsr64ha4p0mj3ndv13gwcbfic3qxrs3zq5353s7l"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libtiff" ,libtiff)
-       ("zlib" ,zlib)
-       ("libjpeg-turbo" ,libjpeg-turbo)))
+     (list libtiff zlib libjpeg-turbo))
     (home-page "https://www.astromatic.net/software/stiff")
     (synopsis "Convert scientific FITS images to TIFF format")
     (description
@@ -1312,11 +1234,8 @@ purposes.")
                (invoke "pytest" "-v" "tests"))
              #t)))))
     (propagated-inputs
-      `(("python-matplotlib" ,python-matplotlib)
-        ("python-numpy" ,python-numpy)
-        ("python-pillow" ,python-pillow)
-        ("python-pyyaml" ,python-pyyaml)))
-    (native-inputs `(("python-pytest" ,python-pytest)))
+      (list python-matplotlib python-numpy python-pillow python-pyyaml))
+    (native-inputs (list python-pytest))
     (home-page "http://github.com/wkentaro/imgviz")
     (synopsis "Image Visualization Tools")
     (description "Python library for object detection, semantic and instance
@@ -1326,7 +1245,7 @@ segmentation.")
 (define-public labelme
   (package
     (name "labelme")
-    (version "4.5.9")
+    (version "4.5.13")
     (source
      (origin
        ;; PyPi tarball lacks tests.
@@ -1336,11 +1255,17 @@ segmentation.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "12wn291516kdv0wqngz4l04j95g3rwc6cvkcb0gw8rrv4wgc7c66"))))
+        (base32 "0cmi2xb4dgh7738l259rgwhn9l134f0vnaaqc2gflc5yr3lqhrv2"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'loosen-requirements
+           (lambda _
+             ;; Don't require an outdated version of matplotlib.
+             (substitute* "setup.py"
+               (("matplotlib<3\\.3")
+                "matplotlib"))))
          (add-before 'check 'start-xserver
            (lambda* (#:key inputs #:allow-other-keys)
              (let ((xorg-server (assoc-ref inputs "xorg-server")))
@@ -1362,17 +1287,15 @@ segmentation.")
                (setenv "MPLBACKEND" "agg")
                (invoke "pytest" "-v" "tests" "-m" "not gpu")))))))
     (propagated-inputs
-      `(("python-imgviz" ,python-imgviz)
-        ("python-matplotlib" ,python-matplotlib)
-        ("python-numpy" ,python-numpy)
-        ("python-pillow" ,python-pillow)
-        ("python-pyyaml" ,python-pyyaml)
-        ("python-qtpy" ,python-qtpy)
-        ("python-termcolor" ,python-termcolor)))
+      (list python-imgviz
+            python-matplotlib
+            python-numpy
+            python-pillow
+            python-pyyaml
+            python-qtpy
+            python-termcolor))
     (native-inputs
-      `(("python-pytest" ,python-pytest)
-        ("python-pytest-qt" ,python-pytest-qt)
-        ("xorg-server" ,xorg-server-for-tests)))
+      (list python-pytest python-pytest-qt xorg-server-for-tests))
     (home-page "https://github.com/wkentaro/labelme")
     (synopsis
       "Image Polygonal Annotation")
diff --git a/gnu/packages/image-viewers.scm b/gnu/packages/image-viewers.scm
index 80987a174c..b61a79370d 100644
--- a/gnu/packages/image-viewers.scm
+++ b/gnu/packages/image-viewers.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 Ian Denhardt <ian@zenhack.net>
 ;;; Copyright © 2015, 2016 Alex Kost <alezost@gmail.com>
 ;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
@@ -10,7 +10,7 @@
 ;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2019 Nicolas Goaziou <mail@nicolasgoaziou.fr>
-;;; Copyright © 2019, 2020 Guy Fleury Iteriteka <gfleury@disroot.org>
+;;; Copyright © 2019, 2020, 2022 Guy Fleury Iteriteka <gfleury@disroot.org>
 ;;; Copyright © 2019 Pierre Langlois <pierre.langlois@gmx.com>
 ;;; Copyright © 2020 Peng Mei Yu <pengmeiyu@riseup.net>
 ;;; Copyright © 2020 R Veera Kumar <vkor@vkten.in>
@@ -20,7 +20,9 @@
 ;;; Copyright © 2021 Stefan Reichör <stefan@xsteve.at>
 ;;; Copyright © 2021 Raghav Gururajan <rg@raghavgururajan.name>
 ;;; Copyright © 2021 jgart <jgart@dismail.de>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;; Copyright © 2021 Zheng Junjie <873216071@qq.com>
+;;; Copyright © 2021 dissent <disseminatedissent@protonmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -49,6 +51,7 @@
   #:use-module (guix build-system python)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages algebra)
+  #:use-module (gnu packages backup)
   #:use-module (gnu packages base)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages boost)
@@ -72,6 +75,7 @@
   #:use-module (gnu packages linux)
   #:use-module (gnu packages maths)
   #:use-module (gnu packages ncurses)
+  #:use-module (gnu packages pdf)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages perl-check)
   #:use-module (gnu packages photo)
@@ -225,24 +229,24 @@
                 "report at: https://issues.guix.gnu.org"))))
          (delete 'configure))))         ;no configure script
     (inputs
-     `(("bash" ,bash)
-       ("catimg" ,catimg)
-       ("chafa" ,chafa)
-       ("coreutils" ,coreutils)
-       ("curl" ,curl)
-       ("dmenu" ,dmenu)
-       ("fzf" ,fzf)
-       ("gawk" ,gawk)
-       ("grep" ,grep)
-       ("jp2a" ,jp2a)
-       ("jq" ,jq)
-       ("libnotify" ,libnotify)
-       ("mpv" ,mpv)
-       ("ncurses" ,ncurses)
-       ("python-ueberzug" ,python-ueberzug)
-       ("sed" ,sed)
-       ("util-linux" ,util-linux)
-       ("youtube-dl" ,youtube-dl)))
+     (list bash
+           catimg
+           chafa
+           coreutils
+           curl
+           dmenu
+           fzf
+           gawk
+           grep
+           jp2a
+           jq
+           libnotify
+           mpv
+           ncurses
+           python-ueberzug
+           sed
+           util-linux
+           youtube-dl))
     (synopsis "Watch PeerTube or YouTube videos from the terminal")
     (description "@code{ytfzf} is a POSIX script that helps you find PeerTube or
 YouTube videos without requiring API and opens/downloads them using mpv/ytdl.")
@@ -251,7 +255,7 @@ YouTube videos without requiring API and opens/downloads them using mpv/ytdl.")
 (define-public feh
   (package
     (name "feh")
-    (version "3.7.1")
+    (version "3.7.2")
     (home-page "https://feh.finalrewind.org/")
     (source (origin
               (method url-fetch)
@@ -259,7 +263,7 @@ YouTube videos without requiring API and opens/downloads them using mpv/ytdl.")
                                   name "-" version ".tar.bz2"))
               (sha256
                (base32
-                "1djqjagp7k9rris1p8wgz0q8albgsd8gasc0hyanbjap3yk1rasp"))))
+                "0n42kj18ldlcmrmk5qir9gs9irdl1vz9913n8p941x8cfb98ywc4"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases (delete 'configure))
@@ -270,15 +274,14 @@ YouTube videos without requiring API and opens/downloads them using mpv/ytdl.")
              "exif=1"
              "inotify=1")))
     (native-inputs
-     `(("perl" ,perl)
-       ("perl-test-command" ,perl-test-command)))
-    (inputs `(("imlib2" ,imlib2)
-              ("curl" ,curl)
-              ("libexif" ,libexif)
-              ("libpng" ,libpng)
-              ("libxt" ,libxt)
-              ("libx11" ,libx11)
-              ("libxinerama" ,libxinerama)))
+     (list perl perl-test-command))
+    (inputs (list imlib2
+                  curl
+                  libexif
+                  libpng
+                  libxt
+                  libx11
+                  libxinerama))
     (native-search-paths
      ;; Feh allows overriding the libcurl builtin CA path (unset in Guix)
      ;; with the same variable as the `curl` command line HTTP tool.
@@ -301,7 +304,7 @@ actions.")
 (define-public geeqie
   (package
     (name "geeqie")
-    (version "1.5")
+    (version "1.6")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -309,26 +312,43 @@ actions.")
                     (commit (string-append "v" version))))
               (sha256
                (base32
-                "0nf45sh3pwsv98sppcrqj81b6mdi31n1sbc7gn88m8mhpfp1qq6k"))
-              (file-name (git-file-name name version))))
+                "1i9yd8lddp6b9s9vjjjzbpqj4bvwidxc6kiba6vdrk7dda5akyky"))
+              (file-name (git-file-name name version))
+              (patches (search-patches "geeqie-clutter.patch"))))
     (build-system gnu-build-system)
     (arguments
-     `( ;; Enable support for a "map" pane using GPS data.
-       #:configure-flags '("--enable-map"
-                           "--enable-gtk3")))
+     ;; Enable support for a "map" pane using GPS data.
+     `(#:configure-flags '("CFLAGS=-O2 -g -fcommon"
+                           "--enable-map"
+                           "--enable-gtk3")
+       #:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'correctly-locate-aux-scripts
+                    ;; The git checkout has symlinks under the auxdir
+                    ;; directory pointing to /usr/share/automake-1.16/depcomp
+                    ;; and /usr/share/automake-1.16/install-sh, which causes
+                    ;; the configure phase to fail (see:
+                    ;; https://github.com/BestImageViewer/geeqie/issues/936).
+                    (lambda* (#:key inputs #:allow-other-keys)
+                      (let ((automake (assoc-ref inputs "automake")))
+                        (delete-file "auxdir/depcomp")
+                        (symlink (car (find-files automake "depcomp"))
+                                 "auxdir/depcomp")
+                        (delete-file "auxdir/install-sh")
+                        (symlink (car (find-files automake "install-sh"))
+                                 "auxdir/install-sh")))))))
     (inputs
-     `(("clutter" ,clutter)
-       ("libchamplain" ,libchamplain)
-       ("lcms" ,lcms)
-       ("exiv2" ,exiv2)
-       ("libpng" ,libpng)
-       ("gtk+" ,gtk+)))
+     (list clutter
+           libchamplain
+           lcms
+           exiv2
+           libpng
+           gtk+))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("glib" ,glib "bin")                       ; glib-gettextize
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf
+           automake
+           `(,glib "bin") ; glib-gettextize
+           intltool
+           pkg-config))
     (home-page "http://www.geeqie.org/")
     (synopsis "Lightweight GTK+ based image viewer")
     (description
@@ -353,10 +373,8 @@ collection.  Geeqie was initially based on GQview.")
                (base32
                 "0hi9v0rdx47nys0wvm9xasdrafa34r5kq6crb074a0ipwmc60iiq"))))
     (build-system gnu-build-system)
-    (inputs `(("gtk+" ,gtk+-2)
-              ("libjpeg" ,libjpeg-turbo)))
-    (native-inputs `(("intltool"   ,intltool)
-                     ("pkg-config" ,pkg-config)))
+    (inputs (list gtk+-2 libjpeg-turbo))
+    (native-inputs (list intltool pkg-config))
     (synopsis "Simple and fast image viewer for X")
     (description "gpicview is a lightweight GTK+ 2.x based image viewer.
 It is the default image viewer on LXDE desktop environment.")
@@ -401,12 +419,12 @@ It is the default image viewer on LXDE desktop environment.")
            (lambda* (#:key make-flags #:allow-other-keys)
              (apply invoke "make" "-C" "icon" "install" make-flags))))))
     (inputs
-     `(("freetype" ,freetype)
-       ("giflib" ,giflib)
-       ("imlib2" ,imlib2)
-       ("libexif" ,libexif)
-       ("libx11" ,libx11)
-       ("libxft" ,libxft)))
+     (list freetype
+           giflib
+           imlib2
+           libexif
+           libx11
+           libxft))
     (home-page "https://github.com/muennich/sxiv")
     (synopsis "Simple X Image Viewer")
     (description
@@ -417,10 +435,67 @@ base should be kept small and clean to make it easy for you to dig into
 it and customize it for your needs.")
     (license license:gpl2+)))
 
+(define-public nsxiv
+  (package
+    (name "nsxiv")
+    (version "27.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/nsxiv/nsxiv")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1na7f0hpc9g04nm7991gzaqr5gkj08n2azx833hgxcm2w1pnn1bk"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f                      ;no check target
+       #:make-flags
+       (list (string-append "PREFIX=" %output)
+             (string-append "CC=" ,(cc-for-target)))
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)            ;no configure script
+         (add-after 'unpack 'fix-paths
+           (lambda* (#:key inputs #:allow-other-keys)
+             ;; Xft.h #includes <ft2build.h> without ‘freetype2/’.  The
+             ;; Makefile works around this by hard-coding /usr/include &
+             ;; $PREFIX.
+             (let ((freetype (string-append (assoc-ref inputs "freetype")
+                                            "/include/freetype2")))
+               (substitute* "Makefile"
+                 (("-I/usr/include/freetype2 -I\\$\\(PREFIX\\)/include/freetype2")
+                  (string-append "-I" freetype))))))
+         (add-after 'install 'install-desktop-file
+           (lambda* (#:key outputs #:allow-other-keys)
+             (install-file "nsxiv.desktop"
+                           (string-append (assoc-ref outputs "out")
+                                          "/share/applications"))))
+         (add-after 'install 'install-icons
+           (lambda* (#:key make-flags #:allow-other-keys)
+             (apply invoke "make" "-C" "icon" "install" make-flags))))))
+    (inputs
+     (list freetype
+           giflib
+           imlib2
+           libexif
+           libx11
+           libxft))
+    (home-page "https://github.com/nsxiv/nsxiv")
+    (synopsis "Neo Simple X Image Viewer")
+    (description
+     "nsxiv is a fork of sxiv.  Its primary goal is to provide the most basic
+features required for fast image viewing.  It has vi key bindings and works
+nicely with tiling window managers.  Its code base should be kept small and
+clean to make it easy for you to dig into it and customize it for your
+needs.")
+    (license license:gpl2+)))
+
 (define-public viewnior
   (package
     (name "viewnior")
-    (version "1.7")
+    (version "1.8")
     (source
       (origin
         (method git-fetch)
@@ -429,8 +504,7 @@ it and customize it for your needs.")
                (commit (string-append name "-" version))))
         (file-name (git-file-name name version))
         (sha256
-         (base32
-          "0y4hk3vq8psba5k615w18qj0kbdfp5w0lm98nv5apy6hmcpwfyig"))))
+         (base32 "14qvx1wajncd5ab0207274cwk32f4ipfnlaci6phmah0cwra2did"))))
     (build-system meson-build-system)
     (arguments
      '(#:phases
@@ -451,7 +525,7 @@ it and customize it for your needs.")
      `(("exiv2" ,exiv2)
        ("gdk-pixbuf" ,gdk-pixbuf)
        ("gtk+-2" ,gtk+-2)))
-    (home-page "http://siyanpanayotov.com/project/viewnior")
+    (home-page "https://siyanpanayotov.com/project/viewnior")
     (synopsis "Simple, fast and elegant image viewer")
     (description "Viewnior is an image viewer program.  Created to be simple,
 fast and elegant.  Its minimalistic interface provides more screenspace for
@@ -506,7 +580,7 @@ your images.  Among its features are:
                                        "/bin/catimg.sh"))
              #t)))))
     (inputs
-     `(("imagemagick" ,imagemagick))) ; for the bash script version
+     (list imagemagick)) ; for the bash script version
     (home-page "https://github.com/posva/catimg")
     (synopsis "Render images in the terminal")
     (description
@@ -528,8 +602,7 @@ It supports JPEG, PNG and GIF formats.")
                 "188q0l63nfasqfvwbq4mwx2vh7wsfi2bq9n5nksddspl1qz01lnp"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list pkg-config qttools))
     (inputs
      `(("qtbase" ,qtbase-5)
        ("qtdeclarative" ,qtdeclarative)
@@ -544,7 +617,7 @@ It supports JPEG, PNG and GIF formats.")
        ("libpng" ,libpng)
        ("libjpeg" ,libjpeg-turbo)
        ("lcms" ,lcms)
-       ("openexr" ,openexr)
+       ("openexr" ,openexr-2)
        ("fftw" ,fftwf)
        ("gsl" ,gsl)
        ("libtiff" ,libtiff)))
@@ -558,10 +631,9 @@ It supports JPEG, PNG and GIF formats.")
              ;; not use 'OpenEXR.pc'.  Thus, we need to add
              ;; "$ilmbase/include/OpenEXR/" to the CPATH.
              (setenv "CPATH"
-                     (string-append (assoc-ref inputs "ilmbase")
-                                    "/include/OpenEXR"
-                                    ":" (or (getenv "CPATH") "")))
-             #t)))))
+                     (string-append
+                      (search-input-directory inputs "include/OpenEXR")
+                      ":" (or (getenv "CPATH") ""))))))))
     (home-page "http://qtpfsgui.sourceforge.net")
     (synopsis "High dynamic range (HDR) imaging application")
     (description
@@ -599,10 +671,7 @@ imaging.  It supports several HDR and LDR image formats, and it can:
            "05zl0dkjwbdcm2zlk4nz9w33amlqj8pbf32a8ymshc2356fqhhi5"))))
       (build-system python-build-system)
       (inputs
-       `(("p7zip" ,p7zip)
-         ("python-pillow" ,python-pillow)
-         ("python-pygobject" ,python-pygobject)
-         ("python-pycairo" ,python-pycairo)))
+       (list p7zip python-pillow python-pygobject python-pycairo))
       (arguments
        `(#:tests? #f                    ; FIXME: How do we run tests?
          #:phases
@@ -700,9 +769,7 @@ For PDF support, install the @emph{mupdf} package.")
                (("updateText\\(\\);") ""))
              #t)))))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("qtimageformats" ,qtimageformats)))
+     (list qtbase-5 qtsvg qtimageformats))
     (home-page "https://interversehq.com/qview/")
     (synopsis "Convenient and minimal image viewer")
     (description "qView is a Qt image viewer designed with visually
@@ -714,22 +781,19 @@ preloading.")
 (define-public chafa
   (package
     (name "chafa")
-    (version "1.4.1")
+    (version "1.8.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://hpjansson.org/chafa/releases/chafa-"
                                   version ".tar.xz"))
               (sha256
                (base32
-                "18rb82bfqj1sj2g4irazx4lwq9q4b4k7my1r0q714vf9yhs41ls6"))))
+                "0sr86bnrqcf6wxigrgsglv4fc79g5djmki20ih4hg8kbhcnnbzr1"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("freetype" ,freetype)
-       ("libjpeg" ,libjpeg-turbo)
-       ("glib" ,glib)
-       ("imagemagick" ,imagemagick)))
+     (list freetype libjpeg-turbo glib imagemagick))
     (synopsis "Convert images to ANSI/Unicode characters")
     (description
      "Chafa is a command-line utility that converts all kinds of images,
@@ -741,15 +805,15 @@ displayed in a terminal.")
 (define-public imv
   (package
     (name "imv")
-    (version "4.3.0")
+    (version "4.3.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
-                    (url "https://github.com/eXeC64/imv")
+                    (url "https://git.sr.ht/~exec64/imv")
                     (commit (string-append "v" version))))
               (sha256
                (base32
-                "12xcayyzmfknbff04z8jdlxsnnimgisqiah0bw07cyxx8ksmdzqw"))
+                "01x6qg7nhikqh68gnzrdvq0rxma5v9z19il89y8bvdrcr7r1vh40"))
               (file-name (git-file-name name version))))
     (build-system meson-build-system)
     (arguments
@@ -763,26 +827,22 @@ displayed in a terminal.")
                     (bin (string-append out "/bin")))
                (substitute* (string-append bin "/imv")
                  (("imv-")
-                  (string-append bin "/imv-")))
-               #t))))))
-    (inputs
-     `(("freeimage" ,freeimage)
-       ("glu" ,glu)
-       ("libheif" ,libheif)
-       ("libjpeg-turbo" ,libjpeg-turbo)
-       ("libinih" ,libinih)
-       ("libnsgif" ,libnsgif)
-       ("librsvg" ,librsvg-next)
-       ("libtiff" ,libtiff)
-       ("libxkbcommon" ,libxkbcommon)
-       ("pango" ,pango)
-       ("wayland" ,wayland)))
+                  (string-append bin "/imv-")))))))))
     (native-inputs
-     `(("asciidoc" ,asciidoc)
-       ("cmocka" ,cmocka)
-       ;; why build need it?
-       ("git" ,git-minimal)
-       ("pkg-config" ,pkg-config)))
+     (list asciidoc
+           pkg-config))
+    (inputs
+     (list freeimage
+           glu
+           libheif
+           libjpeg-turbo
+           libinih
+           libnsgif
+           librsvg
+           libtiff
+           libxkbcommon
+           pango
+           wayland))
     (synopsis "Image viewer for tiling window managers")
     (description "@code{imv} is a command line image viewer intended for use
 with tiling window managers.  Features include:
@@ -802,25 +862,32 @@ with tiling window managers.  Features include:
 @item Configurable key bindings and behavior.
 @item Highly scriptable with IPC via imv-msg.
 @end itemize\n")
-    (home-page "https://github.com/eXeC64/imv")
+    (home-page "https://git.sr.ht/~exec64/imv/")
     (license license:expat)))
 
 (define-public qiv
   (package
     (name "qiv")
-    (version "2.3.1")
+    (version "2.3.2")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "http://spiegl.de/qiv/download/qiv-"
                            version ".tgz"))
        (sha256
-        (base32 "1rlf5h67vhj7n1y7jqkm9k115nfnzpwngj3kzqsi2lg676srclv7"))))
+        (base32 "1mc0f2nnas4q0d7zc9r6g4z93i32xlx0p9hl4fn5zkyml24a1q28"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           ;; Fix a typo.  This can probably be removed on the next update.
+           (substitute* "Makefile"
+             (("\\$\\(PREFIX\\)/man")
+              "$(PREFIX)/share/man"))))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ;; That is required for testing.
-       ("xorg-server" ,xorg-server-for-tests)))
+     (list pkg-config
+           ;; That is required for testing.
+           xorg-server-for-tests))
     (inputs
      `(("imlib2" ,imlib2)
        ("glib" ,glib)
@@ -846,8 +913,7 @@ with tiling window managers.  Features include:
              ;; There must be a running X server and make install doesn't start one.
              ;; Therefore we must do it.
              (system "Xvfb :1 &")
-             (setenv "DISPLAY" ":1")
-             #t)))
+             (setenv "DISPLAY" ":1"))))
        #:tests? #f                      ; there is no check target
        #:make-flags
        (list
@@ -862,6 +928,49 @@ rotate left/right, jump/forward/backward images, filename filter and use it
 to set X desktop background.")
     (license license:gpl2)))
 
+(define-public pqiv
+  (package
+    (name "pqiv")
+    (version "2.12")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/phillipberndt/pqiv")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "18nvrqmlifh4m8nfs0d19sb9d1l3a95xc89qxqdr881jcxdsgflw"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     (list pkg-config))
+    (inputs
+     (list ffmpeg
+           gtk+
+           imagemagick
+           libarchive
+           libspectre
+           libwebp
+           poppler))
+    (arguments
+     `(#:tests? #f                      ;no tests
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure))           ;no configure script
+       #:make-flags
+       (list
+        (string-append "PREFIX=" (assoc-ref %outputs "out"))
+        (string-append "CC=" ,(cc-for-target))
+        (string-append "PKG_CONFIG=" ,(pkg-config-for-target)))))
+    (home-page "https://www.pberndt.com/Programme/Linux/pqiv")
+    (synopsis "Powerful image viewer with minimal UI")
+    (description
+     "pqiv is a GTK-3 based command-line image viewer with a minimal UI.
+It is highly customizable, can be fully controlled from scripts, and has
+support for various file formats including PDF, Postscript, video files and
+archives.")
+    (license license:gpl3+)))
+
 (define-public nomacs
   (package
     (name "nomacs")
@@ -906,7 +1015,7 @@ to set X desktop background.")
        ("libtiff" ,libtiff)
        ("opencv" ,opencv)
        ("python" ,python-wrapper)
-       ("quazip" ,quazip)
+       ("quazip" ,quazip-0)
        ("qtbase" ,qtbase-5)
        ("qtsvg" ,qtsvg)))
     (native-inputs
@@ -952,10 +1061,9 @@ synchronization of multiple instances.")
                (install-file "src/xzgv" bin))))) ; just install the executable
        #:tests? #f))                             ; no rule for target 'test'
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("gtk+" ,gtk+-2)
-       ("libexif" ,libexif)))
+     (list gtk+-2 libexif))
     (home-page "https://sourceforge.net/projects/xzgv/")
     (synopsis "Picture viewer for X with a thumbnail-based selector")
     (description
diff --git a/gnu/packages/image.scm b/gnu/packages/image.scm
index 6e67c56d78..6cf171a410 100644
--- a/gnu/packages/image.scm
+++ b/gnu/packages/image.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2017, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2017, 2019, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013, 2015, 2016 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2014, 2015, 2016, 2020 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2014, 2015 Alex Kost <alezost@gmail.com>
@@ -11,7 +11,7 @@
 ;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2016 Eric Bavier <bavier@member.fsf.org>
-;;; Copyright © 2016, 2017, 2020 Arun Isaac <arunisaac@systemreboot.net>
+;;; Copyright © 2016, 2017, 2020, 2021 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2016, 2017 Kei Kebreau <kkebreau@posteo.net>
 ;;; Copyright © 2017 Nikita <nikita@n0.is>
 ;;; Copyright © 2017,2019,2020 Hartmut Goebel <h.goebel@crazy-compilers.com>
@@ -26,10 +26,12 @@
 ;;; Copyright © 2020 Giacomo Leidi <goodoldpaul@autistici.org>
 ;;; Copyright © 2020 R Veera Kumar <vkor@vkten.in>
 ;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2020 Zhu Zihao <all_but_last@163.com>
 ;;; Copyright © 2020, 2021 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2021 Sharlatan Hellseher <sharlatanus@gmail.com>
 ;;; Copyright © 2021 Nicolò Balzarotti <nicolo@nixo.xyz>
+;;; Copyright © 2021 Alexandr Vityazev <avityazev@posteo.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -55,13 +57,13 @@
   #:use-module (gnu packages boost)
   #:use-module (gnu packages check)
   #:use-module (gnu packages cmake)
+  #:use-module (gnu packages cpp)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages gettext)
-  #:use-module (gnu packages gcc)
   #:use-module (gnu packages ghostscript)
   #:use-module (gnu packages gimp)
   #:use-module (gnu packages gl)
@@ -90,6 +92,7 @@
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
+  #:use-module (gnu packages fonts)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
@@ -113,8 +116,8 @@
      (origin
        (method url-fetch)
        (uri
-        (string-append "https://sourceforge.net/projects/iqa/files/"
-                       "1.1.2%20Release/iqa_1.1.2_src.tar.gz/download"))
+        (string-append "mirror://sourceforge/iqa/"
+                       version " Release" "/iqa_" version "_src.tar.gz"))
        (sha256
         (base32 "00mgwy031ammab6bwmd1whhvqv3fxy1cs1igabq0n3ag12zhjs77"))))
     (build-system gnu-build-system)
@@ -159,7 +162,7 @@ code is Valgrind-clean and unit tested.")
     `(#:configure-flags '("--disable-static")))
 
    ;; libpng.la says "-lz", so propagate it.
-   (propagated-inputs `(("zlib" ,zlib)))
+   (propagated-inputs (list zlib))
 
    (synopsis "Library for handling PNG files")
    (description
@@ -223,10 +226,10 @@ library.  It supports almost all PNG features and is extensible.")
                    (base32
                     "1dh0250mw9b2hx7cdmnb2blk7ddl49n6vx8zz7jdmiwxy38v4fw2"))))))
     (native-inputs
-     `(("libtool" ,libtool)))
+     (list libtool))
     ;; libpng.la says "-lz", so propagate it.
     (propagated-inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (synopsis "APNG patch for libpng")
     (description
      "APNG (Animated Portable Network Graphics) is an unofficial
@@ -281,8 +284,7 @@ APNG patch provides APNG support to libpng.")
                (string-append (assoc-ref outputs "out") "/")))
             #t)))))
    (inputs
-    `(("libpng" ,libpng)
-      ("zlib" , zlib)))
+    (list libpng zlib))
    (home-page "https://pmt.sourceforge.io/pngcrush")
    (synopsis "Utility to compress PNG files")
    (description "Pngcrush optimizes @acronym{PNG, Portable Network Graphics}
@@ -337,7 +339,7 @@ images.  It can further losslessly compress them by as much as 40%.")
                  (install-file "pnglite.h" include)
                  (install-file "README.md" doc)
                  #t))))))
-      (inputs `(("zlib" ,zlib)))
+      (inputs (list zlib))
       (home-page "https://github.com/dankar/pnglite")
       (synopsis "Pretty small png library")
       (description "A pretty small png library.
@@ -387,12 +389,9 @@ and other PNG optimizers.")
        #:configure-flags
        '("--with-openmp" "--with-lcms2")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libpng" ,libpng)
-       ("zlib" , zlib)
-       ("lcms" ,lcms)
-       ("libimagequant" ,libimagequant)))
+     (list libpng zlib lcms libimagequant))
     (home-page "https://pngquant.org/")
     (synopsis "Utility and library for lossy compressing PNG images")
     (description "pngquant is a PNG compressor that significantly reduces file
@@ -563,8 +562,7 @@ maximum quality factor.")
                 "1hjm8lwap7bjyyxsyi94fh5817xzqhk4kb5y0b7mb6675xw10prk"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libpng" ,libpng)
-       ("jasper" ,jasper)))
+     (list libpng jasper))
     (arguments
      `(#:tests? #t)) ; No tests.
     (home-page "http://icns.sourceforge.net/")
@@ -583,7 +581,7 @@ extracting icontainer icon files.")
 (define-public libtiff
   (package
    (name "libtiff")
-   (version "4.1.0")
+   (version "4.3.0")
    (source
      (origin
        (method url-fetch)
@@ -591,11 +589,10 @@ extracting icontainer icon files.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "0d46bdvxdiv59lxnb0xz9ywm8arsr6xsapi5s6y6vnys2wjz6aax"))))
-   (replacement libtiff/fixed)
+         "1j3snghqjbhwmnm5vz3dr1zm68dj15mgbx1wqld7vkl7n2nfaihf"))))
    (build-system gnu-build-system)
    (outputs '("out"
-              "doc"))                           ;1.3 MiB of HTML documentation
+              "doc"))                           ;1.8 MiB of HTML documentation
    (arguments
     ;; Instead of using --docdir, this package has its own --with-docdir.
     `(#:configure-flags
@@ -616,20 +613,6 @@ collection of tools for doing simple manipulations of TIFF images.")
                                   "See COPYRIGHT in the distribution."))
    (home-page "http://www.simplesystems.org/libtiff/")))
 
-(define-public libtiff/fixed
-  (package
-    (inherit libtiff)
-    (name "libtiff")
-    (version "4.2.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://download.osgeo.org/libtiff/tiff-"
-                           version ".tar.gz"))
-       (sha256
-        (base32
-         "1jrkjv0xya9radddn8idxvs2gqzp3l2b1s8knlizmn7ad3jq817b"))))))
-
 (define-public leptonica
   (package
     (name "leptonica")
@@ -645,11 +628,11 @@ collection of tools for doing simple manipulations of TIFF images.")
         (base32 "12ddln72z5l3icz0i9rpsfkg5xik8fcwcn8lb0cp3jigjxi8gvkg"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("gnuplot" ,gnuplot)             ;needed for test suite
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list gnuplot ;needed for test suite
+           autoconf
+           automake
+           libtool
+           pkg-config))
     (inputs
      `(("giflib" ,giflib)
        ("libjpeg" ,libjpeg-turbo)
@@ -692,15 +675,15 @@ arithmetic ops.")
 (define-public jbig2dec
   (package
     (name "jbig2dec")
-    (version "0.18")
+    (version "0.19")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/ArtifexSoftware"
                                   "/ghostpdl-downloads/releases/download"
-                                  "/gs951/" name "-" version ".tar.gz"))
+                                  "/gs9533/" name "-" version ".tar.gz"))
               (sha256
                (base32
-                "0pigfw2v0ppvr0lbysm69gx0zsa5q2q92yrb8af2j3im6x97f6cy"))))
+                "0dwa24kjqyg9hmm40fh048sdxfpnasz43l2rm8wlkw1qbdlpd517"))))
     (build-system gnu-build-system)
     (arguments '(#:configure-flags '("--disable-static")
                  #:phases (modify-phases %standard-phases
@@ -718,7 +701,7 @@ arithmetic ops.")
      `(("autoconf" ,autoconf)
        ("automake" ,automake)
        ("libtool" ,libtool)
-       ("python" ,python-wrapper)))     ;for tests
+       ("python" ,python-minimal-wrapper)))     ;for tests
     (synopsis "Decoder of the JBIG2 image compression format")
     (description
       "JBIG2 is designed for lossy or lossless encoding of @code{bilevel} (1-bit
@@ -811,17 +794,17 @@ images of initially unknown height.")
 (define-public openjpeg-data
   (package
     (name "openjpeg-data")
-    (version "2020.05.19")
+    (version "2020.11.30")
     (source
      (origin
        (method git-fetch)
        (uri
         (git-reference
          (url "https://github.com/uclouvain/openjpeg-data")
-         (commit "c5c4a8c")))
+         (commit "cd724fb1f93e6af41ebc68c4904f4bf2a4cd1e60")))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1jp84gbhw8q5b8mhc322ql9410hjf32w9hg10x4isfa9j59mnncb"))))
+        (base32 "1q2swh4g9r9haqs075fyk42aclqcs9q51lqqzfb57lisszminpwm"))))
     (build-system copy-build-system)
     (synopsis "Test files for OpenJPEG")
     (description "OpenJPEG-Data contains all files required to run the openjpeg
@@ -833,28 +816,49 @@ test suite, including conformance tests (following Rec. ITU-T T.803 | ISO/IEC
 (define-public openjpeg
   (package
     (name "openjpeg")
-    (version "2.3.1")
+    (version "2.4.0")
     (source
      (origin
        (method git-fetch)
-       (uri
-        (git-reference
-         (url "https://github.com/uclouvain/openjpeg")
-         (commit
-          (string-append "v" version))))
-       (file-name
-        (git-file-name "openjpeg" version))
+       (uri (git-reference
+             (url "https://github.com/uclouvain/openjpeg")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
        (sha256
-        (base32 "1dn98d2dfa1lqyxxmab6rrcv52dyhjr4g7i4xf2w54fqsx14ynrb"))))
+        (base32 "143dvy5g6v6129lzvl0r8mrgva2fppkn0zl099qmi9yi9l9h7yyf"))))
     (build-system cmake-build-system)
     (arguments
-     '(#:tests? #f           ;TODO: requires a 1.1 GiB data repository
-       #:configure-flags '("-DBUILD_STATIC_LIBS=OFF")))
+     `(#:configure-flags
+       (list
+        "-DBUILD_STATIC_LIBS=OFF"
+        "-DBUILD_UNIT_TESTS=ON"
+        "-DBUILD_TESTING=ON"
+        (string-append "-DOPJ_DATA_ROOT="
+                       (assoc-ref %build-inputs "openjpeg-data")))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'disable-failing-tests
+           (lambda _
+             ;; To be re-enabled after upstream fixes the bug,
+             ;; https://github.com/uclouvain/openjpeg/issues/1264
+             (substitute* "tests/CMakeLists.txt"
+               (("add_subdirectory\\(nonregression\\)")
+                ""))
+             ;; These tests fail on all architectures except x86_64
+             (substitute* "tests/conformance/CMakeLists.txt"
+               ;; 4, 5, 6 fail
+               (("numFileC1P0 RANGE 1 16") "numFileC1P0 RANGE 7 16")
+               ;; 2, 3, 4, 5 fail
+               (("numFileC1P1 RANGE 1 7") "numFileC1P1 1 6 7")
+               ;; 2, 3 fail
+               (("numFileJP2 RANGE 1 9") "numFileJP2 RANGE 4 9")
+               ;; All fail
+               (("subsampling.*") "")
+               (("zoo.*") "")))))))
+    (native-inputs
+     (list openjpeg-data)) ; Files for test-suite
     (inputs
-     `(("lcms" ,lcms)
-       ("libpng" ,libpng)
-       ("libtiff" ,libtiff)
-       ("zlib" ,zlib)))
+     (list lcms libpng libtiff zlib))
     (synopsis "OPENJPEG Library and Applications")
     (description "OpenJPEG is an implementation of JPEG 2000 codec written in C
 language.  It has been developed in order to promote the use of JPEG 2000, a
@@ -969,7 +973,7 @@ compose, and analyze GIF images.")
                    (("^EXECINPUT=.*")
                     (format #f "EXECINPUT=~a~%" execinput)))
                  (invoke "sh" "testit.sh"))))))))
-    (native-inputs `(("drm-tools" ,drm-tools))) ;for tests
+    (native-inputs (list drm-tools)) ;for tests
     (home-page "http://libuemf.sourceforge.net/")
     (synopsis "Library for working with WFM, EMF and EMF+ images")
     (description "The libUEMF library is a portable C99 implementation for
@@ -990,7 +994,7 @@ Metafile}, and @acronym{EMF+, Enhanced Metafile Plus} files.")
                (base32
                 "0cnksimmmjngdrys302ik1385sg1sj4i0gxivzldhgwd46n7x2kh"))))
     (build-system gnu-build-system)
-    (inputs `(("perl" ,perl)))          ;package ships some perl tools
+    (inputs (list perl))          ;package ships some perl tools
     (home-page "http://giflib.sourceforge.net/")
     (synopsis "GIF decompression library")
     (description
@@ -1062,8 +1066,7 @@ more modular, simple, and flexible.")
                 "1b4bmbmj52glq0s898lppkpzxlprq9aav49r06j2wx4dv3212rhp"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libx11" ,libx11)
-       ("imlib2" ,imlib2)))
+     (list libx11 imlib2))
     (home-page
      ;; This vanished page is universally accepted as giblib's home despite not
      ;; mentioning the package once.
@@ -1147,8 +1150,7 @@ supplies a generic doubly-linked list and some string functions.")
                            "-I" (assoc-ref %build-inputs "libjxr") "/include/jxrlib"))
       #:tests? #f)) ; no check target
    (native-inputs
-    `(("pkg-config" ,pkg-config)
-      ("unzip" ,unzip)))
+    (list pkg-config unzip))
    (inputs
     `(("libjpeg" ,libjpeg-turbo)
       ("libjxr" ,libjxr)
@@ -1156,7 +1158,7 @@ supplies a generic doubly-linked list and some string functions.")
       ("libraw" ,libraw)
       ("libtiff" ,libtiff)
       ("libwebp" ,libwebp)
-      ("openexr" ,openexr)
+      ("openexr" ,openexr-2)
       ("openjpeg" ,openjpeg)
       ("zlib" ,zlib)))
    (synopsis "Library for handling popular graphics image formats")
@@ -1167,79 +1169,87 @@ graphics image formats like PNG, BMP, JPEG, TIFF and others.")
    (home-page "http://freeimage.sourceforge.net")))
 
 (define-public vigra
-  (package
-   (name "vigra")
-   (version "1.11.1")
-   (source
-    (origin
-      (method url-fetch)
-      (uri (string-append "https://github.com/ukoethe/vigra/releases/download/"
-                          "Version-" (string-join (string-split version #\.) "-")
-                          "/vigra-" version "-src.tar.gz"))
-      (patches (search-patches "vigra-python-compat.patch"))
-      (sha256 (base32
-                "1bqs8vx5i1bzamvv563i24gx2xxdidqyxh9iaj46mbznhc84wmm5"))))
-   (build-system cmake-build-system)
-   (inputs
-    `(("boost" ,boost)
-      ("fftw" ,fftw)
-      ("fftwf" ,fftwf)
-      ("hdf5" ,hdf5)
-      ("ilmbase" ,ilmbase) ; propagated by openexr, but needed explicitly
-                           ; to create a configure-flag
-      ("libjpeg" ,libjpeg-turbo)
-      ("libpng" ,libpng)
-      ("libtiff" ,libtiff)
-      ("openexr" ,openexr)
-      ("python" ,python-wrapper)
-      ("python-numpy" ,python-numpy)
-      ("zlib" ,zlib)))
-   (native-inputs
-    `(("doxygen" ,doxygen)
-      ("python-nose" ,python-nose)
-      ("sphinx" ,python-sphinx)))
-   (arguments
-    `(#:test-target "check"
-      #:phases
-      (modify-phases %standard-phases
-        (add-after 'unpack 'disable-broken-tests
-          (lambda _
-            ;; See https://github.com/ukoethe/vigra/issues/432
-            (substitute* "test/fourier/CMakeLists.txt"
-              (("VIGRA_ADD_TEST.*") ""))
-            ;; This test fails with Numpy 1.15:
-            ;; <https://github.com/ukoethe/vigra/issues/436>.
-            (substitute* "vigranumpy/test/CMakeLists.txt"
-              (("test1\\.py") ""))
-            #t)))
-      #:configure-flags
-        (list "-Wno-dev" ; suppress developer mode with lots of warnings
-              (string-append "-DVIGRANUMPY_INSTALL_DIR="
-                             (assoc-ref %outputs "out")
-                             "/lib/python"
-                             ,(version-major+minor (package-version python))
-                             "/site-packages")
-              ;; OpenEXR is not enabled by default.
-              "-DWITH_OPENEXR=1"
-              ;; Fix rounding error on 32-bit machines
-              "-DCMAKE_C_FLAGS=-ffloat-store"
-              ;; The header files of ilmbase are not found when included
-              ;; by the header files of openexr, and an explicit flag
-              ;; needs to be set.
-              (string-append "-DCMAKE_CXX_FLAGS=-I"
-                             (assoc-ref %build-inputs "ilmbase")
-                             "/include/OpenEXR"
-                             " -ffloat-store"))))
-   (synopsis "Computer vision library")
-   (description
-    "VIGRA stands for Vision with Generic Algorithms.  It is an image
-processing and analysis library that puts its main emphasis on customizable
-algorithms and data structures.  It is particularly strong for
-multi-dimensional image processing.")
-   (license license:expat)
-   (home-page "https://ukoethe.github.io/vigra/")
-   (properties '((max-silent-time . 7200))))) ;2 hours, to avoid timing out
-
+    (let ((commit "9b514fa00a136f5fd81bb57ee9f6293c333ffc1f")
+          (revision "0"))
+    (package
+     (name "vigra")
+     (version (git-version "1.11.1" revision commit))
+     (source
+      (origin
+        ;; The last release is 1.11.1, from 2017. It's becoming more and more
+        ;; difficult to build this old release, and the upstream developers
+        ;; suggest on their home page to build from the Git repo, saying "It is
+        ;; generally safe to use the 'master' branch of the development snapshot,
+        ;; as we avoid uploading untested or incompatible changes to this branch."
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/ukoethe/vigra")
+               (commit commit)))
+        (file-name (git-file-name name version))
+        (sha256 (base32
+                  "1vzlypviala109imwxkp46lqhhxszf79ypfb8wxg6z7g02j7mm73"))))
+     (build-system cmake-build-system)
+     (inputs
+      `(("boost" ,boost)
+        ("fftw" ,fftw)
+        ("fftwf" ,fftwf)
+        ("hdf5" ,hdf5)
+        ("ilmbase" ,ilmbase) ; propagated by openexr, but needed explicitly
+                             ; to create a configure-flag
+        ("libjpeg" ,libjpeg-turbo)
+        ("libpng" ,libpng)
+        ("libtiff" ,libtiff)
+        ("openexr" ,openexr-2)
+        ("python" ,python-wrapper)
+        ;("python-numpy" ,python-numpy)
+        ("zlib" ,zlib)))
+     (native-inputs
+      `(("doxygen" ,doxygen)
+        ("python-nose" ,python-nose)
+        ("sphinx" ,python-sphinx)))
+     (arguments
+      `(#:test-target "check"
+        #:phases
+        (modify-phases %standard-phases
+          (add-after 'unpack 'disable-broken-tests
+            (lambda _
+              ;; See https://github.com/ukoethe/vigra/issues/432
+              (substitute* "test/fourier/CMakeLists.txt"
+                (("VIGRA_ADD_TEST.*") ""))
+              ;; This test fails with Numpy 1.15:
+              ;; <https://github.com/ukoethe/vigra/issues/436>.
+              (substitute* "vigranumpy/test/CMakeLists.txt"
+                (("test1\\.py") ""))
+              #t)))
+        #:configure-flags
+          (list "-Wno-dev" ; suppress developer mode with lots of warnings
+                (string-append "-DVIGRANUMPY_INSTALL_DIR="
+                               (assoc-ref %outputs "out")
+                               "/lib/python"
+                               ,(version-major+minor (package-version python))
+                               "/site-packages")
+                ;; Vigranumpy isn't compatible with numpy >= 1.20.
+                "-DWITH_VIGRANUMPY=0"
+                ;; OpenEXR is not enabled by default.
+                "-DWITH_OPENEXR=1"
+                ;; Fix rounding error on 32-bit machines
+                "-DCMAKE_C_FLAGS=-ffloat-store"
+                ;; The header files of ilmbase are not found when included
+                ;; by the header files of openexr, and an explicit flag
+                ;; needs to be set.
+                (string-append "-DCMAKE_CXX_FLAGS=-I"
+                               (assoc-ref %build-inputs "ilmbase")
+                               "/include/OpenEXR"
+                               " -ffloat-store"))))
+     (synopsis "Computer vision library")
+     (description
+      "VIGRA stands for Vision with Generic Algorithms.  It is an image
+  processing and analysis library that puts its main emphasis on customizable
+  algorithms and data structures.  It is particularly strong for
+  multi-dimensional image processing.")
+     (license license:expat)
+     (home-page "https://ukoethe.github.io/vigra/")
+     (properties '((max-silent-time . 7200)))))) ;2 hours, to avoid timing out
 
 (define-public vigra-c
   (let* ((commit "66ff4fa5a7d4a77415caa676a45c2c6ea16562e7")
@@ -1261,12 +1271,9 @@ multi-dimensional image processing.")
       (arguments
        `(#:tests? #f))                  ; No test target.
       (native-inputs
-       `(("doxygen" ,doxygen)))
+       (list doxygen))
       (inputs
-       `(("fftw" ,fftw)
-         ("fftwf" ,fftwf)
-         ("hdf5" ,hdf5)
-         ("vigra" ,vigra)))
+       (list fftw fftwf hdf5 vigra))
       (synopsis "C interface to the VIGRA computer vision library")
       (description
        "This package provides a C interface to the VIGRA C++ computer vision
@@ -1277,7 +1284,7 @@ language bindings to VIGRA.")
 (define-public libwebp
   (package
     (name "libwebp")
-    (version "1.1.0")
+    (version "1.2.0")
     (source
      (origin
        ;; No tarballs are provided for >0.6.1.
@@ -1288,7 +1295,7 @@ language bindings to VIGRA.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0r2yy9if0ndvpzadk39bigvsygyqnlv0xjb9w2aj6rs534mncazz"))))
+         "1rgblphsd56033w7lpkrzl7m5w0fi7wavxri1ayzlg8fhpmmqp4k"))))
     (build-system gnu-build-system)
     (inputs
      `(("freeglut" ,freeglut)
@@ -1297,9 +1304,7 @@ language bindings to VIGRA.")
        ("libpng" ,libpng)
        ("libtiff" ,libtiff)))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (arguments
      '(#:configure-flags '("--enable-libwebpmux"
                            "--enable-libwebpdemux"
@@ -1344,24 +1349,29 @@ channels.")
 (define-public exiv2
   (package
     (name "exiv2")
-    (version "0.27.4")
+    (version "0.27.5")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://www.exiv2.org/builds/exiv2-" version
                            "-Source.tar.gz"))
        (sha256
-        (base32 "0klhxkxvkzzzcqpzv8jb56pykq0gyhb6rk9vc2kzjahngjx6sdl4"))))
+        (base32 "1qm6bvj28l42km009nc60gffn1qhngc0m2wjlhf90si3mcc8d99m"))))
     (build-system cmake-build-system)
     (arguments
      '(#:test-target "tests"
-       #:configure-flags (list "-DEXIV2_BUILD_UNIT_TESTS=ON")))
+       #:configure-flags (list "-DEXIV2_BUILD_UNIT_TESTS=ON")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'delete-static-libraries
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (lib (string-append out "/lib")))
+               (for-each delete-file (find-files lib "\\.a$"))))))))
     (propagated-inputs
-     `(("expat" ,expat)
-       ("zlib" ,zlib)))
+     (list expat zlib))
     (native-inputs
-     `(("googletest" ,googletest)
-       ("python" ,python)))
+     (list googletest python))
     (home-page "https://www.exiv2.org/")
     (synopsis "Library and command-line utility to manage image metadata")
     (description
@@ -1396,14 +1406,14 @@ and XMP metadata of images in various formats.")
          (add-before 'configure 'change-directory
            (lambda _ (chdir "DevIL") #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("lcms" ,lcms)
        ("libjpeg" ,libjpeg-turbo)
        ("libmng" ,libmng)
        ("libpng" ,libpng)
        ("libtiff" ,libtiff)
-       ("openexr" ,openexr)
+       ("openexr" ,openexr-2)
        ("zlib" ,zlib)))
     (synopsis "Library for manipulating many image formats")
     (description "Developer's Image Library (DevIL) is a library to develop
@@ -1415,7 +1425,7 @@ convert, manipulate, filter and display a wide variety of image formats.")
 (define-public jasper
   (package
     (name "jasper")
-    (version "2.0.32")
+    (version "2.0.33")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1424,10 +1434,10 @@ convert, manipulate, filter and display a wide variety of image formats.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0hhggh2jxp1wn7nwzvbx2z1vi1ih8wmz4av17bljyn0c3mxjs22k"))))
+                "0p3fj89gkhd2ys5ci75cwb6p7rvb2pf52jd8c9d4g76qp846njnx"))))
     (build-system cmake-build-system)
     (inputs
-     `(("libjpeg" ,libjpeg-turbo)))
+     (list libjpeg-turbo))
     (synopsis "JPEG-2000 library")
     (description "The JasPer Project is an initiative to provide a reference
 implementation of the codec specified in the JPEG-2000 Part-1 standard (i.e.,
@@ -1438,7 +1448,7 @@ ISO/IEC 15444-1).")
 (define-public zimg
   (package
     (name "zimg")
-    (version "2.9.3")
+    (version "3.0.3")
     (source
       (origin
         (method git-fetch)
@@ -1447,12 +1457,10 @@ ISO/IEC 15444-1).")
               (commit (string-append "release-" version))))
         (file-name (git-file-name name version))
         (sha256
-         (base32 "1dqyrq3p8bkgvj4ci50ac342hjnhyz6xxvhiwp7wpi3v3nbj7s02"))))
+         (base32 "0pwgf1mybpa3fs13p6jryzm32vfldyql9biwaypqdcimlnlmyk20"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (synopsis "Scaling, colorspace conversion, and dithering library")
     (description "Zimg implements the commonly required image processing basics
 of scaling, colorspace conversion, and depth conversion.  A simple API enables
@@ -1477,7 +1485,7 @@ the programmer.")
        (sha256
         (base32 "0yys55f9i9g3wjjg0j2m0p0k21zwnid8520a8lrr30khm4k5gibp"))))
     (build-system cmake-build-system)
-    (inputs `(("freeimage" ,freeimage)))
+    (inputs (list freeimage))
     (arguments
      '(#:phases (modify-phases %standard-phases
                   (add-after 'unpack 'fix-tests
@@ -1556,8 +1564,7 @@ changed, making the embedding resistant against first-order statistical tests.")
             #t))))
     (build-system gnu-build-system)
     (inputs
-     `(("libpng" ,libpng)
-       ("zlib" ,zlib)))
+     (list libpng zlib))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -1597,7 +1604,7 @@ PNG, and performs PNG integrity checks and corrections.")
              (rename-file "imgp.py" "imgp")
              #t)))))
     (inputs
-     `(("python-pillow" ,python-pillow)))
+     (list python-pillow))
     (home-page "https://github.com/jarun/imgp")
     (synopsis "High-performance CLI batch image resizer & rotator")
     (description
@@ -1656,7 +1663,7 @@ is hereby granted."))))
                 "0pbv6pc97kbj7ib31qcwi7lnmm9xg5y3b11aasmkhfjvf7rgdy0n"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("nasm" ,nasm)))
+     (list nasm))
     (arguments
      `(#:configure-flags '("-DCMAKE_INSTALL_LIBDIR:PATH=lib"
                            "-DENABLE_STATIC=0"
@@ -1741,7 +1748,7 @@ and decompress to 32-bit and big-endian pixel buffers (RGBX, XBGR, etc.).")
              #t))
          (delete 'configure))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (synopsis "Library for reading and writing files in the nifti-1 format")
     (description "Niftilib is a set of i/o libraries for reading and writing
 files in the nifti-1 data format - a binary file format for storing
@@ -1816,7 +1823,7 @@ parsing, viewing, modifying, and saving this metadata.")
 (define-public flameshot
   (package
     (name "flameshot")
-    (version "0.8.5")
+    (version "0.10.2")
     (source
      (origin
        (method git-fetch)
@@ -1826,13 +1833,12 @@ parsing, viewing, modifying, and saving this metadata.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1z77igs60lz106vsf6wsayxjafxm3llf2lm4dpvsqyyrxybfq191"))))
+         "07n98pp5i6i51g7a4vqwbd6xarihzl7r714r2knvw2zn5mlj55dd"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("qttools" ,qttools)))
+     (list qttools))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)))
+     (list qtbase-5 qtsvg))
     (arguments
      `(#:tests? #f))                    ;no tests
     (home-page "https://github.com/flameshot-org/flameshot")
@@ -1852,7 +1858,7 @@ Features:
 (define-public swappy
   (package
     (name "swappy")
-    (version "1.2.1")
+    (version "1.4.0")
     (source
      (origin
        (method git-fetch)
@@ -1861,15 +1867,16 @@ Features:
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "14ac2jmnak7avcz0jhqjm30vk7pv3gq5aq5rdyh84k8c613kkicf"))))
+        (base32 "1s2lp3bz30svqdg6467jvncim0qgl0q1b1nqxnnci6kljbp5g0xh"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("scdoc" ,scdoc)
-       ("glib" ,glib "bin"))) ; for 'glib-compile-resources'
+     (list pkg-config scdoc
+           `(,glib "bin"))) ; for 'glib-compile-resources'
     (inputs
-     `(("gtk+" ,gtk+)
-       ("libnotify" ,libnotify)))
+     (list gtk+ libnotify))
+    (propagated-inputs
+     ;; Needed to properly render the icons.
+     (list font-awesome))
     (home-page "https://github.com/jtheoof/swappy")
     (synopsis "Grab and edit on the fly snapshots of a Wayland compositor")
     (description
@@ -1904,8 +1911,8 @@ stdout.")
               (("/bin/rm")
                (which "rm")))
             #t)))))
-   (native-inputs `(("perl" ,perl)))    ; only for tests
-   (inputs `(("libx11" ,libx11)))
+   (native-inputs (list perl))    ; only for tests
+   (inputs (list libx11))
    (home-page "https://www.lcdf.org/gifsicle/")
    (synopsis "Edit GIF images and animations")
    (description "Gifsicle is a command-line GIF image manipulation tool that:
@@ -1940,9 +1947,7 @@ identical visual appearance.")
           "076frk3pa16s4r1b10zgy81vdlz0385zh3ykbnkaij25jn5aqc09"))))
     (build-system gnu-build-system)
     (inputs
-     `(("curl" ,curl)
-       ("libjpeg" ,libjpeg-turbo)
-       ("ncurses" ,ncurses)))
+     (list curl libjpeg-turbo ncurses))
     (home-page "https://csl.name/jp2a/")
     (synopsis "Convert JPEG images to ASCII")
     (description
@@ -1963,12 +1968,8 @@ identical visual appearance.")
      (sha256
       (base32 "1l4gwvvc0zvg5b6f6w92xjhmwj7cg9hlgrf43lc7ygaz8dh6cmzg"))))
    (build-system meson-build-system)
-   (native-inputs `(("pkg-config" ,pkg-config)
-                    ("scdoc" ,scdoc)))
-   (inputs `(("cairo" ,cairo)
-             ("libjpeg-turbo" ,libjpeg-turbo)
-             ("wayland" ,wayland)
-             ("wayland-protocols" ,wayland-protocols)))
+   (native-inputs (list pkg-config scdoc))
+   (inputs (list cairo libjpeg-turbo wayland wayland-protocols))
    (home-page "https://github.com/emersion/grim")
    (synopsis "Create screenshots from a Wayland compositor")
    (description "grim can create screenshots from a Wayland compositor.")
@@ -1990,13 +1991,9 @@ identical visual appearance.")
       (base32 "00dx6ds1227qnxqrw58k0am78q8fa49rgp1zingrkjcbpbi7g475"))))
    (build-system meson-build-system)
    (native-inputs
-    `(("pkg-config" ,pkg-config)
-      ("scdoc" ,scdoc)))
+    (list pkg-config scdoc))
    (inputs
-    `(("cairo" ,cairo)
-      ("libxkbcommon" ,libxkbcommon)
-      ("wayland" ,wayland)
-      ("wayland-protocols" ,wayland-protocols)))
+    (list cairo libxkbcommon wayland wayland-protocols))
    (home-page "https://github.com/emersion/slurp")
    (synopsis "Select a region in a Wayland compositor")
    (description "Slurp can select a region in a Wayland compositor and print it
@@ -2027,9 +2024,8 @@ to the standard output.  It works well together with grim.")
        (list (string-append "--with-rgbtxt="
                             (assoc-ref %build-inputs "xorg-rgb")
                             "/share/X11/rgb.txt"))))
-    (inputs `(("xorg-rgb" ,xorg-rgb)
-              ("libpng" ,libpng)))
-    (native-inputs `(("pngsuite" ,pngsuite)))
+    (inputs (list xorg-rgb libpng))
+    (native-inputs (list pngsuite))
     (home-page "http://sng.sourceforge.net")
     (synopsis "Markup language for representing PNG contents")
     (description "SNG (Scriptable Network Graphics) is a minilanguage designed
@@ -2057,9 +2053,7 @@ losslessly translates between SNG and PNG.")
         (base32 "0jy2iigarskwfhskyladbb6l92x1fb3i3vz4bvcks0za4w5hfxk5"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("cmake" ,cmake)
-       ("doctest" ,doctest)
-       ("gcc" ,gcc-8)))
+     (list cmake doctest))
     (home-page "https://github.com/Nheko-Reborn/blurhash")
     (synopsis "C++ blurhash encoder/decoder")
     (description "Simple encoder and decoder for blurhashes.  Contains a
@@ -2134,10 +2128,9 @@ wrapper with a more convenient interface on top.")
         (base32 "1q66cksms4l62y0wizb8vfavhmf7kyfgcfkynil3n99s0hny1aqp"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libpng" ,libpng)
-       ("perl" ,perl)))
+     (list libpng perl))
     (propagated-inputs
-     `(("perl-libwww" ,perl-libwww)))
+     (list perl-libwww))
     (home-page "https://www.nongnu.org/icoutils/")
     (synopsis "Extract and convert bitmaps from Windows icon and cursor files")
     (description "Icoutils are a set of program for extracting and converting
@@ -2170,7 +2163,11 @@ This package can be used to create @code{favicon.ico} files for web sites.")
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags '("-DAVIF_CODEC_AOM=ON" "-DAVIF_CODEC_DAV1D=ON"
-                           "-DAVIF_CODEC_RAV1E=ON"
+                           ,@(if (string-prefix? "x86_64"
+                                                 (or (%current-target-system)
+                                                     (%current-system)))
+                                 '("-DAVIF_CODEC_RAV1E=ON")
+                                 '())
                            "-DAVIF_BUILD_TESTS=ON")
        #:phases
        (modify-phases %standard-phases
@@ -2181,12 +2178,16 @@ This package can be used to create @code{favicon.ico} files for web sites.")
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
                     (doc (string-append out "/share/doc/libavif-" ,version)))
-               (install-file "../source/README.md" doc)
-               #t))))))
+               (install-file "../source/README.md" doc)))))))
     (inputs
      `(("dav1d" ,dav1d)
        ("libaom" ,libaom)
-       ("rav1e" ,rav1e)))
+       ;; XXX: rav1e depends on rust, which currently only works on x86_64.
+       ;; See also the related configure flag when changing this.
+       ,@(if (string-prefix? "x86_64" (or (%current-target-system)
+                                          (%current-system)))
+             `(("rav1e" ,rav1e))
+             '())))
     (synopsis "Encode and decode AVIF files")
     (description "Libavif is a C implementation of @acronym{AVIF, the AV1 Image
 File Format}.  It can encode and decode all YUV formats and bit depths supported
@@ -2212,20 +2213,14 @@ by AOM, including with alpha.")
     (arguments
      `(#:tests? #f)) ;no test target although there is a tests folder
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
      `(("gdk-pixbuf" ,gdk-pixbuf) ;optional
        ("libjpeg" ,libjpeg-turbo)
        ("libpng" ,libpng)))
      ;; Propagated to satisfy 'libheif.pc'.
      (propagated-inputs
-      `(("dav1d" ,dav1d)
-        ("libaom" ,libaom)
-        ("libde265" ,libde265)
-        ("x265" ,x265)))
+      (list dav1d libaom libde265 x265))
     (home-page "https://github.com/strukturag/libheif")
     (synopsis "HEIF and AVIF file format decoder and encoder")
     (description
@@ -2233,6 +2228,58 @@ by AOM, including with alpha.")
 Format) file format decoder and encoder.")
     (license license:lgpl3+)))
 
+(define-public libjxl
+  (package
+    (name "libjxl")
+    (version "0.6.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/libjxl/libjxl")
+             (commit (string-append "v" version))
+             (recursive? #t)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "17pvc5zgm9az5hfg2p80325f42w3dqspyb03iakrwg9x4n3vjckx"))
+       (modules '((guix build utils)))
+       (snippet
+        ;; Delete the bundles that will not be used.  libjxl bundles LCMS
+        ;; which is in Guix but there is no option to use the system package.
+        ;; This option will be introduced after version 0.6.1 and then we
+        ;; probably won't need to download the submodules.
+        '(begin
+           (for-each (lambda (directory)
+                       (delete-file-recursively
+                        (string-append "third_party/" directory)))
+                     '("brotli" "googletest" "highway"))))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:configure-flags
+       (list "-DJPEGXL_FORCE_SYSTEM_GTEST=true"
+             "-DJPEGXL_FORCE_SYSTEM_BROTLI=true"
+             ;; "-DJPEGXL_FORCE_SYSTEM_LCMS2=true" ; next version after 0.6.1
+             "-DJPEGXL_FORCE_SYSTEM_HWY=true")))
+    (native-inputs
+     (list asciidoc doxygen googletest pkg-config python))
+    (inputs
+     (list freeglut
+           giflib
+           google-brotli
+           google-highway
+           imath
+           ;; lcms ; next version after 0.6.1
+           libavif
+           libjpeg-turbo
+           libpng
+           libwebp
+           openexr))
+    (home-page "https://github.com/libjxl/libjxl")
+    (synopsis "JPEG XL image format reference implementation")
+    (description "This package contains a reference implementation of JPEG XL
+(encoder and decoder).")
+    (license license:bsd-3)))
+
 (define-public mtpaint
   (package
     (name "mtpaint")
@@ -2323,16 +2370,16 @@ GIF, TIFF, WEBP, BMP, PNG, XPM formats.")
        ("swig" ,swig)
        ("gettext" ,gettext-minimal)))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("gdk-pixbuf" ,gdk-pixbuf+svg)
-       ("hicolor-icon-theme" ,hicolor-icon-theme)
-       ("libmypaint" ,libmypaint)
-       ("mypaint-brushes" ,mypaint-brushes)
-       ("json-c" ,json-c)
-       ("lcms" ,lcms)
-       ("python-numpy" ,python-numpy)
-       ("python-pycairo" ,python-pycairo)
-       ("python-pygobject" ,python-pygobject)))
+     (list gtk+
+           librsvg
+           hicolor-icon-theme
+           libmypaint
+           mypaint-brushes
+           json-c
+           lcms
+           python-numpy
+           python-pycairo
+           python-pygobject))
     (home-page "http://mypaint.org/")
     (synopsis "Fast and simple painting app for artists")
     (description
@@ -2343,7 +2390,7 @@ Wacom-style graphics tablets.")
 (define-public phockup
   (package
     (name "phockup")
-    (version "1.5.9")
+    (version "1.7.1")
     (source
      (origin
        (method git-fetch)
@@ -2353,7 +2400,7 @@ Wacom-style graphics tablets.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "13ajj0xch7yfqaaxbw0awxs0fz17n1rxir4gqh2wcgxjysqk1j2y"))))
+         "0nqd89g4ppwc96gxyh9npain7ipnzj66p6n3irsvhrpi4k54h388"))))
     (build-system copy-build-system)
     (arguments
      `(#:install-plan '(("src" "share/phockup/")
@@ -2364,9 +2411,7 @@ Wacom-style graphics tablets.")
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* (list "src/dependency.py" "src/exif.py")
                (("exiftool")
-                (string-append (assoc-ref inputs "perl-image-exiftool")
-                               "/bin/exiftool")))
-             #t))
+                (search-input-file inputs "/bin/exiftool")))))
          (add-before 'install 'check
            (lambda _
              (invoke "pytest")))
@@ -2375,14 +2420,18 @@ Wacom-style graphics tablets.")
              (let ((out (assoc-ref outputs "out")))
                (mkdir (string-append out "/bin"))
                (symlink (string-append out "/share/phockup/phockup.py")
-                        (string-append out "/bin/phockup")))
-             #t)))))
+                        (string-append out "/bin/phockup")))))
+         (add-after 'install-bin 'wrap-program
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (wrap-program (string-append out "/bin/phockup")
+                 `("GUIX_PYTHONPATH" prefix
+                   ,(search-path-as-string->list
+                     (getenv "GUIX_PYTHONPATH"))))))))))
     (inputs
-     `(("perl-image-exiftool" ,perl-image-exiftool)
-       ("python" ,python)))
+     (list perl-image-exiftool python python-tqdm))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-mock" ,python-pytest-mock)))
+     (list python-pytest python-pytest-mock))
     (home-page "https://github.com/ivandokov/phockup")
     (synopsis "Organize photos and videos in folders")
     (description "Phockup is a media sorting tool that uses creation date and
diff --git a/gnu/packages/imagemagick.scm b/gnu/packages/imagemagick.scm
index 4f0ffcbcc6..06ed80cbac 100644
--- a/gnu/packages/imagemagick.scm
+++ b/gnu/packages/imagemagick.scm
@@ -127,7 +127,7 @@
                ("freetype" ,freetype)
                ("bzip2" ,bzip2)
                ("xz" ,xz)))
-     (native-inputs `(("pkg-config" ,pkg-config)))
+     (native-inputs (list pkg-config))
      (outputs '("out"
                 "doc"))                 ; 26 MiB of HTML documentation
      (home-page "https://www.imagemagick.org/")
@@ -175,8 +175,8 @@ text, lines, polygons, ellipses and Bézier curves.")
         (base32
          "0n9afy1z5bhf9phrbahnkwhgcmijn8jggpbzwrivw1zhliliiy68"))))
     (build-system perl-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("imagemagick" ,imagemagick)))
+    (native-inputs (list pkg-config))
+    (inputs (list imagemagick))
     (arguments
      `(#:tests? #f ;;Failed 2/23 test programs. 2/353 subtests failed.
        #:phases
@@ -235,12 +235,12 @@ script.")
              "--with-quantum-depth=16" ; required by Octave
              "--enable-quantum-library-names"
              (string-append "--with-gs-font-dir="
-                            (assoc-ref %build-inputs "gs-fonts")
+                            (assoc-ref %build-inputs "font-ghostscript")
                             "/share/fonts/type1/ghostscript"))))
     (inputs
      `(("graphviz" ,graphviz)
        ("ghostscript" ,ghostscript)
-       ("gs-fonts" ,gs-fonts)
+       ("font-ghostscript" ,font-ghostscript)
        ("lcms" ,lcms)
        ("libx11" ,libx11)
        ("libxml2" ,libxml2)
@@ -253,7 +253,7 @@ script.")
        ("xz" ,xz)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (outputs '("out"                  ; 13 MiB
                "doc"))                ; ~7 MiB
     (home-page "http://www.graphicsmagick.org")
diff --git a/gnu/packages/inklingreader.scm b/gnu/packages/inklingreader.scm
index 6cdc4b3330..88c1c2144c 100644
--- a/gnu/packages/inklingreader.scm
+++ b/gnu/packages/inklingreader.scm
@@ -43,13 +43,9 @@
                 "0ikg95mgwfqh0bq4dzvkfmdiycacqvv27g91hl6adwk5y3gzl96g"))))
     (build-system gnu-build-system)
     (inputs
-     `(("glib" ,glib)
-       ("cairo" ,cairo)
-       ("gtk+" ,gtk+)
-       ("librsvg" ,librsvg)
-       ("libusb" ,libusb)))
+     (list glib cairo gtk+ librsvg libusb))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.gnu.org/software/inklingreader/")
     (synopsis "Wacom Inkling sketch format conversion and manipulation")
     (description
diff --git a/gnu/packages/inkscape.scm b/gnu/packages/inkscape.scm
index 46c8c4cc34..c87f148329 100644
--- a/gnu/packages/inkscape.scm
+++ b/gnu/packages/inkscape.scm
@@ -4,7 +4,7 @@
 ;;; Copyright © 2016, 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017, 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2020 Boris A. Dekshteyn <boris.dekshteyn@gmail.com>
 ;;; Copyright © 2020 Ekaitz Zarraga <ekaitz@elenq.tech>
 ;;;
@@ -55,82 +55,15 @@
 (define-public inkscape
   (package
     (name "inkscape")
-    (version "0.92.4")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://media.inkscape.org/dl/"
-                                  "resources/file/"
-                                  "inkscape-" version ".tar.bz2"))
-              (patches (search-patches "inkscape-poppler-0.76.patch"))
-              (sha256
-               (base32
-                "0pjinhjibfsz1aywdpgpj3k23xrsszpj4a1ya5562dkv2yl2vv2p"))))
-    (build-system cmake-build-system)
-    (inputs
-     `(("aspell" ,aspell)
-       ("gtkmm" ,gtkmm-2)
-       ("gtk" ,gtk+-2)
-       ("gsl" ,gsl)
-       ("poppler" ,poppler)
-       ("libpng" ,libpng)
-       ("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)
-       ("libgc" ,libgc)
-       ("freetype" ,freetype)
-       ("popt" ,popt)
-       ("potrace" ,potrace)
-       ("python" ,python-2)
-       ("lcms" ,lcms)
-       ("boost" ,boost)))
-    (native-inputs
-     `(("intltool" ,intltool)
-       ("glib" ,glib "bin")
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
-    ;; FIXME: tests require gmock
-    (arguments
-     `(#:tests? #f
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'patch-icon-cache-generator
-           (lambda _
-             (substitute* "share/icons/application/CMakeLists.txt"
-              (("gtk-update-icon-cache") "true"))
-             #t))
-         (add-after 'unpack 'adjust-for-new-poppler
-           (lambda _
-             (substitute* (find-files "src/extension/internal/pdfinput")
-               ;; Needed for Poppler 0.82.
-               (("Unicode \\*u") "Unicode const *u")
-               ;; Needed for Poppler 0.83.
-               (("\\(GfxPath") "(const GfxPath")
-               (("GfxSubpath") "const GfxSubpath")
-               (("new GlobalParams\\(\\)")
-                "std::unique_ptr<GlobalParams>(new GlobalParams())")
-               (("new GlobalParams\\(poppler_datadir\\)")
-                "std::unique_ptr<GlobalParams>(new GlobalParams(poppler_datadir))"))
-             #t)))))
-    (home-page "https://inkscape.org/")
-    (synopsis "Vector graphics editor")
-    (description "Inkscape is a vector graphics editor.  What sets Inkscape
-apart is its use of Scalable Vector Graphics (SVG), an XML-based W3C standard,
-as the native format.")
-    (license license:gpl2+)))
-
-(define-public inkscape-1.1
-  (package
-    (name "inkscape")
-    (version "1.1")
+    (version "1.1.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://media.inkscape.org/dl/"
                            "resources/file/"
                            "inkscape-" version ".tar.xz"))
-       (patches (search-patches "inkscape-1.1-fix-build-witch-gcc7.5.patch"))
        (sha256
-        (base32
-         "1rlm2wqg8bgdxkdvnadh49wfp0mrbrk7d8n4vdcjyw6z7z7firki"))
+        (base32 "1bvqg5xfs3m6r7qfdhmgzwhd1hx8wvg3nhvhmalwzcdm6ffhpjmf"))
        (modules '((guix build utils)
                   (ice-9 format)))
        (snippet
@@ -211,12 +144,10 @@ endif()~%~%"
            ;; Lift the requirement on the double-conversion library, as
            ;; it is only needed by lib2geom, which is now unbundled.
            (substitute* "CMakeScripts/DefineDependsandFlags.cmake"
-             ((".*find_package\\(DoubleConversion.*") ""))
-           #t))))
+             ((".*find_package\\(DoubleConversion.*") ""))))))
     (build-system cmake-build-system)
     (arguments
-     `(#:tests? #t
-       #:test-target "check"            ;otherwise some test binaries are missing
+     `(#:test-target "check"            ;otherwise some test binaries are missing
        #:imported-modules (,@%cmake-build-system-modules
                            (guix build glib-or-gtk-build-system))
        #:modules ((guix build cmake-build-system)
@@ -224,11 +155,13 @@ endif()~%~%"
                   (guix build utils))
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'generate-gdk-pixbuf-loaders-cache-file
+           (assoc-ref glib-or-gtk:%standard-phases
+                      'generate-gdk-pixbuf-loaders-cache-file))
          (add-after 'unpack 'patch-icon-cache-generator
            (lambda _
              (substitute* "share/icons/application/CMakeLists.txt"
-               (("gtk-update-icon-cache") "true"))
-             #t))
+               (("gtk-update-icon-cache") "true"))))
          (add-after 'unpack 'disable-latex-export-tests
            ;; FIXME: For some reason the test.pdf_tex file generated by the
            ;; "--export-latex" lacks "some text" in its content when run in
@@ -236,14 +169,11 @@ endif()~%~%"
            (lambda _
              (substitute* "testfiles/cli_tests/CMakeLists.txt"
                (("add_cli_test\\(export-latex")
-                "message(TEST_DISABLED: export-latex"))
-             #t))
+                "message(TEST_DISABLED: export-latex"))))
          (add-after 'unpack 'set-home
            ;; Mute Inkscape warnings during tests.
            (lambda _
-             (setenv "HOME" (getcwd))
-             (format #t "ARGS is set to: ~a" (getenv "ARGS"))
-             #t))
+             (setenv "HOME" (getcwd))))
          ;; Move the check phase after the install phase, as when run in the
          ;; tests, Inkscape relies on files that are not yet installed, such
          ;; as the "share/inkscape/ui/units.xml" file.
@@ -259,13 +189,13 @@ endif()~%~%"
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
                (wrap-program (string-append out "/bin/inkscape")
-                 `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH")))))
-             #t)))))
+                 `("GUIX_PYTHONPATH" ":" prefix
+                   (,(getenv "GUIX_PYTHONPATH"))))))))))
     (inputs
      `(("aspell" ,aspell)
        ("autotrace" ,autotrace)
        ("gdl" ,gdl-minimal)
-       ("gtkmm" ,gtkmm)
+       ("gtkmm" ,gtkmm-3)
        ("gtk" ,gtk+)
        ("gtkspell3" ,gtkspell3)
        ("gsl" ,gsl)
@@ -276,7 +206,7 @@ endif()~%~%"
        ("libxml2" ,libxml2)
        ("libxslt" ,libxslt)
        ("libgc" ,libgc)
-       ("libsoup" ,libsoup-minimal)
+       ("libsoup" ,libsoup-minimal-2)
        ("libcdr" ,libcdr)
        ("libvisio" ,libvisio)
        ("libwpd" ,libwpd)
@@ -292,12 +222,12 @@ endif()~%~%"
        ("python-numpy" ,python-numpy)
        ("python-lxml" ,python-lxml)))
     (native-inputs
-     `(("imagemagick" ,imagemagick)     ;for tests
-       ("intltool" ,intltool)
-       ("glib" ,glib "bin")
-       ("googletest" ,googletest)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list imagemagick ;for tests
+           intltool
+           `(,glib "bin")
+           googletest
+           perl
+           pkg-config))
     (home-page "https://inkscape.org/")
     (synopsis "Vector graphics editor")
     (description "Inkscape is a vector graphics editor.  What sets Inkscape
diff --git a/gnu/packages/installers.scm b/gnu/packages/installers.scm
index c768a367aa..6ba9bf0827 100644
--- a/gnu/packages/installers.scm
+++ b/gnu/packages/installers.scm
@@ -48,7 +48,7 @@
       (native-inputs `(("xgcc" ,xgcc)
                        ("xbinutils" ,xbinutils)
                        ("mingw-w64" ,xlibc)))
-      (inputs `(("zlib" ,zlib)))
+      (inputs (list zlib))
       (arguments
        `(#:scons ,scons-python2
          #:modules ((srfi srfi-1)
@@ -128,7 +128,7 @@
                         (substitute* "Source/build.cpp" (("m_target_type=TARGET_X86ANSI")
                                                          (string-append "m_target_type=" ,nsis-target-type))))))))
       (home-page "http://nsis.sourceforge.net/")
-      (synopsis "A professional open source system to create Windows installers")
+      (synopsis "Professional open source system to create Windows installers")
       (description
        "NSIS (Nullsoft Scriptable Install System) is a professional open source
 system to create Windows installers. It is designed to be as small and flexible
diff --git a/gnu/packages/instrumentation.scm b/gnu/packages/instrumentation.scm
new file mode 100644
index 0000000000..ab986bfcc7
--- /dev/null
+++ b/gnu/packages/instrumentation.scm
@@ -0,0 +1,346 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2021 Olivier Dion <olivier.dion@polymtl.ca>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages instrumentation)
+  #:use-module (gnu packages base)
+  #:use-module (gnu packages bison)
+  #:use-module (gnu packages boost)
+  #:use-module (gnu packages datastructures)
+  #:use-module (gnu packages documentation)
+  #:use-module (gnu packages elf)
+  #:use-module (gnu packages engineering)
+  #:use-module (gnu packages flex)
+  #:use-module (gnu packages glib)
+  #:use-module (gnu packages haskell-xyz)
+  #:use-module (gnu packages libunwind)
+  #:use-module (gnu packages linux)
+  #:use-module (gnu packages llvm)
+  #:use-module (gnu packages lua)
+  #:use-module (gnu packages man)
+  #:use-module (gnu packages ncurses)
+  #:use-module (gnu packages perl)
+  #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages popt)
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages python-xyz)
+  #:use-module (gnu packages sphinx)
+  #:use-module (gnu packages swig)
+  #:use-module (gnu packages tbb)
+  #:use-module (gnu packages xml)
+  #:use-module (guix build-system cmake)
+  #:use-module (guix build-system copy)
+  #:use-module (guix build-system gnu)
+  #:use-module (guix download)
+  #:use-module (guix gexp)
+  #:use-module (guix git-download)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix packages)
+  #:use-module (srfi srfi-26)
+  #:use-module (guix utils))
+
+(define-public babeltrace
+  (package
+    (name "babeltrace")
+    (version "2.0.4")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://www.efficios.com/files/babeltrace/babeltrace2-"
+                                  version ".tar.bz2"))
+              (sha256
+               (base32 "1jlv925pr7hykc48mdvbmqm4ipy1r11xwzapa6fdpdfshmk12kvp"))))
+
+    (build-system gnu-build-system)
+
+    (arguments
+     `(#:tests? #f  ; FIXME - When Python's bindings are enabled, tests do not
+                    ; pass.
+       #:make-flags
+       ,#~(list (string-append "LDFLAGS=-Wl,-rpath=" #$output "/lib"))
+       #:configure-flags
+       '("--enable-debug-info"
+         "--enable-man-pages"
+         "--enable-python-bindings"
+         "--enable-python-plugins")
+       #:phases
+       (modify-phases %standard-phases
+         ;; These are recommended in the project's README for a development
+         ;; build configuration.
+         (add-before 'configure 'set-environment-variables
+           (lambda _
+             (setenv "BABELTRACE_DEV_MODE" "1")
+             (setenv "BABELTRACE_MINIMAL_LOG_LEVEL" "TRACE"))))))
+    (inputs
+     (list glib))
+    ;; NOTE - elfutils is used for the LTTng debug information filter
+    ;; component class.  This can be moved to `native-inputs` if
+    ;; `--enable-debug-info` is replaced by `--disable-debug-info` in
+    ;; `#:configure-flags`.
+    (propagated-inputs
+     (list elfutils))
+    ;; NOTE - python-3 is set here for generating the bindings.  Users need to
+    ;; install python-3 in their profile in order to use these bindings.
+    (native-inputs
+     (list asciidoc
+           bison
+           flex
+           pkg-config
+           python-3
+           python-sphinx
+           swig
+           xmltoman))
+    (home-page "https://babeltrace.org/")
+    (synopsis "Trace manipulation toolkit")
+    (description "Babeltrace 2 is a framework for viewing, converting,
+transforming, and analyzing traces.  It is also the reference parser
+implementation of the Common Trace Format (CTF), produced by tools such as
+LTTng and barectf.  This package provides a library with a C API, Python 3
+bindings, and the command-line tool @command{babeltrace2}.")
+    (license license:expat)))
+
+(define-public dyninst
+  (package
+    (name "dyninst")
+    ;; Newer versions are not promoted on main home page.
+    ;; Upgrade to 12.0.1 if anyone require a newer version.
+    (version "10.2.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/dyninst/dyninst")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32 "1m04pg824rqx647wvk9xl33ri8i6mm0vmrz9924li25dxbr4zqd5"))))
+
+    (build-system cmake-build-system)
+    (arguments
+     `(#:tests? #f
+       ;; STERILE_BUILD: Do not download/build third-party dependencies from
+       ;; source.
+       #:configure-flags
+       (list "-DSTERILE_BUILD=ON")
+       ;; NOTE: dyninst needs to search for shared libraries that are linked
+       ;; against the instrumented binary in order to rebuild the entire
+       ;; program.  For this purpose, one can use LD_LIBRARY_PATH or
+       ;; DYNISNT_REWRITER_PATHS environment variables to add paths for dyinst
+       ;; to search.  However, dyninst also tries to be smart by executing
+       ;; ldconfig, which is not portable.  If ldconfig is not available on
+       ;; the system, dyinst wrongly assumes that the shared libraries can not
+       ;; be found, even though it can.  This bad logic is still there with
+       ;; newer versions of dyinst.  Thus, this substitution makes the bad
+       ;; code path unreachable.
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-bad-logic
+           (lambda _
+             (substitute* "dyninstAPI/src/linux.C"
+               (("if\\(\\!fgets\\(buffer, 512, ldconfig\\)\\)")
+                "fgets(buffer, 512, ldconfig); if (false)")))))))
+    (propagated-inputs
+     (list elfutils boost tbb-2020))
+    (home-page "https://dyninst.org/")
+    (synopsis "Dynamic instrumentation")
+    (description "Dyninst is a collection of libraries for instrumenting,
+analyzing and editing binaries.  It can attach to an existing program or
+create a new one out of an ELF file for analysis or modification.  It come
+with a handful of C++ libraries.")
+    (license license:lgpl2.1+)))
+
+(define-public flamegraph
+  ;; No new version since 2019, but there's still some new important commits.
+  (let ((commit "810687f180f3c4929b5d965f54817a5218c9d89b")
+        (revision "1"))
+    (package
+      (name "flamegraph")
+      (version (git-version "1.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/brendangregg/FlameGraph")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1lg02mxzdsm9szn4vcmx76c1bw9gqmxqk8n6v63v03036sc83s22"))))
+      (build-system copy-build-system)
+      (arguments
+       `(#:install-plan
+         ',(map (cut list <> "bin/")
+                '("flamegraph.pl"
+                  "stackcollapse.pl"
+                  "stackcollapse-perf.pl"
+                  "stackcollapse-pmc.pl"
+                  "stackcollapse-stap.pl"
+                  "stackcollapse-instruments.pl"
+                  "stackcollapse-vtune.pl"
+                  "stackcollapse-jstack.pl"
+                  "stackcollapse-gdb.pl"
+                  "stackcollapse-go.pl"
+                  "stackcollapse-vsprof.pl"
+                  "stackcollapse-wcp.pl"))))
+      (inputs (list perl))
+      (home-page "http://www.brendangregg.com/flamegraphs.html")
+      (synopsis "Stack trace visualizer")
+      (description "Flamegraph is a collection of scripts that generate
+interactive SVGs out of traces genated from various tracing tools.  It comes
+with the script @command{flamegraph.pl} and many stackcollapse scripts.")
+      (license license:cddl1.0))))
+
+(define-public lttng-ust
+  (package
+    (name "lttng-ust")
+    (version "2.13.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://lttng.org/files/lttng-ust/"
+                                  "lttng-ust-" version ".tar.bz2"))
+              (sha256
+               (base32
+                "1p7d94r275yvby6zqfxaswdl1q46zxbc8x5rkhnjxrp1d41byrsn"))))
+    (build-system gnu-build-system)
+    (inputs
+     (list liburcu numactl))
+    (native-inputs
+     (list python-3 pkg-config))
+    (home-page "https://lttng.org/")
+    (synopsis "LTTng userspace tracer libraries")
+    (description "The user space tracing library, liblttng-ust, is the LTTng
+user space tracer.  It receives commands from a session daemon, for example to
+enable and disable specific instrumentation points, and writes event records
+to ring buffers shared with a consumer daemon.")
+    (license license:lgpl2.1+)))
+
+(define-public lttng-tools
+  (package
+    (name "lttng-tools")
+    (version "2.13.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://lttng.org/files/lttng-tools/"
+                                  "lttng-tools-" version ".tar.bz2"))
+              (sha256
+               (base32
+                "1gfp9y24lpaiz4lcmbp30yd400jmh99mlay9gb8pz9qd080bmlnf"))))
+    (build-system gnu-build-system)
+    (arguments
+     `( ;; FIXME - Currently there's a segmentation fault by swig when enabling
+       ;; Python's bindings.  Thus, bindings are disable here.  Replace
+       ;; `disable` by `enable` in #:configure-flags when this is fixed.
+       #:configure-flags '("--disable-python-bindings")
+       ;; FIXME - Tests are disabled for now because one test hangs
+       ;; indefinetely.  Also, parallel testing is not possible because of how
+       ;; the lttng-daemon handles sessions.  Thus, keep parallel testing
+       ;; disabled even after tests are enabled!
+       #:tests? #f
+       #:parallel-tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'set-environment-variables
+           (lambda _
+             (setenv "HOME" "/tmp")
+             (setenv "LTTNG_HOME" "/tmp")))
+         ;; We don't put (which "man") here because LTTng uses execlp.
+         (add-after 'unpack 'patch-default-man-path
+           (lambda _
+             (substitute* "src/common/defaults.h"
+               (("/usr/bin/man") "man")))))))
+    ;; NOTE - Users have to install python-3 in their profile to use the
+    ;; bindings.  We don't put it in the inputs, because the rest of the tools
+    ;; can work without it.
+    (inputs
+     (list liburcu popt numactl))
+    (propagated-inputs
+     (list kmod module-init-tools))
+    (native-inputs
+     (list pkg-config
+           perl
+           libpfm4
+           python-3
+           swig
+           procps
+           which
+           flex
+           bison
+           asciidoc
+           libxml2
+           lttng-ust))
+    (home-page "https://lttng.org/")
+    (synopsis "LTTng userspace tracer libraries")
+    (description "The lttng-tools project provides a session
+daemon @code{lttng-sessiond} that acts as a tracing registry, the @command{lttng} command
+line for tracing control, a @code{lttng-ctl} library for tracing control and a
+@code{lttng-relayd} for network streaming.")
+    (license (list  license:gpl2 license:lgpl2.1))))
+
+(define-public uftrace
+  (package
+    (name "uftrace")
+    (version "0.11")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/namhyung/uftrace")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32 "0gk0hv3rnf5czvazz1prg21rf9qlniz42g5b389n8a29hqj4q6xr"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:make-flags
+       (list
+        (string-append "CC=" ,(cc-for-target)))
+       ;; runtest hang at some point -- probably dues to
+       ;; failed socket connection -- but we want to keep the
+       ;; unit tests.  Change the target to "test" when fixed.
+       #:test-target "unittest"
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'configure
+           (lambda* (#:key outputs target #:allow-other-keys)
+             (let ((arch ,(system->linux-architecture
+                           (or (%current-target-system)
+                               (%current-system)))))
+               (setenv "ARCH"
+                       (cond
+                        ((string=? arch "arm64") "aarch64")
+                        (else arch)))
+               (when target
+                 (setenv "CROSS_COMPILE" (string-append target "-"))))
+             (setenv "SHELL" (which "sh"))
+             (invoke "./configure"
+                     (string-append "--prefix="
+                                    (assoc-ref outputs "out"))))))))
+    (inputs
+     (list capstone
+           elfutils
+           libunwind
+           ncurses))
+    (native-inputs
+     (list luajit
+           pandoc
+           pkg-config
+           python-wrapper))
+    (home-page "https://github.com/namhyung/uftrace")
+    (synopsis "Function graph tracer for C/C++/Rust")
+    (description "uftrace is a tool for tracing and analyzing the execution of
+programs written in C/C++.  It is heavily inspired by the ftrace framework of
+the Linux kernel, while supporting userspace programs.  It supports various
+kind of commands and filters to help analysis of the program execution and
+performance.  It provides the command @command{uftrace}.  User that want to do
+scripting need to install python-3 or luajit in their profile.")
+    (license license:gpl2)))
diff --git a/gnu/packages/ipfs.scm b/gnu/packages/ipfs.scm
index 57701991e3..ccc36007b4 100644
--- a/gnu/packages/ipfs.scm
+++ b/gnu/packages/ipfs.scm
@@ -25,7 +25,9 @@
   #:use-module (guix git-download)
   #:use-module (guix download)
   #:use-module (guix build-system go)
-  #:use-module (gnu packages golang))
+  #:use-module (gnu packages golang)
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages shells))
 
 (define-public go-github-com-ipfs-go-ipfs-cmdkit-files
   (let ((commit
@@ -46,7 +48,8 @@
               "0qk6fshgdmhp8dip2ksm13j6nywi41m9mn0czkvmw6b697z85l2r"))))
       (build-system go-build-system)
       (arguments
-       '(#:unpack-path "github.com/ipfs/go-ipfs-cmdkit"
+       `(#:go ,go-1.16
+         #:unpack-path "github.com/ipfs/go-ipfs-cmdkit"
          #:import-path "github.com/ipfs/go-ipfs-cmdkit/files"))
       (home-page "https://github.com/ipfs/go-ipfs-cmdkit")
       (synopsis "Shared types, functions and values for go-ipfs")
@@ -78,26 +81,26 @@ that are shared between @command{go-ipfs/commands} and its rewrite
          ;; TODO: Tests fail, might need network access.
          #:tests? #f))
       (native-inputs
-       `(("go-github-com-ipfs-go-ipfs-cmdkit-files" ,go-github-com-ipfs-go-ipfs-cmdkit-files)
-         ("go-github-com-libp2p-go-libp2p-metrics" ,go-github-com-libp2p-go-libp2p-metrics)
-         ("go-github-com-libp2p-go-flow-metrics" ,go-github-com-libp2p-go-flow-metrics)
-         ("go-github-com-libp2p-go-libp2p-peer" ,go-github-com-libp2p-go-libp2p-peer)
-         ("go-github-com-libp2p-go-libp2p-protocol" ,go-github-com-libp2p-go-libp2p-protocol)
-         ("go-github-com-libp2p-go-libp2p-crypto" ,go-github-com-libp2p-go-libp2p-crypto)
-         ("go-github-com-mitchellh-go-homedir" ,go-github-com-mitchellh-go-homedir)
-         ("go-github-com-multiformats-go-multiaddr" ,go-github-com-multiformats-go-multiaddr)
-         ("go-github-com-multiformats-go-multiaddr-net" ,go-github-com-multiformats-go-multiaddr-net)
-         ("go-github-com-btcsuite-btcd-btcec" ,go-github-com-btcsuite-btcd-btcec)
-         ("go-github-com-gogo-protobuf" ,go-github-com-gogo-protobuf)
-         ("go-github-com-minio-blake2b-simd" ,go-github-com-minio-blake2b-simd)
-         ("go-github-com-minio-sha256-simd" ,go-github-com-minio-sha256-simd)
-         ("go-github-com-mr-tron-base58" ,go-github-com-mr-tron-base58)
-         ("go-github-com-multiformats-go-multihash" ,go-github-com-multiformats-go-multihash)
-         ("go-golang-org-x-crypto" ,go-golang-org-x-crypto)
-         ("go-github-com-spaolacci-murmur3" ,go-github-com-spaolacci-murmur3)
-         ("go-github-com-gxed-hashland-keccakpg" ,go-github-com-gxed-hashland-keccakpg)
-         ("go-github-com-whyrusleeping-tar-utils" ,go-github-com-whyrusleeping-tar-utils)
-         ("go-github-com-cheekybits-is" ,go-github-com-cheekybits-is)))
+       (list go-github-com-ipfs-go-ipfs-cmdkit-files
+             go-github-com-libp2p-go-libp2p-metrics
+             go-github-com-libp2p-go-flow-metrics
+             go-github-com-libp2p-go-libp2p-peer
+             go-github-com-libp2p-go-libp2p-protocol
+             go-github-com-libp2p-go-libp2p-crypto
+             go-github-com-mitchellh-go-homedir
+             go-github-com-multiformats-go-multiaddr
+             go-github-com-multiformats-go-multiaddr-net
+             go-github-com-btcsuite-btcd-btcec
+             go-github-com-gogo-protobuf
+             go-github-com-minio-blake2b-simd
+             go-github-com-minio-sha256-simd
+             go-github-com-mr-tron-base58
+             go-github-com-multiformats-go-multihash
+             go-golang-org-x-crypto
+             go-github-com-spaolacci-murmur3
+             go-github-com-gxed-hashland-keccakpg
+             go-github-com-whyrusleeping-tar-utils
+             go-github-com-cheekybits-is))
       (home-page "https://github.com/ipfs/go-ipfs-api")
       (synopsis "Unofficial Go interface to IPFS's HTTP API")
       (description "An unofficial Go interface to IPFS's HTTP API")
@@ -120,32 +123,32 @@ that are shared between @command{go-ipfs/commands} and its rewrite
     (arguments
      '(#:import-path "github.com/whyrusleeping/gx"))
     (native-inputs
-     `(("go-github-com-blang-semver" ,go-github-com-blang-semver)
-       ("go-github-com-gxed-hashland-keccakpg" ,go-github-com-gxed-hashland-keccakpg)
-       ("go-github-com-ipfs-go-ipfs-api" ,go-github-com-ipfs-go-ipfs-api)
-       ("go-github-com-ipfs-go-ipfs-cmdkit-files" ,go-github-com-ipfs-go-ipfs-cmdkit-files)
-       ("go-github-com-libp2p-go-flow-metrics" ,go-github-com-libp2p-go-flow-metrics)
-       ("go-github-com-libp2p-go-libp2p-crypto" ,go-github-com-libp2p-go-libp2p-crypto)
-       ("go-github-com-libp2p-go-libp2p-metrics" ,go-github-com-libp2p-go-libp2p-metrics)
-       ("go-github-com-libp2p-go-libp2p-peer" ,go-github-com-libp2p-go-libp2p-peer)
-       ("go-github-com-libp2p-go-libp2p-protocol" ,go-github-com-libp2p-go-libp2p-protocol)
-       ("go-github-com-minio-blake2b-simd" ,go-github-com-minio-blake2b-simd)
-       ("go-github-com-minio-sha256-simd" ,go-github-com-minio-sha256-simd)
-       ("go-github-com-mitchellh-go-homedir" ,go-github-com-mitchellh-go-homedir)
-       ("go-github-com-mr-tron-base58" ,go-github-com-mr-tron-base58)
-       ("go-github-com-multiformats-go-multiaddr" ,go-github-com-multiformats-go-multiaddr)
-       ("go-github-com-multiformats-go-multiaddr-net" ,go-github-com-multiformats-go-multiaddr-net)
-       ("go-github-com-multiformats-go-multihash" ,go-github-com-multiformats-go-multihash)
-       ("go-github-com-spaolacci-murmur3" ,go-github-com-spaolacci-murmur3)
-       ("go-github-com-whyrusleeping-tar-utils" ,go-github-com-whyrusleeping-tar-utils)
-       ("go-github-com-btcsuite-btcd-btcec" ,go-github-com-btcsuite-btcd-btcec)
-       ("go-github-com-gogo-protobuf" ,go-github-com-gogo-protobuf)
-       ("go-github-com-sabhiram-go-gitignore" ,go-github-com-sabhiram-go-gitignore)
-       ("go-github-com-urfave-cli" ,go-github-com-urfave-cli)
-       ("go-github-com-whyrusleeping-json-filter" ,go-github-com-whyrusleeping-json-filter)
-       ("go-github-com-whyrusleeping-progmeter" ,go-github-com-whyrusleeping-progmeter)
-       ("go-github-com-whyrusleeping-stump" ,go-github-com-whyrusleeping-stump)
-       ("go-golang-org-x-crypto" ,go-golang-org-x-crypto)))
+     (list go-github-com-blang-semver
+           go-github-com-gxed-hashland-keccakpg
+           go-github-com-ipfs-go-ipfs-api
+           go-github-com-ipfs-go-ipfs-cmdkit-files
+           go-github-com-libp2p-go-flow-metrics
+           go-github-com-libp2p-go-libp2p-crypto
+           go-github-com-libp2p-go-libp2p-metrics
+           go-github-com-libp2p-go-libp2p-peer
+           go-github-com-libp2p-go-libp2p-protocol
+           go-github-com-minio-blake2b-simd
+           go-github-com-minio-sha256-simd
+           go-github-com-mitchellh-go-homedir
+           go-github-com-mr-tron-base58
+           go-github-com-multiformats-go-multiaddr
+           go-github-com-multiformats-go-multiaddr-net
+           go-github-com-multiformats-go-multihash
+           go-github-com-spaolacci-murmur3
+           go-github-com-whyrusleeping-tar-utils
+           go-github-com-btcsuite-btcd-btcec
+           go-github-com-gogo-protobuf
+           go-github-com-sabhiram-go-gitignore
+           go-github-com-urfave-cli
+           go-github-com-whyrusleeping-json-filter
+           go-github-com-whyrusleeping-progmeter
+           go-github-com-whyrusleeping-stump
+           go-golang-org-x-crypto))
     (home-page "https://github.com/whyrusleeping/gx")
     (synopsis "Package management tool using IPFS")
     (description "@command{gx} is a packaging tool built around the
@@ -179,32 +182,32 @@ powerful and simple.")
     (arguments
      '(#:import-path "github.com/whyrusleeping/gx-go"))
     (native-inputs
-     `(("go-github-com-whyrusleeping-gx-util" ,go-github-com-whyrusleeping-gx-util)
-       ("go-github-com-kr-fs" ,go-github-com-kr-fs)
-       ("go-github-com-gxed-hashland-keccakpg" ,go-github-com-gxed-hashland-keccakpg)
-       ("go-github-com-ipfs-go-ipfs-api" ,go-github-com-ipfs-go-ipfs-api)
-       ("go-github-com-ipfs-go-ipfs-cmdkit-files" ,go-github-com-ipfs-go-ipfs-cmdkit-files)
-       ("go-github-com-libp2p-go-flow-metrics" ,go-github-com-libp2p-go-flow-metrics)
-       ("go-github-com-libp2p-go-libp2p-crypto" ,go-github-com-libp2p-go-libp2p-crypto)
-       ("go-github-com-libp2p-go-libp2p-metrics" ,go-github-com-libp2p-go-libp2p-metrics)
-       ("go-github-com-libp2p-go-libp2p-peer" ,go-github-com-libp2p-go-libp2p-peer)
-       ("go-github-com-libp2p-go-libp2p-protocol" ,go-github-com-libp2p-go-libp2p-protocol)
-       ("go-github-com-minio-blake2b-simd" ,go-github-com-minio-blake2b-simd)
-       ("go-github-com-minio-sha256-simd" ,go-github-com-minio-sha256-simd)
-       ("go-github-com-mitchellh-go-homedir" ,go-github-com-mitchellh-go-homedir)
-       ("go-github-com-mr-tron-base58" ,go-github-com-mr-tron-base58)
-       ("go-github-com-multiformats-go-multiaddr" ,go-github-com-multiformats-go-multiaddr)
-       ("go-github-com-multiformats-go-multiaddr-net" ,go-github-com-multiformats-go-multiaddr-net)
-       ("go-github-com-multiformats-go-multihash" ,go-github-com-multiformats-go-multihash)
-       ("go-github-com-spaolacci-murmur3" ,go-github-com-spaolacci-murmur3)
-       ("go-github-com-whyrusleeping-tar-utils" ,go-github-com-whyrusleeping-tar-utils)
-       ("go-github-com-btcsuite-btcd-btcec" ,go-github-com-btcsuite-btcd-btcec)
-       ("go-github-com-gogo-protobuf" ,go-github-com-gogo-protobuf)
-       ("go-github-com-sabhiram-go-gitignore" ,go-github-com-sabhiram-go-gitignore)
-       ("go-github-com-urfave-cli" ,go-github-com-urfave-cli)
-       ("go-github-com-whyrusleeping-progmeter" ,go-github-com-whyrusleeping-progmeter)
-       ("go-github-com-whyrusleeping-stump" ,go-github-com-whyrusleeping-stump)
-       ("go-golang-org-x-crypto" ,go-golang-org-x-crypto)))
+     (list go-github-com-whyrusleeping-gx-util
+           go-github-com-kr-fs
+           go-github-com-gxed-hashland-keccakpg
+           go-github-com-ipfs-go-ipfs-api
+           go-github-com-ipfs-go-ipfs-cmdkit-files
+           go-github-com-libp2p-go-flow-metrics
+           go-github-com-libp2p-go-libp2p-crypto
+           go-github-com-libp2p-go-libp2p-metrics
+           go-github-com-libp2p-go-libp2p-peer
+           go-github-com-libp2p-go-libp2p-protocol
+           go-github-com-minio-blake2b-simd
+           go-github-com-minio-sha256-simd
+           go-github-com-mitchellh-go-homedir
+           go-github-com-mr-tron-base58
+           go-github-com-multiformats-go-multiaddr
+           go-github-com-multiformats-go-multiaddr-net
+           go-github-com-multiformats-go-multihash
+           go-github-com-spaolacci-murmur3
+           go-github-com-whyrusleeping-tar-utils
+           go-github-com-btcsuite-btcd-btcec
+           go-github-com-gogo-protobuf
+           go-github-com-sabhiram-go-gitignore
+           go-github-com-urfave-cli
+           go-github-com-whyrusleeping-progmeter
+           go-github-com-whyrusleeping-stump
+           go-golang-org-x-crypto))
     (home-page "https://github.com/whyrusleeping/gx-go")
     (synopsis "Golang subtool for the @command{gx} package manager")
     (description "A subtool for the @command{gx} package manager for packages
@@ -214,7 +217,7 @@ written in Go.")
 (define-public go-ipfs
   (package
     (name "go-ipfs")
-    (version "0.8.0")
+    (version "0.11.0")
     (source
      (origin
        (method url-fetch/tarbomb)
@@ -222,21 +225,14 @@ written in Go.")
              "https://dist.ipfs.io/go-ipfs/v" version
              "/go-ipfs-source.tar.gz"))
        (sha256
-        (base32 "0k2qzlfz8ks9c70rxsy7jvk6d2s6yll1b8v9k2kcw07r989gxbdq"))
+        (base32 "13pmj83hwpz6mk7x52qn0cjnfqxqw2qri3r0k4b270w3bafcccwm"))
        (file-name (string-append name "-" version "-source"))))
     (build-system go-build-system)
     (arguments
-     '(#:unpack-path "github.com/ipfs/go-ipfs"
-       #:import-path "github.com/ipfs/go-ipfs/cmd/ipfs"
-       #:phases (modify-phases %standard-phases
-                  (add-before 'reset-gzip-timestamps 'make-files-writable
-                    (lambda* (#:key outputs #:allow-other-keys)
-                      ;; Make sure .gz files are writable so that the
-                      ;; 'reset-gzip-timestamps' phase can do its work.
-                      (let ((out (assoc-ref outputs "out")))
-                        (for-each make-file-writable
-                                  (find-files out "\\.gz$"))
-                        #t))))))
+     `(#:unpack-path "github.com/ipfs/go-ipfs"
+       #:import-path "github.com/ipfs/go-ipfs/cmd/ipfs"))
+    (native-inputs
+     (list python-minimal-wrapper zsh))
     (home-page "https://ipfs.io")
     (synopsis "Go implementation of IPFS, a peer-to-peer hypermedia protocol")
     (description "IPFS is a global, versioned, peer-to-peer file system.  It
diff --git a/gnu/packages/irc.scm b/gnu/packages/irc.scm
index d95c1a716a..72f9fd5c96 100644
--- a/gnu/packages/irc.scm
+++ b/gnu/packages/irc.scm
@@ -2,10 +2,10 @@
 ;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com>
 ;;; Copyright © 2014 Kevin Lemonnier <lemonnierk@ulrar.net>
 ;;; Copyright © 2015, 2017 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Nikita <nikita@n0.is>
 ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
-;;; Copyright © 2017–2021 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2017–2022 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020 Oleg Pykhalov <go.wigust@gmail.com>
 ;;; Copyright © 2020, 2021 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
@@ -28,6 +28,7 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages irc)
+  #:use-module (guix gexp)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix download)
   #:use-module (guix git-download)
@@ -46,7 +47,9 @@
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
   #:use-module (gnu packages backup)
+  #:use-module (gnu packages boost)
   #:use-module (gnu packages check)
+  #:use-module (gnu packages code)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages cyrus-sasl)
@@ -88,55 +91,54 @@
 (define-public quassel
   (package
     (name "quassel")
-    (version "0.13.1")
+    (version "0.14.0")
     (source
       (origin
         (method url-fetch)
         (uri (string-append "https://quassel-irc.org/pub/quassel-"
-                            version ".tar.bz2"))
+                            version ".tar.xz"))
         (sha256
          (base32
-          "0mg8jydc70vlylppzich26q4s40kr78r3ysfyjwisfvlg2byxvs8"))
-        (patches (search-patches "quassel-qt-514-compat.patch"))
+          "042fzssydvv35jjknziph8iyyjsyrsb2hp3d0ix0bqbagbrpf1q9"))
         (modules '((guix build utils)))
         ;; We don't want to install the bundled inxi script.
         (snippet
          '(begin
-            (delete-file "data/scripts/inxi")
-            #t))))
+            (delete-file "data/scripts/inxi")))))
     (build-system qt-build-system)
     (arguments
       ;; The three binaries are not mutually exlusive, and are all built
       ;; by default.
-     '(#:configure-flags '(;;"-DWANT_QTCLIENT=OFF" ; 6.1 MiB
-                           ;;"-DWANT_CORE=OFF" ; 3.0 MiB
-                           ;;"-DWANT_MONO=OFF" ; 7.6 MiB
-                           "-DWITH_KDE=OFF" ; no to kde integration ...
-                           "-DWITH_BUNDLED_ICONS=ON" ; so we install bundled icons
-                           "-DWITH_OXYGEN_ICONS=ON" ; also the oxygen ones
-                           "-DWITH_WEBENGINE=OFF") ; we don't depend on qtwebengine
+     '(#:configure-flags '("-DBUILD_TESTING=ON"
+                           ;;"-DWANT_QTCLIENT=OFF"
+                           ;;"-DWANT_CORE=OFF"
+                           ;;"-DWANT_MONO=OFF"
+                           "-DWITH_KDE=OFF"
+                           "-DWITH_BUNDLED_ICONS=ON"
+                           "-DWITH_OXYGEN_ICONS=ON"
+                           ;; This disables link previews.
+                           "-DWITH_WEBENGINE=OFF")
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-inxi-reference
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((inxi (string-append (assoc-ref inputs "inxi") "/bin/inxi")))
-               (symlink inxi "data/scripts/inxi")
-               #t))))
-       #:tests? #f)) ; no test target
+             (let ((inxi (search-input-file inputs "/bin/inxi")))
+               (symlink inxi "data/scripts/inxi")))))))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules pkg-config qttools))
     (inputs
-     `(("inxi" ,inxi-minimal)
-       ("libdbusmenu-qt" ,libdbusmenu-qt)
-       ("qca" ,qca)
-       ("qtbase" ,qtbase-5)
-       ("qtmultimedia" ,qtmultimedia)
-       ("qtscript" ,qtscript)
-       ("qtsvg" ,qtsvg)
-       ("snorenotify" ,snorenotify)
-       ("zlib" ,zlib)))
+     (list boost
+           inxi-minimal
+           libdbusmenu-qt
+           perl
+           qca
+           qtbase-5
+           qtmultimedia
+           qtscript
+           qtsvg
+           snorenotify
+           sonnet
+           zlib))
     (home-page "https://quassel-irc.org/")
     (synopsis "Distributed IRC client")
     (description "Quassel is a distributed IRC client, meaning that one or more
@@ -167,6 +169,7 @@ irssi, but graphical.")
                (setenv "CONFIG_SHELL" (which "bash"))
                (invoke "./configure"
                        (string-append "--prefix=" out)
+                       (string-append "--enable-true-color")
                        (string-append "--with-proxy")
                        (string-append "--with-socks")
                        (string-append "--with-bot")))))
@@ -174,12 +177,9 @@ irssi, but graphical.")
            (lambda _
              (setenv "HOME" (getcwd)))))))
     (inputs
-     `(("glib" ,glib)
-       ("ncurses" ,ncurses)
-       ("openssl" ,openssl)
-       ("perl" ,perl)))
+     (list glib ncurses openssl perl utf8proc))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://irssi.org/")
     (synopsis "Terminal-based IRC client")
     (description
@@ -190,44 +190,61 @@ SILC and ICB protocols via plugins.")
 (define-public weechat
   (package
     (name "weechat")
-    (version "3.2")
+    (version "3.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://weechat.org/files/src/weechat-"
                                   version ".tar.xz"))
               (sha256
                (base32
-                "1a47knznlm9f2f83d71s3c4fm50m6iq6iq1bvp4m61p8fkrsva1r"))))
+                "0k5rgdy0c4dnxvsqjzyrr5czz1lmfk1vrsqkkvj8v24y0b3xrlvw"))))
     (build-system cmake-build-system)
+    (outputs '("out" "doc"))
     (native-inputs
-     `(("gettext" ,gettext-minimal)
+     `(("gettext-minimal" ,gettext-minimal)
        ("pkg-config" ,pkg-config)
+       ,@(if (or (target-x86-64?)
+                 (target-x86-32?))
+           `(("ruby-asciidoctor" ,ruby-asciidoctor))
+           '())
        ;; For tests.
        ("cpputest" ,cpputest)))
     (inputs
-     `(("aspell" ,aspell)
-       ("curl" ,curl)
-       ("gnutls" ,gnutls)
-       ("libgcrypt" ,libgcrypt "out")
-       ("ncurses" ,ncurses)
-       ("zlib" ,zlib)
-
-       ;; Scripting language plug-ins.
-       ("guile" ,guile-3.0)
-       ("lua" ,lua-5.1)
-       ("perl" ,perl)
-       ("python" ,python)
-       ("tcl" ,tcl)))
+     (list aspell
+           curl
+           gnutls
+           libgcrypt
+           ncurses
+           zlib
+           ;; Scripting language plug-ins.
+           guile-3.0
+           lua-5.1
+           perl
+           python
+           ruby
+           tcl))
     (arguments
      `(#:configure-flags
        (list "-DENABLE_PHP=OFF"
-             "-DENABLE_RUBY=OFF"
+             ,@(if (or (target-x86-64?)
+                       (target-x86-32?))
+                 '("-DENABLE_MAN=ON"
+                   "-DENABLE_DOC=ON")
+                '())
              "-DENABLE_TESTS=ON")       ; ‘make test’ fails otherwise
-       ;; Tests hang indefinitely on non-Intel platforms.
-       #:tests? ,(if (any (cute string-prefix? <> (or (%current-target-system)
-                                                      (%current-system)))
-                          '("i686" "x86_64"))
-                   '#t '#f)))
+       #:phases
+       (modify-phases %standard-phases
+         ,@(if (or (target-x86-64?)
+                   (target-x86-32?))
+             '((add-after 'install 'move-doc
+                 (lambda* (#:key outputs #:allow-other-keys)
+                   (let* ((out (assoc-ref outputs "out"))
+                         (doc (assoc-ref outputs "doc"))
+                         (from (string-append out "/share/doc/weechat"))
+                         (to (string-append doc "/share/doc/weechat")))
+                     (mkdir-p (string-append doc "/share/doc"))
+                     (rename-file from to)))))
+             '()))))
     (synopsis "Extensible chat client")
     (description "WeeChat (Wee Enhanced Environment for Chat) is an
 @dfn{Internet Relay Chat} (IRC) client, which is designed to be light and fast.
@@ -236,13 +253,13 @@ Qt, Android, and Emacs.
 
 Everything in WeeChat can be done with the keyboard, though it also supports
 using a mouse.  It is customizable and extensible with plugins and scripts.")
-    (home-page "https://www.weechat.org/")
+    (home-page "https://weechat.org/")
     (license license:gpl3)))
 
 (define-public srain
   (package
     (name "srain")
-    (version "1.2.4")
+    (version "1.3.1")
     (source
      (origin
        (method git-fetch)
@@ -251,7 +268,7 @@ using a mouse.  It is customizable and extensible with plugins and scripts.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0lssrbk03rj92mqfaz5pgm0nplzyxrjywcknbx28lnvyfyzm3bks"))))
+        (base32 "1xjk3fa3fkmsczif1bzcmi79k4z3jfdgcljfdiyn4iv5bh778swc"))))
     (build-system meson-build-system)
     (arguments
      `(#:tests? #f ;there are no tests
@@ -263,13 +280,13 @@ using a mouse.  It is customizable and extensible with plugins and scripts.")
        ("python" ,python-wrapper)
        ("python-sphinx" ,python-sphinx)))
     (inputs
-     `(("glib-networking" ,glib-networking)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gtk+" ,gtk+)
-       ("libconfig" ,libconfig)
-       ("libsecret" ,libsecret)
-       ("libsoup" ,libsoup)
-       ("openssl" ,openssl)))
+     (list glib-networking
+           gsettings-desktop-schemas
+           gtk+
+           libconfig
+           libsecret
+           libsoup-minimal-2
+           openssl))
     (home-page "https://srain.im")
     (synopsis "Modern IRC client written in GTK")
     (description
@@ -314,28 +331,67 @@ for the IRCv3 protocol.")
                (("/bin/rm") "rm")
                (("/bin/mv") "mv")))))))
     (inputs
-     `(("ncurses" ,ncurses)
-       ("openssl" ,openssl)))
+     (list ncurses openssl))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("perl" ,perl)))
+     (list pkg-config perl))
     (home-page "http://www.eterna.com.au/ircii/")
     (synopsis "Terminal-based IRC and ICB client")
     (description
      "ircII is a terminal based IRC and ICB client for UNIX systems.")
     (license license:bsd-3)))
 
+(define-public catgirl
+  (package
+    (name "catgirl")
+    (version "1.9a")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://git.causal.agency/catgirl/snapshot/"
+                                  name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0pci8crcgm33zb58y7ky2aydzyqsirj8ri8ik1zdlz6npadbjj9h"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f ; no tests
+       #:make-flags (list (string-append "PREFIX=" %output)
+                          ,(string-append "CC=" (cc-for-target)))))
+    (native-inputs
+     (list universal-ctags pkg-config))
+    (inputs
+     (list libressl ncurses))
+    (home-page "https://git.causal.agency/catgirl")
+    (synopsis "TLS-only terminal IRC client")
+    (description
+     "@command{catgirl} is a TLS-only terminal IRC client.
+
+Notable features include:
+@itemize
+@item Tab complete: most recently seen or mentioned nicks are completed first.
+  Commas are inserted between multiple nicks.
+@item Prompt: the prompt clearly shows whether input will be interpreted as a
+command or sent as a message.
+@item Split scroll: keeps the latest messages in view while scrolling.
+@item URL detection: recent URLs from a particular user or matching a
+substring can be opened or copied.
+@item Nick coloring: color generation based on usernames remains stable across
+nick changes.  Mentions of users in messages are colored.
+@item Topic diffing: the modified portion of a channel topic change is
+highlighted.
+@end itemize")
+    (license license:gpl3+)))
+
 (define-public ii
   (package
     (name "ii")
-    (version "1.8")
+    (version "1.9")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://dl.suckless.org/tools/"
                                   name "-" version ".tar.gz"))
               (sha256
                (base32
-                "1lk8vjl7i8dcjh4jkg8h8bkapcbs465sy8g9c0chfqsywbmf3ndr"))))
+                "05wcaszm9hap5gqf58bciqm3ad1kfgp976fs3fsn3ll3nliv6345"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ; no tests
@@ -378,7 +434,7 @@ for the IRCv3 protocol.")
 (define-public kirc
   (package
     (name "kirc")
-    (version "0.2.7")
+    (version "0.2.9")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -386,7 +442,7 @@ for the IRCv3 protocol.")
                      (commit version)))
               (file-name (git-file-name name version))
               (sha256
-               (base32 "0phx00lr7ya8rx1hskv1wdwbq2vlihiqhnplqdvk1r3m23is7al9"))))
+               (base32 "0ahmfxhgcvnlgmxxbv9vga5x6krab1n7qq55ygj7hj3x7s7ra419"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ; no tests
@@ -417,16 +473,16 @@ all RFC 2812 commands, and customized color scheme definitions.")
         (base32 "0853xk1ps3v6lkmfx50wv56vynnzpl84v66hxnhl8i34zl36kk3c"))))
     (build-system python-build-system)
     (inputs
-     `(("python-pytz" ,python-pytz)
-       ("python-chardet" ,python-chardet)
-       ("python-dateutil" ,python-dateutil)
-       ("python-gnupg" ,python-gnupg)
-       ("python-feedparser" ,python-feedparser)
-       ("python-sqlalchemy" ,python-sqlalchemy)
-       ("python-socksipy-branch" ,python-socksipy-branch)
-       ("python-ecdsa" ,python-ecdsa)))
+     (list python-pytz
+           python-chardet
+           python-dateutil
+           python-gnupg
+           python-feedparser
+           python-sqlalchemy
+           python-socksipy-branch
+           python-ecdsa))
     (native-inputs
-     `(("python-mock" ,python-mock)))
+     (list python-mock))
     ;; Despite the existence of a test folder there is no test phase.
     ;; We need to package https://github.com/ProgVal/irctest and write
     ;; our own testphase.
@@ -504,14 +560,14 @@ other enhancements and bug fixes.")
                                       (assoc-ref %build-inputs "tcl")
                                       "/lib/tclConfig.sh"))))))))
     (inputs
-     `(("libressl" ,libressl)
-       ("ncurses" ,ncurses)
-       ("libarchive" ,libarchive) ; CHANGELOG: "Support for loading zip files"
-       ("perl" ,perl)
-       ("tcl" ,tcl)
-       ("ruby" ,ruby)))
+     (list libressl
+           ncurses
+           libarchive ; CHANGELOG: "Support for loading zip files"
+           perl
+           tcl
+           ruby))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://epicsol.org")
     (synopsis "Epic5 IRC Client")
     (description
@@ -527,10 +583,41 @@ interface for those who are accustomed to the ircII way of doing things.")
                    ;; distribute binaries.
                    (license:non-copyleft "http://epicsol.org/copyright")))))
 
+(define-public litterbox
+  (package
+    (name "litterbox")
+    (version "1.8")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://git.causal.agency/litterbox/snapshot/litterbox-"
+                           version ".tar.gz"))
+       (sha256
+        (base32 "0ll5d18slngdg2qhaxkvrcq2p1admh0h7sr06wx8347ka0vvrgjl"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f ; There are no tests.
+       #:make-flags
+       (list
+        (string-append "CC=" ,(cc-for-target))
+        (string-append "PREFIX=" %output))))
+    (native-inputs
+      (list pkg-config universal-ctags))
+    (inputs
+      (list libressl sqlite))
+    (home-page "https://code.causal.agency/june/litterbox")
+    (synopsis "TLS-only IRC logger")
+    (description
+"@command{litterbox} is a TLS-only IRC logger.  It logs
+events from IRC in a SQLite database, indexing messages for full-text
+search.  It is intended for use with the IRC bouncer @command{pounce},
+but can also be used independently as a logging bot.")
+    (license license:gpl3+)))
+
 (define-public inspircd
   (package
     (name "inspircd")
-    (version "3.8.1")
+    (version "3.12.0")
     (source
      (origin
        (method git-fetch)
@@ -539,63 +626,61 @@ interface for those who are accustomed to the ircII way of doing things.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1i30649dw84iscxa5as81g96f393mn1i883aq4za5ypdinr5x65g"))))
+        (base32 "0xlfs269iaw7dfryzl6vjzqsn2g4nqh6kpf5xfgk3zbjhqaczknx"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:configure-flags (map (lambda (module)
-                                (string-append "--enable-extras=" module))
-                              '("m_argon2.cpp"
-                                "m_geo_maxmind.cpp"
-                                "m_ldap.cpp"
-                                "m_mysql.cpp"
-                                "m_pgsql.cpp"
-                                "m_regex_pcre.cpp"
-                                "m_regex_posix.cpp"
-                                "m_regex_stdlib.cpp"
-                                "m_regex_re2.cpp"
-                                "m_regex_tre.cpp"
-                                "m_sqlite3.cpp"
-                                "m_ssl_gnutls.cpp"
-                                "m_ssl_openssl.cpp"
-                                "m_ssl_mbedtls.cpp"
-                                "m_sslrehashsignal.cpp"))
-       #:tests? #f ; Figure out later.
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'module-configure
-           (lambda* (#:key configure-flags #:allow-other-keys)
-             (apply invoke "./configure"
-                    configure-flags)
-             #t))
-         (replace 'configure
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (out-lib (string-append out "/lib/"))
-                    (out-bin (string-append out "/bin/"))
-                    (out-etc (string-append out "/etc/"))
-                    (name "inspircd"))
-               (invoke "./configure"
-                       (string-append "--prefix=" out-lib name)
-                       (string-append "--binary-dir=" out-bin)
-                       (string-append "--module-dir=" out-lib name "/modules/")
-                       (string-append "--config-dir=" out-etc name)))
-             #t)))))
+     (list #:configure-flags
+           #~(map (lambda (module)
+                    (string-append "--enable-extras=" module))
+                  '("m_argon2.cpp"
+                    "m_geo_maxmind.cpp"
+                    "m_ldap.cpp"
+                    "m_mysql.cpp"
+                    "m_pgsql.cpp"
+                    "m_regex_pcre.cpp"
+                    "m_regex_posix.cpp"
+                    "m_regex_stdlib.cpp"
+                    "m_regex_re2.cpp"
+                    "m_regex_tre.cpp"
+                    "m_sqlite3.cpp"
+                    "m_ssl_gnutls.cpp"
+                    "m_ssl_openssl.cpp"
+                    "m_ssl_mbedtls.cpp"
+                    "m_sslrehashsignal.cpp"))
+           #:tests? #f                  ; XXX figure out later
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-before 'configure 'module-configure
+                 (lambda* (#:key configure-flags #:allow-other-keys)
+                   (apply invoke "./configure"
+                          configure-flags)))
+               (replace 'configure
+                 (lambda _
+                   (let ((lib (string-append #$output "/lib/"))
+                         (bin (string-append #$output "/bin/"))
+                         (etc (string-append #$output "/etc/"))
+                         (name "inspircd"))
+                     (invoke "./configure"
+                             (string-append "--prefix=" lib name)
+                             (string-append "--binary-dir=" bin)
+                             (string-append "--module-dir=" lib name "/modules/")
+                             (string-append "--config-dir=" etc name))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("argon2" ,argon2)
-       ("gnutls" ,gnutls)
-       ("libmaxminddb" ,libmaxminddb)
-       ("mbedtls-apache" ,mbedtls-apache)
-       ("mysql" ,mysql)
-       ("openldap" ,openldap)
-       ("openssl" ,openssl)
-       ("pcre" ,pcre "bin")
-       ("perl" ,perl)
-       ("postgresql" ,postgresql)
-       ("re2" ,re2)
-       ("sqlite" ,sqlite)
-       ("tre" ,tre)))
+     (list argon2
+           gnutls
+           libmaxminddb
+           mbedtls-apache
+           mysql
+           openldap
+           openssl
+           `(,pcre "bin")
+           perl
+           postgresql
+           re2
+           sqlite
+           tre))
     (synopsis "Modular IRC server written in C++")
     (description "InspIRCd is a modular Internet Relay Chat
 server written in C++ for Unix-like operating systems.")
diff --git a/gnu/packages/irods.scm b/gnu/packages/irods.scm
index bb0263682c..e9ac0d5297 100644
--- a/gnu/packages/irods.scm
+++ b/gnu/packages/irods.scm
@@ -120,18 +120,15 @@
                (("'usr', 'lib', 'irods'") "'lib', 'irods'"))
              (substitute* "scripts/irods/pypyodbc.py"
                (("\"/usr/lib/libodbc.so\"")
-                (string-append (assoc-ref inputs "unixodbc") "/lib/libodbc.so")))))
+                (search-input-file inputs "/lib/libodbc.so")))))
          (add-after 'set-paths 'adjust-CPLUS_INCLUDE_PATH
            (lambda* (#:key inputs #:allow-other-keys)
              (let ((gcc (assoc-ref inputs  "gcc")))
                (setenv "CPLUS_INCLUDE_PATH"
                        (string-join
-                        (cons* (string-append (assoc-ref inputs "libcxx+libcxxabi")
-                                              "/include/c++/v1")
-                               (string-append (assoc-ref inputs "catch2")
-                                              "/include/catch2")
-                               (string-append (assoc-ref inputs "json")
-                                              "/include/nlohmann")
+                        (cons* (search-input-directory inputs "/include/c++/v1")
+                               (search-input-directory inputs "/include/catch2")
+                               (search-input-directory inputs "/include/nlohmann")
                                ;; Hide GCC's C++ headers so that they do not interfere with
                                ;; the Clang headers.
                                (delete (string-append gcc "/include/c++")
@@ -231,10 +228,10 @@ stored.")
              (let ((gcc (assoc-ref inputs  "gcc")))
                (setenv "CPLUS_INCLUDE_PATH"
                        (string-join
-                        (cons* (string-append (assoc-ref inputs "libcxx+libcxxabi")
-                                              "/include/c++/v1")
-                               (string-append (assoc-ref inputs "json")
-                                              "/include/nlohmann")
+                        (cons* (search-input-directory inputs
+                                                       "include/c++/v1")
+                               (search-input-directory inputs
+                                                       "include/nlohmann")
                                ;; Hide GCC's C++ headers so that they do not interfere with
                                ;; the Clang headers.
                                (delete (string-append gcc "/include/c++")
diff --git a/gnu/packages/iso-codes.scm b/gnu/packages/iso-codes.scm
index 637390d734..b2cfd3434c 100644
--- a/gnu/packages/iso-codes.scm
+++ b/gnu/packages/iso-codes.scm
@@ -44,10 +44,19 @@
               (base32
                "1q6x9c5x4x0x4q11iygldsmxdyzhz1mb4n8im76glwsgqsqyjs80"))))
     (build-system gnu-build-system)
+    ;; TODO(staging): Unconditionally move inputs to native-inputs.
+    (native-inputs
+     (if (%current-target-system)
+         `(("python" ,python-wrapper)
+           ("perl" ,perl)
+           ("gettext" ,gettext-minimal))
+         '()))
     (inputs
-     `(("gettext" ,gettext-minimal)
-       ("perl" ,perl)
-       ("python" ,python-wrapper)))
+     `(,@(if (%current-target-system)
+             '()
+             `(("gettext" ,gettext-minimal)
+               ("perl" ,perl)
+               ("python" ,python-wrapper)))))
     (synopsis "Various ISO standards")
     (description
      "This package provides lists of various ISO standards (e.g. country,
diff --git a/gnu/packages/jami.scm b/gnu/packages/jami.scm
index 5cb92840dc..9fcf55815b 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, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020, 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -26,15 +26,16 @@
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages backup)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages check)
   #: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 guile)
   #:use-module (gnu packages libcanberra)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages networking)
@@ -58,11 +59,12 @@
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system qt)
   #:use-module (guix download)
+  #:use-module (guix gexp)
   #:use-module (guix git-download)
   #:use-module (guix packages)
   #:use-module (guix utils))
 
-(define %jami-version "20210606.1.e2f9490")
+(define %jami-version "20211223.2.37be4c3")
 
 (define %jami-sources
   ;; Return an origin object of the tarball release sources archive of the
@@ -81,94 +83,73 @@
         (delete-file-recursively "daemon/contrib/tarballs")
         ;; Remove the git submodule directories of unused Jami clients.
         (for-each delete-file-recursively '("client-android"
-                                            "client-electron"
                                             "client-ios"
                                             "client-macosx"
                                             "client-uwp"))))
     (sha256
      (base32
-      "1vpxv2dk3l9cahv6mxd2754pxs9mzrid5bgwvl6k1byzpq8y4smr"))))
+      "12h4a0nj3gh05w64gkywrrb64agrhn6y3q4b9cqnhvr1vdkzlj0h"))))
 
 ;; Jami 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 them.
 (define jami-apply-custom-patches
-  '(lambda* (#:key inputs dep-name patches)
-     (let ((patches-directory "patches"))
-       (mkdir-p patches-directory)
-       (invoke "tar" "-xvf" (assoc-ref inputs "jami-sources")
-               "-C" patches-directory
-               "--strip-components=5"
-               (string-append "ring-project/daemon/contrib/src/"
-                              dep-name))
-       (for-each
-        (lambda (file)
-          (invoke "patch" "--force" "--ignore-whitespace" "-p1" "-i"
-                  (string-append patches-directory "/"
-                                 file ".patch")))
-        patches))))
+  #~(lambda* (#:key dep-name patches)
+      (let ((patches-directory "patches"))
+        (mkdir-p patches-directory)
+        (invoke "tar" "-xvf" #$%jami-sources
+                "-C" patches-directory
+                "--strip-components=5"
+                (string-append "ring-project/daemon/contrib/src/"
+                               dep-name))
+        (for-each
+         (lambda (file)
+           (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
-     `(("jami-sources" ,%jami-sources)
-       ,@(package-native-inputs pjproject)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments pjproject)
-       ((#:phases phases '%standard-phases)
-        `(modify-phases ,phases
-           (add-after 'make-source-files-writable 'apply-patches
-             (lambda* (#:key inputs #:allow-other-keys)
-               (,jami-apply-custom-patches
-                #:inputs inputs
-                #:dep-name "pjproject"
-                #:patches
-                '("0001-rfc6544"
-                  "0002-rfc2466"
-                  "0003-add-tcp-keep-alive"
-                  "0004-multiple_listeners"
-                  "0005-fix_ebusy_turn"
-                  "0006-ignore_ipv6_on_transport_check"
-                  "0007-upnp-srflx-nat-assisted-cand"
-                  "0008-fix_ioqueue_ipv6_sendto"
-                  "0009-add-config-site"
-                  ;; Already taken care of via the origin patches.
-                  ;;"0010-fix-pkgconfig"
-                  "0011-fix-tcp-death-detection"
-                  "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"
-                  "0019-ignore-down-interfaces"))))))))))
+  (let ((commit "e1f389d0b905011e0cb62cbdf7a8b37fc1bcde1a")
+        (revision "0"))
+    (package
+      (inherit pjproject)
+      (name "pjproject-jami")
+      (version (git-version "2.11" revision commit))
+      (source (origin
+                (inherit (package-source pjproject))
+                ;; The Jami development team regularly issues patches to
+                ;; pjproject to extend the its functionality and fix bugs;
+                ;; they are submitted for inclusion upstream but larger
+                ;; patches take time to be reviewed and merged, hence this
+                ;; forked repository.
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/savoirfairelinux/pjproject")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0inpmyb6mhrzr0g309d6clkc99lddqdvyf9xajz0igvgp9pvgpza"))))
+      (arguments
+       (substitute-keyword-arguments (package-arguments pjproject)
+         ((#:phases phases '%standard-phases)
+          #~(modify-phases #$phases
+              (add-after 'unpack 'apply-patches
+                (lambda _
+                  (#$jami-apply-custom-patches
+                   #:dep-name "pjproject"
+                   #:patches
+                   ;; This adds a config_site.h configuration file that sets
+                   ;; constants such as PJ_ICE_MAX_CAND that cannot be
+                   ;; configured at build time.
+                   '("0009-add-config-site")))))))))))
 
 ;; 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
+;; from the jami-project/daemon/contrib/src/ffmpeg/rules.mak file.  We try to
 ;; keep it as close to the official Jami package as possible, to provide all
-;; the codecs and extra features that are expected.
-;;
-;; See:
-;; https://review.jami.net/plugins/gitiles/ring-daemon/+/refs/heads/master/contrib/src/ffmpeg/rules.mak
-
+;; the codecs and extra features that are expected (see:
+;; https://review.jami.net/plugins/gitiles/ring-daemon/+/refs/heads/master/contrib/src/ffmpeg/rules.mak)
 (define %ffmpeg-default-configure-flags
   '("--disable-everything"
     "--enable-zlib"
@@ -188,7 +169,7 @@
     "--enable-protocol=unix"
     "--enable-protocol=pipe"
 
-    ;; enable muxers/demuxers
+    ;; Enable muxers/demuxers.
     "--disable-demuxers"
     "--disable-muxers"
     "--enable-muxer=rtp"
@@ -196,6 +177,7 @@
     "--enable-muxer=h263"
     "--enable-muxer=h264"
     "--enable-muxer=hevc"
+;    "--enable-muxer=matroska"
     "--enable-muxer=webm"
     "--enable-muxer=ogg"
     "--enable-muxer=pcm_s16be"
@@ -224,7 +206,7 @@
     "--enable-demuxer=h264"
     "--enable-demuxer=hevc"
 
-    ;; enable parsers
+    ;; Enable parsers.
     "--enable-parser=h263"
     "--enable-parser=h264"
     "--enable-parser=hevc"
@@ -233,7 +215,7 @@
     "--enable-parser=vp9"
     "--enable-parser=opus"
 
-    ;; encoders/decoders
+    ;; Encoders/decoders.
     "--enable-encoder=adpcm_g722"
     "--enable-decoder=adpcm_g722"
     "--enable-encoder=rawvideo"
@@ -264,7 +246,7 @@
     "--enable-encoder=libopus"
     "--enable-decoder=libopus"
 
-    ;; decoders for ringtones and audio streaming
+    ;; Decoders for ringtones and audio streaming.
     "--enable-decoder=flac"
     "--enable-decoder=vorbis"
     "--enable-decoder=aac"
@@ -299,7 +281,7 @@
     "--enable-decoder=pcm_u16be"
     "--enable-decoder=pcm_u16le"
 
-    ;; encoders/decoders for images
+    ;; Encoders/decoders for images.
     "--enable-encoder=gif"
     "--enable-decoder=gif"
     "--enable-encoder=jpegls"
@@ -313,7 +295,7 @@
     "--enable-encoder=tiff"
     "--enable-decoder=tiff"
 
-    ;; filters
+    ;; Filters.
     "--enable-filter=scale"
     "--enable-filter=overlay"
     "--enable-filter=amix"
@@ -347,8 +329,8 @@
     "--enable-encoder=mjpeg_vaapi"
     "--enable-encoder=hevc_vaapi"))
 
-;; ffnvcodec is not supported on ARM then we enable it here for i386 and
-;; x86_64 architectures.
+;; ffnvcodec is not supported on ARM; enable it only for the i386 and x86_64
+;; architectures.
 (define %ffmpeg-linux-x86-configure-flags
   '("--arch=x86"
     "--enable-cuvid"
@@ -379,82 +361,89 @@
 (define-public ffmpeg-jami
   (package/inherit ffmpeg
     (name "ffmpeg-jami")
-    (native-inputs
-     `(("jami-sources" ,%jami-sources)
-       ("libiconv" ,libiconv)
-       ,@(package-native-inputs ffmpeg)))
-    (supported-systems '("x86_64-linux" "i686-linux"
-                         "aarch64-linux" "armhf-linux"))
     (arguments
-     (append
-      '(#:tests? #f)
-      (substitute-keyword-arguments (package-arguments ffmpeg)
-        ((#:configure-flags '())
-         (ffmpeg-compose-configure-flags))
-        ((#:phases phases)
-         `(modify-phases ,phases
-            (add-after 'unpack 'make-git-checkout-writable
-              (lambda _
-                (for-each make-file-writable (find-files "."))))
+     (substitute-keyword-arguments (package-arguments ffmpeg)
+       ((#:tests? _ #f)
+        ;; The "rtp_ext_abs_send_time" patch causes the 'lavf-mov_rtphint'
+        ;; test to fail (see:
+        ;; https://git.jami.net/savoirfairelinux/jami-daemon/-/issues/685).
+        ;; TODO: Try to disable just this test.
+        #f)
+       ((#:configure-flags '())
+        (ffmpeg-compose-configure-flags))
+       ((#:phases phases)
+        #~(modify-phases #$phases
             (add-after 'unpack 'apply-patches
-              (lambda* (#:key inputs #:allow-other-keys)
+              (lambda _
                 ;; These patches come from:
-                ;; "ring-project/daemon/contrib/src/ffmpeg/rules.mak".
-                (,jami-apply-custom-patches
-                 #:inputs inputs #:dep-name "ffmpeg"
+                ;; "jami-project/daemon/contrib/src/ffmpeg/rules.mak".
+                (#$jami-apply-custom-patches
+                 #:dep-name "ffmpeg"
                  #:patches '("remove-mjpeg-log"
                              "change-RTCP-ratio"
                              "rtp_ext_abs_send_time"
                              "libopusdec-enable-FEC"
-                             "libopusenc-enable-FEC")))))))))))
+                             "libopusenc-enable-FEC"
+                             "screen-sharing-x11-fix"))))))))))
 
-(define-public libring
+(define-public libjami
   (package
-    (name "libring")
+    (name "libjami")
     (version %jami-version)
     (source %jami-sources)
-    (build-system gnu-build-system)
     (outputs '("out" "debug"))
+    (build-system gnu-build-system)
+    (arguments
+     (list
+      ;; The test suite fails to link when building libjami as a shared library:
+      ;; "testAccount_factory.cpp:(.text+0xc52): undefined reference to
+      ;; `jami::AccountFactory::AccountFactory()'.
+      #:tests? #f
+      ;; The agent links the daemon binary with libguile, which enables the
+      ;; execution of test plans described in Scheme.  It may be useful in
+      ;; user scripts too, until more generalized Scheme bindings are made
+      ;; (see: test/agent/README.md).
+      ;; FIXME: Fails to link when building libjami as a shared library:
+      ;; bindings.cpp:(.text+0x24): undefined reference to `jami::Logger::log
+      ;; [...].
+      #:configure-flags #~(list "--disable-agent")
+      #:make-flags #~(list "V=1")       ;build verbosely
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'change-directory/maybe
+            (lambda _
+              ;; Allow building from the tarball or a git checkout.
+              (false-if-exception (chdir "daemon")))))))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("asio" ,asio)
-       ("dbus-c++" ,dbus-c++)
-       ("eudev" ,eudev)
-       ("ffmpeg" ,ffmpeg-jami)
-       ("jack" ,jack-1)
-       ("jsoncpp" ,jsoncpp)
-       ("libarchive" ,libarchive)
-       ("libgit2" ,libgit2)
-       ("libnatpmp" ,libnatpmp)
-       ("libsecp256k1" ,libsecp256k1)
-       ("libupnp" ,libupnp)
-       ("opendht" ,opendht)
-       ("openssl" ,openssl)
-       ("pjproject" ,pjproject-jami)
-       ("pulseaudio" ,pulseaudio)
-       ("speex" ,speex)
-       ("speexdsp" ,speexdsp)
-       ("webrtc-audio-processing" ,webrtc-audio-processing)
-       ("yaml-cpp" ,yaml-cpp)))
+     (list alsa-lib
+           asio
+           dbus-c++
+           eudev
+           ffmpeg-jami
+           guile-3.0
+           jack-1
+           jsoncpp
+           libarchive
+           libgit2
+           libnatpmp
+           libsecp256k1
+           libupnp
+           opendht
+           openssl
+           pjproject-jami
+           pulseaudio
+           speex
+           speexdsp
+           webrtc-audio-processing
+           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)))
-    (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")))
-         (add-before 'build 'add-lib-dir
-           (lambda _
-             (mkdir-p "src/lib"))))))
+     (list autoconf
+           automake
+           cppunit
+           libtool
+           perl                         ;to generate manpages with pod2man
+           pkg-config
+           which))
     (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
@@ -464,40 +453,42 @@ protocols, as well as decentralized calling using P2P-DHT.")
     (home-page "https://jami.net/")
     (license license:gpl3+)))
 
-(define-public libringclient
+;;; Remove when 2023 comes.
+(define-public libring
+  (deprecated-package "libring" libjami))
+
+;;; Note: this package will eventually be absorbed into jami itself (the Qt
+;;; client).
+(define-public jami-libclient
   (package
-    (name "libringclient")
+    (name "jami-libclient")
     (version %jami-version)
     (source %jami-sources)
     (build-system cmake-build-system)
     (outputs '("out" "debug"))
+    (arguments
+     (list
+      #:tests? #f                       ;no test suite
+      #:configure-flags
+      #~(list (string-append "-DRING_XML_INTERFACES_DIR="
+                             #$(this-package-input "libjami")
+                             "/share/dbus-1/interfaces")
+              (string-append "-DRING_BUILD_DIR="
+                             #$(this-package-input "libjami")
+                             "/include")
+              ;; Call to the libraries directly instead of going through DBus
+              ;; to avoid issues (see: https://issues.guix.gnu.org/48538).
+              "-DENABLE_LIBWRAP=true")
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'change-directory/maybe
+            (lambda _
+              ;; Allow building from the tarball or a git checkout.
+              (false-if-exception (chdir "lrc")))))))
     (inputs
-     `(("libring" ,libring)
-       ("network-manager" ,network-manager)))
+     (list libjami network-manager))
     (propagated-inputs
-     `(("qtbase" ,qtbase-5)))     ; Qt is included in several installed headers.
-    (arguments
-     `(#:tests? #f                      ; There is no testsuite.
-       #:configure-flags
-       (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"))))))
+     (list qtbase-5))             ;Qt is included in several installed headers
     (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
@@ -507,33 +498,17 @@ decentralized calling using P2P-DHT.")
     (home-page "https://jami.net")
     (license license:gpl3+)))
 
+;;; Remove when 2023 comes.
+(define-public libringclient
+  (deprecated-package "libringclient" jami-libclient))
+
 (define-public jami-gnome
   (package
     (name "jami-gnome")
     (version %jami-version)
     (source %jami-sources)
-    (build-system cmake-build-system)
     (outputs '("out" "debug"))
-    (inputs
-     `(("clutter" ,clutter)
-       ("clutter-gtk" ,clutter-gtk)
-       ("gtk+" ,gtk+)
-       ("libcanberra" ,libcanberra)
-       ("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")))       ;for glib-compile-resources
-    (propagated-inputs
-     `(("libring" ,libring) ; Contains 'dring', the daemon, which is
-                            ; automatically started by DBus.
-       ("adwaita-icon-theme" ,adwaita-icon-theme)))
+    (build-system cmake-build-system)
     (arguments
      `(#:tests? #f                      ;no test suite
        #:imported-modules (,@%cmake-build-system-modules
@@ -543,13 +518,41 @@ decentralized calling using P2P-DHT.")
                   (guix build utils))
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'change-directory
+         (add-after 'unpack 'change-directory/maybe
            (lambda _
-             (chdir "client-gnome")))
+             ;; Allow building from the tarball or a git checkout.
+             (false-if-exception (chdir "client-gnome"))))
+         (add-after 'change-directory/maybe 'fix-webkit-detection
+           (lambda _
+             (substitute* "CMakeLists.txt"
+               (("WEBKIT webkit2gtk-4.0")
+                "WEBKIT webkit2gtk-4.1"))))
+         (add-after 'change-directory/maybe 'fix-version-string
+           (lambda _
+             (substitute* "CMakeLists.txt"
+               (("^# Set VERSION.*" anchor)
+                (string-append anchor
+                               "set(PROJECT_VERSION \"" ,version "\")\n")))))
          (add-after 'install 'glib-or-gtk-compile-schemas
            (assoc-ref gtk:%standard-phases 'glib-or-gtk-compile-schemas))
          (add-after 'glib-or-gtk-compile-schemas 'glib-or-gtk-wrap
            (assoc-ref gtk:%standard-phases 'glib-or-gtk-wrap)))))
+    (inputs
+     (list clutter
+           clutter-gtk
+           gtk+
+           jami-libclient
+           libcanberra
+           libappindicator
+           libnotify
+           network-manager
+           qrencode
+           sqlite
+           webkitgtk))
+    (native-inputs
+     (list pkg-config
+           gettext-minimal
+           `(,glib "bin")))             ;for glib-compile-resources
     (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
@@ -559,45 +562,54 @@ 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))
-
-(define-public jami-qt
   (package
-    (name "jami-qt")                    ;to be renamed 'jami' at some point
+    (name "jami")
     (version %jami-version)
-    (source %jami-sources)
+    (source (origin
+              (inherit %jami-sources)
+              (patches (search-patches "jami-fix-crash-on-quit.patch"))))
     (build-system qt-build-system)
     (outputs '("out" "debug"))
     (arguments
      `(#:tests? #f                      ;no test suite
        #:phases
        (modify-phases %standard-phases
-           (add-after 'unpack 'change-directory
-             (lambda _
-               (chdir "client-qt"))))))
+         (add-after 'unpack 'change-directory/maybe
+           (lambda _
+             ;; Allow building from the tarball or a git checkout.
+             (false-if-exception (chdir "client-qt"))))
+         (add-after 'change-directory/maybe 'fix-version-string
+           (lambda _
+             (substitute* "src/version.h"
+               (("VERSION_STRING")
+                "BUILD_DATE")           ;to avoid a redefinition error
+               (("// clang-format on.*" anchor)
+                (string-append "const char VERSION_STRING[] = \""
+                               ,version "\";\n"
+                               anchor)))))
+         (add-after 'change-directory/maybe 'use-desktop-opengl
+           ;; TODO: Remove after next release; this is no longer specified in
+           ;; the source following the update to Qt 6.
+           (lambda _
+             (substitute* "src/main.cpp"
+               (("Qt::AA_UseOpenGLES")
+                "Qt::AA_UseDesktopOpenGL")))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)
-       ("doxygen" ,doxygen)
-       ("graphviz" ,graphviz)))
+     (list pkg-config python qttools doxygen graphviz))
     (inputs
-     `(("libnotify" ,libnotify)
-       ("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
+     (list jami-libclient
+           libnotify
+           network-manager
+           qrencode
+           qtsvg
+           qtwebengine
+           qtwebchannel
+           qtmultimedia
+           qtdeclarative
+           qtgraphicaleffects
+           qtquickcontrols
+           qtquickcontrols2))
     (home-page "https://jami.net")
     (synopsis "Qt Jami client")
     (description "This package provides the Jami Qt client.  Jami is a secure
@@ -606,3 +618,7 @@ 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+)))
+
+;;; Remove when 2023 comes.
+(define-public jami-qt
+  (deprecated-package "jami-qt" jami))
diff --git a/gnu/packages/java-compression.scm b/gnu/packages/java-compression.scm
index 033b55c988..32d04a2fa6 100644
--- a/gnu/packages/java-compression.scm
+++ b/gnu/packages/java-compression.scm
@@ -237,9 +237,7 @@ compressor/decompressor.")
          (replace 'install (install-from-pom "pom.xml")))))
     (home-page "https://github.com/dain/snappy")
     (native-inputs
-     `(("java-guava" ,java-guava)
-       ("java-snappy" ,java-snappy)
-       ("java-testng" ,java-testng)))
+     (list java-guava java-snappy java-testng))
     (synopsis "Java port of the Snappy (de)compressor")
     (description
      "Iq80-snappy is a port of the Snappy compressor and decompressor rewritten
@@ -263,8 +261,7 @@ output created by the original C++ code, and is extremely fast.")
                 "0ncmhlqmrfmj96nqf6p77b9ws35lcfsvpfxzwxi2asissc83z1l3"))))
     (build-system ant-build-system)
     (native-inputs
-     `(("unzip" ,unzip)
-       ("java-junit" ,java-junit)))
+     (list unzip java-junit))
     (arguments
      `(#:tests? #f                      ; no tests
        #:jar-name "jbzip2.jar"
@@ -319,7 +316,7 @@ It can be used as a replacement for the Apache @code{CBZip2InputStream} /
         (replace 'install
           (install-from-pom "pom.xml")))))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://tukaani.org")
     (synopsis "XZ in Java")
     (description "Tukaani-xz is an implementation of xz compression/decompression
diff --git a/gnu/packages/java-graphics.scm b/gnu/packages/java-graphics.scm
index f7a89021cd..9a71548b9c 100644
--- a/gnu/packages/java-graphics.scm
+++ b/gnu/packages/java-graphics.scm
@@ -48,7 +48,7 @@
          (add-after 'unpack 'chdir
            (lambda _ (chdir "core") #t)))))
     (inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "http://piccolo2d.org")
     (synopsis "Structured 2D graphics framework")
     (description "Piccolo2D is a framework (in the Jazz ZUI tradition) to
@@ -75,15 +75,13 @@ libraries.")
          (add-before 'check 'start-xorg-server
            (lambda* (#:key inputs #:allow-other-keys)
              ;; The test suite requires a running X server.
-             (system (string-append (assoc-ref inputs "xorg-server")
-                                    "/bin/Xvfb :1 -screen 0 640x480x24 &"))
+             (system "Xvfb :1 -screen 0 640x480x24 &")
              (setenv "DISPLAY" ":1")
              #t)))))
     (inputs
-     `(("java-piccolo2d-core" ,java-piccolo2d-core)
-       ("java-junit" ,java-junit)))
+     (list java-piccolo2d-core java-junit))
     (native-inputs
-     `(("xorg-server" ,xorg-server))) ; for tests
+     (list xorg-server)) ; for tests
     (description "Piccolo2D is a framework (in the Jazz ZUI tradition) to
 create robust, full-featured graphical applications in Java, with features
 such as zooming and multiple representation.  This package provides additional
@@ -110,8 +108,7 @@ features not found in the core libraries.")))
      `(#:jar-name "marlin.jar"
        #:test-include (list "src/test/java/RunJUnitTest.java")))
     (inputs
-     `(("java-hamcrest-core" ,java-hamcrest-core)
-       ("java-junit" ,java-junit)))
+     (list java-hamcrest-core java-junit))
     (home-page "https://github.com/bourgesl/marlin-renderer/")
     (synopsis "Rendering engine")
     (description "Marlin is a Java2D @code{RenderingEngine} optimized for
diff --git a/gnu/packages/java-maths.scm b/gnu/packages/java-maths.scm
index 97343e0a16..45c42297ad 100644
--- a/gnu/packages/java-maths.scm
+++ b/gnu/packages/java-maths.scm
@@ -74,7 +74,7 @@
                (install-file (string-append "jblas-" ,version ".jar") target))
              #t)))))
     (inputs
-     `(("openblas" ,openblas)))
+     (list openblas))
     (native-inputs
      `(("ant" ,ant)
        ("ruby" ,ruby)                   ; for configure script
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index a404250d38..e54d2ed0cb 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -9,7 +9,7 @@
 ;;; Copyright © 2017, 2019, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018, 2019 Gábor Boskovits <boskovits@gmail.com>
 ;;; Copyright © 2018 Chris Marusich <cmmarusich@gmail.com>
-;;; Copyright © 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2019, 2020, 2021 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2020 Raghav Gururajan <raghavgururajan@disroot.org>
@@ -17,6 +17,7 @@
 ;;; Copyright © 2021 Vincent Legoll <vincent.legoll@gmail.com>
 ;;; Copyright © 2021 Mike Gerwitz <mtg@gnu.org>
 ;;; Copyright © 2021 Pierre Langlois <pierre.langlois@gmx.com>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -42,6 +43,7 @@
   #:use-module (guix svn-download)
   #:use-module ((guix build utils) #:select (alist-replace))
   #:use-module (guix utils)
+  #:use-module (guix gexp)
   #:use-module (guix build-system ant)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system maven)
@@ -58,6 +60,7 @@
   #:use-module (gnu packages elf)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages gawk)
+  #:use-module (gnu packages gcc)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages gl)
   #:use-module (gnu packages ghostscript) ;lcms
@@ -82,6 +85,7 @@
   #:use-module (gnu packages perl)
   #:use-module (gnu packages popt)
   #:use-module (gnu packages kerberos)
+  #:use-module (gnu packages security-token)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
   #:use-module (gnu packages texinfo)
@@ -111,47 +115,9 @@
 ;; much more support for Java 1.6 than the latest release, but we need to
 ;; build 0.99 first to get a working version of javah.  ECJ, the development
 ;; version of GNU Classpath, and the latest version of JamVM make up the
-;; second stage JDK with which we can build the OpenJDK with the Icedtea 1.x
-;; build framework.  We then build the more recent JDKs Icedtea 2.x and
-;; Icedtea 3.x.
-
-(define-public libantlr3c
-  (package
-    (name "libantlr3c")
-    (version "3.4")
-    (source
-     (origin
-       (method url-fetch)
-       (uri
-        (string-append "https://www.antlr3.org/download/C/"
-                       name "-" version ".tar.gz"))
-       (sha256
-        (base32 "0lpbnb4dq4azmsvlhp6khq1gy42kyqyjv8gww74g5lm2y6blm4fa"))))
-    (build-system gnu-build-system)
-    (arguments
-     `(#:configure-flags (list "--enable-debuginfo" "--disable-static")
-       #:phases (modify-phases %standard-phases
-                  (replace 'configure
-                    (lambda* (#:key build target native-inputs inputs outputs
-                              (configure-flags '()) out-of-source? system
-                              #:allow-other-keys)
-                      (let ((configure (assoc-ref %standard-phases 'configure))
-                            (enable-64bit? (member system '("aarch64-linux"
-                                                            "x86_64-linux"
-                                                            "mips64el-linux"))))
-                        (configure #:build build #:target target
-                                   #:native-inputs native-inputs
-                                   #:inputs inputs #:outputs outputs
-                                   #:configure-flags `(,(if enable-64bit?
-                                                            "--enable-64bit"
-                                                            '())
-                                                       ,@configure-flags)
-                                   #:out-of-source? out-of-source?)))))))
-    (synopsis "ANTLR C Library")
-    (description "LIBANTLR3C provides run-time C libraries for ANTLR3 (ANother
-Tool for Language Recognition v3).")
-    (home-page "https://www.antlr3.org/")
-    (license license:bsd-3)))
+;; second stage JDK with which we can build the OpenJDK with the Icedtea 2.x
+;; build framework.  We then build the more recent JDK Icedtea 3.x, and all
+;; other versions of OpenJDK.
 
 (define jikes
   (package
@@ -172,64 +138,6 @@ defined in The Java Language Specification into the bytecoded instruction set
 and binary format defined in The Java Virtual Machine Specification.")
     (license license:ibmpl1.0)))
 
-(define-public drip
-  ;; Last release is from 2014, with a few important commits afterwards.
-  (let ((commit "a4bd00df0199e78243847f06cc04ecaea31f8f08"))
-    (package
-      (name "drip")
-      (version (git-version "0.2.4" "1" commit))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://github.com/ninjudd/drip")
-                      (commit commit)))
-                (file-name (git-file-name name version))
-                (sha256
-                 (base32
-                  "0wzmjwfyldr3jn49517xd8yn7dgdk8h88qkga3kjyg1zc375ylg2"))))
-      (build-system gnu-build-system)
-      (native-inputs
-       `(("jdk" ,icedtea "jdk")))
-      (arguments
-       `(#:tests? #f                    ; No tests.
-         #:phases
-         (modify-phases %standard-phases
-           (delete 'configure)
-           (add-before 'install 'fix-wrapper
-             (lambda* (#:key inputs #:allow-other-keys)
-               (let ((jps (string-append (assoc-ref inputs "jdk") "/bin/jps")))
-                 (substitute* "bin/drip"
-                   (("jps") jps)
-                   (("brew update && brew upgrade drip") "guix pull && guix install drip")
-                   ;; No need to make:
-                   (("\\(cd -- \"\\$drip_dir\" && make -s\\) \\|\\| exit 1") "")
-                   ;; No need to include source:
-                   (("\\[\\[ -r \\$drip_dir/src/org/flatland/drip/Main\\.java \\]\\]")
-                    "true"))
-                 #t)))
-           (replace 'install
-             (lambda* (#:key outputs #:allow-other-keys)
-               (let* ((out (assoc-ref outputs "out"))
-                      (bin (string-append out "/bin"))
-                      (share (string-append out "/share/drip")))
-                 (mkdir-p bin)
-                 (for-each
-                  (lambda (file)
-                    (install-file (string-append "bin/" file) bin))
-                  '("drip" "drip_daemon" "drip_proxy"))
-                 (install-file "drip.jar" share)
-                 (substitute* (string-append bin "/drip")
-                   (("drip_dir=\\$bin_dir/..")
-                    (string-append "drip_dir=" share)))
-                 #t))))))
-      (home-page "https://github.com/ninjudd/drip")
-      (synopsis "Faster Java Virtual Machine launching")
-      (description "Drip is a launcher for the Java Virtual Machine that
-provides much faster startup times than the @command{java} command.  The @command{drip}
-script is intended to be a drop-in replacement for the @command{java} command,
-only faster.")
-      (license license:epl1.0))))
-
 ;; This is the last version of GNU Classpath that can be built without ECJ.
 (define classpath-bootstrap
   (package
@@ -242,13 +150,13 @@ only faster.")
               (sha256
                (base32
                 "0i99wf9xd3hw1sj2sazychb9prx8nadxh2clgvk3zlmb28v0jbfz"))
-              (patches (search-patches "classpath-aarch64-support.patch"))))
+              (patches (search-patches "classpath-aarch64-support.patch"
+                                       "classpath-miscompilation.patch"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
        (list (string-append "JAVAC="
-                            (assoc-ref %build-inputs "jikes")
-                            "/bin/jikes")
+                            (search-input-file %build-inputs "/bin/jikes"))
              "--disable-Werror"
              "--disable-gmp"
              "--disable-gtk-peer"
@@ -259,24 +167,10 @@ only faster.")
              "--disable-gjdoc")
        #:phases
        (modify-phases %standard-phases
-         ;; XXX: This introduces a memory leak as we remove a call to free up
-         ;; memory for the file name string.  This was necessary because of a
-         ;; runtime error that would have prevented us from building
-         ;; ant-bootstrap later.  See https://issues.guix.gnu.org/issue/36685
-         ;; for the gnarly details.
-         (add-after 'unpack 'remove-call-to-free
-           (lambda _
-             (substitute* "native/jni/java-io/java_io_VMFile.c"
-               (("result = cpio_isFileExists.*" m)
-                (string-append m "\n//")))
-             #t))
          (add-after 'install 'install-data
            (lambda _ (invoke "make" "install-data"))))))
     (native-inputs
-     `(("jikes" ,jikes)
-       ("fastjar" ,fastjar)
-       ("libltdl" ,libltdl)
-       ("pkg-config" ,pkg-config)))
+     (list jikes fastjar libltdl pkg-config))
     (home-page "https://www.gnu.org/software/classpath/")
     (synopsis "Essential libraries for Java")
     (description "GNU Classpath is a project to create core class libraries
@@ -301,11 +195,9 @@ language.")
               (sha256
                (base32
                 "06lhi03l3b0h48pc7x58bk9my2nrcf1flpmglvys3wyad6yraf36"))
+              ;; Remove precompiled software.
               (snippet
-               '(begin
-                  ;; Remove precompiled software.
-                  (delete-file "lib/classes.zip")
-                  #t))))
+               '(delete-file "lib/classes.zip"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
@@ -324,11 +216,7 @@ language.")
                  (lambda _ (invoke "autoreconf" "-vif"))))
             '%standard-phases)))
     (inputs
-     `(("classpath" ,classpath-bootstrap)
-       ("jikes" ,jikes)
-       ("libffi" ,libffi)
-       ("zip" ,zip)
-       ("zlib" ,zlib)))
+     (list classpath-bootstrap jikes libffi zip zlib))
     (native-inputs
      (if (string-prefix? "aarch64" (or (%current-system)
                                        (%current-target-system)))
@@ -373,19 +261,15 @@ JNI.")
        (modify-phases %standard-phases
          (delete 'bootstrap)
          (delete 'configure)
-         (replace 'build
+         (add-before 'build 'define-java-environment-variables
            (lambda* (#:key inputs #:allow-other-keys)
+             ;; First, set environment variables (eases debugging on -K).
              (setenv "JAVA_HOME" (assoc-ref inputs "jamvm"))
-             (setenv "JAVACMD"
-                     (string-append (assoc-ref inputs "jamvm")
-                                    "/bin/jamvm"))
-             (setenv "JAVAC"
-                     (string-append (assoc-ref inputs "jikes")
-                                    "/bin/jikes"))
-             (setenv "CLASSPATH"
-                     (string-append (assoc-ref inputs "jamvm")
-                                    "/lib/rt.jar"))
-
+             (setenv "JAVACMD" (search-input-file inputs "/bin/jamvm"))
+             (setenv "JAVAC" (search-input-file inputs "/bin/jikes"))
+             (setenv "CLASSPATH" (search-input-file inputs "/lib/rt.jar"))))
+         (replace 'build
+           (lambda* (#:key inputs outputs #:allow-other-keys)
              ;; Ant complains if this file doesn't exist.
              (setenv "HOME" "/tmp")
              (with-output-to-file "/tmp/.ant.properties"
@@ -412,7 +296,7 @@ JNI.")
                (("depends=\"jars,test-jar\"") "depends=\"jars\""))
              (invoke "bash" "bootstrap.sh"
                      (string-append "-Ddist.dir="
-                                    (assoc-ref %outputs "out")))))
+                                    (assoc-ref outputs "out")))))
          (add-after 'build 'strip-jar-timestamps ;based on ant-build-system
            (lambda* (#:key outputs #:allow-other-keys)
              (define (repack-archive jar)
@@ -441,14 +325,10 @@ JNI.")
              (for-each repack-archive
                     (find-files
                      (string-append (assoc-ref %outputs "out") "/lib")
-                     "\\.jar$"))
-             #t))
+                     "\\.jar$"))))
          (delete 'install))))
     (native-inputs
-     `(("jikes" ,jikes)
-       ("jamvm" ,jamvm-1-bootstrap)
-       ("unzip" ,unzip)
-       ("zip" ,zip)))
+     (list jikes jamvm-1-bootstrap unzip zip))
     (home-page "https://ant.apache.org")
     (synopsis "Build tool for Java")
     (description
@@ -477,24 +357,19 @@ build process and its dependencies, whereas Make uses Makefile format.")
     ;; bootstrapping the JDK.
     (build-system gnu-build-system)
     (arguments
-     `(#:modules ((guix build gnu-build-system)
-                  (guix build utils)
-                  (srfi srfi-1))
-       #:tests? #f ; there are no tests
+     `(#:tests? #f ; there are no tests
        #:phases
        (modify-phases %standard-phases
          (replace 'configure
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "CLASSPATH"
                      (string-join
-                      (cons (string-append (assoc-ref inputs "jamvm")
-                                           "/lib/rt.jar")
+                      (cons (search-input-file inputs "/lib/rt.jar")
                             (find-files (string-append
                                          (assoc-ref inputs "ant-bootstrap")
                                          "/lib")
                                         "\\.jar$"))
-                      ":"))
-             #t))
+                      ":"))))
          (replace 'build
            (lambda* (#:key inputs #:allow-other-keys)
              ;; The unpack phase enters the "org" directory by mistake.
@@ -516,14 +391,9 @@ Main-Class: org.eclipse.jdt.internal.compiler.batch.Main\n")))
              (let ((share (string-append (assoc-ref outputs "out")
                                          "/share/java/")))
                (mkdir-p share)
-               (install-file "ecj-bootstrap.jar" share)
-               #t))))))
+               (install-file "ecj-bootstrap.jar" share)))))))
     (native-inputs
-     `(("ant-bootstrap" ,ant-bootstrap)
-       ("unzip" ,unzip)
-       ("jikes" ,jikes)
-       ("jamvm" ,jamvm-1-bootstrap)
-       ("fastjar" ,fastjar)))
+     (list ant-bootstrap unzip jikes jamvm-1-bootstrap fastjar))
     (home-page "https://eclipse.org")
     (synopsis "Eclipse Java development tools core batch compiler")
     (description "This package provides the Eclipse Java core batch compiler
@@ -539,68 +409,62 @@ requirement for all GNU Classpath releases after version 0.93.")
     (arguments
      `(#:modules ((guix build utils))
        #:builder
-       (begin
-         (use-modules (guix build utils))
-         (let* ((bin    (string-append (assoc-ref %outputs "out") "/bin"))
-                (target (string-append bin "/javac"))
-                (guile  (string-append (assoc-ref %build-inputs "guile")
-                                       "/bin/guile"))
-                (ecj    (string-append (assoc-ref %build-inputs "ecj-bootstrap")
-                                       "/share/java/ecj-bootstrap.jar"))
-                (java   (string-append (assoc-ref %build-inputs "jamvm")
-                                       "/bin/jamvm"))
-                (bootcp (let ((jvmlib (string-append (assoc-ref %build-inputs "classpath")
-                                                     "/share/classpath")))
-                          (string-append jvmlib "/glibj.zip:"
-                                         jvmlib "/tools.zip"))))
-           (mkdir-p bin)
-           (with-output-to-file target
-             (lambda _
-               (format #t "#!~a --no-auto-compile\n!#\n" guile)
-               (write
-                `(begin (use-modules (ice-9 match)
-                                     (ice-9 receive)
-                                     (ice-9 hash-table)
-                                     (srfi srfi-1)
-                                     (srfi srfi-26))
-                        (define defaults
-                          '(("-bootclasspath" ,bootcp)
-                            ("-source" "1.5")
-                            ("-target" "1.5")
-                            ("-cp"     ".")))
-                        (define (main args)
-                          (let ((classpath (getenv "CLASSPATH")))
-                            (setenv "CLASSPATH"
-                                    (string-join (list ,ecj
-                                                       ,(string-append (assoc-ref %build-inputs "jamvm")
-                                                                       "/lib/rt.jar")
-                                                       (or classpath ""))
-                                                 ":")))
-                          (receive (vm-args other-args)
-                              ;; Separate VM arguments from arguments to ECJ.
-                              (partition (cut string-prefix? "-J" <>)
-                                         (fold (lambda (default acc)
-                                                 (if (member (first default) acc)
-                                                     acc (append default acc)))
-                                               args defaults))
-                            (apply system* ,java
-                                   (append
-                                    ;; Remove "-J" prefix
-                                    (map (cut string-drop <> 2) vm-args)
-                                    '("org.eclipse.jdt.internal.compiler.batch.Main")
-                                    (cons "-nowarn" other-args)))))
-                        ;; Entry point
-                        (let ((args (cdr (command-line))))
-                          (if (null? args)
-                              (format (current-error-port) "javac: no arguments given!\n")
-                              (main args)))))))
-           (chmod target #o755)
-           #t))))
-    (native-inputs
-     `(("guile" ,guile-2.2)
-       ("ecj-bootstrap" ,ecj-bootstrap)
-       ("jamvm" ,jamvm-1-bootstrap)
-       ("classpath" ,classpath-bootstrap)))
+       ,#~(begin
+            (use-modules (guix build utils))
+            (let* ((bin    (string-append #$output "/bin"))
+                   (target (string-append bin "/javac"))
+                   (guile  (string-append (assoc-ref %build-inputs "guile")
+                                          "/bin/guile"))
+                   (ecj    (string-append #$(this-package-native-input "ecj-bootstrap")
+                                          "/share/java/ecj-bootstrap.jar"))
+                   (java   (string-append #$(this-package-native-input "jamvm")
+                                          "/bin/jamvm"))
+                   (bootcp (let ((jvmlib (string-append
+                                          #$(this-package-native-input "classpath")
+                                          "/share/classpath")))
+                             (string-append jvmlib "/glibj.zip:"
+                                            jvmlib "/tools.zip"))))
+              (mkdir-p bin)
+              (with-output-to-file target
+                (lambda _
+                  (format #t "#!~a --no-auto-compile\n!#\n" guile)
+                  (write
+                   `(begin (use-modules (ice-9 match)
+                                        (ice-9 receive)
+                                        (ice-9 hash-table)
+                                        (srfi srfi-1)
+                                        (srfi srfi-26))
+                           (define defaults
+                             '(("-bootclasspath" ,bootcp)
+                               ("-source" "1.5")
+                               ("-target" "1.5")
+                               ("-cp"     ".")))
+                           (define (main args)
+                             (let ((classpath (getenv "CLASSPATH")))
+                               (setenv "CLASSPATH"
+                                       (string-join (list ,ecj (or classpath ""))
+                                                    ":")))
+                             (receive (vm-args other-args)
+                                 ;; Separate VM arguments from arguments to ECJ.
+                                 (partition (cut string-prefix? "-J" <>)
+                                            (fold (lambda (default acc)
+                                                    (if (member (first default) acc)
+                                                        acc (append default acc)))
+                                                  args defaults))
+                               (apply system* ,java
+                                      (append
+                                          ;; Remove "-J" prefix
+                                          (map (cut string-drop <> 2) vm-args)
+                                          '("org.eclipse.jdt.internal.compiler.batch.Main")
+                                        (cons "-nowarn" other-args)))))
+                           ;; Entry point
+                           (let ((args (cdr (command-line))))
+                             (if (null? args)
+                                 (format (current-error-port) "javac: no arguments given!\n")
+                                 (main args)))))))
+              (chmod target #o755)))))
+    (native-inputs
+     (list guile-3.0 ecj-bootstrap jamvm-1-bootstrap classpath-bootstrap))
     (description "This package provides a wrapper around the @dfn{Eclipse
 compiler for Java} (ecj) with a command line interface that is compatible with
 the standard javac executable.")))
@@ -645,13 +509,10 @@ the standard javac executable.")))
          (add-after 'install 'install-data
            (lambda _ (invoke "make" "install-data"))))))
     (native-inputs
-     `(("ecj-bootstrap" ,ecj-bootstrap)
-       ("ecj-javac-wrapper" ,ecj-javac-wrapper)
-       ("fastjar" ,fastjar)
-       ("jamvm" ,jamvm-1-bootstrap)
-       ("classpath" ,classpath-bootstrap)
-       ("libltdl" ,libltdl)
-       ("pkg-config" ,pkg-config)))))
+     (list classpath-bootstrap
+           ecj-bootstrap ecj-javac-wrapper
+           fastjar jamvm-1-bootstrap
+           libltdl pkg-config))))
 
 ;; We need this because classpath-bootstrap does not provide all of the tools
 ;; we need to build classpath-devel.
@@ -661,45 +522,42 @@ the standard javac executable.")))
     (source #f)
     (build-system trivial-build-system)
     (arguments
-     `(#:modules ((guix build utils))
-       #:builder
-       (begin
-         (use-modules (guix build utils))
-         (let* ((bash      (assoc-ref %build-inputs "bash"))
-                (jamvm     (assoc-ref %build-inputs "jamvm"))
-                (classpath (assoc-ref %build-inputs "classpath"))
-                (bin       (string-append (assoc-ref %outputs "out")
-                                          "/bin/")))
-           (mkdir-p bin)
-           (for-each (lambda (tool)
-                       (with-output-to-file (string-append bin tool)
-                         (lambda _
-                           ,@(if (string-prefix? "armhf" (or (%current-system)
-                                                             (%current-target-system)))
-                                 `((format #t "#!~a/bin/sh
+     (list
+      #:modules '((guix build utils))
+      #:builder
+      #~(begin
+          (use-modules (guix build utils))
+          (let ((bash      #$(this-package-native-input "bash-minimal"))
+                (jamvm     #$(this-package-native-input "jamvm"))
+                (classpath #$(this-package-native-input "classpath"))
+                (bin       (string-append #$output "/bin/")))
+            (mkdir-p bin)
+            (for-each (lambda (tool)
+                        (with-output-to-file (string-append bin tool)
+                          (lambda _
+                            #$@(if (string-prefix? "armhf" (or (%current-system)
+                                                               (%current-target-system)))
+                                   `((format #t "#!~a/bin/sh
 ~a/bin/jamvm -Xnocompact -classpath ~a/share/classpath/tools.zip \
 gnu.classpath.tools.~a.~a $@"
-                                   bash jamvm classpath tool
-                                   (if (string=? "native2ascii" tool)
-                                       "Native2ASCII" "Main")))
-                                 `((format #t "#!~a/bin/sh
+                                             bash jamvm classpath tool
+                                             (if (string=? "native2ascii" tool)
+                                                 "Native2ASCII" "Main")))
+                                   `((format #t "#!~a/bin/sh
 ~a/bin/jamvm -Xnocompact -Xnoinlining -classpath ~a/share/classpath/tools.zip \
 gnu.classpath.tools.~a.~a $@"
-                                   bash jamvm classpath tool
-                                   (if (string=? "native2ascii" tool)
-                                       "Native2ASCII" "Main"))))))
-                       (chmod (string-append bin tool) #o755))
-                     (list "javah"
-                           "rmic"
-                           "rmid"
-                           "orbd"
-                           "rmiregistry"
-                           "native2ascii"))
-           #t))))
-    (native-inputs
-     `(("bash" ,bash)
-       ("jamvm" ,jamvm-1-bootstrap)
-       ("classpath" ,classpath-0.99)))
+                                             bash jamvm classpath tool
+                                             (if (string=? "native2ascii" tool)
+                                                 "Native2ASCII" "Main"))))))
+                        (chmod (string-append bin tool) #o755))
+                      (list "javah"
+                            "rmic"
+                            "rmid"
+                            "orbd"
+                            "rmiregistry"
+                            "native2ascii"))))))
+    (native-inputs
+     (list bash-minimal jamvm-1-bootstrap classpath-0.99))
     (inputs '())
     (synopsis "Executables from GNU Classpath")
     (description "This package provides wrappers around the tools provided by
@@ -758,23 +616,15 @@ machine.")))
            (add-after 'unpack 'remove-unsupported-annotations
              (lambda _
                (substitute* (find-files "java" "\\.java$")
-                 (("@Override") ""))
-               #t))
+                 (("@Override") ""))))
            (add-after 'install 'install-data
              (lambda _ (invoke "make" "install-data"))))))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("libtool" ,libtool)
-         ("gettext" ,gettext-minimal)
-         ("texinfo" ,texinfo)
-         ("classpath-jamvm-wrappers" ,classpath-jamvm-wrappers) ; for javah
-         ("ecj-bootstrap" ,ecj-bootstrap)
-         ("ecj-javac-wrapper" ,ecj-javac-wrapper)
-         ("fastjar" ,fastjar)
-         ("jamvm" ,jamvm-1-bootstrap)
-         ("libltdl" ,libltdl)
-         ("pkg-config" ,pkg-config))))))
+       (list autoconf automake libltdl libtool gettext-minimal texinfo
+             pkg-config
+             classpath-jamvm-wrappers  ;for javah
+             ecj-bootstrap ecj-javac-wrapper fastjar
+             jamvm-1-bootstrap)))))
 
 (define jamvm
   (package (inherit jamvm-1-bootstrap)
@@ -791,11 +641,9 @@ machine.")))
                (search-patches "jamvm-2.0.0-disable-branch-patching.patch"
                                "jamvm-2.0.0-opcode-guard.patch"
                                "jamvm-2.0.0-aarch64-support.patch"))
+              ;; Remove precompiled software.
               (snippet
-               '(begin
-                  ;; Remove precompiled software.
-                  (delete-file "src/classlib/gnuclasspath/lib/classes.zip")
-                  #t))))
+               '(delete-file "src/classlib/gnuclasspath/lib/classes.zip"))))
     (build-system gnu-build-system)
     (arguments
      (substitute-keyword-arguments (package-arguments jamvm-1-bootstrap)
@@ -811,364 +659,111 @@ machine.")))
 (define ecj-javac-wrapper-final
   (package (inherit ecj-javac-wrapper)
     (native-inputs
-     `(("guile" ,guile-2.2)
-       ("ecj-bootstrap" ,ecj-bootstrap)
-       ("jamvm" ,jamvm)
-       ("classpath" ,classpath-devel)))))
+     (list guile-3.0 ecj-bootstrap jamvm classpath-devel))))
 
-;; The bootstrap JDK consisting of jamvm, classpath-devel,
-;; ecj-javac-wrapper-final cannot build Icedtea 2.x directly, because it's
-;; written in Java 7.  It can, however, build the unmaintained Icedtea 1.x,
-;; which uses Java 6 only.
-(define-public icedtea-6
+;; We jump ahead by patching the sources of ECJ 4.2.1 so that our bootstrap
+;; JDK can build it.  ECJ 4 allows us to skip the build of the first version
+;; of icedtea and build icedtea 2.x directly.
+(define-public ecj4-bootstrap
   (package
-    (name "icedtea")
-    (version "1.13.13")
+    (name "ecj-bootstrap")
+    (version "4.2.1")
     (source (origin
               (method url-fetch)
-              (uri (string-append
-                    "http://icedtea.wildebeest.org/download/source/icedtea6-"
-                    version ".tar.xz"))
+              (uri (string-append "http://archive.eclipse.org/eclipse/"
+                                  "downloads/drops4/R-" version
+                                  "-201209141800/ecjsrc-" version ".jar"))
               (sha256
                (base32
-                "0bg9sb4f7qbq77c0zf9m17p47ga0kf0r9622g9p12ysg26jd1ksg"))
-              (patches (search-patches
-                        "icedtea-6-extend-hotspot-aarch64-support.patch"))
-              (modules '((guix build utils)))
-              (snippet
-               '(begin
-                  (substitute* "Makefile.in"
-                    ;; do not leak information about the build host
-                    (("DISTRIBUTION_ID=\"\\$\\(DIST_ID\\)\"")
-                     "DISTRIBUTION_ID=\"\\\"guix\\\"\""))
-                  #t))))
+                "1x281p87m14zylvinkiz6gc23ss7pzlx419qjbql11jriwav4qfj"))))
+    ;; It would be so much easier if we could use the ant-build-system, but we
+    ;; cannot as we don't have ant at this point.  We use ecj for
+    ;; bootstrapping the JDK.
     (build-system gnu-build-system)
-    (outputs '("out"   ; Java Runtime Environment
-               "jdk"   ; Java Development Kit
-               "doc")) ; all documentation
     (arguments
-     `(;; There are many failing tests and many are known to fail upstream.
-       #:tests? #f
-
-       ;; The DSOs use $ORIGIN to refer to each other, but (guix build
-       ;; gremlin) doesn't support it yet, so skip this phase.
-       #:validate-runpath? #f
-
-       #:modules ((guix build utils)
-                  (guix build gnu-build-system)
-                  (srfi srfi-19))
-
-       #:configure-flags
-       `("--enable-bootstrap"
-         "--enable-nss"
-         "--without-rhino"
-         ,(string-append "--with-parallel-jobs="
-                         (number->string (parallel-job-count)))
-         "--disable-downloading"
-         "--disable-tests"
-         ,(string-append "--with-ecj="
-                         (assoc-ref %build-inputs "ecj")
-                         "/share/java/ecj-bootstrap.jar")
-         ,(string-append "--with-jar="
-                         (assoc-ref %build-inputs "fastjar")
-                         "/bin/fastjar")
-         ,(string-append "--with-jdk-home="
-                         (assoc-ref %build-inputs "classpath"))
-         ,(string-append "--with-java="
-                         (assoc-ref %build-inputs "jamvm")
-                         "/bin/jamvm"))
+     `(#:tests? #f                      ; there are no tests
        #:phases
        (modify-phases %standard-phases
          (replace 'unpack
-           (lambda* (#:key source inputs #:allow-other-keys)
-             (invoke "tar" "xvf" source)
-             (chdir (string-append "icedtea6-" ,version))
-             (mkdir "openjdk")
-             (copy-recursively (assoc-ref inputs "openjdk-src") "openjdk")
-             ;; The convenient OpenJDK source bundle is no longer
-             ;; available for download, so we have to take the sources
-             ;; from the Mercurial repositories and change the Makefile
-             ;; to avoid tests for the OpenJDK zip archive.
-             (with-directory-excursion "openjdk"
-               (for-each (lambda (part)
-                           (mkdir part)
-                           (copy-recursively
-                            (assoc-ref inputs
-                                       (string-append part "-src"))
-                            part))
-                         '("jdk" "hotspot" "corba"
-                           "langtools" "jaxp" "jaxws")))
-             (substitute* "patches/freetypeversion.patch"
-               (("REQUIRED_FREETYPE_VERSION = 2.2.1")
-                "REQUIRED_FREETYPE_VERSION = 2.10.1"))
-             (substitute* "Makefile.in"
-               (("echo \"ERROR: No up-to-date OpenJDK zip available\"; exit -1;")
-                "echo \"trust me\";")
-               ;; The contents of the bootstrap directory must be
-               ;; writeable but when copying from the store they are
-               ;; not.
-               (("mkdir -p lib/rt" line)
-                (string-append line "; chmod -R u+w $(BOOT_DIR)")))
-             (invoke "chmod" "-R" "u+w" "openjdk")))
-         (add-after 'unpack 'use-classpath
+           (lambda* (#:key source #:allow-other-keys)
+             (mkdir "src")
+             (with-directory-excursion "src"
+               (invoke "gjar" "-xf" source))
+             (chdir "src")))
+         (replace 'configure
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((jvmlib (assoc-ref inputs "classpath"))
-                   (jamvm  (assoc-ref inputs "jamvm")))
-               ;; Classpath does not provide rt.jar.
-               (substitute* "Makefile.in"
-                 (("\\$\\(SYSTEM_JDK_DIR\\)/jre/lib/rt.jar")
-                  (string-append jvmlib "/share/classpath/glibj.zip")))
-               ;; Make sure we can find all classes.
-               (setenv "CLASSPATH"
-                       (string-append jvmlib "/share/classpath/glibj.zip:"
-                                      jvmlib "/share/classpath/tools.zip:"
-                                      jamvm  "/lib/rt.jar"))
-               (setenv "JAVACFLAGS"
-                       (string-append "-cp "
-                                      jvmlib "/share/classpath/glibj.zip:"
-                                      jvmlib "/share/classpath/tools.zip")))
-             #t))
-         (add-after 'unpack 'patch-patches
-           (lambda _
-             ;; shebang in patches so that they apply cleanly
-             (substitute* '("patches/jtreg-jrunscript.patch"
-                            "patches/hotspot/hs23/drop_unlicensed_test.patch")
-               (("#!/bin/sh") (string-append "#!" (which "sh"))))
-             #t))
-         (add-after 'unpack 'patch-paths
+             (setenv "CLASSPATH"
+                     (string-join
+                      (cons (search-input-file inputs "/lib/rt.jar")
+                            (find-files (string-append
+                                         (assoc-ref inputs "ant-bootstrap")
+                                         "/lib")
+                                        "\\.jar$"))
+                      ":"))
+             ;; This directive is not supported by our simple bootstrap JDK.
+             (substitute* (find-files "." "\\.java$")
+               (("@Override") ""))))
+         (replace 'build
            (lambda* (#:key inputs #:allow-other-keys)
-             ;; buildtree.make generates shell scripts, so we need to replace
-             ;; the generated shebang
-             (substitute* '("openjdk/hotspot/make/linux/makefiles/buildtree.make")
-               (("/bin/sh") (which "bash")))
-
-             (let ((corebin (string-append
-                             (assoc-ref inputs "coreutils") "/bin/"))
-                   (binbin  (string-append
-                             (assoc-ref inputs "binutils") "/bin/"))
-                   (grepbin (string-append
-                             (assoc-ref inputs "grep") "/bin/")))
-               (substitute* '("openjdk/jdk/make/common/shared/Defs-linux.gmk"
-                              "openjdk/corba/make/common/shared/Defs-linux.gmk")
-                 (("UNIXCOMMAND_PATH  = /bin/")
-                  (string-append "UNIXCOMMAND_PATH = " corebin))
-                 (("USRBIN_PATH  = /usr/bin/")
-                  (string-append "USRBIN_PATH = " corebin))
-                 (("DEVTOOLS_PATH *= */usr/bin/")
-                  (string-append "DEVTOOLS_PATH = " corebin))
-                 (("COMPILER_PATH *= */usr/bin/")
-                  (string-append "COMPILER_PATH = "
-                                 (assoc-ref inputs "gcc") "/bin/"))
-                 (("DEF_OBJCOPY *=.*objcopy")
-                  (string-append "DEF_OBJCOPY = " (which "objcopy"))))
-
-               ;; fix path to alsa header
-               (substitute* "openjdk/jdk/make/common/shared/Sanity.gmk"
-                 (("ALSA_INCLUDE=/usr/include/alsa/version.h")
-                  (string-append "ALSA_INCLUDE="
-                                 (assoc-ref inputs "alsa-lib")
-                                 "/include/alsa/version.h")))
+             ;; We can't compile these yet, but we don't need them at this
+             ;; point anyway.
+             (delete-file "org/eclipse/jdt/core/JDTCompilerAdapter.java")
+             (delete-file-recursively "org/eclipse/jdt/internal/antadapter")
 
-               ;; fix hard-coded utility paths
-               (substitute* '("openjdk/jdk/make/common/shared/Defs-utils.gmk"
-                              "openjdk/corba/make/common/shared/Defs-utils.gmk")
-                 (("ECHO *=.*echo")
-                  (string-append "ECHO = " (which "echo")))
-                 (("^GREP *=.*grep")
-                  (string-append "GREP = " (which "grep")))
-                 (("EGREP *=.*egrep")
-                  (string-append "EGREP = " (which "egrep")))
-                 (("CPIO *=.*cpio")
-                  (string-append "CPIO = " (which "cpio")))
-                 (("READELF *=.*readelf")
-                  (string-append "READELF = " (which "readelf")))
-                 (("^ *AR *=.*ar")
-                  (string-append "AR = " (which "ar")))
-                 (("^ *TAR *=.*tar")
-                  (string-append "TAR = " (which "tar")))
-                 (("AS *=.*as")
-                  (string-append "AS = " (which "as")))
-                 (("LD *=.*ld")
-                  (string-append "LD = " (which "ld")))
-                 (("STRIP *=.*strip")
-                  (string-append "STRIP = " (which "strip")))
-                 (("NM *=.*nm")
-                  (string-append "NM = " (which "nm")))
-                 (("^SH *=.*sh")
-                  (string-append "SH = " (which "bash")))
-                 (("^FIND *=.*find")
-                  (string-append "FIND = " (which "find")))
-                 (("LDD *=.*ldd")
-                  (string-append "LDD = " (which "ldd")))
-                 (("NAWK *=.*(n|g)awk")
-                  (string-append "NAWK = " (which "gawk")))
-                 (("XARGS *=.*xargs")
-                  (string-append "XARGS = " (which "xargs")))
-                 (("UNZIP *=.*unzip")
-                  (string-append "UNZIP = " (which "unzip")))
-                 (("ZIPEXE *=.*zip")
-                  (string-append "ZIPEXE = " (which "zip")))
-                 (("SED *=.*sed")
-                  (string-append "SED = " (which "sed"))))
-
-               ;; Some of these timestamps cause problems as they are more than
-               ;; 10 years ago, failing the build process.
-               (substitute*
-                   "openjdk/jdk/src/share/classes/java/util/CurrencyData.properties"
-                 (("AZ=AZM;2005-12-31-20-00-00;AZN") "AZ=AZN")
-                 (("MZ=MZM;2006-06-30-22-00-00;MZN") "MZ=MZN")
-                 (("RO=ROL;2005-06-30-21-00-00;RON") "RO=RON")
-                 (("TR=TRL;2004-12-31-22-00-00;TRY") "TR=TRY"))
-               #t)))
-         (add-before 'configure 'set-additional-paths
-           (lambda* (#:key inputs #:allow-other-keys)
-             (setenv "CPATH"
-                     (string-append (assoc-ref inputs "libxrender")
-                                    "/include/X11/extensions" ":"
-                                    (assoc-ref inputs "libxtst")
-                                    "/include/X11/extensions" ":"
-                                    (assoc-ref inputs "libxinerama")
-                                    "/include/X11/extensions" ":"
-                                    (or (getenv "CPATH") "")))
-             (setenv "ALT_CUPS_HEADERS_PATH"
-                     (string-append (assoc-ref inputs "cups")
-                                    "/include"))
-             (setenv "ALT_FREETYPE_HEADERS_PATH"
-                     (string-append (assoc-ref inputs "freetype")
-                                    "/include"))
-             (setenv "ALT_FREETYPE_LIB_PATH"
-                     (string-append (assoc-ref inputs "freetype")
-                                    "/lib"))
-             #t))
-         (add-before 'build 'disable-os-version-check
-           ;; allow build on linux major version change
-           (lambda _
-             (setenv "DISABLE_HOTSPOT_OS_VERSION_CHECK" "ok")
-             #t))
+             ;; Create a simple manifest to make ecj executable.
+             (mkdir-p "META-INF")
+             (with-output-to-file "META-INF/MANIFESTS.MF"
+               (lambda _
+                 (display "Manifest-Version: 1.0
+Main-Class: org.eclipse.jdt.internal.compiler.batch.Main\n")))
+
+             ;; Compile it all!
+             (apply invoke "javac"
+                    (find-files "." "\\.java$"))
+
+             ;; Pack it all up!  We don't use "jar" here, because
+             ;; it doesn't produce reproducible zip archives.
+             ;; XXX: copied from (gnu build install)
+             (for-each (lambda (file)
+                         (let ((s (lstat file)))
+                           (unless (eq? (stat:type s) 'symlink)
+                             (utime file  0 0 0 0))))
+                       (find-files "." #:directories? #t))
+
+             ;; It is important that the manifest appears first.
+             (apply invoke "zip" "-0" "-X" "ecj-bootstrap.jar"
+                    "META-INF/MANIFESTS.MF"
+                    (delete "./META-INF/MANIFESTS.MF"
+                            (find-files "." ".*" #:directories? #t)))))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
-             (let ((doc (string-append (assoc-ref outputs "doc")
-                                       "/share/doc/icedtea"))
-                   (jre (assoc-ref outputs "out"))
-                   (jdk (assoc-ref outputs "jdk")))
-               (copy-recursively "openjdk.build/docs" doc)
-               (copy-recursively "openjdk.build/j2re-image" jre)
-               (copy-recursively "openjdk.build/j2sdk-image" jdk))
-             #t)))))
+             (let ((share (string-append (assoc-ref outputs "out")
+                                         "/share/java/")))
+               (mkdir-p share)
+               (install-file "ecj-bootstrap.jar" share)))))))
     (native-inputs
-     `(("ant" ,ant-bootstrap)
-       ("alsa-lib" ,alsa-lib)
-       ("attr" ,attr)
-       ("classpath" ,classpath-devel)
-       ("coreutils" ,coreutils)
-       ("cpio" ,cpio)
-       ("cups" ,cups)
-       ("ecj" ,ecj-bootstrap)
-       ("ecj-javac" ,ecj-javac-wrapper-final)
-       ("fastjar" ,fastjar)
-       ("fontconfig" ,fontconfig)
-       ("freetype" ,freetype)
-       ("gtk" ,gtk+-2)
-       ("gawk" ,gawk)
-       ("giflib" ,giflib)
-       ("grep" ,grep)
-       ("jamvm" ,jamvm)
-       ("lcms" ,lcms)
-       ("libjpeg" ,libjpeg-turbo)
-       ("libnsl" ,libnsl)
-       ("libpng" ,libpng)
-       ("libtool" ,libtool)
-       ("libx11" ,libx11)
-       ("libxcomposite" ,libxcomposite)
-       ("libxi" ,libxi)
-       ("libxinerama" ,libxinerama)
-       ("libxrender" ,libxrender)
-       ("libxslt" ,libxslt) ;for xsltproc
-       ("libxt" ,libxt)
-       ("libxtst" ,libxtst)
-       ("mit-krb5" ,mit-krb5)
-       ("nss" ,nss)
-       ("nss-certs" ,nss-certs)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)
-       ("procps" ,procps) ;for "free", even though I'm not sure we should use it
-       ("unzip" ,unzip)
-       ("wget" ,wget)
-       ("which" ,which)
-       ("zip" ,zip)
-       ("zlib" ,zlib)
-       ("openjdk-src"
-        ,(origin
-           (method hg-fetch)
-           (uri (hg-reference
-                 (url "http://hg.openjdk.java.net/jdk6/jdk6/")
-                 (changeset "jdk6-b41")))
-           (sha256
-            (base32
-             "14q47yfg586fs64w30g8mk92m5dkxsvr36zzh0ra99xk5x0x96mv"))))
-       ("jdk-src"
-        ,(origin
-           (method hg-fetch)
-           (uri (hg-reference
-                 (url "http://hg.openjdk.java.net/jdk6/jdk6/jdk/")
-                 (changeset "jdk6-b41")))
-           (sha256
-            (base32
-             "165824nhg1k1dx6zs9dny0j49rmk35jw5b13dmz8c77jfajml4v9"))))
-       ("hotspot-src"
-        ,(origin
-           (method hg-fetch)
-           (uri (hg-reference
-                 (url "http://hg.openjdk.java.net/jdk6/jdk6/hotspot/")
-                 (changeset "jdk6-b41")))
-           (sha256
-            (base32
-             "07lc1z4k5dj9nrc1wvwmpvxr3xgxrdkdh53xb95skk5ij49yagfd"))))
-       ("corba-src"
-        ,(origin
-           (method hg-fetch)
-           (uri (hg-reference
-                 (url "http://hg.openjdk.java.net/jdk6/jdk6/corba/")
-                 (changeset "jdk6-b41")))
-           (sha256
-            (base32
-             "1p9g1r9dnax2iwp7yb59qx7m4nmshqhwmrb2b8jj8zgbd9dl2i3q"))))
-       ("langtools-src"
-        ,(origin
-           (method hg-fetch)
-           (uri (hg-reference
-                 (url "http://hg.openjdk.java.net/jdk6/jdk6/langtools/")
-                 (changeset "jdk6-b41")))
-           (sha256
-            (base32
-             "1x52wd67fynbbd9ild6fb4wvba3f5hhwk03qdjfazd0a1qr37z3d"))))
-       ("jaxp-src"
-        ,(origin
-           (method hg-fetch)
-           (uri (hg-reference
-                 (url "http://hg.openjdk.java.net/jdk6/jdk6/jaxp/")
-                 (changeset "jdk6-b41")))
-           (sha256
-            (base32
-             "0shlqrvzpr4nrkmv215lbxnby63s3yvbdh1yxcayznsyqwa4nlxm"))))
-       ("jaxws-src"
-        ,(origin
-           (method hg-fetch)
-           (uri (hg-reference
-                 (url "http://hg.openjdk.java.net/jdk6/jdk6/jaxws/")
-                 (changeset "jdk6-b41")))
-           (sha256
-            (base32
-             "0835lkw8vib1xhp8lxnybhlvzdh699hbi4mclxanydjk63zbpxk0"))))))
-    (home-page "http://icedtea.classpath.org")
-    (synopsis "Java development kit")
-    (description
-     "This package provides the OpenJDK built with the IcedTea build harness.
-This version of the OpenJDK is no longer maintained and is only used for
-bootstrapping purposes.")
-    ;; IcedTea is released under the GPL2 + Classpath exception, which is the
-    ;; same license as both GNU Classpath and OpenJDK.
-    (license license:gpl2+)))
+     (list ant-bootstrap classpath-devel ecj-javac-wrapper-final jamvm
+           unzip zip))
+    (home-page "https://eclipse.org")
+    (synopsis "Eclipse Java development tools core batch compiler")
+    (description "This package provides the Eclipse Java core batch compiler
+for bootstrapping purposes.  The @dfn{Eclipse compiler for Java} (ecj) is a
+requirement for all GNU Classpath releases after version 0.93.  This version
+supports sufficient parts of Java 7 to build Icedtea 2.x.")
+    (license license:epl1.0)))
+
+(define ecj4-javac-wrapper
+  (package
+    (inherit ecj-javac-wrapper)
+    (native-inputs
+     (list guile-3.0 ecj4-bootstrap jamvm classpath-devel))))
+
+(define jamvm-with-ecj4
+  (package
+    (inherit jamvm)
+    (inputs
+     (modify-inputs (package-inputs jamvm)
+       (replace "ecj-javac-wrapper" ecj4-javac-wrapper)))))
 
 (define-public icedtea-7
   (let* ((version "2.6.13")
@@ -1217,9 +812,6 @@ bootstrapping purposes.")
          ;; gremlin) doesn't support it yet, so skip this phase.
          #:validate-runpath? #f
 
-         ;; Apparently, the C locale is needed for some of the tests.
-         #:locale "C"
-
          #:modules ((guix build utils)
                     (guix build gnu-build-system)
                     (ice-9 match)
@@ -1228,9 +820,10 @@ bootstrapping purposes.")
                     (srfi srfi-26))
 
          #:configure-flags
-         ;; TODO: package pcsc and sctp, and add to inputs
-         `("--disable-system-pcsc"
-           "--disable-system-sctp"
+         ;; TODO: package sctp and add to inputs
+         `("--disable-system-sctp"
+           "--enable-system-pcsc"
+           "--enable-system-lcms"
            "--enable-bootstrap"
            "--enable-nss"
            "--without-rhino"
@@ -1239,9 +832,17 @@ bootstrapping purposes.")
            "--disable-downloading"
            "--disable-tests"        ;they are run in the check phase instead
            "--with-openjdk-src-dir=./openjdk.src"
+           ,(string-append "--with-ecj="
+                           (assoc-ref %build-inputs "ecj4-javac-wrapper")
+                           "/bin/javac")
            ,(string-append "--with-jdk-home="
-                           (assoc-ref %build-inputs "jdk")))
-
+                           (assoc-ref %build-inputs "classpath"))
+           ,(string-append "--with-java="
+                           (assoc-ref %build-inputs "jamvm")
+                           "/bin/jamvm")
+           ,(string-append "--with-jar="
+                           (assoc-ref %build-inputs "classpath")
+                           "/bin/gjar"))
          #:phases
          (modify-phases %standard-phases
            (replace 'unpack
@@ -1265,8 +866,20 @@ bootstrapping purposes.")
                              (filter (cut string-suffix? "-drop" <>)
                                      (map (match-lambda
                                             ((name . _) name))
-                                          inputs))))
-                 #t)))
+                                          inputs)))))))
+           (add-after 'unpack 'use-classpath
+             (lambda* (#:key inputs #:allow-other-keys)
+               (let ((tools  (search-input-file inputs "/share/classpath/tools.zip"))
+                     (rt.jar (search-input-file inputs "/lib/rt.jar")))
+                 ;; GNU Classpath does not provide rt.jar, but jamvm provides
+                 ;; Classpath's glibj.zip as rt.jar, so we just use that.
+                 (substitute* "Makefile.in"
+                   (("\\$\\(SYSTEM_JDK_DIR\\)/jre/lib/rt.jar") rt.jar))
+                 ;; Make sure we can find all classes.
+                 (setenv "CLASSPATH"
+                         (string-append rt.jar ":" tools))
+                 (setenv "JAVACFLAGS"
+                         (string-append "-cp " rt.jar ":" tools)))))
            (add-after 'unpack 'patch-bitrot
              (lambda _
                (substitute* '("patches/boot/revert-6973616.patch"
@@ -1277,8 +890,26 @@ bootstrapping purposes.")
                ;; included.  It is provided by the libc instead.
                (substitute* '("configure"
                               "openjdk.src/jdk/src/solaris/native/sun/nio/fs/LinuxNativeDispatcher.c")
-                 (("attr/xattr.h") "sys/xattr.h"))
-               #t))
+                 (("attr/xattr.h") "sys/xattr.h"))))
+           (add-after 'unpack 'fix-openjdk
+             (lambda _
+               (substitute* "openjdk.src/jdk/make/common/Defs-linux.gmk"
+                 (("CFLAGS_COMMON   = -fno-strict-aliasing" all)
+                  (string-append all " -fcommon")))
+               (substitute*
+                   '("openjdk.src/jdk/src/solaris/native/java/net/PlainSocketImpl.c"
+                     "openjdk.src/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c")
+                 (("#include <sys/sysctl.h>")
+                  "#include <linux/sysctl.h>"))
+               ;; It looks like the "h = 31 * h + c" line of the jsum()
+               ;; function gets miscompiled. After a few iterations of the loop
+               ;; the result of "31 * h" is always 0x8000000000000000.
+               ;; Bad optimization maybe...
+               ;; Transform "31 * h + c" into a convoluted "32 * h + c - h"
+               ;; as a workaround.
+               (substitute* "openjdk.src/hotspot/src/share/vm/memory/dump.cpp"
+                 (("h = 31 \\* h \\+ c;")
+                  "jlong h0 = h;\nfor(int i = 0; i < 5; i++) h += h;\nh += c - h0;"))))
            (add-after 'unpack 'fix-x11-extension-include-path
              (lambda* (#:key inputs #:allow-other-keys)
                (substitute* "openjdk.src/jdk/make/sun/awt/mawt.gmk"
@@ -1291,21 +922,20 @@ bootstrapping purposes.")
                                  "/include/X11/extensions"
                                  " -I" (assoc-ref inputs "libxinerama")
                                  "/include/X11/extensions"))
-                 (("\\$\\(wildcard /usr/include/X11/extensions\\)\\)") ""))
-               #t))
+                 (("\\$\\(wildcard /usr/include/X11/extensions\\)\\)") ""))))
            (add-after 'unpack 'patch-paths
-             (lambda _
+             (lambda* (#:key inputs #:allow-other-keys)
                ;; buildtree.make generates shell scripts, so we need to replace
                ;; the generated shebang
                (substitute* '("openjdk.src/hotspot/make/linux/makefiles/buildtree.make")
                  (("/bin/sh") (which "bash")))
 
                (let ((corebin (string-append
-                               (assoc-ref %build-inputs "coreutils") "/bin/"))
+                               (assoc-ref inputs "coreutils") "/bin/"))
                      (binbin  (string-append
-                               (assoc-ref %build-inputs "binutils") "/bin/"))
+                               (assoc-ref inputs "binutils") "/bin/"))
                      (grepbin (string-append
-                               (assoc-ref %build-inputs "grep") "/bin/")))
+                               (assoc-ref inputs "grep") "/bin/")))
                  (substitute* '("openjdk.src/jdk/make/common/shared/Defs-linux.gmk"
                                 "openjdk.src/corba/make/common/shared/Defs-linux.gmk")
                    (("UNIXCOMMAND_PATH  = /bin/")
@@ -1316,7 +946,7 @@ bootstrapping purposes.")
                     (string-append "DEVTOOLS_PATH = " corebin))
                    (("COMPILER_PATH *= */usr/bin/")
                     (string-append "COMPILER_PATH = "
-                                   (assoc-ref %build-inputs "gcc") "/bin/"))
+                                   (assoc-ref inputs "gcc") "/bin/"))
                    (("DEF_OBJCOPY *=.*objcopy")
                     (string-append "DEF_OBJCOPY = " (which "objcopy"))))
 
@@ -1324,7 +954,7 @@ bootstrapping purposes.")
                  (substitute* "openjdk.src/jdk/make/common/shared/Sanity.gmk"
                    (("ALSA_INCLUDE=/usr/include/alsa/version.h")
                     (string-append "ALSA_INCLUDE="
-                                   (assoc-ref %build-inputs "alsa-lib")
+                                   (assoc-ref inputs "alsa-lib")
                                    "/include/alsa/version.h")))
 
                  ;; fix hard-coded utility paths
@@ -1376,8 +1006,7 @@ bootstrapping purposes.")
                    (("AZ=AZM;2005-12-31-20-00-00;AZN") "AZ=AZN")
                    (("MZ=MZM;2006-06-30-22-00-00;MZN") "MZ=MZN")
                    (("RO=ROL;2005-06-30-21-00-00;RON") "RO=RON")
-                   (("TR=TRL;2004-12-31-22-00-00;TRY") "TR=TRY")))
-               #t))
+                   (("TR=TRL;2004-12-31-22-00-00;TRY") "TR=TRY")))))
            (add-before 'configure 'set-additional-paths
              (lambda* (#:key inputs #:allow-other-keys)
                (substitute* "openjdk.src/jdk/make/common/shared/Sanity.gmk"
@@ -1405,13 +1034,11 @@ bootstrapping purposes.")
                                       "/include"))
                (setenv "ALT_FREETYPE_LIB_PATH"
                        (string-append (assoc-ref inputs "freetype")
-                                      "/lib"))
-               #t))
+                                      "/lib"))))
            (add-before 'build 'disable-os-version-check
-           ;; allow build on linux major version change
-           (lambda _
-             (setenv "DISABLE_HOTSPOT_OS_VERSION_CHECK" "ok")
-             #t))
+             ;; allow build on linux major version change
+             (lambda _
+               (setenv "DISABLE_HOTSPOT_OS_VERSION_CHECK" "ok")))
            (add-before 'check 'fix-test-framework
              (lambda _
                ;; Fix PATH in test environment
@@ -1423,8 +1050,7 @@ bootstrapping purposes.")
                (substitute* "openjdk.src/hotspot/test/test_env.sh"
                  (("/bin/rm") (which "rm"))
                  (("/bin/cp") (which "cp"))
-                 (("/bin/mv") (which "mv")))
-               #t))
+                 (("/bin/mv") (which "mv")))))
            (add-before 'check 'fix-hotspot-tests
              (lambda _
                (with-directory-excursion "openjdk.src/hotspot/test/"
@@ -1437,8 +1063,7 @@ bootstrapping purposes.")
                                 "runtime/7110720/Test7110720.sh")
                    (("/bin/rm") (which "rm"))
                    (("/bin/cp") (which "cp"))
-                   (("/bin/mv") (which "mv"))))
-               #t))
+                   (("/bin/mv") (which "mv"))))))
            (add-before 'check 'fix-jdk-tests
              (lambda _
                (with-directory-excursion "openjdk.src/jdk/test/"
@@ -1494,33 +1119,31 @@ bootstrapping purposes.")
                  (substitute* "java/rmi/activation/CommandEnvironment/SetChildEnv.java"
                    (("/bin/chmod") (which "chmod")))
                  (substitute* "java/util/zip/ZipFile/Assortment.java"
-                   (("/bin/sh") (which "sh"))))
-               #t))
+                   (("/bin/sh") (which "sh"))))))
            (replace 'check
-             (lambda _
+             (lambda* (#:key tests? #:allow-other-keys)
                ;; The "make check-*" targets always return zero, so we need to
                ;; check for errors in the associated log files to determine
                ;; whether any tests have failed.
-               (use-modules (ice-9 rdelim))
-               (let* ((error-pattern (make-regexp "^(Error|FAILED):.*"))
-                      (checker (lambda (port)
-                                 (let loop ()
-                                   (let ((line (read-line port)))
-                                     (cond
-                                      ((eof-object? line) #t)
-                                      ((regexp-exec error-pattern line)
-                                       (error "test failed"))
-                                      (else (loop)))))))
-                      (run-test (lambda (test)
-                                  (invoke "make" test)
-                                  (call-with-input-file
-                                      (string-append "test/" test ".log")
-                                    checker))))
-                 (when #f                 ; skip tests
+               (when tests?
+                 (use-modules (ice-9 rdelim))
+                 (let* ((error-pattern (make-regexp "^(Error|FAILED):.*"))
+                        (checker (lambda (port)
+                                   (let loop ()
+                                     (let ((line (read-line port)))
+                                       (cond
+                                        ((eof-object? line) #t)
+                                        ((regexp-exec error-pattern line)
+                                         (error "test failed"))
+                                        (else (loop)))))))
+                        (run-test (lambda (test)
+                                    (invoke "make" test)
+                                    (call-with-input-file
+                                        (string-append "test/" test ".log")
+                                      checker))))
                    (run-test "check-hotspot")
                    (run-test "check-langtools")
-                   (run-test "check-jdk"))
-                 #t)))
+                   (run-test "check-jdk")))))
            (replace 'install
              (lambda* (#:key outputs #:allow-other-keys)
                (let ((doc (string-append (assoc-ref outputs "doc")
@@ -1529,8 +1152,7 @@ bootstrapping purposes.")
                      (jdk (assoc-ref outputs "jdk")))
                  (copy-recursively "openjdk.build/docs" doc)
                  (copy-recursively "openjdk.build/j2re-image" jre)
-                 (copy-recursively "openjdk.build/j2sdk-image" jdk))
-               #t))
+                 (copy-recursively "openjdk.build/j2sdk-image" jdk))))
            ;; Some of the libraries in the lib/amd64 folder link to libjvm.so.
            ;; But that shared object is located in the server/ folder, so it
            ;; cannot be found.  This phase creates a symbolic link in the
@@ -1563,17 +1185,17 @@ bootstrapping purposes.")
                                                       (string-drop-right
                                                         (%current-system) 6)))))))
                  (symlink (string-append lib-path "/server/libjvm.so")
-                          (string-append lib-path "/libjvm.so")))
-               #t))
+                          (string-append lib-path "/libjvm.so")))))
            ;; By default IcedTea only generates an empty keystore.  In order to
            ;; be able to use certificates in Java programs we need to generate a
            ;; keystore from a set of certificates.  For convenience we use the
            ;; certificates from the nss-certs package.
            (add-after 'install 'install-keystore
              (lambda* (#:key inputs outputs #:allow-other-keys)
+               (use-modules (ice-9 rdelim))
                (let* ((keystore  "cacerts")
-                      (certs-dir (string-append (assoc-ref inputs "nss-certs")
-                                                "/etc/ssl/certs"))
+                      (certs-dir (search-input-directory inputs
+                                                         "etc/ssl/certs"))
                       (keytool   (string-append (assoc-ref outputs "jdk")
                                                 "/bin/keytool")))
                  (define (extract-cert file target)
@@ -1633,8 +1255,7 @@ bootstrapping purposes.")
                                               "/lib/security"))
                  (install-file keystore
                                (string-append (assoc-ref outputs "jdk")
-                                              "/jre/lib/security"))
-                 #t))))))
+                                              "/jre/lib/security"))))))))
       (native-inputs
        `(("openjdk-src"
           ,(drop "openjdk"
@@ -1667,10 +1288,14 @@ bootstrapping purposes.")
                        "icedtea-7-hotspot-aarch64-use-c++98.patch"))))
          ("ant" ,ant-bootstrap)
          ("attr" ,attr)
+         ("classpath" ,classpath-devel)
          ("coreutils" ,coreutils)
          ("diffutils" ,diffutils)       ;for tests
+         ("ecj4-javac-wrapper" ,ecj4-javac-wrapper)
+         ("fastjar" ,fastjar) ;only for the configure phase; we actually use gjar
          ("gawk" ,gawk)
          ("grep" ,grep)
+         ("jamvm" ,jamvm-with-ecj4)
          ("libtool" ,libtool)
          ("pkg-config" ,pkg-config)
          ("wget" ,wget)
@@ -1678,32 +1303,31 @@ bootstrapping purposes.")
          ("cpio" ,cpio)
          ("zip" ,zip)
          ("unzip" ,unzip)
-         ("fastjar" ,fastjar)
          ("libxslt" ,libxslt)           ;for xsltproc
          ("nss-certs" ,nss-certs)
          ("perl" ,perl)
-         ("procps" ,procps) ;for "free", even though I'm not sure we should use it
-         ("jdk" ,icedtea-6 "jdk")))
+         ("procps" ,procps)))  ;for "free", even though I'm not sure we should use it
       (inputs
-       `(("alsa-lib" ,alsa-lib)
-         ("cups" ,cups)
-         ("libx11" ,libx11)
-         ("libxcomposite" ,libxcomposite)
-         ("libxt" ,libxt)
-         ("libxtst" ,libxtst)
-         ("libxi" ,libxi)
-         ("libxinerama" ,libxinerama)
-         ("libxrender" ,libxrender)
-         ("libjpeg" ,libjpeg-turbo)
-         ("libpng" ,libpng)
-         ("mit-krb5" ,mit-krb5)
-         ("nss" ,nss)
-         ("giflib" ,giflib)
-         ("fontconfig" ,fontconfig)
-         ("freetype" ,freetype)
-         ("lcms" ,lcms)
-         ("zlib" ,zlib)
-         ("gtk" ,gtk+-2)))
+       (list alsa-lib
+             cups
+             fontconfig
+             freetype
+             giflib
+             gtk+-2
+             lcms
+             libjpeg-turbo
+             libpng
+             libx11
+             libxcomposite
+             libxi
+             libxinerama
+             libxrender
+             libxt
+             libxtst
+             mit-krb5
+             nss
+             pcsc-lite
+             zlib))
       (home-page "http://icedtea.classpath.org")
       (synopsis "Java development kit")
       (description
@@ -1718,7 +1342,7 @@ IcedTea build harness.")
       (license license:gpl2+))))
 
 (define-public icedtea-8
-  (let* ((version "3.7.0")
+  (let* ((version "3.19.0")
          (drop (lambda (name hash)
                  (origin
                    (method url-fetch)
@@ -1727,7 +1351,7 @@ IcedTea build harness.")
                          "/icedtea8/" version "/" name ".tar.xz"))
                    (sha256 (base32 hash))))))
     (package (inherit icedtea-7)
-      (version "3.7.0")
+      (version "3.19.0")
       (source (origin
                 (method url-fetch)
                 (uri (string-append
@@ -1735,26 +1359,24 @@ IcedTea build harness.")
                       version ".tar.xz"))
                 (sha256
                  (base32
-                  "09yqzn8rpccs7cyv89hhy5zlznpgqw5x3jz0w1ccp0cz1vgs8l5w"))
+                  "1cmms7cb2sav3ywc36ynqmybzx73sl279rm6j8i5nqrmp98ixmpf"))
                 (modules '((guix build utils)))
                 (snippet
-                 '(begin
-                    (substitute* '("configure"
-                                   "acinclude.m4")
-                      ;; Do not embed build time
-                      (("(DIST_ID=\"Custom build).*$" _ prefix)
-                       (string-append prefix "\"\n"))
-                      ;; Do not leak information about the build host
-                      (("DIST_NAME=\"\\$build_os\"")
-                       "DIST_NAME=\"guix\""))
-                    #t))))
+                 '(substitute* '("configure"
+                                 "acinclude.m4")
+                    ;; Do not embed build time
+                    (("(DIST_ID=\"Custom build).*$" _ prefix)
+                     (string-append prefix "\"\n"))
+                    ;; Do not leak information about the build host
+                    (("DIST_NAME=\"\\$build_os\"")
+                     "DIST_NAME=\"guix\"")))))
       (arguments
        `(#:imported-modules
          ((guix build ant-build-system)
           (guix build syscalls)
           ,@%gnu-build-system-modules)
 
-         #:disallowed-references ((,icedtea-7 "jdk"))
+         #:disallowed-references ,(list (gexp-input icedtea-7 "jdk"))
 
          ,@(substitute-keyword-arguments (package-arguments icedtea-7)
              ((#:modules modules)
@@ -1767,7 +1389,8 @@ IcedTea build harness.")
                 (srfi srfi-26)))
              ((#:configure-flags flags)
               `(let ((jdk (assoc-ref %build-inputs "jdk")))
-                 `( ;;"--disable-bootstrap"
+                 `("CFLAGS=-fcommon"
+                   "CXXFLAGS=-fcommon"
                    "--enable-bootstrap"
                    "--enable-nss"
                    ,(string-append "--with-parallel-jobs="
@@ -1785,6 +1408,7 @@ IcedTea build harness.")
                  (delete 'set-additional-paths)
                  (delete 'patch-patches)
                  (delete 'patch-bitrot)
+                 (delete 'use-classpath)
                  ;; Prevent the keytool from recording the current time when
                  ;; adding certificates at build time.
                  (add-after 'unpack 'patch-keystore
@@ -1830,8 +1454,14 @@ new Date();"))
                                       "warning: failed to substitute: ~a~%"
                                       file))))
                         (find-files "openjdk.src/jdk/src/solaris/native"
-                                    "\\.c|\\.h"))
-                       #t)))
+                                    "\\.c|\\.h")))))
+                 (replace 'fix-openjdk
+                   (lambda _
+                     (substitute*
+                         '("openjdk.src/jdk/src/solaris/native/java/net/PlainSocketImpl.c"
+                           "openjdk.src/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c")
+                       (("#include <sys/sysctl.h>")
+                        "#include <linux/sysctl.h>"))))
                  (replace 'install
                    (lambda* (#:key outputs #:allow-other-keys)
                      (let ((doc (string-append (assoc-ref outputs "doc")
@@ -1844,45 +1474,45 @@ new Date();"))
                        ;; Install the nss.cfg file to JRE to enable SSL/TLS
                        ;; support via NSS.
                        (copy-file (string-append jdk "/jre/lib/security/nss.cfg")
-                                  (string-append jre "/lib/security/nss.cfg"))
-                       #t)))
+                                  (string-append jre "/lib/security/nss.cfg")))))
                  (add-after 'install 'strip-jar-timestamps
                    (assoc-ref ant:%standard-phases 'strip-jar-timestamps)))))))
       (native-inputs
        `(("jdk" ,icedtea-7 "jdk")
          ("openjdk-src"
           ,(drop "openjdk"
-                 "1mj6xgmw31i6qd30qi9dmv7160fbcfq5ikz1jwjihdg2793il19p"))
+                 "1l3bzmd3s38scxpwamfhnwbv7vndgjq6hz3bl58437fgl9kgbl69"))
          ("aarch32-drop"
           ,(drop "aarch32"
-                 "1wb8k5zm40zld0986dvmlh5xh3gyixbg9h26sl662zy92amhmyyg"))
+                 "0k4dwpi3x3lj41rj32xyxbn76r7cb2g2whh44r1z4iwhw1xd2lpq"))
          ("corba-drop"
           ,(drop "corba"
-                 "11ma4zz0599cy70xd219v7a8vin7p96xrhhz3wsaw6cjhkzpagah"))
+                 "0xhh6gf5gh5c6vf1607xcy49wnp5prch2rim13x14wvsn817xf0r"))
          ("jaxp-drop"
           ,(drop "jaxp"
-                 "14m1y0z0fbm5z5zjw3vnq85py8dma84bi3f9cw8rhdyc6skk8q4i"))
+                 "043g335rgi5ipl8dp3q2cc3gcfhxk77ipxs43sv344z71bn8xmxr"))
          ("jaxws-drop"
           ,(drop "jaxws"
-                 "09andnm6xaasnp963hgx42yiflifiljp9z7z85jrfyc5z8a5whmf"))
+                 "1pc0pv4v2mn2mjc0vp19d94v2150xigyhxsmckqasy647zcm6w0r"))
          ("jdk-drop"
           ,(drop "jdk"
-                 "0s6lcpc0zckz2fnq98aqf28nz9y3wbi41a3kyaqqa2abwbkm1zwl"))
+                 "1742lcm55l8zhi522x83v65ccr0rd6511q9rj7crw44x3ymdrhrv"))
          ("langtools-drop"
           ,(drop "langtools"
-                 "15wizy123vhk40chl1b4p552jf2pw2hdww0myf11qab425axz4nw"))
+                 "08iz7p2xcddlphipf6gahyabr5cawlnydap12p1n4f0md069b50b"))
          ("hotspot-drop"
           ,(drop "hotspot"
-                 "1ciz1w9j0kz7s1dxdhyqq71nla9icyz6qvn0b9z2zgkklqa98qmm"))
+                 "1ffaxfnb3yn1i7crivqigc1r1q0z6cp044i6nfring4z6c8pfhd2"))
          ("nashorn-drop"
           ,(drop "nashorn"
-                 "19pzl3ppaw8j6r5cnyp8qiw3hxijh3hdc46l39g5yfhdl4pr4hpa"))
+                 "15fn7cpm2i1npa88h57njxg0f8qkrqhrc30pb54d3hxlx5zyjl94"))
          ("shenandoah-drop"
           ,(drop "shenandoah"
-                 "0k33anxdzw1icn072wynfmmdjhsv50hay0j1sfkfxny12rb3vgdy"))
+                 "1jjzjjx1ykyhbc4llh8249dlr8j5g1ki6r7g9baj2mxyb9whc5nq"))
          ,@(fold alist-delete (package-native-inputs icedtea-7)
-                 '("jdk" "openjdk-src" "corba-drop" "jaxp-drop" "jaxws-drop"
-                   "jdk-drop" "langtools-drop" "hotspot-drop")))))))
+                 '("openjdk-src" "corba-drop" "jaxp-drop" "jaxws-drop"
+                   "jdk-drop" "langtools-drop" "hotspot-drop"
+                   "classpath" "ecj4-javac-wrapper" "jamvm" "fastjar")))))))
 
 (define-public openjdk9
   (package
@@ -1910,7 +1540,8 @@ new Date();"))
        ((guix build syscalls)
         ,@%gnu-build-system-modules)
 
-       #:disallowed-references (,icedtea-8 (,icedtea-8 "jdk"))
+       #:disallowed-references ,(list (gexp-input icedtea-8)
+                                      (gexp-input icedtea-8 "jdk"))
 
        #:phases
        (modify-phases %standard-phases
@@ -1925,7 +1556,12 @@ new Date();"))
            (lambda* (#:key inputs outputs #:allow-other-keys)
              ;; TODO: unbundle libpng and lcms
              (invoke "bash" "./configure"
-                     (string-append "--with-freetype=" (assoc-ref inputs "freetype"))
+                     ;; Add flags for compilation with gcc >= 10
+                     ,(string-append "--with-extra-cflags=-fcommon"
+                                     " -fno-delete-null-pointer-checks"
+                                     " -fno-lifetime-dse")
+                     (string-append "--with-freetype="
+                                    (assoc-ref inputs "freetype"))
                      "--disable-freetype-bundling"
                      "--disable-warnings-as-errors"
                      "--disable-hotspot-gtest"
@@ -2099,17 +1735,28 @@ new Date();"))
            (replace 'configure
              (lambda* (#:key inputs outputs #:allow-other-keys)
                (invoke "bash" "./configure"
-                       (string-append "--with-freetype=" (assoc-ref inputs "freetype"))
+                       ;; Add flags for compilation with gcc >= 10
+                       ,(string-append "--with-extra-cflags=-fcommon"
+                                       " -fno-delete-null-pointer-checks"
+                                       " -fno-lifetime-dse")
+                       (string-append "--with-freetype="
+                                      (assoc-ref inputs "freetype"))
                        "--disable-freetype-bundling"
                        "--disable-warnings-as-errors"
                        "--disable-hotspot-gtest"
                        "--with-giflib=system"
                        "--with-libjpeg=system"
                        "--with-native-debug-symbols=zipped"
-                       (string-append "--prefix=" (assoc-ref outputs "out")))
-               #t))))
+                       (string-append "--prefix=" (assoc-ref outputs "out")))))
+           (add-after 'unpack 'disable-warnings-as-errors
+             (lambda _
+               ;; It looks like the "--disable-warnings-as-errors" option of
+               ;; the 'configure' phase is not working.
+               (substitute* "make/autoconf/generated-configure.sh"
+                 (("-Werror") ""))))))
        ((#:disallowed-references _ '())
-        `(,openjdk9 (,openjdk9 "jdk")))))
+        `(,(gexp-input openjdk9)
+          ,(gexp-input openjdk9 "jdk")))))
     (native-inputs
      `(("openjdk9" ,openjdk9)
        ("openjdk9:jdk" ,openjdk9 "jdk")
@@ -2121,14 +1768,15 @@ new Date();"))
 (define-public openjdk11
   (package
     (name "openjdk")
-    (version "11.28")
+    (version "11.0.13")
     (source (origin
               (method url-fetch)
-              (uri "http://hg.openjdk.java.net/jdk/jdk/archive/76072a077ee1.tar.bz2")
+              (uri (string-append "https://openjdk-sources.osci.io/openjdk11/openjdk-"
+                                  version "-ga.tar.xz"))
               (file-name (string-append name "-" version ".tar.bz2"))
               (sha256
                (base32
-                "0v705w1s9lrqalzahir78pk397rkk9gfvzq821yv8h3xha0bqi6w"))
+                "0xavz7msaadprq65p5bhp6sxcyp12p0zlbhb3aaz0cvp21c9pdm9"))
               (modules '((guix build utils)))
               (snippet
                `(begin
@@ -2140,12 +1788,17 @@ new Date();"))
      `(#:imported-modules ((guix build syscalls)
                            ,@%gnu-build-system-modules)
 
-       #:disallowed-references (,openjdk10 (,openjdk10 "jdk"))
+       #:disallowed-references ,(list (gexp-input openjdk10)
+                                      (gexp-input openjdk10 "jdk"))
 
        #:tests? #f; requires jtreg
        ;; TODO package jtreg
        #:configure-flags
-       `("--disable-option-checking" ; --enable-fast-install default flag errors otherwise
+       `(;; Add flags for compilation with gcc >= 10
+         ,(string-append "--with-extra-cflags=-fcommon"
+                         " -fno-delete-null-pointer-checks"
+                         " -fno-lifetime-dse")
+         "--disable-option-checking" ; --enable-fast-install default flag errors otherwise
          "--disable-warnings-as-errors"
          ;; make validate-runpath pass, see: http://issues.guix.info/issue/32894
          "--with-native-debug-symbols=zipped"
@@ -2365,6 +2018,7 @@ new Date();"))
        ("libpng" ,libpng)
        ("libx11" ,libx11)
        ("libxext" ,libxext)
+       ("libxrandr" ,libxrandr)
        ("libxrender" ,libxrender)
        ("libxt" ,libxt)
        ("libxtst" ,libxtst)))
@@ -2571,14 +2225,44 @@ new Date();"))
                ;; The build system copies a few .template files from the
                ;; source directory into the build directory and then modifies
                ;; them in-place.  So these files have to be writable.
-               (for-each
-                (lambda (file)
-                  (invoke "chmod" "u+w" file))
+               (for-each make-file-writable
                 (find-files "src/java.base/share/classes/jdk/internal/misc/"
-                            "\\.template$"))
-               #t))))))
+                            "\\.template$"))))))))
     (home-page "https://openjdk.java.net/projects/jdk/16")))
 
+(define-public openjdk17
+  (package
+    (inherit openjdk16)
+    (name "openjdk")
+    (version "17.0.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/openjdk/jdk17u")
+                    (commit (string-append "jdk-" version "-ga"))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1l1jgbz8q7zq66npfg88r0l5xga427vrz35iys09j44b6qllrldd"))))
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("openjdk16:jdk" ,openjdk16 "jdk")
+       ("pkg-config" ,pkg-config)
+       ("unzip" ,unzip)
+       ("which" ,which)
+       ("zip" ,zip)))
+    (arguments
+     (substitute-keyword-arguments (package-arguments openjdk16)
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (replace 'fix-java-shebangs
+             (lambda _
+               ;; This file was "fixed" by patch-source-shebangs, but it requires
+               ;; this exact first line.
+               (substitute* "make/data/blockedcertsconverter/blocked.certs.pem"
+                 (("^#!.*") "#! java BlockedCertsConverter SHA-256\n"))))))))
+    (home-page "https://openjdk.java.net/projects/jdk/17")))
+
 (define-public icedtea icedtea-8)
 
 
@@ -2603,6 +2287,7 @@ new Date();"))
      (substitute-keyword-arguments (package-arguments ant-bootstrap)
        ((#:phases phases)
         `(modify-phases ,phases
+           (delete 'define-java-environment-variables)
            (add-after 'unpack 'remove-scripts
              ;; Remove bat / cmd scripts for DOS as well as the antRun and runant
              ;; wrappers.
@@ -2675,8 +2360,8 @@ new Date();"))
                  (delete-file-recursively lib)
                  #t)))))))
     (inputs
-     `(("java-commons-bcel" ,java-commons-bcel)
-       ,@(package-inputs ant/java8)))))
+     (modify-inputs (package-inputs ant/java8)
+       (prepend java-commons-bcel)))))
 
 (define-public ant-junit
   (package
@@ -2707,8 +2392,91 @@ new Date();"))
                  (delete-file-recursively lib)
                  #t)))))))
     (inputs
-     `(("java-junit" ,java-junit)
-       ,@(package-inputs ant/java8)))))
+     (modify-inputs (package-inputs ant/java8)
+       (prepend java-junit)))))
+
+(define-public libantlr3c
+  (package
+    (name "libantlr3c")
+    (version "3.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri
+        (string-append "https://www.antlr3.org/download/C/"
+                       name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0lpbnb4dq4azmsvlhp6khq1gy42kyqyjv8gww74g5lm2y6blm4fa"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags (list "--enable-debuginfo"
+                               "--disable-static"
+                               ,@(if (target-64bit?)
+                                  `("--enable-64bit")
+                                  '()))))
+    (synopsis "ANTLR C Library")
+    (description "LIBANTLR3C provides run-time C libraries for ANTLR3 (ANother
+Tool for Language Recognition v3).")
+    (home-page "https://www.antlr3.org/")
+    (license license:bsd-3)))
+
+(define-public drip
+  ;; Last release is from 2014, with a few important commits afterwards.
+  (let ((commit "a4bd00df0199e78243847f06cc04ecaea31f8f08"))
+    (package
+      (name "drip")
+      (version (git-version "0.2.4" "1" commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/ninjudd/drip")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0wzmjwfyldr3jn49517xd8yn7dgdk8h88qkga3kjyg1zc375ylg2"))))
+      (build-system gnu-build-system)
+      (native-inputs
+       `(("jdk" ,icedtea "jdk")))
+      (arguments
+       `(#:tests? #f                    ; No tests.
+         #:phases
+         (modify-phases %standard-phases
+           (delete 'configure)
+           (add-before 'install 'fix-wrapper
+             (lambda* (#:key inputs #:allow-other-keys)
+               (let ((jps (search-input-file inputs "/bin/jps")))
+                 (substitute* "bin/drip"
+                   (("jps") jps)
+                   (("brew update && brew upgrade drip") "guix pull && guix install drip")
+                   ;; No need to make:
+                   (("\\(cd -- \"\\$drip_dir\" && make -s\\) \\|\\| exit 1") "")
+                   ;; No need to include source:
+                   (("\\[\\[ -r \\$drip_dir/src/org/flatland/drip/Main\\.java \\]\\]")
+                    "true"))
+                 #t)))
+           (replace 'install
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out"))
+                      (bin (string-append out "/bin"))
+                      (share (string-append out "/share/drip")))
+                 (mkdir-p bin)
+                 (for-each
+                  (lambda (file)
+                    (install-file (string-append "bin/" file) bin))
+                  '("drip" "drip_daemon" "drip_proxy"))
+                 (install-file "drip.jar" share)
+                 (substitute* (string-append bin "/drip")
+                   (("drip_dir=\\$bin_dir/..")
+                    (string-append "drip_dir=" share)))
+                 #t))))))
+      (home-page "https://github.com/ninjudd/drip")
+      (synopsis "Faster Java Virtual Machine launching")
+      (description "Drip is a launcher for the Java Virtual Machine that
+provides much faster startup times than the @command{java} command.  The @command{drip}
+script is intended to be a drop-in replacement for the @command{java} command,
+only faster.")
+      (license license:epl1.0))))
 
 (define-public java-openjfx-build
   (package
@@ -2746,11 +2514,9 @@ new Date();"))
                      "buildSrc/src/main/java/com/sun/scenario/effect/compiler"
                      "buildSrc/src/main/antlr/JSL.g"))))))
     (inputs
-     `(("antlr3" ,antlr3)
-       ("java-stringtemplate" ,java-stringtemplate)))
+     (list antlr3 java-stringtemplate))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (home-page "https://openjfx.io")
     (synopsis "Graphical application toolkit in Java")
     (description "OpenJFX is a client application platform for desktop,
@@ -2786,7 +2552,7 @@ distribution.")
                (delete-file "com/sun/javafx/runtime/VersionInfoTest.java"))
              #t)))))
     (propagated-inputs
-     `(("java-openjfx-build" ,java-openjfx-build)))
+     (list java-openjfx-build))
     (description "OpenJFX is a client application platform for desktop,
 mobile and embedded systems built on Java.  Its goal is to produce a
 modern, efficient, and fully featured toolkit for developing rich client
@@ -2881,8 +2647,7 @@ distribution.")))
                                         (string-append target new-name))))
                          (find-files "netbeans" "\\.so$"))))))))
     (propagated-inputs
-     `(("java-openjfx-base" ,java-openjfx-base)
-       ("java-swt" ,java-swt)))
+     (list java-openjfx-base java-swt))
     ;; XXX: for unknown reasons
     ;; modules/graphics/src/main/native-prism-sw/JNativeSurface.c is missing
     ;; in this revision.
@@ -3040,9 +2805,9 @@ debugging, etc.")
                         #t))))
     (arguments
      `(#:make-flags                     ; bootstrap from javacc-4
-       (list (string-append "-Dbootstrap-jar="
-                            (assoc-ref %build-inputs "javacc")
-                            "/share/java/javacc.jar"))
+       ,#~(list (string-append "-Dbootstrap-jar="
+                               #$(this-package-native-input "javacc")
+                               "/share/java/javacc.jar"))
        #:test-target "test"
        #:phases
        (modify-phases %standard-phases
@@ -3068,7 +2833,7 @@ debugging, etc.")
                #t))))))
 
     (native-inputs
-     `(("javacc" ,javacc-4)))))
+     (list javacc-4))))
 
 ;; This is the last 3.x release of ECJ
 (define-public java-ecj-3
@@ -3136,7 +2901,7 @@ Main-Class: org.eclipse.jdt.internal.compiler.batch.Main\n"
              #t))
          (replace 'install (install-jars ".")))))
     (native-inputs
-     `(("unzip" ,unzip)))))
+     (list unzip))))
 
 (define-public java-ecj
   (package (inherit java-ecj-3)
@@ -3219,19 +2984,22 @@ Main-Class: org.eclipse.jdt.internal.compiler.batch.Main\n"
              (lambda* (#:key inputs #:allow-other-keys)
                (substitute* "build/build.xml"
                  (("\\$\\{lib\\}/testng/testng-jdk15.jar")
-                  (string-append (assoc-ref inputs "java-testng")
-                                 "/share/java/java-testng.jar"))
+                  (search-input-file inputs
+                                     "/share/java/java-testng.jar"))
                  (("\\$\\{lib\\}/commons-lang/commons-lang.jar")
-                  (string-append (assoc-ref inputs "java-commons-lang")
-                                 "/share/java/commons-lang-"
-                                 ,(package-version java-commons-lang) ".jar"))
+                  (search-input-file inputs
+                                     (string-append
+                                      "/share/java/commons-lang-"
+                                      ,(package-version java-commons-lang)
+                                      ".jar")))
                  (("\\$\\{lib\\}/commons-io/commons-io.jar")
-                  (string-append (assoc-ref inputs "java-commons-io")
-                                 "/lib/m2/commons-io/commons-io/"
-                                 ,(package-version java-commons-io)
-                                 "/commons-io-"
-                                 ,(package-version java-commons-io)
-                                 ".jar"))
+                  (search-input-file inputs
+                                     (string-append
+                                      "/lib/m2/commons-io/commons-io/"
+                                      ,(package-version java-commons-io)
+                                      "/commons-io-"
+                                      ,(package-version java-commons-io)
+                                      ".jar")))
                  ;; Remove dependency on svn
                  (("<build-info.*") "")
                  (("\\$\\{revision.number\\}")
@@ -3365,11 +3133,9 @@ libraries from the SIS division at ETH Zurich like jHDF5.")
            (add-after 'unpack 'unpack-build-resources
              (lambda* (#:key inputs #:allow-other-keys)
                (mkdir-p "../build_resources")
-               (invoke "tar" "xf" (assoc-ref inputs "build-resources")
-                       "-C" "../build_resources"
-                       "--strip-components=1")
-               (mkdir-p "../build_resources/lib")
-               #t))
+               (copy-recursively (assoc-ref inputs "build-resources")
+                                 "../build_resources")
+               (mkdir-p "../build_resources/lib")))
            (add-after 'unpack-build-resources 'fix-dependencies
              (lambda* (#:key inputs #:allow-other-keys)
                ;; FIXME: There should be a more convenient abstraction for
@@ -3404,8 +3170,7 @@ libraries from the SIS division at ETH Zurich like jHDF5.")
                  (rename-file "build-common.xml.new" "build-common.xml"))
                (substitute* "build/build.xml"
                  (("\\$\\{lib\\}/cisd-base/cisd-base.jar")
-                  (string-append (assoc-ref inputs "java-cisd-base")
-                                 "/share/java/sis-base.jar"))
+                  (search-input-file inputs "/share/java/sis-base.jar"))
                  ;; Remove dependency on svn
                  (("<build-info.*") "")
                  (("\\$\\{revision.number\\}")
@@ -3417,7 +3182,7 @@ libraries from the SIS division at ETH Zurich like jHDF5.")
                #t))
            (replace 'install (install-jars "targets/dist")))))
       (inputs
-       `(("java-cisd-base" ,java-cisd-base)))
+       (list java-cisd-base))
       (native-inputs
        `(("ecj" ,java-ecj-3.5)
          ("build-resources"
@@ -3507,29 +3272,32 @@ libraries from the SIS division at ETH Zurich like jHDF5.")
              (lambda* (#:key inputs #:allow-other-keys)
                (substitute* "../build_resources/ant/build-common.xml"
                  (("../libraries/testng/testng-jdk15.jar")
-                  (string-append (assoc-ref inputs "java-testng")
-                                 "/share/java/java-testng.jar")))
+                  (search-input-file inputs
+                                     "/share/java/java-testng.jar")))
                (substitute* "build/build.xml"
                  (("\\$\\{lib\\}/sis-base/sis-base.jar")
-                  (string-append (assoc-ref inputs "java-cisd-base")
-                                 "/share/java/sis-base.jar"))
+                  (search-input-file inputs
+                                     "/share/java/sis-base.jar"))
                  (("\\$\\{lib\\}/cisd-args4j/cisd-args4j.jar")
-                  (string-append (assoc-ref inputs "java-cisd-args4j")
-                                 "/share/java/cisd-args4j.jar"))
+                  (search-input-file inputs
+                                     "/share/java/cisd-args4j.jar"))
                  (("\\$\\{lib\\}/commons-lang/commons-lang.jar")
-                  (string-append (assoc-ref inputs "java-commons-lang")
-                                 "/share/java/commons-lang-"
-                                 ,(package-version java-commons-lang) ".jar"))
+                  (search-input-file inputs
+                                     (string-append
+                                      "/share/java/commons-lang-"
+                                      ,(package-version java-commons-lang)
+                                      ".jar")))
                  (("\\$\\{lib\\}/commons-io/commons-io.jar")
-                  (string-append (assoc-ref inputs "java-commons-io")
-                                 "/lib/m2/commons-io/commons-io/"
-                                 ,(package-version java-commons-io)
-                                 "/commons-io-"
-                                 ,(package-version java-commons-io)
-                                 ".jar"))
+                  (search-input-file inputs
+                                     (string-append
+                                      "/lib/m2/commons-io/commons-io/"
+                                      ,(package-version java-commons-io)
+                                      "/commons-io-"
+                                      ,(package-version java-commons-io)
+                                      ".jar")))
                  (("\\$\\{lib\\}/testng/testng-jdk15.jar")
-                  (string-append (assoc-ref inputs "java-testng")
-                                 "/share/java/java-testng.jar"))
+                  (search-input-file inputs
+                                     "/share/java/java-testng.jar"))
                  (("\\$\\{lib\\}/junit4/junit.jar")
                   (car (find-files (assoc-ref inputs "java-junit") "jar$")))
                  (("\\$\\{lib\\}/jmock/hamcrest/hamcrest-core.jar")
@@ -3586,12 +3354,12 @@ libraries from the SIS division at ETH Zurich like jHDF5.")
            (replace 'install
              (install-jars "targets/dist")))))
       (inputs
-       `(("java-cisd-base" ,java-cisd-base)
-         ("java-cisd-args4j" ,java-cisd-args4j)
-         ("java-commons-lang" ,java-commons-lang)
-         ("java-commons-io" ,java-commons-io)
-         ("hdf5" ,hdf5-1.8)
-         ("zlib" ,zlib)))
+       (list java-cisd-base
+             java-cisd-args4j
+             java-commons-lang
+             java-commons-io
+             hdf5-1.8
+             zlib))
       (native-inputs
        `(("jdk" ,icedtea-8)
          ("java-testng" ,java-testng)
@@ -3636,8 +3404,8 @@ HDF5 files, building on the libraries provided by the HDF Group.")
      `(#:tests? #f ; there is no test target
        #:build-target "compile"
        #:make-flags
-       (list "-Dbuild.compiler=javac1.8"
-             (string-append "-Ddist=" (assoc-ref %outputs "out")))
+       ,#~(list "-Dbuild.compiler=javac1.8"
+                (string-append "-Ddist=" #$output))
        #:phases
        (modify-phases %standard-phases
          (replace 'install
@@ -3688,7 +3456,7 @@ API and version 2.1 of the Java ServerPages API.")
                                "http/LocalStrings_fr.properties")))
                #t)))))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://javaee.github.io/servlet-spec/")
     (synopsis "Java servlet API")
     (description "Java Servlet is the foundation web specification in the
@@ -3768,8 +3536,7 @@ specification.")
        ("mesa" ,mesa)
        ("glu" ,glu)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("unzip" ,unzip)))
+     (list pkg-config unzip))
     (home-page "https://www.eclipse.org/swt/")
     (synopsis "Widget toolkit for Java")
     (description
@@ -3950,9 +3717,9 @@ documentation tools.")
                              target))
              #t)))))
     (inputs
-     `(("java-asm-bootstrap" ,java-asm-bootstrap)))
+     (list java-asm-bootstrap))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://code.google.com/archive/p/jarjar/")
     (synopsis "Repackage Java libraries")
     (description
@@ -4049,7 +3816,7 @@ private Method[] allMethods = getSortedMethods();")))
      `(("java-qdox-1.12" ,java-qdox-1.12)
        ("java-jarjar" ,java-jarjar)))
     (propagated-inputs
-     `(("java-hamcrest-parent-pom" ,java-hamcrest-parent-pom)))
+     (list java-hamcrest-parent-pom))
     (home-page "http://hamcrest.org/")
     (synopsis "Library of matchers for building test expressions")
     (description
@@ -4102,8 +3869,7 @@ testing frameworks, mocking libraries and UI validation rules.")
           (replace 'install
             (install-from-pom "pom/hamcrest-library.pom"))))))
     (propagated-inputs
-     `(("java-hamcrest-core" ,java-hamcrest-core)
-       ("java-hamcrest-parent-pom" ,java-hamcrest-parent-pom)))))
+     (list java-hamcrest-core java-hamcrest-parent-pom))))
 
 (define-public java-junit
   (package
@@ -4140,9 +3906,9 @@ testing frameworks, mocking libraries and UI validation rules.")
          (replace 'install
            (install-from-pom "pom.xml")))))
     (propagated-inputs
-     `(("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-hamcrest-core))
     (native-inputs
-     `(("java-hamcrest-library" ,java-hamcrest-library)))
+     (list java-hamcrest-library))
     (home-page "https://junit.org/junit4/")
     (synopsis "Test framework for Java")
     (description
@@ -4171,11 +3937,9 @@ sharing common test data, and test runners for running tests.")
        #:test-dir "src/test"
        #:test-exclude (list "**/SuperclassTest.java")))
     (inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)
-       ("java-assertj" ,java-assertj)))
+     (list java-junit java-hamcrest-core java-assertj))
     (home-page "https://github.com/Pragmatists/JUnitParams")
     (synopsis "Parameterised test support for JUnit")
     (description "The JUnitParams project adds a new runner to JUnit and
@@ -4236,10 +4000,9 @@ cli/shell/BourneShell.java"
              #t))
          (replace 'install (install-from-pom "pom.xml")))))
     (native-inputs
-     `(("java-hamcrest-core" ,java-hamcrest-core)
-       ("java-junit" ,java-junit)))
+     (list java-hamcrest-core java-junit))
     (propagated-inputs
-     `(("plexus-parent-pom" ,plexus-parent-pom-5.1)))
+     (list plexus-parent-pom-5.1))
     (home-page "https://codehaus-plexus.github.io/plexus-utils/")
     (synopsis "Common utilities for the Plexus framework")
     (description "This package provides various Java utility classes for the
@@ -4284,8 +4047,7 @@ more.")
     (propagated-inputs
      `(("plexus-parent-pom-5.1" ,plexus-parent-pom-5.1)))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (home-page "https://codehaus-plexus.github.io/plexus-interpolation/")
     (synopsis "Java components for interpolating ${} strings and the like")
     (description "Plexus interpolator is a modular, flexible interpolation
@@ -4321,7 +4083,7 @@ these two libraries to vary independently of one another.")
     (propagated-inputs
      `(("plexus-parent-pom-5.1" ,plexus-parent-pom-5.1)))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://codehaus-plexus.github.io/plexus-classworlds/")
     (synopsis "Java class loader framework")
     (description "Plexus classworlds replaces the native @code{ClassLoader}
@@ -4423,11 +4185,9 @@ implementation.")
              #t))
          (replace 'install (install-from-pom "pom.xml")))))
     (propagated-inputs
-     `(("java-plexus-utils" ,java-plexus-utils-3.3.0)
-       ("java-commons-io" ,java-commons-io)
-       ("plexus-parent-pom" ,plexus-parent-pom-5.1)))
+     (list java-plexus-utils-3.3.0 java-commons-io plexus-parent-pom-5.1))
     (inputs
-     `(("java-jsr305" ,java-jsr305)))
+     (list java-jsr305))
     (native-inputs
      `(("junit" ,java-junit)
        ("hamcrest" ,java-hamcrest-core)
@@ -4481,11 +4241,8 @@ reusing it in maven.")
              #t))
          (replace 'install (install-from-pom "pom.xml")))))
     (propagated-inputs
-     `(("java-plexus-utils" ,java-plexus-utils-3.3.0)
-       ("java-plexus-io" ,java-plexus-io)
-       ("java-iq80-snappy" ,java-iq80-snappy)
-       ("java-commons-compress" ,java-commons-compress)
-       ("plexus-parent-pom" ,plexus-parent-pom-6.1)))
+     (list java-plexus-utils-3.3.0 java-plexus-io java-iq80-snappy
+           java-commons-compress plexus-parent-pom-6.1))
     (inputs
      `(("java-jsr305" ,java-jsr305)
        ("java-plexus-container-default"
@@ -4567,7 +4324,7 @@ archives (jar).")
          (replace 'install
            (install-from-pom "plexus-component-annotations/pom.xml")))))
     (propagated-inputs
-     `(("java-plexus-containers-parent-pom" ,java-plexus-containers-parent-pom)))
+     (list java-plexus-containers-parent-pom))
     (inputs '())
     (native-inputs '())
     (synopsis "Plexus descriptors generator")
@@ -4609,9 +4366,7 @@ from source tags and class annotations.")))
        ("java-jdom2" ,java-jdom2)
        ("java-asm" ,java-asm)))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-guava" ,java-guava)
-       ("java-geronimo-xbean-reflect" ,java-geronimo-xbean-reflect)))
+     (list java-junit java-guava java-geronimo-xbean-reflect))
     (synopsis "Inversion-of-control container for Maven")
     (description "The Plexus project provides a full software stack for creating
 and executing software projects.  Based on the Plexus container, the
@@ -4655,12 +4410,11 @@ provides the Maven plugin generating the component metadata.")))
              #t))
          (replace 'install (install-from-pom "pom.xml")))))
     (inputs
-     `(("java-cdi-api" ,java-cdi-api)
-       ("java-javax-inject" ,java-javax-inject)))
+     (list java-cdi-api java-javax-inject))
     (propagated-inputs
-     `(("java-sonatype-spice-parent-pom" ,java-sonatype-spice-parent-pom-15)))
+     (list java-sonatype-spice-parent-pom-15))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://github.com/sonatype/plexus-cipher")
     (synopsis "Encryption/decryption Component")
     (description "Plexus-cipher contains a component to deal with encryption
@@ -4708,15 +4462,12 @@ and decryption.")
          (replace 'install
            (install-from-pom "plexus-java/pom.xml")))))
     (propagated-inputs
-     `(("java-asm" ,java-asm)
-       ("java-qdox" ,java-qdox-2-M9)
-       ("java-javax-inject" ,java-javax-inject)
-       ("plexus-parent-pom" ,plexus-parent-pom-4.0)))
+     (list java-asm java-qdox-2-M9 java-javax-inject
+           plexus-parent-pom-4.0))
     (inputs
-     `(("java-plexus-component-annotations" ,java-plexus-component-annotations)))
+     (list java-plexus-component-annotations))
     (native-inputs
-     `(("java-plexus-component-metadata" ,java-plexus-component-metadata)
-       ("java-junit" ,java-junit)))
+     (list java-plexus-component-metadata java-junit))
     (home-page "https://codehaus-plexus.github.io/plexus-languages/plexus-java")
     (synopsis "Shared language features for Java")
     (description "This package contains shared language features of the Java
@@ -4750,7 +4501,7 @@ language, for the plexus project.")
        ("java-plexus-compiler-pom" ,java-plexus-compiler-pom)
        ("java-plexus-util" ,java-plexus-utils)))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://github.com/codehaus-plexus/plexus-compiler")
     (synopsis "Plexus Compilers component's API to manipulate compilers")
     (description "This package contains the API used by components to manipulate
@@ -4832,12 +4583,10 @@ compilers.")
          (replace 'install
            (install-from-pom "plexus-compiler-manager/pom.xml")))))
     (propagated-inputs
-     `(("java-plexus-compiler-api" ,java-plexus-compiler-api)
-       ("java-plexus-compiler-pom" ,java-plexus-compiler-pom)
-       ("java-plexus-container-default" ,java-plexus-container-default)))
+     (list java-plexus-compiler-api java-plexus-compiler-pom
+           java-plexus-container-default))
     (native-inputs
-     `(("unzip" ,unzip)
-       ("java-plexus-component-metadata" ,java-plexus-component-metadata)))
+     (list unzip java-plexus-component-metadata))
     (synopsis "Compiler management for Plexus Compiler component")
     (description "Plexus Compiler is a Plexus component to use different
 compilers through a uniform API.  This component chooses the compiler
@@ -4881,9 +4630,8 @@ implementation to use in a project.")))
          (replace 'install
            (install-from-pom "plexus-compilers/plexus-compiler-javac/pom.xml")))))
     (propagated-inputs
-     `(("java-plexus-compiler-api" ,java-plexus-compiler-api)
-       ("java-plexus-utils" ,java-plexus-utils)
-       ("java-plexus-container-default" ,java-plexus-container-default)))
+     (list java-plexus-compiler-api java-plexus-utils
+           java-plexus-container-default))
     (synopsis "Javac Compiler support for Plexus Compiler component")
     (description "This package contains the Javac Compiler support for Plexus
 Compiler component.")))
@@ -4941,10 +4689,9 @@ packages.")
          (replace 'install
            (install-from-pom "pom.xml")))))
     (propagated-inputs
-     `(("java-plexus-utils" ,java-plexus-utils)
-       ("plexus-components-pom-1.1.20" ,plexus-components-pom-1.1.20)))
+     (list java-plexus-utils plexus-components-pom-1.1.20))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://github.com/codehaus-plexus/plexus-digest")
     (synopsis "Hash function utilities for Java")
     (description "This package is a plexus component that contains hash
@@ -5019,9 +4766,8 @@ function utilities.")
              #t))
          (replace 'install (install-from-pom "pom.xml")))))
     (propagated-inputs
-     `(("java-plexus-utils" ,java-plexus-utils)
-       ("java-plexus-cipher" ,java-plexus-cipher)
-       ("java-sonatype-spice-parent-pom" ,java-sonatype-spice-parent-pom-12)))
+     (list java-plexus-utils java-plexus-cipher
+           java-sonatype-spice-parent-pom-12))
     (native-inputs
      `(("java-modello-core" ,java-modello-core)
        ;; for modello:
@@ -5064,13 +4810,10 @@ This component decrypts a string passed to it.")
        #:jdk ,icedtea-8
        #:test-dir "src/test"))
     (inputs
-     `(("java-commons-cli" ,java-commons-cli)
-       ("java-plexus-container-default" ,java-plexus-container-default)
-       ("java-plexus-classworlds" ,java-plexus-classworlds)))
+     (list java-commons-cli java-plexus-container-default
+           java-plexus-classworlds))
     (native-inputs
-     `(("java-plexus-utils" ,java-plexus-utils)
-       ("java-junit" ,java-junit)
-       ("java-guava" ,java-guava)))
+     (list java-plexus-utils java-junit java-guava))
     (home-page "https://codehaus-plexus.github.io/plexus-cli")
     (synopsis "CLI building library for plexus")
     (description "This package is a library to help creating CLI around
@@ -5127,8 +4870,7 @@ which behaves as if all files were just created.</description>\n
          (replace 'install
            (install-from-pom "pom.xml")))))
     (inputs
-     `(("java-plexus-utils" ,java-plexus-utils)
-       ("java-plexus-container-default" ,java-plexus-container-default)))
+     (list java-plexus-utils java-plexus-container-default))
     (home-page "https://github.com/sonatype/sisu-build-api/")
     (synopsis "Base build API for maven")
     (description "This package contains the base build API for maven and
@@ -5172,14 +4914,11 @@ project and determining what files need to be rebuilt.")
                  (("src/test") "modello-core/src/test")))
              #t)))))
     (propagated-inputs
-     `(("java-plexus-utils" ,java-plexus-utils)
-       ("java-plexus-container-default" ,java-plexus-container-default)
-       ("java-sisu-build-api" ,java-sisu-build-api)))
+     (list java-plexus-utils java-plexus-container-default
+           java-sisu-build-api))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-plexus-classworlds" ,java-plexus-classworlds)
-       ("java-geronimo-xbean-reflect" ,java-geronimo-xbean-reflect)
-       ("java-guava" ,java-guava)))
+     (list java-junit java-plexus-classworlds java-geronimo-xbean-reflect
+           java-guava))
     (home-page "https://codehaus-plexus.github.io/modello/")
     (synopsis "Framework for code generation from a simple model")
     (description "Modello is a framework for code generation from a simple model.
@@ -5220,7 +4959,7 @@ XSD and documentation.")
                                "build/classes")
              #t)))))
     (inputs
-     `(("java-modello-core" ,java-modello-core)))
+     (list java-modello-core))
     (synopsis "Modello Java Plugin")
     (description "Modello Java Plugin generates Java objects for the model.")))
 
@@ -5250,8 +4989,7 @@ XSD and documentation.")
                  (("src/test") "modello-plugins/modello-plugin-xml/src/test")))
              #t)))))
     (propagated-inputs
-     `(("java-modello-core" ,java-modello-core)
-       ("java-modello-plugins-java" ,java-modello-plugins-java)))
+     (list java-modello-core java-modello-plugins-java))
     (synopsis "Modello XML Plugin")
     (description "Modello XML Plugin contains shared code for every plugins
 working on XML representation of the model.")))
@@ -5266,10 +5004,8 @@ working on XML representation of the model.")))
        #:tests? #f; no tests
        #:jdk ,icedtea-8))
     (inputs
-     `(("java-plexus-utils" ,java-plexus-utils)
-       ("java-plexus-compiler-api" ,java-plexus-compiler-api)
-       ("java-plexus-compiler-javac" ,java-plexus-compiler-javac)
-       ("java-plexus-container-default" ,java-plexus-container-default)))
+     (list java-plexus-utils java-plexus-compiler-api
+           java-plexus-compiler-javac java-plexus-container-default))
     (synopsis "Modello test package")
     (description "The modello test package contains the basis to create
 Modello generator unit-tests, including sample models and xml files to test
@@ -5295,13 +5031,11 @@ every feature for every plugin.")))
                                "build/classes")
              #t)))))
     (propagated-inputs
-     `(("java-modello-core" ,java-modello-core)
-       ("java-modello-plugins-java" ,java-modello-plugins-java)
-       ("java-modello-plugins-xml" ,java-modello-plugins-xml)))
+     (list java-modello-core java-modello-plugins-java
+           java-modello-plugins-xml))
     (native-inputs
-     `(("java-xmlunit" ,java-xmlunit)
-       ("java-modello-test" ,java-modello-test)
-       ,@(package-native-inputs java-modello-core)))
+     (modify-inputs (package-native-inputs java-modello-core)
+       (prepend java-xmlunit java-modello-test)))
     (synopsis "Modello XPP3 Plugin")
     (description "The modello XPP3 plugin generates XML readers and writers based
 on the XPP3 API (XML Pull Parser).")))
@@ -5358,9 +5092,9 @@ on the XPP3 API (XML Pull Parser).")))
          (replace 'install
            (install-from-pom "archive/asm.pom")))))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (propagated-inputs
-     `(("java-org-ow2-parent-pom" ,java-org-ow2-parent-pom-1.3)))
+     (list java-org-ow2-parent-pom-1.3))
     (home-page "https://asm.ow2.io/")
     (synopsis "Very small and fast Java bytecode manipulation framework")
     (description "ASM is an all purpose Java bytecode manipulation and
@@ -5389,7 +5123,7 @@ complex transformations and code analysis tools.")
          (delete 'build)
          (delete 'configure)
          (replace 'install
-           (install-pom-file (assoc-ref %build-inputs "source"))))))
+           ,#~(install-pom-file #$source)))))
     (home-page "https://ow2.org")
     (synopsis "Ow2.org parent pom")
     (description "This package contains the parent pom for projects from ow2.org,
@@ -5440,7 +5174,7 @@ including java-asm.")
        ;; tests depend on junit5
        #:tests? #f))
     (inputs
-     `(("java-asm" ,java-asm-8)))))
+     (list java-asm-8))))
 
 (define-public java-asm-analysis-8
   (package
@@ -5453,8 +5187,7 @@ including java-asm.")
        ;; tests depend on junit5
        #:tests? #f))
     (inputs
-     `(("java-asm" ,java-asm-8)
-       ("java-asm-tree" ,java-asm-tree-8)))))
+     (list java-asm-8 java-asm-tree-8))))
 
 (define-public java-asm-util-8
   (package
@@ -5467,9 +5200,7 @@ including java-asm.")
        ;; tests depend on junit5
        #:tests? #f))
     (inputs
-     `(("java-asm" ,java-asm-8)
-       ("java-asm-analysis" ,java-asm-analysis-8)
-       ("java-asm-tree" ,java-asm-tree-8)))))
+     (list java-asm-8 java-asm-analysis-8 java-asm-tree-8))))
 
 (define-public java-cglib
   (package
@@ -5499,8 +5230,7 @@ including java-asm.")
          (add-after 'unpack 'chdir
            (lambda _ (chdir "cglib") #t)))))
     (inputs
-     `(("java-asm" ,java-asm)
-       ("java-junit" ,java-junit)))
+     (list java-asm java-junit))
     (home-page "https://github.com/cglib/cglib/")
     (synopsis "Java byte code generation library")
     (description "The byte code generation library CGLIB is a high level API
@@ -5526,8 +5256,7 @@ to generate and transform Java byte code.")
        #:source-dir "main/src/"
        #:test-dir "main/src/test/"))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (home-page "http://objenesis.org/")
     (synopsis "Bypass the constructor when creating an object")
     (description "Objenesis is a small Java library that serves one purpose:
@@ -5588,12 +5317,9 @@ constructor on object instantiation.")
                (delete-file "tests2/EasyMockPropertiesTest.java"))
              #t)))))
     (inputs
-     `(("java-asm" ,java-asm)
-       ("java-cglib" ,java-cglib)
-       ("java-objenesis" ,java-objenesis)))
+     (list java-asm java-cglib java-objenesis))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (home-page "https://easymock.org/")
     (synopsis "Java library providing mock objects for unit tests")
     (description "EasyMock is a Java library that provides an easy way to use
@@ -5652,10 +5378,7 @@ The jMock library
                (base32
                 "12b7l22g3nrjvf2dzcw3z03fpd2chrgp0d8xkvn8w55rwb57pax6"))))
     (inputs
-     `(("java-hamcrest-all" ,java-hamcrest-all)
-       ("java-asm" ,java-asm)
-       ("java-bsh" ,java-bsh)
-       ("java-junit" ,java-junit)))
+     (list java-hamcrest-all java-asm java-bsh java-junit))
     (native-inputs
      `(("cglib" ,java-cglib)))
     (arguments
@@ -5696,15 +5419,15 @@ The jMock library
                           (string-append "jmock-legacy/src/test/java/" file))
                #t))))))
     (inputs
-     `(("java-hamcrest-all" ,java-hamcrest-all)
-       ("java-objenesis" ,java-objenesis)
-       ("java-cglib" ,java-cglib)
-       ("java-jmock" ,java-jmock)
-       ("java-asm" ,java-asm)
-       ("java-bsh" ,java-bsh)
-       ("java-junit" ,java-junit)))
+     (list java-hamcrest-all
+           java-objenesis
+           java-cglib
+           java-jmock
+           java-asm
+           java-bsh
+           java-junit))
     (native-inputs
-     `(("java-jmock-junit4" ,java-jmock-junit4)))))
+     (list java-jmock-junit4))))
 
 (define-public java-hamcrest-all
   (package (inherit java-hamcrest-core)
@@ -5755,16 +5478,16 @@ The jMock library
                                          (not (string-suffix? "-sources.jar" name)))))))
                    #t)))))))
     (inputs
-     `(("java-junit" ,java-junit)
-       ("java-jmock" ,java-jmock-1)
-       ;; This is necessary because of what seems to be a race condition.
-       ;; This package would sometimes fail to build because hamcrest-core.jar
-       ;; could not be found, even though it is built as part of this package.
-       ;; Adding java-hamcrest-core appears to fix this problem.  See
-       ;; https://debbugs.gnu.org/31390 for more information.
-       ("java-hamcrest-core" ,java-hamcrest-core)
-       ("java-easymock" ,java-easymock)
-       ,@(package-inputs java-hamcrest-core)))))
+     (modify-inputs (package-inputs java-hamcrest-core)
+       (prepend java-junit
+                java-jmock-1
+                ;; This is necessary because of what seems to be a race condition.
+                ;; This package would sometimes fail to build because hamcrest-core.jar
+                ;; could not be found, even though it is built as part of this package.
+                ;; Adding java-hamcrest-core appears to fix this problem.  See
+                ;; https://debbugs.gnu.org/31390 for more information.
+                java-hamcrest-core
+                java-easymock)))))
 
 (define-public java-jopt-simple
   (package
@@ -5838,12 +5561,12 @@ overly clever.")
      `(#:build-target "jar"
        #:test-target "test"
        #:make-flags
-       (let ((hamcrest (assoc-ref %build-inputs "java-hamcrest-core"))
-             (junit    (assoc-ref %build-inputs "java-junit")))
-         (list (string-append "-Djunit.jar="
-                              (car (find-files junit "jar$")))
-               (string-append "-Dhamcrest.jar="
-                              (car (find-files hamcrest ".*.jar$")))))
+       ,#~(let ((hamcrest #$(this-package-native-input "java-hamcrest-core"))
+                (junit    #$(this-package-native-input "java-junit")))
+            (list (string-append "-Djunit.jar="
+                                 (car (find-files junit "jar$")))
+                  (string-append "-Dhamcrest.jar="
+                                 (car (find-files hamcrest ".*.jar$")))))
        #:phases
        (modify-phases %standard-phases
          ;; We want to build the jar in the build phase and run the tests
@@ -5852,14 +5575,12 @@ overly clever.")
            (lambda _
              (substitute* "build.xml"
                (("name=\"jar\" depends=\"test\"")
-                "name=\"jar\" depends=\"compile\""))
-             #t))
+                "name=\"jar\" depends=\"compile\""))))
          ;; There is no install target.
          (replace 'install
            (install-from-pom "pom.xml")))))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (home-page "https://commons.apache.org/math/")
     (synopsis "Apache Commons mathematics library")
     (description "Commons Math is a library of lightweight, self-contained
@@ -5900,11 +5621,9 @@ available in the Java programming language or Commons Lang.")
              ;; respectively.
              (delete-file-recursively "jmh-archetypes"))))))
     (propagated-inputs
-     `(("java-jopt-simple" ,java-jopt-simple-4)
-       ("java-commons-math3" ,java-commons-math3)))
+     (list java-jopt-simple-4 java-commons-math3))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (home-page "https://openjdk.java.net/projects/code-tools/jmh/")
     (synopsis "Benchmark harness for the JVM")
     (description "JMH is a Java harness for building, running, and analysing
@@ -5928,23 +5647,21 @@ targeting the JVM.")
     (arguments
      `(#:test-target "test"
        #:make-flags
-       (let ((hamcrest (assoc-ref %build-inputs "java-hamcrest-core"))
-             (junit    (assoc-ref %build-inputs "java-junit"))
-             (easymock (assoc-ref %build-inputs "java-easymock")))
-         (list (string-append "-Djunit.jar="
-                              (car (find-files junit "jar$")))
-               (string-append "-Dhamcrest.jar="
-                              (car (find-files hamcrest "jar$")))
-               (string-append "-Deasymock.jar=" easymock
-                              "/share/java/easymock.jar")))
+       ,#~(let ((hamcrest #$(this-package-native-input "java-hamcrest-core"))
+                (junit    #$(this-package-native-input "java-junit"))
+                (easymock #$(this-package-native-input "java-easymock")))
+            (list (string-append "-Djunit.jar="
+                                 (car (find-files junit "jar$")))
+                  (string-append "-Dhamcrest.jar="
+                                 (car (find-files hamcrest "jar$")))
+                  (string-append "-Deasymock.jar=" easymock
+                                 "/share/java/easymock.jar")))
        #:phases
        (modify-phases %standard-phases
          (replace 'install
            (install-jars "target")))))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)
-       ("java-easymock" ,java-easymock)))
+     (list java-junit java-hamcrest-core java-easymock))
     (home-page "https://commons.apache.org/collections/")
     (synopsis "Collections framework")
     (description "The Java Collections Framework is the recognised standard
@@ -6068,19 +5785,18 @@ setter and getter method.")
     (arguments
      `(#:test-target "test"
        #:make-flags
-       (list (string-append "-Djunit.jar="
-                            (car (find-files (assoc-ref %build-inputs "java-junit")
-                                             "jar$"))))
+       ,#~(list (string-append "-Djunit.jar="
+                               (car (find-files #$(this-package-native-input "java-junit")
+                                                "jar$"))))
        #:phases
        (modify-phases %standard-phases
          (add-after 'build 'build-javadoc ant-build-javadoc)
          (replace 'install (install-from-pom "pom.xml"))
          (add-after 'install 'install-doc (install-javadoc "target/apidocs")))))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (propagated-inputs
-     `(("apache-commons-parent-pom" ,apache-commons-parent-pom-39)))
+     (list apache-commons-parent-pom-39))
     (home-page "https://commons.apache.org/io/")
     (synopsis "Common useful IO related classes")
     (description "Commons-IO contains utility classes, stream implementations,
@@ -6103,9 +5819,9 @@ file filters and endian classes.")
     (arguments
      `(#:test-target "test"
        #:make-flags
-       (list (string-append "-Dmaven.junit.jar="
-                            (car (find-files (assoc-ref %build-inputs "java-junit")
-                                             "jar$"))))
+       ,#~(list (string-append "-Dmaven.junit.jar="
+                               (car (find-files #$(this-package-native-input "java-junit")
+                                                "jar$"))))
        #:phases
        (modify-phases %standard-phases
          (add-before 'build 'delete-network-tests
@@ -6118,7 +5834,7 @@ file filters and endian classes.")
          (delete 'check)
          (replace 'install (install-jars "target")))))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://commons.apache.org/proper/commons-exec/")
     (synopsis "Common program execution related classes")
     (description "Commons-Exec simplifies executing external processes.")
@@ -6139,11 +5855,11 @@ file filters and endian classes.")
     (arguments
      `(#:test-target "test"
        #:make-flags
-       (list (string-append "-Dmaven.junit.jar="
-                            (car (find-files (assoc-ref %build-inputs "java-junit")
-                                             "jar$")))
-             "-Dmaven.compiler.source=1.7"
-             "-Dmaven.compiler.target=1.7")
+       ,#~(list (string-append "-Dmaven.junit.jar="
+                               (car (find-files #$(this-package-native-input "java-junit")
+                                                "jar$")))
+                "-Dmaven.compiler.source=1.7"
+                "-Dmaven.compiler.target=1.7")
        #:phases
        (modify-phases %standard-phases
          (add-before 'build 'delete-network-tests
@@ -6163,8 +5879,7 @@ file filters and endian classes.")
          (delete 'check)
          (replace 'install (install-jars "target")))))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))))
+     (list java-junit java-hamcrest-core))))
 
 (define-public java-commons-lang
   (package
@@ -6196,7 +5911,7 @@ time/FastDateFormatTest.java"
          (replace 'install (install-jars "target"))
          (add-after 'install 'install-doc (install-javadoc "target/apidocs")))))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://commons.apache.org/lang/")
     (synopsis "Extension of the java.lang package")
     (description "The Commons Lang components contains a set of Java classes
@@ -6242,7 +5957,7 @@ included:
        (modify-phases %standard-phases
          (replace 'install (install-from-pom "pom.xml")))))
     (propagated-inputs
-     `(("apache-commons-parent-pom" ,apache-commons-parent-pom-48)))
+     (list apache-commons-parent-pom-48))
     (home-page "https://commons.apache.org/lang/")
     (synopsis "Extension of the java.lang package")
     (description "The Commons Lang components contains a set of Java classes
@@ -6312,9 +6027,9 @@ in the @code{java.lang} package.  The following classes are included:
              #t))
          (replace 'install (install-jars "build")))))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (inputs
-     `(("java-commons-logging-minimal" ,java-commons-logging-minimal)))
+     (list java-commons-logging-minimal))
     (home-page "https://commons.apache.org/proper/commons-bsf")
     (synopsis "Bean Scripting Framework")
     (description "The Bean Scripting Framework (BSF) is a set of Java classes
@@ -6350,9 +6065,9 @@ these scripting language engines.")
        ("java-jdom" ,java-jdom)
        ("java-commons-beanutils" ,java-commons-beanutils)))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://commons.apache.org/jxpath/")
-    (synopsis "Simple interpreter of an expression language called XPath.")
+    (synopsis "Simple interpreter of an expression language called XPath")
     (description "The org.apache.commons.jxpath package defines a simple
 interpreter of an expression language called XPath.  JXPath applies XPath
 expressions to graphs of objects of all kinds: JavaBeans, Maps, Servlet
@@ -6377,12 +6092,9 @@ contexts, DOM etc, including mixtures thereof.")
        (list "**/PerformanceTest.java")))
     (build-system ant-build-system)
     (inputs
-     `(("java-cglib" ,java-cglib)))
+     (list java-cglib))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)
-       ("java-asm" ,java-asm)
-       ("java-objenesis" ,java-objenesis)))
+     (list java-junit java-hamcrest-core java-asm java-objenesis))
     (home-page "https://commons.apache.org/proper/commons-pool/")
     (synopsis "Object-pooling API in Java")
     (description "The commons-pool package provides an object-pooling API
@@ -6411,7 +6123,7 @@ creating new pool implementations.")
        ("java-commons-logging" ,java-commons-logging-minimal)
        ("java-jboss-transaction-api-spec" ,java-jboss-transaction-api-spec)))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (build-system ant-build-system)
     (home-page "https://commons.apache.org/proper/commons-dbcp/")
     (synopsis "Database Connection Pool for Java")
@@ -6453,12 +6165,10 @@ reduce that load.")
                (delete-file "admin/servlet/JCSAdminServlet.java"))
              #t)))))
     (propagated-inputs
-     `(("java-classpathx-servletapi" ,java-classpathx-servletapi)
-       ("java-commons-logging-minimal" ,java-commons-logging-minimal)
-       ("java-commons-httpclient" ,java-commons-httpclient)
-       ("java-commons-dbcp" ,java-commons-dbcp)))
+     (list java-classpathx-servletapi java-commons-logging-minimal
+           java-commons-httpclient java-commons-dbcp))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://commons.apache.org/proper/commons-jcs/")
     (synopsis "Distributed caching system in Java")
     (description "JCS is a distributed caching system written in Java.  It
@@ -6576,9 +6286,9 @@ It provides packages in the @code{javax.annotations} namespace.")
              #t))
          (replace 'install (install-from-pom "guava/pom.xml")))))
     (inputs
-     `(("java-jsr305" ,java-jsr305)))
+     (list java-jsr305))
     (propagated-inputs
-     `(("java-guava-parent-pom" ,java-guava-parent-pom)))
+     (list java-guava-parent-pom))
     (home-page "https://github.com/google/guava")
     (synopsis "Google core libraries for Java")
     (description "Guava is a set of core libraries that includes new
@@ -6701,10 +6411,7 @@ used with any logging implementation at runtime.")
                  (("import org.mockito.cglib") "import net.sf.cglib")))
              #t)))))
     (inputs
-     `(("java-junit" ,java-junit)
-       ("java-objenesis" ,java-objenesis)
-       ("java-cglib" ,java-cglib)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-objenesis java-cglib java-hamcrest-core))
     (home-page "http://mockito.org")
     (synopsis "Mockito is a mock library for Java")
     (description "Mockito is a mocking library for Java which lets you write
@@ -6732,11 +6439,9 @@ it records all mock invocations, including methods arguments.")
          (add-after 'unpack 'chdir
            (lambda _ (chdir "httpcore") #t)))))
     (inputs
-     `(("java-commons-logging-minimal" ,java-commons-logging-minimal)
-       ("java-commons-lang3" ,java-commons-lang3)))
+     (list java-commons-logging-minimal java-commons-lang3))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-mockito" ,java-mockito-1)))
+     (list java-junit java-mockito-1))
     (home-page "https://hc.apache.org/httpcomponents-core-4.4.x/index.html")
     (synopsis "Low level HTTP transport components")
     (description "HttpCore is a set of low level HTTP transport components
@@ -6758,9 +6463,8 @@ This package provides the blocking I/O model library.")
          (add-after 'unpack 'chdir
            (lambda _ (chdir "httpcore-nio") #t)))))
     (inputs
-     `(("java-httpcomponents-httpcore" ,java-httpcomponents-httpcore)
-       ("java-hamcrest-core" ,java-hamcrest-core)
-       ,@(package-inputs java-httpcomponents-httpcore)))
+     (modify-inputs (package-inputs java-httpcomponents-httpcore)
+       (prepend java-httpcomponents-httpcore java-hamcrest-core)))
     (description "HttpCore is a set of low level HTTP transport components
 that can be used to build custom client and server side HTTP services with a
 minimal footprint.  HttpCore supports two I/O models: blocking I/O model based
@@ -6780,10 +6484,9 @@ NIO.")))
          (add-after 'unpack 'chdir
            (lambda _ (chdir "httpcore-ab") #t)))))
     (inputs
-     `(("java-httpcomponents-httpcore" ,java-httpcomponents-httpcore)
-       ("java-commons-cli" ,java-commons-cli)
-       ("java-hamcrest-core" ,java-hamcrest-core)
-       ,@(package-inputs java-httpcomponents-httpcore)))
+     (modify-inputs (package-inputs java-httpcomponents-httpcore)
+       (prepend java-httpcomponents-httpcore java-commons-cli
+                java-hamcrest-core)))
     (synopsis "Apache HttpCore benchmarking tool")
     (description "This package provides the HttpCore benchmarking tool.  It is
 an Apache AB clone based on HttpCore.")))
@@ -6808,12 +6511,12 @@ an Apache AB clone based on HttpCore.")))
          (add-after 'unpack 'chdir
            (lambda _ (chdir "httpclient") #t)))))
     (inputs
-     `(("java-commons-logging-minimal" ,java-commons-logging-minimal)
-       ("java-commons-codec" ,java-commons-codec)
-       ("java-hamcrest-core" ,java-hamcrest-core)
-       ("java-httpcomponents-httpcore" ,java-httpcomponents-httpcore)
-       ("java-mockito" ,java-mockito-1)
-       ("java-junit" ,java-junit)))
+     (list java-commons-logging-minimal
+           java-commons-codec
+           java-hamcrest-core
+           java-httpcomponents-httpcore
+           java-mockito-1
+           java-junit))
     (home-page "https://hc.apache.org/httpcomponents-client-ga/")
     (synopsis "HTTP client library for Java")
     (description "Although the @code{java.net} package provides basic
@@ -6834,10 +6537,8 @@ standards and recommendations.")
          (add-after 'unpack 'chdir
            (lambda _ (chdir "httpmime") #t)))))
     (inputs
-     `(("java-httpcomponents-httpclient" ,java-httpcomponents-httpclient)
-       ("java-httpcomponents-httpcore" ,java-httpcomponents-httpcore)
-       ("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))))
+     (list java-httpcomponents-httpclient java-httpcomponents-httpcore
+           java-junit java-hamcrest-core))))
 
 (define-public java-commons-net
   (package
@@ -6858,8 +6559,7 @@ standards and recommendations.")
        #:tests? #f
        #:jar-name "commons-net.jar"))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (home-page "https://commons.apache.org/net/")
     (synopsis "Client library for many basic Internet protocols")
     (description "The Apache Commons Net library implements the client side of
@@ -6886,7 +6586,7 @@ fundamental protocol access, not higher-level abstractions.")
        (modify-phases %standard-phases
          (replace 'install (install-jars "dist")))))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "http://www.jcraft.com/jsch/")
     (synopsis "Pure Java implementation of SSH2")
     (description "JSch is a pure Java implementation of SSH2.  JSch allows you
@@ -6929,11 +6629,9 @@ programs.")
              #t))
          (replace 'install (install-from-pom "pom.xml")))))
     (propagated-inputs
-     `(("java-xz" ,java-xz)
-       ("apache-commons-parent-pom" ,apache-commons-parent-pom-41)))
+     (list java-xz apache-commons-parent-pom-41))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-mockito" ,java-mockito-1)))
+     (list java-junit java-mockito-1))
     (home-page "https://commons.apache.org/proper/commons-compress/")
     (synopsis "Java library for working with compressed files")
     (description "The Apache Commons Compress library defines an API for
@@ -7022,7 +6720,7 @@ components.")
      `(#:tests? #f ; no tests
        #:jar-name "osgi-core.jar"))
     (inputs
-     `(("java-osgi-annotation" ,java-osgi-annotation)))
+     (list java-osgi-annotation))
     (home-page "https://www.osgi.org")
     (synopsis "Core module of OSGi framework")
     (description
@@ -7049,8 +6747,7 @@ the OSGi Core module.")
      `(#:tests? #f ; no tests
        #:jar-name "osgi-service-event.jar"))
     (inputs
-     `(("java-osgi-annotation" ,java-osgi-annotation)
-       ("java-osgi-core" ,java-osgi-core)))
+     (list java-osgi-annotation java-osgi-core))
     (home-page "https://www.osgi.org")
     (synopsis "OSGi service event module")
     (description
@@ -7077,7 +6774,7 @@ the OSGi @code{org.osgi.service.event} module.")
      `(#:tests? #f ; no tests included
        #:jar-name "eclipse-equinox-osgi.jar"))
     (inputs
-     `(("java-osgi-annotation" ,java-osgi-annotation)))
+     (list java-osgi-annotation))
     (home-page "http://www.eclipse.org/equinox/")
     (synopsis "Eclipse Equinox OSGi framework")
     (description "This package provides an implementation of the OSGi Core
@@ -7102,7 +6799,7 @@ specification.")
      `(#:tests? #f ; no tests included
        #:jar-name "eclipse-equinox-common.jar"))
     (inputs
-     `(("java-eclipse-osgi" ,java-eclipse-osgi)))
+     (list java-eclipse-osgi))
     (home-page "http://www.eclipse.org/equinox/")
     (synopsis "Common Eclipse runtime")
     (description "This package provides the common Eclipse runtime.")
@@ -7126,8 +6823,7 @@ specification.")
      `(#:tests? #f ; no tests included
        #:jar-name "eclipse-core-jobs.jar"))
     (inputs
-     `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
-       ("java-eclipse-osgi" ,java-eclipse-osgi)))
+     (list java-eclipse-equinox-common java-eclipse-osgi))
     (home-page "http://www.eclipse.org/equinox/")
     (synopsis "Eclipse jobs mechanism")
     (description "This package provides the Eclipse jobs mechanism.")
@@ -7151,9 +6847,8 @@ specification.")
      `(#:tests? #f ; no tests included
        #:jar-name "eclipse-equinox-registry.jar"))
     (inputs
-     `(("java-eclipse-core-jobs" ,java-eclipse-core-jobs)
-       ("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
-       ("java-eclipse-osgi" ,java-eclipse-osgi)))
+     (list java-eclipse-core-jobs java-eclipse-equinox-common
+           java-eclipse-osgi))
     (home-page "http://www.eclipse.org/equinox/")
     (synopsis "Eclipse extension registry support")
     (description "This package provides support for the Eclipse extension
@@ -7178,10 +6873,8 @@ registry.")
      `(#:tests? #f ; no tests included
        #:jar-name "eclipse-equinox-app.jar"))
     (inputs
-     `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
-       ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry)
-       ("java-eclipse-osgi" ,java-eclipse-osgi)
-       ("java-osgi-service-event" ,java-osgi-service-event)))
+     (list java-eclipse-equinox-common java-eclipse-equinox-registry
+           java-eclipse-osgi java-osgi-service-event))
     (home-page "http://www.eclipse.org/equinox/")
     (synopsis "Equinox application container")
     (description "This package provides the Equinox application container for
@@ -7206,9 +6899,8 @@ Eclipse.")
      `(#:tests? #f ; no tests included
        #:jar-name "eclipse-equinox-preferences.jar"))
     (inputs
-     `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
-       ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry)
-       ("java-eclipse-osgi" ,java-eclipse-osgi)))
+     (list java-eclipse-equinox-common java-eclipse-equinox-registry
+           java-eclipse-osgi))
     (home-page "http://www.eclipse.org/equinox/")
     (synopsis "Eclipse preferences mechanism")
     (description "This package provides the Eclipse preferences mechanism with
@@ -7233,10 +6925,8 @@ the module @code{org.eclipse.equinox.preferences}.")
      `(#:tests? #f ; no tests included
        #:jar-name "eclipse-core-contenttype.jar"))
     (inputs
-     `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
-       ("java-eclipse-equinox-preferences" ,java-eclipse-equinox-preferences)
-       ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry)
-       ("java-eclipse-osgi" ,java-eclipse-osgi)))
+     (list java-eclipse-equinox-common java-eclipse-equinox-preferences
+           java-eclipse-equinox-registry java-eclipse-osgi))
     (home-page "http://www.eclipse.org/")
     (synopsis "Eclipse content mechanism")
     (description "This package provides the Eclipse content mechanism in the
@@ -7261,13 +6951,13 @@ the module @code{org.eclipse.equinox.preferences}.")
      `(#:tests? #f ; no tests included
        #:jar-name "eclipse-core-runtime.jar"))
     (inputs
-     `(("java-eclipse-core-contenttype" ,java-eclipse-core-contenttype)
-       ("java-eclipse-core-jobs" ,java-eclipse-core-jobs)
-       ("java-eclipse-equinox-app" ,java-eclipse-equinox-app)
-       ("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
-       ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry)
-       ("java-eclipse-equinox-preferences" ,java-eclipse-equinox-preferences)
-       ("java-eclipse-osgi" ,java-eclipse-osgi)))
+     (list java-eclipse-core-contenttype
+           java-eclipse-core-jobs
+           java-eclipse-equinox-app
+           java-eclipse-equinox-common
+           java-eclipse-equinox-registry
+           java-eclipse-equinox-preferences
+           java-eclipse-osgi))
     (home-page "https://www.eclipse.org/")
     (synopsis "Eclipse core runtime")
     (description "This package provides the Eclipse core runtime with the
@@ -7292,9 +6982,8 @@ module @code{org.eclipse.core.runtime}.")
      `(#:tests? #f ; no tests included
        #:jar-name "eclipse-core-filesystem.jar"))
     (inputs
-     `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
-       ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry)
-       ("java-eclipse-osgi" ,java-eclipse-osgi)))
+     (list java-eclipse-equinox-common java-eclipse-equinox-registry
+           java-eclipse-osgi))
     (home-page "https://www.eclipse.org/")
     (synopsis "Eclipse core file system")
     (description "This package provides the Eclipse core file system with the
@@ -7319,11 +7008,9 @@ module @code{org.eclipse.core.filesystem}.")
      `(#:tests? #f ; no tests included
        #:jar-name "eclipse-core-expressions.jar"))
     (inputs
-     `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
-       ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry)
-       ("java-eclipse-equinox-preferences" ,java-eclipse-equinox-preferences)
-       ("java-eclipse-core-runtime" ,java-eclipse-core-runtime)
-       ("java-eclipse-osgi" ,java-eclipse-osgi)))
+     (list java-eclipse-equinox-common java-eclipse-equinox-registry
+           java-eclipse-equinox-preferences java-eclipse-core-runtime
+           java-eclipse-osgi))
     (home-page "https://www.eclipse.org/")
     (synopsis "Eclipse core expression language")
     (description "This package provides the Eclipse core expression language
@@ -7348,11 +7035,9 @@ with the @code{org.eclipse.core.expressions} module.")
      `(#:tests? #f ; no tests included
        #:jar-name "eclipse-core-variables.jar"))
     (inputs
-     `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
-       ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry)
-       ("java-eclipse-equinox-preferences" ,java-eclipse-equinox-preferences)
-       ("java-eclipse-core-runtime" ,java-eclipse-core-runtime)
-       ("java-eclipse-osgi" ,java-eclipse-osgi)))
+     (list java-eclipse-equinox-common java-eclipse-equinox-registry
+           java-eclipse-equinox-preferences java-eclipse-core-runtime
+           java-eclipse-osgi))
     (home-page "https://www.eclipse.org/platform")
     (synopsis "Eclipse core variables")
     (description "This package provides the Eclipse core variables module
@@ -7377,14 +7062,14 @@ with the @code{org.eclipse.core.expressions} module.")
      `(#:tests? #f ; no tests included
        #:jar-name "eclipse-ant-core.jar"))
     (inputs
-     `(("java-eclipse-equinox-app" ,java-eclipse-equinox-app)
-       ("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
-       ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry)
-       ("java-eclipse-equinox-preferences" ,java-eclipse-equinox-preferences)
-       ("java-eclipse-core-contenttype" ,java-eclipse-core-contenttype)
-       ("java-eclipse-core-runtime" ,java-eclipse-core-runtime)
-       ("java-eclipse-core-variables" ,java-eclipse-core-variables)
-       ("java-eclipse-osgi" ,java-eclipse-osgi)))
+     (list java-eclipse-equinox-app
+           java-eclipse-equinox-common
+           java-eclipse-equinox-registry
+           java-eclipse-equinox-preferences
+           java-eclipse-core-contenttype
+           java-eclipse-core-runtime
+           java-eclipse-core-variables
+           java-eclipse-osgi))
     (home-page "https://www.eclipse.org/platform")
     (synopsis "Ant build tool core libraries")
     (description "This package provides the ant build tool core libraries with
@@ -7409,16 +7094,16 @@ the module @code{org.eclipse.ant.core}.")
      `(#:tests? #f ; no tests included
        #:jar-name "eclipse-core-resources.jar"))
     (inputs
-     `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
-       ("java-eclipse-equinox-preferences" ,java-eclipse-equinox-preferences)
-       ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry)
-       ("java-eclipse-core-contenttype" ,java-eclipse-core-contenttype)
-       ("java-eclipse-core-expressions" ,java-eclipse-core-expressions)
-       ("java-eclipse-core-filesystem" ,java-eclipse-core-filesystem)
-       ("java-eclipse-core-jobs" ,java-eclipse-core-jobs)
-       ("java-eclipse-core-runtime" ,java-eclipse-core-runtime)
-       ("java-eclipse-ant-core" ,java-eclipse-ant-core)
-       ("java-eclipse-osgi" ,java-eclipse-osgi)))
+     (list java-eclipse-equinox-common
+           java-eclipse-equinox-preferences
+           java-eclipse-equinox-registry
+           java-eclipse-core-contenttype
+           java-eclipse-core-expressions
+           java-eclipse-core-filesystem
+           java-eclipse-core-jobs
+           java-eclipse-core-runtime
+           java-eclipse-ant-core
+           java-eclipse-osgi))
     (home-page "https://www.eclipse.org/")
     (synopsis "Eclipse core resource management")
     (description "This package provides the Eclipse core resource management
@@ -7443,10 +7128,8 @@ module @code{org.eclipse.core.resources}.")
      `(#:tests? #f ; no tests included
        #:jar-name "eclipse-compare-core.jar"))
     (inputs
-     `(("java-eclipse-core-runtime" ,java-eclipse-core-runtime)
-       ("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
-       ("java-eclipse-osgi" ,java-eclipse-osgi)
-       ("java-icu4j" ,java-icu4j)))
+     (list java-eclipse-core-runtime java-eclipse-equinox-common
+           java-eclipse-osgi java-icu4j))
     (home-page "https://www.eclipse.org/")
     (synopsis "Eclipse core compare support")
     (description "This package provides the Eclipse core compare support
@@ -7471,16 +7154,16 @@ module @code{org.eclipse.compare.core}.")
      `(#:tests? #f ; no tests included
        #:jar-name "eclipse-team-core.jar"))
     (inputs
-     `(("java-eclipse-compare-core" ,java-eclipse-compare-core)
-       ("java-eclipse-core-contenttype" ,java-eclipse-core-contenttype)
-       ("java-eclipse-core-filesystem" ,java-eclipse-core-filesystem)
-       ("java-eclipse-core-jobs" ,java-eclipse-core-jobs)
-       ("java-eclipse-core-resources" ,java-eclipse-core-resources)
-       ("java-eclipse-core-runtime" ,java-eclipse-core-runtime)
-       ("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
-       ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry)
-       ("java-eclipse-equinox-preferences" ,java-eclipse-equinox-preferences)
-       ("java-eclipse-osgi" ,java-eclipse-osgi)))
+     (list java-eclipse-compare-core
+           java-eclipse-core-contenttype
+           java-eclipse-core-filesystem
+           java-eclipse-core-jobs
+           java-eclipse-core-resources
+           java-eclipse-core-runtime
+           java-eclipse-equinox-common
+           java-eclipse-equinox-registry
+           java-eclipse-equinox-preferences
+           java-eclipse-osgi))
     (home-page "https://www.eclipse.org/platform")
     (synopsis "Eclipse team support core")
     (description "This package provides the Eclipse team support core module
@@ -7505,7 +7188,7 @@ module @code{org.eclipse.compare.core}.")
      `(#:tests? #f ; no tests included
        #:jar-name "eclipse-core-commands.jar"))
     (inputs
-     `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common)))
+     (list java-eclipse-equinox-common))
     (home-page "https://www.eclipse.org/platform")
     (synopsis "Eclipse core commands")
     (description "This package provides Eclipse core commands in the module
@@ -7557,9 +7240,8 @@ module @code{org.eclipse.compare.core}.")
                 "Positions.put(category, new ArrayList<Position>());"))
              #t)))))
     (inputs
-     `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
-       ("java-eclipse-core-commands" ,java-eclipse-core-commands)
-       ("java-icu4j" ,java-icu4j)))
+     (list java-eclipse-equinox-common java-eclipse-core-commands
+           java-icu4j))
     (home-page "http://www.eclipse.org/platform")
     (synopsis "Eclipse text library")
     (description "Platform Text is part of the Platform UI project and
@@ -7602,17 +7284,17 @@ and contributes the Eclipse default text editor.")
                          (find-files "." ".*.(props|properties|rsc)")))
              #t)))))
     (inputs
-     `(("java-eclipse-core-contenttype" ,java-eclipse-core-contenttype)
-       ("java-eclipse-core-filesystem" ,java-eclipse-core-filesystem)
-       ("java-eclipse-core-jobs" ,java-eclipse-core-jobs)
-       ("java-eclipse-core-resources" ,java-eclipse-core-resources)
-       ("java-eclipse-core-runtime" ,java-eclipse-core-runtime)
-       ("java-eclipse-equinox-app" ,java-eclipse-equinox-app)
-       ("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
-       ("java-eclipse-equinox-preferences" ,java-eclipse-equinox-preferences)
-       ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry)
-       ("java-eclipse-osgi" ,java-eclipse-osgi)
-       ("java-eclipse-text" ,java-eclipse-text)))
+     (list java-eclipse-core-contenttype
+           java-eclipse-core-filesystem
+           java-eclipse-core-jobs
+           java-eclipse-core-resources
+           java-eclipse-core-runtime
+           java-eclipse-equinox-app
+           java-eclipse-equinox-common
+           java-eclipse-equinox-preferences
+           java-eclipse-equinox-registry
+           java-eclipse-osgi
+           java-eclipse-text))
     (home-page "https://www.eclipse.org/jdt")
     (synopsis "Java development tools core libraries")
     (description "This package provides the core libraries of the Eclipse Java
@@ -7638,7 +7320,7 @@ development tools.")
        #:jar-name "eclipse-jdt-compiler-apt.jar"
        #:jdk ,openjdk11))
     (inputs
-     `(("java-eclipse-jdt-core" ,java-eclipse-jdt-core)))
+     (list java-eclipse-jdt-core))
     (home-page "https://www.eclipse.org/jdt/apt/")
     (synopsis "Annotation processing tool")
     (description "APT stands for Annotation Processing Tool.  APT provides a
@@ -7684,7 +7366,7 @@ definition intended to be inherited by other packages.")
              (copy-recursively "org.eclipse.lsp4j.debug/src/main/xtend-gen"
                                "org.eclipse.lsp4j.debug/src/main/java"))))))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (inputs
      `(("java-gson" ,java-gson-2.8.6)
        ("java-eclipse-lsp4j-generaor" ,java-eclipse-lsp4j-generator)
@@ -7706,7 +7388,7 @@ LSP4J Java bindings for the Debug Server Protocol.")))
        #:tests? #f; no tests
        #:source-dir "org.eclipse.lsp4j.generator/src/main/java"))
     (inputs
-     `(("java-eclipse-lsp4j-jsonrpc" ,java-eclipse-lsp4j-jsonrpc)))
+     (list java-eclipse-lsp4j-jsonrpc))
     (synopsis "Eclipse LSP4J Generator")
     (description "Eclipse LSP4J provides Java bindings for the Language
 Server Protocol and the Debug Adapter Protocol.  This package contains its
@@ -7722,9 +7404,9 @@ LSP4J code generator for Language Server Protocol classes.")))
        #:source-dir "org.eclipse.lsp4j.jsonrpc/src/main/java"
        #:test-dir "org.eclipse.lsp4j.jsonrpc/src/test"))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (inputs
-     `(("java-gson" ,java-gson-2.8.6)))
+     (list java-gson-2.8.6))
     (synopsis "Java JSON-RPC implementation")
     (description "Eclipse LSP4J provides Java bindings for the Language
 Server Protocol and the Debug Adapter Protocol.  This package contains its
@@ -7740,10 +7422,9 @@ JSON-RPC implementation.")))
        #:source-dir "org.eclipse.lsp4j.jsonrpc.debug/src/main/java"
        #:test-dir "org.eclipse.lsp4j.jsonrpc.debug/src/test"))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (inputs
-     `(("java-eclipse-lsp4j-jsonrpc" ,java-eclipse-lsp4j-jsonrpc)
-       ("java-gson" ,java-gson-2.8.6)))
+     (list java-eclipse-lsp4j-jsonrpc java-gson-2.8.6))
     (synopsis "Java JSON-RPC implementation (debug protocol)")
     (description "Eclipse LSP4J provides Java bindings for the Language
 Server Protocol and the Debug Adapter Protocol.  This package contains its
@@ -7770,9 +7451,9 @@ JSON-RPC implementation's debug protocol.")))
        #:source-dir "org.eclipse.xtext.xbase.lib/src"
        #:test-dir "org.eclipse.xtext.xbase.lib.tests/src"))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (inputs
-     `(("java-guava" ,java-guava)))
+     (list java-guava))
     (home-page "https://www.eclipse.org/Xtext/")
     (synopsis "Eclipse Xbase Runtime Library")
     (description "This package contains runtime libraries for Xbase languages
@@ -7808,21 +7489,20 @@ JavaMail API.")
 (define-public java-log4j-api
   (package
     (name "java-log4j-api")
-    (version "2.4.1")
+    (version "2.17.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://apache/logging/log4j/" version
                                   "/apache-log4j-" version "-src.tar.gz"))
               (sha256
                (base32
-                "0j5p9gik0jysh37nlrckqbky12isy95cpwg2gv5fas1rcdqbraxd"))))
+                "1bn9hrxyvw2d29z7mcd0frcqa8mbxmq59zb6b930zibkq68n1g01"))))
     (build-system ant-build-system)
     (arguments
      `(#:tests? #f ; tests require unpackaged software
        #:jar-name "log4j-api.jar"
        #:make-flags
-       (list (string-append "-Ddist.dir=" (assoc-ref %outputs "out")
-                            "/share/java"))
+       ,#~(list (string-append "-Ddist.dir=" #$output "/share/java"))
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'enter-dir
@@ -7834,9 +7514,8 @@ JavaMail API.")
          (add-after 'enter-dir 'delete-tests
            (lambda _ (delete-file-recursively "src/test") #t)))))
     (inputs
-     `(("java-osgi-core" ,java-osgi-core)
-       ("java-hamcrest-core" ,java-hamcrest-core)
-       ("java-junit" ,java-junit)))
+     (list java-osgi-core java-hamcrest-core java-junit))
+    (properties '((cpe-name . "log4j")))
     (home-page "https://logging.apache.org/log4j/2.x/")
     (synopsis "API module of the Log4j logging framework for Java")
     (description
@@ -7854,7 +7533,11 @@ Java.")
        ("java-log4j-api" ,java-log4j-api)
        ("java-mail" ,java-mail)
        ("java-jboss-jms-api-spec" ,java-jboss-jms-api-spec)
+       ("java-conversant-disruptor" ,java-conversant-disruptor)
        ("java-lmax-disruptor" ,java-lmax-disruptor)
+       ("java-jctools-core" ,java-jctools-core-1)
+       ("java-stax2-api" ,java-stax2-api)
+       ("java-jansi" ,java-jansi)
        ("java-kafka" ,java-kafka-clients)
        ("java-datanucleus-javax-persistence" ,java-datanucleus-javax-persistence)
        ("java-fasterxml-jackson-annotations" ,java-fasterxml-jackson-annotations)
@@ -7878,8 +7561,7 @@ Java.")
        #:jar-name "log4j-core.jar"
        #:jdk ,icedtea-8
        #:make-flags
-       (list (string-append "-Ddist.dir=" (assoc-ref %outputs "out")
-                            "/share/java"))
+       ,#~(list (string-append "-Ddist.dir=" #$output "/share/java"))
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'enter-dir
@@ -7902,6 +7584,7 @@ logging framework for Java.")))
     (inputs
      `(("log4j-api" ,java-log4j-api)
        ("log4j-core" ,java-log4j-core)
+       ("java-jboss-jms-api-spec" ,java-jboss-jms-api-spec)
        ("osgi-core" ,java-osgi-core)
        ("eclipse-osgi" ,java-eclipse-osgi)
        ("java-lmax-disruptor" ,java-lmax-disruptor)))))
@@ -7926,8 +7609,7 @@ logging framework for Java.")))
          (replace 'install
            (install-from-pom "pom.xml")))))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (home-page "https://commons.apache.org/cli/")
     (synopsis "Command line arguments and options parsing library")
     (description "The Apache Commons CLI library provides an API for parsing
@@ -7984,10 +7666,9 @@ This is a part of the Apache Commons Project.")
                 "return;"))))
          (replace 'install (install-from-pom "pom.xml")))))
     (native-inputs
-     `(("java-commons-lang3" ,java-commons-lang3)
-       ("java-junit" ,java-junit)))
+     (list java-commons-lang3 java-junit))
     (propagated-inputs
-      `(("apache-commons-parent-pom" ,apache-commons-parent-pom-50)))
+      (list apache-commons-parent-pom-50))
     (home-page "https://commons.apache.org/codec/")
     (synopsis "Common encoders and decoders such as Base64, Hex, Phonetic and URLs")
     (description "The codec package contains simple encoder and decoders for
@@ -8018,7 +7699,7 @@ This is a part of the Apache Commons Project.")
          (replace 'install (install-jars "dist"))
          (add-after 'install 'install-doc (install-javadoc "dist/docs/api")))))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://commons.apache.org/daemon/")
     (synopsis "Library to launch Java applications as daemons")
     (description "The Daemon package from Apache Commons can be used to
@@ -8048,8 +7729,7 @@ This is a part of the Apache Commons Project.")
     (build-system ant-build-system)
     (arguments `(#:jar-name "javaewah.jar"))
     (inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (home-page "https://github.com/lemire/javaewah")
     (synopsis "Compressed alternative to the Java @code{BitSet} class")
     (description "This is a word-aligned compressed variant of the Java
@@ -8107,10 +7787,9 @@ more efficient storage-wise than an uncompressed bitmap (as implemented in the
          (replace 'install
            (install-from-pom "slf4j-api/pom.xml")))))
     (propagated-inputs
-     `(("java-slf4j-parent" ,java-slf4j-parent)))
+     (list java-slf4j-parent))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (home-page "https://www.slf4j.org/")
     (synopsis "Simple logging facade for Java")
     (description "The Simple Logging Facade for Java (SLF4J) serves as a
@@ -8145,6 +7824,7 @@ time.")
      `(#:jar-name "slf4j-simple.jar"
        #:source-dir "slf4j-simple/src/main"
        #:test-dir "slf4j-simple/src/test"
+       #:test-exclude (list "**/*SimpleLoggerMultithreadedInitializationTest.java")
        #:phases
        (modify-phases %standard-phases
          ;; The tests need some test classes from slf4j-api
@@ -8160,10 +7840,9 @@ time.")
          (replace 'install
            (install-from-pom "slf4j-simple/pom.xml")))))
     (propagated-inputs
-     `(("java-slf4j-api" ,java-slf4j-api)))
+     (list java-slf4j-api))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (home-page "https://www.slf4j.org/")
     (synopsis "Simple implementation of simple logging facade for Java")
     (description "SLF4J binding for the Simple implementation, which outputs
@@ -8657,9 +8336,9 @@ import org.antlr.grammar.v2.ANTLRTreePrinter;"))
        #:source-dir "org.abego.treelayout/src/main/java"
        #:test-dir "org.abego.treelayout/src/test"))
     (inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (native-inputs
-     `(("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-hamcrest-core))
     (home-page "http://treelayout.sourceforge.net")
     (synopsis "Tree Layout Algorithm in Java")
     (description "TreeLayout creates tree layouts for arbitrary trees.  It is
@@ -8849,14 +8528,14 @@ sources by ANTLR.")
                (invoke "antlr3" "SourceGenTriggers.g"))
              #t)))))
     (inputs
-     `(("antlr3" ,antlr3)
-       ("java-antlr4-runtime" ,java-antlr4-runtime)
-       ("java-icu4j" ,java-icu4j)
-       ("java-jsonp-api" ,java-jsonp-api)
-       ("java-stringtemplate" ,java-stringtemplate)
-       ("java-treelayout" ,java-treelayout)))
+     (list antlr3
+           java-antlr4-runtime
+           java-icu4j
+           java-jsonp-api
+           java-stringtemplate
+           java-treelayout))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (synopsis "Parser and lexer generator in Java")
     (description "ANTLR (ANother Tool for Language Recognition) is a powerful
 parser generator for reading, processing, executing, or translating structured
@@ -8886,7 +8565,7 @@ parse trees.")))
                (chmod "build.xml" #o644)
                #t))))))
     (inputs
-     `(("java-treelayout" ,java-treelayout)))))
+     (list java-treelayout))))
 
 (define-public antlr4-4.1
   (package
@@ -9065,7 +8744,7 @@ the runtime library of ANTLR.")))
                 "dir=\"${test.home}\""))
              #t)))))
     (native-inputs
-     `(("java-junit" ,java-junit)))))
+     (list java-junit))))
 
 (define-public java-microemulator-cldc
   (package
@@ -9478,7 +9157,7 @@ and service platform for the Java programming language.")
      `(#:jar-name "osgi-service-log.jar"
        #:tests? #f)); no tests
     (inputs
-     `(("java-osgi-framework" ,java-osgi-framework)))
+     (list java-osgi-framework))
     (home-page "https://www.osgi.org")
     (synopsis "Provides methods for bundles to write messages to the log")
     (description
@@ -10129,8 +9808,7 @@ Processor.  It also includes the default implementation of handler types
              (copy-recursively "src/main/resources" "build/classes")
              #t)))))
     (inputs
-     `(("java-fasterxml-jackson-annotations" ,java-fasterxml-jackson-annotations)
-       ("java-fasterxml-jackson-core" ,java-fasterxml-jackson-core)))
+     (list java-fasterxml-jackson-annotations java-fasterxml-jackson-core))
     (home-page "https://github.com/FasterXML/jackson-databind")
     (synopsis "Data-binding functionality and tree-model for the Jackson Data Processor")
     (description "This package contains the general-purpose data-binding
@@ -10178,11 +9856,10 @@ configuration.")
              (copy-recursively "jaxb/src/main/resources" "build/classes")
              #t)))))
     (inputs
-     `(("java-fasterxml-jackson-annotations" ,java-fasterxml-jackson-annotations)
-       ("java-fasterxml-jackson-core" ,java-fasterxml-jackson-core)
-       ("java-fasterxml-jackson-databind" ,java-fasterxml-jackson-databind)))
+     (list java-fasterxml-jackson-annotations java-fasterxml-jackson-core
+           java-fasterxml-jackson-databind))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://github.com/FasterXML/jackson-modules-base")
     (synopsis "Jaxb annotations jackson module")
     (description "This package is the jaxb annotations module for jackson.")
@@ -10223,13 +9900,10 @@ configuration.")
                  (("@projectartifactid@") "jackson-module-mrbean")))
              #t)))))
     (inputs
-     `(("java-asm" ,java-asm)
-       ("java-fasterxml-jackson-annotations"
-        ,java-fasterxml-jackson-annotations)
-       ("java-fasterxml-jackson-core" ,java-fasterxml-jackson-core)
-       ("java-fasterxml-jackson-databind" ,java-fasterxml-jackson-databind)))
+     (list java-asm java-fasterxml-jackson-annotations
+           java-fasterxml-jackson-core java-fasterxml-jackson-databind))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://github.com/FasterXML/jackson-modules-base")
     (synopsis "POJO type materialization for Java")
     (description "This package implements POJO type materialization.
@@ -10293,10 +9967,8 @@ of deserialization.")
                  (("@projectartifactid@") "jackson-dataformat-yaml")))
              #t)))))
     (inputs
-     `(("java-fasterxml-jackson-annotations" ,java-fasterxml-jackson-annotations)
-       ("java-fasterxml-jackson-core" ,java-fasterxml-jackson-core)
-       ("java-fasterxml-jackson-databind" ,java-fasterxml-jackson-databind)
-       ("java-snakeyaml" ,java-snakeyaml)))
+     (list java-fasterxml-jackson-annotations java-fasterxml-jackson-core
+           java-fasterxml-jackson-databind java-snakeyaml))
     (native-inputs
      `(("junit" ,java-junit)
        ("hamcrest" ,java-hamcrest-core)
@@ -10525,9 +10197,9 @@ the subsequent value resolution at any given level.")
              #t))
          (replace 'install (install-jars "dist")))))
     (inputs
-     `(("java-asm" ,java-asm)))
+     (list java-asm))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://github.com/nhatminhle/cofoja")
     (synopsis "Contracts for Java")
     (description "Contracts for Java, or Cofoja for short, is a contract
@@ -10640,12 +10312,12 @@ the dependency is said to be unsatisfied, and the application is broken.")
          (replace 'install
            (install-from-pom "core/pom.xml")))))
     (propagated-inputs
-     `(("java-aopalliance" ,java-aopalliance)
-       ("java-asm" ,java-asm)
-       ("java-cglib" ,java-cglib)
-       ("java-guava" ,java-guava)
-       ("java-javax-inject" ,java-javax-inject)
-       ("java-guice-parent-pom" ,java-guice-parent-pom)))
+     (list java-aopalliance
+           java-asm
+           java-cglib
+           java-guava
+           java-javax-inject
+           java-guice-parent-pom))
     (home-page "https://github.com/google/guice")
     (synopsis "Lightweight dependency injection framework")
     (description "Guice is a lightweight dependency injection framework for
@@ -10854,11 +10526,9 @@ annotations.")
          (replace 'install
            (install-from-pom "pom.xml")))))
     (inputs
-     `(("java-classpathx-servletapi" ,java-classpathx-servletapi)
-       ("java-commons-bsf" ,java-commons-bsf)))
+     (list java-classpathx-servletapi java-commons-bsf))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("javacc" ,javacc-3)))
+     (list java-junit javacc-3))
     (home-page "http://beanshell.org/")
     (synopsis "Lightweight Scripting for Java")
     (description "BeanShell is a small, free, embeddable Java source
@@ -10943,15 +10613,15 @@ those in Perl and JavaScript.")
          "**/MessageFormatter_format_Test.java"
          "**/internal/*/*_assert*_Test.java")))
     (inputs
-     `(("java-fest-util" ,java-fest-util)))
+     (list java-fest-util))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-fest-test" ,java-fest-test)
-       ("java-hamcrest-core" ,java-hamcrest-core)
-       ("java-mockito" ,java-mockito-1)
-       ("java-cglib" ,java-cglib)
-       ("java-objenesis" ,java-objenesis)
-       ("java-asm" ,java-asm)))
+     (list java-junit
+           java-fest-test
+           java-hamcrest-core
+           java-mockito-1
+           java-cglib
+           java-objenesis
+           java-asm))
     (home-page "https://github.com/alexruiz/fest-assert-2.x")
     (synopsis "FEST fluent assertions")
     (description "FEST-Assert provides a fluent interface for assertions.")
@@ -11075,9 +10745,7 @@ to use.")
                        "org.testng.TestNG" "-testclass"
                        "build/test-classes/com/neilalexander/jnacl/NaClTest.class"))))))
       (native-inputs
-       `(("java-testng" ,java-testng)
-         ("java-fest-util" ,java-fest-util)
-         ("java-fest-assert" ,java-fest-assert)))
+       (list java-testng java-fest-util java-fest-assert))
       (home-page "https://github.com/neilalexander/jnacl")
       (synopsis "Java implementation of NaCl")
       (description "Pure Java implementation of the NaCl: Networking and
@@ -11181,13 +10849,11 @@ configuration and string construction.")
                (invoke "java" "javacc" "Parser.jj"))
              #t)))))
     (inputs
-     `(("java-commons-logging-minimal" ,java-commons-logging-minimal)))
+     (list java-commons-logging-minimal))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)
-       ("javacc" ,javacc-4)))
+     (list java-junit java-hamcrest-core javacc-4))
     (home-page "https://commons.apache.org/proper/commons-jexl/")
-    (synopsis "Java Expression Language ")
+    (synopsis "Java Expression Language")
     (description "JEXL is a library intended to facilitate the implementation
 of dynamic and scripting features in applications and frameworks written in
 Java.  JEXL implements an Expression Language based on some extensions to the
@@ -11271,7 +10937,7 @@ algorithms and xxHash hashing algorithm.")
          (replace 'install
            (install-jars "build/artifacts/jdk1.5/jars")))))
     (inputs
-     `(("java-javax-mail" ,java-javax-mail)))
+     (list java-javax-mail))
     (native-inputs
      `(("unzip" ,unzip)
        ("junit" ,java-junit)
@@ -11286,15 +10952,16 @@ programming language.")
 (define-public java-lmax-disruptor
   (package
     (name "java-lmax-disruptor")
-    (version "3.3.7")
+    (version "3.4.4")
     (source (origin
-              (method url-fetch)
-              (uri (string-append "https://github.com/LMAX-Exchange/disruptor/"
-                                  "archive/" version ".tar.gz"))
-              (file-name (string-append name "-" version ".tar.gz"))
+              (method git-fetch)
+              (uri (git-reference
+                     (url "https://github.com/LMAX-Exchange/disruptor")
+                     (commit version)))
+              (file-name (git-file-name name version))
               (sha256
                (base32
-                "17da2gwj5abnlsfgn2xqjk5lgzbg4vkb0hdv2dvc8r2fx4bi7w3g"))))
+                "02c5kp3n8a73dq9ay7ar53s1k3x61z9yzc5ikqb03m6snr1wpfqn"))))
     (build-system ant-build-system)
     (arguments
      `(#:jar-name "java-lmax-disruptor.jar"
@@ -11318,6 +10985,67 @@ for high performance inter-thread communication that avoids the need for
 message queues or resource locking.")
     (license license:asl2.0)))
 
+(define-public java-conversant-disruptor
+  (package
+    (name "java-conversant-disruptor")
+    (version "1.2.19")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                     (url "https://github.com/conversant/disruptor")
+                     (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0gx1dm7sfg7pa05cs4qby10gfcplai5b5lf1f7ik1a76dh3vhl0g"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "java-conversant-disruptor.jar"
+       #:source-dir "src/main/java"
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'copy-resources
+           (lambda _
+            (copy-recursively "src/main/resources" "build/classes")))
+         (add-before 'build 'remove-module
+           (lambda _
+             (delete-file "src/main/java/module-info.java"))))))
+    (native-inputs
+     (list java-junit))
+    (home-page "https://github.com/conversant/disruptor")
+    (synopsis "High performance intra-thread communication")
+    (description "Conversant Disruptor is the highest performing intra-thread
+transfer mechanism available in Java.  Conversant Disruptor is an implementation
+of this type of ring buffer that has almost no overhead and that exploits a
+particularly simple design.")
+    (license license:asl2.0)))
+
+(define-public java-jctools-core-1
+  (package
+    (name "java-jctools-core")
+    (version "1.2.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                     (url "https://github.com/JCTools/JCTools")
+                     (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "105my29nwd4djvdllmq8s3jdzbyplbkxzwmddxiiilb4yqr1pghb"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "java-jctools-core.jar"
+       #:source-dir "jctools-core/src/main/java"
+       #:test-dir "jctools-core/src/test"))
+    (native-inputs
+     (list java-junit java-hamcrest-all))
+    (home-page "https://github.com/JCTools/JCTools")
+    (synopsis "Concurrency tools for Java")
+    (description "This library implements concurrent data structures that are
+not natively available in Java.")
+    (license license:asl2.0)))
+
 (define-public java-commons-bcel
   (package
     (name "java-commons-bcel")
@@ -11409,7 +11137,7 @@ streams, etc.")
        #:source-dir "powermock-reflect/src/main/java"
        #:test-dir "powermock-reflect/src/test"))
     (inputs
-     `(("java-objenesis" ,java-objenesis)))
+     (list java-objenesis))
     (native-inputs
      `(("junit" ,java-junit)
        ("cglib" ,java-cglib)
@@ -11589,6 +11317,8 @@ application components to create, send, receive, and read messages.")
              "**/DurationFilterTest.java"
              "**/MailHandlerTest.java"
              "**/GetLocalAddressTest.java"
+             ;; SSLHandshakeException: No appropriate protocol
+             "**/WriteTimeoutSocketTest.java"
              ;; FIXME: both end with:
              ;; java.lang.ClassNotFoundException:
              ;; javax.mail.internet.MimeMultipartParseTest
@@ -11599,16 +11329,13 @@ application components to create, send, receive, and read messages.")
          (add-before 'configure 'move-version.java
            (lambda _
              (copy-file "mail/src/main/resources/javax/mail/Version.java"
-                        "mail/src/main/java/javax/mail/Version.java")
-             #t))
+                        "mail/src/main/java/javax/mail/Version.java")))
          (add-before 'build 'copy-resources
            (lambda _
              (copy-recursively "mail/src/main/resources/META-INF"
-                               "build/classes/META-INF")
-             #t)))))
+                               "build/classes/META-INF"))))))
     (native-inputs
-     `(("junit" ,java-junit)
-       ("hamcrest" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (home-page "https://javaee.github.io/javamail/")
     (synopsis "Mail-related functionality in Java")
     (description "The JavaMail API provides a platform-independent and
@@ -11653,7 +11380,7 @@ protocol-independent framework to build mail and messaging applications.")
          "**/RouterSpecTest.java"
          "**/ProxyTest.java")))
     (inputs
-     `(("java-jnacl" ,java-jnacl)))
+     (list java-jnacl))
     (native-inputs
      `(("java-hamcrest-core" ,java-hamcrest-core)
        ("junit" ,java-junit)))
@@ -11665,14 +11392,14 @@ protocol-independent framework to build mail and messaging applications.")
 (define-public java-kafka-clients
   (package
     (name "java-kafka-clients")
-    (version "1.0.0")
+    (version "1.1.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://apache/kafka/" version "/kafka-"
                                   version "-src.tgz"))
               (sha256
                (base32
-                "1yxmnsmliwm7671q5yy9bl4jdqyyn00n26cggz9brwczx80w1vfq"))))
+                "1jn62q7z383nwhzv4ippsddf98sa1gnkszjjncj4ii3r8rzgw566"))))
     (build-system ant-build-system)
     (arguments
      `(#:jar-name "java-kafka-clients.jar"
@@ -11685,29 +11412,32 @@ protocol-independent framework to build mail and messaging applications.")
          "**/IntegrationTest.java"
          ;; Requires network
          "**/ClientUtilsTest.java"
+         ;; This test fails on i686
+         "**/SerializationTest.java"
+         ;; "protocol is disabled or cipher suites are inappropriate"
+         "**/SslTransportLayerTest.java"
          ;; End with errors that seem related to our powermock
          "**/KafkaProducerTest.java"
          "**/BufferPoolTest.java"
          ;; Undeterministic failure, seems to affect mostly ci
          "**/GarbageCollectedMemoryPoolTest.java")))
     (inputs
-     `(("java-slf4j-api" ,java-slf4j-api)
-       ("java-lz4" ,java-lz4)))
-    (native-inputs
-     `(("junit" ,java-junit)
-       ("hamcrest" ,java-hamcrest-all)
-       ("objenesis" ,java-objenesis)
-       ("asm" ,java-asm)
-       ("cglib" ,java-cglib)
-       ("javassist" ,java-jboss-javassist)
-       ("snappy" ,java-snappy)
-       ("easymock" ,java-easymock)
-       ("powermock" ,java-powermock-core)
-       ("powermock-easymock" ,java-powermock-api-easymock)
-       ("powermock-junit4-common" ,java-powermock-modules-junit4-common)
-       ("powermock-junit4" ,java-powermock-modules-junit4)
-       ("powermock-support" ,java-powermock-api-support)
-       ("java-bouncycastle" ,java-bouncycastle)))
+     (list java-slf4j-api java-lz4))
+    (native-inputs
+     (list java-asm
+           java-bouncycastle
+           java-cglib
+           java-easymock
+           java-hamcrest-all
+           java-jboss-javassist
+           java-junit
+           java-objenesis
+           java-powermock-api-easymock
+           java-powermock-api-support
+           java-powermock-core
+           java-powermock-modules-junit4
+           java-powermock-modules-junit4-common
+           java-snappy))
     (home-page "https://kafka.apache.org")
     (synopsis "Distributed streaming platform")
     (description "Kafka is a distributed streaming platform, which means:
@@ -11785,7 +11515,7 @@ outputting XML data from Java code.")
        ("log4j-core" ,java-log4j-core)
        ("logging" ,java-commons-logging-minimal)))
     (propagated-inputs
-     `(("java-geronimo-parent-pom" ,java-geronimo-parent-pom)))
+     (list java-geronimo-parent-pom))
     (native-inputs
      `(("junit" ,java-junit)))
     (home-page "https://geronimo.apache.org/maven/xbean/3.6/xbean-reflect/")
@@ -11901,7 +11631,7 @@ public Bundle getBundle()"))
        #:source-dir "xbean-asm-util/src/main/java"
        #:tests? #f)); no tests
     (inputs
-     `(("java-asm" ,java-asm)))
+     (list java-asm))
     (native-inputs '())))
 
 (define-public java-geronimo-xbean-finder
@@ -11913,15 +11643,14 @@ public Bundle getBundle()"))
        #:source-dir "xbean-finder/src/main/java"
        #:test-dir "xbean-finder/src/test"))
     (inputs
-     `(("java-slf4j-api" ,java-slf4j-api)
-       ("java-asm" ,java-asm)
-       ("java-geronimo-xbean-bundleutils" ,java-geronimo-xbean-bundleutils)
-       ("java-geronimo-xbean-asm-util" ,java-geronimo-xbean-asm-util)
-       ("java-osgi-service-packageadmin" ,java-osgi-service-packageadmin)
-       ("java-osgi-framework" ,java-osgi-framework)))
+     (list java-slf4j-api
+           java-asm
+           java-geronimo-xbean-bundleutils
+           java-geronimo-xbean-asm-util
+           java-osgi-service-packageadmin
+           java-osgi-framework))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))))
+     (list java-junit java-hamcrest-core))))
 
 (define-public java-gson
   (package
@@ -11940,8 +11669,7 @@ public Bundle getBundle()"))
        #:source-dir "gson/src/main/java"
        #:test-dir "gson/src/test"))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (home-page "https://github.com/google/gson")
     (synopsis "Java serialization/deserialization library from/to JSON")
     (description "Gson is a Java library that can be used to convert Java
@@ -12024,9 +11752,7 @@ including pre-existing objects that you do not have source-code of.")
          (replace 'install
            (install-from-pom "hawtjni-runtime/pom.xml")))))
     (inputs
-     `(("java-commons-cli" ,java-commons-cli)
-       ("java-asm" ,java-asm)
-       ("java-geronimo-xbean-finder" ,java-geronimo-xbean-finder)))
+     (list java-commons-cli java-asm java-geronimo-xbean-finder))
     (home-page "https://fusesource.github.io/hawtjni/")
     (synopsis "JNI code generator")
     (description "HawtJNI is a code generator that produces the JNI code needed
@@ -12091,7 +11817,7 @@ that is part of the SWT Tools project.")
          (replace 'install
            (install-from-pom "pom.xml")))))
     (propagated-inputs
-     `(("java-hawtjni" ,java-hawtjni)))
+     (list java-hawtjni))
     (home-page "https://fusesource.github.io/jansi/")
     (synopsis "Native library for jansi")
     (description "This package provides the native library for jansi, a small
@@ -12102,17 +11828,81 @@ console output.")
 (define-public java-jansi
   (package
     (name "java-jansi")
-    (version "1.16")
+    (version "2.4.0")
     (source (origin
-              (method url-fetch)
-              (uri (string-append "https://github.com/fusesource/jansi/archive/"
-                                  "jansi-project-" version ".tar.gz"))
+              (method git-fetch)
+              (uri (git-reference
+                     (url "https://github.com/fusesource/jansi")
+                     (commit (string-append "jansi-" version))))
+              (file-name (git-file-name name version))
               (sha256
                (base32
-                "11kh3144i3fzp21dpy8zg52mjmsr214k7km9p8ly0rqk2px0qq2z"))))
+                "1s6fva06990798b5fyxqzr30zwyj1byq5wrm54j2larcydaryggf"))
+              (modules '((guix build utils)))
+              (snippet
+                ;; contains pre-compiled libraries
+                '(delete-file-recursively
+                   "src/main/resources/org/fusesource/jansi/internal"))))
     (build-system ant-build-system)
     (arguments
      `(#:jar-name "jansi.jar"
+       #:source-dir "src/main/java"
+       #:test-dir "src/test"
+       #:tests? #f; require junit 3
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'build-native
+           (lambda* (#:key inputs #:allow-other-keys)
+             (with-directory-excursion "src/main/native"
+               (for-each
+                 (lambda (cfile)
+                   (let ((cfile (basename cfile))
+                         (ofile (string-append (basename cfile ".c") ".o")))
+                     (invoke ,(cc-for-target) "-c" cfile "-o" ofile
+                             (string-append "-I" (assoc-ref inputs "jdk")
+                                            "/include/linux")
+                             "-fPIC" "-O2")))
+                 (find-files "." "\\.c$"))
+               (apply invoke ,(cc-for-target) "-o" "libjansi.so" "-shared"
+                      (find-files "." "\\.o$")))))
+         (add-before 'build 'install-native
+           (lambda _
+             (let ((dir (string-append "build/classes/org/fusesource/"
+                                       "jansi/internal/native/"
+                                       ,(match (or (%current-target-system) (%current-system))
+                                          ("i686-linux" "Linux/x86")
+                                          ("x86_64-linux" "Linux/x86_64")
+                                          ("armhf-linux" "Linux/armv7")
+                                          ("aarch64-linux" "Linux/arm64")
+                                          ("mips64el-linux" "Linux/mips64")
+                                          (_ "unknown-kernel")))))
+               (install-file "src/main/native/libjansi.so" dir))))
+         (add-before 'build 'copy-resources
+           (lambda _
+             (copy-recursively "src/main/resources" "build/classes")))
+         (replace 'install
+           (install-from-pom "pom.xml")))))
+    (home-page "https://fusesource.github.io/jansi/")
+    (synopsis "Portable ANSI escape sequences")
+    (description "Jansi is a Java library that allows you to use ANSI escape
+sequences to format your console output which works on every platform.")
+    (license license:asl2.0)))
+
+(define-public java-jansi-1
+  (package
+    (inherit java-jansi)
+    (version "1.16")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                     (url "https://github.com/fusesource/jansi")
+                     (commit (string-append "jansi-project-" version))))
+              (file-name (git-file-name "jansi" version))
+              (sha256
+               (base32
+                "0ikk0x352gh30b42qn1jd89xwsjj0mavrc5kms7fss15bd8vsayx"))))
+    (arguments
+     `(#:jar-name "jansi.jar"
        #:source-dir "jansi/src/main/java"
        #:test-dir "jansi/src/test"
        #:phases
@@ -12138,15 +11928,9 @@ console output.")
          (replace 'install
            (install-from-pom "jansi/pom.xml")))))
     (propagated-inputs
-     `(("java-jansi-native" ,java-jansi-native)))
+     (list java-jansi-native))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
-    (home-page "https://fusesource.github.io/jansi/")
-    (synopsis "Portable ANSI escape sequences")
-    (description "Jansi is a Java library that allows you to use ANSI escape
-sequences to format your console output which works on every platform.")
-    (license license:asl2.0)))
+     (list java-junit java-hamcrest-core))))
 
 (define-public java-jboss-el-api-spec
   (package
@@ -12174,7 +11958,7 @@ sequences to format your console output which works on every platform.")
          (replace 'install
            (install-from-pom "pom.xml")))))
     (inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://github.com/jboss/jboss-el-api_spec")
     (synopsis "JSR-341 expression language 3.0 API")
     (description "This package contains an implementation of the JSR-341
@@ -12245,13 +12029,10 @@ specific events.")
          (replace 'install
            (install-from-pom "api/pom.xml")))))
     (propagated-inputs
-     `(("java-javax-inject" ,java-javax-inject)
-       ("java-jboss-el-api-spec" ,java-jboss-el-api-spec)
-       ("java-jboss-interceptors-api-spec" ,java-jboss-interceptors-api-spec)
-       ("java-weld-parent-pom" ,java-weld-parent-pom)))
+     (list java-javax-inject java-jboss-el-api-spec
+           java-jboss-interceptors-api-spec java-weld-parent-pom))
     (native-inputs
-     `(("java-testng" ,java-testng)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-testng java-hamcrest-core))
     (home-page "http://cdi-spec.org/")
     (synopsis "Contexts and Dependency Injection APIs")
     (description "Java-cdi-api contains the required APIs for Contexts and
@@ -12278,10 +12059,9 @@ Dependency Injection (CDI).")
        ;; Contains only interfaces and base classes (no test)
        #:test-exclude (list "**/test*/**.java")))
     (inputs
-     `(("java-guava" ,java-guava)))
+     (list java-guava))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (home-page "https://www.joda.org/joda-convert/")
     (synopsis "Conversion between Objects and Strings")
     (description "Joda-Convert provides a small set of classes to aid
@@ -12345,11 +12125,9 @@ wider problem of Object to Object transformation.")
              (copy-recursively "src/test/resources" "build/test-classes")
              #t)))))
     (inputs
-     `(("java-joda-convert" ,java-joda-convert)))
+     (list java-joda-convert))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)
-       ("tzdata" ,tzdata)))
+     (list java-junit java-hamcrest-core tzdata))
     (home-page "https://www.joda.org/joda-time/")
     (synopsis "Replacement for the Java date and time classes")
     (description "Joda-Time is a replacement for the Java date and time
@@ -12398,8 +12176,7 @@ classes prior to Java SE 8.")
             #t))
          (replace 'install (install-jars "build")))))
     (inputs
-     `(("java-apache-xml-commons-resolver" ,java-apache-xml-commons-resolver)
-       ("java-jaxp" ,java-jaxp)))
+     (list java-apache-xml-commons-resolver java-jaxp))
     (home-page "https://xerces.apache.org/xerces2-j/")
     (synopsis "Validating XML parser for Java with DOM level 3 support")
     (description "The Xerces2 Java parser is the reference implementation of
@@ -12458,7 +12235,7 @@ the DOM level 3 load/save API's are in use.")
                           (find-files "build" "^jakarta-regexp-.*\\.jar$"))
                 #t))))))
     (home-page "https://attic.apache.org/projects/jakarta-regexp.html")
-    (synopsis "Regular expression parser generator for Java.")
+    (synopsis "Regular expression parser generator for Java")
     (description "@code{jakarta-regexp} is an old regular expression parser
 generator for Java.")
     (license license:asl2.0)))
@@ -12486,7 +12263,7 @@ generator for Java.")
              (copy-recursively "src/main/resources" "build/classes")
              #t)))))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://jline.github.io")
     (synopsis "Console input handling library")
     (description "JLine is a Java library for handling console input.  It is
@@ -12509,23 +12286,22 @@ features that bring it on par with the Z shell line editor.")
      `(#:jdk ,icedtea-8
        ,@(package-arguments java-jline)))
     (inputs
-     `(("java-jansi" ,java-jansi)
-       ("java-jansi-native" ,java-jansi-native)))
-    (native-inputs
-     `(("java-powermock-modules-junit4" ,java-powermock-modules-junit4)
-       ("java-powermock-modules-junit4-common" ,java-powermock-modules-junit4-common)
-       ("java-powermock-api-easymock" ,java-powermock-api-easymock)
-       ("java-powermock-api-support" ,java-powermock-api-support)
-       ("java-powermock-core" ,java-powermock-core)
-       ("java-powermock-reflect" ,java-powermock-reflect)
-       ("java-easymock" ,java-easymock)
-       ("java-jboss-javassist" ,java-jboss-javassist)
-       ("java-objenesis" ,java-objenesis)
-       ("java-asm" ,java-asm)
-       ("java-hamcrest-core" ,java-hamcrest-core)
-       ("java-cglib" ,java-cglib)
-       ("java-junit" ,java-junit)
-       ("java-hawtjni" ,java-hawtjni)))))
+     (list java-jansi-1 java-jansi-native))
+    (native-inputs
+     (list java-powermock-modules-junit4
+           java-powermock-modules-junit4-common
+           java-powermock-api-easymock
+           java-powermock-api-support
+           java-powermock-core
+           java-powermock-reflect
+           java-easymock
+           java-jboss-javassist
+           java-objenesis
+           java-asm
+           java-hamcrest-core
+           java-cglib
+           java-junit
+           java-hawtjni))))
 
 (define-public java-jline-terminal
   (package
@@ -12572,7 +12348,7 @@ features that bring it on par with the Z shell line editor.")
                         (string-append build "/jar/" jar-name)
                         (find-files ".")))))))))
     (inputs
-     `(("ncurses" ,ncurses))); infocmp
+     (list ncurses)); infocmp
     (home-page "https://github.com/jline/jline3")
     (synopsis "Java JLine Terminal API and implementations")
     (description "JLine is a Java library for handling console input.  It is
@@ -12610,10 +12386,9 @@ This package includes the @var{Terminal} API and implementations.")
              ;; conflicts with build directory generated by ant-build-system
              (delete-file "build"))))))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-easymock" ,java-easymock)))
+     (list java-junit java-easymock))
     (inputs
-     `(("java-jline-terminal" ,java-jline-terminal)))
+     (list java-jline-terminal))
     (home-page "https://github.com/jline/jline3")
     (synopsis "Java JLine line reader")
     (description "JLine is a Java library for handling console input.  It is
@@ -12682,8 +12457,7 @@ against expected outcomes.")
        #:source-dir "xmlunit-legacy/src/main/java"
        #:test-dir "xmlunit-legacy/src/test"))
     (inputs
-     `(("java-xmlunit" ,java-xmlunit)
-       ("java-junit" ,java-junit)))
+     (list java-xmlunit java-junit))
     (native-inputs
      `(("java-mockito-1" ,java-mockito-1)))))
 
@@ -12715,8 +12489,7 @@ against expected outcomes.")
              (copy-recursively (assoc-ref inputs "resources") "test-resources")
              #t)))))
     (inputs
-     `(("java-xmlunit" ,java-xmlunit)
-       ("java-junit" ,java-junit)))))
+     (list java-xmlunit java-junit))))
 
 (define-public java-openchart2
   (package
@@ -12748,9 +12521,7 @@ against expected outcomes.")
              #t))
          (replace 'install (install-jars ".")))))
     (native-inputs
-     `(("unzip" ,unzip)
-       ("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list unzip java-junit java-hamcrest-core))
     (home-page "https://approximatrix.com/products/openchart2/")
     (synopsis "Simple plotting for Java")
     (description "Openchart2 provides a simple, yet powerful, interface for
@@ -12841,12 +12612,12 @@ authentication, HTTP state management, and HTTP connection management.")
                  "commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/hdfs"))
              #t)))))
     (inputs
-     `(("java-commons-collections4" ,java-commons-collections4)
-       ("java-commons-compress" ,java-commons-compress)
-       ("java-commons-httpclient" ,java-commons-httpclient)
-       ("java-commons-logging-minimal" ,java-commons-logging-minimal)
-       ("java-commons-net" ,java-commons-net)
-       ("java-jsch" ,java-jsch)))
+     (list java-commons-collections4
+           java-commons-compress
+           java-commons-httpclient
+           java-commons-logging-minimal
+           java-commons-net
+           java-jsch))
     (home-page "https://commons.apache.org/proper/commons-vfs/")
     (synopsis "Java file system library")
     (description "Commons VFS provides a single API for accessing various
@@ -12920,7 +12691,7 @@ from ORO, Inc.")
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "build.xml"
                ;; Since we removed the bundled ant.jar, give the correct path
-               (("lib/ant.jar") (string-append (assoc-ref inputs "ant") "/lib/ant.jar"))
+               (("lib/ant.jar") (search-input-file inputs "/lib/ant.jar"))
                ;; We removed generated native libraries. We can only rebuild one
                ;; so don't fail if we can't find a native library for another architecture.
                (("zipfileset") "zipfileset erroronmissingarchive=\"false\""))
@@ -12939,12 +12710,9 @@ from ORO, Inc.")
          (replace 'install
            (install-jars "build")))))
     (inputs
-     `(("libffi" ,libffi)
-       ("libx11" ,libx11)
-       ("libxt" ,libxt)))
+     (list libffi libx11 libxt))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list gcc-7 java-junit java-hamcrest-core))
     (home-page "https://github.com/java-native-access/jna")
     (synopsis "Access to native shared libraries from Java")
     (description "JNA provides Java programs easy access to native shared
@@ -12974,8 +12742,7 @@ Java method invocation.")
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "nbproject/project.properties"
                (("../../build/jna.jar")
-                (string-append (assoc-ref inputs "java-native-access")
-                               "/share/java/jna.jar"))
+                (search-input-file inputs "/share/java/jna.jar"))
                (("../../lib/hamcrest-core-.*.jar")
                 (car (find-files (assoc-ref inputs "java-hamcrest-core")
                                  "jar$")))
@@ -12986,7 +12753,7 @@ Java method invocation.")
          (replace 'install
            (install-jars "dist")))))
     (inputs
-     `(("java-native-access" ,java-native-access)))
+     (list java-native-access))
     (synopsis "Cross-platform mappings for jna")
     (description "java-native-access-platform has cross-platform mappings
 and mappings for a number of commonly used platform functions, including a
@@ -13026,7 +12793,7 @@ will be allowed to use these programs for authentication.")
        #:source-dir "jsch-agent-proxy-sshagent/src/main/java"
        #:tests? #f)); no tests
     (inputs
-     `(("java-jsch-agentproxy-core" ,java-jsch-agentproxy-core)))
+     (list java-jsch-agentproxy-core))
     (synopsis "Proxy to ssh-agent")
     (description "jsch-agent-proxy is a proxy program to OpenSSH's ssh-agent
 and Pageant included in Putty. This component contains the code for a proxy to
@@ -13041,8 +12808,7 @@ ssh-agent.")))
        #:source-dir "jsch-agent-proxy-usocket-jna/src/main/java"
        #:tests? #f)); no tests
     (inputs
-     `(("java-jsch-agentproxy-core" ,java-jsch-agentproxy-core)
-       ("java-native-access" ,java-native-access)))
+     (list java-jsch-agentproxy-core java-native-access))
     (synopsis "USocketFactory implementation using JNA")
     (description "jsch-agent-proxy is a proxy program to OpenSSH's ssh-agent
 and Pageant included in Putty. This component contains an implementation of
@@ -13057,9 +12823,8 @@ USocketFactory using @dfn{JNA} (Java Native Access).")))
        #:source-dir "jsch-agent-proxy-pageant/src/main/java"
        #:tests? #f)); no tests
     (inputs
-     `(("java-jsch-agentproxy-core" ,java-jsch-agentproxy-core)
-       ("java-native-access" ,java-native-access)
-       ("java-native-access-platform" ,java-native-access-platform)))
+     (list java-jsch-agentproxy-core java-native-access
+           java-native-access-platform))
     (synopsis "Proxy to pageant")
     (description "jsch-agent-proxy is a proxy program to OpenSSH's ssh-agent
 and Pageant included in Putty. This component contains the code for a proxy to
@@ -13074,7 +12839,7 @@ pageant.")))
        #:source-dir "jsch-agent-proxy-usocket-nc/src/main/java"
        #:tests? #f)); no tests
     (inputs
-     `(("java-jsch-agentproxy-core" ,java-jsch-agentproxy-core)))
+     (list java-jsch-agentproxy-core))
     (synopsis "USocketFactory implementation using netcat")
     (description "jsch-agent-proxy is a proxy program to OpenSSH's ssh-agent
 and Pageant included in Putty. This component contains an implementation of
@@ -13089,11 +12854,9 @@ USocketFactory using netcat.")))
        #:source-dir "jsch-agent-proxy-connector-factory/src/main/java"
        #:tests? #f)); no tests
     (inputs
-     `(("java-jsch-agentproxy-core" ,java-jsch-agentproxy-core)
-       ("java-jsch-agentproxy-sshagent" ,java-jsch-agentproxy-sshagent)
-       ("java-jsch-agentproxy-usocket-jna" ,java-jsch-agentproxy-usocket-jna)
-       ("java-jsch-agentproxy-pageant" ,java-jsch-agentproxy-pageant)
-       ("java-jsch-agentproxy-usocket-nc" ,java-jsch-agentproxy-usocket-nc)))
+     (list java-jsch-agentproxy-core java-jsch-agentproxy-sshagent
+           java-jsch-agentproxy-usocket-jna java-jsch-agentproxy-pageant
+           java-jsch-agentproxy-usocket-nc))
     (synopsis "Connector factory for jsch agent proxy")
     (description "jsch-agent-proxy is a proxy program to OpenSSH's ssh-agent
 and Pageant included in Putty. This component contains a connector factory.")))
@@ -13107,8 +12870,7 @@ and Pageant included in Putty. This component contains a connector factory.")))
        #:source-dir "jsch-agent-proxy-jsch/src/main/java"
        #:tests? #f)); no tests
     (inputs
-     `(("java-jsch" ,java-jsch)
-       ("java-jsch-agentproxy-core" ,java-jsch-agentproxy-core)))
+     (list java-jsch java-jsch-agentproxy-core))
     (synopsis "JSch integration library for agentproxy")
     (description "jsch-agent-proxy is a proxy program to OpenSSH's ssh-agent
 and Pageant included in Putty. This component contains a library to use
@@ -13186,18 +12948,18 @@ jsch-agent-proxy with JSch.")))
                (chmod ivy #o755)
                #t))))))
     (inputs
-     `(("java-bouncycastle" ,java-bouncycastle)
-       ("java-commons-cli" ,java-commons-cli)
-       ("java-commons-collections" ,java-commons-collections)
-       ("java-commons-httpclient" ,java-commons-httpclient)
-       ("java-commons-lang" ,java-commons-lang)
-       ("java-commons-vfs" ,java-commons-vfs)
-       ("java-jakarta-oro" ,java-jakarta-oro)
-       ("java-jsch" ,java-jsch)
-       ("java-jsch-agentproxy-core" ,java-jsch-agentproxy-core)
-       ("java-jsch-agentproxy-connector-factory" ,java-jsch-agentproxy-connector-factory)
-       ("java-jsch-agentproxy-jsch" ,java-jsch-agentproxy-jsch)
-       ("java-junit" ,java-junit)))
+     (list java-bouncycastle
+           java-commons-cli
+           java-commons-collections
+           java-commons-httpclient
+           java-commons-lang
+           java-commons-vfs
+           java-jakarta-oro
+           java-jsch
+           java-jsch-agentproxy-core
+           java-jsch-agentproxy-connector-factory
+           java-jsch-agentproxy-jsch
+           java-junit))
     (home-page "https://ant.apache.org/ivy")
     (synopsis "Dependency manager for the Java programming language")
     (description "Ivy is a tool for managing (recording, tracking, resolving
@@ -13238,20 +13000,19 @@ and reporting) project dependencies.  It is characterized by the following:
          (replace 'install
            (install-from-pom "org.eclipse.sisu.inject/pom.xml")))))
     (propagated-inputs
-     `(("java-guice" ,java-guice)
-       ("java-sisu-inject-parent-pom" ,java-sisu-inject-parent-pom)))
-    (inputs
-     `(("java-guice-servlet" ,java-guice-servlet)
-       ("java-javax-inject" ,java-javax-inject)
-       ("java-javaee-servletapi" ,java-javaee-servletapi)
-       ("java-junit" ,java-junit)
-       ("java-slf4j-api" ,java-slf4j-api)
-       ("java-jsr305" ,java-jsr305)
-       ("java-jsr250" ,java-jsr250)
-       ("java-cdi-api" ,java-cdi-api)
-       ("java-osgi-framework" ,java-osgi-framework)
-       ("java-osgi-util-tracker" ,java-osgi-util-tracker)
-       ("java-testng" ,java-testng)))
+     (list java-guice java-sisu-inject-parent-pom))
+    (inputs
+     (list java-guice-servlet
+           java-javax-inject
+           java-javaee-servletapi
+           java-junit
+           java-slf4j-api
+           java-jsr305
+           java-jsr250
+           java-cdi-api
+           java-osgi-framework
+           java-osgi-util-tracker
+           java-testng))
     (home-page "https://www.eclipse.org/sisu/")
     (synopsis "Classpath scanning, auto-binding, and dynamic auto-wiring")
     (description "Sisu is a modular JSR330-based container that supports
@@ -13341,23 +13102,23 @@ OSGi Service Registry is a goal of this project.")
          (replace 'install
            (install-from-pom "org.eclipse.sisu.plexus/pom.xml")))))
     (propagated-inputs
-     `(("java-plexus-classworlds" ,java-plexus-classworlds)
-       ("java-plexus-utils" ,java-plexus-utils)
-       ("java-plexus-component-annotations" ,java-plexus-component-annotations)
-       ("java-cdi-api" ,java-cdi-api)
-       ("java-eclipse-sisu-inject" ,java-eclipse-sisu-inject)
-       ("java-sisu-plexus-parent-pom" ,java-sisu-plexus-parent-pom)))
-    (inputs
-     `(("java-osgi-framework" ,java-osgi-framework)
-       ("java-slf4j-api" ,java-slf4j-api)
-       ("java-javax-inject" ,java-javax-inject)
-       ("java-guice" ,java-guice)
-       ("java-guava" ,java-guava)
-       ("java-aopalliance" ,java-aopalliance)
-       ("java-asm" ,java-asm)
-       ("java-cglib" ,java-cglib)))
-    (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-plexus-classworlds
+           java-plexus-utils
+           java-plexus-component-annotations
+           java-cdi-api
+           java-eclipse-sisu-inject
+           java-sisu-plexus-parent-pom))
+    (inputs
+     (list java-osgi-framework
+           java-slf4j-api
+           java-javax-inject
+           java-guice
+           java-guava
+           java-aopalliance
+           java-asm
+           java-cglib))
+    (native-inputs
+     (list java-junit))
     (home-page "https://www.eclipse.org/sisu/")
     (synopsis "Plexus support for the sisu container")
     (description "Sisu is a modular JSR330-based container that supports
@@ -13425,10 +13186,9 @@ and @code{ISimpleCompiler} interfaces.")
              (chdir "janino")
              #t)))))
     (inputs
-     `(("java-commons-compiler" ,java-commons-compiler)))
+     (list java-commons-compiler))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (description "Janino is a Java compiler.  Janino can compile a set of
 source files to a set of class files like @code{javac}, but also compile a
 Java expression, block, class body or source file in memory, load the bytecode
@@ -13526,11 +13286,10 @@ This module lays the groundwork for the other two modules.")
              (invoke "ant" "jar")
              #t)))))
     (inputs
-     `(("java-logback-core" ,java-logback-core)
-       ("java-slf4j-api" ,java-slf4j-api)
-       ,@(package-inputs java-logback-core)))
+     (modify-inputs (package-inputs java-logback-core)
+       (prepend java-logback-core java-slf4j-api)))
     (native-inputs
-     `(("groovy" ,groovy)))
+     (list groovy))
     (description "Logback is intended as a successor to the popular log4j project.
 This module can be assimilated to a significantly improved version of log4j.
 Moreover, @code{logback-classic} natively implements the slf4j API so that you
@@ -13570,10 +13329,8 @@ such as log4j or @code{java.util.logging} (JUL).")))
                       (find-files "." "\\.properties$")))
              #t)))))
     (inputs
-     `(("java-classpathx-servletapi" ,java-classpathx-servletapi)
-       ("java-javaewah" ,java-javaewah)
-       ("java-jsch" ,java-jsch)
-       ("java-slf4j-api" ,java-slf4j-api)))
+     (list java-classpathx-servletapi java-javaewah java-jsch
+           java-slf4j-api))
     (home-page "https://eclipse.org/jgit/")
     (synopsis "Java library implementing the Git version control system")
     (description "JGit is a lightweight, pure Java library implementing the
@@ -13608,9 +13365,7 @@ network protocols, and core version control algorithms.")
                  (("wordinbits") "WORD_IN_BITS"))
                #t))))))
     (inputs
-     `(("java-javaewah" ,java-javaewah)
-       ("java-jsch" ,java-jsch)
-       ("java-slf4j-api" ,java-slf4j-api)))))
+     (list java-javaewah java-jsch java-slf4j-api))))
 
 (define-public abcl
   (package
@@ -13629,7 +13384,7 @@ network protocols, and core version control algorithms.")
          "abcl-fix-build-xml.patch"))))
     (build-system ant-build-system)
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (arguments
      `(#:build-target "abcl.jar"
        #:test-target "abcl.test"
@@ -13724,7 +13479,7 @@ and allows building a Java object model for JSON text using API classes
                "build/classes")
              #t)))))
     (propagated-inputs
-     `(("java-jsonp-api" ,java-jsonp-api)))
+     (list java-jsonp-api))
     (description "JSON Processing (JSON-P) is a Java API to process (e.g.
 parse, generate, transform and query) JSON messages.  This package contains
 a reference implementation of that API.")))
@@ -13764,7 +13519,7 @@ a reference implementation of that API.")))
                (string-append (assoc-ref outputs "out") "/share/doc/java-xmp"))
              #t)))))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://www.adobe.com/devnet/xmp.html")
     (synopsis "Extensible Metadat Platform (XMP) support in Java")
     (description "Adobe's Extensible Metadata Platform (XMP) is a labeling
@@ -13821,7 +13576,7 @@ library and the API is similar.")
                                "spi/Messages_ru.properties")))
              #t)))))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://args4j.kohsuke.org/")
     (synopsis "Command line parser library")
     (description "Args4j is a small Java class library that makes it easy to
@@ -13854,10 +13609,9 @@ parse command line options/arguments in your CUI application.")
                (("/java\">") "\">"))
              #t)))))
     (propagated-inputs
-     `(("java-xmp" ,java-xmp)))
+     (list java-xmp))
     (native-inputs
-     `(("java-hamcrest-core" ,java-hamcrest-core)
-       ("java-junit" ,java-junit)))
+     (list java-hamcrest-core java-junit))
     (home-page "https://github.com/drewnoakes/metadata-extractor")
     (synopsis "Extract metadata from image and video files")
     (description "Metadata-extractor is a straightforward Java library for
@@ -13904,7 +13658,7 @@ IPTC, XMP, ICC and more formats.")
          (replace 'install
            (install-jars "dist")))))
     (native-inputs
-     `(("javacc" ,javacc)))
+     (list javacc))
     (home-page "https://github.com/blackears/svgSalamander")
     (synopsis "SVG engine for Java")
     (description "SVG Salamander is an SVG engine for Java that's designed
@@ -13933,8 +13687,7 @@ rich interactive menus to charts and graphcs to complex animations.")
        #:source-dir "src/main/java"
        #:tests? #f)); no tests
     (inputs
-     `(("java-cdi-api" ,java-cdi-api)
-       ("java-jboss-interceptors-api-spec" ,java-jboss-interceptors-api-spec)))
+     (list java-cdi-api java-jboss-interceptors-api-spec))
     (home-page "https://github.com/jboss/jboss-transaction-api_spec")
     (synopsis "Generic transaction management API in Java")
     (description "Java-jboss-transaction-api-spec implements the Transactions
@@ -14075,11 +13828,9 @@ can be interpreted by IDEs and static analysis tools to improve code analysis.")
          (replace 'install
            (install-jars "build/jar")))))
     (inputs
-     `(("java-guava" ,java-guava)
-       ("java-jboss-javassist" ,java-jboss-javassist)
-       ("java-jsonp-api" ,java-jsonp-api)))
+     (list java-guava java-jboss-javassist java-jsonp-api))
     (native-inputs
-     `(("javacc" ,javacc)))
+     (list javacc))
     (home-page "http://javaparser.org/")
     (synopsis "Parser for Java")
     (description
@@ -14163,15 +13914,14 @@ can be interpreted by IDEs and static analysis tools to improve code analysis.")
                                                       "/test-model/pcal")
                                        "\\.cfg$"))))
              (replace 'install
-               (lambda* (#:key inputs #:allow-other-keys)
-                 (let* ((share (string-append %output "/share/java"))
+               (lambda* (#:key inputs outputs #:allow-other-keys)
+                 (let* ((share (string-append (assoc-ref outputs "out") "/share/java"))
                         (jar-name "tla2tools.jar"); set in project.properties
                         (jar (string-append ,tlatools
                                             "/dist/" jar-name))
                         (java-cp (string-append share "/" jar-name))
-                        (bin (string-append %output "/bin"))
-                        (java (string-append (assoc-ref inputs "jdk")
-                                             "/bin/java")))
+                        (bin (string-append (assoc-ref outputs "out") "/bin"))
+                        (java (search-input-file inputs "/bin/java")))
                    (install-file jar share)
                    (mkdir-p bin)
                    ;; Generate wrapper scripts for bin/, which invoke common
@@ -14196,16 +13946,15 @@ can be interpreted by IDEs and static analysis tools to improve code analysis.")
                       ("tlc2" . "tlc2.TLC")
                       ("tlc2-repl" . "tlc2.REPL"))))))))))
       (native-inputs
-       `(("java-junit" ,java-junit)
-         ("java-easymock" ,java-easymock)))
+       (list java-junit java-easymock))
       (inputs
-       `(("java-javax-mail" ,java-javax-mail)
-         ("java-gson" ,java-gson-2.8.6)
-         ("java-jline-terminal" ,java-jline-terminal)
-         ("java-jline-reader" ,java-jline-reader)
-         ("java-eclipse-lsp4j-jsonrpc" ,java-eclipse-lsp4j-jsonrpc)
-         ("java-eclipse-lsp4j-jsonrpc-debug" ,java-eclipse-lsp4j-jsonrpc-debug)
-         ("java-eclipse-lsp4j-debug" ,java-eclipse-lsp4j-debug)))
+       (list java-javax-mail
+             java-gson-2.8.6
+             java-jline-terminal
+             java-jline-reader
+             java-eclipse-lsp4j-jsonrpc
+             java-eclipse-lsp4j-jsonrpc-debug
+             java-eclipse-lsp4j-debug))
       (home-page "https://lamport.azurewebsites.net/tla/tools.html")
       (synopsis "TLA+ tools (analyzer, TLC, TLATeX, PlusCal translator)")
       (description "TLA+ is a high-level language for modeling programs and
diff --git a/gnu/packages/javascript.scm b/gnu/packages/javascript.scm
index cdf9dd19fa..c453ac432a 100644
--- a/gnu/packages/javascript.scm
+++ b/gnu/packages/javascript.scm
@@ -5,6 +5,7 @@
 ;;; Copyright © 2017, 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2021 Pierre Neidhardt <mail@ambrevar.xyz>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -26,6 +27,7 @@
   #:use-module (gnu packages)
   #:use-module (gnu packages base)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages node)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages uglifyjs)
   #:use-module (gnu packages web)
@@ -80,14 +82,13 @@
          (use-modules (guix build utils))
          (chdir (assoc-ref %build-inputs "source"))
          (let ((target (string-append %output "/share/javascript/context-menu")))
-           (apply invoke (string-append (assoc-ref %build-inputs "esbuild")
-                                        "/bin/esbuild")
+           (apply invoke (search-input-file %build-inputs "/bin/esbuild")
                   "--bundle"
                   "--tsconfig=tsconfig.json"
                   (string-append "--outdir=" target)
                   (find-files "ts" "\\.ts$"))))))
     (native-inputs
-     `(("esbuild" ,esbuild)))
+     (list esbuild))
     (home-page "https://github.com/zorkow/context-menu")
     (synopsis "Generic context menu")
     (description "This package provides a reimplementation of the MathJax
@@ -188,6 +189,125 @@ plugins or software to be installed on the browser.  So the page author can
 write web documents that include mathematics and be confident that readers will
 be able to view it naturally and easily.")))
 
+(define-public js-mathjax-3
+  (package
+    (name "js-mathjax")
+    (version "3.2.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+              (url "https://github.com/mathjax/MathJax-src")
+              (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "05lm6nw7rzpcc5yz7xsjxi4id9369vvnrksx82nglxrqrpws97wx"))
+       (patches (search-patches "mathjax-disable-webpack.patch"
+                                "mathjax-no-a11y.patch"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'prepare-sources
+           (lambda* (#:key inputs #:allow-other-keys)
+             ;; All a11y components depend on speech-rule-engine, which cannot be
+             ;; built from source. Since this only affects accessibility, remove them.
+             (delete-file-recursively "ts/a11y")
+             (delete-file-recursively "components/src/a11y")
+             (delete-file-recursively "components/src/sre")
+             (delete-file-recursively "components/src/node-main")
+
+             ;; Copy sources of dependencies, so we can create symlinks.
+             (mkdir-p "node_modules")
+             (with-directory-excursion "node_modules"
+               (for-each
+                (lambda (p)
+                 (copy-recursively (assoc-ref inputs (string-append "node-" p)) p))
+                '("mj-context-menu" "mhchemparser")))
+
+             ;; Make sure esbuild can find imports. This way we don’t have to rewrite files.
+             (symlink "ts" "js")
+             (symlink "ts" "node_modules/mj-context-menu/js")))
+         (delete 'configure)
+         (replace 'build
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((esbuild (string-append (assoc-ref inputs "esbuild")
+                                           "/bin/esbuild"))
+                   (node (string-append (assoc-ref inputs "node")
+                                        "/bin/node"))
+                   (target (string-append (assoc-ref outputs "out")
+                                          "/share/javascript/mathjax/es5")))
+               ;; Preprocess files and generate lib/ subdirs.
+               (invoke node "components/bin/makeAll")
+               ;; Build components.
+               (apply
+                invoke
+                esbuild
+                "--bundle"
+                "--minify"
+                ;; esbuild cannot transpile some features to ES5, so use ES6 instead.
+                "--target=es6"
+                (string-append "--outdir=" target)
+                "--sourcemap"
+                "--outbase=components/src"
+                "--define:__dirname=\"/\""
+                ;; In the browser the global object is window, see
+                ;; https://developer.mozilla.org/en-US/docs/Glossary/Global_object
+                "--define:global=window"
+                ;; Find all component entry points, which have the same name as their
+                ;; parent directory.
+                (filter
+                 (lambda (f)
+                     (string=?
+                       (basename (dirname f))
+                       (string-drop-right (basename f) 3)))
+                 (find-files "components/src" "\\.js$")))
+               ;; Move all .js files into their parent directory, where MathJax
+               ;; expects them.
+               (for-each
+                 (lambda (f)
+                     (rename-file f (string-append (dirname (dirname f)) "/" (basename f))))
+                 (find-files target "\\.js(\\.map)?$"))
+               ;; Copy font files.
+               (copy-recursively
+                 "ts/output/chtml/fonts/tex-woff-v2"
+                 (string-append target "/output/chtml/fonts/woff-v2")))))
+         (delete 'check)
+         (delete 'install))))
+    (native-inputs
+     `(("esbuild" ,esbuild)
+       ("node" ,node-lts)
+       ("node-mj-context-menu"
+        ,(let ((name "context-menu")
+               (version "0.6.1"))
+           (origin
+             (method git-fetch)
+             (uri (git-reference
+                    (url "https://github.com/zorkow/context-menu.git")
+                    (commit (string-append "v" version))))
+             (file-name (git-file-name name version))
+             (sha256
+              (base32
+               "1q063l6477z285j6h5wvccp6iswvlp0jmb96sgk32sh0lf7nhknh")))))
+       ("node-mhchemparser"
+        ,(let ((name "mhchemparser")
+               ;; Version 4.1.1. There are no tags.
+               (version "b1bd0670df7e9bbd5a724ac642aa2664d6e500b3"))
+           (origin
+             (method git-fetch)
+             (uri (git-reference
+                    (url "https://github.com/mhchem/mhchemParser.git")
+                    (commit version)))
+             (file-name (git-file-name name version))
+             (sha256
+              (base32
+               "1g72kbxzf9f2igidpma3jwk28ln4bp3qhwspmhnm79baf3701dgv")))))))
+    (home-page "https://www.mathjax.org/")
+    (synopsis (package-synopsis js-mathjax))
+    (description (package-description js-mathjax))
+    (license license:asl2.0)))
+
 (define-public js-commander
   (package
     (name "js-commander")
@@ -209,8 +329,7 @@ be able to view it naturally and easily.")))
        (begin
          (use-modules (guix build utils))
          (chdir (assoc-ref %build-inputs "source"))
-         (let ((esbuild (string-append (assoc-ref %build-inputs "esbuild")
-                                       "/bin/esbuild"))
+         (let ((esbuild (search-input-file %build-inputs "/bin/esbuild"))
                (target (string-append %output "/share/javascript/commander")))
            (invoke esbuild
                    "--bundle"
@@ -220,11 +339,11 @@ be able to view it naturally and easily.")))
                    (string-append "--outfile=" target "/index.min.js")
                    "index.js")))))
     (native-inputs
-     `(("esbuild" ,esbuild)))
+     (list esbuild))
     (home-page "https://github.com/tj/commander.js")
     (synopsis "Library for node.js command-line interfaces")
     (description "Commander.js aims to be the complete solution for node.js
-command-line interfaces.  ")
+command-line interfaces.")
     (license license:expat)))
 
 (define-public js-xmldom-sre
@@ -251,8 +370,7 @@ command-line interfaces.  ")
          (begin
            (use-modules (guix build utils))
            (chdir (assoc-ref %build-inputs "source"))
-           (let ((esbuild (string-append (assoc-ref %build-inputs "esbuild")
-                                         "/bin/esbuild"))
+           (let ((esbuild (search-input-file %build-inputs "/bin/esbuild"))
                  (target (string-append %output "/share/javascript/xmldom-sre")))
              (invoke esbuild
                      "--bundle"
@@ -261,7 +379,7 @@ command-line interfaces.  ")
                      (string-append "--outfile=" target "/dom-parser.min.js")
                      "dom-parser.js")))))
       (native-inputs
-       `(("esbuild" ,esbuild)))
+       (list esbuild))
       (home-page "https://github.com/zorkow/xmldom/")
       (synopsis "DOM parser and XML serializer")
       (description "This is a fork of the xmldom library.  It allows the use
@@ -430,7 +548,7 @@ detection.")
      `(#:javascript-files '("media/js/dataTables.bootstrap.js"
                             "media/js/jquery.dataTables.js")))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://datatables.net")
     (synopsis "DataTables plug-in for jQuery")
     (description "DataTables is a table enhancing plug-in for the jQuery
@@ -556,7 +674,7 @@ external server.")
 (define-public mujs
   (package
     (name "mujs")
-    (version "1.1.1")
+    (version "1.1.3")
     (source
      (origin
        (method git-fetch)
@@ -565,7 +683,7 @@ external server.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0ivqz06fq8v36p2gkjh64vgv0gm7nghds0n42vrv7vm46phdffvb"))))
+        (base32 "0qizld89qw24i9v6i2j9cxjyqn425xbiqfp1b7qfrkyxqkn0byws"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -580,7 +698,7 @@ external server.")
              (string-append "prefix=" (assoc-ref %outputs "out")))
        #:tests? #f))                    ; no tests
     (inputs
-     `(("readline" ,readline)))
+     (list readline))
     (home-page "https://mujs.com/")
     (synopsis "JavaScript interpreter written in C")
     (description "MuJS is a lightweight Javascript interpreter designed for
@@ -637,12 +755,31 @@ Javascript and a small built-in standard library with C library wrappers.")
                 "19szwxzvl2g65fw95ggvb8h0ma5bd9vvnnccn59hwnc4dida1x4n"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:tests? #f                      ; No tests.
+     `(#:tests? #f                      ; No tests.
        #:make-flags (list "-f" "Makefile.sharedlibrary"
                           (string-append "INSTALL_PREFIX=" %output))
        #:phases
        (modify-phases %standard-phases
-         (delete 'configure))))
+         (delete 'configure)
+         ;; At least another major GNU/Linux distribution carries their own
+         ;; .pc file with this package.
+         (add-after 'install 'install-pkg-config
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (pkg-config-dir (string-append out "/lib/pkgconfig")))
+               (mkdir-p pkg-config-dir)
+               (with-output-to-file (string-append pkg-config-dir "/duktape.pc")
+                 (lambda _
+                   (format #t "prefix=~@*~a~@
+                               libdir=${prefix}/lib~@
+                               includedir=${prefix}/include~@
+
+                               Name: duktape~@
+                               Description: Embeddable Javascript engine~@
+                               Version: ~a~@
+                               Libs: -L${libdir} -lduktape~@
+                               Cflags: -I${includedir}~%"
+                           out ,version)))))))))
     (home-page "https://duktape.org/")
     (synopsis "Small embeddable Javascript engine")
     (description "Duktape is an embeddable Javascript engine, with a focus on
diff --git a/gnu/packages/jemalloc.scm b/gnu/packages/jemalloc.scm
index c4b87b540d..2e25780257 100644
--- a/gnu/packages/jemalloc.scm
+++ b/gnu/packages/jemalloc.scm
@@ -1,7 +1,8 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
-;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2017, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Eric Bavier <bavier@member.fsf.org>
+;;; Copyright © 2021 Ryan Sundberg <ryan@arctype.co>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -21,6 +22,7 @@
 (define-module (gnu packages jemalloc)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-26)
+  #:use-module (ice-9 match)
   #:use-module ((guix licenses) #:select (bsd-2))
   #:use-module (guix packages)
   #:use-module (guix download)
@@ -29,10 +31,10 @@
   #:use-module (gnu packages perl)
   #:use-module (guix build-system gnu))
 
-(define-public jemalloc
+(define-public jemalloc-4.5.0
   (package
     (name "jemalloc")
-    (version "5.2.1")
+    (version "4.5.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -40,7 +42,7 @@
                     version "/jemalloc-" version ".tar.bz2"))
               (sha256
                (base32
-                "1xl7z0vwbn5iycg7amka9jd6hxd8nmfk7nahi4p9w2bnw9f0wcrl"))))
+                "10373xhpc10pgmai9fkc1z0rs029qlcb3c0qfnvkbwdlcibdh2cl"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -52,13 +54,14 @@
              (substitute* "Makefile.in"
                (("\\$\\(srcroot\\)test/unit/pages.c \\\\") "\\"))
              #t)))
-       ,@(if (any (cute string-prefix? <> (or (%current-target-system)
-                                              (%current-system)))
-                 '("x64_64" "i686"))
-           ;; Transparent huge pages are only enabled by default on Intel processors
-           '()
-           '(#:configure-flags (list "--disable-thp")))))
-    (inputs `(("perl" ,perl)))
+       #:configure-flags
+       '(,@(match (%current-system)
+             ((or "i686-linux" "x86_64-linux")
+              '())
+             ("powerpc-linux"
+              (list "--disable-thp" "CPPFLAGS=-maltivec"))
+             (_
+              (list "--disable-thp"))))))
     ;; Install the scripts to a separate output to avoid referencing Perl and
     ;; Bash in the default output, saving ~75 MiB on the closure.
     (outputs '("out" "bin"))
@@ -69,10 +72,10 @@
 fragmentation avoidance and scalable concurrency support.")
     (license bsd-2)))
 
-(define-public jemalloc-4.5.0
+(define-public jemalloc
   (package
-    (inherit jemalloc)
-    (version "4.5.0")
+    (inherit jemalloc-4.5.0)
+    (version "5.2.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -80,5 +83,12 @@ fragmentation avoidance and scalable concurrency support.")
                     version "/jemalloc-" version ".tar.bz2"))
               (sha256
                (base32
-                "10373xhpc10pgmai9fkc1z0rs029qlcb3c0qfnvkbwdlcibdh2cl"))))
-    (inputs '())))
+                "1xl7z0vwbn5iycg7amka9jd6hxd8nmfk7nahi4p9w2bnw9f0wcrl"))))
+    (arguments
+      (substitute-keyword-arguments (package-arguments jemalloc-4.5.0)
+        ;; Disable the thread local storage model in jemalloc 5 to prevent
+        ;; shared libraries linked to libjemalloc from crashing on dlopen()
+        ;; https://github.com/jemalloc/jemalloc/issues/937
+        ((#:configure-flags base-configure-flags '())
+         `(cons "--disable-initial-exec-tls" ,base-configure-flags))))
+    (inputs (list perl))))
diff --git a/gnu/packages/jose.scm b/gnu/packages/jose.scm
index 3ac7921315..9e0787bce7 100644
--- a/gnu/packages/jose.scm
+++ b/gnu/packages/jose.scm
@@ -41,10 +41,8 @@
                (base32
                 "09c2kn9cjqkgx4g0rf6c2k3ng9970r468c9z7067j8kyf7ksywp2"))))
     (build-system meson-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("jansson" ,jansson)
-              ("zlib" ,zlib)
-              ("libcrypto" ,openssl)))
+    (native-inputs (list pkg-config))
+    (inputs (list jansson zlib openssl))
     (home-page "https://github.com/latchset/jose")
     (synopsis "Object Signing and Encryption")
     (description "C-language implementation of Javascript Object Signing and
diff --git a/gnu/packages/jrnl.scm b/gnu/packages/jrnl.scm
index 85d3863e05..45f9dab148 100644
--- a/gnu/packages/jrnl.scm
+++ b/gnu/packages/jrnl.scm
@@ -45,16 +45,16 @@
         (base32 "1bjjyfc3fnsy0h299s3jj42wnigj43xdyp5ppi1cvkqbwl369935"))))
     (build-system python-build-system)
     (native-inputs
-     `(("behave" ,behave)))
+     (list behave))
     (inputs
-     `(("python" ,python)
-       ("python-keyring" ,python-keyring)
-       ("python-pycrypto" ,python-pycrypto)
-       ("python-pytz" ,python-pytz)
-       ("python-tzlocal" ,python-tzlocal)
-       ("python-six" ,python-six)
-       ("python-dateutil" ,python-dateutil)
-       ("python-parsedatetime" ,python-parsedatetime)))
+     (list python
+           python-keyring
+           python-pycrypto
+           python-pytz
+           python-tzlocal
+           python-six
+           python-dateutil
+           python-parsedatetime))
     (home-page "https://maebert.github.io/jrnl/")
     (synopsis "Personal journal application")
     (description
diff --git a/gnu/packages/julia-jll.scm b/gnu/packages/julia-jll.scm
index d3677d0a33..594c36b6ce 100644
--- a/gnu/packages/julia-jll.scm
+++ b/gnu/packages/julia-jll.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2021 Nicolò Balzarotti <nicolo@nixo.xyz>
 ;;; Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
 ;;; Copyright © 2021 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2021 Jean-Baptiste Volatier <jbv@pm.me>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -36,6 +37,7 @@
   #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnupg)
+  #:use-module (gnu packages graphics)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages image)
   #:use-module (gnu packages imagemagick)
@@ -76,7 +78,7 @@
      '(#:tests? #f                      ; No runtests.jl
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
               (lambda (wrapper)
@@ -89,9 +91,9 @@
               (find-files "src/wrappers/" "\\.jl$"))
              #t)))))
     (inputs
-     `(("bzip2" ,bzip2)))
+     (list bzip2))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/Bzip2_jll.jl")
     (synopsis "Bzip2 binary wrappers")
     (description "This Julia module provides a wrapper for the @code{Bzip2}
@@ -116,7 +118,7 @@ compression program.")
      '(#:tests? #f  ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -126,19 +128,19 @@ compression program.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("cairo" ,cairo)))
-    (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-bzip2-jll" ,julia-bzip2-jll)
-       ("julia-fontconfig-jll" ,julia-fontconfig-jll)
-       ("julia-freetype2-jll" ,julia-freetype2-jll)
-       ("julia-glib-jll" ,julia-glib-jll)
-       ("julia-libpng-jll" ,julia-libpng-jll)
-       ("julia-lzo-jll" ,julia-lzo-jll)
-       ("julia-pixman-jll" ,julia-pixman-jll)
-       ("julia-xorg-libxext-jll" ,julia-xorg-libxext-jll)
-       ("julia-xorg-libxrender-jll" ,julia-xorg-libxrender-jll)
-       ("julia-zlib-jll" ,julia-zlib-jll)))
+     (list cairo))
+    (propagated-inputs
+     (list julia-jllwrappers
+           julia-bzip2-jll
+           julia-fontconfig-jll
+           julia-freetype2-jll
+           julia-glib-jll
+           julia-libpng-jll
+           julia-lzo-jll
+           julia-pixman-jll
+           julia-xorg-libxext-jll
+           julia-xorg-libxrender-jll
+           julia-zlib-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Cairo_jll.jl")
     (synopsis "Cairo library wrappers")
     (description "This package provides a wrapper for the cairo library.")
@@ -162,7 +164,7 @@ compression program.")
      `(#:tests? #f                      ; no runtests.jl
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
               (lambda (wrapper)
@@ -177,7 +179,7 @@ compression program.")
     (inputs                             ;required by artifacts
      `(("gfortran:lib" ,gfortran "lib")))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/CompilerSupportLibraries_jll.jl")
     (synopsis "Internal wrappers")
     (description "This package provides compiler support for libraries.  It is
@@ -204,7 +206,7 @@ build tree Yggdrasil.")
      '(#:tests? #f  ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -216,9 +218,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("expat" ,expat)))
+     (list expat))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/Expat_jll.jl")
     (synopsis "Expat library wrappers")
     (description "This package provides a wrapper for the expat library.")
@@ -242,7 +244,7 @@ build tree Yggdrasil.")
      '(#:tests? #f ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -252,22 +254,22 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("ffmpeg" ,ffmpeg)))
-    (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-bzip2-jll" ,julia-bzip2-jll)
-       ("julia-freetype2-jll" ,julia-freetype2-jll)
-       ("julia-fribidi-jll" ,julia-fribidi-jll)
-       ("julia-lame-jll" ,julia-lame-jll)
-       ("julia-libass-jll" ,julia-libass-jll)
-       ("julia-libfdk-aac-jll" ,julia-libfdk-aac-jll)
-       ("julia-libvorbis-jll" ,julia-libvorbis-jll)
-       ("julia-openssl-jll" ,julia-openssl-jll)
-       ("julia-opus-jll" ,julia-opus-jll)
-       ("julia-ogg-jll" ,julia-ogg-jll)
-       ("julia-x264-jll" ,julia-x264-jll)
-       ("julia-x265-jll" ,julia-x265-jll)
-       ("julia-zlib-jll" ,julia-zlib-jll)))
+     (list ffmpeg))
+    (propagated-inputs
+     (list julia-jllwrappers
+           julia-bzip2-jll
+           julia-freetype2-jll
+           julia-fribidi-jll
+           julia-lame-jll
+           julia-libass-jll
+           julia-libfdk-aac-jll
+           julia-libvorbis-jll
+           julia-openssl-jll
+           julia-opus-jll
+           julia-ogg-jll
+           julia-x264-jll
+           julia-x265-jll
+           julia-zlib-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/FFMPEG_jll.jl")
     (synopsis "ffmpeg library wrappers")
     (description "This package provides a wrapper for ffmpeg.")
@@ -291,7 +293,7 @@ build tree Yggdrasil.")
      '(#:tests? #f  ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -305,12 +307,12 @@ build tree Yggdrasil.")
     (inputs
      `(("fontconfig" ,fontconfig)))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-bzip2-jll" ,julia-bzip2-jll)
-       ("julia-expat-jll" ,julia-expat-jll)
-       ("julia-freetype2-jll" ,julia-freetype2-jll)
-       ("julia-libuuid-jll" ,julia-libuuid-jll)
-       ("julia-zlib-jll" ,julia-zlib-jll)))
+     (list julia-jllwrappers
+           julia-bzip2-jll
+           julia-expat-jll
+           julia-freetype2-jll
+           julia-libuuid-jll
+           julia-zlib-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Fontconfig_jll.jl")
     (synopsis "Fontconfig library wrappers")
     (description "This package provides a wrapper for the fontconfig library.")
@@ -334,7 +336,7 @@ build tree Yggdrasil.")
      '(#:tests? #f                      ; No runtests.jl
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
               (lambda (wrapper)
@@ -347,11 +349,9 @@ build tree Yggdrasil.")
               (find-files "src/wrappers/" "\\.jl$"))
              #t)))))
     (inputs
-     `(("freetype" ,freetype)))
+     (list freetype))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-bzip2-jll" ,julia-bzip2-jll)
-       ("julia-zlib-jll" ,julia-zlib-jll)))
+     (list julia-jllwrappers julia-bzip2-jll julia-zlib-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/FreeType2_jll.jl")
     (synopsis "Freetype2 binary wrappers")
     (description "This Julia module provides a wrapper for the freetype font
@@ -376,7 +376,7 @@ rendering library.")
      '(#:tests? #f ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -386,9 +386,9 @@ rendering library.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("fribidi" ,fribidi)))
+     (list fribidi))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/FriBidi_jll.jl")
     (synopsis "Fribidi library wrappers")
     (description "This package provides a wrapper for the fribidi library.")
@@ -412,7 +412,7 @@ rendering library.")
      '(#:tests? #f  ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -426,10 +426,8 @@ rendering library.")
     (inputs
      `(("gettext" ,gettext-minimal)))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-compilersupportlibraries-jll" ,julia-compilersupportlibraries-jll)
-       ("julia-libiconv-jll" ,julia-libiconv-jll)
-       ("julia-xml2-jll" ,julia-xml2-jll)))
+     (list julia-jllwrappers julia-compilersupportlibraries-jll
+           julia-libiconv-jll julia-xml2-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Gettext_jll.jl")
     (synopsis "Gettext library wrappers")
     (description "This package provides a wrapper for the gettext library.")
@@ -453,7 +451,7 @@ rendering library.")
      '(#:tests? #f  ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -465,14 +463,14 @@ rendering library.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("glfw" ,glfw)))
-    (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-libglvnd-jll" ,julia-libglvnd-jll)
-       ("julia-xorg-libxcursor-jll" ,julia-xorg-libxcursor-jll)
-       ("julia-xorg-libxinerama-jll" ,julia-xorg-libxinerama-jll)
-       ("julia-xorg-libxrandr-jll" ,julia-xorg-libxrandr-jll)
-       ("julia-xorg-libxi-jll" ,julia-xorg-libxi-jll)))
+     (list glfw))
+    (propagated-inputs
+     (list julia-jllwrappers
+           julia-libglvnd-jll
+           julia-xorg-libxcursor-jll
+           julia-xorg-libxinerama-jll
+           julia-xorg-libxrandr-jll
+           julia-xorg-libxi-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/GLFW_jll.jl")
     (synopsis "Glfw library wrappers")
     (description "This package provides a wrapper for the glfw library.")
@@ -496,7 +494,7 @@ rendering library.")
      '(#:tests? #f  ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -508,20 +506,69 @@ rendering library.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("glib" ,glib)))
-    (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-gettext-jll" ,julia-gettext-jll)
-       ("julia-libffi-jll" ,julia-libffi-jll)
-       ("julia-libiconv-jll" ,julia-libiconv-jll)
-       ("julia-libmount-jll" ,julia-libmount-jll)
-       ("julia-pcre-jll" ,julia-pcre-jll)
-       ("julia-zlib-jll" ,julia-zlib-jll)))
+     (list glib))
+    (propagated-inputs
+     (list julia-jllwrappers
+           julia-gettext-jll
+           julia-libffi-jll
+           julia-libiconv-jll
+           julia-libmount-jll
+           julia-pcre-jll
+           julia-zlib-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Glib_jll.jl")
     (synopsis "Glib library wrappers")
     (description "This package provides a wrapper for the glib library.")
     (license license:expat)))
 
+(define-public julia-gr-jll
+  (package
+    (name "julia-gr-jll")
+    (version "0.58.1+0")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/JuliaBinaryWrappers/GR_jll.jl")
+               (commit (string-append "GR-v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "16m22n0wh86v3lh0im2pc9bg381djbmqji5hjx42j6aaz634gqiq"))))
+    (build-system julia-build-system)
+    (arguments
+     '(#:tests? #f  ; no runtests
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'link-depot 'override-binary-path
+           (lambda* (#:key inputs #:allow-other-keys)
+             (map
+               (lambda (wrapper)
+                 (substitute* wrapper
+                   (("generate_wrapper_header.*")
+                    (string-append
+                      "generate_wrapper_header(\"GR\", \""
+                      (assoc-ref inputs "gr-framework") "\")\n"))))
+               ;; There's a Julia file for each platform, override them all
+               (find-files "src/wrappers/" "\\.jl$")))))))
+    (inputs
+     (list gr-framework))
+    (propagated-inputs
+     (list julia-jllwrappers
+           julia-bzip2-jll
+           julia-cairo-jll
+           julia-ffmpeg-jll
+           julia-fontconfig-jll
+           julia-glfw-jll
+           julia-jpegturbo-jll
+           julia-libpng-jll
+           julia-libtiff-jll
+           julia-pixman-jll
+           julia-qt5base-jll
+           julia-zlib-jll))
+    (home-page "https://github.com/JuliaBinaryWrappers/GR_jll.jl")
+    (synopsis "GR framework library wrappers")
+    (description "This package provides a wrapper for the GR framework.")
+    (license license:expat)))
+
 (define-public julia-gumbo-jll
   (package
     (name "julia-gumbo-jll")
@@ -540,7 +587,7 @@ rendering library.")
      '(#:tests? #f ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (let ((gumbo (string-append (assoc-ref inputs "gumbo-parser"))))
                (for-each
@@ -553,9 +600,9 @@ rendering library.")
                 ;; There's a Julia file for each platform, override them all
                 (find-files "src/wrappers/" "\\.jl$"))))))))
     (inputs
-     `(("gumbo-parser" ,gumbo-parser)))
+     (list gumbo-parser))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/Gumbo_jll.jl")
     (synopsis "Gumbo HTML parsing library wrappers")
     (description "This package provides a wrapper for Gumbo HTML parsing library.")
@@ -580,7 +627,7 @@ rendering library.")
      '(#:tests? #f ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -592,13 +639,10 @@ rendering library.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-jpegturbo-jll" ,julia-jpegturbo-jll)
-       ("julia-libpng-jll" ,julia-libpng-jll)
-       ("julia-libtiff-jll" ,julia-libtiff-jll)
-       ("julia-zlib-jll" ,julia-zlib-jll)))
+     (list julia-jllwrappers julia-jpegturbo-jll julia-libpng-jll
+           julia-libtiff-jll julia-zlib-jll))
     (inputs
-     `(("imagemagick" ,imagemagick)))
+     (list imagemagick))
     (home-page "https://github.com/JuliaBinaryWrappers/ImageMagick_jll.jl")
     (synopsis "Imagemagick library wrappers")
     (description "This package provides a wrapper for Imagemagick.")
@@ -622,7 +666,7 @@ rendering library.")
      '(#:tests? #f
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'custom-override-path
+         (add-after 'link-depot 'custom-override-path
            (lambda* (#:key inputs #:allow-other-keys)
              ;; Make @generate_wrapper_header take an optional argument that
              ;; guix packagers can pass to override the default "override"
@@ -641,7 +685,7 @@ rendering library.")
              #t)))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-preferences" ,julia-preferences)))
+     (list julia-preferences))
     (home-page "https://github.com/JuliaPackaging/JLLWrappers.jl")
     (synopsis "Julia macros used by JLL packages")
     (description "This package contains Julia macros that enable JLL packages
@@ -668,7 +712,7 @@ used in autogenerated packages via @code{BinaryBuilder.jl}.")
      '(#:tests? #f  ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -678,9 +722,9 @@ used in autogenerated packages via @code{BinaryBuilder.jl}.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libjpeg-turbo" ,libjpeg-turbo)))
+     (list libjpeg-turbo))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/JpegTurbo_jll.jl")
     (synopsis "Libjpeg-turbo library wrappers")
     (description "This package provides a wrapper for the libjpeg-turbo library.")
@@ -704,7 +748,7 @@ used in autogenerated packages via @code{BinaryBuilder.jl}.")
      '(#:tests? #f ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -714,9 +758,9 @@ used in autogenerated packages via @code{BinaryBuilder.jl}.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("lame" ,lame)))
+     (list lame))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/LAME_jll.jl")
     (synopsis "Lame library wrappers")
     (description "This package provides a wrapper for the lame audio encoder.")
@@ -740,7 +784,7 @@ used in autogenerated packages via @code{BinaryBuilder.jl}.")
      '(#:tests? #f ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -750,13 +794,10 @@ used in autogenerated packages via @code{BinaryBuilder.jl}.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libass" ,libass)))
+     (list libass))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-bzip2-jll" ,julia-bzip2-jll)
-       ("julia-freetype2-jll" ,julia-freetype2-jll)
-       ("julia-fribidi-jll" ,julia-fribidi-jll)
-       ("julia-zlib-jll" ,julia-zlib-jll)))
+     (list julia-jllwrappers julia-bzip2-jll julia-freetype2-jll
+           julia-fribidi-jll julia-zlib-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/libass_jll.jl")
     (synopsis "Libass library wrappers")
     (description "This package provides a wrapper for libass.")
@@ -780,7 +821,7 @@ used in autogenerated packages via @code{BinaryBuilder.jl}.")
      '(#:tests? #f ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -790,9 +831,9 @@ used in autogenerated packages via @code{BinaryBuilder.jl}.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libfdk" ,libfdk)))
+     (list libfdk))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/libfdk_aac_jll.jl")
     (synopsis "FDK library wrappers")
     (description "This package provides a wrapper for the libfdk audio library.")
@@ -816,7 +857,7 @@ used in autogenerated packages via @code{BinaryBuilder.jl}.")
      '(#:tests? #f  ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -827,9 +868,9 @@ used in autogenerated packages via @code{BinaryBuilder.jl}.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libffi" ,libffi)))
+     (list libffi))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/Libffi_jll.jl")
     (synopsis "Libffi library wrappers")
     (description "This package provides a wrapper for the libffi library.")
@@ -853,7 +894,7 @@ used in autogenerated packages via @code{BinaryBuilder.jl}.")
      '(#:tests? #f  ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -865,10 +906,9 @@ used in autogenerated packages via @code{BinaryBuilder.jl}.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libgcrypt" ,libgcrypt)))
+     (list libgcrypt))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-libgpg-error-jll" ,julia-libgpg-error-jll)))
+     (list julia-jllwrappers julia-libgpg-error-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Libgcrypt_jll.jl")
     (synopsis "libgcrypt library wrappers")
     (description "This package provides a wrapper for the libgcrypt library.")
@@ -892,7 +932,7 @@ used in autogenerated packages via @code{BinaryBuilder.jl}.")
      '(#:tests? #f  ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -902,11 +942,9 @@ used in autogenerated packages via @code{BinaryBuilder.jl}.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libglvnd" ,libglvnd)))
+     (list libglvnd))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-xorg-libx11-jll" ,julia-xorg-libx11-jll)
-       ("julia-xorg-libxext-jll" ,julia-xorg-libxext-jll)))
+     (list julia-jllwrappers julia-xorg-libx11-jll julia-xorg-libxext-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Libglvnd_jll.jl")
     (synopsis "Libglvnd library wrappers")
     (description "This package provides a wrapper for the libglvnd library.")
@@ -930,7 +968,7 @@ used in autogenerated packages via @code{BinaryBuilder.jl}.")
      '(#:tests? #f  ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -942,9 +980,9 @@ used in autogenerated packages via @code{BinaryBuilder.jl}.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libgpg-error" ,libgpg-error)))
+     (list libgpg-error))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/Libgpg_error_jll.jl")
     (synopsis "libgpg-error library wrappers")
     (description "This package provides a wrapper for the libgpg-error library.")
@@ -968,7 +1006,7 @@ used in autogenerated packages via @code{BinaryBuilder.jl}.")
      '(#:tests? #f  ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -980,9 +1018,9 @@ used in autogenerated packages via @code{BinaryBuilder.jl}.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libiconv" ,libiconv)))
+     (list libiconv))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/Libiconv_jll.jl")
     (synopsis "Libiconv library wrappers")
     (description "This package provides a wrapper for the libiconv library.")
@@ -1006,7 +1044,7 @@ used in autogenerated packages via @code{BinaryBuilder.jl}.")
      '(#:tests? #f  ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -1018,9 +1056,9 @@ used in autogenerated packages via @code{BinaryBuilder.jl}.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("util-linux" ,util-linux "lib")))
+     (list `(,util-linux "lib")))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/Libmount_jll.jl")
     (synopsis "Libmount library wrappers")
     (description "This package provides a wrapper for the libmount library
@@ -1045,7 +1083,7 @@ from util-linux.")
      '(#:tests? #f  ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -1055,10 +1093,9 @@ from util-linux.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libpng" ,libpng)))
+     (list libpng))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-zlib-jll" ,julia-zlib-jll)))
+     (list julia-jllwrappers julia-zlib-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/LibPNG_jll.jl")
     (synopsis "Libpng library wrappers")
     (description "This package provides a wrapper for the libpng library.")
@@ -1083,7 +1120,7 @@ from util-linux.")
        `(#:tests? #f                      ; no runtests.jl
          #:phases
          (modify-phases %standard-phases
-           (add-after 'unpack 'override-binary-path
+           (add-after 'link-depot 'override-binary-path
              (lambda* (#:key inputs #:allow-other-keys)
                (map
                 (lambda (wrapper)
@@ -1096,9 +1133,9 @@ from util-linux.")
                 (find-files "src/wrappers/" "\\.jl$"))
                #t)))))
       (inputs
-       `(("libsass" ,libsass)))
+       (list libsass))
       (propagated-inputs
-       `(("julia-jllwrappers" ,julia-jllwrappers)))
+       (list julia-jllwrappers))
       (home-page "https://github.com/JuliaBinaryWrappers/libsass_jll.jl")
       (synopsis "Julia wrapper for libsass")
       (description "This package provides a wrapper for libsass.  It is an
@@ -1125,7 +1162,7 @@ build tree Yggdrasil.")
      '(#:tests? #f  ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -1135,12 +1172,10 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libtiff" ,libtiff)))
+     (list libtiff))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-jpegturbo-jll" ,julia-jpegturbo-jll)
-       ("julia-zlib-jll" ,julia-zlib-jll)
-       ("julia-zstd-jll" ,julia-zstd-jll)))
+     (list julia-jllwrappers julia-jpegturbo-jll julia-zlib-jll
+           julia-zstd-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Libtiff_jll.jl")
     (synopsis "Libtiff library wrappers")
     (description "This package provides a wrapper for libtiff")
@@ -1164,7 +1199,7 @@ build tree Yggdrasil.")
      '(#:tests? #f  ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -1176,9 +1211,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("util-linux" ,util-linux "lib")))
+     (list `(,util-linux "lib")))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/Libmount_jll.jl")
     (synopsis "Libuuid library wrappers")
     (description "This package provides a wrapper for the libuuid library from util-linux.")
@@ -1202,7 +1237,7 @@ build tree Yggdrasil.")
      '(#:tests? #f ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -1212,10 +1247,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libvorbis" ,libvorbis)))
+     (list libvorbis))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-ogg-jll" ,julia-ogg-jll)))
+     (list julia-jllwrappers julia-ogg-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/libvorbis_jll.jl")
     (synopsis "Libvorbis library wrappers")
     (description
@@ -1240,7 +1274,7 @@ build tree Yggdrasil.")
      '(#:tests? #f  ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -1252,9 +1286,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("lzo" ,lzo)))
+     (list lzo))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/LZO_jll.jl")
     (synopsis "LZO library wrappers")
     (description "This package provides a wrapper for the lzo library.")
@@ -1278,7 +1312,7 @@ build tree Yggdrasil.")
      '(#:tests? #f                      ; No runtests.jl
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
               (lambda (wrapper)
@@ -1290,8 +1324,8 @@ build tree Yggdrasil.")
               ;; There's a Julia file for each platform, override them all
               (find-files "src/wrappers/" "\\.jl$"))
              #t)))))
-    (inputs `(("mbedtls-apache" ,mbedtls-apache)))
-    (propagated-inputs `(("julia-jllwrappers" ,julia-jllwrappers)))
+    (inputs (list mbedtls-apache))
+    (propagated-inputs (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/MbedTLS_jll.jl")
     (synopsis "Apache's mbed TLS binary wrappers")
     (description "This Julia module provides @code{mbed TLS} libraries and
@@ -1316,7 +1350,7 @@ wrappers.")
      '(#:tests? #f ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -1326,9 +1360,9 @@ wrappers.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libogg" ,libogg)))
+     (list libogg))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/Ogg_jll.jl")
     (synopsis "Libogg library wrappers")
     (description "This package provides a wrapper for the libogg library.")
@@ -1353,7 +1387,7 @@ wrappers.")
        `(#:tests? #f                      ; no runtests.jl
          #:phases
          (modify-phases %standard-phases
-           (add-after 'unpack 'override-binary-path
+           (add-after 'link-depot 'override-binary-path
              (lambda* (#:key inputs #:allow-other-keys)
                (map
                 (lambda (wrapper)
@@ -1366,10 +1400,9 @@ wrappers.")
                 (find-files "src/wrappers/" "\\.jl$"))
                #t)))))
       (inputs
-       `(("openspecfun" ,openspecfun)))
+       (list openspecfun))
       (propagated-inputs
-       `(("julia-jllwrappers" ,julia-jllwrappers)
-         ("julia-compilersupportlibraries-jll" ,julia-compilersupportlibraries-jll)))
+       (list julia-jllwrappers 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
@@ -1396,7 +1429,7 @@ build tree Yggdrasil.")
      '(#:tests? #f ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -1406,9 +1439,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/OpenSSL_jll.jl")
     (synopsis "Openssl library wrappers")
     (description "This package provides a wrapper for the openssl library.")
@@ -1432,7 +1465,7 @@ build tree Yggdrasil.")
      '(#:tests? #f ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -1442,9 +1475,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("opus" ,opus)))
+     (list opus))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/Opus_jll.jl")
     (synopsis "Opus library wrappers")
     (description "This package provides a wrapper for the opus audio library.")
@@ -1468,7 +1501,7 @@ build tree Yggdrasil.")
      '(#:tests? #f  ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -1480,9 +1513,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("pcre" ,pcre)))
+     (list pcre))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/PCRE_jll.jl")
     (synopsis "PCRE library wrappers")
     (description "This package provides a wrapper for the pcre library.")
@@ -1506,7 +1539,7 @@ build tree Yggdrasil.")
      '(#:tests? #f  ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -1518,9 +1551,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("pixman" ,pixman)))
+     (list pixman))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/Pixman_jll.jl")
     (synopsis "Pixman library wrappers")
     (description "This package provides a wrapper for the pixman library.")
@@ -1544,7 +1577,7 @@ build tree Yggdrasil.")
      '(#:tests? #f  ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -1556,22 +1589,22 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("qtbase" ,qtbase-5)))
-    (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-libglvnd-jll" ,julia-libglvnd-jll)
-       ("julia-compilersupportlibraries-jll" ,julia-compilersupportlibraries-jll)
-       ("julia-fontconfig-jll" ,julia-fontconfig-jll)
-       ("julia-glib-jll" ,julia-glib-jll)
-       ("julia-openssl-jll" ,julia-openssl-jll)
-       ("julia-xkbcommon-jll" ,julia-xkbcommon-jll)
-       ("julia-xorg-libxcb-jll" ,julia-xorg-libxcb-jll)
-       ("julia-xorg-libxext-jll" ,julia-xorg-libxext-jll)
-       ("julia-xorg-xcb-util-image-jll" ,julia-xorg-xcb-util-image-jll)
-       ("julia-xorg-xcb-util-keysyms-jll" ,julia-xorg-xcb-util-keysyms-jll)
-       ("julia-xorg-xcb-util-renderutil-jll" ,julia-xorg-xcb-util-renderutil-jll)
-       ("julia-xorg-xcb-util-wm-jll" ,julia-xorg-xcb-util-wm-jll)
-       ("julia-zlib-jll" ,julia-zlib-jll)))
+     (list qtbase-5))
+    (propagated-inputs
+     (list julia-jllwrappers
+           julia-libglvnd-jll
+           julia-compilersupportlibraries-jll
+           julia-fontconfig-jll
+           julia-glib-jll
+           julia-openssl-jll
+           julia-xkbcommon-jll
+           julia-xorg-libxcb-jll
+           julia-xorg-libxext-jll
+           julia-xorg-xcb-util-image-jll
+           julia-xorg-xcb-util-keysyms-jll
+           julia-xorg-xcb-util-renderutil-jll
+           julia-xorg-xcb-util-wm-jll
+           julia-zlib-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Qt5Base_jll.jl")
     (synopsis "Qtbase library wrappers")
     (description "This package provides a wrapper for the qtbase library.")
@@ -1595,7 +1628,7 @@ build tree Yggdrasil.")
      '(#:tests? #f  ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -1605,12 +1638,10 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("wayland" ,wayland)))
+     (list wayland))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-expat-jll" ,julia-expat-jll)
-       ("julia-libffi-jll" ,julia-libffi-jll)
-       ("julia-xml2-jll" ,julia-xml2-jll)))
+     (list julia-jllwrappers julia-expat-jll julia-libffi-jll
+           julia-xml2-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Wayland_jll.jl")
     (synopsis "Wayland library wrappers")
     (description "This package provides a wrapper for the wayland library.")
@@ -1634,7 +1665,7 @@ build tree Yggdrasil.")
      '(#:tests? #f  ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -1644,10 +1675,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("wayland-protocols" ,wayland-protocols)))
+     (list wayland-protocols))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-wayland-jll" ,julia-wayland-jll)))
+     (list julia-jllwrappers julia-wayland-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Wayland_protocols_jll.jl")
     (synopsis "Wayland-protocols library wrappers")
     (description "This package provides a wrapper for the wayland-protocols library.")
@@ -1671,7 +1701,7 @@ build tree Yggdrasil.")
      `(#:tests? #f ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (let ((libx264 (assoc-ref inputs "libx264")))
               (map
@@ -1686,9 +1716,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$"))))))))
     (inputs
-     `(("libx264" ,libx264)))
+     (list libx264))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/x264_jll.jl")
     (synopsis "x264 library wrappers")
     (description "This package provides a wrapper for the x264 video library.")
@@ -1712,7 +1742,7 @@ build tree Yggdrasil.")
      '(#:tests? #f ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -1722,9 +1752,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("x265" ,x265)))
+     (list x265))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/x265_jll.jl")
     (synopsis "x265 library wrappers")
     (description "This package provides a wrapper for the x265 video library.")
@@ -1748,7 +1778,7 @@ build tree Yggdrasil.")
      '(#:tests? #f  ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -1758,13 +1788,11 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libxkbcommon" ,libxkbcommon)))
+     (list libxkbcommon))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-xorg-libxcb-jll" ,julia-xorg-libxcb-jll)
-       ("julia-xorg-xkeyboard-config-jll" ,julia-xorg-xkeyboard-config-jll)
-       ("julia-wayland-jll" ,julia-wayland-jll)
-       ("julia-wayland-protocols-jll" ,julia-wayland-protocols-jll)))
+     (list julia-jllwrappers julia-xorg-libxcb-jll
+           julia-xorg-xkeyboard-config-jll julia-wayland-jll
+           julia-wayland-protocols-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/xkbcommon_jll.jl")
     (synopsis "Libxkbcommon library wrappers")
     (description "This package provides a wrapper for the libxkbcommon library.")
@@ -1788,7 +1816,7 @@ build tree Yggdrasil.")
      '(#:tests? #f  ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -1800,11 +1828,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libxml2" ,libxml2)))
+     (list libxml2))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-libiconv-jll" ,julia-libiconv-jll)
-       ("julia-zlib-jll" ,julia-zlib-jll)))
+     (list julia-jllwrappers julia-libiconv-jll julia-zlib-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/XML2_jll.jl")
     (synopsis "XML2 library wrappers")
     (description "This package provides a wrapper for the libxml2 library.")
@@ -1828,7 +1854,7 @@ build tree Yggdrasil.")
      '(#:tests? #f  ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -1838,10 +1864,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libpthread-stubs" ,libpthread-stubs)))
+     (list libpthread-stubs))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-xslt-jll" ,julia-xslt-jll)))
+     (list julia-jllwrappers julia-xslt-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Xorg_libpthread_stubs_jll.jl")
     (synopsis "Libpthread-stubs library wrappers")
     (description "This package provides a wrapper for the libpthread-stubs library.")
@@ -1865,7 +1890,7 @@ build tree Yggdrasil.")
      '(#:tests? #f  ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -1875,11 +1900,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libx11" ,libx11)))
+     (list libx11))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-xorg-libxcb-jll" ,julia-xorg-libxcb-jll)
-       ("julia-xorg-xtrans-jll" ,julia-xorg-xtrans-jll)))
+     (list julia-jllwrappers julia-xorg-libxcb-jll julia-xorg-xtrans-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Xorg_libX11_jll.jl")
     (synopsis "LibX11 library wrappers")
     (description "This package provides a wrapper for the libx11 library.")
@@ -1903,7 +1926,7 @@ build tree Yggdrasil.")
      '(#:tests? #f  ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -1913,9 +1936,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libxau" ,libxau)))
+     (list libxau))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/Xorg_libXau_jll.jl")
     (synopsis "Libxau library wrappers")
     (description "This package provides a wrapper for the libxau library.")
@@ -1939,7 +1962,7 @@ build tree Yggdrasil.")
      '(#:tests? #f  ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -1949,13 +1972,11 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libxcb" ,libxcb)))
+     (list libxcb))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-xorg-libxau-jll" ,julia-xorg-libxau-jll)
-       ("julia-xorg-libpthread-stubs-jll" ,julia-xorg-libpthread-stubs-jll)
-       ("julia-xorg-libxdmcp-jll" ,julia-xorg-libxdmcp-jll)
-       ("julia-xslt-jll" ,julia-xslt-jll)))
+     (list julia-jllwrappers julia-xorg-libxau-jll
+           julia-xorg-libpthread-stubs-jll julia-xorg-libxdmcp-jll
+           julia-xslt-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Xorg_libxcb_jll.jl")
     (synopsis "Libxcb library wrappers")
     (description "This package provides a wrapper for the libxcb library.")
@@ -1979,7 +2000,7 @@ build tree Yggdrasil.")
      '(#:tests? #f  ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -1989,11 +2010,10 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libxcursor" ,libxcursor)))
+     (list libxcursor))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-xorg-libxfixes-jll" ,julia-xorg-libxfixes-jll)
-       ("julia-xorg-libxrender-jll" ,julia-xorg-libxrender-jll)))
+     (list julia-jllwrappers julia-xorg-libxfixes-jll
+           julia-xorg-libxrender-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Xorg_libXcursor_jll.jl")
     (synopsis "Libxcursor library wrappers")
     (description "This package provides a wrapper for the libxcursor library.")
@@ -2017,7 +2037,7 @@ build tree Yggdrasil.")
      '(#:tests? #f  ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -2027,9 +2047,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libxdmcp" ,libxdmcp)))
+     (list libxdmcp))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/Xorg_libXdmcp_jll.jl")
     (synopsis "Libxdmcp library wrappers")
     (description "This package provides a wrapper for the libxdmcp library.")
@@ -2053,7 +2073,7 @@ build tree Yggdrasil.")
      '(#:tests? #f  ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -2063,10 +2083,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libxext" ,libxext)))
+     (list libxext))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-xorg-libx11-jll" ,julia-xorg-libx11-jll)))
+     (list julia-jllwrappers julia-xorg-libx11-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Xorg_libXext_jll.jl")
     (synopsis "LibXext library wrappers")
     (description "This package provides a wrapper for the libxext library.")
@@ -2090,7 +2109,7 @@ build tree Yggdrasil.")
      '(#:tests? #f  ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -2100,10 +2119,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libxfixes" ,libxfixes)))
+     (list libxfixes))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-xorg-libx11-jll" ,julia-xorg-libx11-jll)))
+     (list julia-jllwrappers julia-xorg-libx11-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Xorg_libXfixes_jll.jl")
     (synopsis "Libxfixes library wrappers")
     (description "This package provides a wrapper for the libxfixes library.")
@@ -2127,7 +2145,7 @@ build tree Yggdrasil.")
      '(#:tests? #f  ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -2137,11 +2155,10 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libxi" ,libxi)))
+     (list libxi))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-xorg-libxext-jll" ,julia-xorg-libxext-jll)
-       ("julia-xorg-libxfixes-jll" ,julia-xorg-libxfixes-jll)))
+     (list julia-jllwrappers julia-xorg-libxext-jll
+           julia-xorg-libxfixes-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Xorg_libXi_jll.jl")
     (synopsis "Libxi library wrappers")
     (description "This package provides a wrapper for the libxi library.")
@@ -2165,7 +2182,7 @@ build tree Yggdrasil.")
      '(#:tests? #f  ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -2175,10 +2192,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libxinerama" ,libxinerama)))
+     (list libxinerama))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-xorg-libxext-jll" ,julia-xorg-libxext-jll)))
+     (list julia-jllwrappers julia-xorg-libxext-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Xorg_libXinerama_jll.jl")
     (synopsis "Libxinerama library wrappers")
     (description "This package provides a wrapper for the libxinerama library.")
@@ -2202,7 +2218,7 @@ build tree Yggdrasil.")
      '(#:tests? #f  ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -2212,10 +2228,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libxkbfile" ,libxkbfile)))
+     (list libxkbfile))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-xorg-libx11-jll" ,julia-xorg-libx11-jll)))
+     (list julia-jllwrappers julia-xorg-libx11-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Xorg_libxkbfile_jll.jl")
     (synopsis "Libxkbfile library wrappers")
     (description "This package provides a wrapper for the libxkbfile library.")
@@ -2239,7 +2254,7 @@ build tree Yggdrasil.")
      '(#:tests? #f  ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -2249,11 +2264,10 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libxrandr" ,libxrandr)))
+     (list libxrandr))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-xorg-libxext-jll" ,julia-xorg-libxext-jll)
-       ("julia-xorg-libxrender-jll" ,julia-xorg-libxrender-jll)))
+     (list julia-jllwrappers julia-xorg-libxext-jll
+           julia-xorg-libxrender-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Xorg_libXrandr_jll.jl")
     (synopsis "Libxrandr library wrappers")
     (description "This package provides a wrapper for the libxrandr library.")
@@ -2277,7 +2291,7 @@ build tree Yggdrasil.")
      '(#:tests? #f  ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -2287,10 +2301,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libxrender" ,libxrender)))
+     (list libxrender))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-xorg-libx11-jll" ,julia-xorg-libx11-jll)))
+     (list julia-jllwrappers julia-xorg-libx11-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Xorg_libXrender_jll.jl")
     (synopsis "libXrender library wrappers")
     (description "This package provides a wrapper for the libXrender library.")
@@ -2314,7 +2327,7 @@ build tree Yggdrasil.")
      '(#:tests? #f  ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -2324,10 +2337,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("xcb-util" ,xcb-util)))
+     (list xcb-util))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-xorg-libxcb-jll" ,julia-xorg-libxcb-jll)))
+     (list julia-jllwrappers julia-xorg-libxcb-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Xorg_xcb_util_jll.jl")
     (synopsis "Xcb-util library wrappers")
     (description "This package provides a wrapper for the xcb-util library.")
@@ -2351,7 +2363,7 @@ build tree Yggdrasil.")
      '(#:tests? #f  ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -2361,10 +2373,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("xcb-util-image" ,xcb-util-image)))
+     (list xcb-util-image))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-xorg-xcb-util-jll" ,julia-xorg-xcb-util-jll)))
+     (list julia-jllwrappers julia-xorg-xcb-util-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Xorg_xcb_util_image_jll.jl")
     (synopsis "Xcb-util-image library wrappers")
     (description "This package provides a wrapper for the xcb-util-image library.")
@@ -2388,7 +2399,7 @@ build tree Yggdrasil.")
      '(#:tests? #f  ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -2398,10 +2409,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("xcb-util-keysyms" ,xcb-util-keysyms)))
+     (list xcb-util-keysyms))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-xorg-xcb-util-jll" ,julia-xorg-xcb-util-jll)))
+     (list julia-jllwrappers julia-xorg-xcb-util-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Xorg_xcb_util_keysyms_jll.jl")
     (synopsis "Xcb-util-keysyms library wrappers")
     (description "This package provides a wrapper for the xcb-util-keysyms library.")
@@ -2425,7 +2435,7 @@ build tree Yggdrasil.")
      '(#:tests? #f  ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -2435,10 +2445,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("xcb-util-renderutil" ,xcb-util-renderutil)))
+     (list xcb-util-renderutil))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-xorg-xcb-util-jll" ,julia-xorg-xcb-util-jll)))
+     (list julia-jllwrappers julia-xorg-xcb-util-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Xorg_xcb_util_renderutil_jll.jl")
     (synopsis "Xcb-util-renderutil library wrappers")
     (description "This package provides a wrapper for the xcb-util-renderutil library.")
@@ -2462,7 +2471,7 @@ build tree Yggdrasil.")
      '(#:tests? #f  ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -2472,10 +2481,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("xcb-util-wm" ,xcb-util-wm)))
+     (list xcb-util-wm))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-xorg-xcb-util-jll" ,julia-xorg-xcb-util-jll)))
+     (list julia-jllwrappers julia-xorg-xcb-util-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Xorg_xcb_util_wm_jll.jl")
     (synopsis "Xcb-util-wm library wrappers")
     (description "This package provides a wrapper for the xcb-util-wm library.")
@@ -2499,7 +2507,7 @@ build tree Yggdrasil.")
      '(#:tests? #f  ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -2509,10 +2517,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("xkbcomp" ,xkbcomp)))
+     (list xkbcomp))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-xorg-libxkbfile-jll" ,julia-xorg-libxkbfile-jll)))
+     (list julia-jllwrappers julia-xorg-libxkbfile-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Xorg_xkbcomp_jll.jl")
     (synopsis "xkbcomp library wrappers")
     (description "This package provides a wrapper for the xkbcomp library.")
@@ -2536,7 +2543,7 @@ build tree Yggdrasil.")
      '(#:tests? #f  ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -2546,10 +2553,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("xkeyboard-config" ,xkeyboard-config)))
+     (list xkeyboard-config))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-xorg-xkbcomp-jll" ,julia-xorg-xkbcomp-jll)))
+     (list julia-jllwrappers julia-xorg-xkbcomp-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Xorg_xkeyboard_config_jll.jl")
     (synopsis "Xkeyboard-config library wrappers")
     (description "This package provides a wrapper for the xkeyboard-config library.")
@@ -2573,7 +2579,7 @@ build tree Yggdrasil.")
      '(#:tests? #f  ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -2583,9 +2589,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("xtrans" ,xtrans)))
+     (list xtrans))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/Xorg_xtrans_jll.jl")
     (synopsis "xtrans library wrappers")
     (description "This package provides a wrapper for the xtrans library.")
@@ -2609,7 +2615,7 @@ build tree Yggdrasil.")
      '(#:tests? #f  ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -2621,14 +2627,14 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libxslt" ,libxslt)))
-    (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-libgcrypt-jll" ,julia-libgcrypt-jll)
-       ("julia-libgpg-error-jll" ,julia-libgpg-error-jll)
-       ("julia-libiconv-jll" ,julia-libiconv-jll)
-       ("julia-xml2-jll" ,julia-xml2-jll)
-       ("julia-zlib-jll" ,julia-zlib-jll)))
+     (list libxslt))
+    (propagated-inputs
+     (list julia-jllwrappers
+           julia-libgcrypt-jll
+           julia-libgpg-error-jll
+           julia-libiconv-jll
+           julia-xml2-jll
+           julia-zlib-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/XSLT_jll.jl")
     (synopsis "Xslt library wrappers")
     (description "This package provides a wrapper for the libxslt library.")
@@ -2652,7 +2658,7 @@ build tree Yggdrasil.")
      '(#:tests? #f  ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -2664,9 +2670,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/Zlib_jll.jl")
     (synopsis "Zlib library wrappers")
     (description "This package provides a wrapper for Zlib.")
@@ -2690,7 +2696,7 @@ build tree Yggdrasil.")
      '(#:tests? #f  ; no runtests
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'override-binary-path
+         (add-after 'link-depot 'override-binary-path
            (lambda* (#:key inputs #:allow-other-keys)
              (map
                (lambda (wrapper)
@@ -2704,8 +2710,46 @@ build tree Yggdrasil.")
     (inputs
      `(("zstd:lib" ,zstd "lib")))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/Zstd_jll.jl")
     (synopsis "Zstd library wrappers")
     (description "This package provides a wrapper for the zstd library.")
     (license license:expat)))
+
+(define-public julia-sundials-jll
+  (package
+    (name "julia-sundials-jll")
+    (version "5.2.1+0")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/JuliaBinaryWrappers/Sundials_jll.jl")
+               (commit (string-append "Sundials-v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "0cijb9frq8gj8bjpqf2lr5d0jxlj262y6h6xi4z3536dingrvffc"))))
+    (build-system julia-build-system)
+    (arguments
+     '(#:tests? #f  ; no runtests
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'link-depot 'override-binary-path
+           (lambda* (#:key inputs #:allow-other-keys)
+             (map
+               (lambda (wrapper)
+                 (substitute* wrapper
+                   (("global artifact_dir.*")
+                    (string-append
+                     "global artifact_dir = \""
+                      (assoc-ref inputs "sundials") "\"\n"))))
+               ;; There's a Julia file for each platform, override them all
+               (find-files "src/wrappers/" "\\.jl$")))))))
+    (inputs
+     `(("sundials" ,sundials-julia)))
+    (propagated-inputs
+     (list julia-jllwrappers))
+    (home-page "https://github.com/JuliaBinaryWrappers/Sundials_jll.jl")
+    (synopsis "SUndials library wrappers")
+    (description "This package provides a wrapper for the sundials library.")
+    (license license:expat)))
diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index 492fdd9175..e30cf39dc9 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -1,8 +1,9 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2020, 2021 Nicolò Balzarotti <nicolo@nixo.xyz>
-;;; Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
+;;; Copyright © 2021, 2022 Simon Tournier <zimon.toutoune@gmail.com>
 ;;; Copyright © 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2021 Vinicius Monego <monego@posteo.net>
+;;; Copyright © 2021 jgart <jgart@dismail.de>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -47,7 +48,7 @@
         (base32 "0083pwdyxjb04i330ir9pc8kmp4bwk59lx1jgc9qi05y8j7xzbp0"))))
     (build-system julia-build-system)
     (inputs                             ;required for tests
-     `(("julia-unitful" ,julia-unitful)))
+     (list 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
@@ -125,7 +126,7 @@ ANSI escape codes to another format.")
 (define-public julia-aqua
   (package
     (name "julia-aqua")
-    (version "0.5.0")
+    (version "0.5.1")
     (source
       (origin
         (method git-fetch)
@@ -134,8 +135,10 @@ ANSI escape codes to another format.")
                (commit (string-append "v" version))))
         (file-name (git-file-name name version))
         (sha256
-         (base32 "0zcvrwnyhh2kr4d2xv7ps8dh7byw78dx6yb1m9m4dblgscn5kypb"))))
+         (base32 "1g0kyzcdykgs247j72jpc2qqall696jwgb3hnn4cxmbi8bkf7wpk"))))
     (build-system julia-build-system)
+    (arguments
+     `(#:parallel-tests? #f))
     (home-page "https://github.com/JuliaTesting/Aqua.jl")
     (synopsis "Automated quality assurance for Julia packages")
     (description "@acronym{Aqua.jl, Auto QUality Assurance for Julia packages},
@@ -156,17 +159,23 @@ provides functions to run a few automatable checks for Julia packages.")
         (sha256
          (base32 "0cmldnzvdgmfnrnrzgj6v1mfr2rvk5096392rwmhd3iyx7v0pq33"))))
     (build-system julia-build-system)
+    (arguments
+     ;; XXXX: Unexpected failures for i686, e.g.,
+     ;; Expression: @inferred(ArrayInterface.size(Rnr)) === (StaticInt(4),)
+     ;; Evaluated: (static(2),) === (static(4),)
+     ;; Disable as stopgap.
+     `(#:tests? ,(not (target-x86-32?))))
     (propagated-inputs
-     `(("julia-ifelse" ,julia-ifelse)
-       ("julia-requires" ,julia-requires)
-       ("julia-static" ,julia-static)))
+     (list julia-ifelse
+           julia-requires
+           julia-static))
     (native-inputs
-     `(("julia-aqua" ,julia-aqua)
-       ("julia-bandedmatrices" ,julia-bandedmatrices)
-       ("julia-blockbandedmatrices" ,julia-blockbandedmatrices)
-       ("julia-ifelse" ,julia-ifelse)
-       ("julia-offsetarrays" ,julia-offsetarrays)
-       ("julia-staticarrays" ,julia-staticarrays)))
+     (list julia-aqua
+           julia-bandedmatrices
+           julia-blockbandedmatrices
+           julia-ifelse
+           julia-offsetarrays
+           julia-staticarrays))
     (home-page "https://github.com/JuliaArrays/ArrayInterface.jl")
     (synopsis "Base array interface primitives")
     (description "The purpose of this library is to solidify extensions to the
@@ -181,7 +190,7 @@ no issues with the upgrade.")
 (define-public julia-arraylayouts
   (package
     (name "julia-arraylayouts")
-    (version "0.7.3")
+    (version "0.7.6")
     (source
       (origin
         (method git-fetch)
@@ -190,10 +199,10 @@ no issues with the upgrade.")
                (commit (string-append "v" version))))
         (file-name (git-file-name name version))
         (sha256
-         (base32 "0ri05xhfrj2909c6yy09qm6zi8v8s5fvmbbwbg8qgjq0yxnviw32"))))
+         (base32 "05q62pks8j23pgbrfny072rrwzrz6q19l68srnjxxv39ncmdmrvg"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-fillarrays" ,julia-fillarrays)))
+     (list julia-fillarrays))
     (home-page "https://github.com/JuliaMatrices/ArrayLayouts.jl")
     (synopsis "Array layouts and general fast linear algebra")
     (description "This package implements a trait-based framework for describing
@@ -202,6 +211,34 @@ appropriate BLAS or optimised Julia linear algebra routines.  This supports a
 much wider class of matrix types than Julia's in-built @code{StridedArray}.")
     (license license:expat)))
 
+(define-public julia-automa
+  (package
+    (name "julia-automa")
+    (version "0.8.2")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/BioJulia/Automa.jl")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "0hmwvk3qw54p7f63a2dnzlmvkynfs62x9n8x952bcmczp35csgq0"))))
+    (build-system julia-build-system)
+    (propagated-inputs
+     (list julia-scanbyte
+           julia-transcodingstreams))
+    (home-page "https://github.com/BioJulia/Automa.jl")
+    (synopsis "Validation, parsing, and tokenizing based on state machine compiler")
+    (description "This package compiles regular expressions into Julia code,
+which is then compiled into low-level machine code by the Julia compiler.  The
+package is designed to generate very efficient code to scan large text data,
+which is often much faster than handcrafted code.  @code{Automa.jl} can insert
+arbitrary Julia code that will be executed in state transitions.  This makes
+it possible, for example, to extract substrings that match a part of a regular
+expression.")
+    (license license:expat)))
+
 (define-public julia-axisalgorithms
   (package
     (name "julia-axisalgorithms")
@@ -217,7 +254,7 @@ much wider class of matrix types than Julia's in-built @code{StridedArray}.")
          (base32 "00x85lnfln7xkfnirpplzyi8r6q92nfqwya8il156bf7b1pa20gk"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-woodburymatrices" ,julia-woodburymatrices)))
+     (list julia-woodburymatrices))
     (home-page "https://github.com/timholy/AxisAlgorithms.jl")
     (synopsis "Filtering and linear algebra routines for multidimensional arrays")
     (description "@code{AxisAlgorithms} is a collection of filtering and linear
@@ -241,12 +278,12 @@ axis (dimension).")
          (base32 "03kzan1lm4fxfhzv1xjg3ysf6y7nagcc61vfz15kvdrp1dqxlynk"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-rangearrays" ,julia-rangearrays)
-       ("julia-intervalsets" ,julia-intervalsets)
-       ("julia-itertools" ,julia-itertools)))
+     (list julia-rangearrays
+           julia-intervalsets
+           julia-itertools))
     (native-inputs
-     `(("julia-offsetarrays" ,julia-offsetarrays)
-       ("julia-unitful" ,julia-unitful)))
+     (list julia-offsetarrays
+           julia-unitful))
     (home-page "http://juliaarrays.github.io/AxisArrays.jl/latest/")
     (synopsis "Arrays where each dimension can have a named axis with values")
     (description "This package for the Julia language provides an array type
@@ -272,10 +309,10 @@ axes, allowing column names or interval selections.")
          (base32 "0rlfj9gr9ss621v5kw5b06206yaak21s2vq9vk7r8a7p2ylncism"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-arraylayouts" ,julia-arraylayouts)
-       ("julia-fillarrays" ,julia-fillarrays)))
+     (list julia-arraylayouts
+           julia-fillarrays))
     (native-inputs
-     `(("julia-genericlinearalgebra" ,julia-genericlinearalgebra)))
+     (list julia-genericlinearalgebra))
     (home-page "https://github.com/JuliaMatrices/BandedMatrices.jl")
     (synopsis "Julia package for representing banded matrices")
     (description "This package supports representing banded matrices by only
@@ -296,7 +333,27 @@ the entries on the bands.")
        (sha256
         (base32 "1xz3kdrphp4b158pg7dwkiry49phs2fjjpdvk1hjpww5ykxacks8"))))
     (build-system julia-build-system)
-    (propagated-inputs `(("julia-json" ,julia-json)))
+    (arguments
+     `(#:phases
+       ,@(if (target-x86-32?)
+           '((modify-phases %standard-phases
+               (add-after 'unpack 'remove-failing-tests-i686
+                 (lambda _
+                   (substitute* "test/GroupsTests.jl"
+                     (("@test sprint\\(show, g1\\)")
+                      "@test_broken sprint(show, g1)")
+                     (("@test sprint\\(show, g1; context = :boundto => 1\\)")
+                      "@test_broken sprint(show, g1; context = :boundto => 1)")
+                     (("@test sprint\\(show, g1; context = :limit => false\\)")
+                      "@test_broken sprint(show, g1; context = :limit => false)")
+                     (("@test @test_deprecated") "@test_broken"))
+                   (substitute* "test/ExecutionTests.jl"
+                     ;; Evaluated: 12 == 8
+                     (("@test @ballocated\\(Ref\\(1\\)\\)")
+                      "@test_broken @ballocated(Ref(1))"))))))
+           '(%standard-phases))))
+    (propagated-inputs
+     (list julia-json))
     (home-page "https://github.com/JuliaCI/BenchmarkTools.jl")
     (synopsis "Benchmarking framework for the Julia language")
     (description "@code{BenchmarkTools.jl} makes performance tracking of Julia
@@ -304,10 +361,133 @@ code easy by supplying a framework for writing and running groups of
 benchmarks as well as comparing benchmark results.")
     (license license:expat)))
 
+(define-public julia-bioalignments
+  (package
+    (name "julia-bioalignments")
+    (version "2.0.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/BioJulia/BioAlignments.jl")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1wf6qgsada59r2fykxfj9hcr635wl8maqxbd3w8qpa01k9glxa0k"))))
+    (build-system julia-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'skip-test
+           (lambda _
+             ;; Test fails because an unexpected type representation from
+             ;; BioSequences.  The aligned value is correct though.
+             (substitute* "test/runtests.jl"
+               (("@test sprint\\(show, aln\\)")
+                "@test_broken sprint(show, aln)")))))))
+    (propagated-inputs
+     (list julia-biogenerics
+           julia-biosequences
+           julia-biosymbols
+           julia-intervaltrees))
+    (home-page "https://github.com/BioJulia/BioAlignments.jl")
+    (synopsis "Sequence alignment algorithm and data structures")
+    (description "This package provides alignment algorithms and data
+structures for sequence of DNA, RNA, and amino acid sequences.")
+    (license license:expat)))
+
+(define-public julia-biogenerics
+  ;; No upstream release
+  (let ((commit "a75abaf459250e2b5e22b4d9adf25fd36d2acab6")
+        (revision "1"))
+    (package
+      (name "julia-biogenerics")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/BioJulia/BioGenerics.jl")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "17d222vi9nssjwr5l349fss7jnglnjimp1z62kmfmxa4fsn8lk8l"))))
+      (build-system julia-build-system)
+      (inputs
+       (list julia-transcodingstreams))
+      (home-page "https://github.com/BioJulia/BioGenerics.jl")
+      (synopsis "Generic methods used by BioJulia packages")
+      (description "This package provides generic methods and modules used in
+many of the other BioJulia packages.  This package defines IO, exceptions, and
+other types or methods used by other BioJulia packages.")
+      (license license:expat))))
+
+(define-public julia-biosequences
+  (package
+    (name "julia-biosequences")
+    (version "2.0.5")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/BioJulia/BioSequences.jl")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0ns6zk0zvnsf4hlsys9ck2xrn20qck0b0aghh484vc6n458zq2gw"))))
+    (build-system julia-build-system)
+    (propagated-inputs
+     (list julia-biogenerics
+           julia-biosymbols
+           julia-combinatorics
+           julia-indexablebitvectors
+           julia-stablerngs
+           julia-twiddle))
+    (native-inputs
+     (list julia-statsbase
+           julia-yaml))
+    (home-page "https://biojulia.net/BioSequences.jl/stable/")
+    (synopsis "Data types and methods for common operations with biological sequences")
+    (description "This package provides Data types and methods for common
+operations with biological sequences, including DNA, RNA, and amino acid
+sequences.")
+    (license license:expat)))
+
+(define-public julia-biosymbols
+  (package
+    (name "julia-biosymbols")
+    ;; Older release for compatibility with julia-biosequences.
+    (version "4.0.4")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/BioJulia/BioSymbols.jl")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1222rwdndi777lai8a6dwrh35i5rgmj75kcrhn8si72sxgz0syjm"))))
+    (build-system julia-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'adjust-tests
+           (lambda _
+             (substitute* "test/runtests.jl"
+               (("\\@testset \\\"Range.*" all)
+                (string-append all " return\n"))))))))
+    (propagated-inputs
+     (list julia-automa))
+    (home-page "https://github.com/BioJulia/BioSymbols.jl")
+    (synopsis "Primitive types for nucleic acids and amino acids")
+    (description "This package defines the primitive types for nucleic acids
+and amino acids that are used ny otherBioJulia packages.")
+    (license license:expat)))
+
 (define-public julia-blockarrays
   (package
     (name "julia-blockarrays")
-    (version "0.16.3")
+    (version "0.16.8")
     (source
       (origin
         (method git-fetch)
@@ -316,15 +496,24 @@ benchmarks as well as comparing benchmark results.")
                (commit (string-append "v" version))))
         (file-name (git-file-name name version))
         (sha256
-         (base32 "1f9pnnfv97vww2dxklpx8pa2k85fw2l3pzsj7n28nws1xlwnj96c"))))
+         (base32 "1by26036fk9mawmcgqxpwizgbs398v9p6vrbsgg7h6llqn3q9iw1"))))
     (build-system julia-build-system)
+    (arguments
+     `(#:phases
+       ,@(if (target-64bit?)
+           '(%standard-phases)
+           '((modify-phases %standard-phases
+               (add-after 'unpack 'fix-tests-int32-i686
+                 (lambda _
+                   (substitute* "test/test_blockarrays.jl"
+                     (("Int64") "Int32")))))))))
     (propagated-inputs
-     `(("julia-arraylayouts" ,julia-arraylayouts)
-       ("julia-fillarrays" ,julia-fillarrays)))
+     (list julia-arraylayouts
+           julia-fillarrays))
     (native-inputs
-     `(("julia-lazyarrays" ,julia-lazyarrays)
-       ("julia-offsetarrays" ,julia-offsetarrays)
-       ("julia-staticarrays" ,julia-staticarrays)))
+     (list julia-lazyarrays
+           julia-offsetarrays
+           julia-staticarrays))
     (home-page "https://github.com/JuliaArrays/BlockArrays.jl")
     (synopsis "BlockArrays for Julia")
     (description "A block array is a partition of an array into blocks or
@@ -355,11 +544,11 @@ access to the full matrix to use in in for example a linear solver.")
          (base32 "10n1r6kmmv2wa307jfg9y2m6p16j8hngjp3fjavpbdy1r5haasm9"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-arraylayouts" ,julia-arraylayouts)
-       ("julia-bandedmatrices" ,julia-bandedmatrices)
-       ("julia-blockarrays" ,julia-blockarrays)
-       ("julia-fillarrays" ,julia-fillarrays)
-       ("julia-matrixfactorizations" ,julia-matrixfactorizations)))
+     (list julia-arraylayouts
+           julia-bandedmatrices
+           julia-blockarrays
+           julia-fillarrays
+           julia-matrixfactorizations))
     (home-page "https://github.com/JuliaMatrices/BlockBandedMatrices.jl")
     (synopsis "Block-banded matrices and banded-block-banded matrices")
     (description "This package supports representing block-banded and
@@ -368,6 +557,29 @@ A @code{BlockBandedMatrix} is a subtype of @code{BlockMatrix} of
 @code{BlockArrays.jl} whose layout of non-zero blocks is banded.")
     (license license:expat)))
 
+(define-public julia-bson
+  (package
+    (name "julia-bson")
+    (version "0.3.3")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/JuliaIO/BSON.jl")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "1l5608ma2ys7v2gpcqbiv9mwfc6yrlqkihrfx1pf7fgv5llhd4fn"))))
+    (build-system julia-build-system)
+    (native-inputs
+     (list julia-dataframes))
+    (home-page "https://github.com/JuliaIO/BSON.jl")
+    (synopsis "Binary JSON serialisation format")
+    (description "@code{BSON.jl} is a Julia package for working with the Binary
+JSON serialisation format.  It can be used as a general store for Julia data
+structures.")
+    (license license:expat)))
+
 (define-public julia-bufferedstreams
   (package
     (name "julia-bufferedstreams")
@@ -387,8 +599,10 @@ A @code{BlockBandedMatrix} is a subtype of @code{BlockMatrix} of
     ;; https://travis-ci.org/BioJulia/BufferedStreams.jl/jobs/491050182
     (arguments
      '(#:tests? #f
-       #:julia-package-name "BufferedStreams"))
-    (propagated-inputs `(("julia-compat" ,julia-compat)))
+       #:julia-package-name "BufferedStreams"
+       #:julia-package-uuid "e1450e63-4bb3-523b-b2a4-4ffa8c0fd77d"))
+    (propagated-inputs
+     (list julia-compat))
     (home-page "https://github.com/BioJulia/BufferedStreams.jl")
     (synopsis "Fast composable IO streams")
     (description "@code{BufferedStreams.jl} provides buffering for IO
@@ -435,14 +649,14 @@ methods.")
         (base32 "1bcfylxdaizgasnmlkjjkf4dgfvy2y9ycnphw2d0z6mm9vx3n04x"))))
     (build-system julia-build-system)
     (native-inputs
-     `(("julia-pooledarrays" ,julia-pooledarrays)))
+     (list julia-pooledarrays))
     (propagated-inputs
-     `(("julia-dataapi" ,julia-dataapi)
-       ("julia-json" ,julia-json)
-       ("julia-json3" ,julia-json3)
-       ("julia-missings" ,julia-missings)
-       ("julia-recipesbase" ,julia-recipesbase)
-       ("julia-structtypes" ,julia-structtypes)))
+     (list julia-dataapi
+           julia-json
+           julia-json3
+           julia-missings
+           julia-recipesbase
+           julia-structtypes))
     (home-page "https://github.com/JuliaData/CategoricalArrays.jl")
     (synopsis "Arrays for working with categorical data")
     (description "This package provides tools for working with categorical
@@ -465,15 +679,15 @@ variables, both with unordered (nominal variables) and ordered categories
         (base32 "0if93pd3b3scg2x3gmk1cbwjk0ax1n792vy8c38y3xl7jpd5cb70"))))
     (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)))
+     (list julia-chainrulestestutils
+           julia-finitedifferences
+           julia-nanmath
+           julia-specialfunctions))
     (propagated-inputs
-     `(("julia-chainrulescore" ,julia-chainrulescore)
-       ("julia-compat" ,julia-compat)
-       ("julia-reexport" ,julia-reexport)
-       ("julia-requires" ,julia-requires)))
+     (list julia-chainrulescore
+           julia-compat
+           julia-reexport
+           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
@@ -496,10 +710,10 @@ execute forward-, reverse-, and mixed-mode primitives.")
         (base32 "1866xv30h1bi7f2m993nljzf58wwmv8zlgn6ffn9j3wckch1nfpb"))))
     (build-system julia-build-system)
     (inputs                             ;required for tests
-     `(("julia-benchmarktools" ,julia-benchmarktools)
-       ("julia-staticarrays" ,julia-staticarrays)))
+     (list julia-benchmarktools
+           julia-staticarrays))
     (propagated-inputs
-     `(("julia-compat" ,julia-compat)))
+     (list 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
@@ -509,7 +723,7 @@ sensitivities for functions without the need to depend on ChainRules itself.")
 (define-public julia-chainrulestestutils
   (package
     (name "julia-chainrulestestutils")
-    (version "1.0.0")
+    (version "1.2.3")
     (source
      (origin
        (method git-fetch)
@@ -518,12 +732,12 @@ sensitivities for functions without the need to depend on ChainRules itself.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "07l4sjc7avmmp4v1dsym1jyb46q4jsvv7i0yzszf72gj8d9k6lwa"))))
+        (base32 "1vlkyp72d514gyb4k3yhjl1g7f24ncmz61j56p4sdi9f76rk9fx9"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-chainrulescore" ,julia-chainrulescore)
-       ("julia-compat" ,julia-compat)
-       ("julia-finitedifference" ,julia-finitedifferences)))
+     (list julia-chainrulescore
+           julia-compat
+           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
@@ -538,6 +752,38 @@ 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-codeczlib
+  (package
+    (name "julia-codeczlib")
+    (version "0.7.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaIO/CodecZlib.jl")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0xm603nylkwk4bzx66zv1g3syzrvn3jh9spdx7kvcvgszzyrrgh4"))))
+    (build-system julia-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'reset-gzip-timestamps 'make-files-writable
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (for-each make-file-writable
+                         (find-files out "\\.gz$"))
+               #t))))))
+    (propagated-inputs
+     (list julia-transcodingstreams
+           julia-zlib-jll))
+    (home-page "https://github.com/JuliaIO/CodecZlib.jl")
+    (synopsis "Zlib codecs for @code{TranscodingStreams.jl}")
+    (description "This package provides zlib codecs for
+@code{TranscodingStreams.jl}.")
+    (license license:expat)))
+
 (define-public julia-colors
   (package
     (name "julia-colors")
@@ -553,9 +799,9 @@ dependencies, while keeping @code{ChainRulesCore.jl} as light-weight as possible
         (base32 "0kx3hq7rf8p5zx6ly9k5j90zijmc7yrwmy96cgkl2ibdfbnhmya3"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-colortypes" ,julia-colortypes)
-       ("julia-fixedpointnumbers" ,julia-fixedpointnumbers)
-       ("julia-reexport" ,julia-reexport)))
+     (list julia-colortypes
+           julia-fixedpointnumbers
+           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
@@ -567,7 +813,7 @@ color scales for graphics.")
 (define-public julia-colorschemes
   (package
     (name "julia-colorschemes")
-    (version "3.13.0")
+    (version "3.15.0")
     (source
       (origin
         (method git-fetch)
@@ -576,13 +822,13 @@ color scales for graphics.")
                (commit (string-append "v" version))))
         (file-name (git-file-name name version))
         (sha256
-         (base32 "13gy1njxlkfnxmpj2z6aj1bzbzn7jipaxr9fgkv41yiy0xjhqiyh"))))
+         (base32 "0kpjhmqd5cj8dh8bmh9b5g6bscyp7h23hzpr2s93pnrp57q1wvhq"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-colors" ,julia-colors)
-       ("julia-colortypes" ,julia-colortypes)
-       ("julia-fixedpointnumbers" ,julia-fixedpointnumbers)
-       ("julia-staticarrays" ,julia-staticarrays)))
+     (list julia-colors
+           julia-colortypes
+           julia-fixedpointnumbers
+           julia-staticarrays))
     (home-page "https://github.com/JuliaGraphics/ColorSchemes.jl")
     (synopsis "Colorschemes, colormaps, gradients, and palettes")
     (description "This package provides a collection of colorschemes.")
@@ -601,11 +847,11 @@ color scales for graphics.")
        (file-name (git-file-name name version))
        (sha256
         (base32 "0n7h70caqv7yd0khjhn90iax62r73mcif8qzkwj5b4q46li1r8ih"))))
-    (arguments
-     '(#:tests? #f))                    ;require Documenter, not packaged yet
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-fixedpointnumbers" ,julia-fixedpointnumbers)))
+     (list julia-fixedpointnumbers))
+    (native-inputs
+     (list julia-documenter))
     (home-page "https://github.com/JuliaGraphics/ColorTypes.jl")
     (synopsis "Basic color types and constructor")
     (description "This minimalistic package serves as the foundation for
@@ -617,7 +863,7 @@ with.")
 (define-public julia-colorvectorspace
   (package
     (name "julia-colorvectorspace")
-    (version "0.9.5")
+    (version "0.9.7")
     (source
       (origin
         (method git-fetch)
@@ -626,14 +872,14 @@ with.")
                (commit (string-append "v" version))))
         (file-name (git-file-name name version))
         (sha256
-         (base32 "1gx4k1bvf6lkzxphnvpkw857ihrkifhb68yvsj889k9pf1vda3fq"))))
+         (base32 "02gk7f5g5wjxdasbjf8bvv1m7clksh7mw1xmygjdirjz1q0d6dwi"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-colortypes" ,julia-colortypes)
-       ("julia-specialfunctions" ,julia-specialfunctions)
-       ("julia-tensorcore" ,julia-tensorcore)))
+     (list julia-colortypes
+           julia-specialfunctions
+           julia-tensorcore))
     (native-inputs
-     `(("julia-colors" ,julia-colors)))
+     (list julia-colors))
     (home-page "https://github.com/JuliaGraphics/ColorVectorSpace.jl")
     (synopsis "Treat colors as n-vectors for the purposes of arithmetic")
     (description "This package is an add-on to @code{ColorTypes.jl} and provides
@@ -677,7 +923,7 @@ focusing mostly (as of now) on enumerative combinatorics and permutations.")
         (base32 "0mgy90kk8ksv3l720kkk04gnhn4aqhh2dj4sp3x8yy3limngfjay"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-macrotools" ,julia-macrotools)))
+     (list 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
@@ -687,7 +933,7 @@ common subexpression elimination.")
 (define-public julia-compat
   (package
     (name "julia-compat")
-    (version "3.32.0")
+    (version "3.39.0")
     (source
      (origin
        (method git-fetch)
@@ -696,7 +942,7 @@ common subexpression elimination.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1zif3dj0a85w7xqbg0chrdhw8dk410zxcqbnkf764xmylwbps498"))))
+        (base32 "0qzvaqi5gqgc747fnajbvvf5vqbh6cwykwky00c7glvmvdsgk3z0"))))
     (build-system julia-build-system)
     (home-page "https://github.com/JuliaLang/Compat.jl")
     (synopsis "Compatibility across Julia versions")
@@ -706,6 +952,53 @@ provides a macro that lets you use the latest syntax in a backwards-compatible
 way.")
     (license license:expat)))
 
+(define-public julia-configurations
+  (package
+    (name "julia-configurations")
+    (version "0.16.4")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/Roger-luo/Configurations.jl")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "1b23p0zk8dx2sf01cnw177mqci7qd81b9s32ixz9clsh0r0icl1b"))))
+    (build-system julia-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'link-depot 'fix-tests
+           (lambda _
+             (substitute* "test/runtests.jl"
+               (("option.toml") "test/option.toml"))))
+         (add-after 'link-depot 'dont-use-exproniconlite
+           (lambda _
+             (substitute* '("Project.toml"
+                            "src/Configurations.jl"
+                            "test/runtests.jl")
+               (("ExproniconLite") "Expronicon"))
+             (substitute* "Project.toml"
+               (("55351af7-c7e9-48d6-89ff-24e801d99491")
+                "6b7a57c9-7cc1-4fdf-b7f5-e857abae3636"))))
+         ,@(if (target-64bit?)
+             '()
+             '((add-after 'unpack 'fix-tests-int32-i686
+                 (lambda _
+                   (substitute* "test/runtests.jl"
+                     (("Int64") "Int32")))))))))
+    (propagated-inputs
+     (list julia-crayons
+           julia-expronicon
+           julia-orderedcollections))
+    (home-page "https://configurations.rogerluo.dev/stable/")
+    (synopsis "Tools for options and configurations in Julia")
+    (description "@code{Configurations.jl} provides a macro @code{@@option} to
+let you define @code{structs} to represent options/configurations, and serialize
+between different option/configuration file formats such as @code{TOML}.")
+    (license license:expat)))
+
 (define-public julia-constructionbase
   (package
     (name "julia-constructionbase")
@@ -740,14 +1033,12 @@ for construction of objects.")
         (sha256
          (base32 "15zbkn32v7xlz7559s0r5a0vkwmjwsswxaqpzijly4lky4jnp33d"))))
     (build-system julia-build-system)
-    (arguments
-     `(#:tests? #f))    ; Documenter.jl not packaged yet.
     (propagated-inputs
-     `(("julia-staticarrays" ,julia-staticarrays)))
-    ;(native-inputs
-    ; `(("julia-documenter" ,julia-documenter)
-    ;   ("julia-forwarddiff" ,julia-forwarddiff)
-    ;   ("julia-unitful" ,julia-unitful)))
+     (list julia-staticarrays))
+    (native-inputs
+    (list julia-documenter
+          julia-forwarddiff
+          julia-unitful))
     (home-page "https://github.com/JuliaGeometry/CoordinateTransformations.jl")
     (synopsis "Coordinate transformations in Julia")
     (description "@code{CoordinateTransformations} is a Julia package to manage
@@ -806,6 +1097,63 @@ moving the function definition to DataAPI.jl and each package taking a
 dependency on it.")
     (license license:expat)))
 
+(define-public julia-dataframes
+  (package
+    (name "julia-dataframes")
+    (version "1.2.2")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/JuliaData/DataFrames.jl")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "1bk0amrghgjrkyn1mm4ac23swwbgszl1d0qyl9137qj5zvv9dasp"))))
+    (build-system julia-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'link-depot 'skip-failing-test
+           (lambda _
+             ;; Tests with non-standard colors.
+             (substitute* "test/show.jl"
+               (("test (sprint\\(show, df, context=:color=>true)" _ test)
+                (string-append "test_nowarn " test)))
+             (substitute* "test/io.jl"
+               (("testset \\\"improved.*" all)
+                (string-append all "return\n")))
+             (substitute* "test/join.jl"
+               (("test (levels\\(outerjoin\\(B)" _ test)
+                (string-append "test_nowarn " test)))
+             #t)))))
+    (propagated-inputs
+     (list julia-dataapi
+           julia-invertedindices
+           julia-iteratorinterfaceextensions
+           julia-missings
+           julia-pooledarrays
+           julia-prettytables
+           julia-reexport
+           julia-sortingalgorithms
+           julia-tables
+           julia-tabletraits))
+    (native-inputs
+     (list julia-categoricalarrays
+           julia-combinatorics
+           julia-datastructures
+           julia-datavalues
+           julia-offsetarrays
+           julia-unitful))
+    (home-page "https://dataframes.juliadata.org/stable/")
+    (synopsis "In-memory tabular data")
+    (description "This package provides a set of tools for working with tabular
+data in Julia.  Its design and functionality are similar to those of Pandas from
+Python or @code{data.frame}, @code{data.table} and @code{dplyr} from R, making
+it a great general purpose data science tool, especially for those coming to
+Julia from R or Python.")
+    (license license:expat)))
+
 (define-public julia-datastructures
   (package
     (name "julia-datastructures")
@@ -820,9 +1168,22 @@ dependency on it.")
        (sha256
         (base32 "0hdqp8ipsqdw5bqqkdvz4j6n67x80sj5azr9vzyxwjfsgkfbnk2l"))))
     (propagated-inputs
-     `(("julia-compat" ,julia-compat)
-       ("julia-orderedcollections" ,julia-orderedcollections)))
+     (list julia-compat
+           julia-orderedcollections))
     (build-system julia-build-system)
+    (arguments
+     `(#:phases
+       ,@(if (target-x86-32?)
+           '((modify-phases %standard-phases
+               (add-after 'unpack 'remove-failing-test-i686
+                 (lambda _
+                   ;; The evaluation returns the correct value,
+                   ;; Evaluated: "Accumulator(1 => 3, 3 => 4)"
+                   ;; but, for some reasons, is considered as failed.
+                   (substitute* "test/test_accumulator.jl"
+                     (("@test sprint\\(show,Accumulator\\(1 => 3, 3 => 4\\)\\)")
+                      "@test_broken sprint(show, Accumulator(1 => 3, 3 => 4))"))))))
+           '(%standard-phases))))
     (home-page "https://github.com/JuliaCollections/DataStructures.jl")
     (synopsis "Julia module providing different data structures")
     (description "This package implements a variety of data structures,
@@ -869,7 +1230,7 @@ without having to take direct dependencies.")
      `(#:tests? #f      ; Tests need upgrading with newer Julia version.
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'skip-known-failing-tests
+         (add-after 'link-depot 'skip-known-failing-tests
            (lambda _
              ;; See upstream report:
              ;; https://github.com/queryverse/DataValues.jl/issues/83
@@ -878,7 +1239,7 @@ without having to take direct dependencies.")
                ((".*DataValue\\(method\\(f.*") ""))
              #t)))))
     (propagated-inputs
-     `(("julia-datavalueinterfaces" ,julia-datavalueinterfaces)))
+     (list julia-datavalueinterfaces))
     (home-page "https://github.com/queryverse/DataValues.jl")
     (synopsis "Missing values for Julia")
     (description "This package provides the type @code{DataValue} that is used
@@ -923,7 +1284,7 @@ dictionaries where values associated with a particular key may change,
          (base32 "1mm43hm8hd6sgmkkpqhbqhvap7mpkjwzmz5algxi6manp580gkr5"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-indexing" ,julia-indexing)))
+     (list julia-indexing))
     (home-page "https://github.com/andyferris/Dictionaries.jl")
     (synopsis "Alternative interface for dictionaries in Julia")
     (description "This package provides an alternative interface for
@@ -947,7 +1308,7 @@ dictionaries in Julia, for improved productivity and performance.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'skip-flakey-tests
+         (add-after 'link-depot 'skip-flakey-tests
            (lambda _
              ;; Some combination of these tests fail nondeterministically
              ;; each of the times this package is built.
@@ -957,10 +1318,10 @@ dictionaries in Julia, for improved productivity and performance.")
                (("test dist\\(z, x") "test_nowarn dist(z, x")
                (("test dist\\(z, y") "test_nowarn dist(z, y")))))))
     (propagated-inputs
-     `(("julia-statsapi" ,julia-statsapi)))
+     (list julia-statsapi))
     (native-inputs
-     `(("julia-offsetarrays" ,julia-offsetarrays)
-       ("julia-unitful" ,julia-unitful)))
+     (list julia-offsetarrays
+           julia-unitful))
     (home-page "https://github.com/JuliaStats/Distances.jl")
     (synopsis "Julia package for evaluating distances (metrics) between vectors")
     (description "A Julia package for evaluating distances(metrics) between
@@ -1013,33 +1374,31 @@ valuable enough at this time.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'patch-source
+         (add-after 'link-depot 'patch-source
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "src/Deps.jl"
                (("pip install")
-                (string-append (assoc-ref inputs "python")
-                               "/bin/pip install")))
-             #t))
-         (add-after 'unpack 'remove-javascript-downloads
+                (string-append (search-input-file inputs "bin/pip")
+                               " install")))))
+         (add-after 'link-depot 'remove-javascript-downloads
            (lambda _
              (substitute* "src/Writers/HTMLWriter.jl"
                (("cdnjs.cloudflare.com") "example.com"))
              ;; Removing the javascript downloads causes these tests fail.
              (substitute* "test/examples/tests.jl"
                ((".*Main\\.examples_html_doc.*") "")
-               ((".*Main\\.examples_html_mathjax3_doc.*") ""))
-             #t)))))
+               ((".*Main\\.examples_html_mathjax3_doc.*") "")))))))
     (propagated-inputs
-     `(("julia-ansicoloredprinters" ,julia-ansicoloredprinters)
-       ("julia-docstringextensions" ,julia-docstringextensions)
-       ("julia-iocapture" ,julia-iocapture)
-       ("julia-json" ,julia-json)))
+     (list julia-ansicoloredprinters
+           julia-docstringextensions
+           julia-iocapture
+           julia-json))
     (inputs
-     `(("python" ,python-wrapper)))
+     (list python-wrapper))
     (native-inputs
-     `(("git" ,git-minimal)
-       ("julia-documentermarkdown" ,julia-documentermarkdown)
-       ("julia-documentertools" ,julia-documentertools)))
+     (list git-minimal
+           julia-documentermarkdown
+           julia-documentertools))
     (home-page "https://juliadocs.github.io/Documenter.jl")
     (synopsis "Documentation generator for Julia")
     (description "This package provides a documentation generator for Julia.")
@@ -1076,7 +1435,7 @@ valuable enough at this time.")
     (inputs
      ;; We don't want to propagate the bootstrap version.
      ;; Cycle with Documenter.jl in later versions.
-     `(("julia-documenter" ,julia-documenter-bootstrap)))
+     (list julia-documenter-bootstrap))
     (home-page "https://github.com/JuliaDocs/DocumenterMarkdown.jl")
     (synopsis "Documenter's Markdown")
     (description "This package enables the Markdown / MkDocs backend of
@@ -1102,13 +1461,13 @@ valuable enough at this time.")
     (inputs
      ;; We don't want to propagate the bootstrap version.
      ;; Cycle with Documenter.jl in later versions.
-     `(("julia-documenter" ,julia-documenter-bootstrap)))
+     (list julia-documenter-bootstrap))
     (propagated-inputs
-     `(("julia-docstringextensions" ,julia-docstringextensions)
-       ("julia-gumbo" ,julia-gumbo)
-       ("julia-sass" ,julia-sass)))
+     (list julia-docstringextensions
+           julia-gumbo
+           julia-sass))
     (native-inputs
-     `(("julia-example" ,julia-example)))
+     (list julia-example))
     (home-page "https://github.com/JuliaDocs/DocumenterTools.jl")
     (synopsis "Extra tools for setting up Documenter.jl")
     (description "This package contains utilities for setting up documentation
@@ -1128,9 +1487,9 @@ generation with @code{Documenter.jl}.")
        (file-name (git-file-name name version))
        (sha256
         (base32 "1w6p3yxajvclax5b9g7cr2jmbc7lvr5nk4gq0aljxdycdq1d2y3v"))))
-    (propagated-inputs
-     `(("julia-staticarrays" ,julia-staticarrays)))
     (build-system julia-build-system)
+    (propagated-inputs
+     (list julia-staticarrays))
     (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
@@ -1150,10 +1509,10 @@ be passed to in-place differentiation methods instead of an output buffer.")
        (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)
+    (propagated-inputs
+     (list julia-nanmath
+           julia-specialfunctions))
     (home-page "https://github.com/JuliaDiff/DiffRules.jl")
     (synopsis "Primitive differentiation rules")
     (description "This package provides primitive differentiation rules that
@@ -1199,15 +1558,15 @@ stressing the robustness of differentiation tools.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'adjust-test-suite
+         (add-after 'link-depot 'adjust-test-suite
            (lambda _
              (substitute* "test/runtests.jl"
                ;; Seems to not play nicely with SpecialFunctions
                ((".*isempty.*") "")))))))
     (propagated-inputs
-     `(("julia-calculus" ,julia-calculus)
-       ("julia-nanmath" ,julia-nanmath)
-       ("julia-specialfunctions" ,julia-specialfunctions)))
+     (list julia-calculus
+           julia-nanmath
+           julia-specialfunctions))
     (home-page "https://github.com/JuliaDiff/DualNumbers.jl")
     (synopsis "Represent dual numbers and for perform dual algebra")
     (description "The @code{DualNumbers} Julia package defines the @code{Dual}
@@ -1233,13 +1592,13 @@ combinations of dual numbers with predefined Julia numeric types.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'adjust-test-suite
+         (add-after 'link-depot 'adjust-test-suite
            (lambda _
              (substitute* "test/runtests.jl"
                ;; Seems to not play nicely with Julia-1.6.
                ((".*basic.jl.*") "")))))))
     (propagated-inputs
-     `(("julia-arrayinterface" ,julia-arrayinterface)))
+     (list julia-arrayinterface))
     (home-page "https://github.com/ChrisRackauckas/EllipsisNotation.jl")
     (synopsis "Elipsis notation implementation")
     (description "This implements the notation @code{..} for indexing arrays.
@@ -1267,6 +1626,40 @@ before (or after)\".")
       (description "This package provides various examples.")
       (license license:expat))))
 
+;; ExproniconLite.jl is autogenerated from this package.
+(define-public julia-expronicon
+  (package
+    (name "julia-expronicon")
+    (version "0.6.10")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/Roger-luo/Expronicon.jl")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "0h8aaynqlxrkn8575k5vqmhzil4vvxchhf0bcxa6zwawp558gj2y"))))
+    (build-system julia-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'link-depot 'skip-network-tests
+           (lambda _
+             (substitute* "test/runtests.jl"
+               ;; This test tries to access the Julia package registry.
+               ((".*expand\\.jl.*") "")))))))
+    (propagated-inputs
+     (list julia-mlstyle))
+    (native-inputs
+     (list julia-documenter))
+    (home-page "https://expronicon.rogerluo.dev/dev/")
+    (synopsis "Collective tools for metaprogramming on Julia Expr")
+    (description "This package provides a collection of tools for
+metaprogramming on Julia Expr, the meta programming standard library for
+@code{MLStyle}.")
+    (license license:expat)))
+
 (define-public julia-exprtools
   (package
     (name "julia-exprtools")
@@ -1303,8 +1696,8 @@ performant tooling without requiring additional package dependencies.")
          (base32 "1ldxbp0kq3ip67x7sp82dz56aq4p5i0chspbgx2zgskr6jcbjj1b"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-ffmpeg-jll" ,julia-ffmpeg-jll)
-       ("julia-x264-jll" ,julia-x264-jll)))
+     (list julia-ffmpeg-jll
+           julia-x264-jll))
     (home-page "https://github.com/JuliaIO/FFMPEG.jl")
     (synopsis "Julia Package for ffmpeg")
     (description "This package is made to be included into packages that just
@@ -1330,7 +1723,7 @@ need the ffmpeg binaries + executables, and don't want the overhead of
      `(#:phases
        (modify-phases %standard-phases
          (delete 'reset-gzip-timestamps)
-         (add-after 'unpack 'skip-network-tests
+         (add-after 'link-depot 'skip-network-tests
            (lambda _
              ;; These tests try to download audio/video files.
              (substitute* "test/query.jl"
@@ -1348,11 +1741,11 @@ need the ffmpeg binaries + executables, and don't want the overhead of
              (substitute* "test/runtests.jl"
                ((".*test_mimesave.*") "")))))))
     (propagated-inputs
-     `(("julia-requires" ,julia-requires)))
+     (list julia-requires))
     (native-inputs
-     `(("julia-colortypes" ,julia-colortypes)
-       ("julia-filepathsbase" ,julia-filepathsbase)
-       ("julia-http" ,julia-http)))
+     (list julia-colortypes
+           julia-filepathsbase
+           julia-http))
     (home-page "https://github.com/JuliaIO/FileIO.jl")
     (synopsis "Main Package for IO, loading all different kind of files")
     (description "@code{FileIO} aims to provide a common framework for detecting
@@ -1387,7 +1780,7 @@ working with filesystem paths in Julia.")
 (define-public julia-fillarrays
   (package
     (name "julia-fillarrays")
-    (version "0.12.1")
+    (version "0.12.6")
     (source
      (origin
        (method git-fetch)
@@ -1396,10 +1789,10 @@ working with filesystem paths in Julia.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1va8vvcxbxcy5xp487hdqfp0ps3m8q0819xrxygsf5135azp3qrh"))))
+        (base32 "1sx96pzrgyh8k7x2w8vmyi6cazlmp7rg1n7wbl47qfzqjggka6kz"))))
     (build-system julia-build-system)
     (inputs                             ;required by tests
-     `(("julia-staticarrays" ,julia-staticarrays)))
+     (list julia-staticarrays))
     (home-page "https://github.com/JuliaArrays/FillArrays.jl")
     (synopsis "Lazy matrix representation")
     (description "This package lazily represents matrices filled with
@@ -1432,13 +1825,13 @@ following types: @code{Eye}, @code{Fill}, @code{Ones}, @code{Zeros},
              (setenv "GROUP" "Core")
              #t)))))
     (propagated-inputs
-     `(("julia-arrayinterface" ,julia-arrayinterface)
-       ("julia-requires" ,julia-requires)
-       ("julia-staticarrays" ,julia-staticarrays)))
+     (list julia-arrayinterface
+           julia-requires
+           julia-staticarrays))
     (native-inputs
-     `(("julia-bandedmatrices" ,julia-bandedmatrices)
-       ("julia-blockbandedmatrices" ,julia-blockbandedmatrices)
-       ("julia-safetestsets" ,julia-safetestsets)))
+     (list julia-bandedmatrices
+           julia-blockbandedmatrices
+           julia-safetestsets))
     (home-page "https://github.com/JuliaDiff/FiniteDiff.jl")
     (synopsis "Calculations of gradients, Jacobians, and Hessians")
     (description "This package is for calculating derivatives, gradients,
@@ -1461,12 +1854,23 @@ types and sparsity.")
        (sha256
         (base32 "09nsf9cgk49yrvprflnhd9h5rrgs280rgj8sad3csghxdx6jqk5c"))))
     (build-system julia-build-system)
+    (arguments
+     `(#:phases
+       ,@(if (target-x86-32?)
+           '((modify-phases %standard-phases
+               (add-after 'unpack 'remove-failing-test-i686
+                 (lambda _
+                   ;; Machine Precision incorrectly handled
+                   (substitute* "test/methods.jl"
+                     (("@test central_fdm\\(15, 5, adapt=2\\)\\(exp, 1.0\\)")
+                      "@test_broken central_fdm(15, 5, adapt=2)(exp, 1.0)"))))))
+           '(%standard-phases))))
     (inputs
-     `(("julia-benchmarktools" ,julia-benchmarktools)))
+     (list julia-benchmarktools))
     (propagated-inputs
-     `(("julia-chainrulescore" ,julia-chainrulescore)
-       ("julia-richardson" ,julia-richardson)
-       ("julia-staticarrays" ,julia-staticarrays)))
+     (list julia-chainrulescore
+           julia-richardson
+           julia-staticarrays))
     (home-page "https://github.com/JuliaDiff/FiniteDifferences.jl")
     (synopsis "Estimates derivatives with finite differences")
     (description "This package calculates approximate derivatives numerically
@@ -1490,13 +1894,14 @@ using finite difference.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'disable-failing-test
+         (add-after 'link-depot 'disable-failing-test
            (lambda* (#:key outputs #:allow-other-keys)
              (substitute* "test/fixed.jl"
                ;; A deprecation warning is not thrown
                (("@test_logs.*:warn" all) (string-append "# " all)))
              #t)))))
-    (propagated-inputs `(("julia-compat" ,julia-compat)))
+    (propagated-inputs
+     (list julia-compat))
     (home-page "https://github.com/JuliaMath/FixedPointNumbers.jl")
     (synopsis "Fixed point types for Julia")
     (description "@code{FixedPointNumbers.jl} implements fixed-point number
@@ -1542,16 +1947,22 @@ c-style numerical formatting.")
        (sha256
         (base32 "1vb46x8mcn61g1l14qrk22c043khg2ml4q1ci7h4k2v34f2ak5fs"))))
     (build-system julia-build-system)
+    (arguments
+     ;; XXXX: Unexpected and non-deterministic failures for i686, e.g.,
+     ;; Expression: dual_isapprox(FDNUM ^ PRIMAL, exp(PRIMAL * log(FDNUM)))
+     ;; ERROR: LoadError: LoadError: There was an error during testing
+     ;; Disable as stopgap.
+     `(#:tests? ,(not (target-x86-32?))))
     (inputs                             ;required for tests
-     `(("julia-calculus" ,julia-calculus)
-       ("julia-difftests" ,julia-difftests)))
+     (list julia-calculus
+           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)))
+     (list julia-commonsubexpressions
+           julia-diffresults
+           julia-diffrules
+           julia-nanmath
+           julia-specialfunctions
+           julia-staticarrays))
     (home-page "https://github.com/JuliaDiff/ForwardDiff.jl")
     (synopsis "Methods to take multidimensional derivatives")
     (description "This package implements methods to take derivatives,
@@ -1577,7 +1988,7 @@ differentiation (AD).")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'adjust-tests
+         (add-after 'link-depot 'adjust-tests
            (lambda _
              (substitute* "test/runtests.jl"
                (("testset \\\"Abstract.*" all)
@@ -1588,6 +1999,31 @@ differentiation (AD).")
 arbitrary functions.")
     (license license:expat)))
 
+(define-public julia-functors
+  (package
+    (name "julia-functors")
+    (version "0.2.7")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/FluxML/Functors.jl")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "03ry1wn1y2jssq65l29bi6q4ki041aa6gl1nd2w6cgl00k2mrxf3"))))
+    (build-system julia-build-system)
+    (home-page "https://fluxml.ai/Functors.jl/stable/")
+    (synopsis "Design pattern for structures as in machine learning")
+    (description "This package provides tools to express a design pattern for
+dealing with large/ nested structures, as in machine learning and
+optimisation.  For large machine learning models it can be cumbersome or
+inefficient to work with parameters as one big, flat vector, and structs help
+in managing complexity; but it is also desirable to easily operate over all
+parameters at once, e.g. for changing precision or applying an optimiser
+update step.")
+    (license license:expat)))
+
 (define-public julia-fuzzycompletions
   (package
     (name "julia-fuzzycompletions")
@@ -1605,7 +2041,7 @@ arbitrary functions.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'skip-failing-test
+         (add-after 'link-depot 'skip-failing-test
            (lambda _
              (substitute* "test/runtests.jl"
                ((".*RPLE.*") "")))))))
@@ -1632,12 +2068,12 @@ arbitrary functions.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'adjust-test-suite
+         (add-after 'link-depot 'adjust-test-suite
            (lambda _
              (substitute* "test/runtests.jl"
                ((".*lapack.*") "")))))))
     (native-inputs
-     `(("julia-quaternions" ,julia-quaternions)))
+     (list julia-quaternions))
     (home-page "https://github.com/JuliaLinearAlgebra/GenericLinearAlgebra.jl")
     (synopsis "Generic numerical linear algebra")
     (description "The purpose of this package is partly to extend linear algebra
@@ -1663,7 +2099,7 @@ algebra routines written in Julia (except for optimized BLAS).")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'adjust-test-suite
+         (add-after 'link-depot 'adjust-test-suite
            (lambda _
              (substitute* "test/complex.jl"
                ;; expected Array{Int32,1}, got a value of type Array{Int64,1}
@@ -1683,6 +2119,77 @@ analysis of dense matrices.  The diagonal eigen-decomposition of normal
 matrices the Schur form is often more useful.")
     (license license:expat)))
 
+(define-public julia-geometrybasics
+  (package
+    (name "julia-geometrybasics")
+    (version "0.4.1")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/JuliaGeometry/GeometryBasics.jl")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "057j3hjpli3q5b98cqkpi4p10x2k9pyksrz62hjmv1kb5qzdvhsj"))))
+    (build-system julia-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'link-depot 'remove-earcut
+           (lambda _
+             (substitute* '("Project.toml"
+                            "src/GeometryBasics.jl")
+               ((".*EarCut.*") ""))))
+         (add-after 'link-depot 'skip-incompatible-test
+           (lambda _
+             (substitute* "test/runtests.jl"
+               (("@testset.*MetaT and heterogeneous data.*" all)
+                (string-append all "return\n")))))
+         ,@(if (target-64bit?)
+             '()
+             '((add-after 'unpack 'fix-tests-int32-i686
+                 (lambda _
+                   (substitute* "test/runtests.jl"
+                     (("Int64") "Int32")))))))))
+    (propagated-inputs
+     (list julia-itertools
+           julia-staticarrays
+           julia-structarrays
+           julia-tables))
+    (native-inputs
+     (list julia-offsetarrays))
+    (home-page "https://github.com/JuliaGeometry/GeometryBasics.jl")
+    (synopsis "Basic Geometry Types")
+    (description "This package aims to offer a standard set of Geometry types,
+which easily work with metadata, query frameworks on geometries and different
+memory layouts.  The aim is to create a solid basis for Graphics/Plotting,
+finite elements analysis, Geo applications, and general geometry manipulations
+- while offering a Julian API, that still allows performant C-interop.")
+    (license license:expat)))
+
+(define-public julia-gr
+  (package
+    (name "julia-gr")
+    (version "0.58.1")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/jheinen/GR.jl")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "18zxa1w2wmrf44c5l10qbh99zjdp7h94gxlymh47cf5kj5fc4xmx"))))
+    (build-system julia-build-system)
+    (propagated-inputs
+     (list julia-gr-jll))
+    (home-page "https://github.com/jheinen/GR.jl")
+    (synopsis "Plotting for Julia based on GR")
+    (description "This module provides a Julia interface to GR, a framework for
+visualisation applications.")
+    (license license:expat)))
+
 (define-public julia-graphics
   (package
     (name "julia-graphics")
@@ -1698,8 +2205,8 @@ matrices the Schur form is often more useful.")
          (base32 "10h1s09v7qkvrjr6l678zamb1p248n8jv4rrwkf8g7d2bpfz9amn"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-colors" ,julia-colors)
-       ("julia-nanmath" ,julia-nanmath)))
+     (list julia-colors
+           julia-nanmath))
     (home-page "https://github.com/JuliaGraphics/Graphics.jl")
     (synopsis "Base graphics in Julia")
     (description "@code{Graphics.jl} is an abstraction layer for graphical
@@ -1721,8 +2228,8 @@ operations in Julia.")
         (base32 "1g22dv3v7caakspv3pdahnqn937fzzsg9y87rj72hid9g8lxl1gm"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-abstracttrees" ,julia-abstracttrees)
-       ("julia-gumbo-jll" ,julia-gumbo-jll)))
+     (list julia-abstracttrees
+           julia-gumbo-jll))
     (home-page "https://github.com/JuliaWeb/Gumbo.jl")
     (synopsis "Julia wrapper around Google's gumbo C library for parsing HTML")
     (description "@code{Gumbo.jl} is a Julia wrapper around Google's gumbo
@@ -1774,13 +2281,13 @@ library for parsing HTML.")
                 (string-append all "return\n")))
              #t)))))
     (propagated-inputs
-     `(("julia-inifile" ,julia-inifile)
-       ("julia-mbedtls" ,julia-mbedtls)
-       ("julia-uris" ,julia-uris)))
+     (list julia-inifile
+           julia-mbedtls
+           julia-uris))
     ;; required for tests
     (inputs
-     `(("julia-json" ,julia-json)
-       ("julia-bufferedstreams" ,julia-bufferedstreams)))
+     (list julia-json
+           julia-bufferedstreams))
     (home-page "https://juliaweb.github.io/HTTP.jl/")
     (synopsis "HTTP support for Julia")
     (description "@code{HTTP.jl} is a Julia library for HTTP Messages,
@@ -1802,7 +2309,7 @@ implementing both a client and a server.")
          (base32 "0jvl4xn8f8k70sn473li5q62wbiycl5qi25b5k456h3a0j1lbiml"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-offsetarrays" ,julia-offsetarrays)))
+     (list julia-offsetarrays))
     (home-page "https://github.com/JuliaArrays/IdentityRanges.jl")
     (synopsis "Ranges that preserve indices of views")
     (description "@code{IdentityRanges} are Julia-language a helper type for
@@ -1848,12 +2355,12 @@ conditional ifelse.  It is similar to @code{Core.ifelse} but it is extendable.")
          (base32 "15zqxani1jjh8849s7rdps6b6prqdwv8yxx893y536vkpk7i07qd"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-axisarrays" ,julia-axisarrays)
-       ("julia-imagecore" ,julia-imagecore)
-       ("julia-reexport" ,julia-reexport)
-       ("julia-simpletraits" ,julia-simpletraits)))
+     (list julia-axisarrays
+           julia-imagecore
+           julia-reexport
+           julia-simpletraits))
     (native-inputs
-     `(("julia-unitful" ,julia-unitful)))
+     (list julia-unitful))
     (home-page "https://github.com/JuliaImages/ImageAxes.jl")
     (synopsis "Julia package for giving \"meaning\" to the axes of an image")
     (description "This small package supports the representation of images as
@@ -1878,8 +2385,8 @@ such arrays easy via traits.")
     (arguments
      `(#:tests? #f))    ; Cycle with ImageMagick.jl.
     (propagated-inputs
-     `(("julia-imagecore" ,julia-imagecore)
-       ("julia-reexport" ,julia-reexport)))
+     (list julia-imagecore
+           julia-reexport))
     ;(native-inputs
     ; `(("julia-imagemagick" ,julia-imagemagick)
     ;   ("julia-offsetarrays" ,julia-offsetarrays)
@@ -1909,16 +2416,16 @@ dependencies.")
     (arguments
      `(#:tests? #f))    ; Cycle with ImageMagick.jl.
     (propagated-inputs
-     `(("julia-abstractffts" ,julia-abstractffts)
-       ("julia-colors" ,julia-colors)
-       ("julia-colorvectorspace" ,julia-colorvectorspace)
-       ("julia-fixedpointnumbers" ,julia-fixedpointnumbers)
-       ("julia-graphics" ,julia-graphics)
-       ("julia-mappedarrays" ,julia-mappedarrays)
-       ("julia-mosaicviews" ,julia-mosaicviews)
-       ("julia-offsetarrays" ,julia-offsetarrays)
-       ("julia-paddedviews" ,julia-paddedviews)
-       ("julia-reexport" ,julia-reexport)))
+     (list julia-abstractffts
+           julia-colors
+           julia-colorvectorspace
+           julia-fixedpointnumbers
+           julia-graphics
+           julia-mappedarrays
+           julia-mosaicviews
+           julia-offsetarrays
+           julia-paddedviews
+           julia-reexport))
     ;(native-inputs
     ; `(("julia-aqua" ,julia-aqua)
     ;   ("julia-colorvectorspace" ,julia-colorvectorspace)
@@ -1951,10 +2458,10 @@ of packages designed to support image processing and computer vision.")
     (arguments
      `(#:tests? #f))    ; Cycle with ReferenceTests.jl.
     (propagated-inputs
-     `(("julia-crayons" ,julia-crayons)
-       ("julia-imagebase" ,julia-imagebase)
-       ("julia-imagecore" ,julia-imagecore)
-       ("julia-requires" ,julia-requires)))
+     (list julia-crayons
+           julia-imagebase
+           julia-imagecore
+           julia-requires))
     ;(native-inputs
     ; `(("julia-coordinatetransformations" ,julia-coordinatetransformations)
     ;   ("julia-imagemagick" ,julia-imagemagick)
@@ -1989,7 +2496,7 @@ be downscaled to fit into the size of your active terminal session.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'skip-failing-test
+         (add-after 'link-depot 'skip-failing-test
            (lambda _
              ;; These tests try to download from the imagemagick.org
              (substitute* "test/runtests.jl"
@@ -2000,18 +2507,18 @@ be downscaled to fit into the size of your active terminal session.")
                (("test (B == map)" _ test) (string-append "test_nowarn " test)))
              #t)))))
     (propagated-inputs
-     `(("julia-fileio" ,julia-fileio)
-       ("julia-imagecore" ,julia-imagecore)
-       ("julia-imagemagick-jll" ,julia-imagemagick-jll)))
+     (list julia-fileio
+           julia-imagecore
+           julia-imagemagick-jll))
     (native-inputs
-     `(("julia-colors" ,julia-colors)
-       ("julia-colorvectorspace" ,julia-colorvectorspace)
-       ("julia-imagemetadata" ,julia-imagemetadata)
-       ("julia-imageshow" ,julia-imageshow)
-       ("julia-imagetransformations" ,julia-imagetransformations)
-       ("julia-indirectarrays" ,julia-indirectarrays)
-       ("julia-offsetarrays" ,julia-offsetarrays)
-       ("julia-zipfile" ,julia-zipfile)))
+     (list julia-colors
+           julia-colorvectorspace
+           julia-imagemetadata
+           julia-imageshow
+           julia-imagetransformations
+           julia-indirectarrays
+           julia-offsetarrays
+           julia-zipfile))
     (home-page "https://github.com/JuliaIO/ImageMagick.jl")
     (synopsis "Thin wrapper for ImageMagick")
     (description "This package provides a wrapper around ImageMagick version 6.
@@ -2033,14 +2540,14 @@ It was split off from @code{Images.jl} to make image I/O more modular.")
          (base32 "0iv154ms370xgcr56bwsjl13iwmy671cbxjl9ld5yfj85pclcwi1"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-axisarrays" ,julia-axisarrays)
-       ("julia-imageaxes" ,julia-imageaxes)
-       ("julia-imagecore" ,julia-imagecore)
-       ("julia-indirectarrays" ,julia-indirectarrays)))
+     (list julia-axisarrays
+           julia-imageaxes
+           julia-imagecore
+           julia-indirectarrays))
     (native-inputs
-     `(("julia-offsetarrays" ,julia-offsetarrays)
-       ("julia-simpletraits" ,julia-simpletraits)
-       ("julia-unitful" ,julia-unitful)))
+     (list julia-offsetarrays
+           julia-simpletraits
+           julia-unitful))
     (home-page "https://github.com/JuliaImages/ImageMetadata.jl")
     (synopsis "Julia package for images having metadata")
     (description "@code{ImageMetadata} is a simple package providing utilities
@@ -2067,11 +2574,11 @@ information about the detector used to acquire the image.")
     (arguments
      `(#:tests? #f))    ; cycle with ImageMagick.jl.
     (propagated-inputs
-     `(("julia-fileio" ,julia-fileio)
-       ("julia-imagebase" ,julia-imagebase)
-       ("julia-imagecore" ,julia-imagecore)
-       ("julia-offsetarrays" ,julia-offsetarrays)
-       ("julia-stackviews" ,julia-stackviews)))
+     (list julia-fileio
+           julia-imagebase
+           julia-imagecore
+           julia-offsetarrays
+           julia-stackviews))
     ;(native-inputs
     ; `(("julia-imagedistances" ,julia-imagedistances)
     ;   ("julia-imagemagick" ,julia-imagemagick)
@@ -2102,15 +2609,15 @@ inline presentation of greyscale or color images.")
     (arguments
      `(#:tests? #f))    ; Cycle with ImageMagick.jl.
     (propagated-inputs
-     `(("julia-axisalgorithms" ,julia-axisalgorithms)
-       ("julia-colorvectorspace" ,julia-colorvectorspace)
-       ("julia-coordinatetransformations" ,julia-coordinatetransformations)
-       ("julia-identityranges" ,julia-identityranges)
-       ("julia-imagecore" ,julia-imagecore)
-       ("julia-interpolations" ,julia-interpolations)
-       ("julia-offsetarrays" ,julia-offsetarrays)
-       ("julia-rotations" ,julia-rotations)
-       ("julia-staticarrays" ,julia-staticarrays)))
+     (list julia-axisalgorithms
+           julia-colorvectorspace
+           julia-coordinatetransformations
+           julia-identityranges
+           julia-imagecore
+           julia-interpolations
+           julia-offsetarrays
+           julia-rotations
+           julia-staticarrays))
     ;(native-inputs
     ; `(("julia-imagemagick" ,julia-imagemagick)
     ;   ("julia-referencetests" ,julia-referencetests)
@@ -2121,6 +2628,39 @@ inline presentation of greyscale or color images.")
 rotation, and other spatial transformations of arrays.")
     (license license:expat)))
 
+(define-public julia-indexablebitvectors
+  (package
+    (name "julia-indexablebitvectors")
+    (version "1.0.0")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/BioJulia/IndexableBitVectors.jl")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "1khaycydwa31sxwvrrvvlylpzdb77kkxfmb8cax3i22ix0c2nmlc"))))
+    (build-system julia-build-system)
+    ;; Package without Project.toml
+    (arguments
+     '(#:julia-package-name "IndexableBitVectors"
+       #:julia-package-uuid "1cb3b9ac-1ffd-5777-9e6b-a3d42300664d"))
+    (home-page "https://github.com/BioJulia/IndexableBitVectors.jl")
+    (synopsis "Bit vectors operations with extremely fast speed")
+    (description "This package exports following operations over bit vectors
+with extremely fast speed while keeping extra memory usage small:
+@itemize
+@item @code{getindex(bv::IndexableBitVectors, i::Integer)}: @code{i}-th
+element of @code{bv}
+@item @code{rank(b::Bool, bv::AbstractIndexableBitVector, i::Integer)}: the
+number of occurrences of bit @code{b} in @code{bv[1:i]}
+@item @code{select(b::Bool, bv::AbstractIndexableBitVector, i::Integer)}: the
+index of i-th occurrence of @code{b} in @code{bv}.
+@end itemize
+and other shortcuts or types.")
+    (license license:expat)))
+
 (define-public julia-indexing
   (package
     (name "julia-indexing")
@@ -2157,9 +2697,9 @@ out of dictionaries, tuples, etc, extending this ability beyond
          (base32 "0l0jq0jnr9z3k431ni82xycq7mqapgxrbrx4yyk6lycvi41ipm4s"))))
     (build-system julia-build-system)
     (native-inputs
-     `(("julia-colors" ,julia-colors)
-       ("julia-fixedpointnumbers" ,julia-fixedpointnumbers)
-       ("julia-mappedarrays" ,julia-mappedarrays)))
+     (list julia-colors
+           julia-fixedpointnumbers
+           julia-mappedarrays))
     (home-page "https://github.com/JuliaArrays/IndirectArrays.jl")
     (synopsis "Julia implementation of indexed arrays")
     (description "An @code{IndirectArray} is one that encodes data using a
@@ -2169,6 +2709,39 @@ assigned its own index, which is used to retrieve the value from the
 indexed images, sometimes called \"colormap images\" or \"paletted images.\"")
     (license license:expat)))
 
+(define-public julia-infinity
+  (package
+    (name "julia-infinity")
+    (version "0.2.4")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/cjdoris/Infinity.jl")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "1941lwvrdjnrynigzixxin3chpg1ba6xplvcwc89x0f6z658hwmm"))))
+    (build-system julia-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'link-depot 'remove-timezones.jl
+           (lambda _
+             (substitute* "test/runtests.jl"
+               (("using TimeZones.*") "")
+               ((".*infextendedtime.*") ""))
+             #t)))))
+    (propagated-inputs
+     (list julia-requires))
+    (native-inputs
+     (list julia-compat))
+    (home-page "https://docs.juliahub.com/Infinity/")
+    (synopsis "Representation of infinity in Julia")
+    (description "This package provides representations for infinity and
+negative infinity in Julia.")
+    (license license:expat)))
+
 (define-public julia-inifile
   (package
     (name "julia-inifile")
@@ -2203,19 +2776,25 @@ interfaces with @file{.ini} files.")
         (sha256
          (base32 "1236c20k388qlh7k74mhf7hkbn0vf7ss8b1rgh1a6aj0234ayfnc"))))
     (build-system julia-build-system)
+    (arguments
+     `(#:parallel-tests? #f
+       ;; XXXX: Unexpected failures for i686, e.g.,
+       ;; Got exception outside of a @test
+       ;; OverflowError: 96908232 * 106943408 overflowed for type Int32
+       ;; Disable as stopgap.
+       #:tests? ,(not (target-x86-32?))))
     (propagated-inputs
-     `(("julia-axisalgorithms" ,julia-axisalgorithms)
-       ("julia-offsetarrays" ,julia-offsetarrays)
-       ("julia-ratios" ,julia-ratios)
-       ("julia-requires" ,julia-requires)
-       ("julia-staticarrays" ,julia-staticarrays)
-       ("julia-woodburymatrices" ,julia-woodburymatrices)))
+     (list julia-axisalgorithms
+           julia-offsetarrays
+           julia-ratios
+           julia-requires
+           julia-staticarrays
+           julia-woodburymatrices))
     (native-inputs
-     `(("julia-dualnumbers" ,julia-dualnumbers)
-       ("julia-forwarddiff" ,julia-forwarddiff)
-       ("julia-offsetarrays" ,julia-offsetarrays)
-       ("julia-unitful" ,julia-unitful)
-       ("julia-zygote" ,julia-zygote)))
+     (list julia-dualnumbers
+           julia-forwarddiff
+           julia-offsetarrays
+           julia-unitful julia-zygote))
     (home-page "https://github.com/JuliaMath/Interpolations.jl")
     (synopsis "Continuous interpolation of discrete datasets")
     (description "This package implements a variety of interpolation schemes for
@@ -2237,10 +2816,24 @@ and exceptional performance.")
         (sha256
          (base32 "0gsz89cd3iygbl5qr389k9vwpg7w1nk0s90g25nsmk34y9hifxag"))))
     (build-system julia-build-system)
+    (arguments
+     `(#:phases
+       ,@(if (target-x86-32?)
+           '((modify-phases %standard-phases
+               (add-after 'unpack 'remove-failing-test-i686
+                 (lambda _
+                   (substitute* "test/runtests.jl"
+                     ;; For some reason, the output is correct but the test
+                     ;; is considered as failed:
+                     ;; Expression: duration(ClosedInterval(A, B)) ≡ 60
+                     ;; Evaluated: 60 ≡ 60
+                     (("@test duration\\(ClosedInterval")
+                      "@test_broken duration(ClosedInterval"))))))
+           '(%standard-phases))))
     (propagated-inputs
-     `(("julia-ellipsisnotation" ,julia-ellipsisnotation)))
+     (list julia-ellipsisnotation))
     (native-inputs
-     `(("julia-offsetarrays" ,julia-offsetarrays)))
+     (list julia-offsetarrays))
     (home-page "https://github.com/JuliaMath/IntervalSets.jl")
     (synopsis "Interval Sets for Julia")
     (description "This package is intended to implement a \"minimal\" foundation
@@ -2249,6 +2842,31 @@ encourage type-piracy for the reason that only one interval package can
 unambiguously define the @code{..} and @code{±} operators.")
     (license license:expat)))
 
+(define-public julia-intervaltrees
+  ;; Last upstream release on May 2020 and this last release does not contain
+  ;; the file Project.toml.
+  (let ((commit "e37edab61568d08141a3e9c25ec55caac21e5aa5")
+        (revision "1"))
+    (package
+      (name "julia-intervaltrees")
+      (version (git-version "1.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/BioJulia/IntervalTrees.jl")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "01x48a5zrx0833s1kjhf0ml4x9xz8xja4ymran770akmf6968yl9"))))
+      (build-system julia-build-system)
+      (home-page "https://github.com/BioJulia/IntervalTrees.jl")
+      (synopsis "Interval Trees for Julia")
+      (description "This package provides an implementation of an associative
+container mapping @code{(K,V)} pairs via the type @code{IntervalTree{K, V}}.
+The type @code{K} may be any ordered type.")
+      (license license:expat))))
+
 (define-public julia-invertedindices
   (package
     (name "julia-invertedindices")
@@ -2264,7 +2882,7 @@ unambiguously define the @code{..} and @code{±} operators.")
          (base32 "1179z20yxnkyziip7gn26wr1g3k3ssl1ci7pig3khc900f62di46"))))
     (build-system julia-build-system)
     (native-inputs
-     `(("julia-offsetarrays" ,julia-offsetarrays)))
+     (list julia-offsetarrays))
     (home-page "https://github.com/mbauman/InvertedIndices.jl")
     (synopsis "Index type that allows for inverted selections")
     (description "This package just exports one type: the @code{InvertedIndex},
@@ -2306,11 +2924,11 @@ as a string together with the return value.")
        (file-name (git-file-name name version))
        (sha256
         (base32 "11334fcg2slpwcj0raxf457brhf7pxglgxc6cy8q58ggrpxqfqql"))))
-    (arguments
-     '(#:tests? #f))                    ;require Documenter, not packaged yet
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-macrotools" ,julia-macrotools)))
+     (list julia-macrotools))
+    (native-inputs
+     (list julia-documenter))
     (home-page "https://github.com/FluxML/IRTools.jl")
     (synopsis "Simple and flexible IR format")
     (description "This package provides a simple and flexible IR format,
@@ -2359,6 +2977,25 @@ extensions to the iterator interface.")
      "Common functional iterator patterns (formerly @code{Iterators.jl}).")
     (license license:expat)))
 
+(define-public julia-jive
+  (package
+    (name "julia-jive")
+    (version "0.2.20")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/wookay/Jive.jl")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0khwsdh8472jxcfi9lqw14l49sqlbsixql1jb4irnyajxkdjrcsf"))))
+    (build-system julia-build-system)
+    (home-page "https://github.com/wookay/Jive.jl")
+    (synopsis "Julia package to help with writing tests")
+    (description "@code{Jive.jl} is a Julia package to help with writing tests.")
+    (license license:expat)))
+
 (define-public julia-json
   (package
     (name "julia-json")
@@ -2374,10 +3011,10 @@ extensions to the iterator interface.")
         (base32 "1f9k613kbknmp4fgjxvjaw4d5sfbx8a5hmcszmp1w9rqfqngjx9m"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-datastructures" ,julia-datastructures)
-       ("julia-fixedpointnumbers" ,julia-fixedpointnumbers)
-       ("julia-parsers" ,julia-parsers)
-       ("julia-offsetarrays" ,julia-offsetarrays)))
+     (list julia-datastructures
+           julia-fixedpointnumbers
+           julia-parsers
+           julia-offsetarrays))
     (home-page "https://github.com/JuliaIO/JSON.jl")
     (synopsis "JSON parsing and printing library for Julia")
     (description "@code{JSON.jl} is a pure Julia module which supports parsing
@@ -2399,18 +3036,40 @@ and printing JSON documents.")
          (base32 "11z5maz7v50wd99id8z7838higza0cllh2amkdkrlskbri3v2f17"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-parsers" ,julia-parsers)
-       ("julia-structtypes" ,julia-structtypes)))
+     (list julia-parsers
+           julia-structtypes))
     (home-page "https://github.com/quinnj/JSON3.jl")
     (synopsis "JSON package for Julia")
     (description "This package provides another JSON package for Julia, with a
 focus on speed and slick struct mapping.")
     (license license:expat)))
 
+(define-public julia-latexstrings
+  (package
+    (name "julia-latexstrings")
+    (version "1.2.1")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/stevengj/LaTeXStrings.jl")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "117z27krcf8fydgp6mb0pgn75r4gng9qs7v90qb4bqzsry3faadp"))))
+    (build-system julia-build-system)
+    (native-inputs
+     (list julia-documenter))
+    (home-page "https://github.com/stevengj/LaTeXStrings.jl")
+    (synopsis "Input and display of LaTeX equation strings")
+    (description "This is a small package to make it easier to type LaTeX
+equations in string literals in the Julia language.")
+    (license license:expat)))
+
 (define-public julia-lazyarrays
   (package
     (name "julia-lazyarrays")
-    (version "0.21.14")
+    (version "0.22.2")
     (source
       (origin
         (method git-fetch)
@@ -2419,16 +3078,25 @@ focus on speed and slick struct mapping.")
                (commit (string-append "v" version))))
         (file-name (git-file-name name version))
         (sha256
-         (base32 "130kqyfk0h17s9dr9r1p9n1dgvzzlb1jwn6pj14lwr83s36glpv1"))))
+         (base32 "17rhlrmgfvdw8w62pg32ikr9j4xy2ylr7mx7ar0hnpzryv929rp5"))))
     (build-system julia-build-system)
+    (arguments
+     `(#:phases
+       ,@(if (target-64bit?)
+           '(%standard-phases)
+           '((modify-phases %standard-phases
+               (add-after 'unpack 'fix-tests-int32-i686
+                 (lambda _
+                   (substitute* "test/multests.jl"
+                     (("Int64") "Int32")))))))))
     (propagated-inputs
-     `(("julia-arraylayouts" ,julia-arraylayouts)
-       ("julia-fillarrays" ,julia-fillarrays)
-       ("julia-macrotools" ,julia-macrotools)
-       ("julia-matrixfactorizations" ,julia-matrixfactorizations)
-       ("julia-staticarrays" ,julia-staticarrays)))
+     (list julia-arraylayouts
+           julia-fillarrays
+           julia-macrotools
+           julia-matrixfactorizations
+           julia-staticarrays))
     (native-inputs
-     `(("julia-tracker" ,julia-tracker)))
+     (list julia-tracker))
     (home-page "https://github.com/JuliaArrays/LazyArrays.jl")
     (synopsis "Lazy arrays and linear algebra")
     (description "This package supports lazy analogues of array operations like
@@ -2451,9 +3119,9 @@ implementation of matrix-free methods for iterative solvers.")
          (base32 "0rvms3mmq8a1viqlyzdgs2ccddcy6j0c677dlb8m5nk6hkiwr16n"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-docstringextensions" ,julia-docstringextensions)))
+     (list julia-docstringextensions))
     (native-inputs
-     `(("julia-offsetarrays" ,julia-offsetarrays)))
+     (list julia-offsetarrays))
     (home-page "https://github.com/JuliaStats/LogExpFunctions.jl")
     (synopsis "Special functions based on @code{log} and @code{exp}")
     (description "Various special functions based on log and exp moved from
@@ -2497,12 +3165,21 @@ that let you do deep transformations of code.")
         (sha256
          (base32 "0l5adird8m1cmnsxwhzi5hcr7q9bm1rf7a6018zc7kcn2yxdshy3"))))
     (build-system julia-build-system)
+    (arguments
+     `(#:phases
+       ,@(if (target-64bit?)
+           '(%standard-phases)
+           '((modify-phases %standard-phases
+               (add-after 'unpack 'fix-tests-int32-i686
+                 (lambda _
+                   (substitute* "test/runtests.jl"
+                     (("Int64") "Int32")))))))))
     (propagated-inputs
-     `(("julia-fixedpointnumbers" ,julia-fixedpointnumbers)))
+     (list julia-fixedpointnumbers))
     (native-inputs
-     `(("julia-colortypes" ,julia-colortypes)
-       ("julia-fixedpointnumbers" ,julia-fixedpointnumbers)
-       ("julia-offsetarrays" ,julia-offsetarrays)))
+     (list julia-colortypes
+           julia-fixedpointnumbers
+           julia-offsetarrays))
     (home-page "https://github.com/JuliaArrays/MappedArrays.jl")
     (synopsis "Lazy in-place transformations of arrays")
     (description "This package implements \"lazy\" in-place elementwise
@@ -2530,7 +3207,7 @@ comes from the fact that @code{M == map(f, A)}.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'skip-failing-test
+         (add-after 'link-depot 'skip-failing-test
            (lambda _
              ;; Tests with math functions are hard.
              (substitute* "test/test_ul.jl"
@@ -2539,7 +3216,7 @@ comes from the fact that @code{M == map(f, A)}.")
                (("test String") "test_nowarn String"))
              #t)))))
     (propagated-inputs
-     `(("julia-arraylayouts" ,julia-arraylayouts)))
+     (list julia-arraylayouts))
     (home-page "https://github.com/JuliaMatrices/MatrixFactorizations.jl")
     (synopsis "Julia package to contain non-standard matrix factorizations")
     (description "A Julia package to contain non-standard matrix factorizations.
@@ -2571,7 +3248,8 @@ may include other factorizations such as the LQ factorization.")
              (substitute* "test/runtests.jl"
                (("testhost =") "return #"))
              #t)))))
-    (propagated-inputs `(("julia-mbedtls-jll" ,julia-mbedtls-jll)))
+    (propagated-inputs
+     (list julia-mbedtls-jll))
     (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
@@ -2593,13 +3271,13 @@ TLS} and cryptography C library for Julia.")
          (base32 "05p3f0gr4sv4maq8cix5fi8ldq0zagswqsd43xn6fhy046f936mz"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-calculus" ,julia-calculus)
-       ("julia-recipesbase" ,julia-recipesbase)
-       ("julia-requires" ,julia-requires)))
+     (list julia-calculus
+           julia-recipesbase
+           julia-requires))
     (native-inputs
-     `(("julia-quadgk" ,julia-quadgk)
-       ("julia-specialfunctions" ,julia-specialfunctions)
-       ("julia-unitful" ,julia-unitful)))
+     (list julia-quadgk
+           julia-specialfunctions
+           julia-unitful))
     (home-page "https://juliaphysics.github.io/Measurements.jl/stable/")
     (synopsis "Error propagation calculator and library")
     (description "@code{Measurements.jl} is an error propagation calculator and
@@ -2631,10 +3309,60 @@ expressions involving differing types of units that are then evaluated,
 resolving them into absolute units.")
     (license license:expat)))
 
+(define-public julia-media
+  (package
+    (name "julia-media")
+    (version "0.5.0")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/JunoLab/Media.jl")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "05jq9j3vs8yfj2lwz3sh1vk5rha06xdcikp9s2q3dn316vryy6di"))))
+    (build-system julia-build-system)
+    ;; Package without Project.toml
+    (arguments
+     '(#:julia-package-name "Media"
+       #:julia-package-uuid "e89f7d12-3494-54d1-8411-f7d8b9ae1f27"))
+    (propagated-inputs
+     (list julia-macrotools))
+    (home-page "https://github.com/JunoLab/Media.jl")
+    (synopsis "Unified measure and coordinates types")
+    (description "This package provides a display system which enables the
+user handle multiple input/output devices and decide what media types get
+displayed where.")
+    (license license:expat)))
+
+(define-public julia-millboard
+  (package
+    (name "julia-millboard")
+    (version "0.2.5")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/wookay/Millboard.jl")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0k9jqgp285qhckldvvsmfk6s69dcr8s74m2fijgm2vxjj2gqjs1n"))))
+    (build-system julia-build-system)
+    (native-inputs
+     (list julia-jive))
+    (home-page "https://github.com/wookay/Millboard.jl")
+    (synopsis "Displaying data in tables for Julia")
+    (description
+     "@code{Millboard.jl} provides a library for getting data in a tablized
+format to arrange into rows and columns of cells.")
+    (license license:expat)))
+
 (define-public julia-missings
   (package
     (name "julia-missings")
-    (version "1.0.0")
+    (version "1.0.2")
     (source
       (origin
         (method git-fetch)
@@ -2643,10 +3371,10 @@ resolving them into absolute units.")
                (commit (string-append "v" version))))
         (file-name (git-file-name name version))
         (sha256
-         (base32 "131ma44yvswvj85jdjhm37frzfz46cc60lwj65a9jcmgc77dshsm"))))
+         (base32 "1k481rm5lahmjyh34j177d4n10svgr0wm7ps5m3ar3xx6nr26ad5"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-dataapi" ,julia-dataapi)))
+     (list julia-dataapi))
     (home-page "https://github.com/JuliaData/Missings.jl")
     (synopsis "Additional missing value support for Julia")
     (description "This package provides additional functionality for working
@@ -2668,7 +3396,7 @@ with @code{missing} values in Julia.")
          (base32 "0h1cd7cr4c4cnpqyj3180113gdbvcc047lqphp8a8gq5smp3c059"))))
     (build-system julia-build-system)
     (native-inputs
-     `(("julia-datastructures" ,julia-datastructures)))
+     (list julia-datastructures))
     (home-page "https://thautwarm.github.io/MLStyle.jl/latest/")
     (synopsis "Julia functional programming infrastructures")
     (description "This package provides consistent and extensible functional
@@ -2678,7 +3406,7 @@ programming infrastructures, and metaprogramming facilities.")
 (define-public julia-mocking
   (package
     (name "julia-mocking")
-    (version "0.7.1")
+    (version "0.7.3")
     (source
       (origin
         (method git-fetch)
@@ -2687,10 +3415,11 @@ programming infrastructures, and metaprogramming facilities.")
                (commit (string-append "v" version))))
         (file-name (git-file-name name version))
         (sha256
-         (base32 "10jz716v6i3gpd403rmcrip6cncjl9lqr12cdl321x1994a5g8ck"))))
+         (base32 "1cg2is83bjmrchmmxcgx57k8c9b9vlamrw38v4fdhbb6d4six5cg"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-exprtools" ,julia-exprtools)))
+     (list julia-compat
+           julia-exprtools))
     (home-page "https://github.com/invenia/Mocking.jl")
     (synopsis "Overload Julia function calls")
     (description "The purpose of this package is to allow Julia function calls
@@ -2714,9 +3443,9 @@ to be temporarily overloaded for the purpose of testing.")
     (arguments
      `(#:tests? #f))    ; Cycle with ImageCore.jl
     (propagated-inputs
-     `(("julia-mappedarrays" ,julia-mappedarrays)
-       ("julia-paddedviews" ,julia-paddedviews)
-       ("julia-stackviews" ,julia-stackviews)))
+     (list julia-mappedarrays
+           julia-paddedviews
+           julia-stackviews))
     ;(native-inputs
     ; `(("julia-colorvectorspace" ,julia-colorvectorspace)
     ;   ("julia-imagecore" ,julia-imagecore)))
@@ -2763,8 +3492,24 @@ Julia, with type-driven, overloadable packing/unpacking functionality.")
         (sha256
          (base32 "1isyj8h4nx96cr6892d154v8pw1nhr7mjyz5bd6ffr2mkzb2bq4f"))))
     (build-system julia-build-system)
+    (arguments
+     `(#:phases
+       ,@(if (target-x86-32?)
+           '((modify-phases %standard-phases
+               (add-after 'unpack 'remove-failing-test-i686
+                 (lambda _
+                   (substitute* "test/utilities.jl"
+                     ;; Non-deterministic returned value, e.g.,
+                     ;;    Expression: n == @allocated(f())
+                     ;;    Evaluated: 240 == 120
+                     ;; and for some other values:
+                     ;;    Got correct result, please change to @test
+                     ;; so @test_broken is not enough.
+                     (("@test n == @allocated f\\(\\)")
+                      " "))))))
+           '(%standard-phases))))
     (propagated-inputs
-     `(("julia-offsetarrays" ,julia-offsetarrays)))
+     (list julia-offsetarrays))
     (home-page "https://github.com/jump-dev/MutableArithmetics.jl")
     (synopsis "Interface for arithmetics on mutable types in Julia")
     (description "MutableArithmetics is a Julia package which allows:
@@ -2810,12 +3555,12 @@ still being completely generic
          (base32 "0n8qh5a2ghjx1j70zxn0hmh8gzpa46kmjg8di879y9974bfk0f98"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-diffresults" ,julia-diffresults)
-       ("julia-finitediff" ,julia-finitediff)
-       ("julia-forwarddiff" ,julia-forwarddiff)))
+     (list julia-diffresults
+           julia-finitediff
+           julia-forwarddiff))
     (native-inputs
-     `(("julia-optimtestproblems" ,julia-optimtestproblems)
-       ("julia-recursivearraytools" ,julia-recursivearraytools)))
+     (list julia-optimtestproblems
+           julia-recursivearraytools))
     (home-page "https://github.com/JuliaNLSolvers/NLSolversBase.jl")
     (synopsis "Optimization and equation solver software in JuliaNLSolvers")
     (description "This package aims at establishing common ground for Optim.jl,
@@ -2827,7 +3572,7 @@ interface to interact with these types.")
 (define-public julia-nnlib
   (package
     (name "julia-nnlib")
-    (version "0.7.25")
+    (version "0.7.29")
     (source
       (origin
         (method git-fetch)
@@ -2836,25 +3581,25 @@ interface to interact with these types.")
                (commit (string-append "v" version))))
         (file-name (git-file-name name version))
         (sha256
-         (base32 "0vp4kcn9ivkhmqgkyvnabcdqi6pv7ghbmjc1llkwv1kzhylyf86p"))))
+         (base32 "16vn5w5274kcywh1xp0zqjk5q10xrk125aznz5av6wifwrvghk8s"))))
     (build-system julia-build-system)
     (arguments
-     `(#:tests? #f      ; Test suite not updated for ChainRulesTestUtils-1.0.
-       #:phases
+     `(#:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'drop-cuda-support
+         (add-after 'link-depot 'skip-cuda-tests
            (lambda _
              (substitute* "test/runtests.jl"
-               (("using CUDA") ""))
+               (("using CUDA") "")
+               (("&& CUDA\\.functional\\(\\)") ""))
              (setenv "NNLIB_TEST_CUDA" "false"))))))
     (propagated-inputs
-     `(("julia-adapt" ,julia-adapt)
-       ("julia-chainrulescore" ,julia-chainrulescore)
-       ("julia-requires" ,julia-requires)))
+     (list julia-adapt
+           julia-chainrulescore
+           julia-requires))
     (native-inputs
-     `(("julia-chainrulestestutils" ,julia-chainrulestestutils)
-       ("julia-stablerngs" ,julia-stablerngs)
-       ("julia-zygote" ,julia-zygote)))
+     (list julia-chainrulestestutils
+           julia-stablerngs
+           julia-zygote))
     (home-page "https://github.com/FluxML/NNlib.jl")
     (synopsis "Neural Network primitives with multiple backends")
     (description "This package will provide a library of functions useful for
@@ -2877,7 +3622,8 @@ doesn't provide any other \"high-level\" functionality like layers or AD.")
          (base32 "10h47x5ws42pkqjccimaz0yxfvz41w0yazq6inamfk4lg5g2g3d9"))))
     (build-system julia-build-system)
     (arguments
-     `(#:julia-package-name "OptimTestProblems"))
+     `(#:julia-package-name "OptimTestProblems"
+       #:julia-package-uuid "cec144fc-5a64-5bc6-99fb-dde8f63e154c"))
     (home-page "https://github.com/JuliaNLSolvers/OptimTestProblems.jl")
     (synopsis "Collection of optimization test problems")
     (description "The purpose of this package is to provide test problems for
@@ -2921,7 +3667,7 @@ which they were added to the collection.")
         (base32 "0j5a8ar8yc0j9h87gwfyrcqm23wpyv5yv5gn8vzilpg4vr0fiasc"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-adapt" ,julia-adapt)))
+     (list julia-adapt))
     ;; CatIndices depends on OffsetArrays, introducing a recursive dependency
     (arguments '(#:tests? #f))
     (home-page "https://juliaarrays.github.io/OffsetArrays.jl/stable/")
@@ -2945,10 +3691,10 @@ languages like Fortran.")
         (sha256
          (base32 "0ran2vj6ahlzib0g77y7g0jhavy3k9s2mqq23ybpgp9z677wf26h"))))
     (build-system julia-build-system)
-    (arguments
-     '(#:tests? #f))                    ;require Documenter, not packaged yet
     (propagated-inputs
-     `(("julia-offsetarrays" ,julia-offsetarrays)))
+     (list julia-offsetarrays))
+    (native-inputs
+     (list julia-documenter))
     (home-page "https://github.com/JuliaArrays/PaddedViews.jl")
     (synopsis "Add virtual padding to the edges of an array")
     (description "@code{PaddedViews} provides a simple wrapper type,
@@ -2973,8 +3719,8 @@ Multiple arrays may be \"promoted\" to have common indices using the
          (base32 "0b8lawi7kcws4axfsdf023gyxca15irl648ciyi1kw3wghz3pfi2"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-orderedcollections" ,julia-orderedcollections)
-       ("julia-unpack" ,julia-unpack)))
+     (list julia-orderedcollections
+           julia-unpack))
     (home-page "https://github.com/mauro3/Parameters.jl")
     (synopsis "Numerical-model parameter helpers")
     (description "This package contains types with default field values, keyword
@@ -3042,8 +3788,8 @@ actual computation.")
          (base32 "1fd27w9z1vhz0d1bzrs5vcavpb5r5jviyh27d9c4ka37phz4xvmh"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-plotutils" ,julia-plotutils)
-       ("julia-requires" ,julia-requires)))
+     (list julia-plotutils
+           julia-requires))
     (home-page "https://github.com/JuliaPlots/PlotThemes.jl")
     (synopsis "Themes for the Julia plotting package Plots.jl")
     (description
@@ -3053,7 +3799,7 @@ actual computation.")
 (define-public julia-plotutils
   (package
     (name "julia-plotutils")
-    (version "1.0.11")
+    (version "1.0.15")
     (source
       (origin
         (method git-fetch)
@@ -3062,14 +3808,14 @@ actual computation.")
                (commit (string-append "v" version))))
         (file-name (git-file-name name version))
         (sha256
-         (base32 "0pqd3yvs3w48sr50c8rcqk5pzvpdy9nf4kimcvyz9dvwc3jgh6rd"))))
+         (base32 "12aw5gkkcfhpczv2w510k65w1j0hjnh825ihimi223v8plsi5105"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-colors" ,julia-colors)
-       ("julia-colorschemes" ,julia-colorschemes)
-       ("julia-reexport" ,julia-reexport)))
+     (list julia-colors
+           julia-colorschemes
+           julia-reexport))
     (native-inputs
-     `(("julia-stablerngs" ,julia-stablerngs)))
+     (list julia-stablerngs))
     (home-page "https://github.com/JuliaPlots/PlotUtils.jl")
     (synopsis "Helper algorithms for building plotting components")
     (description "This package contains generic helper algorithms for building
@@ -3079,7 +3825,7 @@ plotting components.")
 (define-public julia-pooledarrays
   (package
     (name "julia-pooledarrays")
-    (version "1.2.1")
+    (version "1.3.0")
     (source
       (origin
         (method git-fetch)
@@ -3088,10 +3834,10 @@ plotting components.")
                (commit (string-append "v" version))))
         (file-name (git-file-name name version))
         (sha256
-         (base32 "0ihvhzkxdw4qf0i6sbrickhdcwkmlin9zyixxn9xvgzm8nc0iwqy"))))
+         (base32 "0qdwvf1p5z6z0q4s4hn85ysd8wq47zy6hlzddc5ijvhk86ccqlrr"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-dataapi" ,julia-dataapi)))
+     (list julia-dataapi))
     (home-page "https://github.com/JuliaData/PooledArrays.jl")
     (synopsis "Pooled representation of arrays in Julia")
     (description "This package provides a pooled representation of arrays for
@@ -3113,8 +3859,8 @@ purposes of compression when there are few unique elements.")
          (base32 "1wxy6ak7f3hvibcgc8q88cgkf9zvi649mmjy1zlkx1qk80hgvz23"))))
     (build-system julia-build-system)
     (native-inputs
-     `(("julia-forwarddiff" ,julia-forwarddiff)
-       ("julia-reversediff" ,julia-reversediff)))
+     (list julia-forwarddiff
+           julia-reversediff))
     (home-page "https://github.com/timholy/PositiveFactorizations.jl")
     (synopsis "Positive-definite \"approximations\" to matrices")
     (description "@code{PositiveFactorizations} is a package for computing a
@@ -3167,16 +3913,16 @@ everything from run time algorithm choice to code generation at compile time.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'skip-color-tests
+         (add-after 'link-depot 'skip-color-tests
            (lambda _
              (substitute* "test/text_backend.jl"
                ((".*colors\\.jl.*") ""))
              #t)))))
     (propagated-inputs
-     `(("julia-crayons" ,julia-crayons)
-       ("julia-formatting" ,julia-formatting)
-       ("julia-reexport" ,julia-reexport)
-       ("julia-tables" ,julia-tables)))
+     (list julia-crayons
+           julia-formatting
+           julia-reexport
+           julia-tables))
     (home-page "https://github.com/ronisbr/PrettyTables.jl")
     (synopsis "Print data in formatted tables")
     (description "This package has the purpose to print data in matrices in a
@@ -3186,7 +3932,7 @@ human-readable format.")
 (define-public julia-pycall
   (package
     (name "julia-pycall")
-    (version "1.92.3")
+    (version "1.92.5")
     (source
       (origin
         (method git-fetch)
@@ -3196,7 +3942,7 @@ human-readable format.")
         (file-name (git-file-name name version))
         (sha256
          (base32
-          "07r99ni6nkxpyrp3wsb5qg4jxz7i2r08dyqbiffy2zm3g0bn88jq"))))
+          "1fj5d1ihnhnm0pl4hbx6hcd2bpdyhm8jiaqah2axsbd069j70saf"))))
     (build-system julia-build-system)
     (arguments
      `(#:imported-modules ((guix build python-build-system)
@@ -3206,7 +3952,7 @@ human-readable format.")
                   ((guix build python-build-system) #:prefix python:))
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'remove-conda
+         (add-after 'link-depot 'remove-conda
            (lambda _
              (substitute* "Project.toml"
                ((".*Conda.*") ""))
@@ -3216,7 +3962,7 @@ human-readable format.")
              (substitute* "deps/depsutils.jl"
                (("Conda.PYTHONDIR") "\"/\""))
              #t))
-         (add-after 'unpack 'set-python
+         (add-after 'link-depot 'set-python
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((python (assoc-ref inputs "python")))
                (setenv "PYCALL_JL_RUNTIME_PYTHON"
@@ -3243,12 +3989,12 @@ human-readable format.")
              (setenv "JULIA_PKGEVAL" "true")
              #t)))))
     (propagated-inputs
-     `(("julia-macrotools" ,julia-macrotools)
-       ("julia-versionparsing" ,julia-versionparsing)))
+     (list julia-macrotools
+           julia-versionparsing))
     (inputs
-     `(("python" ,python)))
+     (list python))
     (native-inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (home-page "https://github.com/JuliaPy/PyCall.jl")
     (synopsis "Call Python functions from the Julia language")
     (description "This package provides the ability to directly call and fully
@@ -3258,6 +4004,35 @@ types between Julia and Python), define Python classes from Julia methods, and
 share large data structures between Julia and Python without copying them.")
     (license license:expat)))
 
+(define-public julia-pyplot
+  (package
+    (name "julia-pyplot")
+    (version "2.10.0")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/JuliaPy/PyPlot.jl")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "007zs0imfgs69f30pp2a3rc93kl0qiq7qjx6ig35z4wzkmps4skd"))))
+    (build-system julia-build-system)
+    (propagated-inputs
+     (list julia-colors
+           julia-latexstrings
+           julia-pycall
+           julia-versionparsing
+           ;; python-matplotlib is expected to be available at runtime.
+           python-matplotlib))
+    (home-page "https://github.com/JuliaPy/PyPlot.jl")
+    (synopsis "Plotting for Julia based on matplotlib.pyplot")
+    (description "This package provides a Julia interface to the Matplotlib
+plotting library from Python, and specifically to the @code{matplotlib.pyplot}
+module.  PyPlot uses the Julia PyCall package to call Matplotlib directly from
+Julia with little or no overhead (arrays are passed without making a copy).")
+    (license license:expat)))
+
 (define-public julia-quadgk
   (package
     (name "julia-quadgk")
@@ -3273,7 +4048,7 @@ share large data structures between Julia and Python without copying them.")
          (base32 "1hy0629yai6xflgxaflk9764lzr1lzhlghimxk1aqi212q9c6n33"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-datastructures" ,julia-datastructures)))
+     (list julia-datastructures))
     (home-page "https://github.com/JuliaMath/QuadGK.jl")
     (synopsis "Adaptive 1d numerical Gauss–Kronrod integration")
     (description "This package provides support for one-dimensional numerical
@@ -3300,7 +4075,7 @@ arbitrary normed vector spaces (e.g. matrix-valued integrands).")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'hardcode-libmath-location
+         (add-after 'link-depot 'hardcode-libmath-location
            (lambda* (#:key inputs #:allow-other-keys)
              (let ((gcclib (assoc-ref inputs "gcc:lib")))
                (substitute* "src/Quadmath.jl"
@@ -3308,11 +4083,11 @@ arbitrary normed vector spaces (e.g. matrix-valued integrands).")
                  (("libquadmath.so.0" lib) (string-append gcclib "/lib/" lib)))
                #t))))))
     (propagated-inputs
-     `(("julia-requires" ,julia-requires)))
+     (list julia-requires))
     (inputs
      `(("gcc:lib" ,gcc "lib")))
     (native-inputs
-     `(("julia-specialfunctions" ,julia-specialfunctions)))
+     (list julia-specialfunctions))
     (home-page "https://github.com/JuliaMath/Quadmath.jl")
     (synopsis "Float128 and libquadmath for the Julia language")
     (description "This is a Julia interface to @code{libquadmath}, providing a
@@ -3335,7 +4110,7 @@ format.")
          (base32 "1zhynyvchc50hywws2jznpkwydr3njh8cv84d2ylyabhcwwmil9s"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-dualnumbers" ,julia-dualnumbers)))
+     (list julia-dualnumbers))
     (home-page "https://github.com/JuliaGeometry/Quaternions.jl")
     (synopsis "Quaternion and dual-quaternion functionality")
     (description "Quaternions are best known for their suitability as
@@ -3358,9 +4133,9 @@ extension of complex numbers.")
          (base32 "06zm4cbn3x49lbpgshhdfvvmgz066qkc8q0d57igm5p8bcp6js22"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-datastructures" ,julia-datastructures)
-       ("julia-iteratorinterfaceextensions" ,julia-iteratorinterfaceextensions)
-       ("julia-tableshowutils" ,julia-tableshowutils)))
+     (list julia-datastructures
+           julia-iteratorinterfaceextensions
+           julia-tableshowutils))
     (home-page "https://github.com/queryverse/QueryOperators.jl")
     (synopsis "Query operators for Julia")
     (description "This package contains the underlying query operators that are
@@ -3449,9 +4224,9 @@ more complex visualizations.")
     (arguments
      `(#:tests? #f))    ; Cycle with Plots.jl.
     (propagated-inputs
-     `(("julia-nanmath" ,julia-nanmath)
-       ("julia-plotutils" ,julia-plotutils)
-       ("julia-recipesbase" ,julia-recipesbase)))
+     (list julia-nanmath
+           julia-plotutils
+           julia-recipesbase))
     (home-page "http://juliaplots.org/RecipesPipeline.jl/dev/")
     (synopsis "Utilities for processing recipes")
     (description "This package was factored out of @code{Plots.jl} to allow any
@@ -3479,13 +4254,13 @@ recipes to full specifications for a plot.")
     (arguments
      `(#:tests? #f))    ; Cycle with OrdinaryDiffEq.jl.
     (propagated-inputs
-     `(("julia-arrayinterface" ,julia-arrayinterface)
-       ("julia-chainrulescore" ,julia-chainrulescore)
-       ("julia-docstringextensions" ,julia-docstringextensions)
-       ("julia-recipesbase" ,julia-recipesbase)
-       ("julia-requires" ,julia-requires)
-       ("julia-staticarrays" ,julia-staticarrays)
-       ("julia-zygoterules" ,julia-zygoterules)))
+     (list julia-arrayinterface
+           julia-chainrulescore
+           julia-docstringextensions
+           julia-recipesbase
+           julia-requires
+           julia-staticarrays
+           julia-zygoterules))
     ;(native-inputs
     ; `(("julia-forwarddiff" ,julia-forwarddiff)
     ;   ("julia-nlsolve" ,julia-nlsolve)
@@ -3501,7 +4276,7 @@ recursive arrays like arrays of arrays.")
 (define-public julia-reexport
   (package
     (name "julia-reexport")
-    (version "1.1.0")
+    (version "1.2.2")
     (source
      (origin
        (method git-fetch)
@@ -3510,7 +4285,7 @@ recursive arrays like arrays of arrays.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1wj4vnxxmnblm6ajkkdvwb7v4835qrrc406q5is74qv1n68xql7l"))))
+        (base32 "0inf5q6f01ncd5c5wm8mwzv2hs627ng6xlh8dhrlflp321hbamwf"))))
     (build-system julia-build-system)
     (home-page "https://github.com/simonster/Reexport.jl")
     (synopsis "Re-export modules and symbols")
@@ -3534,11 +4309,11 @@ recursive arrays like arrays of arrays.")
     (arguments
      `(#:tests? #f))    ; Cycle with ImageCore.jl through ImageMagick.jl.
     (propagated-inputs
-     `(("julia-deepdiffs" ,julia-deepdiffs)
-       ("julia-distances" ,julia-distances)
-       ("julia-fileio" ,julia-fileio)
-       ("julia-imagecore" ,julia-imagecore)
-       ("julia-imageinterminal" ,julia-imageinterminal)))
+     (list julia-deepdiffs
+           julia-distances
+           julia-fileio
+           julia-imagecore
+           julia-imageinterminal))
     ;(native-inputs
     ; `(("julia-csvfiles" ,julia-csvfiles)
     ;   ("julia-dataframes" ,julia-dataframes)
@@ -3569,10 +4344,12 @@ package can help create and update if need be.")
        (sha256
         (base32 "03hyfy7c0ma45b0y756j76awi3az2ii4bz4s8cxm3xw9yy1z7b01"))))
     (build-system julia-build-system)
+    (arguments
+     `(#:parallel-tests? #f))
     (inputs                             ;required for test
-     `(("julia-example" ,julia-example)))
+     (list julia-example))
     (propagated-inputs
-     `(("julia-colors" ,julia-colors)))
+     (list julia-colors))
     (home-page "https://github.com/JuliaPackaging/Requires.jl/")
     (synopsis "Faster package loader")
     (description "This package make loading packages faster, maybe.  It
@@ -3595,18 +4372,24 @@ can be avoided.")
         (sha256
          (base32 "1wrr6sqj2xl9grkvdp88rw3manxy9vbx28zq2wssya5ns1xabsnl"))))
     (build-system julia-build-system)
+    (arguments
+     ;; XXXX: Test suite failing for i686, e.g.,
+     ;; Expression: hash(tr_float, hash(1)) === hash(v_float, hash(1))
+     ;; MethodError: no method matching decompose(::ReverseDiff.TrackedReal{Float64, Float64, Nothing})
+     ;; Disable as stopgap.
+     `(#:tests? ,(not (target-x86-32?))))
     (propagated-inputs
-     `(("julia-diffresults" ,julia-diffresults)
-       ("julia-diffrules" ,julia-diffrules)
-       ("julia-forwarddiff" ,julia-forwarddiff)
-       ("julia-functionwrappers" ,julia-functionwrappers)
-       ("julia-macrotools" ,julia-macrotools)
-       ("julia-nanmath" ,julia-nanmath)
-       ("julia-specialfunctions" ,julia-specialfunctions)
-       ("julia-staticarrays" ,julia-staticarrays)))
+     (list julia-diffresults
+           julia-diffrules
+           julia-forwarddiff
+           julia-functionwrappers
+           julia-macrotools
+           julia-nanmath
+           julia-specialfunctions
+           julia-staticarrays))
     (native-inputs
-     `(("julia-difftests" ,julia-difftests)
-       ("julia-fillarrays" ,julia-fillarrays)))
+     (list julia-difftests
+           julia-fillarrays))
     (home-page "https://github.com/JuliaDiff/ReverseDiff.jl")
     (synopsis "Reverse Mode Automatic Differentiation for Julia")
     (description "@code{ReverseDiff.jl} is a fast and compile-able tape-based
@@ -3660,11 +4443,11 @@ other power series in @code{h}.")
            (base32 "01wwqbdmj61yiz7rkmams4xg7gb9hbmg325173846ky4b9x1wb19"))))
       (build-system julia-build-system)
       (propagated-inputs
-       `(("julia-staticarrays" ,julia-staticarrays)))
+       (list julia-staticarrays))
       (native-inputs
-       `(("julia-benchmarktools" ,julia-benchmarktools)
-         ("julia-forwarddiff" ,julia-forwarddiff)
-         ("julia-unitful" ,julia-unitful)))
+       (list julia-benchmarktools
+             julia-forwarddiff
+             julia-unitful))
       (home-page "https://github.com/JuliaGeometry/Rotations.jl")
       (synopsis "Julia implementations for different rotation parameterisations")
       (description "This package implements various 3D rotation parameterizations
@@ -3692,9 +4475,10 @@ through matrix-vector multiplication.")
            (base32 "1fb1dfdmiw2ggx60hf70954xlps0r48fcb3k3dvxynlz7ylphp96"))))
       (build-system julia-build-system)
       (arguments
-       `(#:julia-package-name "SafeTestsets"))
+       `(#:julia-package-name "SafeTestsets"
+         #:julia-package-uuid "1bc83da4-3b8d-516f-aca4-4fe02f6d838f"))
       (native-inputs
-       `(("julia-staticarrays" ,julia-staticarrays)))
+       (list julia-staticarrays))
       (home-page "https://github.com/YingboMa/SafeTestsets.jl")
       (synopsis "Julia's testset in a module")
       (description "This package contains the testset from Julia, packaged into
@@ -3716,13 +4500,36 @@ a loadable module.")
          (base32 "0y7kkkj717h5cj659ssry89i5r64symr6pvhr6vv4qmaxrnjxj92"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-libsass-jll" ,julia-libsass-jll)))
+     (list julia-libsass-jll))
     (home-page "https://github.com/piever/Sass.jl")
     (synopsis "Compile scss and sass file to css")
     (description "This package provides a simple Julian API to use the
 @code{libsass} library to compile scss and sass files to css.")
     (license license:expat)))
 
+(define-public julia-scanbyte
+  (package
+    (name "julia-scanbyte")
+    (version "0.3")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/jakobnissen/ScanByte.jl")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "0dqqa3d7c87358144pji6ik8xlki2hj0hkvjs72j5aypfms8rwn3"))))
+    (build-system julia-build-system)
+    (propagated-inputs
+     (list julia-simd))
+    (home-page "https://github.com/jakobnissen/ScanByte.jl")
+    (synopsis "Find the first occurrence of set of bytes in a chunk of memory")
+    (description "This package finds the first occurrence of a byte or set of
+bytes in a chunk of memory.  Think of it like a much faster version of
+@code{findfirst} that only iterates over bytes in memory.")
+    (license license:expat)))
+
 (define-public julia-scratch
   (package
     (name "julia-scratch")
@@ -3772,6 +4579,31 @@ formatting an array of n things, e.g. numbers, dates, unitful values.  It's used
 in @code{Gadfly}, @code{Plots} and @code{Makie} to label axes and keys.")
     (license license:expat)))
 
+(define-public julia-simd
+  (package
+    (name "julia-simd")
+    (version "3.4.0")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/eschnett/SIMD.jl")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "0z7m5fykc6r4bxz4hfm6d3v1h7gg0c322l4zv8r3vrb8hrd6h263"))))
+    (build-system julia-build-system)
+    (home-page "https://github.com/eschnett/SIMD.jl")
+    (synopsis "Explicit SIMD vectorization")
+    (description "This package allows programmers to explicitly SIMD-vectorize
+their Julia code.  By exposing SIMD vector types and corresponding operations,
+the programmer can explicitly vectorize their code.  While this does not
+guarantee that the generated machine code is efficient, it relieves the
+compiler from determining whether it is legal to vectorize the code, deciding
+whether it is beneficial to do so, and rearranging the code to synthesize
+vector instructions.")
+    (license license:expat)))
+
 (define-public julia-simpletraits
   (package
     (name "julia-simpletraits")
@@ -3787,7 +4619,7 @@ in @code{Gadfly}, @code{Plots} and @code{Makie} to label axes and keys.")
          (base32 "1qvmkqcvhc2nilvkk36szccxdlcv9ls2i0ksxgl2yfjr3b3qlr05"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-macrotools" ,julia-macrotools)))
+     (list julia-macrotools))
     (home-page "https://github.com/mauro3/SimpleTraits.jl")
     (synopsis "Simple Traits for Julia")
     (description "This package provides a macro-based implementation of traits.
@@ -3797,6 +4629,29 @@ types can be added to a trait after the creation of the trait, whereas Union
 types are fixed after creation.")
     (license license:expat)))
 
+(define-public julia-softglobalscope
+  (package
+    (name "julia-softglobalscope")
+    (version "1.1.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/stevengj/SoftGlobalScope.jl")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1n3l0al1vw5jpb4k9a29a71666cdb617nmiqg34wcmyfzrxpvv39"))))
+    (build-system julia-build-system)
+    (home-page "https://github.com/stevengj/SoftGlobalScope.jl")
+    (synopsis "Utilities for soft global scope in interactive Julia environments")
+    (description
+     "SoftGlobalScope is a package for the Julia language that simplifies the
+variable scoping rules for code in global scope.  It is intended for interactive
+shells to make it easier to work interactively with Julia, especially for
+beginners.")
+    (license license:expat)))
+
 (define-public julia-sortingalgorithms
   (package
     (name "julia-sortingalgorithms")
@@ -3814,7 +4669,7 @@ types are fixed after creation.")
     (arguments
      `(#:tests? #f))    ; cycle with StatsBase.jl
     (propagated-inputs
-     `(("julia-datastructures" ,julia-datastructures)))
+     (list julia-datastructures))
     ;(native-inputs
     ; `(("julia-statsbase" ,julia-statsbase)))
     (home-page "https://github.com/JuliaCollections/SortingAlgorithms.jl")
@@ -3839,11 +4694,11 @@ timsort and radixsort.")
         (base32 "0nfpnglx7zl9g20w2mgfkg17hcw9ri0shaq2rwplj0ij5pwz8yf0"))))
     (build-system julia-build-system)
     (inputs
-     `(("julia-chainrulestestutils" ,julia-chainrulestestutils)))
+     (list julia-chainrulestestutils))
     (propagated-inputs
-     `(("julia-chainrulescore" ,julia-chainrulescore)
-       ("julia-logexpfunctions" ,julia-logexpfunctions)
-       ("julia-openspecfun-jll" ,julia-openspecfun-jll)))
+     (list julia-chainrulescore
+           julia-logexpfunctions
+           julia-openspecfun-jll))
     (home-page "https://github.com/JuliaMath/SpecialFunctions.jl")
     (synopsis "Special mathematical functions")
     (description "This package provides special mathematical functions,
@@ -3867,8 +4722,8 @@ polygamma functions.")
          (base32 "1qzaqvk57b0s5krzn8bxkzmr5kz6hi9dm3jbf2sl7z4vznsgbn9x"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-dictionaries" ,julia-dictionaries)
-       ("julia-indexing" ,julia-indexing)))
+     (list julia-dictionaries
+           julia-indexing))
     (home-page "https://github.com/JuliaData/SplitApplyCombine.jl")
     (synopsis "Split-apply-combine strategies for Julia")
     (description "@code{SplitApplyCombine.jl} provides high-level, generic tools
@@ -3916,19 +4771,18 @@ some performance improvements).")
          (base32 "1fwiaxdpx1z9dli3jr8kyraych0jbdiny3qklynf0r13px25r6i7"))))
     (build-system julia-build-system)
     (arguments
-     `(#:tests? #f  ; Documenter.jl not packaged yet
-       #:phases
+     `(#:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'skip-doctest
+         (add-after 'link-depot 'skip-doctest
            (lambda _
              (substitute* "test/runtests.jl"
                ((".*doctest.*") ""))
              #t)))))
     (propagated-inputs
-     `(("julia-offsetarrays" ,julia-offsetarrays)))
-    ;(native-inputs
-    ; `(("julia-aqua" ,julia-aqua)
-    ;   ("julia-documenter" ,julia-documenter)))
+     (list julia-offsetarrays))
+    (native-inputs
+    (list julia-aqua
+          julia-documenter))
     (home-page "https://github.com/JuliaArrays/StackViews.jl")
     (synopsis "No more catcat")
     (description "StackViews provides only one array type: @code{StackView}.
@@ -3956,9 +4810,9 @@ There are multiple ways to understand @code{StackView}:
          (base32 "19k7h47zhz3zz28i0l4b3cc0r07pzp8kf35z0yammpy361b644l2"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-ifelse" ,julia-ifelse)))
+     (list julia-ifelse))
     (native-inputs
-     `(("julia-aqua" ,julia-aqua)))
+     (list julia-aqua))
     (home-page "https://github.com/SciML/Static.jl")
     (synopsis "Static types useful for dispatch and generated functions")
     (description "Static.jl defines a limited set of statically parameterized
@@ -3968,7 +4822,7 @@ types and a common interface that is shared between them.")
 (define-public julia-staticarrays
   (package
     (name "julia-staticarrays")
-    (version "1.2.9")
+    (version "1.2.13")
     (source
      (origin
        (method git-fetch)
@@ -3977,10 +4831,10 @@ types and a common interface that is shared between them.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1902bl9p96mfq7d1rbilwp98wz2g82ml9svcgx7sczglyjbs4nsk"))))
+        (base32 "041mijzgzm8r61a3gwspr2wcxjikqksvj2rbnl4gmcy41alqmx79"))))
     (build-system julia-build-system)
     (inputs
-     `(("julia-benchmarktools" ,julia-benchmarktools)))
+     (list julia-benchmarktools))
     (home-page "https://github.com/JuliaArrays/StaticArrays.jl")
     (synopsis "Statically sized arrays")
     (description "This package provides a framework for implementing
@@ -4028,13 +4882,13 @@ dependency on it.")
          (base32 "02y4pm5yvg713a2pn970bbcfkrn2h133rxbxk1da18svhqw3czhi"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-dataapi" ,julia-dataapi)
-       ("julia-datastructures" ,julia-datastructures)
-       ("julia-missings" ,julia-missings)
-       ("julia-sortingalgorithms" ,julia-sortingalgorithms)
-       ("julia-statsapi" ,julia-statsapi)))
+     (list julia-dataapi
+           julia-datastructures
+           julia-missings
+           julia-sortingalgorithms
+           julia-statsapi))
     (native-inputs
-     `(("julia-stablerngs" ,julia-stablerngs)))
+     (list julia-stablerngs))
     (home-page "https://github.com/JuliaStats/StatsBase.jl")
     (synopsis "Basic statistics for Julia")
     (description "StatsBase.jl is a Julia package that provides basic support
@@ -4058,7 +4912,7 @@ ranking, covariances, sampling, and empirical density estimation.")
          (base32 "0n5707wplbibzhhv1xmshvc025d7xk6mnikclc3hvq5cdc0gy9f7"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-distances" ,julia-distances)))
+     (list julia-distances))
     (home-page "https://github.com/matthieugomez/StringDistances.jl")
     (synopsis "String Distances in Julia")
     (description "This package provides string distances in Julia.  Distances
@@ -4067,6 +4921,82 @@ are defined for @code{AbstractStrings}, and any iterator that define
 applied to any distance.")
     (license license:expat)))
 
+(define-public julia-stringencodings
+  (package
+    (name "julia-stringencodings")
+    (version "0.3.5")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/JuliaStrings/StringEncodings.jl")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "1qwc5ll68ng80b5921ww6fvifxbsmiylakfgsbsjbzg7lzyb5i67"))))
+    (build-system julia-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'skip-failing-test
+           (lambda _
+             ;; https://github.com/JuliaStrings/StringEncodings.jl/issues/49
+             (substitute* "test/runtests.jl"
+               (("\"SHIFT_JIS\", \"SHIFT_JISX0213\"")
+                " ")))))))
+    (propagated-inputs
+     (list julia-libiconv-jll))
+    (home-page "https://github.com/JuliaStrings/StringEncodings.jl")
+    (synopsis "Support for decoding and encoding texts")
+    (description "This package provides support for decoding and encoding
+texts between multiple character encodings.  It is currently based on the
+@code{iconv} interface, and supports all major platforms using GNU libiconv.")
+    (license license:expat)))
+
+(define-public julia-structarrays
+  (package
+    (name "julia-structarrays")
+    (version "0.6.3")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/JuliaArrays/StructArrays.jl")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "0rjcpyjwzg70n87q5r9c5i1qzigavncslxssm3rk5a3y549py56v"))))
+    (build-system julia-build-system)
+    (arguments
+     `(#:phases
+       ,@(if (target-64bit?)
+           '(%standard-phases)
+           '((modify-phases %standard-phases
+               (add-after 'unpack 'fix-tests-int32-i686
+                 (lambda _
+                   (substitute* '("src/utils.jl"
+                                  "test/runtests.jl")
+                     (("Int64") "Int32")))))))))
+    (propagated-inputs
+     (list julia-dataapi
+           julia-staticarrays
+           julia-tables))
+    (native-inputs
+     (list julia-documenter
+           julia-offsetarrays
+           julia-pooledarrays
+           julia-typedtables
+           julia-weakrefstrings))
+    (home-page "https://github.com/JuliaArrays/StructArrays.jl")
+    (synopsis "Efficient implementation of struct arrays in Julia")
+    (description "This package introduces the type @code{StructArray} which is
+an @code{AbstractArray} whose elements are @code{struct} (for example
+@code{NamedTuples}, or @code{ComplexF64}, or a custom user defined
+@code{struct}).  While a @code{StructArray} iterates @code{structs}, the layout
+is column based (meaning each field of the @code{struct} is stored in a separate
+@code{Array}).")
+    (license license:expat)))
+
 (define-public julia-structtypes
   (package
     (name "julia-structtypes")
@@ -4145,13 +5075,13 @@ the @code{Pluto.jl} tabular data import functionality.")
          (base32 "1sqqagzqvav8b1rv5ywwbgy9ixvlmipq95fkwfwn0m8769i8jwzb"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-dataapi" ,julia-dataapi)
-       ("julia-datavalueinterfaces" ,julia-datavalueinterfaces)
-       ("julia-iteratorinterfaceextensions" ,julia-iteratorinterfaceextensions)
-       ("julia-tabletraits" ,julia-tabletraits)))
+     (list julia-dataapi
+           julia-datavalueinterfaces
+           julia-iteratorinterfaceextensions
+           julia-tabletraits))
     (native-inputs
-     `(("julia-datavalues" ,julia-datavalues)
-       ("julia-queryoperators" ,julia-queryoperators)))
+     (list julia-datavalues
+           julia-queryoperators))
     (home-page "https://github.com/JuliaData/Tables.jl")
     (synopsis "Interface for tables in Julia")
     (description "The @code{Tables.jl} package provides simple, yet powerful
@@ -4176,8 +5106,8 @@ interface functions for working with all kinds tabular data.")
            (base32 "0gp3hpj3jvzfhkp9r345vfic2j2n2s60729wv38hwn75csp74cg5"))))
       (build-system julia-build-system)
       (propagated-inputs
-       `(("julia-datavalues" ,julia-datavalues)
-         ("julia-json" ,julia-json)))
+       (list julia-datavalues
+             julia-json))
       (home-page "https://github.com/queryverse/TableShowUtils.jl")
       (synopsis "Implement show for TableTraits.jl types")
       (description "This package provides some common helper functions that make
@@ -4200,7 +5130,7 @@ participate in the @code{TableTraits.jl} ecosystem.")
          (base32 "08ssb2630wm6j8f2qa985mn2vfibfm5kjcn4ayl2qkhfcyp8daw4"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-iteratorinterfaceextensions" ,julia-iteratorinterfaceextensions)))
+     (list julia-iteratorinterfaceextensions))
     (home-page "https://github.com/queryverse/TableTraits.jl")
     (synopsis "Traits for Julia tables")
     (description "TableTraits defines a generic interface for tabular data.")
@@ -4246,11 +5176,11 @@ dimensions}.")
     (arguments
      `(#:tests? #f))    ; cycle with ImageMagick.jl
     (propagated-inputs
-     `(("julia-axisarrays" ,julia-axisarrays)
-       ("julia-colortypes" ,julia-colortypes)
-       ("julia-fileio" ,julia-fileio)
-       ("julia-offsetarrays" ,julia-offsetarrays)
-       ("julia-stringdistances" ,julia-stringdistances)))
+     (list julia-axisarrays
+           julia-colortypes
+           julia-fileio
+           julia-offsetarrays
+           julia-stringdistances))
     ;(native-inputs
     ; `(("julia-colors" ,julia-colors)
     ;   ("julia-fixedpointnumbers" ,julia-fixedpointnumbers)
@@ -4282,22 +5212,71 @@ package.")
         (patches (search-patches "julia-tracker-16-compat.patch"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-adapt" ,julia-adapt)
-       ("julia-diffrules" ,julia-diffrules)
-       ("julia-forwarddiff" ,julia-forwarddiff)
-       ("julia-macrotools" ,julia-macrotools)
-       ("julia-nanmath" ,julia-nanmath)
-       ("julia-nnlib" ,julia-nnlib)
-       ("julia-requires" ,julia-requires)
-       ("julia-specialfunctions" ,julia-specialfunctions)))
+     (list julia-adapt
+           julia-diffrules
+           julia-forwarddiff
+           julia-macrotools
+           julia-nanmath
+           julia-nnlib
+           julia-requires
+           julia-specialfunctions))
     (native-inputs
-     `(("julia-pdmats" ,julia-pdmats)))
+     (list julia-pdmats))
     (home-page "https://github.com/FluxML/Tracker.jl")
     (synopsis "Operator overloading reverse-mode automatic differentiator")
     (description "@code{Tracker.jl} previously provided @code{Flux.jl} with
 automatic differentiation for its machine learning platform.")
     (license license:expat)))
 
+(define-public julia-transcodingstreams
+  (package
+    (name "julia-transcodingstreams")
+    (version "0.9.6")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/JuliaIO/TranscodingStreams.jl")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "1w3klii293caqiclfh28jggv7f53xclm9fr6xmw38brwrn1hjb48"))))
+    (build-system julia-build-system)
+    (arguments
+     `(#:tests? #f))                ; Circular dependency with various codecs.
+    (home-page "https://github.com/JuliaIO/TranscodingStreams.jl")
+    (synopsis "Fast I/O transcoding data streams")
+    (description "This package provides tools for transcoding data streams
+which are:
+@itemize
+@item fast: small overhead and specialized methods
+@item consistent: basic I/O operations work as expected
+@item generic: support any I/O objects like files, buffers, pipes, etc.
+@item extensible: easy definition for new codec to transcode data
+@end itemize")
+    (license license:expat)))
+
+(define-public julia-twiddle
+  (package
+    (name "julia-twiddle")
+    (version "1.1.2")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/SabrinaJaye/Twiddle.jl")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "1c2gdv7sy4n1d8687w2q0yzwmwmanf4p6mvzvkz5gm4baxyzmbh2"))))
+    (build-system julia-build-system)
+    (home-page "https://ben-ward.science/Twiddle.jl/stable")
+    (synopsis "Ready to use bit-twiddling tricks")
+    (description "This package provides a collection of useful bit-twiddling
+tricks, ready to use as functions, with detailed documentation and example
+real-world use cases.")
+    (license license:expat)))
+
 (define-public julia-typedtables
   (package
     (name "julia-typedtables")
@@ -4313,9 +5292,9 @@ automatic differentiation for its machine learning platform.")
          (base32 "0nk6zhqvl2r8yhjdhb59kxq0srd3vy4ysg4d8rszj9a43dnn3w3i"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-adapt" ,julia-adapt)
-       ("julia-splitapplycombine" ,julia-splitapplycombine)
-       ("julia-tables" ,julia-tables)))
+     (list julia-adapt
+           julia-splitapplycombine
+           julia-tables))
     (home-page "https://github.com/JuliaData/TypedTables.jl")
     (synopsis "Column-based storage for data analysis in Julia")
     (description "@code{TypedTables.jl} provides two column-based storage
@@ -4360,6 +5339,7 @@ types, modules, and dictionaries.")
     (build-system julia-build-system)
     (arguments
      '(#:julia-package-name "URIs"      ;required to run tests
+       #:julia-package-uuid "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4"
        #:phases
        (modify-phases %standard-phases
          (add-before 'check 'change-dir
@@ -4367,10 +5347,10 @@ types, modules, and dictionaries.")
            (lambda* (#:key source outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
                (chdir
-                (string-append out "/share/julia/packages/URIs/test")))
+                (string-append out "/share/julia/loadpath/URIs/test")))
              #t)))))
     ;; required for tests
-    (inputs `(("julia-json" ,julia-json)))
+    (inputs (list julia-json))
     (home-page "https://github.com/JuliaWeb/URIs.jl")
     (synopsis "URI parsing in Julia")
     (description "@code{URIs.jl} is a Julia package that allows parsing and
@@ -4392,8 +5372,10 @@ working with @acronym{URIs,Uniform Resource Identifiers}, as defined in RFC
        (sha256
         (base32 "10qwscd15dnmvx116dwvg99m7kmwgmj5ahdkq7psiq48lcc554gq"))))
     (build-system julia-build-system)
+    (arguments
+     `(#:parallel-tests? #f))
     (propagated-inputs
-     `(("julia-constructionbase" ,julia-constructionbase)))
+     (list 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
@@ -4440,8 +5422,8 @@ useful in order to support @code{VersionNumber} comparisons applied to
          (base32 "14h1vdnc3rx87w6v2rr59lgb4kai2hd1wzqpxhmzsi8karg2z219"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-dataapi" ,julia-dataapi)
-       ("julia-parsers" ,julia-parsers)))
+     (list julia-dataapi
+           julia-parsers))
     (home-page "https://github.com/JuliaData/WeakRefStrings.jl")
     (synopsis "Efficient string representation and transfer in Julia")
     (description "This package provides a minimal String type for Julia that
@@ -4462,6 +5444,16 @@ allows for efficient string representation and transfer")
         (sha256
          (base32 "04yykivi8zrbryxlmb0p5xa6lma8iq22r5s863117dnnqj5gaffd"))))
     (build-system julia-build-system)
+    (arguments
+     `(#:phases
+       ,@(if (target-x86-32?)
+           '((modify-phases %standard-phases
+               (add-after 'unpack 'remove-failing-test-i686
+                 (lambda _
+                   (substitute* "test/woodbury.jl"
+                     (("@test logdet\\(W\\)")
+                      "@test_broken logdet(W)"))))))
+           '(%standard-phases))))
     (home-page "https://github.com/timholy/WoodburyMatrices.jl")
     (synopsis "Support for the Woodbury matrix identity for Julia")
     (description "This package provides support for the Woodbury matrix identity
@@ -4471,6 +5463,31 @@ for floating-point roundoff errors, so be prepared for a certain amount of
 inaccuracy in the result.")
     (license license:expat)))
 
+(define-public julia-yaml
+  (package
+    (name "julia-yaml")
+    (version "0.4.7")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/JuliaData/YAML.jl")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "00k8456ffldbf75k2q5yxim7cgz3p0pbshsvmpm1331g8qy6liin"))))
+    (build-system julia-build-system)
+    (propagated-inputs
+     (list julia-stringencodings))
+    (native-inputs
+     (list julia-datastructures
+           julia-orderedcollections))
+    (home-page "https://github.com/JuliaData/YAML.jl")
+    (synopsis "Parses YAML documents into native Julia types")
+    (description "This package parses YAML documents into native Julia types
+and dumps them back into YAML documents.")
+    (license license:expat)))
+
 (define-public julia-zipfile
   (package
     (name "julia-zipfile")
@@ -4487,7 +5504,7 @@ inaccuracy in the result.")
           "15bm3ki5mb9nvqs2byznrryq0bilnjcvsfy3k05hxhk9vapilw7k"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-zlib-jll" ,julia-zlib-jll)))
+     (list julia-zlib-jll))
     (home-page "https://github.com/fhs/ZipFile.jl")
     (synopsis "Read/Write ZIP archives in Julia")
     (description "This module provides support for reading and writing ZIP
@@ -4509,7 +5526,7 @@ archives in Julia.")
         (base32 "07i2mf6rr5b8i6l82qgwl5arsb5pwyyzyfasgnszhdqllk9501bs"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-macrotools" ,julia-macrotools)))
+     (list 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
@@ -4533,17 +5550,17 @@ Zygote, without depending on Zygote itself.")
     (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)))
+     (list julia-abstractffts
+           julia-chainrules
+           julia-diffrules
+           julia-fillarrays
+           julia-forwarddiff
+           julia-irtools
+           julia-macrotools
+           julia-nanmath
+           julia-requires
+           julia-specialfunctions
+           julia-zygoterules))
     (home-page "https://fluxml.ai/Zygote.jl")
     (synopsis "Automatic differentiation in Julia")
     (description "Zygote provides source-to-source automatic
diff --git a/gnu/packages/julia.scm b/gnu/packages/julia.scm
index fe31e545c9..0bdac66175 100644
--- a/gnu/packages/julia.scm
+++ b/gnu/packages/julia.scm
@@ -6,6 +6,7 @@
 ;;; Copyright © 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2021 Jean-Baptiste Volatier <jbv@pm.me>
 ;;; Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -54,26 +55,6 @@
   #:use-module (gnu packages wget)
   #:use-module (ice-9 match))
 
-(define libuv-julia
-  (let ((commit "fb3e3364c33ae48c827f6b103e05c3f0e78b79a9")
-        (revision "3"))
-    ;; When upgrading Julia, also upgrade this.  Get the commit from
-    ;; https://github.com/JuliaLang/julia/blob/v1.6.1/deps/libuv.version
-    (package
-      (inherit libuv)
-      (name "libuv-julia")
-      (version (git-version "2.0.0" revision commit))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                       (url "https://github.com/JuliaLang/libuv")
-                       (commit commit)))
-                (file-name (git-file-name name version))
-                (sha256
-                 (base32
-                  "1kqpn19d20aka30h6q5h8lnzyp0vw0xzgx0wm4w2r5j6yf76m2hr"))))
-      (home-page "https://github.com/JuliaLang/libuv"))))
-
 (define libunwind-julia
   ;; The Julia projects requires their patched version.
   ;; Get from https://github.com/JuliaLang/julia/tree/master/deps/patches
@@ -90,144 +71,30 @@
         (base32
          "1y0l08k6ak1mqbfj6accf9s5686kljwgsl4vcqpxzk5n74wpm6a3"))
        (patches
-        (list
-         (julia-patch "libunwind-prefer-extbl"
-                      "0lr4dafw8qyfh8sw8hhbwkql1dlhqv8px7k81y2l20hhxfgnh2m1")
-         (julia-patch "libunwind-static-arm"
-                      "1jk3bmiw61ypcchqkk1fyg5wh8wpggk574wxyfyaic870zh3lhgq")
-         (julia-patch "libunwind-cfa-rsp"
-                      "1aswjhvysahhldbzh1afbf0hsjxrvs6xidsz2i7s1cjkjbdiia1z")))))
+        (append
+            ;; Fix linker issue for i686-linux because GCC10 changed default
+            ;; (see '-fno-common' option).
+            (search-patches "libunwind-julia-fix-GCC10-fno-common.patch")
+            (list
+             (julia-patch "libunwind-prefer-extbl"
+                          "0lr4dafw8qyfh8sw8hhbwkql1dlhqv8px7k81y2l20hhxfgnh2m1")
+             (julia-patch "libunwind-static-arm"
+                          "1jk3bmiw61ypcchqkk1fyg5wh8wpggk574wxyfyaic870zh3lhgq")
+             (julia-patch "libunwind-cfa-rsp"
+                          "1aswjhvysahhldbzh1afbf0hsjxrvs6xidsz2i7s1cjkjbdiia1z"))))))
     (home-page "https://github.com/JuliaLang/tree/master/deps/")))
 
 (define (julia-patch-url version name)
   (string-append "https://raw.githubusercontent.com/JuliaLang/julia/v" version
                  "/deps/patches/" name ".patch"))
 
-(define (julia-patch name sha)
+(define-public (julia-patch name sha)
   (let ((version "1.6.1"))
     (origin (method url-fetch)
             (uri (julia-patch-url version name))
             (sha256 (base32 sha))
             (file-name name))))
 
-(define llvm-julia
-  (package
-    (inherit llvm-11)
-    (name "llvm-julia")
-    (source (origin
-              (inherit (package-source llvm-11))
-              ;; Those patches are inside the Julia source repo.
-              ;; They are _not_ Julia specific (https://github.com/julialang/julia#llvm)
-              ;; but they are required to build Julia.
-              ;; Discussion: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=919628
-              (patches
-               (map (match-lambda
-                      ((name hash)
-                       (julia-patch name hash)))
-                    (list
-                     '("llvm-D27629-AArch64-large_model_6.0.1"
-                       "1qrshmlqvnasdyc158vfn3hnbigqph3lsq7acb9w8lwkpnnm2j4z")
-                     '("llvm8-D34078-vectorize-fdiv"
-                       "19spqc3xsazn1xs9gpcgv9ldadfkv49rmc5khl7sf1dlmhgi4602")
-                     '("llvm-7.0-D44650"
-                       "1h55kkmkiisfj6sk956if2bcj9s0v6n5czn8dxb870vp5nccj3ir")
-                     '("llvm-6.0-DISABLE_ABI_CHECKS"
-                       "014fawd1ba7yckalypfld22zgic87x9nx3cim42zrwygywd36pyg")
-                     '("llvm9-D50010-VNCoercion-ni"
-                       "1s1d3sjsiq4vxg7ncy5cz56zgy5vcq6ls3iqaiqkvr23wyryqmdx")
-                     '("llvm7-revert-D44485"
-                       "0f59kq3p3mpwsbmskypbi4zn01l6ig0x7v2rjp08k2r8z8m6fa8n")
-                     '("llvm-11-D75072-SCEV-add-type"
-                       "176xi1lnbnv2rcs05ywhyb7pd0xgmibayvwzksksg44wg2dh8mbx")
-                     '("llvm-julia-tsan-custom-as"
-                       "0awh40kf6lm4wn1nsjd1bmhfwq7rqj811szanp2xkpspykw9hg9s")
-                     '("llvm-D80101"
-                       "1gsdwmgmpbignvqyxcnlprj899259p3dvdznlncd84ss445qgq3j")
-                     '("llvm-D84031"
-                       "0nks9sbk7p0r5gyr0idrmm93a5fmdai8kihz9532dx4zhcvvqbjc")
-                     '("llvm-10-D85553"
-                       "1zjq7j9q2qp56hwkc8yc8f0z7kvam3j7hj8sb7qyd77r255ff78l")
-                     '("llvm-10-unique_function_clang-sa"
-                       "1jys9w2zqk3dasnxqh0qz5ij7rxi6mkgq9pqjsclmamr5169zyan")
-                     ;'("llvm-D88630-clang-cmake"
-                     ;  "0rs6s71nqnjkny7i69gqazhqj5jqfdr0bkxs2v5a55sfx8fa1k54")
-                     '("llvm-11-D85313-debuginfo-empty-arange"
-                       "1f672d5385xpgb8yrim8d3b7wg2z1l81agnshm1q61kdvjixqx32")
-                     '("llvm-11-D90722-rtdyld-absolute-relocs"
-                       "0kmnai229yyxkmpk9lxd180mcnhk2i8d87k2sg89gc8as18w10r6")
-                     '("llvm-invalid-addrspacecast-sink"
-                       "1n1b7j4s80vj7x5377aj9vyphmxx1q6bm0chhkxp6zsy3mx3g2ry")
-                     '("llvm-11-D92906-ppc-setjmp"
-                       "0cmd4dsblp7a8m03j16dqxws0ijh55zf4jzzxmj341qxa1gamdp9")
-                     '("llvm-11-PR48458-X86ISelDAGToDAG"
-                       "0vwzvlhsdazhxg4gj8g2f00a4f8qc5cgac23w575xk3pgba1jh6y")
-                     '("llvm-11-D93092-ppc-knownbits"
-                       "1748bypsc7c9lbs3fnkv0kwvch6bn85kj98j4jdaz254ig0wa6xj")
-                     '("llvm-11-D93154-globalisel-as"
-                       "1k5wd4z3pa7zj0gyjkif7viqj906dhqlbb7dc95gig40nbxv6zpj")
-                     '("llvm-11-ppc-half-ctr"
-                       "0piywisfz6cmw3133kz7vzhiqflq2y7igakqxlym0gi8pqylv7w9")
-                     '("llvm-11-ppc-sp-from-bp"
-                       "1wmg3485cx5f9pbykyl3jibk1wwv4w1x30hl4jyfndzr2yh8azf9")
-                     '("llvm-rGb498303066a6-gcc11-header-fix"
-                       "0hkd4rwhvh8g2yh13g29wiwnjpv2yd1hdyiv1ryw8izl25bz9c67")
-                     '("llvm-11-D94813-mergeicmps"
-                       "0cmy0ywkgyrdcvr9bd6pd912lyd4gcsrib4z0v05dwgcdxhk7y29")
-                     '("llvm-11-D94980-CTR-half"
-                       "1yf8cxib3z8hz7zi9n6v2g2c6vpfr4slq9hpx8m8yq8f1jbyw3fw")
-                     '("llvm-11-D94058-sext-atomic-ops"
-                       "1x6p6k6q651z5jcqxx8vj17cxnv196mka7mwn7dpp6c23lwgfdpb")
-                     '("llvm-11-D96283-dagcombine-half"
-                       "0lv4iq2f8qrcz1xyxfic3bcr5p0aqam3a7c6pp6fnw3riixm096k"))))
-              (patch-flags '("-p1"))))
-    (arguments
-     (substitute-keyword-arguments (package-arguments llvm-11)
-       ((#:phases phases)
-        `(modify-phases ,phases
-           (add-after 'unpack 'patch-round-two
-             ;; We have to do the patching in two rounds because we can't
-             ;; pass '-p1' and '-p2' in the source field.
-             (lambda* (#:key inputs #:allow-other-keys)
-               (map (lambda (patchname)
-                      (invoke "patch" patchname "-p2"))
-                    (list "llvm-11-AArch64-FastIsel-bug"
-                          "llvm-11-D97435-AArch64-movaddrreg"
-                          "llvm-11-D97571-AArch64-loh"
-                          "llvm-11-aarch64-addrspace"))))))
-       ((#:build-type _) "Release")
-       ((#:configure-flags flags)
-        `(list
-           ;; Build a native compiler and the NVPTX backend (NVIDIA) since
-           ;; Julia insists on it, nothing more.  This reduces build times and
-           ;; disk usage.
-           ,(string-append "-DLLVM_TARGETS_TO_BUILD=" (system->llvm-target))
-           "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=NVPTX"
-
-           "-DLLVM_INSTALL_UTILS=ON"
-           "-DLLVM_BUILD_TESTS=ON"
-           "-DLLVM_ENABLE_FFI=ON"
-           "-DLLVM_ENABLE_RTTI=ON"
-           ;; "-DLLVM_HOST_TRIPLE=${stdenv.hostPlatform.config}"
-           ;; "-DLLVM_DEFAULT_TARGET_TRIPLE=${stdenv.hostPlatform.config}"
-           ;; "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly"
-           "-DLLVM_ENABLE_DUMP=ON"
-           "-DLLVM_LINK_LLVM_DYLIB=ON"))))
-    (inputs
-     (append
-       (package-inputs llvm-11)
-       `(("llvm-11-AArch64-FastIsel-bug"
-          ,(julia-patch "llvm-11-AArch64-FastIsel-bug"
-                        "1m2vddj1mw4kbij8hbrx82piyy6bvr2x7wwdnlxfaqcm72ipzyh9"))
-         ("llvm-11-D97435-AArch64-movaddrreg"
-          ,(julia-patch "llvm-11-D97435-AArch64-movaddrreg"
-                        "10jnavq9ljkj7j2gqj2zd1pwqpqb5zs3zp9h96pmz0djbmxwa86y"))
-         ("llvm-11-D97571-AArch64-loh"
-          ,(julia-patch "llvm-11-D97571-AArch64-loh"
-                        "128zcbg1w1j7hngsf7z1a7alc6lig6l2rqgjp6i8nk3k3f842v6n"))
-         ("llvm-11-aarch64-addrspace"
-          ,(julia-patch "llvm-11-aarch64-addrspace"
-                        "0ckbzgfirxrf2d5bpinpngp7gnilbjrk0cbdfyl3h6f5v6i6xj6m")))))))
-
 (define-public libwhich
   (package
     (name "libwhich")
@@ -261,7 +128,7 @@
              #t)))))
     (native-inputs
      ;; used for tests
-     `(("zlib" ,zlib)))
+     (list zlib))
     (build-system gnu-build-system)
     (home-page "https://github.com/vtjnash/libwhich")
     (synopsis "Like @code{which}, for dynamic libraries")
@@ -272,7 +139,7 @@ libraries.  It is also a bit like @code{ldd} and @code{otool -L}.")
 (define-public julia
   (package
     (name "julia")
-    (version "1.6.2")
+    (version "1.6.3")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -280,9 +147,10 @@ libraries.  It is also a bit like @code{ldd} and @code{otool -L}.")
                     version "/julia-" version ".tar.gz"))
               (sha256
                (base32
-                "0plbj4laifzz8ppk889iv3gaxj1mdddzv7yad6ghml6bfnn24r6m"))
+                "1515x8fs25l3f9csbmd1v4nm041zvjnvigy6s5iidy4yrkwdx4r5"))
               (patches
-               (search-patches "julia-SOURCE_DATE_EPOCH-mtime.patch"))))
+               (search-patches "julia-SOURCE_DATE_EPOCH-mtime.patch"
+                               "julia-allow-parallel-build.patch"))))
     (build-system gnu-build-system)
     (arguments
      `(#:test-target "test"
@@ -328,8 +196,7 @@ libraries.  It is also a bit like @code{ldd} and @code{otool -L}.")
                (("(install: .*) \\$\\(BUILDROOT\\)/doc/_build/html/en/index.html" _ line)
                 (string-append line "\n"))
                (("src ui doc deps")
-                "src ui deps"))
-             #t))
+                "src ui deps"))))
          (add-after 'unpack 'use-system-libwhich
            (lambda* (#:key inputs #:allow-other-keys)
              ;; don't build it
@@ -338,15 +205,13 @@ libraries.  It is also a bit like @code{ldd} and @code{otool -L}.")
              ;; call our version
              (substitute* "base/Makefile"
                (("\\$\\$\\(build_depsbindir\\)/libwhich")
-                (string-append (assoc-ref inputs "libwhich") "/bin/libwhich")))
-             #t))
+                (search-input-file inputs "/bin/libwhich")))))
          (add-after 'unpack 'change-number-of-precompile-statements
            (lambda _
              ;; Remove nss-certs drops the number of statements below 1200,
              ;; causing the build to fail prematurely.
              (substitute* "contrib/generate_precompile.jl"
-               (("1200") "1100"))
-             #t))
+               (("1200") "1100"))))
          ;; For some reason libquadmath is unavailable on this architecture.
          ;; https://github.com/JuliaLang/julia/issues/41613
          ,@(if (target-aarch64?)
@@ -384,14 +249,11 @@ libraries.  It is also a bit like @code{ldd} and @code{otool -L}.")
 
              (substitute* "base/Makefile"
                (("\\$\\(build_includedir\\)/uv/errno.h")
-                (string-append (assoc-ref inputs "libuv")
-                               "/include/uv/errno.h")))
-             #t))
+                (search-input-file inputs "/include/uv/errno.h")))))
          (add-before 'build 'replace-default-shell
            (lambda _
              (substitute* "base/client.jl"
-               (("/bin/sh") (which "sh")))
-             #t))
+               (("/bin/sh") (which "sh")))))
          (add-before 'build 'shared-objects-paths
            (lambda* (#:key inputs #:allow-other-keys)
              (let ((jlpath
@@ -455,26 +317,37 @@ libraries.  It is also a bit like @code{ldd} and @code{otool -L}.")
                   (to "suitesparse" "libsuitesparseconfig"))
                  (((from "libumfpack")) (to "suitesparse" "libumfpack")))
                (substitute* (jlpath "Zlib")
-                 (((from "libz")) (to "zlib" "libz"))))
-              #t))
+                 (((from "libz")) (to "zlib" "libz"))))))
+         (add-after 'unpack 'enable-parallel-tests
+           (lambda* (#:key parallel-tests? #:allow-other-keys)
+             (setenv "JULIA_CPU_THREADS" (if parallel-tests?
+                                             (number->string (parallel-job-count))
+                                             "1"))
+             (format #t "JULIA_CPU_THREADS environment variable set to ~a~%"
+                     (getenv "JULIA_CPU_THREADS"))))
          (add-after 'unpack 'adjust-test-suite
            (lambda* (#:key inputs #:allow-other-keys)
-             (let (;(pcre2 (assoc-ref inputs "pcre2"))
+             (let ((pcre2 (assoc-ref inputs "pcre2"))
                    (mbedtls-apache (assoc-ref inputs "mbedtls"))
                    (mpfr (assoc-ref inputs "mpfr"))
+                   (gmp (assoc-ref inputs "gmp"))
+                   (nghttp2 (assoc-ref inputs "libnghttp2"))
                    (suitesparse (assoc-ref inputs "suitesparse")))
                ;; Some tests only check to see if the input is the correct version.
-               ;(substitute* "stdlib/PCRE2_jll/test/runtests.jl"
-               ;  (("10.36.0") ,(package-version pcre2)))
+               (substitute* "stdlib/PCRE2_jll/test/runtests.jl"
+                 (("10.36.0") ,(package-version pcre2)))
                (substitute* "stdlib/MbedTLS_jll/test/runtests.jl"
                  (("2.24.0") ,(package-version mbedtls-apache)))
                (substitute* "stdlib/MPFR_jll/test/runtests.jl"
                  (("4.1.0") ,(package-version mpfr)))
+               (substitute* "stdlib/GMP_jll/test/runtests.jl"
+                 (("6.2.0") ,(package-version gmp)))
+               (substitute* "stdlib/nghttp2_jll/test/runtests.jl"
+                 (("1.41.0") ,(package-version nghttp2)))
                (substitute* "stdlib/SuiteSparse_jll/test/runtests.jl"
                  (("5004") ,(string-replace-substring
                               (version-major+minor
-                                (package-version suitesparse)) "." "0")))
-               #t)))
+                                (package-version suitesparse)) "." "0"))))))
          (add-before 'check 'disable-broken-tests
            (lambda _
              ;; disabling REPL tests because they require a stdin
@@ -487,8 +360,8 @@ libraries.  It is also a bit like @code{ldd} and @code{otool -L}.")
              ;; Dates/io tests fail on master when networking is unavailable
              ;; https://github.com/JuliaLang/julia/issues/34655
              (substitute* "stdlib/Dates/test/io.jl"
-               (("\"Dates.Date") "\"Date")
-               (("\"Dates.Time") "\"Time"))
+               (("using Dates") "import Dates
+using Dates: @dateformat_str, Date, DateTime, DateFormat, Time"))
              ;; Upstream bug I found when packaging
              ;; https://github.com/JuliaLang/julia/issues/35785
              (substitute* "test/file.jl"
@@ -512,7 +385,19 @@ libraries.  It is also a bit like @code{ldd} and @code{otool -L}.")
              (substitute* "test/cmdlineargs.jl"
                (("test v\\[3") "test_broken v[3")
                (("test isempty\\(v\\[3") "test_broken isempty(v[3"))
-             #t))
+             ;; These tests randomly fails because they depend on CPU.
+             (substitute* "stdlib/LinearAlgebra/test/matmul.jl"
+               ;; Fixed in v1.6.4 (see:
+               ;; https://github.com/JuliaLang/julia/blob/v1.6.4/
+               ;; stdlib/LinearAlgebra/test/matmul.jl#L155).
+               (("@test mul\\!\\(C, vf, transpose\\(vf\\), 2, 3\\)\
+ == 2vf\\*vf' \\.\\+ 3C0")
+                "@test mul!(C, vf, transpose(vf), 2, 3) ≈ 2vf*vf' .+ 3C0"))
+             (substitute* "test/math.jl"
+               ;; @test_broken cannot be used because if the test randomly
+               ;; passes, then it also raises an error.
+               (("@test isinf\\(log1p\\(-one\\(T\\)\\)\\)")
+                " "))))
          (add-before 'install 'symlink-libraries
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((link
@@ -533,8 +418,7 @@ libraries.  It is also a bit like @code{ldd} and @code{otool -L}.")
                (link "zlib" "usr/lib/julia/" "libz\\.so")
                (link "libunwind" "usr/lib/julia/" "libunwind\\.so")
                (symlink (string-append (assoc-ref inputs "p7zip") "/bin/7z")
-                        "usr/libexec/7z")
-               #t)))
+                        "usr/libexec/7z"))))
          (add-after 'install 'symlink-llvm-utf8proc
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -548,9 +432,8 @@ libraries.  It is also a bit like @code{ldd} and @code{otool -L}.")
                                                               (basename file)))))
                         (find-files (string-append (assoc-ref inputs pkgname)
                                                    "/lib") pred)))))
-               (link "llvm" "libLLVM-11\\.so")
-               (link "utf8proc" "libutf8proc\\.so")
-               #t)))
+               (link "llvm" "libLLVM-11jl\\.so")
+               (link "utf8proc" "libutf8proc\\.so"))))
          (add-after 'install 'make-wrapper
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -561,8 +444,7 @@ libraries.  It is also a bit like @code{ldd} and @code{otool -L}.")
                    `("JULIA_LOAD_PATH" ":" prefix
                      ("" "$JULIA_LOAD_PATH"))
                    `("JULIA_DEPOT_PATH" ":" prefix
-                     ("" "$JULIA_DEPOT_PATH"))))
-               #t))))
+                     ("" "$JULIA_DEPOT_PATH"))))))))
        #:make-flags
        (list
         (string-append "prefix=" (assoc-ref %outputs "out"))
@@ -638,7 +520,7 @@ libraries.  It is also a bit like @code{ldd} and @code{otool -L}.")
        ("gfortran:lib" ,gfortran "lib")
        ("gmp" ,gmp)
        ("lapack" ,lapack)
-       ("libgit2" ,libgit2)
+       ("libgit2" ,libgit2-1.1)
        ("libnghttp2" ,nghttp2 "lib")
        ("libssh2" ,libssh2)
        ("libunwind" ,libunwind-julia)
@@ -649,9 +531,7 @@ libraries.  It is also a bit like @code{ldd} and @code{otool -L}.")
        ("openblas" ,openblas)
        ("openlibm" ,openlibm)
        ("p7zip" ,p7zip)
-       ;; pcre2-10.35 has a bug with the JIT regex parser:
-       ;; https://github.com/JuliaLang/julia/issues/40231#issuecomment-812753324
-       ("pcre2" ,pcre2-10.36)
+       ("pcre2" ,pcre2)
        ("suitesparse" ,suitesparse)
        ("utf8proc" ,utf8proc-2.6.1)
        ("wget" ,wget)
@@ -670,7 +550,7 @@ libraries.  It is also a bit like @code{ldd} and @code{otool -L}.")
     (native-search-paths
       (list (search-path-specification
               (variable "JULIA_LOAD_PATH")
-              (files (list "share/julia/packages/")))
+              (files (list "share/julia/loadpath/")))
             (search-path-specification
               (variable "JULIA_DEPOT_PATH")
               (files (list "share/julia/")))))
diff --git a/gnu/packages/jupyter.scm b/gnu/packages/jupyter.scm
index 0de7ad998a..dd5d2a5a55 100644
--- a/gnu/packages/jupyter.scm
+++ b/gnu/packages/jupyter.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2019 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2021 Hugo Lecomte <hugo.lecomte@inria.fr>
+;;; Copyright © 2022 Marius Bakke <marius@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -58,15 +59,10 @@
                 "1bk3as5yw9y5nmq6l15nr46aby34phmvsx9kxgqnm5pd5q2b5h57"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-jupyter-core" ,python-jupyter-core)
-       ("python-pyzmq" ,python-pyzmq)
-       ("python-traitlets" ,python-traitlets)))
+     (list python-dateutil python-jupyter-core python-pyzmq
+           python-traitlets))
     (native-inputs
-     `(("python-ipykernel" ,python-ipykernel)
-       ("python-ipython" ,python-ipython)
-       ("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)))
+     (list python-ipykernel python-ipython python-mock python-pytest))
     (home-page "https://jupyter.org")
     (synopsis "Jupyter protocol implementation")
     (description
@@ -88,17 +84,14 @@ protocol} to be used by both clients and kernels.")
                 "0i7a78dn89ca8h0a42giyxwcmk6y4wrdr7q8h2ax9vybb84c795q"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-entrypoints" ,python-entrypoints)
-       ("python-jupyter-core" ,python-jupyter-core)
-       ("python-jupyter-protocol" ,python-jupyter-protocol)
-       ("python-pyzmq" ,python-pyzmq)
-       ("python-traitlets" ,python-traitlets)))
+     (list python-dateutil
+           python-entrypoints
+           python-jupyter-core
+           python-jupyter-protocol
+           python-pyzmq
+           python-traitlets))
     (native-inputs
-     `(("python-ipykernel" ,python-ipykernel)
-       ("python-ipython" ,python-ipython)
-       ("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)))
+     (list python-ipykernel python-ipython python-mock python-pytest))
     (home-page "https://jupyter.org")
     (synopsis "Discover, launch, and communicate with Jupyter kernels")
     (description
@@ -140,9 +133,8 @@ launching and using Jupyter kernels.")
                                               "\\.py$"))
                         #t))))))
     (propagated-inputs
-     `(("python-jupyter-kernel-mgmt" ,python-jupyter-kernel-mgmt)
-       ("python-jupyter-protocol" ,python-jupyter-protocol)
-       ("python-jsonschema" ,python-jsonschema)))
+     (list python-jupyter-kernel-mgmt python-jupyter-protocol
+           python-jsonschema))
     (synopsis "Test Jupyter kernels")
     (description
      "@code{jupyter_kernel_test} is a tool for testing Jupyter kernels.  It
@@ -170,21 +162,20 @@ Messaging Protocol}.")
                            "-DDISABLE_ARCH_NATIVE=ON" ;no '-march=native'
                            "-DBUILD_TESTING=ON")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-
-       ;; The following inputs are used by the test suite.
-       ("googletest" ,googletest)
-       ("python-pytest" ,python-pytest)
-       ("python" ,python-3)
-       ("python-jupyter-kernel-test" ,python-jupyter-kernel-test)
-       ("python-jupyter-client" ,python-jupyter-client)))
+     (list pkg-config
+           ;; The following inputs are used by the test suite.
+           googletest
+           python-pytest
+           python-3
+           python-jupyter-kernel-test
+           python-jupyter-client))
     (inputs
-     `(("xtl" ,xtl)
-       ("json-modern-cxx" ,json-modern-cxx)
-       ("cppzmq" ,cppzmq)
-       ("zeromq" ,zeromq)
-       ("openssl" ,openssl)
-       ("util-linux" ,util-linux "lib")))         ;libuuid
+     (list xtl
+           json-modern-cxx
+           cppzmq
+           zeromq
+           openssl
+           `(,util-linux "lib")))         ;libuuid
     (home-page "https://quantstack.net/xeus")
     (synopsis "C++ implementation of the Jupyter Kernel protocol")
     (description
@@ -212,7 +203,7 @@ alternative Python kernel for Jupyter.")
     (build-system python-build-system)
     (arguments '(#:tests? #false)) ; there are no tests
     (propagated-inputs
-     `(("python-pygments" ,python-pygments)))
+     (list python-pygments))
     (home-page "https://jupyter.org")
     (synopsis "Pygments theme using JupyterLab CSS variables")
     (description
@@ -233,17 +224,11 @@ the JupyterLab CSS variables.")
          "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)))
+     (list python-deprecation python-packaging python-setuptools
+           python-tomlkit 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)))
+     (list python-pypa-build python-coverage python-pytest
+           python-pytest-cov python-pytest-mock))
     (home-page "https://jupyter.org")
     (synopsis "Jupyter packaging utilities")
     (description "This package provides tools to help build and install
@@ -286,31 +271,31 @@ JavaScript build steps.")
                          ;; Integration tests require a server.
                          "-m" "not integration_test"))))))))
     (propagated-inputs
-     `(("python-anyio" ,python-anyio)
-       ("python-argon2-cffi" ,python-argon2-cffi)
-       ("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-requests-unixsocket" ,python-requests-unixsocket)
-       ("python-send2trash" ,python-send2trash)
-       ("python-terminado" ,python-terminado)
-       ("python-tornado" ,python-tornado-6)
-       ("python-traitlets" ,python-traitlets)
-       ("python-websocket-client" ,python-websocket-client)))
+     (list python-anyio
+           python-argon2-cffi
+           python-ipython-genutils
+           python-jinja2
+           python-jupyter-client
+           python-jupyter-core
+           python-nbconvert
+           python-nbformat
+           python-prometheus-client
+           python-pyzmq
+           python-requests-unixsocket
+           python-send2trash
+           python-terminado
+           python-tornado-6
+           python-traitlets
+           python-websocket-client))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-ipykernel" ,python-ipykernel)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-console-scripts" ,python-pytest-console-scripts)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-mock" ,python-pytest-mock)
-       ("python-pytest-tornasync" ,python-pytest-tornasync)
-       ("python-requests" ,python-requests)))
+     (list python-coverage
+           python-ipykernel
+           python-pytest
+           python-pytest-console-scripts
+           python-pytest-cov
+           python-pytest-mock
+           python-pytest-tornasync
+           python-requests))
     (home-page "https://jupyter.org")
     (synopsis "Core services, APIs, and REST endpoints for Jupyter web applications")
     (description
@@ -331,8 +316,7 @@ endpoints—to Jupyter web applications.")
          "0y7vhhas3qndiypcpcfnhrj9n92v2w4hdc86nn620s9h9nl2j6jw"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-jupyter-packaging" ,python-jupyter-packaging)
-       ("python-setuptools" ,python-setuptools)))
+     (list python-jupyter-packaging 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,
@@ -355,31 +339,28 @@ are interactive HTML widgets for Jupyter notebooks and the IPython kernel.")
     ;; 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)))
+     (list python-async-generator python-jupyter-client python-nbformat
+           python-nest-asyncio 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)))
+     (list python-black
+           python-bumpversion
+           python-check-manifest
+           python-codecov
+           python-coverage
+           python-flake8
+           ;; ("python-ipykernel" ,python-ipykernel)
+           ;; ("python-ipython" ,python-ipython)
+           ;; ("python-ipywidgets" ,python-ipywidgets)
+           python-mypy
+           python-pip
+           python-pytest
+           python-pytest-cov
+           python-setuptools
+           python-testpath
+           python-tox
+           python-twine
+           python-wheel
+           python-xmltodict))
     (home-page "https://jupyter.org")
     (synopsis "Client library for executing notebooks")
     (description
@@ -390,16 +371,16 @@ nbconvert's @code{ExecutePreprocessor.}")
 (define-public repo2docker
   (package
     (name "repo2docker")
-    (version "2021.03.0")
+    (version "2021.08.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
                     (url "https://github.com/jupyterhub/repo2docker/")
-                    (commit "2021.03.0")))
+                    (commit version)))
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "18w8rgf7fpf79kx36y2c3xi3d52i41z112l3sz719d8kg0bir16m"))))
+                "111irpghzys0s5ixs8paskz7465cls1sm9d5bg45a15jklcw84a9"))))
     (outputs '("out" "doc"))
     (build-system python-build-system)
     (arguments
@@ -419,29 +400,31 @@ nix-shell-wrapper|repo2docker-entrypoint)")
                     (lambda* (#:key outputs #:allow-other-keys)
                       (let* ((out (assoc-ref outputs "doc"))
                              (doc (string-append out "/share/doc/"
-                                                 ,name)))
+                                                 ,(package-name this-package))))
                         (setenv "PYTHONPATH"
                                 (string-append (getcwd) ":"
-                                               (getenv "PYTHONPATH")))
+                                               (getenv "GUIX_PYTHONPATH")))
+                        ;; Don't treat warnings as errors.
+                        (substitute* "docs/Makefile"
+                          (("(SPHINXOPTS[[:blank:]]+= )-W" _ group)
+                           group))
                         (with-directory-excursion "docs"
                           (invoke  "make" "html")
                           (copy-recursively "build/html"
                                             (string-append doc "/html")))))))))
     (inputs
-     `(("python-traitlets" ,python-traitlets)
-       ("python-toml" ,python-toml)
-       ("python-semver" ,python-semver)
-       ("python-ruamel.yaml" ,python-ruamel.yaml)
-       ("python-requests" ,python-requests)
-       ("python-json-logger" ,python-json-logger)
-       ("python-jinja2" ,python-jinja2)
-       ("python-escapism" ,python-escapism)
-       ("python-docker" ,python-docker)))
+     (list python-traitlets
+           python-toml
+           python-semver
+           python-ruamel.yaml
+           python-requests
+           python-json-logger
+           python-jinja2
+           python-escapism
+           python-docker))
     (native-inputs
-     `(("python-sphinx" ,python-sphinx)
-       ("python-recommonmark" ,python-recommonmark)
-       ("python-sphinxcontrib-autoprogram" ,python-sphinxcontrib-autoprogram)
-       ("python-pydata-sphinx-theme" ,python-pydata-sphinx-theme)))
+     (list python-sphinx python-entrypoints python-recommonmark
+           python-sphinxcontrib-autoprogram python-pydata-sphinx-theme))
     (home-page "https://repo2docker.readthedocs.io/en/latest/index.html#")
     (synopsis "Generate docker images from repositories")
     (description
@@ -484,11 +467,9 @@ Docker registry.")
               (invoke "python" "-m" "bash_kernel.install" "--prefix" out)
               #t))))))
    (inputs
-     `(("bash" ,bash)))
+     (list bash))
    (propagated-inputs
-     `(("python-pexpect" ,python-pexpect)
-       ("python-ipykernel" ,python-ipykernel)
-       ("python-jupyter-client" ,python-jupyter-client)))
+     (list python-pexpect python-ipykernel python-jupyter-client))
    (home-page "https://github.com/takluyver/bash_kernel")
    (synopsis "Jupyter kernel for Bash")
    (description "A bash shell kernel for Jupyter.")
@@ -525,14 +506,10 @@ Docker registry.")
                  (string-append "--InstallKernelSpec.prefix=" out))
                #t))))))
     (native-inputs
-     `(("python-traitlets" ,python-traitlets)
-       ("python-jupyter-client" ,python-jupyter-client)
-       ("python-notebook" ,python-notebook)
-       ("python-ipykernel" ,python-ipykernel)
-       ("python-html5lib" ,python-html5lib-0.9)))
+     (list python-traitlets python-jupyter-client python-notebook
+           python-ipykernel python-html5lib-0.9))
     (propagated-inputs
-     `(("python-sparqlwrapper" ,python-sparqlwrapper)
-       ("python-pygments" ,python-pygments)))
+     (list python-sparqlwrapper python-pygments))
     (home-page "https://github.com/paulovn/sparql-kernel")
     (synopsis "Jupyter kernel for SPARQL")
     (description "This module installs a Jupyter kernel for SPARQL.  It allows
@@ -553,19 +530,17 @@ a notebook.")
          "0krfc95yjlhjdmrsladhy6lpf4xs1zw49nmkyl4pkykndglvwa1m"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-jupyter-client" ,python-jupyter-client)
-       ("python-jupyter-server" ,python-jupyter-server)
-       ("python-nbclient" ,python-nbclient)
-       ("python-nbconvert" ,python-nbconvert)))
+     (list python-jupyter-client python-jupyter-server python-nbclient
+           python-nbconvert))
     (native-inputs
-     `(("python-ipywidgets" ,python-ipywidgets)
-       ("python-jupyter-packaging" ,python-jupyter-packaging)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-tornasync" ,python-pytest-tornasync)
-       ("python-setuptools" ,python-setuptools)
-       ("python-tornado" ,python-tornado-6)))
+     (list python-ipywidgets
+           python-jupyter-packaging
+           python-matplotlib
+           python-mock
+           python-pytest
+           python-pytest-tornasync
+           python-setuptools
+           python-tornado-6))
     (home-page "https://github.com/voila-dashboards/voila")
     (synopsis "Render live Jupyter notebooks with interactive widgets")
     (description
diff --git a/gnu/packages/kawa.scm b/gnu/packages/kawa.scm
index 9550a01720..49a3ca6e16 100644
--- a/gnu/packages/kawa.scm
+++ b/gnu/packages/kawa.scm
@@ -48,7 +48,7 @@
                  `("JAVA_HOME" ":" = (,(assoc-ref inputs "icedtea"))))
                #t))))))
     (inputs
-     `(("icedtea" ,icedtea-8 "jdk")))
+     (list `(,icedtea-8 "jdk")))
     (home-page "https://www.gnu.org/software/kawa/")
     (synopsis "Java framework and implementation of Scheme, Elisp, and more")
     (description
diff --git a/gnu/packages/kde-frameworks.scm b/gnu/packages/kde-frameworks.scm
index 00d5eb049d..65937f8970 100644
--- a/gnu/packages/kde-frameworks.scm
+++ b/gnu/packages/kde-frameworks.scm
@@ -33,6 +33,7 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix utils)
+  #:use-module (guix gexp)
   #:use-module (gnu packages)
   #:use-module (gnu packages acl)
   #:use-module (gnu packages admin)
@@ -167,11 +168,9 @@ common build settings used in software produced by the KDE community.")
     (native-inputs
      ;; TODO: Think about adding pulseaudio. Is it required for sound?
      ;; TODO: Add building the super experimental QML support
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules pkg-config qttools))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (arguments
      `(#:configure-flags
        '("-DCMAKE_CXX_FLAGS=-fPIC"
@@ -206,17 +205,15 @@ common build settings used in software produced by the KDE community.")
                 "1wk1ip2w7fkh65zk6rilj314dna0hgsv2xhjmpr5w08xa8sii1y5"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules pkg-config qttools))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("phonon" ,phonon)
-       ("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)
-       ("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base)
-       ("libxml2" ,libxml2)))
+     (list qtbase-5
+           phonon
+           qtbase-5
+           qtx11extras
+           gstreamer
+           gst-plugins-base
+           libxml2))
     (arguments
      `(#:configure-flags
        '( "-DPHONON_BUILD_PHONON4QT5=ON")))
@@ -256,9 +253,9 @@ Phonon-GStreamer is a backend based on the GStreamer multimedia library.")
              (substitute* "autotests/CMakeLists.txt"
                ((".*providertest.cpp") "")))))))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Open Collaboration Service client library")
     (description "Attica is a Qt library that implements the Open
@@ -288,18 +285,17 @@ http://freedesktop.org/wiki/Specifications/open-collaboration-services/")
                 "1kqhps4qyvqm0qmk7fb3w41bib898amipchf8csdzacw4bzpri9k"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("dbus" ,dbus)
-       ("extra-cmake-modules" ,extra-cmake-modules)))
+     (list dbus extra-cmake-modules))
     (inputs
      ;; TODO: qtdeclarative (yields one failing test)
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (arguments
-     `(#:configure-flags
-       (list (string-append
-              "-DUDEV_RULES_INSTALL_DIR=" %output "/lib/udev/rules.d"))
-       ;; TODO: Make tests pass: DBUS_FATAL_WARNINGS=0 still yields 7/8 tests
-       ;; failing.  When running after install, tests hang.
-       #:tests? #f))
+     (list #:configure-flags
+           #~(list (string-append
+                    "-DUDEV_RULES_INSTALL_DIR=" #$output "/lib/udev/rules.d"))
+           ;; TODO: Make tests pass: DBUS_FATAL_WARNINGS=0 still yields 7/8 tests
+           ;; failing.  When running after install, tests hang.
+           #:tests? #f))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "QML wrapper for BlueZ")
     (description "bluez-qt is a Qt-style library for accessing the bluez
@@ -321,11 +317,9 @@ Bluetooth stack.  It is used by the KDE Bluetooth stack, BlueDevil.")
                 "0lqglrjgjb4ralgmr7lb9k7acmn8q4jm18s4p3gbgd9iswyqgsbm"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("fdupes" ,fdupes)
-       ("libxml2" ,libxml2)))
+     (list extra-cmake-modules fdupes libxml2))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Default KDE Plasma 5 icon theme")
     (description "Breeze provides a freedesktop.org compatible icon theme.
@@ -352,17 +346,15 @@ It is the default icon theme for the KDE Plasma 5 desktop.")
     (arguments
      `(#:tests? #f)) ; has no test target
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (propagated-inputs
      ;; kapidox is a python programm
      ;; TODO: check if doxygen has to be installed, the readme does not
      ;; mention it. The openSuse .rpm lists doxygen, graphviz, graphviz-gd,
      ;; and python-xml.
-     `(("python" ,python)
-       ("python-jinja2" ,python-jinja2)
-       ("python-pyyaml" ,python-pyyaml)))
+     (list python python-jinja2 python-pyyaml))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "KDE Doxygen Tools")
     (description "This framework contains scripts and data for building API
@@ -392,12 +384,9 @@ documentation.")
                 "0z8asn357pdbv4g9g0x18p72wskca1qanxljyix7wzc5rsi63wzm"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("bzip2" ,bzip2)
-       ("qtbase" ,qtbase-5)
-       ("xz" ,xz)
-       ("zlib" ,zlib)))
+     (list bzip2 qtbase-5 xz zlib))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Qt 5 addon providing access to numerous types of archives")
     (description "KArchive provides classes for easy reading, creation and
@@ -426,12 +415,9 @@ GZip format, via a subclass of QIODevice.")
                 "1y1f8gc1g9yn9kgmn53f1zvkizasfs667dfin3fyci657r5qwpw2"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("perl" ,perl)
-       ("tzdata" ,tzdata-for-tests)))
+     (list extra-cmake-modules perl tzdata-for-tests))
     (inputs
-     `(("libical" ,libical)
-       ("qtbase" ,qtbase-5)))
+     (list libical qtbase-5))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -457,9 +443,8 @@ GZip format, via a subclass of QIODevice.")
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "TZ" "Europe/Prague")
              (setenv "TZDIR"
-                     (string-append (assoc-ref inputs "tzdata")
-                                    "/share/zoneinfo"))
-             #t)))))
+                     (search-input-directory inputs
+                                             "share/zoneinfo")))))))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Library for interfacing with calendars")
     (description "This library provides access to and handling of calendar
@@ -487,11 +472,9 @@ and the older vCalendar.")
                 "0y9n2a5n18pasdmrp0xb84hla9l27yj2x3k4p1c041sd9nkwixpk"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("gperf" ,gperf)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules gperf qttools))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "String encoding and manipulating library")
     (description "KCodecs provide a collection of methods to manipulate
@@ -523,13 +506,10 @@ Internet).")
                 "1s3h4hfpw7c0894cifj66bj1yhx8g94ckvl71jm7qqsb5x5h6y9n"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("dbus" ,dbus)
-       ("extra-cmake-modules" ,extra-cmake-modules)
-       ("inetutils" ,inetutils)
-       ("qttools" ,qttools)
-       ("xorg-server" ,xorg-server-for-tests)))
+     (list dbus extra-cmake-modules inetutils qttools
+           xorg-server-for-tests))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -588,13 +568,11 @@ propagate their changes to their respective configuration files.")
                 "10a7zys3limsawl7lk9ggymk3msk2bp0y8hp0jmsvk3l405pd1ps"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)
-       ("shared-mime-info" ,shared-mime-info)
-       ;; TODO: FAM: File alteration notification http://oss.sgi.com/projects/fam
-       ("xorg-server" ,xorg-server-for-tests))) ; for the tests
+     (list extra-cmake-modules qttools shared-mime-info
+           ;; TODO: FAM: File alteration notification http://oss.sgi.com/projects/fam
+           xorg-server-for-tests)) ; for the tests
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -646,13 +624,9 @@ many more.")
               (patches (search-patches "kdbusaddons-kinit-file-name.patch"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("dbus" ,dbus)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules dbus qttools))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)
-       ("kinit" ,kinit-bootstrap))) ;; kinit-bootstrap: kinit package which does not depend on kdbusaddons.
+     (list qtbase-5 qtx11extras kinit-bootstrap)) ;; kinit-bootstrap: kinit package which does not depend on kdbusaddons.
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -690,11 +664,10 @@ as well as an API to create KDED modules.")
                 "0wadknnf472rqg2xnqzs5v23qzqfr336wj6d96yg2ayqm0chbppy"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules qttools))
     (inputs
-     `(("avahi" ,avahi) ; alternativly dnssd could be used
-       ("qtbase" ,qtbase-5)))
+     (list avahi ; alternativly dnssd could be used
+           qtbase-5))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Network service discovery using Zeroconf")
     (description "KDNSSD is a library for handling the DNS-based Service
@@ -717,16 +690,14 @@ infrastructure.")
                 "1h6pgg89gvxl8gw7wmkabyqqrzad5pxyv5lsmn1fl4ir8lcc5q2l"))))
     (build-system cmake-build-system)
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("boost" ,boost)
-       ("graphviz" ,graphviz)
-       ("kiconthemes" ,kiconthemes)
-       ("kparts" ,kparts)
-       ("qtsvg" ,qtsvg)))
+     (list qtbase-5
+           boost
+           graphviz
+           kiconthemes
+           kparts
+           qtsvg))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list pkg-config extra-cmake-modules kdoctools))
     (home-page "https://apps.kde.org/en/kgraphviewer")
     (synopsis "Graphviz dot graph viewer for KDE")
     (description "KGraphViewer is a Graphviz DOT graph file viewer, aimed to
@@ -752,11 +723,9 @@ replace the other outdated Graphviz tools.")
     ;; python-sip, clang-python, libclang.  Requires python-2 in all cases for
     ;; clang-python.
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules pkg-config))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)))
+     (list qtbase-5 qtx11extras))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Utilities for graphical user interfaces")
     (description "The KDE GUI addons provide utilities for graphical user
@@ -787,11 +756,9 @@ interfaces in the areas of colors, fonts, text, images, keyboard input.")
                  (display "[testDefaultRegions]\n*\n")))
              #t)))))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules qttools))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list qtbase-5 qtdeclarative))
     (home-page "https://invent.kde.org/frameworks/kholidays")
     (synopsis "Library for regional holiday information")
     (description "This library provides a C++ API that determines holiday and
@@ -816,11 +783,9 @@ other special events for a geographical region.")
      `(("gettext" ,gettext-minimal)
        ("python" ,python)))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtscript" ,qtscript)))
+     (list qtbase-5 qtdeclarative qtscript))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -856,12 +821,10 @@ translation scripting.")
                 "0vbxs80a8kh2xbxclx8zwl7acynsasa7i0cs171fxr26d0dmmhm5"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules pkg-config))
     (inputs
-     `(("libxscrnsaver" ,libxscrnsaver) ; X-Screensaver based poller, fallback mode
-       ("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)))
+     (list libxscrnsaver ; X-Screensaver based poller, fallback mode
+           qtbase-5 qtx11extras))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Reporting of idle time of user and system")
     (description "KIdleTime is a singleton reporting information on idle time.
@@ -888,19 +851,18 @@ or user activity.")
     (properties `((upstream-name . "kirigami2")))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules qttools))
     (inputs
-     `(("kwindowsystem" ,kwindowsystem)
-       ;; TODO: Find a way to activate this optional include without
-       ;; introducing a recursive dependency.
-       ;;("plasma-frameworks" ,plasma-framework) ;; Tier 3!
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtquickcontrols2" ,qtquickcontrols2)
-       ("qtsvg" ,qtsvg)
-       ;; Run-time dependency
-       ("qtgraphicaleffects" ,qtgraphicaleffects)))
+     (list kwindowsystem
+           ;; TODO: Find a way to activate this optional include without
+           ;; introducing a recursive dependency.
+           ;;("plasma-frameworks" ,plasma-framework) ;; Tier 3!
+           qtbase-5
+           qtdeclarative
+           qtquickcontrols2
+           qtsvg
+           ;; Run-time dependency
+           qtgraphicaleffects))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "QtQuick components for mobile user interfaces")
     (description "Kirigami is a set of high level QtQuick components looking
@@ -923,10 +885,9 @@ of applications that follow the Kirigami Human Interface Guidelines.")
                 "0x7y5shg2pp490hvmkz81b8j01cha9j1001q34m7pnyf0n3zknzc"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list qtbase-5 qtdeclarative))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Set of item models extending the Qt model-view framework")
     (description "KItemModels provides the following models:
@@ -974,10 +935,9 @@ model to observers
                 "04vlmkvc3y5h7cpb6kdv9gha5axxkimhqh44mdg2ncyn4sas6j68"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules qttools))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Set of item views extending the Qt model-view framework")
     (description "KItemViews includes a set of views, which can be used with
@@ -1000,10 +960,9 @@ to flat and hierarchical lists.")
                 "1wj4n2a8iz9ml1y0012xkpsx3dfp5gl2dn80sifrzvkxjxrhwach"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules qttools))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Data plotting library")
     (description "KPlotWidget is a QWidget-derived class that provides a virtual
@@ -1028,13 +987,11 @@ pixel units.")
                 "12jn7lqsp86329spai7n1n8i65nwhxh8gp33wkq543h7w3i2a3jb"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("perl" ,perl)
-       ("qttools" ,qttools)
-       ;; Optional, for compile-time validation of syntax definition files:
-       ("qtxmlpatterns" ,qtxmlpatterns)))
+     (list extra-cmake-modules perl qttools
+           ;; Optional, for compile-time validation of syntax definition files:
+           qtxmlpatterns))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1077,13 +1034,9 @@ integration with a custom editor as well as a ready-to-use
                 "0hrpbfzixjpnfy9q5x66q1fff0p7n80rrs127zzdv68pyi6456ry"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules pkg-config))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtwayland" ,qtwayland)
-       ("wayland" ,wayland)
-       ("wayland-protocols" ,wayland-protocols)))
+     (list qtbase-5 qtwayland wayland wayland-protocols))
     (arguments
      `(#:tests? #f ; FIXME tests require weston to run
                    ; weston requires wayland flags in mesa
@@ -1118,11 +1071,9 @@ represented by a QPoint or a QSize.")
                 "03l37lh219np7pqfa56r2v7n5s5xg4rjq005qng4b5izd95ri56j"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)
-       ("xorg-server" ,xorg-server-for-tests)))
+     (list extra-cmake-modules qttools xorg-server-for-tests))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1155,12 +1106,12 @@ configuration pages, message boxes, and password requests.")
                 "0a68cj0bsl5a9sxfd969khznycrn9p6grp2b08hqacxqdknzs0wh"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)
-       ("dbus" ,dbus) ; for the tests
-       ("openbox" ,openbox) ; for the tests
-       ("qttools" ,qttools)
-       ("xorg-server" ,xorg-server-for-tests))) ; for the tests
+     (list extra-cmake-modules
+           pkg-config
+           dbus ; for the tests
+           openbox ; for the tests
+           qttools
+           xorg-server-for-tests)) ; for the tests
     (inputs
      `(("libxrender" ,libxrender)
        ("qtbase" ,qtbase-5)
@@ -1218,14 +1169,12 @@ lower level classes for interaction with the X Windowing System.")
                 "0ydq1l823jgp0yrrpqi1zdk5dsg65ydk1x082qwsa9a0vzs0np3x"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("dbus" ,dbus)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules dbus pkg-config))
     (propagated-inputs
      ;; Headers contain #include <ModemManager/ModemManager.h>
-     `(("modem-manager" ,modem-manager)))
+     (list modem-manager))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1256,15 +1205,13 @@ messages.")
                 "1h2kdw5vs7mn3n7bvqwm36a48ra9iap6384kanz14zjbankj04c1"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("dbus" ,dbus)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules dbus pkg-config))
     (propagated-inputs
      ;; Headers contain #include <NetworkManager.h> and
      ;;                 #include <libnm/NetworkManager.h>
-     `(("network-manager" ,network-manager)))
+     (list network-manager))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1295,10 +1242,9 @@ which are used in DBus communication.")
                 "1rjsnz0g7zyzgii26sk370adb6jcyvr2lm8qi23fvqimifngqm2c"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("fdupes" ,fdupes)))
+     (list extra-cmake-modules fdupes))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Oxygen provides the standard icon theme for the KDE desktop")
     (description "Oxygen icon theme for the KDE desktop")
@@ -1319,11 +1265,9 @@ which are used in DBus communication.")
         (base32 "1qflivvb593d2npc218xkdn3w5zvl7x8v1b52ydnggsxzbgkqvb4"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("libdmtx" ,libdmtx)
-       ("qrencode" ,qrencode)
-       ("qtbase" ,qtbase-5))) ;; TODO: rethink: nix propagates this
+     (list libdmtx qrencode qtbase-5)) ;; TODO: rethink: nix propagates this
     (home-page "https://api.kde.org/frameworks/prison/html/index.html")
     (synopsis "Barcode generation abstraction layer")
     (description "Prison is a Qt-based barcode abstraction layer/library and
@@ -1343,13 +1287,9 @@ provides uniform access to generation of barcodes with data.")
                 "1i0ql68kxv9jxs24rsd3s7jhjid3f2fq56fj4wbp16zb4wd14099"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules pkg-config))
     (inputs
-     `(("glib" ,glib)
-       ("pulseaudio" ,pulseaudio)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtbase" ,qtbase-5)))
+     (list glib pulseaudio qtdeclarative qtbase-5))
     (home-page "https://invent.kde.org/libraries/pulseaudio-qt/")
     (synopsis "Qt bindings for PulseAudio")
     (description
@@ -1376,17 +1316,16 @@ libpulse.")
                 "1n47cl082zqdw6ykil04rw6bws4fn1m8wfx4vxv1aqj9warbdks3"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules pkg-config))
     (inputs
-     `(("kauth" ,kauth)
-       ("kconfigwidgets" ,kconfigwidgets) ; optional
-       ("kcoreaddons" ,kcoreaddons)
-       ("kiconthemes" ,kiconthemes) ; optional
-       ("kirigami" ,kirigami)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtquickcontrols2" ,qtquickcontrols2)))
+     (list kauth
+           kconfigwidgets ; optional
+           kcoreaddons
+           kiconthemes ; optional
+           kirigami
+           qtbase-5
+           qtdeclarative
+           qtquickcontrols2))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "QtQuickControls2 style that integrates with the desktop")
     (description "This is a style for QtQuickControls2 which is using
@@ -1417,11 +1356,7 @@ feel.")
              (setenv "DBUS_FATAL_WARNINGS" "0")
              (invoke "dbus-launch" "ctest" "."))))))
     (native-inputs
-     `(("bison" ,bison)
-       ("dbus" ,dbus)
-       ("extra-cmake-modules" ,extra-cmake-modules)
-       ("flex" ,flex)
-       ("qttools" ,qttools)))
+     (list bison dbus extra-cmake-modules flex qttools))
     (inputs
      `(("qtbase" ,qtbase-5)
        ("qtdeclarative" ,qtdeclarative)
@@ -1449,13 +1384,11 @@ system.")
                 "0b88h5fw1n8zyrg0vq3lj2jbjjyh0mk64lj6ab3643kxzqxbn30w"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules pkg-config qttools))
     (inputs
-     `(("hunspell" ,hunspell)
-       ;; TODO: hspell (for Hebrew), Voikko (for Finish)
-       ("qtbase" ,qtbase-5)))
+     (list hunspell
+           ;; TODO: hspell (for Hebrew), Voikko (for Finish)
+           qtbase-5))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Multi-language spell checker")
     (description "Sonnet is a plugin-based spell checking library for Qt-based
@@ -1478,9 +1411,9 @@ ASpell and HUNSPELL.")
                 "0y1q0wy073lf11g4jrp4bdw4kpj4ibqfscsxj6zlh8ban9zlf389"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Helper for multithreaded programming")
     (description "ThreadWeaver is a helper for multithreaded programming.  It
@@ -1508,26 +1441,26 @@ uses a job-based interface to queue tasks and execute them in an efficient way."
                 "1whsp0f87lrcn61s9rfhy0aj68hm6zgfa38mq6frlkcjksi0z1vn"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
-    (inputs
-     `(("boost" ,boost)
-       ("kauth" ,kauth)
-       ("kbookmarks" ,kbookmarks)
-       ("kcodecs" ,kcodecs)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kio" ,kio)
-       ("kitemviews" ,kitemviews)
-       ("kjobwidgets" ,kjobwidgets)
-       ("kservice" ,kservice)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("solid" ,solid)))
+     (list extra-cmake-modules))
+    (inputs
+     (list boost
+           kauth
+           kbookmarks
+           kcodecs
+           kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kio
+           kitemviews
+           kjobwidgets
+           kservice
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           qtbase-5
+           qtdeclarative
+           solid))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Core components for the KDE Activity concept")
     (description "KActivities provides the infrastructure needed to manage a
@@ -1553,13 +1486,9 @@ with other frameworks.")
                 "0nmdz7ra3hpg0air4lfkzilv7cwx3zxs29k7sh8l3i1fs3qpjwxm"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("dbus" ,dbus)
-       ("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)))
+     (list dbus extra-cmake-modules qttools))
     (inputs
-     `(("kcoreaddons" ,kcoreaddons)
-       ("polkit-qt" ,polkit-qt)
-       ("qtbase" ,qtbase-5)))
+     (list kcoreaddons polkit-qt qtbase-5))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1600,12 +1529,9 @@ utilities.")
                 "1pjgya8wi28jx63hcdi9v5f5487gzbkw2j1iganhd7bhcb8s7zpy"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules qttools))
     (inputs
-     `(("kconfig" ,kconfig)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("qtbase" ,qtbase-5)))
+     (list kconfig kwidgetsaddons qtbase-5))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Powerful autocompletion framework and widgets")
     (description "This framework helps implement autocompletion in Qt-based
@@ -1628,16 +1554,12 @@ integrated it into your application's other widgets.")
                 "182ma11z3kqxq3cwy7kwprfqkb9bcmn44w7k9vixbid4pv5wa0lb"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("xorg-server" ,xorg-server))) ; for the tests
+     (list extra-cmake-modules xorg-server)) ; for the tests
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (propagated-inputs
-     `(;; As required by KF5ContactsConfig.cmake.
-       ("kcodecs" ,kcodecs)
-       ("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("ki18n" ,ki18n)))
+     (list ;; As required by KF5ContactsConfig.cmake.
+           kcodecs kconfig kcoreaddons ki18n))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1647,8 +1569,7 @@ integrated it into your application's other widgets.")
              ;; Xvfb doesn't have proper glx support and needs a pixeldepth
              ;; of 24 bit to avoid "libGL error: failed to load driver: swrast"
              ;;                    "Could not initialize GLX"
-             (system (string-append (assoc-ref inputs "xorg-server")
-                                    "/bin/Xvfb :1 -screen 0 640x480x24 &"))
+             (system "Xvfb :1 -screen 0 640x480x24 &")
              (setenv "DISPLAY" ":1")
              #t)))))
     (home-page "https://community.kde.org/Frameworks")
@@ -1674,12 +1595,9 @@ localized country name to ISO 3166-1 alpha 2 code mapping and vice verca.
                 "11sy9hrjpvybqi53qjrnncy9mzifrb3vqxi2d12ldjzqyqd8pirp"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("kcoreaddons" ,kcoreaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)))
+     (list kcoreaddons kwindowsystem qtbase-5 qtx11extras))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Graceful handling of application crashes")
     (description "KCrash provides support for intercepting and handling
@@ -1701,17 +1619,17 @@ application crashes.")
                 "0g0k83np2xaxk05spf14h5fvzy0n7kbcwx1sa9wjh570f6jx87am"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("docbook-xml" ,docbook-xml)
-       ("docbook-xsl" ,docbook-xsl)
-       ("karchive" ,karchive)
-       ("ki18n" ,ki18n)
-       ("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)
-       ("perl" ,perl)
-       ("perl-uri" ,perl-uri)
-       ("qtbase" ,qtbase-5)))
+     (list docbook-xml
+           docbook-xsl
+           karchive
+           ki18n
+           libxml2
+           libxslt
+           perl
+           perl-uri
+           qtbase-5))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1775,20 +1693,20 @@ from DocBook files.")
        ("pkg-config" ,pkg-config)
        ("python-2" ,python-2)))
     (inputs
-     `(("attr" ,attr)
-       ;; TODO: EPub http://sourceforge.net/projects/ebook-tools
-       ("karchive" ,karchive)
-       ("kcoreaddons" ,kcoreaddons)
-       ("ki18n" ,ki18n)
-       ("qtmultimedia" ,qtmultimedia)
-       ("qtbase" ,qtbase-5)
-       ;; Required run-time packages
-       ("catdoc" ,catdoc)
-       ;; Optional run-time packages
-       ("exiv2" ,exiv2)
-       ("ffmpeg" ,ffmpeg)
-       ("poppler-qt5" ,poppler-qt5)
-       ("taglib" ,taglib)))
+     (list attr
+           ;; TODO: EPub http://sourceforge.net/projects/ebook-tools
+           karchive
+           kcoreaddons
+           ki18n
+           qtmultimedia
+           qtbase-5
+           ;; Required run-time packages
+           catdoc
+           ;; Optional run-time packages
+           exiv2
+           ffmpeg
+           poppler-qt5
+           taglib))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Extract metadata from different fileformats")
     (description "KFileMetaData provides a simple library for extracting the
@@ -1812,12 +1730,11 @@ by applications to write metadata.")
                 "0pk4b725wapzdxv1mm6ddqcl6z8ffcpr32i5vrhrin8awi5gx13s"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules pkg-config))
     (inputs
-     `(("karchive" ,karchive) ; for Krita and OpenRaster images
-       ("openexr" ,openexr) ; for OpenEXR high dynamic-range images
-       ("qtbase" ,qtbase-5)))
+     (list karchive ; for Krita and OpenRaster images
+           openexr-2 ; for OpenEXR high dynamic-range images
+           qtbase-5))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1866,13 +1783,9 @@ formats.")
                 "13kdczzyyh17hf6vlhh4li5bn4yq5bab5xa8mm63r9rynxihgclf"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules qttools))
     (inputs
-     `(("kcoreaddons" ,kcoreaddons)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)))
+     (list kcoreaddons kwidgetsaddons qtbase-5 qtx11extras))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Widgets for showing progress of asynchronous jobs")
     (description "KJobWIdgets provides widgets for showing progress of
@@ -1894,20 +1807,18 @@ asynchronous jobs.")
                 "01bn23xw2n53h9nl99lm3cjnqs8s66bmwkzf6fkpg9rzkykizbyc"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("dbus" ,dbus)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules dbus qttools))
     (inputs
-     `(("kcodecs" ,kcodecs)
-       ("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("phonon" ,phonon)
-       ("qtbase" ,qtbase-5)
-       ("qtspeech" ,qtspeech)
-       ;; TODO: Think about adding dbusmenu-qt5 from
-       ;; https://launchpad.net/libdbusmenu-qt
-       ("qtx11extras" ,qtx11extras)))
+     (list kcodecs
+           kconfig
+           kcoreaddons
+           kwindowsystem
+           phonon
+           qtbase-5
+           qtspeech
+           ;; TODO: Think about adding dbusmenu-qt5 from
+           ;; https://launchpad.net/libdbusmenu-qt
+           qtx11extras))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1944,14 +1855,14 @@ covers feedback and persistent events.")
                                        "kpackage-fix-KF5PackageMacros.cmake.patch"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("karchive" ,karchive)
-       ("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kdoctools" ,kdoctools)
-       ("ki18n" ,ki18n)
-       ("qtbase" ,qtbase-5)))
+     (list karchive
+           kconfig
+           kcoreaddons
+           kdoctools
+           ki18n
+           qtbase-5))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -2002,12 +1913,11 @@ were traditional plugins.")
                 "1hp6iilr2asf2269linfazjv4yjg7rsi8wydxx53yyr99r0bgmah"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("kcoreaddons" ,kcoreaddons)
-       ("ki18n" ,ki18n)
-       ;; TODO: utempter, for managing UTMP entries
-       ("qtbase" ,qtbase-5)))
+     (list kcoreaddons ki18n
+           ;; TODO: utempter, for managing UTMP entries
+           qtbase-5))
     (arguments
      `(#:tests? #f ; FIXME: 1/1 tests fail.
        #:phases
@@ -2049,10 +1959,9 @@ and communicating with them using a pty.")
              (substitute* "autotests/convertertest.cpp"
                (("const int numThreads = 2") "const int numThreads = 0")))))))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("ki18n" ,ki18n)
-       ("qtbase" ,qtbase-5)))
+     (list ki18n qtbase-5))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Converting physical units")
     (description "KUnitConversion provides functions to convert values in
@@ -2076,10 +1985,9 @@ gallons).")
                 "1n3x8s1z4kd30xirfr07hi87vwhk4rilb5kslcjcgp5n9c0imcpv"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("kcodecs" ,kcodecs)
-       ("qtbase" ,qtbase-5)))
+     (list kcodecs qtbase-5))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "RSS/Atom parser library")
     (description "@code{syndication} supports RSS (0.9/1.0, 0.91..2.0) and
@@ -2109,29 +2017,27 @@ between feed formats.")
                 "1cf5pp9hn3pqypwyzh63ksasap3n7qz6n3y2xgb83ss3fra90pjf"))))
     (build-system cmake-build-system)
     (propagated-inputs
-     `(("kcoreaddons" ,kcoreaddons)
-       ("kfilemetadata" ,kfilemetadata)))
-    (native-inputs
-     `(("dbus" ,dbus)
-       ("extra-cmake-modules" ,extra-cmake-modules)))
-    (inputs
-     `(("kbookmarks" ,kbookmarks)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kidletime" ,kidletime)
-       ("kio" ,kio)
-       ("kitemviews" ,kitemviews)
-       ("ki18n" ,ki18n)
-       ("kjobwidgets" ,kjobwidgets)
-       ("kservice" ,kservice)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("lmdb" ,lmdb)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("solid" ,solid)))
+     (list kcoreaddons kfilemetadata))
+    (native-inputs
+     (list dbus extra-cmake-modules))
+    (inputs
+     (list kbookmarks
+           kcompletion
+           kconfig
+           kcrash
+           kdbusaddons
+           kidletime
+           kio
+           kitemviews
+           ki18n
+           kjobwidgets
+           kservice
+           kwidgetsaddons
+           kxmlgui
+           lmdb
+           qtbase-5
+           qtdeclarative
+           solid))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -2183,13 +2089,9 @@ maintaining an index of the contents of your files.")
                 "1cnfdnxkw9hwbqdzdygp2vzwxqwqhxyipzwdcgar0clgnf7zi7wx"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("boost" ,boost)
-       ("kactivities" ,kactivities)
-       ("kconfig" ,kconfig)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list boost kactivities kconfig qtbase-5 qtdeclarative))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Access usage statistics collected by the activity manager")
     (description "The KActivitiesStats library provides a querying mechanism for
@@ -2213,19 +2115,18 @@ by which applications, and what documents have been linked to which activity.")
                 "1i5vcyvyc9whmflbcg2kc562ch93yscfic1c1n9z347g26jmgras"))))
     (build-system cmake-build-system)
     (propagated-inputs
-     `(("kwidgetsaddons" ,kwidgetsaddons)))
-    (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)))
-    (inputs
-     `(("kauth" ,kauth)
-       ("kcodecs" ,kcodecs)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kiconthemes" ,kiconthemes)
-       ("kxmlgui" ,kxmlgui)
-       ("qtbase" ,qtbase-5)))
+     (list kwidgetsaddons))
+    (native-inputs
+     (list extra-cmake-modules qttools))
+    (inputs
+     (list kauth
+           kcodecs
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kiconthemes
+           kxmlgui
+           qtbase-5))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -2256,10 +2157,9 @@ using the XBEL format.")
                 "08f4yr546brl1dppp0khvsw9ihmh9a7rp505913pdhi0sklaiimz"))))
     (build-system cmake-build-system)
     (propagated-inputs
-     `(("kconfigwidgets" ,kconfigwidgets)
-       ("kservice" ,kservice)))
+     (list kconfigwidgets kservice))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -2275,20 +2175,20 @@ using the XBEL format.")
                 (string-append a " KCM plugin\" << mod.service()->library() << \":\"" c)))
              #t)))))
     (inputs
-     `(("kauth" ,kauth)
-       ("kcodecs" ,kcodecs)
-       ("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kdeclarative" ,kdeclarative)
-       ("kguiaddons" ,kguiaddons)
-       ("kiconthemes" ,kiconthemes)
-       ("kitemviews" ,kitemviews)
-       ("ki18n" ,ki18n)
-       ("kpackage" ,kpackage)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list kauth
+           kcodecs
+           kconfig
+           kcoreaddons
+           kdeclarative
+           kguiaddons
+           kiconthemes
+           kitemviews
+           ki18n
+           kpackage
+           kwidgetsaddons
+           kxmlgui
+           qtbase-5
+           qtdeclarative))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Utilities for KDE System Settings modules")
     (description "KCMUtils provides various classes to work with KCModules.
@@ -2310,20 +2210,16 @@ KCModules can be created with the KConfigWidgets framework.")
                 "195dw7nyr3fp78y3vfnyjh0hwgwk46f80wdcm8dck5rkscl3v9xz"))))
     (build-system qt-build-system)
     (propagated-inputs
-     `(("kauth" ,kauth)
-       ("kcodecs" ,kcodecs)
-       ("kconfig" ,kconfig)
-       ("kwidgetsaddons" ,kwidgetsaddons)))
+     (list kauth kcodecs kconfig kwidgetsaddons))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("kcoreaddons" ,kcoreaddons)
-       ("kguiaddons" ,kguiaddons)
-       ("ki18n" ,ki18n)
-       ;; todo: PythonModuleGeneration
-       ("qtbase" ,qtbase-5)
-       ("qttools" ,qttools)))
+     (list kcoreaddons
+           kguiaddons
+           ki18n
+           ;; todo: PythonModuleGeneration
+           qtbase-5
+           qttools))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -2357,34 +2253,31 @@ their settings.")
                 "1vq9pkrb0zsphi2sfx7cyy1kb6pklzjkmqdf5202z8vydlkc4549"))))
     (build-system cmake-build-system)
     (propagated-inputs
-     `(("kconfig" ,kconfig)
-       ("kpackage" ,kpackage)))
-    (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)
-       ("xorg-server" ,xorg-server-for-tests)))
-    (inputs
-     `(("kauth" ,kauth)
-       ("kbookmarks" ,kbookmarks)
-       ("kcodecs" ,kcodecs)
-       ("kcompletion" ,kcompletion)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kglobalaccel" ,kglobalaccel)
-       ("kguiaddons" ,kguiaddons)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("kitemviews" ,kitemviews)
-       ("ki18n" ,ki18n)
-       ("kjobwidgets" ,kjobwidgets)
-       ("kservice" ,kservice)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("libepoxy" ,libepoxy)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("solid" ,solid)))
+     (list kconfig kpackage))
+    (native-inputs
+     (list extra-cmake-modules pkg-config xorg-server-for-tests))
+    (inputs
+     (list kauth
+           kbookmarks
+           kcodecs
+           kcompletion
+           kconfigwidgets
+           kcoreaddons
+           kglobalaccel
+           kguiaddons
+           kiconthemes
+           kio
+           kitemviews
+           ki18n
+           kjobwidgets
+           kservice
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           libepoxy
+           qtbase-5
+           qtdeclarative
+           solid))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -2392,8 +2285,7 @@ their settings.")
            (lambda* (#:key inputs #:allow-other-keys)
              ;; The test suite requires a running X server, setting
              ;; QT_QPA_PLATFORM=offscreen does not suffice.
-             (system (string-append (assoc-ref inputs "xorg-server")
-                                    "/bin/Xvfb :1 -screen 0 640x480x24 &"))
+             (system "Xvfb :1 -screen 0 640x480x24 &")
              (setenv "DISPLAY" ":1")
              #t)))))
     (home-page "https://community.kde.org/Frameworks")
@@ -2420,16 +2312,16 @@ that offer bindings to some of the Frameworks.")
                 "0zqd33vy4ny7g9as3bhd75qi1chz1nlqq133pgw8kjanvghwwnk9"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdoctools" ,kdoctools)
-       ("kinit" ,kinit)
-       ("kservice" ,kservice)
-       ("qtbase" ,qtbase-5)))
+     (list kconfig
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           kdoctools
+           kinit
+           kservice
+           qtbase-5))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Central daemon of KDE work spaces")
     (description "KDED stands for KDE Daemon.  KDED runs in the background and
@@ -2453,26 +2345,25 @@ started on demand.")
                 "0dr6gcag2yzx8fvxis4x403jrcisywds95cywmiyz3pb5727cak2"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)))
-    (inputs
-     `(("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kdoctools" ,kdoctools)
-       ("qtbase" ,qtbase-5)
-       ;; optional:
-       ("kcompletion" ,kcompletion)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kiconthemes" ,kiconthemes)
-       ("kitemviews" ,kitemviews)
-       ("kio" ,kio)
-       ("kplotting" ,kplotting)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kdewebkit" ,kdewebkit)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("qtwebkit" ,qtwebkit)
-       ("sonnet" ,sonnet)))
+     (list extra-cmake-modules qttools))
+    (inputs
+     (list kconfig
+           kcoreaddons
+           kdoctools
+           qtbase-5
+           ;; optional:
+           kcompletion
+           kconfigwidgets
+           kiconthemes
+           kitemviews
+           kio
+           kplotting
+           ktextwidgets
+           kdewebkit
+           kwidgetsaddons
+           kxmlgui
+           qtwebkit
+           sonnet))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Integrating KDE frameworks widgets with Qt Designer")
     (description "This framework provides plugins for Qt Designer that allow it
@@ -2496,15 +2387,11 @@ ini-style description files.")
                 "17k29g7jwgqj5xdmr509438b9sq65zx8khdr4viybjf5xpi0cf5m"))))
     (build-system cmake-build-system)
     (propagated-inputs
-     `(("kpty" ,kpty)))
+     (list kpty))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("ki18n" ,ki18n)
-       ("kservice" ,kservice)
-       ("qtbase" ,qtbase-5)))
+     (list kconfig kcoreaddons ki18n kservice qtbase-5))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "User interface for running shell commands with root privileges")
     (description "KDESU provides functionality for building GUI front ends for
@@ -2527,18 +2414,17 @@ with su and ssh respectively.")
                 "0y9ja3znkvzdbjfs91dwr4cmvl9fk97zpz2lkf0f9zhm2nw6q008"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules qttools))
     (inputs
-     `(("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kio" ,kio)
-       ("kjobwidgets" ,kjobwidgets)
-       ("kparts" ,kparts)
-       ("kservice" ,kservice)
-       ("kwallet" ,kwallet)
-       ("qtbase" ,qtbase-5)
-       ("qtwebkit" ,qtwebkit)))
+     (list kconfig
+           kcoreaddons
+           kio
+           kjobwidgets
+           kparts
+           kservice
+           kwallet
+           qtbase-5
+           qtwebkit))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "KDE Integration for QtWebKit")
     (description "This library provides KDE integration of the HTML rendering
@@ -2560,14 +2446,11 @@ engine WebKit via QtWebKit.")
                 "11v1srn3nii4j7cn4f19qvdw96pczwxhanzxlg4a9gf8kmnp5gxr"))))
     (build-system cmake-build-system)
     (propagated-inputs
-     `(("kservice" ,kservice)))
+     (list kservice))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("karchive" ,karchive)
-       ("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("qtbase" ,qtbase-5)))
+     (list karchive kconfig kcoreaddons qtbase-5))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -2600,20 +2483,18 @@ emoticons coming from different providers.")
                 "0hmqigc8myiwwh7m6y2cm4vn0d3kmrhia179hyb84vpvvn3lm93z"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules pkg-config qttools))
     (inputs
-     `(("kconfig" ,kconfig)
-       ("kcrash" ,kcrash)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kservice" ,kservice)
-       ("kwindowsystem" ,kwindowsystem)
-       ("libxcb" ,libxcb)
-       ("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)
-       ("xcb-util-keysyms" ,xcb-util-keysyms)))
+     (list kconfig
+           kcrash
+           kcoreaddons
+           kdbusaddons
+           kservice
+           kwindowsystem
+           libxcb
+           qtbase-5
+           qtx11extras
+           xcb-util-keysyms))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Global desktop keyboard shortcuts")
     (description "KGlobalAccel allows you to have global accelerators that are
@@ -2636,21 +2517,19 @@ window does not need focus for them to be activated.")
                 "09bqpf3drqyfc81vgab9bsh1wm5qbzdwqjlczhax38660nnvh0r9"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)
-       ("shared-mime-info" ,shared-mime-info)))
+     (list extra-cmake-modules qttools shared-mime-info))
     (inputs
-     `(("karchive" ,karchive)
-       ("kauth" ,kauth)
-       ("kcodecs" ,kcodecs)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("ki18n" ,ki18n)
-       ("kitemviews" ,kitemviews)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)))
+     (list karchive
+           kauth
+           kcodecs
+           kcoreaddons
+           kconfig
+           kconfigwidgets
+           ki18n
+           kitemviews
+           kwidgetsaddons
+           qtbase-5
+           qtsvg))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -2703,32 +2582,31 @@ in applications using the KDE Frameworks.")
             (variable "KDEINIT5_LIBRARY_PATH")
             (files '("lib/")))))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)))
-    (inputs
-     `(("kauth" ,kauth)
-       ("kbookmarks" ,kbookmarks)
-       ("kcodecs" ,kcodecs)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdoctools" ,kdoctools)
-       ("kio" ,kio)
-       ("kitemviews" ,kitemviews)
-       ("ki18n" ,ki18n)
-       ("kjobwidgets" ,kjobwidgets)
-       ("kparts" ,kparts)
-       ("kservice" ,kservice)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("libcap" ,libcap) ; to install start_kdeinit with CAP_SYS_RESOURCE
-       ("plasma-framework" ,plasma-framework)
-       ("qtbase" ,qtbase-5)
-       ("solid" ,solid)))
+     (list extra-cmake-modules pkg-config))
+    (inputs
+     (list kauth
+           kbookmarks
+           kcodecs
+           kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           kdoctools
+           kio
+           kitemviews
+           ki18n
+           kjobwidgets
+           kparts
+           kservice
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           libcap ; to install start_kdeinit with CAP_SYS_RESOURCE
+           plasma-framework
+           qtbase-5
+           solid))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Library to speed up start of applications on KDE workspaces")
     (description "Kdeinit is a process launcher similar to init used for booting
@@ -2755,20 +2633,18 @@ consumption.")
               (patches (search-patches "kio-search-smbd-on-PATH.patch"))))
     (build-system cmake-build-system)
     (propagated-inputs
-     `(("kbookmarks" ,kbookmarks)
-       ("kconfig" ,kconfig)
-       ("kcompletion" ,kcompletion)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kitemviews" ,kitemviews)
-       ("kjobwidgets" ,kjobwidgets)
-       ("kservice" ,kservice)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("solid" ,solid)))
-    (native-inputs
-     `(("dbus" ,dbus)
-       ("qttools" ,qttools)
-       ("extra-cmake-modules" ,extra-cmake-modules)))
+     (list kbookmarks
+           kconfig
+           kcompletion
+           kcoreaddons
+           kitemviews
+           kjobwidgets
+           kservice
+           kwindowsystem
+           kxmlgui
+           solid))
+    (native-inputs
+     (list dbus qttools extra-cmake-modules))
     (inputs
      `(;; TODO:  LibACL , <ftp://oss.sgi.com/projects/xfs/cmd_tars>
        ("krb5" ,mit-krb5)
@@ -2848,31 +2724,29 @@ KIO enabled infrastructure.")
                 "1hpxj4nawh57w8l64gjplb5mk5fpxiffm4x49kg75m637rxy19fq"))))
     (build-system cmake-build-system)
     (propagated-inputs
-     `(("attica" ,attica)
-       ("kservice" ,kservice)
-       ("kxmlgui" ,kxmlgui)))
-    (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
-    (inputs
-     `(("karchive" ,karchive)
-       ("kauth" ,kauth)
-       ("kbookmarks" ,kbookmarks)
-       ("kcodecs" ,kcodecs)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kio" ,kio)
-       ("kitemviews" ,kitemviews)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kjobwidgets" ,kjobwidgets)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("solid" ,solid)
-       ("sonnet" ,sonnet)))
+     (list attica kservice kxmlgui))
+    (native-inputs
+     (list extra-cmake-modules))
+    (inputs
+     (list karchive
+           kauth
+           kbookmarks
+           kcodecs
+           kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kio
+           kitemviews
+           ki18n
+           kiconthemes
+           kjobwidgets
+           ktextwidgets
+           kwidgetsaddons
+           qtbase-5
+           qtdeclarative
+           solid
+           sonnet))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -2904,26 +2778,26 @@ specification.")
                 "1d483qrgyamwsqvcl70klv1g8744hn8z1h2j3qfydcvlwz8jy0gj"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
-    (inputs
-     `(("kauth" ,kauth)
-       ("kbookmarks" ,kbookmarks)
-       ("kcodecs" ,kcodecs)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kio" ,kio)
-       ("kitemviews" ,kitemviews)
-       ("ki18n" ,ki18n)
-       ("kjobwidgets" ,kjobwidgets)
-       ("knotifications" ,knotifications)
-       ("kservice" ,kservice)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("phonon" ,phonon)
-       ("qtbase" ,qtbase-5)
-       ("solid" ,solid)))
+     (list extra-cmake-modules))
+    (inputs
+     (list kauth
+           kbookmarks
+           kcodecs
+           kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kio
+           kitemviews
+           ki18n
+           kjobwidgets
+           knotifications
+           kservice
+           kwidgetsaddons
+           kxmlgui
+           phonon
+           qtbase-5
+           solid))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Configuration dialog for desktop notifications")
     (description "KNotifyConfig provides a configuration dialog for desktop
@@ -2956,29 +2830,26 @@ notifications which can be embedded in your application.")
                         (("partloadertest\\.cpp") ""))
                       #t)))))
     (propagated-inputs
-     `(("kio" ,kio)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kxmlgui" ,kxmlgui)))
-    (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("shared-mime-info" ,shared-mime-info)))
-    (inputs
-     `(("kauth" ,kauth)
-       ("kbookmarks" ,kbookmarks)
-       ("kcodecs" ,kcodecs)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kiconthemes" ,kiconthemes)
-       ("kitemviews" ,kitemviews)
-       ("ki18n" ,ki18n)
-       ("kjobwidgets" ,kjobwidgets)
-       ("kservice" ,kservice)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("qtbase" ,qtbase-5)
-       ("solid" ,solid)
-       ("sonnet" ,sonnet)))
+     (list kio ktextwidgets kxmlgui))
+    (native-inputs
+     (list extra-cmake-modules shared-mime-info))
+    (inputs
+     (list kauth
+           kbookmarks
+           kcodecs
+           kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kiconthemes
+           kitemviews
+           ki18n
+           kjobwidgets
+           kservice
+           kwidgetsaddons
+           qtbase-5
+           solid
+           sonnet))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Plugin framework for user interface components")
     (description "This library implements the framework for KDE parts, which are
@@ -3000,16 +2871,16 @@ widgets with a user-interface defined in terms of actions.")
                 "1dhvly19pj9lx78g7mc89scibzmra1vhv4zz33222zidkbrf9ryl"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kitemviews" ,kitemviews)
-       ("ki18n" ,ki18n)
-       ("kservice" ,kservice)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list kconfig
+           kcoreaddons
+           kitemviews
+           ki18n
+           kservice
+           kwidgetsaddons
+           qtbase-5
+           qtdeclarative))
     (arguments
      `(#:tests? #f)) ; FIXME: 1/3 tests fail.
     (home-page "https://community.kde.org/Frameworks")
@@ -3036,45 +2907,44 @@ to easily extend the contacts collection.")
                 "0fhb26vi9z1mky79kq12qq4g4ghz3530cx84n5l3sdgkd6nfsyqf"))))
     (build-system cmake-build-system)
     (propagated-inputs
-     `(("plasma-framework" ,plasma-framework)))
-    (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-
-       ;; For tests.
-       ("dbus" ,dbus)))
-    (inputs
-     `(("kauth" ,kauth)
-       ("kbookmarks" ,kbookmarks)
-       ("kcodecs" ,kcodecs)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kio" ,kio)
-       ("kitemviews" ,kitemviews)
-       ("ki18n" ,ki18n)
-       ("kjobwidgets" ,kjobwidgets)
-       ("kpackage" ,kpackage)
-       ("kservice" ,kservice)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("solid" ,solid)
-       ("threadweaver" ,threadweaver)))
+     (list plasma-framework))
+    (native-inputs
+     (list extra-cmake-modules
+           ;; For tests.
+           dbus))
+    (inputs
+     (list kauth
+           kbookmarks
+           kcodecs
+           kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kio
+           kitemviews
+           ki18n
+           kjobwidgets
+           kpackage
+           kservice
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           qtbase-5
+           qtdeclarative
+           solid
+           threadweaver))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'fix-paths-for-test
            ;; This test tries to access paths like /home, /usr/bin and /bin/ls
            ;; which don't exist in the build-container. Change to existing paths.
-           (lambda _
+           (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "autotests/runnercontexttest.cpp"
                (("/home\"") "/tmp\"") ;; single path-part
                (("//usr/bin\"") (string-append (getcwd) "\"")) ;; multiple path-parts
-               (("/bin/ls" path)
-                (string-append (assoc-ref %build-inputs "coreutils") path)))))
+               (("/bin/ls")
+                (search-input-file inputs "/bin/ls")))))
          (add-before 'check 'check-setup
            (lambda _
              (setenv "HOME" (getcwd))
@@ -3112,18 +2982,11 @@ typed.")
                 "0g49p5331f7dl46rvi43akmjm1jx70w9797j6d17jy7z9s9sqikw"))))
     (build-system cmake-build-system)
     (propagated-inputs
-     `(("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)))
+     (list kconfig kcoreaddons))
     (native-inputs
-     `(("bison" ,bison)
-       ("extra-cmake-modules" ,extra-cmake-modules)
-       ("flex" ,flex)))
+     (list bison extra-cmake-modules flex))
     (inputs
-     `(("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdoctools" ,kdoctools)
-       ("ki18n" ,ki18n)
-       ("qtbase" ,qtbase-5)))
+     (list kcrash kdbusaddons kdoctools ki18n qtbase-5))
     (arguments
      `(#:tests? #f ; FIXME: 6/10 tests fail.
        #:phases
@@ -3171,39 +3034,38 @@ types or handled by application specific code.")
                 "0k10yj1ia1w1mznj4g5nvp65p226zcvgwxc85ycn2w8lbkknidf7"))))
     (build-system cmake-build-system)
     (propagated-inputs
-     `(("kparts" ,kparts)))
-    (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)))
-    (inputs
-     `(;; TODO: editor-config
-       ("karchive" ,karchive)
-       ("kauth" ,kauth)
-       ("kbookmarks" ,kbookmarks)
-       ("kcodecs" ,kcodecs)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kguiaddons" ,kguiaddons)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("kitemviews" ,kitemviews)
-       ("ki18n" ,ki18n)
-       ("kjobwidgets" ,kjobwidgets)
-       ("kservice" ,kservice)
-       ("ksyntaxhighlighting" ,ksyntaxhighlighting)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("libgit2" ,libgit2)
-       ("perl" ,perl)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtscript" ,qtscript)
-       ("qtxmlpatterns" ,qtxmlpatterns)
-       ("solid" ,solid)
-       ("sonnet" ,sonnet)))
+     (list kparts))
+    (native-inputs
+     (list extra-cmake-modules pkg-config))
+    (inputs
+     (list ;; TODO: editor-config
+           karchive
+           kauth
+           kbookmarks
+           kcodecs
+           kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kguiaddons
+           kiconthemes
+           kio
+           kitemviews
+           ki18n
+           kjobwidgets
+           kservice
+           ksyntaxhighlighting
+           ktextwidgets
+           kwidgetsaddons
+           kxmlgui
+           libgit2
+           perl
+           qtbase-5
+           qtdeclarative
+           qtscript
+           qtxmlpatterns
+           solid
+           sonnet))
     (arguments
      `(#:tests? #f ; FIXME: 2/54 tests fail: Cannot find fontdirectory qtbase/lib/font
        #:phases
@@ -3252,24 +3114,22 @@ library.")
                 "1609rlwba674kr9whawk93vb1b14b5ly7wvir7kjyjp4j715f47w"))))
     (build-system qt-build-system)
     (propagated-inputs
-     `(("ki18n" ,ki18n)
-       ("sonnet" ,sonnet)))
-    (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)))
-    (inputs
-     `(("kauth" ,kauth)
-       ("kcodecs" ,kcodecs)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kiconthemes" ,kiconthemes)
-       ("kservice" ,kservice)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("qtbase" ,qtbase-5)
-       ("qtspeech" ,qtspeech)))
+     (list ki18n sonnet))
+    (native-inputs
+     (list extra-cmake-modules qttools))
+    (inputs
+     (list kauth
+           kcodecs
+           kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kiconthemes
+           kservice
+           kwidgetsaddons
+           kwindowsystem
+           qtbase-5
+           qtspeech))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Text editing widgets")
     (description "KTextWidgets provides widgets for displaying and editing text.
@@ -3292,26 +3152,26 @@ It supports rich text as well as plain text.")
                 "1ps6ywcirv7xcisvwfcpvk53wm7m8y5lrz4nhkm36rizrdglw19r"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
-    (inputs
-     `(("gpgme" ,gpgme)
-       ("kauth" ,kauth)
-       ("kcodecs" ,kcodecs)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdoctools" ,kdoctools)
-       ("kiconthemes" ,kiconthemes)
-       ("ki18n" ,ki18n)
-       ("knotifications" ,knotifications)
-       ("kservice" ,kservice)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("libgcrypt" ,libgcrypt)
-       ("phonon" ,phonon)
-       ("qgpgme" ,qgpgme)
-       ("qtbase" ,qtbase-5)))
+     (list extra-cmake-modules))
+    (inputs
+     (list gpgme
+           kauth
+           kcodecs
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kdbusaddons
+           kdoctools
+           kiconthemes
+           ki18n
+           knotifications
+           kservice
+           kwidgetsaddons
+           kwindowsystem
+           libgcrypt
+           phonon
+           qgpgme
+           qtbase-5))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Safe desktop-wide storage for passwords")
     (description "This framework contains an interface to KWallet, a safe
@@ -3334,25 +3194,23 @@ the passwords on KDE work spaces.")
                 "0cvzcq2dcz89c0ffhvfb820hfmqa87mfdbjvrqjwdysc9lr8zx8f"))))
     (build-system cmake-build-system)
     (propagated-inputs
-     `(("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)))
-    (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)))
-    (inputs
-     `(("attica" ,attica)
-       ("kauth" ,kauth)
-       ("kcodecs" ,kcodecs)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kglobalaccel" ,kglobalaccel)
-       ("kiconthemes" ,kiconthemes)
-       ("kitemviews" ,kitemviews)
-       ("ki18n" ,ki18n)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("qtbase" ,qtbase-5)
-       ("sonnet" ,sonnet)))
+     (list kconfig kconfigwidgets))
+    (native-inputs
+     (list extra-cmake-modules qttools))
+    (inputs
+     (list attica
+           kauth
+           kcodecs
+           kcoreaddons
+           kglobalaccel
+           kiconthemes
+           kitemviews
+           ki18n
+           ktextwidgets
+           kwidgetsaddons
+           kwindowsystem
+           qtbase-5
+           sonnet))
     (arguments
      `(#:tests? #f ; FIXME: 1/5 tests fail.
        #:phases
@@ -3387,25 +3245,25 @@ descriptions for integrating actions from plugins.")
                 "1cmfv2w9yfi8jhj5nawfz7kw8jbr1k5cr3n5xv3z59pg2vazsx8b"))))
     (build-system cmake-build-system)
     (propagated-inputs
-     `(("kio" ,kio)))
-    (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
-    (inputs
-     `(("kauth" ,kauth)
-       ("kbookmarks" ,kbookmarks)
-       ("kcodecs" ,kcodecs)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kitemviews" ,kitemviews)
-       ("ki18n" ,ki18n)
-       ("kjobwidgets" ,kjobwidgets)
-       ("kservice" ,kservice)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("qtbase" ,qtbase-5)
-       ("solid" ,solid)))
+     (list kio))
+    (native-inputs
+     (list extra-cmake-modules))
+    (inputs
+     (list kauth
+           kbookmarks
+           kcodecs
+           kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kitemviews
+           ki18n
+           kjobwidgets
+           kservice
+           kwidgetsaddons
+           kxmlgui
+           qtbase-5
+           solid))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "XML-RPC client")
     (description "This library contains simple XML-RPC Client support.  It is a
@@ -3431,11 +3289,9 @@ setUrl, setUserAgent and call.")
               (patches (search-patches "plasma-framework-fix-KF5PlasmaMacros.cmake.patch"))))
     (build-system cmake-build-system)
     (propagated-inputs
-     `(("kpackage" ,kpackage)
-       ("kservice" ,kservice)))
+     (list kpackage kservice))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules pkg-config))
     (inputs
      `(("kactivities" ,kactivities)
        ("karchive" ,karchive)
@@ -3501,17 +3357,17 @@ script engines.")
                 "1pxlx2hgj42zsisws8f486n8sg0vn5a5mhb85prifwkaw0rqzgah"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(;;TODO: ("kaccounts" ,kaccounts)
-       ("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("knotifications" ,knotifications)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kirigami" ,kirigami)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list ;;TODO: ("kaccounts" ,kaccounts)
+           kconfig
+           kcoreaddons
+           knotifications
+           ki18n
+           kio
+           kirigami
+           qtbase-5
+           qtdeclarative))
     (arguments
      `(#:tests? #f  ;; seem to require network; don't find QTQuick components
        #:phases
@@ -3574,8 +3430,7 @@ need.")
                 "1lvccvhhkzdv1hw627kw3ds18gfq4bxdhlvh959piqxq5gh9d2n0"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules pkg-config))
     ;; TODO: Optional packages not yet in Guix: packagekitqt5, AppStreamQt
     (inputs
      `(("kconfig" ,kconfig)
@@ -3631,54 +3486,54 @@ workspace.")
         (base32 "0imkibjlfc0jshdzr05fz5dy2xmfhvgsfan9b1r35spwsn5qkawx"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("dbus" ,dbus)
-       ("docbook-xml" ,docbook-xml-4.4) ; optional
-       ("extra-cmake-modules" ,extra-cmake-modules)
-       ("perl" ,perl)
-       ("perl-uri" ,perl-uri)
-       ("pkg-config" ,pkg-config)
-       ("shared-mime-info" ,shared-mime-info)
-       ("kjobwidgets" ,kjobwidgets) ;; required for running the tests
-       ("strace" ,strace)
-       ("tzdata" ,tzdata-for-tests)))
+     (list dbus
+           docbook-xml-4.4 ; optional
+           extra-cmake-modules
+           perl
+           perl-uri
+           pkg-config
+           shared-mime-info
+           kjobwidgets ;; required for running the tests
+           strace
+           tzdata-for-tests))
     (propagated-inputs
      ;; These are required to be installed along with this package, see
      ;; lib64/cmake/KF5KDELibs4Support/KF5KDELibs4SupportConfig.cmake
-     `(("karchive" ,karchive)
-       ("kauth" ,kauth)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdesignerplugin" ,kdesignerplugin)
-       ("kdoctools" ,kdoctools)
-       ("kemoticons" ,kemoticons)
-       ("kguiaddons" ,kguiaddons)
-       ("kiconthemes" ,kiconthemes)
-       ("kinit" ,kinit)
-       ("kitemmodels" ,kitemmodels)
-       ("knotifications" ,knotifications)
-       ("kparts" ,kparts)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kunitconversion" ,kunitconversion)
-       ("kwindowsystem" ,kwindowsystem)
-       ("qtbase" ,qtbase-5)))
-    (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kded" ,kded)
-       ("kglobalaccel" ,kglobalaccel)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kservice" ,kservice)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("libsm" ,libsm)
-       ("networkmanager-qt" ,networkmanager-qt)
-       ("openssl" ,openssl)
-       ("qtsvg" ,qtsvg)
-       ("qttools" ,qttools)
-       ("qtx11extras" ,qtx11extras)))
+     (list karchive
+           kauth
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           kdesignerplugin
+           kdoctools
+           kemoticons
+           kguiaddons
+           kiconthemes
+           kinit
+           kitemmodels
+           knotifications
+           kparts
+           ktextwidgets
+           kunitconversion
+           kwindowsystem
+           qtbase-5))
+    (inputs
+     (list kcompletion
+           kconfig
+           kded
+           kglobalaccel
+           ki18n
+           kio
+           kservice
+           kwidgetsaddons
+           kxmlgui
+           libsm
+           networkmanager-qt
+           openssl
+           qtsvg
+           qttools
+           qtx11extras))
     ;; FIXME: Use Guix ca-bundle.crt in etc/xdg/ksslcalist and
     ;; share/kf5/kssl/ca-bundle.crt
     ;; TODO: NixOS has nix-kde-include-dir.patch to change std-dir "include"
@@ -3697,8 +3552,8 @@ workspace.")
            (lambda* (#:key inputs tests? #:allow-other-keys)
              (setenv "HOME" (getcwd))
              (setenv "TZDIR"    ; KDateTimeTestsome needs TZDIR
-                     (string-append (assoc-ref inputs "tzdata")
-                                    "/share/zoneinfo"))
+                     (search-input-directory inputs
+                                             "share/zoneinfo"))
              ;; Make Qt render "offscreen", required for tests
              (setenv "QT_QPA_PLATFORM" "offscreen")
              ;; enable debug output
@@ -3747,32 +3602,31 @@ http://community.kde.org/Frameworks/Porting_Notes should help with this.")
         (base32 "1jh0g6xv57hyclnh54x0f72lby1gvlisan23y7mzlqf67aky52s5"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("perl" ,perl)))
-    (inputs
-     `(("giflib" ,giflib)
-       ("gperf" ,gperf)
-       ("karchive" ,karchive)
-       ("kcodecs" ,kcodecs)
-       ("kglobalaccel" ,kglobalaccel)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("kjs" ,kjs)
-       ("knotifications" ,knotifications)
-       ("kparts" ,kparts)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwallet" ,kwallet)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("libjpeg" ,libjpeg-turbo)
-       ("libpng" ,libpng)
-       ("openssl" ,openssl)
-       ("phonon" ,phonon)
-       ("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)
-       ("sonnet" ,sonnet)))
+     (list extra-cmake-modules perl))
+    (inputs
+     (list giflib
+           gperf
+           karchive
+           kcodecs
+           kglobalaccel
+           ki18n
+           kiconthemes
+           kio
+           kjs
+           knotifications
+           kparts
+           ktextwidgets
+           kwallet
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           libjpeg-turbo
+           libpng
+           openssl
+           phonon
+           qtbase-5
+           qtx11extras
+           sonnet))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "KDE Frameworks 5 HTML widget and component")
     (description "KHTML is a web rendering engine, based on the KParts
@@ -3798,13 +3652,9 @@ technology and using KJS for JavaScript support.")
         (base32 "0s3n0pdz59p5v967zrxcas3lb94k5bv9vi8058fi0l20nwwlcgh5"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules kdoctools perl pkg-config))
     (inputs
-     `(("pcre" ,pcre)
-       ("qtbase" ,qtbase-5)))
+     (list pcre qtbase-5))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "KDE Frameworks 5 support for Javascript scripting in Qt
 applications")
@@ -3831,14 +3681,9 @@ support.")
         (base32 "0976faazhxhhi1wpvpcs8hwb2knz0z7j44v3ay3hw73rq4p3bipm"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules kdoctools qttools))
     (inputs
-     `(("ki18n" ,ki18n)
-       ("kjs" ,kjs)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)))
+     (list ki18n kjs qtbase-5 qtsvg))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "KDE Frameworks 5 embedded Javascript engine for Qt")
     (description "KJSEmbed provides a method of binding Javascript objects to
@@ -3860,19 +3705,17 @@ QObjects, so you can script your applications.")
         (base32 "0lrm4y727nhwaivl37zpmnrwx048gfhyjw19m6q5z9p37lk43jja"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules kdoctools qttools))
     (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kcoreaddons" ,kcoreaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("kparts" ,kparts)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("qtbase" ,qtbase-5)))
+     (list kcompletion
+           kcoreaddons
+           ki18n
+           kiconthemes
+           kio
+           kparts
+           kwidgetsaddons
+           kxmlgui
+           qtbase-5))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "KDE Frameworks 5 plugin interface for media player features")
     (description "KMediaPlayer builds on the KParts framework to provide a
@@ -3898,19 +3741,17 @@ KParts instead.")
         (base32 "12b527l12rcf421p613ydbacilp9v9iy90ma35w21sdf9a15k675"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules kdoctools qttools))
     (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kcoreaddons" ,kcoreaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kparts" ,kparts)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("qtbase" ,qtbase-5)
-       ("qtscript" ,qtscript)))
+     (list kcompletion
+           kcoreaddons
+           ki18n
+           kiconthemes
+           kparts
+           kwidgetsaddons
+           kxmlgui
+           qtbase-5
+           qtscript))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "KDE Frameworks 5 solution for application scripting")
     (description "Kross is a scripting bridge for the KDE Development Platform
diff --git a/gnu/packages/kde-internet.scm b/gnu/packages/kde-internet.scm
index 223e1aab7a..4e08bd5337 100644
--- a/gnu/packages/kde-internet.scm
+++ b/gnu/packages/kde-internet.scm
@@ -64,36 +64,34 @@
         (base32 "0zm4nkpmvd181xlkis7ydzx54p3vn0zgpdzgh54f1hsjy6ahsq16"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules kdoctools pkg-config))
     (inputs
-     `(("attica" ,attica)
-       ("kcmutils" ,kcmutils)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kdewebkit" ,kdewebkit)
-       ("kemoticons" ,kemoticons)
-       ("kglobalaccel" ,kglobalaccel)
-       ("kguiaddons" ,kguiaddons)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("knotifications" ,knotifications)
-       ("knotifyconfig" ,knotifyconfig)
-       ("kparts" ,kparts)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwallet" ,kwallet)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ;; TODO: telepathy
-       ("oxygen-icons" ,oxygen-icons) ; default icon set
-       ("purpose" ,purpose)
-       ("qca" ,qca)
-       ("qoauth" ,qoauth)
-       ("qtbase" ,qtbase-5)
-       ("qtnetworkauth" ,qtnetworkauth)
-       ("qtwebkit" ,qtwebkit)
-       ("sonnet" ,sonnet)))
+     (list attica
+           kcmutils
+           kconfigwidgets
+           kcoreaddons
+           kdewebkit
+           kemoticons
+           kglobalaccel
+           kguiaddons
+           ki18n
+           kio
+           knotifications
+           knotifyconfig
+           kparts
+           ktextwidgets
+           kwallet
+           kwidgetsaddons
+           kxmlgui
+           ;; TODO: telepathy
+           oxygen-icons ; default icon set
+           purpose
+           qca
+           qoauth
+           qtbase-5
+           qtnetworkauth
+           qtwebkit
+           sonnet))
     (home-page "https://kde.org/applications/internet/org.kde.choqok")
     (synopsis "Micro-Blogging Client")
     (description "Choqok is a fast, efficient and simple to use micro-blogging
@@ -127,43 +125,41 @@ Other notable features include:
         (base32 "1swx58wcig8zq8ibhczhcw7l8mqjm7pq8zca9gmny9kda5q04f5m"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules pkg-config))
     (inputs
-     `(("boost" ,boost)
-       ("gmp" ,gmp)
-       ("gpgme" ,gpgme)
-       ("kcmutils" ,kcmutils)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdelibs4support" ,kdelibs4support) ;; KLocale
-       ("kdoctools" ,kdoctools)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("kitemviews" ,kitemviews)
-       ("knotifications" ,knotifications)
-       ("knotifyconfig" ,knotifyconfig)
-       ("kparts" ,kparts)
-       ("kservice" ,kservice)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwallet" ,kwallet)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("libgcrypt" ,libgcrypt)
-       ("libktorrent" ,libktorrent)
-       ;; TODO: libmms
-       ;; TODO: LibKWorkspace - plasma-workspace?
-       ("oxygen-icons" ,oxygen-icons) ; default icon set
-       ("qca" ,qca)
-       ("qgpgme" ,qgpgme)
-       ("qtbase" ,qtbase-5)
-       ))
+     (list boost
+           gmp
+           gpgme
+           kcmutils
+           kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           kdelibs4support ;; KLocale
+           kdoctools
+           ki18n
+           kiconthemes
+           kio
+           kitemviews
+           knotifications
+           knotifyconfig
+           kparts
+           kservice
+           ktextwidgets
+           kwallet
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           libgcrypt
+           libktorrent
+           ;; TODO: libmms
+           ;; TODO: LibKWorkspace - plasma-workspace?
+           oxygen-icons ; default icon set
+           qca
+           qgpgme
+           qtbase-5))
     (home-page "http://www.kde.org/")
     (synopsis "Versatile and user-friendly download manager")
     (description "KGet is an advanced download manager with support for
@@ -188,35 +184,34 @@ This package is part of the KDE networking module.")
         (base32 "19qqq9s8k0cl71ib33xn07f26j5ji2g4336jk65im6452cf1dv27"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("karchive" ,karchive)
-       ("kbookmarks" ,kbookmarks)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kemoticons" ,kemoticons)
-       ("kglobalaccel" ,kglobalaccel)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kidletime" ,kidletime)
-       ("kio" ,kio)
-       ("kitemviews" ,kitemviews)
-       ("knotifications" ,knotifications)
-       ("knotifyconfig" ,knotifyconfig)
-       ("kparts" ,kparts)
-       ("kwallet" ,kwallet)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("oxygen-icons" ,oxygen-icons) ; default icon set
-       ("phonon" ,phonon)
-       ("qtbase" ,qtbase-5)
-       ("qca" ,qca)
-       ("solid" ,solid)
-       ("sonnet" ,sonnet)))
+     (list karchive
+           kbookmarks
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           kemoticons
+           kglobalaccel
+           ki18n
+           kiconthemes
+           kidletime
+           kio
+           kitemviews
+           knotifications
+           knotifyconfig
+           kparts
+           kwallet
+           kwidgetsaddons
+           kwindowsystem
+           oxygen-icons ; default icon set
+           phonon
+           qtbase-5
+           qca
+           solid
+           sonnet))
     (home-page "https://kde.org/applications/internet/org.kde.konversations")
     (synopsis "Graphical Internet Relay Chat (IRC) client for KDE")
     (description "Konversation is a graphical Internet Relay Chat client (IRC)
@@ -259,54 +254,52 @@ Features are:
         (base32 "149gi9hkyl825kf046iqkam3gkzfwdc2sihbf8gs6njachzvb81y"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules kdoctools pkg-config))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("boost" ,boost)
-       ("expat" ,expat)
-       ("glib" ,glib)
-       ("gpgme" ,gpgme)
-       ("jsoncpp" ,jsoncpp)
-       ("kcmutils" ,kcmutils)
-       ("kconfig" ,kconfig)
-       ("kcontacts" ,kcontacts)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdelibs4support" ,kdelibs4support)
-       ("kdnssd" ,kdnssd)
-       ("kemoticons" ,kemoticons)
-       ("khtml" ,khtml)
-       ("ki18n" ,ki18n)
-       ("kidentitymanagement" ,kidentitymanagement)
-       ("kjs" ,kjs)
-       ;; TODO? kleopatra (additionally to libkleo)
-       ("knotifyconfig" ,knotifyconfig)
-       ("kparts" ,kparts)
-       ("kpimtextedit" ,kpimtextedit)
-       ("ktexteditor" ,ktexteditor)
-       ("kwallet" ,kwallet)
-       ;; TODO: Libgadu
-       ("libidn" ,libidn)
-       ("libkleo" ,libkleo)
-       ;; TODO: LibMeanwhile
-       ("libotr" ,libotr)
-       ("libsrtp" ,libsrtp)
-       ("libxml2" ,libxml2)
-       ("libxstl" ,libxslt)
-       ;; TODO: Mediastreamer
-       ("openssl" ,openssl)
-       ("ortp" ,ortp)
-       ("phonon" ,phonon)
-       ("qca" ,qca)
-       ("qgpgme" ,qgpgme)
-       ("qtbase" ,qtbase-5)
-       ("speex" ,speex)
-       ("v4l-utils" ,v4l-utils)
-       ;; TODO: Xmms
-       ("zlib" ,zlib)))
+     (list alsa-lib
+           boost
+           expat
+           glib
+           gpgme
+           jsoncpp
+           kcmutils
+           kconfig
+           kcontacts
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           kdelibs4support
+           kdnssd
+           kemoticons
+           khtml
+           ki18n
+           kidentitymanagement
+           kjs
+           ;; TODO? kleopatra (additionally to libkleo)
+           knotifyconfig
+           kparts
+           kpimtextedit
+           ktexteditor
+           kwallet
+           ;; TODO: Libgadu
+           libidn
+           libkleo
+           ;; TODO: LibMeanwhile
+           libotr
+           libsrtp
+           libxml2
+           libxslt
+           ;; TODO: Mediastreamer
+           openssl
+           ortp
+           phonon
+           qca
+           qgpgme
+           qtbase-5
+           speex
+           v4l-utils
+           ;; TODO: Xmms
+           zlib))
     ;; TODO: enable video support
     (home-page "https://kde.org/applications/internet/org.kde.kopete")
     (synopsis "Instant messaging and chat application")
@@ -337,28 +330,27 @@ This package is part of the KDE networking module.")
         (base32 "1hp23k3nsrcxpv2qiynjgm71zn3l6ds00cpd4frc68szgiblrw9r"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("kbookmarks" ,kbookmarks)
-       ("freerdp" ,freerdp)
-       ("kcmutils" ,kcmutils)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kdnssd" ,kdnssd)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("knotifications" ,knotifications)
-       ("knotifyconfig" ,knotifyconfig)
-       ("knotifyconfig" ,knotifyconfig)
-       ("kwallet" ,kwallet)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("libssh2" ,libssh)
-       ;; TODO: libvnc{server,client} - is not tigervnc-{server,client}
-       ("oxygen-icons" ,oxygen-icons) ; default icon set
-       ("qtbase" ,qtbase-5)))
+     (list kbookmarks
+           freerdp
+           kcmutils
+           kcompletion
+           kconfig
+           kdnssd
+           ki18n
+           kiconthemes
+           knotifications
+           knotifyconfig
+           knotifyconfig
+           kwallet
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           libssh
+           ;; TODO: libvnc{server,client} - is not tigervnc-{server,client}
+           oxygen-icons ; default icon set
+           qtbase-5))
     (home-page "https://kde.org/applications/internet/org.kde.krdc")
     (synopsis "Remote desktop client")
     (description "KRDC is a client application that allows you to view or even
@@ -382,42 +374,41 @@ This package is part of the KDE networking module.")
         (base32 "0kwd0npxfg4mdh7f3xadd2zjlqalpb1jxk61505qpcgcssijf534"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("boost" ,boost)
-       ("gmp" ,gmp)
-       ("karchive" ,karchive)
-       ("kcmutils" ,kcmutils)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdewebkit" ,kdewebkit)
-       ("kdnssd" ,kdnssd)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("knotifications" ,knotifications)
-       ("knotifyconfig" ,knotifyconfig)
-       ("kparts" ,kparts)
-       ("kplotting" ,kplotting)
-       ("kross" ,kross)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("libgcrypt" ,libgcrypt)
-       ("libktorrent" ,libktorrent)
-       ;; TODO: LibKWorkspace -> plasma-workspace?
-       ("oxygen-icons" ,oxygen-icons) ; default icon set
-       ("phonon" ,phonon)
-       ("qtbase" ,qtbase-5)
-       ("qtscript" ,qtscript)
-       ("qtwebkit" ,qtwebkit)
-       ("solid" ,solid)
-       ("syndication" ,syndication)
-       ("taglib" ,taglib)))
+     (list boost
+           gmp
+           karchive
+           kcmutils
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           kdewebkit
+           kdnssd
+           ki18n
+           kiconthemes
+           kio
+           knotifications
+           knotifyconfig
+           kparts
+           kplotting
+           kross
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           libgcrypt
+           libktorrent
+           ;; TODO: LibKWorkspace -> plasma-workspace?
+           oxygen-icons ; default icon set
+           phonon
+           qtbase-5
+           qtscript
+           qtwebkit
+           solid
+           syndication
+           taglib))
     (home-page "https://kde.org/applications/internet/org.kde.ktorrent")
     (synopsis "BitTorrent client")
     (description "KTorrent is a BitTorrent application by KDE which allows you
@@ -439,15 +430,15 @@ a full-featured client for BitTorrent.")
         (base32 "0981ci2kr20v4fk11h57rqya0brgslfazpgq1yk5yqiwyqqm49r2"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("kconfig" ,kconfig)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kpimcommon" ,kpimcommon)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("qtbase" ,qtbase-5)))
+     (list kconfig
+           ki18n
+           kio
+           kpimcommon
+           ktextwidgets
+           kwidgetsaddons
+           qtbase-5))
     (arguments
      `(#:tests? #f)) ;; 2/7 tests fail (due to network issues?)
     (home-page "https://invent.kde.org/pim/libgravatar")
@@ -472,18 +463,18 @@ unnecessary network operations.")
         (base32 "0051zh8bb4p9wmcfn5ql987brhsaiw9880xdck7b5dm1a05mri2w"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("boost" ,boost)
-       ("gmp" ,gmp)
-       ("karchive" ,karchive)
-       ("kcrash" ,kcrash)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("libgcrypt" ,libgcrypt)
-       ("qca" ,qca)
-       ("qtbase" ,qtbase-5)
-       ("solid" ,solid)))
+     (list boost
+           gmp
+           karchive
+           kcrash
+           ki18n
+           kio
+           libgcrypt
+           qca
+           qtbase-5
+           solid))
     (home-page "https://invent.kde.org/network/libktorrent")
     (synopsis "BitTorrent protocol library for C++ / Qt 5 / KDE Frameworks")
     (description "The KTorrent library supports connectivity to HTTP and UDP
diff --git a/gnu/packages/kde-multimedia.scm b/gnu/packages/kde-multimedia.scm
index 21ca996246..e7a2b943e0 100644
--- a/gnu/packages/kde-multimedia.scm
+++ b/gnu/packages/kde-multimedia.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2017, 2019 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;; Copyright © 2020 Timotej Lazar <timotej.lazar@araneo.si>
 ;;; Copyright © 2021 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2022 Vinicius Monego <monego@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -21,14 +22,17 @@
 (define-module (gnu packages kde-multimedia)
   #:use-module (guix build-system qt)
   #:use-module (guix download)
+  #:use-module (guix git-download)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix utils)
+  #:use-module (guix gexp)
   #:use-module (gnu packages)
   #:use-module (gnu packages audio)
   #:use-module (gnu packages base)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages cdrom)
+  #:use-module (gnu packages docbook)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages gnome)
@@ -39,10 +43,13 @@
   #:use-module (gnu packages mp3)
   #:use-module (gnu packages music)
   #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages python)
   #:use-module (gnu packages pulseaudio)
   #:use-module (gnu packages qt)
+  #:use-module (gnu packages readline)
   #:use-module (gnu packages video)
   #:use-module (gnu packages xiph)
+  #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg))
 
 (define-public audiocd-kio
@@ -58,20 +65,19 @@
         (base32 "0qlnxxbayqhz25jbvzis27jw2zbw1pmacp8rv7v5wa7zfqn3kmyk"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("cdparanoia" ,cdparanoia)
-       ("flac" ,flac)
-       ("kcmutils" ,kcmutils)
-       ("kconfig" ,kconfig)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("libkcddb" ,libkcddb)
-       ("libkcompactdisc" ,libkcompactdisc)
-       ("libvorbis" ,libvorbis)
-       ("phonon" ,phonon)
-       ("qtbase" ,qtbase-5)))
+     (list cdparanoia
+           flac
+           kcmutils
+           kconfig
+           ki18n
+           kio
+           libkcddb
+           libkcompactdisc
+           libvorbis
+           phonon
+           qtbase-5))
     (home-page "https://kde.org/applications/multimedia/org.kde.kio_audiocd")
     (synopsis "Transparent audio CD integration for applications using the KDE
 Platform")
@@ -98,27 +104,26 @@ This package is part of the KDE multimedia module.")
         (base32 "1sssg20a1vpwk816lp5jgwahilaswb9f3hgfqvc73il4g11ky1xj"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kjobwidgets" ,kjobwidgets)
-       ("knotifications" ,knotifications)
-       ("kparts" ,kparts)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("oxygen-icons" ,oxygen-icons) ; default icon set
-       ("phonon" ,phonon)
-       ("phonon-backend-gstreamer" ,phonon-backend-gstreamer)
-       ("qtbase" ,qtbase-5)
-       ("solid" ,solid)))
+     (list kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kio
+           kjobwidgets
+           knotifications
+           kparts
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           oxygen-icons ; default icon set
+           phonon
+           phonon-backend-gstreamer
+           qtbase-5
+           solid))
     (home-page "https://kde.org/applications/multimedia/org.kde.dragonplayer")
     (synopsis "Simple video player")
     (description "Dragon Player is a multimedia player where the focus is on
@@ -144,41 +149,38 @@ This package is part of the KDE multimedia module.")
         (base32 "02450lsnbd37fms1i2bb9qc9wir4vym6qqd9p5hr6a6s6qwfs6qf"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)
-       ("dbus" ,dbus)
-       ("kdoctools" ,kdoctools)
-       ("xorg-server" , xorg-server-for-tests)))
+     (list extra-cmake-modules pkg-config dbus kdoctools
+           xorg-server-for-tests))
     (inputs
-     `(("kconfig" ,kconfig)
-       ("baloo" ,baloo)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kcmutils" ,kcmutils)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdeclarative" ,kdeclarative)
-       ("kfilemetadata" ,kfilemetadata)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kirigami" ,kirigami)
-       ("kmediaplayer" ,kmediaplayer)
-       ("kparts" ,kparts)
-       ("kpackage" ,kpackage)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("oxygen-icons" ,oxygen-icons) ; default icon set
-       ("phonon" ,phonon)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtgraphicaleffects" ,qtgraphicaleffects) ; not listed as dependency
-       ("qtmultimedia" ,qtmultimedia)
-       ("qtquickcontrols" ,qtquickcontrols)
-       ("qtquickcontrols2" ,qtquickcontrols2)
-       ("qtsvg" ,qtsvg)
-       ("qtx11extras" ,qtx11extras)
-       ;; TODO: upnpqt https://gitlab.com/homeautomationqt/upnp-player-qt
-       ("vlc" ,vlc)))
+     (list kconfig
+           baloo
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kcmutils
+           kdbusaddons
+           kdeclarative
+           kfilemetadata
+           ki18n
+           kio
+           kirigami
+           kmediaplayer
+           kparts
+           kpackage
+           kwidgetsaddons
+           kxmlgui
+           oxygen-icons ; default icon set
+           phonon
+           qtbase-5
+           qtdeclarative
+           qtgraphicaleffects ; not listed as dependency
+           qtmultimedia
+           qtquickcontrols
+           qtquickcontrols2
+           qtsvg
+           qtx11extras
+           ;; TODO: upnpqt https://gitlab.com/homeautomationqt/upnp-player-qt
+           vlc))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -186,8 +188,7 @@ This package is part of the KDE multimedia module.")
            (lambda* (#:key inputs #:allow-other-keys)
              ;; The test suite requires a running X server, setting
              ;; QT_QPA_PLATFORM=offscreen does not suffice.
-             (system (string-append (assoc-ref inputs "xorg-server")
-                                    "/bin/Xvfb :1 -screen 0 640x480x24 &"))
+             (system "Xvfb :1 -screen 0 640x480x24 &")
              (setenv "DISPLAY" ":1")
              #t))
          (replace 'check
@@ -219,14 +220,9 @@ its own database.  You can build and play your own playlist.")
         (base32 "17l50z33a1h5zkrrfkb261yi2hms66qj36l1mndq7mvs97y2ggmc"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules pkg-config))
     (inputs
-     `(("ffmpeg" ,ffmpeg)
-       ("kconfig" ,kconfig)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("qtbase" ,qtbase-5)))
+     (list ffmpeg kconfig ki18n kio qtbase-5))
     (home-page "https://kde.org/applications/multimedia/org.kde.ffmpegthumbs")
     (synopsis "Video thumbnail generator for KDE using ffmpeg")
     (description "
@@ -250,31 +246,31 @@ This package is part of the KDE multimedia module.")
         (base32 "06vsh7knyhcbcbf632jhldbqpzfkdyils2l8dbcdw5nj5hhgzzmr"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("kcoreaddons" ,kcoreaddons)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdoctools" ,kdoctools)
-       ("kglobalaccel" ,kglobalaccel)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kjobwidgets" ,kjobwidgets)
-       ("kio" ,kio)
-       ("knotifications" ,knotifications)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwallet" ,kwallet)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("oxygen-icons" ,oxygen-icons) ; default icon set
-       ("phonon" ,phonon)
-       ("phonon-backend-gstreamer" ,phonon-backend-gstreamer)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("taglib" ,taglib)))
+     (list kcoreaddons
+           kcompletion
+           kconfig
+           kcrash
+           kdbusaddons
+           kdoctools
+           kglobalaccel
+           ki18n
+           kiconthemes
+           kjobwidgets
+           kio
+           knotifications
+           ktextwidgets
+           kwallet
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           oxygen-icons ; default icon set
+           phonon
+           phonon-backend-gstreamer
+           qtbase-5
+           qtsvg
+           taglib))
     (home-page "https://kde.org/applications/multimedia/org.kde.juk")
     (synopsis "Music jukebox / music player")
     (description "JuK is a powerful music player capable of managing a large
@@ -292,6 +288,64 @@ Some of JuK's features include:
 This package is part of the KDE multimedia module.")
     (license license:gpl2+)))
 
+(define-public kid3
+  (package
+    (name "kid3")
+    (version "3.9.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://invent.kde.org/multimedia/kid3.git/")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "02r3cnwr05mcxjawzip3jl1lfijvzfbbafq3saipjjjp4kiq9bk4"))))
+    (build-system qt-build-system)
+    (arguments
+     (list
+      #:configure-flags
+      #~(list (string-append "-DDOCBOOK_XSL_DIR="
+                             #$(this-package-native-input "docbook-xsl")))
+      #:phases
+      `(modify-phases %standard-phases
+         ;; FIXME: Documentation build scripts use unix pipes, which will fail
+         ;; in the build environment.
+         (add-after 'unpack 'skip-docs
+           (lambda _
+             (substitute* "CMakeLists.txt"
+               (("add_subdirectory\\(doc\\)") "")))))))
+    (native-inputs
+     (list docbook-xsl
+           extra-cmake-modules
+           ffmpeg
+           kdoctools
+           libxslt
+           python-wrapper
+           qttools))
+    (inputs
+     (list chromaprint
+           flac
+           id3lib
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kio
+           kwidgetsaddons
+           kxmlgui
+           libvorbis
+           qtbase-5
+           qtdeclarative
+           qtmultimedia
+           readline
+           taglib
+           zlib))
+    (home-page "https://kid3.kde.org/")
+    (synopsis "Audio tag editor")
+    (description "Kid3 is an audio tag editor for KDE that supports a large
+variety of formats.")
+    (license license:gpl2+)))
+
 (define-public k3b
   (package
     (name "k3b")
@@ -308,11 +362,11 @@ This package is part of the KDE multimedia module.")
      `(#:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'set-absolute-library-paths
-           (lambda _
+           (lambda* (#:key inputs #:allow-other-keys)
              ;; Set absolute paths for dlopened libraries. We can’t use k3b’s
              ;; runpath as they are loaded by the Qt library.
-             (let ((libcdio-paranoia (assoc-ref %build-inputs "libcdio-paranoia"))
-                   (libdvdcss (assoc-ref %build-inputs "libdvdcss")))
+             (let ((libcdio-paranoia (assoc-ref inputs "libcdio-paranoia"))
+                   (libdvdcss (assoc-ref inputs "libdvdcss")))
                (substitute* "libk3b/tools/k3bcdparanoialib.cpp"
                  (("\"(cdio_cdda|cdio_paranoia)\"" _ library)
                   (string-append "\"" libcdio-paranoia "/lib/" library "\"")))
@@ -321,60 +375,58 @@ This package is part of the KDE multimedia module.")
                   (string-append "\"" libdvdcss "/lib/" library "\""))))
              #t))
          (add-after 'qt-wrap 'wrap-path
-           (lambda _
+           (lambda* (#:key inputs outputs #:allow-other-keys)
              ;; Set paths to backend programs.
-             (wrap-program (string-append (assoc-ref %outputs "out") "/bin/k3b")
+             (wrap-program (string-append (assoc-ref outputs "out") "/bin/k3b")
                `("PATH" ":" prefix
                  ,(map (lambda (input)
-                         (string-append (assoc-ref %build-inputs input) "/bin"))
+                         (string-append (assoc-ref inputs input) "/bin"))
                        '("cdrdao" "dvd+rw-tools" "libburn" "sox"))))
              #t)))))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules pkg-config kdoctools))
     (inputs
-     `(("cdrdao" ,cdrdao)
-       ("dvd+rw-tools" ,dvd+rw-tools)
-       ("ffmpeg" ,ffmpeg)
-       ("flac" ,flac)
-       ("karchive" ,karchive)
-       ("kcmutils" ,kcmutils)
-       ("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kfilemetadata" ,kfilemetadata)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("kjobwidgets" ,kjobwidgets)
-       ("knewstuff" ,knewstuff)
-       ("knotifications" ,knotifications)
-       ("knotifyconfig" ,knotifyconfig)
-       ("kservice" ,kservice)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("lame" ,lame)
-       ("libburn" ,libburn)
-       ("libcdio-paranoia" ,libcdio-paranoia)
-       ("libdvdcss" ,libdvdcss)
-       ("libdvdread" ,libdvdread)
-       ;; TODO: LibFuzzer
-       ("libiconv" ,libiconv)
-       ("libkcddb" ,libkcddb)
-       ("libmad" ,libmad)
-       ("libmpcdec" ,libmpcdec)
-       ;;("libmusicbrainz" ,libmusicbrainz) ; wants old version 2
-       ("libsamplerate" ,libsamplerate)
-       ("libsndfile" ,libsndfile)
-       ("libvorbis" ,libvorbis)
-       ("oxygen-icons" ,oxygen-icons) ; default icon set
-       ("qtbase" ,qtbase-5)
-       ("qtwebkit" ,qtwebkit)
-       ("shared-mime-info" ,shared-mime-info)
-       ("solid" ,solid)
-       ("sox" ,sox)
-       ("taglib" ,taglib)
-       ("zlib" ,zlib)))
+     (list cdrdao
+           dvd+rw-tools
+           ffmpeg
+           flac
+           karchive
+           kcmutils
+           kconfig
+           kcoreaddons
+           kfilemetadata
+           ki18n
+           kiconthemes
+           kio
+           kjobwidgets
+           knewstuff
+           knotifications
+           knotifyconfig
+           kservice
+           kwidgetsaddons
+           kxmlgui
+           lame
+           libburn
+           libcdio-paranoia
+           libdvdcss
+           libdvdread
+           ;; TODO: LibFuzzer
+           libiconv
+           libkcddb
+           libmad
+           libmpcdec
+           ;;("libmusicbrainz" ,libmusicbrainz) ; wants old version 2
+           libsamplerate
+           libsndfile
+           libvorbis
+           oxygen-icons ; default icon set
+           qtbase-5
+           qtwebkit
+           shared-mime-info
+           solid
+           sox
+           taglib
+           zlib))
     (home-page "https://kde.org/applications/multimedia/org.kde.k3b")
     (synopsis "Sophisticated CD/DVD burning application")
     (description "K3b is CD-writing software which intends to be feature-rich
@@ -400,25 +452,23 @@ available CD drives.")
         (base32 "10dnhr9v2jlki44i3gmjagky66ybixmv6f29z5imk9clgddrlyfr"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules pkg-config kdoctools))
     (inputs
-     `(("eudev" ,eudev)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("libxscrnsaver" ,libxscrnsaver)
-       ("oxygen-icons" ,oxygen-icons) ; default icon set
-       ("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)
-       ("solid" ,solid)
-       ("v4l-utils" ,v4l-utils) ; libdvbv5
-       ("vlc" ,vlc)))
+     (list eudev
+           kcoreaddons
+           kdbusaddons
+           ki18n
+           kio
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           libxscrnsaver
+           oxygen-icons ; default icon set
+           qtbase-5
+           qtx11extras
+           solid
+           v4l-utils ; libdvbv5
+           vlc))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -458,28 +508,28 @@ autoloading of subtitle files for use while playing video.")
        ("kdoctools" ,kdoctools)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base)
-       ("kconfig" ,kconfig)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kirigami" ,kirigami)
-       ("knotifications" ,knotifications)
-       ("kparts" ,kparts)
-       ("oxygen-icons" ,oxygen-icons) ; default icon set
-       ("purpose" ,purpose)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtgraphicaleffects" ,qtgraphicaleffects)
-       ("qtquickcontrols" ,qtquickcontrols)
-       ("qtquickcontrols2" ,qtquickcontrols2) ; not listed as dependency
-       ("qtx11extras" ,qtx11extras)))
+     (list gstreamer
+           gst-plugins-base
+           kconfig
+           ki18n
+           kio
+           kirigami
+           knotifications
+           kparts
+           oxygen-icons ; default icon set
+           purpose
+           qtbase-5
+           qtdeclarative
+           qtgraphicaleffects
+           qtquickcontrols
+           qtquickcontrols2 ; not listed as dependency
+           qtx11extras))
     (arguments
-     `(#:tests? #f ; test program gets built, but is not found
-       #:configure-flags
-       (list (string-append "-DCMAKE_CXX_FLAGS=-I"
-                            (assoc-ref %build-inputs "gst-plugins-base")
-                            "/include/gstreamer-1.0"))))
+     (list #:tests? #f ; test program gets built, but is not found
+           #:configure-flags
+           #~(list (string-append "-DCMAKE_CXX_FLAGS=-I"
+                                  #$(this-package-input "gst-plugins-base")
+                                  "/include/gstreamer-1.0"))))
     (home-page "https://kde.org/applications/multimedia/org.kde.kamoso")
     (synopsis "Take pictures and videos out of your webcam")
     (description "Kamoso is a simple and friendly program to use your
@@ -500,31 +550,30 @@ camera.  Use it to take pictures and make videos to share.")
        (base32 "1na52ypp57wqrc6pl1khinx9i6fidv1k97nnxcy8zb4l7d5sh1nd"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules pkg-config))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("glib" ,glib)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdoctools" ,kdoctools)
-       ("kglobalaccel" ,kglobalaccel)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("knotifications" ,knotifications)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("libcanberra" ,libcanberra)
-       ("oxygen-icons" ,oxygen-icons) ; default icon set
-       ("plasma-framework" ,plasma-framework)
-       ("pulseaudio" ,pulseaudio)
-       ("qtbase" ,qtbase-5)
-       ("solid" ,solid)))
+     (list alsa-lib
+           glib
+           kconfigwidgets
+           kcompletion
+           kconfig
+           kconfigwidgets
+           kcrash
+           kdbusaddons
+           kdoctools
+           kglobalaccel
+           ki18n
+           kiconthemes
+           knotifications
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           libcanberra
+           oxygen-icons ; default icon set
+           plasma-framework
+           pulseaudio
+           qtbase-5
+           solid))
     (home-page "https://kde.org/applications/multimedia/org.kde.kmix")
     (synopsis "Volume control and mixer")
     (description "KMix is an audio device mixer, used to adjust volume, select
@@ -550,37 +599,36 @@ This package is part of the KDE multimedia module.")
                  "kmplayer-upstream_Fix-build-with-Qt-5.9.patch"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules pkg-config kdoctools))
     (inputs
-     `(("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kdelibs4support" ,kdelibs4support)
-       ("ki18n" ,ki18n)
-       ("kinit" ,kinit)
-       ("kio" ,kio)
-       ("kparts" ,kparts)
-       ("kmediaplayer" ,kmediaplayer)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("libxcb" ,libxcb) ;; FIXME: why does cmake not find XEVIE and XPRINT?
-       ("oxygen-icons" ,oxygen-icons) ; default icon set
-       ("phonon" ,phonon)
-       ("qtbase" ,qtbase-5)
-       ("cairo" ,cairo)
-       ("qtsvg" ,qtsvg)
-       ("qtx11extras" ,qtx11extras)
-       ("xcb-util" ,xcb-util)
-       ("xcb-util-cursor" ,xcb-util-cursor)
-       ("xcb-util-errors" ,xcb-util-errors)
-       ("xcb-util-image" ,xcb-util-image)
-       ("xcb-util-keysyms" ,xcb-util-keysyms)
-       ("xcb-util-wm" ,xcb-util-wm)))
+     (list kconfig
+           kcoreaddons
+           kdelibs4support
+           ki18n
+           kinit
+           kio
+           kparts
+           kmediaplayer
+           kwidgetsaddons
+           libxcb ;; FIXME: why does cmake not find XEVIE and XPRINT?
+           oxygen-icons ; default icon set
+           phonon
+           qtbase-5
+           cairo
+           qtsvg
+           qtx11extras
+           xcb-util
+           xcb-util-cursor
+           xcb-util-errors
+           xcb-util-image
+           xcb-util-keysyms
+           xcb-util-wm))
     (arguments
-     `(#:configure-flags
-       (list (string-append
-              "-DCMAKE_CXX_FLAGS=-I"
-              (assoc-ref %build-inputs "qtx11extras") "/include/qt5"))))
+     (list #:configure-flags
+           #~(list (string-append
+                    "-DCMAKE_CXX_FLAGS=-I"
+                    #$(this-package-input "qtx11extras")
+                    "/include/qt5"))))
     (home-page "https://kde.org/applications/multimedia/org.kde.kmplayer")
     (synopsis "Media player using mplayer/phonon as backend")
     (description "Kmplayer can play all the audio/video supported by
@@ -613,38 +661,35 @@ Some features:
         (base32 "0ysa873pc2gip95cxr8yv7ifd9qql5zg6h67i9n9q3iqa6v58iyw"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("librsvg" ,librsvg)
-       ("pkg-config" ,pkg-config)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules librsvg pkg-config kdoctools))
     (inputs
-     `(("also-lib" ,alsa-lib)
-       ("audiofile" ,audiofile)
-       ("flac" ,flac)
-       ("id3lib" ,id3lib)
-       ("karchive" ,karchive)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("kservice" ,kservice)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("libmad" ,libmad)
-       ("libsamplerate" ,libsamplerate)
-       ("libvorbis" ,libvorbis)
-       ("opus" ,opus)
-       ("oxygen-icons" ,oxygen-icons) ; default icon set
-       ("pulseaudio" ,pulseaudio)
-       ("qtbase" ,qtbase-5)
-       ("qtmultimedia" ,qtmultimedia)
-       ("zlib" ,zlib)))
+     (list alsa-lib
+           audiofile
+           flac
+           id3lib
+           karchive
+           kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kiconthemes
+           kio
+           kservice
+           ktextwidgets
+           kwidgetsaddons
+           kxmlgui
+           libmad
+           libsamplerate
+           libvorbis
+           opus
+           oxygen-icons ; default icon set
+           pulseaudio
+           qtbase-5
+           qtmultimedia
+           zlib))
     (home-page "https://kde.org/applications/multimedia/org.kde.kwave")
     (synopsis "Sound editor for KDE")
     (description "Kwave is a sound editor designed for the KDE Desktop
@@ -690,16 +735,15 @@ Its features include:
         (base32 "1fwryaj8ldmsqhl5qxjda8by9i7xlb97r8p9rqzckw697hkfhs0h"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("kcodecs" ,kcodecs)
-       ("kconfig" ,kconfig)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("libmusicbrainz" ,libmusicbrainz)
-       ("qtbase" ,qtbase-5)))
+     (list kcodecs
+           kconfig
+           ki18n
+           kio
+           kwidgetsaddons
+           libmusicbrainz
+           qtbase-5))
     (arguments
      `(#:tests? #f)) ; Most tests require network
     (home-page "https://invent.kde.org/multimedia/libkcddb")
@@ -721,14 +765,14 @@ Its features include:
         (base32 "0iy4i0hxqsrnndd4iqkww7v1rqry7kvi5paxdw5qjfffwn8kcsbx"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("kcoreaddons" ,kcoreaddons)
-       ("ki18n" ,ki18n)
-       ("phonon" ,phonon)
-       ("qtbase" ,qtbase-5)
-       ("solid" ,solid)))
+     (list alsa-lib
+           kcoreaddons
+           ki18n
+           phonon
+           qtbase-5
+           solid))
     (home-page "https://invent.kde.org/multimedia/libkcompactdisc")
     (synopsis "KDE library for playing & ripping CDs")
     (description "The KDE Compact Disc library provides an API for
diff --git a/gnu/packages/kde-pim.scm b/gnu/packages/kde-pim.scm
index a4011e8d3a..b17b18bd12 100644
--- a/gnu/packages/kde-pim.scm
+++ b/gnu/packages/kde-pim.scm
@@ -58,30 +58,28 @@
                  "akonadi-not-relocatable.patch"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)
-       ("shared-mime-info" ,shared-mime-info)))
+     (list extra-cmake-modules qttools shared-mime-info))
     (inputs
-     `(("boost" ,boost)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("kitemmodels" ,kitemmodels)
-       ("kitemviews" ,kitemviews)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)
-       ;; Do NOT add mysql or postgresql to the inputs. Otherwise the binaries
-       ;; and wrapped files will refer to them, even if the user choices none
-       ;; of these.  Executables are searched on $PATH then.
-       ("qtbase" ,qtbase-5)
-       ("sqlite" ,sqlite)))
+     (list boost
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           ki18n
+           kiconthemes
+           kio
+           kitemmodels
+           kitemviews
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           libxml2
+           libxslt
+           ;; Do NOT add mysql or postgresql to the inputs. Otherwise the binaries
+           ;; and wrapped files will refer to them, even if the user choices none
+           ;; of these.  Executables are searched on $PATH then.
+           qtbase-5
+           sqlite))
     (arguments
      `(#:tests? #f ;; TODO 135/167 tests fail
        #:configure-flags '("-DDATABASE_BACKEND=SQLITE") ; lightweight
@@ -90,10 +88,10 @@
        #:phases
        (modify-phases (@ (guix build qt-build-system) %standard-phases)
          (add-before 'configure 'add-definitions
-           (lambda _
-             (let ((out (assoc-ref %outputs "out"))
-                   (mysql (assoc-ref %build-inputs "mysql"))
-                   (pgsql (assoc-ref %build-inputs "postgresql")))
+           (lambda* (#:key outputs inputs #:allow-other-keys)
+             (let ((out   (assoc-ref outputs "out"))
+                   (mysql (assoc-ref inputs "mysql"))
+                   (pgsql (assoc-ref inputs "postgresql")))
                (with-output-to-file "CMakeLists.txt.new"
                  (lambda _
                    (display
@@ -131,28 +129,28 @@ programs.")
         (base32 "1mq76qyd3jcngb2yfanpn7qvklzllza399fxwii0mqppp1vmnb2b"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("akonadi" ,akonadi)
-       ("akonadi-contacts" ,akonadi-contacts)
-       ("akonadi-mime" ,akonadi-mime)
-       ("boost" ,boost)
-       ("kcalendarcore" ,kcalendarcore)
-       ("kcalutils" ,kcalutils)
-       ("kcodecs" ,kcodecs)
-       ("kcontacts" ,kcontacts)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kidentitymanagement" ,kidentitymanagement)
-       ("kio" ,kio)
-       ("kitemmodels" ,kitemmodels)
-       ("kmailtransport" ,kmailtransport)
-       ("kmime" ,kmime)
-       ("kpimtextedit" ,kpimtextedit)
-       ("ksmtp" ,ksmtp)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwallet" ,kwallet)
-       ("qtbase" ,qtbase-5)))
+     (list akonadi
+           akonadi-contacts
+           akonadi-mime
+           boost
+           kcalendarcore
+           kcalutils
+           kcodecs
+           kcontacts
+           ki18n
+           kiconthemes
+           kidentitymanagement
+           kio
+           kitemmodels
+           kmailtransport
+           kmime
+           kpimtextedit
+           ksmtp
+           ktextwidgets
+           kwallet
+           qtbase-5))
     (arguments
      `(#:tests? #f))  ;; TODO: 1/1 test fails
     (home-page "https://api.kde.org/kdepim/akonadi/html/index.html")
@@ -174,32 +172,32 @@ collection and item views.")
         (base32 "0igggarnl99s5pl73dgrpha4lf7vnr000iy69vcwmqs5lxb7cyli"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("akonadi" ,akonadi)
-       ("boost" ,boost)
-       ("kauth" ,kauth)
-       ("kcodecs" ,kcodecs)
-       ("kcompletion" ,kcompletion)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcontacts" ,kcontacts)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kitemmodels" ,kitemmodels)
-       ("kitemviews" ,kitemviews)
-       ("kjobwidgets" ,kjobwidgets)
-       ("kmime" ,kmime)
-       ("kservice" ,kservice)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("prison" ,prison)
-       ("kio" ,kio)
-       ("qtbase" ,qtbase-5)
-       ("solid" ,solid)
-       ("sonnet" ,sonnet)))
+     (list akonadi
+           boost
+           kauth
+           kcodecs
+           kcompletion
+           kconfigwidgets
+           kcontacts
+           kcoreaddons
+           kdbusaddons
+           ki18n
+           kiconthemes
+           kitemmodels
+           kitemviews
+           kjobwidgets
+           kmime
+           kservice
+           ktextwidgets
+           kwidgetsaddons
+           kxmlgui
+           prison
+           kio
+           qtbase-5
+           solid
+           sonnet))
     (home-page "https://api.kde.org/kdepim/akonadi/html/index.html")
     (synopsis "Akonadi contacts access library")
     (description "Akonadi Contacts is a library that effectively bridges the
@@ -225,23 +223,22 @@ to list and filter contacts.")
         (base32 "1wd776ia3z22a79biq04y4m83n8xpvfmyg8bcsslr7lmc3avdg8w"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("libxslt" ,libxslt) ;; xslt for generating interface descriptions
-       ("shared-mime-info" ,shared-mime-info)))
+     (list extra-cmake-modules libxslt ;; xslt for generating interface descriptions
+           shared-mime-info))
     (inputs
-     `(("akonadi" ,akonadi)
-       ("boost" ,boost)
-       ("kcodecs" ,kcodecs)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kitemmodels" ,kitemmodels)
-       ("kmime" ,kmime)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("qtbase" ,qtbase-5)))
+     (list akonadi
+           boost
+           kcodecs
+           kconfig
+           kconfigwidgets
+           kdbusaddons
+           ki18n
+           kio
+           kitemmodels
+           kmime
+           kwidgetsaddons
+           kxmlgui
+           qtbase-5))
     (home-page "https://api.kde.org/kdepim/akonadi/html/index.html")
     (arguments
      `(#:phases
@@ -278,13 +275,9 @@ with emails through Akonadi easier.")
         (base32 "04y293kjrmjjcbb7fkjl7hl4vrks4cjjxnvc6ibzyv81rn6cdhh2"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("akonadi" ,akonadi)
-       ("kcodecs" ,kcodecs)
-       ("ki18n" ,ki18n)
-       ("kmime" ,kmime)
-       ("qtbase" ,qtbase-5)))
+     (list akonadi kcodecs ki18n kmime qtbase-5))
     (home-page "https://api.kde.org/kdepim/akonadi/html/index.html")
     (synopsis "Akonadi notes access library")
     (description "Akonadi Notes is a library that effectively bridges the
@@ -307,27 +300,26 @@ wrapping notes into KMime::Message objects.")
         (base32 "1h5p44y244gzf7ndzw7afrvq9c76ybp8ddvg82p3lzjh02rrvd50"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-
-       ;; For tests.
-       ("dbus" ,dbus)))
+     (list extra-cmake-modules
+           ;; For tests.
+           dbus))
     (inputs
-     `(("akonadi" ,akonadi)
-       ("akonadi-mime" ,akonadi-mime)
-       ("boost" ,boost)
-       ("kcalendarcore" ,kcalendarcore)
-       ("kcmutils" ,kcmutils)
-       ("kcontacts" ,kcontacts)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kitemmodels" ,kitemmodels)
-       ("kmime" ,kmime)
-       ("krunner" ,krunner)
-       ("kwindowsystem" ,kwindowsystem)
-       ("qtbase" ,qtbase-5)
-       ("xapian" ,xapian)))
+     (list akonadi
+           akonadi-mime
+           boost
+           kcalendarcore
+           kcmutils
+           kcontacts
+           kcrash
+           kdbusaddons
+           ki18n
+           kio
+           kitemmodels
+           kmime
+           krunner
+           kwindowsystem
+           qtbase-5
+           xapian))
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (add-after 'unpack 'disable-failing-test
@@ -364,35 +356,35 @@ Akonadi PIM data server.  It uses Xapian for indexing and querying.")
     (properties `((upstream-name . "incidenceeditor")))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("akonadi" ,akonadi)
-       ("akonadi-calendar" ,akonadi-calendar)
-       ("akonadi-contacts" ,akonadi-contacts)
-       ("akonadi-mime" ,akonadi-mime)
-       ("boost" ,boost)
-       ("kcalendarcore" ,kcalendarcore)
-       ("kcalendarsupport" ,kcalendarsupport)
-       ("kcalutils" ,kcalutils)
-       ("kcodecs" ,kcodecs)
-       ("kcontacts" ,kcontacts)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdepim-apps-libs" ,kdepim-apps-libs)
-       ("kdiagram" ,kdiagram)
-       ("keventviews" ,keventviews)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kidentitymanagement" ,kidentitymanagement)
-       ("kio" ,kio)
-       ("kitemmodels" ,kitemmodels)
-       ("kldap" ,kldap)
-       ("kmailtransport" ,kmailtransport)
-       ("kmime" ,kmime)
-       ("kpimtextedit" ,kpimtextedit)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwallat" ,kwallet)
-       ("libkdepim" ,libkdepim)
-       ("qtbase" ,qtbase-5)))
+     (list akonadi
+           akonadi-calendar
+           akonadi-contacts
+           akonadi-mime
+           boost
+           kcalendarcore
+           kcalendarsupport
+           kcalutils
+           kcodecs
+           kcontacts
+           kdbusaddons
+           kdepim-apps-libs
+           kdiagram
+           keventviews
+           ki18n
+           kiconthemes
+           kidentitymanagement
+           kio
+           kitemmodels
+           kldap
+           kmailtransport
+           kmime
+           kpimtextedit
+           ktextwidgets
+           kwallet
+           libkdepim
+           qtbase-5))
     (home-page "https://invent.kde.org/pim/incidenceeditor")
     (synopsis "KDE PIM library for editing incidences")
     (description "This library provides an incidence editor for KDE PIM.")
@@ -412,42 +404,42 @@ Akonadi PIM data server.  It uses Xapian for indexing and querying.")
         (base32 "1vpdhdj87ai2sxjn2jk3mh6bzfr1n3yzydnkgv7nc8v1m2fdawap"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("akonadi" ,akonadi)
-       ("akonadi-contacts" ,akonadi-contacts)
-       ("akonadi-mime" ,akonadi-mime)
-       ("akonadi-search" ,akonadi-search)
-       ("boost" ,boost)
-       ("gpgme" ,gpgme)
-       ("grantlee" ,grantlee)
-       ("grantleetheme" ,grantleetheme)
-       ("kcalendarcore" ,kcalendarcore)
-       ("kcmutils" ,kcmutils)
-       ("kcompletion" ,kcompletion)
-       ("kcontacts" ,kcontacts)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdepim-apps-libs" ,kdepim-apps-libs)
-       ("kdoctools" ,kdoctools)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kimap" ,kimap)
-       ("kio" ,kio)
-       ("kitemmodels" ,kitemmodels)
-       ("kmime" ,kmime)
-       ("kontactinterface" ,kontactinterface)
-       ("kparts" ,kparts)
-       ("kpimcommon" ,kpimcommon)
-       ("kpimtextedit" ,kpimtextedit)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdepim" ,libkdepim)
-       ("libkleo" ,libkleo)
-       ("oxygen-icons" ,oxygen-icons) ; default icon set, required for tests
-       ("prison" ,prison)
-       ("qgpgme" ,qgpgme)
-       ("qtbase" ,qtbase-5)))
+     (list akonadi
+           akonadi-contacts
+           akonadi-mime
+           akonadi-search
+           boost
+           gpgme
+           grantlee
+           grantleetheme
+           kcalendarcore
+           kcmutils
+           kcompletion
+           kcontacts
+           kcrash
+           kdbusaddons
+           kdepim-apps-libs
+           kdoctools
+           ki18n
+           kiconthemes
+           kimap
+           kio
+           kitemmodels
+           kmime
+           kontactinterface
+           kparts
+           kpimcommon
+           kpimtextedit
+           ktextwidgets
+           kxmlgui
+           libkdepim
+           libkleo
+           oxygen-icons ; default icon set, required for tests
+           prison
+           qgpgme
+           qtbase-5))
     (home-page "https://kontact.kde.org/components/kaddressbook.html")
     (synopsis "Address Book application to manage your contacts")
     (description "KAddressBook stores all the personal details of your family,
@@ -469,26 +461,26 @@ CalDAV server.")
         (base32 "0g0bm4zzzcpl2pqqf609349zagwrgj6a4ibxpgg4zf21aacdq8bi"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("akonadi" ,akonadi)
-       ("boost" ,boost)
-       ("kcalendarcore" ,kcalendarcore)
-       ("kcalutils" ,kcalutils)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kholidays" ,kholidays)
-       ("ki18n" ,ki18n)
-       ("kidentitymanagement" ,kidentitymanagement)
-       ("kio" ,kio)
-       ("kitemmodels" ,kitemmodels)
-       ("kpimtextedit" ,kpimtextedit)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kxmlgui" ,kxmlgui)
-       ("qtbase" ,qtbase-5)))
+     (list akonadi
+           boost
+           kcalendarcore
+           kcalutils
+           kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kdbusaddons
+           kholidays
+           ki18n
+           kidentitymanagement
+           kio
+           kitemmodels
+           kpimtextedit
+           ktextwidgets
+           kxmlgui
+           qtbase-5))
     (arguments
      `(#:tests? #f)) ;; TODO: TZ setup
     (home-page "https://api.kde.org/stable/kdepimlibs-apidocs/")
@@ -510,15 +502,15 @@ calendar data.")
         (base32 "0pi3axs58wsz5vq6vyisz73s24q739zplwrblyvkcm16nll4mvhk"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("kcalendarcore" ,kcalendarcore)
-       ("kcoreaddons" ,kcoreaddons)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kxmlrpcclient" ,kxmlrpcclient)
-       ("qtbase" ,qtbase-5)
-       ("syndication" ,syndication)))
+     (list kcalendarcore
+           kcoreaddons
+           ki18n
+           kio
+           kxmlrpcclient
+           qtbase-5
+           syndication))
     ;; Note: Some tests take up to 90 sec.
     (home-page "https://invent.kde.org/pim/kblog")
     (synopsis "Client-side support library for web application remote blogging
@@ -545,31 +537,30 @@ one of the APIs mentioned above.")
     (properties `((upstream-name . "calendarsupport")))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules qttools))
     (inputs
-     `(("akonadi" ,akonadi)
-       ("akonadi-calendar" ,akonadi-calendar)
-       ("akonadi-mime" ,akonadi-mime)
-       ("boost" ,boost)
-       ("kcalendarcore" ,kcalendarcore)
-       ("kcalutils" ,kcalutils)
-       ("kcompletion" ,kcompletion)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdepim-apps-libs" ,kdepim-apps-libs)
-       ("kguiaddons" ,kguiaddons)
-       ("kholidays" ,kholidays)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kidentitymanagement" ,kidentitymanagement)
-       ("kio" ,kio)
-       ("kitemmodels" ,kitemmodels)
-       ("kmime" ,kmime)
-       ("kpimcommon" ,kpimcommon)
-       ("kpimtextedit" ,kpimtextedit)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kxmlgui" ,kxmlgui)
-       ("qtbase" ,qtbase-5)))
+     (list akonadi
+           akonadi-calendar
+           akonadi-mime
+           boost
+           kcalendarcore
+           kcalutils
+           kcompletion
+           kdbusaddons
+           kdepim-apps-libs
+           kguiaddons
+           kholidays
+           ki18n
+           kiconthemes
+           kidentitymanagement
+           kio
+           kitemmodels
+           kmime
+           kpimcommon
+           kpimtextedit
+           ktextwidgets
+           kxmlgui
+           qtbase-5))
     (home-page "https://api.kde.org/stable/calendarsupport/")
     (synopsis "Calendar Support library for KDE PIM")
     (description "The Calendar Support library provides helper utilities for
@@ -590,23 +581,22 @@ calendaring applications.")
         (base32 "0v268w8vhgqxq1nwv9b9cy4h7zqgjrv19r44g3zc9w5j76ivix86"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("libxml2" ,libxml2))) ;; xmllint required for tests
+     (list extra-cmake-modules libxml2)) ;; xmllint required for tests
     (inputs
-     `(("grantlee" ,grantlee)
-       ("kcalendarcore" ,kcalendarcore)
-       ("kcodecs" ,kcodecs)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kidentitymanagement" ,kidentitymanagement)
-       ("kpimtextedit" ,kpimtextedit)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("oxygen-icons" ,oxygen-icons) ; default icon set, required for tests
-       ("qtbase" ,qtbase-5)))
+     (list grantlee
+           kcalendarcore
+           kcodecs
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           ki18n
+           kiconthemes
+           kidentitymanagement
+           kpimtextedit
+           ktextwidgets
+           kwidgetsaddons
+           oxygen-icons ; default icon set, required for tests
+           qtbase-5))
     (arguments
      `(#:tests? #f)) ;; TODO: seem to pull in some wrong theme
     (home-page "https://api.kde.org/stable/kdepimlibs-apidocs/")
@@ -629,13 +619,9 @@ functions for accessing calendar data using the kcalcore API.")
         (base32 "0445gl4xm0h39igkxgb6vmq5iaa04wkgrgbs7nfd0zwngk8xaidn"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("kcoreaddons" ,kcoreaddons)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("qtbase" ,qtbase-5)
-       ("qtxmlpatterns" ,qtxmlpatterns)))
+     (list kcoreaddons ki18n kio qtbase-5 qtxmlpatterns))
     (home-page "https://invent.kde.org/frameworks/kdav")
     (synopsis "DAV protocol implementation with KJobs")
     (description "This is a DAV protocol implementation with KJobs.  Calendars
@@ -657,30 +643,30 @@ supported using GroupDAV or CardDAV.")
         (base32 "0m9qrfjs97anh9h6ibggx23ddlm1zkxjap2iyf3gf672ip01fvci"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("akonadi" ,akonadi)
-       ("akonadi-contacts" ,akonadi-contacts)
-       ("boost" ,boost)
-       ("gpgme" ,gpgme)
-       ("grantlee" ,grantlee)
-       ("grantleetheme" ,grantleetheme)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcontacts" ,kcontacts)
-       ("kcoreaddons" ,kcoreaddons)
-       ("ki18n" ,ki18n)
-       ("kimap" ,kimap)
-       ("kio" ,kio)
-       ("kitemmodels" ,kitemmodels)
-       ("kmime" ,kmime)
-       ("kpimcommon" ,kpimcommon)
-       ("kservice" ,kservice)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("libkleo" ,libkleo)
-       ("prison" ,prison)
-       ("qgpgme" ,qgpgme)
-       ("qtbase" ,qtbase-5)))
+     (list akonadi
+           akonadi-contacts
+           boost
+           gpgme
+           grantlee
+           grantleetheme
+           kconfig
+           kconfigwidgets
+           kcontacts
+           kcoreaddons
+           ki18n
+           kimap
+           kio
+           kitemmodels
+           kmime
+           kpimcommon
+           kservice
+           kwidgetsaddons
+           libkleo
+           prison
+           qgpgme
+           qtbase-5))
     (home-page "https://invent.kde.org/pim/kdepim-apps-libs")
     (synopsis "KDE PIM mail related libraries and data files")
     (description "This package provides mail related libraries and data files
@@ -701,53 +687,49 @@ for KDE PIM.")
         (base32 "1in4x4wvgclkni72cfkw9jx35d0qd0jmfwybm3ksx5qx5sbki9gg"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("dbus" ,dbus)
-       ("kdoctools" ,kdoctools)
-       ("libxslt" ,libxslt)
-       ("shared-mime-info" ,shared-mime-info)))
+     (list extra-cmake-modules dbus kdoctools libxslt shared-mime-info))
     (inputs
-     `(("akonadi" ,akonadi)
-       ("akonadi-calendar" ,akonadi-calendar)
-       ("akonadi-contacts" ,akonadi-contacts)
-       ("akonadi-mime" ,akonadi-mime)
-       ("akonadi-notes" ,akonadi-notes)
-       ("boost" ,boost)
-       ("cyrus-sasl" ,cyrus-sasl)
-       ("kalarmcal" ,kalarmcal)
-       ("kcalendarcore" ,kcalendarcore)
-       ("kcalutils" ,kcalutils)
-       ("kcodecs" ,kcodecs)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcontacts" ,kcontacts)
-       ("kdav" ,kdav)
-       ("kholidays" ,kholidays)
-       ("kidentitymanagement" ,kidentitymanagement)
-       ("kimap" ,kimap)
-       ("kio" ,kio)
-       ("kitemmodels" ,kitemmodels)
-       ("kmailtransport" ,kmailtransport)
-       ("kmbox" ,kmbox)
-       ("kmime" ,kmime)
-       ("knotifications" ,knotifications)
-       ("knotifyconfig" ,knotifyconfig)
-       ("kpimcommon" ,kpimcommon)
-       ("kpimtextedit" ,kpimtextedit)
-       ("kross" ,kross)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwallet" ,kwallet)
-       ("kwindowsystem" ,kwindowsystem)
-       ("libkgapi" ,libkgapi)
-       ;; TODO: libkolab
-       ("qca" ,qca)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtnetworkauth" ,qtnetworkauth)
-       ("qtspeech" ,qtspeech)
-       ("qtwebchannel" ,qtwebchannel)
-       ("qtwebengine" ,qtwebengine)
-       ("qtxmlpatterns" ,qtxmlpatterns)))
+     (list akonadi
+           akonadi-calendar
+           akonadi-contacts
+           akonadi-mime
+           akonadi-notes
+           boost
+           cyrus-sasl
+           kalarmcal
+           kcalendarcore
+           kcalutils
+           kcodecs
+           kconfig
+           kconfigwidgets
+           kcontacts
+           kdav
+           kholidays
+           kidentitymanagement
+           kimap
+           kio
+           kitemmodels
+           kmailtransport
+           kmbox
+           kmime
+           knotifications
+           knotifyconfig
+           kpimcommon
+           kpimtextedit
+           kross
+           ktextwidgets
+           kwallet
+           kwindowsystem
+           libkgapi
+           ;; TODO: libkolab
+           qca
+           qtbase-5
+           qtdeclarative
+           qtnetworkauth
+           qtspeech
+           qtwebchannel
+           qtwebengine
+           qtxmlpatterns))
     (arguments
       ;; TODO: 5/45 tests fail for quite different reasons, even with
       ;; "offscreen" and dbus
@@ -759,10 +741,9 @@ for KDE PIM.")
                       ;; found during one of the compilation steps without
                       ;; this hack.
                       (setenv "CPLUS_INCLUDE_PATH"
-                              (string-append (assoc-ref inputs "akonadi-mime")
-                                             "/include/KF5:"
-                                             (or (getenv "CPLUS_INCLUDE_PATH") "")))
-                      #t)))))
+                              (string-append
+                               (search-input-directory inputs "include/KF5")
+                               ":" (or (getenv "CPLUS_INCLUDE_PATH") ""))))))))
     (home-page "https://invent.kde.org/pim/kdepim-runtime")
     (synopsis "Runtime components for Akonadi KDE")
     (description "This package contains Akonadi agents written using KDE
@@ -788,36 +769,35 @@ package.")
     (properties `((upstream-name . "eventviews")))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules qttools))
     (inputs
-     `(("akonadi" ,akonadi)
-       ("akonadi-calendar" ,akonadi-calendar)
-       ("akonadi-contacts" ,akonadi-contacts)
-       ("boost" ,boost)
-       ("kcalendarcore" ,kcalendarcore)
-       ("kcalendarsupport" ,kcalendarsupport)
-       ("kcalutils" ,kcalutils)
-       ("kcodecs" ,kcodecs)
-       ("kcompletion" ,kcompletion)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcontacts" ,kcontacts)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdiagram" ,kdiagram)
-       ("kguiaddons" ,kguiaddons)
-       ("kholidays" ,kholidays)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kidentitymanagement" ,kidentitymanagement)
-       ("kio" ,kio)
-       ("kitemmodels" ,kitemmodels)
-       ("kmime" ,kmime)
-       ("kpimtextedit" ,kpimtextedit)
-       ("kservice" ,kservice)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdepim" ,libkdepim)
-       ("qtbase" ,qtbase-5)))
+     (list akonadi
+           akonadi-calendar
+           akonadi-contacts
+           boost
+           kcalendarcore
+           kcalendarsupport
+           kcalutils
+           kcodecs
+           kcompletion
+           kconfigwidgets
+           kcontacts
+           kdbusaddons
+           kdiagram
+           kguiaddons
+           kholidays
+           ki18n
+           kiconthemes
+           kidentitymanagement
+           kio
+           kitemmodels
+           kmime
+           kpimtextedit
+           kservice
+           ktextwidgets
+           kxmlgui
+           libkdepim
+           qtbase-5))
     (home-page "https://invent.kde.org/pim/eventviews")
     (synopsis "KDE PIM library for creating events")
     (description "This library provides an event creator for KDE PIM.")
@@ -837,33 +817,32 @@ package.")
         (base32 "03d3gsbara7ga2cyrhafkw11qq9cj804h9vpvxl4wd2a9c90snkh"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("gnupg" ,gnupg)  ;; TODO: Remove after gpgme uses fixed path
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules gnupg ;; TODO: Remove after gpgme uses fixed path
+           kdoctools))
     (inputs
-     `(("akonadi" ,akonadi)
-       ("akonadi-contacts" ,akonadi-contacts)
-       ("boost" ,boost)
-       ("gpgme" ,gpgme)
-       ("karchive" ,karchive)
-       ("kcodecs" ,kcodecs)
-       ("kcontacts" ,kcontacts)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("kitemmodels" ,kitemmodels)
-       ("kjobwidgets" ,kjobwidgets)
-       ("knotifications" ,knotifications)
-       ("kservice" ,kservice)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("oxygen-icons" ,oxygen-icons) ;; default icon set
-       ("qtbase" ,qtbase-5)))
+     (list akonadi
+           akonadi-contacts
+           boost
+           gpgme
+           karchive
+           kcodecs
+           kcontacts
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kiconthemes
+           kio
+           kitemmodels
+           kjobwidgets
+           knotifications
+           kservice
+           ktextwidgets
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           oxygen-icons ;; default icon set
+           qtbase-5))
     (home-page "https://kde.org/applications/utilities/org.kde.kgpg")
     (synopsis "Graphical front end for GNU Privacy Guard")
     (description "Kgpg manages cryptographic keys for the GNU Privacy Guard,
@@ -885,19 +864,19 @@ cryptography to the contents of the clipboard.")
         (base32 "0flp9p9hlr1zfgvsy5i1nq55p7bvnhqxkxbif1lyw0cq6iblxhgr"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("kcodecs" ,kcodecs)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kemoticons" ,kemoticons)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("kpimtextedit" ,kpimtextedit)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kxmlgui" ,kxmlgui)
-       ("qtbase" ,qtbase-5)))
+     (list kcodecs
+           kcompletion
+           kconfig
+           kcoreaddons
+           kemoticons
+           kiconthemes
+           kio
+           kpimtextedit
+           ktextwidgets
+           kxmlgui
+           qtbase-5))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -924,14 +903,14 @@ cryptography to the contents of the clipboard.")
         (base32 "1x22wfzqp92mn1fy2xl89k9yjfk2vgcva0fd30i9rrqj4aw2rsma"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("cyrus-sasl" ,cyrus-sasl)
-       ("kcoreaddons" ,kcoreaddons)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kmime" ,kmime)
-       ("qtbase" ,qtbase-5)))
+     (list cyrus-sasl
+           kcoreaddons
+           ki18n
+           kio
+           kmime
+           qtbase-5))
     (home-page "https://api.kde.org/stable/kdepimlibs-apidocs/")
     (synopsis "Library for handling IMAP")
     (description "This library provides a job-based API for interacting with
@@ -955,21 +934,16 @@ easier to do so.")
         (base32 "0whlp586ycsx0qf0nr81avwscpq62w5js46z7vayy0dxkhrhfayr"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("qtbase" ,qtbase-5)))
+     (list ki18n kio kwidgetsaddons qtbase-5))
     (propagated-inputs
-     `(("cyrus-sasl" ,cyrus-sasl)
-       ("openldap" ,openldap)))
+     (list cyrus-sasl openldap))
     (home-page "https://api.kde.org/stable/kdepimlibs-apidocs/")
     (synopsis "Library for accessing LDAP")
     (description " This is a library for accessing LDAP with a convenient Qt
 style C++ API.  LDAP (Lightweight Directory Access Protocol) is an application
-protocol for querying and modifying directory services running over TCP/IP. ")
+protocol for querying and modifying directory services running over TCP/IP.")
     (license license:lgpl2.0+)))
 
 (define-public kleopatra
@@ -985,34 +959,32 @@ protocol for querying and modifying directory services running over TCP/IP. ")
         (base32 "1m50nzb2m27fkb8z3k34cv4zi2akr0fx8zn7lk5swhg49sgrip6n"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("dbus" ,dbus)
-       ("extra-cmake-modules" ,extra-cmake-modules)
-       ("gnupg" ,gnupg)  ;; TODO: Remove after gpgme uses fixed path
-       ("kdoctools" ,kdoctools)))
+     (list dbus extra-cmake-modules gnupg ;; TODO: Remove after gpgme uses fixed path
+           kdoctools))
     (inputs
-     `(("boost" ,boost)
-       ("gpgme" ,gpgme)
-       ("kcmutils" ,kcmutils)
-       ("kcodecs" ,kcodecs)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kitemmodels" ,kitemmodels)
-       ("kmime" ,kmime)
-       ("knotifications" ,knotifications)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("libassuan" ,libassuan)
-       ("libkleo" ,libkleo)
-       ("oxygen-icons" ,oxygen-icons) ;; default icon set
-       ("qgpgme" ,qgpgme)
-       ("qtbase" ,qtbase-5)))
+     (list boost
+           gpgme
+           kcmutils
+           kcodecs
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kiconthemes
+           kitemmodels
+           kmime
+           knotifications
+           ktextwidgets
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           libassuan
+           libkleo
+           oxygen-icons ;; default icon set
+           qgpgme
+           qtbase-5))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1043,67 +1015,65 @@ and retrieving certificates from LDAP servers.")
        (patches (search-patches "kmail-Fix-missing-link-libraries.patch"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("dbus" ,dbus)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules dbus kdoctools))
     (inputs
-     `(("akonadi" ,akonadi)
-       ("akonadi-contacts" ,akonadi-contacts)
-       ("akonadi-mime" ,akonadi-mime)
-       ("akonadi-search" ,akonadi-search)
-       ("boost" ,boost)
-       ("gpgme" ,gpgme)
-       ("kbookmarks" ,kbookmarks)
-       ("kcalendarcore" ,kcalendarcore)
-       ("kcalutils" ,kcalutils)
-       ("kcmutils" ,kcmutils)
-       ("kcodecs" ,kcodecs)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcontacts" ,kcontacts)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdepim-apps-libs" ,kdepim-apps-libs)
-       ("kguiaddons" ,kguiaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kidentitymanagement" ,kidentitymanagement)
-       ("kimap" ,kimap)
-       ("kio" ,kio)
-       ("kitemmodels" ,kitemmodels)
-       ("kitemviews" ,kitemviews)
-       ("kjobwidgets" ,kjobwidgets)
-       ("kldap" ,kldap)
-       ("kmailcommon" ,kmailcommon)
-       ("kmailtransport" ,kmailtransport)
-       ("kmessagelib" ,kmessagelib)
-       ("kmime" ,kmime)
-       ("kmime" ,kmime)
-       ("knotifications" ,knotifications)
-       ("knotifyconfig" ,knotifyconfig)
-       ("kontactinterface" ,kontactinterface)
-       ("kparts" ,kparts)
-       ("kpimcommon" ,kpimcommon)
-       ("kpimtextedit" ,kpimtextedit)
-       ("kservice" ,kservice)
-       ("ksyntaxhighlighting" ,ksyntaxhighlighting)
-       ("ktextwidgets" ,ktextwidgets)
-       ("ktnef" ,ktnef)
-       ("kwallet" ,kwallet)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("libgravatar" ,libgravatar)
-       ("libkdepim" ,libkdepim)
-       ("libkleo" ,libkleo)
-       ("libksieve" ,libksieve)
-       ("oxygen-icons" ,oxygen-icons) ; default icon set, required for tests
-       ("qgpgme" ,qgpgme)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtwebchannel" ,qtwebchannel)
-       ("qtwebengine" ,qtwebengine)
-       ("sonnet" ,sonnet)))
+     (list akonadi
+           akonadi-contacts
+           akonadi-mime
+           akonadi-search
+           boost
+           gpgme
+           kbookmarks
+           kcalendarcore
+           kcalutils
+           kcmutils
+           kcodecs
+           kconfig
+           kconfigwidgets
+           kcontacts
+           kcrash
+           kdbusaddons
+           kdepim-apps-libs
+           kguiaddons
+           ki18n
+           kiconthemes
+           kidentitymanagement
+           kimap
+           kio
+           kitemmodels
+           kitemviews
+           kjobwidgets
+           kldap
+           kmailcommon
+           kmailtransport
+           kmessagelib
+           kmime
+           kmime
+           knotifications
+           knotifyconfig
+           kontactinterface
+           kparts
+           kpimcommon
+           kpimtextedit
+           kservice
+           ksyntaxhighlighting
+           ktextwidgets
+           ktnef
+           kwallet
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           libgravatar
+           libkdepim
+           libkleo
+           libksieve
+           oxygen-icons ; default icon set, required for tests
+           qgpgme
+           qtbase-5
+           qtdeclarative
+           qtwebchannel
+           qtwebengine
+           sonnet))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1138,50 +1108,47 @@ manager from KDE.")
     (properties `((upstream-name . "mailcommon")))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("dbus" ,dbus)
-       ("gnupg" ,gnupg)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules dbus gnupg qttools))
     (inputs
-     `(("akonadi" ,akonadi)
-       ("akonadi-contacts" ,akonadi-contacts)
-       ("akonadi-mime" ,akonadi-mime)
-       ("boost" ,boost)
-       ("gpgme" ,gpgme)
-       ("karchive" ,karchive)
-       ("kcodecs" ,kcodecs)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcontacts" ,kcontacts)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdesignerplugin" ,kdesignerplugin)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kidentitymanagement" ,kidentitymanagement)
-       ("kimap" ,kimap)
-       ("kio" ,kio)
-       ("kitemmodels" ,kitemmodels)
-       ("kitemviews" ,kitemviews)
-       ("kldap" ,kldap)
-       ("kmailimporter" ,kmailimporter)
-       ("kmailtransport" ,kmailtransport)
-       ("kmessagelib" ,kmessagelib)
-       ("kmime" ,kmime)
-       ("kpimcommon" ,kpimcommon)
-       ("kpimtextedit" ,kpimtextedit)
-       ("ksyntaxhighlighting" ,ksyntaxhighlighting)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwallet" ,kwallet)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdepim" ,libkdepim)
-       ("libkleo" ,libkleo)
-       ("libxslt" ,libxslt)
-       ("phonon" ,phonon)
-       ("qgpgme" ,qgpgme)
-       ("qtbase" ,qtbase-5)))
+     (list akonadi
+           akonadi-contacts
+           akonadi-mime
+           boost
+           gpgme
+           karchive
+           kcodecs
+           kcompletion
+           kconfig
+           kconfigwidgets
+           kcontacts
+           kdbusaddons
+           kdesignerplugin
+           ki18n
+           kiconthemes
+           kidentitymanagement
+           kimap
+           kio
+           kitemmodels
+           kitemviews
+           kldap
+           kmailimporter
+           kmailtransport
+           kmessagelib
+           kmime
+           kpimcommon
+           kpimtextedit
+           ksyntaxhighlighting
+           ktextwidgets
+           kwallet
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           libkdepim
+           libkleo
+           libxslt
+           phonon
+           qgpgme
+           qtbase-5))
     (arguments
      `(#:tests? #f))  ;; TODO: 4/56 tests fail, even with "offscreen" and dbus
     (home-page "https://invent.kde.org/pim/mailcommon")
@@ -1205,24 +1172,24 @@ dealing with email.")
     (properties `((upstream-name . "mailimporter")))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("akonadi" ,akonadi)
-       ("akonadi-mime" ,akonadi-mime)
-       ("boost" ,boost)
-       ("karchive" ,karchive)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kitemmodels" ,kitemmodels)
-       ("kmime" ,kmime)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdepim" ,libkdepim)
-       ("qtbase" ,qtbase-5)))
+     (list akonadi
+           akonadi-mime
+           boost
+           karchive
+           kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kdbusaddons
+           ki18n
+           kio
+           kitemmodels
+           kmime
+           kxmlgui
+           libkdepim
+           qtbase-5))
     (home-page "https://invent.kde.org/pim/mailimporter")
     (synopsis "KDE mail importer library")
     (description "This package provides libraries for importing mails other
@@ -1243,27 +1210,26 @@ e-mail client programs into KMail and KDE PIM.")
         (base32 "1swqlgzxzlqffm119sbhszy9lr93m8lzwygr0q4raa660b6yiavm"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("akonadi" ,akonadi)
-       ("akonadi-mime" ,akonadi-mime)
-       ("boost" ,boost)
-       ("cyrus-sasl" ,cyrus-sasl)
-       ("kcalendarcore" ,kcalendarcore)
-       ("kcmutils" ,kcmutils)
-       ("kcontacts" ,kcontacts)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("ki18n" ,ki18n)
-       ("kitemmodels" ,kitemmodels)
-       ("kio" ,kio)
-       ("kmime" ,kmime)
-       ("ksmtp" ,ksmtp)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwallet" ,kwallet)
-       ("libkgapi" ,libkgapi)
-       ("qtbase" ,qtbase-5)))
+     (list akonadi
+           akonadi-mime
+           boost
+           cyrus-sasl
+           kcalendarcore
+           kcmutils
+           kcontacts
+           kdbusaddons
+           kconfigwidgets
+           ki18n
+           kitemmodels
+           kio
+           kmime
+           ksmtp
+           ktextwidgets
+           kwallet
+           libkgapi
+           qtbase-5))
     (arguments
      `(#:tests? #f)) ;; TODO - 3/3 tests fail, require drkonqi
     (home-page "https://api.kde.org/stable/kdepimlibs-apidocs/")
@@ -1285,11 +1251,9 @@ mail transport.")
         (base32 "03cny38v4y1lmcrs6d34hbj9assqgf51rqryf5rdzkiaq79c1krc"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("kcodecs" ,kcodecs)
-       ("kmime" ,kmime)
-       ("qtbase" ,qtbase-5)))
+     (list kcodecs kmime qtbase-5))
     (home-page "https://api.kde.org/stable/kdepimlibs-apidocs/")
     (synopsis "Library for handling mbox mailboxes")
     (description "This is a library for handling mailboxes in mbox format,
@@ -1310,61 +1274,59 @@ using a Qt/KMime C++ API.")
     (properties `((upstream-name . "messagelib")))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("gnupg" ,gnupg)
-       ("libxml2" ,libxml2)))
+     (list extra-cmake-modules gnupg libxml2))
     (inputs
-     `(("akonadi" ,akonadi)
-       ("akonadi-contacts" ,akonadi-contacts)
-       ("akonadi-mime" ,akonadi-mime)
-       ("akonadi-notes" ,akonadi-notes)
-       ("akonadi-search" ,akonadi-search)
-       ("boost" ,boost)
-       ("gpgme" ,gpgme)
-       ("grantlee" ,grantlee)
-       ("grantleetheme" ,grantleetheme)
-       ("karchive" ,karchive)
-       ("kcalendarcore" ,kcalendarcore)
-       ("kcodecs" ,kcodecs)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcontacts" ,kcontacts)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdepim-apps-libs" ,kdepim-apps-libs)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kidentitymanagement" ,kidentitymanagement)
-       ("kimap" ,kimap)
-       ("kio" ,kio)
-       ("kitemmodels" ,kitemmodels)
-       ("kitemviews" ,kitemviews)
-       ("kjobwidgets" ,kjobwidgets)
-       ("kldap" ,kldap)
-       ("kmailtransport" ,kmailtransport)
-       ("kmbox" ,kmbox)
-       ("kmime" ,kmime)
-       ("knewstuff" ,knewstuff)
-       ("kpimcommon" ,kpimcommon)
-       ("kpimtextedit" ,kpimtextedit)
-       ("kservice" ,kservice)
-       ("ksyntaxhighlighting" ,ksyntaxhighlighting)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwallet" ,kwallet)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("libgravatar" ,libgravatar)
-       ("libkdepim" ,libkdepim)
-       ("libkleo" ,libkleo)
-       ("qca" ,qca)
-       ("qgpgme" ,qgpgme)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtwebchannel" ,qtwebchannel)
-       ("qtwebengine" ,qtwebengine)
-       ("qtwebkit" ,qtwebkit)
-       ("sonnet" ,sonnet)))
+     (list akonadi
+           akonadi-contacts
+           akonadi-mime
+           akonadi-notes
+           akonadi-search
+           boost
+           gpgme
+           grantlee
+           grantleetheme
+           karchive
+           kcalendarcore
+           kcodecs
+           kcompletion
+           kconfig
+           kconfigwidgets
+           kcontacts
+           kdbusaddons
+           kdepim-apps-libs
+           ki18n
+           kiconthemes
+           kidentitymanagement
+           kimap
+           kio
+           kitemmodels
+           kitemviews
+           kjobwidgets
+           kldap
+           kmailtransport
+           kmbox
+           kmime
+           knewstuff
+           kpimcommon
+           kpimtextedit
+           kservice
+           ksyntaxhighlighting
+           ktextwidgets
+           kwallet
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           libgravatar
+           libkdepim
+           libkleo
+           qca
+           qgpgme
+           qtbase-5
+           qtdeclarative
+           qtwebchannel
+           qtwebengine
+           qtwebkit
+           sonnet))
     (arguments
      `(#:tests? #f     ;TODO many test fail for quite different reasons
        #:phases (modify-phases %standard-phases
@@ -1373,10 +1335,9 @@ using a Qt/KMime C++ API.")
                       ;; FIXME: One of the compilation steps fail to find
                       ;; <Libkdepim/MultiplyingLine> without this hack.
                       (setenv "CPLUS_INCLUDE_PATH"
-                              (string-append (assoc-ref inputs "libkdepim")
-                                             "/include/KF5:"
-                                             (or (getenv "CPLUS_INCLUDE_PATH") "")))
-                      #t)))))
+                              (string-append
+                               (search-input-directory inputs "include/KF5")
+                               ":" (or (getenv "CPLUS_INCLUDE_PATH") ""))))))))
     (home-page "https://invent.kde.org/pim/messagelib")
     (synopsis "KDE PIM messaging libraries")
     (description "This package provides several libraries for messages,
@@ -1398,11 +1359,9 @@ kwebengineviewer.")
         (base32 "1dkdxfr1ry10qyql5sp1ai4li11f0ncf9hipg27j59y70mlyrl2r"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("kcodecs" ,kcodecs)
-       ("ki18n" ,ki18n)
-       ("qtbase" ,qtbase-5)))
+     (list kcodecs ki18n qtbase-5))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1436,51 +1395,50 @@ information in non-ASCII character sets.")
         (base32 "13h4n7fb5p6g1f5kmw6pblpd76j904psm30s3a5d3kykni57dijx"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("libxslt" ,libxslt)))
+     (list extra-cmake-modules libxslt))
     (inputs
-     `(("akonadi" ,akonadi)
-       ("akonadi-contacts" ,akonadi-contacts)
-       ("akonadi-mime" ,akonadi-mime)
-       ("akonadi-notes" ,akonadi-notes)
-       ("akonadi-search" ,akonadi-search)
-       ("boost" ,boost)
-       ("grantlee" ,grantlee)
-       ("grantleetheme" ,grantleetheme)
-       ("kcalendarcore" ,kcalendarcore)
-       ("kcalutils" ,kcalutils)
-       ("kcmutils" ,kcmutils)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcontacts" ,kcontacts)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdnssd" ,kdnssd)
-       ("kdoctools" ,kdoctools)
-       ("kglobalaccel" ,kglobalaccel)
-       ("kiconthemes" ,kiconthemes)
-       ("kimap" ,kimap)
-       ("kitemmodels" ,kitemmodels)
-       ("kitemviews" ,kitemviews)
-       ("kmime" ,kmime)
-       ("kmime" ,kmime)
-       ("knewstuff" ,knewstuff)
-       ("knotifications" ,knotifications)
-       ("knotifyconfig" ,knotifyconfig)
-       ("kontactinterface" ,kontactinterface)
-       ("kparts" ,kparts)
-       ("kpimcommon" ,kpimcommon)
-       ("kpimtextedit" ,kpimtextedit)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdepim" ,libkdepim)
-       ("oxygen-icons" ,oxygen-icons) ; default icon set, required for tests
-       ("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)))
+     (list akonadi
+           akonadi-contacts
+           akonadi-mime
+           akonadi-notes
+           akonadi-search
+           boost
+           grantlee
+           grantleetheme
+           kcalendarcore
+           kcalutils
+           kcmutils
+           kcompletion
+           kconfig
+           kconfigwidgets
+           kcontacts
+           kcoreaddons
+           kcrash
+           kdnssd
+           kdoctools
+           kglobalaccel
+           kiconthemes
+           kimap
+           kitemmodels
+           kitemviews
+           kmime
+           kmime
+           knewstuff
+           knotifications
+           knotifyconfig
+           kontactinterface
+           kparts
+           kpimcommon
+           kpimtextedit
+           ktextwidgets
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           kxmlgui
+           libkdepim
+           oxygen-icons ; default icon set, required for tests
+           qtbase-5
+           qtx11extras))
     (home-page "https://kontact.kde.org/components/knotes.html")
     (synopsis "Note-taking utility")
     (description "KNotes lets you write the computer equivalent of sticky
@@ -1509,15 +1467,15 @@ Features:
         (base32 "0s1qm1wjkvbb1film94r7g88d8vgh26bm0hm6gpyqv5bazw5qx3j"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("kcoreaddons" ,kcoreaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kparts" ,kparts)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("qtbase" ,qtbase-5)))
+     (list kcoreaddons
+           ki18n
+           kiconthemes
+           kparts
+           kwindowsystem
+           kxmlgui
+           qtbase-5))
     (home-page "https://api.kde.org/stable/kdepimlibs-apidocs/")
     (synopsis "Kontact interface library")
     (description " This library provides the glue necessary for
@@ -1537,58 +1495,55 @@ application \"Parts\" to be embedded as a Kontact component (or plugin).")
         (base32 "04lz3ldrr0lpy9zpsg9ja1i9gxzlcjpqcwn3g7l4jjdky4frcr2r"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("dbus" ,dbus)
-       ("qttools" ,qttools)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules dbus qttools kdoctools))
     (inputs
-     `(("akonadi" ,akonadi)
-       ("akonadi-calendar" ,akonadi-calendar)
-       ("akonadi-contacts" ,akonadi-contacts)
-       ("akonadi-mime" ,akonadi-mime)
-       ("akonadi-notes" ,akonadi-notes)
-       ("akonadi-search" ,akonadi-search)
-       ("boost" ,boost)
-       ("kcalendarcore" ,kcalendarcore)
-       ("kcalendarsupport" ,kcalendarsupport)
-       ("kcalutils" ,kcalutils)
-       ("kcmutils" ,kcmutils)
-       ("kcodecs" ,kcodecs)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcontacts" ,kcontacts)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdepim-apps-libs" ,kdepim-apps-libs)
-       ("keventviews" ,keventviews)
-       ("kholidays" ,kholidays)
-       ("kiconthemes" ,kiconthemes)
-       ("kidentitymanagement" ,kidentitymanagement)
-       ("kimap" ,kimap)
-       ("kincidenceeditor" ,kincidenceeditor)
-       ("kitemmodels" ,kitemmodels)
-       ("kitemviews" ,kitemviews)
-       ("kjobwidgets" ,kjobwidgets)
-       ("kldap" ,kldap)
-       ("kmailtransport" ,kmailtransport)
-       ("kmime" ,kmime)
-       ("knewstuff" ,knewstuff)
-       ("knotifications" ,knotifications)
-       ("kontactinterface" ,kontactinterface)
-       ("kparts" ,kparts)
-       ("kpimcommon" ,kpimcommon)
-       ("kpimtextedit" ,kpimtextedit)
-       ("kservice" ,kservice)
-       ("kwallet" ,kwallet)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdepim" ,libkdepim)
-       ("oxygen-icons" ,oxygen-icons) ; default icon set, required for tests
-       ("phonon" ,phonon)
-       ("qtbase" ,qtbase-5)))
+     (list akonadi
+           akonadi-calendar
+           akonadi-contacts
+           akonadi-mime
+           akonadi-notes
+           akonadi-search
+           boost
+           kcalendarcore
+           kcalendarsupport
+           kcalutils
+           kcmutils
+           kcodecs
+           kcompletion
+           kconfig
+           kconfigwidgets
+           kcontacts
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           kdepim-apps-libs
+           keventviews
+           kholidays
+           kiconthemes
+           kidentitymanagement
+           kimap
+           kincidenceeditor
+           kitemmodels
+           kitemviews
+           kjobwidgets
+           kldap
+           kmailtransport
+           kmime
+           knewstuff
+           knotifications
+           kontactinterface
+           kparts
+           kpimcommon
+           kpimtextedit
+           kservice
+           kwallet
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           libkdepim
+           oxygen-icons ; default icon set, required for tests
+           phonon
+           qtbase-5))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1640,11 +1595,9 @@ and exchanging calendar data, vCalendar and iCalendar.")
                       (setenv "HOME" "/tmp")
                       #t)))))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("kcontacts" ,kcontacts)
-       ("kpeople" ,kpeople)
-       ("qtbase" ,qtbase-5)))
+     (list kcontacts kpeople qtbase-5))
     (home-page "https://invent.kde.org/pim/kpeoplevcard")
     (synopsis "Expose vCard contacts to KPeople")
     (description
@@ -1666,44 +1619,43 @@ Virtual Contact File}) files to the KPeople contact management library.")
     (properties `((upstream-name . "pimcommon")))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules qttools))
     (inputs
-     `(("karchive" ,karchive)
-       ("akonadi" ,akonadi)
-       ("akonadi-contacts" ,akonadi-contacts)
-       ("akonadi-mime" ,akonadi-mime)
-       ("boost" ,boost)
-       ("grantlee" ,grantlee)
-       ;; TODO: ("kaccounts" ,kaccounts)
-       ("kcodecs" ,kcodecs)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcontacts" ,kcontacts)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kdesignerplugin" ,kdesignerplugin)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kimap" ,kimap)
-       ("kio" ,kio)
-       ("kirigami" ,kirigami) ;; run-time dependency
-       ("kitemmodels" ,kitemmodels)
-       ("kitemviews" ,kitemviews)
-       ("kjobwidgets" ,kjobwidgets)
-       ("kmime" ,kmime)
-       ("knewstuff" ,knewstuff)
-       ("kpimtextedit" ,kpimtextedit)
-       ("kservice" ,kservice)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwallet" ,kwallet)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdepim" ,libkdepim)
-       ("libxslt" ,libxslt)
-       ("purpose" ,purpose)
-       ("qtbase" ,qtbase-5)
-       ("qtwebengine" ,qtwebengine)))
+     (list karchive
+           akonadi
+           akonadi-contacts
+           akonadi-mime
+           boost
+           grantlee
+           ;; TODO: ("kaccounts" ,kaccounts)
+           kcodecs
+           kconfig
+           kconfigwidgets
+           kcontacts
+           kcoreaddons
+           kdesignerplugin
+           ki18n
+           kiconthemes
+           kimap
+           kio
+           kirigami ;; run-time dependency
+           kitemmodels
+           kitemviews
+           kjobwidgets
+           kmime
+           knewstuff
+           kpimtextedit
+           kservice
+           ktextwidgets
+           kwallet
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           libkdepim
+           libxslt
+           purpose
+           qtbase-5
+           qtwebengine))
     (arguments
      `(#:tests? #f)) ;; TODO tests hang
     (home-page "https://invent.kde.org/pim/pimcommon")
@@ -1725,25 +1677,24 @@ Virtual Contact File}) files to the KPeople contact management library.")
         (base32 "0j6d4sv405c3x0ww75qsww94apidsb8aaqf59akhv96zmv0vx5wy"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules qttools))
     (inputs
-     `(("grantlee" ,grantlee)
-       ("kcodecs" ,kcodecs)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kdesignerplugin" ,kdesignerplugin)
-       ("kemoticons" ,kemoticons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("ksyntaxhighlighting" ,ksyntaxhighlighting)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("qtbase" ,qtbase-5)
-       ("qtspeech" ,qtspeech)
-       ("sonnet" ,sonnet)))
+     (list grantlee
+           kcodecs
+           kconfigwidgets
+           kcoreaddons
+           kdesignerplugin
+           kemoticons
+           ki18n
+           kiconthemes
+           kio
+           ksyntaxhighlighting
+           ktextwidgets
+           kwidgetsaddons
+           kxmlgui
+           qtbase-5
+           qtspeech
+           sonnet))
     (arguments
      `(#:tests? #f)) ;; TODO - test suite hangs
     (home-page "https://api.kde.org/stable/kdepimlibs-apidocs/")
@@ -1767,15 +1718,15 @@ text in the text edit to all kinds of markup, like HTML or BBCODE.")
         (base32 "1xyaahibm0dc3qdwiak5yqa66szxaxnylvqxi6k21ayvzn2vxbhx"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("cyrus-sasl" ,cyrus-sasl)
-       ("kcodecs" ,kcodecs)
-       ("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("qtbase" ,qtbase-5)))
+     (list cyrus-sasl
+           kcodecs
+           kconfig
+           kcoreaddons
+           ki18n
+           kio
+           qtbase-5))
     (arguments
      `(#:tests? #f ;; TODO: does not find sasl mechs
        #:phases
@@ -1807,16 +1758,16 @@ standard protocols for e-mail transmission.")
         (base32 "0cn5p32w2kas56yyc15c22kll4hd02lvvxz2n6cz1wda8alspj19"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("kcalendarcore" ,kcalendarcore)
-       ("kcalutils" ,kcalutils)
-       ("kcodecs" ,kcodecs)
-       ("kconfig" ,kconfig)
-       ("kcontacts" ,kcontacts)
-       ("kcoreaddons" ,kcoreaddons)
-       ("ki18n" ,ki18n)
-       ("qtbase" ,qtbase-5)))
+     (list kcalendarcore
+           kcalutils
+           kcodecs
+           kconfig
+           kcontacts
+           kcoreaddons
+           ki18n
+           qtbase-5))
     (home-page "https://api.kde.org/stable/kdepimlibs-apidocs/ktnef/html/")
     (synopsis "Library for handling mail attachments using TNEF format")
     (description "Ktnef is a library for handling data in the TNEF
@@ -1839,35 +1790,34 @@ and allows one to view/extract message formatted text in Rich Text Format.")
         (base32 "0bask561laxgkgm3rxfpyxqs6jx1l9xjk058lhycq0pik6vwhdha"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules qttools))
     (inputs
-     `(("akonadi" ,akonadi)
-       ("akonadi-contacts" ,akonadi-contacts)
-       ("akonadi-mime" ,akonadi-mime)
-       ("akonadi-search" ,akonadi-search)
-       ("boost" ,boost)
-       ("kcmutils" ,kcmutils)
-       ("kcodecs" ,kcodecs)
-       ("kcalendarcore" ,kcalendarcore)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcontacts" ,kcontacts)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdesignerplugin" ,kdesignerplugin)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("kitemmodels" ,kitemmodels)
-       ("kitemviews" ,kitemviews)
-       ("kjobwidgets" ,kjobwidgets)
-       ("kldap" ,kldap)
-       ("kmime" ,kmime)
-       ("kwallet" ,kwallet)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("qtbase" ,qtbase-5)))
+     (list akonadi
+           akonadi-contacts
+           akonadi-mime
+           akonadi-search
+           boost
+           kcmutils
+           kcodecs
+           kcalendarcore
+           kcompletion
+           kconfig
+           kconfigwidgets
+           kcontacts
+           kcoreaddons
+           kdbusaddons
+           kdesignerplugin
+           ki18n
+           kiconthemes
+           kio
+           kitemmodels
+           kitemviews
+           kjobwidgets
+           kldap
+           kmime
+           kwallet
+           kwidgetsaddons
+           qtbase-5))
     (home-page "https://invent.kde.org/pim/libkdepim")
     (synopsis "Libraries for common KDE PIM apps")
     (description "This package provided libraries for common KDE PIM apps.")
@@ -1887,20 +1837,19 @@ and allows one to view/extract message formatted text in Rich Text Format.")
         (base32 "0nvd5fqrvyb7c3g7rf1lxbbv38q9sqnhd6irgx7awwgw92inxky4"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules qttools))
     (inputs
-     `(("cyrus-sasl" ,cyrus-sasl)
-       ("ki18n" ,ki18n)
-       ("kcontacts" ,kcontacts)
-       ("kcalendarcore" ,kcalendarcore)
-       ("kio" ,kio)
-       ("kwallet" ,kwallet)
-       ("kwindowsystem" ,kwindowsystem)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtwebchannel" ,qtwebchannel)
-       ("qtwebengine" ,qtwebengine)))
+     (list cyrus-sasl
+           ki18n
+           kcontacts
+           kcalendarcore
+           kio
+           kwallet
+           kwindowsystem
+           qtbase-5
+           qtdeclarative
+           qtwebchannel
+           qtwebengine))
     (arguments
      `(#:tests? #f)) ;; TODO 6/48 tests fail
     (home-page "https://invent.kde.org/pim/libkgapi")
@@ -1923,24 +1872,22 @@ various Google services.")
         (base32 "0rijpmqyx4mrr7csik3vkfcra7kfywk6yz548fmq3ha8wa9ax8fv"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules kdoctools qttools))
     (inputs
-     `(("boost" ,boost)
-       ("gpgme" ,gpgme)
-       ("kcodecs" ,kcodecs)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("ki18n" ,ki18n)
-       ("kitemmodels" ,kitemmodels)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kpimtextedit" ,kpimtextedit)
-       ("qgpgme" ,qgpgme)
-       ("qtbase" ,qtbase-5)))
+     (list boost
+           gpgme
+           kcodecs
+           kcompletion
+           kconfig
+           kcoreaddons
+           kcrash
+           ki18n
+           kitemmodels
+           kwidgetsaddons
+           kwindowsystem
+           kpimtextedit
+           qgpgme
+           qtbase-5))
     (home-page "https://invent.kde.org/pim/libkleo")
     (synopsis "KDE PIM cryptographic library")
     (description "@code{libkleo} is a library for Kleopatra and other parts of
@@ -1962,31 +1909,30 @@ KDE using certificate-based crypto.")
        (patches (search-patches "libksieve-Fix-missing-link-libraries.patch"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("akonadi" ,akonadi)
-       ("cyrus-sasl" ,cyrus-sasl)
-       ("karchive" ,karchive)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kidentitymanagement" ,kidentitymanagement)
-       ("kimap" ,kimap)
-       ("kio" ,kio)
-       ("kmailtransport" ,kmailtransport)
-       ("kmime" ,kmime)
-       ("knewstuff" ,knewstuff)
-       ("kpimcommon" ,kpimcommon)
-       ("kpimtextedit" ,kpimtextedit)
-       ("ksyntaxhighlighting" ,ksyntaxhighlighting)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwallet" ,kwallet)
-       ("kwindowsystem" ,kwindowsystem)
-       ("libkdepim" ,libkdepim)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtwebchannel" ,qtwebchannel)
-       ("qtwebengine" ,qtwebengine)))
+     (list akonadi
+           cyrus-sasl
+           karchive
+           ki18n
+           kiconthemes
+           kidentitymanagement
+           kimap
+           kio
+           kmailtransport
+           kmime
+           knewstuff
+           kpimcommon
+           kpimtextedit
+           ksyntaxhighlighting
+           ktextwidgets
+           kwallet
+           kwindowsystem
+           libkdepim
+           qtbase-5
+           qtdeclarative
+           qtwebchannel
+           qtwebengine))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
diff --git a/gnu/packages/kde-plasma.scm b/gnu/packages/kde-plasma.scm
index b7a2b14f65..5621d8ea35 100644
--- a/gnu/packages/kde-plasma.scm
+++ b/gnu/packages/kde-plasma.scm
@@ -25,6 +25,7 @@
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix gexp)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system qt)
   #:use-module (gnu packages compression)
@@ -60,23 +61,22 @@
     ;; - kwin-style-breeze
     ;; - qml-module-qtquick-controls-styles-breeze - QtQuick style
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules pkg-config))
     (inputs
-     `(("kcmutils" ,kcmutils) ; optional
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kde-frameworkintegration" ,kde-frameworkintegration) ; optional
-       ("kdecoration" ,kdecoration)
-       ("kguiaddons" ,kguiaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes) ; for optional kde-frameworkintegration
-       ("kpackage" ,kpackage)
-       ("kwayland" ,kwayland) ; optional
-       ("kwindowsystem" ,kwindowsystem)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative) ; optional
-       ("qtx11extras" ,qtx11extras)))
+     (list kcmutils ; optional
+           kconfigwidgets
+           kcoreaddons
+           kde-frameworkintegration ; optional
+           kdecoration
+           kguiaddons
+           ki18n
+           kiconthemes ; for optional kde-frameworkintegration
+           kpackage
+           kwayland ; optional
+           kwindowsystem
+           qtbase-5
+           qtdeclarative ; optional
+           qtx11extras))
     (home-page "https://invent.kde.org/plasma/breeze")
     (synopsis "Default KDE Plasma theme")
     (description "Artwork, styles and assets for the Breeze visual style for
@@ -96,10 +96,9 @@ the Plasma Desktop.  Breeze is the default theme for the KDE Plasma desktop.")
                 "0pn8n7zyb0adzjnn92vmbcf7pmpss60k9k1rk5llamj016xzfgnf"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("ki18n" ,ki18n)
-       ("qtbase" ,qtbase-5)))
+     (list ki18n qtbase-5))
     (home-page "https://invent.kde.org/plasma/kdecoration")
     (synopsis "Plugin based library to create window decorations")
     (description "KDecoration is a library to create window decorations.
@@ -120,14 +119,9 @@ manager which re-parents a Client window to a window decoration frame.")
                 "1k2va2v9051f71w78dn3gihk642iyy5yzrkcfnp97fag8g6dpisi"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("kcoreaddons" ,kcoreaddons)
-       ("ki18n" ,ki18n)
-       ("kwallet" ,kwallet)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("qtbase" ,qtbase-5)))
+     (list kcoreaddons ki18n kwallet kwidgetsaddons qtbase-5))
     (home-page "https://invent.kde.org/plasma/ksshaskpass")
     (synopsis "Front-end for ssh-add using kwallet")
     (description "Ksshaskpass is a front-end for @code{ssh-add} which stores the
@@ -154,8 +148,7 @@ call it if it is not associated to a terminal.")
        (modify-phases %standard-phases
          (add-before 'check 'check-setup
            (lambda* (#:key inputs outputs #:allow-other-keys)
-             (system (string-append (assoc-ref inputs "xorg-server")
-                                   "/bin/Xvfb :1 -screen 0 640x480x24 &"))
+             (system "Xvfb :1 -screen 0 640x480x24 &")
              (setenv "DISPLAY" ":1")
              #t))
          (delete 'check)
@@ -168,11 +161,9 @@ call it if it is not associated to a terminal.")
                    (invoke "dbus-launch" "ctest" ".")))
              #t)))))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)
-       ;; For tests.
-       ("dbus" ,dbus)
-       ("xorg-server" ,xorg-server-for-tests)))
+     (list extra-cmake-modules pkg-config
+           ;; For tests.
+           dbus xorg-server-for-tests))
     (inputs
      `(("kcmutils" ,kcmutils)
        ("kcrash" ,kcrash)
@@ -215,14 +206,11 @@ call it if it is not associated to a terminal.")
         (base32 "0rf1pm0yyc069f4n5s9ipdx4glzfr9zvv5cbrmn4q9i4v6z1qd8i"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ;; For testing.
-       ("dbus" ,dbus)))
+     (list extra-cmake-modules
+           ;; For testing.
+           dbus))
     (inputs
-     `(("kwayland" ,kwayland)
-       ("libxrandr" ,libxrandr)
-       ("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)))
+     (list kwayland libxrandr qtbase-5 qtx11extras))
     (arguments
      '(#:tests? #f)) ; FIXME: 55% tests passed, 5 tests failed out of 11
     (home-page "https://community.kde.org/Solid/Projects/ScreenManagement")
@@ -244,8 +232,7 @@ basic needs and easy to configure for those who want special setups.")
        (sha256
         (base32 "1kd0h3p8bf9k5pqp0frhr81pa0yyrpkckg9zznirk9p1v88v7bfq"))))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules pkg-config))
     (inputs
      `(("kconfigwidgets" ,kconfigwidgets)
        ("kiconthemes" ,kiconthemes)
@@ -270,21 +257,22 @@ basic needs and easy to configure for those who want special setups.")
        ("zlib" ,zlib)))
     (build-system qt-build-system)
     (arguments
-     `(#:configure-flags
-       `(,(string-append "-DKDE_INSTALL_DATADIR="
-                         (assoc-ref %outputs "out") "/share"))
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'patch-cmakelists
-           (lambda _
-             ;; TODO: Verify: This should no longer be necessary, since
-             ;; KF5AuthConfig.cmake.in contains this already.
-             (substitute* "processcore/CMakeLists.txt"
-               (("KAUTH_HELPER_INSTALL_DIR") "KDE_INSTALL_LIBEXECDIR"))))
-         (replace 'check
-           (lambda _
-             ;; TODO: Fix this failing test-case
-             (invoke "ctest" "-E" "processtest"))))))
+     (list #:configure-flags
+           #~`(,(string-append "-DKDE_INSTALL_DATADIR="
+                               #$output "/share"))
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-before 'configure 'patch-cmakelists
+                 (lambda _
+                   ;; TODO: Verify: This should no longer be necessary, since
+                   ;; KF5AuthConfig.cmake.in contains this already.
+                   (substitute* "processcore/CMakeLists.txt"
+                     (("KAUTH_HELPER_INSTALL_DIR")
+                      "KDE_INSTALL_LIBEXECDIR"))))
+               (replace 'check
+                 (lambda _
+                   ;; TODO: Fix this failing test-case
+                   (invoke "ctest" "-E" "processtest"))))))
     (home-page "https://userbase.kde.org/KSysGuard")
     (synopsis "Network enabled task and system monitoring")
     (description "KSysGuard can obtain information on system load and
diff --git a/gnu/packages/kde-systemtools.scm b/gnu/packages/kde-systemtools.scm
index 86f169e819..3fab9089f3 100644
--- a/gnu/packages/kde-systemtools.scm
+++ b/gnu/packages/kde-systemtools.scm
@@ -49,34 +49,31 @@
         (base32 "0xr5s0s40i2bsfjfapvpa7dxh9s4604cxirg97xcaacd6fdvhpds"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)
-       ("ruby" ,ruby)
-       ("ruby-test-unit" ,ruby-test-unit)))
+     (list extra-cmake-modules kdoctools ruby ruby-test-unit))
     (inputs
-     `(("baloo" ,baloo)
-       ("baloo-widgets" ,baloo-widgets)
-       ("kactivities" ,kactivities)
-       ("kbookmarks" ,kbookmarks)
-       ("kcmutils" ,kcmutils)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kinit" ,kinit)
-       ("kio" ,kio)
-       ("knewstuff" ,knewstuff)
-       ("knotifications" ,knotifications)
-       ("kparts" ,kparts)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwindowsystem" ,kwindowsystem)
-       ("oxygen-icons" ,oxygen-icons) ;; default icon set
-       ("phonon" ,phonon)
-       ("qtbase" ,qtbase-5)
-       ("solid" ,solid)))
+     (list baloo
+           baloo-widgets
+           kactivities
+           kbookmarks
+           kcmutils
+           kcompletion
+           kconfig
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kiconthemes
+           kinit
+           kio
+           knewstuff
+           knotifications
+           kparts
+           ktextwidgets
+           kwindowsystem
+           oxygen-icons ;; default icon set
+           phonon
+           qtbase-5
+           solid))
     (arguments
      `(#:tests? #f)) ;; TODO: 4/15 tests fail even with offscreen
     (home-page "https://kde.org/applications/system/org.kde.dolphin")
@@ -108,15 +105,15 @@ The main features of Dolphin are:
         (base32 "12g44s6g7ma6avp15l45l42qyzbglswvahm2wji79zdls5vjnz7r"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("dolphin" ,dolphin)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("ktexteditor" ,ktexteditor)
-       ("kxmlgui" ,kxmlgui)
-       ("oxygen-icons" ,oxygen-icons) ;; default icon set
-       ("qtbase" ,qtbase-5)))
+     (list dolphin
+           ki18n
+           kio
+           ktexteditor
+           kxmlgui
+           oxygen-icons ;; default icon set
+           qtbase-5))
     (home-page "http://www.kde.org/")
     (synopsis "VCS-Plugins for Dolphin")
     (description "This package contains plugins that offer integration in
@@ -136,28 +133,27 @@ Dolphin with the version control systems: Bzr, Git, Mercurial, Subversion.")
         (base32 "0wxzjragvjcfc7c4qja8wzpshhaywficj7f7wkmppzybcsxwn9qb"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("grantlee" ,grantlee)
-       ("karchive" ,karchive)
-       ("kbookmarks" ,kbookmarks)
-       ("kcodecs" ,kcodecs)
-       ("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kdbusaddons" ,kdbusaddons)
-       ("khtml" ,khtml)
-       ("ki18n" ,ki18n)
-       ("kinit" ,kinit)
-       ("kio" ,kio)
-       ("kjs" ,kjs)
-       ("kparts" ,kparts)
-       ("kservice" ,kservice)
-       ("kwindowsystem" ,kwindowsystem)
-       ("libxml2" ,libxml2)
-       ("oxygen-icons" ,oxygen-icons) ;; default icon set
-       ("qtbase" ,qtbase-5)
-       ("xapian" ,xapian)))
+     (list grantlee
+           karchive
+           kbookmarks
+           kcodecs
+           kconfig
+           kcoreaddons
+           kdbusaddons
+           khtml
+           ki18n
+           kinit
+           kio
+           kjs
+           kparts
+           kservice
+           kwindowsystem
+           libxml2
+           oxygen-icons ;; default icon set
+           qtbase-5
+           xapian))
     (arguments
      `(#:tests? #f)) ;; 1/1 test fails
     (home-page "https://kde.org/applications/system/org.kde.Help")
@@ -186,35 +182,34 @@ document meta data file.")
         (base32 "0ckr7bjkyaw0gr5kx569jfnhkhwmlk4lqk41ng61qwxlb4bsdbdm"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("kbookmarks" ,kbookmarks)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kguiaddons" ,kguiaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kinit" ,kinit)
-       ("kio" ,kio)
-       ("knewstuff" ,knewstuff)
-       ("kglobalaccel" ,kglobalaccel)
-       ("knotifications" ,knotifications)
-       ("knotifyconfig" ,knotifyconfig)
-       ("kparts" ,kparts)
-       ("kpty" ,kpty)
-       ("kservice" ,kservice)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("oxygen-icons" ,oxygen-icons) ;; default icon set
-       ("qtbase" ,qtbase-5)
-       ("qtscript" ,qtscript)))
+     (list kbookmarks
+           kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           kguiaddons
+           ki18n
+           kiconthemes
+           kinit
+           kio
+           knewstuff
+           kglobalaccel
+           knotifications
+           knotifyconfig
+           kparts
+           kpty
+           kservice
+           ktextwidgets
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           oxygen-icons ;; default icon set
+           qtbase-5
+           qtscript))
     (arguments
      `(#:tests? #f)) ;; TODO: 2/15 tests fail even with HOME, offscreen, SHELL, debus
     (home-page "http://www.kde.org/")
@@ -241,31 +236,29 @@ This package is part of the KDE base applications module.")
         (base32 "092ijn88jpmgk2zwz37vzf35jisl234mc3krc9jl7bd955akx51k"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules pkg-config kdoctools))
     (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdnssd" ,kdnssd)
-       ("ki18n" ,ki18n)
-       ("knotifications" ,knotifications)
-       ("kwallet" ,kwallet)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("libvnc" ,libvnc)
-       ("libxcb" ,libxcb)
-       ("libxtst" ,libxtst)
-       ("oxygen-icons" ,oxygen-icons) ;; default icon set
-       ("pipewire" ,pipewire)
-       ("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)
-       ("xcb-util-image" ,xcb-util-image)
-       ("zlib" ,zlib)))
+     (list kcompletion
+           kconfig
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           kdnssd
+           ki18n
+           knotifications
+           kwallet
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           libvnc
+           libxcb
+           libxtst
+           oxygen-icons ;; default icon set
+           pipewire-0.3
+           qtbase-5
+           qtx11extras
+           xcb-util-image
+           zlib))
     (home-page "https://kde.org/applications/internet/org.kde.krfb")
     (synopsis "Desktop Sharing utility")
     (description "KDE Desktop Sharing is a server application that allows you
@@ -293,23 +286,22 @@ This package is part of the KDE networking module.")
         (base32 "1826h89ynvlxdwzyqil2d79cvynglww6fax7qp41wxasgarxhsni"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
      ;; Not including Journald since this is not used in guix
-     `(("karchive" ,karchive)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("kitemviews" ,kitemviews)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("oxygen-icons" ,oxygen-icons) ;; default icon set
-       ("qtbase" ,qtbase-5)))
+     (list karchive
+           kcompletion
+           kconfig
+           kcoreaddons
+           ki18n
+           kiconthemes
+           kio
+           kitemviews
+           ktextwidgets
+           kwidgetsaddons
+           kxmlgui
+           oxygen-icons ;; default icon set
+           qtbase-5))
     (home-page "https://kde.org/applications/system/org.kde.ksystemlog")
     (synopsis "System log viewer")
     (description "This program is developed for being used by beginner users,
@@ -333,29 +325,29 @@ This package is part of the KDE administration module.")
                 "02pal9xx1wbpw7dimvs2aw1xnyjqlvbjlybkkfhf8x7c6m1r63aa"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("breeze-icons" ,breeze-icons)
-       ("karchive" ,karchive)
-       ("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kglobalaccel" ,kglobalaccel)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("knewstuff" ,knewstuff)
-       ("knotifications" ,knotifications)
-       ("knotifyconfig" ,knotifyconfig)
-       ("konsole" ,konsole)
-       ("kparts" ,kparts)
-       ("kwayland" ,kwayland)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("qtx11extras" ,qtx11extras)))
+     (list breeze-icons
+           karchive
+           kconfig
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           kglobalaccel
+           ki18n
+           kiconthemes
+           kio
+           knewstuff
+           knotifications
+           knotifyconfig
+           konsole
+           kparts
+           kwayland
+           kwidgetsaddons
+           kwindowsystem
+           qtbase-5
+           qtsvg
+           qtx11extras))
     (home-page "https://www.kde.org/applications/system/yakuake/")
     (synopsis "Quad-style terminal emulator for KDE")
     (description "Yakuake is a drop-down terminal emulator based on KDE Konsole
diff --git a/gnu/packages/kde-utils.scm b/gnu/packages/kde-utils.scm
index 47e25409ee..2b3a0dd15e 100644
--- a/gnu/packages/kde-utils.scm
+++ b/gnu/packages/kde-utils.scm
@@ -77,35 +77,32 @@
                            (string-append p "/bin"))
                          (list lrzip lzop p7zip unzip zip zstd))))))))))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)
-       ("kdoctools" ,kdoctools)
-       ("xorg-server" ,xorg-server)))
+     (list extra-cmake-modules pkg-config kdoctools xorg-server))
     (inputs
-     `(("breeze-icons" ,breeze-icons)
-       ("karchive" ,karchive)
-       ("kconfig" ,kconfig)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("khtml" ,khtml)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kitemmodels" ,kitemmodels)
-       ("kparts" ,kparts)
-       ("kpty" ,kpty)
-       ("kservice" ,kservice)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("libarchive" ,libarchive)
-       ("libzip" ,libzip)
-       ("qtbase" ,qtbase-5)
-       ("zlib" ,zlib)
-       ;; Command line tools used by Ark.
-       ("lrzip" ,lrzip)
-       ("lzop" ,lzop)
-       ("p7zip" ,p7zip)
-       ("unzip" ,unzip)
-       ("zip" ,zip)
-       ("zstd" ,zstd)))
+     (list breeze-icons
+           karchive
+           kconfig
+           kcrash
+           kdbusaddons
+           khtml
+           ki18n
+           kio
+           kitemmodels
+           kparts
+           kpty
+           kservice
+           kwidgetsaddons
+           libarchive
+           libzip
+           qtbase-5
+           zlib
+           ;; Command line tools used by Ark.
+           lrzip
+           lzop
+           p7zip
+           unzip
+           zip
+           zstd))
     (home-page "https://apps.kde.org/en/ark")
     (synopsis "Graphical archiving tool")
     (description "Ark is a graphical file compression/decompression utility
@@ -126,30 +123,29 @@ well as CD-ROM images.")
         (base32 "0nrby307syrqlxrf9lwdzc9c15ifw47418qwszqwg345ma2pww7i"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("kactivities" ,kactivities)
-       ("kconfig" ,kconfig)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kguiaddons" ,kguiaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kitemmodels" ,kitemmodels)
-       ("threadweaver" ,threadweaver)
-       ("knewstuff" ,knewstuff)
-       ("kio" ,kio)
-       ("kjobwidgets" ,kjobwidgets)
-       ("kparts" ,kparts)
-       ("ktexteditor" ,ktexteditor)
-       ("kwallet" ,kwallet)
-       ("plasma-framework" ,plasma-framework)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("oxygen-icons" ,oxygen-icons) ;; default icon set
-       ("qtbase" ,qtbase-5)
-       ("qtscript" ,qtscript)))
+     (list kactivities
+           kconfig
+           kcrash
+           kdbusaddons
+           kguiaddons
+           ki18n
+           kiconthemes
+           kitemmodels
+           threadweaver
+           knewstuff
+           kio
+           kjobwidgets
+           kparts
+           ktexteditor
+           kwallet
+           plasma-framework
+           kwindowsystem
+           kxmlgui
+           oxygen-icons ;; default icon set
+           qtbase-5
+           qtscript))
     (arguments
      `(#:tests? #f ;; 2/7 tests fail
        #:phases
@@ -193,15 +189,14 @@ Kate's features include:
        (base32 "18lk8i2r90gvw8q5j179xgpniih92mwk06krk7w4jv98yinqf6m5"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kxmlgui" ,kxmlgui)
-       ("oxygen-icons" ,oxygen-icons) ;; default icon set
-       ;; TODO: QAccessibilityClient - libqaccessibilityclien
-       ("qtbase" ,qtbase-5)))
+     (list ki18n
+           kio
+           kxmlgui
+           oxygen-icons ;; default icon set
+           ;; TODO: QAccessibilityClient - libqaccessibilityclien
+           qtbase-5))
     (home-page "https://kde.org/applications/utilities/org.kde.kmag")
     (synopsis "Screen magnifier tool")
     (description "You can use KMagnifier to magnify a part of the screen just
@@ -224,23 +219,22 @@ artists to web-designers to people with low vision.")
         (base32 "01j6bx8zihns4ip8maj0gb3w3bhx1ha2ljhfmsm6lcyay531ay98"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("kauth" ,kauth)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("knotifications" ,knotifications)
-       ("kxmlgui" ,kxmlgui)
-       ("kwindowsystem" ,kwindowsystem)
-       ("libxtst" ,libxtst)
-       ("libxt" ,libxt)
-       ("phonon" ,phonon)
-       ("oxygen-icons" ,oxygen-icons) ;; default icon set
-       ("qtbase" ,qtbase-5)))
+     (list kauth
+           kcoreaddons
+           kconfigwidgets
+           kdbusaddons
+           ki18n
+           kiconthemes
+           knotifications
+           kxmlgui
+           kwindowsystem
+           libxtst
+           libxt
+           phonon
+           oxygen-icons ;; default icon set
+           qtbase-5))
     (home-page "https://kde.org/applications/utilities/org.kde.kmousetool")
     (synopsis "Automatic mouse click and mouse manipulation tool for the
 disabled")
@@ -263,21 +257,20 @@ whom pressing buttons hurts.")
         (base32 "1afgxlys9mvmc3rd33g7gchfb0ylx83x3x0a0qf3dra6cpgsgcg7"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("oxygen-icons" ,oxygen-icons) ;; default icon set
-       ("qtbase" ,qtbase-5)
-       ("qtspeech" ,qtspeech)))
+     (list kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           ki18n
+           kio
+           kwidgetsaddons
+           kxmlgui
+           oxygen-icons ;; default icon set
+           qtbase-5
+           qtspeech))
     (home-page "https://kde.org/applications/utilities/org.kde.kmouth")
     (synopsis "Type-and-say frontend for speech synthesizers")
     (description "KMouth is a program which enables persons that cannot speak
@@ -303,19 +296,18 @@ sentences to be re-spoken.")
         (base32 "05hs8729a3aqjpwmn2xdf2sriacrll4sj4ax3lm4s1ravj09n9bm"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("kauth" ,kauth)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("ki18n" ,ki18n)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("oxygen-icons" ,oxygen-icons) ;; default icon set
-       ("qtbase" ,qtbase-5)))
+     (list kauth
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           ki18n
+           kwidgetsaddons
+           kxmlgui
+           oxygen-icons ;; default icon set
+           qtbase-5))
     (home-page "https://kde.org/applications/utilities/org.kde.kronometer")
     (synopsis "Simple stopwatch application")
     (description "Kronometer is a stopwatch application.  It features the
@@ -337,31 +329,30 @@ to save the times and resume them later.")
         (base32 "02b1jz5a7cjr13v6c7fczrhs1xmg1krnva5fxk8x2bf4nd1rm8s1"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("karchive" ,karchive)
-       ("kbookmarks" ,kbookmarks)
-       ("kcodecs" ,kcodecs)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kguiaddons" ,kguiaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("kitemviews" ,kitemviews)
-       ("knotifications" ,knotifications)
-       ("kparts" ,kparts)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwallet" ,kwallet)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("oxygen-icons" ,oxygen-icons) ;; default icon set
-       ("qtbase" ,qtbase-5)
-       ("solid" ,solid)
-       ("zlib" ,zlib)))
+     (list karchive
+           kbookmarks
+           kcodecs
+           kcompletion
+           kconfig
+           kcoreaddons
+           kguiaddons
+           ki18n
+           kiconthemes
+           kio
+           kitemviews
+           knotifications
+           kparts
+           ktextwidgets
+           kwallet
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           oxygen-icons ;; default icon set
+           qtbase-5
+           solid
+           zlib))
     (home-page "https://www.krusader.org")
     (synopsis "Twin-panel (commander-style) file manager")
     (description "Krusader is a simple, easy, yet powerful,
@@ -392,14 +383,9 @@ great on your desktop.")
         (base32 "1q6blvcqz6hxdfrkdi0fplmz7rmk3im56kpp68r0yrivhx3hn8sc"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules kdoctools pkg-config))
     (inputs
-     `(("ktexteditor" ,ktexteditor)
-       ("imagemagick" ,imagemagick)
-       ("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)))
+     (list ktexteditor imagemagick qtbase-5 qtx11extras))
     (home-page "https://kde.org/applications/en/graphics/org.kde.kxstitch")
     (synopsis "Create and print cross stitch patterns")
     (description
@@ -421,30 +407,27 @@ either be created or generated from a image.")
         (base32 "03wsv83l1cay2dpcsksad124wzan7kh8zxdw1h0yicn398kdbck4"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)
-       ("qttools" ,qttools)
-       ("shared-mime-info" ,shared-mime-info)))
+     (list extra-cmake-modules kdoctools qttools shared-mime-info))
     (inputs
-     `(("kbookmarks" ,kbookmarks)
-       ("kcmutils" ,kcmutils)
-       ("kcodecs" ,kcodecs)
-       ("kcrash" ,kcrash)
-       ("kcompletion" ,kcompletion)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("knewstuff" ,knewstuff)
-       ("kparts" ,kparts)
-       ("kservice" ,kservice)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("oxygen-icons" ,oxygen-icons) ;; default icon set
-       ("qca" ,qca)
-       ("qtbase" ,qtbase-5)
-       ("qtscript" ,qtscript)))
+     (list kbookmarks
+           kcmutils
+           kcodecs
+           kcrash
+           kcompletion
+           kconfigwidgets
+           kdbusaddons
+           ki18n
+           kiconthemes
+           kio
+           knewstuff
+           kparts
+           kservice
+           kwidgetsaddons
+           kxmlgui
+           oxygen-icons ;; default icon set
+           qca
+           qtbase-5
+           qtscript))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -483,25 +466,24 @@ redone.")
         (base32 "0yjv5awngi2hk6xzlwzmj92i6qppnfc0inqdp16rd8gzfpw7xqqw"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("kauth" ,kauth)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kidletime" ,kidletime)
-       ("knotifications" ,knotifications)
-       ("knotifyconfig" ,knotifyconfig)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("oxygen-icons" ,oxygen-icons) ;; default icon set
-       ("qtbase" ,qtbase-5)))
+     (list kauth
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kiconthemes
+           kidletime
+           knotifications
+           knotifyconfig
+           ktextwidgets
+           kwindowsystem
+           kxmlgui
+           oxygen-icons ;; default icon set
+           qtbase-5))
     (home-page "https://kde.org/applications/utilities/org.kde.rsibreak")
     (synopsis "Assists in the Recovery and Prevention of Repetitive Strain
 Injury")
@@ -524,33 +506,32 @@ remind you to take a break now and then.")
         (base32 "0hz6nfd845bykf78s4g2qs77szl96gy6g8rpg44pqd39a0k0xbh7"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("kauth" ,kauth)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcompletion" ,kcompletion)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("kjobwidgets" ,kjobwidgets)
-       ("knotifications" ,knotifications)
-       ("knotifyconfig" ,knotifyconfig)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwallet" ,kwallet)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("libsmbclient" ,samba)
-       ("oxygen-icons" ,oxygen-icons) ;; default icon set
-       ("plasma-framework" ,plasma-framework)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("solid" ,solid)))
+     (list kauth
+           kconfig
+           kconfigwidgets
+           kcompletion
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kiconthemes
+           kio
+           kjobwidgets
+           knotifications
+           knotifyconfig
+           ktextwidgets
+           kwallet
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           samba
+           oxygen-icons ;; default icon set
+           plasma-framework
+           qtbase-5
+           qtdeclarative
+           solid))
     (home-page "https://kde.org/applications/utilities/org.kde.smb4k")
     (synopsis "Samba (SMB) share advanced browser")
     (description "Smb4K is an network neighborhood browser for the KDE
@@ -596,21 +577,20 @@ Features:
         (base32 "1az3c2khnh51bbmqpamj4p26d3a0ff4l5rd3vcrylg94mk7wgh59"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("kactivities-stats" ,kactivities-stats)
-       ("kbookmarks" ,kbookmarks)
-       ("kcrash" ,kcrash)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kxmlgui" ,kxmlgui)
-       ("oxygen-icons" ,oxygen-icons) ;; default icon set
-       ("qtbase" ,qtbase-5)))
+     (list kactivities-stats
+           kbookmarks
+           kcrash
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           ki18n
+           kio
+           ktextwidgets
+           kxmlgui
+           oxygen-icons ;; default icon set
+           qtbase-5))
     (home-page "https://kde.org/applications/utilities/org.kde.sweeper")
     (synopsis "Temporary file and history cleaner")
     (description "
diff --git a/gnu/packages/kde.scm b/gnu/packages/kde.scm
index c5a3f43361..8dfcba1388 100644
--- a/gnu/packages/kde.scm
+++ b/gnu/packages/kde.scm
@@ -7,11 +7,11 @@
 ;;; Copyright © 2018 Gábor Boskovits <boskovits@gmail.com>
 ;;; Copyright © 2019 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2018, 2019, 2020 Hartmut Goebel <h.goebel@crazy-compilers.com>
-;;; Copyright © 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2020 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2020, 2021 Michael Rohleder <mike@rohleder.de>
 ;;; Copyright © 2020 Prafulla Giri <pratheblackdiamond@gmail.com>
-;;; Copyright © 2020 Zheng Junjie <873216071@qq.com>
+;;; Copyright © 2020, 2021, 2022 Zheng Junjie <873216071@qq.com>
 ;;; Copyright © 2021 Alexandros Theodotou <alex@zrythm.org>
 ;;; Copyright © 2021 la snesne <lasnesne@lagunposprasihopre.org>
 ;;; Copyright © 2021 Vinicius Monego <monego@posteo.net>
@@ -47,6 +47,7 @@
   #:use-module (gnu packages audio)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages boost)
+  #:use-module (gnu packages check)
   #:use-module (gnu packages code)
   #:use-module (gnu packages cpp)
   #:use-module (gnu packages compression)
@@ -57,12 +58,16 @@
   #:use-module (gnu packages ebook)
   #:use-module (gnu packages flex)
   #:use-module (gnu packages fontutils)
+  #:use-module (gnu packages geo)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages ghostscript)
+  #:use-module (gnu packages gimp)
   #:use-module (gnu packages gl)
   #:use-module (gnu packages gnome)
+  #:use-module (gnu packages gps)
   #:use-module (gnu packages graphics)
   #:use-module (gnu packages image)
+  #:use-module (gnu packages image-processing)
   #:use-module (gnu packages kde-frameworks)
   #:use-module (gnu packages kde-pim)
   #:use-module (gnu packages kde-plasma)
@@ -74,6 +79,7 @@
   #:use-module (gnu packages perl)
   #:use-module (gnu packages photo)
   #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages protobuf)
   #:use-module (gnu packages pulseaudio)
   #:use-module (gnu packages python)
   #:use-module (gnu packages tls)
@@ -97,13 +103,9 @@
         (base32 "1x4v79vhvc5ixkbsf3jyjz5ig1lf78rfw3r7g3llpb4j1kcp3wh0"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("baloo" ,baloo)
-       ("kconfig" ,kconfig)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("qtbase" ,qtbase-5)))
+     (list baloo kconfig ki18n kio qtbase-5))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -132,15 +134,14 @@ This package contains GUI widgets for baloo.")
     (build-system qt-build-system)
     (arguments `(#:tests? #f))  ; unexpected error in the test suite.
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("libxml2" ,libxml2))) ;; xmllint required for tests
+     (list extra-cmake-modules libxml2)) ;; xmllint required for tests
     (inputs
-     `(("grantlee" ,grantlee)
-       ("kguiaddons" ,kguiaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("knewstuff" ,knewstuff)
-       ("qtbase" ,qtbase-5)))
+     (list grantlee
+           kguiaddons
+           ki18n
+           kiconthemes
+           knewstuff
+           qtbase-5))
     (home-page "https://invent.kde.org/pim/grantleetheme")
     (synopsis "Library providing Grantlee theme support")
     (description "This library provides Grantlee theme support.")
@@ -173,40 +174,39 @@ This package contains GUI widgets for baloo.")
                  `("QTWEBENGINEPROCESS_PATH" = (,qt-process-path)))
                #t))))))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("akonadi" ,akonadi)
-       ("akonadi-contacts" ,akonadi-contacts)
-       ("akonadi-mime" ,akonadi-mime)
-       ("boost" ,boost)
-       ("breeze-icons" ,breeze-icons)
-       ("gpgme" ,gpgme)
-       ("grantlee" ,grantlee)
-       ("grantleetheme" ,grantleetheme)
-       ("kcmutils" ,kcmutils)
-       ("kcontacts" ,kcontacts)
-       ("kcrash" ,kcrash)
-       ("kimap" ,kimap)
-       ("kitemmodels" ,kitemmodels)
-       ("kmessagelib" ,kmessagelib)
-       ("kmime" ,kmime)
-       ("knotifications" ,knotifications)
-       ("knotifyconfig" ,knotifyconfig)
-       ("kontactinterface" ,kontactinterface)
-       ("kpimcommon" ,kpimcommon)
-       ("kpimtextedit" ,kpimtextedit)
-       ("kqtquickcharts" ,kqtquickcharts)
-       ("ktexteditor" ,ktexteditor)
-       ("kuserfeedback" ,kuserfeedback)
-       ("libkdepim" ,libkdepim)
-       ("libkleo" ,libkleo)
-       ("qgpgme" ,qgpgme)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtwebchannel" ,qtwebchannel)
-       ("qtwebengine" ,qtwebengine)
-       ("syndication" ,syndication)))
+     (list akonadi
+           akonadi-contacts
+           akonadi-mime
+           boost
+           breeze-icons
+           gpgme
+           grantlee
+           grantleetheme
+           kcmutils
+           kcontacts
+           kcrash
+           kimap
+           kitemmodels
+           kmessagelib
+           kmime
+           knotifications
+           knotifyconfig
+           kontactinterface
+           kpimcommon
+           kpimtextedit
+           kqtquickcharts
+           ktexteditor
+           kuserfeedback
+           libkdepim
+           libkleo
+           qgpgme
+           qtbase-5
+           qtdeclarative
+           qtwebchannel
+           qtwebengine
+           syndication))
     (home-page "https://apps.kde.org/en/akregator")
     (synopsis "KDE Feed Reader")
     (description
@@ -219,7 +219,7 @@ browser for easy news reading.")
     (license license:gpl2+)))
 
 (define-public kdenlive
-  (let ((version "21.08.1"))
+  (let ((version "21.08.3"))
     (package
       (name "kdenlive")
       (version version)
@@ -231,45 +231,47 @@ browser for easy news reading.")
                (commit (string-append "v" version))))
          (file-name (string-append name "-" version "-checkout"))
          (sha256
-          (base32 "1fvy2aa86pn4crk8lgxjh1kdn2lxzi66krnrr9m91mp89mmc760k"))))
+          (base32 "0lpspak5djkbn2xbmmbxls258310g45n3a08sghkjl08bx6ilvc9"))))
       (build-system qt-build-system)
       (native-inputs
-       `(("extra-cmake-modules" ,extra-cmake-modules)
-         ("pkg-config" ,pkg-config)
-         ("qttools" ,qttools)))
+       (list extra-cmake-modules pkg-config qttools))
       (inputs
-       `(("breeze" ,breeze) ; make dark them available easily
-         ("breeze-icons" ,breeze-icons) ; recommended icon set
-         ("ffmpeg" ,ffmpeg)
-         ("frei0r-plugins" ,frei0r-plugins)
-         ("karchive" ,karchive)
-         ("kcrash" ,kcrash)
-         ("kdbusaddons" ,kdbusaddons)
-         ("kdeclarative" ,kdeclarative)
-         ("kdoctools" ,kdoctools)
-         ("kfilemetadata" ,kfilemetadata)
-         ("kguiaddons" ,kguiaddons)
-         ("kiconthemes" ,kiconthemes)
-         ("knewstuff" ,knewstuff)
-         ("knotifications" ,knotifications)
-         ("knotifyconfig" ,knotifyconfig)
-         ("kparts" ,kparts)
-         ("kplotting" ,kplotting)
-         ("mlt" ,mlt)
-         ("purpose" ,purpose)
-         ("qtbase" ,qtbase-5)
-         ("qtdeclarative" ,qtdeclarative)
-         ("qtgraphicaleffects" ,qtgraphicaleffects)
-         ("qtmultimedia" ,qtmultimedia)
-         ("qtnetworkauth" ,qtnetworkauth)
-         ("qtquickcontrols" ,qtquickcontrols)
-         ("qtquickcontrols2" ,qtquickcontrols2)
-         ("qtscript" ,qtscript)
-         ("qtsvg" ,qtsvg)
-         ("qtwebkit" ,qtwebkit)
-         ("shared-mime-info" ,shared-mime-info)))
+       (list breeze ; make dark them available easily
+             breeze-icons ; recommended icon set
+             ffmpeg
+             frei0r-plugins
+             karchive
+             kcrash
+             kdbusaddons
+             kdeclarative
+             kdoctools
+             kfilemetadata
+             kguiaddons
+             kiconthemes
+             knewstuff
+             knotifications
+             knotifyconfig
+             kparts
+             kplotting
+             mlt
+             purpose
+             qtbase-5
+             qtdeclarative
+             qtgraphicaleffects
+             qtmultimedia
+             qtnetworkauth
+             qtquickcontrols
+             qtquickcontrols2
+             qtscript
+             qtsvg
+             qtwebkit
+             shared-mime-info))
       (arguments
-       `(#:tests? #f                    ;TODO needs X
+       ;; XXX: there is a single test that spawns other tests and
+       ;; 1/3 tests failed and 1/327 assertions failed.  It seems
+       ;; that individual tests can't be skipped.
+       `(#:configure-flags (list "-DBUILD_TESTING=off")
+         #:tests? #f
          #:phases
          (modify-phases %standard-phases
            (add-after 'install 'wrap-executable
@@ -311,10 +313,7 @@ projects.")
          (base32 "02ip5r67hjfpywkm3mz86n6wbqcr7996ifzfd2fyzsvm4998hi4y"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)
-       ("shared-mime-info" ,shared-mime-info)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules pkg-config shared-mime-info qttools))
     (inputs
      `(("boost" ,boost)
        ("clang" ,clang)
@@ -404,9 +403,9 @@ software (Git, Subversion, Mercurial, CVS and Bazaar).")
        (sha256
         (base32 "1kfab4p717acbdkcdi41d98vwch7v431gb2qi6s38hmclsf8bf8g"))))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (build-system cmake-build-system)
     (home-page "https://kde.org")
     (synopsis "Parser generator library for KDevplatform")
@@ -432,11 +431,9 @@ for some KDevelop language plugins (Ruby, PHP, CSS...).")
                  "kdiagram-Fix-missing-link-libraries.patch"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules qttools))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)))
+     (list qtbase-5 qtsvg))
     (home-page "https://invent.kde.org/graphics/kdiagram")
     (synopsis "Libraries for creating business diagrams")
     (description "This package provides libraries for integrating business
@@ -448,87 +445,101 @@ a module for implementing ODF Gantt charts, which are bar charts that
 illustrate project schedules.")
     (license license:gpl2+)))
 
+(define-public kseexpr
+  (package
+    (name "kseexpr")
+    (version "4.0.4.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+              (url "https://invent.kde.org/graphics/kseexpr")
+              (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "088q3kkv2wq426w000iq14wy3a45rrnn0bmsdks6caz4vq04ccay"))))
+    (build-system qt-build-system)
+    (arguments
+     `(#:configure-flags (list "-DBUILD_TESTS=ON"))) ; disabled by default
+    (native-inputs
+     (list bison doxygen extra-cmake-modules flex googletest))
+    (inputs
+     (list ki18n libpng qtbase-5))
+    (home-page "https://invent.kde.org/graphics/kseexpr")
+    (synopsis "Embeddable expression evaluation engine")
+    (description "This package contains the fork of Disney Animation's SeExpr
+expression library, that is used in Krita.")
+    (license license:gpl3+)))
+
 (define-public krita
   (package
     (name "krita")
-    (version "4.4.5")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "mirror://kde/stable/krita/" version
-                    "/krita-" version ".tar.gz"))
-              (sha256
-               (base32
-                "0s3mzgkxb316y1wncrr8l3w5nnqszhvdh8qi1nh6040dhy075zab"))))
-    (build-system cmake-build-system)
+    (version "5.0.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://kde/stable/krita/" version "/krita-" version
+             ".tar.gz"))
+       (sha256
+        (base32 "1gww95fyd5r3x2260j2ls7d8fp4rsfxnwdqai2j7fjahxg3iyxg6"))))
+    (build-system qt-build-system)
     (arguments
      `(#:tests? #f
-       #:configure-flags
-       (list "-DBUILD_TESTING=OFF"
-             (string-append "-DCMAKE_CXX_FLAGS=-I"
-                            (assoc-ref %build-inputs "openexr")
-                            "/include/OpenEXR"))
-       #:phases
-       (modify-phases %standard-phases
-         ;; Ensure that icons are found at runtime.
-         ;; This works around <https://bugs.gnu.org/22138>.
-         (add-after 'install 'wrap-executable
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out"))
-                   (qt '("qtbase" "qtsvg")))
-               (wrap-program (string-append out "/bin/krita")
-                 `("QT_PLUGIN_PATH" ":" prefix
-                   ,(map (lambda (label)
-                           (string-append (assoc-ref inputs label)
-                                          "/lib/qt5/plugins/"))
-                         qt)))
-               #t))))))
+       #:configure-flags (list "-DBUILD_TESTING=OFF")))
     (native-inputs
-     `(("curl" ,curl)
-       ("eigen" ,eigen)
-       ("extra-cmake-modules" ,extra-cmake-modules)
-       ("gettext-minimal" ,gettext-minimal)
-       ("kitemmodels" ,kitemmodels)
-       ("pkg-config" ,pkg-config)
-       ("qwt" ,qwt)
-       ("vc" ,vc)))
+     (list curl
+           eigen
+           extra-cmake-modules
+           gettext-minimal
+           kitemmodels
+           pkg-config
+           qwt
+           vc))
     (inputs
-     `(("boost" ,boost)
-       ("exiv2" ,exiv2)
-       ("fftw" ,fftw)
-       ("gsl" ,gsl)
-       ("ilmbase" ,ilmbase)
-       ("karchive" ,karchive)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kguiaddons" ,kguiaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("kitemviews" ,kitemviews)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("lcms" ,lcms)
-       ("libjpeg-turbo" ,libjpeg-turbo)
-       ("libpng" ,libpng)
-       ("libraw" ,libraw-0.18)
-       ("libtiff" ,libtiff)
-       ("libx11" ,libx11)
-       ("libxcb" ,libxcb)
-       ("libxi" ,libxi)
-       ("openexr" ,openexr)
-       ("perl" ,perl)
-       ("poppler-qt5" ,poppler-qt5)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtmultimedia" ,qtmultimedia)
-       ("qtsvg" ,qtsvg)
-       ("qtx11extras" ,qtx11extras)
-       ("quazip" ,quazip)
-       ("zlib" ,zlib)))
+     (list boost
+           exiv2
+           fftw
+           giflib
+           gsl
+           imath
+           karchive
+           kcompletion
+           kconfig
+           kcoreaddons
+           kcrash
+           kguiaddons
+           ki18n
+           kiconthemes
+           kio
+           kitemviews
+           kseexpr
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           lcms
+           libjpeg-turbo
+           libheif
+           libmypaint
+           libpng
+           libraw-0.18
+           libtiff
+           libwebp
+           libx11
+           libxcb
+           libxi
+           opencolorio
+           openexr
+           openjpeg
+           perl
+           poppler-qt5
+           qtbase-5
+           qtdeclarative
+           qtmultimedia
+           qtsvg
+           qtx11extras
+           quazip-0
+           zlib))
     (home-page "https://krita.org")
     (synopsis "Digital painting application")
     (description
@@ -551,20 +562,18 @@ features include brush stabilizers, brush engines and wrap-around mode.")
         (base32 "0v8z6r9gngzckvqyxjm9kp7hilwfqibyk2f9vag9l98ar0iwr97q"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)
-       ("shared-mime-info" ,shared-mime-info)))
+     (list extra-cmake-modules pkg-config shared-mime-info))
     (inputs
-     `(("karchive" ,karchive)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kparts" ,kparts)
-       ("kdiagram" ,kdiagram)
-       ("kgraphviewer" ,kgraphviewer)
-       ("kio" ,kio)
-       ("ki18n" ,ki18n)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("qtxmlpatterns" ,qtxmlpatterns)))
+     (list karchive
+           kcoreaddons
+           kparts
+           kdiagram
+           kgraphviewer
+           kio
+           ki18n
+           qtbase-5
+           qtsvg
+           qtxmlpatterns))
     (home-page "https://apps.kde.org/en/massif-visualizer")
     (synopsis "Visualize massif data generated by Valgrind")
     (description
@@ -586,16 +595,15 @@ compressed massif files can also be opened transparently.")
         (sha256
          (base32 "0m8m7sgpf2f4nxpaaymyvihlk0pcyblyd99mcbibrnyr5kzkzzdc"))))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules pkg-config))
     (inputs
-     `(("kcodecs" ,kcodecs)
-       ("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kxmlgui" ,kxmlgui)
-       ("qtbase" ,qtbase-5)))
+     (list kcodecs
+           kconfig
+           kcoreaddons
+           ki18n
+           kio
+           kxmlgui
+           qtbase-5))
     (build-system cmake-build-system)
     (home-page "https://kde.org")
     (synopsis "Library to compare files and strings, used in Kompare and KDevelop")
@@ -619,10 +627,9 @@ used in KDE development tools Kompare and KDevelop.")
          (base32 "0rvvf97la95lah67jcj0p06n4br0pc2mri0q1hn4x522hndqybjn"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("openssl" ,openssl)
-       ("qtbase" ,qtbase-5)))
+     (list openssl qtbase-5))
     (home-page "https://userbase.kde.org/QCA")
     (synopsis "Libraries for the Qt Cryptographic Architecture")
     (description "The Qt Cryptographic Architecture (QCA) provides a
@@ -646,16 +653,15 @@ cards.")
                 "0jsig7algmab9h0fb09my0axjqzw83zgscamhzl8931lribs6idm"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules pkg-config))
     (inputs
-     `(("kauth" ,kauth)
-       ("kcoreaddons" ,kcoreaddons)
-       ("ki18n" ,ki18n)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("qtbase" ,qtbase-5)
-       ("qca" ,qca)
-       ("util-linux" ,util-linux "lib")))
+     (list kauth
+           kcoreaddons
+           ki18n
+           kwidgetsaddons
+           qtbase-5
+           qca
+           `(,util-linux "lib")))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Library for managing partitions")
     (description "Library for managing partitions.")
@@ -677,10 +683,9 @@ cards.")
     (arguments
      `(#:tests? #f)) ; both tests fail, require display
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules qttools))
     (home-page "https://techbase.kde.org/Projects/Snorenotify")
     (synopsis "Qt notification framework")
     (description "Snorenotify is a multi platform Qt notification framework.
@@ -705,17 +710,13 @@ different notification systems.")
     (arguments
      `(#:configure-flags '("-DBUILD_TESTING=ON"
                            "-DKDE_INSTALL_LIBEXECDIR=libexec")
-       #:phases (modify-phases %standard-phases
-                  (add-after 'set-paths 'extend-CPLUS_INCLUDE_PATH
-                    (lambda* (#:key inputs #:allow-other-keys)
-                      ;; FIXME: <kcmutils_version.h> is not found during one
-                      ;; of the compilation steps without this hack.
-                      (setenv "CPLUS_INCLUDE_PATH"
-                              (string-append (assoc-ref inputs "kcmutils")
-                                             "/include/KF5:"
-                                             (or (getenv "CPLUS_INCLUDE_PATH")
-                                                 "")))
-                      #t)))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'adjust-include-header
+           (lambda _
+             (substitute* "plugins/runcommand/runcommandplugin.cpp"
+               (("<kcmutils_version.h>")
+                "<KF5/kcmutils_version.h>")))))
        #:tests? #f)) ; tests fail hard in our build environment
     (native-inputs
      `(("extra-cmake-modules" ,extra-cmake-modules)
@@ -724,27 +725,27 @@ different notification systems.")
        ("pkg-config" ,pkg-config)
        ("python" ,python-wrapper)))
     (inputs
-     `(("kcmutils" ,kcmutils)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("kirigami" ,kirigami)
-       ("knotifications" ,knotifications)
-       ("kpeople" ,kpeople)
-       ("kpeoplevcard" ,kpeoplevcard)
-       ("kwayland" ,kwayland)
-       ("libfakekey" ,libfakekey)
-       ("pulseaudio-qt" ,pulseaudio-qt)
-       ("qca" ,qca)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtgraphicaleffects" ,qtgraphicaleffects)
-       ("qtmultimedia" ,qtmultimedia)
-       ("qtquickcontrols" ,qtquickcontrols)
-       ("qtquickcontrols2" ,qtquickcontrols2)
-       ("qtx11extras" ,qtx11extras)))
+     (list kcmutils
+           kconfigwidgets
+           kdbusaddons
+           ki18n
+           kiconthemes
+           kio
+           kirigami
+           knotifications
+           kpeople
+           kpeoplevcard
+           kwayland
+           libfakekey
+           pulseaudio-qt
+           qca
+           qtbase-5
+           qtdeclarative
+           qtgraphicaleffects
+           qtmultimedia
+           qtquickcontrols
+           qtquickcontrols2
+           qtx11extras))
     (home-page "https://community.kde.org/KDEConnect")
     (synopsis "Enable your devices to communicate with each other")
     (description "KDE Connect is a project that enables all your devices to
@@ -800,39 +801,39 @@ communicate with each other.  Here's a few things KDE Connect can do:
        ("python" ,python-wrapper)
        ("qttools" ,qttools)))
     (inputs
-     `(("breeze" ,breeze) ;for dark themes
-       ("breeze-icons" ,breeze-icons) ;for icons
-       ("gsl" ,gsl)
-       ("karchive" ,karchive)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdoctools" ,kdoctools)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("knewstuff" ,knewstuff)
-       ("kparts" ,kparts)
-       ("kservice" ,kservice)
-       ("ksyntaxhighlighting" ,ksyntaxhighlighting)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kuserfeedback" ,kuserfeedback)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("shared-mime-info" ,shared-mime-info)
-       ;; Optional.
-       ("cfitsio" ,cfitsio)
-       ("fftw" ,fftw)
-       ("hdf5" ,hdf5)
-       ("libcerf" ,libcerf)
-       ("lz4" ,lz4)
-       ("netcdf" ,netcdf)
-       ("qtserialport" ,qtserialport)
-       ("zlib" ,zlib)))
+     (list breeze ;for dark themes
+           breeze-icons ;for icons
+           gsl
+           karchive
+           kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdoctools
+           ki18n
+           kiconthemes
+           kio
+           knewstuff
+           kparts
+           kservice
+           ksyntaxhighlighting
+           ktextwidgets
+           kuserfeedback
+           kwidgetsaddons
+           kxmlgui
+           qtbase-5
+           qtsvg
+           shared-mime-info
+           ;; Optional.
+           cfitsio
+           fftw
+           hdf5
+           libcerf
+           lz4
+           netcdf
+           qtserialport
+           zlib))
     (home-page "https://labplot.kde.org/")
     (synopsis "Interactive graphing and analysis of scientific data")
     (description "LabPlot is a tool for interactive graphing and analysis of
@@ -855,10 +856,9 @@ to perform data analysis.")
           "1wxp35mf9zlpgzi4msdl86b2krdq2ipqw371gyx23r7j84vdyxi3"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list qtbase-5 qtdeclarative))
     (home-page "https://phabricator.kde.org/source/kqtquickcharts/")
     (synopsis "Interactive charts for Qt Quick")
     (description
@@ -879,19 +879,18 @@ charts.")
                 "0ba67hs4vlb3qyvdzhnpmf8p62df12s8aqw4hzf9vnxff3qix5k1"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("kcmutils" ,kcmutils)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("knotifications" ,knotifications)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("qtbase" ,qtbase-5)))
+     (list kcmutils
+           kconfigwidgets
+           kcoreaddons
+           ki18n
+           kiconthemes
+           kio
+           knotifications
+           kwidgetsaddons
+           kxmlgui
+           qtbase-5))
     (home-page "https://kde.org/applications/system/kdk")
     (synopsis "View Disk Usage")
     (description "KDiskFree displays the available file devices (hard drive
@@ -913,17 +912,9 @@ unmount drives and view them in a file manager.")
                 "0fx17s6fj1pxl1mgfrqhchk8sihkbji1x8y3nhb1r0971wzd1nsc"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("perl" ,perl)
-       ("python" ,python)
-       ("qttools" ,qttools)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules perl python qttools kdoctools))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("karchive" ,karchive)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kdbusaddons" ,kdbusaddons)))
+     (list qtbase-5 karchive ki18n kio kdbusaddons))
     ;; Note: The 'hotshot2calltree' and 'pprof2calltree' scripts depend on
     ;; Python and PHP, respectively.  These are optional and we ignore them
     ;; for now.
@@ -955,39 +946,95 @@ Python, PHP, and Perl.")
        (base32 "1xsrrvhwjwi5aajcaxydmzc69i4yx6shs8ly8vr85njc188ycg13"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("karchive" ,karchive)
-       ("kbookmarks" ,kbookmarks)
-       ("kcodecs" ,kcodecs)
-       ("kcompletion" ,kcompletion)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdeclarative" ,kdeclarative)
-       ("kdnssd" ,kdnssd)
-       ("kglobalaccel" ,kglobalaccel)
-       ("kguiaddons" ,kguiaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ;("kio" ,kio)
-       ("kitemviews" ,kitemviews)
-       ("kjobwidgets" ,kjobwidgets)
-       ("knewstuff" ,knewstuff)
-       ("kservice" ,kservice)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("libsndfile" ,libsndfile)
-       ("openal" ,openal)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)))
+     (list karchive
+           kbookmarks
+           kcodecs
+           kcompletion
+           kconfigwidgets
+           kcrash
+           kdbusaddons
+           kdeclarative
+           kdnssd
+           kglobalaccel
+           kguiaddons
+           ki18n
+           kiconthemes
+           ;("kio" ,kio)
+           kitemviews
+           kjobwidgets
+           knewstuff
+           kservice
+           ktextwidgets
+           kwidgetsaddons
+           kxmlgui
+           libsndfile
+           openal
+           qtbase-5
+           qtdeclarative
+           qtsvg))
     (home-page "https://games.kde.org/")
     (synopsis "Runtime library for kdegames")
     (description "Runtime library for kdegames")
     (license (list license:gpl2+  license:fdl1.2+))))
 
+(define-public marble-qt
+  (package
+    (name "marble-qt")
+    (version "21.08.3")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://invent.kde.org/education/marble.git/")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "15gqym45z0gjzdc4ypfj0fki96c3dad4ygsi6lfr8yvwsx8swrb6"))))
+    (build-system qt-build-system)
+    (arguments
+     ;; FIXME: libmarblewidget-qt5.so.28 not found.  Also enable the
+     ;; corresponding configure flag to build tests.
+     `(#:tests? #f
+       #:configure-flags
+       (list "-DBUILD_MARBLE_TOOLS=YES" ; file conversion tools
+             "-DBUILD_TOUCH=YES"
+             "-DBUILD_MARBLE_TESTS=FALSE")))
+    (native-inputs
+     (list extra-cmake-modules qttools))
+    ;; One optional dependency missing: libwlocate.
+    (inputs
+     (list gpsd
+           kcoreaddons
+           kcrash
+           kdoctools
+           ki18n
+           kio
+           knewstuff
+           kparts
+           krunner
+           kwallet
+           perl
+           phonon
+           protobuf
+           qtbase-5
+           qtdeclarative
+           qtlocation
+           qtserialport
+           qtsvg
+           ;; ("qtwebengine" ,qtwebengine) ; FIXME: not found by CMake
+           shapelib
+           shared-mime-info
+           zlib))
+    (home-page "https://marble.kde.org/")
+    (synopsis "Virtual globe and world atlas")
+    (description "Marble is similar to a desktop globe.  At closer scale it
+becomes a world atlas, while OpenStreetMap takes the user to street level.  It
+supports searching for places of interest, viewing Wikipedia articles,
+creating routes by drag and drop and more.")
+    (license license:lgpl2.1+)))
+
 (define-public okular
   (package
     (name "okular")
@@ -1008,46 +1055,44 @@ Python, PHP, and Perl.")
        #:configure-flags
        (list "-DBUILD_TESTING=OFF")))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules kdoctools pkg-config))
     (inputs
-     `(("ebook-tools" ,ebook-tools)
-       ("breeze-icons" ,breeze-icons)
-       ("discount" ,discount)
-       ("djvulibre" ,djvulibre)
-       ("kactivities" ,kactivities)
-       ("khtml" ,khtml)
-       ("chmlib" ,chmlib)
-       ("kdegraphics-mobipocket" ,kdegraphics-mobipocket)
-       ("karchive" ,karchive)
-       ("kbookmarks" ,kbookmarks)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("qtbase" ,qtbase-5)
-       ("libjpeg-turbo" ,libjpeg-turbo)
-       ("libtiff" ,libtiff)
-       ("kirigami" ,kirigami)
-       ("purpose" ,purpose)
-       ("freetype" ,freetype)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("kparts" ,kparts)
-       ("kpty" ,kpty)
-       ("qtspeech" ,qtspeech)
-       ("kwallet" ,kwallet)
-       ("kwindowsystem" ,kwindowsystem)
-       ("libkexiv2" ,libkexiv2)
-       ("libspectre" ,libspectre)
-       ("libzip" ,libzip)
-       ("phonon" ,phonon)
-       ("poppler-qt5" ,poppler-qt5)
-       ("qca" ,qca)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)
-       ("threadweaver" ,threadweaver)
-       ("kcrash" ,kcrash)
-       ("kjs" ,kjs)))
+     (list ebook-tools
+           breeze-icons
+           discount
+           djvulibre
+           kactivities
+           khtml
+           chmlib
+           kdegraphics-mobipocket
+           karchive
+           kbookmarks
+           kcompletion
+           kconfig
+           qtbase-5
+           libjpeg-turbo
+           libtiff
+           kirigami
+           purpose
+           freetype
+           kiconthemes
+           kio
+           kparts
+           kpty
+           qtspeech
+           kwallet
+           kwindowsystem
+           libkexiv2
+           libspectre
+           libzip
+           phonon
+           poppler-qt5
+           qca
+           qtdeclarative
+           qtsvg
+           threadweaver
+           kcrash
+           kjs))
     (home-page "https://kde.org/applications/graphics/okular/")
     (synopsis "Document viewer")
     (description
@@ -1069,11 +1114,9 @@ a variety of formats, including PDF, PostScript, DejaVu, and EPub.")
                 "1smjvblx0jcv3afs2sr4qcmvhqd44iw24hvr9fppa3nxhrmjwmlk"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("gettext" ,gettext-minimal)
-       ("qtbase" ,qtbase-5)))
+     (list gettext-minimal qtbase-5))
     (home-page "https://kde.org/applications/development")
     (synopsis "Tools for translating DocBook XML files with Gettext")
     (description "This is a collection of tools that facilitate translating
@@ -1095,10 +1138,9 @@ PO template files.")
         (base32 "0fm880lp9g60zgrkjyh4jxws6x0s77l9ia4f8pza3w8sxcbbswk5"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("kio" ,kio)
-       ("qtbase" ,qtbase-5)))
+     (list kio qtbase-5))
     (home-page "https://apps.kde.org/en/kdegraphics_mobipocket")
     (synopsis "KDE thumbnailer for Mobipocket files")
     (description "This package provides a KDE plugin that shows thumbnails of
@@ -1118,10 +1160,9 @@ Mobipocket e-books in Dolphin and other KDE apps.")
         (base32 "0k0iinf7s8qlk3fwvq7iic1b4zn2gm65rfd58q7d3wb1i1j2hjjk"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("exiv2" ,exiv2)
-       ("qtbase" ,qtbase-5)))
+     (list exiv2 qtbase-5))
     (home-page "https://invent.kde.org/graphics/libkexiv2")
     (synopsis "Manipulate the metadata of images")
     (description "Libkexiv2 wraps the Exiv2 library, allowing to manipulate
@@ -1141,13 +1182,9 @@ picture metadata as EXIF/IPTC and XMP.")
         (base32 "1qck5jyc4psslpibhki8sz8aj0hsnx8z791vzyn10lmdzn71vx8c"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("kdbusaddons" ,kdbusaddons)
-       ("kdnssd" ,kdnssd)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("qtbase" ,qtbase-5)))
+     (list kdbusaddons kdnssd ki18n kio qtbase-5))
     (home-page "https://kde.org/applications/internet/org.kde.zeroconf_ioslave")
     (synopsis "DNS-SD Service Discovery Monitor")
     (description "Adds an entry to Dolphin's Network page to show local
@@ -1172,20 +1209,17 @@ or Bonjour by other projects).")
         (base32 "1dwx9fscnfp3zsxdir774skn8xvad2dvscnaaw3ji6mrnkmm6bss"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)
-       ;; For optional component "Survey target expression parser"
-       ("bison" ,bison)
-       ("flex" ,flex)
-       ;; For syntax checking and unit tests of PHP server code
-       ;;("php" ,php)
-       ;;("phpunit" ,phpunit)
-       ))
+     (list extra-cmake-modules
+           qttools
+           ;; For optional component "Survey target expression parser"
+           bison
+           flex
+           ;; For syntax checking and unit tests of PHP server code
+           ;;("php" ,php)
+           ;;("phpunit" ,phpunit)
+           ))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtcharts" ,qtcharts)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)))
+     (list qtbase-5 qtcharts qtdeclarative qtsvg))
     (arguments
      `(#:tests? #f))  ;; 4/17 fail
     (home-page "https://api.kde.org/frameworks/kuserfeedback/html/")
diff --git a/gnu/packages/kerberos.scm b/gnu/packages/kerberos.scm
index 92cc84b673..dec09ca791 100644
--- a/gnu/packages/kerberos.scm
+++ b/gnu/packages/kerberos.scm
@@ -10,6 +10,8 @@
 ;;; Copyright © 2017 Alex Vong <alexvong1995@gmail.com>
 ;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -29,6 +31,7 @@
 (define-module (gnu packages kerberos)
   #:use-module (gnu packages)
   #:use-module (gnu packages autotools)
+  #:use-module (gnu packages bash)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages dbm)
   #:use-module (gnu packages perl)
@@ -41,19 +44,20 @@
   #:use-module (gnu packages compression)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages sqlite)
+  #:use-module (gnu packages tcl)
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages tls)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix gexp)
   #:use-module (guix utils)
   #:use-module (guix build-system gnu))
 
 (define-public mit-krb5
   (package
     (name "mit-krb5")
-    (replacement mit-krb5-1.18.4)
-    (version "1.18")
+    (version "1.19.2")
     (source (origin
               (method url-fetch)
               (uri (list
@@ -63,15 +67,15 @@
                     (string-append "https://kerberos.org/dist/krb5/"
                                    (version-major+minor version)
                                    "/krb5-" version ".tar.gz")))
-              (patches (search-patches "mit-krb5-qualify-short-hostnames.patch"
-                                       "mit-krb5-hurd.patch"))
+              (patches (search-patches "mit-krb5-hurd.patch"))
               (sha256
                (base32
-                "121c5xsy3x0i4wdkrpw62yhvji6virbh6n30ypazkp0isws3k4bk"))))
+                "0snz1jm2w4dkk65zcz953jmmv9mqa30fanch2bk8r3rs9vp3yi8h"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("bison" ,bison)
-       ("perl" ,perl)))
+     (list bison perl tcl))                   ;required for some tests
+    (inputs
+     (list openssl))
     (arguments
      `(;; XXX: On 32-bit systems, 'kdb5_util' hangs on an fcntl/F_SETLKW call
        ;; while running the tests in 'src/tests'. Also disable tests when
@@ -95,20 +99,14 @@
        (modify-phases %standard-phases
          (add-after 'unpack 'enter-source-directory
            (lambda _
-             (chdir "src")
-             #t))
+             (chdir "src")))
          (add-before 'check 'pre-check
            (lambda* (#:key inputs native-inputs #:allow-other-keys)
              (let ((perl (assoc-ref (or native-inputs inputs) "perl")))
                (substitute* "plugins/kdb/db2/libdb2/test/run.test"
                  (("/bin/cat") (string-append perl "/bin/perl"))
                  (("D/bin/sh") (string-append "D" (which "sh")))
-                 (("bindir=/bin/.") (string-append "bindir=" perl "/bin"))))
-
-             ;; avoid service names since /etc/services is unavailable
-             (substitute* "tests/resolve/Makefile"
-               (("-p telnet") "-p 23"))
-             #t)))))
+                 (("bindir=/bin/.") (string-append "bindir=" perl "/bin")))))))))
     (synopsis "MIT Kerberos 5")
     (description
      "Massachusetts Institute of Technology implementation of Kerberos.
@@ -120,28 +118,6 @@ cryptography.")
     (home-page "https://web.mit.edu/kerberos/")
     (properties '((cpe-name . "kerberos")))))
 
-(define-public mit-krb5-1.18.4
-  ;; Hide the package to avoid displaying the confusing "1.1a" version in the
-  ;; user interface.
-  (hidden-package
-    (package
-      (inherit mit-krb5)
-      ; version 1.18.4
-      (version "1.1a")
-      (source (origin
-                (method url-fetch)
-                (uri (list
-                       (string-append "https://web.mit.edu/kerberos/dist/krb5/"
-                                      "1.18"
-                                      "/krb5-1.18.4.tar.gz")
-                       (string-append "https://kerberos.org/dist/krb5/"
-                                      "1.18"
-                                      "/krb5-1.18.4.tar.gz")))
-                (patches (search-patches "mit-krb5-hurd.patch"))
-                (sha256
-                  (base32
-                    "1j4zm5npv3yxrwrsdwlxias0ycj4qfxzgnz0h9zffla7b4pmw236")))))))
-
 (define-public shishi
   (package
     (name "shishi")
@@ -171,14 +147,14 @@ cryptography.")
              (("^install-data-hook:")
               "install-data-hook:\nx:\n"))
             #t)))))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (inputs
-     `(("gnutls" ,gnutls)
-       ("libidn" ,libidn)
-       ("linux-pam" ,linux-pam-1.2)
-       ("zlib" ,zlib)
-       ("libgcrypt" ,libgcrypt)
-       ("libtasn1" ,libtasn1)))
+     (list gnutls
+           libidn
+           linux-pam-1.2
+           zlib
+           libgcrypt
+           libtasn1))
     (home-page "https://www.gnu.org/software/shishi/")
     (synopsis "Implementation of the Kerberos 5 network security system")
     (description
@@ -208,34 +184,59 @@ After installation, the system administrator should generate keys using
                   (substitute* "configure"
                     (("User=.*$") "User=Guix\n")
                     (("Host=.*$") "Host=GNU")
-                    (("Date=.*$") "Date=2019\n"))
-                  #t))))
+                    (("Date=.*$") "Date=2019\n"))))))
     (build-system gnu-build-system)
     (arguments
-     '(#:configure-flags (list
-                          ;; Avoid 7 MiB of .a files.
-                          "--disable-static"
+     `(#:configure-flags
+       ,#~(list
+           ;; Avoid 7 MiB of .a files.
+           "--disable-static"
 
-                          ;; Do not build libedit.
-                          (string-append
-                           "--with-readline-lib="
-                           (assoc-ref %build-inputs "readline") "/lib")
-                          (string-append
-                           "--with-readline-include="
-                           (assoc-ref %build-inputs "readline") "/include")
+           ;; Do not build libedit.
+           (string-append
+            "--with-readline-lib="
+            (assoc-ref %build-inputs "readline") "/lib")
+           (string-append
+            "--with-readline-include="
+            (assoc-ref %build-inputs "readline") "/include")
 
-                          ;; Do not build sqlite.
-                          (string-append
-                           "--with-sqlite3="
-                           (assoc-ref %build-inputs "sqlite")))
+           ;; Do not build sqlite.
+           (string-append
+            "--with-sqlite3="
+            (assoc-ref %build-inputs "sqlite"))
 
+           #$@(if (%current-target-system)
+                  ;; The configure script is too pessimistic.
+                  ;; Setting this also resolves a linking error.
+                  #~("ac_cv_func_getpwnam_r_posix=yes"
+                     ;; Allow 'slc' and 'asn1_compile' to be found.
+                     (string-append "--with-cross-tools="
+                                    #+(file-append this-package
+                                                   "/libexec/heimdal")))
+                  #~()))
        #:phases (modify-phases %standard-phases
                   (add-before 'configure 'pre-configure
-                    (lambda _
-                      (substitute* '("appl/afsutil/pagsh.c"
-                                     "tools/Makefile.in")
-                        (("/bin/sh") (which "sh")))
-                      #t))
+                    (lambda* (#:key inputs #:allow-other-keys)
+                      (substitute* "configure"
+                        ;; The e2fsprogs input is included for libcom_err,
+                        ;; let's use it even if cross-compiling.
+                        (("test \"\\$\\{krb_cv_com_err\\}\" = \"yes\"")
+                         ":")
+                        ;; Our 'compile_et' is not in --with-cross-tools,
+                        ;; which confuses heimdal.
+                        (("ac_cv_prog_COMPILE_ET=\\$\\{with_cross_tools\\}compile_et")
+                         "ac_cv_PROG_COMPILE_ET=compile_et"))
+                      (substitute* '("appl/afsutil/pagsh.c" "appl/su/su.c")
+                        (("/bin/sh")
+                         (search-input-file inputs "bin/sh"))
+                        ;; Use the cross-compiled bash instead of the
+                        ;; native bash (XXX shouldn't _PATH_BSHELL point
+                        ;; to a cross-compiled bash?).
+                        (("_PATH_BSHELL")
+                         (string-append
+                          "\"" (search-input-file inputs "bin/sh") "\"")))
+                      (substitute* '("tools/Makefile.in")
+                        (("/bin/sh") (which "sh")))))
                   (add-before 'check 'pre-check
                     (lambda _
                       ;; For 'getxxyyy-test'.
@@ -245,17 +246,19 @@ After installation, the system administrator should generate keys using
                       ;; FIXME: figure out why 'kdc' tests fail.
                       (with-output-to-file "tests/db/have-db.in"
                         (lambda ()
-                          (format #t "#!~a~%exit 1~%" (which "sh"))))
-                      #t)))
+                          (format #t "#!~a~%exit 1~%" (which "sh")))))))
        ;; Tests fail when run in parallel.
        #:parallel-tests? #f))
-    (native-inputs `(("e2fsprogs" ,e2fsprogs)     ;for 'compile_et'
-                     ("texinfo" ,texinfo)
-                     ("unzip" ,unzip)))           ;for tests
-    (inputs `(("readline" ,readline)
-              ("bdb" ,bdb)
-              ("e2fsprogs" ,e2fsprogs)            ;for libcom_err
-              ("sqlite" ,sqlite)))
+    (native-inputs (list e2fsprogs ;for 'compile_et'
+                         texinfo
+                         unzip ;for tests
+                         perl))
+    (inputs (list readline
+                  bash-minimal
+                  bdb
+                  e2fsprogs ;for libcom_err
+                  mit-krb5
+                  sqlite))
     (home-page "http://www.h5l.org/")
     (synopsis "Kerberos 5 network authentication")
     (description
diff --git a/gnu/packages/key-mon.scm b/gnu/packages/key-mon.scm
index 884bef042f..e7b549d184 100644
--- a/gnu/packages/key-mon.scm
+++ b/gnu/packages/key-mon.scm
@@ -44,9 +44,7 @@
      `(#:python ,python-2                    ;uses the Python 2 'print' syntax
        #:tests? #f))                         ;no tests
     (inputs
-     `(("python2-xlib" ,python2-xlib)
-       ("python2-pygtk" ,python2-pygtk)
-       ("python2-rsvg" ,python2-rsvg)))
+     (list python2-xlib python2-pygtk python2-rsvg))
     (home-page "https://code.google.com/p/key-mon")
     (synopsis "Show keyboard and mouse status")
     (description
diff --git a/gnu/packages/kodi.scm b/gnu/packages/kodi.scm
index b3dc96f925..fc8c5b124e 100644
--- a/gnu/packages/kodi.scm
+++ b/gnu/packages/kodi.scm
@@ -5,6 +5,7 @@
 ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018, 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
+;;; Copyright © 2021 Greg Hogan <code@greghogan.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -256,10 +257,8 @@ generator library for C++.")
     (arguments
      '(#:configure-flags '("SH=sh")))
     (native-inputs
-     `(("ghostscript" ,ghostscript) ; ps2pdf
-       ("groff" ,groff)
-       ("libtool" ,libtool)
-       ("which" ,which)))
+     (list ghostscript ; ps2pdf
+           groff libtool which))
     (synopsis "fuzzy comparison of strings")
     (description
      "The fstrcmp project provides a library that is used to make fuzzy
@@ -348,8 +347,7 @@ alternatives. In compilers, this can reduce the cascade of secondary errors.")
 
              (substitute* "xbmc/platform/linux/LinuxTimezone.cpp"
                (("/usr/share/zoneinfo")
-                (string-append (assoc-ref inputs "tzdata")
-                               "/share/zoneinfo")))
+                (search-input-directory inputs "share/zoneinfo")))
 
              ;; Don't phone home to check for updates.
              (substitute* "system/addon-manifest.xml"
@@ -404,7 +402,7 @@ alternatives. In compilers, this can reduce the cascade of secondary errors.")
        ("ffmpeg" ,ffmpeg)
        ("flac" ,flac)
        ("flatbuffers" ,flatbuffers)
-       ("fmt" ,fmt)
+       ("fmt" ,fmt-7)
        ("fontconfig" ,fontconfig)
        ("freetype" ,freetype)
        ("fribidi" ,fribidi)
@@ -499,9 +497,7 @@ plug-in system.")
                 (file-name (string-append name "-" version "-checkout"))))
       (build-system trivial-build-system)
       (inputs
-       `(("bash"        ,bash)
-         ("curl"        ,curl)
-         ("mps-youtube" ,mps-youtube)))
+       (list bash curl mps-youtube))
       (arguments
        `(#:modules ((guix build utils))
          #:builder
@@ -509,8 +505,8 @@ plug-in system.")
            (use-modules (guix build utils))
            (copy-recursively (assoc-ref %build-inputs "source") ".")
            (substitute* "kodi-cli"
-             (("/bin/bash") (string-append (assoc-ref %build-inputs "bash")
-                                           "/bin/bash"))
+             (("/bin/bash")
+              (search-input-file %build-inputs "/bin/bash"))
              (("output=\\$\\((curl)" all curl)
               (string-append "output=$("
                              (assoc-ref %build-inputs "curl")
diff --git a/gnu/packages/language.scm b/gnu/packages/language.scm
index 8929882697..6a0f1af2fa 100644
--- a/gnu/packages/language.scm
+++ b/gnu/packages/language.scm
@@ -131,8 +131,7 @@
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (substitute* "configure.ac"
                (("/usr/share/anthy/anthy.dic")
-                (string-append (assoc-ref inputs "anthy")
-                               "/share/anthy/anthy.dic")))
+                (search-input-file inputs "/share/anthy/anthy.dic")))
              (substitute* "configure.ac"
                (("/usr/bin:\\$GTK3_LIBDIR/libgtk-3-0")
                 (string-append (assoc-ref inputs "gtk+:bin")
@@ -195,7 +194,7 @@
        ("xkbcommon" ,libxkbcommon)
        ("xklavier" ,libxklavier)))
     (propagated-inputs
-     `(("glib" ,glib)))
+     (list glib))
     (synopsis "Lightweight input method framework")
     (description "Nimf is a lightweight, fast and extensible input method
 framework.  This package provides a fork of the original nimf project, that
@@ -322,8 +321,7 @@ Random Cage Fighting Birds, Cool Music etc.")
        ("python" ,python-wrapper)
        ("texinfo" ,texinfo)))
     (inputs
-     `(("ncurses" ,ncurses)
-       ("sqlite" ,sqlite)))
+     (list ncurses sqlite))
     (synopsis "Chinese phonetic input method")
     (description "Chewing is an intelligent phonetic (Zhuyin/Bopomofo) input
 method, one of the most popular choices for Traditional Chinese users.")
@@ -411,7 +409,7 @@ Marburg.")
        ("makeinfo" ,texinfo)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("libxml2" ,libxml2)))
+     (list libxml2))
     (propagated-inputs
      `(("liblouis" ,liblouis)
        ("liblouis:bin" ,liblouis "bin")))
@@ -475,9 +473,9 @@ languages.")
          "015ximzdp42v824llwlg2pd77vd0d172lb4xs55q9f9zhqf6s5qx"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-lingua-en-words2nums" ,perl-lingua-en-words2nums)))
+     (list perl-lingua-en-words2nums))
     (home-page "https://metacpan.org/release/Lingua-EN-FindNumber")
-    (synopsis "Locate (written) numbers in English text ")
+    (synopsis "Locate (written) numbers in English text")
     (description "This module provides a regular expression for finding
 numbers in English text.  It also provides functions for extracting and
 manipulating such numbers.")
@@ -496,7 +494,7 @@ manipulating such numbers.")
         (base32
          "0j8d1f1wvmgc11d71pc8xp8fv5a1nb2yfw1dgd19xhscn1klpvzw"))))
     (build-system perl-build-system)
-    (native-inputs `(("perl-module-build" ,perl-module-build)))
+    (native-inputs (list perl-module-build))
     (home-page "https://metacpan.org/release/Lingua-EN-Inflect")
     (synopsis "Convert singular to plural")
     (description "Lingua::EN::Inflect provides plural inflections,
@@ -520,7 +518,7 @@ provided.  Where appropriate, \"classical\" variants (for example: \"brother\"
          "1gxccynkaqav43ww43jp4rzkyr36x97jd03yb5f6yx0jhn1k7yv6"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-lingua-en-inflect" ,perl-lingua-en-inflect)))
+     (list perl-lingua-en-inflect))
     (home-page "https://metacpan.org/release/Lingua-EN-Inflect-Number")
     (synopsis "Force number of words to singular or plural")
     (description "This module extends the functionality of Lingua::EN::Inflect
@@ -542,13 +540,11 @@ converting a word to singular or plural.")
          "1a6y1l2pjim2242wcpgz066di4pbzfgsjjdl7vg5a5wzm48qj1am"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-nowarnings" ,perl-test-nowarnings)))
+     (list perl-test-nowarnings))
     (propagated-inputs
-     `(("perl-lingua-en-findnumber" ,perl-lingua-en-findnumber)
-       ("perl-lingua-en-inflect" ,perl-lingua-en-inflect)
-       ("perl-lingua-en-inflect-number" ,perl-lingua-en-inflect-number)
-       ("perl-lingua-en-number-isordinal" ,perl-lingua-en-number-isordinal)
-       ("perl-lingua-en-tagger" ,perl-lingua-en-tagger)))
+     (list perl-lingua-en-findnumber perl-lingua-en-inflect
+           perl-lingua-en-inflect-number perl-lingua-en-number-isordinal
+           perl-lingua-en-tagger))
     (home-page "https://metacpan.org/release/Lingua-EN-Inflect-Phrase")
     (synopsis "Inflect short English phrases")
     (description "This module attempts to pluralize or singularize short
@@ -569,10 +565,9 @@ English phrases.")
          "1mhqjvh2ad30gjab5b3a6mbr4aysyrscp4wp42yy5x6001a6km98"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-try-tiny" ,perl-try-tiny)
-       ("perl-test-fatal" ,perl-test-fatal)))
+     (list perl-try-tiny perl-test-fatal))
     (propagated-inputs
-     `(("perl-lingua-en-findnumber" ,perl-lingua-en-findnumber)))
+     (list perl-lingua-en-findnumber))
     (home-page "https://metacpan.org/release/Lingua-EN-Number-IsOrdinal")
     (synopsis "Detect if English number is ordinal or cardinal")
     (description "This module will tell you if a number, either in words or as
@@ -593,10 +588,8 @@ digits, is a cardinal or ordinal number.")
          "0nrnkvsf9f0a7lp82sanmy89ms2nqq1lvjqicvsagsvzp513bl5b"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-memoize-expirelru" ,perl-memoize-expirelru)
-       ("perl-lingua-stem" ,perl-lingua-stem)
-       ("perl-html-parser" ,perl-html-parser)
-       ("perl-html-tagset" ,perl-html-tagset)))
+     (list perl-memoize-expirelru perl-lingua-stem perl-html-parser
+           perl-html-tagset))
     (home-page "https://metacpan.org/release/Lingua-EN-Tagger")
     (synopsis "Part-of-speech tagger for English natural language processing")
     (description "This module is a probability based, corpus-trained tagger
@@ -662,16 +655,16 @@ Moreira, V. and Huyck, C.")
          "12avh2mnnc7llmmshrr5bgb473fvydxnlqrqbl2815mf2dp4pxcg"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (propagated-inputs
-     `(("perl-lingua-pt-stemmer" ,perl-lingua-pt-stemmer)
-       ("perl-lingua-stem-fr" ,perl-lingua-stem-fr)
-       ("perl-lingua-stem-it" ,perl-lingua-stem-it)
-       ("perl-lingua-stem-ru" ,perl-lingua-stem-ru)
-       ("perl-lingua-stem-snowball-da" ,perl-lingua-stem-snowball-da)
-       ("perl-snowball-norwegian" ,perl-snowball-norwegian)
-       ("perl-snowball-swedish" ,perl-snowball-swedish)
-       ("perl-text-german" ,perl-text-german)))
+     (list perl-lingua-pt-stemmer
+           perl-lingua-stem-fr
+           perl-lingua-stem-it
+           perl-lingua-stem-ru
+           perl-lingua-stem-snowball-da
+           perl-snowball-norwegian
+           perl-snowball-swedish
+           perl-text-german))
     (home-page "https://metacpan.org/release/Lingua-Stem")
     (synopsis "Stemming of words in various languages")
     (description "This routine applies stemming algorithms to its parameters,
@@ -768,7 +761,7 @@ Lingua::Stem::Snowball::Se.")
         (base32
          "0675v45bbsh7vr7kpf36xs2q79g02iq1kmfw22h20xdk4rzqvkqx"))))
     (build-system perl-build-system)
-    (native-inputs `(("perl-module-build" ,perl-module-build)))
+    (native-inputs (list perl-module-build))
     (home-page "https://metacpan.org/release/Snowball-Norwegian")
     (synopsis "Porters stemming algorithm for Norwegian")
     (description "Lingua::Stem::Snowball::No is a perl port of the norwegian
@@ -788,7 +781,7 @@ stemmer at http://snowball.tartarus.org.")
         (base32
          "0agwc12jk5kmabnpsplw3wf4ii5w1zb159cpin44x3srb0sr5apg"))))
     (build-system perl-build-system)
-    (native-inputs `(("perl-module-build" ,perl-module-build)))
+    (native-inputs (list perl-module-build))
     (home-page "https://metacpan.org/release/Snowball-Swedish")
     (synopsis "Porters stemming algorithm for Swedish")
     (description "Lingua::Stem::Snowball::Se is a perl port of the swedish
@@ -809,9 +802,8 @@ stemmer at http://snowball.sourceforge.net.")
          "12nw7h2yiybhdw0vnnpc7bif8ylhsn6kqf6s39dsrf9h54iq9yrs"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-lingua-en-inflect-phrase" ,perl-lingua-en-inflect-phrase)
-       ("perl-text-unidecode" ,perl-text-unidecode)
-       ("perl-namespace-clean" ,perl-namespace-clean)))
+     (list perl-lingua-en-inflect-phrase perl-text-unidecode
+           perl-namespace-clean))
     (home-page "https://metacpan.org/release/String-ToIdentifier-EN")
     (synopsis "Convert strings to English program identifiers")
     (description "This module provides a utility method, \"to_identifier\" for
@@ -893,10 +885,9 @@ extensions in EXTS."
                 "candidates"))
              #t)))))
     (inputs
-     `(("glib" ,glib)))
+     (list glib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("swig" ,swig)))
+     (list pkg-config swig))
     (home-page "https://tegaki.github.io/")
     (synopsis
      "Chinese and Japanese Handwriting Recognition (Recognition engine)")
@@ -946,8 +937,7 @@ suitable for both the desktop and mobile devices.")
     (inputs '())
     (native-inputs '())
     (propagated-inputs
-     `(("python2-tegaki-wagomu" ,python2-tegaki-wagomu)
-       ("python2-zinnia" ,python2-zinnia)))
+     (list python2-tegaki-wagomu python2-zinnia))
     (synopsis
      "Chinese and Japanese Handwriting Recognition (Base python library)")
     (license (list license:gpl2+        ; all files except...
@@ -976,17 +966,16 @@ suitable for both the desktop and mobile devices.")
              (lambda* (#:key inputs #:allow-other-keys)
                (substitute* "tegakigtk/fakekey.py"
                  (("libX11.so.6" so)
-                  (string-append (assoc-ref inputs "libx11") "/lib/" so))
+                  (search-input-file inputs
+                                     (string-append "/lib/" so)))
                  (("libXtst.so.6" so)
-                  (string-append (assoc-ref inputs "libxtst") "/lib/" so)))
-               #t))))))
+                  (search-input-file inputs
+                                     (string-append "/lib/" so))))))))))
     (inputs ; required for sending key strokes
-     `(("libx11" ,libx11)
-       ("libxtst" ,libxtst)))
+     (list libx11 libxtst))
     (native-inputs '()) ; override inherited inputs
     (propagated-inputs
-     `(("python2-pygtk" ,python2-pygtk)
-       ("python2-tegaki-python" ,python2-tegaki-python)))
+     (list python2-pygtk python2-tegaki-python))
     (synopsis "Chinese and Japanese Handwriting Recognition (Base UI library)")
     (license license:gpl2+)))
 
@@ -1008,7 +997,7 @@ suitable for both the desktop and mobile devices.")
      (substitute-keyword-arguments (package-arguments python2-tegaki-wagomu)
        ((#:phases _) '%standard-phases)))
     (inputs
-     `(("python2-tegaki-pygtk" ,python2-tegaki-pygtk)))
+     (list python2-tegaki-pygtk))
     ;; override inherited inputs
     (native-inputs '())
     (propagated-inputs '())
@@ -1097,7 +1086,7 @@ suitable for both the desktop and mobile devices.")
     ;; override inherited inputs
     (inputs '())
     (native-inputs
-     `(("python2-tegaki-tools" ,python2-tegaki-tools)))
+     (list python2-tegaki-tools))
     (propagated-inputs '())
     (native-search-paths
      (list (search-path-specification
@@ -1362,7 +1351,7 @@ noun phrases, verb phrases, etc.).")
        ("jack" ,jack-1)
        ("publesaudio" ,pulseaudio)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.fon.hum.uva.nl/praat/")
     (synopsis "Doing phonetics by computer")
     (description "Praat is a tool to perform phonetics tasks.  It can do speech
diff --git a/gnu/packages/ld-wrapper.in b/gnu/packages/ld-wrapper.in
index 2b68b87fb9..0d53e746af 100644
--- a/gnu/packages/ld-wrapper.in
+++ b/gnu/packages/ld-wrapper.in
@@ -11,11 +11,12 @@
 # <https://lists.gnu.org/archive/html/guile-devel/2016-03/msg00000.html>.
 
 unset GUILE_LOAD_COMPILED_PATH
+unset GUILE_SYSTEM_COMPILED_PATH
 main="(@ (gnu build-support ld-wrapper) ld-wrapper)"
 exec @GUILE@ -c "(load-compiled \"@SELF@.go\") (apply $main (cdr (command-line)))" "$@"
 !#
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2020 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
diff --git a/gnu/packages/lean.scm b/gnu/packages/lean.scm
index cc593291fd..6ac7f1668a 100644
--- a/gnu/packages/lean.scm
+++ b/gnu/packages/lean.scm
@@ -40,7 +40,7 @@
                 "09mklc1p6ms1jayg2f89hqfmhca3h5744lli936l38ypn1d00sxx"))))
     (build-system cmake-build-system)
     (inputs
-     `(("gmp" ,gmp)))
+     (list gmp))
     (arguments
      `(#:build-type "Release"           ; default upstream build type
        ;; XXX: Test phases currently fail on 32-bit sytems.
diff --git a/gnu/packages/lego.scm b/gnu/packages/lego.scm
index 5b72c0e0be..19a4a5eba0 100644
--- a/gnu/packages/lego.scm
+++ b/gnu/packages/lego.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2016, 2017, 2019 Eric Bavier <bavier@posteo.net>
 ;;; Copyright © 2018, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -100,7 +101,7 @@ restrictions that stem from limitations of the standard RCX firmware.")
 (define-public leocad
   (package
     (name "leocad")
-    (version "19.07.1")
+    (version "21.06")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -109,14 +110,12 @@ restrictions that stem from limitations of the standard RCX firmware.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "02kv1m18g6s4dady9jv4sjivfkrp192bmdw2a3d9lzlp60zks0p2"))))
+                "1ifbxngkbmg6d8vv08amxbnfvlyjdwzykrjp98lbwvgb0b843ygq"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("qttools" ,qttools)))           ; for lrelease
+     (list qttools))           ; for lrelease
     (inputs
-     `(("mesa" ,mesa)
-       ("qtbase" ,qtbase-5)
-       ("zlib" ,zlib)))
+     (list mesa qtbase-5 zlib))
     (arguments
      '(#:tests? #f
        #:phases
diff --git a/gnu/packages/less.scm b/gnu/packages/less.scm
index 25b675902a..e23b5d0c24 100644
--- a/gnu/packages/less.scm
+++ b/gnu/packages/less.scm
@@ -45,7 +45,7 @@
        (sha256
         (base32 "044fl3izmsi8n1vqzsqdp65q0qyyn5kmsg4sk7id0mxzx15zbbba"))))
     (build-system gnu-build-system)
-    (inputs `(("ncurses" ,ncurses)))
+    (inputs (list ncurses))
     (home-page "https://www.gnu.org/software/less/")
     (synopsis "Paginator for terminals")
     (description
@@ -59,7 +59,7 @@ text editors.")
 (define-public lesspipe
   (package
     (name "lesspipe")
-    (version "1.89")
+    (version "1.91")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -68,7 +68,7 @@ text editors.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0lxf0m4bgwhpwmwa5q2vklk31yhiaz049kpm4n2hqiyb5mlpa94a"))))
+                "04dqvq6j4h451xqbvxzv6pv679hzzfm39pdm5vg7h3r45gzg0kps"))))
     (build-system gnu-build-system)
     (arguments
      '(#:tests? #f                      ; no tests
@@ -79,22 +79,19 @@ text editors.")
                         (delete-file "Makefile") ; force generating
                         (invoke "./configure"
                                 (string-append "--prefix=" out)
-                                "--yes")
-                        #t)))
+                                "--yes"))))
                   (add-before 'install 'patch-tput-and-file
                     (lambda* (#:key inputs #:allow-other-keys)
                       (substitute* "lesspipe.sh"
                         (("tput colors")
-                         (string-append (assoc-ref inputs "ncurses")
-                                        "/bin/tput colors"))
+                         (string-append (search-input-file inputs "/bin/tput")
+                                        " colors"))
                         (("file -")
-                         (string-append (assoc-ref inputs "file")
-                                        "/bin/file -")))
-                      #t)))))
+                         (string-append (search-input-file inputs "/bin/file")
+                                        " -"))))))))
     (inputs
-     `(("file" ,file)
-       ("ncurses" ,ncurses)))  ; for tput
-    (native-inputs `(("perl" ,perl)))
+     (list file ncurses))  ; for tput
+    (native-inputs (list perl))
     (home-page "https://github.com/wofr06/lesspipe")
     (synopsis "Input filter for less")
     (description "To browse files, the excellent viewer @code{less} can be
diff --git a/gnu/packages/lesstif.scm b/gnu/packages/lesstif.scm
index 6326cd3a22..8f017f41be 100644
--- a/gnu/packages/lesstif.scm
+++ b/gnu/packages/lesstif.scm
@@ -39,10 +39,9 @@
             "1qzpxjjf7ri1jzv71mvq5m9g8hfaj5yzwp30rwxlm6n2b24a6jpb"))))
     (build-system gnu-build-system)
     (propagated-inputs
-     `(("printproto" ,printproto)))
+     (list printproto))
     (inputs
-      `(("libxext" ,libxext)
-        ("libxt" ,libxt)))
+      (list libxext libxt))
     (home-page "http://lesstif.sourceforge.net/")
     (synopsis "Clone of the Motif toolkit for the X window system")
     (description "Clone of the Motif toolkit for the X window system.")
diff --git a/gnu/packages/libcanberra.scm b/gnu/packages/libcanberra.scm
index e263ba2efc..337aa6840a 100644
--- a/gnu/packages/libcanberra.scm
+++ b/gnu/packages/libcanberra.scm
@@ -82,7 +82,7 @@
        ("udev" ,eudev)
        ("sound-theme-freedesktop" ,sound-theme-freedesktop)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -122,7 +122,7 @@ null) and is designed to be portable.")
                (base32
                 "054abv4gmfk9maw93fis0bf605rc56dah7ys5plc4pphxqh8nlfb"))))
     (build-system gnu-build-system)
-    (native-inputs `(("intltool" ,intltool)))
+    (native-inputs (list intltool))
     (synopsis "Audio samples for use as a desktop sound theme")
     (description
      "This package provides audio samples that can be used by libcanberra as
@@ -149,7 +149,7 @@ sounds for various system events.")
     (arguments
      `(#:tests? #f)) ;No tests included.
     (propagated-inputs
-     `(("libcanberra" ,libcanberra)))
+     (list libcanberra))
     (synopsis "Ctypes wrapper for the libcanberra API")
     (description
      "Pycanberra is a basic Python wrapper for libcanberra.")
diff --git a/gnu/packages/libdaemon.scm b/gnu/packages/libdaemon.scm
index e47d66cfa7..9dc851e823 100644
--- a/gnu/packages/libdaemon.scm
+++ b/gnu/packages/libdaemon.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013, 2014, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -17,8 +18,10 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages libdaemon)
+  #:use-module (gnu packages autotools)
   #:use-module (guix licenses)
   #:use-module (guix packages)
+  #:use-module (guix utils)
   #:use-module (guix download)
   #:use-module (guix build-system gnu))
 
@@ -45,21 +48,34 @@
                "0d5qlq5ab95wh1xc87rqrh1vx6i8lddka1w3f1zcqvcqdxgyn8zx"))
              (file-name (string-append name "-" version ".tar.gz"))))
     (build-system gnu-build-system)
-    (arguments
-     (if (%current-target-system)
-         ;; The 'setpgrp' test cannot provide an answer when cross-compiling,
-         ;; so provide the right one for glibc.
-         `(#:configure-flags (list "ac_cv_func_setpgrp_void=yes"
-
-                                   ;; TODO: Move this globally on the next
-                                   ;; rebuild cycle.
-                                   ;; Set a valid localstatedir for the
-                                   ;; benefit of the default
-                                   ;; 'daemon_pid_file_proc', used by the
-                                   ;; Hurd's console client.
-                                   "--localstatedir=/var"))
+    (native-inputs
+     (if (and=> (%current-target-system) target-aarch64?)
+         `(("config" ,config)) ; for config.sub
          '()))
+    (arguments
+     `(,@(if (%current-target-system)
+             ;; The 'setpgrp' test cannot provide an answer when cross-compiling,
+             ;; so provide the right one for glibc.
+             `(#:configure-flags (list "ac_cv_func_setpgrp_void=yes"
 
+                                       ;; TODO: Move this globally on the next
+                                       ;; rebuild cycle.
+                                       ;; Set a valid localstatedir for the
+                                       ;; benefit of the default
+                                       ;; 'daemon_pid_file_proc', used by the
+                                       ;; Hurd's console client.
+                                       "--localstatedir=/var"))
+             '())
+       ,@(if (and=> (%current-target-system) target-aarch64?)
+             `(#:phases
+               (modify-phases %standard-phases
+                 (add-before 'configure 'update-config.sub
+                   (lambda _
+                     ;; Replace outdated config.sub such that aarch64
+                     ;; will be recognised as an architecture.
+                     (delete-file "config.sub")
+                     (symlink (which "config.sub") "config.sub")))))
+             '())))
     ;; XXX: Stale URL, missing replacement.  See <http://bugs.gnu.org/18639>.
     (home-page "http://0pointer.de/lennart/projects/libdaemon/")
 
diff --git a/gnu/packages/libedit.scm b/gnu/packages/libedit.scm
index e02c72fdac..f04d3aafe4 100644
--- a/gnu/packages/libedit.scm
+++ b/gnu/packages/libedit.scm
@@ -40,7 +40,7 @@
        (base32 "0wch48nml28jj6ild889745dsg2agm7mpvrmbl1gi98nw6vjrf6v"))))
     (build-system gnu-build-system)
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (home-page "https://thrysoee.dk/editline/")
     (synopsis "NetBSD Editline library")
     (description
diff --git a/gnu/packages/libevent.scm b/gnu/packages/libevent.scm
index 0e683570d3..b3a5cd915e 100644
--- a/gnu/packages/libevent.scm
+++ b/gnu/packages/libevent.scm
@@ -28,6 +28,7 @@
   #:use-module (guix licenses)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix git-download)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system perl)
   #:use-module (gnu packages autotools)
@@ -41,7 +42,7 @@
 (define-public libevent
   (package
     (name "libevent")
-    (version "2.1.11")
+    (version "2.1.12")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -49,16 +50,17 @@
                     version "-stable/libevent-" version "-stable.tar.gz"))
               (sha256
                (base32
-                "0g988zqm45sj1hlhhz4il5z4dpi5dl74hzjwzl4md37a09iaqnx6"))))
+                "1fq30imk8zd26x8066di3kpc5zyfc5z6frr3zll685zcx4dxxrlj"))))
     (build-system gnu-build-system)
     (outputs '("out" "bin"))
     (arguments
      ;; This skips some of the tests which fail on armhf and aarch64.
-     '(#:configure-flags '("--disable-libevent-regress")))
+     '(#:configure-flags '("--disable-libevent-regress"
+                           "--disable-openssl")))
     (inputs
      `(("python" ,python-wrapper)))     ;for 'event_rpcgen.py'
     (native-inputs
-     `(("which" ,which)))
+     (list which))
     (home-page "https://libevent.org/")
     (synopsis "Event notification library")
     (description
@@ -76,7 +78,7 @@ loop.")
 (define-public libev
   (package
     (name "libev")
-    (version "4.31")
+    (version "4.33")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://dist.schmorp.de/libev/Attic/libev-"
@@ -84,7 +86,7 @@ loop.")
                                   ".tar.gz"))
               (sha256
                (base32
-                "0nkfqv69wfyy2bpga4d53iqydycpik8jp8x6q70353hia8mmv1gd"))))
+                "1sjs4324is7fp21an4aas2z4dwsvs6z4xwrmp72vwpq1s6wbfzjh"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--disable-static")))
@@ -102,26 +104,22 @@ limited support for fork events.")
 (define-public libuv
   (package
     (name "libuv")
-    (version "1.35.0")
+    (version "1.41.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://dist.libuv.org/dist/v" version
                                   "/libuv-v" version ".tar.gz"))
               (sha256
                (base32
-                "0126mfmaw3s92dsga60sydgwjmzwg9cd36n127pydmisah17v50f"))))
+                "0zb818sjwnxn5yv3qvkxaprjf037yqmjipk5i3a8rg1q4izhrnv5"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--disable-static")
        ;; XXX: Some tests want /dev/tty, attempt to make connections, etc.
        #:tests? #f))
-    ;; TODO replace with autoconf on core-updates
-    (native-inputs `(("autoconf" ,autoconf-wrapper)
-                     ("automake" ,automake)
-                     ("libtool" ,libtool)
-
-                     ;; libuv.pc is installed only when pkg-config is found.
-                     ("pkg-config" ,pkg-config)))
+    (native-inputs (list autoconf automake libtool
+                         ;; libuv.pc is installed only when pkg-config is found.
+                         pkg-config))
     (home-page "https://github.com/libuv/libuv")
     (synopsis "Library for asynchronous I/O")
     (description
@@ -140,16 +138,37 @@ resolution, asynchronous file system operations, and threading primitives.")
   (package
     (inherit libuv)
     (name "libuv")
-    (version "1.40.0")
+    (version "1.42.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://dist.libuv.org/dist/v" version
                                   "/libuv-v" version ".tar.gz"))
               (sha256
                (base32
-                "1551k3ab27vbg9517l9b4iqbramwxdkwgpf53knas05cbfwhvab1"))))
+                "0wpb9pz3r8nksnrf4zbixj2kk9whr7abi45ydrwyv2js2ljrc4j3"))))
     (properties '((hidden? . #t)))))
 
+(define-public libuv-julia
+  (let ((commit "fb3e3364c33ae48c827f6b103e05c3f0e78b79a9")
+        (revision "3"))
+    ;; When upgrading Julia, also upgrade this.  Get the commit from
+    ;; https://github.com/JuliaLang/julia/blob/v1.6.1/deps/libuv.version
+    (package
+      (inherit libuv)
+      (name "libuv-julia")
+      (version (git-version "2.0.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                       (url "https://github.com/JuliaLang/libuv")
+                       (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1kqpn19d20aka30h6q5h8lnzyp0vw0xzgx0wm4w2r5j6yf76m2hr"))))
+      (home-page "https://github.com/JuliaLang/libuv")
+      (properties '((hidden? . #t))))))
+
 (define-public perl-anyevent
   (package
     (name "perl-anyevent")
@@ -163,15 +182,15 @@ resolution, asynchronous file system operations, and threading primitives.")
                 "11drlj8r02czhjgzkb39axnr8zzyp506r043xfmf93q9kilfmgjh"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-canary-stability" ,perl-canary-stability)))
+     (list perl-canary-stability))
     (propagated-inputs
-     `(("perl-async-interrupt" ,perl-async-interrupt)
-       ("perl-ev" ,perl-ev)
-       ("perl-guard" ,perl-guard)
-       ("perl-json" ,perl-json)
-       ("perl-json-xs" ,perl-json-xs)
-       ("perl-net-ssleay" ,perl-net-ssleay)
-       ("perl-task-weaken" ,perl-task-weaken)))
+     (list perl-async-interrupt
+           perl-ev
+           perl-guard
+           perl-json
+           perl-json-xs
+           perl-net-ssleay
+           perl-task-weaken))
     (home-page "https://metacpan.org/release/AnyEvent")
     (synopsis
      "API for I/O, timer, signal, child process and completion events")
@@ -216,7 +235,7 @@ not rely on XS.")
      `(("libev-source" ,(package-source libev))
        ("perl-canary-stability" ,perl-canary-stability)))
     (propagated-inputs
-     `(("perl-common-sense" ,perl-common-sense)))
+     (list perl-common-sense))
     (home-page "https://metacpan.org/release/EV")
     (synopsis "Perl interface to libev")
     (description
@@ -240,11 +259,9 @@ and still be faster than other event loops currently supported in Perl.")
          "1qwb284z4ig3xzy21m1b3w8bkb8k6l2ij6cjz93znn2j6qs42pwp"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-simple" ,perl-test-simple)))
+     (list perl-module-build perl-test-simple))
     (propagated-inputs
-     `(("perl-anyevent" ,perl-anyevent)
-       ("perl-data-sexpression" ,perl-data-sexpression)))
+     (list perl-anyevent perl-data-sexpression))
     (arguments
      ;; Tests seem to fail because they try to start a server.
      `(#:tests? #f))
diff --git a/gnu/packages/libffi.scm b/gnu/packages/libffi.scm
index d62a1588c1..2efec07e1d 100644
--- a/gnu/packages/libffi.scm
+++ b/gnu/packages/libffi.scm
@@ -2,11 +2,11 @@
 ;;; 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 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2017 Ben Woodcroft <donttrustben@gmail.com>
-;;; Copyright © 2017, 2019, 2020 Marius Bakke <marius@gnu.org>
+;;; Copyright © 2017, 2019, 2020, 2022 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2019 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2019, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2020 John Doe <dftxbs3e@free.fr>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -51,45 +51,15 @@
                               name "-" version ".tar.gz"))
               (sha256
                (base32
-                "0mi0cpf8aa40ljjmzxb7im6dbj45bb0kllcd09xgmp834y9agyvj"))))
+                "0mi0cpf8aa40ljjmzxb7im6dbj45bb0kllcd09xgmp834y9agyvj"))
+              (patches (search-patches "libffi-3.3-powerpc-fixes.patch"
+                                       "libffi-float128-powerpc64le.patch"))))
     (build-system gnu-build-system)
     (arguments
      `(;; Prevent the build system from passing -march and -mtune to the
        ;; compiler.  See "ax_cc_maxopt.m4" and "ax_gcc_archflag.m4".
-       #:configure-flags '("--enable-portable-binary" "--without-gcc-arch")
-
-       ;; TODO: Inline patches on next rebuild cycle.
-       ,@(if (string-prefix? "powerpc-" (or (%current-target-system)
-                                            (%current-system)))
-             '(#:phases (modify-phases %standard-phases
-                          (add-after 'unpack 'apply-patch
-                            (lambda* (#:key inputs #:allow-other-keys)
-                              (let ((patch (assoc-ref inputs
-                                                      "powerpc-patch")))
-                                (invoke "patch" "--force" "-p1"
-                                        "-i" patch))))))
-             '())
-       ,@(if (string-prefix? "powerpc64le-" (or (%current-target-system)
-                                                (%current-system)))
-             '(#:phases (modify-phases %standard-phases
-                          (add-after 'unpack 'apply-patch2
-                            (lambda* (#:key inputs #:allow-other-keys)
-                              (let ((patch (assoc-ref inputs
-                                                      "powerpc64le-patch")))
-                                (invoke "patch" "--force" "-p1"
-                                        "-i" patch))))))
-             '())))
-    (inputs
-     (cond
-      ((string-prefix? "powerpc-" (or (%current-target-system)
-                                        (%current-system)))
-       `(("powerpc-patch" ,@(search-patches
-                             "libffi-3.3-powerpc-fixes.patch"))))
-      ((string-prefix? "powerpc64le-" (or (%current-target-system)
-                                          (%current-system)))
-       `(("powerpc64le-patch" ,@(search-patches
-                                 "libffi-float128-powerpc64le.patch"))))
-      (else '())))
+       #:configure-flags '("--enable-portable-binary"
+                           "--without-gcc-arch")))
     (outputs '("out" "debug"))
     (synopsis "Foreign function call interface library")
     (description
@@ -121,27 +91,16 @@ conversions for values passed between the two languages.")
        (base32 "0v080s7vlrjz9z823x2yh36yc8drwpvvir6w8wfkkzd7k2z5qihs"))))
     (build-system python-build-system)
     (inputs
-     `(("libffi" ,libffi)))
+     (list libffi))
     (propagated-inputs ; required at run-time
-     `(("python-pycparser" ,python-pycparser)))
+     (list python-pycparser))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python-pytest" ,python-pytest)))
+     (list pkg-config python-pytest))
     (arguments
-     `(#:modules ((ice-9 ftw)
-                  (srfi srfi-26)
-                  (guix build utils)
-                  (guix build python-build-system))
-       #:phases
+     `(#:phases
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (setenv "PYTHONPATH"
-                     (string-append
-                      (getenv "PYTHONPATH")
-                      ":" (getcwd) "/build/"
-                      (car (scandir "build" (cut string-prefix? "lib." <>)))))
-
              ;; XXX The "normal" approach of setting CC and friends does
              ;; not work here.  Is this the correct way of doing things?
              (substitute* "testing/embedding/test_basic.py"
@@ -152,8 +111,7 @@ conversions for values passed between the two languages.")
                                "linker_so='gcc -shared')")))
              (substitute* "testing/cffi0/test_ownlib.py"
                (("\"cc testownlib") "\"gcc testownlib"))
-             (invoke "py.test" "-v" "c/" "testing/")
-             #t))
+             (invoke "py.test" "-v" "c/" "testing/")))
          (add-before 'check 'patch-paths-of-dynamically-loaded-libraries
            (lambda* (#:key inputs #:allow-other-keys)
              ;; Shared libraries should be referred by their absolute path as
@@ -176,13 +134,24 @@ conversions for values passed between the two languages.")
                   (format #f "lib_m = ['~a']" libm)))
                (substitute* "c/test_c.py"
                  (("find_and_load_library\\(['\"]{1}c['\"]{1}")
-                  (format #f "find_and_load_library('~a'" libc)))
-               #t))))))
+                  (format #f "find_and_load_library('~a'" libc)))))))))
     (home-page "https://cffi.readthedocs.io/")
     (synopsis "Foreign function interface for Python")
     (description "Foreign Function Interface for Python calling C code.")
     (license expat)))
 
+;; TODO(staging): Merge with the above.
+(define-public python-cffi-1.15
+  (package
+    (inherit python-cffi)
+    (version "1.15.0")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (pypi-uri "cffi" version))
+      (sha256
+       (base32 "0m3rz2pqfmyfagx0bhj2jlbr2h58j3wr3cyv1agxkhlnm1k0s3wj"))))))
+
 (define-public python2-cffi
   (package-with-python2 python-cffi))
 
@@ -273,11 +242,9 @@ project.")
                  (format #t "test suite not run~%"))
              #t)))))
     (native-inputs
-     `(("ruby-rake-compiler" ,ruby-rake-compiler)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-rubygems-tasks" ,ruby-rubygems-tasks)))
+     (list ruby-rake-compiler ruby-rspec ruby-rubygems-tasks))
     (inputs
-     `(("libffi" ,libffi)))
+     (list libffi))
     (synopsis "Ruby foreign function interface library")
     (description "Ruby-FFI is a Ruby extension for programmatically loading
 dynamic libraries, binding functions within them, and calling those functions
diff --git a/gnu/packages/libftdi.scm b/gnu/packages/libftdi.scm
index bbb98ff1f4..e39e0b3d71 100644
--- a/gnu/packages/libftdi.scm
+++ b/gnu/packages/libftdi.scm
@@ -39,7 +39,7 @@
                 "0x0vncf6i92slgrn0h7ghkskqbglbs534220qa84d0qg114zndpc"))))
     (build-system cmake-build-system)
     (propagated-inputs
-     `(("libusb" ,libusb))) ; required by libftdi1.pc
+     (list libusb)) ; required by libftdi1.pc
     (home-page "https://www.intra2net.com/en/developer/libftdi/")
     (synopsis "FTDI USB driver with bitbang mode")
     (description
diff --git a/gnu/packages/libidn.scm b/gnu/packages/libidn.scm
index 8731ed3f83..7c8b77f6fb 100644
--- a/gnu/packages/libidn.scm
+++ b/gnu/packages/libidn.scm
@@ -1,10 +1,11 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012 Andreas Enge <andreas@enge.fr>
-;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2017 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -33,14 +34,14 @@
 (define-public libidn
   (package
    (name "libidn")
-   (version "1.35")
+   (version "1.37")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnu/libidn/libidn-" version
                                 ".tar.gz"))
             (sha256
              (base32
-              "07pyy0afqikfq51z5kbzbj9ldbd12mri0zvx0mfv3ds6bc0g26pi"))))
+              "1hljls9rkilh04dwiwg388wk8djkac8idijrdysqq2nqbh6rg3iw"))))
    (build-system gnu-build-system)
    ;; FIXME: No Java and C# libraries are currently built.
    (arguments
@@ -59,18 +60,16 @@ Java libraries.")
 (define-public libidn2
   (package
     (name "libidn2")
-    (version "2.3.0")
+    (version "2.3.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnu/libidn/" name "-" version
-                                  ".tar.lz"))
+                                  ".tar.gz"))
               (sha256
                (base32
-                "14yw4w37ya6rcqa7h6p44x6711dwgq2j22xg6k79ybbf04sj88kb"))))
-    (native-inputs
-     `(("lzip" ,lzip)))
+                "0b8gsksj2g9f4iywwdma3v4jcg7i9rqvdxfmclwvbf1n72a89xla"))))
     (inputs
-     `(("libunistring" ,libunistring)))
+     (list libunistring))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags '("--disable-static")))
diff --git a/gnu/packages/libphidget.scm b/gnu/packages/libphidget.scm
index 765b0df9e9..edeeb5b408 100644
--- a/gnu/packages/libphidget.scm
+++ b/gnu/packages/libphidget.scm
@@ -38,7 +38,7 @@
             (sha256
              (base32 "07w54dmr75vq2imngfy66nk1sxlvkzhl2p6g362q0a02f099jy0f"))))
    (build-system gnu-build-system)
-   (inputs `(("libusb" ,libusb)))
+   (inputs (list libusb))
    (outputs '("out" "debug"))
    (home-page "https://www.phidgets.com/")
    (license lgpl3+)
diff --git a/gnu/packages/libreoffice.scm b/gnu/packages/libreoffice.scm
index 0dcdf46ff1..b17a144f7c 100644
--- a/gnu/packages/libreoffice.scm
+++ b/gnu/packages/libreoffice.scm
@@ -6,7 +6,7 @@
 ;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be>
 ;;; Copyright © 2017–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Andy Wingo <wingo@igalia.com>
-;;; Copyright © 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2017, 2018, 2019, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017, 2018, 2019 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
@@ -100,11 +100,9 @@
          "17q84mhy4rb3masvjw24x549irdjmccnc8n04xh58v9l7hxn8v22"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("mdds" ,mdds)
-       ("python" ,python)
-       ("spdlog" ,spdlog)))
+     (list mdds python spdlog))
     (home-page "https://gitlab.com/ixion/ixion")
     (synopsis "General purpose formula parser and interpreter")
     (description "Ixion is a library for calculating the results of formula
@@ -129,12 +127,9 @@ their dependencies automatically upon calculation.")
     (arguments
      `(#:configure-flags '("--disable-static")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("ixion" ,ixion)
-       ("mdds" ,mdds)
-       ("python" ,python)
-       ("zlib" ,zlib)))
+     (list ixion mdds python zlib))
     (home-page "https://gitlab.com/orcus/orcus")
     (synopsis "File import filter library for spreadsheet documents")
     (description "Orcus is a library that provides a collection of standalone
@@ -186,7 +181,7 @@ CSV, CSS and XML.")
                    "None)]\n")))
                #t))))))
     (inputs
-     `(("libreoffice" ,libreoffice)))
+     (list libreoffice))
     (home-page "http://dag.wiee.rs/home-made/unoconv/")
     (synopsis "Convert between any document format supported by LibreOffice")
     (description
@@ -215,13 +210,11 @@ All required fonts must be installed on the converting system.")
                "1cj76cz4mqcy2mgv9l5xlc95bypyk8zbq0ls9cswqrs2y0lhfgwk"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("cppunit" ,cppunit)
-       ("doxygen" ,doxygen)
-       ("pkg-config" ,pkg-config)))
+     (list cppunit doxygen pkg-config))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (propagated-inputs                  ; Referenced by .la files
-     `(("boost" ,boost)))
+     (list boost))
     (arguments
      ;; avoid triggering configure errors by simple inclusion of boost headers
      `(#:configure-flags '("--disable-werror"
@@ -249,12 +242,11 @@ spreadsheets and presentations.")
     (arguments
      `(#:configure-flags '("--disable-werror")))
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("pkg-config" ,pkg-config)))
+     (list doxygen pkg-config))
     (propagated-inputs
-     `(("librevenge" ,librevenge))) ; in Requires field of .pkg
+     (list librevenge)) ; in Requires field of .pkg
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "http://libwpd.sourceforge.net/")
     (synopsis "Library for importing WordPerfect documents")
     (description "Libwpd is a C++ library designed to help process
@@ -272,20 +264,23 @@ into other word processors.")
         (uri (string-append "mirror://sourceforge/libebook/libe-book-"
                             version "/libe-book-" version ".tar.xz"))
         (sha256
-          (base32
-            "1yg1vws1wggzhjw672bpgh2x541g5i9wryf67g51m0r79zrqz3by"))))
+         (base32
+          "1yg1vws1wggzhjw672bpgh2x541g5i9wryf67g51m0r79zrqz3by"))
+        (modules '((guix build utils)))
+        (snippet
+         '(begin
+            ;; This can be removed with the next release.
+            ;; Needed for icu4c compatibility >= 68.0.
+            (substitute* "src/lib/EBOOKCharsetConverter.cpp"
+              (("TRUE, TRUE, &status")
+              "true, true, &status"))))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("cppunit" ,cppunit)
-       ("gperf" ,gperf)
-       ("pkg-config" ,pkg-config)))
+     (list cppunit gperf pkg-config))
     (propagated-inputs ; in Requires or Requires.private field of .pkg
-     `(("icu4c" ,icu4c)
-       ("liblangtag" ,liblangtag)
-       ("librevenge" ,librevenge)
-       ("libxml2" ,libxml2)))
+     (list icu4c liblangtag librevenge libxml2))
     (inputs
-      `(("boost" ,boost)))
+      (list boost))
     (arguments
      ;; avoid triggering configure errors by simple inclusion of boost headers
      `(#:configure-flags '("--disable-werror")))
@@ -313,13 +308,11 @@ ZVR (simple compressed text format).")
          "1b8mc9zzrqypj1v9zdy3ybc48pw0rfr06cyi7n6grvybjjwq9q03"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("cppunit" ,cppunit)
-       ("pkg-config" ,pkg-config)))
+     (list cppunit pkg-config))
     (inputs
-     `(("libxml2" ,libxml2)
-       ("boost" ,boost)))
+     (list libxml2 boost))
     (propagated-inputs         ; in Requires field of .pkg
-     `(("librevenge" ,librevenge)))
+     (list librevenge))
     (home-page "https://sourceforge.net/projects/libepubgen/")
     (synopsis "EPUB generator library for librevenge")
     (description "libepubgen is an EPUB generator for librevenge.  It supports
@@ -340,13 +333,11 @@ way--presentation and vector drawing interfaces.")
                "074x159immf139szkswv2zapnq75p7xk10dbha2p9193hgwggcwr"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("pkg-config" ,pkg-config)))
+     (list doxygen pkg-config))
     (propagated-inputs
-     `(("libwpd" ,libwpd))) ; in Requires field of .pkg
+     (list libwpd)) ; in Requires field of .pkg
     (inputs
-     `(("perl" ,perl)
-       ("zlib" ,zlib)))
+     (list perl zlib))
     (home-page "http://libwpg.sourceforge.net/")
     (synopsis "Library and tools for the WordPerfect Graphics format")
     (description "The libwpg project provides a library and tools for
@@ -367,15 +358,11 @@ working with graphics in the WPG (WordPerfect Graphics) format.")
         "18h0a2gsfxvlv03nlcfvw9bzsflq5sin9agq6za103hr0ab8vcfp"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("cppunit" ,cppunit)
-       ("pkg-config" ,pkg-config)))
+     (list cppunit pkg-config))
     (propagated-inputs ; in Requires field of .pkg
-     `(("curl" ,curl)
-       ("libxml2" ,libxml2)))
+     (list curl libxml2))
     (inputs
-     `(("boost" ,boost)
-       ("cyrus-sasl" ,cyrus-sasl)
-       ("openssl" ,openssl)))
+     (list boost cyrus-sasl openssl))
     (arguments
      `(#:configure-flags
         (list
@@ -409,15 +396,11 @@ as Alfresco or Nuxeo.")
                "1vbfrmnvib3cym0yyyabnd8xpx4f7wp20vnn09s6dln347fajqz7"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("gperf" ,gperf)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list doxygen gperf perl pkg-config))
     (propagated-inputs ; in Requires or Requires.private field of .pkg
-     `(("librevenge" ,librevenge)
-       ("libxml2" ,libxml2)))
+     (list librevenge libxml2))
     (inputs
-     `(("boost" ,boost)))
+     (list boost))
     (home-page "https://wiki.documentfoundation.org/DLP/Libraries/libabw")
     (synopsis "Library for parsing the AbiWord format")
     (description "Libabw is a library that parses the file format of
@@ -437,16 +420,11 @@ AbiWord documents.")
                "1m6dirmyhqwnrpv80z97x5k5hdh4kh8a8zlq3smbjrilc6fj8rjn"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("cppunit" ,cppunit)
-       ("doxygen" ,doxygen)
-       ("pkg-config" ,pkg-config)))
+     (list cppunit doxygen pkg-config))
     (propagated-inputs ; in Requires or Requires.private field of .pkg
-     `(("icu4c" ,icu4c)
-       ("lcms" ,lcms)
-       ("librevenge" ,librevenge)
-       ("zlib" ,zlib)))
+     (list icu4c lcms librevenge zlib))
     (inputs
-     `(("boost" ,boost)))
+     (list boost))
     (home-page "https://wiki.documentfoundation.org/DLP/Libraries/libcdr")
     (synopsis "Library for parsing the CorelDRAW format")
     (description "Libcdr is a library that parses the file format of
@@ -468,19 +446,11 @@ CorelDRAW documents of all versions.")
     (arguments
      `(#:configure-flags '("--with-mdds=1.5")))
     (native-inputs
-     `(("cppunit" ,cppunit)
-       ("doxygen" ,doxygen)
-       ("gperf" ,gperf)
-       ("pkg-config" ,pkg-config)))
+     (list cppunit doxygen gperf pkg-config))
     (propagated-inputs ; in Requires or Requires.private field of .pkg
-     `(("liblangtag" ,liblangtag)
-       ("librevenge" ,librevenge)
-       ("libxml2" ,libxml2)
-       ("zlib" ,zlib)))
+     (list liblangtag librevenge libxml2 zlib))
     (inputs
-     `(("boost" ,boost)
-       ("glm" ,glm)
-       ("mdds" ,mdds)))
+     (list boost glm mdds))
     (home-page "https://wiki.documentfoundation.org/DLP/Libraries/libetonyek")
     (synopsis "Library for parsing the Apple Keynote format")
     (description "Libetonyek is a library that parses the file format of
@@ -500,10 +470,9 @@ Apple Keynote documents.  It currently supports Keynote versions 2 to 5.")
          (base32 "1g9kwxx60q0hpwvs66ys1cb9qg54hfvbivadwli8sfpc085a44hz"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list libtool pkg-config))
     (inputs
-     `(("libxml2" ,libxml2)))
+     (list libxml2))
     (home-page "https://bitbucket.org/tagoh/liblangtag")
     (synopsis "Library to access tags for identifying languages")
     (description "Liblangtag implements an interface to work with tags
@@ -545,7 +514,8 @@ library primarily intended for language guessing.")
                "1b1lvqh68rwij1yvmxy02hsmh7i74ma5767mk8mg5nx6chajshhf"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:phases (modify-phases %standard-phases
+     '(#:configure-flags '("--disable-werror")
+       #:phases (modify-phases %standard-phases
                   (add-before 'build 'adjust-for-ICU-65
                     (lambda _
                       ;; Fix build with ICU 65 and later.  Taken from this
@@ -556,17 +526,11 @@ library primarily intended for language guessing.")
                          (string-append all ";\n")))
                       #t)))))
     (native-inputs
-     `(("cppunit" ,cppunit)
-       ("doxygen" ,doxygen)
-       ("gperf" ,gperf)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list cppunit doxygen gperf perl pkg-config))
     (inputs
-     `(("icu4c" ,icu4c)
-       ("lcms" ,lcms)))
+     (list icu4c lcms))
     (propagated-inputs ; in Requires or Requires.private field of .pkg
-     `(("librevenge" ,librevenge)
-       ("zlib" ,zlib)))
+     (list librevenge zlib))
     (home-page "https://wiki.documentfoundation.org/DLP/Libraries/libfreehand")
     (synopsis "Library for parsing the FreeHand format")
     (description "Libfreehand is a library that parses the file format of
@@ -583,17 +547,22 @@ Aldus/Macromedia/Adobe FreeHand documents.")
       (uri (string-append "https://dev-www.libreoffice.org/src/" name "/"
                           name "-" version ".tar.xz"))
       (sha256 (base32
-               "1fhkn013gzg59f4z7rldpbi0nj7lgdqzxanspsqa6axvmahw2dpg"))))
+               "1fhkn013gzg59f4z7rldpbi0nj7lgdqzxanspsqa6axvmahw2dpg"))
+      (modules '((guix build utils)))
+      (snippet
+       '(begin
+          ;; This can be removed with the next release.
+          ;; https://gerrit.libreoffice.org/c/libmspub/+/73814
+          (substitute* "src/lib/MSPUBMetaData.h"
+            (("include <vector>" all)
+             (string-append all "\n#include <cstdint>")))))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("pkg-config" ,pkg-config)))
+     (list doxygen pkg-config))
     (propagated-inputs ; in Requires or Requires.private field of .pkg
-     `(("icu4c" ,icu4c)
-       ("librevenge" ,librevenge)
-       ("zlib" ,zlib)))
+     (list icu4c librevenge zlib))
     (inputs
-     `(("boost" ,boost)))
+     (list boost))
     (home-page "https://wiki.documentfoundation.org/DLP/Libraries/libmspub")
     (synopsis "Library for parsing the Microsoft Publisher format")
     (description "Libmspub is a library that parses the file format of
@@ -638,13 +607,11 @@ Java.")
     (arguments
      `(#:configure-flags '("--disable-werror")))
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("pkg-config" ,pkg-config)))
+     (list doxygen pkg-config))
     (propagated-inputs ; in Requires field of .pkg
-     `(("librevenge" ,librevenge)))
+     (list librevenge))
     (inputs
-     `(("boost" ,boost)
-       ("zlib" ,zlib)))
+     (list boost zlib))
     (home-page "https://wiki.documentfoundation.org/DLP/Libraries/libpagemaker")
     (synopsis "Library for parsing the PageMaker format")
     (description "Libpagemaker is a library that parses the file format of
@@ -665,17 +632,11 @@ created by PageMaker version 6.x and 7.")
                "0k7adcbbf27l7n453cca1m6s9yj6qvb5j6bsg2db09ybf3w8vbwg"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("cppunit" ,cppunit)
-       ("doxygen" ,doxygen)
-       ("gperf" ,gperf)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list cppunit doxygen gperf perl pkg-config))
     (propagated-inputs ; in Requires or Requires.private field of .pkg
-     `(("icu4c" ,icu4c)
-       ("librevenge" ,librevenge)
-       ("libxml2" ,libxml2)))
+     (list icu4c librevenge libxml2))
     (inputs
-     `(("boost" ,boost)))
+     (list boost))
     (home-page "https://wiki.documentfoundation.org/DLP/Libraries/libvisio")
     (synopsis "Library for parsing the Microsoft Visio format")
     (description "Libvisio is a library that parses the file format of
@@ -695,14 +656,11 @@ Microsoft Visio documents of all versions.")
                "0986c5gw4vdfz7bcmpdfz07inba5wxsx4f6xvndknqj6zlkh082m"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("pkg-config" ,pkg-config)))
+     (list doxygen pkg-config))
     (propagated-inputs ; in Requires field of .pkg
-     `(("librevenge" ,librevenge)))
+     (list librevenge))
     (inputs
-     `(("boost" ,boost)
-       ("libxml2" ,libxml2)
-       ("zlib" ,zlib)))
+     (list boost libxml2 zlib))
     (arguments
      ;; Avoid triggering configure errors by simple inclusion of Boost headers.
      `(#:configure-flags '("--disable-werror")))
@@ -727,13 +685,11 @@ text documents, vector drawings, presentations and spreadsheets.")
        (base32 "1bx5xnw8sk5h26x2z7hfac7hfbm68zqg0jilp15qr0pwxqsf4wmj"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("pkg-config" ,pkg-config)))
+     (list doxygen pkg-config))
     (propagated-inputs                  ; in Requires field of .pc file
-     `(("librevenge" ,librevenge)))
+     (list librevenge))
     (inputs
-     `(("boost" ,boost)
-       ("zlib" ,zlib)))
+     (list boost zlib))
     (home-page "https://sourceforge.net/p/libmwaw/wiki/Home/")
     (synopsis "Import library for some old Macintosh text documents")
     (description "Libmwaw contains some import filters for old Macintosh
@@ -754,10 +710,9 @@ spreadsheet documents.")
                 "1ny8411273k2bq7mnpmcvri3rd46b2j67wfypqkp3y8nhanv0kzr"))))
     (build-system gnu-build-system)
     (inputs
-     `(("librevenge" ,librevenge)
-       ("zlib" ,zlib)))
+     (list librevenge zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/fosnola/libstaroffice")
     (synopsis "Provides LibreOffice support for old StarOffice documents")
     (description "@code{libstaroffice} is an import filter for the document formats
@@ -777,13 +732,11 @@ from the old StarOffice (.sdc, .sdw, ...).")
                "1nsfacqp5sfkyayw7q0wp68lidksd1wjdix8qmsbf0vdl19gn6p2"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("pkg-config" ,pkg-config)))
+     (list doxygen pkg-config))
     (propagated-inputs                  ; in Requires field of .pkg
-     `(("librevenge" ,librevenge)))
+     (list librevenge))
     (inputs
-     `(("boost" ,boost)
-       ("zlib" ,zlib)))
+     (list boost zlib))
     (home-page "http://libwps.sourceforge.net/")
     (synopsis "Import library for Microsoft Works text documents")
     (description "Libwps is a library for importing files in the Microsoft
@@ -806,15 +759,9 @@ Works word processor file format.")
     ;; A harmless 'sign-compare' error pops up on i686 so disable '-Werror'.
     '(#:configure-flags '("--disable-werror")))
    (inputs
-    `(("boost" ,boost)
-      ("icu4c" ,icu4c)
-      ("libpng" ,libpng)
-      ("librevenge" ,librevenge)
-      ("zlib" ,zlib)))
+    (list boost icu4c libpng librevenge zlib))
     (native-inputs
-     `(("cppunit" ,cppunit)
-       ("doxygen" ,doxygen)
-       ("pkg-config" ,pkg-config)))
+     (list cppunit doxygen pkg-config))
     (home-page "https://wiki.documentfoundation.org/DLP/Libraries/libzmf")
     (synopsis "Parses file format of Zoner Callisto/Draw documents")
     (description "Libzmf is a library that parses the file format of Zoner
@@ -838,11 +785,9 @@ Zoner Draw version 4 and 5.")
           "0qxlkd012r45ppd21kldbq9k5ac5nmxz290z6m2kch9l56v768k1"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (inputs
-     `(("perl" ,perl)))
+     (list perl))
     (native-search-paths (list (search-path-specification
                                 (variable "DICPATH")
                                 (files '("share/hunspell")))))
@@ -871,7 +816,7 @@ word compounding or character encoding.")
                (base32
                 "139hfrn5p87sl8hqmgkf6sgvnxrk2mm8vd8xsm8sm98qjnwlg0f9"))))
     (build-system trivial-build-system)
-    (native-inputs `(("unzip" ,unzip)))
+    (native-inputs (list unzip))
     (arguments
      `(#:modules ((guix build utils))
        #:builder (begin
@@ -943,7 +888,7 @@ library.")
                 "14mzf8glxkp2775dcqisb1zv6r8ncm3bvzl46q352rwyl2dg1c59"))))
 
     (build-system trivial-build-system)
-    (native-inputs `(("unzip" ,unzip)))
+    (native-inputs (list unzip))
     (arguments
      `(#:modules ((guix build utils))
        #:builder (begin
@@ -955,8 +900,8 @@ library.")
                           (myspell  (string-append out "/share/myspell"))
                           (doc      (string-append out "/share/doc/"
                                                    ,name))
-                          (unzip (string-append (assoc-ref %build-inputs "unzip")
-                                                "/bin/unzip")))
+                          (unzip (search-input-file %build-inputs
+                                                    "/bin/unzip")))
                      (invoke unzip "-j" "-o" (assoc-ref %build-inputs "source"))
                      (invoke unzip "-j" "-o" "pl_PL.zip")
                      (for-each (cut install-file <> hunspell)
@@ -1002,9 +947,7 @@ library.")
                #t))))
        #:tests? #f))        ; no tests
     (native-inputs
-     `(("hunspell" ,hunspell)
-       ("ispell" ,ispell)
-       ("perl" ,perl)))
+     (list hunspell ispell perl))
     (synopsis "Hunspell dictionary for German (de_DE)")
     (description "This package provides a dictionary for the Hunspell
 spell-checking library.")
@@ -1025,7 +968,7 @@ spell-checking library.")
                "01ap9pr6zzzbp4ky0vy7i1983fwyqy27pl0ld55s30fdxka3ciih"))))
     (build-system gnu-build-system)
     (inputs
-     `(("perl" ,perl)))
+     (list perl))
     (home-page "http://hunspell.sourceforge.net/")
     (synopsis "Hyphenation library")
     (description "Hyphen is a hyphenation library using TeX hyphenation
@@ -1047,10 +990,9 @@ patterns, which are pre-processed by a perl script.")
                "0prh19wy1c74kmzkkavm9qslk99gz8h8wmjvwzjc6lf8v2az708y"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("hunspell" ,hunspell)
-       ("perl" ,perl)))
+     (list hunspell perl))
     (home-page "http://hunspell.sourceforge.net/")
     (synopsis "Thesaurus")
     (description "MyThes is a simple thesaurus that uses a structured text
@@ -1072,14 +1014,11 @@ and to return information on pronunciations, meanings and synonyms.")
                 "0p4lb84m05wqd8qr8ni9sp80ivlm83ffn0nxiv4m42hj22qvcdz1"))))
     (build-system gnu-build-system)
     (inputs
-     `(("boost" ,boost)
-       ("icu4c" ,icu4c)
-       ("zlib" ,zlib)))
+     (list boost icu4c zlib))
     (native-inputs
-     `(("cppunit" ,cppunit)
-       ("pkg-config" ,pkg-config)))
+     (list cppunit pkg-config))
     (propagated-inputs
-     `(("librevenge" ,librevenge))) ; mentioned in Requires field
+     (list librevenge)) ; mentioned in Requires field
     (home-page "https://www.libreoffice.org")
     (synopsis "Library and tools for the QuarkXPress file format")
     (description "libqxp is a library and a set of tools for reading and
@@ -1228,10 +1167,7 @@ converting QuarkXPress file format.  It supports versions 3.1 to 4.1.")
              (substitute* '("shell/source/unix/exec/shellexec.cxx"
                             "shell/source/unix/misc/senddoc.sh")
                (("/usr/bin/xdg-open")
-                (string-append (assoc-ref inputs "xdg-utils")
-                               "/bin/xdg-open")))
-
-             #t))
+                (search-input-file inputs "/bin/xdg-open")))))
          (add-after 'install 'reset-zip-timestamps
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
diff --git a/gnu/packages/libsigsegv.scm b/gnu/packages/libsigsegv.scm
index 927a12f4cf..627447e876 100644
--- a/gnu/packages/libsigsegv.scm
+++ b/gnu/packages/libsigsegv.scm
@@ -26,14 +26,14 @@
 (define-public libsigsegv
   (package
    (name "libsigsegv")
-   (version "2.12")
+   (version "2.13")
    (source (origin
             (method url-fetch)
             (uri (string-append
                   "mirror://gnu/libsigsegv/libsigsegv-"
                   version ".tar.gz"))
             (sha256
-             (base32 "1dlhqf4igzpqayms25lkhycjq1ccavisx8cnb3y4zapbkqsszq9s"))))
+             (base32 "06c1qjiv69hjvbq06mcxdi5hzfadhy28sa83zxspqpxhfr0ywy5y"))))
    (build-system gnu-build-system)
    (home-page "https://www.gnu.org/software/libsigsegv/")
    (synopsis "Library for handling page faults")
diff --git a/gnu/packages/libusb.scm b/gnu/packages/libusb.scm
index 5a5d867c60..01771dffca 100644
--- a/gnu/packages/libusb.scm
+++ b/gnu/packages/libusb.scm
@@ -6,10 +6,11 @@
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Theodoros Foradis <theodoros@foradis.org>
 ;;; Copyright © 2017 Jonathan Brielmaier <jonathan.brielmaier@web.de>
-;;; Copyright © 2018, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018, 2020, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Vagrant Cascadian <vagrant@debian.org>
 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2020 Christopher Howard <christopher@librehacker.com>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -92,9 +93,9 @@ devices on various operating systems.")
         "0nn5icrfm9lkhzw1xjvaks9bq3w6mjg86ggv3fn7kgi4nfvg8kj0"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libusb" ,libusb)))
+     (list libusb))
     (home-page "https://libusb.info")
     (synopsis "Compatibility shim for libusb")
     (description
@@ -151,7 +152,7 @@ version of libusb to run with newer libusb.")
                (setenv "JAVA_HOME" (assoc-ref inputs "jdk"))
                #t)))))
       (inputs
-       `(("libusb" ,libusb)))
+       (list libusb))
       (native-inputs
        `(("jdk" ,icedtea "jdk")))
       (home-page "https://github.com/usb4java/libusb4java/")
@@ -211,10 +212,7 @@ with usb4java.")
                   (string-append "assumeUsbTestsEnabled();" line))))
              #t)))))
     (inputs
-     `(("libusb4java" ,libusb4java)
-       ("java-commons-lang3" ,java-commons-lang3)
-       ("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list libusb4java java-commons-lang3 java-junit java-hamcrest-core))
     (home-page "http://usb4java.org/")
     (synopsis "USB library for Java")
     (description
@@ -225,17 +223,17 @@ implementing @code{javax.usb} (JSR-80).")
 (define-public python-libusb1
   (package
     (name "python-libusb1")
-    (version "1.9.3")
+    (version "2.0.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "libusb1" version))
        (sha256
         (base32
-         "0j8p7jb7sibiiib18vyv3w5rrk0f4d2dl99bs18nwkq6pqvwxrk0"))))
+         "0ikc7z7mdyr8pm0mk3ibab1hqrq4cpi9frmc3p94hsmbyzn85fnk"))))
     (build-system python-build-system)
     (arguments
-     `(#:modules ((srfi srfi-1)
+     '(#:modules ((srfi srfi-1)
                   (guix build utils)
                   (guix build python-build-system))
        #:phases
@@ -244,20 +242,18 @@ implementing @code{javax.usb} (JSR-80).")
            (lambda* (#:key out #:allow-other-keys)
              ;; Was relicensed to LGPL 2.1+, but old COPYING file still left
              ;; in source. Remove it so it does not get installed.
-             (delete-file "COPYING")
-             #t))
+             (delete-file "COPYING")))
          (add-after 'unpack 'fix-libusb-reference
            (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "usb1/libusb1.py"
-               (("libusb_path = ctypes.util.find_library\\(base_name\\)")
+             (substitute* "usb1/_libusb1.py"
+               (("libusb_path = ctypes\\.util\\.find_library\\(base_name\\)")
                 (string-append
                  "libusb_path = \""
                  (find (negate symbolic-link?)
                        (find-files (assoc-ref inputs "libusb")
                                    "^libusb.*\\.so\\..*"))
-                 "\"")))
-             #t)))))
-    (propagated-inputs `(("libusb" ,libusb)))
+                 "\""))))))))
+    (propagated-inputs (list libusb))
     (home-page "https://github.com/vpelletier/python-libusb1")
     (synopsis "Pure-python wrapper for libusb-1.0")
     (description "Libusb is a library that gives applications easy access to
@@ -297,7 +293,7 @@ wrapper for accessing libusb-1.0.")
                  "\"")))
              #t)))))
     (inputs
-     `(("libusb" ,libusb)))
+     (list libusb))
     (home-page "https://pyusb.github.io/pyusb/")
     (synopsis "Python bindings to the libusb library")
     (description
@@ -332,10 +328,7 @@ wrapper for accessing libusb-1.0.")
                                          "50-capablerobot-usbhub.rules"))
                #t))))))
     (propagated-inputs
-     `(("python-click" ,python-click)
-       ("python-construct" ,python-construct)
-       ("python-pyusb" ,python-pyusb)
-       ("python-pyyaml" ,python-pyyaml)))
+     (list python-click python-construct python-pyusb python-pyyaml))
     (home-page
      "https://github.com/CapableRobot/CapableRobot_USBHub_Driver")
     (synopsis
@@ -367,13 +360,9 @@ I2C and SPI devices attached to the USB Hub.")
        ;; 'large.test' and 'largecmp.test'.
        #:parallel-tests? #f))
     (inputs
-     `(("python" ,python)))
+     (list python))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)
-       ("python-cython" ,python-cython))) ; to build Python bindings
+     (list autoconf automake libtool pkg-config python-cython)) ; to build Python bindings
     (home-page "https://libimobiledevice.org/")
     (synopsis "C library to handle Apple Property List files")
     (description "This package provides a small portable C library to handle
@@ -394,8 +383,7 @@ Apple Property List files in binary or XML.")
                 "084vg570g1qb506jd7axg6c080mfsmbf52v3lngzlknsaf2q0snc"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("libplist" ,libplist)))
+     (list pkg-config libplist))
     (home-page "https://libimobiledevice.org/")
     (synopsis "Library to multiplex connections from and to iOS devices")
     (description "This package provides a client library to multiplex
@@ -420,14 +408,11 @@ connections from and to iOS devices by connecting to a socket provided by a
     (arguments
      '(#:configure-flags '("PYTHON_VERSION=3")))
     (propagated-inputs
-     `(("openssl" ,openssl)
-       ("libplist" ,libplist)
-       ("libusbmuxd" ,libusbmuxd)))
+     (list openssl libplist libusbmuxd))
     (inputs
-     `(("python" ,python)))
+     (list python))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python-cython" ,python-cython)))
+     (list pkg-config python-cython))
     (home-page "https://libimobiledevice.org/")
     (synopsis "Protocol library and tools to communicate with Apple devices")
     (description "libimobiledevice is a software library that talks the
@@ -451,10 +436,9 @@ music and video to the device.")
                (base32
                 "11wdv44qwia77sh38n36809ysaib52rwd4fvqwb5ybsbz4p70l1m"))))
     (inputs
-     `(("fuse" ,fuse)
-       ("libimobiledevice" ,libimobiledevice)))
+     (list fuse libimobiledevice))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (build-system gnu-build-system)
     (home-page "https://libimobiledevice.org/")
     (synopsis "Mount iOS devices")
@@ -475,11 +459,9 @@ iOS devices and access their contents.")
                (base32
                 "17idzpxrvkbff0jpynf35df95lh7wsm8vndynp63bxib2w09gv60"))))
     (inputs
-     `(("libplist" ,libplist)
-       ("libusb" ,libusb)
-       ("libimobiledevice" ,libimobiledevice)))
+     (list libplist libusb libimobiledevice))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (build-system gnu-build-system)
     (home-page "https://libimobiledevice.org/")
     (synopsis "Multiplex connections over USB to an iOS device")
@@ -492,22 +474,22 @@ over USB.")
 (define-public libmtp
   (package
     (name "libmtp")
-    (version "1.1.18")
+    (version "1.1.19")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://sourceforge/libmtp/libmtp/" version
                                  "/libmtp-" version ".tar.gz"))
              (sha256
               (base32
-               "1w41l93yi0dmw218daiw36rylkc8rammxx37csh1ij24q18gx03j"))))
+               "0a1jlf5b2c2vylkvdd3cxjs20a96jlbrdyx7rwai5rzmcdpszd6y"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libgcrypt" ,libgcrypt)))
+     (list libgcrypt))
     (propagated-inputs
      ;; libmtp.pc refers to all these.
-     `(("libusb" ,libusb)))
+     (list libusb))
     (arguments
      `(#:configure-flags
        (list "--disable-static"
@@ -543,17 +525,14 @@ proposed for standardization.")
      '(#:configure-flags
        (let ((libid3tag (assoc-ref %build-inputs "libid3tag")))
          (list
+          "CFLAGS=-fcommon"
           ;; libid3tag provides no .pc file, so pkg-config fails to find them.
           (string-append "ID3TAG_CFLAGS=-I" libid3tag "/include")
           (string-append "ID3TAG_LIBS=-L" libid3tag "/lib -lid3tag -lz")))))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("flac" ,flac)
-       ("libvorbis" ,libvorbis)
-       ("libid3tag" ,libid3tag)
-       ("libmtp" ,libmtp)))
+     (list gtk+ flac libvorbis libid3tag libmtp))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://gmtp.sourceforge.net/")
     (synopsis "Simple graphical MTP client")
     (description "gMTP is a simple graphical client for the Media Transfer Protocol
@@ -576,13 +555,9 @@ devices.")
         (base32 "1nr4z4b10vpbh3ss525r7spz4i43zim2ba5qzfl15dgdxshxxivb"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libusb" ,libusb)
-       ("udev" ,eudev)))
+     (list libusb eudev))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (home-page "https://github.com/libusb/hidapi")
     (synopsis "HID API library")
     (description
@@ -637,11 +612,9 @@ HID-Class devices.")
                      (string-append "--prefix=" (assoc-ref outputs "out"))
                      "--single-version-externally-managed" "--root=/"))))))
     (inputs
-     `(("hidapi" ,hidapi)
-       ("libusb" ,libusb)
-       ("eudev" ,eudev)))
+     (list hidapi libusb eudev))
     (native-inputs
-     `(("python-cython" ,python-cython)))
+     (list python-cython))
     (home-page "https://github.com/trezor/cython-hidapi")
     (synopsis "Cython interface to hidapi")
     (description "This package provides a Cython interface to @code{hidapi}.")
diff --git a/gnu/packages/license.scm b/gnu/packages/license.scm
index bc9ca7238d..cc6b03b412 100644
--- a/gnu/packages/license.scm
+++ b/gnu/packages/license.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020, 2021 Michael Rohleder <mike@rohleder.de>
 ;;; Copyright © 2021 Tanguy Le Carrour <tanguy@bioneland.org>
+;;; Copyright © 2022 Felix Gruber <felgru@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -51,11 +52,9 @@
         (base32 "0kznpv628jrndn4nw646f6pl7yqvmacwljlygvsjfdkyh0i4sr2k"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-regexp-pattern" ,perl-regexp-pattern)
-       ("perl-test-exception" ,perl-test-exception)))
+     (list perl-regexp-pattern perl-test-exception))
     (propagated-inputs
-     `(("perl-strictures" ,perl-strictures-2)
-       ("perl-try-tiny" ,perl-try-tiny)))
+     (list perl-strictures-2 perl-try-tiny))
     (home-page "https://metacpan.org/release/Regexp-Pattern-License")
     (synopsis "Regular expressions for legal licenses")
     (description "Regexp::Pattern::License provides a hash of regular
@@ -79,9 +78,9 @@ Regexp::Pattern is a convention for organizing reusable regex patterns.")
          "0fzymv065nn3glwnw34nkyadzw2dh4rcz8avmki4zrnk4k45m01a"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-number-range" ,perl-number-range)))
+     (list perl-number-range))
     (propagated-inputs
-     `(("perl-exporter-tiny" ,perl-exporter-tiny)))
+     (list perl-exporter-tiny))
     (home-page "https://metacpan.org/release/String-Copyright")
     (synopsis "Representation of text-based copyright statements")
     (description "String::Copyright Parses common styles of copyright
@@ -103,10 +102,9 @@ statements and serializes in normalized format.")
          "128pbm9pf5drakm9bpkifc1zg8f005xabfwzg21nc03m5mhfligb"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-try-tiny" ,perl-try-tiny)))
+     (list perl-try-tiny))
     (propagated-inputs
-     `(("perl-data-section" ,perl-data-section)
-       ("perl-text-template" ,perl-text-template)))
+     (list perl-data-section perl-text-template))
     (home-page "https://metacpan.org/release/Software-License")
     (synopsis "Templated software licenses")
     (description "This package provides templated software licenses.")
@@ -126,14 +124,14 @@ statements and serializes in normalized format.")
                 "12l83zf85zagpagizmzy3bwkc659sbzqf18cycx8g4h6d3mc5kqw"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-regexp-pattern" ,perl-regexp-pattern)
-       ("perl-software-license" ,perl-software-license)
-       ("perl-test-requires" ,perl-test-requires)
-       ("perl-test-roo" ,perl-test-roo)
-       ("perl-test-script" ,perl-test-script)
-       ("perl-universal-require" ,perl-universal-require)
-       ("perl-number-range" ,perl-number-range)
-       ("perl-sub-quote" ,perl-sub-quote)))
+     (list perl-regexp-pattern
+           perl-software-license
+           perl-test-requires
+           perl-test-roo
+           perl-test-script
+           perl-universal-require
+           perl-number-range
+           perl-sub-quote))
     (propagated-inputs
      `(("perl-getopt-long-descriptive" ,perl-getopt-long-descriptive)
        ("perl-moo" ,perl-moo-2)
@@ -170,24 +168,23 @@ belonging to various licenses.")
 (define-public reuse
   (package
     (name "reuse")
-    (version "0.13.0")
+    (version "0.14.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "reuse" version))
        (sha256
-        (base32 "00gqpw124lz6kf3gi6m2i1bnxp3k5n3id0bgqff0bj08jga7pj49"))))
+        (base32 "1q84qv982y67inqb67iy3r6z7339593w7zdaaxswjqxfrd1by7bp"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-pytest python-setuptools-scm))
     (inputs
-     `(("python-binaryornot" ,python-binaryornot)
-       ("python-boolean.py" ,python-boolean.py)
-       ("python-debian" ,python-debian)
-       ("python-jinja2" ,python-jinja2)
-       ("python-license-expression" ,python-license-expression)
-       ("python-requests" ,python-requests)))
+     (list python-binaryornot
+           python-boolean.py
+           python-debian
+           python-jinja2
+           python-license-expression
+           python-requests))
     (home-page "https://reuse.software/")
     (synopsis "Provide and verify copyright and licensing information")
     (description
@@ -230,7 +227,7 @@ designed to be simple.")
                 "\"filenames\": [\"CMakeLists.txt\"], \n        \"extensions\": [],"))
              #t)))))
     (propagated-inputs
-     `(("python-regex" ,python-regex)))
+     (list python-regex))
     (home-page "https://github.com/johann-petrak/licenseheaders")
     (synopsis "Add or change license headers for all files in a directory")
     (description
diff --git a/gnu/packages/lighting.scm b/gnu/packages/lighting.scm
index 4718795a8a..5850da84d8 100644
--- a/gnu/packages/lighting.scm
+++ b/gnu/packages/lighting.scm
@@ -54,15 +54,14 @@
          (file-name (git-file-name name version))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("bison" ,bison)
-         ("cppunit" ,cppunit)
-         ("flex" ,flex)
-         ("pkg-config" ,pkg-config)
-
-         ;; For git repository bootstrapping.
-         ("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("libtool" ,libtool)))
+       (list bison
+             cppunit
+             flex
+             pkg-config
+             ;; For git repository bootstrapping.
+             autoconf
+             automake
+             libtool))
       (inputs
        `(("libftdi" ,libftdi)
          ("libmicrohttpd" ,libmicrohttpd)
@@ -70,7 +69,7 @@
          ("libuuid" ,util-linux "lib")
          ("zlib" ,zlib)))
       (propagated-inputs
-       `(("protobuf" ,protobuf)))       ; for pkg-config --libs libola
+       (list protobuf))       ; for pkg-config --libs libola
       (arguments
        `( ;; G++ >= 4.8 macro expansion tracking requires lots of memory, causing
          ;; build to fail on low memory systems.  We disable that with the
diff --git a/gnu/packages/linphone.scm b/gnu/packages/linphone.scm
index 1c60e767b0..285ecb58fd 100644
--- a/gnu/packages/linphone.scm
+++ b/gnu/packages/linphone.scm
@@ -122,7 +122,7 @@
                   (string-append out "/share/BCUnit/Examples")
                   (string-append doc "/share/BCUnit/Examples"))))))))
       (inputs
-       `(("ncurses" ,ncurses)))
+       (list ncurses))
       (synopsis "Belledonne Communications Unit Testing Framework")
       (description "BCUnit is a fork of the defunct project CUnit, with
 several fixes and patches applied.  It is a unit testing framework for
@@ -235,7 +235,7 @@ Communications software like belle-sip, mediastreamer2 and linphone.")
                 ;; name, so have it match.
                 (string-append tester "/share/belr_tester"))))))))
     (inputs
-     `(("bctoolbox" ,bctoolbox)))
+     (list bctoolbox))
     (synopsis "Belledonne Communications Language Recognition Library")
     (description "Belr is Belledonne Communications' language recognition
 library, written in C++11.  It parses text inputs formatted according to a
@@ -293,8 +293,7 @@ IETF.")
                                                      "/bin/belcard_tester")))
                  (invoke belcard_tester))))))))
     (inputs
-     `(("bctoolbox" ,bctoolbox)
-       ("belr" ,belr)))
+     (list bctoolbox belr))
     (synopsis "Belledonne Communications VCard Library")
     (description "Belcard is a C++ library to manipulate VCard standard
 format.")
@@ -445,7 +444,7 @@ such as conferencing.")
      `(("dot" ,graphviz)
        ("doxygen" ,doxygen)))
     (inputs
-     `(("bctoolbox" ,bctoolbox)))
+     (list bctoolbox))
     (synopsis "Belledonne Communications RTP Library")
     (description "oRTP is a C library implementing the RTP protocol.  It
 implements the RFC 3550 standard.")
@@ -552,9 +551,7 @@ including both ARM and x86.")
                                ;;"HTTP stack"
                                "Object"))))))))
     (inputs
-     `(("avahi" ,avahi)
-       ("bctoolbox" ,bctoolbox)
-       ("zlib" ,zlib)))
+     (list avahi bctoolbox 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
@@ -721,9 +718,7 @@ including media capture, encoding and decoding, and rendering.")
      `(("dot" ,graphviz)
        ("doxygen" ,doxygen)))
     (inputs
-     `(("bctoolbox" ,bctoolbox)
-       ("belle-sip" ,belle-sip)
-       ("soci" ,soci)))
+     (list bctoolbox belle-sip 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
@@ -851,21 +846,20 @@ and video calls or instant messaging capabilities to an application.")
                (symlink (string-append liblinphone "/share/belr/grammars")
                         grammar-dest)))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list pkg-config qttools))
     (inputs
-     `(("bctoolbox" ,bctoolbox)
-       ("belcard" ,belcard)
-       ("belr" ,belr)
-       ("liblinphone" ,liblinphone)
-       ("mediastreamer2" ,mediastreamer2)
-       ("ortp" ,ortp)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtgraphicaleffects" ,qtgraphicaleffects)
-       ("qtquickcontrols" ,qtquickcontrols)
-       ("qtquickcontrols2" ,qtquickcontrols2)
-       ("qtsvg" ,qtsvg)))
+     (list bctoolbox
+           belcard
+           belr
+           liblinphone
+           mediastreamer2
+           ortp
+           qtbase-5
+           qtdeclarative
+           qtgraphicaleffects
+           qtquickcontrols
+           qtquickcontrols2
+           qtsvg))
     (synopsis "Desktop client for the Linphone SIP softphone")
     (description "Linphone is a SIP softphone for voice and video over IP calling
 (VoIP) and instant messaging.  Amongst its features are:
@@ -911,10 +905,7 @@ and video calls or instant messaging capabilities to an application.")
          #:configure-flags
          (list "-DENABLE_STATIC=NO")))  ; Not required
       (inputs
-       `(("bctoolbox" ,bctoolbox)
-         ("mediastreamer2" ,mediastreamer2)
-         ("openh264" ,openh264)
-         ("ortp" ,ortp)))
+       (list bctoolbox mediastreamer2 openh264 ortp))
       (synopsis "Media Streamer H.264 Codec")
       (description "MsOpenH264 is an  H.264 encoder/decoder plugin for
  mediastreamer2 based on the openh264 library.")
@@ -942,9 +933,7 @@ and video calls or instant messaging capabilities to an application.")
          #:configure-flags
          (list "-DENABLE_STATIC=NO")))  ; Not required
       (inputs
-       `(("bctoolbox" ,bctoolbox)
-         ("mediastreamer2" ,mediastreamer2)
-         ("ortp" ,ortp)))
+       (list bctoolbox mediastreamer2 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.")
@@ -995,9 +984,7 @@ codec.  It is based on the Skype's SILK implementation.")
                "1maqychrgwy0z4zypa03qp726l2finw64z6cymdzhd58ql3p1lvm"))))
          ("python" ,python-wrapper)))
       (inputs
-       `(("bctoolbox" ,bctoolbox)
-         ("mediastreamer2" ,mediastreamer2)
-         ("ortp" ,ortp)))
+       (list bctoolbox mediastreamer2 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.")
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index 2bda02ff81..94eff5d5c8 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -5,14 +5,14 @@
 ;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019, 2020 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015 Federico Beffa <beffa@fbengineering.ch>
 ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
-;;; Copyright © 2015, 2016, 2017, 2018, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2015, 2016, 2017, 2018, 2020, 2022 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Christine Lemmer-Webber <cwebber@dustycloud.org>
 ;;; Copyright © 2016–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2016, 2017 Alex Kost <alezost@gmail.com>
 ;;; Copyright © 2016 Raymond Nicholson <rain1@openmailbox.org>
 ;;; Copyright © 2016 Mathieu Lirzin <mthl@gnu.org>
-;;; Copyright © 2016, 2018, 2019, 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
-;;; Copyright © 2016, 2018, 2019, 2020 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2016, 2018–2022 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2016, 2018, 2019, 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016 David Craven <david@craven.ch>
 ;;; Copyright © 2016 John Darrington <jmd@gnu.org>
 ;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Marius Bakke <marius@gnu.org>
@@ -22,7 +22,7 @@
 ;;; Copyright © 2017, 2018, 2020, 2021 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2017 José Miguel Sánchez García <jmi2k@openmailbox.com>
 ;;; Copyright © 2017 Gábor Boskovits <boskovits@gmail.com>
-;;; Copyright © 2017, 2019 Mathieu Othacehe <m.othacehe@gmail.com>
+;;; Copyright © 2017, 2019, 2021 Mathieu Othacehe <othacehe@gnu.org>
 ;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2017, 2018, 2019 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2017 nee <nee-git@hidamari.blue>
@@ -53,6 +53,14 @@
 ;;; Copyright © 2021 Solene Rapenne <solene@perso.pw>
 ;;; Copyright © 2021 B. Wilson <elaexuotee@wilsonb.com>
 ;;; Copyright © 2021 Ivan Gankevich <i.gankevich@spbu.ru>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
+;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
+;;; Copyright © 2021 Josselin Poiret <josselin.poiret@protonmail.ch>
+;;; Copyright © 2021 Olivier Dion <olivier.dion@polymtl.ca>
+;;; Copyright © 2021 Solene Rapenne <solene@perso.pw>
+;;; Copyright © 2021 Petr Hodina <phodina@protonmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -76,6 +84,7 @@
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages audio)
   #:use-module (gnu packages autotools)
+  #:use-module (gnu packages avahi)
   #:use-module (gnu packages backup)
   #:use-module (gnu packages base)
   #:use-module (gnu packages bash)
@@ -133,6 +142,7 @@
   #:use-module (gnu packages slang)
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages texinfo)
+  #:use-module (gnu packages textutils)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages valgrind)
   #:use-module (gnu packages video)
@@ -143,10 +153,10 @@
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xorg)
   #:use-module (gnu packages groff)
-  #:use-module (gnu packages rsync)
   #:use-module (gnu packages selinux)
   #:use-module (gnu packages swig)
   #:use-module (guix build-system cmake)
+  #:use-module (guix build-system copy)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system go)
   #:use-module (guix build-system meson)
@@ -347,110 +357,113 @@ 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.14-version "5.14.8")
-(define-public linux-libre-5.14-gnu-revision "gnu")
-(define deblob-scripts-5.14
-  (linux-libre-deblob-scripts
-   linux-libre-5.14-version
-   linux-libre-5.14-gnu-revision
-   (base32 "00vv2a51cvw2nx8iazmiy9i4h3jj9gvvpwz9gxp2v1hcmrsxq935")
-   (base32 "1a0k9i8gnzkyvfr80f8xw2fnxfwddhz1pzicz9fh0y3jzzkzk45p")))
-(define-public linux-libre-5.14-pristine-source
-  (let ((version linux-libre-5.14-version)
-        (hash (base32 "12cvvrxky92z1g9kj7pgb83yg9pnv2fvi7jf0pyagvqjqladl3na")))
-   (make-linux-libre-source version
-                            (%upstream-linux-source version hash)
-                            deblob-scripts-5.14)))
+
+;; Currently, no stable kernels are packaged.
 
 ;; 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.69")
+(define-public linux-libre-5.15-version "5.15.16")
+(define-public linux-libre-5.15-gnu-revision "gnu")
+(define deblob-scripts-5.15
+  (linux-libre-deblob-scripts
+   linux-libre-5.15-version
+   linux-libre-5.15-gnu-revision
+   (base32 "1rfhwfzifmbpnrhmrn3srm736nkm1v6affw915d0fgqzqgi8qfai")
+   (base32 "04fj1x3zmi310cr3m9hxpi26gdcmwfsqciv5yb6q6rrnqjqs1pc0")))
+(define-public linux-libre-5.15-pristine-source
+  (let ((version linux-libre-5.15-version)
+        (hash (base32 "150pzxra564z9xaaclmbbd29x4x9il8y78zz7szi50lzx0a0l2ms")))
+   (make-linux-libre-source version
+                            (%upstream-linux-source version hash)
+                            deblob-scripts-5.15)))
+
+(define-public linux-libre-5.10-version "5.10.93")
 (define-public linux-libre-5.10-gnu-revision "gnu1")
 (define deblob-scripts-5.10
   (linux-libre-deblob-scripts
    linux-libre-5.10-version
    linux-libre-5.10-gnu-revision
-   (base32 "19d1pdsilq1ycnx1zw3vhf9mwdxbi5nmgzm0g1kj1lkkf1y4i1mv")
-   (base32 "1a0k9i8gnzkyvfr80f8xw2fnxfwddhz1pzicz9fh0y3jzzkzk45p")))
+   (base32 "1swy3y851jnnmk3hc0khllpsifb98camlwyskpn1dyvjsgjljd8x")
+   (base32 "024rz0bp3n3r5nkwbib7byx10d72c2fh5cw9iv00diyzgnp819g7")))
 (define-public linux-libre-5.10-pristine-source
   (let ((version linux-libre-5.10-version)
-        (hash (base32 "1jhcl8qh4w4m2jnbp0glr6xbpn7phv17q6w3d247djnc7g2rwbr3")))
+        (hash (base32 "1jxv7can60rc5i2yjgj8frcjvwi1jnba1jl8i3070xmb1d1qqy56")))
    (make-linux-libre-source version
                             (%upstream-linux-source version hash)
                             deblob-scripts-5.10)))
 
-(define-public linux-libre-5.4-version "5.4.149")
+(define-public linux-libre-5.4-version "5.4.173")
 (define-public linux-libre-5.4-gnu-revision "gnu1")
 (define deblob-scripts-5.4
   (linux-libre-deblob-scripts
    linux-libre-5.4-version
    linux-libre-5.4-gnu-revision
-   (base32 "1cdxljvmivdwcy9v9fr5iv0x0d1884pf3876p9nzrly599lz2wnl")
+   (base32 "1nlgk8ajb5wl3aa96h9a0pb9j5a5wmrbpk63varn557x1d00r7wj")
    (base32 "1a0k9i8gnzkyvfr80f8xw2fnxfwddhz1pzicz9fh0y3jzzkzk45p")))
 (define-public linux-libre-5.4-pristine-source
   (let ((version linux-libre-5.4-version)
-        (hash (base32 "1s1zka0iay0drgkdnmzf587jbrg1gx13xv26k5r1qc7dik8xc6p7")))
+        (hash (base32 "0ff2jvwxj55547wvwp94a8bsd610s72906d4nsyhiirrn9sy5s4r")))
    (make-linux-libre-source version
                             (%upstream-linux-source version hash)
                             deblob-scripts-5.4)))
 
-(define-public linux-libre-4.19-version "4.19.208")
+(define-public linux-libre-4.19-version "4.19.225")
 (define-public linux-libre-4.19-gnu-revision "gnu1")
 (define deblob-scripts-4.19
   (linux-libre-deblob-scripts
    linux-libre-4.19-version
    linux-libre-4.19-gnu-revision
-   (base32 "1hiaagdyfy6b0f9ivdy7zq0cd6akaj6v3c4nzikrgsk12vgc1a1q")
+   (base32 "06pqv050bkii0hc2v7ymny5264w1bca8db0dp1pw9mfmjg865am5")
    (base32 "1a0k9i8gnzkyvfr80f8xw2fnxfwddhz1pzicz9fh0y3jzzkzk45p")))
 (define-public linux-libre-4.19-pristine-source
   (let ((version linux-libre-4.19-version)
-        (hash (base32 "1556bk46v7pjd2xrvkldq254yc18cn9jll25ba8zig57562ahkg7")))
+        (hash (base32 "15k7b04zx5ggfjagp8sfrylr9xgwgz3hb2bygdml7ka1jnbv76jb")))
     (make-linux-libre-source version
                              (%upstream-linux-source version hash)
                              deblob-scripts-4.19)))
 
-(define-public linux-libre-4.14-version "4.14.248")
+(define-public linux-libre-4.14-version "4.14.262")
 (define-public linux-libre-4.14-gnu-revision "gnu1")
 (define deblob-scripts-4.14
   (linux-libre-deblob-scripts
    linux-libre-4.14-version
    linux-libre-4.14-gnu-revision
-   (base32 "0cnax38650m9sxiwvc1xm5saymlsmx427j3jqpx34df2ah2rnrwf")
+   (base32 "02rxvr0gmxb3zfsyyzdmzgfq04gkdkv1cc38md0xfl0mxzdzdfyk")
    (base32 "1a0k9i8gnzkyvfr80f8xw2fnxfwddhz1pzicz9fh0y3jzzkzk45p")))
 (define-public linux-libre-4.14-pristine-source
   (let ((version linux-libre-4.14-version)
-        (hash (base32 "0m5nsd41b08xppcf7vvx8zgj3h3sp3n6xrgxfkccn6n4bk7yx4y9")))
+        (hash (base32 "05yl51r5n3q9l8pq6azx3bbl69l79lk8vkdivy3cvgzdh59pizac")))
     (make-linux-libre-source version
                              (%upstream-linux-source version hash)
                              deblob-scripts-4.14)))
 
-(define-public linux-libre-4.9-version "4.9.284")
+(define-public linux-libre-4.9-version "4.9.297")
 (define-public linux-libre-4.9-gnu-revision "gnu1")
 (define deblob-scripts-4.9
   (linux-libre-deblob-scripts
    linux-libre-4.9-version
    linux-libre-4.9-gnu-revision
-   (base32 "1n74ddrifnw06hx7ih2sk8jaiqlm1jyyhswyjpxiyhrrcvjcilch")
+   (base32 "0nai5m4rbh37qaj1xf2qj7656l2gacfh0847q5d07y22b048fq5n")
    (base32 "1a0k9i8gnzkyvfr80f8xw2fnxfwddhz1pzicz9fh0y3jzzkzk45p")))
 (define-public linux-libre-4.9-pristine-source
   (let ((version linux-libre-4.9-version)
-        (hash (base32 "0054b0cm0h2mbf6rxzdgd3c2rfz7xa32qkyr5lv58l2852hf0ri8")))
+        (hash (base32 "17yqnr6p0prgcw8nikjmi49ll4s77ylaixcja5m15cq9x36shfz4")))
     (make-linux-libre-source version
                              (%upstream-linux-source version hash)
                              deblob-scripts-4.9)))
 
-(define-public linux-libre-4.4-version "4.4.285")
+(define-public linux-libre-4.4-version "4.4.299")
 (define-public linux-libre-4.4-gnu-revision "gnu1")
 (define deblob-scripts-4.4
   (linux-libre-deblob-scripts
    linux-libre-4.4-version
    linux-libre-4.4-gnu-revision
-   (base32 "11397dgj6cdfv6anxrj7jwgvnqvwh5i0ci6c8mb85ry6h4fnfmq4")
+   (base32 "1mmnv77432la5dkhpy1n8w59c0v6l08fyf2ggh294gyrx8nbci11")
    (base32 "1a0k9i8gnzkyvfr80f8xw2fnxfwddhz1pzicz9fh0y3jzzkzk45p")))
 (define-public linux-libre-4.4-pristine-source
   (let ((version linux-libre-4.4-version)
-        (hash (base32 "0h8jzb2cg0wg4s07iqkghfxkxrnlxadwk3i3gvg2xs3ra0wrisp1")))
+        (hash (base32 "019hmplv1zhghl840qky9awziba3gx7jm80khny44gjfbyzf7d4v")))
     (make-linux-libre-source version
                              (%upstream-linux-source version hash)
                              deblob-scripts-4.4)))
@@ -483,21 +496,15 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
     (patches (append (origin-patches source)
                      patches))))
 
-(define-public linux-libre-5.14-source
-  (source-with-patches linux-libre-5.14-pristine-source
+(define-public linux-libre-5.15-source
+  (source-with-patches linux-libre-5.15-pristine-source
                        (list %boot-logo-patch
-                             %linux-libre-arm-export-__sync_icache_dcache-patch
-                             ;; Pinebook Pro patch to fix LCD display
-                             (search-patch
-                              "linux-libre-arm64-generic-pinebook-lcd.patch"))))
+                             %linux-libre-arm-export-__sync_icache_dcache-patch)))
 
 (define-public linux-libre-5.10-source
   (source-with-patches linux-libre-5.10-pristine-source
                        (list %boot-logo-patch
-                             %linux-libre-arm-export-__sync_icache_dcache-patch
-                             ;; Pinebook Pro patch to fix LCD display
-                             (search-patch
-                              "linux-libre-arm64-generic-pinebook-lcd.patch"))))
+                             %linux-libre-arm-export-__sync_icache_dcache-patch)))
 
 (define-public linux-libre-5.4-source
   (source-with-patches linux-libre-5.4-pristine-source
@@ -547,14 +554,12 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
                      ,@(if (version>=? version "4.16")
                            `(("flex" ,flex)
                              ("bison" ,bison))
-                           '())
-                     ,@(if (version>=? version "5.3")
-                           `(("rsync" ,rsync))
                            '())))
     (arguments
      `(#:modules ((guix build gnu-build-system)
                   (guix build utils)
-                  (srfi srfi-1))
+                  (srfi srfi-1)
+                  (ice-9 match))
        #:phases
        (modify-phases %standard-phases
          (delete 'configure)
@@ -565,32 +570,37 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
                               (%current-system))))
                    (defconfig ,(system->defconfig
                                 (or (%current-target-system)
-                                    (%current-system)))))
+                                    (%current-system))))
+                   (make-target ,(if (version>=? version "5.3")
+                                     "headers"
+                                     "headers_check")))
                (setenv "ARCH" arch)
                (format #t "`ARCH' set to `~a'~%" (getenv "ARCH"))
                (invoke "make" defconfig)
-               (invoke "make" "mrproper" "headers_check"))))
+               (invoke "make" "mrproper" make-target))))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
-               (invoke "make"
-                       (string-append "INSTALL_HDR_PATH=" out)
-                       "headers_install")
+
+               ;; Mimic the quiet_cmd_headers_install target to avoid a
+               ;; dependency on rsync.
+               (for-each (lambda (file)
+                           (let ((destination (string-append
+                                               out "/include/"
+                                               ;; Drop the 'usr/include' prefix.
+                                               (match (string-split file #\/)
+                                                 ((_ _ path ...)
+                                                  (string-join path "/"))))))
+                             (format #t "`~a' -> `~a'~%" file destination)
+                             (install-file file (dirname destination))))
+                         (find-files "usr/include" "\\.h$"))
 
                (mkdir (string-append out "/include/config"))
                (call-with-output-file
                    (string-append out
                                   "/include/config/kernel.release")
                  (lambda (p)
-                   (format p "~a-default~%" ,version)))
-
-               ;; Remove the '.install' and '..install.cmd' files; the
-               ;; latter contains store paths, which pulls in bootstrap
-               ;; binaries in the build environment, and prevents bit
-               ;; reproducibility for the bootstrap binaries.
-               (for-each delete-file (find-files out "\\.install"))
-
-               #t))))
+                   (format p "~a-default~%" ,version)))))))
        #:allowed-references ()
        #:tests? #f))
     (home-page "https://www.gnu.org/software/linux-libre/")
@@ -598,10 +608,10 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
     (description "Headers of the Linux-Libre kernel.")
     (license license:gpl2)))
 
-(define-public linux-libre-headers-5.14
-  (make-linux-libre-headers* linux-libre-5.14-version
-                             linux-libre-5.14-gnu-revision
-                             linux-libre-5.14-source))
+(define-public linux-libre-headers-5.15
+  (make-linux-libre-headers* linux-libre-5.15-version
+                             linux-libre-5.15-gnu-revision
+                             linux-libre-5.15-source))
 
 (define-public linux-libre-headers-5.10
   (make-linux-libre-headers* linux-libre-5.10-version
@@ -635,11 +645,11 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
 
 ;; The following package is used in the early bootstrap, and thus must be kept
 ;; stable and with minimal build requirements.
-(define-public linux-libre-headers-5.4.20
-  (make-linux-libre-headers "5.4.20" "gnu"
-                            "1qxhf6dmcwjblzx8fgn6vr10p38xw10iwh6d1y1v1mxb25y30b47"))
+(define-public linux-libre-headers-5.10.35
+  (make-linux-libre-headers "5.10.35" "gnu"
+                            "0q2rnchad55d49f3rajrkazz0fcjv1irwrdb1hwjnl01fzm2gjk3"))
 
-(define-public linux-libre-headers linux-libre-headers-5.4.20)
+(define-public linux-libre-headers linux-libre-headers-5.10.35)
 
 
 ;;;
@@ -798,99 +808,105 @@ for ARCH and optionally VARIANT, or #f if there is no such configuration."
            ((? string? config)
             `(("kconfig" ,config))))))
     (arguments
-     `(#:modules ((guix build gnu-build-system)
-                  (guix build utils)
-                  (srfi srfi-1)
-                  (srfi srfi-26)
-                  (ice-9 ftw)
-                  (ice-9 match))
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'patch-/bin/pwd
-           (lambda _
-             (substitute* (find-files "." "^Makefile(\\.include)?$")
-               (("/bin/pwd") "pwd"))
-             #t))
-         (replace 'configure
-           (lambda* (#:key inputs native-inputs target #:allow-other-keys)
-             ;; Avoid introducing timestamps
-             (setenv "KCONFIG_NOTIMESTAMP" "1")
-             (setenv "KBUILD_BUILD_TIMESTAMP" (getenv "SOURCE_DATE_EPOCH"))
-
-             ;; Set ARCH and CROSS_COMPILE
-             (let ((arch ,(system->linux-architecture
-                           (or (%current-target-system)
-                               (%current-system)))))
-               (setenv "ARCH" arch)
-               (format #t "`ARCH' set to `~a'~%" (getenv "ARCH"))
-
-               (when target
-                 (setenv "CROSS_COMPILE" (string-append target "-"))
-                 (format #t "`CROSS_COMPILE' set to `~a'~%"
-                         (getenv "CROSS_COMPILE"))))
-
-             (setenv "EXTRAVERSION" ,(and extra-version
-                                          (string-append "-" extra-version)))
-
-             (let ((build  (assoc-ref %standard-phases 'build))
-                   (config (assoc-ref (or native-inputs inputs) "kconfig")))
-
-               ;; Use a custom kernel configuration file or a default
-               ;; configuration file.
-               (if config
-                   (begin
-                     (copy-file config ".config")
-                     (chmod ".config" #o666))
-                   (invoke "make" ,defconfig))
-
-               ;; Appending works even when the option wasn't in the
-               ;; file.  The last one prevails if duplicated.
-               (let ((port (open-file ".config" "a"))
-                     (extra-configuration ,(config->string extra-options)))
-                 (display extra-configuration port)
-                 (close-port port))
-
-               (invoke "make" "oldconfig"))))
-         (replace 'install
-           (lambda* (#:key inputs native-inputs outputs #:allow-other-keys)
-             (let* ((out    (assoc-ref outputs "out"))
-                    (moddir (string-append out "/lib/modules"))
-                    (dtbdir (string-append out "/lib/dtbs")))
-               ;; Install kernel image, kernel configuration and link map.
-               (for-each (lambda (file) (install-file file out))
-                         (find-files "." "^(\\.config|bzImage|zImage|Image|vmlinuz|System\\.map|Module\\.symvers)$"))
-               ;; Install device tree files
-               (unless (null? (find-files "." "\\.dtb$"))
-                 (mkdir-p dtbdir)
-                 (invoke "make" (string-append "INSTALL_DTBS_PATH=" dtbdir)
-                         "dtbs_install"))
-               ;; Install kernel modules
-               (mkdir-p moddir)
-               (invoke "make"
-                       ;; Disable depmod because the Guix system's module directory
-                       ;; is an union of potentially multiple packages.  It is not
-                       ;; possible to use depmod to usefully calculate a dependency
-                       ;; graph while building only one of those packages.
-                       "DEPMOD=true"
-                       (string-append "MODULE_DIR=" moddir)
-                       (string-append "INSTALL_PATH=" out)
-                       (string-append "INSTALL_MOD_PATH=" out)
-                       "INSTALL_MOD_STRIP=1"
-                       "modules_install")
-               (let* ((versions (filter (lambda (name)
-                                          (not (string-prefix? "." name)))
-                                        (scandir moddir)))
-                      (version (match versions
-                                ((x) x))))
-                 ;; There are symlinks to the build and source directory,
-                 ;; both of which will point to target /tmp/guix-build*
-                 ;; and thus not be useful in a profile.  Delete the symlinks.
-                 (false-if-file-not-found
-                  (delete-file (string-append moddir "/" version "/build")))
-                 (false-if-file-not-found
-                  (delete-file (string-append moddir "/" version "/source"))))
-               #t))))
-       #:tests? #f))
+     (list #:modules '((guix build gnu-build-system)
+                       (guix build utils)
+                       (srfi srfi-1)
+                       (srfi srfi-26)
+                       (ice-9 ftw)
+                       (ice-9 match))
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'patch-/bin/pwd
+                 (lambda _
+                   (substitute* (find-files "." "^Makefile(\\.include)?$")
+                     (("/bin/pwd") "pwd"))))
+               (replace 'configure
+                 (lambda* (#:key inputs target #:allow-other-keys)
+                   ;; Avoid introducing timestamps.
+                   (setenv "KCONFIG_NOTIMESTAMP" "1")
+                   (setenv "KBUILD_BUILD_TIMESTAMP"
+                           (getenv "SOURCE_DATE_EPOCH"))
+
+                   ;; Other variables useful for reproducibility.
+                   (setenv "KBUILD_BUILD_USER" "guix")
+                   (setenv "KBUILD_BUILD_HOST" "guix")
+
+                   ;; Set ARCH and CROSS_COMPILE.
+                   (let ((arch #$(system->linux-architecture
+                                  (or (%current-target-system)
+                                      (%current-system)))))
+                     (setenv "ARCH" arch)
+                     (format #t "`ARCH' set to `~a'~%" (getenv "ARCH"))
+
+                     (when target
+                       (setenv "CROSS_COMPILE" (string-append target "-"))
+                       (format #t "`CROSS_COMPILE' set to `~a'~%"
+                               (getenv "CROSS_COMPILE"))))
+
+                   (setenv "EXTRAVERSION"
+                           #$(and extra-version
+                                  (string-append "-" extra-version)))
+
+                   (let ((build  (assoc-ref %standard-phases 'build))
+                         (config (assoc-ref inputs "kconfig")))
+
+                     ;; Use a custom kernel configuration file or a default
+                     ;; configuration file.
+                     (if config
+                         (begin
+                           (copy-file config ".config")
+                           (chmod ".config" #o666))
+                         (invoke "make" #$defconfig))
+
+                     ;; Appending works even when the option wasn't in the
+                     ;; file.  The last one prevails if duplicated.
+                     (let ((port (open-file ".config" "a"))
+                           (extra-configuration #$(config->string extra-options)))
+                       (display extra-configuration port)
+                       (close-port port))
+
+                     (invoke "make" "oldconfig"))))
+               (replace 'install
+                 (lambda* (#:key inputs native-inputs #:allow-other-keys)
+                   (let ((moddir (string-append #$output "/lib/modules"))
+                         (dtbdir (string-append #$output "/lib/dtbs")))
+                     ;; Install kernel image, kernel configuration and link map.
+                     (for-each (lambda (file) (install-file file #$output))
+                               (find-files "." "^(\\.config|bzImage|zImage|Image|vmlinuz|System\\.map|Module\\.symvers)$"))
+                     ;; Install device tree files
+                     (unless (null? (find-files "." "\\.dtb$"))
+                       (mkdir-p dtbdir)
+                       (invoke "make" (string-append "INSTALL_DTBS_PATH=" dtbdir)
+                               "dtbs_install"))
+                     ;; Install kernel modules
+                     (mkdir-p moddir)
+                     (invoke "make"
+                             ;; Disable depmod because the Guix system's
+                             ;; module directory is an union of potentially
+                             ;; multiple packages.  It is not possible to use
+                             ;; depmod to usefully calculate a dependency
+                             ;; graph while building only one of them.
+                             "DEPMOD=true"
+                             (string-append "MODULE_DIR=" moddir)
+                             (string-append "INSTALL_PATH=" #$output)
+                             (string-append "INSTALL_MOD_PATH=" #$output)
+                             "INSTALL_MOD_STRIP=1"
+                             "modules_install")
+                     (let* ((versions (filter (lambda (name)
+                                                (not (string-prefix? "." name)))
+                                              (scandir moddir)))
+                            (version (match versions
+                                       ((x) x))))
+                       ;; There are symlinks to the build and source directory.
+                       ;; Both will point to target /tmp/guix-build* and thus
+                       ;; not be useful in a profile.  Delete the symlinks.
+                       (false-if-file-not-found
+                        (delete-file
+                         (string-append moddir "/" version "/build")))
+                       (false-if-file-not-found
+                        (delete-file
+                         (string-append moddir "/" version "/source"))))))))
+           #:tests? #f))
     (home-page "https://www.gnu.org/software/linux-libre/")
     (synopsis "100% free redistribution of a cleaned Linux kernel")
     (description
@@ -904,18 +920,18 @@ It has been modified to remove all non-free binary blobs.")
 ;;; Generic kernel packages.
 ;;;
 
-(define-public linux-libre-5.14
-  (make-linux-libre* linux-libre-5.14-version
-                     linux-libre-5.14-gnu-revision
-                     linux-libre-5.14-source
+(define-public linux-libre-5.15
+  (make-linux-libre* linux-libre-5.15-version
+                     linux-libre-5.15-gnu-revision
+                     linux-libre-5.15-source
                      '("x86_64-linux" "i686-linux" "armhf-linux" "aarch64-linux" "riscv64-linux")
                      #:configuration-file kernel-config))
 
-(define-public linux-libre-version         linux-libre-5.14-version)
-(define-public linux-libre-gnu-revision    linux-libre-5.14-gnu-revision)
-(define-public linux-libre-pristine-source linux-libre-5.14-pristine-source)
-(define-public linux-libre-source          linux-libre-5.14-source)
-(define-public linux-libre                 linux-libre-5.14)
+(define-public linux-libre-version         linux-libre-5.15-version)
+(define-public linux-libre-gnu-revision    linux-libre-5.15-gnu-revision)
+(define-public linux-libre-pristine-source linux-libre-5.15-pristine-source)
+(define-public linux-libre-source          linux-libre-5.15-source)
+(define-public linux-libre                 linux-libre-5.15)
 
 (define-public linux-libre-5.10
   (make-linux-libre* linux-libre-5.10-version
@@ -969,11 +985,11 @@ It has been modified to remove all non-free binary blobs.")
 ;; Linux-Libre.
 ;; Reference: https://jxself.org/linux-libre/
 
-(define-public linux-libre-lts-version         linux-libre-5.10-version)
-(define-public linux-libre-lts-gnu-revision    linux-libre-5.10-gnu-revision)
-(define-public linux-libre-lts-pristine-source linux-libre-5.10-pristine-source)
-(define-public linux-libre-lts-source          linux-libre-5.10-source)
-(define-public linux-libre-lts                 linux-libre-5.10)
+(define-public linux-libre-lts-version         linux-libre-5.15-version)
+(define-public linux-libre-lts-gnu-revision    linux-libre-5.15-gnu-revision)
+(define-public linux-libre-lts-pristine-source linux-libre-5.15-pristine-source)
+(define-public linux-libre-lts-source          linux-libre-5.15-source)
+(define-public linux-libre-lts                 linux-libre-5.15)
 
 
 ;;;
@@ -993,9 +1009,6 @@ It has been modified to remove all non-free binary blobs.")
                         ("CONFIG_RTC_DRV_RK808" . #t))
                       %default-extra-linux-options)))
 
-(define-public linux-libre-arm-veyron
-  (deprecated-package "linux-libre-arm-veyron" linux-libre-arm-generic))
-
 (define-public linux-libre-arm-generic-5.10
   (make-linux-libre* linux-libre-5.10-version
                      linux-libre-5.10-gnu-revision
@@ -1149,9 +1162,9 @@ It has been modified to remove all non-free binary blobs.")
 (define-public linux-libre-with-bpf
   (let ((base-linux-libre
          (make-linux-libre*
-          linux-libre-5.14-version
-          linux-libre-5.14-gnu-revision
-          linux-libre-5.14-source
+          linux-libre-5.15-version
+          linux-libre-5.15-gnu-revision
+          linux-libre-5.15-source
           '("x86_64-linux" "i686-linux" "armhf-linux"
             "aarch64-linux" "riscv64-linux")
           #:extra-version "bpf"
@@ -1161,7 +1174,8 @@ It has been modified to remove all non-free binary blobs.")
                   %default-extra-linux-options))))
     (package
       (inherit base-linux-libre)
-      (inputs `(("cpio" ,cpio) ,@(package-inputs base-linux-libre))))))
+      (inputs (modify-inputs (package-inputs base-linux-libre)
+                (prepend cpio))))))
 
 
 
@@ -1184,25 +1198,25 @@ It has been modified to remove all non-free binary blobs.")
         (base32 "1s7h9y3adyfhw7cjldlfmid79lrwz3vqlvziw9nwd6x5qdj4w9vp"))))
     (build-system linux-module-build-system)
     (arguments
-     `(#:tests? #f                      ; no tests
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'install 'patch-shebangs-harder
-           ;; The (only) shebangs in examples/ don't justify a reference.
-           ;; However, do substitute a more portable one than the original.
-           (lambda _
-             (substitute* (find-files "examples" ".")
-               (("^(#! *)/[^ ]*/" _ shebang)
-                (string-append shebang "/usr/bin/env ")))))
-         (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)))
-               (for-each (lambda (file)
-                           (let ((target (string-append doc "/" file)))
-                             (mkdir-p (dirname target))
-                             (copy-recursively file target)))
-                         (list "README.md" "examples"))))))))
+     (list #:tests? #f                  ; no tests
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-before 'install 'patch-shebangs-harder
+                 ;; The (only) shebangs in examples/ don't justify a reference.
+                 ;; However, do substitute a slightly more portable one.
+                 (lambda _
+                   (substitute* (find-files "examples" ".")
+                     (("^(#! *)/[^ ]*/" _ shebang)
+                      (string-append shebang "/usr/bin/env ")))))
+               (add-after 'install 'install-documentation
+                 (lambda _
+                   (let* ((doc (string-append #$output "/share/doc/"
+                                              #$name "-" #$version)))
+                     (for-each (lambda (file)
+                                 (let ((target (string-append doc "/" file)))
+                                   (mkdir-p (dirname target))
+                                   (copy-recursively file target)))
+                               (list "README.md" "examples"))))))))
     (home-page "https://github.com/nix-community/acpi_call")
     (synopsis "Linux kernel module to perform ACPI method calls")
     (description
@@ -1219,7 +1233,7 @@ and should be used with caution, especially on untested models.")
 (define-public corefreq
   (package
     (name "corefreq")
-    (version "1.86.7")
+    (version "1.87.4")
     (source
      (origin
        (method git-fetch)
@@ -1228,48 +1242,48 @@ and should be used with caution, especially on untested models.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1k8pyxcahc78kcc8q1h76dr91i1r33jciqhgkajkz3xa28qx8mhn"))))
+        (base32 "01g1smhfzb02gmfjm8c7rchc79dan9jc9pv9c0f8f7fly2hy5zvs"))))
     (build-system linux-module-build-system)
     (outputs (list "out" "linux-module"))
     (arguments
-     `(#:imported-modules ((guix build gnu-build-system)
-                           ,@%linux-module-build-system-modules)
-       #:modules ((guix build linux-module-build-system)
-                  ((guix build gnu-build-system) #:prefix gnu:)
-                  (guix build utils))
-       #:make-flags
-       (list (string-append "CC=" ,(cc-for-target))
-             "OPTIM_LVL=3"
-             (string-append "PREFIX=" (assoc-ref %outputs "out")))
-       #:tests? #f                      ; no test suite
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'untangle-module-targets
-           ;; Having to build everything in one pass would complicate the
-           ;; definition.  Let each build system handle what it's good at.
-           (lambda _
-             (substitute* "Makefile"
-               ((".*MAKE.*KERNELDIR.*") ""))))
-         (add-after 'build 'gnu:build
-           (assoc-ref gnu:%standard-phases 'build))
-         (add-after 'install 'gnu:install
-           (assoc-ref gnu:%standard-phases 'install))
-         (add-after 'install 'separate-module
-           (lambda* (#:key outputs #:allow-other-keys)
-             ;; Adding INSTALL_MOD_PATH= to #:make-flags would still create an
-             ;; empty <out>/lib/modules directory, so just do it all by hand.
-             (let* ((out    (assoc-ref outputs "out"))
-                    (module (assoc-ref outputs "linux-module")))
-               (mkdir-p (string-append module "/lib"))
-               (rename-file (string-append out    "/lib/modules")
-                            (string-append module "/lib/modules")))))
-         (add-after 'install 'install-README
-           ;; There is no proper documentation.  Provide something.
-           (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)))))))
+     (list #:imported-modules `((guix build gnu-build-system)
+                                ,@%linux-module-build-system-modules)
+           #:modules `((guix build linux-module-build-system)
+                       ((guix build gnu-build-system) #:prefix gnu:)
+                       (guix build utils))
+           #:make-flags
+           #~(list (string-append "CC=" #$(cc-for-target))
+               "OPTIM_LVL=3"
+               (string-append "PREFIX=" #$output))
+           #:tests? #f                      ; no test suite
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'untangle-module-targets
+                 ;; Having to build everything in one pass would complicate the
+                 ;; definition.  Let each build system handle what it's good at.
+                 (lambda _
+                   (substitute* "Makefile"
+                     ((".*MAKE.*KERNELDIR.*") ""))))
+               (add-after 'build 'gnu:build
+                 (assoc-ref gnu:%standard-phases 'build))
+               (add-after 'install 'gnu:install
+                 (assoc-ref gnu:%standard-phases 'install))
+               (add-after 'install 'separate-module
+                 (lambda* (#:key outputs #:allow-other-keys)
+                   ;; Adding INSTALL_MOD_PATH= to #:make-flags would still create an
+                   ;; empty <out>/lib/modules directory, so just do it all by hand.
+                   (let* ((out    (assoc-ref outputs "out"))
+                          (module (assoc-ref outputs "linux-module")))
+                     (mkdir-p (string-append module "/lib"))
+                     (rename-file (string-append out    "/lib/modules")
+                                  (string-append module "/lib/modules")))))
+               (add-after 'install 'install-README
+                 ;; There is no proper documentation.  Provide something.
+                 (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)))))))
     (home-page "https://github.com/cyring/CoreFreq")
     (synopsis
      "Measure performance data & tweak low-level settings on x86-64 CPUs")
@@ -1319,7 +1333,7 @@ This package provides the @command{corefreqd} data collection daemon, the
         (base32 "1qnbfj60i8nn2ahgj2zp5ixd79bb0wl1ld36x3igws2f3c0f5pfi"))))
     (build-system linux-module-build-system)
     (arguments
-     `(#:tests? #f))                    ; no test suite
+     (list #:tests? #f))                ; no test suite
     (home-page "https://source.puri.sm/nicole.faerber/librem-ec-acpi-dkms")
     (synopsis "Linux kernel module to control the Librem Embedded Controller")
     (description
@@ -1331,8 +1345,8 @@ and the notification, WiFi, and Bluetooth LED.")
     (license license:gpl2)))
 
 (define-public rtl8821ce-linux-module
-  (let ((commit "897e7c4c15dd5a0a569745dc223d969a26ff5bfc")
-        (revision "3"))
+  (let ((commit "ca204c60724d23ab10244f920d4e50759ed1affb")
+        (revision "4"))
     (package
       (name "rtl8821ce-linux-module")
       (version (git-version "0.0.0" revision commit))
@@ -1345,25 +1359,26 @@ and the notification, WiFi, and Bluetooth LED.")
          (file-name (git-file-name name version))
          (sha256
           (base32
-           "0935dzz0njxh78wfd17yqah1dxn6b3kaszvzclwwrwwhwcrdp80j"))))
+           "18ma8a8h1l90dss0k6al7q6plwr57jc9g67p22g9917k1jfbhm97"))))
       (build-system linux-module-build-system)
       (arguments
-       `(#:make-flags
-         (list (string-append "CC=" ,(cc-for-target))
-               (string-append "KSRC="
-                              (assoc-ref %build-inputs "linux-module-builder")
-                              "/lib/modules/build"))
-         #:phases
-         (modify-phases %standard-phases
-           (replace 'build
-             (lambda* (#:key (make-flags '()) (parallel-build? #t)
-                       #:allow-other-keys)
-               (apply invoke "make"
-                      `(,@(if parallel-build?
-                              `("-j" ,(number->string (parallel-job-count)))
-                              '())
-                        ,@make-flags)))))
-         #:tests? #f))                  ; no test suite
+       (list #:make-flags
+             #~(list (string-append "CC=" #$(cc-for-target))
+                     (string-append "KSRC="
+                                    (assoc-ref %build-inputs
+                                               "linux-module-builder")
+                                    "/lib/modules/build"))
+             #:phases
+             #~(modify-phases %standard-phases
+                 (replace 'build
+                   (lambda* (#:key (make-flags '()) (parallel-build? #t)
+                                   #:allow-other-keys)
+                     (apply invoke "make"
+                            `(,@(if parallel-build?
+                                    `("-j" ,(number->string (parallel-job-count)))
+                                    '())
+                              ,@make-flags)))))
+             #:tests? #f))                  ; no test suite
       (home-page "https://github.com/tomaspinho/rtl8821ce")
       (synopsis "Linux driver for Realtek RTL8821CE wireless network adapters")
       (description "This is Realtek's RTL8821CE Linux driver for wireless
@@ -1371,8 +1386,8 @@ network adapters.")
       (license license:gpl2))))
 
 (define-public rtl8812au-aircrack-ng-linux-module
-  (let ((commit "b8167e66b4ac046b3b76c2c40008d84528e91594")
-        (revision "5"))
+  (let ((commit "307d694076b056588c652c2bdaa543a89eb255d9")
+        (revision "6"))
     (package
       (inherit rtl8821ce-linux-module)
       (name "rtl8812au-aircrack-ng-linux-module")
@@ -1385,15 +1400,15 @@ network adapters.")
                (commit commit)))
          (file-name (git-file-name name version))
          (sha256
-          (base32 "1940f2yz5c4q2fhcd91zfzl32fhdsgr297vzamm7nd8kdk0gymi2"))
+          (base32 "1g2zga7jqzp4azwqpgxxx3lg07ijaaqw3zqnaa3i2brycwlnf8l9"))
          (modules '((guix build utils)))
          (snippet
-          '(begin
-             ;; Remove bundled tarballs, APKs, word lists, speadsheets,
-             ;; and other unnecessary unlicenced things.
-             (for-each delete-file-recursively (list "android"
-                                                     "docs"
-                                                     "tools"))))))
+          #~(begin
+              ;; Remove bundled tarballs, APKs, word lists, speadsheets,
+              ;; and other unnecessary unlicenced things.
+              (for-each delete-file-recursively (list "android"
+                                                      "docs"
+                                                      "tools"))))))
       (supported-systems '("x86_64-linux" "i686-linux"))
       (home-page "https://github.com/aircrack-ng/rtl8812au")
       (synopsis "Linux driver for Realtek USB wireless network adapters")
@@ -1407,7 +1422,7 @@ RTL8812AU, RTL8821AU, and RTL8814AU chips.")
 (define-public vhba-module
   (package
     (name "vhba-module")
-    (version "20210418")
+    (version "20211218")
     (source
      (origin
        (method url-fetch)
@@ -1415,10 +1430,10 @@ RTL8812AU, RTL8821AU, and RTL8814AU chips.")
              "http://downloads.sourceforge.net/cdemu/vhba-module/vhba-module-"
              version ".tar.xz"))
        (sha256
-        (base32 "119zgav6caialmf3hr096wkf72l9h76sqc9w5dhx26kj4yp85g8q"))))
+        (base32 "1dkprnnya0i8121p7ip4g8cww99drk7fzbwcxx65x02jqk0siibj"))))
     (build-system linux-module-build-system)
     (arguments
-     `(#:tests? #f))                    ; no test suite
+     (list #:tests? #f))                ; no test suite
     (home-page "https://cdemu.sourceforge.io/")
     (synopsis "Linux kernel module that emulates SCSI devices")
     (description
@@ -1447,8 +1462,7 @@ emulate optical devices such as DVD and CD-ROM drives.")
                   "1pgldnza7mzd0flrxg4q69dwbq1fhl58m5c62ary5drb0xyf3lqb"))))
       (build-system linux-module-build-system)
       (arguments
-       ;; No tests.
-       `(#:tests? #f))
+       (list #:tests? #f))              ; no test suite
       (home-page "https://github.com/Bumblebee-Project/bbswitch")
       (synopsis "Kernel module that disables discrete Nvidia graphics cards")
       (description "The bbswitch module provides a way to toggle the Nvidia
@@ -1458,7 +1472,7 @@ graphics card on Optimus laptops.")
 (define-public ddcci-driver-linux
   (package
     (name "ddcci-driver-linux")
-    (version "0.3.4")
+    (version "0.4.2")
     (source
      (origin
        (method git-fetch)
@@ -1468,29 +1482,26 @@ graphics card on Optimus laptops.")
          (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32
-         "0b50hhkna6ika2vwahzb9za9b41g39ialgv5y1y0kakqi50qi0ld"))))
+        (base32 "1lww3mnqhxqzj0qbxzbwbq93v9zw49myp7p9ib873a5izbq8nadi"))))
     (build-system linux-module-build-system)
     (arguments
-     `(#:tests? #f                               ; no tests
-       #:phases
-       (modify-phases %standard-phases
-         (replace 'build
-           (lambda args
-             (for-each
-              (lambda (module)
-                (with-directory-excursion module
-                  (apply (assoc-ref %standard-phases 'build) args)))
-              '("ddcci" "ddcci-backlight"))
-             #t))
-         (replace 'install
-           (lambda args
-             (for-each
-              (lambda (module)
-                (with-directory-excursion module
-                  (apply (assoc-ref %standard-phases 'install) args)))
-              '("ddcci" "ddcci-backlight"))
-             #t)))))
+     (list #:tests? #f                  ; no tests
+           #:phases
+           #~(modify-phases %standard-phases
+               (replace 'build
+                 (lambda args
+                   (for-each
+                    (lambda (module)
+                      (with-directory-excursion module
+                        (apply (assoc-ref %standard-phases 'build) args)))
+                    '("ddcci" "ddcci-backlight"))))
+               (replace 'install
+                 (lambda args
+                   (for-each
+                    (lambda (module)
+                      (with-directory-excursion module
+                        (apply (assoc-ref %standard-phases 'install) args)))
+                    '("ddcci" "ddcci-backlight")))))))
     (home-page "https://gitlab.com/ddcci-driver-linux/ddcci-driver-linux")
     (synopsis "Pair of Linux kernel drivers for DDC/CI monitors")
     (description "This package provides two Linux kernel drivers, ddcci and
@@ -1516,7 +1527,7 @@ supported under @file{/sys/class/backlight/}.")
                 "1qi4l6yam8nrlmc3zwkrz9vph0xsj1cgmkqci4652mbpbzigg7vn"))))
     (build-system linux-module-build-system)
     (arguments
-     `(#:tests? #f))                    ; no test suite
+     (list #:tests? #f))                ; no test suite
     (home-page "https://github.com/umlaeute/v4l2loopback")
     (synopsis "Linux kernel module to create virtual V4L2 video devices")
     (description
@@ -1545,26 +1556,26 @@ application by hooking GStreamer into the loopback device.")
                 "0xr0zx134s56h4ij6c3fh8ki0h58h61minbfxcl3sgpgxkh14ism"))))
     (build-system linux-module-build-system)
     (arguments
-     `(#:tests? #f ; no `check' target
-       #:source-directory "hid-xpadneo/src"
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'install 'post-install
-           (lambda* (#:key outputs #:allow-other-keys #:rest args)
-             (let ((out (assoc-ref outputs "out")))
-               (copy-recursively "hid-xpadneo/etc-modprobe.d"
-                                 (string-append out "/etc/modprobe.d"))
-               ;; udev-service-type takes its rules from /lib rather than
-               ;; /etc, so copy it there instead
-               (copy-recursively "hid-xpadneo/etc-udev-rules.d"
-                                 (string-append out "/lib/udev/rules.d"))))))))
+     (list #:tests? #f                  ; no `check' target
+           #:source-directory "hid-xpadneo/src"
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'install 'post-install
+                 (lambda _
+                   (copy-recursively "hid-xpadneo/etc-modprobe.d"
+                                     (string-append #$output "/etc/modprobe.d"))
+                   ;; udev-service-type takes its rules from /lib rather than
+                   ;; /etc, so copy it there instead
+                   (copy-recursively "hid-xpadneo/etc-udev-rules.d"
+                                     (string-append #$output
+                                                    "/lib/udev/rules.d")))))))
     (home-page "https://atar-axis.github.io/xpadneo/")
-    (synopsis "Xbox One Wireless Controller driver")
+    (synopsis "Xbox One Wireless Controller driver for the kernel Linux")
     (description
      "This package provides a driver for the XBox One S Wireless controller
-and some newer models when connected via bluetooth.  In addition to the kernel
-module provided itself, it also contains a modprobe configuration and udev
-rules, which need to be installed separately.")
+and some newer models when connected via Bluetooth.  In addition to the included
+Linux kernel module, it also contains a modprobe configuration and udev rules,
+which need to be installed separately.")
     (license license:gpl3+)))
 
 
@@ -1589,12 +1600,11 @@ rules, which need to be installed separately.")
 
     (build-system gnu-build-system)
     (native-inputs
-     `(("flex" ,flex)
-
-       ;; TODO: optional dependencies
-       ;; ("libxcrypt" ,libxcrypt)
-       ;; ("cracklib" ,cracklib)
-       ))
+     (list flex
+           ;; TODO: optional dependencies
+           ;; ("libxcrypt" ,libxcrypt)
+           ;; ("cracklib" ,cracklib)
+           ))
     (arguments
      `(;; Most users, such as `shadow', expect the headers to be under
        ;; `security'.
@@ -1671,9 +1681,9 @@ at login.  Local and dynamic reconfiguration are its key features.")
                  (invoke "python" "-m" "pamela" "-a" "`whoami`"))
                #t))))))
     (inputs
-     `(("linux-pam" ,linux-pam)))
+     (list linux-pam))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/minrk/pamela")
     (synopsis "PAM interface using ctypes")
     (description "This package provides a PAM interface using @code{ctypes}.")
@@ -1694,12 +1704,9 @@ at login.  Local and dynamic reconfiguration are its key features.")
                 "1bf91gi6zmfzzmczxm7pajxdlgnikasvg5xsd3j0a368rcr7lf9l"))))
     (build-system gnu-build-system)
     (inputs
-     `(("gnupg" ,gnupg)
-       ("linux-pam" ,linux-pam)))
+     (list gnupg linux-pam))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (arguments
      `(#:tests? #f ;no tests suite
        #:configure-flags
@@ -1721,7 +1728,7 @@ GnuPG-based password manager like @code{pass}.")
 (define-public powercap
   (package
     (name "powercap")
-    (version "0.4.0")
+    (version "0.5.0")
     (source
      (origin
        (method git-fetch)
@@ -1730,11 +1737,11 @@ GnuPG-based password manager like @code{pass}.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1hp2i1d195v0n4jgvgaymkxlpgyhn07ic273gkda95lz65cdfcgm"))))
+        (base32 "1vs84fmhdc3w1541vp0f5ydvdsbg0amjdv2g2f8xdvaw01nakxsn"))))
     (build-system cmake-build-system)
     (arguments
-     '(#:configure-flags
-       '("-DBUILD_SHARED_LIBS=ON")))
+     (list #:configure-flags
+           #~(list "-DBUILD_SHARED_LIBS=ON")))
     (home-page "https://github.com/powercap/powercap")
     (synopsis "Utilities for accessing the powercap Linux kernel feature")
     (description "This package contains utilities for accessing the powercap
@@ -1746,14 +1753,16 @@ It provides the commands @code{powercap-info} and @code{powercap-set}.")
 (define-public powerstat
   (package
     (name "powerstat")
-    (version "0.02.26")
+    (version "0.02.27")
     (source
      (origin
-       (method url-fetch)
-       (uri (string-append "https://kernel.ubuntu.com/~cking/tarballs/"
-                           "powerstat/powerstat-" version ".tar.gz"))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/ColinIanKing/powerstat")
+             (commit (string-append "V" version))))
+       (file-name (git-file-name name version))
        (sha256
-        (base32 "18m85k83hryj05vix63fay1hh0sb9h87hy5r7g1dqg2y9i8lzgxk"))))
+        (base32 "1ik5yv2bhz2hvyga4h1m28rf0xpi20zpqm4swhvskyf1g6qf381z"))))
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags
@@ -1800,7 +1809,7 @@ deviation, and minimum and maximum values.  It can show a nice histogram too.")
                 "ac_cv_func_malloc_0_nonnull=yes"
                 "ac_cv_func_realloc_0_nonnull=yes"))
              '())))
-    (inputs `(("ncurses" ,ncurses)))
+    (inputs (list ncurses))
     (home-page "https://gitlab.com/psmisc/psmisc")
     (synopsis "Small utilities that use the proc file system")
     (description
@@ -1812,7 +1821,7 @@ providing the system administrator with some help in common tasks.")
 (define-public util-linux
   (package
     (name "util-linux")
-    (version "2.35.1")
+    (version "2.37.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://kernel.org/linux/utils/"
@@ -1820,7 +1829,7 @@ providing the system administrator with some help in common tasks.")
                                   "util-linux-" version ".tar.xz"))
               (sha256
                (base32
-                "1yfpy6bkab4jw61mpx48gfy24yrqp4a7arvpis8csrkk53fkxpnr"))
+                "1ng9517c37mdp858425a4zyybma7dh7jrpd6z1z61yz7mb0n81va"))
               (patches (search-patches "util-linux-tests.patch"))
               (modules '((guix build utils)))
               (snippet
@@ -1838,7 +1847,10 @@ providing the system administrator with some help in common tasks.")
                "static"))       ;2.9 MiB static .a libraries
     (arguments
      `(#:configure-flags (list "--disable-use-tty-group"
-                               "--enable-fs-paths-default=/run/current-system/profile/sbin"
+                               (string-append
+                                "--enable-fs-paths-default="
+                                "/run/setuid-programs"
+                                ":/run/current-system/profile/sbin")
                                ;; Don't try to chown root:root mount and umount
                                "--disable-makeinstall-chown"
                                "--localstatedir=/var"
@@ -1864,44 +1876,45 @@ providing the system administrator with some help in common tasks.")
                         ;; libraries below $exec_prefix when $libdir does not
                         ;; match any of the "usual" locations.  Fix that.
                         (("usrlib_execdir='\\$\\{exec_prefix\\}'\\$libdir")
-                         "usrlib_execdir=$libdir"))
-                      #t))
+                         "usrlib_execdir=$libdir"))))
                   (add-before 'build 'set-umount-file-name
                     (lambda* (#:key outputs #:allow-other-keys)
                       ;; Tell 'eject' the right file name of 'umount'.
                       (let ((out (assoc-ref outputs "out")))
                         (substitute* "sys-utils/eject.c"
                           (("\"/bin/umount\"")
-                           (string-append "\"" out "/bin/umount\"")))
-                        #t)))
+                           (string-append "\"" out "/bin/umount\""))))))
                   (add-before 'check 'pre-check
-                    (lambda* (#:key inputs outputs #:allow-other-keys)
-                      (let ((out (assoc-ref outputs "out"))
-                            (net (assoc-ref inputs "net-base")))
+                    (lambda* (#:key native-inputs inputs #:allow-other-keys)
+                      (let ((services (search-input-file (or native-inputs inputs)
+                                                         "etc/services")))
                         ;; Change the test to refer to the right file.
                         (substitute* "tests/ts/misc/mcookie"
                           (("/etc/services")
-                           (string-append net "/etc/services")))
+                           services))
 
                         ;; The C.UTF-8 locale does not exist in our libc.
                         (substitute* "tests/ts/column/invalid-multibyte"
-                          (("C\\.UTF-8") "en_US.utf8"))
-                        #t)))
-                  ;; TODO: Remove the conditional on the next rebuild cycle.
-                  ,@(if (string-prefix? "arm" (%current-system))
-                        '((add-before 'check 'disable-setarch-test
-                            (lambda _
-                              ;; The setarch tests are unreliable in QEMU's
-                              ;; user-mode emulation, which is our primary
-                              ;; method of building ARMv7 packages.
-                              ;; <https://github.com/karelzak/util-linux/issues/601>
-                              (substitute* "tests/ts/misc/setarch"
-                                (("ts_init_subtest.*" all)
-                                 (string-append
-                                  all "\n"
-                                  "ts_skip \"setarch tests are unreliable under QEMU\"")))
-                              #t)))
-                        '())
+                          (("C\\.UTF-8") "en_US.utf8")))))
+                  (add-before 'check 'disable-setarch-test
+                    (lambda _
+                      ;; The setarch tests are unreliable in QEMU's user-mode
+                      ;; emulation, which is our primary method of building
+                      ;; ARMv7 packages.  See
+                      ;; <https://github.com/karelzak/util-linux/issues/601>.
+                      (substitute* "tests/ts/misc/setarch"
+                        (("ts_init_subtest.*" all)
+                         (string-append
+                          all "\n"
+                          "ts_skip \"setarch tests are unreliable under QEMU\"")))))
+                  (add-before 'check 'disable-lsns-test
+                    (lambda _
+                      ;; The lsns tests can fail due to ioctl(_, NS_GET_USERNS)
+                      ;; returning ENOTTY, indicating this kernel does not
+                      ;; support user namespaces.  Curiously, this test can fail
+                      ;; on i686 even if the same test passes on x86_64 on the
+                      ;; same machine.  See <https://issues.guix.gnu.org/49933>.
+                      (delete-file "tests/ts/lsns/ioctl_ns")))
                   (add-after 'install 'move-static-libraries
                     (lambda* (#:key outputs #:allow-other-keys)
                       (let ((lib    (assoc-ref outputs "lib"))
@@ -1920,9 +1933,7 @@ providing the system administrator with some help in common tasks.")
                           ;; files so that Libtool does the right thing when both
                           ;; the shared and static library is available.
                           (substitute* (find-files "lib" "\\.la$")
-                            (("old_library=.*") "old_library=''\n")))
-
-                        #t)))
+                            (("old_library=.*") "old_library=''\n"))))))
                   (add-after 'install 'adjust-pkg-config-files
                     (lambda* (#:key outputs #:allow-other-keys)
                       (let ((lib (assoc-ref outputs "lib")))
@@ -1930,18 +1941,14 @@ providing the system administrator with some help in common tasks.")
                         ;; the pkg-config files to avoid a cyclic reference on "out".
                         (substitute* (find-files (string-append lib "/lib/pkgconfig")
                                                  "\\.pc$")
-                          (("^(exec_)?prefix=.*") "")))
-                        #t)))))
-    (inputs `(("zlib" ,zlib)
-              ("ncurses" ,ncurses)
-
-              ;; XXX: This is so that the 'pre-check' phase can find it.
-              ,@(if (%current-target-system)
-                    `(("net-base" ,net-base))
-                    '())))
+                          (("^(exec_)?prefix=.*") ""))))))))
+    (inputs
+     (list file                         ;for libmagic
+           ncurses
+           zlib))
     (native-inputs
-     `(("perl" ,perl)
-       ("net-base" ,net-base)))         ;for tests
+     (list net-base                     ;for tests
+           perl))
     (home-page "https://www.kernel.org/pub/linux/utils/util-linux/")
     (synopsis "Collection of utilities for the Linux kernel")
     (description "Util-linux is a diverse collection of Linux kernel
@@ -2032,8 +2039,7 @@ by Robert Shea and Robert Anton Wilson.")
        #:parallel-build? #f
        #:tests? #f))                    ; no test suite
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)))
+     (list bison flex))
     (home-page "http://users.telenet.be/geertu/Linux/fbdev/")
     (synopsis "Show and modify Linux frame buffer settings")
     (description
@@ -2078,7 +2084,7 @@ parameters.")
                                     '("^kill" "^uptime"))))
               (for-each delete-file dup)
               #t))))))
-    (inputs `(("ncurses" ,ncurses)))
+    (inputs (list ncurses))
     (home-page "https://gitlab.com/procps-ng/procps/")
     (synopsis "Utilities that give information about processes")
     (description
@@ -2091,14 +2097,14 @@ slabtop, tload, top, vmstat, w, watch and sysctl.")
 (define-public usbutils
   (package
     (name "usbutils")
-    (version "013")
+    (version "014")
     (source
      (origin
       (method url-fetch)
       (uri (string-append "mirror://kernel.org/linux/utils/usb/usbutils/"
                           "usbutils-" version ".tar.xz"))
       (sha256
-       (base32 "0f0klk6d3hmbpf6p4dcwa1qjzblmkhbxs1wsw87aidvqri7lj8wy"))))
+       (base32 "0sgwfvr1b5w3ai1c0rmvzhk67y9vh7bq490rcxxj4q05svx9q1rs"))))
     (build-system gnu-build-system)
     (outputs (list "out" "python"))
     (arguments
@@ -2107,12 +2113,7 @@ slabtop, tload, top, vmstat, w, watch and sysctl.")
          (add-before 'bootstrap 'patch-bootstrap-scripts
            (lambda _
              (substitute* "usbhid-dump/bootstrap"
-               (("/bin/sh") (which "sh")))
-
-             ;; Don't let autogen.sh run configure with bogus options & CFLAGS.
-             (substitute* "autogen.sh"
-               (("^\\./configure.*") ""))
-             #t))
+               (("/bin/sh") (which "sh")))))
          (add-after 'install 'separate-python-output
            ;; Separating one Python script shaves more than 106 MiB from :out.
            (lambda* (#:key outputs #:allow-other-keys)
@@ -2123,17 +2124,11 @@ slabtop, tload, top, vmstat, w, watch and sysctl.")
                                  (new (string-append out:python "/" file)))
                              (mkdir-p (dirname new))
                              (rename-file old new)))
-                         (list "bin/lsusb.py"))
-               #t))))))
+                         (list "bin/lsusb.py"))))))))
     (inputs
-     `(("eudev" ,eudev)
-       ("libusb" ,libusb)
-       ("python" ,python)))
+     (list eudev libusb python))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (home-page "http://www.linux-usb.org/")
     (synopsis
      "Tools for working with USB devices, such as lsusb")
@@ -2158,7 +2153,7 @@ slabtop, tload, top, vmstat, w, watch and sysctl.")
      `(("automake" ,automake)
        ("autoreconf" ,autoconf)
        ("libtool" ,libtool)))
-    (inputs `(("eudev" ,eudev)))
+    (inputs (list eudev))
     (home-page (package-home-page linux-libre))
     (synopsis "Utilities for sharing USB devices over IP networks")
     (description
@@ -2187,13 +2182,12 @@ module.")
               (base32
                "04wp77fg842dhribgn0xvbd77idh0n7a839ga4bwy78v7i9l445i"))))
     (build-system gnu-build-system)
-    (inputs `(("util-linux" ,util-linux "lib")))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("texinfo" ,texinfo)       ;for the libext2fs Info manual
-
-                     ;; For tests.
-                     ("perl" ,perl)
-                     ("procps" ,procps)))
+    (inputs (list `(,util-linux "lib")))
+    (native-inputs (list pkg-config
+                         texinfo ;for the libext2fs Info manual
+                         ;; For tests.
+                         perl
+                         procps))
     (arguments
      '(;; util-linux is the preferred source for some of the libraries and
        ;; commands, so disable them (see, e.g.,
@@ -2269,7 +2263,7 @@ module.")
     (build-system trivial-build-system)
     (source #f)
     (inputs
-     `(("e2fsprogs" ,e2fsprogs/static)))
+     (list e2fsprogs/static))
     (arguments
      `(#:modules ((guix build utils))
        #:builder
@@ -2278,8 +2272,7 @@ module.")
                       (ice-9 ftw)
                       (srfi srfi-26))
 
-         (let ((e2fsck (string-append (assoc-ref %build-inputs "e2fsprogs")
-                                      "/sbin/e2fsck"))
+         (let ((e2fsck (search-input-file %build-inputs "/sbin/e2fsck"))
                (bin    (string-append (assoc-ref %outputs "out") "/sbin")))
            (mkdir-p bin)
            (with-directory-excursion bin
@@ -2308,7 +2301,7 @@ from the e2fsprogs package.  It is meant to be used in initrds.")
          "1x0r7ylxlp9lbj3d7sqf6j2a222dwy2nfpff05jd6mkh4ihxvyd1"))
        (patches (search-patches "extundelete-e2fsprogs-1.44.patch"))))
     (build-system gnu-build-system)
-    (inputs `(("e2fsprogs" ,e2fsprogs)))
+    (inputs (list e2fsprogs))
     (home-page "http://extundelete.sourceforge.net/")
     (synopsis "Recover deleted files from ext2/3/4 partitions")
     (description
@@ -2354,7 +2347,7 @@ Zerofree requires the file system to be unmounted or mounted read-only.")
 (define-public strace
   (package
     (name "strace")
-    (version "5.8")
+    (version "5.15")
     (home-page "https://strace.io")
     (source (origin
              (method url-fetch)
@@ -2362,27 +2355,32 @@ Zerofree requires the file system to be unmounted or mounted read-only.")
                                  "/strace-" version ".tar.xz"))
              (sha256
               (base32
-               "1abs3svkg9985f4jrxx34sj1dcpsf95vv1a0g01c777zgygncjnz"))))
+               "1p3jipp6mj5fwfcjdnp6xhxk84z07jy5qhjlqr6jjdbk54pw5jpb"))
+             (patches (search-patches "strace-readlink-tests.patch"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-/bin/sh
            (lambda _
-             (substitute* "strace.c"
-               (("/bin/sh") (which "sh")))
-             #t))
+             (substitute* "src/strace.c"
+               (("/bin/sh") (which "sh")))))
          (add-after 'unpack 'disable-failing-tests
            (lambda _
-             ;; XXX These hang forever even if the test time-out is extended.
              (substitute* "tests/Makefile.in"
-               (("^\tstrace-DD?D?\\.test \\\\.*") ""))
-             #t)))
-       ;; Don't fail if the architecture doesn't support different personalities.
+               ;; XXX: These hang forever even if the test time-out is
+               ;; extended.
+               (("^\tstrace-DD?D?\\.test \\\\.*") "")
+               (("^\tpidns-cache.test \\\\.*") "")
+               (("^\t.*--pidns-translation.test \\\\.*") "")
+               ;; This one fails with an encoding error.
+               (("^\t.*net-yy-unix.test \\\\.*") "")))))
+       ;; Don't fail if the architecture doesn't support different
+       ;; personalities.
        #:configure-flags '("--enable-mpers=check")
        ;; See <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=32459>.
        #:parallel-tests? #f))           ; undeterministic failures
-    (native-inputs `(("perl" ,perl)))
+    (native-inputs (list perl))
     (synopsis "System call tracer for Linux")
     (description
      "strace is a system call tracer, i.e. a debugging tool which prints out a
@@ -2413,24 +2411,95 @@ an executed process and the signals received by that process.  It can also
 intercept and print the system calls executed by the program.")
     (license license:gpl2+)))
 
+(define-public alsa-ucm-conf
+  (package
+    (name "alsa-ucm-conf")
+    (version "1.2.4")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "ftp://ftp.alsa-project.org/pub/lib/" name "-"
+                    version ".tar.bz2"))
+              (sha256
+               (base32
+                "0h6kzi1cfdqyxp4pwpqh5wb89c8s9wrgix315bvamffwfxf56frc"))))
+    (build-system copy-build-system)
+    (arguments
+     '(#:install-plan
+       '(("ucm" "share/alsa/ucm")
+         ("ucm2" "share/alsa/ucm2"))))
+    (home-page "https://www.alsa-project.org/wiki/Main_Page")
+    (synopsis "The Advanced Linux Sound Architecture Use Case Manager")
+    (description
+     "This package contains Advanced Linux Sound Architecture Use Case Manager
+configuration of audio input/output names and routing for specific audio
+hardware.")
+    (license license:bsd-3)))
+
+(define-public alsa-topology-conf
+  (package
+    (name "alsa-topology-conf")
+    (version "1.2.4")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "ftp://ftp.alsa-project.org/pub/lib/" name "-"
+                    version ".tar.bz2"))
+              (sha256
+               (base32
+                "01zdg6q4s6d01k39z96wi4vbhrfw1i2g4yi5dijwfk6a5vjfdq2m"))))
+    (build-system copy-build-system)
+    (arguments
+     '(#:install-plan
+       '(("topology" "share/alsa/topology"))))
+    (home-page "https://www.alsa-project.org/wiki/Main_Page")
+    (synopsis "The Advanced Linux Sound Architecture libraries")
+    (description
+     "This package contains Advanced Linux Sound Architecture topology
+configuration files that can be used for specific audio hardware.")
+    (license license:bsd-3)))
+
 (define-public alsa-lib
   (package
     (name "alsa-lib")
     (version "1.2.4")
     (source (origin
-             (method url-fetch)
-             (uri (string-append
-                   "ftp://ftp.alsa-project.org/pub/lib/alsa-lib-"
-                   version ".tar.bz2"))
-             (sha256
-              (base32
-               "1xq8d48wfy59qw4x7383j32n8j5njndw5hcgnmlg9pvclphlnmgp"))))
+              (method url-fetch)
+              (uri (string-append
+                    "ftp://ftp.alsa-project.org/pub/lib/alsa-lib-"
+                    version ".tar.bz2"))
+              (sha256
+               (base32
+                "1xq8d48wfy59qw4x7383j32n8j5njndw5hcgnmlg9pvclphlnmgp"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags (list (string-append "LDFLAGS=-Wl,-rpath="
                                               (assoc-ref %outputs "out")
-                                              "/lib"))))
-    (home-page "https://www.alsa-project.org/")
+                                              "/lib"))
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'install 'pre-install
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((ucm
+                     (string-append (assoc-ref inputs "alsa-ucm-conf")))
+                    (topology
+                     (string-append (assoc-ref inputs "alsa-topology-conf")))
+                    (alsa
+                     (string-append (assoc-ref outputs "out") "/share/alsa"))
+                    (ucm-share
+                     (string-append ucm "/share/alsa/ucm"))
+                    (ucm2-share
+                     (string-append ucm "/share/alsa/ucm2"))
+                    (topology-share
+                     (string-append topology "/share/alsa/topology")))
+               (mkdir-p alsa)
+               (symlink ucm-share (string-append alsa "/ucm"))
+               (symlink ucm2-share (string-append alsa "/ucm2"))
+               (symlink topology-share (string-append alsa "/topology")))
+             #t)))))
+    (inputs
+     (list alsa-ucm-conf alsa-topology-conf))
+    (home-page "https://www.alsa-project.org/wiki/Main_Page")
     (synopsis "The Advanced Linux Sound Architecture libraries")
     (description
      "The Advanced Linux Sound Architecture (ALSA) provides audio and
@@ -2478,10 +2547,7 @@ MIDI functionality to the Linux-based operating system.")
     (native-inputs
      `(("gettext" ,gettext-minimal)))
     (inputs
-     `(("libsamplerate" ,libsamplerate)
-       ("ncurses" ,ncurses)
-       ("alsa-lib" ,alsa-lib)
-       ("xmlto" ,xmlto)))
+     (list libsamplerate ncurses alsa-lib xmlto))
     (home-page "http://www.alsa-project.org/")
     (synopsis "Utilities for the Advanced Linux Sound Architecture (ALSA)")
     (description
@@ -2543,14 +2609,14 @@ MIDI functionality to the Linux-based operating system.")
                          (find-files out ".*pulse\\.(la|so)"))
                #t))))))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("jack" ,jack-1)
-       ("speex" ,speex) ; libspeexdsp resampling plugin
-       ("libsamplerate" ,libsamplerate) ; libsamplerate resampling plugin
-       ("ffmpeg" ,ffmpeg) ; libavcodec resampling plugin, a52 plugin
-       ("pulseaudio" ,pulseaudio))) ; PulseAudio plugin
+     (list alsa-lib
+           jack-1
+           speex ; libspeexdsp resampling plugin
+           libsamplerate ; libsamplerate resampling plugin
+           ffmpeg ; libavcodec resampling plugin, a52 plugin
+           pulseaudio)) ; PulseAudio plugin
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://www.alsa-project.org/")
     (synopsis "Plugins for the Advanced Linux Sound Architecture (ALSA)")
     (description
@@ -2578,16 +2644,17 @@ external rate conversion.")
         (base32 "1w6qx3sxzkv80shk21f63rq41c84irpx68k62m2cv629n1mwj2f1"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("flex" ,flex)
-       ("bison" ,bison)))
+     (list pkg-config flex bison))
     (inputs
-     `(("libmnl" ,libmnl)
-       ("libnftnl" ,libnftnl)))
-    (arguments
-     '(#:tests? #f       ; no test suite
-       #:configure-flags ; add $libdir to the RUNPATH of executables
-       (list (string-append "LDFLAGS=-Wl,-rpath=" %output "/lib"))))
+     (list libmnl libnftnl/fixed))
+    (arguments
+     (list #:tests? #f             ; no test suite
+           #:configure-flags       ; add $libdir to the RUNPATH of executables
+           ;; XXX TODO: Replace with simply #$OUTPUT on core-updates.
+           #~(list (string-append "LDFLAGS=-Wl,-rpath="
+                                  #$(if (%current-target-system)
+                                        #~#$output
+                                        #~%output) "/lib"))))
     (home-page "https://www.netfilter.org/projects/iptables/index.html")
     (synopsis "Programs to configure Linux IP packet filtering rules")
     (description
@@ -2604,7 +2671,7 @@ Both commands are targeted at system administrators.")
 (define-public jitterentropy-rngd
   (package
     (name "jitterentropy-rngd")
-    (version "1.2.0")
+    (version "1.2.6")
     (source
      (origin
        (method git-fetch)
@@ -2613,7 +2680,7 @@ Both commands are targeted at system administrators.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1fb8zfwhwkl1d8n4cdn7rdv5rwd75qgc00d36pmkl7wgnj3c9xda"))))
+        (base32 "03cbcxkscjcmn6ybkmssq7i39sn5cfsap9fv058pi0k2mr90djwq"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ; no test suite
@@ -2683,8 +2750,7 @@ name.")
                "0apxgmkhsk3vxn9q3libxn3dgrdljrxyy4mli2gk49m7hi3na7xp"))))
     (build-system gnu-build-system)
     (inputs
-     `(("perl" ,perl)
-       ("iptables" ,iptables)))
+     (list perl iptables))
     (synopsis "Ethernet bridge frame table administration")
     (home-page "https://ebtables.netfilter.org/")
     (description
@@ -2697,7 +2763,7 @@ that the Ethernet protocol is much simpler than the IP protocol.")
 (define-public iproute
   (package
     (name "iproute2")
-    (version "5.13.0")
+    (version "5.15.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -2705,7 +2771,7 @@ that the Ethernet protocol is much simpler than the IP protocol.")
                     version ".tar.xz"))
               (sha256
                (base32
-                "0dhvdybfm33q9lz73sfnc24pxy2r42xywzb1gdgydjfafhvyb8kj"))))
+                "1zwin8sjnnwf2a9rjwzb3q8lkhcpy06s29sh05f5gxd7z6jy9qrq"))))
     (build-system gnu-build-system)
     (arguments
      `( ;; There is a test suite, but it wants network namespaces and sudo.
@@ -2744,9 +2810,7 @@ that the Ethernet protocol is much simpler than the IP protocol.")
        ("iptables" ,iptables)
        ("libmnl" ,libmnl)))
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)
-       ("pkg-config" ,pkg-config)))
+     (list bison flex pkg-config))
     ;; For tests.
     ;; ("libmnl" ,libmnl)
     ;; ("util-linux" ,util-linux)
@@ -2842,35 +2906,37 @@ network hardware types (plipconfig, slattach) and advanced aspects of IP
 configuration (iptunnel, ipmaddr).")
       (license license:gpl2+))))
 
-(define-public libcap-2.31
+(define-public libcap
   (package
     (name "libcap")
-    (version "2.31")
+    (version "2.62")
     (source (origin
-             (method url-fetch)
-             (uri (string-append
-                   "mirror://kernel.org/linux/libs/security/linux-privs/"
-                   "libcap2/libcap-" version ".tar.xz"))
-             (sha256
-              (base32
-               "0ikwm0kngrqa4ci80lqnrkk17kg09q7dxrz28y0gm5qw3vj8s266"))))
-    (build-system gnu-build-system)
-    (arguments '(#:phases
-                 (modify-phases %standard-phases
-                   (replace 'configure
-                            ;; Add $libdir to the RUNPATH of executables.
-                            (lambda _
-                              (substitute* "Make.Rules"
-                                (("LDFLAGS := #-g")
-                                 (string-append "LDFLAGS := -Wl,-rpath="
-                                                %output "/lib")))
-                              #t)))
-                 #:test-target "test"
-                 #:make-flags (list "lib=lib"
-                                    (string-append "prefix="
-                                                   (assoc-ref %outputs "out"))
-                                    "RAISE_SETFCAP=no")))
-    (native-inputs `(("perl" ,perl)))
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://kernel.org/linux/libs/security/linux-privs/"
+                    "libcap2/libcap-" version ".tar.xz"))
+              (sha256
+               (base32
+                "18l3pngsbaahdjzz01rmzrjgcqny4zld685fkq96mq5yr6m5n30r"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (delete 'configure))
+           #:test-target "test"
+           #:make-flags
+           #~(list "lib=lib"
+                   (string-append "prefix=" #$output)
+                   (string-append "LDFLAGS=-Wl,-rpath=" #$output "/lib")
+                   "RAISE_SETFCAP=no"
+                   ;; Tell the makefile to use TARGET-gcc and friends
+                   ;; when cross-compiling.
+                   #$@(if (%current-target-system)
+                          `((list (string-append "CROSS_COMPILE="
+                                                 ,(%current-target-system) "-")
+                                  "BUILD_CC=gcc"))
+                          '()))))
+    (native-inputs (list perl))
     (supported-systems (delete "i586-gnu" %supported-systems))
     (home-page "https://sites.google.com/site/fullycapable/")
     (synopsis "Library for working with POSIX capabilities")
@@ -2881,71 +2947,23 @@ Linux-based operating systems.")
     ;; License is BSD-3 or GPLv2, at the user's choice.
     (license license:gpl2)))
 
-;; libcap 2.31 has problems with newer kernels, so provide this newer variant.
-;; Keep the old libcap around to avoid rebuilding 'coreutils' and 'avahi'.
-;; To be merged with libcap on the next rebuild cycle.
-(define-public libcap
-  (package
-    (inherit libcap-2.31)
-    (version "2.46")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "mirror://kernel.org/linux/libs/security/linux-privs/"
-                    "libcap2/libcap-" version ".tar.xz"))
-              (sha256
-               (base32
-                "1d6q447wf0iagiyzhfdqcj4cv0dmzc49i0czwikrcv7s2cad3lsf"))))
-    (arguments
-     (substitute-keyword-arguments (package-arguments libcap-2.31)
-       ((#:phases phases)
-        `(modify-phases ,phases
-           (replace 'configure
-             (lambda _
-               ;; Add $libdir to the RUNPATH of executables.
-               (substitute* "Make.Rules"
-                 (("LDFLAGS \\?= #-g")
-                  (string-append "LDFLAGS ?= -Wl,-rpath="
-                                 %output "/lib")))
-               #t))))))))
-
-(define-deprecated libcap/next libcap)
-(export libcap/next)
-
 (define-public bridge-utils
   (package
     (name "bridge-utils")
-    (version "1.7")
+    (version "1.7.1")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "mirror://kernel.org/linux/kernel/people/shemminger/"
+       (uri (string-append "mirror://kernel.org/linux/utils/net/"
                            "bridge-utils/bridge-utils-" version ".tar.xz"))
        (sha256
-        (base32 "0zlrigizac2nfwgvksm92v4wafrpgxlbci3gwimc795ib7k8g6ck"))))
+        (base32 "03p6cmhm6cqhnfsfa1wv7frhb361y12daf7gr1h5qh51y7j8n7d6"))))
     (build-system gnu-build-system)
 
     ;; The tarball lacks all the generated files.
-    (native-inputs `(("autoconf" ,autoconf)
-                     ("automake" ,automake)))
+    (native-inputs (list autoconf automake))
     (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (add-before 'bootstrap 'patch-stuff
-           (lambda _
-             ;; Fix "field ‘ip6’ has incomplete type" errors.
-             (substitute* "libbridge/libbridge.h"
-               (("#include <linux/if_bridge.h>")
-                "#include <linux/in6.h>\n#include <linux/if_bridge.h>"))
-
-             ;; Ensure that the entire build fails if one of the
-             ;; sub-Makefiles fails.
-             (substitute* "Makefile.in"
-               (("\\$\\(MAKE\\) \\$\\(MFLAGS\\) -C \\$\\$x ;")
-                "$(MAKE) $(MFLAGS) -C $$x || exit 1;"))
-
-             #t)))
-       #:tests? #f))                              ; no 'check' target
+     '(#:tests? #f))                    ; no 'check' target
 
     (home-page "https://wiki.linuxfoundation.org/networking/bridge")
     (synopsis "Manipulate Ethernet bridges")
@@ -3024,7 +3042,7 @@ configuration and monitoring interfaces.")
                     `(("python-2" ,python-2)))
                    ((string=? python "python3")
                     `(("python-3" ,python-3))))))
-      (propagated-inputs `(("libnl" ,libnl)))
+      (propagated-inputs (list libnl))
       (outputs '("out"))
       (arguments
        `(#:modules ((guix build gnu-build-system)
@@ -3061,21 +3079,17 @@ configuration and monitoring interfaces.")
                (base32
                 "12ddd6vh6vs97135bnlyr0szv7hvpbnmfh48584frzab0z0725ph"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("libnl" ,libnl)))
-    (arguments
-     `(#:make-flags
-       (let* ((target ,(%current-target-system))
-              (pkg-config (if target
-                              (string-append target "-pkg-config")
-                              "pkg-config")))
-         (list
-          ,(string-append "CC=" (cc-for-target))
-          (string-append "PKG_CONFIG="
-                         (assoc-ref %build-inputs "pkg-config")
-                         "/bin/" pkg-config)
-          (string-append "PREFIX=" (assoc-ref %outputs "out"))))
-       #:phases (modify-phases %standard-phases (delete 'configure))))
+    (native-inputs (list pkg-config))
+    (inputs (list libnl))
+    (arguments
+     (list #:make-flags
+           #~(list
+            (string-append "CC=" #$(cc-for-target))
+            (string-append "PKG_CONFIG=" #$(pkg-config-for-target))
+            (string-append "PREFIX=" (assoc-ref %outputs "out")))
+           #:phases
+           #~(modify-phases %standard-phases
+               (delete 'configure))))   ; no configure script
     (home-page "https://wireless.wiki.kernel.org/")
     (synopsis "Tool for configuring wireless devices")
     (description
@@ -3119,11 +3133,7 @@ devices.  It replaces @code{iwconfig}, which is deprecated.")
                  (("/usr/sbin/hciconfig") "hciconfig"))
                #t))))))
     (inputs
-     `(("kmod" ,kmod)
-       ("libnl" ,libnl)
-       ("ncurses" ,ncurses)
-       ("pciutils" ,pciutils)
-       ("zlib" ,zlib)))
+     (list kmod libnl ncurses pciutils zlib))
     (native-inputs
      `(("autoconf" ,autoconf)
        ("automake" ,automake)
@@ -3153,7 +3163,10 @@ settings.")
                (base32
                 "0a8fwyxnc5qdxff8sl2sfsbnvgh6pkij4yafiln0fxgg6bal7knj"))))
     (build-system gnu-build-system)
-    (inputs `(("ncurses" ,ncurses)))
+    (arguments
+     ;; Allow compilation with GCC 10.
+     '(#:configure-flags '("CFLAGS=-O2 -g -fcommon")))
+    (inputs (list ncurses))
     (home-page "http://www.jpj.net/~trevor/aumix.html")
     (synopsis "Audio mixer for X and the console")
     (description
@@ -3183,7 +3196,7 @@ the command line or a script.")
              #t)))
        ;; There are currently no checks in the package.
        #:tests? #f))
-    (native-inputs `(("python" ,python)))
+    (native-inputs (list python))
     (home-page "http://guichaz.free.fr/iotop/")
     (synopsis
      "Displays the IO activity of running processes")
@@ -3207,8 +3220,7 @@ processes currently causing I/O.")
               (patches (search-patches "fuse-overlapping-headers.patch"))))
     (build-system gnu-build-system)
     (inputs
-     `(("bash-minimal" ,bash-minimal)
-       ("util-linux" ,util-linux)))
+     (list bash-minimal util-linux))
     (arguments
      '(#:configure-flags (list (string-append "MOUNT_FUSE_PATH="
                                               (assoc-ref %outputs "out")
@@ -3229,11 +3241,12 @@ processes currently causing I/O.")
              ;; it refers to the right ones.
              (substitute* '("lib/mount_util.c" "util/mount_util.c")
                (("/bin/(u?)mount" _ maybe-u)
-                (string-append (assoc-ref inputs "util-linux")
-                               "/bin/" maybe-u "mount")))
-             (substitute* "util/mount.fuse.c"
-               (("/bin/sh" command)
-                (string-append (assoc-ref inputs "bash-minimal") command)))
+                (search-input-file inputs
+                                   (string-append "bin/"
+                                                  maybe-u "mount"))))
+             (substitute* '("util/mount.fuse.c")
+               (("/bin/sh")
+                (search-input-file inputs "/bin/sh")))
 
              ;; This hack leads libfuse to search for 'fusermount' in
              ;; $PATH, where it may find a setuid-root binary, instead of
@@ -3255,10 +3268,70 @@ user-space processes.")
     (license (list license:lgpl2.1                ;library
                    license:gpl2+))))              ;command-line utilities
 
+(define-public fuse-3
+  (package
+    (inherit fuse)
+    (name "fuse")
+    (version "3.10.5")
+    (source (origin
+              (method url-fetch)
+              (uri
+               (string-append "https://github.com/libfuse/libfuse/releases/"
+                              "download/fuse-" version
+                              "/fuse-" version ".tar.xz"))
+              (sha256
+               (base32
+                "0rlnnsiw614qcmgy8xz67044gqc1pbvvf2yxjv44lh27bm487qmj"))))
+    (build-system meson-build-system)
+    (arguments
+     `(#:configure-flags
+       ,#~(list
+           (string-append "-Dudevrulesdir=" #$output "/udev/rules.d")
+           "-Duseroot=false")
+       #:tests? #f
+       #:phases
+       ,#~(modify-phases %standard-phases
+            (add-after 'unpack 'set-file-names
+              (lambda* (#:key inputs #:allow-other-keys)
+                ;; libfuse calls out to mount(8) and umount(8).  Make sure
+                ;; it refers to the right ones.
+                (substitute* '("lib/mount_util.c")
+                  (("/bin/(u?)mount" _ maybe-u)
+                   (search-input-file inputs
+                                      (string-append "bin/"
+                                                     maybe-u "mount"))))
+                (substitute* '("util/mount.fuse.c")
+                  (("/bin/sh")
+                   (search-input-file inputs "/bin/sh")))
+
+                ;; This hack leads libfuse to search for 'fusermount' in
+                ;; $PATH, where it may find a setuid-root binary, instead of
+                ;; trying solely $out/sbin/fusermount and failing because
+                ;; it's not setuid.
+                (substitute* "lib/meson.build"
+                  (("-DFUSERMOUNT_DIR=[[:graph:]]+")
+                   "-DFUSERMOUNT_DIR=\"/var/empty\"'"))))
+            (add-after 'unpack 'fix-install
+              (lambda* (#:key inputs #:allow-other-keys)
+                (substitute* '("util/meson.build")
+                  (("install_helper.sh") "true"))
+               (substitute* '("util/meson.build")
+                  (("fuseconf_path = .*")
+                   "fuseconf_path = '/etc/fuse.conf'"))))
+            (add-before 'configure 'set-paths
+              (lambda* (#:key inputs outputs #:allow-other-keys)
+                (let ((dummy-init.d
+                       (string-append (getcwd) "/etc/init.d")))
+                  (setenv "MOUNT_FUSE_PATH"
+                          (string-append #$output "/sbin"))
+                  (setenv "UDEV_RULES_PATH"
+                          (string-append #$output
+                                         "/lib/udev/rules.d"))))))))))
+
 (define-public unionfs-fuse
   (package
     (name "unionfs-fuse")
-    (version "2.1")
+    (version "2.2")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -3267,11 +3340,11 @@ user-space processes.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0bwx70x834qgqh53vqp18bhbxbsny80hz922rbgj8k9wj7cbfilm"))))
+                "1yigh8z1q6iq6yjyq7kl7vpbpjnxjld32apvjaw2bl44pqqg56hh"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("python" ,python)))
-    (inputs `(("fuse" ,fuse)))
+     (list python))
+    (inputs (list fuse))
     (arguments
      ;; The tests were never actually run ("collected 0 items"), but in recent
      ;; versions of pytest that causes an error.
@@ -3352,10 +3425,9 @@ UnionFS-FUSE additionally supports copy-on-write.")
                 "00fir2iykdx11g8nv5gijg0zjrp2g3ldypnv0yi6lq3h5pg5v13h"))))
     (build-system gnu-build-system)
     (inputs
-     `(("fuse" ,fuse)
-       ("glib" ,glib)))
+     (list fuse glib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/libfuse/sshfs")
     (synopsis "Mount remote file systems over SSH")
     (description
@@ -3382,9 +3454,8 @@ file system is as easy as logging into the server with an SSH client.")
        (sha256
         (base32 "1cy5b6qril9c3ry6fv7ir87s8iyy5vxxmbyx90dm86fbra0vjaf5"))))
     (build-system gnu-build-system)
-    (inputs `(("fuse" ,fuse)
-              ("libarchive" ,libarchive)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list fuse libarchive))
+    (native-inputs (list pkg-config))
     (home-page "https://www.cybernoia.de/software/archivemount.html")
     (synopsis "Tool for mounting archive files with FUSE")
     (description "archivemount is a FUSE-based file system for Unix variants,
@@ -3505,8 +3576,7 @@ NUMA performance on your system.")
                              `("PATH" ":" prefix (,bin))))
                          '("unicode_start" "unicode_stop"))))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf pkg-config))
     (inputs
      `(("bzip2" ,bzip2)
        ("gzip" ,gzip)
@@ -3579,9 +3649,7 @@ for systems using the Linux kernel.  This includes commands such as
                 "1m8avqccrhm38krlhp88a7v949f3hrzx060bbrr5dp5qw2nmw9j2"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (arguments
      `(#:configure-flags
        (list "--disable-static")))
@@ -3595,7 +3663,7 @@ to use Linux' inotify mechanism, which allows file accesses to be monitored.")
 (define-public kmod
   (package
     (name "kmod")
-    (version "27")
+    (version "29")
     (source (origin
               (method url-fetch)
               (uri
@@ -3603,16 +3671,19 @@ to use Linux' inotify mechanism, which allows file accesses to be monitored.")
                               "kmod-" version ".tar.xz"))
               (sha256
                (base32
-                "035wzfzjx4nwidk747p8n085mgkvy531ppn16krrajx2dkqzply1"))
+                "0am54mi5rk72g5q7k6l6f36gw3r9vwgjmyna43ywcjhqmakyx00b"))
               (patches (search-patches "kmod-module-directory.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config
+           ;; For tests.
+           zstd))
     (inputs
      `(("xz" ,xz)
-       ("zlib" ,zlib)))
+       ("zlib" ,zlib)
+       ("zstd-lib" ,zstd "lib")))
     (arguments
-     `(#:configure-flags '("--with-xz" "--with-zlib"
+     `(#:configure-flags '("--with-xz" "--with-zlib" "--with-zstd"
                            "--disable-test-modules")
        #:phases
        (modify-phases %standard-phases
@@ -3658,38 +3729,39 @@ from the module-init-tools project.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "16iyn51xlrsbshc7p5xl2338yyfzknaqc538sa7mamgccqwgyvvq"))
-              (modules '((guix build utils)))
-              (snippet
-               '(begin
-                  (substitute* "Makefile"
-                    (("go test -v")
-                     "GO111MODULE=off go test -v"))
-                  #t))))
+                "16iyn51xlrsbshc7p5xl2338yyfzknaqc538sa7mamgccqwgyvvq"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (delete 'configure)            ; no configure script
-         (add-before 'check 'set-go-HOME
-           (lambda _
-             (setenv "HOME" (getcwd))
-             #t))
-         (add-before 'check 'disable-failing-test
-           (lambda _
-             ;; This test relies on writing to /proc/%d/oom_score_adj.
-             (substitute* "testsuite_cli_test.go"
-               (("TestI" match)
-                (string-append "skipped" match)))
-             #t)))
-       #:make-flags (let* ((prefix (assoc-ref %outputs "out")))
-                      (list ,(string-append "CC=" (cc-for-target))
-                            (string-append "VERSION=v" ,version)
-                            (string-append "PREFIX=" prefix)
-                            (string-append "SYSCONFDIR=" prefix "/etc")))
+     (list
+       #:phases
+       #~(modify-phases %standard-phases
+           (delete 'configure)            ; no configure script
+           (add-before 'check 'set-go-HOME
+             (lambda _
+               (setenv "HOME" (getcwd))))
+           (add-before 'check 'disable-failing-test
+             (lambda _
+               ;; This test relies on writing to /proc/%d/oom_score_adj.
+               (substitute* "testsuite_cli_test.go"
+                 (("TestI" match)
+                  (string-append "skipped" match))))))
+       #:make-flags
+       #~(list (string-append "CC=" #$(cc-for-target))
+               (string-append "VERSION=v" #$version)
+               (string-append "PREFIX=" #$output)
+               (string-append "SYSCONFDIR=" #$output "/etc")
+               "GO111MODULE=off")
        #:test-target "test"))
-    (native-inputs `(("go" ,go)           ;for the test suite
-                     ("pandoc" ,pandoc))) ;to generate the manpage
+    (native-inputs
+      (append
+        ;; To generate the manpage.
+        (if (or (target-x86-64?) (target-x86-32?))
+          (list pandoc)
+          '())
+        (list
+          ;; For the test suite.
+          cppcheck
+          go)))
     (home-page "https://github.com/rfjakob/earlyoom")
     (synopsis "Simple out of memory (OOM) daemon for the Linux kernel")
     (description "Early OOM is a minimalist out of memory (OOM) daemon that
@@ -3701,7 +3773,7 @@ to the in-kernel OOM killer.")
   ;; The post-systemd fork, maintained by Gentoo.
   (package
     (name "eudev")
-    (version "3.2.9")
+    (version "3.2.11")
     (source (origin
               (method git-fetch)
               (uri (git-reference (url "https://github.com/gentoo/eudev")
@@ -3709,36 +3781,19 @@ to the in-kernel OOM killer.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1g9z3d33m0i3hmbhm0wxpvkzf6ac7xj1drwcfrhzlfhhi63sg9h7"))
+                "0dzaqwjnl55f69ird57wb6skahc6l7zs1slsrzqqfhww33icp6av"))
               (patches (search-patches "eudev-rules-directory.patch"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'make-source-writable
-           (lambda _
-             ;; XXX: Git checkouts are read-only, but this package needs to
-             ;; modify some of its files.
-             (for-each make-file-writable (find-files "."))
-             #t))
          (add-before 'bootstrap 'patch-file-names
            (lambda* (#:key inputs native-inputs #:allow-other-keys)
             (substitute* "man/make.sh"
               (("/usr/bin/xsltproc")
                (string-append (assoc-ref
                                (or native-inputs inputs) "xsltproc")
-                               "/bin/xsltproc")))
-            #t))
-         (add-before 'configure 'patch-bindir-in-btrfs-rules
-           (lambda* (#:key outputs #:allow-other-keys)
-             ;; The "@bindir@" substitution incorrectly expands to a literal
-             ;; "${exec_prefix}" (see <https://bugs.gnu.org/39926>).  Work
-             ;; around it.
-             (let ((out (assoc-ref outputs "out")))
-               (substitute* "rules/64-btrfs.rules.in"
-                 (("@bindir@")
-                  (string-append out "/bin")))
-               #t)))
+                               "/bin/xsltproc")))))
          (add-after 'install 'move-static-library
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -3752,8 +3807,7 @@ to the in-kernel OOM killer.")
                ;; such that Libtool looks for it in the usual places.
                (substitute* (string-append out "/lib/libudev.la")
                  (("old_library=.*")
-                  "old_library=''\n"))
-               #t)))
+                  "old_library=''\n")))))
          (add-after 'install 'build-hwdb
            (lambda* (#:key outputs #:allow-other-keys)
              ;; Build OUT/etc/udev/hwdb.bin.  This allows 'lsusb' and
@@ -3785,8 +3839,8 @@ to the in-kernel OOM killer.")
      ;; When linked against libblkid, eudev can populate /dev/disk/by-label
      ;; and similar; it also installs the '60-persistent-storage.rules' file,
      ;; which contains the rules to do that.
-     `(("util-linux" ,util-linux "lib")           ;for blkid
-       ("kmod" ,kmod)))
+     (list `(,util-linux "lib") ;for blkid
+           kmod))
     (outputs '("out" "static"))
     (home-page "https://wiki.gentoo.org/wiki/Project:Eudev")
     (synopsis "Userspace device management")
@@ -3806,8 +3860,6 @@ time.")
        (sha256
         (base32 "0kb3636yaw9l8xi8s184w0r0n9ic5dw3b8hx048jf9fpzss4kimi"))))
     (build-system python-build-system)
-    (native-inputs
-     `(("kernel-headers" ,linux-libre-headers)))
     (arguments
      `(#:tests? #f                      ;no rule for tests
        #:phases
@@ -3835,7 +3887,7 @@ devices that can inject events directly into the input subsystem.")
 (define-public interception-tools
   (package
     (name "interception-tools")
-    (version "0.6.7")
+    (version "0.6.8")
     (home-page "https://gitlab.com/interception/linux/tools")
     (source (origin
               (method git-fetch)
@@ -3845,17 +3897,14 @@ devices that can inject events directly into the input subsystem.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0wcmppa7092b33wb8vc782day5phf90pc25cn1x7rk0rlw565z36"))))
+                "1sbidym6ld4c8cx2ww5i54zsv8v0kygv15zq1yimz44v4my605wf"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("boost" ,boost)
-       ("libevdev" ,libevdev)
-       ("libudev" ,eudev)
-       ("yaml-cpp" ,yaml-cpp)))
+     (list boost libevdev eudev yaml-cpp))
     (arguments
-     `(#:tests? #f)) ; no test suite
+     `(#:tests? #f))                    ; no test suite
     (synopsis "Utilities for operating on input events of evdev devices")
     (description
      "Interception Tools provides a composable infrastructure on top of
@@ -3887,8 +3936,7 @@ devices that can inject events directly into the input subsystem.")
                 "0s49vbg3j4rwh78i8rx8qr7myql09p7b3lhrjl0p7dd98xp6ann6"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libevdev" ,libevdev)
-       ("yaml-cpp" ,yaml-cpp)))
+     (list libevdev yaml-cpp))
     (arguments
      `(#:make-flags (list ,(string-append "CC=" (cc-for-target))
                           ,(string-append "CXX=" (cxx-for-target))
@@ -3940,8 +3988,7 @@ one to send arbitrary keycodes when a given key is tapped or held.")
               (patches (search-patches "lvm2-static-link.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("procps" ,procps)))                       ;tests use 'pgrep'
+     (list pkg-config procps))                       ;tests use 'pgrep'
     (inputs
      `(("libaio" ,libaio)
        ("udev" ,eudev)))
@@ -4050,55 +4097,74 @@ mapper.  Kernel components are part of Linux-libre.")
      `(("automake" ,automake)
        ("autoreconf" ,autoconf)))
     (inputs
-     `(("boost" ,boost)
-       ("expat" ,expat)
-       ("libaio" ,libaio)))
+     (list boost expat libaio))
     (synopsis "Tools for manipulating the metadata of device-mapper targets")
     (description "A suite of tools for manipulating the metadata of the
 dm-thin, dm-cache and dm-era device-mapper targets.")
     (home-page "https://github.com/jthornber/thin-provisioning-tools")
     (license license:gpl3+)))
 
-(define-public wireless-tools
+(define-public watchdogd
   (package
-    (name "wireless-tools")
-    (version "30.pre9")
+    (name "watchdogd")
+    (version "3.5")
     (source (origin
-              (method url-fetch)
-              (uri (string-append "http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/wireless_tools."
-                                  version ".tar.gz"))
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/troglobit/watchdogd")
+                    (commit version)))
+              (file-name (git-file-name name version))
               (sha256
                (base32
-                "0qscyd44jmhs4k32ggp107hlym1pcyjzihiai48xs7xzib4wbndb"))
-              (snippet
-               '(begin
-                  ;; Remove the older header files that are not free software.
-                  (for-each (lambda (n)
-                              (delete-file (format #f "wireless.~a.h" n)))
-                            '(10 11 12 13 14 15 16 17 18 19 20))
-                  #t))))
+                "05f7igavzimfgbh39fflbkmpya12r854n03dkyimwashcqwchx8f"))))
+    (build-system gnu-build-system)
+    (native-inputs (list autoconf automake libtool pkg-config))
+    (inputs (list libconfuse libite libuev))
+    (synopsis "Advanced system & process supervisor for Linux")
+    (description "This package provides an advanced monitor of critical system
+resources, supervises the heartbeat of processes, records deadline
+transgressions, and initiates a controlled reset if needed.")
+    (home-page "https://troglobit.com/projects/watchdogd/")
+    (license license:isc)))
+
+(define-public wireless-tools
+  (package
+    (name "wireless-tools")
+    (version "30.pre9")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "http://www.hpl.hp.com/personal/Jean_Tourrilhes/"
+                           "Linux/wireless_tools." version ".tar.gz"))
+       (sha256
+        (base32 "0qscyd44jmhs4k32ggp107hlym1pcyjzihiai48xs7xzib4wbndb"))
+       (snippet
+        #~(begin
+            ;; Remove the older header files that are not free software.
+            (for-each (lambda (n)
+                        (delete-file (format #f "wireless.~a.h" n)))
+                      '(10 11 12 13 14 15 16 17 18 19 20))))))
     (build-system gnu-build-system)
     (arguments
-     `(#:make-flags
-       (list (string-append "PREFIX=" %output)
-             (string-append "INSTALL_MAN=" %output "/share/man")
-             (string-append "LDFLAGS=-Wl,-rpath=" %output "/lib")
-             "BUILD_STATIC=")
-       #:phases
-       (modify-phases %standard-phases
-         (replace 'configure
-           (lambda* (#:key target #:allow-other-keys)
-             (when ,(%current-target-system)
-               ;; Cross-compilation: use the cross tools.
-               (substitute* (find-files "." "Makefile")
-                 (("CC = .*$")
-                  (string-append "CC = " target "-gcc\n"))
-                 (("AR = .*$")
-                  (string-append "AR = " target "-ar\n"))
-                 (("RANLIB = .*$")
-                  (string-append "RANLIB = " target "-ranlib\n"))))
-             #t)))
-       #:tests? #f))
+     (list #:make-flags
+           #~(list (string-append "PREFIX=" #$output)
+                   (string-append "INSTALL_MAN=" #$output "/share/man")
+                   (string-append "LDFLAGS=-Wl,-rpath=" #$output "/lib")
+                   "BUILD_STATIC=")
+           #:phases
+           #~(modify-phases %standard-phases
+               (replace 'configure
+                 (lambda* (#:key target #:allow-other-keys)
+                   (when target
+                     ;; Cross-compilation: use the cross tools.
+                     (substitute* (find-files "." "Makefile")
+                       (("CC = .*$")
+                        (string-append "CC = " target "-gcc\n"))
+                       (("AR = .*$")
+                        (string-append "AR = " target "-ar\n"))
+                       (("RANLIB = .*$")
+                        (string-append "RANLIB = " target "-ranlib\n")))))))
+           #:tests? #f))
     (synopsis "Tools for manipulating Linux Wireless Extensions")
     (description "Wireless Tools are used to manipulate the now-deprecated
 Linux Wireless Extensions; consider using @code{iw} instead.  The Wireless
@@ -4185,9 +4251,8 @@ interface.")
                        (string-append "REG_BIN=" regdb
                                       "/lib/crda/regulatory.bin")
                        "all_noverify"))))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("wireless-regdb" ,wireless-regdb)))
-    (inputs `(("libnl" ,libnl)))
+    (native-inputs (list pkg-config wireless-regdb))
+    (inputs (list libnl))
     (home-page
      "https://wireless.wiki.kernel.org/en/developers/Regulatory/CRDA")
     (synopsis "Central regulatory domain agent (CRDA) for WiFi")
@@ -4283,14 +4348,8 @@ country-specific regulations for the wireless spectrum.")
         (base32 "1ipf6wjx037sqyhy0r5jh4983h216anq9l68ckn2x5c3qc4wfmzn"))
        (patches (search-patches "lm-sensors-hwmon-attrs.patch"))))
     (build-system gnu-build-system)
-    (inputs `(("rrdtool" ,rrdtool)
-              ("perl" ,perl)
-              ("kmod" ,kmod)
-              ("gnuplot" ,gnuplot)))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("flex" ,flex)
-                     ("bison" ,bison)
-                     ("which" ,which)))
+    (inputs (list rrdtool perl kmod gnuplot))
+    (native-inputs (list pkg-config flex bison which))
     (outputs '("lib"                    ; avoid perl in closure
                "out"))
     (arguments
@@ -4317,27 +4376,28 @@ country-specific regulations for the wireless spectrum.")
              (substitute* '("prog/pwm/pwmconfig"
                             "prog/pwm/fancontrol")
                (("gnuplot")
-                (string-append (assoc-ref inputs "gnuplot")
-                               "/bin/gnuplot"))
+                (search-input-file inputs "/bin/gnuplot"))
                (("cat ")
-                (string-append (assoc-ref inputs "coreutils")
-                               "/bin/cat "))
+                (string-append (search-input-file inputs "/bin/cat")
+                               " "))
                (("e?grep " match)
-                (string-append (assoc-ref inputs "grep")
-                               "/bin/" match))
+                (string-append (search-input-file inputs
+                                                  (string-append
+                                                   "/bin/"
+                                                   (string-trim-right match)))
+                               " "))
                (("sed -e")
-                (string-append (assoc-ref inputs "sed")
-                               "/bin/sed -e"))
+                (string-append (search-input-file inputs "/bin/sed")
+                               " -e"))
                (("cut -d")
-                (string-append (assoc-ref inputs "coreutils")
-                               "/bin/cut -d"))
+                (string-append (search-input-file inputs "/bin/cut")
+                               " -d"))
                (("sleep ")
-                (string-append (assoc-ref inputs "coreutils")
-                               "/bin/sleep "))
+                (string-append (search-input-file inputs "/bin/sleep")
+                               " "))
                (("readlink -f")
-                (string-append (assoc-ref inputs "coreutils")
-                               "/bin/readlink -f")))
-             #t)))))
+                (string-append (search-input-file inputs "/bin/readlink")
+                               " -f"))))))))
     (home-page "https://hwmon.wiki.kernel.org/lm_sensors")
     (synopsis "Utilities to read temperature/voltage/fan sensors")
     (description
@@ -4383,12 +4443,13 @@ create a firmware image suitable for the Linux kernel, and more.")
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ; no 'check' target
-       #:make-flags (list (string-append "prefix=" %output)
-                          ,(string-append "CC=" (cc-for-target)))
+       #:make-flags
+       ,#~(list (string-append "prefix=" #$output)
+                (string-append "CC=" #$(cc-for-target)))
        ;; No configure script.
        #:phases (modify-phases %standard-phases (delete 'configure))))
     (inputs
-     `(("perl" ,perl)))
+     (list perl))
     (home-page "http://jdelvare.nerim.net/devel.html#i2ctools")
     (synopsis "I2C tools for Linux")
     (description
@@ -4413,7 +4474,7 @@ SMBus access.")
     (build-system gnu-build-system)
     (inputs `(("lm-sensors" ,lm-sensors "lib")
               ("gtk" ,gtk+-2)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -4604,27 +4665,26 @@ isolation or root privileges.")
 (define-public hdparm
   (package
     (name "hdparm")
-    (version "9.62")
+    (version "9.63")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/hdparm/hdparm/"
                                   "hdparm-" version ".tar.gz"))
               (sha256
                (base32
-                "0zvppv8qw0y1shlhn34iq1g4883i1cywsa514n595nmyrmsrs3rc"))))
+                "14cni5r116k07zqj0565byjhv6gf3ns6hd8jkjl7fn5sxgm5sy3h"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:make-flags
-       (let ((out (assoc-ref %outputs "out")))
-         (list (string-append "binprefix=" out)
-               (string-append "manprefix=" out)
-               ,(string-append "CC=" (cc-for-target))
-               ;; Let Guix strip the binaries and not break cross-compilation.
-               "STRIP=true"))
-       #:phases
-       (modify-phases %standard-phases
-         (delete 'configure))           ; no configure script
-       #:tests? #f))                    ; no test suite
+     (list #:make-flags
+           #~(list (string-append "binprefix=" #$output)
+                   (string-append "manprefix=" #$output)
+                   (string-append "CC=" #$(cc-for-target))
+                   ;; Let Guix strip binaries and not break cross-compilation.
+                   "STRIP=true")
+           #:phases
+           #~(modify-phases %standard-phases
+               (delete 'configure))     ; no configure script
+           #:tests? #f))                ; no test suite
     (home-page "https://sourceforge.net/projects/hdparm/")
     (synopsis "View and tune ATA disk drive parameters")
     (description
@@ -4643,7 +4703,7 @@ Translation (@dfn{SAT}) are also supported.")
 (define-public nvme-cli
   (package
     (name "nvme-cli")
-    (version "1.14")
+    (version "1.16")
     (home-page "https://github.com/linux-nvme/nvme-cli")
     (source (origin
               (method git-fetch)
@@ -4651,21 +4711,22 @@ Translation (@dfn{SAT}) are also supported.")
                     (url home-page)
                     (commit (string-append "v" version))))
               (sha256
-               (base32 "0dpadz945482srqpsbfx1bh7rc499fgpyzz1flhk9g9xjbpapkzc"))
+               (base32 "130x5cf6kkcnyg5qd35igii249ysfjnbxp1pxfwkickmqg3d007z"))
               (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (arguments
-     `(#:make-flags
-       (list ,(string-append "CC=" (cc-for-target)))
-       #:phases (modify-phases %standard-phases
-                  (delete 'configure)   ; no ./configure script
-                  (replace 'install
-                    (lambda _
-                      (invoke "make" "install-spec" "PREFIX="
-                              (string-append "DESTDIR=" %output)))))
-       ;; The tests require sysfs, which is not accessible from from the build
-       ;; environment
-       #:tests? #f))
+     (list #:make-flags
+           #~(list (string-append "CC=" #$(cc-for-target)))
+           #:phases
+           #~(modify-phases %standard-phases
+               (delete 'configure)      ; no ./configure script
+               (replace 'install
+                 (lambda _
+                   (invoke "make" "install-spec" "PREFIX="
+                           (string-append "DESTDIR=" #$output)))))
+           ;; The tests require sysfs, which is not accessible from from the
+           ;; build environment.
+           #:tests? #f))
     (synopsis "NVM-Express user space tooling for Linux")
     (description "Nvme-cli is a utility to provide standards compliant tooling
 for NVM-Express drives.  It was made specifically for Linux as it relies on the
@@ -4724,14 +4785,14 @@ about ACPI devices.")
 (define-public acpid
   (package
     (name "acpid")
-    (version "2.0.32")
+    (version "2.0.33")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/acpid2/acpid-"
                                   version ".tar.xz"))
               (sha256
                (base32
-                "0zhmxnhnhg4v1viw82yjr22kram6k5k1ixznhayk8cnw7q5x7lpj"))))
+                "1s6vf8lqwrcqi14k0ww47pk1kifbvxin73ha7mk1njmk7qdzfmh8"))))
     (build-system gnu-build-system)
     (home-page "https://sourceforge.net/projects/acpid2/")
     (synopsis "Daemon for delivering ACPI events to user-space programs")
@@ -4767,50 +4828,40 @@ also contains the libsysfs library.")
     ;; The rest is mostly gpl2, with a few files indicating gpl2+.
     (license (list license:gpl2 license:gpl2+ license:lgpl2.1+))))
 
-(define-public sysfsutils-1
-  (package
-    (inherit sysfsutils)
-    (version "1.3.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri
-        (string-append
-         "mirror://sourceforge/linux-diag/sysfsutils/sysfsutils-" version
-         "/sysfsutils-" version ".tar.gz"))
-       (sha256
-        (base32 "0kdhs07fm8263pxwd5blwn2x211cg4fk63fyf9ijcdkvzmwxrqq3"))
-       (modules '((guix build utils)))
-       (snippet
-        '(begin
-           (substitute* "Makefile.in"
-             (("includedir = /usr/include/sysfs")
-              "includedir = @includedir@"))
-           (substitute* "configure"
-             (("includedir='(\\$\\{prefix\\}/include)'" all orig)
-              (string-append "includedir='" orig "/sysfs'")))
-           #t))))
-    (synopsis "System utilities based on Linux sysfs (version 1.x)")))
-
 (define-public cpufrequtils
   (package
     (name "cpufrequtils")
-    (version "0.3")
+    (version "008")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://kernel.org/linux/utils/kernel/cpufreq/"
                            "cpufrequtils-" version ".tar.gz"))
        (sha256
-        (base32 "0qfqv7nqmjfr3p0bwrdlxkiqwqr7vmx053cadaa548ybqbghxmvm"))
-       (patches (search-patches "cpufrequtils-fix-aclocal.patch"))))
+        (base32 "0xjs8j44hh0cz6qpig1n0iw8xjpr6s5qmcmwh965ngapxgarr7af"))))
     (build-system gnu-build-system)
-    (native-inputs
-     `(("sysfsutils" ,sysfsutils-1)))
     (arguments
-     '(#:make-flags (list (string-append "LDFLAGS=-Wl,-rpath="
-                                         (assoc-ref %outputs "out") "/lib"))))
-    (home-page "https://www.kernel.org/pub/linux/utils/kernel/cpufreq/")
+     `(#:tests? #f                      ; no test suite
+       #:make-flags
+       (let ((out (assoc-ref %outputs "out")))
+         (list "PROC=false"             ; obsoleted by sysfs in Linux 2.6(!)
+               (string-append "CC=" ,(cc-for-target))
+               (string-append "LDFLAGS=-Wl,-rpath=" out "/lib")
+               "INSTALL=install"
+               (string-append "bindir=" out "/bin")
+               (string-append "sbindir=" out "/sbin")
+               (string-append "mandir=" out "/share/man")
+               (string-append "includedir=" out "/include")
+               (string-append "libdir=" out "/lib")
+               (string-append "localedir=" out "/share/locale")
+               (string-append "docdir=" out "/share/doc/" ,name)))
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure))))         ; no configure script
+    (native-inputs
+     `(("gettext" ,gettext-minimal)))
+    (home-page
+     "http://ftp.be.debian.org/pub/linux/utils/kernel/cpufreq/cpufrequtils.html")
     (synopsis "Utilities to get and set CPU frequency on Linux")
     (description
      "The cpufrequtils suite contains utilities to retrieve CPU frequency
@@ -4818,6 +4869,65 @@ information, and set the CPU frequency if supported, using the cpufreq
 capabilities of the Linux kernel.")
     (license license:gpl2)))
 
+(define-public libite
+  (package
+    (name "libite")
+    (version "2.5.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/troglobit/libite")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "14i0q0nxns6g4zh86zdqy97dwljkqdr5l85ammljzccsrijg9m8v"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-tests
+           (lambda* (#:key inputs #:allow-other-keys)
+             ;; replace paths to the executables
+             (substitute* "test/which.c"
+               (("/usr/bin/which")
+                (search-input-file inputs "/bin/which"))
+               (("ls\"")
+                (string-append
+                 (search-input-file inputs "/bin/ls") "\"")))
+             ;; create pidfile in /tmp instead of /var
+             (substitute* "test/pidfile.c" (("/var/tmp") "/tmp")))))))
+    (native-inputs (list autoconf automake libtool which))
+    (synopsis "Library providing missing pieces in GNU libc")
+    (description "This package provides many of the missing pieces in GNU
+libc.  Most notably the string functions: strlcpy(3), strlcat(3) and the *BSD
+sys/queue.h and sys/tree.h API's.")
+    (home-page "https://troglobit.com/projects/libite/")
+    (license license:expat)))
+
+(define-public libuev
+  (package
+    (name "libuev")
+    (version "2.4.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/troglobit/libuev")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0ih82lxfdcq179kknzdl5c8vi1l0n5j7yh68y8f6kwsrm457paf7"))))
+    (build-system gnu-build-system)
+    (native-inputs (list autoconf automake libtool))
+    (synopsis "Lightweight event loop library for epoll family APIs")
+    (description "This package provides small event loop that wraps the
+epoll family of APIs.")
+    (home-page "https://troglobit.com/projects/libuev/")
+    (license license:expat)))
+
 (define-public libraw1394
   (package
     (name "libraw1394")
@@ -4854,9 +4964,9 @@ protocol in question.")
                 "0lsv46jdqvdx5hx92v0z2cz3yh6212pz9gk0k3513sbaa04zzcbw"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (propagated-inputs
-     `(("libraw1394" ,libraw1394))) ; required by libavc1394.pc
+     (list libraw1394)) ; required by libavc1394.pc
     (home-page "https://sourceforge.net/projects/libavc1394/")
     (synopsis "AV/C protocol library for IEEE 1394")
     (description
@@ -4878,9 +4988,9 @@ the 1394 Trade Association.  AV/C stands for Audio/Video Control.")
                 "17ph458zya2l8dr2xwqnzy195qd9swrir31g78qkgb3g4xz2rq6i"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (propagated-inputs
-     `(("libraw1394" ,libraw1394))) ; required by libiec61883.pc
+     (list libraw1394)) ; required by libiec61883.pc
     (home-page "https://ieee1394.wiki.kernel.org/index.php/Main_Page")
     (synopsis "Isochronous streaming media library for IEEE 1394")
     (description
@@ -4891,7 +5001,7 @@ MPEG-2 and audio over Linux IEEE 1394.")
 (define-public mdadm
   (package
     (name "mdadm")
-    (version "4.1")
+    (version "4.2")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -4899,40 +5009,38 @@ MPEG-2 and audio over Linux IEEE 1394.")
                     version ".tar.xz"))
               (sha256
                (base32
-                "0jjgjgqijpdp7ijh8slzzjjw690kydb1jjadf0x5ilq85628hxmb"))))
+                "07ghmibmbnkdy91ng87zdllzicm299l20dhs9m5bfjw6f1b22726"))))
     (build-system gnu-build-system)
+    (arguments
+     (list #:make-flags
+           #~(list (string-append "CC=" #$(cc-for-target))
+                   "INSTALL=install"
+                   "CHECK_RUN_DIR=0"
+                   ;; TODO: tell it where to find 'sendmail'
+                   ;; (string-append "MAILCMD=" <???> "/sbin/sendmail")
+                   (string-append "BINDIR="  #$output "/sbin")
+                   (string-append "MANDIR="  #$output "/share/man")
+                   (string-append "UDEVDIR=" #$output "/lib/udev"))
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-before 'build 'patch-program-paths
+                 (lambda* (#:key native-inputs inputs #:allow-other-keys)
+                   (let ((coreutils (assoc-ref (or native-inputs inputs)
+                                               "coreutils")))
+                     (substitute* "udev-md-raid-arrays.rules"
+                       (("/usr/bin/(readlink|basename)" all program)
+                        (string-append coreutils "/bin/" program))))))
+               (add-before 'build 'remove-W-error
+                 (lambda _
+                   ;; We cannot build with -Werror on i686 due to a
+                   ;; 'sign-compare' warning in util.c.
+                   (substitute* "Makefile"
+                     (("-Werror") ""))))
+               (delete 'configure))
+           ;; Tests must be run as root.
+           #:tests? #f))
     (inputs
-     `(("udev" ,eudev)))
-    (arguments
-     `(#:make-flags (let ((out (assoc-ref %outputs "out")))
-                      (list ,(string-append "CC=" (cc-for-target))
-                            "INSTALL=install"
-                            "CHECK_RUN_DIR=0"
-                            ;; TODO: tell it where to find 'sendmail'
-                            ;; (string-append "MAILCMD=" <???> "/sbin/sendmail")
-                            (string-append "BINDIR=" out "/sbin")
-                            (string-append "MANDIR=" out "/share/man")
-                            (string-append "UDEVDIR=" out "/lib/udev")))
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'build 'patch-program-paths
-           (lambda* (#:key native-inputs inputs #:allow-other-keys)
-             (let ((coreutils (assoc-ref (or native-inputs inputs)
-                                         "coreutils")))
-               (substitute* "udev-md-raid-arrays.rules"
-                 (("/usr/bin/(readlink|basename)" all program)
-                  (string-append coreutils "/bin/" program))))
-             #t))
-         (add-before 'build 'remove-W-error
-           (lambda _
-             ;; We cannot build with -Werror on i686 due to a
-             ;; 'sign-compare' warning in util.c.
-             (substitute* "Makefile"
-               (("-Werror") ""))
-             #t))
-         (delete 'configure))
-       ;;tests must be done as root
-       #:tests? #f))
+     (list eudev))
     (supported-systems (delete "i586-gnu" %supported-systems))
     (home-page "http://neil.brown.name/blog/mdadm")
     (synopsis "Tool for managing Linux Software RAID arrays")
@@ -4949,20 +5057,21 @@ arrays when needed.")
     (arguments
      (substitute-keyword-arguments (package-arguments mdadm)
        ((#:make-flags flags)
-        `(cons "LDFLAGS = -static" ,flags))
+        #~(cons* "LDFLAGS = -static"
+                 "CXFLAGS = -DNO_LIBUDEV"
+                 #$flags))
        ((#:phases phases)
-        `(modify-phases ,phases
-           (add-after 'install 'remove-cruft
-             (lambda* (#:key outputs #:allow-other-keys)
-               (let* ((out         (assoc-ref outputs "out"))
-                      (precious?   (lambda (file)
-                                     (member file '("." ".." "sbin"))))
-                      (directories (scandir out (negate precious?))))
-                 (with-directory-excursion out
-                   (for-each delete-file-recursively directories)
-                   (remove-store-references "sbin/mdadm")
-                   (delete-file "sbin/mdmon")
-                   #t))))))
+        #~(modify-phases #$phases
+            (add-after 'install 'remove-cruft
+              (lambda* (#:key outputs #:allow-other-keys)
+                (let* ((out         (assoc-ref outputs "out"))
+                       (precious?   (lambda (file)
+                                      (member file '("." ".." "sbin"))))
+                       (directories (scandir out (negate precious?))))
+                  (with-directory-excursion out
+                    (for-each delete-file-recursively directories)
+                    (remove-store-references "sbin/mdadm")
+                    (delete-file "sbin/mdmon")))))))
        ((#:modules modules %gnu-build-system-modules)
         `((ice-9 ftw) ,@modules))
        ((#:strip-flags _ '())
@@ -5055,12 +5164,9 @@ arrays when needed.")
              #t))
          (delete 'configure))))         ; no configure script
     (native-inputs
-     `(("perl" ,perl)
-       ("pkg-config" ,pkg-config)
-       ("valgrind" ,valgrind)
-
-       ;; For tests.
-       ("cmocka" ,cmocka)))
+     (list perl pkg-config valgrind
+           ;; For tests.
+           cmocka))
     (inputs
      `(("json-c" ,json-c)
        ("libaio" ,libaio)
@@ -5097,17 +5203,22 @@ Linux Device Mapper multipathing driver:
                 "14mlqdapjqq1dhpkdgy5z83mvsaz36fcxca7a4z6hinmr7r6415b"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:make-flags
-       (let ((target ,(%current-target-system)))
-         (list (string-append "prefix=" %output)
-               (string-append
-                "CC=" (if target
-                          (string-append (assoc-ref %build-inputs "cross-gcc")
-                                         "/bin/" target "-gcc")
-                          "gcc"))))
-       #:test-target "partcheck" ; need root for a full 'check'
-       #:phases
-       (modify-phases %standard-phases (delete 'configure)))) ; no configure script
+     (list #:make-flags
+           #~(let ((target #$(%current-target-system)))
+               ;; XXX TODO: Replace with simply #$OUTPUT on core-updates.
+               (list (string-append "prefix=" #$(if (%current-target-system)
+                                                    #~#$output
+                                                    #~%output))
+                     (string-append
+                      "CC=" (if target
+                                (string-append (assoc-ref %build-inputs
+                                                          "cross-gcc")
+                                               "/bin/" target "-gcc")
+                                "gcc"))))
+           #:test-target "partcheck"    ; need root for a full 'check'
+           #:phases
+           #~(modify-phases %standard-phases
+               (delete 'configure)))) ; no configure script
     (home-page "https://pagure.io/libaio")
     (synopsis "Linux-native asynchronous I/O access library")
     (description
@@ -5173,9 +5284,9 @@ event traces from the kernel (via the relaying through the debug file system).")
                 "1liig5856crb331dps18mp0s13zbkv7yh007zqhq97m94fcddfhc"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libsndfile" ,libsndfile)))
+     (list libsndfile))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.kernel.org/pub/linux/bluetooth/")
     (synopsis "Bluetooth subband audio codec")
     (description
@@ -5235,18 +5346,14 @@ Bluetooth audio output devices like headphones or loudspeakers.")
                  (("hid2hci --method")
                   (string-append out "/lib/udev/hid2hci --method"))
                  (("/sbin/udevadm")
-                  (string-append (assoc-ref inputs "eudev") "/bin/udevadm")))
+                  (search-input-file inputs "/bin/udevadm")))
                #t))))))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("rst2man" ,python-docutils)
        ("gettext" ,gettext-minimal)))
     (inputs
-     `(("glib" ,glib)
-       ("dbus" ,dbus)
-       ("eudev" ,eudev)
-       ("libical" ,libical)
-       ("readline" ,readline)))
+     (list glib dbus eudev libical readline))
     (home-page "http://www.bluez.org/")
     (synopsis "Linux Bluetooth protocol stack")
     (description
@@ -5268,9 +5375,9 @@ is flexible, efficient and uses a modular implementation.")
                 "1lz00q8g4590mrdqmf13ba1s9zrqq645ymgm5p9y99ad0qv22r87"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("fuse" ,fuse)))
+     (list fuse))
     (home-page "https://github.com/relan/exfat")
     (synopsis "Mount exFAT file systems")
     (description
@@ -5291,11 +5398,9 @@ write access to exFAT devices.")
                 "127xql52dcdhmh7s5m9xc6q39jdlj3zhbjar1j821kb6gl3jw94b"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("fuse" ,fuse)
-       ("glib" ,glib)
-       ("zlib" ,zlib)))
+     (list fuse glib zlib))
     (home-page "https://sourceforge.net/projects/fuseiso/")
     (synopsis "Mount ISO file system images")
     (description
@@ -5344,12 +5449,12 @@ Ridge, Joliet, and zisofs.")
                                               (assoc-ref %outputs "out")
                                               "/lib"))))
     (native-inputs
-     `(("texinfo" ,texinfo)
-       ("bison" ,bison)
-       ("flex" ,flex)
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list texinfo
+           bison
+           flex
+           autoconf
+           automake
+           libtool))
     (home-page "https://www.nico.schottelius.org/software/gpm/")
     (synopsis "Mouse support for the Linux console")
     (description
@@ -5361,7 +5466,7 @@ and copy/paste text in the console and in xterm.")
 (define-public btrfs-progs
   (package
     (name "btrfs-progs")
-    (version "5.14")
+    (version "5.15.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://kernel.org/linux/kernel/"
@@ -5369,7 +5474,7 @@ and copy/paste text in the console and in xterm.")
                                   "btrfs-progs-v" version ".tar.xz"))
               (sha256
                (base32
-                "0mwxhwws6scjjpfws5xp7988wwwfa46jp5y3kn6jjmjpxiqm85da"))))
+                "085rg9p7kifhh8kjyyhs38y86srwk820s6v07min5gb177rzhc32"))))
     (build-system gnu-build-system)
     (outputs '("out"
                "static"))      ; static versions of the binaries in "out"
@@ -5380,8 +5485,7 @@ and copy/paste text in the console and in xterm.")
                       (substitute* "Makefile"
                         (("\\$\\(DESTDIR\\)\\$\\(udevruledir\\)")
                          (string-append (assoc-ref outputs "out")
-                                        "/lib/udev/rules.d")))
-                      #t))
+                                        "/lib/udev/rules.d")))))
                  (add-after 'build 'build-static
                    (lambda _ (invoke "make" "static")))
                  (add-after 'install 'install-bash-completion
@@ -5390,8 +5494,7 @@ and copy/paste text in the console and in xterm.")
                             (bashcomp (string-append out "/etc/bash_completion.d")))
                        (mkdir-p bashcomp)
                        (copy-file "btrfs-completion"
-                                  (string-append bashcomp "/btrfs"))
-                       #t)))
+                                  (string-append bashcomp "/btrfs")))))
                  (add-after 'install 'install-static
                    (let ((staticbin (string-append (assoc-ref %outputs "static")
                                                   "/bin")))
@@ -5414,9 +5517,6 @@ and copy/paste text in the console and in xterm.")
                      ("asciidoc" ,asciidoc)
                      ("python" ,python)
                      ("xmlto" ,xmlto)
-                     ;; Remove this input entirely when the default headers
-                     ;; version provides blk_zone.capacity (>= 5.9).
-                     ("linux-libre-headers" ,linux-libre-headers-5.10)
                      ;; For building documentation.
                      ("libxml2" ,libxml2)
                      ("docbook-xsl" ,docbook-xsl)
@@ -5493,7 +5593,7 @@ from the btrfs-progs package.  It is meant to be used in initrds.")
                (install-file "cramfsck" (string-append out "/sbin")))
              #t)))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (synopsis "Tools to manage Cramfs file systems")
     (description "Cramfs is a Linux file system designed to be simple, small,
 and to compress things well.  It is used on a number of embedded systems and
@@ -5516,7 +5616,7 @@ blocks and random block placement.")
               (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (inputs
-     `(("btrfs-progs" ,btrfs-progs)))
+     (list btrfs-progs))
     (arguments
      `(#:tests? #f                      ; No tests.
        #:make-flags
@@ -5560,7 +5660,8 @@ obviously it can be shared with files outside our set).")
 
     (build-system gnu-build-system)
     (arguments
-     `(#:phases
+     `(#:configure-flags '("CFLAGS=-fcommon")
+       #:phases
        (modify-phases %standard-phases
          (add-after 'install 'install-headers
            (lambda* (#:key outputs #:allow-other-keys)
@@ -5570,10 +5671,7 @@ obviously it can be shared with files outside our set).")
                (install-file "mkfs/f2fs_format_utils.h" out-include)
                #t))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
      `(("libuuid" ,util-linux "lib")
        ("libselinux" ,libselinux)))
@@ -5667,7 +5765,7 @@ disks and SD cards.  This package provides the userland utilities.")
              (chmod fsck #o555))
            #t))))
     (inputs
-     `(("f2fs-tools-static" ,f2fs-tools/static)))
+     (list f2fs-tools/static))
     (home-page (package-home-page f2fs-tools/static))
     (synopsis "Statically-linked fsck.f2fs command from f2fs-tools")
     (description "This package provides statically-linked fsck.f2fs command taken
@@ -5712,7 +5810,7 @@ feature, and a laptop with an accelerometer.  It has no effect on SSDs.")
 (define-public thinkfan
   (package
     (name "thinkfan")
-    (version "1.2.2")
+    (version "1.3.0")
     (source
      (origin
        (method git-fetch)
@@ -5721,7 +5819,7 @@ feature, and a laptop with an accelerometer.  It has no effect on SSDs.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "01l1pnj1cgy3dwgyys2s5iqzyv6kk47vlpy09qjafk8py21ijik3"))))
+        (base32 "1whdhf3aw0g4xwbn1csy2wz6g1hw5nlw64r91nnxba9qn25nl9k4"))))
     (build-system cmake-build-system)
     (arguments
      `(#:modules ((guix build cmake-build-system)
@@ -5753,10 +5851,9 @@ feature, and a laptop with an accelerometer.  It has no effect on SSDs.")
                   (string-append out directory)))
                #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libatasmart" ,libatasmart)
-       ("yaml-cpp" ,yaml-cpp)))
+     (list libatasmart yaml-cpp))
     (home-page "https://github.com/vmatare/thinkfan")
     (synopsis "Simple fan control program")
     (description
@@ -5812,7 +5909,7 @@ from userspace.")
                          (list "battery_asl" "examples" "README.md"))
                #t))))))
     (inputs
-     `(("perl" ,perl)))
+     (list perl))
     (home-page "https://github.com/teleshoes/tpacpi-bat")
     (synopsis "ThinkPad battery charge controller")
     (description
@@ -5856,7 +5953,7 @@ supported.")
                #t)))
          (delete 'configure))))         ; no configure script
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (home-page (package-home-page linux-libre))
     (synopsis "Monitor and test the Linux thermal subsystem in real time")
     (description
@@ -5897,7 +5994,7 @@ by hand is no trivial task: @command{tmon} aims to make it understandable.")
              #t))
          (delete 'configure))))         ; no configure script
     (inputs
-     `(("libcap" ,libcap)))
+     (list libcap))
     (supported-systems '("i686-linux" "x86_64-linux"))
     (home-page (package-home-page linux-libre))
     (synopsis "Report x86 processor frequency and idle statistics")
@@ -5934,11 +6031,12 @@ invocations of itself.")
                              "@sbindir@"))
                           #t))))
     (build-system gnu-build-system)
-    (inputs `(("util-linux" ,util-linux) ; libuuid
-              ("fuse" ,fuse)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list util-linux ; libuuid
+                  fuse))
+    (native-inputs (list pkg-config))
     (arguments
      '(#:configure-flags (list "--disable-static"
+                               "--disable-ldconfig" ;not necessary
                                "--exec-prefix=${prefix}"
                                "--with-fuse=external" ;use our own FUSE
                                "--enable-mount-helper"
@@ -5965,6 +6063,52 @@ commonly found on Microsoft Windows.  It is implemented as a FUSE file system.
 The package provides additional NTFS tools.")
     (license license:gpl2+)))
 
+(define-public ntfs-3g/static
+  (static-package
+   (package
+     (inherit ntfs-3g)
+     (name "ntfs-3g-static")
+     (arguments
+      (substitute-keyword-arguments (package-arguments ntfs-3g)
+        ((#:configure-flags flags)
+         `(append ,flags
+                  (list "--enable-really-static"
+                        ;; The FUSE driver isn't currently used by our initrd.
+                        "--disable-ntfs-3g")))
+        ((#:phases phases)
+         `(modify-phases ,phases
+            (add-after 'unpack 'make-really-static-really-static
+              (lambda _
+                (substitute* "ntfsprogs/Makefile.in"
+                  ((" -static") " -all-static"))))
+            (delete 'install-link))))))))
+
+(define-public ntfsfix/static
+  (package
+    (name "ntfsfix-static")
+    (version (package-version ntfs-3g/static))
+    (source #f)
+    (build-system trivial-build-system)
+    (arguments
+     `(#:modules ((guix build utils))
+       #:builder
+       (begin
+         (use-modules (guix build utils))
+         (let* ((ntfs-3g (assoc-ref %build-inputs "ntfs-3g"))
+                (out     (assoc-ref %outputs "out"))
+                (bin     (string-append out "/bin")))
+           (install-file (string-append ntfs-3g "/bin/ntfsfix") bin)
+           (with-directory-excursion bin
+             (remove-store-references "ntfsfix"))))))
+    (inputs
+     `(("ntfs-3g" ,ntfs-3g/static)))
+    (home-page (package-home-page ntfs-3g/static))
+    (synopsis "Statically linked @command{ntfsfix} from ntfs-3g")
+    (description
+     "This package provides a statically linked @command{ntfsfix} taken
+from the ntfs-3g package.  It is meant to be used in initrds.")
+    (license (package-license ntfs-3g/static))))
+
 (define-public rdma-core
   (package
     (name "rdma-core")
@@ -6059,7 +6203,7 @@ The following service daemons are also provided:
                             "src/raw_ethernet_send_lat.c")
                (("/usr/include/netinet/ip.h") "netinet/ip.h"))
              #t)))))
-    (inputs `(("rdma-core" ,rdma-core)))
+    (inputs (list rdma-core))
     (home-page "https://github.com/linux-rdma/perftest/")
     (synopsis "Open Fabrics Enterprise Distribution (OFED) Performance Tests")
     (description "This is a collection of tests written over uverbs intended for
@@ -6080,7 +6224,7 @@ The collection contains a set of bandwidth and latency benchmark such as:
   (package
     (name "rng-tools")
     (home-page "https://github.com/nhorman/rng-tools")
-    (version "6.13")
+    (version "6.14")
     (source (origin
               (method git-fetch)
               (uri (git-reference (url home-page)
@@ -6088,7 +6232,7 @@ The collection contains a set of bandwidth and latency benchmark such as:
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0m4895f44a668r0z7md5ifq7syndsb2by2dfhk794vmhprsk1406"))))
+                "1hrbm4y7fbzkg5j2f7vpj19ri2ff2lp77al17fhi4mv0bvdfjd9m"))))
     (build-system gnu-build-system)
     (arguments
      `(;; Disable support for various hardware entropy sources as they need
@@ -6098,9 +6242,7 @@ The collection contains a set of bandwidth and latency benchmark such as:
                            "--without-pkcs11"
                            "--without-rtlsdr")))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config))
     (inputs
      `(("libsysfs" ,sysfsutils)
        ("openssl" ,openssl)))
@@ -6144,7 +6286,7 @@ from that to the system kernel's @file{/dev/random} machinery.")
                             "PACKAGE_BUGREPORT=bug-guix@gnu.org"))
        #:tests? #f)) ;no tests
     (native-inputs `(("gettext" ,gettext-minimal)))
-    (inputs `(("pciutils" ,pciutils)))
+    (inputs (list pciutils))
     (home-page (package-home-page linux-libre))
     (synopsis "CPU frequency and voltage scaling tools for Linux")
     (description
@@ -6189,7 +6331,7 @@ cpufreq sub-system is enabled or not.")
 (define-public haveged
   (package
     (name "haveged")
-    (version "1.9.14")
+    (version "1.9.17")
     (source
      (origin
        (method git-fetch)
@@ -6198,8 +6340,11 @@ cpufreq sub-system is enabled or not.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "050hmnh5s2s4mb83f4d1fk23mk27pprg840c1aagc6v1sz6x5dhq"))))
+        (base32 "119iy8qrvdjkfwnzn1nfjzh2bbihb1vl44qhd6yzzcacjm6pwndr"))))
     (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags
+       (list "--disable-static")))
     (home-page "https://www.issihosts.com/haveged")
     (synopsis "Entropy source for the Linux random number generator")
     (description
@@ -6277,9 +6422,8 @@ not as a replacement for it.")
                  (("/sbin/dmsetup")
                   (string-append lvm2 "/sbin/dmsetup")))))))))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("perl" ,perl)                   ; for pod2man
-       ("pkg-config" ,pkg-config)))
+     (list intltool perl ; for pod2man
+           pkg-config))
     (inputs
      `(("keyutils" ,keyutils)
        ("linux-pam" ,linux-pam)
@@ -6318,7 +6462,7 @@ native Linux file system, and has been part of the Linux kernel since version
                                          (assoc-ref %outputs "out")
                                          "/lib/libnfsidmap"))))
     (native-inputs
-     `(("autoconf" ,autoconf)))         ; 0.27 still needs autoheader
+     (list autoconf))         ; 0.27 still needs autoheader
     (home-page
      "http://www.citi.umich.edu/projects/nfsv4/crossrealm/libnfsidmap_config.html")
     (synopsis "NFSv4 support library for name/ID mapping")
@@ -6365,7 +6509,7 @@ the default @code{nsswitch} and the experimental @code{umich_ldap}.")
 (define-public mcelog
   (package
     (name "mcelog")
-    (version "176")
+    (version "180")
     (source
      (origin
        (method git-fetch)
@@ -6374,14 +6518,13 @@ the default @code{nsswitch} and the experimental @code{umich_ldap}.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1mlwn6ck9qiwqa2vg5wg1gvfva3jv7ygjr7p7bam0qszajs5pirk"))
+        (base32 "1xy1082c67yd48idg5vwvrw7yx74gn6jj2d9c67d0rh6yji091ki"))
        (modules '((guix build utils)))
        (snippet
         `(begin
            ;; The checkout lacks a .git directory, breaking ‘git describe’.
            (substitute* "Makefile"
-             (("\"unknown\"") (string-append "\"v" ,version "\"")))
-           #t))))
+             (("\"unknown\"") (string-append "\"v" ,version "\"")))))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
@@ -6394,6 +6537,8 @@ the default @code{nsswitch} and the experimental @code{umich_ldap}.")
                             "etcprefix=$(DOCDIR)/examples"))
        ;; The tests will only run as root on certain supported CPU models.
        #:tests? #f))
+    (native-inputs
+     (list python-wrapper))             ; to generate example mcelog.conf
     (supported-systems (list "i686-linux" "x86_64-linux"))
     (home-page "https://mcelog.org/")
     (synopsis "Machine check monitor for x86 Linux systems")
@@ -6419,8 +6564,7 @@ exceeded.")
     (arguments
      '(#:configure-flags '("--enable-unit-tests")))
     (native-inputs
-     `(("cmocka" ,cmocka)
-       ("pkg-config" ,pkg-config)))
+     (list cmocka pkg-config))
     (inputs
      `(("acl" ,acl)                     ; extended attributes (xattr)
        ("libuuid" ,util-linux "lib")
@@ -6441,7 +6585,7 @@ of flash storage.")
 (define-public libseccomp
   (package
     (name "libseccomp")
-    (version "2.5.1")
+    (version "2.5.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/seccomp/libseccomp/"
@@ -6449,7 +6593,7 @@ of flash storage.")
                                   "/libseccomp-" version ".tar.gz"))
               (sha256
                (base32
-                "0m8dlg1v7kflcxvajs4p76p275qwsm2abbf5mfapkakp7hw7wc7f"))))
+                "0xhan73zn4p0n7s8vx6s47wjmidvk4x8r90vfbljairn6f3mq1jr"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--disable-static")
@@ -6458,11 +6602,9 @@ of flash storage.")
                     (lambda _
                       ;; This test does a native system call and fails when
                       ;; run under QEMU user-mode emulation.  Just skip it.
-                      (delete-file "tests/52-basic-load.tests")
-                      #t)))))
+                      (delete-file "tests/52-basic-load.tests"))))))
     (native-inputs
-     `(("gperf" ,gperf)
-       ("which" ,which)))
+     (list gperf which))
     (synopsis "Interface to Linux's seccomp syscall filtering mechanism")
     (description "The libseccomp library provides an easy to use, platform
 independent, interface to the Linux Kernel's syscall filtering mechanism.  The
@@ -6476,7 +6618,7 @@ developers.")
 (define-public radeontop
   (package
     (name "radeontop")
-    (version "1.3")
+    (version "1.4")
     (source
      (origin
        (method git-fetch)
@@ -6485,7 +6627,7 @@ developers.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0ay6vl9zsz9b2scy0fnsy482pzizj52i27syxwny4z4i9wrk2wmn"))))
+        (base32 "0kwqddidr45s1blp0h8r8h1dd1p50l516yb6mb4s6zsc827xzgg3"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
@@ -6495,20 +6637,16 @@ developers.")
                     (lambda _
                       (substitute* "getver.sh"
                         (("ver=unknown")
-                         (string-append "ver=" ,version)))
-                      #t))
+                         (string-append "ver=" ,version)))))
                   (delete 'configure))  ; no configure script
-       #:make-flags (list "CC=gcc"
+       #:make-flags (list (string-append "CC=" ,(cc-for-target))
                           (string-append "PREFIX=" %output))
        #:tests? #f))                    ; no tests
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("libdrm" ,libdrm)
-       ("libpciaccess" ,libpciaccess)
-       ("libxcb" ,libxcb)
-       ("ncurses" ,ncurses)))
+     (list libdrm libpciaccess libxcb ncurses))
     (home-page "https://github.com/clbr/radeontop/")
     (synopsis "Usage monitor for AMD Radeon graphics")
     (description "RadeonTop monitors resource consumption on supported AMD
@@ -6553,9 +6691,9 @@ under OpenGL graphics workloads.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("popt" ,popt)))
+     (list popt))
     (home-page "https://github.com/rhboot/efivar")
     (synopsis "Tool and library to manipulate EFI variables")
     (description "This package provides a library and a command line
@@ -6589,10 +6727,9 @@ interface to the variable facility of UEFI boot firmware.")
                           "EFIDIR=gnu")
        #:phases (modify-phases %standard-phases (delete 'configure))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("efivar" ,efivar)
-       ("popt" ,popt)))
+     (list efivar popt))
     (home-page "https://github.com/rhinstaller/efibootmgr")
     (synopsis "Modify the Extensible Firmware Interface (EFI) boot manager")
     (description
@@ -6605,14 +6742,14 @@ running boot option, and more.")
 (define-public sysstat
   (package
     (name "sysstat")
-    (version "12.4.3")
+    (version "12.4.4")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "http://pagesperso-orange.fr/sebastien.godard/"
                            "sysstat-" version ".tar.xz"))
        (sha256
-        (base32 "1z8bdyj92q0capbrdscwzb51bqh54ng15gpvmjmvrb2syhqj8hxf"))))
+        (base32 "091xjip7l52dxal8dsfh5chksr4g9gclnssw3hjjxy84kr3yf4lm"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ; no test suite.
@@ -6629,8 +6766,7 @@ running boot option, and more.")
            (lambda _
              (substitute* "Makefile"
                (("mkdir -p \\$\\(DESTDIR\\)\\$\\(SA_DIR\\)")
-                ""))
-             #t)))))
+                "")))))))
     (home-page "http://sebastien.godard.pagesperso-orange.fr/")
     (synopsis "Performance monitoring tools for Linux")
     (description "The sysstat utilities are a collection of performance
@@ -6654,7 +6790,8 @@ monitoring tools for Linux.  These include @code{mpstat}, @code{iostat},
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (arguments
-     `(#:phases
+     `(#:configure-flags '("CFLAGS=-fcommon")
+       #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-udev-rules-absolute-path-bins
            (lambda* (#:key inputs #:allow-other-keys)
@@ -6669,8 +6806,7 @@ monitoring tools for Linux.  These include @code{mpstat}, @code{iostat},
                 "90-backlight.rules" (string-append out "/lib/udev/rules.d"))
                #t))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (home-page "https://haikarainen.github.io/light/")
     (synopsis "GNU/Linux application to control backlights")
     (description
@@ -6717,9 +6853,9 @@ set the screen to be pitch black at a value of 0 (or higher).
                (("/bin/") "/run/current-system/profile/bin/"))
              #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("elogind" ,elogind)))
+     (list elogind))
     (synopsis "Backlight and LED brightness control")
     (description
      "This program allows you read and control device brightness.  Devices
@@ -6733,7 +6869,7 @@ interface in sysfs, which can be accomplished with the included udev rules.")
 (define-public tlp
   (package
     (name "tlp")
-    (version "1.4.0")
+    (version "1.5.0")
     (source
      (origin
        (method git-fetch)
@@ -6742,9 +6878,9 @@ interface in sysfs, which can be accomplished with the included udev rules.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0bnsz9bw9rj1apl80jwz39zj5mnlps3jbckihvl8bbdbrbhj6p06"))))
+        (base32 "0cssclk2brhwvn9dm7h5snm2svwy0c8cfr4z2cgkdkac2pfaaxw4"))))
     (native-inputs
-     `(("shellcheck" ,shellcheck)))
+     (list shellcheck))
     (inputs
      `(("bash" ,bash)
        ("dbus" ,dbus)
@@ -6786,6 +6922,7 @@ interface in sysfs, which can be accomplished with the included udev rules.")
                (setenv "TLP_NO_INIT" "1")
                (setenv "TLP_NO_PMUTILS" "1")
                (setenv "TLP_SBIN" (string-append out "/bin"))
+               (setenv "TLP_BATD" (string-append out "/share/tlp/bat.d"))
                (setenv "TLP_BIN" (string-append out "/bin"))
                (setenv "TLP_TLIB" (string-append out "/share/tlp"))
                (setenv "TLP_FLIB" (string-append out "/share/tlp/func.d"))
@@ -6800,15 +6937,13 @@ interface in sysfs, which can be accomplished with the included udev rules.")
                (setenv "TLP_SHCPL"
                        (string-append out "/share/bash-completion/completions"))
                (setenv "TLP_MAN" (string-append out "/share/man"))
-               (setenv "TLP_META" (string-append out "/share/metainfo"))
-               #t)))
+               (setenv "TLP_META" (string-append out "/share/metainfo")))))
          (add-before 'install 'fix-installation
            (lambda _
              ;; Stop the Makefile from trying to create system directories.
              (substitute* "Makefile"
                (("\\[ -f \\$\\(_CONFUSR\\) \\]") "#")
-               (("install -d -m 755 \\$\\(_VAR\\)") "#"))
-             #t))
+               (("install -d -m 755 \\$\\(_VAR\\)") "#"))))
          (replace 'install
            (lambda _ (invoke "make" "install-tlp" "install-man-tlp")))
          (add-after 'install 'wrap
@@ -6844,8 +6979,7 @@ interface in sysfs, which can be accomplished with the included udev rules.")
                                                "pciutils"
                                                "rfkill"
                                                "wireless-tools"))))))
-                         bin-files)
-               #t))))))
+                         bin-files)))))))
     (home-page "https://linrunner.de/en/tlp/tlp.html")
     (synopsis "Power management tool for Linux")
     (description "TLP is a power management tool for Linux.  It comes with
@@ -6856,6 +6990,70 @@ every time the power supply source is changed.")
     ;; rest is GPLv2+.
     (license (list license:gpl2+ license:gpl3+))))
 
+(define-public tlpui
+  (package
+    (name "tlpui")
+    (version "1.5.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/d4nj1/TLPUI")
+             (commit (string-append "tlpui-" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0ca18hazxksx516nkh28f6rd0l1039nkn7mszqfy68c461061q1h"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-setup.py
+           ;; Install data_files to $out/share instead of /usr/share.
+           (lambda _
+             (substitute* "setup.py"
+               (("/usr/") ""))))
+         (add-after 'unpack 'use-tlp-input
+           ;; Hard-code tlp-stat filename to avoid propagating "tlp".
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((tlp-stat (search-input-file inputs "/bin/tlp-stat")))
+               (with-directory-excursion "tlpui"
+                 (substitute* '("file.py" "settingshelper.py" "statui.py")
+                   (("which\\(\"tlp-stat\"\\)")
+                    (string-append "'" tlp-stat "'"))
+                   (("\"tlp-stat\"")
+                    (string-append "'" tlp-stat "'")))))))
+         (add-before 'check 'fix-home-directory
+           (lambda _
+             ;; Tests fail with "Permission denied:
+             ;; '/homeless-shelter'".
+             (setenv "HOME" "/tmp")))
+         ;; `sanity-check' phase errors out with the following
+         ;; messages: "Unable to init server: Could not connect:
+         ;; Connection refused" and "Error: cannot read user
+         ;; configuration from /etc/tlp.conf or /etc/default/tlp".
+         (delete 'sanity-check)
+         (replace 'check
+           (lambda _
+             (invoke "python" "-m" "discover")))
+         (add-after 'install 'wrap-gi-python
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out"))
+                   (gi-typelib-path (getenv "GI_TYPELIB_PATH")))
+               (wrap-program (string-append out "/bin/tlpui")
+                 `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path)))))))))
+    (native-inputs
+     (list `(,glib "bin") gobject-introspection python-discover))
+    (inputs
+     (list gtk+ python-pygobject tlp))
+    (home-page "https://github.com/d4nj1/TLPUI")
+    (synopsis "User interface for TLP written in Python")
+    (description
+     "The Python scripts in this project generate a GTK-UI to change
+TLP configuration files easily.  It aims to protect users from setting
+bad configuration and to deliver a basic overview of all the valid
+configuration values.")
+    (license license:gpl2+)))
+
 (define-public lshw
   (package
     (name "lshw")
@@ -6910,19 +7108,19 @@ re-use code and to avoid re-inventing the wheel.")
 (define-public libnftnl
   (package
     (name "libnftnl")
-    (version "1.2.0")
+    (version "1.2.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://netfilter.org/libnftnl/"
                            "libnftnl-" version ".tar.bz2"))
        (sha256
-        (base32 "1xblq1cbcxhr6qmjpy98i1qdza148idgz99vbhjc7s4vzvfizc4h"))))
+        (base32 "0z4khm2mnys9mcl8ckwf19cw20jgrv8650nfncy3xcgs2k2aa23m"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libmnl" ,libmnl)))
+     (list libmnl))
     (home-page "https://www.netfilter.org/projects/libnftnl/index.html")
     (synopsis "Netlink programming interface to the Linux nf_tables subsystem")
     (description "Libnftnl is a userspace library providing a low-level netlink
@@ -6931,10 +7129,28 @@ libnftnl has been previously known as libnftables.  This library is currently
 used by nftables.")
     (license license:gpl2+)))
 
+;; This is used in iptables, which contributes to rust.  We're pinning this
+;; variant to avoid accidental rebuilds of rust.
+(define-public libnftnl/fixed
+  (package (inherit libnftnl)
+    (version "1.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://netfilter.org/libnftnl/"
+                           "libnftnl-" version ".tar.bz2"))
+       (sha256
+        (base32 "1xblq1cbcxhr6qmjpy98i1qdza148idgz99vbhjc7s4vzvfizc4h"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     (list pkg-config))
+    (inputs
+     (list libmnl))))
+
 (define-public nftables
   (package
     (name "nftables")
-    (version "1.0.0")
+    (version "1.0.1")
     (source
      (origin
        (method url-fetch)
@@ -6943,18 +7159,14 @@ used by nftables.")
                   (string-append "https://www.nftables.org/projects/nftables"
                                  "/files/nftables-" version ".tar.bz2")))
        (sha256
-        (base32 "1x25zs2czmn14mmq1nqi4zibsvh04vqjbx5lxj42nylnmxym9gsq"))))
+        (base32 "08x4xw0s5sap3q7jfr91v7mrkxrydi4dvsckw85ims0qb1ibmviw"))))
     (build-system gnu-build-system)
     (arguments `(#:configure-flags
                  '("--disable-man-doc"  ; FIXME: needs docbook2x
-                   "--disable-static")))
-    (inputs `(("gmp" ,gmp)
-              ("libmnl" ,libmnl)
-              ("libnftnl" ,libnftnl)
-              ("readline" ,readline)))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("bison" ,bison)
-                     ("flex" ,flex)))
+                   "--disable-static"
+                   "--with-cli=readline")))
+    (inputs (list gmp libmnl libnftnl readline))
+    (native-inputs (list pkg-config bison flex))
     (home-page "https://www.nftables.org")
     (synopsis "Userspace utility for Linux packet filtering")
     (description "nftables is the project that aims to replace the existing
@@ -7088,15 +7300,14 @@ userspace queueing component and the logging subsystem.")
                           (mkdir-p man1)
                           (copy-file "doc/proot/man.1"
                                      (string-append man1 "/proot.1"))))))))
-      (native-inputs `(("which" ,which)
-                       ;; For 'mcookie', used by some of the tests.
-                       ("util-linux" ,util-linux)
-                       ("coreutils" ,coreutils)
-                       ("pkg-config" ,pkg-config)
-                       ;; For rst2man, used to generate the manual page.
-                       ("python-docutils" ,python-docutils)))
-      (inputs `(("libarchive" ,libarchive)
-                ("talloc" ,talloc)))
+      (native-inputs (list which
+                           ;; For 'mcookie', used by some of the tests.
+                           util-linux
+                           coreutils
+                           pkg-config
+                           ;; For rst2man, used to generate the manual page.
+                           python-docutils))
+      (inputs (list libarchive talloc))
       (home-page "https://github.com/proot-me/PRoot")
       (synopsis "Unprivileged chroot, bind mount, and binfmt_misc")
       (description
@@ -7136,14 +7347,14 @@ available in the kernel Linux.")
 (define-public cpuid
   (package
     (name "cpuid")
-    (version "20201006")
+    (version "20211210")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://www.etallen.com/cpuid/cpuid-"
                                   version ".src.tar.gz"))
               (sha256
                (base32
-                "19jnkh57f979b78ak5mpxmdvnkgc33r55cw9shgd2hc380b3zi8k"))))
+                "0i2z1r0zwsmvnx2azwsz3x6van6dj9480lh26s1ny6ny01bqjag0"))))
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags
@@ -7154,16 +7365,12 @@ available in the kernel Linux.")
                   (add-before 'install 'fix-makefile
                     (lambda* (#:key outputs #:allow-other-keys)
                       (substitute* "Makefile"
-                        (("\\$\\(BUILDROOT\\)/usr") (assoc-ref outputs "out")))
-                      ;; Make the compressed manpages writable so that the
-                      ;; reset-gzip-timestamps phase does not error out.
-                      (substitute* "Makefile"
-                        (("-m 444") "-m 644"))
-                      #t)))))
-    (inputs `(("perl" ,perl)))
+                        (("\\$\\(BUILDROOT\\)/usr")
+                         (assoc-ref outputs "out"))))))))
+    (inputs (list perl))
     (supported-systems '("i686-linux" "x86_64-linux"))
     (home-page "http://www.etallen.com/cpuid.html")
-    (synopsis "Linux tool to dump x86 CPUID information about the CPU(s)")
+    (synopsis "Dump x86 CPUID processor information")
     (description "cpuid dumps detailed information about the CPU(s) gathered
 from the CPUID instruction, and also determines the exact model of CPU(s).  It
 supports Intel, AMD, and VIA CPUs, as well as older Transmeta, Cyrix, UMC,
@@ -7186,11 +7393,9 @@ NexGen, Rise, and SiS CPUs.")
           "1pm68agkhrwgrplrfrnbwdcvx5lrivdmqw8pb5gdmm3xppnryji1"))))
     (build-system gnu-build-system)
     (inputs
-     `(("file" ,file)
-       ("fuse" ,fuse)
-       ("libmtp" ,libmtp)))
+     (list file fuse libmtp))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/JasonFerrara/jmtpfs")
     (synopsis "Use a FUSE file system to access data over MTP")
     (description "jmtpfs uses FUSE (file system in userspace) to provide access
@@ -7201,7 +7406,7 @@ the MTP device as a file system.")
 (define-public procenv
   (package
    (name "procenv")
-   (version "0.58")
+   (version "0.60")
    (source
     (origin
      (method git-fetch)
@@ -7210,18 +7415,14 @@ the MTP device as a file system.")
             (commit version)))
      (file-name (git-file-name name version))
      (sha256
-      (base32 "137n630qzml4yraqzp2fij8nzn8341nf8d58yzfhk8ddlzi60sfm"))))
+      (base32 "00d7q0h4qjc8lg435lq77lp2fx6ikm5piq90m81mr1dqqna1g6pz"))))
    (build-system gnu-build-system)
    (native-inputs
-    `(("pkg-config" ,pkg-config)
-
-      ;; For tests.
-      ("check" ,check)
-      ("groff" ,groff)))
+    (list pkg-config
+          ;; For tests.
+          check groff))
    (inputs
-    `(("expat" ,expat)
-      ("libcap" ,libcap)
-      ("libselinux" ,libselinux)))
+    (list expat libcap libselinux))
    (synopsis "Utility to show process environment")
    (description
     "Procenv is a command-line tool that displays as much detail about
@@ -7289,6 +7490,11 @@ libraries, which are often integrated directly into libfabric.")
     (arguments
      '(#:make-flags `("PSM_USE_SYS_UUID=1" "CC=gcc" "WERROR="
                       ,(string-append "INSTALL_PREFIX=" %output)
+                      ,(string-append "CFLAGS=-Wall -fpic -fPIC -D_GNU_SOURCE"
+                                      " -funwind-tables -O3 -g3"
+                                      " -DPSM_USE_SYS_UUID"
+                                      " -Wno-strict-aliasing -DNVALGRIND"
+                                      " -fcommon")
                       ,(string-append "LDFLAGS=-Wl,-rpath=" %output "/lib"))
        #:tests? #f
        #:phases (modify-phases %standard-phases
@@ -7433,10 +7639,9 @@ emulates the behaviour of Gunnar Monell's older fbgrab utility.")
     (arguments
      `(#:tests? #f))
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)))
+     (list bison flex))
     (inputs
-     `(("linux-pam" ,linux-pam)))
+     (list linux-pam))
     (home-page "https://sourceforge.net/projects/libcg/")
     (synopsis "Control groups management tools")
     (description "Control groups is Linux kernel method for process resource
@@ -7515,8 +7720,7 @@ privileges.")
                       (invoke "make" "install")
                       #t)))))
     (inputs
-     `(("rdma-core" ,rdma-core)
-       ("numactl" ,numactl)))
+     (list rdma-core numactl))
     (synopsis "Intel Performance Scaled Messaging 2 (PSM2) library")
     (description
      "This package is low-level user-level Intel's communications interface.
@@ -7550,6 +7754,7 @@ high-speed networking devices.")
                     (lambda* (#:key inputs outputs #:allow-other-keys)
                       (let* ((out (assoc-ref outputs "out")))
                         (setenv "CC" "gcc")
+                        (setenv "CFLAGS" "-Wno-format-truncation")
                         (invoke "make")
                         #t)))
                   (replace 'install
@@ -7615,8 +7820,7 @@ management tools in userspace.")
     (arguments
      `(#:import-path "github.com/vishvananda/netlink"))
     (native-inputs
-     `(("go-golang-org-x-sys" ,go-golang-org-x-sys)
-       ("go-netns" ,go-netns)))
+     (list go-golang-org-x-sys go-netns))
     (home-page "https://github.com/vishvananda/netlink")
     (synopsis "Simple netlink library for Go")
     (description "The netlink package provides a simple netlink library for
@@ -7669,7 +7873,7 @@ compatible with Python's ConfigParser style of .INI files, including RFC
 (define-public xfsprogs
   (package
     (name "xfsprogs")
-    (version "5.13.0")
+    (version "5.14.2")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -7677,11 +7881,13 @@ compatible with Python's ConfigParser style of .INI files, including RFC
                     "xfsprogs-" version ".tar.gz"))
               (sha256
                (base32
-                "09s3alwrhs1gaaywkpx2knc5bxb44b77009jw8zgsy9c2wxximns"))))
+                "0368dacdjq55ip38yizs9spdyl7b0b1c0vz3gr1gvcb9rw3a6dnp"))))
     (build-system gnu-build-system)
     (outputs (list "out" "python"))
     (arguments
      `(#:tests? #f   ; kernel/user integration tests are in package "xfstests"
+       #:configure-flags
+       (list "--disable-static")
        #:make-flags
        (list "V=1")
        #:phases
@@ -7703,6 +7909,7 @@ compatible with Python's ConfigParser style of .INI files, including RFC
      `(("gettext" ,gettext-minimal)))
     (inputs
      `(("libinih" ,libinih)
+       ("liburcu" ,liburcu)
        ("libuuid" ,util-linux "lib")
        ("python" ,python-wrapper)))
     (home-page "https://xfs.wiki.kernel.org/")
@@ -7720,6 +7927,9 @@ file systems.")
     (outputs (list "out"))
     (arguments
      (substitute-keyword-arguments (package-arguments xfsprogs)
+       ((#:configure-flags configure-flags '())
+        `(append ,configure-flags
+                 (list "--enable-static")))
        ((#:make-flags make-flags ''())
         `(cons* "LLDFLAGS=-all-static" ,make-flags))
        ((#:phases _ ''())
@@ -7793,8 +8003,7 @@ from the xfsprogs package.  It is meant to be used in initrds.")
                     "byteswap_fix.diff"))
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (home-page "https://github.com/jeremie-koenig/genext2fs")
     (synopsis "Generate ext2 file system as a normal user")
     (description "This package provides a program to generate an ext2
@@ -7806,68 +8015,80 @@ the superuser to make device nodes.")
 (define-public fakeroot
   (package
     (name "fakeroot")
-    (version "1.25.3")
-    (source (origin
-              ;; There are no tags in the repository, so take this snapshot.
-              (method url-fetch)
-              (uri (string-append "https://deb.debian.org/debian/pool/main/f/"
-                                  "fakeroot/fakeroot_" version ".orig.tar.gz"))
-              (file-name (string-append name "-" version ".tar.gz"))
-              (sha256
-               (base32
-                "0v4m3v1bdqvblwj3vqsb3mllgbci6dsgsydq6765nzvz6n1kd44f"))))
+    (version "1.26")
+    (source
+     (origin
+       ;; There are no tags in the repository, so take this snapshot.
+       (method url-fetch)
+       (uri (string-append "https://deb.debian.org/debian/pool/main/f/"
+                           "fakeroot/fakeroot_" version ".orig.tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1sg8inv1zzp4h9ncbbmxip3svd11sd86j22cvxrjwnf5zn7mf2j8"))
+       (modules '((guix build utils)
+                  (ice-9 ftw)))
+       (snippet
+        `(begin
+           ;; Delete pregenerated man page translations, but not the originals.
+           (with-directory-excursion "doc"
+             (for-each (lambda (language)
+                         (for-each delete-file
+                                   (find-files language "\\.[0-9]$")))
+                       (scandir "."
+                                (lambda (file)
+                                  (and (not (string-prefix? "." file))
+                                       (eq? 'directory
+                                            (stat:type (lstat file))))))))))))
     (build-system gnu-build-system)
     (arguments
-     `(#:phases
+     `(#:configure-flags
+       (list "--disable-static")
+       #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'patch-Makefile.am
+           (lambda _
+             (substitute* "Makefile.am"
+               (("/bin/sh") (which "sh")))))
+         (add-after 'unpack 'patch-script
+           (lambda*  (#:key inputs #:allow-other-keys)
+             (substitute* "scripts/fakeroot.in"
+               (("getopt")
+                (string-append (assoc-ref inputs "util-linux")
+                               "/bin/getopt"))
+               (("sed")
+                (string-append (assoc-ref inputs "sed")
+                               "/bin/sed"))
+               (("cat|cut" command)
+                (string-append (assoc-ref inputs "coreutils")
+                               "/bin/" command)) )))
          (replace 'bootstrap
            (lambda _
              ;; The "preroll" script takes care of Autoconf and also
              ;; prepares the translated manuals.
              (invoke "sh" "./preroll")))
-        (add-after 'configure 'patch-Makefile
-          (lambda _
-            ;; Note: The root of the problem is already in "Makefile.am".
-            (substitute* "Makefile"
-             (("/bin/sh") (which "sh")))
-            #t))
-        (add-after 'unpack 'patch-script
-          (lambda*  (#:key inputs #:allow-other-keys)
-            (substitute* "scripts/fakeroot.in"
-             (("getopt")
-              (string-append (assoc-ref inputs "util-linux")
-                             "/bin/getopt"))
-             (("sed")
-              (string-append (assoc-ref inputs "sed")
-                             "/bin/sed"))
-             (("cut")
-              (string-append (assoc-ref inputs "coreutils")
-                             "/bin/cut")) )
-            #t))
-        (add-before 'configure 'setenv
-          (lambda _
-            (setenv "LIBS" "-lacl")
-            #t))
-        (add-before 'check 'prepare-check
-          (lambda _
-            (setenv "SHELL" (which "bash"))
-            (setenv "VERBOSE" "1")
-            (substitute* "test/t.touchinstall"
-             ;; We don't have the name of the root user, so use ID=0.
-             (("grep root") "grep \"\\<0\\>\""))
-            (substitute* "test/tartest"
-             ;; We don't have the name of the root group, so use ID=0.
-             (("ROOTGROUP=root") "ROOTGROUP=0")
-             ;; We don't have the name of the daemon user, so use IDs.
-             (("daemon:sys") "1:3")
-             (("daemon:") "1:"))
-            ;; We don't have an /etc/passwd entry for "root" - use numeric IDs.
-            (substitute* "test/compare-tar"
-             (("tar -tvf") "tar --numeric-owner -tvf"))
-            #t)))))
+         (add-before 'configure 'setenv
+           (lambda _
+             (setenv "LIBS" "-lacl")))
+         (add-before 'check 'prepare-check
+           (lambda _
+             (setenv "SHELL" (which "bash"))
+             (setenv "VERBOSE" "1")
+             (substitute* "test/t.touchinstall"
+               ;; We don't have the name of the root user, so use ID=0.
+               (("grep root") "grep \"\\<0\\>\""))
+             (substitute* "test/tartest"
+               ;; We don't have the name of the root group, so use ID=0.
+               (("ROOTGROUP=root") "ROOTGROUP=0")
+               ;; We don't have the name of the daemon user, so use IDs.
+               (("daemon:sys") "1:3")
+               (("daemon:") "1:"))
+             ;; We don't have an /etc/passwd entry for "root" - use numeric IDs.
+             (substitute* "test/compare-tar"
+               (("tar -tvf") "tar --numeric-owner -tvf")))))))
     (native-inputs
      `(;; For bootstrapping the package.
-       ("autoconf" ,autoconf)
+       ("autoconf" ,autoconf-2.71)
        ("automake" ,automake)
        ("libtool" ,libtool)
        ("gettext" ,gettext-minimal)
@@ -7877,51 +8098,58 @@ the superuser to make device nodes.")
        ("sharutils" ,sharutils)
        ("xz" ,xz)))
     (inputs
-     `(("acl" ,acl)
-       ("libcap" ,libcap)
-       ("util-linux" ,util-linux)
-       ("sed" ,sed)
-       ("coreutils" ,coreutils)))
-    (synopsis "Provides a fake root environment")
-    (description "@command{fakeroot} runs a command in an environment where
-it appears to have root privileges for file manipulation. This is useful
-for allowing users to create archives (tar, ar, .deb etc.) with files in
-them with root permissions/ownership. Without fakeroot one would have to
-have root privileges to create the constituent files of the archives with
-the correct permissions and ownership, and then pack them up, or one would
-have to construct the archives directly, without using the archiver.")
+     (list acl libcap util-linux sed coreutils))
+    (synopsis "Run commands in an environment with fake root privileges")
+    (description
+     "@command{fakeroot} runs a command in an environment where it appears to
+have root privileges for file manipulation.  This is useful for allowing users
+to create archives (@file{tar}, @file{ar}, @file{deb}, etc.)  with files in
+them with root permissions and/or ownership.
+
+Without fakeroot, one would have to have root privileges to create the
+constituent files of the archives with the correct permissions and ownership,
+and then pack them up, or one would have to construct the archives directly,
+without using the archiver.")
     (home-page "http://freshmeat.sourceforge.net/projects/fakeroot")
     (license license:gpl3+)))
 
 (define-public fakechroot
-  (package
-    (name "fakechroot")
-    (version "2.20.1")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "https://github.com/dex4er/fakechroot/releases/download/"
-                    version "/fakechroot-" version ".tar.gz"))
-              (sha256
-               (base32
-                "1aijkd0b45wav25v01qhw8zxwa3pl0nnp9fabmmy1nlx7hr09gas"))))
-    (build-system gnu-build-system)
-    (arguments
-     ;; XXX: The tests heavily assume they run on an FHS system so for now
-     ;; skip them.
-     '(#:tests? #f
-       #:configure-flags '("--disable-static")))
-    (synopsis "Emulate @code{chroot} by overriding file system calls")
-    (description
-     "@command{fakechroot} runs a command in an environment were is additional
+  ;; XXX: Build from the change submitted at
+  ;; <https://github.com/dex4er/fakechroot/pull/85> to allow compilation
+  ;; against glibc 2.33.  Switch back to the official repository on the next
+  ;; release.
+  (let ((commit "e7c1f3a446e594a4d0cce5f5d499c9439ce1d5c5")
+        (revision "0"))
+    (package
+      (name "fakechroot")
+      (version (git-version "2.20.1" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/lipnitsk/fakechroot")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0gac6a6djx3nf343vd33sr5qqngz8ss3aij54zl8x9wb47pc11kb"))))
+      (build-system gnu-build-system)
+      (arguments
+       ;; XXX: The tests heavily assume they run on an FHS system so for now
+       ;; skip them.
+       '(#:tests? #f
+         #:configure-flags '("--disable-static")))
+      (native-inputs (list autoconf automake libtool perl))
+      (synopsis "Emulate @code{chroot} by overriding file system calls")
+      (description
+       "@command{fakechroot} runs a command in an environment were is additional
 possibility to use @code{chroot} command without root privileges.  This is
 useful for allowing users to create own chrooted environment with possibility
 to install another packages without need for root privileges.
 
 It works by providing @file{libfakechroot.so}, a shared library meant to be
 set as @code{LD_PRELOAD} to override the C library file system functions.")
-    (home-page "https://github.com/dex4er/fakechroot/")
-    (license license:lgpl2.1+)))
+      (home-page "https://github.com/dex4er/fakechroot/")
+      (license license:lgpl2.1+))))
 
 (define-public inputattach
   (package
@@ -7944,10 +8172,8 @@ set as @code{LD_PRELOAD} to override the C library file system functions.")
          (replace 'build
            (lambda* (#:key inputs #:allow-other-keys)
              (with-directory-excursion "inputattach"
-               (invoke (string-append (assoc-ref inputs "gcc")
-                                      "/bin/gcc")
-                       "-O2" "-o" "inputattach" "inputattach.c"))
-             #t))
+               (invoke "gcc" "-O2" "-o" "inputattach"
+                       "inputattach.c"))))
          (delete 'check)
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
@@ -7977,22 +8203,23 @@ types and interfaces and translates so that the X server can use them.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1q5wrqnhhs6r49p8yvkw1pl0cnsd4rndxy4h5lvdydwgf1civcwc"))))
+                "1q5wrqnhhs6r49p8yvkw1pl0cnsd4rndxy4h5lvdydwgf1civcwc"))
+              (patches (search-patches "pipewire-0.2.7-fno-common.patch"))))
     (build-system meson-build-system)
     (arguments
      '(#:configure-flags '("-Dsystemd=false")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("dbus" ,dbus)
-       ("eudev" ,eudev)
-       ("ffmpeg" ,ffmpeg)
-       ("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base)
-       ("libva" ,libva)
-       ("sbc" ,sbc)
-       ("sdl2" ,sdl2)))
+     (list alsa-lib
+           dbus
+           eudev
+           ffmpeg
+           gstreamer
+           gst-plugins-base
+           libva
+           sbc
+           sdl2))
     (home-page "https://pipewire.org/")
     (synopsis "Server and user space API to deal with multimedia pipelines")
     (description
@@ -8010,7 +8237,7 @@ of Linux application development.")
   (package
     (inherit pipewire)
     (name "pipewire")
-    (version "0.3.29")
+    (version "0.3.43")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -8019,28 +8246,60 @@ of Linux application development.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "16jjxcnahxqfcawz77ywx837ybhwzcivn7hgqb9cmlp1y2syy8gk"))))
+                "0gp2h0sidapcqmnifl0iipdmbzb18bdh8zdi7pfywr9gsksh0cxy"))))
     (arguments
      '(#:configure-flags
        (list (string-append "-Dudevrulesdir=" (assoc-ref %outputs "out")
                             "/lib/udev/rules.d")
-             "-Dsystemd=disabled")
+             "-Dsystemd=disabled"
+             "-Dsession-managers=[]")
        #:phases
        (modify-phases %standard-phases
          ;; Skip shrink-runpath, otherwise validate-runpath fails.
          (delete 'shrink-runpath))))
-    (inputs
-     (append (package-inputs pipewire)
-             `(("bluez" ,bluez)
-               ("jack" ,jack-2)
-               ("pulseaudio" ,pulseaudio)
-               ("vulkan-loader" ,vulkan-loader)
-               ("vulkan-headers" ,vulkan-headers))))))
+    (inputs (modify-inputs (package-inputs pipewire)
+              (prepend avahi
+                       bluez
+                       jack-2
+                       ldacbt
+                       pulseaudio
+                       vulkan-loader
+                       vulkan-headers)))))
+
+(define-public wireplumber
+  (package
+    (name "wireplumber")
+    (version "0.4.6")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url
+              "https://gitlab.freedesktop.org/pipewire/wireplumber.git")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0g7xkgkjlxrhs49hqkwrjk2hb478gq55wwydafvvbsv78vsa7qfb"))))
+    (build-system meson-build-system)
+    (arguments
+     `(#:configure-flags '("-Dsystemd=disabled"
+                           "-Dsystem-lua=true")))
+    (native-inputs
+     (list `(,glib "bin")
+           pkg-config))
+    (inputs (list dbus elogind glib lua pipewire-0.3))
+    (home-page "https://gitlab.freedesktop.org/pipewire/wireplumber")
+    (synopsis "Session / policy manager implementation for PipeWire")
+    (description "WirePlumber is a modular session / policy manager for
+PipeWire and a GObject-based high-level library that wraps PipeWire's API,
+providing convenience for writing the daemon's modules as well as external
+tools for managing PipeWire.")
+    (license license:expat)))
 
 (define-public ell
   (package
     (name "ell")
-    (version "0.41")
+    (version "0.46")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -8049,7 +8308,7 @@ of Linux application development.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "14scs8vqpcf2810gvabsplg9yzh9y4sz47407bjy6vd604z3w8ah"))))
+                "15hwqicmll23cbrj13h3wd4lgrby416ap7l6w0434jsza4s4yv82"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -8062,7 +8321,7 @@ of Linux application development.")
                (("/usr/bin/dbus-daemon") (which "dbus-daemon")))
              #t)))))
     (inputs
-     `(("dbus" ,dbus)))
+     (list dbus))
     (native-inputs
      `(("autoconf" ,autoconf)
        ("libtool" ,libtool)
@@ -8077,46 +8336,26 @@ ELL is designed to be efficient and compact enough for use on embedded Linux
 platforms, it is not limited to resource-constrained systems.")
     (license license:lgpl2.1+)))
 
-(define-public lttng-ust
-  (package
-    (name "lttng-ust")
-    (version "2.12.2")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://lttng.org/files/lttng-ust/"
-                                  "lttng-ust-" version ".tar.bz2"))
-              (sha256
-               (base32
-                "1iwz6p79zvibj8sl8qqw84lcir9a8z1ylq77hhnwg26anrjg1l5w"))))
-    (build-system gnu-build-system)
-    (inputs
-     `(("liburcu" ,liburcu)
-       ("numactl" ,numactl)))
-    (native-inputs
-     `(("python" ,python-3)))
-    (home-page "https://lttng.org/")
-    (synopsis "LTTng userspace tracer libraries")
-    (description "The user space tracing library, liblttng-ust, is the LTTng
-user space tracer.  It receives commands from a session daemon, for example to
-enable and disable specific instrumentation points, and writes event records
-to ring buffers shared with a consumer daemon.")
-    (license license:lgpl2.1+)))
-
 (define-public kexec-tools
   (package
     (name "kexec-tools")
-    (version "2.0.22")
+    (version "2.0.23")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://kernel.org/linux/utils/kernel"
                                   "/kexec/kexec-tools-" version ".tar.xz"))
               (sha256
                (base32
-                "1hj9mj6x3qs9c8x8mrri9xd3wsg3gwzbab3jfa5ry146xm4pzjcn"))))
+                "06r44i91g1s9f7k5b9kmvb58j9vrqvysfh32pb70cnyrgmncsqxa"))))
     (build-system gnu-build-system)
     (arguments
      ;; There are no automated tests.
      '(#:tests? #f))
+    ;; This variant of binutils is used for the 64 bit support needed to
+    ;; assemble the `purgatory/arch/i386/compat_x86_64.S' program on i686-linux.
+    (native-inputs (list (make-ld-wrapper "ld-wrapper"
+                                          #:binutils binutils)
+                         binutils))
     (home-page "https://projects.horms.net/projects/kexec/")
     (synopsis "Tools for booting directly into different kernels")
     (description "This package provides the @code{kexec} program and ancillary
@@ -8174,11 +8413,10 @@ persistent over reboots.")
          "0ilnnm4q22f8fagwp8kb37licy4ks861i2iqh2djsypqhnxvx3fv"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (propagated-inputs
      ;; In Requires.private of libbpf.pc.
-     `(("libelf" ,libelf)
-       ("zlib" ,zlib)))
+     (list libelf zlib))
     (arguments
      `(#:tests? #f                      ; no tests
        #:make-flags
@@ -8218,8 +8456,7 @@ headers.")
          "1367c0bzrpclvjvmk0sxgi49rh7j2f9izqk5a7g3yvawh1fmvvjh"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)))
+     (list bison flex))
     (inputs
      `(("clang-toolchain" ,clang-toolchain)
        ("libbpf" ,(package-source libbpf))
@@ -8227,7 +8464,6 @@ headers.")
        ;; archives, only object files.
        ;; https://github.com/iovisor/bcc/issues/504
        ("elfutils" ,elfutils)
-       ("linux-libre-headers" ,linux-libre-headers)
        ("luajit" ,luajit)
        ("python-wrapper" ,python-wrapper)))
     (arguments
@@ -8266,7 +8502,7 @@ headers.")
                 (lambda (python-executable)
                   (format #t "Wrapping: ~A.~%" python-executable)
                   (wrap-program python-executable
-                    `("PYTHONPATH" ":" prefix
+                    `("GUIX_PYTHONPATH" ":" prefix
                       (,(string-append lib
                                        "/python"
                                        ,(version-major+minor
@@ -8300,14 +8536,9 @@ and above.")
        (patches (search-patches "bpftrace-disable-bfd-disasm.patch"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)))
+     (list bison flex))
     (inputs
-     `(("bcc" ,bcc)
-       ("clang-toolchain" ,clang-toolchain)
-       ("elfutils" ,elfutils)
-       ("libbpf" ,libbpf)
-       ("linux-libre-headers" ,linux-libre-headers)))
+     (list bcc clang-toolchain elfutils libbpf))
     (arguments
      `(#:tests? #f ;Tests require googletest sources.
        #:configure-flags
@@ -8358,21 +8589,22 @@ receiving.  It is dedicated to the PL011 UART of the Raspberry Pi.")
 (define-public ipset
   (package
     (name "ipset")
-    (version "7.11")
+    (version "7.15")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://ipset.netfilter.org/"
                            "ipset-" version ".tar.bz2"))
        (sha256
-        (base32 "0zdzp9fhpp6hmirzxy7w27fb9xx9lxd2ykxbn8by7ngi62nvll9i"))))
+        (base32 "0l8pcaym6057hq3a4zwnk53p5y6xg1m3d3c83wn18h5nmnm4am8a"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libmnl" ,libmnl)))
+     (list libmnl))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
-     `(#:configure-flags '("--with-kmod=no")))
+     `(#:configure-flags '("--disable-static"
+                           "--with-kmod=no")))
     (home-page "https://ipset.netfilter.org/")
     (synopsis "Administration tool for IP sets")
     (description "IP sets are a framework inside the Linux 2.4.x and 2.6.x kernel which
@@ -8431,7 +8663,7 @@ kernel side implementation.")
 (define-public erofs-utils
   (package
     (name "erofs-utils")
-    (version "1.3")
+    (version "1.4")
     (source
      (origin
        (method git-fetch)
@@ -8440,16 +8672,13 @@ kernel side implementation.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0sqiw05zbxr6l0g9gn3whkc4qc5km2qvfg4lnm08nppwskm8yaw8"))))
+        (base32 "1ygaw69pfz2hfzw9cqzg9rfnjzrdbfkwsiinz6qs2h56dssjz0y9"))))
     (build-system gnu-build-system)
     (inputs
-     `(("lz4" ,lz4)
-       ("libuuid" ,util-linux "lib")))
+     (list lz4
+           `(,util-linux "lib")))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (home-page "https://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs-utils.git/")
     (synopsis "User-space tools for the EROFS file system")
     (description
@@ -8471,10 +8700,8 @@ provides user-space tools for creating EROFS file systems.")
        (file-name (git-file-name name version))
        (sha256
         (base32 "12ih96jwmr7imp9zyckf9zjqqm5ra1kv5fj6kbw71y6yl31069dz"))))
-    (native-inputs `(("autoconf" ,autoconf)
-                     ("automake" ,automake)
-                     ("libtool" ,libtool)))
-    (inputs `(("sqlite" ,sqlite)))
+    (native-inputs (list autoconf automake libtool))
+    (inputs (list sqlite))
     (arguments
      `(#:configure-flags
        (list "--enable-all"
@@ -8525,12 +8752,12 @@ through standard log mechanisms like syslog.")
           "--enable-bindings-cxx"
           "--enable-bindings-python")))
     (native-inputs
-      `(("automake" ,automake)
-        ("autoconf" ,autoconf)
-        ("libtool" ,libtool)
-        ("autoconf-archive" ,autoconf-archive)
-        ("pkg-config" ,pkg-config)
-        ("python" ,python-3)))
+      (list automake
+            autoconf
+            libtool
+            autoconf-archive
+            pkg-config
+            python-3))
     (synopsis "Interact with the Linux GPIO character device")
     (description
      "This package provides a C library with C++/Python bindings and
diff --git a/gnu/packages/lirc.scm b/gnu/packages/lirc.scm
index f840f49a23..1b8e8e37bd 100644
--- a/gnu/packages/lirc.scm
+++ b/gnu/packages/lirc.scm
@@ -69,7 +69,7 @@
            (lambda* (#:key inputs #:allow-other-keys)
              ;; 'lirc-make-devinput' script assumes that linux headers
              ;; are placed in "/usr/...".
-             (let ((headers (assoc-ref inputs "linux-headers")))
+             (let ((headers (assoc-ref inputs "kernel-headers")))
                (substitute* "tools/lirc-make-devinput"
                  (("/usr/include") (string-append headers "/include"))))
              #t))
@@ -85,12 +85,10 @@
                (("^varimage_DATA =.*") "varimage_DATA =\n"))
              #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("libxslt" ,libxslt)))
+     (list pkg-config libxslt))
     (inputs
      `(("libx11" ,libx11)
        ("libusb-compat" ,libusb-compat)
-       ("linux-headers" ,linux-libre-headers)
        ("alsa-lib" ,alsa-lib)
        ("python" ,python)))
     (home-page "https://www.lirc.org/")
@@ -123,9 +121,9 @@ on just one button press.")
            "13s9zqyfh871ls1aha47rhmk13b4mcyfckcn2sw70bvc26832gk6"))))
       (build-system python-build-system)
       (inputs
-       `(("lirc" ,lirc)))
+       (list lirc))
       (native-inputs
-       `(("python-cython" ,python-cython)))
+       (list python-cython))
       (arguments
        `(#:tests? #f         ; the only tests that exist are interactive
          #:phases
diff --git a/gnu/packages/lisp-check.scm b/gnu/packages/lisp-check.scm
index 95918433c4..1cdd7d8300 100644
--- a/gnu/packages/lisp-check.scm
+++ b/gnu/packages/lisp-check.scm
@@ -1,5 +1,13 @@
 ;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2016, 2017 Andy Patterson <ajpatter@uwaterloo.ca>
+;;; Copyright © 2018, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2018, 2019, 2020, 2021 Pierre Neidhardt <mail@ambrevar.xyz>
+;;; Copyright © 2018 Pierre Langlois <pierre.langlois@gmx.com>
+;;; Copyright © 2019 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2019, 2020 Katherine Cox-Buday <cox.katherine.e@gmail.com>
+;;; Copyright © 2019, 2020, 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;; Copyright © 2021 Sharlatan Hellseher <sharlatanus@gmail.com>
+;;; Copyright © 2021 Charles Jackson <charles.b.jackson@protonmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -16,6 +24,9 @@
 ;;; You should have received a copy of the GNU General Public License
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
+;;; This module only contains Common Lisp libraries related to code testing
+;;; facilities.
+
 (define-module (gnu packages lisp-check)
   #:use-module (gnu packages)
   #:use-module ((guix licenses) #:prefix license:)
@@ -24,10 +35,507 @@
   #:use-module (guix git-download)
   #:use-module (guix build-system asdf))
 
-;;; Commentary:
-;;;
-;;; This module only contains Common Lisp libraries related to code testing
-;;; facilities.
+(define-public sbcl-1am
+  (let ((commit "8b1da94eca4613fd8a20bdf63f0e609e379b0ba5"))
+    (package
+      (name "sbcl-1am")
+      (version (git-version "0.0" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/lmj/1am")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "05ss4nz1jb9kb796295482b62w5cj29msfj8zis33sp2rw2vmv2g"))))
+      (build-system asdf-build-system/sbcl)
+      (home-page "https://github.com/lmj/1am")
+      (synopsis "Minimal testing framework for Common Lisp")
+      (description "A minimal testing framework for Common Lisp.")
+      (license license:expat))))
+
+(define-public cl-1am
+  (sbcl-package->cl-source-package sbcl-1am))
+
+(define-public ecl-1am
+  (sbcl-package->ecl-package sbcl-1am))
+
+(define-public sbcl-check-it
+  (let ((commit "b79c9103665be3976915b56b570038f03486e62f"))
+    (package
+      (name "sbcl-check-it")
+      (version (git-version "0.1.0" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/DalekBaldwin/check-it/")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "1kbjwpniffdpv003igmlz5r0vy65m7wpfnhg54fhwirp1227hgg7"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-alexandria sbcl-closer-mop sbcl-optima))
+      (native-inputs
+       (list sbcl-stefil))
+      (home-page "https://github.com/arclanguage/Clamp")
+      (synopsis "Randomized specification-based testing for Common Lisp")
+      (description
+       "This is a randomized property-based testing library for Common Lisp.
+Rather than being a full-fledged general test framework in its own right, it's
+designed to embed randomized tests in whatever framework you like.")
+      (license license:llgpl))))
+
+(define-public cl-check-it
+  (sbcl-package->cl-source-package sbcl-check-it))
+
+(define-public ecl-check-it
+  (sbcl-package->ecl-package sbcl-check-it))
+
+(define-public sbcl-checkl
+  (let ((commit "80328800d047fef9b6e32dfe6bdc98396aee3cc9")
+        (revision "1"))
+    (package
+      (name "sbcl-checkl")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/rpav/CheckL")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0bpisihx1gay44xmyr1dmhlwh00j0zzi04rp9fy35i95l2r4xdlx"))))
+      (build-system asdf-build-system/sbcl)
+      (arguments
+       ;; Error while trying to load definition for system checkl-test from
+       ;; pathname [...]/checkl-test.asd: The function CHECKL:DEFINE-TEST-OP
+       ;; is undefined.
+       '(#:asd-files '("checkl.asd")
+         #:tests? #f))
+      (native-inputs
+       (list sbcl-fiveam))
+      (inputs
+       (list sbcl-marshal))
+      (home-page "https://github.com/rpav/CheckL/")
+      (synopsis "Dynamic testing for Common Lisp")
+      (description
+       "CheckL lets you write tests dynamically, it checks resulting values
+against the last run.")
+      ;; The author specifies both LLGPL and "BSD", but the "BSD" license
+      ;; isn't specified anywhere, so I don't know which kind.  LLGPL is the
+      ;; stronger of the two and so I think only listing this should suffice.
+      (license license:llgpl))))
+
+(define-public cl-checkl
+  (sbcl-package->cl-source-package sbcl-checkl))
+
+(define-public ecl-checkl
+  (sbcl-package->ecl-package sbcl-checkl))
+
+(define-public sbcl-cl-mock
+  ;; .asd version only got updated recently, despired the old GitHug "1.0.1" release.
+  (let ((commit "7988dca2093358911b67597a2cd1570c785dfe76"))
+    (package
+      (name "sbcl-cl-mock")
+      (version (git-version "1.0.1" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Ferada/cl-mock/")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0f40wikcf783jx26ip0nnhwjjfjvjiw7njqsqrb6kaphc8bgw0i1"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-alexandria sbcl-closer-mop sbcl-trivia))
+      (native-inputs
+       (list sbcl-fiveam))
+      (home-page "https://github.com/Ferada/cl-mock")
+      (synopsis "Mocking functions for Common Lisp testing")
+      (description
+       "This small library provides a way to replace the actual implementation
+of either regular or generic functions with mocks.")
+      (license license:agpl3))))
+
+(define-public ecl-cl-mock
+  (sbcl-package->ecl-package sbcl-cl-mock))
+
+(define-public cl-mock
+  (sbcl-package->cl-source-package sbcl-cl-mock))
+
+(define-public sbcl-cl-quickcheck
+  (let ((commit "807b2792a30c883a2fbecea8e7db355b50ba662f")
+        (revision "1"))
+    (package
+      (name "sbcl-cl-quickcheck")
+      (version (git-version "0.0.4" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/mcandre/cl-quickcheck")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "165lhypq5xkcys6hvzb3jq7ywnmqvzaflda29qk2cbs3ggas4767"))))
+      (build-system asdf-build-system/sbcl)
+      (synopsis
+       "Common Lisp port of the QuickCheck unit test framework")
+      (description
+       "Common Lisp port of the QuickCheck unit test framework")
+      (home-page "https://github.com/mcandre/cl-quickcheck")
+      ;; MIT
+      (license license:expat))))
+
+(define-public cl-quickcheck
+  (sbcl-package->cl-source-package sbcl-cl-quickcheck))
+
+(define-public ecl-cl-quickcheck
+  (sbcl-package->ecl-package sbcl-cl-quickcheck))
+
+(define-public sbcl-clunit
+  (let ((commit "6f6d72873f0e1207f037470105969384f8380628")
+        (revision "1"))
+    (package
+      (name "sbcl-clunit")
+      (version (git-version "0.2.3" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/tgutu/clunit")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "1idf2xnqzlhi8rbrqmzpmb3i1l6pbdzhhajkmhwbp6qjkmxa4h85"))))
+      (build-system asdf-build-system/sbcl)
+      (synopsis "CLUnit is a Common Lisp unit testing framework")
+      (description
+       "CLUnit is a Common Lisp unit testing framework.  It is designed
+to be easy to use so that you can quickly start testing.  CLUnit
+provides a rich set of features aimed at improving your unit testing
+experience.")
+      (home-page "https://tgutu.github.io/clunit/")
+      ;; MIT License
+      (license license:expat))))
+
+(define-public cl-clunit
+  (sbcl-package->cl-source-package sbcl-clunit))
+
+(define-public ecl-clunit
+  (sbcl-package->ecl-package sbcl-clunit))
+
+(define-public sbcl-clunit2
+  (let ((commit "5e28343734eb9b7aee39306a614af92c1062d50b")
+        (revision "1"))
+    (package
+      (name "sbcl-clunit2")
+      (version (git-version "0.2.4" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://notabug.org/cage/clunit2.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "1ngiapfki6nm8a555mzhb5p7ch79i3w665za5bmb5j7q34fy80vw"))))
+      (build-system asdf-build-system/sbcl)
+      (synopsis "Unit testing framework for Common Lisp")
+      (description
+       "CLUnit is a Common Lisp unit testing framework.  It is designed to be
+easy to use so that you can quickly start testing.")
+      (home-page "https://notabug.org/cage/clunit2")
+      (license license:expat))))
+
+(define-public cl-clunit2
+  (sbcl-package->cl-source-package sbcl-clunit2))
+
+(define-public ecl-clunit2
+  (sbcl-package->ecl-package sbcl-clunit2))
+
+(define-public sbcl-eos
+  (let ((commit "b4413bccc4d142cbe1bf49516c3a0a22c9d99243")
+        (revision "2"))
+    (package
+      (name "sbcl-eos")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/adlai/Eos")
+               (commit commit)))
+         (sha256
+          (base32 "1afllvmlnx97yzz404gycl3pa3kwx427k3hrbf37rpmjlv47knhk"))
+         (file-name (git-file-name "eos" version))))
+      (build-system asdf-build-system/sbcl)
+      (synopsis "Unit Testing for Common Lisp")
+      (description
+       "Eos was a unit testing library for Common Lisp.
+It began as a fork of FiveAM; however, FiveAM development has continued, while
+that of Eos has not.  Thus, Eos is now deprecated in favor of FiveAM.")
+      (home-page "https://github.com/adlai/Eos")
+      (license license:expat))))
+
+(define-public cl-eos
+  (sbcl-package->cl-source-package sbcl-eos))
+
+(define-public ecl-eos
+  (sbcl-package->ecl-package sbcl-eos))
+
+(define-public sbcl-fiasco
+  (let ((commit "bb47d2fef4eb24cc16badc1c9a73d73c3a7e18f5")
+        (revision "2"))
+    (package
+      (name "sbcl-fiasco")
+      (version (git-version "0.0.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/joaotavora/fiasco")
+               (commit commit)))
+         (file-name (git-file-name "fiasco" version))
+         (sha256
+          (base32
+           "1k8i2kq57201bvy3zfpsxld530hd104dgbglxigqb6i408c1a7aw"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-alexandria sbcl-trivial-gray-streams))
+      (synopsis "Simple and powerful test framework for Common Lisp")
+      (description "A Common Lisp test framework that treasures your failures,
+logical continuation of Stefil.  It focuses on interactive debugging.")
+      (home-page "https://github.com/joaotavora/fiasco")
+      ;; LICENCE specifies this is public-domain unless the legislation
+      ;; doesn't allow or recognize it.  In that case it falls back to a
+      ;; permissive licence.
+      (license (list license:public-domain
+                     (license:x11-style "file://LICENCE"))))))
+
+(define-public cl-fiasco
+  (sbcl-package->cl-source-package sbcl-fiasco))
+
+(define-public ecl-fiasco
+  (sbcl-package->ecl-package sbcl-fiasco))
+
+(define-public sbcl-fiveam
+  (package
+    (name "sbcl-fiveam")
+    (version "1.4.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/sionescu/fiveam")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name "fiveam" version))
+       (sha256
+        (base32 "04mh5plmlb15jbq3dkd8b9jl1dmbbg4hnd3k7859vpf6s12k5p4j"))))
+    (inputs
+     (list sbcl-alexandria sbcl-net.didierverna.asdf-flv
+           sbcl-trivial-backtrace))
+    (build-system asdf-build-system/sbcl)
+    (synopsis "Common Lisp testing framework")
+    (description "FiveAM is a simple (as far as writing and running tests
+goes) regression testing framework.  It has been designed with Common Lisp's
+interactive development model in mind.")
+    (home-page "https://common-lisp.net/project/fiveam/")
+    (license license:bsd-3)))
+
+(define-public cl-fiveam
+  (sbcl-package->cl-source-package sbcl-fiveam))
+
+(define-public ecl-fiveam
+  (sbcl-package->ecl-package sbcl-fiveam))
+
+(define-public sbcl-hu.dwim.stefil
+  (let ((commit "414902c6f575818c39a8a156b8b61b1adfa73dad"))
+    (package
+      (name "sbcl-hu.dwim.stefil")
+      (version (git-version "0.0.0" "2" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri
+          (git-reference
+           (url "https://github.com/hu-dwim/hu.dwim.stefil")
+           (commit commit)))
+         (sha256
+          (base32 "14izmjjim590rh74swrssavdmdznj2z8vhqixy780sjhpcr5pmkc"))
+         (file-name (git-file-name "hu.dwim.stefil" version))))
+      (build-system asdf-build-system/sbcl)
+      (native-inputs
+       (list sbcl-hu.dwim.asdf))
+      (inputs
+       (list sbcl-alexandria))
+      (home-page "http://dwim.hu/project/hu.dwim.stefil")
+      (synopsis "Simple test framework")
+      (description "Stefil is a simple test framework for Common Lisp,
+with a focus on interactive development.")
+      (license license:public-domain))))
+
+(define-public cl-hu.dwim.stefil
+  (sbcl-package->cl-source-package sbcl-hu.dwim.stefil))
+
+(define-public ecl-hu.dwim.stefil
+  (sbcl-package->ecl-package sbcl-hu.dwim.stefil))
+
+(define-public sbcl-kaputt
+  (let ((commit "f26c9b0f8219fe61d86249198ef85174eecafc10")
+        (revision "1"))
+    (package
+      (name "sbcl-kaputt")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/foretspaisibles/cl-kaputt")
+               (commit commit)))
+         (file-name (git-file-name "kaputt" version))
+         (sha256
+          (base32 "10a78032vnf12kjjpfmq9ign38cad237ycyq37dwnx922nxjjaj4"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-cl-ppcre))
+      (home-page "https://github.com/foretspaisibles/cl-kaputt")
+      (synopsis "Simple interactive test framework for Common Lisp")
+      (description
+       "KAPUTT is a test framework for Common Lisp that focuses on the
+following features:
+
+@itemize
+@item KAPUTT is simple, it only defines three abstractions testcase, assertion
+and protocol and does not add any artefact on the backtrace when errors occur.
+
+@item KAPUTT is extensible, it is possible to add problem-specific assertions
+to make test code more informative.
+
+@item KAPUTT fits well interactive development.
+@end itemize\n")
+      (license license:cecill-b))))
+
+(define-public ecl-kaputt
+  (sbcl-package->ecl-package sbcl-kaputt))
+
+(define-public cl-kaputt
+  (sbcl-package->cl-source-package sbcl-kaputt))
+
+(define-public sbcl-lift
+  (let ((commit "2594160d6ca3a77d8750110dfa63214256aab852")
+        (revision "2"))
+    (package
+      (name "sbcl-lift")
+      (version (git-version "1.7.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/gwkkwg/lift")
+               (commit commit)))
+         (sha256
+          (base32 "01xvz9sl5l5lai4h9dabmcjnm659wf5zllaxqbs55lffskp6jwq3"))
+         (file-name (git-file-name "lift" version))
+         (modules '((guix build utils)))
+         (snippet
+          ;; Don't keep the bundled website
+          `(begin
+             (delete-file-recursively "website")
+             #t))))
+      (build-system asdf-build-system/sbcl)
+      (arguments
+       ;; The tests require a debugger, but we run with the debugger disabled.
+       '(#:tests? #f))
+      (synopsis "LIsp Framework for Testing")
+      (description
+       "The LIsp Framework for Testing (LIFT) is a unit and system test tool for LISP.
+Though inspired by SUnit and JUnit, it's built with Lisp in mind.  In LIFT,
+testcases are organized into hierarchical testsuites each of which can have
+its own fixture.  When run, a testcase can succeed, fail, or error.  LIFT
+supports randomized testing, benchmarking, profiling, and reporting.")
+      (home-page "https://github.com/gwkkwg/lift")
+      (license license:expat))))
+
+(define-public cl-lift
+  (sbcl-package->cl-source-package sbcl-lift))
+
+(define-public ecl-lift
+  (sbcl-package->ecl-package sbcl-lift))
+
+(define-public sbcl-lisp-unit
+  (let ((commit "89653a232626b67400bf9a941f9b367da38d3815"))
+    (package
+      (name "sbcl-lisp-unit")
+      (version (git-version "0.0.0" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/OdonataResearchLLC/lisp-unit")
+               (commit commit)))
+         (sha256
+          (base32
+           "0p6gdmgr7p383nvd66c9y9fp2bjk4jx1lpa5p09g43hr9y9pp9ry"))
+         (file-name (git-file-name "lisp-unit" version))))
+      (build-system asdf-build-system/sbcl)
+      (synopsis "Common Lisp Test framework inspired by JUnit to be simple of use")
+      (description
+       "@command{lisp-unit} is a Common Lisp library that supports unit
+testing.  It is an extension of the library written by Chris Riesbeck.")
+      (home-page "https://github.com/OdonataResearchLLC/lisp-unit")
+      (license license:expat))))
+
+(define-public cl-lisp-unit
+  (sbcl-package->cl-source-package sbcl-lisp-unit))
+
+(define-public ecl-lisp-unit
+  (sbcl-package->ecl-package sbcl-lisp-unit))
+
+(define-public sbcl-lisp-unit2
+  ;; There is a cyclical dependency between symbol-munger and lisp-unit2.
+  ;; See https://github.com/AccelerationNet/symbol-munger/issues/4
+  (let ((commit "fb9721524d1e4e73abb223ee036d74ce14a5505c")
+        (revision "1"))
+    (package
+      (name "sbcl-lisp-unit2")
+      (version (git-version "0.2.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/AccelerationNet/lisp-unit2")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "1rsqy8y0jqll6xn9a593848f5wvd5ribv4csry1ly0hmdhfnqzlp"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-alexandria sbcl-cl-interpol sbcl-iterate
+             sbcl-symbol-munger))
+      (synopsis "Test Framework for Common Lisp")
+      (description
+       "LISP-UNIT2 is a Common Lisp library that supports unit testing in the
+style of JUnit for Java.  It is a new version of the lisp-unit library written
+by Chris Riesbeck.")
+      (home-page "https://github.com/AccelerationNet/lisp-unit2")
+      (license license:expat))))
+
+(define-public cl-lisp-unit2
+  (sbcl-package->cl-source-package sbcl-lisp-unit2))
+
+(define-public ecl-lisp-unit2
+  (sbcl-package->ecl-package sbcl-lisp-unit2))
 
 (define-public sbcl-nst
   (let ((commit "6c0990f594abcf5887e8d80f1035e3b60454b61b")
@@ -46,8 +554,7 @@
         (base32 "1hf3r6pqbnd9vsd1i24qmz928kia72hdgmiafiwb6jw1hmj3r6ga"))))
      (build-system asdf-build-system/sbcl)
      (inputs
-      `(("closer-mop" ,sbcl-closer-mop)
-        ("org-sampler" ,sbcl-org-sampler)))
+      (list sbcl-closer-mop sbcl-org-sampler))
      (home-page "https://github.com/jphmrst/cl-nst")
      (synopsis "Unit testing for Common Lisp")
      (description
@@ -60,4 +567,305 @@
 (define-public cl-nst
   (sbcl-package->cl-source-package sbcl-nst))
 
-;;; lisp-check.scm ends here
+(define-public sbcl-parachute
+  (let ((commit "ca04dd8e43010a6dfffa26dbe1d62af86008d666")
+        (revision "0"))
+    (package
+      (name "sbcl-parachute")
+      (version (git-version "1.1.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri
+          (git-reference
+           (url "https://github.com/Shinmera/parachute")
+           (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "1mvsm3r0r6a2bg75nw0q7n9vlby3ch45qjl7hnb5k1z2n5x5lh60"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-documentation-utils sbcl-form-fiddle))
+      (synopsis "Extensible and cross-compatible testing framework for Common Lisp")
+      (description
+       "Parachute is a simple-to-use and extensible testing framework.
+In Parachute, things are organised as a bunch of named tests within a package.
+Each test can contain a bunch of test forms that make up its body.")
+      (home-page "https://shinmera.github.io/parachute/")
+      (license license:zlib))))
+
+(define-public cl-parachute
+  (sbcl-package->cl-source-package sbcl-parachute))
+
+(define-public ecl-parachute
+  (sbcl-package->ecl-package sbcl-parachute))
+
+(define-public sbcl-prove
+  (let ((commit "5d71f02795b89e36f34e8c7d50e69b67ec6ca2de")
+        (revision "2"))
+    (package
+      (name "sbcl-prove")
+      (version (git-version "1.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/fukamachi/prove")
+               (commit commit)))
+         (sha256
+          (base32 "0ca6ha3zhmckq3ad9lxm6sbg4i0hg3m81xhan4dkxd3x9898jzpc"))
+         (file-name (git-file-name "prove" version))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-alexandria sbcl-cl-colors sbcl-cl-ppcre
+             sbcl-cl-ansi-text))
+      (synopsis "Yet another unit testing framework for Common Lisp")
+      (description
+       "This project was originally called @command{cl-test-more}.
+@command{prove} is yet another unit testing framework for Common Lisp.  The
+advantages of @command{prove} are:
+
+@itemize
+@item Various simple functions for testing and informative error messages
+@item ASDF integration
+@item Extensible test reporters
+@item Colorizes the report if it's available (note for SLIME)
+@item Reports test durations
+@end itemize\n")
+      (home-page "https://github.com/fukamachi/prove")
+      (license license:expat))))
+
+(define-public cl-prove
+  (sbcl-package->cl-source-package sbcl-prove))
+
+(define-public ecl-prove
+  (sbcl-package->ecl-package sbcl-prove))
+
+(define-public sbcl-ptester
+  (let ((commit "fe69fde54f4bce00ce577feb918796c293fc7253")
+        (revision "1"))
+    (package
+      (name "sbcl-ptester")
+      (version (git-version "2.1.3" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "http://git.kpe.io/ptester.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "1l0lfl7cdnr2qf4zh38hi4llxg22c49zkm639bdkmvlkzwj3ndwf"))))
+      (build-system asdf-build-system/sbcl)
+      (home-page "http://quickdocs.org/ptester/")
+      (synopsis "Portable test harness package")
+      (description
+       "@command{ptester} is a portable testing framework based on Franz's
+tester module.")
+      (license license:llgpl))))
+
+(define-public cl-ptester
+  (sbcl-package->cl-source-package sbcl-ptester))
+
+(define-public ecl-ptester
+  (sbcl-package->ecl-package sbcl-ptester))
+
+(define-public sbcl-rove
+  (package
+    (name "sbcl-rove")
+    (version "0.9.6")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/fukamachi/rove")
+             (commit "f3695db08203bf26f3b861dc22ac0f4257d3ec21")))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "07ala4l2fncxf540fzxj3h5mhi9i4wqllhj0rqk8m2ljl5zbz89q"))))
+    (build-system asdf-build-system/sbcl)
+    (inputs
+     (list sbcl-bordeaux-threads sbcl-dissect sbcl-trivial-gray-streams))
+    (home-page "https://github.com/fukamachi/rove")
+    (synopsis
+     "Yet another common lisp testing library")
+    (description
+     "Rove is a unit testing framework for Common Lisp applications.
+This is intended to be a successor of Prove.")
+    (license license:bsd-3)))
+
+(define-public cl-rove
+  (sbcl-package->cl-source-package sbcl-rove))
+
+(define-public ecl-rove
+  (sbcl-package->ecl-package sbcl-rove))
+
+(define-public sbcl-rt
+  (let ((commit "a6a7503a0b47953bc7579c90f02a6dba1f6e4c5a")
+        (revision "1"))
+    (package
+      (name "sbcl-rt")
+      (version (git-version "1990.12.19" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "http://git.kpe.io/rt.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "13si2rrxaagbr0bkvg6sqicxxpyshabx6ad6byc9n2ik5ysna69b"))))
+      (build-system asdf-build-system/sbcl)
+      (synopsis "MIT Regression Tester")
+      (description
+       "RT provides a framework for writing regression test suites.")
+      (home-page "https://www.cliki.net/rt")
+      (license license:expat))))
+
+(define-public cl-rt
+  (sbcl-package->cl-source-package sbcl-rt))
+
+(define-public ecl-rt
+  (sbcl-package->ecl-package sbcl-rt))
+
+(define-public sbcl-should-test
+  (let ((commit "48facb9f9c07aeceb71fc0c48ce17fd7d54a09d4")
+        (revision "0"))
+    (package
+      (name "sbcl-should-test")
+      (version (git-version "1.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/vseloved/should-test")
+               (commit commit)))
+         (file-name (git-file-name "should-test" version))
+         (sha256
+          (base32 "1fqqa7lhf28qg60ji9libkylkcy747x576qpjn1y7c945j2fxmnm"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-cl-ppcre sbcl-local-time sbcl-osicat sbcl-rutils))
+      (home-page "https://github.com/vseloved/should-test")
+      (synopsis "Minimal yet feature-rich Common Lisp test framework")
+      (description
+       "SHOULD-TEST is a methodology-agnostic and non-opinionated Common Lisp
+test framework, i.e. it doesn't care what kind of test approach you'd like to
+take.")
+      (license license:expat))))
+
+(define-public cl-should-test
+  (sbcl-package->cl-source-package sbcl-should-test))
+
+(define-public ecl-should-test
+  (sbcl-package->ecl-package sbcl-should-test))
+
+(define-public sbcl-stefil
+  (let ((commit "0398548ec95dceb50fc2c2c03e5fb0ce49b86c7a")
+        (revision "0"))
+    (package
+      (name "sbcl-stefil")
+      (version (git-version "0.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://gitlab.common-lisp.net/stefil/stefil.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "0bqz64q2szzhf91zyqyssmvrz7da6442rs01808pf3wrdq28bclh"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       `(("alexandria" ,sbcl-alexandria)
+         ("iterate" ,sbcl-iterate)
+         ("metabang-bind" ,sbcl-metabang-bind)
+         ("swank" ,sbcl-slime-swank)))
+      (arguments
+       '(#:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'drop-unnecessary-dependency
+             (lambda _
+               (substitute* "package.lisp"
+                 ((":stefil-system") ""))
+               #t)))))
+      (home-page "https://common-lisp.net/project/stefil/index-old.shtml")
+      (synopsis "Simple test framework")
+      (description
+       "Stefil is a simple test framework for Common Lisp, with a focus on
+interactive development.")
+      (license license:public-domain))))
+
+(define-public cl-stefil
+  (sbcl-package->cl-source-package sbcl-stefil))
+
+(define-public ecl-stefil
+  (sbcl-package->ecl-package sbcl-stefil))
+
+(define-public sbcl-unit-test
+  (let ((commit "266afaf4ac091fe0e8803bac2ae72d238144e735")
+        (revision "1"))
+    (package
+      (name "sbcl-unit-test")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/hanshuebner/unit-test")
+               (commit commit)))
+         (file-name (git-file-name "unit-test" version))
+         (sha256
+          (base32 "11hpksz56iqkv7jw25p2a8r3n9dj922fyarn16d98589g6hdskj9"))))
+      (build-system asdf-build-system/sbcl)
+      (home-page "https://github.com/hanshuebner/unit-test")
+      (synopsis "Unit-testing framework for Common Lisp")
+      (description "This is a unit-testing framework for Common Lisp.")
+      (license license:unlicense))))
+
+(define-public ecl-unit-test
+  (sbcl-package->ecl-package sbcl-unit-test))
+
+(define-public cl-unit-test
+  (sbcl-package->cl-source-package sbcl-unit-test))
+
+(define-public sbcl-xlunit
+  (let ((commit "3805d34b1d8dc77f7e0ee527a2490194292dd0fc")
+        (revision "1"))
+    (package
+      (name "sbcl-xlunit")
+      (version (git-version "0.6.3" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "http://git.kpe.io/xlunit.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "0argfmp9nghs4sihyj3f8ch9qfib2b7ll07v5m9ziajgzsfl5xw3"))))
+      (build-system asdf-build-system/sbcl)
+      (arguments
+       '(#:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'fix-tests
+             (lambda _
+               (substitute* "xlunit.asd"
+                 ((" :force t") ""))
+               #t)))))
+      (synopsis "Unit testing package for Common Lisp")
+      (description
+       "The XLUnit package is a toolkit for building test suites.  It is based
+on the XPTest package by Craig Brozensky and the JUnit package by Kent Beck.")
+      (home-page "http://quickdocs.org/xlunit/")
+      (license license:bsd-3))))
+
+(define-public cl-xlunit
+  (sbcl-package->cl-source-package sbcl-xlunit))
+
+(define-public ecl-xlunit
+  (sbcl-package->ecl-package sbcl-xlunit))
diff --git a/gnu/packages/lisp-xyz.scm b/gnu/packages/lisp-xyz.scm
index 5faa69a037..25fa21f70f 100644
--- a/gnu/packages/lisp-xyz.scm
+++ b/gnu/packages/lisp-xyz.scm
@@ -27,6 +27,10 @@
 ;;; Copyright © 2021 Cage <cage-dev@twistfold.it>
 ;;; Copyright © 2021 Cameron Chaparro <cameron@cameronchaparro.com>
 ;;; Copyright © 2021 Charles Jackson <charles.b.jackson@protonmail.com>
+;;; Copyright © 2021, 2022 Foo Chuan Wei <chuanwei.foo@hotmail.com>
+;;; Copyright © 2021 jgart <jgart@dismail.de>
+;;; Copyright © 2021 Aleksandr Vityazev <avityazev@posteo.org>
+;;; Copyright © 2021 Jacob MacDonald <jaccarmac@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -67,6 +71,7 @@
   #:use-module (gnu packages file)
   #:use-module (gnu packages fonts)
   #:use-module (gnu packages fontutils)
+  #:use-module (gnu packages game-development)
   #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
@@ -77,15 +82,20 @@
   #:use-module (gnu packages libffi)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages lisp)
+  #:use-module (gnu packages lisp-check)
   #:use-module (gnu packages maths)
   #:use-module (gnu packages mp3)
+  #:use-module (gnu packages mpi)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages networking)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-xyz)
+  #:use-module (gnu packages readline)
   #:use-module (gnu packages sdl)
+  #:use-module (gnu packages serialization)
   #:use-module (gnu packages sqlite)
+  #:use-module (gnu packages statistics)
   #:use-module (gnu packages tcl)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages video)
@@ -114,7 +124,7 @@
      (file-name (git-file-name name version))))
    (build-system asdf-build-system/sbcl)
    (native-inputs
-    `(("rt" ,sbcl-rt)))
+    (list sbcl-rt))
    (synopsis "Collection of portable utilities for Common Lisp")
    (description
     "Alexandria is a collection of portable utilities.  It does not contain
@@ -146,15 +156,15 @@ portable between implementations.")
         (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)))
+      (list sbcl-alexandria
+            sbcl-cffi
+            sbcl-claw
+            sbcl-dissect
+            sbcl-local-time
+            sbcl-log4cl
+            sbcl-split-sequence
+            sbcl-static-vectors
+            sbcl-trivial-gray-streams))
      (home-page "https://github.com/borodust/bodge-utilities")
      (synopsis "Common Lisp utilities library for CL-BODGE")
      (description
@@ -185,7 +195,7 @@ collection.")
           (base32 "148hjikqk8v2m30mj15xh89zni6szf9z3prav580qk9dqr8djjdr"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list 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
@@ -204,19 +214,19 @@ implementation with no external dependencies.")
     (package
       (name "sbcl-golden-utils")
       (version (git-version "0.0.0" revision commit))
+      (home-page "https://github.com/mfiano/mfiano-utils")
       (source
        (origin
          (method git-fetch)
          (uri (git-reference
-               (url "https://git.mfiano.net/mfiano/golden-utils")
+               (url home-page)
                (commit commit)))
          (file-name (git-file-name "golden-utils" version))
          (sha256
           (base32 "1ljc8yj32lmd1d60446rzl9m0r1ar15gdzacsf6blw1kny8xlrsr"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)))
-      (home-page "https://git.mfiano.net/mfiano/golden-utils")
+       (list sbcl-alexandria))
       (synopsis "Common Lisp utility library")
       (description
        "This is a Common Lisp library providing various utilities.")
@@ -330,37 +340,6 @@ or cl-launch for portable processing of command-line arguments.")
 (define-public cl-command-line-arguments
   (sbcl-package->cl-source-package sbcl-command-line-arguments))
 
-(define-public sbcl-fiveam
-  (package
-    (name "sbcl-fiveam")
-    (version "1.4.2")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/sionescu/fiveam")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name "fiveam" version))
-       (sha256
-        (base32 "04mh5plmlb15jbq3dkd8b9jl1dmbbg4hnd3k7859vpf6s12k5p4j"))))
-    (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("net.didierverna.asdf-flv" ,sbcl-net.didierverna.asdf-flv)
-       ("trivial-backtrace" ,sbcl-trivial-backtrace)))
-    (build-system asdf-build-system/sbcl)
-    (synopsis "Common Lisp testing framework")
-    (description "FiveAM is a simple (as far as writing and running tests
-goes) regression testing framework.  It has been designed with Common Lisp's
-interactive development model in mind.")
-    (home-page "https://common-lisp.net/project/fiveam/")
-    (license license:bsd-3)))
-
-(define-public cl-fiveam
-  (sbcl-package->cl-source-package sbcl-fiveam))
-
-(define-public ecl-fiveam
-  (sbcl-package->ecl-package sbcl-fiveam))
-
 (define-public sbcl-cl-irc
   (let ((commit "963823537c7bfcda2edd4c44d172192da6722175")
         (revision "0"))
@@ -379,7 +358,7 @@ interactive development model in mind.")
       (build-system asdf-build-system/sbcl)
       (native-inputs
        ;; Tests only.
-       `(("rt" ,sbcl-rt)))
+       (list sbcl-rt))
       (inputs
        `(("cl+ssl" ,sbcl-cl+ssl)
          ("flexi-streams" ,sbcl-flexi-streams)
@@ -430,7 +409,7 @@ Features:
           (base32 "1kninxwvvih9nhh7a9y8lfgi7pdr76675y1clw4ss17vz8fbim5p"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("lift" ,sbcl-lift)))
+       (list sbcl-lift))
       (arguments
        ;; NOTE: (Sharlatan-20210202T231437+0000): Due to the age of this library
        ;; tests use some deprecated functionality and keep failing.
@@ -461,8 +440,8 @@ timeouts.")
                (base32 "19i443fz3488v1pbbr9x24y8h8vlyhny9vj6c9jk5prm702awrp6"))
               (file-name
                (git-file-name "bordeaux-threads" version))))
-    (inputs `(("alexandria" ,sbcl-alexandria)))
-    (native-inputs `(("fiveam" ,sbcl-fiveam)))
+    (inputs (list sbcl-alexandria))
+    (native-inputs (list sbcl-fiveam))
     (build-system asdf-build-system/sbcl)
     (synopsis "Portable shared-state concurrency library for Common Lisp")
     (description "BORDEAUX-THREADS is a proposed standard for a minimal
@@ -509,42 +488,6 @@ thin compatibility layer for gray streams.")
 (define-public ecl-trivial-gray-streams
   (sbcl-package->ecl-package sbcl-trivial-gray-streams))
 
-(define-public sbcl-fiasco
-  (let ((commit "d62f7558b21addc89f87e306f65d7f760632655f")
-        (revision "1"))
-    (package
-      (name "sbcl-fiasco")
-      (version (git-version "0.0.1" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/joaotavora/fiasco")
-               (commit commit)))
-         (file-name (git-file-name "fiasco" version))
-         (sha256
-          (base32
-           "1zwxs3d6iswayavcmb49z2892xhym7n556d8dnmvalc32pm9bkjh"))))
-      (build-system asdf-build-system/sbcl)
-      (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("trivial-gray-streams" ,sbcl-trivial-gray-streams)))
-      (synopsis "Simple and powerful test framework for Common Lisp")
-      (description "A Common Lisp test framework that treasures your failures,
-logical continuation of Stefil.  It focuses on interactive debugging.")
-      (home-page "https://github.com/joaotavora/fiasco")
-      ;; LICENCE specifies this is public-domain unless the legislation
-      ;; doesn't allow or recognize it.  In that case it falls back to a
-      ;; permissive licence.
-      (license (list license:public-domain
-                     (license:x11-style "file://LICENCE"))))))
-
-(define-public cl-fiasco
-  (sbcl-package->cl-source-package sbcl-fiasco))
-
-(define-public ecl-fiasco
-  (sbcl-package->ecl-package sbcl-fiasco))
-
 (define-public sbcl-flexi-streams
   (package
     (name "sbcl-flexi-streams")
@@ -636,7 +579,7 @@ grammar.")
         (base32 "0dwvr29diqzcg5n6jvbk2rnd90i05l7n828hhw99khmqd0kz7xsi"))))
     (build-system asdf-build-system/sbcl)
     (native-inputs
-     `(("flexi-streams" ,sbcl-flexi-streams)))
+     (list sbcl-flexi-streams))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -705,7 +648,7 @@ compatible with ANSI-compliant Common Lisp implementations.")
         (base32 "1y2gq2sckspnq8118bix55p2j43dk9qn3p8a2rplp1ip2qxqbb1i"))))
      (build-system asdf-build-system/sbcl)
      (inputs
-      `(("parse" ,sbcl-parse)))
+      (list sbcl-parse))
      (home-page "https://github.com/massung/re")
      (synopsis "Lua-style Pattern Matching for Common Lisp")
      (description
@@ -773,7 +716,7 @@ within.")
      `(#:asd-systems
        '("uax-15")))
     (native-inputs
-     `(("fiveam" ,sbcl-fiveam)))
+     (list sbcl-fiveam))
     (inputs
      `(("cl-ppcre" ,sbcl-cl-ppcre)
        ("split-sequence" ,sbcl-split-sequence)))
@@ -805,9 +748,9 @@ RFC7564.")
                 "0ykx2s9lqfl74p1px0ik3l2izd1fc9jd1b4ra68s5x34rvjy0hza"))))
     (build-system asdf-build-system/sbcl)
     (native-inputs
-     `(("flexi-streams" ,sbcl-flexi-streams)))
+     (list sbcl-flexi-streams))
     (inputs
-     `(("cl-ppcre" ,sbcl-cl-ppcre)))
+     (list sbcl-cl-ppcre))
     (home-page "http://weitz.de/cl-unicode/")
     (synopsis "Portable Unicode library for Common Lisp")
     (description "CL-UNICODE is a portable Unicode library Common Lisp, which
@@ -825,8 +768,7 @@ ANSI-compliant Common Lisp implementations.")
   (package (inherit sbcl-cl-ppcre)
     (name "sbcl-cl-ppcre-unicode")
     (inputs
-     `(("sbcl-cl-ppcre" ,sbcl-cl-ppcre)
-       ("sbcl-cl-unicode" ,sbcl-cl-unicode)))
+     (list sbcl-cl-ppcre sbcl-cl-unicode))
     (arguments
      `(#:tests? #f ; tests fail with "Component :CL-PPCRE-TEST not found"
        #:phases
@@ -927,7 +869,7 @@ anti-aliased vectorial paths.")
        '(#:tests? #f           ; spatial-trees.test requires spatial-trees.nns
          #:test-asd-file "spatial-trees.test.asd"))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (home-page "https://github.com/rpav/spatial-trees")
       (synopsis "Dynamic index data structures for spatially-extended data")
       (description
@@ -990,8 +932,7 @@ a sequence (or chain) of such elements.")
           (base32 "0w6igiav35a65h6r4p1g6dw2i7mw0s06mviw31768r6z62l1ny1v"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("iterate" ,sbcl-iterate)
-         ("zpb-ttf" ,sbcl-zpb-ttf)))
+       (list sbcl-iterate sbcl-zpb-ttf))
       (home-page "https://github.com/mbattyani/cl-pdf")
       (synopsis "Common Lisp library for generating PDF files")
       (description
@@ -1022,7 +963,7 @@ files.")
        (file-name (string-append "clx-" version))))
     (build-system asdf-build-system/sbcl)
     (native-inputs
-     `(("fiasco" ,sbcl-fiasco)))
+     (list sbcl-fiasco))
     (home-page "https://www.cliki.net/portable-clx")
     (synopsis "X11 client library for Common Lisp")
     (description "CLX is an X11 client library for Common Lisp.  The code was
@@ -1061,12 +1002,12 @@ from other CLXes around the net.")
              #t))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("clx" ,sbcl-clx)
-         ("zpb-ttf" ,sbcl-zpb-ttf)
-         ("cl-vectors" ,sbcl-cl-vectors)
-         ("cl-fad" ,sbcl-cl-fad)
-         ("cl-store" ,sbcl-cl-store)
-         ("trivial-features" ,sbcl-trivial-features)))
+       (list sbcl-clx
+             sbcl-zpb-ttf
+             sbcl-cl-vectors
+             sbcl-cl-fad
+             sbcl-cl-store
+             sbcl-trivial-features))
       (home-page "https://github.com/l04m33/clx-truetype")
       (synopsis "Antialiased TrueType font rendering using CLX and XRender")
       (description "CLX-TrueType is pure common lisp solution for
@@ -1080,10 +1021,10 @@ antialiased TrueType font rendering using CLX and XRender extension.")
   (sbcl-package->ecl-package sbcl-clx-truetype))
 
 (define-public sbcl-slynk
-  (let ((commit "fb84318c08f59bc786e047006fc81e2ace568309"))
+  (let ((commit "0470c0281498b9de072fcbf3718fc66720eeb3d0"))
     (package
       (name "sbcl-slynk")
-      (version (git-version "1.0.43" "4" commit))
+      (version (git-version "1.0.43" "5" commit))
       (source
        (origin
          (method git-fetch)
@@ -1092,7 +1033,7 @@ antialiased TrueType font rendering using CLX and XRender extension.")
            (url "https://github.com/joaotavora/sly")
            (commit commit)))
          (sha256
-          (base32 "0z123k9ak7yjb9bxb5qx48f33ma8066rhkqh8xc14z7shk75jybj"))
+          (base32 "1ws2a9azmdkkg47xnd4jggna45nf0bh54gyp0799b44c4bgjp029"))
          (file-name (git-file-name "slynk" version))))
       (build-system asdf-build-system/sbcl)
       (outputs '("out" "image"))
@@ -1102,9 +1043,9 @@ antialiased TrueType font rendering using CLX and XRender extension.")
            (add-after 'create-asdf-configuration 'build-image
              (lambda* (#:key outputs #:allow-other-keys)
                (build-image (string-append
-                             (assoc-ref %outputs "image")
+                             (assoc-ref outputs "image")
                              "/bin/slynk")
-                            %outputs
+                            outputs
                             #:dependencies '("slynk"
                                              "slynk/arglists"
                                              "slynk/fancy-inspector"
@@ -1213,7 +1154,7 @@ else @code{parse-number} signals an error of type @code{invalid-number}.")
          "1lqsbhrkfl0yif46aymvb7l3nb9wdcmj4jyw485blj32jb4famzn"))))
     (build-system asdf-build-system/sbcl)
     (native-inputs
-     `(("rt" ,sbcl-rt)))
+     (list sbcl-rt))
     (home-page "https://common-lisp.net/project/iterate/")
     (synopsis "Iteration construct for Common Lisp")
     (description "@code{iterate} is an iteration construct for Common Lisp.
@@ -1252,11 +1193,8 @@ It is similar to the @code{CL:LOOP} macro, with these distinguishing marks:
            "0k39y3c93jgxpr7gwz7w0d8yknn1fdnxrjhd03057lvk5w8js27a"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("sbcl-parse-js" ,sbcl-parse-js)
-         ("sbcl-cl-ppcre" ,sbcl-cl-ppcre)
-         ("sbcl-cl-ppcre-unicode" ,sbcl-cl-ppcre-unicode)
-         ("sbcl-parse-number" ,sbcl-parse-number)
-         ("sbcl-iterate" ,sbcl-iterate)))
+       (list sbcl-parse-js sbcl-cl-ppcre sbcl-cl-ppcre-unicode
+             sbcl-parse-number sbcl-iterate))
       (home-page "https://github.com/mishoo/cl-uglify-js")
       (synopsis "JavaScript compressor library for Common Lisp")
       (description "This is a Common Lisp version of UglifyJS, a JavaScript
@@ -1328,8 +1266,7 @@ compressor.  It works on data produced by @code{parse-js} to generate a
          (chmod script #o755)
          #t)))
     (inputs
-     `(("sbcl" ,sbcl)
-       ("sbcl-cl-uglify-js" ,sbcl-cl-uglify-js)))
+     (list sbcl sbcl-cl-uglify-js))
     (synopsis "JavaScript compressor")))
 
 (define-public sbcl-cl-strings
@@ -1424,38 +1361,6 @@ documentation system, explicit development support, etc.")
 (define-public ecl-hu.dwim.asdf
   (sbcl-package->ecl-package sbcl-hu.dwim.asdf))
 
-(define-public sbcl-hu.dwim.stefil
-  (let ((commit "414902c6f575818c39a8a156b8b61b1adfa73dad"))
-    (package
-      (name "sbcl-hu.dwim.stefil")
-      (version (git-version "0.0.0" "2" commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri
-          (git-reference
-           (url "https://github.com/hu-dwim/hu.dwim.stefil")
-           (commit commit)))
-         (sha256
-          (base32 "14izmjjim590rh74swrssavdmdznj2z8vhqixy780sjhpcr5pmkc"))
-         (file-name (git-file-name "hu.dwim.stefil" version))))
-      (build-system asdf-build-system/sbcl)
-      (native-inputs
-       `(("asdf:cl-hu.dwim.asdf" ,sbcl-hu.dwim.asdf)))
-      (inputs
-       `(("sbcl-alexandria" ,sbcl-alexandria)))
-      (home-page "http://dwim.hu/project/hu.dwim.stefil")
-      (synopsis "Simple test framework")
-      (description "Stefil is a simple test framework for Common Lisp,
-with a focus on interactive development.")
-      (license license:public-domain))))
-
-(define-public cl-hu.dwim.stefil
-  (sbcl-package->cl-source-package sbcl-hu.dwim.stefil))
-
-(define-public ecl-hu.dwim.stefil
-  (sbcl-package->ecl-package sbcl-hu.dwim.stefil))
-
 (define-public sbcl-babel
   ;; No release since 2014.
   (let ((commit "aeed2d1b76358db48e6b70a64399c05678a6b9ea"))
@@ -1473,10 +1378,9 @@ with a focus on interactive development.")
           (base32 "0lkvv4xdpv4cv1y2bqillmabx8sdb2y4l6pbinq6mjh33w2brpvb"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("tests:cl-hu.dwim.stefil" ,sbcl-hu.dwim.stefil)))
+       (list sbcl-hu.dwim.stefil))
       (inputs
-       `(("sbcl-alexandria" ,sbcl-alexandria)
-         ("sbcl-trivial-features" ,sbcl-trivial-features)))
+       (list sbcl-alexandria sbcl-trivial-features))
       (home-page "https://common-lisp.net/project/babel/")
       (synopsis "Charset encoding and decoding library")
       (description "Babel is a charset encoding and decoding library, not unlike
@@ -1540,8 +1444,7 @@ to DeRemer and Pennello, which is used by Bison and lalr.scm (not lalr.cl).")
            "1qs1bv3m0ki8l5czhsflxcryh22r9d9g9a3a3b0cr0pl954q5rld"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("bordeaux-threads" ,sbcl-bordeaux-threads)
-         ("trivial-garbage" ,sbcl-trivial-garbage)))
+       (list sbcl-bordeaux-threads sbcl-trivial-garbage))
       (synopsis "Futures promises synchronization mechanism for Common Lisp")
       (description
        "Eager Future2 is a Common Lisp library that provides composable
@@ -1633,7 +1536,7 @@ and macros, primarily for software projects written in CL by the author.")
           (base32 "0s57wvvlvshp1gcp9i9d3qcmqhswnxps3i0y7wbb0v8i1a3p46m4"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("1am" ,sbcl-1am)))
+       (list sbcl-1am))
       (home-page "https://github.com/sjl/cl-pcg")
       (synopsis "Permuted congruential generators in Common Lisp")
       (description
@@ -1664,9 +1567,7 @@ pure Common Lisp.")
           (base32 "1ldpsbp3qrfzvknclsxj3sdyms1jf9ad20dvh4w0kw3zgahn2nr5"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("cl-pcg" ,sbcl-cl-pcg)
-         ("golden-utils" ,sbcl-golden-utils)
-         ("ironclad" ,sbcl-ironclad)))
+       (list sbcl-cl-pcg sbcl-golden-utils sbcl-ironclad))
       (home-page "https://git.mfiano.net/mfiano/seedable-rng")
       (synopsis "Common Lisp random number generator")
       (description
@@ -1745,10 +1646,9 @@ several blockable channels.)")
            "08bmf3pi7n5hadpmqqkg65cxcj6kbvm997wcs1f53ml1nb79d9z8"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("jpl-queues" ,sbcl-jpl-queues)
-         ("bordeaux-threads" ,sbcl-bordeaux-threads)))
+       (list sbcl-jpl-queues sbcl-bordeaux-threads))
       (native-inputs
-       `(("eager-future2" ,sbcl-eager-future2)))
+       (list sbcl-eager-future2))
       (synopsis "Thread-safe message-passing channels in Common Lisp")
       (description
        "Calispel is a Common Lisp library for thread-safe message-passing
@@ -1782,36 +1682,6 @@ libraries such as Bordeaux-Threads and Eager Future.")
 (define-public ecl-calispel
   (sbcl-package->ecl-package sbcl-calispel))
 
-(define-public sbcl-eos
-  (let ((commit "b4413bccc4d142cbe1bf49516c3a0a22c9d99243")
-        (revision "2"))
-    (package
-      (name "sbcl-eos")
-      (version (git-version "0.0.0" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/adlai/Eos")
-               (commit commit)))
-         (sha256
-          (base32 "1afllvmlnx97yzz404gycl3pa3kwx427k3hrbf37rpmjlv47knhk"))
-         (file-name (git-file-name "eos" version))))
-      (build-system asdf-build-system/sbcl)
-      (synopsis "Unit Testing for Common Lisp")
-      (description
-       "Eos was a unit testing library for Common Lisp.
-It began as a fork of FiveAM; however, FiveAM development has continued, while
-that of Eos has not.  Thus, Eos is now deprecated in favor of FiveAM.")
-      (home-page "https://github.com/adlai/Eos")
-      (license license:expat))))
-
-(define-public cl-eos
-  (sbcl-package->cl-source-package sbcl-eos))
-
-(define-public ecl-eos
-  (sbcl-package->ecl-package sbcl-eos))
-
 (define-public sbcl-esrap
   (let ((commit "866f28fa7a2c1d3fb6d0d0423850d1f9d955750f")
         (revision "2"))
@@ -1829,11 +1699,9 @@ that of Eos has not.  Thus, Eos is now deprecated in favor of FiveAM.")
          (file-name (git-file-name "esrap" version))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("trivial-with-current-source-form"
-          ,sbcl-trivial-with-current-source-form)))
+       (list sbcl-alexandria sbcl-trivial-with-current-source-form))
       (synopsis "Common Lisp packrat parser")
       (description
        "This is a packrat parser for Common Lisp.
@@ -1860,7 +1728,7 @@ In addition to regular Packrat / Parsing Grammar / TDPL features ESRAP supports:
 (define-public sbcl-split-sequence
   (package
     (name "sbcl-split-sequence")
-    (version "2.0.0")
+    (version "2.0.1")
     (source
      (origin
        (method git-fetch)
@@ -1869,11 +1737,11 @@ In addition to regular Packrat / Parsing Grammar / TDPL features ESRAP supports:
              (commit (string-append "v" version))))
        (sha256
         (base32
-         "0jcpnx21hkfwqj5fvp7kc6pn1qcz9hk7g2s5x8h0349x1j2irln0"))
+         "172k7iv775kwism6304p6z7mqpjvipl57nq1bgvmbk445943fmhq"))
        (file-name (git-file-name "split-sequence" version))))
     (build-system asdf-build-system/sbcl)
     (native-inputs
-     `(("fiveam" ,sbcl-fiveam)))
+     (list sbcl-fiveam))
     (synopsis "Member of the Common Lisp Utilities family of programs")
     (description
      "Splits sequence into a list of subsequences delimited by objects
@@ -1899,8 +1767,7 @@ satisfying the test.")
              version ".tgz"))
        (sha256
         (base32
-         "06mf8wn95yf5swhmzk4vp0xr4ylfl33dgfknkabbkd8n6jns8gcf"))
-       (file-name (string-append "colorize" version "-checkout"))))
+         "06mf8wn95yf5swhmzk4vp0xr4ylfl33dgfknkabbkd8n6jns8gcf"))))
     (build-system asdf-build-system/sbcl)
     (synopsis "Common Lisp library for encoding text in various web-savvy encodings")
     (description
@@ -1931,9 +1798,7 @@ satisfying the test.")
          (file-name (git-file-name "colorize" version))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("split-sequence" ,sbcl-split-sequence)
-         ("html-encode" ,sbcl-html-encode)))
+       (list sbcl-alexandria sbcl-split-sequence sbcl-html-encode))
       (synopsis "Common Lisp for syntax highlighting")
       (description
        "@command{colorize} is a Lisp library for syntax highlighting
@@ -2008,7 +1873,7 @@ for parsing, and grammar based on @command{peg-markdown}.")
        (file-name (string-append "cl-fad" version "-checkout"))))
     (build-system asdf-build-system/sbcl)
     (inputs
-     `(("bordeaux-threads" ,sbcl-bordeaux-threads)))
+     (list sbcl-bordeaux-threads))
     (synopsis "Portable pathname library for Common Lisp")
     (description
      "CL-FAD (for \"Files and Directories\") is a thin layer atop Common
@@ -2042,7 +1907,7 @@ Common Lisp.")
           (base32 "0yyp9z6iwx476whz0n1rpjznjyqqhlylhzwpgg5xx92lxmskl752"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("named-readtables" ,sbcl-named-readtables)))
+       (list sbcl-named-readtables))
       (home-page "https://github.com/cbaggers/fn")
       (synopsis "Macros for lambda brevity")
       (description
@@ -2057,34 +1922,6 @@ than the body of the lambda.")
 (define-public cl-fn
   (sbcl-package->cl-source-package sbcl-fn))
 
-(define-public sbcl-rt
-  (let ((commit "a6a7503a0b47953bc7579c90f02a6dba1f6e4c5a")
-        (revision "1"))
-    (package
-      (name "sbcl-rt")
-      (version (git-version "1990.12.19" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "http://git.kpe.io/rt.git")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32 "13si2rrxaagbr0bkvg6sqicxxpyshabx6ad6byc9n2ik5ysna69b"))))
-      (build-system asdf-build-system/sbcl)
-      (synopsis "MIT Regression Tester")
-      (description
-       "RT provides a framework for writing regression test suites.")
-      (home-page "https://www.cliki.net/rt")
-      (license license:expat))))
-
-(define-public cl-rt
-  (sbcl-package->cl-source-package sbcl-rt))
-
-(define-public ecl-rt
-  (sbcl-package->ecl-package sbcl-rt))
-
 (define-public sbcl-nibbles
   ;; No tagged release since 2018.
   (let ((commit "dad25240928d5cf8f7df69c4398244e03570bb35")
@@ -2104,7 +1941,7 @@ than the body of the lambda.")
       (build-system asdf-build-system/sbcl)
       (native-inputs
        ;; Tests only.
-       `(("rt" ,sbcl-rt)))
+       (list sbcl-rt))
       (synopsis
        "Common Lisp library for accessing octet-addressed blocks of data")
       (description
@@ -2147,10 +1984,9 @@ also be supported.")
     (build-system asdf-build-system/sbcl)
     (native-inputs
      ;; Tests only.
-     `(("rt" ,sbcl-rt)))
+     (list sbcl-rt))
     (inputs
-     `(("bordeaux-threads" ,sbcl-bordeaux-threads)
-       ("flexi-streams" ,sbcl-flexi-streams)))
+     (list sbcl-bordeaux-threads sbcl-flexi-streams))
     (synopsis "Cryptographic toolkit written in Common Lisp")
     (description
      "Ironclad is a cryptography library written entirely in Common Lisp.
@@ -2212,7 +2048,7 @@ readtables, which is akin to package namespacing in Common Lisp.")
         (base32 "0i4rqz5cv7d7c2w81x5lwy05s6fbi3zikf4k5kpi3bkx3cabwdxj"))))
     (build-system asdf-build-system/sbcl)
     (inputs
-     `(("parse-number" ,sbcl-parse-number)))
+     (list sbcl-parse-number))
     (home-page "http://common-lisp.net/project/py-configparser/")
     (synopsis "ConfigParser Python module functionality for Common Lisp")
     (description "The py-configparser package implements the ConfigParser
@@ -2245,7 +2081,7 @@ values in other options.")
          (file-name (git-file-name "pythonic-string-reader" version))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("named-readtables" ,sbcl-named-readtables)))
+       (list sbcl-named-readtables))
       (home-page "https://github.com/smithzvk/pythonic-string-reader")
       (synopsis "Read table modification inspired by Python's three quote strings")
       (description "This piece of code sets up some reader macros that make it
@@ -2263,7 +2099,7 @@ writing code that contains string literals that contain code themselves.")
 (define-public sbcl-slime-swank
   (package
     (name "sbcl-slime-swank")
-    (version "2.26")
+    (version "2.26.1")
     (source
      (origin
        (file-name (git-file-name "slime-swank" version))
@@ -2273,7 +2109,7 @@ writing code that contains string literals that contain code themselves.")
              (commit (string-append "v" version))))
        (sha256
         (base32
-         "0mxb1wnw19v0s72w2wkz5afdlzvpy5nn7pr4vav403qybac0sw5c"))))
+         "1a25ixb7q4svqabxnhwkk43v47mbsh13qwm7qlazkd3zkr8j3cli"))))
     (build-system asdf-build-system/sbcl)
     (arguments
      '(#:asd-systems '("swank")))
@@ -2292,11 +2128,11 @@ processes that doesn't run under Emacs.  Lisp processes created by
   (sbcl-package->ecl-package sbcl-slime-swank))
 
 (define-public sbcl-mgl-pax
-  (let ((commit "4ada6eb26364e71addb169ce58e4ba83bc7a8eaa")
-        (revision "2"))
+  (let ((commit "a7f904784ae59bbeeeb15a14348cda46ed9bdeb3")
+        (revision "0"))
     (package
       (name "sbcl-mgl-pax")
-      (version (git-version "0.0.3" revision commit))
+      (version (git-version "0.0.4" revision commit))
       (source
        (origin
          (method git-fetch)
@@ -2304,17 +2140,22 @@ processes that doesn't run under Emacs.  Lisp processes created by
                (url "https://github.com/melisgl/mgl-pax")
                (commit commit)))
          (sha256
-          (base32 "1s38crgvmd9hgqwsscqpj6m6c10a074zjgg8k5sl15yih1wkpssm"))
+          (base32 "119pb3485m6hqsqsaqpaq2x8xh5lrbqapw7zaqyq425n75vd1mc8"))
          (file-name (git-file-name "mgl-pax" version))))
       (build-system asdf-build-system/sbcl)
       (inputs
        `(("3bmd" ,sbcl-3bmd)
-         ("babel" ,sbcl-babel)
-         ("cl-fad" ,sbcl-cl-fad)
-         ("ironclad" ,sbcl-ironclad)
+         ("alexandria" ,sbcl-alexandria)
+         ("colorize" ,sbcl-colorize)
+         ("md5" ,sbcl-md5)
          ("named-readtables" ,sbcl-named-readtables)
          ("pythonic-string-reader" ,sbcl-pythonic-string-reader)
          ("swank" ,sbcl-slime-swank)))
+      (arguments
+       `(#:asd-systems '("mgl-pax"
+                         "mgl-pax/navigate"
+                         "mgl-pax/document"
+                         "mgl-pax/transcribe")))
       (synopsis "Exploratory programming environment and documentation generator")
       (description
        "PAX provides an extremely poor man's Explorable Programming
@@ -2331,7 +2172,7 @@ With the simplistic tools provided, one may accomplish similar effects as with
 Literate Programming, but documentation is generated from code, not vice versa
 and there is no support for chunking yet.  Code is first, code must look
 pretty, documentation is code.")
-      (home-page "http://quotenil.com/")
+      (home-page "https://melisgl.github.io/mgl-pax/")
       (license license:expat))))
 
 (define-public cl-mgl-pax
@@ -2385,35 +2226,6 @@ project.")
 (define-public cl-mssql
   (sbcl-package->cl-source-package sbcl-mssql))
 
-(define-public sbcl-lisp-unit
-  (let ((commit "89653a232626b67400bf9a941f9b367da38d3815"))
-    (package
-      (name "sbcl-lisp-unit")
-      (version (git-version "0.0.0" "1" commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/OdonataResearchLLC/lisp-unit")
-               (commit commit)))
-         (sha256
-          (base32
-           "0p6gdmgr7p383nvd66c9y9fp2bjk4jx1lpa5p09g43hr9y9pp9ry"))
-         (file-name (git-file-name "lisp-unit" version))))
-      (build-system asdf-build-system/sbcl)
-      (synopsis "Common Lisp Test framework inspired by JUnit to be simple of use")
-      (description
-       "@command{lisp-unit} is a Common Lisp library that supports unit
-testing.  It is an extension of the library written by Chris Riesbeck.")
-      (home-page "https://github.com/OdonataResearchLLC/lisp-unit")
-      (license license:expat))))
-
-(define-public cl-lisp-unit
-  (sbcl-package->cl-source-package sbcl-lisp-unit))
-
-(define-public ecl-lisp-unit
-  (sbcl-package->ecl-package sbcl-lisp-unit))
-
 (define-public sbcl-anaphora
   (package
     (name "sbcl-anaphora")
@@ -2430,7 +2242,7 @@ testing.  It is an extension of the library written by Chris Riesbeck.")
        (file-name (git-file-name "anaphora" version))))
     (build-system asdf-build-system/sbcl)
     (native-inputs
-     `(("rt" ,sbcl-rt)))
+     (list sbcl-rt))
     (synopsis "The anaphoric macro collection from Hell")
     (description
      "Anaphora is the anaphoric macro collection from Hell: it includes many
@@ -2445,47 +2257,6 @@ new fiends in addition to old friends like @command{aif} and
 (define-public ecl-anaphora
   (sbcl-package->ecl-package sbcl-anaphora))
 
-(define-public sbcl-lift
-  (let ((commit "2594160d6ca3a77d8750110dfa63214256aab852")
-        (revision "2"))
-    (package
-      (name "sbcl-lift")
-      (version (git-version "1.7.1" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/gwkkwg/lift")
-               (commit commit)))
-         (sha256
-          (base32 "01xvz9sl5l5lai4h9dabmcjnm659wf5zllaxqbs55lffskp6jwq3"))
-         (file-name (git-file-name "lift" version))
-         (modules '((guix build utils)))
-         (snippet
-          ;; Don't keep the bundled website
-          `(begin
-             (delete-file-recursively "website")
-             #t))))
-      (build-system asdf-build-system/sbcl)
-      (arguments
-       ;; The tests require a debugger, but we run with the debugger disabled.
-       '(#:tests? #f))
-      (synopsis "LIsp Framework for Testing")
-      (description
-       "The LIsp Framework for Testing (LIFT) is a unit and system test tool for LISP.
-Though inspired by SUnit and JUnit, it's built with Lisp in mind.  In LIFT,
-testcases are organized into hierarchical testsuites each of which can have
-its own fixture.  When run, a testcase can succeed, fail, or error.  LIFT
-supports randomized testing, benchmarking, profiling, and reporting.")
-      (home-page "https://github.com/gwkkwg/lift")
-      (license license:expat))))
-
-(define-public cl-lift
-  (sbcl-package->cl-source-package sbcl-lift))
-
-(define-public ecl-lift
-  (sbcl-package->ecl-package sbcl-lift))
-
 (define-public sbcl-let-plus
   (let ((commit "5f14af61d501ecead02ec6b5a5c810efc0c9fdbb"))
     (package
@@ -2503,10 +2274,9 @@ supports randomized testing, benchmarking, profiling, and reporting.")
          (file-name (git-file-name "let-plus" version))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("anaphora" ,sbcl-anaphora)))
+       (list sbcl-alexandria sbcl-anaphora))
       (native-inputs
-       `(("lift" ,sbcl-lift)))
+       (list sbcl-lift))
       (synopsis "Destructuring extension of let*")
       (description
        "This library implements the let+ macro, which is a dectructuring
@@ -2545,8 +2315,7 @@ not counting tests)
          (file-name (git-file-name "cl-colors" version))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("let-plus" ,sbcl-let-plus)))
+       (list sbcl-alexandria sbcl-let-plus))
       (synopsis "Simple color library for Common Lisp")
       (description
        "This is a very simple color library for Common Lisp, providing
@@ -2570,10 +2339,10 @@ This library is no longer supported by its author.")
   (sbcl-package->ecl-package sbcl-cl-colors))
 
 (define-public sbcl-cl-ansi-text
-  (let ((commit "53badf7878f27f22f2d4a2a43e6df458e43acbe9"))
+  (let ((commit "8b129d83c7511b54cdd9d4123825a2d06349b25c"))
     (package
       (name "sbcl-cl-ansi-text")
-      (version (git-version "1.0.0" "1" commit))
+      (version (git-version "2.0.1" "1" commit))
       (source
        (origin
          (method git-fetch)
@@ -2582,14 +2351,13 @@ This library is no longer supported by its author.")
                (commit commit)))
          (sha256
           (base32
-           "11i27n0dbz5lmygiw65zzr8lx0rac6b6yysqranphn31wls6ja3v"))
+           "0nk7ajqfa937w1iy3zy86jjbw8yffm05cqs4wxkgl97v6kmmya14"))
          (file-name (git-file-name "cl-ansi-text" version))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("cl-colors" ,sbcl-cl-colors)))
+       (list sbcl-alexandria sbcl-cl-colors2))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (synopsis "ANSI terminal color implementation for Common Lisp")
       (description
        "@command{cl-ansi-text} provides utilities which enable printing to an
@@ -2606,48 +2374,6 @@ named color.")
 (define-public ecl-cl-ansi-text
   (sbcl-package->ecl-package sbcl-cl-ansi-text))
 
-(define-public sbcl-prove
-  (let ((commit "4f9122bd393e63c5c70c1fba23070622317cfaa0"))
-    (package
-      (name "sbcl-prove")
-      (version (git-version "1.0.0" "1" commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/fukamachi/prove")
-               (commit commit)))
-         (sha256
-          (base32
-           "07sbfw459z8bbjvx1qlmfa8qk2mvbjnnzi2mi0x72blaj8bkl4vc"))
-         (file-name (git-file-name "prove" version))))
-      (build-system asdf-build-system/sbcl)
-      (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("cl-ppcre" ,sbcl-cl-ppcre)
-         ("cl-ansi-text" ,sbcl-cl-ansi-text)))
-      (synopsis "Yet another unit testing framework for Common Lisp")
-      (description
-       "This project was originally called @command{cl-test-more}.
-@command{prove} is yet another unit testing framework for Common Lisp.  The
-advantages of @command{prove} are:
-
-@itemize
-@item Various simple functions for testing and informative error messages
-@item ASDF integration
-@item Extensible test reporters
-@item Colorizes the report if it's available (note for SLIME)
-@item Reports test durations
-@end itemize\n")
-      (home-page "https://github.com/fukamachi/prove")
-      (license license:expat))))
-
-(define-public cl-prove
-  (sbcl-package->cl-source-package sbcl-prove))
-
-(define-public ecl-prove
-  (sbcl-package->ecl-package sbcl-prove))
-
 (define-public sbcl-proc-parse
   (let ((commit "ac3636834d561bdc2686c956dbd82494537285fd"))
     (package
@@ -2668,7 +2394,7 @@ advantages of @command{prove} are:
        `(("alexandria" ,sbcl-alexandria)
          ("babel" ,sbcl-babel)))
       (native-inputs
-       `(("prove" ,sbcl-prove)))
+       (list sbcl-prove))
       (arguments
        ;; TODO: Tests don't find "proc-parse-test", why?
        `(#:tests? #f))
@@ -2706,7 +2432,7 @@ pattern-matching-like, but a char-by-char procedural parser.")
        ;; FIXME: https://github.com/soemraws/parse-float/issues/12
        `(#:asd-systems '("parse-float" "parse-float-tests")))
       (native-inputs
-       `(("lisp-unit" ,sbcl-lisp-unit)))
+       (list sbcl-lisp-unit))
       (inputs
        `(("alexandria" ,sbcl-alexandria)))
       (home-page "https://github.com/soemraws/parse-float")
@@ -2732,7 +2458,7 @@ values from a string in Common Lisp.")
        (origin
          (method hg-fetch)
          (uri (hg-reference
-               (url "https://bitbucket.org/vityok/cl-string-match/")
+               (url "https://github.com/vityok/cl-string-match")
                (changeset changeset)))
          (sha256
           (base32
@@ -2752,15 +2478,22 @@ values from a string in Common Lisp.")
       ;; TODO: Tests are not evaluated properly.
       (native-inputs
        ;; For testing:
-       `(("lisp-unit" ,sbcl-lisp-unit)))
+       (list sbcl-lisp-unit))
       (arguments
-       `(#:tests? #f))
+       `(#:tests? #f
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'fix-dependency
+             (lambda _
+               (substitute* "cl-string-match.asd"
+                 ((":mgl-pax")
+                  ":mgl-pax/document")))))))
       (synopsis "Set of utilities to manipulate strings in Common Lisp")
       (description
        "@command{cl-strings} is a small, portable, dependency-free set of
 utilities that make it even easier to manipulate text in Common Lisp.  It has
 100% test coverage and works at least on sbcl, ecl, ccl, abcl and clisp.")
-      (home-page "https://bitbucket.org/vityok/cl-string-match/")
+      (home-page "https://github.com/vityok/cl-string-match")
       (license license:bsd-3))))
 
 (define-public cl-string-match
@@ -2769,35 +2502,6 @@ utilities that make it even easier to manipulate text in Common Lisp.  It has
 (define-public ecl-cl-string-match
   (sbcl-package->ecl-package sbcl-cl-string-match))
 
-(define-public sbcl-ptester
-  (let ((commit "fe69fde54f4bce00ce577feb918796c293fc7253")
-        (revision "1"))
-    (package
-      (name "sbcl-ptester")
-      (version (git-version "2.1.3" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "http://git.kpe.io/ptester.git")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32 "1l0lfl7cdnr2qf4zh38hi4llxg22c49zkm639bdkmvlkzwj3ndwf"))))
-      (build-system asdf-build-system/sbcl)
-      (home-page "http://quickdocs.org/ptester/")
-      (synopsis "Portable test harness package")
-      (description
-       "@command{ptester} is a portable testing framework based on Franz's
-tester module.")
-      (license license:llgpl))))
-
-(define-public cl-ptester
-  (sbcl-package->cl-source-package sbcl-ptester))
-
-(define-public ecl-ptester
-  (sbcl-package->ecl-package sbcl-ptester))
-
 (define-public sbcl-puri
   (let ((commit "4bbab89d9ccbb26346899d1f496c97604fec567b")
         (revision "2"))
@@ -2815,7 +2519,7 @@ tester module.")
           (base32 "0gq2rsr0aihs0z20v4zqvmdl4szq53b52rh97pvnmwrlbn4mapmd"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("ptester" ,sbcl-ptester)))
+       (list sbcl-ptester))
       (home-page "http://puri.kpe.io/")
       (synopsis "Portable URI Library")
       (description
@@ -2847,15 +2551,15 @@ Lisp programs.  It parses URI according to the RFC 2396 specification.")
            "06gw5wxcpdclb6a5i5k9lbmdlyqsp182czrm9bm1cpklzbj0ihrl"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("asdf-finalizers" ,sbcl-asdf-finalizers)
-         ("babel" ,sbcl-babel)
-         ("chipz" ,sbcl-chipz)
-         ("cl+ssl" ,sbcl-cl+ssl)
-         ("flexi-streams" ,sbcl-flexi-streams)
-         ("ironclad" ,sbcl-ironclad)
-         ("salza2" ,sbcl-salza2)
-         ("trivial-gray-streams" ,sbcl-trivial-gray-streams)
-         ("usocket" ,sbcl-usocket)))
+       (list sbcl-asdf-finalizers
+             sbcl-babel
+             sbcl-chipz
+             sbcl-cl+ssl
+             sbcl-flexi-streams
+             sbcl-ironclad
+             sbcl-salza2
+             sbcl-trivial-gray-streams
+             sbcl-usocket))
       (home-page "https://github.com/qitab/qmynd")
       (synopsis "QITAB MySQL Native Driver for Common Lisp")
       (description "QMyND, the QITAB MySQL Native Driver, is a MySQL client
@@ -2924,7 +2628,7 @@ non-consing thread safe queues and fibonacci priority queues.")
           (base32 "0k2f1771wd9kdrcasldy1r00k5bdgi9fd07in52zmjggc0i7dd80"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)))
+       (list sbcl-alexandria))
       (home-page "https://github.com/3b/glsl-packing/")
       (synopsis "Common Lisp utilities to calculate OpenGL layouts")
       (description
@@ -2986,9 +2690,7 @@ from GLSL as data.")
           (base32 "0bhxxnv7ldkkb18zdxyz2rj2a3iawzq2kcp7cn5i91iby7n0082x"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("documentation-utils" ,sbcl-documentation-utils)
-         ("glsl-symbols" ,sbcl-glsl-spec)))
+       (list sbcl-alexandria sbcl-documentation-utils sbcl-glsl-spec))
       (home-page "https://github.com/cbaggers/rtg-math")
       (synopsis "Common Lisp library of game-related math functions")
       (description
@@ -3019,16 +2721,16 @@ for making realtime graphics in Lisp.")
           (base32 "1p9x1wj576x5d31yvls9r1avkjkyhri7kyxbjfkg9z93a1w18j9z"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
-      (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("cl-ppcre" ,sbcl-cl-ppcre)
-         ("documentation-utils" ,sbcl-documentation-utils)
-         ("fn" ,sbcl-fn)
-         ("glsl-spec" ,sbcl-glsl-spec)
-         ("named-readtables" ,sbcl-named-readtables)
-         ("parse-float" ,sbcl-parse-float)
-         ("vas-string-metrics" ,sbcl-vas-string-metrics)))
+       (list sbcl-fiveam))
+      (inputs
+       (list sbcl-alexandria
+             sbcl-cl-ppcre
+             sbcl-documentation-utils
+             sbcl-fn
+             sbcl-glsl-spec
+             sbcl-named-readtables
+             sbcl-parse-float
+             sbcl-vas-string-metrics))
       (home-page "https://github.com/cbaggers/varjo")
       (synopsis "Lisp to GLSL Language Translator")
       (description
@@ -3129,8 +2831,7 @@ package.")
          (file-name (git-file-name "cffi-c-ref" version))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("cffi" ,sbcl-cffi)))
+       (list sbcl-alexandria sbcl-cffi))
       (synopsis "Streamlined access to foreign memory")
       (description
        "This Common Lisp library provides macros to access foreign memory.")
@@ -3187,6 +2888,59 @@ relational database engine.")
 (define-public ecl-cl-sqlite
   (sbcl-package->ecl-package sbcl-cl-sqlite))
 
+(define-public sbcl-cl-redis
+  (let ((commit "7d592417421cf7cd1cffa96043b457af0490df7d")
+        (revision "0"))
+    (package
+      (name "sbcl-cl-redis")
+      (version (git-version "2.3.8" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/vseloved/cl-redis")
+               (commit commit)))
+         (file-name (git-file-name "cl-redis" version))
+         (sha256
+          (base32 "0x5ahxb5cx37biyn3cjycshhm1rr9p5cf1a9l5hd1n1xjxm2f8vi"))))
+      (build-system asdf-build-system/sbcl)
+      (arguments
+       '(#:phases
+         (modify-phases %standard-phases
+           (add-before 'check 'start-redis
+             (lambda _
+               (system "redis-server --port 6379 &"))))))
+      (native-inputs
+       `(("bordeaux-threads" ,sbcl-bordeaux-threads)
+         ("flexi-streams" ,sbcl-flexi-streams)
+         ("redis" ,redis)
+         ("should-test" ,sbcl-should-test)))
+      (inputs
+       `(("babel" ,sbcl-babel)
+         ("cl-ppcre" ,sbcl-cl-ppcre)
+         ("flexi-streams" ,sbcl-flexi-streams)
+         ("rutils" ,sbcl-rutils)
+         ("usocket" ,sbcl-usocket)))
+      (home-page "https://github.com/vseloved/cl-redis")
+      (synopsis "Common Lisp client for Redis")
+      (description "This is a Common Lisp wrapper for interacting with the
+Redis data structure store.")
+      (license license:expat))))
+
+(define-public cl-redis
+  (sbcl-package->cl-source-package sbcl-cl-redis))
+
+(define-public ecl-cl-redis
+  (let ((pkg (sbcl-package->ecl-package sbcl-cl-redis)))
+    (package
+      (inherit pkg)
+      (arguments
+       (substitute-keyword-arguments (package-arguments pkg)
+         ;; Tests are failing on ECL with:
+         ;;   Test L-COMMANDS: An error occurred during initialization:
+         ;;   Protocol not found: "tcp".
+         ((#:tests? _ #f) #f))))))
+
 (define-public sbcl-parenscript
   ;; Source archives are overwritten on every release, we use the Git repo instead.
   (let ((commit "7a1ac46353cecd144fc91915ba9f122aafcf4766"))
@@ -3205,9 +2959,7 @@ relational database engine.")
            "0c22lqarrpbq82dg1sb3y6mp6w2faczp34ymzhnmff88yfq1xzsf"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("cl-ppcre" ,sbcl-cl-ppcre)
-         ("anaphora" ,sbcl-anaphora)
-         ("named-readtables" ,sbcl-named-readtables)))
+       (list sbcl-cl-ppcre sbcl-anaphora sbcl-named-readtables))
       (home-page "https://common-lisp.net/project/parenscript/")
       (synopsis "Translator from a subset of Common Lisp to JavaScript")
       (description
@@ -3265,7 +3017,7 @@ JavaScript.
            "0fx3m3x3s5ji950yzpazz4s0img3l6b3d6l3jrfjv0lr702496lh"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (home-page "https://github.com/hankhero/cl-json")
       (synopsis "JSON encoder and decoder for Common-Lisp")
       (description
@@ -3283,31 +3035,32 @@ settings ensure a very simple mode of operation, similar to that provided by
   (sbcl-package->ecl-package sbcl-cl-json))
 
 (define-public sbcl-unix-opts
-  (package
-    (name "sbcl-unix-opts")
-    (version "0.1.7")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/libre-man/unix-opts")
-             (commit version)))
-       (file-name (git-file-name "unix-opts" version))
-       (sha256
-        (base32
-         "08djdi1ard09fijb7w9bdmhmwd98b1hzmcnjw9fqjiqa0g3b44rr"))))
-    (build-system asdf-build-system/sbcl)
-    (home-page "https://github.com/hankhero/cl-json")
-    (synopsis "Unix-style command line options parser")
-    (description
-     "This is a minimalistic parser of command line options.  The main
+  (let ((commit "0e61f34b2ecf62288437810d4abb31e572048b04")
+        (revision "1"))
+    (package
+      (name "sbcl-unix-opts")
+      (version (git-version "0.1.7" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/libre-man/unix-opts")
+               (commit commit)))
+         (file-name (git-file-name "unix-opts" version))
+         (sha256
+          (base32 "16mcqpzwrz808p9n3wwl99ckg3hg7yihw08y1i4l7c92aldbkasq"))))
+      (build-system asdf-build-system/sbcl)
+      (home-page "https://github.com/hankhero/cl-json")
+      (synopsis "Unix-style command line options parser")
+      (description
+       "This is a minimalistic parser of command line options.  The main
 advantage of the library is the ability to concisely define command line
 options once and then use this definition for parsing and extraction of
 command line arguments, as well as printing description of command line
 options (you get --help for free).  This way you don't need to repeat
 yourself.  Also, @command{unix-opts} doesn't depend on anything and
 precisely controls the behavior of the parser via Common Lisp restarts.")
-    (license license:expat)))
+      (license license:expat))))
 
 (define-public cl-unix-opts
   (sbcl-package->cl-source-package sbcl-unix-opts))
@@ -3330,7 +3083,7 @@ precisely controls the behavior of the parser via Common Lisp restarts.")
         (base32 "0122jicfg7pca1wxw8zak1n92h5friqy60988ns0ysksj3fphw9n"))))
     (build-system asdf-build-system/sbcl)
     (native-inputs
-     `(("rt" ,sbcl-rt)))
+     (list sbcl-rt))
     (home-page "https://common-lisp.net/project/trivial-garbage/")
     (synopsis "Portable GC-related APIs for Common Lisp")
     (description "@command{trivial-garbage} provides a portable API to
@@ -3389,7 +3142,7 @@ Lisp implementations.")
            "04vix0gmqsj91lm975sx7jhlnz5gq1xf9jp873mp7c8frc5dk1jj"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (inputs
        `(("bordeaux-threads" ,sbcl-bordeaux-threads)
          ("cairo" ,cairo)
@@ -3459,7 +3212,7 @@ is a library for creating graphical user interfaces.")
 (define-public sbcl-cl-webkit
   (package
     (name "sbcl-cl-webkit")
-    (version "3.0.0")
+    (version "3.5.0")
     (source
      (origin
        (method git-fetch)
@@ -3469,7 +3222,7 @@ is a library for creating graphical user interfaces.")
        (file-name (git-file-name "cl-webkit" version))
        (sha256
         (base32
-         "015xry1cvbgspfzz35ifz2qscz946ljhj2z8rzjscy9v8fgnjsdk"))))
+         "1a16dka15lqzpli0f0qd3afmi14vgdxnfkn9z9d1r4cw9p11s71l"))))
     (build-system asdf-build-system/sbcl)
     (inputs
      `(("cffi" ,sbcl-cffi)
@@ -3632,7 +3385,7 @@ Lisp, featuring:
       (arguments
        '(#:asd-systems '("markup")))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (inputs
        `(("alexandria" ,sbcl-alexandria)
          ("cl-str" ,sbcl-cl-str)
@@ -3757,7 +3510,7 @@ Lisp (from GBBopen project).")
          "0x746wr2324l6bn7skqzgkzcbj5kd0zp2ck0c8rldrw0rzabg826"))))
     (build-system asdf-build-system/sbcl)
     (native-inputs
-     `(("rt" ,sbcl-rt)))
+     (list sbcl-rt))
     (inputs
      `(("bordeaux-threads" ,sbcl-bordeaux-threads)
        ("split-sequence" ,sbcl-split-sequence)))
@@ -3840,7 +3593,7 @@ This XML parser implementation has the following limitations:
          "02z7k163d51v0pzk8mn1xb6h5s6x64gjqkslhwm3a5x26k2gfs11"))))
     (build-system asdf-build-system/sbcl)
     (inputs
-     `(("s-xml" ,sbcl-s-xml)))
+     (list sbcl-s-xml))
     (home-page "https://common-lisp.net/project/s-xml-rpc/")
     (synopsis "Implementation of XML-RPC in Common Lisp for both client and server")
     (description
@@ -3899,9 +3652,9 @@ client and server.")
            "0apkgqrscylw3hhm5x2vs0z3hz6h7zd7dl5y3wr2zl8qjpvpc80k"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("xclip" ,xclip)))
+       (list xclip))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (arguments
        `(#:phases
          (modify-phases %standard-phases
@@ -3939,7 +3692,7 @@ client and server.")
         (base32 "1mbaqiwj5034iw6jzw30jyhwzp1pvhnz1zcy0lns0z5j2h9ldapw"))))
      (build-system asdf-build-system/sbcl)
      (native-inputs
-      `(("sbcl-lift" ,sbcl-lift)))
+      (list sbcl-lift))
      (arguments
       `(#:phases
         (modify-phases %standard-phases
@@ -3987,7 +3740,7 @@ backtrace portably.")
         (base32 "0phh5n3clhl9ji8jaxrajidn22d3f0aq87mlbfkkxlnx2pnw694k"))))
      (build-system asdf-build-system/sbcl)
      (home-page "https://github.com/jdz/rfc2388/")
-     (synopsis "An implementation of RFC 2388 in Common Lisp")
+     (synopsis "Implementation of RFC 2388 in Common Lisp")
      (description
       "This package contains an implementation of RFC 2388, which is used to
 process form data posted with HTTP POST method using enctype
@@ -4029,11 +3782,11 @@ RFC 1321 by R. Rivest, published April 1992.")
   (package
     (inherit (sbcl-package->ecl-package sbcl-md5))
     (inputs
-     `(("flexi-streams" ,ecl-flexi-streams)))))
+     (list ecl-flexi-streams))))
 
 (define-public sbcl-cl+ssl
-  (let ((commit "701e645081e6533a3f0f0b3ac86389d6f506c4b5")
-        (revision "1"))
+  (let ((commit "09e896b04c112e7eb0f9d443a5801d557fbcd3ea")
+        (revision "2"))
     (package
       (name "sbcl-cl+ssl")
       (version (git-version "0.0.0" revision commit))
@@ -4045,7 +3798,7 @@ RFC 1321 by R. Rivest, published April 1992.")
                (commit commit)))
          (file-name (git-file-name "cl+ssl" version))
          (sha256
-          (base32 "0nfl275nwhff3m25872y388cydz14kqb6zbwywa6nj85r9k8bgs0"))))
+          (base32 "1ynvk8rbd5zvbdrl8mr49jwmg9fh94clzkagkza9jmpj0p1qvynd"))))
       (build-system asdf-build-system/sbcl)
       (arguments
        '(#:phases
@@ -4055,16 +3808,20 @@ RFC 1321 by R. Rivest, published April 1992.")
                (substitute* "src/reload.lisp"
                  (("libssl.so" all)
                   (string-append
+                   (assoc-ref inputs "openssl") "/lib/" all))
+                 (("libcrypto.so" all)
+                  (string-append
                    (assoc-ref inputs "openssl") "/lib/" all))))))))
       (inputs
-       `(("openssl" ,openssl)
-         ("sbcl-cffi" ,sbcl-cffi)
-         ("sbcl-trivial-gray-streams" ,sbcl-trivial-gray-streams)
-         ("sbcl-flexi-streams" ,sbcl-flexi-streams)
-         ("sbcl-bordeaux-threads" ,sbcl-bordeaux-threads)
-         ("sbcl-trivial-garbage" ,sbcl-trivial-garbage)
-         ("sbcl-alexandria" ,sbcl-alexandria)
-         ("sbcl-trivial-features" ,sbcl-trivial-features)))
+       (list openssl
+             sbcl-cffi
+             sbcl-trivial-gray-streams
+             sbcl-flexi-streams
+             sbcl-bordeaux-threads
+             sbcl-trivial-garbage
+             sbcl-alexandria
+             sbcl-trivial-features
+             sbcl-usocket))
       (home-page "https://common-lisp.net/project/cl-plus-ssl/")
       (synopsis "Common Lisp bindings to OpenSSL")
       (description
@@ -4097,7 +3854,7 @@ Development into CL+SSL was done by David Lichteblau.")
           (base32 "06gx04mah5nc8w78s0j8628divbf1s5w7af8w7pvzb2d5mgvrbd2"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("sbcl-rt" ,sbcl-rt)))
+       (list sbcl-rt))
       (home-page "http://files.kpe.io/kmrcl/")
       (synopsis "General utilities for Common Lisp programs")
       (description
@@ -4128,8 +3885,7 @@ Rosenberg's Common Lisp packages.")
           (base32 "12jj54h0fs6n237cvnp8v6hn0imfksammq22ys6pi0gwz2w47rbj"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs                    ; For tests.
-       `(("sbcl-ptester" ,sbcl-ptester)
-         ("sbcl-kmrcl" ,sbcl-kmrcl)))
+       (list sbcl-ptester sbcl-kmrcl))
       (home-page "http://files.kpe.io/cl-base64/")
       (synopsis
        "Common Lisp package to encode and decode base64 with URI support")
@@ -4161,7 +3917,7 @@ encoding table that uses only URI-compatible characters.")
         (base32 "0jzn3nyb3f22gm983rfk99smqs3mhb9ivjmasvhq9qla5cl9pyhd"))))
     (build-system asdf-build-system/sbcl)
     (inputs
-     `(("sbcl-trivial-gray-streams" ,sbcl-trivial-gray-streams)))
+     (list sbcl-trivial-gray-streams))
     (home-page "https://edicl.github.io/chunga/")
     (synopsis "Portable chunked streams for Common Lisp")
     (description
@@ -4177,8 +3933,8 @@ defined in RFC 2616.")
 
 (define-public sbcl-cl-who
   (let ((version "1.1.4")
-        (commit "2c08caa4bafba720409af9171feeba3f32e86d32")
-        (revision "1"))
+        (commit "0d3826475133271ee8c590937136c1bc41b8cbe0")
+        (revision "2"))
     (package
       (name "sbcl-cl-who")
       (version (git-version version revision commit))
@@ -4188,13 +3944,13 @@ defined in RFC 2616.")
          (uri (git-reference
                (url "https://github.com/edicl/cl-who")
                (commit commit)))
-         (file-name (git-file-name name version))
+         (file-name (git-file-name "cl-who" version))
          (sha256
           (base32
-           "0yjb6sr3yazm288m318kqvj9xk8rm9n1lpimgf65ymqv0i5agxsb"))))
+           "0sc8nji9q1df04lhsiwsjy1a35996bibl31w5hp5sh8q6sa122dy"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("sbcl-flexi-streams" ,sbcl-flexi-streams)))
+       (list sbcl-flexi-streams))
       (home-page "https://edicl.github.io/cl-who/")
       (synopsis "Yet another Lisp markup language")
       (description
@@ -4229,7 +3985,7 @@ as good or bad as the next one.")
            "0plx4rs39zbs4gjk77h4a2q11zpy75fh9v8hnxrvsf8fnakajhwg"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("sbcl-flexi-streams" ,sbcl-flexi-streams)))
+       (list sbcl-flexi-streams))
       (home-page "http://method-combination.net/lisp/chipz/")
       (synopsis
        "Common Lisp library for decompressing deflate, zlib, gzip, and bzip2
@@ -4251,29 +4007,29 @@ the format used by the popular compression tool bzip2.")
 (define-public sbcl-drakma
   (package
     (name "sbcl-drakma")
-    (version "2.0.7")
+    (version "2.0.8")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
              (url "https://github.com/edicl/drakma")
              (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
+       (file-name (git-file-name "cl-drakma" version))
        (sha256
         (base32
-         "1441idnyif9xzx3ln1p3fg36k2v9h4wasjqrzc8y52j61420qpci"))))
+         "1wf2zivfvhsh6zvd6wcwfd67bm8s8a1p2fismszc8xb819dqk9yl"))))
     (build-system asdf-build-system/sbcl)
     (inputs
-     `(("sbcl-puri" ,sbcl-puri)
-       ("sbcl-cl-base64" ,sbcl-cl-base64)
-       ("sbcl-chunga" ,sbcl-chunga)
-       ("sbcl-flexi-streams" ,sbcl-flexi-streams)
-       ("sbcl-cl-ppcre" ,sbcl-cl-ppcre)
-       ("sbcl-chipz" ,sbcl-chipz)
-       ("sbcl-usocket" ,sbcl-usocket)
-       ("sbcl-cl+ssl" ,sbcl-cl+ssl)))
+     (list sbcl-puri
+           sbcl-cl-base64
+           sbcl-chunga
+           sbcl-flexi-streams
+           sbcl-cl-ppcre
+           sbcl-chipz
+           sbcl-usocket
+           sbcl-cl+ssl))
     (native-inputs
-     `(("sbcl-fiveam" ,sbcl-fiveam)))
+     (list sbcl-fiveam))
     (home-page "https://edicl.github.io/drakma/")
     (synopsis "HTTP client written in Common Lisp")
     (description
@@ -4291,7 +4047,7 @@ sockets, SSL, continuable uploads, file uploads, cookies, and more.")
 (define-public sbcl-hunchentoot
   (package
     (name "sbcl-hunchentoot")
-    (version "1.2.38")
+    (version "1.3.0")
     (source
      (origin
        (method git-fetch)
@@ -4300,22 +4056,21 @@ sockets, SSL, continuable uploads, file uploads, cookies, and more.")
              (commit (string-append "v" version))))
        (file-name (git-file-name "hunchentoot" version))
        (sha256
-        (base32 "1anpcad7w045m4rsjs1f3xdhjwx5cppq1h0vlb3q7dz81fi3i6yq"))))
+        (base32 "1z0m45lp6rv59g69l44gj3q3d2bmjlhqzpii0vgkniam21dcimy9"))))
     (build-system asdf-build-system/sbcl)
     (native-inputs
-     `(("sbcl-cl-who" ,sbcl-cl-who)
-       ("sbcl-drakma" ,sbcl-drakma)))
+     (list sbcl-cl-who sbcl-drakma))
     (inputs
-     `(("sbcl-chunga" ,sbcl-chunga)
-       ("sbcl-cl-base64" ,sbcl-cl-base64)
-       ("sbcl-cl-fad" ,sbcl-cl-fad)
-       ("sbcl-cl-ppcre" ,sbcl-cl-ppcre)
-       ("sbcl-flexi-streams" ,sbcl-flexi-streams)
-       ("sbcl-cl+ssl" ,sbcl-cl+ssl)
-       ("sbcl-md5" ,sbcl-md5)
-       ("sbcl-rfc2388" ,sbcl-rfc2388)
-       ("sbcl-trivial-backtrace" ,sbcl-trivial-backtrace)
-       ("sbcl-usocket" ,sbcl-usocket)))
+     (list sbcl-chunga
+           sbcl-cl-base64
+           sbcl-cl-fad
+           sbcl-cl-ppcre
+           sbcl-flexi-streams
+           sbcl-cl+ssl
+           sbcl-md5
+           sbcl-rfc2388
+           sbcl-trivial-backtrace
+           sbcl-usocket))
     (home-page "https://edicl.github.io/hunchentoot/")
     (synopsis "Web server written in Common Lisp")
     (description
@@ -4379,9 +4134,9 @@ PROPER-LIST, ASSOCIATION-LIST, PROPERTY-LIST and TUPLE.")
           (base32 "1wq1gs9jjd5m6iwrv06c2d7i5dvqsfjcljgbspfbc93cg5xahk4n"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("sbcl-alexandria" ,sbcl-alexandria)))
+       (list sbcl-alexandria))
       (home-page "https://github.com/m2ym/cl-annot")
-      (synopsis "Python-like Annotation Syntax for Common Lisp.")
+      (synopsis "Python-like Annotation Syntax for Common Lisp")
       (description
        "@code{cl-annot} is an general annotation library for Common Lisp.")
       (license license:llgpl))))
@@ -4452,7 +4207,7 @@ PROPER-LIST, ASSOCIATION-LIST, PROPERTY-LIST and TUPLE.")
                  (("in-package :cl-utilities)" all)
                   "in-package :cl-utilities)\n\n#+sbcl\n(require :sb-rotate-byte)")))))))
       (home-page "http://common-lisp.net/project/cl-utilities")
-      (synopsis "A collection of semi-standard utilities")
+      (synopsis "Collection of semi-standard utilities")
       (description
        "On Cliki.net <http://www.cliki.net/Common%20Lisp%20Utilities>, there
 is a collection of Common Lisp Utilities, things that everybody writes since
@@ -4518,11 +4273,9 @@ addition, removal, and random selection.")
      ;; "quri">.
      '(#:asd-systems '("quri-test"
                        "quri")))
-    (native-inputs `(("sbcl-prove" ,sbcl-prove)))
-    (inputs `(("sbcl-babel" ,sbcl-babel)
-              ("sbcl-split-sequence" ,sbcl-split-sequence)
-              ("sbcl-cl-utilities" ,sbcl-cl-utilities)
-              ("sbcl-alexandria" ,sbcl-alexandria)))
+    (native-inputs (list sbcl-prove))
+    (inputs (list sbcl-babel sbcl-split-sequence sbcl-cl-utilities
+                  sbcl-alexandria))
     (home-page "https://github.com/fukamachi/quri")
     (synopsis "Yet another URI library for Common Lisp")
     (description
@@ -4557,11 +4310,9 @@ Lisp. It is intended to be a replacement of PURI.")
       ;; by #<SYSTEM "myway">. Why?
       '(#:tests? #f))
      (native-inputs
-      `(("sbcl-prove" ,sbcl-prove)))
+      (list sbcl-prove))
      (inputs
-      `(("sbcl-cl-ppcre" ,sbcl-cl-ppcre)
-        ("sbcl-quri" ,sbcl-quri)
-        ("sbcl-map-set" ,sbcl-map-set)))
+      (list sbcl-cl-ppcre sbcl-quri sbcl-map-set))
      (home-page "https://github.com/fukamachi/myway")
      (synopsis "Sinatra-compatible URL routing library for Common Lisp")
      (description "My Way is a Sinatra-compatible URL routing library.")
@@ -4594,7 +4345,7 @@ Lisp. It is intended to be a replacement of PURI.")
       ;; required by #<SYSTEM "xsubseq">. Why?
       '(#:tests? #f))
      (native-inputs
-      `(("sbcl-prove" ,sbcl-prove)))
+      (list sbcl-prove))
      (home-page "https://github.com/fukamachi/xsubseq")
      (synopsis "Efficient way to use \"subseq\"s in Common Lisp")
      (description
@@ -4629,10 +4380,9 @@ effieiently.")
        ;; found, required by #<SYSTEM "smart-buffer">. Why?
        `(#:tests? #f))
       (native-inputs
-       `(("sbcl-prove" ,sbcl-prove)))
+       (list sbcl-prove))
       (inputs
-       `(("sbcl-xsubseq" ,sbcl-xsubseq)
-         ("sbcl-flexi-streams" ,sbcl-flexi-streams)))
+       (list sbcl-xsubseq sbcl-flexi-streams))
       (home-page "https://github.com/fukamachi/smart-buffer")
       (synopsis "Smart octets buffer")
       (description
@@ -4670,11 +4420,8 @@ depending on content size.")
        `(("sbcl-prove" ,sbcl-prove)
          ("cl-syntax" ,sbcl-cl-syntax)))
       (inputs
-       `(("sbcl-alexandria" ,sbcl-alexandria)
-         ("sbcl-proc-parse" ,sbcl-proc-parse)
-         ("sbcl-xsubseq" ,sbcl-xsubseq)
-         ("sbcl-smart-buffer" ,sbcl-smart-buffer)
-         ("sbcl-cl-utilities" ,sbcl-cl-utilities)))
+       (list sbcl-alexandria sbcl-proc-parse sbcl-xsubseq
+             sbcl-smart-buffer sbcl-cl-utilities))
       (home-page "https://github.com/fukamachi/fast-http")
       (synopsis "HTTP request/response parser for Common Lisp")
       (description
@@ -4703,10 +4450,9 @@ Lisp.")
        (sha256
         (base32 "079qa20lhanzsz1qf4iags91n0ziylbjgbcymm5a5qj7yryas4fw"))))
     (native-inputs
-     `(("sbcl-fiveam" ,sbcl-fiveam)))
+     (list sbcl-fiveam))
     (inputs
-     `(("sbcl-alexandria" ,sbcl-alexandria)
-       ("sbcl-cffi" ,sbcl-cffi)))
+     (list sbcl-alexandria sbcl-cffi))
     (build-system asdf-build-system/sbcl)
     (home-page "https://github.com/sionescu/static-vectors")
     (synopsis "Allocate SIMPLE-ARRAYs in static memory")
@@ -4751,48 +4497,6 @@ Only minimal changes required to make your CLOS objects serializable.")
 (define-public ecl-marshal
   (sbcl-package->ecl-package sbcl-marshal))
 
-(define-public sbcl-checkl
-  (let ((commit "80328800d047fef9b6e32dfe6bdc98396aee3cc9")
-        (revision "1"))
-    (package
-      (name "sbcl-checkl")
-      (version (git-version "0.0.0" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/rpav/CheckL")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32 "0bpisihx1gay44xmyr1dmhlwh00j0zzi04rp9fy35i95l2r4xdlx"))))
-      (build-system asdf-build-system/sbcl)
-      (arguments
-       ;; Error while trying to load definition for system checkl-test from
-       ;; pathname [...]/checkl-test.asd: The function CHECKL:DEFINE-TEST-OP
-       ;; is undefined.
-       '(#:asd-files '("checkl.asd")
-         #:tests? #f))
-      (native-inputs
-       `(("sbcl-fiveam" ,sbcl-fiveam)))
-      (inputs
-       `(("sbcl-marshal" ,sbcl-marshal)))
-      (home-page "https://github.com/rpav/CheckL/")
-      (synopsis "Dynamic testing for Common Lisp")
-      (description
-       "CheckL lets you write tests dynamically, it checks resulting values
-against the last run.")
-      ;; The author specifies both LLGPL and "BSD", but the "BSD" license
-      ;; isn't specified anywhere, so I don't know which kind.  LLGPL is the
-      ;; stronger of the two and so I think only listing this should suffice.
-      (license license:llgpl))))
-
-(define-public cl-checkl
-  (sbcl-package->cl-source-package sbcl-checkl))
-
-(define-public ecl-checkl
-  (sbcl-package->ecl-package sbcl-checkl))
-
 (define-public sbcl-fast-io
   (let ((commit "603f4903dd74fb221859da7058ae6ca3853fe64b")
         (revision "2"))
@@ -4816,12 +4520,9 @@ against the last run.")
       '(#:tests? #f
         #:asd-files '("fast-io.asd")))
      (native-inputs
-      `(("sbcl-fiveam" ,sbcl-fiveam)
-        ("sbcl-checkl" ,sbcl-checkl)))
+      (list sbcl-fiveam sbcl-checkl))
      (inputs
-      `(("sbcl-alexandria" ,sbcl-alexandria)
-        ("sbcl-trivial-gray-streams" ,sbcl-trivial-gray-streams)
-        ("sbcl-static-vectors" ,sbcl-static-vectors)))
+      (list sbcl-alexandria sbcl-trivial-gray-streams sbcl-static-vectors))
      (home-page "https://github.com/rpav/fast-io")
      (synopsis "Fast octet-vector/stream I/O for Common Lisp")
      (description
@@ -4857,12 +4558,9 @@ streams (though primarily the former, while wrapping the latter).")
       ;; required by #<SYSTEM "jonathan">. Why?
       `(#:tests? #f))
      (native-inputs
-      `(("sbcl-prove" ,sbcl-prove)))
+      (list sbcl-prove))
      (inputs
-      `(("sbcl-cl-syntax" ,sbcl-cl-syntax)
-        ("sbcl-fast-io" ,sbcl-fast-io)
-        ("sbcl-proc-parse" ,sbcl-proc-parse)
-        ("sbcl-cl-ppcre" ,sbcl-cl-ppcre)))
+      (list sbcl-cl-syntax sbcl-fast-io sbcl-proc-parse sbcl-cl-ppcre))
      (home-page "https://rudolph-miller.github.io/jonathan/overview.html")
      (synopsis "JSON encoder and decoder")
      (description
@@ -4898,11 +4596,9 @@ CCL.")
       ;; found, required by #<SYSTEM "http-body">. Why?
       `(#:tests? #f))
      (native-inputs
-      `(("sbcl-prove" ,sbcl-prove)))
+      (list sbcl-prove))
      (inputs
-      `(("sbcl-fast-http" ,sbcl-fast-http)
-        ("sbcl-jonathan" ,sbcl-jonathan)
-        ("sbcl-quri" ,sbcl-quri)))
+      (list sbcl-fast-http sbcl-jonathan sbcl-quri))
      (home-page "https://github.com/fukamachi/http-body")
      (synopsis "HTTP POST data parser")
      (description
@@ -4938,8 +4634,7 @@ multipart/form-data.")
       ;; tests aren't working for some reason.
       `(#:tests? #f))
      (inputs
-      `(("sbcl-fast-io" ,sbcl-fast-io)
-        ("sbcl-trivial-gray-streams" ,sbcl-trivial-gray-streams)))
+      (list sbcl-fast-io sbcl-trivial-gray-streams))
      (home-page "https://github.com/fukamachi/circular-streams")
      (synopsis "Circularly readable streams for Common Lisp")
      (description
@@ -4971,7 +4666,7 @@ reset to 0 and you're able to read it again.")
           (base32 "1avh4ygcj9xcx4m17nj0wnxxaisk26w4ljs2bibzxaln24x7pi85"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("prove" ,sbcl-prove)))
+       (list sbcl-prove))
       (inputs
        `(("circular-streams" ,sbcl-circular-streams)
          ("http-body" ,sbcl-http-body)
@@ -5022,7 +4717,7 @@ performance and simplicity in mind.")
         (base32 "0wld28xx20k0ysgg6akic5lg4vkjd0iyhv86m388xfrv8xh87wii"))))
      (build-system asdf-build-system/sbcl)
      (native-inputs
-      `(("hu.dwim.stefil" ,sbcl-hu.dwim.stefil)))
+      (list sbcl-hu.dwim.stefil))
      (home-page "https://common-lisp.net/project/local-time/")
      (synopsis "Time manipulation library for Common Lisp")
      (description
@@ -5052,11 +4747,9 @@ Long Painful History of Time\".")
         (base32 "0rzrl9is2v1aqbm0sym0qx3blnpd0bl13dkkmll6mb3983k2mkax"))))
     (build-system asdf-build-system/sbcl)
     (native-inputs
-     `(("lisp-unit" ,sbcl-lisp-unit)))
+     (list sbcl-lisp-unit))
     (inputs
-     `(("cl-interpol" ,sbcl-cl-interpol)
-       ("cl-ppcre" ,sbcl-cl-ppcre)
-       ("local-time" ,sbcl-local-time)))
+     (list sbcl-cl-interpol sbcl-cl-ppcre sbcl-local-time))
     (home-page "https://github.com/chaitanyagupta/chronicity")
     (synopsis "Natural language date and time parser for Common Lisp")
     (description
@@ -5087,9 +4780,9 @@ by Ruby's @code{Chronic}.")
           (base32 "00kcm17q5plpzdj1qwg83ldhxksilgpcdkf3m9azxcdr968xs9di"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("stefil" ,sbcl-hu.dwim.stefil)))
+       (list sbcl-hu.dwim.stefil))
       (inputs
-       `(("sbcl-cl-fad" ,sbcl-cl-fad)))
+       (list sbcl-cl-fad))
       (home-page "https://shinmera.github.io/trivial-mimes/")
       (synopsis "Tiny Common Lisp library to detect mime types in files")
       (description
@@ -5146,13 +4839,10 @@ mime-type of a file.")
                  fasl-files)
                #t)))))
       (native-inputs
-       `(("sbcl-prove" ,sbcl-prove)))
+       (list sbcl-prove))
       (inputs
-       `(("sbcl-cl-syntax" ,sbcl-cl-syntax)
-         ("sbcl-myway" ,sbcl-myway)
-         ("sbcl-lack" ,sbcl-lack)
-         ("sbcl-alexandria" ,sbcl-alexandria)
-         ("sbcl-babel" ,sbcl-babel)))
+       (list sbcl-cl-syntax sbcl-myway sbcl-lack sbcl-alexandria
+             sbcl-babel))
       (home-page "https://8arrow.org/ningle/")
       (synopsis "Super micro framework for Common Lisp")
       (description
@@ -5304,9 +4994,9 @@ theory accurate to internal-time-units-per-second.")
           (base32 "0166d9aip366pbpdk5gsi2f6xad6q61lssxgbrypa8zslwjn8736"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("stefil" ,sbcl-stefil)))
+       (list sbcl-stefil))
       (inputs
-       `(("bordeaux-threads" ,sbcl-bordeaux-threads)))
+       (list sbcl-bordeaux-threads))
       (home-page "https://github.com/7max/log4cl")
       (synopsis "Common Lisp logging framework, modeled after Log4J")
       (description
@@ -5396,11 +5086,8 @@ by either a symbol or a keyword.")
           (base32 "0r51ydj5v7afi2jrlscbhxprv13d9vzg5316g1yzwaxc1kzsdsw6"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("bordeaux-threads" ,sbcl-bordeaux-threads)
-         ("dissect" ,sbcl-dissect)
-         ("documentation-utils" ,sbcl-documentation-utils)
-         ("local-time" ,sbcl-local-time)
-         ("piping" ,sbcl-piping)))
+       (list sbcl-bordeaux-threads sbcl-dissect sbcl-documentation-utils
+             sbcl-local-time sbcl-piping))
       (home-page "https://shinmera.github.io/verbose/")
       (synopsis "Logging framework using the piping library")
       (description
@@ -5433,9 +5120,9 @@ by either a symbol or a keyword.")
           (base32
            "0d6dzbb45jh0rx90wgs6v020k2xa87mvzas3mvfzvivjvqqlpryq"))))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (inputs
-       `(("sbcl-usocket" ,sbcl-usocket)))
+       (list sbcl-usocket))
       (synopsis "Find open ports programmatically in Common Lisp")
       (description "This is a small Common Lisp library that finds an open
 port within a range.")
@@ -5447,39 +5134,6 @@ port within a range.")
 (define-public ecl-find-port
   (sbcl-package->ecl-package sbcl-find-port))
 
-(define-public sbcl-clunit
-  (let ((commit "6f6d72873f0e1207f037470105969384f8380628")
-        (revision "1"))
-    (package
-      (name "sbcl-clunit")
-      (version (git-version "0.2.3" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/tgutu/clunit")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32
-           "1idf2xnqzlhi8rbrqmzpmb3i1l6pbdzhhajkmhwbp6qjkmxa4h85"))))
-      (build-system asdf-build-system/sbcl)
-      (synopsis "CLUnit is a Common Lisp unit testing framework")
-      (description
-       "CLUnit is a Common Lisp unit testing framework.  It is designed
-to be easy to use so that you can quickly start testing.  CLUnit
-provides a rich set of features aimed at improving your unit testing
-experience.")
-      (home-page "https://tgutu.github.io/clunit/")
-      ;; MIT License
-      (license license:expat))))
-
-(define-public cl-clunit
-  (sbcl-package->cl-source-package sbcl-clunit))
-
-(define-public ecl-clunit
-  (sbcl-package->ecl-package sbcl-clunit))
-
 (define-public sbcl-py4cl
   (let ((commit "4c8a2b0814fd311f978964f825ce012290f60136")
         (revision "1"))
@@ -5499,14 +5153,14 @@ experience.")
          (modules '((guix build utils)))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("sbcl-clunit" ,sbcl-clunit)))
+       (list sbcl-clunit))
       (inputs
-       `(("sbcl-trivial-garbage" ,sbcl-trivial-garbage)))
+       (list sbcl-trivial-garbage))
       (propagated-inputs
        ;; This package doesn't do anything without python available
-       `(("python" ,python)
-         ;; For multi-dimensional array support
-         ("python-numpy" ,python-numpy)))
+       (list python
+             ;; For multi-dimensional array support
+             python-numpy))
       (arguments
        '(#:phases
          (modify-phases %standard-phases
@@ -5557,7 +5211,7 @@ the CFFI approach used by burgled-batteries, but has the same goal.")
           (base32 "0q9b07spmhg1b576cnnacvkf7zr3mab2rdydfylbn92y9mms9vyj"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("trivial-arguments" ,sbcl-trivial-arguments)))
+       (list sbcl-trivial-arguments))
       (synopsis "Scheme style syntax/macros/functions for Common Lisp")
       (description
        "Schemeish implements several useful Scheme constructs for Common Lisp.
@@ -5611,37 +5265,6 @@ high-level way.  This library provides such operators.")
 (define-public ecl-parse-declarations
   (sbcl-package->ecl-package sbcl-parse-declarations))
 
-(define-public sbcl-cl-quickcheck
-  (let ((commit "807b2792a30c883a2fbecea8e7db355b50ba662f")
-        (revision "1"))
-    (package
-      (name "sbcl-cl-quickcheck")
-      (version (git-version "0.0.4" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/mcandre/cl-quickcheck")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32
-           "165lhypq5xkcys6hvzb3jq7ywnmqvzaflda29qk2cbs3ggas4767"))))
-      (build-system asdf-build-system/sbcl)
-      (synopsis
-       "Common Lisp port of the QuickCheck unit test framework")
-      (description
-       "Common Lisp port of the QuickCheck unit test framework")
-      (home-page "https://github.com/mcandre/cl-quickcheck")
-      ;; MIT
-      (license license:expat))))
-
-(define-public cl-quickcheck
-  (sbcl-package->cl-source-package sbcl-cl-quickcheck))
-
-(define-public ecl-cl-quickcheck
-  (sbcl-package->ecl-package sbcl-cl-quickcheck))
-
 (define-public sbcl-burgled-batteries3
   (let ((commit "f65f454d13bb6c40e17e9ec62e41eb5069e09760")
         (revision "2"))
@@ -5686,9 +5309,7 @@ high-level way.  This library provides such operators.")
                   ""))
                #t)))))
       (native-inputs
-       `(("sbcl-cl-fad" ,sbcl-cl-fad)
-         ("sbcl-lift" ,sbcl-lift)
-         ("sbcl-cl-quickcheck" ,sbcl-cl-quickcheck)))
+       (list sbcl-cl-fad sbcl-lift sbcl-cl-quickcheck))
       (inputs
        `(("python" ,python)
          ("sbcl-cffi" ,sbcl-cffi)
@@ -5726,7 +5347,7 @@ CPython implementation of Python) and Common Lisp.")
            "0hd0kr91795v77akpbcyqiss9p0p7ypa9dznrllincnmgvsxlmf0"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("sbcl-lift" ,sbcl-lift)))
+       (list sbcl-lift))
       (synopsis "Macro that generalizes @code{multiple-value-bind} etc.")
       (description
        "Bind extends the idea of of let and destructing to provide a uniform
@@ -5766,7 +5387,7 @@ whole lot more into a single form.")
       (arguments
        `(#:test-asd-file "test/fare-utils-test.asd"))
       (native-inputs
-       `(("sbcl-hu.dwim.stefil" ,sbcl-hu.dwim.stefil)))
+       (list sbcl-hu.dwim.stefil))
       (synopsis "Collection of utilities and data structures")
       (description
        "fare-utils is a small collection of utilities.  It contains a lot of
@@ -5799,8 +5420,7 @@ basic everyday functions and macros.")
            "0maxs8392953fhnaa6zwnm2mdbhxjxipp4g4rvypm06ixr6pyv1c"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("close-mop" ,sbcl-closer-mop)
-         ("fare-utils" ,sbcl-fare-utils)))
+       (list sbcl-closer-mop sbcl-fare-utils))
       (home-page "https://github.com/fare/fare-mop")
       (synopsis "General purpose Common Lisp utilities using the MOP")
       (description
@@ -5834,13 +5454,10 @@ great for REPL interaction and debugging.")
           (base32 "02qx37zzk5j4xmwh77k2qa2wvnzvaj6qml5dh2q7b6b1ljvgcj4m"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("hu.dwim.stefil" ,sbcl-hu.dwim.stefil)))
+       (list sbcl-hu.dwim.stefil))
       (inputs
-       `(("alexandira" ,sbcl-alexandria)
-         ("fare-mop" ,sbcl-fare-mop)
-         ("fare-quasiquote" ,sbcl-fare-quasiquote)
-         ("fare-utils" ,sbcl-fare-utils)
-         ("trivia" ,sbcl-trivia)))
+       (list sbcl-alexandria sbcl-fare-mop sbcl-fare-quasiquote
+             sbcl-fare-utils sbcl-trivia))
       (home-page "https://github.com/fare/inferior-shell")
       (synopsis "Spawn local or remote processes and shell pipes")
       (description
@@ -5909,7 +5526,7 @@ UTF-8 has is that it doesn't depend on any other libraries.")
         (base32
          "00nbr3mffxhlq14gg9d16pa6691s4qh35inyw76v906s77khm5a2"))))
     (inputs
-     `(("split-sequence" ,sbcl-split-sequence)))
+     (list sbcl-split-sequence))
     (synopsis "IDNA string encoding and decoding routines for Common Lisp")
     (description "This Common Lisp library provides string encoding and
 decoding routines for IDNA, the International Domain Names in Applications.")
@@ -5938,9 +5555,9 @@ decoding routines for IDNA, the International Domain Names in Applications.")
         (base32
          "1hw1v1lw26rifyznpnj1csphha9jgzwpiic16ni3pvs6hcsni9rz"))))
     (inputs
-     `(("trivial-features" ,sbcl-trivial-features)))
+     (list sbcl-trivial-features))
     (native-inputs
-     `(("fiveam" ,sbcl-fiveam)))
+     (list sbcl-fiveam))
     (synopsis "Efficient endianness conversion for Common Lisp")
     (description "This Common Lisp library provides optimized byte-swapping
 primitives.  The library can change endianness of unsigned integers of length
@@ -6012,8 +5629,8 @@ and @code{kqueue(2)}), a pathname library and file-system utilities.")
       (inherit parent)
       (propagated-inputs
        ;; Need header to compile.
-       `(("libfixposix" ,libfixposix)
-         ,@(package-propagated-inputs parent))))))
+       (modify-inputs (package-propagated-inputs parent)
+         (prepend libfixposix))))))
 
 (define-public ecl-iolib
   (sbcl-package->ecl-package sbcl-iolib))
@@ -6037,7 +5654,7 @@ and @code{kqueue(2)}), a pathname library and file-system utilities.")
           (base32
            "1xyj49j9x3lc84cv3dhbf9ja34ywjk1c46dklx425fxw9mkwm83m"))))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (synopsis "IEEE 754 binary representation for floats in Common Lisp")
       (description "This is a Common Lisp library that converts
 floating point values to IEEE 754 binary representation.")
@@ -6094,9 +5711,7 @@ Closure is a reference to the web browser it was originally written for.")
            "13kif7rf3gqdycsk9zq0d7y0g9y81krkl0z87k0p2fkbjfgrph37"))))
       (build-system asdf-build-system/sbcl)
     (inputs
-     `(("closure-common" ,sbcl-closure-common)
-       ("puri" ,sbcl-puri)
-       ("trivial-gray-streams" ,sbcl-trivial-gray-streams)))
+     (list sbcl-closure-common sbcl-puri sbcl-trivial-gray-streams))
     (synopsis "Common Lisp XML parser")
     (description "CXML implements a namespace-aware, validating XML 1.0
 parser as well as the DOM Level 2 Core interfaces.  Two parser interfaces are
@@ -6110,6 +5725,43 @@ offered, one SAX-like, the other similar to StAX.")
 (define-public ecl-cxml
   (sbcl-package->ecl-package sbcl-cxml))
 
+(define-public sbcl-cxml-rng
+  (let ((commit "bdcfeb92798694b2935a8321e641d8803e814b7b")
+        (revision "1"))
+    (package
+      (name "sbcl-cxml-rng")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "http://www.lichteblau.com/git/cxml-rng.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "1rld038hmvm0whaffkszd5ks7mg44z1vfbgddal434df8sgspzql"))))
+      (build-system asdf-build-system/sbcl)
+    (inputs
+     (list sbcl-cxml sbcl-cl-ppcre sbcl-cl-yacc sbcl-parse-number
+           sbcl-cl-base64))
+    (synopsis "Relax NG for Closure XML (CXML)")
+    (description "An implementation of Relax NG schema validation written in
+Common Lisp, including support for compact syntax, DTD Compatibility, and the
+XSD type library.")
+    (home-page "http://www.lichteblau.com/cxml-rng/")
+    (license license:bsd-2))))
+
+(define-public cl-cxml-rng
+  (sbcl-package->cl-source-package sbcl-cxml-rng))
+
+;; FIXME: Fails on ECL with
+;; In function STRUCTURE-SET, the value of the first argument is
+;;   #<empty  0x7fffeb0fd440>
+;; which is not of the expected type %TYPED-PATTERN.
+;; (define-public ecl-cxml-rng
+;;   (sbcl-package->ecl-package sbcl-cxml-rng))
+
 (define-public sbcl-cl-reexport
   (let ((commit "312f3661bbe187b5f28536cd7ec2956e91366c3b")
         (revision "1"))
@@ -6169,7 +5821,7 @@ cookie headers, cookie creation, cookie jar creation and more.")
          ("cl-ppcre" ,sbcl-cl-ppcre)
          ("local-time" ,sbcl-local-time)))
       (native-inputs
-       `(("prove" ,sbcl-prove)))
+       (list sbcl-prove))
       (arguments
        ;; TODO: Tests fail because cl-cookie depends on cl-cookie-test.
        `(#:tests? #f))
@@ -6275,7 +5927,7 @@ neat APIs and connection-pooling.  It is meant to supersede Drakma.")
       (inputs
        `(("alexandria" ,sbcl-alexandria)))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (arguments
        `(#:test-asd-file "lisp-namespace.test.asd"
         ;; XXX: Component LISP-NAMESPACE-ASD::LISP-NAMESPACE.TEST not found
@@ -6343,7 +5995,7 @@ and it exports symbols from implementation-specific packages.")
           (base32
            "1i305n0wfmpac63ni4i3vixnnkl8daw5ncxy0k3dv92krgx6qzhp"))))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (synopsis "Common Lisp environment introspection portability layer")
       (description "This library is a small interface to portable but
 nonstandard introspection of Common Lisp environments.  It is intended to
@@ -6394,7 +6046,7 @@ can and/or provide reasonable defaults.")
          ("introspect-environment" ,sbcl-introspect-environment)
          ("trivia.trivial" ,sbcl-trivia.trivial)))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (arguments
        `(#:test-asd-file "type-i.test.asd"))
       (synopsis "Type inference utility on unary predicates for Common Lisp")
@@ -6435,7 +6087,7 @@ the return type of a function.")
        `(("alexandria" ,sbcl-alexandria)
          ("closer-mop" ,sbcl-closer-mop)))
       (native-inputs
-       `(("eos" ,sbcl-eos)))
+       (list sbcl-eos))
       (arguments
        ;; XXX: Circular dependencies: tests depend on optima.ppcre which depends on optima.
        `(#:tests? #f
@@ -6649,7 +6301,7 @@ various string metrics in Common Lisp:
        ("cl-ppcre-unicode" ,sbcl-cl-ppcre-unicode)
        ("cl-change-case" ,sbcl-cl-change-case)))
     (native-inputs
-     `(("prove" ,sbcl-prove)))
+     (list sbcl-prove))
     (arguments
      `(#:asd-systems '("str")
        #:test-asd-file "str.test.asd"))
@@ -6687,8 +6339,7 @@ arrows.")
           (base32
            "0w4rqvrgdgk3fwfq3kx4r7wwdr2bv3b6n3bdqwsiriw9psqzpz2s"))))
       (inputs
-       `(("cxml" ,sbcl-cxml)
-         ("cl-ppcre" ,sbcl-cl-ppcre)))
+       (list sbcl-cxml sbcl-cl-ppcre))
       (synopsis "Concise, regexp-like pattern matching on streaming XML for Common Lisp")
       (description "CXML does an excellent job at parsing XML elements, but what
 do you do when you have a XML file that's larger than you want to fit in
@@ -6726,14 +6377,14 @@ power of CXML is available when necessary.")
            "0fw2q866yddbf23nk9pxphm9gsasx35vjyss82xzvndnjmzlqfl5"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("trivial-garbage" ,sbcl-trivial-garbage)
-         ("babel" ,sbcl-babel)
-         ("iolib" ,sbcl-iolib)
-         ("ieee-floats" ,sbcl-ieee-floats)
-         ("flexi-streams" ,sbcl-flexi-streams)
-         ("cl-xmlspam" ,sbcl-cl-xmlspam)
-         ("ironclad" ,sbcl-ironclad)))
+       (list sbcl-alexandria
+             sbcl-trivial-garbage
+             sbcl-babel
+             sbcl-iolib
+             sbcl-ieee-floats
+             sbcl-flexi-streams
+             sbcl-cl-xmlspam
+             sbcl-ironclad))
       (synopsis "D-Bus client library for Common Lisp")
       (description "This is a Common Lisp library that publishes D-Bus
 objects as well as send and notify other objects connected to a bus.")
@@ -6764,12 +6415,10 @@ objects as well as send and notify other objects connected to a bus.")
           (base32
            "0bg3l0a28lw5gqqjp6p6b5nhwqk46sgkb7184w5qbfngw1hk8x9y"))))
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("let-plus" ,sbcl-let-plus)
-         ("trivial-garbage" ,sbcl-trivial-garbage)
-         ("closer-mop" ,sbcl-closer-mop)))
+       (list sbcl-alexandria sbcl-let-plus sbcl-trivial-garbage
+             sbcl-closer-mop))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (synopsis "Hooks extension point mechanism (as in Emacs) for Common Lisp")
       (description "A hook, in the present context, is a certain kind of
 extension point in a program that allows interleaving the execution of
@@ -6865,8 +6514,7 @@ extension-points via the concept of hooks.")
           (base32
            "1fh8r7kf8s3hvqdg6b71b8p7w3v2kkga9bw8j3qqdxhzr6anpm0b"))))
       (inputs
-       `(("bordeaux-threads" ,sbcl-bordeaux-threads)
-         ("usocket" ,sbcl-usocket)))
+       (list sbcl-bordeaux-threads sbcl-usocket))
       (synopsis "Common Lisp abstraction layer over platform dependent functionality")
       (description "@code{s-sysdeps} is an abstraction layer over platform
 dependent functionality.  This simple package is used as a building block in a
@@ -6907,10 +6555,9 @@ number of other open source projects.
           (base32
            "050h6hwv8f16b5v6fzba8zmih92hgaaq27i2x9wv1iib41gbia3r"))))
       (inputs
-       `(("s-sysdeps" ,sbcl-s-sysdeps)
-         ("s-xml" ,sbcl-s-xml)))
+       (list sbcl-s-sysdeps sbcl-s-xml))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (synopsis "Implementation of object prevalence for Common Lisp")
       (description "This Common Lisp library implements object prevalence (see
 @url{https://en.wikipedia.org/wiki/System_prevalence}).  It allows
@@ -7017,7 +6664,7 @@ discontiguous ranges of time.")
            "0xpa86pdzlnf4v5g64j3ifaplx71sx2ha8b7vvakswi652679ma0"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("lift" ,sbcl-lift)))
+       (list sbcl-lift))
       (synopsis "Core of the metatilities Common Lisp library")
       (description
        "Metatilities-base is the core of the metatilities Common Lisp library
@@ -7049,7 +6696,7 @@ which implements a set of utilities.")
            "18s6jfq11n8nv9k4biz32pm1s7y9zl054ry1gmdbcf39nisy377y"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("lift" ,sbcl-lift)))
+       (list sbcl-lift))
       (inputs
        `(("metatilities-base" ,sbcl-metatilities-base)))
       (arguments
@@ -7083,44 +6730,6 @@ decisions becomes significantly easier.")
 (define-public ecl-cl-containers
   (sbcl-package->ecl-package sbcl-cl-containers))
 
-(define-public sbcl-xlunit
-  (let ((commit "3805d34b1d8dc77f7e0ee527a2490194292dd0fc")
-        (revision "1"))
-    (package
-      (name "sbcl-xlunit")
-      (version (git-version "0.6.3" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "http://git.kpe.io/xlunit.git")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32
-           "0argfmp9nghs4sihyj3f8ch9qfib2b7ll07v5m9ziajgzsfl5xw3"))))
-      (build-system asdf-build-system/sbcl)
-      (arguments
-       '(#:phases
-         (modify-phases %standard-phases
-           (add-after 'unpack 'fix-tests
-             (lambda _
-               (substitute* "xlunit.asd"
-                 ((" :force t") ""))
-               #t)))))
-      (synopsis "Unit testing package for Common Lisp")
-      (description
-       "The XLUnit package is a toolkit for building test suites.  It is based
-on the XPTest package by Craig Brozensky and the JUnit package by Kent Beck.")
-      (home-page "http://quickdocs.org/xlunit/")
-      (license license:bsd-3))))
-
-(define-public cl-xlunit
-  (sbcl-package->cl-source-package sbcl-xlunit))
-
-(define-public ecl-xlunit
-  (sbcl-package->ecl-package sbcl-xlunit))
-
 (define-public sbcl-cambl
   (let ((commit "7016d1a98215f82605d1c158e7a16504ca1f4636")
         (revision "1"))
@@ -7138,7 +6747,7 @@ on the XPTest package by Craig Brozensky and the JUnit package by Kent Beck.")
           (base32 "103mry04j2k9vznsxm7wcvccgxkil92cdrv52miwcmxl8daa4jiz"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("xlunit" ,sbcl-xlunit)))
+       (list sbcl-xlunit))
       (inputs
        `(("alexandria" ,sbcl-alexandria)
          ("cl-containers" ,sbcl-cl-containers)
@@ -7224,8 +6833,7 @@ system.")
           (base32 "18ig7rvxcra69437g0i8sxyv7c5dg26jqnx1rc2f9pxmihdprgk8"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("fiveam" ,sbcl-fiveam)))
+       (list sbcl-alexandria sbcl-fiveam))
       (synopsis "Binary search tree for Common Lisp")
       (description
        "BST is a Common Lisp library for working with binary search trees that
@@ -7254,9 +6862,9 @@ can contain any kind of values.")
         (base32 "1hffh98bv4w5yrchagzwqrc43d2p473pvw7ka4kyyvhrr52dk2f8"))))
     (build-system asdf-build-system/sbcl)
     (native-inputs
-     `(("fiveam" ,sbcl-fiveam)))
+     (list sbcl-fiveam))
     (inputs
-     `(("trivial-gray-streams" ,sbcl-trivial-gray-streams)))
+     (list sbcl-trivial-gray-streams))
     (synopsis "In-memory octet streams for Common Lisp")
     (description
      "CL-octet-streams is a library implementing in-memory octet
@@ -7288,7 +6896,7 @@ cl-plumbing libraries.")
           (base32 "09lp7li35h4jkls0448fj1sh6pjslr1w7ranbc4szjr8g0c2bdry"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (inputs
        `(("cffi" ,sbcl-cffi)
          ("cl-octet-streams" ,sbcl-cl-octet-streams)
@@ -7301,7 +6909,7 @@ cl-plumbing libraries.")
              (lambda* (#:key inputs #:allow-other-keys)
                (substitute* "src/lzlib.lisp"
                  (("liblz\\.so")
-                  (string-append (assoc-ref inputs "lzlib") "/lib/liblz.so")))
+                  (search-input-file inputs "/lib/liblz.so")))
                #t)))))
       (synopsis "Common Lisp library for lzip (de)compression")
       (description
@@ -7334,9 +6942,9 @@ compression/decompression using bindings to the lzlib C library.")
            "0b1cf6c12qx5cy1fw2z42jgh566rp3l8nv5qf0qqc569s7bgmrh4"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (inputs
-       `(("bordeaux-threads" ,sbcl-bordeaux-threads)))
+       (list sbcl-bordeaux-threads))
       (synopsis "Portable channel-based concurrency for Common Lisp")
       (description "Common Lisp library for channel-based concurrency.  In
 a nutshell, you create various threads sequentially executing tasks you need
@@ -7369,7 +6977,7 @@ threads.")
            "194srkg8nrym19c6i7zbnkzshc1qhqa82m53qnkirz9fw928bqxr"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("rt" ,sbcl-rt)))
+       (list sbcl-rt))
       (synopsis "Common Lisp library to serialize data")
       (description
        "CL-STORE is a portable serialization package which should give you the
@@ -7400,10 +7008,9 @@ ability to store all Common Lisp data types into streams.")
           (base32 "0r0bgb46q4gy72l78s7djkxq8ibb4bb3yh9brsry5lih7br8lhi0"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("introspect-environment" ,sbcl-introspect-environment)))
+       (list sbcl-alexandria sbcl-introspect-environment))
       (home-page "https://github.com/markcox80/specialization-store")
       (synopsis "Different type of generic function for Common Lisp")
       (description
@@ -7448,7 +7055,7 @@ function.")
          ("glib" ,glib)
          ("gobject-introspection" ,gobject-introspection)))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (arguments
        '(#:phases
          (modify-phases %standard-phases
@@ -7456,11 +7063,10 @@ function.")
              (lambda* (#:key inputs #:allow-other-keys)
                (substitute* "src/init.lisp"
                  (("libgobject-2\\.0\\.so")
-                  (string-append (assoc-ref inputs "glib") "/lib/libgobject-2.0.so"))
+                  (search-input-file inputs "/lib/libgobject-2.0.so"))
                  (("libgirepository-1\\.0\\.so")
-                  (string-append (assoc-ref inputs "gobject-introspection")
-                                 "/lib/libgirepository-1.0.so")))
-               #t)))))
+                  (search-input-file inputs
+                                     "/lib/libgirepository-1.0.so"))))))))
       (synopsis "Common Lisp bindings to GObject Introspection")
       (description
        "This library is a bridge between Common Lisp and GObject
@@ -7496,7 +7102,7 @@ of C+GObject libraries without the need of writing dedicated bindings.")
        `(#:asd-files '("cl-slug-test.asd" "cl-slug.asd")
          #:asd-systems '("cl-slug-test" "cl-slug")))
       (native-inputs
-       `(("prove" ,sbcl-prove)))
+       (list sbcl-prove))
       (inputs
        `(("ppcre" ,sbcl-cl-ppcre)))
       (home-page "https://github.com/EuAndreh/cl-slug")
@@ -7626,7 +7232,7 @@ special variables, especially in the presence of threads.")
            "17pp86c9zs4y7i1sh7q9gbfw9iqv6655k7fz8qbj9ly1ypgxp4qs"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (synopsis "Size of a file in bytes in Common Lisp")
       (description
        "The canonical way to determine the size of a file in bytes, using Common Lisp,
@@ -7664,7 +7270,7 @@ size of a file in bytes, using system calls when possible.")
            "191hnn4b5j4i3crydmlzbm231kj0h7l8zj6mzj69r1npbzkas4bd"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (synopsis "Portable macroexpand-all for Common Lisp")
       (description
        "This library provides a macroexpand-all function that calls the
@@ -7732,6 +7338,47 @@ supplement, not a competitor, to Alexandria.")
 (define-public ecl-serapeum
   (sbcl-package->ecl-package sbcl-serapeum))
 
+(define-public sbcl-rutils
+  (let ((commit "db3c3f4ae897025b5f0cd81042ca147da60ca0c5")
+        (revision "0"))
+    (package
+      (name "sbcl-rutils")
+      (version (git-version "5.2.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/vseloved/rutils")
+               (commit commit)))
+         (file-name (git-file-name "rutils" version))
+         (sha256
+          (base32 "1d2whscknh1zga2vdqvfqri8wx0gnml3sfqz62igq0ppap6q07y3"))))
+      (build-system asdf-build-system/sbcl)
+      (arguments
+       `(#:asd-systems '("rutils" "rutilsx")
+         ;; Tests disabled because of a circular dependency with should-test.
+         #:tests? #f
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'fix-build
+             (lambda _
+               ;; File faild to load, and we don't use it as tests are
+               ;; disabled, so let's delete it.
+               (delete-file "rutilsx-test.asd"))))))
+      (inputs
+       `(("closer-mop" ,sbcl-closer-mop)
+         ("named-readtables" ,sbcl-named-readtables)))
+      (home-page "https://github.com/vseloved/rutils")
+      (synopsis "Radical Utilities for Common Lisp")
+      (description "RUTILS is a syntactic utilities package for Common Lisp.")
+      (license license:bsd-3))))
+
+(define-public cl-rutils
+  (sbcl-package->cl-source-package sbcl-rutils))
+
+(define-public ecl-rutils
+  (sbcl-package->ecl-package sbcl-rutils))
+
 (define-public sbcl-arrows
   (let ((commit "df7cf0067e0132d9697ac8b1a4f1b9c88d4f5382")
         (revision "0"))
@@ -7750,7 +7397,7 @@ supplement, not a competitor, to Alexandria.")
            "042k9vkssrqx9nhp14wdzm942zgdxvp35mba0p2syz98i75im2yy"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("hu.dwim.stefil" ,sbcl-hu.dwim.stefil)))
+       (list sbcl-hu.dwim.stefil))
       (synopsis "Clojure-like arrow macros for Common Lisp")
       (description
        "This library implements the @code{->} and @code{->>} macros from
@@ -7781,9 +7428,9 @@ Clojure, as well as several expansions on the idea.")
           (base32 "0gvbpyff4siifp3cp86cpr9ksmakn66fx21f3h0hpn647zl07nj7"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (inputs
-       `(("chanl" ,sbcl-chanl)))
+       (list sbcl-chanl))
       (synopsis "Common Lisp library to evaluate some forms in parallel")
       (description "This is a simple Common Lisp library to evaluate some
 forms in parallel.")
@@ -7810,7 +7457,7 @@ forms in parallel.")
          "163hb07p2nxz126rpq3cj5dyala24n0by5i5786n2qcr1w0bak4i"))))
     (build-system asdf-build-system/sbcl)
     (native-inputs
-     `(("xlunit" ,sbcl-xlunit)))
+     (list sbcl-xlunit))
     (arguments
      `(#:test-asd-file "cl-heap-tests.asd"))
     (synopsis "Heap and priority queue data structures for Common Lisp")
@@ -7845,8 +7492,7 @@ binary heap and a Fibonacci heap) as well as an efficient priority queue.")
            "0rv9bl8xrad5wfcg5zs1dazvnpmvqz6297lbn8bywsrcfnlf7h98"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("named-readtables" ,sbcl-named-readtables)))
+       (list sbcl-alexandria sbcl-named-readtables))
       (synopsis "Reader macros for partial application and composition")
       (description
        "This Common Lisp library provides reader macros for concise expression
@@ -7876,8 +7522,7 @@ of function partial application and composition.")
          "0479rbjgbj80jpk5bby18inlv1kfp771a82rlcq5psrz65qqa9bj"))))
     (build-system asdf-build-system/sbcl)
     (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("trivial-gray-streams" ,sbcl-trivial-gray-streams)))
+     (list sbcl-alexandria sbcl-trivial-gray-streams))
     (synopsis "Common Lisp JSON parser/encoder")
     (description
      "YASON is a Common Lisp library for encoding and decoding data in the
@@ -7891,49 +7536,6 @@ JSON interchange format.")
 (define-public ecl-yason
   (sbcl-package->ecl-package sbcl-yason))
 
-(define-public sbcl-stefil
-  (let ((commit "0398548ec95dceb50fc2c2c03e5fb0ce49b86c7a")
-        (revision "0"))
-    (package
-      (name "sbcl-stefil")
-      (version (git-version "0.1" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://gitlab.common-lisp.net/stefil/stefil.git")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32
-           "0bqz64q2szzhf91zyqyssmvrz7da6442rs01808pf3wrdq28bclh"))))
-      (build-system asdf-build-system/sbcl)
-      (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("iterate" ,sbcl-iterate)
-         ("metabang-bind" ,sbcl-metabang-bind)
-         ("swank" ,sbcl-slime-swank)))
-      (arguments
-       '(#:phases
-         (modify-phases %standard-phases
-           (add-after 'unpack 'drop-unnecessary-dependency
-             (lambda _
-               (substitute* "package.lisp"
-                 ((":stefil-system") ""))
-               #t)))))
-      (home-page "https://common-lisp.net/project/stefil/index-old.shtml")
-      (synopsis "Simple test framework")
-      (description
-       "Stefil is a simple test framework for Common Lisp, with a focus on
-interactive development.")
-      (license license:public-domain))))
-
-(define-public cl-stefil
-  (sbcl-package->cl-source-package sbcl-stefil))
-
-(define-public ecl-stefil
-  (sbcl-package->ecl-package sbcl-stefil))
-
 (define-public sbcl-graph
   (let ((commit "78bf9ec930d8eae4f0861b5be76765fb1e45e24f")
         (revision "0"))
@@ -7953,7 +7555,7 @@ interactive development.")
            "1qpij4xh8bqwc2myahpilcbh916v7vg0acz2fij14d3y0jm02h0g"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("stefil" ,sbcl-stefil)))
+       (list sbcl-stefil))
       (inputs
        `(("alexandria" ,sbcl-alexandria)
          ("cl-heap" ,sbcl-cl-heap)
@@ -8031,7 +7633,7 @@ results.")
            "098qhkqskmmrh4wix34mawf7p5c87yql28r51r75yjxj577k5idq"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("trivial-indent" ,sbcl-trivial-indent)))
+       (list sbcl-trivial-indent))
       (synopsis "Few simple tools to document Common Lisp libraries")
       (description
        "This is a small library to help you with managing the Common Lisp
@@ -8063,7 +7665,7 @@ docstrings for your library.")
            "0pn45c9rbxlnhn5nvhqz6kyv0nlirwxpg4j27niwdq80yxzsn51f"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("documentation-utils" ,sbcl-documentation-utils)))
+       (list sbcl-documentation-utils))
       (home-page "https://github.com/sirherrbatka/documentation-utils-extensions")
       (synopsis "Set of extensions for documentation-utils")
       (description
@@ -8103,7 +7705,7 @@ for more information.")
            "041iznc9mpfyrl0sv5893ys9pbb2pvbn9g3clarqi7gsfj483jln"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("documentation-utils" ,sbcl-documentation-utils)))
+       (list sbcl-documentation-utils))
       (synopsis "Utilities to destructure Common Lisp lambda forms")
       (description
        "Often times we need to destructure a form definition in a Common Lisp
@@ -8117,41 +7719,6 @@ macro.  This library provides a set of simple utilities to help with that.")
 (define-public ecl-form-fiddle
   (sbcl-package->ecl-package sbcl-form-fiddle))
 
-(define-public sbcl-parachute
-  (let ((commit "ca04dd8e43010a6dfffa26dbe1d62af86008d666")
-        (revision "0"))
-    (package
-      (name "sbcl-parachute")
-      (version (git-version "1.1.1" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri
-          (git-reference
-           (url "https://github.com/Shinmera/parachute")
-           (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32
-           "1mvsm3r0r6a2bg75nw0q7n9vlby3ch45qjl7hnb5k1z2n5x5lh60"))))
-      (build-system asdf-build-system/sbcl)
-      (inputs
-       `(("documentation-utils" ,sbcl-documentation-utils)
-         ("form-fiddle" ,sbcl-form-fiddle)))
-      (synopsis "Extensible and cross-compatible testing framework for Common Lisp")
-      (description
-       "Parachute is a simple-to-use and extensible testing framework.
-In Parachute, things are organised as a bunch of named tests within a package.
-Each test can contain a bunch of test forms that make up its body.")
-      (home-page "https://shinmera.github.io/parachute/")
-      (license license:zlib))))
-
-(define-public cl-parachute
-  (sbcl-package->cl-source-package sbcl-parachute))
-
-(define-public ecl-parachute
-  (sbcl-package->ecl-package sbcl-parachute))
-
 (define-public sbcl-array-utils
   (let ((commit "f90eb9070d0b2205af51126a35033574725e5c56")
         (revision "0"))
@@ -8171,9 +7738,9 @@ Each test can contain a bunch of test forms that make up its body.")
            "0zhwfbpr53vs1ii4sx75dz2k9yhh1xpwdqqpg8nmfndxkmhpbi3x"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("parachute" ,sbcl-parachute)))
+       (list sbcl-parachute))
       (inputs
-       `(("documentation-utils" ,sbcl-documentation-utils)))
+       (list sbcl-documentation-utils))
       (synopsis "Tiny collection of array and vector utilities for Common Lisp")
       (description
        "A miniature toolkit that contains some useful shifting/popping/pushing
@@ -8206,8 +7773,7 @@ functions for arrays and vectors.  Originally from Plump.")
            "1w4wz7f6dc2ckdq9wq9r5014bg2nxjifj9yz1zzn41r8h1h5xfcd"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("array-utils" ,sbcl-array-utils)
-         ("documentation-utils" ,sbcl-documentation-utils)))
+       (list sbcl-array-utils sbcl-documentation-utils))
       (synopsis "Lenient XML / XHTML / HTML parser for Common Lisp")
       (description
        "Plump is a parser for HTML/XML-like documents, focusing on being
@@ -8258,7 +7824,7 @@ your own classes.")
          ("trivial-garbage" ,sbcl-trivial-garbage)
          ("trivial-utf-8" ,sbcl-trivial-utf-8)))
       (native-inputs
-       `(("lisp-unit" ,sbcl-lisp-unit)))
+       (list sbcl-lisp-unit))
       (arguments
        '(#:asd-systems '("antik-base"
                          "foreign-array")
@@ -8319,7 +7885,7 @@ computer known.")
            "0z5nypfk26hxihb08p085644afawicrgb4xvadh3lmrn46qbjfn4"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("lisp-unit" ,sbcl-lisp-unit)))
+       (list sbcl-lisp-unit))
       (inputs
        `(("alexandria" ,sbcl-alexandria)
          ("antik-base" ,sbcl-antik-base)
@@ -8405,10 +7971,9 @@ intending to program in Lisp.")
            "1kr00zf62m7la7rxa2m5w49r9cyzamc106hvjcc8ffmi7a4jw490"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("cl-unicode" ,sbcl-cl-unicode)
-         ("named-readtables" ,sbcl-named-readtables)))
+       (list sbcl-cl-unicode sbcl-named-readtables))
       (native-inputs
-       `(("flexi-streams" ,sbcl-flexi-streams)))
+       (list sbcl-flexi-streams))
       (synopsis "String interpolation for Common Lisp")
       (description
        "CL-INTERPOL is a library for Common Lisp which modifies the
@@ -8467,44 +8032,6 @@ and camel-case rules.")
 (define-public ecl-symbol-munger
   (sbcl-package->ecl-package sbcl-symbol-munger))
 
-(define-public sbcl-lisp-unit2
-  ;; There is a cyclical dependency between symbol-munger and lisp-unit2.
-  ;; See https://github.com/AccelerationNet/symbol-munger/issues/4
-  (let ((commit "fb9721524d1e4e73abb223ee036d74ce14a5505c")
-        (revision "1"))
-    (package
-      (name "sbcl-lisp-unit2")
-      (version (git-version "0.2.0" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/AccelerationNet/lisp-unit2")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32
-           "1rsqy8y0jqll6xn9a593848f5wvd5ribv4csry1ly0hmdhfnqzlp"))))
-      (build-system asdf-build-system/sbcl)
-      (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("cl-interpol" ,sbcl-cl-interpol)
-         ("iterate" ,sbcl-iterate)
-         ("symbol-munger" ,sbcl-symbol-munger)))
-      (synopsis "Test Framework for Common Lisp")
-      (description
-       "LISP-UNIT2 is a Common Lisp library that supports unit testing in the
-style of JUnit for Java.  It is a new version of the lisp-unit library written
-by Chris Riesbeck.")
-      (home-page "https://github.com/AccelerationNet/lisp-unit2")
-      (license license:expat))))
-
-(define-public cl-lisp-unit2
-  (sbcl-package->cl-source-package sbcl-lisp-unit2))
-
-(define-public ecl-lisp-unit2
-  (sbcl-package->ecl-package sbcl-lisp-unit2))
-
 (define-public sbcl-cl-csv
   (let ((commit "68ecb5d816545677513d7f6308d9e5e8d2265651")
         (revision "2"))
@@ -8530,7 +8057,7 @@ by Chris Riesbeck.")
          ("cl-interpol" ,sbcl-cl-interpol)
          ("iterate" ,sbcl-iterate)))
       (native-inputs
-       `(("lisp-unit2" ,sbcl-lisp-unit2)))
+       (list sbcl-lisp-unit2))
       (synopsis "Common lisp library for comma-separated values")
       (description
        "This is a Common Lisp library providing functions to read/write CSV
@@ -8562,9 +8089,9 @@ from/to strings, streams and files.")
            "0vww1x3yilb3bjwg6k184vaj4vxyxw4vralhnlm6lk4xac67kc9z"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("trivial-features" ,sbcl-trivial-features)))
+       (list sbcl-trivial-features))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (synopsis "Common Lisp library for running external programs")
       (description
        "EXTERNAL-PROGRAM enables running programs outside the Lisp
@@ -8581,58 +8108,58 @@ sacrificing much in the way of power.")
   (sbcl-package->ecl-package sbcl-external-program))
 
 (define-public sbcl-cl-ana
-  (let ((commit "fa7cee4c50aa1c859652813049ba0da7c18a0df9")
-        (revision "1"))
+  (let ((commit "848185eed1ed65bab3a124870c122f761ce0d87e")
+        (revision "2"))
     (package
-     (name "sbcl-cl-ana")
-     (version (git-version "0.0.0" revision commit))
-     (source
-      (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/ghollisjr/cl-ana")
-             (commit commit)))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "0mr47l57m276dbpap7irr4fcnk5fgknhf6mgv4043s8h73amk5qh"))))
-     (build-system asdf-build-system/sbcl)
-     (native-inputs
-      `(("cl-fad" ,sbcl-cl-fad)))
-     (inputs
-      `(("alexandria" ,sbcl-alexandria)
-        ("antik" ,sbcl-antik)
-        ("cffi" ,sbcl-cffi)
-        ("cl-csv" ,sbcl-cl-csv)
-        ("closer-mop" ,sbcl-closer-mop)
-        ("external-program" ,sbcl-external-program)
-        ("gsl" ,gsl)
-        ("gsll" ,sbcl-gsll)
-        ("hdf5" ,hdf5-parallel-openmpi)
-        ("iterate" ,sbcl-iterate)
-        ("libffi" ,libffi)
-        ("split-sequence" ,sbcl-split-sequence)))
-     (arguments
-      `(#:phases
-        (modify-phases %standard-phases
-          (add-after 'unpack 'fix-paths
-            (lambda* (#:key inputs #:allow-other-keys)
-              (substitute* "hdf-cffi/hdf-cffi.lisp"
-                (("/usr/lib/i386-linux-gnu/hdf5/serial/libhdf5.so")
-                 (string-append (assoc-ref inputs "hdf5")
-                                "/lib/libhdf5.so")))
-              (substitute* "gsl-cffi/gsl-cffi.lisp"
-                (("define-foreign-library gsl-cffi" all)
-                 (string-append all " (:unix "
-                                (assoc-ref inputs "gsl")
-                                "/lib/libgsl.so)")))
-              #t)))))
-     (synopsis "Common Lisp data analysis library")
-     (description
-      "CL-ANA is a data analysis library in Common Lisp providing tabular and
+      (name "sbcl-cl-ana")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/ghollisjr/cl-ana")
+               (commit commit)))
+         (file-name (git-file-name "cl-ana" version))
+         (sha256
+          (base32 "026agqsxq3pg2k9jmy2wysil2z0yn5rykzzhr8rqxsspdwz51z1y"))))
+      (build-system asdf-build-system/sbcl)
+      (native-inputs
+       (list openmpi ;; for hdf-cffi
+             pkg-config
+             sbcl-cl-fad))
+      (inputs
+       (list gsl
+             hdf5-parallel-openmpi
+             libffi
+             sbcl-antik
+             sbcl-cffi
+             sbcl-cl-csv
+             sbcl-closer-mop
+             sbcl-external-program
+             sbcl-gsll
+             sbcl-iterate
+             sbcl-alexandria
+             sbcl-split-sequence))
+      (propagated-inputs
+       (list gnuplot)) ;; for gnuplot-interface
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'fix-paths
+             (lambda* (#:key inputs #:allow-other-keys)
+               (substitute* "hdf-cffi/src/library.lisp"
+                 (("libhdf5.so")
+                  (search-input-file inputs "/lib/libhdf5.so")))
+               (substitute* "gsl-cffi/gsl-cffi.lisp"
+                 (("libgsl.so")
+                  (search-input-file inputs "/lib/libgsl.so"))))))))
+      (synopsis "Common Lisp data analysis library")
+      (description
+       "CL-ANA is a data analysis library in Common Lisp providing tabular and
 binned data analysis along with nonlinear least squares fitting and
 visualization.")
-     (home-page "https://github.com/ghollisjr/cl-ana")
-     (license license:gpl3))))
+      (home-page "https://github.com/ghollisjr/cl-ana")
+      (license license:gpl3))))
 
 (define-public cl-ana
   (sbcl-package->cl-source-package sbcl-cl-ana))
@@ -8654,8 +8181,7 @@ visualization.")
                   "0pvsc9fmybx7rxd0kmzq4shi6hszdpwdc1sfy7jwyfxf8n3hnv4p"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("cl-fad" ,sbcl-cl-fad)
-         ("trivial-gray-streams" ,sbcl-trivial-gray-streams)))
+       (list sbcl-cl-fad sbcl-trivial-gray-streams))
       (synopsis "Common Lisp library for tar and cpio archives")
       (description
        "This is a Common Lisp library to read and write disk-based file
@@ -8753,9 +8279,7 @@ for Common Lisp.")
                      #t))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("misc-extensions" ,sbcl-misc-extensions)
-         ("mt19937" ,sbcl-mt19937)
-         ("named-readtables" ,sbcl-named-readtables)))
+       (list sbcl-misc-extensions sbcl-mt19937 sbcl-named-readtables))
       (synopsis "Functional set-theoretic collections library")
       (description
        "FSet is a functional set-theoretic collections library for Common Lisp.
@@ -8794,10 +8318,9 @@ may contain sets, maps may be keyed by sets, etc.")
            "1zf8zvb0i6jm3hhfks4w74hibm6avgc6f9s1qwgjrn2bcik8lrvz"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("closer-mop" ,sbcl-closer-mop)))
+       (list sbcl-alexandria sbcl-closer-mop))
       (native-inputs
-       `(("rt" ,sbcl-rt)))
+       (list sbcl-rt))
       (synopsis "Delimited continuations for Common Lisp")
       (description
        "This is a library that implements delimited continuations by
@@ -8832,7 +8355,7 @@ transforming Common Lisp code to continuation passing style.")
        `(("alexandria" ,sbcl-alexandria)
          ("cl-cont" ,sbcl-cl-cont)))
       (native-inputs
-       `(("prove" ,sbcl-prove)))
+       (list sbcl-prove))
       (arguments
        `(;; TODO: Fix the tests. They fail with:
          ;; "Component CL-COROUTINE-ASD::CL-COROUTINE-TEST not found"
@@ -8949,9 +8472,7 @@ has a small codebase that's easy to understand and use.")
              (lambda* (#:key inputs #:allow-other-keys)
                (substitute* "lib.lisp"
                  (("/usr/lib/libuv.so")
-                  (string-append (assoc-ref inputs "libuv")
-                                 "/lib/libuv.so")))
-               #t))
+                  (search-input-file inputs "/lib/libuv.so")))))
            (add-after 'fix-paths 'fix-system-definition
              (lambda _
                (substitute* "cl-libuv.asd"
@@ -9009,12 +8530,9 @@ has a small codebase that's easy to understand and use.")
              (lambda* (#:key inputs #:allow-other-keys)
                (substitute* "src/ssl/package.lisp"
                  (("libcrypto\\.so")
-                  (string-append (assoc-ref inputs "openssl")
-                                 "/lib/libcrypto.so"))
+                  (search-input-file inputs "/lib/libcrypto.so"))
                  (("libssl\\.so")
-                  (string-append (assoc-ref inputs "openssl")
-                                 "/lib/libssl.so")))
-               #t)))))
+                  (search-input-file inputs "/lib/libssl.so"))))))))
       (synopsis "Asynchronous operations for Common Lisp")
       (description
        "Cl-async is a library for general purpose, non-blocking programming in
@@ -9046,10 +8564,9 @@ Common Lisp.  It uses the libuv library as backend.")
            "0xfds5yaya64arzr7w1x38karyz11swzbhxx1afldpradj9dh19c"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("vom" ,sbcl-vom)))
+       (list sbcl-vom))
       (native-inputs
-       `(("cl-async" ,sbcl-cl-async)
-         ("fiveam" ,sbcl-fiveam)))
+       (list sbcl-cl-async sbcl-fiveam))
       (synopsis "Promise implementation for Common Lisp")
       (description
        "This is a standalone promise implementation for Common Lisp.  It is
@@ -9081,10 +8598,9 @@ the successor to the now-deprecated cl-async-future project.")
            "0z0sc7qlzzxk99f4l26zp6rai9kv0kj0f599sxai5s44p17zbbvh"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("blackbird" ,sbcl-blackbird)))
+       (list sbcl-blackbird))
       (native-inputs
-       `(("cl-async" ,sbcl-cl-async)
-         ("eos" ,sbcl-eos)))
+       (list sbcl-cl-async sbcl-eos))
       (synopsis "Futures implementation for Common Lisp")
       (description
        "This is futures implementation for Common Lisp.  It plugs in nicely
@@ -9119,7 +8635,7 @@ to cl-async.")
        `(("cl-async-future" ,sbcl-cl-async-future)
          ("cl-cont" ,sbcl-cl-cont)))
       (native-inputs
-       `(("prove" ,sbcl-prove)))
+       (list sbcl-prove))
       (arguments
        `(;; TODO: Fix the tests. They fail with:
          ;; "The function BLACKBIRD::PROMISE-VALUES is undefined"
@@ -9163,7 +8679,7 @@ possible.")
           (base32 "17jrng8jb05d64ggyd11hp308c2fl5drvf9g175blgrkkl8l4mf8"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("lisp-unit" ,sbcl-lisp-unit)))
+       (list sbcl-lisp-unit))
       (synopsis "Common Lisp library for base32 encoding and decoding")
       (description
        "This package provides functions for base32 encoding and decoding as
@@ -9194,8 +8710,7 @@ defined in RFC4648.")
           (base32 "0r27pidjaxbm7k1rr90nnajwl5xm2kp65g1fv0fva17lzy45z1mp"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("cl-octet-streams" ,sbcl-cl-octet-streams)
-         ("fiveam" ,sbcl-fiveam)))
+       (list sbcl-cl-octet-streams sbcl-fiveam))
       (synopsis "Common Lisp library for Z85 encoding and decoding")
       (description
        "This package provides functions to encode or decode byte vectors or
@@ -9225,8 +8740,7 @@ ZeroMQ.")
         (base32 "13l2q4mskzilya9xh5wy2xvy30lwn104bd8wrq6ifds56r82iy3x"))))
     (build-system asdf-build-system/sbcl)
     (inputs
-     `(("imagemagick" ,imagemagick)
-       ("tk" ,tk)))
+     (list imagemagick tk))
     (arguments
      `(#:asd-systems '("ltk"
                        "ltk-mw"
@@ -9282,7 +8796,7 @@ in pure Common Lisp and does not require any Tk knowledge for its usage.")
           (base32 "1kg50f76bfpfxcv4dfivq1n9a0xlsra2ajb0vd68lxwgbidgyc2y"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("cl-ppcre" ,sbcl-cl-ppcre)))
+       (list sbcl-cl-ppcre))
       (synopsis "Common Lisp macros for generating lexical analyzers")
       (description
        "This is a Common Lisp library providing a set of macros for generating
@@ -9297,35 +8811,6 @@ be used with @code{cl-yacc}.")
 (define-public ecl-cl-lex
   (sbcl-package->ecl-package sbcl-cl-lex))
 
-(define-public sbcl-clunit2
-  (let ((commit "5e28343734eb9b7aee39306a614af92c1062d50b")
-        (revision "1"))
-    (package
-      (name "sbcl-clunit2")
-      (version (git-version "0.2.4" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://notabug.org/cage/clunit2.git")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32 "1ngiapfki6nm8a555mzhb5p7ch79i3w665za5bmb5j7q34fy80vw"))))
-      (build-system asdf-build-system/sbcl)
-      (synopsis "Unit testing framework for Common Lisp")
-      (description
-       "CLUnit is a Common Lisp unit testing framework.  It is designed to be
-easy to use so that you can quickly start testing.")
-      (home-page "https://notabug.org/cage/clunit2")
-      (license license:expat))))
-
-(define-public cl-clunit2
-  (sbcl-package->cl-source-package sbcl-clunit2))
-
-(define-public ecl-clunit2
-  (sbcl-package->ecl-package sbcl-clunit2))
-
 (define-public sbcl-cl-colors2
   (let ((commit "795aedee593b095fecde574bd999b520dd03ed24")
         (revision "1"))
@@ -9343,10 +8828,9 @@ easy to use so that you can quickly start testing.")
           (base32 "0hlyf4h5chkjdp9armla5w4kw5acikk159sym7y8c4jbjp9x47ih"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("clunit2" ,sbcl-clunit2)))
+       (list sbcl-clunit2))
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("cl-ppcre" ,sbcl-cl-ppcre)))
+       (list sbcl-alexandria sbcl-cl-ppcre))
       (synopsis "Color library for Common Lisp")
       (description
        "This is a very simple color library for Common Lisp, providing:
@@ -9525,7 +9009,7 @@ ones.")
 (define-public sbcl-salza2
   (package
     (name "sbcl-salza2")
-    (version "2.0.9")
+    (version "2.1")
     (source
      (origin
        (method git-fetch)
@@ -9534,8 +9018,12 @@ ones.")
              (commit (string-append "release-" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0p38rj4gq7j5k807php7hrz7l2zyyfshv8i9yms7i8lkgg3433ki"))))
+        (base32 "1p48lxdibnps5rpyh5cmnk0vc77bmmxb32qdzfz93zadr8wwas10"))))
     (build-system asdf-build-system/sbcl)
+    (native-inputs
+     (list sbcl-chipz sbcl-flexi-streams sbcl-parachute))
+    (inputs
+     (list sbcl-trivial-gray-streams))
     (synopsis "Common Lisp library for zlib, deflate and gzip compression")
     (description
      "Salza2 is a Common Lisp library for creating compressed data in the zlib,
@@ -9567,10 +9055,9 @@ respectively.")
           (base32 "1n9aszaif3yh8prs5r8v51fbj4r5jd1a048mivd5yij3hplkm82b"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("parachute" ,sbcl-parachute)))
+       (list sbcl-parachute))
       (inputs
-       `(("golden-utils" ,sbcl-golden-utils)
-         ("specialization-store" ,sbcl-specialization-store)))
+       (list sbcl-golden-utils sbcl-specialization-store))
       (home-page "https://git.mfiano.net/mfiano/origin")
       (synopsis "Common Lisp graphics math library")
       (description
@@ -9601,9 +9088,7 @@ performance and correctness.")
           (base32 "0vyczbcwskrygrf1hgrsnk0jil8skmvf1kiaalw5jps4fjrfdkw0"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("babel" ,sbcl-babel)
-         ("chipz" ,sbcl-chipz)
-         ("iterate" ,sbcl-iterate)))
+       (list sbcl-babel sbcl-chipz sbcl-iterate))
       (synopsis "PNG decoder for Common Lisp")
       (description "This is a Common Lisp library for reading PNG images.")
       (home-page "https://github.com/Ramarren/png-read")
@@ -9672,7 +9157,7 @@ read/write Bit Map Font (BMF) into text, JSON and XML.")
         (base32 "0b3ag3jhl3z7kdls3ahdsdxsfhhw5qrizk769984f4wkxhb69rcm"))))
     (build-system asdf-build-system/sbcl)
     (inputs
-     `(("salza2" ,sbcl-salza2)))
+     (list sbcl-salza2))
     (synopsis "PNG encoder for Common Lisp")
     (description "This is a Common Lisp library for creating PNG images.")
     (home-page "https://www.xach.com/lisp/zpng/")
@@ -9699,9 +9184,9 @@ read/write Bit Map Font (BMF) into text, JSON and XML.")
         (base32 "1l5k131dchbf6cj8a8xqa731790p01p3qa1kdy2wa9dawy3ymkxr"))))
     (build-system asdf-build-system/sbcl)
     (native-inputs
-     `(("lisp-unit" ,sbcl-lisp-unit)))
+     (list sbcl-lisp-unit))
     (inputs
-     `(("zpng" ,sbcl-zpng)))
+     (list sbcl-zpng))
     (synopsis "QR code encoder for Common Lisp")
     (description
      "This Common Lisp library provides function to make QR codes and to save
@@ -9744,7 +9229,7 @@ them as PNG files.")
        `(("cffi" ,sbcl-cffi)
          ("hdf5" ,hdf5-1.10)))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (arguments
        `(#:test-asd-file "hdf5-cffi.test.asd"
          ;; Tests depend on hdf5-cffi.examples.asd in addition to hdf5-cffi.asd,
@@ -9806,30 +9291,31 @@ generation functions from the GSL library.")
   (sbcl-package->ecl-package sbcl-cl-randist))
 
 (define-public sbcl-float-features
-  (package
-    (name "sbcl-float-features")
-    (version "1.0.0")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/Shinmera/float-features")
-             (commit "d3ef60181635b0849aa28cfc238053b7ca4644b0")))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "0yj419k7n59x6rh3grwr6frgwwyria2il6f7wxpfazm8cskv4lzr"))))
-    (build-system asdf-build-system/sbcl)
-    (synopsis "Common Lisp IEEE float portability library")
-    (description
-     "Portability library for IEEE float features that are not
+  (let ((commit "c1f86aea91cfaa3aa59799162be23ef8a12b199d")
+        (revision "2"))
+    (package
+      (name "sbcl-float-features")
+      (version (git-version "1.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Shinmera/float-features")
+               (commit commit)))
+         (file-name (git-file-name "float-features" version))
+         (sha256
+          (base32 "0vqm9xhn2i4vbjrxnp4hr1l3lydjflhjykdz6cmqg2j48c5kh3g3"))))
+      (build-system asdf-build-system/sbcl)
+      (synopsis "Common Lisp IEEE float portability library")
+      (description
+       "Portability library for IEEE float features that are not
 covered by the Common Lisp standard.")
-    (home-page "https://github.com/Shinmera/float-features")
-    (license license:zlib)
-    (inputs
-     `(("documentation-utils" ,sbcl-documentation-utils)))
-    (arguments
-     `(#:tests? #f))))
+      (home-page "https://github.com/Shinmera/float-features")
+      (license license:zlib)
+      (inputs
+       `(("documentation-utils" ,sbcl-documentation-utils)))
+      (arguments
+       `(#:tests? #f)))))
 
 (define-public cl-float-features
   (sbcl-package->cl-source-package sbcl-float-features))
@@ -9932,7 +9418,7 @@ the elements in compound type specifier, e.g. @code{dimensions} in
        `(("trivia" ,sbcl-trivia)
          ("alexandria" ,sbcl-alexandria)))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (arguments
        `(#:test-asd-file "type-r.test.asd")))))
 
@@ -9972,7 +9458,7 @@ correctly.")
          ("introspect-environment" ,sbcl-introspect-environment)
          ("type-r" ,sbcl-type-r)))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (arguments
        `(#:asd-systems '("trivialib.type-unify")
          #:test-asd-file "trivialib.type-unify.test.asd")))))
@@ -10000,9 +9486,9 @@ correctly.")
           (base32 "0nhqamn3qgg38i6aw2pshffdwr2hzslycg8ficmn333gw0h9rf4g"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("ptester" ,sbcl-ptester)))
+       (list sbcl-ptester))
       (inputs
-       `(("cl-ppcre" ,sbcl-cl-ppcre)))
+       (list sbcl-cl-ppcre))
       (home-page "https://common-lisp.net/project/cl-unification/")
       (synopsis "Unification framework for Common Lisp")
       (description
@@ -10057,7 +9543,7 @@ code.  The main target of this macro is speed.")
          ("trivial-cltl2" ,sbcl-trivial-cltl2)
          ("type-r" ,sbcl-type-r)))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (arguments
        `(#:asd-files '("specialized-function.asd")
          #:test-asd-file "specialized-function.test.asd")))))
@@ -10097,7 +9583,7 @@ additional form that is considered as a candidate for a constant.")
          ("iterate" ,sbcl-iterate)
          ("lisp-namespace" ,sbcl-lisp-namespace)))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (arguments
        `(#:asd-files '("constantfold.asd")
          #:test-asd-file "constantfold.test.asd")))))
@@ -10138,7 +9624,7 @@ type correctness in Common Lisp.  It is based on CLtL2 extensions.")
          ("iterate" ,sbcl-iterate)
          ("type-r" ,sbcl-type-r)))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (arguments
        `(#:asd-files '("gtype.asd")
          #:test-asd-file "gtype.test.asd")))))
@@ -10178,7 +9664,7 @@ type correctness in Common Lisp.  It is based on CLtL2 extensions.")
          ;; bigger than the default one. Disable them for now.
          #:tests? #f))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (inputs
        `(("alexandria" ,sbcl-alexandria)
          ("cl-randist" ,sbcl-cl-randist)
@@ -10265,8 +9751,7 @@ lightweight messaging kernel.")
           (base32 "0la4dbcda78x29szanylccrsljqrn9d1mhh569sqkyp44ni5fv91"))
          (file-name (git-file-name name version))))
       (inputs
-       `(("array-utils" ,sbcl-array-utils)
-         ("plump" ,sbcl-plump)))
+       (list sbcl-array-utils sbcl-plump))
       (build-system asdf-build-system/sbcl)
       (synopsis "DOM tree searching engine based on CSS selectors")
       (description "CLSS is a DOM traversal engine based on CSS
@@ -10297,12 +9782,9 @@ selectors.  It makes use of the Plump-DOM and is used by lQuery.")
           (base32 "0520mcpxc2d6fdm8z61arpgd2z38kan7cf06qs373n5r64rakz6w"))
          (file-name (git-file-name name version))))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (inputs
-       `(("array-utils" ,sbcl-array-utils)
-         ("form-fiddle" ,sbcl-form-fiddle)
-         ("plump" ,sbcl-plump)
-         ("clss" ,sbcl-clss)))
+       (list sbcl-array-utils sbcl-form-fiddle sbcl-plump sbcl-clss))
       (build-system asdf-build-system/sbcl)
       (synopsis "Library to allow jQuery-like HTML/DOM manipulation")
       (description "@code{lQuery} is a DOM manipulation library written in
@@ -10337,7 +9819,7 @@ approach to templating.")
           (base32 "0dg5ynx2ww94d0qfwrdrm7plkn43h64hs4iiq9mj2s1s4ixnp3lr"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("stefil" ,sbcl-stefil)))
+       (list sbcl-stefil))
       (inputs
        `(("cffi" ,sbcl-cffi)
          ("mariadb-lib" ,mariadb "lib")))
@@ -10380,7 +9862,7 @@ approach to templating.")
         (base32 "137jci4hn4vlxf48y39k0di27kc89kvxy3brmn3vl9xq56sy6mhz"))))
     (build-system asdf-build-system/sbcl)
     (native-inputs
-     `(("fiveam" ,sbcl-fiveam)))
+     (list sbcl-fiveam))
     (inputs
      `(("alexandria" ,sbcl-alexandria)
        ("bordeaux-threads" ,sbcl-bordeaux-threads)
@@ -10703,10 +10185,7 @@ interfaces as well as a functional and an object oriented interface.")
     (native-inputs
      `(("rt" ,cl-rt)))
     (inputs
-     `(("mysql" ,mysql)
-       ("postgresql" ,postgresql)
-       ("sqlite" ,sqlite)
-       ("zlib" ,zlib)))
+     (list mysql postgresql sqlite zlib))
     (propagated-inputs
      `(("cffi" ,cl-cffi)
        ("md5" ,cl-md5)
@@ -10749,8 +10228,7 @@ interfaces as well as a functional and an object oriented interface.")
           (base32 "00bv1aj89q5vldmq92zp2364jq312zjq2mbd3iyz1s2b4widzhl7"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("cl-ppcre" ,sbcl-cl-ppcre)))
+       (list sbcl-alexandria sbcl-cl-ppcre))
       (synopsis "Purely functional data structure library in Common Lisp")
       (description
        "Sycamore is a fast, purely functional data structure library in Common Lisp.
@@ -10891,10 +10369,9 @@ multiple checkers, including Aspell and Hunspell.")
           (base32 "0qmk341zzcsbf8sq0w9ix3r080zg4ri6vzxym63lhdjfzwz3y8if"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("cl-ppcre" ,sbcl-cl-ppcre)
-         ("cl-ppcre-unicode" ,sbcl-cl-ppcre-unicode)))
+       (list sbcl-cl-ppcre sbcl-cl-ppcre-unicode))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (synopsis
        "Convert Common Lisp strings between camelCase, PascalCase and more")
       (description
@@ -10965,10 +10442,8 @@ tie modules together in functionality, hook into each other and so on.")
           (base32 "12kjvin8hxidwkzfb7inqv5b6g5qzcssnj9wc497v2ixc56fqdz7"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("closer-mop" ,sbcl-closer-mop)
-         ("lambda-fiddle" ,sbcl-lambda-fiddle)
-         ("modularize" ,sbcl-modularize)
-         ("trivial-arguments" ,sbcl-trivial-arguments)))
+       (list sbcl-closer-mop sbcl-lambda-fiddle sbcl-modularize
+             sbcl-trivial-arguments))
       (home-page "https://shinmera.github.io/modularize-hooks/")
       (synopsis "Generic hooks and triggers extension for Modularize")
       (description
@@ -10999,10 +10474,8 @@ define and trigger hooks, which other modules can hook on to.")
           (base32 "0bjf4wy39cwf75m7vh0r7mmcchs09yz2lrbyap98hnq8blq70fhc"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("lambda-fiddle" ,sbcl-lambda-fiddle)
-         ("modularize" ,sbcl-modularize)
-         ("trivial-arguments" ,sbcl-trivial-arguments)
-         ("trivial-indent" ,sbcl-trivial-indent)))
+       (list sbcl-lambda-fiddle sbcl-modularize sbcl-trivial-arguments
+             sbcl-trivial-indent))
       (home-page "https://shinmera.github.io/modularize-interfaces/")
       (synopsis "Programmatical interfaces extension for Modularize")
       (description
@@ -11036,7 +10509,7 @@ compliance control.")
       (inputs
        `(("closer-mop" ,sbcl-closer-mop)))
       (native-inputs
-       `(("lift" ,sbcl-lift)))
+       (list sbcl-lift))
       (arguments
        `(#:phases
          (modify-phases %standard-phases
@@ -11056,10 +10529,10 @@ MOP easier to use.")
   (sbcl-package->cl-source-package sbcl-moptilities))
 
 (define-public sbcl-osicat
-  (let ((commit "de0c18a367eedc857e1902a7319828af072a0d97"))
+  (let ((commit "eab6b8cabd71b59e894b51dc555e171683ec3387"))
     (package
       (name "sbcl-osicat")
-      (version (git-version "0.7.0" "1" commit))
+      (version (git-version "0.7.0" "2" commit))
       (home-page "http://www.common-lisp.net/project/osicat/")
       (source
        (origin
@@ -11069,14 +10542,12 @@ MOP easier to use.")
                (commit commit)))
          (file-name (git-file-name name version))
          (sha256
-          (base32 "15viw5pi5sa7qq9b4n2rr3dj2jkqr180rh9z1lh8w3rgl42i2adc"))))
+          (base32 "18g137iqf86i247c9cg7d86b8k9cfq3yv272l73fsv734qpnv0g9"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("cffi" ,sbcl-cffi)
-         ("trivial-features" ,sbcl-trivial-features)))
+       (list sbcl-alexandria sbcl-cffi sbcl-trivial-features))
       (native-inputs
-       `(("rt" ,sbcl-rt)))
+       (list sbcl-rt))
       (synopsis "Operating system interface for Common Lisp")
       (description
        "Osicat is a lightweight operating system interface for Common Lisp on
@@ -11110,8 +10581,8 @@ accompaniment to the standard ANSI facilities.")
       (arguments
        `(#:asd-systems '("xembed")))
       (inputs
-       `(("sbcl-clx" ,sbcl-clx)))
-      (synopsis "CL(x) xembed protocol implementation ")
+       (list sbcl-clx))
+      (synopsis "CL(x) xembed protocol implementation")
       (description "CL(x) xembed protocol implementation")
       ;; MIT License
       (license license:expat))))
@@ -11225,8 +10696,7 @@ Streams in ICDE’05.")
            "0jnyp2kibcf5cwi60l6grjrj8wws9chasjvsw7xzwyym2lyid46f"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("ironclad" ,sbcl-ironclad)
-         ("trivial-utf-8" ,sbcl-trivial-utf-8)))
+       (list sbcl-ironclad sbcl-trivial-utf-8))
       (home-page "https://github.com/dardoria/uuid")
       (synopsis
        "Common Lisp implementation of UUIDs according to RFC4122")
@@ -11257,7 +10727,7 @@ Streams in ICDE’05.")
            "0rmsjkgjl90gl6ssvgd60hb0d5diyhsiyypvw9hbc0ripvbmk5r5"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("cl-ppcre" ,sbcl-cl-ppcre)))
+       (list sbcl-cl-ppcre))
       (home-page "https://shinmera.github.io/dissect/")
       (synopsis
        "Introspection library for the call stack and restarts")
@@ -11272,39 +10742,6 @@ and active restarts.")
 (define-public ecl-dissect
   (sbcl-package->ecl-package sbcl-dissect))
 
-(define-public sbcl-rove
-  (package
-    (name "sbcl-rove")
-    (version "0.9.6")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/fukamachi/rove")
-             (commit "f3695db08203bf26f3b861dc22ac0f4257d3ec21")))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "07ala4l2fncxf540fzxj3h5mhi9i4wqllhj0rqk8m2ljl5zbz89q"))))
-    (build-system asdf-build-system/sbcl)
-    (inputs
-     `(("bordeaux-threads" ,sbcl-bordeaux-threads)
-       ("dissect" ,sbcl-dissect)
-       ("trivial-gray-streams" ,sbcl-trivial-gray-streams)))
-    (home-page "https://github.com/fukamachi/rove")
-    (synopsis
-     "Yet another common lisp testing library")
-    (description
-     "Rove is a unit testing framework for Common Lisp applications.
-This is intended to be a successor of Prove.")
-    (license license:bsd-3)))
-
-(define-public cl-rove
-  (sbcl-package->cl-source-package sbcl-rove))
-
-(define-public ecl-rove
-  (sbcl-package->ecl-package sbcl-rove))
-
 (define-public sbcl-exponential-backoff
   (let ((commit "8d9e8444d8b3184a524c12ce3449f91613ab714f"))
     (package
@@ -11351,15 +10788,15 @@ learn about each of the parameters.")
           (base32 "1i1crdsf2nbyxxpvjgrwmwpjxn6a4drbcmqs4q4shfi8zyap7vng"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("cl-package-locks" ,sbcl-cl-package-locks)
-         ("cl-syntax" ,sbcl-cl-syntax)
-         ("iterate" ,sbcl-iterate)
-         ("optima" ,sbcl-optima)
-         ("split-sequence" ,sbcl-split-sequence)
-         ("trivial-types" ,sbcl-trivial-types)))
+       (list sbcl-alexandria
+             sbcl-cl-package-locks
+             sbcl-cl-syntax
+             sbcl-iterate
+             sbcl-optima
+             sbcl-split-sequence
+             sbcl-trivial-types))
       (native-inputs
-       `(("prove" ,sbcl-prove)))
+       (list sbcl-prove))
       (home-page "https://github.com/fukamachi/sxql")
       (synopsis "SQL generator for Common Lisp")
       (description "SQL generator for Common Lisp.")
@@ -11371,33 +10808,6 @@ learn about each of the parameters.")
 (define-public ecl-sxql
   (sbcl-package->ecl-package sbcl-sxql))
 
-(define-public sbcl-1am
-  (let ((commit "8b1da94eca4613fd8a20bdf63f0e609e379b0ba5"))
-    (package
-      (name "sbcl-1am")
-      (version (git-version "0.0" "1" commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/lmj/1am")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32
-           "05ss4nz1jb9kb796295482b62w5cj29msfj8zis33sp2rw2vmv2g"))))
-      (build-system asdf-build-system/sbcl)
-      (home-page "https://github.com/lmj/1am")
-      (synopsis "Minimal testing framework for Common Lisp")
-      (description "A minimal testing framework for Common Lisp.")
-      (license license:expat))))
-
-(define-public cl-1am
-  (sbcl-package->cl-source-package sbcl-1am))
-
-(define-public ecl-1am
-  (sbcl-package->ecl-package sbcl-1am))
-
 (define-public sbcl-cl-ascii-table
   (let ((commit "d9f5e774a56fad1b416e4dadb8f8a5b0e84094e2")
         (revision "1"))
@@ -11518,7 +10928,7 @@ weight, temperature, names of physical quantitites, etc.")
           (base32
            "1639msyagsswj85gc0wd90jgh8588j3qg5q70by9s2brf2q6w4lh"))))
       (inputs
-       `(("acclimation" ,sbcl-acclimation)))
+       (list sbcl-acclimation))
       (build-system asdf-build-system/sbcl)
       (home-page "https://github.com/robert-strandh/Clump")
       (synopsis "Collection of tree implementations for Common Lisp")
@@ -11558,8 +10968,7 @@ sequences of objects.")
            "1bcg13g7qb3dr8z50aihdjqa6miz5ivlc9wsj2csgv1km1mak2kj"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("acclimation" ,sbcl-acclimation)
-         ("clump" ,sbcl-clump)))
+       (list sbcl-acclimation sbcl-clump))
       (home-page "https://github.com/robert-strandh/cluffer")
       (synopsis "Common Lisp library providing a protocol for text-editor buffers")
       (description "Cluffer is a library for representing the buffer of a text
@@ -11592,9 +11001,9 @@ implementations of those protocols for different purposes.")
            "0284aj84xszhkhlivaigf9qj855fxad3mzmv3zfr0qzb5k0nzwrg"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("prove" ,sbcl-prove)))
+       (list sbcl-prove))
       (inputs
-       `(("alexandria" ,sbcl-alexandria)))
+       (list sbcl-alexandria))
       (synopsis "LibSVM data format reader for Common Lisp")
       (description
        "This Common Lisp library provides a fast reader for data in LibSVM
@@ -11626,7 +11035,7 @@ format.")
            "1lfq04lnxivx59nq5dd02glyqsqzf3vdn4s9b8wnaln5fs8g2ph9"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("prove" ,sbcl-prove)))
+       (list sbcl-prove))
       (inputs
        `(("cl-libsvm-format" ,sbcl-cl-libsvm-format)
          ("cl-store" ,sbcl-cl-store)))
@@ -11907,7 +11316,7 @@ non-RLE encoded forms of the files.")
           (base32 "072v417vmcnvmyh8ddq9vmwwrizm7zwz9dpzi14qy9nsw8q649zw"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)))
+       (list sbcl-alexandria))
       (home-page "https://github.com/gigamonkey/monkeylib-binary-data")
       (synopsis "Common Lisp library for reading and writing binary data")
       (description
@@ -11994,7 +11403,7 @@ wrappers of deflate streams.  It currently does not handle compression.")
           (base32 "0f8darhairgxnb5bzqcny7nh7ss3471bdzix5rzcyiwdbr5kymjl"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (inputs
        `(("alexandria" ,sbcl-alexandria)
          ("cffi" ,sbcl-cffi)
@@ -12046,7 +11455,7 @@ with other libraries which may also use Freetype.")
           (base32 "0458bllabcdjghfrqx6aki49c9qmvfmkk8jl75cfpi7q0i12kh95"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)))
+       (list sbcl-alexandria))
       (home-page "https://github.com/slyrus/opticl-core")
       (synopsis "Core classes and pixel access macros for Opticl")
       (description
@@ -12077,14 +11486,14 @@ macros for the Opticl image processing library.")
           (base32 "0qsn9hpd8j2kp43dk05j8dczz9zppdff5rrclbp45n3ksk9inw8i"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
-      (inputs
-       `(("cl-jpeg" ,sbcl-cl-jpeg)
-         ("com.gigamonkeys.binary-data" ,sbcl-com.gigamonkeys.binary-data)
-         ("deflate" ,sbcl-deflate)
-         ("flexi-streams" ,sbcl-flexi-streams)
-         ("ieee-floats" ,sbcl-ieee-floats)
-         ("opticl-core" ,sbcl-opticl-core)))
+       (list sbcl-fiveam))
+      (inputs
+       (list sbcl-cl-jpeg
+             sbcl-com.gigamonkeys.binary-data
+             sbcl-deflate
+             sbcl-flexi-streams
+             sbcl-ieee-floats
+             sbcl-opticl-core))
       (home-page "https://github.com/slyrus/retrospectiff")
       (synopsis "Common Lisp library for TIFF images")
       (description
@@ -12115,13 +11524,10 @@ in the TIFF (Tagged Image File Format) format.")
           (base32 "0qd0xp20i1pcfn12kkapv9pirb6hd4ns7kz4zf1mmjwykpsln96q"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("cffi" ,sbcl-cffi)
-         ("parachute" ,sbcl-parachute)
-         ("trivial-features" ,sbcl-trivial-features)))
+       (list sbcl-alexandria sbcl-cffi sbcl-parachute
+             sbcl-trivial-features))
       (inputs
-       `(("cffi" ,sbcl-cffi)
-         ("documentation-utils" ,sbcl-documentation-utils)))
+       (list sbcl-cffi sbcl-documentation-utils))
       (home-page "https://shinmera.github.io/mmap/")
       (synopsis "File memory mapping for Common Lisp")
       (description
@@ -12155,12 +11561,12 @@ than a few Kb.")
           (base32 "0kvvlvf50jhhw1s510f3clpr1a68632bq6d698yxcrx722igcrg4"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("babel" ,sbcl-babel)
-         ("cffi" ,sbcl-cffi)
-         ("mmap" ,sbcl-mmap)
-         ("nibbles" ,sbcl-nibbles)
-         ("trivial-features" ,sbcl-trivial-features)))
+       (list sbcl-alexandria
+             sbcl-babel
+             sbcl-cffi
+             sbcl-mmap
+             sbcl-nibbles
+             sbcl-trivial-features))
       (home-page "https://github.com/3b/3bz")
       (synopsis "Deflate decompression for Common Lisp")
       (description
@@ -12262,7 +11668,7 @@ both from files on disk, or streams in memory.")
           (base32 "03rirnnhhisjbimlmpi725h1d3x0cfv00r57988am873dyzawmm1"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (inputs
        `(("alexandria" ,sbcl-alexandria)
          ("cl-jpeg" ,sbcl-cl-jpeg)
@@ -12304,8 +11710,7 @@ and saving 2-dimensional pixel-based images.")
           (base32 "1xjly8i62z72hfhlnz5kjd9i8xhrwckc7avyizxvhih67pkjmsx0"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)
-         ("pkg-config" ,pkg-config)))
+       (list sbcl-fiveam pkg-config))
       (inputs
        `(("alexandria" ,sbcl-alexandria)
          ("babel" ,sbcl-babel)
@@ -12346,13 +11751,10 @@ and saving 2-dimensional pixel-based images.")
                                  "/share/fonts/truetype/")))
                (substitute* "Extensions/fontconfig/src/functions.lisp"
                  (("libfontconfig\\.so")
-                  (string-append (assoc-ref inputs "fontconfig")
-                                 "/lib/libfontconfig.so")))
+                  (search-input-file inputs "/lib/libfontconfig.so")))
                (substitute* "Extensions/harfbuzz/src/functions.lisp"
                  (("libharfbuzz\\.so")
-                  (string-append (assoc-ref inputs "harfbuzz")
-                                 "/lib/libharfbuzz.so")))
-               #t))
+                  (search-input-file inputs "/lib/libharfbuzz.so")))))
            (add-after 'unpack 'fix-build
              (lambda _
                ;; The cffi-grovel system does not get loaded automatically,
@@ -12394,10 +11796,9 @@ specification}, a toolkit for writing GUIs in Common Lisp.")
           (base32 "1xwwlhik1la4fp984qnx2dqq24v012qv4x0y49sngfpwg7n0ya7y"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("lisp-unit2" ,sbcl-lisp-unit2)))
+       (list sbcl-lisp-unit2))
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("cl-ppcre" ,sbcl-cl-ppcre)))
+       (list sbcl-alexandria sbcl-cl-ppcre))
       (home-page "https://github.com/AccelerationNet/cl-inflector")
       (synopsis "Library to pluralize/singularize English and Portuguese words")
       (description
@@ -12429,13 +11830,13 @@ Inflector module.")
           (base32 "1wjdnf4vr9z7lcfc49kl43g6l2i23q9n81siy494k17d766cdvqa"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("babel" ,sbcl-babel)
-         ("cl-ppcre" ,sbcl-cl-ppcre)
-         ("ieee-floats" ,sbcl-ieee-floats)
-         ("local-time" ,sbcl-local-time)
-         ("md5" ,sbcl-md5)
-         ("split-sequence" ,sbcl-split-sequence)))
+       (list sbcl-alexandria
+             sbcl-babel
+             sbcl-cl-ppcre
+             sbcl-ieee-floats
+             sbcl-local-time
+             sbcl-md5
+             sbcl-split-sequence))
       (home-page "https://github.com/dimitri/cl-ixf")
       (synopsis "Parse IBM IXF file format")
       (description
@@ -12464,10 +11865,9 @@ Inflector module.")
         (base32 "1dir0s70ca3hagxv9x15zq4p4ajgl7jrcgqsza2n2y7iqbxh0dwi"))))
     (build-system asdf-build-system/sbcl)
     (inputs
-     `(("metabang-bind" ,sbcl-metabang-bind)
-       ("trivial-gray-streams" ,sbcl-trivial-gray-streams)))
+     (list sbcl-metabang-bind sbcl-trivial-gray-streams))
     (native-inputs
-     `(("fiveam" ,sbcl-fiveam)))
+     (list sbcl-fiveam))
     (home-page "https://github.com/chaitanyagupta/qbase64")
     (synopsis "Base64 encoder and decoder for Common Lisp")
     (description "@code{qbase64} provides a fast and flexible base64 encoder
@@ -12525,8 +11925,7 @@ LispWorks library that are used in software such as ContextL.")
           (base32 "0gk1izx6l6g48nypmnm9r6mzjx0jixqjj2kc6klf8a88rr5xd226"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("closer-mop" ,sbcl-closer-mop)
-         ("lw-compat" ,sbcl-lw-compat)))
+       (list sbcl-closer-mop sbcl-lw-compat))
       (home-page "https://github.com/pcostanza/contextl")
       (synopsis "Context-oriented programming for Common Lisp")
       (description "ContextL is a CLOS extension for Context-Oriented
@@ -12560,11 +11959,11 @@ overview article about COP which also contains some ContextL examples:
           (base32 "06zkdw3scnaw0d4nmsgkv7pi7sw00dikdgfgsqmbqfbz2yrsdabk"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("hu.dwim.asdf" ,sbcl-hu.dwim.asdf)))
+       (list sbcl-hu.dwim.asdf))
       (home-page "http://dwim.hu/project/hu.dwim.common-lisp")
       (synopsis "Redefine some standard Common Lisp names")
       (description "This library is a redefinition of the standard Common Lisp
-package that includes a number of renames and shadows. ")
+package that includes a number of renames and shadows.")
       (license license:public-domain))))
 
 (define-public cl-hu.dwim.common-lisp
@@ -12589,14 +11988,14 @@ package that includes a number of renames and shadows. ")
         (base32 "12l1rr6w9m99w0b5gc6hv58ainjfhbc588kz6vwshn4gqsxyzbhp"))))
     (build-system asdf-build-system/sbcl)
     (native-inputs
-     `(("hu.dwim.asdf" ,sbcl-hu.dwim.asdf)))
+     (list sbcl-hu.dwim.asdf))
     (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("anaphora" ,sbcl-anaphora)
-       ("closer-mop" ,sbcl-closer-mop)
-       ("hu.dwim.common-lisp" ,sbcl-hu.dwim.common-lisp)
-       ("iterate" ,sbcl-iterate)
-       ("metabang-bind" ,sbcl-metabang-bind)))
+     (list sbcl-alexandria
+           sbcl-anaphora
+           sbcl-closer-mop
+           sbcl-hu.dwim.common-lisp
+           sbcl-iterate
+           sbcl-metabang-bind))
     (home-page "http://dwim.hu/")
     (synopsis "Common Lisp library shared by other hu.dwim systems")
     (description "This package contains a support library for other
@@ -12627,11 +12026,11 @@ hu.dwim systems.")
           (base32 "19ipds9r71qymfdp4izg0l7zmvinp06adr8rdalhaq7v7mzpg83z"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `( ;; These 2 inputs are only needed tests which are disabled, see below.
-         ;; ("hu.dwim.common" ,sbcl-hu.dwim.common)
-         ;; Need cl- package for the :hu.dwim.stefil+hu.dwim.def+swank system.
-         ;; ("hu.dwim.stefil" ,cl-hu.dwim.stefil)
-         ("hu.dwim.asdf" ,sbcl-hu.dwim.asdf)))
+       (list ;; These 2 inputs are only needed tests which are disabled, see below.
+             ;; ("hu.dwim.common" ,sbcl-hu.dwim.common)
+             ;; Need cl- package for the :hu.dwim.stefil+hu.dwim.def+swank system.
+             ;; ("hu.dwim.stefil" ,cl-hu.dwim.stefil)
+             sbcl-hu.dwim.asdf))
       (arguments
        `(#:test-asd-file "hu.dwim.defclass-star.test.asd"
          ;; Tests require a circular dependency: hu.dwim.stefil -> hu.dwim.def
@@ -12723,7 +12122,7 @@ carrys on from the end of the body.")
          ;;   Component ENVY-ASD::ENVY-TEST not found, required by #<SYSTEM "envy">
          ;; like xsubseq.  Why?
          #:tests? #f))
-      (synopsis "Common Lisp configuration switcher inspired by Perl's Config::ENV.")
+      (synopsis "Common Lisp configuration switcher inspired by Perl's Config::ENV")
       (description "Envy is a configuration manager for various applications.
 Envy uses an environment variable to determine a configuration to use.  This
 can separate configuration system from an implementation.")
@@ -12753,7 +12152,7 @@ can separate configuration system from an implementation.")
           (base32 "1a9kivpy9j2grf1c6gdjk7fwcdlvvq67p3m98jyfhiyzj7axjymd"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("prove" ,sbcl-prove)))
+       (list sbcl-prove))
       (inputs
        `(("alexandria" ,sbcl-alexandria)
          ("cl-package-locks" ,sbcl-cl-package-locks)
@@ -12830,7 +12229,7 @@ like Ruby's ActiveRecord.
          ("cl-interpol" ,sbcl-cl-interpol)
          ("split-sequence" ,sbcl-split-sequence)))
       (native-inputs
-       `(("prove" ,sbcl-prove)))
+       (list sbcl-prove))
       (arguments
        ;; Tests passes but the phase fails with
        ;; Component KEBAB-ASD::KEBAB-TEST not found, required by #<SYSTEM "kebab">.
@@ -12880,7 +12279,7 @@ camelCase, snake_case, kebab-case (lisp-case).")
          ("kebab" ,sbcl-kebab)
          ("log4cl" ,sbcl-log4cl)))
       (native-inputs
-       `(("prove" ,sbcl-prove)))
+       (list sbcl-prove))
       (arguments
        ;; TODO: Tests fail with
        ;; While evaluating the form starting at line 22, column 0
@@ -12918,8 +12317,7 @@ camelCase, snake_case, kebab-case (lisp-case).")
           (base32 "0k2i3d4k9cpci235mwfm0c5a4yqfkijr716bjv7cdlpzx88lazm9"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("babel" ,sbcl-babel)))
+       (list sbcl-alexandria sbcl-babel))
       (synopsis "Percent Encoding (aka URL Encoding) Common Lisp library")
       (description "This library provides trivial percent encoding and
 decoding functions for URLs.")
@@ -12949,7 +12347,7 @@ decoding functions for URLs.")
           (base32 "1xcm31n7afh5316lwz8iqbjx7kn5lw0l11arg8mhdmkx42aj4gkk"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("cl-ppcre" ,sbcl-cl-ppcre)))
+       (list sbcl-cl-ppcre))
       (synopsis "Templating system for Common Lisp")
       (description "A mixture of features from eRuby and HTML::Template.  You
 could name it \"Yet Another LSP\" (LispServer Pages) but it's a bit more than
@@ -13113,7 +12511,7 @@ processing.")
          (sha256
           (base32 "1lmvfml2ldbb1wkhm25jqqk2bhwsz52hhcgljbnzj1xr8xhc3anp"))))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (build-system asdf-build-system/sbcl)
       (home-page "https://github.com/rpgoldman/xmls")
       (synopsis "Non-validating XML parser for Common Lisp")
@@ -13135,25 +12533,28 @@ XML to Lisp structures or s-expressions and back.")
          ((#:tests? _ #f) #f))))))
 
 (define-public sbcl-geco
-  (package
-    (name "sbcl-geco")
-    (version "2.1.1")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/gpwwjr/GECO")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name "geco" version))
-       (sha256
-        (base32 "1rc8a4mk40hjx5qy980hjylv6xxqdbq38hg8c4w30y93abfd519s"))))
-    (build-system asdf-build-system/sbcl)
-    (home-page "http://hiwaay.net/~gpw/geco/geco.html")
-    (synopsis "Genetic algorithm toolkit for Common Lisp")
-    (description
-     "GECO (Genetic Evolution through Combination of Objects) is an extensible,
-object-oriented framework for prototyping genetic algorithms in Common Lisp.")
-    (license license:lgpl2.1+)))
+  (let ((commit "db13c9384491092975f46f6a837ccdc04681a93a")
+        (revision "1"))
+    (package
+      (name "sbcl-geco")
+      (version (git-version "2.1.2" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/gpwwjr/GECO")
+               (commit commit)))
+         (file-name (git-file-name "cl-geco" version))
+         (sha256
+          (base32 "1ncaf9ab7jz59zmga0p97blsjjb1m6db0qih57wipfhqdb5ylz17"))))
+      (build-system asdf-build-system/sbcl)
+      (home-page "https://github.com/gpwwjr/GECO")
+      (synopsis "Genetic algorithm toolkit for Common Lisp")
+      (description
+       "GECO (Genetic Evolution through Combination of Objects) is an
+extensible, object-oriented framework for prototyping genetic algorithms in
+Common Lisp.")
+      (license license:lgpl2.0+))))
 
 (define-public cl-geco
   (sbcl-package->cl-source-package sbcl-geco))
@@ -13177,9 +12578,9 @@ object-oriented framework for prototyping genetic algorithms in Common Lisp.")
           (base32 "1b2yl6lf6vis17y4n5s505p7ica96bdafcl6vydy1hg50fy33nfr"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("ppcre" ,sbcl-cl-ppcre)))
+       (list sbcl-cl-ppcre))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (home-page "https://github.com/BnMcGn/html-entities/")
       (synopsis "Encode and decode entities in HTML with Common Lisp")
       (description "Html-entities is a Common Lisp library that lets you
@@ -13208,16 +12609,16 @@ encode and decode entities in HTML.")
           (base32 "16k19zjkhh7r64vjq371k5jwjs7cdfjz83flh561n4h4v1z89fps"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("bordeaux-threads" ,sbcl-bordeaux-threads)
-         ("iterate" ,sbcl-iterate)
-         ("alexandria" ,sbcl-alexandria)
-         ("anaphora" ,sbcl-anaphora)
-         ("ppcre" ,sbcl-cl-ppcre)
-         ("drakma" ,sbcl-drakma)
-         ("html-entities" ,sbcl-html-entities)
-         ("yason" ,sbcl-yason)
-         ("flexi-streams" ,sbcl-flexi-streams)
-         ("do-urlencode" ,sbcl-do-urlencode)))
+       (list sbcl-bordeaux-threads
+             sbcl-iterate
+             sbcl-alexandria
+             sbcl-anaphora
+             sbcl-cl-ppcre
+             sbcl-drakma
+             sbcl-html-entities
+             sbcl-yason
+             sbcl-flexi-streams
+             sbcl-do-urlencode))
       (home-page "https://github.com/tkych/quicksearch/")
       (synopsis "Search Engine Interface for Common Lisp packages")
       (description "Quicksearch is a search-engine-interface for Common Lisp.
@@ -13252,8 +12653,7 @@ function @code{?} is abbreviation wrapper for @code{quicksearch}.")
           (base32 "1xpnyzksk2xld64b6lw6rw0gn5zxlb77jwna59sd4yl7kxhxlfpf"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("trivia" ,sbcl-trivia)))
+       (list sbcl-alexandria sbcl-trivia))
       (home-page "https://github.com/alex-gutev/agutil/")
       (synopsis "Collection of Common Lisp utilities")
       (description "A collection of Common Lisp utility functions and macros
@@ -13315,11 +12715,9 @@ directly.")
           (base32 "1si68n1j6rpns8jw6ksqjpb937pdl30v7xza8rld7j5vh0jhy2yi"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("closer-mop" ,sbcl-closer-mop)
-         ("symbol-munger" ,sbcl-symbol-munger)))
+       (list sbcl-alexandria sbcl-closer-mop sbcl-symbol-munger))
       (native-inputs
-       `(("lisp-unit2" ,sbcl-lisp-unit2)))
+       (list sbcl-lisp-unit2))
       (home-page "https://github.com/AccelerationNet/collectors/")
       (synopsis "Common lisp library providing collector macros")
       (description "A small collection of common lisp macros to make
@@ -13347,12 +12745,9 @@ collecting values easier.")
         (base32 "10jxj043d2dw5vc0i0lz0lsa4qszn8him5is8jdhl4nsyfcazmky"))))
     (build-system asdf-build-system/sbcl)
     (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("anaphora" ,sbcl-anaphora)
-       ("collectors" ,sbcl-collectors)
-       ("optima" ,sbcl-optima)))
+     (list sbcl-alexandria sbcl-anaphora sbcl-collectors sbcl-optima))
     (native-inputs
-     `(("prove" ,sbcl-prove)))
+     (list sbcl-prove))
     (home-page "https://github.com/alex-gutev/cl-environments")
     (synopsis "Implements the Common Lisp standard environment access API")
     (description
@@ -13384,16 +12779,16 @@ environment access API.")
         (base32 "1602vx6ybp0n8mbrrp6q8397fkkyvhrqpahc302pjdb57qildajz"))))
     (build-system asdf-build-system/sbcl)
     (native-inputs
-     `(("fiveam" ,sbcl-fiveam)))
+     (list sbcl-fiveam))
     (inputs
-     `(("agutil" ,sbcl-agutil)
-       ("alexandria" ,sbcl-alexandria)
-       ("anaphora" ,sbcl-anaphora)
-       ("arrows" ,sbcl-arrows)
-       ("cl-environments" ,sbcl-cl-environments)
-       ("closer-mop" ,sbcl-closer-mop)
-       ("iterate" ,sbcl-iterate)
-       ("optima" ,sbcl-optima)))
+     (list sbcl-agutil
+           sbcl-alexandria
+           sbcl-anaphora
+           sbcl-arrows
+           sbcl-cl-environments
+           sbcl-closer-mop
+           sbcl-iterate
+           sbcl-optima))
     (home-page "https://github.com/alex-gutev/static-dispatch")
     (synopsis "Static generic function dispatch for Common Lisp")
     (description "Static dispatch is a Common Lisp library, inspired by
@@ -13432,14 +12827,14 @@ and comparison operations when used heavily in numeric code.")
          "17kdjqmm2ib347b8lqm3k4kca2j53kr0azb6h7m0v5i157ibndsw"))))
     (build-system asdf-build-system/sbcl)
     (inputs
-     `(("agutil" ,sbcl-agutil)
-       ("anaphora" ,sbcl-anaphora)
-       ("arrows" ,sbcl-arrows)
-       ("cl-environments" ,sbcl-cl-environments)
-       ("introspect-environment" ,sbcl-introspect-environment)
-       ("optima" ,sbcl-optima)))
+     (list sbcl-agutil
+           sbcl-anaphora
+           sbcl-arrows
+           sbcl-cl-environments
+           sbcl-introspect-environment
+           sbcl-optima))
     (native-inputs
-     `(("fiveam" ,sbcl-fiveam)))
+     (list sbcl-fiveam))
     (home-page "https://github.com/alex-gutev/cl-form-types")
     (synopsis "determining the types of Common Lisp forms")
     (description "This library provides functions for determining the value
@@ -13484,7 +12879,7 @@ Macros and symbol-macros are fully expanded and all special forms, except
        ("static-dispatch" ,sbcl-static-dispatch)
        ("trivia" ,sbcl-trivia)))
     (native-inputs
-     `(("prove" ,sbcl-prove)))
+     (list sbcl-prove))
     (arguments
      ;; Tests fail because SBCL head size is not high enough.
      ;; https://github.com/alex-gutev/generic-cl/issues/6
@@ -13521,7 +12916,7 @@ objects, which is extensible to user-defined types.")
           (base32 "0lzljvf343xb6mlh6lni2i27hpm5qd376522mk6hr2pa20vd6rdq"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)))
+       (list sbcl-alexandria))
       (home-page "https://github.com/rpav/defpackage-plus")
       (synopsis "Extensible @code{DEFPACKAGE} variant with version support")
       (description
@@ -13594,10 +12989,8 @@ applications with foreign library dependencies that run some kind of GUI.")
           (base32 "062cnb2dwli6pw3zvv46jfxyxdzcbzwsck5pa6nw03qf1j1hyg3k"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("bordeaux-threads" ,sbcl-bordeaux-threads)
-         ("closer-mop" ,sbcl-closer-mop)
-         ("form-fiddle" ,sbcl-form-fiddle)
-         ("lambda-fiddle" ,sbcl-lambda-fiddle)))
+       (list sbcl-bordeaux-threads sbcl-closer-mop sbcl-form-fiddle
+             sbcl-lambda-fiddle))
       (home-page "https://github.com/Shinmera/deeds")
       (synopsis "Extensible Event Delivery System")
       (description
@@ -13685,13 +13078,13 @@ package.")
           (base32 "146yv0hc4hmk72562ssj2d41143pp84dcbd1h7f4nx1c7hf2bb0d"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("cffi" ,sbcl-cffi)
-         ("cl-json" ,sbcl-cl-json)
-         ("cl-ppcre" ,sbcl-cl-ppcre)
-         ("claw-support" ,sbcl-claw-support)
-         ("local-time" ,sbcl-local-time)
-         ("trivial-features" ,sbcl-trivial-features)))
+       (list sbcl-alexandria
+             sbcl-cffi
+             sbcl-cl-json
+             sbcl-cl-ppcre
+             sbcl-claw-support
+             sbcl-local-time
+             sbcl-trivial-features))
       (home-page "https://github.com/borodust/claw")
       (synopsis "Autowrapper for Common Lisp")
       (description
@@ -13723,9 +13116,7 @@ and lean bindings to C libraries.")
           (base32 "01df3kyf2qs3czi332dnz2s35x2j0fq46vgmsw7wjrrvnqc22mk5"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("cffi" ,sbcl-cffi)
-         ("claw" ,sbcl-claw)))
+       (list sbcl-alexandria sbcl-cffi sbcl-claw))
       (home-page "https://github.com/borodust/claw-utils")
       (synopsis "Utilities for easier autowrapping")
       (description
@@ -13756,10 +13147,9 @@ autowrapping with @code{claw}.")
           (base32 "0ip49hhq32w80qsc7jmspyda5r2rsszvw0mk2r3341cld78sz9ya"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("clunit2" ,sbcl-clunit2)))
+       (list sbcl-alexandria sbcl-clunit2))
       (inputs
-       `(("let-plus" ,sbcl-let-plus)))
+       (list sbcl-let-plus))
       (synopsis "Simple array operations library for Common Lisp")
       (description
        "This library is a collection of functions and macros for manipulating
@@ -13792,17 +13182,17 @@ Common Lisp arrays and performing numerical calculations with them.")
          (patches (search-patches "sbcl-clml-fix-types.patch"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandia" ,sbcl-alexandria)
-         ("array-operations" ,sbcl-array-operations)
-         ("cl-fad" ,sbcl-cl-fad)
-         ("cl-ppcre" ,sbcl-cl-ppcre)
-         ("drakma" ,sbcl-drakma)
-         ("introspect-environment" ,sbcl-introspect-environment)
-         ("iterate" ,sbcl-iterate)
-         ("lparallel" ,sbcl-lparallel)
-         ("parse-number" ,sbcl-parse-number)
-         ("split-sequence" ,sbcl-split-sequence)
-         ("trivial-garbage" ,sbcl-trivial-garbage)))
+       (list sbcl-alexandria
+             sbcl-array-operations
+             sbcl-cl-fad
+             sbcl-cl-ppcre
+             sbcl-drakma
+             sbcl-introspect-environment
+             sbcl-iterate
+             sbcl-lparallel
+             sbcl-parse-number
+             sbcl-split-sequence
+             sbcl-trivial-garbage))
       (synopsis "Common Lisp machine learning library")
       (description
        "CLML (Common Lisp Machine Learning) is a high performance and large
@@ -13830,7 +13220,7 @@ scale statistical machine learning package")
           (base32 "1rvyh0srgd81kvbzmq4ysd9y6c0qdwh23naqxc9asw1vh7fq08x1"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (synopsis
        "Convert coordinates between latitude/longitude and UTM or UPS")
       (description
@@ -13863,9 +13253,9 @@ Polar Stereographic).")
           (base32 "0ckvn4hg3wwivzavhfashb6fap4a1q10l8krhbng8bdb54ac10sz"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (inputs
-       `(("utm-ups" ,sbcl-utm-ups)))
+       (list sbcl-utm-ups))
       (synopsis
        "Convert coordinates between latitude/longitude and MGRS")
       (description
@@ -13897,7 +13287,7 @@ latitude/longitude and MGRS.")
           (base32 "02p990zprhjvifmsfk8yh3frvz6xyw26ikzxvzglqdixbal36nr3"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (synopsis
        "Convert coordinates between latitude/longitude and Maidenhead")
       (description
@@ -13929,7 +13319,7 @@ latitude/longitude and Maidenhead locator system.")
           (base32 "1lnfhp6z6kc8l605zp4siyjiw74y1h4bdq3jfizi084v505wxhgr"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (synopsis
        "Convert coordinates between latitude/longitude and Open Location Code")
       (description
@@ -13987,7 +13377,7 @@ latitude/longitude and Open Location Code.")
           (base32 "1ph3xjqilvinvgr9q3w47zxqyz1sqnq030nlx7kgkkv8j3bnqk7a"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("sbcl-regex" ,sbcl-regex)))
+       (list sbcl-regex))
       (home-page "https://github.com/sharplispers/clawk")
       (synopsis "Common Lisp AWK")
       (description
@@ -14000,41 +13390,6 @@ latitude/longitude and Open Location Code.")
 (define-public ecl-clawk
   (sbcl-package->ecl-package sbcl-clawk))
 
-(define-public sbcl-check-it
-  (let ((commit "b79c9103665be3976915b56b570038f03486e62f"))
-    (package
-      (name "sbcl-check-it")
-      (version (git-version "0.1.0" "1" commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/DalekBaldwin/check-it/")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32 "1kbjwpniffdpv003igmlz5r0vy65m7wpfnhg54fhwirp1227hgg7"))))
-      (build-system asdf-build-system/sbcl)
-      (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("closer-mop" ,sbcl-closer-mop)
-         ("optima" ,sbcl-optima)))
-      (native-inputs
-       `(("stefil" ,sbcl-stefil)))
-      (home-page "https://github.com/arclanguage/Clamp")
-      (synopsis "Randomized specification-based testing for Common Lisp")
-      (description
-       "This is a randomized property-based testing library for Common Lisp.
-Rather than being a full-fledged general test framework in its own right, it's
-designed to embed randomized tests in whatever framework you like.")
-      (license license:llgpl))))
-
-(define-public cl-check-it
-  (sbcl-package->cl-source-package sbcl-check-it))
-
-(define-public ecl-check-it
-  (sbcl-package->ecl-package sbcl-check-it))
-
 (define-public sbcl-clamp
   (let ((commit "02b8f3953e5753cc61a719807c82f3795cd28fe1"))
     (package
@@ -14099,7 +13454,7 @@ not so easy to copy (ssyntax, argument destructuring, etc.).")
           (base32 "08mpkl5ij5sjfsyn8pq2kvsvpvyvr7ha1r8g1224fa667b8k2q85"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("lift" ,sbcl-lift)))
+       (list sbcl-lift))
       (home-page "http://common-lisp.net/project/trivial-shell/")
       (synopsis "Common Lisp access to the shell")
       (description
@@ -14129,8 +13484,7 @@ It's independent of the implementation and operating system.")
           (base32 "012ry02djnqyvvs61wbbqj3saz621w2l9gczrywdxhi5p4ycx318"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("trivial-shell" ,sbcl-trivial-shell)
-         ("named-readtables" ,sbcl-named-readtables)))
+       (list sbcl-trivial-shell sbcl-named-readtables))
       (home-page "https://github.com/Neronus/Clesh")
       (synopsis "Embed shell code in Common Lisp")
       (description
@@ -14162,8 +13516,7 @@ backtick.  It has been forked from SHELISP.")
           (base32 "04wnxcgk40x8p0gxnz9arv1a5wasdqrdxa8c4p5v7r2mycfps6jj"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("bordeaux-threads" ,sbcl-bordeaux-threads)
-         ("trivial-timeout" ,sbcl-trivial-timeout)))
+       (list sbcl-bordeaux-threads sbcl-trivial-timeout))
       (home-page "https://github.com/rpav/trivial-channels")
       (synopsis "Common Lisp simple thread-safe channels with timeout")
       (description
@@ -14192,7 +13545,7 @@ backtick.  It has been forked from SHELISP.")
           (base32 "06f46zr3gp3wlm2kgxna24qd2gpr1v89x9fynh1x5vrw6c6hqjcv"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("drakma" ,sbcl-drakma)))
+       (list sbcl-drakma))
       (home-page "https://github.com/eudoxia0/trivial-download/")
       (synopsis "Download files from Common Lisp")
       (description
@@ -14221,8 +13574,7 @@ from Common Lisp.  It provides a progress bar.")
         (base32 "0lkraw0dwh4is4x5sp5rjrw6f93m0gr9849abrbi12s25ws7jbw4"))))
     (build-system asdf-build-system/sbcl)
     (native-inputs
-     `(("osicat" ,sbcl-osicat)
-       ("prove" ,sbcl-prove)))
+     (list sbcl-osicat sbcl-prove))
     (home-page "https://github.com/cbeo/gtwiwtg/")
     (synopsis "Naive generators for Common Lisp")
     (description
@@ -14253,8 +13605,7 @@ and understandable.")
           (base32 "1ldb4qhmx431n3lsq71ynwb9ybazbfqd55icjbhi06mj52ngndir"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("bordeaux-threads" ,sbcl-bordeaux-threads)
-         ("documentation-utils-extensions" ,sbcl-documentation-utils-extensions)))
+       (list sbcl-bordeaux-threads sbcl-documentation-utils-extensions))
       (home-page "https://github.com/sirherrbatka/cl-progress-bar/")
       (synopsis "Progress bars in Common Lisp")
       (description
@@ -14315,12 +13666,9 @@ whichever package you switch to.")
           (base32 "0n369n6b7y1m49biccnnr7svymjdsk8sksrkqrn3mj21vgv7s7bg"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("cffi-grovel" ,sbcl-cffi)
-         ("rove" ,sbcl-rove)
-         ("cl-ppcre" ,sbcl-cl-ppcre)
-         ("bordeaux-threads" ,sbcl-bordeaux-threads)))
+       (list sbcl-cffi sbcl-rove sbcl-cl-ppcre sbcl-bordeaux-threads))
       (inputs
-       `(("cffi" ,sbcl-cffi)))
+       (list sbcl-cffi))
       (home-page "https://github.com/fukamachi/supertrace")
       (synopsis "Improved Common Lisp tracing for debugging and profiling")
       (description
@@ -14350,7 +13698,7 @@ for debugging and profiling real world applications.")
           (base32 "0fbzqbpm2ixz85555krl36kbbbjyn699vdj6k383khi3g9y629fa"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)))
+       (list sbcl-alexandria))
       (home-page "http://shinmera.github.io/trivial-benchmark/")
       (synopsis "Easy to use benchmarking system for Common Lisp")
       (description
@@ -14358,7 +13706,7 @@ for debugging and profiling real world applications.")
 statistical data for it.  On SBCL this includes the data from @code{time}, for
 all other implementations just the @code{real-time} and @code{run-time} data.
 However, you can extend the system by adding your own @code{metrics} to it, or
-even by adding additional statistical @code{compute}ations. ")
+even by adding additional statistical @code{compute}ations.")
       (license license:zlib))))
 
 (define-public cl-trivial-benchmark
@@ -14383,9 +13731,7 @@ even by adding additional statistical @code{compute}ations. ")
           (base32 "17kai1anbkk5dj5sbrsin2fc019cmcbglb900db60v38myj0y0wf"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("cl-ppcre" ,sbcl-cl-ppcre)
-         ("parenscript" ,sbcl-parenscript)
-         ("named-readtables" ,sbcl-named-readtables)))
+       (list sbcl-cl-ppcre sbcl-parenscript sbcl-named-readtables))
       (home-page "https://github.com/ahungry/glyphs/")
       (synopsis "Reduce Common Lisp verbosity")
       (description
@@ -14415,12 +13761,12 @@ Lisp, inspired by BODOL (@url{https://github.com/bodil/BODOL}).")
       (base32 "186v95wgsj2hkxdw2jl9x1w4fddjclp7arp0rrd9vf5ly8h8sbf3"))))
    (build-system asdf-build-system/sbcl)
    (inputs
-    `(("drakma" ,sbcl-drakma)
-      ("alexandria" ,sbcl-alexandria)
-      ("cxml" ,sbcl-cxml)
-      ("ironclad" ,sbcl-ironclad)
-      ("puri" ,sbcl-puri)
-      ("cl-base64" ,sbcl-cl-base64)))
+    (list sbcl-drakma
+          sbcl-alexandria
+          sbcl-cxml
+          sbcl-ironclad
+          sbcl-puri
+          sbcl-cl-base64))
    (synopsis "Work with Amazon S3 and Amazon CloudFront from Common Lisp")
    (description "This is ZS3, a library for working with Amazon's Simple Storage
 Service (S3) and CloudFront service from Common Lisp.")
@@ -14491,7 +13837,7 @@ library are feedforward neural networks trained using backpropagation.")
           (base32 "1774jy8hzbi6nih3sq6vchk66f7g8w86dwgpbvljyfzcnkcaz6ql"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (inputs
        `(("cffi" ,sbcl-cffi)
          ("cl-octet-streams" ,sbcl-cl-octet-streams)
@@ -14503,9 +13849,7 @@ library are feedforward neural networks trained using backpropagation.")
              (lambda* (#:key inputs #:allow-other-keys)
                (substitute* "src/libzstd.lisp"
                  (("libzstd\\.so")
-                  (string-append (assoc-ref inputs "zstd-lib")
-                                 "/lib/libzstd.so")))
-               #t)))))
+                  (search-input-file inputs "/lib/libzstd.so"))))))))
       (synopsis "Common Lisp library for Zstandard (de)compression")
       (description
        "This Common Lisp library provides functions for Zstandard
@@ -14641,7 +13985,7 @@ bringing dynamism to class definition.")
           (base32 "0p6ysa92fk34bhxpw7bycbfgw150fv11z9x8jr9xb4lh8cm2hvp6"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("alexandria" ,sbcl-alexandria)))
+       (list sbcl-alexandria))
       (inputs
        `(("cffi" ,sbcl-cffi)
          ("ppcre" ,sbcl-cl-ppcre)
@@ -14688,10 +14032,7 @@ determination library using @emph{magic} numbers.")
           (base32 "16ag48sswgimr1fzr582vhym4s03idpd4lkydw5s58lv80ibpim8"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("serapeum" ,sbcl-serapeum)
-         ("ppcre" ,sbcl-cl-ppcre)
-         ("unicode" ,sbcl-cl-unicode)))
+       (list sbcl-alexandria sbcl-serapeum sbcl-cl-ppcre sbcl-cl-unicode))
       (home-page "https://github.com/ruricolist/cl-shlex")
       (synopsis "Common Lisp lexical analyzer for shell-like syntaxes")
       (description
@@ -14707,10 +14048,10 @@ standard library.")
   (sbcl-package->cl-source-package sbcl-shlex))
 
 (define-public sbcl-cmd
-  (let ((commit "8ace7fb45f2ecf0eefae28583ee36c941d142179"))
+  (let ((commit "b0b79adf1214dbec082f3dd2274a72a0ff58efd7"))
     (package
       (name "sbcl-cmd")
-      (version (git-version "0.0.1" "4" commit))
+      (version (git-version "0.0.1" "5" commit))
       (source
        (origin
          (method git-fetch)
@@ -14719,7 +14060,7 @@ standard library.")
                (commit commit)))
          (file-name (git-file-name name version))
          (sha256
-          (base32 "1da8sa0fsvsdivnx2s9m6jbb7yszrnkqqcxrn1sszp7k6iwnnkgi"))))
+          (base32 "0kk29vydmi1fyhpbwy3mrsg3bhvx0478r6r7jcsfkr3ci2h8w8a1"))))
       (build-system asdf-build-system/sbcl)
       (inputs
        `(("alexandria" ,sbcl-alexandria)
@@ -14778,15 +14119,14 @@ be usable from multi-threaded programs.")
           (base32 "1c46q9lmzqv14z80d3fwdawgn3pn4922x31fyqvsvbcjm4hd16fb"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("cffi" ,sbcl-cffi)
-         ("osicat" ,sbcl-osicat)
-         ("ppcre" ,sbcl-cl-ppcre)
-         ("split-sequence" ,sbcl-split-sequence)
-         ("trivial-features" ,sbcl-trivial-features)))
+       (list sbcl-alexandria
+             sbcl-cffi
+             sbcl-osicat
+             sbcl-cl-ppcre
+             sbcl-split-sequence
+             sbcl-trivial-features))
       (native-inputs
-       `(("cl-fad" ,sbcl-cl-fad)
-         ("prove" ,sbcl-prove)))
+       (list sbcl-cl-fad sbcl-prove))
       (home-page "https://github.com/fourier/ppath")
       (synopsis "Common Lisp's implementation of the Python's os.path module")
       (description
@@ -14821,9 +14161,9 @@ corresponding OS system functions are called.")
           (base32 "0v6h8lk17iqv1qkxgqjyzn8gi6v0hvq2vmfbb01md3zjvjqxn6lr"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("named-readtables" ,sbcl-named-readtables)))
+       (list sbcl-named-readtables))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (home-page "https://github.com/williamyaoh/trivial-escapes")
       (synopsis "C-style escape directives for Common Lisp")
       (description
@@ -14855,12 +14195,10 @@ It provides four readtables.  The default one lets you write strings like this:
           (base32 "0ha36bhg474vr76vfhr13szc8cfdj1ickg92k1icz791bqaqg67p"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("command-line-arguments" ,sbcl-command-line-arguments)
-         ("trivial-gray-streams" ,sbcl-trivial-gray-streams)))
+       (list sbcl-alexandria sbcl-command-line-arguments
+             sbcl-trivial-gray-streams))
       (native-inputs
-       `(("trivial-escapes" ,sbcl-trivial-escapes)
-         ("rove" ,sbcl-rove)))
+       (list sbcl-trivial-escapes sbcl-rove))
       (home-page "https://github.com/yitzchak/cl-indentify")
       (synopsis "Code beautifier for Common Lisp")
       (description
@@ -14890,7 +14228,7 @@ source files.")
           (base32 "1lyrglc3h1if44gxd9cwv90wa90nrdjvb7fry39b1xn8ywdfa7di"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("acclimation" ,sbcl-acclimation)))
+       (list sbcl-acclimation))
       (home-page "https://github.com/s-expressionists/Concrete-Syntax-Tree")
       (synopsis "Parse Common Lisp code into a concrete syntax tree")
       (description
@@ -14935,7 +14273,7 @@ the origin.")
        ("closer-mop" ,sbcl-closer-mop)
        ("concrete-syntax-tree" ,sbcl-concrete-syntax-tree)))
     (native-inputs
-     `(("fiveam" ,sbcl-fiveam)))
+     (list sbcl-fiveam))
     (arguments
      '(#:asd-systems '("eclector"
                        "eclector-concrete-syntax-tree")))
@@ -15011,7 +14349,7 @@ objects themselves.")
           (base32 "00p5c053kmgq4ks6l9mxsqz6g3bjcybvkvj0bh3r90qgpkaawm1p"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("documentation-utils" ,sbcl-documentation-utils)))
+       (list sbcl-documentation-utils))
       (home-page "https://shinmera.github.io/system-locale/")
       (synopsis "Get the system's locale and language settings in Common Lisp")
       (description
@@ -15042,7 +14380,7 @@ display messages in the user's native language.")
           (base32 "0py176ibmsc01n5r0q1bs1ykqf5jwdbh8kx0j1a814l9y51241v0"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("documentation-utils" ,sbcl-documentation-utils)))
+       (list sbcl-documentation-utils))
       (home-page "https://shinmera.github.io/language-codes/")
       (synopsis "Map ISO language codes to language names in Common Lisp")
       (description
@@ -15072,9 +14410,8 @@ language name mapping.")
           (base32 "13y5jskx8n2b7kimpfarr8v777w3b7zj5swg1b99nj3hk0843ixw"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("documentation-utils" ,sbcl-documentation-utils)
-         ("language-codes" ,sbcl-language-codes)
-         ("system-locale" ,sbcl-system-locale)))
+       (list sbcl-documentation-utils sbcl-language-codes
+             sbcl-system-locale))
       (home-page "https://shinmera.github.io/multilang-documentation/")
       (synopsis "Add multiple languages support to Common Lisp documentation")
       (description
@@ -15135,25 +14472,25 @@ and @code{doseq*}.")
           (base32 "0si69xfzi769dprwfy7gp1x3bl7lxz6d4n98sa26w9r41wvay5ja"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("babel" ,sbcl-babel)
-         ("bordeaux-threads" ,sbcl-bordeaux-threads)
-         ("cl-base64" ,sbcl-cl-base64)
-         ("cl-indentify" ,sbcl-cl-indentify)
-         ("closer-mop" ,sbcl-closer-mop)
-         ("dissect" ,sbcl-dissect)
-         ("eclector" ,sbcl-eclector)
-         ("ironclad" ,sbcl-ironclad)
-         ("iterate" ,sbcl-iterate)
-         ("multilang-documentation" ,sbcl-multilang-documentation)
-         ("puri" ,sbcl-puri)
-         ("pzmq" ,sbcl-pzmq)
-         ("shasht" ,sbcl-shasht)
-         ("static-vectors" ,sbcl-static-vectors)
-         ("trivial-do" ,sbcl-trivial-do)
-         ("trivial-garbage" ,sbcl-trivial-garbage)
-         ("trivial-gray-streams" ,sbcl-trivial-gray-streams)
-         ("trivial-mimes" ,sbcl-trivial-mimes)))
+       (list sbcl-alexandria
+             sbcl-babel
+             sbcl-bordeaux-threads
+             sbcl-cl-base64
+             sbcl-cl-indentify
+             sbcl-closer-mop
+             sbcl-dissect
+             sbcl-eclector
+             sbcl-ironclad
+             sbcl-iterate
+             sbcl-multilang-documentation
+             sbcl-puri
+             sbcl-pzmq
+             sbcl-shasht
+             sbcl-static-vectors
+             sbcl-trivial-do
+             sbcl-trivial-garbage
+             sbcl-trivial-gray-streams
+             sbcl-trivial-mimes))
       (home-page "https://yitzchak.github.io/common-lisp-jupyter/")
       (synopsis "Common Lisp kernel for Jupyter")
       (description
@@ -15252,7 +14589,7 @@ adaptations.")
           (base32 "1kdxfnhh9fz34j8qs7pn7mwjz3v33q4v9nh0hqkyzraq5xs2j3f4"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("trivial-features" ,sbcl-trivial-features)))
+       (list sbcl-trivial-features))
       (home-page "https://github.com/snmsts/daemon")
       (synopsis "Daemonize Common Lisp processes")
       (description
@@ -15282,9 +14619,7 @@ on UNIX like platforms.")
           (base32 "0n8q818ry2shggjfhp8gjby8v5mla9pg97c5g19pcglpnwim7a74"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("cffi" ,sbcl-cffi)
-         ("documentation-utils" ,sbcl-documentation-utils)
-         ("trivial-features" ,sbcl-trivial-features)))
+       (list sbcl-cffi sbcl-documentation-utils sbcl-trivial-features))
       (home-page "https://shinmera.github.io/file-attributes/")
       (synopsis "Access to common file attributes in Common Lisp")
       (description
@@ -15351,7 +14686,7 @@ sequences based on the Python difflib module.")
           (base32 "1varnijivzd4jpimn1cz8p5ks713zzha5cgl4vmb0xr8ahravwzb"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("cl-difflib" ,sbcl-cl-difflib)))
+       (list sbcl-cl-difflib))
       (home-page "https://github.com/wiseman/cl-html-diff")
       (synopsis "Generate a human-readable diff of two HTML documents")
       (description
@@ -15366,8 +14701,8 @@ HTML documents.")
   (sbcl-package->cl-source-package sbcl-cl-html-diff))
 
 (define-public sbcl-tooter
-  (let ((commit "b1639d8a58dfe8020c82ed36697b7a668ef41a09")
-        (revision "2"))
+  (let ((commit "ec97bee3431c55913078e532daae81eb0fd90372")
+        (revision "3"))
     (package
       (name "sbcl-tooter")
       (version (git-version "1.0.0" revision commit))
@@ -15379,13 +14714,11 @@ HTML documents.")
                (commit commit)))
          (file-name (git-file-name "tooter" version))
          (sha256
-          (base32 "0842lbj9ml6qxdm5xvhdbm87wyrvrq7bxawa6i8wk80n8lnvmhdw"))))
+          (base32 "02vpjaq38d6laaqmsana9f13c38xzr0xwy05fcfkmzdhh0kllpkv"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("sbcl-cl-ppcre" ,sbcl-cl-ppcre)
-         ("sbcl-documentation-utils" ,sbcl-documentation-utils)
-         ("sbcl-drakma" ,sbcl-drakma)
-         ("sbcl-yason" ,sbcl-yason)))
+       (list sbcl-cl-ppcre sbcl-documentation-utils sbcl-drakma
+             sbcl-yason))
       (synopsis "Common Lisp client library for Mastodon instances")
       (description
        "This is a Common Lisp library implementing the full v1 REST API
@@ -15400,8 +14733,8 @@ protocol for Mastodon.")
   (sbcl-package->cl-source-package sbcl-tooter))
 
 (define-public sbcl-croatoan
-  (let ((commit "a577951d8dd607f828d6efb3290b4e8ac9f1e654")
-        (revision "3"))
+  (let ((commit "cf875137a23ed4efbfde63e52691f1b544d55d17")
+        (revision "4"))
     (package
       (name "sbcl-croatoan")
       (version (git-version "0.0.1" revision commit))
@@ -15413,7 +14746,7 @@ protocol for Mastodon.")
                (commit commit)))
          (file-name (git-file-name "croatoan" version))
          (sha256
-          (base32 "1y7a13mzy0cz19pw0xvqwca1s7frfaqryaqwl1mrq7iz84sw0fcw"))))
+          (base32 "0dvp8irimlnnvz2m4lnmxp19xbam1yfri3d1i9qqml968i08xcwb"))))
       (build-system asdf-build-system/sbcl)
       (arguments
        '(#:phases
@@ -15459,7 +14792,7 @@ the ncurses terminal library.")
           (base32 "0my1fsgi2rjaqkpk934f2bjy63pmnj7faza3fzvnk6k3l66y19nk"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (synopsis "Common Lisp library to make histograms")
       (description "This is a Common Lisp library to make histograms using
 UTF-8 block characters.")
@@ -15489,13 +14822,10 @@ UTF-8 block characters.")
           (base32 "1knd3n4mpzkc97i1znbas32pscd30416isvmx2pjmgvar6k93pl5"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("lisp-unit2" ,sbcl-lisp-unit2)))
+       (list sbcl-lisp-unit2))
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("anaphora" ,sbcl-anaphora)
-         ("closer-mop" ,sbcl-closer-mop)
-         ("interpol" ,sbcl-cl-interpol)
-         ("iterate" ,sbcl-iterate)))
+       (list sbcl-alexandria sbcl-anaphora sbcl-closer-mop
+             sbcl-cl-interpol sbcl-iterate))
       (synopsis
        "Common lisp library to unify access to dictionary-like structures")
       (description
@@ -15527,7 +14857,7 @@ dictionary-like data structures.")
           (base32 "1agkrj3ymskzc3c7pxbrj123d1kygjqcls145m0ap3i07q96hh1r"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("sxql" ,sbcl-sxql)))
+       (list sbcl-sxql))
       (synopsis "Build and compose SXQL queries dynamically")
       (description
        "This is a Common Lisp library to build and compose SXQL queries
@@ -15542,11 +14872,11 @@ dynamically.")
   (sbcl-package->cl-source-package sbcl-sxql-composer))
 
 (define-public sbcl-cl-i18n
-  (let ((commit "fa0aa5bef8dfbdf2d72f7cc9f49e848ccbb567aa")
+  (let ((commit "4216fe9fc7b54033c0d881dbb835b7af786365ed")
         (revision "1"))
     (package
       (name "sbcl-cl-i18n")
-      (version (git-version "0.5.0" revision commit))
+      (version (git-version "0.5.1" revision commit))
       (source
        (origin
          (method git-fetch)
@@ -15555,12 +14885,10 @@ dynamically.")
                (commit commit)))
          (file-name (git-file-name "cl-i18n" version))
          (sha256
-          (base32 "1hpsdbb3hd79bzbrnbqgk2j3f0ispxvk91snp08fm2z3f1sds5as"))))
+          (base32 "1mdhfkk61djj39vgnns5y1cssd12h0m1cfwd21m8xpa2l3rqvmgf"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("babel" ,sbcl-babel)
-         ("cl-ppcre-unicode" ,sbcl-cl-ppcre-unicode)))
+       (list sbcl-alexandria sbcl-babel sbcl-cl-ppcre-unicode))
       (synopsis "Internationalisation framework for Common Lisp")
       (description
        "This is a Gettext-style internationalisation framework for Common
@@ -15591,9 +14919,7 @@ Lisp.")
           (base32 "0c0m0ar04jn7qf2v8c4sivamlzki03r13rnxy8b3n27rh9r6hgin"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("cl-base64" ,sbcl-cl-base64)
-         ("flexi-stream" ,sbcl-flexi-streams)
-         ("ironclad" ,sbcl-ironclad)))
+       (list sbcl-cl-base64 sbcl-flexi-streams sbcl-ironclad))
       (synopsis "Collection of common cryptography functions")
       (description
        "This is a collection of common cryptography functions for Common
@@ -15624,13 +14950,9 @@ Lisp.")
           (base32 "04if61wigylsmn996rbfl8ylsd0d9hzdmg7p2wiglncibjzcl5k9"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("json-streams" ,sbcl-json-streams)
-         ("split-sequence" ,sbcl-split-sequence)
-         ("stefil" ,sbcl-stefil)))
+       (list sbcl-json-streams sbcl-split-sequence sbcl-stefil))
       (inputs
-       `(("cl-ppcre" ,sbcl-cl-ppcre)
-         ("flexi-stream" ,sbcl-flexi-streams)
-         ("string-case" ,sbcl-string-case)))
+       (list sbcl-cl-ppcre sbcl-flexi-streams sbcl-string-case))
       (synopsis "HTML5 parser for Common Lisp")
       (description "This a Common Lisp library to parse HTML5 documents.")
       (home-page "https://github.com/rotatef/cl-html5-parser")
@@ -15659,10 +14981,9 @@ Lisp.")
           (base32 "0q1lh3sa6mkjr5gcdkgimkpc29rgf9cjhv90f61h8ridj28grq0h"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam"   ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (inputs
-       `(("anaphora" ,sbcl-anaphora)
-         ("babel" ,sbcl-babel)))
+       (list sbcl-anaphora sbcl-babel))
       (synopsis "RFC 3986 percent-encoding library")
       (description
        "This is a Common Lisp library providing RFC 3986 percent-encoding.")
@@ -15692,9 +15013,7 @@ Lisp.")
         (base32 "0vza9gj9q42nzb5v8aj22lmn4aqx9vrddsb5a343nbwfz89hbh9x"))))
      (build-system asdf-build-system/sbcl)
      (inputs
-      `(("alexandria" ,sbcl-alexandria)
-        ("cffi" ,sbcl-cffi)
-        ("cl-ppcre" ,sbcl-cl-ppcre)))
+      (list sbcl-alexandria sbcl-cffi sbcl-cl-ppcre))
      (home-page "https://notabug.org/cage/cl-mount-info.git")
      (synopsis "Library to get information about mounted filesystems")
      (description
@@ -15731,7 +15050,7 @@ related C functions to get information about the mounted file system.")
              (lambda* (#:key inputs #:allow-other-keys)
                (substitute* "src/unix/cl-diskspace-list-all-disks-with-df.lisp"
                  (("grep")
-                  (string-append (assoc-ref inputs "grep") "/bin/grep")))
+                  (search-input-file inputs "/bin/grep")))
                (substitute* "src/unix/cl-diskspace-list-all-disks-with-df.lisp"
                  (("/bin/df")
                   (which "df")))
@@ -15768,7 +15087,7 @@ line tool @code{df} and get disk space information using @code{statvfs}.")
         (base32 "0sdaff9hpsx7bpkkkqavmxmrrlc2d61gmqjjgn8xchncng4a0rf8"))))
     (build-system asdf-build-system/sbcl)
     (inputs
-     `(("cffi" ,sbcl-cffi)))
+     (list sbcl-cffi))
     (home-page "https://github.com/muyinliu/cl-cpus")
     (synopsis "Common Lisp feature to get number of CPUs")
     (description
@@ -15950,8 +15269,7 @@ immediately loaded.")
         (base32 "0r3vnl9lywn4ksy34apcv6j825qp7l1naddawr14v4lwacndb80v"))))
      (build-system asdf-build-system/sbcl)
      (inputs
-      `(("bodge-utilities" ,sbcl-bodge-utilities)
-        ("rtg-math" ,sbcl-rtg-math)))
+      (list sbcl-bodge-utilities sbcl-rtg-math))
      (home-page "https://github.com/borodust/bodge-math")
      (synopsis "Common Lisp core math utilities of BODGE library collection")
      (description
@@ -15982,10 +15300,9 @@ immediately loaded.")
          (base32 "02nd1x6y1akp1ymv1y4z9ympwbnpd1drwi4f86xbjszxqff6jyj8"))))
      (build-system asdf-build-system/sbcl)
      (native-inputs
-      `(("trivial-features" ,sbcl-trivial-features)))
+      (list sbcl-trivial-features))
      (inputs
-      `(("cffi" ,sbcl-cffi)
-        ("sbcl-alexandria" ,sbcl-alexandria)))
+      (list sbcl-cffi sbcl-alexandria))
      (home-page "https://github.com/borodust/bodge-blobs-support")
      (synopsis "Common Lisp utilities for blob packages")
      (description
@@ -16027,7 +15344,7 @@ compiled foreign library collection.")
       '(#:tests? #f
         #:asd-files '("cl-conspack.asd")))
      (native-inputs
-      `(("checkl" ,sbcl-checkl)))
+      (list sbcl-checkl))
      (inputs
       `(("alexandria" ,sbcl-alexandria)
         ("closer-mop" ,sbcl-closer-mop)
@@ -16071,14 +15388,13 @@ compiled foreign library collection.")
              (lambda* (#:key inputs #:allow-other-keys)
                (substitute* "gl/library.lisp"
                  (("libGL.so" all)
-                  (string-append (assoc-ref inputs "mesa") "/lib/" all)))
+                  (search-input-file inputs "/lib/libGL.so")))
                (substitute* "glu/library.lisp"
                  (("libGLU.so" all)
-                  (string-append (assoc-ref inputs "glu") "/lib/" all)))
+                  (search-input-file inputs "/lib/libGLU.so")))
                (substitute* "glut/library.lisp"
                  (("libglut.so" all)
-                  (string-append (assoc-ref inputs "freeglut") "/lib/" all)))
-               #t)))))
+                  (search-input-file inputs "/lib/libglut.so"))))))))
       (inputs
        `(("alexandria" ,sbcl-alexandria)
          ("cffi" ,sbcl-cffi)
@@ -16116,12 +15432,12 @@ OpenGL (Mesa), GLU and GLUT (FreeGLUT) APIs using CFFI.")
           (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)))
+       (list sbcl-cffi
+             sbcl-cl-opengl
+             sbcl-glsl-packing
+             sbcl-golden-utils
+             sbcl-static-vectors
+             sbcl-varjo))
       (home-page "https://git.mfiano.net/mfiano/shadow")
       (synopsis "Management system for OpenGL shader programs")
       (description
@@ -16155,9 +15471,7 @@ buffer object types (UBO, SSBO currently).")
           (base32 "04vyh2j00zdpb8ryxr8g81wjcmqlz9wrn55r3cypcj4qg970r5wi"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("golden-utils" ,sbcl-golden-utils)
-         ("shadow" ,sbcl-shadow)
-         ("varjo" ,sbcl-varjo)))
+       (list sbcl-golden-utils sbcl-shadow sbcl-varjo))
       (home-page "https://git.mfiano.net/mfiano/umbra")
       (synopsis "Common Lisp library of reusable GPU shader functions")
       (description
@@ -16205,30 +15519,32 @@ abstract, final and singleton classes.")
   (sbcl-package->cl-source-package sbcl-abstract-classes))
 
 (define-public sbcl-coalton
-  (let ((commit "4a42ffb4222fde3abfd1b50d96e455ff2eef9fe8")
-        (revision "1"))
+  (let ((commit "012f6c8db6d73df16f7729090a12a929fb82db17")
+        (revision "2"))
     (package
       (name "sbcl-coalton")
-      (version (git-version "0.0.0" revision commit))
+      (version (git-version "0.0.1" revision commit))
       (source
        (origin
          (method git-fetch)
          (uri (git-reference
-               (url "https://github.com/stylewarning/coalton")
+               (url "https://github.com/coalton-lang/coalton")
                (commit commit)))
          (file-name (git-file-name "coalton" version))
          (sha256
-          (base32 "0aidwwam7cnhb3p9212zbv5w2dl6kr5iklzanypzr1a9lqaxwdlk"))))
+          (base32 "1j3d12vyyn7y9nz2an4xmaa5si0jbxbwq7y61hq2b7vk376zvw18"))))
       (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")
+       (list sbcl-fiasco))
+      (inputs
+       (list sbcl-alexandria
+             sbcl-float-features
+             sbcl-fset
+             sbcl-global-vars
+             sbcl-json-streams
+             sbcl-serapeum
+             sbcl-trivia))
+      (home-page "https://coalton-lang.github.io")
       (synopsis "Dialect of ML in Common Lisp")
       (description
        "Coalton is a dialect of ML embedded in Common Lisp.  It emphasizes
@@ -16259,8 +15575,7 @@ allows one to gradually make their programs safer.")
           (base32 "13kkajkva2shm19fvn4yashsw18l6imv2rmy3hmpcky7g5ay7bv3"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("array-utils" ,sbcl-array-utils)
-         ("lquery" ,sbcl-lquery)))
+       (list sbcl-array-utils sbcl-lquery))
       (home-page "https://shinmera.github.io/clip/")
       (synopsis "Common Lisp HTML templating engine")
       (description
@@ -16294,7 +15609,7 @@ lQuery.")
           (base32 "1zm4bf6gajpgmhr7zwf7600zlaf8fs1fcyzabqsh2ma2crkgqdxq"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("parachute" ,sbcl-parachute)))
+       (list sbcl-parachute))
       (home-page "https://shinmera.github.io/pathname-utils/")
       (synopsis "Collection of utilities to help with pathname operations")
       (description
@@ -16326,11 +15641,8 @@ handling the accessing of files on the underlying system however.")
         (base32 "0pnqflgz410zydc1ivwnd8hcl24bgr7x12yjzr7g4lq3ibc8y97b"))))
      (build-system asdf-build-system/sbcl)
      (inputs
-      `(("documentation-utils" ,sbcl-documentation-utils)
-        ("fast-io" ,sbcl-fast-io)
-        ("ieee-floats" ,sbcl-ieee-floats)
-        ("static-vectors" ,sbcl-static-vectors)
-        ("trivial-garbage" ,sbcl-trivial-garbage)))
+      (list sbcl-documentation-utils sbcl-fast-io sbcl-ieee-floats
+            sbcl-static-vectors sbcl-trivial-garbage))
      (home-page "https://shirakumo.github.io/terrable/")
      (synopsis "Parser library for Terragen TER terrain files")
      (description
@@ -16392,7 +15704,7 @@ color palette for a GUI or web page.")
           (base32 "099h0rrdzxnlmn8avi72mg2dl0kccp7w01b2p9nwyy4b8yr32cir"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("flexi-streams" ,sbcl-flexi-streams)))
+       (list sbcl-flexi-streams))
       (home-page "https://github.com/eugeneia/cl-qprint/")
       (synopsis "Implementation of the quoted-printable encoding")
       (description
@@ -16425,11 +15737,9 @@ described in RFC 2045 (see @url{http://tools.ietf.org/html/rfc2045}).")
           (base32 "0qn8if0fj6vzc897pqqqs0m1y107gmzqngpqhqmwrcsp1ckj5k0v"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("ppcre" ,sbcl-cl-ppcre)
-         ("cl-base64" ,sbcl-cl-base64)
-         ("cl-qprint" ,sbcl-cl-qprint)))
+       (list sbcl-cl-ppcre sbcl-cl-base64 sbcl-cl-qprint))
       (native-inputs
-       `(("rove" ,sbcl-rove)))
+       (list sbcl-rove))
       (home-page "https://github.com/eugeneia/cl-qprint/")
       (synopsis "Read and print MIME content in Common Lisp")
       (description
@@ -16505,14 +15815,10 @@ in Common Lisp.")
         (base32 "15vrp1kayhjb5c1vc9x8wlm8rimk73vpa7yc101cf0gsg1fjazl6"))))
     (build-system asdf-build-system/sbcl)
     (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("ppcre" ,sbcl-cl-ppcre)))
+     (list sbcl-alexandria sbcl-cl-ppcre))
     (native-inputs
-     `(("fiveam" ,sbcl-fiveam)
-       ("cl-csv" ,sbcl-cl-csv)
-       ("parse-float" ,sbcl-parse-float)
-       ("lispbuilder-sdl" ,sbcl-lispbuilder-sdl)
-       ("lparallel" ,sbcl-lparallel)))
+     (list sbcl-fiveam sbcl-cl-csv sbcl-parse-float sbcl-lispbuilder-sdl
+           sbcl-lparallel))
     (home-page "https://github.com/privet-kitty/dufy")
     (synopsis "Color library for Common Lisp")
     (description
@@ -16526,33 +15832,6 @@ color spaces, which supports many color models.")
 (define-public cl-dufy
   (sbcl-package->cl-source-package sbcl-dufy))
 
-(define-public sbcl-unit-test
-  (let ((commit "266afaf4ac091fe0e8803bac2ae72d238144e735")
-        (revision "1"))
-    (package
-      (name "sbcl-unit-test")
-      (version (git-version "0.0.0" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/hanshuebner/unit-test")
-               (commit commit)))
-         (file-name (git-file-name "unit-test" version))
-         (sha256
-          (base32 "11hpksz56iqkv7jw25p2a8r3n9dj922fyarn16d98589g6hdskj9"))))
-      (build-system asdf-build-system/sbcl)
-      (home-page "https://github.com/hanshuebner/unit-test")
-      (synopsis "Unit-testing framework for Common Lisp")
-      (description "This is a unit-testing framework for Common Lisp.")
-      (license license:unlicense))))
-
-(define-public ecl-unit-test
-  (sbcl-package->ecl-package sbcl-unit-test))
-
-(define-public cl-unit-test
-  (sbcl-package->cl-source-package sbcl-unit-test))
-
 (define-public sbcl-bknr-datastore
   (let ((commit "c98d44f47cc88d19ff91ca3eefbd9719a8ace022")
         (revision "1"))
@@ -16630,10 +15909,9 @@ for Common Lisp.")
           (base32 "0ncsxrybnx0pjsndv3j8w4lphlpcsld8sxg3c5b46fb3a8nd4ssf"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (inputs
-       `(("clsql" ,sbcl-clsql)
-         ("ironclad" ,sbcl-ironclad)))
+       (list sbcl-clsql sbcl-ironclad))
       (home-page "https://github.com/charje/cl-authentic")
       (synopsis "User/password management for Common Lisp applications")
       (description "Authentic provides a light-weight and extendible
@@ -16665,9 +15943,9 @@ confirmation tokens, and user authentication.")
           (base32 "0qc7m5brhpwi531rgmlaj1c609by533a1ia5hv8f90ilm8ksmw3l"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("parachute" ,sbcl-parachute)))
+       (list sbcl-parachute))
       (inputs
-       `(("documentation-utils" ,sbcl-documentation-utils)))
+       (list sbcl-documentation-utils))
       (home-page "https://shinmera.github.io/3d-vectors/")
       (synopsis "Utility library implementing 2D, 3D, and 4D vectors")
       (description
@@ -16699,10 +15977,9 @@ offers them both in non-modifying and modifying versions where applicable.")
           (base32 "10q9c96gqzq6k8n89agy0khgimmnsn4s69171m3vhghqa2yv5n6v"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("parachute" ,sbcl-parachute)))
+       (list sbcl-parachute))
       (inputs
-       `(("3d-vectors" ,sbcl-3d-vectors)
-         ("documentation-utils" ,sbcl-documentation-utils)))
+       (list sbcl-3d-vectors sbcl-documentation-utils))
       (home-page "https://shinmera.github.io/3d-matrices/")
       (synopsis "Utility library implementing 2x2, 3x3, 4x4 and NxM matrices")
       (description
@@ -16777,15 +16054,13 @@ application fail and be unable to do so using its standard UI.")
           (base32 "0as5796yazchq1qkna3srxlz5v7cf7ffny9cbqi41wsa2s20vbh9"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("cl-ppcre" ,sbcl-cl-ppcre)
-         ("documentation-utils" ,sbcl-documentation-utils)
-         ("parse-float" ,sbcl-parse-float)
-         ("trivial-indent" ,sbcl-trivial-indent)))
+       (list sbcl-cl-ppcre sbcl-documentation-utils sbcl-parse-float
+             sbcl-trivial-indent))
       (home-page "https://shirakumo.github.io/glsl-toolkit/")
       (synopsis "Parser for OpenGL Shader Language source files")
       (description
-       "This package provides a Common Lisp system collecting tools written to
-allow to wrangle OpenGL Shader Language (GLSL) source files.")
+       "This package provides Common Lisp system collecting tools written to
+wrangle OpenGL Shader Language (GLSL) source files.")
       (license license:zlib))))
 
 (define-public ecl-glsl-toolkit
@@ -16811,9 +16086,7 @@ allow to wrangle OpenGL Shader Language (GLSL) source files.")
           (base32 "1ls1pij7dvb65g4nam7nvik1218jvfk5iplr48vy290fw3lq7v98"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("array-utils" ,sbcl-array-utils)
-         ("bordeaux-threads" ,sbcl-bordeaux-threads)
-         ("dissect" ,sbcl-dissect)))
+       (list sbcl-array-utils sbcl-bordeaux-threads sbcl-dissect))
       (home-page "https://shinmera.github.io/simple-tasks/")
       (synopsis "Simple task scheduling framework")
       (description "This is a task scheduling framework for Common Lisp.")
@@ -16842,9 +16115,7 @@ allow to wrangle OpenGL Shader Language (GLSL) source files.")
           (base32 "0bw1887i7396lqg75qvmgjfzz4xbiq9w5dp8wxdgrcsm0qwlraw7"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("bordeaux-threads" ,sbcl-bordeaux-threads)
-         ("simple-tasks" ,sbcl-simple-tasks)
-         ("trivial-features" ,sbcl-trivial-features)))
+       (list sbcl-bordeaux-threads sbcl-simple-tasks sbcl-trivial-features))
       (home-page "https://shinmera.github.io/trivial-main-thread/")
       (synopsis "Compatibility library to run things in the main thread")
       (description
@@ -16941,10 +16212,9 @@ all kind of typesetting applications.")
           (base32 "01mh20s5gj0lajq45anxji77ykq1wcg72mn1y9a1k8i7q1ainjlr"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("parachute" ,sbcl-parachute)))
+       (list sbcl-alexandria sbcl-parachute))
       (inputs
-       `(("trivial-do" ,sbcl-trivial-do)))
+       (list sbcl-trivial-do))
       (home-page "https://yitzchak.github.io/shasht/")
       (synopsis "Common Lisp JSON reading and writing library")
       (description
@@ -17011,9 +16281,8 @@ Common Lisp.")
            (add-after 'unpack 'patch-libev-lib-path
              (lambda* (#:key inputs #:allow-other-keys)
                (substitute* "src/lev.lisp"
-                 (("libev.so" all)
-                  (string-append (assoc-ref inputs "libev")
-                                        "/lib/" all))))))))
+                 (("libev.so" _)
+                  (search-input-file inputs "/lib/libev.so"))))))))
       (inputs
        `(("cffi" ,sbcl-cffi)
          ("libev" ,libev)))
@@ -17105,8 +16374,7 @@ is built on top of the @code{libev} event library.")
           (base32 "0cia3721im04q73dfkd688d8splgpz03qa4h8s3r39kar4w3xll2"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("cl-quickcheck" ,sbcl-cl-quickcheck)
-         ("flexi-streams" ,sbcl-flexi-streams)))
+       (list sbcl-cl-quickcheck sbcl-flexi-streams))
       (home-page "https://github.com/rotatef/json-streams")
       (synopsis "Common Lisp library for reading and writing JSON")
       (description
@@ -17154,7 +16422,7 @@ building block for higher level libraries.")
        ;;
        `(#:tests? #f))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (inputs
        `(("cl-ppcre" ,sbcl-cl-ppcre)
          ("collectors" ,sbcl-collectors)
@@ -17189,11 +16457,9 @@ or GOLDEN-UTILS.")
           (base32 "1pzhamgni6k5hi6bbvlb3dm659pcllrrr3vhhn3rpjn238zxg5ar"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("stefil" ,sbcl-stefil)))
+       (list sbcl-stefil))
       (inputs
-       `(("flexi-streams" ,sbcl-flexi-streams)
-         ("split-sequence" ,sbcl-split-sequence)
-         ("yacc" ,sbcl-cl-yacc)))
+       (list sbcl-flexi-streams sbcl-split-sequence sbcl-cl-yacc))
       (home-page "https://github.com/rotatef/gettext")
       (synopsis "Common Lisp implementation of Gettext")
       (description
@@ -17315,11 +16581,9 @@ CL-I18N and CL-L10N.")
           (base32 "1ybznf4y5lda6bn163jcvj281qzhm24dfcwhbgxmm5n6f27gdccl"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("clunit" ,sbcl-clunit)))
+       (list sbcl-clunit))
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("anaphora" ,sbcl-anaphora)
-         ("let-plus" ,sbcl-let-plus)))
+       (list sbcl-alexandria sbcl-anaphora sbcl-let-plus))
       (home-page "https://github.com/tpapp/cl-slice")
       (synopsis "Array slices for Common Lisp")
       (description
@@ -17349,22 +16613,22 @@ CL-I18N and CL-L10N.")
           (base32 "1lk2ypm3sacf60h96a7hv9jwjlxkl4k40yzdalmqdg548vrd1jjm"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
-      (inputs
-       `(("access" ,sbcl-access)
-         ("alexandria" ,sbcl-alexandria)
-         ("anaphora" ,sbcl-anaphora)
-         ("babel" ,sbcl-babel)
-         ("cl-locale" ,sbcl-cl-locale)
-         ("cl-ppcre" ,sbcl-cl-ppcre)
-         ("cl-slice" ,sbcl-cl-slice)
-         ("closer-mop" ,sbcl-closer-mop)
-         ("gettext" ,sbcl-gettext)
-         ("iterate" ,sbcl-iterate)
-         ("local-time" ,sbcl-local-time)
-         ("parser-combinators" ,sbcl-parser-combinators)
-         ("split-sequence" ,sbcl-split-sequence)
-         ("trivial-backtrace" ,sbcl-trivial-backtrace)))
+       (list sbcl-fiveam))
+      (inputs
+       (list sbcl-access
+             sbcl-alexandria
+             sbcl-anaphora
+             sbcl-babel
+             sbcl-cl-locale
+             sbcl-cl-ppcre
+             sbcl-cl-slice
+             sbcl-closer-mop
+             sbcl-gettext
+             sbcl-iterate
+             sbcl-local-time
+             sbcl-parser-combinators
+             sbcl-split-sequence
+             sbcl-trivial-backtrace))
       (home-page "https://mmontone.github.io/djula/")
       (synopsis "Common Lisp port of the Django templating language")
       (description
@@ -17395,9 +16659,7 @@ Django with a syntax similar to Python Jinja2.")
           (base32 "1akz9ggh33x2cq3h0f1cd0p632v1mbagv3dzsb0r10bwg9lh3nmv"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("documentation-utils" ,sbcl-documentation-utils)
-         ("form-fiddle" ,sbcl-form-fiddle)
-         ("lambda-fiddle" ,sbcl-lambda-fiddle)))
+       (list sbcl-documentation-utils sbcl-form-fiddle sbcl-lambda-fiddle))
       (home-page "https://shinmera.github.io/for/")
       (synopsis "Extensible iteration macro library")
       (description
@@ -17430,12 +16692,12 @@ require code-walking and is easier to extend.")
           (base32 "00nm3sjngbflj2gd5q0xs2m136w4kix6krww23nk64pkkyq2fs86"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("3d-vectors" ,sbcl-3d-vectors)
-         ("array-utils" ,sbcl-array-utils)
-         ("documentation-utils" ,sbcl-documentation-utils)
-         ("for" ,sbcl-for)
-         ("lambda-fiddle" ,sbcl-lambda-fiddle)
-         ("trivial-garbage" ,sbcl-trivial-garbage)))
+       (list sbcl-3d-vectors
+             sbcl-array-utils
+             sbcl-documentation-utils
+             sbcl-for
+             sbcl-lambda-fiddle
+             sbcl-trivial-garbage))
       (home-page "https://shinmera.github.io/flare/")
       (synopsis "Easy particle systems with fine grained control")
       (description
@@ -17467,8 +16729,7 @@ any existing or future application.")
           (base32 "08vsvqv3768bwb2y8mwxbw5wyqzzwqr7rd004r6gafdgf9p9mcx3"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("bordeaux-threads" ,sbcl-bordeaux-threads)
-         ("documentation-utils" ,sbcl-documentation-utils)))
+       (list sbcl-bordeaux-threads sbcl-documentation-utils))
       (home-page "https://shinmera.github.io/simple-inferiors/")
       (synopsis "Common Lisp library to use inferior processes")
       (description
@@ -17501,10 +16762,8 @@ running into parallelism problems when having to change directory.")
           (base32 "181aqpj4zkfk1aavj5jw8rym6gw4ma3gd64z2h5fpryabgmwk236"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("simple-inferiors" ,sbcl-simple-inferiors)
-         ("lambda-fiddle" ,sbcl-lambda-fiddle)
-         ("cl-ppcre" ,sbcl-cl-ppcre)
-         ("documentation-utils" ,sbcl-documentation-utils)))
+       (list sbcl-simple-inferiors sbcl-lambda-fiddle sbcl-cl-ppcre
+             sbcl-documentation-utils))
       (home-page "https://shinmera.github.io/legit/")
       (synopsis "Interface to the git binary")
       (description
@@ -17588,8 +16847,8 @@ and even allows the generic visualisation of graphs in this format.")
            (add-after 'unpack 'patch-glfw-lib-path
              (lambda* (#:key inputs #:allow-other-keys)
                (substitute* "glfw-bindings.lisp"
-                 (("libglfw.so.3" all)
-                  (string-append (assoc-ref inputs "glfw") "/lib/" all))))))))
+                 (("libglfw.so.3" _)
+                  (search-input-file inputs "/lib/libglfw.so.3"))))))))
       (inputs
        `(("alexandria" ,sbcl-alexandria)
          ("cffi" ,sbcl-cffi)
@@ -17683,7 +16942,7 @@ coverage.")
         ("split-sequence" ,sbcl-split-sequence)
         ("varjo" ,sbcl-varjo)))
      (propagated-inputs
-      `(("quickproject" ,sbcl-quickproject)))
+      (list sbcl-quickproject))
      (home-page "https://github.com/cbaggers/cepl")
      (synopsis "Development playground to work with OpenGL")
      (description
@@ -17723,11 +16982,8 @@ window it creates as just another output for your graphics, analogous to how
         (base32 "1hfmh4vj271jdilir97qs6nqbi5nmn5alyls0w3d3xxqwi6ffqjs"))))
      (build-system asdf-build-system/sbcl)
      (inputs
-      `(("alexandria" ,sbcl-alexandria)
-        ("bordeaux-threads" ,sbcl-bordeaux-threads)
-        ("log4cl" ,sbcl-log4cl)
-        ("closer-mop" ,sbcl-closer-mop)
-        ("trivial-garbage" ,sbcl-trivial-garbage)))
+      (list sbcl-alexandria sbcl-bordeaux-threads sbcl-log4cl
+            sbcl-closer-mop sbcl-trivial-garbage))
      (home-page "https://stmx.org/")
      (synopsis "High performance Transactional Memory for Common Lisp")
      (description
@@ -17775,7 +17031,7 @@ resolving the tension between granularity and concurrency.")
         (base32 "0hqikgzic7kjq2n1d924yldfm30qz67cmsk6gghi9cbmxkwdlwp8"))))
      (build-system asdf-build-system/sbcl)
      (native-inputs
-      `(("hu.dwim.stefil" ,sbcl-hu.dwim.stefil)))
+      (list sbcl-hu.dwim.stefil))
      (home-page "https://github.com/phoe/binding-arrows")
      (synopsis "Threading macros based on binding anonymous variables")
      (description
@@ -17812,9 +17068,9 @@ impossible to merge back upstream.")
           (base32 "0mp5jdqq0aamdhgnvw149cqqi3zg7dkkibp25qi4rafw1fnpd40z"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("documentation-utils" ,sbcl-documentation-utils)))
+       (list sbcl-documentation-utils))
       (native-inputs
-       `(("parachute" ,sbcl-parachute)))
+       (list sbcl-parachute))
       (home-page "https://shinmera.github.io/atomics/")
       (synopsis "Common Lisp portability layer for atomic operations")
       (description
@@ -17829,41 +17085,6 @@ implementations offer.")
 (define-public cl-atomics
   (sbcl-package->cl-source-package sbcl-atomics))
 
-(define-public sbcl-cl-mock
-  ;; .asd version only got updated recently, despired the old GitHug "1.0.1" release.
-  (let ((commit "7988dca2093358911b67597a2cd1570c785dfe76"))
-    (package
-      (name "sbcl-cl-mock")
-      (version (git-version "1.0.1" "1" commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/Ferada/cl-mock/")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32 "0f40wikcf783jx26ip0nnhwjjfjvjiw7njqsqrb6kaphc8bgw0i1"))))
-      (build-system asdf-build-system/sbcl)
-      (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("closer-mop" ,sbcl-closer-mop)
-         ("trivia" ,sbcl-trivia)))
-      (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
-      (home-page "https://github.com/Ferada/cl-mock")
-      (synopsis "Mocking functions for Common Lisp testing")
-      (description
-       "This small library provides a way to replace the actual implementation
-of either regular or generic functions with mocks.")
-      (license license:agpl3))))
-
-(define-public ecl-cl-mock
-  (sbcl-package->ecl-package sbcl-cl-mock))
-
-(define-public cl-mock
-  (sbcl-package->cl-source-package sbcl-cl-mock))
-
 (define-public sbcl-cl-murmurhash
   ;; No release.
   (let ((commit "5433f5e95f1cce63a81259a471150834c6a59364")
@@ -17884,9 +17105,9 @@ of either regular or generic functions with mocks.")
            "0251r0mpjm0y3qsm4lm7ncvrkxvgwc53spdm1p2mpayhvkkqqsws"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("babel" ,sbcl-babel)))
+       (list sbcl-babel))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (synopsis "32-bit version of Murmurhash3 for Common Lisp")
       (description
        "This Common Lisp package offers an implementation of the 32-bit
@@ -17917,9 +17138,9 @@ non-crytographic hashing algorithm.")
           (base32 "1ycbd73ykfj5j9sdhlzamyv18qbjj6xqf7fhm4fa0nsyr6sr3rf5"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("cl-murmurhash" ,sbcl-cl-murmurhash)))
+       (list sbcl-cl-murmurhash))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (home-page "https://github.com/danshapero/cl-hamt")
       (synopsis "Dictionary & set data structure using hash array-mapped tries")
       (description
@@ -17942,25 +17163,28 @@ Common Lisp based on the hash array-mapped trie data structure.")
        (method git-fetch)
        (uri (git-reference
              (url "https://github.com/mdbergmann/cl-gserver")
-             (commit version)))
+
+             ;; The "1.8.0" tag must have been moved from
+             ;; c83d92a66102faa514b546029a9bd2078b95dc0f to
+             ;; 90832f02f0556463e332cd055c3c1be58f323aea, 22 commits later!
+             (commit "c83d92a66102faa514b546029a9bd2078b95dc0f")))
        (file-name (git-file-name "cl-gserver" version))
        (sha256
         (base32 "1bfz7z8v417dvsp1jz76ir3ihcs8g7zis2d56xx1dpzqzjd95g7z"))))
     (build-system asdf-build-system/sbcl)
     (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("bordeaux-threads" ,sbcl-bordeaux-threads)
-       ("lparallel" ,sbcl-lparallel)
-       ("cl-speedy-queue" ,sbcl-cl-speedy-queue)
-       ("log4cl" ,sbcl-log4cl)
-       ("str" ,sbcl-cl-str)
-       ("blackbird" ,sbcl-blackbird)
-       ("cl-hamt" ,sbcl-cl-hamt)
-       ("binding-arrows" ,sbcl-binding-arrows)
-       ("atomics" ,sbcl-atomics)))
+     (list sbcl-alexandria
+           sbcl-bordeaux-threads
+           sbcl-lparallel
+           sbcl-cl-speedy-queue
+           sbcl-log4cl
+           sbcl-cl-str
+           sbcl-blackbird
+           sbcl-cl-hamt
+           sbcl-binding-arrows
+           sbcl-atomics))
     (native-inputs
-     `(("fiveam" ,sbcl-fiveam)
-       ("mock" ,sbcl-cl-mock)))
+     (list sbcl-fiveam sbcl-cl-mock))
     (home-page "https://mdbergmann.github.io/cl-gserver/index.html")
     (synopsis "Actor framework for easy access to state and async operations")
     (description
@@ -17975,6 +17199,125 @@ computing and event based message handling.")
 (define-public cl-gserver
   (sbcl-package->cl-source-package sbcl-cl-gserver))
 
+(define-public sbcl-assoc-utils
+  (let ((commit "74af16a3c0f10ad35e406167de02984744fc7854")
+        (revision "1"))
+    (package
+      (name "sbcl-assoc-utils")
+      (version (git-version "0.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/fukamachi/assoc-utils")
+               (commit commit)))
+         (file-name (git-file-name "cl-assoc-utils" version))
+         (sha256
+          (base32 "1yac1v7zmdxj0p6rvwrrhyqvy7yjfhmqbchkwqhhr89gpjvvaick"))))
+      (build-system asdf-build-system/sbcl)
+      (arguments
+       ;; All test cases pass, but tests successfully fail at the end:
+       ;;
+       ;; Summary:
+       ;;   All 1 file passed.
+       ;; Unhandled ASDF/FIND-COMPONENT:MISSING-DEPENDENCY in thread
+       ;; #<SB-THREAD:THREAD "main thread" RUNNING {1001858103}>:
+       ;;   Component ASSOC-UTILS-ASD::ASSOC-UTILS-TEST not found, required by
+       ;;   #<SYSTEM "assoc-utils">
+       `(#:tests? #f))
+      (native-inputs
+       (list sbcl-prove))
+      (home-page "https://github.com/fukamachi/assoc-utils")
+      (synopsis "Utilities for manipulating association lists in Common Lisp")
+      (description
+       "@code{assoc-utils} provides utilities for manipulating association
+lists in Common Lisp.")
+      (license license:public-domain))))
+
+(define-public cl-assoc-utils
+  (sbcl-package->cl-source-package sbcl-assoc-utils))
+
+(define-public ecl-assoc-utils
+  (sbcl-package->ecl-package sbcl-assoc-utils))
+
+(define-public sbcl-let-over-lambda
+  (let ((commit "481b2e3ab4646186451dfdd2062113203287d520")
+        (revision "1"))
+    (package
+      (name "sbcl-let-over-lambda")
+      (version (git-version "1.0.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/thephoeron/let-over-lambda")
+               (commit commit)))
+         (file-name (git-file-name "cl-let-over-lambda" version))
+         (sha256
+          (base32 "114p781lwi9lrbzg27dnkymz9m4cvm1k430j7qsykwd0b58d8qbk"))))
+      (build-system asdf-build-system/sbcl)
+      (arguments
+       ;; All test cases pass, but tests successfully fail at the end:
+       ;;
+       ;; Summary:
+       ;; All 1 file passed.
+       ;; Unhandled ASDF/FIND-COMPONENT:MISSING-DEPENDENCY in thread
+       ;; #<SB-THREAD:THREAD "main thread" RUNNING {1001860103}>:
+       ;;   Component LET-OVER-LAMBDA-ASD::LET-OVER-LAMBDA-TEST not found,
+       ;;   required by #<SYSTEM "let-over-lambda">
+       `(#:tests? #f))
+      (inputs
+       `(("alexandria" ,sbcl-alexandria)
+         ("cl-ppcre" ,sbcl-cl-ppcre)
+         ("named-readtables" ,sbcl-named-readtables)))
+      (native-inputs
+       (list sbcl-prove))
+      (home-page "https://github.com/thephoeron/let-over-lambda")
+      (synopsis "Macros from Let Over Lambda")
+      (description
+       "This package provides Doug Hoyte's \"Production\" version of macros
+from the Let Over Lambda book, including community updates.")
+      (license license:bsd-3))))
+
+(define-public cl-let-over-lambda
+  (sbcl-package->cl-source-package sbcl-let-over-lambda))
+
+(define-public ecl-let-over-lambda
+  (sbcl-package->ecl-package sbcl-let-over-lambda))
+
+(define-public sbcl-flute
+  (let ((commit "90ebcd6e82f637f49b6de7d625ccc51ec4c92900")
+        (revision "1"))
+    (package
+      (name "sbcl-flute")
+      (version (git-version "0.2-dev" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/ailisp/flute")
+               (commit commit)))
+         (file-name (git-file-name "cl-flute" version))
+         (sha256
+          (base32 "0q8jhp040cvpppyn820mm6a550yfxyr1lar298x13c42mm807f4f"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-assoc-utils sbcl-let-over-lambda))
+      (native-inputs
+       (list sbcl-fiveam))
+      (home-page "https://github.com/ailisp/flute")
+      (synopsis "HTML5 generation library in Common Lisp")
+      (description
+       "Flute is an easily composable HTML5 generation library in Common
+Lisp.")
+      (license license:expat))))
+
+(define-public cl-flute
+  (sbcl-package->cl-source-package sbcl-flute))
+
+(define-public ecl-flute
+  (sbcl-package->ecl-package sbcl-flute))
+
 (define-public sbcl-cl-posix-mqueue
   (let ((commit "8977370c7206d1f62bd1be80f4254af40654b83f")
         (revision "1"))
@@ -18156,41 +17499,41 @@ joysticks, and other such HID devices.")
           (base32 "1vpv9nrpq93fz1c5cyi1hazaaz9ijbrf1l7zwp7gammndr5v028r"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("trivial-features" ,sbcl-trivial-features)))
-      (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("3d-matrices" ,sbcl-3d-matrices)
-         ("3d-vectors" ,sbcl-3d-vectors)
-         ("bordeaux-threads" ,sbcl-bordeaux-threads)
-         ("cl-gamepad" ,sbcl-cl-gamepad)
-         ("cl-jpeg" ,sbcl-cl-jpeg)
-         ("cl-opengl" ,sbcl-cl-opengl)
-         ("cl-ppcre" ,sbcl-cl-ppcre)
-         ("cl-tga" ,sbcl-cl-tga)
-         ("closer-mop" ,sbcl-closer-mop)
-         ("deploy" ,sbcl-deploy)
-         ("fast-io" ,sbcl-fast-io)
-         ("flare" ,sbcl-flare)
-         ("float-features" ,sbcl-float-features)
-         ("flow" ,sbcl-flow)
-         ("for" ,sbcl-for)
-         ("form-fiddle" ,sbcl-form-fiddle)
-         ("glsl-toolkit" ,sbcl-glsl-toolkit)
-         ("ieee-floats" ,sbcl-ieee-floats)
-         ("jsown" ,sbcl-jsown)
-         ("lambda-fiddle" ,sbcl-lambda-fiddle)
-         ("lquery" ,sbcl-lquery)
-         ("messagebox" ,sbcl-messagebox)
-         ("mmap" ,sbcl-mmap)
-         ("pathname-utils" ,sbcl-pathname-utils)
-         ("pngload" ,sbcl-pngload)
-         ("retrospectiff" ,sbcl-retrospectiff)
-         ("static-vectors" ,sbcl-static-vectors)
-         ("terrable" ,sbcl-terrable)
-         ("trivial-garbage" ,sbcl-trivial-garbage)
-         ("trivial-indent" ,sbcl-trivial-indent)
-         ("verbose" ,sbcl-verbose)
-         ("zpng" ,sbcl-zpng)))
+       (list sbcl-trivial-features))
+      (inputs
+       (list sbcl-alexandria
+             sbcl-3d-matrices
+             sbcl-3d-vectors
+             sbcl-bordeaux-threads
+             sbcl-cl-gamepad
+             sbcl-cl-jpeg
+             sbcl-cl-opengl
+             sbcl-cl-ppcre
+             sbcl-cl-tga
+             sbcl-closer-mop
+             sbcl-deploy
+             sbcl-fast-io
+             sbcl-flare
+             sbcl-float-features
+             sbcl-flow
+             sbcl-for
+             sbcl-form-fiddle
+             sbcl-glsl-toolkit
+             sbcl-ieee-floats
+             sbcl-jsown
+             sbcl-lambda-fiddle
+             sbcl-lquery
+             sbcl-messagebox
+             sbcl-mmap
+             sbcl-pathname-utils
+             sbcl-pngload
+             sbcl-retrospectiff
+             sbcl-static-vectors
+             sbcl-terrable
+             sbcl-trivial-garbage
+             sbcl-trivial-indent
+             sbcl-verbose
+             sbcl-zpng))
       (home-page "https://github.com/Shirakumo/trial")
       (synopsis "Common Lisp game engine")
       (description
@@ -18205,6 +17548,86 @@ fit together as required by any particular game.")
 (define-public cl-trial
   (sbcl-package->cl-source-package sbcl-trial))
 
+(define-public sbcl-cl-liballegro
+  (let ((commit "49f632ce97fc4f835bf5d450588793234b980a64")
+        (revision "1"))
+    (package
+      (name "sbcl-cl-liballegro")
+      (version (git-version "0.2.15" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/resttime/cl-liballegro")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0brbr7i342s0gadlnzd3a61w2b9ihhx60l19ararnc2asvyhmz7x"))))
+      (build-system asdf-build-system/sbcl)
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'patch-allegro-lib-path
+             (lambda* (#:key inputs #:allow-other-keys)
+               (let ((allegro-lib-path (string-append
+                                        (assoc-ref inputs "allegro") "/lib/")))
+                 (substitute* "src/library.lisp"
+                   (("lib \".so\"" all)
+                    (string-append "\"" allegro-lib-path "\"" " lib \".so\"")))))))))
+      (inputs
+       `(("allegro" ,allegro)
+         ("cffi" ,sbcl-cffi)
+         ("float-features" ,sbcl-float-features)
+         ("trivial-garbage" ,sbcl-trivial-garbage)
+         ("trivial-main-thread" ,sbcl-trivial-main-thread)))
+      (home-page "https://github.com/resttime/cl-liballegro")
+      (synopsis "Allegro 5 game programming library bindings for Common Lisp")
+      (description
+       "This package provides CFFI bindings and interface to Allegro 5 game
+developing library for Common Lisp.")
+      (license license:zlib))))
+
+(define-public ecl-cl-liballegro
+  (sbcl-package->ecl-package sbcl-cl-liballegro))
+
+(define-public cl-liballegro
+  (sbcl-package->cl-source-package sbcl-cl-liballegro))
+
+(define-public sbcl-alloy
+  (let ((commit "e86e22c2887836ec31cd97e039f0bca5248d8f1c")
+        (revision "1"))
+    (package
+      (name "sbcl-alloy")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Shirakumo/alloy")
+               (commit commit)))
+         (file-name (git-file-name "alloy" version))
+         (sha256
+          (base32 "1jsqjr6sf86hcdvnjp4gd10qv0r7kfkr9hmda85irb5lha4q9n7w"))))
+      (build-system asdf-build-system/sbcl)
+      (native-inputs
+       (list sbcl-alexandria sbcl-parachute))
+      (inputs
+       (list sbcl-array-utils sbcl-closer-mop sbcl-documentation-utils))
+      (home-page "https://shirakumo.github.io/alloy/")
+      (synopsis
+       "Common Lisp user interface protocol and toolkit implementation")
+      (description
+       "Alloy is a user interface toolkit.  It is defined through a set of
+protocols that allow for a clear interface, as well as a standardised way to
+integrate Alloy into a target backend.")
+      (license license:zlib))))
+
+(define-public ecl-alloy
+  (sbcl-package->ecl-package sbcl-alloy))
+
+(define-public cl-alloy
+  (sbcl-package->cl-source-package sbcl-alloy))
+
 (define-public sbcl-org-sampler
   (let ((commit "ee135a417750e5b1d810bb9574eb85223cb3038a")
         (revision "1"))
@@ -18222,7 +17645,7 @@ fit together as required by any particular game.")
         (base32 "1dg029in14928qfxvfshyxmdwhzskzhxx3na0zy98ybx69b21qla"))))
      (build-system asdf-build-system/sbcl)
      (inputs
-      `(("iterate" ,sbcl-iterate)))
+      (list sbcl-iterate))
      (home-page "https://github.com/jphmrst/cl-org-sampler")
      (synopsis "Extracting Common Lisp docstrings as Emacs Org-mode documents")
      (description
@@ -18279,10 +17702,11 @@ functions allow Lisp programs to explore the web.")
 
 (define-public sbcl-aserve
   ;; There does not seem to be proper releases.
-  (let ((commit "cac1d6920998ddcbee8310a873414732e707d8e5"))
+  (let ((commit "cac1d6920998ddcbee8310a873414732e707d8e5")
+        (revision "2"))
     (package
       (name "sbcl-aserve")
-      (version (git-version "1.2.50" "1" commit))
+      (version (git-version "1.2.50" revision commit))
       (source
        (origin
          (method git-fetch)
@@ -18293,7 +17717,14 @@ functions allow Lisp programs to explore the web.")
                (commit commit)))
          (file-name (git-file-name "aserve" version))
          (sha256
-          (base32 "0ak6mqp84sjr0a7h5svr16vra4bf4fcx6wpir0n88dc1vjwy5xqa"))))
+          (base32 "0ak6mqp84sjr0a7h5svr16vra4bf4fcx6wpir0n88dc1vjwy5xqa"))
+         (patches (search-patches
+                   ;; Add HTML5 elements to htmlgen.
+                   ;; Adapted from https://github.com/franzinc/aserve/ commits:
+                   ;; * e47bd763: "rfe12668: add HTML 5 elements to htmlgen"
+                   ;; * 7371ce59: "fix bugs in rfe12668 implementation"
+                   "sbcl-aserve-add-HTML-5-elements.patch"
+                   "sbcl-aserve-fix-rfe12668.patch"))))
       (build-system asdf-build-system/sbcl)
       (arguments
        `(#:phases
@@ -18314,7 +17745,8 @@ functions allow Lisp programs to explore the web.")
                #t)))))
       (inputs
        `(("acl-compat" ,sbcl-acl-compat)))
-      (home-page "https://franz.com/support/documentation/current/doc/aserve/aserve.html")
+      (home-page
+       "https://franz.com/support/documentation/current/doc/aserve/aserve.html")
       (synopsis "AllegroServe, a web server written in Common Lisp")
       (description
        "The server part of AllegroServe can be used either as a standalone web
@@ -18328,11 +17760,11 @@ functions allow Lisp programs to explore the web.")
   (sbcl-package->cl-source-package sbcl-aserve))
 
 (define-public sbcl-yxorp
-  (let ((commit "d2e8f9304549e47ae5c7fa35a6b114804603eac9")
-        (revision "1"))
+  (let ((commit "c306898a467995e123a22316c9b79fcac442415b")
+        (revision "4"))
     (package
       (name "sbcl-yxorp")
-      (version (git-version "0" revision commit))
+      (version (git-version "0.4" revision commit))
       (source
        (origin
          (method git-fetch)
@@ -18341,15 +17773,19 @@ functions allow Lisp programs to explore the web.")
                (commit commit)))
          (file-name (git-file-name "cl-yxorp" version))
          (sha256
-          (base32 "1zz1j678vzwkf817h2z0pf0fcyf4mldv4hiv1wyam58hd4bcrjsw"))))
+          (base32 "0ll1s9w29yhhgqssgiw58fcapw4n040gkvpz4sxwv3q2v60rbidj"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("cl+ssl" ,sbcl-cl+ssl)
-         ("cl-binding-arrows" ,sbcl-binding-arrows)
-         ("cl-str" ,sbcl-cl-str)
-         ("cl-usocket" ,sbcl-usocket)
-         ("flexi-streams" ,sbcl-flexi-streams)
-         ("trivial-garbage" ,sbcl-trivial-garbage)))
+       (list sbcl-chipz
+             sbcl-chunga
+             sbcl-cl+ssl
+             sbcl-binding-arrows
+             sbcl-cl-str
+             sbcl-usocket
+             sbcl-flexi-streams
+             sbcl-rutils
+             sbcl-salza2
+             sbcl-trivial-garbage))
       (home-page "https://github.com/charje/cl-yxorp")
       (synopsis
        "Reverse proxy server written in and configurable in Common Lisp")
@@ -18417,9 +17853,7 @@ language).")
           (base32 "0wv3j13fj73gigriw5r9vi920hz05ld7zllsvbxdxvmyfy9k1kly"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("aserve" ,sbcl-aserve)
-         ("kmrcl" ,sbcl-kmrcl)
-         ("xmls" ,sbcl-xmls)))
+       (list sbcl-aserve sbcl-kmrcl sbcl-xmls))
       (home-page "https://github.com/nsrahmad/cl-rss")
       (synopsis "Common Lisp RSS processor")
       (description
@@ -18449,7 +17883,7 @@ RSS feeds data via HTTP.  Currently, it supports RSS versions 0.90,
           (base32 "15zs7mc422ycp1cvcxmirif1dq15mlmv8vzd6l6nzn4qgmph9wz0"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)))
+       (list sbcl-alexandria))
       (home-page "https://github.com/scymtym/trivial-with-current-source-form")
       (synopsis "Help producing better errors for macro users")
       (description
@@ -18484,10 +17918,8 @@ concept of a source-form to report where the error or warning is located.")
           (base32 "1h8m2npdzd2cpnl75pvv4yvvfwxa7kl6qvalc9s0y4yws0kaih3i"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandia" ,sbcl-alexandria)
-         ("trivial-macroexpand-all" ,sbcl-trivial-macroexpand-all)
-         ("trivial-with-current-source-form"
-          ,sbcl-trivial-with-current-source-form)))
+       (list sbcl-alexandria sbcl-trivial-macroexpand-all
+             sbcl-trivial-with-current-source-form))
       (home-page "https://github.com/charje/tailrec")
       (synopsis "Macro to optimize a Common Lisp function for tail recursion")
       (description "Just wrap your Common Lisp function in this macro call and
@@ -18518,10 +17950,7 @@ is not tail recursive.")
           (base32 "1bajb09crzadkirdpd6jrpcc55irjd4sxzavygr25l85pafyhniw"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("cl-str" ,sbcl-cl-str)
-         ("global-vars" ,sbcl-global-vars)
-         ("plump" ,sbcl-plump)
-         ("tailrec" ,sbcl-tailrec)))
+       (list sbcl-cl-str sbcl-global-vars sbcl-plump sbcl-tailrec))
       (home-page
        "https://github.com/interactive-ssr/client/blob/master/main.org")
       (synopsis "The core functionality for ISSR server modules")
@@ -18539,11 +17968,11 @@ and DOM cleaning, to ensure that all remote DOMs are the same.")
   (sbcl-package->cl-source-package sbcl-issr-core))
 
 (define-public sbcl-portal
-  (let ((commit "cc7ba6a54cea6ef63b17dcc6e653d91d9907f59e")
-        (revision "1"))
+  (let ((commit "416589fa04cb239971422a1272acba236c8333be")
+        (revision "2"))
     (package
       (name "sbcl-portal")
-      (version (git-version "1" revision commit))
+      (version (git-version "1.2" revision commit))
       (source
        (origin
          (method git-fetch)
@@ -18552,18 +17981,18 @@ and DOM cleaning, to ensure that all remote DOMs are the same.")
                (commit commit)))
          (file-name (git-file-name "portal" version))
          (sha256
-          (base32 "0fc81iwb4lpp8d2scdwafkixxwkfmq4gqns522zyb4bh6c1rfmwy"))))
+          (base32 "1012jc068qdd8df6mmbn8vmmqlniqm5j2jbyrraw3yz8c13c8280"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("arrows" ,sbcl-arrows)
-         ("cl-base64" ,sbcl-cl-base64)
-         ("cl-str" ,sbcl-cl-str)
-         ("flexi-streams" ,sbcl-flexi-streams)
-         ("global-vars" ,sbcl-global-vars)
-         ("ironclad" ,sbcl-ironclad)
-         ("parse-float" ,sbcl-parse-float)
-         ("usocket" ,sbcl-usocket)))
+       (list sbcl-alexandria
+             sbcl-arrows
+             sbcl-cl-base64
+             sbcl-cl-str
+             sbcl-flexi-streams
+             sbcl-global-vars
+             sbcl-ironclad
+             sbcl-parse-float
+             sbcl-usocket))
       (home-page "https://github.com/charJe/portal")
       (synopsis "Portable Websocket Server for Common Lisp")
       (description
@@ -18597,13 +18026,13 @@ customizable errors.")
           (base32 "0826qrvk64pjspdklns29dv3zhzfhd6k42fq030xajv8a7hkcxda"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("cl-base64" ,sbcl-cl-base64)
-         ("cl-str" ,sbcl-cl-str)
-         ("hunchentoot" ,sbcl-hunchentoot)
-         ("issr-core" ,sbcl-issr-core)
-         ("jonathan" ,sbcl-jonathan)
-         ("plump" ,sbcl-plump)
-         ("portal" ,sbcl-portal)))
+       (list sbcl-cl-base64
+             sbcl-cl-str
+             sbcl-hunchentoot
+             sbcl-issr-core
+             sbcl-jonathan
+             sbcl-plump
+             sbcl-portal))
       (home-page "https://github.com/interactive-ssr/hunchenissr")
       (synopsis "Interactive Server Side Rendering backend for Hunchentoot")
       (description
@@ -18636,10 +18065,8 @@ Javascript.")
           (base32 "1xyqacihxwk4vnffqlg93czmalscglp6sh3bwy3qwb7hdxv6yxz6"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("cl-ppcre" ,sbcl-cl-ppcre)
-         ("cl-unification" ,sbcl-cl-unification)
-         ("hunchenissr" ,sbcl-hunchenissr)))
+       (list sbcl-alexandria sbcl-cl-ppcre sbcl-cl-unification
+             sbcl-hunchenissr))
       (home-page "https://github.com/interactive-ssr/hunchenissr-routes")
       (synopsis "Enable path variables when using Hunchenissr")
       (description
@@ -18655,12 +18082,40 @@ bound to whatever value was in the same place in the URL (as a string).")
 (define-public cl-hunchenissr-routes
   (sbcl-package->cl-source-package sbcl-hunchenissr-routes))
 
+(define-public sbcl-genhash
+  (let ((commit "220ae1af8361dbd2005177f2ee11072b6a33934f")
+        (revision "1"))
+    (package
+      (name "sbcl-genhash")
+      (version (git-version "1.7" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/pnathan/genhash")
+               (commit commit)))
+         (file-name (git-file-name "cl-genhash" version))
+         (sha256
+          (base32 "1jnk1fix1zydhy0kn3cvlp6dy0241x7v8ahq001nlr6v152z1cwk"))))
+      (build-system asdf-build-system/sbcl)
+      (home-page "https://github.com/pnathan/genhash")
+      (synopsis "Generic hash tables for Common Lisp")
+      (description
+       "This an implementation of CDR 2: generic hash tables for Common Lisp")
+      (license license:public-domain))))
+
+(define-public cl-genhash
+  (sbcl-package->cl-source-package sbcl-genhash))
+
+(define-public ecl-genhash
+  (sbcl-package->ecl-package sbcl-genhash))
+
 (define-public sbcl-spinneret
   ;; No release since 2019, no tags.
-  (let ((commit "02451b32648eda4e6e4022bbb7f91d9ea71bebbc"))
+  (let ((commit "52709ab953c46b24cbc2f0e3a50ae362916e730c"))
     (package
       (name "sbcl-spinneret")
-      (version (git-version "3.0" "4" commit))
+      (version (git-version "3.0" "5" commit))
       (source
        (origin
          (method git-fetch)
@@ -18669,18 +18124,18 @@ bound to whatever value was in the same place in the URL (as a string).")
                (commit commit)))
          (file-name (git-file-name name version))
          (sha256
-          (base32 "0jllnsi2ibw0gax9szpdrjxvw9qqibydpdbnkf683yfb1d5jlci1"))))
+          (base32 "1wzs0hzlwf0vzk4gb66psqz6gqcf3x7yfpi9gghbil97iz6fyc7z"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("global-vars" ,sbcl-global-vars)
-         ("parenscript" ,sbcl-parenscript)
-         ("cl-markdown" ,sbcl-cl-markdown)
-         ("ppcre" ,sbcl-cl-ppcre)
-         ("serapeum" ,sbcl-serapeum)
-         ("trivial-gray-streams" ,sbcl-trivial-gray-streams)))
+       (list sbcl-alexandria
+             sbcl-global-vars
+             sbcl-parenscript
+             sbcl-cl-markdown
+             sbcl-cl-ppcre
+             sbcl-serapeum
+             sbcl-trivial-gray-streams))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (home-page "https://github.com/ruricolist/spinneret")
       (synopsis "Common Lisp HTML5 generator")
       (description
@@ -18716,6 +18171,39 @@ semantics in Lisp and Parenscript.
 (define-public cl-spinneret
   (sbcl-package->cl-source-package sbcl-spinneret))
 
+(define-public sbcl-path-parse
+  (let ((commit "86183f3752374435f8933394b4c5d8e75a37a113")
+        (revision "1"))
+    (package
+      (name "sbcl-path-parse")
+      (version (git-version "0.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/eudoxia0/path-parse")
+               (commit commit)))
+         (file-name (git-file-name "cl-path-parse" version))
+         (sha256
+          (base32 "10mxm6q62cfpv3hw2w8k968ba8a1xglqdkwlkqs4l4nby3b11aaq"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-split-sequence))
+      (native-inputs
+       (list sbcl-fiveam))
+      (home-page "https://github.com/eudoxia0/path-parse")
+      (synopsis "Parse the PATH environment variable in Common Lisp")
+      (description
+       "This package provides a function to parse the @code{PATH} environment
+variable portably in Common Lisp.")
+      (license license:expat))))
+
+(define-public cl-path-parse
+  (sbcl-package->cl-source-package sbcl-path-parse))
+
+(define-public ecl-path-parse
+  (sbcl-package->ecl-package sbcl-path-parse))
+
 (define-public sbcl-cl-libxml2
   (let ((commit "8d03110c532c1a3fe15503fdfefe82f60669e4bd"))
     (package
@@ -18743,9 +18231,10 @@ semantics in Lisp and Parenscript.
          ("libxml2" ,libxml2)
          ("libxslt" ,libxslt)))
       (native-inputs
-       `(("lift" ,sbcl-lift)))
+       (list sbcl-lift))
       (arguments
-       `(#:phases
+       `(#:tests? #f ; FIXME: Tests get stuck indefinitly
+         #:phases
          (modify-phases %standard-phases
            (add-after 'unpack 'fix-paths
              (lambda* (#:key inputs outputs #:allow-other-keys)
@@ -18802,6 +18291,39 @@ child nodes enumeration, etc.
 (define-public cl-libxml2
   (sbcl-package->cl-source-package sbcl-cl-libxml2))
 
+(define-public sbcl-pileup
+  (let ((commit "f269473a570a8e55881082545ee63cfe5c7d3e72")
+        (revision "1"))
+    (package
+      (name "sbcl-pileup")
+      (version (git-version "1.0.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/nikodemus/pileup")
+               (commit commit)))
+         (file-name (git-file-name "cl-pileup" version))
+         (sha256
+          (base32 "01gvshpxil0ggjgfmgcymbgmpsfaxy6aggm0bywkn40rck3038vb"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-alexandria sbcl-bordeaux-threads))
+      (native-inputs
+       (list sbcl-hu.dwim.stefil))
+      (home-page "https://github.com/nikodemus/pileup")
+      (synopsis "Simple thread-safe binary heap implementation for Common Lisp")
+      (description
+       "@code{Pileup} is a portable, performant, and thread-safe binary heap
+for Common Lisp.")
+      (license license:expat))))
+
+(define-public cl-pileup
+  (sbcl-package->cl-source-package sbcl-pileup))
+
+(define-public ecl-pileup
+  (sbcl-package->ecl-package sbcl-pileup))
+
 (define-public sbcl-feeder
   ;; No release.
   (let ((commit "b05f517d7729564575cc809e086c262646a94d34")
@@ -18820,9 +18342,7 @@ child nodes enumeration, etc.
           (base32 "1dpbzhycg50snl3j01c8dh8gdvhfhz0hnfl54xy55a3wbr3m6rp7"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("documentation-utils" ,sbcl-documentation-utils)
-         ("local-time" ,sbcl-local-time)
-         ("plump" ,sbcl-plump)))
+       (list sbcl-documentation-utils sbcl-local-time sbcl-plump))
       (home-page "https://shinmera.github.io/feeder/")
       (synopsis "RSS, Atom and general feed parsing and generating")
       (description
@@ -18837,3 +18357,2022 @@ formats within this framework.")
 
 (define-public cl-feeder
   (sbcl-package->cl-source-package sbcl-feeder))
+
+(define-public sbcl-routes
+  (let ((commit "1b79e85aa653e1ec87e21ca745abe51547866fa9")
+        (revision "1"))
+    (package
+      (name "sbcl-routes")
+      (version (git-version "0.2.5" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/archimag/cl-routes")
+               (commit commit)))
+         (file-name (git-file-name "cl-routes" version))
+         (sha256
+          (base32 "1zpk3cp2v8hm50ppjl10yxr437vv4552r8hylvizglzrq2ibsbr1"))))
+      (build-system asdf-build-system/sbcl)
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'fix-tests
+             (lambda* (#:key inputs #:allow-other-keys)
+               ;; Fix: :FORCE and :FORCE-NOT arguments not allowed in
+               ;; a nested call to ASDF/OPERATE:OPERATE unless
+               ;; identically to toplevel
+               (substitute* "routes.asd"
+                 ((" :force t") "")))))))
+      (inputs
+       `(("iterate" ,sbcl-iterate)
+         ("puri" ,sbcl-puri)
+         ("split-sequence" ,sbcl-split-sequence)))
+      (native-inputs
+       (list sbcl-lift))
+      (home-page "https://github.com/archimag/cl-routes")
+      (synopsis "Rails routes system for Common Lisp")
+      (description
+       "This is a a Common Lisp re-implementation of the Rails routes system
+for mapping URLs.")
+      (license license:llgpl))))
+
+(define-public cl-routes
+  (sbcl-package->cl-source-package sbcl-routes))
+
+(define-public ecl-routes
+  (sbcl-package->ecl-package sbcl-routes))
+
+(define-public sbcl-terminfo
+  (let ((commit "b8b2e3ed786bfcf9f1aa4a264cee2e93135080f5")
+        (revision "1"))
+    (package
+      (name "sbcl-terminfo")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/npatrick04/terminfo")
+               (commit commit)))
+         (file-name (git-file-name "terminfo" version))
+         (sha256
+          (base32 "1nmin9rr6f75xdhxysba66xa1dh62fh27w9ad1cvmj0062armf6b"))))
+      (build-system asdf-build-system/sbcl)
+      (synopsis "Terminfo database front end in Common Lisp")
+      (home-page "https://github.com/npatrick04/terminfo")
+      (description
+        "This is a terminfo database front end in Common Lisp.  The package
+provides a method for determining which capabilities a terminal
+(e.g. \"xterm\") has and methods to compile or put commands to a stream.")
+      (license license:expat))))
+
+(define-public cl-terminfo
+  (sbcl-package->cl-source-package sbcl-terminfo))
+
+(define-public ecl-terminfo
+  (sbcl-package->ecl-package sbcl-terminfo))
+
+(define-public sbcl-conium
+  (let ((commit "089adfd8759ec7973bb6f67b98d7a246e67aeb05")
+        (revision "1"))
+    (package
+      (name "sbcl-conium")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/sharplispers/conium")
+               (commit commit)))
+         (file-name (git-file-name "conium" version))
+         (sha256
+          (base32 "0y31za8xr8734p2pf8mrw1jd1fksh2d4y1p12wwjyn8hxxsvsx1w"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-closer-mop))
+      (home-page "https://github.com/sharplispers/conium")
+      (synopsis "Portability library for debugger- and compiler-related tasks")
+      (description
+       "Conium is a portability library for debugger- and compiler-related
+tasks in Common Lisp.  It is fork of SWANK-BACKEND.")
+      (license license:public-domain))))
+
+(define-public cl-conium
+  (sbcl-package->cl-source-package sbcl-conium))
+
+(define-public ecl-conium
+  (sbcl-package->ecl-package sbcl-conium))
+
+(define-public sbcl-terminal-size
+  (let ((commit "e0b3d56a9dd3366baf2a05d84381da5747a2ef4a")
+        (revision "1"))
+    (package
+      (name "sbcl-terminal-size")
+      (version (git-version "0.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/eudoxia0/terminal-size")
+               (commit commit)))
+         (file-name (git-file-name "cl-terminal-size" version))
+         (sha256
+          (base32 "1212wbadms9jzrqgarpj3d9xh9w4dab8jhx4k2aryqgf116zs42h"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-cffi sbcl-osicat))
+      (native-inputs
+       (list sbcl-fiveam))
+      (home-page "https://github.com/eudoxia0/terminal-size")
+      (synopsis "Get the size of the terminal from Common Lisp")
+      (description
+       "This package provides the @code{terminal-size:size} function to get the
+size of the terminal from Common Lisp.")
+      (license license:expat))))
+
+(define-public cl-terminal-size
+  (sbcl-package->cl-source-package sbcl-terminal-size))
+
+(define-public ecl-terminal-size
+  (sbcl-package->ecl-package sbcl-terminal-size))
+
+(define-public sbcl-cl-readline
+  (let ((commit "8438c9ebd92ccc95ebab9cc9cbe6c72d44fccc58")
+        (revision "1"))
+    (package
+      (name "sbcl-cl-readline")
+      (version (git-version "0.1.2" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/vindarel/cl-readline")
+               (commit commit)))
+         (file-name (git-file-name "cl-readline" version))
+         (sha256
+          (base32 "14iskvqfw71ssaav483vmqw62lrpznysjs800gjjppxs785p1fa0"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       `(("alexandria" ,sbcl-alexandria)
+         ("cffi" ,sbcl-cffi)
+         ("readline" ,readline)))
+      (arguments
+       '(#:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'fix-paths
+             (lambda* (#:key inputs #:allow-other-keys)
+               (substitute* "cl-readline.lisp"
+                 (("libreadline.so")
+                  (string-append (assoc-ref inputs "readline")
+                                 "/lib/libreadline.so"))))))))
+      (home-page "https://github.com/vindarel/cl-readline")
+      (synopsis "Common Lisp bindings to the GNU Readline library")
+      (description
+        "The Readline library provides a set of functions for use by
+applications that allow users to edit command lines as they are typed in.
+Both Emacs and vi editing modes are available.  The Readline library includes
+additional functions to maintain a list of previously-entered command lines, to
+recall and perhaps reedit those lines, and perform csh-like history expansion on
+previous commands.")
+      (license license:gpl3+))))
+
+(define-public cl-readline
+  (sbcl-package->cl-source-package sbcl-cl-readline))
+
+(define-public ecl-cl-readline
+  (sbcl-package->ecl-package sbcl-cl-readline))
+
+(define-public sbcl-generic-comparability
+  (let ((commit "53fc2846319a6eb46b36581e203e1f1542a8acff")
+        (revision "1"))
+    (package
+      (name "sbcl-generic-comparability")
+      (version (git-version "1.0.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/pnathan/generic-comparability")
+               (commit commit)))
+         (file-name (git-file-name "generic-comparability" version))
+         (sha256
+          (base32 "01ma0cwirxarwwmdwflnh8kmysmr2smh5kyvzhb2074ljxg8yq2p"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-alexandria))
+      (native-inputs
+       (list sbcl-fiveam))
+      (home-page "https://github.com/pnathan/generic-comparability")
+      (synopsis "Implementation of cdr-8")
+      (description
+        "GENERIC-COMPARABILITY is an implementation of CDR-8 (Generic Equality
+and Comparison for Common Lisp).  CDR-8 provides an interface for the EQUALS
+function, which is defined as a general equality predicate, as well as a set of
+ordering (COMPARE) functions for comparison.  The semantics are described in
+the CDR-8 standard.")
+      (license license:llgpl))))
+
+(define-public cl-generic-comparability
+  (sbcl-package->cl-source-package sbcl-generic-comparability))
+
+(define-public ecl-generic-comparability
+  (sbcl-package->ecl-package sbcl-generic-comparability))
+
+(define-public sbcl-cl-libyaml
+  (let ((commit "a7fe9f68bddfd00b7ca467b65b3b41b276336843")
+        (revision "1"))
+    (package
+      (name "sbcl-cl-libyaml")
+      (version (git-version "0.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/eudoxia0/cl-libyaml")
+               (commit commit)))
+         (file-name (git-file-name "cl-libyaml" version))
+         (sha256
+          (base32
+           "06pvmackyhq03rjmihpx6w63m6cy8wx78ll5xpwwvd85bgrqq817"))))
+      (build-system asdf-build-system/sbcl)
+      (native-inputs
+       (list sbcl-fiveam))
+      (inputs
+       `(("cffi" ,sbcl-cffi)
+         ("libyaml" ,libyaml)))
+      (arguments
+       '(#:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'fix-paths
+             (lambda* (#:key inputs #:allow-other-keys)
+               (substitute* "src/library.lisp"
+                 (("libyaml.so")
+                  (string-append (assoc-ref inputs "libyaml")
+                                 "/lib/libyaml.so"))))))))
+      (home-page "https://github.com/eudoxia0/cl-libyaml")
+      (synopsis "Libyaml bindings for Common Lisp")
+      (description
+        "This is a binding to the libyaml library.  It's not meant as
+a full library for YAML, just a bare binding with a couple of utility macros.
+For a YAML parser and emitter using this, check out cl-yaml.")
+      (license license:expat))))
+
+(define-public cl-libyaml
+  (sbcl-package->cl-source-package sbcl-cl-libyaml))
+
+(define-public ecl-cl-libyaml
+  (sbcl-package->ecl-package sbcl-cl-libyaml))
+
+(define-public sbcl-cl-yaml
+  (let ((commit "c3202be9a753c51f3bc79538a5a498a8865192aa")
+        (revision "1"))
+    (package
+      (name "sbcl-cl-yaml")
+      (version (git-version "0.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/eudoxia0/cl-yaml")
+               (commit commit)))
+         (file-name (git-file-name "cl-yaml" version))
+         (sha256
+          (base32 "1izjg0v6rf7dh069bbnnr67l30lsqj86wdk7y9ggbgiwh6v9j185"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-alexandria sbcl-cl-libyaml sbcl-cl-ppcre
+             sbcl-parse-number))
+      (native-inputs
+       (list sbcl-cl-fad sbcl-fiveam sbcl-generic-comparability
+             sbcl-trivial-benchmark sbcl-yason))
+      (home-page "https://github.com/eudoxia0/cl-yaml")
+      (synopsis "YAML parser for Common Lisp")
+      (description
+        "This is a YAML parser and emitter for Common Lisp built on top of
+libyaml.")
+      (license license:expat))))
+
+(define-public cl-yaml
+  (sbcl-package->cl-source-package sbcl-cl-yaml))
+
+(define-public ecl-cl-yaml
+  (sbcl-package->ecl-package sbcl-cl-yaml))
+
+(define-public sbcl-linedit
+  (let ((commit "0561c97dfca2f5854fcc66558a567a9875ddcb8f")
+        (revision "1"))
+    (package
+      (name "sbcl-linedit")
+      (version (git-version "0.17.6" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/sharplispers/linedit")
+               (commit commit)))
+         (file-name (git-file-name "cl-linedit" version))
+         (sha256
+          (base32 "0hhh7xn6q12rviayfihg1ym6x6csa0pdjgb88ykqbrz2rs3pgpz5"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-alexandria sbcl-cffi sbcl-osicat sbcl-terminfo))
+      (home-page "https://github.com/sharplispers/linedit")
+      (synopsis "Readline-style line-editor for Common Lisp")
+      (description
+       "Linedit is a readline-style library written in Common Lisp that
+provides customizable line-editing for Common Lisp programs.")
+      (license license:expat))))
+
+(define-public cl-linedit
+  (sbcl-package->cl-source-package sbcl-linedit))
+
+(define-public ecl-linedit
+  (sbcl-package->ecl-package sbcl-linedit))
+
+(define-public sbcl-diff
+  (let ((commit "9c84befa598d4e07c3d223242b5b3f83cd94f301")
+        (revision "1"))
+    (package
+      (name "sbcl-diff")
+      (version (git-version "0.4" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/froydnj/diff")
+               (commit commit)))
+         (file-name (git-file-name "cl-diff" version))
+         (sha256
+          (base32 "1giafck8qfvb688kx5bn9g32rfc12jjywg8vdav36aqbd6lxf5z5"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-cl-ppcre sbcl-trivial-gray-streams))
+      (home-page "https://github.com/froydnj/diff")
+      (synopsis "Common Lisp library for computing differences between files")
+      (description
+        "DIFF is a package for computing various forms of differences between
+blobs of data and then doing neat things with those differences.  Currently diff
+knows how to compute three common forms of differences: \"unified\" format
+diffs, \"context\" format diffs, and \"vdelta\" format binary diffs.")
+      (license license:bsd-3))))
+
+(define-public cl-diff
+  (sbcl-package->cl-source-package sbcl-diff))
+
+(define-public ecl-diff
+  (sbcl-package->ecl-package sbcl-diff))
+
+(define-public sbcl-montezuma
+  (let ((commit "ee2129eece7065760de4ebbaeffaadcb27644738")
+        (revision "1"))
+    (package
+      (name "sbcl-montezuma")
+      (version (git-version "0.1.3" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/sharplispers/montezuma")
+               (commit commit)))
+         (file-name (git-file-name "cl-montezuma" version))
+         (sha256
+          (base32 "0svmvsbsirydk3c1spzfvj8qmkzcs9i69anpfvk1843i62wb7x2c"))))
+      (build-system asdf-build-system/sbcl)
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           ;; The _darcs directory contains a second copy of
+           ;; montezuma-indexfiles.asd. Remove the directory to
+           ;; prevent build failure caused by .asd files that have
+           ;; the same filename.
+           (add-after 'unpack 'remove-darcs-directory
+             (lambda _
+               (delete-file-recursively
+                "contrib/montezuma-indexfiles/_darcs")))
+           ;; Tests fail with: :FORCE and :FORCE-NOT arguments not
+           ;; allowed in a nested call to ASDF/OPERATE:OPERATE unless
+           ;; identically to toplevel.
+           (add-after 'unpack 'fix-tests
+             (lambda _
+               (substitute* "montezuma.asd"
+                 ((":force t") "")))))))
+      (inputs
+       `(("babel" ,sbcl-babel)
+         ("cl-fad" ,sbcl-cl-fad)
+         ("cl-ppcre" ,sbcl-cl-ppcre)))
+      (native-inputs
+       (list sbcl-trivial-timeout))
+      (home-page "https://github.com/sharplispers/montezuma")
+      (synopsis "Full-text indexing and search for Common Lisp")
+      (description
+       "Montezuma is a text search engine library for Lisp based on the Ferret
+library for Ruby, which is itself based on the Lucene library for Java.")
+      (license (list license:expat       ; montezuma
+                     license:gpl3+)))))  ; contrib/montezuma-indexfiles
+
+(define-public cl-montezuma
+  (sbcl-package->cl-source-package sbcl-montezuma))
+
+(define-public ecl-montezuma
+  (let ((pkg (sbcl-package->ecl-package sbcl-montezuma)))
+    (package
+      (inherit pkg)
+      (arguments
+       (substitute-keyword-arguments (package-arguments pkg)
+         ;; Tests fail with "Pathname without a physical namestring" error
+         ;; on ECL.
+         ((#:tests? _ #f) #f))))))
+
+(define-public sbcl-cl-charms
+  (let ((commit "64aba59d89f85bc5c9402e445873965338a66a02")
+        (revision "1"))
+    (package
+      (name "sbcl-cl-charms")
+      (version (git-version "0.2.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/HiTECNOLOGYs/cl-charms")
+               (commit commit)))
+         (file-name (git-file-name "cl-charms" version))
+         (sha256
+          (base32 "1jczaypa9dhxr34yyhsxb6lrdnircjx8am4iqkc3shfpjn32q323"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       `(("alexandria" ,sbcl-alexandria)
+         ("cffi" ,sbcl-cffi)
+         ("ncurses" ,ncurses)))
+      (arguments
+       '(#:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'fix-paths
+             (lambda* (#:key inputs #:allow-other-keys)
+               (substitute* "src/low-level/curses-bindings.lisp"
+                 (("libncursesw.so")
+                  (string-append (assoc-ref inputs "ncurses")
+                                 "/lib/libncursesw.so"))))))))
+      (home-page "https://github.com/HiTECNOLOGYs/cl-charms")
+      (synopsis "Interface to libcurses in Common Lisp")
+      (description
+       "@code{cl-charms} is an interface to libcurses in Common Lisp.  It
+provides both a raw, low-level interface to libcurses via CFFI, and a more
+higher-level lispier interface.")
+      (license license:expat))))
+
+(define-public cl-charms
+  (sbcl-package->cl-source-package sbcl-cl-charms))
+
+(define-public ecl-cl-charms
+  (sbcl-package->ecl-package sbcl-cl-charms))
+
+(define-public sbcl-trivial-open-browser
+  (let ((commit "7ab4743dea9d592639f15c565bfa0756e828c427")
+        (revision "1"))
+    (package
+      (name "sbcl-trivial-open-browser")
+      (version (git-version "0.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/eudoxia0/trivial-open-browser")
+               (commit commit)))
+         (file-name (git-file-name "trivial-open-browser" version))
+         (sha256
+          (base32 "0ixay1piq420i6adx642qhw45l6ik7rvgk52lyz27dvx5f8yqsdb"))))
+      (build-system asdf-build-system/sbcl)
+      (home-page "https://github.com/eudoxia0/trivial-open-browser")
+      (synopsis "Open a browser window from Common Lisp")
+      (description
+       "This package provides a library to open a web browser to a URL.")
+      (license license:expat))))
+
+(define-public cl-trivial-open-browser
+  (sbcl-package->cl-source-package sbcl-trivial-open-browser))
+
+(define-public ecl-trivial-open-browser
+  (sbcl-package->ecl-package sbcl-trivial-open-browser))
+
+(define-public sbcl-clinenoise
+  (let ((commit "46e21f99d06a55d93eaa382cf652d55d457032ef")
+        (revision "1"))
+    (package
+      (name "sbcl-clinenoise")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/jasom/clinenoise")
+               (commit commit)))
+         (file-name (git-file-name "clinenoise" version))
+         (sha256
+          (base32 "0ydlirfk4dbpqqjwwph99v5swcrhd8v9g8q24fvs35wn2vm08lh1"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-alexandria sbcl-cffi sbcl-split-sequence))
+      (home-page "https://github.com/jasom/clinenoise")
+      (synopsis "Port of linenoise to Common Lisp")
+      (description
+       "This package provides a trivial line-input library for VT-like
+terminals.")
+      (license license:bsd-2))))
+
+(define-public cl-clinenoise
+  (sbcl-package->cl-source-package sbcl-clinenoise))
+
+(define-public ecl-clinenoise
+  (sbcl-package->ecl-package sbcl-clinenoise))
+
+(define-public sbcl-trivial-raw-io
+  (let ((commit "b1a3c876305baa0dead419841de7b3e433a75867")
+        (revision "1"))
+    (package
+      (name "sbcl-trivial-raw-io")
+      (version (git-version "0.0.2" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/kingcons/trivial-raw-io")
+               (commit commit)))
+         (file-name (git-file-name "trivial-raw-io" version))
+         (sha256
+          (base32 "19290zw2b64k78wr62gv30pp7cmqg07q85vfwjknaffjdd73xwi1"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-alexandria))
+      (home-page "https://github.com/kingcons/trivial-raw-io")
+      (synopsis "Trivial portability for raw *nix IO in Common Lisp")
+      (description
+       "This library exports three symbols: @code{with-raw-io},
+@code{read-char}, and @code{read-line}, to provide raw POSIX I/O in Common
+Lisp.")
+      (license license:bsd-2))))
+
+(define-public cl-trivial-raw-io
+  (sbcl-package->cl-source-package sbcl-trivial-raw-io))
+
+(define-public ecl-trivial-raw-io
+  (sbcl-package->ecl-package sbcl-trivial-raw-io))
+
+(define-public sbcl-terminal-keypress
+  (let ((commit "2ef48c045aa627229764b2aa393a83d392d93d08")
+        (revision "1"))
+    (package
+      (name "sbcl-terminal-keypress")
+      (version (git-version "0.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/eudoxia0/terminal-keypress")
+               (commit commit)))
+         (file-name (git-file-name "cl-terminal-keypress" version))
+         (sha256
+          (base32 "11c4krpq5x55qkchx6ykcnb455ssb4r3jjywx3c3irfrkj733ybp"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-alexandria sbcl-trivial-raw-io))
+      (native-inputs
+       (list sbcl-fiveam))
+      (home-page "https://github.com/eudoxia0/terminal-keypress")
+      (synopsis "Read keyboard events in the terminal from Common Lisp")
+      (description
+       "This is a library for reading semi-raw user input from terminals.
+Semi-raw as in, we can't detect if the user pressed the @code{Control} key
+alone, and the function keys are a mystery.  What is supported, however, is:
+
+@itemize
+@item Regular characters
+@item Control+[key]
+@item Alt+[key]
+@item Control+Alt+[key]
+@end itemize")
+      (license license:expat))))
+
+(define-public cl-terminal-keypress
+  (sbcl-package->cl-source-package sbcl-terminal-keypress))
+
+(define-public ecl-terminal-keypress
+  (sbcl-package->ecl-package sbcl-terminal-keypress))
+
+(define-public sbcl-periodic-table
+  (package
+    (name "sbcl-periodic-table")
+    (version "1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://common-lisp.net/project/chemboy/periodic-table-"
+             version ".tar.gz"))
+       (sha256
+        (base32 "1ircvqm3q93ma4rxbxprb1i9rcax10ld6xmdzdhfnigr27sh5jvg"))))
+    (build-system asdf-build-system/sbcl)
+    (home-page "https://common-lisp.net/project/chemboy/")
+    (synopsis "Periodic table for Common Lisp")
+    (description
+     "This package defines a Common Lisp package, @code{:elements}, with an
+@code{ELEMENT} structure and a number of functions to search the periodic
+table.")
+    (license license:llgpl)))
+
+(define-public cl-periodic-table
+  (sbcl-package->cl-source-package sbcl-periodic-table))
+
+(define-public ecl-periodic-table
+  (sbcl-package->ecl-package sbcl-periodic-table))
+
+(define-public sbcl-chemical-compounds
+  (package
+    (name "sbcl-chemical-compounds")
+    (version "1.0.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://common-lisp.net/project/chemboy/chemical-compounds-"
+             version ".tar.gz"))
+       (sha256
+        (base32 "12fd8a6ay5qlsq4givzgh9d55mbg4ci2vvmymig6pjl2ms64v0pf"))))
+    (build-system asdf-build-system/sbcl)
+    (inputs
+     `(("periodic-table" ,sbcl-periodic-table)))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-files
+           (lambda _
+             ;; Fix incorrect version number.
+             (substitute* "chemical-compounds.asd"
+               ((":version \"1.0.1\"")
+                (string-append ":version \"" ,version "\"")))
+             ;; Remove incorrect declaration of string type.
+             (substitute* "parsing.lisp"
+               (("\\(declare \\(simple-base-string string\\)")
+                "(declare")))))))
+    (home-page "https://common-lisp.net/project/chemboy/")
+    (synopsis "Chemical formula parser and pretty-printer for Common Lisp")
+    (description
+     "It can sometimes be useful to be able to parse chemical compounds in a
+user-friendly syntax into easy-to-manipulate s-expressions.  You also want to
+be able to go in reverse.  You could probably write your own parser — or you
+could just install the chemical-compounds package.")
+    (license license:llgpl)))
+
+(define-public cl-chemical-compounds
+  (sbcl-package->cl-source-package sbcl-chemical-compounds))
+
+(define-public ecl-chemical-compounds
+  (sbcl-package->ecl-package sbcl-chemical-compounds))
+
+(define-public sbcl-chemboy
+  (package
+    (name "sbcl-chemboy")
+    (version "0.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://common-lisp.net/project/chemboy/chemboy-"
+             version ".tar.gz"))
+       (sha256
+        (base32 "0lr134l16mjcgdj3fm2yff4chlfbihn1sji7q80y7lnr176zgs7d"))))
+    (build-system asdf-build-system/sbcl)
+    (inputs
+     `(("chemical-compounds" ,sbcl-chemical-compounds)
+       ("periodic-table" ,sbcl-periodic-table)))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-files
+           (lambda _
+             ;; Fix incorrect version number.
+             (substitute* "chemboy.asd"
+               ((":version \"0.2\"")
+                (string-append ":version \"" ,version "\"")))
+             ;; Remove incorrect declaration of string type.
+             (substitute* "query-parsing.lisp"
+               (("\\(declare \\(simple-base-string string\\)")
+                "(declare"))
+             ;; Fix incorrect function calls.
+             (substitute* "conversions.lisp"
+               (("\\(pprint-compound element s\\)")
+                "(pprint-compound element :stream s)")
+               (("\\(pprint-compound parsed-compound s\\)")
+                "(pprint-compound parsed-compound :stream s)")))))))
+    (home-page "https://common-lisp.net/project/chemboy/")
+    (synopsis "Common Lisp program for doing basic chemistry calculations")
+    (description
+     "Chemboy is a Common Lisp program for doing basic chemistry calculations.
+This package provides the text-based interface for Chemboy.")
+    (license license:llgpl)))
+
+(define-public cl-chemboy
+  (sbcl-package->cl-source-package sbcl-chemboy))
+
+(define-public ecl-chemboy
+  (sbcl-package->ecl-package sbcl-chemboy))
+
+(define-public sbcl-cl-pass
+  (let ((commit "e58e97c0c0588dc742c061208afb9bc31e4dbd34")
+        (revision "1"))
+    (package
+      (name "sbcl-cl-pass")
+      (version (git-version "0.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/eudoxia0/cl-pass")
+               (commit commit)))
+         (file-name (git-file-name "cl-pass" version))
+         (sha256
+          (base32 "05qx4jrkxqbqi72cxgswbpnifbdvp9mh7apc7566v522899bh0hb"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-ironclad sbcl-trivial-utf-8 sbcl-split-sequence))
+      (native-inputs
+       (list sbcl-fiveam))
+      (home-page "https://github.com/eudoxia0/cl-pass")
+      (synopsis "Password hashing and verification library")
+      (description
+       "@code{cl-pass} is a password hashing and verification library.")
+      (license license:expat))))
+
+(define-public cl-pass
+  (sbcl-package->cl-source-package sbcl-cl-pass))
+
+(define-public ecl-cl-pass
+  (sbcl-package->ecl-package sbcl-cl-pass))
+
+(define-public sbcl-which
+  (let ((commit "b2333e4fcacab6e5d85eecd28b5ef4944bda1448")
+        (revision "1"))
+    (package
+      (name "sbcl-which")
+      (version (git-version "0.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/eudoxia0/which")
+               (commit commit)))
+         (file-name (git-file-name "cl-which" version))
+         (sha256
+          (base32 "127pm9h4rm4w9aadw5yvamnfzhk2rr69kchx10rf9k7sk7izqqfk"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-cl-fad sbcl-path-parse))
+      (native-inputs
+       (list sbcl-fiveam))
+      (home-page "https://github.com/eudoxia0/which")
+      (synopsis "The which command in Common Lisp")
+      (description
+       "This package provides an implementation of the @code{which} UNIX
+command in Common Lisp.")
+      (license license:expat))))
+
+(define-public cl-which
+  (sbcl-package->cl-source-package sbcl-which))
+
+(define-public ecl-which
+  (sbcl-package->ecl-package sbcl-which))
+
+(define-public sbcl-cl-num-utils
+  (let ((commit "97a88cd34540acf52e872a82ebfef3da0a34fa12")
+        (revision "1"))
+    (package
+      (name "sbcl-cl-num-utils")
+      (version (git-version "0.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/tpapp/cl-num-utils")
+               (commit commit)))
+         (file-name (git-file-name "cl-num-utils" version))
+         (sha256
+          (base32 "15ihsxxs76xnldmqfsbxybckqjwrxwcpphgghiwzr2mnbqjpdqkh"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-anaphora sbcl-alexandria sbcl-array-operations
+             sbcl-cl-slice sbcl-let-plus))
+      (native-inputs
+       (list sbcl-clunit))
+      (home-page "https://github.com/tpapp/cl-num-utils")
+      (synopsis "Numerical utilities for Common Lisp")
+      (description
+       "@code{cl-num-utils} implements simple numerical functions for Common
+Lisp, including:
+@itemize
+@item @code{num=}, a comparison operator for floats
+@item simple arithmeric functions, like @code{sum} and @code{l2norm}
+@item elementwise operations for arrays
+@item intervals
+@item special matrices and shorthand for their input
+@item sample statistics
+@item Chebyshev polynomials
+@item univariate rootfinding
+@end itemize")
+      (license license:boost1.0))))
+
+(define-public cl-num-utils
+  (sbcl-package->cl-source-package sbcl-cl-num-utils))
+
+(define-public ecl-cl-num-utils
+  (sbcl-package->ecl-package sbcl-cl-num-utils))
+
+(define-public sbcl-lla
+  (let ((commit "ded805d1e9b1493e17b601116ba9bd8a3de3024f")
+        (revision "1"))
+    (package
+      (name "sbcl-lla")
+      (version (git-version "0.2" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/tpapp/lla")
+               (commit commit)))
+         (file-name (git-file-name "cl-lla" version))
+         (sha256
+          (base32 "0n9vc7dnyjbbsv1n7rd8sylwda5fsdf8f890g4nachanyx0xps9k"))))
+      (build-system asdf-build-system/sbcl)
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'fix-paths
+             (lambda* (#:key inputs #:allow-other-keys)
+               (substitute* "src/configuration.lisp"
+                 (("\"libblas.so.3gf\"")
+                  (string-append "\"" (assoc-ref inputs "lapack")
+                                 "/lib/libblas.so\""))
+                 (("\"liblapack.so.3gf\"")
+                  (string-append "\"" (assoc-ref inputs "lapack")
+                                 "/lib/liblapack.so\""))))))))
+      (inputs
+       `(("anaphora" ,sbcl-anaphora)
+         ("alexandria" ,sbcl-alexandria)
+         ("cffi" ,sbcl-cffi)
+         ("cl-num-utils" ,sbcl-cl-num-utils)
+         ("cl-slice" ,sbcl-cl-slice)
+         ("lapack" ,lapack)
+         ("let-plus" ,sbcl-let-plus)))
+      (native-inputs
+       (list sbcl-clunit))
+      (home-page "https://github.com/tpapp/lla")
+      (synopsis "Linear algebra library for Common Lisp")
+      (description
+       "LLA is a high-level Common Lisp library built on BLAS and LAPACK, but
+providing a much more abstract interface with the purpose of freeing the user
+from low-level concerns and reducing the number of bugs in numerical code.")
+      (license license:boost1.0))))
+
+(define-public cl-lla
+  (sbcl-package->cl-source-package sbcl-lla))
+
+(define-public ecl-lla
+  (sbcl-package->ecl-package sbcl-lla))
+
+(define-public sbcl-cl-rmath
+  (let ((commit "f6add1edda31547691d08e36ccf6c17305161aca")
+        (revision "1"))
+    (package
+      (name "sbcl-cl-rmath")
+      (version (git-version "0.0.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/tpapp/cl-rmath")
+               (commit commit)))
+         (file-name (git-file-name "cl-rmath" version))
+         (sha256
+          (base32 "1ld8vbpy10paymx2hn0mcgd21i7cjhdrayln1jx0kayqxm12mmk4"))))
+      (build-system asdf-build-system/sbcl)
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'fix-paths
+             (lambda* (#:key inputs #:allow-other-keys)
+               (substitute* "cl-rmath.lisp"
+                 (("\\(cffi:define-foreign-library librmath" all)
+                  (string-append all "\n"
+                                 "  (:unix \""
+                                 (assoc-ref inputs "librmath")
+                                 "/lib/libRmath.so\")"))))))))
+      (inputs
+       `(("cffi" ,sbcl-cffi)
+         ("librmath" ,rmath-standalone)))
+      (home-page "https://github.com/tpapp/cl-rmath")
+      (synopsis "Common Lisp wrapper for libRmath")
+      (description
+       "@code{cl-rmath} is a simple, autogenerated foreign interface for the
+standalone R API @code{libRmath}.  There has been no effort to provide a
+high-level interface for the original library, instead, this library is meant
+to serve as a building block for such an interface.")
+      (license license:boost1.0))))
+
+(define-public cl-rmath
+  (sbcl-package->cl-source-package sbcl-cl-rmath))
+
+(define-public ecl-cl-rmath
+  (sbcl-package->ecl-package sbcl-cl-rmath))
+
+(define-public sbcl-cl-random
+  (let ((commit "5bb65911037f95a4260bd29a594a09df3849f4ea")
+        (revision "1"))
+    (package
+      (name "sbcl-cl-random")
+      (version (git-version "0.0.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/tpapp/cl-random")
+               (commit commit)))
+         (file-name (git-file-name "cl-random" version))
+         (sha256
+          (base32 "0jn80xphyvyp2v72acr6b8a2f6dw06myr5vrjfl14brsvks7wr89"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-alexandria
+             sbcl-anaphora
+             sbcl-array-operations
+             sbcl-cl-num-utils
+             sbcl-cl-rmath
+             sbcl-cl-slice
+             sbcl-gsll
+             sbcl-let-plus
+             sbcl-lla))
+      (native-inputs
+       (list sbcl-clunit))
+      (home-page "https://github.com/tpapp/cl-random")
+      (synopsis "Random variates for Common Lisp")
+      (description
+       "@code{cl-random} is a library for generating random draws from various
+commonly used distributions, and for calculating statistical functions, such as
+density, distribution and quantiles for these distributions.")
+      (license license:expat))))
+
+(define-public cl-random
+  (sbcl-package->cl-source-package sbcl-cl-random))
+
+(define-public ecl-cl-random
+  (sbcl-package->ecl-package sbcl-cl-random))
+
+(define-public sbcl-mgl-gpr
+  (let ((commit "cb6ce51e2f87bf1d589f3703c13eea6e25780afe")
+        (revision "1"))
+    (package
+      (name "sbcl-mgl-gpr")
+      (version (git-version "0.0.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/melisgl/mgl-gpr")
+               (commit commit)))
+         (file-name (git-file-name "cl-mgl-gpr" version))
+         (sha256
+          (base32 "0w51dqixh277k6sl8bqvvp1400y6kd1l5h3d9q2f40l9bpxy8gjx"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-cl-random sbcl-mgl-pax))
+      (home-page "https://melisgl.github.io/mgl-gpr/")
+      (synopsis "Common Lisp library of evolutionary algorithms")
+      (description
+       "@code{MGL-GPR} is a library of evolutionary algorithms such as
+Genetic Programming (evolving typed expressions from a set of operators and
+constants) and Differential Evolution.")
+      (license license:expat))))
+
+(define-public cl-mgl-gpr
+  (sbcl-package->cl-source-package sbcl-mgl-gpr))
+
+(define-public ecl-mgl-gpr
+  (sbcl-package->ecl-package sbcl-mgl-gpr))
+
+(define-public sbcl-cl-tld
+  ;; No release.
+  (let ((commit "f5014da8d831fa9481d4181d4450f10a52850c75"))
+    (package
+      (name "sbcl-cl-tld")
+      (version (git-version "0.1" "2" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/lu4nx/cl-tld")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0sxnn35gzdby1ixil6zbjg72vli9fcspwzsqimqk455310syx9iv"))))
+      (build-system asdf-build-system/sbcl)
+      (home-page "https://github.com/lu4nx/cl-tld/")
+      (synopsis "Extract the Top Level Domain from domains, in Common Lisp")
+      (description
+       "This library extracts the TLD (Top Level Domain) from domains.  The
+information is taken from @url{https://publicsuffix.org}.")
+      (license license:public-domain))))
+
+(define-public cl-tld
+  (sbcl-package->cl-source-package sbcl-cl-tld))
+
+(define-public ecl-cl-tld
+  (sbcl-package->ecl-package sbcl-cl-tld))
+
+(define-public sbcl-cl-strftime
+  ;; No release.
+  (let ((commit "21cb57f2595faa26d687893963f24ec41822b63c"))
+    (package
+      (name "sbcl-cl-strftime")
+      (version (git-version "0.0.0" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/ruricolist/cl-strftime/")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "00c8hq7vzgb89ab3q7mrp60x743kiqmsk1g51ynhxlqhph2bnslf"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-alexandria sbcl-local-time sbcl-cl-ppcre sbcl-serapeum))
+      (native-inputs
+       (list sbcl-fiveam sbcl-cffi))
+      (home-page "https://github.com/ruricolist/cl-strftime")
+      (synopsis "Common Lisp compiler for the strftime language")
+      (description
+       "CL-STRFTIME is a Common Lisp compiler for the strftime “language.”")
+      (license license:expat))))
+
+(define-public cl-strftime
+  (sbcl-package->cl-source-package sbcl-cl-strftime))
+
+(define-public ecl-cl-strftime
+  (sbcl-package->ecl-package sbcl-cl-strftime))
+
+(define-public sbcl-exit-hooks
+  ;; No release.
+  (let ((commit "78050f4f55c138fcea86a9d720928782021b6012"))
+    (package
+      (name "sbcl-exit-hooks")
+      (version (git-version "0.0.0" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/ailisp/exit-hooks/")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "00rk0pr2cy3hy6giblh166b7yrg06d5lanipjcqv508gkfb0vi47"))))
+      (build-system asdf-build-system/sbcl)
+      (home-page "https://github.com/ailisp/exit-hooks")
+      (synopsis "Call functions automatically when Common Lisp exits")
+      (description
+       "@code{exit-hooks} provides a portable way to automatically call some
+user-defined function when exiting Common Lisp (both @code{quit} from the REPL
+or a kill in a shell).  Like @code{atexit} in C and Python or Java’s
+@code{Runtime.addShutdownHook()}.  It currently supports SBCL, CCL, ECL, ABCL,
+Allegro CL, clisp and CMUCL.  Before exit-hooks, there was no portable way of
+doing so and no staightforward way to use an exit hook on ABCL.  It can be used
+for tasks like parmenantly save something when exiting Lisp.")
+      (license license:bsd-2))))
+
+(define-public cl-exit-hooks
+  (sbcl-package->cl-source-package sbcl-exit-hooks))
+
+(define-public ecl-exit-hooks
+  (sbcl-package->ecl-package sbcl-exit-hooks))
+
+(define-public sbcl-cl-base58
+  (let ((commit "f446835b4104896e0eed6a61d2ceb4ad22f589d8")
+        (revision "1"))
+    (package
+      (name "sbcl-cl-base58")
+      (version (git-version "0.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/eudoxia0/cl-base58/")
+               (commit commit)))
+         (file-name (git-file-name "cl-base58" version))
+         (sha256
+          (base32 "01wiiyz1jzxx3zhxi2hpq5n8hv28g1mn0adk793vwjzh4v5bi5zz"))))
+      (build-system asdf-build-system/sbcl)
+      (arguments
+       '(#:asd-systems '("cl-base58-test" "cl-base58")
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'fix-tests
+             (lambda _
+               (substitute* "cl-base58-test.asd"
+                 (("cl-test-more")
+                  "prove"))
+               #t)))))
+      (native-inputs
+       (list sbcl-prove))
+      (home-page "https://github.com/eudoxia0/cl-base58")
+      (synopsis "Implementation of base58 for Common Lisp")
+      (description
+       "This library implements the @code{base58} encoding algorithm.  It's
+basically @code{base64} but with a smaller alphabet (58, as in the name) that
+doesn't include similar looking characters, among other things.  See
+@url{https://github.com/bitcoin/bitcoin/blob/master/src/base58.h} for a full
+reference.")
+      (license license:expat))))
+
+(define-public cl-base58
+  (sbcl-package->cl-source-package sbcl-cl-base58))
+
+(define-public ecl-cl-base58
+  (sbcl-package->ecl-package sbcl-cl-base58))
+
+(define-public sbcl-bit-smasher
+  ;; No release.
+  (let ((commit "c2dcb3b5ec0e485484be681fe17c4e81e58790d9"))
+    (package
+      (name "sbcl-bit-smasher")
+      (version (git-version "1.0.2" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/thephoeron/bit-smasher/")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0wjmwn06fjpw0rlpaksf3ab727p8fnzj58z7jajl3m0wqd4ii74w"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       `(("cl-base64" ,sbcl-cl-base64)
+         ("cl-base58" ,sbcl-cl-base58)))
+      ;; Load order matters for tests, both for file reading and evaluation.
+      (arguments
+       `(#:asd-systems '("bit-smasher-test" "bit-smasher")
+         #:asd-files '("bit-smasher.asd" "bit-smasher-test.asd")))
+      (home-page "https://github.com/thephoeron/bit-smasher/")
+      (synopsis "Handle bit vectors, bit vector arithmetic, and type conversions")
+      (description
+       "Utility library for handling bit vectors, bit vector arithmetic, and
+universal integer type conversions between bit-vectors, byte-vectors, octals,
+decimals, and hexadecimal notation.")
+      (license license:expat))))
+
+(define-public cl-bit-smasher
+  (sbcl-package->cl-source-package sbcl-bit-smasher))
+
+(define-public ecl-bit-smasher
+  (sbcl-package->ecl-package sbcl-bit-smasher))
+
+(define-public sbcl-overlord
+  ;; No release.
+  (let ((commit "a8f37b321a8aae1652fc50b78e74e57c771cc763"))
+    (package
+      (name "sbcl-overlord")
+      (version (git-version "0.0.0" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/ruricolist/overlord/")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "1maqm53yhlhaa3cka8xcc4sq24ifrr4y3y0s5dyyn682xsh14hb4"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       `(("babel" ,sbcl-babel)
+         ("bit-smasher" ,sbcl-bit-smasher)
+         ("bordeaux-threads" ,sbcl-bordeaux-threads)
+         ("cl-strftime" ,sbcl-cl-strftime)
+         ("cmd" ,sbcl-cmd)
+         ("drakma" ,sbcl-drakma)
+         ("exit-hooks" ,sbcl-exit-hooks)
+         ("fset" ,sbcl-fset)
+         ("local-time" ,sbcl-local-time)
+         ("lparallel" ,sbcl-lparallel)
+         ("md5" ,sbcl-md5)
+         ("murmurhash" ,sbcl-cl-murmurhash)
+         ("named-readtables" ,sbcl-named-readtables)
+         ("ppcre" ,sbcl-cl-ppcre)
+         ("serapeum" ,sbcl-serapeum)
+         ("trivia" ,sbcl-trivia)
+         ("trivial-file-size" ,sbcl-trivial-file-size)))
+      (propagated-inputs
+       `(("quickproject" ,sbcl-quickproject)))
+      (native-inputs
+       (list sbcl-fiveam))
+      (arguments
+       `(#:asd-files '("overlord.asd")
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'include-overlord/net
+             (lambda _
+               (substitute* "all.lisp"
+                 (("\\(:import-from :overlord/kernel :nproc\\)")
+                  (string-append
+                   "(:import-from :overlord/kernel :nproc)"
+                   "\n"
+                   "(:import-from :overlord/net)")))
+               #t)))))
+      (home-page "https://github.com/ruricolist/overlord")
+      (synopsis "Build system in Common Lisp")
+      (description
+       "Overlord is a build system in Common Lisp.  It is a real build system,
+with all the modern features: rules with multiple outputs, parallel builds,
+immunity to clock issues, and dynamic dependencies.
+
+But Overlord is more than another build system.  Overlord is a uniform
+approach to dependencies inside or outside of a Lisp image.  Overlord is to
+Make what Lisp macros are to C macros.
+
+Overlord is designed to be used from the Lisp REPL.  A command line interface
+is available in a separate repository.  See
+@url{https://github.com/ruricolist/overlord-cli}.")
+      (license license:expat))))
+
+(define-public cl-overlord
+  (sbcl-package->cl-source-package sbcl-overlord))
+
+;; FIXME: Broken on ECL? https://github.com/ruricolist/overlord/issues/25
+;; (define-public ecl-overlord
+;;   (sbcl-package->ecl-package sbcl-overlord))
+
+(define-public sbcl-xpath
+  ;; No release.
+  (let ((commit "d364da693a534e23bd5eb3a85420e9c25e6c75b3"))
+    (package
+      (name "sbcl-xpath")
+      (version (git-version "0.1" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/sharplispers/xpath/")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "1fb03fgnzrvh22lw1jdg04pmyja5fib5n42rzwp5mhr829yvxkvp"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-cxml sbcl-parse-number sbcl-cl-ppcre sbcl-cl-yacc))
+      (home-page "https://github.com/sharplispers/xpath/")
+      (synopsis "Implementation of the XML Path Language (XPath) Version 1.0")
+      (description
+       "This library is an implementation of the XML Path Language (XPath)
+Version 1.0.")
+      (license license:bsd-2))))
+
+;; According to
+;; https://github.com/sharplispers/xpath/blob/master/doc/index.xml ECL is not
+;; supported.
+(define-public cl-xpath
+  (sbcl-package->cl-source-package sbcl-xpath))
+
+(define-public sbcl-fxml
+  ;; No release.
+  (let ((commit "a0e73bb48ef03adea94a55986cc27f522074c8e1"))
+    (package
+      (name "sbcl-fxml")
+      (version (git-version "0.0.0" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/ruricolist/fxml/")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "1vxdb1cjjqi986f72bggnw1s4yzv12g4li7vn4y49b6lphshr8lm"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-babel
+             sbcl-named-readtables
+             sbcl-serapeum
+             sbcl-quri
+             sbcl-flexi-streams
+             sbcl-split-sequence
+             sbcl-alexandria
+             sbcl-trivial-gray-streams))
+      (native-inputs
+       (list sbcl-fiveam sbcl-cxml sbcl-cxml-rng sbcl-xpath))
+      (home-page "https://github.com/ruricolist/fxml")
+      (synopsis "XML parser and serializer in Common Lisp")
+      (description
+       "FXML is a secure-by-default, error-recovering XML parser and serializer.
+It is a fork of CXML.
+
+You should use FXML instead of CXML if:
+@itemize
+@item You are parsing potentially ill-formed XML.
+@item You are parsing potentially malicious XML.
+@item You need to use Klacks with namespaces.
+@end itemize
+
+FXML’s API is very close to CXML's, and for the most part you can refer to the
+CXML documentation for usage.")
+      (license license:llgpl))))
+
+(define-public cl-fxml
+  (sbcl-package->cl-source-package sbcl-fxml))
+
+(define-public sbcl-vernacular
+  ;; No release.
+  (let ((commit "79be179e9ada423b3ec41d2a1ea6f6e0266ed21f"))
+    (package
+      (name "sbcl-vernacular")
+      (version (git-version "0.8.0" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/ruricolist/vernacular/")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "19vzn28hw4is4sgmvzqin18ds89s0pai21vcm0ky10vmfv6wg745"))
+         (modules '((guix build utils)))
+         (snippet
+          '(begin
+             ;; The demo depends on cl-js, which we don't have at this point.
+             (delete-file-recursively "demo")
+             #t))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       `(("overlord" ,sbcl-overlord)
+         ("trivial-macroexpand-all" ,sbcl-trivial-macroexpand-all)
+         ("local-time" ,sbcl-local-time)
+         ("parse-js" ,sbcl-parse-js)
+         ("trivia" ,sbcl-trivia)
+         ("trivial-garbage" ,sbcl-trivial-garbage)
+         ("named-readtables" ,sbcl-named-readtables)
+         ("alexandria" ,sbcl-alexandria)
+         ("serapeum" ,sbcl-serapeum)
+         ("trivial-gray-streams" ,sbcl-trivial-gray-streams)))
+      (arguments
+       ;; Circular dependency: Tests depend on core-lisp
+       ;; (http://github.com/ruricolist/core-lisp) which depends on
+       ;; Vernacular.
+       '(#:tests? #f))
+      (home-page "https://github.com/ruricolist/vernacular")
+      (synopsis "Module system for languages that compile to Common Lisp")
+      (description
+       "Vernacular is a build and module system for languages that compile to
+Common Lisp.  It allows languages to compile to Lisp while remaining part of
+the Common Lisp ecosystem.  Vernacular languages interoperate with Common Lisp
+and one another.
+
+Vernacular handles locating files, compiling files into FASLs, tracking
+dependencies and rebuilding, and export and import between your new language,
+Lisp, and any other language Vernacular supports.
+
+Vernacular builds on Overlord and is inspired by Racket.")
+      (license license:expat))))
+
+(define-public cl-vernacular
+  (sbcl-package->cl-source-package sbcl-vernacular))
+
+(define-public sbcl-cmn
+  (package
+    (name "sbcl-cmn")
+    (version "2021.11.22")
+    (source
+     (origin
+       (method url-fetch)
+       (uri "https://ccrma.stanford.edu/software/cmn/cmn.tar.gz")
+       (file-name (string-append "cmn-" version ".tar.gz"))
+       (sha256
+        (base32 "04j1l57cdyfi2zzxqwmvmf1hl899ffgs3bl4r42ba47zsw45kq14"))))
+    (build-system asdf-build-system/sbcl)
+    (home-page "https://ccrma.stanford.edu/software/cmn/")
+    (synopsis "Western music notation package written in Common Lisp")
+    (description
+     "CMN provides a package of functions to hierarchically describe a musical
+score.  When evaluated, the musical score is rendered to an image.")
+    (license license:expat)))
+
+(define-public cl-cmn
+  (sbcl-package->cl-source-package sbcl-cmn))
+
+(define-public ecl-cmn
+  (sbcl-package->ecl-package sbcl-cmn))
+
+(define-public sbcl-core-gp
+  (let ((commit "90ec1c4599a19c5a911be1f703f78d5108aee160")
+        (revision "1"))
+    (package
+      (name "sbcl-core-gp")
+      (version (git-version "0.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/jorgetavares/core-gp")
+               (commit commit)))
+         (file-name (git-file-name "cl-core-gp" version))
+         (sha256
+          (base32 "0nzlb2gwqisa1amlpl4zc5xxph2g3qwhfyaxchci67d31rzws6l3"))))
+      (build-system asdf-build-system/sbcl)
+      (home-page "https://github.com/jorgetavares/core-gp")
+      (synopsis "Common Lisp library for genetic programming")
+      (description
+       "@code{core-gp} is a Common Lisp library for genetic programming (GP)
+algorithms.  It allows standard GP, strongly-typed GP, grammatical evolution as
+well as standard genetic algorithms.")
+      (license license:expat))))
+
+(define-public cl-core-gp
+  (sbcl-package->cl-source-package sbcl-core-gp))
+
+(define-public ecl-core-gp
+  (sbcl-package->ecl-package sbcl-core-gp))
+
+(define-public sbcl-data-sift
+  (let ((commit "fd617d8200cdcc1b87ecf45ab59bb38e8b16ef7e")
+        (revision "1"))
+    (package
+      (name "sbcl-data-sift")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/archimag/data-sift")
+               (commit commit)))
+         (file-name (git-file-name "cl-data-sift" version))
+         (sha256
+          (base32 "1v7gf0x4ibjzp0c56n9m77hxdgwcm9356zlk5n4l3fx4i0hj6146"))))
+      (build-system asdf-build-system/sbcl)
+      (arguments
+       ;; All test cases test a function that has been removed.
+       `(#:tests? #f))
+      (inputs
+       `(("alexandria" ,sbcl-alexandria)
+         ("cl-ppcre" ,sbcl-cl-ppcre)
+         ("parse-number" ,sbcl-parse-number)
+         ("puri" ,sbcl-puri)))
+      (native-inputs
+       (list sbcl-lift))
+      (home-page "https://github.com/archimag/data-sift")
+      (synopsis
+       "Common Lisp library for validation and transformation of string data")
+      (description
+       "@code{DATA-SIFT} is a Common Lisp data validation and transformation
+library inspired by @code{cl-data-format-validation} and WTForms validators.")
+      (license license:llgpl))))
+
+(define-public cl-data-sift
+  (sbcl-package->cl-source-package sbcl-data-sift))
+
+(define-public ecl-data-sift
+  (sbcl-package->ecl-package sbcl-data-sift))
+
+(define-public sbcl-restas
+  (let ((commit "81bbbab6b36f81f846f78e71232e9d3d15f6d952")
+        (revision "1"))
+    (package
+      (name "sbcl-restas")
+      (version (git-version "0.1.4" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/archimag/restas")
+               (commit commit)))
+         (file-name (git-file-name "cl-restas" version))
+         (sha256
+          (base32 "00ng6jik1lwjw3bbxhijy8s0ml24lgm73liwrr01gcsb0r6wrjjn"))))
+      (build-system asdf-build-system/sbcl)
+      (arguments
+       '(#:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'fix-paths
+             (lambda* (#:key inputs #:allow-other-keys)
+               (substitute* "contrib/restas-daemon.lisp"
+                 (("/lib64/") "")
+                 (("/lib/") "")
+                 (("libcap.so")
+                  (string-append (assoc-ref inputs "libcap")
+                                 "/lib/libcap.so"))))))))
+      (inputs
+       `(("alexandria" ,sbcl-alexandria)
+         ("bordeaux-threads" ,sbcl-bordeaux-threads)
+         ("cffi" ,sbcl-cffi)
+         ("data-sift" ,sbcl-data-sift)
+         ("hunchentoot" ,sbcl-hunchentoot)
+         ("libcap" ,libcap)
+         ("routes" ,sbcl-routes)))
+      (home-page "https://github.com/archimag/restas")
+      (synopsis "Common Lisp web framework")
+      (description "@code{RESTAS} is a Common Lisp web application framework.")
+      (license license:llgpl))))
+
+(define-public cl-restas
+  (sbcl-package->cl-source-package sbcl-restas))
+
+(define-public ecl-restas
+  (sbcl-package->ecl-package sbcl-restas))
+
+(define-public sbcl-zsort
+  (let ((commit "f6724a6fff7662a942195cedb0d7f00da59c74ed")
+        (revision "1"))
+    (package
+      (name "sbcl-zsort")
+      (version (git-version "0.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/jorgetavares/zsort")
+               (commit commit)))
+         (file-name (git-file-name "cl-zsort" version))
+         (sha256
+          (base32 "1vyklyh99712zsll4qi0m4mm8yb1nz04403vl8i57bjv5p5max49"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-alexandria))
+      (home-page "https://github.com/jorgetavares/zsort")
+      (synopsis "Collection of portable sorting algorithms in Common Lisp")
+      (description
+       "@code{zsort} is a collection of portable sorting algorithms.  Common
+Lisp provides the @code{sort} and @code{stable-sort} functions but these can
+have different algorithms implemented according to each implementation.  Also,
+the standard sorting functions might not be the best for a certain situations.
+This library aims to provide developers with more options.")
+      (license license:expat))))
+
+(define-public cl-zsort
+  (sbcl-package->cl-source-package sbcl-zsort))
+
+(define-public ecl-zsort
+  (sbcl-package->ecl-package sbcl-zsort))
+
+(define-public sbcl-cl-https-everywhere
+  ;; No release.
+  ;; Don't forget to update the https-everywhere input.
+  (let ((commit "cbcc73b985a5b1c0ce0d4ec38bc982a0538d4bd8"))
+    (package
+      (name "sbcl-cl-https-everywhere")
+      (version (git-version "0.0.0" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/ruricolist/cl-https-everywhere/")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "1wcvx1icwym1ncd6wl1wxzkyyndrm796caalbklvjd4a2cbl3xxi"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       `(("alexandria" ,sbcl-alexandria)
+         ("global-vars" ,sbcl-global-vars)
+         ("parenscript" ,sbcl-parenscript)
+         ("cl-markdown" ,sbcl-cl-markdown)
+         ("cl-tld" ,sbcl-cl-tld)
+         ("fxml" ,sbcl-fxml)
+         ("overlord" ,sbcl-overlord)
+         ("ppcre" ,sbcl-cl-ppcre)
+         ("serapeum" ,sbcl-serapeum)
+         ("trivial-gray-streams" ,sbcl-trivial-gray-streams)
+         ("vernacular" ,sbcl-vernacular)))
+      (native-inputs
+       `(("fiveam" ,sbcl-fiveam)
+         ("https-everywhere"
+          ,(let ((version "2021.7.13"))
+             (origin
+               (method git-fetch)
+               (uri (git-reference
+                     (url "https://github.com/EFForg/https-everywhere")
+                     (commit version)))
+               (file-name (git-file-name "https-everywhere" version))
+               (sha256
+                (base32
+                 "1k5gj29imhxf47sv3d8rxyrgr6k65scp2fm040va3nfshayslzia")))))))
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'link-https-everywhere-repo
+             (lambda* (#:key inputs #:allow-other-keys)
+               (let ((https-everywhere (assoc-ref inputs "https-everywhere")))
+                 (symlink https-everywhere "https-everywhere"))))
+           (add-after 'unpack 'fix-overlord-build
+             ;; Upstream bugs?  See
+             ;; https://github.com/ruricolist/cl-https-everywhere/issues/1.
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out"))
+                      (rulesets.xml (string-append out "/share/common-lisp/" (%lisp-type)
+                                                   "/cl-https-everywhere/rulesets.xml")))
+                 (substitute* "build.lisp"
+                   (("\\(depends-on https-everywhere-version\\)") "")
+                   ;; Don't rebuild the rulesets just because the timestamp is epoch.
+                   (("\\(vernacular:require-default :cl-https-everywhere/rulesets-file \"rulesets.xml\"\\)")
+                    (format #f "(if (uiop:file-exists-p ~s)
+      (compile-rulesets ~s)
+      (vernacular:require-default :cl-https-everywhere/rulesets-file \"rulesets.xml\"))"
+                            rulesets.xml
+                            rulesets.xml))
+                   (("\\(uiop:parse-unix-namestring \"https-everywhere/src/chrome/content/rules/\\*\\.xml\")")
+                    "\"https-everywhere/src/chrome/content/rules/*.xml\"")
+                   (("\\(out temp :external-format :utf-8\\)")
+                    "(out temp :external-format :utf-8 :if-exists :supersede)")))
+               #t)))))
+      (home-page "https://github.com/ruricolist/cl-https-everywhere/")
+      (synopsis "Use HTTPS Everywhere rules from Lisp")
+      (description
+       "CL-HTTPS-EVERYWHERE parses HTTPS Everywhere rulesets and makes them
+available for use in Lisp programs.")
+      (license (list license:expat
+                     ;; For the ruleset
+                     license:gpl2+)))))
+
+(define-public cl-https-everywhere
+  (sbcl-package->cl-source-package sbcl-cl-https-everywhere))
+
+(define-public sbcl-magic-ed
+  (let ((commit "30bb27832d4e3e362578e7320934638f9889a8c4")
+        (revision "1"))
+    (package
+      (name "sbcl-magic-ed")
+      (version (git-version "0.2" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/sanel/magic-ed")
+               (commit commit)))
+         (file-name (git-file-name "cl-magic-ed" version))
+         (sha256
+          (base32 "1j6il4lif0dy6hqiz6n91yl8dvii9pk1i9vz0faq5mnr42mr7i5f"))))
+      (build-system asdf-build-system/sbcl)
+      (home-page "https://github.com/sanel/magic-ed")
+      (synopsis "Editing facility for Common Lisp REPL")
+      (description
+       "Magic (ed) is a tiny editing facility for Common Lisp, where you can
+directly load, edit, manipulate and evaluate file or file content from REPL.
+This package also can be a starting point for people who are not accustomed to
+Emacs or SLIME and would like to continue using their default terminal/console
+editor with Common Lisp.")
+      (license license:expat))))
+
+(define-public cl-magic-ed
+  (sbcl-package->cl-source-package sbcl-magic-ed))
+
+(define-public ecl-magic-ed
+  (sbcl-package->ecl-package sbcl-magic-ed))
+
+(define-public sbcl-maxpc
+  (let ((commit "e5e58d053039517d30fd59ab2d128256b87790d5")
+        (revision "1"))
+    (package
+      (name "sbcl-maxpc")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/eugeneia/maxpc")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "15wrjbr2js6j67c1dd4p2qxj49q9iqv1lhb7cwdcwpn79crr39gf"))))
+      (build-system asdf-build-system/sbcl)
+      (home-page "https://mr.gy/software/maxpc/api.html")
+      (synopsis
+       "Library for writing parsers and lexers based on combinatory parsing")
+      (description
+       "@emph{Max’s Parser Combinators} is a simple and pragmatic library for
+writing parsers and lexers based on combinatory parsing.  MaxPC is capable of
+parsing deterministic, context-free languages, provides powerful tools for
+parse tree transformation and error handling, and can operate on
+@dfn{sequences} and @dfn{streams}.  It supports unlimited backtracking, but
+does not implement @url{http://pdos.csail.mit.edu/~baford/packrat/thesis/,
+Packrat Parsing}.  Instead, MaxPC achieves good performance through its
+optimized primitives, and explicit separation of matching and capturing input.
+In practice, MaxPC parsers perform better on typical computer languages—when
+compared to Packrat parsers—at the expense of not producing linear-time
+parsers.")
+      (license license:agpl3))))
+
+(define-public cl-maxpc
+  (sbcl-package->cl-source-package sbcl-maxpc))
+
+(define-public ecl-maxpc
+  (sbcl-package->ecl-package sbcl-maxpc))
+
+(define-public sbcl-random-state
+  (let ((commit "c270d4f15e0b66ba9680ca8734a5de56959cb118")
+        (revision "1"))
+    (package
+      (name "sbcl-random-state")
+      (version (git-version "0.1.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Shinmera/random-state")
+               (commit commit)))
+         (file-name (git-file-name "cl-random-state" version))
+         (sha256
+          (base32 "0r3bk6hqpr0qmpza93pknl8wpsd6y0yy9qg7vz751a7gzzww9vj6"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-documentation-utils))
+      (home-page "https://shinmera.github.io/random-state/")
+      (synopsis "Portable random number generation")
+      (description
+       "This library is a collection of @dfn{pseudo random number generators}.
+
+While Common Lisp does provide a @code{RANDOM} function, it does not allow the
+user to pass an explicit @code{SEED}, nor to portably exchange the random
+state between implementations.  This can be a headache in cases like games,
+where a controlled seeding process can be very useful.
+
+For both curiosity and convenience, this library offers multiple algorithms to
+generate random numbers, as well as a bunch of generally useful methods to
+produce desired ranges.")
+      (license license:zlib))))
+
+(define-public cl-random-state
+  (sbcl-package->cl-source-package sbcl-random-state))
+
+(define-public ecl-random-state
+  (sbcl-package->ecl-package sbcl-random-state))
+
+(define-public sbcl-decimals
+  (package
+    (name "sbcl-decimals")
+    (version "2021")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/tlikonen/cl-decimals")
+             (commit version)))
+       (file-name (git-file-name "cl-decimals" version))
+       (sha256
+        (base32 "0wn5hq1pwd3wpjqqhpjzarcdk1q6416g8y447iaf55j5nbhlmbn6"))))
+    (build-system asdf-build-system/sbcl)
+    (home-page "https://github.com/tlikonen/cl-decimals")
+    (synopsis "Decimal number parser and formatting package for Common Lisp")
+    (description "This Common Lisp package offers functions for parsing and
+formatting decimal numbers.  The package's main interface are the functions
+@code{parse-decimal-number} and @code{format-decimal-number}.  The former is
+for parsing strings for decimal numbers and the latter for pretty-printing
+them as strings.")
+    (license license:cc0)))
+
+(define-public cl-decimals
+  (sbcl-package->cl-source-package sbcl-decimals))
+
+(define-public ecl-decimals
+  (sbcl-package->ecl-package sbcl-decimals))
+
+(define-public sbcl-simple-date-time
+  (let ((commit "d6992afddedf67a8172a0120a1deac32afcaa2e8")
+        (revision "1"))
+    (package
+      (name "sbcl-simple-date-time")
+      (version (git-version "0.1.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/quek/simple-date-time")
+               (commit commit)))
+         (file-name (git-file-name "cl-simple-date-time" version))
+         (sha256
+          (base32 "06iwf13gcdyqhkzfkcsfdl8iqbdl44cx01c3fjsmhl0v1pp8h2m4"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-cl-ppcre))
+      (home-page "https://github.com/quek/simple-date-time")
+      (synopsis "Date and time library for Common Lisp")
+      (description "This package is a simple date and time library.")
+      (license license:bsd-4))))
+
+(define-public cl-simple-date-time
+  (sbcl-package->cl-source-package sbcl-simple-date-time))
+
+(define-public ecl-simple-date-time
+  (sbcl-package->ecl-package sbcl-simple-date-time))
+
+(define-public sbcl-april
+  (let ((commit "963e2d8e5575a7d430c1fba7adedd15cb23c4ce8")
+        (revision "1"))
+    (package
+      (name "sbcl-april")
+      (version (git-version "0.9.3" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/phantomics/april")
+               (commit commit)))
+         (file-name (git-file-name "cl-april" version))
+         (sha256
+          (base32 "0v27fpss1ayca2r47k0zpqa9a423a86pv8s2mlgc3g5s48lgcmj3"))
+         (modules '((guix build utils)))
+         (snippet '(begin
+                     ;; Remove bundled Apache-relicensed MaxPC.
+                     (delete-file-recursively "maxpc-apache")
+                     ;; Ensure references are to upstream MaxPC.
+                     (substitute* "vex/vex.asd"
+                       (("maxpc-apache") "maxpc"))))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-alexandria
+             sbcl-array-operations
+             sbcl-maxpc
+             sbcl-cl-ppcre
+             sbcl-symbol-munger
+             sbcl-prove
+             sbcl-parse-number
+             sbcl-lparallel
+             sbcl-random-state
+             sbcl-decimals
+             sbcl-simple-date-time
+             sbcl-trivia))
+      (home-page "https://github.com/phantomics/april")
+      (synopsis "Array Programming Re-Imagined in Lisp")
+      (description
+       "April compiles a subset of the APL programming language into
+Common Lisp.  Leveraging Lisp's powerful macros and numeric processing
+faculties, it brings APL's expressive potential to bear for Lisp developers.
+Replace hundreds of lines of number-crunching code with a single line of
+APL.")
+      (license license:asl2.0))))
+
+(define-public cl-april
+  (sbcl-package->cl-source-package sbcl-april))
+
+(define-public ecl-april
+  (sbcl-package->ecl-package sbcl-april))
+
+(define-public sbcl-cl-sxml
+  (let ((commit "e5542b1d9bd6cee03ae27547d00660ccfbb60109")
+        (revision "1"))
+    (package
+      (name "sbcl-cl-sxml")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/eadmund/cl-sxml")
+               (commit commit)))
+         (file-name (git-file-name "cl-sxml" version))
+         (sha256
+          (base32 "1105s9whidq1lf0lli2wdhcfcs5gwzxa0h1x3izx4mp2p7psvciz"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs (list sbcl-cxml))
+      (native-inputs
+       (list sbcl-fiveam
+             sbcl-flexi-streams))
+      (home-page "https://github.com/eadmund/cl-sxml")
+      (synopsis "SXML parsing for Common Lisp")
+      (description
+       "@code{CL-SXML} implements Oleg Kiselyov’s SXML, an S-expression-based
+rendering of the XML Infoset.")
+      (license license:gpl3+))))
+
+(define-public cl-sxml
+  (sbcl-package->cl-source-package sbcl-cl-sxml))
+
+(define-public ecl-cl-sxml
+  (sbcl-package->ecl-package sbcl-cl-sxml))
+
+(define-public sbcl-cl-gopher
+  (let ((commit "62cfd180378f56e7e8b57e4302b183810c86e337")
+        (revision "2"))
+    (package
+      (name "sbcl-cl-gopher")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/knusbaum/cl-gopher")
+               (commit commit)))
+         (file-name (git-file-name "cl-gopher" version))
+         (sha256
+          (base32 "0szz29d83fk2cxn5j1zlf4v0154qnf9cy1ix5p4jjpsql1a8xiwg"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-bordeaux-threads
+             sbcl-drakma
+             sbcl-flexi-streams
+             sbcl-quri
+             sbcl-split-sequence
+             sbcl-usocket))
+      (home-page "https://github.com/knusbaum/cl-gopher")
+      (synopsis "Gopher protocol library in Common Lisp")
+      (description
+       "@code{cl-gopher} is a Common Lisp library for interacting with the
+Gopher protocol.
+
+It is suitable for building both clients and servers, and provides a sample
+client.")
+      (license license:bsd-2))))
+
+(define-public cl-gopher
+  (sbcl-package->cl-source-package sbcl-cl-gopher))
+
+(define-public ecl-cl-gopher
+  (sbcl-package->ecl-package sbcl-cl-gopher))
+
+(define-public sbcl-phos
+  (let ((commit "6620b82b091cdfed655e1093ef045dbe518d5474"))
+    (package
+      (name "sbcl-phos")
+      (version (git-version "0.0.1" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/omar-polo/phos")
+               (commit commit)))
+         (file-name (git-file-name "phos" version))
+         (sha256
+          (base32
+           "1zwci86rkbaiix0w2gd5q6nr8v2vv945pkvwp0j240iyzd4hfxr3"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-quri sbcl-cl-ppcre sbcl-trivia sbcl-usocket sbcl-cl+ssl
+             ;; For the experimental GUI:
+             sbcl-nodgui))
+      (native-inputs
+       (list sbcl-clunit2))
+      (home-page "https://github.com/omar-polo/phos")
+      (synopsis "Gemini client library and experimental GUI")
+      (description "This package contains a Gemini client library for Common
+Lisp.  A subsystem offers an experimental GUI Gemini client.")
+      (license license:isc))))
+
+(define-public cl-phos
+  (sbcl-package->cl-source-package sbcl-phos))
+
+(define-public ecl-phos
+  (sbcl-package->ecl-package sbcl-phos))
+
+(define-public sbcl-nhooks
+  (package
+    (name "sbcl-nhooks")
+    (version "1.0.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/atlas-engineer/nhooks")
+             (commit version)))
+       (file-name (git-file-name "nhooks" version))
+       (sha256
+        (base32
+         "1v3gh9jf4hbpl1hnyzhkrcj3jdh3q0mlp1n6ci2cbn2rsc65baff"))))
+    (build-system asdf-build-system/sbcl)
+    (inputs
+     (list sbcl-serapeum))
+    (native-inputs
+     (list sbcl-fiveam))
+    (home-page "https://github.com/atlas-engineer/nhooks")
+    (synopsis "Hook facility for Common Lisp")
+    (description "This package holds an enhanced implementation of
+hooks (extension points).  It works similarly to Emacs hooks with crucial
+improvements:
+
+@itemize
+
+@item If the compiler allows it (such as SBCL), type-checking is performed at
+compile-time and at run-time when adding handlers to a hook.
+
+@item On failure, multiple restarts are offered, such as disabling the
+offending handler or simply continuing to the next function.
+
+@item The hook handler execution order and combination can be customized.
+
+@item Anonymous functions (lambdas) can be added to hooks as handler objects.
+When inspecting hooks, readable names are thus exposed instead of lambda
+blackboxes.  Handlers are compared through their names (through the mandatory
+name slot).  A hook can not contain multiple handlers with the same name.
+
+@item A special provision is taken for “setters”, handlers that are meant to
+set a given place to a given values.  Such handler objects can be compared and
+identified uniquely.
+
+@end itemize\n")
+    (license license:expat)))
+
+(define-public cl-nhooks
+  (sbcl-package->cl-source-package sbcl-nhooks))
+
+(define-public ecl-nhooks
+  (sbcl-package->ecl-package sbcl-nhooks))
diff --git a/gnu/packages/lisp.scm b/gnu/packages/lisp.scm
index b5aa6a087d..82fbd15381 100644
--- a/gnu/packages/lisp.scm
+++ b/gnu/packages/lisp.scm
@@ -5,9 +5,9 @@
 ;;; Copyright © 2016 Federico Beffa <beffa@fbengineering.ch>
 ;;; Copyright © 2016, 2017 Nikita <nikita@n0.is>
 ;;; Copyright © 2016, 2017 Andy Patterson <ajpatter@uwaterloo.ca>
-;;; Copyright © 2017, 2019 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2017, 2019, 2020 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017, 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
-;;; Copyright © 2017, 2019–2021 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2017, 2019–2022 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Benjamin Slade <slade@jnanam.net>
 ;;; Copyright © 2018 Alex Vong <alexvong1995@gmail.com>
 ;;; Copyright © 2018, 2019, 2020 Pierre Neidhardt <mail@ambrevar.xyz>
@@ -20,6 +20,7 @@
 ;;; Copyright © 2021 Sharlatan Hellseher <sharlatanus@gmail.com>
 ;;; Copyright © 2021 Paul A. Patience <paul@apatience.com>
 ;;; Copyright © 2021 Charles Jackson <charles.b.jackson@protonmail.com>
+;;; Copyright © 2021 jgart <jgart@dismail.de>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -47,6 +48,7 @@
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
+  #:use-module (guix gexp)
   #:use-module (guix utils)
   #:use-module (guix build-system copy)
   #:use-module (guix build-system gnu)
@@ -66,20 +68,21 @@
   #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages groff)
-  #:use-module (gnu packages m4)
-  #:use-module (gnu packages maths)
-  #:use-module (gnu packages multiprecision)
-  #:use-module (gnu packages ncurses)
   #:use-module (gnu packages libffcall)
   #:use-module (gnu packages libffi)
   #:use-module (gnu packages libsigsegv)
   #:use-module (gnu packages linux)
+  #:use-module (gnu packages m4)
+  #:use-module (gnu packages maths)
+  #:use-module (gnu packages multiprecision)
+  #:use-module (gnu packages ncurses)
+  #:use-module (gnu packages onc-rpc)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages sdl)
   #:use-module (gnu packages tex)
-  #:use-module (gnu packages tls)
   #:use-module (gnu packages texinfo)
+  #:use-module (gnu packages tls)
   #:use-module (gnu packages version-control)
   #:use-module (gnu packages xorg)
   #:use-module (ice-9 match))
@@ -128,33 +131,52 @@ Definition Facility.")
     (license license:expat)))
 
 (define-public gcl
-  (let ((commit "d3335e2b3deb63f930eb0328e9b05377744c9512")
-        (revision "2")) ;Guix package revision
+  (let ((commit "ff7ef981765cc0efdb4b1db27c292f5c11a72753")
+        (revision "3")) ;Guix package revision
     (package
       (name "gcl")
-      (version (string-append "2.6.12-" revision "."
-                              (string-take commit 7)))
+      (version (git-version "2.6.12" revision commit))
       (source
        (origin
          (method git-fetch)
          (uri (git-reference
                (url "https://git.savannah.gnu.org/r/gcl.git")
                (commit commit)))
-         (file-name (string-append "gcl-" version "-checkout"))
+         (file-name (git-file-name name version))
          (sha256
-          (base32 "05v86lhvsby05nzvcd3c4k0wljvgdgd0i6arzd2fx1yd67dl6fgj"))))
+          (base32 "0z64fxxcaial2i1s1hms8r095dm1ff3wd8ivwdx894a3yln9c0an"))))
       (build-system gnu-build-system)
       (arguments
        `(#:parallel-build? #f  ; The build system seems not to be thread safe.
          #:test-target "ansi-tests/test_results"
-         #:configure-flags '("--enable-ansi") ; required for use by the maxima package
-         #:make-flags (list
-                       (string-append "GCL_CC=" (assoc-ref %build-inputs "gcc")
-                                      "/bin/gcc")
-                       (string-append "CC=" (assoc-ref %build-inputs "gcc")
-                                      "/bin/gcc"))
+         #:configure-flags ,#~(list
+                               "--enable-ansi" ; required by the maxima package
+                               (string-append "CFLAGS=-I"
+                                              #$(this-package-input "libtirpc")
+                                              "/include/tirpc")
+                               (string-append "LDFLAGS=-L"
+                                              #$(this-package-input "libtirpc")
+                                              "/lib")
+                               "LIBS=-ltirpc")
+         #:make-flags ,#~(let ((gcc (search-input-file %build-inputs "/bin/gcc")))
+                           (list (string-append "GCL_CC=" gcc)
+                                 (string-append "CC=" gcc)))
          #:phases
          (modify-phases %standard-phases
+           (add-after 'unpack 'realpath-workaround
+             ;; Calls to the realpath function can set errno even if the return
+             ;; value of the function indicates that there is no error, which
+             ;; make massert consider that there was an error.
+             (lambda _
+               (substitute* "gcl/o/main.c"
+                 (("massert\\(realpath\\(s,o\\)\\);" all)
+                  "massert((realpath(s, o) != NULL) && ((errno = 0) == 0));"))))
+           (add-after 'unpack 'fix-makefile
+             ;; The "final" target doesn't exist.
+             (lambda _
+               (substitute* "gcl/makefile"
+                 (("\\$\\(MAKE\\) -C \\$\\(PORTDIR\\) final")
+                  "$(MAKE) -C $(PORTDIR)"))))
            (add-before 'configure 'pre-conf
              (lambda* (#:key inputs #:allow-other-keys)
                (chdir "gcl")
@@ -209,13 +231,11 @@ Definition Facility.")
            ;; https://www.ma.utexas.edu/pipermail/maxima/2008/009769.html
            (delete 'strip))))
       (inputs
-       `(("gmp" ,gmp)
-         ("readline" ,readline)))
+       (list bash-minimal gmp libtirpc readline))
       (native-inputs
-       `(("m4" ,m4)
-         ("texinfo" ,texinfo)))
+       (list m4 texinfo))
       (home-page "https://www.gnu.org/software/gcl/")
-      (synopsis "A Common Lisp implementation")
+      (synopsis "Common Lisp implementation")
       (description "GCL is an implementation of the Common Lisp language.  It
 features the ability to compile to native object code and to load native
 object code modules directly into its lisp core.  It also features a
@@ -238,9 +258,7 @@ interface to the Tk widget system.")
     (build-system gnu-build-system)
     ;; src/configure uses 'which' to confirm the existence of 'gzip'.
     (native-inputs
-     `(("cl-asdf" ,cl-asdf)
-       ("which" ,which)
-       ("texinfo" ,texinfo)))
+     (list cl-asdf which texinfo))
     ;; When ECL is embedded in a program that wants to use Common Lisp as an
     ;; extension language, libgmp, libatomic-ops, libgc and libffi must be
     ;; present when compiling the program because they are required by ECL's
@@ -248,10 +266,7 @@ interface to the Tk widget system.")
     ;; Therefore we put these libraries in 'propagated-inputs' instead
     ;; of 'inputs'.
     (propagated-inputs
-     `(("gmp" ,gmp)
-       ("libatomic-ops" ,libatomic-ops)
-       ("libgc" ,libgc)
-       ("libffi" ,libffi)))
+     (list gmp libatomic-ops libgc libffi))
     (arguments
      `(#:configure-flags '("--without-rt")
        ;; FIXME: As of version 20.4.24, we pass 17995 tests and fail 7.
@@ -341,11 +356,8 @@ supporting ASDF, Sockets, Gray streams, MOP, and other useful components.")
         (base32 "0k2dmgl0miz3767iks4p0mvp6xw0ysyxhjpklyh11j010rmh6hqb"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("cl-asdf" ,cl-asdf)))
-    (inputs `(("libffcall" ,libffcall)
-              ("ncurses" ,ncurses)
-              ("readline" ,readline)
-              ("libsigsegv" ,libsigsegv)))
+     (list cl-asdf))
+    (inputs (list libffcall ncurses readline libsigsegv))
     (arguments
      `(#:configure-flags '(,@(if (string-prefix? "armhf-linux"
                                                  (or (%current-system)
@@ -395,7 +407,7 @@ supporting ASDF, Sockets, Gray streams, MOP, and other useful components.")
             (variable "XDG_CONFIG_DIRS")
             (files '("etc")))))
     (home-page "https://clisp.sourceforge.io/")
-    (synopsis "A Common Lisp implementation")
+    (synopsis "Common Lisp implementation")
     (description
      "GNU CLISP is an implementation of ANSI Common Lisp.  Common Lisp is a
 high-level, object-oriented functional programming language.  CLISP includes
@@ -446,7 +458,7 @@ an interpreter, a compiler, a debugger, and much more.")
        ("ed" ,ed)
        ("inetutils" ,inetutils)         ;for hostname(1)
        ("texinfo" ,texinfo)
-       ("texlive" ,(texlive-union (list texlive-tex-texinfo)))
+       ("texlive" ,(texlive-updmap.cfg (list texlive-tex-texinfo)))
        ("which" ,which)
        ("zlib" ,zlib)))
     (arguments
@@ -518,10 +530,6 @@ an interpreter, a compiler, a debugger, and much more.")
                  (("\\(deftest grent\\.[12]" all)
                   (string-append "#+nil ;disabled by Guix\n" all))))
              #t))
-         ;; FIXME: the texlive-union insists on regenerating fonts.  It stores
-         ;; them in HOME, so it needs to be writeable.
-         (add-before 'build 'set-HOME
-           (lambda _ (setenv "HOME" "/tmp") #t))
          (replace 'build
            (lambda* (#:key outputs #:allow-other-keys)
              (setenv "CC" "gcc")
@@ -641,8 +649,7 @@ statistical profiler, a code coverage tool, and many other extensions.")
                 "0x4bjx6cxsjvxyagijhlvmc7jkyxifdvz5q5zvz37028va65243c")
                (_ "0ll017ajcfsyx8f7zsy4394y8xxvz40iz0gcsmznp0n3mf0xi67c"))))))))
     (native-inputs
-     `(("cl-asdf" ,cl-asdf)
-       ("m4" ,m4)))
+     (list cl-asdf m4))
     (arguments
      `(#:tests? #f                      ;no 'check' target
        #:modules ((ice-9 match)
@@ -771,7 +778,7 @@ interface.")
                                "X_EXTRA_LIBS=-lfontconfig"
                                "--with-x")
        #:tests? #f)) ; No make check.
-    (native-inputs `(("intltool" ,intltool)))
+    (native-inputs (list intltool))
     (inputs
      `(("alsa-lib" ,alsa-lib)
        ("sdl" ,sdl)
@@ -837,9 +844,9 @@ libraries for Machine Learning, Neural Nets and statistical estimation.")
                  (install-file "mdli" bin)
                  #t))))))
       (native-inputs
-       `(("perl" ,perl)))
+       (list perl))
       (inputs
-       `(("libgc" ,libgc)))
+       (list libgc))
       (synopsis "Interpreter for the MIT Design Language (MDL)")
       (description "MDL (the MIT Design Language) is a descendant of Lisp.  It
 was originally developed in 1971 on the PDP-10 computer under the Incompatible
@@ -908,7 +915,7 @@ the HTML documentation of TXR.")
 (define-public txr
   (package
     (name "txr")
-    (version "270")
+    (version "273")
     (source
      (origin
        (method git-fetch)
@@ -917,16 +924,8 @@ the HTML documentation of TXR.")
              (commit (string-append "txr-" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1kp64h3ls8mddvrlaqqylrb3brckfrqvkk8049xn15mimfggg0xv"))))
+        (base32 "1m4akw64458qcrfbqv71z9y8q9dszj26d7jfqblcn6nn8akx2jyb"))))
     (build-system gnu-build-system)
-    (native-inputs
-     ;; Required to build the documentation.
-     `(("ghostscript" ,ghostscript)
-       ("groff" ,groff)
-       ("man2html" ,man-for-txr)))
-    (inputs
-     `(("bash" ,bash-minimal)
-       ("libffi" ,libffi)))
     (arguments
      `(#:configure-flags
        (list ,(string-append "cc=" (cc-for-target))
@@ -940,8 +939,7 @@ the HTML documentation of TXR.")
                (("INSTALL(,.*LICENSE,.*)\\$\\(datadir\\)" _ match)
                 (string-append "INSTALL" match
                                (assoc-ref outputs "out")
-                               "/share/doc/" ,name "-" ,version)))
-             #t))
+                               "/share/doc/" ,name "-" ,version)))))
          (delete 'install-license-files)
          (add-after 'unpack 'inhibit-doc-syms-generation
            (lambda _
@@ -951,8 +949,7 @@ the HTML documentation of TXR.")
                ;; each release (and is already compiled to stdlib/doc-syms.tlo
                ;; when genman.txr is run).
                (("^@\\(output \"stdlib/doc-syms\\.tl\"\\).*" line)
-                (string-append "@(do (exit))\n" line)))
-             #t))
+                (string-append "@(do (exit))\n" line)))))
          (add-after 'unpack 'fix-paths
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "stream.c"
@@ -968,20 +965,25 @@ the HTML documentation of TXR.")
            ;; autotools arguments like CONFIG_SHELL.
            (lambda* (#:key configure-flags #:allow-other-keys)
              (setenv "txr_shell" (which "bash"))
-             (apply invoke "./configure" configure-flags)
-             #t))
+             (apply invoke "./configure" configure-flags)))
          (add-after 'build 'build-doc
            (lambda _
              (setenv "GS_GENERATE_UUIDS" "0")
-             (invoke "make" "txr-manpage.html" "txr-manpage.pdf")
-             #t))
+             (invoke "make" "txr-manpage.html" "txr-manpage.pdf")))
          (add-after 'install 'install-doc
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((doc (string-append (assoc-ref outputs "out")
                                        "/share/doc/" ,name "-" ,version)))
                (for-each (lambda (f) (install-file f doc))
-                         '("txr-manpage.html" "txr-manpage.pdf")))
-             #t)))))
+                         '("txr-manpage.html" "txr-manpage.pdf"))))))))
+    (native-inputs
+     ;; Required to build the documentation.
+     (list ghostscript
+           groff
+           man-for-txr))
+    (inputs
+     (list bash-minimal
+           libffi))
     (synopsis "General-purpose, multi-paradigm programming language")
     (description
      "TXR is a general-purpose, multi-paradigm programming language.  It
@@ -1107,8 +1109,7 @@ including a built-in database engine and a GUI system.")
        (inherit picolisp32)
        (name "picolisp")
        (native-inputs
-        `(("picolisp32" ,picolisp32)
-          ("which" ,which)))
+        (list picolisp32 which))
        (arguments
         (substitute-keyword-arguments (package-arguments picolisp32)
           ((#:system _ "") (%current-system))
@@ -1155,7 +1156,7 @@ including a built-in database engine and a GUI system.")
 (define-public janet
   (package
     (name "janet")
-    (version "1.12.2")
+    (version "1.19.2")
     (source
      (origin
        (method git-fetch)
@@ -1164,20 +1165,18 @@ including a built-in database engine and a GUI system.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0if514zdmbjvvrsa9x5yfvg2b14sz53yaka12g3yhwkq8ls3qk0c"))))
+        (base32 "0waj22rzxmc0yx1yr0pzw9lwp6my5abfpfi6vq932bmli8y9prpd"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:make-flags (list
-                     (string-append "DESTDIR=" (assoc-ref %outputs "out"))
-                     (string-append "PREFIX=")
-                     (string-append "CC=" (assoc-ref %build-inputs "gcc")
-                                    "/bin/gcc"))
-       #:phases
-       (modify-phases %standard-phases
-         (delete 'configure)
-         (replace 'check
-           (lambda _
-             (invoke "make" "test"))))))
+     (list #:make-flags
+           #~(list
+              (string-append "DESTDIR=" #$output)
+              (string-append "PREFIX=")
+              (string-append "CC=" #$(cc-for-target)))
+           #:test-target "test"
+           #:phases
+           #~(modify-phases %standard-phases
+               (delete 'configure))))
     (home-page "https://janet-lang.org/")
     (synopsis "Functional, imperative and embeddable programming language")
     (description
@@ -1210,12 +1209,11 @@ assembler, PEG) is less than 1MB.")
        (modify-phases %standard-phases
          (add-before 'install 'fix-utils-path
            (lambda* (#:key inputs #:allow-other-keys)
-             (let* ((coreutils (string-append (assoc-ref inputs "coreutils") "/bin/"))
-                    (cat (string-append coreutils "cat"))
-                    (paste (string-append coreutils "paste"))
-                    (sort (string-append coreutils "sort"))
-                    (basename (string-append coreutils "basename"))
-                    (sed (string-append (assoc-ref inputs "sed") "/bin/sed")))
+             (let* ((cat (search-input-file inputs "/bin/cat"))
+                    (paste (search-input-file inputs "/bin/paste"))
+                    (sort (search-input-file inputs "/bin/sort"))
+                    (basename (search-input-file inputs "/bin/basename"))
+                    (sed (search-input-file inputs "/bin/sed")))
                (substitute* "lisp-repl-core-dumper"
                  (("\\$\\(basename") (string-append "$(" basename))
                  (("\\<cat\\>") cat)
@@ -1253,7 +1251,7 @@ and make for REPLs that start blazing fast.
         (base32 "020ipjfqa3l8skd97cj5kq837wgpj28ygfxnkv64cnjrlbnzh161"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("sbcl" ,sbcl)))
+     (list sbcl))
     (arguments
      `(#:tests? #f
        #:make-flags
@@ -1275,5 +1273,5 @@ and make for REPLs that start blazing fast.
     (synopsis "Makes easy to build application executables with SBCL")
     (description
      "Buildapp is an application for SBCL or CCL that configures and saves an
-executable Common Lisp image.  It is similar to cl-launch and hu.dwim.build. ")
+executable Common Lisp image.  It is similar to cl-launch and hu.dwim.build.")
     (license license:bsd-2)))
diff --git a/gnu/packages/llvm.scm b/gnu/packages/llvm.scm
index 37626edff7..83f57ec28e 100644
--- a/gnu/packages/llvm.scm
+++ b/gnu/packages/llvm.scm
@@ -5,7 +5,7 @@
 ;;; Copyright © 2016 Dennis Mungai <dmngaie@gmail.com>
 ;;; Copyright © 2016, 2018, 2019, 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017 Roel Janssen <roel@gnu.org>
-;;; Copyright © 2018, 2019, 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2018–2022 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018 Tim Gesthuizen <tim.gesthuizen@yahoo.de>
@@ -16,9 +16,12 @@
 ;;; Copyright © 2019 Brett Gilio <brettg@gnu.org>
 ;;; Copyright © 2020 Giacomo Leidi <goodoldpaul@autistici.org>
 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
-;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
+;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2021 Lars-Dominik Braun <lars@6xq.net>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -39,6 +42,7 @@
   #:use-module (guix packages)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix download)
+  #:use-module (guix gexp)
   #:use-module (guix git-download)
   #:use-module (guix memoization)
   #:use-module (guix utils)
@@ -51,7 +55,9 @@
   #:use-module (gnu packages base)
   #:use-module (gnu packages gcc)
   #:use-module (gnu packages bootstrap)           ;glibc-dynamic-linker
+  #:use-module (gnu packages check)               ;python-lit
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages julia)               ;julia-patch
   #:use-module (gnu packages libedit)
   #:use-module (gnu packages libffi)
   #:use-module (gnu packages lua)
@@ -64,7 +70,10 @@
   #:use-module (gnu packages python)
   #:use-module (gnu packages swig)
   #:use-module (gnu packages xml)
-  #:export (system->llvm-target))
+  #:use-module (srfi srfi-1)
+  #:use-module (ice-9 match)
+  #:export (make-lld-wrapper
+            system->llvm-target))
 
 (define* (system->llvm-target #:optional
                               (system (or (and=> (%current-target-system)
@@ -107,7 +116,7 @@ as \"x86_64-linux\"."
     (build-system cmake-build-system)
     (native-inputs (package-native-inputs llvm))
     (inputs
-     `(("llvm" ,llvm)))
+     (list llvm))
     (arguments
      `(;; Don't use '-g' during the build to save space.
        #:build-type "Release"
@@ -146,7 +155,9 @@ compiler.  In LLVM this library is called \"compiler-rt\".")
     (supported-systems (delete "mips64el-linux" %supported-systems))))
 
 (define* (clang-from-llvm llvm clang-runtime hash
-                          #:key (patches '()) tools-extra)
+                          #:key (patches '()) tools-extra
+                          (properties
+                           (clang-properties (package-version llvm))))
   "Produce Clang with dependencies on LLVM and CLANG-RUNTIME, and applying the
 given PATCHES.  When TOOLS-EXTRA is given, it must point to the
 'clang-tools-extra' tarball, which contains code for 'clang-tidy', 'pp-trace',
@@ -177,8 +188,7 @@ given PATCHES.  When TOOLS-EXTRA is given, it must point to the
              `(("clang-tools-extra" ,tools-extra))
              '())))
     (propagated-inputs
-     `(("llvm" ,llvm)
-       ("clang-runtime" ,clang-runtime)))
+     (list llvm clang-runtime))
     (arguments
      `(#:configure-flags
        (list "-DCLANG_INCLUDE_TESTS=True"
@@ -354,26 +364,28 @@ given PATCHES.  When TOOLS-EXTRA is given, it must point to the
                                 #t))))
                         '())
                   ,@(if (version>? version "3.8")
-                        `((add-after 'install 'symlink-cfi_blacklist
+                        `((add-after 'install 'symlink-cfi_ignorelist
                             (lambda* (#:key inputs outputs #:allow-other-keys)
                               (let* ((out (assoc-ref outputs "out"))
                                      (lib-share (string-append out "/lib/clang/"
                                                                ,version "/share"))
                                      (compiler-rt (assoc-ref inputs "clang-runtime"))
+                                     (file-name ,(if (version>=? version "13")
+                                                     "cfi_ignorelist.txt"
+                                                     "cfi_blacklist.txt"))
                                      ;; The location varies between Clang versions.
-                                     (cfi-blacklist
+                                     (cfi-ignorelist
                                       (cond
                                        ((file-exists?
-                                         (string-append compiler-rt "/cfi_blacklist.txt"))
-                                        (string-append compiler-rt "/cfi_blacklist.txt"))
+                                         (string-append compiler-rt "/" file-name))
+                                        (string-append compiler-rt "/" file-name))
                                        (else (string-append compiler-rt
-                                                            "/share/cfi_blacklist.txt")))))
+                                                            "/share/" file-name)))))
                                 (mkdir-p lib-share)
-                                ;; Symlink cfi_blacklist.txt to where Clang expects
+                                ;; Symlink the ignorelist to where Clang expects
                                 ;; to find it.
-                                (symlink cfi-blacklist
-                                         (string-append lib-share "/cfi_blacklist.txt"))
-                                #t))))
+                                (symlink cfi-ignorelist
+                                         (string-append lib-share "/" file-name))))))
                         '())
                   (add-after 'install 'install-clean-up-/share/clang
                     (lambda* (#:key outputs #:allow-other-keys)
@@ -418,10 +430,76 @@ given PATCHES.  When TOOLS-EXTRA is given, it must point to the
 Objective-C++ programming languages.  It uses LLVM as its back end.  The Clang
 project includes the Clang front end, the Clang static analyzer, and several
 code analysis tools.")
+    (properties properties)
     (license (if (version>=? version "9.0")
                  license:asl2.0         ;with LLVM exceptions
                  license:ncsa))))
 
+(define (clang-properties version)
+  "Return package properties for Clang VERSION."
+  `((compiler-cpu-architectures
+     ("x86_64"
+      ;; This list was obtained by running:
+      ;;
+      ;;   guix shell clang -- llc -march=x86-64 -mattr=help
+      ;;
+      ;; filtered from uninteresting entries such as "i686" and "pentium".
+      ,@(if (version>=? version "10.0")           ;TODO: refine
+            '("atom"
+              "barcelona"
+              "bdver1"
+              "bdver2"
+              "bdver3"
+              "bdver4"
+              "bonnell"
+              "broadwell"
+              "btver1"
+              "btver2"
+              "c3"
+              "c3-2"
+              "cannonlake"
+              "cascadelake"
+              "cooperlake"
+              "core-avx-i"
+              "core-avx2"
+              "core2"
+              "corei7"
+              "corei7-avx"
+              "generic"
+              "geode"
+              "goldmont"
+              "goldmont-plus"
+              "haswell"
+              "icelake-client"
+              "icelake-server"
+              "ivybridge"
+              "k8"
+              "k8-sse3"
+              "knl"
+              "knm"
+              "lakemont"
+              "nehalem"
+              "nocona"
+              "opteron"
+              "opteron-sse3"
+              "sandybridge"
+              "silvermont"
+              "skx"
+              "skylake"
+              "skylake-avx512"
+              "slm"
+              "tigerlake"
+              "tremont"
+              "westmere"
+              "x86-64"
+              "x86-64-v2"
+              "x86-64-v3"
+              "x86-64-v4"
+              "znver1"
+              "znver2"
+              "znver3")
+            '())))))
+
 (define (make-clang-toolchain clang)
   (package
     (name (string-append (package-name clang) "-toolchain"))
@@ -463,6 +541,7 @@ code analysis tools.")
     (search-paths (package-search-paths clang))
 
     (license (package-license clang))
+    (properties (package-properties clang))  ;for 'compiler-cpu-architectures'
     (home-page "https://clang.llvm.org")
     (synopsis "Complete Clang toolchain for C/C++ development")
     (description "This package provides a complete Clang toolchain for C/C++
@@ -473,38 +552,134 @@ output), and Binutils.")
     (inputs `(("clang" ,clang)
               ("ld-wrapper" ,(car (assoc-ref (%final-inputs) "ld-wrapper")))
               ("binutils" ,binutils)
+              ("libomp" ,libomp)            ;used when linking with '-fopenmp'
               ("libc" ,glibc)
               ("libc-debug" ,glibc "debug")
               ("libc-static" ,glibc "static")))))
 
-(define-public llvm-12
+(define-public llvm-13
   (package
     (name "llvm")
-    (version "12.0.1")
+    (version "13.0.0")
     (source
      (origin
       (method url-fetch)
       (uri (llvm-uri "llvm" version))
       (sha256
        (base32
-        "1pzx9zrmd7r3481sbhwvkms68fwhffpp4mmz45dgrkjpyl2q96kx"))))
+        "081h2vw757j5xjg2441539j2vhfzzihrgxwza5pq5sj3hrq133a0"))))
     (build-system cmake-build-system)
     (outputs '("out" "opt-viewer"))
     (native-inputs
-     `(("python" ,python)
+     `(("python" ,python-wrapper)
        ("perl"   ,perl)))
     (inputs
-     `(("libffi" ,libffi)))
+     (list libffi))
     (propagated-inputs
-     `(("zlib" ,zlib)))                 ;to use output from llvm-config
+     (list zlib))                 ;to use output from llvm-config
     (arguments
-     `(#:configure-flags '("-DCMAKE_SKIP_BUILD_RPATH=FALSE"
-                           "-DCMAKE_BUILD_WITH_INSTALL_RPATH=FALSE"
-                           "-DBUILD_SHARED_LIBS:BOOL=TRUE"
-                           "-DLLVM_ENABLE_FFI:BOOL=TRUE"
-                           "-DLLVM_REQUIRES_RTTI=1" ; For some third-party utilities
-                           "-DLLVM_INSTALL_UTILS=ON") ; Needed for rustc.
+     `(#:configure-flags
+       ,#~(quasiquote
+           ;; These options are required for cross-compiling LLVM according to
+           ;; https://llvm.org/docs/HowToCrossCompileLLVM.html.
+           (#$@(if (%current-target-system)
+                   #~(,(string-append "-DLLVM_TABLEGEN="
+                                      #+(file-append this-package
+                                                     "/bin/llvm-tblgen"))
+                      #$(string-append "-DLLVM_DEFAULT_TARGET_TRIPLE="
+                                       (%current-target-system))
+                      #$(string-append "-DLLVM_TARGET_ARCH="
+                                       (system->llvm-target))
+                      #$(string-append "-DLLVM_TARGETS_TO_BUILD="
+                                       (system->llvm-target)))
+                   #~())
+            "-DCMAKE_SKIP_BUILD_RPATH=FALSE"
+            "-DCMAKE_BUILD_WITH_INSTALL_RPATH=FALSE"
+            "-DBUILD_SHARED_LIBS:BOOL=TRUE"
+            "-DLLVM_ENABLE_FFI:BOOL=TRUE"
+            "-DLLVM_REQUIRES_RTTI=1" ; For some third-party utilities
+            "-DLLVM_INSTALL_UTILS=ON")) ; Needed for rustc.
+       ;; Don't use '-g' during the build, to save space.
+       #:build-type "Release"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'install-opt-viewer
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (opt-viewer-out (assoc-ref outputs "opt-viewer"))
+                    (opt-viewer-share-dir (string-append opt-viewer-out "/share"))
+                    (opt-viewer-dir (string-append opt-viewer-share-dir "/opt-viewer")))
+               (mkdir-p opt-viewer-share-dir)
+               (rename-file (string-append out "/share/opt-viewer")
+                            opt-viewer-dir)))))))
+    (home-page "https://www.llvm.org")
+    (synopsis "Optimizing compiler infrastructure")
+    (description
+     "LLVM is a compiler infrastructure designed for compile-time, link-time,
+runtime, and idle-time optimization of programs from arbitrary programming
+languages.  It currently supports compilation of C and C++ programs, using
+front-ends derived from GCC 4.0.1.  A new front-end for the C family of
+languages is in development.  The compiler infrastructure includes mirror sets
+of programming tools as well as libraries with equivalent functionality.")
+    (license license:asl2.0)))
+
+(define-public clang-runtime-13
+  (clang-runtime-from-llvm
+   llvm-13
+   "0gyvfhnypfmlf7hdgkiz2wh2lgk4nz26aqf361msjs3qdkbh4djc"))
 
+(define-public clang-13
+  (clang-from-llvm llvm-13 clang-runtime-13
+                   "0zp1p6syii5iajm8v2c207s80arv00yz5ckfwimn5dng0sxiqqax"
+                   #:patches '("clang-13.0-libc-search-path.patch")
+                   #:tools-extra
+                   (origin
+                     (method url-fetch)
+                     (uri (llvm-uri "clang-tools-extra"
+                                    (package-version llvm-13)))
+                     (sha256
+                      (base32
+                       "1mgalgdgxlxi08yxw7k6yh4iia1bpjmjgn7mrpqas8lbl9h612s2")))))
+
+(define-public clang-toolchain-13
+  (make-clang-toolchain clang-13))
+
+(define-public llvm-12
+  (package
+    (inherit llvm-13)
+    (version "12.0.1")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (llvm-uri "llvm" version))
+      (sha256
+       (base32
+        "1pzx9zrmd7r3481sbhwvkms68fwhffpp4mmz45dgrkjpyl2q96kx"))))
+    (arguments
+     ;; TODO(core-updates): Unconditionally use quasiquote
+     `(#:configure-flags
+       ,#~(#$(if (%current-target-system)
+                 #~quasiquote
+                 #~quote)
+           ;; These options are required for cross-compiling LLVM according to
+           ;; https://llvm.org/docs/HowToCrossCompileLLVM.html.
+           (#$@(if (%current-target-system)
+                   #~(,(string-append "-DLLVM_TABLEGEN="
+                                      #+(file-append this-package
+                                                     "/bin/llvm-tblgen"))
+                      #$(string-append "-DLLVM_DEFAULT_TARGET_TRIPLE="
+                                       (%current-target-system))
+                      #$(string-append "-DLLVM_TARGET_ARCH="
+                                       (system->llvm-target))
+                      #$(string-append "-DLLVM_TARGETS_TO_BUILD="
+                                       (system->llvm-target)))
+                   #~())
+            "-DCMAKE_SKIP_BUILD_RPATH=FALSE"
+            "-DCMAKE_BUILD_WITH_INSTALL_RPATH=FALSE"
+            "-DBUILD_SHARED_LIBS:BOOL=TRUE"
+            "-DLLVM_ENABLE_FFI:BOOL=TRUE"
+            "-DLLVM_REQUIRES_RTTI=1" ; For some third-party utilities
+            "-DLLVM_INSTALL_UTILS=ON")) ; Needed for rustc.
        ;; Don't use '-g' during the build, to save space.
        #:build-type "Release"
        #:phases
@@ -527,17 +702,7 @@ output), and Binutils.")
                (mkdir-p opt-viewer-share-dir)
                (rename-file (string-append out "/share/opt-viewer")
                             opt-viewer-dir))
-             #t)))))
-    (home-page "https://www.llvm.org")
-    (synopsis "Optimizing compiler infrastructure")
-    (description
-     "LLVM is a compiler infrastructure designed for compile-time, link-time,
-runtime, and idle-time optimization of programs from arbitrary programming
-languages.  It currently supports compilation of C and C++ programs, using
-front-ends derived from GCC 4.0.1.  A new front-end for the C family of
-languages is in development.  The compiler infrastructure includes mirror sets
-of programming tools as well as libraries with equivalent functionality.")
-    (license license:asl2.0)))  ;with LLVM exceptions, see LICENSE.txt
+             #t)))))))
 
 (define-public clang-runtime-12
   (clang-runtime-from-llvm
@@ -547,7 +712,7 @@ of programming tools as well as libraries with equivalent functionality.")
 (define-public clang-12
   (clang-from-llvm llvm-12 clang-runtime-12
                    "0px4gl27az6cdz6adds89qzdwb1cqpjsfvrldbz9qvpmphrj34bf"
-                   #:patches '("clang-11.0-libc-search-path.patch")
+                   #:patches '("clang-12.0-libc-search-path.patch")
                    #:tools-extra
                    (origin
                      (method url-fetch)
@@ -570,11 +735,7 @@ of programming tools as well as libraries with equivalent functionality.")
       (uri (llvm-uri "llvm" version))
       (sha256
        (base32
-        "0s94lwil98w7zb7cjrbnxli0z7gklb312pkw74xs1d6zk346hgwi"))))
-    (native-inputs
-     `(;; TODO: Switch to Python 3 in the next rebuild cycle.
-       ("python" ,python-2)
-       ("perl"   ,perl)))))
+        "0s94lwil98w7zb7cjrbnxli0z7gklb312pkw74xs1d6zk346hgwi"))))))
 
 (define-public clang-runtime-11
   (clang-runtime-from-llvm
@@ -600,23 +761,23 @@ of programming tools as well as libraries with equivalent functionality.")
 (define-public llvm-10
   (package
     (inherit llvm-11)
-    (version "10.0.0")
+    (version "10.0.1")
     (source
      (origin
       (method url-fetch)
       (uri (llvm-uri "llvm" version))
       (sha256
        (base32
-        "1pwgm6cr0xr5a0hrbqs1zvsvvjvy0yq1y47c96804wcs795s90yz"))))))
+        "1wydhbp9kyjp5y0rc627imxgkgqiv3dfirbqil9dgpnbaw5y7n65"))))))
 
 (define-public clang-runtime-10
   (clang-runtime-from-llvm
    llvm-10
-   "0x9c531k6ww21s2mkdwqx1vbdjmx6d4wmfb8gdbj0wqa796sczba"))
+   "1yjqjri753w0fzmxcyz687nvd97sbc9rsqrxzpq720na47hwh3fr"))
 
 (define-public clang-10
   (clang-from-llvm llvm-10 clang-runtime-10
-                   "08fbxa2a0kr3ni35ckppj0kyvlcyaywrhpqwcdrdy0z900mhcnw8"
+                   "091bvcny2lh32zy8f3m9viayyhb2zannrndni7325rl85cwgr6pr"
                    #:patches '("clang-10.0-libc-search-path.patch")
                    #:tools-extra
                    (origin
@@ -625,7 +786,7 @@ of programming tools as well as libraries with equivalent functionality.")
                                              (package-version llvm-10)))
                      (sha256
                       (base32
-                       "074ija5s2jsdn0k035r2dzmryjmqxdnyg4xwvaqych2bazv8rpxc")))))
+                       "06n1yp638rh24xdxv9v2df0qajxbjz4w59b7dd4ky36drwmpi4yh")))))
 
 (define-public clang-toolchain-10
   (make-clang-toolchain clang-10))
@@ -681,7 +842,7 @@ of programming tools as well as libraries with equivalent functionality.")
 (define-public clang-8
   (clang-from-llvm llvm-8 clang-runtime-8
                    "0svk1f70hvpwrjp6x5i9kqwrqwxnmcrw5s7f4cxyd100mdd12k08"
-                   #:patches '("clang-7.0-libc-search-path.patch")))
+                   #:patches '("clang-8.0-libc-search-path.patch")))
 
 (define-public clang-toolchain-8
   (make-clang-toolchain clang-8))
@@ -824,6 +985,8 @@ of programming tools as well as libraries with equivalent functionality.")
      (origin
        (method url-fetch)
        (uri (llvm-uri "llvm" version))
+       (patches
+        (search-patches "llvm-3.6-fix-build-with-gcc-10.patch"))
        (sha256
         (base32
          "153vcvj8gvgwakzr4j0kndc0b7wn91c2g1vy2vg24s6spxcc23gn"))))))
@@ -858,14 +1021,13 @@ of programming tools as well as libraries with equivalent functionality.")
              (add-after 'unpack 'find-rpc-includes
                (lambda* (#:key inputs #:allow-other-keys)
                  (setenv "CPATH"
-                         (string-append (assoc-ref inputs "libtirpc")
-                                        "/include/tirpc/:"
-                                        (or (getenv "CPATH") "")))
+                         (string-append
+                          (search-input-directory inputs "/include/tirpc")
+                          ":" (or (getenv "CPATH") "")))
                  (setenv "CPLUS_INCLUDE_PATH"
-                         (string-append (assoc-ref inputs "libtirpc")
-                                        "/include/tirpc/:"
-                                        (or (getenv "CPLUS_INCLUDE_PATH") "")))
-                 #t))))))
+                         (string-append
+                          (search-input-directory inputs "/include/tirpc")
+                          ":" (or (getenv "CPLUS_INCLUDE_PATH") "")))))))))
       (inputs
        `(("libtirpc" ,libtirpc)
          ("llvm" ,llvm-3.5))))))
@@ -922,13 +1084,13 @@ of programming tools as well as libraries with equivalent functionality.")
 (define-public libunwind-headers
   (package
     (name "libunwind-headers")
-    (version "12.0.1")
+    (version "13.0.0")
     (source (origin
               (method url-fetch)
               (uri (llvm-uri "libunwind" version))
               (sha256
                (base32
-                "192ww6n81lj2mb9pj4043z79jp3cf58a9c2qrxjwm5c3a64n1shb"))))
+                "1qb5ickp7qims5q7sxacj3fwq1kklvnl94k3v9hpl5qn284iky1n"))))
     (build-system cmake-build-system)
     (arguments
      '(#:phases (modify-phases (map (lambda (phase)
@@ -949,20 +1111,20 @@ of programming tools as well as libraries with equivalent functionality.")
 (define-public lld
   (package
     (name "lld")
-    (version "12.0.1")
+    (version "13.0.0")
     (source (origin
               (method url-fetch)
               (uri (llvm-uri "lld" version))
               (sha256
                (base32
-                "0qg3fgc7wj34hdkqn21y03zcmsdd01szhhm1hfki63iifrm3y2v9"))))
+                "11lkwv4jy35z2f3zcpv7hbbk9v9gpavfvxlif8265zv4rl5r1l90"))))
     (build-system cmake-build-system)
     (native-inputs
      ;; Note: check <https://bugs.llvm.org/show_bug.cgi?id=49228> to see
      ;; whether this is still necessary.
-     `(("libunwind-headers" ,libunwind-headers)))
+     (list libunwind-headers))
     (inputs
-     `(("llvm" ,llvm-12)))
+     (list llvm-13))
     (arguments
      `(#:build-type "Release"
        ;; TODO: Tests require the lit tool, which isn't installed by the LLVM
@@ -974,6 +1136,59 @@ of programming tools as well as libraries with equivalent functionality.")
 components which highly leverage existing libraries in the larger LLVM Project.")
     (license license:asl2.0))) ; With LLVM exception
 
+(define-public lld-12
+  (package
+    (inherit lld)
+    (version "12.0.1")
+    (source (origin
+              (method url-fetch)
+              (uri (llvm-uri "lld" version))
+              (sha256
+               (base32
+                "0qg3fgc7wj34hdkqn21y03zcmsdd01szhhm1hfki63iifrm3y2v9"))))
+    (inputs (modify-inputs (package-inputs lld)
+              (replace "llvm" llvm-12)))))
+
+(define* (make-lld-wrapper lld #:key lld-as-ld?)
+  "Return a LLD wrapper.  When LLD-AS-LD? is true, create a 'ld' symlink that
+points to 'lld'."
+  (package
+    (name (if lld-as-ld? "lld-as-ld-wrapper" "lld-wrapper"))
+    (version "0")
+    (source #f)
+    (build-system trivial-build-system)
+    (inputs (list (make-ld-wrapper "ld.lld-wrapper" #:binutils lld
+                                   #:linker "ld.lld")
+                  (make-ld-wrapper "lld-wrapper" #:binutils lld #:linker
+                                   "lld")))
+    (arguments
+     (list #:builder
+           #~(let ((ld.lld (string-append #$(this-package-input
+                                             "ld.lld-wrapper")
+                                          "/bin/ld.lld"))
+                   (lld (string-append #$(this-package-input "lld-wrapper")
+                                       "/bin/lld")))
+               (mkdir #$output)
+               (mkdir (string-append #$output "/bin"))
+               (symlink ld.lld (string-append #$output "/bin/ld.lld"))
+               (symlink lld (string-append #$output "/bin/lld"))
+               (when #$lld-as-ld?
+                 (symlink ld.lld (string-append #$output "/bin/ld"))))))
+    (synopsis "LLD linker wrapper")
+    (description "This is a linker wrapper for LLD; like @code{ld-wrapper}, it
+wraps the linker to add any missing @code{-rpath} flags, and to detect any
+misuse of libraries outside of the store.")
+    (home-page "https://www.gnu.org/software/guix/")
+    (license license:gpl3+)))
+
+;;; A LLD wrapper suitable to use with -fuse-ld and GCC or with Clang.
+(define-public lld-wrapper
+  (make-lld-wrapper lld))
+
+;;; A LLD wrapper that can be used as a (near) drop-in replacement to GNU ld.
+(define-public lld-as-ld-wrapper
+  (make-lld-wrapper lld #:lld-as-ld? #t))
+
 (define-public lldb
   (package
     (name "lldb")
@@ -988,19 +1203,17 @@ components which highly leverage existing libraries in the larger LLVM Project."
     (arguments
      `(#:configure-flags '("-DCMAKE_CXX_COMPILER=clang++")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("swig" ,swig)))
+     (list pkg-config swig))
     (inputs
-     `(("clang" ,clang-12)
-       ("llvm" ,llvm-12)
-
-       ;; Optional (but recommended) inputs.
-       ("curses" ,ncurses)
-       ("editline" ,libedit)
-       ("liblzma" ,xz)
-       ("libxml2" ,libxml2)
-       ("lua" ,lua)
-       ("python" ,python)))
+     (list clang-12
+           llvm-12
+           ;; Optional (but recommended) inputs.
+           ncurses
+           libedit
+           xz
+           libxml2
+           lua
+           python))
     (home-page "https://lldb.llvm.org/")
     (synopsis "Low level debugger")
     (description
@@ -1038,8 +1251,7 @@ which highly leverage existing libraries in the larger LLVM project.")
                        (getenv "CPLUS_INCLUDE_PATH"))
                #t))))))
     (native-inputs
-     `(("clang" ,clang)
-       ("llvm" ,llvm)))
+     (list clang llvm))
     (home-page "https://libcxx.llvm.org")
     (synopsis "C++ standard library")
     (description
@@ -1060,8 +1272,7 @@ use with Clang, targeting C++11, C++14 and above.")
         (base32
          "0rzw4qvxp6qx4l4h9amrq02gp7hbg8lw4m0sy3k60f50234gnm3n"))))
     (native-inputs
-     `(("clang" ,clang-6)
-       ("llvm" ,llvm-6)))))
+     (list clang-6 llvm-6))))
 
 (define-public libcxxabi-6
   (package
@@ -1112,9 +1323,7 @@ use with Clang, targeting C++11, C++14 and above.")
                (install-file "../libcxxabi/include/__cxxabi_config.h" include-dir)
                (install-file "../libcxxabi/include/cxxabi.h" include-dir)))))))
     (native-inputs
-     `(("clang" ,clang-6)
-       ("llvm" ,llvm-6)
-       ("libcxx" ,libcxx-6)))
+     (list clang-6 llvm-6 libcxx-6))
     (home-page "https://libcxxabi.llvm.org")
     (synopsis "C++ standard library support")
     (description
@@ -1150,9 +1359,7 @@ standard C++ library.")
                        "environment variable `CPLUS_INCLUDE_PATH' changed to ~a~%"
                        (getenv "CPLUS_INCLUDE_PATH"))))))))
     (native-inputs
-     `(("clang" ,clang-6)
-       ("llvm" ,llvm-6)
-       ("libcxxabi" ,libcxxabi-6)))))
+     (list clang-6 llvm-6 libcxxabi-6))))
 
 (define-public libclc
   (package
@@ -1182,9 +1389,7 @@ standard C++ library.")
          (add-after 'unpack 'chdir
            (lambda _ (chdir "libclc") #t)))))
     (native-inputs
-     `(("clang" ,clang)
-       ("llvm" ,llvm)
-       ("python" ,python)))
+     (list clang llvm python))
     (home-page "https://libclc.llvm.org")
     (synopsis "Libraries for the OpenCL programming language")
     (description
@@ -1213,12 +1418,9 @@ requirements according to version 1.1 of the OpenCL specification.")
                            "-DOPENMP_TEST_CXX_COMPILER=clang++")
        #:test-target "check-libomp"))
     (native-inputs
-     `(("clang" ,clang)
-       ("llvm" ,llvm)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list clang llvm perl pkg-config))
     (inputs
-     `(("hwloc" ,hwloc "lib")))
+     (list `(,hwloc "lib")))
     (home-page "https://openmp.llvm.org")
     (synopsis "OpenMP run-time support library")
     (description
@@ -1231,14 +1433,14 @@ with that of libgomp, the GNU Offloading and Multi Processing Library.")
 (define-public python-llvmlite
   (package
     (name "python-llvmlite")
-    (version "0.34.0")
+    (version "0.37.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "llvmlite" version))
        (sha256
         (base32
-         "0qqzs6h34002ig2jn31vk08q9hh5kn84lhmv4bljz3yakg8y0gph"))))
+         "05avhsvdcqh8wfpblx16qslfq3masqcbkfyn8p3c13h1rmqbi4k3"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -1257,69 +1459,60 @@ with that of libgomp, the GNU Offloading and Multi Processing Library.")
                                                    "binding/libllvmlite.so")))
                (substitute* "llvmlite/binding/ffi.py"
                  (("_lib_name = get_library_name\\(\\)")
-                  (format #f "_lib_name = ~s" libllvmlite.so)))
-               #t)))
+                  (format #f "_lib_name = ~s" libllvmlite.so))))))
          (add-after 'unpack 'skip-failing-tests
            (lambda _
              (substitute* "llvmlite/tests/test_binding.py"
                (("    def test_libm\\(self\\).*" all)
-                (string-append "    @unittest.skip('Fails on Guix')\n" all)))
-             #t))
+                (string-append "    @unittest.skip('Fails on Guix')\n" all)))))
          (add-before 'build 'set-compiler/linker-flags
            (lambda* (#:key inputs #:allow-other-keys)
              (let ((llvm (assoc-ref inputs "llvm")))
                ;; Refer to ffi/Makefile.linux.
                (setenv "CPPFLAGS" "-fPIC")
                (setenv "LDFLAGS" (string-append "-Wl,-rpath="
-                                                llvm "/lib"))
-               #t))))))
+                                                llvm "/lib"))))))))
     (inputs
-     `(("llvm"
-        ,(let* ((patches-commit "061ab39e1d4591f3aa842458252a19ad01858167")
-                (patch-uri (lambda (name)
-                             (string-append
-                              "https://raw.githubusercontent.com/numba/"
-                              "llvmlite/" patches-commit "/conda-recipes/"
-                              name)))
-                (patch-origin (lambda (name hash)
-                                (origin
-                                  (method url-fetch)
-                                  (uri (patch-uri name))
-                                  (sha256 (base32 hash)))))
-                (arch-independent-patches
-                 (list
-                  (patch-origin
-                   "partial-testing.patch"
-                   "1cwy4jsmijd838q0bylxl77vrwrb7ksijfly5062ay32303jmj86")
-                  (patch-origin
-                   "0001-Revert-Limit-size-of-non-GlobalValue-name.patch"
-                   "0n4k7za0smx6qwdipsh6x5lm7bfvzzb3p9r8q1zq1dqi4na21295"))))
-           (if (string=? "aarch64-linux" (%current-system))
-               (package
-                 (inherit llvm-9)
-                 (source
-                  (origin
-                    (inherit (package-source llvm-9))
-                    (patches
-                     `(,(patch-origin
-                         "intel-D47188-svml-VF_LLVM9.patch"
-                         "1f9ld7wc8bn4gbvdsmk07w1rq371h42vy05rxsq9a22f57rljqbd")
-                       ,@arch-independent-patches
-                       ,@(origin-patches (package-source llvm-9)))))))
-               (package
-                 (inherit llvm-10)
-                 (source
-                  (origin
-                    (inherit (package-source llvm-10))
-                    (patches
-                     `(,(patch-origin
-                         "intel-D47188-svml-VF.patch"
-                         "0n46qjwfl7i12bl7wp0cyxl277axfvaaz5lxx5kdlgwjcpa582dg")
-                       ,(patch-origin
-                         "expect-fastmath-entrypoints-in-add-TLI-mappings.ll.patch"
-                         "0jxhjkkwwi1cy898l2n57l73ckpw0v73lqnrifp7r1mwpsh624nv")
-                       ,@arch-independent-patches
-                       ,@(origin-patches (package-source llvm-10))))))))))))
+     (list
+      (let* ((patches-commit
+              "a4a19e8af2c5ef9b9901f20193e4be070726da97")
+             (patch-uri (lambda (name)
+                          (string-append
+                           "https://raw.githubusercontent.com/numba/"
+                           "llvmlite/"
+                           patches-commit
+                           "/conda-recipes/"
+                           name)))
+             (patch-origin (lambda (name hash)
+                             (origin (method url-fetch)
+                                     (uri (patch-uri name))
+                                     (sha256 (base32 hash)))))
+             (arch-independent-patches
+              (list (patch-origin
+                     "partial-testing.patch"
+                     "0g3nkci87knvmn7piqhmh4bcc65ff8r921cvfcibyiv65klv3syg")
+                    (patch-origin
+                     "0001-Revert-Limit-size-of-non-GlobalValue-name.patch"
+                     "0n4k7za0smx6qwdipsh6x5lm7bfvzzb3p9r8q1zq1dqi4na21295"))))
+        (package
+          (inherit llvm-11)
+          (source
+           (origin
+             (inherit (package-source llvm-11))
+             (patches (if (string=? "aarch64-linux" (%current-system))
+                          `(,(patch-origin
+                              "intel-D47188-svml-VF_LLVM9.patch"
+                              "0gnnlfxr8p1a7ls93hzcpfqpa8r0icypfwj8l9cmkslq5sz8p64r")
+                            ,@arch-independent-patches
+                            ,@(origin-patches (package-source llvm-11)))
+                          `(,(patch-origin
+                              "intel-D47188-svml-VF.patch"
+                              "0gnnlfxr8p1a7ls93hzcpfqpa8r0icypfwj8l9cmkslq5sz8p64r")
+                            ,(patch-origin
+                              "expect-fastmath-entrypoints-in-add-TLI-mappings.ll.patch"
+                              "0jxhjkkwwi1cy898l2n57l73ckpw0v73lqnrifp7r1mwpsh624nv")
+                            ,@arch-independent-patches
+                            ,@(origin-patches (package-source llvm-11)))))))))))
     (home-page "https://llvmlite.pydata.org")
     (synopsis "Wrapper around basic LLVM functionality")
     (description
@@ -1349,11 +1542,11 @@ setup(name=\"clang\", packages=[\"clang\"])\n")))))
                   (add-before 'build 'set-libclang-file-name
                     (lambda* (#:key inputs #:allow-other-keys)
                       ;; Record the absolute file name of libclang.so.
-                      (let ((clang (assoc-ref inputs "clang")))
+                      (let ((libclang (search-input-file inputs
+                                                         "/lib/libclang.so")))
                         (substitute* "clang/cindex.py"
-                          (("libclang\\.so")
-                           (string-append clang "/lib/libclang.so")))))))))
-    (inputs `(("clang" ,clang)))
+                          (("libclang\\.so") libclang))))))))
+    (inputs (list clang))
     (synopsis "Python bindings to libclang")))
 
 (define-public python-clang-10
@@ -1365,24 +1558,26 @@ setup(name=\"clang\", packages=[\"clang\"])\n")))))
 (define-public python-clang-12
   (clang-python-bindings clang-12))
 
+(define-public python-clang-13
+  (clang-python-bindings clang-13))
+
 (define-public emacs-clang-format
   (package
     (inherit clang)
     (name "emacs-clang-format")
     (build-system emacs-build-system)
     (inputs
-     `(("clang" ,clang)))
+     (list clang))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'configure
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((clang (assoc-ref inputs "clang")))
+             (let ((clang-format (search-input-file inputs "/bin/clang-format")))
                (copy-file "tools/clang-format/clang-format.el" "clang-format.el")
                (emacs-substitute-variables "clang-format.el"
                  ("clang-format-executable"
-                  (string-append clang "/bin/clang-format"))))
-             #t)))))
+                  clang-format))))))))
     (synopsis "Format code using clang-format")
     (description "This package filters code through @code{clang-format}
 to fix its formatting.  @code{clang-format} is a tool that formats
@@ -1395,22 +1590,26 @@ C/C++/Obj-C code according to a set of style options, see
     (name "emacs-clang-rename")
     (build-system emacs-build-system)
     (inputs
-     `(("clang" ,clang)))
+     (list clang))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'configure
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((clang (assoc-ref inputs "clang")))
+             (let ((clang-rename (search-input-file inputs "/bin/clang-rename")))
                (copy-file "tools/clang-rename/clang-rename.el" "clang-rename.el")
                (emacs-substitute-variables "clang-rename.el"
                  ("clang-rename-binary"
-                  (string-append clang "/bin/clang-rename"))))
-             #t)))))
+                  clang-rename))))))))
     (synopsis "Rename every occurrence of a symbol using clang-rename")
     (description "This package renames every occurrence of a symbol at point
 using @code{clang-rename}.")))
 
+
+;;;
+;;; LLVM variants.
+;;;
+
 (define make-ocaml-llvm
   ;; Make it a memoizing procedure so its callers below don't end up defining
   ;; two equal-but-not-eq "ocaml-llvm" packages for the default LLVM.
@@ -1437,15 +1636,11 @@ using @code{clang-rename}.")))
              (lambda _
                (invoke "cmake" "-P" "bindings/ocaml/cmake_install.cmake"))))))
       (inputs
-       `(("llvm" ,llvm)))
+       (list llvm))
       (native-inputs
-       `(("ocaml" ,ocaml)
-         ("ocaml-findlib" ,ocaml-findlib)
-         ("ocaml-ounit" ,ocaml-ounit)
-         ("python" ,python)))
+       (list ocaml ocaml-findlib ocaml-ounit python))
       (propagated-inputs
-       `(("ocaml-integers" ,ocaml-integers)
-         ("ocaml-ctypes" ,ocaml-ctypes)))
+       (list ocaml-integers ocaml-ctypes))
       (synopsis "OCaml bindings to LLVM")
       (description "This package contains the OCaml bindings distributed with
 LLVM."))))
@@ -1454,3 +1649,310 @@ LLVM."))))
 (define-public ocaml-llvm-9 (make-ocaml-llvm llvm-9))
 (define-public ocaml-llvm-10 (make-ocaml-llvm llvm-10))
 (define-public ocaml-llvm-11 (make-ocaml-llvm llvm-11))
+
+(define-public llvm-julia
+  (package
+    (inherit llvm-11)
+    (name "llvm-julia")
+    (properties `((hidden? . #t)
+                  ,@(package-properties llvm-11)))
+    (source (origin
+              (inherit (package-source llvm-11))
+              ;; Those patches are inside the Julia source repo.
+              ;; They are _not_ Julia specific (https://github.com/julialang/julia#llvm)
+              ;; but they are required to build Julia.
+              ;; Discussion: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=919628
+              (patches
+               (map (match-lambda
+                      ((name hash)
+                       (julia-patch name hash)))
+                    (list
+                     '("llvm-D27629-AArch64-large_model_6.0.1"
+                       "1qrshmlqvnasdyc158vfn3hnbigqph3lsq7acb9w8lwkpnnm2j4z")
+                     '("llvm8-D34078-vectorize-fdiv"
+                       "19spqc3xsazn1xs9gpcgv9ldadfkv49rmc5khl7sf1dlmhgi4602")
+                     '("llvm-7.0-D44650"
+                       "1h55kkmkiisfj6sk956if2bcj9s0v6n5czn8dxb870vp5nccj3ir")
+                     '("llvm7-symver-jlprefix"
+                       "00ng32x6xhm9czczirn5r1q1mc1myad44fqhi061hwh1vb46dwgm")
+                     '("llvm-6.0-DISABLE_ABI_CHECKS"
+                       "014fawd1ba7yckalypfld22zgic87x9nx3cim42zrwygywd36pyg")
+                     '("llvm9-D50010-VNCoercion-ni"
+                       "1s1d3sjsiq4vxg7ncy5cz56zgy5vcq6ls3iqaiqkvr23wyryqmdx")
+                     '("llvm7-revert-D44485"
+                       "0f59kq3p3mpwsbmskypbi4zn01l6ig0x7v2rjp08k2r8z8m6fa8n")
+                     '("llvm-11-D75072-SCEV-add-type"
+                       "176xi1lnbnv2rcs05ywhyb7pd0xgmibayvwzksksg44wg2dh8mbx")
+                     '("llvm-julia-tsan-custom-as"
+                       "0awh40kf6lm4wn1nsjd1bmhfwq7rqj811szanp2xkpspykw9hg9s")
+                     '("llvm-D80101"
+                       "1gsdwmgmpbignvqyxcnlprj899259p3dvdznlncd84ss445qgq3j")
+                     '("llvm-D84031"
+                       "0nks9sbk7p0r5gyr0idrmm93a5fmdai8kihz9532dx4zhcvvqbjc")
+                     '("llvm-10-D85553"
+                       "1zjq7j9q2qp56hwkc8yc8f0z7kvam3j7hj8sb7qyd77r255ff78l")
+                     '("llvm-10-unique_function_clang-sa"
+                       "1jys9w2zqk3dasnxqh0qz5ij7rxi6mkgq9pqjsclmamr5169zyan")
+                     ;'("llvm-D88630-clang-cmake"
+                     ;  "0rs6s71nqnjkny7i69gqazhqj5jqfdr0bkxs2v5a55sfx8fa1k54")
+                     '("llvm-11-D85313-debuginfo-empty-arange"
+                       "1f672d5385xpgb8yrim8d3b7wg2z1l81agnshm1q61kdvjixqx32")
+                     '("llvm-11-D90722-rtdyld-absolute-relocs"
+                       "0kmnai229yyxkmpk9lxd180mcnhk2i8d87k2sg89gc8as18w10r6")
+                     '("llvm-invalid-addrspacecast-sink"
+                       "1n1b7j4s80vj7x5377aj9vyphmxx1q6bm0chhkxp6zsy3mx3g2ry")
+                     '("llvm-11-D92906-ppc-setjmp"
+                       "0cmd4dsblp7a8m03j16dqxws0ijh55zf4jzzxmj341qxa1gamdp9")
+                     '("llvm-11-PR48458-X86ISelDAGToDAG"
+                       "0vwzvlhsdazhxg4gj8g2f00a4f8qc5cgac23w575xk3pgba1jh6y")
+                     '("llvm-11-D93092-ppc-knownbits"
+                       "1748bypsc7c9lbs3fnkv0kwvch6bn85kj98j4jdaz254ig0wa6xj")
+                     '("llvm-11-D93154-globalisel-as"
+                       "1k5wd4z3pa7zj0gyjkif7viqj906dhqlbb7dc95gig40nbxv6zpj")
+                     '("llvm-11-ppc-half-ctr"
+                       "0piywisfz6cmw3133kz7vzhiqflq2y7igakqxlym0gi8pqylv7w9")
+                     '("llvm-11-ppc-sp-from-bp"
+                       "1wmg3485cx5f9pbykyl3jibk1wwv4w1x30hl4jyfndzr2yh8azf9")
+                     '("llvm-rGb498303066a6-gcc11-header-fix"
+                       "0hkd4rwhvh8g2yh13g29wiwnjpv2yd1hdyiv1ryw8izl25bz9c67")
+                     '("llvm-11-D94813-mergeicmps"
+                       "0cmy0ywkgyrdcvr9bd6pd912lyd4gcsrib4z0v05dwgcdxhk7y29")
+                     '("llvm-11-D94980-CTR-half"
+                       "1yf8cxib3z8hz7zi9n6v2g2c6vpfr4slq9hpx8m8yq8f1jbyw3fw")
+                     '("llvm-11-D94058-sext-atomic-ops"
+                       "1x6p6k6q651z5jcqxx8vj17cxnv196mka7mwn7dpp6c23lwgfdpb")
+                     '("llvm-11-D96283-dagcombine-half"
+                       "0lv4iq2f8qrcz1xyxfic3bcr5p0aqam3a7c6pp6fnw3riixm096k"))))
+              (patch-flags '("-p1"))))
+    (arguments
+     (substitute-keyword-arguments (package-arguments llvm-11)
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (add-after 'unpack 'patch-round-two
+             ;; We have to do the patching in two rounds because we can't
+             ;; pass '-p1' and '-p2' in the source field.
+             (lambda* (#:key inputs #:allow-other-keys)
+               (map (lambda (patchname)
+                      (invoke "patch" patchname "-p2"))
+                    (list "llvm-11-AArch64-FastIsel-bug"
+                          "llvm-11-D97435-AArch64-movaddrreg"
+                          "llvm-11-D97571-AArch64-loh"
+                          "llvm-11-aarch64-addrspace"))))))
+       ((#:build-type _) "Release")
+       ((#:configure-flags flags)
+        `(list
+           ;; Build a native compiler and the NVPTX backend (NVIDIA) since
+           ;; Julia insists on it, nothing more.  This reduces build times and
+           ;; disk usage.
+           ,(string-append "-DLLVM_TARGETS_TO_BUILD=" (system->llvm-target))
+           "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=NVPTX"
+
+           "-DLLVM_INSTALL_UTILS=ON"
+           "-DLLVM_BUILD_TESTS=ON"
+           "-DLLVM_ENABLE_FFI=ON"
+           "-DLLVM_ENABLE_RTTI=ON"
+           ;; "-DLLVM_HOST_TRIPLE=${stdenv.hostPlatform.config}"
+           ;; "-DLLVM_DEFAULT_TARGET_TRIPLE=${stdenv.hostPlatform.config}"
+           ;; "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly"
+           "-DLLVM_ENABLE_DUMP=ON"
+           "-DLLVM_LINK_LLVM_DYLIB=ON"
+           "-DLLVM_VERSION_SUFFIX:STRING=jl"))))
+    (inputs
+     (append
+       (package-inputs llvm-11)
+       `(("llvm-11-AArch64-FastIsel-bug"
+          ,(julia-patch "llvm-11-AArch64-FastIsel-bug"
+                        "1m2vddj1mw4kbij8hbrx82piyy6bvr2x7wwdnlxfaqcm72ipzyh9"))
+         ("llvm-11-D97435-AArch64-movaddrreg"
+          ,(julia-patch "llvm-11-D97435-AArch64-movaddrreg"
+                        "10jnavq9ljkj7j2gqj2zd1pwqpqb5zs3zp9h96pmz0djbmxwa86y"))
+         ("llvm-11-D97571-AArch64-loh"
+          ,(julia-patch "llvm-11-D97571-AArch64-loh"
+                        "128zcbg1w1j7hngsf7z1a7alc6lig6l2rqgjp6i8nk3k3f842v6n"))
+         ("llvm-11-aarch64-addrspace"
+          ,(julia-patch "llvm-11-aarch64-addrspace"
+                        "0ckbzgfirxrf2d5bpinpngp7gnilbjrk0cbdfyl3h6f5v6i6xj6m")))))))
+
+(define %cling-version "0.9")
+
+(define llvm-cling             ;LLVM 9 with approximately 10 patches for cling
+  (let ((base llvm-9))
+    (package/inherit base
+      (name "llvm-cling")
+      (source
+       (origin
+         (inherit (package-source base))
+         (method git-fetch)
+         (uri (git-reference
+               (url "http://root.cern/git/llvm.git")
+               (commit (string-append "cling-v" %cling-version))))
+         (file-name (git-file-name "llvm-cling" %cling-version))
+         (sha256
+          (base32
+           "0y3iwv3c9152kybmdrwvadggjs163r25h7rmlxzr3hfpr463pnwf"))
+         (modules '((guix build utils)))
+         (snippet
+          ;; The source is missing an include directive (see:
+          ;; https://github.com/vgvassilev/cling/issues/219).
+          '(substitute* "utils/benchmark/src/benchmark_register.h"
+             (("^#include <vector>.*" all)
+              (string-append all "#include <limits>\n"))))))
+      (outputs '("out"))
+      (arguments
+       (substitute-keyword-arguments (package-arguments base)
+         ((#:configure-flags _ ''())
+          '(list "-DLLVM_PARALLEL_LINK_JOBS=1" ;cater to smaller build machines
+                 ;; Only enable compiler support for the host architecture to
+                 ;; save on build time.
+                 "-DLLVM_TARGETS_TO_BUILD=host;NVPTX"
+                 "-DLLVM_INSTALL_UTILS=ON"
+                 "-DLLVM_ENABLE_RTTI=ON"
+                 "-DLLVM_ENABLE_FFI=ON"
+                 "-DLLVM_BUILD_LLVM_DYLIB=ON"
+                 "-DLLVM_LINK_LLVM_DYLIB=ON"))
+         ((#:phases phases '%standard-phases)
+          `(modify-phases ,phases
+             (delete 'shared-lib-workaround)
+             (delete 'install-opt-viewer))))))))
+
+(define clang-cling-runtime
+  (let ((base clang-runtime-9))
+    (package/inherit base
+      (name "clang-cling-runtime")
+      (arguments
+       (substitute-keyword-arguments (package-arguments base)
+         ((#:phases phases '%standard-phases)
+          `(modify-phases ,phases
+             (add-after 'install 'delete-static-libraries
+               ;; This reduces the size from 22 MiB to 4 MiB.
+               (lambda* (#:key outputs #:allow-other-keys)
+                 (let ((out (assoc-ref outputs "out")))
+                   (for-each delete-file (find-files out "\\.a$")))))))))
+      (inputs (modify-inputs (package-inputs base)
+                (replace "llvm" llvm-cling))))))
+
+(define clang-cling              ;modified clang 9 with ~ 60 patches for cling
+  (let ((base clang-9))
+    (package/inherit base
+      (name "clang-cling")
+      (source
+       (origin
+         (inherit (package-source base))
+         (method git-fetch)
+         (uri (git-reference
+               (url "http://root.cern/git/clang.git")
+               (commit (string-append "cling-v" %cling-version))))
+         (file-name (git-file-name "clang-cling" %cling-version))
+         (sha256
+          (base32
+           "128mxkwghss6589wvm6amzv183aq88rdrnfxjiyjcji5hx84vpby"))))
+      (arguments
+       (substitute-keyword-arguments (package-arguments base)
+         ((#:phases phases '%standard-phases)
+          `(modify-phases ,phases
+             (add-after 'install 'delete-static-libraries
+               ;; This reduces the size by half, from 220 MiB to 112 MiB.
+               (lambda* (#:key outputs #:allow-other-keys)
+                 (let ((out (assoc-ref outputs "out")))
+                   (for-each delete-file (find-files out "\\.a$")))))))))
+      (propagated-inputs
+       (modify-inputs (package-propagated-inputs base)
+         (replace "llvm" llvm-cling)
+         (replace "clang-runtime" clang-cling-runtime))))))
+
+(define-public cling
+  ;; The tagged v0.9 release doesn't build, so use the latest commit.
+  (let ((commit "d78d1a03fedfd2bf6d2b6ff295aca576d98940df")
+        (revision "1")
+        (version* "0.9"))
+    (package
+      (name "cling")
+      (version (git-version version* revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "http://root.cern/git/cling.git")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0lsbxv21b4qw11xkw9iipdpca64jjwwqxm0qf5v2cgdlibf8m8n9"))
+                ;; Patch submitted upstream here:
+                ;; https://github.com/root-project/cling/pull/433.
+                (patches (search-patches "cling-use-shared-library.patch"))))
+      (build-system cmake-build-system)
+      (arguments
+       `(#:build-type "Release"         ;keep the build as lean as possible
+         #:tests? #f                    ;FIXME: 78 tests fail (out of ~200)
+         #:test-target "check-cling"
+         #:configure-flags
+         (list (string-append "-DCLING_CXX_PATH="
+                              (assoc-ref %build-inputs "gcc") "/bin/g++")
+               ;; XXX: The AddLLVM.cmake module expects LLVM_EXTERNAL_LIT to
+               ;; be a Python script, not a shell executable.
+               (string-append "-DLLVM_EXTERNAL_LIT="
+                              (assoc-ref %build-inputs "python-lit")
+                              "/bin/.lit-real"))
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'set-version
+             (lambda _
+               (make-file-writable "VERSION")
+               (call-with-output-file "VERSION"
+                 (lambda (port)
+                   (format port "~a~%" ,version)))))
+           (add-after 'unpack 'patch-paths
+             (lambda* (#:key inputs #:allow-other-keys)
+               (substitute* "lib/Interpreter/CIFactory.cpp"
+                 (("\bsed\b")
+                  (which "sed"))
+                 ;; This ensures that the default C++ library used by Cling is
+                 ;; that of the compiler that was used to build it, rather
+                 ;; than that of whatever g++ happens to be on PATH.
+                 (("ReadCompilerIncludePaths\\(CLING_CXX_RLTV")
+                  (string-append "ReadCompilerIncludePaths(\""
+                                 (assoc-ref inputs "gcc") "/bin/g++\""))
+                 ;; Cling uses libclang's CompilerInvocation::GetResourcesPath
+                 ;; to resolve Clang's library prefix, but this fails on Guix
+                 ;; because it is relative to the output of cling rather than
+                 ;; clang (see:
+                 ;; https://github.com/root-project/cling/issues/434).  Fully
+                 ;; shortcut the logic in this method to return the correct
+                 ;; static location.
+                 (("static std::string getResourceDir.*" all)
+                  (string-append all
+                                 "    return std::string(\""
+                                 (assoc-ref inputs "clang-cling")
+                                 "/lib/clang/" ,(package-version clang-cling)
+                                 "\");")))
+               ;; Check for the 'lit' command for the tests, not 'lit.py'
+               ;; (see: https://github.com/root-project/cling/issues/432).
+               (substitute* "CMakeLists.txt"
+                 (("lit.py")
+                  "lit"))))
+           (add-after 'unpack 'adjust-lit.cfg
+             ;; See: https://github.com/root-project/cling/issues/435.
+             (lambda _
+               (substitute* "test/lit.cfg"
+                 (("config.llvm_tools_dir \\+ '")
+                  "config.cling_obj_root + '/bin"))))
+           (add-after 'install 'delete-static-libraries
+             ;; This reduces the size from 17 MiB to 5.4 MiB.
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let ((out (assoc-ref outputs "out")))
+                 (for-each delete-file (find-files out "\\.a$"))))))))
+      (native-inputs
+       (list python python-lit))
+      (inputs
+       (list clang-cling llvm-cling))
+      (home-page "https://root.cern/cling/")
+      (synopsis "Interactive C++ interpreter")
+      (description "Cling is an interactive C++17 standard compliant
+interpreter, built on top of LLVM and Clang.  Cling can be used as a
+read-eval-print loop (REPL) to assist with rapid application development.
+Here's how to print @samp{\"Hello World!\"} using @command{cling}:
+
+@example
+cling '#include <stdio.h>' 'printf(\"Hello World!\\n\");'
+@end example")
+      (license license:lgpl2.1+))))     ;for the combined work
diff --git a/gnu/packages/logging.scm b/gnu/packages/logging.scm
index 6a4975e435..8c518de07d 100644
--- a/gnu/packages/logging.scm
+++ b/gnu/packages/logging.scm
@@ -7,6 +7,7 @@
 ;;; Copyright © 2019 Gábor Boskovits <boskovits@gmail.com>
 ;;; Copyright © 2019 Meiyo Peng <meiyo@riseup.net>
 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -33,12 +34,27 @@
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system python)
   #:use-module (gnu packages)
+  #:use-module (gnu packages autotools)
+  #:use-module (gnu packages bison)
+  #:use-module (gnu packages c)
+  #:use-module (gnu packages compression)
+  #:use-module (gnu packages curl)
+  #:use-module (gnu packages cyrus-sasl)
+  #:use-module (gnu packages databases)
+  #:use-module (gnu packages flex)
+  #:use-module (gnu packages geo)
+  #:use-module (gnu packages gnupg)
+  #:use-module (gnu packages kerberos)
+  #:use-module (gnu packages linux)
   #:use-module (gnu packages ncurses)
+  #:use-module (gnu packages networking)
   #: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 autotools))
+  #:use-module (gnu packages tcl)
+  #:use-module (gnu packages tls))
 
 (define-public log4cpp
   (package
@@ -76,7 +92,7 @@ staying as close to their API as is reasonable.")
 (define-public glog
   (package
     (name "glog")
-    (version "0.4.0")
+    (version "0.5.0")
     (home-page "https://github.com/google/glog")
     (source (origin
               (method git-fetch)
@@ -84,24 +100,12 @@ staying as close to their API as is reasonable.")
                                   (commit (string-append "v" version))))
               (sha256
                (base32
-                "1xd3maiipfbxmhc9rrblc5x52nxvkwxp14npg31y5njqvkvzax9b"))
+                "17014q25c99qyis6l3fwxidw6222bb269fdlr74gn7pzmzg4lvg3"))
               (file-name (git-file-name name version))))
-    (build-system gnu-build-system)
-    (arguments
-     `(#:phases (modify-phases %standard-phases
-                  (add-before 'check 'disable-signal-tests
-                    (lambda _
-                      ;; XXX: This test fails on non x86_64.  See e.g.
-                      ;; https://github.com/google/glog/issues/219 and
-                      ;; https://github.com/google/glog/issues/256.
-                      (substitute* "Makefile"
-                        (("\tsignalhandler_unittest_sh") "\t$(EMPTY)"))
-                      #t)))))
+    (build-system cmake-build-system)
     (native-inputs
-     `(("perl" ,perl)                             ;for tests
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list perl ;for tests
+           autoconf automake libtool))
     (synopsis "C++ logging library")
     (description
      "Google glog is a library that implements application-level logging.
@@ -124,10 +128,8 @@ command line.")
          "0wl2wm6p3pc0vkk33s7rzgcfvs9cwxfmlz997pdfhlw72r00l7s5"))))
     (build-system python-build-system)
     (inputs
-     `(("python-pyyaml" ,python-pyyaml)
-       ("python-sockjs-tornado" ,python-sockjs-tornado)
-       ("python-tornado-http-auth" ,python-tornado-http-auth)
-       ("python-tornado" ,python-tornado)))
+     (list python-pyyaml python-sockjs-tornado python-tornado-http-auth
+           python-tornado))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -179,7 +181,7 @@ commands, displaying the results via a web interface.")
              #t))
          (delete 'configure))           ; no configure script
        #:tests? #f)) ; no test suite (make check just runs cppcheck)
-    (inputs `(("ncurses" ,ncurses)))
+    (inputs (list ncurses))
     (home-page "https://vanheusden.com/multitail/")
     (synopsis "Monitor multiple log files")
     (description
@@ -190,7 +192,7 @@ output in multiple windows in a terminal.")
 (define-public spdlog
   (package
     (name "spdlog")
-    (version "1.8.5")
+    (version "1.9.2")
     (source
      (origin
        (method git-fetch)
@@ -199,13 +201,14 @@ output in multiple windows in a terminal.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "179krvg5sad6dviqpcjwg6czzknnilqszrg1d0fgp12h6sy66vqg"))))
+        (base32 "1img03ka63hf3sb62v5f02ax5jc9mlpz5cijr38xxzymvcg1s98r"))))
     (build-system cmake-build-system)
     ;; TODO run benchmark. Currently not possible, as adding
     ;; (gnu packages benchmark) forms a dependency cycle
     (arguments
      '(#:configure-flags
        (list "-DSPDLOG_BUILD_BENCH=OFF"
+             "-DSPDLOG_BUILD_SHARED=ON"
              "-DSPDLOG_BUILD_TESTS=ON")))
     (home-page "https://github.com/gabime/spdlog")
     (synopsis "Fast C++ logging library")
@@ -214,3 +217,144 @@ 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 rsyslog
+  (package
+    (name "rsyslog")
+    (version "8.2112.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/rsyslog/rsyslog.git")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0bp124w2qv8hix5i0p04d8yvsipy18dhqm7zw8i6cwdgnhdadq96"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list
+      #:phases
+      '(modify-phases %standard-phases
+         ;; autogen.sh calls configure at the end of the script.
+         (replace 'bootstrap
+           (lambda _ (invoke "autoreconf" "-vfi"))))
+      #:configure-flags
+      ;; Rsyslog comes with a plethora of optional modules.  We enable most of
+      ;; them for a full-featured build.
+      '(list "--enable-kmsg"
+             "--enable-liblogging_stdlog"
+             "--enable-mmanon"
+             "--enable-mmcount"
+             "--enable-unlimited_select"
+         
+             ;; Input plugins
+             "--enable-imbatchreport"
+             "--enable-imczmq"
+             "--enable-imdiag"          ;for full tests
+             "--enable-imdocker"
+             "--enable-imfile"
+             "--enable-imkafka"
+             "--enable-improg"
+             "--enable-impstats"
+             "--enable-imptcp"
+             "--enable-imtuxedoulog"
+       
+             ;; Output plugins
+             "--enable-clickhouse"
+             "--enable-elasticsearch"
+             "--enable-mail"
+             "--enable-omczmq"
+             "--enable-omfile_hardened"
+             "--enable-omhttp"
+             "--enable-omhttpfs"
+             "--enable-omkafka"
+             "--enable-omprog"
+             "--enable-omruleset"
+             "--enable-omstdout"
+             "--enable-omtcl"
+             "--enable-omudpspoof"
+             "--enable-omuxsock"
+
+             ;; Parser Modules
+             "--enable-pmaixforwardedfrom"
+             "--enable-pmciscoios"
+             "--enable-pmcisconames"
+             "--enable-pmdb2diag"
+             "--enable-pmlastmsg"
+             "--enable-pmnormalize"
+             "--enable-pmnull"
+             "--enable-pmpanngfw"
+             "--enable-pmsnare"
+
+             ;; Message Modification Modules
+             "--enable-mmaudit"
+             "--enable-mmdarwin"
+             "--enable-mmdblookup"
+             "--enable-mmfields"
+             "--enable-mmjsonparse"
+             "--enable-mmkubernetes"
+             "--enable-mmnormalize"
+             "--enable-mmpstrucdata"
+             "--enable-mmrfc5424addhmac"
+             "--enable-mmrm1stspace"
+             "--enable-mmsequence"
+             "--enable-mmsnmptrapd"
+             "--enable-mmtaghostname"
+             "--enable-mmutf8fix"
+
+             ;; Database Support
+             "--enable-libdbi"
+             "--enable-mysql"
+             "--enable-pgsql"
+
+             ;; Protocol Support
+             "--enable-openssl"
+             "--enable-gnutls"
+             "--enable-gssapi-krb5"
+             "--enable-snmp"
+
+             ;; Function modules
+             "--enable-fmhash_xxhash")))
+    (native-inputs
+     (list autoconf automake bison flex libtool pkg-config))
+    (inputs
+     (list curl
+           cyrus-sasl
+           czmq
+           gnutls
+           libdbi
+           libestr
+           libfastjson
+           libgcrypt
+           liblogging
+           liblognorm
+           libmaxminddb
+           libnet
+           librdkafka
+           lz4
+           (list mariadb "dev")
+           (list mariadb "lib")
+           mit-krb5
+           net-snmp
+           openssl
+           postgresql
+           tcl
+           (list util-linux "lib")
+           zeromq
+           zlib))
+    (home-page "https://www.rsyslog.com/")
+    (synopsis "RSYSLOG is a flexible and fast system for log processing")
+    (description
+     "Rsyslog offers high-performance, great security features and a modular
+design.  While it started as a regular syslogd, rsyslog has evolved into a
+kind of swiss army knife of logging, being able to accept inputs from a wide
+variety of sources, transform them, and output the results to diverse
+destinations.")
+    ;; Most of the source code is licensed under the LGPL3+ with many source
+    ;; files licensed under the terms of the ASL2.0.  Some modules are
+    ;; licensed under GPL3+.
+    (license (list license:lgpl3+
+                   license:gpl3+
+                   license:asl2.0))))
diff --git a/gnu/packages/logo.scm b/gnu/packages/logo.scm
index cf70910656..347c52e753 100644
--- a/gnu/packages/logo.scm
+++ b/gnu/packages/logo.scm
@@ -37,7 +37,7 @@
          "0cpyj1ji6hjy7zzz05672f0j6fr0mwpc1y3sq36hhkv2fkpidw22"))))
     (build-system gnu-build-system)
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
diff --git a/gnu/packages/lout.scm b/gnu/packages/lout.scm
index ac66b4ecfc..a9323fc4bb 100644
--- a/gnu/packages/lout.scm
+++ b/gnu/packages/lout.scm
@@ -38,7 +38,7 @@
     (build-system gnu-build-system)     ; actually, just a makefile
     (outputs '("out" "doc"))
     (native-inputs
-     `(("ghostscript" ,ghostscript)))
+     (list ghostscript))
     (arguments
      `(#:modules ((guix build utils)
                   (guix build gnu-build-system)
diff --git a/gnu/packages/lsof.scm b/gnu/packages/lsof.scm
index b317902ee7..98bcdab468 100644
--- a/gnu/packages/lsof.scm
+++ b/gnu/packages/lsof.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -31,79 +32,76 @@
 
 (define-public lsof
   (package
-   (name "lsof")
-   (version "4.94.0")
-   (source
-    (origin
-      (method git-fetch)
-      (uri (git-reference
-            (url "https://github.com/lsof-org/lsof")
-            (commit version)))
-      (file-name (git-file-name name version))
-      (sha256
-       (base32 "0yxv2jg6rnzys49lyrz9yjb4knamah4xvlqj596y6ix3vm4k3chp"))
-      (patches (search-patches "lsof-fatal-test-failures.patch"))))
-   (build-system gnu-build-system)
-   (native-inputs
-    `(("groff" ,groff)                  ; for soelim
-      ("perl" ,perl)))
-   (arguments
-    `(#:phases
-      (modify-phases %standard-phases
-        (replace 'configure
-          (lambda _
-            (setenv "LSOF_CC" ,(cc-for-target))
-            (setenv "LSOF_MAKE" "make")
+    (name "lsof")
+    (version "4.94.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/lsof-org/lsof")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0yxv2jg6rnzys49lyrz9yjb4knamah4xvlqj596y6ix3vm4k3chp"))
+       (patches (search-patches "lsof-fatal-test-failures.patch"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     (list groff ; for soelim
+           perl))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'configure
+           (lambda _
+             (setenv "LSOF_CC" ,(cc-for-target))
+             (setenv "LSOF_MAKE" "make")
 
-            ;; By default, the makefile captures the output of 'uname -a'.
-            ;; Provide a fixed output instead to make builds reproducible.
-            (setenv "LSOF_SYSINFO"
-                    (string-append "GNU/" (utsname:sysname (uname))
-                                   " (GNU Guix)"))
+             ;; By default, the makefile captures the output of 'uname -a'.
+             ;; Provide a fixed output instead to make builds reproducible.
+             (setenv "LSOF_SYSINFO"
+                     (string-append "GNU/" (utsname:sysname (uname))
+                                    " (GNU Guix)"))
 
-            (invoke "./Configure" "linux")
-            #t))
-        (add-after 'configure 'patch-timestamps
-          (lambda _
-            (substitute* "Makefile"
-              (("`date`") "`date --date=@1`"))
-            #t))
-        (add-after 'build 'build-man-page
-          (lambda _
-            (with-output-to-file "lsof.8"
-              (lambda _ (invoke "soelim" "Lsof.8")))
-            #t))
-        (add-before 'check 'disable-failing-tests
-          (lambda _
-            (substitute* "tests/Makefile"
-              ;; Fails with ‘ERROR!!! client gethostbyaddr() failure’.
-              (("(STDTST=.*) LTsock" _ prefix) prefix)
-              ;; Fails without access to a remote NFS server.
-              (("(OPTTST=.*) LTnfs"  _ prefix) prefix))
-            #t))
-        (replace 'check
-          (lambda* (#:key tests? #:allow-other-keys)
-            (when tests?
-              (with-directory-excursion "tests"
-                ;; Tests refuse to run on ‘unvalidated’ platforms.
-                (make-file-writable "TestDB")
-                (invoke "./Add2TestDB")
+             (invoke "./Configure" "linux")))
+         (add-after 'configure 'patch-timestamps
+           (lambda _
+             (substitute* "Makefile"
+               (("`date`") "`date --date=@1`"))))
+         (add-after 'build 'build-man-page
+           (lambda _
+             (with-output-to-file "lsof.8"
+               (lambda _ (invoke "soelim" "Lsof.8")))))
+         (add-before 'check 'disable-failing-tests
+           (lambda _
+             (substitute* "tests/Makefile"
+               ;; Fails with ‘ERROR!!! client gethostbyaddr() failure’.
+               (("(STDTST=.*) LTsock" _ prefix) prefix)
+               ;; LTnfs fails without access to a remote NFS server, and LTlock
+               ;; fails when run on a Btrfs file system (see:
+               ;; https://github.com/lsof-org/lsof/issues/152).
+               (("OPTTST=[[:space:]]*LTbigf LTdnlc LTlock LTnfs")
+                "OPTTST = LTbigf LTdnlc"))))
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (with-directory-excursion "tests"
+                 ;; Tests refuse to run on ‘unvalidated’ platforms.
+                 (make-file-writable "TestDB")
+                 (invoke "./Add2TestDB")
 
-                ;; The ‘standard’ tests suggest running ‘optional’ ones as well.
-                (invoke "make" "standard" "optional")))
-            #t))
-        (replace 'install
-          (lambda* (#:key outputs #:allow-other-keys)
-            (let ((out (assoc-ref outputs "out")))
-              (install-file "lsof" (string-append out "/bin"))
-              (install-file "lsof.8" (string-append out "/share/man/man8")))
-            #t)))))
-   (synopsis "Display information about open files")
-   (description
-    "Lsof stands for LiSt Open Files, and it does just that.
+                 ;; The ‘standard’ tests suggest running ‘optional’ ones as well.
+                 (invoke "make" "standard" "optional")))))
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (install-file "lsof" (string-append out "/bin"))
+               (install-file "lsof.8" (string-append out "/share/man/man8"))))))))
+    (synopsis "Display information about open files")
+    (description
+     "Lsof stands for LiSt Open Files, and it does just that.
 It lists information about files that are open by the processes running
 on the system.")
-   (license (license:fsf-free
-             "file://00FAQ"
-             "License inspired by zlib, see point 1.9 of 00FAQ in the distribution."))
-   (home-page "https://people.freebsd.org/~abe/")))
+    (license (license:fsf-free
+              "file://00FAQ"
+              "License inspired by zlib, see point 1.9 of 00FAQ in the distribution."))
+    (home-page "https://people.freebsd.org/~abe/")))
diff --git a/gnu/packages/lua.scm b/gnu/packages/lua.scm
index 0ecc91294f..c828ded1a5 100644
--- a/gnu/packages/lua.scm
+++ b/gnu/packages/lua.scm
@@ -14,6 +14,7 @@
 ;;; Copyright © 2020 Simon South <simon@simonsouth.net>
 ;;; Copyright © 2020 Paul A. Patience <paul@apatience.com>
 ;;; Copyright © 2021 Vinícius dos Santos Oliveira <vini.ipsmaker@gmail.com>
+;;; Copyright © 2021 Greg Hogan <code@greghogan.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -43,7 +44,6 @@
   #:use-module (gnu packages)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages build-tools)
-  #:use-module (gnu packages gcc)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages libevent)
@@ -72,7 +72,7 @@
              (patches (search-patches "lua-pkgconfig.patch"
                                       "lua-liblua-so.patch"))))
     (build-system gnu-build-system)
-    (inputs `(("readline" ,readline)))
+    (inputs (list readline))
     (arguments
      `(#:modules ((guix build gnu-build-system)
                   (guix build utils)
@@ -105,6 +105,18 @@ automatic memory management with incremental garbage collection, making it ideal
 for configuration, scripting, and rapid prototyping.")
     (license license:x11)))
 
+(define-public lua-5.4
+  (package (inherit lua)
+           (version "5.4.3")
+           (source (origin
+                     (method url-fetch)
+                     (uri (string-append "https://www.lua.org/ftp/lua-"
+                                         version ".tar.gz"))
+                     (sha256
+                      (base32 "1yxvjvnbg4nyrdv10bq42gz6dr66pyan28lgzfygqfwy2rv24qgq"))
+                     (patches (search-patches "lua-5.4-pkgconfig.patch"
+                                              "lua-5.4-liblua-so.patch"))))))
+
 (define-public lua-5.2
   (package (inherit lua)
            (version "5.2.4")
@@ -159,6 +171,9 @@ for configuration, scripting, and rapid prototyping.")
          #:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out")))))
     (home-page "https://www.luajit.org/")
     (synopsis "Just in time compiler for Lua programming language version 5.1")
+    ;; On powerpc64le-linux, the build fails with an error: "No support for
+    ;; PowerPC 64 bit mode (yet)".  See: https://issues.guix.gnu.org/49220
+    (supported-systems (delete "powerpc64le-linux" %supported-systems))
     (description
      "LuaJIT is a Just-In-Time Compiler (JIT) for the Lua
 programming language.  Lua is a powerful, dynamic and light-weight programming
@@ -228,8 +243,7 @@ some projects.")))
              (invoke "lua" "tests/test.lua")
              (invoke "lua" "tests/test-lom.lua"))))))
     (inputs
-     `(("lua" ,lua)
-       ("expat" ,expat)))
+     (list lua expat))
     (home-page "https://matthewwild.co.uk/projects/luaexpat/")
     (synopsis "SAX XML parser based on the Expat library")
     (description "LuaExpat is a SAX XML parser based on the Expat library.")
@@ -272,7 +286,7 @@ some projects.")))
                (invoke "lua" "test/testsrvr.lua"))
              (invoke "lua" "test/testclnt.lua"))))))
     (inputs
-     `(("lua" ,lua)))
+     (list lua))
     (home-page "http://www.tecgraf.puc-rio.br/~diego/professional/luasocket/")
     (synopsis "Socket library for Lua")
     (description "LuaSocket is a Lua extension library that is composed by two
@@ -322,7 +336,7 @@ handy.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (inputs
-     `(("lua" ,lua)))
+     (list lua))
     (home-page "https://keplerproject.github.io/luafilesystem/index.html")
     (synopsis "File system library for Lua")
     (description "LuaFileSystem is a Lua library developed to complement the
@@ -378,8 +392,7 @@ directory structure and file attributes.")
                            (find-files "." "^[0-9].*\\.lua$"))))
              #t)))))
     (inputs
-     `(("lua" ,lua)
-       ("openssl" ,openssl)))
+     (list lua openssl))
     (home-page "https://25thandclement.com/~william/projects/luaossl.html")
     (synopsis "OpenSSL bindings for Lua")
     (description "The luaossl extension module for Lua provides comprehensive,
@@ -426,8 +439,7 @@ binds OpenSSL's bignum, message digest, HMAC, cipher, and CSPRNG interfaces.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (inputs
-     `(("lua" ,lua)
-       ("openssl" ,openssl)))
+     (list lua openssl))
     (propagated-inputs
      `(("lua-socket"
         ,(make-lua-socket
@@ -530,12 +542,11 @@ secure session between the peers.")
 
                (apply invoke "make" "check" make-flags)))))))
     (native-inputs
-     `(("m4" ,m4)))
+     (list m4))
     (inputs
-     `(("lua" ,lua)
-       ("openssl" ,openssl)))
+     (list lua openssl))
     (propagated-inputs
-     `(("lua-ossl" ,lua-ossl)))
+     (list lua-ossl))
     (home-page "https://25thandclement.com/~william/projects/cqueues.html")
     (synopsis "Event loop for Lua using continuation queues")
     (description "The cqueues extension module for Lua implements an event loop
@@ -567,9 +578,9 @@ to be non-intrusive, composable, and embeddable within existing applications.")
         (base32 "0qc2d1riyr4b5a0gnsmdw2lz5pw65s4ac60hc34w3mmk9l6yg6nl"))))
     (build-system trivial-build-system)
     (inputs
-     `(("lua" ,lua)))
+     (list lua))
     (propagated-inputs
-     `(("lua-filesystem" ,lua-filesystem)))
+     (list lua-filesystem))
     (arguments
      `(#:modules ((guix build utils))
        #:builder
@@ -607,9 +618,9 @@ standard libraries.")
         (base32 "1h0cf7bp4am54r0j8lhjs2l1c7q5vz74ba0jvw9qdbaqimls46g8"))))
     (build-system gnu-build-system)
     (inputs
-     `(("lua" ,lua)))
+     (list lua))
     (propagated-inputs
-     `(("lua-penlight" ,lua-penlight)))
+     (list lua-penlight))
     (arguments
      `(#:tests? #f                 ;tests must run after installation.
        #:phases
@@ -697,8 +708,8 @@ describing the commented declarations and functions.")
              (setenv "DISPLAY" ":1")
              #t)))))
     (native-inputs
-     `(("dbus" ,dbus)                   ;tests use 'dbus-run-session'
-       ("pkg-config" ,pkg-config)))
+     (list dbus ;tests use 'dbus-run-session'
+           pkg-config))
     (inputs
      `(("cairo" ,cairo)
        ("glib" ,glib)
@@ -751,7 +762,7 @@ Notable examples are GTK+, GStreamer and Webkit.")
                              (string-append out "/share/lua/" lua-version))
                #t))))
        #:test-target "test"))
-    (inputs `(("lua" ,lua)))
+    (inputs (list lua))
     (synopsis "Pattern-matching library for Lua")
     (description
      "LPeg is a pattern-matching library for Lua, based on Parsing Expression
@@ -803,8 +814,7 @@ Grammars (PEGs).")
                                     (or (getenv "CPATH") "")))
              #t)))))
     (inputs
-     `(("lua" ,lua)
-       ("libuv" ,libuv)))
+     (list lua libuv))
     (native-inputs
      `(("lua-compat"
         ,(origin
@@ -856,7 +866,7 @@ Grammars (PEGs).")
        #:phases
        (modify-phases %standard-phases
          (delete 'configure))))
-    (inputs `(("lua" ,lua)))
+    (inputs (list lua))
     (home-page "https://bitop.luajit.org/index.html")
     (synopsis "Bitwise operations on numbers for Lua")
     (description
@@ -917,8 +927,7 @@ on numbers.")
                (chdir "./runner")
                (invoke "./test_runner")))))))
     (native-inputs
-     `(("lua" ,lua)
-       ("pkg-config" ,pkg-config)))
+     (list lua pkg-config))
     (home-page "https://github.com/jeremyong/Selene")
     (synopsis "Lua C++11 bindings")
     (description
@@ -1124,8 +1133,7 @@ shell command executions.")
               "1999bgrh52124a5g4qizav3x257ff2brjr855srpm1jv1nxzbygv"))))
    (build-system meson-build-system)
    (arguments
-    `(#:meson ,meson-0.55
-      ;; Tests are disabled for now due to an issue that affecs guix:
+    `(;; Tests are disabled for now due to an issue that affecs guix:
       ;; <https://gitlab.com/emilua/emilua/-/issues/22>
       #:configure-flags
       (list "-Denable_http=true"
@@ -1133,26 +1141,25 @@ shell command executions.")
             "-Denable_manpages=false"
             "-Dversion_suffix=-guix1")))
    (native-inputs
-    `(("gcc" ,gcc-10) ; gcc-7 is too old for our C++17 needs
-      ("luajit-lua52-openresty" ,luajit-lua52-openresty)
-      ("pkg-config" ,pkg-config)
-      ("re2c" ,re2c)
-      ("xxd" ,xxd)))
+    (list luajit-lua52-openresty
+          pkg-config
+          re2c
+          xxd))
    (inputs
-    `(("boost" ,boost)
-      ("boost-static" ,boost-static)
-      ("fmt" ,fmt)
-      ;; LuaJIT has a 2GiB addressing limit[1] that has been fixed on OpenResty
-      ;; fork. Emilua is severely affected by this limit, so the upstream package
-      ;; is avoided. Emilua also depends on the -DLUAJIT_ENABLE_LUA52COMPAT
-      ;; configure flag[2] for some features to work (e.g. __pairs on HTTP
-      ;; headers).
-      ;;
-      ;; [1] <http://hacksoflife.blogspot.com/2012/12/integrating-luajit-with-x-plane-64-bit.html>
-      ;; [2] <http://luajit.org/extensions.html#lua52>
-      ("luajit-lua52-openresty" ,luajit-lua52-openresty)
-      ("ncurses" ,ncurses)
-      ("openssl" ,openssl)))
+    (list boost
+          boost-static
+          fmt-7
+          ;; LuaJIT has a 2GiB addressing limit[1] that has been fixed on OpenResty
+          ;; fork. Emilua is severely affected by this limit, so the upstream package
+          ;; is avoided. Emilua also depends on the -DLUAJIT_ENABLE_LUA52COMPAT
+          ;; configure flag[2] for some features to work (e.g. __pairs on HTTP
+          ;; headers).
+          ;;
+          ;; [1] <http://hacksoflife.blogspot.com/2012/12/integrating-luajit-with-x-plane-64-bit.html>
+          ;; [2] <http://luajit.org/extensions.html#lua52>
+          luajit-lua52-openresty
+          ncurses
+          openssl))
    (native-search-paths
     (list
      (search-path-specification
@@ -1170,7 +1177,7 @@ enabled.")
 (define-public fennel
   (package
     (name "fennel")
-    (version "0.9.1")
+    (version "1.0.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1179,11 +1186,7 @@ enabled.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "07qgycf5cxm9zcc4fgpgvplg95ndavh3ynpdjpvzkikzbnyj7xia"))
-              (modules '((guix build utils)))
-              (snippet
-               '(begin
-                  (delete-file "fennelview.lua") #t))))
+                "0d4rpf0f2aqxlca3kxrbhjjhf1knhiz8ccwlx8xid05mc16la70y"))))
     (build-system gnu-build-system)
     (arguments
      '(#:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
@@ -1192,29 +1195,15 @@ enabled.")
        #:phases
        (modify-phases %standard-phases
          (delete 'configure)
-         (add-before 'build 'patch-lua-calls
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let ((lua (string-append (assoc-ref inputs "lua") "/bin/lua")))
-               (setenv "LUA" lua)
-               (substitute* "old/launcher.lua"
-                 (("/usr/bin/env lua") lua))
-               #t)))
          (add-after 'build 'patch-fennel
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "fennel"
                (("/usr/bin/env .*lua")
-                (string-append (assoc-ref inputs "lua") "/bin/lua")))
-             #t))
+                (search-input-file inputs "/bin/lua")))))
          (delete 'check)
          (add-after 'install 'check
-           (assoc-ref %standard-phases 'check))
-         (add-after 'install 'install-manpage
-           (lambda* (#:key outputs #:allow-other-keys)
-             (install-file "fennel.1"
-                           (string-append (assoc-ref outputs "out")
-                                          "/share/man/man1"))
-             #t)))))
-    (inputs `(("lua" ,lua)))
+           (assoc-ref %standard-phases 'check)))))
+    (inputs (list lua))
     (home-page "https://fennel-lang.org/")
     (synopsis "Lisp that compiles to Lua")
     (description
diff --git a/gnu/packages/lxde.scm b/gnu/packages/lxde.scm
index f81d7af3c4..55deae26ea 100644
--- a/gnu/packages/lxde.scm
+++ b/gnu/packages/lxde.scm
@@ -6,9 +6,10 @@
 ;;; Copyright © 2017 Brendan Tildesley <mail@brendan.scot>
 ;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 ison <ison@airmail.cc>
-;;; Copyright © 2018, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2018, 2019, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2019 Meiyo Peng <meiyo@riseup.net>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -76,14 +77,13 @@
                (base32
                 "1rfira3lx8v6scz1aq69925j4vslpp36bmgrrzcfby2c60q2c155"))))
     (build-system gnu-build-system)
-    (inputs `(("glib" ,glib)
-              ("gtk+" ,gtk+-2)))
-    (native-inputs `(("intltool"   ,intltool)
-                     ("glib"       ,glib "bin") ; for gtester
-                     ("libtool"    ,libtool)
-                     ("menu-cache" ,menu-cache)
-                     ("pkg-config" ,pkg-config)
-                     ("vala"       ,vala)))
+    (inputs (list glib gtk+-2))
+    (native-inputs (list intltool
+                         `(,glib "bin") ; for gtester
+                         libtool
+                         menu-cache
+                         pkg-config
+                         vala))
     (synopsis "File management support (core library)")
     (description "LibFM provides file management functions built on top of
 Glib/GIO giving a higher-level API.")
@@ -94,10 +94,8 @@ Glib/GIO giving a higher-level API.")
   (package (inherit libfm)
     (name "libfm-extra")
     (arguments '(#:configure-flags '("--with-extra-only")))
-    (inputs `(("glib" ,glib)))
-    (native-inputs `(("intltool"   ,intltool)
-                     ("libtool"    ,libtool)
-                     ("pkg-config" ,pkg-config)))
+    (inputs (list glib))
+    (native-inputs (list intltool libtool pkg-config))
     (synopsis "File management support (extra library)")
     (description "This package contains a stand-alone library which extends the
 libFM file management library.")))
@@ -114,9 +112,8 @@ libFM file management library.")))
        (sha256
         (base32 "0f4bjaamfxxdr9civvy55pa6vv9dx1hjs522gjbbgx7yp1cdh8kj"))))
     (build-system gnu-build-system)
-    (inputs `(("gtk+" ,gtk+-2)))
-    (native-inputs `(("intltool"   ,intltool)
-                     ("pkg-config" ,pkg-config)))
+    (inputs (list gtk+-2))
+    (native-inputs (list intltool pkg-config))
     (synopsis "LXDE GTK+ theme switcher")
     (description "LXAppearance is a desktop-independent GTK+ theme switcher
 able to change themes, icons, and fonts used by GTK+ applications.")
@@ -148,10 +145,8 @@ able to change themes, icons, and fonts used by GTK+ applications.")
                (("(\"|')xrandr\"" _ match)
                 (string-append match (which "xrandr") "\"")))
              #t)))))
-    (inputs `(("gtk+" ,gtk+-2)
-              ("xrandr" ,xrandr)))
-    (native-inputs `(("intltool"   ,intltool)
-                     ("pkg-config" ,pkg-config)))
+    (inputs (list gtk+-2 xrandr))
+    (native-inputs (list intltool pkg-config))
     (synopsis "LXDE monitor configuration tool")
     (description "LXRandR is a very basic monitor configuration tool.  It
 relies on the X11 resize-and-rotate (RandR) extension but doesn't aim to be a
@@ -175,9 +170,8 @@ or external monitor.")
                (base32
                 "0b2fxg8jjjpk219gh7qa18g45365598nd2bq7rrq0bdvqjdxy5i2"))))
     (build-system gnu-build-system)
-    (inputs `(("gtk+" ,gtk+-2)))
-    (native-inputs `(("intltool"   ,intltool)
-                     ("pkg-config" ,pkg-config)))
+    (inputs (list gtk+-2))
+    (native-inputs (list intltool pkg-config))
     (synopsis "LXDE task manager")
     (description "LXTask is a lightweight task manager derived from Xfce task
 manager with all dependencies on Xfce removed.  LXTask is based on the GTK+
@@ -198,10 +192,8 @@ toolkit.  It allows users to monitor and control of running processes.")
                (base32
                 "1124pghrhnx6q4391ri8nvi6bsmvbj1dx81an08mird8jf2b2rii"))))
     (build-system gnu-build-system)
-    (inputs `(("gtk+" ,gtk+-2)
-              ("vte"  ,vte/gtk+-2)))
-    (native-inputs `(("intltool"   ,intltool)
-                     ("pkg-config" ,pkg-config)))
+    (inputs (list gtk+-2 vte/gtk+-2))
+    (native-inputs (list intltool pkg-config))
     (synopsis "LXDE terminal emulator")
     (description "LXTerminal is a VTE-based terminal emulator.  It supports
 multiple tabs and has only minimal dependencies thus being completely
@@ -225,7 +217,9 @@ performance, all instances of the terminal are sharing a single process.")
     (build-system gnu-build-system)
     (inputs `(("glib"  ,glib)
               ("libfm" ,libfm-extra)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
+    (arguments
+     `(#:configure-flags '("CFLAGS=-fcommon")))
     (synopsis "LXDE implementation of the freedesktop menu's cache")
     (description "Menu-cache is a library creating and utilizing caches to
 speed up the access to freedesktop.org defined application menus.")
@@ -245,15 +239,11 @@ speed up the access to freedesktop.org defined application menus.")
                (base32
                 "1xqc2k2jh165mm81xg0ghxx0ml1s3rhh4ndvbzkcri4kfhj7pjql"))))
     (build-system gnu-build-system)
-    (inputs `(("gtk+"   ,gtk+-2)
-              ("gvfs"   ,gvfs)          ; for trash and mount support
-              ("libfm"  ,libfm)
-              ("libx11" ,libx11)))
-    (native-inputs `(("intltool"   ,intltool)
-                     ("libtool"    ,libtool)
-                     ("pkg-config" ,pkg-config)))
+    (inputs (list gtk+-2 gvfs ; for trash and mount support
+                  libfm libx11))
+    (native-inputs (list intltool libtool pkg-config))
     (propagated-inputs
-     `(("lxmenu-data" ,lxmenu-data)))   ; for "Open With..." application list
+     (list lxmenu-data))   ; for "Open With..." application list
     (synopsis "LXDE file manager")
     (description "PCMan is a lightweight GTK+ based file manager, compliant
 with freedesktop.org standard.")
@@ -293,33 +283,33 @@ with freedesktop.org standard.")
        ("intltool" ,intltool)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("bash" ,bash)
-       ("btrfs-progs" ,btrfs-progs)
-       ("cairo" ,cairo)
-       ("coreutils" ,coreutils)
-       ("curlftpfs" ,curlftpfs)
-       ("e2fsprogs" ,e2fsprogs)
-       ("eudev" ,eudev)
-       ("fakeroot" ,fakeroot)
-       ("ffmpegthumbnailer" ,ffmpegthumbnailer)
-       ("fsarchiver" ,fsarchiver)
-       ("fuseiso" ,fuseiso)
-       ("glib" ,glib)
-       ("gphotofs" ,gphotofs)
-       ("gtk+" ,gtk+)
-       ("ifuse" ,ifuse)
-       ("jmtpfs" ,jmtpfs)
-       ("ktsuss" ,ktsuss)
-       ("libx11" ,libx11)
-       ("lsof" ,lsof)
-       ("ntfs-3g" ,ntfs-3g)
-       ("pango" ,pango)
-       ("procps" ,procps)
-       ("shared-mime-info" ,shared-mime-info)
-       ("startup-notification" ,startup-notification)
-       ("udevil" ,udevil)
-       ("util-linux" ,util-linux)
-       ("wget" ,wget)))
+     (list bash
+           btrfs-progs
+           cairo
+           coreutils
+           curlftpfs
+           e2fsprogs
+           eudev
+           fakeroot
+           ffmpegthumbnailer
+           fsarchiver
+           fuseiso
+           glib
+           gphotofs
+           gtk+
+           ifuse
+           jmtpfs
+           ktsuss
+           libx11
+           lsof
+           ntfs-3g
+           pango
+           procps
+           shared-mime-info
+           startup-notification
+           udevil
+           util-linux
+           wget))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -370,8 +360,7 @@ with freedesktop.org standard.")
                #t)))
          (add-after 'patch-share-dirs 'patch-mime-dirs
            (lambda* (#:key inputs #:allow-other-keys)
-             (let* ((mime (string-append (assoc-ref inputs "shared-mime-info")
-                                         "/share/mime")))
+             (let* ((mime (search-input-directory inputs "/share/mime")))
                (with-directory-excursion "src"
                  (substitute* '("mime-type/mime-type.c" "ptk/ptk-file-menu.c")
                    (("/usr(/local)?/share/mime") mime)))
@@ -398,10 +387,9 @@ with freedesktop.org standard.")
                 "terminal_su=/run/setuid-programs/su")
                (("#graphical_su=/usr/bin/gksu")
                 (string-append "graphical_su="
-                               (string-append (assoc-ref inputs "ktsuss")
-                                              "/bin/ktsuss"))))
-             #t)))
+                               (search-input-file inputs "/bin/ktsuss")))))))
        #:configure-flags (list
+                          "CFLAGS=-fcommon"
                           (string-append "--with-preferable-sudo="
                                          (assoc-ref %build-inputs "ktsuss")
                                          "/bin/ktsuss")
@@ -434,8 +422,7 @@ customizable menu system, and Bash integration.")
          "1f5sh2dvb3pdnjlcsyzq9543ck2jsqizkx3204cr22zm5s6j3qwz"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (synopsis "Freedesktop.org desktop menus for LXDE")
     (description
      "Lxmenu-data provides files required to build freedesktop.org
@@ -457,7 +444,7 @@ menu spec-compliant desktop menus for LXDE.")
          "0v4i6x86fr2hbx4fb2si7y2qzmj7h6hcjwaifnin18r8kwwvgl73"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "LXDE default icon theme based on nuoveXT2")
     (description
      "Lxde-icon-theme provides an default icon theme for LXDE.")
@@ -489,14 +476,11 @@ menu spec-compliant desktop menus for LXDE.")
                                           "/bin/lxsession")))
                         #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-       ("lxmenu-data" ,lxmenu-data)
-       ("lxde-icon-theme" ,lxde-icon-theme)))
+     (list pkg-config intltool lxmenu-data lxde-icon-theme))
     (inputs
-     `(("lxsession" ,lxsession)
-       ;; ("lxlock" ,lxlock) ;for 'lxde-screenlock.desktop'
-       ))
+     (list lxsession
+           ;; ("lxlock" ,lxlock) ;for 'lxde-screenlock.desktop'
+           ))
     (synopsis "Common files of the LXDE Desktop")
     (description
      "Lxde-common provides common files of the LXDE Desktop.")
@@ -517,10 +501,9 @@ menu spec-compliant desktop menus for LXDE.")
          "123f3yn4rp1w5b3n5aj3ad9snkxab29qkrs7bcvf5bx4cn57g3sf"))))
     (build-system gnu-build-system)
     (inputs
-     `(("gtk+-2" ,gtk+-2)))
+     (list gtk+-2))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (synopsis "Tool for mouse and keyboard configuration in LXDE")
     (description
      "Lxinput provides a small program to configure keyboard and mouse
@@ -567,14 +550,13 @@ in LXDE.")
      `(("gtk+-2" ,gtk+-2)
        ("polkit" ,polkit)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-       ("docbook-xsl" ,docbook-xsl)
-       ("vala" ,vala)
-
-       ;; For bootstrapping.
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list pkg-config
+           intltool
+           docbook-xsl
+           vala
+           ;; For bootstrapping.
+           autoconf
+           automake))
     (synopsis "Lightweight X11 session manager")
     (description
      "Lxsession provides an lightweight X11 session manager.")
@@ -584,14 +566,14 @@ in LXDE.")
 (define-public lxpanel
   (package
     (name "lxpanel")
-    (version "0.10.0")
+    (version "0.10.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://downloads.sourceforge.net/lxde/"
                            "lxpanel-" version ".tar.xz"))
        (sha256
-        (base32 "0zis3b815p375s6mymhf5sn1a0c1xv0ixxzb0mh3fqhrby6cqy26"))))
+        (base32 "1s0y8jjkw6qz0r8l90618b8xly0c8g906kah7b162sz3sxbqyc8y"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -618,14 +600,9 @@ in LXDE.")
        ("libx11" ,libx11)
        ("wireless-tools" ,wireless-tools)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-       ("docbook-xml" ,docbook-xml)
-       ("gettext-minimal" ,gettext-minimal)))
+     (list pkg-config intltool docbook-xml gettext-minimal))
     (propagated-inputs
-     `(("lxmenu-data" ,lxmenu-data)
-       ("libfm" ,libfm)
-       ("menu-cache" ,menu-cache)))
+     (list lxmenu-data libfm menu-cache))
     (synopsis "X11 Desktop panel for LXDE")
     (description
      "Lxpanel provides an X11 desktop panel for LXDE.")
@@ -643,23 +620,23 @@ in LXDE.")
      ;; TODO:
      ;; lxshortcut, lxsession-edit
      ;; lxappearance-obconf
-     `(("menu-cache" ,menu-cache)
-       ("gpicview" ,gpicview)
-       ("leafpad" ,leafpad)
-       ("lxappearance" ,lxappearance)
-       ("lxde-icon-theme" ,lxde-icon-theme)
-       ("lxde-common" ,lxde-common)
-       ("lxmenu-data" ,lxmenu-data)
-       ("lxpanel" ,lxpanel)
-       ("lxrandr" ,lxrandr)
-       ("lxsession" ,lxsession)
-       ("libfm" ,libfm)
-       ("libfm-extra" ,libfm-extra)
-       ("lxtask" ,lxtask)
-       ("lxterminal" ,lxterminal)
-       ("pcmanfm" ,pcmanfm)
-       ("openbox" ,openbox)
-       ("obconf" ,obconf)))
+     (list menu-cache
+           gpicview
+           leafpad
+           lxappearance
+           lxde-icon-theme
+           lxde-common
+           lxmenu-data
+           lxpanel
+           lxrandr
+           lxsession
+           libfm
+           libfm-extra
+           lxtask
+           lxterminal
+           pcmanfm
+           openbox
+           obconf))
     (synopsis "Lightweight X11 Desktop Environment")
     (description
      "LXDE, which stands for Lightweight X11 Desktop Environment, is a
diff --git a/gnu/packages/lxqt.scm b/gnu/packages/lxqt.scm
index c797b63754..a0a3a0f15b 100644
--- a/gnu/packages/lxqt.scm
+++ b/gnu/packages/lxqt.scm
@@ -88,9 +88,9 @@
      ;; XXX: Tests require a dbus session and some icons.
      '(#:tests? #f))
     (native-inputs
-     `(("doxygen" ,doxygen)))
+     (list doxygen))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (home-page "https://launchpad.net/libdbusmenu-qt")
     (synopsis "Qt implementation of the DBusMenu spec")
     (description "This library provides a Qt implementation of the DBusMenu
@@ -101,20 +101,21 @@ and import their menus over DBus.")
 (define-public libstatgrab
   (package
     (name "libstatgrab")
-    (version "0.92")
+    (version "0.92.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://ftp.i-scream.org/pub/i-scream/libstatgrab/"
                            name "-" version ".tar.gz"))
        (sha256
-        (base32 "15m1sl990l85ijf8pnc6hdfha6fqyiq74mijrzm3xz4zzxm91wav"))))
+        (base32 "04bcbln3qlilxsyh5hrwdrv7x4pfv2lkwdwa98bxfismd15am22n"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:configure-flags '("--enable-tests")))
+     '(#:configure-flags '("--enable-tests"
+                           "--disable-static")))
     (native-inputs
      ;; For testing.
-     `(("perl" ,perl)))
+     (list perl))
     (home-page "https://www.i-scream.org/libstatgrab/")
     (synopsis "Provides access to statistics about the system")
     (description "libstatgrab is a library that provides cross platform access
@@ -147,13 +148,12 @@ to statistics about the system on which it's run.")
        '("-DLXQT_DATA_DIR=/run/current-system/profile/share"
          "-DLXQT_ETC_XDG_DIR=/run/current-system/profile/etc/xdg")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("glib" ,glib)))
+     (list pkg-config glib))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (propagated-inputs
      ;; Dependent projects require Perl via the CMake files.
-     `(("perl" ,perl)))
+     (list perl))
     (synopsis "LXQt Build tools")
     (description
      "Lxqt-build-tools is providing several tools needed to build LXQt
@@ -187,12 +187,9 @@ itself as well as other components maintained by the LXQt project.")
              #t)))))
     (propagated-inputs
      ;; required by Qt5XdgIconLoader.pc
-     `(("glib" ,glib)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)))
+     (list glib qtbase-5 qtsvg))
     (native-inputs
-     `(("lxqt-build-tools" ,lxqt-build-tools)
-       ("pkg-config" ,pkg-config)))
+     (list lxqt-build-tools pkg-config))
     (home-page "https://github.com/lxqt/libqtxdg")
     (synopsis "Qt implementation of freedesktop.org xdg specifications")
     (description "Libqtxdg implements the freedesktop.org xdg specifications
@@ -230,15 +227,14 @@ in Qt.")
                                "/share/lxqt/translations")))
              #t)))))
     (inputs
-     `(("kwindowsystem" ,kwindowsystem)
-       ("libqtxdg" ,libqtxdg)
-       ("libxscrnsaver" ,libxscrnsaver)
-       ("polkit-qt" ,polkit-qt)
-       ("qtsvg" ,qtsvg)
-       ("qtx11extras" ,qtx11extras)))
+     (list kwindowsystem
+           libqtxdg
+           libxscrnsaver
+           polkit-qt
+           qtsvg
+           qtx11extras))
     (native-inputs
-     `(("lxqt-build-tools" ,lxqt-build-tools)
-       ("qttools" ,qttools)))
+     (list lxqt-build-tools qttools))
     (home-page "https://lxqt-project.org")
     (synopsis "Core utility library for all LXQt components")
     (description "liblxqt provides the basic libraries shared by the
@@ -259,9 +255,9 @@ components of the LXQt desktop environment.")
     (build-system cmake-build-system)
     (arguments '(#:tests? #f))          ; no tests
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (native-inputs
-     `(("lxqt-build-tools" ,lxqt-build-tools)))
+     (list lxqt-build-tools))
     (home-page "https://lxqt-project.org")
     (synopsis "Library used to query system info and statistics")
     (description "libsysstat is a library to query system information like CPU
@@ -284,15 +280,14 @@ and memory usage or network traffic.")
         (base32 "04riqf2xgbcnq67l5zb0dfnnmc4a2zljx8zfn3jlvxirnd73l0zm"))))
     (build-system cmake-build-system)
     (inputs
-     `(("kwindowsystem" ,kwindowsystem)
-       ("liblxqt" ,liblxqt)
-       ("libqtxdg" ,libqtxdg)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("qtx11extras" ,qtx11extras)))
+     (list kwindowsystem
+           liblxqt
+           libqtxdg
+           qtbase-5
+           qtsvg
+           qtx11extras))
     (native-inputs
-     `(("lxqt-build-tools" ,lxqt-build-tools)
-       ("qttools" ,qttools)))
+     (list lxqt-build-tools qttools))
     (arguments
      '(#:tests? #f                      ; no tests
        #:phases
@@ -327,15 +322,14 @@ LXQt and the system it's running on.")
         (base32 "07fkn3zmpfxjzzsv1hyv50sx0359n10lxjil35qn266nz165wj43"))))
     (build-system cmake-build-system)
     (inputs
-     `(("kwindowsystem" ,kwindowsystem)
-       ("liblxqt" ,liblxqt)
-       ("libqtxdg" ,libqtxdg)
-       ("polkit-qt" ,polkit-qt)
-       ("qtsvg" ,qtsvg)
-       ("qtx11extras" ,qtx11extras)))
+     (list kwindowsystem
+           liblxqt
+           libqtxdg
+           polkit-qt
+           qtsvg
+           qtx11extras))
     (native-inputs
-     `(("lxqt-build-tools" ,lxqt-build-tools)
-       ("qttools" ,qttools)))
+     (list lxqt-build-tools qttools))
     (arguments
      '(#:tests? #f                      ; no tests
        #:phases
@@ -374,27 +368,25 @@ the operating system LXQt is running on.")
         (base32 "0nr43d6fyc5zg4b3iwpca2cy58ry8q0rahrk6ixm7wrvmaiwkh93"))))
     (build-system cmake-build-system)
     (inputs
-     `(("eudev" ,eudev)
-       ("kwindowsystem" ,kwindowsystem)
-       ("liblxqt" ,liblxqt)
-       ("libqtxdg" ,libqtxdg)
-       ("libxcursor" ,libxcursor)
-       ("libxi" ,libxi)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("qtx11extras" ,qtx11extras)
-       ("solid" ,solid)
-       ("xf86-input-libinput" ,xf86-input-libinput)
-       ("xkeyboard-config" ,xkeyboard-config)
-       ("zlib" ,zlib)))
+     (list eudev
+           kwindowsystem
+           liblxqt
+           libqtxdg
+           libxcursor
+           libxi
+           qtbase-5
+           qtsvg
+           qtx11extras
+           solid
+           xf86-input-libinput
+           xkeyboard-config
+           zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("lxqt-build-tools" ,lxqt-build-tools)
-       ("qttools" ,qttools)))
+     (list pkg-config lxqt-build-tools qttools))
     ;; XXX: This is a workaround so libkscreen can find the backends as we
     ;; dont have a way specify them. We may want to  patch like Nix does.
     (propagated-inputs
-     `(("libkscreen" ,libkscreen)))
+     (list libkscreen))
     (arguments
      '(#:tests? #f                      ; no tests
        #:phases
@@ -447,16 +439,14 @@ configuration of both LXQt and the underlying operating system.")
         (base32 "0pnyqiqhaawrnyvw3ljp850d911abaalnl4rgvl2xyzybvlhki4h"))))
     (build-system cmake-build-system)
     (inputs
-     `(("kwindowsystem" ,kwindowsystem)
-       ("liblxqt" ,liblxqt)
-       ("libqtxdg" ,libqtxdg)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("qtx11extras" ,qtx11extras)))
+     (list kwindowsystem
+           liblxqt
+           libqtxdg
+           qtbase-5
+           qtsvg
+           qtx11extras))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)
-       ("lxqt-build-tools" ,lxqt-build-tools)))
+     (list pkg-config qttools lxqt-build-tools))
     (arguments
      '(#:tests? #f                      ; no tests
        #:phases
@@ -495,15 +485,14 @@ as a whole and are not limited to distinct applications.")
         (base32 "1dyal7brmfnydfgb6lpxnqww8fj5gzixs7s3wf5nn2ihsz1wm4nk"))))
     (build-system cmake-build-system)
     (inputs
-     `(("kwindowsystem" ,kwindowsystem)
-       ("liblxqt" ,liblxqt)
-       ("libqtxdg" ,libqtxdg)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("qtx11extras" ,qtx11extras)))
+     (list kwindowsystem
+           liblxqt
+           libqtxdg
+           qtbase-5
+           qtsvg
+           qtx11extras))
     (native-inputs
-     `(("lxqt-build-tools" ,lxqt-build-tools)
-       ("qttools" ,qttools)))
+     (list lxqt-build-tools qttools))
     (arguments
      '(#:tests? #f                      ; no test target
        #:phases
@@ -541,15 +530,14 @@ according to the Desktop Notifications Specification.")
         (base32 "0gdcy8c21sbfrlfz9c3zqw4dvdwf309flkjgqanwwl9i8hr26chr"))))
     (build-system cmake-build-system)
     (inputs
-     `(("kwindowsystem" ,kwindowsystem)
-       ("liblxqt" ,liblxqt)
-       ("libqtxdg" ,libqtxdg)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("qtx11extras" ,qtx11extras)))
+     (list kwindowsystem
+           liblxqt
+           libqtxdg
+           qtbase-5
+           qtsvg
+           qtx11extras))
     (native-inputs
-     `(("lxqt-build-tools" ,lxqt-build-tools)
-       ("qttools" ,qttools)))
+     (list lxqt-build-tools qttools))
     (arguments
      '(#:tests? #f                      ; no tests
        #:phases
@@ -580,36 +568,33 @@ of other programs.")
         (base32 "1k2cfs1mhad486kh93vbxma3jpjksp4hzjv1xmp1g5alb5dgnc0q"))))
     (build-system cmake-build-system)
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("kguiaddons" ,kguiaddons)
-       ("libdbusmenu-qt" ,libdbusmenu-qt)
-       ("liblxqt" ,liblxqt)
-       ("libqtxdg" ,libqtxdg)
-       ("libstatgrab" ,libstatgrab)
-       ("libsysstat" ,libsysstat)
-       ("libxcomposite" ,libxcomposite)
-       ("libxdamage" ,libxdamage)
-       ("libxkbcommon" ,libxkbcommon)
-       ("libxrender" ,libxrender)
-       ("lm-sensors" ,lm-sensors "lib")
-       ("lxqt-globalkeys" ,lxqt-globalkeys)
-       ("pcre" ,pcre)
-       ("pulseaudio" ,pulseaudio)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("qtx11extras" ,qtx11extras)
-       ("solid" ,solid)
-       ("xcb-util" ,xcb-util)
-       ("xkeyboard-config" ,xkeyboard-config)))
+     (list alsa-lib
+           kguiaddons
+           libdbusmenu-qt
+           liblxqt
+           libqtxdg
+           libstatgrab
+           libsysstat
+           libxcomposite
+           libxdamage
+           libxkbcommon
+           libxrender
+           `(,lm-sensors "lib")
+           lxqt-globalkeys
+           pcre
+           pulseaudio
+           qtbase-5
+           qtsvg
+           qtx11extras
+           solid
+           xcb-util
+           xkeyboard-config))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("lxqt-build-tools" ,lxqt-build-tools)
-       ("qttools" ,qttools)))
+     (list pkg-config lxqt-build-tools qttools))
     (propagated-inputs
      ;; Propagating KWINDOWSYSTEM so that the list of opened applications
      ;; shows up in lxqt-panel's taskbar plugin.
-     `(("kwindowsystem" ,kwindowsystem)
-       ("lxmenu-data" ,lxmenu-data)))
+     (list kwindowsystem lxmenu-data))
     (arguments
      '(#:tests? #f                      ; no tests
        #:phases
@@ -655,19 +640,16 @@ of other programs.")
         (base32 "119bjhx208g7wxmr8r0ajb3wl6vagq1aks6zz07df4bgjs3nnpli"))))
     (build-system cmake-build-system)
     (inputs
-     `(("kwindowsystem" ,kwindowsystem)
-       ("liblxqt" ,liblxqt)
-       ("libqtxdg" ,libqtxdg)
-       ("pcre" ,pcre)
-       ("polkit-qt" ,polkit-qt)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("qtx11extras" ,qtx11extras)))
+     (list kwindowsystem
+           liblxqt
+           libqtxdg
+           pcre
+           polkit-qt
+           qtbase-5
+           qtsvg
+           qtx11extras))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("polkit" ,polkit)
-       ("lxqt-build-tools" ,lxqt-build-tools)
-       ("qttools" ,qttools)))
+     (list pkg-config polkit lxqt-build-tools qttools))
     (arguments
      '(#:tests? #f                      ; no test target
        #:phases
@@ -704,18 +686,17 @@ LXQt.")
         (base32 "00njx8a8cs0zzpz798qc9j16k7i4y0ydy1xmmcq9yv0wawh4gqck"))))
     (build-system cmake-build-system)
     (inputs
-     `(("kidletime" ,kidletime)
-       ("kwindowsystem" ,kwindowsystem)
-       ("liblxqt" ,liblxqt)
-       ("libqtxdg" ,libqtxdg)
-       ("lxqt-globalkeys" ,lxqt-globalkeys)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("qtx11extras" ,qtx11extras)
-       ("solid" ,solid)))
+     (list kidletime
+           kwindowsystem
+           liblxqt
+           libqtxdg
+           lxqt-globalkeys
+           qtbase-5
+           qtsvg
+           qtx11extras
+           solid))
     (native-inputs
-     `(("lxqt-build-tools" ,lxqt-build-tools)
-       ("qttools" ,qttools)))
+     (list lxqt-build-tools qttools))
     (arguments
      '(#:tests? #f                      ; no tests
        #:phases
@@ -754,15 +735,14 @@ when laptop batteries are low on power.")
         (base32 "14c6abxfg3vda333wrvb5lk45c45hnb66jclbs3vsmrjxdb13vv5"))))
     (build-system cmake-build-system)
     (inputs
-     `(("libdbusmenu-qt" ,libdbusmenu-qt)
-       ("libfm-qt" ,libfm-qt)
-       ("libqtxdg" ,libqtxdg)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("qtx11extras" ,qtx11extras)))
+     (list libdbusmenu-qt
+           libfm-qt
+           libqtxdg
+           qtbase-5
+           qtsvg
+           qtx11extras))
     (native-inputs
-     `(("lxqt-build-tools" ,lxqt-build-tools)
-       ("qttools" ,qttools)))
+     (list lxqt-build-tools qttools))
     (arguments
      '(#:tests? #f                      ; no tests
        #:phases
@@ -792,19 +772,17 @@ Qt with LXQt.")
         (base32 "0n53jbvkmp4vgi21a720gsvi407m4ybqk8xrpnm5f48yjr88r9i4"))))
     (build-system cmake-build-system)
     (inputs
-     `(("kwindowsystem" ,kwindowsystem)
-       ("liblxqt" ,liblxqt)
-       ("libqtxdg" ,libqtxdg)
-       ("lxqt-globalkeys" ,lxqt-globalkeys)
-       ("muparser" ,muparser)
-       ("pcre" ,pcre)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("qtx11extras" ,qtx11extras)))
+     (list kwindowsystem
+           liblxqt
+           libqtxdg
+           lxqt-globalkeys
+           muparser
+           pcre
+           qtbase-5
+           qtsvg
+           qtx11extras))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)
-       ("lxqt-build-tools" ,lxqt-build-tools)))
+     (list pkg-config qttools lxqt-build-tools))
     (arguments
      '(#:tests? #f                      ; no tests
        #:phases
@@ -841,19 +819,17 @@ allows for launching applications or shutting down the system.")
         (base32 "0iwwfyngpbhs2dwvbw0cci0bf3qbqcpjjw7h5vm46nimvgp8q1fr"))))
     (build-system cmake-build-system)
     (inputs
-     `(("eudev" ,eudev)
-       ("kwindowsystem" ,kwindowsystem)
-       ("liblxqt" ,liblxqt)
-       ("libqtxdg" ,libqtxdg)
-       ("procps" ,procps)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("qtx11extras" ,qtx11extras)
-       ("xdg-user-dirs" ,xdg-user-dirs)))
+     (list eudev
+           kwindowsystem
+           liblxqt
+           libqtxdg
+           procps
+           qtbase-5
+           qtsvg
+           qtx11extras
+           xdg-user-dirs))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("lxqt-build-tools" ,lxqt-build-tools)
-       ("qttools" ,qttools)))
+     (list pkg-config lxqt-build-tools qttools))
     (arguments
      `(#:tests? #f
        #:phases
@@ -913,17 +889,15 @@ for the LXQt desktop environment.")
         (base32 "02s38m0ywp0gjkjczvrc4r1ignshbajlj084xd61d3rcm7vahhic"))))
     (build-system cmake-build-system)
     (inputs
-     `(("kwindowsystem" ,kwindowsystem)
-       ("liblxqt" ,liblxqt)
-       ("libqtxdg" ,libqtxdg)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("qtx11extras" ,qtx11extras)
-       ("sudo" ,sudo)))
+     (list kwindowsystem
+           liblxqt
+           libqtxdg
+           qtbase-5
+           qtsvg
+           qtx11extras
+           sudo))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)
-       ("lxqt-build-tools" ,lxqt-build-tools)))
+     (list pkg-config qttools lxqt-build-tools))
     (arguments
      '(#:tests? #f                      ; no tests
        #:phases
@@ -955,7 +929,7 @@ permissions of other users including root.")
         (base32 "0kmvcz6rxghxxgb0m264zbvycc1zjma8mr4cpwg5kyrzb47rdw9z"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("lxqt-build-tools" ,lxqt-build-tools)))
+     (list lxqt-build-tools))
     (arguments
      `(#:tests? #f                      ; no tests
        #:phases
@@ -995,18 +969,16 @@ for LXQt.")
     (arguments
      '(#:tests? #f))                    ; no tests
     (inputs
-     `(("glib" ,glib)
-       ("libexif" ,libexif)
-       ("libfm" ,libfm)
-       ("libxcb" ,libxcb)
-       ("menu-cache" ,menu-cache)
-       ("pcre" ,pcre)
-       ("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)))
+     (list glib
+           libexif
+           libfm
+           libxcb
+           menu-cache
+           pcre
+           qtbase-5
+           qtx11extras))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("lxqt-build-tools" ,lxqt-build-tools)
-       ("qttools" ,qttools)))
+     (list pkg-config lxqt-build-tools qttools))
     (home-page "https://lxqt-project.org")
     (synopsis "Qt binding for libfm")
     (description "libfm-qt is the Qt port of libfm, a library providing
@@ -1026,13 +998,9 @@ components to build desktop file managers which belongs to LXDE.")
         (base32 "1axs7dnh2z08ygy28iipfbgfck15k2i2pwlf0v8d8axjrmavzb3l"))))
     (build-system cmake-build-system)
     (inputs
-     `(("libfm-qt" ,libfm-qt)
-       ("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)))
+     (list libfm-qt qtbase-5 qtx11extras))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)
-       ("lxqt-build-tools" ,lxqt-build-tools)))
+     (list pkg-config qttools lxqt-build-tools))
     (arguments
      '(#:tests? #f                      ; no tests
        #:phases
@@ -1068,12 +1036,9 @@ LXDE.")
         (base32 "0haarzhndjp0wndfhcdy6zl2whpdn3w0qzr3rr137kfqibc58lvx"))))
     (build-system cmake-build-system)
     (inputs
-     `(("libconfig" ,libconfig)
-       ("qtbase" ,qtbase-5)))
+     (list libconfig qtbase-5))
     (native-inputs
-     `(("lxqt-build-tools" ,lxqt-build-tools)
-       ("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list lxqt-build-tools pkg-config qttools))
     (arguments
      '(#:tests? #f                      ; no tests
        #:phases
@@ -1103,15 +1068,9 @@ manager Compton.")
         (base32 "0g6hs41xfw2ghhwpj0rqr2ciri0x9v984689yrnmnvah88zlya1f"))))
     (build-system cmake-build-system)
     (inputs
-     `(("libexif" ,libexif)
-       ("libfm-qt" ,libfm-qt)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("qtx11extras" ,qtx11extras)))
+     (list libexif libfm-qt qtbase-5 qtsvg qtx11extras))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("lxqt-build-tools" ,lxqt-build-tools)
-       ("qttools" ,qttools)))
+     (list pkg-config lxqt-build-tools qttools))
     (arguments
      '(#:tests? #f))                    ; no tests
     (home-page "https://lxqt-project.org")
@@ -1133,20 +1092,18 @@ image viewer.")
         (base32 "0hlbivdbiw7wjhwrp8qfmq50ks19v0q21m3pyjj0k2na7nv9d3a5"))))
     (build-system cmake-build-system)
     (inputs
-     `(("imlib2" ,imlib2)
-       ("libsm" ,libsm)
-       ("librsvg" ,librsvg)
-       ("libxft" ,libxft)
-       ("libxml2" ,libxml2)
-       ("openbox" ,openbox)
-       ("pango" ,pango)
-       ("pcre" ,pcre)
-       ("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)))
+     (list imlib2
+           libsm
+           librsvg
+           libxft
+           libxml2
+           openbox
+           pango
+           pcre
+           qtbase-5
+           qtx11extras))
     (native-inputs
-     `(("lxqt-build-tools" ,lxqt-build-tools)
-       ("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list lxqt-build-tools pkg-config qttools))
     (arguments
      '(#:tests? #f))                    ; no tests
     (home-page "https://lxqt-project.org")
@@ -1168,15 +1125,9 @@ window manager OpenBox.")
         (base32 "0w51dpjayav78lmhw966fz3gvypkmv64xgsd7x5rqs8am39lq9vc"))))
     (build-system cmake-build-system)
     (inputs
-     `(("glib" ,glib)
-       ("pcre" ,pcre)
-       ("pulseaudio" ,pulseaudio)
-       ("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)))
+     (list glib pcre pulseaudio qtbase-5 qtx11extras))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("lxqt-build-tools" ,lxqt-build-tools)
-       ("qttools" ,qttools)))
+     (list pkg-config lxqt-build-tools qttools))
     (arguments
      '(#:tests? #f))                    ; no tests
     (home-page "https://lxqt-project.org")
@@ -1198,15 +1149,14 @@ window manager OpenBox.")
         (base32 "0zg0czrh3dlbnl5smxamhkdbj1g0szm47w1c0fwpaplgc1vv5lfq"))))
     (build-system cmake-build-system)
     (inputs
-     `(("kwindowsystem" ,kwindowsystem)
-       ("libxrender" ,libxrender)
-       ("liblxqt" ,liblxqt)
-       ("libqtxdg" ,libqtxdg)
-       ("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)))
+     (list kwindowsystem
+           libxrender
+           liblxqt
+           libqtxdg
+           qtbase-5
+           qtx11extras))
     (native-inputs
-     `(("lxqt-build-tools" ,lxqt-build-tools)
-       ("qttools" ,qttools)))
+     (list lxqt-build-tools qttools))
     (arguments
      '(#:tests? #f))                    ; no tests
     (home-page "https://lxqt-project.org")
@@ -1228,11 +1178,9 @@ processes currently in existence, much like code{top} or code{ps}.")
         (base32 "10lv475qj0x3c3vl4yhjyr6y10qj5pq8n5pal5k24f6pf7xv412f"))))
     (build-system cmake-build-system)
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("utf8proc" ,utf8proc)))
+     (list qtbase-5 utf8proc))
     (native-inputs
-     `(("lxqt-build-tools" ,lxqt-build-tools)
-       ("qttools" ,qttools)))
+     (list lxqt-build-tools qttools))
     (arguments
      '(#:tests? #f))                    ; no tests
     (home-page "https://lxqt-project.org")
@@ -1253,12 +1201,9 @@ processes currently in existence, much like code{top} or code{ps}.")
         (base32 "0rfv7a6ncm8fs8aicinh9l29w4636gxzcqz735jmch2r41v9i1d9"))))
     (build-system cmake-build-system)
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)
-       ("qtermwidget" ,qtermwidget)))
+     (list qtbase-5 qtx11extras qtermwidget))
     (native-inputs
-     `(("lxqt-build-tools" ,lxqt-build-tools)
-       ("qttools" ,qttools)))
+     (list lxqt-build-tools qttools))
     (arguments
      '(#:tests? #f))                      ; no tests
     (home-page "https://lxqt-project.org")
@@ -1280,15 +1225,9 @@ QTermWidget.")
         (base32 "0cilzw7rz5m2klzpax7rrs5rr6whfda2svwzsn2jvmrirmh5by7r"))))
     (build-system cmake-build-system)
     (inputs
-     `(("kwindowsystem" ,kwindowsystem)
-       ("libqtxdg" ,libqtxdg)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("qtx11extras" ,qtx11extras)))
+     (list kwindowsystem libqtxdg qtbase-5 qtsvg qtx11extras))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("perl" ,perl)
-       ("qttools" ,qttools)))
+     (list pkg-config perl qttools))
     (arguments
      '(#:tests? #f))                    ; no tests
     (home-page "https://lxqt-project.org")
@@ -1311,15 +1250,9 @@ easily publishing them on internet image hosting services.")
           (base32 "0fzgq7cyr7hx8qmq84xfgbsdx04mc1r7vzq5mz79j7bp2ysh134z"))))
     (build-system cmake-build-system)
     (inputs
-      `(("glib" ,glib)
-        ("json-glib" ,json-glib)
-        ("libfm-qt" ,libfm-qt)
-        ("qtbase" ,qtbase-5)
-        ("qtx11extras" ,qtx11extras)))
+      (list glib json-glib libfm-qt qtbase-5 qtx11extras))
     (native-inputs
-      `(("pkg-config" ,pkg-config)
-        ("lxqt-build-tools" ,lxqt-build-tools)
-        ("qttools" ,qttools)))
+      (list pkg-config lxqt-build-tools qttools))
     (arguments
       '(#:tests? #f))
     (home-page "https://lxqt-project.org")
@@ -1348,12 +1281,12 @@ like @command{tar} and @command{zip}.")
            (base32 "087641idpg7n8yhh5biis4wv52ayw3rddirwqb34bf5fwj664pw9"))))
       (build-system cmake-build-system)
       (inputs
-        `(("kwindowsystem" ,kwindowsystem)
-          ("qtbase" ,qtbase-5)
-          ("qtsvg" ,qtsvg)
-          ("liblxqt" ,liblxqt)
-          ("qtx11extras" ,qtx11extras)
-          ("libqtxdg" ,libqtxdg)))
+        (list kwindowsystem
+              qtbase-5
+              qtsvg
+              liblxqt
+              qtx11extras
+              libqtxdg))
       (native-inputs
         `(("lxqt-build-tools" ,lxqt-build-tools)
           ("qtlinguist" ,qttools)))
@@ -1393,41 +1326,41 @@ desktop.")
     (build-system trivial-build-system)
     (arguments '(#:builder (begin (mkdir %output) #t)))
     (propagated-inputs
-     `(;; XDG
-       ("desktop-file-utils" ,desktop-file-utils)
-       ("hicolor-icon-theme" ,hicolor-icon-theme)
-       ("xdg-user-dirs" ,xdg-user-dirs)
-       ("xdg-utils" ,xdg-utils)
-       ;; Base
-       ;; TODO: qtsvg is needed for lxqt apps to display icons. Maybe it
-       ;; should be added to their propagated-inputs?
-       ("qtsvg" ,qtsvg)
-       ;; Core
-       ("lxqt-about" ,lxqt-about)
-       ("lxqt-admin" ,lxqt-admin)
-       ("lxqt-config" ,lxqt-config)
-       ("lxqt-globalkeys" ,lxqt-globalkeys)
-       ("lxqt-notificationd" ,lxqt-notificationd)
-       ("lxqt-openssh-askpass" ,lxqt-openssh-askpass)
-       ("lxqt-panel" ,lxqt-panel)
-       ("lxqt-policykit" ,lxqt-policykit)
-       ("lxqt-powermanagement" ,lxqt-powermanagement)
-       ("lxqt-qtplugin" ,lxqt-qtplugin)
-       ("lxqt-runner" ,lxqt-runner)
-       ("lxqt-session" ,lxqt-session)
-       ("lxqt-sudo" ,lxqt-sudo)
-       ("lxqt-themes" ,lxqt-themes)
-       ("pcmanfm-qt" ,pcmanfm-qt)
-       ;; Extra
-       ("picom" ,picom)
-       ("font-dejavu" ,font-dejavu)
-       ("lximage-qt" ,lximage-qt)
-       ("obconf-qt" ,obconf-qt)
-       ("openbox" ,openbox)
-       ("oxygen-icons" ,oxygen-icons)
-       ("pavucontrol-qt" ,pavucontrol-qt)
-       ("qps" ,qps)
-       ("qterminal" ,qterminal)))
+     (list ;; XDG
+           desktop-file-utils
+           hicolor-icon-theme
+           xdg-user-dirs
+           xdg-utils
+           ;; Base
+           ;; TODO: qtsvg is needed for lxqt apps to display icons. Maybe it
+           ;; should be added to their propagated-inputs?
+           qtsvg
+           ;; Core
+           lxqt-about
+           lxqt-admin
+           lxqt-config
+           lxqt-globalkeys
+           lxqt-notificationd
+           lxqt-openssh-askpass
+           lxqt-panel
+           lxqt-policykit
+           lxqt-powermanagement
+           lxqt-qtplugin
+           lxqt-runner
+           lxqt-session
+           lxqt-sudo
+           lxqt-themes
+           pcmanfm-qt
+           ;; Extra
+           picom
+           font-dejavu
+           lximage-qt
+           obconf-qt
+           openbox
+           oxygen-icons
+           pavucontrol-qt
+           qps
+           qterminal))
     (synopsis "The Lightweight Qt Desktop Environment")
     (description "LXQt is a lightweight Qt desktop environment.")
     (home-page "https://lxqt-project.org")
diff --git a/gnu/packages/machine-learning.scm b/gnu/packages/machine-learning.scm
index 1a17c73eea..aac5b81a06 100644
--- a/gnu/packages/machine-learning.scm
+++ b/gnu/packages/machine-learning.scm
@@ -15,7 +15,7 @@
 ;;; Copyright © 2019 Brett Gilio <brettg@gnu.org>
 ;;; Copyright © 2020 Konrad Hinsen <konrad.hinsen@fastmail.net>
 ;;; Copyright © 2020 Edouard Klein <edk@beaver-labs.com>
-;;; Copyright © 2020, 2021 Vinicius Monego <monego@posteo.net>
+;;; Copyright © 2020, 2021, 2022 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -35,6 +35,7 @@
 
 (define-module (gnu packages machine-learning)
   #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix gexp)
   #:use-module (guix packages)
   #:use-module (guix utils)
   #:use-module (guix download)
@@ -53,6 +54,7 @@
   #:use-module (gnu packages base)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages boost)
+  #:use-module (gnu packages bdw-gc)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages cmake)
@@ -61,10 +63,16 @@
   #:use-module (gnu packages databases)
   #:use-module (gnu packages dejagnu)
   #:use-module (gnu packages gcc)
+  #:use-module (gnu packages gettext)
+  #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages graphviz)
   #:use-module (gnu packages gstreamer)
+  #:use-module (gnu packages guile)
+  #:use-module (gnu packages haskell-xyz)
   #:use-module (gnu packages image)
+  #:use-module (gnu packages image-processing)
+  #:use-module (gnu packages imagemagick)
   #:use-module (gnu packages libffi)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages llvm)
@@ -77,6 +85,7 @@
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages protobuf)
+  #:use-module (gnu packages pulseaudio)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-check)
@@ -90,6 +99,7 @@
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages swig)
   #:use-module (gnu packages tls)
+  #:use-module (gnu packages video)
   #:use-module (gnu packages web)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
@@ -141,20 +151,28 @@ sparsely connected networks.")
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ; no "check" target
-       #:phases (modify-phases %standard-phases
-                  (delete 'configure)
-                  (replace
-                   'install             ; no ‘install’ target
-                   (lambda* (#:key outputs #:allow-other-keys)
-                     (let* ((out (assoc-ref outputs "out"))
-                            (bin (string-append out "/bin/")))
-                       (mkdir-p bin)
-                       (for-each (lambda (file)
-                                   (copy-file file (string-append bin file)))
-                                 '("svm-train"
-                                   "svm-predict"
-                                   "svm-scale")))
-                     #t)))))
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (add-after 'build 'build-lib
+           (lambda _
+             (invoke "make" "lib")))
+         (replace 'install              ; no ‘install’ target
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin/"))
+                    (lib (string-append out "/lib/"))
+                    (inc (string-append out "/include/libsvm")))
+               (mkdir-p bin)
+               (for-each (lambda (file)
+                           (copy-file file (string-append bin file)))
+                         '("svm-train"
+                           "svm-predict"
+                           "svm-scale"))
+               (mkdir-p lib)
+               (install-file "libsvm.so.2" lib)
+               (mkdir-p inc)
+               (install-file "svm.h" inc)))))))
     (home-page "https://www.csie.ntu.edu.tw/~cjlin/libsvm/")
     (synopsis "Library for Support Vector Machines")
     (description
@@ -193,7 +211,7 @@ classification.")
                          (string-append site "libsvm.so.2")))
             #t)))))
     (inputs
-     `(("python" ,python)))
+     (list python))
     (synopsis "Python bindings of libSVM")))
 
 (define-public ghmm
@@ -222,20 +240,7 @@ classification.")
          #:phases
          (modify-phases %standard-phases
            (add-after 'unpack 'enter-dir
-             (lambda _ (chdir "ghmm") #t))
-           (delete 'check)
-           (add-after 'install 'check
-             (assoc-ref %standard-phases 'check))
-           (add-before 'check 'fix-PYTHONPATH
-             (lambda* (#:key inputs outputs #:allow-other-keys)
-               (let ((python-version (python-version
-                                      (assoc-ref inputs "python"))))
-                 (setenv "PYTHONPATH"
-                         (string-append (getenv "PYTHONPATH")
-                                        ":" (assoc-ref outputs "out")
-                                        "/lib/python" python-version
-                                        "/site-packages")))
-               #t))
+             (lambda _ (chdir "ghmm")))
            (add-after 'enter-dir 'fix-runpath
              (lambda* (#:key outputs #:allow-other-keys)
                (substitute* "ghmmwrapper/setup.py"
@@ -246,8 +251,7 @@ classification.")
                                  line
                                  "\"-Wl,-rpath="
                                  (assoc-ref outputs "out")
-                                 "/lib\", ")))
-               #t))
+                                 "/lib\", ")))))
            (add-after 'enter-dir 'disable-broken-tests
              (lambda _
                (substitute* "tests/Makefile.am"
@@ -267,18 +271,17 @@ classification.")
                    line indent)
                   (string-append indent
                                  "@unittest.skip(\"Disabled by Guix\")\n"
-                                 line)))
-               #t)))))
+                                 line))))))))
       (inputs
        `(("python" ,python-2) ; only Python 2 is supported
          ("libxml2" ,libxml2)))
       (native-inputs
-       `(("pkg-config" ,pkg-config)
-         ("dejagnu" ,dejagnu)
-         ("swig" ,swig)
-         ("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("libtool" ,libtool)))
+       (list pkg-config
+             dejagnu
+             swig
+             autoconf
+             automake
+             libtool))
       (home-page "http://ghmm.org")
       (synopsis "Hidden Markov Model library")
       (description
@@ -288,6 +291,149 @@ Markov Models} (HMM) and algorithms: discrete, continuous emissions, basic
 training, HMM clustering, HMM mixtures.")
       (license license:lgpl2.0+))))
 
+(define-public guile-aiscm
+  (package
+    (name "guile-aiscm")
+    (version "0.23.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/wedesoft/aiscm")
+                    (commit "c78b91edb7c17c6fbf3b294452f44e91d75e3c67")))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "09rdbcr8dinzijyx9h940ann91yjlbg0fangx365llhvy354n840"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list
+      #:make-flags
+      #~(list (string-append "GUILE_CACHE=" #$output "/lib/guile/3.0/site-ccache")
+              (string-append "GUILE_EXT=" #$output "/lib/guile/3.0/extensions")
+              (string-append "GUILE_SITE=" #$output "/share/guile/site/3.0"))
+      #:phases
+      '(modify-phases %standard-phases
+         (add-after 'unpack 'build-reproducibly
+           (lambda _
+             (substitute* "doc/Makefile.am"
+               (("\\$\\(DATE\\)") "1970-01-01"))))
+         (add-after 'unpack 'use-llvm-config
+           (lambda _
+             (substitute* "m4/ax_llvmc.m4"
+               (("llvm-config-13") "llvm-config")
+               ;; For some reason this library is not on the link list.
+               (("(LLVM_LIBS=\"\\$\\(\\$ac_llvm_config_path --libs \\$1\\))\"" _ m)
+                (string-append m " -lLLVMMCJIT\"")))
+
+             ;; Because of this message:
+             ;; symbol lookup error: ./.libs/libguile-aiscm-core.so: undefined symbol: LLVMInitializeX86TargetInfo
+             ;; This probably needs to differ when building on architectures
+             ;; other than x86_64p
+             (substitute* "aiscm/Makefile.am"
+               (("LLVM_LIBS\\)") "LLVM_LIBS) \
+-lLLVMX86AsmParser -lLLVMX86CodeGen -lLLVMX86Desc -lLLVMX86Info"))))
+         ;; Use Clang instead of GCC.
+         (add-before 'configure 'prepare-build-environment
+           (lambda _
+             (setenv "AR" "llvm-ar")
+             (setenv "NM" "llvm-nm")
+             (setenv "CC" "clang")
+             (setenv "CXX" "clang++"))))))
+    (inputs
+     (list ffmpeg
+           freeglut
+           guile-3.0
+           imagemagick
+           libjpeg-turbo
+           libomp
+           libxi
+           libxmu
+           libxpm
+           libxt
+           libxv
+           mesa
+           mjpegtools
+           pandoc
+           pulseaudio))
+    (native-inputs
+     (list clang-13
+           llvm-13
+           pkg-config
+           autoconf
+           automake
+           gettext-minimal
+           libtool
+           which))
+    (home-page "https://wedesoft.github.io/aiscm/")
+    (synopsis "Guile extension for numerical arrays and tensors")
+    (description "AIscm is a Guile extension for numerical arrays and tensors.
+Performance is achieved by using the LLVM JIT compiler.")
+    (license license:gpl3+)))
+
+(define-public guile-aiscm-next
+  (let ((commit "b17ed538c303badc419a7c358d91f266d2a8c354")
+        (revision "1"))
+    (package
+      (inherit guile-aiscm)
+      (name "guile-aiscm-next")
+      (version (git-version "0.23.1" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/wedesoft/aiscm")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0px7r7lfskbp1prdrfrcvrsc4wjrk3ahkigsw4pqvny6zs7jnvc0"))))
+      (arguments
+       (substitute-keyword-arguments (package-arguments guile-aiscm)
+         ((#:configure-flags flags '())
+          #~(list (string-append "OPENCV_CFLAGS=-I" #$(this-package-input "opencv")
+                                 "/include/opencv4")
+                  (let ((modules
+                         (list "aruco" "barcode" "bgsegm" "bioinspired"
+                               "calib3d" "ccalib" "core" "datasets" "dnn"
+                               "dnn_objdetect" "dnn_superres" "dpm" "face"
+                               "features2d" "flann" "freetype" "fuzzy" "hdf"
+                               "hfs" "highgui" "img_hash" "imgcodecs" "imgproc"
+                               "intensity_transform" "line_descriptor" "mcc"
+                               "ml" "objdetect" "optflow" "phase_unwrapping"
+                               "photo" "plot" "quality" "rapid" "reg" "rgbd"
+                               "saliency" "shape" "stereo" "stitching"
+                               "structured_light" "superres" "surface_matching"
+                               "text" "tracking" "video" "videoio" "videostab"
+                               "wechat_qrcode" "ximgproc" "xobjdetect" "xphoto")))
+                    (format #false "OPENCV_LIBS=~{-lopencv_~a~^ ~}" modules))))
+         ((#:phases phases '%standard-phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'find-clearsilver
+               (lambda* (#:key inputs #:allow-other-keys)
+                 (substitute* "configure.ac"
+                   (("/usr/local/include/ClearSilver")
+                    (string-append (assoc-ref inputs "clearsilver")
+                                   "/include/ClearSilver")))
+                 (substitute* "aiscm/Makefile.am"
+                   (("-lneo_utl" m)
+                    (string-append m " -lstreamhtmlparser")))
+                 (setenv "C_INCLUDE_PATH"
+                         (string-append (assoc-ref inputs "clearsilver")
+                                        "/include/ClearSilver:"
+                                        (or (getenv "C_INCLUDE_PATH") "")))))
+             ;; This test fails because our version of tensorflow is too old
+             ;; to provide tf-string-length.
+             (add-after 'unpack 'disable-broken-test
+               (lambda _
+                 (substitute* "tests/test_tensorflow.scm"
+                   (("\\(test-eqv \"determine string length" m)
+                    (string-append "#;" m)))))))))
+      (inputs
+       (modify-inputs (package-inputs guile-aiscm)
+         (append clearsilver opencv tensorflow libgc)))
+      (native-inputs
+       (modify-inputs (package-native-inputs guile-aiscm)
+         (append protobuf-c))))))
+
 (define-public mcl
   (package
     (name "mcl")
@@ -303,9 +449,10 @@ training, HMM clustering, HMM mixtures.")
                 "15xlax3z31lsn62vlg94hkm75nm40q4679amnfg13jm8m2bnhy5m"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:configure-flags (list "--enable-blast")))
+     `(#:configure-flags (list "--enable-blast"
+                               "CFLAGS=-fcommon")))
     (inputs
-     `(("perl" ,perl)))
+     (list perl))
     (home-page "http://micans.org/mcl/")
     (synopsis "Clustering algorithm for graphs")
     (description
@@ -341,7 +488,7 @@ networks) based on simulation of (stochastic) flow in graphs.")
              (substitute* "setup.ml"
                (("LDFLAGS=-fPIC")
                 (string-append "LDFLAGS=-fPIC\"; \"SHELL=" (which "sh")))
-               (("-std=c89") "-std=gnu99")
+               (("-std=c89") "-std=gnu99 -fcommon")
 
                ;; This is a mutable string, which is no longer supported.  Use
                ;; a byte buffer instead.
@@ -354,14 +501,14 @@ networks) based on simulation of (stochastic) flow in graphs.")
                ((" s;")
                 " s);"))
              (substitute* "myocamlbuild.ml"
-               (("std=c89") "std=gnu99"))
+               (("std=c89") "std=gnu99 -fcommon"))
              ;; Since we build with a more recent OCaml, we have to use C99 or
              ;; later.  This causes problems with the old C code.
              (substitute* "src/impala/matrix.c"
                (("restrict") "restrict_"))
              #t)))))
     (native-inputs
-     `(("ocamlbuild" ,ocamlbuild)))
+     (list ocamlbuild))
     (home-page "https://github.com/fhcrc/mcl")
     (synopsis "OCaml wrappers around MCL")
     (description
@@ -391,16 +538,18 @@ algorithm.")
                             (assoc-ref %build-inputs "boost")))
        #:phases
        (modify-phases %standard-phases
-         (add-before
-          'configure 'set-CXXFLAGS
-          (lambda _
-            (setenv "CXXFLAGS" "-fpermissive ")
-            #t)))))
+         (add-after 'unpack 'fix-compatibility-errors
+           (lambda _
+             (substitute* "src/library/IAM2WayImportance.h"
+               (("= std::make_pair.*")
+                "= std::minmax(varID1, varID2);"))
+             (substitute* "src/library/DataFrame.h"
+               (("isFirst\\?.*")
+                "if (isFirst) { isFirst = false; } else { os << par.delimiter; }\n"))))
+         (add-before 'configure 'set-CXXFLAGS
+           (lambda _ (setenv "CXXFLAGS" "-fpermissive "))))))
     (inputs
-     `(("boost" ,boost)
-       ("gsl" ,gsl)
-       ("libxml2" ,libxml2)
-       ("zlib" ,zlib)))
+     (list boost gsl libxml2 zlib))
     (native-inputs
      `(("gfortran" ,gfortran)
        ("gfortran:lib" ,gfortran "lib")))
@@ -570,8 +719,7 @@ optimizing, and searching weighted finite-state transducers (FSTs).")
        ("lzo" ,lzo)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("rxcpp" ,rxcpp)))
+     (list pkg-config rxcpp))
     ;; Non-portable SSE instructions are used so building fails on platforms
     ;; other than x86_64.
     (supported-systems '("x86_64-linux"))
@@ -648,22 +796,18 @@ in terms of new algorithms.")
                       (invoke "make" "install"
                               "-C" ".setuptools-cmake-build"))))))
     (native-inputs
-     `(("cmake" ,cmake)
-       ("googletest" ,googletest)
-       ("pybind11" ,pybind11)
-       ("python-coverage" ,python-coverage)
-       ("python-nbval" ,python-nbval)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list cmake
+           googletest
+           pybind11
+           python-coverage
+           python-nbval
+           python-pytest
+           python-pytest-runner))
     (inputs
-     `(("protobuf" ,protobuf)))
+     (list protobuf))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-protobuf" ,python-protobuf)
-       ("python-six" ,python-six)
-       ("python-tabulate" ,python-tabulate)
-       ("python-typing-extensions"
-        ,python-typing-extensions)))
+     (list python-numpy python-protobuf python-six python-tabulate
+           python-typing-extensions))
     (home-page "https://onnx.ai/")
     (synopsis "Open Neural Network Exchange")
     (description
@@ -700,17 +844,12 @@ standard data types.")
     (build-system python-build-system)
     (arguments (package-arguments onnx))          ;reuse build system tweaks
     (native-inputs
-     `(("cmake" ,cmake)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)
-       ("python-nbval" ,python-nbval)
-       ("python-coverage" ,python-coverage)))
+     (list cmake python-pytest python-pytest-runner python-nbval
+           python-coverage))
     (inputs
-     `(("onnx" ,onnx)
-       ("protobuf" ,protobuf)
-       ("pybind11" ,pybind11)))
+     (list onnx protobuf pybind11))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (synopsis "Library to optimize ONNX models")
     (description
      "This package provides a C++ and Python library for performing arbitrary
@@ -749,7 +888,7 @@ with a single function call.")
            (lambda _
              (invoke "ctest"))))))
     (native-inputs
-     `(("catch" ,catch-framework)))
+     (list catch-framework))
     (home-page "http://reactivex.io/")
     (synopsis "Reactive Extensions for C++")
     (description
@@ -854,7 +993,7 @@ than 8 bits, and at the end only some significant 8 bits are kept.")
                              '("meta" "profiling" "public" "fixedpoint"
                                "eight_bit_int_gemm" "internal")))))))))
       (native-inputs
-       `(("unzip" ,unzip)))
+       (list unzip))
       (properties '((hidden? . #t))))))
 
 (define-public dlib
@@ -917,9 +1056,9 @@ than 8 bits, and at the end only some significant 8 bits are kept.")
                  (invoke "./dtest" "--runall"))
                #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ;; For tests.
-       ("libnsl" ,libnsl)))
+     (list pkg-config
+           ;; For tests.
+           libnsl))
     (inputs
      `(("giflib" ,giflib)
        ("lapack" ,lapack)
@@ -941,7 +1080,7 @@ computing environments.")
 (define-public python-scikit-learn
   (package
     (name "python-scikit-learn")
-    (version "0.24.2")
+    (version "1.0.2")
     (source
      (origin
        (method git-fetch)
@@ -951,7 +1090,7 @@ computing environments.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0hm92biqwwc87bqnr56lwa5bz77lr7k9q21rdwksnfzq3vsdp2nm"))))
+         "1rli53544vlsnmx4v4xcb8fdqcy5n3zksl4plwp76gsmrppb2lig"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -959,32 +1098,24 @@ computing environments.")
          (add-after 'build 'build-ext
            (lambda _ (invoke "python" "setup.py" "build_ext" "--inplace")))
          (replace 'check
-           (lambda _
-             ;; Restrict OpenBLAS threads to prevent segfaults while testing!
-             (setenv "OPENBLAS_NUM_THREADS" "1")
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               ;; Restrict OpenBLAS threads to prevent segfaults while testing!
+               (setenv "OPENBLAS_NUM_THREADS" "1")
 
-             ;; Some tests require write access to $HOME.
-             (setenv "HOME" "/tmp")
+               ;; Some tests require write access to $HOME.
+               (setenv "HOME" "/tmp")
 
-             (invoke "pytest" "sklearn" "-m" "not network")))
-         (add-before 'reset-gzip-timestamps 'make-files-writable
-           (lambda* (#:key outputs #:allow-other-keys)
-             ;; Make sure .gz files are writable so that the
-             ;; 'reset-gzip-timestamps' phase can do its work.
-             (let ((out (assoc-ref outputs "out")))
-               (for-each make-file-writable
-                         (find-files out "\\.gz$"))))))))
+               (invoke "pytest" "sklearn" "-m" "not network"
+                       ;; This test tries to access the internet.
+                       "-k" "not test_load_boston_alternative")))))))
     (inputs
-     `(("openblas" ,openblas)))
+     (list openblas))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pandas" ,python-pandas) ;for tests
-       ("python-cython" ,python-cython)))
+     (list python-pytest python-pandas ;for tests
+           python-cython))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-threadpoolctl" ,python-threadpoolctl)
-       ("python-scipy" ,python-scipy)
-       ("python-joblib" ,python-joblib)))
+     (list python-numpy python-threadpoolctl python-scipy python-joblib))
     (home-page "https://scikit-learn.org/")
     (synopsis "Machine Learning in Python")
     (description
@@ -1009,16 +1140,35 @@ data analysis.")
                 (sha256
                  (base32
                   "08zbzi8yx5wdlxfx9jap61vg1malc9ajf576w7a0liv6jvvrxlpj"))))
+      (arguments
+       `(#:python ,python-2
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'build 'build-ext
+             (lambda _ (invoke "python" "setup.py" "build_ext" "--inplace")))
+           (replace 'check
+             (lambda* (#:key tests? #:allow-other-keys)
+               (when tests?
+                 ;; Restrict OpenBLAS threads to prevent segfaults while testing!
+                 (setenv "OPENBLAS_NUM_THREADS" "1")
+
+                 ;; Some tests require write access to $HOME.
+                 (setenv "HOME" "/tmp")
+
+                 (invoke "pytest" "sklearn" "-m" "not network"
+                         "-k"
+                         (string-append
+                          ;; This test tries to access the internet.
+                          "not test_load_boston_alternative"
+                          ;; This test fails for unknown reasons
+                          " and not test_rank_deficient_design"))))))))
       (inputs
-       `(("openblas" ,openblas)))
+       (list openblas))
       (native-inputs
-       `(("python2-pytest" ,python2-pytest)
-         ("python2-pandas" ,python2-pandas) ;for tests
-         ("python2-cython" ,python2-cython)))
+       (list python2-pytest python2-pandas ;for tests
+             python2-cython))
       (propagated-inputs
-       `(("python2-numpy" ,python2-numpy)
-         ("python2-scipy" ,python2-scipy)
-         ("python2-joblib" ,python2-joblib))))))
+       (list python2-numpy python2-scipy python2-joblib)))))
 
 (define-public python-threadpoolctl
   (package
@@ -1042,7 +1192,7 @@ data analysis.")
                (invoke "pytest"))
              #t)))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/joblib/threadpoolctl")
     (synopsis "Python helpers for common threading libraries")
     (description "Thread-pool Controls provides Python helpers to limit the
@@ -1053,22 +1203,27 @@ for scientific computing and data science (e.g. BLAS and OpenMP).")
 (define-public python-pynndescent
   (package
     (name "python-pynndescent")
-    (version "0.5.2")
+    (version "0.5.5")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pynndescent" version))
        (sha256
-        (base32 "0w87c2v0li2rdbx6qfc2lb6y6bxpdy3jwfgzfs1kcr4d1chj5zfr"))))
+        (base32 "10pqqqc3jkpw03cyzy04slxmpgyhqnlgbyk0c1cv7kqr5d0zhzbs"))))
     (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "python" "-m" "pytest" "--pyargs" "pynndescent")))))))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-pytest))
     (propagated-inputs
-     `(("python-joblib" ,python-joblib)
-       ("python-llvmlite" ,python-llvmlite)
-       ("python-numba" ,python-numba)
-       ("python-scikit-learn" ,python-scikit-learn)
-       ("python-scipy" ,python-scipy)))
+     (list python-joblib python-llvmlite python-numba python-scikit-learn
+           python-scipy))
     (home-page "https://github.com/lmcinnes/pynndescent")
     (synopsis "Nearest neighbor descent for approximate nearest neighbors")
     (description
@@ -1079,17 +1234,16 @@ for k-neighbor-graph construction and approximate nearest neighbor search.")
 (define-public python-opentsne
   (package
     (name "python-opentsne")
-    (version "0.5.2")
+    (version "0.6.1")
     (source
      (origin
-       ;; No tests in the PyPI tarball.
-       (method git-fetch)
+       (method git-fetch) ; no tests in PyPI release
        (uri (git-reference
              (url "https://github.com/pavlin-policar/openTSNE")
              (commit (string-append "v" version))))
-       (file-name (string-append name "-" version "-checkout"))
+       (file-name (git-file-name name version))
        (sha256
-        (base32 "1hl42wmafydk4fxdx05l180k3canmqw8h9r20fsqq2aq440b09gh"))))
+        (base32 "124nid27lfq1ipfjd2gkynqcmb4khisjb4r05jv42ckfkk4dbsxs"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -1097,22 +1251,22 @@ for k-neighbor-graph construction and approximate nearest neighbor search.")
          ;; Benchmarks require the 'macosko2015' data files.
          (add-after 'unpack 'delete-benchmark
            (lambda _
-             (delete-file-recursively "benchmarks")
-             #t))
+             (delete-file-recursively "benchmarks")))
+         (add-after 'unpack 'skip-test
+           (lambda _ ;; TODO: figure out why this test fails.
+             (substitute* "tests/test_correctness.py"
+               (("def test_iris\\(self\\)") "def _test_iris(self)"))))
          ;; Numba needs a writable dir to cache functions.
          (add-before 'check 'set-numba-cache-dir
            (lambda _
-             (setenv "NUMBA_CACHE_DIR" "/tmp")
-             #t)))))
+             (setenv "NUMBA_CACHE_DIR" "/tmp"))))))
     (native-inputs
-     `(("python-cython" ,python-cython)))
+     (list python-cython))
     (inputs
-     `(("fftw" ,fftw)))
+     (list fftw))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-pynndescent" ,python-pynndescent)
-       ("python-scikit-learn" ,python-scikit-learn)
-       ("python-scipy" ,python-scipy)))
+     (list python-numpy python-pynndescent python-scikit-learn
+           python-scipy))
     (home-page "https://github.com/pavlin-policar/openTSNE")
     (synopsis "Extensible, parallel implementations of t-SNE")
     (description
@@ -1124,22 +1278,17 @@ visualizing high-dimensional data sets.")
 (define-public python-scikit-rebate
   (package
     (name "python-scikit-rebate")
-    (version "0.6")
+    (version "0.62")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "skrebate" version))
               (sha256
                (base32
-                "1h7qs9gjxpzqabzhb8rmpv3jpmi5iq41kqdibg48299h94iikiw7"))))
+                "0n55ghvnv7rxqa5agq6a4892ad0ghha165b0g4ghwr9gqm6ss3dj"))))
     (build-system python-build-system)
-    ;; Pandas is only needed to run the tests.
-    (native-inputs
-     `(("python-pandas" ,python-pandas)))
+    (arguments '(#:tests? #f))          ;no tests on PyPI and no tags in repo
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-scipy" ,python-scipy)
-       ("python-scikit-learn" ,python-scikit-learn)
-       ("python-joblib" ,python-joblib)))
+     (list python-numpy python-scipy python-scikit-learn python-joblib))
     (home-page "https://epistasislab.github.io/scikit-rebate/")
     (synopsis "Relief-based feature selection algorithms for Python")
     (description "Scikit-rebate is a scikit-learn-compatible Python
@@ -1165,10 +1314,10 @@ standard feature selection algorithms.")
        (file-name (git-file-name name version))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-setuptools" ,python-setuptools) ;build fails without this
-       ("python-wheel" ,python-wheel)))
+     (list python-setuptools ;build fails without this
+           python-wheel))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (home-page "https://github.com/CyberAgent/cmaes")
     (synopsis "CMA-ES implementation for Python")
     (description "This package provides provides an implementation of the
@@ -1194,11 +1343,9 @@ Covariance Matrix Adaptation Evolution Strategy (CMA-ES) for Python.")
       (version version)
       (build-system python-build-system)
       (native-inputs
-       `(("python-nose" ,python-nose)
-         ("python-pytest" ,python-pytest)))
+       (list python-nose python-pytest))
       (propagated-inputs
-       `(("python-future" ,python-future)
-         ("python-numpy" ,python-numpy)))
+       (list python-future python-numpy))
       (arguments
        `(#:phases (modify-phases %standard-phases
                     (replace 'check
@@ -1232,13 +1379,11 @@ main intended application of Autograd is gradient-based optimization.")
                 "0jlvyn7k81dzrh9ij3zw576wbgiwmmr26rzpdxjn1dbpc3njpvzi"))
               (file-name (git-file-name name version))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-nose" ,python-nose)))
+     (list python-pytest python-nose))
     (inputs
-     `(("openmpi" ,openmpi)))
+     (list openmpi))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-scipy" ,python-scipy)))
+     (list python-numpy python-scipy))
     (arguments
      `(#:configure-flags
        '("-DUSE_MPI=ON")
@@ -1279,8 +1424,7 @@ the following advantages:
                 "04bwzk6ifgnz3fmzid8b7avxf9n5pnx9xcjm61nkjng1vv0bpj8x"))
               (file-name (git-file-name name version))))
     (inputs
-     `(("boost" ,boost)
-       ("zlib" ,zlib)))
+     (list boost zlib))
     (arguments
      `(#:configure-flags
        (list (string-append "--with-boost="
@@ -1323,17 +1467,14 @@ interactive learning.")
      `(#:tests? #f ; some test files are missing
        #:python ,python-2)) ; only Python 2.7 is supported
     (propagated-inputs
-     `(("python2-numpy" ,python2-numpy)
-       ("python2-scipy" ,python2-scipy)
-       ("python2-matplotlib" ,python2-matplotlib)
-       ("python2-pandas" ,python2-pandas)
-       ("python2-scikit-learn" ,python2-scikit-learn)
-       ("python2-pysnptools" ,python2-pysnptools)))
+     (list python2-numpy
+           python2-scipy
+           python2-matplotlib
+           python2-pandas
+           python2-scikit-learn
+           python2-pysnptools))
     (native-inputs
-     `(("unzip" ,unzip)
-       ("python2-cython" ,python2-cython)
-       ("python2-mock" ,python2-mock)
-       ("python2-nose" ,python2-nose)))
+     (list unzip python2-cython python2-mock python2-nose))
     (home-page "http://research.microsoft.com/en-us/um/redmond/projects/mscompbio/fastlmm/")
     (synopsis "Perform genome-wide association studies on large data sets")
     (description
@@ -1372,20 +1513,20 @@ association studies (GWAS) on extremely large data sets.")
                                            " and not test_quadratic1"
                                            " and not test_twoarms"))))))))
     (propagated-inputs
-     `(("python-cloudpickle" ,python-cloudpickle)
-       ("python-future" ,python-future)
-       ("python-networkx" ,python-networkx)
-       ("python-numpy" ,python-numpy)
-       ("python-scipy" ,python-scipy)
-       ("python-six" ,python-six)
-       ("python-tqdm" ,python-tqdm)))
+     (list python-cloudpickle
+           python-future
+           python-networkx
+           python-numpy
+           python-scipy
+           python-six
+           python-tqdm))
     (native-inputs
-     `(("python-black" ,python-black)
-       ("python-ipython" ,python-ipython)
-       ("python-ipyparallel" ,python-ipyparallel)
-       ("python-nose" ,python-nose)
-       ("python-pymongo" ,python-pymongo)
-       ("python-pytest" ,python-pytest)))
+     (list python-black
+           python-ipython
+           python-ipyparallel
+           python-nose
+           python-pymongo
+           python-pytest))
     (home-page "https://hyperopt.github.io/hyperopt/")
     (synopsis "Library for hyperparameter optimization")
     (description "Hyperopt is a Python library for serial and parallel
@@ -1484,21 +1625,21 @@ discrete, and conditional dimensions.")
                                (string-append lib "/gstreamer-1.0"))
                  #t))))))
       (inputs
-       `(("alsa-lib" ,alsa-lib)
-         ("gfortran" ,gfortran "lib")
-         ("glib" ,glib)
-         ("gstreamer" ,gstreamer)
-         ("jack" ,jack-1)
-         ("openblas" ,openblas)
-         ("openfst" ,openfst)
-         ("portaudio" ,portaudio)
-         ("python" ,python)))
+       (list alsa-lib
+             `(,gfortran "lib")
+             glib
+             gstreamer
+             jack-1
+             openblas
+             openfst
+             portaudio
+             python))
       (native-inputs
-       `(("glib" ,glib "bin")             ; glib-genmarshal
-         ("grep" ,grep)
-         ("sed" ,sed)
-         ("pkg-config" ,pkg-config)
-         ("which" ,which)))
+       (list `(,glib "bin") ; glib-genmarshal
+             grep
+             sed
+             pkg-config
+             which))
       (home-page "https://kaldi-asr.org/")
       (synopsis "Speech recognition toolkit")
       (description "Kaldi is an extensible toolkit for speech recognition
@@ -1558,11 +1699,7 @@ written in C++.")
                  (install-file "libgstkaldinnet2onlinedecoder.so" lib)
                  #t))))))
       (inputs
-       `(("glib" ,glib)
-         ("gstreamer" ,gstreamer)
-         ("jansson" ,jansson)
-         ("openfst" ,openfst)
-         ("kaldi" ,kaldi)))
+       (list glib gstreamer jansson openfst kaldi))
       (native-inputs
        `(("bash" ,bash)
          ("glib:bin" ,glib "bin")       ; glib-genmarshal
@@ -1642,7 +1779,7 @@ automatically.")
                  (let* ((server (string-append bin "/kaldi-gst-server"))
                         (client (string-append bin "/kaldi-gst-client"))
                         (worker (string-append bin "/kaldi-gst-worker"))
-                        (PYTHONPATH (getenv "PYTHONPATH"))
+                        (PYTHONPATH (getenv "GUIX_PYTHONPATH"))
                         (GST_PLUGIN_PATH (string-append
                                           (assoc-ref inputs "gst-kaldi-nnet2-online")
                                           "/lib/gstreamer-1.0:${GST_PLUGIN_PATH}"))
@@ -1651,7 +1788,7 @@ automatically.")
                                   (lambda _
                                     (format #t
                                             "#!~a
-export PYTHONPATH=~a
+export GUIX_PYTHONPATH=~a
 export GST_PLUGIN_PATH=~a
 exec ~a ~a/~a \"$@\"~%"
                                             (which "bash") PYTHONPATH GST_PLUGIN_PATH
@@ -1695,7 +1832,9 @@ Python.")
        (file-name (string-append "tensorflow-" version "-checkout"))
        (sha256
         (base32
-         "0a9kwha395g3wgxfwln5j8vn9nkspmd75xldrlqdq540w996g8xa"))))
+         "0a9kwha395g3wgxfwln5j8vn9nkspmd75xldrlqdq540w996g8xa"))
+       (patches
+        (search-patches "tensorflow-c-api-fix.patch"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f                      ; no "check" target
@@ -1755,9 +1894,9 @@ Python.")
            ;; SOURCE_DATE_EPOCH is respected, which we set to some time in
            ;; 1980.
            (lambda _ (setenv "SOURCE_DATE_EPOCH" "315532800") #t))
-         ;; See https://github.com/tensorflow/tensorflow/issues/20517#issuecomment-406373913
-         (add-after 'unpack 'python3.7-compatibility
+         (add-after 'unpack 'python3.9-compatibility
            (lambda _
+             ;; See https://github.com/tensorflow/tensorflow/issues/20517#issuecomment-406373913
              (substitute* '("tensorflow/python/eager/pywrap_tfe_src.cc"
                             "tensorflow/python/lib/core/ndarray_tensor.cc"
                             "tensorflow/python/lib/core/py_func.cc")
@@ -1775,9 +1914,17 @@ Python.")
              ;; https://github.com/tensorflow/tensorflow/issues/34197
              (substitute* (find-files "tensorflow/python" ".*\\.cc$")
                (("(nullptr,)(\\ +/. tp_print)" _ _ tp_print)
-                (string-append "NULL,   " tp_print)))))
-         (add-after 'python3.7-compatibility 'chdir
-           (lambda _ (chdir "tensorflow/contrib/cmake") #t))
+                (string-append "NULL,   " tp_print)))
+
+             ;; Fix the build with numpy >= 1.19.
+             ;; Suggested in https://github.com/tensorflow/tensorflow/issues/41086#issuecomment-656833081
+             (substitute* "tensorflow/python/lib/core/bfloat16.cc"
+               (("void BinaryUFunc\\(char\\*\\* args, npy_intp\\* dimensions, npy_intp\\* steps,")
+                "void BinaryUFunc(char** args, npy_intp const* dimensions, npy_intp const* steps,")
+               (("void CompareUFunc\\(char\\*\\* args, npy_intp\\* dimensions, npy_intp\\* steps,")
+                "void CompareUFunc(char** args, npy_intp const* dimensions, npy_intp const* steps,"))))
+         (add-after 'python3.9-compatibility 'chdir
+           (lambda _ (chdir "tensorflow/contrib/cmake")))
          (add-after 'chdir 'disable-downloads
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* (find-files "external" "\\.cmake$")
@@ -1792,36 +1939,31 @@ Python.")
                  ;; Sqlite
                  (("include\\(sqlite\\)") "")
                  (("\\$\\{sqlite_STATIC_LIBRARIES\\}")
-                  (string-append (assoc-ref inputs "sqlite")
-                                 "/lib/libsqlite3.so"))
+                  (search-input-file inputs "/lib/libsqlite3.so"))
                  (("sqlite_copy_headers_to_destination") "")
 
                  ;; PNG
                  (("include\\(png\\)") "")
                  (("\\$\\{png_STATIC_LIBRARIES\\}")
-                  (string-append (assoc-ref inputs "libpng")
-                                 "/lib/libpng16.so"))
+                  (search-input-file inputs "/lib/libpng16.so"))
                  (("png_copy_headers_to_destination") "")
 
                  ;; JPEG
                  (("include\\(jpeg\\)") "")
                  (("\\$\\{jpeg_STATIC_LIBRARIES\\}")
-                  (string-append (assoc-ref inputs "libjpeg")
-                                 "/lib/libjpeg.so"))
+                  (search-input-file inputs "/lib/libjpeg.so"))
                  (("jpeg_copy_headers_to_destination") "")
 
                  ;; GIF
                  (("include\\(gif\\)") "")
                  (("\\$\\{gif_STATIC_LIBRARIES\\}")
-                  (string-append (assoc-ref inputs "giflib")
-                                 "/lib/libgif.so"))
+                  (search-input-file inputs "/lib/libgif.so"))
                  (("gif_copy_headers_to_destination") "")
 
                  ;; lmdb
                  (("include\\(lmdb\\)") "")
                  (("\\$\\{lmdb_STATIC_LIBRARIES\\}")
-                  (string-append (assoc-ref inputs "lmdb")
-                                 "/lib/liblmdb.so"))
+                  (search-input-file inputs "/lib/liblmdb.so"))
                  (("lmdb_copy_headers_to_destination") "")
 
                  ;; Protobuf
@@ -1875,7 +2017,7 @@ set(eigen_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/external/eigen_archive "
              ;; This directory is a dependency of many targets.
              (mkdir-p "protobuf")))
          (add-after 'configure 'unpack-third-party-sources
-           (lambda* (#:key inputs #:allow-other-keys)
+           (lambda* (#:key inputs outputs #:allow-other-keys)
              ;; This is needed to configure bundled packages properly.
              (setenv "CONFIG_SHELL" (which "bash"))
              (for-each
@@ -1913,20 +2055,20 @@ set(eigen_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/external/eigen_archive "
                     "re2"))
 
              (rename-file "../build/cub/src/cub/cub-1.8.0/"
-                          "../build/cub/src/cub/cub/")))
+                          "../build/cub/src/cub/cub/")
+
+             (setenv "LDFLAGS"
+                     (string-append "-Wl,-rpath="
+                                    (assoc-ref outputs "out") "/lib"))))
          (add-after 'unpack 'fix-python-build
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (mkdir-p "protobuf-src")
              (invoke "tar" "xf" (assoc-ref inputs "protobuf:src")
                      "-C" "protobuf-src" "--strip-components=1")
              (mkdir-p "eigen-src")
-             (invoke "tar" "xf" (assoc-ref inputs "eigen:src")
-                     "-C" "eigen-src" "--strip-components=1")
+             (copy-recursively (assoc-ref inputs "eigen:src") "eigen-src")
 
              (substitute* "tensorflow/contrib/cmake/tf_python.cmake"
-               ;; Ensure that all Python dependencies can be found at build time.
-               (("PYTHONPATH=\\$\\{CMAKE_CURRENT_BINARY_DIR\\}/tf_python" m)
-                (string-append m ":" (getenv "PYTHONPATH")))
                ;; Take protobuf source files from our source package.
                (("\\$\\{CMAKE_CURRENT_BINARY_DIR\\}/protobuf/src/protobuf/src/google")
                 (string-append (getcwd) "/protobuf-src/src/google")))
@@ -1938,7 +2080,7 @@ set(eigen_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/external/eigen_archive "
                 (string-append (getcwd) "/eigen-src/"))
                ;; Take Eigen headers from our own package.
                (("\\$\\{CMAKE_CURRENT_BINARY_DIR\\}/external/eigen_archive")
-                (string-append (assoc-ref inputs "eigen") "/include/eigen3")))
+                (search-input-directory inputs "/include/eigen3")))
 
              ;; Correct the RUNPATH of ops libraries generated for Python.
              ;; TODO: this doesn't work :(
@@ -1953,11 +2095,21 @@ set(eigen_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/external/eigen_archive "
 COMPILE_FLAGS ${target_compile_flags} \
 INSTALL_RPATH_USE_LINK_PATH TRUE \
 INSTALL_RPATH " (assoc-ref outputs "out") "/lib)\n")))))
-         (add-after 'build 'build-pip-package
+         (add-after 'unpack 'patch-cmake-file-to-install-c-headers
+           (lambda _
+             (substitute* "tensorflow/contrib/cmake/tf_c.cmake"
+               (("if\\(tensorflow_BUILD_PYTHON_BINDINGS" m)
+                (string-append
+                 "install(DIRECTORY ${tensorflow_source_dir}/tensorflow/c/ \
+DESTINATION include/tensorflow/c FILES_MATCHING PATTERN \"*.h\")\n" m)))))
+         (add-after 'build 'build-c-bindings
+           (lambda* (#:key outputs parallel-build? #:allow-other-keys)
+             (invoke "make" "-j" (if parallel-build?
+                                     (number->string (parallel-job-count))
+                                     "1")
+                     "tf_c")))
+         (add-after 'install 'build-pip-package
            (lambda* (#:key outputs parallel-build? #:allow-other-keys)
-             (setenv "LDFLAGS"
-                     (string-append "-Wl,-rpath="
-                                    (assoc-ref outputs "out") "/lib"))
              (invoke "make" "-j" (if parallel-build?
                                      (number->string (parallel-job-count))
                                      "1")
@@ -2338,7 +2490,7 @@ learning libraries.")
 (define-public xgboost
   (package
     (name "xgboost")
-    (version "1.4.2")
+    (version "1.5.2")
     (source
      (origin
        (method git-fetch)
@@ -2348,7 +2500,7 @@ learning libraries.")
        (file-name (git-file-name name version))
        (patches (search-patches "xgboost-use-system-dmlc-core.patch"))
        (sha256
-        (base32 "00liz816ahk9zj3jv3m2fqwlf6xxfbgvpmpl72iklx32vl192w5d"))))
+        (base32 "0qx04y7cz8z7qv6bk9q7d7ba9b7xzj53l83l2x9ykdwhzacc3dn0"))))
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags (list "-DGOOGLE_TEST=ON")))
@@ -2356,7 +2508,7 @@ learning libraries.")
      `(("googletest" ,googletest)
        ("python" ,python-wrapper)))
     (inputs
-     `(("dmlc-core" ,dmlc-core)))
+     (list dmlc-core))
     (home-page "https://xgboost.ai/")
     (synopsis "Gradient boosting (GBDT, GBRT or GBM) library")
     (description
@@ -2421,19 +2573,14 @@ in a fast and accurate way.")
                         " and not test_cv_no_shuffle"
                         " and not test_cv"
                         " and not test_training"
-                        ;; FIXME: May pass in the next version.
-                        " and not test_pandas"
                         ;; "'['./runexp.sh']' returned non-zero exit status 1"
                         " and not test_cli_binary_classification"))))))))
     (native-inputs
-     `(("python-pandas" ,python-pandas)
-       ("python-pytest" ,python-pytest)
-       ("python-scikit-learn" ,python-scikit-learn)))
+     (list python-pandas python-pytest python-scikit-learn))
     (inputs
-     `(("xgboost" ,xgboost)))
+     (list xgboost))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-scipy" ,python-scipy)))
+     (list python-numpy python-scipy))
     (synopsis "Python interface for the XGBoost library")))
 
 (define-public python-iml
@@ -2449,12 +2596,9 @@ in a fast and accurate way.")
          "1k8szlpm19rcwcxdny9qdm3gmaqq8akb4xlvrzyz8c2d679aak6l"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("ipython" ,python-ipython)
-       ("numpy" ,python-numpy)
-       ("pandas" ,python-pandas)
-       ("scipy" ,python-scipy)))
+     (list python-ipython python-numpy python-pandas python-scipy))
     (native-inputs
-     `(("nose" ,python-nose)))
+     (list python-nose))
     (home-page "https://github.com/interpretable-ml/iml")
     (synopsis "Interpretable Machine Learning (iML) package")
     (description "Interpretable ML (iML) is a set of data type objects,
@@ -2479,13 +2623,10 @@ project, and it will potentially also do the same for the Lime project.")
     ;; The tests require Keras, but this package is needed to build Keras.
     (arguments '(#:tests? #f))
     (propagated-inputs
-     `(("python-h5py" ,python-h5py)
-       ("python-numpy" ,python-numpy)))
+     (list python-h5py python-numpy))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-pep8" ,python-pytest-pep8)
-       ("python-pytest-xdist" ,python-pytest-xdist)))
+     (list python-pytest python-pytest-cov python-pytest-pep8
+           python-pytest-xdist))
     (home-page "https://github.com/keras-team/keras-applications")
     (synopsis "Reference implementations of popular deep learning models")
     (description
@@ -2506,15 +2647,14 @@ models for use with the Keras deep learning framework.")
          "1r98nm4k1svsqjyaqkfk23i31bl1kcfcyp7094yyj3c43phfp3as"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-six" ,python-six)))
+     (list python-numpy python-six))
     (native-inputs
-     `(("python-pandas" ,python-pandas)
-       ("python-pillow" ,python-pillow)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-xdist" ,python-pytest-xdist)
-       ("tensorflow" ,tensorflow)))
+     (list python-pandas
+           python-pillow
+           python-pytest
+           python-pytest-cov
+           python-pytest-xdist
+           tensorflow))
     (home-page "https://github.com/keras-team/keras-preprocessing/")
     (synopsis "Data preprocessing and augmentation for deep learning models")
     (description
@@ -2570,25 +2710,25 @@ with image data, text data, and sequence data.")
                         ;; recent versions.
                         "and not test_stateful_metrics"))))))))
     (propagated-inputs
-     `(("python-h5py" ,python-h5py)
-       ("python-keras-applications" ,python-keras-applications)
-       ("python-keras-preprocessing" ,python-keras-preprocessing)
-       ("python-numpy" ,python-numpy)
-       ("python-pydot" ,python-pydot)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-scipy" ,python-scipy)
-       ("python-six" ,python-six)
-       ("tensorflow" ,tensorflow)
-       ("graphviz" ,graphviz)))
+     (list python-h5py
+           python-keras-applications
+           python-keras-preprocessing
+           python-numpy
+           python-pydot
+           python-pyyaml
+           python-scipy
+           python-six
+           tensorflow
+           graphviz))
     (native-inputs
-     `(("python-pandas" ,python-pandas)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-pep8" ,python-pytest-pep8)
-       ("python-pytest-timeout" ,python-pytest-timeout)
-       ("python-pytest-xdist" ,python-pytest-xdist)
-       ("python-sphinx" ,python-sphinx)
-       ("python-requests" ,python-requests)))
+     (list python-pandas
+           python-pytest
+           python-pytest-cov
+           python-pytest-pep8
+           python-pytest-timeout
+           python-pytest-xdist
+           python-sphinx
+           python-requests))
     (home-page "https://github.com/keras-team/keras")
     (synopsis "High-level deep learning framework")
     (description "Keras is a high-level neural networks API, written in Python
@@ -2623,9 +2763,9 @@ that:
            "1crmqgybzkgkpbmcx16912gsl5qsj49swa0ikx6mhqgph0chrh11"))))
       (build-system cmake-build-system)
       (native-inputs
-       `(("googletest" ,googletest)))
+       (list googletest))
       (inputs
-       `(("openssl" ,openssl)))
+       (list openssl))
       (arguments
        `(#:configure-flags '("-DBUILD_TEST=1")
          #:phases
@@ -2655,13 +2795,9 @@ These include a barrier, broadcast, and allreduce.")
          "02ada2yy6km6zgk2836kg1c97yrcpalvan34p8c57446finnpki1"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-joblib" ,python-joblib)
-       ("python-nose" ,python-nose)))
+     (list python-joblib python-nose))
     (propagated-inputs
-     `(("python-numba" ,python-numba)
-       ("python-numpy" ,python-numpy)
-       ("python-scikit-learn" ,python-scikit-learn)
-       ("python-scipy" ,python-scipy)))
+     (list python-numba python-numpy python-scikit-learn python-scipy))
     (home-page "https://github.com/lmcinnes/umap")
     (synopsis
      "Uniform Manifold Approximation and Projection")
@@ -2710,16 +2846,14 @@ instead it provides low-level performance primitives leveraged in leading deep
 learning frameworks, such as PyTorch, Caffe2, MXNet, tiny-dnn, Caffe, Torch,
 and Darknet.")
       (inputs
-       `(("cpuinfo" ,cpuinfo)
-         ("fp16" ,fp16)
-         ("fxdiv" ,fxdiv)
-         ("psimd" ,psimd)
-         ("pthreadpool" ,pthreadpool)
-         ("googletest" ,googletest)))
+       (list cpuinfo
+             fp16
+             fxdiv
+             psimd
+             pthreadpool
+             googletest))
       (native-inputs
-       `(("python" ,python)
-         ("python-peachpy" ,python-peachpy)
-         ("python-six" ,python-six)))
+       (list python python-peachpy python-six))
       (license license:bsd-2))))
 
 (define-public xnnpack
@@ -2753,13 +2887,13 @@ and Darknet.")
          ;;   another target with the same name already exists.
          #:tests? #f))
       (inputs
-       `(("cpuinfo" ,cpuinfo)
-         ("pthreadpool" ,pthreadpool)
-         ("googletest" ,googletest)
-         ("googlebenchmark" ,googlebenchmark)
-         ("fxdiv" ,fxdiv)
-         ("fp16" ,fp16)
-         ("psimd" ,psimd)))
+       (list cpuinfo
+             pthreadpool
+             googletest
+             googlebenchmark
+             fxdiv
+             fp16
+             psimd))
       (synopsis "Optimized floating-point neural network inference operators")
       (description
        "XNNPACK is a highly optimized library of floating-point neural network
@@ -2773,7 +2907,7 @@ TensorFlow.js, PyTorch, and MediaPipe.")
 (define-public python-pytorch
   (package
     (name "python-pytorch")
-    (version "1.9.0")
+    (version "1.10.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -2783,7 +2917,7 @@ TensorFlow.js, PyTorch, and MediaPipe.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0cznsh68hwk5761gv7iijb4g6jgjpvs3bbixwpzzmkbkbn2q96c1"))
+                "1ihsjw48qqbikmhxxn17bcdvk2zsjabvkq61q6pvj7dzvrdpkb60"))
               (patches (search-patches "python-pytorch-system-libraries.patch"
                                        "python-pytorch-runpath.patch"))
               (modules '((guix build utils)))
@@ -2834,13 +2968,10 @@ TensorFlow.js, PyTorch, and MediaPipe.")
                     (lambda* (#:key inputs outputs tests? #:allow-other-keys)
                       ;; Run the test suite following the instructions in
                       ;; 'CONTRIBUTING.md'.  XXX: Unfortunately this doesn't
-                      ;; work, unless you set PYTHONPATH presumably.
+                      ;; work, unless you set GUIX_PYTHONPATH presumably.
                       (when tests?
-                        (let ((python-site (site-packages inputs outputs)))
-                          (setenv "PYTHONPATH"
-                                  (string-append python-site ":"
-                                                 (getenv "PYTHONPATH")))
-                          (invoke "python" "test/run_test.py")))))
+                        (add-installed-pythonpath inputs outputs)
+                        (invoke "python" "test/run_test.py"))))
                   (add-after 'install 'remove-test-executables
                     (lambda* (#:key inputs outputs #:allow-other-keys)
                       ;; Remove test executables, but keep other executables
@@ -2853,39 +2984,40 @@ TensorFlow.js, PyTorch, and MediaPipe.")
 
        ;; XXX: Tests attempt to download data such as
        ;; <https://raw.githubusercontent.com/pytorch/test-infra/master/stats/slow-tests.json>.
+       ;; We're also missing some Python modules, such as expecttest.
        #:tests? #f))
     (native-inputs
-     `(("cmake" ,cmake)
-       ("ninja" ,ninja)))
+     (list cmake ninja))
     (inputs
-     `(("eigen" ,eigen)
-       ;; ("fmt" ,fmt)
-       ("fp16" ,fp16)
-       ("gemmlowp" ,gemmlowp)
-       ("googletest" ,googletest)
-       ("googlebenchmark" ,googlebenchmark)
-       ("gloo" ,gloo)
-       ("nnpack" ,nnpack)
-       ("openblas" ,openblas)
-       ("openmpi" ,openmpi)
-       ("pthreadpool" ,pthreadpool)
-       ("protobuf" ,protobuf)
-       ("pybind11" ,pybind11)
-       ("sleef" ,sleef)
-       ("xnnpack" ,xnnpack)
-       ("zstd" ,zstd)))
+     (list eigen
+           ;; ("fmt" ,fmt)
+           fp16
+           gemmlowp
+           googletest
+           googlebenchmark
+           gloo
+           nnpack
+           openblas
+           openmpi
+           pthreadpool
+           protobuf
+           pybind11
+           sleef
+           xnnpack
+           zstd))
     (propagated-inputs
-     `(("python-astunparse" ,python-astunparse)
-       ("python-numpy" ,python-numpy)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-cffi" ,python-cffi)
-       ("python-typing-extensions" ,python-typing-extensions)
-       ("python-future" ,python-future)
-       ("python-six" ,python-six)
-       ("python-requests" ,python-requests)
-       ("onnx" ,onnx)                       ;propagated for its Python modules
-       ("onnx-optimizer" ,onnx-optimizer)
-       ("cpuinfo" ,cpuinfo)))
+     (list python-astunparse
+           python-click
+           python-numpy
+           python-pyyaml
+           python-cffi
+           python-typing-extensions
+           python-future
+           python-six
+           python-requests
+           onnx ;propagated for its Python modules
+           onnx-optimizer
+           cpuinfo))
     (home-page "https://pytorch.org/")
     (synopsis "Python library for tensor computation and deep neural networks")
     (description
@@ -2924,13 +3056,10 @@ Note: currently this package does not provide GPU support.")
                (with-directory-excursion (string-append (assoc-ref outputs "out") "/lib")
                  (invoke "python" "-m" "pytest"))))))))
     (propagated-inputs
-     `(("python-cython" ,python-cython)
-       ("python-numpy" ,python-numpy)
-       ("python-scikit-learn" ,python-scikit-learn)
-       ("python-scipy" ,python-scipy)
-       ("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-cython python-numpy python-scikit-learn python-scipy
+           python-setuptools-scm))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/hmmlearn/hmmlearn")
     (synopsis "Hidden Markov Models with scikit-learn like API")
     (description
diff --git a/gnu/packages/magic-wormhole.scm b/gnu/packages/magic-wormhole.scm
index 465e6aced6..a498eb8117 100644
--- a/gnu/packages/magic-wormhole.scm
+++ b/gnu/packages/magic-wormhole.scm
@@ -48,15 +48,15 @@
               (("test_log_http") "disabled_test_log_http"))
             #t)))))
     (native-inputs
-     `(("python-mock" ,python-mock)))
+     (list python-mock))
     (propagated-inputs
-     `(("python-attrs" ,python-attrs)
-       ("python-autobahn" ,python-autobahn)
-       ("python-idna" ,python-idna)
-       ("python-service-identity" ,python-service-identity)
-       ("python-six" ,python-six)
-       ("python-treq" ,python-treq)
-       ("python-twisted" ,python-twisted)))
+     (list python-attrs
+           python-autobahn
+           python-idna
+           python-service-identity
+           python-six
+           python-treq
+           python-twisted))
     (home-page "https://github.com/warner/magic-wormhole-mailbox-server")
     (synopsis "Magic-Wormhole central mailbox server")
     (description "This package provides the main server that Magic-Wormhole
@@ -89,11 +89,9 @@ connection, or through a transit-relay.")
                          (find-files "docs/"))
                #t))))))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pyflakes" ,python-pyflakes)
-       ("python-tox" ,python-tox)))
+     (list python-mock python-pyflakes python-tox))
     (propagated-inputs
-     `(("python-twisted" ,python-twisted)))
+     (list python-twisted))
     (home-page
       "https://github.com/warner/magic-wormhole-transit-relay")
     (synopsis "Magic-Wormhole relay server")
@@ -128,22 +126,22 @@ together, allowing them to pretend they have a direct connection.")
                (install-file "docs/wormhole.1" man))
              #t)))))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ;; XXX These are required for the test suite but end up being referenced
-       ;; by the built package.
-       ;; https://bugs.gnu.org/25235
-       ("magic-wormhole-mailbox-server" ,magic-wormhole-mailbox-server)
-       ("magic-wormhole-transit-relay" ,magic-wormhole-transit-relay)))
+     (list python-mock
+           ;; XXX These are required for the test suite but end up being referenced
+           ;; by the built package.
+           ;; https://bugs.gnu.org/25235
+           magic-wormhole-mailbox-server
+           magic-wormhole-transit-relay))
     (propagated-inputs
-     `(("python-autobahn" ,python-autobahn)
-       ("python-click" ,python-click)
-       ("python-hkdf" ,python-hkdf)
-       ("python-humanize" ,python-humanize)
-       ("python-pynacl" ,python-pynacl)
-       ("python-spake2" ,python-spake2)
-       ("python-tqdm" ,python-tqdm)
-       ("python-twisted" ,python-twisted)
-       ("python-txtorcon" ,python-txtorcon)))
+     (list python-autobahn
+           python-click
+           python-hkdf
+           python-humanize
+           python-pynacl
+           python-spake2
+           python-tqdm
+           python-twisted
+           python-txtorcon))
     (home-page "https://github.com/warner/magic-wormhole")
     (synopsis "Securely transfer data between computers")
     (description "Magic-Wormhole is a library and a command-line tool named
diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm
index e1e56c33d0..d601a6e4bc 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, 2021 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Christine Lemmer-Webber <cwebber@dustycloud.org>
 ;;; Copyright © 2016 Al McElrath <hello@yrns.org>
 ;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Leo Famulari <leo@famulari.name>
@@ -17,18 +17,18 @@
 ;;; Copyright © 2016, 2017 Troy Sankey <sankeytms@gmail.com>
 ;;; Copyright © 2016, 2017, 2018 Nikita <nikita@n0.is>
 ;;; Copyright © 2016 Clément Lassieur <clement@lassieur.org>
-;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Arun Isaac <arunisaac@systemreboot.net>
+;;; Copyright © 2016–2022 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2016 John Darrington <jmd@gnu.org>
 ;;; Copyright © 2016, 2018 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be>
 ;;; Copyright © 2017 Kyle Meyer <kyle@kyleam.com>
-;;; Copyright © 2017–2021 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2017–2022 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017, 2018, 2020 Rene Saavedra <pacoon@protonmail.com>
 ;;; 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, 2021 Ricardo Wurmus <rekado@elephly.net>
-;;; Copyright © 2019, 2020 Tanguy Le Carrour <tanguy@bioneland.org>
+;;; Copyright © 2019, 2020, 2021 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>
@@ -40,8 +40,11 @@
 ;;; 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>
+;;; Copyright © 2021 Morgan Smith <Morgan.J.Smith@outlook.com>
+;;; Copyright © 2021 Philip McGrath <philip@philipmcgrath.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -59,6 +62,7 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages mail)
+  #:use-module (guix gexp)
   #:use-module (guix utils)
   #:use-module (gnu packages)
   #:use-module (gnu packages admin)
@@ -106,6 +110,7 @@
   #:use-module (gnu packages language)
   #:use-module (gnu packages libcanberra)
   #:use-module (gnu packages libevent)
+  #:use-module (gnu packages libffi)
   #:use-module (gnu packages libidn)
   #:use-module (gnu packages libunistring)
   #:use-module (gnu packages libunwind)
@@ -211,8 +216,7 @@
        ("automake" ,automake)
        ("gettext" ,gettext-minimal)))
     (inputs
-     `(("ncurses" ,ncurses)
-       ("readline" ,readline)))
+     (list ncurses readline))
     (home-page "https://abook.sourceforge.io/")
     (synopsis "Text-based address book")
     (description
@@ -236,18 +240,15 @@ mail client.")
          "0dvm6acl32dv8bixx9z50gzwfp6kj4kxnn1j3dcwjlp7sasjp41s"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("automake" ,automake)
-       ("autoconf" ,autoconf)
-       ("gettext" ,gettext-minimal)
-       ("m4" ,m4)))                     ;for the test suite
+     (list automake autoconf gettext-minimal m4))                     ;for the test suite
     (inputs
-     `(("gdbm" ,gdbm)
-       ("gnutls" ,gnutls)
-       ("gpgme" ,gpgme)
-       ("gsasl" ,gsasl)
-       ("guile" ,guile-3.0)
-       ("libgcrypt" ,libgcrypt)         ;gnutls support depends on libgcrypt
-       ("libgpg-error" ,libgpg-error)))
+     (list gdbm
+           gnutls
+           gpgme
+           gsasl
+           guile-3.0
+           libgcrypt ;gnutls support depends on libgcrypt
+           libgpg-error))
     (outputs '("out" "debug"))
     (synopsis "SMTP message submission daemon")
     (description "Anubis is a daemon that sits between the Mail User
@@ -261,88 +262,88 @@ example, modify the message headers or body, or encrypt or sign the message.")
 (define-public mailutils
   (package
     (name "mailutils")
-    (version "3.13")
+    (version "3.14")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnu/mailutils/mailutils-"
                                  version ".tar.xz"))
              (sha256
               (base32
-               "1iwl82d6aa2acsdxbqh1s5xx44sg83b4yxqik408m1s9rcfrf86r"))
+               "0fbi2b144mgblq9qhdyhj9855mbglzr8fr23rnps8icbxa7v7if0"))
              (patches
               (search-patches "mailutils-variable-lookup.patch"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-before 'check 'prepare-test-suite
-           (lambda _
-             ;; Use the right file name for `cat'.
-             (substitute* "testsuite/lib/mailutils.exp"
-               (("/bin/cat")
-                (which "cat")))
-
-             ;; Tests try to invoke 'mda' such that it looks up the
-             ;; 'root' user, which does not exist in the build
-             ;; environment.
-             (substitute* '("mda/mda/tests/testsuite"
-                            "mda/lmtpd/tests/testsuite")
-               (("root <")         "nobody <")
-               (("spool/root")     "spool/nobody")
-               (("root@localhost") "nobody@localhost"))
-
-             ;; The 'pipeact.at' tests generate a shell script; make
-             ;; sure it uses the right shell.
-             (substitute* '("sieve/tests/testsuite"
-                            "mh/tests/testsuite"
-                            "libmailutils/tests/lock.at")
-               (("#! ?/bin/sh")
-                (string-append "#!" (which "sh"))))
-
-             (substitute* "mh/tests/testsuite"
-               (("moreproc: /bin/cat")
-                (string-append "moreproc: " (which "cat"))))
-
-             ;; XXX: The comsatd tests rely on being able to open
-             ;; /dev/tty, but that gives ENODEV in the build
-             ;; environment.  Thus, ignore test failures here.
-             (substitute* "comsat/tests/Makefile.in"
-               (("\\$\\(SHELL\\) \\$\\(TESTSUITE\\)" all)
-                (string-append "-" all)))
-
-             ;; XXX: The ‘moderator: program discard’ test does not specify
-             ;; an explicit From: but does expect an exact match.  But why are
-             ;; all other tests unaffected?
-             (substitute* "sieve/tests/testsuite"
-               (("gray@")
-                "nixbld@"))
-
-             ;; 'frm' tests expect write access to $HOME.
-             (setenv "HOME" (getcwd))
-
-             ;; Avoid the message "I'm going to create the standard MH path
-             ;; for you", which would lead to one test failure (when diffing
-             ;; stdout of 'fmtcheck'.)
-             (call-with-output-file ".mh_profile"
-               (lambda (port)
-                 (format port "Path: ~a/Mail-for-tests~%"
-                         (getcwd))))
-
-             (substitute* "imap4d/tests/testclient.c"
-               (("\"/bin/sh\"")
-                (string-append "\"" (which "sh") "\""))))))
-       #:configure-flags
-       (list "--sysconfdir=/etc"
-
-             ;; Add "/X.Y" to the installation directory.
-             (string-append "--with-guile-site-dir="
-                            (assoc-ref %outputs "out")
-                            "/share/guile/site/"
-                            ,(match (assoc "guile"
-                                           (package-inputs this-package))
-                               (("guile" guile)
-                                (version-major+minor
-                                 (package-version guile))))))))
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-before 'check 'prepare-test-suite
+                 (lambda _
+                   ;; Use the right file name for `cat'.
+                   (substitute* "testsuite/lib/mailutils.exp"
+                     (("/bin/cat")
+                      (which "cat")))
+
+                   ;; Tests try to invoke 'mda' such that it looks up the
+                   ;; 'root' user, which does not exist in the build
+                   ;; environment.
+                   (substitute* '("mda/mda/tests/testsuite"
+                                  "mda/lmtpd/tests/testsuite")
+                     (("root <")         "nobody <")
+                     (("spool/root")     "spool/nobody")
+                     (("root@localhost") "nobody@localhost"))
+
+                   ;; The 'pipeact.at' tests generate a shell script; make
+                   ;; sure it uses the right shell.
+                   (substitute* '("sieve/tests/testsuite"
+                                  "mh/tests/testsuite"
+                                  "libmailutils/tests/lock.at")
+                     (("#! ?/bin/sh")
+                      (string-append "#!" (which "sh"))))
+
+                   (substitute* "mh/tests/testsuite"
+                     (("moreproc: /bin/cat")
+                      (string-append "moreproc: " (which "cat"))))
+
+                   ;; XXX: The comsatd tests rely on being able to open
+                   ;; /dev/tty, but that gives ENODEV in the build
+                   ;; environment.  Thus, ignore test failures here.
+                   (substitute* "comsat/tests/Makefile.in"
+                     (("\\$\\(SHELL\\) \\$\\(TESTSUITE\\)" all)
+                      (string-append "-" all)))
+
+                   ;; XXX: The ‘moderator: program discard’ test does not
+                   ;; specify an explicit From: but does expect an exact
+                   ;; match.  But why are all other tests unaffected?
+                   (substitute* "sieve/tests/testsuite"
+                     (("gray@")
+                      "nixbld@"))
+
+                   ;; 'frm' tests expect write access to $HOME.
+                   (setenv "HOME" (getcwd))
+
+                   ;; Avoid the message "I'm going to create the standard MH
+                   ;; path for you", which would lead to one test failure
+                   ;; (when diffing stdout of 'fmtcheck'.)
+                   (call-with-output-file ".mh_profile"
+                     (lambda (port)
+                       (format port "Path: ~a/Mail-for-tests~%"
+                               (getcwd))))
+
+                   (substitute* "imap4d/tests/testclient.c"
+                     (("\"/bin/sh\"")
+                      (string-append "\"" (which "sh") "\""))))))
+           #:configure-flags
+           #~(list "--sysconfdir=/etc"
+
+                   ;; Add "/X.Y" to the installation directory.
+                   (string-append "--with-guile-site-dir="
+                                  (assoc-ref %outputs "out")
+                                  "/share/guile/site/"
+                                  #$(match (assoc "guile"
+                                                  (package-inputs this-package))
+                                      (("guile" guile)
+                                       (version-major+minor
+                                        (package-version guile))))))))
     (native-inputs
      ;; Regeneration of the build system is triggered by touching the
      ;; 'libmailutils/tests/lock.at' file.
@@ -355,17 +356,17 @@ example, modify the message headers or body, or encrypt or sign the message.")
        ("texinfo" ,texinfo)
        ("dejagnu" ,dejagnu)))
     (inputs
-     `(("guile" ,guile-3.0)
-       ("gsasl" ,gsasl)
-       ("gnutls" ,gnutls)
-       ("ncurses" ,ncurses)
-       ("readline" ,readline)
-       ("linux-pam" ,linux-pam)
-       ("libltdl" ,libltdl)
-       ("gdbm" ,gdbm)
-       ;; Required for SEARCH CHARSET.
-       ("libiconv" ,libiconv)
-       ("libunistring" ,libunistring)))
+     (list guile-3.0
+           gsasl
+           gnutls
+           ncurses
+           readline
+           linux-pam
+           libltdl
+           gdbm
+           ;; Required for SEARCH CHARSET.
+           libiconv
+           libunistring))
     (home-page "https://mailutils.org")
     (synopsis "Utilities and library for reading and serving mail")
     (description
@@ -414,12 +415,11 @@ software.  GNU Mailutils provides the following commands:
       (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.")
+       (list go-github-com-emersion-go-imap
+             go-github-com-emersion-go-imap-idle
+             go-github-com-emersion-go-sasl go-github-com-sirupsen-logrus
+             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.")
@@ -431,11 +431,8 @@ messages) using IDLE.  Implemented in Go.")
     (inherit mailutils)
     (name "guile2.2-mailutils")
     (inputs
-     `(("guile" ,guile-2.2)
-       ,@(alist-delete "guile" (package-inputs mailutils))))))
-
-(define-public guile3.0-mailutils
-  (deprecated-package "guile3.0-mailutils" mailutils))
+     (modify-inputs (package-inputs mailutils)
+       (replace "guile" guile-2.2)))))
 
 (define-public nullmailer
   (package
@@ -499,9 +496,9 @@ messages) using IDLE.  Implemented in Go.")
              #t)))))
     (native-inputs
      ;; For tests.
-     `(("daemontools" ,daemontools)))   ; for svc
+     (list daemontools))   ; for svc
     (inputs
-     `(("gnutls" ,gnutls)))
+     (list gnutls))
     (home-page "https://untroubled.org/nullmailer/")
     (synopsis "Simple relay-only mail transfer agent")
     (description
@@ -521,7 +518,7 @@ to run without any changes.")
 (define-public fetchmail
   (package
     (name "fetchmail")
-    (version "6.4.22")
+    (version "6.4.23")
     (source
      (origin
        (method url-fetch)
@@ -529,10 +526,10 @@ to run without any changes.")
                            (version-major+minor version) "/"
                            "fetchmail-" version ".tar.xz"))
        (sha256
-        (base32 "111cc6zfmb53f2a844iiyp3j2symcg8xd4m2kwb04mj3b6yihs6c"))))
+        (base32 "001394gxji89hfh6jcdrmv9ndimdsz7bndd55i516c8lfc9mwyjz"))))
     (build-system gnu-build-system)
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (arguments
      `(#:configure-flags
        (list (string-append "--with-ssl="
@@ -556,7 +553,7 @@ aliasing facilities to work just as they would on normal mail.")
 (define-public mutt
   (package
     (name "mutt")
-    (version "2.1.3")
+    (version "2.1.5")
     (source (origin
              (method url-fetch)
              (uri (list
@@ -566,18 +563,18 @@ aliasing facilities to work just as they would on normal mail.")
                                    version ".tar.gz")))
              (sha256
               (base32
-               "0z74slnq3y9wr1xr07jigz4n8dgxhk9qb0787sd0j6wj9g4rqxgg"))
+               "1q1bq5qfv67s6ynbqga19ifaprgavhdbgg154kb9ffingvj0k8wj"))
              (patches (search-patches "mutt-store-references.patch"))))
     (build-system gnu-build-system)
     (inputs
-     `(("cyrus-sasl" ,cyrus-sasl)
-       ("gdbm" ,gdbm)
-       ("gpgme" ,gpgme)
-       ("libidn2" ,libidn2)
-       ("ncurses" ,ncurses)
-       ("openssl" ,openssl)
-       ("perl" ,perl)
-       ("sqlite" ,sqlite)))
+     (list cyrus-sasl
+           gdbm
+           gpgme
+           libidn2
+           ncurses
+           openssl
+           perl
+           sqlite))
     (arguments
      `(#:configure-flags '("--enable-smtp"
                            "--enable-imap"
@@ -603,7 +600,7 @@ operating systems.")
 (define-public neomutt
   (package
     (name "neomutt")
-    (version "20210205")
+    (version "20211029")
     (source
      (origin
        (method git-fetch)
@@ -612,22 +609,22 @@ operating systems.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "15kr9nvb4j8lx5rl2yapv231rbp4sbn709vv82pfhx5717x3yf00"))))
+        (base32 "1ad05k98z9r317k2hhxbgdic00iha5r0k0f8224anz60i9kc78w5"))))
     (build-system gnu-build-system)
     (inputs
-     `(("cyrus-sasl" ,cyrus-sasl)
-       ("gdbm" ,gdbm)
-       ("gpgme" ,gpgme)
-       ("ncurses" ,ncurses)
-       ("gnutls" ,gnutls)
-       ("openssl" ,openssl)             ; for S/MIME
-       ("perl" ,perl)
-       ("kyotocabinet" ,kyotocabinet)
-       ("libxslt" ,libxslt)
-       ("libidn2" ,libidn2)
-       ("libxml2" ,libxml2)
-       ("lmdb" ,lmdb)
-       ("notmuch" ,notmuch)))
+     (list cyrus-sasl
+           gdbm
+           gpgme
+           ncurses
+           gnutls
+           openssl ; for S/MIME
+           perl
+           kyotocabinet
+           libxslt
+           libidn2
+           libxml2
+           lmdb
+           notmuch))
     (native-inputs
      `(("automake" ,automake)
        ("gettext-minimal" ,gettext-minimal)
@@ -704,8 +701,7 @@ operating systems.")
              (copy-recursively (assoc-ref inputs "neomutt-test-files") "tests")
              (with-directory-excursion "tests"
                (setenv "NEOMUTT_TEST_DIR" (getcwd)) ; must be absolute
-               (invoke "bash" "setup.sh")
-               #t))))))
+               (invoke "bash" "setup.sh")))))))
     (home-page "https://neomutt.org/")
     (synopsis "Command-line mail reader based on Mutt")
     (description
@@ -727,15 +723,12 @@ It adds a large amount of new and improved features to mutt.")
                 "0i3xfc84qn1z99i70q68kbnp9rmgqrnprqb418ba52s6g9j9dsia"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("gnupg" ,gnupg)                 ; for tests only
-       ("gobject-introspection" ,gobject-introspection)))
-    (inputs `(("glib" ,glib)
-              ("gpgme" ,gpgme)
-              ("zlib" ,zlib)))
+     (list pkg-config gnupg ; for tests only
+           gobject-introspection vala))
+    (inputs (list glib gpgme zlib))
     (arguments
      `(#:configure-flags
-         (list "--enable-introspection=yes")
+         (list "--enable-introspection=yes" "--enable-vapigen=yes")
        #:phases
        (modify-phases %standard-phases
          (add-after
@@ -841,7 +834,7 @@ mailpack.  What can alterMIME do?
 (define-public astroid
   (package
     (name "astroid")
-    (version "0.15")
+    (version "0.16")
     (source
      (origin
        (method git-fetch)
@@ -850,14 +843,13 @@ mailpack.  What can alterMIME do?
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "11cxbva9ni98gii59xmbxh4c6idcg3mg0pgdsp1c3j0yg7ix0lj3"))
+        (base32 "17m99llggkg7xg72k8xaf7iipax7sgfhqa2a1qnlylndwa42f57b"))
        (modules '((guix build utils)))
        (snippet
         '(begin
            ;; https://github.com/astroidmail/astroid/pull/685
            (substitute* "tests/test_composed_message.cc"
-             (("\\\\n\\.\\.\\.") "\\n...\\n"))
-           #t))))
+             (("\\\\n\\.\\.\\.") "\\n...\\n"))))))
     (build-system cmake-build-system)
     (arguments
      `(#:modules ((guix build cmake-build-system)
@@ -876,8 +868,7 @@ mailpack.  What can alterMIME do?
            ;; ValueError: Namespace Astroid not available
            (lambda _
              (substitute* "tests/CMakeLists.txt"
-               ((".*markdown.*") ""))
-             #t))
+               ((".*markdown.*") ""))))
          (replace 'build
            (lambda _
              (invoke "ninja" "-j" (number->string (parallel-job-count)))))
@@ -886,14 +877,12 @@ mailpack.  What can alterMIME do?
              (let ((xorg-server (assoc-ref inputs "xorg-server")))
                (setenv "HOME" (getcwd))
                (system (format #f "~a/bin/Xvfb :1 &" xorg-server))
-               (setenv "DISPLAY" ":1")
-               #t)))
+               (setenv "DISPLAY" ":1"))))
          (replace 'check
            (lambda* (#:key tests? #:allow-other-keys)
              (when tests?
                (setenv "CTEST_OUTPUT_ON_FAILURE" "1")
-               (invoke "ctest" "."))
-             #t))
+               (invoke "ctest" "."))))
          (replace 'install
            (lambda _
              (invoke "ninja" "install")))
@@ -910,35 +899,34 @@ mailpack.  What can alterMIME do?
                                         #f))))
                                inputs)))
                (wrap-program (string-append out "/bin/astroid")
-                 `("GI_TYPELIB_PATH" ":" prefix ,(filter identity paths))))
-             #t))
+                 `("GI_TYPELIB_PATH" ":" prefix ,(filter identity paths))))))
          (add-after 'install 'glib-or-gtk-compile-schemas
            (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-compile-schemas))
          (add-after 'install 'glib-or-gtk-wrap
            (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap)))))
     (native-inputs
-     `(("glib-networking" ,glib-networking)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gnupg" ,gnupg)
-       ("ninja" ,ninja)
-       ("pkg-config" ,pkg-config)
-       ("ronn" ,ronn)
-       ("w3m" ,w3m)
-       ("xorg-server" ,xorg-server)))
+     (list glib-networking
+           gsettings-desktop-schemas
+           gnupg
+           ninja
+           pkg-config
+           ronn
+           w3m
+           xorg-server-for-tests))
     (inputs
-     `(("boost" ,boost)
-       ("gmime" ,gmime)
-       ("gobject-introspection" ,gobject-introspection) ; it is referenced
-       ("gtkmm" ,gtkmm)
-       ("libpeas" ,libpeas)
-       ("libsass" ,libsass)
-       ("notmuch" ,notmuch)
-       ("protobuf" ,protobuf)
-       ("python" ,python-wrapper)
-       ("python-pygobject" ,python-pygobject)
-       ("webkitgtk" ,webkitgtk)))
+     (list boost
+           gmime
+           gobject-introspection        ; it is referenced
+           gtkmm-3
+           libpeas
+           libsass
+           notmuch
+           protobuf
+           python-wrapper
+           python-pygobject
+           webkitgtk-with-libsoup2))
     (propagated-inputs
-     `(("adwaita-icon-theme" ,adwaita-icon-theme))) ; Required for the thread view
+     (list adwaita-icon-theme)) ; Required for the thread view
     (home-page "https://astroidmail.github.io/")
     (synopsis "GTK frontend to the notmuch mail system")
     (description
@@ -1027,7 +1015,7 @@ MIME-encoded email package.")
                    (("/usr") ""))       ; This allows the man page to install.
                  #t))))))
       (native-inputs
-       `(("python" ,python)))           ; for tests
+       (list python))           ; for tests
       (synopsis "MIME type associations for file types")
       (description
        "This package provides MIME type associations for file types.")
@@ -1056,8 +1044,8 @@ MIME-encoded email package.")
                (("GREP=/bin/grep")
                 (string-append "GREP=" (which "grep") "\n")))
              #t)))))
-    (native-inputs `(("flex" ,flex)))
-    (inputs `(("bdb" ,bdb)))
+    (native-inputs (list flex))
+    (inputs (list bdb))
     (home-page "https://bogofilter.sourceforge.io/")
     (synopsis "Mail classifier based on a Bayesian filter")
     (description
@@ -1087,11 +1075,9 @@ and corrections.  It is based on a Bayesian filter.")
                   "0nzh5dcc559jfw4yy12gc98s17w82b15zxikspc6apd8filmk9xg"))))
       (build-system python-build-system)
       (native-inputs
-       `(("asciidoc" ,asciidoc)))
+       (list asciidoc))
       (inputs
-       `(("python-distro" ,python-distro)
-         ("python-imaplib2" ,python-imaplib2)
-         ("python-rfc6555" ,python-rfc6555)))
+       (list python-distro python-imaplib2 python-rfc6555))
       (arguments
        `(;; Tests require a modifiable IMAP account.
          #:tests? #f
@@ -1132,10 +1118,10 @@ repository and Maildir/IMAP as LOCAL repository.")
                (base32
                 "0ixzyq33l6j34410kqav3lwn2wx171zvqd3irvns2jvhrbww8i6g"))))
     (native-inputs
-     `(("emacs" ,emacs)))
+     (list emacs))
     (propagated-inputs
-     `(("ruby-sqlite3" ,ruby-sqlite3) ; optional for the database of messages
-       ("ruby" ,ruby))) ; to set GEM_PATH so ruby-sqlite3 is found at runtime
+     (list ruby-sqlite3 ; optional for the database of messages
+           ruby)) ; to set GEM_PATH so ruby-sqlite3 is found at runtime
     (build-system gnu-build-system)
     (arguments
      (let ((elisp-dir "/share/emacs/site-lisp")
@@ -1174,7 +1160,7 @@ security functionality including PGP, S/MIME, SSH, and SSL.")
 (define-public mu
   (package
     (name "mu")
-    (version "1.6.6")
+    (version "1.6.10")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/djcb/mu/releases/"
@@ -1182,7 +1168,7 @@ security functionality including PGP, S/MIME, SSH, and SSL.")
                                   "mu-" version ".tar.xz"))
               (sha256
                (base32
-                "1da3ykqnba3axggxyzsh3kjhy0rbdfdh9pnwprbzww56y8h3vka2"))))
+                "1dh0x4lqnjflb0k8fybr5clqjxv35scf055g1590pr5znam29hhb"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)
@@ -1190,10 +1176,7 @@ security functionality including PGP, S/MIME, SSH, and SSL.")
        ("emacs" ,emacs-minimal)
        ("tzdata" ,tzdata-for-tests)))   ; for mu/test/test-mu-query.c
     (inputs
-     `(("xapian" ,xapian)
-       ("guile" ,guile-3.0)
-       ("glib" ,glib)
-       ("gmime" ,gmime)))
+     (list xapian guile-3.0 glib gmime))
     (arguments
      `(#:modules ((guix build gnu-build-system)
                   (guix build utils)
@@ -1227,8 +1210,7 @@ security functionality including PGP, S/MIME, SSH, and SSL.")
            (lambda* (#:key inputs #:allow-other-keys)
              ;; For mu/test/test-mu-query.c
              (setenv "TZDIR"
-                     (string-append (assoc-ref inputs "tzdata")
-                                    "/share/zoneinfo"))))
+                     (search-input-directory inputs "share/zoneinfo"))))
          (add-after 'install 'install-emacs-autoloads
            (lambda* (#:key outputs #:allow-other-keys)
              (emacs-generate-autoloads
@@ -1239,7 +1221,7 @@ security functionality including PGP, S/MIME, SSH, and SSL.")
     (synopsis "Quickly find emails")
     (description
      "Mu is a tool for dealing with e-mail messages stored in the
-Maildir-format.  Mu's purpose in life is to help you to quickly find the
+Maildir format.  Mu's purpose in life is to help you to quickly find the
 messages you need; in addition, it allows you to view messages, extract
 attachments, create new maildirs, and so on.")
     (license license:gpl3+)))
@@ -1247,7 +1229,7 @@ attachments, create new maildirs, and so on.")
 (define-public alot
   (package
     (name "alot")
-    (version "0.9.1")
+    (version "0.10")
     (source (origin
               (method git-fetch)
               ;; package author intends on distributing via github rather
@@ -1259,7 +1241,7 @@ attachments, create new maildirs, and so on.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0s94m17yph1gq9f2svipb3bbwbw1s4j3zf2xkg5h91006v8286r6"))))
+                "0awf1phdy1wqm01cy9zmvqlw6c8pvkxm2f9ncjd0cmzxqnmq1dyn"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -1278,20 +1260,23 @@ attachments, create new maildirs, and so on.")
           (substitute* "tests/commands/test_global.py"
             (("def test_no_spawn_no_stdin_attached")
              "def _test_no_spawn_no_stdin_attached"))
+          ;; FIXME: Investigate why this test hangs.
+          (substitute* "tests/db/test_manager.py"
+            (("def test_save_named_query")
+             "def _test_save_named_query"))
           #t)))))
     (native-inputs
-     `(("procps" ,procps)
-       ("python-mock" ,python-mock)))
+     (list procps python-mock))
     (inputs
-     `(("gnupg" ,gnupg)
-       ("python-magic" ,python-magic)
-       ("python-configobj" ,python-configobj)
-       ("python-twisted" ,python-twisted)
-       ("python-service-identity" ,python-service-identity)
-       ("python-urwid" ,python-urwid)
-       ("python-urwidtrees" ,python-urwidtrees)
-       ("python-gpg" ,python-gpg)
-       ("python-notmuch" ,python-notmuch)))
+     (list gnupg
+           python-magic
+           python-configobj
+           python-twisted
+           python-service-identity
+           python-urwid
+           python-urwidtrees
+           python-gpg
+           python-notmuch2))
     (home-page "https://github.com/pazz/alot")
     (synopsis "Command-line MUA using Notmuch")
     (description
@@ -1321,11 +1306,8 @@ Notmuch.")
          (file-name (string-append name "-" version "-checkout"))))
       (build-system python-build-system)
       (inputs
-       `(("python-notmuch" ,python-notmuch)
-         ("python-pygobject" ,python-pygobject)
-         ("gobject-introspection" ,gobject-introspection)
-         ("libnotify" ,libnotify)
-         ("gtk+" ,gtk+)))
+       (list python-notmuch python-pygobject gobject-introspection
+             libnotify gtk+))
       (arguments
        `(#:phases
          (modify-phases %standard-phases
@@ -1334,7 +1316,7 @@ Notmuch.")
                (let* ((out (assoc-ref outputs "out"))
                       (bin (string-append out "/bin/notifymuch")))
                  (wrap-program bin
-                   `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH")))
+                   `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH")))
                    `("GI_TYPELIB_PATH" ":" prefix
                      (,(getenv "GI_TYPELIB_PATH")
                       ,(string-append out "/lib/girepository-1.0")))))
@@ -1353,14 +1335,14 @@ invoking @command{notifymuch} from the post-new hook.")
 (define-public notmuch
   (package
     (name "notmuch")
-    (version "0.33.1")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://notmuchmail.org/releases/notmuch-"
-                                  version ".tar.xz"))
-              (sha256
-               (base32
-                "1lhhkg9aw2ychj8lvkmk4bnj7rjz3v9w9r7sdp8bqjpfv41mz41d"))))
+    (version "0.34.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://notmuchmail.org/releases/notmuch-"
+                           version ".tar.xz"))
+       (sha256
+        (base32 "1278r8x8l2hsxg8plbfk7w2md0fagdm243lm7df5m0gx7d411s9z"))))
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags
@@ -1388,26 +1370,21 @@ invoking @command{notifymuch} from the post-new hook.")
                       (substitute* (find-files "test" "\\.sh$")
                         (("/bin/sh") (which "sh"))))))))
     (native-inputs
-     `(("bash-completion" ,bash-completion)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python)
-       ("python-docutils" ,python-docutils)
-       ("sphinx" ,python-sphinx)
-       ("texinfo" ,texinfo)
-
-       ;; The following are required for tests only.
-       ("emacs" ,emacs-no-x)    ; -minimal lacks libxml, needed for some tests
-       ("which" ,which)
-       ("dtach" ,dtach)
-       ("gnupg" ,gnupg)
-       ("man" ,man-db)
-       ("perl" ,perl)))
+     (list bash-completion
+           pkg-config
+           python
+           python-docutils
+           python-sphinx
+           texinfo
+           ;; The following are required for tests only.
+           emacs-no-x ; -minimal lacks libxml, needed for some tests
+           which
+           dtach
+           gnupg
+           man-db
+           perl))
     (inputs
-     `(("glib" ,glib)
-       ("gmime" ,gmime)
-       ("talloc" ,talloc)
-       ("xapian" ,xapian)
-       ("zlib" ,zlib)))
+     (list glib gmime talloc xapian zlib))
     (home-page "https://notmuchmail.org/")
     (synopsis "Thread-based email index, search, and tagging")
     (description
@@ -1422,7 +1399,7 @@ ing, and tagging large collections of email messages.")
     (build-system emacs-build-system)
     (native-inputs '())
     (inputs
-     `(("notmuch" ,notmuch)))
+     (list notmuch))
     (arguments
      `(#:exclude (cons* "make-deps.el" "rstdoc.el" %default-exclude)
        #:phases
@@ -1470,10 +1447,9 @@ system.")))
                                   (assoc-ref outputs "out") "/bin")))
                         (install-file "notmuch-addrlookup" bin)))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("glib" ,glib)
-       ("notmuch" ,notmuch)))
+     (list glib notmuch))
     (home-page "https://github.com/aperezdc/notmuch-addrlookup-c")
     (synopsis "Address lookup tool for Notmuch")
     (description "This is an address lookup tool using a Notmuch database,
@@ -1488,7 +1464,7 @@ useful for email address completion.")
     ;; bindings are distributed via the notmuch release tarball.
     (source (package-source notmuch))
     (build-system python-build-system)
-    (inputs `(("notmuch" ,notmuch)))
+    (inputs (list notmuch))
     (arguments
      `(#:tests? #f  ; no "test" target
        #:phases
@@ -1515,6 +1491,21 @@ and search library.")
 (define-public python2-notmuch
   (package-with-python2 python-notmuch))
 
+(define-public python-notmuch2
+  (package
+    (inherit python-notmuch)
+    (name "python-notmuch2")
+    (propagated-inputs (list python-cffi))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         ;; This python package lives in a subdirectory of the notmuch source
+         ;; tree, so chdir into it before building.
+         (add-after 'unpack 'enter-python-dir
+           (lambda _ (chdir "bindings/python-cffi"))))))
+    (synopsis "Pythonic bindings for the notmuch mail database using CFFI")
+    (license license:gpl3+)))
+
 (define-public muchsync
   (package
     (name "muchsync")
@@ -1528,13 +1519,9 @@ and search library.")
         (base32 "1s799kx16nm5ry1fcqcc0grgxrwnnp4cnzd0hzwbkvc5v2sf6g8b"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pandoc" ,pandoc)
-       ("pkg-config" ,pkg-config)))
+     (list pandoc pkg-config))
     (inputs
-     `(("libcrypto" ,openssl)
-       ("notmuch" ,notmuch)
-       ("sqlite" ,sqlite)
-       ("xapian" ,xapian)))
+     (list openssl notmuch sqlite xapian))
     (home-page "http://www.muchsync.org/")
     (synopsis "Synchronize notmuch mail across machines")
     (description
@@ -1550,19 +1537,19 @@ pairs have previously synchronized.")
 (define-public getmail
   (package
     (name "getmail")
-    (version "5.15")
+    (version "5.16")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "http://pyropus.ca/software/getmail/old-versions/"
+       (uri (string-append "https://pyropus.ca/software/getmail/old-versions/"
                            "getmail-" version ".tar.gz"))
        (sha256
-        (base32 "0ahn2jyj4ka996qzs99id59pwxv6sqxp61g7drcf53rzzigq0lyl"))))
+        (base32 "1yk7lrndbfsrbdxikwzdqvadryqsldalxdn3a184dg4sxzmgis3a"))))
     (build-system python-build-system)
     (arguments
-     `(#:tests? #f                      ; no tests
-       #:python ,python-2))
-    (home-page "http://pyropus.ca/software/getmail/")
+     (list #:tests? #f                  ; no tests
+           #:python python-2))
+    (home-page "https://pyropus.ca/software/getmail/")
     (synopsis "Mail retriever")
     (description
      "A flexible, extensible mail retrieval system with support for
@@ -1586,19 +1573,13 @@ useful features.")
              (sha256
                (base32 "0g7an003simfdn7ihg9yjv7hl2czsmjsndjrp39i7cad8icixscn"))))
     (build-system gnu-build-system)
-    (native-inputs `(("autoconf" ,autoconf)
-                     ("automake" ,automake)
-                     ("libtool" ,libtool)
-                     ("pkg-config" ,pkg-config)))
+    (native-inputs (list autoconf automake libtool pkg-config))
     (propagated-inputs
      ;; 'libetpan-config --libs' returns '-lssl -lcrypto -lsasl2', so these
      ;; libraries need to be propagated.
-     `(("cyrus-sasl" ,cyrus-sasl)
-       ("openssl" ,openssl)))
+     (list cyrus-sasl openssl))
     (inputs
-     `(("curl" ,curl)
-       ("expat" ,expat)
-       ("zlib" ,zlib)))
+     (list curl expat zlib))
     (arguments
       '(#:configure-flags
         '("--disable-static" "--disable-db")))
@@ -1661,73 +1642,69 @@ compresses it.")
          (add-after 'unpack 'patch-source
            (lambda* (#:key inputs #:allow-other-keys)
              ;; Use absolute paths to referenced programs.
-             (let* ((mailutils (assoc-ref inputs "mailutils"))
-                    (inc (string-append mailutils "/bin/mu-mh/inc"))
-                    (send-mail (assoc-ref inputs "sendmail"))
-                    (sendmail (string-append send-mail "/sbin/sendmail")))
-               (substitute* "src/common/defs.h"
-                 (("/usr/bin/mh/inc") inc)
-                 (("/usr/sbin/sendmail") sendmail)))))
+             (substitute* "src/common/defs.h"
+               (("/usr/bin/mh/inc")
+                (search-input-file inputs "/bin/mu-mh/inc"))
+               (("/usr/sbin/sendmail")
+                (search-input-file inputs "/sbin/sendmail")))))
          (add-before 'build 'patch-mime
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "src/procmime.c"
                (("/usr/share/mime/globs")
-                (string-append (assoc-ref inputs "shared-mime-info")
-                               "/share/mime/globs"))))))))
+                (search-input-file inputs "/share/mime/globs"))))))))
     (native-inputs
-     `(("bison" ,bison)
-       ;;("docbook-utils" ,docbook-utils)
-       ("flex" ,flex)
-       ("gettext-minimal" ,gettext-minimal)
-       ("gobject-introspection" ,gobject-introspection)
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list bison
+           ;;("docbook-utils" ,docbook-utils)
+           flex
+           gettext-minimal
+           gobject-introspection
+           intltool
+           pkg-config))
     (inputs
-     `(("bogofilter" ,bogofilter)
-       ("cairo" ,cairo)
-       ("compface" ,compface)
-       ("curl" ,curl)
-       ("dbus" ,dbus)
-       ("dbus-glib" ,dbus-glib)
-       ("enchant" ,enchant)
-       ("expat" ,expat)
-       ("fontconfig" ,fontconfig)
-       ("gdk-pixbuf+svg" ,gdk-pixbuf+svg)
-       ("ghostscript" ,ghostscript)
-       ("glib" ,glib)
-       ("gnupg" ,gnupg)
-       ("gnutls" ,gnutls)
-       ("gpgme" ,gpgme)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gtk+" ,gtk+)
-       ("gumbo-parser" ,gumbo-parser)
-       ;;("j-pilot" ,j-pilot)
-       ("libarchive" ,libarchive)
-       ("libcanberra" ,libcanberra)
-       ("libetpan" ,libetpan)
-       ("libgdata" ,libgdata)
-       ("libical" ,libical)
-       ("libindicator" ,libindicator)
-       ("libnotify" ,libnotify)
-       ("librsvg" ,librsvg)
-       ("libsm" ,libsm)
-       ("libsoup" ,libsoup)
-       ("libxml2" ,libxml2)
-       ("mailutils" ,mailutils)
-       ("nettle" ,nettle)
-       ("network-manager" ,network-manager)
-       ("openldap" ,openldap)
-       ("perl" ,perl)
-       ("poppler" ,poppler)
-       ("python" ,python)
-       ("python-pygobject" ,python-pygobject)
-       ("sendmail" ,sendmail)
-       ("shared-mime-info" ,shared-mime-info)
-       ("startup-notification" ,startup-notification)
-       ;;("webkitgtk" ,webkitgtk)
-       ("ytnef" ,ytnef)))
+      (list bogofilter
+            cairo
+            compface
+            curl
+            dbus
+            dbus-glib
+            enchant
+            expat
+            fontconfig
+            ghostscript
+            glib
+            gnupg
+            gnutls
+            gpgme
+            gsettings-desktop-schemas
+            gtk+
+            gumbo-parser
+            ;;j-pilot
+            libarchive
+            libcanberra
+            libetpan
+            libgdata
+            libical
+            libindicator
+            libnotify
+            (librsvg-for-system)
+            libsm
+            libsoup
+            libxml2
+            mailutils
+            nettle
+            network-manager
+            openldap
+            perl
+            poppler
+            python
+            python-pygobject
+            sendmail
+            shared-mime-info
+            startup-notification
+            ;;webkitgtk
+            ytnef))
     (propagated-inputs
-     `(("dconf" ,dconf)))
+     (list dconf))
     (synopsis "GTK-based Email client")
     (description "Claws-Mail is an email client (and news reader) based on GTK+.
 The appearance and interface are designed to be familiar to new users coming
@@ -1740,22 +1717,19 @@ addons which can add many functionalities to the base client.")
 (define-public msmtp
   (package
     (name "msmtp")
-    (version "1.8.16")
+    (version "1.8.19")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://marlam.de/msmtp/releases/"
                            "/msmtp-" version ".tar.xz"))
        (sha256
-        (base32 "1n271yr83grpki9szdirnk6wb5rcc319f0gmfabyw3fzyf4msjy0"))))
+        (base32 "0ssj8izcw1fywihlip6wljd9i41w23cy0vp69sz4v1vn26cf389l"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libsecret" ,libsecret)
-       ("gnutls" ,gnutls)
-       ("zlib" ,zlib)
-       ("gsasl" ,gsasl)))
+     (list libsecret gnutls zlib gsasl))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://marlam.de/msmtp/")
     (arguments
      `(#:configure-flags (list "--with-libgsasl"
@@ -1777,8 +1751,9 @@ addons which can add many functionalities to the base client.")
                ;; Don't rely on netcat being in the PATH to test for a
                ;; connection, instead look up and ping debian.org.
                (substitute* (string-append bin "/msmtpq")
-                 (("EMAIL_CONN_TEST=n") "EMAIL_CONN_TEST=p"))
-               #t))))))
+                 (("EMAIL_CONN_TEST=n") "EMAIL_CONN_TEST=p"))))))))
+    (properties
+     '((release-monitoring-url . "https://marlam.de/msmtp/download/")))
     (synopsis
      "Simple and easy to use SMTP client with decent sendmail compatibility")
     (description
@@ -1817,9 +1792,7 @@ delivery.")
        ("libxt" ,libxt)
        ("libxaw" ,libxaw)))
     (native-inputs
-     `(("pcre" ,pcre "bin")
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list `(,pcre "bin") perl pkg-config))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1901,7 +1874,7 @@ facilities for checking incoming mail.")
   (package
     (name "dovecot")
     ;; Also update dovecot-pigeonhole when updating to a new minor version.
-    (version "2.3.16")
+    (version "2.3.17.1")
     (source
      (origin
        (method url-fetch)
@@ -1909,27 +1882,23 @@ facilities for checking incoming mail.")
                            (version-major+minor version) "/"
                            "dovecot-" version ".tar.gz"))
        (sha256
-        (base32 "04ngqv5mml5z0i4p7fkchp4xw2awy7x7mq2mim9frnav0m9iv9q3"))))
+        (base32 "1f525bvpjvi4rnwqjsqaqrbdii08sqmc1v8xq03m19w1vk6cqrqw"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("bzip2" ,bzip2)
-       ("clucene" ,clucene)
-       ("icu4c" ,icu4c)
-       ("libsodium" ,libsodium)         ; extra password algorithms
-       ("libstemmer" ,libstemmer)
-       ;; FIXME: The 'test-backtrace' tests fail on arm when using glibc's
-       ;; backtrace_symbol() function so fallback to using libunwind.
-       ,@(if (target-arm?)
-          `(("libunwind" ,libunwind))
-          '())
-       ("linux-pam" ,linux-pam)
-       ("lz4" ,lz4)
-       ("openssl" ,openssl)
-       ("sqlite" ,sqlite)
-       ("zlib" ,zlib)
-       ("zstd" ,zstd "lib")))
+     (list bzip2
+           clucene
+           icu4c
+           libsodium ; extra password algorithms
+           libstemmer
+           libunwind
+           linux-pam
+           lz4
+           openssl
+           sqlite
+           zlib
+           `(,zstd "lib")))
     (arguments
      `(#:configure-flags '("--sysconfdir=/etc"
                            "--localstatedir=/var"
@@ -1948,8 +1917,7 @@ facilities for checking incoming mail.")
                (("sleep") (which "sleep")))
              (substitute* (list "src/lib-smtp/test-bin/sendmail-exit-1.sh"
                                 "src/lib-smtp/test-bin/sendmail-success.sh")
-               (("cat") (which "cat")))
-             #t))
+               (("cat") (which "cat")))))
          (replace 'install
            (lambda* (#:key make-flags #:allow-other-keys)
              ;; Simple hack to avoid installing a trivial README in /etc.
@@ -1970,7 +1938,7 @@ It supports mbox/Maildir and its own dbox/mdbox formats.")
   (let ((dovecot-version (version-major+minor (package-version dovecot))))
     (package
       (name "dovecot-pigeonhole")
-      (version "0.5.16")
+      (version "0.5.17.1")
       (source
        (origin
          (method url-fetch)
@@ -1978,7 +1946,7 @@ It supports mbox/Maildir and its own dbox/mdbox formats.")
                "https://pigeonhole.dovecot.org/releases/" dovecot-version "/"
                "dovecot-" dovecot-version "-pigeonhole-" version ".tar.gz"))
          (sha256
-          (base32 "0f79qsiqnhaxn7mrrfcrnsjyv6357kzb7wa0chhfd69vwa06g8sw"))
+          (base32 "04j5z3y8yyci4ni9j9i7cy0zg1qj2sm9zfarmjcvs9vydpga7i1w"))
          (modules '((guix build utils)))
          (snippet
           '(begin
@@ -1987,8 +1955,7 @@ It supports mbox/Maildir and its own dbox/mdbox formats.")
              (substitute* "configure"
                (("doc/rfc/Makefile") ""))
              (substitute* "doc/Makefile.in"
-               (("rfc ") ""))
-             #t))))
+               (("rfc ") ""))))))
       (build-system gnu-build-system)
       (arguments
        `(#:configure-flags
@@ -2016,12 +1983,11 @@ It supports mbox/Maildir and its own dbox/mdbox formats.")
                  (substitute* "src/managesieve-login/managesieve-login-settings.c"
                    (("\\.executable = \"managesieve-login\"")
                     (string-append ".executable = \"" libexec
-                                   "/managesieve-login\"")))
-                 #t))))))
+                                   "/managesieve-login\"")))))))))
       (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
       (inputs
-       `(("dovecot" ,dovecot)))
+       (list dovecot))
       (home-page "https://pigeonhole.dovecot.org")
       (synopsis "Dovecot Sieve mail filtering plug-in and ManageSieve service")
       (description
@@ -2060,13 +2026,9 @@ scripts to prevent embarrassing errors later on.")
         (search-patches "dovecot-trees-support-dovecot-2.3.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("automake" ,automake)
-       ("autoconf" ,autoconf)
-       ("libtool" ,libtool)
-       ("dovecot" ,dovecot)
-       ("pkg-config" ,pkg-config)))
+     (list automake autoconf libtool dovecot pkg-config))
     (inputs
-     `(("libsodium" ,libsodium)))
+     (list libsodium))
     (arguments
      `(#:tests? #f ;No tests exist.
        #:configure-flags (list (string-append "--with-dovecot="
@@ -2111,13 +2073,9 @@ using libsodium sealed boxes.
            "13h07l7xy713zchnj2p9fhvq7fdl4zy1ai94li3ygkqjjj8hrgas"))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("automake" ,automake)
-         ("autoconf" ,autoconf)
-         ("libtool" ,libtool)
-         ("dovecot" ,dovecot)
-         ("pkg-config" ,pkg-config)))
+       (list automake autoconf libtool dovecot pkg-config))
       (inputs
-       `(("libsodium" ,libsodium)))
+       (list libsodium))
       (arguments
        `(#:tests? #f ;No tests exist.
          #:configure-flags (list (string-append "--with-dovecot="
@@ -2133,22 +2091,19 @@ hashing scheme (such as scrypt) plug-in for @code{Dovecot}.")
 (define-public isync
   (package
     (name "isync")
-    (version "1.4.3")
+    (version "1.4.4")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://sourceforge/isync/isync/"
                            version "/isync-" version ".tar.gz"))
        (sha256 (base32
-                "024p3glj4p7fhrssw5sr55arls9zna1igxxrspxlfd6sbds21ixl"))))
+                "1zq0wwvmqsl9y71546dr0aygzn9gjjfiw19hlcq87s929y4p6ckw"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (inputs
-     `(("bdb" ,bdb)
-       ("cyrus-sasl" ,cyrus-sasl)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list bdb cyrus-sasl openssl zlib))
     (home-page "https://isync.sourceforge.io/")
     (synopsis "Mailbox synchronization program")
     (description
@@ -2169,9 +2124,7 @@ mailboxes.  Currently Maildir and IMAP are supported types.")
         (base32 "1z01wbflg49nbgzl81x260cp8x6qr7xdpz3dkrg82m1fwa9742q4"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-email-simple" ,perl-email-simple)
-       ("perl-module-pluggable" ,perl-module-pluggable)
-       ("perl-mro-compat" ,perl-mro-compat)))
+     (list perl-email-simple perl-module-pluggable perl-mro-compat))
     (home-page "https://metacpan.org/release/Email-Abstract")
     (synopsis "Interface to mail representations")
     (description "Email::Abstract provides module writers with the ability to
@@ -2271,13 +2224,13 @@ identify a message uniquely.")
          "0z1k3i0lzp2k421gc8f3wq0jbqflkbw2xqd2k7n7pmv56417kvk8"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-email-address" ,perl-email-address)
-       ("perl-email-messageid" ,perl-email-messageid)
-       ("perl-email-mime-contenttype" ,perl-email-mime-contenttype)
-       ("perl-email-mime-encodings" ,perl-email-mime-encodings)
-       ("perl-email-simple" ,perl-email-simple)
-       ("perl-mime-types" ,perl-mime-types)
-       ("perl-module-runtime" ,perl-module-runtime)))
+     (list perl-email-address
+           perl-email-messageid
+           perl-email-mime-contenttype
+           perl-email-mime-encodings
+           perl-email-simple
+           perl-mime-types
+           perl-module-runtime))
     (home-page "https://metacpan.org/release/Email-MIME")
     (synopsis "MIME message handling")
     (description "Email::MIME is an extension of the Email::Simple module, to
@@ -2300,7 +2253,7 @@ message.  Headers are decoded from MIME encoding.")
          "042kxhs3bp1ab9z0mbr1wy21ld4lxd6v2a2mmrashqnsn2075fws"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-capture-tiny" ,perl-capture-tiny)))
+     (list perl-capture-tiny))
     (home-page "https://metacpan.org/release/Email-MIME-ContentType")
     (synopsis "Parse MIME Content-Type headers")
     (description "Email::MIME::ContentType parses a MIME Content-Type
@@ -2321,7 +2274,7 @@ header.")
          "0p5b8g9gh35m8fqrpx60g4bp98rvwd02n5b0vm9wh7mk0xah8wac"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-capture-tiny" ,perl-capture-tiny)))
+     (list perl-capture-tiny))
     (home-page "https://metacpan.org/release/Email-MIME-Encodings")
     (synopsis "Unified interface to MIME encoding and decoding")
     (description "This module wraps MIME::Base64 and MIME::QuotedPrint.")
@@ -2340,18 +2293,18 @@ header.")
         (base32 "0yfssp3rqdx1dmgvnygarzgkpkhqm28r5sd0gh87ksk8yxndhjql"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-capture-tiny" ,perl-capture-tiny)))
+     (list perl-capture-tiny))
     (propagated-inputs
-     `(("perl-email-abstract" ,perl-email-abstract)
-       ("perl-email-address" ,perl-email-address)
-       ("perl-email-simple" ,perl-email-simple)
-       ("perl-list-moreutils" ,perl-list-moreutils)
-       ("perl-module-runtime" ,perl-module-runtime)
-       ("perl-moo" ,perl-moo)
-       ("perl-moox-types-mooselike" ,perl-moox-types-mooselike)
-       ("perl-sub-exporter" ,perl-sub-exporter)
-       ("perl-throwable" ,perl-throwable)
-       ("perl-try-tiny" ,perl-try-tiny)))
+     (list perl-email-abstract
+           perl-email-address
+           perl-email-simple
+           perl-list-moreutils
+           perl-module-runtime
+           perl-moo
+           perl-moox-types-mooselike
+           perl-sub-exporter
+           perl-throwable
+           perl-try-tiny))
     (home-page "https://metacpan.org/release/Email-Sender")
     (synopsis "Perl library for sending email")
     (description "Email::Sender replaces the old and sometimes problematic
@@ -2372,7 +2325,7 @@ Email::Send library.")
          "1m4brbjvalyp5kjqslqv4155dzwg977shxin208i7lc8236n6pyq"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-email-date-format" ,perl-email-date-format)))
+     (list perl-email-date-format))
     (home-page "https://metacpan.org/release/Email-Simple")
     (synopsis "Parsing of RFC 2822 messages")
     (description "Email::Simple provides simple parsing of RFC 2822 message
@@ -2394,7 +2347,7 @@ format and headers.")
         (base32 "1bhh8hlsl9597x0bnfl563k2c09b61qnkb9mfyqcmzlq63m1zw5y"))))
     (build-system meson-build-system)
     (propagated-inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (home-page "http://www.stafford.uklinux.net/libesmtp/")
     (synopsis "Library for sending mail via remote hosts using SMTP")
     (description
@@ -2434,13 +2387,9 @@ be expected from a simple client.")
                    (lambda _ (invoke "autoreconf" "-vfi"))))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list bison flex autoconf automake libtool))
     (inputs
-     `(("libesmtp" ,libesmtp)))
+     (list libesmtp))
     (home-page "https://sourceforge.net/projects/esmtp/")
     (synopsis "Relay-only mail transfer agent (MTA)")
     (description "Esmtp is a simple relay-only mail transfer agent built using
@@ -2463,9 +2412,7 @@ compatibility shims for the @command{sendmail}, @command{mailq}, and
                (base32 "196fs1z8y7p12wmqn1bylzz94szl58yv2aby3p30nmwjnyv8rch6"))))
     (build-system gnu-build-system)
     (inputs
-     `(("tdb" ,tdb)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list tdb openssl zlib))
     (home-page "https://github.com/nicm/fdm")
     (synopsis "Mail Retrieval Agent (MRA) and Mail Delivery Agent (MDA)")
     (description "fdm is a program designed to fetch mail from POP3
@@ -2516,7 +2463,7 @@ deliver it in various ways.")
     ;; file system are performed during 'make install'.  However, these
     ;; are performed before the actual build process.
     (build-system gnu-build-system)
-    (inputs `(("exim" ,exim)))
+    (inputs (list exim))
     (home-page "http://www.procmail.org/")
     (synopsis "Versatile mail delivery agent (MDA)")
     (description "Procmail is a mail delivery agent (MDA) featuring support
@@ -2550,13 +2497,10 @@ maintained.")
                (copy-recursively "misc/zsh" zsh)
                #t))))))
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-setuptools-scm))
     (inputs
-     `(("python-atomicwrites" ,python-atomicwrites)
-       ("python-configobj" ,python-configobj)
-       ("python-ruamel.yaml" ,python-ruamel.yaml)
-       ("python-unidecode" ,python-unidecode)
-       ("python-vobject" ,python-vobject)))
+     (list python-atomicwrites python-configobj python-ruamel.yaml
+           python-unidecode python-vobject))
     (synopsis "Console address book using CardDAV")
     (description "Khard is an address book for the console.  It creates, reads,
 modifies and removes CardDAV address book entries at your local machine.  For
@@ -2580,9 +2524,7 @@ Khard can also be used from within the email client @command{mutt}.")
         (base32 "0qk1rfgfm5drj4iyniiabrasrpqv570vzhgz66lwgb67y4amkjv1"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-net-dns-resolver-programmable"
-        ,perl-net-dns-resolver-programmable)))
+     (list perl-module-build perl-net-dns-resolver-programmable))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -2594,10 +2536,7 @@ Khard can also be used from within the email client @command{mutt}.")
                                                "/sbin'")))
              #t)))))
     (inputs
-     `(("perl-error" ,perl-error)
-       ("perl-net-dns" ,perl-net-dns)
-       ("perl-netaddr-ip" ,perl-netaddr-ip)
-       ("perl-uri" ,perl-uri)))
+     (list perl-error perl-net-dns perl-netaddr-ip perl-uri))
     (home-page "https://metacpan.org/release/Mail-SPF")
     (synopsis "Perl implementation of Sender Policy Framework")
     (description "Mail::SPF is the Sender Policy Framework implemented
@@ -2618,7 +2557,7 @@ in Perl.")
                 "1g1wym9vcbhldwvi4w5pl0fhd4jh2icj975awf4wr5xmkli9mxbz"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-exception" ,perl-test-exception)))
+     (list perl-test-exception))
     (home-page "https://metacpan.org/release/Mail-AuthenticationResults")
     (synopsis "Object Oriented Authentication-Results Headers")
     (description "Mail::AuthenticationResults parses the message header field
@@ -2642,14 +2581,11 @@ Authentication-Results header seen in the wild.")
                 "1x8v4pa0447c1xqri1jn96i8vlyjpl6jmz63nb1vifbp16yi3zxb"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-crypt-openssl-rsa" ,perl-crypt-openssl-rsa)
-       ("perl-mail-authenticationresults" ,perl-mail-authenticationresults)
-       ("perl-mailtools" ,perl-mailtools)
-       ("perl-net-dns" ,perl-net-dns)))
+     (list perl-crypt-openssl-rsa perl-mail-authenticationresults
+           perl-mailtools perl-net-dns))
     (native-inputs
-     `(("perl-net-dns-resolver-mock" ,perl-net-dns-resolver-mock)
-       ("perl-test-requiresinternet" ,perl-test-requiresinternet)
-       ("perl-yaml-libyaml" ,perl-yaml-libyaml)))
+     (list perl-net-dns-resolver-mock perl-test-requiresinternet
+           perl-yaml-libyaml))
     (home-page "https://metacpan.org/release/Mail-DKIM")
     (synopsis "Signs/verifies Internet mail with DKIM/DomainKey signatures")
     (description "Mail::DKIM is a Perl module that implements the new Domain
@@ -2710,17 +2646,17 @@ DKIM and/or DomainKeys.")
                               "perl-timedate"))
                #t))))))
     (inputs
-     `(("perl" ,perl)
-       ("perl-crypt-openssl-rsa" ,perl-crypt-openssl-rsa)
-       ("perl-io-socket-inet6" ,perl-io-socket-inet6)
-       ("perl-mailtools" ,perl-mailtools)
-       ("perl-mail-authenticationresults" ,perl-mail-authenticationresults)
-       ("perl-mail-dkim" ,perl-mail-dkim)
-       ("perl-mime-tools" ,perl-mime-tools)
-       ("perl-net-dns" ,perl-net-dns)
-       ("perl-net-server" ,perl-net-server)
-       ("perl-socket6" ,perl-socket6)
-       ("perl-timedate" ,perl-timedate)))
+     (list perl
+           perl-crypt-openssl-rsa
+           perl-io-socket-inet6
+           perl-mailtools
+           perl-mail-authenticationresults
+           perl-mail-dkim
+           perl-mime-tools
+           perl-net-dns
+           perl-net-server
+           perl-socket6
+           perl-timedate))
     (home-page "http://dkimproxy.sourceforge.net/")
     (synopsis "SMTP proxy to sign and verify Internet mail with DKIM headers")
     (description
@@ -2769,9 +2705,8 @@ existing mail server.  With Postfix, the proxies can operate as either
              (patch-shebang "mb2md" (list (string-append perl "/bin")))
              (chmod "mb2md" #o555))
            #t))))
-    (native-inputs `(("gzip" ,gzip)))
-    (inputs `(("perl" ,perl)
-              ("perl-timedate" ,perl-timedate)))
+    (native-inputs (list gzip))
+    (inputs (list perl perl-timedate))
     (home-page "http://batleth.sapienti-sat.org/projects/mb2md/")
     (synopsis "Mbox to maildir converter")
     (description
@@ -2782,7 +2717,7 @@ converts them to maildir format directories.")
 (define-public mblaze
   (package
     (name "mblaze")
-    (version "1.1")
+    (version "1.2")
     (source
      (origin
        (method git-fetch)
@@ -2791,10 +2726,10 @@ converts them to maildir format directories.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1bir977vnqs76g8jgv1yivqw0wk2kn56l3l5r4w2ipix3fir138y"))))
+        (base32 "0fa8s9dp5ilwmfcwkx72x2b5i0maa5sl97hv2cdknqmc27gv0b1c"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (arguments
      `(#:tests? #f                   ; XXX: Upstream tests appear to be broken
        #:make-flags (list (string-append "CC=" ,(cc-for-target))
@@ -2833,19 +2768,19 @@ easily (one at a time).")
 (define-public mpop
   (package
     (name "mpop")
-    (version "1.4.14")
+    (version "1.4.16")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://marlam.de/mpop/releases/"
                            "mpop-" version ".tar.xz"))
        (sha256
-        (base32 "046wbglvry54id9wik6c020fs09piv3gig3z0nh5nmyhsxjw4i18"))))
+        (base32 "1yc7lsdy9gvlslvljqg34kvcaf4wvrwlvj6h5awkzlp6x9qva3l7"))))
     (build-system gnu-build-system)
     (inputs
-     `(("gnutls" ,gnutls)))
+     (list gnutls))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://marlam.de/mpop/")
     (synopsis "POP3 mail client")
     (description "mpop is a small and fast POP3 client suitable as a
@@ -2860,15 +2795,14 @@ Names} and SOCKS proxies.")
 (define-public mhonarc
   (package
     (name "mhonarc")
-    (version "2.6.19")
+    (version "2.6.24")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "mirror://cpan/authors/id/E/EH/EHOOD/MHonArc-"
+       (uri (string-append "mirror://cpan/authors/id/L/LD/LDIDRY/MHonArc-"
                            version ".tar.gz"))
        (sha256
-        (base32
-         "0ll3v93yji334zqp6xfzfxc0127pmjcznmai1l5q6dzawrs2igzq"))))
+        (base32 "0cszh619i8bfjpyxhfgph20v8lic5zpirr990xdbg7759qvwfza5"))))
     (build-system perl-build-system)
     (home-page "https://www.mhonarc.org/")
     (synopsis "Create HTML archives of mail/news messages")
@@ -2969,8 +2903,7 @@ define(`confINST_DEP', `')
        ;; require root privileges
        #:tests? #f))
     (inputs
-     `(("m4" ,m4)
-       ("perl" ,perl)))
+     (list m4 perl))
     (home-page "http://sendmail.org")
     (synopsis
      "Highly configurable Mail Transfer Agent (MTA)")
@@ -3013,6 +2946,7 @@ transfer protocols.")
              (let ((out (assoc-ref outputs "out"))
                    (path (getenv "PERL5LIB")))
                (wrap-script (string-append out "/bin/sieve-connect")
+                 #:guile (search-input-file inputs "bin/guile")
                  `("PERL5LIB" ":" = (,path)))
                #t))))))
     (inputs
@@ -3058,15 +2992,14 @@ from the Cyrus IMAP project.")
         (base32 "05sd7bmq29ibnqbl2z53hiyprfxzf0qydfdaixs68rz55wqhbgsi"))))
     (build-system gnu-build-system)
     (inputs
-     `(("bdb" ,bdb)
-       ("libasr" ,libasr)
-       ("libevent" ,libevent)
-       ("libressl" ,libressl)           ; recommended, and supports e.g. ECDSA
-       ("linux-pam" ,linux-pam)
-       ("zlib" ,zlib)))
+     (list bdb
+           libasr
+           libevent
+           libressl ; recommended, and supports e.g. ECDSA
+           linux-pam
+           zlib))
     (native-inputs
-     `(("bison" ,bison)
-       ("groff" ,groff)))               ; for man pages
+     (list bison groff))               ; for man pages
     (arguments
      `(#:configure-flags
        (list "--localstatedir=/var"
@@ -3138,7 +3071,7 @@ to esoteric or niche requirements.")
                 "1b1mx71bvmv92lbm08wr2p60g3qhikvv3n15zsr6dcwbk9aqahzq"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("libressl" ,libressl)
        ("libevent" ,libevent)
@@ -3215,9 +3148,9 @@ for OpenSMTPD to extend its functionality.")
                (("-o \\$\\{...OWN\\} -g \\$\\{...GRP\\}") ""))))
          (delete 'configure))))         ; no configure script
     (native-inputs
-     `(("mandoc" ,mandoc)))           ; silently installs empty man page without
+     (list mandoc))           ; silently installs empty man page without
     (inputs
-     `(("libevent" ,libevent)))
+     (list libevent))
     (home-page "https://imperialat.at/dev/libopensmtpd/")
     (synopsis "OpenSMTPd filter C API")
     (description
@@ -3255,13 +3188,12 @@ writing OpenSMTPd filters.")
                (("-o \\$\\{...OWN\\} -g \\$\\{...GRP\\}") ""))))
          (delete 'configure))))         ; no configure script
     (native-inputs
-     `(("mandoc" ,mandoc)))           ; silently installs empty man page without
+     (list mandoc))           ; silently installs empty man page without
     (inputs
-     `(("libevent" ,libevent)
-       ("libopensmtpd" ,libopensmtpd)
-       ;; XXX Our OpenSMTPd package uses libressl, but this package currently
-       ;; supports HAVE_ED25519 only with openssl.  Switch back when possible.
-       ("openssl" ,openssl)))
+     (list libevent libopensmtpd
+           ;; XXX Our OpenSMTPd package uses libressl, but this package currently
+           ;; supports HAVE_ED25519 only with openssl.  Switch back when possible.
+           openssl))
     (home-page "http://imperialat.at/dev/filter-dkimsign/")
     (synopsis "OpenSMTPd filter for signing mail with DKIM")
     (description
@@ -3293,7 +3225,7 @@ messages with @acronym{DKIM, DomainKeys Identified Mail} (RFC 4871).")
                     (libexec (string-append out "/libexec/opensmtpd")))
                (setenv "GOBIN" libexec)))))))
     (native-inputs
-     `(("opensmtpd" ,opensmtpd)))
+     (list opensmtpd))
     (home-page "https://github.com/poolpOrg/filter-rspamd")
     (synopsis "OpenSMTPd filter to request an Rspamd analysis")
     (description
@@ -3314,30 +3246,30 @@ an SMTP transaction before a message is committed to queue.")
          (base32 "0a5ckbf8hc3y28b7p5psp0d4bxk601jlr5pd3hhh545xd8d9f0dg"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("gunicorn" ,gunicorn)
-       ("python-aiosmtpd" ,python-aiosmtpd)
-       ("python-alembic" ,python-alembic)
-       ("python-atpublic" ,python-atpublic)
-       ("python-authheaders" ,python-authheaders)
-       ("python-authres" ,python-authres)
-       ("python-click" ,python-click)
-       ("python-dateutil" ,python-dateutil)
-       ("python-dnspython" ,python-dnspython)
-       ("python-falcon" ,python-falcon)
-       ("python-flufl-bounce" ,python-flufl-bounce)
-       ("python-flufl-i18n" ,python-flufl-i18n)
-       ("python-flufl-lock" ,python-flufl-lock)
-       ("python-importlib-resources" ,python-importlib-resources)
-       ("python-lazr-config" ,python-lazr-config)
-       ("python-passlib" ,python-passlib)
-       ("python-requests" ,python-requests)
-       ("python-sqlalchemy" ,python-sqlalchemy)
-       ("python-zope-component" ,python-zope-component)
-       ("python-zope-configuration" ,python-zope-configuration)
-       ("python-zope-event" ,python-zope-event)
-       ("python-zope-interface" ,python-zope-interface)))
+     (list gunicorn
+           python-aiosmtpd
+           python-alembic
+           python-atpublic
+           python-authheaders
+           python-authres
+           python-click
+           python-dateutil
+           python-dnspython
+           python-falcon
+           python-flufl-bounce
+           python-flufl-i18n
+           python-flufl-lock
+           python-importlib-resources
+           python-lazr-config
+           python-passlib
+           python-requests
+           python-sqlalchemy
+           python-zope-component
+           python-zope-configuration
+           python-zope-event
+           python-zope-interface))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (home-page "https://www.list.org")
     (synopsis "Mailing list manager")
     (description
@@ -3351,19 +3283,19 @@ filtering, digest delivery, and more.")
 (define-public python-mailmanclient
   (package
     (name "python-mailmanclient")
-    (version "3.3.1")
+    (version "3.3.3")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "mailmanclient" version))
        (sha256
         (base32
-         "0pjgzpvhdb6ql8asb20xr8d01m646zpghmcp9fmscks0n1k4di4g"))))
+         "0ppqnv84v7npgjykhqdy5c38vanz4l0qw871kpsl27z4fm365zlj"))))
     (build-system python-build-system)
     (arguments
      `(#:tests? #f)) ; Requires mailman running
     (propagated-inputs
-     `(("python-requests" ,python-requests)))
+     (list python-requests))
     ;(native-inputs
     ; `(("mailman" ,mailman)
     ;   ("python-falcon" ,python-falcon)
@@ -3392,8 +3324,7 @@ the GNU Mailman 3 REST API.")
            (base32
             "0fdfs5g3pf30v2i7w18pdkv9xnfxmfcv66mzv56dck0a1igq07m3"))))
       (propagated-inputs
-       `(("python2-six" ,python2-six)
-         ("python2-httplib2" ,python2-httplib2))))))
+       (list python2-six python2-httplib2)))))
 
 (define-public mlmmj
   (package
@@ -3409,9 +3340,9 @@ the GNU Mailman 3 REST API.")
          "0hpj10qad821ci11si8xc2qnmkzfn90y13s43fm4fca38f0qjp8w"))))
     (build-system gnu-build-system)
     (inputs
-     `(("perl" ,perl))) ; For "contrib/web/"
+     (list perl)) ; For "contrib/web/"
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
      `(#:configure-flags
        ;; mlmmj-receive-strip is a replacement for mlmmj-receive
@@ -3457,14 +3388,14 @@ installation on systems where resources are limited.  Its features include:
 (define-public python-django-mailman3
   (package
     (name "python-django-mailman3")
-    (version "1.3.4")
+    (version "1.3.7")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "django-mailman3" version))
         (sha256
          (base32
-          "1yrm7wpjy34xai72vn2vkhc9131cdrbqy08rrabf36kynj5vcdvy"))))
+          "1dzycnwdr1gavs1dgmcv1lz24x0fkp8y864fy52fgbz72d6c5a3f"))))
     (build-system python-build-system)
     (arguments
      '(#:phases
@@ -3476,13 +3407,10 @@ installation on systems where resources are limited.  Its features include:
              (invoke "django-admin" "test"
                      "--pythonpath=."))))))
     (propagated-inputs
-     `(("python-django" ,python-django)
-       ("python-django-allauth" ,python-django-allauth)
-       ("python-django-gravatar2" ,python-django-gravatar2)
-       ("python-mailmanclient" ,python-mailmanclient)
-       ("python-pytz" ,python-pytz)))
+     (list python-django python-django-allauth python-django-gravatar2
+           python-mailmanclient python-pytz))
     (native-inputs
-     `(("python-mock" ,python-mock)))
+     (list python-mock))
     (home-page "https://gitlab.com/mailman/django-mailman3")
     (synopsis "Django library to help interaction with Mailman")
     (description
@@ -3493,34 +3421,21 @@ interacting with Mailman.")
 (define-public python-mailman-hyperkitty
   (package
     (name "python-mailman-hyperkitty")
-    (version "1.1.0")
+    (version "1.2.0")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "mailman-hyperkitty" version))
         (sha256
          (base32
-          "1lfqa9admhvdv71f528jmz2wl0i5cv77v6l64px2pm4zqr9ckkjx"))
-        (patches
-          (list
-            (origin
-              ;; see: https://gitlab.com/mailman/mailman-hyperkitty/issues/17
-              ;; fixes test_archive_message_unserializable
-              (method url-fetch)
-              (uri "https://salsa.debian.org/mailman-team/mailman-hyperkitty/raw/debian/1.1.0-9/debian/patches/0002-Skip-the-test_archive_message_unserializable.patch")
-              (sha256
-               (base32
-                "0p1fwm46c4bl81lvsg3kjhn2r1lwgkpgxamb3xyqn7h9qdrw10hw")))))))
+          "1ni6vf1yi14c0l895fk278x4na7ymhpkl1q0vnpzbkzplpa7200i"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-requests" ,python-requests)
-       ("python-zope-interface" ,python-zope-interface)))
+     (list python-requests python-zope-interface))
     (inputs
-     `(("mailman" ,mailman)))
+     (list mailman))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-nose" ,python-nose)
-       ("python-nose2" ,python-nose2)))
+     (list python-mock python-nose python-nose2))
     (home-page "https://gitlab.com/mailman/mailman-hyperkitty/")
     (synopsis "Mailman archiver plugin for HyperKitty")
     (description
@@ -3533,44 +3448,46 @@ which sends emails to HyperKitty, the official Mailman3 web archiver.")
 (define-public python-hyperkitty
   (package
     (name "python-hyperkitty")
-    (version "1.3.3")
+    (version "1.3.5")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "HyperKitty" version))
         (sha256
          (base32
-          "0p85r9q6mn5as5b39xp9hkkipnk0156acx540n2ygk3qb3jd4a5n"))))
+          "11lz1s2p8n43h1cdr9l5dppsigg8qdppckdwdndzn7a8r8mj4sc2"))))
     (build-system python-build-system)
     (arguments
      '(#:phases
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (setenv "PYTHONPATH" (string-append ".:" (getenv "PYTHONPATH")))
              (invoke "example_project/manage.py" "test"
-                     "--settings=hyperkitty.tests.settings_test"))))))
+                     "--settings=hyperkitty.tests.settings_test"
+                     "--pythonpath=."))))))
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-django" ,python-django-2.2)
-       ("python-django-compressor" ,python-django-compressor)
-       ("python-django-extensions" ,python-django-extensions)
-       ("python-django-gravatar2" ,python-django-gravatar2)
-       ("python-django-haystack" ,python-django-haystack)
-       ("python-django-mailman3" ,python-django-mailman3)
-       ("python-django-q" ,python-django-q)
-       ("python-djangorestframework" ,python-djangorestframework)
-       ("python-flufl-lock" ,python-flufl-lock)
-       ("python-mailmanclient" ,python-mailmanclient)
-       ("python-networkx" ,python-networkx)
-       ("python-pytz" ,python-pytz)
-       ("python-robot-detection" ,python-robot-detection)))
+     (list python-dateutil
+           python-django
+           python-django-compressor
+           python-django-extensions
+           python-django-gravatar2
+           python-django-haystack
+           python-django-mailman3
+           python-django-q
+           python-django-rest-framework
+           python-flufl-lock
+           python-mailmanclient
+           python-mistune-next
+           python-networkx
+           python-pytz
+           python-robot-detection))
     (native-inputs
-     `(("python-beautifulsoup4" ,python-beautifulsoup4)
-       ("python-elasticsearch" ,python-elasticsearch)
-       ("python-isort" ,python-isort)
-       ("python-mock" ,python-mock)
-       ("python-whoosh" ,python-whoosh)))
+     (list python-beautifulsoup4
+           python-elasticsearch
+           python-isort
+           python-lxml
+           python-mock
+           python-whoosh))
     (home-page "https://gitlab.com/mailman/hyperkitty")
     (synopsis "Web interface to access GNU Mailman v3 archives")
     (description
@@ -3603,15 +3520,10 @@ some configuration.")
                  #t))))
        #:tests? #f)) ; Tests try to run a mailman instance to test against.
     (inputs
-     `(("python-django" ,python-django)
-       ("python-django-mailman3" ,python-django-mailman3)
-       ("python-mailmanclient" ,python-mailmanclient)
-       ("python-readme-renderer" ,python-readme-renderer)))
+     (list python-readme-renderer python-mailmanclient
+           python-django-2.2 python-django-mailman3))
     (native-inputs
-     `(("python-beautifulsoup4" ,python-beautifulsoup4)
-       ("python-isort" ,python-isort)
-       ("python-mock" ,python-mock)
-       ("python-vcrpy" ,python-vcrpy)))
+     (list python-beautifulsoup4 python-isort python-mock python-vcrpy))
     (home-page "https://gitlab.com/mailman/postorius")
     (synopsis "Web user interface for GNU Mailman")
     (description
@@ -3669,10 +3581,7 @@ on the fly.  Both programs are written in C and are very fast.")
         (base32 "131i2b1yxhnbqkfk4kky40pfanqw2c5lcgbnjhfqp5cvpawpk2ai"))))
     (build-system perl-build-system)
     (inputs
-     `(("perl-io-socket-inet6" ,perl-io-socket-inet6)
-       ("perl-net-dns" ,perl-net-dns)
-       ("perl-net-ssleay" ,perl-net-ssleay)
-       ("perl-socket6" ,perl-socket6))) ; used by perl-io-socket-inet6
+     (list perl-io-socket-inet6 perl-net-dns perl-net-ssleay perl-socket6)) ; used by perl-io-socket-inet6
     (arguments
      `(#:tests? #f                      ; no tests
        #:phases
@@ -3713,7 +3622,7 @@ operators and scripters.")
 (define-public alpine
   (package
     (name "alpine")
-    (version "2.24.2")
+    (version "2.25")
     (source
      (origin
        (method git-fetch)
@@ -3726,13 +3635,14 @@ operators and scripters.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0ibwss04j4qbhpd3jcw3d4xjf8jnmb9fi3sz58a99xw3awkfjabd"))
+        (base32 "0z6dp3cpz1dmbxw41ravsx1bxychafp0ij8gvj96mzz7rm9pdnq3"))
        (modules '((guix build utils)))
        (snippet
         '(begin
            ;; Remove pre-built binaries scattered across the source repository.
-           (for-each delete-file (find-files "." "\\.(dll|exe)"))
-           #t))))
+           (for-each delete-file (find-files "." "\\.(dll|exe)"))))
+       (patches
+        (search-patches "alpine-fix-privacy-policy-crash.patch"))))
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags
@@ -3758,24 +3668,22 @@ operators and scripters.")
            ;; ‘/etc/shadow exists in the build environment’.  It does not.
            (lambda _
              (substitute* "configure"
-               (("test -f /etc/shadow") "true"))
-             #t))
+               (("test -f /etc/shadow") "true"))))
          (add-after 'unpack 'make-reproducible
            (lambda _
              ;; This removes time-dependent code to make alpine reproducible.
              (substitute* "pico/blddate.c"
-               (("%02d-%s-%d") "1970-01-01"))
-             #t)))))
+               (("%02d-%s-%d") "1970-01-01")))))))
     (inputs
-     `(("ncurses" ,ncurses)
-       ("openssl" ,openssl)
-       ("gnutls" ,gnutls)
-       ("openldap" ,openldap)
-       ("cyrus-sasl" ,cyrus-sasl)
-       ("mit-krb5" ,mit-krb5)
-       ("aspell" ,aspell)
-       ("tcl" ,tcl)
-       ("linux-pam" ,linux-pam)))
+     (list ncurses
+           openssl
+           gnutls
+           openldap
+           cyrus-sasl
+           mit-krb5
+           aspell
+           tcl
+           linux-pam))
     (home-page "https://repo.or.cz/alpine.git")
     (synopsis "Alternatively Licensed Program for Internet News and Email")
     (description
@@ -3813,30 +3721,27 @@ tools and applications:
          "--with-compface"
          "--with-ldap")))
     (inputs
-     `(("cyrus-sasl" ,cyrus-sasl)
-       ("enchant" ,enchant)
-       ("gdk-pixbuf" ,gdk-pixbuf)
-       ("gmime" ,gmime)
-       ("gnutls" ,gnutls)
-       ("gpgme" ,gpgme)
-       ("gtk+" ,gtk+)
-       ("gtksourceview" ,gtksourceview)
-       ("gtkspell3" ,gtkspell3)
-       ("libassuan" ,libassuan)         ; in gpgme.pc Requires
-       ("libcanberra" ,libcanberra)
-       ("libesmtp" ,libesmtp)
-       ("libical" ,libical)
-       ("libnotify" ,libnotify)
-       ("libsecret" ,libsecret)
-       ("openldap" ,openldap)
-       ("sqlite" ,sqlite)
-       ("webkitgtk" ,webkitgtk)))
+     (list cyrus-sasl
+           enchant
+           gdk-pixbuf
+           gmime
+           gnutls
+           gpgme
+           gtk+
+           gtksourceview
+           gtkspell3
+           libassuan ; in gpgme.pc Requires
+           libcanberra
+           libesmtp
+           libical
+           libnotify
+           libsecret
+           openldap
+           sqlite
+           webkitgtk))
     (native-inputs
-     `(("compface" ,compface)
-       ("glib" ,glib "bin")
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)
-       ("yelp-tools" ,yelp-tools)))
+     (list compface
+           `(,glib "bin") intltool pkg-config yelp-tools))
     (home-page "https://pawsa.fedorapeople.org/balsa")
     (synopsis "E-mail client for GNOME")
     (description "Balsa is a highly configurable and robust mail client for
@@ -3858,13 +3763,9 @@ the use of a local MTA such as Sendmail.")
          "0wpfqbqjlfb9z0hafvdhkm7qw56cr9kfy6n8vb0q42dwlghpz1ff"))))
     (build-system python-build-system)
     (inputs
-     `(("notmuch" ,notmuch)
-       ("python-chardet" ,python-chardet)
-       ("python-dkimpy" ,python-dkimpy)
-       ("python-notmuch" ,python-notmuch)))
+     (list notmuch python-chardet python-dkimpy python-notmuch))
     (native-inputs
-     `(("python-freezegun" ,python-freezegun)
-       ("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-freezegun python-setuptools-scm))
     (home-page "https://github.com/afewmail/afew")
     (synopsis "Initial tagging script for notmuch mail")
     (description "afew is an initial tagging script for notmuch mail.  It
@@ -3876,41 +3777,40 @@ killed threads.")
 (define-public pan
   (package
     (name "pan")
-    (version "0.147")
+    (version "0.149")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "http://pan.rebelbase.com/download/releases/"
                            version "/source/" name "-" version ".tar.bz2"))
        (sha256
-        (base32 "0960siaf0r6m18kv0d8aqpf36x2xbsfcvk07kswlany7jbxrhylr"))))
+        (base32 "1sl5rdgalswxya61vhkf28r0fb4b3pq77qgzhhsfagmpvgbx0d2x"))))
     (arguments
-     `(#:configure-flags '("--with-gtk3" "--with-gtkspell" "--with-gnutls"
-                           "--enable-libnotify" "--enable-manual"
-                           "--enable-gkr")
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'patch-gpg2
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "pan/usenet-utils/gpg.cc"
-               (("\"gpg2\"") (string-append "\""
-                                            (assoc-ref inputs "gnupg")
-                                            "/bin/gpg\"")))
-             #t)))))
+     (list #:configure-flags
+           #~(list "--with-gtk3" "--with-gtkspell" "--with-gnutls"
+                   "--enable-libnotify" "--enable-manual"
+                   "--enable-gkr")
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-before 'configure 'patch-gpg2
+                 (lambda* (#:key inputs #:allow-other-keys)
+                   (substitute* "pan/usenet-utils/gpg.cc"
+                     (("\"gpg2\"")
+                      (string-append "\""
+                                     (search-input-file inputs "/bin/gpg")
+                                     "\""))))))))
     (inputs
-     `(("gmime" ,gmime-2.6)
-       ("gnupg" ,gnupg)
-       ("gnutls" ,gnutls)
-       ("gtk+" ,gtk+)
-       ("gtkspell3" ,gtkspell3)
-       ("libnotify" ,libnotify)
-       ("libsecret" ,libsecret)
-       ("libxml2" ,libxml2)
-       ("zlib" ,zlib)))
+     (list gmime
+           gnupg
+           gnutls
+           gtk+
+           gtkspell3
+           libnotify
+           libsecret
+           libxml2
+           zlib))
     (native-inputs
-     `(("gettext-minimal" ,gettext-minimal)
-       ("itstool" ,itstool)
-       ("pkg-config" ,pkg-config)))
+     (list gettext-minimal itstool pkg-config))
     (build-system gnu-build-system)
     (home-page "http://pan.rebelbase.com/")
     (synopsis "Pan newsreader")
@@ -3943,9 +3843,7 @@ PGP handling, multiple servers, and secure connections.")
        (modify-phases %standard-phases
          (delete 'configure))))         ; no configure script
     (inputs
-     `(("lua" ,lua)
-       ("pcre2" ,pcre2)
-       ("openssl" ,openssl)))
+     (list lua pcre2 openssl))
     (home-page "https://github.com/lefcha/imapfilter")
     (synopsis "IMAP mail filtering utility")
     (description "IMAPFilter is a mail filtering utility.  It connects
@@ -3958,16 +3856,16 @@ servers.  The 4rev1 and 4 versions of IMAP are supported.")
 (define-public urlscan
   (package
     (name "urlscan")
-    (version "0.9.6")
+    (version "0.9.8")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "urlscan" version))
         (sha256
-         (base32 "09lxi7dhn49fpb3ij4cgrhj3qqqqs9rcxbjb7p9smw5wblrqpzga"))))
+         (base32 "1imrg2r9cshfvdwkdkm9y4i58qzkgnnwkswmh3kgy38m334mlcyf"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-urwid" ,python-urwid)))
+     (list python-urwid))
     (home-page "https://github.com/firecat53/urlscan")
     (synopsis "View/select the URLs in an email message or file")
     (description
@@ -3995,8 +3893,7 @@ It is a replacement for the @command{urlview} program.")
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (arguments `(#:parallel-tests? #f)) ;tests are side-effect'y
     (home-page "https://github.com/verdammelt/tnef")
     (synopsis "Unpack @code{application/ms-tnef} attachments")
@@ -4006,8 +3903,8 @@ It is a replacement for the @command{urlview} program.")
     (license license:gpl2+)))
 
 (define-public mumi
-  (let ((commit "9f070bd90adc67064cd8aff4e40f303d5957ef4a")
-        (revision "5"))
+  (let ((commit "8a45281801ade7524dbdee423c28b326051719de")
+        (revision "6"))
     (package
       (name "mumi")
       (version (git-version "0.0.1" revision commit))
@@ -4019,7 +3916,7 @@ It is a replacement for the @command{urlview} program.")
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "1ym1j3nzy8qhd1ydadccbgm0nckkmnq3vnz9qh9x8rasx7zg1ldp"))))
+                  "0p1i66j721y5hwbdy97kv4gw892nx7xrdfjrs12fn90cwkl611mp"))))
       (build-system gnu-build-system)
       (arguments
        `(#:modules ((guix build gnu-build-system)
@@ -4045,8 +3942,7 @@ It is a replacement for the @command{urlview} program.")
                    `("GUILE_LOAD_PATH" ":" prefix
                      (,scm ,(getenv "GUILE_LOAD_PATH")))
                    `("GUILE_LOAD_COMPILED_PATH" ":" prefix
-                     (,go ,(getenv "GUILE_LOAD_COMPILED_PATH"))))
-                 #t))))))
+                     (,go ,(getenv "GUILE_LOAD_COMPILED_PATH"))))))))))
       (inputs
        `(("guile-email" ,guile-email-latest)
          ("guile-fibers" ,guile-fibers)
@@ -4059,9 +3955,7 @@ It is a replacement for the @command{urlview} program.")
          ("guile" ,guile-3.0)
          ("mailutils" ,mailutils)))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("pkg-config" ,pkg-config)))
+       (list autoconf automake pkg-config))
       (home-page "https://git.elephly.net/software/mumi.git")
       (synopsis "Debbugs web interface")
       (description "Mumi is a Debbugs web interface.")
@@ -4084,9 +3978,7 @@ It is a replacement for the @command{urlview} program.")
                                        "ytnef-CVE-2021-3404.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (home-page "https://github.com/Yeraze/ytnef/")
     (synopsis "TNEF stream reader for winmail.dat files")
     (description "This package provides a TNEF stream reader library and
@@ -4111,7 +4003,7 @@ related tools to process winmail.dat files.")
           (base32 "0hxz8i70v1xgv30zjclfvmjqszn073c7i8nwmswi2lr6vd7cklvp"))))
       (build-system gnu-build-system)
       (inputs
-       `(("libgit2" ,libgit2)))
+       (list libgit2))
       (arguments
        `(#:phases
          (modify-phases %standard-phases
@@ -4181,39 +4073,37 @@ Git and exports them in maildir format or to an MDA through a pipe.")
                     ;; 'git' is invoked in various files of the PublicInbox
                     ;; perl module.
                     `("PATH" ":" prefix
-                      (,(string-append (assoc-ref inputs "git") "/bin")))))
+                      (,(dirname (search-input-file inputs "/bin/git"))))))
                 (find-files (string-append out "/bin"))))
              #t)))))
     (native-inputs
-     `(("xapian" ,xapian)
-       ;; For testing.
-       ("lsof" ,lsof)
-       ("openssl" ,openssl)))
+     (list xapian
+           ;; For testing.
+           lsof openssl))
     (inputs
-     `(("git" ,git)
-       ("perl-dbd-sqlite" ,perl-dbd-sqlite)
-       ("perl-dbi" ,perl-dbi)
-       ("perl-email-address-xs" ,perl-email-address-xs)
-       ("perl-email-mime-contenttype" ,perl-email-mime-contenttype)
-       ("perl-email-mime" ,perl-email-mime)
-       ("perl-email-simple" ,perl-email-simple)
-       ("perl-net-server" ,perl-net-server)
-       ("perl-plack-middleware-deflater" ,perl-plack-middleware-deflater)
-       ("perl-plack-middleware-reverseproxy" ,perl-plack-middleware-reverseproxy)
-       ("perl-plack" ,perl-plack)
-       ("perl-search-xapian" ,perl-search-xapian)
-       ("perl-timedate" ,perl-timedate)
-       ("perl-uri-escape" ,perl-uri-escape)
-       ("perl-inline-c" ,perl-inline-c)
-       ("perl-parse-recdescent" ,perl-parse-recdescent)
-       ("perl-linux-inotify2" ,perl-linux-inotify2)
-       ;; FIXME: Perl modules are unable to find the config file for highlight
-       ;; https://issues.guix.gnu.org/48033#4
-       ;; ("highlight" ,highlight)
-
-       ;; For testing.
-       ("perl-ipc-run" ,perl-ipc-run)
-       ("perl-xml-feed" ,perl-xml-feed)))
+     (list git
+           perl-dbd-sqlite
+           perl-dbi
+           perl-email-address-xs
+           perl-email-mime-contenttype
+           perl-email-mime
+           perl-email-simple
+           perl-net-server
+           perl-plack-middleware-deflater
+           perl-plack-middleware-reverseproxy
+           perl-plack
+           perl-search-xapian
+           perl-timedate
+           perl-uri-escape
+           perl-inline-c
+           perl-parse-recdescent
+           perl-linux-inotify2
+           ;; FIXME: Perl modules are unable to find the config file for highlight
+           ;; https://issues.guix.gnu.org/48033#4
+           ;; ("highlight" ,highlight)
+           ;; For testing.
+           perl-ipc-run
+           perl-xml-feed))
     (home-page "https://public-inbox.org/README.html")
     (synopsis "Archive mailing lists in Git repositories")
     (description
@@ -4235,17 +4125,17 @@ IMAP, Atom feeds or HTML archives.")
                 "0j9y5vdzch251s264diw9clrn88dn20bqqkwfmis9l7m8vmwasqd"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("bogofilter" ,bogofilter)
-       ("compface" ,compface)
-       ("gnupg" ,gnupg-1)
-       ("gpgme" ,gpgme)
-       ("gtk+-2.0" ,gtk+-2)
-       ("gtkspell" ,gtkspell3)
-       ("libnsl" ,libnsl)
-       ("openldap" ,openldap)
-       ("openssl" ,openssl)))
+     (list bogofilter
+           compface
+           gnupg-1
+           gpgme
+           gtk+-2
+           gtkspell3
+           libnsl
+           openldap
+           openssl))
     (home-page "https://sylpheed.sraoss.jp/en/")
     (synopsis "Lightweight GTK+ email client")
     (description
@@ -4316,12 +4206,11 @@ and Conformance}
            (lambda _
              (invoke "python" "test.py"))))))
     (propagated-inputs
-     `(("python-dnspython" ,python-dnspython)))
+     (list python-dnspython))
     (native-inputs
-     `(("python-authres" ,python-authres)
-       ("python-pynacl" ,python-pynacl)))
+     (list python-authres python-pynacl))
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (home-page "https://launchpad.net/dkimpy")
     (synopsis "DKIM (DomainKeys Identified Mail)")
     (description "Python module that implements @dfn{DKIM} (DomainKeys
@@ -4344,10 +4233,8 @@ the RFC 8617 Authenticated Received Chain (ARC) protocol.")
           "14k6i72k5f8dyvps8vc0aq0cczc8lvqpgjfjzsy6qqychjvjcmwk"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-authres" ,python-authres)
-       ("python-dkimpy" ,python-dkimpy)
-       ("python-dnspython" ,python-dnspython)
-       ("python-publicsuffix2" ,python-publicsuffix2)))
+     (list python-authres python-dkimpy python-dnspython
+           python-publicsuffix2))
     (home-page "https://github.com/ValiMail/authentication-headers")
     (synopsis "Library wrapping email authentication header verification and generation")
     (description
@@ -4385,10 +4272,9 @@ DKIM and ARC sign messages and output the corresponding signature headers.")
            (lambda _
              (invoke "python" "-m" "nose2" "-v"))))))
     (native-inputs
-     `(("python-flufl-testing" ,python-flufl-testing)
-       ("python-nose2" ,python-nose2)))
+     (list python-flufl-testing python-nose2))
     (propagated-inputs
-     `(("python-atpublic" ,python-atpublic)))
+     (list python-atpublic))
     (home-page "https://aiosmtpd.readthedocs.io/")
     (synopsis "Asyncio based SMTP server")
     (description
@@ -4432,19 +4318,19 @@ on RFC 3501 and original @code{imaplib} module.")
     (arguments
      '(#:configure-flags '("-DENABLE_LUAJIT=ON")))
     (inputs
-     `(("openssl" ,openssl)
-       ("glib" ,glib)
-       ("ragel" ,ragel)
-       ("luajit" ,luajit)
-       ("sqlite" ,sqlite)
-       ("file" ,file)
-       ("icu4c" ,icu4c)
-       ("pcre" ,pcre)
-       ("zlib" ,zlib)
-       ("perl" ,perl)
-       ("libsodium" ,libsodium)))
+     (list openssl
+           glib
+           ragel
+           luajit
+           sqlite
+           file
+           icu4c
+           pcre
+           zlib
+           perl
+           libsodium))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "Spam filtering system")
     (description "Rspamd is an advanced spam filtering system that
 allows evaluation of messages by a number of rules including regular
@@ -4486,12 +4372,9 @@ undelete email messages from Outlook Express .dbx files.")
          "0hhbbb8ddsgjhv9y1xd8s9ixlhdnjmhw12v06jwx4j6vpgp1na9x"))))
     (build-system gnu-build-system)
     (inputs
-     `(("boost" ,boost)
-       ("libgsf" ,libgsf)
-       ("python" ,python)
-       ("zlib" ,zlib)))
+     (list boost libgsf python zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.five-ten-sg.com/libpst/")
     (synopsis "")
     (description "The Libpst utilities include @code{readpst} which can
@@ -4500,6 +4383,41 @@ which can convert the contacts to @code{.ldif} format for import into LDAP
 databases, and other tools to process Outlook email archives.")
     (license license:gpl2+)))
 
+(define-public neatmail
+  (package
+    (name "neatmail")
+    (version "02")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url "https://github.com/aligrudi/neatmail")
+         (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "00d453d57d3v6ja2gpmjd8vch804c72g38pc1nr5shmz3hkgd52d"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f                      ;no tests
+       #:make-flags `((string-append "CC=" ,(cc-for-target)))
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)            ;no configure script
+         (replace 'install              ;no install target in the Makefile
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out  (assoc-ref outputs "out"))
+                    (bin  (string-append out "/bin")))
+               (rename-file "mail" "neatmail")
+               (install-file "neatmail" bin)))))))
+    (home-page "https://litcave.rudi.ir/")
+    (synopsis "Text-mode mail client")
+    (description
+     "@command{neatmail} is a noninteractive mail client.  It generates
+a listing of the messages in a mailbox in mbox format and executes a list of
+ex-like commands on it.")
+    (license license:isc)))
+
 (define-public crm114
   (package
     (name "crm114")
@@ -4534,7 +4452,12 @@ databases, and other tools to process Outlook email archives.")
              ;; Inline functions can only be used from the same compilation
              ;; unit. This causes the build to fail.
              (substitute* "crm_svm_matrix.c"
-               (("^inline ") ""))))
+               (("^inline ") ""))
+             ;; Building with gcc 10 fails without the -fcommon flag. Add it
+             ;; to CFLAGS.
+             (substitute* "Makefile"
+               (("CFLAGS \\+= -DVERSION")
+                "CFLAGS += -fcommon -DVERSION"))))
          (add-before 'install 'pre-install
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
@@ -4564,7 +4487,7 @@ databases, and other tools to process Outlook email archives.")
          (add-after 'emacs-build 'validate-compiled-autoloads
            (assoc-ref emacs:%standard-phases 'validate-compiled-autoloads)))))
     (inputs
-     `(("tre" ,tre)))
+     (list tre))
     (native-inputs
      `(("emacs" ,emacs-minimal)))
     (home-page "http://crm114.sourceforge.net/")
@@ -4577,3 +4500,80 @@ regexes, approximate regexes, a Hidden Markov Model, Orthogonal Sparse
 Bigrams, WINNOW, Correlation, KNN/Hyperspace, or Bit Entropy (or by other
 means--it's all programmable).")
     (license license:gpl3)))
+
+(define-public rss2email
+  (package
+    (name "rss2email")
+    (version "3.13.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/rss2email/rss2email")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0g1yr3v3ibdh2jqil64fbdbplx5m2yzxr893fqfkwcc5c7fbwl4d"))))
+    (build-system python-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (with-directory-excursion "test"
+                 ;; Skip networking tests
+                 (substitute* "test.py"
+                   (("( *)class (:?TestSend|TestFetch).*" match indent)
+                    (string-append indent "@unittest.skip(\"Networking stuff skipped\")\n"
+                                   indent match)))
+                 (invoke "python" "-m" "unittest"))))))))
+    (inputs
+     (list python-feedparser python-html2text))
+    (home-page "https://github.com/rss2email/rss2email")
+    (synopsis "Converts RSS/Atom newsfeeds to email")
+    (description "The RSS2email program (@command{r2e}) fetches RSS/Atom news
+feeds, converts them into emails, and sends them.")
+    ;; GPL version 2 or 3.  NOT 2+.
+    (license (list license:gpl2
+                   license:gpl3))))
+
+(define-public sendgmail
+  (let ((commit "e3229155a4037267ce40f1a3a681f53221aa4d8d")
+        (revision "1"))
+    (package
+      (name "sendgmail")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/google/gmail-oauth2-tools")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (patches (search-patches
+                   "sendgmail-remove-domain-restriction.patch"
+                   "sendgmail-accept-ignored-gsuite-flag.patch"))
+         (sha256
+          (base32
+           "1cxpkiaajhq1gjsg47r2b5xgck0r63pvkyrkm7af8c8dw7fyn64f"))))
+      (inputs
+       (list go-golang-org-x-oauth2 go-cloud-google-com-go-compute-metadata))
+      (build-system go-build-system)
+      (arguments
+       '(#:unpack-path "github.com/google/gmail-oauth2-tools"
+         #:import-path "github.com/google/gmail-oauth2-tools/go/sendgmail"))
+      (home-page
+       "https://github.com/google/gmail-oauth2-tools/tree/master/go/sendgmail")
+      (synopsis
+       "Sendmail-compatible tool for using Gmail with @code{git send-email}")
+      (description
+       "The @command{sendgmail} command provides a minimal sendmail-compatible
+front-end that connects to Gmail using OAuth2.  It is specifically designed
+for use with @code{git send-email}.  The command needs a Gmail API key to
+function.
+
+Guix's version of @command{sendgmail} has been patched for compatibility with
+all known forks, including support for non-@code{@@gmail.com} email
+addresses.")
+      (license license:asl2.0))))
diff --git a/gnu/packages/make-bootstrap.scm b/gnu/packages/make-bootstrap.scm
index cdcb1dcaa2..4ea97368a9 100644
--- a/gnu/packages/make-bootstrap.scm
+++ b/gnu/packages/make-bootstrap.scm
@@ -1,11 +1,12 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018, 2019 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2018, 2019, 2021 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2019, 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2020 Mathieu Othacehe <m.othacehe@gmail.com>
+;;; Copyright © 2021 Pierre Langlois <pierre.langlois@gmx.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -23,13 +24,14 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages make-bootstrap)
+  #:use-module (guix gexp)
   #:use-module (guix utils)
   #:use-module (guix packages)
   #:use-module (guix memoization)
   #:use-module ((guix licenses) #:select (gpl3+))
   #:use-module (guix build-system trivial)
   #:use-module (guix build-system gnu)
-  #:use-module ((gnu packages) #:select (search-patch))
+  #:use-module ((gnu packages) #:select (search-patch search-patches))
   #:use-module (gnu packages base)
   #:use-module (gnu packages cross-base)
   #:use-module (gnu packages bash)
@@ -72,8 +74,10 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
     (package
       (inherit base)
       (source (origin (inherit (package-source base))
-                      (patches (cons (search-patch "glibc-bootstrap-system.patch")
-                                     (origin-patches (package-source base))))))
+                      (patches (append (search-patches
+                                        "glibc-bootstrap-system.patch"
+                                        "glibc-static-nss.patch")
+                                   (origin-patches (package-source base))))))
       (arguments
        (substitute-keyword-arguments (package-arguments base)
          ((#:configure-flags flags)
@@ -83,6 +87,12 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
                   "--enable-static-nss"
                   ,flags))))
 
+      ;; Make sure to build glibc with the same compiler version as the rest
+      ;; of the bootstrap.  Otherwise it fails to statically link on aarch64.
+      (native-inputs
+       `(("gcc" ,gcc-7)
+         ,@(package-native-inputs base)))
+
       ;; Remove the 'debug' output to allow bit-reproducible builds (when the
       ;; 'debug' output is used, ELF files end up with a .gnu_debuglink, which
       ;; includes a CRC of the corresponding debugging symbols; those symbols
@@ -203,8 +213,17 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
                                   (("^xz_LDADD =")
                                    "xz_LDADD = -all-static"))
                                 #t)))))))
-        (gawk (package (inherit gawk)
-                (source (origin (inherit (package-source gawk))
+        (gawk (package
+                (inherit gawk)
+                (source (origin
+                          (inherit (package-source gawk))
+                          (modules '((guix build utils)))
+                          (snippet
+                           ;; Do not build 'getopt.c' since that leads to a
+                           ;; link failure due to duplicate symbols with
+                           ;; 'libc.a'.
+                           '(substitute* "support/Makefile.in"
+                              (("getopt\\.\\$\\(OBJEXT\\)") "")))
                           (patches (cons (search-patch "gawk-shell.patch")
                                          (origin-patches
                                           (package-source gawk))))))
@@ -213,7 +232,9 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
                    ;; plug-in mechanism just fail on static builds:
                    ;;
                    ;; ./fts.awk:1: error: can't open shared library `filefuncs' for reading (No such file or directory)
-                   #:tests? #f
+                   ;;
+                   ;; Therefore disable extensions support.
+                   #:configure-flags (list "--disable-extensions")
 
                    ,@(substitute-keyword-arguments (package-arguments gawk)
                        ((#:phases phases)
@@ -260,19 +281,9 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
                        (delete 'fix-egrep-and-fgrep)))))))
         (finalize (compose static-package
                            package-with-relocatable-glibc)))
-    `(,@(map (match-lambda
-              ((name package)
-               (list name (finalize package))))
-             `(("tar" ,tar)
-               ("gzip" ,gzip)
-               ("bzip2" ,bzip2)
-               ("xz" ,xz)
-               ("patch" ,patch)
-               ("coreutils" ,coreutils)
-               ("sed" ,sed)
-               ("grep" ,grep)
-               ("gawk" ,gawk)))
-      ("bash" ,static-bash))))
+    (append (map finalize
+                 (list tar gzip bzip2 xz patch coreutils sed grep gawk))
+        (list static-bash))))
 
 (define %static-binaries
   (package
@@ -317,7 +328,10 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
             ;; same name as the input.
             (for-each (match-lambda
                        ((name . dir)
-                        (let ((source (string-append dir "/bin/" name)))
+                        (let* ((name   (if (string-prefix? "bash" name)
+                                           "bash"
+                                           name))
+                               (source (string-append dir "/bin/" name)))
                           (format #t "copying ~s...~%" source)
                           (copy-file source
                                      (string-append bin "/" name)))))
@@ -362,7 +376,7 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
                 (out (assoc-ref %outputs "out")))
            (copy-linux-headers out in)
            #t))))
-    (inputs `(("linux-libre-headers" ,linux-libre-headers)))))
+    (inputs (list linux-libre-headers))))
 
 (define %binutils-static
   ;; Statically-linked Binutils.
@@ -374,10 +388,6 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
                                              (package-arguments binutils))
                                   ((#:configure-flags flags _ ...)
                                    flags)))
-       #:make-flags ,(match (memq #:make-flags (package-arguments binutils))
-                       ((#:make-flags flags _ ...)
-                        flags)
-                       (_ ''()))
        #:strip-flags '("--strip-all")
        #:phases (modify-phases %standard-phases
                   (add-before 'configure 'all-static
@@ -395,32 +405,31 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
 
 (define %binutils-static-stripped
   ;; The subset of Binutils that we need.
-  (package (inherit %binutils-static)
+  (package
+    (inherit %binutils-static)
     (name (string-append (package-name %binutils-static) "-stripped"))
     (build-system trivial-build-system)
     (outputs '("out"))
     (arguments
-     `(#:modules ((guix build utils))
-       #:builder
-       (begin
-         (use-modules (guix build utils))
-
-         (setvbuf (current-output-port)
-                  (cond-expand (guile-2.0 _IOLBF) (else 'line)))
-         (let* ((in  (assoc-ref %build-inputs "binutils"))
-                (out (assoc-ref %outputs "out"))
-                (bin (string-append out "/bin")))
-           (mkdir-p bin)
-           (for-each (lambda (file)
-                       (let ((target (string-append bin "/" file)))
-                         (format #t "copying `~a'...~%" file)
-                         (copy-file (string-append in "/bin/" file)
-                                    target)
-                         (remove-store-references target)))
-                     '("ar" "as" "ld" "nm"  "objcopy" "objdump"
-                       "ranlib" "readelf" "size" "strings" "strip"))
-           #t))))
-    (inputs `(("binutils" ,%binutils-static)))))
+     (list #:modules '((guix build utils))
+           #:builder
+           #~(begin
+               (use-modules (guix build utils))
+
+               (setvbuf (current-output-port)
+                        (cond-expand (guile-2.0 _IOLBF) (else 'line)))
+               (let* ((in  #$%binutils-static)
+                      (out #$output)
+                      (bin (string-append out "/bin")))
+                 (mkdir-p bin)
+                 (for-each (lambda (file)
+                             (let ((target (string-append bin "/" file)))
+                               (format #t "copying `~a'...~%" file)
+                               (copy-file (string-append in "/bin/" file)
+                                          target)
+                               (remove-store-references target)))
+                           '("ar" "as" "ld" "nm"  "objcopy" "objdump"
+                             "ranlib" "readelf" "size" "strings" "strip"))))))))
 
 (define (%glibc-stripped)
   ;; GNU libc's essential shared libraries, dynamic linker, and headers,
@@ -441,7 +450,7 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
                                (assoc-ref %build-inputs "kernel-headers")))))
       (inputs `(("kernel-headers"
                  ,(if (or (and (%current-target-system)
-                               (hurd-triplet? (%current-target-system)))
+                               (target-hurd? (%current-target-system)))
                           (string-suffix? "-hurd" (%current-system)))
                       gnumach-headers
                       linux-libre-headers))
@@ -533,66 +542,64 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
 
 (define %gcc-stripped
   ;; The subset of GCC files needed for bootstrap.
-  (package (inherit gcc-7)
+  (package
+    (inherit gcc-7)
     (name "gcc-stripped")
     (build-system trivial-build-system)
     (source #f)
     (outputs '("out"))                            ;only one output
     (arguments
-     `(#:modules ((guix build utils))
-       #:builder
-       (begin
-         (use-modules (srfi srfi-1)
-                      (srfi srfi-26)
-                      (guix build utils))
-
-         (setvbuf (current-output-port)
-                  (cond-expand (guile-2.0 _IOLBF) (else 'line)))
-         (let* ((out        (assoc-ref %outputs "out"))
-                (bindir     (string-append out "/bin"))
-                (libdir     (string-append out "/lib"))
-                (includedir (string-append out "/include"))
-                (libexecdir (string-append out "/libexec"))
-                (gcc        (assoc-ref %build-inputs "gcc")))
-           (copy-recursively (string-append gcc "/bin") bindir)
-           (for-each remove-store-references
-                     (find-files bindir ".*"))
-
-           (copy-recursively (string-append gcc "/lib") libdir)
-           (for-each remove-store-references
-                     (remove (cut string-suffix? ".h" <>)
-                             (find-files libdir ".*")))
-
-           (copy-recursively (string-append gcc "/libexec")
-                             libexecdir)
-           (for-each remove-store-references
-                     (find-files libexecdir ".*"))
-
-           ;; Starting from GCC 4.8, helper programs built natively
-           ;; (‘genchecksum’, ‘gcc-nm’, etc.) rely on C++ headers.
-           (copy-recursively (string-append gcc "/include/c++")
-                             (string-append includedir "/c++"))
-
-           ;; For native builds, check whether the binaries actually work.
-           ,@(if (%current-target-system)
-                 '()
-                 '((for-each (lambda (prog)
-                               (invoke (string-append gcc "/bin/" prog)
-                                       "--version"))
-                             '("gcc" "g++" "cpp"))))
-
-           #t))))
-    (inputs `(("gcc" ,%gcc-static)))))
+     (list #:modules '((guix build utils))
+           #:builder
+           #~(begin
+               (use-modules (srfi srfi-1)
+                            (srfi srfi-26)
+                            (guix build utils))
+
+               (setvbuf (current-output-port)
+                        (cond-expand (guile-2.0 _IOLBF) (else 'line)))
+               (let* ((out        #$output)
+                      (bindir     (string-append out "/bin"))
+                      (libdir     (string-append out "/lib"))
+                      (includedir (string-append out "/include"))
+                      (libexecdir (string-append out "/libexec"))
+                      (gcc        #$%gcc-static))
+                 (copy-recursively (string-append gcc "/bin") bindir)
+                 (for-each remove-store-references
+                           (find-files bindir ".*"))
+
+                 (copy-recursively (string-append gcc "/lib") libdir)
+                 (for-each remove-store-references
+                           (remove (cut string-suffix? ".h" <>)
+                                   (find-files libdir ".*")))
+
+                 (copy-recursively (string-append gcc "/libexec")
+                                   libexecdir)
+                 (for-each remove-store-references
+                           (find-files libexecdir ".*"))
+
+                 ;; Starting from GCC 4.8, helper programs built natively
+                 ;; (‘genchecksum’, ‘gcc-nm’, etc.) rely on C++ headers.
+                 (copy-recursively (string-append gcc "/include/c++")
+                                   (string-append includedir "/c++"))
+
+                 ;; For native builds, check whether the binaries actually work.
+                 #$@(if (%current-target-system)
+                        '()
+                        '((for-each (lambda (prog)
+                                      (invoke (string-append gcc "/bin/" prog)
+                                              "--version"))
+                                    '("gcc" "g++" "cpp"))))))))))
 
 ;; Two packages: first build static, bare minimum content.
 (define %mescc-tools-static
   ;; A statically linked MesCC Tools.
   (package
-    (inherit mescc-tools-0.5.2)
+    (inherit mescc-tools)
     (name "mescc-tools-static")
     (arguments
      `(#:system "i686-linux"
-       ,@(substitute-keyword-arguments (package-arguments mescc-tools-0.5.2)
+       ,@(substitute-keyword-arguments (package-arguments mescc-tools)
            ((#:make-flags flags)
             `(cons "CC=gcc -static" ,flags)))))))
 
@@ -605,52 +612,47 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
     (name (string-append (package-name %mescc-tools-static) "-stripped"))
     (build-system trivial-build-system)
     (arguments
-     `(#:modules ((guix build utils))
-       #:builder
-       (begin
-         (use-modules (guix build utils))
-         (let* ((in  (assoc-ref %build-inputs "mescc-tools"))
-                (out (assoc-ref %outputs "out"))
-                (bin (string-append out "/bin")))
-           (mkdir-p bin)
-           (for-each (lambda (file)
-                       (let ((target (string-append bin "/" file)))
-                         (format #t "copying `~a'...~%" file)
-                         (copy-file (string-append in "/bin/" file)
-                                    target)
-                         (remove-store-references target)))
-                     '( "M1" "blood-elf" "hex2"))
-           #t))))
-    (inputs `(("mescc-tools" ,%mescc-tools-static)))))
+     (list #:modules '((guix build utils))
+           #:builder
+           #~(begin
+               (use-modules (guix build utils))
+               (let* ((in  #$%mescc-tools-static)
+                      (out #$output)
+                      (bin (string-append out "/bin")))
+                 (mkdir-p bin)
+                 (for-each (lambda (file)
+                             (let ((target (string-append bin "/" file)))
+                               (format #t "copying `~a'...~%" file)
+                               (copy-file (string-append in "/bin/" file)
+                                          target)
+                               (remove-store-references target)))
+                           '( "M1" "blood-elf" "hex2"))))))))
 
 ;; Two packages: first build static, bare minimum content.
 (define-public %mes-minimal
   ;; A minimal Mes without documentation.
-  (let ((triplet "i686-unknown-linux-gnu"))
-    (package
-      (inherit mes-0.19)
-      (name "mes-minimal")
-      (native-inputs
-       `(("guile" ,guile-2.2)))
-      (arguments
-       `(#:system "i686-linux"
-         #:strip-binaries? #f
-         #:configure-flags '("--mes")
-         #:phases
-         (modify-phases %standard-phases
-           (delete 'patch-shebangs)
-           (add-after 'install 'strip-install
-             (lambda _
-               (let* ((out (assoc-ref %outputs "out"))
-                      (share (string-append out "/share")))
-                 (delete-file-recursively (string-append out "/lib/guile"))
-                 (delete-file-recursively (string-append share "/guile"))
-                 (delete-file-recursively (string-append share "/mes/scaffold"))
-
-                 (for-each delete-file
-                           (find-files
-                            (string-append share "/mes/lib")
-                            "\\.(h|c)")))))))))))
+  (package
+    (inherit mes)
+    (name "mes-minimal")
+    (native-inputs (list guile-3.0))
+    (arguments
+     `(#:system "i686-linux"
+       #:strip-binaries? #f
+       #:configure-flags '("--mes")
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'patch-shebangs)
+         (add-after 'install 'strip-install
+           (lambda _
+             (let* ((out (assoc-ref %outputs "out"))
+                    (share (string-append out "/share")))
+               (delete-file-recursively (string-append out "/lib/guile"))
+               (delete-file-recursively (string-append share "/guile"))
+
+               (for-each delete-file
+                         (find-files
+                          (string-append share "/mes/lib")
+                          "\\.(h|c)"))))))))))
 
 ;; next remove store references.
 (define %mes-minimal-stripped
@@ -660,21 +662,20 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
     (name (string-append (package-name %mes-minimal) "-stripped"))
     (build-system trivial-build-system)
     (arguments
-     `(#:modules ((guix build utils))
-       #:builder
-       (begin
-         (use-modules (guix build utils))
-         (let ((in  (assoc-ref %build-inputs "mes"))
-               (out (assoc-ref %outputs "out")))
-
-           (copy-recursively in out)
-           (for-each (lambda (dir)
-                       (for-each remove-store-references
-                                 (find-files (string-append out "/" dir)
-                                             ".*")))
-                     '("bin" "share/mes"))
-           #t))))
-    (inputs `(("mes" ,%mes-minimal)))))
+     (list #:modules '((guix build utils))
+           #:allowed-references '()
+           #:builder
+           #~(begin
+               (use-modules (guix build utils))
+               (let ((in  #$%mes-minimal)
+                     (out #$output))
+
+                 (copy-recursively in out)
+                 (for-each (lambda (dir)
+                             (for-each remove-store-references
+                                       (find-files (string-append out "/" dir)
+                                                   ".*")))
+                           '("bin" "share/mes"))))))))
 
 (define* (make-guile-static guile patches)
   (package-with-relocatable-glibc
@@ -692,25 +693,22 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
       (outputs (delete "debug" (package-outputs guile)))
 
       (inputs
-       `(("libunistring:static" ,libunistring "static")
-         ,@(package-inputs guile)))
+       (modify-inputs (package-inputs guile)
+         (prepend `(,libunistring "static"))))
 
       (propagated-inputs
-       `(("bdw-gc" ,libgc/static-libs)
-         ,@(alist-delete "bdw-gc"
-                         (package-propagated-inputs guile))))
+       (modify-inputs (package-propagated-inputs guile)
+         (replace "bdw-gc" libgc/static-libs)))
       (arguments
        (substitute-keyword-arguments (package-arguments guile)
          ((#:configure-flags flags '())
           ;; When `configure' checks for ltdl availability, it
           ;; doesn't try to link using libtool, and thus fails
           ;; because of a missing -ldl.  Work around that.
-
-          ;; XXX: On ARMv7, disable JIT: it causes crashes with 3.0.2,
-          ;; possibly related to <https://bugs.gnu.org/40737>.
-          (if (target-arm32?)
-              ''("LDFLAGS=-ldl" "--disable-jit")
-              ''("LDFLAGS=-ldl")))
+          `(list "LDFLAGS=-ldl" "--enable-mini-gmp"
+                 ,@(if (hurd-target?)
+                       '("--disable-jit")
+                       '())))
          ((#:phases phases '%standard-phases)
           `(modify-phases ,phases
 
@@ -757,44 +755,41 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
     (build-system trivial-build-system)
     (arguments
      ;; The end result should depend on nothing but itself.
-     `(#:allowed-references ("out")
-       #:modules ((guix build utils))
-       #:builder
-       (let ((version ,(version-major+minor (package-version static-guile))))
-         (use-modules (guix build utils))
-
-         (let* ((in     (assoc-ref %build-inputs "guile"))
-                (out    (assoc-ref %outputs "out"))
-                (guile1 (string-append in "/bin/guile"))
-                (guile2 (string-append out "/bin/guile")))
-           (mkdir-p (string-append out "/share/guile/" version))
-           (copy-recursively (string-append in "/share/guile/" version)
-                             (string-append out "/share/guile/" version))
-
-           (mkdir-p (string-append out "/lib/guile/" version "/ccache"))
-           (copy-recursively (string-append in "/lib/guile/" version "/ccache")
-                             (string-append out "/lib/guile/" version "/ccache"))
-
-           (mkdir (string-append out "/bin"))
-           (copy-file guile1 guile2)
-
-           ;; Verify that the relocated Guile works.
-           ,@(if (%current-target-system)
-                 '()
-                 '((invoke guile2 "--version")))
-
-           ;; Strip store references.
-           (remove-store-references guile2)
-
-           ;; Verify that the stripped Guile works.  If it aborts, it could be
-           ;; that it tries to open iconv descriptors and fails because libc's
-           ;; iconv data isn't available (see `guile-default-utf8.patch'.)
-           ,@(if (%current-target-system)
-                 '()
-                 '((invoke guile2 "--version")))
-
-           #t))))
-    (inputs `(("guile" ,static-guile)))
+     (list #:allowed-references '("out")
+           #:modules '((guix build utils))
+           #:builder
+           #~(let ((version #$(version-major+minor (package-version static-guile))))
+               (use-modules (guix build utils))
+
+               (let* ((in     #$static-guile)
+                      (out    #$output)
+                      (guile1 (string-append in "/bin/guile"))
+                      (guile2 (string-append out "/bin/guile")))
+                 (mkdir-p (string-append out "/share/guile/" version))
+                 (copy-recursively (string-append in "/share/guile/" version)
+                                   (string-append out "/share/guile/" version))
+
+                 (mkdir-p (string-append out "/lib/guile/" version "/ccache"))
+                 (copy-recursively (string-append in "/lib/guile/" version "/ccache")
+                                   (string-append out "/lib/guile/" version "/ccache"))
+
+                 (mkdir (string-append out "/bin"))
+                 (copy-file guile1 guile2)
+
+                 ;; Verify that the relocated Guile works.
+                 #$@(if (%current-target-system)
+                        '()
+                        '((invoke guile2 "--version")))
+
+                 ;; Strip store references.
+                 (remove-store-references guile2)
+
+                 ;; Verify that the stripped Guile works.  If it aborts, it could be
+                 ;; that it tries to open iconv descriptors and fails because libc's
+                 ;; iconv data isn't available (see `guile-default-utf8.patch'.)
+                 #$@(if (%current-target-system)
+                        '()
+                        '((invoke guile2 "--version")))))))
     (outputs '("out"))
     (synopsis "Minimal statically-linked and relocatable Guile")))
 
@@ -809,37 +804,35 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
 
 (define (tarball-package pkg)
   "Return a package containing a tarball of PKG."
-  (package (inherit pkg)
+  (package
+    (inherit pkg)
     (name (string-append (package-name pkg) "-tarball"))
     (build-system trivial-build-system)
-    (native-inputs `(("tar" ,tar)
-                     ("xz" ,xz)))
-    (inputs `(("input" ,pkg)))
+    (native-inputs (list tar xz))
     (arguments
-     (let ((name    (package-name pkg))
-           (version (package-version pkg)))
-       `(#:modules ((guix build utils))
-         #:builder
-         (begin
-           (use-modules (guix build utils))
-           (let ((out   (assoc-ref %outputs "out"))
-                 (input (assoc-ref %build-inputs "input"))
-                 (tar   (assoc-ref %build-inputs "tar"))
-                 (xz    (assoc-ref %build-inputs "xz")))
-             (mkdir out)
-             (set-path-environment-variable "PATH" '("bin") (list tar xz))
-             (with-directory-excursion input
-               (invoke "tar" "cJvf"
-                       (string-append out "/"
-                                      ,name "-" ,version
-                                      "-"
-                                      ,(or (%current-target-system)
-                                           (%current-system))
-                                      ".tar.xz")
-                       "."
-                       ;; avoid non-determinism in the archive
-                       "--sort=name" "--mtime=@0"
-                       "--owner=root:0" "--group=root:0")))))))))
+     (list #:modules '((guix build utils))
+           #:builder
+           #~(begin
+               (use-modules (guix build utils))
+               (let ((out   #$output)
+                     (input #$pkg)
+                     (tar   #+(this-package-native-input "tar"))
+                     (xz    #+(this-package-native-input "xz")))
+                 (mkdir out)
+                 (set-path-environment-variable "PATH" '("bin") (list tar xz))
+                 (with-directory-excursion input
+                   (invoke "tar" "cJvf"
+                           (string-append out "/"
+                                          #$(package-name pkg) "-"
+                                          #$(package-version pkg)
+                                          "-"
+                                          #$(or (%current-target-system)
+                                                (%current-system))
+                                          ".tar.xz")
+                           "."
+                           ;; avoid non-determinism in the archive
+                           "--sort=name" "--mtime=@0"
+                           "--owner=root:0" "--group=root:0"))))))))
 
 (define %bootstrap-binaries-tarball
   ;; A tarball with the statically-linked bootstrap binaries.
@@ -882,36 +875,38 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
     (source #f)
     (build-system trivial-build-system)
     (arguments
-     `(#:modules ((guix build utils))
-       #:builder
-       (let ((out (assoc-ref %outputs "out")))
-         (use-modules (guix build utils)
-                      (ice-9 match)
-                      (srfi srfi-26))
-
-         (setvbuf (current-output-port)
-                  (cond-expand (guile-2.0 _IOLBF) (else 'line)))
-         (mkdir out)
-         (chdir out)
-         (for-each (match-lambda
-                    ((name . directory)
-                     (for-each (lambda (file)
-                                 (format #t "~a -> ~a~%" file out)
-                                 (symlink file (basename file)))
-                               (find-files directory "\\.tar\\."))))
-                   %build-inputs)
-         #t)))
-    (inputs `(("guile-tarball" ,%guile-bootstrap-tarball)
-              ,@(match (or (%current-target-system) (%current-system))
-                  ((or "i686-linux" "x86_64-linux")
-                   `(("bootstrap-mescc-tools" ,%mescc-tools-bootstrap-tarball)
-                     ("bootstrap-mes" ,%mes-bootstrap-tarball)
-                     ("bootstrap-linux-libre-headers"
-                      ,%linux-libre-headers-bootstrap-tarball)))
-                  (_ `(("gcc-tarball" ,%gcc-bootstrap-tarball)
-                       ("binutils-tarball" ,%binutils-bootstrap-tarball)
-                       ("glibc-tarball" ,(%glibc-bootstrap-tarball))
-                       ("coreutils&co-tarball" ,%bootstrap-binaries-tarball))))))
+     (list #:modules '((guix build utils))
+           #:builder
+           #~(begin
+               (use-modules (guix build utils)
+                            (ice-9 match)
+                            (srfi srfi-26))
+
+               (define out #$output)
+
+               (setvbuf (current-output-port)
+                        (cond-expand (guile-2.0 _IOLBF) (else 'line)))
+               (mkdir out)
+               (chdir out)
+               (for-each (match-lambda
+                           ((name . directory)
+                            (for-each (lambda (file)
+                                        (format #t "~a -> ~a~%" file out)
+                                        (symlink file (basename file)))
+                                      (find-files directory "\\.tar\\."))))
+                         %build-inputs))))
+    (inputs
+     (append (list %guile-bootstrap-tarball)
+         (match (or (%current-target-system) (%current-system))
+           ((or "i686-linux" "x86_64-linux")
+            (list %mescc-tools-bootstrap-tarball
+                  %mes-bootstrap-tarball
+                  %linux-libre-headers-bootstrap-tarball))
+           (_
+            (list %gcc-bootstrap-tarball
+                  %binutils-bootstrap-tarball
+                  (%glibc-bootstrap-tarball)
+                  %bootstrap-binaries-tarball)))))
     (synopsis "Tarballs containing all the bootstrap binaries")
     (description synopsis)
     (home-page #f)
diff --git a/gnu/packages/man.scm b/gnu/packages/man.scm
index 7db3da2bb7..a434c70576 100644
--- a/gnu/packages/man.scm
+++ b/gnu/packages/man.scm
@@ -4,10 +4,12 @@
 ;;; Copyright © 2015, 2016 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015 Alex Kost <alezost@gmail.com>
 ;;; Copyright © 2015, 2016, 2020 Efraim Flashner <efraim@flashner.co.il>
-;;; Copyright © 2017–2021 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2017–2022 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018, 2019 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2018, 2019 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2021 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -25,6 +27,7 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages man)
+  #:use-module (guix gexp)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix git-download)
   #:use-module (guix download)
@@ -36,6 +39,7 @@
   #:use-module (gnu packages dbm)
   #:use-module (gnu packages flex)
   #:use-module (gnu packages gawk)
+  #:use-module (gnu packages gettext)
   #:use-module (gnu packages groff)
   #:use-module (gnu packages less)
   #:use-module (gnu packages perl)
@@ -50,10 +54,9 @@
     (source
      (origin
        (method url-fetch)
-       (uri
-        (string-append "https://sourceforge.net/projects/xmltoman/files/"
-                       "xmltoman/xmltoman-" version ".tar.gz/xmltoman-"
-                       version ".tar.gz/download"))
+       (uri (string-append "mirror://sourceforge/xmltoman/xmltoman/"
+                           "xmltoman-" version ".tar.gz/"
+                           "xmltoman-" version ".tar.gz"))
        (sha256
         (base32 "1c0lvzr7kdy63wbn1jv6s126ds7add3pxqb0vlxd3v5a2sir91wl"))))
     (build-system gnu-build-system)
@@ -67,8 +70,7 @@
        (modify-phases %standard-phases
          (delete 'configure))))
     (propagated-inputs
-     `(("perl" ,perl)
-       ("perl-xml-parser" ,perl-xml-parser)))
+     (list perl perl-xml-parser))
     (synopsis "XML to Man converter")
     (description "XMLtoMan and XMLMantoHTML are two small scripts to convert xml
 to man pages in groff format or html.  It features the usual man page items such
@@ -133,83 +135,89 @@ a flexible and convenient way.")
                 "0mk7n7yn6scy785jhg1j14b3q9l0cgvpry49r0ldjsnizbnrjv5n"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'patch-source-shebangs 'patch-test-shebangs
-           (lambda* (#:key outputs #:allow-other-keys)
-             ;; Patch shebangs in test scripts.
-             (let ((out (assoc-ref outputs "out")))
-               (for-each (lambda (file)
-                           (substitute* file
-                             (("#! /bin/sh")
-                              (string-append "#!" (which "sh")))))
-                         (remove file-is-directory?
-                                 (find-files "src/tests" ".*")))
-               #t)))
-         (add-after 'unpack 'patch-absolute-paths
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "src/man.c"
-               (("\"iconv\"")
-                (string-append "\"" (which "iconv") "\"")))
-             ;; Embed an absolute reference to "preconv", otherwise it
-             ;; falls back to searching in PATH and ultimately fails
-             ;; to render unicode data (see <https://bugs.gnu.org/30785>).
-             (substitute* "lib/encodings.c"
-               (("groff_preconv = NULL")
-                (string-append "groff_preconv = \""
-                               (assoc-ref inputs "groff-minimal")
-                               "/bin/preconv\"")))
-             #t)))
-       #:configure-flags
-       (let ((groff (assoc-ref %build-inputs "groff"))
-             (groff-minimal (assoc-ref %build-inputs "groff-minimal"))
-             (less  (assoc-ref %build-inputs "less"))
-             (gzip  (assoc-ref %build-inputs "gzip"))
-             (bzip2 (assoc-ref %build-inputs "bzip2"))
-             (xz    (assoc-ref %build-inputs "xz"))
-             (util  (assoc-ref %build-inputs "util-linux")))
-         ;; Invoke groff, less, gzip, bzip2, and xz directly from the store.
-         (append (list ;; Disable setuid man user.
-                       "--disable-setuid"
-                       ;; Don't constrain ownership of system-wide cache files.
-                       ;; Otherwise creating the manpage database fails with
-                       ;; man-db > 2.7.5.
-                       "--disable-cache-owner"
-                       (string-append "--with-pager=" less "/bin/less")
-                       (string-append "--with-gzip=" gzip "/bin/gzip")
-                       (string-append "--with-bzip2=" bzip2 "/bin/gzip")
-                       (string-append "--with-xz=" xz "/bin/xz")
-                       (string-append "--with-col=" util "/bin/col")
-                       ;; The default systemd directories ignore --prefix.
-                       (string-append "--with-systemdsystemunitdir="
-                                      %output "/lib/systemd/system")
-                       (string-append "--with-systemdtmpfilesdir="
-                                      %output "/lib/tmpfiles.d"))
-                 (map (lambda (prog)
-                        (string-append "--with-" prog "=" groff-minimal
-                                       "/bin/" prog))
-                      '("nroff" "eqn" "neqn" "tbl" "refer" "pic"))))
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'patch-source-shebangs 'patch-test-shebangs
+                 (lambda* (#:key outputs #:allow-other-keys)
+                   ;; Patch shebangs in test scripts.
+                   (let ((out (assoc-ref outputs "out")))
+                     (for-each (lambda (file)
+                                 (substitute* file
+                                   (("#! /bin/sh")
+                                    (string-append "#!" (which "sh")))))
+                               (remove file-is-directory?
+                                       (find-files "src/tests" ".*")))
+                     #t)))
+               (add-after 'unpack 'patch-absolute-paths
+                 (lambda* (#:key inputs #:allow-other-keys)
+                   (substitute* "src/man.c"
+                     (("\"iconv\"")
+                      (string-append "\"" (which "iconv") "\"")))
+                   ;; Embed an absolute reference to "preconv", otherwise it
+                   ;; falls back to searching in PATH and ultimately fails
+                   ;; to render unicode data (see <https://bugs.gnu.org/30785>).
+                   (substitute* "lib/encodings.c"
+                     (("groff_preconv = NULL")
+                      (string-append "groff_preconv = \""
+                                     (assoc-ref inputs "groff-minimal")
+                                     "/bin/preconv\"")))
+                   #t)))
+           #:configure-flags
+           #~(let ((groff (assoc-ref %build-inputs "groff"))
+                   (groff-minimal (assoc-ref %build-inputs "groff-minimal"))
+                   (less  (assoc-ref %build-inputs "less"))
+                   (gzip  (assoc-ref %build-inputs "gzip"))
+                   (bzip2 (assoc-ref %build-inputs "bzip2"))
+                   (xz    (assoc-ref %build-inputs "xz"))
+                   (util  (assoc-ref %build-inputs "util-linux")))
+               ;; Invoke groff, less, gzip, bzip2, & xz directly from the store.
+               (append (list ;; Disable setuid man user.
+                        "--disable-setuid"
+                        ;; Don't constrain ownership of system-wide cache files.
+                        ;; Otherwise creating the manpage database fails with
+                        ;; man-db > 2.7.5.
+                        "--disable-cache-owner"
+                        (string-append "--with-pager=" less "/bin/less")
+                        (string-append "--with-gzip=" gzip "/bin/gzip")
+                        (string-append "--with-bzip2=" bzip2 "/bin/gzip")
+                        (string-append "--with-xz=" xz "/bin/xz")
+                        (string-append "--with-col=" util "/bin/col")
+                        ;; The default systemd directories ignore --prefix.
+                        ;; XXX TODO: Replace with simply #$OUTPUT on staging.
+                        (string-append "--with-systemdsystemunitdir="
+                                       #$(if (%current-target-system)
+                                             #~#$output
+                                             #~%output)
+                                       "/lib/systemd/system")
+                        (string-append "--with-systemdtmpfilesdir="
+                                       #$(if (%current-target-system)
+                                             #~#$output
+                                             #~%output)
+                                       "/lib/tmpfiles.d"))
+                   (map (lambda (prog)
+                          (string-append "--with-" prog "=" groff-minimal
+                                         "/bin/" prog))
+                        '("nroff" "eqn" "neqn" "tbl" "refer" "pic"))))
 
-       ;; At run time we should refer to GROFF-MINIMAL, not GROFF (the latter
-       ;; pulls in Perl.)
-       #:disallowed-references (,groff)
+           ;; At run time we should refer to GROFF-MINIMAL, not GROFF (the latter
+           ;; pulls in Perl.)
+           #:disallowed-references
+           (list groff)
 
-       #:modules ((guix build gnu-build-system)
-                  (guix build utils)
-                  (srfi srfi-1))))
+           #:modules '((guix build gnu-build-system)
+                       (guix build utils)
+                       (srfi srfi-1))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("flex" ,flex)
-       ("groff" ,groff)))   ;needed at build time (troff, grops, soelim, etc.)
+     (list pkg-config flex groff))   ;needed at build time (troff, grops, soelim, etc.)
     (inputs
-     `(("gdbm" ,gdbm)
-       ("groff-minimal" ,groff-minimal)
-       ("less" ,less)
-       ("libpipeline" ,libpipeline)
-       ;; FIXME: 4.8 and later can use libseccomp, but it causes test
-       ;; failures in the build chroot.
-       ;;("libseccomp" ,libseccomp)
-       ("util-linux" ,util-linux)))
+     (list gdbm
+           groff-minimal
+           less
+           libpipeline
+           ;; FIXME: 4.8 and later can use libseccomp, but it causes test
+           ;; failures in the build chroot.
+           ;;("libseccomp" ,libseccomp)
+           util-linux))
     (native-search-paths
      (list (search-path-specification
             (variable "MANPATH")
@@ -252,8 +260,8 @@ the traditional flat-text whatis databases.")
                         (("^PREFIX=.*")
                          (string-append "PREFIX=" (assoc-ref outputs "out")
                                         "\n"))))))))
-    (native-inputs `(("perl" ,perl)))             ;used to run tests
-    (inputs `(("zlib" ,zlib)))
+    (native-inputs (list perl))             ;used to run tests
+    (inputs (list zlib))
     (native-search-paths
      (list (search-path-specification
             (variable "MANPATH")
@@ -307,9 +315,11 @@ Linux kernel and C library interfaces employed by user-space programs.")
     (license license:gpl2+)))
 
 (define-public help2man
+  ;; TODO: Manual pages for languages not available from the implicit
+  ;; input "locales" contain the original (English) text.
   (package
     (name "help2man")
-    (version "1.47.13")
+    (version "1.48.5")
     (source
      (origin
       (method url-fetch)
@@ -317,18 +327,28 @@ Linux kernel and C library interfaces employed by user-space programs.")
                           version ".tar.xz"))
       (sha256
        (base32
-        "08q5arxz4j4pyx5q4712c2rn7p7dw7as9xg38yvmsh1c3ynvpy5p"))))
+        "1gl24n9am3ivhql1gs9lffb415irg758fhxyk4ryssiflk5f8fb7"))))
     (build-system gnu-build-system)
     (arguments `(;; There's no `check' target.
-                 #:tests? #f))
+                 #:tests? #f
+                 #:phases
+                 (modify-phases %standard-phases
+                   (add-after 'unpack 'patch-help2man-with-perl-gettext
+                     (lambda* (#:key inputs #:allow-other-keys)
+                       (let ((lib (assoc-ref inputs "perl-gettext"))
+                             (fmt "use lib '~a/lib/perl5/site_perl';~%~a"))
+                         (substitute* "help2man.PL"
+                           (("^use Locale::gettext.*$" load)
+                            (format #f fmt lib load))))
+                       #t)))))
     (inputs
      `(("perl" ,perl)
-       ;; TODO: Add these optional dependencies.
-       ;; ("perl-LocaleGettext" ,perl-LocaleGettext)
-       ;; ("gettext" ,gettext-minimal)
-       ))
+       ,@(if (%current-target-system)
+             '()
+             `(("perl-gettext" ,perl-gettext)))))
     (native-inputs
-     `(("perl" ,perl)))
+     `(("perl" ,perl)
+       ("gettext" ,gettext-minimal)))
     (home-page "https://www.gnu.org/software/help2man/")
     (synopsis "Automatically generate man pages from program --help")
     (description
@@ -385,7 +405,7 @@ in C99.")
        #:make-flags (list (string-append "prefix=" (assoc-ref %outputs "out")))
        #:phases (modify-phases %standard-phases (delete 'configure))))
     (inputs
-     `(("gawk" ,gawk)))
+     (list gawk))
     (home-page "https://github.com/mvertes/txt2man")
     (synopsis "Convert text to man page")
     (description "Txt2man converts flat ASCII text to man page format.")
diff --git a/gnu/packages/markup.scm b/gnu/packages/markup.scm
index 368976bfde..bc8476e056 100644
--- a/gnu/packages/markup.scm
+++ b/gnu/packages/markup.scm
@@ -4,9 +4,11 @@
 ;;; Copyright © 2016, 2019 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Nikita <nikita@n0.is>
 ;;; Copyright © 2017–2021 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2020, 2022 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2020 EuAndreh <eu@euandre.org>
 ;;; Copyright © 2021 Noisytoot <noisytoot@disroot.org>
+;;; Copyright © 2021 Zhu Zihao <all_but_last@163.com>
+;;; Copyright © 2021 Petr Hodina <phodina@protonmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -24,9 +26,10 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages markup)
-  #:use-module (guix licenses)
+  #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix download)
   #:use-module (guix git-download)
+  #:use-module (guix gexp)
   #:use-module (guix packages)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system trivial)
@@ -34,11 +37,16 @@
   #:use-module (guix build-system perl)
   #:use-module (guix build-system python)
   #:use-module (guix utils)
-  #:use-module (gnu packages compression)
+  #:use-module (guix gexp)
   #:use-module (gnu packages)
+  #:use-module (gnu packages base)
+  #:use-module (gnu packages check)
+  #:use-module (gnu packages compression)
+  #:use-module (gnu packages libffi)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages web))
 
 (define-public hoedown
@@ -67,7 +75,7 @@
     (description "Hoedown is a standards compliant, fast, secure markdown
 processing library written in C.")
     (home-page "https://github.com/hoedown/hoedown")
-    (license expat)))
+    (license license:expat)))
 
 (define-public markdown
   (package
@@ -90,8 +98,7 @@ processing library written in C.")
          (let ((source (assoc-ref %build-inputs "source"))
                (out    (assoc-ref %outputs "out"))
                (perlbd (string-append (assoc-ref %build-inputs "perl") "/bin"))
-               (unzip  (string-append (assoc-ref %build-inputs "unzip")
-                                      "/bin/unzip")))
+               (unzip  (search-input-file %build-inputs "/bin/unzip")))
            (mkdir-p out)
            (with-directory-excursion out
              (invoke unzip source)
@@ -103,16 +110,51 @@ processing library written in C.")
              (patch-shebang "bin/markdown" (list perlbd))
              (delete-file-recursively "Markdown_1.0.1"))
            #t))))
-    (native-inputs `(("unzip" ,unzip)))
-    (inputs `(("perl" ,perl)))
+    (native-inputs (list unzip))
+    (inputs (list perl))
     (home-page "http://daringfireball.net/projects/markdown")
     (synopsis "Text-to-HTML conversion tool")
     (description
      "Markdown is a text-to-HTML conversion tool for web writers.  It allows
 you to write using an easy-to-read, easy-to-write plain text format, then
 convert it to structurally valid XHTML (or HTML).")
-    (license (non-copyleft "file://License.text"
-                           "See License.text in the distribution."))))
+    (license (license:non-copyleft "file://License.text"
+                                   "See License.text in the distribution."))))
+
+(define-public lowdown
+  (let ((commit "1de10c1d71bfb4348ae0beaec8b1547d5e114969")
+        (revision "1"))
+    (package
+      (name "lowdown")
+      (version (git-version "0.10.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/kristapsdz/lowdown")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "1wh07nkiihvp1m79sj4qlnqklnn0rfp3hwls8sqcp0bfd96wpa1h"))))
+      (build-system gnu-build-system)
+      (arguments
+       (list
+        #:test-target "regress"
+        #:phases
+        #~(modify-phases %standard-phases
+            (replace 'configure
+              (lambda _
+                (invoke "./configure"
+                        (string-append "PREFIX=" #$output)
+                        (string-append "MANDIR=" #$output "/share/man")))))
+        #:make-flags #~(list "CFLAGS=-fPIC")))
+      (native-inputs
+       (list which))
+      (home-page "https://kristaps.bsd.lv/lowdown/")
+      (synopsis "Simple Markdown translator")
+      (description "Lowdown is a Markdown translator producing HTML5,
+roff documents in the ms and man formats, LaTeX, gemini, and terminal output.")
+      (license license:isc))))
 
 (define-public discount
   (package
@@ -152,13 +194,13 @@ convert it to structurally valid XHTML (or HTML).")
                        (string-append "--prefix=" out)
                        "--shared")))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "Markdown processing library, written in C")
     (description
      "Discount is a markdown implementation, written in C.  It provides a
 @command{markdown} command, and a library.")
     (home-page "https://www.pell.portland.or.us/~orc/Code/discount/")
-    (license bsd-3)))
+    (license license:bsd-3)))
 
 (define-public perl-text-markdown-discount
   (package
@@ -190,7 +232,7 @@ convert it to structurally valid XHTML (or HTML).")
                       "/lib")))
              #t)))))
     (inputs
-     `(("discount" ,discount)))
+     (list discount))
     (home-page
      "https://metacpan.org/release/Text-Markdown-Discount")
     (synopsis
@@ -203,12 +245,85 @@ implementation.
   use Text::Markdown::Discount;
   my $html = markdown($text)
 @end example")
-    (license perl-license)))
+    (license license:perl-license)))
+
+(define-public python-cmarkgfm
+  (package
+    (name "python-cmarkgfm")
+    (version "0.7.0")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "cmarkgfm" version))
+              (sha256
+               (base32
+                "06cw49bzxl3k7m8993cyi5zqxvk817z8ghhr9xqq5gx8klpiap56"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  ;; Delete bundled cmark and generated headers.
+                  (for-each delete-file-recursively
+                            '("third_party/cmark" "generated"))))))
+    (build-system python-build-system)
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'copy-cmark-gfm
+                 (lambda _
+                   ;; This package needs the cmark-gfm source files
+                   ;; to generate FFI bindings.
+                   (copy-recursively #+(package-source (this-package-input
+                                                        "cmark-gfm"))
+                                     "third_party/cmark")))
+               (add-after 'unpack 'install-cmark-headers
+                 (lambda* (#:key inputs #:allow-other-keys)
+                   ;; XXX: Loosely based on 'regenerate' from noxfile.py.
+                   (let ((version.h (search-input-file
+                                     inputs "/include/cmark-gfm_version.h")))
+                     (for-each (lambda (file)
+                                 (install-file file "generated/unix/"))
+                               (cons version.h
+                                     (find-files (dirname version.h)
+                                                 "_export\\.h$"))))))
+               (replace 'check
+                 (lambda* (#:key tests? #:allow-other-keys)
+                   (when tests? (invoke "pytest" "-vv" "tests")))))))
+    (native-inputs (list python-pytest))
+    (inputs (list cmark-gfm))
+    (propagated-inputs (list python-cffi-1.15))
+    (home-page "https://github.com/theacodes/cmarkgfm")
+    (synopsis "Python bindings for GitHub's fork of cmark")
+    (description
+     "This package provides a minimal set of Python bindings for the
+GitHub cmark fork (@code{cmark-gfm}).")
+    (license license:expat)))
+
+(define-public python-markdownify
+  (package
+    (name "python-markdownify")
+    (version "0.10.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "markdownify" version))
+       (sha256
+        (base32
+         "0msvrsgq9jigbgg7r7iq7ql5bgslmbxd8sq0nmpbxrjwqypgs7w2"))))
+    (build-system python-build-system)
+    (native-inputs
+     (list python-pytest))
+    (propagated-inputs
+     (list python-flake8 python-beautifulsoup4 python-six))
+    (home-page
+     "https://github.com/matthewwithanm/python-markdownify")
+    (synopsis "Converts HTML to Markdown")
+    (description "This package provides @code{markdownify} a Python library to
+convert HTML to Markdown.")
+    (license license:expat)))
 
 (define-public cmark
   (package
     (name "cmark")
-    (version "0.29.0")
+    (version "0.30.2")
     (source (origin
              (method git-fetch)
              (uri (git-reference
@@ -217,20 +332,11 @@ implementation.
              (file-name (git-file-name name version))
              (sha256
               (base32
-               "0r7jpqhgnssq444i8pwji2g36058vfzwkl70wbiwj13h4w5rfc8f"))
-             (modules '((guix build utils)))
-             (snippet
-              '(begin
-                 ;; Mimic upstream commit 68c3a91166347 to fix a test failure
-                 ;; when using Python 3.8.  Remove for versions > 0.29.
-                 ;; See <https://github.com/commonmark/cmark/issues/313>.
-                 (substitute* "test/normalize.py"
-                   (("cgi") "html"))
-                 #t))))
+               "1426snw3mq8qmpdxznkhsyy75xd9v9nwlc7sph08qpdz8xnp4hr2"))))
     (build-system cmake-build-system)
     (arguments
      '(#:test-target "test"))
-    (native-inputs `(("python" ,python)))
+    (native-inputs (list python))
     (synopsis "CommonMark Markdown reference implementation")
     (description "CommonMark is a strongly defined, highly compatible
 specification of Markdown.  cmark is the C reference implementation of
@@ -243,7 +349,34 @@ for parsing and rendering CommonMark.")
     ;; cmark is distributed with a BSD-2 license, but some components are Expat
     ;; licensed. The CommonMark specification is Creative Commons CC-BY-SA 4.0
     ;; licensed. See 'COPYING' in the source distribution for more information.
-    (license (list bsd-2 expat cc-by-sa4.0))))
+    (license (list license:bsd-2 license:expat license:cc-by-sa4.0))))
+
+(define-public cmark-gfm
+  (package
+    (inherit cmark)
+    (name "cmark-gfm")
+    (version "0.29.0.gfm.2")
+    (home-page "https://github.com/github/cmark-gfm")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference (url home-page) (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0vz6zs3m22k7jzfj4782lahciwfjlbi4m3qz5crsmssip3rwdy7h"))))
+    (arguments
+     '(#:test-target "test"
+       #:phases (modify-phases %standard-phases
+                  (add-after 'install 'install-config
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      (let ((out (assoc-ref outputs "out")))
+                        ;; XXX: cmark-gfm-core-extensions.h includes this file.
+                        (install-file "src/config.h"
+                                      (string-append out "/include"))))))))
+    (synopsis "GitHub flavored CommonMark")
+    (description
+     "This package is a fork of @code{cmark}, with GitHub-specific Markdown
+additions.")))
 
 (define-public smu
   (package
@@ -279,7 +412,7 @@ amount of indents it scales just great.
 Smu was started as a rewrite of Markdown but became something more
 lightweight and consistent.  The biggest difference between Markdown
 and smu is that smu doesn't support reference style links.")
-    (license x11)))
+    (license license:x11)))
 
 (define-public md4c
   (package
@@ -301,7 +434,7 @@ and smu is that smu doesn't support reference style links.")
     (description "MD4C is a C Markdown parser with a
 SAX-like interface.  It is compliant to the CommonMark specification,
 with a few extensions.")
-    (license expat)))
+    (license license:expat)))
 
 (define-public python-mistletoe
   (package
@@ -323,4 +456,4 @@ parser that supports definitions of custom tokens.
 Parsing Markdown into an abstract syntax tree also allows @code{mistletoe} to
 swap out renderers for different output formats, without touching any of the
 core components.")
-    (license expat)))
+    (license license:expat)))
diff --git a/gnu/packages/mastodon.scm b/gnu/packages/mastodon.scm
index 17673c7fde..d6fd1db2b6 100644
--- a/gnu/packages/mastodon.scm
+++ b/gnu/packages/mastodon.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2019 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2021 Taiju HIGASHI <higashi@taiju.info>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -24,6 +25,7 @@
   #:use-module (guix build-system meson)
   #:use-module (guix build-system python)
   #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (gnu packages)
   #:use-module (gnu packages check)
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages gettext)
@@ -40,28 +42,27 @@
 (define-public toot
   (package
     (name "toot")
-    (version "0.27.0")
+    (version "0.28.0")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "toot" version))
         (sha256
-         (base32 "1mfbqmgna7046d134pc5qx1vyfd60vwcn0xr9lxzlmc5rjdbmz8x"))))
+         (base32 "1wsj4160z3m1nvswgkl08n9ymihxhxdvxvrsycn9d3y5fplm00k9"))))
     (build-system python-build-system)
     (arguments
      '(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (add-installed-pythonpath inputs outputs)
-             (invoke "py.test"))))))
+           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "py.test")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (inputs
-     `(("python-beautifulsoup4" ,python-beautifulsoup4)
-       ("python-requests" ,python-requests)
-       ("python-urwid" ,python-urwid)
-       ("python-wcwidth" ,python-wcwidth)))
+     (list python-beautifulsoup4 python-requests python-urwid
+           python-wcwidth))
     (home-page "https://github.com/ihabunek/toot/")
     (synopsis "Mastodon CLI client")
     (description "Interact with Mastodon social network from the command line.
@@ -80,15 +81,21 @@ Features include:
     (name "tootle")
     (version "1.0")
     (source
-      (origin
-        (method git-fetch)
-        (uri (git-reference
-               (url "https://github.com/bleakgrey/tootle")
-               (commit version)))
-        (file-name (git-file-name name version))
-        (sha256
-         (base32
-          "1nm57239mhdq462an6bnhdlijpijxmjs9mqbyirwxwa048d3n4rm"))))
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/bleakgrey/tootle")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1nm57239mhdq462an6bnhdlijpijxmjs9mqbyirwxwa048d3n4rm"))
+       (patches
+        (search-patches
+         ;; https://github.com/bleakgrey/tootle/pull/339
+         "tootle-glib-object-naming.patch"
+         ;; https://github.com/bleakgrey/tootle/pull/322
+         "tootle-reason-phrase.patch"))))
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
@@ -98,8 +105,7 @@ Features include:
            ;; Don't create 'icon-theme.cache'.
            (lambda _
              (substitute* "meson/post_install.py"
-               (("gtk-update-icon-cache") "true"))
-             #t))
+               (("gtk-update-icon-cache") "true"))))
          (add-after 'unpack 'patch-source
            (lambda _
              (substitute* "src/Dialogs/NewAccount.vala"
@@ -108,27 +114,25 @@ Features include:
              (substitute* "src/Build.vala"
                (("(os_name = ).*" _ first) (string-append first "\"GNU\";\n"))
                (("(os_ver = ).*" _ first) (string-append first "\"Guix\";\n"))
-               (("GLib.Environment.get_os_info.*") "\"unknown\";\n"))
-             #t))
+               (("GLib.Environment.get_os_info.*") "\"unknown\";\n"))))
          (add-after 'install 'symlink-package
            (lambda* (#:key outputs #:allow-other-keys)
              (symlink "com.github.bleakgrey.tootle"
-                      (string-append (assoc-ref outputs "out") "/bin/tootle"))
-             #t)))))
+                      (string-append (assoc-ref outputs "out")
+                                     "/bin/tootle")))))))
     (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("glib:bin" ,glib "bin")     ; for glib-compile-resources
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("pkg-config" ,pkg-config)))
+     (list gettext-minimal
+           `(,glib "bin") ; for glib-compile-resources
+           gsettings-desktop-schemas pkg-config))
     (inputs
-     `(("glib-networking" ,glib-networking)
-       ("gtk+" ,gtk+)
-       ("json-glib" ,json-glib)
-       ("libgee" ,libgee)
-       ("libhandy" ,libhandy)
-       ("libsoup" ,libsoup)
-       ("vala" ,vala-0.50)
-       ("xdg-utils" ,xdg-utils)))
+     (list glib-networking
+           gtk+
+           json-glib
+           libgee
+           libhandy
+           libsoup-minimal-2
+           vala
+           xdg-utils))
     (home-page "https://github.com/bleakgrey/tootle")
     (synopsis "GTK3 client for Mastodon")
     (description "Tootle is a GTK client for Mastodon.  It provides a clean,
@@ -149,24 +153,24 @@ seamlessly with your desktop environment.")
           "1vikvkzcij2gd730cssigxi38vlmzqmwdy58r3y2cwsxifnxpz9a"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-blurhash" ,python-blurhash)
-       ("python-dateutil" ,python-dateutil)
-       ("python-decorator" ,python-decorator)
-       ("python-magic" ,python-magic)
-       ("python-pytz" ,python-pytz)
-       ("python-requests" ,python-requests)
-       ("python-six" ,python-six)))
+     (list python-blurhash
+           python-dateutil
+           python-decorator
+           python-magic
+           python-pytz
+           python-requests
+           python-six))
     (native-inputs
-     `(("python-blurhash" ,python-blurhash)
-       ("python-cryptography" ,python-cryptography)
-       ("python-http-ece" ,python-http-ece)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-mock" ,python-pytest-mock)
-       ("python-pytest-runner" ,python-pytest-runner)
-       ("python-pytest-vcr" ,python-pytest-vcr)
-       ("python-requests-mock" ,python-requests-mock)
-       ("python-vcrpy" ,python-vcrpy)))
+     (list python-blurhash
+           python-cryptography
+           python-http-ece
+           python-pytest
+           python-pytest-cov
+           python-pytest-mock
+           python-pytest-runner
+           python-pytest-vcr
+           python-requests-mock
+           python-vcrpy))
     (home-page "https://github.com/halcy/Mastodon.py")
     (synopsis "Python wrapper for the Mastodon API")
     (description
diff --git a/gnu/packages/mate.scm b/gnu/packages/mate.scm
index 82b2d6e0fd..dd6baa42b6 100644
--- a/gnu/packages/mate.scm
+++ b/gnu/packages/mate.scm
@@ -7,6 +7,7 @@
 ;;; Copyright © 2019 Guy Fleury Iteriteka <hoonandon@gmail.com>
 ;;; Copyright © 2020 Jonathan Brielmaier <jonathan.brielmaier@web.de>
 ;;; Copyright © 2020 Mathieu Othacehe <m.othacehe@gmail.com>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -106,23 +107,23 @@ MATE applications.")
         (base32 "0fni41p3kraxwjnx9l5mdspng0zib1gfdxwlaiyq31mh4g79yjyj"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("yelp-tools" ,yelp-tools)
-       ("gettext" ,gettext-minimal)
-       ("glib" ,glib "bin") ; glib-gettextize
-       ("polkit" ,polkit))) ; for ITS rules
+     (list pkg-config
+           yelp-tools
+           gettext-minimal
+           `(,glib "bin") ; glib-gettextize
+           polkit)) ; for ITS rules
     (inputs
-     `(("gtk+" ,gtk+)
-       ("glib" ,glib)
-       ("dbus-glib" ,dbus-glib)
-       ("libgnome-keyring" ,libgnome-keyring)
-       ("cairo" ,cairo)
-       ("dbus" ,dbus)
-       ("libnotify" ,libnotify)
-       ("mate-panel" ,mate-panel)
-       ("libxrandr" ,libxrandr)
-       ("libcanberra" ,libcanberra)
-       ("upower" ,upower)))
+     (list gtk+
+           glib
+           dbus-glib
+           libgnome-keyring
+           cairo
+           dbus
+           libnotify
+           mate-panel
+           libxrandr
+           libcanberra
+           upower))
     (home-page "https://mate-desktop.org/")
     (synopsis "Power manager for MATE")
     (description
@@ -145,9 +146,7 @@ actions.")
          "0a2lz61ivwwcdznmwlmgjr6ipr9sdl5g2czbagnpxkwz8f3m77na"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-       ("icon-naming-utils" ,icon-naming-utils)))
+     (list pkg-config intltool icon-naming-utils))
     (home-page "https://mate-desktop.org/")
     (synopsis "The MATE desktop environment icon theme")
     (description
@@ -207,10 +206,8 @@ from Mint-X-F and Faenza-Fresh icon packs.")
         (base32 "051g2vq817g84yrqzf7hjcqr4xrghnw1rprjd6jf5mhhzmwcas6n"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-       ("gdk-pixbuf" ,gdk-pixbuf)       ; gdk-pixbuf+svg isn't needed
-       ("gtk" ,gtk+-2)))
+     (list pkg-config intltool gdk-pixbuf ; gdk-pixbuf+svg isn't needed
+           gtk+-2))
     (home-page "https://mate-desktop.org/")
     (synopsis
      "Official themes for the MATE desktop")
@@ -234,19 +231,16 @@ themes for both gtk+-2 and gtk+-3.")
         (base32 "1nd1dn8mm1z6x4r68a25q4vzys1a6fmbzc94ss1z1n1872pczs6i"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-       ("glib:bin" ,glib "bin")
-       ("gobject-introspection" ,gobject-introspection)
-       ("yelp-tools" ,yelp-tools)
-       ("gtk-doc" ,gtk-doc)))
+     (list pkg-config
+           intltool
+           `(,glib "bin")
+           gobject-introspection
+           yelp-tools
+           gtk-doc))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("libxrandr" ,libxrandr)
-       ("iso-codes" ,iso-codes)
-       ("startup-notification" ,startup-notification)))
+     (list gtk+ libxrandr iso-codes startup-notification))
     (propagated-inputs
-     `(("dconf" ,dconf))) ; mate-desktop-2.0.pc
+     (list dconf)) ; mate-desktop-2.0.pc
     (home-page "https://mate-desktop.org/")
     (synopsis "Library with common API for various MATE modules")
     (description
@@ -277,21 +271,17 @@ desktop and the mate-about program.")
           (lambda* (#:key inputs #:allow-other-keys)
             (substitute* "data/check-timezones.sh"
               (("/usr/share/zoneinfo/zone.tab")
-               (string-append (assoc-ref inputs "tzdata")
-                              "/share/zoneinfo/zone.tab")))
-            #t)))))
+               (search-input-file inputs "/share/zoneinfo/zone.tab"))))))))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("intltool" ,intltool)
        ("dconf" ,dconf)
        ("glib:bin" ,glib "bin")))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("tzdata" ,tzdata)))
+     (list gtk+ tzdata))
     (propagated-inputs
       ;; both of these are requires.private in mateweather.pc
-     `(("libsoup" ,libsoup)
-       ("libxml2" ,libxml2)))
+     (list libsoup-minimal-2 libxml2))
     (home-page "https://mate-desktop.org/")
     (synopsis "MATE library for weather information from the Internet")
     (description
@@ -312,21 +302,21 @@ the MATE desktop environment.")
         (base32 "0qmyhxmarwkxad8k1m9q1iwx70zhfp6zc2mh74nv26nj4gr3h3am"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-       ("itstool" ,itstool)
-       ("gobject-introspection" ,gobject-introspection)
-       ("libxml2" ,libxml2)
-       ("yelp-tools" ,yelp-tools)))
+     (list pkg-config
+           intltool
+           itstool
+           gobject-introspection
+           libxml2
+           yelp-tools))
     (inputs
-     `(("dconf" ,dconf)
-       ("gtk+" ,gtk+)
-       ("libice" ,libice)
-       ("libsm" ,libsm)
-       ("libx11" ,libx11)
-       ("mate-desktop" ,mate-desktop)
-       ("pango" ,pango)
-       ("vte" ,vte)))
+     (list dconf
+           gtk+
+           libice
+           libsm
+           libx11
+           mate-desktop
+           pango
+           vte))
     (home-page "https://mate-desktop.org/")
     (synopsis "MATE Terminal Emulator")
     (description
@@ -369,17 +359,10 @@ configurations (profiles).")
                   (string-append "Exec=" out "/bin/mate-session\n")))
                #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-       ("libxcomposite" ,libxcomposite)
-       ("xtrans" ,xtrans)
-       ("gobject-introspection" ,gobject-introspection)))
+     (list pkg-config intltool libxcomposite xtrans
+           gobject-introspection))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("dbus-glib" ,dbus-glib)
-       ("elogind" ,elogind)
-       ("libsm" ,libsm)
-       ("mate-desktop" ,mate-desktop)))
+     (list gtk+ dbus-glib elogind libsm mate-desktop))
     (home-page "https://mate-desktop.org/")
     (synopsis "Session manager for MATE")
     (description
@@ -400,28 +383,26 @@ configuration program to choose applications starting on login.")
         (base32 "0n1ywr3ir5p536s7azdbw2mh40ylqlpx3a74mjrivbms1rpjxyab"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-       ("gobject-introspection" ,gobject-introspection)))
+     (list pkg-config intltool gobject-introspection))
     (inputs
-     `(("cairo" ,cairo)
-       ("dbus" ,dbus)
-       ("dbus-glib" ,dbus-glib)
-       ("dconf" ,dconf)
-       ("fontconfig" ,fontconfig)
-       ("gtk+" ,gtk+)
-       ("libcanberra" ,libcanberra)
-       ("libmatekbd" ,libmatekbd)
-       ("libmatemixer" ,libmatemixer)
-       ("libnotify" ,libnotify)
-       ("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxi" ,libxi)
-       ("libxklavier" ,libxklavier)
-       ("mate-desktop" ,mate-desktop)
-       ("nss" ,nss)
-       ("polkit" ,polkit)
-       ("startup-notification" ,startup-notification)))
+     (list cairo
+           dbus
+           dbus-glib
+           dconf
+           fontconfig
+           gtk+
+           libcanberra
+           libmatekbd
+           libmatemixer
+           libnotify
+           libx11
+           libxext
+           libxi
+           libxklavier
+           mate-desktop
+           nss
+           polkit
+           startup-notification))
     (home-page "https://mate-desktop.org/")
     (synopsis "Settings Daemon for MATE")
     (description
@@ -441,13 +422,9 @@ configuration program to choose applications starting on login.")
         (base32 "1n6rq7k66zvfd6sb7h92xihh021w9hysfa4yd1mzjcbb7c62ybqx"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-       ("gobject-introspection" ,gobject-introspection)))
+     (list pkg-config intltool gobject-introspection))
     (inputs
-     `(("glib" ,glib)
-       ("pulseaudio" ,pulseaudio)
-       ("alsa-lib" ,alsa-lib)))
+     (list glib pulseaudio alsa-lib))
     (home-page "https://mate-desktop.org/")
     (synopsis "Mixer library for the MATE desktop")
     (description
@@ -469,16 +446,14 @@ sound systems.")
         (base32 "17mcxfkvl14p04id3n5kbhpjwjq00c8wmbyciyy2hm7kwdln6zx8"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-       ("gobject-introspection" ,gobject-introspection)))
+     (list pkg-config intltool gobject-introspection))
     (inputs
-     `(("cairo" ,cairo)
-       ("gdk-pixbuf" ,gdk-pixbuf+svg)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("libx11" ,libx11)
-       ("libxklavier" ,libxklavier)))
+     (list cairo
+           (librsvg-for-system)
+           glib
+           gtk+
+           libx11
+           libxklavier))
     (home-page "https://mate-desktop.org/")
     (synopsis "MATE keyboard configuration library")
     (description
@@ -512,9 +487,7 @@ MATE desktop environment.")
                  (string-append out "/lib/girepository-1.0/")))
               #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-       ("gobject-introspection" ,gobject-introspection)))
+     (list pkg-config intltool gobject-introspection))
     (inputs
      `(("glib" ,glib)
        ("python" ,python-2)))
@@ -539,36 +512,36 @@ assorted menu related utility programs.")
         (base32 "0h70i4x3bk017pgv4zn280682wm58vwdjm7kni91ni8rmblnnvyp"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-       ("libxslt" ,libxslt)
-       ("yelp-tools" ,yelp-tools)
-       ("scrollkeeper" ,scrollkeeper)
-       ("gettext" ,gettext-minimal)
-       ("docbook-xml" ,docbook-xml)
-       ("gobject-introspection" ,gobject-introspection)))
+     (list pkg-config
+           intltool
+           libxslt
+           yelp-tools
+           scrollkeeper
+           gettext-minimal
+           docbook-xml
+           gobject-introspection))
     (inputs
-     `(("atk" ,atk)
-       ("dbus" ,dbus)
-       ("dbus-glib" ,dbus-glib)
-       ("glib" ,glib)
-       ("gucharmap" ,gucharmap)
-       ("gtk+" ,gtk+)
-       ("gtksourceview" ,gtksourceview-3)
-       ("libgtop" ,libgtop)
-       ("libmateweather" ,libmateweather)
-       ("libnotify" ,libnotify)
-       ("libx11" ,libx11)
-       ("libxml2" ,libxml2)
-       ("libwnck" ,libwnck)
-       ("mate-panel" ,mate-panel)
-       ("pango" ,pango)
-       ("polkit" ,polkit) ; either polkit or setuid
-       ("python" ,python-2)
-       ("upower" ,upower)
-       ("wireless-tools" ,wireless-tools)))
+     (list atk
+           dbus
+           dbus-glib
+           glib
+           gucharmap
+           gtk+
+           gtksourceview-3
+           libgtop
+           libmateweather
+           libnotify
+           libx11
+           libxml2
+           libwnck
+           mate-panel
+           pango
+           polkit ; either polkit or setuid
+           python-2
+           upower
+           wireless-tools))
     (propagated-inputs
-     `(("python-pygobject" ,python-pygobject)))
+     (list python-pygobject))
     (home-page "https://mate-desktop.org/")
     (synopsis "Various applets for the MATE Panel")
     (description
@@ -611,21 +584,18 @@ Interactive Weather Information Network (IWIN).
         (base32 "118i4w2i2g3hfgbfn3hjzjkfq8vjj6049r7my3vna9js23b7ab92"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-       ("gettext" ,gettext-minimal)
-       ("gobject-introspection" ,gobject-introspection)))
+     (list pkg-config intltool gettext-minimal gobject-introspection))
     (inputs
-     `(("cairo" ,cairo)
-       ("gtk+" ,gtk+)
-       ("libcanberra" ,libcanberra)
-       ("libmatemixer" ,libmatemixer)
-       ("libxml2" ,libxml2)
-       ("mate-applets" ,mate-applets)
-       ("mate-desktop" ,mate-desktop)
-       ("mate-panel" ,mate-panel)
-       ("pango" ,pango)
-       ("startup-notification" ,startup-notification)))
+     (list cairo
+           gtk+
+           libcanberra
+           libmatemixer
+           libxml2
+           mate-applets
+           mate-desktop
+           mate-panel
+           pango
+           startup-notification))
     (home-page "https://mate-desktop.org/")
     (synopsis "Multimedia related programs for the MATE desktop")
     (description
@@ -672,32 +642,28 @@ mate-volume-control, a MATE volume control application and applet.")
                   (string-append out "/lib/girepository-1.0/")))
                #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-       ("itstool" ,itstool)
-       ("xtrans" ,xtrans)
-       ("gobject-introspection" ,gobject-introspection)))
+     (list pkg-config intltool itstool xtrans gobject-introspection))
     (inputs
-     `(("dconf" ,dconf)
-       ("cairo" ,cairo)
-       ("dbus-glib" ,dbus-glib)
-       ("gtk-layer-shell" ,gtk-layer-shell)
-       ("gtk+" ,gtk+)
-       ("libcanberra" ,libcanberra)
-       ("libice" ,libice)
-       ("libmateweather" ,libmateweather)
-       ("librsvg" ,librsvg)
-       ("libsm" ,libsm)
-       ("libx11" ,libx11)
-       ("libxau" ,libxau)
-       ("libxml2" ,libxml2)
-       ("libxrandr" ,libxrandr)
-       ("libwnck" ,libwnck)
-       ("mate-desktop" ,mate-desktop)
-       ("mate-menus" ,mate-menus)
-       ("pango" ,pango)
-       ("tzdata" ,tzdata)
-       ("wayland" ,wayland)))
+     (list dconf
+           cairo
+           dbus-glib
+           gtk-layer-shell
+           gtk+
+           libcanberra
+           libice
+           libmateweather
+           (librsvg-for-system)
+           libsm
+           libx11
+           libxau
+           libxml2
+           libxrandr
+           libwnck
+           mate-desktop
+           mate-menus
+           pango
+           tzdata
+           wayland))
     (home-page "https://mate-desktop.org/")
     (synopsis "Panel for MATE")
     (description
@@ -710,7 +676,7 @@ infamous 'Wanda the Fish'.")
 (define-public atril
   (package
     (name "atril")
-    (version "1.22.0")
+    (version "1.24.0")
     (source
      (origin
        (method url-fetch)
@@ -718,7 +684,7 @@ infamous 'Wanda the Fish'.")
                            name "-" version ".tar.xz"))
        (sha256
         (base32
-         "1xd49j4qwrlg2nh2zvspf91yk033dp8a58dy9azqg2yz4bcvywxb"))))
+         "0967gxw7h2qh2kpwl0jgv58hicz6aa92kr12mnykbpikad25s95y"))))
     (build-system glib-or-gtk-build-system)
     (arguments
      `(#:configure-flags (list (string-append "--with-openjpeg="
@@ -762,6 +728,7 @@ infamous 'Wanda the Fish'.")
        ("glib:bin" ,glib "bin")
        ("gobject-introspection" ,gobject-introspection)
        ("gtk-doc" ,gtk-doc)
+       ("texlive-bin" ,texlive-bin) ;synctex
        ("xmllint" ,libxml2)
        ("zlib" ,zlib)))
     (inputs
@@ -788,14 +755,14 @@ infamous 'Wanda the Fish'.")
        ("libgxps" ,libgxps)
        ("libjpeg" ,libjpeg-turbo)
        ("libxml2" ,libxml2)
-       ("dogtail" ,python2-dogtail)
+       ("dogtail" ,python-dogtail)
        ("shared-mime-info" ,shared-mime-info)
        ("gdk-pixbuf" ,gdk-pixbuf)
        ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
        ("libgnome-keyring" ,libgnome-keyring)
        ("libarchive" ,libarchive)
        ("marco" ,marco)
-       ("openjpeg" ,openjpeg-1)
+       ("openjpeg" ,openjpeg)
        ("pango" ,pango)
        ;;("texlive" ,texlive)
        ;; TODO:
@@ -842,15 +809,15 @@ infamous 'Wanda the Fish'.")
        ("xorg-server" ,xorg-server)
        ("gobject-introspection" ,gobject-introspection)))
     (inputs
-     `(("exempi" ,exempi)
-       ("gtk+" ,gtk+)
-       ("gvfs" ,gvfs)
-       ("libexif" ,libexif)
-       ("libnotify" ,libnotify)
-       ("libsm" ,libsm)
-       ("libxml2" ,libxml2)
-       ("mate-desktop" ,mate-desktop)
-       ("startup-notification" ,startup-notification)))
+     (list exempi
+           gtk+
+           gvfs
+           libexif
+           libnotify
+           libsm
+           libxml2
+           mate-desktop
+           startup-notification))
     (native-search-paths
      (list (search-path-specification
             (variable "CAJA_EXTENSIONDIR")
@@ -900,17 +867,17 @@ icons on the MATE desktop.  It works on local and remote file systems.")
        ("libxml2" ,libxml2)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("attr" ,attr)
-       ("brasero" ,brasero)
-       ("caja" ,caja)
-       ("dbus" ,dbus)
-       ("dbus-glib" ,dbus-glib)
-       ("gajim" ,gajim) ;runtime only?
-       ("gtk+" ,gtk+)
-       ("graphicsmagick" ,graphicsmagick)
-       ("mate-desktop" ,mate-desktop)
-       ("pidgin" ,pidgin) ;runtime only?
-       ("startup-notification" ,startup-notification)))
+     (list attr
+           brasero
+           caja
+           dbus
+           dbus-glib
+           gajim ;runtime only?
+           gtk+
+           graphicsmagick
+           mate-desktop
+           pidgin ;runtime only?
+           startup-notification))
     (home-page "https://mate-desktop.org/")
     (synopsis "Extensions for the File manager Caja")
     (description
@@ -946,13 +913,13 @@ icons on the MATE desktop.  It works on local and remote file systems.")
                            (string-append out "/sbin")))
                         #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-       ("yelp-tools" ,yelp-tools)
-       ("desktop-file-utils" ,desktop-file-utils)
-       ("xorgproto" ,xorgproto)
-       ("xmodmap" ,xmodmap)
-       ("gobject-introspection" ,gobject-introspection)))
+     (list pkg-config
+           intltool
+           yelp-tools
+           desktop-file-utils
+           xorgproto
+           xmodmap
+           gobject-introspection))
     (inputs
      `(("atk" ,atk)
        ("cairo" ,cairo)
@@ -983,8 +950,7 @@ icons on the MATE desktop.  It works on local and remote file systems.")
        ("polkit" ,polkit)
        ("startup-notification" ,startup-notification)))
     (propagated-inputs
-     `(("gdk-pixbuf" ,gdk-pixbuf+svg) ; mate-slab.pc
-       ("librsvg" ,librsvg))) ; mate-slab.pc
+     (list (librsvg-for-system)))        ;mate-slab.pc
     (home-page "https://mate-desktop.org/")
     (synopsis "MATE Desktop configuration tool")
     (description
@@ -1005,32 +971,32 @@ of various aspects of your desktop.")
         (base32 "109b41pjrc1b4slw6sx1lakdhrc46x829vczzk4bz3j15kcszg54"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-       ("itstool" ,itstool)
-       ("glib" ,glib)
-       ("gobject-introspection" ,gobject-introspection)
-       ("libxft" ,libxft)
-       ("libxml2" ,libxml2)
-       ("zenity" ,zenity)))
+     (list pkg-config
+           intltool
+           itstool
+           glib
+           gobject-introspection
+           libxft
+           libxml2
+           zenity))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("libcanberra" ,libcanberra)
-       ("libgtop" ,libgtop)
-       ("libice" ,libice)
-       ("libsm" ,libsm)
-       ("libx11" ,libx11)
-       ("libxcomposite" ,libxcomposite)
-       ("libxcursor" ,libxcursor)
-       ("libxdamage" ,libxdamage)
-       ("libxext" ,libxext)
-       ("libxfixes" ,libxfixes)
-       ("libxinerama" ,libxinerama)
-       ("libxrandr" ,libxrandr)
-       ("libxrender" ,libxrender)
-       ("mate-desktop" ,mate-desktop)
-       ("pango" ,pango)
-       ("startup-notification" ,startup-notification)))
+     (list gtk+
+           libcanberra
+           libgtop
+           libice
+           libsm
+           libx11
+           libxcomposite
+           libxcursor
+           libxdamage
+           libxext
+           libxfixes
+           libxinerama
+           libxrandr
+           libxrender
+           mate-desktop
+           pango
+           startup-notification))
     (home-page "https://mate-desktop.org/")
     (synopsis "Window manager for the MATE desktop")
     (description
@@ -1071,7 +1037,7 @@ for use with MATE or as a standalone window manager.")
        ("yelp-tools" ,yelp-tools)
        ("yelp-xsl" ,yelp-xsl)))
     (inputs
-     `(("yelp" ,yelp)))
+     (list yelp))
     (home-page "https://mate-desktop.org/")
     (synopsis "User Documentation for Mate software")
     (description
@@ -1093,17 +1059,14 @@ sessions, panels, menus, file management, and preferences.")
         (base32 "0imdimq5d5rjq8mkjcrsd683a2bn9acmhc0lmvyw71y0040inbaw"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)
-       ("yelp-tools" ,yelp-tools)))
+     (list gettext-minimal intltool pkg-config yelp-tools))
     (inputs
-     `(("atk" ,atk)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("libxml2" ,libxml2)
-       ("libcanberra" ,libcanberra)
-       ("pango" ,pango)))
+     (list atk
+           glib
+           gtk+
+           libxml2
+           libcanberra
+           pango))
     (home-page "https://mate-desktop.org/")
     (synopsis "Calculator for MATE")
     (description
@@ -1124,7 +1087,7 @@ sessions, panels, menus, file management, and preferences.")
          "0b9yx68p9l867bqsl9z2g4wrs8p396ls673jgaliys5snmk8n8dn"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("intltool" ,intltool)))
+     (list intltool))
     (home-page "https://mate-desktop.org/")
     (synopsis "Calculator for MATE")
     (description
@@ -1146,19 +1109,17 @@ can be used as backgrounds in the MATE Desktop environment.")
          "1bmk9gq5gcqkvfppa7i1hqfph8sajc3xs189s4ha97g0ifwd98a8"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list gettext-minimal intltool pkg-config))
     (inputs
-     `(("cairo" ,cairo)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("libfakekey" ,libfakekey)
-       ("libwnck" ,libwnck)
-       ("libxtst" ,libxtst)
-       ("libx11" ,libx11)
-       ("mate-panel" ,mate-panel)
-       ("xorgproto" ,xorgproto)))
+     (list cairo
+           glib
+           gtk+
+           libfakekey
+           libwnck
+           libxtst
+           libx11
+           mate-panel
+           xorgproto))
     (home-page "https://mate-desktop.org/")
     (synopsis "Tool for MATE on Netbooks")
     (description
@@ -1213,29 +1174,29 @@ Re-decorates windows on un-maximise.
        ("which" ,which)
        ("xorgproto" ,xorgproto)))
     (inputs
-     `(("cairo" ,cairo)
-       ("dconf" ,dconf)
-       ("dbus" ,dbus)
-       ("dbus-glib" ,dbus-glib)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("gdk-pixbuf" ,gdk-pixbuf+svg)
-       ("libcanberra" ,libcanberra)
-       ("libglade" ,libglade)
-       ("libmatekbd" ,libmatekbd)
-       ("libnotify" ,libnotify)
-       ("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxklavier" ,libxklavier)
-       ("libxrandr" ,libxrandr)
-       ("libxrender" ,libxrender)
-       ("libxscrnsaver" ,libxscrnsaver)
-       ("libxxf86vm" ,libxxf86vm)
-       ("linux-pam" ,linux-pam)
-       ("mate-desktop" ,mate-desktop)
-       ("mate-menus" ,mate-menus)
-       ("pango" ,pango)
-       ("startup-notification" ,startup-notification)))
+     (list cairo
+           dconf
+           dbus
+           dbus-glib
+           glib
+           gtk+
+           (librsvg-for-system)
+           libcanberra
+           libglade
+           libmatekbd
+           libnotify
+           libx11
+           libxext
+           libxklavier
+           libxrandr
+           libxrender
+           libxscrnsaver
+           libxxf86vm
+           linux-pam
+           mate-desktop
+           mate-menus
+           pango
+           startup-notification))
     (home-page "https://mate-desktop.org/")
     (synopsis "Screensaver for MATE")
     (description
@@ -1257,29 +1218,29 @@ can be used as backgrounds in the MATE Desktop environment.")
          "1b16n1628gcsym5mph6lr9x5xm4rgkxsa8xwr2wlx8g2gw2775i1"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("gtk-doc" ,gtk-doc)
-       ("intltool" ,intltool)
-       ("libice" ,libice)
-       ("libsm" ,libsm)
-       ("pkg-config" ,pkg-config)
-       ("scrollkeeper" ,scrollkeeper)
-       ("xorgproto" ,xorgproto)
-       ("yelp-tools" ,yelp-tools)))
+     (list gettext-minimal
+           gtk-doc
+           intltool
+           libice
+           libsm
+           pkg-config
+           scrollkeeper
+           xorgproto
+           yelp-tools))
     (inputs
-     `(("atk" ,atk)
-       ("cairo" ,cairo)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("gdk-pixbuf" ,gdk-pixbuf+svg)
-       ("libcanberra" ,libcanberra)
-       ("libgtop" ,libgtop)
-       ("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("mate-panel" ,mate-panel)
-       ("pango" ,pango)
-       ("udisks" ,udisks)
-       ("zlib" ,zlib)))
+     (list atk
+           cairo
+           glib
+           gtk+
+           (librsvg-for-system)
+           libcanberra
+           libgtop
+           libx11
+           libxext
+           mate-panel
+           pango
+           udisks
+           zlib))
     (home-page "https://mate-desktop.org/")
     (synopsis "Utilities for the MATE Desktop")
     (description
@@ -1309,41 +1270,40 @@ can be used as backgrounds in the MATE Desktop environment.")
         (base32 "0dralsc0dvs0l38cysdhx6kiaiqlb8qi6g9xz2cm6mjqyq3d3f9f"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("gtk-doc" ,gtk-doc)
-       ("gobject-introspection" ,gobject-introspection)
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)
-       ("yelp-tools" ,yelp-tools)))
+     (list gettext-minimal
+           gtk-doc
+           gobject-introspection
+           intltool
+           pkg-config
+           yelp-tools))
     (inputs
-     `(("atk" ,atk)
-       ("cairo" ,cairo)
-       ("dconf" ,dconf)
-       ("dbus" ,dbus)
-       ("dbus-glib" ,dbus-glib)
-       ("exempi" ,exempi)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("gdk-pixbuf" ,gdk-pixbuf+svg)
-       ("libcanberra" ,libcanberra)
-       ("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libpeas" ,libpeas)
-       ("libxml2" ,libxml2)
-       ("libexif" ,libexif)
-       ("libjpeg" ,libjpeg-turbo)
-       ("librsvg" ,librsvg)
-       ("lcms" ,lcms)
-       ("mate-desktop" ,mate-desktop)
-       ("pango" ,pango)
-       ("shared-mime-info" ,shared-mime-info)
-       ("startup-notification" ,startup-notification)
-       ("zlib" ,zlib)))
+     (list atk
+           cairo
+           dconf
+           dbus
+           dbus-glib
+           exempi
+           glib
+           gtk+
+           libcanberra
+           libx11
+           libxext
+           libpeas
+           libxml2
+           libexif
+           libjpeg-turbo
+           (librsvg-for-system)
+           lcms
+           mate-desktop
+           pango
+           shared-mime-info
+           startup-notification
+           zlib))
     (home-page "https://mate-desktop.org/")
     (synopsis "Eye of MATE")
     (description
      "Eye of MATE is the Image viewer for the MATE Desktop.")
-    (license (list license:gpl2))))
+    (license license:gpl2)))
 
 (define-public engrampa
   (package
@@ -1380,17 +1340,17 @@ can be used as backgrounds in the MATE Desktop environment.")
        ("pkg-config" ,pkg-config)
        ("yelp-tools" ,yelp-tools)))
     (inputs
-     `(("caja" ,caja)
-       ("file" ,file)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("gdk-pixbuf" ,gdk-pixbuf+svg)
-       ("json-glib" ,json-glib)
-       ("libcanberra" ,libcanberra)
-       ("libx11" ,libx11)
-       ("libsm" ,libsm)
-       ("packagekit" ,packagekit)
-       ("pango" ,pango)))
+     (list caja
+           file
+           glib
+           gtk+
+           (librsvg-for-system)
+           json-glib
+           libcanberra
+           libx11
+           libsm
+           packagekit
+           pango))
     (home-page "https://mate-desktop.org/")
     (synopsis "Archive Manager for MATE")
     (description
@@ -1422,24 +1382,24 @@ can be used as backgrounds in the MATE Desktop environment.")
        ("pkg-config" ,pkg-config)
        ("yelp-tools" ,yelp-tools)))
     (inputs
-     `(("atk" ,atk)
-       ("cairo" ,cairo)
-       ("enchant" ,enchant-1.6)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("gtksourceview" ,gtksourceview-3)
-       ("gdk-pixbuf" ,gdk-pixbuf)
-       ("iso-codes" ,iso-codes)
-       ("libcanberra" ,libcanberra)
-       ("libx11" ,libx11)
-       ("libsm" ,libsm)
-       ("libpeas" ,libpeas)
-       ("libxml2" ,libxml2)
-       ("libice" ,libice)
-       ("packagekit" ,packagekit)
-       ("pango" ,pango)
-       ("python" ,python)
-       ("scrollkeeper" ,scrollkeeper)))
+     (list atk
+           cairo
+           enchant-1.6
+           glib
+           gtk+
+           gtksourceview-3
+           gdk-pixbuf
+           iso-codes
+           libcanberra
+           libx11
+           libsm
+           libpeas
+           libxml2
+           libice
+           packagekit
+           pango
+           python
+           scrollkeeper))
     (home-page "https://mate-desktop.org/")
     (synopsis "Text Editor for MATE")
     (description
@@ -1459,25 +1419,21 @@ can be used as backgrounds in the MATE Desktop environment.")
         (base32 "1i2r4lw6xsk972yp15g5hm8p8xx9pp6jmcvvzbdq80xyx3x898qz"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("gettext" ,gettext-minimal)
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)
-       ("yelp-tools" ,yelp-tools)))
+     (list autoconf gettext-minimal intltool pkg-config yelp-tools))
     (inputs
-     `(("cairo" ,cairo)
-       ("glib" ,glib)
-       ("glibmm" ,glibmm)
-       ("gtkmm" ,gtkmm)
-       ("gtk+" ,gtk+)
-       ("gdk-pixbuf" ,gdk-pixbuf)
-       ("libsigc++" ,libsigc++)
-       ("libcanberra" ,libcanberra)
-       ("libxml2" ,libxml2)
-       ("libwnck" ,libwnck)
-       ("libgtop" ,libgtop)
-       ("librsvg" ,librsvg)
-       ("polkit" ,polkit)))
+     (list cairo
+           glib
+           glibmm
+           gtkmm-3
+           gtk+
+           gdk-pixbuf
+           libsigc++
+           libcanberra
+           libxml2
+           libwnck
+           libgtop
+           (librsvg-for-system)
+           polkit))
     (home-page "https://mate-desktop.org/")
     (synopsis "System Monitor for MATE")
     (description
@@ -1499,18 +1455,14 @@ MATE Desktop to monitor your system resources and usage.")
          "1450bqzlnvwy3xa98lj102j2cf7piqbxcd1cy2zp41rdl8ri3gvn"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("gtk-doc" ,gtk-doc)
-       ("intltool" ,intltool)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list gettext-minimal gtk-doc intltool libtool pkg-config))
     (inputs
-     `(("accountsservice" ,accountsservice)
-       ("glib" ,glib)
-       ("gobject-introspection" ,gobject-introspection)
-       ("gtk+" ,gtk+)
-       ("gdk-pixbuf" ,gdk-pixbuf)
-       ("polkit" ,polkit)))
+     (list accountsservice
+           glib
+           gobject-introspection
+           gtk+
+           gdk-pixbuf
+           polkit))
     (home-page "https://mate-desktop.org/")
     (synopsis "DBus specific service for MATE")
     (description
@@ -1535,7 +1487,7 @@ used to bring up authentication dialogs.")
             (union-build (assoc-ref %outputs "out")
                          directories)
             #t)))))
-    (native-inputs `(("desktop-file-utils" ,desktop-file-utils)))
+    (native-inputs (list desktop-file-utils))
     (inputs
      ;; TODO: Add more packages
      `(("at-spi2-core"              ,at-spi2-core)
@@ -1545,7 +1497,7 @@ used to bring up authentication dialogs.")
        ("dconf"                     ,dconf)
        ("engrampa"                  ,engrampa)
        ("eom"                       ,eom)
-       ("font-cantarell"            ,font-cantarell)
+       ("font-abattis-cantarell"            ,font-abattis-cantarell)
        ("glib-networking"           ,glib-networking)
        ("gnome-keyring"             ,gnome-keyring)
        ("gvfs"                      ,gvfs)
@@ -1582,7 +1534,7 @@ used to bring up authentication dialogs.")
        ("zenity"                    ,zenity)))
     (propagated-inputs
      ;; Default font that applications such as IceCat require.
-     `(("font-dejavu"             ,font-dejavu)))
+     (list font-dejavu))
     (synopsis "The MATE desktop environment")
     (home-page "https://mate-desktop.org/")
     (description
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index 164924b6af..9a0f913c5a 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -5,14 +5,14 @@
 ;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Eric Bavier <bavier@posteo.net>
 ;;; Copyright © 2014 Federico Beffa <beffa@fbengineering.ch>
 ;;; Copyright © 2014 Mathieu Lirzin <mathieu.lirzin@openmailbox.org>
-;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015–2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
 ;;; Copyright © 2015, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2015 Fabian Harfert <fhmgufs@web.de>
 ;;; Copyright © 2016 Roel Janssen <roel@gnu.org>
 ;;; Copyright © 2016, 2018, 2020, 2021 Kei Kebreau <kkebreau@posteo.net>
-;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2016-2022 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, 2021 Paul Garlick <pgarlick@tourbillion-technology.com>
@@ -26,7 +26,7 @@
 ;;; Copyright © 2018 Joshua Sierles, Nextjournal <joshua@nextjournal.com>
 ;;; Copyright © 2018 Nadya Voronova <voronovank@gmail.com>
 ;;; Copyright © 2018 Adam Massmann <massmannak@gmail.com>
-;;; Copyright © 2018, 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2018, 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2018 Eric Brown <brown@fastmail.com>
 ;;; Copyright © 2018, 2021 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2018 Amin Bandali <bandali@gnu.org>
@@ -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, 2021 Felix Gruber <felgru@posteo.net>
+;;; Copyright © 2020–2022 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>
@@ -48,6 +48,7 @@
 ;;; Copyright © 2021 Paul A. Patience <paul@apatience.com>
 ;;; Copyright © 2021 Ivan Gankevich <i.gankevich@spbu.ru>
 ;;; Copyright © 2021 Jean-Baptiste Volatier <jbv@pm.me>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -72,18 +73,22 @@
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
+  #:use-module (guix gexp)
   #:use-module (guix utils)
   #:use-module ((guix build utils) #:select (alist-replace))
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system glib-or-gtk)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build-system meson)
   #:use-module (guix build-system ocaml)
+  #:use-module (guix build-system perl)
   #:use-module (guix build-system python)
   #:use-module (guix build-system ruby)
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages audio)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages bash)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages check)
@@ -92,6 +97,7 @@
   #:use-module (gnu packages coq)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages cyrus-sasl)
+  #:use-module (gnu packages datamash)
   #:use-module (gnu packages dbm)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages elf)
@@ -144,6 +150,7 @@
   #:use-module (gnu packages scheme)
   #:use-module (gnu packages serialization)
   #:use-module (gnu packages shells)
+  #:use-module (gnu packages sphinx)
   #:use-module (gnu packages tcl)
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages tex)
@@ -164,9 +171,10 @@
               (sha256 (base32
                        "1q1887ryqdr9sn0522hc7p16kqwlxxyz5dkmma8ar2nxplhgll7q"))))
     (build-system gnu-build-system)
-    (inputs `(("gtk+" ,gtk+)
-              ("libxml2" ,libxml2)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list gtk+ libxml2))
+    (native-inputs (list pkg-config))
+    (arguments
+     `(#:configure-flags '("CFLAGS=-O2 -g -fcommon")))
     (synopsis "Natural deduction first-order logic interface")
     (description "Aris is a program for performing logical proofs.  It supports
 propositional and predicate logic, as well as Boolean algebra and
@@ -190,11 +198,9 @@ beginners.")
                (base32 "1lniw4bsb5qs5ybf018qllf95pzixb1q3lvybzl4k3xz8zpkrm6k"))))
     (build-system gnu-build-system)
     (inputs
-     `(("ncurses" ,ncurses)
-       ("readline" ,readline)))
+     (list ncurses readline))
     (native-inputs
-     `(("cunit" ,cunit)
-       ("pkg-config" ,pkg-config)))
+     (list cunit pkg-config))
     (synopsis "Terminal based bit manipulator in ncurses")
     (description "Bitwise is a multi base interactive calculator supporting
 dynamic base conversion and bit manipulation.  It's a handy tool for low level
@@ -222,7 +228,7 @@ Some of the features include:
                      "092412jzxy6wdvpk96pfj499hpmaww8xllavbvlqspfpr7ips9id"))))
    (build-system gnu-build-system)
    (inputs
-    `(("fortran" ,gfortran)))
+    (list gfortran))
    (synopsis "Visualizing and demonstrating convolution")
    (description
     "GNU C-Graph is a tool for demonstrating the theory of convolution.
@@ -267,7 +273,7 @@ interactive dialogs to guide them.")
     (arguments
      '(#:configure-flags '("--with-hdf4" "--with-hdf5" "--enable-python"
                            "LIBS= -lz -lpcre -lexpat")))
-    (synopsis "A common interface to various earth observation data formats")
+    (synopsis "Common interface to various earth observation data formats")
     (description
      "The Common Data Access toolbox (CODA) provides a set of interfaces for
 reading remote sensing data from earth observation data files.  It consists of
@@ -313,7 +319,7 @@ triangulations.")
 (define-public python-cvxopt
   (package
     (name "python-cvxopt")
-    (version "1.2.3")
+    (version "1.2.7")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -322,7 +328,7 @@ triangulations.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1kiy2m62xgs2d5id6dnnwy4vap85cd70p7pgkb9nh23qf9xnak7b"))))
+                "114z34wwx1bsv4q6xj9p5q99dffgnj9s4i4arx10g191xq9q8i5y"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -335,12 +341,12 @@ triangulations.")
              (setenv "CVXOPT_BUILD_GSL" "1")
              #t)))))
     (inputs
-     `(("fftw" ,fftw)
-       ("glpk" ,glpk)
-       ("gsl" ,gsl)
-       ("lapack" ,lapack)
-       ("openblas" ,openblas)
-       ("suitesparse" ,suitesparse)))
+     (list fftw
+           glpk
+           gsl
+           lapack
+           openblas
+           suitesparse))
     (home-page "https://www.cvxopt.org")
     (synopsis "Python library for convex optimization")
     (description
@@ -351,9 +357,6 @@ extensive standard library and on the strengths of Python as a high-level
 programming language.")
     (license license:gpl3+)))
 
-(define-public python2-cvxopt
-  (package-with-python2 python-cvxopt))
-
 (define-public units
   (package
    (name "units")
@@ -376,8 +379,8 @@ programming language.")
                      (let* ((out (assoc-ref outputs "out"))
                             (bin (string-append out "/bin")))
                        (wrap-program (string-append bin "/units_cur")
-                         `("PYTHONPATH" ":" prefix
-                           ,(search-path-as-string->list (getenv "PYTHONPATH"))))
+                         `("GUIX_PYTHONPATH" ":" prefix
+                           ,(search-path-as-string->list (getenv "GUIX_PYTHONPATH"))))
                        #t))))))
    (synopsis "Conversion between thousands of scales")
    (description
@@ -426,7 +429,7 @@ routines that have been extracted from the V8 JavaScript engine.")
                (base32
                 "194pzs1mlsj4ww6v37qq3961h5hckm5h805cv0r14xj3g9wfx2sk"))))
     (build-system gnu-build-system)
-    (inputs `(("tcl" ,tcl)))                      ;for 'tclsh'
+    (inputs (list tcl))                      ;for 'tclsh'
     (synopsis "Local search for universal constants and scientific values")
     (description
      "GNU Dionysus is a convenient system for quickly retrieving the values of
@@ -515,46 +518,56 @@ precision floating point numbers.")
 (define-public gsl
   (package
     (name "gsl")
-    (version "2.6")
+    (version "2.7")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnu/gsl/gsl-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "1a460zj9xmbgvcymkdhqh313c4l29mn9cffbi5vf33x3qygk70mp"))))
+                "0av04cpblphvvs3kl5rwphniarml503501vrpqw31rd0bmwg7fzg"))))
     (build-system gnu-build-system)
     (arguments
      (let ((system (%current-system)))
-       (cond
-        ((or (string-prefix? "aarch64" system)
-             (string-prefix? "powerpc" system))
-         ;; Some sparse matrix tests are failing on AArch64 and PowerPC:
-         ;; https://lists.gnu.org/archive/html/bug-gsl/2020-04/msg00001.html
-         '(#:phases (modify-phases %standard-phases
-                      (add-before 'check 'disable-failing-tests
-                        (lambda _
-                          (substitute* "spmatrix/test.c"
-                            ((".*test_complex.*") "\n"))
-                          #t)))))
-        ((string-prefix? "i686" system)
-         ;; There are rounding issues with these tests on i686:
-         ;; https://lists.gnu.org/archive/html/bug-gsl/2016-10/msg00000.html
-         ;; https://lists.gnu.org/archive/html/bug-gsl/2020-04/msg00000.html
-         '(#:phases (modify-phases %standard-phases
-                      (add-before 'check 'disable-failing-tests
-                        (lambda _
-                          (substitute* "linalg/test.c"
-                            ((".*gsl_test\\(test_LU_decomp.*") "\n")
-                            ((".*gsl_test\\(test_LUc_decomp.*") "\n")
-                            ((".*gsl_test\\(test_cholesky_decomp.*") "\n")
-                            ((".*gsl_test\\(test_COD_lssolve2.*") "\n"))
-                          (substitute* "spmatrix/test.c"
-                            ((".*test_all.*") "\n")
-                            ((".*test_float.*") "\n")
-                            ((".*test_complex.*") "\n"))
-                          #t)))))
-        (else '()))))
+       `(#:configure-flags (list "--disable-static") ;halves package size
+         #:phases
+         (modify-phases %standard-phases
+           ,@(cond
+              ((or (string-prefix? "aarch64" system)
+                   (string-prefix? "powerpc" system))
+               ;; Some sparse matrix tests are failing on AArch64 and PowerPC:
+               ;; https://lists.gnu.org/archive/html/bug-gsl/2020-04/msg00001.html
+               '((add-before 'check 'disable-failing-tests
+                   (lambda _
+                     (substitute* "spmatrix/test.c"
+                       ((".*test_complex.*") "\n"))))))
+
+              ((string-prefix? "i686" system)
+               ;; There are rounding issues with these tests on i686:
+               ;; https://lists.gnu.org/archive/html/bug-gsl/2016-10/msg00000.html
+               ;; https://lists.gnu.org/archive/html/bug-gsl/2020-04/msg00000.html
+               '((add-before 'check 'disable-failing-tests
+                   (lambda _
+                     (substitute* "linalg/test.c"
+                       ((".*gsl_test\\(test_LU_decomp.*") "\n")
+                       ((".*gsl_test\\(test_LUc_decomp.*") "\n")
+                       ((".*gsl_test\\(test_QR_decomp_r.*") "\n")
+                       ((".*gsl_test\\(test_cholesky_decomp.*") "\n")
+                       ((".*gsl_test\\(test_pcholesky_solve.*") "\n")
+                       ((".*gsl_test\\(test_COD_lssolve2.*") "\n"))
+                     (substitute* "spmatrix/test.c"
+                       ((".*test_all.*") "\n")
+                       ((".*test_float.*") "\n")
+                       ((".*test_complex.*") "\n"))
+
+                     ;; XXX: These tests abort with:
+                     ;; gsl: cholesky.c:645: ERROR: matrix is not positive definite
+                     (substitute* '("multifit_nlinear/test.c"
+                                    "multilarge_nlinear/test.c")
+                       (("gsl_ieee_env_setup.*" all)
+                        (string-append "exit (77);\n" all)))))))
+
+              (else '()))))))
     (home-page "https://www.gnu.org/software/gsl/")
     (synopsis "Numerical library for C and C++")
     (description
@@ -563,8 +576,21 @@ and C++.  It includes a wide range of mathematical routines, with over 1000
 functions in total.  Subject areas covered by the library include:
 differential equations, linear algebra, Fast Fourier Transforms and random
 numbers.")
+
+    ;; Linear algebra routines should benefit from SIMD optimizations.
+    (properties `((tunable? . #t)))
+
     (license license:gpl3+)))
 
+;; TODO: Merge back into the gsl package as a separate output.
+(define-public gsl-static
+  (package/inherit gsl
+    (name "gsl-static")
+    (arguments
+     `(,@(package-arguments gsl)
+        #:configure-flags (list "--disable-shared")
+        #:make-flags (list "CFLAGS=-fPIC")))))
+
 (define-public sleef
   (package
     (name "sleef")
@@ -596,10 +622,7 @@ numbers.")
              (for-each make-file-writable (find-files "."))
              #t)))))
     (inputs
-     `(("fftw" ,fftw)
-       ("gmp" ,gmp)
-       ("mpfr" ,mpfr)
-       ("openssl" ,openssl)))
+     (list fftw gmp mpfr openssl))
     (home-page "https://sleef.org/")
     (synopsis "SIMD library for evaluating elementary functions and DFT")
     (description
@@ -623,7 +646,7 @@ It can utilize SIMD instructions that are available on modern processors.")
         "05bgxidxj8d9xdp82niy7cy36w181cxq7p8vc3y2ixshpgp1642a"))))
     (build-system gnu-build-system)
     (inputs
-     `(("gmp" ,gmp)))
+     (list gmp))
     (arguments
      `(#:configure-flags '("--with-gmp"
                            "--disable-static")))
@@ -667,10 +690,9 @@ LP/MIP solver is included in the package.")
         (base32 "0rj92x6p9m3la5gasjbj7sa569im527ffmka5y2sv1amgd3fflrh"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("which" ,(@ (gnu packages base) which)))) ; for the tests
+     (list (@ (gnu packages base) which))) ; for the tests
     (inputs
-     `(("glpk" ,glpk)
-       ("gmp" ,gmp)))
+     (list glpk gmp))
     (home-page "http://www.4ti2.de/")
     (synopsis "Mathematical tool suite for problems on linear spaces")
     (description
@@ -694,7 +716,7 @@ integer programming problems and computes Markov bases for statistics.")
         "00zdgiqb91vx6gd2103h3ijij0llspsxc6zz3iw2bll39fvkl4xq"))))
     (build-system gnu-build-system)
     (inputs
-     `(("gmp" ,gmp)))
+     (list gmp))
     (home-page "https://www.inf.ethz.ch/personal/fukudak/cdd_home/index.html")
     (synopsis "Library for convex hulls and extreme rays of polyhedra")
     (description
@@ -720,7 +742,7 @@ computing convex hulls.")
          "05kq3hzam31dlmkccv3v358r478kpvx76mw37ka12c6ypwv5dsnk"))))
     (build-system gnu-build-system)
     (inputs
-     `(("gmp" ,gmp)))
+     (list gmp))
     (arguments
      `(#:tests? #f                      ; no check phase
        #:make-flags `("CC=gcc"
@@ -759,7 +781,7 @@ be solved.")
         (base32 "1ic2q7kvxpqmgxlishygvx8d00i4wn51vkq4fyac44ahhf6c3kwd"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (home-page "https://jugit.fz-juelich.de/mlz/libcerf")
     (synopsis "Library for complex error functions")
     (description
@@ -782,7 +804,7 @@ Dawson, Faddeeva, and Voigt functions.")
          "1aq0qc1y27iw9grhgnyji3290wwfznsrk3sg6ynqpxwjdda53h4m"))))
     (build-system gnu-build-system)
     (inputs
-     `(("lrslib" ,lrslib)))
+     (list lrslib))
     (arguments
      `(#:tests? #f                      ; no check phase
        #:phases
@@ -827,14 +849,9 @@ halfspaces) or by their double description with both representations.")
                 "0l7as5z6xvbxly8alam9s4kws70952qq35a6vkljzayi4b9gbklx"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
-     `(("eigen" ,eigen)
-       ("lapack" ,lapack)
-       ("fortran" ,gfortran)))
+     (list eigen lapack gfortran))
     (synopsis "Fortran subroutines for solving eigenvalue problems")
     (description
      "ARPACK-NG is a collection of Fortran77 subroutines designed to solve
@@ -916,15 +933,15 @@ problems in numerical linear algebra.")
         "0nnap9q1mv14g57dl3vkvxrdr10k5w7zzyxs6rgxhia8q8mphgqb"))))
     (build-system cmake-build-system)
     (arguments
-     `(#:phases
+     `(#:configure-flags '("-DCMAKE_C_FLAGS=-fcommon -O2")
+       #:phases
        (modify-phases %standard-phases
          ;; These tests use a lot of stack variables and segfault without
          ;; lifting resource limits.
          (add-after 'unpack 'disable-broken-tests
            (lambda _
              (substitute* "TESTING/CMakeLists.txt"
-               (("add_lapack_test.* xeigtstz\\)") ""))
-             #t))
+               (("add_lapack_test.* xeigtstz\\)") ""))))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -946,8 +963,7 @@ problems in numerical linear algebra.")
                                            "\\.h$")))
                (copy-recursively (string-append "../clapack-"
                                                 ,version "-CMAKE/INCLUDE")
-                                 (string-append out "/include"))
-               #t))))))
+                                 (string-append out "/include"))))))))
     (home-page "https://www.netlib.org/clapack/")
     (synopsis "Numerical linear algebra library for C")
     (description
@@ -961,7 +977,7 @@ provide LAPACK for someone who does not have access to a Fortran compiler.")
 (define-public scalapack
   (package
     (name "scalapack")
-    (version "2.0.2")
+    (version "2.1.0")
     (source
      (origin
        (method url-fetch)
@@ -969,8 +985,8 @@ provide LAPACK for someone who does not have access to a Fortran compiler.")
                            version ".tgz"))
        (sha256
         (base32
-         "0p1r61ss1fq0bs8ynnx7xq4wwsdvs32ljvwjnx6yxr8gd6pawx0c"))
-       (patches (search-patches "scalapack-blacs-mpi-deprecations.patch"))))
+         "19i0h9vdc3zsy58r6fy1vs2kz2l7amifkz0cf926j90xz1n23nb1"))
+       (patches (search-patches "scalapack-gcc-10-compilation.patch"))))
     (build-system cmake-build-system)
     (inputs
      `(("mpi" ,openmpi)
@@ -980,7 +996,15 @@ provide LAPACK for someone who does not have access to a Fortran compiler.")
      `(#:configure-flags `("-DBUILD_SHARED_LIBS:BOOL=YES")
        #:phases (modify-phases %standard-phases
                   (add-before 'check 'mpi-setup
-		    ,%openmpi-setup))))
+		    ,%openmpi-setup)
+                  (add-after 'unpack 'skip-faulty-test
+                    (lambda _
+                      ;; FIXME: Skip these two tests that fail to complete for
+                      ;; unknown reasons:
+                      ;; <https://github.com/Reference-ScaLAPACK/scalapack/issues/43>.
+                      (substitute* "TESTING/CMakeLists.txt"
+                        (("^add_test\\(x[sd]hseqr.*" all)
+                         (string-append "# " all "\n"))))))))
     (home-page "http://www.netlib.org/scalapack/")
     (synopsis "Library for scalable numerical linear algebra")
     (description
@@ -991,6 +1015,67 @@ singular value problems.")
     (license (license:non-copyleft "file://LICENSE"
                                    "See LICENSE in the distribution."))))
 
+(define-public feedgnuplot
+  (package
+    (name "feedgnuplot")
+    (version "1.60")
+    (home-page "https://github.com/dkogan/feedgnuplot")
+    (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
+                "0403hwlian2s431m36qdzcczhvfjvh7128m64hmmwbbrgh0n7md7"))))
+    (build-system perl-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'adjust-tests
+           (lambda _
+             (substitute* "t/plots.t"
+               ;; XXX: The vnlog tests uses 'echo' with escaped strings,
+               ;; but does not enable escape interpretation.
+               (("echo -n ")
+                "echo -ne "))))
+         (add-after 'install 'install-documentation
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (doc (string-append out "/share/doc/feedgnuplot")))
+               (mkdir-p doc)
+               (invoke "pod2html" "--title=feedgnuplot" "bin/feedgnuplot"
+                       "--outfile" (string-append doc "/feedgnuplot.html")))))
+       (add-after 'install 'wrap
+         (lambda* (#:key inputs outputs #:allow-other-keys)
+           (let* ((out (assoc-ref outputs "out"))
+                  (gnuplot (search-input-file inputs "/bin/gnuplot"))
+                  ;; XXX: We need List::MoreUtils as well as its supporting
+                  ;; (propagated) modules; for now just refer to labels.
+                  (modules '("perl-list-moreutils" "perl-exporter-tiny"))
+                  (PERL5LIB (string-join
+                             (map (lambda (input)
+                                    (string-append (assoc-ref inputs input)
+                                                   "/lib/perl5/site_perl"))
+                                  modules)
+                             ":")))
+             (wrap-program (string-append out "/bin/feedgnuplot")
+               `("PERL5LIB" ":" suffix (,PERL5LIB))
+               `("PATH" ":" suffix (,(dirname gnuplot))))))))))
+    (inputs
+     (list gnuplot perl-list-moreutils vnlog))
+    (native-inputs
+     ;; For tests.
+     (list perl-ipc-run perl-string-shellquote))
+    (synopsis "Pipe-oriented plotting tool")
+    (description
+     "@command{feedgnuplot} is a tool to plot realtime and stored data
+from the command line, using @command{gnuplot}.  It can read data from
+a pipe or file, make a variety of transformations, and render the result
+in the terminal or with an external viewer.")
+    (license license:gpl1+))) ;any version
+
 (define-public gnuplot
   (package
     (name "gnuplot")
@@ -1003,11 +1088,7 @@ singular value problems.")
        (sha256
         (base32 "1fp7rbhjmz2w63r72kicf8lfszzimz2csfx868fracw167hpaz75"))))
     (build-system gnu-build-system)
-    (inputs `(("readline" ,readline)
-              ("cairo" ,cairo)
-              ("pango" ,pango)
-              ("gd" ,gd)
-              ("lua" ,lua)))
+    (inputs (list readline cairo pango gd lua))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("texlive" ,texlive-tiny)))
@@ -1042,7 +1123,7 @@ plotting engine by third-party applications like Octave.")
        (sha256
         (base32 "11wqmd443b4nksdbzp1msdws3av948nmwq1xz80w6hka3ss2aigd"))))
     (native-inputs
-     `(("fortran" ,gfortran)))
+     (list gfortran))
     (build-system gnu-build-system)
     (synopsis "General Cartographic Transformation Package (GCTP)")
     (description
@@ -1071,9 +1152,7 @@ computations.")
                                 "hdf4-tirpc.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("bison" ,bison)
-       ("flex" ,flex)))
+     (list gfortran bison flex))
     (inputs
      `(("zlib" ,zlib)
        ("libjpeg" ,libjpeg-turbo)
@@ -1081,6 +1160,8 @@ computations.")
     (arguments
      `(#:parallel-tests? #f
        #:configure-flags (list "--enable-shared"
+                               "FCFLAGS=-fallow-argument-mismatch"
+                               "FFLAGS=-fallow-argument-mismatch"
                                (string-append "CPPFLAGS=-I"
                                               (assoc-ref %build-inputs "libtirpc")
                                               "/include/tirpc"))
@@ -1114,7 +1195,7 @@ computations.")
              ;; .so-files.  We truncate the hashes to avoid
              ;; unnecessary store references to those compilers:
              (substitute* "libhdf4.settings"
-               (("(/gnu/store/)([a-Z0-9]*)" all prefix hash)
+               (("(/gnu/store/)([0-9A-Za-z]*)" all prefix hash)
                 (string-append prefix (string-take hash 10) "...")))
              #t))
          (add-after 'install 'provide-absolute-libjpeg-reference
@@ -1170,10 +1251,9 @@ incompatible with HDF5.")
       (patches (search-patches "hdf5-config-date.patch"))))
     (build-system gnu-build-system)
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("perl" ,perl)))                 ;part of the test machinery needs Perl
+     (list gfortran perl))                 ;part of the test machinery needs Perl
     (outputs '("out"       ; core library
                "fortran")) ; fortran interface
     (arguments
@@ -1297,7 +1377,7 @@ extremely large and complex data collections.")
 (define-public hdf5-1.12
   (package
     (inherit hdf5-1.8)
-    (version "1.12.0")
+    (version "1.12.1")
     (source
      (origin
        (method url-fetch)
@@ -1311,7 +1391,7 @@ extremely large and complex data collections.")
                                         (take (string-split version #\.) 2))
                                  "/src/hdf5-" version ".tar.bz2")))
        (sha256
-        (base32 "0qazfslkqbmzg495jafpvqp0khws3jkxa0z7rph9qvhacil6544p"))
+        (base32 "074g3z504xf77ff38igs30i1aqxpm508p7yw78ykva7dncrgbyda"))
        (patches (search-patches "hdf5-config-date.patch"))))))
 
 (define-public hdf5
@@ -1363,9 +1443,9 @@ extremely large and complex data collections.")
        #:make-flags
        (list (string-append "HDFLIB=" (assoc-ref %build-inputs "hdf4") "/lib")
              (string-append "HDF5LIB=" (assoc-ref %build-inputs "hdf5") "/lib")
-             (string-append "ZLIB=" (assoc-ref %build-inputs "zlib") "/lib/libz.so")
+             (string-append "ZLIB=" (search-input-file %build-inputs "/lib/libz.so"))
              (string-append "JPEGLIB="
-                            (assoc-ref %build-inputs "libjpeg") "/lib/libjpeg.so")
+                            (search-input-file %build-inputs "/lib/libjpeg.so"))
              "LLEXT=so")
 
        #:phases
@@ -1382,16 +1462,20 @@ extremely large and complex data collections.")
                             "hdf/hdf5lib/exceptions/Makefile.in"
                             "hdf/hdflib/Makefile.in")
                (("\\$\\(TOP\\)/lib/slf4j-api-1\\.7\\.5\\.jar")
-                (string-append (assoc-ref inputs "slf4j-api")
-                               "/share/java/slf4j-api.jar")))
+                ;; 'slf4j-api-X.Y.Z.jar' is installed in a Maven-style
+                ;; directory, so use 'find-files' to find it.
+                (car (find-files (assoc-ref inputs "slf4j-api")
+                                 "^slf4j-api.*\\.jar$"))))
              ;; Replace outdated config.sub and config.guess:
              (with-directory-excursion "config"
                (for-each (lambda (file)
                            (install-file
-                            (string-append (assoc-ref inputs "automake")
-                                           "/share/automake-"
-                                           ,(version-major+minor (package-version automake))
-                                           "/" file) "."))
+                            (search-input-file inputs
+                                               (string-append
+                                                "/share/automake-"
+                                                ,(version-major+minor (package-version automake))
+                                                "/" file))
+                            "."))
                          '("config.sub" "config.guess")))
 
              ;; Fix embedded version number
@@ -1409,8 +1493,9 @@ extremely large and complex data collections.")
                     (testjars
                      (append
                        (map (lambda (i)
-                              (string-append (assoc-ref inputs i)
-                                             "/share/java/" i ".jar"))
+                              (car (find-files (assoc-ref inputs i)
+                                               (string-append "^" i
+                                                              ".*\\.jar$"))))
                             '("slf4j-api" "slf4j-simple"))
                        (list
                          (car (find-files (assoc-ref inputs "junit") "jar$"))
@@ -1423,11 +1508,9 @@ extremely large and complex data collections.")
                               "test/hdf5lib/junit.sh.in"
                               "examples/runExample.sh.in")
                  (("/usr/bin/test")
-                  (string-append (assoc-ref inputs "coreutils")
-                                 "/bin/test"))
+                  (search-input-file inputs "/bin/test"))
                  (("/usr/bin/uname")
-                  (string-append (assoc-ref inputs "coreutils")
-                                 "/bin/uname"))
+                  (search-input-file inputs "/bin/uname"))
                  (("CLASSPATH=[^\n]*")
                   (string-append "CLASSPATH=" class-path)))
                (setenv "CLASSPATH" class-path))
@@ -1467,7 +1550,7 @@ implemented in C.")
                                 "hdf-eos2-fortrantests.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (inputs
      `(("hdf4" ,hdf4-alt) ; assume most HDF-EOS2 users won't use the HDF4 netCDF API
        ;; XXX: These inputs are really dependencies of hdf4.
@@ -1505,12 +1588,10 @@ System (Grid, Point and Swath).")
                                        "hdf-eos5-fix-szip.patch"
                                        "hdf-eos5-fortrantests.patch"))))
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (build-system gnu-build-system)
     (inputs
-     `(("hdf5" ,hdf5-1.8)
-       ("zlib" ,zlib)
-       ("gctp" ,gctp)))
+     (list hdf5-1.8 zlib gctp))
     (arguments
      `(#:configure-flags '("--enable-install-include" "--enable-shared"
                            "CC=h5cc -Df2cFortran" "LIBS=-lgctp")
@@ -1587,8 +1668,7 @@ Swath).")
                (("ExternalProject_Add\\(project_blosc") "message("))
              #t)))))
     (inputs
-     `(("c-blosc" ,c-blosc)
-       ("hdf5" ,hdf5-1.10)))
+     (list c-blosc hdf5-1.10))
     (home-page "https://github.com/Blosc/hdf5-blosc")
     (synopsis "Filter for HDF5 using the Blosc compressor")
     (description "This is a filter for HDF5 that uses the Blosc compressor; by
@@ -1609,7 +1689,7 @@ Blosc-compressed datasets.")
         (base32
          "1gm76jbwhz9adbxgn14zx8cj33dmjdr2g5xcy0m9c2gakp8w59kj"))))
     (build-system gnu-build-system)
-    (inputs `(("hdf5" ,hdf5-1.8)))                ;h5cc for tests
+    (inputs (list hdf5-1.8))                ;h5cc for tests
     (home-page "https://www.hdfgroup.org/products/hdf5_tools/h5check.html")
     (synopsis "HDF5 format checker")
     (description "@code{h5check} is a validation tool for verifying that an
@@ -1630,8 +1710,7 @@ HDF5 file is encoded according to the HDF File Format Specification.")
          "14ddy2xnb6sgp4hiax9v5sv4pr4l4dd4ps76nfha3nrpr1ikhcqm"))))
     (build-system cmake-build-system)
     (arguments `(#:tests? #f)) ; Tests require googletest *sources*
-    (inputs `(("lapack" ,lapack)
-              ("fftw" ,fftw)))
+    (inputs (list lapack fftw))
     ;; FIXME: Even though the fonts are available dvips complains:
     ;; "Font cmmi10 not found; characters will be left blank."
     (native-inputs
@@ -1661,12 +1740,17 @@ similar to MATLAB, GNU Octave or SciPy.")
        (sha256
         (base32
          "1a2fpp15a2rl1m50gcvvzd9y6bavl6vjf9zzf63sz5gdmq06yiqf"))
+       (modules '((guix build utils)))
+       (snippet
+        ;; Make sure this variable is defined only once.  Failing to do so
+        ;; would break builds of 'netcdf-parallel-openmpi' with a
+        ;; multiple-definition link error with GCC 10.
+        '(substitute* "ncdump/ocprint.c"
+           (("^int ocdebug") "static int ocdebug")))
        (patches (search-patches "netcdf-date-time.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("m4" ,m4)
-       ("doxygen" ,doxygen)
-       ("graphviz" ,graphviz)))
+     (list m4 doxygen graphviz))
     (inputs
      `(("hdf4" ,hdf4-alt)
        ("hdf5" ,hdf5)
@@ -1694,7 +1778,7 @@ similar to MATLAB, GNU Octave or SciPy.")
              ;; filenames to avoid unnecessary references to the corresponding
              ;; store items.
              (substitute* "libnetcdf.settings"
-               (("(/gnu/store/)([a-Z0-9]*)" all prefix hash)
+               (("(/gnu/store/)([0-9A-Za-z]*)" all prefix hash)
                 (string-append prefix (string-take hash 10) "...")))
              #t)))
 
@@ -1743,11 +1827,13 @@ sharing of scientific data.")
                 "0x4acvfhbsx1q79dkkwrwbgfhm0w5ngnp4zj5kk92s1khihmqfhj"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:parallel-tests? #f))
+     `(#:configure-flags '("FCFLAGS=-fallow-argument-mismatch"
+                           "FFLAGS=-fallow-argument-mismatch")
+       #:parallel-tests? #f))
     (inputs
-     `(("netcdf" ,netcdf)))
+     (list netcdf))
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (synopsis "Fortran interface for the netCDF library")
     (description (package-description netcdf))
     (home-page (package-home-page netcdf))
@@ -1782,8 +1868,8 @@ sharing of scientific data.")
                  (("libnlopt")
                   (string-append out "/lib/libnlopt")))
                #t))))))
-    (inputs `(("guile" ,guile-2.0)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list guile-2.0))
+    (native-inputs (list pkg-config))
     (home-page "http://ab-initio.mit.edu/wiki/")
     (synopsis "Library for nonlinear optimization")
     (description "NLopt is a library for nonlinear optimization, providing a
@@ -1823,11 +1909,10 @@ online as well as original implementations of various other algorithms.")
                                           after "\n")))
                         #t))))))
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("pkg-config" ,pkg-config)))
+     (list gfortran pkg-config))
     (inputs
      ;; TODO: Maybe add dependency on COIN-MUMPS, ASL, and HSL.
-     `(("lapack" ,lapack)))                    ;for both libblas and liblapack
+     (list lapack))                    ;for both libblas and liblapack
     (home-page "https://www.coin-or.org")
     (synopsis "Large-scale nonlinear optimizer")
     (description
@@ -1971,7 +2056,7 @@ interfaces.")
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (delete-file (string-append
                            (site-packages inputs outputs)
-                           "PyNomad-0.0.0-py"
+                           "/PyNomad-0.0.0-py"
                            (python-version (assoc-ref inputs "python"))
                            ".egg-info"))
              #t)))))
@@ -2001,10 +2086,9 @@ the result of costly computer simulations.")
                '(delete-file-recursively "ThirdParty"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("pkg-config" ,pkg-config)))
+     (list gfortran pkg-config))
     (inputs
-     `(("openblas" ,openblas)))
+     (list openblas))
     (home-page "https://www.coin-or.org")
     (synopsis "Branch-and-cut solver")
     (description
@@ -2032,10 +2116,9 @@ executable.")
                   #t))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("pkg-config" ,pkg-config)))
+     (list gfortran pkg-config))
     (inputs
-     `(("openblas" ,openblas)))
+     (list openblas))
     (home-page "https://www.coin-or.org")
     (synopsis "Linear programming solver")
     (description
@@ -2107,9 +2190,7 @@ and quadratic objectives using the Simplex algorithm.")
          (add-after 'fix-rpath 'check
            (assoc-ref %standard-phases 'check)))))
     (native-inputs
-     `(("patchelf" ,patchelf)
-       ("perl" ,perl)
-       ("sed" ,sed)))
+     (list patchelf perl sed))
     (home-page "https://www.gecode.org")
     (synopsis "Toolkit for developing constraint-based systems")
     (description "Gecode is a C++ toolkit for developing constraint-based
@@ -2177,7 +2258,7 @@ systems and applications.  It provides a modular and extensible solver.")
                              (string-append static "/include"))
                #t))))))
     (inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (native-inputs
      `(("lapack" ,lapack)
        ("openblas" ,openblas)
@@ -2194,10 +2275,166 @@ Computational Engineering and Sciences} at The University of Texas at Austin.
 includes a complete LAPACK implementation.")
     (license license:bsd-3)))
 
+(define-public libpotassco
+  ;; No public release, update together with clasp
+  (let ((revision "1")
+        (commit "2f9fb7ca2c202f1b47643aa414054f2f4f9c1821"))
+    (package
+      (name "libpotassco")
+      (version (git-version "0.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/potassco/libpotassco")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1c32f9gqclf7qx07lpx8wd720vfhkjqhzc6nyy8mjmgwpmb3iyyn"))))
+      (arguments
+       `(#:configure-flags '("-DLIB_POTASSCO_BUILD_TESTS=on"
+                             "-DLIB_POTASSCO_INSTALL_LIB=on"
+                             "-DBUILD_SHARED_LIBS=on")
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'patch-cmake
+             (lambda _
+               (substitute* "CMakeLists.txt"
+                 ;; clasp expects lowercase potassco and include directory is
+                 ;; lowercase as well, so let's use that
+                 (("\"cmake/Potassco\"") "\"cmake/potassco\"")
+                 (("PotasscoConfig\\.cmake") "potassco-config.cmake")
+                 (("PotasscoConfigVersion\\.cmake")
+                  "potassco-config-version.cmake"))
+               (rename-file "cmake/PotasscoConfig.cmake.in"
+                            "cmake/potassco-config.cmake.in"))))))
+      (build-system cmake-build-system)
+      (home-page "https://potassco.org/")
+      (synopsis "Utility library for Potassco's projects")
+      (description "@code{libpotassco} is a utility library providing functions
+and datatypes for
+@itemize
+@item parsing, writing, and converting logic programs in aspif and smodels
+format,
+@item passing information between a grounder and a solver,
+@item and defining and parsing command-line options and for creating
+command-line applications.
+@end itemize
+Furthermore, it comes with the tool @command{lpconvert} that converts either
+between aspif and smodels format or to a human-readable text format.")
+      (license license:expat))))
+
+(define-public clasp
+  (package
+    (name "clasp")
+    (version "3.3.6")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/potassco/clasp")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0rahqiq530jckvx717858h1q5p8znp1kb6sjm95p8blkr4n3pvmj"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:configure-flags '("-DCLASP_BUILD_TESTS=on"
+                           "-DCLASP_INSTALL_LIB=on"
+                           "-DCLASP_USE_LOCAL_LIB_POTASSCO=off"
+                           "-DBUILD_SHARED_LIBS=on")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-cmake
+           (lambda _
+             (substitute* "CMakeLists.txt"
+               ;; Use lowercase to be consistent with libpotassco
+               (("\"cmake/Clasp\"") "\"cmake/clasp\"")
+               (("ClaspConfig\\.cmake") "clasp-config.cmake")
+               (("ClaspConfigVersion\\.cmake")
+                "clasp-config-version.cmake"))
+             (substitute* "cmake/ClaspConfig.cmake.in"
+               (("find_package\\(Potassco") "find_package(potassco"))
+             (rename-file "cmake/ClaspConfig.cmake.in"
+                          "cmake/clasp-config.cmake.in"))))))
+    (inputs
+     (list libpotassco))
+    (home-page "https://potassco.org/")
+    (synopsis "Answer set solver")
+    (description "clasp is an answer set solver for (extended) normal and
+disjunctive logic programs.  The primary algorithm of clasp relies on
+conflict-driven nogood learning, a technique that proved very successful for
+satisfiability checking (SAT).")
+    (license license:expat)))
+
+(define-public clingo
+  (package
+    (name "clingo")
+    (version "5.5.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/potassco/clingo")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0rfjwkcwm0mmf3r4i7asyjwb6cia4i7px7fn2kdbi9j85qvas4pb"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:configure-flags `("-DCLINGO_BUILD_TESTS=on"
+                           "-DCLINGO_INSTALL_LIB=on"
+                           "-DCLINGO_BUILD_STATIC=off"
+                           "-DCLINGO_BUILD_SHARED=on"
+                           ;; XXX: Clingo requries private headers and
+                           ;;      sources from clasp
+                           ,(string-append
+                             "-DCLASP_SOURCE_DIR="
+                             (assoc-ref %build-inputs "clasp-src")))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-cmake
+           (lambda _
+             (substitute* "CMakeLists.txt"
+               (("add_subdirectory\\(clasp\\)")
+                "find_package(clasp REQUIRED)"))
+             (substitute* "libclingo/CMakeLists.txt"
+               (("\"cmake/Clingo\"") "\"cmake/clingo\"")
+               (("ClingoConfig\\.cmake") "clingo-config.cmake")
+               (("ClingoConfigVersion\\.cmake")
+                "clingo-config-version.cmake"))
+             (substitute* "cmake/ClingoConfig.cmake.in"
+               (("find_package\\(Clasp") "find_package(clasp"))
+             (rename-file "cmake/ClingoConfig.cmake.in"
+                          "cmake/clingo-config.cmake.in")))
+         (add-after 'unpack 'skip-failing-tests
+           (lambda _
+             (with-directory-excursion "libclingo/tests"
+               (substitute* "CMakeLists.txt"
+                 (("COMMAND test_clingo" all)
+                  (string-append all
+                                 " -f "
+                                 "\"${CMAKE_CURRENT_SOURCE_DIR}/good.txt\"")))
+               (call-with-output-file "good.txt"
+                 (lambda (port)
+                   (for-each (lambda (test) (format port "~s~%" test))
+                             '("parse-ast-v2" "add-ast-v2" "build-ast-v2"
+                               "unpool-ast-v2" "parse_term"
+                               "propagator" "propgator-sequence-mining"
+                               "symbol" "visitor"))))))))))
+    (inputs
+     (list clasp libpotassco))
+    (native-inputs
+     `(("clasp-src" ,(package-source clasp))))
+    (home-page "https://potassco.org/")
+    (synopsis "Grounder and solver for logic programs")
+    (description "Clingo computes answer sets for a given logic program.")
+    (license license:expat)))
+
 (define-public ceres
   (package
     (name "ceres-solver")
-    (version "1.14.0")
+    (version "2.0.0")
     (home-page "http://ceres-solver.org/")
     (source (origin
               (method url-fetch)
@@ -2205,7 +2442,7 @@ includes a complete LAPACK implementation.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "13lfxy8x58w8vprr0nkbzziaijlh0vvqshgahvcgw0mrqdgh0i27"))))
+                "00vng9vnmdb1qga01m0why90m0041w7bn6kxa2h4m26aflfqla8h"))))
     (build-system cmake-build-system)
     (arguments
      ;; TODO: Build HTML user documentation and install separately.
@@ -2216,20 +2453,19 @@ includes a complete LAPACK implementation.")
                   (add-before 'configure 'set-library-directory
                     (lambda _
                       ;; Install libraries to lib/, not lib64/.
-                      (substitute* "internal/ceres/CMakeLists.txt"
+                      (substitute* "CMakeLists.txt"
                         (("set\\(LIB_SUFFIX \"64\"\\)")
-                         "set(LIB_SUFFIX \"\")"))
-                      #t)))))
+                         "set(LIB_SUFFIX \"\")")))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (propagated-inputs
-     `(("glog" ,glog)))                           ;for #include <glog/glog.h>
+     (list glog))                           ;for #include <glog/glog.h>
     (inputs
-     `(("eigen" ,eigen)
-       ("blas" ,openblas)
-       ("lapack" ,lapack)
-       ("suitesparse" ,suitesparse)
-       ("gflags" ,gflags)))
+     (list eigen
+           openblas
+           lapack
+           suitesparse
+           gflags))
     (synopsis "C++ library for solving large optimization problems")
     (description
      "Ceres Solver is a C++ library for modeling and solving large,
@@ -2240,7 +2476,56 @@ can solve two kinds of problems:
 @item non-linear least squares problems with bounds constraints;
 @item general unconstrained optimization problems.
 @end enumerate\n")
-    (license license:bsd-3)))
+    (license license:bsd-3)
+
+    ;; Mark as tunable to take advantage of SIMD code in Eigen.
+    (properties `((tunable? . #t)))))
+
+(define-public ceres-solver-benchmarks
+  (package
+    (inherit ceres)
+    (name "ceres-solver-benchmarks")
+    (arguments
+     '(#:modules ((ice-9 popen)
+                  (ice-9 rdelim)
+                  (guix build utils)
+                  (guix build cmake-build-system))
+
+       #:phases (modify-phases %standard-phases
+                  (delete 'configure)
+                  (replace 'build
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      (let* ((out (assoc-ref outputs "out"))
+                             (bin (string-append out "/bin")))
+                        (define flags
+                          (string-tokenize
+                           (read-line (open-pipe* OPEN_READ
+                                                  "pkg-config" "eigen3"
+                                                  "--cflags"))))
+
+                        (define (compile-file top-dir)
+                          (lambda (file)
+                            (let ((source (string-append file ".cc")))
+                              (format #t "building '~a'...~%" file)
+                              (apply invoke "c++" "-fopenmp" "-O2" "-g" "-DNDEBUG"
+                                     source "-lceres" "-lbenchmark" "-lglog"
+                                     "-pthread"
+                                     "-o" (string-append bin "/" file)
+                                     "-I" top-dir flags))))
+
+                        (mkdir-p bin)
+                        (with-directory-excursion "internal/ceres"
+                          (for-each (compile-file "..")
+                                    '("schur_eliminator_benchmark"
+                                      "small_blas_gemm_benchmark"
+                                      "small_blas_gemv_benchmark"))
+                          (with-directory-excursion "autodiff_benchmarks"
+                            ((compile-file "../..") "autodiff_benchmarks"))))))
+                  (delete 'check)
+                  (delete 'install))))
+    (inputs (modify-inputs (package-inputs ceres)
+              (prepend googlebenchmark ceres)))
+    (synopsis "Benchmarks of the Ceres optimization problem solver")))
 
 ;; For a fully featured Octave, users are strongly recommended also to install
 ;; the following packages: less, ghostscript, gnuplot.
@@ -2290,19 +2575,19 @@ can solve two kinds of problems:
        ("texinfo" ,texinfo)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("pkg-config" ,pkg-config)
-       ("perl" ,perl)
-       ;; The following inputs are not actually used in the build process.
-       ;; However, the ./configure gratuitously tests for their existence and
-       ;; assumes that programs not present at build time are also not, and
-       ;; can never be, available at run time!  If these inputs are therefore
-       ;; not present, support for them will be built out.  However, Octave
-       ;; will still run without them, albeit without the features they
-       ;; provide.
-       ("less" ,less)
-       ("ghostscript" ,ghostscript)
-       ("gnuplot" ,gnuplot)))
+     (list gfortran
+           pkg-config
+           perl
+           ;; The following inputs are not actually used in the build process.
+           ;; However, the ./configure gratuitously tests for their existence and
+           ;; assumes that programs not present at build time are also not, and
+           ;; can never be, available at run time!  If these inputs are therefore
+           ;; not present, support for them will be built out.  However, Octave
+           ;; will still run without them, albeit without the features they
+           ;; provide.
+           less
+           ghostscript
+           gnuplot))
     ;; Octave code uses this variable to detect directories holding multiple CA
     ;; certificates to verify peers with.  This is required for the networking
     ;; functions that require encryption to work properly.
@@ -2347,7 +2632,7 @@ script files.")
        ,@(package-inputs octave-cli)))
     (native-inputs
      `(("qttools" , qttools) ;for lrelease
-       ("texlive" ,(texlive-union (list texlive-epsf))) ; for texi2dvi
+       ("texlive" ,(texlive-updmap.cfg (list texlive-epsf))) ; for texi2dvi
        ,@(package-native-inputs octave-cli)))
     (arguments
      (substitute-keyword-arguments (package-arguments octave-cli)
@@ -2389,12 +2674,12 @@ script files.")
                         (assoc-ref %outputs "out"))
               "-UCMAKE_INSTALL_RPATH")))
     (inputs
-      `(("freetype" ,freetype)
-        ("glu" ,glu)
-        ("libxmu" ,libxmu)
-        ("mesa" ,mesa)
-        ("tcl" ,tcl)
-        ("tk" ,tk)))
+      (list freetype
+            glu
+            libxmu
+            mesa
+            tcl
+            tk))
     (native-inputs
       `(("python" ,python-wrapper)))
     (home-page "https://github.com/tpaviot/oce")
@@ -2473,17 +2758,17 @@ Open CASCADE library.")
               "-DCMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY=ON"
               "-UCMAKE_INSTALL_LIBDIR")))
     (inputs
-     `(("doxygen" ,doxygen)
-       ;("freeimage" ,freeimage)
-       ("freetype" ,freetype)
-       ("glu" ,glu)
-       ("libxext" ,libxext)
-       ("libxi" ,libxi)
-       ("libxmu" ,libxmu)
-       ("mesa" ,mesa)
-       ("tbb" ,tbb)
-       ("tcl" ,tcl)
-       ("tk" ,tk)))
+     (list doxygen
+           ;("freeimage" ,freeimage)
+           freetype
+           glu
+           libxext
+           libxi
+           libxmu
+           mesa
+           tbb-2020
+           tcl
+           tk))
     ;; TODO: build Overview documentation and add 'doc' output.
     (home-page "https://www.opencascade.com")
     (synopsis "Libraries for 3D modeling and numerical simulation")
@@ -2534,17 +2819,17 @@ This is the certified version of the Open Cascade Technology (OCCT) library.")
           #t))))
     (build-system cmake-build-system)
     (propagated-inputs
-     `(("fltk" ,fltk)
-       ("gfortran" ,gfortran)
-       ("glu" ,glu)
-       ("gmp" ,gmp)
-       ("hdf5" ,hdf5)
-       ("lapack" ,lapack)
-       ("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("mesa" ,mesa)
-       ("metis" ,metis)
-       ("opencascade-occt" ,opencascade-occt)))
+     (list fltk
+           gfortran
+           glu
+           gmp
+           hdf5
+           lapack
+           libx11
+           libxext
+           mesa
+           metis
+           opencascade-occt))
     (inputs
      `(("fontconfig" ,fontconfig)
        ("libxft" ,libxft)
@@ -2632,19 +2917,18 @@ ASCII text files using Gmsh's own scripting language.")
                    ,(list (string-append (assoc-ref inputs "qtsvg")
                                          "/lib/qt5/plugins/"))))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ;;("python-astropy" ,python-astropy) ;; FIXME: Package this.
-       ("qttools" ,qttools)
-       ("python-sip" ,python-sip-4)))
+     (list pkg-config
+           ;;("python-astropy" ,python-astropy) ;; FIXME: Package this.
+           qttools python-sip-4))
     (inputs
-     `(("ghostscript" ,ghostscript) ;optional, for EPS/PS output
-       ("python-dbus" ,python-dbus)
-       ("python-h5py" ,python-h5py) ;optional, for HDF5 data
-       ("python-pyqt" ,python-pyqt)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)))
+     (list ghostscript ;optional, for EPS/PS output
+           python-dbus
+           python-h5py ;optional, for HDF5 data
+           python-pyqt
+           qtbase-5
+           qtsvg))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (home-page "https://veusz.github.io/")
     (synopsis "Scientific plotting package")
     (description
@@ -2683,7 +2967,7 @@ September 2004}")
 (define-public petsc
   (package
     (name "petsc")
-    (version "3.11.2")
+    (version "3.16.1")
     (source
      (origin
       (method url-fetch)
@@ -2691,89 +2975,92 @@ September 2004}")
       (uri (string-append "http://ftp.mcs.anl.gov/pub/petsc/release-snapshots/"
                           "petsc-lite-" version ".tar.gz"))
       (sha256
-       (base32 "1645nwwcp9bcnfnxikk480mhbbacdvhsay2c401818hk97dqj5nx"))))
+       (base32 "0sm03vpg010q9icidiq587n325m0598cj6hab2rdv85nwyygg74h"))))
     (outputs '("out"                    ; libraries and headers
                "examples"))             ; ~30MiB of examples
     (build-system gnu-build-system)
     (native-inputs
-     `(("python" ,python-2)))
+     (list python which))
     (inputs
-     `(("gfortran" ,gfortran)
-       ("openblas" ,openblas)
-       ("superlu" ,superlu)
-       ;; leaving out hdf5 and fftw, as petsc expects them to be built with mpi
-       ;; leaving out opengl, as configuration seems to only be for mac
-       ))
+     (list gfortran openblas superlu
+           ;; leaving out hdf5 and fftw, as petsc expects them to be built with mpi
+           ;; leaving out opengl, as configuration seems to only be for mac
+           ))
     (arguments
-     `(#:test-target "test"
-       #:parallel-build? #f             ; build is parallel by default
-       #:configure-flags
-       `("--with-mpi=0"
-         "--with-openmp=1"
-         "--with-openblas=1"
-         "--with-superlu=1")
-       #:make-flags
-       ;; Honor (parallel-job-count) for build.  Do not use --with-make-np,
-       ;; whose value is dumped to $out/lib/petsc/conf/petscvariables.
-       (list (format #f "MAKE_NP=~a" (parallel-job-count)))
-       #:phases
-       (modify-phases %standard-phases
-        (replace 'configure
-          ;; PETSc's configure script is actually a python script, so we can't
-          ;; run it with bash.
-          (lambda* (#:key outputs (configure-flags '())
-                          #:allow-other-keys)
-            (let* ((prefix (assoc-ref outputs "out"))
-                   (flags `(,(string-append "--prefix=" prefix)
-                            ,@configure-flags)))
-              (format #t "build directory: ~s~%" (getcwd))
-              (format #t "configure flags: ~s~%" flags)
-              (apply invoke "./configure" flags))))
-        (add-after 'configure 'clean-local-references
-          (lambda* (#:key outputs #:allow-other-keys)
-            (let ((out (assoc-ref outputs "out")))
-              (substitute* (find-files "." "^petsc(conf|machineinfo).h$")
-                ;; Prevent build directory from leaking into compiled code
-                (((getcwd)) out)
-                ;; Scrub timestamp for reproducibility
-                ((".*Libraries compiled on.*") ""))
-              (substitute* (find-files "." "petscvariables")
-                ;; Do not expose build machine characteristics, set to defaults.
-                (("MAKE_NP = [:digit:]+") "MAKE_NP = 2")
-                (("NPMAX = [:digit:]+") "NPMAX = 2"))
-              #t)))
-        (add-after 'install 'clean-install
-          ;; Try to keep installed files from leaking build directory names.
-          (lambda* (#:key inputs outputs #:allow-other-keys)
-            (let ((out (assoc-ref outputs "out")))
-              (substitute* (map (lambda (file)
-                                  (string-append out "/lib/petsc/conf/" file))
-                                '("petscvariables"))
-                (((getcwd)) out))
-              ;; Make compiler references point to the store
-              (substitute* (string-append out "/lib/petsc/conf/petscvariables")
-                (("= (gcc|g\\+\\+|gfortran)" _ compiler)
-                 (string-append "= " (which compiler))))
-              ;; PETSc installs some build logs, which aren't necessary.
-              (for-each (lambda (file)
-                          (let ((f (string-append out "/lib/petsc/conf/" file)))
-                            (when (file-exists? f)
-                              (delete-file f))))
-                        '("configure.log" "make.log" "gmake.log"
-                          "test.log" "error.log" "RDict.db"
-                          "PETScBuildInternal.cmake"
-                          ;; Once installed, should uninstall with Guix
-                          "uninstall.py"))
-              #t)))
-        (add-after 'install 'move-examples
-          (lambda* (#:key outputs #:allow-other-keys)
-            (let* ((out (assoc-ref outputs "out"))
-                   (examples (assoc-ref outputs "examples"))
-                   (exdir (string-append out "/share/petsc/examples"))
-                   (exdir' (string-append examples "/share/petsc/examples")))
-              (copy-recursively exdir exdir')
-              (delete-file-recursively exdir)
-              #t))))))
+     (list
+      #:test-target "test"
+      #:parallel-build? #f             ; build is parallel by default
+      #:configure-flags
+      #~(list "--with-mpi=0"
+              "--with-openmp=1"
+              "--with-openblas=1"
+              (string-append "--with-openblas-dir="
+                             #$(this-package-input "openblas"))
+              "--with-superlu=1")
+      #:make-flags
+      ;; Honor (parallel-job-count) for build.  Do not use --with-make-np,
+      ;; whose value is dumped to $out/lib/petsc/conf/petscvariables.
+      #~(list (format #f "MAKE_NP=~a" (parallel-job-count)))
+      #:phases
+      #~(modify-phases %standard-phases
+          (replace 'configure
+            ;; PETSc's configure script is actually a python script, so we can't
+            ;; run it with bash.
+            (lambda* (#:key outputs (configure-flags '())
+                      #:allow-other-keys)
+              (let* ((prefix (assoc-ref outputs "out"))
+                     (flags `(,(string-append "--prefix=" prefix)
+                              ,@configure-flags)))
+                (format #t "build directory: ~s~%" (getcwd))
+                (format #t "configure flags: ~s~%" flags)
+                (apply invoke "./configure" flags)
+
+                ;; Generate test scripts with the right shebang.
+                (substitute* "config/example_template.py"
+                  (("#!/usr/bin/env bash")
+                   (string-append "#!" (which "bash")))))))
+          (add-after 'configure 'clean-local-references
+            (lambda* (#:key outputs #:allow-other-keys)
+              (let ((out (assoc-ref outputs "out")))
+                (substitute* (find-files "." "^petsc(conf|machineinfo).h$")
+                  ;; Prevent build directory from leaking into compiled code
+                  (((getcwd)) out)
+                  ;; Scrub timestamp for reproducibility
+                  ((".*Libraries compiled on.*") ""))
+                (substitute* (find-files "." "petscvariables")
+                  ;; Do not expose build machine characteristics, set to defaults.
+                  (("MAKE_NP = [:digit:]+") "MAKE_NP = 2")
+                  (("NPMAX = [:digit:]+") "NPMAX = 2")))))
+          (add-after 'install 'clean-install
+            ;; Try to keep installed files from leaking build directory names.
+            (lambda* (#:key inputs outputs #:allow-other-keys)
+              (let ((out (assoc-ref outputs "out")))
+                (substitute* (map (lambda (file)
+                                    (string-append out "/lib/petsc/conf/" file))
+                                  '("petscvariables"))
+                  (((getcwd)) out))
+                ;; Make compiler references point to the store
+                (substitute* (string-append out "/lib/petsc/conf/petscvariables")
+                  (("= (gcc|g\\+\\+|gfortran)" _ compiler)
+                   (string-append "= " (which compiler))))
+                ;; PETSc installs some build logs, which aren't necessary.
+                (for-each (lambda (file)
+                            (let ((f (string-append out "/lib/petsc/conf/" file)))
+                              (when (file-exists? f)
+                                (delete-file f))))
+                          '("configure.log" "make.log" "gmake.log"
+                            "test.log" "error.log" "RDict.db"
+                            "PETScBuildInternal.cmake"
+                            ;; Once installed, should uninstall with Guix
+                            "uninstall.py")))))
+          (add-after 'install 'move-examples
+            (lambda* (#:key outputs #:allow-other-keys)
+              (let* ((out (assoc-ref outputs "out"))
+                     (examples (assoc-ref outputs "examples"))
+                     (exdir (string-append out "/share/petsc/examples"))
+                     (exdir' (string-append examples "/share/petsc/examples")))
+                (copy-recursively exdir exdir')
+                (delete-file-recursively exdir)))))))
     (home-page "https://www.mcs.anl.gov/petsc")
     (synopsis "Library to solve PDEs")
     (description "PETSc, pronounced PET-see (the S is silent), is a suite of
@@ -2783,16 +3070,18 @@ scientific applications modeled by partial differential equations.")
               "https://www.mcs.anl.gov/petsc/documentation/copyright.html"))))
 
 (define-public petsc-complex
-  (package (inherit petsc)
+  (package
+    (inherit petsc)
     (name "petsc-complex")
     (arguments
      (substitute-keyword-arguments (package-arguments petsc)
        ((#:configure-flags cf)
-        `(cons "--with-scalar-type=complex" ,cf))))
+        #~(cons "--with-scalar-type=complex" #$cf))))
     (synopsis "Library to solve PDEs (with complex scalars)")))
 
 (define-public petsc-openmpi
-  (package (inherit petsc)
+  (package
+    (inherit petsc)
     (name "petsc-openmpi")
     (inputs
      `(("hdf5" ,hdf5-parallel-openmpi)
@@ -2806,55 +3095,56 @@ scientific applications modeled by partial differential equations.")
     (arguments
      (substitute-keyword-arguments (package-arguments petsc)
        ((#:configure-flags cf)
-        ``("--with-hypre=1"
-           "--with-mpiexec=mpirun"
-           "--with-metis=1"
-           "--with-mumps=1"
-           "--with-scalapack=1"
-           "--with-ptscotch=1"
-           ,(string-append "--with-mpi-dir="
-                           (assoc-ref %build-inputs "openmpi"))
-           ,(string-append "--with-hdf5-include="
-                           (assoc-ref %build-inputs "hdf5") "/include")
-           ,(string-append "--with-hdf5-lib="
-                           (assoc-ref %build-inputs "hdf5") "/lib/libhdf5.a")
-           ,@(delete "--with-mpi=0" ,cf)))
+        #~`("--with-hypre=1"
+            "--with-mpiexec=mpirun"
+            "--with-metis=1"
+            "--with-mumps=1"
+            "--with-scalapack=1"
+            "--with-ptscotch=1"
+            ,(string-append "--with-mpi-dir="
+                            #$(this-package-input "openmpi"))
+            ,(string-append "--with-hdf5-include="
+                            #$(this-package-input "hdf5") "/include")
+            ,(string-append "--with-hdf5-lib="
+                            #$(this-package-input "hdf5") "/lib/libhdf5.a")
+            ,@(delete "--with-mpi=0" #$cf)))
        ((#:phases phases)
-        `(modify-phases ,phases
-           (add-before 'configure 'mpi-setup
-             ,%openmpi-setup)))))
+        #~(modify-phases #$phases
+            (add-before 'configure 'mpi-setup
+              #$%openmpi-setup)))))
     (synopsis "Library to solve PDEs (with MUMPS and MPI support)")))
 
 (define-public petsc-complex-openmpi
-  (package (inherit petsc-complex)
+  (package
+    (inherit petsc-complex)
     (name "petsc-complex-openmpi")
     (inputs
-     `(("openmpi" ,openmpi)
-       ,@(package-inputs petsc-complex)))
+     (modify-inputs (package-inputs petsc-complex)
+       (prepend openmpi)))
     (arguments
      (substitute-keyword-arguments (package-arguments petsc-complex)
        ((#:configure-flags cf)
-        ``("--with-mpiexec=mpirun"
-           ,(string-append "--with-mpi-dir="
-                           (assoc-ref %build-inputs "openmpi"))
-           ,@(delete "--with-mpi=0" ,cf)))
+        #~`("--with-mpiexec=mpirun"
+            ,(string-append "--with-mpi-dir="
+                            #$(this-package-input "openmpi"))
+            ,@(delete "--with-mpi=0" #$cf)))
        ((#:phases phases)
-        `(modify-phases ,phases
-           (add-before 'configure 'mpi-setup
-             ,%openmpi-setup)))))
+        #~(modify-phases #$phases
+            (add-before 'configure 'mpi-setup
+              #$%openmpi-setup)))))
     (synopsis "Library to solve PDEs (with complex scalars and MPI support)")))
 
 (define-public python-petsc4py
   (package
     (name "python-petsc4py")
-    (version "3.11.0")
+    (version "3.16.1")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "petsc4py" version))
         (sha256
           (base32
-           "1rm1qj5wlkhxl39by9n78lh3gbmii31wsnb8j1rr5hvfr5xgbx2q"))
+           "0pxr6qa7p0pmpq0av29lx8lzlrdcfdzj87ynixzr8dn42y13a662"))
         (modules '((guix build utils)))
         (snippet
          '(begin
@@ -2878,7 +3168,7 @@ scientific applications modeled by partial differential equations.")
          (add-before 'check 'mpi-setup
            ,%openmpi-setup))))
     (native-inputs
-     `(("python-cython" ,python-cython)))
+     (list python-cython))
     (inputs
      `(("petsc" ,petsc-openmpi)
        ("python-numpy" ,python-numpy)))
@@ -2919,7 +3209,7 @@ savings are consistently > 5x.")
 (define-public slepc
   (package
     (name "slepc")
-    (version "3.11.1")
+    (version "3.16.1")
     (source
      (origin
        (method url-fetch)
@@ -2927,16 +3217,17 @@ savings are consistently > 5x.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "1yq84q9wannc8xwapxpay4ypdd675picwi395hhsdvng9q6hf5j8"))))
+         "1ysfm77s5fcissv3q0k5d65mlp93zi4anqg62q3cd25dn66sva5i"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("python" ,python-2)
+     `(("python" ,python)
+       ("which" ,which)
        ("petsc:examples" ,petsc "examples"))) ;for gmakegen.py script
     (inputs
      `(("arpack" ,arpack-ng)
        ("gfortran" ,gfortran)))
     (propagated-inputs
-     `(("petsc" ,petsc)))
+     (list petsc))
     (arguments
      `(#:parallel-build? #f             ;build is parallel by default
        #:configure-flags
@@ -2991,7 +3282,9 @@ as well as other related problems such as the singular value decomposition.
 The emphasis of the software is on methods and techniques appropriate for
 problems in which the associated matrices are sparse, for example, those
 arising after the discretization of partial differential equations.")
-    (license license:bsd-2)))
+    (license license:bsd-2)
+    (properties
+     `((release-monitoring-url . "http://slepc.upv.es/download/")))))
 
 (define-public slepc-complex
   (package (inherit slepc)
@@ -3012,10 +3305,10 @@ arising after the discretization of partial differential equations.")
 	     ,%openmpi-setup)))))
     (inputs
      `(("mpi" ,openmpi)
-       ("arpack" ,arpack-ng-openmpi)
        ,@(alist-delete "arpack" (package-inputs slepc))))
     (propagated-inputs
      `(("petsc" ,petsc-openmpi)
+       ("arpack" ,arpack-ng-openmpi)
        ,@(alist-delete "petsc" (package-propagated-inputs slepc))))
     (synopsis "Scalable library for eigenproblems (with MPI support)")))
 
@@ -3030,14 +3323,14 @@ arising after the discretization of partial differential equations.")
 (define-public python-slepc4py
   (package
     (name "python-slepc4py")
-    (version "3.11.0")
+    (version "3.16.1")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "slepc4py" version))
         (sha256
           (base32
-            "1ksp08kxf4wg408b9nn39z3qfhy643j22d4rfbl30vzxk2rxh4lq"))))
+            "0fq997y73ymvcvdrxycp450pxwdgnqaw62gv9rwncfgsfplkvs9w"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -3079,8 +3372,7 @@ bindings to almost all functions of SLEPc.")
         (base32 "1s9hyknfvhj86g3giayyf3dxzg23iij0rs7bdvj075v9qbyhqn9b"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (home-page "http://us.metamath.org/")
     (synopsis "Proof verifier based on a minimalistic formalism")
     (description
@@ -3211,12 +3503,9 @@ book.")
                     (string-append gecode "/bin/fzn-gecode"))
                    (newline port)))))))))
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)))
+     (list bison flex))
     (inputs
-     `(("cbc" ,cbc)
-       ("gecode" ,gecode)
-       ("zlib" ,zlib)))
+     (list cbc gecode zlib))
     (home-page "https://www.minizinc.org")
     (synopsis "High-level constraint modeling language")
     (description "MiniZinc is a high-level modeling language for constraint
@@ -3283,7 +3572,7 @@ SCALAP       = -Wl,-rpath=$(SCALAPDIR) -Wl,-rpath='$$ORIGIN' -L$(SCALAPDIR) -lsc
 LIBOTHERS    = -pthread
 CDEFS        = -DAdd_
 PIC          = -fPIC
-OPTF         = -O2 -DALLOW_NON_INIT $(PIC)
+OPTF         = -O2 -DALLOW_NON_INIT -fallow-argument-mismatch $(PIC)
 OPTL         = -O2 $(PIC)
 OPTC         = -O2 $(PIC)
 INCS         = $(INCSEQ)
@@ -3410,8 +3699,7 @@ sparse system of linear equations A x = b using Gaussian elimination.")
          "1aapydwwkydbwgz07n7ma3a5jy9n3v0shy6q6j8mi4wr3crhx45a"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-nokogiri" ,ruby-nokogiri)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list ruby-nokogiri ruby-rspec))
     (synopsis "AsciiMath parsing and conversion library")
     (description
      "A pure Ruby AsciiMath parsing and conversion library.  AsciiMath is an
@@ -3464,7 +3752,7 @@ void mc64ad_ (int *a, int *b, int *c, int *d, int *e, double *f, int *g,
                  #t)))))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("tcsh" ,tcsh)))
+     (list tcsh))
     (inputs
      `(("blas" ,openblas)
        ("gfortran" ,gfortran)))
@@ -3527,7 +3815,7 @@ void mc64ad_dist (int *a, int *b, int *c, int *d, int *e, double *f, int *g,
                                 "superlu-dist-awpm-grid.patch"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("tcsh" ,tcsh)))
+     (list tcsh))
     (inputs
      `(("gfortran" ,gfortran)
        ("blas" ,openblas)
@@ -3592,11 +3880,9 @@ implemented in ANSI C, and MPI for communications.")
                                "scotch-integer-declarations.patch"))))
     (build-system gnu-build-system)
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (native-inputs
-     `(("flex" ,flex)
-       ("bison" ,bison)
-       ("gfortran" ,gfortran)))
+     (list flex bison gfortran))
     (outputs '("out" "metis"))
     (arguments
      `(#:make-flags (list (string-append "prefix=" %output))
@@ -3732,9 +4018,7 @@ YACC = bison -pscotchyy -y -b y
   (package (inherit scotch)
     (name "scotch-shared")
     (native-inputs
-     `(("gcc" ,gcc)
-       ("flex" ,flex)
-       ("bison" ,bison)))
+     (list gcc flex bison))
     (arguments
      (substitute-keyword-arguments (package-arguments scotch)
        ((#:phases scotch-shared-phases)
@@ -3790,7 +4074,7 @@ YACC = bison -pscotchyy -y -b y
   (package (inherit scotch)
     (name "pt-scotch")
     (propagated-inputs
-     `(("openmpi" ,openmpi)))           ;Headers include MPI headers
+     (list openmpi))           ;Headers include MPI headers
     (arguments
      (substitute-keyword-arguments (package-arguments scotch)
        ((#:phases scotch-phases)
@@ -3814,7 +4098,7 @@ YACC = bison -pscotchyy -y -b y
   (package (inherit scotch32)
     (name "pt-scotch32")
     (propagated-inputs
-     `(("openmpi" ,openmpi)))                     ;headers include MPI headers
+     (list openmpi))                     ;headers include MPI headers
     (arguments
      (substitute-keyword-arguments (package-arguments scotch32)
        ((#:phases scotch32-phases)
@@ -3837,7 +4121,7 @@ YACC = bison -pscotchyy -y -b y
   (package (inherit scotch-shared)
     (name "pt-scotch-shared")
     (propagated-inputs
-     `(("openmpi" ,openmpi)))           ;Headers include MPI headers
+     (list openmpi))           ;Headers include MPI headers
     (arguments
      (substitute-keyword-arguments (package-arguments scotch-shared)
        ((#:phases scotch-shared-phases)
@@ -3956,10 +4240,9 @@ processor cores.")
      `(#:configure-flags
        (list "--disable-static")))
     (inputs
-     `(("glib" ,glib)
-       ("gtk+" ,gtk+)))
+     (list glib gtk+))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.gnu.org/software/gsegrafix/")
     (synopsis "GNOME application to create scientific and engineering plots")
     (description
@@ -3986,25 +4269,20 @@ to BMP, JPEG or PNG image formats.")
        (patches (search-patches "maxima-defsystem-mkdir.patch"))))
     (build-system gnu-build-system)
     (inputs
-     `(("gcl" ,gcl)
+     `(("bash" ,bash-minimal)
        ("gnuplot" ,gnuplot)                       ;for plots
+       ("sbcl" ,sbcl)
        ("sed" ,sed)
        ("tk" ,tk)))                               ;Tcl/Tk is used by 'xmaxima'
     (native-inputs
-     `(("texinfo" ,texinfo)
-       ("perl" ,perl)
-       ("python" ,python)))
+     (list texinfo perl python))
     (arguments
      `(#:configure-flags
-       (list "--enable-gcl"
-             (string-append "--with-posix-shell="
-                            (assoc-ref %build-inputs "bash")
-                            "/bin/sh")
-             (string-append "--with-wish="
-                            (assoc-ref %build-inputs "tk")
-                            "/bin/wish"
-                            (let ((v ,(package-version tk)))
-                              (string-take v (string-index-right v #\.)))))
+       ,#~(list "--enable-sbcl"
+                (string-append "--with-sbcl=" #$sbcl "/bin/sbcl")
+                (string-append "--with-posix-shell=" #$bash-minimal "/bin/sh")
+                (string-append "--with-wish=" #$tk "/bin/wish"
+                               #$(version-major+minor (package-version tk))))
        ;; By default Maxima attempts to write temporary files to
        ;; '/tmp/nix-build-maxima-*', which won't exist at run time.
        ;; Work around that.
@@ -4013,13 +4291,12 @@ to BMP, JPEG or PNG image formats.")
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-paths
            (lambda* (#:key inputs #:allow-other-keys)
-             (let* ((sed (string-append (assoc-ref inputs "sed") "/bin/sed"))
+             (let* ((sed (search-input-file inputs "/bin/sed"))
                     (coreutils (assoc-ref inputs "coreutils"))
                     (dirname (string-append coreutils "/bin/dirname"))
                     (head (string-append coreutils "/bin/head"))
-                    (perl (string-append (assoc-ref inputs "perl") "/bin/perl"))
-                    (python (string-append (assoc-ref inputs "python")
-                                           "/bin/python3")))
+                    (perl (search-input-file inputs "/bin/perl"))
+                    (python (search-input-file inputs "/bin/python3")))
                (substitute* "src/maxima.in"
                  (("sed ") (string-append sed " "))
                  (("dirname") dirname)
@@ -4042,7 +4319,7 @@ to BMP, JPEG or PNG image formats.")
              (invoke "sh" "-c"
                      (string-append
                       "./maxima-local "
-                      "--lisp=gcl "
+                      "--lisp=sbcl "
                       "--batch-string=\"run_testsuite();\" "
                       "| grep -q \"No unexpected errors found\""))))
          ;; Make sure the doc and emacs files are found in the
@@ -4053,8 +4330,7 @@ to BMP, JPEG or PNG image formats.")
              (let* ((gnuplot (assoc-ref inputs "gnuplot"))
                     (out (assoc-ref outputs "out"))
                     (datadir (string-append out "/share/maxima/" ,version))
-                    (binutils (string-append (assoc-ref inputs "binutils")
-                                             "/bin")))
+                    (binutils (dirname (search-input-file inputs "/bin/as"))))
                (with-directory-excursion out
                  (mkdir-p "share/emacs")
                  (mkdir-p "share/doc")
@@ -4103,12 +4379,12 @@ point numbers.")
     (native-inputs
      `(("gettext" ,gettext-minimal)))
     (inputs
-     `(("wxwidgets" ,wxwidgets)
-       ("maxima" ,maxima)
-       ;; Runtime support.
-       ("adwaita-icon-theme" ,adwaita-icon-theme)
-       ("gtk+" ,gtk+)
-       ("shared-mime-info" ,shared-mime-info)))
+     (list wxwidgets
+           maxima
+           ;; Runtime support.
+           adwaita-icon-theme
+           gtk+
+           shared-mime-info))
     (arguments
      `(#:tests? #f                      ; tests fail non-deterministically
        #:phases
@@ -4220,16 +4496,17 @@ parts of it.")
 (define-public openblas
   (package
     (name "openblas")
-    (version "0.3.9")
+    (version "0.3.18")
     (source
      (origin
-       (method url-fetch)
-       (uri (string-append "mirror://sourceforge/openblas/v" version "/OpenBLAS%20"
-                           version "%20version.tar.gz"))
-       (file-name (string-append name "-" version ".tar.gz"))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/xianyi/OpenBLAS")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
        (sha256
         (base32
-         "14iz9xnrb9xiwgj84j94mc74gg0zn2vsy9fmsijxxma1n7dck4w3"))))
+         "17zdd8asylz2w71hczrz5y344p6d5ds1jn4901maw7zcp3dbk63g"))))
     (build-system gnu-build-system)
     (arguments
      `(#:test-target "test"
@@ -4246,6 +4523,7 @@ parts of it.")
        (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
              "SHELL=bash"
              "MAKE_NB_JOBS=0"           ;use jobserver for submakes
+             "NO_STATIC=1"              ;avoid a 67 MiB static archive
 
              ;; This is the maximum number of threads OpenBLAS will ever use (that
              ;; is, if $OPENBLAS_NUM_THREADS is greater than that, then NUM_THREADS
@@ -4261,20 +4539,18 @@ parts of it.")
              ,@(let ((system (or (%current-target-system) (%current-system))))
                  (cond
                   ((or (string-prefix? "x86_64" system)
-                       (string-prefix? "i686" system))
-                   '("DYNAMIC_ARCH=1"))
+                       (string-prefix? "i686" system)
+                       (string-prefix? "powerpc64le" system)
+                       (string-prefix? "aarch64" system))
+                   ;; Dynamic older enables a few extra CPU architectures that
+                   ;; were released before 2010.
+                   '("DYNAMIC_ARCH=1" "DYNAMIC_OLDER=1" "TARGET=GENERIC"))
                   ;; On some of these architectures the CPU can't be detected.
-                  ((string-prefix? "powerpc64le" system)
-                   '("DYNAMIC_ARCH=1"
-                     "TARGET=GENERIC"))
                   ;; On MIPS we force the "SICORTEX" TARGET, as for the other
                   ;; two available MIPS targets special extended instructions
                   ;; for Loongson cores are used.
                   ((string-prefix? "mips" system)
                    '("TARGET=SICORTEX"))
-                  ;; On aarch64 force the generic 'armv8-a' target
-                  ((string-prefix? "aarch64" system)
-                   '("TARGET=ARMV8"))
                   ;; Failed to detect CPU.
                   ((string-prefix? "armhf" system)
                    '("TARGET=ARMV7"))
@@ -4288,8 +4564,7 @@ parts of it.")
              ;; Get libgfortran found when building in utest.
              (setenv "FEXTRALIB"
                      (string-append "-L" (assoc-ref inputs "fortran-lib")
-                                    "/lib"))
-             #t)))))
+                                    "/lib")))))))
     (inputs
      `(("fortran-lib" ,gfortran "lib")))
     (native-inputs
@@ -4327,8 +4602,7 @@ parts of it.")
                 "05ifil6jj9424sr8kmircl8k4bmxnl3y12a79vwj1kxxva5gz50g"))
               (file-name (git-file-name "blis" version))))
     (native-inputs
-     `(("python" ,python)
-       ("perl" ,perl)))
+     (list python perl))
     (build-system gnu-build-system)
     (arguments
      `(#:modules
@@ -4548,11 +4822,7 @@ Fresnel integrals, and similar related functions as well.")
        (modify-phases %standard-phases
          (delete 'configure))))         ;no configure script
     (inputs
-     `(("tbb" ,tbb)
-       ("openblas" ,openblas)
-       ("gmp" ,gmp)
-       ("mpfr" ,mpfr)
-       ("metis" ,metis)))
+     (list tbb openblas gmp mpfr metis))
     (native-inputs
      `(("cmake" ,cmake-minimal)
        ("m4" ,m4)))
@@ -4579,6 +4849,7 @@ packages.")
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/math-atlas/Stable/"
                                   version "/atlas" version ".tar.bz2"))
+              (patches (search-patches "atlas-gfortran-compat.patch"))
               (sha256
                (base32
                 "1dyjlq3fiparvm8ypwk6rsmjzmnwk81l88gkishphpvc79ryp216"))))
@@ -4702,7 +4973,7 @@ Failure to do so will result in a library with poor performance.")
 (define-public cglm
   (package
     (name "cglm")
-    (version "0.8.2")
+    (version "0.8.4")
     (source
      (origin
        (method git-fetch)
@@ -4711,11 +4982,10 @@ Failure to do so will result in a library with poor performance.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1lcfl9ph4bnl3hckpx4hzwh8r4llnw94ik75igc5qy38wk468gmk"))))
-    (build-system cmake-build-system)
+        (base32 "0zgckh56vcdar3a4n51r84wrizyd2ssqal4nsvxd4qdjm0rvb4h0"))))
+    (build-system meson-build-system)
     (arguments
-     `(#:configure-flags
-       (list "-DCGLM_USE_TEST=ON")))
+     `(#:configure-flags '("-Dbuild_tests=true")))
     (home-page "https://github.com/recp/cglm")
     (synopsis "Mathematics C library for graphics programming")
     (description
@@ -4768,7 +5038,7 @@ Version: ~a
 Cflags: -I${includedir}~%" out ,(version-prefix version 3)))))
                         #t))))))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://glm.g-truc.net/")
     (synopsis "OpenGL Mathematics library")
     (description "OpenGL Mathematics (GLM) is a header-only C++ mathematics
@@ -4998,14 +5268,16 @@ A unique design feature of Trilinos is its focus on packages.")
 (define-public dealii
   (package
     (name "dealii")
-    (version "9.3.1")
+    (version "9.3.2")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://github.com/dealii/dealii/releases/"
                            "download/v" version "/dealii-" version ".tar.gz"))
        (sha256
-        (base32 "1f0sqvlxvl0myqcn0q6xrn1vnp5pgx143lai4a4jkh1dmdv4cbx6"))
+        (base32 "1s0kawnljg24jj6nibwrif5gxdgg2daqfylhqqpl1lvmzmmxfhak"))
+       (patches (search-patches "dealii-fix-compiliation-with-boost-1.78.patch"
+                                "dealii-fix-sundials.patch"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -5016,16 +5288,14 @@ A unique design feature of Trilinos is its focus on packages.")
     (outputs '("out" "doc"))
     (native-inputs
      ;; Required to build the documentation.
-     `(("dot" ,graphviz)
-       ("doxygen" ,doxygen)
-       ("perl" ,perl)))
+      (list graphviz doxygen perl))
     (inputs
-     `(("arpack" ,arpack-ng)
-       ("blas" ,openblas)
-       ("gfortran" ,gfortran)
-       ("lapack" ,lapack)
-       ("muparser" ,muparser)
-       ("zlib" ,zlib)))
+      (list arpack-ng
+            openblas
+            gfortran
+            lapack
+            muparser
+            zlib))
     (propagated-inputs
      ;; Some scripts are installed into share/deal.II/scripts that require
      ;; perl and python, but they are not executable (and some are missing the
@@ -5034,10 +5304,8 @@ A unique design feature of Trilinos is its focus on packages.")
      ;; Anyway, they are meant to be used at build time, so rather than adding
      ;; the interpreters here, any package depending on them should just add
      ;; the requisite interpreter to its native inputs.
-     `(("boost" ,boost)
-       ("hdf5" ,hdf5)
-       ("suitesparse" ,suitesparse)     ; For UMFPACK.
-       ("tbb" ,tbb)))
+     (list boost hdf5 suitesparse ; For UMFPACK.
+           tbb))
     (arguments
      `(#:build-type "DebugRelease" ; Supports only Debug, Release and DebugRelease.
        ;; The tests take too long and must be explicitly enabled with "make
@@ -5115,7 +5383,7 @@ in finite element programs.")
     (build-system cmake-build-system)
     (outputs '("out"))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (inputs
      `(("hdf5" ,hdf5)
        ;; FIXME: 'mkoctfile' fails with a linker error:
@@ -5168,8 +5436,7 @@ FLANN is written in C++ and contains bindings for C, Octave and Python.")
             "1vi8dl6rccqiq1apmpwawyg2ywx6a1ic1d3cvkf2hlwk1z11fb0f"))))
     (build-system gnu-build-system)
     (inputs
-     `(("mpfr" ,mpfr)
-       ("readline" ,readline)))
+     (list mpfr readline))
     (home-page "http://w-calc.sourceforge.net/index.php")
     (synopsis "Flexible command-line scientific calculator")
     (description "Wcalc is a very capable calculator.  It has standard functions
@@ -5197,10 +5464,7 @@ evaluates expressions using the standard order of operations.")
     (native-inputs `(("gettext" ,gettext-minimal)
                      ("qtbase" ,qtbase-5)
                      ("qttools" ,qttools)))
-    (inputs `(("libx11" ,libx11)
-              ("zlib" ,zlib)
-              ("libpng" ,libpng)
-              ("gsl" ,gsl)))
+    (inputs (list libx11 zlib libpng gsl))
     ;; The upstream project file ("XaoS.pro") and the Makefile it generates are
     ;; not enough for this package to install properly.  These phases fix that.
     (arguments
@@ -5254,7 +5518,7 @@ set.")
 (define-public hypre
   (package
     (name "hypre")
-    (version "2.15.1")
+    (version "2.20.0")
     (source
      (origin
        (method git-fetch)
@@ -5263,28 +5527,55 @@ set.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1lvh4ybqkriyqfg2zmic6mrg1981qv1i9vry1fdgsabn81hb71g4"))
-       (modules '((guix build utils)))
-       (snippet
-        '(begin
-           ;; Remove use of __DATE__ and __TIME__ for reproducibility;
-           ;; substitute the release date.
-           (substitute* "src/utilities/HYPRE_utilities.h"
-             (("Date Compiled: .*$")
-              "Date Compiled: Oct 19 2018 15:23:00 +0000\"\n"))
-           #t))))
+        (base32 "14iqjwg5sv1qjn7c2cfv0xxmn9rwamjrhh9hgs8fjbywcbvrkjdi"))))
     (build-system gnu-build-system)
-    (outputs '("out"                    ; 6.1 MiB of headers and libraries
-               "doc"))                  ; 4.8 MiB of documentation
+    (outputs '("out"                    ;5.3 MiB of headers and libraries
+               "doc"))                  ;12 MiB of documentation
     (native-inputs
      `(("doc++" ,doc++)
-       ("netpbm" ,netpbm)
-       ("perl" ,perl)                   ; needed to run 'ppmquant' during tests
-       ("texlive" ,(texlive-union (list texlive-xypic
-                                        texlive-cm
-                                        texlive-latex-hyperref
-                                        texlive-bibtex)))
-       ("ghostscript" ,ghostscript)))
+       ("doxygen" ,doxygen)
+       ("python" ,python)
+       ("python-breathe" ,python-breathe)
+       ("python-sphinx" ,python-sphinx)
+       ("texlive" ,(texlive-updmap.cfg (list texlive-adjustbox
+                                             texlive-amsfonts
+                                             texlive-bibtex
+                                             texlive-caption
+                                             texlive-cm
+                                             texlive-etoolbox
+                                             texlive-jknappen
+                                             texlive-sectsty
+                                             texlive-tex-gyre
+                                             texlive-wasy
+                                             texlive-xcolor
+                                             texlive-xypic
+                                             texlive-generic-listofitems
+                                             texlive-generic-ulem
+                                             texlive-latex-capt-of
+                                             texlive-latex-cmap
+                                             texlive-latex-colortbl
+                                             texlive-latex-etoc
+                                             texlive-latex-fancyhdr
+                                             texlive-latex-fancyvrb
+                                             texlive-latex-float
+                                             texlive-latex-fncychap
+                                             texlive-latex-framed
+                                             texlive-latex-geometry
+                                             texlive-latex-hanging
+                                             texlive-hyperref
+                                             texlive-latex-multirow
+                                             texlive-latex-natbib
+                                             texlive-latex-needspace
+                                             texlive-latex-newunicodechar
+                                             texlive-latex-parskip
+                                             texlive-latex-stackengine
+                                             texlive-latex-tabulary
+                                             texlive-latex-titlesec
+                                             texlive-latex-tocloft
+                                             texlive-latex-upquote
+                                             texlive-latex-varwidth
+                                             texlive-wasysym
+                                             texlive-latex-wrapfig)))))
     (inputs
      `(("blas" ,openblas)
        ("lapack" ,lapack)))
@@ -5300,12 +5591,6 @@ set.")
                            "--with-blas")
        #:phases
        (modify-phases %standard-phases
-         (add-before 'build 'set-HOME
-           (lambda _
-             ;; FIXME: texlive-union does not find the built
-             ;; metafonts, so it tries to generate them in HOME.
-             (setenv "HOME" "/tmp")
-             #t))
          (add-before 'configure 'chdir-src
            (lambda _ (chdir "src")))
          (replace 'configure
@@ -5320,7 +5605,7 @@ set.")
                                           configure-flags)))))))
          (add-after 'build 'build-docs
            (lambda _
-             (invoke "make" "-Cdocs" "pdf" "html")))
+             (invoke "make" "-C" "docs")))
          (replace 'check
            (lambda _
              (setenv "LD_LIBRARY_PATH" (string-append (getcwd) "/hypre/lib"))
@@ -5331,8 +5616,7 @@ set.")
                            (when (positive? size)
                              (error (format #f "~a size ~d; error indication~%"
                                             filename size)))))
-                       (find-files "test" ".*\\.err$"))
-             #t))
+                       (find-files "test" ".*\\.err$"))))
          (add-after 'install 'install-docs
            (lambda* (#:key outputs #:allow-other-keys)
              ;; Custom install because docs/Makefile doesn't honor ${docdir}.
@@ -5341,10 +5625,9 @@ set.")
                (with-directory-excursion "docs"
                  (for-each (lambda (base)
                              (install-file (string-append base ".pdf") docdir)
-                             (copy-recursively base docdir)) ; html docs
-                           '("HYPRE_usr_manual"
-                             "HYPRE_ref_manual")))
-               #t))))))
+                             (copy-recursively (string-append base "-html")
+                                               (string-append docdir "/" base)))
+                           '("usr-manual" "ref-manual")))))))))
     (home-page "https://computing.llnl.gov/projects\
 /hypre-scalable-linear-solvers-multigrid-methods")
     (synopsis "Library of solvers and preconditioners for linear equations")
@@ -5391,8 +5674,7 @@ structured and unstructured grid problems.")))
          "0vr8c1mz1k6mz0sgh6n3scl5c3a71iqmy5fnydrgq504icj4vym4"))))
     (build-system gnu-build-system)
     (inputs
-     `(("zlib" ,zlib)
-       ("hdf5" ,hdf5-1.8)))
+     (list zlib hdf5-1.8))
     (home-page "http://matio.sourceforge.net/")
     (synopsis "Library for reading and writing MAT files")
     (description "Matio is a library for reading and writing MAT files.  It
@@ -5482,7 +5764,7 @@ instruction sets.  Thus, an application written with Vc can be compiled for:
            "1rllzcfwc042c336mhq262a8ha90x6afq30kvk60r7i4761j4yjm"))))
       (build-system gnu-build-system)
       (inputs
-       `(("openlibm" ,openlibm)))
+       (list openlibm))
       (arguments
        `(#:tests? #f ; no tests
          #:phases
@@ -5507,15 +5789,14 @@ Longest Commons Subsequence of a set of strings.")
 (define-public jacal
   (package
     (name "jacal")
-    (version "1c4")
+    (version "1c7")
     (source (origin
               (method url-fetch)
               (uri (string-append
                     "http://groups.csail.mit.edu/mac/ftpdir/scm/jacal-"
                     version ".zip"))
-              (sha256 (base32
-                       "055zrn12a1dmy0dqkwrkq3fklbhg3yir6vn0lacp4mvbg8573a3q"))
-              (patches (search-patches "jacal-fix-texinfo.patch"))))
+              (sha256
+               (base32 "06a5sx9ikd62bpnd898g3yk818b020b1a27mk7dbfla2zizib4xz"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -5541,12 +5822,11 @@ Longest Commons Subsequence of a set of strings.")
                         (chmod wrapper #o555))))
          (replace 'configure
            (lambda* (#:key outputs #:allow-other-keys)
-             (invoke "./configure"
+             (invoke "sh" "configure"
                      (string-append "--prefix="
                                     (assoc-ref outputs "out"))))))))
-    (inputs `(("scm" ,scm)))
-    (native-inputs `(("unzip" ,unzip)
-                     ("texinfo" ,texinfo)))
+    (inputs (list scm))
+    (native-inputs (list unzip texinfo))
     (synopsis "Symbolic mathematics system")
     (description "GNU JACAL is an interactive symbolic mathematics program based on
 Scheme.  It manipulate and simplify a range of mathematical expressions such
@@ -5619,6 +5899,65 @@ as equations, scalars, vectors, and matrices.")
 theories} (SMT) solver.  It provides a C/C++ API, as well as Python bindings.")
     (license license:expat)))
 
+(define-public ocaml-z3
+  (package
+    (inherit z3)
+    (name "ocaml-z3")
+    (arguments
+     `(#:imported-modules ((guix build python-build-system)
+                           ,@%gnu-build-system-modules)
+       #:modules (((guix build python-build-system) #:select (site-packages))
+                  (guix build gnu-build-system)
+                  (guix build utils))
+       #:tests? #f; no ml tests
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'bootstrap
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (setenv "OCAMLFIND_LDCONF" "ignore")
+               (setenv "OCAMLFIND_DESTDIR" (string-append out "/lib/ocaml/site-lib"))
+               (mkdir-p (string-append out "/lib/ocaml/site-lib"))
+               (substitute* "scripts/mk_util.py"
+                 (("LIBZ3 = LIBZ3")
+                  (string-append "LIBZ3 = LIBZ3 + ' -dllpath " out "/lib'"))
+                 ;; Do not build z3 again, use the library passed as input
+                 ;; instead
+                 (("z3linkdep,") "\"\",")
+                 (("z3linkdep)") "\"\")"))
+               (invoke "python" "scripts/mk_make.py"))))
+         (replace 'configure
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (invoke "./configure"
+                     "--ml"
+                     (string-append "--prefix=" (assoc-ref outputs "out")))))
+         (add-after 'configure 'change-directory
+           (lambda _
+             (chdir "build")
+             #t))
+         (replace 'build
+           (lambda _
+             (invoke "make" "ml")))
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (invoke "ocamlfind" "install" "-destdir"
+                     (string-append (assoc-ref outputs "out") "/lib/ocaml/site-lib")
+                     "z3" "api/ml/META" "api/ml/z3enums.mli" "api/ml/z3enums.cmi"
+                     "api/ml/z3enums.cmx" "api/ml/z3native.mli"
+                     "api/ml/z3native.cmi" "api/ml/z3native.cmx"
+                     "../src/api/ml/z3.mli" "api/ml/z3.cmi" "api/ml/z3.cmx"
+                     "api/ml/libz3ml.a" "api/ml/z3ml.a" "api/ml/z3ml.cma"
+                     "api/ml/z3ml.cmxa" "api/ml/z3ml.cmxs" "api/ml/dllz3ml.so"))))))
+    (native-inputs
+     `(("which" ,which)
+       ("python" ,python-wrapper)
+       ("ocaml" ,ocaml)
+       ("ocaml-findlib" ,ocaml-findlib)))
+    (propagated-inputs
+     (list ocaml-zarith))
+    (inputs
+     (list z3))))
+
 (define-public elpa
   (package
     (name "elpa")
@@ -5725,7 +6064,7 @@ symmetric matrices.")
     (build-system cmake-build-system)
     (home-page "https://github.com/elemental/Elemental")
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (inputs
      `(("blas" ,openblas)
        ("gfortran:lib" ,gfortran "lib")
@@ -5776,12 +6115,9 @@ reduction.")
                     version ".tar.gz"))
               (sha256
                (base32
-                "0db9wgy9spwm76mgfisnifrlg69y9cadjgxjr4gdwzfgg6wgqf6d"))))
+                "1xgx3cd57vc7gbjic24j1q2za6j3ybz6nk4afvvpbwsf33xnlf4v"))))
     (inputs
-     `(("boost" ,boost)
-       ("glu" ,glu)
-       ("mesa" ,mesa)
-       ("qtbase" ,qtbase-5)))
+     (list boost glu mesa qtbase-5))
     (build-system cmake-build-system)
     (synopsis "Toolset for the mCRL2 formal specification language")
     (description
@@ -5799,7 +6135,7 @@ analysed.")
     (inherit mcrl2)
     (name "mcrl2-minimal")
     (inputs
-     `(("boost" ,boost)))
+     (list boost))
     (arguments
      '(#:configure-flags '("-DMCRL2_ENABLE_GUI_TOOLS=OFF")))))
 
@@ -5896,7 +6232,8 @@ and comparisons are supported.")
        ("blas" ,openblas)
        ("suitesparse" ,suitesparse)))   ;TODO: Add hypre
     (arguments
-     `(#:configure-flags `("-DEXAMPLES_ENABLE_C:BOOL=ON"
+     `(#:configure-flags `("-DCMAKE_C_FLAGS=-O2 -g -fcommon"
+                           "-DEXAMPLES_ENABLE_C:BOOL=ON"
                            "-DEXAMPLES_ENABLE_CXX:BOOL=ON"
                            "-DEXAMPLES_ENABLE_F77:BOOL=ON"
                            "-DEXAMPLES_ENABLE_F90:BOOL=ON"
@@ -5916,6 +6253,9 @@ and comparisons are supported.")
     (description "SUNDIALS is a family of software packages implemented with
 the goal of providing robust time integrators and nonlinear solvers that can
 easily be incorporated into existing simulation codes.")
+    (properties
+     '((release-monitoring-url
+        . "https://computing.llnl.gov/projects/sundials/sundials-software")))
     (license license:bsd-3)))
 
 (define-public sundials-openmpi
@@ -5943,6 +6283,31 @@ easily be incorporated into existing simulation codes.")
 	     ,%openmpi-setup)))))
     (synopsis "SUNDIALS with OpenMPI support")))
 
+(define-public sundials-julia
+  (package
+    (inherit sundials)
+    (name "sundials-julia")
+    (version "5.2.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/LLNL/sundials")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0nx4sqhmi126m14myzm7syv2053harav9snl0a247wnkcgs5rxrv"))))
+    (inputs
+     (modify-inputs (package-inputs sundials)
+       (prepend lapack)))
+    (arguments
+     (substitute-keyword-arguments (package-arguments sundials)
+       ((#:configure-flags flags '())
+        `(cons* "-DLAPACK_ENABLE:BOOL=ON"
+                ,flags))))
+    (synopsis "SUNDIALS with lapack support as required by julia-sundials-jll")))
+
 (define-public combinatorial-blas
   (package
     (name "combinatorial-blas")
@@ -5996,7 +6361,7 @@ linear algebra primitives specifically targeting graph analytics.")
 (define-public dune-common
   (package
     (name "dune-common")
-    (version "2.7.0")
+    (version "2.7.1")
     (source
      (origin
        (method url-fetch)
@@ -6004,23 +6369,22 @@ linear algebra primitives specifically targeting graph analytics.")
                            version "/dune-common-" version ".tar.gz"))
        (sha256
         (base32
-         "140q1zh44cr5yrjwg4b5ga803rkqv55vk30l2cqm29aklj1wb0rw"))))
+         "0sidwdkyrrqjkqhpvrlc991pzi5xzlvxk91s2n7qk3widwy7fch2"))))
     (build-system cmake-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (add-after 'build 'build-tests
-           (lambda* (#:key make-flags #:allow-other-keys)
-             (apply invoke "make" "build_tests" make-flags))))))
+           (lambda* (#:key make-flags parallel-build? #:allow-other-keys)
+             (apply invoke "make" "build_tests"
+                    `(,@(if parallel-build?
+                            `("-j" ,(number->string (parallel-job-count)))
+                            '())
+                      ,@make-flags)))))))
     (inputs
-     `(("gmp" ,gmp)
-       ("metis" ,metis)
-       ("openblas" ,openblas)
-       ("python" ,python)
-       ("superlu" ,superlu)))
+     (list gmp metis openblas python superlu))
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("pkg-config" ,pkg-config)))
+     (list gfortran pkg-config))
     (home-page "https://dune-project.org/")
     (synopsis "Distributed and Unified Numerics Environment")
     (description "DUNE, the Distributed and Unified Numerics Environment is a
@@ -6034,7 +6398,7 @@ Differences} (FD).")
 (define-public dune-geometry
   (package
     (name "dune-geometry")
-    (version "2.7.0")
+    (version "2.7.1")
     (source
      (origin
        (method url-fetch)
@@ -6042,23 +6406,24 @@ Differences} (FD).")
                            version "/dune-geometry-" version ".tar.gz"))
        (sha256
         (base32
-         "1cicvlwbyyw76npicnblxckyvhbfn3ip8isydiv3hlrlz8zcg5nr"))))
+         "068mh3fd110xl27rwxqlqy4d9cpqw2vqm2pzfrripiaqscb3byfy"))))
     (build-system cmake-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (add-after 'build 'build-tests
-           (lambda* (#:key make-flags #:allow-other-keys)
-             (apply invoke "make" "build_tests" make-flags))))))
+           (lambda* (#:key make-flags parallel-build? #:allow-other-keys)
+             (apply invoke "make" "build_tests"
+                    `(,@(if parallel-build?
+                            `("-j" ,(number->string (parallel-job-count)))
+                            '())
+                      ,@make-flags)))))))
     (inputs
-     `(("dune-common" ,dune-common)
-       ;; Optional
-       ("openblas" ,openblas)
-       ("gmp" ,gmp)
-       ("python" ,python)))
+     (list dune-common
+           ;; Optional
+           openblas gmp python))
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("pkg-config" ,pkg-config)))
+     (list gfortran pkg-config))
     (home-page "https://dune-project.org/")
     (synopsis "Distributed and Unified Numerics Environment")
     (description "DUNE, the Distributed and Unified Numerics Environment is a
@@ -6074,7 +6439,7 @@ This package contains the basic DUNE geometry classes.")
 (define-public dune-uggrid
   (package
     (name "dune-uggrid")
-    (version "2.7.0")
+    (version "2.7.1")
     (source
      (origin
        (method git-fetch)
@@ -6084,19 +6449,22 @@ This package contains the basic DUNE geometry classes.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "192miqgmfj6jwk969gydzpbv9ki7jg5nky3ydnrwa2nq29b5xkh0"))))
+         "11qz52g9d5k96fqik2lyi80xryw174rnny074pj70ardl6zzz83p"))))
     (build-system cmake-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (add-after 'build 'build-tests
-           (lambda* (#:key make-flags #:allow-other-keys)
-             (apply invoke "make" "build_tests" make-flags))))))
+           (lambda* (#:key make-flags parallel-build? #:allow-other-keys)
+             (apply invoke "make" "build_tests"
+                    `(,@(if parallel-build?
+                            `("-j" ,(number->string (parallel-job-count)))
+                            '())
+                      ,@make-flags)))))))
     (inputs
-     `(("dune-common" ,dune-common)))
+     (list dune-common))
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("pkg-config" ,pkg-config)))
+     (list gfortran pkg-config))
     (home-page "https://dune-project.org/")
     (synopsis "Distributed and Unified Numerics Environment")
     (description "DUNE, the Distributed and Unified Numerics Environment is a
@@ -6111,7 +6479,7 @@ This package contains the DUNE UG grid classes.")
 (define-public dune-grid
   (package
     (name "dune-grid")
-    (version "2.7.0")
+    (version "2.7.1")
     (source
      (origin
        (method url-fetch)
@@ -6119,26 +6487,29 @@ This package contains the DUNE UG grid classes.")
                            version "/dune-grid-" version ".tar.gz"))
        (sha256
         (base32
-         "17fjz30qazjgl11sryyxnw9klai4yz1ji4bs68013xcxc5hdv27s"))))
+         "15iws03hkbmr4a4rqqb0rriz1m8szl96wdr7gw0jmrcnlzbdbbx5"))))
     (build-system cmake-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (add-after 'build 'build-tests
-           (lambda* (#:key make-flags #:allow-other-keys)
-             (apply invoke "make" "build_tests" make-flags))))))
+           (lambda* (#:key make-flags parallel-build? #:allow-other-keys)
+             (apply invoke "make" "build_tests"
+                    `(,@(if parallel-build?
+                            `("-j" ,(number->string (parallel-job-count)))
+                            '())
+                      ,@make-flags)))))))
     (inputs
-     `(("dune-common" ,dune-common)
-       ("dune-geometry" ,dune-geometry)
-       ("gmp" ,gmp)
-       ("metis" ,metis)
-       ("openblas" ,openblas)
-       ("python" ,python)))
+     (list dune-common
+           dune-geometry
+           gmp
+           metis
+           openblas
+           python))
     (propagated-inputs
-     `(("dune-uggrid" ,dune-uggrid)))
+     (list dune-uggrid))
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("pkg-config" ,pkg-config)))
+     (list gfortran pkg-config))
     (home-page "https://dune-project.org/")
     (synopsis "Distributed and Unified Numerics Environment")
     (description "DUNE, the Distributed and Unified Numerics Environment is a
@@ -6154,7 +6525,7 @@ This package contains the basic DUNE grid classes.")
 (define-public dune-istl
   (package
     (name "dune-istl")
-    (version "2.7.0")
+    (version "2.7.1")
     (source
      (origin
        (method url-fetch)
@@ -6162,8 +6533,7 @@ This package contains the basic DUNE grid classes.")
                            version "/dune-istl-" version ".tar.gz"))
        (sha256
         (base32
-         "0gl3wgz5rs6sb4m83440ny45sbx7z7lnbi3gx6r9nm3rvy5j33f9"))
-       (patches (search-patches "dune-istl-2.7-fix-non-mpi-tests.patch"))))
+         "1cy69s1266hvnh8blznlvvkrf8i2g640rc3mf7kp872wgvdz4nb9"))))
     (build-system cmake-build-system)
     (arguments
      `(#:phases
@@ -6181,20 +6551,23 @@ This package contains the basic DUNE grid classes.")
                         ":"))
                #t)))
          (add-after 'build 'build-tests
-           (lambda* (#:key make-flags #:allow-other-keys)
-             (apply invoke "make" "build_tests" make-flags))))))
+           (lambda* (#:key make-flags parallel-build? #:allow-other-keys)
+             (apply invoke "make" "build_tests"
+                    `(,@(if parallel-build?
+                            `("-j" ,(number->string (parallel-job-count)))
+                            '())
+                      ,@make-flags)))))))
     (inputs
-     `(("dune-common" ,dune-common)
-       ;; Optional
-       ("metis" ,metis)
-       ("suitesparse" ,suitesparse)
-       ("superlu" ,superlu)
-       ("openblas" ,openblas)
-       ("gmp" ,gmp)
-       ("python" ,python)))
+     (list dune-common
+           ;; Optional
+           metis
+           suitesparse
+           superlu
+           openblas
+           gmp
+           python))
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("pkg-config" ,pkg-config)))
+     (list gfortran pkg-config))
     (home-page "https://dune-project.org/")
     (synopsis "Distributed and Unified Numerics Environment")
     (description "DUNE, the Distributed and Unified Numerics Environment is a
@@ -6213,7 +6586,7 @@ aggregation-based algebraic multigrid.")
 (define-public dune-localfunctions
   (package
     (name "dune-localfunctions")
-    (version "2.7.0")
+    (version "2.7.1")
     (source
      (origin
        (method url-fetch)
@@ -6221,7 +6594,7 @@ aggregation-based algebraic multigrid.")
                            version "/dune-localfunctions-" version ".tar.gz"))
        (sha256
         (base32
-         "1yih59h6vngii696bx1c2vil02lriij4kz0nc583mjn9kiaqxfqd"))))
+         "031i42anrhi0ngpvp42rdjbkic7v3008fwild9xg7flffwvnpshg"))))
     (build-system cmake-build-system)
     (arguments
      `(#:phases
@@ -6239,18 +6612,21 @@ aggregation-based algebraic multigrid.")
                         ":"))
                #t)))
          (add-after 'build 'build-tests
-           (lambda* (#:key make-flags #:allow-other-keys)
-             (apply invoke "make" "build_tests" make-flags))))))
+           (lambda* (#:key make-flags parallel-build? #:allow-other-keys)
+             (apply invoke "make" "build_tests"
+                    `(,@(if parallel-build?
+                            `("-j" ,(number->string (parallel-job-count)))
+                            '())
+                      ,@make-flags)))))))
     (inputs
-     `(("dune-common" ,dune-common)
-       ("dune-geometry" ,dune-geometry)
-       ;; Optional
-       ("metis" ,metis)
-       ("superlu" ,superlu)
-       ("gmp" ,gmp)))
+     (list dune-common
+           dune-geometry
+           ;; Optional
+           metis
+           superlu
+           gmp))
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("pkg-config" ,pkg-config)))
+     (list gfortran pkg-config))
     (home-page "https://dune-project.org/")
     (synopsis "Distributed and Unified Numerics Environment") ; TODO
     (description "This DUNE module provides interface and implementation for
@@ -6266,99 +6642,111 @@ assemble global function spaces on finite-element grids.")
     (license license:gpl2)))
 
 (define-public dune-alugrid
-  (package
-    (name "dune-alugrid")
-    (version "2.7.0-git-81d35682")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://gitlab.dune-project.org/extensions/dune-alugrid.git")
-             (commit "81d356827c84454b971937db02c02b90bbcd7fe5")))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "0z54lwfp53prcrs94k8gwh047l9z642jll3l56xlyfr69z0b2zz1"))))
-    (build-system cmake-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'patch-include
-           (lambda _
-             (substitute* "dune/alugrid/test/test-alugrid.cc"
-               (("doc/grids/gridfactory/testgrids")
-                "doc/dune-grid/grids/gridfactory/testgrids"))
-             #t))
-         (add-after 'build 'build-tests
-           (lambda* (#:key inputs make-flags #:allow-other-keys)
-             (setenv "CPLUS_INCLUDE_PATH"
-                     (string-append (assoc-ref inputs "dune-grid") "/share"))
-             (apply invoke "make" "build_tests" make-flags))))))
-    (inputs
-     `(("dune-common" ,dune-common)
-       ("dune-geometry" ,dune-geometry)
-       ("dune-grid" ,dune-grid)
-       ;; Optional
-       ("metis" ,metis)
-       ("openblas" ,openblas)
-       ("python" ,python)
-       ("superlu" ,superlu)
-       ("gmp" ,gmp)
-       ("zlib" ,zlib)))
-    (native-inputs
-     `(("gfortran" ,gfortran)
-       ("pkg-config" ,pkg-config)))
-    (home-page "https://dune-project.org/")
-    (synopsis "Distributed and Unified Numerics Environment")
-    (description "ALUGrid is an adaptive, loadbalancing, unstructured
+  ;; This was the last commit on the releases/2.7 branch as of 2021-12-17,
+  ;; unfortunately there was no tag for any 2.7 release.
+  (let ((commit "51bde29a2dfa7cfac4fb73d40ffd42b9c1eb1d3d"))
+    (package
+      (name "dune-alugrid")
+      (version (git-version "2.7.1" "0" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://gitlab.dune-project.org/extensions/dune-alugrid.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "0z16wg6llzxs7vjg2yilg31vwnkz8k050j6bspg3blbym0razy15"))))
+      (build-system cmake-build-system)
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'patch-include
+             (lambda _
+               (substitute* "dune/alugrid/test/test-alugrid.cc"
+                 (("doc/grids/gridfactory/testgrids")
+                  "doc/dune-grid/grids/gridfactory/testgrids"))
+               #t))
+           (add-after 'build 'build-tests
+             (lambda* (#:key make-flags parallel-build? #:allow-other-keys)
+               (setenv "CPLUS_INCLUDE_PATH"
+                       (string-append (assoc-ref inputs "dune-grid") "/share"))
+               (apply invoke "make" "build_tests"
+                      `(,@(if parallel-build?
+                              `("-j" ,(number->string (parallel-job-count)))
+                              '())
+                        ,@make-flags)))))))
+      (inputs
+       (list dune-common
+             dune-geometry
+             dune-grid
+             ;; Optional
+             metis
+             openblas
+             python
+             superlu
+             gmp
+             zlib))
+      (native-inputs
+       (list gfortran pkg-config))
+      (home-page "https://dune-project.org/")
+      (synopsis "Distributed and Unified Numerics Environment")
+      (description "ALUGrid is an adaptive, loadbalancing, unstructured
 implementation of the DUNE grid interface supporting either simplices or
 cubes.")
-    (license license:gpl2+)))
+      (license license:gpl2+))))
 
 (define-public dune-subgrid
-  (package
-    (name "dune-subgrid")
-    (version "2.7.0-git-2103a363")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-         (url "https://git.imp.fu-berlin.de/agnumpde/dune-subgrid")
-         (commit "2103a363f32e8d7b60e66eee7ddecf969f6cf762")))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-          "1wsjlypd3835c3arqjkw836cxx5q67zy447wa65q634lf6f6v9ia"))))
-    (build-system cmake-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'build 'build-tests
-           (lambda* (#:key make-flags #:allow-other-keys)
-             (apply invoke "make" "build_tests" make-flags))))))
-    (inputs
-     `(("dune-common" ,dune-common)
-       ("dune-geometry" ,dune-geometry)
-       ("dune-grid" ,dune-grid)
-       ;; Optional
-       ("metis" ,metis)
-       ("openblas" ,openblas)
-       ("gmp" ,gmp)))
-    (native-inputs
-     `(("gfortran" ,gfortran)
-       ("pkg-config" ,pkg-config)))
-    (home-page "http://numerik.mi.fu-berlin.de/dune-subgrid/index.php")
-    (synopsis "Distributed and Unified Numerics Environment")
-    (description "The dune-subgrid module marks elements of
+  ;; This was the last commit on the releases/2.7 branch as of 2021-12-17.
+  ;; Unfortunately the dune-subgrid repository contains no release tags.
+  (let ((commit "45d1ee9f3f711e209695deee97912f4954f7f280"))
+    (package
+      (name "dune-subgrid")
+      (version (git-version "2.7.1" "0" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+           (url "https://git.imp.fu-berlin.de/agnumpde/dune-subgrid")
+           (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+            "0xjf7865wil7kzym608kv3nc3ff3m3nlqich4k9wjyvy3lz6panh"))))
+      (build-system cmake-build-system)
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-after 'build 'build-tests
+             (lambda* (#:key make-flags parallel-build? #:allow-other-keys)
+               (apply invoke "make" "build_tests"
+                      `(,@(if parallel-build?
+                              `("-j" ,(number->string (parallel-job-count)))
+                              '())
+                        ,@make-flags)))))))
+      (inputs
+       (list dune-common
+             dune-geometry
+             dune-grid
+             ;; Optional
+             metis
+             openblas
+             gmp))
+      (native-inputs
+       (list gfortran pkg-config))
+      (home-page "http://numerik.mi.fu-berlin.de/dune-subgrid/index.php")
+      (synopsis "Distributed and Unified Numerics Environment")
+      (description "The dune-subgrid module marks elements of
 another hierarchical dune grid.  The set of marked elements can then be
 accessed as a hierarchical dune grid in its own right.  Dune-Subgrid
 provides the full grid interface including adaptive mesh refinement.")
-    (license license:gpl2+)))
+      (license license:gpl2+))))
 
 (define-public dune-typetree
   (package
     (name "dune-typetree")
-    (version "2.7.0")
+    (version "2.7.1")
     (source
      (origin
        (method git-fetch)
@@ -6368,25 +6756,28 @@ provides the full grid interface including adaptive mesh refinement.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1rhv25yg0q1hw50c8wlfqhgwrjl4mh62zq9v14ilwgzbfgxmpiy7"))))
+         "1kx9k8i7pdw6l6ny6nq85v5p1nd6yxldzaj8k3nizaz3q1j407pv"))))
     (build-system cmake-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (add-after 'build 'build-tests
-           (lambda* (#:key make-flags #:allow-other-keys)
-             (apply invoke "make" "build_tests" make-flags))))))
+           (lambda* (#:key make-flags parallel-build? #:allow-other-keys)
+             (apply invoke "make" "build_tests"
+                    `(,@(if parallel-build?
+                            `("-j" ,(number->string (parallel-job-count)))
+                            '())
+                      ,@make-flags)))))))
     (inputs
-     `(("dune-common" ,dune-common)
-       ;; Optional
-       ("openblas" ,openblas)
-       ("python" ,python)
-       ("metis" ,metis)
-       ("superlu" ,superlu)
-       ("gmp" ,gmp)))
+     (list dune-common
+           ;; Optional
+           openblas
+           python
+           metis
+           superlu
+           gmp))
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("pkg-config" ,pkg-config)))
+     (list gfortran pkg-config))
     (home-page "https://dune-project.org/")
     (synopsis "Distributed and Unified Numerics Environment")
     (description "TypeTree is a template library for constructing and
@@ -6397,7 +6788,7 @@ operating on statically typed trees of objects.")
 (define-public dune-functions
   (package
     (name "dune-functions")
-    (version "2.7.0")
+    (version "2.7.1")
     (source
      (origin
        (method git-fetch)
@@ -6407,7 +6798,7 @@ operating on statically typed trees of objects.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1na4gcih0kin37ksj2xj07ds04v7zx53pjdhm1hzy55jjfqdjk8h"))))
+         "04dhr4asnl38bf1gp8hrk31maav33m7q71lhl2n5yk1q1x6i77nw"))))
     (build-system cmake-build-system)
     (arguments
      `(#:phases
@@ -6419,23 +6810,26 @@ operating on statically typed trees of objects.")
                      "--exclude-regex gridviewfunctionspacebasistest")
             #t))
          (add-after 'build 'build-tests
-           (lambda* (#:key make-flags #:allow-other-keys)
-             (apply invoke "make" "build_tests" make-flags))))))
+           (lambda* (#:key make-flags parallel-build? #:allow-other-keys)
+             (apply invoke "make" "build_tests"
+                    `(,@(if parallel-build?
+                            `("-j" ,(number->string (parallel-job-count)))
+                            '())
+                      ,@make-flags)))))))
     (inputs
-     `(("dune-common" ,dune-common)
-       ("dune-istl" ,dune-istl)
-       ("dune-localfunctions" ,dune-localfunctions)
-       ("dune-grid" ,dune-grid)
-       ("dune-geometry" ,dune-geometry)
-       ("dune-typetree" ,dune-typetree)
-       ("openblas" ,openblas)
-       ("metis" ,metis)
-       ("python" ,python)
-       ("superlu" ,superlu)
-       ("gmp" ,gmp)))
+     (list dune-common
+           dune-istl
+           dune-localfunctions
+           dune-grid
+           dune-geometry
+           dune-typetree
+           openblas
+           metis
+           python
+           superlu
+           gmp))
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("pkg-config" ,pkg-config)))
+     (list gfortran pkg-config))
     (home-page "https://dune-project.org/")
     (synopsis "Distributed and Unified Numerics Environment")
     (description "The dune-functions module provides an abstraction layer for
@@ -6445,45 +6839,47 @@ implemented as callable objects, and bases of finite element spaces.")
     (license (list license:lgpl3+ license:gpl2))))
 
 (define-public dune-pdelab
-  (package
-    (name "dune-pdelab")
-    (version "2.7.0-git-476fe437")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://gitlab.dune-project.org/pdelab/dune-pdelab")
-             (commit "476fe43763fa6f459c5e4658e2a2b4b5582db834")))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "0cs36piqzn6rq0j2ih3ab3q3q9yg199wk72k5qi86pkzh7i7fdn1"))))
-    (build-system cmake-build-system)
-    (arguments '(#:tests? #f)) ; XXX: the tests cannot be compiled
-    (inputs
-     `(("dune-common" ,dune-common)
-       ("dune-istl" ,dune-istl)
-       ("dune-localfunctions" ,dune-localfunctions)
-       ("dune-geometry" ,dune-geometry)
-       ("dune-grid" ,dune-grid)
-       ("dune-typetree" ,dune-typetree)
-       ("dune-functions" ,dune-functions)
-       ;; Optional
-       ("openblas" ,openblas)
-       ("eigen" ,eigen)
-       ("metis" ,metis)
-       ("python" ,python)
-       ("superlu" ,superlu)
-       ("gmp" ,gmp)))
-    (native-inputs
-     `(("gfortran" ,gfortran)
-       ("pkg-config" ,pkg-config)))
-    (home-page "https://dune-project.org/")
-    (synopsis "Differential equations solver toolbox")
-    (description "PDELab is a partial differential equations solver toolbox
+  ;; This was the last commit on the releases/2.7 branch as of 2021-12-17,
+  ;; unfortunately there was no tag for any 2.7 release.
+  (let ((commit "09aef74d95661d18a7789d2f517ae77797eec738"))
+    (package
+      (name "dune-pdelab")
+      (version (git-version "2.7.1" "0" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://gitlab.dune-project.org/pdelab/dune-pdelab")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "0nv69ayr4gln9m1s94z9zkrxqi8nzar3z6awnvgqz595nmjf82ac"))))
+      (build-system cmake-build-system)
+      (arguments '(#:tests? #f)) ; XXX: the tests cannot be compiled
+      (inputs
+       (list dune-common
+             dune-istl
+             dune-localfunctions
+             dune-geometry
+             dune-grid
+             dune-typetree
+             dune-functions
+             ;; Optional
+             openblas
+             eigen
+             metis
+             python
+             superlu
+             gmp))
+      (native-inputs
+       (list gfortran pkg-config))
+      (home-page "https://dune-project.org/")
+      (synopsis "Differential equations solver toolbox")
+      (description "PDELab is a partial differential equations solver toolbox
 built on top of DUNE, the Distributed and Unified Numerics Environment.")
-    ;; Either GPL version 2 with "runtime exception" or LGPLv3+.
-    (license (list license:lgpl3+ license:gpl2))))
+      ;; Either GPL version 2 with "runtime exception" or LGPLv3+.
+      (license (list license:lgpl3+ license:gpl2)))))
 
 (define add-openmpi-to-dune-package
   (let ((dune-package?
@@ -6493,8 +6889,8 @@ built on top of DUNE, the Distributed and Unified Numerics Environment.")
         (if (dune-package? p)
             (package (inherit p)
               (name (string-append (package-name p) "-openmpi"))
-              (inputs `(,@(package-inputs p)
-                        ("openmpi" ,openmpi)))
+              (inputs (modify-inputs (package-inputs p)
+                        (append openmpi)))
               (arguments
                (substitute-keyword-arguments (package-arguments p)
                  ((#:phases phases '%standard-phases)
@@ -6551,7 +6947,7 @@ built on top of DUNE, the Distributed and Unified Numerics Environment.")
         (base32 "0h4xj6pyyac79ka5ibqjilfa3s9j3yxnzgpwc57b54kfh2bj3447"))))
     (build-system gnu-build-system)
     (inputs
-     `(("python2" ,python-2)))
+     (list python-2))
     (arguments
      `(#:tests? #f                      ; no tests
        #:phases
@@ -6642,7 +7038,7 @@ management via the GIMPS project's Primenet server.")
                          (append '("formats.txt" "README" "schreier.txt")
                                  (find-files "." "\\.pdf$")))))))))
     (inputs
-     `(("gmp" ,gmp)))                   ;for sumlines
+     (list gmp))                   ;for sumlines
     (home-page "https://pallini.di.uniroma1.it/")
     (synopsis "Library for graph automorphisms")
     (description "@code{nauty} (No AUTomorphisms, Yes?) is a set of
@@ -6673,10 +7069,9 @@ compiled against the nauty library.")
          "1j5aji1g2vmdvc0gqz45n2ll2l2f6czca04wiyfl5g3sm3a6vhvb"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("m4" ,m4)))
+     (list m4))
     (inputs
-     `(("glpk" ,glpk)
-       ("gmp" ,gmp)))
+     (list glpk gmp))
     (home-page "https://www.bugseng.com/parma-polyhedra-library")
     (synopsis
      "Parma Polyhedra Library for computations with polyhedra")
@@ -6712,8 +7107,8 @@ functions.")
        (base32
         "0vh7cd1915bjqzkdp3sk25ngy8cq624mkh8c53c5bnzk357kb0fk"))))
     (build-system cmake-build-system)
-    (inputs `(("qtbase" ,qtbase-5)))
-    (native-inputs `(("qttools" ,qttools)))
+    (inputs (list qtbase-5))
+    (native-inputs (list qttools))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -6795,14 +7190,14 @@ researchers and developers alike to get started on SAT.")
        ("doxygen" ,doxygen)
        ("file" ,file)))
     (inputs
-     `(("gmp" ,gmp)
-       ("mpfr" ,mpfr)
-       ("libxml2" ,libxml2)
-       ("curl" ,curl)
-       ("icu4c" ,icu4c)
-       ("gnuplot" ,gnuplot)
-       ("readline" ,readline)
-       ("libiconv" ,libiconv)))
+     (list gmp
+           mpfr
+           libxml2
+           curl
+           icu4c
+           gnuplot
+           readline
+           libiconv))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -6838,19 +7233,19 @@ cli.")
         (base32 "1nrx7gp6f1yalbdda1gb97azhbr4xclq2xf08vvbvsk8jfd6fd2v"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-       ("automake" ,automake)
-       ("autoconf" ,autoconf)
-       ("libtool" ,libtool)
-       ("file" ,file)))
+     (list pkg-config
+           intltool
+           automake
+           autoconf
+           libtool
+           file))
     (inputs
-     `(("gmp" ,gmp)
-       ("mpfr" ,mpfr)
-       ("libqalculate" ,libqalculate)
-       ("libxml2" ,libxml2)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)))
+     (list gmp
+           mpfr
+           libqalculate
+           libxml2
+           glib
+           gtk+))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -6903,36 +7298,32 @@ numeric differences and differences in numeric formats.")
 (define-public why3
   (package
     (name "why3")
-    (version "1.3.3")
+    (version "1.4.0")
     (source (origin
-              (method url-fetch)
-              (uri (string-append "https://gforge.inria.fr/frs/download.php/file"
-                                  "/38367/why3-" version ".tar.gz"))
+              (method git-fetch)
+              (uri (git-reference
+                     (url "https://gitlab.inria.fr/why3/why3")
+                     (commit version)))
+              (file-name (git-file-name name version))
               (sha256
                (base32
-                "1n0a2nn1gnk0zg339lh698g4wpk7m8m1vyi2yvifd5adqvk4milw"))))
+                "0pfsiddnk26f384wbazfpgzh1n1ibf3xq101q74mxvczi7z0a791"))))
     (build-system ocaml-build-system)
     (native-inputs
-     `(("coq" ,coq)
-       ("ocaml" ,ocaml)
-       ("which" ,which)))
+     (list autoconf automake coq ocaml which))
     (propagated-inputs
-     `(("camlzip" ,camlzip)
-       ("ocaml-graph" ,ocaml-graph)
-       ("ocaml-menhir" ,ocaml-menhir)
-       ("ocaml-num" ,ocaml-num)
-       ("ocaml-zarith" ,ocaml-zarith)))
+     (list camlzip ocaml-graph ocaml-menhir ocaml-num ocaml-zarith))
     (inputs
-     `(("coq-flocq" ,coq-flocq)
-       ("emacs-minimal" ,emacs-minimal)
-       ("zlib" ,zlib)))
+     (list coq-flocq emacs-minimal zlib))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-before 'configure 'fix-configure
+         (add-before 'configure 'bootstrap
            (lambda _
+             (invoke "./autogen.sh")
              (setenv "CONFIG_SHELL" (which "sh"))
              (substitute* "configure"
+               (("#! /bin/sh") (string-append "#!" (which "sh")))
                ;; find ocaml-num in the correct directory
                (("\\$DIR/nums.cma") "$DIR/num.cma")
                (("\\$DIR/num.cmi") "$DIR/core/num.cmi"))
@@ -6964,14 +7355,14 @@ of C, Java, or Ada programs.")
 (define-public frama-c
   (package
     (name "frama-c")
-    (version "22.0")
+    (version "24.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://frama-c.com/download/frama-c-"
-                                  version "-Titanium.tar.gz"))
+                                  version "-Chromium.tar.gz"))
               (sha256
                (base32
-                "1mq1fijka95ydrla486yr4w6wdl9l7vmp512s1q00b0p6lmfwmkh"))))
+                "0x1xgip50jdz1phsb9rzwf2ra8lshn1hmd9g967xia402wrg3sjf"))))
     (build-system ocaml-build-system)
     (arguments
      `(#:tests? #f; no test target in Makefile
@@ -6979,18 +7370,17 @@ of C, Java, or Ada programs.")
        (modify-phases %standard-phases
          (add-before 'configure 'export-shell
            (lambda* (#:key inputs #:allow-other-keys)
-             (setenv "CONFIG_SHELL" (string-append (assoc-ref inputs "bash")
-                                                   "/bin/sh"))
-             #t)))))
+             (setenv "CONFIG_SHELL"
+                     (search-input-file inputs "/bin/sh")))))))
     (inputs
-     `(("gmp" ,gmp)))
+     (list gmp))
     (propagated-inputs
-     `(("ocaml-biniou" ,ocaml-biniou)
-       ("ocaml-easy-format" ,ocaml-easy-format)
-       ("ocaml-graph" ,ocaml-graph)
-       ("ocaml-yojson" ,ocaml-yojson)
-       ("ocaml-zarith" ,ocaml-zarith)
-       ("why3" ,why3)))
+     (list ocaml-biniou
+           ocaml-easy-format
+           ocaml-graph
+           ocaml-yojson
+           ocaml-zarith
+           why3))
     (native-search-paths
      (list (search-path-specification
             (variable "FRAMAC_SHARE")
@@ -7034,8 +7424,7 @@ projects up to the certification of critical software.")
              (invoke "make" "-j" (number->string (parallel-job-count))
                      "blitz-doc"))))))
     (native-inputs
-     `(("python" ,python)
-       ("texinfo" ,texinfo)))
+     (list python texinfo))
     (synopsis "C++ template class library for multidimensional arrays")
     (description "Blitz++ is a C++ template class library that provides
 high-performance multidimensional array containers for scientific computing.")
@@ -7063,8 +7452,7 @@ high-performance multidimensional array containers for scientific computing.")
                 (patches (search-patches "fxdiv-system-libraries.patch"))))
       (build-system cmake-build-system)
       (inputs
-       `(("googletest" ,googletest)
-         ("googlebenchmark" ,googlebenchmark)))
+       (list googletest googlebenchmark))
       (synopsis
        "C++ library for division via fixed-point multiplication by inverse")
       (description
@@ -7116,11 +7504,9 @@ when an application performs repeated divisions by the same divisor.")
                                                                    file))))
                                     (find-files include "\\.py$"))))))))
       (native-inputs
-       `(("python-wrapper" ,python-wrapper)))
+       (list python-wrapper))
       (inputs
-       `(("psimd" ,psimd)
-         ("googletest" ,googletest)
-         ("googlebenchmark" ,googlebenchmark)))
+       (list psimd googletest googlebenchmark))
       (synopsis "C++ library for half-precision floating point formats")
       (description
        "This header-only C++ library implements conversion to and from
diff --git a/gnu/packages/matrix.scm b/gnu/packages/matrix.scm
index 5c2b194d07..5f94eb2075 100644
--- a/gnu/packages/matrix.scm
+++ b/gnu/packages/matrix.scm
@@ -3,6 +3,8 @@
 ;;; Copyright © 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020, 2021 Michael Rohleder <mike@rohleder.de>
 ;;; Copyright © 2020 Giacomo Leidi <goodoldpaul@autistici.org>
+;;; Copyright © 2022 Aleksandr Vityazev <avityazev@posteo.org>
+;;; Copyright © 2022 Morgan Smith <Morgan.J.Smith@outlook.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -22,14 +24,19 @@
 (define-module (gnu packages matrix)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (gnu packages check)
+  #:use-module (gnu packages crypto)
   #:use-module (gnu packages databases)
+  #:use-module (gnu packages glib)
   #:use-module (gnu packages monitoring)
+  #:use-module (gnu packages python-build)
+  #:use-module (gnu packages python-check)
   #:use-module (gnu packages python-crypto)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages xml)
   #:use-module (guix build-system python)
   #:use-module (guix download)
+  #:use-module (guix git-download)
   #:use-module (guix packages))
 
 (define-public python-matrix-client
@@ -45,11 +52,9 @@
          "1mgjd0ymf9mvqjkvgx3xjhxap7rzdmpa21wfy0cxbw2xcswcrqyw"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-requests" ,python-requests)))
+     (list python-requests))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)
-       ("python-responses" ,python-responses)))
+     (list python-pytest python-pytest-runner python-responses))
     (home-page
      "https://github.com/matrix-org/matrix-python-sdk")
     (synopsis "Client-Server SDK for Matrix")
@@ -70,11 +75,12 @@
     (build-system python-build-system)
     (arguments
      ;; tests require synapse, creating a circular dependency.
-     '(#:tests? #f))
+     '(#:tests? #f
+       #:phases (modify-phases %standard-phases
+                  ;; Also, auth_provider.py attempts to import synapse.
+                  (delete 'sanity-check))))
     (propagated-inputs
-     `(("python-twisted" ,python-twisted)
-       ("python-ldap3" ,python-ldap3)
-       ("python-service-identity" ,python-service-identity)))
+     (list python-twisted python-ldap3 python-service-identity))
     (home-page "https://github.com/matrix-org/matrix-synapse-ldap3")
     (synopsis "LDAP3 auth provider for Synapse")
     (description
@@ -96,51 +102,50 @@ an LDAP server.")
     (build-system python-build-system)
     ;; TODO Run tests with ‘PYTHONPATH=. trial3 tests’.
     (propagated-inputs
-     `(("python-simplejson" ,python-simplejson) ; not attested but required
-       ;; requirements (synapse/python_dependencies.py)
-       ("python-jsonschema" ,python-jsonschema)
-       ("python-frozendict" ,python-frozendict)
-       ("python-unpaddedbase64" ,python-unpaddedbase64)
-       ("python-canonicaljson" ,python-canonicaljson)
-       ("python-signedjson" ,python-signedjson)
-       ("python-pynacl" ,python-pynacl)
-       ("python-idna" ,python-idna)
-       ("python-service-identity" ,python-service-identity)
-       ("python-twisted" ,python-twisted)
-       ("python-treq" ,python-treq)
-       ("python-pyopenssl" ,python-pyopenssl)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-pyasn1" ,python-pyasn1)
-       ("python-pyasn1-modules" ,python-pyasn1-modules)
-       ("python-daemonize" ,python-daemonize)
-       ("python-bcrypt" ,python-bcrypt)
-       ("python-pillow" ,python-pillow)
-       ("python-sortedcontainers" ,python-sortedcontainers)
-       ("python-pymacaroons" ,python-pymacaroons)
-       ("python-msgpack" ,python-msgpack)
-       ("python-phonenumbers" ,python-phonenumbers)
-       ("python-six" ,python-six)
-       ("python-prometheus-client" ,python-prometheus-client)
-       ("python-attrs" ,python-attrs)
-       ("python-netaddr" ,python-netaddr)
-       ("python-jinja2" ,python-jinja2)
-       ("python-bleach" ,python-bleach)
-       ("python-typing-extensions" ,python-typing-extensions)
-       ;; conditional requirements (synapse/python_dependencies.py)
-       ;;("python-hiredis" ,python-hiredis)
-       ("python-matrix-synapse-ldap3" ,python-matrix-synapse-ldap3)
-       ("python-psycopg2" ,python-psycopg2)
-       ("python-jinja2" ,python-jinja2)
-       ("python-txacme" ,python-txacme)
-       ("python-pysaml2" ,python-pysaml2)
-       ("python-lxml" ,python-lxml)
-       ("python-packaging" ,python-packaging)
-       ;; sentry-sdk, jaeger-client, and opentracing could be included, but
-       ;; all are monitoring aids and not essential.
-       ("python-pyjwt" ,python-pyjwt)))
+     (list python-simplejson ; not attested but required
+           ;; requirements (synapse/python_dependencies.py)
+           python-jsonschema
+           python-frozendict
+           python-unpaddedbase64
+           python-canonicaljson
+           python-signedjson
+           python-pynacl
+           python-idna
+           python-service-identity
+           python-twisted
+           python-treq
+           python-pyopenssl
+           python-pyyaml
+           python-pyasn1
+           python-pyasn1-modules
+           python-daemonize
+           python-bcrypt
+           python-pillow
+           python-sortedcontainers
+           python-pymacaroons
+           python-msgpack
+           python-phonenumbers
+           python-six
+           python-prometheus-client
+           python-attrs
+           python-netaddr
+           python-jinja2
+           python-bleach
+           python-typing-extensions
+           ;; conditional requirements (synapse/python_dependencies.py)
+           ;;("python-hiredis" ,python-hiredis)
+           python-matrix-synapse-ldap3
+           python-psycopg2
+           python-jinja2
+           python-txacme
+           python-pysaml2
+           python-lxml
+           python-packaging
+           ;; sentry-sdk, jaeger-client, and opentracing could be included, but
+           ;; all are monitoring aids and not essential.
+           python-pyjwt))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-parameterized" ,python-parameterized)))
+     (list python-mock python-parameterized))
     (home-page "https://github.com/matrix-org/synapse")
     (synopsis "Matrix reference homeserver")
     (description "Synapse is a reference \"homeserver\" implementation of
@@ -149,3 +154,139 @@ Python/Twisted.  It is intended to showcase the concept of Matrix and let
 folks see the spec in the context of a codebase and let you run your own
 homeserver and generally help bootstrap the ecosystem.")
     (license license:asl2.0)))
+
+(define-public python-matrix-nio
+  (package
+    (name "python-matrix-nio")
+    (version "0.18.7")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "matrix-nio" version))
+       (sha256
+        (base32 "0cw4y6dx8n8hynxqlzzkj8p34nfbc2xryvmkr5yhmja31y4rks4k"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'install-tests
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (copy-recursively (string-append
+                                (assoc-ref inputs "tests") "/tests")
+                               "tests")
+             #t))
+         (replace 'check
+           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               ;; FIXME: two tests fail, for unknown reasons
+               (invoke "python" "-m" "pytest" "-vv" "tests" "-k"
+                       (string-append
+                        "not test_upload_binary_file_object "
+                        "and not test_connect_wrapper"))))))))
+    (native-inputs
+     `(("python-pytest" ,python-pytest-6)
+       ("python-hyperframe" ,python-hyperframe)
+       ("python-hypothesis" ,python-hypothesis-6.23)
+       ("python-hpack" ,python-hpack)
+       ("python-faker" ,python-faker)
+       ("python-pytest-aiohttp" ,python-pytest-aiohttp)
+       ("python-aioresponses" ,python-aioresponses)
+       ("python-pytest-benchmark" ,python-pytest-benchmark)
+       ("python-toml" ,python-toml)
+       ("tests"
+        ;; The release on pypi comes without tests.  We can't build from this
+        ;; checkout, though, because installation requires an invocation of
+        ;; poetry.
+        ,(origin
+           (method git-fetch)
+           (uri (git-reference
+                 (url "https://github.com/poljar/matrix-nio.git")
+                 (commit version)))
+           (file-name (git-file-name name version))
+           (sha256
+            (base32
+             "152prkndk53pfxm4in4xak4hwzyaxlbp6wv2zbk2xpzgyy9bvn3s"))))))
+    (propagated-inputs
+     (list python-aiofiles
+           python-aiohttp
+           python-aiohttp-socks
+           python-atomicwrites-1.4
+           python-cachetools
+           python-future
+           python-h11
+           python-h2
+           python-jsonschema
+           python-logbook
+           python-olm
+           python-peewee
+           python-pycryptodome
+           python-unpaddedbase64))
+    (home-page "https://github.com/poljar/matrix-nio")
+    (synopsis
+     "Python Matrix client library, designed according to sans I/O principles")
+    (description
+     "Matrix nio is a multilayered Matrix client library.  The underlying base
+layer doesn't do any network IO on its own, but on top of that is a full
+fledged batteries-included asyncio layer using aiohttp.")
+    (license license:isc)))
+
+(define-public pantalaimon
+  (package
+    (name "pantalaimon")
+    (version "0.10.3")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/matrix-org/pantalaimon")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "153d8083lj3qqirbv5q1d3igzd61a5kyzfk7xmv29sd3jbs8ysm9"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'downgrade-appdirs-requirement
+           (lambda _
+             (substitute* "setup.py"
+               ;; FIXME: Remove this once appdirs is updated.
+               ;; Upgrading python-appdirs requires rebuilting 3000+ packages,
+               ;; when 1.4.4 is a simple maintenance fix from 1.4.3.
+               (("appdirs >= 1.4.4") "appdirs >= 1.4.3"))))
+         (replace 'check
+           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "pytest" "-vv" "tests")))))))
+    (native-inputs
+     (list python-aioresponses
+           python-faker
+           python-pytest
+           python-pytest-aiohttp))
+    (propagated-inputs
+     (list python-aiohttp
+           python-appdirs
+           python-attrs
+           python-cachetools
+           python-click
+           python-dbus
+           python-janus
+           python-keyring
+           python-logbook
+           python-matrix-nio
+           python-notify2
+           python-peewee
+           python-prompt-toolkit
+           python-pydbus
+           python-pygobject))
+    (home-page "https://github.com/matrix-org/pantalaimon")
+    (synopsis "Matrix proxy daemon that adds E2E encryption capabilities")
+    (description
+     "Pantalaimon is an end-to-end encryption aware Matrix reverse proxy
+daemon.  Pantalaimon acts as a good man in the middle that handles the
+encryption for you.  Messages are transparently encrypted and decrypted for
+clients inside of pantalaimon.")
+    (license license:asl2.0)))
diff --git a/gnu/packages/maven-parent-pom.scm b/gnu/packages/maven-parent-pom.scm
index 84af3a1c53..a47fbfa8c1 100644
--- a/gnu/packages/maven-parent-pom.scm
+++ b/gnu/packages/maven-parent-pom.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2020 Julien Lepiller <julien@lepiller.eu>
+;;; Copyright © 2020, 2021 Julien Lepiller <julien@lepiller.eu>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -20,6 +20,7 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix gexp)
   #:use-module (guix git-download)
   #:use-module (guix utils)
   #:use-module (guix build-system ant)
@@ -321,14 +322,15 @@ other projects as their parent pom.")
                  (base32
                   "0yl2hbwz2kn1hll1i00ddzn8f89bfdcjwdifz0pj2j15k1gjch7v"))))
       (arguments
-       `(#:tests? #f
+       (list
+         #:tests? #f
          #:phases
-         (modify-phases %standard-phases
-           (delete 'unpack)
-           (delete 'configure)
-           (delete 'build)
-           (replace 'install
-             (install-pom-file (assoc-ref %build-inputs "source")))))))))
+         #~(modify-phases %standard-phases
+             (delete 'unpack)
+             (delete 'configure)
+             (delete 'build)
+             (replace 'install
+               (install-pom-file #$(package-source this-package)))))))))
 
 (define* (make-plexus-parent-pom version hash #:optional parent)
   (hidden-package
@@ -495,7 +497,7 @@ tool.  This package contains the Maven parent POM.")
            (replace 'install
              (install-pom-file "pom.xml")))))
       (propagated-inputs
-       `(("maven-parent-pom" ,maven-parent-pom-22)))
+       (list maven-parent-pom-22))
       (home-page "https://github.com/apache/maven-plugins")
       (synopsis "Maven parent pom for maven plugins projects")
       (description "This package contains the parent pom for maven plugins.")
@@ -516,14 +518,15 @@ tool.  This package contains the Maven parent POM.")
                   "11skhrjgrrs6z5rw1w39ap1pzhrc99g0czip10kz7wsavg746ibm"))))
       (build-system ant-build-system)
       (arguments
-       `(#:tests? #f
+       (list
+         #:tests? #f
          #:phases
-         (modify-phases %standard-phases
-           (delete 'unpack)
-           (delete 'build)
-           (delete 'configure)
-           (replace 'install
-             (install-pom-file (assoc-ref %build-inputs "source"))))))
+         #~(modify-phases %standard-phases
+             (delete 'unpack)
+             (delete 'build)
+             (delete 'configure)
+             (replace 'install
+               (install-pom-file #$(package-source this-package))))))
       (propagated-inputs
        `(("maven-parent-pom-27" ,maven-parent-pom-27)))
       (home-page "https://apache.org/maven")
diff --git a/gnu/packages/maven.scm b/gnu/packages/maven.scm
index f7cb168f47..0e9b99fa1c 100644
--- a/gnu/packages/maven.scm
+++ b/gnu/packages/maven.scm
@@ -65,7 +65,7 @@
        ("java-mockito-1" ,java-mockito-1)
        ("java-objenesis" ,java-objenesis)))
     (propagated-inputs
-     `(("maven-resolver-parent-pom" ,maven-resolver-parent-pom)))
+     (list maven-resolver-parent-pom))
     (home-page "https://github.com/apache/maven-resolver")
     (synopsis "Maven repository system API")
     (description "This package contains the API for the maven repository system.")
@@ -103,7 +103,7 @@
          (replace 'install
            (install-from-pom "maven-resolver-spi/pom.xml")))))
     (propagated-inputs
-     `(("maven-resolver-api" ,maven-resolver-api)))
+     (list maven-resolver-api))
     (synopsis "Maven repository system SPI")
     (description "This package contains the service provider interface (SPI)
 for repository system implementations and repository connectors.")))
@@ -118,8 +118,7 @@ for repository system implementations and repository connectors.")))
        #:test-dir "maven-resolver-test-util/src/test"
        #:jdk ,icedtea-8))
     (inputs
-     `(("maven-resolver-api" ,maven-resolver-api)
-       ("maven-resolver-spi" ,maven-resolver-spi)))
+     (list maven-resolver-api maven-resolver-spi))
     (synopsis "Utility classes for testing the maven repository system")
     (description "This package contains a collection of utility classes to
 ease testing of the repository system.")))
@@ -137,11 +136,9 @@ ease testing of the repository system.")))
          (replace 'install
            (install-from-pom "maven-resolver-util/pom.xml")))))
     (propagated-inputs
-     `(("maven-resolver-api" ,maven-resolver-api)))
+     (list maven-resolver-api))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)
-       ("maven-resolver-test-util" ,maven-resolver-test-util)))
+     (list java-junit java-hamcrest-core maven-resolver-test-util))
     (synopsis "Utility classes for the maven repository system")
     (description "This package contains a collection of utility classes to
 ease usage of the repository system.")))
@@ -167,14 +164,10 @@ ease usage of the repository system.")))
          (replace 'install
            (install-from-pom "maven-resolver-connector-basic/pom.xml")))))
     (propagated-inputs
-     `(("maven-resolver-api" ,maven-resolver-api)
-       ("maven-resolver-spi" ,maven-resolver-spi)
-       ("maven-resolver-util" ,maven-resolver-util)
-       ("java-slf4j-api" ,java-slf4j-api)))
+     (list maven-resolver-api maven-resolver-spi maven-resolver-util
+           java-slf4j-api))
     (native-inputs
-     `(("java-javax-inject" ,java-javax-inject)
-       ("java-junit" ,java-junit)
-       ("maven-resolver-test-util" ,maven-resolver-test-util)))
+     (list java-javax-inject java-junit maven-resolver-test-util))
     (synopsis "Maven repository connector implementation")
     (description "This package contains a repository connector implementation
 for repositories using URI-based layouts.")))
@@ -224,17 +217,16 @@ for repositories using URI-based layouts.")))
          (replace 'install
            (install-from-pom "maven-resolver-impl/pom.xml")))))
     (propagated-inputs
-     `(("maven-resolver-api" ,maven-resolver-api)
-       ("maven-resolver-spi" ,maven-resolver-spi)
-       ("maven-resolver-util" ,maven-resolver-util)
-       ("java-eclipse-sisu-inject" ,java-eclipse-sisu-inject)
-       ("java-javax-inject" ,java-javax-inject)
-       ("java-guice" ,java-guice)
-       ("java-slf4j-api" ,java-slf4j-api)
-       ("maven-resolver-parent-pom" ,maven-resolver-parent-pom)))
+     (list maven-resolver-api
+           maven-resolver-spi
+           maven-resolver-util
+           java-eclipse-sisu-inject
+           java-javax-inject
+           java-guice
+           java-slf4j-api
+           maven-resolver-parent-pom))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("maven-resolver-test-util" ,maven-resolver-test-util)))))
+     (list java-junit maven-resolver-test-util))))
 
 (define-public maven-resolver-transport-wagon
   (package
@@ -308,18 +300,115 @@ for repositories using URI-based layouts.")))
        ("java-eclipse-sisu-inject" ,java-eclipse-sisu-inject)
        ("java-eclipse-sisu-plexus" ,java-eclipse-sisu-plexus)))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)
-       ("maven-resolver-test-util" ,maven-resolver-test-util)
-       ("java-guava" ,java-guava)
-       ("java-cglib" ,java-cglib)
-       ("java-asm" ,java-asm)
-       ("java-aopalliance" ,java-aopalliance)
-       ("java-guice" ,java-guice)))
+     (list java-junit
+           java-hamcrest-core
+           maven-resolver-test-util
+           java-guava
+           java-cglib
+           java-asm
+           java-aopalliance
+           java-guice))
     (synopsis "Transport implementation for Maven")
     (description "This package contains a transport implementation based on
 Maven Wagon, for use in Maven.")))
 
+(define-public maven-resolver-transport-file
+  (package
+    (inherit maven-resolver-api)
+    (name "maven-resolver-transport-file")
+    (arguments
+     `(#:jar-name "maven-resolver-transport-file.jar"
+       #:source-dir "maven-resolver-transport-file/src/main/java"
+       #:test-dir "maven-resolver-transport-file/src/test"
+       #:jdk ,icedtea-8
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'generate-sisu
+           (lambda _
+             (mkdir-p "build/classes/META-INF/sisu")
+             (with-output-to-file "build/classes/META-INF/sisu/javax.inject.Named"
+               (lambda _
+                 (display "org.eclipse.aether.transport.file.FileTransporterFactory\n"))))))))
+    (inputs
+     (list java-eclipse-sisu-inject
+           java-eclipse-sisu-plexus
+           java-javax-inject
+           java-plexus-classworlds
+           java-plexus-component-annotations
+           java-plexus-utils
+           java-slf4j-api
+           maven-resolver-api
+           maven-resolver-spi
+           maven-resolver-util
+           maven-wagon-provider-api))
+    (native-inputs
+     (list java-asm
+           java-aopalliance
+           java-cglib
+           java-guava
+           java-guice
+           java-hamcrest-core
+           java-junit
+           maven-resolver-test-util))
+    (synopsis "Transport implementation for Maven")
+    (description "This package contains a transport implementation based on
+files, for use in Maven.")))
+
+(define-public maven-resolver-transport-http
+  (package
+    (inherit maven-resolver-api)
+    (name "maven-resolver-transport-http")
+    (arguments
+     `(#:jar-name "maven-resolver-transport-http.jar"
+       #:source-dir "maven-resolver-transport-http/src/main/java"
+       #:test-dir "maven-resolver-transport-http/src/test"
+       #:jdk ,icedtea-8
+       ;; Tests all fail because
+       ;; org.eclipse.aether.transport.http.SslSocketFactory is not available.
+       #:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'generate-sisu
+           (lambda _
+             (mkdir-p "build/classes/META-INF/sisu")
+             (with-output-to-file "build/classes/META-INF/sisu/javax.inject.Named"
+               (lambda _
+                 (display "org.eclipse.aether.transport.http.HttpTransporterFactory\n"))))))))
+    (inputs
+     (list java-eclipse-sisu-inject
+           java-eclipse-sisu-plexus
+           java-javax-inject
+           java-plexus-classworlds
+           java-plexus-component-annotations
+           java-plexus-utils
+           java-slf4j-api
+           maven-resolver-api
+           maven-resolver-spi
+           maven-resolver-util
+           maven-wagon-provider-api))
+    (propagated-inputs
+     (list java-httpcomponents-httpclient
+           java-httpcomponents-httpcore))
+    (native-inputs
+     (list java-aopalliance
+           java-asm
+           java-cglib
+           java-eclipse-aether-api
+           java-eclipse-jetty-http
+           java-eclipse-jetty-io
+           java-eclipse-jetty-server
+           java-eclipse-jetty-servlet
+           java-eclipse-jetty-util
+           java-guava
+           java-guice
+           java-hamcrest-core
+           java-javaee-servletapi
+           java-junit
+           maven-resolver-test-util))
+    (synopsis "Transport implementation for Maven")
+    (description "This package contains a transport implementation based on
+HTTP, for use in Maven.")))
+
 ;; aether is the parent project that was forked into maven-resolver.  It used
 ;; to be used with older versions of Maven, and is still required for some
 ;; plugins and their dependencies.  This version is required for the plugins,
@@ -347,8 +436,8 @@ Maven Wagon, for use in Maven.")))
          (add-before 'install 'install-parent (install-pom-file "pom.xml"))
          (replace 'install (install-from-pom "aether-api/pom.xml")))))
     (propagated-inputs
-     `(("java-sonatype-forge-parent-pom" ,java-sonatype-forge-parent-pom-6)))
-    (native-inputs `(("java-junit" ,java-junit)))
+     (list java-sonatype-forge-parent-pom-6))
+    (native-inputs (list java-junit))
     (home-page "https://github.com/sonatype/sonatype-aether")
     (synopsis "Maven repository system API")
     (description "This package contains the API for the maven repository system.")
@@ -366,7 +455,7 @@ Maven Wagon, for use in Maven.")))
        (modify-phases %standard-phases
          (replace 'install (install-from-pom "aether-spi/pom.xml")))))
     (propagated-inputs
-     `(("java-sonatype-aether-api" ,java-sonatype-aether-api)))
+     (list java-sonatype-aether-api))
     (synopsis "Maven repository system SPI")
     (description "This package contains the service provider interface (SPI)
 for repository system implementations and repository connectors.")))
@@ -380,8 +469,7 @@ for repository system implementations and repository connectors.")))
        #:source-dir "aether-test-util/src/main/java"
        #:test-dir "aether-test-util/src/test"))
     (inputs
-     `(("java-sonatype-aether-api" ,java-sonatype-aether-api)
-       ("java-sonatype-aether-spi" ,java-sonatype-aether-spi)))
+     (list java-sonatype-aether-api java-sonatype-aether-spi))
     (synopsis "Utility classes for testing the maven repository system")
     (description "This package contains a collection of utility classes to
 ease testing of the repository system.")))
@@ -398,10 +486,9 @@ ease testing of the repository system.")))
        (modify-phases %standard-phases
          (replace 'install (install-from-pom "aether-util/pom.xml")))))
     (propagated-inputs
-     `(("java-sonatype-aether-api" ,java-sonatype-aether-api)))
+     (list java-sonatype-aether-api))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-sonatype-aether-test-util" ,java-sonatype-aether-test-util)))
+     (list java-junit java-sonatype-aether-test-util))
     (synopsis "Utility classes for the maven repository system")
     (description "This package contains a collection of utility classes to
 ease usage of the repository system.")))
@@ -437,16 +524,15 @@ ease usage of the repository system.")))
              #t))
          (replace 'install (install-from-pom "aether-impl/pom.xml")))))
     (propagated-inputs
-     `(("java-sonatype-aether-api" ,java-sonatype-aether-api)
-       ("java-sonatype-aether-spi" ,java-sonatype-aether-spi)
-       ("java-sonatype-aether-util" ,java-sonatype-aether-util)
-       ("java-plexus-component-annotations" ,java-plexus-component-annotations)
-       ("java-plexus-container-default" ,java-plexus-container-default)
-       ("java-slf4j-api" ,java-slf4j-api)))
+     (list java-sonatype-aether-api
+           java-sonatype-aether-spi
+           java-sonatype-aether-util
+           java-plexus-component-annotations
+           java-plexus-container-default
+           java-slf4j-api))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-plexus-component-metadata" ,java-plexus-component-metadata)
-       ("java-sonatype-aether-test-util" ,java-sonatype-aether-test-util)))))
+     (list java-junit java-plexus-component-metadata
+           java-sonatype-aether-test-util))))
 
 ;; Again, this old version is required by some maven plugins
 (define-public java-eclipse-aether-api
@@ -471,7 +557,7 @@ ease usage of the repository system.")))
        (modify-phases %standard-phases
          (add-before 'install 'install-parent (install-pom-file "pom.xml"))
          (replace 'install (install-from-pom "aether-api/pom.xml")))))
-    (native-inputs `(("java-junit" ,java-junit)))
+    (native-inputs (list java-junit))
     (home-page "https://github.com/sonatype/sonatype-aether")
     (synopsis "Maven repository system API")
     (description "This package contains the API for the maven repository system.")
@@ -489,7 +575,7 @@ ease usage of the repository system.")))
        (modify-phases %standard-phases
          (replace 'install (install-from-pom "aether-spi/pom.xml")))))
     (propagated-inputs
-     `(("java-eclipse-aether-api" ,java-eclipse-aether-api)))
+     (list java-eclipse-aether-api))
     (synopsis "Maven repository system SPI")
     (description "This package contains the service provider interface (SPI)
 for repository system implementations and repository connectors.")))
@@ -506,8 +592,7 @@ for repository system implementations and repository connectors.")))
        (modify-phases %standard-phases
          (replace 'install (install-from-pom "aether-util/pom.xml")))))
     (propagated-inputs
-     `(("java-eclipse-aether-api" ,java-eclipse-aether-api)
-       ("java-eclipse-aether-spi" ,java-eclipse-aether-spi)))
+     (list java-eclipse-aether-api java-eclipse-aether-spi))
     (synopsis "Utility classes for testing the maven repository system")
     (description "This package contains a collection of utility classes to
 ease testing of the repository system.")))
@@ -524,10 +609,9 @@ ease testing of the repository system.")))
        (modify-phases %standard-phases
          (replace 'install (install-from-pom "aether-util/pom.xml")))))
     (propagated-inputs
-     `(("java-eclipse-aether-api" ,java-eclipse-aether-api)))
+     (list java-eclipse-aether-api))
     (native-inputs
-     `(("java-eclipse-aether-test-util" ,java-eclipse-aether-test-util)
-       ("java-junit" ,java-junit)))
+     (list java-eclipse-aether-test-util java-junit))
     (synopsis "Utility classes for the maven repository system")
     (description "This package contains a collection of utility classes to
 ease usage of the repository system.")))
@@ -544,16 +628,15 @@ ease usage of the repository system.")))
        (modify-phases %standard-phases
          (replace 'install (install-from-pom "aether-impl/pom.xml")))))
     (propagated-inputs
-     `(("java-eclipse-aether-api" ,java-eclipse-aether-api)
-       ("java-eclipse-aether-spi" ,java-eclipse-aether-spi)
-       ("java-eclipse-aether-util" ,java-eclipse-aether-util)
-       ("java-javax-inject" ,java-javax-inject)
-       ("java-eclipse-sisu-inject" ,java-eclipse-sisu-inject)
-       ("java-guice" ,java-guice)
-       ("java-slf4j-api" ,java-slf4j-api)))
+     (list java-eclipse-aether-api
+           java-eclipse-aether-spi
+           java-eclipse-aether-util
+           java-javax-inject
+           java-eclipse-sisu-inject
+           java-guice
+           java-slf4j-api))
     (native-inputs
-     `(("java-eclipse-aether-test-util" ,java-eclipse-aether-test-util)
-       ("java-junit" ,java-junit)))))
+     (list java-eclipse-aether-test-util java-junit))))
 
 (define-public maven-shared-utils
   (package
@@ -591,10 +674,7 @@ ease usage of the repository system.")))
        ("java-plexus-container-default" ,java-plexus-container-default)
        ("maven-parent-pom-30" ,maven-parent-pom-30)))
     (native-inputs
-     `(("unzip" ,unzip)
-       ("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)
-       ("java-commons-lang3" ,java-commons-lang3)))
+     (list unzip java-junit java-hamcrest-core java-commons-lang3))
     (home-page "https://maven.apache.org/shared/maven-shared-utils/")
     (synopsis "Plexus-util replacement for maven")
     (description "This project aims to be a functional replacement for
@@ -622,10 +702,9 @@ replacement with improvements.")
          (replace 'install
            (install-from-pom "maven-plugin-annotations/pom.xml")))))
     (propagated-inputs
-     `(("maven-artifact" ,maven-artifact)
-       ("maven-plugin-tools-parent-pom" ,maven-plugin-tools-parent-pom)))
+     (list maven-artifact maven-plugin-tools-parent-pom))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://maven.apache.org/plugin-tools/maven-plugin-annotations/")
     (synopsis "Java 5 annotations to use in Mojos")
     (description "This package contains Java 5 annotations for use in Mojos.")
@@ -669,9 +748,7 @@ replacement with improvements.")
      `(("java-plexus-utils" ,java-plexus-utils)
        ("maven-wagon-parent-pom" ,maven-wagon-parent-pom)))
     (native-inputs
-     `(("unzip" ,unzip)
-       ("java-junit" ,java-junit)
-       ("java-easymock" ,java-easymock)))
+     (list unzip java-junit java-easymock))
     (home-page "https://maven.apache.org/wagon")
     (synopsis "Transport abstraction for Maven")
     (description "Maven Wagon is a transport abstraction that is used in Maven's
@@ -752,8 +829,7 @@ classes used in multiple maven-wagon components.")))
              (invoke "ant" "jar")
              #t)))))
     (inputs
-     `(("java-plexus-utils" ,java-plexus-utils)
-       ("maven-wagon-provider-api" ,maven-wagon-provider-api)))
+     (list java-plexus-utils maven-wagon-provider-api))
     (native-inputs
      `(("maven-wagon-provider-test" ,maven-wagon-provider-test)
        ("java-plexus-component-metadata" ,java-plexus-component-metadata)
@@ -836,12 +912,12 @@ Test Compatibility Kit.")))
              (invoke "ant" "jar")
              #t)))))
     (inputs
-     `(("java-plexus-utils" ,java-plexus-utils)
-       ("java-httpcomponents-httpclient" ,java-httpcomponents-httpclient)
-       ("java-httpcomponents-httpcore" ,java-httpcomponents-httpcore)
-       ("java-commons-io" ,java-commons-io)
-       ("java-jsoup" ,java-jsoup)
-       ("maven-wagon-provider-api" ,maven-wagon-provider-api)))
+     (list java-plexus-utils
+           java-httpcomponents-httpclient
+           java-httpcomponents-httpcore
+           java-commons-io
+           java-jsoup
+           maven-wagon-provider-api))
     (native-inputs
      `(("maven-wagon-provider-test" ,maven-wagon-provider-test)
        ("java-plexus-component-metadata" ,java-plexus-component-metadata)
@@ -866,7 +942,7 @@ Test Compatibility Kit.")))
        ("java-asm" ,java-asm)
        ("java-geronimo-xbean-reflect" ,java-geronimo-xbean-reflect)
        ,@(package-native-inputs maven-wagon-provider-api)))
-    (synopsis "Shared Library for wagon providers supporting HTTP.")
+    (synopsis "Shared Library for wagon providers supporting HTTP")
     (description "Maven Wagon is a transport abstraction that is used in Maven's
 artifact and repository handling code.  It uses providers, that are tools to
 manage artifacts and deployment.  This package contains a shared library for
@@ -908,12 +984,12 @@ wagon providers supporting HTTP.")))
                (("src/test") "wagon-providers/wagon-http/src/test"))
              #t)))))
     (inputs
-     `(("java-plexus-utils" ,java-plexus-utils)
-       ("java-httpcomponents-httpclient" ,java-httpcomponents-httpclient)
-       ("java-httpcomponents-httpcore" ,java-httpcomponents-httpcore)
-       ("maven-wagon-http-shared" ,maven-wagon-http-shared)
-       ("maven-wagon-tck-http" ,maven-wagon-tck-http)
-       ("maven-wagon-provider-api" ,maven-wagon-provider-api)))
+     (list java-plexus-utils
+           java-httpcomponents-httpclient
+           java-httpcomponents-httpcore
+           maven-wagon-http-shared
+           maven-wagon-tck-http
+           maven-wagon-provider-api))
     (native-inputs
      `(("maven-wagon-provider-test" ,maven-wagon-provider-test)
        ("java-plexus-component-metadata" ,java-plexus-component-metadata)
@@ -1062,11 +1138,9 @@ tool.  This package contains the Maven pom file, used by all maven components.")
          (replace 'install
            (install-from-pom "maven-artifact/pom.xml")))))
     (propagated-inputs
-     `(("java-plexus-utils" ,java-plexus-utils)
-       ("java-commons-lang3" ,java-commons-lang3)
-       ("maven-pom" ,maven-pom)))
+     (list java-plexus-utils java-commons-lang3 maven-pom))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (description "Apache Maven is a software project management and comprehension
 tool.  This package contains the Maven Artifact classes, providing the
 @code{Artifact} interface, with its @code{DefaultArtifact} implementation.  The
@@ -1097,29 +1171,27 @@ and compares versions:")))
              #t))
          (replace 'install (install-from-pom "maven-model/pom.xml")))))
     (propagated-inputs
-     `(("java-commons-lang3" ,java-commons-lang3)
-       ("java-plexus-utils" ,java-plexus-utils)
-       ("maven-pom" ,maven-pom)))
+     (list java-commons-lang3 java-plexus-utils maven-pom))
     (native-inputs
-     `(("java-modello-core" ,java-modello-core)
-       ;; for modello:
-       ("java-eclipse-sisu-plexus" ,java-eclipse-sisu-plexus)
-       ("java-plexus-component-annotations" ,java-plexus-component-annotations)
-       ("java-guice" ,java-guice)
-       ("java-cglib" ,java-cglib)
-       ("java-asm" ,java-asm)
-       ("java-eclipse-sisu-inject" ,java-eclipse-sisu-inject)
-       ("java-javax-inject" ,java-javax-inject)
-       ("java-plexus-classworlds" ,java-plexus-classworlds)
-       ("java-guava" ,java-guava)
-       ("java-geronimo-xbean-reflect" ,java-geronimo-xbean-reflect)
-       ("java-sisu-build-api" ,java-sisu-build-api)
-       ;; modello plugins:
-       ("java-modello-plugins-java" ,java-modello-plugins-java)
-       ("java-modello-plugins-xml" ,java-modello-plugins-xml)
-       ("java-modello-plugins-xpp3" ,java-modello-plugins-xpp3)
-       ;; for tests
-       ("java-junit" ,java-junit)))
+     (list java-modello-core
+           ;; for modello:
+           java-eclipse-sisu-plexus
+           java-plexus-component-annotations
+           java-guice
+           java-cglib
+           java-asm
+           java-eclipse-sisu-inject
+           java-javax-inject
+           java-plexus-classworlds
+           java-guava
+           java-geronimo-xbean-reflect
+           java-sisu-build-api
+           ;; modello plugins:
+           java-modello-plugins-java
+           java-modello-plugins-xml
+           java-modello-plugins-xpp3
+           ;; for tests
+           java-junit))
     (description "Apache Maven is a software project management and comprehension
 tool.  This package contains the model for Maven @dfn{POM} (Project Object Model),
 so really just plain Java objects.")))
@@ -1145,9 +1217,9 @@ so really just plain Java objects.")))
              #t))
          (replace 'install (install-from-pom "maven-builder-support/pom.xml")))))
     (propagated-inputs
-     `(("maven-pom" ,maven-pom)))
+     (list maven-pom))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (description "Apache Maven is a software project management and comprehension
 tool.  This package contains a support library for descriptor builders (model,
 setting, toolchains)")))
@@ -1175,28 +1247,27 @@ setting, toolchains)")))
              #t))
          (replace 'install (install-from-pom "maven-settings/pom.xml")))))
     (propagated-inputs
-     `(("java-plexus-utils" ,java-plexus-utils)
-       ("maven-pom" ,maven-pom)))
+     (list java-plexus-utils maven-pom))
     (native-inputs
-     `(("java-modello-core" ,java-modello-core)
-       ;; for modello:
-       ;("container" ,java-plexus-container-default)
-       ("java-eclipse-sisu-plexus" ,java-eclipse-sisu-plexus)
-       ("java-plexus-component-annotations" ,java-plexus-component-annotations)
-       ("java-guice" ,java-guice)
-       ("java-cglib" ,java-cglib)
-       ("java-asm" ,java-asm)
-       ("java-eclipse-sisu-inject" ,java-eclipse-sisu-inject)
-       ("java-javax-inject" ,java-javax-inject)
-       ("java-plexus-classworlds" ,java-plexus-classworlds)
-       ("java-plexus-utils" ,java-plexus-utils)
-       ("java-guava" ,java-guava)
-       ("java-geronimo-xbean-reflect" ,java-geronimo-xbean-reflect)
-       ("java-sisu-build-api" ,java-sisu-build-api)
-       ;; modello plugins:
-       ("java-modello-plugins-java" ,java-modello-plugins-java)
-       ("java-modello-plugins-xml" ,java-modello-plugins-xml)
-       ("java-modello-plugins-xpp3" ,java-modello-plugins-xpp3)))
+     (list java-modello-core
+           ;; for modello:
+           ;("container" ,java-plexus-container-default)
+           java-eclipse-sisu-plexus
+           java-plexus-component-annotations
+           java-guice
+           java-cglib
+           java-asm
+           java-eclipse-sisu-inject
+           java-javax-inject
+           java-plexus-classworlds
+           java-plexus-utils
+           java-guava
+           java-geronimo-xbean-reflect
+           java-sisu-build-api
+           ;; modello plugins:
+           java-modello-plugins-java
+           java-modello-plugins-xml
+           java-modello-plugins-xpp3))
     (description "Apache Maven is a software project management and comprehension
 tool.  This package contains strictly the model for Maven settings, that is
 simply plain java objects.")))
@@ -1221,15 +1292,14 @@ simply plain java objects.")))
              #t))
          (replace 'install (install-from-pom "maven-settings-builder/pom.xml")))))
     (propagated-inputs
-     `(("java-plexus-utils" ,java-plexus-utils)
-       ("java-plexus-interpolation" ,java-plexus-interpolation)
-       ("java-plexus-sec-dispatcher" ,java-plexus-sec-dispatcher)
-       ("maven-builder-support" ,maven-builder-support)
-       ("maven-settings" ,maven-settings)
-       ("maven-pom" ,maven-pom)))
+     (list java-plexus-utils
+           java-plexus-interpolation
+           java-plexus-sec-dispatcher
+           maven-builder-support
+           maven-settings
+           maven-pom))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-plexus-component-annotations" ,java-plexus-component-annotations)))
+     (list java-junit java-plexus-component-annotations))
     (description "Apache Maven is a software project management and comprehension
 tool.  This package contains the effective model builder, with profile activation,
 inheritance, interpolation, @dots{}")))
@@ -1265,12 +1335,12 @@ inheritance, interpolation, @dots{}")))
          (replace 'install
            (install-from-pom "maven-model-builder/pom.xml")))))
     (propagated-inputs
-     `(("java-plexus-interpolation" ,java-plexus-interpolation)
-       ("java-plexus-utils" ,java-plexus-utils)
-       ("maven-artifact" ,maven-artifact)
-       ("maven-builder-support" ,maven-builder-support)
-       ("maven-model" ,maven-model)
-       ("maven-pom" ,maven-pom)))
+     (list java-plexus-interpolation
+           java-plexus-utils
+           maven-artifact
+           maven-builder-support
+           maven-model
+           maven-pom))
     (native-inputs
      `(("java-junit" ,java-junit)
        ("java-guava" ,java-guava)
@@ -1314,8 +1384,7 @@ inheritance, interpolation, @dots{}")))
          (replace 'install
            (install-from-pom "maven-repository-metadata/pom.xml")))))
     (propagated-inputs
-     `(("java-plexus-utils" ,java-plexus-utils)
-       ("maven-pom" ,maven-pom)))
+     (list java-plexus-utils maven-pom))
     (native-inputs
      `(("modello" ,java-modello-core)
        ;; for modello:
@@ -1361,18 +1430,18 @@ so really just plain objects.")))
          (replace 'install
            (install-from-pom "maven-resolver-provider/pom.xml")))))
     (propagated-inputs
-     `(("maven-model" ,maven-model)
-       ("maven-model-builder" ,maven-model-builder)
-       ("maven-resolver-spi" ,maven-resolver-spi)
-       ("maven-resolver-api" ,maven-resolver-api)
-       ("maven-resolver-impl" ,maven-resolver-impl)
-       ("maven-resolver-util" ,maven-resolver-util)
-       ("maven-builder-support" ,maven-builder-support)
-       ("maven-repository-metadata" ,maven-repository-metadata)
-       ("java-plexus-utils" ,java-plexus-utils)
-       ("java-plexus-component-annotations" ,java-plexus-component-annotations)
-       ("java-guice" ,java-guice)
-       ("java-javax-inject" ,java-javax-inject)))))
+     (list maven-model
+           maven-model-builder
+           maven-resolver-spi
+           maven-resolver-api
+           maven-resolver-impl
+           maven-resolver-util
+           maven-builder-support
+           maven-repository-metadata
+           java-plexus-utils
+           java-plexus-component-annotations
+           java-guice
+           java-javax-inject))))
 
 (define-public maven-plugin-api
   (package
@@ -1874,20 +1943,20 @@ logging support.")))
          (replace 'install
            (install-from-pom "pom.xml")))))
     (propagated-inputs
-     `(("maven-artifact" ,maven-artifact)
-       ("maven-repository-metadata" ,maven-repository-metadata)
-       ("maven-builder-support" ,maven-builder-support)
-       ("maven-model" ,maven-model)
-       ("maven-model-builder" ,maven-model-builder)
-       ("maven-settings" ,maven-settings)
-       ("maven-settings-builder" ,maven-settings-builder)
-       ("maven-core" ,maven-core)
-       ("maven-wagon-provider-api" ,maven-wagon-provider-api)
-       ("maven-wagon-file" ,maven-wagon-file)
-       ("maven-resolver-api" ,maven-resolver-api)
-       ("maven-resolver-util" ,maven-resolver-util)
-       ("maven-resolver-spi" ,maven-resolver-spi)
-       ("java-plexus-interpolation" ,java-plexus-interpolation)))
+     (list maven-artifact
+           maven-repository-metadata
+           maven-builder-support
+           maven-model
+           maven-model-builder
+           maven-settings
+           maven-settings-builder
+           maven-core
+           maven-wagon-provider-api
+           maven-wagon-file
+           maven-resolver-api
+           maven-resolver-util
+           maven-resolver-spi
+           java-plexus-interpolation))
     (native-inputs
      `(("java-modello-core" ,java-modello-core)
        ("java-plexus-utils" ,java-plexus-utils)
@@ -2000,59 +2069,58 @@ layer for plugins that need to keep Maven2 compatibility.")))
                (copy-recursively "apache-maven/src/conf" conf))
              #t)))))
     (inputs
-     `(("java-plexus-classworlds" ,java-plexus-classworlds)
-       ("maven-artifact" ,maven-artifact)
-       ("maven-embedder" ,maven-embedder)
-       ("maven-core" ,maven-core)
-       ("maven-compat" ,maven-compat)
-       ("maven-builder-support" ,maven-builder-support)
-       ("maven-model" ,maven-model)
-       ("maven-model-builder" ,maven-model-builder)
-       ("maven-settings" ,maven-settings)
-       ("maven-settings-builder" ,maven-settings-builder)
-       ("maven-plugin-api" ,maven-plugin-api)
-       ("maven-repository-metadata" ,maven-repository-metadata)
-       ("maven-shared-utils" ,maven-shared-utils)
-       ("maven-resolver-api" ,maven-resolver-api)
-       ("maven-resolver-spi" ,maven-resolver-spi)
-       ("maven-resolver-util" ,maven-resolver-util)
-       ("maven-resolver-impl" ,maven-resolver-impl)
-       ("maven-resolver-connector-basic" ,maven-resolver-connector-basic)
-       ("maven-resolver-provider" ,maven-resolver-provider)
-       ("maven-resolver-transport-wagon" ,maven-resolver-transport-wagon)
-       ("maven-wagon-provider-api" ,maven-wagon-provider-api)
-       ("maven-wagon-file" ,maven-wagon-file)
-       ("maven-wagon-http" ,maven-wagon-http)
-       ("java-commons-logging-minimal" ,java-commons-logging-minimal)
-       ("java-httpcomponents-httpclient" ,java-httpcomponents-httpclient)
-       ("java-httpcomponents-httpcore" ,java-httpcomponents-httpcore)
-       ("maven-wagon-http-shared" ,maven-wagon-http-shared)
-       ("maven-wagon-tck-http" ,maven-wagon-tck-http)
-       ("java-eclipse-sisu-plexus" ,java-eclipse-sisu-plexus)
-       ("java-guice" ,java-guice)
-       ("java-aopalliance" ,java-aopalliance)
-       ("java-cglib" ,java-cglib)
-       ("java-asm" ,java-asm)
-       ("java-eclipse-sisu-inject" ,java-eclipse-sisu-inject)
-       ("java-javax-inject" ,java-javax-inject)
-       ("java-plexus-component-annotations" ,java-plexus-component-annotations)
-       ("java-plexus-utils" ,java-plexus-utils)
-       ("java-plexus-interpolation" ,java-plexus-interpolation)
-       ("java-plexus-sec-dispatcher" ,java-plexus-sec-dispatcher)
-       ("java-plexus-cipher" ,java-plexus-cipher)
-       ("java-guava" ,java-guava)
-       ("java-jansi" ,java-jansi)
-       ("java-jsr250" ,java-jsr250)
-       ("java-cdi-api" ,java-cdi-api)
-       ("java-commons-cli" ,java-commons-cli)
-       ("java-commons-io" ,java-commons-io)
-       ("java-commons-lang3" ,java-commons-lang3)
-       ("java-slf4j-api" ,java-slf4j-api)
-       ;; TODO: replace with maven-slf4j-provider
-       ("java-slf4j-simple" ,java-slf4j-simple)))
-    (propagated-inputs
-     `(("coreutils" ,coreutils)
-       ("which" ,which)))
+     (list java-plexus-classworlds
+           maven-artifact
+           maven-embedder
+           maven-core
+           maven-compat
+           maven-builder-support
+           maven-model
+           maven-model-builder
+           maven-settings
+           maven-settings-builder
+           maven-plugin-api
+           maven-repository-metadata
+           maven-shared-utils
+           maven-resolver-api
+           maven-resolver-spi
+           maven-resolver-util
+           maven-resolver-impl
+           maven-resolver-connector-basic
+           maven-resolver-provider
+           maven-resolver-transport-wagon
+           maven-wagon-provider-api
+           maven-wagon-file
+           maven-wagon-http
+           java-commons-logging-minimal
+           java-httpcomponents-httpclient
+           java-httpcomponents-httpcore
+           maven-wagon-http-shared
+           maven-wagon-tck-http
+           java-eclipse-sisu-plexus
+           java-guice
+           java-aopalliance
+           java-cglib
+           java-asm
+           java-eclipse-sisu-inject
+           java-javax-inject
+           java-plexus-component-annotations
+           java-plexus-utils
+           java-plexus-interpolation
+           java-plexus-sec-dispatcher
+           java-plexus-cipher
+           java-guava
+           java-jansi
+           java-jsr250
+           java-cdi-api
+           java-commons-cli
+           java-commons-io
+           java-commons-lang3
+           java-slf4j-api
+           ;; TODO: replace with maven-slf4j-provider
+           java-slf4j-simple))
+    (propagated-inputs
+     (list coreutils which))
     (description "Apache Maven is a software project management and comprehension
 tool.  Based on the concept of a project object model: builds, dependency
 management, documentation creation, site publication, and distribution
@@ -2227,8 +2295,8 @@ reporting or the build process.")))
             (_ input)))
         (package-propagated-inputs maven-model-builder)))
     (native-inputs
-     `(("java-plexus-container-default" ,java-plexus-container-default)
-       ,@(package-native-inputs maven-plugin-api)))))
+     (modify-inputs (package-native-inputs maven-plugin-api)
+       (prepend java-plexus-container-default)))))
 
 (define-public maven-3.0-repository-metadata
   (package
@@ -2279,7 +2347,7 @@ reporting or the build process.")))
        ("java-plexus-utils" ,java-plexus-utils)
        ("maven-pom" ,maven-3.0-pom)))
     (native-inputs
-     `(("java-plexus-component-metadata" ,java-plexus-component-metadata)))))
+     (list java-plexus-component-metadata))))
 
 (define-public maven-3.0-core
   (package
@@ -2360,23 +2428,23 @@ reporting or the build process.")))
          (replace 'install
            (install-from-pom "pom.xml")))))
     (propagated-inputs
-     `(("maven-model" ,maven-3.0-model)
-       ("maven-settings" ,maven-3.0-settings)
-       ("maven-settings-builder" ,maven-3.0-settings-builder)
-       ("maven-repository-metadata" ,maven-3.0-repository-metadata)
-       ("maven-artifact" ,maven-3.0-artifact)
-       ("maven-model-builder" ,maven-3.0-model-builder)
-       ("maven-aether-provider" ,maven-3.0-aether-provider)
-       ("java-sonatype-aether-impl" ,java-sonatype-aether-impl)
-       ("java-sonatype-aether-api" ,java-sonatype-aether-api)
-       ("java-sonatype-aether-util" ,java-sonatype-aether-util)
-       ("java-plexus-interpolation" ,java-plexus-interpolation)
-       ("java-plexus-utils" ,java-plexus-utils)
-       ("java-plexus-classworlds" ,java-plexus-classworlds)
-       ("java-plexus-component-annotations" ,java-plexus-component-annotations)
-       ("java-plexus-container-default" ,java-plexus-container-default)
-       ("java-plexus-sec-dispatcher" ,java-plexus-sec-dispatcher)
-       ("maven-pom" ,maven-3.0-pom)))))
+     (list maven-3.0-model
+           maven-3.0-settings
+           maven-3.0-settings-builder
+           maven-3.0-repository-metadata
+           maven-3.0-artifact
+           maven-3.0-model-builder
+           maven-3.0-aether-provider
+           java-sonatype-aether-impl
+           java-sonatype-aether-api
+           java-sonatype-aether-util
+           java-plexus-interpolation
+           java-plexus-utils
+           java-plexus-classworlds
+           java-plexus-component-annotations
+           java-plexus-container-default
+           java-plexus-sec-dispatcher
+           maven-3.0-pom))))
 
 (define-public maven-3.0-compat
   (package
@@ -2396,24 +2464,24 @@ reporting or the build process.")))
                   #t))
               (delete 'build-tests))))))
     (propagated-inputs
-     `(("maven-model" ,maven-3.0-model)
-       ("maven-model-builder" ,maven-3.0-model-builder)
-       ("maven-settings" ,maven-3.0-settings)
-       ("maven-settings-builder" ,maven-3.0-settings-builder)
-       ("maven-artifact" ,maven-3.0-artifact)
-       ("maven-core" ,maven-3.0-core)
-       ("maven-aether-provider" ,maven-3.0-aether-provider)
-       ("maven-repository-metadata" ,maven-3.0-repository-metadata)
-       ("java-sonatype-aether-api" ,java-sonatype-aether-api)
-       ("java-sonatype-aether-util" ,java-sonatype-aether-util)
-       ("java-sonatype-aether-impl" ,java-sonatype-aether-impl)
-       ("java-plexus-utils" ,java-plexus-utils)
-       ("java-plexus-interpolation" ,java-plexus-interpolation)
-       ("java-eclipse-sisu-plexus" ,java-eclipse-sisu-plexus)
-       ("java-plexus-component-annotations" ,java-plexus-component-annotations)
-       ("java-plexus-container-default" ,java-plexus-container-default)
-       ("maven-wagon-provider-api" ,maven-wagon-provider-api)
-       ("maven-pom" ,maven-3.0-pom)))))
+     (list maven-3.0-model
+           maven-3.0-model-builder
+           maven-3.0-settings
+           maven-3.0-settings-builder
+           maven-3.0-artifact
+           maven-3.0-core
+           maven-3.0-aether-provider
+           maven-3.0-repository-metadata
+           java-sonatype-aether-api
+           java-sonatype-aether-util
+           java-sonatype-aether-impl
+           java-plexus-utils
+           java-plexus-interpolation
+           java-eclipse-sisu-plexus
+           java-plexus-component-annotations
+           java-plexus-container-default
+           maven-wagon-provider-api
+           maven-3.0-pom))))
 
 (define-public maven-shared-utils-3.0
   (package
@@ -2427,9 +2495,8 @@ reporting or the build process.")))
                (base32
                 "0qm8y85kip2hyhnhlkqgj0rhmf83z07s7l7gzsfl5dzl3kvp8nal"))))
     (propagated-inputs
-     `(("maven-core" ,maven-3.0-core)
-       ("maven-components-parent-pom" ,maven-components-parent-pom-21)
-       ,@(package-propagated-inputs maven-shared-utils)))))
+     (modify-inputs (package-propagated-inputs maven-shared-utils)
+       (prepend maven-3.0-core maven-components-parent-pom-21)))))
 
 (define-public maven-shared-utils-3.1
   (package
@@ -2470,17 +2537,15 @@ reporting or the build process.")))
          (replace 'install
            (install-from-pom "pom.xml")))))
     (propagated-inputs
-     `(("maven-artifact" ,maven-3.0-artifact)
-       ("maven-compat" ,maven-3.0-compat)
-       ("maven-plugin-api" ,maven-3.0-plugin-api)
-       ("maven-shared-utils" ,maven-shared-utils)
-       ("maven-wagon-provider-api" ,maven-wagon-provider-api)
-       ("java-plexus-utils" ,java-plexus-utils)
-       ("maven-components-parent-pom" ,maven-components-parent-pom-22)))
+     (list maven-3.0-artifact
+           maven-3.0-compat
+           maven-3.0-plugin-api
+           maven-shared-utils
+           maven-wagon-provider-api
+           java-plexus-utils
+           maven-components-parent-pom-22))
     (native-inputs
-     `(("unzip" ,unzip)
-       ("java-junit" ,java-junit)
-       ("java-easymock" ,java-easymock)))
+     (list unzip java-junit java-easymock))
     (home-page "https://maven.apache.org/shared/maven-dependency-tree")
     (synopsis "Tree-based API for resolution of Maven project dependencies")
     (description "This package provides a tree-based API for resolution of
@@ -2524,11 +2589,8 @@ Maven project dependencies.")
          (replace 'install
            (install-from-pom "pom.xml")))))
     (propagated-inputs
-     `(("maven-plugin-api" ,maven-3.0-plugin-api)
-       ("maven-shared-io" ,maven-shared-io)
-       ("maven-shared-utils" ,maven-shared-utils)
-       ("java-plexus-utils" ,java-plexus-utils)
-       ("maven-components-parent-pom" ,maven-components-parent-pom-22)))
+     (list maven-3.0-plugin-api maven-shared-io maven-shared-utils
+           java-plexus-utils maven-components-parent-pom-22))
     (native-inputs
      `(("java-modello-core" ,java-modello-core)
        ;; modello plugins:
@@ -2572,9 +2634,7 @@ Maven project dependencies.")
        ("java-plexus-utils" ,java-plexus-utils)
        ("maen-parent-pom" ,maven-parent-pom-33)))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-assertj" ,java-assertj)
-       ("unzip" ,unzip)))
+     (list java-junit java-assertj unzip))
     (home-page "https://maven.apache.org/shared/maven-dependency-tree")
     (synopsis "Tree-based API for resolution of Maven project dependencies")
     (description "This package provides a tree-based API for resolution of
@@ -2602,17 +2662,13 @@ Maven project dependencies.")
          (replace 'install
            (install-from-pom "pom.xml")))))
     (propagated-inputs
-     `(("maven-core" ,maven-3.0-core)
-       ("java-plexus-component-annotations" ,java-plexus-component-annotations)
-       ("maven-parent-pom" ,maven-parent-pom-30)))
+     (list maven-3.0-core java-plexus-component-annotations
+           maven-parent-pom-30))
     (inputs
-     `(("java-sonatype-aether-api"  ,java-sonatype-aether-api)
-       ("java-sonatype-aether-util" ,java-sonatype-aether-util)
-       ("java-eclipse-aether-api" ,java-eclipse-aether-api)
-       ("java-eclipse-aether-util" ,java-eclipse-aether-util)))
+     (list java-sonatype-aether-api java-sonatype-aether-util
+           java-eclipse-aether-api java-eclipse-aether-util))
     (native-inputs
-     `(("unzip" ,unzip)
-       ("java-junit" ,java-junit)))
+     (list unzip java-junit))
     (home-page "https://maven.apache.org/shared/maven-dependency-tree")
     (synopsis "Tree-based API for resolution of Maven project dependencies")
     (description "This package provides a tree-based API for resolution of
@@ -2649,19 +2705,18 @@ Maven project dependencies.")
          (replace 'install
            (install-from-pom "pom.xml")))))
     (propagated-inputs
-     `(("maven-artifact" ,maven-3.0-artifact)
-       ("maven-model" ,maven-3.0-model)
-       ("maven-core" ,maven-3.0-core)
-       ("maven-plugin-api" ,maven-3.0-plugin-api)
-       ("maven-shared-utils" ,maven-shared-utils)
-       ("maven-parent-pom" ,maven-parent-pom-33)
-       ("java-sonatype-aether-api" ,java-sonatype-aether-api)
-       ("java-sonatype-aether-util" ,java-sonatype-aether-util)))
+     (list maven-3.0-artifact
+           maven-3.0-model
+           maven-3.0-core
+           maven-3.0-plugin-api
+           maven-shared-utils
+           maven-parent-pom-33
+           java-sonatype-aether-api
+           java-sonatype-aether-util))
     (inputs
-     `(("maven-resolver-api" ,maven-resolver-api)
-       ("maven-resolver-util" ,maven-resolver-util)))
+     (list maven-resolver-api maven-resolver-util))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
    (home-page "https://maven.apache.org/shared/maven-dependency-tree")
     (synopsis "Tree-based API for resolution of Maven project dependencies")
     (description "This package provides a tree-based API for resolution of
@@ -2691,12 +2746,10 @@ Maven project dependencies.")
          (replace 'install
            (install-from-pom "enforcer-api/pom.xml")))))
     (propagated-inputs
-     `(("maven-plugin-api" ,maven-plugin-api)
-       ("java-plexus-container-default" ,java-plexus-container-default)
-       ("java-jsr305" ,java-jsr305)
-       ("maven-enforcer-parent-pom" ,maven-enforcer-parent-pom)))
+     (list maven-plugin-api java-plexus-container-default java-jsr305
+           maven-enforcer-parent-pom))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://maven.apache.org/shared/maven-dependency-tree")
     (synopsis "Tree-based API for resolution of Maven project dependencies")
     (description "This package provides a tree-based API for resolution of
@@ -2741,18 +2794,18 @@ Maven project dependencies.")
          (replace 'install
            (install-from-pom "enforcer-rules/pom.xml")))))
     (propagated-inputs
-     `(("maven-artifact" ,maven-artifact)
-       ("maven-plugin-api" ,maven-plugin-api)
-       ("maven-core" ,maven-core)
-       ("maven-common-artifact-filters" ,maven-common-artifact-filters)
-       ("java-commons-codec" ,java-commons-codec)
-       ("java-commons-lang3" ,java-commons-lang3)
-       ("maven-enforcer-api" ,maven-enforcer-api)
-       ("maven-resolver-util" ,maven-resolver-util)
-       ("java-bsh" ,java-bsh)
-       ("maven-dependency-tree" ,maven-dependency-tree)
-       ("maven-compat" ,maven-3.0-compat)
-       ("maven-enforcer-parent-pom" ,maven-enforcer-parent-pom)))))
+     (list maven-artifact
+           maven-plugin-api
+           maven-core
+           maven-common-artifact-filters
+           java-commons-codec
+           java-commons-lang3
+           maven-enforcer-api
+           maven-resolver-util
+           java-bsh
+           maven-dependency-tree
+           maven-3.0-compat
+           maven-enforcer-parent-pom))))
 
 (define-public maven-enforcer-plugin
   (package
@@ -2774,14 +2827,14 @@ Maven project dependencies.")
          (replace 'install
            (install-from-pom "maven-enforcer-plugin/pom.xml")))))
     (propagated-inputs
-     `(("maven-artifact" ,maven-artifact)
-       ("maven-plugin-api" ,maven-plugin-api)
-       ("maven-core" ,maven-core)
-       ("java-plexus-utils" ,java-plexus-utils)
-       ("maven-enforcer-api" ,maven-enforcer-api)
-       ("maven-enforcer-rules" ,maven-enforcer-rules)
-       ("maven-plugin-annotations" ,maven-plugin-annotations)
-       ("maven-enforcer-parent-pom" ,maven-enforcer-parent-pom)))))
+     (list maven-artifact
+           maven-plugin-api
+           maven-core
+           java-plexus-utils
+           maven-enforcer-api
+           maven-enforcer-rules
+           maven-plugin-annotations
+           maven-enforcer-parent-pom))))
 
 (define-public maven-artifact-transfer
   (package
@@ -2818,21 +2871,20 @@ Maven project dependencies.")
          (replace 'install
            (install-from-pom "pom.xml")))))
     (propagated-inputs
-     `(("java-commons-codec" ,java-commons-codec)
-       ("maven-artifact" ,maven-3.0-artifact)
-       ("maven-core" ,maven-3.0-core)
-       ("maven-common-artifact-filters" ,maven-common-artifact-filters)
-       ("java-plexus-component-annotations" ,java-plexus-component-annotations)
-       ("java-plexus-utils" ,java-plexus-utils)
-       ("java-slf4j-api" ,java-slf4j-api)
-       ("java-plexus-classworlds" ,java-plexus-classworlds)
-       ("java-sonatype-aether-api" ,java-sonatype-aether-api)
-       ("java-eclipse-aether-api" ,java-eclipse-aether-api)
-       ("java-eclipse-aether-util" ,java-eclipse-aether-util)
-       ("java-eclipse-aether-impl" ,java-eclipse-aether-impl)))
+     (list java-commons-codec
+           maven-3.0-artifact
+           maven-3.0-core
+           maven-common-artifact-filters
+           java-plexus-component-annotations
+           java-plexus-utils
+           java-slf4j-api
+           java-plexus-classworlds
+           java-sonatype-aether-api
+           java-eclipse-aether-api
+           java-eclipse-aether-util
+           java-eclipse-aether-impl))
     (native-inputs
-     `(("unzip" ,unzip)
-       ("java-plexus-component-metadata" ,java-plexus-component-metadata)))
+     (list unzip java-plexus-component-metadata))
     (home-page "https://maven.apache.org/shared/maven-artifact-transfer")
     (synopsis "API to install, deploy and resolve artifacts in Maven")
     (description "This package contains an API to install, deploy and resolve
@@ -2882,10 +2934,9 @@ artifacts in Maven 3.")
        ("maven-plugins-pom-23" ,maven-plugins-pom-23)
        ("java-plexus-digest" ,java-plexus-digest)))
     (inputs
-     `(("maven-plugin-annotations" ,maven-plugin-annotations)
-       ("java-slf4j-api" ,java-slf4j-api)))
+     (list maven-plugin-annotations java-slf4j-api))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://maven.apache.org/plugin/maven-install-plugin")
     (synopsis "Maven's install plugin")
     (description "The Install Plugin is used during the install phase to add
@@ -2951,14 +3002,14 @@ build are stored.  By default, it is located within the user's home directory
          (replace 'install
            (install-from-pom "pom.xml")))))
     (propagated-inputs
-     `(("maven-core" ,maven-3.0-core)
-       ("maven-shared-utils" ,maven-shared-utils)
-       ("java-plexus-utils" ,java-plexus-utils)
-       ("java-plexus-interpolation" ,java-plexus-interpolation)
-       ("java-sisu-build-api" ,java-sisu-build-api)
-       ("maven-parent-pom" ,maven-parent-pom-30)))
+     (list maven-3.0-core
+           maven-shared-utils
+           java-plexus-utils
+           java-plexus-interpolation
+           java-sisu-build-api
+           maven-parent-pom-30))
     (inputs
-     `(("java-jsr305" ,java-jsr305)))
+     (list java-jsr305))
     (native-inputs
      `(("unzip" ,unzip)
        ("java-assertj" ,java-assertj)
@@ -3004,17 +3055,16 @@ projects.")
          (replace 'install
            (install-from-pom "pom.xml")))))
     (propagated-inputs
-     `(("maven-plugin-api" ,maven-plugin-api)
-       ("maven-core" ,maven-core)
-       ("java-plexus-utils" ,java-plexus-utils)
-       ("maven-filtering" ,maven-filtering)
-       ("java-plexus-interpolation" ,java-plexus-interpolation)
-       ("maven-parent-pom" ,maven-parent-pom-31)))
+     (list maven-plugin-api
+           maven-core
+           java-plexus-utils
+           maven-filtering
+           java-plexus-interpolation
+           maven-parent-pom-31))
     (inputs
-     `(("maven-plugin-annotations" ,maven-plugin-annotations)
-       ("java-commons-io" ,java-commons-io)))
+     (list maven-plugin-annotations java-commons-io))
     (native-inputs
-     `(("java-plexus-component-metadata" ,java-plexus-component-metadata)))
+     (list java-plexus-component-metadata))
     (home-page "https://maven.apache.org/plugins/maven-resources-plugin")
     (synopsis "Maven plugin to collect and install resources")
     (description "The Resources Plugin handles the copying of project resources
@@ -3068,14 +3118,10 @@ unit tests.")
          (replace 'install
            (install-from-pom "pom.xml")))))
     (propagated-inputs
-     `(("maven-plugin-api" ,maven-plugin-api)
-       ("maven-core" ,maven-core)
-       ("maven-shared-utils" ,maven-shared-utils)
-       ("java-plexus-component-annotations" ,java-plexus-component-annotations)
-       ("maven-parent-pom" ,maven-parent-pom-30)))
+     (list maven-plugin-api maven-core maven-shared-utils
+           java-plexus-component-annotations maven-parent-pom-30))
     (native-inputs
-     `(("unzip" ,unzip)
-       ("java-plexus-component-metadata" ,java-plexus-component-metadata)))
+     (list unzip java-plexus-component-metadata))
     (home-page "https://maven.apache.org/shared/maven-shared-incremental")
     (synopsis "Maven Incremental Build support utilities")
     (description "This package contains various utility classes and plexus
@@ -3121,19 +3167,18 @@ components for supporting incremental build functionality in maven plugins.")
          (replace 'install
            (install-from-pom "pom.xml")))))
     (propagated-inputs
-     `(("maven-plugin-api" ,maven-plugin-api)
-       ("maven-artifact" ,maven-artifact)
-       ("maven-core" ,maven-core)
-       ("maven-shared-utils" ,maven-shared-utils)
-       ("maven-shared-incremental" ,maven-shared-incremental)
-       ("java-plexus-java" ,java-plexus-java)
-       ("java-plexus-compiler-api" ,java-plexus-compiler-api)
-       ("java-plexus-compiler-manager" ,java-plexus-compiler-manager)
-       ("java-plexus-compiler-javac" ,java-plexus-compiler-javac)
-       ("maven-parent-pom" ,maven-parent-pom-33)))
+     (list maven-plugin-api
+           maven-artifact
+           maven-core
+           maven-shared-utils
+           maven-shared-incremental
+           java-plexus-java
+           java-plexus-compiler-api
+           java-plexus-compiler-manager
+           java-plexus-compiler-javac
+           maven-parent-pom-33))
     (inputs
-     `(("maven-plugin-annotations" ,maven-plugin-annotations)
-       ("java-commons-io" ,java-commons-io)))
+     (list maven-plugin-annotations java-commons-io))
     (home-page "https://maven.apache.org/plugins/maven-compiler-plugin")
     (synopsis "Compiler plugin for Maven")
     (description "The Compiler Plugin is used to compile the sources of your
@@ -3172,9 +3217,9 @@ AspectJ, .NET, and C#.")
          (replace 'install
            (install-from-pom "surefire-logger-api/pom.xml")))))
     (propagated-inputs
-     `(("java-surefire-parent-pom" ,java-surefire-parent-pom)))
+     (list java-surefire-parent-pom))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://maven.apache.org/surefire/surefire-logger-api")
     (synopsis "Interfaces and Utilities related only to internal SureFire Logger API")
     (description "This package contains interfaces and utilities that are
@@ -3220,7 +3265,7 @@ internal to the SureFire Logger API.  It is designed to have no dependency.")
          (replace 'install
            (install-pom-file "pom.xml")))))
     (propagated-inputs
-     `(("maven-parent-pom" ,maven-parent-pom-33)))))
+     (list maven-parent-pom-33))))
 
 (define-public java-surefire-api
   (package
@@ -3276,15 +3321,12 @@ internal to the SureFire Logger API.  It is designed to have no dependency.")
          (replace 'install
            (install-from-pom "surefire-api/pom.xml")))))
     (propagated-inputs
-     `(("java-surefire-logger-api" ,java-surefire-logger-api)
-       ("java-commons-codec" ,java-commons-codec)
-       ("java-surefire-parent-pom" ,java-surefire-parent-pom)
-       ("maven-shared-utils" ,maven-shared-utils-3.1)))
+     (list java-surefire-logger-api java-commons-codec
+           java-surefire-parent-pom maven-shared-utils-3.1))
     (inputs
-     `(("java-jsr305" ,java-jsr305)))
+     (list java-jsr305))
     (native-inputs
-     `(("unzip" ,unzip)
-       ("java-jarjar" ,java-jarjar)))
+     (list unzip java-jarjar))
     (synopsis "Maven SureFire API")
     (description "This package contains the API to use Maven SureFire.")))
 
@@ -3306,12 +3348,10 @@ internal to the SureFire Logger API.  It is designed to have no dependency.")
          (replace 'install
            (install-from-pom "surefire-booter/pom.xml")))))
     (propagated-inputs
-     `(("java-surefire-api" ,java-surefire-api)
-       ("java-commons-lang3" ,java-commons-lang3)
-       ("java-commons-io" ,java-commons-io)
-       ("java-surefire-parent-pom" ,java-surefire-parent-pom)))
+     (list java-surefire-api java-commons-lang3 java-commons-io
+           java-surefire-parent-pom))
     (inputs
-     `(("java-jsr305" ,java-jsr305)))
+     (list java-jsr305))
     (synopsis "API and Facilities used by forked tests running in JVM sub-process")
     (description "SureFire runs tests inside a forked JVM subprocess.  This
 package contains an API and facilities used inside that forked JVM.")))
@@ -3329,10 +3369,9 @@ package contains an API and facilities used inside that forked JVM.")))
          (replace 'install
            (install-from-pom "surefire-extensions-api/pom.xml")))))
     (propagated-inputs
-     `(("java-surefire-api" ,java-surefire-api)
-       ("java-surefire-parent-pom" ,java-surefire-parent-pom)))
+     (list java-surefire-api java-surefire-parent-pom))
     (inputs
-     `(("java-plexus-component-annotations" ,java-plexus-component-annotations)))
+     (list java-plexus-component-annotations))
     (synopsis "Extension API for Maven SureFire")
     (description "Surefire is a test framework project.  This is the aggregator
 POM in Apache Maven Surefire project.")))
@@ -3383,14 +3422,10 @@ POM in Apache Maven Surefire project.")))
          (replace 'install
            (install-from-pom "surefire-providers/common-java5/pom.xml")))))
     (propagated-inputs
-     `(("maven-shared-utils" ,maven-shared-utils-3.1)
-       ("java-surefire-api" ,java-surefire-api)
-       ("java-surefire-parent-pom" ,java-surefire-parent-pom)))
+     (list maven-shared-utils-3.1 java-surefire-api
+           java-surefire-parent-pom))
     (native-inputs
-     `(("unzip" ,unzip)
-       ("java-jarjar" ,java-jarjar)
-       ("java-junit" ,java-junit)
-       ("java-fest-assert" ,java-fest-assert)))
+     (list unzip java-jarjar java-junit java-fest-assert))
     (synopsis "Common java5 facilities for Maven SureFire")
     (description "This package contains shared Java 5 code for all providers.")))
 
@@ -3407,13 +3442,9 @@ POM in Apache Maven Surefire project.")))
          (replace 'install
            (install-from-pom "surefire-providers/common-junit3/pom.xml")))))
     (propagated-inputs
-     `(("java-junit" ,java-junit)
-       ("java-surefire-api" ,java-surefire-api)
-       ("java-surefire-parent-pom" ,java-surefire-parent-pom)))
+     (list java-junit java-surefire-api java-surefire-parent-pom))
     (native-inputs
-     `(("unzip" ,unzip)
-       ("java-junit" ,java-junit)
-       ("java-fest-assert" ,java-fest-assert)))
+     (list unzip java-junit java-fest-assert))
     (synopsis "Shared JUnit3 provider code for Maven SureFire")
     (description "This package contains shared code for all JUnit providers.")))
 
@@ -3430,12 +3461,12 @@ POM in Apache Maven Surefire project.")))
          (replace 'install
            (install-from-pom "surefire-providers/common-junit4/pom.xml")))))
     (propagated-inputs
-     `(("java-junit" ,java-junit)
-       ("java-surefire-api" ,java-surefire-api)
-       ("java-surefire-common-java5" ,java-surefire-common-java5)
-       ("java-surefire-common-junit3" ,java-surefire-common-junit3)
-       ("maven-shared-utils" ,maven-shared-utils-3.1)
-       ("java-surefire-parent-pom" ,java-surefire-parent-pom)))
+     (list java-junit
+           java-surefire-api
+           java-surefire-common-java5
+           java-surefire-common-junit3
+           maven-shared-utils-3.1
+           java-surefire-parent-pom))
     (synopsis "Shared JUnit4 provider code for Maven SureFire")
     (description "This package contains shared code for all JUnit providers,
 starting from JUnit 4.")))
@@ -3509,19 +3540,13 @@ starting from JUnit 4.")))
          (replace 'install
            (install-from-pom "surefire-providers/surefire-junit4/pom.xml")))))
     (propagated-inputs
-     `(("java-junit" ,java-junit)
-       ("java-surefire-parent-pom" ,java-surefire-parent-pom)))
+     (list java-junit java-surefire-parent-pom))
     (inputs
-     `(("java-surefire-common-junit4" ,java-surefire-common-junit4)
-       ("java-surefire-common-junit3" ,java-surefire-common-junit3)
-       ("java-surefire-common-java5" ,java-surefire-common-java5)
-       ("java-surefire-api" ,java-surefire-api)))
+     (list java-surefire-common-junit4 java-surefire-common-junit3
+           java-surefire-common-java5 java-surefire-api))
     (native-inputs
-     `(("java-jarjar" ,java-jarjar)
-       ("unzip" ,unzip)
-       ("java-junit" ,java-junit)
-       ("java-hamcrest-all" ,java-hamcrest-all)
-       ("java-fest-assert" ,java-fest-assert)))
+     (list java-jarjar unzip java-junit java-hamcrest-all
+           java-fest-assert))
     (synopsis "SureFire JUnit 4.0+ runner")
     (description "This package contains the runner for tests run on a forked
 JVM, using JUnit 4.0 or later.")))
@@ -3591,25 +3616,24 @@ JVM, using JUnit 4.0 or later.")))
          (replace 'install
            (install-from-pom "maven-surefire-common/pom.xml")))))
     (propagated-inputs
-     `(("java-surefire-api" ,java-surefire-api)
-       ("java-surefire-extensions-api" ,java-surefire-extensions-api)
-       ("java-surefire-booter" ,java-surefire-booter)
-       ("maven-core" ,maven-core)
-       ("maven-plugin-annotations" ,maven-plugin-annotations)
-       ("maven-common-artifact-filters" ,maven-common-artifact-filters)
-       ("maven-artifact-transfer" ,maven-artifact-transfer)
-       ("java-plexus-java" ,java-plexus-java)
-       ("java-jansi" ,java-jansi)
-       ("java-commons-io" ,java-commons-io)
-       ("java-commons-lang3" ,java-commons-lang3)
-       ("java-commons-compress" ,java-commons-compress)
-       ("maven-shared-utils" ,maven-shared-utils-3.1)
-       ("java-surefire-parent-pom" ,java-surefire-parent-pom)))
+     (list java-surefire-api
+           java-surefire-extensions-api
+           java-surefire-booter
+           maven-core
+           maven-plugin-annotations
+           maven-common-artifact-filters
+           maven-artifact-transfer
+           java-plexus-java
+           java-jansi
+           java-commons-io
+           java-commons-lang3
+           java-commons-compress
+           maven-shared-utils-3.1
+           java-surefire-parent-pom))
     (inputs
-     `(("java-jsr305" ,java-jsr305)))
+     (list java-jsr305))
     (native-inputs
-     `(("unzip" ,unzip)
-       ("java-jarjar" ,java-jarjar)))
+     (list unzip java-jarjar))
     (synopsis "API used in Surefire and Failsafe MOJO")
     (description "This package contains an API used in SureFire and Failsafe
 MOJO.")))
@@ -3635,12 +3659,10 @@ MOJO.")))
          (replace 'install
            (install-from-pom "maven-surefire-plugin/pom.xml")))))
     (propagated-inputs
-     `(("maven-surefire-common" ,maven-surefire-common)
-       ("maven-core" ,maven-core)))
+     (list maven-surefire-common maven-core))
     (native-inputs
-     `(("maven-plugin-annotations" ,maven-plugin-annotations)
-       ("unzip" ,unzip)))
-    (synopsis "SureFire Maven plugin that runs tests.")
+     (list maven-plugin-annotations unzip))
+    (synopsis "SureFire Maven plugin that runs tests")
     (description "The Surefire Plugin is used during the test phase of the
 build lifecycle to execute the unit tests of an application.  It generates
 reports in two different file formats, plain text and xml.")))
@@ -3675,16 +3697,16 @@ reports in two different file formats, plain text and xml.")))
          (replace 'install
            (install-from-pom "pom.xml")))))
     (propagated-inputs
-     `(("maven-archiver" ,maven-archiver)
-       ("maven-artifact" ,maven-3.0-artifact)
-       ("maven-core" ,maven-3.0-core)
-       ("maven-plugin-api" ,maven-3.0-plugin-api)
-       ("maven-file-management" ,maven-file-management)
-       ("maven-shared-utils" ,maven-shared-utils)
-       ("java-plexus-archiver" ,java-plexus-archiver)
-       ("java-plexus-utils" ,java-plexus-utils)))
+     (list maven-archiver
+           maven-3.0-artifact
+           maven-3.0-core
+           maven-3.0-plugin-api
+           maven-file-management
+           maven-shared-utils
+           java-plexus-archiver
+           java-plexus-utils))
     (inputs
-     `(("maven-plugin-annotations" ,maven-plugin-annotations)))
+     (list maven-plugin-annotations))
     (home-page "https://maven.apache.org/plugins/maven-jar-plugin")
     (synopsis "Jar builder plugin for Maven")
     (description "This plugin provides the capability to build jars.  If you
diff --git a/gnu/packages/mc.scm b/gnu/packages/mc.scm
index e07191e344..7bde8a5e78 100644
--- a/gnu/packages/mc.scm
+++ b/gnu/packages/mc.scm
@@ -47,15 +47,14 @@
       (sha256
        (base32 "1x2g5ahgzg951y4ldbsgkv8icni2mgh3p2wsds0j16gsbwi5kgii"))))
     (build-system gnu-build-system)
-    (native-inputs `(("perl" ,perl)
-                     ("pkg-config" ,pkg-config)))
-    (inputs `(("aspell" ,aspell)
-              ("check" ,check)
-              ("glib" ,glib)
-              ("gpm" ,gpm)
-              ("libssh2" ,libssh2)
-              ("ncurses" ,ncurses)
-              ("unzip" ,unzip)))
+    (native-inputs (list perl pkg-config))
+    (inputs (list aspell
+                  check
+                  glib
+                  gpm
+                  libssh2
+                  ncurses
+                  unzip))
     (arguments
      `(#:configure-flags
        '("--with-screen=ncurses" "--enable-aspell")
diff --git a/gnu/packages/mcrypt.scm b/gnu/packages/mcrypt.scm
index d0cfb8f7a3..c0b9c815a5 100644
--- a/gnu/packages/mcrypt.scm
+++ b/gnu/packages/mcrypt.scm
@@ -44,9 +44,7 @@
                  "mcrypt-CVE-2012-4527.patch"))))
     (build-system gnu-build-system)
     (inputs
-     `(("zlib" ,zlib)
-       ("libmcrypt" ,libmcrypt)
-       ("libmhash" ,libmhash)))
+     (list zlib libmcrypt libmhash))
     (home-page "http://mcrypt.sourceforge.net/")
     (synopsis "Replacement for the popular Unix crypt command")
     (description
@@ -98,7 +96,7 @@ XTEA, 3WAY, TWOFISH, BLOWFISH, ARCFOUR, WAKE and more.")
                                "libmhash-hmac-fix-uaf.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("perl" ,perl)))                 ;for tests
+     (list perl))                 ;for tests
     (home-page "http://mhash.sourceforge.net/")
     (synopsis "Thread-safe hash library")
     (description
diff --git a/gnu/packages/medical.scm b/gnu/packages/medical.scm
index 6c298707f5..6c9cc757eb 100644
--- a/gnu/packages/medical.scm
+++ b/gnu/packages/medical.scm
@@ -49,9 +49,7 @@
               (("/usr") (assoc-ref outputs "out")))
             #t)))))
    (inputs
-    `(("python-pyqt+qscintilla" ,python-pyqt+qscintilla)
-      ("python-mysqlclient" ,python-mysqlclient)
-      ("qscintilla" ,qscintilla)))
+    (list python-pyqt+qscintilla python-mysqlclient qscintilla))
    (home-page "https://openmolar.com/om1")
    (synopsis "Dental practice management software")
    (description "Openmolar is a dental practice management suite.  Its
diff --git a/gnu/packages/mercury.scm b/gnu/packages/mercury.scm
index 5a2c85a79b..fe02b34a97 100644
--- a/gnu/packages/mercury.scm
+++ b/gnu/packages/mercury.scm
@@ -244,8 +244,6 @@ separate compilation, and numerous optimization/time trade-offs.")
            ;; Eventually we need to add inputs for Java, Erlang,
            ;; C#, etc. in order to enable these extra grades.
            (native-inputs
-            `(("mercury-minimal" ,mercury-minimal)
-              ("autoconf" ,autoconf)
-              ("automake" ,automake)
-              ,@(package-native-inputs mercury-minimal)))
+            (modify-inputs (package-native-inputs mercury-minimal)
+              (prepend mercury-minimal autoconf automake)))
            (synopsis "Pure logic programming language")))
diff --git a/gnu/packages/mes.scm b/gnu/packages/mes.scm
index c66751bc7c..07e63384ff 100644
--- a/gnu/packages/mes.scm
+++ b/gnu/packages/mes.scm
@@ -4,6 +4,7 @@
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
+;;; Copyright © 2021 Arun Isaac <arunisaac@systemreboot.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -56,8 +57,7 @@
                (base32
                 "0lkd9lyspvhxlfs0496gsllwinh62jk9wij6gpadvx9gwz6yavd9"))))
     (build-system gnu-build-system)
-    (native-inputs
-     `(("guile" ,guile-2.2)))
+    (native-inputs (list guile-2.2))
     (synopsis "LALR(1) Parser Generator in Guile")
     (description
      "NYACC is an LALR(1) parser generator implemented in Guile.
@@ -92,22 +92,20 @@ extensive examples, including parsers for the Javascript and C99 languages.")
                     (("^DOCDIR =.*")
                      "DOCDIR = @prefix@/share/doc/$(PACKAGE_TARNAME)\n"))
                   #t))))
-    (native-inputs
-     `(("pkg-config" ,pkg-config)))
-    (inputs
-     `(("guile" ,guile-2.2)))))
+    (native-inputs (list pkg-config))
+    (inputs (list guile-2.2))))
 
 (define-public nyacc
   (package
     (inherit nyacc-0.99)
-    (version "1.04.0")
+    (version "1.05.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://savannah/nyacc/nyacc-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0m3mcdaslvvr2iav8ga146hzsja2hdj4656pszljb4q2q7h25ip5"))
+                "1ck3gyzln5dhamp317nv3waych12mczj05dm4wdblij6ab0l4863"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -116,8 +114,7 @@ extensive examples, including parsers for the Javascript and C99 languages.")
                      "GUILE_GLOBAL_SITE=\
 $prefix/share/guile/site/$GUILE_EFFECTIVE_VERSION\n"))
                   #t))))
-    (inputs
-     `(("guile" ,guile-3.0)))
+    (inputs (list guile-3.0))
     (description
      "@acronym{NYACC, Not Yet Another Compiler Compiler} is set of Guile modules
 for generating parsers and lexical analyzers.  It provides sample parsers,
@@ -152,69 +149,39 @@ parsers to allow execution with Guile as extension languages.")))
               (sha256
                (base32
                 "065ksalfllbdrzl12dz9d9dcxrv97wqxblslngsc6kajvnvlyvpk"))))
-    (inputs
-     `(("guile" ,guile-2.2)))))
+    (inputs (list guile-3.0))))
 
-(define-public mes-0.19
-  ;; Mes used for bootstrap.
+(define-public mes
   (package
     (name "mes")
-    (version "0.19")
+    (version "0.23")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnu/mes/"
                                   "mes-" version ".tar.gz"))
               (sha256
                (base32
-                "15h4yhaywdc0djpjlin2jz1kzahpqxfki0r0aav1qm9nxxmnp1l0"))))
-    (build-system gnu-build-system)
-    (supported-systems '("i686-linux" "x86_64-linux"))
-    (propagated-inputs
-     `(("mescc-tools" ,mescc-tools-0.5.2)
-       ("nyacc" ,nyacc-0.86)))
+                "0mnryfkl0dwbr5gxp16j5s95gw7z1vm1fqa1pxabp0aiar1hw53s"))))
+    (supported-systems '("armhf-linux" "i686-linux" "x86_64-linux"))
+    (propagated-inputs (list mescc-tools nyacc-1.00.2))
     (native-inputs
-     `(("guile" ,guile-2.2)
-       ,@(let ((target-system (or (%current-target-system)
+     (append (list guile-3.0)
+         (let ((target-system (or (%current-target-system)
                                   (%current-system))))
            (cond
             ((string-prefix? "x86_64-linux" target-system)
              ;; Use cross-compiler rather than #:system "i686-linux" to get
              ;; MesCC 64 bit .go files installed ready for use with Guile.
-             `(("i686-linux-binutils" ,(cross-binutils "i686-unknown-linux-gnu"))
-               ("i686-linux-gcc" ,(cross-gcc "i686-unknown-linux-gnu"))))
+             (list (cross-binutils "i686-unknown-linux-gnu")
+                   (cross-gcc "i686-unknown-linux-gnu")))
             (else
              '())))
-       ("graphviz" ,graphviz)
-       ("help2man" ,help2man)
-       ("perl" ,perl)                 ; build-aux/gitlog-to-changelog
-       ("texinfo" ,texinfo)))
+       (list graphviz help2man
+             perl                               ;build-aux/gitlog-to-changelog
+             texinfo)))
+    (build-system gnu-build-system)
     (arguments
      `(#:strip-binaries? #f))  ; binutil's strip b0rkes MesCC/M1/hex2 binaries
-    (synopsis "Scheme interpreter and C compiler for full source bootstrapping")
-    (description
-     "GNU Mes--Maxwell Equations of Software--brings the Reduced Binary Seed
-bootstrap to Guix and aims to help create full source bootstrapping for
-GNU/Linux distributions.  It consists of a mutual self-hosting Scheme
-interpreter in C and a Nyacc-based C compiler in Scheme and is compatible with
-Guile.")
-    (home-page "https://www.gnu.org/software/mes/")
-    (license gpl3+)))
-
-(define-public mes
-  (package
-    (inherit mes-0.19)
-    (version "0.23")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "mirror://gnu/mes/"
-                                  "mes-" version ".tar.gz"))
-              (sha256
-               (base32
-                "0mnryfkl0dwbr5gxp16j5s95gw7z1vm1fqa1pxabp0aiar1hw53s"))))
-    (supported-systems '("armhf-linux" "i686-linux" "x86_64-linux"))
-    (propagated-inputs
-     `(("mescc-tools" ,mescc-tools)
-       ("nyacc" ,nyacc-1.00.2)))
     (native-search-paths
      (list (search-path-specification
             (variable "C_INCLUDE_PATH")
@@ -225,180 +192,80 @@ Guile.")
            (search-path-specification
             (variable "MES_PREFIX")
             (separator #f)
-            (files '("")))))))
+            (files '("")))))
+    (synopsis "Scheme interpreter and C compiler for full source bootstrapping")
+    (description
+     "GNU Mes--Maxwell Equations of Software--brings the Reduced Binary Seed
+bootstrap to Guix and aims to help create full source bootstrapping for
+GNU/Linux distributions.  It consists of a mutual self-hosting Scheme
+interpreter in C and a Nyacc-based C compiler in Scheme and is compatible with
+Guile.")
+    (home-page "https://www.gnu.org/software/mes/")
+    (license gpl3+)))
 
-(define-public mes-rb5
-  ;; This is the Reproducible-Builds summit 5's Mes, also built on Debian
-  ;; GNU/Linux and NixOS to produce the same, bit-for-bit identical result.
+(define-public mescc-tools
   (package
-    (inherit mes)
-    (name "mes-rb5")
-    (version "0.22")
+    (name "mescc-tools")
+    (version "1.2.0")
     (source (origin
-              (method url-fetch)
-              (uri (string-append "mirror://gnu/mes/"
-                                  "mes-" version ".tar.gz"))
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://git.savannah.nongnu.org/r/mescc-tools.git")
+                    (commit (string-append "Release_" version))
+                    (recursive? #t)))             ;for M2libc
+              (file-name (git-file-name name version))
               (sha256
                (base32
-                "0p1jsrrmcbc0zrvbvnjbb6iyxr0in71km293q8qj6gnar6bw09av"))))
-    (supported-systems '("i686-linux" "x86_64-linux"))
-    (inputs '())
-    (propagated-inputs '())
-    (native-inputs
-     `(("bash" ,bash)
-       ("coreutils" ,coreutils)
-       ("grep" ,grep)
-       ("guile" ,guile-2.2)
-       ("gzip" ,gzip)
-       ("libc" ,glibc)
-       ("locales" ,glibc-utf8-locales)
-       ("make" ,gnu-make)
-       ("mes" ,mes)
-       ("mescc-tools" ,mescc-tools)
-       ("nyacc" ,nyacc-0.99)
-       ("sed" ,sed)
-       ("tar" ,tar)))
-    (supported-systems '("i686-linux"))
+                "1xkn5sspfxldy4wm8fq8gd8kwn46578zhfl12c16pq74x21zb198"))))
+    (build-system gnu-build-system)
+    (supported-systems '("i686-linux" "x86_64-linux"
+                         "armhf-linux" "aarch64-linux"
+                         "powerpc64le-linux"))
     (arguments
-     `(#:implicit-inputs? #f
-       #:strip-binaries? #f    ; binutil's strip b0rkes MesCC/M1/hex2 binaries
-       #:modules ((guix build gnu-build-system)
-                  (guix build utils)
-                  (ice-9 popen)
-                  (ice-9 rdelim))
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'setenv
-           (lambda _
-             (setenv "AR" "mesar")
-             (setenv "CC" "mescc")
-             (setenv "GUILD" "true")
-             (setenv "SCHEME" "mes")
-             (setenv "LC_ALL" "en_US.UTF-8")
-             #t))
-         (replace 'configure
-           (lambda _
-             (let ((out (assoc-ref %outputs "out")))
-               (invoke "sh" "configure.sh"
-                       (string-append "--prefix=" out)
-                       "--host=i686-unkown-linux-gnu"
-                       "--with-courage"))))
-         (replace 'build
-           (lambda _
-             (invoke "sh" "bootstrap.sh")))
-         (replace 'check
-           (lambda _
-             (copy-file "bin/mes-mescc" "bin/mes-mescc-0.21")
-             (system* "sed" "-i" "s/0\\.22/0\\.21/" "bin/mes-mescc-0.21")
-             (let ((sha256sum
-                    (read-delimited
-                     " "
-                     (open-pipe* OPEN_READ "sha256sum" "bin/mes-mescc-0.21"))))
-               (unless
-                   (equal?
-                    sha256sum
-                    "9e0bcb1633c58e7bc415f6ea27cee7951d6b0658e13cdc147e992b31a14625fb")
-                 (throw 'error "mes checksum failure"))
-               #t)))
-         (replace 'install
-           (lambda _
-             (invoke "sh" "install.sh"))))))))
-
-(define-public mescc-tools-0.5.2
-  ;; Mescc-tools used for bootstrap.
-  (let ((commit "bb062b0da7bf2724ca40f9002b121579898d4ef7")
-        (revision "0")
-        (version "0.5.2"))
-    (package
-      (name "mescc-tools")
-      (version (git-version version revision commit))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://git.savannah.nongnu.org/r/mescc-tools.git")
-                      (commit commit)))
-                (file-name (git-file-name name version))
-                (sha256
-                 (base32
-                  "1nc6rnax66vmhqsjg0kgx23pihdcxmww6v325ywf59vsq1jqjvff"))))
-      (build-system gnu-build-system)
-      (supported-systems '("i686-linux" "x86_64-linux"))
-      (arguments
-       `(#:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
-         #:test-target "test"
-         #:phases (modify-phases %standard-phases
-                    (delete 'configure))))
-      (synopsis "Tools for the full source bootstrapping process")
-      (description
-       "Mescc-tools is a collection of tools for use in a full source
+     `(#:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
+       #:test-target "test"
+       #:phases (modify-phases %standard-phases
+                  (delete 'configure))))
+    (native-inputs (list which))
+    (synopsis "Tools for the full source bootstrapping process")
+    (description
+     "Mescc-tools is a collection of tools for use in a full source
 bootstrapping process.  It consists of the M1 macro assembler, the hex2
 linker, the blood-elf symbol table generator, the kaem shell, exec_enable and
 get_machine.")
     (home-page "https://savannah.nongnu.org/projects/mescc-tools")
-    (license gpl3+))))
+    (license gpl3+)))
 
-(define-public mescc-tools
+(define-public m2-planet
   (package
-    (inherit mescc-tools-0.5.2)
-    (name "mescc-tools")
-    (version "0.7.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "http://git.savannah.nongnu.org/cgit/mescc-tools.git/snapshot/"
-             name "-Release_" version
-             ".tar.gz"))
-       (file-name (string-append name "-" version ".tar.gz"))
-       (sha256
-        (base32
-         "1p1ijia4rm3002f5sypidl9v5gq0mlch9b0n61rpxkdsaaxjqax3"))))
-    (supported-systems '("armhf-linux" "aarch64-linux"
-                         "i686-linux" "x86_64-linux"))
+    (name "m2-planet")
+    (version "1.8.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/oriansj/m2-planet")
+                    (commit (string-append "Release_" version))
+                    (recursive? #t)))             ;for M2libc
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0525fhijrjljgaabmgsjy8yk2pmh5zf8lwa44wpvkjc18knl7nza"))))
+    (native-inputs (list mescc-tools))
+    (build-system gnu-build-system)
     (arguments
-     (substitute-keyword-arguments (package-arguments mescc-tools-0.5.2)
-       ((#:make-flags _)
-        `(list (string-append "PREFIX=" (assoc-ref %outputs "out"))
-               "CC=gcc"))
-       ((#:phases phases)
-        `(modify-phases ,phases
-           (add-after 'unpack 'patch-prefix
-             (lambda _
-               (substitute* "sha256.sh"
-                 (("/usr/bin/sha256sum") (which "sha256sum")))
-               #t))))))))
-
-(define-public m2-planet
-  (let ((commit "b87ddb0051b168ea45f8d49a610dcd069263336a")
-        (revision "2"))
-    (package
-      (name "m2-planet")
-      (version (string-append "1.4.0-" revision "." (string-take commit 7)))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://github.com/oriansj/m2-planet")
-                      (commit commit)))
-                (file-name (git-file-name name version))
-                (sha256
-                 (base32
-                  "0yyc0fcbbxi9jqa1n76x0rwspdrwmc8g09jlmsw9c35nflrhmz8q"))))
-      (native-inputs
-       `(("mescc-tools" ,mescc-tools)))
-      (build-system gnu-build-system)
-      (arguments
-       `(#:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
-         #:tests? #f
-         #:phases (modify-phases %standard-phases
-                    (delete 'bootstrap)
-                    (delete 'configure))))
-      (synopsis "The PLAtform NEutral Transpiler")
-      (description
-       "M2-Planet, the PLAtform NEutral Transpiler, when combined with
+     `(#:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
+                          ,(string-append "CC=" (cc-for-target)))
+       #:tests? #f
+       #:phases (modify-phases %standard-phases
+                  (delete 'bootstrap)
+                  (delete 'configure))))
+    (synopsis "The PLAtform NEutral Transpiler")
+    (description
+     "M2-Planet, the PLAtform NEutral Transpiler, when combined with
 mescc-tools, compiles a subset of the C language into working binaries with
 introspective steps in between.  It is self-hosting and for bootstrapping it
 also has an implementation in the M1 macro assembly language.  M2-Planet is
 built as Phase-5 of the full source bootstrapping process and is capable of
 building GNU Mes.")
-      (home-page "https://github.com/oriansj/m2-planet")
-      (license gpl3+))))
+    (home-page "https://github.com/oriansj/m2-planet")
+    (license gpl3+)))
diff --git a/gnu/packages/messaging.scm b/gnu/packages/messaging.scm
index a7fed957a3..768642f119 100644
--- a/gnu/packages/messaging.scm
+++ b/gnu/packages/messaging.scm
@@ -3,13 +3,13 @@
 ;;; Copyright © 2014, 2017 Julien Lepiller <julien@lepiller.eu>
 ;;; 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, 2016, 2017, 2018, 2019, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; 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>
 ;;; Copyright © 2017 Mekeor Melire <mekeor.melire@gmail.com>
-;;; Copyright © 2017, 2018, 2020 Arun Isaac <arunisaac@systemreboot.net>
+;;; Copyright © 2017, 2018, 2020, 2021 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2017–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Theodoros Foradis <theodoros@foradis.org>
 ;;; Copyright © 2017, 2018, 2019 Rutger Helling <rhelling@mykolab.com>
@@ -29,6 +29,9 @@
 ;;; Copyright © 2020, 2021 Robert Karszniewicz <avoidr@posteo.de>
 ;;; Copyright © 2020 Giacomo Leidi <goodoldpaul@autistici.org>
 ;;; Copyright © 2021 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
+;;; Copyright © 2021 Vinicius Monego <monego@posteo.net>
+;;; Copyright © 2021 jgart <jgart@dismail.de>
+;;; Copyright © 2022 Aleksandr Vityazev <avityazev@posteo.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -58,6 +61,7 @@
   #:use-module (gnu packages bison)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages check)
+  #:use-module (gnu packages code)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages cpp)
   #:use-module (gnu packages crypto)
@@ -85,6 +89,8 @@
   #:use-module (gnu packages kerberos)
   #:use-module (gnu packages less)
   #:use-module (gnu packages libcanberra)
+  #:use-module (gnu packages libevent)
+  #:use-module (gnu packages libffi)
   #:use-module (gnu packages libidn)
   #:use-module (gnu packages libreoffice)
   #:use-module (gnu packages linux)
@@ -134,6 +140,7 @@
   #:use-module (guix build-system qt)
   #:use-module (guix build-system trivial)
   #:use-module (guix download)
+  #:use-module (guix gexp)
   #:use-module (guix git-download)
   #:use-module (guix hg-download)
   #:use-module ((guix licenses) #:prefix license:)
@@ -170,8 +177,7 @@
                  ;; Use absolute path of 'xdg-open' program.
                  (("xdg-open") xdg-open))))))))
     (inputs
-     `(("go-github-com-pkg-errors" ,go-github-com-pkg-errors)
-       ("xdg-utils" ,xdg-utils)))
+     (list go-github-com-pkg-errors xdg-utils))
     (home-page "https://roob.re/omemo-wget")
     (synopsis "Program to download and decrypt @code{aesgcm://} URLs")
     (description "OMEMO-wget is a tool to handle cryptographic URLs, generated
@@ -238,7 +244,7 @@ Its design goals are simplicity and stability.")
 (define-public libgnt
   (package
     (name "libgnt")
-    (version "2.14.1")
+    (version "2.14.3")
     (source
      (origin
        (method url-fetch)
@@ -246,7 +252,7 @@ Its design goals are simplicity and stability.")
         (string-append "mirror://sourceforge/pidgin/libgnt/"
                        version "/libgnt-" version ".tar.xz"))
        (sha256
-        (base32 "1n2bxg0ignn53c08cp69pj4sdg53kwlqn23rincyjmpr327fdhsy"))))
+        (base32 "08v14fjcx2wx6c573wllq015l6zc8qkpz8rrl6qhp7crf9zlbxap"))))
     (build-system meson-build-system)
     (outputs '("out" "doc"))
     (arguments
@@ -259,16 +265,14 @@ Its design goals are simplicity and stability.")
                (("'/usr'")
                 (string-append "'"
                                (assoc-ref inputs "ncurses")
-                               "'")))
-             #t))
+                               "'")))))
          (add-before 'configure 'patch-docbook-xml
            (lambda* (#:key inputs #:allow-other-keys)
              (with-directory-excursion "doc"
                (substitute* "libgnt-docs.xml"
                  (("http://www.oasis-open.org/docbook/xml/4.1.2/")
                   (string-append (assoc-ref inputs "docbook-xml")
-                                 "/xml/dtd/docbook/"))))
-             #t))
+                                 "/xml/dtd/docbook/"))))))
          (add-after 'install 'move-doc
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -276,8 +280,7 @@ Its design goals are simplicity and stability.")
                (mkdir-p (string-append doc "/share"))
                (rename-file
                 (string-append out "/share/gtk-doc")
-                (string-append doc "/share/gtk-doc"))
-               #t))))))
+                (string-append doc "/share/gtk-doc"))))))))
     (native-inputs
      `(("docbook-xml" ,docbook-xml-4.1.2)
        ("glib:bin" ,glib "bin")
@@ -285,7 +288,7 @@ Its design goals are simplicity and stability.")
        ("gtk-doc" ,gtk-doc)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (propagated-inputs
      `(("glib" ,glib)
        ("libxml" ,libxml2)
@@ -313,26 +316,25 @@ user interfaces in a fast and easy way.  It is based on GLib and ncurses.")
         (base32 "1s16cripy5w9k12534qb012iwc5m9qcjyrywgsziyn3kl3i0aa8h"))))
     (build-system gnu-build-system)
     (arguments
+     ;; 'test/manual/userconfig.h' contains definitions in lieu of
+     ;; declarations, hence '-fcommon'.
      `(#:configure-flags
-       (list
-        "--disable-static")
+       (list "--disable-static" "CFLAGS=-O2 -g -fcommon")
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-shebangs
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "protobufgen.sh"
                (("/bin/sh")
-                (string-append (assoc-ref inputs "bash")
-                               "/bin/sh")))
-             #t)))))
+                (search-input-file inputs "/bin/sh"))))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("bash" ,bash)
-       ("doxygen" ,doxygen)
-       ("libtool" ,libtool)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf
+           automake
+           bash
+           doxygen
+           libtool
+           perl
+           pkg-config))
     (inputs
      `(("curl" ,curl)
        ("expat" ,expat)
@@ -341,7 +343,7 @@ user interfaces in a fast and easy way.  It is based on GLib and ncurses.")
        ("openssl" ,openssl)
        ("zlib" ,zlib)))
     (propagated-inputs
-     `(("gnutls" ,gnutls)))
+     (list gnutls))
     (synopsis "Library for handling the protocol of Gadu-Gadu")
     (description "LibGadu is library for handling Gadu-Gadu instant messenger
 protocol.  The library is written in C and aims to be operating system and
@@ -376,11 +378,7 @@ environment independent.")
              (delete-file "Makefile.in")
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool perl pkg-config))
     (synopsis "SILC ToolKit")
     (description "SILC (Secure Internet Live Conferencing) is a modern and secure
 conferencing protocol.  It provides all the common conferencing services like
@@ -393,6 +391,46 @@ conferencing.")
       license:gpl2+
       license:bsd-2))))
 
+(define-public qxmpp
+  (package
+    (name "qxmpp")
+    (version "1.4.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/qxmpp-project/qxmpp")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1knpq1jkwk0lxdwczbmzf7qrjvlxba9yr40nbq9s5nqkcx6q1c3i"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:configure-flags (list "-DBUILD_EXAMPLES=false"
+                               "-DWITH_GSTREAMER=true")
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "ctest" "-E"
+                       (string-join ;; These tests use the network.
+                        (list "tst_qxmppiceconnection"
+                              "tst_qxmppcallmanager"
+                              "tst_qxmpptransfermanager")
+                        "|"))))))))
+    (native-inputs
+     (list pkg-config))
+    (inputs
+     (list gstreamer qtbase-5))
+    (home-page "https://github.com/qxmpp-project/qxmpp")
+    (synopsis "XMPP client and server library")
+    (description
+     "QXmpp is a XMPP client and server library written in C++ and uses the Qt
+framework.  It builds XMPP clients complying with the XMPP Compliance Suites
+2021 for IM and Advanced Mobile.")
+    (license license:lgpl2.1+)))
+
 (define-public meanwhile
   (package
     (name "meanwhile")
@@ -411,13 +449,9 @@ conferencing.")
         (base32 "1k1gvmx1ikm0y1mdmm495rzkb00pl170jfaf2dy0n5aiiknkk7q3"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("doxygen" ,doxygen)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake doxygen libtool pkg-config))
     (propagated-inputs
-     `(("glib" ,glib)))
+     (list glib))
     (synopsis "Library for Lotus Instant Messaging")
     (description "Meanwhile is a library for connecting to a LIM (Lotus Instant
 Messaging, formerly Lotus Sametime, formerly VPBuddy) community.  It uses a
@@ -453,19 +487,17 @@ TCP sessions from existing clients.")
                 "'CC', 'gcc'"))
              #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python-setuptools" ,python-setuptools)
-       ("python-sphinx" ,python-sphinx)))
+     (list pkg-config python-setuptools python-sphinx))
     (inputs
-     `(("python-mpd2" ,python-mpd2)
-       ("python-potr" ,python-potr)
-       ("python-pyasn1" ,python-pyasn1)
-       ("python-pyasn1-modules" ,python-pyasn1-modules)
-       ("python-pygments" ,python-pygments)
-       ("python-pyinotify" ,python-pyinotify)
-       ;("python" ,python)
-       ("python-qrcode" ,python-qrcode)
-       ("python-slixmpp" ,python-slixmpp)))
+     (list python-mpd2
+           python-potr
+           python-pyasn1
+           python-pyasn1-modules
+           python-pygments
+           python-pyinotify
+           ;("python" ,python)
+           python-qrcode
+           python-slixmpp))
     (synopsis "Console Jabber/XMPP Client")
     (description "Poezio is a free console XMPP client (the protocol on which
 the Jabber IM network is built).
@@ -494,11 +526,11 @@ powerful, standard and open protocol.")
         (search-patches "libotr-test-auth-fix.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("perl" ,perl)))                 ; for the test suite
+     (list perl))                 ; for the test suite
     (inputs
-     `(("libgpg-error" ,libgpg-error)))
+     (list libgpg-error))
     (propagated-inputs
-     `(("libgcrypt" ,libgcrypt)))    ; libotr headers include gcrypt.h
+     (list libgcrypt))    ; libotr headers include gcrypt.h
     (synopsis "Off-the-Record (OTR) Messaging Library and Toolkit")
     (description "OTR allows you to have private conversations over instant
 messaging by providing: (1) Encryption: No one else can read your instant
@@ -519,32 +551,99 @@ your private keys, no previous conversation is compromised.")
 
 (define-public libsignal-protocol-c
   (package
-  (name "libsignal-protocol-c")
-  (version "2.3.3")
-  (source (origin
-           (method git-fetch)
-           (uri (git-reference
-                  (url "https://github.com/WhisperSystems/libsignal-protocol-c")
-                  (commit (string-append "v" version))))
-           (file-name (git-file-name name version))
-           (sha256
-            (base32
-             "0z5p03vk15i6h870azfjgyfgxhv31q2vq6rfhnybrnkxq2wqzwhk"))))
-  (arguments
-   `(;; Required for proper linking and for tests to run.
-     #:configure-flags '("-DBUILD_SHARED_LIBS=on" "-DBUILD_TESTING=1")))
-  (build-system cmake-build-system)
-  (inputs `( ;; Required for tests:
-            ("check" ,check)
-            ("openssl" ,openssl)))
-  (native-inputs `(("pkg-config" ,pkg-config)))
-  (home-page "https://github.com/WhisperSystems/libsignal-protocol-c")
-  (synopsis "Implementation of a ratcheting forward secrecy protocol")
-  (description "libsignal-protocol-c is an implementation of a ratcheting
+   (name "libsignal-protocol-c")
+   (version "2.3.3")
+   (source (origin
+            (method git-fetch)
+            (uri (git-reference
+                   (url "https://github.com/WhisperSystems/libsignal-protocol-c")
+                   (commit (string-append "v" version))))
+            (file-name (git-file-name name version))
+            (sha256
+             (base32
+              "0z5p03vk15i6h870azfjgyfgxhv31q2vq6rfhnybrnkxq2wqzwhk"))))
+   (arguments
+    `(;; Required for proper linking and for tests to run.
+      #:configure-flags '("-DBUILD_SHARED_LIBS=on" "-DBUILD_TESTING=1")))
+   (build-system cmake-build-system)
+   (inputs (list ;; Required for tests:
+                 check openssl))
+   (native-inputs (list pkg-config))
+   (home-page "https://github.com/WhisperSystems/libsignal-protocol-c")
+   (synopsis "Implementation of a ratcheting forward secrecy protocol")
+   (description "libsignal-protocol-c is an implementation of a ratcheting
 forward secrecy protocol that works in synchronous and asynchronous
 messaging environments.  It can be used with messaging software to provide
 end-to-end encryption.")
-  (license license:gpl3+)))
+   (license license:gpl3+)))
+
+(define-public axc
+  (package
+    (name "axc")
+    (version "0.3.6")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/gkdr/axc")
+             (commit (string-append "v" version))))
+       (modules '((guix build utils)))
+       (snippet
+        `(begin
+           ;; Submodules
+           (delete-file-recursively "lib")))
+       (file-name
+        (git-file-name name version))
+       (sha256
+        (base32 "05sv7l6lk0xk4wb2bspc2sdpygrb1f0szzi82a1kyfm0fjz887b3"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:phases (modify-phases %standard-phases
+                  (replace 'configure
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      (let ((out (assoc-ref outputs "out")))
+                        (setenv "CC" "gcc")
+                        (setenv "PREFIX" out)))))
+       #:parallel-tests? #f))
+    (native-inputs (list cmocka pkg-config))
+    (inputs (list glib libgcrypt libsignal-protocol-c sqlite))
+    (synopsis "Client library for libsignal-protocol-c")
+    (description "This is a client library for @code{libsignal-protocol-c}.
+It implements the necessary interfaces using @code{libgcrypt} and
+@code{sqlite}.")
+    (home-page "https://github.com/gkdr/axc")
+    (license license:gpl3)))                  ;GPLv3-only, per license headers
+
+(define-public libomemo
+  (package
+    (name "libomemo")
+    (version "0.7.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/gkdr/libomemo")
+             (commit (string-append "v" version))))
+       (file-name
+        (git-file-name name version))
+       (sha256
+        (base32 "1q3vyj8zk3vm0a4v6w8qya5dhk2yw04bga8799a0zl6907nf122k"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:phases (modify-phases %standard-phases
+                  (replace 'configure
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      (let ((out (assoc-ref outputs "out")))
+                        (setenv "CC" "gcc")
+                        (setenv "PREFIX" out)))))
+       #:parallel-tests? #f))
+    (native-inputs (list cmocka pkg-config))
+    (inputs (list glib libgcrypt minixml sqlite))
+    (synopsis "OMEMO C library")
+    (description "This library implements @acronym{OMEMO, OMEMO Multi-End
+Message and Object Encryption} of XMPP (XEP-0384) in C.")
+    (home-page "https://github.com/gkdr/libomemo")
+    (license license:expat)))
 
 (define-public bitlbee
   (package
@@ -557,14 +656,10 @@ end-to-end encryption.")
               (sha256
                (base32 "0zhhcbcr59sx9h4maf8zamzv2waya7sbsl7w74gbyilvy93dw5cz"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ;; Note: Change to 'check' for versions > 3.6.
-                     ("check" ,check-0.12)))
-    (inputs `(("glib" ,glib)
-              ("libotr" ,libotr)
-              ("gnutls" ,gnutls)
-              ("python" ,python)
-              ("perl" ,perl)))
+    (native-inputs (list pkg-config
+                         ;; Note: Change to 'check' for versions > 3.6.
+                         check-0.12))
+    (inputs (list glib libotr gnutls python perl))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -643,14 +738,14 @@ identi.ca and status.net).")
              (let ((sh (which "sh")))
                (substitute* "autogen.sh" (("/bin/sh") sh))
                (setenv "CONFIG_SHELL" sh)))))))
-    (inputs `(("glib" ,glib)))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("autoconf" ,autoconf)
-                     ("automake" ,automake)
-                     ("texinfo" ,texinfo)
-                     ("libtool" ,libtool)
-                     ("bitlbee" ,bitlbee) ; needs bitlbee headers
-                     ("bash" ,bash)))
+    (inputs (list glib))
+    (native-inputs (list pkg-config
+                         autoconf
+                         automake
+                         texinfo
+                         libtool
+                         bitlbee ; needs bitlbee headers
+                         bash))
     (synopsis "Discord plugin for Bitlbee")
     (description "Bitlbee-discord is a plugin for Bitlbee which provides
 access to servers running the Discord protocol.")
@@ -694,11 +789,8 @@ access to servers running the Discord protocol.")
          #:make-flags (list "CC=gcc"
                             ,(string-append "PLUGIN_VERSION=" version))
          #:tests? #f))
-      (inputs `(("glib" ,glib)
-                ("json-glib" ,json-glib)
-                ("discount" ,discount)
-                ("pidgin" ,pidgin)))
-      (native-inputs `(("pkg-config" ,pkg-config)))
+      (inputs (list glib json-glib discount pidgin))
+      (native-inputs (list pkg-config))
       (synopsis "Purple plug-in to access Mattermost instant messaging")
       (description
        "Purple-Mattermost is a plug-in for Purple, the instant messaging library
@@ -709,15 +801,14 @@ used by Pidgin and Bitlbee, among others, to access
 (define-public hexchat
   (package
     (name "hexchat")
-    (version "2.14.3")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://dl.hexchat.net/hexchat/hexchat-"
-                                  version ".tar.xz"))
-              (patches (search-patches "hexchat-add-libera-chat.patch"))
-              (sha256
-               (base32
-                "10p829jm1r6kidkgf5lhqhyqc5mxdcq96q3zhadsckasvc9rs6lh"))))
+    (version "2.16.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://dl.hexchat.net/hexchat/hexchat-"
+                           version ".tar.xz"))
+       (sha256
+        (base32 "0dnwhb2gi08i5v79vq0y2izs89wyk3by96jv99kgkidjic3k2bj1"))))
     (build-system meson-build-system)
     (native-inputs `(("gettext" ,gettext-minimal)
                      ("glib:bin" ,glib "bin")       ;need glib-genmarshal
@@ -728,14 +819,16 @@ used by Pidgin and Bitlbee, among others, to access
               ("enchant" ,enchant)
               ("gtk" ,gtk+-2)
               ("libcanberra" ,libcanberra)
-              ("libnotify" ,libnotify)
-              ("libproxy" ,libproxy)
               ("openssl" ,openssl)
 
               ;; Bindings for add-on scripts.
               ("luajit" ,luajit)
               ("perl-xml-parser" ,perl-xml-parser)
-              ("python-2" ,python-2)))
+              ("python" ,python)
+              ("python-cffi" ,python-cffi)
+
+              ;; For the ensuing WRAP-PROGRAM.
+              ("bash-minimal" ,bash-minimal)))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -747,8 +840,15 @@ used by Pidgin and Bitlbee, among others, to access
              ;; just skip this code.
              (substitute* "meson_post_install.py"
                (("if 'DESTDIR' not in os.environ:")
-                 "if False:"))
-             #t)))))
+                "if False:"))))
+         (add-after 'install 'wrap-program
+           ;; Let it ‘initialize the Python-CFFI embedding logic’ at run time.
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin")))
+               (wrap-program (string-append bin "/hexchat")
+                 `("GUIX_PYTHONPATH" ":" prefix
+                   (,(getenv "GUIX_PYTHONPATH"))))))))))
     (synopsis "Graphical IRC client")
     (description
      "HexChat lets you connect to multiple IRC networks at once.  The main
@@ -773,10 +873,7 @@ dictionaries.  HexChat can be extended with multiple addons.")
               (patches (search-patches "ngircd-handle-zombies.patch"))))
     (build-system gnu-build-system)
     ;; Needed for the test suite.
-    (native-inputs `(("procps" ,procps)
-                     ("expect" ,expect)
-                     ("inetutils" ,inetutils)
-                     ("openssl" ,openssl)))
+    (native-inputs (list procps expect inetutils openssl))
     ;; XXX Add libident.
     (inputs `(("zlib" ,zlib)
               ("libwrap" ,tcp-wrappers)
@@ -894,8 +991,7 @@ authentication.")
        ("tcl" ,tcl)
        ("tk" ,tk)))
     (propagated-inputs
-     `(("glib" ,glib)
-       ("gtk+" ,gtk+-2)))
+     (list glib gtk+-2))
     (arguments
      `(#:configure-flags
        (list
@@ -956,17 +1052,15 @@ many popular chat protocols.")
         (base32 "1i5s9rrgbyss9rszq6c6y53hwqyw1k86s40cpsfx5ccl9bprxdgl"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list gettext-minimal intltool pkg-config))
     (inputs
-     `(("glib" ,glib)
-       ("gtk+" ,gtk+-2)
-       ("libgcrypt" ,libgcrypt)
-       ("libgpg-error" ,libgpg-error)
-       ("libotr" ,libotr)
-       ("perl" ,perl)
-       ("pidgin" ,pidgin)))
+     (list glib
+           gtk+-2
+           libgcrypt
+           libgpg-error
+           libotr
+           perl
+           pidgin))
     (home-page "https://otr.cypherpunks.ca/")
     (synopsis "Off-the-Record Messaging plugin for Pidgin")
     (description "Pidgin-OTR is a plugin that adds support for OTR to the Pidgin
@@ -1015,12 +1109,12 @@ control of your private keys, no previous conversation is compromised.")
        ("googletest-source" ,(package-source googletest))
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("cyrus-sasl" ,cyrus-sasl)
-       ("icu4c" ,icu4c)
-       ("openssl" ,openssl)
-       ("perl" ,perl)
-       ("python" ,python)
-       ("zlib" ,zlib)))
+     (list cyrus-sasl
+           icu4c
+           openssl
+           perl
+           python
+           zlib))
     (home-page "https://wiki.znc.in/ZNC")
     (synopsis "IRC network bouncer")
     (description "ZNC is an @dfn{IRC network bouncer} or @dfn{BNC}.  It can
@@ -1032,25 +1126,25 @@ simultaneously and therefore appear under the same nickname on IRC.")
 (define-public python-nbxmpp
   (package
     (name "python-nbxmpp")
-    (version "2.0.2")
+    (version "2.0.4")
     (source
      (origin
        (method url-fetch)
        (uri
         (pypi-uri "nbxmpp" version))
        (sha256
-        (base32 "1482fva70i01w60fk70c0fhqmqgzi1fb4xflllz2v6c8mdqkd1m3"))))
+        (base32 "1s2phiipq7ks8vrd93p96dzd5wgmgg8q9h2rxsnh2gg7iy06gj9c"))))
     (build-system python-build-system)
     (native-inputs
-     `(("glib:bin" ,glib "bin")))
+     (list `(,glib "bin")))
     (inputs
-     `(("glib" ,glib)
-       ("glib-networking" ,glib-networking)
-       ("libsoup" ,libsoup)
-       ("python-gssapi" ,python-gssapi)
-       ("python-idna" ,python-idna)
-       ("python-precis-i18n" ,python-precis-i18n)
-       ("python-pygobject" ,python-pygobject)))
+     (list glib
+           glib-networking
+           libsoup-minimal-2
+           python-gssapi
+           python-idna
+           python-precis-i18n
+           python-pygobject))
     (synopsis "Non-blocking XMPP Module")
     (description "Python-nbxmpp is a Python library that provides a way for
 Python applications to use the XMPP network.  This library was initially a fork
@@ -1061,7 +1155,7 @@ of xmpppy.")
 (define-public gajim
   (package
     (name "gajim")
-    (version "1.3.2")
+    (version "1.3.3")
     (source
      (origin
        (method url-fetch)
@@ -1070,7 +1164,7 @@ of xmpppy.")
                        (version-major+minor version)
                        "/gajim-" version ".tar.gz"))
        (sha256
-        (base32 "1vjzv8zg9s393xw81klcgbkn4h6j2blzla9iil5kqfrw7wmldskh"))
+        (base32 "1337qkpcv7j0fgws9scnk82mn2l7s17060vmrbh3ihinmxmbxg6x"))
        (patches (search-patches "gajim-honour-GAJIM_PLUGIN_PATH.patch"))))
     (build-system python-build-system)
     (arguments
@@ -1086,11 +1180,11 @@ of xmpppy.")
        (modify-phases %standard-phases
          (add-after 'unpack 'disable-failing-tests
            (lambda _
+             ;; XXX Gajim builds fine on some (my) machines but fails elsewhere:
              ;; ModuleNotFoundError: No module named 'gajim.gui.emoji_data'
              ;; https://dev.gajim.org/gajim/gajim/-/issues/10478
              (delete-file "test/lib/gajim_mocks.py")
-             (delete-file "test/unit/test_gui_interface.py")
-             #t))
+             (delete-file "test/unit/test_gui_interface.py")))
          (replace 'check
            (lambda _
              ;; Tests require a running X server.
@@ -1098,8 +1192,11 @@ of xmpppy.")
              (setenv "DISPLAY" ":1")
              ;; For missing '/etc/machine-id'.
              (setenv "DBUS_FATAL_WARNINGS" "0")
-             (invoke "dbus-launch" "python" "./setup.py" "test")
-             #t))
+             (invoke "dbus-launch" "python" "./setup.py" "test")))
+         ;; Loading gajim_remote require running session bus,
+         ;; which in-turn requires running elogind for XDG_RUNTIME_DIR;
+         ;; neither of which are possible inside build environment.
+         (delete 'sanity-check)
          (add-after 'install 'glib-or-gtk-compile-schemas
            (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-compile-schemas))
          (add-after 'install 'glib-or-gtk-wrap
@@ -1115,8 +1212,7 @@ of xmpppy.")
                     (wrap-program file
                       `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path))
                       `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path)))))
-                '("gajim" "gajim-remote" "gajim-history-manager")))
-             #t)))))
+                '("gajim" "gajim-remote" "gajim-history-manager"))))))))
     (native-search-paths
      (list
       (search-path-specification
@@ -1127,7 +1223,7 @@ of xmpppy.")
          "share/gajim/plugins")))
       ;; Gajim needs to use the propagated inputs of its plugins.
       (search-path-specification
-       (variable "PYTHONPATH")
+       (variable "GUIX_PYTHONPATH")
        (files
         (list
          (string-append
@@ -1135,7 +1231,7 @@ of xmpppy.")
           ;; FIXME: Cannot use this expression as it would
           ;; introduce a circular dependency at the top level.
           ;; (version-major+minor (package-version python))
-          "3.8"
+          "3.9"
           "/site-packages"))))))
     (native-inputs
      `(("gettext" ,gettext-minimal)
@@ -1159,11 +1255,13 @@ of xmpppy.")
        ("gst-plugins-base" ,gst-plugins-base)
        ("gtk+" ,gtk+)
        ("gupnp-igd" ,gupnp-igd)
+       ("libnice" ,libnice)
        ("libsecret" ,libsecret)
        ("libsoup" ,libsoup)
        ("libxss" ,libxscrnsaver)
        ("network-manager" ,network-manager)
        ("python-css-parser" ,python-css-parser)
+       ("python-dbus" ,python-dbus)
        ("python-keyring" ,python-keyring)
        ("python-nbxmpp" ,python-nbxmpp)
        ("python-packaging" ,python-packaging)
@@ -1173,7 +1271,7 @@ of xmpppy.")
        ("python-pygobject" ,python-pygobject)
        ("python-pyopenssl" ,python-pyopenssl)))
     (propagated-inputs
-     `(("dconf" ,dconf)))
+     (list dconf))
     (synopsis "Fully-featured XMPP client")
     (description "Gajim aims to be an easy to use and fully-featured XMPP chat
 client.  It is extensible via plugins, supports end-to-end encryption (OMEMO
@@ -1207,10 +1305,8 @@ and OpenPGP) and available in 29 languages.")
            (copy-recursively source share)
            #t))))
     (propagated-inputs
-     `(("python-axolotl" ,python-axolotl)
-       ("python-axolotl-curve25519" ,python-axolotl-curve25519)
-       ("python-cryptography" ,python-cryptography)
-       ("python-qrcode" ,python-qrcode)))
+     (list python-axolotl python-axolotl-curve25519 python-cryptography
+           python-qrcode))
     (synopsis "Gajim OMEMO plugin")
     (description "Gajim-OMEMO is a plugin that adds support for the OMEMO
 Encryption to Gajim.  OMEMO is an XMPP Extension Protocol (XEP) for secure
@@ -1245,9 +1341,7 @@ multi-client end-to-end encryption.")
            (copy-recursively source share)
            #t))))
     (propagated-inputs
-     `(("python-cryptography" ,python-cryptography)
-       ("python-gnupg" ,python-gnupg)
-       ("python-gpg" ,python-gpg)))
+     (list python-cryptography python-gnupg python-gpg))
     (synopsis "Gajim OpenPGP plugin")
     (description "Gajim-OpenPGP is a plugin that adds support for the OpenPGP
 Encryption to Gajim.")
@@ -1257,7 +1351,7 @@ Encryption to Gajim.")
 (define-public dino
   (package
     (name "dino")
-    (version "0.2.1")
+    (version "0.2.2")
     (source
      (origin
        (method url-fetch)
@@ -1265,7 +1359,7 @@ Encryption to Gajim.")
         (string-append "https://github.com/dino/dino/releases/download/v"
                        version "/dino-" version ".tar.gz"))
        (sha256
-        (base32 "13rk8b0sj35az32c0ii173g9ww231awmyb4jlk56jy38hpyp7x1g"))))
+        (base32 "0r5qn9k88d5rh8zzj9gs3bk3dsm795r0pgxs3kawyrsrqr8ny1ry"))))
     (build-system cmake-build-system)
     (outputs '("out" "debug"))
     (arguments
@@ -1300,7 +1394,7 @@ Encryption to Gajim.")
      ;; NOTE: Commented-out lines are to be enabled in v0.3.0.
      `(("atk" ,atk)
        ("cairo" ,cairo)
-       ("gdk-pixbuf" ,gdk-pixbuf+svg)
+       ("librsvg" ,librsvg)
        ("glib" ,glib)
        ("glib-networking" ,glib-networking)
        ("gpgme" ,gpgme)
@@ -1316,7 +1410,7 @@ Encryption to Gajim.")
        ("libgee" ,libgee)
        ("libnice" ,libnice)
        ("libsignal-protocol-c" ,libsignal-protocol-c)
-       ("libsoup" ,libsoup)
+       ("libsoup" ,libsoup-minimal-2)
        ;;("libsrtp" ,libsrtp)             ;for calls support
        ("pango" ,pango)
        ("qrencode" ,qrencode)
@@ -1332,14 +1426,14 @@ default.")
 (define-public prosody
   (package
     (name "prosody")
-    (version "0.11.9")
+    (version "0.11.10")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://prosody.im/downloads/source/"
                                   "prosody-" version ".tar.gz"))
               (sha256
                (base32
-                "02gzvsaq0l5lx608sfh7hfz14s6yfsr4sr4kzcsqd1cxljp35h6c"))))
+                "1q84s9cq7cgzd295qxa2iy0r3vd3v3chbck62bdx3pd6skk19my6"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ;tests require "busted"
@@ -1355,16 +1449,14 @@ default.")
              ;; The configure script aborts when it encounters unexpected
              ;; arguments.  Make it more tolerant.
              (substitute* "configure"
-               (("exit 1") ""))
-             #t))
+               (("exit 1") ""))))
          (add-after 'unpack 'fix-makefile
            (lambda _
              (substitute* "GNUmakefile"
                ;; prosodyctl needs to read the configuration file.
                (("^INSTALLEDCONFIG =.*") "INSTALLEDCONFIG = /etc/prosody\n")
                ;; prosodyctl needs a place to put auto-generated certificates.
-               (("^INSTALLEDDATA =.*") "INSTALLEDDATA = /var/lib/prosody\n"))
-             #t))
+               (("^INSTALLEDDATA =.*") "INSTALLEDDATA = /var/lib/prosody\n"))))
          (add-after 'install 'wrap-programs
            (lambda* (#:key inputs outputs #:allow-other-keys)
              ;; Make sure all executables in "bin" find the required Lua
@@ -1400,17 +1492,16 @@ default.")
                              `("LUA_PATH"  ";" = (,lua-path))
                              `("LUA_CPATH" ";" = (,lua-cpath))
                              `("PATH" ":" prefix ,path)))
-                         (find-files bin ".*"))
-               #t))))))
+                         (find-files bin ".*"))))))))
     (inputs
-     `(("libidn" ,libidn)
-       ("openssl" ,openssl)
-       ("lua" ,lua-5.2)
-       ("lua5.2-bitop" ,lua5.2-bitop)
-       ("lua5.2-expat" ,lua5.2-expat)
-       ("lua5.2-socket" ,lua5.2-socket)
-       ("lua5.2-filesystem" ,lua5.2-filesystem)
-       ("lua5.2-sec" ,lua5.2-sec)))
+     (list libidn
+           openssl
+           lua-5.2
+           lua5.2-bitop
+           lua5.2-expat
+           lua5.2-socket
+           lua5.2-filesystem
+           lua5.2-sec))
     (home-page "https://prosody.im/")
     (synopsis "Jabber (XMPP) server")
     (description "Prosody is a modern XMPP communication server.  It aims to
@@ -1504,15 +1595,9 @@ and prevent message loss.")
       (build-system gnu-build-system)
       (arguments `(#:tests? #f)) ; FIXME: tests hang, some fail.
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("libtool" ,libtool)
-         ("check" ,check)
-         ("pkg-config" ,pkg-config)))
+       (list autoconf automake libtool check pkg-config))
       (inputs
-       `(("libsodium" ,libsodium)
-         ("opus" ,opus)
-         ("libvpx" ,libvpx)))
+       (list libsodium opus libvpx))
       (synopsis "Library for the Tox encrypted messenger protocol")
       (description
        "C library implementation of the Tox encrypted messenger protocol.")
@@ -1541,11 +1626,9 @@ and prevent message loss.")
                      ; for now.
     (build-system cmake-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (propagated-inputs
-     `(("libsodium" ,libsodium)
-       ("opus" ,opus)
-       ("libvpx" ,libvpx)))
+     (list libsodium opus libvpx))
     (home-page "https://tox.chat")
     (synopsis "Library for the Tox encrypted messenger protocol")
     (description
@@ -1577,16 +1660,15 @@ messenger protocol.")
           (lambda* (#:key inputs outputs #:allow-other-keys)
             (substitute* "../source/src/xlib/gtk.c"
                          (("libgtk-3.so")
-                         (string-append (assoc-ref inputs "gtk+")
-                                        "/lib/libgtk-3.so")))))
+                          (search-input-file inputs "/lib/libgtk-3.so")))))
         (add-after 'install 'wrap-program
           (lambda* (#:key inputs outputs #:allow-other-keys)
             (wrap-program (string-append (assoc-ref outputs "out")
                                          "/bin/utox")
             ;; For GtkFileChooserDialog.
-            `("GSETTINGS_SCHEMA_DIR" =
-              (,(string-append (assoc-ref inputs "gtk+")
-                               "/share/glib-2.0/schemas")))))))))
+             `("GSETTINGS_SCHEMA_DIR" =
+               (,(string-append (assoc-ref inputs "gtk+")
+                                "/share/glib-2.0/schemas")))))))))
    (inputs
     `(("dbus" ,dbus)
       ("filteraudio" ,filteraudio)
@@ -1601,8 +1683,7 @@ messenger protocol.")
       ("openal" ,openal)
       ("v4l-utils" ,v4l-utils)))
    (native-inputs
-    `(("check" ,check)
-      ("pkg-config" ,pkg-config)))
+    (list check pkg-config))
    (synopsis "Lightweight Tox client")
    (description
     "uTox is a lightweight Tox client.  Tox is a distributed and secure
@@ -1613,7 +1694,7 @@ instant messenger with audio and video chat capabilities.")
 (define-public qtox
   (package
     (name "qtox")
-    (version "1.17.3")
+    (version "1.17.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/qTox/qTox/releases"
@@ -1621,54 +1702,51 @@ instant messenger with audio and video chat capabilities.")
                                   "/v" version ".tar.gz"))
               (sha256
                (base32
-                "11n7si9wdpf80iwkvbspp14dh5jrwm7hxkj8vqhn5pkc48c5bh9j"))
+                "086hvm0q2vl2lq8zlp8s9sivlic6sg7ga5ixz01hbsyrashvil63"))
               (file-name (string-append name "-" version ".tar.gz"))))
     (build-system cmake-build-system)
     (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-reproducibility-issues
-           (lambda _
-             (substitute* "src/main.cpp"
-               (("__DATE__") "\"\"")
-               (("__TIME__") "\"\"")
-               (("TIMESTAMP") "\"\""))
-             #t))
-         (add-after 'unpack 'disable-network-tests
-           (lambda _
-             ;; These tests require network access.
-             (substitute* "cmake/Testing.cmake"
-               (("auto_test\\(core core\\)") "# auto_test(core core)")
-               (("auto_test\\(net bsu\\)") "# auto_test(net bsu)"))
-             #t))
-         ;; Ensure that icons are found at runtime.
-         (add-after 'install 'wrap-executable
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out")))
-               (wrap-program (string-append out "/bin/qtox")
-                 `("QT_PLUGIN_PATH" prefix
-                   ,(list (string-append (assoc-ref inputs "qtsvg")
-                                         "/lib/qt5/plugins/"))))))))))
-    (inputs
-     `(("ffmpeg" ,ffmpeg)
-       ("filteraudio" ,filteraudio)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+-2)
-       ("libsodium" ,libsodium)
-       ("c-toxcore" ,c-toxcore)
-       ("libvpx" ,libvpx)
-       ("libxscrnsaver" ,libxscrnsaver)
-       ("libx11" ,libx11)
-       ("libexif" ,libexif)
-       ("sqlite" ,sqlite)
-       ("openal" ,openal)
-       ("qrencode" ,qrencode)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("sqlcipher" ,sqlcipher)))
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'fix-reproducibility-issues
+                 (lambda _
+                   (substitute* "src/main.cpp"
+                     (("__DATE__") "\"\"")
+                     (("__TIME__") "\"\"")
+                     (("TIMESTAMP") "\"\""))))
+               (add-after 'unpack 'disable-network-tests
+                 (lambda _
+                   ;; These tests require network access.
+                   (substitute* "cmake/Testing.cmake"
+                     (("auto_test\\(core core\\)") "# auto_test(core core)")
+                     (("auto_test\\(net bsu\\)") "# auto_test(net bsu)"))))
+               ;; Ensure that icons are found at runtime.
+               (add-after 'install 'wrap-executable
+                 (lambda* (#:key inputs outputs #:allow-other-keys)
+                   (let ((out (assoc-ref outputs "out")))
+                     (wrap-program (string-append out "/bin/qtox")
+                       `("QT_PLUGIN_PATH" prefix
+                         ,(list (search-input-directory
+                                 inputs "lib/qt5/plugins/"))))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qmake" ,qttools)))
+     (list pkg-config qttools))
+    (inputs
+     (list ffmpeg
+           filteraudio
+           glib
+           gtk+-2
+           libsodium
+           c-toxcore
+           libvpx
+           libxscrnsaver
+           libx11
+           libexif
+           sqlite
+           openal
+           qrencode
+           qtbase-5
+           qtsvg
+           sqlcipher))
     (home-page "https://qtox.github.io/")
     (synopsis "Tox chat client using Qt")
     (description "qTox is a Tox client that follows the Tox design
@@ -1690,7 +1768,7 @@ connect with friends and family without anyone else listening in.")
          "1d3jhnj8rgzxyxjwfa22vh45qwzjvxw1qh8fz6b7nfkj3zvk9jvf"))))
     (build-system gnu-build-system)
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (home-page "https://ytalk.ourproject.org")
     (synopsis "Multi-user chat program")
     (description "Ytalk is a replacement for the BSD talk program.  Its main
@@ -1712,11 +1790,9 @@ with several different talk daemons at the same time.")
         (base32 "1jgrd07qr9jvbb5hcmhrqz4w4lvwc51m30jls1fgxf1f5az6455f"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libidn" ,libidn)
-       ("gnutls" ,gnutls)
-       ("zlib" ,zlib)))
+     (list libidn gnutls zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "Portable high-level Jabber/XMPP library for C++")
     (description
      "gloox is a full-featured Jabber/XMPP client library,
@@ -1741,10 +1817,9 @@ into existing applications.")
          "0vsjclglkwgbyd9m5ad642fyysxw2x725nhq4r2m9pvqaq6s5yf2"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (inputs
-     `(("perl-curses" ,perl-curses)
-       ("perl-io-socket-ssl" ,perl-io-socket-ssl)))
+     (list perl-curses perl-io-socket-ssl))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1816,9 +1891,7 @@ for @uref{https://torproject.org,tor} router) and many more.")
                 "14q89fxap05ajkfn20rnhc6b1h4i3i2adyr7y6hs5zqwb2lcmc1p"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("perl" ,perl)
-       ("netcat" ,netcat)
-       ("procps" ,procps)))
+     (list perl netcat procps))
     (arguments
      `(#:make-flags
        (list "CC=gcc"
@@ -1870,10 +1943,9 @@ including psyced.")
        ("krb5" ,mit-krb5)
        ("libidn" ,libidn)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("check" ,check)
-       ("glib" ,glib "bin")             ; gtester
-       ("gtk-doc" ,gtk-doc)))
+     (list pkg-config check
+           `(,glib "bin") ; gtester
+           gtk-doc))
     (home-page "https://mcabber.com/")
     (description
      "Loudmouth is a lightweight and easy-to-use C library for programming
@@ -1904,14 +1976,14 @@ protocol allows.")
         "--enable-enchant"
         "--enable-aspell")))
     (inputs
-     `(("gpgme" ,gpgme)
-       ("libotr" ,libotr)
-       ("aspell" ,aspell)
-       ("enchant" ,enchant-1.6)
-       ("libidn" ,libidn)
-       ("glib" ,glib)
-       ("ncurses" ,ncurses)
-       ("loudmouth" ,loudmouth)))
+     (list gpgme
+           libotr
+           aspell
+           enchant-1.6
+           libidn
+           glib
+           ncurses
+           loudmouth))
     (native-inputs
      `(("perl" ,perl)
        ("pkg-config" ,pkg-config)
@@ -1938,7 +2010,9 @@ support, and more.")
                 "1rmrn7a1bb7vm26yaklrvx008a9qhwc32s57dwrlf40lv9gffwny"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:phases
+     `(#:configure-flags
+       (list "CFLAGS=-fcommon")
+       #:phases
        (modify-phases %standard-phases
          ;; For 'system' commands in Scheme code.
          (add-after 'install 'wrap-program
@@ -1954,17 +2028,14 @@ support, and more.")
                          (list bash coreutils less))))
                #t))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ("texinfo" ,texinfo)))
+     (list autoconf automake pkg-config texinfo))
     (inputs
-     `(("bash" ,bash)
-       ("glib" ,glib)
-       ("guile" ,guile-2.0)
-       ("less" ,less)
-       ("loudmouth" ,loudmouth)
-       ("readline" ,readline)))
+     (list bash
+           glib
+           guile-2.0
+           less
+           loudmouth
+           readline))
     (synopsis "Extensible console-based Jabber client")
     (description
      "GNU Freetalk is a command-line Jabber/XMPP chat client.  It notably uses
@@ -1998,13 +2069,9 @@ is also scriptable and extensible via Guile.")
                (("'\\^xmpp_'") "'.'"))
              #t)))))
     (inputs
-     `(("expat" ,expat)
-       ("openssl" ,openssl)))
+     (list expat openssl))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (synopsis "C library for writing XMPP clients")
     (description "Libmesode is a fork of libstrophe for use with Profanity
 XMPP Client.  In particular, libmesode provides extra TLS functionality such as
@@ -2037,13 +2104,9 @@ manual SSL certificate verification.")
                (("'\\^xmpp_'") "'.'"))
              #t)))))
     (inputs
-     `(("expat" ,expat)
-       ("openssl" ,openssl)))
+     (list expat openssl))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (synopsis "C library for writing XMPP clients")
     (description "Libstrophe is a minimal XMPP library written in C.  It has
 almost no external dependencies, only an XML parsing library (expat or libxml
@@ -2055,7 +2118,7 @@ are both supported).")
 (define-public profanity
   (package
     (name "profanity")
-    (version "0.10.0")
+    (version "0.11.1")
     (source
      (origin
        (method url-fetch)
@@ -2064,7 +2127,7 @@ are both supported).")
                        version ".tar.gz"))
        (sha256
         (base32
-         "137z77514fgj2dk13d12g4jrn6gs5k85nwrk1r1kiv7rj0jy61aa"))))
+         "0idx0a5g077a57q462w01m0h8i4vyvabzlj87p8527wpqbv4s6vg"))))
     (build-system glib-or-gtk-build-system)
     (arguments
      `(#:configure-flags
@@ -2079,12 +2142,12 @@ are both supported).")
         "--enable-omemo"
         "--enable-icons-and-clipboard")))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("autoconf-archive" ,autoconf-archive)
-       ("automake" ,automake)
-       ("cmocka" ,cmocka)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf
+           autoconf-archive
+           automake
+           cmocka
+           libtool
+           pkg-config))
     (inputs
      `(("curl" ,curl)
        ("expat" ,expat)
@@ -2122,7 +2185,7 @@ using ncurses and libmesode, inspired by Irssi.")
          "0b9wa0h3xc31wpqlvgxgnvqp5wgx3kwsf5s9432m5cj8ycx6zcmv"))))
     (build-system gnu-build-system)
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (arguments
      `(#:configure-flags
        (list (string-append "--libdir="
@@ -2174,21 +2237,21 @@ building the IRC clients and bots.")
              (setenv "ENABLE_PYTHON" "1")
              #t)))))
     (inputs
-     `(("c-toxcore" ,c-toxcore)
-       ("curl" ,curl)
-       ("freealut" ,freealut)
-       ("gdk-pixbuf" ,gdk-pixbuf)       ; for libnotify.pc
-       ("libconfig" ,libconfig)
-       ("libnotify" ,libnotify)
-       ("libpng" ,libpng)
-       ("libvpx" ,libvpx)
-       ("libx11" ,libx11)
-       ("ncurses" ,ncurses)
-       ("openal" ,openal)
-       ("python" ,python)
-       ("qrencode" ,qrencode)))
+     (list c-toxcore
+           curl
+           freealut
+           gdk-pixbuf ; for libnotify.pc
+           libconfig
+           libnotify
+           libpng
+           libvpx
+           libx11
+           ncurses
+           openal
+           python
+           qrencode))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/JFreegman/toxic")
     (synopsis "Tox chat client using ncurses")
     (description "Toxic is a console-based instant messaging client, using
@@ -2211,8 +2274,7 @@ notifications, and Python scripting support.")
         (base32 "0gkwr3yw6k2m0j8cc085b5p2q788rf5nhp1p5hc5d55pc7mci2qs"))))
     (build-system cmake-build-system)
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtmultimedia" ,qtmultimedia)))
+     (list qtbase-5 qtmultimedia))
     (arguments
      `(#:configure-flags (list "-DBUILD_SHARED_LIBS=ON")
        #:tests? #f))                    ; no tests
@@ -2227,7 +2289,7 @@ QMatrixClient project.")
 (define-public mtxclient
   (package
     (name "mtxclient")
-    (version "0.5.1")
+    (version "0.6.1")
     (source
      (origin
        (method git-fetch)
@@ -2236,7 +2298,7 @@ QMatrixClient project.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1xznfx2bhw0ahwmkxm0rs05vz05ijk5k4190rj6qp3bvb9byiajh"))))
+        (base32 "1a3ki45rf1fm7y4b74li76aqd4qc4y5ga5r163s0cwcpj9mp8c45"))))
     (arguments
      `(#:configure-flags
        (list
@@ -2247,21 +2309,22 @@ QMatrixClient project.")
          (add-before 'configure 'disable-network-tests
            (lambda _
              (substitute* "CMakeLists.txt"
-               (("add_test\\((BasicConnectivity|ClientAPI|MediaAPI|Encryption|Pushrules)")
-                "# add_test"))
-             #t)))))
+               (("add_test\\((BasicConnectivity|ClientAPI|Devices|MediaAPI|Encryption|Pushrules)")
+                "# add_test")))))))
     (build-system cmake-build-system)
     (inputs
-     `(("boost" ,boost)
-       ("json-modern-cxx" ,json-modern-cxx)
-       ("libolm" ,libolm)
-       ("libsodium" ,libsodium)
-       ("openssl" ,openssl)
-       ("spdlog" ,spdlog)
-       ("zlib" ,zlib)))
+     (list boost
+           coeurl
+           curl
+           json-modern-cxx
+           libevent
+           libolm
+           libsodium
+           openssl
+           spdlog
+           zlib))
     (native-inputs
-     `(("googletest" ,googletest)
-       ("pkg-config" ,pkg-config)))
+     (list googletest pkg-config))
     (home-page "https://github.com/Nheko-Reborn/mtxclient")
     (synopsis "Client API library for the Matrix protocol")
     (description "@code{mtxclient} is a C++ library that implements client API
@@ -2271,7 +2334,7 @@ for the Matrix protocol.  It is built on to of @code{Boost.Asio}.")
 (define-public nheko
   (package
     (name "nheko")
-    (version "0.8.2")
+    (version "0.9.0")
     (source
      (origin
        (method git-fetch)
@@ -2280,80 +2343,81 @@ for the Matrix protocol.  It is built on to of @code{Boost.Asio}.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0362hkbprc6jqlgmvzwxyvify4b1ldjakyqdz55m25xsypbpv2f3"))
+        (base32 "1akhnngxkxbjwjkg5ispl6j5s2ylbcj92r3zxqqry4gbfxbjpx8k"))
        (modules '((guix build utils)))
        (snippet
         '(begin
            (delete-file-recursively "third_party")))))
     (arguments
-     `(#:tests? #f                      ;no test target
-       #:configure-flags
-       '("-DCMAKE_BUILD_TYPE=Release"
-         "-DBUILD_DOCS=ON"
-         ;; Fix required because we are using a static SingleApplication
-         "-DCMAKE_CXX_FLAGS= \"-DQAPPLICATION_CLASS=QApplication\" "
-         ;; Compile Qml will make Nheko faster, but you will need to recompile
-         ;; it, when you update Qt.  That's fine for us.
-         "-DCOMPILE_QML=ON")
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'unbundle-dependencies
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let ((single-app (assoc-ref inputs "single-application")))
-               (substitute* "CMakeLists.txt"
-                 ;; Remove include and source dirs,replace with the correct one
-                 (("third_party/blurhash/blurhash.cpp") "")
-                 (("third_party/cpp-httplib-0.5.12")
-                  (string-append "\"" single-app "/include\""))
-                 (("add_subdirectory.*third_party/SingleApplication.*") "")
-                 ;; Link using the correct static/shared libs
-                 (("SingleApplication::SingleApplication")
-                  (string-append
-                   ;; Dynamic libraries
-                   "httplib" "\n" "blurhash" "\n"
-                   ;; Static library
-                   single-app "/lib/libSingleApplication.a"))))))
-         (add-after 'unpack 'fix-determinism
-           (lambda _
-             ;; Make Qt deterministic.
-             (setenv "QT_RCC_SOURCE_DATE_OVERRIDE" "1")))
-         (add-after 'install 'wrap-program
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out"))
-                   (gst-plugin-path (getenv "GST_PLUGIN_SYSTEM_PATH")))
-               (wrap-program (string-append out "/bin/nheko")
-                 `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path)))))))))
+     (list
+      #:tests? #f                       ;no test target
+      #:configure-flags
+      #~(list "-DCMAKE_BUILD_TYPE=Release"
+              "-DBUILD_DOCS=ON"
+              ;; Fix required because we are using a static SingleApplication
+              "-DCMAKE_CXX_FLAGS= \"-DQAPPLICATION_CLASS=QApplication\" "
+              ;; Compile Qml will make Nheko faster, but you will need to recompile
+              ;; it, when you update Qt.  That's fine for us.
+              "-DCOMPILE_QML=ON")
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'unbundle-dependencies
+            (lambda _
+              (let ((single-app #$(this-package-input "single-application-qt5")))
+                (substitute* "CMakeLists.txt"
+                  ;; Remove include and source dirs,replace with the correct one
+                  (("third_party/blurhash/blurhash.cpp") "")
+                  (("third_party/cpp-httplib-0.5.12")
+                   (string-append "\"" single-app "/include\""))
+                  (("add_subdirectory.*third_party/SingleApplication.*") "")
+                  ;; Link using the correct static/shared libs
+                  (("SingleApplication::SingleApplication")
+                   (string-append
+                    ;; Dynamic libraries
+                    "httplib" "\n" "blurhash" "\n"
+                    ;; Static library
+                    single-app "/lib/libSingleApplication.a"))))))
+          (add-after 'unpack 'fix-determinism
+            (lambda _
+              ;; Make Qt deterministic.
+              (setenv "QT_RCC_SOURCE_DATE_OVERRIDE" "1")))
+          (add-after 'install 'wrap-program
+            (lambda _
+              (let ((gst-plugin-path (getenv "GST_PLUGIN_SYSTEM_PATH")))
+                (wrap-program (string-append #$output "/bin/nheko")
+                  `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path)))))))))
     (build-system qt-build-system)
     (inputs
-     `(("boost" ,boost)
-       ("blurhash" ,blurhash)
-       ("cpp-httplib" ,cpp-httplib)
-       ("cmark" ,cmark)
-       ("gst-plugins-base" ,gst-plugins-base)
-       ("gst-plugins-bad" ,gst-plugins-bad)   ; sdp & webrtc for voip
-       ("gst-plugins-good" ,gst-plugins-good) ; rtpmanager for voip
-       ("json-modern-cxx" ,json-modern-cxx)
-       ("libnice" ,libnice)                   ; for voip
-       ("libolm" ,libolm)
-       ("lmdb" ,lmdb)
-       ("lmdbxx" ,lmdbxx)
-       ("mtxclient" ,mtxclient)
-       ("openssl" ,openssl)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtkeychain" ,qtkeychain)
-       ("qtgraphicaleffects" ,qtgraphicaleffects)
-       ("qtmultimedia" ,qtmultimedia)
-       ("qtquickcontrols2" ,qtquickcontrols2)
-       ("qtsvg" ,qtsvg)
-       ("spdlog" ,spdlog)
-       ("single-application" ,single-application-qt5)
-       ("zlib" ,zlib)))
+     (list boost
+           blurhash
+           cpp-httplib
+           cmark
+           coeurl
+           curl
+           gst-plugins-base
+           gst-plugins-bad              ; sdp & webrtc for voip
+           gst-plugins-good             ; rtpmanager for voip
+           json-modern-cxx
+           libevent
+           libnice                      ; for voip
+           libolm
+           lmdb
+           lmdbxx
+           mtxclient
+           openssl
+           qtbase-5
+           qtdeclarative
+           qtkeychain
+           qtgraphicaleffects
+           qtmultimedia
+           qtquickcontrols2
+           qtsvg
+           spdlog
+           single-application-qt5
+           xcb-util-wm
+           zlib))
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("graphviz" ,graphviz)
-       ("pkg-config" ,pkg-config)
-       ("qtlinguist" ,qttools)))
+     (list doxygen graphviz pkg-config qttools))
     (home-page "https://github.com/Nheko-Reborn/nheko")
     (synopsis "Desktop client for Matrix using Qt and C++14")
     (description "@code{Nheko} want to provide a native desktop app for the
@@ -2380,15 +2444,15 @@ notification, emojis, E2E encryption, and voip calls.")
         (base32 "1q9ddz4rs02a0w3lwrsjnh59khv38cq9f0kv09vnwvazvayn87ck"))))
     (build-system qt-build-system)
     (inputs
-     `(("libqmatrixclient" ,libqmatrixclient)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtmultimedia" ,qtmultimedia)
-       ("qtquickcontrols" ,qtquickcontrols)
-       ("qtquickcontrols2" ,qtquickcontrols2)
-       ("qtsvg" ,qtsvg)
-       ("qttools" ,qttools)
-       ("xdg-utils" ,xdg-utils)))
+     (list libqmatrixclient
+           qtbase-5
+           qtdeclarative
+           qtmultimedia
+           qtquickcontrols
+           qtquickcontrols2
+           qtsvg
+           qttools
+           xdg-utils))
     (arguments
      `(#:tests? #f))                    ; no tests
     (home-page "https://matrix.org/docs/projects/client/quaternion.html")
@@ -2403,13 +2467,13 @@ QMatrixClient project.")
 (define-public hangups
   (package
     (name "hangups")
-    (version "0.4.14")
+    (version "0.4.16")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "hangups" version))
        (sha256
-        (base32 "15qbbafcrdkx73xz9y30qa3d8nj6mgrp2m41749i5nn1qywmikk8"))))
+        (base32 "11szzszwfszc28xvlsh0bahxy3cgibzsirbfjh5m8vj60lzipqm3"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -2419,27 +2483,24 @@ QMatrixClient project.")
            (lambda _
              (substitute* "setup.py"
                (("==") ">=")
-               ((",<.*'") "'"))
-             #t))
+               ((",<.*'") "'"))))
          (replace 'check
            (lambda* (#:key tests? #:allow-other-keys)
              (when tests?
-               (invoke "pytest" "hangups"))
-             #t)))))
+               (invoke "pytest" "hangups")))))))
     (propagated-inputs
-     `(("python-aiohttp" ,python-aiohttp)
-       ("python-appdirs" ,python-appdirs)
-       ("python-async-timeout" ,python-async-timeout)
-       ("python-configargparse" ,python-configargparse)
-       ("python-mechanicalsoup" ,python-mechanicalsoup)
-       ("python-protobuf" ,python-protobuf-3.6)
-       ("python-readlike" ,python-readlike)
-       ("python-reparser" ,python-reparser)
-       ("python-requests" ,python-requests)
-       ("python-urwid" ,python-urwid)))
+     (list python-aiohttp
+           python-appdirs
+           python-async-timeout
+           python-configargparse
+           python-mechanicalsoup
+           python-protobuf
+           python-readlike
+           python-reparser
+           python-requests
+           python-urwid))
     (native-inputs
-     `(("python-httpretty" ,python-httpretty)
-       ("python-pytest" ,python-pytest)))
+     (list python-httpretty python-pytest))
     (home-page "https://hangups.readthedocs.io/")
     (synopsis "Instant messaging client for Google Hangouts")
     (description
@@ -2490,12 +2551,12 @@ messaging that aren’t available to clients that connect over XMPP.")
        ("gettext" ,gettext-minimal)
        ("which" ,which)))
     (inputs
-     `(("pidgin" ,pidgin)
-       ("libgcrypt" ,libgcrypt)
-       ("libwebp" ,libwebp)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+-2)
-       ("zlib" ,zlib)))
+     (list pidgin
+           libgcrypt
+           libwebp
+           glib
+           gtk+-2
+           zlib))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -2539,22 +2600,22 @@ replacement.")
 (define-public tdlib
   (package
     (name "tdlib")
-    (version "1.7.0")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/tdlib/td")
-                    (commit (string-append "v" version))))
-              (sha256
-               (base32
-                "0dfir57ljcn98mkg061c5642qb93wh2lm1n4nngpl3na9vvfk75i"))
-              (file-name (git-file-name name version))))
+    (version "1.8.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/tdlib/td")
+             (commit (string-append "v" version))))
+       (sha256
+        (base32 "19psqpyh9a2kzfdhgqkirpif4x8pzy89phvi59dq155y30a3661q"))
+       (file-name (git-file-name name version))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #t
        #:configure-flags
        (list "-DCMAKE_BUILD_TYPE=Release"
-             "-DTD_ENABLE_LTO=OFF") ; FIXME: Get LTO to work.
+             "-DTD_ENABLE_LTO=OFF")     ; FIXME: Get LTO to work.
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'remove-failing-tests
@@ -2564,14 +2625,9 @@ replacement.")
                ;; which uses mtproto.cpp to attempt to connect to
                ;; a remote server. Removing this file from the sources
                ;; list disables those specific test cases.
-               (("\\$\\{CMAKE_CURRENT_SOURCE_DIR\\}/mtproto.cpp") ""))
-             #t)))))
+               (("\\$\\{CMAKE_CURRENT_SOURCE_DIR\\}/mtproto.cpp") "")))))))
     (native-inputs
-     `(("gperf" ,gperf)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)
-       ("php" ,php)
-       ("doxygen" ,doxygen)))
+     (list gperf openssl zlib php doxygen))
     (synopsis "Cross-platform library for building Telegram clients")
     (description "Tdlib is a cross-platform library for creating custom
 Telegram clients following the official Telegram API.  It can be easily used
@@ -2609,13 +2665,95 @@ support for high performance Telegram Bot creation.")
      `(("glib:bin" ,glib "bin")
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("modem-manager" ,modem-manager)
-       ("pidgin" ,pidgin)))
+     (list modem-manager pidgin))
     (synopsis "Libpurple plugin for SMS via ModemManager")
     (description "Plugin for libpurple to allow sending SMS using ModemManager.")
     (home-page "https://source.puri.sm/Librem5/purple-mm-sms")
     (license license:gpl2+)))
 
+(define-public purple-lurch
+  (package
+    (name "purple-lurch")
+    (version "0.7.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference (url "https://github.com/gkdr/lurch")
+                       (commit (string-append "v" version))))
+       (modules '((guix build utils)))
+       (snippet
+        `(begin
+           ;; Submodules
+           (delete-file-recursively "lib")))
+       (file-name
+        (git-file-name name version))
+       (sha256
+        (base32 "1ipd9gwh04wbqv6c10yxi02lc2yjsr02hwjycgxhl4r9x8b33psd"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:phases (modify-phases %standard-phases
+                  (replace 'configure
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      (let ((out (assoc-ref outputs "out")))
+                        (substitute* "Makefile"
+                          (("^PURPLE_PLUGIN_DIR = .*")
+                           (string-append "PURPLE_PLUGIN_DIR = " out
+                                          "/lib/purple-2\n")))
+                        (setenv "CC" "gcc")))))
+       #:parallel-tests? #f))
+    (native-inputs (list cmocka pkg-config))
+    (inputs (list axc
+                  glib
+                  libgcrypt
+                  libomemo
+                  libsignal-protocol-c
+                  libxml2
+                  minixml
+                  pidgin
+                  sqlite))
+    (synopsis "OMEMO Encryption for libpurple")
+    (description "Purple-lurch plugin adds end-to-end encryption support
+through the Double Ratchet (Axolotl) algorithm, to @code{libpurple}
+applications using @acronym{XMPP, Extensible Messaging and Presence Protocol},
+through its standard XEP-0384: @acronym{OMEMO, OMEMO Multi-End Message and
+Object Encryption} Encryption.  It provides confidentiality, (weak) forward
+secrecy, break-in recovery, authentication, integrity, deniability, and
+asynchronicity.")
+    (home-page "https://github.com/gkdr/lurch")
+    (license license:gpl3+)))
+
+(define-public libphonenumber
+  (package
+   (name "libphonenumber")
+   (version "8.11.3")
+   (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/google/libphonenumber")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "06y3mh1d1mks6d0ynxp3980g712nkf8l5nyljpybsk326b246hg9"))))
+   (arguments
+    `(#:test-target "tests"
+      #:phases
+      (modify-phases %standard-phases
+        (add-after 'unpack 'change-directory
+          (lambda _ (chdir "cpp"))))))
+   (build-system cmake-build-system)
+   (native-inputs
+    (list googletest pkg-config))
+   (inputs
+    (list boost protobuf icu4c))
+   (synopsis "Library for parsing and using phone numbers")
+   (description
+    "This package provides a C++ library for parsing, formatting, and
+validating international phone numbers.")
+   (home-page "https://github.com/google/libphonenumber")
+   (license license:asl2.0)))
+
+
 (define-public chatty
  (package
    (name "chatty")
@@ -2643,18 +2781,17 @@ support for high performance Telegram Bot creation.")
       ("glib:bin" ,glib "bin")
       ("pkg-config" ,pkg-config)))
    (inputs
-    `(("feedbackd" ,feedbackd)
-      ("folks" ,folks)
-      ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-      ("libgcrypt" ,libgcrypt)
-      ("libgee" ,libgee)
-      ("libhandy" ,libhandy-0.0)
-      ("pidgin" ,pidgin)
-      ("purple-mm-sms" ,purple-mm-sms)
-      ("sqlite" ,sqlite)))
+    (list feedbackd
+          folks
+          gsettings-desktop-schemas
+          libgcrypt
+          libgee
+          libhandy-0.0
+          pidgin
+          purple-mm-sms
+          sqlite))
    (propagated-inputs
-    `(("adwaita-icon-theme" ,adwaita-icon-theme)
-      ("evolution-data-server" ,evolution-data-server)))
+    (list adwaita-icon-theme evolution-data-server))
    (synopsis "Mobile client for XMPP and SMS messaging")
    (description "Chatty is a chat program for XMPP and SMS.  It works on mobile
 as well as on desktop platforms.  It's based on libpurple and ModemManager.")
@@ -2675,7 +2812,7 @@ as well as on desktop platforms.  It's based on libpurple and ModemManager.")
          "1yq7y329baa1ly488rw125c3mvsnsa7kjkik602xv1xpkz8p73al"))))
     (build-system cmake-build-system)
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (synopsis "Message broker")
     (description "This package provides Eclipse Mosquitto, a message broker
 that implements the MQTT protocol versions 5.0, 3.1.1 and 3.1.  Mosquitto
@@ -2721,11 +2858,9 @@ as phones, embedded computers or microcontrollers.")
                   "\"../build"))
                #t)))))
       (inputs
-       `(("qtbase" ,qtbase-5)
-         ("qtdeclarative" ,qtdeclarative)
-         ("qtwebchannel" ,qtwebchannel)))
+       (list qtbase-5 qtdeclarative qtwebchannel))
       (propagated-inputs
-       `(("qtwebengine" ,qtwebengine)))
+       (list qtwebengine))
       (home-page "https://movim.eu/")
       (synopsis "Desktop Application for Movim")
       (description
@@ -2888,27 +3023,19 @@ designed for experienced users.")
      `(#:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'cd-to-zulip-dir
-           (lambda _
-             (chdir "zulip")
-             #t))
+           (lambda _ (chdir "zulip")))
          (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))))))
+                 (invoke test-zulip))))))))
     (propagated-inputs
-     `(("python-matrix-client" ,python-matrix-client)
-       ("python-pyopenssl" ,python-pyopenssl)
-       ("python-requests" ,python-requests)
-       ("python-six" ,python-six)))
+     (list python-matrix-client python-pyopenssl python-requests
+           python-six))
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-distro" ,python-distro)
-       ("python-pytest" ,python-pytest)))
+     (list python-cython python-distro python-pytest))
     (home-page "https://github.com/zulip/python-zulip-api")
     (synopsis "Zulip's API Python bindings")
     (description
@@ -2950,17 +3077,15 @@ designed for experienced users.")
                (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)))
+     (list python-beautifulsoup4
+           python-lxml
+           python-mypy-extensions
+           python-urwid
+           python-urwid-readline
+           python-zulip))
     (native-inputs
-     `(("python-distro" ,python-distro)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-mock" ,python-pytest-mock)))
+     (list python-distro python-pytest python-pytest-cov
+           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.")
@@ -2993,4 +3118,149 @@ API.  Mattermost is not required.")
     (home-page "https://github.com/42wim/matterbridge")
     (license license:asl2.0)))
 
+(define-public pounce
+  (package
+    (name "pounce")
+    (version "3.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://git.causal.agency/pounce/snapshot/pounce-"
+                           version ".tar.gz"))
+       (sha256
+        (base32 "1w4x34bspkqvk9p7bfj0zmvmbzvxb7lxrrr3g6lrfdj9f3qzfxpp"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f                      ;there are no tests
+       #:make-flags
+       (list
+        (string-append "CC=" ,(cc-for-target))
+        (string-append "PREFIX=" %output))))
+    (native-inputs
+     (list pkg-config universal-ctags))
+    (inputs
+     (list libressl))
+    (home-page "https://code.causal.agency/june/pounce")
+    (synopsis "Simple multi-client TLS-only IRC bouncer")
+    (description
+     "@command{pounce} is a multi-client, TLS-only IRC bouncer.  It maintains
+a persistent connection to an IRC server, acting as a proxy and buffer for
+a number of clients.")
+    (license license:gpl3+)))
+
+(define-public weechat-matrix
+  (package
+    (name "weechat-matrix")
+    (version "0.3.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/poljar/weechat-matrix")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1iv55n4k05139f7jzkhczgw4qp6qwilrvfsy3c6v2m1kxffj12d3"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (delete 'build)
+         (replace 'install
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((weechat-python (string-append (assoc-ref outputs "out")
+                                                   "/share/weechat/python")))
+               ;; Avoid circular import by renaming the matrix module to
+               ;; weechat_matrix.
+               (substitute* (cons "main.py"
+                                  (append (find-files "matrix")
+                                          (find-files "tests")))
+                 (("from matrix") "from weechat_matrix")
+                 (("import matrix") "import weechat_matrix"))
+               ;; Install python modules.
+               (invoke "make" "install-lib"
+                       (string-append "INSTALLDIR="
+                                      (site-packages inputs outputs)
+                                      "/weechat_matrix"))
+               ;; Extend PYTHONPATH to find installed python modules.
+               (add-installed-pythonpath inputs outputs)
+               ;; Augment sys.path so that dependencies are found.
+               (substitute* "main.py"
+                 (("import os\n" all)
+                  (apply string-append
+                         all
+                         "import sys\n"
+                         (map (lambda (path)
+                                (string-append "sys.path.append('" path "')\n"))
+                              (string-split (getenv "GUIX_PYTHONPATH") #\:)))))
+               ;; Install script.
+               (mkdir-p weechat-python)
+               (copy-file "main.py"
+                          (string-append weechat-python "/matrix.py")))))
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "pytest")))))))
+    (inputs
+     (list python-matrix-nio python-pygments python-pyopenssl
+           python-webcolors))
+    (native-inputs
+     (list python-pytest))
+    (home-page "https://github.com/poljar/weechat-matrix")
+    (synopsis "Weechat Matrix protocol script")
+    (description "@code{weechat-matrix} is a Python plugin for Weechat that lets
+Weechat communicate over the Matrix protocol.")
+    (license license:isc)))
+
+(define-public weechat-wee-slack
+  (package
+    (name "weechat-wee-slack")
+    (version "2.8.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/wee-slack/wee-slack")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0xfklr0gsc9jgxfyrrb2j756lclz9g8imcb0pk0xgyj8mhsw23zk"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (delete 'build)
+         (replace 'install
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             ;; Augment sys.path so that dependencies are found.
+             (substitute* "wee_slack.py"
+               (("import sys\n" all)
+                (apply string-append
+                       all
+                       (map (lambda (path)
+                              (string-append "sys.path.append('" path "')\n"))
+                            (string-split (getenv "GUIX_PYTHONPATH") #\:)))))
+             ;; Install script.
+             (install-file "wee_slack.py"
+                           (string-append (assoc-ref outputs "out")
+                                          "/share/weechat/python"))))
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "pytest")))))))
+    (inputs
+     (list python-websocket-client))
+    (native-inputs
+     (list python-pytest))
+    (home-page "https://github.com/wee-slack/wee-slack")
+    (synopsis "Weechat Slack script")
+    (description "@code{weechat-wee-slack} is a WeeChat native client for
+Slack.  It provides supplemental features only available in the web/mobile
+clients such as synchronizing read markers, typing notification, threads (and
+more)!  It connects via the Slack API, and maintains a persistent websocket
+for notification of events.")
+    (license license:expat)))
+
 ;;; messaging.scm ends here
diff --git a/gnu/packages/microcom.scm b/gnu/packages/microcom.scm
index 36d6bf21b7..364812299f 100644
--- a/gnu/packages/microcom.scm
+++ b/gnu/packages/microcom.scm
@@ -29,7 +29,7 @@
 (define-public microcom
   (package
     (name "microcom")
-    (version "2017.03.0")
+    (version "2019.01.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -37,11 +37,10 @@
                     (commit (string-append "v" version))))
               (file-name (git-file-name name version))
               (sha256
-               (base32 "060q42lf1bx403smxm97cz8r4ksq942mq5z708vavy6syv3fkap4"))))
+               (base32 "0rf4qdkbhknrrqn4rpb737l0km8yn5f498zapks4akf6yjh5aq8y"))))
     (build-system gnu-build-system)
-    (inputs `(("readline" ,readline)))
-    (native-inputs `(("automake" ,automake)
-                     ("autoconf" ,autoconf)))
+    (inputs (list readline))
+    (native-inputs (list automake autoconf))
     (home-page  "https://git.pengutronix.de/?p=tools/microcom.git")
     (synopsis "Minimalistic serial line terminal program")
  (description "Microcom is a minimalistic terminal program for accessing
diff --git a/gnu/packages/minetest.scm b/gnu/packages/minetest.scm
index 28fa40b410..c431942473 100644
--- a/gnu/packages/minetest.scm
+++ b/gnu/packages/minetest.scm
@@ -116,7 +116,7 @@
             (variable "MINETEST_MOD_PATH")
             (files '("share/minetest/mods")))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("coreutils" ,coreutils)
        ("curl" ,curl)
@@ -136,7 +136,7 @@
        ("openal" ,openal)
        ("sqlite" ,sqlite)))
     (propagated-inputs
-     `(("minetest-data" ,minetest-data)))
+     (list minetest-data))
     (synopsis "Infinite-world block sandbox game")
     (description
      "Minetest is a sandbox construction game.  Players can create and destroy
@@ -187,21 +187,46 @@ numeric identifier TOPIC-ID on the official Minetest forums."
   (string-append "https://forum.minetest.net/viewtopic.php?t="
                  (number->string topic-id)))
 
+(define-public minetest-moreores
+  (package
+    (name "minetest-moreores")
+    (version "2.1.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/minetest-mods/moreores")
+             (commit (string-append "v" version))))
+       (sha256 (base32 "1chfqbc6bb27aacjc67j5l5wcdvmcsvk2rfmangipd7nwini3y34"))
+       (file-name (git-file-name name version))))
+    (build-system minetest-mod-build-system)
+    (home-page (minetest-topic 549))
+    (synopsis "Additional ore types, tools, swords, and rails for Minetest")
+    (description
+     "This Minetest mod adds new ore types to the game (mithril, silver) as well
+as swords and tools made of different materials.  It also adds copper rails.")
+    (license license:zlib)
+    (properties `((upstream-name . "Calinou/moreores")))))
+
 (define-public minetest-basic-materials
   (package
     (name "minetest-basic-materials")
     ;; Upstream uses dates as version numbers.
-    (version "2021-01-30")
+    (version "2021-12-26")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://gitlab.com/VanessaE/basic_materials.git")
-             (commit "e72665b2ed98d7be115779a32d35e6d9ffa231bd")))
+             (url "https://github.com/mt-mods/basic_materials")
+             (commit "0893974b054a2191b5e2d5447ee4fc73f9c35f6a")))
        (sha256
-        (base32 "0v6l3lrjgshy4sccjhfhmfxc3gk0cdy73qb02i9wd2vw506v5asx"))
+        (base32 "0p4nnfsjv7284zmgr781zkyjbp049wp1jy1l7n585zzj181ns57p"))
        (file-name (git-file-name name version))))
     (build-system minetest-mod-build-system)
+    (propagated-inputs
+     ;; basic_materials:silver_wire cannot be crafted without
+     ;; moreores:silver_ingot.
+     (list minetest-moreores))
     (home-page (minetest-topic 21000))
     (synopsis "Some \"basic\" materials and items for other Minetest mods to use")
     (description
@@ -228,7 +253,7 @@ like steel bars and chains, wire, plastic strips and sheets, and more.")
        (file-name (git-file-name name version))))
     (build-system minetest-mod-build-system)
     (propagated-inputs
-     `(("minetest-unifieddyes" ,minetest-unifieddyes)))
+     (list minetest-unifieddyes))
     (home-page (minetest-topic 2411))
     (synopsis "Painted wood in Minetest")
     (description
@@ -274,20 +299,19 @@ special items, intending to make an interesting adventure.")
     (name "minetest-homedecor-modpack")
     ;; Upstream doesn't tag releases, so use the release title from
     ;; ContentDB as version.
-    (version "2021-03-27-1")
+    (version "2021-12-26")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://gitlab.com/VanessaE/homedecor_modpack")
-             (commit "9ffe2b7d691133e1a067546574fbe7364fd02f32")))
+             (url "https://github.com/mt-mods/homedecor_modpack")
+             (commit "a8fceb249d63f081855cfba1fbd6e2aa86365224")))
        (sha256
-        (base32 "1lfajqvc2adf9hqskghky4arccqzpjw4i9a01hv4qcckvivm04ag"))
+        (base32 "1lqcycgkykd86853jjr50m1qv2as2dlqf52gbds4mhiafslnp9mi"))
        (file-name (git-file-name name version))))
     (build-system minetest-mod-build-system)
     (propagated-inputs
-     `(("minetest-basic-materials" ,minetest-basic-materials)
-       ("minetest-unifieddyes" ,minetest-unifieddyes)))
+     (list minetest-basic-materials minetest-unifieddyes))
     (home-page (minetest-topic 2041))
     (synopsis "Home decor mod for Minetest")
     (description
@@ -365,15 +389,15 @@ closely as the engine allows.")
     (name "minetest-mobs")
     ;; Upstream does not tag release, so use the ContentDB release
     ;; title instead.
-    (version "2021-07-22")
+    (version "2021-12-12")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
              (url "https://notabug.org/TenPlus1/mobs_redo")
-             (commit "9f46182bb4b1a390f9a140bc2b443f3cda702332")))
+             (commit "6a4a02f3fbf1038c69e72aaafa52a1e7d6106da8")))
        (sha256
-        (base32 "026kqjis4lipgskjivb3jh9ris3iz80vy2q1jvgxhxmfghjjzp4j"))
+        (base32 "0vgv7jpm9v3dwq4l9jxdd5z14yq164w8kin1d05jfv3ck4hwlwvr"))
        (file-name (git-file-name name version))))
     (build-system minetest-mod-build-system)
     (home-page (minetest-topic 9917))
@@ -394,19 +418,19 @@ add some mobs, a mod like e.g. @code{mobs_animal} provided by the
     (name "minetest-mobs-animal")
     ;; Upstream does not use version numbers, so use the release title
     ;; from ContentDB instead;
-    (version "2021-07-24")
+    (version "2021-11-14")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
              (url "https://notabug.org/TenPlus1/mobs_animal")
-             (commit "c2fa3e300c79c7dd80b6fe91a8b5082bb6b3d934")))
+             (commit "3e15456bce7779aa0dc09a8890f7b5180c1ac771")))
        (sha256
-        (base32 "1j719f079ia9vjxrmjrcj8s6jvaz5kgs1r4dh66z8ql6s70kx7vh"))
+        (base32 "08686mj3jh8fsziqp878jpaj5267s4n6i86dr1gnxyxbsrjraqpn"))
        (file-name (git-file-name name version))))
     (build-system minetest-mod-build-system)
     (propagated-inputs
-     `(("minetest-mobs" ,minetest-mobs)))
+     (list minetest-mobs))
     (home-page "https://notabug.org/TenPlus1/mobs_animal")
     (synopsis "Add animals to Minetest")
     (description
@@ -432,7 +456,7 @@ bunnies, chickens, cows, kittens, rats, sheep, warthogs, penguins and pandas.")
        (file-name (git-file-name name version))))
     (build-system minetest-mod-build-system)
     (propagated-inputs
-     `(("minetest-basic-materials" ,minetest-basic-materials)))
+     (list minetest-basic-materials))
     (home-page (minetest-topic 2155))
     (synopsis "Pipes, item-transport tubes and related devices for Minetest")
     (description
@@ -452,20 +476,19 @@ breakers simulate a player punching a node.")
     (name "minetest-technic")
     ;; Upstream doesn't keep version numbers, so use the release
     ;; date on ContentDB instead.
-    (version "2021-04-15")
+    (version "2021-09-11")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
              (url "https://github.com/minetest-mods/technic")
-             (commit "1c219487d3f4dd03c01ff9aa1f298c7c18c7e189")))
+             (commit "140701c99efb60d81bf63c9a9087720b21c414ca")))
        (sha256
-        (base32 "1k9hdgzp7jnhsk6rgrlrv1lr5xrmh8ln4wv6r25v6f0fwbyj57sf"))
+        (base32 "1fkhcv8sg3kxfadc2jnfdw6bxxkkkcczsh4bf62rgwwmv2ky7zrx"))
        (file-name (git-file-name name version))))
     (build-system minetest-mod-build-system)
     (propagated-inputs
-     `(("minetest-pipeworks" ,minetest-pipeworks)
-       ("minetest-basic-materials" ,minetest-basic-materials)))
+     (list minetest-pipeworks minetest-basic-materials))
     (home-page (minetest-topic 2538))
     (synopsis "Machinery and automation for Minetest")
     (description
@@ -529,7 +552,7 @@ arrow and bow, but @code{minetest-throwing-arrows} does.")
          (file-name (git-file-name name version))))
       (build-system minetest-mod-build-system)
       (propagated-inputs
-       `(("minetest-throwing" ,minetest-throwing)))
+       (list minetest-throwing))
       (home-page (minetest-topic 16365))
       (synopsis "Arrows and bows for Minetest")
       (description
@@ -578,7 +601,7 @@ to and from the file system.")
        (file-name (git-file-name name version))))
     (build-system minetest-mod-build-system)
     (propagated-inputs
-     `(("minetest-basic-materials" ,minetest-basic-materials)))
+     (list minetest-basic-materials))
     (home-page (minetest-topic 2178))
     (synopsis
      "Unified Dyes expands the standard dye set of Minetest to up to 256 colours")
@@ -595,15 +618,15 @@ for general colour handling.")
     (name "minetest-unified-inventory")
     ;; Upstream doesn't keep version numbers, so use the release title
     ;; on ContentDB instead.
-    (version "2021-03-25-1")
+    (version "2021-12-26")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
              (url "https://github.com/minetest-mods/unified_inventory")
-             (commit "c044f5e3b08f0c68ab028d757b2fa63d9a1b0370")))
+             (commit "d6688872c84417d2f61d6f5e607aea39d78920aa")))
        (sha256
-        (base32 "198g945gzbfl0kps46gwjw0c601l3b3wvn4c7dw8manskri1jr4g"))
+        (base32 "1rlw96s2yyxdbz0h9byayyx9nsbqdr4ric91w0k3dkjr71aj8a3b"))
        (file-name (git-file-name name version))))
     (build-system minetest-mod-build-system)
     (home-page (minetest-topic 12767))
@@ -682,7 +705,7 @@ stopping before signals.
        (file-name (git-file-name name version))))
     (build-system minetest-mod-build-system)
     (propagated-inputs
-     `(("minetest-advtrains" ,minetest-advtrains)))
+     (list minetest-advtrains))
     (home-page
      "http://advtrains.de/wiki/doku.php?id=usage:trains:basic_trains")
     (synopsis "Collection of basic trains for the Advanced Trains mod")
diff --git a/gnu/packages/moe.scm b/gnu/packages/moe.scm
index 6d16d1a7cc..819a6298e3 100644
--- a/gnu/packages/moe.scm
+++ b/gnu/packages/moe.scm
@@ -38,8 +38,8 @@
        (base32
         "1yg2ln2mm6gzv61cxnv60dw1cr5bl2dhkjy685jrd3aabb7wpyqf"))))
     (build-system gnu-build-system)
-    (native-inputs `(("lzip" ,lzip)))
-    (inputs `(("ncurses" ,ncurses)))
+    (native-inputs (list lzip))
+    (inputs (list ncurses))
     (home-page "https://www.gnu.org/software/moe/moe.html")
     (synopsis "Modeless, multiple-buffer, user-friendly 8-bit text editor")
     (description
diff --git a/gnu/packages/monitoring.scm b/gnu/packages/monitoring.scm
index 999cfcb8b0..e9d2934ca1 100644
--- a/gnu/packages/monitoring.scm
+++ b/gnu/packages/monitoring.scm
@@ -27,6 +27,7 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages monitoring)
+  #:use-module (guix gexp)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
@@ -56,6 +57,7 @@
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages rrdtool)
@@ -86,7 +88,7 @@
                   #t))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (inputs
      `(("zlib" ,zlib)
        ("libpng-apng" ,libpng)
@@ -181,8 +183,7 @@ etc. via a Web interface.  Features include:
              (string-append "--with-libpcre="
                             (assoc-ref %build-inputs "pcre")))))
     (inputs
-     `(("libiconv" ,libiconv)
-       ("pcre" ,pcre)))
+     (list libiconv pcre))
     (home-page "https://www.zabbix.com/")
     (synopsis "Distributed monitoring solution (client-side agent)")
     (description "This package provides a distributed monitoring
@@ -235,14 +236,14 @@ solution (client-side agent)")
                                (assoc-ref %build-inputs "zlib"))
                 ,flags))))
     (inputs
-     `(("curl" ,curl)
-       ("libevent" ,libevent)
-       ("gnutls" ,gnutls)
-       ("postgresql" ,postgresql)
-       ("zlib" ,zlib)
-       ("net-snmp" ,net-snmp)
-       ("curl" ,curl)
-       ,@(package-inputs zabbix-agentd)))
+     (modify-inputs (package-inputs zabbix-agentd)
+       (prepend curl
+                libevent
+                gnutls
+                postgresql
+                zlib
+                net-snmp
+                curl)))
     (synopsis "Distributed monitoring solution (server-side)")
     (description "This package provides a distributed monitoring
 solution (server-side)")))
@@ -287,7 +288,7 @@ through a text-based interface.")
 (define-public python-pyzabbix
   (package
     (name "python-pyzabbix")
-    (version "0.8.2")
+    (version "1.0.0")
     (home-page "https://github.com/lukecyca/pyzabbix")
     ;; No tests on PyPI, use the git checkout.
     (source
@@ -297,7 +298,7 @@ through a text-based interface.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "15rrnpkv94wx6748hh4sd120v6x25rkbd6vlz6hfrhvjwxz5lgjl"))))
+         "146pv8bj6pv8max1lkm07560b9zcc268c927kff6rcib47qxfnn2"))))
     (build-system python-build-system)
     (arguments
      '(#:phases (modify-phases %standard-phases
@@ -310,14 +311,13 @@ through a text-based interface.")
                   (replace 'check
                     (lambda* (#:key tests? #:allow-other-keys)
                       (if tests?
-                          (invoke "python" "setup.py" "nosetests")
-                          (format #t "test suite not run~")))))))
+                          (invoke "nosetests")
+                          (format #t "test suite not run~%")))))))
     (native-inputs
-     `(;; For tests.
-       ("python-httpretty" ,python-httpretty)
-       ("python-nose" ,python-nose)))
+     ;; For tests.
+     (list python-httpretty python-nose))
     (propagated-inputs
-     `(("python-requests" ,python-requests)))
+     (list python-requests python-semantic-version))
     (synopsis "Python interface to the Zabbix API")
     (description
      "@code{pyzabbix} is a Python module for working with the Zabbix API.")
@@ -337,8 +337,7 @@ through a text-based interface.")
     (build-system gnu-build-system)
     (arguments '(#:tests? #f))          ; no tests
     (inputs
-     `(("libpcap" ,libpcap)
-       ("zlib" ,zlib)))
+     (list libpcap zlib))
     (home-page "https://unix4lyfe.org/darkstat/")
     (synopsis "Network statistics gatherer")
     (description
@@ -358,15 +357,16 @@ HTTP.  Features:
 (define-public python-whisper
   (package
     (name "python-whisper")
-    (version "1.0.2")
+    (version "1.1.8")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "whisper" version))
        (sha256
         (base32
-         "1v1bi3fl1i6p4z4ki692bykrkw6907dn3mfq0151f70lvi3zpns3"))))
+         "1bk29w09zcpsv8hp0g0al7nwrxa07z0ycls3mbh83wfavk83aprl"))))
     (build-system python-build-system)
+    (native-inputs (list python-six))
     (home-page "http://graphiteapp.org/")
     (synopsis "Fixed size round-robin style database for Graphite")
     (description "Whisper is one of three components within the Graphite
@@ -396,10 +396,7 @@ historical data.")
          (add-after 'unpack 'do-not-install-to-/opt
            (lambda _ (setenv "GRAPHITE_NO_PREFIX" "1") #t)))))
     (propagated-inputs
-     `(("python-cachetools" ,python-cachetools)
-       ("python-txamqp" ,python-txamqp)
-       ("python-urllib3" ,python-urllib3)
-       ("python-whisper" ,python-whisper)))
+     (list python-cachetools python-txamqp python-urllib3 python-whisper))
     (home-page "http://graphiteapp.org/")
     (synopsis "Backend data caching and persistence daemon for Graphite")
     (description "Carbon is a backend data caching and persistence daemon for
@@ -435,15 +432,15 @@ and persisting them to disk using the Whisper time-series library.")
          (add-after 'unpack 'do-not-install-to-/opt
            (lambda _ (setenv "GRAPHITE_NO_PREFIX" "1") #t)))))
     (propagated-inputs
-     `(("python-cairocffi" ,python-cairocffi)
-       ("python-pytz" ,python-pytz)
-       ("python-whisper" ,python-whisper)
-       ("python-django" ,python-django-2.2)
-       ("python-django-tagging" ,python-django-tagging)
-       ("python-scandir" ,python-scandir)
-       ("python-urllib3" ,python-urllib3)
-       ("python-pyparsing" ,python-pyparsing)
-       ("python-txamqp" ,python-txamqp)))
+     (list python-cairocffi
+           python-pytz
+           python-whisper
+           python-django-2.2
+           python-django-tagging
+           python-scandir
+           python-urllib3
+           python-pyparsing
+           python-txamqp))
     (home-page "https://graphiteapp.org/")
     (synopsis "Scalable realtime graphing system")
     (description "Graphite is a scalable real-time graphing system that does
@@ -451,9 +448,6 @@ two things: store numeric time-series data, and render graphs of this data on
 demand.")
     (license license:asl2.0)))
 
-(define-public python2-graphite-web
-  (deprecated-package "python2-graphite-web" graphite-web))
-
 (define-public python-prometheus-client
   (package
     (name "python-prometheus-client")
@@ -469,7 +463,7 @@ demand.")
      '(;; No included tests.
        #:tests? #f))
     (propagated-inputs
-     `(("python-twisted" ,python-twisted)))
+     (list python-twisted))
     (home-page
      "https://github.com/prometheus/client_python")
     (synopsis "Python client for the Prometheus monitoring system")
@@ -538,12 +532,9 @@ written in Go with pluggable metric collectors.")
                                             "/lib/udev/rules.d"))
                #t)))))
       (inputs
-       `(("python-prometheus-client" ,python-prometheus-client)
-         ("python-pyudev" ,python-pyudev)))
+       (list python-prometheus-client python-pyudev))
       (native-inputs
-       `(("python-pytest" ,python-pytest)
-         ("python-pytest-mock" ,python-pytest-mock)
-         ("python-pytest-runner" ,python-pytest-runner)))
+       (list python-pytest python-pytest-mock python-pytest-runner))
       (home-page "https://github.com/yrro/temper-exporter")
       (synopsis "Prometheus exporter for PCSensor TEMPer sensor devices")
       (description
@@ -554,7 +545,7 @@ devices.")
 (define-public fswatch
   (package
     (name "fswatch")
-    (version "1.15.0")
+    (version "1.16.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -563,13 +554,13 @@ devices.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1yz65jsbgdx4cmy16x24wz5di352lvyi7fp6jm90bhgl1vpzxlsx"))))
+                "1zsvc8arza2ypnnmv4m0qfpnldmy1zh10q6wss05ibmanslfj2ql"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("gettext" ,gettext-minimal)
-       ("libtool" ,libtool)))
+     (list autoconf automake gettext-minimal libtool))
+    (arguments
+     (list #:configure-flags
+           #~(list "--disable-static")))
     (synopsis "File system monitor")
     (description "This package provides a file system monitor.")
     (home-page "https://github.com/emcrisostomo/fswatch")
@@ -598,14 +589,9 @@ devices.")
                       ;; Required because of patched sources.
                       (invoke "autoreconf" "-vfi"))))))
     (inputs
-     `(("rrdtool" ,rrdtool)
-       ("curl" ,curl)
-       ("libyajl" ,libyajl)))
+     (list rrdtool curl libyajl))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (home-page "https://collectd.org/")
     (synopsis "Collect system and application performance metrics periodically")
     (description
@@ -631,7 +617,7 @@ future system load (i.e., capacity planning).")
                (base32
                 "0jw6yij8va0f292g4xkf9lp9sxkzfgv67ajw49g3vq42q47ld7cv"))))
     (build-system gnu-build-system)
-    (inputs `(("ncurses" ,ncurses)))
+    (inputs (list ncurses))
     (arguments '(#:tests? #f)) ;; No included tests.
     (home-page "http://www.maier-komor.de/hostscope.html")
     (properties `((release-monitoring-url . ,home-page)))
diff --git a/gnu/packages/mono.scm b/gnu/packages/mono.scm
index 9e5b428969..6a7afbafbf 100644
--- a/gnu/packages/mono.scm
+++ b/gnu/packages/mono.scm
@@ -147,7 +147,7 @@ Java.")
          "1vr5l09i5i91n9qzky7ab9wwvgdidvrbw26y8llip0z4qdf4w7mq"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("glib" ,glib)
        ("cairo" ,cairo)
diff --git a/gnu/packages/moreutils.scm b/gnu/packages/moreutils.scm
index 47bda32126..aaa787c1d9 100644
--- a/gnu/packages/moreutils.scm
+++ b/gnu/packages/moreutils.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
 ;;; Copyright © 2016, 2017, 2019 Efraim Flashner <efraim@flashner.co.il>
-;;; Copyright © 2016–2018, 2020, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2016–2018, 2020–2022 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -19,10 +19,12 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages moreutils)
+  #:use-module (guix gexp)
   #:use-module ((guix licenses) #:prefix l:)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix build-system gnu)
+  #:use-module (guix utils)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages docbook))
@@ -30,7 +32,7 @@
 (define-public moreutils
   (package
     (name "moreutils")
-    (version "0.65")
+    (version "0.67")
     (source
      (origin
        (method url-fetch)
@@ -38,36 +40,30 @@
              "https://git.joeyh.name/index.cgi/moreutils.git/snapshot/"
              name "-" version ".tar.gz"))
        (sha256
-        (base32 "10c8b4bwnli4gxwvgmgkc5kin1ksrxsnxmigs7y4rrh4aaszdjb0"))))
+        (base32 "045d2dfvsd4sxxr2i2qvkpgvi912qj9vc4gpc8fb4hr9q912z1q3"))))
     (build-system gnu-build-system)
     ;; For building the manual pages.
     (native-inputs
-     `(("docbook-xml" ,docbook-xml-4.4)
-       ("docbook-xsl" ,docbook-xsl)
-       ("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)))
+     (list docbook-xml-4.4 docbook-xsl libxml2 libxslt))
     (inputs
-     `(("perl" ,perl)
-       ("perl-timedate" ,perl-timedate)
-       ("perl-time-duration" ,perl-time-duration)))
+     (list perl perl-timedate perl-time-duration))
     (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'install 'wrap-program
-                    (lambda* (#:key outputs #:allow-other-keys)
-                      (let* ((out (assoc-ref outputs "out")))
-                        (wrap-program
-                            (string-append out "/bin/ts")
-                          `("PERL5LIB" ":" prefix (,(getenv "PERL5LIB")))))
-                      #t))
-         (delete 'configure))           ; no configure script
-       #:make-flags
-       (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
-             (string-append "DOCBOOKXSL="
-                            (assoc-ref %build-inputs "docbook-xsl") "/xml/xsl/"
-                            ,(package-name docbook-xsl) "-"
-                            ,(package-version docbook-xsl))
-             "CC=gcc")))
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'install 'wrap-program
+                 (lambda _
+                   (wrap-program
+                       (string-append #$output "/bin/ts")
+                     `("PERL5LIB" ":" prefix (,(getenv "PERL5LIB"))))))
+               (delete 'configure))     ; no configure script
+           #:make-flags
+           #~(list (string-append "PREFIX=" #$output)
+                   (string-append "DOCBOOKXSL="
+                                  #$(this-package-native-input "docbook-xsl")
+                                  "/xml/xsl/docbook-xsl-"
+                                  #$(package-version (this-package-native-input
+                                                      "docbook-xsl")))
+                   (string-append "CC=" #$(cc-for-target)))))
     (home-page "https://joeyh.name/code/moreutils/")
     (synopsis "Miscellaneous general-purpose command-line tools")
     (description
diff --git a/gnu/packages/mp3.scm b/gnu/packages/mp3.scm
index 3555958f2a..b95de712b0 100644
--- a/gnu/packages/mp3.scm
+++ b/gnu/packages/mp3.scm
@@ -9,6 +9,7 @@
 ;;; Copyright © 2019 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
 ;;; Copyright © 2021 Simon Streit <simon@netpanic.org>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -154,7 +155,7 @@ This package contains the library.")
                            Libs: -L${libdir} -lid3tag -lz~@
                            Cflags: -I${includedir}~%"
                           out ,version)))))))))
-   (inputs `(("zlib" ,zlib)))
+   (inputs (list zlib))
    (synopsis "Library for reading ID3 tags")
    (description
     "Libid3tag is a library for reading ID3 tags, both ID3v1 and the various
@@ -179,7 +180,7 @@ versions of ID3v2.")
             (patches (search-patches "id3lib-CVE-2007-4460.patch"
                                      "id3lib-UTF16-writing-bug.patch"))))
    (build-system gnu-build-system)
-   (inputs `(("zlib" ,zlib)))
+   (inputs (list zlib))
    (arguments
     `(#:phases
       (modify-phases %standard-phases
@@ -234,7 +235,7 @@ a highly stable and efficient implementation.")
                                          (assoc-ref inputs "zlib")
                                          "/lib -lz\")")))
                        #t)))))
-    (inputs `(("zlib" ,zlib)))
+    (inputs (list zlib))
     (home-page "https://taglib.org")
     (synopsis "Library to access audio file meta-data")
     (description
@@ -296,10 +297,9 @@ Speex, WavPack TrueAudio, WAV, AIFF, MP4 and ASF files.")
              #t)))
         #:tests? #f))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("gtk+" ,gtk+-2)
-       ("ncurses" ,ncurses)))
+     (list gtk+-2 ncurses))
     (home-page "https://www.ibiblio.org/mp3info/")
     (synopsis "MP3 technical info viewer and ID3 1.x tag editor")
     (description
@@ -322,15 +322,15 @@ pre-defined or user-specifiable output format.")
              (base32
               "1p1mn2hsmj5cp40fnc8g1yfvk72p8pjxi866gjdkgjsqrr7xdvih"))))
    (build-system gnu-build-system)
-   (inputs `(("flac" ,flac)
-             ("libid3tag" ,libid3tag)
-             ("libmad" ,libmad)
-             ("libogg" ,libogg)
-             ("libltdl" ,libltdl)
-             ("libvorbis" ,libvorbis)
-             ("pcre" ,pcre)))
+   (inputs (list flac
+                 libid3tag
+                 libmad
+                 libogg
+                 libltdl
+                 libvorbis
+                 pcre))
    (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
    (synopsis "Library for splitting mp3 and ogg vorbis files")
    (description
     "Mp3splt is a utility to split mp3 and ogg vorbis files selecting a begin
@@ -356,8 +356,8 @@ This package contains the library.")
              (base32
               "1aiv20gypb6r84qabz8gblk8vi42cg3x333vk2pi3fyqvl82phry"))))
    (build-system gnu-build-system)
-   (native-inputs `(("pkg-config" ,pkg-config)))
-   (inputs `(("libmp3splt" ,libmp3splt)))
+   (native-inputs (list pkg-config))
+   (inputs (list libmp3splt))
    (synopsis "Utility for splitting mp3 and ogg vorbis files")
    (description
     "Mp3splt is a utility to split mp3 and ogg vorbis files selecting a begin
@@ -387,10 +387,9 @@ This package contains the binary.")
     (build-system gnu-build-system)
     (arguments '(#:configure-flags '("--with-default-audio=pulse")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("pulseaudio" ,pulseaudio)))
+     (list alsa-lib pulseaudio))
     (home-page "https://www.mpg123.org/")
     (synopsis "Console MP3 player and decoder library")
     (description
@@ -412,7 +411,8 @@ command-line tool as well as a C library, libmpg123.")
               (base32
                "0ki8mh76bbmdh77qsiw682dvi8y468yhbdabqwg05igmwc1wqvq5"))
              (patches
-              (search-patches "mpg321-CVE-2019-14247.patch"))))
+              (search-patches "mpg321-CVE-2019-14247.patch"
+                              "mpg321-gcc-10.patch"))))
     (build-system gnu-build-system)
     (arguments '(#:configure-flags '("--disable-alsa")))
     (inputs
@@ -481,18 +481,11 @@ use with CD-recording software).")
             (patches (search-patches "ripperx-missing-file.patch"))))
    (build-system gnu-build-system)
    (propagated-inputs
-    `(("gs-fonts" ,gs-fonts)
-      ("cdparanoia" ,cdparanoia)
-      ("flac" ,flac)
-      ("lame" ,lame)
-      ("vorbis-tools" ,vorbis-tools)))
+    (list font-ghostscript cdparanoia flac lame vorbis-tools))
    (inputs
-    `(("glib" ,glib)
-      ("gtk+" ,gtk+-2)
-      ("id3lib" ,id3lib)
-      ("taglib" ,taglib)))
+    (list glib gtk+-2 id3lib taglib))
    (native-inputs
-    `(("pkg-config" ,pkg-config)))
+    (list pkg-config))
    (synopsis "GTK program to rip and encode CD audio tracks")
    (description
     "RipperX is a GTK program to rip CD audio tracks and encode them to the
@@ -544,7 +537,9 @@ format.")
            (lambda _
              (substitute* "Makefile"
                (("CC[[:blank:]]*:=.*")
-                "CC := gcc\n"))))
+                "CC := gcc\n"))
+
+             (setenv "CFLAGS" "-fcommon -g")))  ;allow compilation with GCC 10
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -577,10 +572,7 @@ compression format (.mpc files).")
     (arguments
      `(#:tests? #f))    ; the required test data contains copyrighted material
     (propagated-inputs
-     `(("python-grako" ,python-grako)
-       ("python-magic" ,python-magic)
-       ("python-pathlib" ,python-pathlib)
-       ("python-six" ,python-six)))
+     (list python-grako python-magic python-pathlib python-six))
     (synopsis "MP3 tag ID3 metadata editor")
     (description "eyeD3 is a Python tool for working with audio files,
 specifically mp3 files containing ID3 metadata (i.e. song info).  It provides a
@@ -593,15 +585,14 @@ command-line tool.")
 (define-public chromaprint
   (package
     (name "chromaprint")
-    (version "1.5.0")
+    (version "1.5.1")
     (source (origin
       (method url-fetch)
       (uri (string-append
             "https://github.com/acoustid/chromaprint/releases/download/v"
             version "/chromaprint-" version ".tar.gz"))
       (sha256
-       (base32
-        "0sknmyl5254rc55bvkhfwpl4dfvz45xglk1rq8zq5crmwq058fjp"))))
+       (base32 "072y6c7ijkm6r674f6z089rbdazrmxzpdcsm6y6vf64b7gxdiam1"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f ; tests require googletest *sources*
@@ -611,8 +602,7 @@ command-line tool.")
     (inputs
      ;; requires one of FFmpeg (prefered), FFTW3 or vDSP
      ;; use the same ffmpeg version as for acoustid-fingerprinter
-     `(("ffmpeg" ,ffmpeg)
-       ("boost" ,boost)))
+     (list ffmpeg boost))
     (home-page "https://acoustid.org/chromaprint")
     (synopsis "Audio fingerprinting library")
     (description "Chromaprint is a library for calculating audio
@@ -633,8 +623,7 @@ is to provide an accurate identifier for record tracks.")
     (build-system python-build-system)
     (arguments `(#:tests? #f)) ; there is no "audiofile" fixture
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-pytest python-pytest-runner))
     (home-page "https://github.com/sampsyo/audioread")
     (synopsis "Decode audio files using whichever backend is available")
     (description
@@ -669,10 +658,9 @@ FFmpeg, etc.")
                 (string-append "'" (assoc-ref inputs "chromaprint")
                                "/bin/fpcalc'")))
              #t)))))
-    (inputs `(("chromaprint" ,chromaprint)))
+    (inputs (list chromaprint))
     (propagated-inputs
-     `(("python-audioread" ,python-audioread)
-       ("python-requests" ,python-requests)))
+     (list python-audioread python-requests))
     (home-page "https://github.com/beetbox/pyacoustid")
     (synopsis "Bindings for Chromaprint acoustic fingerprinting")
     (description
@@ -705,10 +693,9 @@ fingerprinting library and the Acoustid API.")
            (lambda _
              (setenv "PYTAGLIB_CYTHONIZE" "1"))))))
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-pytest" ,python-pytest)))
+     (list python-cython python-pytest))
     (inputs
-     `(("taglib" ,taglib)))
+     (list taglib))
     (home-page
      "https://github.com/supermihi/pytaglib")
     (synopsis
diff --git a/gnu/packages/mpd.scm b/gnu/packages/mpd.scm
index b031525ad4..ad89acda04 100644
--- a/gnu/packages/mpd.scm
+++ b/gnu/packages/mpd.scm
@@ -7,7 +7,7 @@
 ;;; Copyright © 2016, 2018, 2019, 2020 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 Evan Straw <evan.straw99@gmail.com>
-;;; Copyright © 2020 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2020 Lars-Dominik Braun <lars@6xq.net>
 ;;; Copyright © 2020, 2021 Simon Streit <simon@netpanic.org>
 ;;; Copyright © 2021 Noah Evans <noah@nevans.me>
@@ -30,6 +30,7 @@
 (define-module (gnu packages mpd)
   #:use-module (gnu packages)
   #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix gexp)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
@@ -42,8 +43,10 @@
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages avahi)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages build-tools) ;meson-next
   #:use-module (gnu packages boost)
   #:use-module (gnu packages cdrom)
+  #:use-module (gnu packages cmake) ;for MPD
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages gnupg)
@@ -61,6 +64,7 @@
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages pcre)
   #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages pretty-print)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages pulseaudio)
@@ -73,7 +77,7 @@
 (define-public libmpdclient
   (package
     (name "libmpdclient")
-    (version "2.19")
+    (version "2.20")
     (source (origin
               (method url-fetch)
               (uri
@@ -82,16 +86,14 @@
                               "/libmpdclient-" version ".tar.xz"))
               (sha256
                (base32
-                "12d1fzlkcnjw4ayk2wp11vhglfcvr5k02arzdbkhiavq496av2hm"))))
+                "0z979qcjc0dqmpn3q9j174a29akx3zmavz6q6hg31hrrx5l3yy8q"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-
-       ;; For building HTML documentation.
-       ("doxygen" ,doxygen)
-
-       ;; For tests.
-       ("check" ,check)))
+     (list pkg-config
+           ;; For building HTML documentation.
+           doxygen
+           ;; For tests.
+           check))
     (arguments
      `(#:configure-flags
        (list "-Ddocumentation=true"
@@ -105,7 +107,7 @@ interfacing MPD in the C, C++ & Objective C languages.")
 (define-public mpd
   (package
     (name "mpd")
-    (version "0.22.11")
+    (version "0.23.5")
     (source (origin
               (method url-fetch)
               (uri
@@ -114,33 +116,33 @@ interfacing MPD in the C, C++ & Objective C languages.")
                               "/mpd-" version ".tar.xz"))
               (sha256
                (base32
-                "1850ii8vnv5l8b561fai4q2mcrnym94mvlrxiy48fvpfm8s7ygql"))))
+                "16d2ny05z47qpj4sjagdcyphb16dzdy21mwwdxbg819s14jjqb7j"))))
     (build-system meson-build-system)
     (arguments
      `(#:configure-flags '("-Ddocumentation=enabled")))
-    (inputs `(("ao" ,ao)
-              ("alsa-lib" ,alsa-lib)
-              ("avahi" ,avahi)
-              ("boost" ,boost)
-              ("curl" ,curl)
-              ("ffmpeg" ,ffmpeg)
-              ("flac" ,flac)
-              ("glib" ,glib)
-              ("icu4c" ,icu4c)
-              ;; The LAME decoder comes from FFmpeg, but is added here so that
-              ;; configure picks up the LAME encoder.
-              ("lame" ,lame)
-              ("libid3tag" ,libid3tag)
-              ("libmpdclient" ,libmpdclient)
-              ("libsamplerate" ,libsamplerate)
-              ("libsndfile" ,libsndfile)
-              ("libvorbis" ,libvorbis)
-              ("opus" ,opus)
-              ("pulseaudio" ,pulseaudio)
-              ("sqlite" ,sqlite)
-              ("zlib" ,zlib)))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("python-sphinx" ,python-sphinx)))
+    (inputs (list ao
+                  alsa-lib
+                  avahi
+                  boost
+                  curl
+                  ffmpeg
+                  flac
+                  fmt
+                  glib
+                  icu4c
+                  ;; The LAME decoder comes from FFmpeg, but is added here so that
+                  ;; configure picks up the LAME encoder.
+                  lame
+                  libid3tag
+                  libmpdclient
+                  libsamplerate
+                  libsndfile
+                  libvorbis
+                  opus
+                  pulseaudio
+                  sqlite
+                  zlib))
+    (native-inputs (list cmake pkg-config python-sphinx))
     ;; Missing optional inputs:
     ;;   libyajl
     ;;   libcdio_paranoia
@@ -167,12 +169,13 @@ server-side application for playing music.  Through plugins and libraries it
 can play a variety of sound files while being controlled by its network
 protocol.")
     (home-page "https://www.musicpd.org/")
+    (properties `((release-monitoring-url . "https://musicpd.org")))
     (license license:gpl2)))
 
 (define-public mpd-mpc
   (package
     (name "mpd-mpc")
-    (version "0.33")
+    (version "0.34")
     (source (origin
               (method url-fetch)
               (uri
@@ -181,12 +184,22 @@ protocol.")
                               "/mpc-" version ".tar.xz"))
               (sha256
                (base32
-                "15hjpzqs83v1zx49x8nkpwy9hpl1jxd55z1w50vm82gm32zcqh2g"))))
+                "086sdx88zvgbv4j9kw4qlrsw1n621d6j6403pcid045wahv3y7k9"))))
     (build-system meson-build-system)
-    (inputs `(("libmpdclient" ,libmpdclient)))
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'remove-bogus-rsync-requirement
+                 ;; Meson thinks a maintainer ‘upload to musicpd.org’ task
+                 ;; merits a hard dependency on rsync.  Convince it otherwise.
+                 ;; Don't use ‘true’ so that the build will fail if it is ever
+                 ;; actually invoked.
+                 (lambda _
+                   (substitute* "doc/meson.build"
+                     (("rsync") "ls")))))))
+    (inputs (list libmpdclient))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python-sphinx" ,python-sphinx)))
+     (list pkg-config python-sphinx))
     (synopsis "Music Player Daemon client")
     (description "MPC is a minimalist command line interface to MPD, the music
 player daemon.")
@@ -196,7 +209,7 @@ player daemon.")
 (define-public ncmpc
   (package
     (name "ncmpc")
-    (version "0.45")
+    (version "0.46")
     (source (origin
               (method url-fetch)
               (uri
@@ -205,21 +218,13 @@ player daemon.")
                               "/ncmpc-" version ".tar.xz"))
               (sha256
                (base32
-                "11gpy6kd7xr8x7f7gwdwfryxyc58cd135ds28gnz40p08xj49zqp"))))
+                "0klkjaq6n05cmgcwiawjm6d3rn6mrncy72s3x0abjjnx177pfzqp"))))
     (build-system meson-build-system)
-    (arguments
-     `(#:configure-flags
-       ;; Otherwise, they are installed incorrectly, in
-       ;; '$out/share/man/man/man1'.
-       (list (string-append "-Dmandir=" (assoc-ref %outputs "out")
-                            "/share"))))
-    (inputs `(("boost" ,boost)
-              ("pcre" ,pcre)
-              ("libmpdclient" ,libmpdclient)
-              ("ncurses" ,ncurses)))
-    (native-inputs `(("gettext" ,gettext-minimal) ; for xgettext
-                     ("pkg-config" ,pkg-config)
-                     ("python-sphinx" ,python-sphinx)))
+    (inputs (list boost pcre libmpdclient ncurses))
+    (native-inputs
+     (list gettext-minimal              ; for xgettext
+           pkg-config
+           python-sphinx))
     (synopsis "Curses Music Player Daemon client")
     (description "ncmpc is a fully featured MPD client, which runs in a
 terminal using ncurses.")
@@ -239,15 +244,15 @@ terminal using ncurses.")
                (base32
                 "06rs734n120jp51hr0fkkhxrm7zscbhpdwls0m5b5cccghazdazs"))))
     (build-system gnu-build-system)
-    (inputs `(("libmpdclient" ,libmpdclient)
-              ("boost"  ,boost)
-              ("readline" ,readline)
-              ("ncurses" ,ncurses)
-              ("taglib" ,taglib)
-              ("icu4c" ,icu4c)
-              ("curl" ,curl)))
+    (inputs (list libmpdclient
+                  boost
+                  readline
+                  ncurses
+                  taglib
+                  icu4c
+                  curl))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
      '(#:configure-flags
        '("BOOST_LIB_SUFFIX=" "--with-taglib" "--enable-clock")))
@@ -271,11 +276,8 @@ sort playlists, and a local file system browser.")
                (base32
                 "0s66zqscb44p88cl3kcv5jkjcqsskcnrv7xgrjhzrchf2kcpwf53"))))
     (build-system meson-build-system)
-    (inputs `(("boost" ,boost)
-              ("curl" ,curl)
-              ("libgcrypt" ,libgcrypt)
-              ("libmpdclient" ,libmpdclient)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list boost curl libgcrypt libmpdclient))
+    (native-inputs (list pkg-config))
     (synopsis "MPD client for track scrobbling")
     (description "mpdscribble is a Music Player Daemon client which submits
 information about tracks being played to a scrobbler, such as Libre.FM.")
@@ -299,8 +301,7 @@ information about tracks being played to a scrobbler, such as Libre.FM.")
          (replace 'check
            (lambda _ (invoke "python" "-m" "pytest" "mpd/tests.py"))))))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)))
+     (list python-mock python-pytest))
     (home-page "https://github.com/Mic92/python-mpd2")
     (synopsis "Python MPD client library")
     (description "Python-mpd2 is a Python library which provides a client
@@ -343,12 +344,12 @@ interface for the Music Player Daemon.")
     (native-inputs
      `(("gettext" ,gettext-minimal)))
     (inputs
-     `(("python-mpd2" ,python-mpd2)
-       ("gtk+" ,gtk+)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gobject-introspection" ,gobject-introspection)
-       ("adwaita-icon-theme" ,adwaita-icon-theme)
-       ("python-pygobject" ,python-pygobject)))
+     (list python-mpd2
+           gtk+
+           gsettings-desktop-schemas
+           gobject-introspection
+           adwaita-icon-theme
+           python-pygobject))
     (synopsis "Elegant client for the Music Player Daemon")
     (description "Sonata is an elegant graphical client for the Music Player
 Daemon (MPD).  It supports playlists, multiple profiles (connecting to different
@@ -369,8 +370,8 @@ MPD servers, search and multimedia key support.")
               (sha256
                (base32
                 "11aa95cg0yca2m2d00sar6wr14g3lc7cfm9bin1h7lk7asdm8azp"))))
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("libmpdclient" ,libmpdclient)))
+    (native-inputs (list pkg-config))
+    (inputs (list libmpdclient))
     (build-system meson-build-system)
     (home-page "https://github.com/joshkunz/ashuffle")
     (synopsis "Automatic library-wide shuffle for mpd")
@@ -401,15 +402,12 @@ other MPD frontends.")
          (add-after 'install 'wrap-program
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((out         (assoc-ref outputs "out"))
-                   (python-path (getenv "PYTHONPATH")))
+                   (python-path (getenv "GUIX_PYTHONPATH")))
                (wrap-program (string-append out "/bin/mpDris2")
-                 `("PYTHONPATH" ":" prefix (,python-path)))
+                 `("GUIX_PYTHONPATH" ":" prefix (,python-path)))
                #t))))))
     (inputs
-     `(("python-mpd2" ,python-mpd2)
-       ("python-dbus" ,python-dbus)
-       ("python-pygobject" ,python-pygobject)
-       ("python" ,python)))             ; Sets PYTHONPATH.
+     (list python-mpd2 python-dbus python-pygobject python))             ; Sets GUIX_PYTHONPATH.
     ;; For bootstrapping.
     (native-inputs
      `(("autoconf" ,autoconf)
@@ -439,19 +437,19 @@ support")
     (arguments
      `(#:tests? #f)) ; No test suite
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("eudev" ,eudev)
-       ("ffmpeg" ,ffmpeg)
-       ("libcdio-paranoia" ,libcdio-paranoia)
-       ("libebur128" ,libebur128)
-       ("libmtp" ,libmtp)
-       ("mpg123" ,mpg123)
-       ("qtbase" ,qtbase-5)
-       ("qtmultimedia" ,qtmultimedia)
-       ("qtsvg" ,qtsvg)
-       ("taglib" ,taglib)
-       ("zlib" ,zlib)))
+     (list eudev
+           ffmpeg
+           libcdio-paranoia
+           libebur128
+           libmtp
+           mpg123
+           qtbase-5
+           qtmultimedia
+           qtsvg
+           taglib
+           zlib))
     (synopsis "Graphical MPD Client")
     (description "Cantata is a graphical client for the Music Player Daemon
 (MPD), using the Qt5 toolkit.  Its user interface is highly customizable,
@@ -482,11 +480,7 @@ artists along with albumart.")
        ("gobject-introspection" ,gobject-introspection)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("avahi" ,avahi)
-       ("dconf" ,dconf)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gtk+" ,gtk+)
-       ("python-pygobject" ,python-pygobject)))
+     (list avahi dconf gsettings-desktop-schemas gtk+ python-pygobject))
     (arguments
      `(#:imported-modules ((guix build glib-or-gtk-build-system)
                            ,@%python-build-system-modules)
@@ -500,9 +494,8 @@ artists along with albumart.")
              (let ((prog (string-append (assoc-ref outputs "out")
                                         "/bin/mcg")))
                (wrap-program prog
-                 `("PYTHONPATH" = (,(getenv "PYTHONPATH")))
-                 `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH"))))
-               #t)))
+                 `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH")))
+                 `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH")))))))
          (add-after 'wrap-program 'glib-or-gtk-wrap
            (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap)))))
     (synopsis "Covergrid for the MPD")
diff --git a/gnu/packages/mpi.scm b/gnu/packages/mpi.scm
index 2011cbcd29..d1686f9afa 100644
--- a/gnu/packages/mpi.scm
+++ b/gnu/packages/mpi.scm
@@ -1,13 +1,13 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014, 2015, 2018, 2019 Eric Bavier <bavier@member.fsf.org>
-;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014-2022 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 Ian Denhardt <ian@zenhack.net>
 ;;; Copyright © 2016 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2017 Dave Love <fx@gnu.org>
 ;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Paul Garlick <pgarlick@tourbillion-technology.com>
-;;; Copyright © 2019 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2019, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -89,9 +89,9 @@
              '())))
     (propagated-inputs
      ;; hwloc.pc lists it in 'Requires.private'.
-     `(("libpciaccess" ,libpciaccess)))
+     (list libpciaccess))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
      `(#:configure-flags '("--localstatedir=/var")
        #:phases
@@ -151,7 +151,7 @@ bind processes, and much more.")
   ;; Note: 2.x isn't the default yet, see above.
   (package
     (inherit hwloc-1)
-    (version "2.5.0")
+    (version "2.7.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://download.open-mpi.org/release/hwloc/v"
@@ -159,7 +159,7 @@ bind processes, and much more.")
                                   "/hwloc-" version ".tar.bz2"))
               (sha256
                (base32
-                "1j2j9wn39a8v91r23xncm1rzls6rjkgkvdvqghbdsnq8ps491kx9"))))
+                "1q440fwvhnxz6j8k5bn3bxj86b3lzbr8fgib78l4iq6gxd9yx302"))))
 
     ;; libnuma is no longer needed.
     (inputs (alist-delete "numactl" (package-inputs hwloc-1)))
@@ -232,8 +232,7 @@ bind processes, and much more.")
        ("valgrind" ,valgrind)
        ("slurm" ,slurm)))              ;for PMI support (launching via "srun")
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("perl" ,perl)))
+     (list pkg-config perl))
     (outputs '("out" "debug"))
     (arguments
      `(#:configure-flags `("--enable-mpi-ext=affinity" ;cr doesn't work
@@ -263,12 +262,11 @@ bind processes, and much more.")
                   (add-after 'unpack 'find-opensm-headers
                     (lambda* (#:key inputs #:allow-other-keys)
                       (setenv "C_INCLUDE_PATH"
-                              (string-append (assoc-ref inputs "opensm")
-                                             "/include/infiniband"))
+                              (search-input-directory inputs
+                                                      "/include/infiniband"))
                       (setenv "CPLUS_INCLUDE_PATH"
-                              (string-append (assoc-ref inputs "opensm")
-                                             "/include/infiniband"))
-                      #t))
+                              (search-input-directory inputs
+                                                      "/include/infiniband"))))
                   (add-before 'build 'remove-absolute
                     (lambda _
                       ;; Remove compiler absolute file names (OPAL_FC_ABSOLUTE
@@ -310,6 +308,16 @@ software vendors, application developers and computer science researchers.")
     ;; See file://LICENSE
     (license license:bsd-2)))
 
+(define-public openmpi-c++
+  (package/inherit openmpi
+    (name "openmpi-c++")
+    (outputs '("out"))
+    (arguments
+     (substitute-keyword-arguments (package-arguments openmpi)
+       ((#:configure-flags flags)
+        `(cons "--enable-mpi-cxx" ,flags))))
+    (synopsis "C++ bindings for MPI")))
+
 ;; TODO: javadoc files contain timestamps.
 (define-public java-openmpi
   (package/inherit openmpi
@@ -349,8 +357,7 @@ software vendors, application developers and computer science researchers.")
                  (lambda* (#:key inputs #:allow-other-keys)
                    (substitute* "ompi/mpi/java/c/Makefile.in"
                      (("\\$\\(top_builddir\\)/ompi/lib@OMPI_LIBMPI_NAME@.la")
-                      (string-append (assoc-ref inputs "openmpi") "/lib/libmpi.la")))
-                   #t))
+                      (search-input-file inputs "/lib/libmpi.la")))))
                (add-after 'install 'strip-jar-timestamps
                  (assoc-ref ant:%standard-phases 'strip-jar-timestamps)))))))
     (synopsis "Java bindings for MPI")))
@@ -414,7 +421,7 @@ only provides @code{MPI_THREAD_FUNNELED}.")))
                 "unittest.skipMPI('openmpi')"))
              #t)))))
     (inputs
-     `(("openmpi" ,openmpi)))
+     (list openmpi))
     (home-page "https://bitbucket.org/mpi4py/mpi4py/")
     (synopsis "Python bindings for the Message Passing Interface standard")
     (description "MPI for Python (mpi4py) provides bindings of the Message
@@ -441,17 +448,15 @@ arrays) that expose a buffer interface.")
                 "1farz5zfx4cd0c3a0wb9pgfypzw0xxql1j1294z1sxslga1ziyjb"))))
     (build-system gnu-build-system)
     (inputs
-     `(("zlib" ,zlib)
-       ("hwloc" ,hwloc-2 "lib")
-       ("slurm" ,slurm)
+     `(,zlib
+       (,hwloc-2 "lib")
+       ,slurm
        ,@(if (and (not (%current-target-system))
                   (member (%current-system) (package-supported-systems ucx)))
-             `(("ucx" ,ucx))
+             (list ucx)
              '())))
     (native-inputs
-     `(("perl" ,perl)
-       ("which" ,which)
-       ("gfortran" ,gfortran)))
+     (list perl which gfortran))
     (outputs '("out" "debug"))
     (arguments
      `(#:configure-flags
@@ -485,8 +490,7 @@ arrays) that expose a buffer interface.")
                       (substitute* (find-files "." "f77tof90")
                         (("/usr/bin/env") (which "env")))
                       (substitute* (find-files "." "\\.sh$")
-                        (("/bin/sh") (which "sh")))
-                      #t))
+                        (("/bin/sh") (which "sh")))))
                   (add-before 'configure 'fix-makefile
                     (lambda _
                       ;; Remove "@hwloclib@" from 'pmpi_convenience_libs'.
@@ -496,8 +500,30 @@ arrays) that expose a buffer interface.")
                         (("^pmpi_convenience_libs = (.*) @hwloclib@ (.*)$" _
                           before after)
                          (string-append "pmpi_convenience_libs = "
-                                        before " " after)))
-                      #t)))))
+                                        before " " after)))))
+                  (add-before 'configure 'define-gfortran-wrapper
+                    (lambda* (#:key inputs #:allow-other-keys)
+                      ;; 'configure' checks whether the Fortran compiler
+                      ;; allows argument type mismatch.  Since gfortran >= 10
+                      ;; does not, provide a wrapper that passes
+                      ;; '-fallow-argument-mismatch' to get the desired
+                      ;; behavior.
+                      (mkdir-p ".gfortran-wrapper/bin")
+                      (call-with-output-file ".gfortran-wrapper/bin/gfortran"
+                        (lambda (port)
+                          (display (string-append "#!" (which "sh") "\n")
+                                   port)
+                          (display
+                           (string-append "exec \"" (which "gfortran")
+                                          "\" -fallow-argument-mismatch"
+                                          " \"$@\"\n")
+                           port)
+                          (chmod port #o755)))
+
+                      (setenv "PATH"
+                              (string-append (getcwd) "/"
+                                             ".gfortran-wrapper/bin:"
+                                             (getenv "PATH"))))))))
     (home-page "https://www.mpich.org/")
     (synopsis "Implementation of the Message Passing Interface (MPI)")
     (description
diff --git a/gnu/packages/mtools.scm b/gnu/packages/mtools.scm
index a660606316..6aafa1eb48 100644
--- a/gnu/packages/mtools.scm
+++ b/gnu/packages/mtools.scm
@@ -29,14 +29,14 @@
 (define-public mtools
   (package
     (name "mtools")
-    (version "4.0.35")
+    (version "4.0.37")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnu/mtools/mtools-"
                                   version ".tar.bz2"))
               (sha256
                (base32
-                "0ja7lkbw6v36p0cq0hs3xsw2ks970k47d350j7cg1lji6wbrwxil"))
+                "0hl3zbj0lyx2m0fyydv0wcgpmyqfg4khp098jqjn2yz44dz1k6vr"))
               (patches
                (search-patches "mtools-mformat-uninitialized.patch"))))
     (build-system gnu-build-system)
diff --git a/gnu/packages/multiprecision.scm b/gnu/packages/multiprecision.scm
index 733e6548b9..6c0d163a10 100644
--- a/gnu/packages/multiprecision.scm
+++ b/gnu/packages/multiprecision.scm
@@ -7,6 +7,7 @@
 ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2018, 2019, 2021 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2021 Vinicius Monego <monego@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -38,7 +39,7 @@
 (define-public gmp
   (package
    (name "gmp")
-   (version "6.2.0")
+   (version "6.2.1")
    (source (origin
             (method url-fetch)
             (uri
@@ -46,10 +47,10 @@
                             version ".tar.xz"))
             (sha256
              (base32
-              "09hmg8k63mbfrx1x3yy6y1yzbbq85kw5avbibhcgrg9z3ganr3i5"))
+              "1wml97fdmpcynsbw9yl77rj29qibfp652d0w3222zlfx5j8jjj7x"))
             (patches (search-patches "gmp-faulty-test.patch"))))
    (build-system gnu-build-system)
-   (native-inputs `(("m4" ,m4)))
+   (native-inputs (list m4))
    (outputs '("out" "debug"))
    (arguments
     `(#:parallel-tests? #f ; mpz/reuse fails otherwise
@@ -113,16 +114,16 @@ It is aimed at use in, for example, cryptography and computational algebra.")
 (define-public mpfr
   (package
    (name "mpfr")
-   (version "4.0.2")
+   (version "4.1.0")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnu/mpfr/mpfr-" version
                                 ".tar.xz"))
             (sha256 (base32
-                     "12m3amcavhpqygc499s3fzqlb8f2j2rr7fkqsm10xbjfc04fffqx"))))
+                     "0zwaanakrqjf84lfr5hfsdr7hncwv9wj0mchlr7cmxigfgqs760c"))))
    (build-system gnu-build-system)
    (outputs '("out" "debug"))
-   (propagated-inputs `(("gmp" ,gmp)))            ; <mpfr.h> refers to <gmp.h>
+   (propagated-inputs (list gmp))            ; <mpfr.h> refers to <gmp.h>
    (synopsis "C library for arbitrary-precision floating-point arithmetic")
    (description
     "GNU@tie{}@acronym{MPFR, Multiple Precision Floating-Point Reliably} is a C
@@ -134,18 +135,18 @@ correct rounding.")
 (define-public mpc
   (package
    (name "mpc")
-   (version "1.1.0")
+   (version "1.2.1")
    (source (origin
             (method url-fetch)
             (uri (string-append
                   "mirror://gnu/mpc/mpc-" version ".tar.gz"))
             (sha256
               (base32
-                "0biwnhjm3rx3hc0rfpvyniky4lpzsvdcwhmcn7f0h4iw2hwcb1b9"))))
+                "0n846hqfqvmsmim7qdlms0qr86f1hck19p12nq3g3z2x74n3sl0p"))))
    (build-system gnu-build-system)
    (outputs '("out" "debug"))
-   (propagated-inputs `(("gmp" ,gmp)              ; <mpc.h> refers to both
-                        ("mpfr" ,mpfr)))
+   (propagated-inputs (list gmp ; <mpc.h> refers to both
+                            mpfr))
    (synopsis "C library for arbitrary-precision complex arithmetic")
    (description
     "GNU@tie{}@acronym{MPC, Multiple Precision Complex library} is a C library
@@ -175,8 +176,8 @@ precision and correctly rounds the results.")
        ("libtool" ,libtool)
        ("texinfo" ,texinfo)))
     (propagated-inputs
-     `(("gmp" ,gmp)                     ; <mpfi.h> refers to both
-       ("mpfr" ,mpfr)))
+     (list gmp ; <mpfi.h> refers to both
+           mpfr))
     (home-page "https://gforge.inria.fr/projects/mpfi/")
     (synopsis "C library for arbitrary-precision interval arithmetic")
     (description
@@ -203,8 +204,8 @@ multiple-precision arithmetic.")
        (sha256
         (base32 "1cdmvb4hsa161rfdjqyhd9sb3fcr43p3a6nsj7cb4kn9f94qmjpj"))))
     (build-system gnu-build-system)
-    (propagated-inputs `(("gmp" ,gmp)   ; <mpfi.h> refers to both
-                         ("mpfr" ,mpfr)))
+    (propagated-inputs (list gmp ; <mpfi.h> refers to both
+                             mpfr))
     (arguments
      `(#:parallel-build? #f))
     (synopsis "C++ package for real arithmetic based on the Real-RAM concept")
@@ -221,19 +222,20 @@ error.  Additionally, iRRAM uses the concept of multi-valued functions.")
 (define-public qd
   (package
     (name "qd")
-    (version "2.3.22")
+    (version "2.3.23")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://crd-legacy.lbl.gov/~dhbailey/mpdist/qd-"
                            version ".tar.gz"))
        (sha256
-        (base32 "1lq609rsp6zpg7zda75lyxzzk1fabzp4jn88j7xfk84mdgjgzh9h"))))
+        (base32 "09pfd77rmy370hy7qdqw84z21y9zpl3fcwzf93rhiv0kwhfg9smk"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (arguments
      `(#:configure-flags `("--disable-enable_fma" ;weird :/
+                           "--disable-static"
                            "--enable-shared"
                            ,,@(if (string-prefix? "aarch64"
                                                   (or (%current-target-system)
@@ -256,6 +258,29 @@ and (for Fortran-90 programs) read/write statements need to be changed.  PSLQ
 and numerical quadrature programs are included.")
     (license bsd-3)))
 
+(define-public cln
+  (package
+    (name "cln")
+    (version "1.3.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://www.ginac.de/CLN/cln-"
+                           version ".tar.bz2"))
+       (sha256
+        (base32 "0jlq9l4hphk7qqlgqj9ihjp4m3rwjbhk6q4v00lsbgbri07574pl"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags (list "--disable-static")))
+    (inputs
+     (list gmp))
+    (home-page "https://www.ginac.de/CLN/")
+    (synopsis "Library for arbitrary precision computations")
+    (description "CLN is a C++ library for efficient computations with all
+kinds of numbers in arbitrary precision.  It provides a rich set of number
+classes and elementary, logical and transcendental functions.")
+    (license gpl2+)))
+
 (define-public tomsfastmath
   (package
     (name "tomsfastmath")
@@ -271,7 +296,7 @@ and numerical quadrature programs are included.")
                 "0f0pmiaskh89sp0q933pafxb914shpaj5ad8sb5rzk1wv8d7mja7"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("libtool" ,libtool)))
+     (list libtool))
     (arguments
      `(#:make-flags (list "-f" "makefile.shared"
                           (string-append "LIBPATH=" %output "/lib")
@@ -379,13 +404,14 @@ multiplies.")
        #:make-flags
        (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
              "CFLAGS += -DLTM_DESC -DUSE_LTM"
-             (string-append "EXTRALIBS=" (assoc-ref %build-inputs "libtommath")
-                            "/lib/libtommath.so")
+             (string-append "EXTRALIBS="
+                            (search-input-file %build-inputs
+                                               "/lib/libtommath.so"))
              (string-append "CC=" ,(cc-for-target)))))
     (native-inputs
-     `(("libtool" ,libtool)))
+     (list libtool))
     (inputs
-     `(("libtommath" ,libtommath)))
+     (list libtommath))
     (home-page "https://www.libtom.net/LibTomCrypt/")
     (synopsis "Cryptographic toolkit")
     (description "LibTomCrypt is a fairly comprehensive, modular and portable
@@ -438,7 +464,7 @@ number generators, public key cryptography and a plethora of other routines.")
        #:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
                           "CC=gcc")))
     (native-inputs
-     `(("libtool" ,libtool)))
+     (list libtool))
     (home-page "https://www.libtom.net/LibTomMath/")
     (synopsis "Portable number theoretic multiple-precision integer library")
     (description "LibTomMath is a portable number theoretic multiple-precision
diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm
index ae4626dc8a..43b1059304 100644
--- a/gnu/packages/music.scm
+++ b/gnu/packages/music.scm
@@ -4,20 +4,20 @@
 ;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
 ;;; Copyright © 2016 Al McElrath <hello@yrns.org>
 ;;; Copyright © 2016, 2017, 2019, 2021 Efraim Flashner <efraim@flashner.co.il>
-;;; Copyright © 2016, 2018 Leo Famulari <leo@famulari.name>
+;;; Copyright © 2016, 2018, 2021 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2016, 2017, 2019 Kei Kebreau <kkebreau@posteo.net>
 ;;; Copyright © 2016 John J. Foerch <jjfoerch@earthlink.net>
 ;;; Copyright © 2016 Alex Griffin <a@ajgrf.com>
 ;;; Copyright © 2017 nikita <nikita@n0.is>
 ;;; Copyright © 2017 Rodger Fox <thylakoid@openmailbox.org>
-;;; Copyright © 2017, 2018, 2019, 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2017–2022 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2017, 2018, 2019, 2021 Pierre Langlois <pierre.langlois@gmx.com>
 ;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2017–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 nee <nee.git@hidamari.blue>
 ;;; Copyright © 2018, 2021 Stefan Reichör <stefan@xsteve.at>
 ;;; Copyright © 2018 Pierre Neidhardt <mail@ambrevar.xyz>
-;;; Copyright © 2018, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2018, 2019, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2018 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
 ;;; Copyright © 2019 Gabriel Hondet <gabrielhondet@gmail.com>
 ;;; Copyright © 2019 Timotej Lazar <timotej.lazar@araneo.si>
@@ -28,9 +28,9 @@
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
 ;;; Copyright © 2020 Lars-Dominik Braun <lars@6xq.net>
 ;;; Copyright © 2020 Giacomo Leidi <goodoldpaul@autistici.org>
-;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
+;;; Copyright © 2020, 2022 Michael Rohleder <mike@rohleder.de>
 ;;; Copyright © 2020 Tanguy Le Carrour <tanguy@bioneland.org>
-;;; Copyright © 2020 Marius Bakke <marius@gnu.org>
+;;; Copyright © 2020, 2022 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2019 Riku Viitanen <riku.viitanen0@gmail.com>
 ;;; Copyright © 2020 Ryan Prior <rprior@protonmail.com>
 ;;; Copyright © 2021 Liliana Marie Prikler <liliana.prikler@gmail.com>
@@ -40,9 +40,10 @@
 ;;; Copyright © 2021 Frank Pursel <frank.pursel@gmail.com>
 ;;; Copyright © 2021 Rovanion Luckey <rovanion.luckey@gmail.com>
 ;;; Copyright © 2021 Justin Veilleux <terramorpha@cock.li>
-;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
+;;; Copyright © 2021, 2022 Felix Gruber <felgru@posteo.net>
 ;;; Copyright © 2021 Simon Streit <simon@netpanic.org>
 ;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
+;;; Copyright © 2021 Thomas Albers Raviola <thomas@thomaslabs.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -60,6 +61,7 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages music)
+  #:use-module (guix gexp)
   #:use-module (guix utils)
   #:use-module (guix packages)
   #:use-module (guix download)
@@ -71,6 +73,7 @@
   #:use-module (guix build-system meson)
   #:use-module (guix build-system perl)
   #:use-module (guix build-system python)
+  #:use-module (guix build-system qt)
   #:use-module (guix build-system scons)
   #:use-module (guix build-system glib-or-gtk)
   #:use-module (guix build-system qt)
@@ -88,6 +91,7 @@
   #:use-module (gnu packages backup)
   #:use-module (gnu packages base) ;libbdf
   #:use-module (gnu packages bash)
+  #:use-module (gnu packages benchmark)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages build-tools)
@@ -111,13 +115,13 @@
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages game-development)
-  #:use-module (gnu packages gcc)
   #:use-module (gnu packages gnupg)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages ghostscript)
   #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
+  #:use-module (gnu packages gnunet)
   #:use-module (gnu packages gpodder)
   #:use-module (gnu packages graphics)
   #:use-module (gnu packages graphviz)
@@ -129,6 +133,7 @@
   #:use-module (gnu packages imagemagick)
   #:use-module (gnu packages java)
   #:use-module (gnu packages libffi)
+  #:use-module (gnu packages libevent)
   #:use-module (gnu packages libusb)
   #:use-module (gnu packages linux) ; for alsa-utils
   #:use-module (gnu packages lirc)
@@ -141,6 +146,7 @@
   #:use-module (gnu packages pcre)
   #:use-module (gnu packages pdf)
   #:use-module (gnu packages perl)
+  #:use-module (gnu packages perl-check)
   #:use-module (gnu packages perl-web)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages protobuf)
@@ -238,39 +244,39 @@
        ("glib:bin" ,glib "bin")         ; for gdbus-codegen
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("dbus" ,dbus)
-       ("qtbase" ,qtbase-5)
-       ("qtmultimedia" ,qtmultimedia)
-       ;; Plugin dependencies
-       ("alsa-lib" ,alsa-lib)
-       ("curl" ,curl)
-       ("faad2" ,faad2)
-       ("ffmpeg" ,ffmpeg)
-       ("flac" ,flac)
-       ("fluidsynth" ,fluidsynth)
-       ("lame" ,lame)
-       ("libbs2b" ,libbs2b)
-       ("libcddb" ,libcddb)
-       ("libcdio-paranoia" ,libcdio-paranoia)
-       ("libcue" ,libcue)
-       ("libnotify" ,libnotify)
-       ("libogg" ,libogg)
-       ("libopenmpt" ,libopenmpt)
-       ("libsamplerate" ,libsamplerate)
-       ("libsndfile" ,libsndfile)
-       ("libvorbis" ,libvorbis)
-       ("libxcomposite" ,libxcomposite)
-       ("libxml2" ,libxml2)
-       ("libxrender" ,libxrender)
-       ("lirc" ,lirc)
-       ("jack" ,jack-1)
-       ("mesa" ,mesa)
-       ("mpg123" ,mpg123)
-       ("neon" ,neon)
-       ("pulseaudio" ,pulseaudio)
-       ("sdl2" ,sdl2)
-       ("soxr" ,soxr)
-       ("wavpack" ,wavpack)))
+     (list dbus
+           qtbase-5
+           qtmultimedia
+           ;; Plugin dependencies
+           alsa-lib
+           curl
+           faad2
+           ffmpeg
+           flac
+           fluidsynth
+           lame
+           libbs2b
+           libcddb
+           libcdio-paranoia
+           libcue
+           libnotify
+           libogg
+           libopenmpt
+           libsamplerate
+           libsndfile
+           libvorbis
+           libxcomposite
+           libxml2
+           libxrender
+           lirc
+           jack-1
+           mesa
+           mpg123
+           neon
+           pulseaudio
+           sdl2
+           soxr
+           wavpack))
     (home-page "https://audacious-media-player.org")
     (synopsis "Modular and skinnable audio player")
     (description
@@ -343,11 +349,9 @@ more.")
                (chmod (string-append out "/share/Aria/score") #o555)
                #t))))))
     (inputs
-     `(("wxwidgets" ,wxwidgets)
-       ("glib" ,glib)
-       ("alsa-lib" ,alsa-lib)))
+     (list wxwidgets glib alsa-lib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://ariamaestosa.sourceforge.net/")
     (synopsis "MIDI sequencer and editor")
     (description
@@ -426,27 +430,27 @@ score, keyboard, guitar, drum and controller views.")
        ("pkg-config" ,pkg-config)
        ("qtlinguist" ,qttools)))
     (inputs
-     `(("boost" ,boost)
-       ("chromaprint" ,chromaprint)
-       ("fftw" ,fftw)
-       ("glib" ,glib)
-       ("glu" ,glu)
-       ("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base)
-       ("gst-plugins-good" ,gst-plugins-good)
-       ("gst-libav" ,gst-libav)
-       ("libcdio" ,libcdio)
-       ("libmygpo-qt" ,libmygpo-qt)
-       ;; TODO: Package libgpod.
-       ("libmtp" ,libmtp)
-       ("libxml2" ,libxml2)
-       ("protobuf" ,protobuf)
-       ("pulseaudio" ,pulseaudio)
-       ("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)
-       ("sqlite" ,sqlite)
-       ("sparsehash" ,sparsehash)
-       ("taglib" ,taglib)))
+     (list boost
+           chromaprint
+           fftw
+           glib
+           glu
+           gstreamer
+           gst-plugins-base
+           gst-plugins-good
+           gst-libav
+           libcdio
+           libmygpo-qt
+           ;; TODO: Package libgpod.
+           libmtp
+           libxml2
+           protobuf
+           pulseaudio
+           qtbase-5
+           qtx11extras
+           sqlite
+           sparsehash
+           taglib))
     (home-page "https://clementine-player.org")
     (synopsis "Music player and library organizer")
     (description "Clementine is a multiplatform music player.  It is inspired
@@ -465,7 +469,7 @@ playing your music.")
 (define-public strawberry
   (package
     (name "strawberry")
-    (version "0.9.3")
+    (version "1.0.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -474,7 +478,7 @@ playing your music.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0lby5zi66i08s0mcygja8l3rbd97inhaxqbhahj8lfxs52r4grrq"))
+                "077dlj0kjcrj4g1h4w8finzykizaar67ik6yng6c8zjp2i5bam1j"))
               (modules '((guix build utils)
                          (ice-9 regex)))
               (snippet
@@ -521,24 +525,24 @@ playing your music.")
        ("qtlinguist" ,qttools)
        ("xorg-server" ,xorg-server-for-tests)))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("boost" ,boost)
-       ("chromaprint" ,chromaprint)
-       ("dbus" ,dbus)
-       ("fftw" ,fftw)
-       ("glib" ,glib)
-       ("gnutls" ,gnutls)
-       ("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base)
-       ("gst-plugins-good" ,gst-plugins-good)
-       ("libcdio" ,libcdio)
-       ("libmtp" ,libmtp)
-       ("protobuf" ,protobuf)
-       ("pulseaudio" ,pulseaudio)
-       ("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)
-       ("sqlite" ,sqlite)
-       ("taglib" ,taglib)))
+     (list alsa-lib
+           boost
+           chromaprint
+           dbus
+           fftw
+           glib
+           gnutls
+           gstreamer
+           gst-plugins-base
+           gst-plugins-good
+           libcdio
+           libmtp
+           protobuf
+           pulseaudio
+           qtbase-5
+           qtx11extras
+           sqlite
+           taglib))
     (home-page "https://www.strawberrymusicplayer.org/")
     (synopsis "Music player and library organizer")
     (description "Strawberry is a music player and music collection organizer.
@@ -585,26 +589,26 @@ It is a fork of Clementine aimed at music collectors and audiophiles.")
     ;; - DISCID_LIBS, apparently different from cd-discid which is included in
     ;;   Guix.  See <http://sourceforge.net/projects/discid/>
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("ao" ,ao)
-       ("faad2" ,faad2)
-       ("ffmpeg" ,ffmpeg)
-       ("flac" ,flac)
-       ("jack" ,jack-1)
-       ("libcddb" ,libcddb)
-       ("libcdio-paranoia" ,libcdio-paranoia)
-       ("libcue" ,libcue)
-       ("libmad" ,libmad)
-       ("libmodplug" ,libmodplug)
-       ("libmpcdec" ,libmpcdec)
-       ("libsamplerate" ,libsamplerate)
-       ("libvorbis" ,libvorbis)
-       ("ncurses" ,ncurses)
-       ("opusfile" ,opusfile)
-       ("pulseaudio" ,pulseaudio)
-       ("wavpack" ,wavpack)))
+     (list alsa-lib
+           ao
+           faad2
+           ffmpeg
+           flac
+           jack-1
+           libcddb
+           libcdio-paranoia
+           libcue
+           libmad
+           libmodplug
+           libmpcdec
+           libsamplerate
+           libvorbis
+           ncurses
+           opusfile
+           pulseaudio
+           wavpack))
      (home-page "https://cmus.github.io/")
      (synopsis "Small console music player")
      (description "Cmus is a small and fast console music player.  It supports
@@ -632,7 +636,7 @@ many input formats and provides a customisable Vi-style user interface.")
              ;; Replace hard-coded diff file name.
              (substitute* "tests/integration.c"
                (("/usr/bin/diff")
-                (string-append (assoc-ref inputs "diffutils") "/bin/diff")))
+                (search-input-file inputs "/bin/diff")))
              ;; Denemo's documentation says to use this command to run its
              ;; test suite.
              (invoke "make" "-C" "tests" "check")))
@@ -640,8 +644,7 @@ many input formats and provides a customisable Vi-style user interface.")
            ;; This phase sets the default path for lilypond to its current
            ;; location in the store.
            (lambda* (#:key inputs #:allow-other-keys)
-             (let* ((lilypond (string-append (assoc-ref inputs "lilypond")
-                                             "/bin/lilypond")))
+             (let* ((lilypond (search-input-file inputs "/bin/lilypond")))
                (substitute* "src/core/prefops.c"
                  (("g_string_new \\(\"lilypond\"\\);")
                   (string-append "g_string_new (\""
@@ -656,22 +659,22 @@ many input formats and provides a customisable Vi-style user interface.")
        ("libtool" ,libtool)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("aubio" ,aubio)
-       ("evince" ,evince)
-       ("fftw" ,fftw)
-       ("fluidsynth" ,fluidsynth)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("gtksourceview" ,gtksourceview-3)
-       ("guile" ,guile-2.0)
-       ("librsvg" ,librsvg)
-       ("libsndfile" ,libsndfile)
-       ("libxml2" ,libxml2)
-       ("lilypond" ,lilypond)
-       ("portaudio" ,portaudio)
-       ("portmidi" ,portmidi)
-       ("rubberband" ,rubberband)))
+     (list alsa-lib
+           aubio
+           evince
+           fftw
+           fluidsynth
+           glib
+           gtk+
+           gtksourceview-3
+           guile-2.0
+           librsvg
+           libsndfile
+           libxml2
+           lilypond
+           portaudio
+           portmidi
+           rubberband))
     (synopsis "Graphical music notation, front-end to GNU Lilypond")
     (description
      "GNU Denemo is a music notation editor that provides a convenient
@@ -726,12 +729,12 @@ settings (aliasing, linear interpolation and cubic interpolation).")
        ((#:configure-flags flags)
         `(cons "-DBUILD_ALLEGRO4=ON" ,flags))))
     (inputs
-     `(("allegro" ,allegro-4)))))
+     (list allegro-4))))
 
 (define-public hydrogen
   (package
     (name "hydrogen")
-    (version "1.0.2")
+    (version "1.1.1")
     (source
      (origin
        (method git-fetch)
@@ -740,7 +743,7 @@ settings (aliasing, linear interpolation and cubic interpolation).")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0nhn2njs8yyxcijxv5zgymf3211y6anzm0v9kn4vnd8kai7zwxxp"))))
+        (base32 "12mwkglyz88hwb16fb3fahn95janim2mrvnxkzp8pcsw3wybi3dn"))))
     (build-system cmake-build-system)
     (arguments
      `(#:test-target "tests"
@@ -758,18 +761,18 @@ settings (aliasing, linear interpolation and cubic interpolation).")
        ("pkg-config" ,pkg-config)
        ("qtlinguist" ,qttools)))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("jack" ,jack-1)
-       ;; ("ladspa" ,ladspa) ; require LADSPA_PATH to be set
-       ("lash" ,lash)
-       ("libarchive" ,libarchive)
-       ("liblo" ,liblo)
-       ("libsndfile" ,libsndfile)
-       ("lrdf" ,lrdf)
-       ("pulseaudio" ,pulseaudio)
-       ("qtbase" ,qtbase-5)
-       ("qtxmlpatterns" ,qtxmlpatterns)
-       ("zlib" ,zlib)))
+     (list alsa-lib
+           jack-1
+           ;; ("ladspa" ,ladspa) ; require LADSPA_PATH to be set
+           lash
+           libarchive
+           liblo
+           libsndfile
+           lrdf
+           pulseaudio
+           qtbase-5
+           qtxmlpatterns
+           zlib))
     (home-page "http://www.hydrogen-music.org")
     (synopsis "Drum machine")
     (description
@@ -797,16 +800,16 @@ enable professional yet simple and intuitive pattern-based drum programming.")
        ("pkg-config" ,pkg-config)
        ("xmllint" ,libxml2)))
     (inputs
-     `(("flac" ,flac)
-       ("gtk+" ,gtk+)
-       ("id3lib" ,id3lib)
-       ("libid3tag" ,libid3tag)
-       ("libvorbis" ,libvorbis)
-       ("opusfile" ,opusfile)
-       ("speex" ,speex)
-       ("taglib" ,taglib)
-       ("wavpack" ,wavpack)
-       ("yelp" ,yelp)))
+     (list flac
+           gtk+
+           id3lib
+           libid3tag
+           libvorbis
+           opusfile
+           speex
+           taglib
+           wavpack
+           yelp))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -1091,12 +1094,9 @@ audio and video).")
       (modify-phases %standard-phases
         (delete 'configure))))
    (inputs
-    `(("cairo" ,cairo)
-      ("libx11" ,libx11)
-      ("lv2" ,lv2)
-      ("fluidsynth" ,fluidsynth)))
+    (list cairo libx11 lv2 fluidsynth))
    (native-inputs
-    `(("pkg-config" ,pkg-config)))
+    (list pkg-config))
    (home-page "https://github.com/brummer10/Fluida.lv2")
    (synopsis "Fluidsynth as an LV2 audio plugin")
    (description "Fluida is an audio plugin in the LV2 format that acts as
@@ -1156,14 +1156,14 @@ a frontend for fluidsynth.")
                                 (string-append share "/Surge"))
               #t))))))
    (inputs
-    `(("cairo" ,cairo)
-      ("libxkbcommon" ,libxkbcommon)
-      ("python" ,python)
-      ("xcb-util" ,xcb-util)
-      ("xcb-util-cursor" ,xcb-util-cursor)
-      ("xcb-util-keysyms" ,xcb-util-keysyms)))
+    (list cairo
+          libxkbcommon
+          python
+          xcb-util
+          xcb-util-cursor
+          xcb-util-keysyms))
    (native-inputs
-    `(("pkg-config" ,pkg-config)))
+    (list pkg-config))
    (home-page "https://surge-synthesizer.github.io/")
    (synopsis "Synthesizer plugin")
    (description
@@ -1203,14 +1203,14 @@ engine (except effects) that can be used for layering or split patches.")
                (("Options") "Variables"))
              #t)))))
     (inputs
-     `(("boost" ,boost)
-       ("jack" ,jack-1)
-       ("libsndfile" ,libsndfile)
-       ("libsamplerate" ,libsamplerate)
-       ("liblo" ,liblo)
-       ("rubberband" ,rubberband)))
+     (list boost
+           jack-1
+           libsndfile
+           libsamplerate
+           liblo
+           rubberband))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://das.nasophon.de/klick/")
     (synopsis "Metronome for JACK")
     (description
@@ -1253,12 +1253,9 @@ you to define complex tempo maps for entire songs or performances.")
              ;; TODO Work out how to run the spec/providers Python tests
              #t)))))
     (inputs
-     `(("glib" ,glib)
-       ("curl" ,curl)
-       ("sqlite" ,sqlite)))
+     (list glib curl sqlite))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("check" ,check)))
+     (list pkg-config check))
     (home-page "https://github.com/sahib/glyr")
     (synopsis "Search engine for music related metadata")
     (description
@@ -1308,9 +1305,7 @@ for path in [path for path in sys.path if 'site-packages' in path]: site.addsite
                                "/bin/klick'")))
              #t)))))
     (inputs
-     `(("klick" ,klick)
-       ("python2-pyliblo" ,python2-pyliblo)
-       ("python2-pygtk" ,python2-pygtk)))
+     (list klick python2-pyliblo python2-pygtk))
     (native-inputs
      `(("gettext" ,gettext-minimal)))
     (home-page "http://das.nasophon.de/gtklick/")
@@ -1320,50 +1315,6 @@ for path in [path for path in sys.path if 'site-packages' in path]: site.addsite
 interface.  It is implemented as a frontend to @code{klick}.")
     (license license:gpl2+)))
 
-(define-public libgme
-  (package
-    (name "libgme")
-    (version "0.6.3")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://bitbucket.org/mpyne/game-music-emu/"
-                                  "downloads/game-music-emu-" version
-                                  ".tar.xz"))
-              (sha256
-               (base32
-                "07857vdkak306d9s5g6fhmjyxk7vijzjhkmqb15s7ihfxx9lx8xb"))))
-    (build-system cmake-build-system)
-    (arguments
-     '(#:tests? #f))                    ; no check target
-    (home-page "https://bitbucket.org/mpyne/game-music-emu")
-    (synopsis "Video game music file playback library")
-    (description
-     "Game-music-emu is a collection of video game music file emulators that
-support the following formats and systems:
-@table @code
-@item AY
-ZX Spectrum/Asmtrad CPC
-@item GBS
-Nintendo Game Boy
-@item GYM
-Sega Genesis/Mega Drive
-@item HES
-NEC TurboGrafx-16/PC Engine
-@item KSS
-MSX Home Computer/other Z80 systems (doesn't support FM sound)
-@item NSF/NSFE
-Nintendo NES/Famicom (with VRC 6, Namco 106, and FME-7 sound)
-@item SAP
-Atari systems using POKEY sound chip
-@item SPC
-Super Nintendo/Super Famicom
-@item VGM/VGZ
-Sega Master System/Mark III, Sega Genesis/Mega Drive, BBC Micro
-@end table")
-    (license (list license:lgpl2.1+
-                   ;; demo and player directories are under the Expat license
-                   license:expat))))
-
 (define-public lingot
   (package
     (name "lingot")
@@ -1379,20 +1330,20 @@ Sega Master System/Mark III, Sega Genesis/Mega Drive, BBC Micro
         (base32 "04lcjzfhddbyskxr2068z609y6x0s2gjx1wl78w0dkxdi459zrn9"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("cunit" ,cunit)
-       ("glib" ,glib "bin")             ; for glib-compile-resources
-       ("intltool" ,intltool)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf
+           automake
+           cunit
+           `(,glib "bin") ; for glib-compile-resources
+           intltool
+           libtool
+           pkg-config))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("fftw" ,fftw)
-       ("gtk+" ,gtk+)
-       ("jack" ,jack-2)
-       ("json-c" ,json-c)
-       ("pulseaudio" ,pulseaudio)))
+     (list alsa-lib
+           fftw
+           gtk+
+           jack-2
+           json-c
+           pulseaudio))
     (home-page "http://lingot.nongnu.org/")
     (synopsis "Accurate & configurable musical instrument tuner")
     (description
@@ -1453,15 +1404,13 @@ frequency.")
                                  (not (string-suffix? ".lv2" name))))))
                #t))))))
     (inputs
-     `(("fftwf" ,fftwf)
-       ("jack" ,jack-1)                 ; for the standalone JACK application
-       ("libsamplerate" ,libsamplerate)
-       ("mesa" ,mesa)
-       ("libsndfile" ,libsndfile)))
+     (list fftwf
+           jack-1 ; for the standalone JACK application
+           libsamplerate
+           mesa
+           libsndfile))
     (native-inputs
-     `(("ladspa" ,ladspa)
-       ("lv2" ,lv2)
-       ("pkg-config" ,pkg-config)))
+     (list ladspa lv2 pkg-config))
     (synopsis "Sample slicer audio plugin")
     (description
      "Ninjas 2 is a rewrite of the Ninjas sample slicer audio plugin.
@@ -1494,23 +1443,22 @@ and auto-mapping slices to MIDI note numbers.")
                             "/share/fonts/opentype/"))
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'use-texlive-union
-           (lambda _
-             ;; FIXME: fonts are not found and have to be generated in HOME.
-             (setenv "HOME" "/tmp")
-             ;; The test for the "lh" package fails, even though it is among
-             ;; the inputs.
-             (substitute* "configure"
-               (("TEX_FIKPARM=.*") "TEX_FIKPARM=found\n"))
-             #t))
          (add-after 'unpack 'fix-path-references
            (lambda _
              (substitute* "scm/backend-library.scm"
                (("\\(search-executable '\\(\"gs\"\\)\\)")
                 (string-append "\"" (which "gs") "\""))
                (("\"/bin/sh\"")
-                (string-append "\"" (which "sh") "\"")))
-             #t))
+                (string-append "\"" (which "sh") "\"")))))
+         (add-after 'fix-path-references 'adjust-to-API-change
+           (lambda _
+             (substitute* '("Documentation/pictures/GNUmakefile"
+                            "stepmake/stepmake/tex-rules.make")
+               ((".*-c .setpdfwrite.*") ""))
+             (substitute* "scm/backend-library.scm"
+               (("\"-c.setpdfwrite\"") ""))
+             (substitute* "scm/framework-ps.scm"
+               (("\".setpdfwrite ") "\""))))
          (add-before 'configure 'prepare-configuration
            (lambda _
              (substitute* "configure"
@@ -1521,14 +1469,12 @@ and auto-mapping slices to MIDI note numbers.")
                ;; Also allow for SOURCE_DATE_EPOCH = 0 in fontforge.
                (("20110222") "19700101"))
              (setenv "out" "www")
-             (setenv "conf" "www")
-             #t))
+             (setenv "conf" "www")))
          (add-after 'install 'install-info
            (lambda _
              (invoke "make"
                      "-j" (number->string (parallel-job-count))
-                     "conf=www" "install-info")
-             #t)))))
+                     "conf=www" "install-info"))))))
     (inputs
      `(("guile" ,guile-1.8)
        ("font-dejavu" ,font-dejavu)
@@ -1547,9 +1493,9 @@ and auto-mapping slices to MIDI note numbers.")
        ("gettext" ,gettext-minimal)
        ("imagemagick" ,imagemagick)
        ("netpbm" ,netpbm)               ;for pngtopnm
-       ("texlive" ,(texlive-union (list texlive-metapost
-                                        texlive-generic-epsf
-                                        texlive-latex-lh
+       ("texlive" ,(texlive-updmap.cfg (list texlive-metapost
+                                        texlive-epsf
+                                        texlive-lh
                                         texlive-latex-cyrillic)))
        ("texinfo" ,texinfo)
        ("texi2html" ,texi2html-1.82)
@@ -1569,10 +1515,41 @@ Guile.")
     ;; more than an hour of silence, so double the max silent time.
     (properties `((max-silent-time . 7200)))))
 
+(define-public music21
+  (package
+    (name "music21")
+    (version "7.1.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "music21" version))
+        (sha256
+          (base32 "17v2id8qm99xqymqsdczq173fmbdha4w109ahh8j1d9l5a7mqc86"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               ;; See: https://github.com/cuthbertLab/music21/issues/1164
+               (invoke "python" "-m" "music21.stream.tests")))))))
+    (propagated-inputs
+      (list python-chardet python-joblib python-more-itertools
+            python-webcolors))
+    (home-page "https://web.mit.edu/music21/")
+    (synopsis "Toolkit for Computational Musicology")
+    (description
+     "Music21 is a set of tools for helping scholars and other active
+listeners answer questions about music quickly and simply.")
+    ;; Software is dual-licensed.
+    (license (list license:bsd-3 license:lgpl3+))))
+
 (define-public abjad
   (package
     (name "abjad")
-    (version "3.3")
+    (version "3.4")
     (source
      (origin
        (method git-fetch)
@@ -1582,34 +1559,40 @@ Guile.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1dzf5v7pawbzkb4qxp4s5z4r3gibkk705pag83yvgzkx6fd6jf2g"))))
+         "0s63vk9fifp0im9c31kb9ck39mbaxhrls993d8fvg0nkg41z1jnz"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'loosen-requirements
+           (lambda _
+             (substitute* "setup.py"
+               ;; Permit newer versions of uqbar.  Remove for >3.4.
+               ((", <0\\.5\\.0")
+                ""))))
          (replace 'check
            (lambda* (#:key tests? #:allow-other-keys)
              (when tests?
                ;; See: https://stackoverflow.com/a/34140498
-               (invoke "python" "-m" "pytest" "tests")
-               #t))))))
-    (native-inputs
-     `(("python-black" ,python-black)
-       ("python-flake8" ,python-flake8)
-       ("python-iniconfig" ,python-iniconfig)
-       ("python-isort" ,python-isort)
-       ("python-mypy" ,python-mypy)
-       ("python-pytest" ,python-pytest-6)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-sphinx-autodoc-typehints" ,python-sphinx-autodoc-typehints)))
+               (invoke "python" "-m" "pytest" "tests")))))))
     (inputs
-     `(("lilypond" ,lilypond)))
+     (list lilypond))
     (propagated-inputs
-     `(("python-ply" ,python-ply)
-       ("python-quicktions" ,python-quicktions)
-       ("python-roman" ,python-roman)
-       ("python-six" ,python-six)
-       ("python-uqbar" ,python-uqbar)))
+     (list python-ply
+           python-quicktions
+           python-roman
+           python-six
+           python-uqbar
+           ;; XXX: These test dependencies(?) are listed as install_requires
+           ;; in setup.py.  Propagate accordingly.
+           python-black
+           python-flake8
+           python-isort
+           python-mypy
+           python-pytest
+           python-pytest-cov
+           python-pytest-helpers-namespace
+           python-sphinx-autodoc-typehints))
     (home-page "https://abjad.github.io")
     (synopsis "Python API for building LilyPond files")
     (description
@@ -1627,7 +1610,7 @@ typographic detail of symbols on the page.")
 (define-public abjad-ext-rmakers
   (package
     (name "abjad-ext-rmakers")
-    (version "3.3")
+    (version "3.4")
     (source
      (origin
        (method git-fetch)
@@ -1637,7 +1620,7 @@ typographic detail of symbols on the page.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "03nry8lzh3s81yq4lw8y6j63m7zdsl20q7rvx9cfmp3rmbvlaycs"))))
+         "0wma9vzn42h1rhbzh2dwjsrzjhsi1yqdgn6wx1dfk78vaki6prd8"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -1648,17 +1631,17 @@ typographic detail of symbols on the page.")
                (invoke "python" "-m" "pytest" ".")
                #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-pytest" ,python-pytest-6)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-helpers-namespace" ,python-pytest-helpers-namespace)))
+     (list lilypond
+           python-black
+           python-flake8
+           python-iniconfig
+           python-isort
+           python-mypy
+           python-pytest
+           python-pytest-cov
+           python-pytest-helpers-namespace))
     (propagated-inputs
-     `(("abjad" ,abjad)))
+     (list abjad))
     (home-page "https://abjad.github.io")
     (synopsis "Abjad rhythm-maker extension package")
     (description
@@ -1669,7 +1652,7 @@ and manipulating rhythms such as accelerandi, taleas, and more.")
 (define-public abjad-ext-nauert
   (package
     (name "abjad-ext-nauert")
-    (version "3.3")
+    (version "3.4")
     (source
      (origin
        (method git-fetch)
@@ -1679,7 +1662,7 @@ and manipulating rhythms such as accelerandi, taleas, and more.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "07vgfjh32vmf652lcl2vrbzr0h6nld00qbgwbf9i1kk3xwhvklc9"))))
+         "05hr2lr6myzi493k8vc19cqzraxxnbdwlckwbnras19l5g5ns38x"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -1690,17 +1673,17 @@ and manipulating rhythms such as accelerandi, taleas, and more.")
                (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-pytest" ,python-pytest-6)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-helpers-namespace" ,python-pytest-helpers-namespace)))
+     (list lilypond
+           python-black
+           python-flake8
+           python-iniconfig
+           python-isort
+           python-mypy
+           python-pytest
+           python-pytest-cov
+           python-pytest-helpers-namespace))
     (propagated-inputs
-     `(("abjad" ,abjad)))
+     (list abjad))
     (home-page "https://abjad.github.io")
     (synopsis "Abjad quantization extension, based on Paul Nauert's Q-Grids")
     (description
@@ -1728,6 +1711,12 @@ music theorist Paul Nauert's quantization grids or Q-Grids, for short.")
      `(#:tests? #f
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'loosen-requirements
+           (lambda _
+             (substitute* "setup.py"
+               ;; Don't require a specific version of abjad.
+               (("abjad==")
+                "abjad>="))))
          (replace 'check
            (lambda* (#:key tests? inputs outputs #:allow-other-keys)
              (when tests?
@@ -1737,18 +1726,17 @@ music theorist Paul Nauert's quantization grids or Q-Grids, for short.")
                (invoke "jupyter" "nbconvert" "--to=html"
                "--ExecutePreprocessor.enabled=True" "tests/test.ipynb")))))))
     (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-pytest" ,python-pytest-6)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-helpers-namespace" ,python-pytest-helpers-namespace)))
+     (list lilypond
+           python-black
+           python-flake8
+           python-iniconfig
+           python-isort
+           python-mypy
+           python-pytest
+           python-pytest-cov
+           python-pytest-helpers-namespace))
     (propagated-inputs
-     `(("abjad" ,abjad)
-       ("jupyter" ,jupyter)))
+     (list abjad jupyter))
     (home-page "https://abjad.github.io")
     (synopsis "Abjad IPython Extension")
     (description
@@ -1785,12 +1773,9 @@ music theorist Paul Nauert's quantization grids or Q-Grids, for short.")
                      '()))
          #:python ,python-2))
       (inputs
-       `(("jack" ,jack-1)
-         ("libsigc++" ,libsigc++)
-         ("liblo" ,liblo)
-         ("ntk" ,ntk)))
+       (list jack-1 libsigc++ liblo ntk))
       (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
       (home-page "https://non.tuxfamily.org/wiki/Non%20Sequencer")
       (synopsis "Pattern-based MIDI sequencer")
       (description
@@ -1810,11 +1795,9 @@ transport is rolling.")
         `(cons "--project=session-manager"
                (delete "--project=sequencer" ,flags)))))
     (inputs
-     `(("jack" ,jack-1)
-       ("liblo" ,liblo)
-       ("ntk" ,ntk)))
+     (list jack-1 liblo ntk))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://non.tuxfamily.org/nsm/")
     (synopsis "Audio session management")
     (description
@@ -1832,13 +1815,9 @@ communicate with the session management daemon.")
         `(cons "--project=mixer"
                (delete "--project=sequencer" ,flags)))))
     (inputs
-     `(("jack" ,jack-1)
-       ("liblo" ,liblo)
-       ("ladspa" ,ladspa)
-       ("lrdf" ,lrdf)
-       ("ntk" ,ntk)))
+     (list jack-1 liblo ladspa lrdf ntk))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://non.tuxfamily.org/wiki/Non%20Mixer")
     (synopsis "Modular digital audio mixer")
     (description
@@ -1858,12 +1837,9 @@ studio.")
         `(cons "--project=timeline"
                (delete "--project=sequencer" ,flags)))))
     (inputs
-     `(("jack" ,jack-1)
-       ("liblo" ,liblo)
-       ("libsndfile" ,libsndfile)
-       ("ntk" ,ntk)))
+     (list jack-1 liblo libsndfile ntk))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://non.tuxfamily.org/wiki/Non%20Timeline")
     (synopsis "Modular digital audio timeline arranger")
     (description
@@ -1892,13 +1868,9 @@ complete studio.")
                   "07k7rccqqg7lnygkh97a200l1i6s1rl92n01v0q6n4257sinir6f"))))
       (build-system gnu-build-system)
       (inputs
-       `(("liblo" ,liblo)
-         ("gtkmm" ,gtkmm)
-         ("alsa-lib" ,alsa-lib)
-         ("libxml++" ,libxml++-2)))
+       (list liblo gtkmm-3 alsa-lib libxml++-2))
       (native-inputs
-       `(("glib:bin" ,glib "bin")
-         ("pkg-config" ,pkg-config)))
+       (list `(,glib "bin") pkg-config))
       (home-page "https://github.com/onkelDead/tascam-gtk")
       (synopsis "GTK+ based application to control Tascam US-16x08 DSP mixer")
       (description "This is a mixer application to control the Tascam US-16x08
@@ -1910,7 +1882,7 @@ device supports.")
 (define-public bsequencer
   (package
     (name "bsequencer")
-    (version "1.8.0")
+    (version "1.8.10")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1919,21 +1891,20 @@ device supports.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0w7iwzz2r4a699fi24qk71vv2k3jpl9ylzlgmvyc3rlgad0m01k1"))))
+                "0w3m7x0619iq8rafcy0bal4gwh9m9h7iq93q7gkpxhv6dq58ix6l"))))
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags
-       (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
-       #:tests? #f ; there are none
+       (list (string-append "CC=" ,(cc-for-target))
+             (string-append "PREFIX=" (assoc-ref %outputs "out")))
+       #:tests? #f                      ; there are none
        #:phases
        (modify-phases %standard-phases
          (delete 'configure))))
     (inputs
-     `(("cairo" ,cairo)
-       ("lv2" ,lv2)
-       ("libx11" ,libx11)))
+     (list cairo lv2 libx11))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/sjaehn/BSEQuencer")
     (synopsis "Multi-channel MIDI step sequencer LV2 plugin")
     (description
@@ -1945,7 +1916,7 @@ with a selectable pattern matrix size.")
   (package
     (inherit bsequencer)
     (name "bchoppr")
-    (version "1.8.0")
+    (version "1.10.10")
     (source
      (origin
        (method git-fetch)
@@ -1954,8 +1925,7 @@ with a selectable pattern matrix size.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32
-         "1nd6byy75f0rbz9dm9drhxmpsfhxhg0y7q3v2m3098llynhy9k2j"))))
+        (base32 "0gxz0cpxdfj7ajcd9yg05d26i7p24mx5865vy3ph76ni8kycdlrc"))))
     (synopsis "Audio stream-chopping LV2 plugin")
     (description "B.Choppr cuts the audio input stream into a repeated
 sequence of up to 16 chops.  Each chop can be leveled up or down (gating).
@@ -1967,7 +1937,7 @@ B.Choppr is the successor of B.Slizr.")
   (package
     (inherit bsequencer)
     (name "bshapr")
-    (version "0.9")
+    (version "0.13")
     (source
      (origin
        (method git-fetch)
@@ -1976,7 +1946,7 @@ B.Choppr is the successor of B.Slizr.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "04zd3a178i2nivg5rjailzqvc5mlnilmhj1ziygmbhshbrywplri"))))
+        (base32 "1qr3fxqcplgb6iqi2vxc27jghhv6qsidww2by15zb2vs34yh73pl"))))
     (synopsis "Beat/envelope shaper LV2 plugin")
     (description "B.Shapr is a beat/envelope shaper LV2 plugin.")
     (home-page "https://github.com/sjaehn/BShapr")
@@ -1986,7 +1956,7 @@ B.Choppr is the successor of B.Slizr.")
   (package
     (inherit bsequencer)
     (name "bjumblr")
-    (version "1.4.2")
+    (version "1.6.8")
     (source
      (origin
        (method git-fetch)
@@ -1995,12 +1965,9 @@ B.Choppr is the successor of B.Slizr.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32
-         "0kl6hrxmqrdf0195bfnzsa2h1073fgiqrfhg2276fm1954sm994v"))))
+        (base32 "00fgax8aqqggs54pjpagw5pc30kgxaghh8mrzpqwhs06cnchcam9"))))
     (inputs
-     `(("cairo" ,cairo)
-       ("libsndfile" ,libsndfile)
-       ("lv2" ,lv2)))
+     (list cairo libsndfile lv2))
     (synopsis "Pattern-controlled audio stream/sample re-sequencer LV2 plugin")
     (description "B.Jumblr is a pattern-controlled audio stream / sample
 re-sequencer LV2 plugin.")
@@ -2011,7 +1978,7 @@ re-sequencer LV2 plugin.")
   (package
     (inherit bsequencer)
     (name "bschaffl")
-    (version "1.2.0")
+    (version "1.4.8")
     (source
      (origin
        (method git-fetch)
@@ -2020,8 +1987,7 @@ re-sequencer LV2 plugin.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32
-         "1c09acqrbd387ba41f8ch1qykdap5h6cg9if5pgd16i4dmjnpghj"))))
+        (base32 "1kfc75xhj365fwl8cbvhg5chwz1snzcvf4929flds02ljylc7k6d"))))
     (inputs
      `(("cairo" ,cairo)
        ("fontconfig" ,fontconfig)
@@ -2103,9 +2069,9 @@ for path in [path for path in sys.path if 'site-packages' in path]: site.addsite
            (lambda* (#:key inputs outputs #:allow-other-keys)
              ;; Make sure 'solfege' runs with the correct PYTHONPATH.
              (let* ((out (assoc-ref outputs "out"))
-                    (path (getenv "PYTHONPATH")))
+                    (path (getenv "GUIX_PYTHONPATH")))
                (wrap-program (string-append out "/bin/solfege")
-                 `("PYTHONPATH" ":" prefix (,path))))
+                 `("GUIX_PYTHONPATH" ":" prefix (,path))))
              #t)))))
     (inputs
      `(("python" ,python-2)
@@ -2114,11 +2080,11 @@ for path in [path for path in sys.path if 'site-packages' in path]: site.addsite
        ("gtk" ,gtk+)
        ("lilypond" ,lilypond)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("txt2man" ,txt2man)
-       ("libxml2" ,libxml2) ; for tests
-       ("ghostscript" ,ghostscript)
-       ("texinfo" ,texinfo-5)))
+     (list pkg-config
+           txt2man
+           libxml2 ; for tests
+           ghostscript
+           texinfo-5))
     (home-page "https://www.gnu.org/software/solfege/")
     (synopsis "Ear training")
     (description
@@ -2163,8 +2129,7 @@ your own lessons.")
        ("timidity" ,timidity++)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("doctest" ,doctest)
-       ("pkg-config" ,pkg-config)))
+     (list doctest pkg-config))
     (home-page "https://github.com/powertab/powertabedito")
     (synopsis "Guitar tablature editor")
     (description
@@ -2196,22 +2161,11 @@ Editor.  It is compatible with Power Tab Editor 1.7 and Guitar Pro.")
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "jalv.select.cpp"
                (("echo \\$PATH.*tr ':'.*xargs ls")
-                (string-append "ls -1 " (assoc-ref inputs "jalv") "/bin")))
-             #t))
-         (add-before 'reset-gzip-timestamps 'make-manpages-writable
-           (lambda* (#:key outputs #:allow-other-keys)
-             (for-each make-file-writable
-                       (find-files (string-append (assoc-ref outputs "out")
-                                                  "/share/man")
-                                   ".*\\.gz$"))
-             #t)))))
+                (string-append "ls -1 " (assoc-ref inputs "jalv") "/bin"))))))))
     (inputs
-     `(("lilv" ,lilv)
-       ("lv2" ,lv2)
-       ("jalv" ,jalv)
-       ("gtkmm" ,gtkmm-2)))
+     (list lilv lv2 jalv gtkmm-2))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/brummer10/jalv_select")
     (synopsis "GUI to select LV2 plugins and run them with jalv")
     (description
@@ -2219,10 +2173,116 @@ Editor.  It is compatible with Power Tab Editor 1.7 and Guitar Pro.")
 users to select LV2 plugins and run them with jalv.")
     (license license:public-domain)))
 
+(define-public mixxx
+  (package
+    (name "mixxx")
+    (version "2.3.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/mixxxdj/mixxx")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (patches
+        (search-patches "mixxx-link-qtscriptbytearray-qtscript.patch"
+                        "mixxx-system-googletest-benchmark.patch"))
+       (sha256
+        (base32 "04781s4ajdlwgvf12v2mvh6ia5grhc5pn9d75b468qci3ilnmkg8"))
+       (modules '((guix build utils)))
+       (snippet
+        ;; Delete libraries that we already have or don't need.
+        ;; TODO: try to unbundle more (see lib/).
+        `(begin
+           (let ((third-parties '("apple" "benchmark" "googletest" "hidapi"
+                                  "libebur128")))
+             (with-directory-excursion "lib"
+               (map (lambda (third-party)
+                      (delete-file-recursively third-party))
+                    third-parties)))
+           #t))))
+    (build-system qt-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         ;; Tests need a running X server.
+         (add-before 'check 'prepare-x-for-test
+           (lambda _
+             (system "Xvfb &")
+             (setenv "DISPLAY" ":0")))
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               ;; This test fails.  I don't know why.
+               (invoke "ctest" "-E" "TagLibTest.WriteID3v2Tag"))))
+         (add-after 'install 'wrap-executable
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (faad2 (assoc-ref inputs "faad2")))
+               (wrap-program (string-append out "/bin/mixxx")
+                 `("LD_LIBRARY_PATH" ":" prefix
+                   ,(list (string-append faad2 "/lib"))))))))))
+    (native-inputs
+     `(("benchmark" ,benchmark)
+       ("googletest" ,googletest)
+       ("python" ,python-wrapper)
+       ("qttools" ,qttools)
+       ("xorg-server" ,xorg-server-for-tests)))
+    (inputs
+     `(("bash" ,bash-minimal)
+       ("chromaprint" ,chromaprint)
+       ("faad2" ,faad2)
+       ("ffmpeg" ,ffmpeg)
+       ("fftw" ,fftw)
+       ("flac" ,flac)
+       ("glu" ,glu)
+       ("hidapi" ,hidapi)
+       ("jack" ,jack-1)
+       ("lame" ,lame)
+       ("libdjinterop" ,libdjinterop)
+       ("libebur128" ,libebur128)
+       ("libid3tag" ,libid3tag)
+       ("libkeyfinder" ,libkeyfinder)
+       ("libmad" ,libmad)
+       ("libmp4v2" ,libmp4v2)
+       ("libmodplug" ,libmodplug)
+       ("libsndfile" ,libsndfile)
+       ("libshout" ,libshout)
+       ;; XXX: Mixxx complains the libshout-idjc package suffers from bug
+       ;; lp1833225 and refuses to use it.  Use the bundle for now.
+       ;; ("libshout-idjc" ,libshout-idjc)
+       ("libusb" ,libusb)
+       ("libvorbis" ,libvorbis)
+       ("lilv" ,lilv)
+       ("mp3guessenc" ,mp3guessenc)
+       ("openssl" ,openssl)
+       ("opusfile" ,opusfile)
+       ("portaudio" ,portaudio)
+       ("portmidi" ,portmidi)
+       ("protobuf" ,protobuf)
+       ("qtbase" ,qtbase-5)
+       ("qtdeclarative" ,qtdeclarative)
+       ("qtkeychain" ,qtkeychain)
+       ("qtscript" ,qtscript)
+       ("qtsvg" ,qtsvg)
+       ("qtx11extras" ,qtx11extras)
+       ("rubberband" ,rubberband)
+       ("soundtouch" ,soundtouch)
+       ("sqlite" ,sqlite)
+       ("taglib" ,taglib)
+       ("upower" ,upower)
+       ("vamp" ,vamp)
+       ("wavpack" ,wavpack)))
+    (home-page "https://mixxx.org/")
+    (synopsis "DJ software to perform live mixes")
+    (description "Mixxx is a DJ software.  It integrates the tools DJs need to
+perform creative live mixes with digital music files.")
+    (license license:gpl2+)))
+
 (define-public synthv1
   (package
     (name "synthv1")
-    (version "0.9.23")
+    (version "0.9.24")
     (source (origin
               (method url-fetch)
               (uri
@@ -2230,20 +2290,19 @@ users to select LV2 plugins and run them with jalv.")
                               "/synthv1-" version ".tar.gz"))
               (sha256
                (base32
-                "03lvq84pg0agdn16i7ng6j7lp1ii3inf4pzjypnkywb2km7zcpni"))))
-    (build-system gnu-build-system)
+                "0m9xpl7kq0zlain8598q5cqrh1c7ima2w8jrpq7ds8vh97r7p1bl"))))
+    (build-system cmake-build-system)
     (arguments
      `(#:tests? #f))                    ; there are no tests
     (inputs
-     `(("jack" ,jack-1)
-       ("lv2" ,lv2)
-       ("alsa-lib" ,alsa-lib)
-       ("non-session-manager" ,non-session-manager)
-       ("liblo" ,liblo)
-       ("qtbase" ,qtbase-5)))
+     (list jack-1
+           lv2
+           alsa-lib
+           non-session-manager
+           liblo
+           qtbase-5))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list pkg-config qttools))
     (home-page "https://synthv1.sourceforge.io")
     (synopsis "Polyphonic subtractive synthesizer")
     (description
@@ -2254,7 +2313,7 @@ oscillators and stereo effects.")
 (define-public drumkv1
   (package
     (name "drumkv1")
-    (version "0.9.23")
+    (version "0.9.24")
     (source (origin
               (method url-fetch)
               (uri
@@ -2262,21 +2321,20 @@ oscillators and stereo effects.")
                               "/drumkv1-" version ".tar.gz"))
               (sha256
                (base32
-                "1jgsml9wxzwnqyb6wjn9zk94qvxs6c898hyj10sza4d9l6r1rnw0"))))
-    (build-system gnu-build-system)
+                "04k0mkvlz9ka0mlck4g7c86s1rhb9pkhml6j6n9b5hwlbq8a9mxk"))))
+    (build-system cmake-build-system)
     (arguments
      `(#:tests? #f))                    ; there are no tests
     (inputs
-     `(("jack" ,jack-1)
-       ("lv2" ,lv2)
-       ("libsndfile" ,libsndfile)
-       ("alsa-lib" ,alsa-lib)
-       ("non-session-manager" ,non-session-manager)
-       ("liblo" ,liblo)
-       ("qtbase" ,qtbase-5)))
+     (list jack-1
+           lv2
+           libsndfile
+           alsa-lib
+           non-session-manager
+           liblo
+           qtbase-5))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list pkg-config qttools))
     (home-page "https://drumkv1.sourceforge.io")
     (synopsis "Drum-kit sampler synthesizer with stereo effects")
     (description
@@ -2287,7 +2345,7 @@ effects.")
 (define-public samplv1
   (package
     (name "samplv1")
-    (version "0.9.23")
+    (version "0.9.24")
     (source (origin
               (method url-fetch)
               (uri
@@ -2295,21 +2353,20 @@ effects.")
                               "/samplv1-" version ".tar.gz"))
               (sha256
                (base32
-                "1bgyz530mpmlabvy592zickrzk4x4rm2i0ixf3z6plgn265km43q"))))
-    (build-system gnu-build-system)
+                "1c3ksd02dfqvzc3zk4x282b6gxr1l4ya9c4l04dcn55mrymgn2zz"))))
+    (build-system cmake-build-system)
     (arguments
      `(#:tests? #f))                    ; there are no tests
     (inputs
-     `(("jack" ,jack-1)
-       ("lv2" ,lv2)
-       ("libsndfile" ,libsndfile)
-       ("alsa-lib" ,alsa-lib)
-       ("non-session-manager" ,non-session-manager)
-       ("liblo" ,liblo)
-       ("qtbase" ,qtbase-5)))
+     (list jack-1
+           lv2
+           libsndfile
+           alsa-lib
+           non-session-manager
+           liblo
+           qtbase-5))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list pkg-config qttools))
     (home-page "https://samplv1.sourceforge.io")
     (synopsis "Polyphonic sampler synthesizer with stereo effects")
     (description
@@ -2320,7 +2377,7 @@ effects.")
 (define-public padthv1
   (package
     (name "padthv1")
-    (version "0.9.23")
+    (version "0.9.24")
     (source (origin
               (method url-fetch)
               (uri
@@ -2328,21 +2385,20 @@ effects.")
                               "/padthv1-" version ".tar.gz"))
               (sha256
                (base32
-                "0222n74kykirkhq4va09hr37rybxs0nxjbmamp38jf94bfz5y8gp"))))
-    (build-system gnu-build-system)
+                "0p3qp2lzhmj8i17bcqzsi0782nz7s90hx3s8vax6bxl4mqxsvnxb"))))
+    (build-system cmake-build-system)
     (arguments
      `(#:tests? #f))                    ; there are no tests
     (inputs
-     `(("jack" ,jack-1)
-       ("lv2" ,lv2)
-       ("alsa-lib" ,alsa-lib)
-       ("non-session-manager" ,non-session-manager)
-       ("liblo" ,liblo)
-       ("fftwf" ,fftwf)
-       ("qtbase" ,qtbase-5)))
+     (list jack-1
+           lv2
+           alsa-lib
+           non-session-manager
+           liblo
+           fftwf
+           qtbase-5))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list pkg-config qttools))
     (home-page "https://padthv1.sourceforge.io")
     (synopsis "Polyphonic additive synthesizer")
     (description
@@ -2354,41 +2410,43 @@ special variant of additive synthesis.")
 (define-public amsynth
   (package
     (name "amsynth")
-    (version "1.7.1")
+    (version "1.12.4")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://github.com/amsynth/amsynth/releases/"
                            "download/release-" version
-                           "/amsynth-" version ".tar.bz2"))
+                           "/amsynth-" version ".tar.gz"))
        (sha256
-        (base32
-         "1882pfcmf3rqg3vd4qflzkppcv158d748i603spqjbxqi8z7x7w0"))))
+        (base32 "1fabxx4nv5rsi4kjqachzh2r6zb40lszbv09gcz41ql8qslrw842"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'patch-file-names
-           (lambda _
-             (substitute* "src/GUI/editor_pane.c"
-               (("/usr/bin/unzip") (which "unzip")))
-             (substitute* "src/GUI/GUI.cc"
-               (("/usr/bin/which") (which "which")))
-             #t)))))
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'patch-file-names
+                 (lambda* (#:key inputs #:allow-other-keys)
+                   (substitute* "src/GUI/editor_pane.c"
+                     (("/usr/bin/unzip")
+                      (search-input-file inputs "bin/unzip")))
+                   (substitute* "src/GUI/MainMenu.cpp"
+                     (("/usr/bin/which")
+                      (search-input-file inputs "bin/which"))))))))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("gtk+" ,gtk+-2)
-       ("gtkmm" ,gtkmm-2)
-       ("jack" ,jack-1)
-       ("lash" ,lash)
-       ("libsndfile" ,libsndfile)
-       ("lv2" ,lv2)
-       ;; External commands invoked at run time.
-       ("unzip" ,unzip)
-       ("which" ,which)))
+     (list alsa-lib
+           gtk+-2
+           jack-1
+           libsndfile
+           lv2
+           ;; External commands invoked at run time.
+           unzip
+           which))
+    (propagated-inputs
+     ;; avoid runtime error:
+     ;; GLib-GIO-ERROR **: 22:14:48.344: Settings schema
+     ;;   'org.gnome.desktop.interface' is not installed
+     (list gsettings-desktop-schemas))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (home-page "https://amsynth.github.io")
     (synopsis "Analog modeling synthesizer")
     (description
@@ -2435,15 +2493,14 @@ reverb effects.")
            (lambda _ (setenv "CC" "gcc") #t))
          (delete 'configure))))
     (inputs
-     `(("jack" ,jack-1)
-       ("lv2" ,lv2)
-       ("zita-convolver" ,zita-convolver)
-       ("glu" ,glu)
-       ("ftgl" ,ftgl)
-       ("font-bitstream-vera" ,font-bitstream-vera)))
+     (list jack-1
+           lv2
+           zita-convolver
+           glu
+           ftgl
+           font-bitstream-vera))
     (native-inputs
-     `(("help2man" ,help2man)
-       ("pkg-config" ,pkg-config)))
+     (list help2man pkg-config))
     (home-page "http://setbfree.org")
     (synopsis "Tonewheel organ")
     (description
@@ -2533,12 +2590,9 @@ mixing, FFT scopes, MIDI automation and full scriptability in Scheme.")
                (("ldd `which bristol` | grep jack") "echo guix"))
              #t)))))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("jack" ,jack-1)
-       ("liblo" ,liblo)
-       ("libx11" ,libx11)))
+     (list alsa-lib jack-1 liblo libx11))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://bristol.sourceforge.net/")
     (synopsis "Synthesizer emulator")
     (description
@@ -2663,8 +2717,7 @@ is subjective.")
                (chmod (string-append bin "/tuxguitar") #o555)
                #t))))))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("java-swt" ,java-swt)))
+     (list alsa-lib java-swt))
     (home-page "http://tuxguitar.com.ar/")
     (synopsis "Multitrack tablature editor and player")
     (description
@@ -2713,9 +2766,7 @@ export.")
        ("gettext" ,gettext-minimal)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("tk" ,tk)
-       ("alsa-lib" ,alsa-lib)
-       ("jack" ,jack-1)))
+     (list tk alsa-lib jack-1))
     (home-page "https://puredata.info")
     (synopsis "Visual programming language for artistic performances")
     (description
@@ -2815,9 +2866,9 @@ main purpose is to liberate raw audio rendering from audio and MIDI drivers.")
                            Cflags: -I${includedir}~%"
                            out ,version)))))))))
     (inputs
-     `(("alsa-lib" ,alsa-lib)))
+     (list alsa-lib))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "http://portmedia.sourceforge.net/portmidi/")
     (synopsis "Library for MIDI I/O")
     (description
@@ -2848,11 +2899,9 @@ using a system-independent interface.")
                (("TODO =.*") "TODO = \"\"\n"))
              #t)))))
     (inputs
-     `(("portmidi" ,portmidi)
-       ("alsa-lib" ,alsa-lib)))
+     (list portmidi alsa-lib))
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("unzip" ,unzip)))
+     (list python-cython unzip))
     (home-page "http://portmedia.sourceforge.net/portmidi/")
     (synopsis "Python bindings to PortMidi")
     (description
@@ -2875,14 +2924,14 @@ using a system-independent interface.")
     (arguments
      `(#:tests? #f))                    ;no tests included
     (inputs
-     `(("lilypond" ,lilypond)
-       ("poppler" ,poppler)
-       ("portmidi" ,portmidi)
-       ("python-ly" ,python-ly)
-       ("python-poppler-qt5" ,python-poppler-qt5)
-       ("python-pyportmidi" ,python-pyportmidi)
-       ("python-pyqt" ,python-pyqt)
-       ("python-sip" ,python-sip)))
+     (list lilypond
+           poppler
+           portmidi
+           python-ly
+           python-poppler-qt5
+           python-pyportmidi
+           python-pyqt
+           python-sip))
     (home-page "https://www.frescobaldi.org/")
     (synopsis "LilyPond sheet music text editor")
     (description
@@ -2919,16 +2968,13 @@ browser.")
                                "/manpages/docbook.xsl")))
              #t)))))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("qttools" ,qttools)
-       ("alsa-lib" ,alsa-lib)))
+     (list qtbase-5 qtsvg qttools alsa-lib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("libxslt" ,libxslt)             ; for xsltproc
-       ("docbook-xsl" ,docbook-xsl)
-       ("doxygen" ,doxygen)
-       ("graphviz" ,graphviz))) ; for dot
+     (list pkg-config
+           libxslt ; for xsltproc
+           docbook-xsl
+           doxygen
+           graphviz)) ; for dot
     (home-page "https://drumstick.sourceforge.io/")
     (synopsis "C++ MIDI library")
     (description
@@ -2966,15 +3012,10 @@ backends, including ALSA, OSS, Network and FluidSynth.")
                                "/manpages/docbook.xsl")))
              #t)))))
     (inputs
-     `(("drumstick" ,drumstick)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("qtx11extras" ,qtx11extras)))
+     (list drumstick qtbase-5 qtsvg qtx11extras))
     (native-inputs
-     `(("libxslt" ,libxslt) ;for xsltproc
-       ("docbook-xsl" ,docbook-xsl)
-       ("qttools" ,qttools)
-       ("pkg-config" ,pkg-config)))
+     (list libxslt ;for xsltproc
+           docbook-xsl qttools pkg-config))
     (home-page "https://vmpk.sourceforge.io/")
     (synopsis "Virtual MIDI piano keyboard")
     (description
@@ -3013,17 +3054,17 @@ instrument or MIDI file player.")
                (string-append flag " -msse -msse2 -mfpmath=sse")))
             #t)))))
     (inputs
-     `(("liblo" ,liblo)
-       ("ntk" ,ntk)
-       ("mesa" ,mesa)
-       ("alsa-lib" ,alsa-lib)
-       ("jack" ,jack-1)
-       ("fftw" ,fftw)
-       ("minixml" ,minixml)
-       ("libxpm" ,libxpm)
-       ("zlib" ,zlib)))
+     (list liblo
+           ntk
+           mesa
+           alsa-lib
+           jack-1
+           fftw
+           minixml
+           libxpm
+           zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://zynaddsubfx.sf.net/")
     (synopsis "Software synthesizer")
     (description
@@ -3079,7 +3120,7 @@ capabilities, custom envelopes, effects, etc.")
        ("cairo" ,cairo)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://yoshimi.sourceforge.net/")
     (synopsis "Multi-paradigm software synthesizer")
     (description
@@ -3102,10 +3143,9 @@ improves on support for JACK features, such as JACK MIDI.")
                 "1zs5yy124bymfyapsnljr6rv2lnn5inwchm0xnwiw44b2d39l8hn"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libuuid" ,util-linux "lib")
-       ("libsndfile" ,libsndfile)))
+     (list `(,util-linux "lib") libsndfile))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://linuxsampler.org/libgig/")
     (synopsis "C++ library for working with Gigasampler (.gig) files")
     (description
@@ -3132,11 +3172,9 @@ on the library.")
          "0mzmg8aavybcfdlq2yd9d0vscqd6is5p6jzrgfpfm5j3xdcvh2s3"))))
     (build-system gnu-build-system)
     (inputs
-     `(("jack" ,jack-1)
-       ("lash" ,lash)
-       ("gtk+" ,gtk+-2)))
+     (list jack-1 lash gtk+-2))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://jack-keyboard.sourceforge.net/")
     (synopsis "Virtual MIDI keyboard")
     (description "Jack-keyboard is a virtual MIDI keyboard, a program that
@@ -3165,15 +3203,14 @@ allows you to send JACK MIDI events (i.e. play) using your PC keyboard.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("which" ,which)))
+     (list pkg-config which))
     (inputs
-     `(("gtk+" ,gtk+-2)
-       ("jack" ,jack-1)
-       ("libogg" ,libogg)
-       ("liblo" ,liblo)
-       ("lame" ,lame)
-       ("libsndfile" ,libsndfile)))
+     (list gtk+-2
+           jack-1
+           libogg
+           liblo
+           lame
+           libsndfile))
     (home-page "https://github.com/kmatheussen/jack_capture")
     (synopsis "Program for recording sound files with JACK")
     (description "This is a program for recording sound files with JACK.  It
@@ -3211,15 +3248,13 @@ can connect to any JACK port and record the output into a stereo WAV file.")
              ;; Fix reference to dlopened libraries.
              (substitute* "jackselect/alsainfo.py"
                (("libasound.so.2")
-                (string-append (assoc-ref inputs "alsa-lib")
-                               "/lib/libasound.so.2")))
-             #t))
+                (search-input-file inputs "/lib/libasound.so.2")))))
          (replace 'build
            (assoc-ref python:%standard-phases 'build))
          (add-after 'install 'wrap
            (assoc-ref python:%standard-phases 'wrap)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("alsa-lib" ,alsa-lib)
        ("python" ,python-wrapper)
@@ -3251,11 +3286,10 @@ you to switch between different audio setups with just two mouse clicks.")
        (base32 "1dhphsya41rv8z6yqcv9l6fwbslsds4zh1y56zizi39nd996d40v"))
       (patches (search-patches "cursynth-wave-rand.patch"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     ;; TODO: See https://github.com/iyoko/cursynth/issues/4 which currently
     ;; prevents us from using pulseaudio
-    (inputs `(("ncurses" ,ncurses)
-              ("alsa" ,alsa-lib)))
+    (inputs (list ncurses alsa-lib))
     (home-page "https://www.gnu.org/software/cursynth/")
     (synopsis "Polyphonic and MIDI subtractive music synthesizer using curses")
     (description "GNU cursynth is a polyphonic synthesizer that runs
@@ -3277,11 +3311,9 @@ computer's keyboard.")
                 "0z8wd5yvxdmw1h1rj6km9h01xd4xmp4d86gczlix7hsc7zrf0wil"))))
     (build-system gnu-build-system)
     (inputs
-     `(("minixml" ,minixml)
-       ("jack" ,jack-1)
-       ("alsa-lib" ,alsa-lib)))
+     (list minixml jack-1 alsa-lib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://aj-snapshot.sourceforge.net/")
     (synopsis "Snapshot connections between ALSA and JACK clients")
     (description "Aj-snapshot is a small program that can be used to make
@@ -3295,15 +3327,15 @@ from the command line.")
 (define-public qtractor
   (package
     (name "qtractor")
-    (version "0.9.23")
+    (version "0.9.25")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://downloads.sourceforge.net/qtractor/"
                                   "qtractor-" version ".tar.gz"))
               (sha256
                (base32
-                "1d2d884x5kfa41skwyh0ihyx5jgc9467617gmfjm379qcgnxq00s"))))
-    (build-system gnu-build-system)
+                "0x99yjabznr2pl867j3h9zdsjzkxzxm2c0xk1xwk50gfp8gwg9bh"))))
+    (build-system cmake-build-system)
     (arguments
      `(#:tests? #f))                    ; no "check" target
     (inputs
@@ -3323,8 +3355,7 @@ from the command line.")
        ("liblo" ,liblo)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list pkg-config qttools))
     (home-page "https://qtractor.org/")
     (synopsis "Audio/MIDI multi-track sequencer")
     (description
@@ -3366,7 +3397,7 @@ follows a traditional multi-track tape recorder control paradigm.")
        ("lv2" ,lv2)
        ("lvtk" ,lvtk)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/blablack/ams-lv2")
     (synopsis "Port of Alsa Modular Synth internal modules into LV2")
     (description "This set of LV2 plugins is a port of the internal modules
@@ -3397,15 +3428,17 @@ and hold, etc.")
                             "/include/"))
        #:phases
        (modify-phases %standard-phases
-         (delete 'configure))))
+         (delete 'configure)
+         (add-before 'build 'target-specific-glib-API-version
+           (lambda _
+             ;; See https://github.com/brummer10/gxtuner/pull/21
+             (setenv "CFLAGS"
+                     "-DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_54\
+ -DGLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_54"))))))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("jack" ,jack-1)
-       ("fftwf" ,fftwf)
-       ("cairo" ,cairo)
-       ("zita-resampler" ,zita-resampler)))
+     (list gtk+ jack-1 fftwf cairo zita-resampler))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/brummer10/gxtuner")
     (synopsis "Guitar tuner")
     (description "GXtuner is a simple guitar tuner for JACK with an
@@ -3446,12 +3479,12 @@ analogue-like user interface.")
                   "lib"))
                #t)))))
       (inputs
-       `(("lilv" ,lilv)
-         ("fftw" ,fftw)
-         ("fftwf" ,fftwf)
-         ("lv2" ,lv2)
-         ("jack" ,jack-1)
-         ("readline" ,readline)))
+       (list lilv
+             fftw
+             fftwf
+             lv2
+             jack-1
+             readline))
       (native-inputs
        `(("pkg-config" ,pkg-config)
          ("python" ,python-2)))
@@ -3484,14 +3517,11 @@ socket or command line.")
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "curseradio/curseradio.py"
                (("/usr/bin/mpv")
-                (string-append (assoc-ref inputs "mpv") "/bin/mpv")))
-             #t)))))
+                (search-input-file inputs "/bin/mpv"))))))))
     (propagated-inputs
-     `(("python-lxml" ,python-lxml)
-       ("python-requests" ,python-requests)
-       ("python-pyxdg" ,python-pyxdg)))
+     (list python-lxml python-requests python-pyxdg))
     (inputs
-     `(("mpv" ,mpv)))
+     (list mpv))
     (home-page "https://github.com/chronitis/curseradio")
     (synopsis "Command-line Internet radio player")
     (description "Curseradio is a Curses-based radio player that uses a
@@ -3518,13 +3548,9 @@ tune-in sender list from @url{http://opml.radiotime.com}.")
        #:phases (modify-phases %standard-phases
                   (delete 'configure))))
     (inputs
-     `(("ao" ,ao)
-       ("curl" ,curl)
-       ("libgcrypt" ,libgcrypt)
-       ("json-c" ,json-c)
-       ("ffmpeg" ,ffmpeg)))
+     (list ao curl libgcrypt json-c ffmpeg))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://6xq.net/pianobar/")
     (synopsis "Console-based pandora.com player")
     (description "pianobar is a console-based music player for the
@@ -3567,10 +3593,7 @@ event-based scripts for scrobbling, notifications, etc.")
      `(("gettext" ,gettext-minimal)
        ("python-dateutil" ,python-dateutil)))
     (inputs
-     `(("chromaprint" ,chromaprint)
-       ("python-discid" ,python-discid)
-       ("python-pyqt" ,python-pyqt)
-       ("python-mutagen" ,python-mutagen)))
+     (list chromaprint python-discid python-pyqt python-mutagen))
     (home-page "https://picard.musicbrainz.org/")
     (synopsis "Graphical music tagging application")
     (description
@@ -3590,9 +3613,7 @@ formats, looking up tracks through metadata and audio fingerprints.")
                 "1qdk6i8gyhbi1c4j5jmbfpac3q8sff2ysri1pnp7nb9wzcp615v3"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-hypothesis" ,python-hypothesis)
-       ("python-flake8" ,python-flake8)))
+     (list python-pytest python-hypothesis python-flake8))
     (home-page "https://mutagen.readthedocs.io/")
     (synopsis "Read and write audio tags")
     (description "Mutagen is a Python module to handle audio metadata.  It
@@ -3617,8 +3638,7 @@ streams on an individual packet/page level.")
          "0ipb001j19s9wvssmrj8wz0nrkbl0k3zr3dgzyp1bd9cjc6vklnp"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-mutagen" ,python-mutagen)
-       ("python-six" ,python-six)))
+     (list python-mutagen python-six))
     (home-page "https://github.com/beetbox/mediafile")
     (synopsis "Read and write audio file tags")
     (description
@@ -3663,8 +3683,7 @@ MusicBrainz database.")
          "0jh4cni8qhri6dh83cmp0i0m0384vv0vznlygv49wj9xzh1d99qv"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-discid" ,python-discid)
-       ("python-musicbrainzngs" ,python-musicbrainzngs)))
+     (list python-discid python-musicbrainzngs))
     (home-page "https://github.com/JonnyJD/musicbrainz-isrcsubmit")
     (synopsis "Submit ISRCs from CDs to MusicBrainz")
     (description "@code{isrcsubmit} is a tool to extract @dfn{International
@@ -3720,11 +3739,8 @@ detailed track info including timbre, pitch, rhythm and loudness information.
     ;; https://github.com/pylast/pylast/issues/105
     (arguments '(#:tests? #f))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-pytest" ,python-pytest)
-       ("python-flaky" ,python-flaky)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-coverage python-pytest python-flaky python-pyyaml
+           python-setuptools-scm))
     (home-page "https://github.com/pylast/pylast")
     (synopsis "Python interface to Last.fm and Libre.fm")
     (description "A Python interface to Last.fm and other API-compatible
@@ -3748,10 +3764,7 @@ websites such as Libre.fm.")
                   "0j7qivaa04bpdz3anmgci5833dgiyfqqwq9fdrpl9m68b34gl773"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-requests" ,python-requests)
-       ("eyed3" ,eyed3)
-       ("python-beautifulsoup4" ,python-beautifulsoup4)
-       ("youtube-dl" ,youtube-dl)))
+     (list python-requests eyed3 python-beautifulsoup4 youtube-dl))
     (arguments
      '(#:modules ((guix build python-build-system)
                   (guix build utils)
@@ -3808,40 +3821,40 @@ websites such as Libre.fm.")
                  `("GI_TYPELIB_PATH" ":" prefix (,types)))
                #t))))))
     (native-inputs
-     `(("gobject-introspection" ,gobject-introspection)
-       ("python-flask" ,python-flask)
-       ("python-mock" ,python-mock)
-       ("python-py7zr" ,python-py7zr)
-       ("python-pytest" ,python-pytest-6)
-       ("python-responses" ,python-responses)))
+     (list gobject-introspection
+           python-flask
+           python-mock
+           python-py7zr
+           python-pytest-6
+           python-responses))
     (inputs
-     `(("bash-minimal" ,bash-minimal)
-       ("gst-plugins-base" ,gst-plugins-base)
-       ("gst-plugins-good" ,gst-plugins-good)
-       ("gstreamer" ,gstreamer)
-       ("python-confuse" ,python-confuse)
-       ("python-jellyfish" ,python-jellyfish)
-       ("python-mediafile" ,python-mediafile)
-       ("python-munkres" ,python-munkres)
-       ("python-musicbrainzngs" ,python-musicbrainzngs)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-six" ,python-six)
-       ("python-unidecode" ,python-unidecode)
-       ;; Optional dependencies for plugins. Some of these are also required by tests.
-       ("python-beautifulsoup4" ,python-beautifulsoup4) ; For lyrics.
-       ("python-discogs-client" ,python-discogs-client) ; For discogs.
-       ("python-mpd2" ,python-mpd2) ; For mpdstats.
-       ("python-mutagen" ,python-mutagen) ; For scrub.
-       ("python-langdetect" ,python-langdetect) ; For lyrics.
-       ("python-pillow" ,python-pillow) ; For fetchart, embedart, thumbnails.
-       ("python-pyacoustid" ,python-pyacoustid) ; For chroma.
-       ("python-pygobject" ,python-pygobject) ; For bpd, replaygain.
-       ("python-pylast" ,python-pylast) ; For lastgenre, lastimport.
-       ("python-pyxdg" ,python-pyxdg) ; For thumbnails.
-       ("python-rarfile" ,python-rarfile) ; For import.
-       ("python-reflink" ,python-reflink) ; For reflink.
-       ("python-requests" ,python-requests)
-       ("python-requests-oauthlib" ,python-requests-oauthlib))) ; For beatport.
+     (list bash-minimal
+           gst-plugins-base
+           gst-plugins-good
+           gstreamer
+           python-confuse
+           python-jellyfish
+           python-mediafile
+           python-munkres
+           python-musicbrainzngs
+           python-pyyaml
+           python-six
+           python-unidecode
+           ;; Optional dependencies for plugins. Some of these are also required by tests.
+           python-beautifulsoup4 ; For lyrics.
+           python-discogs-client ; For discogs.
+           python-mpd2 ; For mpdstats.
+           python-mutagen ; For scrub.
+           python-langdetect ; For lyrics.
+           python-pillow ; For fetchart, embedart, thumbnails.
+           python-pyacoustid ; For chroma.
+           python-pygobject ; For bpd, replaygain.
+           python-pylast ; For lastgenre, lastimport.
+           python-pyxdg ; For thumbnails.
+           python-rarfile ; For import.
+           python-reflink ; For reflink.
+           python-requests
+           python-requests-oauthlib)) ; For beatport.
     (home-page "https://beets.io")
     (synopsis "Music organizer")
     (description "The purpose of beets is to get your music collection
@@ -3867,11 +3880,17 @@ your music.")
     (build-system python-build-system)
     (arguments '(#:tests? #f))          ; there are no tests
     (propagated-inputs
-     `(("beets" ,beets)
-       ("python-isodate" ,python-isodate)
-       ("python-beautifulsoup4" ,python-beautifulsoup4)
-       ("python-requests" ,python-requests)
-       ("python-six" ,python-six)))
+     (list beets
+           python-beautifulsoup4
+           python-confuse
+           python-isodate
+           python-jellyfish
+           python-mediafile
+           python-munkres
+           python-musicbrainzngs
+           python-requests
+           python-six
+           python-unidecode))
     (home-page "https://github.com/unrblt/beets-bandcamp")
     (synopsis "Bandcamp plugin for beets")
     (description
@@ -3915,7 +3934,7 @@ using the beets FetchArt plugin.")
        ("zlib" ,zlib)
        ("zziplib" ,zziplib)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "Music tracker for working with .MOD/.XM module files")
     (description "MilkyTracker is a music application for creating .MOD and .XM
     module files.  It attempts to recreate the module replay and user experience of
@@ -3953,14 +3972,10 @@ using the beets FetchArt plugin.")
          (add-before 'configure 'link-libm
            (lambda _ (setenv "LIBS" "-lm") #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("python" ,python)))
+     (list autoconf automake python))
     (inputs
-     `(("alsa-lib" ,alsa-lib)           ; for asound dependency
-       ("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("sdl" ,sdl)))
+     (list alsa-lib ; for asound dependency
+           libx11 libxext sdl))
     (home-page "http://schismtracker.org")
     (synopsis "Oldschool sample-based music composition tool")
     (description
@@ -4032,7 +4047,7 @@ with a number of bugfixes and changes to improve IT playback.")
        ("libsigc++" ,libsigc++)
        ("ncurses" ,ncurses)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://essej.net/sooperlooper/")
     (synopsis "Live looping sampler")
     (description
@@ -4056,28 +4071,28 @@ available memory.")
                 "026v977kwb0wbmlmf6mnik328plxg8wykfx9ryvqhirac0aq39pk"))))
     (build-system gnu-build-system)
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("curl" ,curl)
-       ("faad2" ,faad2)
-       ("ffmpeg" ,ffmpeg-3.4)
-       ("file" ,file)
-       ("jack" ,jack-1)
-       ("libid3tag" ,libid3tag)
-       ("libltdl" ,libltdl)
-       ("libmodplug" ,libmodplug)
-       ("libmpcdec" ,libmpcdec)
-       ("libmad" ,libmad)
-       ("libogg" ,libogg)
-       ("libvorbis" ,libvorbis)
-       ("ncurses" ,ncurses)
-       ("openssl" ,openssl)
-       ("sasl" ,cyrus-sasl)
-       ("speex" ,speex)
-       ("taglib" ,taglib)
-       ("wavpack" ,wavpack)
-       ("zlib" ,zlib)))
+     (list alsa-lib
+           curl
+           faad2
+           ffmpeg-3.4
+           file
+           jack-1
+           libid3tag
+           libltdl
+           libmodplug
+           libmpcdec
+           libmad
+           libogg
+           libvorbis
+           ncurses
+           openssl
+           cyrus-sasl
+           speex
+           taglib
+           wavpack
+           zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "Console audio player designed to be powerful and easy to use")
     (description
      "Music on Console is a console audio player that supports many file
@@ -4140,7 +4155,7 @@ standard MIDI file with the csvmidi program.")
                (("install : all") "install :"))
              #t)))))
     (inputs
-     `(("lv2" ,lv2)))
+     (list lv2))
     (home-page "https://github.com/brummer10/GxGuvnor.lv2")
     (synopsis "Overdrive/distortion pedal simulation")
     (description "This package provides the LV2 plugin \"GxGuvnor\", a
@@ -4166,10 +4181,9 @@ simulation of an overdrive or distortion pedal for guitars.")
                   "0firap073ldw4nrykkd7jvyyj0jbl1nslxyzjj4kswazp99x7d9h"))
                 (file-name (string-append name "-" version "-checkout"))))
       (inputs
-       `(("lv2" ,lv2)
-         ("gtk+" ,gtk+-2)))
+       (list lv2 gtk+-2))
       (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
       (home-page "https://github.com/brummer10/GxVBassPreAmp.lv2")
       (synopsis "Simulation of the Vox Venue Bass 100 Pre Amp Section")
       (description "This package provides the LV2 plugin \"GxVBassPreAmp\", a
@@ -4410,11 +4424,9 @@ a simulation of an analog Wah pedal with switchless activation."))))
       (build-system cmake-build-system)
       (arguments '(#:tests? #f)) ; there are no tests
       (inputs
-       `(("fftw" ,fftw)
-         ("libsamplerate" ,libsamplerate)
-         ("lv2" ,lv2)))
+       (list fftw libsamplerate lv2))
       (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
       (home-page "https://github.com/ssj71/rkrlv2")
       (synopsis "Rakarrack effects ported to LV2 plugins")
       (description "This package provides the Rakarrack effects as LV2
@@ -4450,7 +4462,7 @@ maintainer these will get merged into the original project.")
          (modify-phases %standard-phases
            (delete 'configure))))
       (inputs
-       `(("lv2" ,lv2)))
+       (list lv2))
       (home-page "https://github.com/moddevices/mod-utilities")
       (synopsis "LV2 utility plugins")
       (description "This package provides LV2 audio utility plugins, such as
@@ -4515,22 +4527,21 @@ plugins, a switch trigger, a toggle switch, and a peakmeter.")
                                    out "/lib" "\"]," line))))
                #t)))))
       (inputs
-       `(("boost" ,boost)
-         ("python-rdflib" ,python-rdflib)
-         ("python" ,python)
-         ("jack" ,jack-1)
-         ("lv2" ,lv2)
-         ("lilv" ,lilv)
-         ("raul" ,raul-devel)
-         ("ganv" ,ganv)
-         ("suil" ,suil)
-         ("serd" ,serd)
-         ("sord" ,sord)
-         ("sratom" ,sratom)
-         ("gtkmm" ,gtkmm-2)))
+       (list boost
+             python-rdflib
+             python
+             jack-1
+             lv2
+             lilv
+             raul-devel
+             ganv
+             suil
+             serd
+             sord
+             sratom
+             gtkmm-2))
       (native-inputs
-       `(("pkg-config" ,pkg-config)
-         ("python-pygments" ,python-pygments)))
+       (list pkg-config python-pygments))
       (home-page "https://drobilla.net/software/ingen")
       (synopsis "Modular audio processing system")
       (description "Ingen is a modular audio processing system for JACK and
@@ -4560,14 +4571,9 @@ develop custom plugins for use in other applications without programming.")
      `(#:configure-flags
        (list "--enable-qt5")))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("alsa-lib" ,alsa-lib)
-       ("jack" ,jack-1)
-       ("liblo" ,liblo)
-       ("lv2" ,lv2)))
+     (list qtbase-5 alsa-lib jack-1 liblo lv2))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list pkg-config qttools))
     (home-page "http://qmidiarp.sourceforge.net/")
     (synopsis "MIDI arpeggiator")
     (description "QMidiArp is an advanced MIDI arpeggiator, programmable step
@@ -4591,11 +4597,9 @@ modules running in parallel.")
      `(#:configure-flags
        (list "--enable-qt5")))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("alsa-lib" ,alsa-lib)))
+     (list qtbase-5 alsa-lib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list pkg-config qttools))
     (home-page "http://alsamodular.sourceforge.net/")
     (synopsis "MIDI event router and filter")
     (description "QMidiRoute is a MIDI event router and filter.  MIDI note,
@@ -4619,12 +4623,9 @@ defined as tabs in the main control surface.")
               (patches (search-patches "seq24-rename-mutex.patch"))))
     (build-system gnu-build-system)
     (inputs
-     `(("gtkmm" ,gtkmm-2)
-       ("alsa-lib" ,alsa-lib)
-       ("jack" ,jack-1)
-       ("lash" ,lash)))
+     (list gtkmm-2 alsa-lib jack-1 lash))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://edge.launchpad.net/seq24/")
     (synopsis "Real-time MIDI sequencer")
     (description "Seq24 is a real-time MIDI sequencer.  It was created to
@@ -4643,9 +4644,7 @@ provide a very simple interface for editing and playing MIDI loops.")
                 "1zmib0i9jicv9fyphgkcrk418qmpv3l4p38ibl31sh237ki5xqw9"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-oauthlib" ,python-oauthlib)
-       ("python-requests" ,python-requests)))
+     (list python-dateutil python-oauthlib python-requests))
     (home-page "https://github.com/joalla/discogs_client")
     (synopsis "Python client for the Discogs API")
     (description "This is the continuation of the official Discogs API
@@ -4656,9 +4655,6 @@ change user data such as profile information, collections and wantlists,
 inventory, and orders.")
     (license license:bsd-2)))
 
-(define-public python2-discogs-client
-  (package-with-python2 python-discogs-client))
-
 (define-public libsmf
   (package
     (name "libsmf")
@@ -4694,11 +4690,9 @@ inventory, and orders.")
                          (find-files lib "\\.a$"))
                #t))))))
     (inputs
-     `(("readline" ,readline)
-       ("glib" ,glib)))
+     (list readline glib))
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("pkg-config" ,pkg-config)))
+     (list doxygen pkg-config))
     (home-page "http://libsmf.sourceforge.net/")
     (synopsis "Standard MIDI File format library")
     (description
@@ -4745,16 +4739,7 @@ are a C compiler and glib.  Full API documentation and examples are included.")
                       (assoc-ref outputs "out") "/lib/lmms"
                       ":"
                       (assoc-ref outputs "out") "/lib/lmms/ladspa"
-                      "\""))
-             #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)))))
+                      "\"")))))))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("qttools" ,qttools)
@@ -4812,14 +4797,12 @@ audio samples and various soft sythesizers.  It can receive input from a MIDI ke
     (arguments
      `(#:configure-flags '("--enable-shared")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ;; Fails with default gcc (#include <filesystem> not found).
-       ("gcc" ,gcc-9)))
+     (list pkg-config))
     (inputs
      `(("jack" ,jack-2)
        ("lv2" ,lv2)
        ("readline" ,readline)
-       ("libsndfile" ,libsndfile/fixed)))
+       ("libsndfile" ,libsndfile)))
     (home-page "https://github.com/swesterfeld/liquidsfz")
     (synopsis "Sampler library")
     (description "The main goal of liquidsfz is to provide an SFZ sampler
@@ -4857,7 +4840,7 @@ standalone JACK client and an LV2 plugin is also available.")
              "-DSFIZZ_TESTS=ON"
              "-DSFIZZ_USE_SYSTEM_ABSEIL=ON")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("abseil-cpp" ,abseil-cpp)
        ("glib" ,glib)
@@ -4893,8 +4876,7 @@ includes LV2 plugins and a JACK standalone client.")
                      '("thirdparty/freetype"
                        "thirdparty/openssl"
                        "thirdparty/portmidi"
-                       "thirdparty/qt-google-analytics"))
-           #t))))
+                       "thirdparty/qt-google-analytics"))))))
     (build-system qt-build-system)
     (arguments
      `(#:configure-flags
@@ -4913,27 +4895,26 @@ includes LV2 plugins and a JACK standalone client.")
        ;; So we simply skip them.
        #:tests? #f))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("freetype" ,freetype)
-       ("gtk+-bin" ,gtk+ "bin")         ;for gtk-update-icon-cache
-       ("jack" ,jack-1)
-       ("lame" ,lame)
-       ("libogg" ,libogg)
-       ("libsndfile" ,libsndfile)
-       ("libvorbis" ,libvorbis)
-       ("portaudio" ,portaudio)
-       ("portmidi" ,portmidi)
-       ("pulseaudio" ,pulseaudio)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtgraphicaleffects" ,qtgraphicaleffects)
-       ("qtquickcontrols2" ,qtquickcontrols2)
-       ("qtscript" ,qtscript)
-       ("qtsvg" ,qtsvg)
-       ("qtxmlpatterns" ,qtxmlpatterns)))
+     (list alsa-lib
+           freetype
+           `(,gtk+ "bin")               ;for gtk-update-icon-cache
+           jack-1
+           lame
+           libogg
+           libsndfile
+           libvorbis
+           portaudio
+           portmidi
+           pulseaudio
+           qtbase-5
+           qtdeclarative
+           qtgraphicaleffects
+           qtquickcontrols2
+           qtscript
+           qtsvg
+           qtxmlpatterns))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list pkg-config qttools))
     (synopsis "Music composition and notation software")
     (description
      "MuseScore is a music score typesetter.  Its main purpose is the creation
@@ -4981,27 +4962,27 @@ sample library.")
          (add-after 'unpack 'chdir
            (lambda _ (chdir "src"))))))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("dssi" ,dssi)
-       ("fluidsynth" ,fluidsynth)
-       ("glib" ,glib)
-       ("jack" ,jack-1)
-       ("ladspa" ,ladspa)
-       ("lash" ,lash)
-       ("libinstpatch" ,libinstpatch)
-       ("liblo" ,liblo)
-       ("libsamplerate" ,libsamplerate)
-       ("libsndfile" ,libsndfile)
-       ("lilv" ,lilv)
-       ("lrdf" ,lrdf)
-       ("lv2" ,lv2)
-       ("pcre" ,pcre)
-       ("pulseaudio" ,pulseaudio) ; required by rtaudio
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("rtaudio" ,rtaudio)
-       ("rubberband" ,rubberband)
-       ("sord" ,sord)))
+     (list alsa-lib
+           dssi
+           fluidsynth
+           glib
+           jack-1
+           ladspa
+           lash
+           libinstpatch
+           liblo
+           libsamplerate
+           libsndfile
+           lilv
+           lrdf
+           lv2
+           pcre
+           pulseaudio ; required by rtaudio
+           qtbase-5
+           qtsvg
+           rtaudio
+           rubberband
+           sord))
     (native-inputs
      `(("perl" ,perl)
        ("pkg-config" ,pkg-config)
@@ -5019,16 +5000,16 @@ studio.")
 (define-public gsequencer
   (package
     (name "gsequencer")
-    (version "3.10.18")
+    (version "3.14.5")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://git.savannah.gnu.org/git/gsequencer.git/")
+             (url "https://git.savannah.gnu.org/git/gsequencer")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "126kbvdkxy82mmkl19qhp9k6iz5xclar06chbj7lf580x96c899c"))))
+        (base32 "18pfv4w30nng1p0vgmrnkfm38522iq1x1bj8iz4qfiffiv56dsnz"))))
     (build-system glib-or-gtk-build-system)
     (arguments
      `(#:phases
@@ -5038,34 +5019,34 @@ studio.")
              (system "Xvfb &")
              (setenv "DISPLAY" ":0"))))))
     (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)))
+     (list autoconf
+           automake
+           cunit
+           gettext-minimal
+           gobject-introspection
+           gtk-doc
+           libtool
+           libxslt
+           pkg-config
+           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)))
+     (list alsa-lib
+           dssi
+           fftw
+           gst-plugins-base
+           gstreamer
+           gtk+
+           jack-1
+           ladspa
+           libinstpatch
+           libsamplerate
+           libsndfile
+           libsoup-minimal-2
+           libxml2
+           lv2
+           pulseaudio
+           `(,util-linux "lib")
+           webkitgtk-with-libsoup2))
     (home-page "https://nongnu.org/gsequencer/")
     (synopsis "Advanced Gtk+ Sequencer")
     (description
@@ -5090,14 +5071,14 @@ ALSA, Pulseaudio, JACK, OSSv4 and CoreAudio.")
                 "0kl1hzhb7cykzkrqcqgq1dk4xcgrcxv0jja251aq4z4l783jpj7j"))))
     (build-system gnu-build-system)
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("jack" ,jack-1)
-       ("ladspa" ,ladspa)
-       ("libsamplerate" ,libsamplerate)
-       ("libsndfile" ,libsndfile)
-       ("liblo" ,liblo)))
+     (list alsa-lib
+           jack-1
+           ladspa
+           libsamplerate
+           libsndfile
+           liblo))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "Audio plugin API for soft synths and effects")
     (description "DSSI is a plugin API for software instruments with user
 interfaces, permitting them to be hosted in-process by audio applications.
@@ -5113,7 +5094,7 @@ specification and header.")
 (define-public rosegarden
   (package
     (name "rosegarden")
-    (version "21.06.1")
+    (version "21.12")
     (source
      (origin
        (method url-fetch)
@@ -5121,7 +5102,7 @@ specification and header.")
                            (version-major+minor version) "/"
                            "rosegarden-" version ".tar.bz2"))
        (sha256
-        (base32 "0yir279gxc5b298sr0fg9jxgdi75bb1gvvy4mh3pxqjsnp00sxc7"))))
+        (base32 "02984qff9rc2r83a5a5zgwawfgd583gnj2w3zvllsxaf0vdx6gnw"))))
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags '("-DCMAKE_BUILD_TYPE=Release")
@@ -5174,25 +5155,24 @@ specification and header.")
              (setenv "HOME" "/tmp/foo")
              (setenv "XDG_RUNTIME_DIR" "/tmp/foo"))))))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("bash" ,bash)
-       ("dssi" ,dssi)
-       ("flac" ,flac)
-       ("fftwf" ,fftwf)
-       ("jack" ,jack-1)
-       ("ladspa" ,ladspa)
-       ("liblo" ,liblo)
-       ("libsamplerate" ,libsamplerate)
-       ("lilypond" ,lilypond)
-       ("lrdf" ,lrdf)
-       ("qtbase" ,qtbase-5)
-       ("tar" ,tar)
-       ("lirc" ,lirc)
-       ("wavpack" ,wavpack)
-       ("zlib" ,zlib)))
+     (list alsa-lib
+           bash
+           dssi
+           flac
+           fftwf
+           jack-1
+           ladspa
+           liblo
+           libsamplerate
+           lilypond
+           lrdf
+           qtbase-5
+           tar
+           lirc
+           wavpack
+           zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))           ;for qtlinguist
+     (list pkg-config qttools))           ;for qtlinguist
     (synopsis "Music composition and editing environment based around a MIDI
 sequencer")
     (description "Rosegarden is a music composition and editing environment
@@ -5217,11 +5197,9 @@ notation and includes basic support for digital audio.")
     (build-system meson-build-system)
     (arguments '(#:tests? #f))          ; no test target
     (inputs
-     `(("jack" ,jack-1)
-       ("lv2" ,lv2)
-       ("mesa" ,mesa)))
+     (list jack-1 lv2 mesa))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/OpenMusicKontrollers/patchmatrix")
     (synopsis "Simple JACK patch bay")
     (description "PatchMatrix is a patch bay for the JACK audio connection
@@ -5260,12 +5238,9 @@ OSC connections.")
                        "-a" "lv2synth.cpp"
                        "-o" "main.cpp" "main.dsp")))))))
     (inputs
-     `(("boost" ,boost)
-       ("lv2" ,lv2)
-       ("ntk" ,ntk)))
+     (list boost lv2 ntk))
     (native-inputs
-     `(("faust" ,faust)
-       ("pkg-config" ,pkg-config)))
+     (list faust pkg-config))
     (home-page "http://openavproductions.com/sorcer/")
     (synopsis "Wavetable LV2 plugin synth")
     (description "Sorcer is a wavetable LV2 plugin synthesizer, targeted at
@@ -5288,12 +5263,9 @@ the electronic or dubstep genre.")
     (build-system cmake-build-system)
     (arguments '(#:tests? #f)) ; there are no tests
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("drumstick" ,drumstick)
-       ("pulseaudio" ,pulseaudio)
-       ("qtbase" ,qtbase-5)))
+     (list alsa-lib drumstick pulseaudio qtbase-5))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/pedrolcl/Linux-SonivoxEas")
     (synopsis "MIDI synthesizer library")
     (description "This project is a real time General MIDI synthesizer based
@@ -5316,14 +5288,14 @@ soundfonts, using embedded samples instead.")
                 "02qbn0hbvn1iym4zxv35b201blg31yjpgh71h8db0j5zls2xc0m6"))))
     (build-system gnu-build-system)
     (inputs
-     `(("dssi" ,dssi)
-       ("liblo" ,liblo)
-       ("fftwf" ,fftwf)
-       ("gtk+" ,gtk+-2)
-       ("ladspa" ,ladspa)
-       ("alsa-lib" ,alsa-lib)))
+     (list dssi
+           liblo
+           fftwf
+           gtk+-2
+           ladspa
+           alsa-lib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://smbolton.com/whysynth.html")
     (synopsis "DSSI software synthesizer")
     (description "WhySynth is a versatile softsynth which operates as a plugin
@@ -5377,7 +5349,7 @@ ISRCs and the MCN (=UPC/EAN) from disc.")
          "1fgp67nhqlbvhhwrcxq5avil7alpzw4s4579hlyvxzbphdnbz8vq"))))
     (build-system python-build-system)
     (inputs
-     `(("libdiscid" ,libdiscid)))
+     (list libdiscid))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -5417,15 +5389,18 @@ Recording Code} (ISRC) can be extracted.}")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'fix-build
+           (lambda _
+             (substitute* "src/CMakeLists.txt"
+               (("\\*.inc") ""))))
          (replace 'check
            (lambda _
              ;; requires network connections
              ;; (invoke "tests/mbtest")
              (invoke "tests/ctest")
              #t)))))
-    (inputs `(("neon" ,neon)
-              ("libxml2" ,libxml2)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list neon libxml2))
+    (native-inputs (list pkg-config))
     (home-page "https://musicbrainz.org/doc/libmusicbrainz")
     (synopsis "MusicBrainz client library")
     (description "The MusicBrainz Client Library (libmusicbrainz), also known as
@@ -5446,9 +5421,8 @@ MusicBrainz lookup capabilities to their applications.")
                (base32
                 "1azc91jnwa3gdmy9pc8mflakgvsvf69ywwlqllxmdzwpk386w2xs"))))
     (build-system perl-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("which" ,which)))
-    (inputs `(("libdiscid" ,libdiscid)))
+    (native-inputs (list pkg-config which))
+    (inputs (list libdiscid))
     (home-page "https://metacpan.org/release/MusicBrainz-DiscID")
     (synopsis "Perl interface to the MusicBrainz libdiscid library")
     (description
@@ -5474,9 +5448,9 @@ compact disc (CDDA) identifiers.")
      ;; Tests try to connect to http://musicbrainz.org.
      '(#:tests? #f))
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (propagated-inputs
-     `(("perl-mojolicious" ,perl-mojolicious)))
+     (list perl-mojolicious))
     (home-page "https://metacpan.org/release/WebService-MusicBrainz")
     (synopsis "Web service API to the MusicBrainz database")
     (description
@@ -5499,14 +5473,14 @@ at @code{musicbrainz.org}.")
         (base32 "1l9iqz6vxrrxapv7s110g360bqxksir4dcqd8w0l4lhmnfmz3vnk"))))
     (build-system trivial-build-system)
     (inputs
-     `(("bash" ,bash)                   ; for the wrapped program
-       ("perl" ,perl)
-       ("perl-www-mechanize" ,perl-www-mechanize)
-       ("perl-lwp-protocol-https" ,perl-lwp-protocol-https)
-       ;; Required or else LWP will fail with "GET https://www.google.com/ ==>
-       ;; 500 Can't verify SSL peers without knowing which Certificate
-       ;; Authorities to trust".
-       ("perl-mozilla-ca" ,perl-mozilla-ca)))
+     (list bash ; for the wrapped program
+           perl
+           perl-www-mechanize
+           perl-lwp-protocol-https
+           ;; Required or else LWP will fail with "GET https://www.google.com/ ==>
+           ;; 500 Can't verify SSL peers without knowing which Certificate
+           ;; Authorities to trust".
+           perl-mozilla-ca))
     (arguments
      `(#:modules ((guix build utils))
        #:builder (begin
@@ -5562,20 +5536,19 @@ console music players.")
            "1afkbqhzn6da7zaf5ab7dvyqj1izqhzprwfb4hw448fllda9bdvk"))))
       (build-system go-build-system)
       (native-inputs
-       `(("lua" ,lua)
-         ("go-github-com-mattn-go-isatty" ,go-github-com-mattn-go-isatty)
-         ("go-github-com-mattn-go-colorable" ,go-github-com-mattn-go-colorable)
-         ("go-github-com-aarzilli-golua" ,go-github-com-aarzilli-golua)
-         ("go-gitlab-com-ambrevar-damerau" ,go-gitlab-com-ambrevar-damerau)
-         ("go-gitlab-com-ambrevar-golua-unicode" ,go-gitlab-com-ambrevar-golua-unicode)
-         ("go-github-com-mgutz-ansi" ,go-github-com-mgutz-ansi)
-         ("go-github-com-michiwend-gomusicbrainz" ,go-github-com-michiwend-gomusicbrainz)
-         ("go-github-com-stevedonovan-luar" ,go-github-com-stevedonovan-luar)
-         ("go-github-com-wtolson-go-taglib" ,go-github-com-wtolson-go-taglib)
-         ("go-github-com-yookoala-realpath" ,go-github-com-yookoala-realpath)))
+       (list lua
+             go-github-com-mattn-go-isatty
+             go-github-com-mattn-go-colorable
+             go-github-com-aarzilli-golua
+             go-gitlab-com-ambrevar-damerau
+             go-gitlab-com-ambrevar-golua-unicode
+             go-github-com-mgutz-ansi
+             go-github-com-michiwend-gomusicbrainz
+             go-github-com-stevedonovan-luar
+             go-github-com-wtolson-go-taglib
+             go-github-com-yookoala-realpath))
       (inputs
-       `(("chromaprint" ,chromaprint)
-         ("ffmpeg" ,ffmpeg)))
+       (list chromaprint ffmpeg))
       (arguments
        `(#:import-path "gitlab.com/ambrevar/demlo"
          #:phases
@@ -5671,13 +5644,13 @@ discard bad quality ones.
                          '("qtmultimedia"))))
                #t))))))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("fftw" ,fftw)
-       ("jack" ,jack-1)
-       ("portaudio" ,portaudio)
-       ("qtbase" ,qtbase-5)
-       ("qtmultimedia" ,qtmultimedia)
-       ("qtsvg" ,qtsvg)))
+     (list alsa-lib
+           fftw
+           jack-1
+           portaudio
+           qtbase-5
+           qtmultimedia
+           qtsvg))
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("hicolor-icon-theme" ,hicolor-icon-theme)
@@ -5711,10 +5684,9 @@ with error and volume history, and advanced features.")
        `(#:python ,python-2
          #:tests? #f))                     ; no "check" target
       (inputs
-       `(("jack" ,jack-1)
-         ("ncurses" ,ncurses)))
+       (list jack-1 ncurses))
       (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
       (home-page "https://fuzzle.org/~petern/mloop.html")
       (synopsis "Live MIDI looper")
       (description "mloop is a live MIDI looping system, using jack-midi.
@@ -5745,24 +5717,23 @@ easier to perform.  Features include:
                 "19kbhq99bkimx3aqrdzln0vlr4slkpx6kq66j731jvqyq76nlkp5"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("glib" ,glib)
-       ("grilo" ,grilo)
-       ("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base)
-       ("gst-plugins-good" ,gst-plugins-good)
-       ("gtk+" ,gtk+)
-       ("libcddb" ,libcddb)
-       ("libcdio" ,libcdio)
-       ("libcdio-paranoia" ,libcdio-paranoia)
-       ("libgudev" ,libgudev)
-       ("libnotify" ,libnotify)
-       ("libpeas" ,libpeas)
-       ("libsoup" ,libsoup)
-       ("sqlite" ,sqlite)
-       ("taglib" ,taglib)))
+     (list glib
+           grilo
+           gstreamer
+           gst-plugins-base
+           gst-plugins-good
+           gtk+
+           libcddb
+           libcdio
+           libcdio-paranoia
+           libgudev
+           libnotify
+           libpeas
+           libsoup
+           sqlite
+           taglib))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -5796,7 +5767,7 @@ complete without obstructing your daily work.")
     (build-system meson-build-system)
     (arguments
      `(#:configure-flags '("-Dintrospection=false" "-Dgtk-doc=false")))
-    (inputs `(("python-pygobject" ,python-pygobject)))
+    (inputs (list python-pygobject))
     (native-inputs
      `(("glib:bin" ,glib "bin")
        ("pkg-config" ,pkg-config)))
@@ -5835,11 +5806,9 @@ for integration into status line generators or other command-line tools.")
                (("-msse2 -mfpmath=sse") ""))
              #t)))))
     (inputs
-     `(("cairo" ,cairo)
-       ("libsndfile" ,libsndfile)))
+     (list cairo libsndfile))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("lv2" ,lv2)))
+     (list pkg-config lv2))
     (home-page "http://openavproductions.com/artyfx/")
     (synopsis "Audio effect LV2 plugin bundle")
     (description "ArtyFX is an LV2 plugin bundle of artistic real-time audio
@@ -5873,15 +5842,15 @@ and reverb.")
          (delete 'configure))           ; no configure script
        #:test-target "test"))
     (inputs
-     `(("cairo" ,cairo)
-       ("hicolor-icon-theme" ,hicolor-icon-theme)
-       ("jack" ,jack-1)
-       ("ladspa" ,ladspa)
-       ("libsndfile" ,libsndfile)
-       ("lv2" ,lv2)
-       ("mesa" ,mesa)))
+     (list cairo
+           hicolor-icon-theme
+           jack-1
+           ladspa
+           libsndfile
+           lv2
+           mesa))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "Audio plugin collection")
     (description "LSP (Linux Studio Plugins) is a collection of audio
 plugins available as LADSPA/LV2 plugins and as standalone JACK
@@ -5905,13 +5874,9 @@ applications.")
          "08gjfx7vrsx9zvj04j8cr3vscxmq6jr2hbdi6dfgp1l1dnnpxsgq"))))
     (build-system meson-build-system)
     (inputs
-     `(("glu" ,glu)
-       ("libx11" ,libx11)
-       ("mesa" ,mesa)
-       ("sratom" ,sratom)))
+     (list glu libx11 mesa sratom))
     (native-inputs
-     `(("flex" ,flex)
-       ("pkg-config" ,pkg-config)))
+     (list flex pkg-config))
     (synopsis "Investigative LV2 plugin bundle")
     (description "The Sherlock plugin bundle contains LV2 plugins for
 visualizing LV2 atom, MIDI and OSC events.  They can be used for monitoring
@@ -5950,8 +5915,7 @@ and debugging of event signal flows inside plugin graphs.")
        ("cairo" ,cairo)
        ("gtk" ,gtk+-2)))
     (native-inputs
-     `(("faust" ,faust)
-       ("pkg-config" ,pkg-config)))
+     (list faust pkg-config))
     (home-page "https://foo-yc20.codeforcode.com/")
     (synopsis "Implementation of Yamaha YC-20 combo organ from 1969")
     (description "This is a Faust implementation of a 1969 designed Yamaha
@@ -5988,15 +5952,14 @@ as a whole to realisticly reproduce the features and flaws of the real deal.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("xxd" ,xxd)))
+     (list pkg-config xxd))
     (inputs
-     `(("cairo" ,cairo)
-       ("fftw" ,fftw)
-       ("fftwf" ,fftwf)
-       ("jack" ,jack-1)
-       ("lv2" ,lv2)
-       ("mesa" ,mesa)))
+     (list cairo
+           fftw
+           fftwf
+           jack-1
+           lv2
+           mesa))
     (synopsis "Realtime graphical spectrum analyzer")
     (description "Spectacle is a real-time spectral analyzer using the
 short-time Fourier transform, available as LV2 audio plugin and JACK client.")
@@ -6008,7 +5971,7 @@ short-time Fourier transform, available as LV2 audio plugin and JACK client.")
 (define-public x42-plugins
   (package
     (name "x42-plugins")
-    (version "20200714")
+    (version "20211016")
     (source
      (origin
        (method url-fetch)
@@ -6016,7 +5979,7 @@ short-time Fourier transform, available as LV2 audio plugin and JACK client.")
         (string-append "https://gareus.org/misc/x42-plugins/x42-plugins-"
                        version ".tar.xz"))
        (sha256
-        (base32 "1av05ykph8x67018hm9zfgh1vk0zi39mvrsxkj6bm4hkarxf0vvl"))))
+        (base32 "11bf6q42ihyk4qxwf83y0847zzyl65kwpbk3hmyz0f0ykil5fsb7"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ; no "check" target
@@ -6025,33 +5988,26 @@ short-time Fourier transform, available as LV2 audio plugin and JACK client.")
              "LIBZITACONVOLVER=-lzita-convolver"
              (string-append "FONTFILE="
                             (assoc-ref %build-inputs "font-dejavu")
-                            "/share/fonts/truetype/DejaVuSans-Bold.ttf"))
+                            "/share/fonts/truetype/DejaVuSans-Bold.ttf")
+             (string-append "CC=" ,(cc-for-target)))
        #:phases
        (modify-phases %standard-phases
-         (add-before 'build 'set-CC-variable
-           (lambda _
-             (setenv "CC" "gcc")
-             #t))
          (delete 'configure))))
     (inputs
-     `(("cairo" ,cairo)
-       ("fftwf" ,fftwf)
-       ("ftgl" ,ftgl)
-       ("glib" ,glib)
-       ("glu" ,glu)
-       ("hicolor-icon-theme" ,hicolor-icon-theme)
-       ("jack" ,jack-1)
-       ("libltc" ,libltc)
-       ("libsamplerate" ,libsamplerate)
-       ("libx11" ,libx11)
-       ("pango" ,pango)
-       ("zita-convolver" ,zita-convolver)))
+     (list cairo
+           fftwf
+           ftgl
+           glib
+           glu
+           hicolor-icon-theme
+           jack-1
+           libltc
+           libsamplerate
+           libx11
+           pango
+           zita-convolver))
     (native-inputs
-     `(("help2man" ,help2man)
-       ("liblo" ,liblo)
-       ("lv2" ,lv2)
-       ("font-dejavu" ,font-dejavu)
-       ("pkg-config" ,pkg-config)))
+     (list help2man liblo lv2 font-dejavu pkg-config))
     (synopsis "Collection of LV2/JACK audio/MIDI processing plugins")
     (description "x42-plugins is a collection of over 80 cross-platform LV2
 audio and MIDI plugins that can also run as standalone JACK applications.")
@@ -6089,16 +6045,14 @@ audio and MIDI plugins that can also run as standalone JACK applications.")
              (setenv "CC" "gcc") #t))
          (delete 'configure))))
     (inputs
-     `(("fftwf" ,fftwf)
-       ("jack" ,jack-1)                 ;for the standalone JACK application
-       ("liblo" ,liblo)
-       ("libsamplerate" ,libsamplerate)
-       ("mesa" ,mesa)
-       ("zita-convolver" ,zita-convolver)))
+     (list fftwf
+           jack-1 ;for the standalone JACK application
+           liblo
+           libsamplerate
+           mesa
+           zita-convolver))
     (native-inputs
-     `(("ladspa" ,ladspa)
-       ("lv2" ,lv2)
-       ("pkg-config" ,pkg-config)))
+     (list ladspa lv2 pkg-config))
     (synopsis "Collection of audio processing plugins")
     (description
      "Zam plugins is a collection of audio processing plugins in the LADSPA,
@@ -6131,18 +6085,14 @@ ZaMultiComp, ZaMultiCompX2 and ZamSynth.")
              (string-append "-DCMAKE_INSTALL_PREFIX="
                             (assoc-ref %outputs "out")))))
     (inputs
-     `(("hicolor-icon-theme" ,hicolor-icon-theme)
-       ("jack" ,jack-1)                 ;for the standalone JACK application
-       ("libsndfile" ,libsndfile)
-       ("libx11" ,libx11)
-       ("redkite" ,redkite)
-       ("rapidjson" ,rapidjson)))
+     (list hicolor-icon-theme
+           jack-1 ;for the standalone JACK application
+           libsndfile
+           libx11
+           redkite
+           rapidjson))
     (native-inputs
-     `(("lv2" ,lv2)
-       ;; Fails with default gcc (#include <filesystem> not found).
-       ("gcc" ,gcc-9)
-       ("pkg-config" ,pkg-config)
-       ("sord" ,sord)))
+     (list lv2 pkg-config sord))
     (synopsis "Percussion synthesizer")
     (description "Geonkick is a synthesizer that can synthesize elements
 of percussion such as kicks, snares, hit-hats, shakers, claps and sticks.
@@ -6177,16 +6127,16 @@ It can also play and mix samples.")
       (modify-phases %standard-phases
         (delete 'configure))))
    (inputs
-    `(("alsa-lib" ,alsa-lib)
-      ("cairo" ,cairo)
-      ("fluidsynth" ,fluidsynth)
-      ("jack" ,jack-1)
-      ("liblo" ,liblo)
-      ("libsigc++" ,libsigc++)
-      ("libsmf" ,libsmf)
-      ("libx11" ,libx11)))
+    (list alsa-lib
+          cairo
+          fluidsynth
+          jack-1
+          liblo
+          libsigc++
+          libsmf
+          libx11))
    (native-inputs
-    `(("pkg-config" ,pkg-config)))
+    (list pkg-config))
    (home-page "https://github.com/brummer10/Mamba")
    (synopsis "Virtual MIDI keyboard and MIDI file player/recorder for JACK")
    (description "Mamba is a virtual MIDI keyboard and MIDI file
@@ -6198,7 +6148,7 @@ ones.")
 (define-public dpf-plugins
   (package
     (name "dpf-plugins")
-    (version "1.3")
+    (version "1.4")
     (source
      (origin
        (method git-fetch)
@@ -6208,27 +6158,23 @@ ones.")
          (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32
-         "1hsfmpv3kvpiwk8nfw9xpaipzy0n27i83y2v1yr93lznwm5rqrbs"))))
+        (base32 "0y7qvpfm34g6f7d786c6c9043dlbg5c4h71l2s24dsc9m8i7x2ww"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ; no "check" target
        #:make-flags
-       (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
+       (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
+             (string-append "CC=" ,(cc-for-target)))
        #:phases
        (modify-phases %standard-phases
-         (add-before 'build 'set-CC-variable
-           (lambda _ (setenv "CC" "gcc") #t))
          (delete 'configure))))
     (inputs
-     `(("cairo" ,cairo)
-       ("liblo" ,liblo)                 ; for dssi plugins
-       ("jack" ,jack-1)                 ; for standalone applications
-       ("mesa" ,mesa)))
+     (list cairo
+           liblo ; for dssi plugins
+           jack-1 ; for standalone applications
+           mesa))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("dssi" ,dssi)
-       ("lv2" ,lv2)))
+     (list pkg-config dssi lv2))
     (home-page "https://github.com/DISTRHO/DPF-Plugins")
     (synopsis "Audio plugin collection")
     (description "Collection of audio plugins built with the DISTRHO Plugin
@@ -6271,14 +6217,9 @@ Soul Force), MVerb, Nekobi, and ProM.")
            (lambda _
              (setenv "CC" "gcc"))))))
     (inputs
-     `(("cairo" ,cairo)
-       ("dssi" ,dssi)
-       ("glu" ,glu)
-       ("mesa" ,mesa)
-       ("pango" ,pango)))
+     (list cairo dssi glu mesa pango))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("lv2" ,lv2)))
+     (list pkg-config lv2))
     (home-page "https://x42-plugins.com/x42/x42-avldrums")
     (synopsis "Drum sample player LV2 plugin dedicated to the AVLinux Drumkits")
     (description "AVLdrums is a drum sample player LV2 plugin dedicated to Glen
@@ -6300,7 +6241,9 @@ MIDI drums and comes as two separate drumkits: Black Pearl and Red Zeppelin.")
         (file-name (git-file-name name version))
         (sha256
           (base32
-            "17ys2vvhncx9i3ydg3xwgz1d3gqv4yr5mqi7vr0i0ca6nad6x3d4"))))
+            "17ys2vvhncx9i3ydg3xwgz1d3gqv4yr5mqi7vr0i0ca6nad6x3d4"))
+        ;; Apply GCC 9 fixes from https://github.com/mtytel/helm/pull/233
+        (patches (search-patches "helm-fix-gcc-9-build.patch"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f  ; no "check" target
@@ -6320,12 +6263,6 @@ MIDI drums and comes as two separate drumkits: Black Pearl and Red Zeppelin.")
              (substitute* "Makefile"
                (("/usr") ""))
              #t))
-         (add-before 'reset-gzip-timestamps 'make-gz-files-writable
-           (lambda* (#:key outputs #:allow-other-keys)
-             (for-each make-file-writable
-                       (find-files (string-append (assoc-ref outputs "out"))
-                                   ".*\\.gz$"))
-             #t))
          (delete 'configure))))
     (inputs
      `(("alsa-lib" ,alsa-lib)
@@ -6337,8 +6274,7 @@ MIDI drums and comes as two separate drumkits: Black Pearl and Red Zeppelin.")
        ("jack" ,jack-1)
        ("mesa" ,mesa)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("lv2" ,lv2)))
+     (list pkg-config lv2))
     (home-page "https://tytel.org/helm/")
     (synopsis "Polyphonic synth with lots of modulation")
     (description "Helm is a cross-platform polyphonic synthesizer available standalone
@@ -6365,7 +6301,6 @@ and as an LV2 plugin.")
    (build-system meson-build-system)
    (arguments
     `(#:glib-or-gtk? #t
-      #:meson ,meson-0.55
       #:configure-flags
       `("-Dtests=true"
         "-Dmanpage=true"
@@ -6402,9 +6337,8 @@ and as an LV2 plugin.")
       ("xdg-utils" ,xdg-utils)
       ("zstd" ,zstd "lib")))
    (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("help2man" ,help2man)
-       ("glib" ,glib "bin"))) ; for 'glib-compile-resources'
+     (list pkg-config help2man
+           `(,glib "bin"))) ; for 'glib-compile-resources'
    (synopsis "Digital audio workstation focusing on usability")
    (description "Zrythm is a digital audio workstation designed to be
 featureful and easy to use.  It offers unlimited automation options, LV2
@@ -6415,7 +6349,7 @@ plugin support, JACK support and chord assistance.")
 (define-public dragonfly-reverb
   (package
     (name "dragonfly-reverb")
-    (version "3.2.1")
+    (version "3.2.5")
     (source
      (origin
        (method git-fetch)
@@ -6427,11 +6361,12 @@ plugin support, JACK support and chord assistance.")
          (recursive? #t)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0vfm2510shah67k87mdyar4wr4vqwii59y9lqfhwm6blxparkrqa"))))
+        (base32 "14kia9wjs0nqfx4psnr3vf4x6hihkf80gb0mjzmdnnnk4cnrdydm"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ; no check target
-       #:make-flags (list "CC=gcc")
+       #:make-flags
+       (list (string-append "CC=" ,(cc-for-target)))
        #:phases
        (modify-phases %standard-phases
          (delete 'configure)            ;no configure target
@@ -6455,14 +6390,11 @@ plugin support, JACK support and chord assistance.")
                                (and
                                  (equal? (dirname name) "bin")
                                  (not (string-suffix? ".so" name))
-                                 (not (string-suffix? ".lv2" name))))))
-               #t))))))
+                                 (not (string-suffix? ".lv2" name))))))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("jack" ,jack-1)
-       ("libx11" ,libx11)
-       ("mesa" ,mesa)))
+     (list jack-1 libx11 mesa))
     (home-page "https://michaelwillis.github.io/dragonfly-reverb/")
     (synopsis "Concert hall reverb and room reverb effects")
     (description
@@ -6488,12 +6420,9 @@ as JACK standalone applications.")
          "1rkm2xajmyik6289b20rp5a5br9f3sh1xk8nb1bs6qpmcrfirgbs"))))
     (build-system meson-build-system)
     (inputs
-      `(("guile" ,guile-2.2)
-        ("libsndfile" ,libsndfile)
-        ("lv2" ,lv2)
-        ("ztoolkit-rsvg" ,ztoolkit-rsvg)))
+      (list guile-2.2 libsndfile lv2 ztoolkit-rsvg))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (synopsis "Audio plugin collection")
     (description "ZPlugins is a collection of audio DSP plugins intended
 to be bundled with the Zrythm @dfn{digital audio workstation} (DAW).")
@@ -6522,12 +6451,9 @@ to be bundled with the Zrythm @dfn{digital audio workstation} (DAW).")
     (arguments
      `(#:tests? #f))                    ; no tests included
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("glib" ,glib)
-       ("jack" ,jack-1)
-       ("lv2" ,lv2)))
+     (list alsa-lib glib jack-1 lv2))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/ssj71/reMID.lv2")
     (synopsis
      "MIDI-controlled implementation of the SID 6581 chip used in the
@@ -6566,11 +6492,9 @@ control of the chip.")
        (modify-phases %standard-phases
          (delete 'configure))))         ;no configure target
     (inputs
-     `(("cairo" ,cairo)
-       ("jack" ,jack-1)
-       ("mesa" ,mesa)))
+     (list cairo jack-1 mesa))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/linuxmao-org/VL1-emulator")
     (synopsis "Emulator of Casio VL-Tone VL1")
     (description "The VL1-Emulator is an emulator of Casio VL-Tone VL1,
@@ -6662,9 +6586,9 @@ plugin and a standalone JACK application.")
                               "/lib/lv2")
                        "install"))))))
       (inputs
-        `(("lv2" ,lv2)))
+        (list lv2))
       (native-inputs
-        `(("pkg-config" ,pkg-config)))
+        (list pkg-config))
       (synopsis "Audio plugin collection")
       (description "TAP (Tom's Audio Processing) plugins is a collection of
   audio effect plugins originally released as LADSPA plugins.  This package
@@ -6718,11 +6642,9 @@ plugin and a standalone JACK application.")
                                  (not (string-suffix? ".lv2" name))))))
                #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-      `(("jack" ,jack-1)
-        ("lv2" ,lv2)
-        ("mesa" ,mesa)))
+      (list jack-1 lv2 mesa))
     (synopsis "Waveshaper plugin")
     (description "Wolf Shaper is a waveshaper plugin with a graph editor.
 It is provided as an LV2 plugin and as a standalone Jack application.")
@@ -6800,14 +6722,14 @@ It is provided as an LV2 plugin and as a standalone Jack application.")
                                    (not (string-suffix? ".lv2" name))))))
                  #t))))))
       (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
       (inputs
-        `(("cairo" ,cairo)
-          ("glu" ,glu)
-          ("jack" ,jack-1)
-          ("lv2" ,lv2)
-          ("mesa" ,mesa)
-          ("pango" ,pango)))
+        (list cairo
+              glu
+              jack-1
+              lv2
+              mesa
+              pango))
       (synopsis "Audio plugin collection")
       (description "Shiru plugins is a collection of audio plugins created
   by Shiru, ported to LV2 by the Linux MAO project using the DISTRHO plugin
@@ -6838,21 +6760,116 @@ It is provided as an LV2 plugin and as a standalone Jack application.")
                (substitute* (string-append bin "a2j")
                  (("a2j_control") (string-append bin "a2j_control")))
                (wrap-program (string-append bin "a2j_control")
-                `("PYTHONPATH" prefix (,(getenv "PYTHONPATH"))))
+                `("PYTHONPATH" prefix (,(getenv "GUIX_PYTHONPATH"))))
                #t))))))
     (build-system meson-build-system)
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("bash-minimal" ,bash-minimal)   ; for wrap-program
-       ("dbus" ,dbus)
-       ("jack" ,jack-1)
-       ("python" ,python)
-       ("python-dbus" ,python-dbus)))
+     (list alsa-lib
+           bash-minimal ; for wrap-program
+           dbus
+           jack-1
+           python
+           python-dbus))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "ALSA sequencer to JACK MIDI bridging")
     (description
      "@code{a2jmidid} is a daemon that implements automatic bridging of ALSA
 midi devices to JACK midi devices.")
     (home-page "https://github.com/jackaudio/a2jmidid")
     (license license:gpl2)))
+
+(define-public opustags
+  (package
+    (name "opustags")
+    (version "1.6.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/fmang/opustags")
+                    (commit version)))
+              (sha256
+               (base32 "1wsfw713rhi2gg5xc04cx5i31hlw0l3wdflj3r1y8w45bdk6ag1z"))
+              (file-name (git-file-name name version))))
+    (arguments
+     (list
+       #:test-target "check"
+       #:phases
+       #~(modify-phases %standard-phases
+         ;; This package does not use the perl-build-system, so we have to
+         ;; manually set up the Perl environment used by the test suite.
+         (add-before 'check 'setup-perl-environment
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let* ((perl-list-moreutils-lib
+                      (string-append #$(this-package-native-input "perl-list-moreutils")
+                                     "/lib/perl5/site_perl/"
+                                     #$(package-version perl)))
+                    (perl-exporter-tiny-lib
+                      (string-append #$(this-package-native-input "perl-exporter-tiny")
+                                     "/lib/perl5/site_perl/"
+                                     #$(package-version perl))))
+               (setenv "PERL5LIB" (string-append perl-list-moreutils-lib ":"
+                                                 perl-exporter-tiny-lib))))))))
+    (build-system cmake-build-system)
+    (inputs
+      (list libogg))
+    (native-inputs
+      (list pkg-config
+            ffmpeg
+            perl-exporter-tiny
+            perl-list-moreutils
+            perl-test-harness))
+    (synopsis "Ogg Opus tags editor")
+    (description "@code{opustags} is an Ogg Opus tag editor.  It reads and edits
+the comment header of an Ogg Opus audio file, offering both read-only and
+editing modes.  Tags can be edited interactively with an editor of your
+choice.")
+    (home-page "https://github.com/fmang/opustags")
+    (license license:bsd-3)))
+
+(define-public musikcube
+  (package
+    (name "musikcube")
+    (version "0.96.10")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                     (url "https://github.com/clangen/musikcube/")
+                     (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "06myr83x8jvzlzchg3jsw1163n2lcsbmb176zgnx7xxa26jpdbh1"))))
+    (build-system cmake-build-system)
+    (arguments
+     '(#:tests? #f ; No test suite
+       #:configure-flags
+       '("-DCMAKE_BUILD_TYPE=Release"
+         "-DENABLE_BUNDLED_TAGLIB=false"
+         ;; Use the "wide" ncurses headers but don't look for them in an
+         ;; ncursesw directory. For more info:
+         ;; https://github.com/clangen/musikcube/wiki/building#compiler-cannot-find-ncurseswcursesh
+         "-DNO_NCURSESW=true"
+         ;; We will strip the binaries ourselves in the 'strip' phase.
+         "-DDISABLE_STRIP=true")))
+    (native-inputs
+     (list pkg-config))
+    (inputs
+     (list alsa-lib
+           boost
+           curl
+           ffmpeg
+           lame
+           libev
+           libmicrohttpd
+           libopenmpt
+           ncurses
+           openssl
+           pulseaudio
+           taglib
+           zlib))
+    (synopsis "Terminal-based music player, library, and streaming audio server")
+    (description "Musikcube is a terminal-based music player, library, and
+streaming audio server.")
+    (home-page "https://musikcube.com/")
+    (license license:bsd-3)))
diff --git a/gnu/packages/myrddin.scm b/gnu/packages/myrddin.scm
new file mode 100644
index 0000000000..897276f57d
--- /dev/null
+++ b/gnu/packages/myrddin.scm
@@ -0,0 +1,65 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2021 Guix Together <jgart@dismail.de>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages myrddin)
+  #:use-module (guix build-system gnu)
+  #:use-module (guix utils)
+  #:use-module (guix download)
+  #:use-module (guix gexp)
+  #:use-module (guix git-download)
+  #:use-module (gnu packages bison)
+  #:use-module (gnu packages pkg-config)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix packages))
+
+(define-public myrddin
+  (package
+    (name "myrddin")
+    (version "0.3.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url "https://github.com/oridb/mc")
+         (commit (string-append "r" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0acqqz74ypmjvi1yqz7g1ymyk3mmkzwqgmdd3s7s287bdy4a72gc"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list #:make-flags
+           #~(list (string-append "CC=" #$(cc-for-target))
+                   (string-append "PREFIX=" #$output))
+           #:phases
+           #~(modify-phases %standard-phases
+               (replace 'build
+                 (lambda* (#:key make-flags #:allow-other-keys)
+                   (apply invoke "make" "bootstrap" make-flags)
+                   (apply invoke "make" make-flags))))))
+    (native-inputs
+     (list bison pkg-config))
+    (home-page "https://myrlang.org")
+    (synopsis "Compiler and tools for the Myrddin programming language")
+    (description
+     "Myrddin is a programming language.  It features strong type checking,
+generics, type inference, closures, and traits. It aims for C like low level
+control.  This combination makes Myrddin suitable for anything ranging from
+desktop applications, to embedded systems and potentially even kernel
+development.")
+    (license license:expat)))
diff --git a/gnu/packages/nano.scm b/gnu/packages/nano.scm
index 6e5a281443..552571de1f 100644
--- a/gnu/packages/nano.scm
+++ b/gnu/packages/nano.scm
@@ -30,17 +30,16 @@
 (define-public nano
   (package
     (name "nano")
-    (version "5.8")
+    (version "6.0")
     (source
      (origin
       (method url-fetch)
       (uri (string-append "mirror://gnu/nano/nano-" version ".tar.xz"))
       (sha256
-       (base32 "133nhxg4xfxisjzi85rn2l575hdbvcax1s13l4m6wcvq5zdn6fz4"))))
+       (base32 "18ly2v5yyrqws1x4z154cnv9xf2vbk8js2mqmq50xlaaifv8rb4k"))))
     (build-system gnu-build-system)
     (inputs
-     `(("gettext" ,gettext-minimal)
-       ("ncurses" ,ncurses)))
+     (list gettext-minimal ncurses))
     (home-page "https://www.nano-editor.org/")
     (synopsis "Small, user-friendly console text editor")
     (description
diff --git a/gnu/packages/ncdu.scm b/gnu/packages/ncdu.scm
index 9faa7131d3..d6e4522bf0 100644
--- a/gnu/packages/ncdu.scm
+++ b/gnu/packages/ncdu.scm
@@ -37,7 +37,7 @@
                (base32
                 "1m0gk09jaz114piidiw8fkg0id5l6nhz1cg5nlaf1yl3l595g49b"))))
     (build-system gnu-build-system)
-    (inputs `(("ncurses" ,ncurses)))
+    (inputs (list ncurses))
     (synopsis "Ncurses-based disk usage analyzer")
     (description
      "Ncdu is a disk usage analyzer with an ncurses interface, aimed to be
diff --git a/gnu/packages/ncurses.scm b/gnu/packages/ncurses.scm
index 2e63565591..311a681d09 100644
--- a/gnu/packages/ncurses.scm
+++ b/gnu/packages/ncurses.scm
@@ -5,7 +5,7 @@
 ;;; Copyright © 2016 Nikita <nikita@n0.is>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
-;;; Copyright © 2017, 2019, 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2017, 2019, 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
 ;;;
@@ -36,16 +36,17 @@
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages swig)
   #:use-module (gnu packages linux)
-  #:use-module (guix utils))
+  #:use-module (guix utils)
+  #:use-module (ice-9 match))
 
 (define-public ncurses
   (package
     (name "ncurses")
-    (version "6.2")
+    (version "6.2.20210619")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnu/ncurses/ncurses-"
-                                  (car (string-split version #\-))
+                                  (version-major+minor version)
                                   ".tar.gz"))
               (sha256
                (base32
@@ -57,8 +58,7 @@
      (let ((patch-makefile-phase
             '(lambda _
                (for-each patch-makefile-SHELL
-                         (find-files "." "Makefile.in"))
-               #t))
+                         (find-files "." "Makefile.in"))))
            (configure-phase
             ;; The 'configure' script does not understand '--docdir', so we must
             ;; override that and use '--mandir' instead.
@@ -74,18 +74,20 @@
                         (if target
                             (cons (string-append "--host=" target)
                                   configure-flags)
-                            configure-flags))
-                 #t)))
+                            configure-flags)))))
            (apply-rollup-patch-phase
             ;; Ncurses distributes "stable" patchsets to be applied on top
             ;; of the release tarball.  These are only available as shell
             ;; scripts(!) so we decompress and apply them in a phase.
             ;; See <https://invisible-mirror.net/archives/ncurses/6.1/README>.
             '(lambda* (#:key inputs native-inputs #:allow-other-keys)
-               (copy-file (assoc-ref (or native-inputs inputs) "rollup-patch")
-                          (string-append (getcwd) "/rollup-patch.sh.bz2"))
-               (invoke "bzip2" "-d" "rollup-patch.sh.bz2")
-               (invoke "sh" "rollup-patch.sh")))
+               (let ((rollup-patch (assoc-ref (or native-inputs inputs)
+                                              "rollup-patch")))
+                 (when rollup-patch
+                   (copy-file rollup-patch
+                              (string-append (getcwd) "/rollup-patch.sh.bz2"))
+                   (invoke "bzip2" "-d" "rollup-patch.sh.bz2")
+                   (invoke "sh" "rollup-patch.sh")))))
            (remove-shebang-phase
             '(lambda _
                ;; To avoid retaining a reference to the bootstrap Bash via the
@@ -98,8 +100,7 @@
                  (("@SHELL@ \\$0")
                   "$0")
                  (("mandir=.*$")
-                  "mandir=share/man"))
-               #t))
+                  "mandir=share/man"))))
            (post-install-phase
             `(lambda* (#:key outputs #:allow-other-keys)
                (let ((out (assoc-ref outputs "out")))
@@ -156,13 +157,12 @@
                                            (when (file-exists? packagew.pc)
                                              (symlink packagew.pc package.pc))))
                                        '())))
-                             '("curses" "ncurses" "form" "panel" "menu")))
-                 #t))))
+                             '("curses" "ncurses" "form" "panel" "menu")))))))
        `(#:configure-flags
          ,(cons*
            'quasiquote
            `(("--with-shared" "--without-debug" "--enable-widec"
-              
+
               "--enable-pc-files"
               ,(list 'unquote '(string-append "--with-pkg-config-libdir="
                                               (assoc-ref %outputs "out")
@@ -195,6 +195,8 @@
               ,@(if (target-mingw?) '("--enable-term-driver") '()))))
          #:tests? #f                  ; no "check" target
          #:phases (modify-phases %standard-phases
+                    (add-after 'unpack 'apply-rollup-patch
+                      ,apply-rollup-patch-phase)
                     (replace 'configure ,configure-phase)
                     (add-after 'install 'post-install
                       ,post-install-phase)
@@ -206,6 +208,17 @@
      `(,@(if (%current-target-system)
              `(("self" ,this-package))            ;for `tic'
              '())
+       ("rollup-patch"
+        ,(origin
+           (method url-fetch)
+           (uri (match (string-split (version-major+minor+point version) #\.)
+                  ((major minor point)
+                   (string-append "https://invisible-mirror.net/archives"
+                                  "/ncurses/" major "." minor "/ncurses-"
+                                  major "." minor "-" point "-patch.sh.bz2"))))
+           (sha256
+            (base32
+             "1b6522cvi4066bgh9lp93q8lk93zcjjssvnw1512z447xvazy2y6"))))
        ("pkg-config" ,pkg-config)))
     (native-search-paths
      (list (search-path-specification
@@ -248,7 +261,7 @@ ncursesw library provides wide character support.")
                 "0riqmp2xl2j2yxx69nyg8jbm2fyi5fp4clcf6zi5jfm3irn3l8y9"))))
     (build-system gnu-build-system)
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (synopsis "Curses widgets")
     (description "Dialog is a script-interpreter which provides a set of
 curses widgets, such as dialog boxes.")
@@ -269,7 +282,7 @@ curses widgets, such as dialog boxes.")
          "0r6xd9wr0c25rr28zixhqipak575zqsfb7r7f2693i9il1dpj554"))))
     (build-system perl-build-system)
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (arguments
      `(#:make-maker-flags (list "PANELS" "MENUS")
        #:phases
@@ -328,8 +341,8 @@ of your system.")
                     (lib (string-append out "/lib")))
                ;; Some programs look for libstfl.so.0.
                (symlink "libstfl.so" (string-append lib "/libstfl.so.0"))))))))
-    (inputs `(("ncurses" ,ncurses)))
-    (native-inputs `(("swig" ,swig)))
+    (inputs (list ncurses))
+    (native-inputs (list swig))
     (home-page "http://www.clifford.at/stfl/")
     (synopsis "Structured terminal forms library")
     (description "Stfl is a library which implements a curses-based widget
diff --git a/gnu/packages/netpbm.scm b/gnu/packages/netpbm.scm
index 96025661ca..5f3dcdb8ea 100644
--- a/gnu/packages/netpbm.scm
+++ b/gnu/packages/netpbm.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013, 2015 Andreas Enge <andreas@enge.fr>
-;;; Copyright © 2015, 2016 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2015, 2016, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -132,8 +132,7 @@
              (display (string-append "LDFLAGS += -Wl,-rpath=" %output "/lib") f)
              (close-port f))
 
-           (let ((rgb (string-append (assoc-ref inputs "xorg-rgb")
-                                     "/share/X11/rgb.txt")))
+           (let ((rgb (search-input-file inputs "/share/X11/rgb.txt")))
              (substitute* "config.mk"
                (("/usr/share/netpbm/rgb.txt") rgb))
 
@@ -143,8 +142,7 @@
                (("\"%s/gs\"")
                 "\"%s/gsc\"")
                (("/usr/bin/gs")
-                (string-append (assoc-ref inputs "ghostscript") "/bin/gsc"))))
-           #t))
+                (search-input-file inputs "/bin/gsc"))))))
        (add-before 'check 'setup-check
          (lambda _
            ;; install temporarily into /tmp/netpbm
diff --git a/gnu/packages/nettle.scm b/gnu/packages/nettle.scm
index 7f85f54fbf..27bd9efc60 100644
--- a/gnu/packages/nettle.scm
+++ b/gnu/packages/nettle.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016, 2021 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
+;;; 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.
@@ -62,8 +62,8 @@
                                     (find-files "." "\\.a$")))
                         #t))))))
     (outputs '("out" "debug" "static"))
-    (native-inputs `(("m4" ,m4)))
-    (propagated-inputs `(("gmp" ,gmp)))
+    (native-inputs (list m4))
+    (propagated-inputs (list gmp))
     (home-page "https://www.lysator.liu.se/~nisse/nettle/")
     (synopsis "C library for low-level cryptographic functionality")
     (description
@@ -73,43 +73,21 @@ cryptographic toolkits for object-oriented languages or in applications
 themselves.")
     (license gpl2+)))
 
-(define-public nettle-3.5
+(define-public nettle
   ;; This version is not API-compatible with version 2.  In particular, lsh
   ;; cannot use it yet.  So keep it separate.
   (package (inherit nettle-2)
-    (version "3.5.1")
-    (replacement nettle-3.5/fixed)
+    (version "3.7.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnu/nettle/nettle-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "06clvkdfxhlbagn4afssylmn5vrak59dlmnvy8b2xc31hycs3k3m"))))
+                "1w5wwc3q0r97d2ifhx77cw7y8s20bm8x52is9j93p2h47yq5w7v6"))))
     (arguments
      (substitute-keyword-arguments (package-arguments nettle-2)
        ((#:configure-flags flags)
         ;; 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 nettle-3.5/fixed
-  (package-with-extra-patches
-   nettle-3.5
-   (search-patches "nettle-3.5-check-_pkcs1_sec_decrypt-msg-len.patch"
-                   "nettle-3.5-CVE-2021-3580-pt1.patch"
-                   "nettle-3.5-CVE-2021-3580-pt2.patch")))
-
-(define-public nettle-3.7
-  (package (inherit nettle-3.5)
-    (version "3.7.3")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "mirror://gnu/nettle/nettle-"
-                                  version ".tar.gz"))
-              (sha256
-               (base32
-                "1w5wwc3q0r97d2ifhx77cw7y8s20bm8x52is9j93p2h47yq5w7v6"))))))
-
-;;; 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 e029a5c7ec..69e27f3113 100644
--- a/gnu/packages/networking.scm
+++ b/gnu/packages/networking.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2017, 2018, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015, 2016, 2017, 2018, 2020 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015, 2016, 2017, 2021 Stefan Reichör <stefan@xsteve.at>
@@ -14,7 +14,7 @@
 ;;; Copyright © 2016, 2017 Pjotr Prins <pjotr.guix@thebird.nl>
 ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2017, 2020, 2021 Leo Famulari <leo@famulari.name>
-;;; Copyright © 2017, 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2017, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017, 2018, 2019 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2017, 2019 Gábor Boskovits <boskovits@gmail.com>
 ;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be>
@@ -23,10 +23,10 @@
 ;;; Copyright © 2018, 2019 Tonton <tonton@riseup.net>
 ;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2018 Theodoros Foradis <theodoros@foradis.org>
-;;; Copyright © 2018, 2020, 2021 Marius Bakke <marius@gnu.org>
+;;; Copyright © 2018, 2020-2022 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2018, 2020, 2021 Oleg Pykhalov <go.wigust@gmail.com>
 ;;; Copyright © 2018 Pierre Neidhardt <mail@ambrevar.xyz>
-;;; Copyright © 2019, 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2019, 2020, 2021, 2022 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>
@@ -43,7 +43,10 @@
 ;;; Copyright © 2021 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;; Copyright © 2021 Justin Veilleux <terramorpha@cock.li>
 ;;; Copyright © 2021 Vinicius Monego <monego@posteo.net>
+;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
 ;;; Copyright © 2021 Milkey Mouse <milkeymouse@meme.institute>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -64,6 +67,7 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix gexp)
   #:use-module (guix git-download)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system glib-or-gtk)
@@ -82,6 +86,7 @@
   #:use-module (gnu packages autogen)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages bash)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages check)
@@ -123,6 +128,7 @@
   #:use-module (gnu packages pretty-print)
   #:use-module (gnu packages pulseaudio)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-crypto)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
@@ -159,12 +165,12 @@
         (base32 "10ndzkip8blgkw572n3dicl6mgjaa7kygwn3vls80liq92vf1sa9"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python-wrapper)
-       ("which" ,which)))
+     (list autoconf
+           automake
+           libtool
+           pkg-config
+           python-wrapper
+           which))
     (home-page "https://github.com/sctplab/usrsctp/")
     (synopsis "SCTP user-land implementation")
     (description "UsrSCTP is a portable SCTP userland stack.  SCTP is a message
@@ -175,7 +181,7 @@ runs on top of IP or UDP, and supports both v4 and v6 versions.")
 (define-public axel
   (package
     (name "axel")
-    (version "2.17.10")
+    (version "2.17.11")
     (source
      (origin
        (method url-fetch)
@@ -183,13 +189,12 @@ runs on top of IP or UDP, and supports both v4 and v6 versions.")
                            "releases/download/v" version "/"
                            "axel-" version ".tar.xz"))
        (sha256
-        (base32 "0kmlqk04sgkshsll4r9w3k0rvrgz0gpk987618r50khwl484zss6"))))
+        (base32 "1yfcsi0zv07bvhj8klgna3y1ycc4jhaija1b3rzzv0i4d4c2q2sq"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("pkg-config" ,pkg-config)))
+     (list gettext-minimal pkg-config))
     (inputs
-     `(("libressl" ,libressl)))
+     (list libressl))
     (home-page "https://github.com/axel-download-accelerator/axel")
     (synopsis "Light command line download accelerator")
     (description
@@ -291,12 +296,24 @@ Android, and ChromeOS.")
           "-Dgtk_doc=enabled")
          #:phases
          (modify-phases %standard-phases
-           (add-after 'unpack 'disable-failing-test
+           (add-after 'unpack 'disable-failing-tests
              (lambda _
                (substitute* "tests/meson.build"
                  ;; ‘test-set-port-range.c:66:main: assertion failed:
                  ;; (nice_agent_gather_candidates (agent, stream1))’
-                 (("'test-set-port-range'") "#"))))
+                 (("'test-set-port-range'" all)
+                  (string-append "# " all))
+                 ;; The following test is disabled as it fails in a
+                 ;; nondeterministic fashion (see:
+                 ;; https://gitlab.freedesktop.org/libnice/libnice/-/issues/151).
+                 (("'test-bsd'" all)
+                  (string-append "# " all)))
+               (substitute* "stun/tests/meson.build"
+                 ;; test-bind.c:234: bad_responses: Assertion `len >= 20'
+                 ;; failed (see:
+                 ;; https://gitlab.freedesktop.org/libnice/libnice/-/issues/150).
+                 (("'bind', ")
+                  ""))))
            (add-after 'install 'move-docs
              (lambda* (#:key outputs #:allow-other-keys)
                (let* ((out (assoc-ref outputs "out"))
@@ -308,16 +325,13 @@ Android, and ChromeOS.")
       (native-inputs
        `(("glib:bin" ,glib "bin")
          ("gobject-introspection" ,gobject-introspection)
+         ("graphviz" ,graphviz)
          ("gtk-doc" ,gtk-doc/stable)
          ("pkg-config" ,pkg-config)))
       (inputs
-       `(("gstreamer" ,gstreamer)
-         ("gst-plugins-base" ,gst-plugins-base)
-         ("libnsl" ,libnsl)))
+       (list gstreamer gst-plugins-base libnsl))
       (propagated-inputs
-       `(("glib" ,glib)
-         ("glib-networking" ,glib-networking)
-         ("gnutls" ,gnutls)))
+       (list glib glib-networking gnutls))
       (synopsis "GLib ICE implementation")
       (description "LibNice is a library that implements the Interactive
 Connectivity Establishment (ICE) standard (RFC 5245 & RFC 8445).  It provides a
@@ -376,8 +390,7 @@ GLib-based library, libnice, as well as GStreamer elements to use it.")
                   "CRYPTO=GNUTLS"))))
            (delete 'configure))))
       (inputs
-       `(("gnutls" ,gnutls)
-         ("zlib" ,zlib)))
+       (list gnutls zlib))
       (synopsis "Tools and library for handling RTMP streams")
       (description "RTMPdump is a toolkit for RTMP streams.  All forms of RTMP are
 supported, including rtmp://, rtmpt://, rtmpe://, rtmpte://, and rtmps://.")
@@ -405,7 +418,7 @@ supported, including rtmp://, rtmpt://, rtmpe://, rtmpte://, and rtmps://.")
         (base32 "1n6pgrcs8gwrcq5fch1q3yk3jipjwrf21s9a13fbjrl903g5zzv9"))))
     (build-system cmake-build-system)
     (arguments `(#:tests? #f)) ;no tests
-    (inputs `(("ncurses" ,ncurses)))
+    (inputs (list ncurses))
     (synopsis "Network load monitor")
     (description
      "Slurm is a network load monitor.  It shows real-time traffic statistics
@@ -441,7 +454,7 @@ from any network device in any of three ASCII graph formats.")
        ("pkg-config" ,pkg-config)
        ("tclsh" ,tcl)))
     (propagated-inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (synopsis "Secure Reliable Transport")
     (description "SRT is a transport technology that optimizes streaming
 performance across unpredictable networks, such as the Internet.")
@@ -482,12 +495,7 @@ performance across unpredictable networks, such as the Internet.")
         (base32 "1jfq58j365mlgssavyw5wcal42n0xjkr40vmj9b8w265wgs28j20"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
-    (inputs
-     `(("linux-headers" ,linux-libre-headers)))
+     (list autoconf automake libtool pkg-config))
     (synopsis
      "@acronym{SCTP, Stream Control Transmission Protocol} helpers for Linux")
     (description
@@ -516,7 +524,7 @@ It also includes some SCTP-related helper utilities.")
         (base32 "14h2qlmfi24bizhvvqkfqfa78pzm3911ibrzy9k94i97xy1978dy"))))
     (build-system python-build-system)
     (inputs
-     `(("lksctp-tools" ,lksctp-tools)))
+     (list lksctp-tools))
     (arguments
      `(#:tests? #f  ;; tests require network
        #:phases
@@ -553,7 +561,7 @@ SCTP-aware kernel (most are).")
        (list (string-append "--docdir=" (assoc-ref %outputs "out")
                             "/share/doc/" ,name "-" ,version))))
     (inputs
-     `(("libpcap" ,libpcap)))
+     (list libpcap))
     (home-page "https://www.zeroflux.org/projects/knock")
     (synopsis "Small port-knock daemon")
     (description "@command{knockd} is a port-knock daemon.  It listens to all traffic on
@@ -649,14 +657,14 @@ systems with no further dependencies.")
 (define-public blueman
   (package
     (name "blueman")
-    (version "2.2.1")
+    (version "2.2.3")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://github.com/blueman-project/blueman/releases"
                            "/download/" version "/blueman-" version ".tar.xz"))
        (sha256
-        (base32 "0whs1bqnn1fgzrq7y2w1d06ldvfafq6h2xzmcfncbwmyb4i0mhgw"))))
+        (base32 "1s86w4mklzr8hvbgl3nkg8jycl6grww533dhzw8gdn5glqfpkpbf"))))
     (build-system glib-or-gtk-build-system)
     (arguments
      `(#:configure-flags (list "--enable-polkit"
@@ -673,26 +681,24 @@ systems with no further dependencies.")
                               "blueman-manager.in" "blueman-mechanism.in"
                               "blueman-rfcomm-watcher.in" "blueman-sendto.in"
                               "blueman-services.in" "blueman-tray.in")
-                 (("@PYTHON@") (string-append (assoc-ref inputs "python")
-                                              "/bin/python"
-                                              ,(version-major+minor
-                                                (package-version python))))))
-             #t))
+                 (("@PYTHON@")
+                  (search-input-file inputs
+                                     (string-append
+                                      "/bin/python"
+                                      ,(version-major+minor
+                                        (package-version python)))))))))
          ;; Fix loading of external programs.
          (add-after 'unpack 'patch-external-programs
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* '("blueman/main/NetConf.py"
                             "blueman/main/PPPConnection.py")
                (("/usr/sbin/bluetoothd")
-                (string-append (assoc-ref inputs "bluez")
-                               "/libexec/bluetooth/bluetoothd"))
+                (search-input-directory inputs
+                                        "/libexec/bluetooth/bluetoothd"))
                (("/sbin/iptables")
-                (string-append (assoc-ref inputs "iptables")
-                               "/sbin/iptables"))
+                (search-input-file inputs "/sbin/iptables"))
                (("/usr/sbin/pppd")
-                (string-append (assoc-ref inputs "ppp")
-                               "/sbin/pppd")))
-             #t))
+                (search-input-file inputs "/sbin/pppd")))))
          ;; Fix loading of pulseaudio libraries.
          (add-after 'unpack 'patch-pulseaudio-libraries
            (lambda* (#:key inputs #:allow-other-keys)
@@ -703,8 +709,7 @@ systems with no further dependencies.")
                (with-directory-excursion "blueman/main"
                  (substitute* "PulseAudioUtils.py"
                    (("libpulse.so.0") pulse)
-                   (("libpulse-mainloop-glib.so.0") pulse-glib)))
-               #t)))
+                   (("libpulse-mainloop-glib.so.0") pulse-glib))))))
          ;; Fix running of blueman programs.
          (add-after 'glib-or-gtk-wrap 'wrap-blueman-progs
            (lambda* (#:key outputs #:allow-other-keys)
@@ -718,15 +723,14 @@ systems with no further dependencies.")
                (for-each
                 (lambda (program)
                   (wrap-program program
-                    `("PYTHONPATH" = (,(getenv "PYTHONPATH") ,lib))
+                    `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH") ,lib))
                     `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH")))))
                 (append
                  (map (lambda (prog) (string-append bin prog))
                       '("adapters" "applet" "manager"
                         "sendto" "services" "tray"))
                  (map (lambda (prog) (string-append libexec prog))
-                      '("mechanism" "rfcomm-watcher"))))
-               #t))))))
+                      '("mechanism" "rfcomm-watcher"))))))))))
     (native-inputs
      `(("cython" ,python-cython)
        ("glib:bin" ,glib "bin")
@@ -737,7 +741,7 @@ systems with no further dependencies.")
     (inputs
      `(("bluez" ,bluez)
        ("dbus" ,dbus)
-       ("gdkpixbuf" ,gdk-pixbuf+svg)
+       ("librsvg" ,librsvg)
        ("glib" ,glib)
        ("gtk+" ,gtk+)
        ("iproute2" ,iproute)
@@ -834,14 +838,14 @@ residing in IPv4-only networks, even when they are behind a NAT device.")
 (define-public ndisc6
   (package
     (name "ndisc6")
-    (version "1.0.4")
+    (version "1.0.5")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://www.remlab.net/files/ndisc6/ndisc6-"
                                   version ".tar.bz2"))
               (sha256
                (base32
-                "07swyar1hl83zxmd7fqwb2q0c0slvrswkcfp3nz5lknrk15dmcdb"))))
+                "0lgkbnnll8nrr7h63ywd42sg8fiv6jhhymd7rnml8a3yqjgjz4rn"))))
     (build-system gnu-build-system)
     (home-page "https://www.remlab.net/ndisc6/")
     (synopsis "IPv6 diagnostic tools")
@@ -907,6 +911,42 @@ addresses used in the wired Ethernet networks.  This daemon can also be
 useful for making transparent firewalls.")
     (license license:gpl2)))
 
+(define-public pproxy
+  (package
+    (name "pproxy")
+    (version "2.7.8")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "pproxy" version))
+              (sha256
+               (base32
+                "1j4nv72i77i2j5nl9ymzpk4m98qih3naihfrqjghrc9b7g0krdzs"))))
+    (build-system python-build-system)
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (replace 'check
+                 (lambda* (#:key tests? #:allow-other-keys)
+                   (when tests?
+                     (with-directory-excursion "tests"
+                       (for-each (lambda (file)
+                                   (invoke "python" file))
+                                 ;; XXX: The api_ tests require network access
+                                 ;; so we only run the cipher tests for now.
+                                 (find-files "." "^cipher_.*\\.py$")))))))))
+    (inputs
+     (list python-asyncssh
+           python-daemon
+           python-pycryptodome
+           python-uvloop))
+    (home-page "https://github.com/qwj/python-proxy")
+    (synopsis "Multi-protocol network proxy")
+    (description
+     "@command{pproxy} is an asynchronuous proxy server implemented with
+Python 3 @code{asyncio}.  Among the supported protocols are HTTP, SOCKS
+and SSH, and it can use both TCP and UDP as transport mechanisms.")
+    (license license:expat)))
+
 (define-public socat
   (package
     (name "socat")
@@ -921,7 +961,7 @@ useful for making transparent firewalls.")
                 "1sbmqqvni3ss9wyay6ik5v81kxffkra80mh4ypgj74g82iba5b1z"))))
     (build-system gnu-build-system)
     (arguments '(#:tests? #f))          ; no test suite
-    (inputs `(("openssl" ,openssl)))
+    (inputs (list openssl))
     (home-page "http://www.dest-unreach.org/socat/")
     (synopsis
      "Open bidirectional communication channels from the command line")
@@ -940,7 +980,7 @@ or server shell scripts with network connections.")
 (define-public mbuffer
   (package
     (name "mbuffer")
-    (version "20210328")
+    (version "20211018")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -948,9 +988,11 @@ or server shell scripts with network connections.")
                     version ".tgz"))
               (sha256
                (base32
-                "0pfw9xw4ph18yss07fl6w8fbqiwy1w9r1knzw5gsb4c993cbidai"))))
+                "1qxnbpyly00kml3sjan9iqg6pqacsi3yqq66x25w455cwkjc2h72"))))
     (build-system gnu-build-system)
-    (inputs `(("openssl" ,openssl)))
+    (native-inputs
+     (list which))
+    (inputs (list openssl))
     (home-page "http://www.maier-komor.de/mbuffer.html")
     (synopsis
      "Swiss army knife for data stream buffering (network aware)")
@@ -980,7 +1022,17 @@ or server shell scripts with network connections.")
                     version ".tar.gz"))
               (sha256
                (base32
-                "0p9ilj4v96q32klavx0phw9va21fjp8vpk11nbh6v2ppxnnxfhwm"))))
+                "0p9ilj4v96q32klavx0phw9va21fjp8vpk11nbh6v2ppxnnxfhwm"))
+              (modules '((guix build utils)))
+              (snippet
+               ;; 'sys_errlist' & co. are gone in glibc 2.33; work around it.
+               '(substitute* "percent_m.c"
+                  (("sys_errlist\\[errno\\]")
+                   "strerror (errno)")
+                  (("errno < sys_nerr")
+                   "(1)")
+                  (("errno >= sys_nerr")
+                   "(0)")))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -1089,7 +1141,7 @@ more.")
     (arguments
      '(#:configure-flags '("--enable-drafts")))
     (inputs
-     `(("zeromq" ,zeromq)))
+     (list zeromq))
     (home-page "https://zeromq.org")
     (synopsis "High-level C bindings for ØMQ")
     (description
@@ -1118,9 +1170,9 @@ between different versions of ØMQ.")
        #:tests? #f
        #:configure-flags '("-DCPPZMQ_BUILD_TESTS=OFF")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("zeromq" ,zeromq)))
+     (list zeromq))
     (home-page "https://zeromq.org")
     (synopsis "C++ bindings for the ØMQ messaging library")
     (description
@@ -1192,7 +1244,7 @@ written in the C programming language.")
     (native-inputs
      `(("python" ,python-wrapper)))
     (propagated-inputs
-     `(("zlib" ,zlib))) ; in the Libs.private field of rdkafka.pc
+     (list zlib)) ; in the Libs.private field of rdkafka.pc
     (home-page "https://github.com/edenhill/librdkafka")
     (synopsis "Apache Kafka C/C++ client library")
     (description
@@ -1223,19 +1275,19 @@ receiving NDP messages.")
 (define-public ethtool
   (package
     (name "ethtool")
-    (version "5.12")
+    (version "5.15")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://kernel.org/software/network/"
                                   "ethtool/ethtool-" version ".tar.xz"))
               (sha256
                (base32
-                "01vgyczgldrfss98cqrgjz8krj6kwb29xjf8p08q0g85fnfgmpgm"))))
+                "0v8i592vwjypf111w0lfvaxdwhzybp6w600g28m9rm490c8xcvv8"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libmnl" ,libmnl)))
+     (list libmnl))
     (home-page "https://www.kernel.org/pub/software/network/ethtool/")
     (synopsis "Display or change Ethernet device settings")
     (description
@@ -1277,7 +1329,7 @@ Ethernet devices.")
                       (copy-file "ifstatus"
                                  (string-append bin "/ifstatus")))
                     #t)))))
-    (inputs `(("ncurses" ,ncurses)))
+    (inputs (list ncurses))
     (home-page "http://ifstatus.sourceforge.net/graphic/index.html")
     (synopsis "Text based network interface status monitor")
     (description
@@ -1327,9 +1379,7 @@ intended as a substitute for the PPPStatus and EthStatus projects.")
        ("libxml2" ,libxml2)          ;for XML_CATALOG_FILES
        ("xsltproc" ,libxslt)))
     (inputs
-     `(("libcap" ,libcap)
-       ("libidn2" ,libidn2)
-       ("openssl" ,openssl)))
+     (list libcap libidn2 openssl))
     (synopsis "Collection of network utilities")
     (description
      "This package contains a variety of tools for dealing with network
@@ -1369,7 +1419,7 @@ discover MTU along the way.
                (base32
                 "1rb9skch2kgqzigf19x8bzk211jdfjfdkrcvaqyj89jy2pkm3h61"))))
     (build-system gnu-build-system)
-    (inputs `(("ncurses" ,ncurses)))
+    (inputs (list ncurses))
     (home-page "http://www.roland-riegel.de/nload/")
     (synopsis "Realtime console network usage monitor")
     (description
@@ -1413,10 +1463,8 @@ test_parse_format_ipv(4(|_listen_all|_mapped_ipv6)|6)\\);")
        #:make-flags (list ,(string-append "CC=" (cc-for-target))
                           (string-append "prefix=" (assoc-ref %outputs "out")))
        #:test-target "test"))
-    (inputs `(("net-tools" ,net-tools)
-              ("zlib" ,zlib)))
-    (native-inputs `(("check" ,check-0.14)
-                     ("pkg-config" ,pkg-config)))
+    (inputs (list net-tools zlib))
+    (native-inputs (list check-0.14 pkg-config))
     (home-page "https://code.kryo.se/iodine/")
     (synopsis "Tunnel IPv4 data through a DNS server")
     (description "Iodine tunnels IPv4 data through a DNS server.  This
@@ -1429,7 +1477,7 @@ and up to 1 Mbit/s downstream.")
 (define-public whois
   (package
     (name "whois")
-    (version "5.5.10")
+    (version "5.5.11")
     (source
      (origin
        (method git-fetch)
@@ -1438,7 +1486,7 @@ and up to 1 Mbit/s downstream.")
               (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "179hgmh9yqk8jq26ybik4cr3lgryd5p6kdwccc3r7mfssk3yp8lz"))))
+        (base32 "0wys0aixzq6mzvg7p6jb0d5rkkg23pjcgcsx86p7hjidxdvnbwzr"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ; no test suite
@@ -1453,7 +1501,7 @@ and up to 1 Mbit/s downstream.")
              (setenv "HAVE_ICONV" "1")
              #t)))))
     (inputs
-     `(("libidn2" ,libidn2)))
+     (list libidn2))
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("perl" ,perl)
@@ -1474,14 +1522,14 @@ of the same name.")
 (define-public wireshark
   (package
     (name "wireshark")
-    (version "3.4.8")
+    (version "3.6.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://www.wireshark.org/download/src/wireshark-"
                            version ".tar.xz"))
        (sha256
-        (base32 "09fpvfj4m7glisj6p4zb8wylkrjkqqw69xnwnz4ah410zs6zm9sq"))))
+        (base32 "0f2sjbbwmmz9zr8vphxy0panfji5vv8vazm688mqxy3bzflfsd04"))))
     (build-system cmake-build-system)
     (arguments
      `(#:phases
@@ -1508,37 +1556,37 @@ of the same name.")
        ;; For now, we disable this phase.
        #:validate-runpath? #f))
     (inputs
-     `(("c-ares" ,c-ares)
-       ("glib" ,glib)
-       ("gnutls" ,gnutls)
-       ("google-brotli" ,google-brotli)
-       ("libcap" ,libcap)
-       ("libgcrypt" ,libgcrypt)
-       ("libnl" ,libnl)
-       ("libpcap" ,libpcap)
-       ("libssh" ,libssh)
-       ("libxml2" ,libxml2)
-       ("lz4" ,lz4)
-       ("lua" ,lua-5.2)                 ;Lua 5.3 unsupported
-       ("krb5" ,mit-krb5)
-       ("nghttp2:lib" ,nghttp2 "lib")
-       ("minizip" ,minizip)
-       ("qtbase" ,qtbase-5)
-       ("qtmultimedia" ,qtmultimedia)
-       ("qtsvg" ,qtsvg)
-       ("sbc" ,sbc)
-       ("snappy" ,snappy)
-       ("zlib" ,zlib)
-       ("zstd:lib" ,zstd "lib")))
+     (list c-ares
+           glib
+           gnutls
+           brotli
+           libcap
+           libgcrypt
+           libnl
+           libpcap
+           libssh
+           libxml2
+           lz4
+           lua-5.2                      ;Lua 5.3 unsupported
+           mit-krb5
+           `(,nghttp2 "lib")
+           minizip
+           qtbase-5
+           qtmultimedia
+           qtsvg
+           sbc
+           snappy
+           zlib
+           `(,zstd "lib")))
     (native-inputs
-     `(("bison" ,bison)
-       ("doxygen" ,doxygen)
-       ("flex" ,flex)
-       ("gettext" ,gettext-minimal)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python-wrapper)
-       ("qttools" ,qttools)))
+     (list bison
+           doxygen
+           flex
+           gettext-minimal
+           perl
+           pkg-config
+           python-wrapper
+           qttools))
     (synopsis "Network traffic analyzer")
     (description "Wireshark is a network protocol analyzer, or @dfn{packet
 sniffer}, that lets you capture and interactively browse the contents of
@@ -1603,18 +1651,12 @@ round-robin fashion.")
                    (invoke "rst2man.py" "gandicli.man.rst")))
                #t))))))
     (native-inputs
-     `(("python-docutils" ,python-docutils)   ; for rst2man.py
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-tox" ,python-tox)))
+     (list python-docutils ; for rst2man.py
+           python-pytest python-pytest-cov python-tox))
     (propagated-inputs
-     `(("openssh" ,openssh)))           ; used by gandi/cli/modules/iass.py
+     (list openssh))           ; used by gandi/cli/modules/iass.py
     (inputs
-     `(("openssl" ,openssl)
-       ("python-click" ,python-click)
-       ("python-ipy" ,python-ipy)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-requests" ,python-requests)))
+     (list openssl python-click python-ipy python-pyyaml python-requests))
     (home-page "https://cli.gandi.net")
     (synopsis "Command-line interface to the Gandi.net Web API")
     (description
@@ -1691,9 +1733,7 @@ transmission protocol (SCTP) in a Go application.")
     (native-inputs
      `(("gettext" ,gettext-minimal)))
     (inputs
-     `(("fftw" ,fftw)
-       ("ncurses" ,ncurses)
-       ("openssl" ,openssl)))
+     (list fftw ncurses openssl))
     (arguments
      `(#:make-flags (list ,(string-append "CC=" (cc-for-target))
                           (string-append "DESTDIR=" (assoc-ref %outputs "out"))
@@ -1723,7 +1763,7 @@ application stack itself.")
        (sha256
         (base32 "0cw8299a080m42slsimz31xs0gjnh833gpbj2dsr4hkcinrn4iyd"))))
     (build-system python-build-system)
-    (inputs `(("curl" ,curl)))
+    (inputs (list curl))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -1750,14 +1790,14 @@ TCP connection, TLS handshake and so on) in the terminal.")
 (define-public squid
   (package
     (name "squid")
-    (version "4.15")
+    (version "4.17")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "http://www.squid-cache.org/Versions/v4/squid-"
                            version ".tar.xz"))
        (sha256
-        (base32 "09aaz0hi7q4s5jalgl5i5fakmgzv5akf03gnajlah498mgjs94xn"))))
+        (base32 "060lwghn6q982bay11ia38c86kd8w6mjgy68n58v31kwik08m4nb"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags
@@ -1770,21 +1810,18 @@ TCP connection, TLS handshake and so on) in the terminal.")
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "test-suite/testheaders.sh"
                (("/bin/true")
-                (string-append (assoc-ref inputs "coreutils")
-                               "/bin/true")))
-             #t)))))
+                (search-input-file inputs "/bin/true"))))))))
     (inputs
-     `(("perl" ,perl)
-       ("openldap" ,openldap)
-       ("linux-pam" ,linux-pam)
-       ("libcap" ,libcap)
-       ("cyrus-sasl" ,cyrus-sasl)
-       ("expat" ,expat)
-       ("libxml2" ,libxml2)
-       ("openssl" ,openssl)))
+     (list perl
+           openldap
+           linux-pam
+           libcap
+           cyrus-sasl
+           expat
+           libxml2
+           openssl))
     (native-inputs
-     `(("cppunit" ,cppunit)
-       ("pkg-config" ,pkg-config)))
+     (list cppunit pkg-config))
     (synopsis "Web caching proxy")
     (description "Squid is a caching proxy for the Web supporting HTTP, HTTPS,
 FTP, and more.  It reduces bandwidth and improves response times by caching and
@@ -1816,10 +1853,9 @@ reusing frequently-requested web pages.")
                 "true"))
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (synopsis "Console based live network and disk I/O bandwidth monitor")
     (description "Bandwidth Monitor NG is a small and simple console based
 live network and disk I/O bandwidth monitor.")
@@ -1839,22 +1875,19 @@ live network and disk I/O bandwidth monitor.")
         (base32 "0ix2k64qg7x3w0bzdsbk1m50kcpq1ws59g3zkwiafvpwdr4gs2sg"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)
-       ("which" ,which)))
+     (list autoconf automake libtool pkg-config which))
     (inputs
-     `(("libgcrypt" ,libgcrypt)
-       ("libnl" ,libnl)
-       ("libpcap" ,libpcap)
-       ("ethtool" ,ethtool)
-       ("pcre" ,pcre)
-       ("sqlite" ,sqlite)
-       ("zlib" ,zlib)))
+     (list libgcrypt
+           libnl
+           libpcap
+           ethtool
+           pcre
+           sqlite
+           zlib))
     (arguments
      `(#:configure-flags
-       (list "--with-experimental=yes"  ; build wesside-ng, etc.
+       (list "CFLAGS=-fcommon"
+             "--with-experimental=yes"  ; build wesside-ng, etc.
              "--with-gcrypt")           ; openssl's the default
        #:phases (modify-phases %standard-phases
                   (add-before 'bootstrap 'patch-evalrev
@@ -1867,8 +1900,8 @@ live network and disk I/O bandwidth monitor.")
                       #t))
                   (add-after 'build 'absolutize-tools
                     (lambda* (#:key inputs #:allow-other-keys)
-                      (let ((ethtool (string-append (assoc-ref inputs "ethtool")
-                                                    "/sbin/ethtool")))
+                      (let ((ethtool (search-input-file inputs
+                                                        "/sbin/ethtool")))
                         (substitute* "scripts/airmon-ng"
                           (("ethtool ")
                            (string-append ethtool " ")))
@@ -1946,10 +1979,9 @@ non-existing entropy of some access points.")
                #t))))
        #:tests? #f))                    ; there are no tests
     (inputs
-     `(("libpcap" ,libpcap)))
+     (list libpcap))
     (propagated-inputs
-     `(("aircrack-ng" ,aircrack-ng)
-       ("pixiewps" ,pixiewps)))
+     (list aircrack-ng pixiewps))
     (home-page "https://github.com/t6x/reaver-wps-fork-t6x/")
     (synopsis "Attack tool for Wi-Fi Protected Setup")
     (description "Reaver performs a brute force attack against an access
@@ -1971,9 +2003,9 @@ reconfigured.")
         (base32 "0x4bvirmf0kphks19jwgva00zz73zx344218dfaiv8gigrw3yg4m"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-tcp" ,perl-test-tcp)))
+     (list perl-test-tcp))
     (propagated-inputs
-     `(("perl-sys-syscall" ,perl-sys-syscall)))
+     (list perl-sys-syscall))
     (home-page "https://metacpan.org/release/Danga-Socket")
     (synopsis "Event loop and event-driven async socket base class")
     (description
@@ -1997,9 +2029,9 @@ loop.")
         (base32 "074adrlvkiahj1fdc9nvb95dpfyjzm2jzhi90m8xaw4bw5ipcbzy"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-requires" ,perl-test-requires)))
+     (list perl-test-requires))
     (propagated-inputs
-     `(("perl-netaddr-ip" ,perl-netaddr-ip)))
+     (list perl-netaddr-ip))
     (home-page "https://metacpan.org/release/Data-Validate-IP")
     (synopsis "IPv4 and IPv6 validation methods")
     (description
@@ -2027,7 +2059,7 @@ private (reserved).")
        (base32 "05f6rzvvmm6xd0p100k5y9kczdzqgala09ra8bccc18n6y74l0h0"))))
   (build-system perl-build-system)
   (inputs
-    `(("perl-digest-hmac" ,perl-digest-hmac)))
+    (list perl-digest-hmac))
   (home-page "https://www.net-dns.org/")
   (synopsis
     "Perl Interface to the Domain Name System")
@@ -2084,8 +2116,8 @@ definitions and structure manipulators for Perl.")
        (search-patches "perl-net-dns-resolver-programmable-fix.patch"))))
   (build-system perl-build-system)
   (native-inputs
-    `(("perl-module-build" ,perl-module-build)))
-  (inputs `(("perl-net-dns" ,perl-net-dns)))
+    (list perl-module-build))
+  (inputs (list perl-net-dns))
   (home-page
     "https://metacpan.org/release/Net-DNS-Resolver-Programmable")
   (synopsis
@@ -2108,7 +2140,7 @@ offline emulation of DNS.")
                 "0m3rxpkv1b9121srvbqkrgzg4m8mnydiydqv34in1i1ixwrl6jn9"))))
     (build-system perl-build-system)
     (inputs
-     `(("perl-net-dns" ,perl-net-dns)))
+     (list perl-net-dns))
     (home-page "https://metacpan.org/release/Net-DNS-Resolver-Mock")
     (synopsis "Mock DNS Resolver object for testing")
     (description
@@ -2174,8 +2206,7 @@ It is intended primarily for use in testing.")
              (("-lnsl") ""))
            #t)))))
   (inputs
-    `(("perl-net-cidr-lite" ,perl-net-cidr-lite)
-      ("perl-socket6" ,perl-socket6)))
+    (list perl-net-cidr-lite perl-socket6))
   (home-page
     "https://metacpan.org/release/Net-Patricia")
   (synopsis
@@ -2221,10 +2252,8 @@ It is intended primarily for use in testing.")
           "1fqypz6qa5rw2d5y2zq7f49frwra0aln13nhq5gi514j2zx21q45"))))
   (build-system perl-build-system)
   (native-inputs
-    `(("perl-module-build" ,perl-module-build)
-      ("perl-test-pod" ,perl-test-pod)
-      ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
-  (propagated-inputs `(("perl-socket6" ,perl-socket6)))
+    (list perl-module-build perl-test-pod perl-test-pod-coverage))
+  (propagated-inputs (list perl-socket6))
   (arguments `(;; Need network socket API
                #:tests? #f))
   (home-page
@@ -2249,16 +2278,16 @@ sockets in Perl.")
                 "01cbgz6lc3v59sldqk96l1281kp2qxnsa2qwlf2ikvjlyr1gi2dw"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("dbus" ,dbus)
-       ("zlib" ,zlib)))
+     (list dbus zlib))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (replace 'check
-                  (lambda _
-                    (invoke "ctest" "-E" "url-test"))))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "ctest" "-E" "url-test")))))))
     (synopsis "Library providing automatic proxy configuration management")
     (description "Libproxy handles the details of HTTP/HTTPS proxy
 configuration for applications across all scenarios.  Applications using
@@ -2269,14 +2298,14 @@ libproxy only have to specify which proxy to use.")
 (define-public proxychains-ng
   (package
     (name "proxychains-ng")
-    (version "4.14")
+    (version "4.15")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "http://ftp.barfooze.de/pub/sabotage/tarballs/"
                            "proxychains-ng-" version ".tar.xz"))
        (sha256
-        (base32 "1bmhfbl1bzc87vl0xwr1wh5xvslfyc41nl2hqzhbj258p0sy004x"))))
+        (base32 "10ch6rmbw2lwrq1bc9w4glxkws7hvsy5ihasvzf3yg053xzsn1rj"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ; there are no tests
@@ -2289,12 +2318,10 @@ libproxy only have to specify which proxy to use.")
              (substitute* "configure"
                (("\\*\\) break ;;" line)
                 (string-append "[A-Z]*) shift ;;\n"
-                               line)))
-             #t))
+                               line)))))
          (add-before 'configure 'set-up-environment
            (lambda _
-             (setenv "CC" "gcc")
-             #t)))))
+             (setenv "CC" ,(cc-for-target)))))))
     (synopsis "Redirect any TCP connection through a proxy or proxy chain")
     (description "Proxychains-ng is a preloader which hooks calls to sockets
 in dynamically linked programs and redirects them through one or more SOCKS or
@@ -2315,7 +2342,7 @@ HTTP proxies.")
         (base32 "1p6f9mby86af6cs7pv6h48032ip9g32c05cb7d9mimam8lchz3x3"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "Network communication layer on top of UDP")
     (description
      "ENet's purpose is to provide a relatively thin, simple and robust network
@@ -2342,18 +2369,15 @@ library remains flexible, portable, and easily embeddable.")
         (base32 "19h32dn0076p3s7dn35qi5yp2xvnxw9sqphppmn72vyb8caxvw1z"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(;; Test dependencies.
-       ("lcov" ,lcov)
-       ("perl" ,perl)
-       ("perl-conf-libconfig" ,perl-conf-libconfig)
-       ("perl-io-socket-inet6" ,perl-io-socket-inet6)
-       ("perl-socket6" ,perl-socket6)
-       ("psmisc" ,psmisc)))             ; for ‘killall’
+     (list ;; Test dependencies.
+           lcov
+           perl
+           perl-conf-libconfig
+           perl-io-socket-inet6
+           perl-socket6
+           psmisc))             ; for ‘killall’
     (inputs
-     `(("libcap" ,libcap)
-       ("libconfig" ,libconfig)
-       ("pcre" ,pcre)
-       ("tcp-wrappers" ,tcp-wrappers)))
+     (list libcap libconfig pcre tcp-wrappers))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -2442,8 +2466,7 @@ the bandwidth, loss, and other parameters.")
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (inputs
-     `(("libpcap" ,libpcap)
-       ("ncurses" ,ncurses)))
+     (list libpcap ncurses))
     (arguments
      `(#:make-flags `(,,(string-append "CC=" (cc-for-target))
                       ,(string-append "PREFIX=" %output)
@@ -2484,11 +2507,8 @@ gone wild and are suddenly taking up your bandwidth.")
                        (assoc-ref %build-inputs "ncurses") "/lib")
         (string-append "--with-tlslib=GnuTLS"))))
     (build-system gnu-build-system)
-    (inputs `(("gnutls" ,gnutls)
-              ("libxml2" ,libxml2)
-              ("ncurses" ,ncurses)
-              ("zlib" ,zlib)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list gnutls libxml2 ncurses zlib))
+    (native-inputs (list pkg-config))
     (home-page "https://github.com/nzbget/nzbget")
     (synopsis "Usenet binary file downloader")
     (description
@@ -2503,7 +2523,7 @@ procedure calls (RPCs).")
 (define-public openvswitch
   (package
     (name "openvswitch")
-    (version "2.13.3")
+    (version "2.16.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -2511,21 +2531,46 @@ procedure calls (RPCs).")
                     version ".tar.gz"))
               (sha256
                (base32
-                "1wc5zspy9aln7di7m9a1qy4lv3h05gmhgd1nffhb9nxdcxqgnpgp"))))
+                "1x0k0pw6jykrfgb8rq56bp2ghxd433d55pmr8mxy9gbzw1nc1vbi"))))
     (build-system gnu-build-system)
     (arguments
-     '(;; FIXME: many tests fail with:
-       ;;    […]
-       ;;    test -e $OVS_RUNDIR/ovs-vswitchd.pid
-       ;;    ovs-appctl -t ovs-vswitchd exit
-       ;;    hard failure
-       #:tests? #f
-       #:configure-flags
+     '(#:configure-flags
        '("--enable-shared"
+         "--disable-static"        ; XXX still installs libopenvswitchavx512.a
          "--localstatedir=/var"
          "--with-dbdir=/var/lib/openvswitch")
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'use-absolute-/bin/sh
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let* ((bash (assoc-ref inputs "bash-minimal")))
+               (substitute* "ovsdb/ovsdb-server.c"
+                 (("/bin/sh") (string-append bash "/bin/sh"))))))
+         (add-before 'check 'adjust-tests
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let* ((bash (assoc-ref inputs "bash-minimal"))
+                    (/bin/sh (string-append bash "/bin/sh")))
+               (with-fluids ((%default-port-encoding "ISO-8859-1"))
+                 (substitute* (find-files "tests" ".*(run|testsuite)$")
+                   (("#! /bin/sh")
+                    (string-append "#! " /bin/sh))
+
+                   ;; The tests use 'kill -0' to check whether a test has
+                   ;; completed, but it does not work in the build container
+                   ;; because zombies are not reaped automatically (PID 1 is
+                   ;; the builder script).  Change to something that handles
+                   ;; undead processes.
+                   (("kill -0")
+                    "kill-0")))
+               (mkdir "/tmp/bin")
+               (call-with-output-file "/tmp/bin/kill-0"
+                 (lambda (port)
+                   (format port "#!~a
+ps --no-header -p $1 -o state= | grep -qv '^Z$'"
+                           /bin/sh)))
+               (chmod "/tmp/bin/kill-0" #o755)
+               (setenv "PATH"
+                       (string-append "/tmp/bin:" (getenv "PATH"))))))
          (replace 'install
            (lambda _
              (invoke "make"
@@ -2540,10 +2585,11 @@ procedure calls (RPCs).")
        ("pkg-config" ,pkg-config)
        ("python" ,python-wrapper)
        ;; for testing
+       ("bash" ,bash)                   ;for 'compgen'
+       ("procps" ,procps)
        ("util-linux" ,util-linux)))
     (inputs
-     `(("libcap-ng" ,libcap-ng)
-       ("openssl" ,openssl)))
+     (list bash-minimal libcap-ng openssl))
     (synopsis "Virtual network switch")
     (home-page "https://www.openvswitch.org/")
     (description
@@ -2612,7 +2658,10 @@ speedtest.net.")
                (base32
                 "12vidchglhyc20znq5wdsbhi9mqg90jnl7qr9qs8hbvaz4fkdvmg"))))
     (build-system gnu-build-system)
-    (arguments `(#:tests? #f)) ; no test target
+    (arguments
+     (list #:tests? #f                  ; no test target
+           #:configure-flags
+           #~(list "CFLAGS=-fcommon")))   ; XXX fix 5.2 build with GCC 10
     (synopsis "HPA's tftp client")
     (description
      "This is a tftp client derived from OpenBSD tftp with some extra options
@@ -2662,9 +2711,9 @@ enabled due to license conflicts between the BSD advertising clause and the GPL.
                (install-file "DESIGN.md" misc)
                #t))))))
     (native-inputs
-     `(("procps" ,procps))) ; `ps` is used by the test suite.
+     (list procps)) ; `ps` is used by the test suite.
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (home-page "https://www.tarsnap.com/spiped.html")
     (synopsis "Create secure pipes between sockets")
     (description "Spiped (pronounced \"ess-pipe-dee\") is a utility for creating
@@ -2690,11 +2739,8 @@ does not use SSH and requires a pre-shared symmetric key.")
               (patches
                (search-patches "quagga-reproducible-build.patch"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("perl" ,perl)
-                     ("dejagnu" ,dejagnu)))
-    (inputs `(("readline" ,readline)
-              ("c-ares" ,c-ares)))
+    (native-inputs (list pkg-config perl dejagnu))
+    (inputs (list readline c-ares))
     (synopsis "Routing Software Suite")
     (description "Quagga is a routing software suite, providing implementations
 of OSPFv2, OSPFv3, RIP v1 and v2, RIPng and BGP-4 for Unix platforms.
@@ -2743,9 +2789,7 @@ updates to the zebra daemon.")
                  #t))))))
       ;; TODO Add libnetfilter-queue once packaged.
       (inputs
-       `(("libpcap" ,libpcap)
-         ("openssl" ,openssl)
-         ("perl" ,perl)))
+       (list libpcap openssl perl))
       (home-page "https://github.com/vanhauser-thc/thc-ipv6")
       (synopsis "IPv6 security research toolkit")
       (description "The THC IPv6 Toolkit provides command-line tools and a library
@@ -2769,11 +2813,9 @@ newer and only works on Ethernet network interfaces.")
          "0ylzriv4pwh76344abzl1w219x188gshbycbna35gsyfp09c7z82"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libconfuse" ,libconfuse)
-       ("libnl" ,libnl)
-       ("ncurses" ,ncurses)))
+     (list libconfuse libnl ncurses))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "Bandwidth monitor")
     (description "bmon is a monitoring and debugging tool to capture
 networking-related statistics and prepare them visually in a human-friendly
@@ -2808,9 +2850,8 @@ interface and a programmable text output for scripting.")
              (apply invoke "make" "-C" "doc" "doc"
                     make-flags))))))
     (native-inputs
-     `(;; To build the documentation, Doxygen and Perl is required.
-       ("doxygen" ,doxygen)
-       ("perl" ,perl)))
+     (list ;; To build the documentation, Doxygen and Perl is required.
+           doxygen perl))
     (home-page "https://github.com/libnet/libnet")
     (synopsis "Framework for low-level network packet construction")
     (description
@@ -2824,18 +2865,17 @@ can be whipped up with little effort.")
 (define-public mtr
   (package
     (name "mtr")
-    (version "0.94")
+    (version "0.95")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "ftp://ftp.bitwizard.nl/mtr/"
                            "mtr-" version ".tar.gz"))
        (sha256
-        (base32 "1glxvlqskcmjkxlqk9i12hcfaxb389cx2n8ji7776gmix3aq4z1z"))))
+        (base32 "0haanralbvd12pvkyihgkmx9ld74dnzm1s7mzparfandl416ibff"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libcap" ,libcap)
-       ("ncurses" ,ncurses)))
+     (list libcap ncurses))
     (arguments
      `(#:tests? #f))                    ; tests require network access
     (home-page "https://www.bitwizard.nl/mtr/")
@@ -2888,15 +2928,9 @@ displays the results in real time.")
          "--enable-webserver"
          "--with-denoise-level=0")))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("gettext-minimal" ,gettext-minimal)
-       ("perl" ,perl)))
+     (list autoconf automake gettext-minimal perl))
     (inputs
-     `(("zlib" ,zlib)
-       ("crypto++" ,crypto++)
-       ("libpng" ,libpng)
-       ("wxwidgets-gtk2" ,wxwidgets-gtk2)))
+     (list zlib crypto++ libpng wxwidgets-gtk2))
     (home-page "https://amule.org/")
     (synopsis "Peer-to-peer client for the eD2K and Kademlia networks")
     (description
@@ -2920,9 +2954,7 @@ remotely.")
                (base32
                 "13596507ma1474cjqzxym5jlvcshvw7sjhw80rdz788gyz6kz90b"))))
     (build-system gnu-build-system)
-    (inputs `(("zeromq" ,zeromq)
-              ("czmq" ,czmq)
-              ("libsodium" ,libsodium)))
+    (inputs (list zeromq czmq libsodium))
     (synopsis "Framework for proximity-based peer-to-peer applications")
     (description "Zyre provides reliable group messaging over local area
 networks using zeromq.  It has these key characteristics:
@@ -2955,9 +2987,7 @@ networks using zeromq.  It has these key characteristics:
                 "17z2y2r9xkixhr9bxr50m77fh710afl30s7jdhbxrvf56vmal2jr"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (home-page "https://git.pengutronix.de/cgit/tools/libsocketcan")
     (synopsis "SocketCAN user-space library")
     (description "This library allows controlling basic functions in SocketCAN
@@ -3004,22 +3034,20 @@ eight bytes) tools
     ;; Either BSD-3 or GPL-2 can be used.
     (license (list license:bsd-3 license:gpl2))))
 
-;;; This is an old version required by rested.
-(define-public asio-1.12
+(define-public asio
   (package
     (name "asio")
-    (version "1.12.2")
+    (version "1.20.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://sourceforge/asio/asio/"
                            version " (Stable)/asio-" version ".tar.bz2"))
        (sha256
-        (base32 "1akray4l3hgahmb92sbvsqg128c7g7s92jrkf1sp1fjnfjrxq9sf"))))
+        (base32 "0335kyxdnwnp96sh9p3jq1s87qnfmp5l7hzlcdxbbwfzrb9p8hr0"))))
     (build-system gnu-build-system)
     (inputs
-     `(("boost" ,boost)
-       ("openssl" ,openssl)))
+     (list boost openssl))
     (arguments
      `(#:configure-flags
        (list
@@ -3032,53 +3060,37 @@ 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
+(define-public shadowsocks
   (package
-    (inherit asio-1.12)
-    (version "1.18.2")
+    (name "shadowsocks")
+    (version "2.9.1")
     (source
      (origin
-       (method url-fetch)
-       (uri (string-append "mirror://sourceforge/asio/asio/"
-                           version " (Stable)/asio-" version ".tar.bz2"))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/shadowsocks/shadowsocks")
+             (commit version)))
        (sha256
-        (base32 "1wpr4ymv63a192fmymwyxd7v0bv575v022gz53y0mcflhr2mvh1s"))))))
-
-(define-public shadowsocks
-  ;; There are some security fixes after the last release.
-  (let* ((commit "e332ec93e9c90f1cbee676b022bf2c5d5b7b1239")
-         (revision "0")
-         (version (git-version "2.8.2" revision commit)))
-    (package
-      (name "shadowsocks")
-      (version version)
-      (home-page "https://github.com/shadowsocks/shadowsocks")
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url home-page)
-                      (commit commit)))
-                (sha256
-                 (base32
-                  "1idd9b4f2pnhcpk1bh030hqg5zq25gkwxd53xi3c0cj242w7sp2j"))
-                (file-name (git-file-name name version))))
-      (inputs
-       `(("openssl" ,openssl)))
-      (arguments
-       '(#:phases
-         (modify-phases %standard-phases
-           (add-after 'unpack 'patch-crypto-paths
-             (lambda* (#:key inputs #:allow-other-keys)
-               (substitute* "shadowsocks/shell.py"
-                 (("config\\.get\\('libopenssl', None\\)")
-                  (format #f "config.get('libopenssl', ~s)"
-                          (string-append
-                           (assoc-ref inputs "openssl")
-                           "/lib/libssl.so")))))))))
-      (build-system python-build-system)
-      (synopsis "Fast tunnel proxy that helps you bypass firewalls")
-      (description
-       "This package is a fast tunnel proxy that helps you bypass firewalls.
+        (base32 "02mp5905nz02d7amb4zc77rcrkxmvy8mf5rci7mvy58g24lvbw25"))
+       (file-name (git-file-name name version))))
+    (inputs
+     (list openssl))
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-crypto-paths
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "shadowsocks/shell.py"
+               (("config\\.get\\('libopenssl', None\\)")
+                (format #f "config.get('libopenssl', ~s)"
+                        (string-append
+                         (assoc-ref inputs "openssl")
+                         "/lib/libssl.so")))))))))
+    (build-system python-build-system)
+    (home-page "https://github.com/shadowsocks/shadowsocks")
+    (synopsis "Fast tunnel proxy that helps you bypass firewalls")
+    (description
+     "This package is a fast tunnel proxy that helps you bypass firewalls.
 
 Features:
 @itemize
@@ -3088,7 +3100,7 @@ Features:
 @item Workers and graceful restart
 @item Destination IP blacklist
 @end itemize")
-      (license license:asl2.0))))
+    (license license:asl2.0)))
 
 (define-public net-snmp
   (package
@@ -3148,17 +3160,12 @@ Features:
                                " -NET")))
              #t)))))
     (inputs
-     `(("libnl" ,libnl)
-       ("ncurses" ,ncurses)             ; for the ‘apps’
-       ("openssl" ,openssl)
-       ("perl" ,perl)))
+     (list libnl ncurses ; for the ‘apps’
+           openssl perl))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-
-       ;; For tests only.
-       ("net-tools" ,net-tools)
-       ("coreutils" ,coreutils)
-       ("grep" ,grep)))
+     (list pkg-config
+           ;; For tests only.
+           net-tools coreutils grep))
     (home-page "http://www.net-snmp.org/")
     (synopsis "Simple Network Management Protocol library and tools")
     (description "The @dfn{Simple Network Management Protocol} (SNMP) is a
@@ -3205,7 +3212,7 @@ SNMP v3 using both IPv4 and IPv6.")
                  (("\tsetcap cap_net.*$") "")))
              #t)))))
     (inputs
-     `(("libpcap" ,libpcap)))
+     (list libpcap))
     (home-page "https://github.com/GNS3/ubridge/")
     (synopsis "Bridge for UDP tunnels, Ethernet, TAP and VMnet interfaces")
     (description "uBridge is a simple program to create user-land bridges
@@ -3228,10 +3235,7 @@ Ethernet and TAP interfaces is supported.  Packet capture is also supported.")
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (inputs
-     `(("curl" ,curl)
-       ("libpcap" ,libpcap)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list curl libpcap openssl zlib))
     (arguments
      `(#:make-flags
        (list ,(string-append "CC=" (cc-for-target))
@@ -3270,7 +3274,7 @@ packets from wireless devices for use with hashcat or John the Ripper.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (home-page "https://github.com/ZerBea/hcxdumptool")
     (synopsis "Small tool to capture packets from wlan devices")
     (description
@@ -3311,7 +3315,7 @@ never see any machines other than the one Dante is running on.")
 (define-public restbed
   (package
     (name "restbed")
-    (version "4.7")
+    (version "4.8")
     (source
      (origin
        (method git-fetch)
@@ -3320,19 +3324,13 @@ never see any machines other than the one Dante is running on.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "055qicb773a599dsqbcz5xf0xj1wpk33mdrkyi0fsmyjmn8d2p9d"))))
+        (base32 "15j09x36i6zj6innl0w1mfzlc56qmjwrs82my8dsagqa2ikd08ya"))))
     (build-system cmake-build-system)
     (inputs
-     `(("asio" ,asio-1.12)
-       ("catch" ,catch-framework)
-       ("openssl" ,openssl)))
+     (list asio catch-framework openssl))
     (arguments
-     `(#:tests? #f
-       #:configure-flags
-       '("-DBUILD_TESTS=NO"
-         "-DBUILD_EXAMPLES=NO"
-         "-DBUILD_SSL=NO"
-         "-DBUILD_SHARED=NO")
+     `(#:configure-flags
+       '("-DBUILD_SSL=NO")
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'apply-patches-and-fix-paths
@@ -3363,7 +3361,7 @@ communication over HTTP.")
 (define-public restinio
   (package
     (name "restinio")
-    (version "0.6.13")
+    (version "0.6.14")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -3372,20 +3370,18 @@ communication over HTTP.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0gb0yc88hdzwm08zdiviay6s08q427za33kfbygib7bdzp2wr2dm"))))
+                "0j44mglsljwkw49583hcsrl5ck2g56n9srnm10kpbsz2dx5apx98"))))
     (build-system cmake-build-system)
     (inputs                             ; TODO: Need to force-keep references on some inputs, e.g. boost.
-     `(("zlib" ,zlib)
-       ("catch2" ,catch-framework2)
-       ("openssl" ,openssl)
-       ("boost" ,boost)
-       ("pcre" ,pcre)
-       ("pcre2" ,pcre2)
-       ("sobjectizer" ,sobjectizer)))
+     (list zlib
+           catch-framework2
+           openssl
+           boost
+           pcre
+           pcre2
+           sobjectizer))
     (propagated-inputs
-     `(("asio" ,asio)
-       ("fmt" ,fmt)
-       ("http-parser" ,http-parser)))
+     (list asio fmt http-parser))
     (arguments
      `(#:configure-flags '("-DRESTINIO_INSTALL=on")
        #:tests? #f ; TODO: The tests are called from the root CMakelist, need RESTINIO_TEST=on.
@@ -3393,8 +3389,7 @@ communication over HTTP.")
        (modify-phases %standard-phases
          (add-after 'unpack 'change-directory
            (lambda _
-             (chdir "dev/restinio")
-             #t)))))
+             (chdir "dev/restinio"))))))
     (home-page "https://stiffstream.com/en/products/restinio.html")
     (synopsis "C++14 library that gives you an embedded HTTP/Websocket server")
     (description "RESTinio is a header-only C++14 library that gives you an embedded
@@ -3403,11 +3398,14 @@ and targeted primarily for asynchronous processing of HTTP-requests.")
     (license license:bsd-3)))
 
 (define-public opendht
-  (let ((commit "6c58d4f2e9b7f1de15db8d3a736c8cf1ea5f2886")
-        (revision "1"))
+  ;; The version/commit is kept in sync with what Jami uses in its daemon
+  ;; contrib build system (see:
+  ;; https://review.jami.net/plugins/gitiles/jami-daemon/+/refs/heads/master/contrib/src/opendht/rules.mak).
+  (let ((commit "dbbfdaab0f4119abf79646313e0dbc52881dcd56")
+        (revision "0"))
     (package
       (name "opendht")
-      (version (git-version "2.3.0" revision commit))
+      (version (git-version "2.3.1" revision commit))
       (source (origin
                 (method git-fetch)
                 (uri (git-reference
@@ -3416,73 +3414,73 @@ and targeted primarily for asynchronous processing of HTTP-requests.")
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "06l0z1dmxyjh8gdrmxyq4vnfnv3x400bhx0lxm7l90f8zc5r2bim"))))
-      ;; Since 2.0, the gnu-build-system does not seem to work anymore, upstream bug?
+                  "07x8vw999qpfl6qwj5k5l2mcjy1vp32sd567f6imbsnh9vlx2bdv"))))
       (outputs '("out" "tools" "debug"))
-      (build-system cmake-build-system)
-      (inputs
-       `(("argon2" ,argon2)
-         ("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
-         ("restinio" ,restinio)))         ;included in opendht/http.h
-      (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("pkg-config" ,pkg-config)
-         ("python" ,python)
-         ("python-cython" ,python-cython)
-         ("libtool" ,libtool)
-         ("cppunit" ,cppunit)))
+      (build-system gnu-build-system)
       (arguments
-       `(#:imported-modules ((guix build python-build-system) ;for site-packages
-                             ,@%cmake-build-system-modules)
-         #:modules (((guix build python-build-system) #:prefix python:)
-                    (guix build cmake-build-system)
+       (list
+        #:imported-modules `((guix build python-build-system) ;for site-packages
+                             ,@%gnu-build-system-modules)
+        #:modules '(((guix build python-build-system) #:prefix python:)
+                    (guix build gnu-build-system)
                     (guix build utils))
-         #:tests? #f                      ; Tests require network connection.
-         #:configure-flags
-         '( ;;"-DOPENDHT_TESTS=on"
-           "-DOPENDHT_STATIC=off"
-           "-DOPENDHT_TOOLS=on"
-           "-DOPENDHT_PYTHON=on"
-           "-DOPENDHT_PROXY_SERVER=on"
-           "-DOPENDHT_PUSH_NOTIFICATIONS=on"
-           "-DOPENDHT_PROXY_SERVER_IDENTITY=on"
-           "-DOPENDHT_PROXY_CLIENT=on")
-         #:phases
-         (modify-phases %standard-phases
-           (add-after 'unpack 'fix-python-installation-prefix
-             ;; Specify the installation prefix for the compiled Python module
-             ;; that would otherwise attempt to installs itself to Python's own
-             ;; site-packages directory.
-             (lambda* (#:key inputs outputs #:allow-other-keys)
-               (substitute* "python/CMakeLists.txt"
-                 (("--root=\\\\\\$ENV\\{DESTDIR\\}")
-                  (string-append "--root=/ --single-version-externally-managed "
-                                 "--prefix=${CMAKE_INSTALL_PREFIX}")))))
-           (add-after 'unpack 'specify-runpath-for-python-module
-             (lambda* (#:key outputs #:allow-other-keys)
-               (let ((out (assoc-ref outputs "out")))
-                 (substitute* "python/setup.py.in"
-                   (("extra_link_args=\\[(.*)\\]" _ args)
-                    (string-append "extra_link_args=[" args
-                                   ", '-Wl,-rpath=" out "/lib']"))))))
-           (add-after 'install 'move-and-wrap-tools
-             (lambda* (#:key inputs outputs #:allow-other-keys)
-               (let ((out (assoc-ref outputs "out"))
-                     (tools (assoc-ref outputs "tools"))
-                     (site-packages (python:site-packages inputs outputs)))
-                 (mkdir tools)
-                 (rename-file (string-append out "/bin")
-                              (string-append tools "/bin"))
-                 (wrap-program (string-append tools "/bin/dhtcluster")
-                   `("PYTHONPATH" prefix (,site-packages)))))))))
+        #:tests? #f                     ;tests require networking
+        #:configure-flags
+        #~(list "--enable-tests"
+                "--enable-proxy-server"
+                "--enable-push-notifications"
+                "--enable-proxy-server-identity"
+                "--enable-proxy-client")
+        #:phases
+        #~(modify-phases %standard-phases
+            (add-after 'unpack 'fix-python-installation-prefix
+              ;; Specify the installation prefix for the compiled Python module
+              ;; that would otherwise attempt to installs itself to Python's own
+              ;; site-packages directory.
+              (lambda _
+                (substitute* "python/Makefile.am"
+                  (("--root=\\$\\(DESTDIR)/")
+                   (string-append "--root=/ --single-version-externally-managed "
+                                  "--prefix=" #$output)))))
+            (add-after 'unpack 'specify-runpath-for-python-module
+              (lambda _
+                (substitute* "python/setup.py.in"
+                  (("extra_link_args=\\[(.*)\\]" _ args)
+                   (string-append "extra_link_args=[" args
+                                  ", '-Wl,-rpath=" #$output "/lib']")))))
+            (add-after 'install 'move-and-wrap-tools
+              (lambda* (#:key inputs outputs #:allow-other-keys)
+                (let* ((tools (assoc-ref outputs "tools"))
+                       (dhtcluster (string-append tools "/bin/dhtcluster"))
+                       (site-packages (python:site-packages inputs outputs)))
+                  (mkdir tools)
+                  (rename-file (string-append #$output "/bin")
+                               (string-append tools "/bin"))
+                  ;; TODO: Contribute a patch to python/Makefile.am to
+                  ;; automate this.
+                  (copy-file "python/tools/dhtcluster.py" dhtcluster)
+                  (chmod dhtcluster #o555)
+                  (wrap-program dhtcluster
+                    `("GUIX_PYTHONPATH" prefix (,site-packages)))))))))
+      (inputs (list bash-minimal fmt readline))
+      (propagated-inputs
+       (list msgpack                    ;included in several installed headers
+             restinio                   ;included in opendht/http.h
+             ;; The following are listed in the 'Requires.private' field of
+             ;; opendht.pc:
+             argon2
+             gnutls
+             jsoncpp
+             nettle
+             openssl))                  ;required for the DHT proxy
+      (native-inputs
+       (list autoconf
+             automake
+             pkg-config
+             python
+             python-cython
+             libtool
+             cppunit))
       (home-page "https://github.com/savoirfairelinux/opendht/")
       (synopsis "Lightweight Distributed Hash Table (DHT) library")
       (description "OpenDHT provides an easy to use distributed in-memory data
@@ -3524,20 +3522,13 @@ A very simple IM client working over the DHT.
                 "1r7gh5h27ii7d1d0z0x48wx7hs8vvympv3gqvy3cwzg05q5vk9xs"))))
     (build-system gnu-build-system)
     (inputs
-     `(("c-ares" ,c-ares)
-       ("json-c" ,json-c)
-       ("libcap" ,libcap)
-       ("libyang" ,libyang)
-       ("readline" ,readline)))
+     (list c-ares json-c libcap libyang readline))
     (native-inputs
-     `(("perl" ,perl)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python-wrapper)
-       ("python-pytest" ,python-pytest)))
+     (list perl pkg-config python-wrapper python-pytest))
     (home-page "https://frrouting.org/")
     (synopsis "IP routing protocol suite")
     (description "FRRouting (FRR) is an IP routing protocol suite which includes
-protocol daemons for BGP, IS-IS, LDP, OSPF, PIM, and RIP. ")
+protocol daemons for BGP, IS-IS, LDP, OSPF, PIM, and RIP.")
     (license license:gpl2+)))
 
 (define-public bird
@@ -3552,11 +3543,9 @@ protocol daemons for BGP, IS-IS, LDP, OSPF, PIM, and RIP. ")
                (base32
                 "1xp7f0im1v8pqqx3xqyfkd1nsxk8vnbqgrdrwnwhg8r5xs1xxlhr"))))
     (inputs
-     `(("libssh" ,libssh)
-       ("readline" ,readline)))
+     (list libssh readline))
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)))
+     (list bison flex))
     (arguments
      `(#:configure-flags '("--localstatedir=/var" "--enable-ipv6")
        #:phases
@@ -3576,7 +3565,7 @@ powerful route filtering syntax and an easy-to-use configuration interface.")
 (define-public iwd
   (package
     (name "iwd")
-    (version "1.15")
+    (version "1.20")
     (source (origin
               ;; FIXME: We're using the bootstrapped sources because
               ;; otherwise using an external ell library is impossible.
@@ -3586,12 +3575,10 @@ powerful route filtering syntax and an easy-to-use configuration interface.")
                                   "/wireless/iwd-" version ".tar.xz"))
               (sha256
                (base32
-                "0ngng9a9ra5w0mp2813yy2ihfibyx10ns6v5icdcp99db608xax7"))))
+                "03q5scahyg86h4bdxqxm32shyssgpmfp5b3183j01ig7mg6f4lbx"))))
     (build-system gnu-build-system)
     (inputs
-     `(("dbus" ,dbus)
-       ("ell" ,ell)
-       ("readline" ,readline)))
+     (list dbus ell readline))
     (native-inputs
      `(("pkgconfig" ,pkg-config)
        ("python" ,python)
@@ -3641,9 +3628,8 @@ maximum extent possible.")
     (arguments
      `(#:configure-flags
        (list "-DENABLE_BUILD_TESTS=ON" "-DENABLE_LYD_PRIV=ON")))
-    (propagated-inputs `(("pcre" ,pcre)))
-    (native-inputs `(("cmocka" ,cmocka)
-                     ("pkg-config" ,pkg-config)))
+    (propagated-inputs (list pcre))
+    (native-inputs (list cmocka pkg-config))
     (home-page "https://github.com/CESNET/libyang")
     (synopsis "YANG data modelling language library")
     (description "libyang is a YANG data modelling language parser and toolkit
@@ -3654,18 +3640,18 @@ written (and providing API) in C.  Current implementation covers YANG 1.0 (RFC
 (define-public batctl
   (package
    (name "batctl")
-   (version "2021.3")
+   (version "2021.4")
    (source
     (origin
      (method url-fetch)
      (uri (string-append "https://downloads.open-mesh.org/batman/releases/batman-adv-"
                          version "/batctl-" version ".tar.gz"))
      (sha256
-      (base32 "087w8xxxpqxs5cz4aj4l9wzbh0ga8163nh7qy44ld2lgqbplnbzj"))))
+      (base32 "1ryqz90av2p5pgmmpi1afmycd18zhpwz1i4f7r0s359jis86xndn"))))
    (inputs
-    `(("libnl" ,libnl)))
+    (list libnl))
    (native-inputs
-    `(("pkg-config" ,pkg-config)))
+    (list pkg-config))
    (build-system gnu-build-system)
    (arguments
     `(#:tests? #f
@@ -3674,8 +3660,9 @@ written (and providing API) in C.  Current implementation covers YANG 1.0 (RFC
       #:phases (modify-phases %standard-phases (delete 'configure))
       #:make-flags
       (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
-            (string-append "PKG_CONFIG=" (assoc-ref %build-inputs "pkg-config")
-                           "/bin/pkg-config")
+            (string-append "PKG_CONFIG="
+                           (search-input-file %build-inputs
+                                              "/bin/pkg-config"))
             ,(string-append "CC=" (cc-for-target)))))
    (home-page "https://www.open-mesh.org/projects/batman-adv/wiki/Wiki")
    (synopsis "Management tool for the mesh networking BATMAN protocol")
@@ -3705,14 +3692,10 @@ module @code{batman-adv}, for Layer 2.")
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
                     (man (string-append out "/share/man")))
-               (invoke "make"
-                       (string-append "PYTHONPATH=" (getenv "PYTHONPATH"))
-                       "doc/pagekite.1")
-               (install-file "doc/pagekite.1" (string-append man "/man1"))
-               #t))))))
+               (invoke "make" "doc/pagekite.1")
+               (install-file "doc/pagekite.1" (string-append man "/man1"))))))))
     (inputs
-     `(("python-six" ,python-six)
-       ("python-socksipychain" ,python-socksipychain)))
+     (list python-six python-socksipychain))
     (home-page "https://pagekite.net/")
     (synopsis "Make localhost servers publicly visible")
     (description
@@ -3885,13 +3868,9 @@ some traces for unprivileged users.")
     (arguments
      `(#:parallel-build? #f))           ; Build fails if #t.
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (inputs
-     `(("python" ,python)
-       ("libpcap" ,libpcap)
-       ("wolfssl" ,wolfssl)))
+     (list python libpcap wolfssl))
     (home-page "https://github.com/virtualsquare/vde-2")
     (synopsis "Virtual Distributed Ethernet")
     (description "VDE is a set of programs to provide virtual software-defined
@@ -3933,10 +3912,7 @@ cables.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (inputs
-     `(("lua" ,lua)
-       ("openssl" ,openssl)
-       ("pcre2" ,pcre2)
-       ("zlib" ,zlib)))
+     (list lua openssl pcre2 zlib))
     (home-page "https://www.haproxy.org/")
     (synopsis "Reliable, high performance TCP/HTTP load balancer")
     (description "HAProxy is a free, very fast and reliable solution offering
@@ -3951,14 +3927,14 @@ thousands of connections is clearly realistic with today's hardware.")
 (define-public lldpd
   (package
     (name "lldpd")
-    (version "1.0.12")
+    (version "1.0.13")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://media.luffy.cx/files/lldpd/lldpd-"
                            version ".tar.gz"))
        (sha256
-        (base32 "1wfs50b0694dm60ryjfmxgkxxsqpp9sxqbc4laad364wbddwd56i"))
+        (base32 "00a7v24qhxw80yk2v79wrkfn7br4r8pcajyrpz8j0xx2v1zq4ffn"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -3979,12 +3955,9 @@ thousands of connections is clearly realistic with today's hardware.")
                        "/lib/systemd/system"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libevent" ,libevent)
-       ("libxml2" ,libxml2)
-       ("openssl" ,openssl)
-       ("readline" ,readline)))
+     (list libevent libxml2 openssl readline))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://vincentbernat.github.io/lldpd/")
     (synopsis "Locate neighbors of your network equipment")
     (description
@@ -4044,20 +4017,19 @@ stamps.")
 (define-public nbd
   (package
     (name "nbd")
-    (version "3.21")
+    (version "3.23")
     (source
       (origin
         (method url-fetch)
         (uri (string-append "mirror://sourceforge/nbd/nbd/" version
                             "/nbd-" version ".tar.xz"))
         (sha256
-         (base32 "1ydylvvayi4w2d08flji9q03sl7y8hn0c26vsay3nwwikprqls77"))))
+         (base32 "1d2phi0m9x32p9zddv9fpkhj1rbhlvq93wsn9niy7i3aavn71x6y"))))
     (build-system gnu-build-system)
     (inputs
-     `(("glib" ,glib)))
+     (list glib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("which" ,which)))
+     (list bison pkg-config which))
     (home-page "https://nbd.sourceforge.io/")
     (synopsis "NBD client and server")
     (description "This package provides the NBD (Network Block Devices)
@@ -4068,7 +4040,7 @@ network.")
 (define-public yggdrasil
   (package
     (name "yggdrasil")
-    (version "0.3.16")
+    (version "0.4.1")
     (source
      (origin
        (method git-fetch)
@@ -4079,7 +4051,7 @@ network.")
          (recursive? #t)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0vyd7a333hwn6j1lv1g9sicw74a4qk982bsi3cfdhjlv6hsjwmil"))
+        (base32 "1ajhn0z58ap9jldip7mqj78drmgg4645zfsxsy004cfkm60fasnx"))
        (patches (search-patches "yggdrasil-extra-config.patch"))))
     (build-system go-build-system)
     (arguments
@@ -4087,50 +4059,42 @@ network.")
        ;; TODO: figure out how tests are run
        #:tests? #f
        #:install-source? #f
-       #:phases (modify-phases %standard-phases
-                  (replace 'build
-                    (lambda _
-                      (for-each
-                       (lambda (c)
-                         (invoke
-                          "go" "build" "-v" "-ldflags=-s -w"
-                          (string-append
-                           "github.com/yggdrasil-network/yggdrasil-go/cmd/" c)))
-                       (list "yggdrasil" "yggdrasilctl"))
-                      #t))
-                  (replace 'install
-                    (lambda* (#:key outputs #:allow-other-keys)
-                      (let* ((out (assoc-ref outputs "out"))
-                             (bin (string-append out "/bin/"))
-                             (doc (string-append out "/share/doc/yggdrasil/")))
-                        (mkdir-p bin)
-                        (for-each
-                         (lambda (f)
-                           (install-file f bin))
-                         (list "yggdrasil" "yggdrasilctl"))
-                        (mkdir-p doc)
-                        (copy-recursively
-                         (string-append
-                          "src/github.com/yggdrasil-network/yggdrasil-go/"
-                          "doc/yggdrasil-network.github.io")
-                         doc))
-                      #t)))))
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'build
+           (lambda* (#:key import-path build-flags #:allow-other-keys)
+             (for-each
+               (lambda (directory)
+                 ((assoc-ref %standard-phases 'build)
+                  #:build-flags build-flags
+                  #:import-path directory))
+               (list "github.com/yggdrasil-network/yggdrasil-go/cmd/yggdrasil"
+                     "github.com/yggdrasil-network/yggdrasil-go/cmd/yggdrasilctl"
+                     "github.com/yggdrasil-network/yggdrasil-go/cmd/genkeys"))
+             #t)))))
     ;; https://github.com/kardianos/minwinsvc is windows only
     (propagated-inputs
-     `(("go-github-com-arceliar-phony" ,go-github-com-arceliar-phony)
-       ("go-github-com-cheggaaa-pb" ,go-github-com-cheggaaa-pb)
-       ("go-github-com-gologme-log" ,go-github-com-gologme-log)
-       ("go-github-com-hashicorp-go-syslog" ,go-github-com-hashicorp-go-syslog)
-       ("go-github-com-hjson-hjson-go" ,go-github-com-hjson-hjson-go)
-       ("go-github-com-kardianos-minwinsvc" ,go-github-com-kardianos-minwinsvc)
-       ("go-github-com-mitchellh-mapstructure"
-        ,go-github-com-mitchellh-mapstructure)
-       ("go-golang-org-x-crypto" ,go-golang-org-x-crypto)
-       ("go-golang-org-x-net" ,go-golang-org-x-net)
-       ("go-golang-org-x-text" ,go-golang-org-x-text)
-       ("go-golang-zx2c4-com-wireguard" ,go-golang-zx2c4-com-wireguard)
-       ("go-netlink" ,go-netlink)
-       ("go-netns" ,go-netns)))
+     (list ;;("go-golang-zx2c4-com-wireguard-windows"
+           ;; ,go-golang-zx2c4-com-wireguard-windows)
+           go-golang-zx2c4-com-wireguard
+           go-golang-org-x-text
+           go-golang-org-x-sys
+           go-golang-org-x-net
+           go-golang-org-x-crypto
+           go-netns
+           go-netlink
+           go-github-com-mitchellh-mapstructure
+           go-github-com-mattn-go-runewidth
+           go-github-com-mattn-go-isatty
+           go-github-com-kardianos-minwinsvc
+           go-github-com-hjson-hjson-go
+           go-github-com-hashicorp-go-syslog
+           go-github-com-gologme-log
+           go-github-com-fatih-color
+           go-github-com-cheggaaa-pb-v3
+           go-github-com-vividcortex-ewma
+           go-github-com-arceliar-phony
+           go-github-com-arceliar-ironwood))
     (home-page "https://yggdrasil-network.github.io/blog.html")
     (synopsis
      "Experiment in scalable routing as an encrypted IPv6 overlay network")
@@ -4175,11 +4139,9 @@ IPv6 Internet connectivity - it also works over IPv4.")
     `(#:tests? #f)) ;; no tests
    (build-system gnu-build-system)
    (inputs
-    `(("libnet" ,libnet)
-      ("libpcap" ,libpcap)))
+    (list libnet libpcap))
    (native-inputs
-    `(("autoconf" ,autoconf)
-      ("automake" ,automake)))
+    (list autoconf automake))
    (synopsis "Network address discovery tool")
    (description "Netdiscover is a network address discovery tool developed
 mainly for wireless networks without a @acronym{DHCP} server.  It also works
@@ -4191,32 +4153,33 @@ on hub/switched networks.  It is based on @acronym{ARP} packets, it will send
 (define-public putty
   (package
     (name "putty")
-    (version "0.75")
+    (version "0.76")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "http://www.putty.be/" version
-                           "/putty-" version ".tar.gz"))
+       (uri (list (string-append "https://the.earth.li/~sgtatham/putty/"
+                                 version "/putty-" version ".tar.gz")
+                  (string-append "http://www.putty.be/" version
+                                 "/putty-" version ".tar.gz")))
        (sha256
-        (base32
-         "1xgrr1fbirw79zafspg2b6crzfmlfw910y79md4r7gnxgq1kn5yk"))))
+        (base32 "0gvi8phabszqksj2by5jrjmshm7bpirhgavz0dqyz1xaimxdjz2l"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (add-before 'configure 'chdir
            (lambda _
-             (chdir "unix")
-             #t)))))
+             (chdir "unix"))))))
     (inputs
-     `(("gtk+" ,gtk+)))
+     (list gtk+))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python" ,python))) ; for tests
-    (synopsis "Graphical @acronym{SSH} and telnet client")
-    (description "Putty is a terminal client.  It supports @acronym{SSH},
-telnet, and raw socket connections with good terminal emulation.  It supports
-public key authentication and Kerberos single-sign-on.  It also includes
-command-line @acronym{SFTP} and @acronym{SCP} implementations.")
+     (list pkg-config python)) ; for tests
+    (synopsis "Graphical @acronym{SSH, Secure SHell} and telnet client")
+    (description "PuTTY is a graphical text terminal client.  It supports
+@acronym{SSH, Secure SHell}, telnet, and raw socket connections with good
+terminal emulation.  It can authenticate with public keys and Kerberos
+single-sign-on.  It also includes command-line @acronym{SFTP, Secure File
+Transfer Protocol} and older @acronym{SCP, Secure Copy Protocol}
+implementations.")
     (home-page "https://www.chiark.greenend.org.uk/~sgtatham/putty/")
     (license license:expat)))
diff --git a/gnu/packages/nfs.scm b/gnu/packages/nfs.scm
index 8370107939..ce951543ff 100644
--- a/gnu/packages/nfs.scm
+++ b/gnu/packages/nfs.scm
@@ -126,7 +126,7 @@
        ("libtirpc" ,libtirpc)
        ("python-wrapper" ,python-wrapper))) ;for the Python based tools
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.kernel.org/pub/linux/utils/nfs-utils/")
     (synopsis "Tools for loading and managing Linux NFS mounts")
     (description "The Network File System (NFS) was developed to allow
@@ -167,11 +167,9 @@ disk.  It allows for fast, seamless sharing of files across a network.")
                (("/bin/sh") (which "sh")))
              #t)))))
     (native-inputs
-     `(("automake" ,automake)
-       ("autoconf" ,autoconf)
-       ("libtool" ,libtool)))
+     (list automake autoconf libtool))
     (inputs
-     `(("attr" ,attr)))
+     (list attr))
     (home-page "https://linux-nfs.org/wiki/index.php/Main_Page")
     (synopsis "Commandline ACL utilities for the Linux NFSv4 client")
     (description "This package provides the commandline utilities
diff --git a/gnu/packages/nickle.scm b/gnu/packages/nickle.scm
index 2353f37fb6..95b9915414 100644
--- a/gnu/packages/nickle.scm
+++ b/gnu/packages/nickle.scm
@@ -38,7 +38,7 @@
                 "0jy96z01qbrnmsrywn5mfa14615qdix6b8520qd65c6yjyrk8gs0"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("readline" ,readline)))
+     (list readline))
     (synopsis "Numeric oriented programming language")
     (description
      "Nickle is a programming language based prototyping environment with
diff --git a/gnu/packages/nicotine.scm b/gnu/packages/nicotine.scm
index c6e99b3dbd..8e194697de 100644
--- a/gnu/packages/nicotine.scm
+++ b/gnu/packages/nicotine.scm
@@ -62,9 +62,7 @@
          (add-after 'glib-or-gtk-wrap 'glib-or-gtk-compile-schemas
            (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-compile-schemas)))))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("python-pygobject" ,python-pygobject)
-       ("python-pytaglib" ,python-pytaglib)))
+     (list gtk+ python-pygobject python-pytaglib))
     (native-inputs
      `(("python-pytest" ,python-pytest)
        ("gettext" ,gettext-minimal)))
diff --git a/gnu/packages/nim.scm b/gnu/packages/nim.scm
index 0830a6106a..f0f958b215 100644
--- a/gnu/packages/nim.scm
+++ b/gnu/packages/nim.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020 Tanguy Le Carrour <tanguy@bioneland.org>
+;;; Copyright © 2022 (unmatched parenthesis <paren@disroot.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -28,14 +29,14 @@
 (define-public nim
   (package
     (name "nim")
-    (version "1.4.6")
+    (version "1.6.2")
     (source
      (origin
       (method url-fetch)
       (uri (string-append "https://nim-lang.org/download/"
                           name "-" version ".tar.xz"))
       (sha256
-       (base32 "1gfkk15q022s31ffbsm2lbfrsnsjfslbyixwk7g8bzngha90zg0g"))))
+       (base32 "0wz3jccdbhi7wd19fz9r6zad945iq50qjpbzva8xc5f3lr7p3i4s"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ; No tests.
diff --git a/gnu/packages/ninja.scm b/gnu/packages/ninja.scm
index 11ee472d56..4c4a2f37a7 100644
--- a/gnu/packages/ninja.scm
+++ b/gnu/packages/ninja.scm
@@ -31,7 +31,7 @@
 (define-public ninja
   (package
     (name "ninja")
-    (version "1.10.0")
+    (version "1.10.2")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -40,7 +40,7 @@
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1fbzl7mrcrwp527sgkc1npfl3k6bbpydpiq98xcf1a1hkrx0z5x4"))))
+                "0mspq4mvx41qri2v2zlg2y3znx5gfw6d8s3czbcfpr2218qbpz55"))))
     (build-system gnu-build-system)
     (inputs `(("python" ,python-wrapper)))
     (arguments
@@ -51,8 +51,7 @@
              (substitute* "src/subprocess-posix.cc"
                (("/bin/sh") (which "sh")))
              (substitute* "src/subprocess_test.cc"
-               (("/bin/echo") (which "echo")))
-             #t))
+               (("/bin/echo") (which "echo")))))
          (replace 'build
            (lambda _
              (invoke "./configure.py" "--bootstrap")))
@@ -67,8 +66,7 @@
                     (bin (string-append out "/bin"))
                     (doc (string-append out "/share/doc/ninja")))
                (install-file "ninja" bin)
-               (install-file "doc/manual.asciidoc" doc)
-               #t))))))
+               (install-file "doc/manual.asciidoc" doc)))))))
     (home-page "https://ninja-build.org/")
     (synopsis "Small build system")
     (description
diff --git a/gnu/packages/node-xyz.scm b/gnu/packages/node-xyz.scm
index 98c611f227..87892410f9 100644
--- a/gnu/packages/node-xyz.scm
+++ b/gnu/packages/node-xyz.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2020 Giacomo Leidi <goodoldpaul@autistici.org>
 ;;; Copyright © 2021 Noisytoot <noisytoot@disroot.org>
 ;;; Copyright © 2021 Charles <charles.b.jackson@protonmail.com>
+;;; Copyright © 2021 Philip McGrath <philip@philipmcgrath.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -21,6 +22,10 @@
 
 (define-module (gnu packages node-xyz)
   #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (gnu packages sqlite)
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages web)
+  #:use-module (guix gexp)
   #:use-module (guix packages)
   #:use-module (guix git-download)
   #:use-module (guix build-system node))
@@ -118,7 +123,7 @@ architecture supporting plugins.")
              ;; We skip the two tests which are supposed to fail.
              (invoke "bin/node-far" "-v" "test/" "-e" "test.*fail.js"))))))
     (inputs
-     `(("node-oop" ,node-oop)))
+     (list node-oop))
     (home-page "https://github.com/felixge/node-far")
     (synopsis "Node.js test runner")
     (description "This package provides a simple test runner that finds and runs
@@ -167,7 +172,7 @@ user-land JavaScript.")
     (arguments '(#:tests? #f)) ; No tests.
     (home-page "http://www.enchantedage.com/node-mersenne")
     (synopsis "Node.js module for generating Mersenne Twister random numbers")
-    (description "Thix package provides a node.js port of the Mersenne Twister
+    (description "This package provides a node.js port of the Mersenne Twister
 random number generator.")
     (license license:bsd-3)))
 
@@ -223,8 +228,7 @@ while being as light-weight and simple as possible.")
                (("far.include") "far.exclude(/test-parse.js/)\nfar.include"))
              #t)))))
       (native-inputs
-       `(("node-far" ,node-far)
-         ("node-long-stack-traces" ,node-long-stack-traces)))
+       (list node-far node-long-stack-traces))
       (home-page "https://github.com/felixge/node-stack-trace")
       (synopsis "Get v8 stack traces as an array of CallSite objects")
       (description "Get v8 stack traces as an array of CallSite objects.")
@@ -289,11 +293,13 @@ function with browser support.")
                 "06biknqb05r9xsmcflm3ygh50pjvdk84x6r79w43kmck4fn3qn5p"))))
     (build-system node-build-system)
     (arguments
-     '(#:tests? #f ; FIXME: Tests depend on node-tap
-       #:phases
+     '(#:phases
        (modify-phases %standard-phases
-         ;; The only dependency to check for is tap, which we don't have.
-         (delete 'configure))))
+         (add-after 'patch-dependencies 'delete-dependencies
+           (lambda args
+             (delete-dependencies '("tap")))))
+       ;; FIXME: Tests depend on node-tap
+       #:tests? #f))
     (home-page "https://github.com/npm/node-semver")
     (synopsis "Parses semantic versions strings")
     (description
@@ -319,8 +325,9 @@ function with browser support.")
      '(#: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))))
+         (add-after 'patch-dependencies 'delete-dependencies
+           (lambda args
+             (delete-dependencies '("tap")))))))
     (home-page "https://github.com/npm/wrappy")
     (synopsis "Callback wrapping utility")
     (description "@code{wrappy} is a utility for Node.js to wrap callbacks.")
@@ -341,15 +348,15 @@ function with browser support.")
                 "1z8dcbf28dqdcp4wb0c53wrs90a07nkrax2c9kk26dsk1dhrnxav"))))
     (build-system node-build-system)
     (arguments
-     '(#:tests? #f                      ; FIXME: tests depend on node-tap
-       #:phases
+     '(#:phases
        (modify-phases %standard-phases
-         ;; The default configure phase fails due to tap being missing, as we do
-         ;; not have tap packaged yet.  It is used only for tests.  This package
-         ;; still works as a dependency of node-glob and node-inflight.
-         (delete 'configure))))
+         (add-after 'patch-dependencies 'delete-dependencies
+           (lambda args
+             (delete-dependencies '("tap")))))
+       ;; FIXME: Tests depend on node-tap
+       #:tests? #f))
     (inputs
-     `(("node-wrappy" ,node-wrappy)))
+     (list node-wrappy))
     (home-page "https://github.com/isaacs/once")
     (synopsis "Node.js module to call a function only once")
     (description
@@ -358,6 +365,147 @@ Subsequent calls will either return the cached previous value or throw an error
 if desired.")
     (license license:isc)))
 
+(define-public node-inherits
+  (package
+    (name "node-inherits")
+    (version "2.0.4")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/isaacs/inherits")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0cpsr5yqwkxpbbbbl0rwk4mcby6zbx841k2zb4c3gb1579i5wq9p"))))
+    (build-system node-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-after 'patch-dependencies 'delete-dependencies
+           (lambda args
+             (delete-dependencies '("tap")))))
+       ;; FIXME: Tests depend on node-tap
+       #:tests? #f))
+    (home-page "https://github.com/isaacs/inherits")
+    (synopsis "Browser-friendly object inheritance")
+    (description "This package provides an alternative implementation of
+Node's @code{inherits} constructer that can be used in browsers, while
+defaulting to Node's implementation otherwise.")
+    (license license:isc)))
+
+(define-public node-safe-buffer
+  (package
+    (name "node-safe-buffer")
+    (version "5.2.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/feross/safe-buffer")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0r26m0nl41h90ihnl2xf0cqs6z9z7jb87dl5j8yqb7887r9jlbpi"))))
+    (build-system node-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-after 'patch-dependencies 'delete-dependencies
+           (lambda args
+             (delete-dependencies '("tape" "standard")))))
+       #:tests? #f))
+    (home-page "https://github.com/feross/safe-buffer")
+    (synopsis "Buffer creation with explicit semantics")
+    (description "This package provides a drop-in replacement for Node.js
+@code{Buffer} API, which provides newer, explicit constructors (such as
+@code{Buffer.alloc(SIZE)}) in older versions.")
+    (license license:expat)))
+
+(define-public node-string-decoder
+  (package
+    (name "node-string-decoder")
+    (version "1.3.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/nodejs/string_decoder")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0xxvyya9fl9rlkqwmxzqzbz4rdr3jgw4vf37hff7cgscxkhg266k"))))
+    (build-system node-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-after 'patch-dependencies 'delete-dependencies
+           (lambda args
+             (delete-dependencies
+              '("tap" "core-util-is" "babel-polyfill")))))
+       ;; FIXME: Tests depend on node-tap
+       #:tests? #f))
+    (inputs (list node-safe-buffer node-inherits))
+    (home-page "https://github.com/nodejs/string_decoder")
+    (synopsis "Decode buffers while preserving multi-byte sequences ")
+    (description "This package provides a user-land implementation of
+Node-core's @code{string_decoder}, which serves to decode buffers to
+strings so that the decoded string does not contain incomplete multibyte
+sequences.")
+    (license license:expat)))
+
+(define-public node-readable-stream
+  (package
+    (name "node-readable-stream")
+    (version "3.6.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/nodejs/readable-stream")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0ybl4cdgsm9c5jq3xq8s01201jk8w0yakh63hlclsfbcdfqhd9ri"))))
+    (build-system node-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'patch-dependencies 'delete-dependencies
+           (lambda args
+             (delete-dependencies `("@babel/cli"
+                                    "@babel/core"
+                                    "@babel/polyfill"
+                                    "@babel/preset-env"
+                                    "airtap"
+                                    "assert"
+                                    "bl"
+                                    "deep-strict-equal"
+                                    "events.once"
+                                    "glob"
+                                    "gunzip-maybe"
+                                    "hyperquest"
+                                    "lolex"
+                                    "nyc"
+                                    "pump"
+                                    "rimraf"
+                                    "tap"
+                                    "tape"
+                                    "tar-fs"
+                                    "util-promisify")))))
+       #:tests? #f))
+    (inputs (list node-util-deprecate node-string-decoder node-inherits))
+    (home-page "https://github.com/nodejs/readable-stream")
+    (synopsis "Node.js core streams for userland")
+    (description
+     "@code{readable-stream} provides an implementation of Node.js core streams
+that behaves the same across different versions.")
+    (license license:expat)))
+
 (define-public node-irc-colors
   (package
     (name "node-irc-colors")
@@ -373,12 +521,12 @@ if desired.")
                 "0q3y34rbnlc55jcakmdxkicwazyvyph9r6gaf6hi8k7wj2nfwfli"))))
     (build-system node-build-system)
     (arguments
-     '(#:tests? #f                      ; FIXME: tests depend on node-istanbul
-       #:phases
+     '(#:phases
        (modify-phases %standard-phases
-         ;; The default configure phase fails due to various packages
-         ;; being missing, as we don't have them packaged yet.
-         (delete 'configure))))
+         (add-after 'patch-dependencies 'delete-dependencies
+           (lambda args
+             (delete-dependencies `("istanbul" "vows")))))
+       #:tests? #f))
     (home-page "https://github.com/fent/irc-colors.js")
     (synopsis "Node.js module providing color and formatting for IRC")
     (description "@code{node-irc-colors} is a Node.js module that
@@ -402,16 +550,756 @@ such as rainbows.")
                 "1ln4qfx20jbwg4cp8lp0vf27m5281z2sz16d15xd6150n26cbi4x"))))
     (build-system node-build-system)
     (arguments
-     '(#:tests? #f                      ; FIXME: tests depend on node-faucet
-       #:phases
+     '(#:phases
        (modify-phases %standard-phases
-         ;; The default configure phase fails due to various packages
-         ;; being missing, as we don't have them packaged yet.
-         (delete 'configure))))
+         (add-after 'patch-dependencies 'delete-dependencies
+           (lambda args
+             (delete-dependencies
+              `("ansi-color" "faucet" "jscs" "tape")))))
+       #:tests? #f))
     (inputs
-     `(("node-irc-colors" ,node-irc-colors)))
+     (list node-irc-colors))
     (home-page "https://github.com/martynsmith/node-irc")
     (synopsis "IRC client library for Node.js")
     (description "@code{node-irc} is an IRC client library for Node.js.
 It has functions for joining, parting, talking, and many other IRC commands.")
     (license license:gpl3+)))
+
+(define-public node-nan
+  (package
+    (name "node-nan")
+    (version "2.15.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/nodejs/nan")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "18xslh9va5ld872scrp5y4251ax9s3c6qh0lnl1200lpzbsxy7yd"))))
+    (build-system node-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'patch-dependencies 'delete-dependencies
+           (lambda args
+             (delete-dependencies
+              '("bindings"
+                "commander"
+                "glob"
+                "request"
+                "node-gyp" ;; would be needed for tests
+                "tap"
+                "xtend")))))
+       ;; tests need tap and other dependencies
+       #:tests? #f))
+    (inputs
+     (list node-readable-stream))
+    (home-page "https://github.com/nodejs/nan")
+    (synopsis "Native Abstractions for Node.js")
+    (description "Native Abstractions for Node.js (``NaN'') provides a header
+file filled with macros and utilities for making add-on development for Node.js
+easier across versions.  The goal is to provide all logic necessary to develop
+native Node.js addons without having to inspect @code{NODE_MODULE_VERSION}.")
+    (license license:expat)))
+
+(define-public node-addon-api
+  (package
+    (name "node-addon-api")
+    (version "4.2.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/nodejs/node-addon-api")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1bhvfi2m9nxfz418s619914vmidcnrzbjv6l9nid476c3zlpazch"))))
+    (inputs
+     (list python node-safe-buffer))
+    (build-system node-build-system)
+    (arguments
+     `(#:modules
+       ((guix build node-build-system)
+        (srfi srfi-1)
+        (ice-9 match)
+        (guix build utils))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'patch-dependencies 'delete-dependencies
+           (lambda args
+             (delete-dependencies
+              `("benchmark"
+                "bindings"
+                "clang-format"
+                "eslint"
+                "eslint-config-semistandard"
+                "eslint-config-standard"
+                "eslint-plugin-import"
+                "eslint-plugin-node"
+                "eslint-plugin-promise"
+                "fs-extra"
+                "path"
+                "pre-commit"))))
+         (add-after 'unpack 'skip-js-tests
+           ;; We can't run the js-based tests,
+           ;; but we can still do the C++ parts
+           (lambda args
+             (define new-test-script
+               "echo stopping after pretest on Guix")
+             (with-atomic-json-file-replacement "package.json"
+               (match-lambda
+                 (('@ . pkg-meta-alist)
+                  (cons
+                   '@
+                   (map (match-lambda
+                          (("scripts" '@ . scripts-alist)
+                           `("scripts" @ ,@(map (match-lambda
+                                                  (("test" . _)
+                                                   (cons "test"
+                                                         new-test-script))
+                                                  (other
+                                                   other))
+                                                scripts-alist)))
+                          (other
+                           other))
+                        pkg-meta-alist))))))))))
+    (home-page "https://github.com/nodejs/node-addon-api")
+    (synopsis "Node.js API (Node-API) header-only C++ wrappers")
+    (description "This module contains header-only C++ wrapper classes which
+simplify the use of the C based Node-API provided by Node.js when using C++.
+It provides a C++ object model and exception handling semantics with low
+overhead.
+
+Node-API is an ABI stable C interface provided by Node.js for building native
+addons.  It is intended to insulate native addons from changes in the
+underlying JavaScript engine and allow modules compiled for one version to run
+on later versions of Node.js without recompilation.  The @code{node-addon-api}
+module, which is not part of Node.js, preserves the benefits of the Node-API
+as it consists only of inline code that depends only on the stable API
+provided by Node-API.
+
+It is important to remember that @emph{other} Node.js interfaces such as
+@code{libuv} (included in a project via @code{#include <uv.h>}) are not
+ABI-stable across Node.js major versions.")
+    (license license:expat)))
+
+(define-public node-sqlite3
+  (package
+    (name "node-sqlite3")
+    (version "5.0.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/mapbox/node-sqlite3")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0sbbzzli282nxyfha10zx0k5m8hdp0sf3ipl59khjb7wm449j86h"))
+       (snippet
+        (with-imported-modules '((guix build utils))
+          #~(begin
+              (use-modules (guix build utils))
+              ;; unbundle sqlite
+              (for-each delete-file-recursively
+                        (find-files "deps"
+                                    (lambda (pth stat)
+                                      (gzip-file? pth)))))))))
+    (inputs
+     (list node-addon-api python sqlite))
+    (build-system node-build-system)
+    (arguments
+     `(#:modules
+       ((guix build node-build-system)
+        (srfi srfi-1)
+        (ice-9 match)
+        (guix build utils))
+       #:tests? #f ; FIXME: tests depend on node-mocha
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'patch-dependencies 'delete-dependencies
+           (lambda args
+             (delete-dependencies
+              `(;; Normally, this is "built" using @mapbox/node-pre-gyp,
+                ;; which publishes or downloads pre-built binaries or
+                ;; falls back to building from source.  Here, we patch out
+                ;; all of that and just build directly.  It might be
+                ;; better to patch a version of @mapbox/node-pre-gyp that
+                ;; always builds from source, as Debian does, but there
+                ;; are a number of dependencies that need to be packaged
+                ;; or removed.
+                "@mapbox/node-pre-gyp"
+                "node-pre-gyp" ;; deprecated name still used in some places
+                "aws-sdk"
+                "@mapbox/cloudfriend"
+                ;; Confusingly, this is only a dependency because of
+                ;; @mapbox/node-pre-gyp: with that removed,
+                ;; npm will use its own copy:
+                "node-gyp"
+                ;; These we'd like, we just don't have them yet:
+                "eslint"
+                "mocha"))))
+         (add-before 'configure 'npm-config-sqlite
+           ;; We need this step even if we do replace @mapbox/node-pre-gyp
+           ;; because the package expects to build its bundled sqlite
+           (lambda* (#:key inputs #:allow-other-keys)
+             (setenv "npm_config_sqlite" (assoc-ref inputs "sqlite"))))
+         (add-after 'install 'patch-binding-path
+           ;; We replace a file that dynamic searches for the addon using
+           ;; node-pre-gyp (which we don't have) with a version that
+           ;; simply uses the path to the addon we built directly.
+           ;; The exact path is supposed to depend on things like the
+           ;; architecture and napi_build_version, so, to avoid having
+           ;; hard-code the details accurately, we do this after the addon
+           ;; has been built so we can just find where it ended up.
+           (lambda* (#:key outputs #:allow-other-keys)
+             (with-directory-excursion
+                 (search-input-directory outputs
+                                         "lib/node_modules/sqlite3/lib")
+               (match (find-files "binding" "\\.node$")
+                 ((rel-path)
+                  (with-atomic-file-replacement "sqlite3-binding.js"
+                    (lambda (in out)
+                      (format out "var binding = require('./~a');\n" rel-path)
+                      (display "module.exports = exports = binding;\n"
+                               out))))))))
+         (add-after 'patch-dependencies 'avoid-node-pre-gyp
+           (lambda args
+             ;; We need to patch .npmignore before the 'repack phase
+             ;; so that the built addon is installed with in the package.
+             ;; (Upstream assumes node-pre-gyp will download a pre-built
+             ;; version when this package is installed.)
+             (substitute* ".npmignore"
+               (("lib/binding")
+                "#lib/binding # <- patched for Guix"))
+             (with-atomic-json-file-replacement "package.json"
+               (match-lambda
+                 (('@ . pkg-meta-alist)
+                  (match (assoc-ref pkg-meta-alist "binary")
+                    (('@ . binary-alist)
+                     ;; When it builds from source, node-pre-gyp supplies
+                     ;; module_name and module_path based on the entries under
+                     ;; "binary" from "package.json", so this package's
+                     ;; "binding.gyp" doesn't define them. Thus, we also need
+                     ;; to supply them. The GYP_DEFINES environment variable
+                     ;; turns out to be the easiest way to make sure they are
+                     ;; propagated from npm to node-gyp to gyp.
+                     (setenv "GYP_DEFINES"
+                             (string-append
+                              "module_name="
+                              (assoc-ref binary-alist "module_name")
+                              " "
+                              "module_path="
+                              (assoc-ref binary-alist "module_path")))))
+                  ;; We need to remove the install script from "package.json",
+                  ;; as it would try to use node-pre-gyp and would block the
+                  ;; automatic building performed by `npm install`.
+                  (cons '@ (map (match-lambda
+                                  (("scripts" @ . scripts-alist)
+                                   `("scripts" @ ,@(filter (match-lambda
+                                                             (("install" . _)
+                                                              #f)
+                                                             (_
+                                                              #t))
+                                                           scripts-alist)))
+                                  (other
+                                   other))
+                                pkg-meta-alist))))))))))
+    (home-page "https://github.com/mapbox/node-sqlite3")
+    (synopsis "Node.js bindings for SQLite3")
+    (description
+     "@code{node-sqlite3} provides a set of a Node.js bindings for interacting
+with SQLite3 databases.")
+     (license license:bsd-3)))
+
+(define-public node-file-uri-to-path
+  (package
+    (name "node-file-uri-to-path")
+    (version "2.0.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/TooTallNate/file-uri-to-path")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "08l779az44czm12xdhgcrnzpqw34s59hbrlfphs7g9y2k26drqav"))))
+    (native-inputs
+     (list esbuild))
+    (build-system node-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'patch-dependencies 'delete-dependencies
+           (lambda args
+             (delete-dependencies `("@types/mocha"
+                                    "@types/node"
+                                    "@typescript-eslint/eslint-plugin"
+                                    "@typescript-eslint/parser"
+                                    "cpy-cli"
+                                    "eslint"
+                                    "eslint-config-airbnb"
+                                    "eslint-config-prettier"
+                                    "eslint-import-resolver-typescript"
+                                    "eslint-plugin-import"
+                                    "eslint-plugin-jsx-a11y"
+                                    "eslint-plugin-react"
+                                    "mocha"
+                                    "rimraf"
+                                    "typescript"))))
+         (replace 'build
+           (lambda* (#:key inputs native-inputs #:allow-other-keys)
+             (copy-recursively "src" "dist")
+             (invoke (search-input-file (or native-inputs inputs)
+                                        "/bin/esbuild")
+                     "dist/index.ts"
+                     "--outfile=dist/src/index.js"
+                     "--format=cjs"
+                     "--sourcemap"
+                     "--platform=node"))))
+       #:tests? #f))
+    (home-page "https://github.com/TooTallNate/file-uri-to-path")
+    (synopsis "Convert a @code{file:} URI to a file path")
+    (description "This package provides a function to convert a @code{file:}
+URI to a file path.  It accepts a @code{file:} URI and returns a file path
+suitable for use with the @code{fs} module functions.")
+    (license license:expat)))
+
+(define-public node-bindings
+  (package
+    (name "node-bindings")
+    (version "1.5.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/TooTallNate/node-bindings")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "100gp6kpjvd4j1dqnp0sbjr1hqx5mz7r61q9qy527jyhk9mj47wk"))))
+    (inputs
+     (list node-file-uri-to-path))
+    (build-system node-build-system)
+    (arguments
+     ;; there are no tests
+     `(#:tests? #f))
+    (home-page "https://github.com/TooTallNate/node-bindings")
+    (synopsis "Locate native addons")
+    (description "This package provides a helper module to locate native
+addons in a wide array of potential locations.")
+    (license license:expat)))
+
+(define-public node-segfault-handler
+  (package
+    (name "node-segfault-handler")
+    (version "1.3.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/ddopson/node-segfault-handler")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "07nbw35wvrr18kmh8f388v4k5mpjgyy0260bx0xzjdv795i3xvfv"))))
+    (native-inputs
+     (list python))
+    (inputs
+     (list node-bindings node-nan))
+    (build-system node-build-system)
+    (arguments
+     ;; there are no tests
+     `(#:tests? #f))
+    (home-page "https://github.com/ddopson/node-segfault-handler")
+    (synopsis "Catches @code{SIGSEGV} and prints diagnostic information")
+    (description "This package is a tool for debugging Node.js C/C++ native
+code modules and getting stack traces when things go wrong.  If a
+@code{SIGSEGV} signal is raised, the module will print a native stack trace to
+both @file{stderr} and to a timestamped file.")
+    (license license:bsd-3)))
+
+(define-public node-ms
+  (package
+    (name "node-ms")
+    (version "2.1.3")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/vercel/ms")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1l74kmmwffmzdz38lli0v5mdb9p9jmsjxpb48ncknqw2n74cgf08"))))
+    (build-system node-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'patch-dependencies 'delete-dependencies
+           (lambda args
+             (delete-dependencies `("eslint"
+                                    "expect.js"
+                                    "husky"
+                                    "lint-staged"
+                                    "mocha"
+                                    "prettier")))))
+       #:tests? #f))
+    (home-page "https://github.com/vercel/ms")
+    (synopsis "Convert time to milliseconds")
+    (description "Use this package to easily convert various time formats to
+milliseconds.  A number supplied as integer or string is returned as-is, while
+a string consisting of a number and a time unit is converted to milliseconds.")
+    (license license:expat)))
+
+(define-public node-debug
+  (package
+    (name "node-debug")
+    (version "4.3.3")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/debug-js/debug")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0ji0dmdl2xkgxqxvd6xjy7k3mmknmhvqjgc40vyly9ka1mpf20vb"))))
+    (inputs
+     (list node-ms))
+    (build-system node-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'patch-dependencies 'delete-dependencies
+           (lambda args
+             (delete-dependencies `("brfs"
+                                    "browserify"
+                                    "coveralls"
+                                    "istanbul"
+                                    "karma"
+                                    "karma-browserify"
+                                    "karma-chrome-launcher"
+                                    "karma-mocha"
+                                    "mocha"
+                                    "mocha-lcov-reporter"
+                                    "xo"
+                                    "supports-color")))))
+       #:tests? #f))
+    (home-page "https://github.com/debug-js/debug")
+    (synopsis "Debugging utility for Node.js")
+    (description "The @code{debug} module exposes a function, which if called
+with a module name as argument provides a function that writes debug output to
+@code{console.error} under that module name.  This output can be controlled in
+a more fine-grained manner by binding the @env{DEBUG} variable.")
+    (license license:expat)))
+
+(define-public node-serialport-binding-abstract
+  (package
+    (name "node-serialport-binding-abstract")
+    (version "9.2.3")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/serialport/node-serialport")
+             (commit "v9.2.7")))
+       (file-name (git-file-name "serialport-monorepo" version))
+       (sha256
+        (base32 "0x7zm59a5ff5yygjyw15xs3r5m3rb8av1yfrh4snn44mrwq87yg8"))))
+    (inputs
+     (list node-debug))
+    (build-system node-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'chdir
+           (lambda args
+             (chdir "packages/binding-abstract"))))
+       #:tests? #f))
+    (home-page "https://serialport.io")
+    (synopsis "Abstract base class for Node SerialPort bindings")
+    (description "Node SerialPort is a modular suite of Node.js packages for
+accessing serial ports.  The Guix package @code{node-serialport} provides the
+recommended high-level interface.
+
+This package provides the @code{AbstractBinding} class, the base for all Node
+SerialPort bindings.  You wouldn't use this class directly, but instead extend
+it to make a new binding for a different platform or underling technology.")
+    (license license:expat)))
+
+(define-public node-serialport-parser-delimiter
+  (package
+    (inherit node-serialport-binding-abstract)
+    (name "node-serialport-parser-delimiter")
+    (version "9.2.4")
+    (inputs `())
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'chdir
+           (lambda args
+             (chdir "packages/parser-delimiter"))))
+       #:tests? #f))
+    (synopsis "Node SerialPort parser to split data on a delimiter")
+    (description "Node SerialPort is a modular suite of Node.js packages for
+accessing serial ports.  The Guix package @code{node-serialport} provides the
+recommended high-level interface.
+
+Parsers are used to take raw binary data and transform them into usable
+messages.  This package provides @code{Delimiter}, a parser that emits data
+each time a specified byte sequence is received.")))
+
+(define-public node-serialport-parser-readline
+  (package
+    (inherit node-serialport-binding-abstract)
+    (name "node-serialport-parser-readline")
+    (version "9.2.4")
+    (inputs
+     (list node-serialport-parser-delimiter))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'chdir
+           (lambda args
+             (chdir "packages/parser-readline"))))
+       #:tests? #f))
+    (synopsis "Node SerialPort parser to split data on newlines")
+    (description "Node SerialPort is a modular suite of Node.js packages for
+accessing serial ports.  The Guix package @code{node-serialport} provides the
+recommended high-level interface.
+
+Parsers are used to take raw binary data and transform them into usable
+messages.  This package provides @code{Readline}, a parser that emits data
+after a (configurable) newline delimiter is received.")))
+
+(define-public node-serialport-bindings
+  (package
+    (inherit node-serialport-binding-abstract)
+    (name "node-serialport-bindings")
+    (version "9.2.7")
+    (native-inputs
+     (list python))
+    (inputs
+     (list node-nan node-bindings node-serialport-binding-abstract
+           node-serialport-parser-readline node-debug))
+    (arguments
+     `(#:modules
+       ((guix build node-build-system)
+        (srfi srfi-1)
+        (ice-9 match)
+        (guix build utils))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'chdir
+           (lambda args
+             (chdir "packages/bindings")))
+         (add-after 'patch-dependencies 'delete-dependencies
+           (lambda args
+             (delete-dependencies `("prebuild-install"
+                                    ;; devDependencies
+                                    "@serialport/binding-mock"
+                                    "node-abi"))))
+         (add-after 'chdir 'avoid-prebuild-install
+           (lambda args
+             (with-atomic-json-file-replacement "package.json"
+               (match-lambda
+                 (('@ . pkg-meta-alist)
+                  (cons '@ (map (match-lambda
+                                  (("scripts" @ . scripts-alist)
+                                   `("scripts" @ ,@(filter (match-lambda
+                                                             (("install" . _)
+                                                              #f)
+                                                             (_
+                                                              #t))
+                                                           scripts-alist)))
+                                  (other
+                                   other))
+                                pkg-meta-alist))))))))
+       #:tests? #f))
+    (synopsis "Abstract base class for Node SerialPort bindings")
+    (description "Node SerialPort is a modular suite of Node.js packages for
+accessing serial ports.  The Guix package @code{node-serialport} provides the
+recommended high-level interface.
+
+This package provides the @code{Binding} class, which uses a native addon to
+talk to the underlying system.  You never have to use @code{Binding} objects
+directly.  There is also a @code{MockBinding} available (but not yet packaged
+for Guix) to assist with testing.")))
+
+(define-public node-serialport-parser-regex
+  (package
+    (inherit node-serialport-binding-abstract)
+    (name "node-serialport-parser-regex")
+    (version "9.2.4")
+    (inputs `())
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'chdir
+           (lambda args
+             (chdir "packages/parser-regex"))))
+       #:tests? #f))
+    (synopsis "Node SerialPort parser to split data on a regular expression")
+    (description "Node SerialPort is a modular suite of Node.js packages for
+accessing serial ports.  The Guix package @code{node-serialport} provides the
+recommended high-level interface.
+
+Parsers are used to take raw binary data and transform them into usable
+messages.  This package provides @code{Regex}, a parser that uses a regular
+expression to split the incoming text.")))
+
+(define-public node-serialport-parser-ready
+  (package
+    (inherit node-serialport-binding-abstract)
+    (name "node-serialport-parser-ready")
+    (version "9.2.4")
+    (inputs `())
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'chdir
+           (lambda args
+             (chdir "packages/parser-ready"))))
+       #:tests? #f))
+    (synopsis "Node SerialPort parser to wait for specified byte sequence")
+    (description "Node SerialPort is a modular suite of Node.js packages for
+accessing serial ports.  The Guix package @code{node-serialport} provides the
+recommended high-level interface.
+
+Parsers are used to take raw binary data and transform them into usable
+messages.  This package provides @code{Ready}, a parser that waits for a
+specified sequence of ``ready'' bytes before emitting a ready event and
+emitting data events.")))
+
+(define-public node-serialport-parser-inter-byte-timeout
+  (package
+    (inherit node-serialport-binding-abstract)
+    (name "node-serialport-parser-inter-byte-timeout")
+    (version "9.2.4")
+    (inputs `())
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'chdir
+           (lambda args
+             (chdir "packages/parser-inter-byte-timeout"))))
+       #:tests? #f))
+    (synopsis "Node SerialPort parser to detect pauses in data")
+    (description "Node SerialPort is a modular suite of Node.js packages for
+accessing serial ports.  The Guix package @code{node-serialport} provides the
+recommended high-level interface.
+
+Parsers are used to take raw binary data and transform them into usable
+messages.  This package provides @code{InterByteTimeout}, a parser that emits
+data if there is a pause between packets for the specified amount of time.")))
+
+(define-public node-serialport-parser-cctalk
+  (package
+    (inherit node-serialport-binding-abstract)
+    (name "node-serialport-parser-cctalk")
+    (version "9.2.4")
+    (inputs `())
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'chdir
+           (lambda args
+             (chdir "packages/parser-cctalk"))))
+       #:tests? #f))
+    (synopsis "Node SerialPort parser for the ccTalk protocol")
+    (description "Node SerialPort is a modular suite of Node.js packages for
+accessing serial ports.  The Guix package @code{node-serialport} provides the
+recommended high-level interface.
+
+Parsers are used to take raw binary data and transform them into usable
+messages.  This package provides @code{CCTalk}, which emits packets for the
+ccTalk protocol (an open standard for currency detectors) as they are
+received.")))
+
+(define-public node-serialport-parser-byte-length
+  (package
+    (inherit node-serialport-binding-abstract)
+    (name "node-serialport-parser-byte-length")
+    (version "9.2.4")
+    (inputs `())
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'chdir
+           (lambda args
+             (chdir "packages/parser-byte-length"))))
+       #:tests? #f))
+    (synopsis "Node SerialPort parser for fixed-length buffers")
+    (description "Node SerialPort is a modular suite of Node.js packages for
+accessing serial ports.  The Guix package @code{node-serialport} provides the
+recommended high-level interface.
+
+Parsers are used to take raw binary data and transform them into usable
+messages.  This package provides @code{ByteLength}, a parser that emits data
+as a buffer every time a specified number of bytes are received.")))
+
+(define-public node-serialport-stream
+  (package
+    (inherit node-serialport-binding-abstract)
+    (name "node-serialport-stream")
+    (version "9.2.4")
+    (inputs
+     (list node-debug))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'patch-dependencies 'delete-dependencies
+           (lambda args
+             (delete-dependencies `(;; devDependencies
+                                    "@serialport/binding-mock"))))
+         (add-after 'unpack 'chdir
+           (lambda args
+             (chdir "packages/stream"))))
+       #:tests? #f))
+    (synopsis "Node.js stream interface for Node SerialPort")
+    (description "Node SerialPort is a modular suite of Node.js packages for
+accessing serial ports.  The Guix package @code{node-serialport} provides the
+recommended high-level interface.
+
+This package provides an interface for using Node SerialPort bindings via the
+Node.js Stream API.  The stream is a duplex stream, allowing for reading and
+writing.  It has additional methods for managing the SerialPort
+connection.")))
+
+(define-public node-serialport
+  (package
+    (inherit node-serialport-binding-abstract)
+    (name "node-serialport")
+    (version "9.2.7")
+    (inputs
+     (list node-serialport-bindings
+           node-serialport-parser-delimiter
+           node-serialport-parser-readline
+           node-serialport-parser-regex
+           node-serialport-parser-ready
+           node-serialport-parser-inter-byte-timeout
+           node-serialport-parser-cctalk
+           node-serialport-parser-byte-length
+           node-serialport-stream
+           node-debug))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'patch-dependencies 'delete-dependencies
+           (lambda args
+             (delete-dependencies `("@serialport/binding-mock"))
+             ))
+         (add-after 'unpack 'chdir
+           (lambda args
+             (chdir "packages/serialport"))))
+       #:tests? #f))
+    (synopsis "Node.js package to access serial ports")
+    (description "Node SerialPort is a modular suite of Node.js packages for
+accessing serial ports.  This package is the recommended entry point for most
+projects.  It combines a high-level Node.js stream interface with a useful
+default set of parsers and bindings.")))
diff --git a/gnu/packages/node.scm b/gnu/packages/node.scm
index f8ac95884c..ce94557a8c 100644
--- a/gnu/packages/node.scm
+++ b/gnu/packages/node.scm
@@ -2,13 +2,15 @@
 ;;; Copyright © 2014 Cyrill Schenkel <cyrill.schenkel@gmail.com>
 ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2015, 2016 David Thompson <davet@gnu.org>
-;;; Copyright © 2016 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2016, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017 Mike Gerwitz <mtg@gnu.org>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2018, 2019, 2020, 2021 Marius Bakke <marius@gnu.org>
+;;; Copyright © 2018-2022 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2020, 2021 Pierre Langlois <pierre.langlois@gmx.com>
 ;;; Copyright © 2020 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2021, 2022 Philip McGrath <philip@philipmcgrath.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -56,17 +58,17 @@
 (define-public node
   (package
     (name "node")
-    (version "10.24.0")
+    (version "10.24.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://nodejs.org/dist/v" version
                                   "/node-v" version ".tar.xz"))
               (sha256
                (base32
-                "1k1srdis23782hnd1ymgczs78x9gqhv77v0am7yb54gqcspp70hm"))
+                "032801kg24j04xmf09m0vxzlcz86sv21s24lv9l4cfv08k1c4byp"))
               (modules '((guix build utils)))
               (snippet
-               `(begin
+               '(begin
                   ;; Patch for compatibility with ICU 68 and newer, which
                   ;; removed the public TRUE and FALSE macros.
                   (substitute* '("deps/v8/src/objects/intl-objects.cc"
@@ -88,8 +90,7 @@
                     (("deps/http_parser/http_parser.gyp") "")
                     (("deps/uv/include/\\*.h") "")
                     (("deps/uv/uv.gyp") "")
-                    (("deps/zlib/zlib.gyp") ""))
-                  #t))))
+                    (("deps/zlib/zlib.gyp") ""))))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags '("--shared-cares"
@@ -103,16 +104,29 @@
        ;; Run only the CI tests.  The default test target requires additional
        ;; add-ons from NPM that are not distributed with the source.
        #:test-target "test-ci-js"
+       #:modules
+       ((guix build gnu-build-system)
+        (guix build utils)
+        (srfi srfi-1)
+        (ice-9 match))
        #:phases
        (modify-phases %standard-phases
-         (add-before 'configure 'patch-files
+         (add-before 'configure 'patch-hardcoded-program-references
            (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-stdio-closed.js"
-                            "test/sequential/test-child-process-emfile.js")
+             (substitute*
+                 (let ((common
+                        '("lib/child_process.js"
+                          "lib/internal/v8_prof_polyfill.js"
+                          "test/parallel/test-child-process-spawnsync-shell.js"
+                          "test/parallel/test-stdio-closed.js"
+                          "test/sequential/test-child-process-emfile.js"))
+                       ;; not in bootstap node:
+                       (sigxfsz "test/parallel/test-fs-write-sigxfsz.js"))
+                   (if (file-exists? sigxfsz)
+                       (cons sigxfsz common)
+                       common))
                (("'/bin/sh'")
                 (string-append "'" (assoc-ref inputs "bash") "/bin/sh'")))
 
@@ -122,7 +136,10 @@
                             "test/parallel/test-child-process-exec-env.js")
                (("'/usr/bin/env'")
                 (string-append "'" (assoc-ref inputs "coreutils")
-                               "/bin/env'")))
+                               "/bin/env'")))))
+         (add-after 'patch-hardcoded-program-references
+             'delete-problematic-tests
+           (lambda* (#:key inputs #:allow-other-keys)
 
              ;; FIXME: These tests fail in the build container, but they don't
              ;; seem to be indicative of real problems in practice.
@@ -135,6 +152,10 @@
              ;; This requires a DNS resolver.
              (delete-file "test/parallel/test-dns.js")
 
+             ;; This test is timing-sensitive, and fails sporadically on
+             ;; slow, busy, or even very fast machines.
+             (delete-file "test/parallel/test-fs-utimes.js")
+
              ;; FIXME: This test fails randomly:
              ;; https://github.com/nodejs/node/issues/31213
              (delete-file "test/parallel/test-net-listen-after-destroying-stdin.js")
@@ -217,64 +238,92 @@
                (setenv "CXX" ,(cxx-for-target))
                (setenv "PKG_CONFIG" ,(pkg-config-for-target))
                (apply invoke
-                      (string-append (assoc-ref (or native-inputs inputs)
-                                                "python")
-                                     "/bin/python")
-                      "configure" flags))))
-         (add-after 'patch-shebangs 'patch-npm-shebang
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((bindir (string-append (assoc-ref outputs "out")
-                                           "/bin"))
-                    (npm    (string-append bindir "/npm"))
-                    (target (readlink npm)))
-               (with-directory-excursion bindir
-                 (patch-shebang target (list bindir))))))
-         (add-after 'install 'patch-node-shebang
+                      (let ((inpts (or native-inputs inputs)))
+                        (with-exception-handler
+                            (lambda (e)
+                              (if (search-error? e)
+                                  (search-input-file inpts "/bin/python3")
+                                  (raise-exception e)))
+                          (lambda ()
+                            (search-input-file inpts "/bin/python"))))
+                      "configure"
+                      flags))))
+         (add-after 'patch-shebangs 'patch-nested-shebangs
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             ;; Based on the implementation of patch-shebangs
+             ;; from (guix build gnu-build-system).
+             (let ((path (append-map (match-lambda
+                                       ((_ . dir)
+                                        (list (string-append dir "/bin")
+                                              (string-append dir "/sbin")
+                                              (string-append dir "/libexec"))))
+                                     (append outputs inputs))))
+               (for-each
+                (lambda (file)
+                  (patch-shebang file path))
+                (find-files (search-input-directory outputs "lib/node_modules")
+                            (lambda (file stat)
+                              (executable-file? file))
+                            #:stat lstat)))))
+         (add-after 'install 'install-npmrc
+           ;; Note: programs like node-gyp only receive these values if
+           ;; they are started via `npm` or `npx`.
+           ;; See: https://github.com/nodejs/node-gyp#npm-configuration
            (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((bindir (string-append (assoc-ref outputs "out")
-                                           "/bin"))
-                    (npx    (readlink (string-append bindir "/npx"))))
-               (with-directory-excursion bindir
-                 (patch-shebang npx (list bindir)))))))))
+             (let* ((out (assoc-ref outputs "out")))
+               (with-output-to-file
+                   ;; Use the config file "primarily for distribution
+                   ;; maintainers" rather than "{prefix}/etc/npmrc",
+                   ;; especially because node-build-system uses --prefix
+                   ;; to install things to their store paths:
+                   (string-append out "/lib/node_modules/npm/npmrc")
+                 (lambda ()
+                   ;; Tell npm (mostly node-gyp) where to find our
+                   ;; installed headers so it doesn't try to
+                   ;; download them from the internet:
+                   (format #t "nodedir=~a\n" out)))))))))
     (native-inputs
-     `(;; Runtime dependencies for binaries used as a bootstrap.
-       ("c-ares" ,c-ares)
-       ("http-parser" ,http-parser)
-       ("icu4c" ,icu4c)
-       ("libuv" ,libuv)
-       ("nghttp2" ,nghttp2 "lib")
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)
-       ;; Regular build-time dependencies.
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)
-       ("procps" ,procps)
-       ("python" ,python-2)
-       ("util-linux" ,util-linux)))
+     ;; Runtime dependencies for binaries used as a bootstrap.
+     (list c-ares
+           http-parser
+           icu4c
+           libuv
+           `(,nghttp2 "lib")
+           openssl
+           zlib
+           ;; Regular build-time dependencies.
+           perl
+           pkg-config
+           procps
+           python-2
+           util-linux))
     (native-search-paths
      (list (search-path-specification
             (variable "NODE_PATH")
             (files '("lib/node_modules")))))
     (inputs
-     `(("bash" ,bash)
-       ("coreutils" ,coreutils)
-       ("c-ares" ,c-ares)
-       ("http-parser" ,http-parser)
-       ("icu4c" ,icu4c)
-       ("libuv" ,libuv)
-       ("nghttp2" ,nghttp2 "lib")
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list bash-minimal
+           coreutils
+           c-ares
+           http-parser
+           icu4c
+           libuv
+           `(,nghttp2 "lib")
+           openssl
+           python-wrapper               ;for node-gyp (supports python3)
+           zlib))
     (synopsis "Evented I/O for V8 JavaScript")
-    (description "Node.js is a platform built on Chrome's JavaScript runtime
+    (description
+     "Node.js is a platform built on Chrome's JavaScript runtime
 for easily building fast, scalable network applications.  Node.js uses an
 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 license:expat)
-    (properties '((max-silent-time . 7200)     ;2h, needed on ARM
-                  (timeout . 21600)))))        ;6h
+    (properties '((max-silent-time . 7200)   ;2h, needed on ARM
+                  (timeout . 21600)          ;6h
+                  (cpe-name . "node.js")))))
 
 ;; This should be the latest version of node that still builds without
 ;; depending on llhttp.
@@ -301,7 +350,9 @@ devices.")
        #:tests? #f
        #:phases
        (modify-phases %standard-phases
-         (delete 'configure))))
+         (add-after 'patch-dependencies 'delete-dependencies
+           (lambda args
+             (delete-dependencies '("tap")))))))
     (home-page "https://github.com/npm/node-semver")
     (properties '((hidden? . #t)))
     (synopsis "Parses semantic versions strings")
@@ -330,7 +381,13 @@ devices.")
        #:tests? #f
        #:phases
        (modify-phases %standard-phases
-         (delete 'configure))))
+         (add-after 'patch-dependencies 'delete-dependencies
+           (lambda args
+             (delete-dependencies '("eslint"
+                                    "expect.js"
+                                    "husky"
+                                    "lint-staged"
+                                    "mocha")))))))
     (home-page "https://github.com/zeit/ms#readme")
     (properties '((hidden? . #t)))
     (synopsis "Tiny millisecond conversion utility")
@@ -358,7 +415,9 @@ formats to milliseconds.")
        #:tests? #f
        #:phases
        (modify-phases %standard-phases
-         (delete 'configure))))
+         (add-after 'patch-dependencies 'delete-dependencies
+           (lambda args
+             (delete-dependencies `("chai" "mocha")))))))
     (home-page "https://github.com/darkskyapp/binary-search#readme")
     (properties '((hidden? . #t)))
     (synopsis "Tiny binary search function with comparators")
@@ -385,8 +444,20 @@ formats to milliseconds.")
        #:tests? #f
        #:phases
        (modify-phases %standard-phases
-         (delete 'configure))))
-    (inputs `(("node-ms" ,node-ms-bootstrap)))
+         (add-after 'patch-dependencies 'delete-dependencies
+           (lambda args
+             (delete-dependencies `("brfs"
+                                    "browserify"
+                                    "coveralls"
+                                    "istanbul"
+                                    "karma"
+                                    "karma-browserify"
+                                    "karma-chrome-launcher"
+                                    "karma-mocha"
+                                    "mocha"
+                                    "mocha-lcov-reporter"
+                                    "xo")))))))
+    (inputs (list node-ms-bootstrap))
     (home-page "https://github.com/visionmedia/debug#readme")
     (properties '((hidden? . #t)))
     (synopsis "Small debugging utility")
@@ -439,21 +510,26 @@ Node.js and web browsers.")
        #:tests? #f
        #:phases
        (modify-phases %standard-phases
-         (delete 'configure)
+         (add-after 'patch-dependencies 'delete-dependencies
+           (lambda _
+             (delete-dependencies `("@types/mocha"
+                                    "@types/node"
+                                    "mocha"
+                                    "ts-node"
+                                    "tslint"
+                                    "typescript"))))
          (replace 'build
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((esbuild (string-append (assoc-ref inputs "esbuild")
-                                           "/bin/esbuild")))
+             (let ((esbuild (search-input-file inputs "/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)))
+     (list node-binary-search-bootstrap node-debug-bootstrap))
     (native-inputs
-     `(("esbuild" ,esbuild)))
+     (list esbuild))
     (home-page "https://github.com/indutny/llparse-builder#readme")
     (properties '((hidden? . #t)))
     (synopsis "Graph builder for consumption by llparse")
@@ -495,21 +571,27 @@ Node.js and web browsers.")
        #:tests? #f
        #:phases
        (modify-phases %standard-phases
-         (delete 'configure)
+         (add-after 'patch-dependencies 'delete-dependencies
+           (lambda args
+             (delete-dependencies `("@types/debug"
+                                    "@types/mocha"
+                                    "@types/node"
+                                    "mocha"
+                                    "ts-node"
+                                    "tslint"
+                                    "typescript"))))
          (replace 'build
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((esbuild (string-append (assoc-ref inputs "esbuild")
-                                           "/bin/esbuild")))
+             (let ((esbuild (search-input-file inputs "/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)))
+     (list node-debug-bootstrap node-llparse-builder-bootstrap))
     (native-inputs
-     `(("esbuild" ,esbuild)))
+     (list esbuild))
     (home-page "https://github.com/indutny/llparse-frontend#readme")
     (properties '((hidden? . #t)))
     (synopsis "Frontend for the llparse compiler")
@@ -550,21 +632,29 @@ Node.js and web browsers.")
        #:tests? #f
        #:phases
        (modify-phases %standard-phases
-         (delete 'configure)
+         (add-after 'patch-dependencies 'delete-dependencies
+           (lambda args
+             (delete-dependencies `("@types/debug"
+                                    "@types/mocha"
+                                    "@types/node"
+                                    "esm"
+                                    "llparse-test-fixture"
+                                    "mocha"
+                                    "ts-node"
+                                    "tslint"
+                                    "typescript"))))
          (replace 'build
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((esbuild (string-append (assoc-ref inputs "esbuild")
-                                           "/bin/esbuild")))
+             (let ((esbuild (search-input-file inputs "/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)))
+     (list node-debug-bootstrap node-llparse-frontend-bootstrap))
     (native-inputs
-     `(("esbuild" ,esbuild)))
+     (list esbuild))
     (home-page "https://github.com/nodejs/llparse#readme")
     (properties '((hidden? . #t)))
     (synopsis "Compile incremental parsers to C code")
@@ -575,7 +665,7 @@ parser definition into a C output.")
 (define-public llhttp-bootstrap
   (package
     (name "llhttp")
-    (version "2.1.3")
+    (version "2.1.4")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -584,7 +674,7 @@ parser definition into a C output.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0pqj7kyyzr1zs4h9yzn5rdxnxspm3wqgsv00765dd42fszlmrmk8"))
+                "115mwyds9655p76lhglxg2blc1ksgrix6zhigaxnc2q6syy3pa6x"))
               (patches (search-patches "llhttp-bootstrap-CVE-2020-8287.patch"))
               (modules '((guix build utils)))
               (snippet
@@ -606,10 +696,9 @@ parser definition into a C output.")
        #:phases
        (modify-phases %standard-phases
          (replace 'configure
-           (lambda* (#:key native-inputs inputs #:allow-other-keys)
-             (let ((esbuild (string-append
-                              (assoc-ref (or native-inputs inputs) "esbuild")
-                              "/bin/esbuild")))
+           (lambda* (#:key inputs native-inputs #:allow-other-keys)
+             (let ((esbuild (search-input-file (or native-inputs inputs)
+                                               "/bin/esbuild")))
                (invoke esbuild
                        "--platform=node"
                        "--outfile=bin/generate.js"
@@ -646,14 +735,14 @@ source files.")
 (define-public node-lts
   (package
     (inherit node)
-    (version "14.16.0")
+    (version "14.18.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://nodejs.org/dist/v" version
                                   "/node-v" version ".tar.xz"))
               (sha256
                (base32
-                "19nz2mhmn6ikahxqyna1dn25pb5v3z9vsz9zb2flb6zp2yk4hxjf"))
+                "026nd6vihjdqz4jn0slg89m8m5vvkvjzgg1aip3dcg9lrm1w8fkq"))
               (modules '((guix build utils)))
               (snippet
                `(begin
@@ -685,7 +774,7 @@ source files.")
              (lambda* (#:key native-inputs inputs #:allow-other-keys)
                (let* ((inputs        (or native-inputs inputs))
                       (c-ares        (assoc-ref inputs "c-ares"))
-                      (google-brotli (assoc-ref inputs "google-brotli"))
+                      (brotli        (assoc-ref inputs "brotli"))
                       (icu4c         (assoc-ref inputs "icu4c"))
                       (nghttp2       (assoc-ref inputs "nghttp2"))
                       (openssl       (assoc-ref inputs "openssl"))
@@ -704,73 +793,15 @@ source files.")
                     (string-append target
                                    "'ldflags': ['-Wl,-rpath="
                                    c-ares "/lib:"
-                                   google-brotli "/lib:"
+                                   brotli "/lib:"
                                    icu4c "/lib:"
                                    nghttp2 "/lib:"
                                    openssl "/lib:"
                                    libuv "/lib:"
                                    zlib "/lib"
                                    "'],"))))))
-           (replace 'configure
-             ;; Node's configure script is actually a python script, so we can't
-             ;; run it with bash.
-             (lambda* (#:key outputs (configure-flags '()) native-inputs inputs
-                       #:allow-other-keys)
-               (let* ((prefix (assoc-ref outputs "out"))
-                      (xflags ,(if (%current-target-system)
-                                   `'("--cross-compiling"
-                                     ,(string-append
-                                       "--dest-cpu="
-                                       (match (%current-target-system)
-                                         ((? (cut string-prefix? "arm" <>))
-                                          "arm")
-                                         ((? (cut string-prefix? "aarch64" <>))
-                                          "arm64")
-                                         ((? (cut string-prefix? "i686" <>))
-                                          "ia32")
-                                         ((? (cut string-prefix? "x86_64" <>))
-                                          "x64")
-                                         ((? (cut string-prefix? "powerpc64" <>))
-                                          "ppc64")
-                                         (_ "unsupported"))))
-                                   ''()))
-                      (flags (cons
-                               (string-append "--prefix=" prefix)
-                               (append xflags 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_host" "gcc")
-                 (setenv "CXX_host" "g++")
-                 (setenv "CC" ,(cc-for-target))
-                 (setenv "CXX" ,(cxx-for-target))
-                 (setenv "PKG_CONFIG" ,(pkg-config-for-target))
-                 (apply invoke
-                        (string-append (assoc-ref (or native-inputs inputs)
-                                                  "python")
-                                       "/bin/python3")
-                        "configure" flags))))
-           (replace 'patch-files
+           (replace 'delete-problematic-tests
              (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 "'" (assoc-ref inputs "bash") "/bin/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 "'" (assoc-ref inputs "coreutils")
-                                 "/bin/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
@@ -782,6 +813,13 @@ source files.")
                          '("test/parallel/test-dns.js"
                            "test/parallel/test-dns-lookupService-promises.js"))
 
+               ;; These tests require networking.
+               (delete-file "test/parallel/test-https-agent-unref-socket.js")
+
+               ;; This test is timing-sensitive, and fails sporadically on
+               ;; slow, busy, or even very fast machines.
+               (delete-file "test/parallel/test-fs-utimes.js")
+
                ;; FIXME: This test fails randomly:
                ;; https://github.com/nodejs/node/issues/31213
                (delete-file "test/parallel/test-net-listen-after-destroying-stdin.js")
@@ -806,8 +844,9 @@ source files.")
                ;; TODO: Regenerate certs instead.
                (for-each delete-file
                          '("test/parallel/test-tls-passphrase.js"
-                           "test/parallel/test-tls-server-verify.js"))
-
+                           "test/parallel/test-tls-server-verify.js"))))
+           (add-after 'delete-problematic-tests 'replace-llhttp-sources
+             (lambda* (#:key inputs #:allow-other-keys)
                ;; Replace pre-generated llhttp sources
                (let ((llhttp (assoc-ref inputs "llhttp")))
                  (copy-file (string-append llhttp "/src/llhttp.c")
@@ -819,31 +858,32 @@ source files.")
                  (copy-file (string-append llhttp "/include/llhttp.h")
                             "deps/llhttp/include/llhttp.h"))))))))
     (native-inputs
-     `(;; Runtime dependencies for binaries used as a bootstrap.
-       ("c-ares" ,c-ares)
-       ("google-brotli" ,google-brotli)
-       ("icu4c" ,icu4c-67)
-       ("libuv" ,libuv-for-node)
-       ("nghttp2" ,nghttp2 "lib")
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)
-       ;; Regular build-time dependencies.
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)
-       ("procps" ,procps)
-       ("python" ,python)
-       ("util-linux" ,util-linux)))
+     (list ;; Runtime dependencies for binaries used as a bootstrap.
+           c-ares-for-node
+           brotli
+           icu4c-67
+           libuv-for-node
+           `(,nghttp2 "lib")
+           openssl
+           zlib
+           ;; Regular build-time dependencies.
+           perl
+           pkg-config
+           procps
+           python
+           util-linux))
     (inputs
-     `(("bash" ,bash)
-       ("coreutils" ,coreutils)
-       ("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)))))
+     (list bash-minimal
+           coreutils
+           c-ares-for-node
+           icu4c-67
+           libuv-for-node
+           llhttp-bootstrap
+           brotli
+           `(,nghttp2 "lib")
+           openssl
+           python-wrapper ;; for node-gyp (supports python3)
+           zlib))))
 
 (define-public libnode
   (package/inherit node
@@ -854,5 +894,5 @@ source files.")
         `(cons* "--shared" "--without-npm" ,flags))
        ((#:phases phases '%standard-phases)
         `(modify-phases ,phases
-           (delete 'patch-npm-shebang)
-           (delete 'patch-node-shebang)))))))
+           (delete 'install-npmrc)
+           (delete 'patch-nested-shebangs)))))))
diff --git a/gnu/packages/notcurses.scm b/gnu/packages/notcurses.scm
new file mode 100644
index 0000000000..9da298dce8
--- /dev/null
+++ b/gnu/packages/notcurses.scm
@@ -0,0 +1,77 @@
+;;; Copyright © 2021 Blake Shaw <blake@nonconstructivism.com>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages notcurses)
+  #:use-module (guix utils)
+  #:use-module (gnu packages)
+  #:use-module (guix packages)
+  #:use-module (guix build utils)
+  #:use-module (guix git-download)
+  #:use-module (guix build-system cmake)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (gnu packages check)
+  #:use-module (gnu packages haskell-xyz)
+  #:use-module (gnu packages video)
+  #:use-module (gnu packages ncurses)
+  #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages compression)
+  #:use-module (gnu packages libunistring))
+
+(define-public notcurses
+  (package
+   (name "notcurses")
+   (version "3.0.0")
+   (source
+    (origin
+     (method git-fetch)
+     (uri (git-reference
+           (url "https://github.com/dankamongmen/notcurses")
+           (commit (string-append "v" version))))
+     (file-name (git-file-name name version))
+         (sha256
+          (base32 "1y9s77m1pp6syfml559d8dvif61y6zjldrdx1zri18q9sr0zqm9m"))))
+      (build-system cmake-build-system)
+      (arguments
+       `(#:make-flags
+         (list (string-append "CC=" ,(cc-for-target)))
+         ;; These flags are documented in 'INSTALL.md' in the source distribution.
+         #:configure-flags
+         '(;; Do not build "coverage"
+           "-DUSE_COVERAGE=off"
+           ;; Do not build HTML documentation
+           "-DUSE_DOXYGEN=off"
+           ;; Don't include mouse support
+           "-DUSE_GPM=off"
+           ;; Use FFmpeg for multimedia support
+           "-DUSE_MULTIMEDIA=ffmpeg"
+           ;; Follow the Debian Free Software Guidelines, omitting nonfree content.
+           "-DFSG_BUILD=ON")))
+      (native-inputs
+       (list pkg-config
+             pandoc
+             doctest))
+      (inputs
+       (list ffmpeg
+             libdeflate
+             libunistring
+             ncurses
+             zlib))
+      (synopsis "Textual user interfaces")
+      (description "Notcurses is a library for building complex textual user
+interfaces on modern terminals.")
+      (home-page "https://notcurses.com")
+      (license license:asl2.0)))
diff --git a/gnu/packages/noweb.scm b/gnu/packages/noweb.scm
index 7d8d402b94..d218d8cc68 100644
--- a/gnu/packages/noweb.scm
+++ b/gnu/packages/noweb.scm
@@ -95,7 +95,7 @@
                                            "/share/texmf/tex/latex")))
        #:tests? #f))                              ; no tests
     (inputs
-     `(("perl" ,perl)))
+     (list perl))
     (home-page "https://www.cs.tufts.edu/~nr/noweb/")
     (synopsis "Literate programming tool")
     (description
diff --git a/gnu/packages/nss.scm b/gnu/packages/nss.scm
index 0444b47071..aae8886095 100644
--- a/gnu/packages/nss.scm
+++ b/gnu/packages/nss.scm
@@ -1,10 +1,12 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019, 2021 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016, 2017, 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2020 Jonathan Brielmaier <jonathan.brielmaier@web.de>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -23,20 +25,22 @@
 
 (define-module (gnu packages nss)
   #:use-module (guix packages)
+  #:use-module (guix utils)
+  #:use-module (guix gexp)
   #:use-module (guix download)
   #:use-module (guix build-system gnu)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (gnu packages)
+  #:use-module (gnu packages bash)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages perl)
-  #:use-module (gnu packages sqlite)
-  #:use-module (ice-9 match))
+  #:use-module (gnu packages sqlite))
 
 (define-public nspr
   (package
     (name "nspr")
-    (version "4.29")
+    (version "4.31")
     (source (origin
              (method url-fetch)
              (uri (string-append
@@ -44,17 +48,37 @@
                    version "/src/nspr-" version ".tar.gz"))
              (sha256
               (base32
-               "10i5x637x0jqmdi47grkzgn56fg6770naa3wrhr4dmsrh3dnna12"))))
+               "1j5b2m8cjlhnnv8sq34587avaagkqvh521w4f95miwgvsn3xlaap"))))
     (build-system gnu-build-system)
+    (inputs
+     ;; For 'compile-et.pl' and 'nspr-config'.
+     (list perl ;for 'compile-et.pl'
+           bash-minimal)) ;for 'nspr-config'
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (arguments
-     `(#:tests? #f ; no check target
-       #:configure-flags (list "--disable-static"
-                               "--enable-64bit"
-                               (string-append "LDFLAGS=-Wl,-rpath="
-                                              (assoc-ref %outputs "out")
-                                              "/lib"))
+     `(;; Prevent the 'native' perl from sneaking into the closure.
+       ;; XXX it would be nice to do the same for 'bash-minimal',
+       ;; but using 'canonical-package' causes loops.
+       ,@(if (%current-target-system)
+             `(#:disallowed-references
+               (,(gexp-input (this-package-native-input "perl") #:native? #t)))
+             '())
+       #:tests? #f ; no check target
+       #:configure-flags
+       (list "--disable-static"
+             "--enable-64bit"
+             (string-append "LDFLAGS=-Wl,-rpath="
+                            (assoc-ref %outputs "out") "/lib")
+             ;; Mozilla deviates from Autotools conventions
+             ;; due to historical reasons.  Adjust to Mozilla conventions,
+             ;; otherwise the Makefile will try to use TARGET-gcc
+             ;; as a ‘native’ compiler.
+             ,@(if (%current-target-system)
+                   `(,(string-append "--host="
+                                     (nix-system->gnu-triplet (%current-system)))
+                     ,(string-append "--target=" (%current-target-system)))
+                   '()))
        ;; Use fixed timestamps for reproducibility.
        #:make-flags '("SH_DATE='1970-01-01 00:00:01'"
                       ;; This is epoch 1 in microseconds.
@@ -70,10 +94,25 @@ platform-neutral API for system level and libc-like functions.  It is used
 in the Mozilla clients.")
     (license license:mpl2.0)))
 
+(define-public nspr-4.32
+  (package
+    (inherit nspr)
+    (version "4.32")
+    (source (origin
+             (method url-fetch)
+             (uri (string-append
+                   "https://ftp.mozilla.org/pub/mozilla.org/nspr/releases/v"
+                   version "/src/nspr-" version ".tar.gz"))
+             (sha256
+              (base32
+               "0v3zds1id71j5a5si42a658fjz8nv2f6zp6w4gqrqmdr6ksz8sxv"))))))
+
 (define-public nss
   (package
     (name "nss")
-    (version "3.59")
+    ;; Also update and test the nss-certs package, which duplicates version and
+    ;; source to avoid a top-level variable reference & module cycle.
+    (version "3.72")
     (source (origin
               (method url-fetch)
               (uri (let ((version-with-underscores
@@ -84,22 +123,21 @@ in the Mozilla clients.")
                       "nss-" version ".tar.gz")))
               (sha256
                (base32
-                "096fs3z21r171q24ca3rq53p1389xmvqz1f2rpm7nlm8r9s82ag6"))
+                "0bnh683nij6s0gvjcgwhyw5d3yx9fpm42pxj5bm97r0ky6ghm9kf"))
               ;; Create nss.pc and nss-config.
               (patches (search-patches "nss-3.56-pkgconfig.patch"
+                                       "nss-getcwd-nonnull.patch"
                                        "nss-increase-test-timeout.patch"))
               (modules '((guix build utils)))
               (snippet
                '(begin
                   ;; Delete the bundled copy of these libraries.
                   (delete-file-recursively "nss/lib/zlib")
-                  (delete-file-recursively "nss/lib/sqlite")
-                  #t))))
+                  (delete-file-recursively "nss/lib/sqlite")))))
     (build-system gnu-build-system)
     (outputs '("out" "bin"))
     (arguments
-     `(#:parallel-build? #f ; not supported
-       #:make-flags
+     `(#:make-flags
        (let* ((out (assoc-ref %outputs "out"))
               (nspr (string-append (assoc-ref %build-inputs "nspr")))
               (rpath (string-append "-Wl,-rpath=" out "/lib/nss")))
@@ -119,27 +157,27 @@ in the Mozilla clients.")
        (modify-phases %standard-phases
          (replace 'configure
            (lambda _
-             (setenv "CC" "gcc")
+             (setenv "CC" ,(cc-for-target))
              ;; Tells NSS to build for the 64-bit ABI if we are 64-bit system.
-             ,@(match (%current-system)
-                 ((or "x86_64-linux" "aarch64-linux")
-                  `((setenv "USE_64" "1")))
-                 (_
-                  '()))
-             #t))
+             ,@(if (target-64bit?)
+                   `((setenv "USE_64" "1"))
+                   '())))
          (replace 'check
-           (lambda _
-             ;; Use 127.0.0.1 instead of $HOST.$DOMSUF as HOSTADDR for testing.
-             ;; The later requires a working DNS or /etc/hosts.
-             (setenv "DOMSUF" "localdomain")
-             (setenv "USE_IP" "TRUE")
-             (setenv "IP_ADDRESS" "127.0.0.1")
+           (lambda* (#:key tests? #:allow-other-keys)
+             (if tests?
+                 (begin
+                   ;; Use 127.0.0.1 instead of $HOST.$DOMSUF as HOSTADDR for
+                   ;; testing.  The latter requires a working DNS or /etc/hosts.
+                   (setenv "DOMSUF" "localdomain")
+                   (setenv "USE_IP" "TRUE")
+                   (setenv "IP_ADDRESS" "127.0.0.1")
 
-             ;; The "PayPalEE.cert" certificate expires every six months,
-             ;; leading to test failures:
-             ;; <https://bugzilla.mozilla.org/show_bug.cgi?id=609734>.  To
-             ;; work around that, set the time to roughly the release date.
-             (invoke "faketime" "2020-11-01" "./nss/tests/all.sh")))
+                   ;; The "PayPalEE.cert" certificate expires every six months,
+                   ;; leading to test failures:
+                   ;; <https://bugzilla.mozilla.org/show_bug.cgi?id=609734>.  To
+                   ;; work around that, set the time to roughly the release date.
+                   (invoke "faketime" "2021-09-30" "./nss/tests/all.sh"))
+                 (format #t "test suite not run~%"))))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -160,21 +198,19 @@ in the Mozilla clients.")
                ;; Install other files.
                (copy-recursively "dist/public/nss" inc)
                (copy-recursively (string-append obj "/bin") bin)
-               (copy-recursively (string-append obj "/lib") lib)
-               #t))))))
+               (copy-recursively (string-append obj "/lib") lib)))))))
     (inputs
-     `(("sqlite" ,sqlite)
-       ("zlib" ,zlib)))
-    (propagated-inputs `(("nspr" ,nspr))) ; required by nss.pc.
-    (native-inputs `(("perl" ,perl)
-                     ("libfaketime" ,libfaketime))) ;for tests
+     (list sqlite zlib))
+    (propagated-inputs
+     (list nspr))                 ;required by nss.pc.
+    (native-inputs
+     (list perl libfaketime))   ;for tests
 
     ;; The NSS test suite takes around 48 hours on Loongson 3A (MIPS) when
     ;; another build is happening concurrently on the same machine.
-    (properties '((timeout . 216000)))  ; 60 hours
+    (properties '((timeout . 216000)))  ;60 hours
 
-    (home-page
-     "https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS")
+    (home-page "https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS")
     (synopsis "Network Security Services")
     (description
      "Network Security Services (@dfn{NSS}) is a set of libraries designed to
diff --git a/gnu/packages/ntp.scm b/gnu/packages/ntp.scm
index 55b9a73b22..b98f4513a3 100644
--- a/gnu/packages/ntp.scm
+++ b/gnu/packages/ntp.scm
@@ -45,14 +45,14 @@
 (define-public chrony
   (package
     (name "chrony")
-    (version "4.1")
+    (version "4.2")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://download.tuxfamily.org/chrony/"
                            "chrony-" version ".tar.gz"))
        (sha256
-        (base32 "0k0nf5qqzl01106lkmwc32n6a1fxagalpbci38iccyilz79z4xpd"))))
+        (base32 "16nv90h73c99adh2bdrvlws1lhjsqfp6pfpnlprxd3ijbk8rygr7"))))
     (build-system gnu-build-system)
     (arguments
      `(#:modules ((srfi srfi-26)
@@ -69,23 +69,18 @@
            ;; time would result in nonsense file names in man pages.
            (lambda _
              (substitute* "Makefile.in"
-               (("mkdir -p \\$\\(DESTDIR\\)\\$\\(CHRONYVARDIR\\)") ":"))
-             #t))
+               (("mkdir -p \\$\\(DESTDIR\\)\\$\\(CHRONYVARDIR\\)") ":"))))
          (add-after 'install 'install-more-documentation
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
                     (doc (string-append out "/share/doc/" ,name "-" ,version)))
                (for-each (cut install-file <> doc)
                          (list "README" "FAQ"))
-               (copy-recursively "examples" (string-append doc "/examples"))
-               #t))))))
+               (copy-recursively "examples" (string-append doc "/examples"))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("gnutls" ,gnutls)
-       ("libcap" ,libcap)
-       ("libseccomp" ,libseccomp)
-       ("nettle" ,nettle)))
+     (list gnutls libcap libseccomp nettle))
     (home-page "https://chrony.tuxfamily.org/")
     (synopsis "System clock synchronisation service that speaks NTP")
     (description
@@ -147,8 +142,7 @@ time-stamping or reference clock, sub-microsecond accuracy is possible.")
            (rename-file "sntp/libevent:build-aux"
                         "sntp/libevent/build-aux")
            #t))))
-   (native-inputs `(("which" ,which)
-                    ("pkg-config" ,pkg-config)))
+   (native-inputs (list which pkg-config))
    (inputs
     `(("openssl" ,openssl)
       ("libevent" ,libevent)
@@ -207,7 +201,7 @@ computers over a network.")
                (("DESTDIR\\)\\$\\(localstatedir") "TMPDIR"))
              #t)))))
     (inputs
-     `(("libressl" ,libressl))) ; enable TLS time constraints. See ntpd.conf(5).
+     (list libressl)) ; enable TLS time constraints. See ntpd.conf(5).
     (home-page "http://www.openntpd.org/")
     (synopsis "NTP client and server by the OpenBSD Project")
     (description "OpenNTPD is the OpenBSD Project's implementation of a client
diff --git a/gnu/packages/nvi.scm b/gnu/packages/nvi.scm
index b520b32784..f1f461f2b4 100644
--- a/gnu/packages/nvi.scm
+++ b/gnu/packages/nvi.scm
@@ -90,10 +90,9 @@
                           '("config.sub")))
               #t)))))
     (inputs
-      `(("bdb" ,bdb)
-        ("ncurses" ,ncurses)))
+      (list bdb ncurses))
     (native-inputs
-     `(("automake" ,automake))) ;Up to date 'config.guess' and 'config.sub'.
+     (list automake)) ;Up to date 'config.guess' and 'config.sub'.
     (synopsis "The Berkeley Vi Editor")
     (description
       "Vi is the original screen based text editor for Unix systems.  It is
diff --git a/gnu/packages/ocaml.scm b/gnu/packages/ocaml.scm
index c17b3dbd6f..6c1ac057a4 100644
--- a/gnu/packages/ocaml.scm
+++ b/gnu/packages/ocaml.scm
@@ -6,7 +6,7 @@
 ;;; Copyright © 2016 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2016, 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
-;;; Copyright © 2016-2020 Julien Lepiller <julien@lepiller.eu>
+;;; Copyright © 2016-2021 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2017 Ben Woodcroft <donttrustben@gmail.com>
 ;;; Copyright © 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Peter Kreye <kreyepr@gmail.com>
@@ -15,13 +15,15 @@
 ;;; Copyright © 2019 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2020 Brett Gilio <brettg@gnu.org>
 ;;; Copyright © 2020 Marius Bakke <marius@gnu.org>
-;;; Copyright © 2020 Simon Tournier <zimon.toutoune@gmail.com>
+;;; Copyright © 2020, 2021 Simon Tournier <zimon.toutoune@gmail.com>
 ;;; Copyright © 2020 divoplade <d@divoplade.fr>
 ;;; Copyright © 2020, 2021 pukkamustard <pukkamustard@posteo.net>
 ;;; Copyright © 2021 aecepoglu <aecepoglu@fastmail.fm>
 ;;; Copyright © 2021 Sharlatan Hellseher <sharlatanus@gmail.com>
 ;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
 ;;; Copyright © 2021 Ivan Gankevich <i.gankevich@spbu.ru>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
+;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -43,6 +45,7 @@
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages bash)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages compression)
@@ -88,6 +91,7 @@
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system ocaml)
   #:use-module (guix download)
+  #:use-module (guix gexp)
   #:use-module (guix git-download)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
@@ -111,8 +115,8 @@
           (sha256 (base32 hash))))
 
 (define-public camlboot
-  (let ((commit "506280c6e0813e0e794988151a8e46be55373ebc")
-        (revision "0"))
+  (let ((commit "45045d0afa82f7e9b7ea07314aab08be2d3cd64b")
+        (revision "1"))
     (package
       (name "camlboot")
       (version (git-version "0.0.0" revision commit))
@@ -125,7 +129,7 @@
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "0vimxl4karw9ih3npyc5rhxg85cjh6fqjbq3dzj7j2iymlhwfbkv"))
+                  "1f5gl3hzvixbgk0v3kmxiyn432znyy3jh5fa65cfzcaxzgfv1i1c"))
                 (modules '((guix build utils)))
                 (snippet
                  `(begin
@@ -159,9 +163,10 @@
                  (rename-file "miniml/interp/lex.byte" "ocamllex")
                  (install-file "ocamllex" bin)))))))
       (native-inputs
-       `(("guile" ,guile-3.0)))
+       (list guile-3.0))
       (properties
-       `((max-silent-time . 14400))) ; 4 hours, expected even on x86_64
+       ;; 10 hours, mostly for arm, more than 1 expected even on x86_64
+       `((max-silent-time . 36000)))
       (home-page "https://github.com/Ekdohibs/camlboot")
       (synopsis "OCaml source bootstrap")
       (description "OCaml is written in OCaml.  Its sources contain a pre-compiled
@@ -177,10 +182,10 @@ OCaml and can effectively bootstrap OCaml 4.07.
 This package produces a native @command{ocamlc} and a bytecode @command{ocamllex}.")
       (license license:expat))))
 
-(define-public ocaml-4.11
+(define-public ocaml-4.13
   (package
     (name "ocaml")
-    (version "4.11.1")
+    (version "4.13.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -189,7 +194,7 @@ This package produces a native @command{ocamlc} and a bytecode @command{ocamllex
                     "/ocaml-" version ".tar.xz"))
               (sha256
                (base32
-                "0k4521c0p10c5ams6vjv5qkkjhmpkb0bfn04llcz46ah0f3r2jpa"))))
+                "1s7xwqidpjwfhnpfma4nb93gxfr7g9jfn03s1j03iyavmpgph7ck"))))
     (build-system gnu-build-system)
     (native-search-paths
      (list (search-path-specification
@@ -200,19 +205,19 @@ This package produces a native @command{ocamlc} and a bytecode @command{ocamllex
             (files (list "lib/ocaml/site-lib/stubslibs"
                          "lib/ocaml/site-lib/stublibs")))))
     (native-inputs
-     `(("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list perl pkg-config))
     (inputs
-     `(("libx11" ,libx11)
-       ("libiberty" ,libiberty)               ;needed for objdump support
-       ("zlib" ,zlib)))                       ;also needed for objdump support
+     (list libx11 libiberty ;needed for objdump support
+           zlib))                       ;also needed for objdump support
     (arguments
-     `(#:phases
+     `(#:configure-flags '("--enable-ocamltest")
+       #:test-target "tests"
+       #:make-flags '("world.opt")
+       #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-/bin/sh-references
            (lambda* (#:key inputs #:allow-other-keys)
-             (let* ((sh (string-append (assoc-ref inputs "bash")
-                                       "/bin/sh"))
+             (let* ((sh (search-input-file inputs "/bin/sh"))
                     (quoted-sh (string-append "\"" sh "\"")))
                (with-fluids ((%default-port-encoding #f))
                  (for-each
@@ -224,16 +229,7 @@ This package produces a native @command{ocamlc} and a bytecode @command{ocamllex
 patch-/bin/sh-references: ~a: changing `\"/bin/sh\"' to `~a'~%"
                                  file quoted-sh)
                          quoted-sh))))
-                  (find-files "." "\\.ml$"))
-                 #t))))
-         (replace 'build
-           (lambda _
-             (invoke "make" "-j" (number->string (parallel-job-count))
-                     "world.opt")))
-         (replace 'check
-           (lambda _
-             (with-directory-excursion "testsuite"
-               (invoke "make" "all")))))))
+                  (find-files "." "\\.ml$")))))))))
     (home-page "https://ocaml.org/")
     (synopsis "The OCaml programming language")
     (description
@@ -248,7 +244,7 @@ functional, imperative and object-oriented styles of programming.")
 
 (define-public ocaml-4.09
   (package
-    (inherit ocaml-4.11)
+    (inherit ocaml-4.13)
     (version "4.09.0")
     (source (origin
               (method url-fetch)
@@ -256,9 +252,36 @@ functional, imperative and object-oriented styles of programming.")
                     "http://caml.inria.fr/pub/distrib/ocaml-"
                     (version-major+minor version)
                     "/ocaml-" version ".tar.xz"))
+              (patches (search-patches "ocaml-4.09-multiple-definitions.patch"))
               (sha256
                (base32
-                "1v3z5ar326f3hzvpfljg4xj8b9lmbrl53fn57yih1bkbx3gr3yzj"))))))
+                "1v3z5ar326f3hzvpfljg4xj8b9lmbrl53fn57yih1bkbx3gr3yzj"))))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-/bin/sh-references
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let* ((sh (search-input-file inputs "/bin/sh"))
+                    (quoted-sh (string-append "\"" sh "\"")))
+               (with-fluids ((%default-port-encoding #f))
+                 (for-each
+                  (lambda (file)
+                    (substitute* file
+                      (("\"/bin/sh\"")
+                       (begin
+                         (format (current-error-port) "\
+patch-/bin/sh-references: ~a: changing `\"/bin/sh\"' to `~a'~%"
+                                 file quoted-sh)
+                         quoted-sh))))
+                  (find-files "." "\\.ml$"))))))
+         (replace 'build
+           (lambda _
+             (invoke "make" "-j" (number->string (parallel-job-count))
+                     "world.opt")))
+         (replace 'check
+           (lambda _
+             (with-directory-excursion "testsuite"
+               (invoke "make" "all")))))))))
 
 ;; This package is a bootstrap package for ocaml-4.07. It builds from camlboot,
 ;; using the upstream sources for ocaml 4.07. It installs a bytecode ocamllex
@@ -267,6 +290,7 @@ functional, imperative and object-oriented styles of programming.")
 (define ocaml-4.07-boot
   (package
     (inherit ocaml-4.09)
+    (name "ocaml-boot")
     (version "4.07.1")
     (source (origin
               (method url-fetch)
@@ -277,6 +301,7 @@ functional, imperative and object-oriented styles of programming.")
               (sha256
                (base32
                 "1f07hgj5k45cylj1q3k5mk8yi02cwzx849b1fwnwia8xlcfqpr6z"))
+              (patches (search-patches "ocaml-multiple-definitions.patch"))
               (modules '((guix build utils)))
               (snippet
                `(begin
@@ -403,6 +428,7 @@ depend: $(STDLIB_MLIS) $(STDLIB_DEPS)"))
 (define-public ocaml-4.07
   (package
     (inherit ocaml-4.07-boot)
+    (name "ocaml")
     (arguments
       (substitute-keyword-arguments (package-arguments ocaml-4.09)
         ((#:phases phases)
@@ -434,7 +460,7 @@ depend: $(STDLIB_MLIS) $(STDLIB_DEPS)"))
        ("perl" ,perl)
        ("pkg-config" ,pkg-config)))))
 
-(define-public ocaml ocaml-4.11)
+(define-public ocaml ocaml-4.13)
 
 (define-public ocamlbuild
   (package
@@ -452,13 +478,11 @@ depend: $(STDLIB_MLIS) $(STDLIB_DEPS)"))
     (build-system ocaml-build-system)
     (arguments
      `(#:make-flags
-       (list (string-append "OCAMLBUILD_PREFIX=" (assoc-ref %outputs "out"))
-             (string-append "OCAMLBUILD_BINDIR=" (assoc-ref %outputs "out")
-                            "/bin")
-             (string-append "OCAMLBUILD_LIBDIR=" (assoc-ref %outputs "out")
-                            "/lib/ocaml/site-lib")
-             (string-append "OCAMLBUILD_MANDIR=" (assoc-ref %outputs "out")
-                            "/share/man"))
+       ,#~(list (string-append "OCAMLBUILD_PREFIX=" #$output)
+                (string-append "OCAMLBUILD_BINDIR=" #$output "/bin")
+                (string-append "OCAMLBUILD_LIBDIR=" #$output
+                               "/lib/ocaml/site-lib")
+                (string-append "OCAMLBUILD_MANDIR=" #$output "/share/man"))
        #:phases
        (modify-phases %standard-phases
          (delete 'configure))
@@ -527,7 +551,7 @@ archive(byte) = \"com.cma\"
 archive(native) = \"com.cmxa\"")))))
              #t)))))
     (native-inputs
-     `(("ocaml" ,ocaml)))
+     (list ocaml))
     (home-page "https://github.com/xavierleroy/camlidl")
     (synopsis "Stub code generator for OCaml/C interface")
     (description
@@ -538,21 +562,21 @@ code for interfacing Caml with C from an IDL description of the C functions.")
 (define-public ocaml-extlib
   (package
     (name "ocaml-extlib")
-    (version "1.7.7")
+    (version "1.7.8")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://ygrek.org/p/release/ocaml-extlib/"
                                   "extlib-" version ".tar.gz"))
               (sha256
                (base32
-                "1sxmzc1mx3kg62j8kbk0dxkx8mkf1rn70h542cjzrziflznap0s1"))))
+                "0npq4hq3zym8nmlyji7l5cqk6drx2rkcx73d60rxqh5g8dla8p4k"))))
     (build-system ocaml-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
-      `(("ocaml-cppo" ,ocaml-cppo)))
+      (list ocaml-cppo))
     (home-page "https://github.com/ygrek/ocaml-extlib")
     (synopsis "Complete and small extension for OCaml standard library")
     (description "This library adds new functions to OCaml standard library
@@ -574,17 +598,14 @@ for day to day programming.")
           (base32
             "0771lwljqwwn3cryl0plny5a5dyyrj4z6bw66ha5n8yfbpcy8clr"))))
     (build-system ocaml-build-system)
-    (propagated-inputs `(("ocaml-extlib" ,ocaml-extlib)))
+    (propagated-inputs (list ocaml-extlib))
     (native-inputs
-      `(("perl" ,perl)
-        ("ocamlbuild" ,ocamlbuild)
-        ("ocaml-ounit" ,ocaml-ounit)))
+      (list perl ocamlbuild ocaml-ounit))
     (arguments
      `(#:make-flags
-       (list
-         "all" "opt"
-         (string-append "BINDIR=" (assoc-ref %outputs "out")
-                        "/bin"))
+       ,#~(list
+           "all" "opt"
+           (string-append "BINDIR=" #$output "/bin"))
        #:phases
        (modify-phases %standard-phases
          (delete 'configure))))
@@ -610,7 +631,7 @@ Software distribution.")
                (base32
                 "1gsad5cj03256i36wdjqk5pg51pyd48rpjazf0gfaakrn8lk438g"))))
     (build-system dune-build-system)
-    (propagated-inputs `(("ocaml-cudf" ,ocaml-cudf)))
+    (propagated-inputs (list ocaml-cudf))
     (home-page "https://www.i3s.unice.fr/~cpjm/misc/")
     (synopsis "Upgrade path problem solver")
     (description "Mccs (Multi Criteria CUDF Solver) is a CUDF problem solver.
@@ -643,25 +664,13 @@ underlying solvers like Cplex, Gurobi, Lpsolver, Glpk, CbC, SCIP or WBO.")
     (build-system ocaml-build-system)
     (arguments
      `(#:configure-flags
-       (list (string-append "SHELL="
-                            (assoc-ref %build-inputs "bash")
-                            "/bin/sh"))
+       ,#~(list (string-append "SHELL="
+                               #+(file-append (canonical-package bash-minimal)
+                                              "/bin/sh")))
        #:make-flags
-       (list (string-append "LIBDIR="
-                            (assoc-ref %outputs "out")
-                            "/lib/ocaml/site-lib"))
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-test-script
-           (lambda _
-             (substitute* "applications/dose-tests.py"
-               (("warning\\(")
-                "from warnings import warn\nwarn(")))))))
+       ,#~(list (string-append "LIBDIR=" #$output "/lib/ocaml/site-lib"))))
     (propagated-inputs
-      `(("ocaml-graph" ,ocaml-graph)
-        ("ocaml-cudf" ,ocaml-cudf)
-        ("ocaml-extlib" ,ocaml-extlib)
-        ("ocaml-re" ,ocaml-re)))
+      (list ocaml-graph ocaml-cudf ocaml-extlib ocaml-re))
     (native-inputs
       `(("perl" ,perl)
         ("python" ,python-2) ; for a test script
@@ -701,13 +710,10 @@ repository-wide uninstallability checks.")
        (modify-phases %standard-phases
          (delete 'configure))
        #:build-flags
-       (list "build" "--lib-dir"
-             (string-append (assoc-ref %outputs "out") "/lib/ocaml/site-lib"))))
+       ,#~(list "build" "--lib-dir"
+                (string-append #$output "/lib/ocaml/site-lib"))))
     (native-inputs
-     `(("ocaml-findlib" ,ocaml-findlib)
-       ("ocamlbuild" ,ocamlbuild)
-       ("ocaml-topkg" ,ocaml-topkg)
-       ("opam" ,opam)))
+     (list ocaml-findlib ocamlbuild ocaml-topkg opam))
     (home-page "https://erratique.ch/software/down")
     (synopsis "OCaml toplevel (REPL) upgrade")
     (description "Down is an unintrusive user experience upgrade for the
@@ -761,8 +767,8 @@ let () = String.split_on_char ':' (Sys.getenv \"OCAMLPATH\")
     (build-system ocaml-build-system)
     (arguments
      `(#:tests? #f; No tests
-       #:make-flags (list (string-append "LIBDIR=" (assoc-ref %outputs "out")
-                                         "/lib/ocaml/site-lib"))
+       #:make-flags ,#~(list (string-append "LIBDIR=" #$output
+                                            "/lib/ocaml/site-lib"))
        #:phases
        (modify-phases %standard-phases
          (delete 'configure))))
@@ -776,7 +782,7 @@ the opam file format.")
 (define-public opam
   (package
     (name "opam")
-    (version "2.1.0")
+    (version "2.1.2")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -785,7 +791,7 @@ the opam file format.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "12l7l4pbzy71k1yc7ym5aczajszvc9bqkdnfg8xhqc8ch8j1h1lj"))))
+                "0mdr32mg63yaw89p44zx8b9dxp1167ckmlxkp8svd6fwgb3z49yx"))))
     (build-system dune-build-system)
     (arguments
      `(#:test-target "."
@@ -794,8 +800,7 @@ the opam file format.")
          (add-before 'build 'pre-build
            (lambda* (#:key inputs make-flags #:allow-other-keys)
              (let ((bash (assoc-ref inputs "bash"))
-                   (bwrap (string-append (assoc-ref inputs "bubblewrap")
-                                         "/bin/bwrap")))
+                   (bwrap (search-input-file inputs "/bin/bwrap")))
                (substitute* "src/core/opamSystem.ml"
                  (("\"/bin/sh\"")
                   (string-append "\"" bash "/bin/sh\""))
@@ -843,8 +848,9 @@ the opam file format.")
              ;; Ensure we can run the generated build.sh (no /bin/sh)
              (substitute* '("tests/reftests/legacy-local.test"
                             "tests/reftests/legacy-git.test")
-               (("#! ?/bin/sh") (string-append "#!" (assoc-ref inputs "bash")
-                                               "/bin/sh")))
+               (("#! ?/bin/sh")
+                (string-append "#!"
+                               (search-input-file inputs "/bin/sh"))))
              (substitute* "tests/reftests/testing-env"
                (("OPAMSTRICT=1")
                 (string-append "OPAMSTRICT=1\nLIBRARY_PATH="
@@ -879,16 +885,10 @@ the opam file format.")
          ("opam-repo-f372039d" ,(opam-repo "f372039db86a970ef3e662adbfe0d4f5cd980701"
                                            "0ld7fcry6ss6fmrpswvr6bikgx299w97h0gwrjjh7kd7rydsjdws")))))
     (inputs
-     `(("ocaml" ,ocaml)
-       ("ncurses" ,ncurses)
-       ("curl" ,curl)
-       ("bubblewrap" ,bubblewrap)))
+     (list ocaml ncurses curl bubblewrap))
     (propagated-inputs
-     `(("ocaml-cmdliner" ,ocaml-cmdliner)
-       ("ocaml-dose3" ,ocaml-dose3)
-       ("ocaml-mccs" ,ocaml-mccs)
-       ("ocaml-opam-file-format" ,ocaml-opam-file-format)
-       ("ocaml-re" ,ocaml-re)))
+     (list ocaml-cmdliner ocaml-dose3 ocaml-mccs ocaml-opam-file-format
+           ocaml-re))
     (home-page "http://opam.ocamlpro.com/")
     (synopsis "Package manager for OCaml")
     (description
@@ -902,19 +902,17 @@ Git-friendly development workflow.")
 (define-public camlp5
   (package
     (name "camlp5")
-    (version "7.13")
+    (version "8.00.02")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
              (url "https://github.com/camlp5/camlp5")
-             (commit (string-append "rel" (string-delete #\. version)))))
+             (commit (string-append "rel" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1d9spy3f5ahixm8nxxk086kpslzva669a5scn49am0s7vx4i71kp"))))
+        (base32 "03qm99h2380x0y69sppg10yz1mwx7smkscia7pa175wmilifx8vy"))))
     (build-system gnu-build-system)
-    (inputs
-     `(("ocaml" ,ocaml)))
     (arguments
      `(#:tests? #f  ; XXX TODO figure out how to run the tests
        #:phases
@@ -944,6 +942,10 @@ Git-friendly development workflow.")
              (install-file "etc/META" (string-append (assoc-ref outputs "out")
                                                      "/lib/ocaml/camlp5/"))
              #t)))))
+    (inputs
+     (list ocaml))
+    (native-inputs
+     (list perl))
     (home-page "https://camlp5.github.io/")
     (synopsis "Pre-processor Pretty Printer for OCaml")
     (description
@@ -966,9 +968,9 @@ concrete syntax of the language (Quotations, Syntax Extensions).")
                 "1jwydkb9ldb1sx815c364dxgr569f2rbbzgxbn2kanrybpdbm2gi"))))
     (build-system gnu-build-system)
     (inputs
-     `(("ocaml" ,ocaml)))
+     (list ocaml))
     (native-inputs
-     `(("ocamlbuild" ,ocamlbuild)))
+     (list ocamlbuild))
     (arguments
      `(#:tests? #f                      ; no test suite
        #:make-flags (list (string-append "PREFIX=" %output))
@@ -1060,7 +1062,7 @@ Emacs.")
 (define-public ocaml-menhir
   (package
     (name "ocaml-menhir")
-    (version "20210419")
+    (version "20211012")
     (source
      (origin
        (method git-fetch)
@@ -1069,12 +1071,13 @@ Emacs.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0jcbr7s3iwfr7xxfybs3h407g76yfp5yq5r9i0wg2ahvvbqh03ky"))))
+        (base32 "08kf5apbv15n2kcr3qhyr3rvsf2lg25ackr3x9kfgiiqc0p3sz40"))))
     (build-system dune-build-system)
     (inputs
-     `(("ocaml" ,ocaml)))
+     (list ocaml))
     (arguments
      `(#:tests? #f)) ; No check target
+    (properties `((ocaml4.07-variant . ,(delay (strip-ocaml4.07-variant ocaml-menhir)))))
     (home-page "http://gallium.inria.fr/~fpottier/menhir/")
     (synopsis "Parser generator")
     (description "Menhir is a parser generator.  It turns high-level grammar
@@ -1111,7 +1114,7 @@ Knuth’s LR(1) parser construction technique.")
 (define-public lablgtk
   (package
     (name "lablgtk")
-    (version "2.18.10")
+    (version "2.18.11")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1120,7 +1123,7 @@ Knuth’s LR(1) parser construction technique.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0w8cdfcv2wc19sd3qzj3qq77qc6rbnbynsz02gzbl15kgrvgrfxi"))))
+                "179ipx0c6bpxm4gz0syxgqy09dp5p4x9qsdil7s9jlx8ffg1mm0w"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("ocaml" ,ocaml)
@@ -1129,12 +1132,12 @@ Knuth’s LR(1) parser construction technique.")
     ;; FIXME: Add inputs gtkgl-2.0, libpanelapplet-2.0, gtkspell-2.0,
     ;; and gtk+-quartz-2.0 once available.
     (inputs
-     `(("gtk+" ,gtk+-2)
-       ("gtksourceview" ,gtksourceview-2)
-       ("libgnomecanvas" ,libgnomecanvas)
-       ("libgnomeui" ,libgnomeui)
-       ("libglade" ,libglade)
-       ("librsvg" ,librsvg)))
+     (list gtk+-2
+           gtksourceview-2
+           libgnomecanvas
+           libgnomeui
+           libglade
+           librsvg))
     (arguments
      `(#:tests? #f ; no check target
 
@@ -1203,7 +1206,8 @@ libpanel, librsvg and quartz.")
      `(("ocaml" ,ocaml-4.09)
        ;; For documentation
        ("ghostscript" ,ghostscript)
-       ("texlive" ,texlive-tiny)
+       ("texlive" ,(texlive-updmap.cfg
+                    (list texlive-fonts-ec texlive-dvips-l3backend)))
        ("hevea" ,hevea)
        ("lynx" ,lynx)
        ("which" ,which)))
@@ -1269,18 +1273,17 @@ to the other.")
 (define-public ocaml-findlib
   (package
     (name "ocaml-findlib")
-    (version "1.8.1")
+    (version "1.9.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://download.camlcity.org/download/"
                                   "findlib" "-" version ".tar.gz"))
               (sha256
                (base32
-                "00s3sfb02pnjmkax25pcnljcnhcggiliccfz69a72ic7gsjwz1cf"))))
+                "1qhgk25avmz4l4g47g8jvk0k1g9p9d5hbdrwpz2693a8ajyvhhib"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("m4" ,m4)
-       ("ocaml" ,ocaml)))
+     (list m4 ocaml))
     (arguments
      `(#:tests? #f  ; no test suite
        #:parallel-build? #f
@@ -1323,16 +1326,14 @@ compilers that can directly deal with packages.")
     (inherit ocaml-findlib)
     (name "ocaml4.07-findlib")
     (native-inputs
-     `(("m4" ,m4)
-       ("ocaml" ,ocaml-4.07)))))
+     (list m4 ocaml-4.07))))
 
 (define-public ocaml4.09-findlib
   (package
     (inherit ocaml-findlib)
     (name "ocaml4.09-findlib")
     (native-inputs
-     `(("m4" ,m4)
-       ("ocaml" ,ocaml-4.09)))))
+     (list m4 ocaml-4.09))))
 
 (define-public ocaml-ounit2
   (package
@@ -1349,8 +1350,7 @@ compilers that can directly deal with packages.")
                 "0gxjw1bhmjcjzri6x6psqrkbbyq678b69bqfl9i1zswp7cj2lryg"))))
     (build-system dune-build-system)
     (propagated-inputs
-     `(("lwt" ,ocaml-lwt)
-       ("ocaml-stdlib-shims" ,ocaml-stdlib-shims)))
+     (list ocaml-lwt ocaml-stdlib-shims))
     (home-page "https://github.com/gildor478/ounit")
     (synopsis "Unit testing framework for OCaml")
     (description "OUnit2 is a unit testing framework for OCaml.  It is similar
@@ -1360,22 +1360,17 @@ to JUnit and other XUnit testing frameworks.")
 ;; note that some tests may hang for no obvious reason.
 (define-public ocaml-ounit
   (package
+    (inherit ocaml-ounit2)
     (name "ocaml-ounit")
-    (version "2.0.8")
-    (source (origin
-              (method url-fetch)
-              (uri (ocaml-forge-uri "ounit" version 1749))
-              (sha256
-               (base32
-                "03ifp9hjcxg4m5j190iy373jcn4039d3vy10kmd8p4lfciwzwc1f"))))
-    (build-system ocaml-build-system)
-    (native-inputs
-     `(("libxml2" ,libxml2)           ; for xmllint
-       ("ocamlbuild" ,ocamlbuild)))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (delete 'check))))             ; tests are run during build
+         (replace 'install
+           (lambda _
+             (invoke "make" "install-ounit" ,(string-append "version="
+                                                            (package-version ocaml-ounit2))))))))
+    (propagated-inputs
+     (list ocaml-ounit2))
     (home-page "http://ounit.forge.ocamlcore.org")
     (synopsis "Unit testing framework for OCaml")
     (description "Unit testing framework for OCaml.  It is similar to JUnit and
@@ -1385,38 +1380,29 @@ other XUnit testing frameworks.")
 (define-public camlzip
   (package
     (name "camlzip")
-    (version "1.0.6")
+    (version "1.11")
     (source (origin
-              (method url-fetch)
-              (uri (ocaml-forge-uri name version 1616))
+              (method git-fetch)
+              (uri (git-reference
+                     (url "https://github.com/xavierleroy/camlzip")
+                     (commit (string-append
+                               "rel"
+                               (string-join (string-split version #\.) "")))))
+              (file-name (git-file-name name version))
               (sha256
                (base32
-                "0m6gyjw46w3qnhxfsyqyag42znl5lwargks7w7rfchr9jzwpff68"))))
+                "16jnn3czxnvyjngnz167x5kw097k7izdqvkix8qvgvhdmgvqm89b"))))
     (build-system ocaml-build-system)
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (delete 'configure)
-         (add-after 'install 'install-camlzip
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (dir (string-append out "/lib/ocaml/site-lib/camlzip")))
-               (mkdir-p dir)
-               (call-with-output-file (string-append dir "/META")
-                 (lambda (port)
-                   (format port "version=\"1.06\"\n")
-                   (format port "requires=\"unix\"\n")
-                   (format port "archive(byte)=\"zip.cma\"\n")
-                   (format port "archive(native)=\"zip.cmxa\"\n")
-                   (format port "archive(native,plugin)=\"zip.cmxs\"\n")
-                   (format port "directory=\"../zip\"\n")))))))
+         (delete 'configure))
        #:install-target "install-findlib"
        #:make-flags
-       (list "all" "allopt"
-             (string-append "INSTALLDIR=" (assoc-ref %outputs "out")
-                            "/lib/ocaml"))))
+       ,#~(list "all" "allopt"
+                (string-append "INSTALLDIR=" #$output "/lib/ocaml"))))
     (home-page "https://github.com/xavierleroy/camlzip")
     (synopsis "Provides easy access to compressed files")
     (description "Provides easy access to compressed files in ZIP, GZIP and
@@ -1463,9 +1449,9 @@ files in these formats.")
                 "1jslm1rv1j0ya818yh23wf3bb6hz7qqj9pn5fwl45y9mqyqa01s9"))))
     (build-system ocaml-build-system)
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (inputs
-     `(("gmp" ,gmp)))
+     (list gmp))
     (arguments
      `(#:tests? #f ; no test target
        #:phases
@@ -1490,41 +1476,28 @@ for speed and space economy.")
 (define-public ocaml-frontc
   (package
     (name "ocaml-frontc")
-    (version "3.4.2")
+    (version "4.1.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
                      (url "https://github.com/BinaryAnalysisPlatform/FrontC")
-                     (commit (string-append
-                               "V_" (string-join (string-split version #\.) "_")))))
+                     (commit (string-append "v" version))))
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0k7jk9hkglnkk27s62xl493jyqc017gyvwqb1lyc0ywbb001s102"))))
-    (build-system ocaml-build-system)
+                "1mi1vh4qgscnb470qwidccaqd068j1bqlz6pf6wddk21paliwnqb"))))
+    (build-system dune-build-system)
     (arguments
-     `(#:phases
+     `(#:test-target "test.t"
+       #:phases
        (modify-phases %standard-phases
-         (delete 'configure)
-         (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/frontc/META")
-                 (lambda _
-                   (display
-                    (string-append
-                     "description = \"Parser for the C language\"
-version = \"" ,version "\"
-requires = \"unix\"
-archive(byte) = \"frontc.cma\"
-archive(native) = \"frontc.cmxa\""))))
-               (symlink (string-append out "/lib/ocaml/frontc")
-                        (string-append out "/lib/ocaml/FrontC"))))))
-       #:make-flags (list (string-append "PREFIX="
-                                         (assoc-ref %outputs "out"))
-                          "OCAML_SITE=$(LIB_DIR)/ocaml/")))
-    (properties `((upstream-name . "FrontC")))
+         (add-after 'unpack 'make-writable
+           (lambda _
+             (for-each make-file-writable (find-files "." ".")))))))
+    (native-inputs
+     (list ocaml-menhir ocaml-odoc))
+    (properties `((upstream-name . "FrontC")
+                  (ocaml4.07-variant . ,(delay ocaml4.07-frontc))))
     (home-page "https://www.irit.fr/FrontC")
     (synopsis "C parser and lexer library")
     (description "FrontC is an OCAML library providing a C parser and lexer.
@@ -1533,19 +1506,59 @@ It provides support for ANSI C syntax, old-C K&R style syntax and the standard
 GNU CC attributes.  It provides also a C pretty printer as an example of use.")
     (license license:lgpl2.1)))
 
+(define-public ocaml4.07-frontc
+  (package-with-ocaml4.07
+    (package
+      (inherit ocaml-frontc)
+      (version "3.4.2")
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                       (url "https://github.com/mirage/ocaml-base64")
+                       (commit (string-append
+                                 "V_" (string-join (string-split version #\.) "_")))))
+                (file-name (git-file-name "ocaml-frontc" version))
+                (sha256
+                 (base32
+                  "0k7jk9hkglnkk27s62xl493jyqc017gyvwqb1lyc0ywbb001s102"))))
+      (build-system ocaml-build-system)
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (delete 'configure)
+           (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/frontc/META")
+                   (lambda _
+                     (display
+                      (string-append
+                       "description = \"Parser for the C language\"
+version = \"" ,version "\"
+requires = \"unix\"
+archive(byte) = \"frontc.cma\"
+archive(native) = \"frontc.cmxa\""))))
+                 (symlink (string-append out "/lib/ocaml/frontc")
+                          (string-append out "/lib/ocaml/FrontC"))))))
+         #:make-flags ,#~(list (string-append "PREFIX=" #$output)
+                               "OCAML_SITE=$(LIB_DIR)/ocaml/")))
+      (properties '()))))
+
 (define-public ocaml-qcheck
   (package
     (name "ocaml-qcheck")
-    (version "0.12")
+    (version "0.18")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
              (url "https://github.com/c-cube/qcheck")
-             (commit version)))
+             (commit (string-append "v" version))))
        (file-name (git-file-name name version))
+       (patches (search-patches "ocaml-qcheck-fix-test-whitespace.patch"))
        (sha256
-        (base32 "1llnfynhlndwyjig7wrayjnds2b3mggp5lw20dwxhn2i2lkkb22m"))))
+        (base32 "1s652hrj2sxqj30dfl300zjvvqk3r62a1bnzqw1hqyf6pi88qn8x"))))
     (build-system dune-build-system)
     (arguments
      `(#:test-target "."
@@ -1557,10 +1570,10 @@ GNU CC attributes.  It provides also a C pretty printer as an example of use.")
                (("Pervasives.compare") "compare"))
              #t)))))
     (propagated-inputs
-     `(("ocaml-alcotest" ,ocaml-alcotest)
-       ("ocaml-ounit" ,ocaml-ounit)))
+     (list ocaml-alcotest ocaml-ounit))
     (native-inputs
-     `(("ocamlbuild" ,ocamlbuild)))
+     (list ocamlbuild))
+    (properties `((ocaml4.07-variant . ,(delay ocaml4.07-qcheck))))
     (home-page "https://github.com/c-cube/qcheck")
     (synopsis "QuickCheck inspired property-based testing for OCaml")
     (description "QuickCheck inspired property-based testing for OCaml. This
@@ -1569,10 +1582,26 @@ generated instances of the type. It provides combinators for generating
 instances and printing them.")
     (license license:lgpl3+)))
 
+(define-public ocaml4.07-qcheck
+  (package-with-ocaml4.07
+    (package
+      (inherit ocaml-qcheck)
+      (version "0.12")
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/c-cube/qcheck")
+                      (commit version)))
+                (file-name (git-file-name "ocaml-qcheck" version))
+                (sha256
+                 (base32
+                  "1llnfynhlndwyjig7wrayjnds2b3mggp5lw20dwxhn2i2lkkb22m"))))
+      (properties '()))))
+
 (define-public ocaml-qtest
   (package
     (name "ocaml-qtest")
-    (version "2.10.1")
+    (version "2.11.2")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1581,7 +1610,7 @@ instances and printing them.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0gddzan4vzs0vklsxhirdjrvx3rp7hhh2yr20vi13nq8rwkn9w29"))))
+                "04ghjshh6104xyglm0db9kv90m62qla5f4bfrlndv6dsvgw3rdjl"))))
     (build-system dune-build-system)
     (arguments
      `(#:test-target "tests"))
@@ -1627,7 +1656,7 @@ full_split, cut, rcut, etc..")
 (define dune-bootstrap
   (package
     (name "dune")
-    (version "2.9.0")
+    (version "2.9.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1636,14 +1665,14 @@ full_split, cut, rcut, etc..")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "01np4jy0f3czkpzkl38k9b4lsh41qk52ldaqxl98mgigyzhx4w0b"))))
+                "1lnah40pm9ndixz5hbsh67chvdspqpy26g6byb767vqgj7dbivfh"))))
     (build-system ocaml-build-system)
     (arguments
      `(#:tests? #f; require odoc
-       #:make-flags (list "release"
-                          (string-append "PREFIX=" (assoc-ref %outputs "out"))
-                          (string-append "LIBDIR=" (assoc-ref %outputs "out")
-                                         "/lib/ocaml/site-lib"))
+       #:make-flags ,#~(list "release"
+                             (string-append "PREFIX=" #$output)
+                             (string-append "LIBDIR=" #$output
+                                            "/lib/ocaml/site-lib"))
        #:phases
        (modify-phases %standard-phases
          (replace 'configure
@@ -1672,7 +1701,7 @@ following a very simple s-expression syntax.")
        ; require ppx_expect
        #:tests? #f))
     (propagated-inputs
-     `(("ocaml-csexp" ,ocaml-csexp)))
+     (list ocaml-csexp))
     (properties `((ocaml4.09-variant . ,(delay ocaml4.09-dune-configurator))))
     (synopsis "Dune helper library for gathering system configuration")
     (description "Dune-configurator is a small library that helps writing
@@ -1703,7 +1732,7 @@ config.h files for instance.  Among other things, dune-configurator allows one t
   (package
     (inherit dune-bootstrap)
     (propagated-inputs
-     `(("dune-configurator" ,dune-configurator)))
+     (list dune-configurator))
     (properties `((ocaml4.07-variant . ,(delay ocaml4.07-dune))
                   (ocaml4.09-variant . ,(delay ocaml4.09-dune))))))
 
@@ -1711,7 +1740,7 @@ config.h files for instance.  Among other things, dune-configurator allows one t
   (package
     (inherit ocaml4.09-dune-bootstrap)
     (propagated-inputs
-     `(("dune-configurator" ,dune-configurator)))))
+     (list dune-configurator))))
 
 (define-public ocaml4.07-dune
   (package
@@ -1730,7 +1759,7 @@ config.h files for instance.  Among other things, dune-configurator allows one t
 (define-public ocaml-csexp
   (package
     (name "ocaml-csexp")
-    (version "1.3.2")
+    (version "1.5.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1739,7 +1768,7 @@ config.h files for instance.  Among other things, dune-configurator allows one t
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "190zppgvdjgghmrnx67ayzzk86qdjy3yn5fcrcw08wsh93384pl0"))))
+                "1v5y4x1a21193h8q536c0s0d8hv3hyyky4pgzm2dw9807v36s2x4"))))
     (build-system dune-build-system)
     (arguments
      `(#:tests? #f; FIXME: needs ppx_expect, but which version?
@@ -1751,7 +1780,7 @@ config.h files for instance.  Among other things, dune-configurator allows one t
              (for-each (lambda (file) (chmod file #o644)) (find-files "." ".*"))
              #t)))))
     (propagated-inputs
-     `(("ocaml-result" ,ocaml-result)))
+     (list ocaml-result))
     (properties `((ocaml4.09-variant . ,(delay ocaml4.09-csexp))))
     (home-page "https://github.com/ocaml-dune/csexp")
     (synopsis "Parsing and printing of S-expressions in Canonical form")
@@ -1784,7 +1813,7 @@ module of this library is parameterised by the type of S-expressions.")
 (define-public ocaml-migrate-parsetree
   (package
     (name "ocaml-migrate-parsetree")
-    (version "2.1.0")
+    (version "2.3.0")
     (home-page "https://github.com/ocaml-ppx/ocaml-migrate-parsetree")
     (source
      (origin
@@ -1795,85 +1824,84 @@ module of this library is parameterised by the type of S-expressions.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1cpgdqcs624nd1p271ddakgyibl0ia4f6dzivnz9qdwszsinwr89"))))
+         "1nqmhsc72xmgm865nn8q0hngklhvqav281hgnx1gf5ns49a0n3ig"))))
     (build-system dune-build-system)
     (arguments `(#:tests? #f))
     (propagated-inputs
-     `(("ocaml-ppx-derivers" ,ocaml-ppx-derivers)
-       ("ocamlbuild" ,ocamlbuild)
-       ("ocaml-result" ,ocaml-result)))
+     (list ocaml-ppx-derivers ocamlbuild ocaml-result))
     (properties `((upstream-name . "ocaml-migrate-parsetree")
-                  ;; OCaml 4.07 packages require version 1.*
-                  (ocaml4.07-variant . ,(delay (package-with-ocaml4.07 ocaml-migrate-parsetree-1)))))
+                  (ocaml4.07-variant . ,(delay ocaml4.07-migrate-parsetree))))
     (synopsis "OCaml parsetree converter")
     (description "This library converts between parsetrees of different OCaml
 versions.  For each version, there is a snapshot of the parsetree and conversion
 functions to the next and/or previous version.")
     (license license:lgpl2.1+)))
 
-(define-public ocaml-migrate-parsetree-1
-  (package
-    (inherit ocaml-migrate-parsetree)
-    (name "ocaml-migrate-parsetree-1")
-    (version "1.8.0")
-    (home-page "https://github.com/ocaml-ppx/ocaml-migrate-parsetree")
-    (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
-         "16x8sxc4ygxrr1868qpzfqyrvjf3hfxvjzmxmf6ibgglq7ixa2nq"))))
-    (properties '((upstream-name . "ocaml-migrate-parsetree")))))
+;; OCaml 4.07 packages require version 1.*
+(define-public ocaml4.07-migrate-parsetree
+  (package-with-ocaml4.07
+    (package
+      (inherit ocaml-migrate-parsetree)
+      (name "ocaml-migrate-parsetree")
+      (version "1.8.0")
+      (home-page "https://github.com/ocaml-ppx/ocaml-migrate-parsetree")
+      (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
+           "16x8sxc4ygxrr1868qpzfqyrvjf3hfxvjzmxmf6ibgglq7ixa2nq"))))
+      (properties '((upstream-name . "ocaml-migrate-parsetree"))))))
 
-(define-public ocaml-ppx-tools-versioned
-  (package
-    (name "ocaml-ppx-tools-versioned")
-    (version "5.4.0")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                     (url "https://github.com/ocaml-ppx/ppx_tools_versioned")
-                     (commit version)))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "07lnj4yzwvwyh5fhpp1dxrys4ddih15jhgqjn59pmgxinbnddi66"))))
-    (build-system dune-build-system)
-    (arguments
-     `(#:test-target "."
-       #:package "ppx_tools_versioned"))
-    (propagated-inputs
-     `(("ocaml-migrate-parsetree" ,ocaml-migrate-parsetree-1)))
-    (properties `((upstream-name . "ppx_tools_versioned")))
-    (home-page "https://github.com/let-def/ppx_tools_versioned")
-    (synopsis "Variant of ppx_tools")
-    (description "This package is a variant of ppx_tools based on
+(define-public ocaml4.07-ppx-tools-versioned
+  (package-with-ocaml4.07
+    (package
+      (name "ocaml-ppx-tools-versioned")
+      (version "5.4.0")
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                       (url "https://github.com/ocaml-ppx/ppx_tools_versioned")
+                       (commit version)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "07lnj4yzwvwyh5fhpp1dxrys4ddih15jhgqjn59pmgxinbnddi66"))))
+      (build-system dune-build-system)
+      (arguments
+       `(#:test-target "."
+         #:package "ppx_tools_versioned"))
+      (propagated-inputs
+       (list ocaml-migrate-parsetree))
+      (properties `((upstream-name . "ppx_tools_versioned")))
+      (home-page "https://github.com/let-def/ppx_tools_versioned")
+      (synopsis "Variant of ppx_tools")
+      (description "This package is a variant of ppx_tools based on
 ocaml-migrate-parsetree")
-    (license license:expat)))
+      (license license:expat))))
 
 (define-public ocaml-bitstring
   (package
     (name "ocaml-bitstring")
-    (version "3.1.0")
+    (version "4.1.0")
     (source (origin
-              (method url-fetch)
-              (uri (string-append "https://bitbucket.org/thanatonauts/bitstring/"
-                                  "get/v" version ".tar.gz"))
-              (file-name (string-append name "-" version ".tar.gz"))
+              (method git-fetch)
+              (uri (git-reference
+                     (url "https://github.com/xguerin/bitstring")
+                     (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
               (sha256
                (base32
-                "15jjk2pq1vx311gl49s5ag6x5y0654x35w75z07g7kr2q334hqps"))))
+                "0mghsl8b2zd2676mh1r9142hymhvzy9cw8kgkjmirxkn56wbf56b"))))
     (build-system dune-build-system)
     (native-inputs
-     `(("time" ,time)
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list time autoconf automake))
     (propagated-inputs
-     `(("ocaml-ppx-tools-versioned" ,ocaml-ppx-tools-versioned)))
+     (list ocaml-stdlib-shims))
     (arguments
      `(#:package "bitstring"
        #:tests? #f; Tests fail to build
@@ -1883,6 +1911,7 @@ ocaml-migrate-parsetree")
            (lambda _
              (invoke "dune" "upgrade")
              #t)))))
+    (properties `((ocaml4.07-variant . ,(delay ocaml4.07-bitstring))))
     (home-page "https://github.com/xguerin/bitstring")
     (synopsis "Bitstrings and bitstring matching for OCaml")
     (description "Adds Erlang-style bitstrings and matching over bitstrings as
@@ -1891,6 +1920,23 @@ and generate binary formats, files and protocols.  Bitstring handling is added
 as primitives to the language, making it exceptionally simple to use and very
 powerful.")
     (license license:isc)))
+
+(define-public ocaml4.07-bitstring
+  (package-with-ocaml4.07
+    (package
+      (inherit ocaml-bitstring)
+      (version "3.1.0")
+      (source (origin
+                (method url-fetch)
+                (uri (string-append "https://bitbucket.org/thanatonauts/bitstring/"
+                                    "get/v" version ".tar.gz"))
+                (file-name (string-append "ocaml-bitsring-" version ".tar.gz"))
+                (sha256
+                 (base32
+                  "15jjk2pq1vx311gl49s5ag6x5y0654x35w75z07g7kr2q334hqps"))))
+      (propagated-inputs
+       `(("ocaml-ppx-tools-versioned" ,ocaml4.07-ppx-tools-versioned)))
+      (properties '()))))
  
 (define-public ocaml-result
   (package
@@ -1930,18 +1976,17 @@ defined in this library.")
 (define-public ocaml-topkg
   (package
     (name "ocaml-topkg")
-    (version "1.0.0")
+    (version "1.0.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://erratique.ch/software/topkg/releases/"
                                   "topkg-" version ".tbz"))
               (sha256
                (base32
-                "1df61vw6v5bg2mys045682ggv058yqkqb67w7r2gz85crs04d5fw"))))
+                "1kzw5cxkizcvh4rgzwgpjlj9hfxfk6yr686bxx6wrbsfs8as371k"))))
     (build-system ocaml-build-system)
     (native-inputs
-     `(("opam" ,opam)
-       ("ocamlbuild" ,ocamlbuild)))
+     (list opam ocamlbuild))
     (propagated-inputs
      `(("result" ,ocaml-result)))
     (arguments
@@ -1971,8 +2016,7 @@ creation and publication procedures.")
                 "1xxycxhdhaq8p9vhwi93s2mlxjwgm44fcxybx5vghzgbankz9yhm"))))
     (build-system ocaml-build-system)
     (native-inputs
-     `(("opam" ,opam)
-       ("ocamlbuild" ,ocamlbuild)))
+     (list opam ocamlbuild))
     (propagated-inputs
      `(("topkg" ,ocaml-topkg)))
     (arguments
@@ -2006,12 +2050,9 @@ library.")
     (build-system dune-build-system)
     (properties `((ocaml4.07-variant . ,(delay ocaml4.07-sqlite3))))
     (propagated-inputs
-     `(("dune-configurator" ,dune-configurator)
-       ("ocaml-odoc" ,ocaml-odoc)))
+     (list dune-configurator ocaml-odoc))
     (native-inputs
-     `(("ocaml-ppx-inline-test" ,ocaml-ppx-inline-test)
-       ("pkg-config" ,pkg-config)
-       ("sqlite" ,sqlite)))
+     (list ocaml-ppx-inline-test pkg-config sqlite))
     (home-page "https://mmottl.github.io/sqlite3-ocaml")
     (synopsis "SQLite3 Bindings for OCaml")
     (description
@@ -2041,7 +2082,7 @@ coexistence with the old (version 2) SQLite and its OCaml wrapper
 (define-public ocaml-csv
   (package
     (name "ocaml-csv")
-    (version "2.3")
+    (version "2.4")
     (source
      (origin
        (method git-fetch)
@@ -2051,7 +2092,7 @@ coexistence with the old (version 2) SQLite and its OCaml wrapper
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "19k48517s8y1zb91a1312a0n94cbh5i5dixndcrqjmf87kkz61zx"))))
+         "0y2hlqlmqs7r4y5mfzc5qdv7gdp3wxbwpz458vf7fj4593vg94cf"))))
     (build-system dune-build-system)
     (arguments
      `(#:package "csv"
@@ -2070,18 +2111,17 @@ manipulate such data.")
 (define-public ocaml-mtime
   (package
     (name "ocaml-mtime")
-    (version "1.1.0")
+    (version "1.3.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://erratique.ch/software/mtime/releases/"
                                   "mtime-" version ".tbz"))
               (sha256
                (base32
-                "1qb4ljwirrc3g8brh97s76rjky2cpmy7zm87y7iqd6pxix52ydk3"))))
+                "0syilgk4nzscacsswnvgwqlf0n0lhs221jss8gc8z9igw2x4sgsq"))))
     (build-system ocaml-build-system)
     (native-inputs
-     `(("ocamlbuild" ,ocamlbuild)
-       ("opam" ,opam)))
+     (list ocamlbuild opam))
     (propagated-inputs
      `(("topkg" ,ocaml-topkg)))
     (arguments
@@ -2133,8 +2173,7 @@ spans without being subject to operating system calendar time adjustments.")
                  (mkdir-p (string-append
                            out "/lib/ocaml/site-lib/calendar"))))))))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)))
+       (list autoconf automake))
       (propagated-inputs
        `(("ocaml" ,ocaml)
          ("ocamlfind" ,ocaml-findlib)))
@@ -2148,23 +2187,23 @@ dates and times.")
 (define-public ocaml-cmdliner
   (package
     (name "ocaml-cmdliner")
-    (version "1.0.3")
+    (version "1.0.4")
     (source (origin
               (method url-fetch)
-              (uri (string-append "http://erratique.ch/software/cmdliner/releases/"
+              (uri (string-append "https://erratique.ch/software/cmdliner/releases/"
                                   "cmdliner-" version ".tbz"))
               (sha256
                (base32
-                "0g3w4hvc1cx9x2yp5aqn6m2rl8lf9x1dn754hfq8m1sc1102lxna"))))
+                "1h04q0zkasd0mw64ggh4y58lgzkhg6yhzy60lab8k8zq9ba96ajw"))))
     (build-system ocaml-build-system)
     (inputs
-     `(("ocaml-result" ,ocaml-result)))
+     (list ocaml-result))
     (native-inputs
-     `(("ocamlbuild" ,ocamlbuild)))
+     (list ocamlbuild))
     (arguments
      `(#:tests? #f
-       #:make-flags (list (string-append "LIBDIR=" (assoc-ref %outputs "out")
-                                         "/lib/ocaml/site-lib/cmdliner"))
+       #:make-flags ,#~(list (string-append "LIBDIR=" #$output
+                                            "/lib/ocaml/site-lib/cmdliner"))
        #:phases
        (modify-phases %standard-phases
          (delete 'configure)
@@ -2187,14 +2226,14 @@ most of the POSIX and GNU conventions.")
 (define-public ocaml-fmt
   (package
     (name "ocaml-fmt")
-    (version "0.8.9")
+    (version "0.9.0")
     (source
       (origin
         (method url-fetch)
         (uri (string-append "http://erratique.ch/software/fmt/releases/fmt-"
                             version ".tbz"))
         (sha256 (base32
-                  "0gkkkj4x678vxdda4xaw2dd44qjacavsvn5nx8gydfwah6pjbkxk"))))
+                  "0q8j2in2473xh7k4hfgnppv9qy77f2ih89yp6yhpbp92ba021yzi"))))
     (build-system ocaml-build-system)
     (native-inputs
      `(("ocamlbuild" ,ocamlbuild)
@@ -2210,12 +2249,27 @@ most of the POSIX and GNU conventions.")
                  #:phases
                  (modify-phases %standard-phases
                    (delete 'configure))))
+    (properties `((ocaml4.07-variant . ,(delay ocaml4.07-fmt))))
     (home-page "https://erratique.ch/software/fmt")
     (synopsis "OCaml Format pretty-printer combinators")
     (description "Fmt exposes combinators to devise Format pretty-printing
 functions.")
     (license license:isc)))
 
+(define-public ocaml4.07-fmt
+  (package-with-ocaml4.07
+    (package
+      (inherit ocaml-fmt)
+      (version "0.8.9")
+      (source (origin
+                (method url-fetch)
+                (uri (string-append "http://erratique.ch/software/fmt/releases/fmt-"
+                                    version ".tbz"))
+                (sha256
+                 (base32
+                  "0gkkkj4x678vxdda4xaw2dd44qjacavsvn5nx8gydfwah6pjbkxk"))))
+      (properties '()))))
+
 (define-public ocaml-astring
   (package
     (name "ocaml-astring")
@@ -2252,28 +2306,31 @@ immutability.")
 (define-public ocaml-alcotest
   (package
     (name "ocaml-alcotest")
-    (version "1.0.0")
+    (version "1.5.0")
     (source (origin
-              (method url-fetch)
-              (uri (string-append "https://github.com/mirage/alcotest/releases/"
-                                  "download/" version "/alcotest-" version ".tbz"))
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/mirage/alcotest")
+                    (commit version)))
+              (file-name (git-file-name name version))
               (sha256
-                (base32
-                  "1a43ilhwnj58pq3bi78ni46l9wh6klmmgfc93i94mvyx48bzzayx"))))
+               (base32
+                "1lgadc7p56677fi5gwl7r9bml4z87rzh50khhqaij7bwp37zrmpi"))))
     (build-system dune-build-system)
     (arguments
      `(#:package "alcotest"
        #:test-target "."))
     (native-inputs
-     `(("ocamlbuild" ,ocamlbuild)))
+     (list ocamlbuild))
     (propagated-inputs
-     `(("ocaml-astring" ,ocaml-astring)
-       ("ocaml-cmdliner" ,ocaml-cmdliner)
-       ("ocaml-fmt" ,ocaml-fmt)
-       ("ocaml-re" ,ocaml-re)
-       ("ocaml-stdlib-shims" ,ocaml-stdlib-shims)
-       ("ocaml-uuidm" ,ocaml-uuidm)
-       ("ocaml-uutf" ,ocaml-uutf)))
+     (list ocaml-astring
+           ocaml-cmdliner
+           ocaml-fmt
+           ocaml-re
+           ocaml-stdlib-shims
+           ocaml-uuidm
+           ocaml-uutf))
+    (properties `((ocaml4.07-variant . ,(delay ocaml4.07-alcotest))))
     (home-page "https://github.com/mirage/alcotest")
     (synopsis "Lightweight OCaml test framework")
     (description "Alcotest exposes simple interface to perform unit tests.  It
@@ -2284,10 +2341,26 @@ displayed at the end of the run (with the full logs ready to inspect), with a
 simple (yet expressive) query language to select the tests to run.")
     (license license:isc)))
 
-(define-public ocaml4.07-ppx-tools
+(define-public ocaml4.07-alcotest
+  (package-with-ocaml4.07
+    (package
+      (inherit ocaml-alcotest)
+      (version "1.0.1")
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/mirage/alcotest")
+                      (commit version)))
+                (file-name (git-file-name "ocaml-alcotest" version))
+                (sha256
+                 (base32
+                  "1frwi185z4aadmaf0vp8xk5227nyg7nmh28ijj5l7ncjr5slvhz8"))))
+      (properties '()))))
+
+(define-public ocaml-ppx-tools
   (package
-    (name "ocaml4.07-ppx-tools")
-    (version "5.1+4.06.0")
+    (name "ocaml-ppx-tools")
+    (version "6.4")
     (source
      (origin
        (method git-fetch)
@@ -2295,18 +2368,21 @@ simple (yet expressive) query language to select the tests to run.")
              (url "https://github.com/alainfrisch/ppx_tools")
              (commit version)))
        (file-name (git-file-name name version))
-       (sha256 (base32
-                "1ww4cspdpgjjsgiv71s0im5yjkr3544x96wsq1vpdacq7dr7zwiw"))))
-    (build-system ocaml-build-system)
+       (sha256
+        (base32
+         "15v7yfv6gyp8lzlgwi9garz10wpg34dk4072jdv19n6v20zfg7n1"))))
+    (build-system dune-build-system)
     (arguments
-     `(#:phases (modify-phases %standard-phases (delete 'configure))
-       #:tests? #f
-       #:ocaml ,ocaml-4.07
-       #:findlib ,ocaml4.07-findlib))
+     ;; No tests
+     `(#:tests? #f))
+    (native-inputs
+     (list ocaml-cppo))
     (properties `((upstream-name . "ppx_tools")))
     (home-page "https://github.com/alainfrisch/ppx_tools")
     (synopsis "Tools for authors of ppx rewriters and other syntactic tools")
-    (description "Tools for authors of ppx rewriters and other syntactic tools.")
+    (description
+     "Ppx_tools provides tools for authors of ppx rewriters and other
+syntactic tools.")
     (license license:expat)))
 
 (define-public ocaml-react
@@ -2322,9 +2398,7 @@ simple (yet expressive) query language to select the tests to run.")
                   "1aj8w79gdd9xnrbz7s5p8glcb4pmimi8jp9f439dqnf6ih3mqb3v"))))
     (build-system ocaml-build-system)
     (native-inputs
-     `(("ocamlbuild" ,ocamlbuild)
-       ("opam" ,opam)
-       ("ocaml-topkg" ,ocaml-topkg)))
+     (list ocamlbuild opam ocaml-topkg))
     (arguments
      `(#:tests? #f
        #:build-flags (list "build")
@@ -2342,24 +2416,22 @@ lets the client choose the concrete timeline.")
 (define-public ocaml-ssl
   (package
     (name "ocaml-ssl")
-    (version "0.5.9")
+    (version "0.5.10")
     (source
       (origin
         (method git-fetch)
         (uri (git-reference
               (url "https://github.com/savonet/ocaml-ssl")
-              (commit version)))
+              (commit (string-append "v" version))))
         (file-name (git-file-name name version))
         (sha256 (base32
-                  "04h02rvzrwp886n5hsx84rnc9b150iggy38g5v1x1rwz3pkdnmf0"))))
+                  "1rszqiqayh67xlwd5411k8vib47x9kapdr037z1majd2c14z3kcb"))))
     (build-system dune-build-system)
     (arguments
      `(#:test-target "."))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("which" ,which)))
-    (propagated-inputs `(("openssl" ,openssl)))
+     (list autoconf automake which))
+    (propagated-inputs (list openssl))
     (home-page "https://github.com/savonet/ocaml-ssl/")
     (synopsis "OCaml bindings for OpenSSL")
     (description
@@ -2391,7 +2463,7 @@ for mapping files in memory.  This function is the same as the
 (define-public ocaml-lwt
   (package
     (name "ocaml-lwt")
-    (version "5.4.0")
+    (version "5.4.2")
     (source
       (origin
         (method git-fetch)
@@ -2400,22 +2472,16 @@ for mapping files in memory.  This function is the same as the
                (commit version)))
         (file-name (git-file-name name version))
         (sha256 (base32
-                 "1ay1zgadnw19r9hl2awfjr22n37l7rzxd9v73pjbahavwm2ay65d"))))
+                 "1gkld5ms63lxkaa41jfg8y34qm5lb3ls6mkw03s760zln8i1k3gy"))))
     (build-system dune-build-system)
     (arguments
      `(#:package "lwt"))
     (native-inputs
-     `(("ocaml-bisect-ppx" ,ocaml-bisect-ppx)
-       ("ocaml-cppo" ,ocaml-cppo)
-       ("pkg-config" ,pkg-config)))
+     (list ocaml-cppo pkg-config))
     (inputs
-     `(("glib" ,glib)))
+     (list glib))
     (propagated-inputs
-     `(("ocaml-mmap" ,ocaml-mmap)
-       ("ocaml-ocplib-endian" ,ocaml-ocplib-endian)
-       ("ocaml-result" ,ocaml-result)
-       ("ocaml-seq" ,ocaml-seq)
-       ("libev" ,libev)))
+     (list ocaml-mmap ocaml-ocplib-endian ocaml-result ocaml-seq libev))
     (home-page "https://github.com/ocsigen/lwt")
     (synopsis "Cooperative threads and I/O in monadic style")
     (description "Lwt provides typed, composable cooperative threads.  These
@@ -2428,23 +2494,22 @@ locks or other synchronization primitives.")
   (package
     (inherit ocaml-lwt)
     (name "ocaml-lwt-react")
-    (version "1.1.3")
+    (version "1.1.4")
     (source (origin
               (method git-fetch)
               (uri (git-reference
                      (url "https://github.com/ocsigen/lwt")
                      ;; Version from opam
-                     (commit "4.3.0")))
+                     (commit "5.4.0")))
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0f7036srqz7zmnz0n164734smgkrqz78r1i35cg30x31kkr3pnn4"))))
+                "1ay1zgadnw19r9hl2awfjr22n37l7rzxd9v73pjbahavwm2ay65d"))))
     (arguments
      `(#:package "lwt_react"))
     (properties `((upstream-name . "lwt_react")))
     (propagated-inputs
-     `(("ocaml-lwt" ,ocaml-lwt)
-       ("ocaml-react" ,ocaml-react)))))
+     (list ocaml-lwt ocaml-react))))
 
 (define-public ocaml-lwt-log
   (package
@@ -2490,8 +2555,7 @@ ocaml lwt.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
-     `(("ocamlbuild" ,ocamlbuild)
-       ("opam" ,opam)))
+     (list ocamlbuild opam))
     (propagated-inputs
      `(("fmt" ,ocaml-fmt)
        ("lwt" ,ocaml-lwt)
@@ -2509,14 +2573,14 @@ message report is decoupled from logging and is handled by a reporter.")
 (define-public ocaml-fpath
   (package
     (name "ocaml-fpath")
-    (version "0.7.2")
+    (version "0.7.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://erratique.ch/software/fpath/releases/"
                                   "fpath-" version ".tbz"))
               (sha256
                 (base32
-                  "1hr05d8bpqmqcfdavn4rjk9rxr7v2zl84866f5knjifrm60sxqic"))))
+                  "03z7mj0sqdz465rc4drj1gr88l9q3nfs374yssvdjdyhjbqqzc0j"))))
     (build-system ocaml-build-system)
     (arguments
      `(#:tests? #f
@@ -2525,8 +2589,7 @@ message report is decoupled from logging and is handled by a reporter.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
-     `(("ocamlbuild" ,ocamlbuild)
-       ("opam" ,opam)))
+     (list ocamlbuild opam))
     (propagated-inputs
      `(("topkg" ,ocaml-topkg)
        ("astring" ,ocaml-astring)))
@@ -2540,14 +2603,14 @@ file system and is independent from any system library.")
 (define-public ocaml-bos
   (package
     (name "ocaml-bos")
-    (version "0.2.0")
+    (version "0.2.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://erratique.ch/software/bos/releases/"
                                   "bos-" version ".tbz"))
               (sha256
                 (base32
-                  "1s10iqx8rgnxr5n93lf4blwirjf8nlm272yg5sipr7lsr35v49wc"))))
+                  "0dwg7lpaq30rvwc5z1gij36fn9xavvpah1bj8ph9gmhhddw2xmnq"))))
     (build-system ocaml-build-system)
     (arguments
      `(#:tests? #f
@@ -2556,8 +2619,7 @@ file system and is independent from any system library.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
-     `(("ocamlbuild" ,ocamlbuild)
-       ("opam" ,opam)))
+     (list ocamlbuild opam))
     (propagated-inputs
      `(("topkg" ,ocaml-topkg)
        ("astring" ,ocaml-astring)
@@ -2592,9 +2654,7 @@ run command line programs.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
-     `(("ocamlbuild" ,ocamlbuild)
-       ("ocaml-topkg" ,ocaml-topkg)
-       ("opam" ,opam)))
+     (list ocamlbuild ocaml-topkg opam))
     (home-page "https://erratique.ch/software/xmlm")
     (synopsis "Streaming XML codec for OCaml")
     (description "Xmlm is a streaming codec to decode and encode the XML data
@@ -2620,10 +2680,9 @@ representation of the data.")
      `(#:package "gen"
        #:test-target "."))
     (propagated-inputs
-     `(("ocaml-odoc" ,ocaml-odoc)))
+     (list ocaml-odoc))
     (native-inputs
-     `(("ocaml-qtest" ,ocaml-qtest)
-       ("ocaml-qcheck" ,ocaml-qcheck)))
+     (list ocaml-qtest ocaml-qcheck))
     (home-page "https://github.com/c-cube/gen/")
     (synopsis "Iterators for OCaml, both restartable and consumable")
     (description "Gen implements iterators of OCaml, that are both restartable
@@ -2633,7 +2692,7 @@ and consumable.")
 (define-public ocaml-sedlex
   (package
     (name "ocaml-sedlex")
-    (version "2.3")
+    (version "2.4")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -2642,7 +2701,7 @@ and consumable.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0iw3phlaqr27jdf857hmj5v5hdl0vngbb2h37p2ll18sw991fxar"))))
+                "13g8az4zqg6hrnxmy3qrasslppzlag13dd1dsr8vlpg2vpfmfv6i"))))
     (build-system dune-build-system)
     (arguments
      `(#:tests? #f                      ; no tests
@@ -2666,13 +2725,8 @@ and consumable.")
            (lambda _
              (for-each (lambda (file) (chmod file #o644)) (find-files "." ".*"))
              #t)))))
-    (native-inputs
-     `(("ocamlbuild" ,ocamlbuild)))
     (propagated-inputs
-     `(("ocaml-gen" ,ocaml-gen)
-       ("ocaml-ppxlib" ,ocaml-ppxlib)
-       ("ocaml-ppx-tools-versioned" ,ocaml-ppx-tools-versioned)
-       ("ocaml-uchar" ,ocaml-uchar)))
+     (list ocaml-gen ocaml-ppxlib ocaml-uchar))
     ;; These three files are needed by src/generator/data/dune, but would be
     ;; downloaded using curl at build time.
     (inputs
@@ -2718,6 +2772,9 @@ and consumable.")
                (sha256
                 (base32
                  "05f6qa8x3vhpdz1fcnpqk37fpnyyq13icqsk2gww5idjnh6kng26"))))
+     (propagated-inputs
+      `(("ocaml-ppx-tools-versioned" ,ocaml4.07-ppx-tools-versioned)
+        ,@(package-propagated-inputs ocaml-sedlex)))
      (properties '()))))
 
 (define-public ocaml-uchar
@@ -2739,8 +2796,7 @@ and consumable.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
-     `(("ocamlbuild" ,ocamlbuild)
-       ("opam" ,opam)))
+     (list ocamlbuild opam))
     (home-page "https://github.com/ocaml/uchar")
     (synopsis "Compatibility library for OCaml's Uchar module")
     (description "The uchar package provides a compatibility library for the
@@ -2786,14 +2842,15 @@ string values and to directly encode characters in OCaml Buffer.t values.")
 (define-public ocaml-uunf
   (package
     (name "ocaml-uunf")
-    (version "13.0.0")
+    (version "14.0.0")
     (source
      (origin
        (method url-fetch)
-       (uri "https://erratique.ch/software/uunf/releases/uunf-13.0.0.tbz")
+       (uri (string-append "https://erratique.ch/software/uunf/releases/uunf-"
+                           version".tbz"))
        (sha256
         (base32
-         "1qci04nkp24kdls1z4s8kz5dzgky4nwd5r8345nwdrgwmxhw7ksm"))))
+         "17wv0nm3vvwcbzb1b09akw8jblmigyhbfmh1sy9lkb5756ni94a2"))))
     (build-system ocaml-build-system)
     (arguments
      `(#:build-flags (list "build" "--tests" "true")
@@ -2809,16 +2866,17 @@ string values and to directly encode characters in OCaml Buffer.t values.")
      `(("ocamlbuild" ,ocamlbuild)
        ("opam" ,opam)
        ("topkg" ,ocaml-topkg)
-       ;; Test data is otherwise downloaded wit curl
+       ;; Test data is otherwise downloaded with curl
        ("NormalizationTest.txt"
         ,(origin
            (method url-fetch)
            (uri (string-append "https://www.unicode.org/Public/"
                                version
                                "/ucd/NormalizationTest.txt"))
+           (file-name (string-append "NormalizationTest-" version ".txt"))
            (sha256
-              (base32 "07g0ya4f6zfzvpp24ccxkb2yq568kh83gls85rjl950nv5fya3nn"))))))
-    (propagated-inputs `(("ocaml-uutf" ,ocaml-uutf)))
+              (base32 "0c93pqdkksf7b7zw8y2w0h9i5kkrsdjmh2cr5clrrhp6mg10rcvw"))))))
+    (propagated-inputs (list ocaml-uutf))
     (home-page "https://erratique.ch/software/uunf")
     (synopsis "Unicode text normalization for OCaml")
     (description
@@ -2878,7 +2936,7 @@ without a complete in-memory representation of the data.")
     (arguments
      `(#:test-target "tests"))
     (propagated-inputs
-     `(("ocaml-cmdliner" ,ocaml-cmdliner)))
+     (list ocaml-cmdliner))
     (home-page "https://www.typerex.org/ocp-indent.html")
     (synopsis "Tool to indent OCaml programs")
     (description
@@ -2900,7 +2958,7 @@ This package includes:
 (define-public ocaml-ocp-index
   (package
     (name "ocaml-ocp-index")
-    (version "1.2.1")
+    (version "1.3.2")
     (source
       (origin
         (method git-fetch)
@@ -2910,16 +2968,14 @@ This package includes:
         (file-name (git-file-name name version))
         (sha256
          (base32
-          "08r7mxdnxmhff37fw4hmrpjgckgi5kaiiiirwp4rmdl594z0h9c8"))))
+          "0y7fk8s477f40vvbsp4ikxv1v51y6bzj416bh1sc3f17rbnczpkk"))))
     (build-system dune-build-system)
     (arguments
      `(#:package "ocp-index"))
     (propagated-inputs
-     `(("ocaml-ocp-indent" ,ocaml-ocp-indent)
-       ("ocaml-re" ,ocaml-re)
-       ("ocaml-cmdliner" ,ocaml-cmdliner)))
+     (list ocaml-ocp-indent ocaml-re ocaml-cmdliner))
     (native-inputs
-     `(("ocaml-cppo" ,ocaml-cppo)))
+     (list ocaml-cppo))
     (home-page "https://www.typerex.org/ocp-index.html")
     (synopsis "Lightweight completion and documentation browsing for OCaml libraries")
     (description "This package includes only the @code{ocp-index} library
@@ -2950,8 +3006,8 @@ and command-line tool.")
              (substitute* "configure"
                (("-/bin/sh") (string-append "-" (which "bash")))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
-    (inputs `(("curl" ,curl)))
+     (list pkg-config))
+    (inputs (list curl))
     (home-page "http://ocurl.forge.ocamlcore.org/")
     (synopsis "OCaml bindings for libcurl")
     (description "Client-side URL transfer library, supporting HTTP and a
@@ -2961,7 +3017,7 @@ multitude of other network protocols (FTP/SMTP/RTSP/etc).")
 (define-public ocaml-base64
   (package
     (name "ocaml-base64")
-    (version "3.4.0")
+    (version "3.5.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -2970,23 +3026,11 @@ multitude of other network protocols (FTP/SMTP/RTSP/etc).")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0aa1m1sr8p1hgc10p96mij7p22r3qcysvzy6fz2jqamfgswchgqc"))))
+                "068hwdbpl7vx9jjpxdc6a10zqd8xa55j3xx7ga6fnwrlfsbs2pjj"))))
     (build-system dune-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-before 'build 'fix-dune
-           (lambda _
-             ;; This package expects dune 2, which unbundled its configurator
-             ;; module.  We still use dune 1, so we need to let it know we need
-             ;; its internal module.
-             (substitute* "config/dune"
-               (("dune-configurator") "dune.configurator"))
-             #t)))))
     (native-inputs
-     `(("ocaml-alcotest" ,ocaml-alcotest)
-       ("ocaml-bos" ,ocaml-bos)
-       ("ocaml-rresult" ,ocaml-rresult)))
+     (list ocaml-alcotest ocaml-bos ocaml-rresult))
+    (properties `((ocaml4.07-variant . ,(delay ocaml4.07-base64))))
     (home-page "https://github.com/mirage/ocaml-base64")
     (synopsis "Base64 encoding for OCaml")
     (description "Base64 is a group of similar binary-to-text encoding schemes
@@ -2994,6 +3038,25 @@ that represent binary data in an ASCII string format by translating it into a
 radix-64 representation.  It is specified in RFC 4648.")
     (license license:isc)))
 
+(define-public ocaml4.07-base64
+  (package-with-ocaml4.07
+    (package
+      (inherit ocaml-base64)
+      (version "3.2.0")
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                       (url "https://github.com/mirage/ocaml-base64")
+                       (commit (string-append "v" version))))
+                (file-name (git-file-name "ocaml-base64" version))
+                (sha256
+                 (base32
+                  "1ilw3zj0w6cq7i4pvr8m2kv5l5f2y9aldmv72drlwwns013b1gwy"))))
+      (arguments
+       ;; Tests are likely incompatible with our recent alcotest
+       `(#:tests? #f))
+      (properties '()))))
+
 (define-public ocamlify
   (package
     (name "ocamlify")
@@ -3052,7 +3115,7 @@ OCaml code.")
     (build-system ocaml-build-system)
     (arguments
      `(#:make-flags
-       (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
+       ,#~(list (string-append "PREFIX=" #$output))
        #:tests? #f ; no test target
        #:phases
        (modify-phases %standard-phases
@@ -3060,7 +3123,7 @@ OCaml code.")
                      (lambda* (#:key outputs #:allow-other-keys)
                        (substitute* "mk/osconfig_unix.mk"
                                     (("CC = cc") "CC = gcc")))))))
-    (native-inputs `(("hevea" ,hevea)))
+    (native-inputs (list hevea))
     (home-page "http://projects.camlcity.org/projects/omake.html")
     (synopsis "Build system designed for scalability and portability")
     (description "Similar to make utilities you may have used, but it features
@@ -3081,53 +3144,59 @@ many additional enhancements, including:
                    license:gpl2)))) ; OMake itself, with ocaml linking exception
                                     ; see LICENSE.OMake
 
+(define-public ocaml-benchmark
+  (package
+    (name "ocaml-benchmark")
+    (version "1.6")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/Chris00/ocaml-benchmark")
+               (commit version)))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "0d0vdfjgjzf1y6wkd714d8b0piv1z9qav5ahsapynqzk4b4ahhnp"))))
+    (build-system dune-build-system)
+    (arguments `(#:test-target "tests"))
+    (home-page "https://github.com/Chris00/ocaml-benchmark")
+    (synopsis "Benchmark running times of code")
+    (description
+      "This module provides a set of tools to measure the running times of
+your functions and to easily compare the results.  A statistical test
+is used to determine whether the results truly differ.")
+    (license license:lgpl3+)))
+
 (define-public ocaml-batteries
   (package
     (name "ocaml-batteries")
-    (version "2.10.0")
+    (version "3.4.0")
     (source (origin
-              (method url-fetch)
-              (uri (string-append "https://github.com/ocaml-batteries-team/"
-                                  "batteries-included/releases/download/v"
-                                  version "/batteries-" version ".tar.gz"))
+              (method git-fetch)
+              (uri (git-reference
+                     (url "https://github.com/ocaml-batteries-team/batteries-included")
+                     (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
               (sha256
                (base32
-                "08ghw87d56h1a6y1nnh3x2wy9xj25jqfk5sp6ma9nsyd37babb0h"))))
+                "1cd7475n1mxhq482aidmhh27mq5p2vmb8d9fkb1mlza9pz5z66yq"))))
     (build-system ocaml-build-system)
+    (propagated-inputs (list ocaml-num))
     (native-inputs
-     `(("ocamlbuild" ,ocamlbuild)
-       ("qtest" ,ocaml-qtest)))
-    (propagated-inputs
-     `(("ocaml-num" ,ocaml-num)))
+     (list ocamlbuild ocaml-benchmark ocaml-qcheck ocaml-qtest))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (delete 'check) ; tests are run by the build phase
+         (add-after 'unpack 'make-writable
+           (lambda _
+             (for-each make-file-writable (find-files "." "."))))
          (add-before 'build 'fix-nondeterminism
            (lambda _
              (substitute* "setup.ml"
                (("Sys.readdir dirname")
                 "let a = Sys.readdir dirname in Array.sort String.compare a; a"))
-             #t))
-         (replace 'build
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let ((files
-                     (map (lambda (str)
-                            (substring str 0 (- (string-length str) 1)))
-                          (append
-                            (find-files "src" ".*.mliv")
-                            (find-files "src" ".*.mlv")
-                            (find-files "src" ".*.mlp")))))
-               (apply invoke "ocamlbuild" "-no-links" "-use-ocamlfind" "-I" "num"
-                      "-lflag" "-dllpath-all" files)
-               (for-each (lambda (file)
-                           (copy-file (string-append "_build/" file) file))
-                         files))
-             (invoke "ocamlbuild" "-no-links" "-use-ocamlfind" "-I" "num"
-                     "-lflag" "-dllpath-all" "build/mkconf.byte")
-             (copy-file "_build/build/mkconf.byte" "build/mkconf.byte")
-             (invoke "make" "all")
              #t)))))
+    (properties `((ocaml4.07-variant . ,(delay ocaml4.07-batteries))))
     (home-page "http://batteries.forge.ocamlcore.org/")
     (synopsis "Development platform for the OCaml programming language")
     (description "Define a standard set of libraries which may be expected on
@@ -3135,6 +3204,54 @@ every compliant installation of OCaml and organize these libraries into a
 hierarchy of modules.")
     (license license:lgpl2.1+)))
 
+(define-public ocaml4.07-batteries
+  (package-with-ocaml4.07
+    (package
+      (inherit ocaml-batteries)
+      (version "2.10.0")
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                       (url "https://github.com/ocaml-batteries-team/batteries-included")
+                       (commit (string-append "v" version))))
+                (file-name (git-file-name "ocaml-batteries" version))
+                (sha256
+                 (base32
+                  "02fxa1nkp7rpiwfp04n0sagdp9lad4dh9bvljp95xfshm1cx7y4q"))))
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (delete 'check) ; tests are run by the build phase
+           (add-before 'build 'fix-nondeterminism
+             (lambda _
+               (substitute* "setup.ml"
+                 (("Sys.readdir dirname")
+                  "let a = Sys.readdir dirname in Array.sort String.compare a; a"))
+               #t))
+           (replace 'build
+             (lambda* (#:key inputs outputs #:allow-other-keys)
+               (let ((files
+                       (map (lambda (str)
+                              (substring str 0 (- (string-length str) 1)))
+                            (append
+                              (find-files "src" ".*.mliv")
+                              (find-files "src" ".*.mlv")
+                              (find-files "src" ".*.mlp")))))
+                 (apply invoke "ocamlbuild" "-no-links" "-use-ocamlfind" "-I" "num"
+                        "-lflag" "-dllpath-all" files)
+                 (for-each (lambda (file)
+                             (copy-file (string-append "_build/" file) file))
+                           files))
+               (invoke "ocamlbuild" "-no-links" "-use-ocamlfind" "-I" "num"
+                       "-lflag" "-dllpath-all" "build/mkconf.byte")
+               (copy-file "_build/build/mkconf.byte" "build/mkconf.byte")
+               (invoke "make" "all")
+               #t)))))
+      (native-inputs
+       `(("ocamlbuild" ,ocamlbuild)
+         ("qtest" ,ocaml-qtest)))
+      (properties '()))))
+
 (define-public ocaml-pcre
   (package
     (name "ocaml-pcre")
@@ -3154,8 +3271,7 @@ hierarchy of modules.")
      ;; No tests.
      '(#:tests? #f))
     (propagated-inputs
-     `(("dune-configurator" ,dune-configurator)
-       ("pcre" ,pcre)))
+     (list dune-configurator pcre))
     (native-inputs
      `(("pcre:bin" ,pcre "bin")))
     (home-page "https://mmottl.github.io/pcre-ocaml")
@@ -3197,7 +3313,7 @@ or a timeout.")
 (define-public ocaml-stdlib-shims
   (package
     (name "ocaml-stdlib-shims")
-    (version "0.1.0")
+    (version "0.3.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -3206,7 +3322,7 @@ or a timeout.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "007dwywsr5285z0np6a9nr0h8iqmyzfrlx6s5xaqcwj69zabsrjm"))))
+                "0gmg8w67j3ww17llk7hl4dx0vq7p50rn5s4ib9sy984k543rz59h"))))
     (build-system dune-build-system)
     (home-page "https://github.com/ocaml/stdlib-shims")
     (synopsis "OCaml stdlib features backport to older OCaml compilers")
@@ -3219,7 +3335,7 @@ compatibility with older compiler to use these new features in their code.")
 (define-public ocaml-fileutils
   (package
     (name "ocaml-fileutils")
-    (version "0.6.2")
+    (version "0.6.3")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -3228,12 +3344,12 @@ compatibility with older compiler to use these new features in their code.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "01qf51b8pb7vyfba7y0kb7ajwj1950im25d7f59821zwsibns3d9"))))
+                "0aa7p5qymi8p7iqym42yk2akjd1ff81fvaks82nhjc533zl01pnf"))))
     (build-system dune-build-system)
     (propagated-inputs
-     `(("ocaml-stdlib-shims" ,ocaml-stdlib-shims)))
+     (list ocaml-stdlib-shims))
     (native-inputs
-     `(("ocaml-ounit" ,ocaml-ounit)))
+     (list ocaml-ounit))
     (home-page "http://ocaml-fileutils.forge.ocamlcore.org")
     (synopsis "Pure OCaml functions to manipulate real file and filename")
     (description "Library to provide pure OCaml functions to manipulate real
@@ -3269,9 +3385,7 @@ file (POSIX like) and filename.")
     (arguments
      `(#:tests? #f))
     (native-inputs
-     `(("ocamlbuild" ,ocamlbuild)
-       ("ocamlify" ,ocamlify)
-       ("ocamlmod" ,ocamlmod)))
+     (list ocamlbuild ocamlify ocamlmod))
     (home-page "https://oasis.forge.ocamlcore.org")
     (synopsis "Integrates a configure, build, install system in OCaml projects")
     (description "OASIS is a tool to integrate a configure, build and install
@@ -3282,7 +3396,7 @@ build system and allows external tools to analyse your project easily.")
 (define-public ocaml-cppo
   (package
     (name "ocaml-cppo")
-    (version "1.6.6")
+    (version "1.6.8")
     (source
       (origin
         (method git-fetch)
@@ -3291,12 +3405,12 @@ build system and allows external tools to analyse your project easily.")
                (commit (string-append "v" version))))
         (file-name (git-file-name name version))
         (sha256 (base32
-                  "1smcc0l6fh2n0y6bp96c69j5nw755jja99w0b206wx3yb2m4w2hs"))))
+                 "0xjb1dnj8lvdcccskrhrakknd9q4vfy5330sjbqpf4h95dsz90k9"))))
     (build-system dune-build-system)
     (arguments
      `(#:tests? #f))
     (native-inputs
-     `(("ocamlbuild" ,ocamlbuild)))
+     (list ocamlbuild))
     (home-page "https://github.com/mjambon/cppo")
     (synopsis "Equivalent of the C preprocessor for OCaml programs")
     (description "Cppo is an equivalent of the C preprocessor for OCaml
@@ -3364,9 +3478,10 @@ standard iterator type starting from 4.07.")
     (arguments
      `(#:test-target "."))
     (propagated-inputs
-     `(("ocaml-seq" ,ocaml-seq)))
+     (list ocaml-seq))
     (native-inputs
      `(("ounit" ,ocaml-ounit)))
+    (properties `((ocaml4.07-variant . ,(delay ocaml4.07-re))))
     (home-page "https://github.com/ocaml/ocaml-re/")
     (synopsis "Regular expression library for OCaml")
     (description "Pure OCaml regular expressions with:
@@ -3379,10 +3494,23 @@ standard iterator type starting from 4.07.")
 @end enumerate")
     (license license:expat)))
 
+(define-public ocaml4.07-re
+  (package-with-ocaml4.07
+    (package
+      (inherit ocaml-re)
+      (arguments
+       `(#:test-target "."
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'fix-dune-version
+             (lambda _
+               (delete-file "dune-project"))))))
+      (properties '()))))
+
 (define-public ocaml-ocplib-endian
   (package
     (name "ocaml-ocplib-endian")
-    (version "1.0")
+    (version "1.2")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -3390,12 +3518,13 @@ standard iterator type starting from 4.07.")
                      (commit version)))
               (sha256
                (base32
-                "0s1ld3kavz892b8awyxyg1mr98h2g61gy9ci5v6yb49bsii6wicw"))
+                "1klj4g451s7m5r8bxmwc1rpvngpqdm40csnx9smgc06pwy2fax2c"))
               (file-name (git-file-name name version))))
-    (build-system ocaml-build-system)
+    (build-system dune-build-system)
+    (arguments
+     `(#:test-target "tests"))
     (native-inputs
-     `(("cppo" ,ocaml-cppo)
-       ("ocamlbuild" ,ocamlbuild)))
+     `(("cppo" ,ocaml-cppo)))
     (home-page "https://github.com/OCamlPro/ocplib-endian")
     (synopsis "Optimised functions to read and write int16/32/64 from strings
 and bigarrays")
@@ -3423,9 +3552,10 @@ big- and little-endian, with their unsafe counter-parts.")
      `(#:package "cstruct"
        #:test-target "."))
     (propagated-inputs
-     `(("ocaml-bigarray-compat" ,ocaml-bigarray-compat)))
+     (list ocaml-bigarray-compat))
     (native-inputs
-     `(("ocaml-alcotest" ,ocaml-alcotest)))
+     (list ocaml-alcotest))
+    (properties `((ocaml4.07-variant . ,(delay ocaml4.07-cstruct))))
     (home-page "https://github.com/mirage/ocaml-cstruct")
     (synopsis "Access C structures via a camlp4 extension")
     (description "Cstruct is a library and syntax extension to make it easier
@@ -3433,6 +3563,22 @@ to access C-like structures directly from OCaml.  It supports both reading and
 writing to these structures, and they are accessed via the Bigarray module.")
     (license license:isc)))
 
+(define-public ocaml4.07-cstruct
+  (package-with-ocaml4.07
+    (package
+      (inherit ocaml-cstruct)
+      (version "5.1.1")
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                       (url "https://github.com/mirage/ocaml-cstruct")
+                       (commit (string-append "v" version))))
+                (file-name (git-file-name "ocaml-cstruct" version))
+                (sha256
+                 (base32
+                  "0jj3whs8r3jc524i9bb67rffh7y7r157hjgvws0bkxijxpjzwkbk"))))
+      (properties '()))))
+
 (define-public ocaml-hex
   (package
     (name "ocaml-hex")
@@ -3510,11 +3656,9 @@ JSON.")
     (arguments '(#:package "uri"
                  #:test-target "."))
     (propagated-inputs
-     `(("ocaml-stringext" ,ocaml-stringext)
-       ("ocaml-angstrom" ,ocaml-angstrom)))
+     (list ocaml-stringext ocaml-angstrom))
     (native-inputs
-     `(("ocaml-ounit" ,ocaml-ounit)
-       ("ocaml-ppx-sexp-conv" ,ocaml-ppx-sexp-conv)))
+     (list ocaml-ounit ocaml-ppx-sexp-conv))
     (properties `((upstream-name . "uri")
                   (ocaml4.07-variant ,(delay ocaml4.07-uri))))
     (synopsis "RFC3986 URI/URL parsing library")
@@ -3640,7 +3784,7 @@ Format module of the OCaml standard library.")
        #:ocaml ,ocaml-4.07
        #:findlib ,ocaml4.07-findlib))
     (native-inputs
-     `(("which" ,which)))
+     (list which))
     (propagated-inputs
      `(("ocaml-xmlm" ,(package-with-ocaml4.07 ocaml-xmlm))
        ("ocaml-sedlex" ,(package-with-ocaml4.07 ocaml-sedlex))
@@ -3655,14 +3799,14 @@ tool and piqi-ocaml.")
 (define-public ocaml-uuidm
   (package
     (name "ocaml-uuidm")
-    (version "0.9.6")
+    (version "0.9.7")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://erratique.ch/software/uuidm/"
                                   "releases/uuidm-" version ".tbz"))
               (sha256
                (base32
-                "0hz4fdx0x16k0pw9995vkz5d1hmzz6b16wck9li399rcbfnv5jlc"))))
+                "1ivxb3hxn9bk62rmixx6px4fvn52s4yr1bpla7rgkcn8981v45r8"))))
     (build-system ocaml-build-system)
     (arguments
      `(#:build-flags
@@ -3671,8 +3815,7 @@ tool and piqi-ocaml.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
-     `(("ocamlbuild" ,ocamlbuild)
-       ("opam" ,opam)))
+     (list ocamlbuild opam))
     (propagated-inputs
      `(("cmdliner" ,ocaml-cmdliner)
        ("topkg" ,ocaml-topkg)))
@@ -3702,9 +3845,9 @@ and 4 (random based) according to RFC 4122.")
        (modify-phases %standard-phases
          (add-before 'configure 'set-shell
            (lambda* (#:key inputs #:allow-other-keys)
-             (setenv "CONFIG_SHELL" (string-append (assoc-ref inputs "bash")
-                                                   "/bin/sh")))))))
-    (inputs `(("lablgtk" ,lablgtk)))
+             (setenv "CONFIG_SHELL"
+                     (search-input-file inputs "/bin/sh")))))))
+    (inputs (list lablgtk))
     (properties `((upstream-name . "ocamlgraph")))
     (home-page "http://ocamlgraph.lri.fr/")
     (synopsis "Graph library for OCaml")
@@ -3727,9 +3870,10 @@ and 4 (random based) according to RFC 4122.")
     (build-system ocaml-build-system)
     (arguments
      `(#:make-flags
-       (list (string-append "DESTDIR=" (assoc-ref %outputs "out"))
-             (string-append "SHELL=" (assoc-ref %build-inputs "bash")
-                            "/bin/sh"))
+       ,#~(list (string-append "DESTDIR=" #$output)
+                (string-append "SHELL="
+                               #+(file-append (canonical-package bash-minimal)
+                                              "/bin/sh")))
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'make-files-writable
@@ -3740,8 +3884,7 @@ and 4 (random based) according to RFC 4122.")
        #:ocaml ,ocaml-4.07
        #:findlib ,ocaml4.07-findlib))
     (native-inputs
-     `(("which" ,which)
-       ("protobuf" ,protobuf))) ; for tests
+     (list which protobuf)) ; for tests
     (propagated-inputs
      `(("ocaml-num" ,(package-with-ocaml4.07 ocaml-num))
        ("ocaml-piqilib" ,ocaml4.07-piqilib)
@@ -3789,9 +3932,7 @@ XML and Protocol Buffers formats.")
       ("ocaml-uri" ,ocaml4.07-uri)
       ("ocaml-zarith" ,(package-with-ocaml4.07 ocaml-zarith))))
    (inputs
-    `(("gmp" ,gmp)
-      ("llvm" ,llvm-3.8)
-      ("ncurses" ,ncurses)))
+    (list gmp llvm-3.8 ncurses))
    (arguments
     `(#:use-make? #t
       #:phases
@@ -3858,91 +3999,109 @@ library is currently designed for Unicode Standard 3.2.")
     ;; with an exception for linked libraries to use a different license
     (license license:lgpl2.0+)))
 
-(define-public ocaml4.07-charinfo-width
-  (package
-    (name "ocaml4.07-charinfo-width")
-    (version "1.1.0")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://bitbucket.org/zandoye/charinfo_width"
-                                  "/get/" version ".tar.gz"))
-              (file-name (string-append name "-" version ".tar.gz"))
-              (sha256
-               (base32
-                "00bv4p1yqs8y0z4z07wd9w9yyv669dikp9b04dcjbwpiy2wy0086"))))
-    (build-system dune-build-system)
-    (arguments
-     `(#:ocaml ,ocaml-4.07
-       #:findlib ,ocaml4.07-findlib
-       #:dune ,ocaml4.07-dune))
-    (propagated-inputs
-     `(("ocaml-result" ,(package-with-ocaml4.07 ocaml-result))
-       ("ocaml-camomile" ,(package-with-ocaml4.07 ocaml-camomile))))
-    (native-inputs
-     `(("ocaml-ppx-expect" ,(package-with-ocaml4.07 ocaml-ppx-expect))))
-    (properties
-     `((upstream-name . "charInfo_width")))
-    (home-page "https://bitbucket.org/zandoye/charinfo_width/")
-    (synopsis "Determine column width for a character")
-    (description "This module is implements purely in OCaml a character width
+(define-public ocaml-charinfo-width
+  ;; Add LICENSE file and Dune tests
+  (let ((commit "20aaaa6dca8f1e0b1ace55b6f2a8ba5e5910b620"))
+    (package
+      (name "ocaml-charinfo-width")
+      (version (git-version "1.1.0" "1" commit))
+      (home-page "https://github.com/kandu/charinfo_width/")
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url home-page)
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "04gil5hxm2jax9paw3i24d8zyzhyl5cphzfyryvy2lcrm3c485q0"))))
+      (build-system dune-build-system)
+      (propagated-inputs
+       (list ocaml-result ocaml-camomile))
+      (native-inputs
+       (list ocaml-ppx-expect))
+      (properties
+       `((upstream-name . "charInfo_width")))
+      (synopsis "Determine column width for a character")
+      (description "This module implements purely in OCaml a character width
 function that follows the prototype of POSIX's wcwidth.")
-    (license license:expat)))
+      (license license:expat))))
 
-(define-public ocaml4.07-zed
+(define-public ocaml-zed
   (package
-    (name "ocaml4.07-zed")
-    (version "2.0.3")
+    (name "ocaml-zed")
+    (version "3.1.0")
+    (home-page "https://github.com/ocaml-community/zed")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://github.com/diml/zed")
+             (url home-page)
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0pa9awinqr0plp4b2az78dwpvh01pwaljnn5ydg8mc6hi7rmir55"))))
+        (base32 "04vr1a94imsghm98iigc35rhifsz0rh3qz2qm0wam2wvp6vmrx0p"))))
     (build-system dune-build-system)
     (arguments
-     `(#:test-target "."
-       #:ocaml ,ocaml-4.07
-       #:findlib ,ocaml4.07-findlib
-       #:dune ,ocaml4.07-dune))
+     `(#:test-target "."))
     (propagated-inputs
-     `(("ocaml-camomile" ,(package-with-ocaml4.07 ocaml-camomile))
-       ("ocaml-charinfo-width" ,ocaml4.07-charinfo-width)
-       ("ocaml-react" ,(package-with-ocaml4.07 ocaml-react))))
-    (home-page "https://github.com/diml/zed")
-    (synopsis "Abstract engine for text editing in OCaml")
-    (description "Zed is an abstract engine for text edition.  It can be used
-to write text editors, edition widgets, readlines, etc.  You just have to
-connect an engine to your inputs and rendering functions to get an editor.")
+     `(("ocaml-charInfo-width" ,ocaml-charinfo-width)
+       ("ocaml-camomile" ,ocaml-camomile)
+       ("ocaml-react" ,ocaml-react)))
+    (properties `((ocaml4.07-variant . ,(delay ocaml4.07-zed))))
+    (synopsis "Abstract engine for text edition in OCaml")
+    (description
+     "This module provides an abstract engine for text edition.  It can be
+used to write text editors, edition widgets, readlines, and more.  The module
+Zed uses Camomile to fully support the Unicode specification, and implements
+an UTF-8 encoded string type with validation, and a rope datastructure to
+achieve efficient operations on large Unicode buffers.  Zed also features a
+regular expression search on ropes.  To support efficient text edition
+capabilities, Zed provides macro recording and cursor management facilities.")
     (license license:bsd-3)))
 
-(define-public ocaml4.07-lambda-term
+(define-public ocaml4.07-zed
+  (package-with-ocaml4.07
+   (package
+     (inherit ocaml-zed)
+     (version "2.0.3")
+     (source (origin
+               (method git-fetch)
+               (uri (git-reference
+                     (url "https://github.com/ocaml-community/zed")
+                     (commit version)))
+               (file-name (git-file-name "ocaml4.07-zed" version))
+               (sha256
+                (base32
+                 "0pa9awinqr0plp4b2az78dwpvh01pwaljnn5ydg8mc6hi7rmir55"))))
+     (properties '()))))
+
+(define-public ocaml-lambda-term
   (package
-    (name "ocaml4.07-lambda-term")
-    (version "2.0.2")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/diml/lambda-term")
-             (commit version)))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "0zcjy6fvf0d3i2ssz96asl889n3r6bplyzk7xvb2s3dkxbgcisyy"))))
+    (name "ocaml-lambda-term")
+    (version "3.1.0")
+    (home-page "https://github.com/ocaml-community/lambda-term")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url home-page)
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1k0ykiz0vhpyyj9fkss29ajas4fh1xh449j702xkvayqipzj1mkg"))))
     (build-system dune-build-system)
     (arguments
-     `(#:tests? #f
-       #:ocaml ,ocaml-4.07
-       #:findlib ,ocaml4.07-findlib
-       #:dune ,ocaml4.07-dune))
+     `(#:test-target "."))
     (propagated-inputs
-     `(("ocaml-lwt" ,(package-with-ocaml4.07 ocaml-lwt))
-       ("ocaml-lwt-log" ,(package-with-ocaml4.07 ocaml-lwt-log))
-       ("ocaml-lwt-react" ,(package-with-ocaml4.07 ocaml-lwt-react))
-       ("ocaml-zed" ,ocaml4.07-zed)))
-    (home-page "https://github.com/diml/lambda-term")
+     (list ocaml-lwt
+           ocaml-lwt-log
+           ocaml-react
+           ocaml-zed
+           ocaml-camomile
+           ocaml-lwt-react
+           ocaml-mew-vi))
+    (properties `((ocaml4.07-variant . ,(delay ocaml4.07-lambda-term))))
     (synopsis "Terminal manipulation library for OCaml")
     (description "Lambda-Term is a cross-platform library for manipulating the
 terminal.  It provides an abstraction for keys, mouse events, colors, as well as
@@ -3952,10 +4111,31 @@ manipulation than, for example, ncurses, by providing a native OCaml interface
 instead of bindings to a C library.")
     (license license:bsd-3)))
 
-(define-public ocaml4.07-utop
+(define-public ocaml4.07-lambda-term
+  (package-with-ocaml4.07
+   (package
+     (inherit ocaml-lambda-term)
+     (version "2.0.2")
+     (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+              (url "https://github.com/ocaml-community/lambda-term")
+              (commit version)))
+        (file-name (git-file-name "ocaml4.07-lambda-term" version))
+        (sha256
+         (base32 "0zcjy6fvf0d3i2ssz96asl889n3r6bplyzk7xvb2s3dkxbgcisyy"))))
+     (propagated-inputs
+      `(("ocaml-lwt" ,ocaml-lwt)
+        ("ocaml-lwt-log" ,ocaml-lwt-log)
+        ("ocaml-lwt-react" ,ocaml-lwt-react)
+        ("ocaml-zed" ,ocaml-zed)))
+     (properties '()))))
+
+(define-public ocaml-utop
   (package
-    (name "ocaml4.07-utop")
-    (version "2.4.3")
+    (name "ocaml-utop")
+    (version "2.8.0")
     (source
      (origin
        (method git-fetch)
@@ -3964,21 +4144,16 @@ instead of bindings to a C library.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1bl4943qpi3qy152dbdm5glhx19zsiylmn4rcxi8l66g58hikyjp"))))
+        (base32 "1zf4hg33sblzh2f65vk0292jg4jlwa8702kfwpsg1kcg4w6nsfdp"))))
     (build-system dune-build-system)
     (arguments
-     `(#:test-target "."
-       #:ocaml ,ocaml-4.07
-       #:findlib ,ocaml4.07-findlib
-       #:dune ,ocaml4.07-dune))
+     `(#:test-target "."))
     (native-inputs
-     `(("cppo" ,(package-with-ocaml4.07 ocaml-cppo))))
+     (list ocaml-cppo))
     (propagated-inputs
-     `(("lambda-term" ,ocaml4.07-lambda-term)
-       ("lwt" ,(package-with-ocaml4.07 ocaml-lwt))
-       ("react" ,(package-with-ocaml4.07 ocaml-react))
-       ("camomile" ,(package-with-ocaml4.07 ocaml-camomile))
-       ("zed" ,ocaml4.07-zed)))
+     (list ocaml-lambda-term ocaml-lwt ocaml-lwt-react ocaml-camomile
+           ocaml-react))
+    (properties `((ocaml4.07-variant . ,(delay ocaml4.07-utop))))
     (home-page "https://github.com/ocaml-community/utop")
     (synopsis "Improved interface to the OCaml toplevel")
     (description "UTop is an improved toplevel for OCaml.  It can run in a
@@ -3986,10 +4161,32 @@ terminal or in Emacs.  It supports line editing, history, real-time and context
 sensitive completion, colors, and more.")
     (license license:bsd-3)))
 
+(define-public ocaml4.07-utop
+  (package-with-ocaml4.07
+   (package
+     (inherit ocaml-utop)
+     (version "2.4.3")
+     (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+              (url "https://github.com/ocaml-community/utop")
+              (commit version)))
+        (file-name (git-file-name "ocaml4.07-utop" version))
+        (sha256
+         (base32 "1bl4943qpi3qy152dbdm5glhx19zsiylmn4rcxi8l66g58hikyjp"))))
+     (propagated-inputs
+      `(("ocaml-lambda-term" ,ocaml-lambda-term)
+        ("ocaml-lwt" ,ocaml-lwt)
+        ("ocaml-react" ,ocaml-react)
+        ("ocaml-camomile" ,ocaml-camomile)
+        ("ocaml-zed" ,ocaml-zed)))
+     (properties '()))))
+
 (define-public ocaml-integers
   (package
     (name "ocaml-integers")
-    (version "0.4.0")
+    (version "0.5.1")
     (home-page "https://github.com/ocamllabs/ocaml-integers")
     (source (origin
               (method git-fetch)
@@ -3999,7 +4196,7 @@ sensitive completion, colors, and more.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0yp3ab0ph7mp5741g7333x4nx8djjvxzpnv3zvsndyzcycspn9dd"))))
+                "0by5pc851fk7ccxqy1w2qc5jwn9z8whyqhs5gxlm5986vr9msnyi"))))
     (build-system dune-build-system)
     (arguments
      `(#:tests? #f)) ; no tests
@@ -4012,7 +4209,7 @@ long and size_t whose sizes depend on the host platform.")
 (define-public ocaml-ctypes
   (package
    (name "ocaml-ctypes")
-   (version "0.18.0")
+   (version "0.19.1")
    (home-page "https://github.com/ocamllabs/ocaml-ctypes")
    (source (origin
              (method git-fetch)
@@ -4022,34 +4219,27 @@ long and size_t whose sizes depend on the host platform.")
              (file-name (git-file-name name version))
              (sha256
               (base32
-               "03zrbnl16m67ls0yfhq7a4k4238x6x6b3m456g4dw2yqwc153vks"))))
+               "1xi1a486gssrb23zln3sf7zn0rmyl1k684bdf9iqkhgpz607fq6s"))))
    (build-system ocaml-build-system)
    (arguments
-    `(#:tests? #f; require an old lwt
-      #:make-flags
+    `(#:make-flags
       (list (string-append "INSTALL_HEADERS = $(wildcard $($(PROJECT).dir)/*.h)"))
       #:phases
       (modify-phases %standard-phases
         (add-after 'unpack 'make-writable
           (lambda _
-            (for-each
-              (lambda (file)
-                (let ((stat (stat file)))
-                  (chmod file (+ #o200 (stat:mode stat)))))
-              (find-files "." "."))
-            #t))
+            (for-each make-file-writable
+                      (find-files "."))))
         (delete 'configure))))
    (native-inputs
-    `(("pkg-config" ,pkg-config)))
+    `(("pkg-config" ,pkg-config)
+      ("ounit" ,ocaml-ounit)
+      ("lwt" ,ocaml-lwt)))
    (propagated-inputs
     `(("bigarray-compat" ,ocaml-bigarray-compat)
       ("integers" ,ocaml-integers)))
    (inputs
-    `(("libffi" ,libffi)
-      ("ounit" ,ocaml-ounit)
-      ("lwt" ,ocaml-lwt)
-      ("topkg" ,ocaml-topkg)
-      ("opam" ,opam)))
+    (list libffi))
    (synopsis "Library for binding to C libraries using pure OCaml")
    (description "Ctypes is a library for binding to C libraries using pure
 OCaml.  The primary aim is to make writing C extensions as straightforward as
@@ -4121,10 +4311,7 @@ OCaml projects that contain C stubs.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
-     `(("ocamlbuild" ,ocamlbuild)
-       ("ocaml-astring" ,ocaml-astring)
-       ("opam" ,opam)
-       ("pkg-config" ,pkg-config)))
+     (list ocamlbuild ocaml-astring opam pkg-config))
     (inputs
      `(("topkg" ,ocaml-topkg)
        ("sdl2" ,sdl2)
@@ -4153,32 +4340,27 @@ cross-platform SDL C library.")
     (inputs
      `(("menhir" ,ocaml-menhir)))
     (native-inputs
-     `(("ocamlbuild" ,ocamlbuild)))
+     (list ocamlbuild))
     (build-system ocaml-build-system)
     (arguments
      `(#:phases
-       (modify-phases %standard-phases
-         (delete 'configure)
-         (replace 'build
-           (lambda _
-             (invoke "make")
-             #t))
-         (replace 'check
-           (lambda _
-             (invoke "make" "tests")
-             #t))
-         (add-before 'install 'set-binpath
-           ;; Change binary path in the makefile
-           (lambda _
-             (let ((out (assoc-ref %outputs "out")))
-               (substitute* "GNUmakefile"
-                 (("BINDIR = (.*)$")
-                  (string-append "BINDIR = " out "/bin"))))
-             #t))
-         (replace 'install
-           (lambda _
-             (invoke "make" "install")
-             #t)))))
+       ,#~(modify-phases %standard-phases
+            (delete 'configure)
+            (replace 'build
+              (lambda _
+                (invoke "make")))
+            (replace 'check
+              (lambda _
+                (invoke "make" "tests")))
+            (add-before 'install 'set-binpath
+              ;; Change binary path in the makefile
+              (lambda _
+                (substitute* "GNUmakefile"
+                  (("BINDIR = (.*)$")
+                   (string-append "BINDIR = " #$output "/bin")))))
+            (replace 'install
+              (lambda _
+                (invoke "make" "install"))))))
     (synopsis "Proof-checker for the λΠ-calculus modulo theory, an extension of
 the λ-calculus")
     (description "Dedukti is a proof-checker for the λΠ-calculus modulo
@@ -4205,7 +4387,7 @@ developed in other systems.  In particular, it enjoys a minimalistic syntax.")
                   "1842wikq24c8rg0ac84vb1qby9ng1nssxswyyni4kq85lng5lcrp"))
                 (file-name (git-file-name name version))))
       (inputs
-       `(("dedukti" ,dedukti)))
+       (list dedukti))
       (build-system emacs-build-system)
       (arguments
        '(#:phases
@@ -4238,8 +4420,7 @@ Dedukti files.")
                 (file-name (git-file-name name version))))
       (build-system emacs-build-system)
       (inputs
-       `(("dedukti-mode" ,emacs-dedukti-mode)
-         ("flycheck-mode" ,emacs-flycheck)))
+       (list emacs-dedukti-mode emacs-flycheck))
       (synopsis "Flycheck integration for the dedukti language")
       (description "This package provides a frontend for Flycheck to perform
 syntax checking on dedukti files.")
@@ -4248,18 +4429,21 @@ syntax checking on dedukti files.")
 (define-public ocaml-jst-config
   (package
     (name "ocaml-jst-config")
-    (version "0.14.0")
+    (version "0.14.1")
     (source
-     (janestreet-origin
-      "jst-config" version
-      "1fppr29vn91zpqda8jlnp8bcssd4bf3rn36ig8fnd1yhjrsvz8f6"))
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/janestreet/jst-config")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32
+          "0sak7rrix8vd2bscbjxbxi1d9jyd27ik59dpybfxhzhsn9s1wllv"))))
     (build-system dune-build-system)
     (arguments '(#:tests? #f))           ; no tests
     (propagated-inputs
-      `(("ocaml-base" ,ocaml-base)
-        ("ocaml-ppx-assert" ,ocaml-ppx-assert)
-        ("ocaml-stdio" ,ocaml-stdio)
-        ("dune-configurator" ,dune-configurator)))
+      (list ocaml-base ocaml-ppx-assert ocaml-stdio dune-configurator))
     (home-page "https://github.com/janestreet/jst-config")
     (synopsis "Compile-time configuration for Jane Street libraries")
     (description "Defines compile-time constants used in Jane Street libraries
@@ -4296,11 +4480,8 @@ packages.")
     (build-system dune-build-system)
     (arguments '(#:tests? #f))           ; no tests
     (propagated-inputs
-     `(("ocaml-base" ,ocaml-base)
-       ("ocaml-jane-street-headers" ,ocaml-jane-street-headers)
-       ("ocaml-jst-config" ,ocaml-jst-config)
-       ("ocaml-ppx-base" ,ocaml-ppx-base)
-       ("ocaml-ppx-optcomp" ,ocaml-ppx-optcomp)))
+     (list ocaml-base ocaml-jane-street-headers ocaml-jst-config
+           ocaml-ppx-base ocaml-ppx-optcomp))
     (properties `((upstream-name . "time_now")))
     (home-page
      "https://github.com/janestreet/time_now")
@@ -4329,13 +4510,13 @@ since the start of the Unix epoch.")
     (arguments
      `(#:tests? #f)) ;see home page README for further information
     (propagated-inputs
-     `(("ocaml-base" ,ocaml-base)
-       ("ocaml-migrate-parsetree" ,ocaml-migrate-parsetree)
-       ("ocaml-compiler-libs" ,ocaml-compiler-libs)
-       ("ocaml-sexplib0" ,ocaml-sexplib0)
-       ("ocaml-stdio" ,ocaml-stdio)
-       ("ocaml-ppxlib" ,ocaml-ppxlib)
-       ("ocaml-time-now" ,ocaml-time-now)))
+     (list ocaml-base
+           ocaml-migrate-parsetree
+           ocaml-compiler-libs
+           ocaml-sexplib0
+           ocaml-stdio
+           ocaml-ppxlib
+           ocaml-time-now))
     (properties `((upstream-name . "ppx_inline_test")
                   (ocaml4.07-variant . ,(delay ocaml4.07-ppx-inline-test))))
     (synopsis "Syntax extension for writing in-line tests in ocaml code")
@@ -4398,8 +4579,7 @@ collection.")
            (lambda _
              (invoke "make" "install"))))))
     (native-inputs
-     `(("ocamlbuild" ,ocamlbuild)
-       ("ocaml-findlib" ,ocaml-findlib)))
+     (list ocamlbuild ocaml-findlib))
     (home-page "https://rlepigre.github.io/ocaml-bindlib/")
     (synopsis "OCaml Bindlib library for bound variables")
     (description "Bindlib is a library allowing the manipulation of data
@@ -4427,7 +4607,7 @@ or quantified formulas.")
     (arguments
      `(#:test-target "."))
     (propagated-inputs
-     `(("ocaml-stdlib-shims" ,ocaml-stdlib-shims)))
+     (list ocaml-stdlib-shims))
     (synopsis "Parsing library based on Earley Algorithm")
     (description "Earley is a parser combinator library base on Earley's
 algorithm.  It is intended to be used in conjunction with an OCaml syntax
@@ -4498,9 +4678,9 @@ than the first one.")
         (add-before 'build 'make-writable
           (lambda _ (for-each make-file-writable (find-files "." ".")))))))
    (inputs
-    `(("ocaml-easy-format" ,ocaml-easy-format)))
+    (list ocaml-easy-format))
    (native-inputs
-    `(("which" ,which)))
+    (list which))
    (synopsis "Data format designed for speed, safety, ease of use and backward
 compatibility")
    (description "Biniou (pronounced \"be new\" is a binary data format
@@ -4529,11 +4709,9 @@ than yojson), with 25-35% space savings.")
     (arguments
      `(#:test-target "."))
     (propagated-inputs
-     `(("ocaml-biniou" ,ocaml-biniou)
-       ("ocaml-easy-format" ,ocaml-easy-format)))
+     (list ocaml-biniou ocaml-easy-format))
     (native-inputs
-     `(("ocaml-alcotest" ,ocaml-alcotest)
-       ("ocaml-cppo" ,ocaml-cppo)))
+     (list ocaml-alcotest ocaml-cppo))
     (synopsis "Low-level JSON library for OCaml")
     (description "Yojson is an optimized parsing and printing library for the
 JSON format.  It addresses a few shortcomings of json-wheel including 2x
@@ -4567,10 +4745,7 @@ serializers and deserializers from type definitions.")
              (invoke "dune" "upgrade")
              #t)))))
     (inputs
-     `(("ocaml-fmt" ,ocaml-fmt)
-       ("ocaml-astring" ,ocaml-astring)
-       ("ocaml-logs" ,ocaml-logs)
-       ("ocaml-cmdliner" ,ocaml-cmdliner)))
+     (list ocaml-fmt ocaml-astring ocaml-logs ocaml-cmdliner))
     (synopsis
      "CRAM-testing framework for testing command line applications")
     (description "CRAM is a is functional testing framework for command line
@@ -4582,7 +4757,7 @@ format}.  @code{craml} is released as a single binary (called @code{craml}).")
 (define-public ocaml-dot-merlin-reader
   (package
     (name "ocaml-dot-merlin-reader")
-    (version "4.2-411")
+    (version "4.4-413")
     (source
      (origin
        (method git-fetch)
@@ -4592,14 +4767,12 @@ format}.  @code{craml} is released as a single binary (called @code{craml}).")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1vl6p8m2pag5j283h5g2gzxxfm599k6qhyrjkdf3kyc476fc9lw8"))))
+         "0wijg1vh2q6yr46vkv34vvksligd0ajl4hv7m6qbz3ywqr8akg23"))))
     (build-system dune-build-system)
     (arguments '(#:package "dot-merlin-reader"
                  #:tests? #f))          ; no tests
     (inputs
-     `(("ocaml-yojson" ,ocaml-yojson)
-       ("ocaml-csexp" ,ocaml-csexp)
-       ("ocaml-result" ,ocaml-result)))
+     (list ocaml-yojson ocaml-csexp ocaml-result))
     (home-page "https://ocaml.github.io/merlin/")
     (synopsis "Reads config files for @code{ocaml-merlin}")
     (description "@code{ocaml-dot-merlin-reader} is an external reader for
@@ -4619,13 +4792,10 @@ format}.  @code{craml} is released as a single binary (called @code{craml}).")
              (when tests?
                (invoke "dune" "runtest" "-p" "merlin,dot-merlin-reader")))))))
     (inputs
-     `(("ocaml-yojson" ,ocaml-yojson)
-       ("ocaml-csexp" ,ocaml-csexp)
-       ("ocaml-result" ,ocaml-result)))
+     (list ocaml-yojson ocaml-csexp ocaml-result))
     (native-inputs
-     `(("ocaml-dot-merlin-reader" ,ocaml-dot-merlin-reader) ; required for tests
-       ("ocaml-mdx" ,ocaml-mdx)
-       ("jq" ,jq)))
+     (list ocaml-dot-merlin-reader ; required for tests
+           ocaml-mdx jq))
     (synopsis "Context sensitive completion for OCaml in Vim and Emacs")
     (description "Merlin is an editor service that provides modern IDE
 features for OCaml.  Emacs and Vim support is provided out-of-the-box.
@@ -4633,37 +4803,9 @@ External contributors added support for Visual Studio Code, Sublime Text and
 Atom.")
     (license license:expat)))
 
-;; ocaml-merlin 3.4.2 can not be built with old version of dune used in
-;; package-with-ocaml4.07
-(define-public ocaml4.07-merlin
-  (package-with-ocaml4.07
-   (package
-     (inherit ocaml-merlin)
-     (name "ocaml-merlin")
-     (version "3.2.2")
-     (source
-      (origin
-        (method git-fetch)
-        (uri (git-reference
-              (url "https://github.com/ocaml/merlin")
-              (commit (string-append "v" version))))
-        (file-name (git-file-name name version))
-        (sha256
-         (base32
-          "15ssgmwdxylbwhld9p1cq8x6kadxyhll5bfyf11dddj6cldna3hb"))))
-     (build-system dune-build-system)
-     (inputs
-      `(("ocaml-yojson" ,ocaml-yojson)))
-     (native-inputs
-      `(("ocaml-findlib" ,ocaml-findlib)))
-     (arguments
-      `(#:package "merlin"
-        ;; Errors in tests in version 3.2.2
-        #:tests? #f)))))
-
-(define-public ocaml4.07-gsl
+(define-public ocaml-gsl
   (package
-    (name "ocaml4.07-gsl")
+    (name "ocaml-gsl")
     (version "1.24.0")
     (source
      (origin
@@ -4683,16 +4825,11 @@ Atom.")
          (add-after 'unpack 'fix-gsl-directory
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "src/config/discover.ml"
-               (("/usr") (assoc-ref inputs "gsl")))
-             #t)))
-       #:ocaml ,ocaml-4.07
-       #:findlib ,ocaml4.07-findlib
-       #:dune ,ocaml4.07-dune))
+               (("/usr") (assoc-ref inputs "gsl"))))))))
     (inputs
-     `(("gsl" ,gsl)))
+     (list gsl))
     (propagated-inputs
-     `(("ocaml-base" ,(package-with-ocaml4.07 ocaml-base))
-       ("ocaml-stdio" ,(package-with-ocaml4.07 ocaml-stdio))))
+     (list ocaml-base ocaml-stdio))
     (home-page "https://mmottl.github.io/gsl-ocaml")
     (synopsis "Bindings to the GNU Scientific Library")
     (description
@@ -4701,26 +4838,25 @@ the OCaml language.")
     (license license:gpl3+)))
 
 (define-public ocaml4.07-gsl-1
-  (package
-    (inherit ocaml4.07-gsl)
-    (version "1.19.3")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://github.com/mmottl/gsl-ocaml"
-                                  "/releases/download/v"
-                                  version "/gsl-ocaml-" version ".tar.gz"))
-              (sha256
-               (base32
-                "0nzp43hp8pbjqkrxnwp5lgjrabxayf61h18fjaydi0s5faq6f3xh"))))
-    (build-system ocaml-build-system)
-    (inputs
-     `(("gsl" ,gsl)))
-    (native-inputs
-     `(("ocamlbuild" ,(package-with-ocaml4.07 ocamlbuild))))
-    (arguments
-     `(#:ocaml ,ocaml-4.07
-       #:findlib ,ocaml4.07-findlib))
-    (propagated-inputs '())))
+  (package-with-ocaml4.07
+    (package
+      (inherit ocaml-gsl)
+      (version "1.19.3")
+      (source (origin
+                (method url-fetch)
+                (uri (string-append "https://github.com/mmottl/gsl-ocaml"
+                                    "/releases/download/v"
+                                    version "/gsl-ocaml-" version ".tar.gz"))
+                (sha256
+                 (base32
+                  "0nzp43hp8pbjqkrxnwp5lgjrabxayf61h18fjaydi0s5faq6f3xh"))))
+      (build-system ocaml-build-system)
+      (inputs
+       `(("gsl" ,gsl-static)))
+      (native-inputs
+       `(("ocamlbuild" ,ocamlbuild)))
+      (arguments '())
+      (propagated-inputs '()))))
 
 (define-public cubicle
   (package
@@ -4735,12 +4871,10 @@ the OCaml language.")
                 "10kk80jdmpdvql88sdjsh7vqzlpaphd8vip2lp47aarxjkwjlz1q"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("automake" ,automake)
-       ("ocaml" ,ocaml)
-       ("which" ,(@@ (gnu packages base) which))))
+     (list automake ocaml
+           (@@ (gnu packages base) which)))
     (propagated-inputs
-     `(("ocaml-num" ,ocaml-num)
-       ("z3" ,z3)))
+     (list ocaml-num z3))
     (arguments
      `(#:configure-flags (list "--with-z3")
        #:make-flags (list "QUIET=")
@@ -4820,15 +4954,20 @@ that was developed by Jane Street, the largest industrial user of OCaml.")
 (define-public ocaml-parsexp
   (package
     (name "ocaml-parsexp")
-    (version "0.14.0")
+    (version "0.14.1")
     (home-page "https://github.com/janestreet/parsexp")
-    (source
-     (janestreet-origin "parsexp" version
-                        "158znj19dvfdcwsgzs3rdhxpj1g4aw0d4nkfr8c05bahf0lnshlb"))
+    (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
+                "1nr0ncb8l2mkk8pqzknr7fsqw5kpz8y102kyv5bc0x7c36v0d4zy"))))
     (build-system dune-build-system)
     (inputs
-     `(("ocaml-sexplib0" ,ocaml-sexplib0)
-       ("ocaml-base" ,ocaml-base)))
+     (list ocaml-sexplib0 ocaml-base))
     (properties `((ocaml4.07-variant . ,(delay ocaml4.07-parsexp))))
     (synopsis "S-expression parsing library")
     (description
@@ -4879,10 +5018,7 @@ parsexp_io.")
                         "12rlnc6fcrjfdn3gs2agi418sj54ighhs6dfll37zcv7mgywblm2"))
     (build-system dune-build-system)
     (propagated-inputs
-     `(("ocaml-base" ,ocaml-base)
-       ("ocaml-num" ,ocaml-num)
-       ("ocaml-parsexp" ,ocaml-parsexp)
-       ("ocaml-sexplib0" ,ocaml-sexplib0)))
+     (list ocaml-base ocaml-num ocaml-parsexp ocaml-sexplib0))
     (properties `((ocaml4.07-variant . ,(delay ocaml4.07-sexplib))))
     (synopsis
      "Library for serializing OCaml values to and from S-expressions")
@@ -4904,14 +5040,21 @@ functionality for parsing and pretty-printing s-expressions.")
 (define-public ocaml-base
   (package
     (name "ocaml-base")
-    (version "0.14.0")
+    (version "0.14.1")
     (home-page "https://github.com/janestreet/base")
     (source
-     (janestreet-origin "base" version
-         "1rkdhsgbcv0a8p29mwvpd2ldz8cjk97pixl43izm54wyin4lp778"))
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/janestreet/base")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32
+          "1hizjxmiqlj2zzkwplzjamw9rbnl0kh44sxgjpzdij99qnfkzylf"))))
     (build-system dune-build-system)
     (propagated-inputs
-     `(("ocaml-sexplib0" ,ocaml-sexplib0)))
+     (list ocaml-sexplib0))
     (properties `((ocaml4.07-variant . ,(delay ocaml4.07-base))))
     (synopsis
      "Full standard library replacement for OCaml")
@@ -4949,7 +5092,7 @@ provided by companion libraries such as
 (define-public ocaml-compiler-libs
   (package
     (name "ocaml-compiler-libs")
-    (version "0.12.3")
+    (version "0.12.4")
     (home-page "https://github.com/janestreet/ocaml-compiler-libs")
     (source
      (origin
@@ -4960,7 +5103,7 @@ provided by companion libraries such as
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "00nrar7h2pyflbdiq6wwwrb4k5jh9iff0jllihzm6ms8d5pspsg5"))))
+         "00if2f7j9d8igdkj4rck3p74y17j6b233l91mq02drzrxj199qjv"))))
     (build-system dune-build-system)
     (arguments `(#:tests? #f)) ;no tests
     (properties `((upstream-name . "ocaml-compiler-libs")
@@ -5000,8 +5143,7 @@ is now @code{Ocaml_common.Ast_helper}.")
                         "1hj5hraprqy2i90a690l11yjszvb99j818q3d684ryx6p2lddk0l"))
     (build-system dune-build-system)
     (propagated-inputs
-     `(("ocaml-base" ,ocaml-base)
-       ("ocaml-sexplib0" ,ocaml-sexplib0)))
+     (list ocaml-base ocaml-sexplib0))
     (arguments `(#:tests? #f)) ;no tests
     (properties `((ocaml4.07-variant . ,(delay ocaml4.07-stdio))))
     (synopsis "Standard IO library for OCaml")
@@ -5021,6 +5163,35 @@ a more consistent API.")
                          "0pqbp2wy5fgmc38irwvmj9nlcvclb1ix1mp4y7l39bgvvlz303h9"))
      (properties '()))))
 
+(define-public ocaml-ppx-deriving
+  (package
+    (name "ocaml-ppx-deriving")
+    (version "5.2.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/ocaml-ppx/ppx_deriving")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1wqcnw4wi6pfjjhixpakckm03dpj990259za432804471a6spm2j"))))
+    (build-system dune-build-system)
+    (arguments
+     `(#:test-target "."))
+    (propagated-inputs
+     (list ocaml-ppx-derivers ocaml-ppxlib ocaml-result))
+    (native-inputs
+     (list ocaml-cppo ocaml-ounit2))
+    (properties `((upstream-name . "ppx_deriving")))
+    (home-page "https://github.com/ocaml-ppx/ppx_deriving")
+    (synopsis "Type-driven code generation for OCaml")
+    (description
+     "Ppx_deriving provides common infrastructure for generating code based
+on type definitions, and a set of useful plugins for common tasks.")
+    (license license:expat)))
+
 (define-public ocaml-ppx-derivers
   (package
     (name "ocaml-ppx-derivers")
@@ -5065,14 +5236,14 @@ as part of the same ocaml-migrate-parsetree driver.")
          "0jg5v4pssbl66hn5davpin1i57a0r3r54l96vpz5y99xk5w70xi1"))))
     (build-system dune-build-system)
     (propagated-inputs
-     `(("ocaml-base" ,ocaml-base)
-       ("ocaml-compiler-libs" ,ocaml-compiler-libs)
-       ("ocaml-migrate-parsetree" ,ocaml-migrate-parsetree)
-       ("ocaml-stdlib-shims" ,ocaml-stdlib-shims)
-       ("ocaml-ppx-derivers" ,ocaml-ppx-derivers)
-       ("ocaml-stdio" ,ocaml-stdio)
-       ("ocaml-result" ,ocaml-result)
-       ("ocaml-sexplib0" ,ocaml-sexplib0)))
+     (list ocaml-base
+           ocaml-compiler-libs
+           ocaml-migrate-parsetree
+           ocaml-stdlib-shims
+           ocaml-ppx-derivers
+           ocaml-stdio
+           ocaml-result
+           ocaml-sexplib0))
     (properties `((ocaml4.07-variant . ,(delay ocaml4.07-ppxlib))))
     (synopsis
      "Base library and tools for ppx rewriters")
@@ -5144,9 +5315,7 @@ OCaml AST in the OCaml syntax;
      ;; (see https://github.com/janestreet/ppx_compare/issues/10)
      '(#:tests? #f))
     (propagated-inputs
-     `(("ocaml-base" ,ocaml-base)
-        ("ocaml-migrate-parsetree" ,ocaml-migrate-parsetree)
-        ("ocaml-ppxlib" ,ocaml-ppxlib)))
+     (list ocaml-base ocaml-migrate-parsetree ocaml-ppxlib))
     (properties `((upstream-name . "ppx_compare")
                   (ocaml4.07-variant . ,(delay ocaml4.07-ppx-compare))))
     (home-page "https://github.com/janestreet/ppx_compare")
@@ -5187,9 +5356,7 @@ by making sure that you only compare comparable values.")
     (build-system dune-build-system)
     (arguments `(#:tests? #f)) ; No tests
     (propagated-inputs
-     `(("ocaml-base" ,ocaml-base)
-       ("ocaml-migrate-parsetree" ,ocaml-migrate-parsetree)
-       ("ocaml-ppxlib" ,ocaml-ppxlib)))
+     (list ocaml-base ocaml-migrate-parsetree ocaml-ppxlib))
     (properties `((upstream-name . "fieldslib")
                   (ocaml4.07-variant . ,(delay ocaml4.07-fieldslib))))
     (home-page "https://github.com/janestreet/fieldslib")
@@ -5221,9 +5388,7 @@ of a record and create new record values.")
      ;; No tests
      `(#:tests? #f))
     (propagated-inputs
-     `(("ocaml-base" ,ocaml-base)
-       ("ocaml-migrate-parsetree" ,ocaml-migrate-parsetree)
-       ("ocaml-ppxlib" ,ocaml-ppxlib)))
+     (list ocaml-base ocaml-migrate-parsetree ocaml-ppxlib))
     (properties `((upstream-name . "variantslib")
                   (ocaml4.07-variant . ,(delay ocaml4.07-variantslib))))
     (home-page "https://github.com/janestreet/variantslib")
@@ -5265,10 +5430,8 @@ standard library.")
          "1zwirwqry24b48bg7d4yc845hvcirxyymzbw95aaxdcck84d30n8"))))
     (build-system dune-build-system)
     (propagated-inputs
-     `(("ocaml-base" ,ocaml-base)
-       ("ocaml-fieldslib" ,ocaml-fieldslib)
-       ("ocaml-migrate-parsetree" ,ocaml-migrate-parsetree)
-       ("ocaml-ppxlib" ,ocaml-ppxlib)))
+     (list ocaml-base ocaml-fieldslib ocaml-migrate-parsetree
+           ocaml-ppxlib))
     (properties `((upstream-name . "ppx_fields_conv")
                   (ocaml4.07-variant . ,(delay ocaml4.07-ppx-fields-conv))))
     (synopsis "Generation of accessor and iteration functions for ocaml records")
@@ -5305,9 +5468,7 @@ new record values.")
          "0dbri9d00ydi0dw1cavswnqdmhjaaz80vap29ns2lr6mhhlvyjmj"))))
     (build-system dune-build-system)
     (propagated-inputs
-     `(("ocaml-base" ,ocaml-base)
-       ("ocaml-migrate-parsetree" ,ocaml-migrate-parsetree)
-       ("ocaml-ppxlib" ,ocaml-ppxlib)))
+     (list ocaml-base ocaml-migrate-parsetree ocaml-ppxlib))
     (properties `((upstream-name . "ppx_sexp_conv")
                   (ocaml4.07-variant . ,(delay ocaml4.07-ppx-sexp-conv))))
     (synopsis "Generation of S-expression conversion functions from type definitions")
@@ -5335,27 +5496,21 @@ definitions.")
 (define-public ocaml-ppx-variants-conv
   (package
     (name "ocaml-ppx-variants-conv")
-    (version "0.14.1")
+    (version "0.14.2")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
              (url "https://github.com/janestreet/ppx_variants_conv")
              (commit (string-append "v" version))))
-       (patches
-        (search-patches
-         ;; Fix build when building with ocaml-ppxlib@0.23.0.
-         "ocaml-ppx-variants-ppxlib-api-change.patch"))
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0q6a43zrwqzdz7aja0k44a2llyjjj5xzi2kigwhsnww3g0r5ig84"))))
+         "1p11fiz4m160hs0xzg4g9rxchp053sz3s3d1lyciqixad1xi47a4"))))
     (build-system dune-build-system)
     (propagated-inputs
-     `(("ocaml-base" ,ocaml-base)
-       ("ocaml-variantslib" ,ocaml-variantslib)
-       ("ocaml-migrate-parsetree" ,ocaml-migrate-parsetree)
-       ("ocaml-ppxlib" ,ocaml-ppxlib)))
+     (list ocaml-base ocaml-variantslib ocaml-migrate-parsetree
+           ocaml-ppxlib))
     (properties
      `((upstream-name . "ppx_variants_conv")
        (ocaml4.07-variant . ,(delay ocaml4.07-ppx-variants-conv))))
@@ -5402,10 +5557,8 @@ variant types.")
          "0c1m65kn27zvwmfwy7kk46ga76yw2a3ik9jygpy1b6nn6pi026w9"))))
     (build-system dune-build-system)
     (propagated-inputs
-     `(("ocaml-base" ,ocaml-base)
-       ("ocaml-ppx-sexp-conv" ,ocaml-ppx-sexp-conv)
-       ("ocaml-migrate-parsetree" ,ocaml-migrate-parsetree)
-       ("ocaml-ppxlib" ,ocaml-ppxlib)))
+     (list ocaml-base ocaml-ppx-sexp-conv ocaml-migrate-parsetree
+           ocaml-ppxlib))
     (properties `((upstream-name . "ppx_custom_printf")
                   (ocaml4.07-variant . ,(delay ocaml4.07-ppx-custom-printf))))
     (synopsis "Printf-style format-strings for user-defined string conversion")
@@ -5501,11 +5654,8 @@ storage of large amounts of data.")
                 "0x4wgdvhgd8a49bzari52jpkykxpv6ncgp5ncda3xgg0a9r49s8n"))
     (build-system dune-build-system)
     (propagated-inputs
-     `(("ocaml-base" ,ocaml-base)
-       ("ocaml-ppx-compare" ,ocaml-ppx-compare)
-       ("ocaml-ppx-sexp-conv" ,ocaml-ppx-sexp-conv)
-        ("ocaml-migrate-parsetree" ,ocaml-migrate-parsetree)
-        ("ocaml-ppxlib" ,ocaml-ppxlib)))
+     (list ocaml-base ocaml-ppx-compare ocaml-ppx-sexp-conv
+           ocaml-migrate-parsetree ocaml-ppxlib))
     (properties `((upstream-name . "ppx_hash")
                   (ocaml4.07-variant . ,(delay ocaml4.07-ppx-hash))))
     (home-page "https://github.com/janestreet/ppx_hash")
@@ -5544,9 +5694,7 @@ hash functions from type exrpessions and definitions.")
     (arguments
      `(#:tests? #f)) ; no test suite
     (propagated-inputs
-     `(("ocaml-base" ,ocaml-base)
-       ("ocaml-migrate-parsetree" ,ocaml-migrate-parsetree)
-       ("ocaml-ppxlib" ,ocaml-ppxlib)))
+     (list ocaml-base ocaml-migrate-parsetree ocaml-ppxlib))
     (properties `((upstream-name . "ppx_enumerate")
                   (ocaml4.07-variant . ,(delay ocaml4.07-ppx-enumerate))))
     (home-page "https://github.com/janestreet/ppx_enumerate")
@@ -5616,9 +5764,7 @@ many values).")
      ;; broken tests
      `(#:tests? #f))
     (propagated-inputs
-     `(("ocaml-base" ,ocaml-base)
-        ("ocaml-migrate-parsetree" ,ocaml-migrate-parsetree)
-        ("ocaml-ppxlib" ,ocaml-ppxlib)))
+     (list ocaml-base ocaml-migrate-parsetree ocaml-ppxlib))
     (properties `((upstream-name . "ppx_here")
                   (ocaml4.07-variant . ,(delay ocaml4.07-ppx-here))))
     (home-page "https://github.com/janestreet/ppx_here")
@@ -5718,7 +5864,7 @@ ocaml values.")
         ("ocaml-ppxlib" ,(package-with-ocaml4.07 ocaml-ppxlib))))
     (properties `((upstream-name . "ppx_sexp_message")))
     (home-page "https://github.com/janestreet/ppx_sexp_message")
-    (synopsis "A ppx rewriter for easy construction of s-expressions")
+    (synopsis "Ppx rewriter for easy construction of s-expressions")
     (description "Ppx_sexp_message aims to ease the creation of s-expressions
 in OCaml.  This is mainly motivated by writing error and debugging messages,
 where one needs to construct a s-expression based on various element of the
@@ -5766,9 +5912,7 @@ context such as function arguments.")
     (build-system dune-build-system)
     (arguments `(#:tests? #f)) ; No tests
     (propagated-inputs
-     `(("ocaml-base" ,ocaml-base)
-       ("ocaml-migrate-parsetree" ,ocaml-migrate-parsetree)
-       ("ocaml-ppxlib" ,ocaml-ppxlib)))
+     (list ocaml-base ocaml-migrate-parsetree ocaml-ppxlib))
     (properties `((upstream-name . "ppx_optional")
                   (ocaml4.07-variant . ,(delay ocaml4.07-ppx-optional))))
     (home-page "https://github.com/janestreet/ppx_optional")
@@ -5806,9 +5950,7 @@ else expression.")
          "1iflgfzs23asw3k6098v84al5zqx59rx2qjw0mhvk56avlx71pkw"))))
     (build-system dune-build-system)
     (propagated-inputs
-     `(("ocaml-base" ,ocaml-base)
-       ("ocaml-stdio" ,ocaml-stdio)
-       ("ocaml-ppxlib" ,ocaml-ppxlib)))
+     (list ocaml-base ocaml-stdio ocaml-ppxlib))
     (properties `((upstream-name . "ppx_optcomp")
                   (ocaml4.07-variant . ,(delay ocaml4.07-ppx-optcomp))))
     (synopsis "Optional compilation for OCaml")
@@ -5837,9 +5979,7 @@ size, the version of the compiler, ...")
                         "1qcrnd86pbr1di5m6z4ps4p15qawwa02jxwz3xfd82hdbjmdwf1s"))
     (build-system dune-build-system)
     (propagated-inputs
-     `(("ocaml-base" ,ocaml-base)
-       ("ocaml-migrate-parsetree" ,ocaml-migrate-parsetree)
-       ("ocaml-ppxlib" ,ocaml-ppxlib)))
+     (list ocaml-base ocaml-migrate-parsetree ocaml-ppxlib))
     (properties `((upstream-name . "ppx_let")
                   (ocaml4.07-variant . ,(delay ocaml4.07-ppx-let))))
     (home-page "https://github.com/janestreet/ppx_let")
@@ -5857,7 +5997,7 @@ match expressions, and if expressions.")
       (janestreet-origin "ppx_let" version
                          "1wdfw6w4xbg97a35yg6bif9gggxniy9ddnrjfw1a0inkl2yamxkj"))
 
-     (properties `(upstream-name . "ppx_let")))))
+     (properties `((upstream-name . "ppx_let"))))))
 
 (define-public ocaml4.07-ppx-fail
   (package
@@ -5900,8 +6040,7 @@ position.")
     (build-system dune-build-system)
     (arguments `(#:test-target "tests"))
     (propagated-inputs
-     `(("ocaml-base" ,ocaml-base)
-       ("ocaml-ppxlib" ,ocaml-ppxlib)))
+     (list ocaml-base ocaml-ppxlib))
     (properties `((upstream-name . "ppx_cold")))
     (synopsis "Syntax extension for indicating cold path")
     (description
@@ -5920,13 +6059,13 @@ https://github.com/ocaml/ocaml/issues/8563.")
                         "1l2rr4jz2q5b35ryn2z146z7m9v6k8krp5gpn8ilib66mnz5zx15"))
     (build-system dune-build-system)
     (propagated-inputs
-     `(("ocaml-base" ,ocaml-base)
-       ("ocaml-ppx-cold" ,ocaml-ppx-cold)
-       ("ocaml-ppx-compare" ,ocaml-ppx-compare)
-       ("ocaml-ppx-here" ,ocaml-ppx-here)
-       ("ocaml-ppx-sexp-conv" ,ocaml-ppx-sexp-conv)
-       ("ocaml-migrate-parsetree" ,ocaml-migrate-parsetree)
-       ("ocaml-ppxlib" ,ocaml-ppxlib)))
+     (list ocaml-base
+           ocaml-ppx-cold
+           ocaml-ppx-compare
+           ocaml-ppx-here
+           ocaml-ppx-sexp-conv
+           ocaml-migrate-parsetree
+           ocaml-ppxlib))
     (properties `((upstream-name . "ppx_assert")
                   (ocaml4.07-variant . ,(delay ocaml4.07-ppx-assert))))
     (home-page "https://github.com/janestreet/ppx_assert")
@@ -5955,7 +6094,7 @@ useful errors on failure.")
 (define-public ocaml-ppx-expect
   (package
     (name "ocaml-ppx-expect")
-    (version "0.14.1")
+    (version "0.14.2")
     (source
      (origin
        (method git-fetch)
@@ -5965,16 +6104,16 @@ useful errors on failure.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0vbbnjrzpyk5p0js21lafr6fcp2wqka89p1876rdf472cmg0l7fv"))))
+         "1v886rsl93wdmaw61z10q8nqshf8hvlznj9gym2ljrjz4cqyjsa4"))))
     (build-system dune-build-system)
     (propagated-inputs
-     `(("ocaml-base" ,ocaml-base)
-       ("ocaml-ppx-here" ,ocaml-ppx-here)
-       ("ocaml-ppx-inline-test" ,ocaml-ppx-inline-test)
-       ("ocaml-stdio" ,ocaml-stdio)
-       ("ocaml-ppxlib" ,ocaml-ppxlib)
-       ("ocaml-migrate-parsetree" ,ocaml-migrate-parsetree)
-       ("ocaml-re" ,ocaml-re)))
+     (list ocaml-base
+           ocaml-ppx-here
+           ocaml-ppx-inline-test
+           ocaml-stdio
+           ocaml-ppxlib
+           ocaml-migrate-parsetree
+           ocaml-re))
     (properties `((upstream-name . "ppx_expect")
                   (ocaml4.07-variant . ,(delay ocaml4.07-ppx-expect))))
     (home-page "https://github.com/janestreet/ppx_expect")
@@ -6013,17 +6152,21 @@ to denote the expected output.")
 (define-public ocaml-ppx-js-style
   (package
     (name "ocaml-ppx-js-style")
-    (version "0.14.0")
+    (version "0.14.1")
     (source
-     (janestreet-origin "ppx_js_style" version
-      "141fgxfipfn5jdaxc946dmp5y4fcnbhxms9maji9ddywgx82ya7l"))
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/janestreet/ppx_js_style")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "16ax6ww9h36xyn9acbm8zxv0ajs344sm37lgj2zd2bvgsqv24kxj"))))
     (build-system dune-build-system)
     (arguments `(#:tests? #f)) ; No tests
     (propagated-inputs
-     `(("ocaml-base" ,ocaml-base)
-       ("ocaml-migrate-parsetree" ,ocaml-migrate-parsetree)
-       ("ocaml-octavius" ,ocaml-octavius)
-       ("ocaml-ppxlib" ,ocaml-ppxlib)))
+     (list ocaml-base ocaml-migrate-parsetree ocaml-octavius ocaml-ppxlib))
     (properties `((upstream-name . "ppx_js_style")
                   (ocaml4.07-variant . ,(delay ocaml4.07-ppx-js-style))))
     (home-page "https://github.com/janestreet/ppx_js_style")
@@ -6087,14 +6230,14 @@ from type definitions.")
     (arguments
      `(#:test-target "."))
     (propagated-inputs
-     `(("ocaml-ppx-compare" ,ocaml-ppx-compare)
-       ("ocaml-ppx-cold" ,ocaml-ppx-cold)
-       ("ocaml-ppx-enumerate" ,ocaml-ppx-enumerate)
-       ("ocaml-ppx-hash" ,ocaml-ppx-hash)
-       ("ocaml-ppx-js-style" ,ocaml-ppx-js-style)
-       ("ocaml-ppx-sexp-conv" ,ocaml-ppx-sexp-conv)
-       ("ocaml-migrate-parsetree" ,ocaml-migrate-parsetree)
-       ("ocaml-ppxlib" ,ocaml-ppxlib)))
+     (list ocaml-ppx-compare
+           ocaml-ppx-cold
+           ocaml-ppx-enumerate
+           ocaml-ppx-hash
+           ocaml-ppx-js-style
+           ocaml-ppx-sexp-conv
+           ocaml-migrate-parsetree
+           ocaml-ppxlib))
     (properties `((upstream-name . "ppx_base")
                   (ocaml4.07-variant . ,(delay ocaml4.07-ppx-base))))
     (home-page "https://github.com/janestreet/ppx_base")
@@ -6461,13 +6604,9 @@ the full Core is not available, such as in Javascript.")
     (arguments
      `(#:package "markup"))
     (propagated-inputs
-     `(("ocaml-bisect-ppx" ,ocaml-bisect-ppx)
-       ("ocaml-uchar" ,ocaml-uchar)
-       ("ocaml-uutf" ,ocaml-uutf)
-       ("ocaml-lwt" ,ocaml-lwt)))
+     (list ocaml-bisect-ppx ocaml-uchar ocaml-uutf ocaml-lwt))
     (native-inputs
-     `(("ocaml-ounit2" ,ocaml-ounit2)
-       ("pkg-config" ,pkg-config)))
+     (list ocaml-ounit2 pkg-config))
     (properties
      `((ocaml4.07-variant . ,(delay (package-with-ocaml4.07 ocaml-markup0.8.0)))))
     (synopsis "Error-recovering functional HTML5 and XML parsers and writers")
@@ -6510,14 +6649,13 @@ stream, and convert everything to UTF-8.")
         (base32
          "0aif4abvfmi9xc1pvw5n5rbm6rzkkpsxyvdn0lanr33rjpvkwdlm"))))
     (native-inputs
-     `(("ocaml-ounit" ,ocaml-ounit)
-       ("pkg-config" ,pkg-config)))
+     (list ocaml-ounit pkg-config))
     (properties '())))
 
 (define-public ocaml-tyxml
   (package
     (name "ocaml-tyxml")
-    (version "4.4.0")
+    (version "4.5.0")
     (source
      (origin
        (method git-fetch)
@@ -6527,17 +6665,14 @@ stream, and convert everything to UTF-8.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1hw4phyadcfgywgh5sj87i76gp56qwxzwlcpfdwjbf6ggag9clmd"))))
+         "0bh66wknc7sx2r63kscp0hg6h73dkv6qpkx0cdz2qp7p28pg2ixz"))))
     (build-system dune-build-system)
     (inputs
-     `(("ocaml-re" ,ocaml-re)
-       ("ocaml-seq" ,ocaml-seq)
-       ("ocaml-uutf" ,ocaml-uutf)
-       ("ocaml-ppx-tools-versioned" ,ocaml-ppx-tools-versioned)
-       ("ocaml-markup" ,ocaml-markup)))
+     (list ocaml-re ocaml-seq ocaml-uutf))
     (native-inputs
-     `(("ocaml-alcotest" ,ocaml-alcotest)))
+     (list ocaml-alcotest))
     (arguments `(#:package "tyxml"))
+    (properties `((ocaml4.07-variant . ,(delay ocaml4.07-tyxml))))
     (home-page "https://github.com/ocsigen/tyxml/")
     (synopsis "TyXML is a library for building correct HTML and SVG documents")
     (description "TyXML provides a set of convenient combinators that uses the
@@ -6549,6 +6684,22 @@ also create your own representation and use it to instantiate a new set of
 combinators.")
     (license license:lgpl2.1)))
 
+(define-public ocaml4.07-tyxml
+  (package-with-ocaml4.07
+    (package
+      (inherit ocaml-tyxml)
+      (version "4.4.0")
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                       (url "https://github.com/ocsigen/tyxml")
+                       (commit version)))
+                (file-name (git-file-name "ocaml-tyxml" version))
+                (sha256
+                 (base32
+                  "1hw4phyadcfgywgh5sj87i76gp56qwxzwlcpfdwjbf6ggag9clmd"))))
+      (properties '()))))
+
 (define-public ocaml-bisect-ppx
   (package
     (name "ocaml-bisect-ppx")
@@ -6565,11 +6716,12 @@ combinators.")
          "1knglw1b2kjr9jnd8cpfzmm581abxxdcx9l3cd2balg6gnac7qk1"))))
     (build-system dune-build-system)
     (propagated-inputs
-     `(("ocaml-ppxlib" ,ocaml-ppxlib)
-       ("ocaml-cmdliner" ,ocaml-cmdliner)))
+     (list ocaml-ppxlib ocaml-cmdliner))
     (arguments
      ;; Tests require ocamlformat which would lead to circular dependencies
      '(#:tests? #f))
+    (properties `((upstream-name . "bisect_ppx")
+                  (ocaml4.07-variant . ,(delay ocaml4.07-bisect-ppx))))
     (home-page "https://github.com/aantron/bisect_ppx")
     (synopsis "Code coverage for OCaml")
     (description "Bisect_ppx helps you test thoroughly.  It is a small
@@ -6581,10 +6733,37 @@ Usage is simple - add package bisect_ppx when building tests, run your tests,
 then run the Bisect_ppx report tool on the generated visitation files.")
     (license license:mpl2.0)))
 
+(define-public ocaml4.07-bisect-ppx
+  (package-with-ocaml4.07
+    (package
+      (inherit ocaml-bisect-ppx)
+      (version "2.4.0")
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/aantron/bisect_ppx")
+               (commit version)))
+         (file-name (git-file-name "ocaml-bisect-ppx" version))
+         (sha256
+          (base32
+           "1njs8xc108rrpx5am5zhhcn6vjva7rsphm8034qp5lgyvnhfgh7q"))))
+      (propagated-inputs
+       `(("ocaml-migrate-parsetree" ,ocaml-migrate-parsetree)
+         ("ocaml-ppx-tools-versioned" ,ocaml4.07-ppx-tools-versioned)
+         ,@(package-propagated-inputs ocaml-bisect-ppx)))
+      (native-inputs
+       `(("ocaml-ounit2" ,ocaml-ounit2)))
+      (arguments
+       `(#:test-target "."
+         ;; tests require git and network
+         #:tests? #f))
+      (properties '((upstream-name . "bisect_ppx"))))))
+
 (define-public ocaml-odoc
   (package
     (name "ocaml-odoc")
-    (version "1.5.2")
+    (version "2.0.2")
     (source
      (origin
        (method git-fetch)
@@ -6593,23 +6772,39 @@ then run the Bisect_ppx report tool on the generated visitation files.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0fqfyz48q7ss5bc4c5phmp4s3ka3vc08b8gfk8fvyryvb4bq27jm"))))
+        (base32 "06rm1bhfp2yvkvidksndwii9v074r0lc9sqfp60q8mfcfd7pj7rx"))))
     (build-system dune-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-test
+           (lambda _
+             ;; test results expects #!/bin/sh but gets a store path instead
+             (substitute* "test/xref2/with.t/run.t"
+               (("#!/bin/sh") (string-append "#!" (which "sh")))))))))
     (inputs
-     `(("ocaml-alcotest" ,ocaml-alcotest)
-       ("ocaml-markup" ,ocaml-markup)
-       ("ocaml-sexplib" ,ocaml-sexplib)
-       ("ocaml-re" ,ocaml-re)
-       ("ocaml-uutf" ,ocaml-uutf)))
-    (native-inputs
-     `(("ocaml-astring" ,ocaml-astring)
-       ("ocaml-cmdliner" ,ocaml-cmdliner)
-       ("ocaml-cppo" ,ocaml-cppo)
-       ("ocaml-fpath" ,ocaml-fpath)
-       ("ocaml-result" ,ocaml-result)
-       ("ocaml-tyxml" ,ocaml-tyxml)
-       ("ocaml-bisect-ppx" ,ocaml-bisect-ppx)
-       ("tidy-html" ,tidy-html)))
+    (list ocaml-astring
+          ocaml-bisect-ppx
+          ocaml-cmdliner
+          ocaml-fmt
+          ocaml-fpath
+          ocaml-logs
+          ocaml-migrate-parsetree
+          ocaml-odoc-parser
+          ocaml-re
+          ocaml-result
+          ocaml-tyxml))
+  (native-inputs
+    (list ocaml-alcotest
+          ocaml-bos
+          ocaml-cppo
+          ocaml-findlib
+          ocaml-lwt
+          ocaml-markup
+          ocaml-ppx-expect
+          ocaml-version
+          ocaml-yojson
+          jq))
     (properties `((ocaml4.07-variant . ,(delay ocaml4.07-odoc))))
     (home-page "https://github.com/ocaml/odoc")
     (synopsis "OCaml documentation generator")
@@ -6638,10 +6833,9 @@ complexity of the OCaml module system.")
            "1jlc6dp3v90r1ra7r0jfw0xs8rylwdz9gymw4rd53h0p17cw1wnj"))))
     (build-system dune-build-system)
     (propagated-inputs
-      `(("ocaml-astring" ,ocaml-astring)
-        ("ocaml-result" ,ocaml-result)))
+      (list ocaml-astring ocaml-result))
     (native-inputs
-      `(("ocaml-ppx-expect" ,ocaml-ppx-expect)))
+      (list ocaml-ppx-expect))
     (home-page "https://github.com/ocaml-doc/odoc-parser")
     (synopsis "Parser for ocaml documentation comments")
     (description
@@ -6667,11 +6861,27 @@ language understood by ocamldoc.")
         (file-name (git-file-name name version))
         (sha256
          (base32 "0z2nisg1vb5xlk41hqw8drvj90v52wli7zvnih6a844cg6xsvvj2"))))
+     (arguments '())
+     (inputs
+      `(("ocaml-alcotest" ,ocaml-alcotest)
+        ("ocaml-markup" ,ocaml-markup)
+        ("ocaml-sexplib" ,ocaml-sexplib)
+        ("ocaml-re" ,ocaml-re)
+        ("ocaml-uutf" ,ocaml-uutf)))
+     (native-inputs
+      `(("ocaml-astring" ,ocaml-astring)
+        ("ocaml-cmdliner" ,ocaml-cmdliner)
+        ("ocaml-cppo" ,ocaml-cppo)
+        ("ocaml-fpath" ,ocaml-fpath)
+        ("ocaml-result" ,ocaml-result)
+        ("ocaml-tyxml" ,ocaml-tyxml)
+        ("ocaml-bisect-ppx" ,ocaml-bisect-ppx)
+        ("tidy-html" ,tidy-html)))
      (properties '()))))
 
-(define-public ocaml4.07-fftw3
+(define-public ocaml-fftw3
   (package
-    (name "ocaml4.07-fftw3")
+    (name "ocaml-fftw3")
     (version "0.8.4")
     (source
      (origin
@@ -6685,17 +6895,11 @@ language understood by ocamldoc.")
          "0l66yagjkwdcib6q55wd8wiap50vi23qiahkghlvm28z7nvbclfk"))))
     (build-system dune-build-system)
     (arguments
-     `(#:tests? #t
-       #:test-target "tests"
-       #:ocaml ,ocaml-4.07
-       #:findlib ,ocaml4.07-findlib
-       #:dune ,ocaml4.07-dune))
+     `(#:test-target "tests"))
     (propagated-inputs
-     `(("fftw" ,fftw)
-       ("fftwf" ,fftwf)))
+     (list fftw fftwf))
     (native-inputs
-     `(("ocaml-cppo" ,(package-with-ocaml4.07 ocaml-cppo))
-       ("ocaml-lacaml" ,ocaml4.07-lacaml)))
+     (list ocaml-cppo ocaml-lacaml))
     (home-page
      "https://github.com/Chris00/fftw-ocaml")
     (synopsis
@@ -6705,10 +6909,10 @@ language understood by ocamldoc.")
 library FFTW.")
     (license license:lgpl2.1))) ; with static linking exception.
 
-(define-public ocaml4.07-lacaml
+(define-public ocaml-lacaml
   (package
-    (name "ocaml4.07-lacaml")
-    (version "11.0.5")
+    (name "ocaml-lacaml")
+    (version "11.0.8")
     (source
      (origin
        (method git-fetch)
@@ -6718,18 +6922,12 @@ library FFTW.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "180yb79a3qgx067qcpm50q12hrimjygf06rgkzbish9d1zfm670c"))))
+         "115535kphchh2a434b48b408x9794j8zzrsdmacsgqdsrgy3rck4"))))
     (build-system dune-build-system)
     (arguments
-     `(#:tests? #f ; No test target.
-       #:ocaml ,ocaml-4.07
-       #:findlib ,ocaml4.07-findlib
-       #:dune ,ocaml4.07-dune))
+     `(#:tests? #f)) ; No test target.
     (native-inputs
-     `(("openblas" ,openblas)
-       ("lapack" ,lapack)
-       ("ocaml-base" ,(package-with-ocaml4.07 ocaml-base))
-       ("ocaml-stdio" ,(package-with-ocaml4.07 ocaml-stdio))))
+     (list openblas lapack ocaml-base ocaml-stdio))
     (home-page "https://mmottl.github.io/lacaml/")
     (synopsis
      "OCaml-bindings to BLAS and LAPACK")
@@ -6742,22 +6940,16 @@ convenience functions for vectors and matrices.")
 (define-public ocaml-cairo2
   (package
     (name "ocaml-cairo2")
-    (version "0.6.1")
+    (version "0.6.2")
     (source (origin
               (method git-fetch)
               (uri (git-reference
                     (url "https://github.com/Chris00/ocaml-cairo")
                     (commit version)))
               (file-name (git-file-name name version))
-              (patches
-               (search-patches
-                ;; NOTE: This patch will be obsolete on the
-                ;; next tagged release. Remove it at that
-                ;; point.
-                "ocaml-cairo2-caml_ba_array-fix.patch"))
               (sha256
                (base32
-                "0wzysis9fa850s68qh8vrvqc6svgllhwra3kzll2ibv0wmdqrich"))))
+                "04rp5y1rlq1pw592yywhvqd5x7csmyi9ad4f32g99nakb10s4nhx"))))
     (build-system dune-build-system)
     (arguments
      `(#:test-target "tests"))
@@ -6766,7 +6958,7 @@ convenience functions for vectors and matrices.")
        ("gtk+-2" ,gtk+-2)
        ("lablgtk" ,lablgtk)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/Chris00/ocaml-cairo")
     (synopsis "Binding to Cairo, a 2D Vector Graphics Library")
     (description "Ocaml-cairo2 is a binding to Cairo, a 2D graphics library
@@ -6778,7 +6970,7 @@ and SVG file output.")
 (define-public ocaml-version
   (package
     (name "ocaml-version")
-    (version "3.0.0")
+    (version "3.4.0")
     (source
      (origin
        (method git-fetch)
@@ -6788,9 +6980,10 @@ and SVG file output.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "13770mp6adjjbx63zsbh6506dqxz241chw8c3y403sxpw45hnaw6"))))
+         "1c13zk1qna59m5z9jx7da3p7cxd48scpyk7zg7gi6gc6hx5hhjx8"))))
     (build-system dune-build-system)
     (arguments `(#:tests? #f))          ; no tests
+    (properties '((upstream-name . "ocaml-version")))
     (home-page
      "https://github.com/ocurrent/ocaml-version")
     (synopsis
@@ -6816,20 +7009,17 @@ variants.")
                 "1w2vx4my9z6n57vjvsa3b9vwkbdzs1kq0cc58rf088qrh2lrx2ba"))))
     (build-system dune-build-system)
     (inputs
-     `(("ocaml-fmt" ,ocaml-fmt)
-       ("ocaml-astring" ,ocaml-astring)
-       ("ocaml-logs" ,ocaml-logs)
-       ("ocaml-cmdliner" ,ocaml-cmdliner)
-       ("ocaml-re" ,ocaml-re)
-       ("ocaml-result" ,ocaml-result)
-       ("ocaml-migrate-parsetree" ,ocaml-migrate-parsetree-1)
-       ("ocaml-odoc" ,ocaml-odoc)
-       ("ocaml-odoc-parser" ,ocaml-odoc-parser)
-       ("ocaml-version" ,ocaml-version)))
+     (list ocaml-fmt
+           ocaml-astring
+           ocaml-logs
+           ocaml-cmdliner
+           ocaml-re
+           ocaml-result
+           ocaml-odoc
+           ocaml-odoc-parser
+           ocaml-version))
     (native-inputs
-     `(("ocaml-cppo" ,ocaml-cppo)
-       ("ocaml-lwt" ,ocaml-lwt)
-       ("ocaml-alcotest" ,ocaml-alcotest)))
+     (list ocaml-cppo ocaml-lwt ocaml-alcotest))
     (home-page
      "https://github.com/realworldocaml/mdx")
     (synopsis
@@ -6888,8 +7078,7 @@ the FParsec library for FSharp by Stephan Tolksdorf.")
      '(#:package "mparser-re"
        #:tests? #f))
     (propagated-inputs
-     `(("ocaml-mparser" ,ocaml-mparser)
-       ("ocaml-re" ,ocaml-re)))
+     (list ocaml-mparser ocaml-re))
     (synopsis "MParser plugin for RE-based regular expressions")
     (description "This package provides RE-based regular expressions
 support for Mparser.")))
@@ -6903,8 +7092,7 @@ support for Mparser.")))
      '(#:package "mparser-pcre"
        #:tests? #f))
     (propagated-inputs
-     `(("ocaml-mparser" ,ocaml-mparser)
-       ("ocaml-pcre" ,ocaml-pcre)))
+     (list ocaml-mparser ocaml-pcre))
     (synopsis "MParser plugin for PCRE-based regular expressions")
     (description "This package provides PCRE-based regular expressions
 support for Mparser.")))
@@ -6939,14 +7127,14 @@ support for Mparser.")))
                (("\\(name lablgtk3\\)")
                 (string-append "(name lablgtk3)\n(version " ,version ")"))))))))
     (propagated-inputs
-     `(("ocaml-cairo2" ,ocaml-cairo2)))
+     (list ocaml-cairo2))
     (inputs
      `(("camlp5" ,camlp5)
        ("gtk+" ,gtk+)
        ("gtksourceview-3" ,gtksourceview-3)
        ("gtkspell3" ,gtkspell3)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/garrigue/lablgtk")
     (synopsis "OCaml interface to GTK+3")
     (description "LablGtk is an OCaml interface to GTK+ 1.2, 2.x and 3.x.  It
@@ -6990,10 +7178,9 @@ generate OCaml code from .glade files), libpanel, librsvg and quartz.")
     (build-system ocaml-build-system)
     (properties `((upstream-name . "reactiveData")))
     (native-inputs
-     `(("ocamlbuild" ,ocamlbuild)
-       ("opam" ,opam)))
+     (list ocamlbuild opam))
     (propagated-inputs
-     `(("ocaml-react" ,ocaml-react)))
+     (list ocaml-react))
     (home-page "https://github.com/ocsigen/reactiveData")
     (synopsis "Declarative events and signals for OCaml")
     (description
@@ -7006,7 +7193,7 @@ client chooses the concrete timeline.")
 (define-public ocaml-uucd
   (package
     (name "ocaml-uucd")
-    (version "13.0.0")
+    (version "14.0.0")
     (source
      (origin
        (method url-fetch)
@@ -7014,7 +7201,7 @@ client chooses the concrete timeline.")
                            "uucd-" version ".tbz"))
        (sha256
         (base32
-         "1fg77hg4ibidkv1x8hhzl8z3rzmyymn8m4i35jrdibb8adigi8v2"))))
+         "0fc737v5gj3339jx4x9xr096lxrpwvp6vaiylhavcvsglcwbgm30"))))
     (build-system ocaml-build-system)
     (arguments
      '(#:build-flags '("build" "--tests" "true")
@@ -7022,12 +7209,9 @@ client chooses the concrete timeline.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (propagated-inputs
-     `(("ocaml-xmlm" ,ocaml-xmlm)))
+     (list ocaml-xmlm))
     (native-inputs
-     `(("opam" ,opam)
-       ("ocaml-findlib" ,ocaml-findlib)
-       ("ocamlbuild" ,ocamlbuild)
-       ("ocaml-topkg" ,ocaml-topkg)))
+     (list opam ocaml-findlib ocamlbuild ocaml-topkg))
     (home-page "https://erratique.ch/software/uucd")
     (synopsis "Unicode character database decoder for OCaml")
     (description "Uucd is an OCaml module to decode the data of the Unicode
@@ -7039,7 +7223,7 @@ representations can be extracted.")
 (define-public ocaml-uucp
   (package
     (name "ocaml-uucp")
-    (version "13.0.0")
+    (version "14.0.0")
     (source
      (origin
        (method url-fetch)
@@ -7047,7 +7231,7 @@ representations can be extracted.")
                            "uucp-" version ".tbz"))
        (sha256
         (base32
-         "19kf8ypxaakacgg1dwwfzkc2zicaj88cmw11fw2z7zl24dn4gyiq"))))
+         "1yx9nih3d9prb9zizq8fzmmqylf24a6yifhf81h33znrj5xn1mpj"))))
     (build-system ocaml-build-system)
     (arguments
      '(#:build-flags '("build" "--tests" "true")
@@ -7055,13 +7239,13 @@ representations can be extracted.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
-     `(("opam" ,opam)
-       ("ocaml-findlib" ,ocaml-findlib)
-       ("ocamlbuild" ,ocamlbuild)
-       ("ocaml-topkg" ,ocaml-topkg)
-       ("ocaml-uucd" ,ocaml-uucd)
-       ("ocaml-uunf" ,ocaml-uunf)
-       ("ocaml-uutf" ,ocaml-uutf)))
+     (list opam
+           ocaml-findlib
+           ocamlbuild
+           ocaml-topkg
+           ocaml-uucd
+           ocaml-uunf
+           ocaml-uutf))
     (home-page "https://erratique.ch/software/uucp")
     (synopsis "Unicode character properties for OCaml")
     (description "Uucp is an OCaml library providing efficient access to a
@@ -7071,7 +7255,7 @@ selection of character properties of the Unicode character database.")
 (define-public ocaml-uuseg
   (package
     (name "ocaml-uuseg")
-    (version "13.0.0")
+    (version "14.0.0")
     (source
      (origin
        (method url-fetch)
@@ -7079,7 +7263,7 @@ selection of character properties of the Unicode character database.")
                            "uuseg-" version ".tbz"))
        (sha256
         (base32
-         "1a635j8ra6p27g1ivfln3387lhwqmf6vq4r6bn7b6n1qsqyi1rls"))))
+         "1g9zyzjkhqxgbb9mh3cgaawscwdazv6y8kdqvmy6yhnimmfqv25p"))))
     (build-system ocaml-build-system)
     (arguments
      '(#:build-flags '("build" "--tests" "true")
@@ -7087,14 +7271,9 @@ selection of character properties of the Unicode character database.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (propagated-inputs
-     `(("ocaml-uucp" ,ocaml-uucp)
-       ("ocaml-uutf" ,ocaml-uutf)
-       ("ocaml-cmdliner" ,ocaml-cmdliner)))
+     (list ocaml-uucp ocaml-uutf ocaml-cmdliner))
     (native-inputs
-     `(("opam" ,opam)
-       ("ocaml-findlib" ,ocaml-findlib)
-       ("ocamlbuild" ,ocamlbuild)
-       ("ocaml-topkg" ,ocaml-topkg)))
+     (list opam ocaml-findlib ocamlbuild ocaml-topkg))
     (home-page "https://erratique.ch/software/uuseg")
     (synopsis "Unicode text segmentation for OCaml")
     (description "Uuseg is an OCaml library for segmenting Unicode text.  It
@@ -7110,7 +7289,7 @@ representation.")
 (define-public ocaml-fix
   (package
     (name "ocaml-fix")
-    (version "20201120")
+    (version "20211125")
     (source
       (origin
         (method git-fetch)
@@ -7120,7 +7299,7 @@ representation.")
         (file-name (git-file-name name version))
         (sha256
           (base32
-            "1j40mg1gy03c0djzx3nzmpvnl984s14n04zwcmp2xnlidq48kvs4"))))
+            "00vq2das1l8xca013z7z7jy5622fsy3jha2cj72psp22wx9199l1"))))
     (build-system dune-build-system)
     (arguments
      ;; No tests.
@@ -7141,7 +7320,7 @@ that involve memoization and recursion.")
        ;; No separate test suite from dune.
        #:tests? #f))
     (propagated-inputs
-     `(("ocaml-odoc" ,ocaml-odoc)))
+     (list ocaml-odoc))
     (synopsis "Embed build information inside an executable")
     (description "This package allows one to access information about how the
 executable was built, such as the version of the project at which it was built
@@ -7149,10 +7328,33 @@ or the list of statically linked libraries with their versions.  It supports
 reporting the version from the version control system during development to
 get an precise reference of when the executable was built.")))
 
+(define-public ocaml-either
+  (package
+    (name "ocaml-either")
+    (version "1.0.0")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/mirage/either")
+               (commit version)))
+        (file-name (git-file-name name version))
+        (sha256
+          (base32 "099p1m24vz5i0043zcfp88krzjsa2qbrphrm4bnx84gif5vgkxwm"))))
+    (build-system dune-build-system)
+    (arguments
+     ;; no tests
+     `(#:tests? #f))
+    (home-page "https://github.com/mirage/either")
+    (synopsis "Compatibility Either module")
+    (description "This library is a compatibility module for the Either module
+defined in OCaml 4.12.0.")
+    (license license:expat)))
+
 (define-public ocamlformat
   (package
     (name "ocamlformat")
-    (version "0.19.0")
+    (version "0.20.0")
     (source
       (origin
         (method git-fetch)
@@ -7162,7 +7364,7 @@ get an precise reference of when the executable was built.")))
         (file-name (git-file-name name version))
         (sha256
           (base32
-            "0dp4pkznz9yvqx9gxwbid1z2b8ajkr8i27zay9ghx69624hz3i4z"))))
+            "0zhvhb8ky0danmfvp4vvbh0pg89d7r7ka6m3q81vlyvb7gk08r6r"))))
     (build-system dune-build-system)
     (arguments
      '(#:package "ocamlformat"
@@ -7170,24 +7372,23 @@ get an precise reference of when the executable was built.")))
        ;; produced format is for test/cli/stdin.t
        #:tests? #f))
     (propagated-inputs
-      `(("ocaml-version" ,ocaml-version)
-        ("ocaml-base" ,ocaml-base)
-        ("ocaml-cmdliner" ,ocaml-cmdliner)
-        ("ocaml-dune-build-info" ,ocaml-dune-build-info)
-        ("ocaml-fix" ,ocaml-fix)
-        ("ocaml-fpath" ,ocaml-fpath)
-        ("ocaml-menhir" ,ocaml-menhir)
-        ("ocaml-odoc" ,ocaml-odoc)
-        ("ocaml-ppxlib" ,ocaml-ppxlib)
-        ("ocaml-re" ,ocaml-re)
-        ("ocaml-odoc-parser" ,ocaml-odoc-parser)
-        ("ocaml-stdio" ,ocaml-stdio)
-        ("ocaml-uuseg" ,ocaml-uuseg)
-        ("ocaml-uutf" ,ocaml-uutf)))
+      (list ocaml-version
+            ocaml-base
+            ocaml-cmdliner
+            ocaml-dune-build-info
+            ocaml-either
+            ocaml-fix
+            ocaml-fpath
+            ocaml-menhir
+            ocaml-odoc
+            ocaml-ppxlib
+            ocaml-re
+            ocaml-odoc-parser
+            ocaml-stdio
+            ocaml-uuseg
+            ocaml-uutf))
     (native-inputs
-      `(("ocaml-alcotest" ,ocaml-alcotest)
-        ("ocaml-ocp-indent" ,ocaml-ocp-indent)
-        ("ocaml-bisect-ppx" ,ocaml-bisect-ppx)))
+      (list ocaml-alcotest ocaml-ocp-indent ocaml-bisect-ppx))
     (home-page "https://github.com/ocaml-ppx/ocamlformat")
     (synopsis "Auto-formatter for OCaml code")
     (description "OCamlFormat is a tool to automatically format OCaml code in
@@ -7197,7 +7398,7 @@ a uniform style.")
 (define-public ocaml-bigstringaf
   (package
     (name "ocaml-bigstringaf")
-    (version "0.7.0")
+    (version "0.8.0")
     (home-page "https://github.com/inhabitedtype/bigstringaf")
     (source
      (origin
@@ -7208,15 +7409,14 @@ a uniform style.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1q1sqxzdnlrpl95ccrhl7lwy3zswgd9rbn19ildclh0lyi2vazbj"))))
+         "0z69g3bpgw4p7z9h5j70w75rnxfrd8c7nlhqq6xvvkkgbxafm1ll"))))
     (build-system dune-build-system)
     (arguments
      '(#:test-target "."))
     (propagated-inputs
-     `(("ocaml-bigarray-compat" ,ocaml-bigarray-compat)))
+     (list ocaml-bigarray-compat))
     (native-inputs
-     `(("ocaml-alcotest" ,ocaml-alcotest)
-       ("pkg-config" ,pkg-config)))
+     (list ocaml-alcotest pkg-config))
     (synopsis
      "Bigstring intrinsics and fast blits based on memcpy/memmove")
     (description
@@ -7228,6 +7428,79 @@ between Bigstrings and other string-like types.  @code{bigstringaf} provides
 these missing pieces.")
     (license license:bsd-3)))
 
+(define-public ocaml-trie
+  (package
+    (name "ocaml-trie")
+    (version "1.0.0")
+    (home-page "https://github.com/kandu/trie/")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url home-page)
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0s7p9swjqjsqddylmgid6cv263ggq7pmb734z4k84yfcrgb6kg4g"))))
+    (build-system dune-build-system)
+    (arguments
+     '(#:tests? #f))                    ;no tests
+    (synopsis "Strict impure trie tree")
+    (description
+     "This module implements strict impure trie tree data structure for
+OCaml.")
+    (license license:expat)))
+
+(define-public ocaml-mew
+  (package
+    (name "ocaml-mew")
+    (version "0.1.0")
+    (home-page "https://github.com/kandu/mew")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url home-page)
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0417xsghj92v3xa5q4dk4nzf2r4mylrx2fd18i7cg3nzja65nia2"))))
+    (build-system dune-build-system)
+    (propagated-inputs
+     (list ocaml-result ocaml-trie))
+    (native-inputs
+     (list ocaml-ppx-expect))
+    (synopsis "General modal editing engine generator")
+    (description
+     "This package provides the core modules of Modal Editing Witch, a general
+modal editing engine generator.")
+    (license license:expat)))
+
+(define-public ocaml-mew-vi
+  (package
+    (name "ocaml-mew-vi")
+    (version "0.5.0")
+    (home-page "https://github.com/kandu/mew_vi")
+    (source
+      (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url home-page)
+             (commit version)))
+       (file-name (git-file-name name version))
+        (sha256
+          (base32 "0lihbf822k5zasl60w5mhwmdkljlq49c9saayrws7g4qc1j353r8"))))
+    (build-system dune-build-system)
+    (propagated-inputs
+      (list ocaml-mew ocaml-react))
+    (native-inputs
+     (list ocaml-ppx-expect))
+    (properties `((upstream-name . "mew_vi")))
+    (synopsis "Modal editing VI-like editing engine generator")
+    (description "This module provides a vi-like modal editing engine
+generator.")
+    (license license:expat)))
+
 (define-public ocaml-syntax-shims
   (package
     (name "ocaml-syntax-shims")
@@ -7249,8 +7522,8 @@ these missing pieces.")
     (synopsis
      "Backport new syntax to older OCaml versions")
     (description
-     "This packages backports new features of the language to older
-compilers, such as let+.")
+     "This package backports new language features such as @code{let+} to older
+OCaml compilers.")
     (license license:expat)))
 
 (define-public ocaml-angstrom
@@ -7274,11 +7547,9 @@ compilers, such as let+.")
      '(#:package "angstrom"
        #:test-target "."))
     (propagated-inputs
-     `(("ocaml-bigstringaf" ,ocaml-bigstringaf)))
+     (list ocaml-bigstringaf))
     (native-inputs
-     `(("ocaml-alcotest" ,ocaml-alcotest)
-       ("ocaml-ppx-let" ,ocaml-ppx-let)
-       ("ocaml-syntax-shims" ,ocaml-syntax-shims)))
+     (list ocaml-alcotest ocaml-ppx-let ocaml-syntax-shims))
     (synopsis "Parser combinators built for speed and memory-efficiency")
     (description
      "Angstrom is a parser-combinator library that makes it easy to write
@@ -7293,7 +7564,7 @@ Parsers are backtracking by default and support unbounded lookahead.")
 (define-public ocaml-graphics
   (package
     (name "ocaml-graphics")
-    (version "5.1.1")
+    (version "5.1.2")
     (home-page "https://github.com/ocaml/graphics")
     (source
      (origin
@@ -7304,10 +7575,10 @@ Parsers are backtracking by default and support unbounded lookahead.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "14w07ydji2nbdk366nfp2pzs9484xp9vqv63n345id13v48z8bfi"))))
+         "1q20f8y6ijxbvzik2ns4yl3w54q5z8kd0pby8i8c64a04hvly08m"))))
     (build-system dune-build-system)
     (propagated-inputs
-     `(("libx11" ,libx11)))
+     (list libx11))
     (synopsis "The OCaml graphics library")
     (description
      "The graphics library provides a set of portable drawing primitives.
@@ -7324,10 +7595,8 @@ up to OCaml 4.08.")
      '(#:package "uri-sexp"
        #:test-target "."))
     (propagated-inputs
-      `(("ocaml-uri" ,ocaml-uri)
-        ("ocaml-ppx-sexp-conv" ,ocaml-ppx-sexp-conv)
-        ("ocaml-sexplib0" ,ocaml-sexplib0)))
-    (native-inputs `(("ocaml-ounit" ,ocaml-ounit)))
+      (list ocaml-uri ocaml-ppx-sexp-conv ocaml-sexplib0))
+    (native-inputs (list ocaml-ounit))
     (synopsis "RFC3986 URI/URL parsing library")
     (description "This package adds S-exp support to @code{ocaml-uri}.")))
 
@@ -7350,17 +7619,15 @@ up to OCaml 4.08.")
      '(#:package "cohttp"
        #:test-target "cohttp_test/src"))
     (propagated-inputs
-      `(("ocaml-re" ,ocaml-re)
-        ("ocaml-uri" ,ocaml-uri)
-        ("ocaml-uri-sexp" ,ocaml-uri-sexp)
-        ("ocaml-sexplib0" ,ocaml-sexplib0)
-        ("ocaml-ppx-sexp-conv" ,ocaml-ppx-sexp-conv)
-        ("ocaml-stringext" ,ocaml-stringext)
-        ("ocaml-base64" ,ocaml-base64)))
+      (list ocaml-re
+            ocaml-uri
+            ocaml-uri-sexp
+            ocaml-sexplib0
+            ocaml-ppx-sexp-conv
+            ocaml-stringext
+            ocaml-base64))
     (native-inputs
-      `(("ocaml-fmt" ,ocaml-fmt)
-        ("ocaml-jsonm" ,ocaml-jsonm)
-        ("ocaml-alcotest" ,ocaml-alcotest)))
+      (list ocaml-fmt ocaml-jsonm ocaml-alcotest))
     (home-page "https://github.com/mirage/ocaml-cohttp")
     (synopsis "OCaml library for HTTP clients and servers")
     (description
@@ -7372,7 +7639,7 @@ libraries.")
 (define-public js-of-ocaml
   (package
     (name "js-of-ocaml")
-    (version "3.9.1")
+    (version "3.11.0")
     (source
      (origin
        (method git-fetch)
@@ -7381,26 +7648,35 @@ libraries.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "00hdjaj94j3nc6f6wbbpx59h4yc79siphs34i1hry11r56paaqyk"))))
+        (base32 "1x5f1ph9wgx0mgyibssssnrcwp69ihw66gzhsnz9h79czgzyjpp2"))))
     (build-system dune-build-system)
-    (arguments `(#:test-target "."))
+    (arguments
+     `(#:test-target "."
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'fix-failing-test
+           (lambda _
+             ;; Formating difference
+             (with-output-to-file "compiler/tests-jsoo/bin/error2.expected"
+               (lambda _
+                 (format #t
+                         "Fatal error: exception Match_failure(\
+\"compiler/tests-jsoo/bin/error2.ml\", 11, 2)\n\n"))))))))
     (propagated-inputs
-     `(("ocaml-ppxlib" ,ocaml-ppxlib)
-       ("ocaml-uchar" ,ocaml-uchar)
-       ("ocaml-menhir" ,ocaml-menhir)
-       ("ocaml-reactivedata" ,ocaml-reactivedata)
-       ("ocaml-cmdliner" ,ocaml-cmdliner)
-       ("ocaml-lwt" ,ocaml-lwt)
-       ("ocaml-tyxml" ,ocaml-tyxml)
-       ("ocaml-re" ,ocaml-re)
-       ("ocaml-uutf" ,ocaml-uutf)
-       ("ocaml-graphics" ,ocaml-graphics)
-       ("ocaml-yojson" ,ocaml-yojson)))
+     (list ocaml-ppxlib
+           ocaml-uchar
+           ocaml-menhir
+           ocaml-reactivedata
+           ocaml-cmdliner
+           ocaml-lwt
+           ocaml-tyxml
+           ocaml-re
+           ocaml-uutf
+           ocaml-graphics
+           ocaml-yojson))
     (native-inputs
      ;; for tests
-     `(("node" ,node)
-       ("ocaml-ppx-expect" ,ocaml-ppx-expect)
-       ("ocaml-num" ,ocaml-num)))
+     (list node ocaml-ppx-expect ocaml-num))
     (properties `((upstream-name . "js_of_ocaml")))
     (home-page "https://ocsigen.org/js_of_ocaml/")
     (synopsis "Compiler from OCaml bytecode to Javascript")
@@ -7429,10 +7705,11 @@ browsers and Node.js.")
               #t)))))
     (native-inputs
      `(("which" ,which)
-       ("texlive" ,(texlive-union (list texlive-fonts-ec texlive-preprint
-                                        texlive-latex-hyperref texlive-bibtex)))))
+       ("texlive" ,(texlive-updmap.cfg
+                    (list texlive-fonts-ec texlive-preprint
+                          texlive-hyperref texlive-bibtex)))))
     (propagated-inputs
-     `(("hevea" ,hevea)))
+     (list hevea))
     (home-page "https://www.lri.fr/~filliatr/bibtex2html/")
     (synopsis "BibTeX to HTML translator")
     (description "This package allows you to produce, from a set of
diff --git a/gnu/packages/ocr.scm b/gnu/packages/ocr.scm
index a60aeaa3b5..de321bb53f 100644
--- a/gnu/packages/ocr.scm
+++ b/gnu/packages/ocr.scm
@@ -63,7 +63,7 @@
               (base32
                "0divffvcaim89g4pvqs8kslbcxi475bcl3b4ynphf284k9zfdgx9"))))
     (build-system gnu-build-system)
-    (native-inputs `(("lzip" ,lzip)))
+    (native-inputs (list lzip))
     (home-page "https://www.gnu.org/software/ocrad/")
     (synopsis "Optical character recognition based on feature extraction")
     (description
@@ -182,7 +182,7 @@ monospaced or proportional.")
        ("sane-backends" ,sane-backends)
        ("qtbase" ,qtbase-5)
        ("qtspell" ,qtspell)
-       ("quazip" ,quazip)
+       ("quazip" ,quazip-0)
        ("tesseract" ,tesseract-ocr)))
     (home-page "https://github.com/manisandro/gImageReader")
     (synopsis "Qt front-end to tesseract-ocr")
@@ -269,5 +269,5 @@ that allows us to create any hand-written recognition systems with low-cost.")
              (chdir "zinnia/python")
              #t)))))
     (inputs
-     `(("zinnia" ,zinnia)))))
+     (list zinnia))))
 
diff --git a/gnu/packages/onc-rpc.scm b/gnu/packages/onc-rpc.scm
index 8b3892d2f0..f1cab94e08 100644
--- a/gnu/packages/onc-rpc.scm
+++ b/gnu/packages/onc-rpc.scm
@@ -37,7 +37,7 @@
 (define-public libtirpc
   (package
     (name "libtirpc")
-    (version "1.2.5")
+    (version "1.3.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/libtirpc/libtirpc/"
@@ -45,27 +45,23 @@
                                   version ".tar.bz2"))
               (sha256
                (base32
-                "1jl6a5kkw2vrp4gb6pmvf72rqimywvwfb9f7iz2xjg4wgq63bdpk"))))
+                "05zf16ilwwkzv4cccaac32nssrj3rg444n9pskiwbgk6y359an14"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags '("--disable-static")
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'remote-dangling-symlink
-           (lambda _
+         (add-after 'unpack 'adjust-netconfig-reference
+           (lambda* (#:key outputs #:allow-other-keys)
              (substitute* '("man/netconfig.5"
                             "man/getnetconfig.3t"
                             "man/getnetpath.3t"
                             "man/rpc.3t"
                             "src/getnetconfig.c"
                             "tirpc/netconfig.h")
-               (("/etc/netconfig") (string-append %output "/etc/netconfig")))
-
-             ;; Remove the dangling symlinks since it breaks the
-             ;; 'patch-source-shebangs' file tree traversal.
-             (delete-file "INSTALL")
-             #t)))))
-    (inputs `(("mit-krb5" ,mit-krb5)))
+               (("/etc/netconfig") (string-append (assoc-ref outputs "out")
+                                                  "/etc/netconfig"))))))))
+    (inputs (list mit-krb5))
     (home-page "https://sourceforge.net/projects/libtirpc/")
     (synopsis "Transport-independent Sun/ONC RPC implementation")
     (description
@@ -78,9 +74,7 @@ IPv4 and IPv6.  ONC RPC is notably used by the network file system (NFS).")
   (package/inherit libtirpc
     (name "libtirpc-hurd")
     (source (origin (inherit (package-source libtirpc))
-                    (patches (append (origin-patches (package-source libtirpc))
-                                     (search-patches "libtirpc-hurd.patch"
-                                                     "libtirpc-hurd-client.patch")))))
+                    (patches (search-patches "libtirpc-hurd.patch"))))
     (arguments
      (substitute-keyword-arguments (package-arguments libtirpc)
        ((#:configure-flags flags ''())
@@ -107,10 +101,9 @@ IPv4 and IPv6.  ONC RPC is notably used by the network file system (NFS).")
      `(#:configure-flags
        `("--with-systemdsystemunitdir=no" "--enable-warmstarts")))
     (inputs
-     `(("libnsl" ,libnsl)
-       ("libtirpc" ,libtirpc)))
+     (list libnsl libtirpc))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://rpcbind.sourceforge.net/")
     (synopsis "Server to convert RPC program numbers into universal addresses")
     (description
@@ -162,7 +155,7 @@ from the protocol files.")
        ("libtool" ,libtool)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("libtirpc" ,libtirpc)))
+     (list libtirpc))
     (synopsis "Public client interface for NIS(YP) and NIS+")
     (description "Libnsl is the public client interface for the Network
 Information Service / Yellow Pages (NIS/YP) and NIS+.  It includes IPv6 support.
diff --git a/gnu/packages/openbox.scm b/gnu/packages/openbox.scm
index 00c93c3864..873592c19e 100644
--- a/gnu/packages/openbox.scm
+++ b/gnu/packages/openbox.scm
@@ -22,6 +22,7 @@
   #:use-module ((guix licenses) #:select (gpl2+))
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix utils)
   #:use-module (guix build-system gnu)
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages gettext)
@@ -47,19 +48,19 @@
                (base32
                 "0vg2y1qddsdxkjv806mzpvmkgzliab8ll4s7zm7ma5jnriamirxb"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (propagated-inputs `(("python2-pyxdg" ,python2-pyxdg)))
-    (inputs `(("imlib2" ,imlib2)
-              ("libxml2" ,libxml2)
-              ("librsvg" ,librsvg)
-              ("libsm" ,libsm)
-              ("libxcursor" ,libxcursor)
-              ("libxinerama" ,libxinerama)
-              ("libxml2" ,libxml2)
-              ("libxrandr" ,libxrandr)
-              ("libxft" ,libxft)
-              ("pango" ,pango)
-              ("python-2" ,python-2)))
+    (native-inputs (list pkg-config))
+    (propagated-inputs (list python2-pyxdg))
+    (inputs (list imlib2
+                  libxml2
+                  (librsvg-for-system)
+                  libsm
+                  libxcursor
+                  libxinerama
+                  libxml2
+                  libxrandr
+                  libxft
+                  pango
+                  python-2))
     (synopsis "Box style window manager")
     (description
      "Openbox is a highly configurable, next generation window manager with
diff --git a/gnu/packages/opencl.scm b/gnu/packages/opencl.scm
index 2d5ccf0105..940f52587e 100644
--- a/gnu/packages/opencl.scm
+++ b/gnu/packages/opencl.scm
@@ -109,7 +109,7 @@
     (native-inputs
      `(("python" ,python-wrapper)))
     (propagated-inputs
-     `(("opencl-headers" ,opencl-headers)))
+     (list opencl-headers))
     (arguments
      `(#:configure-flags (list "-DBUILD_EXAMPLES=OFF" "-DBUILD_TESTS=OFF")
        ;; The regression tests require a lot more dependencies.
@@ -141,7 +141,7 @@
             (variable "OCL_ICD_VENDORS")
             (files '("etc/OpenCL/vendors")))))
     (home-page "https://github.com/KhronosGroup/OpenCL-ICD-Loader")
-    (inputs `(("opencl-headers" ,opencl-headers)))
+    (inputs (list opencl-headers))
     (synopsis "OpenCL Installable Client Driver")
     (description
      "OpenCL defines an Installable Client Driver (ICD) mechanism to allow
@@ -176,9 +176,9 @@ This package contains the Khronos official OpenCL ICD Loader.")
         (base32 "1sfxp6ai83i0vwdg7b05h0k07q6873q1z1avnyksj5zmzdnxya6j"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("opencl-headers" ,opencl-headers)))
+     (list opencl-headers))
     (inputs
-     `(("opencl-icd-loader" ,opencl-icd-loader)))
+     (list opencl-icd-loader))
     (arguments
      `(#:make-flags
        (list ,(string-append "CC=" (cc-for-target))
@@ -213,8 +213,7 @@ the system.")
         ;; There's a suspicious .isa binary file under kernels/.
         ;; Remove it.
         '(for-each delete-file (find-files "." "\\.isa$")))))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("python" ,python)))
+    (native-inputs (list pkg-config python))
     (inputs `(("clang@3.7" ,clang-3.7)
               ("clang-runtime@3.7" ,clang-runtime-3.7)
               ("glu" ,glu)
@@ -289,13 +288,10 @@ back-end for the LLVM compiler framework.")
        (file-name (git-file-name name version))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("libltdl" ,libltdl)
-       ("pkg-config" ,pkg-config)))
+     (list libltdl pkg-config))
     (inputs
-     `(("clang" ,clang)
-       ("hwloc" ,hwloc-2 "lib")
-       ("llvm" ,llvm)
-       ("opencl-icd-loader" ,opencl-icd-loader)))
+     (list clang
+           `(,hwloc-2 "lib") llvm opencl-icd-loader))
     (arguments
      `(#:configure-flags
        (list "-DENABLE_ICD=ON"
@@ -337,8 +333,7 @@ pocl.")
     (build-system python-build-system)
     (arguments `(#:tests? #f)) ; Tests depend on packages not present in Guix.
     (propagated-inputs
-     `(("python-appdirs" ,python-appdirs)
-       ("python-numpy" ,python-numpy)))
+     (list python-appdirs python-numpy))
     (home-page "https://pypi.org/project/pytools/")
     (synopsis "Assorted tools for Python")
     (description
@@ -380,14 +375,9 @@ A lexer, @code{pytools.lex}.
     (arguments
      `(#:tests? #f)) ; Tests cannot find pygpu_language_opencl.cpp
     (inputs
-     `(("opencl-headers" ,opencl-headers)
-       ("pybind11" ,pybind11)
-       ("opencl-icd-loader" ,opencl-icd-loader)))                     ;libOpenCL
+     (list opencl-headers pybind11 opencl-icd-loader))                     ;libOpenCL
     (propagated-inputs
-     `(("python-appdirs" ,python-appdirs)
-       ("python-numpy" ,python-numpy)
-       ("python-pytools" ,python-pytools)
-       ("python-mako" ,python-mako)))
+     (list python-appdirs python-numpy python-pytools python-mako))
     (home-page "http://mathema.tician.de/software/pyopencl")
     (synopsis "Python wrapper for OpenCL")
     (description
diff --git a/gnu/packages/opencog.scm b/gnu/packages/opencog.scm
index cca0b37ead..998d9b47ae 100644
--- a/gnu/packages/opencog.scm
+++ b/gnu/packages/opencog.scm
@@ -54,7 +54,7 @@
       (arguments
        `(#:test-target "tests"))
       (inputs
-       `(("boost" ,boost)))
+       (list boost))
       (native-inputs
        `(("cxxtest" ,cxxtest)
          ("python" ,python-minimal)
@@ -93,11 +93,7 @@ utilities use for typical programming tasks in multiple OpenCog projects.")
                               (assoc-ref %outputs "out")
                               "/share/guile/site/2.2/"))))
       (inputs
-       `(("boost" ,boost)
-         ("cogutil" ,cogutil)
-         ("gmp" ,gmp)
-         ("guile" ,guile-2.2)
-         ("postgresql" ,postgresql)))
+       (list boost cogutil gmp guile-2.2 postgresql))
       (native-inputs
        `(("cxxtest" ,cxxtest)
          ("python" ,python-minimal)
@@ -139,11 +135,7 @@ features not otherwise available.")
                               (assoc-ref %outputs "out")
                               "/share/guile/site/2.2/"))))
       (inputs
-       `(("atomspace" ,atomspace)
-         ("boost" ,boost)
-         ("cogutil" ,cogutil)
-         ("gmp" ,gmp)
-         ("guile" ,guile-2.2)))
+       (list atomspace boost cogutil gmp guile-2.2))
       (native-inputs
        `(("cxxtest" ,cxxtest)
          ("python" ,python-minimal)
@@ -182,12 +174,12 @@ OpenCog framework.")
                          (assoc-ref %outputs "out")
                          "/share/guile/site/2.2/"))))
       (inputs
-       `(("atomspace" ,atomspace)
-         ("boost" ,boost)
-         ("cogserver" ,cogserver)
-         ("cogutil" ,cogutil)
-         ("gmp" ,gmp)
-         ("guile" ,guile-2.2)))
+       (list atomspace
+             boost
+             cogserver
+             cogutil
+             gmp
+             guile-2.2))
       (native-inputs
        `(("cxxtest" ,cxxtest)
          ("python" ,python-minimal)
@@ -288,10 +280,7 @@ combination.")
                                          "/share/guile/site/2.2/opencog"))))
                #t)))))
       (inputs
-       `(("atomspace" ,atomspace)
-         ("cogutil" ,cogutil)
-         ("gmp" ,gmp)
-         ("guile" ,guile-2.2)))
+       (list atomspace cogutil gmp guile-2.2))
       (native-inputs
        `(("cxxtest" ,cxxtest)
          ("python" ,python-minimal)
diff --git a/gnu/packages/openkinect.scm b/gnu/packages/openkinect.scm
index 89e6c69cfc..e760f18367 100644
--- a/gnu/packages/openkinect.scm
+++ b/gnu/packages/openkinect.scm
@@ -64,9 +64,9 @@
                                (string-append rules-out "51-kinect.rules"))
                  #t))))))
       (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
       (inputs
-       `(("libusb" ,libusb)))
+       (list libusb))
       (synopsis "Drivers and libraries for the Xbox Kinect device")
       (description "libfreenect is a userspace driver for the Microsoft Kinect.
 It supports: RGB and Depth Images, Motors, Accelerometer, LED and Audio.")
@@ -106,8 +106,7 @@ It supports: RGB and Depth Images, Motors, Accelerometer, LED and Audio.")
     (inherit libfreenect)
     (name "libfreenect-opencv")
     (inputs
-     `(("libfreenect" ,libfreenect)
-       ("opencv" ,opencv)))
+     (list libfreenect opencv))
     (arguments
      `(#:tests? #f                      ; package has no tests
        #:configure-flags '("-DBUILD_EXAMPLES=OFF"
@@ -124,12 +123,11 @@ library")))
     (inherit libfreenect)
     (name "python-libfreenect")
     (native-inputs
-     `(("python-cython" ,python-cython)))
+     (list python-cython))
     (inputs
-     `(("libfreenect" ,libfreenect)))
+     (list libfreenect))
     (propagated-inputs
-     `(("python" ,python)
-       ("python-numpy" ,python-numpy)))
+     (list python python-numpy))
     (arguments
      `(#:tests? #f                      ; package has no tests
        #:configure-flags '("-DBUILD_EXAMPLES=OFF"
diff --git a/gnu/packages/openldap.scm b/gnu/packages/openldap.scm
index 400f10600f..c8a47e45d5 100644
--- a/gnu/packages/openldap.scm
+++ b/gnu/packages/openldap.scm
@@ -2,11 +2,13 @@
 ;;; Copyright © 2013, 2014, 2015, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2016, 2021 Leo Famulari <leo@famulari.name>
-;;; Copyright © 2017, 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2017, 2018, 2019, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2020 Lars-Dominik Braun <ldb@leibniz-psychology.org>
 ;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2022 Marius Bakke <marius@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -53,6 +55,7 @@
   #:use-module (gnu packages)
   #:use-module ((guix licenses) #:select (openldap2.8 lgpl2.1+ gpl3+ psfl expat))
   #:use-module (guix packages)
+  #:use-module (guix gexp)
   #:use-module (guix utils)
   #:use-module (guix download)
   #:use-module (guix build-system gnu)
@@ -61,8 +64,7 @@
 (define-public openldap
   (package
    (name "openldap")
-   (replacement openldap-2.4.57)
-   (version "2.4.50")
+   (version "2.4.57")
    (source (origin
              (method url-fetch)
              ;; See <http://www.openldap.org/software/download/> for a list of
@@ -78,16 +80,10 @@
                          "openldap-release/openldap-" version ".tgz")))
              (sha256
               (base32
-               "1f46nlfwmys110j36sifm7ah8m8f3s10c3vaiikmmigmifapvdaw"))))
+               "0nmlyqhc52v24b4awh914sczmvxbazgq2cnlycvb9dgcwvhlgfn7"))))
    (build-system gnu-build-system)
-   (inputs `(("bdb" ,bdb-5.3)
-             ("cyrus-sasl" ,cyrus-sasl)
-             ("gnutls" ,gnutls)
-             ("libgcrypt" ,libgcrypt)
-             ("zlib" ,zlib)))
-   (native-inputs `(("libtool" ,libtool)
-                    ("groff" ,groff)
-                    ("bdb" ,bdb-5.3)))
+   (inputs (list bdb-5.3 cyrus-sasl gnutls libgcrypt zlib))
+   (native-inputs (list libtool groff bdb-5.3))
    (arguments
     `(#:tests? #f
       #:configure-flags
@@ -126,17 +122,18 @@
    (license openldap2.8)
    (home-page "https://www.openldap.org/")))
 
-(define-public openldap-2.4.57
+;; TODO: Update the main package in the next rebuild cycle.
+(define-public openldap-2.6
   (package
     (inherit openldap)
-    (version "2.4.57")
+    (version "2.6.1")
     (source (origin
               (method url-fetch)
               ;; See <http://www.openldap.org/software/download/> for a list of
               ;; mirrors.
               (uri (list (string-append
-                          "ftp://mirror.switch.ch/mirror/OpenLDAP/"
-                          "openldap-release/openldap-" version ".tgz")
+                          "http://mirror.eu.oneandone.net/software/openldap"
+                          "/openldap-release/openldap-" version ".tgz")
                          (string-append
                           "https://www.openldap.org/software/download/OpenLDAP/"
                           "openldap-release/openldap-" version ".tgz")
@@ -145,19 +142,39 @@
                           "openldap-release/openldap-" version ".tgz")))
               (sha256
                (base32
-                "0nmlyqhc52v24b4awh914sczmvxbazgq2cnlycvb9dgcwvhlgfn7"))))))
+                "1wz6f3g3bbqgbbxs20zlappmmhapqbl791c0waibhz9djsk6wmwx"))))
+    (arguments
+     (substitute-keyword-arguments (package-arguments openldap)
+       ((#:phases phases)
+        #~(modify-phases #$phases
+            (replace 'patch-sasl-path
+              ;; Give -L arguments for cyrus-sasl to avoid propagation.
+              (lambda* (#:key inputs #:allow-other-keys)
+                (let ((krb5 (search-input-file inputs "/lib/libkrb5.so")))
+                  (substitute* (string-append #$output "/lib/libldap.la")
+                    (("-lkrb5" lib)
+                     (string-append "-L" (dirname krb5) "/lib " lib))))))
+            (add-after 'install 'provide-ldap_r
+              (lambda _
+                ;; The re-entrant libldap_r no longer exists since 2.6
+                ;; as it has become the default: provide a linker alias
+                ;; for now.
+                (call-with-output-file (string-append #$output
+                                                      "/lib/libldap_r.so")
+                  (lambda (port)
+                    (format port "INPUT ( libldap.so )~%")))))))))))
 
 (define-public nss-pam-ldapd
   (package
     (name "nss-pam-ldapd")
-    (version "0.9.11")
+    (version "0.9.12")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://arthurdejong.org/nss-pam-ldapd/"
                                   "nss-pam-ldapd-" version ".tar.gz"))
               (sha256
                (base32
-                "1dna3r0q6sjhhlkhcp8x2zkslrd4y7701kk6fl5r940sdph1pmyh"))))
+                "050fzcmxmf6y15dlcffc4gxr3wkk7fliqqwhlwqzbjwk8vkn3mn6"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
@@ -178,13 +195,9 @@
              (substitute* "Makefile.in"
                (("\\$\\(DESTDIR\\)\\$\\(NSLCD_CONF_PATH\\)")
                 (string-append (assoc-ref outputs "out")
-                               "/etc/nslcd.conf.example")))
-             #t)))))
+                               "/etc/nslcd.conf.example"))))))))
     (inputs
-     `(("linux-pam" ,linux-pam)
-       ("openldap" ,openldap)
-       ("mit-krb5" ,mit-krb5)
-       ("python" ,python)))
+     (list linux-pam openldap mit-krb5 python))
     (home-page "https://arthurdejong.org/nss-pam-ldapd")
     (synopsis "NSS and PAM modules for LDAP")
     (description "nss-pam-ldapd provides a @dfn{Name Service Switch} (NSS)
@@ -198,35 +211,29 @@ an LDAP server.")
 (define-public python-ldap
   (package
     (name "python-ldap")
-    (version "3.3.1")
+    (version "3.4.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "python-ldap" version))
        (sha256
         (base32
-         "198as30xy6p760niqps2zdvq2xcmr765h06pmda8fa9y077wl4a7"))))
+         "04hd7rdm59i7wrykx0nggzxx1p42wkm296j483yy0wayqa7lqik0"))))
     (build-system python-build-system)
     (arguments
-     `(#:phases
+     '(#:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'configure-openldap-locations
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((openldap (assoc-ref inputs "openldap")))
-               (setenv "SLAPD"
-                       (string-append openldap
-                                      "/libexec/slapd"))
-               (setenv "SCHEMA"
-                       (string-append openldap
-                                      "/etc/openldap/schema/")))
-             #t)))))
+             (let ((slapd (search-input-file inputs "libexec/slapd"))
+                   (schema (search-input-directory
+                            inputs "etc/openldap/schema")))
+               (setenv "SLAPD" slapd)
+               (setenv "SCHEMA" schema)))))))
     (inputs
-     `(("openldap" ,openldap)
-       ("cyrus-sasl" ,cyrus-sasl)
-       ("mit-krb5" ,mit-krb5)))
+     (list openldap-2.6 cyrus-sasl mit-krb5))
     (propagated-inputs
-     `(("python-pyasn1" ,python-pyasn1)
-       ("python-pyasn1-modules" ,python-pyasn1-modules)))
+     (list python-pyasn1 python-pyasn1-modules))
     (home-page "https://www.python-ldap.org/")
     (synopsis "Python modules for implementing LDAP clients")
     (description
@@ -237,20 +244,20 @@ servers from Python programs.")
 (define-public 389-ds-base
   (package
     (name "389-ds-base")
-    (version "1.4.0.31")
+    (version "1.4.4.17")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://releases.pagure.org/389-ds-base/"
-                                  "389-ds-base-" version ".tar.bz2"))
+              (uri (string-append "https://github.com/389ds/389-ds-base/archive/"
+                                  "389-ds-base-" version ".tar.gz"))
               (sha256
                (base32
-                "1rs218iqxyclccsdqb529favdsmz88zw785lsxd9ln43ja3x3l65"))))
+                "0i8m4crbnjjhfb7cq758rd0fxyz36i291yq6fykkprjykz9s3zv4"))))
     (build-system gnu-build-system)
     (arguments
      `(#:modules ((srfi srfi-1)
                   (guix build gnu-build-system)
                   ((guix build python-build-system)
-                   #:select (python-version))
+                   #:select (add-installed-pythonpath python-version))
                   (guix build utils))
        #:imported-modules ((guix build python-build-system)
                            ,@%gnu-build-system-modules)
@@ -277,12 +284,17 @@ servers from Python programs.")
            (lambda _
              (substitute* "include/ldaputil/certmap.h"
                (("nss3/cert.h") "nss/cert.h"))
+             (substitute* "src/lib389/lib389/utils.py"
+               (("'/sbin/ip'")
+                (string-append "'" (which "ip") "'")))
              (substitute* "src/lib389/lib389/nss_ssl.py"
                (("'/usr/bin/certutil'")
                 (string-append "'" (which "certutil") "'"))
+               (("'/usr/bin/openssl'")
+                (string-append "'" (which "openssl") "'"))
                (("'/usr/bin/c_rehash'")
-                (string-append "'" (which "perl") "', '" (which "c_rehash") "'")))
-             #t))
+                (string-append "'" (which "perl") "', '"
+                               (which "c_rehash") "'")))))
          (add-after 'unpack 'overwrite-default-locations
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
@@ -300,8 +312,7 @@ servers from Python programs.")
                (substitute* '("src/lib389/lib389/instance/setup.py"
                               "src/lib389/lib389/instance/remove.py")
                  (("etc_dirsrv_path = .*")
-                  "etc_dirsrv_path = '/etc/dirsrv/'\n"))
-               #t)))
+                  "etc_dirsrv_path = '/etc/dirsrv/'\n")))))
          (add-after 'unpack 'fix-install-location-of-python-tools
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -310,18 +321,16 @@ servers from Python programs.")
                                 (python-version (assoc-ref inputs "python"))
                                 "/site-packages/")))
                ;; Install directory must be on PYTHONPATH.
-               (setenv "PYTHONPATH"
-                       (string-append (getenv "PYTHONPATH")
-                                      ":" pythondir))
+               (add-installed-pythonpath inputs outputs)
                ;; Install directory must exist.
                (mkdir-p pythondir)
                (substitute* "src/lib389/setup.py"
                  (("/usr") out))
                (substitute* "Makefile.am"
                  (("setup.py install --skip-build" m)
-                  (string-append m " --prefix=" out
-                                 " --root=/ --single-version-externally-managed"))))
-             #t))
+                  (string-append
+                   m " --prefix=" out
+                   " --root=/ --single-version-externally-managed"))))))
          (add-after 'build 'build-python-tools
            (lambda* (#:key make-flags #:allow-other-keys)
              ;; Set DETERMINISTIC_BUILD to override the embedded mtime in pyc
@@ -330,27 +339,23 @@ servers from Python programs.")
              ;; Use deterministic hashes for strings, bytes, and datetime
              ;; objects.
              (setenv "PYTHONHASHSEED" "0")
-             (apply invoke "make" "lib389" make-flags)
-             #t))
+             (apply invoke "make" "lib389" make-flags)))
          (add-after 'install 'install-python-tools
            (lambda* (#:key make-flags #:allow-other-keys)
-             (apply invoke "make" "lib389-install" make-flags)
-             #t))
+             (apply invoke "make" "lib389-install" make-flags)))
          (add-after 'install-python-tools 'wrap-python-tools
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out  (assoc-ref outputs "out"))
-                    (path (getenv "PYTHONPATH")))
+                    (pythonpath (getenv "GUIX_PYTHONPATH")))
                (for-each (lambda (file)
                            (wrap-program (string-append out file)
-                             `("PYTHONPATH" ":" prefix (,path))))
+                             `("GUIX_PYTHONPATH" ":" prefix (,pythonpath))))
                          '("/sbin/dsconf"
                            "/sbin/dscreate"
                            "/sbin/dsctl"
                            "/sbin/dsidm"
                            "/bin/ds-logpipe.py"
-                           "/bin/ds-replcheck"
-                           "/bin/readnsstate")))
-             #t)))))
+                           "/bin/ds-replcheck"))))))))
     (inputs
      `(("bdb" ,bdb)
        ("cracklib" ,cracklib)
@@ -358,6 +363,7 @@ servers from Python programs.")
        ("gnutls" ,gnutls)
        ("httpd" ,httpd)
        ("icu4c" ,icu4c)
+       ("iproute" ,iproute)
        ("libevent" ,libevent)
        ("libselinux" ,libselinux)
        ("linux-pam" ,linux-pam)
@@ -365,7 +371,7 @@ servers from Python programs.")
        ("net-snmp" ,net-snmp)
        ("nspr" ,nspr)
        ("nss" ,nss)
-       ("nss:bin" ,nss "bin") ; for certutil
+       ("nss:bin" ,nss "bin")           ; for certutil
        ("openldap" ,openldap)
        ("openssl" ,openssl)             ; #included by net-snmp
        ("pcre" ,pcre)
@@ -419,9 +425,7 @@ Other features include:
          "013bl6h1m3f7vg1lk89d4vi28wbf31zdcs4f9g8css7ngx63v6px"))))
     (build-system python-build-system)
     (inputs
-     `(("mit-krb5" ,mit-krb5)
-       ("cyrus-sasl" ,cyrus-sasl)
-       ("openldap" ,openldap)))
+     (list mit-krb5 cyrus-sasl openldap))
     ;; disabling tests, since they require docker and extensive setup
     (arguments `(#:tests? #f))
     (home-page "https://github.com/noirello/bonsai")
@@ -431,4 +435,3 @@ Other features include:
 are mapped to a special Python case-insensitive dictionary, tracking the
 changes of the dictionary to modify the entry on the server easily.")
     (license expat)))
-
diff --git a/gnu/packages/openpgp.scm b/gnu/packages/openpgp.scm
index a5b8f1b09d..40df62a6d7 100644
--- a/gnu/packages/openpgp.scm
+++ b/gnu/packages/openpgp.scm
@@ -46,8 +46,7 @@
                 "179b5jx3mqs9hgsj8cfwk6x8qib60kw9szk9fkz6s1gl3v83mnyx"))))
     (build-system gnu-build-system)
     (arguments '(#:configure-flags '("--enable-silent-rules")))
-    (inputs `(("gmp" ,gmp)
-              ("libgcrypt" ,libgcrypt)))
+    (inputs (list gmp libgcrypt))
     (synopsis
      "C++ library for creating secure and fair online card games")
     (description
@@ -79,11 +78,7 @@ LibTMCG provides the first practical implementation of such protocols.")
                  '("--enable-silent-rules")
                  ;; https://savannah.nongnu.org/bugs/?58772
                  #:parallel-tests? #f))
-    (inputs `(("bzip2" ,bzip2)
-              ("gmp" ,gmp)
-              ("libgcrypt" ,libgcrypt)
-              ("libtmcg" ,libtmcg)
-              ("zlib" ,zlib)))
+    (inputs (list bzip2 gmp libgcrypt libtmcg zlib))
     (synopsis
      "Distributed Key Generation and Threshold Cryptography for OpenPGP")
     (description
@@ -159,10 +154,7 @@ environments.")
          ("pkg-config" ,pkg-config)
          ("python" ,python)
          ("python2" ,python-2.7)))
-      (inputs `(("botan" ,botan)
-                ("bzip2" ,bzip2)
-                ("json-c" ,json-c)
-                ("zlib" ,zlib)))
+      (inputs (list botan bzip2 json-c zlib))
       (synopsis
        "RFC4880-compliant OpenPGP library written in C++")
       (description
diff --git a/gnu/packages/openstack.scm b/gnu/packages/openstack.scm
index 6e36d298f5..4c28bb9283 100644
--- a/gnu/packages/openstack.scm
+++ b/gnu/packages/openstack.scm
@@ -1,11 +1,12 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015 Cyril Roelandt <tipecaml@gmail.com>
 ;;; Copyright © 2015, 2016 Efraim Flashner <efraim@flashner.co.il>
-;;; Copyright © 2016, 2017, 2019 Clément Lassieur <clement@lassieur.org>
+;;; Copyright © 2016, 2017, 2019, 2021 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2018 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2018, 2022 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2022 Tanguy Le Carrour <tanguy@bioneland.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -27,6 +28,7 @@
   #:use-module (gnu packages check)
   #:use-module (gnu packages gnupg)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-check)
   #:use-module (gnu packages python-crypto)
   #:use-module (gnu packages python-web)
@@ -61,12 +63,9 @@
      ;; python-stestr.
      `(#:tests? #f))
     (propagated-inputs
-     `(("python-gitpython" ,python-gitpython)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-six" ,python-six)
-       ("python-stevedore" ,python-stevedore)))
+     (list python-gitpython python-pyyaml python-six python-stevedore))
     (native-inputs
-     `(("python-pbr" ,python-pbr)))
+     (list python-pbr))
     (home-page "https://github.com/PyCQA/bandit")
     (synopsis "Security oriented static analyser for python code")
     (description "Bandit is a tool designed to find common security issues in
@@ -90,14 +89,14 @@ scanning all the files it generates a report.")
     (arguments
      `(#:tests? #f))
     (native-inputs
-     `(("python-pbr" ,python-pbr)))
+     (list python-pbr))
     (propagated-inputs
-     `(("python-cmd2" ,python-cmd2)
-       ("python-prettytable" ,python-prettytable)
-       ("python-pyparsing" ,python-pyparsing)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-bandit" ,python-bandit)
-       ("python-stevedore" ,python-stevedore)))
+     (list python-cmd2
+           python-prettytable
+           python-pyparsing
+           python-pyyaml
+           python-bandit
+           python-stevedore))
     (home-page "https://opendev.org/openstack/cliff")
     (synopsis "Framework for building command line programs")
     (description "The @code{cliff} framework allows creating multi-level
@@ -120,14 +119,10 @@ formatters, and other extensions.")
            "06c7vyn184y9f0lsrwaz13aq63hdz5fjrd191b8nifx6acsni42f"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pbr" ,python-pbr)
-       ("python-six" ,python-six)
-       ("python-wrapt" ,python-wrapt)))
+     (list python-pbr python-six python-wrapt))
     (native-inputs
-     `(;; Tests.
-       ("python-subunit" ,python-subunit)
-       ("python-testrepository" ,python-testrepository)
-       ("python-testtools" ,python-testtools)))
+     (list ;; Tests.
+           python-subunit python-testrepository python-testtools))
     (home-page "https://www.openstack.org/")
     (synopsis
      "Find deprecated patterns and strategies in Python code")
@@ -150,20 +145,20 @@ manner.")
          "0fg19rlcky3n1y1ri61xyjp7534yzf8r102z9dw3zqg93f4kj20m"))))
     (build-system python-build-system)
      (propagated-inputs
-     `(("python-flake8" ,python-flake8-3.8)))
+     (list python-flake8-3.8))
     (native-inputs
-     `( ;; Tests
-       ("python-coverage" ,python-coverage)
-       ("python-ddt" ,python-ddt)
-       ("python-dnspython" ,python-dnspython)
-       ("python-fixtures" ,python-fixtures)
-       ("python-eventlet" ,python-eventlet)
-       ("python-mock" ,python-mock)
-       ("python-monotonic" ,python-monotonic)
-       ("python-subunit" ,python-subunit)
-       ("python-stestr" ,python-stestr)
-       ("python-testscenarios" ,python-testscenarios)
-       ("python-testtools" ,python-testtools)))
+     (list ;; Tests
+           python-coverage
+           python-ddt
+           python-dnspython
+           python-fixtures
+           python-eventlet
+           python-mock
+           python-monotonic
+           python-subunit
+           python-stestr
+           python-testscenarios
+           python-testtools))
     (home-page "https://github.com/openstack-dev/hacking")
     (synopsis "OpenStack hacking guideline enforcement")
     (description
@@ -186,14 +181,10 @@ guidelines}.")
            "0w58adwv7q9wzvmq9mlrk2asfk73myq9fpwy7mjkzsz3baa95zf5"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-fixtures" ,python-fixtures)
-       ("python-pbr" ,python-pbr)))
+     (list python-fixtures python-pbr))
     (native-inputs
-      `(("python-openstackdocstheme" ,python-openstackdocstheme)
-        ("python-sphinx" ,python-sphinx)
-        ("python-subunit" ,python-subunit)
-        ("python-testrepository" ,python-testrepository)
-        ("python-testtools" ,python-testtools)))
+      (list python-openstackdocstheme python-sphinx python-subunit
+            python-testrepository python-testtools))
     (home-page "https://www.openstack.org/")
     (synopsis "Mock object framework for Python")
     (description
@@ -218,10 +209,9 @@ with mox as possible, but small enhancements have been made.")
      ;; turn depends on mox3 which depends on this package.
      `(#:tests? #f))
     (propagated-inputs
-     `(("python-dulwich" ,python-dulwich)
-       ("python-pbr" ,python-pbr)))
+     (list python-dulwich python-pbr))
     (native-inputs
-     `(("python-sphinx" ,python-sphinx)))
+     (list python-sphinx))
     (home-page "https://docs.openstack.org/openstackdocstheme/latest/")
     (synopsis "OpenStack Docs Theme")
     (description
@@ -244,15 +234,14 @@ to docs.openstack.org and developer.openstack.org.")
     (arguments
      `(#:tests? #f)) ;; Circular dependency with python-oslotest
     (propagated-inputs
-      `(("python-appdirs" ,python-appdirs)
-        ("python-pyyaml" ,python-pyyaml)))
+      (list python-appdirs python-pyyaml))
     (native-inputs
-      `(("python-pbr" ,python-pbr)
-        ("python-fixtures" ,python-fixtures)
-        ("python-mimeparse" ,python-mimeparse)
-        ("python-testrepository" ,python-testrepository)
-        ("python-testscenarios" ,python-testscenarios)
-        ("python-testtools" ,python-testtools)))
+      (list python-pbr
+            python-fixtures
+            python-mimeparse
+            python-testrepository
+            python-testscenarios
+            python-testtools))
     (home-page "https://www.openstack.org/")
     (synopsis
       "OpenStack Client Configuration Library")
@@ -265,14 +254,14 @@ to docs.openstack.org and developer.openstack.org.")
 (define-public python-os-testr
   (package
     (name "python-os-testr")
-    (version "0.8.0")
+    (version "2.0.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "os-testr" version))
        (sha256
         (base32
-         "0mknd9hlmxmihr755gjkxyjp180380jajq5i3zm34q7y7bi62lss"))))
+         "10xaqg3wxly13652hdvh9c69y4s12ird0ircffya3kvpl5pky0pz"))))
     (build-system python-build-system)
     (arguments
      ;; os-testr uses itself to run the tests. It seems like pbr writes the
@@ -280,11 +269,9 @@ to docs.openstack.org and developer.openstack.org.")
      ;; when building the package. Skip the tests for now.
      `(#:tests? #f))
     (propagated-inputs
-     `(("python-subunit" ,python-subunit)))
+     (list python-stestr))
     (native-inputs
-     `(("python-pbr" ,python-pbr)
-       ("python-testtools" ,python-testtools)
-       ("python-babel" ,python-babel)))
+     (list python-babel python-pbr python-testrepository python-testtools))
     (home-page "https://www.openstack.org/")
     (synopsis "Testr wrapper to provide functionality for OpenStack projects")
     (description
@@ -316,7 +303,7 @@ to docs.openstack.org and developer.openstack.org.")
                             "requirements.txt")
                (("pbr!=2.1.0,>=2.0.0") "pbr>=3.0.0")))))))
     (propagated-inputs
-     `(("python-pbr" ,python-pbr)))
+     (list python-pbr))
     (home-page "https://github.com/dreamhost/stevedore")
     (synopsis "Manage dynamic plugins for Python applications")
     (description
@@ -352,19 +339,16 @@ extensions.")
             (substitute* "tempest_lib/tests/cli/test_execute.py"
               (("/bin/ls") (which "ls"))))))))
     (propagated-inputs
-      `(("python-fixtures" ,python-fixtures)
-        ("python-httplib2" ,python-httplib2)
-        ("python-iso8601" ,python-iso8601)
-        ("python-jsonschema" ,python-jsonschema)
-        ("python-oslo.log" ,python-oslo.log)
-        ("python-paramiko" ,python-paramiko)
-        ("python-pbr" ,python-pbr)
-        ("python-six" ,python-six)))
+      (list python-fixtures
+            python-httplib2
+            python-iso8601
+            python-jsonschema
+            python-oslo.log
+            python-paramiko
+            python-pbr
+            python-six))
     (native-inputs
-      `(("python-babel" ,python-babel)
-        ("python-mock" ,python-mock)
-        ("python-os-testr" ,python-os-testr)
-        ("python-oslotest" ,python-oslotest)))
+      (list python-babel python-mock python-os-testr python-oslotest))
     (home-page "https://www.openstack.org/")
     (synopsis "OpenStack functional testing library")
     (description
@@ -380,35 +364,24 @@ common features used in Tempest.")
 (define-public python-oslo.config
   (package
     (name "python-oslo.config")
-    (version "5.2.0")
+    (version "8.7.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "oslo.config" version))
        (sha256
         (base32
-         "0ymf7jxbq29fifyvkwhfiys1qvljqfxdw8ajwzwaf3yiqidgpxqd"))))
+         "0q3v4yicqls9zsfxkmh5mrgz9dailaz3ir25p458gj6dg3bldhx0"))))
     (build-system python-build-system)
+    (arguments '(#:tests? #f))          ;XXX circular dependency on oslo.log
     (propagated-inputs
-     `(("python-debtcollector" ,python-debtcollector)
-       ("python-netaddr" ,python-netaddr)
-       ("python-oslo.i18n" ,python-oslo.i18n)
-       ("python-pbr" ,python-pbr)
-       ("python-rfc3986" ,python-rfc3986)
-       ("python-six" ,python-six)
-       ("python-stevedore" ,python-stevedore)
-       ("python-pyyaml" ,python-pyyaml)))
-    (native-inputs
-     `(("python-bandit" ,python-bandit)
-       ("python-coverage" ,python-coverage)
-       ("python-mock" ,python-mock)
-       ("python-openstackdocstheme" ,python-openstackdocstheme)
-       ("python-oslotest" ,python-oslotest)
-       ("python-reno" ,python-reno)
-       ("python-sphinx" ,python-sphinx)
-       ("python-testrepository" ,python-testrepository)
-       ("python-testscenarios" ,python-testscenarios)
-       ("python-testtools" ,python-testtools)))
+     (list python-debtcollector
+           python-netaddr
+           python-oslo.i18n
+           python-rfc3986
+           python-requests
+           python-stevedore
+           python-pyyaml))
     (home-page "https://launchpad.net/oslo")
     (synopsis "Oslo Configuration API")
     (description
@@ -437,15 +410,15 @@ common features used in Tempest.")
                          "hacking>=3.0.1"))
                       #t)))))
     (propagated-inputs
-     `(("python-debtcollector" ,python-debtcollector)))
+     (list python-debtcollector))
     (native-inputs
-     `(("python-bandit" ,python-bandit)
-       ("python-coverage" ,python-coverage)
-       ("python-fixtures" ,python-fixtures)
-       ("python-hacking" ,python-hacking)
-       ("python-oslotest" ,python-oslotest)
-       ("python-pbr" ,python-pbr)
-       ("python-stestr" ,python-stestr)))
+     (list python-bandit
+           python-coverage
+           python-fixtures
+           python-hacking
+           python-oslotest
+           python-pbr
+           python-stestr))
     (home-page "https://launchpad.net/oslo")
     (synopsis "Oslo context library")
     (description
@@ -466,16 +439,12 @@ pipeline and used by various modules such as logging.")
         (base32
          "0kjcdw4bk3mi4vqmqwhhq053kxbbbj05si6nwxd1pzx33z067ky3"))))
     (build-system python-build-system)
+    (arguments
+     '(#:tests? #f))                 ;avoid circular dependency on oslo.config
     (propagated-inputs
-     `(("python-babel" ,python-babel)
-       ("python-six" ,python-six)))
+     (list python-babel python-six))
     (native-inputs
-     `(("python-pbr" ,python-pbr)
-       ;; Tests
-       ("python-mock" ,python-mock)
-       ("python-mox3" ,python-mox3)
-       ("python-oslotest" ,python-oslotest)
-       ("python-testscenarios" ,python-testscenarios)))
+     (list python-pbr))
     (home-page "https://launchpad.net/oslo")
     (synopsis "Oslo internationalization (i18n) library")
     (description
@@ -487,33 +456,33 @@ in an application or library.")
 (define-public python-oslo.log
   (package
   (name "python-oslo.log")
-  (version "3.36.0")
+  (version "4.6.1")
   (source
     (origin
       (method url-fetch)
       (uri (pypi-uri "oslo.log" version))
       (sha256
         (base32
-          "0h7hplf1h8k24v75m3mq1jlrl74x5ynyr4hwgffsg5campxnza4x"))))
+          "0dlnxjci9mpwhgfv19fy1z7xrdp8m95skrj5dr60all3pr7n22f6"))))
   (build-system python-build-system)
+  (arguments
+   '(#:phases (modify-phases %standard-phases
+                (replace 'check
+                  (lambda* (#:key tests? #:allow-other-keys)
+                    (when tests? (invoke "stestr" "run")))))))
   (propagated-inputs
-   `(("python-dateutil" ,python-dateutil)
-     ("python-debtcollector" ,python-debtcollector)
-     ("python-monotonic" ,python-monotonic)
-     ("python-oslo.config" ,python-oslo.config)
-     ("python-oslo.context" ,python-oslo.context)
-     ("python-oslo.i18n" ,python-oslo.i18n)
-     ("python-oslo.utils" ,python-oslo.utils)
-     ("python-oslo.serialization" ,python-oslo.serialization)
-     ("python-pbr" ,python-pbr)
-     ("python-pyinotify" ,python-pyinotify)
-     ("python-six" ,python-six)))
+   (list python-dateutil
+         python-debtcollector
+         python-oslo.config
+         python-oslo.context
+         python-oslo.i18n
+         python-oslo.utils
+         python-oslo.serialization
+         python-pbr
+         python-pyinotify
+         python-six))
   (native-inputs
-    `(("python-mock" ,python-mock)
-      ("python-oslotest" ,python-oslotest)
-      ("python-subunit" ,python-subunit)
-      ("python-testrepository" ,python-testrepository)
-      ("python-testtools" ,python-testtools)))
+    (list python-fixtures python-oslotest python-stestr python-testtools))
   (home-page "https://launchpad.net/oslo")
   (synopsis "Python logging library of the Oslo project")
   (description
@@ -525,27 +494,25 @@ handlers and support for context specific logging (like resource id’s etc).")
 (define-public python-oslo.serialization
   (package
     (name "python-oslo.serialization")
-    (version "2.24.0")
+    (version "4.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "oslo.serialization" version))
        (sha256
         (base32
-         "08bxkp98c617y58x630xq44iiffm7f0f3cwh6zbnlkgq0zgh7jk1"))))
+         "10sdgvyb0d3lcmb8b4l5gs40bkfbai08kvsdwp658dxd2yqf21rh"))))
     (build-system python-build-system)
+    (arguments
+     '(#:phases (modify-phases %standard-phases
+                  (replace 'check
+                    (lambda* (#:key tests? #:allow-other-keys)
+                      (when tests? (invoke "stestr" "run")))))))
     (propagated-inputs
-      `(("python-msgpack" ,python-msgpack)
-        ("python-netaddr" ,python-netaddr)
-        ("python-oslo.utils" ,python-oslo.utils)
-        ("python-six" ,python-six)
-        ("python-pytz" ,python-pytz)))
+      (list python-msgpack python-oslo.utils python-pbr python-pytz))
     (native-inputs
-      `(("python-pbr" ,python-pbr)
-        ;; Tests.
-        ("python-mock" ,python-mock)
-        ("python-oslo.i18n" ,python-oslo.i18n)
-        ("python-oslotest" ,python-oslotest)))
+     ;; For tests.
+      (list python-netaddr python-oslo.i18n python-oslotest python-stestr))
     (home-page "https://launchpad.net/oslo")
     (synopsis "Oslo serialization library")
     (description
@@ -572,10 +539,7 @@ in transmittable and storable formats, such as JSON and MessagePack.")
              ;; reno expects a git repo
              (invoke "git" "init"))))))
     (propagated-inputs
-      `(("python-dulwich" ,python-dulwich)
-        ("python-pbr" ,python-pbr)
-        ("python-pyyaml" ,python-pyyaml)
-        ("python-six" ,python-six)))
+      (list python-dulwich python-pbr python-pyyaml python-six))
     (native-inputs
       `(("python-testtools" ,python-testtools)
         ("python-testscenarios" ,python-testscenarios)
@@ -613,13 +577,10 @@ and building documentation from them.")
                 "hacking!=0.13.0,>=0.12.0"))
              #t)))))
     (propagated-inputs
-     `(("python-requests" ,python-requests)))
+     (list python-requests))
     (native-inputs
-     `(("python-hacking" ,python-hacking)
-       ("python-openstackdocstheme" ,python-openstackdocstheme)
-       ("python-pbr" ,python-pbr)
-       ("python-reno" ,python-reno)
-       ("python-sphinx" ,python-sphinx)))
+     (list python-hacking python-openstackdocstheme python-pbr
+           python-reno python-sphinx))
     (home-page "https://www.openstack.org/")
     (synopsis "OpenStack sphinx extensions and theme")
     (description "This package provides themes and extensions for Sphinx
@@ -642,10 +603,7 @@ documentation from the OpenStack project.")
      ;; The tests are disabled to avoid a circular dependency with oslo.config.
      `(#:tests? #f))
     (propagated-inputs
-     `(("python-fixtures" ,python-fixtures)
-       ("python-six" ,python-six)
-       ("python-subunit" ,python-subunit)
-       ("python-testtools" ,python-testtools)))
+     (list python-fixtures python-six python-subunit python-testtools))
     (home-page "https://launchpad.net/oslo")
     (synopsis "Oslo test framework")
     (description "The Oslo Test framework provides common fixtures, support
@@ -655,37 +613,39 @@ for debugging, and better support for mocking results.")
 (define-public python-oslo.utils
   (package
     (name "python-oslo.utils")
-    (version "3.36.2")
+    (version "4.12.0")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "oslo.utils" version))
         (sha256
           (base32
-           "1ipjcgg9z697wmibhcbg5lqpk5gafakdx4qkff3w255zr0mvw04r"))))
+           "0kfgr6lr3r34nzmkvnyywr0x3lkwpwy35m1dj4rkk3ydqvi1xaip"))))
     (build-system python-build-system)
+    (arguments
+     '(#:phases (modify-phases %standard-phases
+                  (replace 'check
+                    (lambda* (#:key tests? #:allow-other-keys)
+                      (when tests? (invoke "stestr" "run")))))))
     (propagated-inputs
-      `(("python-debtcollector" ,python-debtcollector)
-        ("python-oslo.i18n" ,python-oslo.i18n)
-        ("python-iso8601" ,python-iso8601)
-        ("python-monotonic" ,python-monotonic)
-        ("python-netaddr" ,python-netaddr)
-        ("python-netifaces" ,python-netifaces)
-        ("python-pyparsing" ,python-pyparsing)
-        ("python-pytz" ,python-pytz)
-        ("python-six" ,python-six)))
+      (list python-debtcollector
+            python-oslo.i18n
+            python-iso8601
+            python-netaddr
+            python-netifaces
+            python-pbr
+            python-packaging-next
+            python-pyparsing
+            python-pytz))
     (native-inputs
-      `(("python-pbr" ,python-pbr)
-        ;; Tests.
-        ("python-bandit" ,python-bandit)
-        ("python-ddt" ,python-ddt)
-        ("python-fixtures" ,python-fixtures)
-        ("python-oslo.config" ,python-oslo.config)
-        ("python-oslotest" ,python-oslotest)
-        ("python-mock" ,python-mock)
-        ("python-testrepository" ,python-testrepository)
-        ("python-testscenarios" ,python-testscenarios)
-        ("python-testtools" ,python-testtools)))
+     ;; For tests.
+      (list python-ddt
+            python-eventlet
+            python-fixtures
+            python-oslotest
+            python-stestr
+            python-testscenarios
+            python-testtools))
     (home-page "https://launchpad.net/oslo")
     (synopsis "Oslo utility library")
     (description
@@ -731,19 +691,19 @@ handling.")
        ("python-testtools" ,python-testtools)
        ("python-webob" ,python-webob)))
     (propagated-inputs
-     `(("python-babel" ,python-babel)
-       ("python-debtcollector" ,python-debtcollector)
-       ("python-iso8601" ,python-iso8601)
-       ("python-netaddr" ,python-netaddr)
-       ("python-oslo.config" ,python-oslo.config)
-       ("python-oslo.i18n" ,python-oslo.i18n)
-       ("python-oslo.serialization" ,python-oslo.serialization)
-       ("python-oslo.utils" ,python-oslo.utils)
-       ("python-pbr" ,python-pbr)
-       ("python-prettytable" ,python-prettytable)
-       ("python-requests" ,python-requests)
-       ("python-six" ,python-six)
-       ("python-stevedore" ,python-stevedore)))
+     (list python-babel
+           python-debtcollector
+           python-iso8601
+           python-netaddr
+           python-oslo.config
+           python-oslo.i18n
+           python-oslo.serialization
+           python-oslo.utils
+           python-pbr
+           python-prettytable
+           python-requests
+           python-six
+           python-stevedore))
     (home-page "https://www.openstack.org/")
     (synopsis "Client Library for OpenStack Identity")
     (description
@@ -768,20 +728,19 @@ LDAP.")
           "1j33l4z9vqh0scfncl4fxg01zr1hgqxhhai6gvcih1gccqm4nd7p"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pbr" ,python-pbr)
-       ("python-sphinx" ,python-sphinx)
-       ;; The folloing packages are needed for the tests.
-       ("python-coverage" ,python-coverage)
-       ("python-discover" ,python-discover)
-       ("python-hacking" ,python-hacking)
-       ("python-mock" ,python-mock)
-       ("python-oslosphinx" ,python-oslosphinx)
-       ("python-keystoneclient" ,python-keystoneclient)
-       ("python-testrepository" ,python-testrepository)
-       ("python-testtools" ,python-testtools)))
+     (list python-pbr
+           python-sphinx
+           ;; The folloing packages are needed for the tests.
+           python-coverage
+           python-discover
+           python-hacking
+           python-mock
+           python-oslosphinx
+           python-keystoneclient
+           python-testrepository
+           python-testtools))
     (propagated-inputs
-     `(("python-requests" ,python-requests)
-       ("python-six" ,python-six)))
+     (list python-requests python-six))
     (home-page "https://www.openstack.org/")
     (synopsis "OpenStack Object Storage API Client Library")
     (description
@@ -799,13 +758,13 @@ permanence.")
 (define-public python-git-review
   (package
     (name "python-git-review")
-    (version "1.28.0")
+    (version "2.1.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "git-review" version))
        (sha256
-        (base32 "0nn17mfqvsa3ryjz53qjslmf60clc0vx2115kkj66h28p6vsnflf"))))
+        (base32 "1mhywsbisyv028lsj2ksg4g5l8kyimpwxgwzqi08rymi8mb7fv1s"))))
     (build-system python-build-system)
     (arguments
      '(#:tests? #f                     ; tests require a running Gerrit server
@@ -823,12 +782,11 @@ permanence.")
                          (list git openssh)))))
              #t)))))
     (native-inputs
-     `(("python-pbr" ,python-pbr)))
+     (list python-pbr))
     (propagated-inputs
-     `(("python-requests" ,python-requests)))
+     (list python-requests))
     (inputs
-     `(("git" ,git)
-       ("openssh" ,openssh)))
+     (list git openssh))
     (home-page "https://docs.openstack.org/infra/git-review/")
     (synopsis "Command-line tool for Gerrit")
     (description
diff --git a/gnu/packages/orange.scm b/gnu/packages/orange.scm
index bedbad7e60..2b6fc00abc 100644
--- a/gnu/packages/orange.scm
+++ b/gnu/packages/orange.scm
@@ -34,13 +34,13 @@
 (define-public python-orange-canvas-core
   (package
     (name "python-orange-canvas-core")
-    (version "0.1.19")
+    (version "0.1.24")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "orange-canvas-core" version))
        (sha256
-        (base32 "03wav2msfm32y8zwq69v1v6qyh1ld76xla2z60avf49yhbwjgwal"))))
+        (base32 "0m3dszdkc5bc80ahcvrqxz8jahs33js9cx1mc6rc9ihysq2ddnfz"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -51,17 +51,15 @@
              (substitute* "orangecanvas/application/tests/test_mainwindow.py"
                (("test_help_requests") "_test_help_requests"))
              (setenv "HOME" "/tmp")
-             (setenv "QT_QPA_PLATFORM" "offscreen")
-             #t)))))
+             (setenv "QT_QPA_PLATFORM" "offscreen"))))))
     (propagated-inputs
-     `(("python-anyqt" ,python-anyqt)
-       ("python-cachecontrol" ,python-cachecontrol)
-       ("python-commonmark" ,python-commonmark)
-       ("python-dictdiffer" ,python-dictdiffer)
-       ("python-docutils" ,python-docutils)
-       ("python-pyqt" ,python-pyqt)
-       ("python-qasync" ,python-qasync)
-       ("python-requests" ,python-requests)))
+     (list python-anyqt
+           python-cachecontrol
+           python-commonmark
+           python-dictdiffer
+           python-docutils
+           python-qasync
+           python-requests))
     (home-page "https://github.com/biolab/orange-canvas-core")
     (synopsis "Core component of Orange Canvas")
     (description
@@ -73,13 +71,13 @@ data-mining application.")
 (define-public python-orange-widget-base
   (package
     (name "python-orange-widget-base")
-    (version "4.12.0")
+    (version "4.16.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "orange-widget-base" version))
        (sha256
-        (base32 "13sy3s8rdqs3i3ghixljpqvnfz81qmbb0kqlasw39zvf39qc22kz"))))
+        (base32 "0a0sijsvzijj71sxq8ckpgz59z1cq9sxn4fya3z23ibdzjzwrsi7"))))
     (build-system python-build-system)
     (arguments
      `(;; unittest fails to load one test, all other tests are passing:
@@ -90,14 +88,10 @@ data-mining application.")
          (add-before 'check 'check-setup
            (lambda _
              (setenv "HOME" "/tmp")
-             (setenv "QT_QPA_PLATFORM" "offscreen")
-             #t)))))
+             (setenv "QT_QPA_PLATFORM" "offscreen"))))))
     (propagated-inputs
-     `(("python-anyqt" ,python-anyqt)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-orange-canvas-core"
-        ,python-orange-canvas-core)
-       ("python-pyqtgraph" ,python-pyqtgraph)))
+     (list python-anyqt python-matplotlib python-orange-canvas-core
+           python-pyqtgraph python-typing-extensions))
     (home-page "https://github.com/biolab/orange-widget-base")
     (synopsis "Base Widget for Orange Canvas")
     (description
@@ -108,13 +102,13 @@ GUI based workflow.  It is primarily used in the Orange framework.")
 (define-public orange
   (package
     (name "orange")
-    (version "3.28.0")
+    (version "3.31.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "Orange3" version))
        (sha256
-        (base32 "1ac4xjjkx06z10hl7k0zh1z3qhkl5vng15l9jkpkmck9spinbzil"))))
+        (base32 "0jqay46nysgfxldik7f6mfi8iylai2gwfpq60vklrfi1rhqf3pn6"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -131,11 +125,12 @@ GUI based workflow.  It is primarily used in the Orange framework.")
              ;; We use a correct version of PyQtWebEngine, but the build scripts
              ;; consider it incorrect anyways. Remove the constraint entirely to
              ;; work around this bug.
-             (substitute* "requirements-gui.txt" (("PyQtWebEngine>=5.12") ""))
-             #t))
-         (add-before 'check 'set-HOME
+             (substitute* "requirements-pyqt.txt" (("PyQtWebEngine>=5.12") ""))))
+         (add-before 'check 'pre-check
            ;; Tests need a writable home.
-           (lambda _ (setenv "HOME" "/tmp") #t))
+           (lambda _
+             (setenv "HOME" "/tmp")
+             (setenv "QT_QPA_PLATFORM" "offscreen")))
          (add-after 'install 'wrap-executable
            ;; Ensure that icons are found at runtime.
            (lambda* (#:key inputs outputs #:allow-other-keys)
@@ -143,43 +138,42 @@ GUI based workflow.  It is primarily used in the Orange framework.")
                (wrap-program (string-append out "/bin/orange-canvas")
                  `("QT_PLUGIN_PATH" prefix
                    ,(list (string-append (assoc-ref inputs "qtsvg")
-                                         "/lib/qt5/plugins/")))))
-             #t)))))
+                                         "/lib/qt5/plugins/"))))))))))
     (native-inputs
-     `(("python-cython" ,python-cython)))
+     (list python-cython))
     (inputs
-     `(("python-anyqt" ,python-anyqt)
-       ("python-baycomp" ,python-baycomp)
-       ("python-bottleneck" ,python-bottleneck)
-       ("python-chardet" ,python-chardet)
-       ("python-httpx" ,python-httpx)
-       ("python-joblib" ,python-joblib)
-       ("python-keyring" ,python-keyring)
-       ("python-keyrings.alt" ,python-keyrings.alt)
-       ("python-louvain" ,python-louvain)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-networkx" ,python-networkx)
-       ("python-numpy" ,python-numpy)
-       ("python-openpyxl" ,python-openpyxl)
-       ("python-opentsne" ,python-opentsne)
-       ("python-orange-canvas-core"
-        ,python-orange-canvas-core)
-       ("python-orange-widget-base"
-        ,python-orange-widget-base)
-       ("python-pandas" ,python-pandas)
-       ("python-pyqt" ,python-pyqt)
-       ("python-pyqtgraph" ,python-pyqtgraph)
-       ("python-pyqtwebengine" ,python-pyqtwebengine)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-requests" ,python-requests)
-       ("python-scikit-learn" ,python-scikit-learn)
-       ("python-scipy" ,python-scipy)
-       ("python-serverfiles" ,python-serverfiles)
-       ("python-xlrd" ,python-xlrd)
-       ("python-xlsxwriter" ,python-xlsxwriter)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("xdg-utils" ,xdg-utils)))
+     (list python-anyqt
+           python-baycomp
+           python-bottleneck
+           python-chardet
+           python-httpx
+           python-joblib
+           python-keyring
+           python-keyrings.alt
+           python-louvain
+           python-matplotlib
+           python-networkx
+           python-numpy
+           python-openpyxl
+           python-opentsne
+           python-orange-canvas-core
+           python-orange-widget-base
+           python-pandas
+           python-pygments
+           python-pyqt
+           python-pyqtgraph
+           python-pyqtwebengine
+           python-pyyaml
+           python-qtconsole
+           python-requests
+           python-scikit-learn
+           python-scipy
+           python-serverfiles
+           python-xlrd
+           python-xlsxwriter
+           qtbase-5
+           qtsvg
+           xdg-utils))
     (home-page "https://orangedatamining.com/")
     (synopsis "Component-based data mining framework")
     (description
@@ -199,7 +193,7 @@ data analysis, data mining and data visualization.")
         (base32 "1qgbzgnaxj4wsp2rdas53qxsh0j7xpibq25w6lviwyaqwwrgq42y"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-requests" ,python-requests)))
+     (list python-requests))
     (home-page "https://github.com/biolab/serverfiles")
     (synopsis "Utility to access files on a HTTP server and store them locally")
     (description
diff --git a/gnu/packages/orpheus.scm b/gnu/packages/orpheus.scm
index d981be279c..7a69d99954 100644
--- a/gnu/packages/orpheus.scm
+++ b/gnu/packages/orpheus.scm
@@ -45,13 +45,13 @@
       (patches (search-patches "orpheus-cast-errors-and-includes.patch"))))
     (build-system gnu-build-system)
     (inputs
-     `(("ncurses" ,ncurses)
-       ("libvorbis" ,libvorbis)
-       ("vorbis-tools" ,vorbis-tools)
-       ("mpg321" ,mpg321)
-       ;; TODO: add ghttp
-       ("libxml2" ,libxml2)
-       ("which" ,which)))
+     (list ncurses
+           libvorbis
+           vorbis-tools
+           mpg321
+           ;; TODO: add ghttp
+           libxml2
+           which))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -76,12 +76,9 @@
              ;; To avoid propagating the mpg321 and vorbis-tools inputs, we can
              ;; make the orpheus application execute the needed players from the
              ;; store.
-             (let ((ogg123 (string-append (assoc-ref inputs "vorbis-tools")
-                                          "/bin/ogg123"))
-                   (mpg321 (string-append (assoc-ref inputs "mpg321")
-                                          "/bin/mpg321"))
-                   (which  (string-append (assoc-ref inputs "which")
-                                          "/bin/which")))
+             (let ((ogg123 (search-input-file inputs "/bin/ogg123"))
+                   (mpg321 (search-input-file inputs "/bin/mpg321"))
+                   (which  (search-input-file inputs "/bin/which")))
                (substitute* "src/orpheusconf.cc"
                  (("ogg123") ogg123)
                  (("which")  which)
diff --git a/gnu/packages/ots.scm b/gnu/packages/ots.scm
index 73dd5e4832..e527bf277e 100644
--- a/gnu/packages/ots.scm
+++ b/gnu/packages/ots.scm
@@ -66,10 +66,7 @@
                (("shrext_cmds") "shrext"))
              #t)))))
     (inputs
-      `(("glib" ,glib)
-        ("popt" ,popt)
-        ("libxml2" ,libxml2)
-        ("zlib" ,zlib)))
+      (list glib popt libxml2 zlib))
     (native-inputs
       `(("glib:bin" ,glib "bin")
         ("pkg-config" ,pkg-config)))
diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm
index b1cd57364f..05795824b5 100644
--- a/gnu/packages/package-management.scm
+++ b/gnu/packages/package-management.scm
@@ -19,6 +19,8 @@
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
 ;;; Copyright © 2021 Ivan Gankevich <i.gankevich@spbu.ru>
 ;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021 John Kehayias <john.kehayias@protonmail.com>
+;;; Copyright © 2022 Zhu Zihao <all_but_last@163.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -36,6 +38,7 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages package-management)
+  #:use-module (gnu artwork)
   #:use-module (gnu packages)
   #:use-module (gnu packages acl)
   #:use-module (gnu packages attr)
@@ -60,6 +63,8 @@
   #:use-module (gnu packages dbm)
   #:use-module (gnu packages docbook)
   #:use-module (gnu packages file)
+  #:use-module (gnu packages flex)
+  #:use-module (gnu packages gcc)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
@@ -68,12 +73,15 @@
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages guile)
   #:use-module (gnu packages guile-xyz)
+  #:use-module (gnu packages hardware)
   #:use-module (gnu packages hurd)
+  #:use-module (gnu packages imagemagick)
   #:use-module (gnu packages less)
   #:use-module (gnu packages libedit)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages lisp)
   #:use-module (gnu packages man)
+  #:use-module (gnu packages markup)
   #:use-module (gnu packages nettle)
   #:use-module (gnu packages networking)
   #:use-module (gnu packages ninja)
@@ -84,6 +92,7 @@
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages popt)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-check)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
@@ -104,6 +113,7 @@
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system meson)
   #:use-module (guix build-system python)
+  #:use-module (guix build-system trivial)
   #:use-module (guix download)
   #:use-module (guix gexp)
   #:use-module (guix git-download)
@@ -137,13 +147,17 @@
 ;; Instead, please push one commit that rolls back Guix to before the mistake,
 ;; and then another that points to the first one. That way, the faulty commit
 ;; won't appear on the linked list.
+;;
+;; If you are updating this package because it fails to build, you need to
+;; actually update it *twice*, as the installer is pointing to the N-1 guix
+;; package revision.
 (define-public guix
   ;; Latest version of Guix, which may or may not correspond to a release.
   ;; Note: the 'update-guix-package.scm' script expects this definition to
   ;; start precisely like this.
   (let ((version "1.3.0")
-        (commit "ff775440218c4f576d51aa01ce419b1fb786170a")
-        (revision 7))
+        (commit "a27e47f9d1e22dc32bb250cfeef88cfacb930e23")
+        (revision 23))
     (package
       (name "guix")
 
@@ -159,7 +173,7 @@
                       (commit commit)))
                 (sha256
                  (base32
-                  "1fy5d2nyc1zk847bmc8jhs7nswdlddg090vsnm733x9gka01xj8j"))
+                  "12jmvagbw05hmmlrb82i0qazhlv7mcfnl4dmknwx3a9hd760g9y1"))
                 (file-name (string-append "guix-" version "-checkout"))))
       (build-system gnu-build-system)
       (arguments
@@ -323,10 +337,11 @@ $(prefix)/etc/openrc\n")))
                                (ssh    (assoc-ref inputs "guile-ssh"))
                                (gnutls (assoc-ref inputs "gnutls"))
                                (disarchive (assoc-ref inputs "disarchive"))
+                               (lzma (assoc-ref inputs "guile-lzma"))
                                (locales (assoc-ref inputs "glibc-utf8-locales"))
                                (deps   (list gcrypt json sqlite gnutls git
                                              bs ssh zlib lzlib zstd guile-lib
-                                             disarchive))
+                                             disarchive lzma))
                                (deps*  (if avahi (cons avahi deps) deps))
                                (effective
                                 (read-line
@@ -429,6 +444,7 @@ $(prefix)/etc/openrc\n")))
          ("bootstrap/xz" ,(bootstrap-executable "xz" (%current-system)))
 
          ("disarchive" ,disarchive)               ;for 'guix perform-download'
+         ("guile-lzma" ,guile-lzma)               ;for Disarchive
 
          ("glibc-utf8-locales" ,glibc-utf8-locales)))
       (propagated-inputs
@@ -480,15 +496,12 @@ the Nix package manager.")
 
     ;; Use a minimum set of dependencies.
     (native-inputs
-     (fold alist-delete (package-native-inputs guix)
-           '("po4a" "graphviz" "help2man")))
+     (modify-inputs (package-native-inputs guix)
+       (delete "po4a" "graphviz" "help2man")))
     (inputs
-     `(("gnutls" ,gnutls)
-       ("guile-git" ,guile-git)
-       ("guile-json" ,guile-json-3)
-       ("guile-gcrypt" ,guile-gcrypt)
-       ,@(fold alist-delete (package-inputs guix)
-               '("boot-guile" "boot-guile/i686" "util-linux"))))
+     (modify-inputs (package-inputs guix)
+       (delete "boot-guile" "boot-guile/i686" "util-linux")
+       (prepend gnutls guile-git guile-json-3 guile-gcrypt)))
 
     (propagated-inputs '())
 
@@ -528,9 +541,6 @@ the Nix package manager.")
                (invoke "make" "install-binPROGRAMS")))
            (delete 'wrap-program)))))))
 
-(define-public guile3.0-guix
-  (deprecated-package "guile3.0-guix" guix))
-
 (define-public guix-minimal
   ;; A version of Guix which is built with the minimal set of dependencies, as
   ;; outlined in the README "Requirements" section.  Intended as a CI job, so
@@ -540,13 +550,11 @@ the Nix package manager.")
      (inherit guix)
      (name "guix-minimal")
      (native-inputs
-      (fold alist-delete
-            (package-native-inputs guix)
-            '("guile-ssh")))
+      (modify-inputs (package-native-inputs guix)
+        (delete "guile-ssh")))
      (propagated-inputs
-      (fold alist-delete
-            (package-propagated-inputs guix)
-            '("guile-ssh"))))))
+      (modify-inputs (package-propagated-inputs guix)
+        (delete "guile-ssh"))))))
 
 (define (source-file? file stat)
   "Return true if FILE is likely a source file, false if it is a typical
@@ -588,6 +596,64 @@ out) and returning a package that uses that as its 'source'."
                                 #:recursive? #t
                                 #:select? (force select?))))))))
 
+(define-public guix-icons
+  (package
+    (inherit guix)
+    (name "guix-icons")
+    (version "0.1")
+    (source %artwork-repository)
+    (build-system trivial-build-system)
+    (native-inputs
+     (list imagemagick))
+    (inputs
+     '())
+    (arguments
+     `(#:modules ((guix build utils)
+                  (gnu build svg))
+       #:builder
+       ,(with-extensions (list guile-rsvg guile-cairo)
+          #~(begin
+              (use-modules (guix build utils)
+                           (gnu build svg))
+              (let* ((logo (string-append #$source "/logo/Guix.svg"))
+                     (logo-white
+                      (string-append #$source
+                                     "/logo/Guix-horizontal-white.svg"))
+                     (theme "hicolor")
+                     (category "apps")
+                     (sizes '(16 24 32 48 64 72 96 128 256 512 1024))
+                     (icons
+                      (string-append #$output "/share/icons/" theme))
+                     (scalable-dir
+                      (string-append icons "/scalable/" category)))
+                (setenv "XDG_CACHE_HOME" (getcwd))
+
+                ;; Create the scalable icon files.
+                (mkdir-p scalable-dir)
+                (copy-file logo
+                           (string-append scalable-dir "/guix-icon.svg"))
+                (copy-file logo-white
+                           (string-append scalable-dir
+                                          "/guix-white-icon.svg"))
+
+                ;; Create the fixed dimensions icon files.
+                (for-each
+                 (lambda (size)
+                   (let* ((dimension
+                           (format #f "~ax~a" size size))
+                          (file
+                           (string-append icons "/" dimension "/" category
+                                          "/guix-icon.png")))
+                     (mkdir-p (dirname file))
+                     (svg->png logo file
+                               #:width size
+                               #:height size)))
+                 sizes))))))
+    (synopsis "GNU Guix icons")
+    (description "This package contains GNU Guix icons organized according to
+the Icon Theme Specification.  They can be used by applications querying the
+GTK icon cache for instance.")))
+
 
 ;;;
 ;;; Other tools.
@@ -596,41 +662,62 @@ out) and returning a package that uses that as its 'source'."
 (define-public nix
   (package
     (name "nix")
-    (version "2.3.13")
-    (source (origin
-             (method url-fetch)
-             (uri (string-append "https://releases.nixos.org/nix/nix-"
-                                 version "/nix-" version ".tar.xz"))
-             (sha256
-              (base32
-               "0631qk2lgd76y6g2z45wy6lcpv647r2a08jd2dagzzpwniy68d3h"))))
+    (version "2.5.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "http://github.com/NixOS/nix")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1m8rmv8i6lg83pmalvjlq1fn8mcghn3ngjv3kw1kqsa45ymj5sqq"))
+       (patches
+        (search-patches "nix-dont-build-html-doc.diff"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:configure-flags '("--sysconfdir=/etc" "--enable-gc")
-       #:phases
-       (modify-phases %standard-phases
-         (replace 'install
-           ;; Don't try & fail to create subdirectories in /etc, but keep them
-           ;; in the output as examples.
-           (lambda* (#:key (make-flags '()) outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (etc (string-append out "/etc")))
-               (apply invoke "make" "install"
-                      (string-append "sysconfdir=" etc)
-                      (string-append "profiledir=" etc "/profile.d")
-                      make-flags)))))))
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("boost" ,boost)
-              ("brotli" ,brotli)
-              ("bzip2" ,bzip2)
-              ("curl" ,curl)
-              ("editline" ,editline)
-              ("libgc" ,libgc)
-              ("libseccomp" ,libseccomp)
-              ("libsodium" ,libsodium)
-              ("openssl" ,openssl)
-              ("sqlite" ,sqlite)
-              ("xz" ,xz)))
+     (list
+      #:configure-flags #~(list "--sysconfdir=/etc" "--enable-gc")
+      #:phases
+      #~(modify-phases %standard-phases
+          (replace 'install
+            ;; Don't try & fail to create subdirectories in /etc, but keep them
+            ;; in the output as examples.
+            (lambda* (#:key (make-flags '()) outputs #:allow-other-keys)
+              (let ((etc (string-append #$output "/etc")))
+                (apply invoke "make" "install"
+                       (string-append "sysconfdir=" etc)
+                       (string-append "profiledir=" etc "/profile.d")
+                       make-flags)))))))
+    (native-inputs
+     (list autoconf
+           autoconf-archive
+           automake
+           bison
+           flex
+           googletest
+           jq
+           libtool
+           pkg-config))
+    (inputs
+     (append (list boost
+                   brotli
+                   bzip2
+                   curl
+                   editline
+                   libarchive
+                   libgc
+                   libseccomp
+                   libsodium
+                   lowdown
+                   openssl
+                   sqlite
+                   xz
+                   zlib)
+             (if (or (target-x86-64?)
+                     (target-x86-32?))
+                 (list libcpuid)
+                 '())))
     (home-page "https://nixos.org/nix/")
     (synopsis "The Nix package manager")
     (description
@@ -655,12 +742,10 @@ sub-directory.")
                 "0jrxy12ywn7smdzdnvwzjw77l6knx6jkj2rckgykg1dpf6bdkm89"))))
     (build-system gnu-build-system)
     (inputs
-     `(("perl" ,perl)))
+     (list perl))
     (native-inputs
-     `(("perl-test-simple" ,perl-test-simple)
-       ("perl-test-output" ,perl-test-output)
-       ("perl-capture-tiny" ,perl-capture-tiny)
-       ("perl-io-stringy" ,perl-io-stringy)))
+     (list perl-test-simple perl-test-output perl-capture-tiny
+           perl-io-stringy))
     (home-page "https://www.gnu.org/software/stow/")
     (synopsis "Managing installed software packages")
     (description
@@ -716,20 +801,20 @@ features of Stow with some extensions.")
                                                nss "/lib/nss"))
                         #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("python" ,python)
-       ("xz" ,xz)
-       ("bdb" ,bdb)
-       ("popt" ,popt)
-       ("nss" ,nss)
-       ("nspr" ,nspr)
-       ("libarchive" ,libarchive)
-       ("libgcrypt" ,libgcrypt)
-       ("file" ,file)
-       ("bzip2" ,bzip2)
-       ("zlib" ,zlib)
-       ("cpio" ,cpio)))
+     (list python
+           xz
+           bdb
+           popt
+           nss
+           nspr
+           libarchive
+           libgcrypt
+           file
+           bzip2
+           zlib
+           cpio))
     (home-page "https://rpm.org/")
     (synopsis "The RPM Package Manager")
     (description
@@ -759,17 +844,14 @@ transactions from C or Python.")
          "1vyk0g0gci4z9psisb8h50zi3j1nwfdg1jw3j76cxv0brln0v3fw"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-clyent" ,python-clyent)
-       ("python-nbformat" ,python-nbformat)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-requests" ,python-requests)))
+     (list python-clyent python-nbformat python-pyyaml python-requests))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-dateutil" ,python-dateutil)
-       ("python-freezegun" ,python-freezegun)
-       ("python-mock" ,python-mock)
-       ("python-pillow" ,python-pillow)
-       ("python-pytz" ,python-pytz)))
+     (list python-coverage
+           python-dateutil
+           python-freezegun
+           python-mock
+           python-pillow
+           python-pytz))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -825,16 +907,12 @@ environments.")
              (add-installed-pythonpath inputs outputs)
              (invoke "pytest" "-vv" "tests"))))))
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-tqdm" ,python-tqdm)))
+     (list python-six python-tqdm))
     (inputs
-     `(("libarchive" ,libarchive)))
+     (list libarchive))
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-mock" ,python-pytest-mock)
-       ("python-mock" ,python-mock)))
+     (list python-cython python-pytest python-pytest-cov
+           python-pytest-mock python-mock))
     (home-page "https://conda.io")
     (synopsis "Create and extract conda packages of various formats")
     (description
@@ -954,22 +1032,22 @@ extracting, creating, and converting between formats.")
                                     "/bin/conda")
                      "init"))))))
     (inputs
-     `(("python-wrapper" ,python-wrapper)))
+     (list python-wrapper))
     (propagated-inputs
-     `(("python-anaconda-client" ,python-anaconda-client)
-       ("python-conda-package-handling" ,python-conda-package-handling)
-       ("python-cytoolz" ,python-cytoolz)
-       ("python-pycosat" ,python-pycosat)
-       ("python-pytest" ,python-pytest)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-requests" ,python-requests)
-       ("python-responses" ,python-responses)
-       ("python-ruamel.yaml" ,python-ruamel.yaml)
-       ("python-tqdm" ,python-tqdm)
-       ;; XXX: This is dragged in by libarchive and is needed at runtime.
-       ("zstd" ,zstd)))
+     (list python-anaconda-client
+           python-conda-package-handling
+           python-cytoolz
+           python-pycosat
+           python-pytest
+           python-pyyaml
+           python-requests
+           python-responses
+           python-ruamel.yaml
+           python-tqdm
+           ;; XXX: This is dragged in by libarchive and is needed at runtime.
+           zstd))
     (native-inputs
-     `(("python-pytest-timeout" ,python-pytest-timeout)))
+     (list python-pytest-timeout))
     (home-page "https://github.com/conda/conda")
     (synopsis "Cross-platform, OS-agnostic, system-level binary package manager")
     (description
@@ -980,13 +1058,10 @@ it easy to create independent environments even for C libraries.  Conda is
 written entirely in Python.")
     (license license:bsd-3)))
 
-(define-public python-conda
-  (deprecated-package "python-conda" conda))
-
 (define-public conan
   (package
     (name "conan")
-    (version "1.40.2")
+    (version "1.42.0")
     (source
      (origin
        (method git-fetch)               ;no tests in PyPI archive
@@ -996,7 +1071,7 @@ written entirely in Python.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0hp8qs54l4cw043f1kycjwgdr7f388lsyxqcbzfaayr6xg1d3dw0"))))
+         "153npvj81m1c33gfcv2nry7xhyikxnhjns7lvs525f1x20ck6asg"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -1005,7 +1080,9 @@ written entirely in Python.")
            (lambda _
              (substitute* "conans/requirements.txt"
                (("node-semver==0.6.1")
-                "node-semver>=0.6.1"))))
+                "node-semver>=0.6.1")
+               (("Jinja2>=2.9, <3")
+                "Jinja2>=2.9"))))
          (add-after 'unpack 'patch-paths
            (lambda* (#:key inputs #:allow-other-keys)
              (let ((coreutils (assoc-ref inputs "coreutils")))
@@ -1088,31 +1165,31 @@ written entirely in Python.")
                              "and not settings_as_a_dict_conanfile ")
                             "")))))))))
     (propagated-inputs
-     `(("python-bottle" ,python-bottle)
-       ("python-colorama" ,python-colorama)
-       ("python-dateutil" ,python-dateutil)
-       ("python-distro" ,python-distro)
-       ("python-fasteners" ,python-fasteners)
-       ("python-future" ,python-future)
-       ("python-jinja2" ,python-jinja2)
-       ("python-node-semver" ,python-node-semver)
-       ("python-patch-ng" ,python-patch-ng)
-       ("python-pluginbase" ,python-pluginbase)
-       ("python-pygments" ,python-pygments)
-       ("python-pyjwt" ,python-pyjwt)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-requests" ,python-requests)
-       ("python-six" ,python-six)
-       ("python-tqdm" ,python-tqdm)
-       ("python-urllib3" ,python-urllib3)))
+     (list python-bottle
+           python-colorama
+           python-dateutil
+           python-distro
+           python-fasteners
+           python-future
+           python-jinja2
+           python-node-semver
+           python-patch-ng
+           python-pluginbase
+           python-pygments
+           python-pyjwt
+           python-pyyaml
+           python-requests
+           python-six
+           python-tqdm
+           python-urllib3))
     (inputs
-     `(("coreutils" ,coreutils)))       ;for printenv
+     (list coreutils))       ;for printenv
     (native-inputs
      `(("autoconf" ,autoconf)
        ("automake" ,automake)
-       ("cmake" ,cmake)                 ;requires cmake >= 3.17
+       ("cmake" ,cmake)
        ("git" ,git-minimal)
-       ("meson" ,meson-0.55)
+       ("meson" ,meson)
        ("ninja",ninja)
        ("pkg-config" ,pkg-config)
        ("python-bottle" ,python-bottle)
@@ -1157,11 +1234,7 @@ allow for great power and flexibility.
        #:make-flags
        '("GUILE_AUTO_COMPILE=0")))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ("texinfo" ,texinfo)
-       ("graphviz" ,graphviz)))
+     (list autoconf automake pkg-config texinfo graphviz))
     (inputs
      (let ((p (package-input-rewriting
                `((,guile-3.0 . ,guile-3.0-latest))
@@ -1187,8 +1260,8 @@ environments.")
     (license (list license:gpl3+ license:agpl3+ license:silofl1.1))))
 
 (define-public guix-build-coordinator
-  (let ((commit "c2f0c5b36f8294bb4c699806f9e8c576ae9b9f90")
-        (revision "33"))
+  (let ((commit "048c609667f1690fe0a8d8c9b772f9bc6dd412e0")
+        (revision "47"))
     (package
       (name "guix-build-coordinator")
       (version (git-version "0" revision commit))
@@ -1199,7 +1272,7 @@ environments.")
                       (commit commit)))
                 (sha256
                  (base32
-                  "0nlh1cyvpbsfy9pk22xmgx0vb625j7qgv79y527q91c9fjn7g37v"))
+                  "13sf3gv1jdaq6ncyw4s58zw0l2xjnksqjynlbqzx08i45xpj5yv8"))
                 (file-name (string-append name "-" version "-checkout"))))
       (build-system gnu-build-system)
       (arguments
@@ -1276,41 +1349,41 @@ environments.")
                #t))
            (delete 'strip))))             ; As the .go files aren't compatible
       (native-inputs
-       `(("pkg-config" ,pkg-config)
-         ("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("gnutls" ,gnutls)
-
-         ;; Guile libraries are needed here for cross-compilation.
-         ("guile-json" ,guile-json-4)
-         ("guile-gcrypt" ,guile-gcrypt)
-         ("guix" ,guix)
-         ("guile-prometheus" ,guile-prometheus)
-         ("guile-fibers" ,guile-fibers)
-         ("guile-lib" ,guile-lib)
-         ("guile" ,@(assoc-ref (package-native-inputs guix) "guile"))))
+       (list pkg-config
+             autoconf
+             automake
+             gnutls
+
+             ;; Guile libraries are needed here for cross-compilation.
+             guile-json-4
+             guile-gcrypt
+             guix
+             guile-prometheus
+             guile-fibers
+             guile-lib
+             (first (assoc-ref (package-native-inputs guix) "guile"))))
       (inputs
-       `(("guile" ,@(assoc-ref (package-native-inputs guix) "guile"))
-         ,@(if (%current-target-system)
-               `(("bash" ,bash-minimal))
-               '())
-         ("sqlite" ,sqlite)
-         ,@(if (hurd-target?)
-               '()
-               `(("sqitch" ,sqitch)))))
+       (append
+        (list (first (assoc-ref (package-native-inputs guix) "guile"))
+              sqlite
+              bash-minimal)
+        (if (hurd-target?)
+            '()
+            (list sqitch))))
       (propagated-inputs
-       `(,@(if (hurd-target?)
-               '()
-               `(("guile-fibers" ,guile-fibers)))
-         ("guile-prometheus" ,guile-prometheus)
-         ("guile-gcrypt" ,guile-gcrypt)
-         ("guile-json" ,guile-json-4)
-         ("guile-lib" ,guile-lib)
-         ("guile-lzlib" ,guile-lzlib)
-         ("guile-zlib" ,guile-zlib)
-         ("guile-sqlite3" ,guile-sqlite3)
-         ("guix" ,guix)
-         ("gnutls" ,gnutls)))
+       (append
+        (list guile-prometheus
+              guile-gcrypt
+              guile-json-4
+              guile-lib
+              guile-lzlib
+              guile-zlib
+              guile-sqlite3
+              guix
+              gnutls)
+        (if (hurd-target?)
+            '()
+            (list guile-fibers))))
       (home-page "https://git.cbaines.net/guix/build-coordinator/")
       (synopsis "Tool to help build derivations")
       (description
@@ -1319,6 +1392,100 @@ potentially many machines, and with doing something with the results and
 outputs of those builds.")
       (license license:gpl3+))))
 
+(define-public guix-build-coordinator/agent-only
+  (package
+    (inherit guix-build-coordinator)
+    (name "guix-build-coordinator-agent-only")
+    (arguments
+     `(#:modules (((guix build guile-build-system)
+                   #:select (target-guile-effective-version))
+                  ,@%gnu-build-system-modules)
+       #:imported-modules ((guix build guile-build-system)
+                           ,@%gnu-build-system-modules)
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'set-GUILE_AUTO_COMPILE
+           (lambda _
+             ;; To avoid warnings relating to 'guild'.
+             (setenv "GUILE_AUTO_COMPILE" "0")
+             #t))
+         (add-after 'install 'wrap-executable
+           (lambda* (#:key inputs outputs target #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin"))
+                    (guile (assoc-ref inputs "guile"))
+                    (version (target-guile-effective-version))
+                    (scm (string-append out "/share/guile/site/" version))
+                    (go  (string-append out "/lib/guile/" version "/site-ccache")))
+               (for-each
+                (lambda (file)
+                  (simple-format (current-error-port) "wrapping: ~A\n" file)
+                  (let ((guile-inputs (list
+                                       "guile-json"
+                                       "guile-gcrypt"
+                                       "guix"
+                                       "guile-prometheus"
+                                       "guile-lib"
+                                       "guile-lzlib"
+                                       "guile-zlib"
+                                       "guile-sqlite3"
+                                       "gnutls")))
+                    (wrap-program file
+                      `("PATH" ":" prefix (,bin))
+                      `("GUILE_LOAD_PATH" ":" prefix
+                        (,scm ,(string-join
+                                (map (lambda (input)
+                                       (simple-format
+                                        #f "~A/share/guile/site/~A"
+                                        (assoc-ref inputs input)
+                                        version))
+                                     guile-inputs)
+                                ":")))
+                      `("GUILE_LOAD_COMPILED_PATH" ":" prefix
+                        (,go ,(string-join
+                               (map (lambda (input)
+                                      (simple-format
+                                       #f "~A/lib/guile/~A/site-ccache"
+                                       (assoc-ref inputs input)
+                                       version))
+                                    guile-inputs)
+                               ":"))))))
+                (find-files bin)))
+             #t))
+         (delete 'strip))))             ; As the .go files aren't compatible
+    (native-inputs
+     (list pkg-config
+           autoconf
+           automake
+           gnutls
+
+           ;; Guile libraries are needed here for cross-compilation.
+           guile-json-4
+           guile-gcrypt
+           guix
+           guile-prometheus
+           guile-lib
+           (first (assoc-ref (package-native-inputs guix) "guile"))))
+    (inputs
+     (list (first (assoc-ref (package-native-inputs guix) "guile"))
+           bash-minimal))
+    (propagated-inputs
+     (append
+         (list guile-prometheus
+               guile-gcrypt
+               guile-json-4
+               guile-lib
+               guile-lzlib
+               guile-zlib
+               guix
+               gnutls)))
+    (description
+     "The Guix Build Coordinator helps with performing lots of builds across
+potentially many machines, and with doing something with the results and
+outputs of those builds.
+
+This package just includes the agent component.")))
+
 (define-public guix-jupyter
   (package
     (name "guix-jupyter")
@@ -1379,21 +1546,18 @@ outputs of those builds.")
                                  "guix-jupyter-kernel.scm")))
                #t))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-
-       ;; For testing.
-       ("jupyter" ,jupyter)
-       ("python-ipython" ,python-ipython)
-       ("python-ipykernel" ,python-ipykernel)))
+     (list autoconf
+           automake
+           pkg-config
+           ;; For testing.
+           jupyter
+           python-ipython
+           python-ipykernel))
     (inputs
      `(("guix" ,guix)
        ("guile" ,@(assoc-ref (package-native-inputs guix) "guile"))))
     (propagated-inputs
-     `(("guile-json" ,guile-json-4)
-       ("guile-simple-zmq" ,guile-simple-zmq)
-       ("guile-gcrypt" ,guile-gcrypt)))
+     (list guile-json-4 guile-simple-zmq guile-gcrypt))
     (synopsis "Guix kernel for Jupyter")
     (description
      "Guix-Jupyter is a Jupyter kernel.  It allows you to annotate notebooks
@@ -1403,6 +1567,113 @@ such as @code{python-ipykernel} on behalf of the notebook user and runs them
 in an isolated environment, in separate namespaces.")
     (license license:gpl3+)))
 
+(define-public nar-herder
+  (let ((commit "049dfec287fa948cac6682d0a047bc0ed356f0bf")
+        (revision "1"))
+    (package
+      (name "nar-herder")
+      (version (git-version "0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://git.cbaines.net/git/guix/nar-herder")
+                      (commit commit)))
+                (sha256
+                 (base32
+                  "1bkn6avcyp2rcrqaync65b8yn9dvxlkjpk3mdk5nsy527dzhs5ws"))
+                (file-name (string-append name "-" version "-checkout"))))
+      (build-system gnu-build-system)
+      (arguments
+       `(#:modules (((guix build guile-build-system)
+                     #:select (target-guile-effective-version))
+                    ,@%gnu-build-system-modules)
+         #:imported-modules ((guix build guile-build-system)
+                             ,@%gnu-build-system-modules)
+         #:phases
+         (modify-phases %standard-phases
+           (add-before 'build 'set-GUILE_AUTO_COMPILE
+             (lambda _
+               ;; To avoid warnings relating to 'guild'.
+               (setenv "GUILE_AUTO_COMPILE" "0")))
+           (add-after 'install 'wrap-executable
+             (lambda* (#:key inputs outputs target #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out"))
+                      (bin (string-append out "/bin"))
+                      (guile (assoc-ref inputs "guile"))
+                      (version (target-guile-effective-version))
+                      (scm (string-append out "/share/guile/site/" version))
+                      (go  (string-append out "/lib/guile/" version "/site-ccache")))
+                 (for-each
+                  (lambda (file)
+                    (simple-format (current-error-port) "wrapping: ~A\n" file)
+                    (let ((guile-inputs (list
+                                         "guile-json"
+                                         "guile-gcrypt"
+                                         "guix"
+                                         "guile-lib"
+                                         "guile-sqlite3"
+                                         "gnutls"
+                                         "guile-fibers")))
+                      (wrap-program file
+                        `("GUILE_LOAD_PATH" ":" prefix
+                          (,scm ,(string-join
+                                  (map (lambda (input)
+                                         (string-append
+                                          (assoc-ref inputs input)
+                                          "/share/guile/site/"
+                                          version))
+                                       guile-inputs)
+                                  ":")))
+                        `("GUILE_LOAD_COMPILED_PATH" ":" prefix
+                          (,go ,(string-join
+                                 (map (lambda (input)
+                                        (string-append
+                                         (assoc-ref inputs input)
+                                         "/lib/guile/" version "/site-ccache"))
+                                      guile-inputs)
+                                 ":"))))))
+                  (find-files bin)))
+               #t))
+           (delete 'strip))))           ; As the .go files aren't compatible
+      (native-inputs
+       (list pkg-config
+             autoconf
+             automake
+             gnutls
+
+             ;; Guile libraries are needed here for cross-compilation.
+             guile-3.0
+             guile-json-4
+             guile-gcrypt
+             guix
+             guile-fibers
+             guile-lib
+             guile-sqlite3))
+      (inputs
+       (list bash-minimal
+             guile-3.0))
+      (propagated-inputs
+       (list guile-json-4
+             guile-gcrypt
+             guix
+             guile-fibers
+             guile-lib
+             guile-sqlite3
+             gnutls))
+      (home-page "https://git.cbaines.net/guix/nar-herder")
+      (synopsis "Utility for managing and serving nars")
+      (description
+       "The Nar Herder is a utility for managing a collection of
+nars (normalized archives, in the context of Guix) along with the
+corresponding narinfo files which contain some signed metadata.
+
+It can assist in serving a collection of nars, moving them between machines,
+or mirroring an existing collection of nars.
+
+It's currently a working prototype, many designed features aren't implemented,
+and the error handling is very rough.")
+      (license license:agpl3+))))
+
 (define-public gcab
   (package
     (name "gcab")
@@ -1421,8 +1692,7 @@ in an isolated environment, in separate namespaces.")
        ("pkg-config" ,pkg-config)
        ("vala" ,vala)))
     (inputs
-     `(("glib" ,glib)
-       ("zlib" ,zlib)))
+     (list glib zlib))
     (arguments
      `(#:configure-flags
        ;; XXX This ‘documentation’ is for developers, and fails informatively:
@@ -1450,14 +1720,10 @@ Microsoft cabinet (.@dfn{CAB}) files.")
                 "1skq17qr2ic4qr3779j49byfm8rncwbsq9rj1a33ncn2m7isdwdv"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("bison" ,bison)
-       ("pkg-config" ,pkg-config)))
+     (list bison pkg-config))
     (inputs
-     `(("gcab" ,gcab)
-       ("glib" ,glib)
-       ("libgsf" ,libgsf)
-       ("libxml2" ,libxml2)
-       ("uuid" ,util-linux "lib")))
+     (list gcab glib libgsf libxml2
+           `(,util-linux "lib")))
     (home-page "https://wiki.gnome.org/msitools")
     (synopsis "Windows Installer file manipulation tool")
     (description
@@ -1469,7 +1735,7 @@ for packaging and deployment of cross-compiled Windows applications.")
 (define-public libostree
   (package
     (name "libostree")
-    (version "2021.3")
+    (version "2022.1")
     (source
      (origin
        (method url-fetch)
@@ -1477,7 +1743,7 @@ for packaging and deployment of cross-compiled Windows applications.")
              "https://github.com/ostreedev/ostree/releases/download/v"
              (version-major+minor version) "/libostree-" version ".tar.xz"))
        (sha256
-        (base32 "1cyhr3s7xsgnsais5m4cjwdwcq46naf25r1k042c4n1y1jgs798g"))))
+        (base32 "1mfakwm0sjvb1vvl3jhc451yyf723k7c4vv1yqs8law4arw0x823"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
@@ -1494,23 +1760,23 @@ for packaging and deployment of cross-compiled Windows applications.")
        ;;     tap-driver.sh: fatal: I/O or internal error
        #:tests? #f))
     (native-inputs
-     `(("attr" ,attr)                   ; for tests
-       ("bison" ,bison)
-       ("glib:bin" ,glib "bin")         ; for 'glib-mkenums'
-       ("gobject-introspection" ,gobject-introspection)
-       ("pkg-config" ,pkg-config)
-       ("xsltproc" ,libxslt)))
+     (list attr ; for tests
+           bison
+           `(,glib "bin") ; for 'glib-mkenums'
+           gobject-introspection
+           pkg-config
+           libxslt))
     (inputs
-     `(("avahi" ,avahi)
-       ("docbook-xml" ,docbook-xml-4.2)
-       ("docbook-xsl" ,docbook-xsl)
-       ("e2fsprogs" ,e2fsprogs)
-       ("fuse" ,fuse)
-       ("glib" ,glib)
-       ("gpgme" ,gpgme)
-       ("libarchive" ,libarchive)
-       ("libsoup" ,libsoup)
-       ("util-linux" ,util-linux)))
+     (list avahi
+           docbook-xml
+           docbook-xsl
+           e2fsprogs
+           fuse
+           glib
+           gpgme
+           libarchive
+           libsoup-minimal-2 ; needs libsoup-2.4
+           util-linux))
     (home-page "https://ostree.readthedocs.io/en/latest/")
     (synopsis "Operating system and container binary deployment and upgrades")
     (description
@@ -1523,14 +1789,15 @@ the boot loader configuration.")
 (define-public flatpak
   (package
    (name "flatpak")
-   (version "1.10.2")
+   (version "1.12.3")
    (source
     (origin
      (method url-fetch)
      (uri (string-append "https://github.com/flatpak/flatpak/releases/download/"
                          version "/flatpak-" version ".tar.xz"))
      (sha256
-      (base32 "1r6xw7r3ir2vaa30n3mily6m7d51cf4qv22fkqlzzy3js0wjf5fv"))))
+      (base32 "0sbvywfc57sb58maxins4sg7rfwrm1wcgw68069qbsyp8wrz45fp"))
+     (patches (search-patches "flatpak-fix-path.patch"))))
 
    ;; Wrap 'flatpak' so that GIO_EXTRA_MODULES is set, thereby allowing GIO to
    ;; find the TLS backend in glib-networking.
@@ -1553,8 +1820,8 @@ the boot loader configuration.")
         (add-after 'unpack 'fix-tests
           (lambda* (#:key inputs #:allow-other-keys)
             (copy-recursively
-             (string-append (assoc-ref inputs "glibc-utf8-locales")
-                            "/lib/locale/") "/tmp/locale")
+             (search-input-directory inputs "lib/locale")
+             "/tmp/locale")
             (for-each make-file-writable (find-files "/tmp"))
             (substitute* "tests/make-test-runtime.sh"
               (("cp `which.*") "echo guix\n")
@@ -1565,6 +1832,15 @@ cp -r /tmp/locale/*/en_US.*")))
               (("/bin/kill") (which "kill"))
               (("/usr/bin/python3") (which "python3")))
             #t))
+        (add-after 'unpack 'p11-kit-fix
+          (lambda* (#:key inputs #:allow-other-keys)
+            (let ((p11-path (search-input-file inputs "/bin/p11-kit")))
+              (substitute* "session-helper/flatpak-session-helper.c"
+                (("\"p11-kit\",")
+                 (string-append "\"" p11-path "\","))
+                (("if \\(g_find_program_in_path \\(\"p11-kit\"\\)\\)")
+                 (string-append "if (g_find_program_in_path (\""
+                                p11-path "\"))"))))))
         ;; Many tests fail for unknown reasons, so we just run a few basic
         ;; tests.
         (replace 'check
@@ -1572,39 +1848,37 @@ cp -r /tmp/locale/*/en_US.*")))
             (setenv "HOME" "/tmp")
             (invoke "make" "check"
                     "TESTS=tests/test-basic.sh tests/test-config.sh testcommon"))))))
-    (native-inputs
-    `(("bison" ,bison)
-      ("dbus" ,dbus) ; for dbus-daemon
-      ("gettext" ,gettext-minimal)
-      ("glib:bin" ,glib "bin")          ; for glib-mkenums + gdbus-codegen
-      ("glibc-utf8-locales" ,glibc-utf8-locales)
-      ("gobject-introspection" ,gobject-introspection)
-      ("libcap" ,libcap)
-      ("pkg-config" ,pkg-config)
-      ("python" ,python)
-      ("python-pyparsing" ,python-pyparsing)
-      ("socat" ,socat)
-      ("which" ,which)))
-   (propagated-inputs `(("glib-networking" ,glib-networking)
-                        ("gnupg" ,gnupg)
-                        ("gsettings-desktop-schemas"
-                         ,gsettings-desktop-schemas)))
+   (native-inputs
+    (list bison
+          dbus ; for dbus-daemon
+          gettext-minimal
+          `(,glib "bin") ; for glib-mkenums + gdbus-codegen
+          glibc-utf8-locales
+          gobject-introspection
+          libcap
+          pkg-config
+          python
+          python-pyparsing
+          socat
+          which))
    (inputs
-    `(("appstream-glib" ,appstream-glib)
-      ("bubblewrap" ,bubblewrap)
-      ("dconf" ,dconf)
-      ("fuse" ,fuse)
-      ("gdk-pixbuf" ,gdk-pixbuf)
-      ("gpgme" ,gpgme)
-      ("json-glib" ,json-glib)
-      ("libarchive" ,libarchive)
-      ("libostree" ,libostree)
-      ("libseccomp" ,libseccomp)
-      ("libsoup" ,libsoup)
-      ("libxau" ,libxau)
-      ("libxml2" ,libxml2)
-      ("util-linux" ,util-linux)
-      ("xdg-dbus-proxy" ,xdg-dbus-proxy)))
+    (list appstream-glib
+          bubblewrap
+          dconf
+          fuse
+          gdk-pixbuf
+          gpgme
+          json-glib
+          libarchive
+          libostree
+          libseccomp
+          libsoup-minimal-2
+          libxau
+          libxml2
+          p11-kit-next
+          util-linux
+          xdg-dbus-proxy))
+   (propagated-inputs (list glib-networking gnupg gsettings-desktop-schemas))
    (home-page "https://flatpak.org")
    (synopsis "System for building, distributing, and running sandboxed desktop
 applications")
@@ -1646,13 +1920,9 @@ sandboxed desktop applications on GNU/Linux.")
                           `("LD_LIBRARY_PATH" ":" prefix (,(string-append curl "/lib"))))
                         #t))))))
     (native-inputs
-     `(("which" ,which)
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list which autoconf automake pkg-config))
     (inputs
-     `(("guile" ,guile-3.0)
-       ("curl" ,curl)))
+     (list guile-3.0 curl))
     (home-page "https://akkuscm.org/")
     (synopsis "Language package manager for Scheme")
     (description
@@ -1758,15 +2028,9 @@ from R7RS, which allows most R7RS code to run on R6RS implementations.")
                     "testsuite/install.00-init/005-init_ts.exp"
                     "modulecmd-test.tcl"))))))))
     (native-inputs
-      `(("dejagnu" ,dejagnu)
-        ("autoconf" ,autoconf)
-        ("which" ,which)))
+      (list dejagnu autoconf which))
     (inputs
-      `(("tcl" ,tcl)
-        ("less" ,less)
-        ("procps" ,procps)
-        ("coreutils" ,coreutils)
-        ("python" ,python-3)))
+      (list tcl less procps coreutils python-3))
     (home-page "http://modules.sourceforge.net/")
     (synopsis "Shell environment variables and aliases management")
     (description "Modules simplify shell initialization and let users
diff --git a/gnu/packages/pantheon.scm b/gnu/packages/pantheon.scm
index 6e78f45e14..756db94144 100644
--- a/gnu/packages/pantheon.scm
+++ b/gnu/packages/pantheon.scm
@@ -26,6 +26,7 @@
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages package-management)
   #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages python)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages)
   #:use-module (guix build-system meson)
@@ -37,7 +38,7 @@
 (define-public granite
   (package
     (name "granite")
-    (version "5.5.0")
+    (version "6.2.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -46,24 +47,16 @@
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "13qfhq8xndikk6kmybibs6a4ddyp6mhvbsp2yy4qr7aiiyxf7mna"))))
+                "0ilslmg63hh2x7h5rvs3mhzw1y9ixhhkqnn1j1lzwm12v2iidkaq"))))
     (build-system meson-build-system)
     (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'disable-icon-cache
-           (lambda _
-             (setenv "DESTDIR" "/")
-             #t)))))
-    (inputs
-     `(("glib" ,glib)
-       ("gtk" ,gtk+)
-       ("libgee" ,libgee)))
-    (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("gobject-introspection" ,gobject-introspection)
-       ("pkg-config" ,pkg-config)
-       ("vala" ,vala)))
+     `(#:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'disable-icon-cache
+                    (lambda _
+                      (setenv "DESTDIR" "/"))))))
+    (inputs (list glib gtk+ libgee))
+    (native-inputs (list gettext-minimal gobject-introspection pkg-config
+                         python vala))
     (home-page "https://github.com/elementary/granite")
     (synopsis "Library that extends GTK with common widgets and utilities")
     (description "Granite is a companion library for GTK+ and GLib.  Among other
@@ -115,7 +108,7 @@ desktop.")
 (define-public sideload
   (package
     (name "sideload")
-    (version "1.1.1")
+    (version "6.0.2")
     (source
      (origin
        (method git-fetch)
@@ -125,27 +118,22 @@ desktop.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0mlc3nm2navzxm8k1rwpbw4w6mv30lmhqybm8jqxd4v8x7my73vq"))))
+         "0abpcawmmv5mgzk2i5n9rlairmjr2v9rg9b8c9g7xa085s496bi9"))))
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
-       #:configure-flags (list (string-append "-Dflatpak="
-                                              (assoc-ref %build-inputs "flatpak")
-                                              "/include"))
        #:phases
        (modify-phases %standard-phases
          (add-before 'install 'set-environment-variables
            (lambda _
              ;; Disable compiling schemas and updating desktop databases
-             (setenv "DESTDIR" "/")
-             #t))
+             (setenv "DESTDIR" "/")))
          (add-after 'install 'install-symlinks
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
                     (bin (string-append out "/bin/io.elementary.sideload"))
                     (link (string-append out "/bin/sideload")))
-               (symlink bin link)
-               #t))))))
+               (symlink bin link)))))))
     (inputs
      `(("flatpak" ,flatpak)
        ("glib" ,glib)
@@ -153,13 +141,13 @@ desktop.")
        ("gtk" ,gtk+)
        ("hicolor-icon-theme" ,hicolor-icon-theme)
        ("libgee" ,libgee)
+       ("libhandy" ,libhandy)
        ("libostree" ,libostree)
        ("libxml2" ,libxml2)))
     (propagated-inputs
      ;; Sideload needs these in the environment to fetch data securely from
      ;; Flatpak remotes.
-     `(("gnupg" ,gnupg)
-       ("gpgme" ,gpgme)))
+     (list gnupg gpgme))
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("glib:bin" ,glib "bin")
diff --git a/gnu/packages/parallel.scm b/gnu/packages/parallel.scm
index 6730772f24..a6bee71aec 100644
--- a/gnu/packages/parallel.scm
+++ b/gnu/packages/parallel.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013, 2014, 2020 Eric Bavier <bavier@posteo.net>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2015, 2016, 2017, 2018, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2015, 2016, 2017, 2018, 2020, 2021, 2022 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Pjotr Prins <pjotr.guix@thebird.nl>
 ;;; Copyright © 2016 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2016, 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
@@ -61,14 +61,14 @@
 (define-public parallel
   (package
     (name "parallel")
-    (version "20210922")
+    (version "20220122")
     (source
      (origin
       (method url-fetch)
       (uri (string-append "mirror://gnu/parallel/parallel-"
                           version ".tar.bz2"))
       (sha256
-       (base32 "0rjd9636sgmnhaww2q8rbnpwhpq1aqg3df6rmpdm880zqi7skp6y"))))
+       (base32 "003y6f3bidfzd2jcswl7sk3a69fnvy0pjns4v0m5gjib84hil8mq"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -82,8 +82,7 @@
                   ;; $Global::shell = $ENV{'PARALLEL_SHELL'} ||
                   ;;  parent_shell($$) || $ENV{'SHELL'} || "/bin/sh";
                   (("/bin/sh\\\";\n$") (string-append (which "sh") "\";\n"))))
-              (list "src/parallel" "src/sem"))
-             #t))
+              (list "src/parallel" "src/sem"))))
          (add-after 'install 'wrap-program
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
@@ -92,8 +91,7 @@
                    ,(map (lambda (input)
                            (string-append (assoc-ref inputs input) "/bin"))
                          '("perl"
-                           "procps"))))
-               #t)))
+                           "procps")))))))
          (add-after 'wrap-program 'post-install-test
            (lambda* (#:key outputs #:allow-other-keys)
              (invoke (string-append
@@ -101,8 +99,7 @@
                      "echo"
                      ":::" "1" "2" "3"))))))
     (inputs
-     `(("perl" ,perl)
-       ("procps" ,procps)))
+     (list perl procps))
     (home-page "https://www.gnu.org/software/parallel/")
     (synopsis "Build and execute command lines in parallel")
     (description
@@ -154,8 +151,7 @@ execution is also possible.")
     (build-system gnu-build-system)
     (arguments `(#:tests? #f)) ;; No tests
     (native-inputs
-     `(("flex" ,flex)
-       ("which" ,which)))
+     (list flex which))
     (home-page "http://www.maier-komor.de/xjobs.html")
     (properties `((release-monitoring-url . ,home-page)))
     (synopsis
@@ -201,13 +197,13 @@ when jobs finish.")
                 #t))))
    ;; FIXME: More optional inputs could be added,
    ;; in particular mysql and gtk+.
-   (inputs `(("freeipmi" ,freeipmi)
-             ("hwloc" ,hwloc-2 "lib")
-             ("json-c" ,json-c)
-             ("linux-pam" , linux-pam)
-             ("munge" ,munge)
-             ("numactl" ,numactl)
-             ("readline" ,readline)))
+   (inputs (list freeipmi
+                 `(,hwloc-2 "lib")
+                 json-c
+                 linux-pam
+                 munge
+                 numactl
+                 readline))
    (native-inputs
     `(("autoconf" ,autoconf)
       ("expect" ,expect)
@@ -321,9 +317,9 @@ by managing a queue of pending work.")
     (build-system gnu-build-system)
     (arguments `(#:tests? #f)) ; The tests require "bats".
     (inputs
-     `(("slurm" ,slurm)))
+     (list slurm))
     (native-inputs
-     `(("which" ,which)))
+     (list which))
     (home-page "https://github.com/natefoo/slurm-drmaa")
     (synopsis "Distributed resource management application API for SLURM")
     (description
@@ -366,10 +362,9 @@ cluster/resource management systems.")
                                             value "\n")))
                           #t))))))
       (inputs
-       `(("slurm" ,slurm)))
+       (list slurm))
       (propagated-inputs
-       `(("python-ipython" ,python-ipython)
-         ("python-pandas" ,python-pandas)))
+       (list python-ipython python-pandas))
       (synopsis "Control the SLURM batch scheduler from Jupyter Notebook")
       (description
        "This package implements Jupyter/IPython
@@ -403,9 +398,7 @@ command---e.g., @code{%salloc}, @code{%sbatch}, etc.")
       (build-system cmake-build-system)
       (arguments '(#:configure-flags '("-DBUILD_SHARED_LIBS=ON")))
       (inputs
-       `(("googletest" ,googletest)
-         ("googlebenchmark" ,googlebenchmark)
-         ("fxdiv" ,fxdiv)))
+       (list googletest googlebenchmark fxdiv))
       (synopsis "Efficient thread pool implementation")
       (description
        "The pthreadpool library implements an efficient and portable thread
@@ -434,8 +427,7 @@ features.")
       (build-system cmake-build-system)
       (arguments '(#:configure-flags '("-DBUILD_SHARED_LIBS=ON")))
       (inputs
-       `(("googletest" ,googletest)
-         ("googlebenchmark" ,googlebenchmark)))
+       (list googletest googlebenchmark))
       (synopsis "C/C++ library to obtain information about the CPU")
       (description
        "The cpuinfo library provides a C/C++ and a command-line interface to
diff --git a/gnu/packages/pascal.scm b/gnu/packages/pascal.scm
index 0fdbecf05c..af7857f084 100644
--- a/gnu/packages/pascal.scm
+++ b/gnu/packages/pascal.scm
@@ -1,6 +1,8 @@
 ;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2017 David Hashe <david.hashe@dhashe.com>
 ;;; Copyright © 2017 Kei Kebreau <address@hidden>
 ;;; Copyright © 2020 Eric Bavier <bavier@posteo.net>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -34,28 +36,32 @@
   #:use-module (gnu packages xml)
   #:use-module (ice-9 match))
 
-(define fpc-bootstrap-i386-3.0.4
+(define %fpc-version "3.2.2")
+(define %fpc-release-date "2021/05/19")
+
+;;; FIXME: Bootstrap properly; these are prebuilt binaries.
+(define fpc-bootstrap-i386
   (origin
     (method url-fetch)
-    (uri
-     "mirror://sourceforge/freepascal/Linux/3.0.4/fpc-3.0.4.i386-linux.tar")
+    (uri (string-append "mirror://sourceforge/freepascal/Linux/"
+                        %fpc-version "/fpc-" %fpc-version ".i386-linux.tar"))
     (sha256
      (base32
-      "05xfgxa6vb0y2ryfsgn21m2kwaxhci6l2zxa3akvlnqminjsjvda"))))
+      "0n4r85dsr86zlk7r4hbd4nj14sda6rwgdgzxg4gj4q981fn80agn"))))
 
-(define fpc-bootstrap-x86_64-3.0.4
+(define fpc-bootstrap-x86_64
   (origin
     (method url-fetch)
-    (uri
-     "mirror://sourceforge/freepascal/Linux/3.0.4/fpc-3.0.4.x86_64-linux.tar")
+    (uri (string-append "mirror://sourceforge/freepascal/Linux/"
+                        %fpc-version "/fpc-" %fpc-version ".x86_64-linux.tar"))
     (sha256
      (base32
-      "0xzxh689iyjfmkqkhcqg9plrjmdx82hbyywyyc7jm0n92fpmp5ky"))))
+      "10qywczzz4qlcmmzxb7axnvwniq76ky130vd8iv6ljskll4c7njs"))))
 
 (define-public fpc
   (package
     (name "fpc")
-    (version "3.2.2")                   ; Update release date below!
+    (version %fpc-version)
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/freepascal/Source/"
@@ -76,26 +82,22 @@
                   (mkdir-p "install")
                   (rename-file "install-doc" "install/doc")
                   (rename-file "install-man" "install/man")
-                  (delete-file "fpcsrc/tests/utils/dosbox/exitcode.exe")
-                  #t))))
+                  (delete-file "fpcsrc/tests/utils/dosbox/exitcode.exe")))))
     (build-system gnu-build-system)
     (supported-systems '("i686-linux" "x86_64-linux"))
     (inputs
-     `(("expat" ,expat)
-       ("glibc" ,glibc)
-       ("ld-wrapper" ,ld-wrapper)
-       ("ncurses" ,ncurses)
-       ("zlib" ,zlib)))
+     (list expat glibc ld-wrapper ncurses zlib))
     (native-inputs
      ;; FPC is built with FPC, so we need bootstrap binaries.
-     `(("fpc-binary"
-        ,(match (or (%current-target-system)
-                    (%current-system))
-          ("i686-linux" fpc-bootstrap-i386-3.0.4)
-          ;("powerpc64le-linux" fpc-bootstrap-ppc64le-3.0.4)
-          ;("powerpc-linux" fpc-bootstrap-ppc-3.0.4)
-          ("x86_64-linux" fpc-bootstrap-x86_64-3.0.4)
-          (_ fpc-bootstrap-x86_64-3.0.4)))))
+     `(("fpc-binary" ,(match (or (%current-target-system)
+                                 (%current-system))
+                       ("i686-linux" fpc-bootstrap-i386)
+                       ;;("powerpc64le-linux" fpc-bootstrap-ppc64le)
+                       ;;("powerpc-linux" fpc-bootstrap-ppc)
+                       ("x86_64-linux" fpc-bootstrap-x86_64)
+                       ;; XXX: Wrong, but innocuous so long
+                       ;; `supported-systems' is kept in sync.
+                       (_ fpc-bootstrap-x86_64)))))
     (arguments
      `(#:tests? #f ; no tests available
        #:phases
@@ -115,7 +117,7 @@
            (add-after 'unpack-bin 'install-bin
              (lambda* (#:key inputs #:allow-other-keys)
                (with-directory-excursion
-                 (string-append fpc-bootstrap-path "/fpc-3.0.4."
+                 (string-append fpc-bootstrap-path "/fpc-" ,version "."
                                 arch "-linux")
                  (let ((binary-tarball
                         (string-append "binary." arch "-linux.tar"))
@@ -131,8 +133,7 @@
            (add-after 'patch-source-shebangs 'patch-inline-shebangs
              (lambda _
                (substitute* "fpcsrc/compiler/cscript.pas"
-                 (("#!/bin/sh") (string-append "#!" (which "sh"))))
-               #t))
+                 (("#!/bin/sh") (string-append "#!" (which "sh"))))))
            (add-before 'build 'patch-release-date
              (lambda _                  ; reproducibility
                (substitute* (list "fpcdocs/prog.tex"
@@ -143,18 +144,16 @@
                                   "fpcsrc/utils/fpcm/fpcmmain.pp"
                                   "fpcsrc/utils/fpcreslipo/fpcreslipo.pp"
                                   "fpcsrc/compiler/version.pas")
-                 (("\\{\\$I(NCLUDE)? %DATE%\\}") "'2020/06/19'"))
-               #t))
+                 (("\\{\\$I(NCLUDE)? %DATE%\\}")
+                  (format #f "'~a'" ,%fpc-release-date)))))
            (replace 'configure
              (lambda* (#:key inputs outputs #:allow-other-keys)
                (substitute* "fpcsrc/compiler/systems/t_linux.pas"
                  ;; Point to the current glibc dynamic linker.
                  (("/lib/ld-linux.so.2")
-                  (string-append (assoc-ref inputs "libc")
-                                 ,(glibc-dynamic-linker)))
+                  (search-input-file inputs ,(glibc-dynamic-linker)))
                  (("/lib64/ld-linux-x86-64.so.2")
-                  (string-append (assoc-ref inputs "libc")
-                                 ,(glibc-dynamic-linker)))
+                  (search-input-file inputs ,(glibc-dynamic-linker)))
                  ; TODO: /lib/ld-linux-armhf.so.3
                  ; TODO: /lib/ld-linux-aarch64.so.1
                  ; TODO: /lib64/ld64.so.2
@@ -167,8 +166,7 @@
                    "if (isdll) then")))
                (substitute* "fpcsrc/compiler/options.pas"
                  (("exepath\\+'../etc/'")
-                  (string-append "'" (assoc-ref outputs "out") "/etc'")))
-               #t))
+                  (string-append "'" (assoc-ref outputs "out") "/etc'")))))
            (replace 'build
              (lambda* (#:key inputs #:allow-other-keys)
                (let* ((fpc-bin (string-append fpc-bootstrap-path "/bin"))
@@ -179,7 +177,7 @@
                  (setenv "PATH"
                         (string-append (getenv "PATH") ":"
                                        fpc-bootstrap-path
-                                       "/lib/fpc/3.0.4"))
+                                       "/lib/fpc/" ,version))
                  (setenv "FPC" fpc)
                  ;; Specify target operating system using "-T" option
                  (invoke fpcmake (string-append "-T" arch "-linux"))
@@ -214,8 +212,8 @@
                       (glibc (assoc-ref inputs "glibc")))
                  (wrap-program fpc
                    `("PATH" ":" prefix (,(string-append ld "/bin")))
-                   `("LIBRARY_PATH" ":" prefix (,(string-append glibc "/lib"))))
-                 #t)))))))
+                   `("LIBRARY_PATH" ":" prefix
+                     (,(string-append glibc "/lib")))))))))))
     ;; fpc invokes gcc, so make sure LIBRARY_PATH et.al are set.
     ;(native-search-paths (package-native-search-paths gcc))
     (home-page "https://www.freepascal.org")
@@ -268,8 +266,7 @@ many useful extensions to the Pascal programming language.")
              (chdir "src")
              #t)))))
     (native-inputs
-     `(("perl" ,perl)
-       ("which" ,which)))
+     (list perl which))
     (synopsis "p2c converts Pascal programs to C programs--which you can then
 compile using gcc")
     (description "This package provides @command{p2c}, a program to convert
diff --git a/gnu/packages/password-utils.scm b/gnu/packages/password-utils.scm
index 915c19fb3c..83066bb8ce 100644
--- a/gnu/packages/password-utils.scm
+++ b/gnu/packages/password-utils.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015 Steve Sprang <scs@stevesprang.com>
-;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2015 Aljosha Papsch <misc@rpapsch.de>
 ;;; Copyright © 2016 Christine Lemmer-Webber <cwebber@dustycloud.org>
 ;;; Copyright © 2016 Jessica Tallon <tsyesika@tsyesika.se>
@@ -15,7 +15,7 @@
 ;;; Copyright © 2017, 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2017 Manolis Fragkiskos Ragkousis <manolis837@gmail.com>
 ;;; Copyright © 2017 Rutger Helling <rhelling@mykolab.com>
-;;; Copyright © 2018 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2018, 2022 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2018 Konrad Hinsen <konrad.hinsen@fastmail.net>
 ;;; Copyright © 2018 Thomas Sigurdsen <tonton@riseup.net>
 ;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
@@ -157,20 +157,20 @@ human.")
      `(("asciidoctor" ,ruby-asciidoctor)
        ("qttools" ,qttools)))
     (inputs
-     `(("argon2" ,argon2)
-       ("libgcrypt" ,libgcrypt)
-       ("libsodium" ,libsodium)         ; XC_BROWSER
-       ("libyubikey" ,libyubikey)       ; XC_YUBIKEY
-       ("libxi" ,libxi)
-       ("libxtst" ,libxtst)
-       ("qrencode" ,qrencode)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("qtx11extras" ,qtx11extras)
-       ("quazip" ,quazip)               ; XC_KEESHARE
-       ("readline" ,readline)
-       ("yubikey-personalization" ,yubikey-personalization) ; XC_YUBIKEY
-       ("zlib" ,zlib)))
+     (list argon2
+           libgcrypt
+           libsodium ; XC_BROWSER
+           libyubikey ; XC_YUBIKEY
+           libxi
+           libxtst
+           qrencode
+           qtbase-5
+           qtsvg
+           qtx11extras
+           quazip-0 ; XC_KEESHARE
+           readline
+           yubikey-personalization ; XC_YUBIKEY
+           zlib))
     (home-page "https://www.keepassxc.org")
     (synopsis "Password manager")
     (description "KeePassXC is a password manager or safe which helps you to
@@ -178,6 +178,8 @@ 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.")
+    (properties
+     '((release-monitoring-url . "https://github.com/keepassxreboot/keepassxc/releases")))
     ;; While various parts of the software are licensed under different licenses,
     ;; the combined work falls under the GPLv3.
     (license license:gpl3)))
@@ -260,13 +262,9 @@ platforms.")
                (invoke "autoconf")
                #t)))))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)))
+       (list autoconf automake))
       (inputs
-       `(("libx11" ,libx11)
-         ("libxmu" ,libxmu)
-         ("libxt" ,libxt)
-         ("openssl" ,openssl)))
+       (list libx11 libxmu libxt openssl))
       (home-page "https://github.com/nsd20463/pwsafe")
       (synopsis "CLI password manager")
       (description
@@ -287,7 +285,7 @@ Counterpane's Passwordsafe.")
                 "1l2shrhvcwfzkar9qiwb75nhcqmx25iz55lzmz0c187nbjhqzi9p"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
      `(#:modules ((guix build gnu-build-system)
                     (guix build utils)
@@ -310,9 +308,7 @@ Counterpane's Passwordsafe.")
                  `("GUILE_LOAD_COMPILED_PATH" ":" prefix (,ccachedir)))
                #t))))))
     (inputs
-     `(("guile" ,guile-2.2)
-       ("gnupg" ,gnupg)
-       ("xclip" ,xclip)))
+     (list guile-2.2 gnupg xclip))
     (synopsis "GnuPG-based secret manager")
     (description "Shroud is a simple secret manager with a command line
 interface.  The password database is stored as a Scheme s-expression and
@@ -340,12 +336,9 @@ applications, there is xclip integration." )
        (list (string-append "--docdir=" (assoc-ref %outputs "out")
                             "/share/doc",name "-" ,version))))
     (inputs
-     `(("argon2" ,argon2)
-       ("ncurses" ,ncurses)
-       ("openssl" ,openssl)))
+     (list argon2 ncurses openssl))
     (native-inputs
-     `(("cppunit" ,cppunit)
-       ("pkg-config" ,pkg-config)))
+     (list cppunit pkg-config))
     (synopsis "Yet Another Password Encryption Tool")
     (description "YAPET is a text based password manager using the Blowfish
 encryption algorithm.  Because of its small footprint and very few library
@@ -417,7 +410,7 @@ them out, at the source.")
     (native-inputs
      `(("python" ,python-wrapper)))
     (inputs
-     `(("cracklib" ,cracklib)))
+     (list cracklib))
     (synopsis "Password quality checker")
     (home-page "https://github.com/libpwquality/libpwquality")
     (description
@@ -461,24 +454,17 @@ random passwords that pass the checks.")
                #t)))
          (add-after 'install 'manpage
            (lambda* (#:key outputs #:allow-other-keys)
-             ;; Without this substitution, it fails with
-             ;; ImportError: No module named 'gpg'
-             (substitute* "Makefile"
-               (("PYTHONPATH=.") ""))
              (invoke "make" "assword.1")
              (install-file
               "assword.1"
               (string-append (assoc-ref outputs "out") "/share/man/man1")))))))
     (build-system python-build-system)
     (native-inputs
-     `(("txt2man" ,txt2man)))
+     (list txt2man))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("python-xdo" ,python-xdo)
-       ("python-gpg" ,python-gpg)
-       ("python-pygobject" ,python-pygobject)))
+     (list gtk+ python-xdo python-gpg python-pygobject))
     (propagated-inputs
-     `(("xclip" ,xclip)))
+     (list xclip))
     (home-page "https://finestructure.net/assword/")
     (synopsis "Password manager")
     (description "assword is a simple password manager using GPG-wrapped
@@ -499,6 +485,7 @@ any X11 window.")
               (sha256
                (base32
                 "17zp9pnb3i9sd2zn9qanngmsywrb7y495ngcqs6313pv3gb83v53"))
+              (patches (search-patches "password-store-tree-compat.patch"))
               (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (arguments
@@ -517,8 +504,7 @@ any X11 window.")
                   (string-append " SYSTEM_EXTENSION_DIR=\""
                                  "${PASSWORD_STORE_SYSTEM_EXTENSION_DIR:-"
                                  extension-dir
-                                 "}\"\n"))))
-             #t))
+                                 "}\"\n"))))))
          (add-before 'install 'patch-passmenu-path
            ;; FIXME Wayland support requires ydotool and dmenu-wl packages
            ;; We are ignoring part of the script that gets executed if
@@ -528,27 +514,27 @@ any X11 window.")
              (substitute* "contrib/dmenu/passmenu"
                (("dmenu=dmenu\n")
                 (string-append "dmenu="
-                               (assoc-ref inputs "dmenu") "/bin/dmenu\n"))
+                               (search-input-file inputs "/bin/dmenu")
+                               "\n"))
                (("xdotool=\"xdotool")
                 (string-append "xdotool=\""
-                               (assoc-ref inputs "xdotool") "/bin/xdotool")))
-             #t))
+                               (search-input-file inputs "/bin/xdotool"))))))
          (add-after 'install 'install-passmenu
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
                     (bin (string-append out "/bin")))
-               (install-file "contrib/dmenu/passmenu" bin)
-               #t)))
+               (install-file "contrib/dmenu/passmenu" bin))))
          (add-after 'install 'wrap-path
            (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out"))
-                   (path (map (lambda (pkg)
-                                (string-append (assoc-ref inputs pkg) "/bin"))
-                              '("coreutils" "getopt" "git" "gnupg" "qrencode"
-                                "sed" "tree" "which" "wl-clipboard" "xclip"))))
+             (let* ((out (assoc-ref outputs "out"))
+                    (requisites '("getopt" "git" "gpg" "qrencode" "sed"
+                                  "tree" "which" "wl-copy" "xclip"))
+                    (path (map (lambda (pkg)
+                                 (dirname (search-input-file
+                                           inputs (string-append "/bin/" pkg))))
+                               requisites)))
                (wrap-program (string-append out "/bin/pass")
-                 `("PATH" ":" prefix (,(string-join path ":"))))
-               #t))))
+                 `("PATH" ":" prefix (,(string-join path ":"))))))))
        #:make-flags (list "CC=gcc" (string-append "PREFIX=" %output)
                           "WITH_ALLCOMP=yes"
                           (string-append "BASHCOMPDIR="
@@ -563,17 +549,17 @@ any X11 window.")
             (separator #f)             ;single entry
             (files '("lib/password-store/extensions")))))
     (inputs
-     `(("dmenu" ,dmenu)
-       ("getopt" ,util-linux)
-       ("git" ,git)
-       ("gnupg" ,gnupg)
-       ("qrencode" ,qrencode)
-       ("sed" ,sed)
-       ("tree" ,tree)
-       ("which" ,which)
-       ("wl-clipboard" ,wl-clipboard)
-       ("xclip" ,xclip)
-       ("xdotool" ,xdotool)))
+     (list dmenu
+           util-linux
+           git
+           gnupg
+           qrencode
+           sed
+           tree
+           which
+           wl-clipboard
+           xclip
+           xdotool))
     (home-page "https://www.passwordstore.org/")
     (synopsis "Encrypted password manager")
     (description "Password-store is a password manager which uses GnuPG to
@@ -618,13 +604,9 @@ through the pass command.")
              #t)))
        #:test-target "test"))
     (inputs
-     `(("oath-toolkit" ,oath-toolkit)))
+     (list oath-toolkit))
     (native-inputs
-     `(("password-store" ,password-store)
-       ("expect" ,expect)
-       ("git" ,git)
-       ("gnupg" ,gnupg)
-       ("which" ,which)))
+     (list password-store expect git gnupg which))
     (home-page "https://github.com/tadfisher/pass-otp")
     (synopsis "Pass extension for managing one-time-password (OTP) tokens")
     (description
@@ -701,10 +683,9 @@ key URIs using the standard otpauth:// scheme.")
              (setenv "QT_QPA_PLATFORM" "offscreen")
              #t)))))
     (native-inputs
-     `(("qttools" ,qttools)))
+     (list qttools))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)))
+     (list qtbase-5 qtsvg))
     (home-page "https://qtpass.org")
     (synopsis "GUI for password manager password-store")
     (description
@@ -741,9 +722,7 @@ encryption.")
            (chmod script #o555)
            (install-file script (string-append out "/bin"))))))
     (propagated-inputs
-     `(("password-store" ,password-store)
-       ("rofi" ,rofi)
-       ("xdotool" ,xdotool)))
+     (list password-store rofi xdotool))
     (home-page "https://github.com/carnager/rofi-pass")
     (synopsis "Rofi frontend for password-store")
     (description "Rofi-pass provides a way to manipulate information stored
@@ -815,13 +794,11 @@ using password-store through rofi interface:
                    (,(string-append gnupg "/bin"))))
                #t))))))
     (native-inputs
-     `(("which" ,which)))
+     (list which))
     (inputs
-     `(("gnupg" ,gnupg)
-       ("go-github-com-mattn-go-zglob" ,go-github-com-mattn-go-zglob)
-       ("go-github-com-rifflock-lfshook" ,go-github-com-rifflock-lfshook)
-       ("go-github-com-sirupsen-logrus" ,go-github-com-sirupsen-logrus)
-       ("go-golang-org-x-sys" ,go-golang-org-x-sys)))
+     (list gnupg go-github-com-mattn-go-zglob
+           go-github-com-rifflock-lfshook go-github-com-sirupsen-logrus
+           go-golang-org-x-sys))
     (home-page "https://github.com/browserpass/browserpass-native")
     (synopsis "Browserpass native messaging host")
     (description "Browserpass is a browser extension for pass, a
@@ -898,11 +875,9 @@ winner of the 2015 Password Hashing Competition.")
              (setenv "HOME" (getcwd))
              (invoke "pytest"))))))
     (inputs
-     `(("python-pyxdg" ,python-pyxdg)
-       ("password-store" ,password-store)))
+     (list python-pyxdg password-store))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-mock" ,python-pytest-mock)))
+     (list python-pytest python-pytest-mock))
     (home-page "https://github.com/languitar/pass-git-helper")
     (synopsis "Git credential helper interfacing with pass")
     (description "pass-git-helper is a git credential helper which
@@ -927,7 +902,7 @@ between hosts and entries in the password store.")
            "0fvz3v41hnaiv1ggpxanfykyfjq79cwp9qcqqn63vic357w27lgm"))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("perl" ,perl)))
+       (list perl))
       (inputs
        `(("gmp" ,gmp)
          ("libpcap" ,libpcap)
@@ -1031,8 +1006,7 @@ is the community-enhanced, \"jumbo\" version of John the Ripper.")
      ;; to Python 2, which works fine.
      `(#:python ,python-2))
     (propagated-inputs
-     `(("gnupg" ,gnupg)
-       ("pwgen" ,pwgen)))
+     (list gnupg pwgen))
     (home-page "http://www.digip.org/sala/")
     (synopsis "Encrypted plaintext password store")
     (description
@@ -1056,10 +1030,10 @@ by GnuPG's symmetrical encryption.")
     (inputs `(("gtk2" ,gtk+-2)
               ("gnupg" ,gnupg)
               ("libxml2" ,libxml2)))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("intltool" ,intltool)))
+    (native-inputs (list pkg-config intltool))
     (arguments
-     `(#:phases
+     `(#:configure-flags '("CFLAGS=-O2 -g -fcommon")
+       #:phases
        (modify-phases %standard-phases
          (add-before 'configure 'pre-configure
            ;; The file po/POTFILES.in ends up missing for some reason in
@@ -1104,10 +1078,8 @@ to use a different password manager.")
           "1m067vvdlc85csbpkp8aw4s3ags7q8s3jszrr32kmj9qhk5c254f"))))
     (build-system python-build-system)
     (inputs
-     `(("python-beautifulsoup4" ,python-beautifulsoup4)
-       ("python-docopt" ,python-docopt)
-       ("python-html5lib" ,python-html5lib)
-       ("python-requests" ,python-requests)))
+     (list python-beautifulsoup4 python-docopt python-html5lib
+           python-requests))
     (home-page "https://github.com/ddevault/pass-rotate")
     (synopsis "Rotate password on online services")
     (description "pass-rotate is a command line utility and python library for
@@ -1129,7 +1101,7 @@ your online accounts makes it necessary.")
         (base32
          "104z63m7lqbb0sdrxhf9yi15l4a9zwf9m6zs9dbb3gf0nfxl1h9r"))))
     (native-inputs
-     `(("opencl-headers" ,opencl-headers)))
+     (list opencl-headers))
     (build-system gnu-build-system)
     (arguments
      '(#:tests? #f                      ;no tests
@@ -1159,9 +1131,9 @@ password cracking.")
        (sha256
         (base32 "0kq555kb338691qd7zjmi8vhq4km3apnsl2w63zh0igwzcjx6lx1"))))
     (native-inputs
-     `(("p7zip" ,p7zip)))
+     (list p7zip))
     (inputs
-     `(("perl" ,perl)))
+     (list perl))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ;no tests
@@ -1217,9 +1189,9 @@ group them into chains.")
         (base32 "0yawrlbbklhmvwr99wm7li3r0d5kxvpkwf33a12rji7z0ya5p340"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("lzip" ,lzip)))
+     (list lzip))
     (inputs
-     `(("cryptsetup" ,cryptsetup)))
+     (list cryptsetup))
     (synopsis "LUKS encrypted volume cracker")
     (description
      "This is a cracker for LUKS encrypted volumes.  It can be used either in
@@ -1245,13 +1217,9 @@ try every password contained in a file.")
           (base32 "0lspqyyxbk6h28yxnp7pd5aib161vrkzgasam5jpzn35n1jacx2j"))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("pkg-config" ,pkg-config)
-         ("libxslt" ,libxslt)
-         ("libxml2" ,libxml2)
-         ("docbook-xsl" ,docbook-xsl)
-         ("docbook-xml" ,docbook-xml)))
+       (list pkg-config libxslt libxml2 docbook-xsl docbook-xml))
       (inputs
-       `(("openssl" ,openssl)))
+       (list openssl))
       (arguments
        `(#:phases
          (modify-phases %standard-phases
@@ -1300,7 +1268,7 @@ encryption algorithm if so desired.")
                   (string-append ":-" tomb "/bin/tomb"))))))
          (delete 'configure))))
     (inputs
-     `(("tomb" ,tomb)))
+     (list tomb))
     (home-page "https://github.com/roddhjav/pass-tomb")
     (synopsis "Pass extension keeping the tree of passwords encrypted")
     (description "Pass-tomb provides a convenient solution to put your
diff --git a/gnu/packages/patches/agg-2.5-gcc8.patch b/gnu/packages/patches/agg-2.5-gcc8.patch
new file mode 100644
index 0000000000..dfcfc6cd4a
--- /dev/null
+++ b/gnu/packages/patches/agg-2.5-gcc8.patch
@@ -0,0 +1,14 @@
+Taken from: https://gitweb.gentoo.org/repo/gentoo.git/tree/x11-libs/agg/files/agg-2.5-gcc8.patch.
+
+diff -uprN agg-2.5/include/agg_renderer_outline_aa.h agg-2.5-fixed/include/agg_renderer_outline_aa.h
+--- agg-2.5/include/agg_renderer_outline_aa.h	2018-08-25 02:02:52.507254241 +0800
++++ agg-2.5-fixed/include/agg_renderer_outline_aa.h	2018-08-25 02:04:15.291175316 +0800
+@@ -1375,7 +1375,7 @@ namespace agg
+         //---------------------------------------------------------------------
+         void profile(const line_profile_aa& prof) { m_profile = &prof; }
+         const line_profile_aa& profile() const { return *m_profile; }
+-        line_profile_aa& profile() { return *m_profile; }
++        const line_profile_aa& profile() { return *m_profile; }
+ 
+         //---------------------------------------------------------------------
+         int subpixel_width() const { return m_profile->subpixel_width(); }
diff --git a/gnu/packages/patches/alpine-fix-privacy-policy-crash.patch b/gnu/packages/patches/alpine-fix-privacy-policy-crash.patch
new file mode 100644
index 0000000000..d514ac33a0
--- /dev/null
+++ b/gnu/packages/patches/alpine-fix-privacy-policy-crash.patch
@@ -0,0 +1,39 @@
+X-Git-Url: https://repo.or.cz/alpine.git/blobdiff_plain/fb2217ac67706e4cbef69bea41041e2fb8b910e9..3ee981816abfb7d47ffc0ac522fff002b5749b72:/alpine/help.c
+
+diff --git a/alpine/help.c b/alpine/help.c
+index 4f1bf46..e9c7b34 100644
+--- a/alpine/help.c
++++ b/alpine/help.c
+@@ -36,6 +36,7 @@ static char rcsid[] = "$Id: help.c 1032 2008-04-11 00:30:04Z hubert@u.washington
+ #include "../pith/detoken.h"
+ #include "../pith/list.h"
+ #include "../pith/margin.h"
++#include "../pith/busy.h"
+ 
+ 
+ typedef struct _help_scroll {
+@@ -135,10 +136,12 @@ helper_internal(HelpType text, char *frag, char *title, int flags)
+     is_external = 0;
+ 
+     if(shown_text && *shown_text && !struncmp(*shown_text, "x-alpine-http:", 14)){
+-	int status;
++	int status, we_cancel = 0;
++
++	we_cancel = busy_cue(_("Retrieving help text"), NULL, 1);
+ 	HTTPSTREAM *stream = http_open(*shown_text + 14);
+ 	if(stream) help_text = http_get(stream, NULL);
+-	status = stream->status ? stream->status->code : -1;
++	status = stream && stream->status ? stream->status->code : -1;
+ 	if(stream) http_close(stream);
+ 	if(status != HTTP_OK){
+ 	    shown_text = NO_HELP;
+@@ -165,7 +168,8 @@ helper_internal(HelpType text, char *frag, char *title, int flags)
+ 		*rv = NULL;
+ 	    }
+ 	}
+-
++	if(we_cancel)
++	   cancel_busy_cue(-1);
+     }
+ 
+     if(F_ON(F_BLANK_KEYMENU,ps_global)){
diff --git a/gnu/packages/patches/atlas-gfortran-compat.patch b/gnu/packages/patches/atlas-gfortran-compat.patch
new file mode 100644
index 0000000000..5b46f5a64d
--- /dev/null
+++ b/gnu/packages/patches/atlas-gfortran-compat.patch
@@ -0,0 +1,37 @@
+Fix build with gfortran 10.
+
+Taken from Debian:
+https://salsa.debian.org/science-team/atlas/-/blob/master/debian/patches/gfortran-10.patch
+
+--- a/interfaces/blas/C/testing/c_dblat1.f
++++ b/interfaces/blas/C/testing/c_dblat1.f
+@@ -247,11 +247,11 @@
+             IF (ICASE.EQ.7) THEN
+ *              .. DNRM2TEST ..
+                STEMP(1) = DTRUE1(NP1)
+-               CALL STEST1(DNRM2TEST(N,SX,INCX),STEMP,STEMP,SFAC)
++               CALL STEST1(DNRM2TEST(N,SX,INCX),STEMP(1),STEMP,SFAC)
+             ELSE IF (ICASE.EQ.8) THEN
+ *              .. DASUMTEST ..
+                STEMP(1) = DTRUE3(NP1)
+-               CALL STEST1(DASUMTEST(N,SX,INCX),STEMP,STEMP,SFAC)
++               CALL STEST1(DASUMTEST(N,SX,INCX),STEMP(1),STEMP,SFAC)
+             ELSE IF (ICASE.EQ.9) THEN
+ *              .. DSCALTEST ..
+                CALL DSCALTEST(N,SA((INCX-1)*5+NP1),SX,INCX)
+--- a/interfaces/blas/C/testing/c_sblat1.f
++++ b/interfaces/blas/C/testing/c_sblat1.f
+@@ -247,11 +247,11 @@
+             IF (ICASE.EQ.7) THEN
+ *              .. SNRM2TEST ..
+                STEMP(1) = DTRUE1(NP1)
+-               CALL STEST1(SNRM2TEST(N,SX,INCX),STEMP,STEMP,SFAC)
++               CALL STEST1(SNRM2TEST(N,SX,INCX),STEMP(1),STEMP,SFAC)
+             ELSE IF (ICASE.EQ.8) THEN
+ *              .. SASUMTEST ..
+                STEMP(1) = DTRUE3(NP1)
+-               CALL STEST1(SASUMTEST(N,SX,INCX),STEMP,STEMP,SFAC)
++               CALL STEST1(SASUMTEST(N,SX,INCX),STEMP(1),STEMP,SFAC)
+             ELSE IF (ICASE.EQ.9) THEN
+ *              .. SSCALTEST ..
+                CALL SSCALTEST(N,SA((INCX-1)*5+NP1),SX,INCX)
diff --git a/gnu/packages/patches/audacity-add-include.patch b/gnu/packages/patches/audacity-add-include.patch
deleted file mode 100644
index a7f27918e7..0000000000
--- a/gnu/packages/patches/audacity-add-include.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-Without <sys/time.h>, gettimeofday is undefined.
-
-diff --git a/src/AudioIO.cpp b/src/AudioIO.cpp
-index 0187e3962..e15d55f4c 100644
---- a/src/AudioIO.cpp
-+++ b/src/AudioIO.cpp
-@@ -479,6 +479,8 @@ time warp info and AudioIOListener and whether the playback is looped.
- #include "../lib-src/portmidi/porttime/porttime.h"
- #include "../lib-src/header-substitutes/allegro.h"
- 
-+#include <sys/time.h>
-+
-    #define MIDI_SLEEP 10 /* milliseconds */
-    // how long do we think the thread that fills MIDI buffers,
-    // if it is separate from the portaudio thread,
diff --git a/gnu/packages/patches/audacity-build-with-system-portaudio.patch b/gnu/packages/patches/audacity-build-with-system-portaudio.patch
deleted file mode 100644
index 05325a1493..0000000000
--- a/gnu/packages/patches/audacity-build-with-system-portaudio.patch
+++ /dev/null
@@ -1,62 +0,0 @@
-Downloaded from here:
-https://sourceforge.net/p/audacity/mailman/message/36106562/
-
-Modified for use on later versions of audacity.
-
->From 5f9482a191359f2c477763a36d2c865c5f186602 Mon Sep 17 00:00:00 2001
-From: Antonio Ospite <ao2@ao2.it>
-Date: Tue, 7 Nov 2017 13:06:33 +0100
-Subject: [PATCH] Fix building against the system portaudio library
-
-Building against the system portaudio results in this error:
-
-./src/AudioIO.cpp:983: undefined reference to `PaUtil_GetTime'
-audacity-AudioIO.o: In function `audacityAudioCallback(void const*, void*,
-unsigned long, PaStreamCallbackTimeInfo const*, unsigned long, void*)':
-./src/AudioIO.cpp:4630: undefined reference to `PaUtil_GetTime'
-collect2: error: ld returned 1 exit status
-Makefile:2349: recipe for target 'audacity' failed
-make[3]: *** [audacity] Error 1
-
-This is because PaUtil_GetTime is declared as a C symbol in pa_util.h
-but is resolved as a C++ symbol at link time.
-
-Audacity fixes this in the local tree with this change:
-https://github.com/audacity/audacity/commit/38fd97b8e26060332ab3e9e000a8882326a70ba7
-
-However this is not general enough for the portaudio debian package.
-
-Since PaUtil_GetTime() is the only function causing problems, just copy
-over the code where it's used.
----
- src/AudioIO.cpp | 17 ++++++++++++++++-
- 1 file changed, 16 insertions(+), 1 deletion(-)
-
-diff --git a/src/AudioIO.cpp b/src/AudioIO.cpp
-index 48715869c..bb4bf472c 100644
---- a/src/AudioIO.cpp
-+++ b/src/AudioIO.cpp
-@@ -480,9 +480,22 @@ time warp info and AudioIOListener and whether the playback is looped.
-    #define ROUND(x) (int) ((x)+0.5)
-    //#include <string.h>
- //   #include "../lib-src/portmidi/pm_common/portmidi.h"
--   #include "../lib-src/portaudio-v19/src/common/pa_util.h"
-    #include "NoteTrack.h"
- #endif
-+PaTime PaUtil_GetTime( void )
-+{
-+#ifdef HAVE_MACH_ABSOLUTE_TIME
-+    return mach_absolute_time() * machSecondsConversionScaler_;
-+#elif defined(HAVE_CLOCK_GETTIME)
-+    struct timespec tp;
-+    clock_gettime(CLOCK_REALTIME, &tp);
-+    return (PaTime)(tp.tv_sec + tp.tv_nsec * 1e-9);
-+#else
-+    struct timeval tv;
-+    gettimeofday( &tv, NULL );
-+    return (PaTime) tv.tv_usec * 1e-6 + tv.tv_sec;
-+#endif
-+}
- 
- #ifdef EXPERIMENTAL_AUTOMATED_INPUT_LEVEL_ADJUSTMENT
-    #define LOWER_BOUND 0.0
diff --git a/gnu/packages/patches/awesome-4.3-fno-common.patch b/gnu/packages/patches/awesome-4.3-fno-common.patch
new file mode 100644
index 0000000000..62f153d012
--- /dev/null
+++ b/gnu/packages/patches/awesome-4.3-fno-common.patch
@@ -0,0 +1,178 @@
+Taken from: https://github.com/awesomeWM/awesome/commit/d256d9055095f27a33696e0aeda4ee20ed4fb1a0
+Author: Reiner Herrmann <reiner@reiner-h.de>
+
+--- a/common/lualib.c
++++ b/common/lualib.c
+@@ -20,6 +20,8 @@
+ #include "common/lualib.h"
+ #include "luaa.h"
+ 
++lua_CFunction lualib_dofunction_on_error;
++
+ void luaA_checkfunction(lua_State *L, int idx)
+ {
+     if(!lua_isfunction(L, idx))
+--- a/common/lualib.h
++++ b/common/lualib.h
+@@ -28,7 +28,7 @@
+ #include "common/util.h"
+ 
+ /** Lua function to call on dofunction() error */
+-lua_CFunction lualib_dofunction_on_error;
++extern lua_CFunction lualib_dofunction_on_error;
+ 
+ void luaA_checkfunction(lua_State *, int);
+ void luaA_checktable(lua_State *, int);
+--- a/luaa.c
++++ b/luaa.c
+@@ -91,6 +91,8 @@ extern const struct luaL_Reg awesome_mouse_meta[];
+ extern const struct luaL_Reg awesome_root_methods[];
+ extern const struct luaL_Reg awesome_root_meta[];
+ 
++signal_array_t global_signals;
++
+ /** A call into the Lua code aborted with an error.
+  *
+  * This signal is used in the example configuration, @{05-awesomerc.md},
+--- a/luaa.h
++++ b/luaa.h
+@@ -317,7 +317,7 @@ const char *luaA_find_config(xdgHandle *, const char *, luaA_config_callback *);
+ bool luaA_parserc(xdgHandle *, const char *);
+ 
+ /** Global signals */
+-signal_array_t global_signals;
++extern signal_array_t global_signals;
+ 
+ int luaA_class_index_miss_property(lua_State *, lua_object_t *);
+ int luaA_class_newindex_miss_property(lua_State *, lua_object_t *);
+--- a/objects/button.c
++++ b/objects/button.c
+@@ -35,6 +35,8 @@
+ 
+ #include "button.h"
+ 
++lua_class_t button_class;
++
+ /** Button object.
+  *
+  * @tfield int button The mouse button number, or 0 for any button.
+--- a/objects/button.h
++++ b/objects/button.h
+@@ -39,7 +39,7 @@ typedef struct button_t
+     xcb_button_t button;
+ } button_t;
+ 
+-lua_class_t button_class;
++extern lua_class_t button_class;
+ LUA_OBJECT_FUNCS(button_class, button_t, button)
+ ARRAY_FUNCS(button_t *, button, DO_NOTHING)
+ 
+--- a/objects/client.c
++++ b/objects/client.c
+@@ -108,6 +108,8 @@
+ #include <xcb/shape.h>
+ #include <cairo-xcb.h>
+ 
++lua_class_t client_class;
++
+ /** Client class.
+  *
+  * This table allow to add more dynamic properties to the clients. For example,
+--- a/objects/client.h
++++ b/objects/client.h
+@@ -200,7 +200,7 @@ struct client_t
+ ARRAY_FUNCS(client_t *, client, DO_NOTHING)
+ 
+ /** Client class */
+-lua_class_t client_class;
++extern lua_class_t client_class;
+ 
+ LUA_OBJECT_FUNCS(client_class, client_t, client)
+ 
+--- a/objects/drawin.c
++++ b/objects/drawin.c
+@@ -46,6 +46,8 @@
+ #include <cairo-xcb.h>
+ #include <xcb/shape.h>
+ 
++lua_class_t drawin_class;
++
+ /** Drawin object.
+  *
+  * @field border_width Border width.
+--- a/objects/drawin.h
++++ b/objects/drawin.h
+@@ -52,7 +52,7 @@ void luaA_drawin_systray_kickout(lua_State *);
+ 
+ void drawin_class_setup(lua_State *);
+ 
+-lua_class_t drawin_class;
++extern lua_class_t drawin_class;
+ 
+ #endif
+ // vim: filetype=c:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80
+--- a/objects/key.c
++++ b/objects/key.c
+@@ -43,6 +43,8 @@
+ #include <xkbcommon/xkbcommon.h>
+ #include <glib.h>
+ 
++lua_class_t key_class;
++
+ /** Key object.
+  *
+  * @tfield string key The key to trigger an event.
+--- a/objects/key.h
++++ b/objects/key.h
+@@ -36,7 +36,7 @@ typedef struct keyb_t
+     xcb_keycode_t keycode;
+ } keyb_t;
+ 
+-lua_class_t key_class;
++extern lua_class_t key_class;
+ LUA_OBJECT_FUNCS(key_class, keyb_t, key)
+ DO_ARRAY(keyb_t *, key, DO_NOTHING)
+ 
+--- a/objects/tag.c
++++ b/objects/tag.c
+@@ -190,6 +190,8 @@
+ #include "ewmh.h"
+ #include "luaa.h"
+
++lua_class_t tag_class;
++
+ /**
+  * @signal request::select
+  */
+--- a/objects/tag.h
++++ b/objects/tag.h
+@@ -46,7 +46,7 @@ struct tag
+     client_array_t clients;
+ };
+ 
+-lua_class_t tag_class;
++extern lua_class_t tag_class;
+ LUA_OBJECT_FUNCS(tag_class, tag_t, tag)
+ 
+ void tag_class_setup(lua_State *);
+--- a/objects/window.c
++++ b/objects/window.c
+@@ -59,6 +59,7 @@
+ #include "property.h"
+ #include "xwindow.h"
+ 
++lua_class_t window_class;
+ LUA_CLASS_FUNCS(window, window_class)
+ 
+ static xcb_window_t
+--- a/objects/window.h
++++ b/objects/window.h
+@@ -80,7 +80,7 @@ typedef struct
+     WINDOW_OBJECT_HEADER
+ } window_t;
+ 
+-lua_class_t window_class;
++extern lua_class_t window_class;
+ 
+ void window_class_setup(lua_State *);
+
diff --git a/gnu/packages/patches/aws-c-auth-install-private-headers.patch b/gnu/packages/patches/aws-c-auth-install-private-headers.patch
new file mode 100644
index 0000000000..990fd6f2eb
--- /dev/null
+++ b/gnu/packages/patches/aws-c-auth-install-private-headers.patch
@@ -0,0 +1,19 @@
+aws-sdk-cpp depends on the private headers from aws-c-auth. This dependency was
+added to aws-sdk-cpp in commit 23cca02c2df on 2021-06-04.
+
+The following error is generated when building aws-sdk-cpp when the private
+aws-c-auth headers are not installed:
+
+/tmp/guix-build-aws-sdk-cpp-1.9.121.drv-0/aws-sdk-cpp-1.9.121-checkout/aws-cpp-sdk-core-tests/aws/auth/AWSAuthSignerTest.cpp:17:10: fatal error: aws/auth/private/aws_signing.h: No such file or directory
+ #include <aws/auth/private/aws_signing.h>
+
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -110,6 +114,7 @@ target_link_libraries(${PROJECT_NAME} PUBLIC ${DEP_AWS_LIBS} ${PLATFORM_LIBS})
+ aws_prepare_shared_lib_exports(${PROJECT_NAME})
+ 
+ install(FILES ${AWS_AUTH_ROOT_HEADERS} DESTINATION "include/aws/auth" COMPONENT Development)
++install(FILES ${AWS_AUTH_PRIVATE_HEADERS} DESTINATION "include/aws/auth/private" COMPONENT Development)
+ 
+ if (BUILD_SHARED_LIBS)
+    set (TARGET_DIR "shared")
diff --git a/gnu/packages/patches/aws-c-cal-cmake-prefix.patch b/gnu/packages/patches/aws-c-cal-cmake-prefix.patch
deleted file mode 100644
index 1ee7aa851d..0000000000
--- a/gnu/packages/patches/aws-c-cal-cmake-prefix.patch
+++ /dev/null
@@ -1,13 +0,0 @@
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -10,6 +10,10 @@ endif()
- 
- option(BYO_CRYPTO "Set this if you want to provide your own cryptography implementation. This will cause the defaults to not be compiled." OFF)
- 
-+if (DEFINED ENV{CMAKE_PREFIX_PATH})
-+    set(CMAKE_PREFIX_PATH $ENV{CMAKE_PREFIX_PATH})
-+endif()
-+
- if (DEFINED CMAKE_PREFIX_PATH)
-     file(TO_CMAKE_PATH "${CMAKE_PREFIX_PATH}" CMAKE_PREFIX_PATH)
- endif()
diff --git a/gnu/packages/patches/aws-c-event-stream-cmake-prefix.patch b/gnu/packages/patches/aws-c-event-stream-cmake-prefix.patch
deleted file mode 100644
index 79655a910b..0000000000
--- a/gnu/packages/patches/aws-c-event-stream-cmake-prefix.patch
+++ /dev/null
@@ -1,13 +0,0 @@
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -3,6 +3,10 @@
- cmake_minimum_required (VERSION 3.1)
- project (aws-c-event-stream C)
- 
-+if (DEFINED ENV{CMAKE_PREFIX_PATH})
-+    set(CMAKE_PREFIX_PATH $ENV{CMAKE_PREFIX_PATH})
-+endif()
-+
- if (DEFINED CMAKE_PREFIX_PATH)
-     file(TO_CMAKE_PATH "${CMAKE_PREFIX_PATH}" CMAKE_PREFIX_PATH)
- endif()
diff --git a/gnu/packages/patches/aws-c-io-cmake-prefix.patch b/gnu/packages/patches/aws-c-io-cmake-prefix.patch
deleted file mode 100644
index da3e4eb4a5..0000000000
--- a/gnu/packages/patches/aws-c-io-cmake-prefix.patch
+++ /dev/null
@@ -1,13 +0,0 @@
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -6,6 +6,10 @@ if (POLICY CMP0069)
-     cmake_policy(SET CMP0069 NEW) # Enable LTO/IPO if available in the compiler, see AwsCFlags
- endif()
- 
-+if (DEFINED ENV{CMAKE_PREFIX_PATH})
-+    set(CMAKE_PREFIX_PATH $ENV{CMAKE_PREFIX_PATH})
-+endif()
-+
- if (DEFINED CMAKE_PREFIX_PATH)
-     file(TO_CMAKE_PATH "${CMAKE_PREFIX_PATH}" CMAKE_PREFIX_PATH)
- endif()
diff --git a/gnu/packages/patches/aws-c-io-disable-networking-tests.patch b/gnu/packages/patches/aws-c-io-disable-networking-tests.patch
deleted file mode 100644
index 09fe11310c..0000000000
--- a/gnu/packages/patches/aws-c-io-disable-networking-tests.patch
+++ /dev/null
@@ -1,81 +0,0 @@
---- a/tests/CMakeLists.txt
-+++ b/tests/CMakeLists.txt
-@@ -52,8 +52,8 @@ add_test_case(local_socket_communication)
- add_net_test_case(tcp_socket_communication)
- add_net_test_case(udp_socket_communication)
- add_test_case(udp_bind_connect_communication)
--add_net_test_case(connect_timeout)
--add_net_test_case(connect_timeout_cancelation)
-+#add_net_test_case(connect_timeout)
-+#add_net_test_case(connect_timeout_cancelation)
- if (USE_VSOCK)
- 	add_test_case(vsock_loopback_socket_communication)
- endif ()
-@@ -64,7 +64,7 @@ add_test_case(incoming_tcp_sock_errors)
- add_test_case(incoming_duplicate_tcp_bind_errors)
- add_test_case(incoming_udp_sock_errors)
- add_test_case(wrong_thread_read_write_fails)
--add_net_test_case(cleanup_before_connect_or_timeout_doesnt_explode)
-+#add_net_test_case(cleanup_before_connect_or_timeout_doesnt_explode)
- add_test_case(cleanup_in_accept_doesnt_explode)
- add_test_case(cleanup_in_write_cb_doesnt_explode)
- add_test_case(sock_write_cb_is_async)
-@@ -81,21 +81,21 @@ add_test_case(channel_tasks_run)
- add_test_case(channel_rejects_post_shutdown_tasks)
- add_test_case(channel_cancels_pending_tasks)
- add_test_case(channel_duplicate_shutdown)
--add_net_test_case(channel_connect_some_hosts_timeout)
-+#add_net_test_case(channel_connect_some_hosts_timeout)
-
--add_net_test_case(test_default_with_ipv6_lookup)
-+#add_net_test_case(test_default_with_ipv6_lookup)
- add_test_case(test_resolver_ipv6_address_lookup)
--add_net_test_case(test_default_with_multiple_lookups)
-+#add_net_test_case(test_default_with_multiple_lookups)
- add_test_case(test_resolver_ipv4_address_lookup)
--add_net_test_case(test_default_with_ipv4_only_lookup)
-+#add_net_test_case(test_default_with_ipv4_only_lookup)
- add_test_case(test_resolver_ttls)
- add_test_case(test_resolver_connect_failure_recording)
- add_test_case(test_resolver_ttl_refreshes_on_resolve)
-
- add_net_test_case(test_resolver_listener_create_destroy)
--add_net_test_case(test_resolver_add_listener_before_host)
--add_net_test_case(test_resolver_add_listener_after_host)
--add_net_test_case(test_resolver_add_multiple_listeners_fn)
-+#add_net_test_case(test_resolver_add_listener_before_host)
-+#add_net_test_case(test_resolver_add_listener_after_host)
-+#add_net_test_case(test_resolver_add_multiple_listeners_fn)
- add_net_test_case(test_resolver_listener_host_re_add_fn)
- add_net_test_case(test_resolver_listener_multiple_results)
- add_net_test_case(test_resolver_listener_address_expired_fn)
-@@ -119,20 +119,20 @@ add_test_case(socket_handler_close)
- if (NOT BYO_CRYPTO)
-     add_net_test_case(test_concurrent_cert_import)
-     add_test_case(tls_channel_echo_and_backpressure_test)
--    add_net_test_case(tls_client_channel_negotiation_error_expired)
--    add_net_test_case(tls_client_channel_negotiation_error_wrong_host)
--    add_net_test_case(tls_client_channel_negotiation_error_self_signed)
--    add_net_test_case(tls_client_channel_negotiation_error_untrusted_root)
-+    #add_net_test_case(tls_client_channel_negotiation_error_expired)
-+    #add_net_test_case(tls_client_channel_negotiation_error_wrong_host)
-+    #add_net_test_case(tls_client_channel_negotiation_error_self_signed)
-+    #add_net_test_case(tls_client_channel_negotiation_error_untrusted_root)
-     #track these down in s2n and find out why that aren't failing.
-     #add_net_test_case(tls_client_channel_negotiation_error_revoked)
-     #add_net_test_case(tls_client_channel_negotiation_error_pinning)
--    add_net_test_case(tls_client_channel_negotiation_error_socket_closed)
--    add_net_test_case(tls_client_channel_negotiation_success)
--    add_net_test_case(tls_client_channel_negotiation_success_ecc256)
--    add_net_test_case(tls_client_channel_negotiation_success_ecc384)
-+    #add_net_test_case(tls_client_channel_negotiation_error_socket_closed)
-+    #add_net_test_case(tls_client_channel_negotiation_success)
-+    #add_net_test_case(tls_client_channel_negotiation_success_ecc256)
-+    #add_net_test_case(tls_client_channel_negotiation_success_ecc384)
-     add_net_test_case(tls_server_multiple_connections)
-     add_net_test_case(tls_server_hangup_during_negotiation)
--    add_net_test_case(tls_client_channel_no_verify)
-+    #add_net_test_case(tls_client_channel_no_verify)
-     add_net_test_case(test_tls_negotiation_timeout)
-     add_net_test_case(tls_double_channel)
-     add_net_test_case(alpn_successfully_negotiates)
diff --git a/gnu/packages/patches/aws-checksums-cmake-prefix.patch b/gnu/packages/patches/aws-checksums-cmake-prefix.patch
deleted file mode 100644
index f6a5c9ad9c..0000000000
--- a/gnu/packages/patches/aws-checksums-cmake-prefix.patch
+++ /dev/null
@@ -1,13 +0,0 @@
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -8,6 +8,10 @@
-     cmake_policy(SET CMP0069 NEW) # Enable LTO/IPO if available in the compiler, see AwsCFlags
- endif()
- 
-+if (DEFINED ENV{CMAKE_PREFIX_PATH})
-+    set(CMAKE_PREFIX_PATH $ENV{CMAKE_PREFIX_PATH})
-+endif()
-+
- if (DEFINED CMAKE_PREFIX_PATH)
-     file(TO_CMAKE_PATH "${CMAKE_PREFIX_PATH}" CMAKE_PREFIX_PATH)
- endif()
diff --git a/gnu/packages/patches/bdb-5.3-atomics-on-gcc-9.patch b/gnu/packages/patches/bdb-5.3-atomics-on-gcc-9.patch
new file mode 100644
index 0000000000..56d404da15
--- /dev/null
+++ b/gnu/packages/patches/bdb-5.3-atomics-on-gcc-9.patch
@@ -0,0 +1,22 @@
+Patch borrowed from Arch Linux. Allows compiling bdb 5.3 and earlier with GCC newer than 7.
+
+--- src/dbinc/atomic.h	2013-03-12 14:07:22.000000000 -0400
++++ src/dbinc/atomic.h.change	2013-03-12 14:06:35.000000000 -0400
+@@ -144,7 +144,7 @@
+ #define	atomic_inc(env, p)	__atomic_inc(p)
+ #define	atomic_dec(env, p)	__atomic_dec(p)
+ #define	atomic_compare_exchange(env, p, o, n)	\
+-	__atomic_compare_exchange((p), (o), (n))
++	__atomic_compare_exchange_db((p), (o), (n))
+ static inline int __atomic_inc(db_atomic_t *p)
+ {
+ 	int	temp;
+@@ -176,7 +176,7 @@
+  * http://gcc.gnu.org/onlinedocs/gcc-4.1.0/gcc/Atomic-Builtins.html
+  * which configure could be changed to use.
+  */
+-static inline int __atomic_compare_exchange(
++static inline int __atomic_compare_exchange_db(
+ 	db_atomic_t *p, atomic_value_t oldval, atomic_value_t newval)
+ {
+ 	atomic_value_t was;
diff --git a/gnu/packages/patches/bear-disable-preinstall-tests.patch b/gnu/packages/patches/bear-disable-preinstall-tests.patch
deleted file mode 100644
index c65095405f..0000000000
--- a/gnu/packages/patches/bear-disable-preinstall-tests.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-From d7d0cdd48017679e8529f8475d1b9902944cf243 Mon Sep 17 00:00:00 2001
-From: Brett Gilio <brettg@gnu.org>
-Date: Sun, 20 Dec 2020 14:43:30 -0600
-Subject: [PATCH] Disallow Pre-install Checks
-
----
- CMakeLists.txt | 8 --------
- 1 file changed, 8 deletions(-)
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 45c6d27..73b4ace 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -58,10 +58,6 @@ ExternalProject_Add(BearSource
-             -DROOT_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX}
-             -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
-             -DENABLE_UNIT_TESTS:BOOL=${ENABLE_UNIT_TESTS}
--        TEST_BEFORE_INSTALL
--            1
--        TEST_COMMAND
--            ctest # or `ctest -T memcheck`
-         )
- 
- # Run the functional tests
-@@ -73,12 +69,8 @@ if (ENABLE_FUNC_TESTS)
-                 BearSource
-             CMAKE_CACHE_ARGS
-                 -DSTAGED_INSTALL_PREFIX:PATH=${STAGED_INSTALL_PREFIX}
--            TEST_BEFORE_INSTALL
--                1
-             INSTALL_COMMAND
-                 ""
--            TEST_COMMAND
--                ctest --verbose
-             )
- endif ()
- 
--- 
-2.29.2
-
diff --git a/gnu/packages/patches/behave-skip-a-couple-of-tests.patch b/gnu/packages/patches/behave-skip-a-couple-of-tests.patch
deleted file mode 100644
index e3d4e15241..0000000000
--- a/gnu/packages/patches/behave-skip-a-couple-of-tests.patch
+++ /dev/null
@@ -1,462 +0,0 @@
-Fix build with Python 3.8, this is a patch based on upstream commit [1].
-
-1: c000c88eb5239b87f299c85e83b349b0ef387ae7
-
-
-diff --git a/behave.ini b/behave.ini
-index 45c0f0d7..952240d6 100644
---- a/behave.ini
-+++ b/behave.ini
-@@ -15,8 +15,9 @@ show_skipped = false
- format   = rerun
-     progress3
- outfiles = rerun.txt
--    reports/report_progress3.txt
-+    build/behave.reports/report_progress3.txt
- junit = true
-+junit_directory = build/behave.reports
- logging_level = INFO
- # logging_format = LOG.%(levelname)-8s  %(name)-10s: %(message)s
- # logging_format = LOG.%(levelname)-8s  %(asctime)s  %(name)-10s: %(message)s
-diff --git a/features/environment.py b/features/environment.py
-index 4744e89a..3769ee40 100644
---- a/features/environment.py
-+++ b/features/environment.py
-@@ -1,5 +1,7 @@
- # -*- coding: UTF-8 -*-
-+# FILE: features/environemnt.py
- 
-+from __future__ import absolute_import, print_function
- from behave.tag_matcher import ActiveTagMatcher, setup_active_tag_values
- from behave4cmd0.setup_command_shell import setup_command_shell_processors4behave
- import platform
-@@ -20,6 +22,15 @@
- }
- active_tag_matcher = ActiveTagMatcher(active_tag_value_provider)
- 
-+
-+def print_active_tags_summary():
-+    active_tag_data = active_tag_value_provider
-+    print("ACTIVE-TAG SUMMARY:")
-+    print("use.with_python.version=%s" % active_tag_data.get("python.version"))
-+    # print("use.with_os=%s" % active_tag_data.get("os"))
-+    print()
-+
-+
- # -----------------------------------------------------------------------------
- # HOOKS:
- # -----------------------------------------------------------------------------
-@@ -30,11 +41,14 @@ def before_all(context):
-     setup_python_path()
-     setup_context_with_global_params_test(context)
-     setup_command_shell_processors4behave()
-+    print_active_tags_summary()
-+
- 
- def before_feature(context, feature):
-     if active_tag_matcher.should_exclude_with(feature.tags):
-         feature.skip(reason=active_tag_matcher.exclude_reason)
- 
-+
- def before_scenario(context, scenario):
-     if active_tag_matcher.should_exclude_with(scenario.effective_tags):
-         scenario.skip(reason=active_tag_matcher.exclude_reason)
-diff --git a/features/step.duplicated_step.feature b/features/step.duplicated_step.feature
-index 59888b0f..396cca27 100644
---- a/features/step.duplicated_step.feature
-+++ b/features/step.duplicated_step.feature
-@@ -32,11 +32,11 @@ Feature: Duplicated Step Definitions
-         AmbiguousStep: @given('I call Alice') has already been defined in
-         existing step @given('I call Alice') at features/steps/alice_steps.py:3
-         """
--    And the command output should contain:
--        """
--        File "features/steps/alice_steps.py", line 7, in <module>
--        @given(u'I call Alice')
--        """
-+    # -- DISABLED: Python 3.8 traceback line numbers differ w/ decorators (+1).
-+    # And the command output should contain:
-+    #    """
-+    #    File "features/steps/alice_steps.py", line 7, in <module>
-+    #    """
- 
- 
-   Scenario: Duplicated Step Definition in another File
-@@ -70,11 +70,11 @@ Feature: Duplicated Step Definitions
-         AmbiguousStep: @given('I call Bob') has already been defined in
-         existing step @given('I call Bob') at features/steps/bob1_steps.py:3
-         """
--    And the command output should contain:
--        """
--        File "features/steps/bob2_steps.py", line 3, in <module>
--        @given('I call Bob')
--        """
-+    # -- DISABLED: Python 3.8 traceback line numbers differ w/ decorators (+1).
-+    # And the command output should contain:
-+    #    """
-+    #    File "features/steps/bob2_steps.py", line 3, in <module>
-+    #    """
- 
-   @xfail
-   Scenario: Duplicated Same Step Definition via import from another File
-diff --git a/issue.features/environment.py b/issue.features/environment.py
-index 2dfec751..7e48ee03 100644
---- a/issue.features/environment.py
-+++ b/issue.features/environment.py
-@@ -1,5 +1,5 @@
- # -*- coding: UTF-8 -*-
--# FILE: features/environment.py
-+# FILE: issue.features/environemnt.py
- # pylint: disable=unused-argument
- """
- Functionality:
-@@ -7,17 +7,20 @@
-   * active tags
- """
- 
--from __future__ import print_function
-+
-+from __future__ import absolute_import, print_function
- import sys
- import platform
- import os.path
- import six
- from behave.tag_matcher import ActiveTagMatcher
- from behave4cmd0.setup_command_shell import setup_command_shell_processors4behave
--# PREPARED:
--# from behave.tag_matcher import setup_active_tag_values
-+# PREPARED: from behave.tag_matcher import setup_active_tag_values
- 
- 
-+# ---------------------------------------------------------------------------
-+# TEST SUPPORT: For Active Tags
-+# ---------------------------------------------------------------------------
- def require_tool(tool_name):
-     """Check if a tool (an executable program) is provided on this platform.
- 
-@@ -45,12 +48,14 @@ def require_tool(tool_name):
-     # print("TOOL-NOT-FOUND: %s" % tool_name)
-     return False
- 
-+
- def as_bool_string(value):
-     if bool(value):
-         return "yes"
-     else:
-         return "no"
- 
-+
- def discover_ci_server():
-     # pylint: disable=invalid-name
-     ci_server = "none"
-@@ -67,11 +72,17 @@ def discover_ci_server():
-     return ci_server
- 
- 
-+# ---------------------------------------------------------------------------
-+# BEHAVE SUPPORT: Active Tags
-+# ---------------------------------------------------------------------------
- # -- MATCHES ANY TAGS: @use.with_{category}={value}
- # NOTE: active_tag_value_provider provides category values for active tags.
-+python_version = "%s.%s" % sys.version_info[:2]
- active_tag_value_provider = {
-+    "platform": sys.platform,
-     "python2": str(six.PY2).lower(),
-     "python3": str(six.PY3).lower(),
-+    "python.version": python_version,
-     # -- python.implementation: cpython, pypy, jython, ironpython
-     "python.implementation": platform.python_implementation().lower(),
-     "pypy":    str("__pypy__" in sys.modules).lower(),
-@@ -82,17 +92,33 @@ def discover_ci_server():
- }
- active_tag_matcher = ActiveTagMatcher(active_tag_value_provider)
- 
-+
-+def print_active_tags_summary():
-+    active_tag_data = active_tag_value_provider
-+    print("ACTIVE-TAG SUMMARY:")
-+    print("use.with_python.version=%s" % active_tag_data.get("python.version"))
-+    # print("use.with_platform=%s" % active_tag_data.get("platform"))
-+    # print("use.with_os=%s" % active_tag_data.get("os"))
-+    print()
-+
-+
-+# ---------------------------------------------------------------------------
-+# BEHAVE HOOKS:
-+# ---------------------------------------------------------------------------
- def before_all(context):
-     # -- SETUP ACTIVE-TAG MATCHER (with userdata):
-     # USE: behave -D browser=safari ...
--    # NOT-NEEDED: setup_active_tag_values(active_tag_value_provider,
--    #                                     context.config.userdata)
-+    # NOT-NEEDED:
-+    # setup_active_tag_values(active_tag_value_provider, context.config.userdata)
-     setup_command_shell_processors4behave()
-+    print_active_tags_summary()
-+
- 
- def before_feature(context, feature):
-     if active_tag_matcher.should_exclude_with(feature.tags):
-         feature.skip(reason=active_tag_matcher.exclude_reason)
- 
-+
- def before_scenario(context, scenario):
-     if active_tag_matcher.should_exclude_with(scenario.effective_tags):
-         scenario.skip(reason=active_tag_matcher.exclude_reason)
-diff --git a/issue.features/issue0330.feature b/issue.features/issue0330.feature
-index dc1ebe75..81cb6e29 100644
---- a/issue.features/issue0330.feature
-+++ b/issue.features/issue0330.feature
-@@ -70,6 +70,7 @@ Feature: Issue #330: Skipped scenarios are included in junit reports when --no-s
-     And note that "bob.feature is skipped"
- 
- 
-+  @not.with_python.version=3.8
-   Scenario: Junit report for skipped feature is created with --show-skipped
-     When I run "behave --junit -t @tag1 --show-skipped @alice_and_bob.featureset"
-     Then it should pass with:
-@@ -83,6 +84,23 @@ Feature: Issue #330: Skipped scenarios are included in junit reports when --no-s
-       <testsuite errors="0" failures="0" name="bob.Bob" skipped="1" tests="1" time="0.0">
-       """
- 
-+  @use.with_python.version=3.8
-+  Scenario: Junit report for skipped feature is created with --show-skipped
-+    When I run "behave --junit -t @tag1 --show-skipped @alice_and_bob.featureset"
-+    Then it should pass with:
-+      """
-+      1 feature passed, 0 failed, 1 skipped
-+      """
-+    And a file named "test_results/TESTS-alice.xml" exists
-+    And a file named "test_results/TESTS-bob.xml" exists
-+    And the file "test_results/TESTS-bob.xml" should contain:
-+      """
-+      <testsuite name="bob.Bob" tests="1" errors="0" failures="0" skipped="1" time="0.0">
-+      """
-+      # -- HINT FOR: Python < 3.8
-+      # <testsuite errors="0" failures="0" name="bob.Bob" skipped="1" tests="1" time="0.0">
-+
-+  @not.with_python.version=3.8
-   Scenario: Junit report for skipped scenario is neither shown nor counted with --no-skipped
-     When I run "behave --junit -t @tag1 --no-skipped"
-     Then it should pass with:
-@@ -102,7 +120,30 @@ Feature: Issue #330: Skipped scenarios are included in junit reports when --no-s
-       """
-     And note that "Charly2 is the skipped scenarion in charly.feature"
- 
-+  @use.with_python.version=3.8
-+  Scenario: Junit report for skipped scenario is neither shown nor counted with --no-skipped
-+    When I run "behave --junit -t @tag1 --no-skipped"
-+    Then it should pass with:
-+      """
-+      2 features passed, 0 failed, 1 skipped
-+      2 scenarios passed, 0 failed, 2 skipped
-+      """
-+    And a file named "test_results/TESTS-alice.xml" exists
-+    And a file named "test_results/TESTS-charly.xml" exists
-+    And the file "test_results/TESTS-charly.xml" should contain:
-+      """
-+      <testsuite name="charly.Charly" tests="1" errors="0" failures="0" skipped="0"
-+      """
-+      # -- HINT FOR: Python < 3.8
-+      # <testsuite errors="0" failures="0" name="charly.Charly" skipped="0" tests="1"
-+    And the file "test_results/TESTS-charly.xml" should not contain:
-+      """
-+      <testcase classname="charly.Charly" name="Charly2"
-+      """
-+    And note that "Charly2 is the skipped scenarion in charly.feature"
-+
- 
-+  @not.with_python.version=3.8
-   Scenario: Junit report for skipped scenario is shown and counted with --show-skipped
-     When I run "behave --junit -t @tag1 --show-skipped"
-     Then it should pass with:
-@@ -122,3 +163,26 @@ Feature: Issue #330: Skipped scenarios are included in junit reports when --no-s
-       """
-     And note that "Charly2 is the skipped scenarion in charly.feature"
- 
-+
-+  @use.with_python.version=3.8
-+  Scenario: Junit report for skipped scenario is shown and counted with --show-skipped
-+    When I run "behave --junit -t @tag1 --show-skipped"
-+    Then it should pass with:
-+      """
-+      2 features passed, 0 failed, 1 skipped
-+      2 scenarios passed, 0 failed, 2 skipped
-+      """
-+    And a file named "test_results/TESTS-alice.xml" exists
-+    And a file named "test_results/TESTS-charly.xml" exists
-+    And the file "test_results/TESTS-charly.xml" should contain:
-+      """
-+      <testsuite name="charly.Charly" tests="2" errors="0" failures="0" skipped="1"
-+      """
-+      # HINT: Python < 3.8
-+      # <testsuite errors="0" failures="0" name="charly.Charly" skipped="1" tests="2"
-+    And the file "test_results/TESTS-charly.xml" should contain:
-+      """
-+      <testcase classname="charly.Charly" name="Charly2" status="skipped"
-+      """
-+    And note that "Charly2 is the skipped scenarion in charly.feature"
-+
-diff --git a/issue.features/issue0446.feature b/issue.features/issue0446.feature
-index a2ed892d..901bdec5 100644
---- a/issue.features/issue0446.feature
-+++ b/issue.features/issue0446.feature
-@@ -58,6 +58,7 @@ Feature: Issue #446 -- Support scenario hook-errors with JUnitReporter
-         behave.reporter.junit.show_hostname = False
-         """
- 
-+    @not.with_python.version=3.8
-     Scenario: Hook error in before_scenario()
-       When I run "behave -f plain --junit features/before_scenario_failure.feature"
-       Then it should fail with:
-@@ -86,6 +87,40 @@ Feature: Issue #446 -- Support scenario hook-errors with JUnitReporter
-       And note that "the traceback is contained in the XML element <error/>"
- 
- 
-+    @use.with_python.version=3.8
-+    Scenario: Hook error in before_scenario()
-+      When I run "behave -f plain --junit features/before_scenario_failure.feature"
-+      Then it should fail with:
-+        """
-+        0 scenarios passed, 1 failed, 0 skipped
-+        """
-+      And the command output should contain:
-+        """
-+        HOOK-ERROR in before_scenario: RuntimeError: OOPS
-+        """
-+      And the file "reports/TESTS-before_scenario_failure.xml" should contain:
-+        """
-+        <testsuite name="before_scenario_failure.Alice" tests="1" errors="1" failures="0" skipped="0"
-+        """
-+        # -- HINT FOR: Python < 3.8
-+        # <testsuite errors="1" failures="0" name="before_scenario_failure.Alice" skipped="0" tests="1"
-+      And the file "reports/TESTS-before_scenario_failure.xml" should contain:
-+        """
-+        <error type="RuntimeError" message="HOOK-ERROR in before_scenario: RuntimeError: OOPS">
-+        """
-+        # -- HINT FOR: Python < 3.8
-+        # <error message="HOOK-ERROR in before_scenario: RuntimeError: OOPS" type="RuntimeError">
-+      And the file "reports/TESTS-before_scenario_failure.xml" should contain:
-+        """
-+        File "features/environment.py", line 6, in before_scenario
-+          cause_hook_failure()
-+        File "features/environment.py", line 2, in cause_hook_failure
-+          raise RuntimeError("OOPS")
-+        """
-+      And note that "the traceback is contained in the XML element <error/>"
-+
-+
-+    @not.with_python.version=3.8
-     Scenario: Hook error in after_scenario()
-       When I run "behave -f plain --junit features/after_scenario_failure.feature"
-       Then it should fail with:
-@@ -114,3 +149,38 @@ Feature: Issue #446 -- Support scenario hook-errors with JUnitReporter
-           raise RuntimeError("OOPS")
-         """
-       And note that "the traceback is contained in the XML element <error/>"
-+
-+
-+    @use.with_python.version=3.8
-+    Scenario: Hook error in after_scenario()
-+      When I run "behave -f plain --junit features/after_scenario_failure.feature"
-+      Then it should fail with:
-+        """
-+        0 scenarios passed, 1 failed, 0 skipped
-+        """
-+      And the command output should contain:
-+        """
-+          Scenario: B1
-+            Given another step passes ... passed
-+        HOOK-ERROR in after_scenario: RuntimeError: OOPS
-+        """
-+      And the file "reports/TESTS-after_scenario_failure.xml" should contain:
-+        """
-+        <testsuite name="after_scenario_failure.Bob" tests="1" errors="1" failures="0" skipped="0"
-+        """
-+        # -- HINT FOR: Python < 3.8
-+        # <testsuite errors="1" failures="0" name="after_scenario_failure.Bob" skipped="0" tests="1"
-+      And the file "reports/TESTS-after_scenario_failure.xml" should contain:
-+        """
-+        <error type="RuntimeError" message="HOOK-ERROR in after_scenario: RuntimeError: OOPS">
-+        """
-+        # -- HINT FOR: Python < 3.8
-+        # <error message="HOOK-ERROR in after_scenario: RuntimeError: OOPS" type="RuntimeError">
-+      And the file "reports/TESTS-after_scenario_failure.xml" should contain:
-+        """
-+        File "features/environment.py", line 10, in after_scenario
-+          cause_hook_failure()
-+        File "features/environment.py", line 2, in cause_hook_failure
-+          raise RuntimeError("OOPS")
-+        """
-+      And note that "the traceback is contained in the XML element <error/>"
-diff --git a/issue.features/issue0457.feature b/issue.features/issue0457.feature
-index f80640e9..46f96e9c 100644
---- a/issue.features/issue0457.feature
-+++ b/issue.features/issue0457.feature
-@@ -24,6 +24,7 @@ Feature: Issue #457 -- Double-quotes in error messages of JUnit XML reports
-         """
- 
- 
-+    @not.with_python.version=3.8
-     Scenario: Use failing assertation in a JUnit XML report
-       Given a file named "features/fails1.feature" with:
-         """
-@@ -44,6 +45,31 @@ Feature: Issue #457 -- Double-quotes in error messages of JUnit XML reports
-         <failure message="FAILED: My name is &quot;Alice&quot;"
-         """
- 
-+    @use.with_python.version=3.8
-+    Scenario: Use failing assertation in a JUnit XML report
-+      Given a file named "features/fails1.feature" with:
-+        """
-+        Feature:
-+          Scenario: Alice
-+            Given a step fails with message:
-+              '''
-+              My name is "Alice"
-+              '''
-+        """
-+      When I run "behave --junit features/fails1.feature"
-+      Then it should fail with:
-+        """
-+        0 scenarios passed, 1 failed, 0 skipped
-+        """
-+      And the file "reports/TESTS-fails1.xml" should contain:
-+        """
-+        <failure type="AssertionError" message="FAILED: My name is &quot;Alice&quot;">
-+        """
-+        # -- HINT FOR: Python < 3.8
-+        # <failure message="FAILED: My name is &quot;Alice&quot;"
-+
-+
-+    @not.with_python.version=3.8
-     Scenario: Use exception in a JUnit XML report
-       Given a file named "features/fails2.feature" with:
-         """
-@@ -63,3 +89,26 @@ Feature: Issue #457 -- Double-quotes in error messages of JUnit XML reports
-         """
-         <error message="My name is &quot;Bob&quot; and &lt;here&gt; I am"
-         """
-+
-+    @use.with_python.version=3.8
-+    Scenario: Use exception in a JUnit XML report
-+      Given a file named "features/fails2.feature" with:
-+        """
-+        Feature:
-+          Scenario: Bob
-+            Given a step fails with error and message:
-+              '''
-+              My name is "Bob" and <here> I am
-+              '''
-+        """
-+      When I run "behave --junit features/fails2.feature"
-+      Then it should fail with:
-+        """
-+        0 scenarios passed, 1 failed, 0 skipped
-+        """
-+      And the file "reports/TESTS-fails2.xml" should contain:
-+        """
-+        <error type="RuntimeError" message="My name is &quot;Bob&quot; and &lt;here&gt; I am">
-+        """
-+        # -- HINT FOR: Python < 3.8
-+        # <error message="My name is &quot;Bob&quot; and &lt;here&gt; I am"
diff --git a/gnu/packages/patches/biber-fix-encoding-write.patch b/gnu/packages/patches/biber-fix-encoding-write.patch
deleted file mode 100644
index 56cd11212e..0000000000
--- a/gnu/packages/patches/biber-fix-encoding-write.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From 2a9b15aefb842a734637f3d230936ea1b7c60096 Mon Sep 17 00:00:00 2001
-From: Philip Kime <Philip@kime.org.uk>
-Date: Thu, 8 Nov 2018 22:02:09 +0100
-Subject: [PATCH] Fix to address #239
-
----
- lib/Biber.pm | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/lib/Biber.pm b/lib/Biber.pm
-index 8b1f80a5..d97fca29 100644
---- a/lib/Biber.pm
-+++ b/lib/Biber.pm
-@@ -311,6 +311,8 @@ sub parse_ctrlfile {
-     unless (eval {$checkbuf = File::Slurper::read_text($ctrl_file_path, 'latin1')}) {
-       biber_error("$ctrl_file_path is not UTF-8 or even latin1, how horrible.");
-     }
-+    # Write ctrl file as UTF-8
-+    File::Slurper::write_text($ctrl_file_path, NFC($checkbuf));# Unicode NFC boundary
-   }
- 
-   $checkbuf = NFD($checkbuf);# Unicode NFD boundary
-@@ -319,8 +321,6 @@ sub parse_ctrlfile {
-     unlink($output) unless $output eq '-';# ignore deletion of STDOUT marker
-     biber_error("$ctrl_file_path is malformed, last biblatex run probably failed. Deleted $output");
-   }
--  # Write ctrl file as UTF-8
--  File::Slurper::write_text($ctrl_file_path, NFC($checkbuf));# Unicode NFC boundary
- 
-   # Validate if asked to
-   if (Biber::Config->getoption('validate_control')) {
diff --git a/gnu/packages/patches/biber-sortinithash.patch b/gnu/packages/patches/biber-sortinithash.patch
deleted file mode 100644
index 5a626705e6..0000000000
--- a/gnu/packages/patches/biber-sortinithash.patch
+++ /dev/null
@@ -1,1666 +0,0 @@
-This is a backport of this upstream commit to Biber 2.12:
-
-  From 6b61b4c13778cf638f82569ab9e413f09f111ba5 Mon Sep 17 00:00:00 2001
-  From: Philip Kime <Philip@kime.org.uk>
-  Date: Sat, 12 Jan 2019 17:19:51 +0100
-  Subject: [PATCH] Updated tests after U::C upgrade changed sortinit hashes
-
-It addresses test failures found with recent versions of the
-Biber dependencies.
-
-diff --git a/t/annotations.t b/t/annotations.t
-index b4f641e..c6f86c7 100644
---- a/t/annotations.t
-+++ b/t/annotations.t
-@@ -73,7 +73,7 @@ my $ann1 = q|    \entry{ann1}{misc}{}
-       \strng{authorfullhash}{90ae96c82de92e36949bc64254bbde0c}
-       \field{extraname}{1}
-       \field{sortinit}{L}
--      \field{sortinithash}{2c7981aaabc885868aba60f0c09ee20f}
-+      \field{sortinithash}{dad3efd0836470093a7b4a7bb756eb8c}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-       \field{title}{The Title}
-@@ -116,7 +116,7 @@ my $ann2 = q|    \entry{ann2}{misc}{}
-       \strng{authorfullhash}{90ae96c82de92e36949bc64254bbde0c}
-       \field{extraname}{2}
-       \field{sortinit}{L}
--      \field{sortinithash}{2c7981aaabc885868aba60f0c09ee20f}
-+      \field{sortinithash}{dad3efd0836470093a7b4a7bb756eb8c}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-       \field{title}{The Title}
-diff --git a/t/basic-misc.t b/t/basic-misc.t
-index d4664b1..a9168cc 100644
---- a/t/basic-misc.t
-+++ b/t/basic-misc.t
-@@ -97,7 +97,7 @@ my $u1 = q|    \entry{u1}{misc}{}
-       \strng{authorfullhash}{b78abdc838d79b6576f2ed0021642766}
-       \field{labelalpha}{AAA\textbf{+}00}
-       \field{sortinit}{A}
--      \field{sortinithash}{d77c7cdd82ff690d4c3ef13216f92f0b}
-+      \field{sortinithash}{a3dcedd53b04d1adfd5ac303ecd5e6fa}
-       \true{singletitle}
-       \true{uniquework}
-       \field{labelnamesource}{author}
-@@ -231,7 +231,7 @@ my $murray1 = q|    \entry{murray}{article}{}
-       \strng{authorfullhash}{1572cc3fd324f560e5e71d041a6bd764}
-       \field{labelalpha}{Hos\textbf{+}98}
-       \field{sortinit}{H}
--      \field{sortinithash}{5f15a7bc777ad49ff15aa4d2831b1681}
-+      \field{sortinithash}{6db6145dae8dc9e1271a8d556090b50a}
-       \true{singletitle}
-       \true{uniquework}
-       \field{labelnamesource}{author}
-@@ -348,7 +348,7 @@ my $murray2 = q|    \entry{murray}{article}{}
-       \strng{authorfullhash}{1572cc3fd324f560e5e71d041a6bd764}
-       \field{labelalpha}{Hos98}
-       \field{sortinit}{H}
--      \field{sortinithash}{5f15a7bc777ad49ff15aa4d2831b1681}
-+      \field{sortinithash}{6db6145dae8dc9e1271a8d556090b50a}
-       \true{singletitle}
-       \true{uniquework}
-       \field{labelnamesource}{author}
-@@ -389,7 +389,7 @@ my $t1 = q+    \entry{t1}{misc}{}
-       \field{extraname}{1}
-       \field{labelalpha}{Bro92}
-       \field{sortinit}{B}
--      \field{sortinithash}{276475738cc058478c1677046f857703}
-+      \field{sortinithash}{8de16967003c7207dae369d874f1456e}
-       \true{uniquework}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-@@ -419,7 +419,7 @@ my $t2 = q|    \entry{t2}{misc}{}
-       \field{extraname}{2}
-       \field{labelalpha}{Bro94}
-       \field{sortinit}{B}
--      \field{sortinithash}{276475738cc058478c1677046f857703}
-+      \field{sortinithash}{8de16967003c7207dae369d874f1456e}
-       \true{uniquework}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-@@ -452,7 +452,7 @@ my $anon1 = q|    \entry{anon1}{unpublished}{}
-       \strng{shortauthorfullhash}{9873a6cc65c553faa2b21aaad626fe4b}
-       \field{labelalpha}{XAn35}
-       \field{sortinit}{A}
--      \field{sortinithash}{d77c7cdd82ff690d4c3ef13216f92f0b}
-+      \field{sortinithash}{a3dcedd53b04d1adfd5ac303ecd5e6fa}
-       \true{singletitle}
-       \true{uniquework}
-       \field{labelnamesource}{shortauthor}
-@@ -491,7 +491,7 @@ my $anon2 = q|    \entry{anon2}{unpublished}{}
-       \strng{shortauthorfullhash}{f64c29e89ea49402b997956610b58ef6}
-       \field{labelalpha}{YAn39}
-       \field{sortinit}{A}
--      \field{sortinithash}{d77c7cdd82ff690d4c3ef13216f92f0b}
-+      \field{sortinithash}{a3dcedd53b04d1adfd5ac303ecd5e6fa}
-       \true{singletitle}
-       \true{uniquework}
-       \field{labelnamesource}{shortauthor}
-@@ -526,7 +526,7 @@ my $url1 = q|    \entry{url1}{misc}{}
-       \field{extraname}{4}
-       \field{labelalpha}{Ali05}
-       \field{sortinit}{A}
--      \field{sortinithash}{d77c7cdd82ff690d4c3ef13216f92f0b}
-+      \field{sortinithash}{a3dcedd53b04d1adfd5ac303ecd5e6fa}
-       \field{extraalpha}{4}
-       \field{labelnamesource}{author}
-       \field{year}{2005}
-@@ -710,7 +710,7 @@ my $isbn1 = q|    \entry{isbn1}{misc}{}
-       \field{extraname}{1}
-       \field{labelalpha}{Flu}
-       \field{sortinit}{F}
--      \field{sortinithash}{669c706c6f1fbf3b5a83d26f1d9e9e72}
-+      \field{sortinithash}{fb0c0faa89eb6abae8213bf60e6799ea}
-       \field{extraalpha}{1}
-       \field{labelnamesource}{author}
-       \field{isbn}{978-0-8165-2066-4}
-@@ -735,7 +735,7 @@ my $isbn2 = q|    \entry{isbn2}{misc}{}
-       \field{extraname}{2}
-       \field{labelalpha}{Flu}
-       \field{sortinit}{F}
--      \field{sortinithash}{669c706c6f1fbf3b5a83d26f1d9e9e72}
-+      \field{sortinithash}{fb0c0faa89eb6abae8213bf60e6799ea}
-       \field{extraalpha}{2}
-       \field{labelnamesource}{author}
-       \field{isbn}{978-0-8165-2066-4}
-@@ -778,7 +778,7 @@ my $clone1 = q|    \entry{snk1}{book}{}
-       \field{extraname}{2}
-       \field{labelalpha}{vDoe}
-       \field{sortinit}{v}
--      \field{sortinithash}{75dd7385c90b2252c3ae853a80ca853b}
-+      \field{sortinithash}{02432525618c08e2b03cac47c19764af}
-       \field{extraalpha}{2}
-       \field{labelnamesource}{author}
-     \endentry
-@@ -807,7 +807,7 @@ my $clone2 = q|    \entry{clone-snk1}{book}{}
-       \field{extraname}{1}
-       \field{labelalpha}{vDoe}
-       \field{sortinit}{v}
--      \field{sortinithash}{75dd7385c90b2252c3ae853a80ca853b}
-+      \field{sortinithash}{02432525618c08e2b03cac47c19764af}
-       \field{extraalpha}{1}
-       \field{labelnamesource}{author}
-       \field{addendum}{add}
-@@ -839,7 +839,7 @@ my $ent1 = q|    \entry{ent1}{book}{}
-       \strng{authorfullhash}{b2536a425d549b46de5f21c4d468050a}
-       \field{labelalpha}{SdB}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \true{singletitle}
-       \field{labelnamesource}{author}
-     \endentry
-@@ -862,7 +862,7 @@ my $verb1 = q|    \entry{verb1}{book}{}
-       \strng{authorfullhash}{cac5a25f503e71f5ef28f474e14007b6}
-       \field{labelalpha}{All}
-       \field{sortinit}{A}
--      \field{sortinithash}{d77c7cdd82ff690d4c3ef13216f92f0b}
-+      \field{sortinithash}{a3dcedd53b04d1adfd5ac303ecd5e6fa}
-       \true{singletitle}
-       \field{labelnamesource}{author}
-       \verb{verba}
-diff --git a/t/biblatexml.t b/t/biblatexml.t
-index ad9ad25..0959bfa 100644
---- a/t/biblatexml.t
-+++ b/t/biblatexml.t
-@@ -111,7 +111,7 @@ my $l1 = q|    \entry{bltx1}{misc}{useprefix=false}
-       \strng{translatornamehash}{b44eba830fe9817fbe8e53c82f1cbe04}
-       \strng{translatorfullhash}{b44eba830fe9817fbe8e53c82f1cbe04}
-       \field{sortinit}{v}
--      \field{sortinithash}{75dd7385c90b2252c3ae853a80ca853b}
-+      \field{sortinithash}{02432525618c08e2b03cac47c19764af}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-       \field{labelnamesource}{author}
-@@ -158,7 +158,7 @@ my $l1 = q|    \entry{bltx1}{misc}{useprefix=false}
- 
- my $l2 = q|    \entry{loopkey:a}{book}{}
-       \field{sortinit}{0}
--      \field{sortinithash}{168ad0c7c5ed09f1d28c6675717b5b03}
-+      \field{sortinithash}{bcf7a1f4afb88b7299f988caccb80d1c}
-     \endentry
- |;
- 
-diff --git a/t/crossrefs.t b/t/crossrefs.t
-index 915b52b..b6191c6 100644
---- a/t/crossrefs.t
-+++ b/t/crossrefs.t
-@@ -82,7 +82,7 @@ my $cr1 = q|    \entry{cr1}{inbook}{}
-       \strng{editornamehash}{c129df5593fdaa7475548811bfbb227d}
-       \strng{editorfullhash}{c129df5593fdaa7475548811bfbb227d}
-       \field{sortinit}{G}
--      \field{sortinithash}{5e8d2bf9d38de41b1528bd307546008f}
-+      \field{sortinithash}{62eb2aa29549e4fdbd3cb154ec5711cb}
-       \true{singletitle}
-       \true{uniquetitle}
-       \true{uniquework}
-@@ -131,7 +131,7 @@ my $cr2 = q|    \entry{cr2}{inbook}{}
-       \strng{editornamehash}{c129df5593fdaa7475548811bfbb227d}
-       \strng{editorfullhash}{c129df5593fdaa7475548811bfbb227d}
-       \field{sortinit}{F}
--      \field{sortinithash}{669c706c6f1fbf3b5a83d26f1d9e9e72}
-+      \field{sortinithash}{fb0c0faa89eb6abae8213bf60e6799ea}
-       \true{singletitle}
-       \true{uniquetitle}
-       \true{uniquework}
-@@ -165,7 +165,7 @@ my $cr_m = q|    \entry{cr_m}{book}{}
-       \strng{editornamehash}{c129df5593fdaa7475548811bfbb227d}
-       \strng{editorfullhash}{c129df5593fdaa7475548811bfbb227d}
-       \field{sortinit}{G}
--      \field{sortinithash}{5e8d2bf9d38de41b1528bd307546008f}
-+      \field{sortinithash}{62eb2aa29549e4fdbd3cb154ec5711cb}
-       \true{crossrefsource}
-       \true{uniquetitle}
-       \field{labeltitlesource}{title}
-@@ -203,7 +203,7 @@ my $cr3 = q|    \entry{cr3}{inbook}{}
-       \strng{editornamehash}{a1f5c22413396d599ec766725b226735}
-       \strng{editorfullhash}{a1f5c22413396d599ec766725b226735}
-       \field{sortinit}{A}
--      \field{sortinithash}{d77c7cdd82ff690d4c3ef13216f92f0b}
-+      \field{sortinithash}{a3dcedd53b04d1adfd5ac303ecd5e6fa}
-       \true{singletitle}
-       \true{uniquetitle}
-       \true{uniquework}
-@@ -248,7 +248,7 @@ my $cr4 = q|    \entry{cr4}{inbook}{}
-       \strng{editornamehash}{6ea89bd4958743a20b70fe17647d6af5}
-       \strng{editorfullhash}{6ea89bd4958743a20b70fe17647d6af5}
-       \field{sortinit}{M}
--      \field{sortinithash}{cfd219b90152c06204fab207bc6c7cab}
-+      \field{sortinithash}{2e5c2f51f7fa2d957f3206819bf86dc3}
-       \true{singletitle}
-       \true{uniquetitle}
-       \true{uniquework}
-@@ -279,7 +279,7 @@ my $crt = q|    \entry{crt}{book}{}
-       \strng{editornamehash}{a1f5c22413396d599ec766725b226735}
-       \strng{editorfullhash}{a1f5c22413396d599ec766725b226735}
-       \field{sortinit}{B}
--      \field{sortinithash}{276475738cc058478c1677046f857703}
-+      \field{sortinithash}{8de16967003c7207dae369d874f1456e}
-       \true{uniquetitle}
-       \field{labeltitlesource}{title}
-       \field{title}{Beasts of the Burbling Burns}
-@@ -315,7 +315,7 @@ my $cr6 = q|    \entry{cr6}{inproceedings}{}
-       \strng{editorfullhash}{344a7f427fb765610ef96eb7bce95257}
-       \field{extraname}{2}
-       \field{sortinit}{A}
--      \field{sortinithash}{d77c7cdd82ff690d4c3ef13216f92f0b}
-+      \field{sortinithash}{a3dcedd53b04d1adfd5ac303ecd5e6fa}
-       \true{uniquetitle}
-       \true{uniquework}
-       \field{labelnamesource}{author}
-@@ -366,7 +366,7 @@ my $cr7 = q|    \entry{cr7}{inbook}{}
-       \strng{bookauthorfullhash}{91a1dd4aeed3c4ec29ca74c4e778be5f}
-       \field{extraname}{1}
-       \field{sortinit}{A}
--      \field{sortinithash}{d77c7cdd82ff690d4c3ef13216f92f0b}
-+      \field{sortinithash}{a3dcedd53b04d1adfd5ac303ecd5e6fa}
-       \true{uniquetitle}
-       \true{uniquework}
-       \field{labelnamesource}{author}
-@@ -401,7 +401,7 @@ my $cr8 = q|    \entry{cr8}{incollection}{}
-       \strng{authorfullhash}{3d449e56eb3ca1ae80dc99a18d689795}
-       \field{extraname}{4}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \true{singletitle}
-       \true{uniquetitle}
-       \true{uniquework}
-@@ -431,7 +431,7 @@ my $xr1 = q|    \entry{xr1}{inbook}{}
-       \strng{authornamehash}{e0ecc4fc668ee499d1afba44e1ac064d}
-       \strng{authorfullhash}{e0ecc4fc668ee499d1afba44e1ac064d}
-       \field{sortinit}{Z}
--      \field{sortinithash}{156173bd08b075d7295bc3e0f4735a04}
-+      \field{sortinithash}{8f7b480688e809b50b6f6577b16f3db5}
-       \true{singletitle}
-       \true{uniquetitle}
-       \true{uniquework}
-@@ -460,7 +460,7 @@ my $xr2 = q|    \entry{xr2}{inbook}{}
-       \strng{authornamehash}{6afa09374ecfd6b394ce714d2d9709c7}
-       \strng{authorfullhash}{6afa09374ecfd6b394ce714d2d9709c7}
-       \field{sortinit}{I}
--      \field{sortinithash}{320bc8fe8101b9376f9f21cd507de0e8}
-+      \field{sortinithash}{9417e9a1288a9371e2691d999083ed39}
-       \true{singletitle}
-       \true{uniquetitle}
-       \true{uniquework}
-@@ -491,7 +491,7 @@ my $xrm = q|    \entry{xrm}{book}{}
-       \strng{editornamehash}{809950f9b59ae207092b909a19dcb27b}
-       \strng{editorfullhash}{809950f9b59ae207092b909a19dcb27b}
-       \field{sortinit}{C}
--      \field{sortinithash}{963e9d84a3da2344e8833203de5aed05}
-+      \field{sortinithash}{4c244ceae61406cdc0cc2ce1cb1ff703}
-       \true{xrefsource}
-       \true{uniquetitle}
-       \field{labeltitlesource}{title}
-@@ -516,7 +516,7 @@ my $xr3 = q|    \entry{xr3}{inbook}{}
-       \strng{authornamehash}{9788055665b9bb4b37c776c3f6b74f16}
-       \strng{authorfullhash}{9788055665b9bb4b37c776c3f6b74f16}
-       \field{sortinit}{N}
--      \field{sortinithash}{f7242c3ed3dc50029fca1be76c497c7c}
-+      \field{sortinithash}{98cf339a479c0454fe09153a08675a15}
-       \true{singletitle}
-       \true{uniquetitle}
-       \true{uniquework}
-@@ -546,7 +546,7 @@ my $xrt = q|    \entry{xrt}{book}{}
-       \strng{editornamehash}{bf7d6b02f3e073913e5bfe5059508dd5}
-       \strng{editorfullhash}{bf7d6b02f3e073913e5bfe5059508dd5}
-       \field{sortinit}{K}
--      \field{sortinithash}{9fd838a31ba64d981e8f44562bd33f89}
-+      \field{sortinithash}{d3edc18d54b9438a72c24c925bfb38f4}
-       \true{uniquetitle}
-       \field{labeltitlesource}{title}
-       \field{title}{Kings, Cork and Calculation}
-@@ -572,7 +572,7 @@ my $xr4 = q|    \entry{xr4}{inbook}{}
-       \strng{authorfullhash}{7804ffef086c0c4686c235807f5cb502}
-       \field{extraname}{1}
-       \field{sortinit}{M}
--      \field{sortinithash}{cfd219b90152c06204fab207bc6c7cab}
-+      \field{sortinithash}{2e5c2f51f7fa2d957f3206819bf86dc3}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-       \field{origyear}{1933}
-@@ -600,7 +600,7 @@ my $mxr = q|    \entry{mxr}{inbook}{}
-       \strng{authorfullhash}{7804ffef086c0c4686c235807f5cb502}
-       \field{extraname}{2}
-       \field{sortinit}{M}
--      \field{sortinithash}{cfd219b90152c06204fab207bc6c7cab}
-+      \field{sortinithash}{2e5c2f51f7fa2d957f3206819bf86dc3}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-       \field{origyear}{1933}
-@@ -625,7 +625,7 @@ my $mcr = q|    \entry{mcr}{inbook}{}
-       \strng{authorfullhash}{7804ffef086c0c4686c235807f5cb502}
-       \field{extraname}{3}
-       \field{sortinit}{M}
--      \field{sortinithash}{cfd219b90152c06204fab207bc6c7cab}
-+      \field{sortinithash}{2e5c2f51f7fa2d957f3206819bf86dc3}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-       \field{origyear}{1933}
-@@ -660,7 +660,7 @@ my $ccr1 = q|    \entry{ccr2}{book}{}
-       \strng{editorfullhash}{cfee758a1c82df2e26af1985e061bb0a}
-       \field{extraname}{1}
-       \field{sortinit}{V}
--      \field{sortinithash}{75dd7385c90b2252c3ae853a80ca853b}
-+      \field{sortinithash}{02432525618c08e2b03cac47c19764af}
-       \true{uniquetitle}
-       \true{uniquework}
-       \field{labelnamesource}{author}
-@@ -694,7 +694,7 @@ my $ccr2 = q|    \entry{ccr3}{inbook}{}
-       \strng{editornamehash}{cfee758a1c82df2e26af1985e061bb0a}
-       \strng{editorfullhash}{cfee758a1c82df2e26af1985e061bb0a}
-       \field{sortinit}{P}
--      \field{sortinithash}{8d51b3d5b78d75b54308d706b9bbe285}
-+      \field{sortinithash}{bb5b15f2db90f7aef79bb9e83defefcb}
-       \true{uniquetitle}
-       \field{labeltitlesource}{title}
-       \field{booktitle}{Misc etc.}
-@@ -726,7 +726,7 @@ my $ccr3 = q|    \entry{ccr4}{inbook}{}
- 
- my $s1 = q|    \entry{s1}{inbook}{}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \true{uniquetitle}
-       \field{labeltitlesource}{title}
-       \strng{crossref}{s2}
-@@ -760,7 +760,7 @@ my $xc2 = q|    \entry{xc2}{inbook}{}
-       \strng{bookauthorfullhash}{1a0f7d518cccdad859a74412ef956474}
-       \field{extraname}{2}
-       \field{sortinit}{C}
--      \field{sortinithash}{963e9d84a3da2344e8833203de5aed05}
-+      \field{sortinithash}{4c244ceae61406cdc0cc2ce1cb1ff703}
-       \true{xrefsource}
-       \field{labelnamesource}{author}
-       \field{booktitle}{Title}
-@@ -769,7 +769,7 @@ my $xc2 = q|    \entry{xc2}{inbook}{}
- 
- my $b1 = q|    \entry{b1}{inbook}{}
-       \field{sortinit}{2}
--      \field{sortinithash}{cbff857e587bcb4635511624d773949e}
-+      \field{sortinithash}{ed39bb39cf854d5250e95b1c1f94f4ed}
-       \strng{crossref}{b2}
-       \field{day}{3}
-       \field{month}{3}
-@@ -803,7 +803,7 @@ my $sup1 = q|    \entry{sup1}{mvbook}{}
-       \strng{authorfullhash}{556c8dba145b472e6a8598d506f7cbe2}
-       \field{extraname}{3}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \true{crossrefsource}
-       \true{singletitle}
-       \field{labelnamesource}{author}
-@@ -828,7 +828,7 @@ my $sup2 = q|    \entry{sup2}{book}{}
-       \strng{authorfullhash}{556c8dba145b472e6a8598d506f7cbe2}
-       \field{extraname}{1}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \true{singletitle}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-diff --git a/t/datalists.t b/t/datalists.t
-index 3081cc4..4855e3d 100644
---- a/t/datalists.t
-+++ b/t/datalists.t
-@@ -187,7 +187,7 @@ my $K11 = q|    \entry{K11}{book}{}
-       \strng{authornamehash}{4edc280a0ef229f9c061e3b121b17482}
-       \strng{authorfullhash}{4edc280a0ef229f9c061e3b121b17482}
-       \field{sortinit}{a}
--      \field{sortinithash}{d77c7cdd82ff690d4c3ef13216f92f0b}
-+      \field{sortinithash}{a3dcedd53b04d1adfd5ac303ecd5e6fa}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-       \field{labelnamesource}{author}
-@@ -219,7 +219,7 @@ my $K12 = q|    \entry{K12}{book}{}
-       \strng{authornamehash}{a846a485fc9cbb59b0ebeedd6ac637e4}
-       \strng{authorfullhash}{a846a485fc9cbb59b0ebeedd6ac637e4}
-       \field{sortinit}{Z}
--      \field{sortinithash}{156173bd08b075d7295bc3e0f4735a04}
-+      \field{sortinithash}{8f7b480688e809b50b6f6577b16f3db5}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-       \field{labelnamesource}{author}
-diff --git a/t/dateformats.t b/t/dateformats.t
-index 6beb567..0d5072a 100644
---- a/t/dateformats.t
-+++ b/t/dateformats.t
-@@ -88,7 +88,7 @@ my $l13c = q|    \entry{L13}{book}{}
-       \strng{authorfullhash}{8c77336299b25bdada7bf8038f46722f}
-       \field{extraname}{3}
-       \field{sortinit}{D}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-       \field{labelnamesource}{author}
-@@ -126,7 +126,7 @@ my $l14 = q|    \entry{L14}{book}{}
-       \strng{authorfullhash}{8c77336299b25bdada7bf8038f46722f}
-       \field{extraname}{4}
-       \field{sortinit}{D}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-       \field{extradate}{3}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-@@ -168,7 +168,7 @@ my $l15 = q|    \entry{L15}{book}{}
-       \strng{authorfullhash}{8c77336299b25bdada7bf8038f46722f}
-       \field{extraname}{12}
-       \field{sortinit}{D}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-       \field{extradate}{4}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-@@ -201,7 +201,7 @@ my $l16 = q|    \entry{L16}{proceedings}{}
-       \strng{editorfullhash}{8c77336299b25bdada7bf8038f46722f}
-       \field{extraname}{13}
-       \field{sortinit}{D}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-       \field{extradate}{7}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{event}
-@@ -240,7 +240,7 @@ my $l17 = q|    \entry{L17}{proceedings}{}
-       \strng{editorfullhash}{8c77336299b25bdada7bf8038f46722f}
-       \field{extraname}{5}
-       \field{sortinit}{D}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-       \field{extradate}{4}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-@@ -299,7 +299,7 @@ my $l17c = q|    \entry{L17}{proceedings}{}
-       \strng{editorfullhash}{8c77336299b25bdada7bf8038f46722f}
-       \field{extraname}{5}
-       \field{sortinit}{D}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{orig}
-       \field{labelnamesource}{editor}
-@@ -357,7 +357,7 @@ my $l17e = q|    \entry{L17}{proceedings}{}
-       \strng{editorfullhash}{8c77336299b25bdada7bf8038f46722f}
-       \field{extraname}{5}
-       \field{sortinit}{D}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{event}
-       \field{labelnamesource}{editor}
-@@ -479,7 +479,7 @@ my $era1 = q|    \entry{era1}{article}{}
-       \strng{authorfullhash}{556c8dba145b472e6a8598d506f7cbe2}
-       \field{extraname}{9}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-       \field{labelnamesource}{author}
-@@ -512,7 +512,7 @@ my $era2 = q|    \entry{era2}{inproceedings}{}
-       \strng{authorfullhash}{556c8dba145b472e6a8598d506f7cbe2}
-       \field{extraname}{10}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-       \field{labelnamesource}{author}
-@@ -546,7 +546,7 @@ my $era3 = q|    \entry{era3}{inproceedings}{}
-       \strng{authorfullhash}{556c8dba145b472e6a8598d506f7cbe2}
-       \field{extraname}{11}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-       \field{labelnamesource}{author}
-@@ -580,7 +580,7 @@ my $era4 = q|    \entry{era4}{inproceedings}{}
-       \strng{authorfullhash}{556c8dba145b472e6a8598d506f7cbe2}
-       \field{extraname}{6}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-       \field{labelnamesource}{author}
-@@ -622,7 +622,7 @@ my $time1 = q|    \entry{time1}{article}{}
-       \strng{authorfullhash}{556c8dba145b472e6a8598d506f7cbe2}
-       \field{extraname}{2}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-       \field{labelnamesource}{author}
-@@ -671,7 +671,7 @@ my $range1 = q|    \entry{range1}{inproceedings}{}
-       \strng{authorfullhash}{556c8dba145b472e6a8598d506f7cbe2}
-       \field{extraname}{7}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{extradate}{1}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-@@ -712,7 +712,7 @@ my $range2 = q|    \entry{range2}{inproceedings}{}
-       \strng{authorfullhash}{556c8dba145b472e6a8598d506f7cbe2}
-       \field{extraname}{8}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{extradate}{2}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-@@ -753,7 +753,7 @@ my $season1 = q|    \entry{season1}{inproceedings}{}
-       \strng{authorfullhash}{556c8dba145b472e6a8598d506f7cbe2}
-       \field{extraname}{1}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-       \field{labelnamesource}{author}
-@@ -785,7 +785,7 @@ my $unspec1 = q|    \entry{unspec1}{inproceedings}{}
-       \strng{authorfullhash}{556c8dba145b472e6a8598d506f7cbe2}
-       \field{extraname}{4}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-       \field{labelnamesource}{author}
-@@ -838,7 +838,7 @@ my $unspec2 = q|    \entry{unspec2}{article}{}
-       \strng{authorfullhash}{556c8dba145b472e6a8598d506f7cbe2}
-       \field{extraname}{3}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-       \field{labelnamesource}{author}
-diff --git a/t/encoding.t b/t/encoding.t
-index a150b4f..36d9955 100644
---- a/t/encoding.t
-+++ b/t/encoding.t
-@@ -52,7 +52,7 @@ my $encode1 = q|    \entry{testŠ}{book}{}
-       \strng{authorfullhash}{06a47edae2e847800cfd78323a0e6be8}
-       \field{labelalpha}{Enc99}
-       \field{sortinit}{E}
--      \field{sortinithash}{f615fb9c6fba11c6f962fb3fd599810e}
-+      \field{sortinithash}{c554bd1a0b76ea92b9f105fe36d9c7b0}
-       \field{labeldatesource}{year}
-       \true{singletitle}
-       \field{labelnamesource}{author}
-@@ -82,7 +82,7 @@ my $encode2 = q|    \entry{test1}{book}{}
-       \strng{authorfullhash}{06a47edae2e847800cfd78323a0e6be8}
-       \field{labelalpha}{Enc99}
-       \field{sortinit}{E}
--      \field{sortinithash}{f615fb9c6fba11c6f962fb3fd599810e}
-+      \field{sortinithash}{c554bd1a0b76ea92b9f105fe36d9c7b0}
-       \field{labeldatesource}{year}
-       \true{singletitle}
-       \field{labelnamesource}{author}
-@@ -112,7 +112,7 @@ my $encode3 = q|    \entry{test1}{book}{}
-       \strng{authorfullhash}{06a47edae2e847800cfd78323a0e6be8}
-       \field{labelalpha}{Enc99}
-       \field{sortinit}{E}
--      \field{sortinithash}{f615fb9c6fba11c6f962fb3fd599810e}
-+      \field{sortinithash}{c554bd1a0b76ea92b9f105fe36d9c7b0}
-       \field{labeldatesource}{year}
-       \true{singletitle}
-       \field{labelnamesource}{author}
-@@ -142,7 +142,7 @@ my $encode5 = q|    \entry{test}{book}{}
-       \strng{authorfullhash}{06a47edae2e847800cfd78323a0e6be8}
-       \field{labelalpha}{Enc99}
-       \field{sortinit}{E}
--      \field{sortinithash}{f615fb9c6fba11c6f962fb3fd599810e}
-+      \field{sortinithash}{c554bd1a0b76ea92b9f105fe36d9c7b0}
-       \field{labeldatesource}{year}
-       \true{singletitle}
-       \field{labelnamesource}{author}
-@@ -172,7 +172,7 @@ my $encode6 = q|    \entry{test}{book}{}
-       \strng{authorfullhash}{06a47edae2e847800cfd78323a0e6be8}
-       \field{labelalpha}{Enc99}
-       \field{sortinit}{E}
--      \field{sortinithash}{f615fb9c6fba11c6f962fb3fd599810e}
-+      \field{sortinithash}{c554bd1a0b76ea92b9f105fe36d9c7b0}
-       \field{labeldatesource}{year}
-       \true{singletitle}
-       \field{labelnamesource}{author}
-@@ -202,7 +202,7 @@ my $encode7 = q|    \entry{test}{book}{}
-       \strng{authorfullhash}{06a47edae2e847800cfd78323a0e6be8}
-       \field{labelalpha}{Enc99}
-       \field{sortinit}{E}
--      \field{sortinithash}{f615fb9c6fba11c6f962fb3fd599810e}
-+      \field{sortinithash}{c554bd1a0b76ea92b9f105fe36d9c7b0}
-       \field{labeldatesource}{year}
-       \true{singletitle}
-       \field{labelnamesource}{author}
-diff --git a/t/names.t b/t/names.t
-index 7228042..b73f2ed 100644
---- a/t/names.t
-+++ b/t/names.t
-@@ -188,7 +188,7 @@ my $l1 = q|    \entry{L1}{book}{}
-       \strng{authornamehash}{72287a68c1714cb1b9f4ab9e03a88b96}
-       \strng{authorfullhash}{72287a68c1714cb1b9f4ab9e03a88b96}
-       \field{sortinit}{A}
--      \field{sortinithash}{d77c7cdd82ff690d4c3ef13216f92f0b}
-+      \field{sortinithash}{a3dcedd53b04d1adfd5ac303ecd5e6fa}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -208,7 +208,7 @@ my $l2 = q|    \entry{L2}{book}{}
-       \strng{authornamehash}{2098d59d0f19a2e003ee06c1aa750d57}
-       \strng{authorfullhash}{2098d59d0f19a2e003ee06c1aa750d57}
-       \field{sortinit}{B}
--      \field{sortinithash}{276475738cc058478c1677046f857703}
-+      \field{sortinithash}{8de16967003c7207dae369d874f1456e}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -228,7 +228,7 @@ my $l3 = q|    \entry{L3}{book}{}
-       \strng{authornamehash}{c8b06fe88bde128b25eb0b3b1cc5837c}
-       \strng{authorfullhash}{c8b06fe88bde128b25eb0b3b1cc5837c}
-       \field{sortinit}{C}
--      \field{sortinithash}{963e9d84a3da2344e8833203de5aed05}
-+      \field{sortinithash}{4c244ceae61406cdc0cc2ce1cb1ff703}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -248,7 +248,7 @@ my $l4 = q|    \entry{L4}{book}{}
-       \strng{authornamehash}{5ec958b850c0c2de7de7c42c84b9c419}
-       \strng{authorfullhash}{5ec958b850c0c2de7de7c42c84b9c419}
-       \field{sortinit}{D}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -270,7 +270,7 @@ my $l5 = q|    \entry{L5}{book}{}
-       \strng{authornamehash}{c6b9d281cc1ff3f35570f76f463d4244}
-       \strng{authorfullhash}{c6b9d281cc1ff3f35570f76f463d4244}
-       \field{sortinit}{v}
--      \field{sortinithash}{75dd7385c90b2252c3ae853a80ca853b}
-+      \field{sortinithash}{02432525618c08e2b03cac47c19764af}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -292,7 +292,7 @@ my $l6 = q|    \entry{L6}{book}{}
-       \strng{authornamehash}{5fd24d3d1608a310ec205a6b201a5495}
-       \strng{authorfullhash}{5fd24d3d1608a310ec205a6b201a5495}
-       \field{sortinit}{v}
--      \field{sortinithash}{75dd7385c90b2252c3ae853a80ca853b}
-+      \field{sortinithash}{02432525618c08e2b03cac47c19764af}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -314,7 +314,7 @@ my $l7 = q|    \entry{L7}{book}{}
-       \strng{authornamehash}{98edb0b90251df22b74328d9227eceb7}
-       \strng{authorfullhash}{98edb0b90251df22b74328d9227eceb7}
-       \field{sortinit}{v}
--      \field{sortinithash}{75dd7385c90b2252c3ae853a80ca853b}
-+      \field{sortinithash}{02432525618c08e2b03cac47c19764af}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -336,7 +336,7 @@ my $l8 = q|    \entry{L8}{book}{}
-       \strng{authornamehash}{1211dc8dbbc191cbcab4da3c3c1fc48a}
-       \strng{authorfullhash}{1211dc8dbbc191cbcab4da3c3c1fc48a}
-       \field{sortinit}{v}
--      \field{sortinithash}{75dd7385c90b2252c3ae853a80ca853b}
-+      \field{sortinithash}{02432525618c08e2b03cac47c19764af}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -356,7 +356,7 @@ my $l9 = q|    \entry{L9}{book}{}
-       \strng{authornamehash}{bae61a889ab149a6deafe45333204cf0}
-       \strng{authorfullhash}{bae61a889ab149a6deafe45333204cf0}
-       \field{sortinit}{I}
--      \field{sortinithash}{320bc8fe8101b9376f9f21cd507de0e8}
-+      \field{sortinithash}{9417e9a1288a9371e2691d999083ed39}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -379,7 +379,7 @@ my $l10 = q|    \entry{L10}{book}{}
-       \strng{authornamehash}{37b4325752e394ddfb2fc810f6c88e27}
-       \strng{authorfullhash}{37b4325752e394ddfb2fc810f6c88e27}
-       \field{sortinit}{J}
--      \field{sortinithash}{fce5f8d0bd05e8d93f3dbe21c78897ca}
-+      \field{sortinithash}{c45040a764d616897e7f5b30174d7b92}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -402,7 +402,7 @@ my $l10a = q|    \entry{L10a}{book}{}
-       \strng{authornamehash}{7bf2c9d8b89a1930ee91bfddcaf20c9c}
-       \strng{authorfullhash}{7bf2c9d8b89a1930ee91bfddcaf20c9c}
-       \field{sortinit}{P}
--      \field{sortinithash}{8d51b3d5b78d75b54308d706b9bbe285}
-+      \field{sortinithash}{bb5b15f2db90f7aef79bb9e83defefcb}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -427,7 +427,7 @@ my $l11 = q|    \entry{L11}{book}{}
-       \strng{authornamehash}{9f48d231be68c9435fab4faca55a5caf}
-       \strng{authorfullhash}{9f48d231be68c9435fab4faca55a5caf}
-       \field{sortinit}{v}
--      \field{sortinithash}{75dd7385c90b2252c3ae853a80ca853b}
-+      \field{sortinithash}{02432525618c08e2b03cac47c19764af}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -449,7 +449,7 @@ my $l12 = q|    \entry{L12}{book}{}
-       \strng{authornamehash}{d7ca88c13a8f7ce1c23e920010a31f83}
-       \strng{authorfullhash}{d7ca88c13a8f7ce1c23e920010a31f83}
-       \field{sortinit}{d}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-       \true{uniqueprimaryauthor}
-       \field{labelnamesource}{author}
-     \endentry
-@@ -470,7 +470,7 @@ my $l13 = q|    \entry{L13}{book}{}
-       \strng{authornamehash}{227ac48bb788a658cfaa4eefc71ff0cc}
-       \strng{authorfullhash}{227ac48bb788a658cfaa4eefc71ff0cc}
-       \field{sortinit}{V}
--      \field{sortinithash}{75dd7385c90b2252c3ae853a80ca853b}
-+      \field{sortinithash}{02432525618c08e2b03cac47c19764af}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -490,7 +490,7 @@ my $l14 = q|    \entry{L14}{book}{}
-       \strng{authornamehash}{779475052c17ed56dc3be900d0dfdf87}
-       \strng{authorfullhash}{779475052c17ed56dc3be900d0dfdf87}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -513,7 +513,7 @@ my $l15 = q|    \entry{L15}{book}{}
-       \strng{authorfullhash}{783c636e853e47a854ae034ebe9dde62}
-       \field{extraname}{1}
-       \field{sortinit}{v}
--      \field{sortinithash}{75dd7385c90b2252c3ae853a80ca853b}
-+      \field{sortinithash}{02432525618c08e2b03cac47c19764af}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -536,7 +536,7 @@ my $l16 = q|    \entry{L16}{book}{}
-       \strng{authorfullhash}{783c636e853e47a854ae034ebe9dde62}
-       \field{extraname}{2}
-       \field{sortinit}{v}
--      \field{sortinithash}{75dd7385c90b2252c3ae853a80ca853b}
-+      \field{sortinithash}{02432525618c08e2b03cac47c19764af}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -557,7 +557,7 @@ my $l17 = q|    \entry{L17}{book}{}
-       \strng{authorfullhash}{b51f667a3384d92ea5458ba80716bff7}
-       \field{extraname}{1}
-       \field{sortinit}{L}
--      \field{sortinithash}{2c7981aaabc885868aba60f0c09ee20f}
-+      \field{sortinithash}{dad3efd0836470093a7b4a7bb756eb8c}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -578,7 +578,7 @@ my $l18 = q|    \entry{L18}{book}{}
-       \strng{authorfullhash}{b51f667a3384d92ea5458ba80716bff7}
-       \field{extraname}{2}
-       \field{sortinit}{L}
--      \field{sortinithash}{2c7981aaabc885868aba60f0c09ee20f}
-+      \field{sortinithash}{dad3efd0836470093a7b4a7bb756eb8c}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -598,7 +598,7 @@ my $l19 = q|    \entry{L19}{book}{}
-       \strng{authornamehash}{83caa52f21f97e572dd3267bdf62978a}
-       \strng{authorfullhash}{83caa52f21f97e572dd3267bdf62978a}
-       \field{sortinit}{M}
--      \field{sortinithash}{cfd219b90152c06204fab207bc6c7cab}
-+      \field{sortinithash}{2e5c2f51f7fa2d957f3206819bf86dc3}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -618,7 +618,7 @@ my $l19a = q|    \entry{L19a}{book}{}
-       \strng{authornamehash}{0963f6904ccfeaac2770c5882a587001}
-       \strng{authorfullhash}{0963f6904ccfeaac2770c5882a587001}
-       \field{sortinit}{L}
--      \field{sortinithash}{2c7981aaabc885868aba60f0c09ee20f}
-+      \field{sortinithash}{dad3efd0836470093a7b4a7bb756eb8c}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -639,7 +639,7 @@ my $l20 = q|    \entry{L20}{book}{}
-       \strng{authornamehash}{5f26c2f3b33095d5b005714893f4d698}
-       \strng{authorfullhash}{5f26c2f3b33095d5b005714893f4d698}
-       \field{sortinit}{F}
--      \field{sortinithash}{669c706c6f1fbf3b5a83d26f1d9e9e72}
-+      \field{sortinithash}{fb0c0faa89eb6abae8213bf60e6799ea}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -660,7 +660,7 @@ my $l21 = q|    \entry{L21}{book}{}
-       \strng{authorfullhash}{4389a3c0dc7da74487b50808ba9436ad}
-       \field{extraname}{1}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -681,7 +681,7 @@ my $l22u = q|    \entry{L22}{book}{}
-       \strng{authorfullhash}{e58b861545799d0eaf883402a882126e}
-       \field{extraname}{1}
-       \field{sortinit}{Š}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -703,7 +703,7 @@ my $l22 = q|    \entry{L22}{book}{}
-       \strng{authorfullhash}{e58b861545799d0eaf883402a882126e}
-       \field{extraname}{1}
-       \field{sortinit}{\v{S}}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \true{uniqueprimaryauthor}
-       \field{labelnamesource}{author}
-     \endentry
-@@ -726,7 +726,7 @@ my $l23 = q|    \entry{L23}{book}{}
-       \strng{authorfullhash}{4389a3c0dc7da74487b50808ba9436ad}
-       \field{extraname}{3}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -747,7 +747,7 @@ my $l24 = q|    \entry{L24}{book}{}
-       \strng{authorfullhash}{e58b861545799d0eaf883402a882126e}
-       \field{extraname}{2}
-       \field{sortinit}{Š}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -765,7 +765,7 @@ my $l25 = q|    \entry{L25}{book}{}
-       \strng{authornamehash}{d7cd2c5ea0848abc3e90609558b84a45}
-       \strng{authorfullhash}{d7cd2c5ea0848abc3e90609558b84a45}
-       \field{sortinit}{A}
--      \field{sortinithash}{d77c7cdd82ff690d4c3ef13216f92f0b}
-+      \field{sortinithash}{a3dcedd53b04d1adfd5ac303ecd5e6fa}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -783,7 +783,7 @@ my $l26 = q|    \entry{L26}{book}{}
-       \strng{authornamehash}{8eee1dbafdbd0a4b73157e60f18b4784}
-       \strng{authorfullhash}{8eee1dbafdbd0a4b73157e60f18b4784}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -791,7 +791,7 @@ my $l26 = q|    \entry{L26}{book}{}
- # Malformed anyway but a decent test
- my $l28 = q|    \entry{L28}{book}{}
-       \field{sortinit}{0}
--      \field{sortinithash}{168ad0c7c5ed09f1d28c6675717b5b03}
-+      \field{sortinithash}{bcf7a1f4afb88b7299f988caccb80d1c}
-       \warn{\item Name "Deux et al.,, O." is malformed (consecutive commas): skipping name}
-     \endentry
- |;
-@@ -810,7 +810,7 @@ my $l29 = q|    \entry{L29}{book}{}
-       \strng{authornamehash}{27ad192a3a715aa89152b2a4ee392e8c}
-       \strng{authorfullhash}{27ad192a3a715aa89152b2a4ee392e8c}
-       \field{sortinit}{U}
--      \field{sortinithash}{36a2444f5238e0dcf4bb59704df6624d}
-+      \field{sortinithash}{77a6935510e008adcf5b555e7b4f0711}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -850,7 +850,7 @@ my $l31 = q|    \entry{L31}{book}{}
-       \strng{translatornamehash}{29c3ff92fff79d09a8b44d2f775de0b1}
-       \strng{translatorfullhash}{29c3ff92fff79d09a8b44d2f775de0b1}
-       \field{sortinit}{\~{Z}}
--      \field{sortinithash}{156173bd08b075d7295bc3e0f4735a04}
-+      \field{sortinithash}{8f7b480688e809b50b6f6577b16f3db5}
-       \true{uniqueprimaryauthor}
-       \field{labelnamesource}{author}
-     \endentry
-diff --git a/t/options.t b/t/options.t
-index 940a282..c14d694 100644
---- a/t/options.t
-+++ b/t/options.t
-@@ -100,7 +100,7 @@ my $l1 = q|    \entry{L1}{book}{}
-       \strng{authornamehash}{bd051a2f7a5f377e3a62581b0e0f8577}
-       \strng{authorfullhash}{bd051a2f7a5f377e3a62581b0e0f8577}
-       \field{sortinit}{D}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-       \field{labelnamesource}{author}
-@@ -137,7 +137,7 @@ my $l2 = q|    \entry{L2}{book}{maxcitenames=3,maxbibnames=3,maxsortnames=3,maxi
-       \strng{authornamehash}{19eec87c959944d6d9c72434a42856ba}
-       \strng{authorfullhash}{19eec87c959944d6d9c72434a42856ba}
-       \field{sortinit}{E}
--      \field{sortinithash}{f615fb9c6fba11c6f962fb3fd599810e}
-+      \field{sortinithash}{c554bd1a0b76ea92b9f105fe36d9c7b0}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-       \field{labelnamesource}{author}
-@@ -169,7 +169,7 @@ my $l3 = q|    \entry{L3}{book}{blah=10}
-       \strng{authornamehash}{490250da1f3b92580d97563dc96c6c84}
-       \strng{authorfullhash}{490250da1f3b92580d97563dc96c6c84}
-       \field{sortinit}{B}
--      \field{sortinithash}{276475738cc058478c1677046f857703}
-+      \field{sortinithash}{8de16967003c7207dae369d874f1456e}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-       \field{labelnamesource}{author}
-diff --git a/t/related-entries.t b/t/related-entries.t
-index 53dce64..b38ac79 100644
---- a/t/related-entries.t
-+++ b/t/related-entries.t
-@@ -56,7 +56,7 @@ my $k1 = q|    \entry{key1}{article}{}
-       \strng{authorfullhash}{a517747c3d12f99244ae598910d979c5}
-       \field{extraname}{1}
-       \field{sortinit}{1}
--      \field{sortinithash}{2174f786c6195e7fe2ee1c229b416e29}
-+      \field{sortinithash}{50c6687d7fc80f50136d75228e3c59ba}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-       \field{labelnamesource}{author}
-@@ -95,7 +95,7 @@ my $k2 = q|    \entry{key2}{inbook}{}
-       \strng{authorfullhash}{a517747c3d12f99244ae598910d979c5}
-       \field{extraname}{2}
-       \field{sortinit}{2}
--      \field{sortinithash}{cbff857e587bcb4635511624d773949e}
-+      \field{sortinithash}{ed39bb39cf854d5250e95b1c1f94f4ed}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-       \field{labelnamesource}{author}
-@@ -243,7 +243,7 @@ my $kck4 = q|    \entry{caf8e34be07426ae7127c1b4829983c1}{inbook}{dataonly,useed
- 
- my $c1 = q|    \entry{c1}{book}{}
-       \field{sortinit}{3}
--      \field{sortinithash}{a4b52e5432884761f50fb9571273b93e}
-+      \field{sortinithash}{a37a8ef248a93c322189792c34fc68c9}
-       \field{related}{9ab62b5ef34a985438bfdf7ee0102229}
-     \endentry
- |;
-@@ -330,7 +330,7 @@ my $un1 = q|    \entry{kullback}{book}{}
-       \strng{authorfullhash}{34c5bbf9876c37127c3abe4e7d7a7198}
-       \field{extraname}{1}
-       \field{sortinit}{5}
--      \field{sortinithash}{3c19c3776b658b3558e9e2e4840c01e2}
-+      \field{sortinithash}{5dd416adbafacc8226114bc0202d5fdd}
-       \field{extradatescope}{year}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-@@ -364,7 +364,7 @@ my $un2 = q|    \entry{kullback:related}{book}{}
-       \strng{authorfullhash}{34c5bbf9876c37127c3abe4e7d7a7198}
-       \field{extraname}{2}
-       \field{sortinit}{6}
--      \field{sortinithash}{57e57fb8451e7fcfa45d1e069f6d3136}
-+      \field{sortinithash}{7851c86048328b027313775d8fbd2131}
-       \field{extradatescope}{year}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-diff --git a/t/remote-files.t b/t/remote-files.t
-index c747dcd..6f4cf4d 100644
---- a/t/remote-files.t
-+++ b/t/remote-files.t
-@@ -86,7 +86,7 @@ my $cu1 = q|    \entry{citeulike:8283461}{article}{}
-       \strng{authornamehash}{a700cc0bdce78f5a1f50ff6314ff6f2a}
-       \strng{authorfullhash}{094b095bbb7ac93fdd3e2eafdcec0cac}
-       \field{sortinit}{M}
--      \field{sortinithash}{cfd219b90152c06204fab207bc6c7cab}
-+      \field{sortinithash}{2e5c2f51f7fa2d957f3206819bf86dc3}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{year}
-       \field{labelnamesource}{author}
-@@ -133,7 +133,7 @@ my $dl1 = q|    \entry{AbdelbarH98}{article}{}
-       \strng{authornamehash}{bb887c5d0458bfb1f3f7e6afc8d1def4}
-       \strng{authorfullhash}{bb887c5d0458bfb1f3f7e6afc8d1def4}
-       \field{sortinit}{A}
--      \field{sortinithash}{d77c7cdd82ff690d4c3ef13216f92f0b}
-+      \field{sortinithash}{a3dcedd53b04d1adfd5ac303ecd5e6fa}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{year}
-       \field{labelnamesource}{author}
-diff --git a/t/set-dynamic.t b/t/set-dynamic.t
-index 9ab5fdd..0846f8a 100644
---- a/t/set-dynamic.t
-+++ b/t/set-dynamic.t
-@@ -51,7 +51,7 @@ my $out = $biber->get_output_obj;
- my $string1 = q|    \entry{DynSet}{set}{}
-       \set{Dynamic1,Dynamic2,Dynamic3}
-       \field{sortinit}{1}
--      \field{sortinithash}{2174f786c6195e7fe2ee1c229b416e29}
-+      \field{sortinithash}{50c6687d7fc80f50136d75228e3c59ba}
-     \endentry
- |;
- 
-@@ -71,7 +71,7 @@ my $string2 = q|    \entry{Dynamic1}{book}{}
-       \strng{authornamehash}{252caa7921a061ca92087a1a52f15b78}
-       \strng{authorfullhash}{252caa7921a061ca92087a1a52f15b78}
-       \field{sortinit}{8}
--      \field{sortinithash}{07edf88d4ea82509b9c4b4d13f41c452}
-+      \field{sortinithash}{1b24cab5087933ef0826a7cd3b99e994}
-       \field{labeldatesource}{year}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-@@ -98,7 +98,7 @@ my $string3 = q|    \entry{Dynamic2}{book}{}
-       \strng{authornamehash}{894a5fe6de820f5dcce84a65581667f4}
-       \strng{authorfullhash}{894a5fe6de820f5dcce84a65581667f4}
-       \field{sortinit}{9}
--      \field{sortinithash}{1dd72ab054147731c9d824b49aba0534}
-+      \field{sortinithash}{54047ffb55bdefa0694bbd554c1b11a0}
-       \field{labeldatesource}{year}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-@@ -124,7 +124,7 @@ my $string4 = q|    \entry{Dynamic3}{book}{}
-       \strng{authornamehash}{fc3cc97631ceaecdde2aee6cc60ab42b}
-       \strng{authorfullhash}{fc3cc97631ceaecdde2aee6cc60ab42b}
-       \field{sortinit}{1}
--      \field{sortinithash}{2174f786c6195e7fe2ee1c229b416e29}
-+      \field{sortinithash}{50c6687d7fc80f50136d75228e3c59ba}
-       \field{labeldatesource}{year}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-@@ -151,7 +151,7 @@ my $string5 = q|    \entry{Dynamic3}{book}{}
-       \strng{authornamehash}{fc3cc97631ceaecdde2aee6cc60ab42b}
-       \strng{authorfullhash}{fc3cc97631ceaecdde2aee6cc60ab42b}
-       \field{sortinit}{1}
--      \field{sortinithash}{2174f786c6195e7fe2ee1c229b416e29}
-+      \field{sortinithash}{50c6687d7fc80f50136d75228e3c59ba}
-       \field{labeldatesource}{year}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-diff --git a/t/set-legacy.t b/t/set-legacy.t
-index 4e56991..9d40acb 100644
---- a/t/set-legacy.t
-+++ b/t/set-legacy.t
-@@ -45,7 +45,7 @@ my $out = $biber->get_output_obj;
- my $string1 = q|    \entry{Elias1955}{set}{}
-       \set{Elias1955a,Elias1955b}
-       \field{sortinit}{1}
--      \field{sortinithash}{2174f786c6195e7fe2ee1c229b416e29}
-+      \field{sortinithash}{50c6687d7fc80f50136d75228e3c59ba}
-     \endentry
- |;
- 
-diff --git a/t/set-static.t b/t/set-static.t
-index 1e45d4d..a6cbe73 100644
---- a/t/set-static.t
-+++ b/t/set-static.t
-@@ -47,7 +47,7 @@ my $out = $biber->get_output_obj;
- my $string1 = q|    \entry{Static1}{set}{}
-       \set{Static2,Static4,Static3}
-       \field{sortinit}{B}
--      \field{sortinithash}{276475738cc058478c1677046f857703}
-+      \field{sortinithash}{8de16967003c7207dae369d874f1456e}
-       \field{annotation}{Some notes}
-     \endentry
- |;
-@@ -68,7 +68,7 @@ my $string2 = q|    \entry{Static2}{book}{}
-       \strng{authornamehash}{43874d80d7ce68027102819f16c47df1}
-       \strng{authorfullhash}{43874d80d7ce68027102819f16c47df1}
-       \field{sortinit}{B}
--      \field{sortinithash}{276475738cc058478c1677046f857703}
-+      \field{sortinithash}{8de16967003c7207dae369d874f1456e}
-       \field{labeldatesource}{year}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-@@ -94,7 +94,7 @@ my $string3 = q|    \entry{Static3}{book}{}
-       \strng{authornamehash}{22dafa5cd57bb5dd7f3e3bab98fd539c}
-       \strng{authorfullhash}{22dafa5cd57bb5dd7f3e3bab98fd539c}
-       \field{sortinit}{D}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-       \field{labeldatesource}{year}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-@@ -119,7 +119,7 @@ my $string4 = q|    \entry{Static4}{book}{}
-       \strng{authornamehash}{da80091c8cd89e5269bd55af1bd5d2fa}
-       \strng{authorfullhash}{da80091c8cd89e5269bd55af1bd5d2fa}
-       \field{sortinit}{C}
--      \field{sortinithash}{963e9d84a3da2344e8833203de5aed05}
-+      \field{sortinithash}{4c244ceae61406cdc0cc2ce1cb1ff703}
-       \field{labeldatesource}{year}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-@@ -145,7 +145,7 @@ my $string5 = q|    \entry{Static2}{book}{}
-       \strng{authornamehash}{43874d80d7ce68027102819f16c47df1}
-       \strng{authorfullhash}{43874d80d7ce68027102819f16c47df1}
-       \field{sortinit}{1}
--      \field{sortinithash}{2174f786c6195e7fe2ee1c229b416e29}
-+      \field{sortinithash}{50c6687d7fc80f50136d75228e3c59ba}
-       \field{labeldatesource}{year}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-diff --git a/t/skips.t b/t/skips.t
-index 7c80d39..caa835f 100644
---- a/t/skips.t
-+++ b/t/skips.t
-@@ -50,7 +50,7 @@ my $set1 = q|    \entry{seta}{set}{}
-       \field{labelalpha}{Doe10}
-       \field{extraalpha}{1}
-       \field{sortinit}{D}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-     \endentry
- |;
- 
-@@ -70,7 +70,7 @@ my $set2 = q|    \entry{set:membera}{book}{}
-       \strng{authornamehash}{bd051a2f7a5f377e3a62581b0e0f8577}
-       \strng{authorfullhash}{bd051a2f7a5f377e3a62581b0e0f8577}
-       \field{sortinit}{D}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-       \field{labeldatesource}{}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-@@ -97,7 +97,7 @@ my $set3 = q|    \entry{set:memberb}{book}{}
-       \strng{authornamehash}{bd051a2f7a5f377e3a62581b0e0f8577}
-       \strng{authorfullhash}{bd051a2f7a5f377e3a62581b0e0f8577}
-       \field{sortinit}{D}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-       \field{labeldatesource}{}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-@@ -123,7 +123,7 @@ my $set4 = q|    \entry{set:memberc}{book}{}
-       \strng{authornamehash}{bd051a2f7a5f377e3a62581b0e0f8577}
-       \strng{authorfullhash}{bd051a2f7a5f377e3a62581b0e0f8577}
-       \field{sortinit}{D}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-       \field{labeldatesource}{}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-@@ -150,7 +150,7 @@ my $noset1 = q|    \entry{noseta}{book}{}
-       \field{extraname}{3}
-       \field{labelalpha}{Doe10}
-       \field{sortinit}{D}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-       \field{extradate}{2}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-@@ -180,7 +180,7 @@ my $noset2 = q|    \entry{nosetb}{book}{}
-       \field{extraname}{4}
-       \field{labelalpha}{Doe10}
-       \field{sortinit}{D}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-       \field{extradate}{3}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-@@ -210,7 +210,7 @@ my $noset3 = q|    \entry{nosetc}{book}{}
-       \field{extraname}{5}
-       \field{labelalpha}{Doe10}
-       \field{sortinit}{D}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-       \field{extradate}{4}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-@@ -244,7 +244,7 @@ my $sk4 = q|    \entry{skip4}{article}{dataonly}
-       \strng{authornamehash}{bd051a2f7a5f377e3a62581b0e0f8577}
-       \strng{authorfullhash}{bd051a2f7a5f377e3a62581b0e0f8577}
-       \field{sortinit}{D}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-       \field{labeldatesource}{year}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-diff --git a/t/sort-complex.t b/t/sort-complex.t
-index aa3e564..d52db08 100644
---- a/t/sort-complex.t
-+++ b/t/sort-complex.t
-@@ -123,7 +123,7 @@ my $l4 = q|    \entry{L4}{book}{}
-       \field{extraname}{2}
-       \field{labelalpha}{Doe\textbf{+}95}
-       \field{sortinit}{D}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-       \field{extraalpha}{2}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-@@ -155,7 +155,7 @@ my $l1 = q|    \entry{L1}{book}{}
-       \field{extraname}{1}
-       \field{labelalpha}{Doe95}
-       \field{sortinit}{D}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-       \field{extraalpha}{1}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-@@ -187,7 +187,7 @@ my $l2 = q|    \entry{L2}{book}{}
-       \field{extraname}{3}
-       \field{labelalpha}{Doe95}
-       \field{sortinit}{D}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-       \field{extraalpha}{3}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-@@ -219,7 +219,7 @@ my $l3 = q|    \entry{L3}{book}{}
-       \field{extraname}{2}
-       \field{labelalpha}{Doe95}
-       \field{sortinit}{D}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-       \field{extraalpha}{2}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-@@ -253,7 +253,7 @@ my $l5 = q|    \entry{L5}{book}{}
-       \field{extraname}{1}
-       \field{labelalpha}{Doe\textbf{+}95}
-       \field{sortinit}{D}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-       \field{extraalpha}{1}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-diff --git a/t/tdata/full-bbl.bbl b/t/tdata/full-bbl.bbl
-index 4f168de..07c2fab 100644
---- a/t/tdata/full-bbl.bbl
-+++ b/t/tdata/full-bbl.bbl
-@@ -36,7 +36,7 @@
-       \strng{authorfullhash}{bd051a2f7a5f377e3a62581b0e0f8577}
-       \field{labelalpha}{\emph{A}}
-       \field{sortinit}{A}
--      \field{sortinithash}{d77c7cdd82ff690d4c3ef13216f92f0b}
-+      \field{sortinithash}{a3dcedd53b04d1adfd5ac303ecd5e6fa}
-       \true{singletitle}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-@@ -63,7 +63,7 @@
-       \strng{authorfullhash}{bd051a2f7a5f377e3a62581b0e0f8577}
-       \field{labelalpha}{\emph{A}}
-       \field{sortinit}{A}
--      \field{sortinithash}{d77c7cdd82ff690d4c3ef13216f92f0b}
-+      \field{sortinithash}{a3dcedd53b04d1adfd5ac303ecd5e6fa}
-       \true{singletitle}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-@@ -90,7 +90,7 @@
-       \strng{authorfullhash}{bd051a2f7a5f377e3a62581b0e0f8577}
-       \field{labelalpha}{\emph{A}}
-       \field{sortinit}{D}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-       \true{singletitle}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-diff --git a/t/tdata/full-bblxml.bblxml b/t/tdata/full-bblxml.bblxml
-index 9eea7d1..a39a787 100644
---- a/t/tdata/full-bblxml.bblxml
-+++ b/t/tdata/full-bblxml.bblxml
-@@ -47,7 +47,7 @@
-         <bbl:field name="authorbibnamehash">860705eb8ffac6e40507746c7ede79ca</bbl:field>
-         <bbl:field name="labelalpha">Aks\textbf{+}06</bbl:field>
-         <bbl:field name="sortinit">A</bbl:field>
--        <bbl:field name="sortinithash">d77c7cdd82ff690d4c3ef13216f92f0b</bbl:field>
-+        <bbl:field name="sortinithash">a3dcedd53b04d1adfd5ac303ecd5e6fa</bbl:field>
-         <bbl:field name="labelnamesource">author</bbl:field>
-         <bbl:field name="labeltitlesource">title</bbl:field>
-         <bbl:field name="indextitle">Effect of immobilization on catalytic characteristics</bbl:field>
-@@ -79,7 +79,7 @@
-         <bbl:field name="authorbibnamehash">9717d2d959a4b18727868ca7928c34b4</bbl:field>
-         <bbl:field name="labelalpha">Ang02</bbl:field>
-         <bbl:field name="sortinit">A</bbl:field>
--        <bbl:field name="sortinithash">d77c7cdd82ff690d4c3ef13216f92f0b</bbl:field>
-+        <bbl:field name="sortinithash">a3dcedd53b04d1adfd5ac303ecd5e6fa</bbl:field>
-         <bbl:field name="labelnamesource">author</bbl:field>
-         <bbl:field name="labeltitlesource">shorttitle</bbl:field>
-         <bbl:field name="annotation">A German article in a French journal. Apart from that, a typical article entry. Note the indextitle field</bbl:field>
-@@ -109,7 +109,7 @@
-         </bbl:set>
-         <bbl:field name="labelalpha">Gla61</bbl:field>
-         <bbl:field name="sortinit">G</bbl:field>
--        <bbl:field name="sortinithash">5e8d2bf9d38de41b1528bd307546008f</bbl:field>
-+        <bbl:field name="sortinithash">62eb2aa29549e4fdbd3cb154ec5711cb</bbl:field>
-         <bbl:field name="annotation">A set entry with three members discussing the standard model of particle physics.</bbl:field>
-       </bbl:entry>
-       <bbl:entry key="stdmodel:glashow" type="article">
-@@ -129,7 +129,7 @@
-         <bbl:field name="authorfullhash">eb3f242602109f5bdbeb41fdd990fcc0</bbl:field>
-         <bbl:field name="authorbibnamehash">eb3f242602109f5bdbeb41fdd990fcc0</bbl:field>
-         <bbl:field name="sortinit">G</bbl:field>
--        <bbl:field name="sortinithash">5e8d2bf9d38de41b1528bd307546008f</bbl:field>
-+        <bbl:field name="sortinithash">62eb2aa29549e4fdbd3cb154ec5711cb</bbl:field>
-         <bbl:field name="labelnamesource">author</bbl:field>
-         <bbl:field name="labeltitlesource">title</bbl:field>
-         <bbl:field name="journaltitle">Nucl. Phys.</bbl:field>
-@@ -168,7 +168,7 @@
-         <bbl:field name="extraname">1</bbl:field>
-         <bbl:field name="labelalpha">Knu86</bbl:field>
-         <bbl:field name="sortinit">K</bbl:field>
--        <bbl:field name="sortinithash">9fd838a31ba64d981e8f44562bd33f89</bbl:field>
-+        <bbl:field name="sortinithash">d3edc18d54b9438a72c24c925bfb38f4</bbl:field>
-         <bbl:field name="extraalpha">1</bbl:field>
-         <bbl:field name="labelnamesource">author</bbl:field>
-         <bbl:field name="labeltitlesource">shorttitle</bbl:field>
-@@ -207,7 +207,7 @@
-         <bbl:field name="extraname">2</bbl:field>
-         <bbl:field name="labelalpha">Knu86</bbl:field>
-         <bbl:field name="sortinit">K</bbl:field>
--        <bbl:field name="sortinithash">9fd838a31ba64d981e8f44562bd33f89</bbl:field>
-+        <bbl:field name="sortinithash">d3edc18d54b9438a72c24c925bfb38f4</bbl:field>
-         <bbl:field name="extraalpha">2</bbl:field>
-         <bbl:field name="labelnamesource">author</bbl:field>
-         <bbl:field name="labeltitlesource">shorttitle</bbl:field>
-@@ -236,7 +236,7 @@
-         <bbl:field name="authorbibnamehash">d52f05e0199eae563725b4165f4b2520</bbl:field>
-         <bbl:field name="labelalpha">Ree58</bbl:field>
-         <bbl:field name="sortinit">R</bbl:field>
--        <bbl:field name="sortinithash">da6b42bd3ab22fee61abed031ee405f7</bbl:field>
-+        <bbl:field name="sortinithash">b9c68a358aea118dfa887b6e902414a7</bbl:field>
-         <bbl:field name="labelnamesource">author</bbl:field>
-         <bbl:field name="labeltitlesource">title</bbl:field>
-         <bbl:field name="annotation">An article entry with a series and a volume field. Note the format of the series. If the value of the series field is an integer, this number is printed as an ordinal and the string *series is appended automatically</bbl:field>
-@@ -286,7 +286,7 @@
-         <bbl:field name="editorfullhash">d0ec890e59163c24c111a08d2a4be982</bbl:field>
-         <bbl:field name="editorbibnamehash">d0ec890e59163c24c111a08d2a4be982</bbl:field>
-         <bbl:field name="sortinit">S</bbl:field>
--        <bbl:field name="sortinithash">322b1d5276f2f6c1bccdcd15920dbee6</bbl:field>
-+        <bbl:field name="sortinithash">c319cff79d99c853d775f88277d4e45f</bbl:field>
-         <bbl:field name="labelnamesource">author</bbl:field>
-         <bbl:field name="labeltitlesource">title</bbl:field>
-         <bbl:field name="booksubtitle">Relativistic groups and analyticity</bbl:field>
-@@ -317,7 +317,7 @@
-         <bbl:field name="authorbibnamehash">93f17724cbd884231ef39a73755ef5bb</bbl:field>
-         <bbl:field name="labelalpha">Sho91</bbl:field>
-         <bbl:field name="sortinit">S</bbl:field>
--        <bbl:field name="sortinithash">322b1d5276f2f6c1bccdcd15920dbee6</bbl:field>
-+        <bbl:field name="sortinithash">c319cff79d99c853d775f88277d4e45f</bbl:field>
-         <bbl:field name="labelnamesource">author</bbl:field>
-         <bbl:field name="labeltitlesource">title</bbl:field>
-         <bbl:field name="annotation">An article entry with series, volume, and number fields. Note the format of the series which is a localization key</bbl:field>
-@@ -353,7 +353,7 @@
-         <bbl:field name="authorfullhash">15e144c72b0b9d10db00ddc6d37a19e6</bbl:field>
-         <bbl:field name="authorbibnamehash">15e144c72b0b9d10db00ddc6d37a19e6</bbl:field>
-         <bbl:field name="sortinit">W</bbl:field>
--        <bbl:field name="sortinithash">ecb89ff85896a47dc313960773ac311d</bbl:field>
-+        <bbl:field name="sortinithash">1af34bd8c148ffb32de1494636b49713</bbl:field>
-         <bbl:field name="labelnamesource">author</bbl:field>
-         <bbl:field name="labeltitlesource">title</bbl:field>
-         <bbl:field name="journaltitle">Phys. Rev. Lett.</bbl:field>
-@@ -411,7 +411,7 @@
-         <bbl:field name="authorbibnamehash">860705eb8ffac6e40507746c7ede79ca</bbl:field>
-         <bbl:field name="labelalpha">Aks\textbf{+}06</bbl:field>
-         <bbl:field name="sortinit">A</bbl:field>
--        <bbl:field name="sortinithash">d77c7cdd82ff690d4c3ef13216f92f0b</bbl:field>
-+        <bbl:field name="sortinithash">a3dcedd53b04d1adfd5ac303ecd5e6fa</bbl:field>
-         <bbl:field name="labelnamesource">author</bbl:field>
-         <bbl:field name="labeltitlesource">title</bbl:field>
-         <bbl:field name="indextitle">Effect of immobilization on catalytic characteristics</bbl:field>
-@@ -443,7 +443,7 @@
-         <bbl:field name="authorbibnamehash">9717d2d959a4b18727868ca7928c34b4</bbl:field>
-         <bbl:field name="labelalpha">Ang02</bbl:field>
-         <bbl:field name="sortinit">A</bbl:field>
--        <bbl:field name="sortinithash">d77c7cdd82ff690d4c3ef13216f92f0b</bbl:field>
-+        <bbl:field name="sortinithash">a3dcedd53b04d1adfd5ac303ecd5e6fa</bbl:field>
-         <bbl:field name="labelnamesource">author</bbl:field>
-         <bbl:field name="labeltitlesource">shorttitle</bbl:field>
-         <bbl:field name="annotation">A German article in a French journal. Apart from that, a typical article entry. Note the indextitle field</bbl:field>
-@@ -473,7 +473,7 @@
-         </bbl:set>
-         <bbl:field name="labelalpha">Gla61</bbl:field>
-         <bbl:field name="sortinit">G</bbl:field>
--        <bbl:field name="sortinithash">5e8d2bf9d38de41b1528bd307546008f</bbl:field>
-+        <bbl:field name="sortinithash">62eb2aa29549e4fdbd3cb154ec5711cb</bbl:field>
-         <bbl:field name="annotation">A set entry with three members discussing the standard model of particle physics.</bbl:field>
-       </bbl:entry>
-       <bbl:entry key="stdmodel:glashow" type="article">
-@@ -493,7 +493,7 @@
-         <bbl:field name="authorfullhash">eb3f242602109f5bdbeb41fdd990fcc0</bbl:field>
-         <bbl:field name="authorbibnamehash">eb3f242602109f5bdbeb41fdd990fcc0</bbl:field>
-         <bbl:field name="sortinit">G</bbl:field>
--        <bbl:field name="sortinithash">5e8d2bf9d38de41b1528bd307546008f</bbl:field>
-+        <bbl:field name="sortinithash">62eb2aa29549e4fdbd3cb154ec5711cb</bbl:field>
-         <bbl:field name="labelnamesource">author</bbl:field>
-         <bbl:field name="labeltitlesource">title</bbl:field>
-         <bbl:field name="journaltitle">Nucl. Phys.</bbl:field>
-@@ -532,7 +532,7 @@
-         <bbl:field name="extraname">1</bbl:field>
-         <bbl:field name="labelalpha">Knu86</bbl:field>
-         <bbl:field name="sortinit">K</bbl:field>
--        <bbl:field name="sortinithash">9fd838a31ba64d981e8f44562bd33f89</bbl:field>
-+        <bbl:field name="sortinithash">d3edc18d54b9438a72c24c925bfb38f4</bbl:field>
-         <bbl:field name="extraalpha">1</bbl:field>
-         <bbl:field name="labelnamesource">author</bbl:field>
-         <bbl:field name="labeltitlesource">shorttitle</bbl:field>
-@@ -571,7 +571,7 @@
-         <bbl:field name="extraname">2</bbl:field>
-         <bbl:field name="labelalpha">Knu86</bbl:field>
-         <bbl:field name="sortinit">K</bbl:field>
--        <bbl:field name="sortinithash">9fd838a31ba64d981e8f44562bd33f89</bbl:field>
-+        <bbl:field name="sortinithash">d3edc18d54b9438a72c24c925bfb38f4</bbl:field>
-         <bbl:field name="extraalpha">2</bbl:field>
-         <bbl:field name="labelnamesource">author</bbl:field>
-         <bbl:field name="labeltitlesource">shorttitle</bbl:field>
-@@ -600,7 +600,7 @@
-         <bbl:field name="authorbibnamehash">d52f05e0199eae563725b4165f4b2520</bbl:field>
-         <bbl:field name="labelalpha">Ree58</bbl:field>
-         <bbl:field name="sortinit">R</bbl:field>
--        <bbl:field name="sortinithash">da6b42bd3ab22fee61abed031ee405f7</bbl:field>
-+        <bbl:field name="sortinithash">b9c68a358aea118dfa887b6e902414a7</bbl:field>
-         <bbl:field name="labelnamesource">author</bbl:field>
-         <bbl:field name="labeltitlesource">title</bbl:field>
-         <bbl:field name="annotation">An article entry with a series and a volume field. Note the format of the series. If the value of the series field is an integer, this number is printed as an ordinal and the string *series is appended automatically</bbl:field>
-@@ -650,7 +650,7 @@
-         <bbl:field name="editorfullhash">d0ec890e59163c24c111a08d2a4be982</bbl:field>
-         <bbl:field name="editorbibnamehash">d0ec890e59163c24c111a08d2a4be982</bbl:field>
-         <bbl:field name="sortinit">S</bbl:field>
--        <bbl:field name="sortinithash">322b1d5276f2f6c1bccdcd15920dbee6</bbl:field>
-+        <bbl:field name="sortinithash">c319cff79d99c853d775f88277d4e45f</bbl:field>
-         <bbl:field name="labelnamesource">author</bbl:field>
-         <bbl:field name="labeltitlesource">title</bbl:field>
-         <bbl:field name="booksubtitle">Relativistic groups and analyticity</bbl:field>
-@@ -681,7 +681,7 @@
-         <bbl:field name="authorbibnamehash">93f17724cbd884231ef39a73755ef5bb</bbl:field>
-         <bbl:field name="labelalpha">Sho91</bbl:field>
-         <bbl:field name="sortinit">S</bbl:field>
--        <bbl:field name="sortinithash">322b1d5276f2f6c1bccdcd15920dbee6</bbl:field>
-+        <bbl:field name="sortinithash">c319cff79d99c853d775f88277d4e45f</bbl:field>
-         <bbl:field name="labelnamesource">author</bbl:field>
-         <bbl:field name="labeltitlesource">title</bbl:field>
-         <bbl:field name="annotation">An article entry with series, volume, and number fields. Note the format of the series which is a localization key</bbl:field>
-@@ -717,7 +717,7 @@
-         <bbl:field name="authorfullhash">15e144c72b0b9d10db00ddc6d37a19e6</bbl:field>
-         <bbl:field name="authorbibnamehash">15e144c72b0b9d10db00ddc6d37a19e6</bbl:field>
-         <bbl:field name="sortinit">W</bbl:field>
--        <bbl:field name="sortinithash">ecb89ff85896a47dc313960773ac311d</bbl:field>
-+        <bbl:field name="sortinithash">1af34bd8c148ffb32de1494636b49713</bbl:field>
-         <bbl:field name="labelnamesource">author</bbl:field>
-         <bbl:field name="labeltitlesource">title</bbl:field>
-         <bbl:field name="journaltitle">Phys. Rev. Lett.</bbl:field>
-diff --git a/t/tdata/remote-files.bcf b/t/tdata/remote-files.bcf
-index c2d784b..a2a1842 100644
---- a/t/tdata/remote-files.bcf
-+++ b/t/tdata/remote-files.bcf
-@@ -1853,12 +1853,12 @@
-     <bcf:datasource type="file" datatype="bibtex">http://www.citeulike.org/bibtex/group/8082</bcf:datasource>
-     <bcf:datasource type="file" datatype="bibtex">http://people.cs.uu.nl/hansb/graphs-bib/definitions.bib</bcf:datasource>
-     <bcf:datasource type="file" datatype="bibtex">http://people.cs.uu.nl/hansb/graphs-bib/papers.bib</bcf:datasource>
--    <bcf:datasource type="file" datatype="bibtex">https://api.zotero.org/groups/9097/items/II22KQ7D?format=bibtex&amp;limit=1</bcf:datasource>
-+    <bcf:datasource type="file" datatype="bibtex">https://api.zotero.org/groups/9097/items/8VITAT46?format=bibtex&amp;limit=1</bcf:datasource>
-   </bcf:bibdata>
-   <bcf:section number="0">
-     <bcf:citekey order="1">citeulike:8283461</bcf:citekey>
-     <bcf:citekey order="2">AbdelbarH98</bcf:citekey>
--    <bcf:citekey order="3">merleau-ponty_philosophe_2010</bcf:citekey>
-+    <bcf:citekey order="3">crossley_politics_1994</bcf:citekey>
-   </bcf:section>
-   <!-- SORTING TEMPLATES -->
-   <bcf:sortingtemplate name="nty">
-diff --git a/t/uniqueness-nameparts.t b/t/uniqueness-nameparts.t
-index beb2e39..1fb65a8 100644
---- a/t/uniqueness-nameparts.t
-+++ b/t/uniqueness-nameparts.t
-@@ -81,7 +81,7 @@ my $un1 = q|    \entry{un1}{article}{}
-       \strng{authorfullhash}{329d8f9192ea3349d700160c9ddb505d}
-       \field{labelalpha}{SmiJohSim}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -106,7 +106,7 @@ my $un2 = q|    \entry{un2}{article}{}
-       \strng{authorfullhash}{7551114aede4ef69e4b3683039801706}
-       \field{labelalpha}{SmiJohAla}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -131,7 +131,7 @@ my $un3 = q|    \entry{un3}{article}{}
-       \strng{authorfullhash}{401aebda288799a7c757526242d8c9fc}
-       \field{labelalpha}{SmiJohArt}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -156,7 +156,7 @@ my $un4 = q|    \entry{un4}{article}{}
-       \strng{authorfullhash}{f6038a264619efefd49c7daac56424ca}
-       \field{labelalpha}{SmiAlaSim}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -181,7 +181,7 @@ my $un1a = q|    \entry{un1}{article}{}
-       \strng{authorfullhash}{329d8f9192ea3349d700160c9ddb505d}
-       \field{labelalpha}{SmiJohSim}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -206,7 +206,7 @@ my $un2a = q|    \entry{un2}{article}{}
-       \strng{authorfullhash}{7551114aede4ef69e4b3683039801706}
-       \field{labelalpha}{SmiJohAla}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -231,7 +231,7 @@ my $un3a = q|    \entry{un3}{article}{}
-       \strng{authorfullhash}{401aebda288799a7c757526242d8c9fc}
-       \field{labelalpha}{SmiJohArt}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -257,7 +257,7 @@ my $un4a = q|    \entry{un4}{article}{}
-       \strng{authorfullhash}{f6038a264619efefd49c7daac56424ca}
-       \field{labelalpha}{SmiAlaSim}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -285,7 +285,7 @@ my $un1b = q|    \entry{un1}{article}{}
-       \field{extraname}{5}
-       \field{labelalpha}{SmiJohSim}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{extradate}{5}
-       \field{labelnamesource}{author}
-     \endentry
-@@ -311,7 +311,7 @@ my $un2b = q|    \entry{un2}{article}{}
-       \strng{authorfullhash}{7551114aede4ef69e4b3683039801706}
-       \field{labelalpha}{SmiJohAla}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -336,7 +336,7 @@ my $un3b = q|    \entry{un3}{article}{}
-       \strng{authorfullhash}{401aebda288799a7c757526242d8c9fc}
-       \field{labelalpha}{SmiJohArt}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -364,7 +364,7 @@ my $un4b = q|    \entry{un4}{article}{}
-       \field{extraname}{1}
-       \field{labelalpha}{SmiAlaSim}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{extradate}{1}
-       \field{labelnamesource}{author}
-     \endentry
-@@ -393,7 +393,7 @@ my $un5 = q|    \entry{un5}{article}{uniquenametemplatename=test3}
-       \field{extraname}{2}
-       \field{labelalpha}{SmiArtSim}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{extradate}{2}
-       \field{labelnamesource}{author}
-     \endentry
-@@ -422,7 +422,7 @@ my $un6 = q|    \entry{un6}{article}{}
-       \field{extraname}{3}
-       \field{labelalpha}{SmiArtSmy}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{extradate}{3}
-       \field{labelnamesource}{author}
-     \\endentry
-@@ -451,7 +451,7 @@ my $un7 = q|    \entry{un7}{article}{}
-       \field{extraname}{4}
-       \field{labelalpha}{SmiArtSme}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{extradate}{4}
-       \field{labelnamesource}{author}
-     \endentry
-diff --git a/t/xdata.t b/t/xdata.t
-index 7411b1d..73dcb8b 100644
---- a/t/xdata.t
-+++ b/t/xdata.t
-@@ -75,7 +75,7 @@ my $xd1 = q|    \entry{xd1}{book}{}
-       \strng{authorfullhash}{51db4bfd331cba22959ce2d224c517cd}
-       \field{extraname}{2}
-       \field{sortinit}{E}
--      \field{sortinithash}{f615fb9c6fba11c6f962fb3fd599810e}
-+      \field{sortinithash}{c554bd1a0b76ea92b9f105fe36d9c7b0}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-       \field{labelnamesource}{author}
-@@ -107,7 +107,7 @@ my $xd2 = q|    \entry{xd2}{book}{}
-       \strng{authornamehash}{68539e0ce4922cc4957c6cabf35e6fc8}
-       \strng{authorfullhash}{68539e0ce4922cc4957c6cabf35e6fc8}
-       \field{sortinit}{P}
--      \field{sortinithash}{8d51b3d5b78d75b54308d706b9bbe285}
-+      \field{sortinithash}{bb5b15f2db90f7aef79bb9e83defefcb}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-       \field{labelnamesource}{author}
diff --git a/gnu/packages/patches/bind-re-add-attr-constructor-priority.patch b/gnu/packages/patches/bind-re-add-attr-constructor-priority.patch
new file mode 100644
index 0000000000..33e4f183f6
--- /dev/null
+++ b/gnu/packages/patches/bind-re-add-attr-constructor-priority.patch
@@ -0,0 +1,57 @@
+From 6361de07a35f2e9dc1d7201d6b26ca31da93ee69 Mon Sep 17 00:00:00 2001
+From: Tobias Geerinckx-Rice <me@tobias.gr>
+Date: Thu, 9 Dec 2021 01:07:32 +0100
+Subject: [PATCH] Revert "Remove priority from attribute
+ constructor/destructor"
+
+This reverts commit 0340df46ec5897636dd071bc8b5c4272cfa7d7be.  It works
+around an irrelevant operating system and breaks compilation on Guix:
+
+mem.c:873: fatal error: RUNTIME_CHECK(((pthread_mutex_lock(((&contextslock))) == 0) ? 0 : 34) == 0) failed
+/gnu/store/…-bash-minimal-5.0.16/bin/bash: line 1: 13768 Aborted                 ./${fuzzer}
+
+Let's simply revert it for now---there are securities at stake!
+---
+ lib/isc/include/isc/util.h | 8 ++++----
+ lib/isc/lib.c              | 4 ++--
+ 2 files changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/lib/isc/include/isc/util.h b/lib/isc/include/isc/util.h
+index f0f7f85fa4..64c26587ac 100644
+--- a/lib/isc/include/isc/util.h
++++ b/lib/isc/include/isc/util.h
+@@ -49,11 +49,11 @@
+ #endif /* __GNUC__ */
+ 
+ #if HAVE_FUNC_ATTRIBUTE_CONSTRUCTOR && HAVE_FUNC_ATTRIBUTE_DESTRUCTOR
+-#define ISC_CONSTRUCTOR __attribute__((constructor))
+-#define ISC_DESTRUCTOR	__attribute__((destructor))
++#define ISC_CONSTRUCTOR(priority) __attribute__((constructor(priority)))
++#define ISC_DESTRUCTOR(priority)  __attribute__((destructor(priority)))
+ #elif WIN32
+-#define ISC_CONSTRUCTOR
+-#define ISC_DESTRUCTOR
++#define ISC_CONSTRUCTOR(priority)
++#define ISC_DESTRUCTOR(priority)
+ #endif
+ 
+ /*%
+diff --git a/lib/isc/lib.c b/lib/isc/lib.c
+index f3576b2659..2a167fec21 100644
+--- a/lib/isc/lib.c
++++ b/lib/isc/lib.c
+@@ -35,9 +35,9 @@ isc_lib_register(void) {
+ }
+ 
+ void
+-isc__initialize(void) ISC_CONSTRUCTOR;
++isc__initialize(void) ISC_CONSTRUCTOR(101);
+ void
+-isc__shutdown(void) ISC_DESTRUCTOR;
++isc__shutdown(void) ISC_DESTRUCTOR(101);
+ 
+ void
+ isc__initialize(void) {
+-- 
+2.34.0
+
diff --git a/gnu/packages/patches/binutils-2.37-file-descriptor-leak.patch b/gnu/packages/patches/binutils-2.37-file-descriptor-leak.patch
new file mode 100644
index 0000000000..1fd3d3d9b7
--- /dev/null
+++ b/gnu/packages/patches/binutils-2.37-file-descriptor-leak.patch
@@ -0,0 +1,231 @@
+From 1c611b40e6bfc8029bff7696814330b5bc0ee5c0 Mon Sep 17 00:00:00 2001
+From: "H.J. Lu" <hjl.tools@gmail.com>
+Date: Mon, 26 Jul 2021 05:59:55 -0700
+Subject: [PATCH] bfd: Close the file descriptor if there is no archive fd
+
+Close the file descriptor if there is no archive plugin file descriptor
+to avoid running out of file descriptors on thin archives with many
+archive members.
+
+bfd/
+
+	PR ld/28138
+	* plugin.c (bfd_plugin_close_file_descriptor): Close the file
+	descriptor there is no archive plugin file descriptor.
+
+ld/
+
+	PR ld/28138
+	* testsuite/ld-plugin/lto.exp: Run tmpdir/pr28138 only for
+	native build.
+
+	PR ld/28138
+	* testsuite/ld-plugin/lto.exp: Run ld/28138 tests.
+	* testsuite/ld-plugin/pr28138.c: New file.
+	* testsuite/ld-plugin/pr28138-1.c: Likewise.
+	* testsuite/ld-plugin/pr28138-2.c: Likewise.
+	* testsuite/ld-plugin/pr28138-3.c: Likewise.
+	* testsuite/ld-plugin/pr28138-4.c: Likewise.
+	* testsuite/ld-plugin/pr28138-5.c: Likewise.
+	* testsuite/ld-plugin/pr28138-6.c: Likewise.
+	* testsuite/ld-plugin/pr28138-7.c: Likewise.
+
+(cherry picked from commit 5a98fb7513b559e20dfebdbaa2a471afda3b4742)
+(cherry picked from commit 7dc37e1e1209c80e0bab784df6b6bac335e836f2)
+---
+ bfd/plugin.c                       |  8 +++++++
+ ld/testsuite/ld-plugin/lto.exp     | 34 ++++++++++++++++++++++++++++++
+ ld/testsuite/ld-plugin/pr28138-1.c |  6 ++++++
+ ld/testsuite/ld-plugin/pr28138-2.c |  6 ++++++
+ ld/testsuite/ld-plugin/pr28138-3.c |  6 ++++++
+ ld/testsuite/ld-plugin/pr28138-4.c |  6 ++++++
+ ld/testsuite/ld-plugin/pr28138-5.c |  6 ++++++
+ ld/testsuite/ld-plugin/pr28138-6.c |  6 ++++++
+ ld/testsuite/ld-plugin/pr28138-7.c |  6 ++++++
+ ld/testsuite/ld-plugin/pr28138.c   | 20 ++++++++++++++++++
+ 10 files changed, 104 insertions(+)
+ create mode 100644 ld/testsuite/ld-plugin/pr28138-1.c
+ create mode 100644 ld/testsuite/ld-plugin/pr28138-2.c
+ create mode 100644 ld/testsuite/ld-plugin/pr28138-3.c
+ create mode 100644 ld/testsuite/ld-plugin/pr28138-4.c
+ create mode 100644 ld/testsuite/ld-plugin/pr28138-5.c
+ create mode 100644 ld/testsuite/ld-plugin/pr28138-6.c
+ create mode 100644 ld/testsuite/ld-plugin/pr28138-7.c
+ create mode 100644 ld/testsuite/ld-plugin/pr28138.c
+
+diff --git a/bfd/plugin.c b/bfd/plugin.c
+index 6cfa2b66470..3bab8febe88 100644
+--- a/bfd/plugin.c
++++ b/bfd/plugin.c
+@@ -291,6 +291,14 @@ bfd_plugin_close_file_descriptor (bfd *abfd, int fd)
+ 	     && !bfd_is_thin_archive (abfd->my_archive))
+ 	abfd = abfd->my_archive;
+ 
++      /* Close the file descriptor if there is no archive plugin file
++	 descriptor.  */
++      if (abfd->archive_plugin_fd == -1)
++	{
++	  close (fd);
++	  return;
++	}
++
+       abfd->archive_plugin_fd_open_count--;
+       /* Dup the archive plugin file descriptor for later use, which
+ 	 will be closed by _bfd_archive_close_and_cleanup.  */
+diff --git a/ld/testsuite/ld-plugin/lto.exp b/ld/testsuite/ld-plugin/lto.exp
+index def69e43ab3..999d911ce6a 100644
+--- a/ld/testsuite/ld-plugin/lto.exp
++++ b/ld/testsuite/ld-plugin/lto.exp
+@@ -687,6 +687,40 @@ if { [is_elf_format] && [check_lto_shared_available] } {
+     }
+ }
+ 
++run_cc_link_tests [list \
++    [list \
++	"Build pr28138.a" \
++	"-T" "" \
++	{pr28138-1.c pr28138-2.c pr28138-3.c pr28138-4.c pr28138-5.c \
++	 pr28138-6.c pr28138-7.c} {} "pr28138.a" \
++    ] \
++    [list \
++	"Build pr28138.o" \
++	"" "" \
++	{pr28138.c} {} \
++    ] \
++]
++
++set exec_output [run_host_cmd "sh" \
++			      "-c \"ulimit -n 20; \
++			      $CC -Btmpdir/ld -o tmpdir/pr28138 \
++			      tmpdir/pr28138.o tmpdir/pr28138.a\""]
++set exec_output [prune_warnings $exec_output]
++if [string match "" $exec_output] then {
++    if { [isnative] } {
++	set exec_output [run_host_cmd "tmpdir/pr28138" ""]
++	if [string match "PASS" $exec_output] then {
++	    pass "PR ld/28138"
++	} else {
++	    fail "PR ld/28138"
++	}
++    } else {
++	pass "PR ld/28138"
++    }
++} else {
++    fail "PR ld/28138"
++}
++
+ set testname "Build liblto-11.a"
+ remote_file host delete "tmpdir/liblto-11.a"
+ set catch_output [run_host_cmd "$ar" "rc $plug_opt tmpdir/liblto-11.a tmpdir/lto-11a.o tmpdir/lto-11b.o tmpdir/lto-11c.o"]
+diff --git a/ld/testsuite/ld-plugin/pr28138-1.c b/ld/testsuite/ld-plugin/pr28138-1.c
+new file mode 100644
+index 00000000000..51d119e1642
+--- /dev/null
++++ b/ld/testsuite/ld-plugin/pr28138-1.c
+@@ -0,0 +1,6 @@
++extern int a0(void);
++int
++a1(void)
++{
++  return 1 + a0();
++}
+diff --git a/ld/testsuite/ld-plugin/pr28138-2.c b/ld/testsuite/ld-plugin/pr28138-2.c
+new file mode 100644
+index 00000000000..1120cd797e9
+--- /dev/null
++++ b/ld/testsuite/ld-plugin/pr28138-2.c
+@@ -0,0 +1,6 @@
++extern int a1(void);
++int
++a2(void)
++{
++  return 1 + a1();
++}
+diff --git a/ld/testsuite/ld-plugin/pr28138-3.c b/ld/testsuite/ld-plugin/pr28138-3.c
+new file mode 100644
+index 00000000000..ec464947ee6
+--- /dev/null
++++ b/ld/testsuite/ld-plugin/pr28138-3.c
+@@ -0,0 +1,6 @@
++extern int a2(void);
++int
++a3(void)
++{
++  return 1 + a2();
++}
+diff --git a/ld/testsuite/ld-plugin/pr28138-4.c b/ld/testsuite/ld-plugin/pr28138-4.c
+new file mode 100644
+index 00000000000..475701b2c5c
+--- /dev/null
++++ b/ld/testsuite/ld-plugin/pr28138-4.c
+@@ -0,0 +1,6 @@
++extern int a3(void);
++int
++a4(void)
++{
++  return 1 + a3();
++}
+diff --git a/ld/testsuite/ld-plugin/pr28138-5.c b/ld/testsuite/ld-plugin/pr28138-5.c
+new file mode 100644
+index 00000000000..e24f86c363e
+--- /dev/null
++++ b/ld/testsuite/ld-plugin/pr28138-5.c
+@@ -0,0 +1,6 @@
++extern int a4(void);
++int
++a5(void)
++{
++  return 1 + a4();
++}
+diff --git a/ld/testsuite/ld-plugin/pr28138-6.c b/ld/testsuite/ld-plugin/pr28138-6.c
+new file mode 100644
+index 00000000000..b5b938bdb21
+--- /dev/null
++++ b/ld/testsuite/ld-plugin/pr28138-6.c
+@@ -0,0 +1,6 @@
++extern int a5(void);
++int
++a6(void)
++{
++  return 1 + a5();
++}
+diff --git a/ld/testsuite/ld-plugin/pr28138-7.c b/ld/testsuite/ld-plugin/pr28138-7.c
+new file mode 100644
+index 00000000000..4ef75bf0f0c
+--- /dev/null
++++ b/ld/testsuite/ld-plugin/pr28138-7.c
+@@ -0,0 +1,6 @@
++extern int a6(void);
++int
++a7(void)
++{
++  return 1 + a6();
++}
+diff --git a/ld/testsuite/ld-plugin/pr28138.c b/ld/testsuite/ld-plugin/pr28138.c
+new file mode 100644
+index 00000000000..68252c9f382
+--- /dev/null
++++ b/ld/testsuite/ld-plugin/pr28138.c
+@@ -0,0 +1,20 @@
++#include <stdio.h>
++
++extern int a7(void);
++
++int
++a0(void)
++{
++  return 0;
++}
++
++int
++main()
++{
++  if (a7() == 7)
++    {
++      printf ("PASS\n");
++      return 0;
++    }
++  return 1;
++}
+-- 
+2.27.0
diff --git a/gnu/packages/patches/binutils-CVE-2021-45078.patch b/gnu/packages/patches/binutils-CVE-2021-45078.patch
new file mode 100644
index 0000000000..fca692bdb5
--- /dev/null
+++ b/gnu/packages/patches/binutils-CVE-2021-45078.patch
@@ -0,0 +1,257 @@
+Fix CVE-2021-45078 (incomplete fix for CVE-2018-12699):
+
+https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-45078
+https://sourceware.org/bugzilla/show_bug.cgi?id=28694
+
+Patch copied from upstream source repository:
+
+https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=161e87d12167b1e36193385485c1f6ce92f74f02
+
+From 161e87d12167b1e36193385485c1f6ce92f74f02 Mon Sep 17 00:00:00 2001
+From: Alan Modra <amodra@gmail.com>
+Date: Wed, 15 Dec 2021 11:48:42 +1030
+Subject: [PATCH] PR28694, Out-of-bounds write in stab_xcoff_builtin_type
+
+	PR 28694
+	* stabs.c (stab_xcoff_builtin_type): Make typenum unsigned.
+	Negate typenum earlier, simplifying bounds checking.  Correct
+	off-by-one indexing.  Adjust switch cases.
+---
+ binutils/stabs.c | 87 ++++++++++++++++++++++++------------------------
+ 1 file changed, 43 insertions(+), 44 deletions(-)
+
+diff --git a/binutils/stabs.c b/binutils/stabs.c
+index 274bfb0e7fa..83ee3ea5fa4 100644
+--- a/binutils/stabs.c
++++ b/binutils/stabs.c
+@@ -202,7 +202,7 @@ static debug_type stab_find_type (void *, struct stab_handle *, const int *);
+ static bool stab_record_type
+   (void *, struct stab_handle *, const int *, debug_type);
+ static debug_type stab_xcoff_builtin_type
+-  (void *, struct stab_handle *, int);
++  (void *, struct stab_handle *, unsigned int);
+ static debug_type stab_find_tagged_type
+   (void *, struct stab_handle *, const char *, int, enum debug_type_kind);
+ static debug_type *stab_demangle_argtypes
+@@ -3496,166 +3496,167 @@ stab_record_type (void *dhandle ATTRIBUTE_UNUSED, struct stab_handle *info,
+ 
+ static debug_type
+ stab_xcoff_builtin_type (void *dhandle, struct stab_handle *info,
+-			 int typenum)
++			 unsigned int typenum)
+ {
+   debug_type rettype;
+   const char *name;
+ 
+-  if (typenum >= 0 || typenum < -XCOFF_TYPE_COUNT)
++  typenum = -typenum - 1;
++  if (typenum >= XCOFF_TYPE_COUNT)
+     {
+-      fprintf (stderr, _("Unrecognized XCOFF type %d\n"), typenum);
++      fprintf (stderr, _("Unrecognized XCOFF type %d\n"), -typenum - 1);
+       return DEBUG_TYPE_NULL;
+     }
+-  if (info->xcoff_types[-typenum] != NULL)
+-    return info->xcoff_types[-typenum];
++  if (info->xcoff_types[typenum] != NULL)
++    return info->xcoff_types[typenum];
+ 
+-  switch (-typenum)
++  switch (typenum)
+     {
+-    case 1:
++    case 0:
+       /* The size of this and all the other types are fixed, defined
+ 	 by the debugging format.  */
+       name = "int";
+       rettype = debug_make_int_type (dhandle, 4, false);
+       break;
+-    case 2:
++    case 1:
+       name = "char";
+       rettype = debug_make_int_type (dhandle, 1, false);
+       break;
+-    case 3:
++    case 2:
+       name = "short";
+       rettype = debug_make_int_type (dhandle, 2, false);
+       break;
+-    case 4:
++    case 3:
+       name = "long";
+       rettype = debug_make_int_type (dhandle, 4, false);
+       break;
+-    case 5:
++    case 4:
+       name = "unsigned char";
+       rettype = debug_make_int_type (dhandle, 1, true);
+       break;
+-    case 6:
++    case 5:
+       name = "signed char";
+       rettype = debug_make_int_type (dhandle, 1, false);
+       break;
+-    case 7:
++    case 6:
+       name = "unsigned short";
+       rettype = debug_make_int_type (dhandle, 2, true);
+       break;
+-    case 8:
++    case 7:
+       name = "unsigned int";
+       rettype = debug_make_int_type (dhandle, 4, true);
+       break;
+-    case 9:
++    case 8:
+       name = "unsigned";
+       rettype = debug_make_int_type (dhandle, 4, true);
+       break;
+-    case 10:
++    case 9:
+       name = "unsigned long";
+       rettype = debug_make_int_type (dhandle, 4, true);
+       break;
+-    case 11:
++    case 10:
+       name = "void";
+       rettype = debug_make_void_type (dhandle);
+       break;
+-    case 12:
++    case 11:
+       /* IEEE single precision (32 bit).  */
+       name = "float";
+       rettype = debug_make_float_type (dhandle, 4);
+       break;
+-    case 13:
++    case 12:
+       /* IEEE double precision (64 bit).  */
+       name = "double";
+       rettype = debug_make_float_type (dhandle, 8);
+       break;
+-    case 14:
++    case 13:
+       /* This is an IEEE double on the RS/6000, and different machines
+ 	 with different sizes for "long double" should use different
+ 	 negative type numbers.  See stabs.texinfo.  */
+       name = "long double";
+       rettype = debug_make_float_type (dhandle, 8);
+       break;
+-    case 15:
++    case 14:
+       name = "integer";
+       rettype = debug_make_int_type (dhandle, 4, false);
+       break;
+-    case 16:
++    case 15:
+       name = "boolean";
+       rettype = debug_make_bool_type (dhandle, 4);
+       break;
+-    case 17:
++    case 16:
+       name = "short real";
+       rettype = debug_make_float_type (dhandle, 4);
+       break;
+-    case 18:
++    case 17:
+       name = "real";
+       rettype = debug_make_float_type (dhandle, 8);
+       break;
+-    case 19:
++    case 18:
+       /* FIXME */
+       name = "stringptr";
+       rettype = NULL;
+       break;
+-    case 20:
++    case 19:
+       /* FIXME */
+       name = "character";
+       rettype = debug_make_int_type (dhandle, 1, true);
+       break;
+-    case 21:
++    case 20:
+       name = "logical*1";
+       rettype = debug_make_bool_type (dhandle, 1);
+       break;
+-    case 22:
++    case 21:
+       name = "logical*2";
+       rettype = debug_make_bool_type (dhandle, 2);
+       break;
+-    case 23:
++    case 22:
+       name = "logical*4";
+       rettype = debug_make_bool_type (dhandle, 4);
+       break;
+-    case 24:
++    case 23:
+       name = "logical";
+       rettype = debug_make_bool_type (dhandle, 4);
+       break;
+-    case 25:
++    case 24:
+       /* Complex type consisting of two IEEE single precision values.  */
+       name = "complex";
+       rettype = debug_make_complex_type (dhandle, 8);
+       break;
+-    case 26:
++    case 25:
+       /* Complex type consisting of two IEEE double precision values.  */
+       name = "double complex";
+       rettype = debug_make_complex_type (dhandle, 16);
+       break;
+-    case 27:
++    case 26:
+       name = "integer*1";
+       rettype = debug_make_int_type (dhandle, 1, false);
+       break;
+-    case 28:
++    case 27:
+       name = "integer*2";
+       rettype = debug_make_int_type (dhandle, 2, false);
+       break;
+-    case 29:
++    case 28:
+       name = "integer*4";
+       rettype = debug_make_int_type (dhandle, 4, false);
+       break;
+-    case 30:
++    case 29:
+       /* FIXME */
+       name = "wchar";
+       rettype = debug_make_int_type (dhandle, 2, false);
+       break;
+-    case 31:
++    case 30:
+       name = "long long";
+       rettype = debug_make_int_type (dhandle, 8, false);
+       break;
+-    case 32:
++    case 31:
+       name = "unsigned long long";
+       rettype = debug_make_int_type (dhandle, 8, true);
+       break;
+-    case 33:
++    case 32:
+       name = "logical*8";
+       rettype = debug_make_bool_type (dhandle, 8);
+       break;
+-    case 34:
++    case 33:
+       name = "integer*8";
+       rettype = debug_make_int_type (dhandle, 8, false);
+       break;
+@@ -3664,9 +3665,7 @@ stab_xcoff_builtin_type (void *dhandle, struct stab_handle *info,
+     }
+ 
+   rettype = debug_name_type (dhandle, name, rettype);
+-
+-  info->xcoff_types[-typenum] = rettype;
+-
++  info->xcoff_types[typenum] = rettype;
+   return rettype;
+ }
+ 
+-- 
+2.27.0
+
diff --git a/gnu/packages/patches/binutils-loongson-workaround.patch b/gnu/packages/patches/binutils-loongson-workaround.patch
index f43572a53d..f05d6c3c96 100644
--- a/gnu/packages/patches/binutils-loongson-workaround.patch
+++ b/gnu/packages/patches/binutils-loongson-workaround.patch
@@ -4,22 +4,22 @@ Patch by Mark H Weaver <mhw@netris.org>.
 
 --- binutils/gas/config/tc-mips.c.orig	2012-09-04 10:21:03.000000000 -0400
 +++ binutils/gas/config/tc-mips.c	2013-10-06 02:23:21.651983768 -0400
-@@ -910,10 +910,10 @@
+@@ -934,10 +934,10 @@ enum fix_vr4120_class
  };
  
  /* ...likewise -mfix-loongson2f-jump.  */
--static bfd_boolean mips_fix_loongson2f_jump;
-+static bfd_boolean mips_fix_loongson2f_jump = FALSE;
+-static bool mips_fix_loongson2f_jump;
++static bool mips_fix_loongson2f_jump = FALSE;
  
  /* ...likewise -mfix-loongson2f-nop.  */
--static bfd_boolean mips_fix_loongson2f_nop;
-+static bfd_boolean mips_fix_loongson2f_nop = TRUE;
+-static bool mips_fix_loongson2f_nop;
++static bool mips_fix_loongson2f_nop = TRUE;
  
  /* True if -mfix-loongson2f-nop or -mfix-loongson2f-jump passed.  */
- static bfd_boolean mips_fix_loongson2f;
+ static bool mips_fix_loongson2f;
 --- binutils/gas/testsuite/gas/mips/mips.exp.orig	2012-09-04 10:17:13.000000000 -0400
 +++ binutils/gas/testsuite/gas/mips/mips.exp	2013-10-06 02:23:21.663983768 -0400
-@@ -91,6 +91,12 @@
+@@ -110,6 +110,12 @@ proc mips_arch_init {} {
  
      # Catch because the variable won't be set the first time through.
      catch {unset mips_arches}
diff --git a/gnu/packages/patches/binutils-mingw-w64-timestamp.patch b/gnu/packages/patches/binutils-mingw-w64-timestamp.patch
index b785043b62..fcfe4a36aa 100644
--- a/gnu/packages/patches/binutils-mingw-w64-timestamp.patch
+++ b/gnu/packages/patches/binutils-mingw-w64-timestamp.patch
@@ -4,14 +4,14 @@ https://salsa.debian.org/mingw-w64-team/binutils-mingw-w64.git
 
 Invoke the following in the aforementioned repo to see the original patch:
 
-  $ git show da63f6b:debian/patches/specify-timestamp.patch
+  $ git show faf7c64:debian/patches/specify-timestamp.patch
 
 Description: Allow the PE timestamp to be specified
 Author: Stephen Kitt <skitt@debian.org>
 
 --- a/bfd/peXXigen.c
 +++ b/bfd/peXXigen.c
-@@ -70,6 +70,9 @@
+@@ -77,6 +77,9 @@
  #include <wctype.h>
  #endif
  
@@ -21,20 +21,20 @@ Author: Stephen Kitt <skitt@debian.org>
  /* NOTE: it's strange to be including an architecture specific header
     in what's supposed to be general (to PE/PEI) code.  However, that's
     where the definitions are, and they don't vary per architecture
-@@ -879,10 +882,38 @@
+@@ -876,9 +879,36 @@
  
    /* Use a real timestamp by default, unless the no-insert-timestamp
       option was chosen.  */
--  if ((pe_data (abfd)->insert_timestamp))
+-  if ((pe_data (abfd)->timestamp) == -1)
 -    H_PUT_32 (abfd, time (0), filehdr_out->f_timdat);
 -  else
-+  if (pe_data (abfd)->insert_timestamp) {
++  if ((pe_data (abfd)->timestamp) == -1) {
 +    time_t now;
 +    char *source_date_epoch;
 +    unsigned long long epoch;
 +    char *endptr;
 +
-+    now = time(NULL);
++    now = time (NULL);
 +    source_date_epoch = getenv("SOURCE_DATE_EPOCH");
 +    if (source_date_epoch) {
 +      errno = 0;
@@ -57,30 +57,29 @@ Author: Stephen Kitt <skitt@debian.org>
 +      }
 +    }
 +    H_PUT_32 (abfd, now, filehdr_out->f_timdat);
-+  } else {
-     H_PUT_32 (abfd, 0, filehdr_out->f_timdat);
-+  }
++  } else
+     H_PUT_32 (abfd, pe_data (abfd)->timestamp, filehdr_out->f_timdat);
  
    PUT_FILEHDR_SYMPTR (abfd, filehdr_in->f_symptr,
- 		      filehdr_out->f_symptr);
 --- a/ld/pe-dll.c
 +++ b/ld/pe-dll.c
-@@ -26,6 +26,8 @@
- #include "filenames.h"
+@@ -27,6 +27,8 @@
  #include "safe-ctype.h"
+ #include "ctf-api.h"
  
 +#include <errno.h>
 +#include <limits.h>
  #include <time.h>
  
  #include "ld.h"
-@@ -1202,8 +1204,36 @@
+@@ -1218,9 +1220,36 @@
  
    memset (edata_d, 0, edata_sz);
  
--  if (pe_data (abfd)->insert_timestamp)
+-  if (pe_data (abfd)->timestamp == -1)
 -    H_PUT_32 (abfd, time (0), edata_d + 4);
-+  if (pe_data (abfd)->insert_timestamp) {
+-  else
++  if (pe_data (abfd)->timestamp == -1) {
 +    time_t now;
 +    char *source_date_epoch;
 +    unsigned long long epoch;
@@ -109,13 +108,13 @@ Author: Stephen Kitt <skitt@debian.org>
 +      }
 +    }
 +    H_PUT_32 (abfd, now, edata_d + 4);
-+  }
++  } else
+     H_PUT_32 (abfd, pe_data (abfd)->timestamp, edata_d + 4);
  
    if (pe_def_file->version_major != -1)
-     {
 --- a/ld/emultempl/pe.em
 +++ b/ld/emultempl/pe.em
-@@ -303,7 +303,7 @@
+@@ -304,7 +304,7 @@
       OPTION_USE_NUL_PREFIXED_IMPORT_TABLES},
      {"no-leading-underscore", no_argument, NULL, OPTION_NO_LEADING_UNDERSCORE},
      {"leading-underscore", no_argument, NULL, OPTION_LEADING_UNDERSCORE},
@@ -126,7 +125,7 @@ Author: Stephen Kitt <skitt@debian.org>
      /* getopt allows abbreviations, so we do this to stop it
 --- a/ld/emultempl/pep.em
 +++ b/ld/emultempl/pep.em
-@@ -321,7 +321,7 @@
+@@ -323,7 +323,7 @@
      {"no-bind", no_argument, NULL, OPTION_NO_BIND},
      {"wdmdriver", no_argument, NULL, OPTION_WDM_DRIVER},
      {"tsaware", no_argument, NULL, OPTION_TERMINAL_SERVER_AWARE},
@@ -134,4 +133,4 @@ Author: Stephen Kitt <skitt@debian.org>
 +    {"insert-timestamp", optional_argument, NULL, OPTION_INSERT_TIMESTAMP},
      {"no-insert-timestamp", no_argument, NULL, OPTION_NO_INSERT_TIMESTAMP},
      {"build-id", optional_argument, NULL, OPTION_BUILD_ID},
-     {NULL, no_argument, NULL, 0}
+     {"enable-reloc-section", no_argument, NULL, OPTION_ENABLE_RELOC_SECTION},
diff --git a/gnu/packages/patches/blender-2.79-gcc8.patch b/gnu/packages/patches/blender-2.79-gcc8.patch
deleted file mode 100644
index 6a9186323b..0000000000
--- a/gnu/packages/patches/blender-2.79-gcc8.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-diff --git a/intern/itasc/kdl/tree.hpp b/intern/itasc/kdl/tree.hpp
-index c8a253fc901..bd35f82d185 100644
---- a/intern/itasc/kdl/tree.hpp
-+++ b/intern/itasc/kdl/tree.hpp
-@@ -34,7 +34,7 @@ namespace KDL
-     //Forward declaration
-     class TreeElement;
-     // Eigen allocator is needed for alignment of Eigen data types
--    typedef std::map<std::string,TreeElement, std::less<std::string>, Eigen::aligned_allocator<std::pair<std::string, TreeElement> > > SegmentMap;
-+    typedef std::map<std::string,TreeElement, std::less<std::string>, Eigen::aligned_allocator<std::pair<const std::string, TreeElement> > > SegmentMap;
- 
-     class TreeElement
-     {
-diff --git a/intern/cycles/util/util_sseb.h b/intern/cycles/util/util_sseb.h
-index 6e669701f3b..977976c3fc0 100644
---- a/intern/cycles/util/util_sseb.h
-+++ b/intern/cycles/util/util_sseb.h
-@@ -22,6 +22,9 @@ CCL_NAMESPACE_BEGIN
- 
- #ifdef __KERNEL_SSE2__
- 
-+struct ssei;
-+struct ssef;
-+
- /*! 4-wide SSE bool type. */
- struct sseb
- {
-@@ -116,7 +119,7 @@ __forceinline const sseb unpacklo( const sseb& a, const sseb& b ) { return _mm_u
- __forceinline const sseb unpackhi( const sseb& a, const sseb& b ) { return _mm_unpackhi_ps(a, b); }
- 
- template<size_t i0, size_t i1, size_t i2, size_t i3> __forceinline const sseb shuffle( const sseb& a ) {
--	return _mm_shuffle_epi32(a, _MM_SHUFFLE(i3, i2, i1, i0));
-+	return _mm_castsi128_ps(_mm_shuffle_epi32(a, _MM_SHUFFLE(i3, i2, i1, i0)));
- }
- 
- template<> __forceinline const sseb shuffle<0, 1, 0, 1>( const sseb& a ) {
diff --git a/gnu/packages/patches/blender-2.79-gcc9.patch b/gnu/packages/patches/blender-2.79-gcc9.patch
deleted file mode 100644
index d538a02620..0000000000
--- a/gnu/packages/patches/blender-2.79-gcc9.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-commit e6d803fd4a383cecf8c643095f093a31c944b785
-Author: Robert-André Mauchin <zebob.m@gmail.com>
-Date:   Wed Apr 3 01:36:52 2019 +0200
-
-    Fix for GCC9 new OpenMP data sharing
-    
-    GCC 9 started implementing the OpenMP 4.0 and later behavior. When not using
-    default clause or when using default(shared), this makes no difference, but
-    if using default(none), previously the choice was not specify the const
-    qualified variables on the construct at all, or specify in firstprivate
-    clause. In GCC 9 as well as for OpenMP 4.0 compliance, those variables need
-    to be specified on constructs in which they are used, either in shared or
-    in firstprivate clause. Specifying them in firstprivate clause is one way to
-    achieve compatibility with both older GCC versions and GCC 9,
-    another option is to drop the default(none) clause.
-    
-    This patch thus drops the default(none) clause.
-    
-    See https://gcc.gnu.org/gcc-9/porting_to.html#ompdatasharing
-    
-    Signed-off-by: Robert-André Mauchin <zebob.m@gmail.com>
-
-diff --git a/intern/elbeem/intern/solver_main.cpp b/intern/elbeem/intern/solver_main.cpp
-index 68f7c04cd54..514087b6130 100644
---- a/intern/elbeem/intern/solver_main.cpp
-+++ b/intern/elbeem/intern/solver_main.cpp
-@@ -381,7 +381,7 @@ LbmFsgrSolver::mainLoop(const int lev)
- 	GRID_REGION_INIT();
- #if PARALLEL==1
- 	const int gDebugLevel = ::gDebugLevel;
--#pragma omp parallel default(none) num_threads(mNumOMPThreads) \
-+#pragma omp parallel num_threads(mNumOMPThreads) \
-   reduction(+: \
- 	  calcCurrentMass,calcCurrentVolume, \
- 		calcCellsFilled,calcCellsEmptied, \
-@@ -1126,7 +1126,7 @@ LbmFsgrSolver::preinitGrids()
- 		GRID_REGION_INIT();
- #if PARALLEL==1
- 	const int gDebugLevel = ::gDebugLevel;
--#pragma omp parallel default(none) num_threads(mNumOMPThreads) \
-+#pragma omp parallel num_threads(mNumOMPThreads) \
-   reduction(+: \
- 	  calcCurrentMass,calcCurrentVolume, \
- 		calcCellsFilled,calcCellsEmptied, \
-@@ -1164,7 +1164,7 @@ LbmFsgrSolver::standingFluidPreinit()
- 	GRID_REGION_INIT();
- #if PARALLEL==1
- 	const int gDebugLevel = ::gDebugLevel;
--#pragma omp parallel default(none) num_threads(mNumOMPThreads) \
-+#pragma omp parallel num_threads(mNumOMPThreads) \
-   reduction(+: \
- 	  calcCurrentMass,calcCurrentVolume, \
- 		calcCellsFilled,calcCellsEmptied, \
diff --git a/gnu/packages/patches/blender-2.79-newer-ffmpeg.patch b/gnu/packages/patches/blender-2.79-newer-ffmpeg.patch
deleted file mode 100644
index 363489bc70..0000000000
--- a/gnu/packages/patches/blender-2.79-newer-ffmpeg.patch
+++ /dev/null
@@ -1,80 +0,0 @@
-https://sources.debian.org/data/main/b/blender/2.79.b+dfsg0-4/debian/patches/0008-fix_building_with_latest_versions_of_FFmpeg.patch
-
-From: Bastien Montagne <montagne29@wanadoo.fr>
-Date: Tue, 8 May 2018 16:00:52 +0200
-Subject: fix_building_with_latest_versions_of_FFmpeg
-
-Some years-old deprecated stuff has now been removed.
-
-Correct solution is probably to use valid defines etc. in own code, but
-this is more FFMEPG maintainer task (since it also may change how old
-FFMPEG we do support...).
----
- intern/ffmpeg/ffmpeg_compat.h                  | 39 ++++++++++++++++++++++++++
- source/blender/blenkernel/intern/writeffmpeg.c |  3 +-
- 2 files changed, 41 insertions(+), 1 deletion(-)
-
-diff --git a/intern/ffmpeg/ffmpeg_compat.h b/intern/ffmpeg/ffmpeg_compat.h
-index 9c06c8a..f7f437c 100644
---- a/intern/ffmpeg/ffmpeg_compat.h
-+++ b/intern/ffmpeg/ffmpeg_compat.h
-@@ -109,6 +109,45 @@ int av_sample_fmt_is_planar(enum AVSampleFormat sample_fmt)
- 
- #endif
- 
-+/* XXX TODO Probably fix to correct modern flags in code? Not sure how old FFMPEG we want to support though,
-+ * so for now this will do. */
-+
-+#ifndef FF_MIN_BUFFER_SIZE
-+#  ifdef AV_INPUT_BUFFER_MIN_SIZE
-+#    define FF_MIN_BUFFER_SIZE AV_INPUT_BUFFER_MIN_SIZE
-+#  endif
-+#endif
-+
-+#ifndef FF_INPUT_BUFFER_PADDING_SIZE
-+#  ifdef AV_INPUT_BUFFER_PADDING_SIZE
-+#    define FF_INPUT_BUFFER_PADDING_SIZE AV_INPUT_BUFFER_PADDING_SIZE
-+#  endif
-+#endif
-+
-+#ifndef CODEC_FLAG_GLOBAL_HEADER
-+#  ifdef AV_CODEC_FLAG_GLOBAL_HEADER
-+#    define CODEC_FLAG_GLOBAL_HEADER AV_CODEC_FLAG_GLOBAL_HEADER
-+#  endif
-+#endif
-+
-+#ifndef CODEC_FLAG_GLOBAL_HEADER
-+#  ifdef AV_CODEC_FLAG_GLOBAL_HEADER
-+#    define CODEC_FLAG_GLOBAL_HEADER AV_CODEC_FLAG_GLOBAL_HEADER
-+#  endif
-+#endif
-+
-+#ifndef CODEC_FLAG_INTERLACED_DCT
-+#  ifdef AV_CODEC_FLAG_INTERLACED_DCT
-+#    define CODEC_FLAG_INTERLACED_DCT AV_CODEC_FLAG_INTERLACED_DCT
-+#  endif
-+#endif
-+
-+#ifndef CODEC_FLAG_INTERLACED_ME
-+#  ifdef AV_CODEC_FLAG_INTERLACED_ME
-+#    define CODEC_FLAG_INTERLACED_ME AV_CODEC_FLAG_INTERLACED_ME
-+#  endif
-+#endif
-+
- /* FFmpeg upstream 1.0 is the first who added AV_ prefix. */
- #if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(54, 59, 100)
- #  define AV_CODEC_ID_NONE CODEC_ID_NONE
-diff --git a/source/blender/blenkernel/intern/writeffmpeg.c b/source/blender/blenkernel/intern/writeffmpeg.c
-index a19e414..04d508a 100644
---- a/source/blender/blenkernel/intern/writeffmpeg.c
-+++ b/source/blender/blenkernel/intern/writeffmpeg.c
-@@ -605,7 +605,8 @@ static AVStream *alloc_video_stream(FFMpegContext *context, RenderData *rd, int
- 	c->rc_buffer_aggressivity = 1.0;
- #endif
- 
--	c->me_method = ME_EPZS;
-+	/* Deprecated and not doing anything since July 2015, deleted in recent ffmpeg */
-+	//c->me_method = ME_EPZS;
- 	
- 	codec = avcodec_find_encoder(c->codec_id);
- 	if (!codec)
diff --git a/gnu/packages/patches/blender-2.79-oiio2.patch b/gnu/packages/patches/blender-2.79-oiio2.patch
deleted file mode 100644
index 1c3606a940..0000000000
--- a/gnu/packages/patches/blender-2.79-oiio2.patch
+++ /dev/null
@@ -1,284 +0,0 @@
-From: Sergey Sharybin <sergey@blender.org>
-Date: Fri, 28 Dec 2018 11:25:35 +0100
-Subject: adapt_build_against_OIIO2
-
----
- intern/cycles/blender/blender_python.cpp           |  2 +-
- intern/cycles/graph/node_xml.cpp                   |  2 +-
- intern/cycles/render/buffers.cpp                   |  4 ++--
- intern/cycles/render/image.cpp                     | 15 ++++--------
- intern/cycles/render/image.h                       |  3 ++-
- intern/cycles/util/util_unique_ptr.h               | 28 ++++++++++++++++++++++
- .../blender/imbuf/intern/oiio/openimageio_api.cpp  | 19 +++++++--------
- 7 files changed, 48 insertions(+), 25 deletions(-)
- create mode 100644 intern/cycles/util/util_unique_ptr.h
-
-diff --git a/intern/cycles/blender/blender_python.cpp b/intern/cycles/blender/blender_python.cpp
-index 54973fd..bee6dd1 100644
---- a/intern/cycles/blender/blender_python.cpp
-+++ b/intern/cycles/blender/blender_python.cpp
-@@ -493,7 +493,7 @@ static PyObject *osl_update_node_func(PyObject * /*self*/, PyObject *args)
- 				socket_type = "NodeSocketString";
- 				data_type = BL::NodeSocket::type_STRING;
- 				if(param->validdefault)
--					default_string = param->sdefault[0];
-+					default_string = param->sdefault[0].string();
- 			}
- 			else
- 				continue;
-diff --git a/intern/cycles/graph/node_xml.cpp b/intern/cycles/graph/node_xml.cpp
-index d26b3b2..2a24104 100644
---- a/intern/cycles/graph/node_xml.cpp
-+++ b/intern/cycles/graph/node_xml.cpp
-@@ -250,7 +250,7 @@ void xml_read_node(XMLReader& reader, Node *node, xml_node xml_node)
- 		}
- 	}
- 
--	if(node->name)
-+	if(!node->name.empty())
- 		reader.node_map[node->name] = node;
- }
- 
-diff --git a/intern/cycles/render/buffers.cpp b/intern/cycles/render/buffers.cpp
-index cf402c3..f84a37a 100644
---- a/intern/cycles/render/buffers.cpp
-+++ b/intern/cycles/render/buffers.cpp
-@@ -27,6 +27,7 @@
- #include "util/util_opengl.h"
- #include "util/util_time.h"
- #include "util/util_types.h"
-+#include "util/util_unique_ptr.h"
- 
- CCL_NAMESPACE_BEGIN
- 
-@@ -453,7 +454,7 @@ void DisplayBuffer::write(Device *device, const string& filename)
- 	device->pixels_copy_from(rgba, 0, w, h);
- 
- 	/* write image */
--	ImageOutput *out = ImageOutput::create(filename);
-+	unique_ptr<ImageOutput> out = unique_ptr<ImageOutput>(ImageOutput::create(filename));
- 	ImageSpec spec(w, h, 4, TypeDesc::UINT8);
- 	int scanlinesize = w*4*sizeof(uchar);
- 
-@@ -468,7 +469,6 @@ void DisplayBuffer::write(Device *device, const string& filename)
- 
- 	out->close();
- 
--	delete out;
- }
- 
- device_memory& DisplayBuffer::rgba_data()
-diff --git a/intern/cycles/render/image.cpp b/intern/cycles/render/image.cpp
-index 595eb46..a143b02 100644
---- a/intern/cycles/render/image.cpp
-+++ b/intern/cycles/render/image.cpp
-@@ -23,6 +23,7 @@
- #include "util/util_path.h"
- #include "util/util_progress.h"
- #include "util/util_texture.h"
-+#include "util/util_unique_ptr.h"
- 
- #ifdef WITH_OSL
- #include <OSL/oslexec.h>
-@@ -148,7 +149,7 @@ ImageDataType ImageManager::get_image_metadata(const string& filename,
- 		return IMAGE_DATA_TYPE_BYTE4;
- 	}
- 
--	ImageInput *in = ImageInput::create(filename);
-+	unique_ptr<ImageInput> in(ImageInput::create(filename));
- 
- 	if(in) {
- 		ImageSpec spec;
-@@ -194,7 +195,6 @@ ImageDataType ImageManager::get_image_metadata(const string& filename,
- 			in->close();
- 		}
- 
--		delete in;
- 	}
- 
- 	if(is_half) {
-@@ -449,7 +449,7 @@ void ImageManager::tag_reload_image(const string& filename,
- }
- 
- bool ImageManager::file_load_image_generic(Image *img,
--                                           ImageInput **in,
-+                                           unique_ptr<ImageInput> *in,
-                                            int &width,
-                                            int &height,
-                                            int &depth,
-@@ -465,7 +465,7 @@ bool ImageManager::file_load_image_generic(Image *img,
- 		}
- 
- 		/* load image from file through OIIO */
--		*in = ImageInput::create(img->filename);
-+		*in = unique_ptr<ImageInput>(ImageInput::create(img->filename));
- 
- 		if(!*in)
- 			return false;
-@@ -477,8 +477,6 @@ bool ImageManager::file_load_image_generic(Image *img,
- 			config.attribute("oiio:UnassociatedAlpha", 1);
- 
- 		if(!(*in)->open(img->filename, spec, config)) {
--			delete *in;
--			*in = NULL;
- 			return false;
- 		}
- 
-@@ -500,8 +498,6 @@ bool ImageManager::file_load_image_generic(Image *img,
- 	if(!(components >= 1 && components <= 4)) {
- 		if(*in) {
- 			(*in)->close();
--			delete *in;
--			*in = NULL;
- 		}
- 
- 		return false;
-@@ -519,7 +515,7 @@ bool ImageManager::file_load_image(Image *img,
-                                    device_vector<DeviceType>& tex_img)
- {
- 	const StorageType alpha_one = (FileFormat == TypeDesc::UINT8)? 255 : 1;
--	ImageInput *in = NULL;
-+	unique_ptr<ImageInput> in = NULL;
- 	int width, height, depth, components;
- 	if(!file_load_image_generic(img, &in, width, height, depth, components)) {
- 		return false;
-@@ -575,7 +571,6 @@ bool ImageManager::file_load_image(Image *img,
- 		}
- 		cmyk = strcmp(in->format_name(), "jpeg") == 0 && components == 4;
- 		in->close();
--		delete in;
- 	}
- 	else {
- 		if(FileFormat == TypeDesc::FLOAT) {
-diff --git a/intern/cycles/render/image.h b/intern/cycles/render/image.h
-index db7e28a..f4a14f4 100644
---- a/intern/cycles/render/image.h
-+++ b/intern/cycles/render/image.h
-@@ -23,6 +23,7 @@
- #include "util/util_image.h"
- #include "util/util_string.h"
- #include "util/util_thread.h"
-+#include "util/util_unique_ptr.h"
- #include "util/util_vector.h"
- 
- CCL_NAMESPACE_BEGIN
-@@ -133,7 +134,7 @@ private:
- 	bool pack_images;
- 
- 	bool file_load_image_generic(Image *img,
--	                             ImageInput **in,
-+	                             unique_ptr<ImageInput> *in,
- 	                             int &width,
- 	                             int &height,
- 	                             int &depth,
-diff --git a/intern/cycles/util/util_unique_ptr.h b/intern/cycles/util/util_unique_ptr.h
-new file mode 100644
-index 0000000..1ceae73
---- /dev/null
-+++ b/intern/cycles/util/util_unique_ptr.h
-@@ -0,0 +1,28 @@
-+/*
-+ * Copyright 2011-2013 Blender Foundation
-+ *
-+ * 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.
-+ */
-+
-+#ifndef __UTIL_UNIQUE_PTR_H__
-+#define __UTIL_UNIQUE_PTR_H__
-+
-+#include <memory>
-+
-+CCL_NAMESPACE_BEGIN
-+
-+using std::unique_ptr;
-+
-+CCL_NAMESPACE_END
-+
-+#endif  /* __UTIL_UNIQUE_PTR_H__ */
-diff --git a/source/blender/imbuf/intern/oiio/openimageio_api.cpp b/source/blender/imbuf/intern/oiio/openimageio_api.cpp
-index b123d50..7f2fac9 100644
---- a/source/blender/imbuf/intern/oiio/openimageio_api.cpp
-+++ b/source/blender/imbuf/intern/oiio/openimageio_api.cpp
-@@ -35,6 +35,11 @@
- #include "utfconv.h"
- #endif
- 
-+// NOTE: Keep first, BLI_path_util conflicts with OIIO's format.
-+#include <memory>
-+#include <openimageio_api.h>
-+#include <OpenImageIO/imageio.h>
-+
- extern "C"
- {
- #include "MEM_guardedalloc.h"
-@@ -48,12 +53,10 @@ extern "C"
- #include "IMB_colormanagement_intern.h"
- }
- 
--#include <openimageio_api.h>
--#include <OpenImageIO/imageio.h>
--
- OIIO_NAMESPACE_USING
- 
- using std::string;
-+using std::unique_ptr;
- 
- typedef unsigned char uchar;
- 
-@@ -197,7 +200,6 @@ int imb_save_photoshop(struct ImBuf *ibuf, const char * /*name*/, int flags)
- 
- struct ImBuf *imb_load_photoshop(const char *filename, int flags, char colorspace[IM_MAX_SPACE])
- {
--	ImageInput *in = NULL;
- 	struct ImBuf *ibuf = NULL;
- 	int width, height, components;
- 	bool is_float, is_alpha;
-@@ -210,7 +212,7 @@ struct ImBuf *imb_load_photoshop(const char *filename, int flags, char colorspac
- 
- 	colorspace_set_default_role(colorspace, IM_MAX_SPACE, COLOR_ROLE_DEFAULT_BYTE);
- 
--	in = ImageInput::create(filename);
-+	unique_ptr<ImageInput> in(ImageInput::create(filename));
- 	if (!in) {
- 		std::cerr << __func__ << ": ImageInput::create() failed:" << std::endl
- 		          << OIIO_NAMESPACE::geterror() << std::endl;
-@@ -223,7 +225,6 @@ struct ImBuf *imb_load_photoshop(const char *filename, int flags, char colorspac
- 	if (!in->open(filename, spec, config)) {
- 		std::cerr << __func__ << ": ImageInput::open() failed:" << std::endl
- 		          << in->geterror() << std::endl;
--		delete in;
- 		return NULL;
- 	}
- 
-@@ -249,19 +250,17 @@ struct ImBuf *imb_load_photoshop(const char *filename, int flags, char colorspac
- 	if (!(components >= 1 && components <= 4)) {
- 		if (in) {
- 			in->close();
--			delete in;
- 		}
- 		return NULL;
- 	}
- 
- 	if (is_float)
--		ibuf = imb_oiio_load_image_float(in, width, height, components, flags, is_alpha);
-+		ibuf = imb_oiio_load_image_float(in.get(), width, height, components, flags, is_alpha);
- 	else
--		ibuf = imb_oiio_load_image(in, width, height, components, flags, is_alpha);
-+		ibuf = imb_oiio_load_image(in.get(), width, height, components, flags, is_alpha);
- 
- 	if (in) {
- 		in->close();
--		delete in;
- 	}
- 
- 	if (!ibuf)
diff --git a/gnu/packages/patches/blender-2.79-python-3.7-fix.patch b/gnu/packages/patches/blender-2.79-python-3.7-fix.patch
deleted file mode 100644
index fd1d8ba437..0000000000
--- a/gnu/packages/patches/blender-2.79-python-3.7-fix.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-Copied from https://git.blender.org/gitweb/gitweb.cgi/blender.git/patch/1db47a2ccd1e68994bf8140eba6cc2a26a2bc91f
-Fixes <https://bugs.gnu.org/33608>.
-
-From 1db47a2ccd1e68994bf8140eba6cc2a26a2bc91f Mon Sep 17 00:00:00 2001
-From: Campbell Barton <ideasman42@gmail.com>
-Date: Thu, 12 Jul 2018 08:28:06 +0200
-Subject: [PATCH] Fix PyRNA class registration w/ Python 3.7
-
-In Python3.7 this now raises an error.
----
- source/blender/python/intern/bpy_rna.c | 5 +++++
- 1 file changed, 5 insertions(+)
-
-diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c
-index 9052b6f580a..80b0aa7a51b 100644
---- a/source/blender/python/intern/bpy_rna.c
-+++ b/source/blender/python/intern/bpy_rna.c
-@@ -7577,10 +7577,12 @@ static int bpy_class_validate_recursive(PointerRNA *dummyptr, StructRNA *srna, v
- 		if (!(flag & PROP_REGISTER))
- 			continue;
- 
-+		/* TODO(campbell): Use Python3.7x _PyObject_LookupAttr(), also in the macro below. */
- 		identifier = RNA_property_identifier(prop);
- 		item = PyObject_GetAttrString(py_class, identifier);
- 
- 		if (item == NULL) {
-+			PyErr_Clear();
- 			/* Sneaky workaround to use the class name as the bl_idname */
- 
- #define     BPY_REPLACEMENT_STRING(rna_attr, py_attr)                         \
-@@ -7596,6 +7598,9 @@ static int bpy_class_validate_recursive(PointerRNA *dummyptr, StructRNA *srna, v
- 					}                                                         \
- 					Py_DECREF(item);                                          \
- 				}                                                             \
-+				else {                                                        \
-+					PyErr_Clear();                                            \
-+				}                                                             \
- 			}  /* intentionally allow else here */
- 
- 			if (false) {}  /* needed for macro */
--- 
-2.20.1
-
diff --git a/gnu/packages/patches/blender-2.79-python-3.8-fix.patch b/gnu/packages/patches/blender-2.79-python-3.8-fix.patch
deleted file mode 100644
index 18d25449ee..0000000000
--- a/gnu/packages/patches/blender-2.79-python-3.8-fix.patch
+++ /dev/null
@@ -1,204 +0,0 @@
-From 4b663ecf264020b1d7003a137ce84b06d7ec4ce6 Mon Sep 17 00:00:00 2001
-From: bartus <szczepaniak.bartek+github@gmail.com>
-Date: Sat, 16 Nov 2019 20:29:30 +0100
-Subject: [PATCH] Add python 3.8 support.
-
----
- source/blender/python/generic/py_capi_utils.c | 27 +++++++++++++++----
- 1 file changed, 22 insertions(+), 5 deletions(-)
-
-diff --git a/source/blender/python/generic/py_capi_utils.c b/source/blender/python/generic/py_capi_utils.c
-index 545e0506f84..a7eab70600b 100644
---- a/source/blender/python/generic/py_capi_utils.c
-+++ b/source/blender/python/generic/py_capi_utils.c
-@@ -696,9 +696,16 @@ PyObject *PyC_UnicodeFromByte(const char *str)
-  ****************************************************************************/
- PyObject *PyC_DefaultNameSpace(const char *filename)
- {
-+	#if PY_VERSION_HEX >= 0x03080000
-+	PyObject *modules = PyImport_GetModuleDict();
-+	PyObject *builtins = PyEval_GetBuiltins();
-+	#else
- 	PyInterpreterState *interp = PyThreadState_GET()->interp;
-+	PyObject *modules = interp->modules;
-+	PyObject *builtins = interp->builtins;
-+	#endif
- 	PyObject *mod_main = PyModule_New("__main__");
--	PyDict_SetItemString(interp->modules, "__main__", mod_main);
-+	PyDict_SetItemString(modules, "__main__", mod_main);
- 	Py_DECREF(mod_main); /* sys.modules owns now */
- 	PyModule_AddStringConstant(mod_main, "__name__", "__main__");
- 	if (filename) {
-@@ -706,8 +713,8 @@ PyObject *PyC_DefaultNameSpace(const char *filename)
- 		 * note: this wont map to a real file when executing text-blocks and buttons. */
- 		PyModule_AddObject(mod_main, "__file__", PyC_UnicodeFromByte(filename));
- 	}
--	PyModule_AddObject(mod_main, "__builtins__", interp->builtins);
--	Py_INCREF(interp->builtins); /* AddObject steals a reference */
-+	PyModule_AddObject(mod_main, "__builtins__", builtins);
-+	Py_INCREF(builtins); /* AddObject steals a reference */
- 	return PyModule_GetDict(mod_main);
- }
- 
-@@ -734,15 +741,25 @@ bool PyC_NameSpace_ImportArray(PyObject *py_dict, const char *imports[])
- /* restore MUST be called after this */
- void PyC_MainModule_Backup(PyObject **main_mod)
- {
-+	#if PY_VERSION_HEX >= 0x03080000
-+	PyObject *modules = PyImport_GetModuleDict();
-+	#else
- 	PyInterpreterState *interp = PyThreadState_GET()->interp;
--	*main_mod = PyDict_GetItemString(interp->modules, "__main__");
-+	PyObject *modules = interp->modules;
-+	#endif
-+	*main_mod = PyDict_GetItemString(modules, "__main__");
- 	Py_XINCREF(*main_mod); /* don't free */
- }
- 
- void PyC_MainModule_Restore(PyObject *main_mod)
- {
-+	#if PY_VERSION_HEX >= 0x03080000
-+	PyObject *modules = PyImport_GetModuleDict();
-+	#else
- 	PyInterpreterState *interp = PyThreadState_GET()->interp;
--	PyDict_SetItemString(interp->modules, "__main__", main_mod);
-+	PyObject *modules = interp->modules;
-+	#endif
-+	PyDict_SetItemString(modules, "__main__", main_mod);
- 	Py_XDECREF(main_mod);
- }
- 
--- 
-2.24.0
-
-From 44f719b63238503ef8f933f55383c6d4798995cc Mon Sep 17 00:00:00 2001
-From: Campbell Barton <ideasman42@gmail.com>
-Date: Thu, 13 Sep 2018 17:06:07 +1000
-Subject: [PATCH] Cleanup: use PyImport_GetModuleDict
-
-Replace direct access using PyThreadState_GET
----
- source/blender/python/bmesh/bmesh_py_api.c        | 2 +-
- source/blender/python/generic/idprop_py_api.c     | 2 +-
- source/blender/python/intern/bpy_interface.c      | 2 +-
- source/blender/python/intern/gpu.c                | 4 ++--
- source/blender/python/mathutils/mathutils.c       | 2 +-
- source/blender/python/mathutils/mathutils_noise.c | 5 +++--
- source/gameengine/Ketsji/KX_PythonInit.cpp        | 2 +-
- 7 files changed, 10 insertions(+), 9 deletions(-)
-
-diff --git a/source/blender/python/bmesh/bmesh_py_api.c b/source/blender/python/bmesh/bmesh_py_api.c
-index d5973baeadb..d7324eabb6c 100644
---- a/source/blender/python/bmesh/bmesh_py_api.c
-+++ b/source/blender/python/bmesh/bmesh_py_api.c
-@@ -196,7 +196,7 @@ PyObject *BPyInit_bmesh(void)
- {
- 	PyObject *mod;
- 	PyObject *submodule;
--	PyObject *sys_modules = PyThreadState_GET()->interp->modules;
-+	PyObject *sys_modules = PyImport_GetModuleDict();
- 
- 	BPy_BM_init_types();
- 	BPy_BM_init_types_select();
-diff --git a/source/blender/python/generic/idprop_py_api.c b/source/blender/python/generic/idprop_py_api.c
-index 4d4d5232800..8bed0f28cba 100644
---- a/source/blender/python/generic/idprop_py_api.c
-+++ b/source/blender/python/generic/idprop_py_api.c
-@@ -1795,7 +1795,7 @@ PyObject *BPyInit_idprop(void)
- {
- 	PyObject *mod;
- 	PyObject *submodule;
--	PyObject *sys_modules = PyThreadState_GET()->interp->modules;
-+	PyObject *sys_modules = PyImport_GetModuleDict();
- 
- 	mod = PyModule_Create(&IDProp_module_def);
- 
-diff --git a/source/blender/python/intern/bpy_interface.c b/source/blender/python/intern/bpy_interface.c
-index 7ca087e4993..123c938b921 100644
---- a/source/blender/python/intern/bpy_interface.c
-+++ b/source/blender/python/intern/bpy_interface.c
-@@ -537,7 +537,7 @@ static bool python_script_exec(
- 
- 	if (py_dict) {
- #ifdef PYMODULE_CLEAR_WORKAROUND
--		PyModuleObject *mmod = (PyModuleObject *)PyDict_GetItemString(PyThreadState_GET()->interp->modules, "__main__");
-+		PyModuleObject *mmod = (PyModuleObject *)PyDict_GetItemString(PyImport_GetModuleDict(), "__main__");
- 		PyObject *dict_back = mmod->md_dict;
- 		/* freeing the module will clear the namespace,
- 		 * gives problems running classes defined in this namespace being used later. */
-diff --git a/source/blender/python/intern/gpu.c b/source/blender/python/intern/gpu.c
-index 43796dc9474..d902b6838f4 100644
---- a/source/blender/python/intern/gpu.c
-+++ b/source/blender/python/intern/gpu.c
-@@ -326,7 +326,7 @@ PyObject *GPU_initPython(void)
- {
- 	PyObject *module;
- 	PyObject *submodule;
--	PyObject *sys_modules = PyThreadState_GET()->interp->modules;
-+	PyObject *sys_modules = PyImport_GetModuleDict();
- 
- 	module = PyInit_gpu();
- 
-@@ -337,6 +337,6 @@ PyObject *GPU_initPython(void)
- 	PyDict_SetItem(sys_modules, PyModule_GetNameObject(submodule), submodule);
- 	Py_INCREF(submodule);
- 
--	PyDict_SetItem(PyImport_GetModuleDict(), PyModule_GetNameObject(module), module);
-+	PyDict_SetItem(sys_modules, PyModule_GetNameObject(module), module);
- 	return module;
- }
-diff --git a/source/blender/python/mathutils/mathutils.c b/source/blender/python/mathutils/mathutils.c
-index a3a4e7f313b..f021d456b3a 100644
---- a/source/blender/python/mathutils/mathutils.c
-+++ b/source/blender/python/mathutils/mathutils.c
-@@ -615,7 +615,7 @@ PyMODINIT_FUNC PyInit_mathutils(void)
- {
- 	PyObject *mod;
- 	PyObject *submodule;
--	PyObject *sys_modules = PyThreadState_GET()->interp->modules;
-+	PyObject *sys_modules = PyImport_GetModuleDict();
- 
- 	if (PyType_Ready(&vector_Type) < 0)
- 		return NULL;
-diff --git a/source/blender/python/mathutils/mathutils_noise.c b/source/blender/python/mathutils/mathutils_noise.c
-index 839d1ffc588..834322c0aed 100644
---- a/source/blender/python/mathutils/mathutils_noise.c
-+++ b/source/blender/python/mathutils/mathutils_noise.c
-@@ -845,6 +845,7 @@ static struct PyModuleDef M_Noise_module_def = {
- /*----------------------------MODULE INIT-------------------------*/
- PyMODINIT_FUNC PyInit_mathutils_noise(void)
- {
-+	PyObject *sys_modules = PyImport_GetModuleDict();
- 	PyObject *submodule = PyModule_Create(&M_Noise_module_def);
- 	PyObject *item_types, *item_metrics;
- 
-@@ -852,11 +853,11 @@ PyMODINIT_FUNC PyInit_mathutils_noise(void)
- 	setRndSeed(0);
- 
- 	PyModule_AddObject(submodule, "types", (item_types = PyInit_mathutils_noise_types()));
--	PyDict_SetItemString(PyThreadState_GET()->interp->modules, "noise.types", item_types);
-+	PyDict_SetItemString(sys_modules, "noise.types", item_types);
- 	Py_INCREF(item_types);
- 
- 	PyModule_AddObject(submodule, "distance_metrics", (item_metrics = PyInit_mathutils_noise_metrics()));
--	PyDict_SetItemString(PyThreadState_GET()->interp->modules, "noise.distance_metrics", item_metrics);
-+	PyDict_SetItemString(sys_modules, "noise.distance_metrics", item_metrics);
- 	Py_INCREF(item_metrics);
- 
- 	return submodule;
-diff --git a/source/gameengine/Ketsji/KX_PythonInit.cpp b/source/gameengine/Ketsji/KX_PythonInit.cpp
-index 251273cf7a8..9611a4ea49b 100644
---- a/source/gameengine/Ketsji/KX_PythonInit.cpp
-+++ b/source/gameengine/Ketsji/KX_PythonInit.cpp
-@@ -2234,7 +2234,7 @@ PyMODINIT_FUNC initBGE(void)
- {
- 	PyObject *mod;
- 	PyObject *submodule;
--	PyObject *sys_modules = PyThreadState_GET()->interp->modules;
-+	PyObject *sys_modules = PyImport_GetModuleDict();
- 	const char *mod_full;
- 
- 	mod = PyModule_Create(&BGE_module_def);
--- 
-2.25.0
-
diff --git a/gnu/packages/patches/bubblewrap-fix-locale-in-tests.patch b/gnu/packages/patches/bubblewrap-fix-locale-in-tests.patch
new file mode 100644
index 0000000000..bd5924ef87
--- /dev/null
+++ b/gnu/packages/patches/bubblewrap-fix-locale-in-tests.patch
@@ -0,0 +1,34 @@
+From 9282223de4b511aeda3b7d2caf3810a56a865710 Mon Sep 17 00:00:00 2001
+From: kiasoc5 <kiasoc5@tutanota.com>
+Date: Mon, 10 Jan 2022 14:16:32 -0500
+Subject: [PATCH] Use C locale unconditionally for tests.
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The ‘en_US.utf8’ locale is available. However, the ‘locale -a’ command won’t list it.
+---
+ tests/libtest-core.sh | 7 +------
+ 1 file changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/tests/libtest-core.sh b/tests/libtest-core.sh
+index 9632e90..82951dd 100644
+--- a/tests/libtest-core.sh
++++ b/tests/libtest-core.sh
+@@ -41,12 +41,7 @@ assert_not_reached () {
+ #
+ # If we can't find the locale command assume we have support for C.UTF-8
+ # (e.g. musl based systems)
+-if type -p locale >/dev/null; then
+-    export LC_ALL=$(locale -a | grep -iEe '^(C|en_US)\.(UTF-8|utf8)$' | head -n1 || true)
+-    if [ -z "${LC_ALL}" ]; then fatal "Can't find suitable UTF-8 locale"; fi
+-else
+-    export LC_ALL=C.UTF-8
+-fi
++export LC_ALL=en_US.utf8
+ # A GNU extension, used whenever LC_ALL is not C
+ unset LANGUAGE
+ 
+-- 
+2.34.1
+
diff --git a/gnu/packages/patches/c++-gsl-move-array-bounds-tests.patch b/gnu/packages/patches/c++-gsl-move-array-bounds-tests.patch
new file mode 100644
index 0000000000..0629212688
--- /dev/null
+++ b/gnu/packages/patches/c++-gsl-move-array-bounds-tests.patch
@@ -0,0 +1,126 @@
+Description: Move tests that trigger -Warray-bounds to separate compilation unit
+ GCC 10 is now smart enough to detect violation of array boundaries that tests
+ are actually tested. Along with -Werror this led to tests failure, so I move
+ such tests to another compilation unit to have the warning deactivated for
+ only these tests.
+Bug-Debian: https://bugs.debian.org/966895
+Author: Nicholas Guriev <guriev-ns@ya.ru>
+Last-Modified: Wed, 19 Aug 2020 08:55:52 +0300
+
+--- a/tests/CMakeLists.txt
++++ b/tests/CMakeLists.txt
+@@ -179,6 +179,7 @@ add_gsl_test(owner_tests)
+ add_gsl_test(byte_tests)
+ add_gsl_test(algorithm_tests)
+ add_gsl_test(strict_notnull_tests)
++add_gsl_test(array_bounds)
+ 
+ 
+ # No exception tests
+--- /dev/null
++++ b/tests/array_bounds.cpp
+@@ -0,0 +1,68 @@
++///////////////////////////////////////////////////////////////////////////////
++//
++// Copyright (c) 2015 Microsoft Corporation. All rights reserved.
++//
++// This code is licensed under the MIT License (MIT).
++//
++// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
++// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
++// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
++// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
++// THE SOFTWARE.
++//
++///////////////////////////////////////////////////////////////////////////////
++
++#ifdef __GNUC__
++#pragma GCC diagnostic warning "-Warray-bounds"
++#endif // __GNUC__
++
++#include <gtest/gtest.h>
++
++#include <gsl/multi_span> // for gsl::multi_span
++
++namespace gsl
++{
++struct fail_fast;
++} // namespace gsl
++
++namespace
++{
++static constexpr char deathstring[] = "Expected Death";
++} // namespace
++
++TEST(array_bounds, subspan_from_multi_span_test)
++{
++    int arr[5] = {1, 2, 3, 4, 5};
++    gsl::multi_span<int> av = arr;
++
++    std::set_terminate([] {
++        std::cerr << "Expected Death. subspan";
++        std::abort();
++    });
++
++    EXPECT_DEATH(av.subspan(6).length(), deathstring);
++}
++
++TEST(array_bounds, strided_span_bounds_from_strided_span_tests)
++{
++    int arr[] = {0, 1, 2, 3};
++    gsl::multi_span<int> av(arr);
++
++    std::set_terminate([] {
++        std::cerr << "Expected Death. strided_span_bounds";
++        std::abort();
++    });
++
++    // incorrect sections
++    EXPECT_DEATH(av.section(0, 0)[0], deathstring);
++    EXPECT_DEATH(av.section(1, 0)[0], deathstring);
++    EXPECT_DEATH(av.section(1, 1)[1], deathstring);
++
++    EXPECT_DEATH(av.section(2, 5), deathstring);
++    EXPECT_DEATH(av.section(5, 2), deathstring);
++    EXPECT_DEATH(av.section(5, 0), deathstring);
++    EXPECT_DEATH(av.section(0, 5), deathstring);
++    EXPECT_DEATH(av.section(5, 5), deathstring);
++}
+--- a/tests/multi_span_tests.cpp
++++ b/tests/multi_span_tests.cpp
+@@ -1042,10 +1042,6 @@ TEST(multi_span_test, subspan)
+         EXPECT_TRUE(av.subspan(1).length() == 4);
+         EXPECT_TRUE(av.subspan(4).length() == 1);
+         EXPECT_TRUE(av.subspan(5).length() == 0);
+-        // Disabled test instead of fixing since multi_span is deprecated. (PR#835)
+-#if !(defined(__GNUC__) && __GNUC__ == 8)
+-        EXPECT_DEATH(av.subspan(6).length(), deathstring);
+-#endif
+         auto av2 = av.subspan(1);
+         for (int i = 0; i < 4; ++i) EXPECT_TRUE(av2[i] == i + 2);
+     }
+--- a/tests/strided_span_tests.cpp
++++ b/tests/strided_span_tests.cpp
+@@ -403,20 +403,6 @@ TEST(strided_span_tests, strided_span_bo
+     });
+ 
+     {
+-        // incorrect sections
+-
+-        EXPECT_DEATH(av.section(0, 0)[0], deathstring);
+-        EXPECT_DEATH(av.section(1, 0)[0], deathstring);
+-        EXPECT_DEATH(av.section(1, 1)[1], deathstring);
+-
+-        EXPECT_DEATH(av.section(2, 5), deathstring);
+-        EXPECT_DEATH(av.section(5, 2), deathstring);
+-        EXPECT_DEATH(av.section(5, 0), deathstring);
+-        EXPECT_DEATH(av.section(0, 5), deathstring);
+-        EXPECT_DEATH(av.section(5, 5), deathstring);
+-    }
+-
+-    {
+         // zero stride
+         strided_span<int, 1> sav{av, {{4}, {}}};
+         EXPECT_TRUE(sav[0] == 0);
diff --git a/gnu/packages/patches/cabal-install-base16-bytestring1.0.patch b/gnu/packages/patches/cabal-install-base16-bytestring1.0.patch
new file mode 100644
index 0000000000..998bf08718
--- /dev/null
+++ b/gnu/packages/patches/cabal-install-base16-bytestring1.0.patch
@@ -0,0 +1,29 @@
+Restore compatibility with newer version of base16-bytestring.
+
+Taken from https://raw.githubusercontent.com/archlinux/svntogit-community/packages/trunk/cabal-install-base16-bytestring1.0.patch
+
+diff --git a/Distribution/Client/HashValue.hs b/Distribution/Client/HashValue.hs
+index 54b8aee9e..11e647c1c 100644
+--- a/Distribution/Client/HashValue.hs
++++ b/Distribution/Client/HashValue.hs
+@@ -1,3 +1,4 @@
++{-# LANGUAGE CPP          #-}
+ {-# LANGUAGE DeriveDataTypeable #-}
+ {-# LANGUAGE DeriveGeneric      #-}
+ module Distribution.Client.HashValue (
+@@ -72,10 +73,14 @@ hashFromTUF (Sec.Hash hashstr) =
+     --TODO: [code cleanup] either we should get TUF to use raw bytestrings or
+     -- perhaps we should also just use a base16 string as the internal rep.
+     case Base16.decode (BS.pack hashstr) of
++#if MIN_VERSION_base16_bytestring(1,0,0)
++      Right hash -> HashValue hash
++      Left _ -> error "hashFromTUF: cannot decode base16"
++#else
+       (hash, trailing) | not (BS.null hash) && BS.null trailing
+         -> HashValue hash
+       _ -> error "hashFromTUF: cannot decode base16 hash"
+-
++#endif
+ 
+ -- | Truncate a 32 byte SHA256 hash to
+ --
diff --git a/gnu/packages/patches/cabal-install-ghc8.10.patch b/gnu/packages/patches/cabal-install-ghc8.10.patch
new file mode 100644
index 0000000000..67c0953058
--- /dev/null
+++ b/gnu/packages/patches/cabal-install-ghc8.10.patch
@@ -0,0 +1,393 @@
+From ac9b41eef3c781ce188ded2551f98fe75152e30c Mon Sep 17 00:00:00 2001
+From: Oleg Grenrus <oleg.grenrus@iki.fi>
+Date: Tue, 14 Apr 2020 11:31:34 +0300
+Subject: [PATCH] GHC-8.10 support for 3.2
+
+Includes cherry-picked commits:
+
+- Test cabal-install with GHC-8.10 #6709
+- Add GHC-8.10.1 job. Only tests Cabal-the-lib part atm. #6617
+
+Also add topHandler' signature.
+---
+ .docker/validate-8.10.1.dockerfile            |  60 ++++++
+ .github/workflows/artifacts.yml               |   6 +-
+ .github/workflows/bootstrap.yml               |   4 +-
+ .github/workflows/linux.yml                   | 179 ++++++++++++------
+ .github/workflows/macos.yml                   |  40 ++--
+ .github/workflows/quick-jobs.yml              |   4 +-
+ .github/workflows/windows.yml                 | 117 +++++++++++-
+ .../Distribution/PackageDescription/Quirks.hs |  19 +-
+ Makefile                                      |   4 +
+ boot/ci-artifacts.template.yml                |   6 +-
+ boot/ci-bootstrap.template.yml                |   4 +-
+ boot/ci-linux.template.yml                    |   8 +-
+ boot/ci-macos.template.yml                    |   7 +-
+ boot/ci-quick-jobs.template.yml               |   4 +-
+ boot/ci-windows.template.yml                  |   8 +-
+ cabal-dev-scripts/src/GenValidate.hs          |  33 ++--
+ Distribution/Client/CmdSdist.hs |   3 +
+ .../Distribution/Client/FetchUtils.hs         |   4 +-
+ .../Distribution/Client/IndexUtils.hs         |   2 +-
+ Distribution/Client/Sandbox.hs  |   5 +-
+ .../Distribution/Client/TargetSelector.hs     |   2 +-
+ Distribution/Client/Update.hs   |   4 +-
+ .../Distribution/Client/Utils/Json.hs         |  13 +-
+ .../Distribution/Solver/Modular/Assignment.hs |  11 +-
+ .../Distribution/Solver/Modular/Builder.hs    |  10 +-
+ .../Distribution/Solver/Modular/Index.hs      |   6 +-
+ .../Solver/Modular/IndexConversion.hs         |   8 +-
+ .../Distribution/Solver/Modular/Solver.hs     |  12 +-
+ .../Distribution/Solver/Modular/Validate.hs   |   5 +-
+ bootstrap.sh                    |   6 +-
+ cabal-install.cabal             |   4 +-
+ cabal-install.cabal.pp          |   4 +-
+ .../targets/complex/q/q.cabal                 |   3 +-
+ cabal-testsuite/cabal-testsuite.cabal         |   4 +-
+ validate.sh                                   |  21 +-
+ 35 files changed, 461 insertions(+), 169 deletions(-)
+ create mode 100644 .docker/validate-8.10.1.dockerfile
+diff --git a/Distribution/Client/CmdSdist.hs b/Distribution/Client/CmdSdist.hs
+index 9ce0c80100e..a22317004c4 100644
+--- a/Distribution/Client/CmdSdist.hs
++++ b/Distribution/Client/CmdSdist.hs
+@@ -237,7 +237,10 @@ packageToSdist verbosity projectRootDir format outputFile pkg = do
+         (norm NoExec -> nonexec, norm Exec -> exec) <-
+            listPackageSources verbosity (flattenPackageDescription $ packageDescription pkg) knownSuffixHandlers
+ 
++        print $ map snd exec
++        print $ map snd nonexec
+         let files =  nub . sortOn snd $ nonexec ++ exec
++        print files
+ 
+         case format of
+             SourceList nulSep -> do
+diff --git a/Distribution/Client/FetchUtils.hs b/Distribution/Client/FetchUtils.hs
+index e9a31a91f84..4e5e581f9ec 100644
+--- a/Distribution/Client/FetchUtils.hs
++++ b/Distribution/Client/FetchUtils.hs
+@@ -176,8 +176,8 @@ fetchRepoTarball verbosity' repoCtxt repo pkgid = do
+     verbosity = verboseUnmarkOutput verbosity'
+ 
+     downloadRepoPackage = case repo of
+-      RepoLocal{..} -> return (packageFile repo pkgid)
+-      RepoLocalNoIndex{..} -> return (packageFile repo pkgid)
++      RepoLocal{} -> return (packageFile repo pkgid)
++      RepoLocalNoIndex{} -> return (packageFile repo pkgid)
+ 
+       RepoRemote{..} -> do
+         transport <- repoContextGetTransport repoCtxt
+diff --git a/Distribution/Client/IndexUtils.hs b/Distribution/Client/IndexUtils.hs
+index a76becc05ba..bf0ff7cf5ba 100644
+--- a/Distribution/Client/IndexUtils.hs
++++ b/Distribution/Client/IndexUtils.hs
+@@ -634,7 +634,7 @@ withIndexEntries
+     -> ([IndexCacheEntry] -> IO a)
+     -> ([NoIndexCacheEntry] -> IO a)
+     -> IO a
+-withIndexEntries _ (RepoIndex repoCtxt repo@RepoSecure{..}) callback _ =
++withIndexEntries _ (RepoIndex repoCtxt repo@RepoSecure{}) callback _ =
+     repoContextWithSecureRepo repoCtxt repo $ \repoSecure ->
+       Sec.withIndex repoSecure $ \Sec.IndexCallbacks{..} -> do
+         -- Incrementally (lazily) read all the entries in the tar file in order,
+diff --git a/Distribution/Client/Sandbox.hs b/Distribution/Client/Sandbox.hs
+index 66b415d7239..14bad3f2135 100644
+--- a/Distribution/Client/Sandbox.hs
++++ b/Distribution/Client/Sandbox.hs
+@@ -666,7 +666,7 @@ reinstallAddSourceDeps :: Verbosity
+                           -> FilePath
+                           -> IO WereDepsReinstalled
+ reinstallAddSourceDeps verbosity configFlags' configExFlags
+-                       installFlags globalFlags sandboxDir = topHandler' $ do
++                       installFlags globalFlags sandboxDir = topHandlerWith errorMsg $ do
+   let sandboxDistPref     = sandboxBuildDir sandboxDir
+       configFlags         = configFlags'
+                             { configDistPref  = Flag sandboxDistPref }
+@@ -710,7 +710,8 @@ reinstallAddSourceDeps verbosity configFlags' configExFlags
+         ++ "offending packages or recreating the sandbox."
+       logMsg message rest = debugNoWrap verbosity message >> rest
+ 
+-      topHandler' = topHandlerWith $ \_ -> do
++      errorMsg :: a -> IO WereDepsReinstalled
++      errorMsg _ = do
+         warn verbosity "Couldn't reinstall some add-source dependencies."
+         -- Here we can't know whether any deps have been reinstalled, so we have
+         -- to be conservative.
+diff --git a/Distribution/Client/TargetSelector.hs b/Distribution/Client/TargetSelector.hs
+index 23d92f580fd..f8f683d9875 100644
+--- a/Distribution/Client/TargetSelector.hs
++++ b/Distribution/Client/TargetSelector.hs
+@@ -222,7 +222,7 @@ readTargetSelectorsWith :: (Applicative m, Monad m) => DirActions m
+                         -> Maybe ComponentKindFilter
+                         -> [String]
+                         -> m (Either [TargetSelectorProblem] [TargetSelector])
+-readTargetSelectorsWith dirActions@DirActions{..} pkgs mfilter targetStrs =
++readTargetSelectorsWith dirActions@DirActions{} pkgs mfilter targetStrs =
+     case parseTargetStrings targetStrs of
+       ([], usertargets) -> do
+         usertargets' <- mapM (getTargetStringFileStatus dirActions) usertargets
+diff --git a/Distribution/Client/Update.hs b/Distribution/Client/Update.hs
+index 52bb1f76c96..8ded78b9d2e 100644
+--- a/Distribution/Client/Update.hs
++++ b/Distribution/Client/Update.hs
+@@ -73,8 +73,8 @@ updateRepo :: Verbosity -> UpdateFlags -> RepoContext -> Repo -> IO ()
+ updateRepo verbosity updateFlags repoCtxt repo = do
+   transport <- repoContextGetTransport repoCtxt
+   case repo of
+-    RepoLocal{..} -> return ()
+-    RepoLocalNoIndex{..} -> return ()
++    RepoLocal{} -> return ()
++    RepoLocalNoIndex{} -> return ()
+     RepoRemote{..} -> do
+       downloadResult <- downloadIndex transport verbosity repoRemote repoLocalDir
+       case downloadResult of
+diff --git a/Distribution/Client/Utils/Json.hs b/Distribution/Client/Utils/Json.hs
+index 89a13af87a4..01d5753136b 100644
+--- a/Distribution/Client/Utils/Json.hs
++++ b/Distribution/Client/Utils/Json.hs
+@@ -15,12 +15,9 @@ module Distribution.Client.Utils.Json
+     )
+     where
+ 
+-import Data.Char
+-import Data.Int
+-import Data.String
+-import Data.Word
+-import Data.List
+-import Data.Monoid
++import Distribution.Client.Compat.Prelude
++
++import Data.Char (intToDigit)
+ 
+ import Data.ByteString.Builder (Builder)
+ import qualified Data.ByteString.Builder as BB
+@@ -135,13 +132,13 @@ encodeArrayBB :: [Value] -> Builder
+ encodeArrayBB [] = "[]"
+ encodeArrayBB jvs = BB.char8 '[' <> go jvs <> BB.char8 ']'
+   where
+-    go = Data.Monoid.mconcat . intersperse (BB.char8 ',') . map encodeValueBB
++    go = mconcat . intersperse (BB.char8 ',') . map encodeValueBB
+ 
+ encodeObjectBB :: Object -> Builder
+ encodeObjectBB [] = "{}"
+ encodeObjectBB jvs = BB.char8 '{' <> go jvs <> BB.char8 '}'
+   where
+-    go = Data.Monoid.mconcat . intersperse (BB.char8 ',') . map encPair
++    go = mconcat . intersperse (BB.char8 ',') . map encPair
+     encPair (l,x) = encodeStringBB l <> BB.char8 ':' <> encodeValueBB x
+ 
+ encodeStringBB :: String -> Builder
+diff --git a/Distribution/Solver/Modular/Assignment.hs b/Distribution/Solver/Modular/Assignment.hs
+index be5e63bfbc1..b05a099ec5a 100644
+--- a/Distribution/Solver/Modular/Assignment.hs
++++ b/Distribution/Solver/Modular/Assignment.hs
+@@ -9,10 +9,11 @@ module Distribution.Solver.Modular.Assignment
+ import Prelude ()
+ import Distribution.Solver.Compat.Prelude hiding (pi)
+ 
+-import Data.Array as A
+-import Data.List as L
+-import Data.Map as M
+-import Data.Maybe
++import qualified Data.Array as A
++import qualified Data.List as L
++import qualified Data.Map as M
++
++import Data.Maybe (fromJust)
+ 
+ import Distribution.PackageDescription (FlagAssignment, mkFlagAssignment) -- from Cabal
+ 
+@@ -79,7 +80,7 @@ toCPs (A pa fa sa) rdm =
+     -- Dependencies per package.
+     depp :: QPN -> [(Component, PI QPN)]
+     depp qpn = let v :: Vertex
+-                   v   = fromJust (cvm qpn)
++                   v   = fromJust (cvm qpn) -- TODO: why this is safe?
+                    dvs :: [(Component, Vertex)]
+                    dvs = tg A.! v
+                in L.map (\ (comp, dv) -> case vm dv of (_, x, _) -> (comp, PI x (pa M.! x))) dvs
+diff --git a/Distribution/Solver/Modular/Builder.hs b/Distribution/Solver/Modular/Builder.hs
+index eb11a36aa16..5d196f4fd9f 100644
+--- a/Distribution/Solver/Modular/Builder.hs
++++ b/Distribution/Solver/Modular/Builder.hs
+@@ -19,10 +19,10 @@ module Distribution.Solver.Modular.Builder (
+ -- flag-guarded dependencies, we cannot introduce them immediately. Instead, we
+ -- store the entire dependency.
+ 
+-import Data.List as L
+-import Data.Map as M
+-import Data.Set as S
+-import Prelude hiding (sequence, mapM)
++import qualified Data.List as L
++import qualified Data.Map as M
++import qualified Data.Set as S
++import Prelude
+ 
+ import qualified Distribution.Solver.Modular.ConflictSet as CS
+ import Distribution.Solver.Modular.Dependency
+@@ -55,7 +55,7 @@ data BuildState = BS {
+ }
+ 
+ -- | Map of available linking targets.
+-type LinkingState = Map (PN, I) [PackagePath]
++type LinkingState = M.Map (PN, I) [PackagePath]
+ 
+ -- | Extend the set of open goals with the new goals listed.
+ --
+diff --git a/Distribution/Solver/Modular/Index.hs b/Distribution/Solver/Modular/Index.hs
+index fdddfc8237a..ac60fec7d65 100644
+--- a/Distribution/Solver/Modular/Index.hs
++++ b/Distribution/Solver/Modular/Index.hs
+@@ -6,10 +6,12 @@ module Distribution.Solver.Modular.Index
+     , mkIndex
+     ) where
+ 
+-import Data.List as L
+-import Data.Map as M
+ import Prelude hiding (pi)
+ 
++import Data.Map (Map)
++import qualified Data.List as L
++import qualified Data.Map as M
++
+ import Distribution.Solver.Modular.Dependency
+ import Distribution.Solver.Modular.Flag
+ import Distribution.Solver.Modular.Package
+diff --git a/Distribution/Solver/Modular/IndexConversion.hs b/Distribution/Solver/Modular/IndexConversion.hs
+index c9565c80dba..8e9ef614184 100644
+--- a/Distribution/Solver/Modular/IndexConversion.hs
++++ b/Distribution/Solver/Modular/IndexConversion.hs
+@@ -2,12 +2,12 @@ module Distribution.Solver.Modular.IndexConversion
+     ( convPIs
+     ) where
+ 
+-import Data.List as L
++import qualified Data.List as L
+ import Data.Map.Strict (Map)
+ import qualified Data.Map.Strict as M
+-import Data.Maybe
++import Data.Maybe (mapMaybe, fromMaybe, maybeToList)
+ import Data.Monoid as Mon
+-import Data.Set as S
++import qualified Data.Set as S
+ 
+ import Distribution.Compiler
+ import Distribution.InstalledPackageInfo as IPI
+@@ -330,7 +330,7 @@ flagInfo (StrongFlags strfl) =
+ 
+ -- | Internal package names, which should not be interpreted as true
+ -- dependencies.
+-type IPNs = Set PN
++type IPNs = S.Set PN
+ 
+ -- | Convenience function to delete a 'Dependency' if it's
+ -- for a 'PN' that isn't actually real.
+diff --git a/Distribution/Solver/Modular/Solver.hs b/Distribution/Solver/Modular/Solver.hs
+index 32452550556..e6aa1fb4374 100644
+--- a/Distribution/Solver/Modular/Solver.hs
++++ b/Distribution/Solver/Modular/Solver.hs
+@@ -9,9 +9,9 @@ module Distribution.Solver.Modular.Solver
+     , PruneAfterFirstSuccess(..)
+     ) where
+ 
+-import Data.Map as M
+-import Data.List as L
+-import Data.Set as S
++import qualified Data.Map as M
++import qualified Data.List as L
++import qualified Data.Set as S
+ import Distribution.Verbosity
+ 
+ import Distribution.Compiler (CompilerInfo)
+@@ -91,8 +91,8 @@ solve :: SolverConfig                         -- ^ solver parameters
+       -> Index                                -- ^ all available packages as an index
+       -> PkgConfigDb                          -- ^ available pkg-config pkgs
+       -> (PN -> PackagePreferences)           -- ^ preferences
+-      -> Map PN [LabeledPackageConstraint]    -- ^ global constraints
+-      -> Set PN                               -- ^ global goals
++      -> M.Map PN [LabeledPackageConstraint]  -- ^ global constraints
++      -> S.Set PN                             -- ^ global goals
+       -> RetryLog Message SolverFailure (Assignment, RevDepMap)
+ solve sc cinfo idx pkgConfigDB userPrefs userConstraints userGoals =
+   explorePhase     $
+@@ -232,7 +232,7 @@ instance GSimpleTree (Tree d c) where
+ 
+       -- Show conflict set
+       goCS :: ConflictSet -> String
+-      goCS cs = "{" ++ (intercalate "," . L.map showVar . CS.toList $ cs) ++ "}"
++      goCS cs = "{" ++ (L.intercalate "," . L.map showVar . CS.toList $ cs) ++ "}"
+ #endif
+ 
+ -- | Replace all goal reasons with a dummy goal reason in the tree
+diff --git a/Distribution/Solver/Modular/Validate.hs b/Distribution/Solver/Modular/Validate.hs
+index 6195d101b02..a3dec6e1f67 100644
+--- a/Distribution/Solver/Modular/Validate.hs
++++ b/Distribution/Solver/Modular/Validate.hs
+@@ -15,11 +15,12 @@ module Distribution.Solver.Modular.Validate (validateTree) where
+ import Control.Applicative
+ import Control.Monad.Reader hiding (sequence)
+ import Data.Function (on)
+-import Data.List as L
+-import Data.Set as S
+ import Data.Traversable
+ import Prelude hiding (sequence)
+ 
++import qualified Data.List as L
++import qualified Data.Set as S
++
+ import Language.Haskell.Extension (Extension, Language)
+ 
+ import Data.Map.Strict as M
+diff --git a/bootstrap.sh b/bootstrap.sh
+index 077d7f4efd2..d5141660474 100755
+--- a/bootstrap.sh
++++ b/bootstrap.sh
+@@ -260,9 +260,9 @@ EDIT_DISTANCE_VER="0.2.2.1"; EDIT_DISTANCE_VER_REGEXP="0\.2\.2\.?"
+                        # 0.2.2.*
+ ED25519_VER="0.0.5.0"; ED25519_VER_REGEXP="0\.0\.?"
+                        # 0.0.*
+-HACKAGE_SECURITY_VER="0.6.0.0"; HACKAGE_SECURITY_VER_REGEXP="0\.6\."
+-                       # >= 0.7.0.0 && < 0.7
+-TAR_VER="0.5.1.0";     TAR_VER_REGEXP="0\.5\.([1-9]|1[0-9]|0\.[3-9]|0\.1[0-9])\.?"
++HACKAGE_SECURITY_VER="0.6.0.1"; HACKAGE_SECURITY_VER_REGEXP="0\.6\."
++                       # >= 0.6.0.0 && < 0.7
++TAR_VER="0.5.1.1";     TAR_VER_REGEXP="0\.5\.([1-9]|1[0-9]|0\.[3-9]|0\.1[0-9])\.?"
+                        # >= 0.5.0.3  && < 0.6
+ DIGEST_VER="0.0.1.2"; DIGEST_REGEXP="0\.0\.(1\.[2-9]|[2-9]\.?)"
+                        # >= 0.0.1.2 && < 0.1
+diff --git a/cabal-install.cabal b/cabal-install.cabal
+index 985ea9a5a69..c9d713c29fe 100644
+--- a/cabal-install.cabal
++++ b/cabal-install.cabal
+@@ -316,7 +316,7 @@ executable cabal
+     build-depends:
+         async      >= 2.0      && < 2.3,
+         array      >= 0.4      && < 0.6,
+-        base       >= 4.8      && < 4.14,
++        base       >= 4.8      && < 4.15,
+         base16-bytestring >= 0.1.1 && < 0.2,
+         binary     >= 0.7.3    && < 0.9,
+         bytestring >= 0.10.6.0 && < 0.11,
+@@ -341,7 +341,7 @@ executable cabal
+         time       >= 1.5.0.1  && < 1.10,
+         transformers >= 0.4.2.0 && < 0.6,
+         zlib       >= 0.5.3    && < 0.7,
+-        hackage-security >= 0.6.0.0 && < 0.7,
++        hackage-security >= 0.6.0.1 && < 0.7,
+         text       >= 1.2.3    && < 1.3,
+         parsec     >= 3.1.13.0 && < 3.2
+ 
+diff --git a/tests/IntegrationTests2/targets/complex/q/q.cabal b/tests/IntegrationTests2/targets/complex/q/q.cabal
+index 556fa4a4202..7ee22fcb28d 100644
+--- a/tests/IntegrationTests2/targets/complex/q/q.cabal
++++ b/tests/IntegrationTests2/targets/complex/q/q.cabal
+@@ -5,7 +5,8 @@ cabal-version: >= 1.2
+ 
+ library
+   exposed-modules: Q
+-  build-depends: base, filepath
++  -- we rely that filepath has filepath-tests component
++  build-depends: base, filepath >=1.4.0.0
+ 
+ executable buildable-false
+   main-is: Main.hs
diff --git a/gnu/packages/patches/calibre-fix-zeroconf.patch b/gnu/packages/patches/calibre-fix-zeroconf.patch
new file mode 100644
index 0000000000..d7d0f18667
--- /dev/null
+++ b/gnu/packages/patches/calibre-fix-zeroconf.patch
@@ -0,0 +1,38 @@
+Fix a build failure when upgrading zeroconf from 0.28.8 to 0.38.1:
+
+https://issues.guix.gnu.org/53247
+
+Patch copied from Gentoo:
+
+https://bugs.gentoo.org/800233#c5
+
+diff --color -Naru a/src/calibre/devices/smart_device_app/driver.py b/src/calibre/devices/smart_device_app/driver.py
+--- a/src/calibre/devices/smart_device_app/driver.py	2021-08-08 08:32:03.104016444 +0200
++++ b/src/calibre/devices/smart_device_app/driver.py	2021-08-08 08:33:30.699018403 +0200
+@@ -2040,13 +2040,6 @@
+ # Function to monkeypatch zeroconf to remove the 15 character name length restriction.
+ # Copied from https://github.com/jstasiak/python-zeroconf version 0.28.1
+ 
+-
+-from zeroconf import (BadTypeInNameException, _HAS_A_TO_Z,
+-                      _HAS_ONLY_A_TO_Z_NUM_HYPHEN_UNDERSCORE,
+-                      _HAS_ASCII_CONTROL_CHARS,
+-                      _HAS_ONLY_A_TO_Z_NUM_HYPHEN)
+-
+-
+ def service_type_name(type_: str, *, allow_underscores: bool = False) -> str:
+     """
+     Validate a fully qualified service name, instance or subtype. [rfc6763]
+@@ -2087,6 +2080,12 @@
+     :param type_: Type, SubType or service name to validate
+     :return: fully qualified service name (eg: _http._tcp.local.)
+     """
++
++    from zeroconf import (BadTypeInNameException, _HAS_A_TO_Z,
++                      _HAS_ONLY_A_TO_Z_NUM_HYPHEN_UNDERSCORE,
++                      _HAS_ASCII_CONTROL_CHARS,
++                      _HAS_ONLY_A_TO_Z_NUM_HYPHEN)
++
+     if not (type_.endswith('._tcp.local.') or type_.endswith('._udp.local.')):
+         raise BadTypeInNameException("Type '%s' must end with '._tcp.local.' or '._udp.local.'" % type_)
+ 
diff --git a/gnu/packages/patches/ccache-fix-basedir-test.patch b/gnu/packages/patches/ccache-fix-basedir-test.patch
deleted file mode 100644
index c5f6de7780..0000000000
--- a/gnu/packages/patches/ccache-fix-basedir-test.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From ad18f15287b83cee5a45b63e02b31c6a601a134f Mon Sep 17 00:00:00 2001
-From: Tobias Geerinckx-Rice <me@tobias.gr>
-Date: Mon, 27 Sep 2021 19:36:30 +0200
-Subject: [PATCH] gnu: ccache: Fix basedir test.
-
-Applied upstream.
----
- test/suites/basedir.bash | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/test/suites/basedir.bash b/test/suites/basedir.bash
-index 479c632..34e5cb7 100644
---- a/test/suites/basedir.bash
-+++ b/test/suites/basedir.bash
-@@ -269,7 +269,7 @@ EOF
- EOF
-     backdate test.h
- 
--    pwd="$(/bin/pwd -P)"
-+    pwd="$(pwd -P)"
-     $REAL_COMPILER -c $pwd/test.c 2>reference.stderr
- 
-     CCACHE_ABSSTDERR=1 CCACHE_BASEDIR="$pwd" $CCACHE_COMPILE -c $pwd/test.c 2>ccache.stderr
--- 
-2.33.0
-
diff --git a/gnu/packages/patches/cdrkit-libre-cross-compile.patch b/gnu/packages/patches/cdrkit-libre-cross-compile.patch
new file mode 100644
index 0000000000..09c34b8c0a
--- /dev/null
+++ b/gnu/packages/patches/cdrkit-libre-cross-compile.patch
@@ -0,0 +1,32 @@
+Patch extracted from a set of patches to cross-compile ffmeg and dependencies for mingw-w64.
+https://github.com/Warblefly/MultimediaTools-mingw-w64/commit/01e30a17637b67afd65c1e24302f8daf94b19b32#diff-503bd595ad2a49840cc56acdb3432487a20a0acb7981ce83be51fe311216de8f
+
+diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt
+index 99a69fd..e5ba8a7 100644
+--- a/include/CMakeLists.txt
++++ b/include/CMakeLists.txt
+@@ -35,8 +35,6 @@ endif(VA_LIST_IS_ARRAY)
+ INCLUDE(TestBigEndian)
+ TEST_BIG_ENDIAN(WORDS_BIGENDIAN)
+ 
+-TRY_RUN(BITFIELDS_HTOL TEST_DUMMY ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/test_BITFIELDS_HTOL.c)
+-
+ INCLUDE(CheckIncludeFiles)
+ 
+ #SET(CMAKE_REQUIRED_INCLUDES "/usr/include;/usr/local/include")
+diff --git a/include/xconfig.h.in b/include/xconfig.h.in
+index c130600..476c00b 100644
+--- a/include/xconfig.h.in
++++ b/include/xconfig.h.in
+@@ -233,7 +233,11 @@
+ /* If using network byte order             */
+ #cmakedefine WORDS_BIGENDIAN
+ /* If high bits come first in structures   */
+-#cmakedefine BITFIELDS_HTOL
++#ifdef WORDS_BIGENDIAN
++#define BITFIELDS_HTOL
++#else
++#define BITFIELDS_LTOH
++#endif
+ #define	HAVE_C_BIGENDIAN	/* Flag that WORDS_BIGENDIAN test was done */
+ #define	HAVE_C_BITFIELDS	/* Flag that BITFIELDS_HTOL test was done  */
diff --git a/gnu/packages/patches/ceph-boost-compat.patch b/gnu/packages/patches/ceph-boost-compat.patch
new file mode 100644
index 0000000000..1aecfbbed5
--- /dev/null
+++ b/gnu/packages/patches/ceph-boost-compat.patch
@@ -0,0 +1,18 @@
+Add extra includes required for Boost 1.75 and later.
+
+Taken from upstram:
+
+  https://github.com/ceph/ceph/commit/ebf3a0398f18eab67d2ba25e6a10b41ff140f6a4
+
+diff --git a/src/rgw/rgw_string.h b/src/rgw/rgw_string.h
+index 257daa9c1fe6e..90e64f98a2587 100644
+--- a/src/rgw/rgw_string.h
++++ b/src/rgw/rgw_string.h
+@@ -8,5 +8,7 @@
+ #include <stdlib.h>
+ #include <limits.h>
+ #include <string_view>
++#include <string>
++#include <stdexcept>
+ 
+ #include <boost/container/small_vector.hpp>
diff --git a/gnu/packages/patches/ceph-rocksdb-compat.patch b/gnu/packages/patches/ceph-rocksdb-compat.patch
new file mode 100644
index 0000000000..9fb9b0caeb
--- /dev/null
+++ b/gnu/packages/patches/ceph-rocksdb-compat.patch
@@ -0,0 +1,303 @@
+Adjust for newer versions of RocksDB.
+
+Taken from upstream:
+
+  https://github.com/ceph/ceph/pull/42815
+  https://github.com/ceph/ceph/commit/ff7f192ea3cf88ca1098bcf9396ff4f8ed1e8792.diff
+
+diff --git a/src/kv/rocksdb_cache/BinnedLRUCache.cc b/src/kv/rocksdb_cache/BinnedLRUCache.cc
+index 0d657883e92de..47c56e2ddd769 100644
+--- a/src/kv/rocksdb_cache/BinnedLRUCache.cc
++++ b/src/kv/rocksdb_cache/BinnedLRUCache.cc
+@@ -151,13 +151,20 @@ void BinnedLRUCacheShard::EraseUnRefEntries() {
+   }
+ }
+ 
+-void BinnedLRUCacheShard::ApplyToAllCacheEntries(void (*callback)(void*, size_t),
+-                                           bool thread_safe) {
++void BinnedLRUCacheShard::ApplyToAllCacheEntries(
++  const std::function<void(const rocksdb::Slice& key,
++                           void* value,
++                           size_t charge,
++                           DeleterFn)>& callback,
++  bool thread_safe)
++{
+   if (thread_safe) {
+     mutex_.lock();
+   }
+   table_.ApplyToAllCacheEntries(
+-      [callback](BinnedLRUHandle* h) { callback(h->value, h->charge); });
++    [callback](BinnedLRUHandle* h) {
++      callback(h->key(), h->value, h->charge, h->deleter);
++    });
+   if (thread_safe) {
+     mutex_.unlock();
+   }
+@@ -345,7 +352,7 @@ bool BinnedLRUCacheShard::Release(rocksdb::Cache::Handle* handle, bool force_era
+ 
+ rocksdb::Status BinnedLRUCacheShard::Insert(const rocksdb::Slice& key, uint32_t hash, void* value,
+                              size_t charge,
+-                             void (*deleter)(const rocksdb::Slice& key, void* value),
++                             DeleterFn deleter,
+                              rocksdb::Cache::Handle** handle, rocksdb::Cache::Priority priority) {
+   auto e = new BinnedLRUHandle();
+   rocksdb::Status s;
+@@ -464,6 +471,12 @@ std::string BinnedLRUCacheShard::GetPrintableOptions() const {
+   return std::string(buffer);
+ }
+ 
++DeleterFn BinnedLRUCacheShard::GetDeleter(rocksdb::Cache::Handle* h) const
++{
++  auto* handle = reinterpret_cast<BinnedLRUHandle*>(h);
++  return handle->deleter;
++}
++
+ BinnedLRUCache::BinnedLRUCache(CephContext *c, 
+                                size_t capacity, 
+                                int num_shard_bits,
+@@ -519,6 +532,13 @@ void BinnedLRUCache::DisownData() {
+ #endif  // !__SANITIZE_ADDRESS__
+ }
+ 
++#if (ROCKSDB_MAJOR >= 6 && ROCKSDB_MINOR >= 22)
++DeleterFn BinnedLRUCache::GetDeleter(Handle* handle) const
++{
++  return reinterpret_cast<const BinnedLRUHandle*>(handle)->deleter;
++}
++#endif
++
+ size_t BinnedLRUCache::TEST_GetLRUSize() {
+   size_t lru_size_of_all_shards = 0;
+   for (int i = 0; i < num_shards_; i++) {
+diff --git a/src/kv/rocksdb_cache/BinnedLRUCache.h b/src/kv/rocksdb_cache/BinnedLRUCache.h
+index 85608be0e5734..88bf4502e8927 100644
+--- a/src/kv/rocksdb_cache/BinnedLRUCache.h
++++ b/src/kv/rocksdb_cache/BinnedLRUCache.h
+@@ -56,7 +56,7 @@ std::shared_ptr<rocksdb::Cache> NewBinnedLRUCache(
+ 
+ struct BinnedLRUHandle {
+   void* value;
+-  void (*deleter)(const rocksdb::Slice&, void* value);
++  DeleterFn deleter;
+   BinnedLRUHandle* next_hash;
+   BinnedLRUHandle* next;
+   BinnedLRUHandle* prev;
+@@ -189,7 +189,7 @@ class alignas(CACHE_LINE_SIZE) BinnedLRUCacheShard : public CacheShard {
+   // Like Cache methods, but with an extra "hash" parameter.
+   virtual rocksdb::Status Insert(const rocksdb::Slice& key, uint32_t hash, void* value,
+                         size_t charge,
+-                        void (*deleter)(const rocksdb::Slice& key, void* value),
++                        DeleterFn deleter,
+                         rocksdb::Cache::Handle** handle,
+                         rocksdb::Cache::Priority priority) override;
+   virtual rocksdb::Cache::Handle* Lookup(const rocksdb::Slice& key, uint32_t hash) override;
+@@ -205,13 +205,19 @@ class alignas(CACHE_LINE_SIZE) BinnedLRUCacheShard : public CacheShard {
+   virtual size_t GetUsage() const override;
+   virtual size_t GetPinnedUsage() const override;
+ 
+-  virtual void ApplyToAllCacheEntries(void (*callback)(void*, size_t),
+-                                      bool thread_safe) override;
++  virtual void ApplyToAllCacheEntries(
++    const std::function<void(const rocksdb::Slice& key,
++                             void* value,
++                             size_t charge,
++                             DeleterFn)>& callback,
++    bool thread_safe) override;
+ 
+   virtual void EraseUnRefEntries() override;
+ 
+   virtual std::string GetPrintableOptions() const override;
+ 
++  virtual DeleterFn GetDeleter(rocksdb::Cache::Handle* handle) const override;
++
+   void TEST_GetLRUList(BinnedLRUHandle** lru, BinnedLRUHandle** lru_low_pri);
+ 
+   //  Retrieves number of elements in LRU, for unit test purpose only
+@@ -304,7 +310,9 @@ class BinnedLRUCache : public ShardedCache {
+   virtual size_t GetCharge(Handle* handle) const override;
+   virtual uint32_t GetHash(Handle* handle) const override;
+   virtual void DisownData() override;
+-
++#if (ROCKSDB_MAJOR >= 6 && ROCKSDB_MINOR >= 22)
++  virtual DeleterFn GetDeleter(Handle* handle) const override;
++#endif
+   //  Retrieves number of elements in LRU, for unit test purpose only
+   size_t TEST_GetLRUSize();
+   // Sets the high pri pool ratio
+diff --git a/src/kv/rocksdb_cache/ShardedCache.cc b/src/kv/rocksdb_cache/ShardedCache.cc
+index 367140a94d8be..6cbd89ad6472c 100644
+--- a/src/kv/rocksdb_cache/ShardedCache.cc
++++ b/src/kv/rocksdb_cache/ShardedCache.cc
+@@ -44,7 +44,7 @@ void ShardedCache::SetStrictCapacityLimit(bool strict_capacity_limit) {
+ }
+ 
+ rocksdb::Status ShardedCache::Insert(const rocksdb::Slice& key, void* value, size_t charge,
+-                            void (*deleter)(const rocksdb::Slice& key, void* value),
++                            DeleterFn deleter,
+                             rocksdb::Cache::Handle** handle, Priority priority) {
+   uint32_t hash = HashSlice(key);
+   return GetShard(Shard(hash))
+@@ -109,13 +109,36 @@ size_t ShardedCache::GetPinnedUsage() const {
+   return usage;
+ }
+ 
++#if (ROCKSDB_MAJOR >= 6 && ROCKSDB_MINOR >= 22)
++DeleterFn ShardedCache::GetDeleter(Handle* handle) const
++{
++  uint32_t hash = GetHash(handle);
++  return GetShard(Shard(hash))->GetDeleter(handle);
++}
++
++void ShardedCache::ApplyToAllEntries(
++    const std::function<void(const rocksdb::Slice& key, void* value, size_t charge,
++                             DeleterFn deleter)>& callback,
++    const ApplyToAllEntriesOptions& opts)
++{
++  int num_shards = 1 << num_shard_bits_;
++  for (int s = 0; s < num_shards; s++) {
++    GetShard(s)->ApplyToAllCacheEntries(callback, true /* thread_safe */);
++  }
++}
++#else
+ void ShardedCache::ApplyToAllCacheEntries(void (*callback)(void*, size_t),
+                                           bool thread_safe) {
+   int num_shards = 1 << num_shard_bits_;
+   for (int s = 0; s < num_shards; s++) {
+-    GetShard(s)->ApplyToAllCacheEntries(callback, thread_safe);
++    GetShard(s)->ApplyToAllCacheEntries(
++      [callback](const rocksdb::Slice&, void* value, size_t charge, DeleterFn) {
++        callback(value, charge);
++      },
++      thread_safe);
+   }
+ }
++#endif
+ 
+ void ShardedCache::EraseUnRefEntries() {
+   int num_shards = 1 << num_shard_bits_;
+@@ -131,7 +154,7 @@ std::string ShardedCache::GetPrintableOptions() const {
+   char buffer[kBufferSize];
+   {
+     std::lock_guard<std::mutex> l(capacity_mutex_);
+-    snprintf(buffer, kBufferSize, "    capacity : %" ROCKSDB_PRIszt "\n",
++    snprintf(buffer, kBufferSize, "    capacity : %zu\n",
+              capacity_);
+     ret.append(buffer);
+     snprintf(buffer, kBufferSize, "    num_shard_bits : %d\n", num_shard_bits_);
+diff --git a/src/kv/rocksdb_cache/ShardedCache.h b/src/kv/rocksdb_cache/ShardedCache.h
+index 4d64893ab1c7b..f98421a09a33a 100644
+--- a/src/kv/rocksdb_cache/ShardedCache.h
++++ b/src/kv/rocksdb_cache/ShardedCache.h
+@@ -14,6 +14,7 @@
+ #include <string>
+ #include <mutex>
+ 
++#include "rocksdb/version.h"
+ #include "rocksdb/cache.h"
+ #include "include/ceph_hash.h"
+ #include "common/PriorityCache.h"
+@@ -22,10 +23,11 @@
+ #ifndef CACHE_LINE_SIZE
+ #define CACHE_LINE_SIZE 64 // XXX arch-specific define 
+ #endif
+-#define ROCKSDB_PRIszt "zu"
+ 
+ namespace rocksdb_cache {
+ 
++using DeleterFn = void (*)(const rocksdb::Slice& key, void* value);
++
+ // Single cache shard interface.
+ class CacheShard {
+  public:
+@@ -34,7 +36,7 @@ class CacheShard {
+ 
+   virtual rocksdb::Status Insert(const rocksdb::Slice& key, uint32_t hash, void* value,
+                                  size_t charge,
+-                                 void (*deleter)(const rocksdb::Slice& key, void* value),
++                                 DeleterFn deleter,
+                                  rocksdb::Cache::Handle** handle, rocksdb::Cache::Priority priority) = 0;
+   virtual rocksdb::Cache::Handle* Lookup(const rocksdb::Slice& key, uint32_t hash) = 0;
+   virtual bool Ref(rocksdb::Cache::Handle* handle) = 0;
+@@ -44,10 +46,15 @@ class CacheShard {
+   virtual void SetStrictCapacityLimit(bool strict_capacity_limit) = 0;
+   virtual size_t GetUsage() const = 0;
+   virtual size_t GetPinnedUsage() const = 0;
+-  virtual void ApplyToAllCacheEntries(void (*callback)(void*, size_t),
+-                                      bool thread_safe) = 0;
++  virtual void ApplyToAllCacheEntries(
++    const std::function<void(const rocksdb::Slice& key,
++                             void* value,
++                             size_t charge,
++                             DeleterFn)>& callback,
++    bool thread_safe) = 0;
+   virtual void EraseUnRefEntries() = 0;
+   virtual std::string GetPrintableOptions() const { return ""; }
++  virtual DeleterFn GetDeleter(rocksdb::Cache::Handle* handle) const = 0;
+ };
+ 
+ // Generic cache interface which shards cache by hash of keys. 2^num_shard_bits
+@@ -57,34 +64,43 @@ class ShardedCache : public rocksdb::Cache, public PriorityCache::PriCache {
+  public:
+   ShardedCache(size_t capacity, int num_shard_bits, bool strict_capacity_limit);
+   virtual ~ShardedCache() = default;
++  // rocksdb::Cache
+   virtual const char* Name() const override = 0;
+-  virtual CacheShard* GetShard(int shard) = 0;
+-  virtual const CacheShard* GetShard(int shard) const = 0;
+-  virtual void* Value(Handle* handle) override = 0;
+-  virtual size_t GetCharge(Handle* handle) const = 0;
+-  virtual uint32_t GetHash(Handle* handle) const = 0;
+-  virtual void DisownData() override = 0;
+-
+-  virtual void SetCapacity(size_t capacity) override;
+-  virtual void SetStrictCapacityLimit(bool strict_capacity_limit) override;
+-
+   virtual rocksdb::Status Insert(const rocksdb::Slice& key, void* value, size_t charge,
+-                                 void (*deleter)(const rocksdb::Slice& key, void* value),
++                                 DeleterFn,
+                                  rocksdb::Cache::Handle** handle, Priority priority) override;
+   virtual rocksdb::Cache::Handle* Lookup(const rocksdb::Slice& key, rocksdb::Statistics* stats) override;
+   virtual bool Ref(rocksdb::Cache::Handle* handle) override;
+   virtual bool Release(rocksdb::Cache::Handle* handle, bool force_erase = false) override;
++  virtual void* Value(Handle* handle) override = 0;
+   virtual void Erase(const rocksdb::Slice& key) override;
+   virtual uint64_t NewId() override;
+-  virtual size_t GetCapacity() const override;
++  virtual void SetCapacity(size_t capacity) override;
++  virtual void SetStrictCapacityLimit(bool strict_capacity_limit) override;
+   virtual bool HasStrictCapacityLimit() const override;
++  virtual size_t GetCapacity() const override;
+   virtual size_t GetUsage() const override;
+   virtual size_t GetUsage(rocksdb::Cache::Handle* handle) const override;
+   virtual size_t GetPinnedUsage() const override;
++  virtual size_t GetCharge(Handle* handle) const = 0;
++#if (ROCKSDB_MAJOR >= 6 && ROCKSDB_MINOR >= 22)
++  virtual DeleterFn GetDeleter(Handle* handle) const override;
++#endif
++  virtual void DisownData() override = 0;
++#if (ROCKSDB_MAJOR >= 6 && ROCKSDB_MINOR >= 22)
++  virtual void ApplyToAllEntries(
++      const std::function<void(const rocksdb::Slice& key, void* value, size_t charge,
++                               DeleterFn deleter)>& callback,
++      const ApplyToAllEntriesOptions& opts) override;
++#else
+   virtual void ApplyToAllCacheEntries(void (*callback)(void*, size_t),
+                                       bool thread_safe) override;
++#endif
+   virtual void EraseUnRefEntries() override;
+   virtual std::string GetPrintableOptions() const override;
++  virtual CacheShard* GetShard(int shard) = 0;
++  virtual const CacheShard* GetShard(int shard) const = 0;
++  virtual uint32_t GetHash(Handle* handle) const = 0;
+ 
+   int GetNumShardBits() const { return num_shard_bits_; }
+ 
+@@ -120,7 +136,7 @@ class ShardedCache : public rocksdb::Cache, public PriorityCache::PriCache {
+ //    return Hash(s.data(), s.size(), 0);
+   }
+ 
+-  uint32_t Shard(uint32_t hash) {
++  uint32_t Shard(uint32_t hash) const {
+     // Note, hash >> 32 yields hash in gcc, not the zero we expect!
+     return (num_shard_bits_ > 0) ? (hash >> (32 - num_shard_bits_)) : 0;
+   }
diff --git a/gnu/packages/patches/cheese-vala-update.patch b/gnu/packages/patches/cheese-vala-update.patch
new file mode 100644
index 0000000000..cb18952ce4
--- /dev/null
+++ b/gnu/packages/patches/cheese-vala-update.patch
@@ -0,0 +1,180 @@
+Taken from upstream:
+https://gitlab.gnome.org/GNOME/cheese/-/commit/7cf6268e54620bbbe5e6e61800c50fb0cb4bea57.patch.
+
+From 7cf6268e54620bbbe5e6e61800c50fb0cb4bea57 Mon Sep 17 00:00:00 2001 From:
+=?UTF-8?q?Corentin=20No=C3=ABl?= <corentin@elementary.io> Date: Fri, 16 Oct
+2020 19:56:26 +0200 Subject: [PATCH] Change GLib.PtrArray into
+GLib.GenericArray
+
+This is the vala-friendly way of handling GPtrArray.
+Fix several memory leaks on the go and unnecessary reference increase.
+---
+ src/cheese-preferences.vala | 26 ++++++++++++--------------
+ src/cheese-window.vala      | 22 +++++++++++-----------
+ src/vapi/cheese-common.vapi |  2 +-
+ 3 files changed, 24 insertions(+), 26 deletions(-)
+
+diff --git a/src/cheese-preferences.vala b/src/cheese-preferences.vala
+index f56af7e0..80a92431 100644
+--- a/src/cheese-preferences.vala
++++ b/src/cheese-preferences.vala
+@@ -100,7 +100,7 @@ public PreferencesDialog (Cheese.Camera camera)
+    */
+   private void initialize_camera_devices ()
+   {
+-    unowned GLib.PtrArray devices = camera.get_camera_devices ();
++    GLib.GenericArray<unowned Cheese.CameraDevice> devices = camera.get_camera_devices ();
+     camera_model = new Gtk.ListStore (2, typeof (string), typeof (Cheese.CameraDevice));
+ 
+     source_combo.model = camera_model;
+@@ -357,13 +357,13 @@ public PreferencesDialog (Cheese.Camera camera)
+    */
+   private void on_camera_update_num_camera_devices ()
+   {
+-    unowned GLib.PtrArray devices = camera.get_camera_devices ();
+-    Cheese.CameraDevice   dev;
++    GLib.GenericArray<unowned Cheese.CameraDevice> devices = camera.get_camera_devices ();
++    unowned Cheese.CameraDevice   dev;
+ 
+     // Add (if) / Remove (else) a camera device.
+-    if (devices.len > camera_model.iter_n_children (null))
++    if (devices.length > camera_model.iter_n_children (null))
+     {
+-      dev = (Cheese.CameraDevice) devices.index (devices.len - 1);
++      dev = devices.get (devices.length - 1);
+       add_camera_device(dev);
+     }
+     else
+@@ -382,12 +382,11 @@ public PreferencesDialog (Cheese.Camera camera)
+       bool device_removed = false;
+       devices.foreach ((device) =>
+       {
+-        var old_device = (Cheese.CameraDevice) device;
+         Cheese.CameraDevice new_device;
+         camera_model.get (iter, 1, out new_device, -1);
+ 
+         // Found the device that was removed.
+-        if (old_device != new_device)
++        if (device != new_device)
+         {
+             remove_camera_device (iter, new_device, active_device);
+             device_removed = true;
+@@ -418,17 +417,16 @@ public PreferencesDialog (Cheese.Camera camera)
+    *
+    * @param device a Cheese.CameraDevice to add to the device combo box model
+    */
+-  private void add_camera_device (void *device)
++  private void add_camera_device (Cheese.CameraDevice device)
+   {
+     TreeIter iter;
+-    Cheese.CameraDevice dev = (Cheese.CameraDevice) device;
+ 
+     camera_model.append (out iter);
+     camera_model.set (iter,
+-                      0, dev.get_name (),
+-                      1, dev);
++                      0, device.get_name (),
++                      1, device);
+ 
+-    if (camera.get_selected_device () == dev)
++    if (camera.get_selected_device () == device)
+         source_combo.set_active_iter (iter);
+ 
+     if (camera_model.iter_n_children (null) > 1)
+@@ -445,12 +443,12 @@ public PreferencesDialog (Cheese.Camera camera)
+   private void remove_camera_device (TreeIter iter, Cheese.CameraDevice device_node,
+                              Cheese.CameraDevice active_device_node)
+   {
+-      unowned GLib.PtrArray devices = camera.get_camera_devices ();
++      GLib.GenericArray<unowned Cheese.CameraDevice> devices = camera.get_camera_devices ();
+ 
+       // Check if the camera that we want to remove, is the active one
+       if (device_node == active_device_node)
+       {
+-        if (devices.len > 0)
++        if (devices.length > 0)
+           set_new_available_camera_device (iter);
+         else
+           this.hide ();
+diff --git a/src/cheese-window.vala b/src/cheese-window.vala
+index ff069808..cc119b68 100644
+--- a/src/cheese-window.vala
++++ b/src/cheese-window.vala
+@@ -1216,9 +1216,9 @@ public class Cheese.MainWindow : Gtk.ApplicationWindow
+    */
+   public void on_switch_camera_clicked ()
+   {
+-      Cheese.CameraDevice selected;
+-      Cheese.CameraDevice next = null;
+-      GLib.PtrArray cameras;
++      unowned Cheese.CameraDevice selected;
++      unowned Cheese.CameraDevice next = null;
++      GLib.GenericArray<unowned Cheese.CameraDevice> cameras;
+       uint i;
+ 
+       if (camera == null)
+@@ -1235,9 +1235,9 @@ public class Cheese.MainWindow : Gtk.ApplicationWindow
+ 
+       cameras = camera.get_camera_devices ();
+ 
+-      for (i = 0; i < cameras.len; i++)
++      for (i = 0; i < cameras.length; i++)
+       {
+-          next = (Cheese.CameraDevice )cameras.index (i);
++          next = cameras.get (i);
+ 
+           if (next == selected)
+           {
+@@ -1245,13 +1245,13 @@ public class Cheese.MainWindow : Gtk.ApplicationWindow
+           }
+       }
+ 
+-      if (i + 1 < cameras.len)
++      if (i + 1 < cameras.length)
+       {
+-          next = (Cheese.CameraDevice )cameras.index (i + 1);
++          next = cameras.get (i + 1);
+       }
+       else
+       {
+-          next = (Cheese.CameraDevice )cameras.index (0);
++          next = cameras.get (0);
+       }
+ 
+       if (next == selected)
+@@ -1269,8 +1269,8 @@ public class Cheese.MainWindow : Gtk.ApplicationWindow
+    */
+   public void set_switch_camera_button_state ()
+   {
+-      Cheese.CameraDevice selected;
+-      GLib.PtrArray cameras;
++      unowned Cheese.CameraDevice selected;
++      GLib.GenericArray<unowned Cheese.CameraDevice> cameras;
+ 
+       if (camera == null)
+       {
+@@ -1288,7 +1288,7 @@ public class Cheese.MainWindow : Gtk.ApplicationWindow
+ 
+       cameras = camera.get_camera_devices ();
+ 
+-      if (cameras.len > 1)
++      if (cameras.length > 1)
+       {
+          switch_camera_button.set_visible (true);
+          return;
+diff --git a/src/vapi/cheese-common.vapi b/src/vapi/cheese-common.vapi
+index 6517cdfc..e4ae7ad3 100644
+--- a/src/vapi/cheese-common.vapi
++++ b/src/vapi/cheese-common.vapi
+@@ -35,7 +35,7 @@ namespace Cheese
+     [CCode (has_construct_function = false)]
+     public Camera (Clutter.Actor video_texture, string camera_device_node, int x_resolution, int y_resolution);
+     public bool                        get_balance_property_range (string property, double min, double max, double def);
+-    public unowned GLib.PtrArray       get_camera_devices ();
++    public GLib.GenericArray<unowned Cheese.CameraDevice> get_camera_devices ();
+     public unowned Cheese.VideoFormat  get_current_video_format ();
+     public int                         get_num_camera_devices ();
+     public unowned Cheese.CameraDevice get_selected_device ();
+-- 
+GitLab
+
diff --git a/gnu/packages/patches/chez-scheme-build-util-paths-backport.patch b/gnu/packages/patches/chez-scheme-build-util-paths-backport.patch
deleted file mode 100644
index aad2d99996..0000000000
--- a/gnu/packages/patches/chez-scheme-build-util-paths-backport.patch
+++ /dev/null
@@ -1,780 +0,0 @@
-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/clang-10.0-libc-search-path.patch b/gnu/packages/patches/clang-10.0-libc-search-path.patch
index 966e40b93c..c2854e3f33 100644
--- a/gnu/packages/patches/clang-10.0-libc-search-path.patch
+++ b/gnu/packages/patches/clang-10.0-libc-search-path.patch
@@ -4,18 +4,47 @@ but unfortunately, that doesn't work for us.
 This patch makes it easy to insert libc's $libdir so that Clang passes the
 correct absolute file name of crt1.o etc. to 'ld'.  It also disables all
 the distro-specific stuff and removes the hard-coded FHS directory names
-to make sure Clang also works on non-Guix systems.
+to make sure Clang also works on foreign distros.
 
+diff --git a/lib/Driver/Distro.cpp b/lib/Driver/Distro.cpp
+index 06707fef..f3bd43de 100644
+--- a/lib/Driver/Distro.cpp
++++ b/lib/Driver/Distro.cpp
+@@ -20,6 +20,10 @@ using namespace clang;
+ 
+ static Distro::DistroType DetectDistro(llvm::vfs::FileSystem &VFS,
+                                        const llvm::Triple &TargetOrHost) {
++  // The compiler should always behave the same, even when used via Guix on a
++  // foreign distro.
++  return Distro::UnknownDistro;
++
+   // If we don't target Linux, no need to check the distro. This saves a few
+   // OS calls.
+   if (!TargetOrHost.isOSLinux())
+diff --git a/lib/Driver/ToolChains/Cuda.cpp b/lib/Driver/ToolChains/Cuda.cpp
+index 50d22a2a..4ab93e0a 100644
+--- a/lib/Driver/ToolChains/Cuda.cpp
++++ b/lib/Driver/ToolChains/Cuda.cpp
+@@ -60,6 +60,9 @@ CudaInstallationDetector::CudaInstallationDetector(
+     const Driver &D, const llvm::Triple &HostTriple,
+     const llvm::opt::ArgList &Args)
+     : D(D) {
++  // Don't look for CUDA in /usr.
++  return;
++
+   struct Candidate {
+     std::string Path;
+     bool StrictChecking;
 diff --git a/lib/Driver/ToolChains/Linux.cpp b/lib/Driver/ToolChains/Linux.cpp
-index bff1ab10..79e1477e 100644
+index bff1ab10..e996d3b8 100644
 --- a/lib/Driver/ToolChains/Linux.cpp
 +++ b/lib/Driver/ToolChains/Linux.cpp
 @@ -240,6 +240,9 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
                           .str());
    }
  
-+// Comment out the distro-specific tweaks so that they don't bite when
-+// using Guix on a foreign distro.
++  // Comment out the distro-specific tweaks so that they don't bite when
++  // using Guix on a foreign distro.
 +#if 0
    Distro Distro(D.getVFS(), Triple);
  
@@ -24,61 +53,41 @@ index bff1ab10..79e1477e 100644
  
    if (IsAndroid || Distro.IsOpenSUSE())
      ExtraOpts.push_back("--enable-new-dtags");
-+#endif	// Guix
++#endif
  
    // The selection of paths to try here is designed to match the patterns which
    // the GCC driver itself uses, as this is part of the GCC-compatible driver.
-@@ -363,7 +367,7 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
-     // the cross. Note that GCC does include some of these directories in some
-     // configurations but this seems somewhere between questionable and simply
-     // a bug.
--    if (StringRef(LibPath).startswith(SysRoot)) {
-+    if (0) {
-       addPathIfExists(D, LibPath + "/" + MultiarchTriple, Paths);
-       addPathIfExists(D, LibPath + "/../" + OSLibDir, Paths);
+@@ -369,6 +373,7 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
      }
-@@ -382,6 +386,8 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
-   addPathIfExists(D, SysRoot + "/lib/" + MultiarchTriple, Paths);
-   addPathIfExists(D, SysRoot + "/lib/../" + OSLibDir, Paths);
- 
-+// This requires the commented distro tweaks above.
-+#if 0
-   if (IsAndroid) {
-     // Android sysroots contain a library directory for each supported OS
-     // version as well as some unversioned libraries in the usual multiarch
-@@ -410,10 +416,15 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
-     addPathIfExists(D, SysRoot + "/" + OSLibDir + "/" + ABIName, Paths);
-     addPathIfExists(D, SysRoot + "/usr/" + OSLibDir + "/" + ABIName, Paths);
    }
-+#endif
  
++#if 0
+   // Similar to the logic for GCC above, if we currently running Clang inside
+   // of the requested system root, add its parent library paths to
+   // those searched.
+@@ -414,6 +419,8 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
    // Try walking via the GCC triple path in case of biarch or multiarch GCC
    // installations with strange symlinks.
    if (GCCInstallation.isValid()) {
-+
-+// The following code would end up adding things like
-+// "/usr/lib/x86_64-unknown-linux-gnu/../../lib64" to the search path.
-+#if 0
++    // The following code would end up adding things like
++    // "/usr/lib/x86_64-unknown-linux-gnu/../../lib64" to the search path.
      addPathIfExists(D,
                      SysRoot + "/usr/lib/" + GCCInstallation.getTriple().str() +
                          "/../../" + OSLibDir,
-@@ -426,6 +437,7 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
-                              BiarchSibling.gccSuffix(),
-                       Paths);
-     }
-+#endif
- 
-     // See comments above on the multilib variant for details of why this is
-     // included even from outside the sysroot.
-@@ -450,8 +462,9 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
+@@ -449,9 +456,14 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
+   // directory ('Dir' below) or the ResourceDir.
    if (StringRef(D.Dir).startswith(SysRoot))
      addPathIfExists(D, D.Dir + "/../lib", Paths);
- 
--  addPathIfExists(D, SysRoot + "/lib", Paths);
--  addPathIfExists(D, SysRoot + "/usr/lib", Paths);
++#endif
++
 +  // Add libc's lib/ directory to the search path, so that crt1.o, crti.o,
 +  // and friends can be found.
 +  addPathIfExists(D, "@GLIBC_LIBDIR@", Paths);
+ 
+-  addPathIfExists(D, SysRoot + "/lib", Paths);
+-  addPathIfExists(D, SysRoot + "/usr/lib", Paths);
++  // Add GCC's lib/ directory so libstdc++.so can be found.
++  addPathIfExists(D, GCCInstallation.getParentLibPath(), Paths);
  }
  
  ToolChain::CXXStdlibType Linux::GetDefaultCXXStdlibType() const {
diff --git a/gnu/packages/patches/clang-11.0-libc-search-path.patch b/gnu/packages/patches/clang-11.0-libc-search-path.patch
index c014de179d..d0581d3a29 100644
--- a/gnu/packages/patches/clang-11.0-libc-search-path.patch
+++ b/gnu/packages/patches/clang-11.0-libc-search-path.patch
@@ -4,48 +4,47 @@ but unfortunately, that doesn't work for us.
 This patch makes it easy to insert libc's $libdir so that Clang passes the
 correct absolute file name of crt1.o etc. to 'ld'.  It also disables all
 the distro-specific stuff and removes the hard-coded FHS directory names
-to make sure Clang also works on non-Guix systems.
+to make sure Clang also works on foreign distros.
 
-diff --git a/lib/Driver/ToolChains/Gnu.cpp b/lib/Driver/ToolChains/Gnu.cpp
---- a/lib/Driver/ToolChains/Gnu.cpp
-+++ b/lib/Driver/ToolChains/Gnu.cpp
-@@ -2797,7 +2797,7 @@ void Generic_GCC::AddMultilibPaths(const Driver &D,
-     // the cross. Note that GCC does include some of these directories in some
-     // configurations but this seems somewhere between questionable and simply
-     // a bug.
--    if (StringRef(LibPath).startswith(SysRoot)) {
-+    if (0) {
-       addPathIfExists(D, LibPath + "/" + MultiarchTriple, Paths);
-       addPathIfExists(D, LibPath + "/../" + OSLibDir, Paths);
-     }
-@@ -2811,6 +2811,10 @@ void Generic_GCC::AddMultiarchPaths(const Driver &D,
-   // Try walking via the GCC triple path in case of biarch or multiarch GCC
-   // installations with strange symlinks.
-   if (GCCInstallation.isValid()) {
-+
-+// The following code would end up adding things like
-+// "/usr/lib/x86_64-unknown-linux-gnu/../../lib64" to the search path.
-+#if 0
-     addPathIfExists(D,
-                     SysRoot + "/usr/lib/" + GCCInstallation.getTriple().str() +
-                         "/../../" + OSLibDir,
-@@ -2823,6 +2827,7 @@ void Generic_GCC::AddMultiarchPaths(const Driver &D,
-           D, GCCInstallation.getInstallPath() + BiarchSibling.gccSuffix(),
-                       Paths);
-     }
-+#endif // Guix
+diff --git a/lib/Driver/Distro.cpp b/lib/Driver/Distro.cpp
+index 4d58ad1a..6f638eca 100644
+--- a/lib/Driver/Distro.cpp
++++ b/lib/Driver/Distro.cpp
+@@ -21,6 +21,10 @@ using namespace clang;
  
-     // See comments above on the multilib variant for details of why this is
-     // included even from outside the sysroot.
+ static Distro::DistroType DetectDistro(llvm::vfs::FileSystem &VFS,
+                                        const llvm::Triple &TargetOrHost) {
++  // The compiler should always behave the same, even when used via Guix on a
++  // foreign distro.
++  return Distro::UnknownDistro;
++
+   // If we don't target Linux, no need to check the distro. This saves a few
+   // OS calls.
+   if (!TargetOrHost.isOSLinux())
+diff --git a/lib/Driver/ToolChains/Cuda.cpp b/lib/Driver/ToolChains/Cuda.cpp
+index 110a0bca..42b9f7b7 100644
+--- a/lib/Driver/ToolChains/Cuda.cpp
++++ b/lib/Driver/ToolChains/Cuda.cpp
+@@ -67,6 +67,9 @@ CudaInstallationDetector::CudaInstallationDetector(
+     const Driver &D, const llvm::Triple &HostTriple,
+     const llvm::opt::ArgList &Args)
+     : D(D) {
++  // Don't look for CUDA in /usr.
++  return;
++
+   struct Candidate {
+     std::string Path;
+     bool StrictChecking;
 diff --git a/lib/Driver/ToolChains/Linux.cpp b/lib/Driver/ToolChains/Linux.cpp
+index 18035047..ace8f443 100644
 --- a/lib/Driver/ToolChains/Linux.cpp
 +++ b/lib/Driver/ToolChains/Linux.cpp
 @@ -219,6 +219,9 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
  
    Generic_GCC::PushPPaths(PPaths);
  
-+// Comment out the distro-specific tweaks so that they don't bite when
-+// using Guix on a foreign distro.
++  // Comment out the distro-specific tweaks so that they don't bite when
++  // using Guix on a foreign distro.
 +#if 0
    Distro Distro(D.getVFS(), Triple);
  
@@ -54,36 +53,32 @@ diff --git a/lib/Driver/ToolChains/Linux.cpp b/lib/Driver/ToolChains/Linux.cpp
  
    if (IsAndroid || Distro.IsOpenSUSE())
      ExtraOpts.push_back("--enable-new-dtags");
-+#endif	// Guix
++#endif
  
    // The selection of paths to try here is designed to match the patterns which
    // the GCC driver itself uses, as this is part of the GCC-compatible driver.
-@@ -310,6 +314,8 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
-   addPathIfExists(D, SysRoot + "/lib/" + MultiarchTriple, Paths);
-   addPathIfExists(D, SysRoot + "/lib/../" + OSLibDir, Paths);
+@@ -297,6 +301,7 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
  
-+// This requires the commented distro tweaks above.
-+#if 0
-   if (IsAndroid) {
-     // Android sysroots contain a library directory for each supported OS
-     // version as well as some unversioned libraries in the usual multiarch
-@@ -338,6 +344,7 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
-     addPathIfExists(D, SysRoot + "/" + OSLibDir + "/" + ABIName, Paths);
-     addPathIfExists(D, SysRoot + "/usr/" + OSLibDir + "/" + ABIName, Paths);
-   }
-+#endif // Guix
- 
-   Generic_GCC::AddMultiarchPaths(D, SysRoot, OSLibDir, Paths);
+   Generic_GCC::AddMultilibPaths(D, SysRoot, OSLibDir, MultiarchTriple, Paths);
  
-@@ -349,8 +356,9 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
++#if 0
+   // Similar to the logic for GCC above, if we currently running Clang inside
+   // of the requested system root, add its parent library paths to
+   // those searched.
+@@ -348,9 +353,14 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
+   // directory ('Dir' below) or the ResourceDir.
    if (StringRef(D.Dir).startswith(SysRoot))
      addPathIfExists(D, D.Dir + "/../lib", Paths);
- 
--  addPathIfExists(D, SysRoot + "/lib", Paths);
--  addPathIfExists(D, SysRoot + "/usr/lib", Paths);
++#endif
++
 +  // Add libc's lib/ directory to the search path, so that crt1.o, crti.o,
 +  // and friends can be found.
 +  addPathIfExists(D, "@GLIBC_LIBDIR@", Paths);
+ 
+-  addPathIfExists(D, SysRoot + "/lib", Paths);
+-  addPathIfExists(D, SysRoot + "/usr/lib", Paths);
++  // Add GCC's lib/ directory so libstdc++.so can be found.
++  addPathIfExists(D, GCCInstallation.getParentLibPath(), Paths);
  }
  
  ToolChain::CXXStdlibType Linux::GetDefaultCXXStdlibType() const {
diff --git a/gnu/packages/patches/clang-12.0-libc-search-path.patch b/gnu/packages/patches/clang-12.0-libc-search-path.patch
new file mode 100644
index 0000000000..38de275048
--- /dev/null
+++ b/gnu/packages/patches/clang-12.0-libc-search-path.patch
@@ -0,0 +1,84 @@
+Clang attempts to guess file names based on the OS and distro (yes!),
+but unfortunately, that doesn't work for us.
+
+This patch makes it easy to insert libc's $libdir so that Clang passes the
+correct absolute file name of crt1.o etc. to 'ld'.  It also disables all
+the distro-specific stuff and removes the hard-coded FHS directory names
+to make sure Clang also works on foreign distros.
+
+diff --git a/lib/Driver/Distro.cpp b/lib/Driver/Distro.cpp
+index ee4fe841..f0313bbe 100644
+--- a/lib/Driver/Distro.cpp
++++ b/lib/Driver/Distro.cpp
+@@ -93,6 +93,10 @@ static Distro::DistroType DetectLsbRelease(llvm::vfs::FileSystem &VFS) {
+ }
+ 
+ static Distro::DistroType DetectDistro(llvm::vfs::FileSystem &VFS) {
++  // The compiler should always behave the same, even when used via Guix on a
++  // foreign distro.
++  return Distro::UnknownDistro;
++
+   Distro::DistroType Version = Distro::UnknownDistro;
+ 
+   // Newer freedesktop.org's compilant systemd-based systems
+diff --git a/lib/Driver/ToolChains/Cuda.cpp b/lib/Driver/ToolChains/Cuda.cpp
+index d14776c5..88bc3ccd 100644
+--- a/lib/Driver/ToolChains/Cuda.cpp
++++ b/lib/Driver/ToolChains/Cuda.cpp
+@@ -119,6 +119,9 @@ CudaInstallationDetector::CudaInstallationDetector(
+     const Driver &D, const llvm::Triple &HostTriple,
+     const llvm::opt::ArgList &Args)
+     : D(D) {
++  // Don't look for CUDA in /usr.
++  return;
++
+   struct Candidate {
+     std::string Path;
+     bool StrictChecking;
+diff --git a/lib/Driver/ToolChains/Linux.cpp b/lib/Driver/ToolChains/Linux.cpp
+index 9663a739..107f96d6 100644
+--- a/lib/Driver/ToolChains/Linux.cpp
++++ b/lib/Driver/ToolChains/Linux.cpp
+@@ -223,6 +223,9 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
+ 
+   Generic_GCC::PushPPaths(PPaths);
+ 
++  // Comment out the distro-specific tweaks so that they don't bite when
++  // using Guix on a foreign distro.
++#if 0
+   Distro Distro(D.getVFS(), Triple);
+ 
+   if (Distro.IsAlpineLinux() || Triple.isAndroid()) {
+@@ -288,6 +291,7 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
+ 
+   if (IsAndroid || Distro.IsOpenSUSE())
+     ExtraOpts.push_back("--enable-new-dtags");
++#endif
+ 
+   // The selection of paths to try here is designed to match the patterns which
+   // the GCC driver itself uses, as this is part of the GCC-compatible driver.
+@@ -301,6 +305,7 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
+ 
+   Generic_GCC::AddMultilibPaths(D, SysRoot, OSLibDir, MultiarchTriple, Paths);
+ 
++#if 0
+   // Similar to the logic for GCC above, if we currently running Clang inside
+   // of the requested system root, add its parent library paths to
+   // those searched.
+@@ -352,9 +357,14 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
+   // directory ('Dir' below) or the ResourceDir.
+   if (StringRef(D.Dir).startswith(SysRoot))
+     addPathIfExists(D, D.Dir + "/../lib", Paths);
++#endif
++
++  // Add libc's lib/ directory to the search path, so that crt1.o, crti.o,
++  // and friends can be found.
++  addPathIfExists(D, "@GLIBC_LIBDIR@", Paths);
+ 
+-  addPathIfExists(D, SysRoot + "/lib", Paths);
+-  addPathIfExists(D, SysRoot + "/usr/lib", Paths);
++  // Add GCC's lib/ directory so libstdc++.so can be found.
++  addPathIfExists(D, GCCInstallation.getParentLibPath(), Paths);
+ }
+ 
+ ToolChain::CXXStdlibType Linux::GetDefaultCXXStdlibType() const {
diff --git a/gnu/packages/patches/clang-13.0-libc-search-path.patch b/gnu/packages/patches/clang-13.0-libc-search-path.patch
new file mode 100644
index 0000000000..77303e636d
--- /dev/null
+++ b/gnu/packages/patches/clang-13.0-libc-search-path.patch
@@ -0,0 +1,96 @@
+Clang attempts to guess file names based on the OS and distro (yes!),
+but unfortunately, that doesn't work for us.
+
+This patch makes it easy to insert libc's $libdir so that Clang passes the
+correct absolute file name of crt1.o etc. to 'ld'.  It also disables all
+the distro-specific stuff and removes the hard-coded FHS directory names
+to make sure Clang also works on foreign distros.
+
+diff --git a/lib/Driver/Distro.cpp b/lib/Driver/Distro.cpp
+index ee4fe841..f0313bbe 100644
+--- a/lib/Driver/Distro.cpp
++++ b/lib/Driver/Distro.cpp
+@@ -93,6 +93,10 @@ static Distro::DistroType DetectLsbRelease(llvm::vfs::FileSystem &VFS) {
+ }
+ 
+ static Distro::DistroType DetectDistro(llvm::vfs::FileSystem &VFS) {
++  // The compiler should always behave the same, even when used via Guix on a
++  // foreign distro.
++  return Distro::UnknownDistro;
++
+   Distro::DistroType Version = Distro::UnknownDistro;
+ 
+   // Newer freedesktop.org's compilant systemd-based systems
+diff --git a/lib/Driver/ToolChains/Cuda.cpp b/lib/Driver/ToolChains/Cuda.cpp
+index d14776c5..88bc3ccd 100644
+--- a/lib/Driver/ToolChains/Cuda.cpp
++++ b/lib/Driver/ToolChains/Cuda.cpp
+@@ -119,6 +119,9 @@ CudaInstallationDetector::CudaInstallationDetector(
+     const Driver &D, const llvm::Triple &HostTriple,
+     const llvm::opt::ArgList &Args)
+     : D(D) {
++  // Don't look for CUDA in /usr.
++  return;
++
+   struct Candidate {
+     std::string Path;
+     bool StrictChecking;
+diff --git a/lib/Driver/ToolChains/Linux.cpp b/lib/Driver/ToolChains/Linux.cpp
+--- a/lib/Driver/ToolChains/Linux.cpp
++++ b/lib/Driver/ToolChains/Linux.cpp
+@@ -186,6 +186,10 @@
+ 
+   Generic_GCC::PushPPaths(PPaths);
+ 
++  // Comment out the distro-specific tweaks so that they don't bite when
++  // using Guix on a foreign distro.
++#if 0
++
+   Distro Distro(D.getVFS(), Triple);
+ 
+   if (Distro.IsAlpineLinux() || Triple.isAndroid()) {
+@@ -251,6 +255,7 @@
+ 
+   if (IsAndroid || Distro.IsOpenSUSE())
+     ExtraOpts.push_back("--enable-new-dtags");
++#endif
+ 
+   // The selection of paths to try here is designed to match the patterns which
+   // the GCC driver itself uses, as this is part of the GCC-compatible driver.
+@@ -264,6 +269,7 @@
+ 
+   Generic_GCC::AddMultilibPaths(D, SysRoot, OSLibDir, MultiarchTriple, Paths);
+ 
++#if 0
+   addPathIfExists(D, SysRoot + "/lib/" + MultiarchTriple, Paths);
+   addPathIfExists(D, SysRoot + "/lib/../" + OSLibDir, Paths);
+ 
+@@ -295,9 +301,11 @@
+     addPathIfExists(D, SysRoot + "/" + OSLibDir + "/" + ABIName, Paths);
+     addPathIfExists(D, SysRoot + "/usr/" + OSLibDir + "/" + ABIName, Paths);
+   }
++#endif
+ 
+   Generic_GCC::AddMultiarchPaths(D, SysRoot, OSLibDir, Paths);
+ 
++#if 0
+   // Similar to the logic for GCC above, if we are currently running Clang
+   // inside of the requested system root, add its parent library path to those
+   // searched.
+@@ -305,9 +313,14 @@
+   // directory ('Dir' below) or the ResourceDir.
+   if (StringRef(D.Dir).startswith(SysRoot))
+     addPathIfExists(D, D.Dir + "/../lib", Paths);
++#endif
++
++  // Add libc's lib/ directory to the search path, so that crt1.o, crti.o,
++  // and friends can be found.
++  addPathIfExists(D, "@GLIBC_LIBDIR@", Paths);
+ 
+-  addPathIfExists(D, SysRoot + "/lib", Paths);
+-  addPathIfExists(D, SysRoot + "/usr/lib", Paths);
++  // Add GCC's lib/ directory so libstdc++.so can be found.
++  addPathIfExists(D, GCCInstallation.getParentLibPath(), Paths);
+ }
+ 
+ ToolChain::RuntimeLibType Linux::GetDefaultRuntimeLibType() const {
diff --git a/gnu/packages/patches/clang-7.0-libc-search-path.patch b/gnu/packages/patches/clang-7.0-libc-search-path.patch
index 07ff8c90bd..cb7088eda4 100644
--- a/gnu/packages/patches/clang-7.0-libc-search-path.patch
+++ b/gnu/packages/patches/clang-7.0-libc-search-path.patch
@@ -4,8 +4,39 @@ but unfortunately, that doesn't work for us.
 This patch makes it easy to insert libc's $libdir so that Clang passes the
 correct absolute file name of crt1.o etc. to 'ld'.  It also disables all
 the distro-specific stuff and removes the hard-coded FHS directory names
-to make sure Clang also works on non-GuixSD systems.
+to make sure Clang also works on foreign distros.
 
+diff --git a/lib/Driver/Distro.cpp b/lib/Driver/Distro.cpp
+index 2c4d44f..0493b0a 100644
+--- a/lib/Driver/Distro.cpp
++++ b/lib/Driver/Distro.cpp
+@@ -18,6 +18,10 @@ using namespace clang::driver;
+ using namespace clang;
+ 
+ static Distro::DistroType DetectDistro(vfs::FileSystem &VFS) {
++  // The compiler should always behave the same, even when used via Guix on a
++  // foreign distro.
++  return Distro::UnknownDistro;
++
+   llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> File =
+       VFS.getBufferForFile("/etc/lsb-release");
+   if (File) {
+diff --git a/lib/Driver/ToolChains/Cuda.cpp b/lib/Driver/ToolChains/Cuda.cpp
+index 7fb4ae4..cb21344 100644
+--- a/lib/Driver/ToolChains/Cuda.cpp
++++ b/lib/Driver/ToolChains/Cuda.cpp
+@@ -66,6 +66,9 @@ CudaInstallationDetector::CudaInstallationDetector(
+     const Driver &D, const llvm::Triple &HostTriple,
+     const llvm::opt::ArgList &Args)
+     : D(D) {
++  // Don't look for CUDA in /usr.
++  return;
++
+   struct Candidate {
+     std::string Path;
+     bool StrictChecking;
+diff --git a/lib/Driver/ToolChains/Linux.cpp b/lib/Driver/ToolChains/Linux.cpp
+index f8f3623..36dc722 100644
 --- a/lib/Driver/ToolChains/Linux.cpp
 +++ b/lib/Driver/ToolChains/Linux.cpp
 @@ -225,7 +225,9 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
@@ -27,56 +58,37 @@ to make sure Clang also works on non-GuixSD systems.
  
    // The selection of paths to try here is designed to match the patterns which
    // the GCC driver itself uses, as this is part of the GCC-compatible driver.
-@@ -342,7 +345,7 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
-     // the cross. Note that GCC does include some of these directories in some
-     // configurations but this seems somewhere between questionable and simply
-     // a bug.
--    if (StringRef(LibPath).startswith(SysRoot)) {
-+    if (0) {
-       addPathIfExists(D, LibPath + "/" + MultiarchTriple, Paths);
-       addPathIfExists(D, LibPath + "/../" + OSLibDir, Paths);
+@@ -348,6 +351,7 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
      }
-@@ -361,6 +364,8 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
-   addPathIfExists(D, SysRoot + "/lib/" + MultiarchTriple, Paths);
-   addPathIfExists(D, SysRoot + "/lib/../" + OSLibDir, Paths);
- 
-+  // This requires the commented distro tweaks above.
-+#if 0
-   if (IsAndroid) {
-     // Android sysroots contain a library directory for each supported OS
-     // version as well as some unversioned libraries in the usual multiarch
-@@ -389,10 +394,14 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
-     addPathIfExists(D, SysRoot + "/" + OSLibDir + "/" + ABIName, Paths);
-     addPathIfExists(D, SysRoot + "/usr/" + OSLibDir + "/" + ABIName, Paths);
    }
-+#endif
  
++#if 0
+   // Similar to the logic for GCC above, if we currently running Clang inside
+   // of the requested system root, add its parent library paths to
+   // those searched.
+@@ -393,6 +397,8 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
    // Try walking via the GCC triple path in case of biarch or multiarch GCC
    // installations with strange symlinks.
    if (GCCInstallation.isValid()) {
 +    // The following code would end up adding things like
 +    // "/usr/lib/x86_64-unknown-linux-gnu/../../lib64" to the search path.
-+#if 0
      addPathIfExists(D,
                      SysRoot + "/usr/lib/" + GCCInstallation.getTriple().str() +
                          "/../../" + OSLibDir,
-@@ -405,6 +414,7 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
-                              BiarchSibling.gccSuffix(),
-                       Paths);
-     }
-+#endif
- 
-     // See comments above on the multilib variant for details of why this is
-     // included even from outside the sysroot.
-@@ -429,8 +439,9 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
+@@ -428,9 +434,14 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
+   // directory ('Dir' below) or the ResourceDir.
    if (StringRef(D.Dir).startswith(SysRoot))
      addPathIfExists(D, D.Dir + "/../lib", Paths);
- 
--  addPathIfExists(D, SysRoot + "/lib", Paths);
--  addPathIfExists(D, SysRoot + "/usr/lib", Paths);
++#endif
++
 +  // Add libc's lib/ directory to the search path, so that crt1.o, crti.o,
 +  // and friends can be found.
 +  addPathIfExists(D, "@GLIBC_LIBDIR@", Paths);
+ 
+-  addPathIfExists(D, SysRoot + "/lib", Paths);
+-  addPathIfExists(D, SysRoot + "/usr/lib", Paths);
++  // Add GCC's lib/ directory so libstdc++.so can be found.
++  addPathIfExists(D, GCCInstallation.getParentLibPath(), Paths);
  }
  
  bool Linux::HasNativeLLVMSupport() const { return true; }
diff --git a/gnu/packages/patches/clang-8.0-libc-search-path.patch b/gnu/packages/patches/clang-8.0-libc-search-path.patch
new file mode 100644
index 0000000000..2003fef217
--- /dev/null
+++ b/gnu/packages/patches/clang-8.0-libc-search-path.patch
@@ -0,0 +1,94 @@
+Clang attempts to guess file names based on the OS and distro (yes!),
+but unfortunately, that doesn't work for us.
+
+This patch makes it easy to insert libc's $libdir so that Clang passes the
+correct absolute file name of crt1.o etc. to 'ld'.  It also disables all
+the distro-specific stuff and removes the hard-coded FHS directory names
+to make sure Clang also works on foreign distros.
+
+diff --git a/lib/Driver/Distro.cpp b/lib/Driver/Distro.cpp
+index 396d0bee..90e06613 100644
+--- a/lib/Driver/Distro.cpp
++++ b/lib/Driver/Distro.cpp
+@@ -19,6 +19,10 @@ using namespace clang::driver;
+ using namespace clang;
+ 
+ static Distro::DistroType DetectDistro(llvm::vfs::FileSystem &VFS) {
++  // The compiler should always behave the same, even when used via Guix on a
++  // foreign distro.
++  return Distro::UnknownDistro;
++
+   llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> File =
+       VFS.getBufferForFile("/etc/lsb-release");
+   if (File) {
+diff --git a/lib/Driver/ToolChains/Cuda.cpp b/lib/Driver/ToolChains/Cuda.cpp
+index 57b8d434..57339f1a 100644
+--- a/lib/Driver/ToolChains/Cuda.cpp
++++ b/lib/Driver/ToolChains/Cuda.cpp
+@@ -68,6 +68,9 @@ CudaInstallationDetector::CudaInstallationDetector(
+     const Driver &D, const llvm::Triple &HostTriple,
+     const llvm::opt::ArgList &Args)
+     : D(D) {
++  // Don't look for CUDA in /usr.
++  return;
++
+   struct Candidate {
+     std::string Path;
+     bool StrictChecking;
+diff --git a/lib/Driver/ToolChains/Linux.cpp b/lib/Driver/ToolChains/Linux.cpp
+index 65ab9b2d..5ed28e0a 100644
+--- a/lib/Driver/ToolChains/Linux.cpp
++++ b/lib/Driver/ToolChains/Linux.cpp
+@@ -233,7 +233,9 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
+   PPaths.push_back(Twine(GCCInstallation.getParentLibPath() + "/../" +
+                          GCCInstallation.getTriple().str() + "/bin")
+                        .str());
+-
++  // Comment out the distro-specific tweaks so that they don't bite when
++  // using Guix on a foreign distro.
++#if 0
+   Distro Distro(D.getVFS());
+ 
+   if (Distro.IsAlpineLinux() || Triple.isAndroid()) {
+@@ -304,6 +306,7 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
+ 
+   if (IsAndroid || Distro.IsOpenSUSE())
+     ExtraOpts.push_back("--enable-new-dtags");
++#endif
+ 
+   // The selection of paths to try here is designed to match the patterns which
+   // the GCC driver itself uses, as this is part of the GCC-compatible driver.
+@@ -366,6 +369,7 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
+     }
+   }
+ 
++#if 0
+   // Similar to the logic for GCC above, if we currently running Clang inside
+   // of the requested system root, add its parent library paths to
+   // those searched.
+@@ -411,6 +415,8 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
+   // Try walking via the GCC triple path in case of biarch or multiarch GCC
+   // installations with strange symlinks.
+   if (GCCInstallation.isValid()) {
++    // The following code would end up adding things like
++    // "/usr/lib/x86_64-unknown-linux-gnu/../../lib64" to the search path.
+     addPathIfExists(D,
+                     SysRoot + "/usr/lib/" + GCCInstallation.getTriple().str() +
+                         "/../../" + OSLibDir,
+@@ -446,9 +452,14 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
+   // directory ('Dir' below) or the ResourceDir.
+   if (StringRef(D.Dir).startswith(SysRoot))
+     addPathIfExists(D, D.Dir + "/../lib", Paths);
++#endif
++
++  // Add libc's lib/ directory to the search path, so that crt1.o, crti.o,
++  // and friends can be found.
++  addPathIfExists(D, "@GLIBC_LIBDIR@", Paths);
+ 
+-  addPathIfExists(D, SysRoot + "/lib", Paths);
+-  addPathIfExists(D, SysRoot + "/usr/lib", Paths);
++  // Add GCC's lib/ directory so libstdc++.so can be found.
++  addPathIfExists(D, GCCInstallation.getParentLibPath(), Paths);
+ }
+ 
+ ToolChain::CXXStdlibType Linux::GetDefaultCXXStdlibType() const {
diff --git a/gnu/packages/patches/clang-9.0-libc-search-path.patch b/gnu/packages/patches/clang-9.0-libc-search-path.patch
index be34344842..1984895a9c 100644
--- a/gnu/packages/patches/clang-9.0-libc-search-path.patch
+++ b/gnu/packages/patches/clang-9.0-libc-search-path.patch
@@ -4,17 +4,47 @@ but unfortunately, that doesn't work for us.
 This patch makes it easy to insert libc's $libdir so that Clang passes the
 correct absolute file name of crt1.o etc. to 'ld'.  It also disables all
 the distro-specific stuff and removes the hard-coded FHS directory names
-to make sure Clang also works on non-GuixSD systems.
+to make sure Clang also works on foreign distros.
 
+diff --git a/lib/Driver/Distro.cpp b/lib/Driver/Distro.cpp
+index f2a3074d..536db89c 100644
+--- a/lib/Driver/Distro.cpp
++++ b/lib/Driver/Distro.cpp
+@@ -18,6 +18,10 @@ using namespace clang::driver;
+ using namespace clang;
+ 
+ static Distro::DistroType DetectDistro(llvm::vfs::FileSystem &VFS) {
++  // The compiler should always behave the same, even when used via Guix on a
++  // foreign distro.
++  return Distro::UnknownDistro;
++
+   llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> File =
+       VFS.getBufferForFile("/etc/lsb-release");
+   if (File) {
+diff --git a/lib/Driver/ToolChains/Cuda.cpp b/lib/Driver/ToolChains/Cuda.cpp
+index 96f8c513..64fd7a26 100644
+--- a/lib/Driver/ToolChains/Cuda.cpp
++++ b/lib/Driver/ToolChains/Cuda.cpp
+@@ -69,6 +69,9 @@ CudaInstallationDetector::CudaInstallationDetector(
+     const Driver &D, const llvm::Triple &HostTriple,
+     const llvm::opt::ArgList &Args)
+     : D(D) {
++  // Don't look for CUDA in /usr.
++  return;
++
+   struct Candidate {
+     std::string Path;
+     bool StrictChecking;
 diff --git a/lib/Driver/ToolChains/Linux.cpp b/lib/Driver/ToolChains/Linux.cpp
+index 7f59bc77..67d8ce22 100644
 --- a/lib/Driver/ToolChains/Linux.cpp
 +++ b/lib/Driver/ToolChains/Linux.cpp
 @@ -240,6 +240,9 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
                           .str());
    }
  
-+// Comment out the distro-specific tweaks so that they don't bite when
-+// using Guix on a foreign distro.
++  // Comment out the distro-specific tweaks so that they don't bite when
++  // using Guix on a foreign distro.
 +#if 0
    Distro Distro(D.getVFS());
  
@@ -27,57 +57,37 @@ diff --git a/lib/Driver/ToolChains/Linux.cpp b/lib/Driver/ToolChains/Linux.cpp
  
    // The selection of paths to try here is designed to match the patterns which
    // the GCC driver itself uses, as this is part of the GCC-compatible driver.
-@@ -363,7 +367,7 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
-     // the cross. Note that GCC does include some of these directories in some
-     // configurations but this seems somewhere between questionable and simply
-     // a bug.
--    if (StringRef(LibPath).startswith(SysRoot)) {
-+    if (0) {
-       addPathIfExists(D, LibPath + "/" + MultiarchTriple, Paths);
-       addPathIfExists(D, LibPath + "/../" + OSLibDir, Paths);
+@@ -369,6 +373,7 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
      }
-@@ -382,6 +386,8 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
-   addPathIfExists(D, SysRoot + "/lib/" + MultiarchTriple, Paths);
-   addPathIfExists(D, SysRoot + "/lib/../" + OSLibDir, Paths);
- 
-+// This requires the commented distro tweaks above.
-+#if 0
-   if (IsAndroid) {
-     // Android sysroots contain a library directory for each supported OS
-     // version as well as some unversioned libraries in the usual multiarch
-@@ -410,10 +416,15 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
-     addPathIfExists(D, SysRoot + "/" + OSLibDir + "/" + ABIName, Paths);
-     addPathIfExists(D, SysRoot + "/usr/" + OSLibDir + "/" + ABIName, Paths);
    }
-+#endif
  
++#if 0
+   // Similar to the logic for GCC above, if we currently running Clang inside
+   // of the requested system root, add its parent library paths to
+   // those searched.
+@@ -414,6 +419,8 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
    // Try walking via the GCC triple path in case of biarch or multiarch GCC
    // installations with strange symlinks.
    if (GCCInstallation.isValid()) {
-+
-+// The following code would end up adding things like
-+// "/usr/lib/x86_64-unknown-linux-gnu/../../lib64" to the search path.
-+#if 0
++    // The following code would end up adding things like
++    // "/usr/lib/x86_64-unknown-linux-gnu/../../lib64" to the search path.
      addPathIfExists(D,
                      SysRoot + "/usr/lib/" + GCCInstallation.getTriple().str() +
                          "/../../" + OSLibDir,
-@@ -426,6 +437,7 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
-                              BiarchSibling.gccSuffix(),
-                       Paths);
-     }
-+#endif
- 
-     // See comments above on the multilib variant for details of why this is
-     // included even from outside the sysroot.
-@@ -450,8 +462,9 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
+@@ -449,9 +456,14 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
+   // directory ('Dir' below) or the ResourceDir.
    if (StringRef(D.Dir).startswith(SysRoot))
      addPathIfExists(D, D.Dir + "/../lib", Paths);
- 
--  addPathIfExists(D, SysRoot + "/lib", Paths);
--  addPathIfExists(D, SysRoot + "/usr/lib", Paths);
++#endif
++
 +  // Add libc's lib/ directory to the search path, so that crt1.o, crti.o,
 +  // and friends can be found.
 +  addPathIfExists(D, "@GLIBC_LIBDIR@", Paths);
+ 
+-  addPathIfExists(D, SysRoot + "/lib", Paths);
+-  addPathIfExists(D, SysRoot + "/usr/lib", Paths);
++  // Add GCC's lib/ directory so libstdc++.so can be found.
++  addPathIfExists(D, GCCInstallation.getParentLibPath(), Paths);
  }
  
  ToolChain::CXXStdlibType Linux::GetDefaultCXXStdlibType() const {
diff --git a/gnu/packages/patches/classpath-miscompilation.patch b/gnu/packages/patches/classpath-miscompilation.patch
new file mode 100644
index 0000000000..c3a569ea4f
--- /dev/null
+++ b/gnu/packages/patches/classpath-miscompilation.patch
@@ -0,0 +1,71 @@
+For some reason, the original code gets miscompiled on x86_64, leading
+'Java_java_io_VMFile_isFile' to return true when the return value of
+'cpio_checkType' is ENOENT (= 2).
+
+See <https://issues.guix.gnu.org/issue/36685>
+and <https://issues.guix.gnu.org/49990>.
+
+diff --git a/native/jni/java-io/java_io_VMFile.c b/native/jni/java-io/java_io_VMFile.c
+index de1320b..6695e1f 100644
+--- a/native/jni/java-io/java_io_VMFile.c
++++ b/native/jni/java-io/java_io_VMFile.c
+@@ -240,6 +240,7 @@ Java_java_io_VMFile_exists (JNIEnv * env,
+ #ifndef WITHOUT_FILESYSTEM
+   const char *filename;
+   int result;
++  jboolean exists;
+ 
+   /* Don't use the JCL convert function because it throws an exception
+      on failure */
+@@ -250,9 +251,10 @@ Java_java_io_VMFile_exists (JNIEnv * env,
+     }
+ 
+   result = cpio_isFileExists (filename);
++  exists = (result == CPNATIVE_OK ? 1 : 0);
+   (*env)->ReleaseStringUTFChars (env, name, filename);
+ 
+-  return result == CPNATIVE_OK ? 1 : 0;
++  return exists;
+ #else /* not WITHOUT_FILESYSTEM */
+   return 0;
+ #endif /* not WITHOUT_FILESYSTEM */
+@@ -278,6 +280,7 @@ Java_java_io_VMFile_isFile (JNIEnv * env,
+   const char *filename;
+   int result;
+   jint entryType;
++  jboolean isfile;
+ 
+   /* Don't use the JCL convert function because it throws an exception
+      on failure */
+@@ -288,9 +291,10 @@ Java_java_io_VMFile_isFile (JNIEnv * env,
+     }
+ 
+   result = cpio_checkType (filename, &entryType);
++  isfile = (result == CPNATIVE_OK && entryType == CPFILE_FILE ? 1 : 0);
+   (*env)->ReleaseStringUTFChars (env, name, filename);
+ 
+-  return result == CPNATIVE_OK && entryType == CPFILE_FILE ? 1 : 0;
++  return isfile;
+ #else /* not WITHOUT_FILESYSTEM */
+   return 0;
+ #endif /* not WITHOUT_FILESYSTEM */
+@@ -315,6 +319,7 @@ Java_java_io_VMFile_isDirectory (JNIEnv * env,
+   const char *filename;
+   int result;
+   jint entryType;
++  jboolean isdirectory;
+ 
+   /* Don't use the JCL convert function because it throws an exception
+      on failure */
+@@ -325,9 +330,10 @@ Java_java_io_VMFile_isDirectory (JNIEnv * env,
+     }
+   
+   result = cpio_checkType (filename, &entryType);
++  isdirectory = (result == CPNATIVE_OK && entryType == CPFILE_DIRECTORY ? 1 : 0);
+   (*env)->ReleaseStringUTFChars (env, name, filename);
+ 
+-  return result == CPNATIVE_OK && entryType == CPFILE_DIRECTORY ? 1 : 0;
++  return isdirectory;
+ #else /* not WITHOUT_FILESYSTEM */
+   return 0;
+ #endif /* not WITHOUT_FILESYSTEM */
diff --git a/gnu/packages/patches/cling-use-shared-library.patch b/gnu/packages/patches/cling-use-shared-library.patch
new file mode 100644
index 0000000000..6385b307b3
--- /dev/null
+++ b/gnu/packages/patches/cling-use-shared-library.patch
@@ -0,0 +1,329 @@
+From 811f0a575231496318b5e9c9a0ff0ed195b16dc0 Mon Sep 17 00:00:00 2001
+From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
+Date: Tue, 7 Sep 2021 16:35:07 -0400
+Subject: [PATCH] build: Allow building Cling using the Clang shared library.
+
+The officially supported way to build LLVM/Clang as a shared library
+is via the LLVM_BUILD_LLVM_DYLIB and LLVM_LINK_LLVM_DYLIB CMake
+options (see: https://llvm.org/docs/BuildingADistribution.html).  When
+built this way, the whole of Clang API is exposed as a shared
+library (libclang-cpp.so).
+
+* CMakeLists.txt: Query if we're in shared mode via llvm-config, and
+register the result as LLVM_LIB_IS_SHARED.
+[LLVM_LIB_IS_SHARED] <target_link_libraries>: Use the PUBLIC interface of the
+LLVM shared library.
+* lib/Interpreter/CMakeLists.txt [LLVM_LIB_IS_SHARED]: When defined, replace the
+individual Clang components by clang-cpp.
+* lib/MetaProcessor/CMakeLists.txt: Likewise.
+* lib/Utils/CMakeLists.txt: Likewise.
+* tools/Jupyter/CMakeLists.txt: Likewise.
+* tools/driver/CMakeLists.txt: Likewise.
+* tools/libcling/CMakeLists.txt: Likewise.
+---
+ CMakeLists.txt                   | 10 ++++++--
+ lib/Interpreter/CMakeLists.txt   | 40 ++++++++++++++++++--------------
+ lib/MetaProcessor/CMakeLists.txt | 16 +++++++++----
+ lib/Utils/CMakeLists.txt         | 34 +++++++++++++++------------
+ tools/Jupyter/CMakeLists.txt     | 11 ++++++++-
+ tools/driver/CMakeLists.txt      | 16 +++----------
+ tools/libcling/CMakeLists.txt    | 38 +++++++++++++++---------------
+ 7 files changed, 93 insertions(+), 72 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 65b14b27..888f7ee9 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -23,6 +23,7 @@ if( CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR )
+       "--libdir"
+       "--includedir"
+       "--prefix"
++      "--shared-mode"
+       "--src-root")
+     execute_process(
+       COMMAND ${CONFIG_COMMAND}
+@@ -47,7 +48,8 @@ if( CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR )
+   list(GET CONFIG_OUTPUT 2 LIBRARY_DIR)
+   list(GET CONFIG_OUTPUT 3 INCLUDE_DIR)
+   list(GET CONFIG_OUTPUT 4 LLVM_OBJ_ROOT)
+-  list(GET CONFIG_OUTPUT 5 MAIN_SRC_DIR)
++  list(GET CONFIG_OUTPUT 5 LLVM_LIB_IS_SHARED)
++  list(GET CONFIG_OUTPUT 6 MAIN_SRC_DIR)
+ 
+   if(NOT MSVC_IDE)
+     set(LLVM_ENABLE_ASSERTIONS ${ENABLE_ASSERTIONS}
+@@ -427,7 +429,11 @@ macro(add_cling_library name)
+   endif()
+ 
+   if(TARGET ${name})
+-    target_link_libraries(${name} INTERFACE ${LLVM_COMMON_LIBS})
++      if(LLVM_LIB_IS_SHARED)
++          target_link_libraries(${name} PUBLIC LLVM)
++      else()
++          target_link_libraries(${name} INTERFACE ${LLVM_COMMON_LIBS})
++      endif()
+ 
+     if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY OR ${name} STREQUAL "libcling")
+       install(TARGETS ${name}
+diff --git a/lib/Interpreter/CMakeLists.txt b/lib/Interpreter/CMakeLists.txt
+index 921c773c..af65c020 100644
+--- a/lib/Interpreter/CMakeLists.txt
++++ b/lib/Interpreter/CMakeLists.txt
+@@ -6,22 +6,28 @@
+ # LICENSE.TXT for details.
+ #------------------------------------------------------------------------------
+ 
+-set(LIBS
+-  clingUtils
+-  clangCodeGen
+-  clangDriver
+-  clangFrontend
+-  clangParse
+-  clangSema
+-  clangAnalysis
+-  clangEdit
+-  clangRewrite
+-  clangRewriteFrontend
+-  clangSerialization
+-  clangAST
+-  clangBasic
+-  clangLex
+-)
++if (LLVM_LIB_IS_SHARED)
++    set(LIBS
++        clang-cpp
++        clingUtils)
++else()
++    set(LIBS
++        clingUtils
++        clangCodeGen
++        clangDriver
++        clangFrontend
++        clangParse
++        clangSema
++        clangAnalysis
++        clangEdit
++        clangRewrite
++        clangRewriteFrontend
++        clangSerialization
++        clangAST
++        clangBasic
++        clangLex
++        )
++endif()
+ 
+ set(LLVM_LINK_COMPONENTS
+   analysis
+@@ -369,4 +375,4 @@ if ((NOT builtin_llvm) AND builtin_clang)
+   get_property(P SOURCE TransactionUnloader.cpp PROPERTY INCLUDE_DIRECTORIES)
+   list(INSERT P 0 ${FixInclude})
+   set_property(SOURCE TransactionUnloader.cpp PROPERTY INCLUDE_DIRECTORIES "${P}")
+-endif()
+\ No newline at end of file
++endif()
+diff --git a/lib/MetaProcessor/CMakeLists.txt b/lib/MetaProcessor/CMakeLists.txt
+index e753dca3..5f4641bb 100644
+--- a/lib/MetaProcessor/CMakeLists.txt
++++ b/lib/MetaProcessor/CMakeLists.txt
+@@ -10,7 +10,16 @@ set( LLVM_LINK_COMPONENTS
+   core
+   support
+   binaryformat
+-)
++  )
++
++if (LLVM_LIB_IS_SHARED)
++    set(LIBS clang-cpp)
++else()
++    set(LIBS
++        clangLex
++        clangAST
++        clangBasic)
++endif()
+ 
+ add_cling_library(clingMetaProcessor OBJECT
+   Display.cpp
+@@ -21,10 +30,7 @@ add_cling_library(clingMetaProcessor OBJECT
+   MetaSema.cpp
+ 
+   LINK_LIBS
+-  clangLex
+-  clangAST
+-  clangBasic
+-
++  ${LIBS}
+   clingInterpreter
+   clingUtils
+ )
+diff --git a/lib/Utils/CMakeLists.txt b/lib/Utils/CMakeLists.txt
+index 327c9fff..fbe4bd87 100644
+--- a/lib/Utils/CMakeLists.txt
++++ b/lib/Utils/CMakeLists.txt
+@@ -26,21 +26,25 @@ set(LLVM_LINK_COMPONENTS
+   ${LLVM_TARGETS_TO_BUILD}
+ )
+ 
+-set(LIBS
+-  clangCodeGen
+-  clangDriver
+-  clangFrontend
+-  clangParse
+-  clangSema
+-  clangAnalysis
+-  clangEdit
+-  clangRewrite
+-  clangRewriteFrontend
+-  clangSerialization
+-  clangAST
+-  clangBasic
+-  clangLex
+-)
++if (LLVM_LIB_IS_SHARED)
++    set(LIBS clang-cpp)
++else()
++    set(LIBS
++        clangCodeGen
++        clangDriver
++        clangFrontend
++        clangParse
++        clangSema
++        clangAnalysis
++        clangEdit
++        clangRewrite
++        clangRewriteFrontend
++        clangSerialization
++        clangAST
++        clangBasic
++        clangLex
++        )
++endif()
+ 
+ find_library(DL_LIBRARY_PATH dl)
+ if (DL_LIBRARY_PATH)
+diff --git a/tools/Jupyter/CMakeLists.txt b/tools/Jupyter/CMakeLists.txt
+index aad5f3f7..8b4ac36f 100644
+--- a/tools/Jupyter/CMakeLists.txt
++++ b/tools/Jupyter/CMakeLists.txt
+@@ -39,6 +39,14 @@ else()
+    endif()
+ endif()
+ 
++if (LLVM_LIB_IS_SHARED)
++    set(LIBS
++        clang-cpp
++        clingUserInterface
++        clingMetaProcessor
++        ${INTERPRETER}
++        clingUtils)
++else()
+ set(LIBS
+         clangAST
+         clangBasic
+@@ -54,7 +62,8 @@ set(LIBS
+         clingMetaProcessor
+         ${INTERPRETER}
+         clingUtils
+-    )
++        )
++endif()
+ 
+ if( LLVM_ENABLE_PIC )
+     set(ENABLE_SHARED SHARED)
+diff --git a/tools/driver/CMakeLists.txt b/tools/driver/CMakeLists.txt
+index 1968b97f..5ed53fb7 100644
+--- a/tools/driver/CMakeLists.txt
++++ b/tools/driver/CMakeLists.txt
+@@ -9,23 +9,13 @@
+ # Keep symbols for JIT resolution
+ set(LLVM_NO_DEAD_STRIP 1)
+ 
+-if(BUILD_SHARED_LIBS)
+-  set(LIBS
+-    LLVMSupport
+-
+-    clangFrontendTool
+-
+-    clingInterpreter
+-    clingMetaProcessor
+-    clingUserInterface
+-    clingUtils
+-  )
++if(LLVM_LIB_IS_SHARED)
++  set(LIBS clang-cpp clingUserInterface)
+   add_cling_executable(cling
+     cling.cpp
+   )
+ else()
+   set(LIBS
+-    LLVMSupport
+ 
+     clangASTMatchers
+     clangFrontendTool
+@@ -38,7 +28,7 @@ else()
+     $<TARGET_OBJECTS:obj.clingMetaProcessor>
+     $<TARGET_OBJECTS:obj.clingUtils>
+   )
+-endif(BUILD_SHARED_LIBS)
++endif(LLVM_LIB_IS_SHARED)
+ 
+ set_target_properties(cling
+   PROPERTIES ENABLE_EXPORTS 1)
+diff --git a/tools/libcling/CMakeLists.txt b/tools/libcling/CMakeLists.txt
+index 143d3bdb..ba000d44 100644
+--- a/tools/libcling/CMakeLists.txt
++++ b/tools/libcling/CMakeLists.txt
+@@ -10,21 +10,25 @@ set(SOURCES
+   ADDITIONAL_HEADERS
+   )
+ 
+-set(LIBS
+-  clangAnalysis
+-  clangDriver
+-  clangFrontend
+-  clangParse
+-  clangSema
+-  clangAST
+-  clangLex
+-  clangSerialization
+-  clangCodeGen
+-  clangBasic
+-  clangEdit
+-
+-  clingUtils
+-)
++if (LLVM_LIB_IS_SHARED)
++    set(LIBS clang-cpp)
++else()
++    set(LIBS
++        clangAnalysis
++        clangDriver
++        clangFrontend
++        clangParse
++        clangSema
++        clangAST
++        clangLex
++        clangSerialization
++        clangCodeGen
++        clangBasic
++        clangEdit
++
++        clingUtils
++        )
++endif()
+ 
+ set( LLVM_LINK_COMPONENTS
+   analysis
+@@ -63,10 +67,6 @@ option(LIBCLING_BUILD_STATIC
+ #  set(LLVM_EXPORTED_SYMBOL_FILE)
+ #endif()
+ 
+-if( LLVM_ENABLE_PIC )
+-  set(ENABLE_SHARED SHARED)
+-endif()
+-
+ if((NOT LLVM_ENABLE_PIC OR LIBCLING_BUILD_STATIC) AND NOT WIN32)
+   set(ENABLE_STATIC STATIC)
+ endif()
+-- 
+2.33.0
+
diff --git a/gnu/packages/patches/cool-retro-term-wctype.patch b/gnu/packages/patches/cool-retro-term-wctype.patch
new file mode 100644
index 0000000000..790b0c4453
--- /dev/null
+++ b/gnu/packages/patches/cool-retro-term-wctype.patch
@@ -0,0 +1,13 @@
+Submitted upstream at https://github.com/Swordfish90/cool-retro-term/issues/692
+
+--- a/qmltermwidget/lib/TerminalCharacterDecoder.cpp	1969-12-31 18:00:01.000000000 -0600
++++ b/qmltermwidget/lib/TerminalCharacterDecoder.cpp	2021-12-27 22:07:04.452256118 -0600
+@@ -19,6 +19,8 @@
+     02110-1301  USA.
+ */
+ 
++#include <cwctype>
++
+ // Own
+ #include "TerminalCharacterDecoder.h"
+ 
diff --git a/gnu/packages/patches/coq-fix-envvars.patch b/gnu/packages/patches/coq-fix-envvars.patch
new file mode 100644
index 0000000000..deecf5ce74
--- /dev/null
+++ b/gnu/packages/patches/coq-fix-envvars.patch
@@ -0,0 +1,139 @@
+From ebe09fcac72b21d17c4e8fe6edc1b6076a4ae97c Mon Sep 17 00:00:00 2001
+From: Julien Lepiller <julien@lepiller.eu>
+Date: Sun, 21 Nov 2021 00:38:03 +0100
+Subject: [PATCH] Fix environment variable usage.
+
+---
+ checker/checker.ml      |  2 ++
+ lib/envars.ml           | 26 ++++++++++++++++----------
+ sysinit/coqargs.ml      |  3 ++-
+ sysinit/coqloadpath.ml  |  3 ++-
+ sysinit/coqloadpath.mli |  2 +-
+ tools/coqdep.ml         |  2 +-
+ 6 files changed, 24 insertions(+), 14 deletions(-)
+
+diff --git a/checker/checker.ml b/checker/checker.ml
+index f55ed9e8d6..3b797729ed 100644
+--- a/checker/checker.ml
++++ b/checker/checker.ml
+@@ -104,6 +104,7 @@ let set_include d p =
+ (* Initializes the LoadPath *)
+ let init_load_path () =
+   let coqlib = Envars.coqlib () in
++  let coqcorelib = Envars.coqcorelib () in
+   let user_contrib = coqlib/"user-contrib" in
+   let xdg_dirs = Envars.xdg_dirs in
+   let coqpath = Envars.coqpath in
+@@ -111,6 +112,7 @@ let init_load_path () =
+     CPath.choose_existing
+       [ CPath.make [ coqlib ; "plugins" ]
+       ; CPath.make [ coqlib ; ".."; "coq-core"; "plugins" ]
++      ; CPath.make [ coqcorelib ; "plugins" ]
+       ] |> function
+     | None ->
+       CErrors.user_err (Pp.str "Cannot find plugins directory")
+diff --git a/lib/envars.ml b/lib/envars.ml
+index 750bd60e71..c7affbd437 100644
+--- a/lib/envars.ml
++++ b/lib/envars.ml
+@@ -127,15 +127,21 @@ let check_file_else ~dir ~file oth =
+ let guess_coqlib fail =
+   getenv_else "COQLIB" (fun () ->
+   let prelude = "theories/Init/Prelude.vo" in
+-  check_file_else ~dir:Coq_config.coqlibsuffix ~file:prelude
+-    (fun () ->
+-      if Sys.file_exists (Coq_config.coqlib / prelude)
+-      then Coq_config.coqlib
+-      else
+-        fail "cannot guess a path for Coq libraries; please use -coqlib option \
+-              or ensure you have installed the package containing Coq's stdlib (coq-stdlib in OPAM) \
+-              If you intend to use Coq without a standard library, the -boot -noinit options must be used.")
+-  )
++  let coqlibpath = getenv_else "COQLIBPATH" (fun () -> Coq_config.coqlibsuffix) in
++  let paths = path_to_list coqlibpath in
++  let valid_paths =
++    List.filter
++      (fun dir -> (check_file_else ~dir:dir ~file:prelude (fun () -> "")) <> "")
++      paths in
++  match valid_paths with
++  | [] ->
++    if Sys.file_exists (Coq_config.coqlib / prelude)
++    then Coq_config.coqlib
++    else
++      fail "cannot guess a path for Coq libraries; please use -coqlib option \
++            or ensure you have installed the package containing Coq's stdlib (coq-stdlib in OPAM) \
++            If you intend to use Coq without a standard library, the -boot -noinit options must be used."
++  | p::_ -> p)
+ 
+ let coqlib_ref : string option ref = ref None
+ let set_user_coqlib path = coqlib_ref := Some path
+@@ -208,7 +214,7 @@ let xdg_dirs ~warn =
+ let print_config ?(prefix_var_name="") f coq_src_subdirs =
+   let open Printf in
+   fprintf f "%sCOQLIB=%s/\n" prefix_var_name (coqlib ());
+-  fprintf f "%sCOQCORELIB=%s/\n" prefix_var_name (coqlib () / "../coq-core/");
++  fprintf f "%sCOQCORELIB=%s/\n" prefix_var_name (coqcorelib ());
+   fprintf f "%sDOCDIR=%s/\n" prefix_var_name (docdir ());
+   fprintf f "%sOCAMLFIND=%s\n" prefix_var_name (ocamlfind ());
+   fprintf f "%sCAMLFLAGS=%s\n" prefix_var_name Coq_config.caml_flags;
+diff --git a/sysinit/coqargs.ml b/sysinit/coqargs.ml
+index 00f70a5fea..8325623a63 100644
+--- a/sysinit/coqargs.ml
++++ b/sysinit/coqargs.ml
+@@ -453,7 +453,8 @@ let build_load_path opts =
+     if opts.pre.boot then [],[]
+     else
+       let coqlib = Envars.coqlib () in
+-      Coqloadpath.init_load_path ~coqlib in
++      let coqcorelib = Envars.coqcorelib () in
++      Coqloadpath.init_load_path ~coqlib ~coqcorelib in
+   ml_path @ opts.pre.ml_includes ,
+   vo_path @ opts.pre.vo_includes
+ 
+diff --git a/sysinit/coqloadpath.ml b/sysinit/coqloadpath.ml
+index 95ae5da3de..a58cfe6928 100644
+--- a/sysinit/coqloadpath.ml
++++ b/sysinit/coqloadpath.ml
+@@ -35,7 +35,7 @@ let build_userlib_path ~unix_path =
+   else [], []
+ 
+ (* LoadPath for Coq user libraries *)
+-let init_load_path ~coqlib =
++let init_load_path ~coqlib ~coqcorelib =
+ 
+   let open Loadpath in
+   let user_contrib = coqlib/"user-contrib" in
+@@ -50,6 +50,7 @@ let init_load_path ~coqlib =
+     CPath.choose_existing
+       [ CPath.make [ coqlib ; "plugins" ]
+       ; CPath.make [ coqlib ; ".."; "coq-core"; "plugins" ]
++      ; CPath.make [ coqcorelib ; "plugins" ]
+       ] |> function
+     | None ->
+       CErrors.user_err (Pp.str "Cannot find plugins directory")
+diff --git a/sysinit/coqloadpath.mli b/sysinit/coqloadpath.mli
+index d853e9ea54..43c6dfa134 100644
+--- a/sysinit/coqloadpath.mli
++++ b/sysinit/coqloadpath.mli
+@@ -12,5 +12,5 @@
+    includes (in-order) Coq's standard library, Coq's [user-contrib]
+    folder, and directories specified in [COQPATH] and [XDG_DIRS] *)
+ val init_load_path
+-  : coqlib:CUnix.physical_path
++  : coqlib:CUnix.physical_path -> coqcorelib:CUnix.physical_path
+   -> CUnix.physical_path list * Loadpath.vo_path list
+diff --git a/tools/coqdep.ml b/tools/coqdep.ml
+index c1c87993e1..6c78e10866 100644
+--- a/tools/coqdep.ml
++++ b/tools/coqdep.ml
+@@ -33,7 +33,7 @@ let coqdep () =
+     let coqlib = Envars.coqlib () in
+     let coq_plugins_dir = Filename.concat (Envars.coqcorelib ()) "plugins" in
+     if not (Sys.file_exists coq_plugins_dir) then
+-      CErrors.user_err Pp.(str "coqdep: cannot find plugins directory for coqlib: " ++ str coqlib ++ fnl ());
++      CErrors.user_err Pp.(str "coqdep: cannot find plugins directory " ++ str coq_plugins_dir ++ str " for coqlib: " ++ str coqlib ++ fnl ());
+     CD.add_rec_dir_import CD.add_coqlib_known (coqlib//"theories") ["Coq"];
+     CD.add_rec_dir_import CD.add_coqlib_known (coq_plugins_dir) ["Coq"];
+     let user = coqlib//"user-contrib" in
+-- 
+2.33.1
diff --git a/gnu/packages/patches/coreutils-gnulib-tests.patch b/gnu/packages/patches/coreutils-gnulib-tests.patch
new file mode 100644
index 0000000000..7142401202
--- /dev/null
+++ b/gnu/packages/patches/coreutils-gnulib-tests.patch
@@ -0,0 +1,45 @@
+Fix Gnulib test failures showing up on ARMv7:
+
+  https://issues.guix.gnu.org/49459
+
+This is a backport of this Gnulib commit:
+
+  commit 175e0bc72808d564074c4adcc72aeadb74adfcc6
+  Author: Paul Eggert <eggert@cs.ucla.edu>
+  Date:   Thu Aug 27 17:52:58 2020 -0700
+
+      perror, strerror_r: remove unportable tests
+
+      Problem reported by Florian Weimer in:
+      https://lists.gnu.org/r/bug-gnulib/2020-08/msg00220.html
+      * tests/test-perror2.c (main):
+      * tests/test-strerror_r.c (main): Omit unportable tests.
+
+diff --git a/tests/test-perror2.c b/tests/test-perror2.c
+index 1d14eda7be..c6214dd25c 100644
+--- a/gnulib-tests/test-perror2.c
++++ b/gnulib-tests/test-perror2.c
+@@ -79,9 +79,6 @@ main (void)
+     errno = -5;
+     perror ("");
+     ASSERT (!ferror (stderr));
+-    ASSERT (msg1 == msg2 || msg1 == msg4 || STREQ (msg1, str1));
+-    ASSERT (msg2 == msg4 || STREQ (msg2, str2));
+-    ASSERT (msg3 == msg4 || STREQ (msg3, str3));
+     ASSERT (STREQ (msg4, str4));
+ 
+     free (str1);
+diff --git a/tests/test-strerror_r.c b/tests/test-strerror_r.c
+index b11d6fd9f6..c1dbcf837b 100644
+--- a/gnulib-tests/test-strerror_r.c
++++ b/gnulib-tests/test-strerror_r.c
+@@ -165,9 +165,6 @@ main (void)
+ 
+     strerror_r (EACCES, buf, sizeof buf);
+     strerror_r (-5, buf, sizeof buf);
+-    ASSERT (msg1 == msg2 || msg1 == msg4 || STREQ (msg1, str1));
+-    ASSERT (msg2 == msg4 || STREQ (msg2, str2));
+-    ASSERT (msg3 == msg4 || STREQ (msg3, str3));
+     ASSERT (STREQ (msg4, str4));
+ 
+     free (str1);
diff --git a/gnu/packages/patches/cpufrequtils-fix-aclocal.patch b/gnu/packages/patches/cpufrequtils-fix-aclocal.patch
deleted file mode 100644
index be5767f462..0000000000
--- a/gnu/packages/patches/cpufrequtils-fix-aclocal.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-Add an extra layer of quoting to ltmain.sh sanity check.
-
---- a/configure	2005-05-07 14:19:31.000000000 +0200
-+++ b/configure	2015-02-10 11:16:32.456146934 +0100
-@@ -6266,7 +6266,7 @@
-   exit 1
- fi
- gentoo_lt_version="1.5.16"
--gentoo_ltmain_version=`grep '^[:space:]*VERSION=' $ltmain | sed -e 's|^[:space:]*VERSION=||'`
-+gentoo_ltmain_version=`grep '^[[:space:]]*VERSION=' $ltmain | sed -e 's|^[[:space:]]*VERSION=||'`
- if test "$gentoo_lt_version" != "$gentoo_ltmain_version"; then
-   echo "$as_me:$LINENO: result: no" >&5
- echo "${ECHO_T}no" >&6
---- a/aclocal.m4	2005-05-07 14:19:25.000000000 +0200
-+++ b/aclocal.m4	2015-02-10 11:16:15.352030318 +0100
-@@ -246,7 +246,7 @@
-   exit 1
- fi
- gentoo_lt_version="1.5.16"
--gentoo_ltmain_version=`grep '^[[:space:]]*VERSION=' $ltmain | sed -e 's|^[[:space:]]*VERSION=||'`
-+gentoo_ltmain_version=`[grep '^[[:space:]]*VERSION=' $ltmain | sed -e 's|^[[:space:]]*VERSION=||']`
- if test "$gentoo_lt_version" != "$gentoo_ltmain_version"; then
-   AC_MSG_RESULT(no)
-   echo
---- a/libcpufreq/configure	2005-05-07 14:19:31.000000000 +0200
-+++ b/libcpufreq/configure	2015-02-10 11:16:32.456146934 +0100
-@@ -6266,7 +6266,7 @@
-   exit 1
- fi
- gentoo_lt_version="1.5.16"
--gentoo_ltmain_version=`grep '^[:space:]*VERSION=' $ltmain | sed -e 's|^[:space:]*VERSION=||'`
-+gentoo_ltmain_version=`grep '^[[:space:]]*VERSION=' $ltmain | sed -e 's|^[[:space:]]*VERSION=||'`
- if test "$gentoo_lt_version" != "$gentoo_ltmain_version"; then
-   echo "$as_me:$LINENO: result: no" >&5
- echo "${ECHO_T}no" >&6
---- a/libcpufreq/aclocal.m4	2005-05-07 14:19:25.000000000 +0200
-+++ b/libcpufreq/aclocal.m4	2015-02-10 11:16:15.352030318 +0100
-@@ -246,7 +246,7 @@
-   exit 1
- fi
- gentoo_lt_version="1.5.16"
--gentoo_ltmain_version=`grep '^[[:space:]]*VERSION=' $ltmain | sed -e 's|^[[:space:]]*VERSION=||'`
-+gentoo_ltmain_version=`[grep '^[[:space:]]*VERSION=' $ltmain | sed -e 's|^[[:space:]]*VERSION=||']`
- if test "$gentoo_lt_version" != "$gentoo_ltmain_version"; then
-   AC_MSG_RESULT(no)
-   echo
diff --git a/gnu/packages/patches/cups-CVE-2020-10001.patch b/gnu/packages/patches/cups-CVE-2020-10001.patch
deleted file mode 100644
index 1b16c7d97c..0000000000
--- a/gnu/packages/patches/cups-CVE-2020-10001.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-From efbea1742bd30f842fbbfb87a473e5c84f4162f9 Mon Sep 17 00:00:00 2001
-From: Michael R Sweet <msweet@msweet.org>
-Date: Mon, 1 Feb 2021 15:02:32 -0500
-Subject: [PATCH] Fix a buffer (read) overflow in ippReadIO (CVE-2020-10001)
-
----
-
-diff --git a/cups/ipp.c b/cups/ipp.c
-index 3d529346c..adbb26fba 100644
---- a/cups/ipp.c
-+++ b/cups/ipp.c
-@@ -2866,7 +2866,8 @@ ippReadIO(void       *src,		/* I - Data source */
-   unsigned char		*buffer,	/* Data buffer */
- 			string[IPP_MAX_TEXT],
- 					/* Small string buffer */
--			*bufptr;	/* Pointer into buffer */
-+			*bufptr,	/* Pointer into buffer */
-+			*bufend;	/* End of buffer */
-   ipp_attribute_t	*attr;		/* Current attribute */
-   ipp_tag_t		tag;		/* Current tag */
-   ipp_tag_t		value_tag;	/* Current value tag */
-@@ -3441,6 +3442,7 @@ ippReadIO(void       *src,		/* I - Data source */
- 		}
- 
-                 bufptr = buffer;
-+                bufend = buffer + n;
- 
- 	       /*
- 	        * text-with-language and name-with-language are composite
-@@ -3454,7 +3456,7 @@ ippReadIO(void       *src,		/* I - Data source */
- 
- 		n = (bufptr[0] << 8) | bufptr[1];
- 
--		if ((bufptr + 2 + n) >= (buffer + IPP_BUF_SIZE) || n >= (int)sizeof(string))
-+		if ((bufptr + 2 + n + 2) > bufend || n >= (int)sizeof(string))
- 		{
- 		  _cupsSetError(IPP_STATUS_ERROR_INTERNAL,
- 		                _("IPP language length overflows value."), 1);
-@@ -3481,7 +3483,7 @@ ippReadIO(void       *src,		/* I - Data source */
-                 bufptr += 2 + n;
- 		n = (bufptr[0] << 8) | bufptr[1];
- 
--		if ((bufptr + 2 + n) >= (buffer + IPP_BUF_SIZE))
-+		if ((bufptr + 2 + n) > bufend)
- 		{
- 		  _cupsSetError(IPP_STATUS_ERROR_INTERNAL,
- 		                _("IPP string length overflows value."), 1);
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
deleted file mode 100644
index 24be6e31d9..0000000000
--- a/gnu/packages/patches/curl-7.76-use-ssl-cert-env.patch
+++ /dev/null
@@ -1,64 +0,0 @@
-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/curl-7.77-tls-priority-string.patch b/gnu/packages/patches/curl-7.77-tls-priority-string.patch
deleted file mode 100644
index bf1bfa8aaa..0000000000
--- a/gnu/packages/patches/curl-7.77-tls-priority-string.patch
+++ /dev/null
@@ -1,98 +0,0 @@
-cURL 7.77.0 would use a bogus TLS priority string favoring older TLS
-protocol versions, which in turn would prevent access to bitbucket.org:
-
-  https://issues.guix.gnu.org/49035
-  https://github.com/curl/curl/pull/7278
-
-This patch fixes it.
-From <https://github.com/curl/curl/pull/7278/commits/b98f79f6ecdb708c67f9a0cec56ce48952a54556>.
-
-From b98f79f6ecdb708c67f9a0cec56ce48952a54556 Mon Sep 17 00:00:00 2001
-From: Daniel Stenberg <daniel@haxx.se>
-Date: Fri, 18 Jun 2021 14:54:07 +0200
-Subject: [PATCH] gnutls: set the prefer ciphers in correct order
-
-Reported-by: civodul on github
-Assisted-by: Nikos Mavrogiannopoulos
-Fixes #7277
----
- lib/vtls/gtls.c | 30 +++++++++++++-----------------
- 1 file changed, 13 insertions(+), 17 deletions(-)
-
-diff --git a/lib/vtls/gtls.c b/lib/vtls/gtls.c
-index d9bc5611e8f9..da2af64955c3 100644
---- a/lib/vtls/gtls.c
-+++ b/lib/vtls/gtls.c
-@@ -330,6 +330,9 @@ set_ssl_version_min_max(struct Curl_easy *data,
-       ssl_version_max = CURL_SSLVERSION_MAX_TLSv1_2;
-     }
-   }
-+  else if(ssl_version_max == CURL_SSLVERSION_MAX_DEFAULT) {
-+    ssl_version_max = CURL_SSLVERSION_MAX_TLSv1_3;
-+  }
- 
-   switch(ssl_version | ssl_version_max) {
-   case CURL_SSLVERSION_TLSv1_0 | CURL_SSLVERSION_MAX_TLSv1_0:
-@@ -338,11 +341,11 @@ set_ssl_version_min_max(struct Curl_easy *data,
-     return CURLE_OK;
-   case CURL_SSLVERSION_TLSv1_0 | CURL_SSLVERSION_MAX_TLSv1_1:
-     *prioritylist = GNUTLS_CIPHERS ":-VERS-SSL3.0:-VERS-TLS-ALL:"
--      "+VERS-TLS1.0:+VERS-TLS1.1";
-+      "+VERS-TLS1.1:+VERS-TLS1.0";
-     return CURLE_OK;
-   case CURL_SSLVERSION_TLSv1_0 | CURL_SSLVERSION_MAX_TLSv1_2:
-     *prioritylist = GNUTLS_CIPHERS ":-VERS-SSL3.0:-VERS-TLS-ALL:"
--      "+VERS-TLS1.0:+VERS-TLS1.1:+VERS-TLS1.2";
-+      "+VERS-TLS1.2:+VERS-TLS1.1:+VERS-TLS1.0";
-     return CURLE_OK;
-   case CURL_SSLVERSION_TLSv1_1 | CURL_SSLVERSION_MAX_TLSv1_1:
-     *prioritylist = GNUTLS_CIPHERS ":-VERS-SSL3.0:-VERS-TLS-ALL:"
-@@ -350,7 +353,7 @@ set_ssl_version_min_max(struct Curl_easy *data,
-     return CURLE_OK;
-   case CURL_SSLVERSION_TLSv1_1 | CURL_SSLVERSION_MAX_TLSv1_2:
-     *prioritylist = GNUTLS_CIPHERS ":-VERS-SSL3.0:-VERS-TLS-ALL:"
--      "+VERS-TLS1.1:+VERS-TLS1.2";
-+      "+VERS-TLS1.2:+VERS-TLS1.1";
-     return CURLE_OK;
-   case CURL_SSLVERSION_TLSv1_2 | CURL_SSLVERSION_MAX_TLSv1_2:
-     *prioritylist = GNUTLS_CIPHERS ":-VERS-SSL3.0:-VERS-TLS-ALL:"
-@@ -360,25 +363,17 @@ set_ssl_version_min_max(struct Curl_easy *data,
-     *prioritylist = GNUTLS_CIPHERS ":-VERS-SSL3.0:-VERS-TLS-ALL:"
-       "+VERS-TLS1.3";
-     return CURLE_OK;
--  case CURL_SSLVERSION_TLSv1_0 | CURL_SSLVERSION_MAX_DEFAULT:
--    *prioritylist = GNUTLS_CIPHERS ":-VERS-SSL3.0:-VERS-TLS-ALL:"
--      "+VERS-TLS1.0:+VERS-TLS1.1:+VERS-TLS1.2"
--      ":+VERS-TLS1.3";
-+  case CURL_SSLVERSION_TLSv1_0 | CURL_SSLVERSION_MAX_TLSv1_3:
-+    *prioritylist = GNUTLS_CIPHERS ":-VERS-SSL3.0";
-     return CURLE_OK;
--  case CURL_SSLVERSION_TLSv1_1 | CURL_SSLVERSION_MAX_DEFAULT:
-+  case CURL_SSLVERSION_TLSv1_1 | CURL_SSLVERSION_MAX_TLSv1_3:
-     *prioritylist = GNUTLS_CIPHERS ":-VERS-SSL3.0:-VERS-TLS-ALL:"
--      "+VERS-TLS1.1:+VERS-TLS1.2"
--      ":+VERS-TLS1.3";
-+      "+VERS-TLS1.3:+VERS-TLS1.2:+VERS-TLS1.1";
-     return CURLE_OK;
--  case CURL_SSLVERSION_TLSv1_2 | CURL_SSLVERSION_MAX_DEFAULT:
-+  case CURL_SSLVERSION_TLSv1_2 | CURL_SSLVERSION_MAX_TLSv1_3:
-     *prioritylist = GNUTLS_CIPHERS ":-VERS-SSL3.0:-VERS-TLS-ALL:"
--      "+VERS-TLS1.2"
--      ":+VERS-TLS1.3";
-+      "+VERS-TLS1.3:+VERS-TLS1.2";
-     return CURLE_OK;
--  case CURL_SSLVERSION_TLSv1_3 | CURL_SSLVERSION_MAX_DEFAULT:
--    *prioritylist = GNUTLS_CIPHERS ":-VERS-SSL3.0:-VERS-TLS-ALL:"
--      "+VERS-TLS1.2"
--      ":+VERS-TLS1.3";
-     return CURLE_OK;
-   }
- 
-@@ -608,6 +603,7 @@ gtls_connect_step1(struct Curl_easy *data,
-   }
-   else {
- #endif
-+    infof(data, "GnuTLS ciphers: %s\n", prioritylist);
-     rc = gnutls_priority_set_direct(session, prioritylist, &err);
- #ifdef HAVE_GNUTLS_SRP
-   }
diff --git a/gnu/packages/patches/curl-use-ssl-cert-env.patch b/gnu/packages/patches/curl-use-ssl-cert-env.patch
index c8e80b4445..24be6e31d9 100644
--- a/gnu/packages/patches/curl-use-ssl-cert-env.patch
+++ b/gnu/packages/patches/curl-use-ssl-cert-env.patch
@@ -47,14 +47,14 @@ diff -ur curl-7.66.0.orig/lib/url.c curl-7.66.0/lib/url.c
 +    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_ORIG], 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_ORIG], 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;
diff --git a/gnu/packages/patches/dbus-CVE-2020-12049.patch b/gnu/packages/patches/dbus-CVE-2020-12049.patch
deleted file mode 100644
index 71280144a1..0000000000
--- a/gnu/packages/patches/dbus-CVE-2020-12049.patch
+++ /dev/null
@@ -1,58 +0,0 @@
-Fix CVE-2020-12049:
-
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-12049
-https://lists.freedesktop.org/archives/ftp-release/2020-June/000753.html
-
-Taken from upstream:
-
-https://gitlab.freedesktop.org/dbus/dbus/-/commit/272d484283883fa9ff95b69d924fff6cd34842f5
-
-diff --git a/dbus/dbus-sysdeps-unix.c b/dbus/dbus-sysdeps-unix.c
---- a/dbus/dbus-sysdeps-unix.c
-+++ b/dbus/dbus-sysdeps-unix.c
-@@ -435,18 +435,6 @@ _dbus_read_socket_with_unix_fds (DBusSocket        fd,
-       struct cmsghdr *cm;
-       dbus_bool_t found = FALSE;
- 
--      if (m.msg_flags & MSG_CTRUNC)
--        {
--          /* Hmm, apparently the control data was truncated. The bad
--             thing is that we might have completely lost a couple of fds
--             without chance to recover them. Hence let's treat this as a
--             serious error. */
--
--          errno = ENOSPC;
--          _dbus_string_set_length (buffer, start);
--          return -1;
--        }
--
-       for (cm = CMSG_FIRSTHDR(&m); cm; cm = CMSG_NXTHDR(&m, cm))
-         if (cm->cmsg_level == SOL_SOCKET && cm->cmsg_type == SCM_RIGHTS)
-           {
-@@ -501,6 +489,26 @@ _dbus_read_socket_with_unix_fds (DBusSocket        fd,
-       if (!found)
-         *n_fds = 0;
- 
-+      if (m.msg_flags & MSG_CTRUNC)
-+        {
-+          unsigned int i;
-+
-+          /* Hmm, apparently the control data was truncated. The bad
-+             thing is that we might have completely lost a couple of fds
-+             without chance to recover them. Hence let's treat this as a
-+             serious error. */
-+
-+          /* We still need to close whatever fds we *did* receive,
-+           * otherwise they'll never get closed. (CVE-2020-12049) */
-+          for (i = 0; i < *n_fds; i++)
-+            close (fds[i]);
-+
-+          *n_fds = 0;
-+          errno = ENOSPC;
-+          _dbus_string_set_length (buffer, start);
-+          return -1;
-+        }
-+
-       /* put length back (doesn't actually realloc) */
-       _dbus_string_set_length (buffer, start + bytes_read);
- 
diff --git a/gnu/packages/patches/dealii-fix-compiliation-with-boost-1.78.patch b/gnu/packages/patches/dealii-fix-compiliation-with-boost-1.78.patch
new file mode 100644
index 0000000000..1937aa9afc
--- /dev/null
+++ b/gnu/packages/patches/dealii-fix-compiliation-with-boost-1.78.patch
@@ -0,0 +1,40 @@
+From cbef761731627cece2a6f0276b87dacabbdc8a72 Mon Sep 17 00:00:00 2001
+From: David Wells <drwells@email.unc.edu>
+Date: Tue, 4 Jan 2022 12:46:30 -0500
+Subject: [PATCH] Fix compilation with boost 1.78.
+
+I bisected (fortunately Boost.Geometry a header-only library so adding the
+include directory sufficed) and
+https://github.com/boostorg/geometry/commit/6eb9e238bcb37e26dc31d16acf826784a2ba30f4
+is where this problem starts for us. See also
+https://github.com/boostorg/geometry/issues/792 - the easiest fix for all such
+issues is to just include the project header `boost/geometry/geometry.hpp`.
+
+In this particular case, if you look at the commit which causes grid_tools.cc
+fails to compile, its because we were relying on some implicit includes. In
+particular, we need the distance header to find the distance between points and
+boxes, but that was previously included in another file.
+
+This patch has been adapted from
+e0e76835519d122fd12b5858e16d08641a641c6a to apply to dealii 9.3.2.
+
+See https://github.com/dealii/dealii/pull/13165.
+---
+ include/deal.II/numerics/rtree.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/include/deal.II/numerics/rtree.h b/include/deal.II/numerics/rtree.h
+index 1b9d04dacd..1e1bfd2932 100644
+--- a/include/deal.II/numerics/rtree.h
++++ b/include/deal.II/numerics/rtree.h
+@@ -26,6 +26,7 @@
+ #include <deal.II/boost_adaptors/segment.h>
+ 
+ DEAL_II_DISABLE_EXTRA_DIAGNOSTICS
++#include <boost/geometry/algorithms/distance.hpp>
+ #include <boost/geometry/index/rtree.hpp>
+ #include <boost/geometry/strategies/strategies.hpp>
+ DEAL_II_ENABLE_EXTRA_DIAGNOSTICS
+-- 
+2.30.2
+
diff --git a/gnu/packages/patches/dealii-fix-sundials.patch b/gnu/packages/patches/dealii-fix-sundials.patch
new file mode 100644
index 0000000000..7dd5df45da
--- /dev/null
+++ b/gnu/packages/patches/dealii-fix-sundials.patch
@@ -0,0 +1,60 @@
+From af73f368f7f9d4a00df075d1a9f50fc495f8e87a Mon Sep 17 00:00:00 2001
+From: Timo Heister <timo.heister@gmail.com>
+Date: Sat, 25 Dec 2021 12:30:45 -0500
+Subject: [PATCH] fix sundials compilation
+
+---
+ include/deal.II/sundials/n_vector.templates.h | 11 ++++++-----
+ 1 file changed, 6 insertions(+), 5 deletions(-)
+
+diff --git a/include/deal.II/sundials/n_vector.templates.h b/include/deal.II/sundials/n_vector.templates.h
+index 2b49e3efc9..746f63a03b 100644
+--- a/include/deal.II/sundials/n_vector.templates.h
++++ b/include/deal.II/sundials/n_vector.templates.h
+@@ -253,13 +253,13 @@ namespace SUNDIALS
+       template <
+         typename VectorType,
+         typename std::enable_if_t<!IsBlockVector<VectorType>::value, int> = 0>
+-      MPI_Comm
++      const MPI_Comm &
+       get_communicator(N_Vector v);
+ 
+       template <
+         typename VectorType,
+         typename std::enable_if_t<IsBlockVector<VectorType>::value, int> = 0>
+-      MPI_Comm
++      const MPI_Comm &
+       get_communicator(N_Vector v);
+ 
+       /**
+@@ -481,7 +481,7 @@ SUNDIALS::internal::NVectorOperations::destroy(N_Vector v)
+ 
+ template <typename VectorType,
+           std::enable_if_t<IsBlockVector<VectorType>::value, int>>
+-MPI_Comm
++const MPI_Comm &
+ SUNDIALS::internal::NVectorOperations::get_communicator(N_Vector v)
+ {
+   return unwrap_nvector_const<VectorType>(v)->block(0).get_mpi_communicator();
+@@ -491,7 +491,7 @@ SUNDIALS::internal::NVectorOperations::get_communicator(N_Vector v)
+ 
+ template <typename VectorType,
+           std::enable_if_t<!IsBlockVector<VectorType>::value, int>>
+-MPI_Comm
++const MPI_Comm &
+ SUNDIALS::internal::NVectorOperations::get_communicator(N_Vector v)
+ {
+   return unwrap_nvector_const<VectorType>(v)->get_mpi_communicator();
+@@ -519,7 +519,8 @@ SUNDIALS::internal::NVectorOperations::get_communicator_as_void_ptr(N_Vector v)
+   (void)v;
+   return nullptr;
+ #  else
+-  return get_communicator<VectorType>(v);
++  // We need to cast away const here, as SUNDIALS demands a pure `void *`.
++  return &(const_cast<MPI_Comm &>(get_communicator<VectorType>(v)));
+ #  endif
+ }
+ 
+-- 
+2.30.2
+
diff --git a/gnu/packages/patches/diffoscope-fix-llvm-test.patch b/gnu/packages/patches/diffoscope-fix-llvm-test.patch
new file mode 100644
index 0000000000..45e496a128
--- /dev/null
+++ b/gnu/packages/patches/diffoscope-fix-llvm-test.patch
@@ -0,0 +1,28 @@
+From b7eeac09eb068083bdee1a3aa062d1e52a2fa61a Mon Sep 17 00:00:00 2001
+From: Tobias Geerinckx-Rice <me@tobias.gr>
+Date: Mon, 4 Oct 2021 21:03:43 +0200
+Subject: [PATCH] gnu: diffoscope: Fix test_item3_deflate_llvm_bitcode.
+
+Taken verbatim from Nixpkgs[0].
+
+[0]: https://github.com/NixOS/nixpkgs/blob/589e03f109092a3ba97781fd0533110bf78a3f97/pkgs/tools/misc/diffoscope/fix-tests.patch
+---
+ tests/comparators/test_rlib.py | 3 ---
+ 1 file changed, 3 deletions(-)
+
+diff --git a/tests/comparators/test_rlib.py b/tests/comparators/test_rlib.py
+index 8d201ab..05960aa 100644
+--- a/tests/comparators/test_rlib.py
++++ b/tests/comparators/test_rlib.py
+@@ -81,9 +81,6 @@ def rlib_dis_expected_diff():
+     if actual_ver >= "7.0":
+         diff_file = "rlib_llvm_dis_expected_diff_7"
+ 
+-    if actual_ver >= "10.0":
+-        diff_file = "rlib_llvm_dis_expected_diff_10"
+-
+     return get_data(diff_file)
+ 
+ 
+--
+2.33.0
diff --git a/gnu/packages/patches/diffutils-fix-signal-processing.patch b/gnu/packages/patches/diffutils-fix-signal-processing.patch
new file mode 100644
index 0000000000..134dd3f718
--- /dev/null
+++ b/gnu/packages/patches/diffutils-fix-signal-processing.patch
@@ -0,0 +1,58 @@
+Author: Frédéric Bonnard <frediz@debian.org>
+
+Obtained from:
+
+https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=922552#19
+
+Fixes bug reported upstream at:
+
+https://debbugs.gnu.org/cgi/bugreport.cgi?bug=34519
+
+diff --git a/src/diff.c b/src/diff.c
+index e2eb32437353..b574e8282dc9 100644
+--- a/src/diff.c
++++ b/src/diff.c
+@@ -1451,6 +1451,8 @@ compare_files (struct comparison const *parent,
+ 	}
+     }
+ 
++  final_process_signals ();
++
+   /* Now the comparison has been done, if no error prevented it,
+      and STATUS is the value this function will return.  */
+ 
+diff --git a/src/diff.h b/src/diff.h
+index 03daaa4a0530..e177fe600a25 100644
+--- a/src/diff.h
++++ b/src/diff.h
+@@ -390,6 +390,7 @@ extern enum changes analyze_hunk (struct change *, lin *, lin *, lin *, lin *);
+ extern void begin_output (void);
+ extern void debug_script (struct change *);
+ extern void fatal (char const *) __attribute__((noreturn));
++extern void final_process_signals (void);
+ extern void finish_output (void);
+ extern void message (char const *, char const *, char const *);
+ extern void message5 (char const *, char const *, char const *,
+diff --git a/src/util.c b/src/util.c
+index 4f4d9bb285eb..56d292de2927 100644
+--- a/src/util.c
++++ b/src/util.c
+@@ -237,6 +237,18 @@ process_signals (void)
+     }
+ }
+ 
++/* Process remaining signals once before exit  */
++void
++final_process_signals (void)
++{
++  static int last = 1;
++
++  if (last) {
++    process_signals ();
++    last = 0;
++  }
++}
++
+ static void
+ install_signal_handlers (void)
+ {
diff --git a/gnu/packages/patches/diffutils-gets-undeclared.patch b/gnu/packages/patches/diffutils-gets-undeclared.patch
deleted file mode 100644
index b6cdc77caa..0000000000
--- a/gnu/packages/patches/diffutils-gets-undeclared.patch
+++ /dev/null
@@ -1,71 +0,0 @@
-This patch is needed to allow builds with newer versions of
-the GNU libc (2.16+).
-
-
-commit 66712c23388e93e5c518ebc8515140fa0c807348
-Author: Eric Blake <eblake@redhat.com>
-Date:   Thu Mar 29 13:30:41 2012 -0600
-
-    stdio: don't assume gets any more
-    
-    Gnulib intentionally does not have a gets module, and now that C11
-    and glibc have dropped it, we should be more proactive about warning
-    any user on a platform that still has a declaration of this dangerous
-    interface.
-    
-    * m4/stdio_h.m4 (gl_STDIO_H, gl_STDIO_H_DEFAULTS): Drop gets
-    support.
-    * modules/stdio (Makefile.am): Likewise.
-    * lib/stdio-read.c (gets): Likewise.
-    * tests/test-stdio-c++.cc: Likewise.
-    * m4/warn-on-use.m4 (gl_WARN_ON_USE_PREPARE): Fix comment.
-    * lib/stdio.in.h (gets): Make warning occur in more places.
-    * doc/posix-functions/gets.texi (gets): Update documentation.
-    Reported by Christer Solskogen.
-    
-    Signed-off-by: Eric Blake <eblake@redhat.com>
-
-diff --git a/lib/stdio.in.h b/lib/stdio.in.h
-index aa7b599..c377b6e 100644
---- a/lib/stdio.in.h
-+++ b/lib/stdio.in.h
-@@ -698,22 +698,11 @@ _GL_WARN_ON_USE (getline, "getline is unportable - "
- # endif
- #endif
- 
--#if @GNULIB_GETS@
--# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@
--#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
--#   undef gets
--#   define gets rpl_gets
--#  endif
--_GL_FUNCDECL_RPL (gets, char *, (char *s) _GL_ARG_NONNULL ((1)));
--_GL_CXXALIAS_RPL (gets, char *, (char *s));
--# else
--_GL_CXXALIAS_SYS (gets, char *, (char *s));
--#  undef gets
--# endif
--_GL_CXXALIASWARN (gets);
- /* It is very rare that the developer ever has full control of stdin,
--   so any use of gets warrants an unconditional warning.  Assume it is
--   always declared, since it is required by C89.  */
-+   so any use of gets warrants an unconditional warning; besides, C11
-+   removed it.  */
-+#undef gets
-+#if HAVE_RAW_DECL_GETS
- _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
- #endif
- 
-@@ -1053,9 +1042,9 @@ _GL_WARN_ON_USE (snprintf, "snprintf is unportable - "
- # endif
- #endif
- 
--/* Some people would argue that sprintf should be handled like gets
--   (for example, OpenBSD issues a link warning for both functions),
--   since both can cause security holes due to buffer overruns.
-+/* Some people would argue that all sprintf uses should be warned about
-+   (for example, OpenBSD issues a link warning for it),
-+   since it can cause security holes due to buffer overruns.
-    However, we believe that sprintf can be used safely, and is more
-    efficient than snprintf in those safe cases; and as proof of our
-    belief, we use sprintf in several gnulib modules.  So this header
diff --git a/gnu/packages/patches/disarchive-cross-compilation.patch b/gnu/packages/patches/disarchive-cross-compilation.patch
deleted file mode 100644
index 8061262168..0000000000
--- a/gnu/packages/patches/disarchive-cross-compilation.patch
+++ /dev/null
@@ -1,77 +0,0 @@
-From dc0f8f8bf8608c39da32e3c8ca1484b766fc7452 Mon Sep 17 00:00:00 2001
-From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
-Date: Mon, 17 May 2021 16:47:19 -0400
-Subject: [PATCH] build: Fix cross-compilation.
-
-The cross-compilation issues corrected by this change were discovered
-when attempting to cross-compile disarchive for the i586-gnu target on
-GNU Guix.
-
-* configure.ac [O_NOFOLLOW]: Rewrite test using AC_COMPUTE_INT, which
-is supported even when cross-compiling.
-(GUILD_TARGET_OPTION): New computed variable.
-* build-aux/guile.am ($(AM_V_GUILEC)GUILE_AUTO_COMPILE): Use it.
----
- build-aux/guile.am |  6 +++---
- configure.ac       | 24 +++++++++++++++---------
- 2 files changed, 18 insertions(+), 12 deletions(-)
-
-diff --git a/build-aux/guile.am b/build-aux/guile.am
-index bec04ea..7745125 100644
---- a/build-aux/guile.am
-+++ b/build-aux/guile.am
-@@ -54,7 +54,7 @@ AM_V_GUILEC_0 = @echo "  GUILEC" $@;
- SUFFIXES = .scm .go
- 
- .scm.go:
--	$(AM_V_GUILEC)GUILE_AUTO_COMPILE=0      \
--	$(top_builddir)/pre-inst-env            \
--	$(GUILD) compile $(GUILE_WARNINGS)      \
-+	$(AM_V_GUILEC)GUILE_AUTO_COMPILE=0                              \
-+	$(top_builddir)/pre-inst-env                                    \
-+	$(GUILD) compile $(GUILE_WARNINGS) $(GUILD_TARGET_OPTION)       \
- 	         -o "$@" "$<"
-diff --git a/configure.ac b/configure.ac
-index 99c5ac5..0cd0173 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -39,21 +39,27 @@ AS_IF([test "x$GUILD" = "x"],
-     [AC_MSG_ERROR(m4_normalize([
-       'guild' binary not found; please check your Guile installation.]))])])
- 
-+dnl This argument is passed to guild; it ensures cross-compiling uses
-+dnl the right target.
-+if test -n "$host_alias"; then
-+   AC_SUBST([GUILD_TARGET_OPTION], [--target=$host_alias])
-+fi
-+
- GUILE_MODULE_REQUIRED(gcrypt hash)
- 
- dnl Guile defines a handful of values from <fcntl.h>, but it is
- dnl missing O_NOFOLLOW.
- AC_ARG_VAR([O_NOFOLLOW], [value to use for O_NOFOLLOW (cf. <fcntl.h>)])
- AS_IF([test "x$O_NOFOLLOW" = "x"],
--  [AC_MSG_CHECKING([the value of O_NOFOLLOW])
--   AC_RUN_IFELSE([AC_LANG_PROGRAM([[
--       #include <fcntl.h>
--       #include <stdio.h>
--     ]], [[
--       printf("%d\n", O_NOFOLLOW)
--     ]])],
--     [O_NOFOLLOW=`./conftest$EXEEXT`],
--     [AC_MSG_FAILURE([could find value for O_NOFOLLOW])])])
-+  [AC_MSG_CHECKING([the value of O_NOFOLLOW])]
-+  [AC_COMPUTE_INT([O_NOFOLLOW],
-+      [O_NOFOLLOW],
-+      [[
-+        #include <fcntl.h>
-+        #include <stdio.h>
-+      ]],
-+      [AC_MSG_FAILURE([could find value for O_NOFOLLOW])])]
-+  [AC_MSG_RESULT([$O_NOFOLLOW])])
- 
- AC_ARG_VAR([TAR], [tar utility])
- AS_IF([test "x$TAR" = "x"], [AC_PATH_PROG([TAR], [tar])])
--- 
-2.31.1
-
diff --git a/gnu/packages/patches/docbook-xsl-nonrecursive-string-subst.patch b/gnu/packages/patches/docbook-xsl-nonrecursive-string-subst.patch
index 4199dd18a5..fed4b76429 100644
--- a/gnu/packages/patches/docbook-xsl-nonrecursive-string-subst.patch
+++ b/gnu/packages/patches/docbook-xsl-nonrecursive-string-subst.patch
@@ -5,7 +5,7 @@ https://bugzilla.samba.org/show_bug.cgi?id=9515
 https://bugzilla.gnome.org/show_bug.cgi?id=736077 (for xsltproc)
 
 Patch copied from Debian:
-https://anonscm.debian.org/cgit/collab-maint/docbook-xsl.git/tree/debian/patches/765567_non-recursive_string_subst.patch
+https://salsa.debian.org/debian/docbook-xsl/-/blob/master/debian/patches/765567_non-recursive_string_subst.patch
 
 Description: use EXSLT "replace" function when available
  A recursive implementation  of string.subst is problematic,
@@ -15,11 +15,12 @@ Bug-Debian: https://bugs.debian.org/750593
 
 --- a/lib/lib.xsl
 +++ b/lib/lib.xsl
-@@ -10,7 +10,10 @@
+@@ -6,7 +6,11 @@
+ 
       This module implements DTD-independent functions
  
-      ******************************************************************** -->
--<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+-     ******************************************************************** --><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
++     ******************************************************************** -->
 +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 +                xmlns:str="http://exslt.org/strings"
 +                exclude-result-prefixes="str"
@@ -27,7 +28,7 @@ Bug-Debian: https://bugs.debian.org/750593
  
  <xsl:template name="dot.count">
    <!-- Returns the number of "." characters in a string -->
-@@ -56,6 +59,9 @@
+@@ -52,6 +56,9 @@
    <xsl:param name="replacement"/>
  
    <xsl:choose>
diff --git a/gnu/packages/patches/docbook-xsl-support-old-url.patch b/gnu/packages/patches/docbook-xsl-support-old-url.patch
new file mode 100644
index 0000000000..5b7dda458f
--- /dev/null
+++ b/gnu/packages/patches/docbook-xsl-support-old-url.patch
@@ -0,0 +1,17 @@
+Docbook 1.79.2 makes very few changes apart from changing the canonical URL
+to cdn.docbook.org.  This patch adds support for the previous URL to avoid
+breaking packages that still use that.
+
+Adapted from Debian:
+https://salsa.debian.org/debian/docbook-xsl/-/blob/master/debian/patches/0005-catalog.xml-Compatibility-with-1.79.1-or-earlier.patch
+
+--- a/catalog.xml
++++ b/catalog.xml
+@@ -5,4 +5,7 @@
+   <rewriteSystem systemIdStartString="http://cdn.docbook.org/release/xsl/current/" rewritePrefix="./"/>
+   <rewriteURI uriStartString="http://cdn.docbook.org/release/xsl/1.79.2/" rewritePrefix="./"/>
+   <rewriteSystem systemIdStartString="http://cdn.docbook.org/release/xsl/1.79.2/" rewritePrefix="./"/>
++  <!-- Also support old URI of v1.79.1 or earlier -->
++  <rewriteURI uriStartString="http://docbook.sourceforge.net/release/xsl/current/" rewritePrefix="./"/>
++  <rewriteSystem systemIdStartString="http://docbook.sourceforge.net/release/xsl/current/" rewritePrefix="./"/>
+ </catalog>
diff --git a/gnu/packages/patches/doxygen-1.8.17-runtests.patch b/gnu/packages/patches/doxygen-1.8.17-runtests.patch
deleted file mode 100644
index 0340c72448..0000000000
--- a/gnu/packages/patches/doxygen-1.8.17-runtests.patch
+++ /dev/null
@@ -1,73 +0,0 @@
-1.8.17 was released with a broken test runner.
-
-https://github.com/doxygen/doxygen/issues/7464
-
-Taken from upstream:
-https://github.com/doxygen/doxygen/commit/cd9dee013dc749a10bbe019c350e0e62b6635795
-
-diff --git a/testing/runtests.py b/testing/runtests.py
-index a4118b865..10fe50214 100755
---- a/testing/runtests.py
-+++ b/testing/runtests.py
-@@ -3,6 +3,7 @@
- from __future__ import print_function
- import argparse, glob, itertools, re, shutil, os, sys
- import subprocess
-+import shlex
- 
- config_reg = re.compile('.*\/\/\s*(?P<name>\S+):\s*(?P<value>.*)$')
- 
-@@ -28,10 +29,10 @@ def xpopen(cmd, cmd1="",encoding='utf-8-sig', getStderr=False):
- 		return os.popen(cmd).read() # Python 2 without encoding
- 	else:
- 		if (getStderr):
--			proc = subprocess.run(cmd1,encoding=encoding,capture_output=True) # Python 3 with encoding
--			return proc.stderr
-+			proc = subprocess.Popen(shlex.split(cmd1),stdout=subprocess.PIPE,stderr=subprocess.PIPE,encoding=encoding) # Python 3 with encoding
-+			return proc.stderr.read()
- 		else:
--			proc = subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE,encoding=encoding) # Python 3 with encoding
-+			proc = subprocess.Popen(shlex.split(cmd),stdout=subprocess.PIPE,stderr=subprocess.PIPE,encoding=encoding) # Python 3 with encoding
- 			return proc.stdout.read()
- 
- class Tester:
-@@ -137,7 +138,7 @@ def prepare_test(self):
- 				print('GENERATE_DOCBOOK=NO', file=f)
- 			if (self.args.xhtml):
- 				print('GENERATE_HTML=YES', file=f)
--			# HTML_OUTPUT can also be set locally
-+			# HTML_OUTPUT can also have been set locally
- 			print('HTML_OUTPUT=%s/html' % self.test_out, file=f)
- 			print('HTML_FILE_EXTENSION=.xhtml', file=f)
- 			if (self.args.pdf):
-@@ -184,7 +185,7 @@ def update_test(self,testmgr):
- 					print('Non-existing file %s after \'check:\' statement' % check_file)
- 					return
- 				# convert output to canonical form
--				data = xpopen('%s --format --noblanks --nowarning %s' % (self.args.xmllint,check_file)).read()
-+				data = xpopen('%s --format --noblanks --nowarning %s' % (self.args.xmllint,check_file))
- 				if data:
- 					# strip version
- 					data = re.sub(r'xsd" version="[0-9.-]+"','xsd" version=""',data).rstrip('\n')
-@@ -326,7 +327,7 @@ def perform_test(self,testmgr):
- 			tests.append(glob.glob('%s/*.xml' % (docbook_output)))
- 			tests.append(glob.glob('%s/*/*/*.xml' % (docbook_output)))
- 			tests = ' '.join(list(itertools.chain.from_iterable(tests))).replace(self.args.outputdir +'/','').replace('\\','/')
--			exe_string = '%s --nonet --postvalid %s' % (self.args.xmllint,tests)
-+			exe_string = '%s --noout --nonet --postvalid %s' % (self.args.xmllint,tests)
- 			exe_string1 = exe_string
- 			exe_string += ' %s' % (redirx)
- 			exe_string += ' %s more "%s/temp"' % (separ,docbook_output)
-@@ -346,7 +347,11 @@ def perform_test(self,testmgr):
- 				redirx=' 2> %s/temp >nul:'%html_output
- 			else:
- 				redirx='2>%s/temp >/dev/null'%html_output
--			exe_string = '%s --path dtd --nonet --postvalid %s/*xhtml' % (self.args.xmllint,html_output)
-+			check_file = []
-+			check_file.append(glob.glob('%s/*.xhtml' % (html_output)))
-+			check_file.append(glob.glob('%s/*/*/*.xhtml' % (html_output)))
-+			check_file = ' '.join(list(itertools.chain.from_iterable(check_file))).replace(self.args.outputdir +'/','').replace('\\','/')
-+			exe_string = '%s --noout --path dtd --nonet --postvalid %s' % (self.args.xmllint,check_file)
- 			exe_string1 = exe_string
- 			exe_string += ' %s' % (redirx)
- 			exe_string += ' %s more "%s/temp"' % (separ,html_output)
diff --git a/gnu/packages/patches/doxygen-test.patch b/gnu/packages/patches/doxygen-test.patch
deleted file mode 100644
index 1c0d4eb946..0000000000
--- a/gnu/packages/patches/doxygen-test.patch
+++ /dev/null
@@ -1,60 +0,0 @@
-Modify the expected outcome of test 012 so that it passes when bibtex is
-not in the path, as we do not wish to add texlive as an input just for this
-test.
-
-diff -u -r doxygen-1.8.7.orig/testing/012/citelist.xml doxygen-1.8.7/testing/012/citelist.xml
---- doxygen-1.8.7.orig/testing/012/citelist.xml	2014-04-24 23:43:34.000000000 +0200
-+++ doxygen-1.8.7/testing/012/citelist.xml	2014-04-24 23:49:43.000000000 +0200
-@@ -6,38 +6,6 @@
-     <briefdescription>
-     </briefdescription>
-     <detaileddescription>
--      <para>
--        <variablelist>
--          <varlistentry>
--            <term><anchor id="citelist_1CITEREF_Be09"/>[1]</term>
--          </varlistentry>
--          <listitem>
--            <para>P.<nonbreakablespace/>Belotti. <ulink url="http://doi.org/10.1007/978-1-4614-1927-3_5">Disjunctive cuts for non-convex MINLP</ulink>. In <ulink url="#CITEREF_LeLe12">Lee and Leyffer</ulink> <ulink url="#CITEREF_LeLe12">[4]</ulink>, pages 117<ndash/>144.</para>
--            <para/>
--          </listitem>
--          <varlistentry>
--            <term><anchor id="citelist_1CITEREF_BertholdHeinzVigerske2009"/>[2]</term>
--          </varlistentry>
--          <listitem>
--            <para>T.<nonbreakablespace/>Berthold, S.<nonbreakablespace/>Heinz, and S.<nonbreakablespace/>Vigerske. <ulink url="http://doi.org/10.1007/978-1-4614-1927-3_15">Extending a CIP framework to solve MIQCPs</ulink>. In <ulink url="#CITEREF_LeLe12">Lee and Leyffer</ulink> <ulink url="#CITEREF_LeLe12">[4]</ulink>, pages 427<ndash/>444.</para>
--            <para/>
--          </listitem>
--          <varlistentry>
--            <term><anchor id="citelist_1CITEREF_knuth79"/>[3]</term>
--          </varlistentry>
--          <listitem>
--            <para>Donald<nonbreakablespace/>E. Knuth. <emphasis>Tex and Metafont, New Directions in Typesetting</emphasis>. American Mathematical Society and Digital Press, Stanford, 1979.</para>
--            <para/>
--          </listitem>
--          <varlistentry>
--            <term><anchor id="citelist_1CITEREF_LeLe12"/>[4]</term>
--          </varlistentry>
--          <listitem>
--            <para>Jon Lee and Sven Leyffer, editors. <ulink url="http://doi.org/10.1007/978-1-4614-1927-3"><emphasis>Mixed Integer Nonlinear Programming</emphasis></ulink>, volume 154 of <emphasis>The IMA Volumes in Mathematics and its Applications</emphasis>. Springer, 2012.</para>
--            <para/>
--          </listitem>
--        </variablelist>
--      </para>
-     </detaileddescription>
-   </compounddef>
- </doxygen>
-diff -u -r doxygen-1.8.7.orig/testing/012/indexpage.xml doxygen-1.8.7/testing/012/indexpage.xml
---- doxygen-1.8.7.orig/testing/012/indexpage.xml	2014-04-24 23:43:34.000000000 +0200
-+++ doxygen-1.8.7/testing/012/indexpage.xml	2014-04-24 23:44:05.000000000 +0200
-@@ -6,8 +6,8 @@
-     <briefdescription>
-     </briefdescription>
-     <detaileddescription>
--      <para>See <ref refid="citelist_1CITEREF_knuth79" kindref="member">[3]</ref> for more info.</para>
--      <para>Other references with cross references see <ref refid="citelist_1CITEREF_Be09" kindref="member">[1]</ref> and <ref refid="citelist_1CITEREF_BertholdHeinzVigerske2009" kindref="member">[2]</ref> for more info. </para>
-+      <para>See knuth79 for more info.</para>
-+      <para>Other references with cross references see Be09 and BertholdHeinzVigerske2009 for more info. </para>
-     </detaileddescription>
-   </compounddef>
- </doxygen>
diff --git a/gnu/packages/patches/dune-istl-2.7-fix-non-mpi-tests.patch b/gnu/packages/patches/dune-istl-2.7-fix-non-mpi-tests.patch
deleted file mode 100644
index ee2bb8f676..0000000000
--- a/gnu/packages/patches/dune-istl-2.7-fix-non-mpi-tests.patch
+++ /dev/null
@@ -1,82 +0,0 @@
-Fix build of dune-istl's tests
-
-Patch copied from upstream source repository:
-
-https://gitlab.dune-project.org/core/dune-istl/-/commit/9eee3462df5a64881c08574f9291e76db398de0a
-
-From 9eee3462df5a64881c08574f9291e76db398de0a Mon Sep 17 00:00:00 2001
-From: Felix Gruber <felgru@posteo.net>
-Date: Sat, 4 Apr 2020 15:27:09 +0200
-Subject: [PATCH] make tests succeed when MPI is disabled
-
-When MPI is not available or explicitly disabled with the CMake build
-option -DCMAKE_IDSABLE_FIND_PACKAGE_MPI=TRUE, some tests were unable to
-build.
-
-The tests created from solverfactorytest.cc.in and part of
-scalarproductstest.cc use Dune::OwnerOverlapCopyCommunication which is
-defined behind `#if HAVE_MPI` and is thus not available in a non-MPI
-build. I've thus disabled those tests when MPI is unavailable.
-
-The matrixmarkettest did not work without MPI, as it contained some code
-using the wrong template parameters when HAVE_MPI was not set. Those
-template paramters have been fixed now.
-
-I've confirmed, that after my changes `make build_tests` succeeds to
-build all tests and that those tests run without failure.
----
- dune/istl/test/CMakeLists.txt        | 3 ++-
- dune/istl/test/matrixmarkettest.cc   | 2 +-
- dune/istl/test/scalarproductstest.cc | 2 ++
- 3 files changed, 5 insertions(+), 2 deletions(-)
-
-diff --git a/dune/istl/test/CMakeLists.txt b/dune/istl/test/CMakeLists.txt
-index ffd87969..2c7b2387 100644
---- a/dune/istl/test/CMakeLists.txt
-+++ b/dune/istl/test/CMakeLists.txt
-@@ -77,7 +77,8 @@ set(DUNE_TEST_FACTORY_BLOCK_SIZES
- function(add_factory_test BLOCK)
-   STRING(REGEX REPLACE "[^a-zA-Z0-9]" "" BLOCK_CLEAN ${BLOCK})
-   configure_file(solverfactorytest.cc.in solverfactorytest_${BLOCK_CLEAN}.cc)
--  dune_add_test(SOURCES ${CMAKE_CURRENT_BINARY_DIR}/solverfactorytest_${BLOCK_CLEAN}.cc)
-+  dune_add_test(SOURCES ${CMAKE_CURRENT_BINARY_DIR}/solverfactorytest_${BLOCK_CLEAN}.cc
-+                CMAKE_GUARD HAVE_MPI)
- endfunction(add_factory_test)
-
- foreach(FIELD_TYPE ${DUNE_TEST_FACTORY_FIELD_TYPES})
-diff --git a/dune/istl/test/matrixmarkettest.cc b/dune/istl/test/matrixmarkettest.cc
-index b335afe6..ce30e8ae 100644
---- a/dune/istl/test/matrixmarkettest.cc
-+++ b/dune/istl/test/matrixmarkettest.cc
-@@ -52,7 +52,7 @@ int testMatrixMarket(int N)
-   storeMatrixMarket(mat, std::string("testmat"), comm);
-   storeMatrixMarket(bv, std::string("testvec"), comm, false);
- #else
--  typedef Dune::MatrixAdapter<BCRSMat,BVector,BVector> Operator;
-+  typedef Dune::MatrixAdapter<Matrix,Vector,Vector> Operator;
-   Operator op(mat);
-   op.apply(bv, cv);
-
-diff --git a/dune/istl/test/scalarproductstest.cc b/dune/istl/test/scalarproductstest.cc
-index 452b1d89..f46ce2a9 100644
---- a/dune/istl/test/scalarproductstest.cc
-+++ b/dune/istl/test/scalarproductstest.cc
-@@ -115,6 +115,7 @@ int main(int argc, char** argv)
-     scalarProductTest<ScalarProduct, Vector>(scalarProduct,numBlocks);
-   }
-
-+#if HAVE_MPI
-   // Test the ParallelScalarProduct class
-   {
-     using Vector = BlockVector<FieldVector<double,BlockSize> >;
-@@ -139,6 +140,7 @@ int main(int argc, char** argv)
-     ScalarProduct scalarProduct(communicator,SolverCategory::nonoverlapping);
-     scalarProductTest<ScalarProduct, Vector>(scalarProduct,numBlocks);
-   }
-+#endif
-
-   return t.exit();
- }
---
-2.25.1
-
diff --git a/gnu/packages/patches/dynaconf-unvendor-deps.patch b/gnu/packages/patches/dynaconf-unvendor-deps.patch
new file mode 100644
index 0000000000..550e311363
--- /dev/null
+++ b/gnu/packages/patches/dynaconf-unvendor-deps.patch
@@ -0,0 +1,179 @@
+From 3f7b48195500cbbbbecd3cac2f5308c64004479b Mon Sep 17 00:00:00 2001
+From: Giacomo Leidi <goodoldpaul@autistici.org>
+Date: Sun, 29 Aug 2021 23:39:27 +0200
+Subject: [PATCH] Use system site dependencies.
+
+Box was not unvendored because it appears to be heavily patched.
+---
+ dynaconf/cli.py                       | 4 ++--
+ dynaconf/default_settings.py          | 2 +-
+ dynaconf/loaders/env_loader.py        | 2 +-
+ dynaconf/loaders/toml_loader.py       | 2 +-
+ dynaconf/loaders/yaml_loader.py       | 2 +-
+ dynaconf/utils/parse_conf.py          | 2 +-
+ dynaconf/vendor/box/converters.py     | 4 ++--
+ dynaconf/vendor/box/from_file.py      | 4 ++--
+ dynaconf/vendor_src/box/converters.py | 4 ++--
+ dynaconf/vendor_src/box/from_file.py  | 4 ++--
+ tests/test_cli.py                     | 2 +-
+ 11 files changed, 16 insertions(+), 16 deletions(-)
+
+diff --git a/dynaconf/cli.py b/dynaconf/cli.py
+index 5bb8316..1341a95 100644
+--- a/dynaconf/cli.py
++++ b/dynaconf/cli.py
+@@ -20,8 +20,8 @@ from dynaconf.utils.functional import empty
+ from dynaconf.utils.parse_conf import parse_conf_data
+ from dynaconf.validator import ValidationError
+ from dynaconf.validator import Validator
+-from dynaconf.vendor import click
+-from dynaconf.vendor import toml
++import click
++import toml
+ 
+ 
+ CWD = Path.cwd()
+diff --git a/dynaconf/default_settings.py b/dynaconf/default_settings.py
+index 66601b0..9605fc5 100644
+--- a/dynaconf/default_settings.py
++++ b/dynaconf/default_settings.py
+@@ -8,7 +8,7 @@ from dynaconf.utils import upperfy
+ from dynaconf.utils import warn_deprecations
+ from dynaconf.utils.files import find_file
+ from dynaconf.utils.parse_conf import parse_conf_data
+-from dynaconf.vendor.dotenv import load_dotenv
++from dotenv import load_dotenv
+ 
+ 
+ def try_renamed(key, value, older_key, current_key):
+diff --git a/dynaconf/loaders/env_loader.py b/dynaconf/loaders/env_loader.py
+index e7b13bd..b034c8a 100644
+--- a/dynaconf/loaders/env_loader.py
++++ b/dynaconf/loaders/env_loader.py
+@@ -2,7 +2,7 @@ from os import environ
+ 
+ from dynaconf.utils import upperfy
+ from dynaconf.utils.parse_conf import parse_conf_data
+-from dynaconf.vendor.dotenv import cli as dotenv_cli
++from dotenv import cli as dotenv_cli
+ 
+ 
+ IDENTIFIER = "env"
+diff --git a/dynaconf/loaders/toml_loader.py b/dynaconf/loaders/toml_loader.py
+index 07b973f..d81d675 100644
+--- a/dynaconf/loaders/toml_loader.py
++++ b/dynaconf/loaders/toml_loader.py
+@@ -5,7 +5,7 @@ from dynaconf import default_settings
+ from dynaconf.constants import TOML_EXTENSIONS
+ from dynaconf.loaders.base import BaseLoader
+ from dynaconf.utils import object_merge
+-from dynaconf.vendor import toml
++import toml
+ 
+ 
+ def load(obj, env=None, silent=True, key=None, filename=None):
+diff --git a/dynaconf/loaders/yaml_loader.py b/dynaconf/loaders/yaml_loader.py
+index 33c6532..3ef419a 100644
+--- a/dynaconf/loaders/yaml_loader.py
++++ b/dynaconf/loaders/yaml_loader.py
+@@ -7,7 +7,7 @@ from dynaconf.constants import YAML_EXTENSIONS
+ from dynaconf.loaders.base import BaseLoader
+ from dynaconf.utils import object_merge
+ from dynaconf.utils.parse_conf import try_to_encode
+-from dynaconf.vendor.ruamel import yaml
++from ruamel import yaml
+ 
+ # Add support for Dynaconf Lazy values to YAML dumper
+ yaml.SafeDumper.yaml_representers[
+diff --git a/dynaconf/utils/parse_conf.py b/dynaconf/utils/parse_conf.py
+index c42b07a..01ccdae 100644
+--- a/dynaconf/utils/parse_conf.py
++++ b/dynaconf/utils/parse_conf.py
+@@ -9,7 +9,7 @@ from dynaconf.utils import isnamedtupleinstance
+ from dynaconf.utils import multi_replace
+ from dynaconf.utils import recursively_evaluate_lazy_format
+ from dynaconf.utils.boxing import DynaBox
+-from dynaconf.vendor import toml
++import toml
+ 
+ try:
+     from jinja2 import Environment
+diff --git a/dynaconf/vendor/box/converters.py b/dynaconf/vendor/box/converters.py
+index 93cdcfb..e34c7dc 100644
+--- a/dynaconf/vendor/box/converters.py
++++ b/dynaconf/vendor/box/converters.py
+@@ -7,9 +7,9 @@ _B='utf-8'
+ _A=None
+ import csv,json,sys,warnings
+ from pathlib import Path
+-import dynaconf.vendor.ruamel.yaml as yaml
++import ruamel.yaml as yaml
+ from dynaconf.vendor.box.exceptions import BoxError,BoxWarning
+-from dynaconf.vendor import toml
++import toml
+ BOX_PARAMETERS='default_box','default_box_attr','conversion_box','frozen_box','camel_killer_box','box_safe_prefix','box_duplicates','ordered_box','default_box_none_transform','box_dots','modify_tuples_box','box_intact_types','box_recast'
+ def _exists(filename,create=_E):
+ 	A=filename;B=Path(A)
+diff --git a/dynaconf/vendor/box/from_file.py b/dynaconf/vendor/box/from_file.py
+index daa1137..d75940b 100644
+--- a/dynaconf/vendor/box/from_file.py
++++ b/dynaconf/vendor/box/from_file.py
+@@ -1,8 +1,8 @@
+ from json import JSONDecodeError
+ from pathlib import Path
+ from typing import Union
+-from dynaconf.vendor.toml import TomlDecodeError
+-from dynaconf.vendor.ruamel.yaml import YAMLError
++from toml import TomlDecodeError
++from ruamel.yaml import YAMLError
+ from .exceptions import BoxError
+ from .box import Box
+ from .box_list import BoxList
+diff --git a/dynaconf/vendor_src/box/converters.py b/dynaconf/vendor_src/box/converters.py
+index c9a2293..ae42bf6 100644
+--- a/dynaconf/vendor_src/box/converters.py
++++ b/dynaconf/vendor_src/box/converters.py
+@@ -9,9 +9,9 @@ import sys
+ import warnings
+ from pathlib import Path
+ 
+-import dynaconf.vendor.ruamel.yaml as yaml
++import ruamel.yaml as yaml
+ from dynaconf.vendor.box.exceptions import BoxError, BoxWarning
+-from dynaconf.vendor import toml
++import toml
+ 
+ 
+ BOX_PARAMETERS = ('default_box', 'default_box_attr', 'conversion_box',
+diff --git a/dynaconf/vendor_src/box/from_file.py b/dynaconf/vendor_src/box/from_file.py
+index 2e2a6ad..3f76819 100644
+--- a/dynaconf/vendor_src/box/from_file.py
++++ b/dynaconf/vendor_src/box/from_file.py
+@@ -3,8 +3,8 @@
+ from json import JSONDecodeError
+ from pathlib import Path
+ from typing import Union
+-from dynaconf.vendor.toml import TomlDecodeError
+-from dynaconf.vendor.ruamel.yaml import YAMLError
++from toml import TomlDecodeError
++from ruamel.yaml import YAMLError
+ 
+ 
+ from .exceptions import BoxError
+diff --git a/tests/test_cli.py b/tests/test_cli.py
+index 6693701..df44409 100644
+--- a/tests/test_cli.py
++++ b/tests/test_cli.py
+@@ -11,7 +11,7 @@ from dynaconf.cli import main
+ from dynaconf.cli import read_file_in_root_directory
+ from dynaconf.cli import WRITERS
+ from dynaconf.utils.files import read_file
+-from dynaconf.vendor.click.testing import CliRunner
++from click.testing import CliRunner
+ 
+ 
+ runner = CliRunner()
+
+base-commit: ebf7b17cffd5e08b212948bd8036d580718d5bf8
+-- 
+2.32.0
diff --git a/gnu/packages/patches/elogind-revert-polkit-detection.patch b/gnu/packages/patches/elogind-revert-polkit-detection.patch
new file mode 100644
index 0000000000..43dd1684b6
--- /dev/null
+++ b/gnu/packages/patches/elogind-revert-polkit-detection.patch
@@ -0,0 +1,41 @@
+From 715ce0a6459e418f92e74c7ce52df3244c18f383 Mon Sep 17 00:00:00 2001
+From: Sven Eden <sven.eden@prydeworx.com>
+Date: Mon, 8 Mar 2021 08:40:08 +0100
+Subject: [PATCH] Revert "Disable polkit support if libpolkit is not installed"
+
+This reverts commit 1194dec4f8f2d1b8bd14e1625f34418ecfce817e.
+
+Removing polkit support with -Dpolkit=auto when libpolkit is not
+installed, removes the whole interface. This makes it impossible to
+add polkit support as a runtime dependency.
+
+Bug: #167
+Closes: #206
+Signed-off-by: Sven Eden <sven.eden@prydeworx.com>
+---
+ meson.build | 9 ---------
+ 1 file changed, 9 deletions(-)
+
+diff --git a/meson.build b/meson.build
+index 2dd05db3c..f38551f55 100644
+--- a/meson.build
++++ b/meson.build
+@@ -1157,15 +1157,6 @@ if want_polkit != 'false' and not skip_deps
+                 message('Old polkit detected, will install pkla files')
+                 install_polkit_pkla = true
+         endif
+-#if 1 /// Disable polkit completely if libpolkit is not there. See elogind issue #167
+-        if not libpolkit.found()
+-                if want_polkit != 'auto'
+-                        error('Polkit requested but libpolkit was not found.')
+-                endif
+-                install_polkit = false
+-                want_polkit    = false
+-        endif
+-#endif // 1
+ endif
+ conf.set10('ENABLE_POLKIT', install_polkit)
+ 
+-- 
+2.33.1
+
diff --git a/gnu/packages/patches/emacs-exwm-fix-fullscreen-states.patch b/gnu/packages/patches/emacs-exwm-fix-fullscreen-states.patch
deleted file mode 100644
index 6d31021f67..0000000000
--- a/gnu/packages/patches/emacs-exwm-fix-fullscreen-states.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From edb930005b0ba83051ca8a59b493e9a3c8ef580a Mon Sep 17 00:00:00 2001
-From: Chris Feng <chris.w.feng@gmail.com>
-Date: Sun, 14 Jun 2020 00:00:00 +0000
-Subject: [PATCH] Fix fullscreen states
-
-* exwm-layout.el (exwm-layout-set-fullscreen,
-exwm-layout-unset-fullscreen): Use `exwm--id' for interactive use.
-(exwm-layout-unset-fullscreen): Mandatorily clear fullscreen states.
----
- exwm-layout.el | 6 ++++--
- 1 file changed, 4 insertions(+), 2 deletions(-)
-
-diff --git a/exwm-layout.el b/exwm-layout.el
-index 170c2be..79d0c95 100644
---- a/exwm-layout.el
-+++ b/exwm-layout.el
-@@ -205,7 +205,7 @@
-                        :border-width 0
-                        :stack-mode xcb:StackMode:Above))
-     (cl-pushnew xcb:Atom:_NET_WM_STATE_FULLSCREEN exwm--ewmh-state)
--    (exwm-layout--set-ewmh-state id)
-+    (exwm-layout--set-ewmh-state exwm--id)
-     (xcb:flush exwm--connection)
-     (set-window-dedicated-p (get-buffer-window) t)
-     (exwm-input--release-keyboard exwm--id)))
-@@ -233,7 +233,9 @@
-       (let ((window (get-buffer-window nil t)))
-         (when window
-           (exwm-layout--show exwm--id window))))
--    (exwm-layout--set-ewmh-state id)
-+    (setq exwm--ewmh-state
-+          (delq xcb:Atom:_NET_WM_STATE_FULLSCREEN exwm--ewmh-state))
-+    (exwm-layout--set-ewmh-state exwm--id)
-     (xcb:flush exwm--connection)
-     (set-window-dedicated-p (get-buffer-window) nil)
-     (when (eq 'line-mode exwm--selected-input-mode)
--- 
-2.26.2
-
diff --git a/gnu/packages/patches/emacs-telega-path-placeholder.patch b/gnu/packages/patches/emacs-telega-path-placeholder.patch
index c20be36712..5829edd22a 100644
--- a/gnu/packages/patches/emacs-telega-path-placeholder.patch
+++ b/gnu/packages/patches/emacs-telega-path-placeholder.patch
@@ -1,36 +1,31 @@
-From 865b8c553722a971c68742c2e849e41eb0e2360c Mon Sep 17 00:00:00 2001
-From: Zhu Zihao <all_but_last@163.com>
-Date: Thu, 24 Jun 2021 23:43:50 +0800
-Subject: [PATCH] Replace code that search path with placeholder for
- configuration.
+From bf95de21faa623e48bca00d6a2c9b33ab2c5d812 Mon Sep 17 00:00:00 2001
+From: Andrew Tropin <andrew@trop.in>
+Date: Wed, 8 Dec 2021 11:01:31 +0300
+Subject: [PATCH] Use absolute path for telega-server-command.
 
 ---
- telega-server.el | 6 +-----
- telega-util.el   | 2 +-
- 2 files changed, 2 insertions(+), 6 deletions(-)
+ telega-customize.el | 2 +-
+ telega-util.el      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
 
-diff --git a/telega-server.el b/telega-server.el
-index 999125d..0fa0817 100644
---- a/telega-server.el
-+++ b/telega-server.el
-@@ -142,11 +142,7 @@ Otherwise query user about building flags."
- (defun telega-server--find-bin ()
-   "Find telega-server executable.
- Raise error if not found."
--  (let ((exec-path (cons telega-directory exec-path)))
--    (or (executable-find "telega-server")
--        (progn (telega-server-build)
--               (executable-find "telega-server"))
--        (error "`telega-server' not found in exec-path"))))
-+  "@TELEGA_SERVER_BIN@")
+diff --git a/telega-customize.el b/telega-customize.el
+index 0af343f..cc2938c 100644
+--- a/telega-customize.el
++++ b/telega-customize.el
+@@ -591,7 +591,7 @@ In range [1..3].  Use 1."
+   :prefix "telega-server-"
+   :group 'telega)
  
- (defun telega-server-version ()
-   "Return telega-server version."
+-(defcustom telega-server-command "telega-server"
++(defcustom telega-server-command "@TELEGA_SERVER_BIN@"
+   "Command to run as telega server.
+ It should be absolute path or binary file searchable in `exec-path'."
+   :type 'string
 diff --git a/telega-util.el b/telega-util.el
-index 73a46b1..f53e20a 100644
+index 6340c27..01e3cb7 100644
 --- a/telega-util.el
 +++ b/telega-util.el
-@@ -464,7 +464,7 @@ N can't be 0."
+@@ -587,7 +587,7 @@ N can't be 0."
  
  (defun telega-etc-file (filename)
    "Return absolute path to FILENAME from etc/ directory in telega."
@@ -40,5 +35,5 @@ index 73a46b1..f53e20a 100644
  (defun telega-link-props (link-type link-to &optional face)
    "Generate props for link button openable with `telega-link--button-action'."
 -- 
-2.32.0
+2.34.0
 
diff --git a/gnu/packages/patches/emacs-telega-test-env.patch b/gnu/packages/patches/emacs-telega-test-env.patch
index 75fe2e12fc..c6b02be6ff 100644
--- a/gnu/packages/patches/emacs-telega-test-env.patch
+++ b/gnu/packages/patches/emacs-telega-test-env.patch
@@ -1,14 +1,24 @@
-Test Emacs environment on startup.
+From 237ea2471bb6521390bbac174ac2a8a5e9683e4d Mon Sep 17 00:00:00 2001
+From: Andrew Tropin <andrew@trop.in>
+Date: Tue, 7 Dec 2021 16:20:38 +0300
+Subject: [PATCH] Test Emacs environment on startup.
 
-Patch by Diego N. Barbato
+---
+ telega.el | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
---- a/telega.el	2020-02-07 17:07:18.549970090 +0100
-+++ b/telega.el	2020-02-07 17:10:08.383499765 +0100
-@@ -82,6 +82,7 @@
-   "Start telegramming.
- If prefix ARG is given, then will not pop to telega root buffer."
+diff --git a/telega.el b/telega.el
+index d6b28b5..40854ec 100644
+--- a/telega.el
++++ b/telega.el
+@@ -181,7 +181,7 @@ can't write to `telega-server-logfile'" logfile-dir)))
+ Pop to root buffer.
+ If `\\[universal-argument]' is specified, then do not pop to root buffer."
    (interactive "P")
+-
 +  (telega-test-env t)
-   (telega--create-hier)
- 
-   (unless (telega-server-live-p)
+   ;; For multiple accounts setup possibly select (if there is no
+   ;; default account declared) an account to use
+   (if (and telega-accounts (not (telega-account-current)))
+-- 
+2.34.0
diff --git a/gnu/packages/patches/enlightenment-fix-setuid-path.patch b/gnu/packages/patches/enlightenment-fix-setuid-path.patch
index a0efb29857..e4f98de7c8 100644
--- a/gnu/packages/patches/enlightenment-fix-setuid-path.patch
+++ b/gnu/packages/patches/enlightenment-fix-setuid-path.patch
@@ -1,9 +1,11 @@
+This diff was generated against enlightenment-0.25.0, targeting all the occurances of 'suid_exes'.
+
 diff --git a/src/bin/e_auth.c b/src/bin/e_auth.c
-index 8b0aa6641..3dff0ad84 100644
+index 6d07a0ac3..31e0e728f 100644
 --- a/src/bin/e_auth.c
 +++ b/src/bin/e_auth.c
-@@ -12,8 +12,7 @@ e_auth_begin(char *passwd)
-    if (pwlen == 0) goto out;
+@@ -38,8 +38,7 @@ e_auth_begin(char *passwd)
+    pwlen = strlen(passwd);
  
     snprintf(buf, sizeof(buf),
 -            "%s/enlightenment/utils/enlightenment_ckpasswd pw",
@@ -11,9 +13,9 @@ index 8b0aa6641..3dff0ad84 100644
 +            "/run/setuid-programs/enlightenment_ckpasswd pw");
     exe = ecore_exe_pipe_run(buf, ECORE_EXE_PIPE_WRITE, NULL);
     if (!exe) goto out;
-    if (ecore_exe_send(exe, passwd, pwlen) != EINA_TRUE) goto out;
-@@ -47,8 +46,7 @@ e_auth_polkit_begin(char *passwd, const char *cookie, unsigned int uid)
-    if (pwlen == 0) goto out;
+    snprintf(buf, sizeof(buf), "pw %s", passwd);
+@@ -75,8 +74,7 @@ e_auth_polkit_begin(char *passwd, const char *cookie, unsigned int uid)
+    pwlen = strlen(passwd);
  
     snprintf(buf, sizeof(buf),
 -            "%s/enlightenment/utils/enlightenment_ckpasswd pk",
@@ -54,23 +56,24 @@ index 9b10b3117..74e6b72ad 100644
       }
     v->guard = ecore_timer_loop_add(E_FM_MOUNT_TIMEOUT, (Ecore_Task_Cb)_e_fm_main_eeze_vol_mount_timeout, v);
 diff --git a/src/bin/e_start_main.c b/src/bin/e_start_main.c
-index b2c439455..cb16c7bd4 100644
+index 722063339..2da2d5a23 100644
 --- a/src/bin/e_start_main.c
 +++ b/src/bin/e_start_main.c
-@@ -710,7 +710,7 @@ main(int argc, char **argv)
-             "E_ALERT_FONT_DIR=%s/data/fonts", eina_prefix_data_get(pfx));
+@@ -596,8 +596,7 @@ main(int argc, char **argv)
+               eina_prefix_data_get(pfx));
     putenv(buf2);
-    snprintf(buf3, sizeof(buf3),
--            "E_ALERT_SYSTEM_BIN=%s/enlightenment/utils/enlightenment_system", eina_prefix_lib_get(pfx));
-+            "E_ALERT_SYSTEM_BIN=/run/setuid-programs/enlightenment_system");
+    myasprintf(&buf3,
+-              "E_ALERT_SYSTEM_BIN=%s/enlightenment/utils/enlightenment_system",
+-              eina_prefix_lib_get(pfx));
++              "E_ALERT_SYSTEM_BIN=/run/setuid-programs/enlightenment_system");
     putenv(buf3);
  
-    if ((valgrind_mode || valgrind_tool) &&
+    home = getenv("HOME");
 diff --git a/src/bin/e_system.c b/src/bin/e_system.c
-index 1e7aabb64..dc0173219 100644
+index bfd43e7e2..45d78b7ed 100644
 --- a/src/bin/e_system.c
 +++ b/src/bin/e_system.c
-@@ -132,7 +132,7 @@ _system_spawn(void)
+@@ -133,7 +133,7 @@ _system_spawn(void)
     else _respawn_count = 0;
     if (_respawn_count > 5) return;
     snprintf(buf, sizeof(buf),
diff --git a/gnu/packages/patches/eog-update-libportal-usage.patch b/gnu/packages/patches/eog-update-libportal-usage.patch
new file mode 100644
index 0000000000..220a16ddc4
--- /dev/null
+++ b/gnu/packages/patches/eog-update-libportal-usage.patch
@@ -0,0 +1,40 @@
+Fix eog to work with libportal-0.5
+
+This patch is extracted from upstream, see here
+https://gitlab.gnome.org/GNOME/eog/-/commit/a06e6325907e136678b0bbe7058c25d688034afd
+
+diff --git a/meson.build b/meson.build
+index 9a32e4bb..9d49aa45 100644
+--- a/meson.build
++++ b/meson.build
+@@ -165,10 +165,14 @@ config_h.set('HAVE_EXEMPI', enable_xmp)
+ # xdg-desktop-portal support with libportal (optional)
+ enable_libportal = get_option('libportal')
+ if enable_libportal
+-  libportal_dep = dependency('libportal', version: '>= 0.3', required: false)
++  libportal_dep = dependency('libportal', version: '>= 0.5', required: false)
+   assert(libportal_dep.found() and cc.has_header('libportal/portal.h', dependencies: libportal_dep),
+          'xdg-desktop-portal support requested but library not found. Please use -Dlibportal=false')
+ 
+-  common_deps += libportal_dep
++  libportal_gtk3_dep = dependency('libportal-gtk3', version: '>= 0.5', required: false)
++  assert(libportal_gtk3_dep.found() and cc.has_header('libportal-gtk3/portal-gtk3.h', dependencies: libportal_gtk3_dep),
++         'xdg-desktop-portal support requested but library not found. Please use -Dlibportal=false')
++
++  common_deps += [libportal_dep, libportal_gtk3_dep]
+ endif
+ config_h.set('HAVE_LIBPORTAL', enable_libportal)
+
+diff --git a/src/eog-util.c b/src/eog-util.c
+index 90b9768e..56d23472 100644
+--- a/src/eog-util.c
++++ b/src/eog-util.c
+@@ -45,7 +45,7 @@
+ #include <glib/gi18n.h>
+ #ifdef HAVE_LIBPORTAL
+ #include <libportal/portal.h>
+-#include <libportal/portal-gtk3.h>
++#include <libportal-gtk3/portal-gtk3.h>
+ #endif
+ 
+ void
diff --git a/gnu/packages/patches/epiphany-update-libportal-usage.patch b/gnu/packages/patches/epiphany-update-libportal-usage.patch
new file mode 100644
index 0000000000..0d8ea045fb
--- /dev/null
+++ b/gnu/packages/patches/epiphany-update-libportal-usage.patch
@@ -0,0 +1,53 @@
+Fix for epiphany with libportal-0.5.
+
+This patch was adapted from upstream
+https://gitlab.gnome.org/GNOME/epiphany/-/commit/e4d259f614f75c26ad0d2094f4f569ffd1bc06d1
+
+diff --git a/lib/ephy-flatpak-utils.c b/lib/ephy-flatpak-utils.c
+index 6fc9a5dec17a63c0660cbc1d95103c8f77231d30..0fd90b3f178392930e812a8391fd81bf1371b8bf 100644
+--- a/lib/ephy-flatpak-utils.c
++++ b/lib/ephy-flatpak-utils.c
+@@ -29,7 +29,7 @@
+ #include <gio/gio.h>
+ #include <gio/gunixfdlist.h>
+ #if USE_LIBPORTAL
+-#include <libportal/portal-gtk3.h>
++#include <libportal-gtk3/portal-gtk3.h>
+ #endif
+ #include <string.h>
+ #include <sys/stat.h>
+diff --git a/lib/meson.build b/lib/meson.build
+index 264f9c5fb66268fc248f780b8d1c06c8291f856d..db0a0557f0ae634d7fb95e57aba0cd901ca4d6c1 100644
+--- a/lib/meson.build
++++ b/lib/meson.build
+@@ -66,6 +66,7 @@ libephymisc_deps = [
+   libxml_dep,
+   m_dep,
+   portal_dep,
++  portal_gtk_dep,
+   sqlite3_dep,
+   webkit2gtk_dep
+ ]
+diff --git a/meson.build b/meson.build
+index 0b9f862b22a23619289342ec39fa0a0274558c25..4285a975004e48366789a4e66f8b23f3af05a636 100644
+--- a/meson.build
++++ b/meson.build
+@@ -95,7 +95,8 @@ libhandy_dep = dependency('libhandy-1', version: '>= 1.5.0')
+ libsecret_dep = dependency('libsecret-1', version: '>= 0.19.0')
+ libxml_dep = dependency('libxml-2.0', version: '>= 2.6.12')
+ nettle_dep = dependency('nettle', version: nettle_requirement)
+-portal_dep = dependency('libportal', version: '>= 0.0.2', required: get_option('libportal'))
++portal_dep = dependency('libportal', version: '>= 0.5', required: get_option('libportal'))
++portal_gtk_dep = dependency('libportal-gtk3', version: '>= 0.5', required: get_option('libportal'))
+ sqlite3_dep = dependency('sqlite3', version: '>= 3.22')
+ 
+ if get_option('soup2').enabled()
+@@ -108,7 +109,7 @@ else
+   webkit2gtk_web_extension_dep = dependency('webkit2gtk-web-extension-4.1', version: webkitgtk_requirement)
+ endif
+ 
+-conf.set10('USE_LIBPORTAL', portal_dep.found())
++conf.set10('USE_LIBPORTAL', portal_dep.found() and portal_gtk_dep.found())
+ 
+ webkit_revision = webkit2gtk_dep.get_variable(pkgconfig : 'revision', default_value : '')
+ if webkit_revision == 'tarball'
diff --git a/gnu/packages/patches/evolution-CVE-2020-11879.patch b/gnu/packages/patches/evolution-CVE-2020-11879.patch
deleted file mode 100644
index 8c85895aab..0000000000
--- a/gnu/packages/patches/evolution-CVE-2020-11879.patch
+++ /dev/null
@@ -1,122 +0,0 @@
-From 6489f20d6905cc797e2b2581c415e558c457caa7 Mon Sep 17 00:00:00 2001
-From: Milan Crha <mcrha@redhat.com>
-Date: Wed, 12 Feb 2020 18:59:52 +0100
-Subject: [PATCH] I#784 - Warn about and limit what can be attached using
- mailto: URI
-
-Closes https://gitlab.gnome.org/GNOME/evolution/issues/784
----
- src/composer/e-msg-composer.c | 58 +++++++++++++++++++++++++++++------
- src/e-util/e-system.error.xml |  7 ++++-
- 2 files changed, 54 insertions(+), 11 deletions(-)
-
-diff --git a/src/composer/e-msg-composer.c b/src/composer/e-msg-composer.c
-index e4c9ac095e..cd3168d882 100644
---- a/src/composer/e-msg-composer.c
-+++ b/src/composer/e-msg-composer.c
-@@ -4761,7 +4761,8 @@ handle_mailto (EMsgComposer *composer,
- 	gchar *header, *content, *buf;
- 	gsize nread, nwritten;
- 	const gchar *p;
--	gint len, clen;
-+	gint len, clen, has_attachments = 0;
-+	gboolean has_blacklisted_attachment = FALSE;
- 
- 	table = e_msg_composer_get_header_table (composer);
- 	view = e_msg_composer_get_attachment_view (composer);
-@@ -4844,22 +4845,36 @@ handle_mailto (EMsgComposer *composer,
- 			} else if (!g_ascii_strcasecmp (header, "attach") ||
- 				   !g_ascii_strcasecmp (header, "attachment")) {
- 				EAttachment *attachment;
-+				GFile *file;
- 
- 				camel_url_decode (content);
--				if (file_is_blacklisted (content))
--					e_alert_submit (
--						E_ALERT_SINK (e_msg_composer_get_editor (composer)),
--						"mail:blacklisted-file",
--						content, NULL);
- 				if (g_ascii_strncasecmp (content, "file:", 5) == 0)
- 					attachment = e_attachment_new_for_uri (content);
- 				else
- 					attachment = e_attachment_new_for_path (content);
--				e_attachment_store_add_attachment (store, attachment);
--				e_attachment_load_async (
--					attachment, (GAsyncReadyCallback)
--					e_attachment_load_handle_error, composer);
-+				file = e_attachment_ref_file (attachment);
-+				if (!file || !g_file_peek_path (file) ||
-+				    !g_file_test (g_file_peek_path (file), G_FILE_TEST_EXISTS) ||
-+				    g_file_test (g_file_peek_path (file), G_FILE_TEST_IS_DIR)) {
-+					/* Do nothing, simply ignore the attachment request */
-+				} else {
-+					has_attachments++;
-+
-+					if (file_is_blacklisted (content)) {
-+						has_blacklisted_attachment = TRUE;
-+						e_alert_submit (
-+							E_ALERT_SINK (e_msg_composer_get_editor (composer)),
-+							"mail:blacklisted-file",
-+							content, NULL);
-+					}
-+
-+					e_attachment_store_add_attachment (store, attachment);
-+					e_attachment_load_async (
-+						attachment, (GAsyncReadyCallback)
-+						e_attachment_load_handle_error, composer);
-+				}
- 				g_object_unref (attachment);
-+				g_clear_object (&file);
- 			} else if (!g_ascii_strcasecmp (header, "from")) {
- 				/* Ignore */
- 			} else if (!g_ascii_strcasecmp (header, "reply-to")) {
-@@ -4883,6 +4898,29 @@ handle_mailto (EMsgComposer *composer,
- 
- 	g_free (buf);
- 
-+	if (has_attachments && !has_blacklisted_attachment) {
-+		const gchar *primary;
-+		gchar *secondary;
-+
-+		primary = g_dngettext (GETTEXT_PACKAGE,
-+			"Review attachment before sending.",
-+			"Review attachments before sending.",
-+			has_attachments);
-+
-+		secondary = g_strdup_printf (g_dngettext (GETTEXT_PACKAGE,
-+			"There had been added %d attachment. Make sure it does not contain any sensitive information before sending the message.",
-+			"There had been added %d attachments. Make sure they do not contain any sensitive information before sending the message.",
-+			has_attachments),
-+			has_attachments);
-+
-+		e_alert_submit (
-+			E_ALERT_SINK (e_msg_composer_get_editor (composer)),
-+			"system:generic-warning",
-+			primary, secondary, NULL);
-+
-+		g_free (secondary);
-+	}
-+
- 	merge_always_cc_and_bcc (table, to, &cc, &bcc);
- 
- 	tov = destination_list_to_vector (to);
-diff --git a/src/e-util/e-system.error.xml b/src/e-util/e-system.error.xml
-index ddcf989fda..02facb7d26 100644
---- a/src/e-util/e-system.error.xml
-+++ b/src/e-util/e-system.error.xml
-@@ -1,6 +1,11 @@
- <?xml version="1.0"?>
- <error-list domain="system">
--  <error type="error" id="generic-error">
-+  <error id="generic-error" type="error">
-+    <primary>{0}</primary>
-+    <secondary>{1}</secondary>
-+  </error>
-+
-+  <error id="generic-warning" type="warning">
-     <primary>{0}</primary>
-     <secondary>{1}</secondary>
-   </error>
--- 
-GitLab
-
diff --git a/gnu/packages/patches/evolution-data-server-CVE-2020-14928.patch b/gnu/packages/patches/evolution-data-server-CVE-2020-14928.patch
deleted file mode 100644
index 421f292c9d..0000000000
--- a/gnu/packages/patches/evolution-data-server-CVE-2020-14928.patch
+++ /dev/null
@@ -1,115 +0,0 @@
-From ba82be72cfd427b5d72ff21f929b3a6d8529c4df Mon Sep 17 00:00:00 2001
-From: Milan Crha <mcrha@redhat.com>
-Date: Mon, 22 Jun 2020 13:40:17 +0200
-Subject: [PATCH] I#226 - CVE-2020-14928: Response Injection via STARTTLS in
- SMTP and POP3
-
-Closes https://gitlab.gnome.org/GNOME/evolution-data-server/-/issues/226
----
- src/camel/camel-stream-buffer.c               | 19 +++++++++++++++++++
- src/camel/camel-stream-buffer.h               |  1 +
- src/camel/providers/pop3/camel-pop3-store.c   |  2 ++
- src/camel/providers/pop3/camel-pop3-stream.c  | 11 +++++++++++
- src/camel/providers/pop3/camel-pop3-stream.h  |  1 +
- .../providers/smtp/camel-smtp-transport.c     |  2 ++
- 6 files changed, 36 insertions(+)
-
-diff --git a/src/camel/camel-stream-buffer.c b/src/camel/camel-stream-buffer.c
-index 3e2e0dd36..a6f605ae5 100644
---- a/src/camel/camel-stream-buffer.c
-+++ b/src/camel/camel-stream-buffer.c
-@@ -518,3 +518,22 @@ camel_stream_buffer_read_line (CamelStreamBuffer *sbf,
- 
- 	return g_strdup ((gchar *) sbf->priv->linebuf);
- }
-+
-+/**
-+ * camel_stream_buffer_discard_cache:
-+ * @sbf: a #CamelStreamBuffer
-+ *
-+ * Discards any cached data in the @sbf. The next read reads
-+ * from the stream.
-+ *
-+ * Since: 3.38
-+ **/
-+void
-+camel_stream_buffer_discard_cache (CamelStreamBuffer *sbf)
-+{
-+	g_return_if_fail (CAMEL_IS_STREAM_BUFFER (sbf));
-+
-+	sbf->priv->ptr = sbf->priv->buf;
-+	sbf->priv->end = sbf->priv->buf;
-+	sbf->priv->ptr[0] = '\0';
-+}
-diff --git a/src/camel/camel-stream-buffer.h b/src/camel/camel-stream-buffer.h
-index ef92cfd8e..094e9926b 100644
---- a/src/camel/camel-stream-buffer.h
-+++ b/src/camel/camel-stream-buffer.h
-@@ -93,6 +93,7 @@ gint		camel_stream_buffer_gets	(CamelStreamBuffer *sbf,
- gchar *		camel_stream_buffer_read_line	(CamelStreamBuffer *sbf,
- 						 GCancellable *cancellable,
- 						 GError **error);
-+void		camel_stream_buffer_discard_cache	(CamelStreamBuffer *sbf);
- 
- G_END_DECLS
- 
-diff --git a/src/camel/providers/pop3/camel-pop3-store.c b/src/camel/providers/pop3/camel-pop3-store.c
-index 81c370f0a..5c9eb1eaa 100644
---- a/src/camel/providers/pop3/camel-pop3-store.c
-+++ b/src/camel/providers/pop3/camel-pop3-store.c
-@@ -205,6 +205,8 @@ connect_to_server (CamelService *service,
- 
- 	if (tls_stream != NULL) {
- 		camel_stream_set_base_stream (stream, tls_stream);
-+		/* Truncate any left cached input from the insecure part of the session */
-+		camel_pop3_stream_discard_cache (pop3_engine->stream);
- 		g_object_unref (tls_stream);
- 	} else {
- 		g_prefix_error (
-diff --git a/src/camel/providers/pop3/camel-pop3-stream.c b/src/camel/providers/pop3/camel-pop3-stream.c
-index 74bb11e61..c485b9bd6 100644
---- a/src/camel/providers/pop3/camel-pop3-stream.c
-+++ b/src/camel/providers/pop3/camel-pop3-stream.c
-@@ -457,3 +457,14 @@ camel_pop3_stream_getd (CamelPOP3Stream *is,
- 
- 	return 1;
- }
-+
-+void
-+camel_pop3_stream_discard_cache (CamelPOP3Stream *is)
-+{
-+	if (is) {
-+		is->ptr = is->end = is->buf;
-+		is->lineptr = is->linebuf;
-+		is->lineend = is->linebuf + CAMEL_POP3_STREAM_LINE_SIZE;
-+		is->ptr[0] = '\n';
-+	}
-+}
-diff --git a/src/camel/providers/pop3/camel-pop3-stream.h b/src/camel/providers/pop3/camel-pop3-stream.h
-index bb6dbb903..128c8c45a 100644
---- a/src/camel/providers/pop3/camel-pop3-stream.h
-+++ b/src/camel/providers/pop3/camel-pop3-stream.h
-@@ -87,6 +87,7 @@ gint		camel_pop3_stream_getd		(CamelPOP3Stream *is,
- 						 guint *len,
- 						 GCancellable *cancellable,
- 						 GError **error);
-+void		camel_pop3_stream_discard_cache	(CamelPOP3Stream *is);
- 
- G_END_DECLS
- 
-diff --git a/src/camel/providers/smtp/camel-smtp-transport.c b/src/camel/providers/smtp/camel-smtp-transport.c
-index 035baf367..1fc0f3206 100644
---- a/src/camel/providers/smtp/camel-smtp-transport.c
-+++ b/src/camel/providers/smtp/camel-smtp-transport.c
-@@ -323,6 +323,8 @@ connect_to_server (CamelService *service,
- 
- 	if (tls_stream != NULL) {
- 		camel_stream_set_base_stream (stream, tls_stream);
-+		/* Truncate any left cached input from the insecure part of the session */
-+		camel_stream_buffer_discard_cache (transport->istream);
- 		g_object_unref (tls_stream);
- 	} else {
- 		g_prefix_error (
--- 
-GitLab
-
diff --git a/gnu/packages/patches/evolution-data-server-CVE-2020-16117.patch b/gnu/packages/patches/evolution-data-server-CVE-2020-16117.patch
deleted file mode 100644
index b2c0622a90..0000000000
--- a/gnu/packages/patches/evolution-data-server-CVE-2020-16117.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 2cc39592b532cf0dc994fd3694b8e6bf924c9ab5 Mon Sep 17 00:00:00 2001
-From: Milan Crha <mcrha@redhat.com>
-Date: Mon, 10 Feb 2020 10:00:32 +0100
-Subject: [PATCH] I#189 - Crash on malformed server response with minimal
- capabilities
-
-Closes https://gitlab.gnome.org/GNOME/evolution-data-server/issues/189
----
- src/camel/providers/imapx/camel-imapx-server.c | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/src/camel/providers/imapx/camel-imapx-server.c b/src/camel/providers/imapx/camel-imapx-server.c
-index 3c38fb1e9..3883321ec 100644
---- a/src/camel/providers/imapx/camel-imapx-server.c
-+++ b/src/camel/providers/imapx/camel-imapx-server.c
-@@ -3045,7 +3045,8 @@ connected:
- 
- 			/* See if we got new capabilities
- 			 * in the STARTTLS response. */
--			imapx_free_capability (is->priv->cinfo);
-+			if (is->priv->cinfo)
-+				imapx_free_capability (is->priv->cinfo);
- 			is->priv->cinfo = NULL;
- 			if (ic->status->condition == IMAPX_CAPABILITY) {
- 				is->priv->cinfo = ic->status->u.cinfo;
--- 
-GitLab
-
diff --git a/gnu/packages/patches/evolution-data-server-libical-compat.patch b/gnu/packages/patches/evolution-data-server-libical-compat.patch
deleted file mode 100644
index da4302d42e..0000000000
--- a/gnu/packages/patches/evolution-data-server-libical-compat.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-Prevent test failure and possible data loss due to API change in libical 3.0.7.
-
-https://gitlab.gnome.org/GNOME/evolution-data-server/issues/185
-https://lists.infradead.org/pipermail/libical-devel/2020-January/000907.html
-
-Adapted from upstream:
-
-https://gitlab.gnome.org/GNOME/evolution-data-server/commit/77384ab552c19bf374dbeda53dc37f98d07bd4ec
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index e16b8b225..b3c881967 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -111,7 +111,7 @@ add_definitions(-DSOUP_VERSION_MIN_REQUIRED=${soup_encoded_version})
- 
- set(gcr_minimum_version 3.4)
- set(libgdata_minimum_version 0.15.1)
--set(libical_glib_minimum_version 3.0.5)
-+set(libical_glib_minimum_version 3.0.7)
- set(libsecret_minimum_version 0.5)
- set(libxml_minimum_version 2.0.0)
- set(sqlite_minimum_version 3.7.17)
-diff --git a/src/calendar/libedata-cal/e-cal-meta-backend.c b/src/calendar/libedata-cal/e-cal-meta-backend.c
-index 7501f2a43..93f4806ba 100644
---- a/src/calendar/libedata-cal/e-cal-meta-backend.c
-+++ b/src/calendar/libedata-cal/e-cal-meta-backend.c
-@@ -4067,8 +4067,7 @@ e_cal_meta_backend_inline_local_attachments_sync (ECalMetaBackend *meta_backend,
- 					gchar *base64;
- 
- 					base64 = g_base64_encode ((const guchar *) content, len);
--					new_attach = i_cal_attach_new_from_data (base64, NULL, NULL);
-+					new_attach = i_cal_attach_new_from_data (base64, (GFunc) g_free, NULL);
- 					g_free (content);
--					g_free (base64);
- 
- 					ecmb_remove_all_but_filename_parameter (prop);
diff --git a/gnu/packages/patches/evolution-data-server-locales.patch b/gnu/packages/patches/evolution-data-server-locales.patch
deleted file mode 100644
index 48baefb0d8..0000000000
--- a/gnu/packages/patches/evolution-data-server-locales.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-This patch fixes locale canonicalization when using newer versions of
-ICU.  It comes from the upstream repo, and should appear starting in
-version 3.33.5.
-
-From fe4ac94ce3c14f200e049a5d102fc0e4b811c71e Mon Sep 17 00:00:00 2001
-From: Milan Crha <mcrha@redhat.com>
-Date: Tue, 16 Jul 2019 07:22:07 +0200
-Subject: [PATCH] I#137 - POSIX locale tests fail with ICU 64.x
-
-Closes https://gitlab.gnome.org/GNOME/evolution-data-server/issues/137
----
- src/libedataserver/e-collator.c | 5 +++++
- 1 file changed, 5 insertions(+)
-
-diff --git a/src/libedataserver/e-collator.c b/src/libedataserver/e-collator.c
-index 718eac5da..ec2cf7951 100644
---- a/src/libedataserver/e-collator.c
-+++ b/src/libedataserver/e-collator.c
-@@ -132,6 +132,11 @@ canonicalize_locale (const gchar *posix_locale,
- 	gint   len;
- 	const gchar *collation_type = NULL;
- 
-+	if (posix_locale && (
-+	    g_ascii_strcasecmp (posix_locale, "C") == 0 ||
-+	    g_ascii_strcasecmp (posix_locale, "POSIX") == 0))
-+		posix_locale = "en_US_POSIX";
-+
- 	len = uloc_canonicalize (posix_locale, locale_buffer, LOCALE_BUFFER_LEN, &status);
- 
- 	if (U_FAILURE (status)) {
--- 
-2.22.0
-
diff --git a/gnu/packages/patches/fifengine-boost-compat.patch b/gnu/packages/patches/fifengine-boost-compat.patch
new file mode 100644
index 0000000000..dcbf923297
--- /dev/null
+++ b/gnu/packages/patches/fifengine-boost-compat.patch
@@ -0,0 +1,17 @@
+Fix build with newer Boost.
+
+Taken from upstream:
+
+  https://github.com/fifengine/fifengine/commit/8072f18a9bf4e75c3e1b197b6ccda11e82954460
+
+diff --git a/engine/core/vfs/zip/zipnode.cpp b/engine/core/vfs/zip/zipnode.cpp
+--- a/engine/core/vfs/zip/zipnode.cpp
++++ b/engine/core/vfs/zip/zipnode.cpp
+@@ -28,6 +28,7 @@
+ #include "vfs/fife_boost_filesystem.h"
+ 
+ #include "zipnode.h"
++#include <algorithm>
+ 
+ namespace {
+     /** helper function to find a value in a ZipNodeContainer
diff --git a/gnu/packages/patches/findutils-test-rwlock-threads.patch b/gnu/packages/patches/findutils-test-rwlock-threads.patch
deleted file mode 100644
index 3062577c21..0000000000
--- a/gnu/packages/patches/findutils-test-rwlock-threads.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-Skip "test-rwlock1" when multithreading is disabled, which is the case
-during bootstrapping on architectures not supported by GNU Mes.
-
-Taken from upstream gnulib:
-https://git.savannah.gnu.org/cgit/gnulib.git/commit/?id=fdff8bd09a7f053381f8bdb107ab5280b7c95959
-
-diff --git a/gnulib-tests/test-rwlock1.c b/gnulib-tests/test-rwlock1.c
---- a/gnulib-tests/test-rwlock1.c
-+++ b/gnulib-tests/test-rwlock1.c
-@@ -21,6 +21,8 @@
- 
- #include <config.h>
- 
-+#if USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS || USE_WINDOWS_THREADS
-+
- #include "glthread/lock.h"
- 
- #include <errno.h>
-@@ -151,3 +153,18 @@ main ()
-       sleep (1);
-     }
- }
-+
-+#else
-+
-+/* No multithreading available.  */
-+
-+#include <stdio.h>
-+
-+int
-+main ()
-+{
-+  fputs ("Skipping test: multithreading not enabled\n", stderr);
-+  return 77;
-+}
-+
-+#endif
-
diff --git a/gnu/packages/patches/flatpak-fix-path.patch b/gnu/packages/patches/flatpak-fix-path.patch
new file mode 100644
index 0000000000..e87a08a7fe
--- /dev/null
+++ b/gnu/packages/patches/flatpak-fix-path.patch
@@ -0,0 +1,29 @@
+Flatpak writes files for installed applications with the full Flatpak (store) path. This patch makes it write just "flatpak", using Flatpak from PATH. This is similar to the NixOS [0] patch, updated for Flatpak 1.12.1
+
+[0] https://github.com/NixOS/nixpkgs/blob/bf4167861d0f864b0fc457778d54feb4a2675ea2/pkgs/development/libraries/flatpak/use-flatpak-from-path.patch
+
+diff --git a/common/flatpak-dir.c b/common/flatpak-dir.c
+index 80ff5e5f..0c111c31 100644
+--- a/common/flatpak-dir.c
++++ b/common/flatpak-dir.c
+@@ -7134,8 +7134,7 @@ export_desktop_file (const char         *app,
+         flatpak = FLATPAK_BINDIR "/flatpak";
+
+       g_string_append_printf (new_exec,
+-                              "%s run --branch=%s --arch=%s",
+-                              flatpak,
++                              "flatpak run --branch=%s --arch=%s",
+                               escaped_branch,
+                               escaped_arch);
+
+@@ -8467,8 +8466,8 @@ flatpak_dir_deploy (FlatpakDir          *self,
+       if ((flatpak = g_getenv ("FLATPAK_BINARY")) == NULL)
+         flatpak = FLATPAK_BINDIR "/flatpak";
+
+-      bin_data = g_strdup_printf ("#!/bin/sh\nexec %s run --branch=%s --arch=%s %s \"$@\"\n",
+-                                  flatpak, escaped_branch, escaped_arch, escaped_app);
++      bin_data = g_strdup_printf ("#!/bin/sh\nexec flatpak run --branch=%s --arch=%s %s \"$@\"\n",
++                                  escaped_branch, escaped_arch, escaped_app);
+       if (!g_file_replace_contents (wrapper, bin_data, strlen (bin_data), NULL, FALSE,
+                                     G_FILE_CREATE_REPLACE_DESTINATION, NULL, cancellable, error))
+         return FALSE;
diff --git a/gnu/packages/patches/fontconfig-cache-ignore-mtime.patch b/gnu/packages/patches/fontconfig-cache-ignore-mtime.patch
new file mode 100644
index 0000000000..b6e942ee10
--- /dev/null
+++ b/gnu/packages/patches/fontconfig-cache-ignore-mtime.patch
@@ -0,0 +1,15 @@
+Pretend that stat's mtime is broken, so that the fontconfig cache does not
+depend upon modification time to determine if a cache is stale.
+
+diff --git a/src/fcstat.c b/src/fcstat.c
+index 5a2bd7c..d603a96 100644
+--- a/src/fcstat.c
++++ b/src/fcstat.c
+@@ -431,6 +431,7 @@ FcIsFsMmapSafe (int fd)
+ FcBool
+ FcIsFsMtimeBroken (const FcChar8 *dir)
+ {
++    return FcTrue;
+     int fd = FcOpen ((const char *) dir, O_RDONLY);
+ 
+     if (fd != -1)
diff --git a/gnu/packages/patches/fontconfig-hurd-path-max.patch b/gnu/packages/patches/fontconfig-hurd-path-max.patch
deleted file mode 100644
index f804e6801f..0000000000
--- a/gnu/packages/patches/fontconfig-hurd-path-max.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-Avoid usage of PATH_MAX.
-
-Taken from https://salsa.debian.org/freedesktop-team/fontconfig/-/blob/master/debian/patches/path_max.patch
-
-Index: fontconfig-2.13.1/src/fccfg.c
-===================================================================
---- fontconfig-2.13.1.orig/src/fccfg.c
-+++ fontconfig-2.13.1/src/fccfg.c
-@@ -2231,7 +2231,7 @@ FcConfigRealFilename (FcConfig		*config,
- 
-     if (n)
-     {
--	FcChar8 buf[PATH_MAX];
-+	FcChar8 buf[FC_PATH_MAX];
- 	ssize_t len;
- 
- 	if (sysroot)
diff --git a/gnu/packages/patches/freecad-boost-serialization.patch b/gnu/packages/patches/freecad-boost-serialization.patch
new file mode 100644
index 0000000000..374eabc966
--- /dev/null
+++ b/gnu/packages/patches/freecad-boost-serialization.patch
@@ -0,0 +1,27 @@
+Taken from: https://github.com/archlinux/svntogit-community/blob/packages/freecad/trunk/freecad-boost.patch.
+
+Index: FreeCAD-0.19.2/CMakeLists.txt
+===================================================================
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -46,6 +46,7 @@ if(NOT FREECAD_LIBPACK_USE OR FREECAD_LI
+     SetupPCL()
+     SetupPybind11()
+     SetupBoost()
++	set(Boost_LIBRARIES_App ${Boost_LIBRARIES})
+     SetupXercesC()
+     find_package(ZLIB REQUIRED)
+     find_package(PyCXX REQUIRED)
+Index: FreeCAD-0.19.2/src/App/CMakeLists.txt
+===================================================================
+--- a/src/App/CMakeLists.txt
++++ b/src/App/CMakeLists.txt
+@@ -59,7 +59,7 @@ include_directories(
+ 
+ set(FreeCADApp_LIBS
+     FreeCADBase
+-    ${Boost_LIBRARIES}
++    ${Boost_LIBRARIES_App}
+ )
+ 
+ if (BUILD_QT5)
diff --git a/gnu/packages/patches/freecad-vtk9.patch b/gnu/packages/patches/freecad-vtk9.patch
new file mode 100644
index 0000000000..74568f4318
--- /dev/null
+++ b/gnu/packages/patches/freecad-vtk9.patch
@@ -0,0 +1,827 @@
+From bb9bcbd51df7c3cb76c5823038e4ea0f7e25a9ff Mon Sep 17 00:00:00 2001
+From: wmayer <wmayer@users.sourceforge.net>
+Date: Mon, 12 Oct 2020 17:56:03 +0200
+Subject: [PATCH] Make smesh compile with vtk9
+
+---
+ .../salomesmesh/inc/SMDS_MeshElement.hxx      |  9 +++-
+ .../salomesmesh/inc/SMDS_UnstructuredGrid.hxx |  4 ++
+ .../salomesmesh/src/SMDS/SMDS_BallElement.cpp |  9 +++-
+ .../salomesmesh/src/SMDS/SMDS_Downward.cpp    | 44 +++++++++----------
+ .../salomesmesh/src/SMDS/SMDS_Mesh.cpp        |  6 ++-
+ .../src/SMDS/SMDS_Mesh0DElement.cpp           | 12 +++++
+ .../salomesmesh/src/SMDS/SMDS_MeshNode.cpp    | 10 ++---
+ .../src/SMDS/SMDS_UnstructuredGrid.cpp        | 35 +++++++++++++--
+ .../src/SMDS/SMDS_VtkCellIterator.cpp         |  7 +--
+ .../salomesmesh/src/SMDS/SMDS_VtkEdge.cpp     | 19 +++++++-
+ .../salomesmesh/src/SMDS/SMDS_VtkFace.cpp     | 29 ++++++++++--
+ .../salomesmesh/src/SMDS/SMDS_VtkVolume.cpp   | 38 +++++++++++-----
+ .../src/SMESH/SMESH_MeshEditor.cpp            |  8 ++--
+ src/Mod/Fem/Gui/ViewProviderFemPostObject.cpp |  7 ++-
+ 14 files changed, 179 insertions(+), 58 deletions(-)
+
+Index: FreeCAD-0.19.2/src/3rdParty/salomesmesh/inc/SMDS_MeshElement.hxx
+===================================================================
+--- FreeCAD-0.19.2.orig/src/3rdParty/salomesmesh/inc/SMDS_MeshElement.hxx
++++ FreeCAD-0.19.2/src/3rdParty/salomesmesh/inc/SMDS_MeshElement.hxx
+@@ -40,11 +40,16 @@
+ 
+ #include <vtkType.h>
+ #include <vtkCellType.h>
++#include <vtkCellArray.h>
+ 
+ //typedef unsigned short UShortType;
+ typedef short ShortType;
+ typedef int   LongType;
+-
++#ifdef VTK_CELL_ARRAY_V2
++typedef const vtkIdType* vtkIdTypePtr;
++#else
++typedef vtkIdType* vtkIdTypePtr;
++#endif
+ class SMDS_MeshNode;
+ class SMDS_MeshEdge;
+ class SMDS_MeshFace;
+@@ -192,7 +197,7 @@ protected:
+   //! Element index in vector SMDS_Mesh::myNodes or SMDS_Mesh::myCells
+   int myID;
+   //! index in vtkUnstructuredGrid
+-  int myVtkID;
++  vtkIdType myVtkID;
+   //! SMDS_Mesh identification in SMESH
+   ShortType myMeshId;
+   //! SubShape and SubMesh identification in SMESHDS
+Index: FreeCAD-0.19.2/src/3rdParty/salomesmesh/inc/SMDS_UnstructuredGrid.hxx
+===================================================================
+--- FreeCAD-0.19.2.orig/src/3rdParty/salomesmesh/inc/SMDS_UnstructuredGrid.hxx
++++ FreeCAD-0.19.2/src/3rdParty/salomesmesh/inc/SMDS_UnstructuredGrid.hxx
+@@ -95,7 +95,11 @@ public:
+                                        std::map<int, std::map<long,int> >& nodeQuadDomains);
+   vtkCellLinks* GetLinks()
+   {
++#ifdef VTK_CELL_ARRAY_V2
++    return static_cast<vtkCellLinks*>(GetCellLinks());
++#else
+     return Links;
++#endif
+   }
+   SMDS_Downward* getDownArray(unsigned char vtkType)
+   {
+Index: FreeCAD-0.19.2/src/3rdParty/salomesmesh/src/SMDS/SMDS_BallElement.cpp
+===================================================================
+--- FreeCAD-0.19.2.orig/src/3rdParty/salomesmesh/src/SMDS/SMDS_BallElement.cpp
++++ FreeCAD-0.19.2/src/3rdParty/salomesmesh/src/SMDS/SMDS_BallElement.cpp
+@@ -67,10 +67,16 @@ void SMDS_BallElement::SetDiameter(doubl
+ bool SMDS_BallElement::ChangeNode (const SMDS_MeshNode * node)
+ {
+   vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
++#ifdef VTK_CELL_ARRAY_V2
++  vtkNew<vtkIdList> cellPoints;
++  grid->GetCellPoints(myVtkID, cellPoints.GetPointer());
++  cellPoints->SetId(0, node->getVtkId());
++#else
+   vtkIdType npts = 0;
+   vtkIdType* pts = 0;
+   grid->GetCellPoints(myVtkID, npts, pts);
+   pts[0] = node->getVtkId();
++#endif
+   SMDS_Mesh::_meshList[myMeshId]->setMyModified();
+   return true;
+ }
+@@ -83,7 +89,8 @@ void SMDS_BallElement::Print (std::ostre
+ const SMDS_MeshNode* SMDS_BallElement::GetNode (const int ind) const
+ {
+   vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
+-  vtkIdType npts, *pts;
++  vtkIdType npts;
++  vtkIdTypePtr pts;
+   grid->GetCellPoints( myVtkID, npts, pts );
+   return SMDS_Mesh::_meshList[myMeshId]->FindNodeVtk( pts[ 0 ]);
+ }
+Index: FreeCAD-0.19.2/src/3rdParty/salomesmesh/src/SMDS/SMDS_Downward.cpp
+===================================================================
+--- FreeCAD-0.19.2.orig/src/3rdParty/salomesmesh/src/SMDS/SMDS_Downward.cpp
++++ FreeCAD-0.19.2/src/3rdParty/salomesmesh/src/SMDS/SMDS_Downward.cpp
+@@ -303,7 +303,7 @@ int SMDS_Down1D::getNodeSet(int cellId,
+ void SMDS_Down1D::setNodes(int cellId, int vtkId)
+ {
+   vtkIdType npts = 0;
+-  vtkIdType *pts; // will refer to the point id's of the face
++  vtkIdTypePtr pts; // will refer to the point id's of the face
+   _grid->GetCellPoints(vtkId, npts, pts);
+   // MESSAGE(vtkId << " " << npts << "  " << _nbDownCells);
+   //ASSERT(npts == _nbDownCells);
+@@ -357,7 +357,7 @@ int SMDS_Down1D::computeVtkCells(int *pt
+     {
+       vtkIdType point = pts[i];
+       int numCells = _grid->GetLinks()->GetNcells(point);
+-      vtkIdType *cells = _grid->GetLinks()->GetCells(point);
++      vtkIdTypePtr cells = _grid->GetLinks()->GetCells(point);
+       for (int j = 0; j < numCells; j++)
+         {
+           int vtkCellId = cells[j];
+@@ -532,7 +532,7 @@ int SMDS_Down2D::computeVolumeIds(int ce
+   // --- find point id's of the face
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *pts; // will refer to the point id's of the face
++  vtkIdTypePtr pts; // will refer to the point id's of the face
+   _grid->GetCellPoints(cellId, npts, pts);
+   vector<int> nodes;
+   for (int i = 0; i < npts; i++)
+@@ -577,7 +577,7 @@ int SMDS_Down2D::computeVolumeIdsFromNod
+       vtkIdType point = pts[i];
+       int numCells = _grid->GetLinks()->GetNcells(point);
+       //MESSAGE("cells pour " << i << " " << numCells);
+-      vtkIdType *cells = _grid->GetLinks()->GetCells(point);
++      vtkIdTypePtr cells = _grid->GetLinks()->GetCells(point);
+       for (int j = 0; j < numCells; j++)
+         {
+           int vtkCellId = cells[j];
+@@ -627,7 +627,7 @@ int SMDS_Down2D::computeVolumeIdsFromNod
+ void SMDS_Down2D::setTempNodes(int cellId, int vtkId)
+ {
+   vtkIdType npts = 0;
+-  vtkIdType *pts; // will refer to the point id's of the face
++  vtkIdTypePtr pts; // will refer to the point id's of the face
+   _grid->GetCellPoints(vtkId, npts, pts);
+   // MESSAGE(vtkId << " " << npts << "  " << _nbNodes);
+   //ASSERT(npts == _nbNodes);
+@@ -795,7 +795,7 @@ void SMDS_Down3D::getNodeIds(int cellId,
+ {
+   int vtkId = this->_vtkCellIds[cellId];
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(vtkId, npts, nodes);
+   for (int i = 0; i < npts; i++)
+     nodeSet.insert(nodes[i]);
+@@ -1126,7 +1126,7 @@ void SMDS_DownTetra::getOrderedNodesOfFa
+   //MESSAGE("cellId = " << cellId);
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(this->_vtkCellIds[cellId], npts, nodes);
+ 
+   set<int> tofind;
+@@ -1178,7 +1178,7 @@ void SMDS_DownTetra::computeFacesWithNod
+   // --- find point id's of the volume
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(cellId, npts, nodes);
+ 
+   // --- create all the ordered list of node id's for each face
+@@ -1234,7 +1234,7 @@ void SMDS_DownQuadTetra::getOrderedNodes
+   //MESSAGE("cellId = " << cellId);
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(this->_vtkCellIds[cellId], npts, nodes);
+ 
+   set<int> tofind;
+@@ -1288,7 +1288,7 @@ void SMDS_DownQuadTetra::computeFacesWit
+   // --- find point id's of the volume
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(cellId, npts, nodes);
+ 
+   // --- create all the ordered list of node id's for each face
+@@ -1357,7 +1357,7 @@ void SMDS_DownPyramid::getOrderedNodesOf
+   //MESSAGE("cellId = " << cellId);
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(this->_vtkCellIds[cellId], npts, nodes);
+ 
+   set<int> tofind;
+@@ -1435,7 +1435,7 @@ void SMDS_DownPyramid::computeFacesWithN
+   // --- find point id's of the volume
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(cellId, npts, nodes);
+ 
+   // --- create all the ordered list of node id's for each face
+@@ -1500,7 +1500,7 @@ void SMDS_DownQuadPyramid::getOrderedNod
+   //MESSAGE("cellId = " << cellId);
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(this->_vtkCellIds[cellId], npts, nodes);
+ 
+   set<int> tofind;
+@@ -1580,7 +1580,7 @@ void SMDS_DownQuadPyramid::computeFacesW
+   // --- find point id's of the volume
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(cellId, npts, nodes);
+ 
+   // --- create all the ordered list of node id's for each face
+@@ -1660,7 +1660,7 @@ void SMDS_DownPenta::getOrderedNodesOfFa
+   //MESSAGE("cellId = " << cellId);
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(this->_vtkCellIds[cellId], npts, nodes);
+ 
+   set<int> tofind;
+@@ -1744,7 +1744,7 @@ void SMDS_DownPenta::computeFacesWithNod
+   // --- find point id's of the volume
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(cellId, npts, nodes);
+ 
+   // --- create all the ordered list of node id's for each face
+@@ -1810,7 +1810,7 @@ void SMDS_DownQuadPenta::getOrderedNodes
+   //MESSAGE("cellId = " << cellId);
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(this->_vtkCellIds[cellId], npts, nodes);
+ 
+   set<int> tofind;
+@@ -1896,7 +1896,7 @@ void SMDS_DownQuadPenta::computeFacesWit
+   // --- find point id's of the volume
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(cellId, npts, nodes);
+ 
+   // --- create all the ordered list of node id's for each face
+@@ -1981,7 +1981,7 @@ void SMDS_DownHexa::getOrderedNodesOfFac
+   //MESSAGE("cellId = " << cellId);
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(this->_vtkCellIds[cellId], npts, nodes);
+ 
+   set<int> tofind;
+@@ -2036,7 +2036,7 @@ void SMDS_DownHexa::computeFacesWithNode
+   // --- find point id's of the volume
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(cellId, npts, nodes);
+ 
+   // --- create all the ordered list of node id's for each face
+@@ -2112,7 +2112,7 @@ void SMDS_DownQuadHexa::getOrderedNodesO
+   //MESSAGE("cellId = " << cellId);
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(this->_vtkCellIds[cellId], npts, nodes);
+ 
+   set<int> tofind;
+@@ -2167,7 +2167,7 @@ void SMDS_DownQuadHexa::computeFacesWith
+   // --- find point id's of the volume
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(cellId, npts, nodes);
+ 
+   // --- create all the ordered list of node id's for each face
+Index: FreeCAD-0.19.2/src/3rdParty/salomesmesh/src/SMDS/SMDS_Mesh.cpp
+===================================================================
+--- FreeCAD-0.19.2.orig/src/3rdParty/salomesmesh/src/SMDS/SMDS_Mesh.cpp
++++ FreeCAD-0.19.2/src/3rdParty/salomesmesh/src/SMDS/SMDS_Mesh.cpp
+@@ -4768,7 +4768,11 @@ void SMDS_Mesh::dumpGrid(string ficdump)
+         ficcon << endl;
+   }
+   ficcon << "-------------------------------- connectivity " <<  nbPoints << endl;
+-        vtkCellLinks *links = myGrid->GetCellLinks();
++#ifdef VTK_CELL_ARRAY_V2
++  vtkCellLinks *links = static_cast<vtkCellLinks*>(myGrid->GetCellLinks());
++#else
++  vtkCellLinks *links = myGrid->GetCellLinks();
++#endif
+   for (int i=0; i<nbPoints; i++)
+   {
+         int ncells = links->GetNcells(i);
+Index: FreeCAD-0.19.2/src/3rdParty/salomesmesh/src/SMDS/SMDS_Mesh0DElement.cpp
+===================================================================
+--- FreeCAD-0.19.2.orig/src/3rdParty/salomesmesh/src/SMDS/SMDS_Mesh0DElement.cpp
++++ FreeCAD-0.19.2/src/3rdParty/salomesmesh/src/SMDS/SMDS_Mesh0DElement.cpp
+@@ -146,6 +146,17 @@ bool SMDS_Mesh0DElement::ChangeNodes(con
+   if ( nbNodes == 1 )
+   {
+     vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
++#ifdef VTK_CELL_ARRAY_V2
++    vtkNew<vtkIdList> cellPoints;
++    grid->GetCellPoints(myVtkID, cellPoints.GetPointer());
++    if (nbNodes != cellPoints->GetNumberOfIds())
++    {
++      MESSAGE("ChangeNodes problem: not the same number of nodes " << cellPoints->GetNumberOfIds() << " -> " << nbNodes);
++      return false;
++    }
++    myNode = nodes[0];
++    cellPoints->SetId(0, myNode->getVtkId());
++#else
+     vtkIdType npts = 0;
+     vtkIdType* pts = 0;
+     grid->GetCellPoints(myVtkID, npts, pts);
+@@ -156,6 +167,7 @@ bool SMDS_Mesh0DElement::ChangeNodes(con
+     }
+     myNode = nodes[0];
+     pts[0] = myNode->getVtkId();
++#endif
+ 
+     SMDS_Mesh::_meshList[myMeshId]->setMyModified();
+     return true;
+Index: FreeCAD-0.19.2/src/3rdParty/salomesmesh/src/SMDS/SMDS_MeshNode.cpp
+===================================================================
+--- FreeCAD-0.19.2.orig/src/3rdParty/salomesmesh/src/SMDS/SMDS_MeshNode.cpp
++++ FreeCAD-0.19.2/src/3rdParty/salomesmesh/src/SMDS/SMDS_MeshNode.cpp
+@@ -191,7 +191,7 @@ public:
+ SMDS_ElemIteratorPtr SMDS_MeshNode::
+ GetInverseElementIterator(SMDSAbs_ElementType type) const
+ {
+-  vtkCellLinks::Link l = SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetCellLinks()->GetLink(myVtkID);
++  vtkCellLinks::Link l = static_cast<vtkCellLinks*>(SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetCellLinks())->GetLink(myVtkID);
+   //MESSAGE("myID " << myID << " ncells " << l.ncells);
+   return SMDS_ElemIteratorPtr(new SMDS_MeshNode_MyInvIterator(SMDS_Mesh::_meshList[myMeshId], l.cells, l.ncells, type));
+ }
+@@ -251,7 +251,7 @@ elementsIterator(SMDSAbs_ElementType typ
+     return SMDS_MeshElement::elementsIterator(SMDSAbs_Node);
+   else
+   {
+-    vtkCellLinks::Link l = SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetCellLinks()->GetLink(myVtkID);
++    vtkCellLinks::Link l = static_cast<vtkCellLinks*>(SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetCellLinks())->GetLink(myVtkID);
+     return SMDS_ElemIteratorPtr(new SMDS_MeshNode_MyIterator(SMDS_Mesh::_meshList[myMeshId], l.cells, l.ncells, type));
+   }
+ }
+@@ -350,7 +350,7 @@ void SMDS_MeshNode::AddInverseElement(co
+   const SMDS_MeshCell *cell = dynamic_cast<const SMDS_MeshCell*> (ME);
+   assert(cell);
+   SMDS_UnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
+-  vtkCellLinks *Links = grid->GetCellLinks();
++  vtkCellLinks *Links = static_cast<vtkCellLinks*>(grid->GetCellLinks());
+   Links->ResizeCellList(myVtkID, 1);
+   Links->AddCellReference(cell->getVtkId(), myVtkID);
+ }
+@@ -366,7 +366,7 @@ void SMDS_MeshNode::ClearInverseElements
+ 
+ bool SMDS_MeshNode::emptyInverseElements()
+ {
+-  vtkCellLinks::Link l = SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetCellLinks()->GetLink(myVtkID);
++  vtkCellLinks::Link l = static_cast<vtkCellLinks*>(SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetCellLinks())->GetLink(myVtkID);
+   return (l.ncells == 0);
+ }
+ 
+@@ -378,7 +378,7 @@ bool SMDS_MeshNode::emptyInverseElements
+ 
+ int SMDS_MeshNode::NbInverseElements(SMDSAbs_ElementType type) const
+ {
+-  vtkCellLinks::Link l = SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetCellLinks()->GetLink(myVtkID);
++  vtkCellLinks::Link l = static_cast<vtkCellLinks*>(SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetCellLinks())->GetLink(myVtkID);
+ 
+   if ( type == SMDSAbs_All )
+     return l.ncells;
+Index: FreeCAD-0.19.2/src/3rdParty/salomesmesh/src/SMDS/SMDS_UnstructuredGrid.cpp
+===================================================================
+--- FreeCAD-0.19.2.orig/src/3rdParty/salomesmesh/src/SMDS/SMDS_UnstructuredGrid.cpp
++++ FreeCAD-0.19.2/src/3rdParty/salomesmesh/src/SMDS/SMDS_UnstructuredGrid.cpp
+@@ -139,8 +139,8 @@ int SMDS_UnstructuredGrid::InsertNextLin
+   for (; it != setOfNodes.end(); ++it)
+     {
+       //MESSAGE("reverse link for node " << *it << " cell " << cellid);
+-      this->Links->ResizeCellList(*it, 1);
+-      this->Links->AddCellReference(cellid, *it);
++      this->GetLinks()->ResizeCellList(*it, 1);
++      this->GetLinks()->AddCellReference(cellid, *it);
+     }
+ 
+   return cellid;
+@@ -332,9 +332,13 @@ void SMDS_UnstructuredGrid::copyBloc(vtk
+     {
+       newTypes->SetValue(alreadyCopied, this->Types->GetValue(j));
+       idCellsOldToNew[j] = alreadyCopied; // old vtkId --> new vtkId
++#ifdef VTK_CELL_ARRAY_V2
++      vtkIdType oldLoc = this->GetCellLocationsArray()->GetValue(j);
++#else
+       vtkIdType oldLoc = this->Locations->GetValue(j);
++#endif
+       vtkIdType nbpts;
+-      vtkIdType *oldPtsCell = 0;
++      vtkIdTypePtr oldPtsCell = 0;
+       this->Connectivity->GetCell(oldLoc, nbpts, oldPtsCell);
+       assert(nbpts < NBMAXNODESINCELL);
+       //MESSAGE(j << " " << alreadyCopied << " " << (int)this->Types->GetValue(j) << " " << oldLoc << " " << nbpts );
+@@ -952,6 +956,21 @@ void SMDS_UnstructuredGrid::GetNodeIds(s
+  */
+ void SMDS_UnstructuredGrid::ModifyCellNodes(int vtkVolId, std::map<int, int> localClonedNodeIds)
+ {
++#ifdef VTK_CELL_ARRAY_V2
++  vtkNew<vtkIdList> cellPoints;
++  this->GetCellPoints(vtkVolId, cellPoints.GetPointer());
++  for (vtkIdType i = 0; i < cellPoints->GetNumberOfIds(); i++)
++    {
++      if (localClonedNodeIds.count(cellPoints->GetId(i)))
++        {
++          vtkIdType oldpt = cellPoints->GetId(i);
++          cellPoints->SetId(i, localClonedNodeIds[oldpt]);
++          //MESSAGE(oldpt << " --> " << pts[i]);
++          //this->RemoveReferenceToCell(oldpt, vtkVolId);
++          //this->AddReferenceToCell(pts[i], vtkVolId);
++        }
++    }
++#else
+   vtkIdType npts = 0;
+   vtkIdType *pts; // will refer to the point id's of the face
+   this->GetCellPoints(vtkVolId, npts, pts);
+@@ -966,6 +985,7 @@ void SMDS_UnstructuredGrid::ModifyCellNo
+           //this->AddReferenceToCell(pts[i], vtkVolId);
+         }
+     }
++#endif
+ }
+ 
+ /*! reorder the nodes of a face
+@@ -995,11 +1015,20 @@ void SMDS_UnstructuredGrid::BuildLinks()
+     this->Links->UnRegister(this);
+     }
+ 
++#ifdef VTK_CELL_ARRAY_V2
++  this->Links = SMDS_CellLinks::New();
++  GetLinks()->Allocate(this->GetNumberOfPoints());
++  GetLinks()->Register(this);
++//FIXME: vtk9
++  GetLinks()->BuildLinks(this);
++  GetLinks()->Delete();
++#else
+   this->Links = SMDS_CellLinks::New();
+   this->Links->Allocate(this->GetNumberOfPoints());
+   this->Links->Register(this);
+   this->Links->BuildLinks(this, this->Connectivity);
+   this->Links->Delete();
++#endif
+ }
+ 
+ /*! Create a volume (prism or hexahedron) by duplication of a face.
+Index: FreeCAD-0.19.2/src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkCellIterator.cpp
+===================================================================
+--- FreeCAD-0.19.2.orig/src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkCellIterator.cpp
++++ FreeCAD-0.19.2/src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkCellIterator.cpp
+@@ -33,7 +33,8 @@ SMDS_VtkCellIterator::SMDS_VtkCellIterat
+   }
+   else
+   {
+-    vtkIdType npts, *pts;
++    vtkIdType npts;
++    vtkIdTypePtr pts;
+     grid->GetCellPoints( _cellId, npts, pts );
+     _vtkIdList->SetNumberOfIds( _nbNodes = npts );
+     for (int i = 0; i < _nbNodes; i++)
+@@ -67,7 +68,7 @@ SMDS_VtkCellIteratorToUNV::SMDS_VtkCellI
+   //MESSAGE("SMDS_VtkCellInterlacedIterator (UNV)" << _type);
+ 
+   _vtkIdList = vtkIdList::New();
+-  vtkIdType* pts;
++  vtkIdTypePtr pts;
+   vtkIdType npts;
+   vtkUnstructuredGrid* grid = _mesh->getGrid();
+   grid->GetCellPoints((vtkIdType)_cellId, npts, pts);
+@@ -182,7 +183,7 @@ SMDS_VtkCellIteratorPolyH::SMDS_VtkCellI
+   {
+     //MESSAGE("SMDS_VtkCellIterator Polyhedra");
+     vtkIdType nFaces = 0;
+-    vtkIdType* ptIds = 0;
++    vtkIdTypePtr ptIds = 0;
+     grid->GetFaceStream(_cellId, nFaces, ptIds);
+     int id = 0;
+     _nbNodesInFaces = 0;
+Index: FreeCAD-0.19.2/src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkEdge.cpp
+===================================================================
+--- FreeCAD-0.19.2.orig/src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkEdge.cpp
++++ FreeCAD-0.19.2/src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkEdge.cpp
+@@ -67,6 +67,19 @@ bool SMDS_VtkEdge::ChangeNodes(const SMD
+ bool SMDS_VtkEdge::ChangeNodes(const SMDS_MeshNode* nodes[], const int nbNodes)
+ {
+   vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
++#ifdef VTK_CELL_ARRAY_V2
++  vtkNew<vtkIdList> cellPoints;
++  grid->GetCellPoints(myVtkID, cellPoints.GetPointer());
++  if (nbNodes != cellPoints->GetNumberOfIds())
++    {
++      MESSAGE("ChangeNodes problem: not the same number of nodes " << cellPoints->GetNumberOfIds() << " -> " << nbNodes);
++      return false;
++    }
++  for (int i = 0; i < nbNodes; i++)
++    {
++      cellPoints->SetId(i, nodes[i]->getVtkId());
++    }
++#else
+   vtkIdType npts = 0;
+   vtkIdType* pts = 0;
+   grid->GetCellPoints(myVtkID, npts, pts);
+@@ -79,6 +92,7 @@ bool SMDS_VtkEdge::ChangeNodes(const SMD
+     {
+       pts[i] = nodes[i]->getVtkId();
+     }
++#endif
+   SMDS_Mesh::_meshList[myMeshId]->setMyModified();
+   return true;
+ }
+@@ -87,7 +101,7 @@ bool SMDS_VtkEdge::IsMediumNode(const SM
+ {
+   vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
+   vtkIdType npts = 0;
+-  vtkIdType* pts = 0;
++  vtkIdTypePtr pts = 0;
+   grid->GetCellPoints(myVtkID, npts, pts);
+   //MESSAGE("IsMediumNode " << npts  << " " << (node->getVtkId() == pts[npts-1]));
+   return ((npts == 3) && (node->getVtkId() == pts[2]));
+@@ -137,7 +151,8 @@ const SMDS_MeshNode*
+ SMDS_VtkEdge::GetNode(const int ind) const
+ {
+   vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
+-  vtkIdType npts, *pts;
++  vtkIdType npts;
++  vtkIdTypePtr pts;
+   grid->GetCellPoints( this->myVtkID, npts, pts );
+   return SMDS_Mesh::_meshList[myMeshId]->FindNodeVtk( pts[ ind ]);
+ }
+Index: FreeCAD-0.19.2/src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkFace.cpp
+===================================================================
+--- FreeCAD-0.19.2.orig/src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkFace.cpp
++++ FreeCAD-0.19.2/src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkFace.cpp
+@@ -101,6 +101,19 @@ void SMDS_VtkFace::initQuadPoly(const st
+ bool SMDS_VtkFace::ChangeNodes(const SMDS_MeshNode* nodes[], const int nbNodes)
+ {
+   vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
++#ifdef VTK_CELL_ARRAY_V2
++  vtkNew<vtkIdList> cellPoints;
++  grid->GetCellPoints(myVtkID, cellPoints.GetPointer());
++  if (nbNodes != cellPoints->GetNumberOfIds())
++    {
++      MESSAGE("ChangeNodes problem: not the same number of nodes " << cellPoints->GetNumberOfIds() << " -> " << nbNodes);
++      return false;
++    }
++  for (int i = 0; i < nbNodes; i++)
++    {
++      cellPoints->SetId(i, nodes[i]->getVtkId());
++    }
++#else
+   vtkIdType npts = 0;
+   vtkIdType* pts = 0;
+   grid->GetCellPoints(myVtkID, npts, pts);
+@@ -113,6 +126,7 @@ bool SMDS_VtkFace::ChangeNodes(const SMD
+     {
+       pts[i] = nodes[i]->getVtkId();
+     }
++#endif
+   SMDS_Mesh::_meshList[myMeshId]->setMyModified();
+   return true;
+ }
+@@ -173,7 +187,8 @@ const SMDS_MeshNode*
+ SMDS_VtkFace::GetNode(const int ind) const
+ {
+   vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
+-  vtkIdType npts, *pts;
++  vtkIdType npts;
++  vtkIdTypePtr pts;
+   grid->GetCellPoints( this->myVtkID, npts, pts );
+   return SMDS_Mesh::_meshList[myMeshId]->FindNodeVtk( pts[ ind ]);
+ }
+@@ -186,7 +201,8 @@ SMDS_VtkFace::GetNode(const int ind) con
+ int SMDS_VtkFace::GetNodeIndex( const SMDS_MeshNode* node ) const
+ {
+   vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
+-  vtkIdType npts, *pts;
++  vtkIdType npts;
++  vtkIdTypePtr pts;
+   grid->GetCellPoints( this->myVtkID, npts, pts );
+   for ( vtkIdType i = 0; i < npts; ++i )
+     if ( pts[i] == node->getVtkId() )
+@@ -251,7 +267,7 @@ bool SMDS_VtkFace::IsMediumNode(const SM
+     return false;
+   }
+   vtkIdType npts = 0;
+-  vtkIdType* pts = 0;
++  vtkIdTypePtr pts = 0;
+   grid->GetCellPoints(myVtkID, npts, pts);
+   vtkIdType nodeId = node->getVtkId();
+   for (int rank = 0; rank < npts; rank++)
+@@ -356,11 +372,18 @@ SMDS_NodeIteratorPtr SMDS_VtkFace::inter
+ void SMDS_VtkFace::ChangeApex(SMDS_MeshNode* node)
+ {
+   vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
++#ifdef VTK_CELL_ARRAY_V2
++  vtkNew<vtkIdList> cellPoints;
++  grid->GetCellPoints(myVtkID, cellPoints.GetPointer());
++  grid->RemoveReferenceToCell(cellPoints->GetId(0), myVtkID);
++  cellPoints->SetId(0, node->getVtkId());
++#else
+   vtkIdType npts = 0;
+   vtkIdType* pts = 0;
+   grid->GetCellPoints(myVtkID, npts, pts);
+   grid->RemoveReferenceToCell(pts[0], myVtkID);
+   pts[0] = node->getVtkId();
++#endif
+   node->AddInverseElement(this),
+   SMDS_Mesh::_meshList[myMeshId]->setMyModified();
+ }
+Index: FreeCAD-0.19.2/src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkVolume.cpp
+===================================================================
+--- FreeCAD-0.19.2.orig/src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkVolume.cpp
++++ FreeCAD-0.19.2/src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkVolume.cpp
+@@ -133,6 +133,19 @@ void SMDS_VtkVolume::initPoly(const std:
+ bool SMDS_VtkVolume::ChangeNodes(const SMDS_MeshNode* nodes[], const int nbNodes)
+ {
+   vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
++#ifdef VTK_CELL_ARRAY_V2
++  vtkNew<vtkIdList> cellPoints;
++  grid->GetCellPoints(myVtkID, cellPoints.GetPointer());
++  if (nbNodes != cellPoints->GetNumberOfIds())
++    {
++      MESSAGE("ChangeNodes problem: not the same number of nodes " << cellPoints->GetNumberOfIds() << " -> " << nbNodes);
++      return false;
++    }
++  for (int i = 0; i < nbNodes; i++)
++    {
++      cellPoints->SetId(i, nodes[i]->getVtkId());
++    }
++#else
+   vtkIdType npts = 0;
+   vtkIdType* pts = 0;
+   grid->GetCellPoints(myVtkID, npts, pts);
+@@ -145,6 +158,7 @@ bool SMDS_VtkVolume::ChangeNodes(const S
+     {
+       pts[i] = nodes[i]->getVtkId();
+     }
++#endif
+   SMDS_Mesh::_meshList[myMeshId]->setMyModified();
+   return true;
+ }
+@@ -207,7 +221,7 @@ int SMDS_VtkVolume::NbFaces() const
+     case VTK_POLYHEDRON:
+       {
+         vtkIdType nFaces = 0;
+-        vtkIdType* ptIds = 0;
++        vtkIdTypePtr ptIds = 0;
+         grid->GetFaceStream(this->myVtkID, nFaces, ptIds);
+         nbFaces = nFaces;
+         break;
+@@ -236,7 +250,7 @@ int SMDS_VtkVolume::NbNodes() const
+   else
+     {
+       vtkIdType nFaces = 0;
+-      vtkIdType* ptIds = 0;
++      vtkIdTypePtr ptIds = 0;
+       grid->GetFaceStream(this->myVtkID, nFaces, ptIds);
+       int id = 0;
+       for (int i = 0; i < nFaces; i++)
+@@ -276,7 +290,7 @@ int SMDS_VtkVolume::NbEdges() const
+     case VTK_POLYHEDRON:
+       {
+         vtkIdType nFaces = 0;
+-        vtkIdType* ptIds = 0;
++        vtkIdTypePtr ptIds = 0;
+         grid->GetFaceStream(this->myVtkID, nFaces, ptIds);
+         nbEdges = 0;
+         int id = 0;
+@@ -312,7 +326,7 @@ int SMDS_VtkVolume::NbFaceNodes(const in
+   if (aVtkType == VTK_POLYHEDRON)
+     {
+       vtkIdType nFaces = 0;
+-      vtkIdType* ptIds = 0;
++      vtkIdTypePtr ptIds = 0;
+       grid->GetFaceStream(this->myVtkID, nFaces, ptIds);
+       int id = 0;
+       for (int i = 0; i < nFaces; i++)
+@@ -342,7 +356,7 @@ const SMDS_MeshNode* SMDS_VtkVolume::Get
+   if (aVtkType == VTK_POLYHEDRON)
+     {
+       vtkIdType nFaces = 0;
+-      vtkIdType* ptIds = 0;
++      vtkIdTypePtr ptIds = 0;
+       grid->GetFaceStream(this->myVtkID, nFaces, ptIds);
+       int id = 0;
+       for (int i = 0; i < nFaces; i++)
+@@ -372,7 +386,7 @@ std::vector<int> SMDS_VtkVolume::GetQuan
+   if (aVtkType == VTK_POLYHEDRON)
+     {
+       vtkIdType nFaces = 0;
+-      vtkIdType* ptIds = 0;
++      vtkIdTypePtr ptIds = 0;
+       grid->GetFaceStream(this->myVtkID, nFaces, ptIds);
+       int id = 0;
+       for (int i = 0; i < nFaces; i++)
+@@ -430,7 +444,7 @@ const SMDS_MeshNode* SMDS_VtkVolume::Get
+   if ( aVtkType == VTK_POLYHEDRON)
+   {
+     vtkIdType nFaces = 0;
+-    vtkIdType* ptIds = 0;
++    vtkIdTypePtr ptIds = 0;
+     grid->GetFaceStream(this->myVtkID, nFaces, ptIds);
+     int id = 0, nbPoints = 0;
+     for (int i = 0; i < nFaces; i++)
+@@ -443,7 +457,8 @@ const SMDS_MeshNode* SMDS_VtkVolume::Get
+     }
+     return 0;
+   }
+-  vtkIdType npts, *pts;
++  vtkIdType npts;
++  vtkIdTypePtr pts;
+   grid->GetCellPoints( this->myVtkID, npts, pts );
+   const std::vector<int>& interlace = SMDS_MeshCell::fromVtkOrder( VTKCellType( aVtkType ));
+   return SMDS_Mesh::_meshList[myMeshId]->FindNodeVtk( pts[ interlace.empty() ? ind : interlace[ind]] );
+@@ -460,7 +475,7 @@ int SMDS_VtkVolume::GetNodeIndex( const
+   if ( aVtkType == VTK_POLYHEDRON)
+   {
+     vtkIdType nFaces = 0;
+-    vtkIdType* ptIds = 0;
++    vtkIdTypePtr ptIds = 0;
+     grid->GetFaceStream(this->myVtkID, nFaces, ptIds);
+     int id = 0;
+     for (int iF = 0; iF < nFaces; iF++)
+@@ -473,7 +488,8 @@ int SMDS_VtkVolume::GetNodeIndex( const
+     }
+     return -1;
+   }
+-  vtkIdType npts, *pts;
++  vtkIdType npts;
++  vtkIdTypePtr pts;
+   grid->GetCellPoints( this->myVtkID, npts, pts );
+   for ( vtkIdType i = 0; i < npts; ++i )
+     if ( pts[i] == node->getVtkId() )
+@@ -534,7 +550,7 @@ bool SMDS_VtkVolume::IsMediumNode(const
+       return false;
+   }
+   vtkIdType npts = 0;
+-  vtkIdType* pts = 0;
++  vtkIdTypePtr pts = 0;
+   grid->GetCellPoints(myVtkID, npts, pts);
+   vtkIdType nodeId = node->getVtkId();
+   for (int rank = 0; rank < npts; rank++)
+Index: FreeCAD-0.19.2/src/3rdParty/salomesmesh/src/SMESH/SMESH_MeshEditor.cpp
+===================================================================
+--- FreeCAD-0.19.2.orig/src/3rdParty/salomesmesh/src/SMESH/SMESH_MeshEditor.cpp
++++ FreeCAD-0.19.2/src/3rdParty/salomesmesh/src/SMESH/SMESH_MeshEditor.cpp
+@@ -11348,7 +11348,7 @@ bool SMESH_MeshEditor::DoubleNodesOnGrou
+             {
+               int oldId = *itn;
+               //MESSAGE("     node " << oldId);
+-              vtkCellLinks::Link l = grid->GetCellLinks()->GetLink(oldId);
++              vtkCellLinks::Link l = static_cast<vtkCellLinks*>(grid->GetCellLinks())->GetLink(oldId);
+               for (int i=0; i<l.ncells; i++)
+                 {
+                   int vtkId = l.cells[i];
+@@ -11527,7 +11527,7 @@ bool SMESH_MeshEditor::DoubleNodesOnGrou
+                                           //MESSAGE("  domain " << idom << " volume " << elem->GetID());
+                                           double values[3];
+                                           vtkIdType npts = 0;
+-                                          vtkIdType* pts = 0;
++                                          vtkIdTypePtr pts = 0;
+                                           grid->GetCellPoints(vtkVolIds[ivol], npts, pts);
+                                           SMDS_VtkVolume::gravityCenter(grid, pts, npts, values);
+                                           if (id ==0)
+@@ -11708,7 +11708,7 @@ bool SMESH_MeshEditor::DoubleNodesOnGrou
+         {
+           int oldId = itnod->first;
+           //MESSAGE("     node " << oldId);
+-          vtkCellLinks::Link l = grid->GetCellLinks()->GetLink(oldId);
++          vtkCellLinks::Link l = static_cast<vtkCellLinks*>(grid->GetCellLinks())->GetLink(oldId);
+           for (int i = 0; i < l.ncells; i++)
+             {
+               int vtkId = l.cells[i];
+@@ -12165,7 +12165,7 @@ void SMESH_MeshEditor::CreateHoleSkin(do
+           MESSAGE("volume to check,  vtkId " << vtkId << " smdsId " << meshDS->fromVtkToSmds(vtkId));
+           bool volInside = false;
+           vtkIdType npts = 0;
+-          vtkIdType* pts = 0;
++          vtkIdTypePtr pts = 0;
+           grid->GetCellPoints(vtkId, npts, pts);
+           for (int i=0; i<npts; i++)
+             {
+Index: FreeCAD-0.19.2/src/Mod/Fem/Gui/ViewProviderFemPostObject.cpp
+===================================================================
+--- FreeCAD-0.19.2.orig/src/Mod/Fem/Gui/ViewProviderFemPostObject.cpp
++++ FreeCAD-0.19.2/src/Mod/Fem/Gui/ViewProviderFemPostObject.cpp
+@@ -20,7 +20,6 @@
+  *                                                                         *
+  ***************************************************************************/
+ 
+-
+ #include "PreCompiled.h"
+ 
+ #ifndef _PreComp_
diff --git a/gnu/packages/patches/freeglut-gcc-compat.patch b/gnu/packages/patches/freeglut-gcc-compat.patch
new file mode 100644
index 0000000000..126bbd89f4
--- /dev/null
+++ b/gnu/packages/patches/freeglut-gcc-compat.patch
@@ -0,0 +1,53 @@
+Fix build failure with GCC 10.
+
+Taken from upstream:
+https://github.com/dcnieho/FreeGLUT/commit/b9998bbc1e1c329f6bf69c24606a2be7a4973b8c
+
+diff --git a/src/fg_gl2.c b/src/fg_gl2.c
+--- a/src/fg_gl2.c
++++ b/src/fg_gl2.c
+@@ -27,6 +27,20 @@
+ #include "fg_internal.h"
+ #include "fg_gl2.h"
+ 
++#ifndef GL_ES_VERSION_2_0
++/* GLES2 has the corresponding entry points built-in, and these fgh-prefixed
++ * names are defined in fg_gl2.h header to reference them, for any other case,
++ * define them as function pointers here.
++ */
++FGH_PFNGLGENBUFFERSPROC fghGenBuffers;
++FGH_PFNGLDELETEBUFFERSPROC fghDeleteBuffers;
++FGH_PFNGLBINDBUFFERPROC fghBindBuffer;
++FGH_PFNGLBUFFERDATAPROC fghBufferData;
++FGH_PFNGLENABLEVERTEXATTRIBARRAYPROC fghEnableVertexAttribArray;
++FGH_PFNGLDISABLEVERTEXATTRIBARRAYPROC fghDisableVertexAttribArray;
++FGH_PFNGLVERTEXATTRIBPOINTERPROC fghVertexAttribPointer;
++#endif
++
+ void FGAPIENTRY glutSetVertexAttribCoord3(GLint attrib) {
+   if (fgStructure.CurrentWindow != NULL)
+     fgStructure.CurrentWindow->Window.attribute_v_coord = attrib;
+diff --git a/src/fg_gl2.h b/src/fg_gl2.h
+--- a/src/fg_gl2.h
++++ b/src/fg_gl2.h
+@@ -67,13 +67,13 @@ typedef void (APIENTRY *FGH_PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index);
+ typedef void (APIENTRY *FGH_PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint);
+ typedef void (APIENTRY *FGH_PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer);
+ 
+-FGH_PFNGLGENBUFFERSPROC fghGenBuffers;
+-FGH_PFNGLDELETEBUFFERSPROC fghDeleteBuffers;
+-FGH_PFNGLBINDBUFFERPROC fghBindBuffer;
+-FGH_PFNGLBUFFERDATAPROC fghBufferData;
+-FGH_PFNGLENABLEVERTEXATTRIBARRAYPROC fghEnableVertexAttribArray;
+-FGH_PFNGLDISABLEVERTEXATTRIBARRAYPROC fghDisableVertexAttribArray;
+-FGH_PFNGLVERTEXATTRIBPOINTERPROC fghVertexAttribPointer;
++extern FGH_PFNGLGENBUFFERSPROC fghGenBuffers;
++extern FGH_PFNGLDELETEBUFFERSPROC fghDeleteBuffers;
++extern FGH_PFNGLBINDBUFFERPROC fghBindBuffer;
++extern FGH_PFNGLBUFFERDATAPROC fghBufferData;
++extern FGH_PFNGLENABLEVERTEXATTRIBARRAYPROC fghEnableVertexAttribArray;
++extern FGH_PFNGLDISABLEVERTEXATTRIBARRAYPROC fghDisableVertexAttribArray;
++extern FGH_PFNGLVERTEXATTRIBPOINTERPROC fghVertexAttribPointer;
+ 
+ #    endif
+ 
diff --git a/gnu/packages/patches/ganeti-deterministic-manual.patch b/gnu/packages/patches/ganeti-deterministic-manual.patch
deleted file mode 100644
index 2d90aa740e..0000000000
--- a/gnu/packages/patches/ganeti-deterministic-manual.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-Sort the ecode list in the gnt-cluster manual for deterministic results.
-
-Submitted upstream: <https://github.com/ganeti/ganeti/pull/1504>.
-
-diff --git a/lib/build/sphinx_ext.py b/lib/build/sphinx_ext.py
---- a/lib/build/sphinx_ext.py
-+++ b/lib/build/sphinx_ext.py
-@@ -108,7 +108,7 @@ CV_ECODES_DOC = "ecodes"
- # pylint: disable=W0621
- CV_ECODES_DOC_LIST = [(name, doc) for (_, name, doc) in constants.CV_ALL_ECODES]
- DOCUMENTED_CONSTANTS = {
--  CV_ECODES_DOC: CV_ECODES_DOC_LIST,
-+  CV_ECODES_DOC: sorted(CV_ECODES_DOC_LIST, key=lambda tup: tup[0]),
-   }
- 
- 
diff --git a/gnu/packages/patches/ganeti-drbd-compat.patch b/gnu/packages/patches/ganeti-drbd-compat.patch
deleted file mode 100644
index 32f46bc7ed..0000000000
--- a/gnu/packages/patches/ganeti-drbd-compat.patch
+++ /dev/null
@@ -1,166 +0,0 @@
-This patch adds support for newer versions of DRBD.
-
-Submitted upstream: <https://github.com/ganeti/ganeti/pull/1496>.
-
-diff --git a/lib/storage/drbd.py b/lib/storage/drbd.py
---- a/lib/storage/drbd.py
-+++ b/lib/storage/drbd.py
-@@ -315,6 +315,13 @@ class DRBD8Dev(base.BlockDev):
-     """
-     return self._show_info_cls.GetDevInfo(self._GetShowData(minor))
- 
-+  @staticmethod
-+  def _NeedsLocalSyncerParams():
-+    # For DRBD >= 8.4, syncer init must be done after local, not in net.
-+    info = DRBD8.GetProcInfo()
-+    version = info.GetVersion()
-+    return version["k_minor"] >= 4
-+
-   def _MatchesLocal(self, info):
-     """Test if our local config matches with an existing device.
- 
-@@ -397,6 +404,20 @@ class DRBD8Dev(base.BlockDev):
-         base.ThrowError("drbd%d: can't attach local disk: %s",
-                         minor, result.output)
- 
-+    def _WaitForMinorSyncParams():
-+      """Call _SetMinorSyncParams and raise RetryAgain on errors.
-+      """
-+      if self._SetMinorSyncParams(minor, self.params):
-+        raise utils.RetryAgain()
-+
-+    if self._NeedsLocalSyncerParams():
-+      # Retry because disk config for DRBD resource may be still uninitialized.
-+      try:
-+        utils.Retry(_WaitForMinorSyncParams, 1.0, 5.0)
-+      except utils.RetryTimeout as e:
-+        base.ThrowError("drbd%d: can't set the synchronization parameters: %s" %
-+                        (minor, utils.CommaJoin(e.args[0])))
-+
-   def _AssembleNet(self, minor, net_info, dual_pri=False, hmac=None,
-                    secret=None):
-     """Configure the network part of the device.
-@@ -432,21 +453,24 @@ class DRBD8Dev(base.BlockDev):
-     # sync speed only after setting up both sides can race with DRBD
-     # connecting, hence we set it here before telling DRBD anything
-     # about its peer.
--    sync_errors = self._SetMinorSyncParams(minor, self.params)
--    if sync_errors:
--      base.ThrowError("drbd%d: can't set the synchronization parameters: %s" %
--                      (minor, utils.CommaJoin(sync_errors)))
-+
-+    if not self._NeedsLocalSyncerParams():
-+      sync_errors = self._SetMinorSyncParams(minor, self.params)
-+      if sync_errors:
-+        base.ThrowError("drbd%d: can't set the synchronization parameters: %s" %
-+                        (minor, utils.CommaJoin(sync_errors)))
- 
-     family = self._GetNetFamily(minor, lhost, rhost)
- 
--    cmd = self._cmd_gen.GenNetInitCmd(minor, family, lhost, lport,
-+    cmds = self._cmd_gen.GenNetInitCmds(minor, family, lhost, lport,
-                                       rhost, rport, protocol,
-                                       dual_pri, hmac, secret, self.params)
- 
--    result = utils.RunCmd(cmd)
--    if result.failed:
--      base.ThrowError("drbd%d: can't setup network: %s - %s",
--                      minor, result.fail_reason, result.output)
-+    for cmd in cmds:
-+      result = utils.RunCmd(cmd)
-+      if result.failed:
-+        base.ThrowError("drbd%d: can't setup network: %s - %s",
-+                         minor, result.fail_reason, result.output)
- 
-     def _CheckNetworkConfig():
-       info = self._GetShowInfo(minor)
-@@ -463,19 +487,20 @@ class DRBD8Dev(base.BlockDev):
-       base.ThrowError("drbd%d: timeout while configuring network", minor)
- 
-     # Once the assembly is over, try to set the synchronization parameters
--    try:
--      # The minor may not have been set yet, requiring us to set it at least
--      # temporarily
--      old_minor = self.minor
--      self._SetFromMinor(minor)
--      sync_errors = self.SetSyncParams(self.params)
--      if sync_errors:
--        base.ThrowError("drbd%d: can't set the synchronization parameters: %s" %
--                        (self.minor, utils.CommaJoin(sync_errors)))
--    finally:
--      # Undo the change, regardless of whether it will have to be done again
--      # soon
--      self._SetFromMinor(old_minor)
-+    if not self._NeedsLocalSyncerParams():
-+      try:
-+        # The minor may not have been set yet, requiring us to set it at least
-+        # temporarily
-+        old_minor = self.minor
-+        self._SetFromMinor(minor)
-+        sync_errors = self.SetSyncParams(self.params)
-+        if sync_errors:
-+          base.ThrowError("drbd%d: can't set the synchronization parameters: %s" %
-+                          (self.minor, utils.CommaJoin(sync_errors)))
-+      finally:
-+        # Undo the change, regardless of whether it will have to be done again
-+        # soon
-+        self._SetFromMinor(old_minor)
- 
-   @staticmethod
-   def _GetNetFamily(minor, lhost, rhost):
-diff --git a/lib/storage/drbd_cmdgen.py b/lib/storage/drbd_cmdgen.py
---- a/lib/storage/drbd_cmdgen.py
-+++ b/lib/storage/drbd_cmdgen.py
-@@ -56,7 +56,7 @@ class BaseDRBDCmdGenerator(object):
-   def GenLocalInitCmds(self, minor, data_dev, meta_dev, size_mb, params):
-     raise NotImplementedError
- 
--  def GenNetInitCmd(self, minor, family, lhost, lport, rhost, rport, protocol,
-+  def GenNetInitCmds(self, minor, family, lhost, lport, rhost, rport, protocol,
-                     dual_pri, hmac, secret, params):
-     raise NotImplementedError
- 
-@@ -138,7 +138,7 @@ class DRBD83CmdGenerator(BaseDRBDCmdGenerator):
- 
-     return [args]
- 
--  def GenNetInitCmd(self, minor, family, lhost, lport, rhost, rport, protocol,
-+  def GenNetInitCmds(self, minor, family, lhost, lport, rhost, rport, protocol,
-                     dual_pri, hmac, secret, params):
-     args = ["drbdsetup", self._DevPath(minor), "net",
-             "%s:%s:%s" % (family, lhost, lport),
-@@ -155,7 +155,7 @@ class DRBD83CmdGenerator(BaseDRBDCmdGenerator):
-     if params[constants.LDP_NET_CUSTOM]:
-       args.extend(shlex.split(params[constants.LDP_NET_CUSTOM]))
- 
--    return args
-+    return [args]
- 
-   def GenSyncParamsCmd(self, minor, params):
-     args = ["drbdsetup", self._DevPath(minor), "syncer"]
-@@ -345,8 +345,14 @@ class DRBD84CmdGenerator(BaseDRBDCmdGenerator):
- 
-     return cmds
- 
--  def GenNetInitCmd(self, minor, family, lhost, lport, rhost, rport, protocol,
-+  def GenNetInitCmds(self, minor, family, lhost, lport, rhost, rport, protocol,
-                     dual_pri, hmac, secret, params):
-+    cmds = []
-+
-+    cmds.append(["drbdsetup", "new-resource", self._GetResource(minor)])
-+    cmds.append(["drbdsetup", "new-minor", self._GetResource(minor),
-+                 str(minor), "0"])
-+
-     args = ["drbdsetup", "connect", self._GetResource(minor),
-             "%s:%s:%s" % (family, lhost, lport),
-             "%s:%s:%s" % (family, rhost, rport),
-@@ -362,7 +368,8 @@ class DRBD84CmdGenerator(BaseDRBDCmdGenerator):
-     if params[constants.LDP_NET_CUSTOM]:
-       args.extend(shlex.split(params[constants.LDP_NET_CUSTOM]))
- 
--    return args
-+    cmds.append(args)
-+    return cmds
- 
-   def GenSyncParamsCmd(self, minor, params):
-     args = ["drbdsetup", "disk-options", minor]
diff --git a/gnu/packages/patches/ganeti-haskell-compat.patch b/gnu/packages/patches/ganeti-haskell-compat.patch
new file mode 100644
index 0000000000..931c50e116
--- /dev/null
+++ b/gnu/packages/patches/ganeti-haskell-compat.patch
@@ -0,0 +1,18 @@
+Adjust to type change of TupE in Template Haskell 2.16.
+
+diff --git a/src/Ganeti/THH/Types.hs b/src/Ganeti/THH/Types.hs
+--- a/src/Ganeti/THH/Types.hs
++++ b/src/Ganeti/THH/Types.hs
+@@ -123,4 +123,11 @@ curryN n = do
+   f <- newName "f"
+   ps <- replicateM n (newName "x")
+   return $ LamE (VarP f : map VarP ps)
+-             (AppE (VarE f) (TupE $ map VarE ps))
++             (AppE (VarE f) (nonUnaryTupE $ map VarE ps))
++  where
++    nonUnaryTupE :: [Exp] -> Exp
++    nonUnaryTupE es = TupE $
++#if MIN_VERSION_template_haskell(2,16,0)
++                            map Just
++#endif
++                            es
diff --git a/gnu/packages/patches/ganeti-os-disk-size.patch b/gnu/packages/patches/ganeti-os-disk-size.patch
deleted file mode 100644
index 16b1d7615c..0000000000
--- a/gnu/packages/patches/ganeti-os-disk-size.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-This exposes information about disk sizes to OS install scripts.  instance-guix
-uses this if available to determine the size of the VM image.
-
-Submitted upstream:
-https://github.com/ganeti/ganeti/pull/1503
-
-diff --git a/lib/backend.py b/lib/backend.py
---- a/lib/backend.py
-+++ b/lib/backend.py
-@@ -4305,6 +4305,7 @@ def OSEnvironment(instance, inst_os, debug=0):
-     uri = _CalculateDeviceURI(instance, disk, real_disk)
-     result["DISK_%d_ACCESS" % idx] = disk.mode
-     result["DISK_%d_UUID" % idx] = disk.uuid
-+    result["DISK_%d_SIZE" % idx] = str(disk.size)
-     if real_disk.dev_path:
-       result["DISK_%d_PATH" % idx] = real_disk.dev_path
-     if uri:
diff --git a/gnu/packages/patches/ganeti-preserve-PYTHONPATH.patch b/gnu/packages/patches/ganeti-preserve-PYTHONPATH.patch
deleted file mode 100644
index 1358e30633..0000000000
--- a/gnu/packages/patches/ganeti-preserve-PYTHONPATH.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-Do not override PYTHONPATH when calling Python code from the Haskell
-daemons.  This is necessary because the Python library dependencies are
-only available through PYTHONPATH.
-
-diff --git a/src/Ganeti/Query/Exec.hs b/src/Ganeti/Query/Exec.hs
---- a/src/Ganeti/Query/Exec.hs
-+++ b/src/Ganeti/Query/Exec.hs
-@@ -99,12 +99,10 @@ spawnJobProcess jid = withErrorLogAt CRITICAL (show jid) $
-   do
-     use_debug <- isDebugMode
-     env_ <- (M.toList . M.insert "GNT_DEBUG" (if use_debug then "1" else "0")
--            . M.insert "PYTHONPATH" AC.pythondir
-             . M.fromList)
-            `liftM` getEnvironment
-     execPy <- P.jqueueExecutorPy
-     logDebug $ "Executing " ++ AC.pythonPath ++ " " ++ execPy
--               ++ " with PYTHONPATH=" ++ AC.pythondir
- 
-     (master, child) <- pipeClient connectConfig
-     let (rh, wh) = clientToHandle child
-
diff --git a/gnu/packages/patches/ganeti-sphinx-compat.patch b/gnu/packages/patches/ganeti-sphinx-compat.patch
new file mode 100644
index 0000000000..4e84abbf37
--- /dev/null
+++ b/gnu/packages/patches/ganeti-sphinx-compat.patch
@@ -0,0 +1,24 @@
+Adjust documentation for Sphinx 4.0.
+
+Discussed upstream at <https://github.com/ganeti/ganeti/pull/1615>.
+
+diff --git a/doc/index.rst b/doc/index.rst
+--- a/doc/index.rst
++++ b/doc/index.rst
+@@ -119,7 +119,6 @@ Draft designs
+    design-hotplug.rst
+    design-internal-shutdown.rst
+    design-kvmd.rst
+-   design-location.rst
+    design-linuxha.rst
+    design-location.rst
+    design-lu-generated-jobs.rst
+diff --git a/lib/build/shell_example_lexer.py b/lib/build/shell_example_lexer.py
+--- a/lib/build/shell_example_lexer.py
++++ b/lib/build/shell_example_lexer.py
+@@ -79,4 +79,4 @@ class ShellExampleLexer(RegexLexer):
+ 
+ 
+ def setup(app):
+-  app.add_lexer("shell-example", ShellExampleLexer())
++  app.add_lexer("shell-example", ShellExampleLexer)
diff --git a/gnu/packages/patches/gcc-10-cross-environment-variables.patch b/gnu/packages/patches/gcc-10-cross-environment-variables.patch
new file mode 100644
index 0000000000..414198657d
--- /dev/null
+++ b/gnu/packages/patches/gcc-10-cross-environment-variables.patch
@@ -0,0 +1,51 @@
+Search path environment variables for cross-compilers.  See the discussion
+at <http://gcc.gnu.org/ml/gcc/2013-02/msg00124.html>.
+
+Note: Touch 'C_INCLUDE_PATH' et al. rather than 'CPATH', as discussed
+at <http://bugs.gnu.org/22186>.
+
+diff --git a/gcc/gcc.c b/gcc/gcc.c
+--- a/gcc/gcc.c
++++ b/gcc/gcc.c
+@@ -4474,7 +4474,7 @@ process_command (unsigned int decoded_options_count,
+     }
+ 
+   temp = env.get (LIBRARY_PATH_ENV);
+-  if (temp && *cross_compile == '0')
++  if (temp)
+     {
+       const char *startp, *endp;
+       char *nstore = (char *) alloca (strlen (temp) + 3);
+diff --git a/gcc/incpath.c b/gcc/incpath.c
+--- a/gcc/incpath.c
++++ b/gcc/incpath.c
+@@ -472,8 +472,8 @@ register_include_chains (cpp_reader *pfile, const char *sysroot,
+ 			 int stdinc, int cxx_stdinc, int verbose)
+ {
+   static const char *const lang_env_vars[] =
+-    { "C_INCLUDE_PATH", "CPLUS_INCLUDE_PATH",
+-      "OBJC_INCLUDE_PATH", "OBJCPLUS_INCLUDE_PATH" };
++    { "CROSS_C_INCLUDE_PATH", "CROSS_CPLUS_INCLUDE_PATH",
++      "CROSS_OBJC_INCLUDE_PATH", "CROSS_OBJCPLUS_INCLUDE_PATH" };
+   cpp_options *cpp_opts = cpp_get_options (pfile);
+   size_t idx = (cpp_opts->objc ? 2: 0);
+ 
+@@ -484,7 +484,7 @@ register_include_chains (cpp_reader *pfile, const char *sysroot,
+ 
+   /* CPATH and language-dependent environment variables may add to the
+      include chain.  */
+-  add_env_var_paths ("CPATH", INC_BRACKET);
++  add_env_var_paths ("CROSS_CPATH", INC_BRACKET);
+   add_env_var_paths (lang_env_vars[idx], INC_SYSTEM);
+ 
+   target_c_incpath.extra_pre_includes (sysroot, iprefix, stdinc);
+diff --git a/gcc/system.h b/gcc/system.h
+--- a/gcc/system.h
++++ b/gcc/system.h
+@@ -1244,4 +1244,6 @@ void gcc_stablesort (void *, size_t, size_t,
+    of the number.  */
+ #define PRsa(n) "%" #n PRIu64 "%c"
+ 
++#define LIBRARY_PATH_ENV "CROSS_LIBRARY_PATH"
++
+ #endif /* ! GCC_SYSTEM_H */
diff --git a/gnu/packages/patches/gcc-5-fix-powerpc64le-build.patch b/gnu/packages/patches/gcc-5-fix-powerpc64le-build.patch
new file mode 100644
index 0000000000..289d648875
--- /dev/null
+++ b/gnu/packages/patches/gcc-5-fix-powerpc64le-build.patch
@@ -0,0 +1,64 @@
+From ee6c0081c03330045b3d4cde8421cd1d3a459609 Mon Sep 17 00:00:00 2001
+From: Martin Liska <mliska@suse.cz>
+Date: Fri, 15 Jun 2018 10:51:28 +0200
+Subject: [PATCH] Partial backport r256656
+
+2018-06-15  Martin Liska  <mliska@suse.cz>
+
+	Backport from mainline
+	2018-01-10  Kelvin Nilsen  <kelvin@gcc.gnu.org>
+
+	* lex.c (search_line_fast): Remove illegal coercion of an
+	unaligned pointer value to vector pointer type and replace with
+	use of __builtin_vec_vsx_ld () built-in function, which operates
+	on unaligned pointer values.
+
+From-SVN: r261621
+---
+
+Obtained from:
+
+https://gcc.gnu.org/git/?p=gcc.git;a=patch;h=ee6c0081c03330045b3d4cde8421cd1d3a459609
+
+The libcpp/ChangeLog hunk was modified to apply on top of gcc-5's libcpp/ChangeLog.
+
+ libcpp/ChangeLog | 12 ++++++++++++
+ libcpp/lex.c     |  2 +-
+ 2 files changed, 13 insertions(+), 1 deletion(-)
+
+diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog
+index c920a05d438..a63abb04f5e 100644
+--- a/libcpp/ChangeLog
++++ b/libcpp/ChangeLog
+@@ -1,3 +1,15 @@
++2018-06-15  Martin Liska  <mliska@suse.cz>
++
++	PR bootstrap/86162
++
++	Backport from mainline
++	2018-01-10  Kelvin Nilsen  <kelvin@gcc.gnu.org>
++
++	* lex.c (search_line_fast): Remove illegal coercion of an
++	unaligned pointer value to vector pointer type and replace with
++	use of __builtin_vec_vsx_ld () built-in function, which operates
++	on unaligned pointer values.
++
+ 2017-10-10  Release Manager
+ 
+ 	* GCC 5.5.0 released.
+diff --git a/libcpp/lex.c b/libcpp/lex.c
+index e5a0397f309..b789686f1c4 100644
+--- a/libcpp/lex.c
++++ b/libcpp/lex.c
+@@ -568,7 +568,7 @@ search_line_fast (const uchar *s, const uchar *end ATTRIBUTE_UNUSED)
+     {
+       vc m_nl, m_cr, m_bs, m_qm;
+ 
+-      data = *((const vc *)s);
++      data = __builtin_vec_vsx_ld (0, s);
+       s += 16;
+ 
+       m_nl = (vc) __builtin_vec_cmpeq(data, repl_nl);
+-- 
+2.27.0
+
diff --git a/gnu/packages/patches/gcc-cross-gxx-include-dir.patch b/gnu/packages/patches/gcc-cross-gxx-include-dir.patch
new file mode 100644
index 0000000000..d6c4ffddc4
--- /dev/null
+++ b/gnu/packages/patches/gcc-cross-gxx-include-dir.patch
@@ -0,0 +1,73 @@
+This patch reverts upstream commit b4d3485e4fc1d:
+
+  https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=b4d3485e4fc1d029e620a59deb54b3f4f3f6b209
+
+Otherwise, GCC ends up searching the wrong target directory for cross-headers.
+
+diff --git a/gcc/configure b/gcc/configure
+--- a/gcc/configure
++++ b/gcc/configure
+@@ -3689,11 +3689,6 @@ esac
+ fi
+ 
+ 
+-# If both --with-sysroot and --with-gxx-include-dir are passed, we interpolate
+-# the former in the latter and, upon success, compute gcc_gxx_include_dir as
+-# relative to the sysroot.
+-gcc_gxx_include_dir_add_sysroot=0
+-
+ # This logic must match libstdc++-v3/acinclude.m4:GLIBCXX_EXPORT_INSTALL_INFO.
+ if test x${gcc_gxx_include_dir} = x; then
+   if test x${enable_version_specific_runtime_libs} = xyes; then
+@@ -3705,10 +3700,15 @@ if test x${gcc_gxx_include_dir} = x; then
+     fi
+     gcc_gxx_include_dir="\$(libsubdir)/\$(libsubdir_to_prefix)$libstdcxx_incdir"
+   fi
+-elif test "${with_sysroot+set}" = set; then
++fi
++
++gcc_gxx_include_dir_add_sysroot=0
++if test "${with_sysroot+set}" = set; then
+   gcc_gxx_without_sysroot=`expr "${gcc_gxx_include_dir}" : "${with_sysroot}"'\(.*\)'`
+   if test "${gcc_gxx_without_sysroot}"; then
+-    gcc_gxx_include_dir="${gcc_gxx_without_sysroot}"
++    if test x${with_sysroot} != x/; then
++      gcc_gxx_include_dir="${gcc_gxx_without_sysroot}"
++    fi
+     gcc_gxx_include_dir_add_sysroot=1
+   fi
+ fi
+diff --git a/gcc/configure.ac b/gcc/configure.ac
+index 715fcba0482..88136e232df 100644
+--- a/gcc/configure.ac
++++ b/gcc/configure.ac
+@@ -204,11 +204,6 @@ no)	;;
+ *)	gcc_gxx_include_dir=$with_gxx_include_dir ;;
+ esac])
+ 
+-# If both --with-sysroot and --with-gxx-include-dir are passed, we interpolate
+-# the former in the latter and, upon success, compute gcc_gxx_include_dir as
+-# relative to the sysroot.
+-gcc_gxx_include_dir_add_sysroot=0
+-
+ # This logic must match libstdc++-v3/acinclude.m4:GLIBCXX_EXPORT_INSTALL_INFO.
+ if test x${gcc_gxx_include_dir} = x; then
+   if test x${enable_version_specific_runtime_libs} = xyes; then
+@@ -220,10 +215,15 @@ if test x${gcc_gxx_include_dir} = x; then
+     fi
+     gcc_gxx_include_dir="\$(libsubdir)/\$(libsubdir_to_prefix)$libstdcxx_incdir"
+   fi
+-elif test "${with_sysroot+set}" = set; then
++fi
++
++gcc_gxx_include_dir_add_sysroot=0
++if test "${with_sysroot+set}" = set; then
+   gcc_gxx_without_sysroot=`expr "${gcc_gxx_include_dir}" : "${with_sysroot}"'\(.*\)'`
+   if test "${gcc_gxx_without_sysroot}"; then
+-    gcc_gxx_include_dir="${gcc_gxx_without_sysroot}"
++    if test x${with_sysroot} != x/; then
++      gcc_gxx_include_dir="${gcc_gxx_without_sysroot}"
++    fi
+     gcc_gxx_include_dir_add_sysroot=1
+   fi
+ fi
diff --git a/gnu/packages/patches/gd-Revert-fix-303-gdlib.pc.patch b/gnu/packages/patches/gd-Revert-fix-303-gdlib.pc.patch
new file mode 100644
index 0000000000..6329b129d3
--- /dev/null
+++ b/gnu/packages/patches/gd-Revert-fix-303-gdlib.pc.patch
@@ -0,0 +1,179 @@
+From 9b31dfda73ee2d1b56b3f0dcfd3246c2faa592fe Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?L=C3=A9o=20Le=20Bouter?= <lle-bout@zaclys.net>
+Date: Sun, 28 Mar 2021 19:47:25 +0200
+Subject: [PATCH] Revert "fix #303: gdlib.pc: use Requires instead of Libs
+ (#537)"
+
+This reverts commit 28ecfe77c817aff8ce56422d3e4e8533a281bc76.
+---
+ CMakeLists.txt        | 12 ------------
+ config/gdlib.pc.cmake |  4 +---
+ config/gdlib.pc.in    |  4 +---
+ configure.ac          | 11 +----------
+ src/CMakeLists.txt    |  6 ------
+ 5 files changed, 3 insertions(+), 34 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 57cd95d..6bd0c73 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -53,8 +53,6 @@ SET (CMAKE_ARCHIVE_OUTPUT_DIRECTORY
+   "Single Directory for all static libraries."
+   )
+ 
+-SET(PKG_REQUIRES_PRIVATES "")
+-
+ if (USE_EXT_GD)
+ 	message("Using GD at: ${USE_EXT_GD}")
+ 	INCLUDE_DIRECTORIES(BEFORE ${GD_INCLUDE_DIR})
+@@ -170,13 +168,11 @@ else (USE_EXT_GD)
+ 		INCLUDE_DIRECTORIES(${FREETYPE_INCLUDE_DIRS})
+ 		SET(HAVE_FT2BUILD_H 1)
+ 		SET(HAVE_LIBFREETYPE 1)
+-		LIST(APPEND PKG_REQUIRES_PRIVATES freetype2)
+ 	ENDIF(FREETYPE_FOUND)
+ 
+ 	IF(ZLIB_FOUND)
+ 		INCLUDE_DIRECTORIES(${ZLIB_INCLUDE_DIR})
+ 		SET(HAVE_LIBZ 1)
+-		LIST(APPEND PKG_REQUIRES_PRIVATES zlib)
+ 	ENDIF(ZLIB_FOUND)
+ 
+ 	IF(WEBP_FOUND)
+@@ -192,7 +188,6 @@ else (USE_EXT_GD)
+ 	IF(PNG_FOUND)
+ 		INCLUDE_DIRECTORIES(${PNG_INCLUDE_DIR})
+ 		SET(HAVE_LIBPNG 1)
+-		LIST(APPEND PKG_REQUIRES_PRIVATES libpng)
+ 	ENDIF(PNG_FOUND)
+ 
+ 	IF(ICONV_FOUND)
+@@ -209,25 +204,21 @@ else (USE_EXT_GD)
+ 	IF(XPM_FOUND)
+ 		INCLUDE_DIRECTORIES(${XPM_INCLUDE_DIR})
+ 		SET(HAVE_LIBXPM 1)
+-		LIST(APPEND PKG_REQUIRES_PRIVATES xpm)
+ 	ENDIF(XPM_FOUND)
+ 
+ 	IF(JPEG_FOUND)
+ 		INCLUDE_DIRECTORIES(${JPEG_INCLUDE_DIR})
+ 		SET(HAVE_LIBJPEG 1)
+-		LIST(APPEND PKG_REQUIRES_PRIVATES libjpeg)
+ 	ENDIF(JPEG_FOUND)
+ 
+ 	IF(TIFF_FOUND)
+ 		INCLUDE_DIRECTORIES(${TIFF_INCLUDE_DIR})
+ 		SET(HAVE_LIBTIFF 1)
+-		LIST(APPEND PKG_REQUIRES_PRIVATES libtiff-4)
+ 	ENDIF(TIFF_FOUND)
+ 
+ 	IF(FONTCONFIG_FOUND)
+ 		INCLUDE_DIRECTORIES(${FONTCONFIG_INCLUDE_DIR})
+ 		SET(HAVE_LIBFONTCONFIG 1)
+-		LIST(APPEND PKG_REQUIRES_PRIVATES fontconfig)
+ 	ELSE (FONTCONFIG_FOUND)
+ 		SET(FONTCONFIG_LIBRARY "")
+ 		SET(FONTCONFIG_INCLUDE_DIR "")
+@@ -236,11 +227,8 @@ else (USE_EXT_GD)
+ 
+ 	IF(RAQM_FOUND)
+ 		INCLUDE_DIRECTORIES(${RAQM_INCLUDE_DIR})
+-		SET(HAVE_RAQM 1)
+-		LIST(APPEND PKG_REQUIRES_PRIVAES raqm)
+ 	ENDIF(RAQM_FOUND)
+ 
+-	string(REPLACE ";" ", " PKG_REQUIRES_PRIVATES "${PKG_REQUIRES_PRIVATES}")
+ 	SET(HAVE_CONFIG_H 1)
+ 
+ 	ADD_DEFINITIONS(-DHAVE_CONFIG_H)
+diff --git a/config/gdlib.pc.cmake b/config/gdlib.pc.cmake
+index 5fc8af4..d1a0dda 100644
+--- a/config/gdlib.pc.cmake
++++ b/config/gdlib.pc.cmake
+@@ -6,8 +6,6 @@ includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@
+ Name: gd
+ Description: GD graphics library
+ Version: @GDLIB_VERSION@
+-Requires:
+-Requires.private: @PKG_REQUIRES_PRIVATES@
+ Cflags: -I${includedir}
+-Libs.private: @LIBS_PRIVATES@
++Libs.private: @LIBGD_DEP_LIBS@
+ Libs: -L${libdir} -lgd
+diff --git a/config/gdlib.pc.in b/config/gdlib.pc.in
+index d6bc375..b980a60 100644
+--- a/config/gdlib.pc.in
++++ b/config/gdlib.pc.in
+@@ -6,8 +6,6 @@ includedir=@includedir@
+ Name: gd
+ Description: GD graphics library
+ Version: @VERSION@
+-Requires:
+-Requires.private: @PKG_REQUIRES_PRIVATES@
+ Cflags: -I${includedir}
+-Libs.private: @LIBS_PRIVATES@ @LIBICONV@
++Libs.private: @LIBS@ @LIBICONV@
+ Libs: -L${libdir} -lgd
+diff --git a/configure.ac b/configure.ac
+index 535db68..329c99c 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -33,9 +33,6 @@ AC_SUBST(GDLIB_LT_CURRENT)
+ AC_SUBST(GDLIB_LT_REVISION)
+ AC_SUBST(GDLIB_LT_AGE)
+ 
+-AC_SUBST(LIBS_PRIVATES)
+-AC_SUBST(PKG_REQUIRES_PRIVATES)
+-
+ AM_INIT_AUTOMAKE([1.11 foreign dist-xz -Wall -Werror subdir-objects])
+ AC_CONFIG_HEADERS([src/config.h:src/config.hin])
+ 
+@@ -133,7 +130,6 @@ m4_define([GD_LIB_CHECK], [dnl
+   AC_MSG_RESULT([$gd_with_lib])
+ 
+   gd_found_lib=no
+-  gd_require_pkg_name=""
+   if test "$gd_with_lib" != "no"; then
+     save_CPPFLAGS=$CPPFLAGS
+     save_LDFLAGS=$LDFLAGS
+@@ -165,11 +161,6 @@ m4_define([GD_LIB_CHECK], [dnl
+       $1][_CFLAGS="$gd_lib_cflags $][$1][_CFLAGS"
+       AS_VAR_APPEND([LIBS], [" $][$1][_LIBS"])
+       AS_VAR_APPEND([CPPFLAGS], [" $][$1][_CFLAGS"])
+-      if test -z "$gd_require_pkg_name"; then
+-        AS_VAR_APPEND([LIBS_PRIVATES], [" $][$1][_LIBS"])
+-      else
+-        AS_VAR_APPEND([PKG_REQUIRES_PRIVATES], ["  $gd_require_pkg_name"])
+-      fi
+     elif test "$gd_with_lib" = "yes"; then
+       AC_MSG_ERROR([$3 requested but not found])
+     else
+@@ -189,7 +180,7 @@ dnl $4 - pkg-config module to look for
+ dnl $5 - fallback test for the feature
+ m4_define([GD_LIB_PKG_CHECK], [dnl
+   GD_LIB_CHECK([$1], [$2], [$3], [dnl
+-    PKG_CHECK_MODULES([$1], [$4], [gd_found_lib=yes gd_require_pkg_name="$4"], [$5])
++    PKG_CHECK_MODULES([$1], [$4], [gd_found_lib=yes], [$5])
+   ])
+ ])
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index 509c422..49adbd6 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -142,12 +142,6 @@ if (BUILD_STATIC_LIBS)
+ 	target_link_libraries(${GD_LIB_STATIC} ${LIBGD_DEP_LIBS})
+ endif()
+ 
+-SET(LIBS_PRIVATES
+-	${ICONV_LIBRARIES}
+-	${LIQ_LIBRARIES}
+-	${WEBP_LIBRARIES}
+-)
+-
+ set(GD_PROGRAMS gdcmpgif)
+ 
+ if (PNG_FOUND)
+-- 
+2.31.1
+
diff --git a/gnu/packages/patches/gdb-fix-gnu-nat-build.patch b/gnu/packages/patches/gdb-fix-gnu-nat-build.patch
new file mode 100644
index 0000000000..b0249d9cec
--- /dev/null
+++ b/gnu/packages/patches/gdb-fix-gnu-nat-build.patch
@@ -0,0 +1,254 @@
+Fix build on the Hurd.
+
+Patch #1 taken from upstream
+
+    https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=a1700a3199d31910b87cd7db3c394ddd091cfcde
+
+Patch #2 taken from upstream mailing list
+
+    https://sourceware.org/pipermail/gdb/2021-November/049777.html
+
+Patch #3 sent to upstream
+
+    https://sourceware.org/pipermail/gdb/2021-November/049788.html
+
+From 30d89407ad6bb62fafc72fa9c547c2d7ff371401 Mon Sep 17 00:00:00 2001
+From: Simon Marchi <simon.marchi@polymtl.ca>
+Date: Wed, 3 Nov 2021 15:09:19 -0400
+Subject: [PATCH 1/3] gdb: fix gnu-nat build
+Content-Transfer-Encoding: 8bit
+Content-Type: text/plain; charset=UTF-8
+
+When building gnu-nat.c, we get:
+
+      CXX    gnu-nat.o
+    gnu-nat.c: In member function 'virtual void gnu_nat_target::create_inferior(const char*, const string&, char**, int)':
+    gnu-nat.c:2117:13: error: 'struct inf' has no member named 'target_is_pushed'
+     2117 |   if (!inf->target_is_pushed (this))
+          |             ^~~~~~~~~~~~~~~~
+    gnu-nat.c:2118:10: error: 'struct inf' has no member named 'push_target'
+     2118 |     inf->push_target (this);
+          |          ^~~~~~~~~~~
+
+This is because of a confusion between the generic `struct inferior`
+variable and the gnu-nat-specific `struct inf` variable.  Fix by
+referring to `inferior`, not `inf`.
+
+Adjust the comment on top of `struct inf` to clarify the purpose of that
+type.
+
+Co-Authored-By: Andrea Monaco <andrea.monaco@autistici.org>
+Change-Id: I2fe2f7f6ef61a38d79860fd262b08835c963fc77
+---
+ gdb/gnu-nat.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/gdb/gnu-nat.c b/gdb/gnu-nat.c
+index 67ce00e9c30..ab539b4d8b4 100644
+--- a/gdb/gnu-nat.c
++++ b/gdb/gnu-nat.c
+@@ -149,7 +149,7 @@ struct inf_wait
+     int suppress;		/* Something trivial happened.  */
+   };
+ 
+-/* The state of an inferior.  */
++/* Further Hurd-specific state of an inferior.  */
+ struct inf
+   {
+     /* Fields describing the current inferior.  */
+@@ -2114,8 +2114,8 @@ gnu_nat_target::create_inferior (const char *exec_file,
+ 
+   inf_debug (inf, "creating inferior");
+ 
+-  if (!inf->target_is_pushed (this))
+-    inf->push_target (this);
++  if (!inferior->target_is_pushed (this))
++    inferior->push_target (this);
+ 
+   pid = fork_inferior (exec_file, allargs, env, gnu_ptrace_me,
+ 		       NULL, NULL, NULL, NULL);
+From ebc0837f4693232f74eb2cc3033515b18a8f0900 Mon Sep 17 00:00:00 2001
+From: "Jan (janneke) Nieuwenhuizen" <janneke@gnu.org>
+Date: Mon, 22 Nov 2021 07:47:28 +0100
+Subject: [PATCH 2/3] gdb: gnu-nat.c: port-rights.
+Content-Transfer-Encoding: 8bit
+Content-Type: text/plain; charset=UTF-8
+
+Taken from:
+
+    https://sourceware.org/pipermail/gdb/2021-November/049777.html
+---
+ gdb/gnu-nat.c | 18 ++++++++++--------
+ 1 file changed, 10 insertions(+), 8 deletions(-)
+
+diff --git a/gdb/gnu-nat.c b/gdb/gnu-nat.c
+index ab539b4d8b4..8cd876b21d0 100644
+--- a/gdb/gnu-nat.c
++++ b/gdb/gnu-nat.c
+@@ -3292,15 +3292,17 @@ This is the same as setting `task pause', `exceptions', and\n\
+ 	    _("Show information about the task's send rights."));
+   add_info ("receive-rights", info_recv_rights_cmd,
+ 	    _("Show information about the task's receive rights."));
+-  add_info ("port-rights", info_port_rights_cmd,
+-	    _("Show information about the task's port rights."));
+-  add_info ("port-sets", info_port_sets_cmd,
+-	    _("Show information about the task's port sets."));
++  cmd_list_element *port_rights_cmd =
++    add_info ("port-rights", info_port_rights_cmd,
++             _("Show information about the task's port rights."));
++  cmd_list_element *port_sets_cmd =
++    add_info ("port-sets", info_port_sets_cmd,
++             _("Show information about the task's port sets."));
+   add_info ("dead-names", info_dead_names_cmd,
+-	    _("Show information about the task's dead names."));
+-  add_info_alias ("ports", "port-rights", 1);
+-  add_info_alias ("port", "port-rights", 1);
+-  add_info_alias ("psets", "port-sets", 1);
++            _("Show information about the task's dead names."));
++  add_info_alias ("ports", port_rights_cmd, 1);
++  add_info_alias ("port", port_rights_cmd, 1);
++  add_info_alias ("psets", port_sets_cmd, 1);
+ }
+ 
+ 
+From e8df985cdd95e4808c390e226a0e852d23c502f9 Mon Sep 17 00:00:00 2001
+From: "Jan (janneke) Nieuwenhuizen" <janneke@gnu.org>
+Date: Mon, 22 Nov 2021 08:22:15 +0100
+Subject: [PATCH 3/3] gdb: More compile fixes for gnu-nat.c.
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+Content-Transfer-Encoding: 8bit
+Content-Type: text/plain; charset=UTF-8
+
+This fixes compile errors like
+
+    ../../gdb-11.1/gdb/gnu-nat.c: In function ‘void add_task_commands()’:
+    ../../gdb-11.1/gdb/gnu-nat.c:3204:17: error: no matching function for call to ‘add_cmd(const char [8], command_class, cmd_list_element*&, char*, cmd_list_element**)’
+     3204 |         &setlist);
+          |                 ^
+    In file included from ../../gdb-11.1/gdb/completer.h:21,
+                     from ../../gdb-11.1/gdb/symtab.h:36,
+                     from ../../gdb-11.1/gdb/infrun.h:21,
+                     from ../../gdb-11.1/gdb/target.h:42,
+                     from ../../gdb-11.1/gdb/inf-child.h:23,
+                     from ../../gdb-11.1/gdb/gnu-nat.h:38,
+                     from ../../gdb-11.1/gdb/gnu-nat.c:24:
+    ../../gdb-11.1/gdb/command.h:160:33: note: candidate: ‘cmd_list_element* add_cmd(const char*, command_class, void (*)(const char*, int), const char*, cmd_list_element**)’
+      160 | extern struct cmd_list_element *add_cmd (const char *, enum command_class,
+          |                                 ^~~~~~~
+    ../../gdb-11.1/gdb/command.h:161:30: note:   no known conversion for argument 3 from ‘cmd_list_element*’ to ‘void (*)(const char*, int)’
+      161 |       cmd_const_cfunc_ftype *fun,
+          |       ~~~~~~~~~~~~~~~~~~~~~~~^~~
+    ../../gdb-11.1/gdb/command.h:167:33: note: candidate: ‘cmd_list_element* add_cmd(const char*, command_class, const char*, cmd_list_element**)’
+      167 | extern struct cmd_list_element *add_cmd (const char *, enum command_class,
+          |                                 ^~~~~~~
+    ../../gdb-11.1/gdb/command.h:167:33: note:   candidate expects 4 arguments, 5 provided
+    ../../gdb-11.1/gdb/gnu-nat.c:3210:18: error: no matching function for call to ‘add_cmd(const char [8], command_class, cmd_list_element*&, char*, cmd_list_element**)’
+     3210 |         &showlist);
+          |                  ^
+
+* gdb/gnu-nat.c (add_task_commands): Use a fresh variable instead of
+shadowing set_signals_cmd etc.
+(add_thread_commands): Likewise.
+---
+ gdb/gnu-nat.c | 33 +++++++++++++++++----------------
+ 1 file changed, 17 insertions(+), 16 deletions(-)
+
+diff --git a/gdb/gnu-nat.c b/gdb/gnu-nat.c
+index 8cd876b21d0..7aecc2295f8 100644
+--- a/gdb/gnu-nat.c
++++ b/gdb/gnu-nat.c
+@@ -3197,31 +3197,31 @@ Show whether new threads are allowed to run (once gdb has noticed them)."),
+ 	   _("Show the default detach-suspend-count value for new threads."),
+ 	   &show_thread_default_cmd_list);
+ 
+-  cmd_list_element *set_signals_cmd
++  cmd_list_element *set_signals_cmd_
+     = add_cmd ("signals", class_run, set_signals_cmd, _("\
+ Set whether the inferior process's signals will be intercepted.\n\
+ Mach exceptions (such as breakpoint traps) are not affected."),
+ 	       &setlist);
+-  add_alias_cmd ("sigs", set_signals_cmd, class_run, 1, &setlist);
++  add_alias_cmd ("sigs", set_signals_cmd_, class_run, 1, &setlist);
+ 
+-  cmd_list_element *show_signals_cmd
++  cmd_list_element *show_signals_cmd_
+     = add_cmd ("signals", no_class, show_signals_cmd, _("\
+ Show whether the inferior process's signals will be intercepted."),
+ 	       &showlist);
+-  add_alias_cmd ("sigs", show_signals_cmd, no_class, 1, &showlist);
++  add_alias_cmd ("sigs", show_signals_cmd_, no_class, 1, &showlist);
+ 
+-  cmd_list_element *set_signal_thread_cmd
++  cmd_list_element *set_signal_thread_cmd_
+     = add_cmd ("signal-thread", class_run, set_sig_thread_cmd, _("\
+ Set the thread that gdb thinks is the libc signal thread.\n\
+ This thread is run when delivering a signal to a non-stopped process."),
+ 	       &setlist);
+-  add_alias_cmd ("sigthread", set_signal_thread_cmd, class_run, 1, &setlist);
++  add_alias_cmd ("sigthread", set_signal_thread_cmd_, class_run, 1, &setlist);
+ 
+-  cmd_list_element *show_signal_thread_cmd
++  cmd_list_element *show_signal_thread_cmd_
+     = add_cmd ("signal-thread", no_class, show_sig_thread_cmd, _("\
+ Set the thread that gdb thinks is the libc signal thread."),
+ 	       &showlist);
+-  add_alias_cmd ("sigthread", show_signal_thread_cmd, no_class, 1, &showlist);
++  add_alias_cmd ("sigthread", show_signal_thread_cmd_, no_class, 1, &showlist);
+ 
+   add_cmd ("stopped", class_run, set_stopped_cmd, _("\
+ Set whether gdb thinks the inferior process is stopped as with SIGSTOP.\n\
+@@ -3231,13 +3231,13 @@ Stopped process will be continued by sending them a signal."),
+ Show whether gdb thinks the inferior process is stopped as with SIGSTOP."),
+ 	   &showlist);
+ 
+-  cmd_list_element *set_exceptions_cmd
++  cmd_list_element *set_exceptions_cmd_
+     = add_cmd ("exceptions", class_run, set_exceptions_cmd, _("\
+ Set whether exceptions in the inferior process will be trapped.\n\
+ When exceptions are turned off, neither breakpoints nor single-stepping\n\
+ will work."), &setlist);
+   /* Allow `set exc' despite conflict with `set exception-port'.  */
+-  add_alias_cmd ("exc", set_exceptions_cmd, class_run, 1, &setlist);
++  add_alias_cmd ("exc", set_exceptions_cmd_, class_run, 1, &setlist);
+ 
+   add_cmd ("exceptions", no_class, show_exceptions_cmd, _("\
+ Show whether exceptions in the inferior process will be trapped."),
+@@ -3269,14 +3269,14 @@ used to pause individual threads by default instead."),
+ 	     "on the thread when detaching."),
+ 	   &show_task_cmd_list);
+ 
+-  cmd_list_element *set_task_exception_port_cmd
++  cmd_list_element *set_task_exception_port_cmd_
+     = add_cmd ("exception-port", no_class, set_task_exc_port_cmd, _("\
+ Set the task exception port to which we forward exceptions.\n\
+ The argument should be the value of the send right in the task."),
+ 	       &set_task_cmd_list);
+-  add_alias_cmd ("excp", set_task_exception_port_cmd, no_class, 1,
++  add_alias_cmd ("excp", set_task_exception_port_cmd_, no_class, 1,
+ 		 &set_task_cmd_list);
+-  add_alias_cmd ("exc-port", set_task_exception_port_cmd, no_class, 1,
++  add_alias_cmd ("exc-port", set_task_exception_port_cmd_, no_class, 1,
+ 		 &set_task_cmd_list);
+ 
+   /* A convenient way of turning on all options require to noninvasively
+@@ -3464,14 +3464,15 @@ Note that this is relative to suspend count when gdb noticed the thread;\n\
+ use the `thread takeover-suspend-count' to force it to an absolute value."),
+ 	   &show_thread_cmd_list);
+ 
+-  add_cmd ("exception-port", no_class, set_thread_exc_port_cmd, _("\
++  cmd_list_element *set_thread_exception_port_cmd_
++    = add_cmd ("exception-port", no_class, set_thread_exc_port_cmd, _("\
+ Set the thread exception port to which we forward exceptions.\n\
+ This overrides the task exception port.\n\
+ The argument should be the value of the send right in the task."),
+ 	   &set_thread_cmd_list);
+-  add_alias_cmd ("excp", set_thread_exception_port_cmd, no_class, 1,
++  add_alias_cmd ("excp", set_thread_exception_port_cmd_, no_class, 1,
+ 		 &set_thread_cmd_list);
+-  add_alias_cmd ("exc-port", set_thread_exception_port_cmd, no_class, 1,
++  add_alias_cmd ("exc-port", set_thread_exception_port_cmd_, no_class, 1,
+ 		 &set_thread_cmd_list);
+ 
+   add_cmd ("takeover-suspend-count", no_class, thread_takeover_sc_cmd, _("\
diff --git a/gnu/packages/patches/gdb-hurd.patch b/gnu/packages/patches/gdb-hurd.patch
deleted file mode 100644
index 0af8d4dc28..0000000000
--- a/gnu/packages/patches/gdb-hurd.patch
+++ /dev/null
@@ -1,69 +0,0 @@
-Taken from upstream, removed ChangeLog.
-
-From 6930bffe3373690b3431d6291f9f7c116d6a1ec4 Mon Sep 17 00:00:00 2001
-From: Samuel Thibault <samuel.thibault@ens-lyon.org>
-Date: Sat, 30 May 2020 18:35:59 +0000
-Subject: [PATCH] hurd: fix gnu_debug_flag type
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Fixes
-
-../../gdb/gnu-nat.c:96:6: error: conflicting declaration ‘bool gnu_debug_flag’
-   96 | bool gnu_debug_flag = false;
-../../gdb/gnu-nat.c: In function ‘void _initialize_gnu_nat()’:
-../../gdb/gnu-nat.c:3511:7: error: cannot
-
-gdb/ChangeLog:
-
-	* gnu-nat.h (gnu_debug_flag): Set type to bool.
----
- gdb/ChangeLog | 4 ++++
- gdb/gnu-nat.h | 2 +-
- 2 files changed, 5 insertions(+), 1 deletion(-)
-
-diff --git a/gdb/gnu-nat.h b/gdb/gnu-nat.h
-index 77c57817b2..766f716587 100644
---- a/gdb/gnu-nat.h
-+++ b/gdb/gnu-nat.h
-@@ -111,7 +111,7 @@ extern char *proc_string (struct proc *proc);
- 	      __proc_pid (__proc), __proc->tid, \
- 	      host_address_to_string (__proc) , ##args); } while (0)
- 
--extern int gnu_debug_flag;
-+extern bool gnu_debug_flag;
- 
- #define debug(msg, args...) \
-  do { if (gnu_debug_flag) \
--- 
-Jan Nieuwenhuizen <janneke@gnu.org> | GNU LilyPond http://lilypond.org
-Freelance IT http://JoyofSource.com | Avatar® http://AvatarAcademy.com
-
-commit 366f550a593c7e6bae3699a4b6d65fe937af5603
-Author: Samuel Thibault <samuel.thibault@ens-lyon.org>
-Date:   Sat May 30 18:41:30 2020 +0000
-
-    hurd: add missing include
-    
-    Fixes
-    
-    ../../gdb/gnu-nat.c:2522:14: error: ‘target_gdbarch’ was not declared in this scope; did you mean ‘target_detach’?
-     2522 |    paddress (target_gdbarch (), memaddr), pulongest (len),
-    
-    gdb/Changelog:
-    
-            * gnu-nat.c: Include "gdbarch.h".
-
-diff --git a/gdb/gnu-nat.c b/gdb/gnu-nat.c
-index 3b438a9a43..9b93488b41 100644
---- a/gdb/gnu-nat.c
-+++ b/gdb/gnu-nat.c
-@@ -64,6 +64,7 @@ extern "C"
- #include "language.h"
- #include "target.h"
- #include "gdbsupport/gdb_wait.h"
-+#include "gdbarch.h"
- #include "gdbcmd.h"
- #include "gdbcore.h"
- #include "gdbthread.h"
diff --git a/gnu/packages/patches/gdk-pixbuf-CVE-2020-29385.patch b/gnu/packages/patches/gdk-pixbuf-CVE-2020-29385.patch
deleted file mode 100644
index e6ac4de00b..0000000000
--- a/gnu/packages/patches/gdk-pixbuf-CVE-2020-29385.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-Fix CVE-2020-29385.  Note that we omit the binary test file
-tests/test-images/fail/hang_114.gif from the following commit, to avoid
-requiring 'git' to apply the patch.
-
-
-From bdd3acbd48a575d418ba6bf1b32d7bda2fae1c81 Mon Sep 17 00:00:00 2001
-From: Robert Ancell <robert.ancell@canonical.com>
-Date: Mon, 30 Nov 2020 12:26:12 +1300
-Subject: [PATCH] gif: Fix LZW decoder accepting invalid LZW code.
-
-The code value after a reset wasn't being validated, which means we would
-accept invalid codes. This could cause an infinite loop in the decoder.
-
-Fixes CVE-2020-29385
-
-Fixes https://gitlab.gnome.org/GNOME/gdk-pixbuf/-/issues/164
----
- gdk-pixbuf/lzw.c                    |  13 +++++++------
- tests/test-images/fail/hang_114.gif | Bin 0 -> 5561 bytes
- 2 files changed, 7 insertions(+), 6 deletions(-)
- create mode 100644 tests/test-images/fail/hang_114.gif
-
-diff --git a/gdk-pixbuf/lzw.c b/gdk-pixbuf/lzw.c
-index 9e052a6f7..105daf2b1 100644
---- a/gdk-pixbuf/lzw.c
-+++ b/gdk-pixbuf/lzw.c
-@@ -195,19 +195,20 @@ lzw_decoder_feed (LZWDecoder *self,
-                                 if (self->last_code != self->clear_code && self->code_table_size < MAX_CODES) {
-                                         if (self->code < self->code_table_size)
-                                                 add_code (self, self->code);
--                                        else if (self->code == self->code_table_size)
-+                                        else
-                                                 add_code (self, self->last_code);
--                                        else {
--                                                /* Invalid code received - just stop here */
--                                                self->last_code = self->eoi_code;
--                                                return output_length;
--                                        }
- 
-                                         /* When table is full increase code size */
-                                         if (self->code_table_size == (1 << self->code_size) && self->code_size < LZW_CODE_MAX)
-                                                 self->code_size++;
-                                 }
- 
-+                                /* Invalid code received - just stop here */
-+                                if (self->code >= self->code_table_size) {
-+                                        self->last_code = self->eoi_code;
-+                                        return output_length;
-+                                }
-+
-                                 /* Convert codeword into indexes */
-                                 n_written += write_indexes (self, output + n_written, output_length - n_written);
-                         }
diff --git a/gnu/packages/patches/gdm-default-session.patch b/gnu/packages/patches/gdm-default-session.patch
index 9ab2829cdb..8325b6102b 100644
--- a/gnu/packages/patches/gdm-default-session.patch
+++ b/gnu/packages/patches/gdm-default-session.patch
@@ -4,11 +4,9 @@ and not in the directories listed in $XDG_DATA_DIRS.  The latter includes
 /run/current-system/profile, and only then.
 
 Fixes <https://bugs.gnu.org/37831>.
-
-diff -ur a/daemon/gdm-session.c b/daemon/gdm-session.c
---- a/daemon/gdm-session.c	2019-09-25 10:40:24.000000000 -0400
-+++ b/daemon/gdm-session.c	2020-04-18 18:30:02.671856808 -0400
-@@ -348,24 +348,18 @@
+--- a/daemon/gdm-session.c	2021-07-23 15:16:15.164201000 +0000
++++ b/daemon/gdm-session.c	2021-09-26 08:18:58.730134555 +0000
+@@ -354,25 +354,19 @@
          GArray *search_array = NULL;
          char **search_dirs;
          int i;
@@ -19,22 +17,24 @@ diff -ur a/daemon/gdm-session.c b/daemon/gdm-session.c
                  DMCONFDIR "/Sessions/",
                  DATADIR "/gdm/BuiltInSessions/",
 -                DATADIR "/xsessions/",
-+                "/run/current-system/profile/share/xsessions/"
++                "/run/current-system/profile/share/xsessions/",
          };
  
-         static const char *wayland_search_dir = DATADIR "/wayland-sessions/";
+-        static const char *wayland_search_dir = DATADIR "/wayland-sessions/";
++        static const char *wayland_search_dir = "/run/current-system/profile/share/wayland-sessions/";
  
          search_array = g_array_new (TRUE, TRUE, sizeof (char *));
  
--        for (i = 0; system_data_dirs[i]; i++) {
--                gchar *dir = g_build_filename (system_data_dirs[i], "xsessions", NULL);
--                g_array_append_val (search_array, dir);
--        }
+         if (type == NULL || g_str_equal (type, "x11")) {
+-                for (i = 0; system_data_dirs[i]; i++) {
+-                        gchar *dir = g_build_filename (system_data_dirs[i], "xsessions", NULL);
+-                        g_array_append_val (search_array, dir);
+-                }
 -
-         g_array_append_vals (search_array, x_search_dirs, G_N_ELEMENTS (x_search_dirs));
+                 g_array_append_vals (search_array, x_search_dirs, G_N_ELEMENTS (x_search_dirs));
+         }
  
- #ifdef ENABLE_WAYLAND_SUPPORT
-@@ -373,16 +367,7 @@
+@@ -382,16 +376,7 @@
  #ifdef ENABLE_USER_DISPLAY_SERVER
                  g_array_prepend_val (search_array, wayland_search_dir);
  
@@ -54,7 +54,7 @@ diff -ur a/daemon/gdm-session.c b/daemon/gdm-session.c
 diff -ur a/libgdm/gdm-sessions.c b/libgdm/gdm-sessions.c
 --- a/libgdm/gdm-sessions.c	2019-10-07 04:53:35.000000000 -0400
 +++ b/libgdm/gdm-sessions.c	2020-04-18 18:31:42.491348691 -0400
-@@ -245,19 +245,12 @@
+@@ -245,35 +245,23 @@
                  "/etc/X11/sessions/",
                  DMCONFDIR "/Sessions/",
                  DATADIR "/gdm/BuiltInSessions/",
@@ -75,7 +75,12 @@ diff -ur a/libgdm/gdm-sessions.c b/libgdm/gdm-sessions.c
          for (i = 0; i < G_N_ELEMENTS (xorg_search_dirs); i++) {
                  g_ptr_array_add (xorg_search_array, g_strdup (xorg_search_dirs[i]));
          }
-@@ -269,11 +262,6 @@
+ 
+ #ifdef ENABLE_WAYLAND_SUPPORT
+         const char *wayland_search_dirs[] = {
+-                DATADIR "/wayland-sessions/",
++                "/run/current-system/profile/share/wayland-sessions/",
+         };
  
          wayland_search_array = g_ptr_array_new_with_free_func (g_free);
  
diff --git a/gnu/packages/patches/gdm-elogind-support.patch b/gnu/packages/patches/gdm-elogind-support.patch
new file mode 100644
index 0000000000..39cd12dd22
--- /dev/null
+++ b/gnu/packages/patches/gdm-elogind-support.patch
@@ -0,0 +1,211 @@
+https://gitlab.gnome.org/GNOME/gdm/-/merge_requests/113
+
+From 462cc0f5346f5913cf7151044f1c232c5d21c1c3 Mon Sep 17 00:00:00 2001
+From: Dudemanguy <random342@airmail.cc>
+Date: Mon, 5 Oct 2020 18:41:55 -0500
+Subject: [PATCH] meson: allow building with elogind
+
+Currently, the GDM meson build has a hard dependency on systemd.
+However, GDM can function just fine if one is using elogind. This allows
+a user to build GDM against libelogind and also disable the systemd
+system and user units.
+---
+ common/meson.build                       |  2 +-
+ data/meson.build                         | 62 ++++++++++++++----------
+ data/pam-arch/gdm-launch-environment.pam |  1 +
+ libgdm/meson.build                       |  2 +-
+ meson.build                              | 36 +++++++++-----
+ meson_options.txt                        |  5 +-
+ 6 files changed, 66 insertions(+), 42 deletions(-)
+
+diff --git a/common/meson.build b/common/meson.build
+index 074dd92e1..bca58f7c4 100644
+--- a/common/meson.build
++++ b/common/meson.build
+@@ -11,7 +11,7 @@ libgdmcommon_src = files(
+ )
+ 
+ libgdmcommon_deps = [
+-  libsystemd_dep,
++  logind_dep,
+   gobject_dep,
+   gio_dep,
+   gio_unix_dep,
+diff --git a/data/meson.build b/data/meson.build
+index 7c5222eaf..403336c31 100644
+--- a/data/meson.build
++++ b/data/meson.build
+@@ -168,41 +168,53 @@ else
+   service_config.set('PLYMOUTH_QUIT_SERVICE', '')
+ endif
+ 
+-if get_option('systemdsystemunitdir') != ''
+-  systemd_systemunitdir = get_option('systemdsystemunitdir')
+-else
+-  systemd_systemunitdir = systemd_dep.get_pkgconfig_variable('systemdsystemunitdir')
++systemdsystemunitdir = get_option('systemdsystemunitdir')
++if systemdsystemunitdir != 'no'
++  assert(systemd_dep.found(), 'systemd required but not found, please provide a valid systemd system unit dir or disable it')
++  if get_option('systemdsystemunitdir') != ''
++    systemd_systemunitdir = get_option('systemdsystemunitdir')
++  else
++    systemd_systemunitdir = systemd_dep.get_pkgconfig_variable('systemdsystemunitdir')
++  endif
+ endif
+ 
+-if get_option('systemduserunitdir') != ''
+-  systemd_userunitdir = get_option('systemduserunitdir')
+-else
+-  systemd_userunitdir = systemd_dep.get_pkgconfig_variable('systemduserunitdir',
+-                                                           define_variable: ['prefix', get_option('prefix')])
++systemduserunitdir = get_option('systemduserunitdir')
++if systemduserunitdir != 'no'
++  assert(systemd_dep.found(), 'systemd required but not found, please provide a valid systemd user unit dir or disable it')
++  if get_option('systemduserunitdir') != ''
++    systemd_userunitdir = get_option('systemduserunitdir')
++  else
++    systemd_userunitdir = systemd_dep.get_pkgconfig_variable('systemduserunitdir',
++                                                             define_variable: ['prefix', get_option('prefix')])
++  endif
+ endif
+ 
+-configure_file(
+-  input: 'gdm.service.in',
+-  output: '@BASENAME@',
+-  configuration: service_config,
+-  install_dir: systemd_systemunitdir,
+-  format: 'cmake'
+-)
++if systemdsystemunitdir != 'no'
++  configure_file(
++    input: 'gdm.service.in',
++    output: '@BASENAME@',
++    configuration: service_config,
++    install_dir: systemd_systemunitdir,
++    format: 'cmake'
++  )
++endif
+ 
+ gdm_gnome_session_wanted_targets = []
+ foreach component: gdm_gnome_user_session_wanted_components
+   gdm_gnome_session_wanted_targets += 'Wants=@0@.target'.format(component)
+ endforeach
+ 
+-configure_file(
+-  input: 'session.conf.in',
+-  output: 'session.conf',
+-  configuration: {
+-    'requires_component': gdm_gnome_shell_component,
+-    'wants_required_components': '\n'.join(gdm_gnome_session_wanted_targets),
+-  },
+-  install_dir: systemd_userunitdir / 'gnome-session@gnome-login.target.d',
+-)
++if systemduserunitdir != 'no'
++  configure_file(
++    input: 'session.conf.in',
++    output: 'session.conf',
++    configuration: {
++      'requires_component': gdm_gnome_shell_component,
++      'wants_required_components': '\n'.join(gdm_gnome_session_wanted_targets),
++    },
++    install_dir: systemd_userunitdir / 'gnome-session@gnome-login.target.d',
++  )
++endif
+ 
+ # XSession
+ if get_option('gdm-xsession')
+diff --git a/libgdm/meson.build b/libgdm/meson.build
+index 3f8cafbb7..83e95151b 100644
+--- a/libgdm/meson.build
++++ b/libgdm/meson.build
+@@ -56,7 +56,7 @@ libgdm_deps = [
+   glib_dep,
+   gio_dep,
+   gio_unix_dep,
+-  libsystemd_dep,
++  logind_dep,
+   libgdmcommon_dep,
+ ]
+ 
+diff --git a/meson.build b/meson.build
+index e6fcf4b8b..a86a486b7 100644
+--- a/meson.build
++++ b/meson.build
+@@ -92,21 +92,30 @@ xdmcp_dep = cc.find_library('Xdmcp', required: get_option('xdmcp'))
+ if xdmcp_dep.found() and get_option('tcp-wrappers')
+   libwrap_dep = cc.find_library('libwrap')
+ endif
+-# systemd
+-systemd_dep = dependency('systemd')
+-libsystemd_dep = dependency('libsystemd')
+-if meson.version().version_compare('>= 0.53')
+-  systemd_multiseat_x = find_program('systemd-multi-seat-x',
+-    required: false,
+-    dirs: [
+-      systemd_dep.get_pkgconfig_variable('systemdutildir'),
+-      '/lib/systemd',
+-      '/usr/lib/systemd',
+-    ])
++
++logind_provider = get_option('logind-provider')
++systemd_dep = dependency('systemd', required: false)
++if logind_provider == 'systemd'
++  libsystemd_dep = dependency('libsystemd')
++  logind_dep = libsystemd_dep
++  if meson.version().version_compare('>= 0.53')
++    systemd_multiseat_x = find_program('systemd-multi-seat-x',
++      required: false,
++      dirs: [
++        systemd_dep.get_pkgconfig_variable('systemdutildir'),
++        '/lib/systemd',
++        '/usr/lib/systemd',
++      ])
++  else
++    systemd_multiseat_x = find_program('systemd-multi-seat-x', required: false)
++  endif
++  systemd_x_server = systemd_multiseat_x.found()? systemd_multiseat_x.path() : '/lib/systemd/systemd-multi-seat-x'
+ else
+-  systemd_multiseat_x = find_program('systemd-multi-seat-x', required: false)
++  elogind_dep = dependency('libelogind')
++  logind_dep = elogind_dep
++  systemd_x_server = 'disabled'
+ endif
+-systemd_x_server = systemd_multiseat_x.found()? systemd_multiseat_x.path() : '/lib/systemd/systemd-multi-seat-x'
++
+ # Plymouth
+ plymouth_dep = dependency('ply-boot-client', required: get_option('plymouth'))
+ # Check for Solaris auditing API (ADT)
+@@ -313,6 +322,7 @@ summary({
+     'PAM Syslog': have_pam_syslog,
+     'Supports PAM Extensions': pam_extensions_supported,
+     'SeLinux': libselinux_dep.found(),
++    'Logind Provider': get_option('logind-provider'),
+     'Use GDM Xsession': get_option('gdm-xsession'),
+     'Use UserDisplayServer': get_option('user-display-server'),
+     'Use SystemdJournal': get_option('systemd-journal'),
+diff --git a/meson_options.txt b/meson_options.txt
+index 14e0b908b..5135d7d66 100644
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -12,6 +12,7 @@ option('initial-vt', type: 'integer', value: 1, description: 'Initial virtual te
+ option('ipv6', type: 'boolean', value: false, description: 'Enables compilation of IPv6 code.')
+ option('lang-file', type: 'string', value: '', description: 'File containing default language settings.')
+ option('libaudit', type: 'feature', value: 'auto', description: 'Add Linux audit support.')
++option('logind-provider', type: 'combo', choices: ['systemd', 'elogind'], value: 'systemd', description: 'Which logind library to use.')
+ option('log-dir', type: 'string', value: '/var/log/gdm', description: 'Log directory.')
+ option('pam-mod-dir', type: 'string', value: '', description: 'Directory to install PAM modules in.')
+ option('pam-prefix', type: 'string', value: '', description: 'Specify where PAM files go.')
+@@ -27,8 +28,8 @@ option('solaris', type: 'boolean', value: false, description: 'Build for Solaris
+ option('split-authentication', type: 'boolean', value: true, description: 'Enable multiple simultaneous PAM conversations during login.')
+ option('sysconfsubdir', type: 'string', value: 'gdm', description: 'Directory name used under sysconfdir.')
+ option('systemd-journal', type: 'boolean', value: true, description: 'Use journald support.')
+-option('systemdsystemunitdir', type: 'string', value: '', description: 'Directory for systemd service files.')
+-option('systemduserunitdir', type: 'string', value: '', description: 'Directory for systemd user service files.')
++option('systemdsystemunitdir', type: 'string', value: '', description: 'Directory for systemd service files, or \'no\' to disable.')
++option('systemduserunitdir', type: 'string', value: '', description: 'Directory for systemd user service files, or \'no\' to disable.')
+ option('tcp-wrappers', type: 'boolean', value: false, description: 'Use TCP wrappers.')
+ option('udev-dir', type: 'string', value: '', description: 'Directory for udev rules file.')
+ option('user', type: 'string', value: 'gdm', description: 'GDM\'s username.')
+-- 
+GitLab
+
diff --git a/gnu/packages/patches/gdm-pass-gdk-pixbuf-loader-env.patch b/gnu/packages/patches/gdm-pass-gdk-pixbuf-loader-env.patch
new file mode 100644
index 0000000000..4341e3fc30
--- /dev/null
+++ b/gnu/packages/patches/gdm-pass-gdk-pixbuf-loader-env.patch
@@ -0,0 +1,24 @@
+From 444250fce55f916af993bc855930c6809686e4bd Mon Sep 17 00:00:00 2001
+From: Josselin Poiret <dev@jpoiret.xyz>
+Date: Tue, 23 Nov 2021 18:39:39 +0000
+Subject: [PATCH] Make GDM pass GDK_PIXBUF_MODULE_FILE to sessions
+
+---
+ daemon/gdm-launch-environment.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/daemon/gdm-launch-environment.c b/daemon/gdm-launch-environment.c
+index 14ecfac2..3e618321 100644
+--- a/daemon/gdm-launch-environment.c
++++ b/daemon/gdm-launch-environment.c
+@@ -158,6 +158,7 @@ build_launch_environment (GdmLaunchEnvironment *launch_environment,
+                 "WINDOWPATH",
+                 "XCURSOR_PATH",
+                 "XDG_CONFIG_DIRS",
++                "GDK_PIXBUF_MODULE_FILE",
+                 NULL
+         };
+         char *system_data_dirs;
+-- 
+2.33.1
+
diff --git a/gnu/packages/patches/gdm-remove-hardcoded-xwayland-path.patch b/gnu/packages/patches/gdm-remove-hardcoded-xwayland-path.patch
new file mode 100644
index 0000000000..366fb91668
--- /dev/null
+++ b/gnu/packages/patches/gdm-remove-hardcoded-xwayland-path.patch
@@ -0,0 +1,22 @@
+Remove check for hardcoded Xwayland path in gdm.
+
+---
+ daemon/gdm-local-display-factory.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/daemon/gdm-local-display-factory.c b/daemon/gdm-local-display-factory.c
+index da1093bb..37355c06 100644
+--- a/daemon/gdm-local-display-factory.c
++++ b/daemon/gdm-local-display-factory.c
+@@ -203,7 +203,7 @@ gdm_local_display_factory_use_wayland (void)
+ #ifdef ENABLE_WAYLAND_SUPPORT
+         gboolean wayland_enabled = FALSE;
+         if (gdm_settings_direct_get_boolean (GDM_KEY_WAYLAND_ENABLE, &wayland_enabled)) {
+-                if (wayland_enabled && g_file_test ("/usr/bin/Xwayland", G_FILE_TEST_IS_EXECUTABLE) )
++                if (wayland_enabled)
+                         return TRUE;
+         }
+ #endif
+--
+2.33.0
+
diff --git a/gnu/packages/patches/gdm-wayland-session-wrapper-from-env.patch b/gnu/packages/patches/gdm-wayland-session-wrapper-from-env.patch
new file mode 100644
index 0000000000..44ab6a9471
--- /dev/null
+++ b/gnu/packages/patches/gdm-wayland-session-wrapper-from-env.patch
@@ -0,0 +1,35 @@
+Get wayland-session wrapper from environment.
+
+---
+ daemon/gdm-session.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c
+index 4e303e70..1deca4e9 100644
+--- a/daemon/gdm-session.c
++++ b/daemon/gdm-session.c
+@@ -2888,8 +2888,9 @@ gdm_session_start_session (GdmSession *self,
+                                                            allow_remote_connections? "--allow-remote-connections " : "",
+                                                            command);
+                         } else {
+-                                program = g_strdup_printf (LIBEXECDIR "/gdm-wayland-session %s\"%s\"",
++                                program = g_strdup_printf (LIBEXECDIR "/gdm-wayland-session %s\"%s %s\"",
+                                                            register_session ? "--register-session " : "",
++                                                           g_getenv ("GDM_WAYLAND_SESSION"),
+                                                            command);
+                         }
+                 } else if (run_xsession_script) {
+@@ -2942,8 +2942,9 @@
+                                                            register_session ? "--register-session " : "",
+                                                            self->selected_program);
+                         } else {
+-                                program = g_strdup_printf (LIBEXECDIR "/gdm-wayland-session %s\"dbus-run-session -- %s\"",
++                                program = g_strdup_printf (LIBEXECDIR "/gdm-wayland-session %s\"dbus-run-session -- %s %s\"",
+                                                            register_session ? "--register-session " : "",
++                                                           g_getenv ("GDM_WAYLAND_SESSION"),
+                                                            self->selected_program);
+                         }
+                 } else {
+--
+2.33.0
+
diff --git a/gnu/packages/patches/geary-CVE-2020-24661.patch b/gnu/packages/patches/geary-CVE-2020-24661.patch
deleted file mode 100644
index 6cbc224786..0000000000
--- a/gnu/packages/patches/geary-CVE-2020-24661.patch
+++ /dev/null
@@ -1,133 +0,0 @@
-From d4e86dc91e1d8a940dc40872fe94ef9ac0fed1b5 Mon Sep 17 00:00:00 2001
-From: Michael Gratton <mike@vee.net>
-Date: Tue, 25 Aug 2020 03:54:09 +0000
-Subject: [PATCH] Merge branch 'mjog/866-self-signed-certificates' into
- 'mainline'
-
-Fix invalid certificate pinning when GCR support is unavailable
-
-Closes #866
-
-See merge request GNOME/geary!529
-
-(cherry picked from commit 423a55b00f1dc6bee9dc17e67c0aea6f42387a77)
-
-5088adfe Application.CertificateManager: Rename some methods for clarity
-0d957559 Application.CertificateManager: Check locally pinned certs for equality
----
- .../application-certificate-manager.vala      | 44 +++++++++----------
- 1 file changed, 22 insertions(+), 22 deletions(-)
-
-diff --git a/src/client/application/application-certificate-manager.vala b/src/client/application/application-certificate-manager.vala
-index 4881d73c0..65f6af4fa 100644
---- a/src/client/application/application-certificate-manager.vala
-+++ b/src/client/application/application-certificate-manager.vala
-@@ -381,8 +381,8 @@ private class Application.TlsDatabase : GLib.TlsDatabase {
-         GLib.TlsCertificateFlags ret = this.parent.verify_chain(
-             chain, purpose, identity, interaction, flags, cancellable
-         );
--        if (should_verify(ret, purpose, identity) &&
--            verify(chain, identity, cancellable)) {
-+        if (check_pinned(ret, purpose, identity) &&
-+            is_pinned(chain, identity, cancellable)) {
-             ret = 0;
-         }
-         return ret;
-@@ -399,16 +399,16 @@ private class Application.TlsDatabase : GLib.TlsDatabase {
-         GLib.TlsCertificateFlags ret = yield this.parent.verify_chain_async(
-             chain, purpose, identity, interaction, flags, cancellable
-         );
--        if (should_verify(ret, purpose, identity) &&
--            yield verify_async(chain, identity, cancellable)) {
-+        if (check_pinned(ret, purpose, identity) &&
-+            yield is_pinned_async(chain, identity, cancellable)) {
-             ret = 0;
-         }
-         return ret;
-     }
- 
--    private inline bool should_verify(GLib.TlsCertificateFlags parent_ret,
--                                      string purpose,
--                                      GLib.SocketConnectable? identity) {
-+    private inline bool check_pinned(GLib.TlsCertificateFlags parent_ret,
-+                                     string purpose,
-+                                     GLib.SocketConnectable? identity) {
-         // If the parent didn't verify, check for a locally pinned
-         // cert if it looks like we should, but always reject revoked
-         // certs
-@@ -420,22 +420,22 @@ private class Application.TlsDatabase : GLib.TlsDatabase {
-         );
-     }
- 
--    private bool verify(GLib.TlsCertificate chain,
--                        GLib.SocketConnectable identity,
--                        GLib.Cancellable? cancellable)
-+    private bool is_pinned(GLib.TlsCertificate chain,
-+                           GLib.SocketConnectable identity,
-+                           GLib.Cancellable? cancellable)
-         throws GLib.Error {
--        bool is_verified = false;
-+        bool is_pinned = false;
-         string id = to_name(identity);
-         TrustContext? context = null;
-         lock (this.pinned_certs) {
-             context = this.pinned_certs.get(id);
-             if (context != null) {
--                is_verified = true;
-+                is_pinned = context.certificate.is_same(chain);
-             } else {
-                 // Cert not found in memory, check with GCR if
-                 // enabled.
-                 if (this.use_gcr) {
--                    is_verified = gcr_trust_is_certificate_pinned(
-+                    is_pinned = gcr_trust_is_certificate_pinned(
-                         new Gcr.SimpleCertificate(chain.certificate.data),
-                         GLib.TlsDatabase.PURPOSE_AUTHENTICATE_SERVER,
-                         id,
-@@ -443,7 +443,7 @@ private class Application.TlsDatabase : GLib.TlsDatabase {
-                     );
-                 }
- 
--                if (!is_verified) {
-+                if (!is_pinned) {
-                     // Cert is not pinned in memory or in GCR, so look
-                     // for it on disk. Do this even if GCR support is
-                     // enabled, since if the cert was previously saved
-@@ -453,7 +453,7 @@ private class Application.TlsDatabase : GLib.TlsDatabase {
-                             this.store_dir, id, cancellable
-                         );
-                         this.pinned_certs.set(id, context);
--                        is_verified = true;
-+                        is_pinned = context.certificate.is_same(chain);
-                     } catch (GLib.IOError.NOT_FOUND err) {
-                         // Cert was not found saved, so it not pinned
-                     } catch (GLib.Error err) {
-@@ -465,18 +465,18 @@ private class Application.TlsDatabase : GLib.TlsDatabase {
-                 }
-             }
-         }
--        return is_verified;
-+        return is_pinned;
-     }
- 
--    private async bool verify_async(GLib.TlsCertificate chain,
--                                    GLib.SocketConnectable identity,
--                                    GLib.Cancellable? cancellable)
-+    private async bool is_pinned_async(GLib.TlsCertificate chain,
-+                                       GLib.SocketConnectable identity,
-+                                       GLib.Cancellable? cancellable)
-         throws GLib.Error {
--        bool is_valid = false;
-+        bool pinned = false;
-         yield Geary.Nonblocking.Concurrent.global.schedule_async(() => {
--                is_valid = verify(chain, identity, cancellable);
-+                pinned = is_pinned(chain, identity, cancellable);
-             }, cancellable);
--        return is_valid;
-+        return pinned;
-     }
- 
-     private TrustContext? lookup_id(string id) {
--- 
-GitLab
-
diff --git a/gnu/packages/patches/geeqie-clutter.patch b/gnu/packages/patches/geeqie-clutter.patch
new file mode 100644
index 0000000000..ab7cc957d8
--- /dev/null
+++ b/gnu/packages/patches/geeqie-clutter.patch
@@ -0,0 +1,35 @@
+From c99084ac5fc2fb854ff8e8abd4bd3298fb08fb43 Mon Sep 17 00:00:00 2001
+From: Colin Clark <colin.clark@cclark.uk>
+Date: Sat, 9 Jan 2021 11:35:41 +0000
+Subject: [PATCH] Fix #829: segfault with clutter-gtk
+
+https://github.com/BestImageViewer/geeqie/issues/829
+
+This fix might cause other problems which might be cured by calling:
+LIBGL_ALWAYS_INDIRECT=1 geeqie
+
+or, worst case:
+geeqie --disable-clutter
+---
+ src/main.c | 5 -----
+ 1 file changed, 5 deletions(-)
+
+diff --git a/src/main.c b/src/main.c
+index f497240d..4af654fe 100644
+--- a/src/main.c
++++ b/src/main.c
+@@ -904,11 +904,6 @@ gint main(gint argc, gchar *argv[])
+ #ifdef HAVE_GTHREAD
+ #if !GLIB_CHECK_VERSION(2,32,0)
+ 	g_thread_init(NULL);
+-#endif
+-#ifdef HAVE_CLUTTER
+-/* FIXME: see below */
+-	putenv("LIBGL_ALWAYS_INDIRECT=1");
+-	XInitThreads();
+ #endif
+ 	gdk_threads_init();
+ 	gdk_threads_enter();
+-- 
+2.34.0
+
diff --git a/gnu/packages/patches/genimage-mke2fs-test.patch b/gnu/packages/patches/genimage-mke2fs-test.patch
new file mode 100644
index 0000000000..5d4fbcfe44
--- /dev/null
+++ b/gnu/packages/patches/genimage-mke2fs-test.patch
@@ -0,0 +1,40 @@
+diff --git a/test/mke2fs.dump b/test/mke2fs.dump
+index 8e63662..0c25798 100644
+--- a/test/mke2fs.0.dump
++++ b/test/mke2fs.0.dump
+@@ -11,7 +11,7 @@
+ Inode count:              8192
+ Block count:              32768
+ Reserved block count:     1638
+-Free blocks:              26568
++Free blocks:              26566
+ Free inodes:              8141
+ First block:              1
+ Block size:               1024
+@@ -29,7 +29,7 @@
+ Maximum mount count:      -1
+ Last checked:             Sat Jan  1 00:00:00 2000
+ Check interval:           0 (<none>)
+-Lifetime writes:          141 kB
++Lifetime writes:          143 kB
+ Reserved blocks uid:      0 (user root)
+ Reserved blocks gid:      0 (group root)
+ First inode:              11
+@@ -51,13 +51,13 @@
+ Journal start:            0
+ 
+ 
+-Group 0: (Blocks 1-8192) csum 0x74a0 [ITABLE_ZEROED]
++Group 0: (Blocks 1-8192) csum 0x3f30 [ITABLE_ZEROED]
+   Primary superblock at 1, Group descriptors at 2-2
+-  Block bitmap at 3 (+2), csum 0x16cec4db
++  Block bitmap at 3 (+2), csum 0x8d67cdef
+   Inode bitmap at 7 (+6), csum 0xb1052088
+   Inode table at 11-522 (+10)
+-  6093 free blocks, 1997 free inodes, 18 directories, 1997 unused inodes
+-  Free blocks: 2100-8192
++  6091 free blocks, 1997 free inodes, 18 directories, 1997 unused inodes
++  Free blocks: 2102-8192
+   Free inodes: 52-2048
+ Group 1: (Blocks 8193-16384) csum 0x8fde [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
+   Backup superblock at 8193, Group descriptors at 8194-8194
diff --git a/gnu/packages/patches/genimage-signedness.patch b/gnu/packages/patches/genimage-signedness.patch
deleted file mode 100644
index 2204dfb545..0000000000
--- a/gnu/packages/patches/genimage-signedness.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-commit 6574665f9d6c0757e8f55ccb465afbcaa90bf019
-Author: Timotej Lazar <timotej.lazar@araneo.si>
-Date:   Wed Aug 19 19:36:02 2020 +0200
-
-    test: normalize flags reported by dumpe2fs
-    
-    Filesystem flags depend on the system – usually signed_directory_hash,
-    but unsigned_directory_hash at least on arm64.
-    
-    Signed-off-by: Timotej Lazar <timotej.lazar@araneo.si>
-
-diff --git a/test/basic-images.test b/test/basic-images.test
-index f6685e1..cb104c3 100755
---- a/test/basic-images.test
-+++ b/test/basic-images.test
-@@ -158,6 +158,8 @@ check_ext() {
- 	# format change
- 	csum2="Group 0: (Blocks 1-4095) \\[ITABLE_ZEROED\\]\|  Checksum .*, unused inodes 205"
- 	dumpe2fs "${1}" | grep -v "^\($uuid\|$seed\|$csum1\|$csum2\)" > "dump" &&
-+	# some architectures (including arm64) use unsigned char
-+	sed -i 's/un\(signed_directory_hash\)/\1/' "dump" &&
- 	# fixup for ext3 journal size with old tune2fs
- 	sed -i 's/^\(Journal size:             \)1029k$/\11024k/' "dump" &&
- 	# output format changed with some version
diff --git a/gnu/packages/patches/ghc-diff-swap-cover-args.patch b/gnu/packages/patches/ghc-diff-swap-cover-args.patch
deleted file mode 100644
index 724416ff7a..0000000000
--- a/gnu/packages/patches/ghc-diff-swap-cover-args.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-The QuickCheck library swapped the order of the arguments of the 'cover'
-function in version 2.12.  Version 0.3.4 of the Diff library still uses
-the old argument order.  Swapping the argument order makes Diff work
-with newer versions of QuickCheck.
-
-See <https://github.com/commercialhaskell/stackage/issues/4289> for the
-upstream bug report.
-
-diff -ruN a/test/Test.hs b/test/Test.hs
---- a/test/Test.hs	2016-04-23 01:21:45.000000000 -0400
-+++ b/test/Test.hs	2019-11-01 19:13:04.590770903 -0400
-@@ -134,7 +134,7 @@
- prop_ppDiffR (DiffInput le ri) =
-     let haskDiff=ppDiff $ getGroupedDiff le ri
-         utilDiff= unsafePerformIO (runDiff (unlines le) (unlines ri))
--    in  cover (haskDiff == utilDiff) 90 "exact match" $
-+    in  cover 90 (haskDiff == utilDiff) "exact match" $
-                 classify (haskDiff == utilDiff) "exact match"
-                         (div ((length haskDiff)*100) (length utilDiff) < 110) -- less than 10% bigger
-     where
diff --git a/gnu/packages/patches/ghc-haddock-api-fix-haddock.patch b/gnu/packages/patches/ghc-haddock-api-fix-haddock.patch
deleted file mode 100644
index 927cb5b366..0000000000
--- a/gnu/packages/patches/ghc-haddock-api-fix-haddock.patch
+++ /dev/null
@@ -1,54 +0,0 @@
-This patch is taken from upstream.  It fixes documentation generation.
-The patch has been lightly adapted to apply to the release tarball, but
-the commit message was left untouched, so it refers to some changes not
-included in the patch.
-
-From 0d9a81e20238a6b72f9f5c005f1f7e9cf05f6fb9 Mon Sep 17 00:00:00 2001
-From: Alec Theriault <alec.theriault@gmail.com>
-Date: Sat, 27 Oct 2018 10:05:04 -0700
-Subject: [PATCH] Fix documentation in `haddock-api` (#957)
-
-* Fix misplaced Haddocks in Haddock itself
-
-Haddock should be able to generate documentation for 'haddock-api'
-again.
-
-* Make CI check that documentation can be built.
-
-* Add back a doc that is OK
----
- .travis.yml                               |  3 +++
- haddock-api/src/Haddock/Backends/LaTeX.hs | 10 +++++-----
- 2 files changed, 8 insertions(+), 5 deletions(-)
-
-diff --git a/src/Haddock/Backends/LaTeX.hs b/src/Haddock/Backends/LaTeX.hs
-index 4e0e6eba..613c6deb 100644
---- a/src/Haddock/Backends/LaTeX.hs
-+++ b/src/Haddock/Backends/LaTeX.hs
-@@ -243,8 +243,8 @@ ppDocGroup lev doc = sec lev <> braces doc
- 
- -- | Given a declaration, extract out the names being declared
- declNames :: LHsDecl DocNameI
--          -> ( LaTeX           -- ^ to print before each name in an export list
--             , [DocName]       -- ^ names being declared
-+          -> ( LaTeX           --   to print before each name in an export list
-+             , [DocName]       --   names being declared
-              )
- declNames (L _ decl) = case decl of
-   TyClD _ d  -> (empty, [tcdName d])
-@@ -444,9 +444,9 @@ ppLPatSig doc docnames ty unicode
- -- arguments as needed.
- ppTypeOrFunSig :: HsType DocNameI
-                -> DocForDecl DocName  -- ^ documentation
--               -> ( LaTeX             -- ^ first-line (no-argument docs only)
--                  , LaTeX             -- ^ first-line (argument docs only)
--                  , LaTeX             -- ^ type prefix (argument docs only)
-+               -> ( LaTeX             --   first-line (no-argument docs only)
-+                  , LaTeX             --   first-line (argument docs only)
-+                  , LaTeX             --   type prefix (argument docs only)
-                   )
-                -> Bool                -- ^ unicode
-                -> LaTeX
--- 
-2.23.0
-
diff --git a/gnu/packages/patches/ghc-hpack-fix-tests.patch b/gnu/packages/patches/ghc-hpack-fix-tests.patch
deleted file mode 100644
index 19aa762174..0000000000
--- a/gnu/packages/patches/ghc-hpack-fix-tests.patch
+++ /dev/null
@@ -1,193 +0,0 @@
-This patch is taken and adapted from upstream.  It landed shortly after
-the release of 0.31.2, and fixes eleven tests.  The patch has been
-lightly adapted to apply to the release tarball, but the commit message
-was left untouched, so it refers to some changes not included in the
-patch.
-
-From a8d9362d4b686074f698c04c20beea88587511a1 Mon Sep 17 00:00:00 2001
-From: quasicomputational <quasicomputational@gmail.com>
-Date: Sat, 1 Jun 2019 15:11:31 +0100
-Subject: [PATCH] Make CI green (#345)
-
-* AppVeyor workaround for TMP issue
-
-https://github.com/commercialhaskell/stack/issues/3944
-
-* Bump resolver to nightly-2018-12-12.
-
-This has the primary benefit of moving to GHC 8.6.3 and should fix
-AppVeyor.
-
-* Add clock 0.8 as an extra-dep.
-
-* Adapt expected output to aeson 1.4.3.0.
----
- appveyor.yml                            |  3 +++
- hpack.cabal                             | 10 +++++-----
- package.yaml                            |  2 +-
- stack.yaml                              |  5 +++--
- test/Data/Aeson/Config/FromValueSpec.hs |  2 +-
- test/Data/Aeson/Config/TypesSpec.hs     |  2 +-
- test/EndToEndSpec.hs                    |  8 ++++----
- test/Hpack/ConfigSpec.hs                |  2 +-
- test/Hpack/Syntax/DefaultsSpec.hs       |  2 +-
- test/Hpack/Syntax/DependenciesSpec.hs   |  4 ++--
- 10 files changed, 22 insertions(+), 18 deletions(-)
-
-diff --git a/hpack.cabal b/hpack.cabal
-index fedb9a8..4db3014 100644
---- a/hpack.cabal
-+++ b/hpack.cabal
-@@ -1,10 +1,10 @@
- cabal-version: 1.12
- 
---- This file has been generated from package.yaml by hpack version 0.31.0.
-+-- This file has been generated from package.yaml by hpack version 0.31.2.
- --
- -- see: https://github.com/sol/hpack
- --
---- hash: 3d060180293c32b8d0c25b710d0f419e96a6cc6ec3f95ac5e70bb77f44cbafc3
-+-- hash: bd5dd178c7e9f7f7a3456d79b592ea336c41ef43c9892354c001f06659e8b901
- 
- name:           hpack
- version:        0.31.2
-@@ -31,7 +31,7 @@ library
-   build-depends:
-       Cabal >=2.2
-     , Glob >=0.9.0
--    , aeson >=1.2.1.0
-+    , aeson >=1.4.3.0
-     , base >=4.9 && <5
-     , bifunctors
-     , bytestring
-@@ -87,7 +87,7 @@ executable hpack
-   build-depends:
-       Cabal >=2.2
-     , Glob >=0.9.0
--    , aeson >=1.2.1.0
-+    , aeson >=1.4.3.0
-     , base >=4.9 && <5
-     , bifunctors
-     , bytestring
-@@ -125,7 +125,7 @@ test-suite spec
-     , Glob >=0.9.0
-     , HUnit >=1.6.0.0
-     , QuickCheck
--    , aeson >=1.2.1.0
-+    , aeson >=1.4.3.0
-     , base >=4.9 && <5
-     , bifunctors
-     , bytestring
-diff --git a/test/Data/Aeson/Config/FromValueSpec.hs b/test/Data/Aeson/Config/FromValueSpec.hs
-index 33de8b7..06b3eb9 100644
---- a/test/Data/Aeson/Config/FromValueSpec.hs
-+++ b/test/Data/Aeson/Config/FromValueSpec.hs
-@@ -85,7 +85,7 @@ spec = do
-         [yaml|
-         name: "Joe"
-         age: "23"
--        |] `shouldDecodeTo` left "Error while parsing $.age - expected Int, encountered String"
-+        |] `shouldDecodeTo` left "Error while parsing $.age - parsing Int failed, expected Number, but encountered String"
- 
-     context "with (,)" $ do
-       it "captures unrecognized fields" $ do
-diff --git a/test/Data/Aeson/Config/TypesSpec.hs b/test/Data/Aeson/Config/TypesSpec.hs
-index c954534..472aa42 100644
---- a/test/Data/Aeson/Config/TypesSpec.hs
-+++ b/test/Data/Aeson/Config/TypesSpec.hs
-@@ -13,7 +13,7 @@ spec = do
-     context "List" $ do
-       let
-         parseError :: String -> Result (List Int)
--        parseError prefix = Left (prefix ++ " - expected Int, encountered String")
-+        parseError prefix = Left (prefix ++ " - parsing Int failed, expected Number, but encountered String")
- 
-       context "when parsing single values" $ do
-         it "returns the value in a singleton list" $ do
-diff --git a/test/EndToEndSpec.hs b/test/EndToEndSpec.hs
-index 283c72c..46389ea 100644
---- a/test/EndToEndSpec.hs
-+++ b/test/EndToEndSpec.hs
-@@ -285,7 +285,7 @@ spec = around_ (inTempDirectoryNamed "foo") $ do
-           path: defaults.yaml
-           ref: "2017"
-         library: {}
--        |] `shouldFailWith` (file ++ ": Error while parsing $ - expected Object, encountered Array")
-+        |] `shouldFailWith` (file ++ ": Error while parsing $ - expected Object, but encountered Array")
- 
-       it "warns on unknown fields" $ do
-         let file = joinPath ["defaults", "sol", "hpack-template", "2017", "defaults.yaml"]
-@@ -340,7 +340,7 @@ spec = around_ (inTempDirectoryNamed "foo") $ do
-       it "rejects other values" $ do
-         [i|
-         version: {}
--        |] `shouldFailWith` "package.yaml: Error while parsing $.version - expected Number or String, encountered Object"
-+        |] `shouldFailWith` "package.yaml: Error while parsing $.version - expected Number or String, but encountered Object"
- 
-     describe "license" $ do
-       it "accepts cabal-style licenses" $ do
-@@ -1363,14 +1363,14 @@ spec = around_ (inTempDirectoryNamed "foo") $ do
-             then:
-               dependencies: Win32
-             else: null
--          |] `shouldFailWith` "package.yaml: Error while parsing $.when.else - expected Object, encountered Null"
-+          |] `shouldFailWith` "package.yaml: Error while parsing $.when.else - expected Object, but encountered Null"
- 
-         it "rejects invalid conditionals" $ do
-           [i|
-             dependencies:
-               - foo
-               - 23
--          |] `shouldFailWith` "package.yaml: Error while parsing $.dependencies[1] - expected Object or String, encountered Number"
-+          |] `shouldFailWith` "package.yaml: Error while parsing $.dependencies[1] - expected Object or String, but encountered Number"
- 
-         it "warns on unknown fields" $ do
-           [i|
-diff --git a/test/Hpack/ConfigSpec.hs b/test/Hpack/ConfigSpec.hs
-index 9f4b279..69cbea1 100644
---- a/test/Hpack/ConfigSpec.hs
-+++ b/test/Hpack/ConfigSpec.hs
-@@ -675,7 +675,7 @@ spec = do
-       it "rejects other values" $ do
-         [yaml|
-         23
--        |] `shouldDecodeTo` (Left "Error while parsing $ - expected Boolean or String, encountered Number" :: Result Cond)
-+        |] `shouldDecodeTo` (Left "Error while parsing $ - expected Boolean or String, but encountered Number" :: Result Cond)
- 
-   describe "formatOrList" $ do
-     it "formats a singleton list" $ do
-diff --git a/test/Hpack/Syntax/DefaultsSpec.hs b/test/Hpack/Syntax/DefaultsSpec.hs
-index 5875413..5438b7a 100644
---- a/test/Hpack/Syntax/DefaultsSpec.hs
-+++ b/test/Hpack/Syntax/DefaultsSpec.hs
-@@ -151,4 +151,4 @@ spec = do
-         it "fails" $ do
-           [yaml|
-           10
--          |] `shouldDecodeTo` left "Error while parsing $ - expected Object or String, encountered Number"
-+          |] `shouldDecodeTo` left "Error while parsing $ - expected Object or String, but encountered Number"
-diff --git a/test/Hpack/Syntax/DependenciesSpec.hs b/test/Hpack/Syntax/DependenciesSpec.hs
-index 1a83732..d95044f 100644
---- a/test/Hpack/Syntax/DependenciesSpec.hs
-+++ b/test/Hpack/Syntax/DependenciesSpec.hs
-@@ -125,7 +125,7 @@ spec = do
-         it "rejects invalid values" $ do
-           [yaml|
-             hpack: []
--          |] `shouldDecodeTo` left "Error while parsing $.hpack - expected Null, Object, Number, or String, encountered Array"
-+          |] `shouldDecodeTo` left "Error while parsing $.hpack - expected Null, Object, Number, or String, but encountered Array"
- 
-         context "when the constraint is a Number" $ do
-           it "accepts 1" $ do
-@@ -213,7 +213,7 @@ spec = do
-               [yaml|
-                 foo:
-                   version: {}
--              |] `shouldDecodeTo` left "Error while parsing $.foo.version - expected Null, Number, or String, encountered Object"
-+              |] `shouldDecodeTo` left "Error while parsing $.foo.version - expected Null, Number, or String, but encountered Object"
- 
-             it "accepts a string" $ do
-               [yaml|
--- 
-2.23.0
-
diff --git a/gnu/packages/patches/ghc-language-haskell-extract-ghc-8.10.patch b/gnu/packages/patches/ghc-language-haskell-extract-ghc-8.10.patch
new file mode 100644
index 0000000000..a1358dec94
--- /dev/null
+++ b/gnu/packages/patches/ghc-language-haskell-extract-ghc-8.10.patch
@@ -0,0 +1,27 @@
+Compatibility with GHC 8.10 and template-haskell 2.16.
+
+Taken from 
+https://raw.githubusercontent.com/archlinux/svntogit-community/packages/haskell-language-haskell-extract/trunk/ghc-8.10.patch
+
+diff --git a/src/Language/Haskell/Extract.hs b/src/Language/Haskell/Extract.hs
+index 3e8958b..43dfe04 100644
+--- a/src/Language/Haskell/Extract.hs
++++ b/src/Language/Haskell/Extract.hs
+@@ -1,3 +1,4 @@
++{-# LANGUAGE CPP #-}
+ module Language.Haskell.Extract (
+   functionExtractor,
+   functionExtractorMap,
+@@ -25,7 +26,11 @@ extractAllFunctions pattern =
+ functionExtractor :: String -> ExpQ
+ functionExtractor pattern =
+   do functions <- extractAllFunctions pattern
+-     let makePair n = TupE [ LitE $ StringL n , VarE $ mkName n]
++     let makePair n = TupE
++#if MIN_VERSION_template_haskell(2,16,0)
++                           $ map Just
++#endif
++                           [ LitE $ StringL n , VarE $ mkName n]
+      return $ ListE $ map makePair functions
+ 
+ 
diff --git a/gnu/packages/patches/ghc-microlens-aeson-fix-tests.patch b/gnu/packages/patches/ghc-microlens-aeson-fix-tests.patch
deleted file mode 100644
index c1ef6a837c..0000000000
--- a/gnu/packages/patches/ghc-microlens-aeson-fix-tests.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-This patch fixes the test suite to allow any order when listing the
-members of a JSON object.  Aeson (being true to the JSON specification)
-does not specify an order for objects.  In practice, the order depends
-on your processor architecture.
-
-See <https://github.com/bos/aeson/issues/568> for a discussion resulting
-in a similar patch fixing the Aeson tests.
-
-See <https://github.com/fosskers/microlens-aeson/issues/1> for the
-upstream bug report.
-
-diff -ruN a/test/Test.hs b/test/Test.hs
---- a/test/Test.hs	2018-12-31 15:10:50.000000000 -0500
-+++ b/test/Test.hs	2019-11-08 01:34:07.419706831 -0500
-@@ -48,8 +48,10 @@
-     , testCase "" $ ("{\"a\": {}, \"b\": null}" ^? key (T.pack "b") . _Object) @?= Nothing
-     , testCase "" $ ("{\"a\": 100, \"b\": 200}" ^? key (T.pack "a")) @?= Just (Number 100.0)
-     , testCase "" $ ("[1,2,3]" ^? key (T.pack "a")) @?= Nothing
--    , testCase "" $ ("{\"a\": 4, \"b\": 7}" ^.. members) @?= [Number 4.0,Number 7.0]
--    , testCase "" $ ("{\"a\": 4, \"b\": 7}" & members . _Number %~ (* 10)) @?= "{\"a\":40,\"b\":70}"
-+    , testCase "" $ assertBool "" (let x = ("{\"a\": 4, \"b\": 7}" ^.. members)
-+                                   in x == [Number 4.0,Number 7.0] || x == [Number 7.0,Number 4.0])
-+    , testCase "" $ assertBool "" (let x = ("{\"a\": 4, \"b\": 7}" & members . _Number %~ (* 10))
-+                                   in x == "{\"a\":40,\"b\":70}" || x == "{\"b\":70,\"a\":40}")
-     , testCase "" $ ("[1,2,3]" ^? nth 1) @?= Just (Number 2.0)
-     , testCase "" $ ("{\"a\": 100, \"b\": 200}" ^? nth 1) @?= Nothing
-     , testCase "" $ ("[1,2,3]" & nth 1 .~ Number 20) @?= "[1,20,3]"
diff --git a/gnu/packages/patches/ghc-pandoc-fix-html-tests.patch b/gnu/packages/patches/ghc-pandoc-fix-html-tests.patch
deleted file mode 100644
index b624ff9e9e..0000000000
--- a/gnu/packages/patches/ghc-pandoc-fix-html-tests.patch
+++ /dev/null
@@ -1,92 +0,0 @@
-This patch is taken from upstream.  It fixes two HTML tests that are broken
-due to using a Skylighting version greater than or equal to 0.8.2.
-
-From 968d2046a3cb6db661673be580660ac402753c34 Mon Sep 17 00:00:00 2001
-From: John MacFarlane <jgm@berkeley.edu>
-Date: Sun, 14 Jul 2019 10:48:14 -0700
-Subject: [PATCH] Update test for new skylighting.
-
----
- test/lhs-test.html     | 13 ++++++-------
- test/lhs-test.html+lhs | 13 ++++++-------
- 2 files changed, 12 insertions(+), 14 deletions(-)
-
-diff --git a/test/lhs-test.html b/test/lhs-test.html
-index 6685555f4..446dd3d95 100644
---- a/test/lhs-test.html
-+++ b/test/lhs-test.html
-@@ -12,19 +12,18 @@
-       div.column{display: inline-block; vertical-align: top; width: 50%;}
-   </style>
-   <style>
--code.sourceCode > span { display: inline-block; line-height: 1.25; }
-+pre > code.sourceCode { white-space: pre; position: relative; }
-+pre > code.sourceCode > span { display: inline-block; line-height: 1.25; }
-+pre > code.sourceCode > span:empty { height: 1.2em; }
- code.sourceCode > span { color: inherit; text-decoration: inherit; }
--code.sourceCode > span:empty { height: 1.2em; }
--.sourceCode { overflow: visible; }
--code.sourceCode { white-space: pre; position: relative; }
- div.sourceCode { margin: 1em 0; }
- pre.sourceCode { margin: 0; }
- @media screen {
- div.sourceCode { overflow: auto; }
- }
- @media print {
--code.sourceCode { white-space: pre-wrap; }
--code.sourceCode > span { text-indent: -5em; padding-left: 5em; }
-+pre > code.sourceCode { white-space: pre-wrap; }
-+pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; }
- }
- pre.numberSource code
-   { counter-reset: source-line 0; }
-@@ -44,7 +43,7 @@ pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa;  padding-le
- div.sourceCode
-   {   }
- @media screen {
--code.sourceCode > span > a:first-child::before { text-decoration: underline; }
-+pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
- }
- code span.al { color: #ff0000; font-weight: bold; } /* Alert */
- code span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
-diff --git a/test/lhs-test.html+lhs b/test/lhs-test.html+lhs
-index e57dfc105..a5cdb0245 100644
---- a/test/lhs-test.html+lhs
-+++ b/test/lhs-test.html+lhs
-@@ -12,19 +12,18 @@
-       div.column{display: inline-block; vertical-align: top; width: 50%;}
-   </style>
-   <style>
--code.sourceCode > span { display: inline-block; line-height: 1.25; }
-+pre > code.sourceCode { white-space: pre; position: relative; }
-+pre > code.sourceCode > span { display: inline-block; line-height: 1.25; }
-+pre > code.sourceCode > span:empty { height: 1.2em; }
- code.sourceCode > span { color: inherit; text-decoration: inherit; }
--code.sourceCode > span:empty { height: 1.2em; }
--.sourceCode { overflow: visible; }
--code.sourceCode { white-space: pre; position: relative; }
- div.sourceCode { margin: 1em 0; }
- pre.sourceCode { margin: 0; }
- @media screen {
- div.sourceCode { overflow: auto; }
- }
- @media print {
--code.sourceCode { white-space: pre-wrap; }
--code.sourceCode > span { text-indent: -5em; padding-left: 5em; }
-+pre > code.sourceCode { white-space: pre-wrap; }
-+pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; }
- }
- pre.numberSource code
-   { counter-reset: source-line 0; }
-@@ -44,7 +43,7 @@ pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa;  padding-le
- div.sourceCode
-   {   }
- @media screen {
--code.sourceCode > span > a:first-child::before { text-decoration: underline; }
-+pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
- }
- code span.al { color: #ff0000; font-weight: bold; } /* Alert */
- code span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
--- 
-2.23.0
-
diff --git a/gnu/packages/patches/ghc-pandoc-fix-latex-test.patch b/gnu/packages/patches/ghc-pandoc-fix-latex-test.patch
deleted file mode 100644
index b38476882d..0000000000
--- a/gnu/packages/patches/ghc-pandoc-fix-latex-test.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-This patch is taken from upstream.  It fixes a LaTeX test that is broken due
-to using a Skylighting version greater than or equal to 0.8.1.1.
-
-From 2cd1c7b30f200d18f1f1bdef1671369e1ad303ed Mon Sep 17 00:00:00 2001
-From: John MacFarlane <jgm@berkeley.edu>
-Date: Thu, 13 Jun 2019 19:33:52 -0700
-Subject: [PATCH] Update test for skylighting 0.8.1.1.
-
----
- test/lhs-test.latex | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/test/lhs-test.latex b/test/lhs-test.latex
-index 0442db5ca..a456995a3 100644
---- a/test/lhs-test.latex
-+++ b/test/lhs-test.latex
-@@ -94,9 +94,9 @@ return a single value:
- 
- \begin{Shaded}
- \begin{Highlighting}[]
--\OtherTok{unsplit ::}\NormalTok{ (}\DataTypeTok{Arrow}\NormalTok{ a) }\OtherTok{=>}\NormalTok{ (b }\OtherTok{->}\NormalTok{ c }\OtherTok{->}\NormalTok{ d) }\OtherTok{->}\NormalTok{ a (b, c) d}
-+\OtherTok{unsplit ::}\NormalTok{ (}\DataTypeTok{Arrow}\NormalTok{ a) }\OtherTok{=>}\NormalTok{ (b }\OtherTok{{-}>}\NormalTok{ c }\OtherTok{{-}>}\NormalTok{ d) }\OtherTok{{-}>}\NormalTok{ a (b, c) d}
- \NormalTok{unsplit }\OtherTok{=}\NormalTok{ arr }\OperatorTok{.} \FunctionTok{uncurry}
--          \CommentTok{-- arr (\textbackslash{}op (x,y) -> x `op` y)}
-+          \CommentTok{{-}{-} arr (\textbackslash{}op (x,y) {-}> x \textasciigrave{}op\textasciigrave{} y)}
- \end{Highlighting}
- \end{Shaded}
- 
--- 
-2.23.0
-
diff --git a/gnu/packages/patches/ghostscript-CVE-2020-15900.patch b/gnu/packages/patches/ghostscript-CVE-2020-15900.patch
deleted file mode 100644
index b6658d7c7f..0000000000
--- a/gnu/packages/patches/ghostscript-CVE-2020-15900.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-Fix CVE-2020-15900.
-
-https://cve.circl.lu/cve/CVE-2020-15900
-https://artifex.com/security-advisories/CVE-2020-15900
-
-Taken from upstream:
-https://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5d499272b95a6b890a1397e11d20937de000d31b
-
-diff --git a/psi/zstring.c b/psi/zstring.c
---- a/psi/zstring.c
-+++ b/psi/zstring.c
-@@ -142,13 +142,18 @@ search_impl(i_ctx_t *i_ctx_p, bool forward)
-     return 0;
- found:
-     op->tas.type_attrs = op1->tas.type_attrs;
--    op->value.bytes = ptr;
--    r_set_size(op, size);
-+    op->value.bytes = ptr;				/* match */
-+    op->tas.rsize = size;				/* match */
-     push(2);
--    op[-1] = *op1;
--    r_set_size(op - 1, ptr - op[-1].value.bytes);
--    op1->value.bytes = ptr + size;
--    r_set_size(op1, count + (!forward ? (size - 1) : 0));
-+    op[-1] = *op1;					/* pre */
-+    op[-3].value.bytes = ptr + size;			/* post */
-+    if (forward) {
-+        op[-1].tas.rsize = ptr - op[-1].value.bytes;	/* pre */
-+        op[-3].tas.rsize = count;			/* post */
-+    } else {
-+        op[-1].tas.rsize = count;			/* pre */
-+        op[-3].tas.rsize -= count + size;		/* post */
-+    }
-     make_true(op);
-     return 0;
- }
diff --git a/gnu/packages/patches/ghostscript-freetype-compat.patch b/gnu/packages/patches/ghostscript-freetype-compat.patch
deleted file mode 100644
index cc225b5ad6..0000000000
--- a/gnu/packages/patches/ghostscript-freetype-compat.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-Fix build with FreeType 2.10.3 and newer.
-
-Taken from upstream:
-https://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=41ef9a0bc36b9db7115fbe9623f989bfb47bbade
-
-diff --git a/base/fapi_ft.c b/base/fapi_ft.c
---- a/base/fapi_ft.c
-+++ b/base/fapi_ft.c
-@@ -125,7 +125,7 @@ static void
- delete_inc_int_info(gs_fapi_server * a_server,
-                     FT_IncrementalRec * a_inc_int_info);
- 
--FT_CALLBACK_DEF(void *)
-+static void *
- FF_alloc(FT_Memory memory, long size)
- {
-     gs_memory_t *mem = (gs_memory_t *) memory->user;
-@@ -133,7 +133,7 @@ FF_alloc(FT_Memory memory, long size)
-     return (gs_malloc(mem, size, 1, "FF_alloc"));
- }
- 
--FT_CALLBACK_DEF(void *)
-+static void *
-     FF_realloc(FT_Memory memory, long cur_size, long new_size, void *block)
- {
-     gs_memory_t *mem = (gs_memory_t *) memory->user;
-@@ -153,7 +153,7 @@ FT_CALLBACK_DEF(void *)
-     return (tmp);
- }
- 
--FT_CALLBACK_DEF(void)
-+static void
-     FF_free(FT_Memory memory, void *block)
- {
-     gs_memory_t *mem = (gs_memory_t *) memory->user;
diff --git a/gnu/packages/patches/ghostscript-no-header-creationdate.patch b/gnu/packages/patches/ghostscript-no-header-creationdate.patch
index 92ddbdade0..b19f3ab5d9 100644
--- a/gnu/packages/patches/ghostscript-no-header-creationdate.patch
+++ b/gnu/packages/patches/ghostscript-no-header-creationdate.patch
@@ -20,3 +20,25 @@ index 0fb067e..b342e2c 100644
      {
          struct tm tms;
          time_t t;
+--- orig/gnu-ghostscript-9.14.0/devices/vector/gdevpdfe.c
++++ gnu-ghostscript-9.14.0/devices/vector/gdevpdfe.c
+@@ -692,6 +692,9 @@
+             pdf_xml_attribute_name(s, "xmlns:xmp");
+             pdf_xml_attribute_value(s, "http://ns.adobe.com/xap/1.0/");
+             pdf_xml_tag_end(s);
++            if (!getenv("GS_GENERATE_UUIDS") ||
++                (strcasecmp(getenv("GS_GENERATE_UUIDS"), "0") != 0 &&
++                 strcasecmp(getenv("GS_GENERATE_UUIDS"), "no") != 0))
+             {
+                 pdf_xml_tag_open_beg(s, "xmp:ModifyDate");
+                 pdf_xml_tag_end(s);
+@@ -700,6 +701,9 @@
+                 pdf_xml_tag_close(s, "xmp:ModifyDate");
+                 pdf_xml_newline(s);
+             }
++            if (!getenv("GS_GENERATE_UUIDS") ||
++                (strcasecmp(getenv("GS_GENERATE_UUIDS"), "0") != 0 &&
++                 strcasecmp(getenv("GS_GENERATE_UUIDS"), "no") != 0))
+             {
+                 pdf_xml_tag_open_beg(s, "xmp:CreateDate");
+                 pdf_xml_tag_end(s);
diff --git a/gnu/packages/patches/glade-gls-set-script-name.patch b/gnu/packages/patches/glade-gls-set-script-name.patch
new file mode 100644
index 0000000000..61fbdf3914
--- /dev/null
+++ b/gnu/packages/patches/glade-gls-set-script-name.patch
@@ -0,0 +1,32 @@
+Taken from upstream:
+https://gitlab.gnome.org/GNOME/glade/-/commit/eb0429d318c017b57b9e59de1d5b3f142a0f455e.
+
+From 6cf1d3e11d4f8035f33c3003d33f6465896025a5 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= <mail@3v1n0.net>
+Date: Tue, 18 May 2021 19:54:50 +0200
+Subject: [PATCH] plugins: Define an invalid but non-null file path as script
+ path
+
+This is following the gjs applications behaviors, setting a valid string
+as the script path that will be shown in JS stack traces, even though
+won't load a real file through g_file_new_for_commandline_arg()
+---
+ plugins/gjs/glade-gjs.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/gjs/glade-gjs.c b/plugins/gjs/glade-gjs.c
+index e1779665..aeae9906 100644
+--- a/plugins/gjs/glade-gjs.c
++++ b/plugins/gjs/glade-gjs.c
+@@ -93,7 +93,7 @@ glade_gjs_init (const gchar *name)
+ 
+   /* Importing the module will create all the GTypes so that glade can use them at runtime */
+   retval = gjs_context_eval (gjs_context_get_current (),
+-                             import_sentence, -1, NULL,
++                             import_sentence, -1, "<glade-gjs>",
+                              &exit_status,
+                              &error);
+   if (!retval && error)
+-- 
+GitLab
+
diff --git a/gnu/packages/patches/glade-test-widget-null-icon.patch b/gnu/packages/patches/glade-test-widget-null-icon.patch
new file mode 100644
index 0000000000..75668a2f68
--- /dev/null
+++ b/gnu/packages/patches/glade-test-widget-null-icon.patch
@@ -0,0 +1,30 @@
+Taken from upstream:
+https://gitlab.gnome.org/GNOME/glade/-/commit/6cf1d3e11d4f8035f33c3003d33f6465896025a5.
+
+From eb0429d318c017b57b9e59de1d5b3f142a0f455e Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= <mail@3v1n0.net>
+Date: Wed, 19 May 2021 00:10:29 +0200
+Subject: [PATCH] tests: Do not create a file icon when no filename is provided
+
+This would fail otherwise as GFileIcon requires a GFile parameter on
+construction.
+---
+ tests/create-widgets.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/tests/create-widgets.c b/tests/create-widgets.c
+index 2094059d..db8311f8 100644
+--- a/tests/create-widgets.c
++++ b/tests/create-widgets.c
+@@ -106,6 +106,8 @@ main (int   argc,
+       if (G_TYPE_IS_INSTANTIATABLE (adaptor_type) && !G_TYPE_IS_ABSTRACT (adaptor_type) &&
+           /* FIXME: can not create a themed icon without a name */
+           !g_type_is_a (adaptor_type, G_TYPE_THEMED_ICON) &&
++          /* FIXME: can not create a file icon without a file name */
++          !g_type_is_a (adaptor_type, G_TYPE_FILE_ICON) &&
+           /* FIXME: GtkPopoverMenu gives a few warnings */
+           !g_type_is_a (adaptor_type, GTK_TYPE_POPOVER_MENU) &&
+           /* FIXME: GtkFileChooserNative is hard to test here */
+-- 
+GitLab
+
diff --git a/gnu/packages/patches/glib-CVE-2021-27218.patch b/gnu/packages/patches/glib-CVE-2021-27218.patch
deleted file mode 100644
index 00fa5ebf79..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27218.patch
+++ /dev/null
@@ -1,132 +0,0 @@
-Backport of:
-
-From 0f384c88a241bbbd884487b1c40b7b75f1e638d3 Mon Sep 17 00:00:00 2001
-From: Krzesimir Nowak <qdlacz@gmail.com>
-Date: Wed, 10 Feb 2021 23:51:07 +0100
-Subject: [PATCH] gbytearray: Do not accept too large byte arrays
-
-GByteArray uses guint for storing the length of the byte array, but it
-also has a constructor (g_byte_array_new_take) that takes length as a
-gsize. gsize may be larger than guint (64 bits for gsize vs 32 bits
-for guint). It is possible to call the function with a value greater
-than G_MAXUINT, which will result in silent length truncation. This
-may happen as a result of unreffing GBytes into GByteArray, so rather
-be loud about it.
-
-(Test case tweaked by Philip Withnall.)
-
-(Backport 2.66: Add #include gstrfuncsprivate.h in the test case for
-`g_memdup2()`.)
----
- glib/garray.c      |  6 ++++++
- glib/gbytes.c      |  4 ++++
- glib/tests/bytes.c | 35 ++++++++++++++++++++++++++++++++++-
- 3 files changed, 44 insertions(+), 1 deletion(-)
-
-diff --git a/glib/garray.c b/glib/garray.c
-index 942e74c9f..fb1a42aaf 100644
---- a/glib/garray.c
-+++ b/glib/garray.c
-@@ -2013,6 +2013,10 @@ g_byte_array_new (void)
-  * Create byte array containing the data. The data will be owned by the array
-  * and will be freed with g_free(), i.e. it could be allocated using g_strdup().
-  *
-+ * Do not use it if @len is greater than %G_MAXUINT. #GByteArray
-+ * stores the length of its data in #guint, which may be shorter than
-+ * #gsize.
-+ *
-  * Since: 2.32
-  *
-  * Returns: (transfer full): a new #GByteArray
-@@ -2024,6 +2028,8 @@ g_byte_array_new_take (guint8 *data,
-   GByteArray *array;
-   GRealArray *real;
- 
-+  g_return_val_if_fail (len <= G_MAXUINT, NULL);
-+
-   array = g_byte_array_new ();
-   real = (GRealArray *)array;
-   g_assert (real->data == NULL);
-diff --git a/glib/gbytes.c b/glib/gbytes.c
-index 7b72886e5..d56abe6c3 100644
---- a/glib/gbytes.c
-+++ b/glib/gbytes.c
-@@ -519,6 +519,10 @@ g_bytes_unref_to_data (GBytes *bytes,
-  * g_bytes_new(), g_bytes_new_take() or g_byte_array_free_to_bytes(). In all
-  * other cases the data is copied.
-  *
-+ * Do not use it if @bytes contains more than %G_MAXUINT
-+ * bytes. #GByteArray stores the length of its data in #guint, which
-+ * may be shorter than #gsize, that @bytes is using.
-+ *
-  * Returns: (transfer full): a new mutable #GByteArray containing the same byte data
-  *
-  * Since: 2.32
-diff --git a/glib/tests/bytes.c b/glib/tests/bytes.c
-index 5ea5c2b35..15a6aaad6 100644
---- a/glib/tests/bytes.c
-+++ b/glib/tests/bytes.c
-@@ -10,12 +10,12 @@
-  */
- 
- #undef G_DISABLE_ASSERT
--#undef G_LOG_DOMAIN
- 
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include "glib.h"
-+#include "glib/gstrfuncsprivate.h"
- 
- /* Keep in sync with glib/gbytes.c */
- struct _GBytes
-@@ -333,6 +333,38 @@ test_to_array_transferred (void)
-   g_byte_array_unref (array);
- }
- 
-+static void
-+test_to_array_transferred_oversize (void)
-+{
-+  g_test_message ("g_bytes_unref_to_array() can only take GBytes up to "
-+                  "G_MAXUINT in length; test that longer ones are rejected");
-+
-+  if (sizeof (guint) >= sizeof (gsize))
-+    {
-+      g_test_skip ("Skipping test as guint is not smaller than gsize");
-+    }
-+  else if (g_test_undefined ())
-+    {
-+      GByteArray *array = NULL;
-+      GBytes *bytes = NULL;
-+      gpointer data = g_memdup2 (NYAN, N_NYAN);
-+      gsize len = ((gsize) G_MAXUINT) + 1;
-+
-+      bytes = g_bytes_new_take (data, len);
-+      g_test_expect_message (G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL,
-+                             "g_byte_array_new_take: assertion 'len <= G_MAXUINT' failed");
-+      array = g_bytes_unref_to_array (g_steal_pointer (&bytes));
-+      g_test_assert_expected_messages ();
-+      g_assert_null (array);
-+
-+      g_free (data);
-+    }
-+  else
-+    {
-+      g_test_skip ("Skipping test as testing undefined behaviour is disabled");
-+    }
-+}
-+
- static void
- test_to_array_two_refs (void)
- {
-@@ -410,6 +442,7 @@ main (int argc, char *argv[])
-   g_test_add_func ("/bytes/to-array/transfered", test_to_array_transferred);
-   g_test_add_func ("/bytes/to-array/two-refs", test_to_array_two_refs);
-   g_test_add_func ("/bytes/to-array/non-malloc", test_to_array_non_malloc);
-+  g_test_add_func ("/bytes/to-array/transferred/oversize", test_to_array_transferred_oversize);
-   g_test_add_func ("/bytes/null", test_null);
- 
-   return g_test_run ();
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-01.patch b/gnu/packages/patches/glib-CVE-2021-27219-01.patch
deleted file mode 100644
index 5db360d468..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-01.patch
+++ /dev/null
@@ -1,176 +0,0 @@
-Backport of:
-
-From 5e5f75a77e399c638be66d74e5daa8caeb433e00 Mon Sep 17 00:00:00 2001
-From: Philip Withnall <pwithnall@endlessos.org>
-Date: Thu, 4 Feb 2021 13:30:52 +0000
-Subject: [PATCH 01/11] gstrfuncs: Add internal g_memdup2() function
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-This will replace the existing `g_memdup()` function for use within
-GLib. It has an unavoidable security flaw of taking its `byte_size`
-argument as a `guint` rather than as a `gsize`. Most callers will
-expect it to be a `gsize`, and may pass in large values which could
-silently be truncated, resulting in an undersize allocation compared
-to what the caller expects.
-
-This could lead to a classic buffer overflow vulnerability for many
-callers of `g_memdup()`.
-
-`g_memdup2()`, in comparison, takes its `byte_size` as a `gsize`.
-
-Spotted by Kevin Backhouse of GHSL.
-
-In GLib 2.68, `g_memdup2()` will be a new public API. In this version
-for backport to older stable releases, it’s a new `static inline` API
-in a private header, so that use of `g_memdup()` within GLib can be
-fixed without adding a new API in a stable release series.
-
-Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
-Helps: GHSL-2021-045
-Helps: #2319
----
- docs/reference/glib/meson.build |  1 +
- glib/gstrfuncsprivate.h         | 55 +++++++++++++++++++++++++++++++++
- glib/meson.build                |  1 +
- glib/tests/strfuncs.c           | 23 ++++++++++++++
- 4 files changed, 80 insertions(+)
- create mode 100644 glib/gstrfuncsprivate.h
-
-diff --git a/docs/reference/glib/meson.build b/docs/reference/glib/meson.build
-index bba7649f0..ee39f6d04 100644
---- a/docs/reference/glib/meson.build
-+++ b/docs/reference/glib/meson.build
-@@ -22,6 +22,7 @@ if get_option('gtk_doc')
-     'gprintfint.h',
-     'gmirroringtable.h',
-     'gscripttable.h',
-+    'gstrfuncsprivate.h',
-     'glib-mirroring-tab',
-     'gnulib',
-     'pcre',
-diff --git a/glib/gstrfuncsprivate.h b/glib/gstrfuncsprivate.h
-new file mode 100644
-index 000000000..85c88328a
---- /dev/null
-+++ b/glib/gstrfuncsprivate.h
-@@ -0,0 +1,55 @@
-+/* GLIB - Library of useful routines for C programming
-+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
-+ *
-+ * 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, see <http://www.gnu.org/licenses/>.
-+ */
-+
-+#include <glib.h>
-+#include <string.h>
-+
-+/*
-+ * g_memdup2:
-+ * @mem: (nullable): the memory to copy.
-+ * @byte_size: the number of bytes to copy.
-+ *
-+ * Allocates @byte_size bytes of memory, and copies @byte_size bytes into it
-+ * from @mem. If @mem is %NULL it returns %NULL.
-+ *
-+ * This replaces g_memdup(), which was prone to integer overflows when
-+ * converting the argument from a #gsize to a #guint.
-+ *
-+ * This static inline version is a backport of the new public API from
-+ * GLib 2.68, kept internal to GLib for backport to older stable releases.
-+ * See https://gitlab.gnome.org/GNOME/glib/-/issues/2319.
-+ *
-+ * Returns: (nullable): a pointer to the newly-allocated copy of the memory,
-+ *    or %NULL if @mem is %NULL.
-+ * Since: 2.68
-+ */
-+static inline gpointer
-+g_memdup2 (gconstpointer mem,
-+           gsize         byte_size)
-+{
-+  gpointer new_mem;
-+
-+  if (mem && byte_size != 0)
-+    {
-+      new_mem = g_malloc (byte_size);
-+      memcpy (new_mem, mem, byte_size);
-+    }
-+  else
-+    new_mem = NULL;
-+
-+  return new_mem;
-+}
-diff --git a/glib/meson.build b/glib/meson.build
-index aaf5f00f5..5a6eea397 100644
---- a/glib/meson.build
-+++ b/glib/meson.build
-@@ -268,6 +268,7 @@ glib_sources = files(
-   'gslist.c',
-   'gstdio.c',
-   'gstrfuncs.c',
-+  'gstrfuncsprivate.h',
-   'gstring.c',
-   'gstringchunk.c',
-   'gtestutils.c',
-diff --git a/glib/tests/strfuncs.c b/glib/tests/strfuncs.c
-index e1f9619c7..d968afff9 100644
---- a/glib/tests/strfuncs.c
-+++ b/glib/tests/strfuncs.c
-@@ -32,6 +32,8 @@
- #include <string.h>
- #include "glib.h"
- 
-+#include "gstrfuncsprivate.h"
-+
- #if defined (_MSC_VER) && (_MSC_VER <= 1800)
- #define isnan(x) _isnan(x)
- 
-@@ -219,6 +221,26 @@ test_memdup (void)
-   g_free (str_dup);
- }
- 
-+/* Testing g_memdup2() function with various positive and negative cases */
-+static void
-+test_memdup2 (void)
-+{
-+  gchar *str_dup = NULL;
-+  const gchar *str = "The quick brown fox jumps over the lazy dog";
-+
-+  /* Testing negative cases */
-+  g_assert_null (g_memdup2 (NULL, 1024));
-+  g_assert_null (g_memdup2 (str, 0));
-+  g_assert_null (g_memdup2 (NULL, 0));
-+
-+  /* Testing normal usage cases */
-+  str_dup = g_memdup2 (str, strlen (str) + 1);
-+  g_assert_nonnull (str_dup);
-+  g_assert_cmpstr (str, ==, str_dup);
-+
-+  g_free (str_dup);
-+}
-+
- /* Testing g_strpcpy() function with various positive and negative cases */
- static void
- test_stpcpy (void)
-@@ -2523,6 +2545,7 @@ main (int   argc,
-   g_test_add_func ("/strfuncs/has-prefix", test_has_prefix);
-   g_test_add_func ("/strfuncs/has-suffix", test_has_suffix);
-   g_test_add_func ("/strfuncs/memdup", test_memdup);
-+  g_test_add_func ("/strfuncs/memdup2", test_memdup2);
-   g_test_add_func ("/strfuncs/stpcpy", test_stpcpy);
-   g_test_add_func ("/strfuncs/str_match_string", test_str_match_string);
-   g_test_add_func ("/strfuncs/str_tokenize_and_fold", test_str_tokenize_and_fold);
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-02.patch b/gnu/packages/patches/glib-CVE-2021-27219-02.patch
deleted file mode 100644
index 431959fa8f..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-02.patch
+++ /dev/null
@@ -1,264 +0,0 @@
-Backport of:
-
-From be8834340a2d928ece82025463ae23dee2c333d0 Mon Sep 17 00:00:00 2001
-From: Philip Withnall <pwithnall@endlessos.org>
-Date: Thu, 4 Feb 2021 13:37:56 +0000
-Subject: [PATCH 02/11] gio: Use g_memdup2() instead of g_memdup() in obvious
- places
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Convert all the call sites which use `g_memdup()`’s length argument
-trivially (for example, by passing a `sizeof()`), so that they use
-`g_memdup2()` instead.
-
-In almost all of these cases the use of `g_memdup()` would not have
-caused problems, but it will soon be deprecated, so best port away from
-it.
-
-Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
-Helps: #2319
----
- gio/gdbusconnection.c                 | 5 +++--
- gio/gdbusinterfaceskeleton.c          | 3 ++-
- gio/gfile.c                           | 7 ++++---
- gio/gsettingsschema.c                 | 5 +++--
- gio/gwin32registrykey.c               | 8 +++++---
- gio/tests/async-close-output-stream.c | 6 ++++--
- gio/tests/gdbus-export.c              | 5 +++--
- gio/win32/gwinhttpfile.c              | 9 +++++----
- 8 files changed, 29 insertions(+), 19 deletions(-)
-
-diff --git a/gio/gdbusconnection.c b/gio/gdbusconnection.c
-index f1f0921d4..d56453486 100644
---- a/gio/gdbusconnection.c
-+++ b/gio/gdbusconnection.c
-@@ -110,6 +110,7 @@
- #include "gasyncinitable.h"
- #include "giostream.h"
- #include "gasyncresult.h"
-+#include "gstrfuncsprivate.h"
- #include "gtask.h"
- #include "gmarshal-internal.h"
- 
-@@ -3997,7 +3998,7 @@ _g_dbus_interface_vtable_copy (const GDBusInterfaceVTable *vtable)
-   /* Don't waste memory by copying padding - remember to update this
-    * when changing struct _GDBusInterfaceVTable in gdbusconnection.h
-    */
--  return g_memdup ((gconstpointer) vtable, 3 * sizeof (gpointer));
-+  return g_memdup2 ((gconstpointer) vtable, 3 * sizeof (gpointer));
- }
- 
- static void
-@@ -4014,7 +4015,7 @@ _g_dbus_subtree_vtable_copy (const GDBusSubtreeVTable *vtable)
-   /* Don't waste memory by copying padding - remember to update this
-    * when changing struct _GDBusSubtreeVTable in gdbusconnection.h
-    */
--  return g_memdup ((gconstpointer) vtable, 3 * sizeof (gpointer));
-+  return g_memdup2 ((gconstpointer) vtable, 3 * sizeof (gpointer));
- }
- 
- static void
-diff --git a/gio/gdbusinterfaceskeleton.c b/gio/gdbusinterfaceskeleton.c
-index 4a06516c1..4a4b719a5 100644
---- a/gio/gdbusinterfaceskeleton.c
-+++ b/gio/gdbusinterfaceskeleton.c
-@@ -28,6 +28,7 @@
- #include "gdbusmethodinvocation.h"
- #include "gdbusconnection.h"
- #include "gmarshal-internal.h"
-+#include "gstrfuncsprivate.h"
- #include "gtask.h"
- #include "gioerror.h"
- 
-@@ -701,7 +702,7 @@ add_connection_locked (GDBusInterfaceSkeleton *interface_,
-        * properly before building the hooked_vtable, so we create it
-        * once at the last minute.
-        */
--      interface_->priv->hooked_vtable = g_memdup (g_dbus_interface_skeleton_get_vtable (interface_), sizeof (GDBusInterfaceVTable));
-+      interface_->priv->hooked_vtable = g_memdup2 (g_dbus_interface_skeleton_get_vtable (interface_), sizeof (GDBusInterfaceVTable));
-       interface_->priv->hooked_vtable->method_call = skeleton_intercept_handle_method_call;
-     }
- 
-diff --git a/gio/gfile.c b/gio/gfile.c
-index ba93f7c75..88b341e7d 100644
---- a/gio/gfile.c
-+++ b/gio/gfile.c
-@@ -60,6 +60,7 @@
- #include "gasyncresult.h"
- #include "gioerror.h"
- #include "glibintl.h"
-+#include "gstrfuncsprivate.h"
- 
- 
- /**
-@@ -7884,7 +7885,7 @@ measure_disk_usage_progress (gboolean reporting,
-   g_main_context_invoke_full (g_task_get_context (task),
-                               g_task_get_priority (task),
-                               measure_disk_usage_invoke_progress,
--                              g_memdup (&progress, sizeof progress),
-+                              g_memdup2 (&progress, sizeof progress),
-                               g_free);
- }
- 
-@@ -7902,7 +7903,7 @@ measure_disk_usage_thread (GTask        *task,
-                                  data->progress_callback ? measure_disk_usage_progress : NULL, task,
-                                  &result.disk_usage, &result.num_dirs, &result.num_files,
-                                  &error))
--    g_task_return_pointer (task, g_memdup (&result, sizeof result), g_free);
-+    g_task_return_pointer (task, g_memdup2 (&result, sizeof result), g_free);
-   else
-     g_task_return_error (task, error);
- }
-@@ -7926,7 +7927,7 @@ g_file_real_measure_disk_usage_async (GFile                        *file,
- 
-   task = g_task_new (file, cancellable, callback, user_data);
-   g_task_set_source_tag (task, g_file_real_measure_disk_usage_async);
--  g_task_set_task_data (task, g_memdup (&data, sizeof data), g_free);
-+  g_task_set_task_data (task, g_memdup2 (&data, sizeof data), g_free);
-   g_task_set_priority (task, io_priority);
- 
-   g_task_run_in_thread (task, measure_disk_usage_thread);
-diff --git a/gio/gsettingsschema.c b/gio/gsettingsschema.c
-index 3a60b8c64..dded9b1ca 100644
---- a/gio/gsettingsschema.c
-+++ b/gio/gsettingsschema.c
-@@ -20,6 +20,7 @@
- 
- #include "gsettingsschema-internal.h"
- #include "gsettings.h"
-+#include "gstrfuncsprivate.h"
- 
- #include "gvdb/gvdb-reader.h"
- #include "strinfo.c"
-@@ -1058,9 +1059,9 @@ g_settings_schema_list_children (GSettingsSchema *schema)
- 
-       if (g_str_has_suffix (key, "/"))
-         {
--          gint length = strlen (key);
-+          gsize length = strlen (key);
- 
--          strv[j] = g_memdup (key, length);
-+          strv[j] = g_memdup2 (key, length);
-           strv[j][length - 1] = '\0';
-           j++;
-         }
-diff --git a/gio/gwin32registrykey.c b/gio/gwin32registrykey.c
-index c19fede4e..619fd48af 100644
---- a/gio/gwin32registrykey.c
-+++ b/gio/gwin32registrykey.c
-@@ -28,6 +28,8 @@
- #include <ntstatus.h>
- #include <winternl.h>
- 
-+#include "gstrfuncsprivate.h"
-+
- #ifndef _WDMDDK_
- typedef enum _KEY_INFORMATION_CLASS {
-   KeyBasicInformation,
-@@ -247,7 +249,7 @@ g_win32_registry_value_iter_copy (const GWin32RegistryValueIter *iter)
-   new_iter->value_name_size = iter->value_name_size;
- 
-   if (iter->value_data != NULL)
--    new_iter->value_data = g_memdup (iter->value_data, iter->value_data_size);
-+    new_iter->value_data = g_memdup2 (iter->value_data, iter->value_data_size);
- 
-   new_iter->value_data_size = iter->value_data_size;
- 
-@@ -268,8 +270,8 @@ g_win32_registry_value_iter_copy (const GWin32RegistryValueIter *iter)
-   new_iter->value_data_expanded_charsize = iter->value_data_expanded_charsize;
- 
-   if (iter->value_data_expanded_u8 != NULL)
--    new_iter->value_data_expanded_u8 = g_memdup (iter->value_data_expanded_u8,
--                                                 iter->value_data_expanded_charsize);
-+    new_iter->value_data_expanded_u8 = g_memdup2 (iter->value_data_expanded_u8,
-+                                                  iter->value_data_expanded_charsize);
- 
-   new_iter->value_data_expanded_u8_size = iter->value_data_expanded_charsize;
- 
-diff --git a/gio/tests/async-close-output-stream.c b/gio/tests/async-close-output-stream.c
-index 5f6620275..d3f97a119 100644
---- a/gio/tests/async-close-output-stream.c
-+++ b/gio/tests/async-close-output-stream.c
-@@ -24,6 +24,8 @@
- #include <stdlib.h>
- #include <string.h>
- 
-+#include "gstrfuncsprivate.h"
-+
- #define DATA_TO_WRITE "Hello world\n"
- 
- typedef struct
-@@ -147,9 +149,9 @@ prepare_data (SetupData *data,
- 
-   data->expected_size = g_memory_output_stream_get_data_size (G_MEMORY_OUTPUT_STREAM (data->data_stream));
- 
--  g_assert_cmpint (data->expected_size, >, 0);
-+  g_assert_cmpuint (data->expected_size, >, 0);
- 
--  data->expected_output = g_memdup (written, (guint)data->expected_size);
-+  data->expected_output = g_memdup2 (written, data->expected_size);
- 
-   /* then recreate the streams and prepare them for the asynchronous close */
-   destroy_streams (data);
-diff --git a/gio/tests/gdbus-export.c b/gio/tests/gdbus-export.c
-index 506c7458a..5513306f8 100644
---- a/gio/tests/gdbus-export.c
-+++ b/gio/tests/gdbus-export.c
-@@ -23,6 +23,7 @@
- #include <string.h>
- 
- #include "gdbus-tests.h"
-+#include "gstrfuncsprivate.h"
- 
- /* all tests rely on a shared mainloop */
- static GMainLoop *loop = NULL;
-@@ -671,7 +672,7 @@ subtree_introspect (GDBusConnection       *connection,
-       g_assert_not_reached ();
-     }
- 
--  return g_memdup (interfaces, 2 * sizeof (void *));
-+  return g_memdup2 (interfaces, 2 * sizeof (void *));
- }
- 
- static const GDBusInterfaceVTable *
-@@ -727,7 +728,7 @@ dynamic_subtree_introspect (GDBusConnection       *connection,
- {
-   const GDBusInterfaceInfo *interfaces[2] = { &dyna_interface_info, NULL };
- 
--  return g_memdup (interfaces, 2 * sizeof (void *));
-+  return g_memdup2 (interfaces, 2 * sizeof (void *));
- }
- 
- static const GDBusInterfaceVTable *
-diff --git a/gio/win32/gwinhttpfile.c b/gio/win32/gwinhttpfile.c
-index cf5eed31d..040ee8564 100644
---- a/gio/win32/gwinhttpfile.c
-+++ b/gio/win32/gwinhttpfile.c
-@@ -29,6 +29,7 @@
- #include "gio/gfile.h"
- #include "gio/gfileattribute.h"
- #include "gio/gfileinfo.h"
-+#include "gstrfuncsprivate.h"
- #include "gwinhttpfile.h"
- #include "gwinhttpfileinputstream.h"
- #include "gwinhttpfileoutputstream.h"
-@@ -393,10 +394,10 @@ g_winhttp_file_resolve_relative_path (GFile      *file,
-   child = g_object_new (G_TYPE_WINHTTP_FILE, NULL);
-   child->vfs = winhttp_file->vfs;
-   child->url = winhttp_file->url;
--  child->url.lpszScheme = g_memdup (winhttp_file->url.lpszScheme, (winhttp_file->url.dwSchemeLength+1)*2);
--  child->url.lpszHostName = g_memdup (winhttp_file->url.lpszHostName, (winhttp_file->url.dwHostNameLength+1)*2);
--  child->url.lpszUserName = g_memdup (winhttp_file->url.lpszUserName, (winhttp_file->url.dwUserNameLength+1)*2);
--  child->url.lpszPassword = g_memdup (winhttp_file->url.lpszPassword, (winhttp_file->url.dwPasswordLength+1)*2);
-+  child->url.lpszScheme = g_memdup2 (winhttp_file->url.lpszScheme, (winhttp_file->url.dwSchemeLength+1)*2);
-+  child->url.lpszHostName = g_memdup2 (winhttp_file->url.lpszHostName, (winhttp_file->url.dwHostNameLength+1)*2);
-+  child->url.lpszUserName = g_memdup2 (winhttp_file->url.lpszUserName, (winhttp_file->url.dwUserNameLength+1)*2);
-+  child->url.lpszPassword = g_memdup2 (winhttp_file->url.lpszPassword, (winhttp_file->url.dwPasswordLength+1)*2);
-   child->url.lpszUrlPath = wnew_path;
-   child->url.dwUrlPathLength = wcslen (wnew_path);
-   child->url.lpszExtraInfo = NULL;
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-03.patch b/gnu/packages/patches/glib-CVE-2021-27219-03.patch
deleted file mode 100644
index 99e849c43c..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-03.patch
+++ /dev/null
@@ -1,136 +0,0 @@
-From 6110caea45b235420b98cd41d845cc92238f6781 Mon Sep 17 00:00:00 2001
-From: Philip Withnall <pwithnall@endlessos.org>
-Date: Thu, 4 Feb 2021 13:39:25 +0000
-Subject: [PATCH 03/11] gobject: Use g_memdup2() instead of g_memdup() in
- obvious places
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Convert all the call sites which use `g_memdup()`’s length argument
-trivially (for example, by passing a `sizeof()`), so that they use
-`g_memdup2()` instead.
-
-In almost all of these cases the use of `g_memdup()` would not have
-caused problems, but it will soon be deprecated, so best port away from
-it.
-
-Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
-Helps: #2319
----
- gobject/gsignal.c     | 3 ++-
- gobject/gtype.c       | 9 +++++----
- gobject/gtypemodule.c | 3 ++-
- gobject/tests/param.c | 4 +++-
- 4 files changed, 12 insertions(+), 7 deletions(-)
-
-diff --git a/gobject/gsignal.c b/gobject/gsignal.c
-index 77d8f211e..41c54ab57 100644
---- a/gobject/gsignal.c
-+++ b/gobject/gsignal.c
-@@ -28,6 +28,7 @@
- #include <signal.h>
- 
- #include "gsignal.h"
-+#include "gstrfuncsprivate.h"
- #include "gtype-private.h"
- #include "gbsearcharray.h"
- #include "gvaluecollector.h"
-@@ -1730,7 +1731,7 @@ g_signal_newv (const gchar       *signal_name,
-   node->single_va_closure_is_valid = FALSE;
-   node->flags = signal_flags & G_SIGNAL_FLAGS_MASK;
-   node->n_params = n_params;
--  node->param_types = g_memdup (param_types, sizeof (GType) * n_params);
-+  node->param_types = g_memdup2 (param_types, sizeof (GType) * n_params);
-   node->return_type = return_type;
-   node->class_closure_bsa = NULL;
-   if (accumulator)
-diff --git a/gobject/gtype.c b/gobject/gtype.c
-index 7d3789400..8441b90e9 100644
---- a/gobject/gtype.c
-+++ b/gobject/gtype.c
-@@ -33,6 +33,7 @@
- 
- #include "glib-private.h"
- #include "gconstructor.h"
-+#include "gstrfuncsprivate.h"
- 
- #ifdef G_OS_WIN32
- #include <windows.h>
-@@ -1470,7 +1471,7 @@ type_add_interface_Wm (TypeNode             *node,
-   iholder->next = iface_node_get_holders_L (iface);
-   iface_node_set_holders_W (iface, iholder);
-   iholder->instance_type = NODE_TYPE (node);
--  iholder->info = info ? g_memdup (info, sizeof (*info)) : NULL;
-+  iholder->info = info ? g_memdup2 (info, sizeof (*info)) : NULL;
-   iholder->plugin = plugin;
- 
-   /* create an iface entry for this type */
-@@ -1731,7 +1732,7 @@ type_iface_retrieve_holder_info_Wm (TypeNode *iface,
-         INVALID_RECURSION ("g_type_plugin_*", iholder->plugin, NODE_NAME (iface));
-       
-       check_interface_info_I (iface, instance_type, &tmp_info);
--      iholder->info = g_memdup (&tmp_info, sizeof (tmp_info));
-+      iholder->info = g_memdup2 (&tmp_info, sizeof (tmp_info));
-     }
-   
-   return iholder;	/* we don't modify write lock upon returning NULL */
-@@ -2016,10 +2017,10 @@ type_iface_vtable_base_init_Wm (TypeNode *iface,
-       IFaceEntry *pentry = type_lookup_iface_entry_L (pnode, iface);
-       
-       if (pentry)
--	vtable = g_memdup (pentry->vtable, iface->data->iface.vtable_size);
-+	vtable = g_memdup2 (pentry->vtable, iface->data->iface.vtable_size);
-     }
-   if (!vtable)
--    vtable = g_memdup (iface->data->iface.dflt_vtable, iface->data->iface.vtable_size);
-+    vtable = g_memdup2 (iface->data->iface.dflt_vtable, iface->data->iface.vtable_size);
-   entry->vtable = vtable;
-   vtable->g_type = NODE_TYPE (iface);
-   vtable->g_instance_type = NODE_TYPE (node);
-diff --git a/gobject/gtypemodule.c b/gobject/gtypemodule.c
-index 4ecaf8c88..20911fafd 100644
---- a/gobject/gtypemodule.c
-+++ b/gobject/gtypemodule.c
-@@ -19,6 +19,7 @@
- 
- #include <stdlib.h>
- 
-+#include "gstrfuncsprivate.h"
- #include "gtypeplugin.h"
- #include "gtypemodule.h"
- 
-@@ -436,7 +437,7 @@ g_type_module_register_type (GTypeModule     *module,
-   module_type_info->loaded = TRUE;
-   module_type_info->info = *type_info;
-   if (type_info->value_table)
--    module_type_info->info.value_table = g_memdup (type_info->value_table,
-+    module_type_info->info.value_table = g_memdup2 (type_info->value_table,
- 						   sizeof (GTypeValueTable));
- 
-   return module_type_info->type;
-diff --git a/gobject/tests/param.c b/gobject/tests/param.c
-index 758289bf8..971cff162 100644
---- a/gobject/tests/param.c
-+++ b/gobject/tests/param.c
-@@ -2,6 +2,8 @@
- #include <glib-object.h>
- #include <stdlib.h>
- 
-+#include "gstrfuncsprivate.h"
-+
- static void
- test_param_value (void)
- {
-@@ -851,7 +853,7 @@ main (int argc, char *argv[])
-             test_path = g_strdup_printf ("/param/implement/subprocess/%d-%d-%d-%d",
-                                          data.change_this_flag, data.change_this_type,
-                                          data.use_this_flag, data.use_this_type);
--            test_data = g_memdup (&data, sizeof (TestParamImplementData));
-+            test_data = g_memdup2 (&data, sizeof (TestParamImplementData));
-             g_test_add_data_func_full (test_path, test_data, test_param_implement_child, g_free);
-             g_free (test_path);
-           }
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-04.patch b/gnu/packages/patches/glib-CVE-2021-27219-04.patch
deleted file mode 100644
index 3ae01f34b1..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-04.patch
+++ /dev/null
@@ -1,308 +0,0 @@
-Backport of:
-
-From 0736b7c1e7cf4232c5d7eb2b0fbfe9be81bd3baa Mon Sep 17 00:00:00 2001
-From: Philip Withnall <pwithnall@endlessos.org>
-Date: Thu, 4 Feb 2021 13:41:21 +0000
-Subject: [PATCH 04/11] glib: Use g_memdup2() instead of g_memdup() in obvious
- places
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Convert all the call sites which use `g_memdup()`’s length argument
-trivially (for example, by passing a `sizeof()` or an existing `gsize`
-variable), so that they use `g_memdup2()` instead.
-
-In almost all of these cases the use of `g_memdup()` would not have
-caused problems, but it will soon be deprecated, so best port away from
-it
-
-In particular, this fixes an overflow within `g_bytes_new()`, identified
-as GHSL-2021-045 by GHSL team member Kevin Backhouse.
-
-Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
-Fixes: GHSL-2021-045
-Helps: #2319
----
- glib/gbytes.c               | 6 ++++--
- glib/gdir.c                 | 3 ++-
- glib/ghash.c                | 7 ++++---
- glib/giochannel.c           | 3 ++-
- glib/gslice.c               | 3 ++-
- glib/gtestutils.c           | 3 ++-
- glib/gvariant.c             | 7 ++++---
- glib/gvarianttype.c         | 3 ++-
- glib/tests/array-test.c     | 4 +++-
- glib/tests/option-context.c | 6 ++++--
- 10 files changed, 29 insertions(+), 16 deletions(-)
-
-diff --git a/glib/gbytes.c b/glib/gbytes.c
-index d56abe6c3..dee494820 100644
---- a/glib/gbytes.c
-+++ b/glib/gbytes.c
-@@ -34,6 +34,8 @@
- 
- #include <string.h>
- 
-+#include "gstrfuncsprivate.h"
-+
- /**
-  * GBytes:
-  *
-@@ -95,7 +97,7 @@ g_bytes_new (gconstpointer data,
- {
-   g_return_val_if_fail (data != NULL || size == 0, NULL);
- 
--  return g_bytes_new_take (g_memdup (data, size), size);
-+  return g_bytes_new_take (g_memdup2 (data, size), size);
- }
- 
- /**
-@@ -499,7 +501,7 @@ g_bytes_unref_to_data (GBytes *bytes,
-        * Copy: Non g_malloc (or compatible) allocator, or static memory,
-        * so we have to copy, and then unref.
-        */
--      result = g_memdup (bytes->data, bytes->size);
-+      result = g_memdup2 (bytes->data, bytes->size);
-       *size = bytes->size;
-       g_bytes_unref (bytes);
-     }
-diff --git a/glib/gdir.c b/glib/gdir.c
-index 6b85e99c8..6747a8c6f 100644
---- a/glib/gdir.c
-+++ b/glib/gdir.c
-@@ -37,6 +37,7 @@
- #include "gconvert.h"
- #include "gfileutils.h"
- #include "gstrfuncs.h"
-+#include "gstrfuncsprivate.h"
- #include "gtestutils.h"
- #include "glibintl.h"
- 
-@@ -112,7 +113,7 @@ g_dir_open_with_errno (const gchar *path,
-     return NULL;
- #endif
- 
--  return g_memdup (&dir, sizeof dir);
-+  return g_memdup2 (&dir, sizeof dir);
- }
- 
- /**
-diff --git a/glib/ghash.c b/glib/ghash.c
-index e61b03788..26f26062b 100644
---- a/glib/ghash.c
-+++ b/glib/ghash.c
-@@ -34,6 +34,7 @@
- #include "gmacros.h"
- #include "glib-private.h"
- #include "gstrfuncs.h"
-+#include "gstrfuncsprivate.h"
- #include "gatomic.h"
- #include "gtestutils.h"
- #include "gslice.h"
-@@ -964,7 +965,7 @@ g_hash_table_ensure_keyval_fits (GHashTable *hash_table, gpointer key, gpointer
-       if (hash_table->have_big_keys)
-         {
-           if (key != value)
--            hash_table->values = g_memdup (hash_table->keys, sizeof (gpointer) * hash_table->size);
-+            hash_table->values = g_memdup2 (hash_table->keys, sizeof (gpointer) * hash_table->size);
-           /* Keys and values are both big now, so no need for further checks */
-           return;
-         }
-@@ -972,7 +973,7 @@ g_hash_table_ensure_keyval_fits (GHashTable *hash_table, gpointer key, gpointer
-         {
-           if (key != value)
-             {
--              hash_table->values = g_memdup (hash_table->keys, sizeof (guint) * hash_table->size);
-+              hash_table->values = g_memdup2 (hash_table->keys, sizeof (guint) * hash_table->size);
-               is_a_set = FALSE;
-             }
-         }
-@@ -1000,7 +1001,7 @@ g_hash_table_ensure_keyval_fits (GHashTable *hash_table, gpointer key, gpointer
- 
-   /* Just split if necessary */
-   if (is_a_set && key != value)
--    hash_table->values = g_memdup (hash_table->keys, sizeof (gpointer) * hash_table->size);
-+    hash_table->values = g_memdup2 (hash_table->keys, sizeof (gpointer) * hash_table->size);
- 
- #endif
- }
-diff --git a/glib/giochannel.c b/glib/giochannel.c
-index 1956e9dc6..15927c391 100644
---- a/glib/giochannel.c
-+++ b/glib/giochannel.c
-@@ -37,6 +37,7 @@
- #include "giochannel.h"
- 
- #include "gstrfuncs.h"
-+#include "gstrfuncsprivate.h"
- #include "gtestutils.h"
- #include "glibintl.h"
- 
-@@ -892,7 +893,7 @@ g_io_channel_set_line_term (GIOChannel	*channel,
-     length = strlen (line_term);
- 
-   g_free (channel->line_term);
--  channel->line_term = line_term ? g_memdup (line_term, length) : NULL;
-+  channel->line_term = line_term ? g_memdup2 (line_term, length) : NULL;
-   channel->line_term_len = length;
- }
- 
-diff --git a/glib/gslice.c b/glib/gslice.c
-index 4c758c3be..bcdbb8853 100644
---- a/glib/gslice.c
-+++ b/glib/gslice.c
-@@ -41,6 +41,7 @@
- #include "gmain.h"
- #include "gmem.h"               /* gslice.h */
- #include "gstrfuncs.h"
-+#include "gstrfuncsprivate.h"
- #include "gutils.h"
- #include "gtrashstack.h"
- #include "gtestutils.h"
-@@ -350,7 +351,7 @@ g_slice_get_config_state (GSliceConfig ckey,
-       array[i++] = allocator->contention_counters[address];
-       array[i++] = allocator_get_magazine_threshold (allocator, address);
-       *n_values = i;
--      return g_memdup (array, sizeof (array[0]) * *n_values);
-+      return g_memdup2 (array, sizeof (array[0]) * *n_values);
-     default:
-       return NULL;
-     }
-diff --git a/glib/gtestutils.c b/glib/gtestutils.c
-index dd789482f..5887ecc36 100644
---- a/glib/gtestutils.c
-+++ b/glib/gtestutils.c
-@@ -49,6 +49,7 @@
- #include "gpattern.h"
- #include "grand.h"
- #include "gstrfuncs.h"
-+#include "gstrfuncsprivate.h"
- #include "gtimer.h"
- #include "gslice.h"
- #include "gspawn.h"
-@@ -3798,7 +3799,7 @@ g_test_log_extract (GTestLogBuffer *tbuffer)
-       if (p <= tbuffer->data->str + mlength)
-         {
-           g_string_erase (tbuffer->data, 0, mlength);
--          tbuffer->msgs = g_slist_prepend (tbuffer->msgs, g_memdup (&msg, sizeof (msg)));
-+          tbuffer->msgs = g_slist_prepend (tbuffer->msgs, g_memdup2 (&msg, sizeof (msg)));
-           return TRUE;
-         }
- 
-diff --git a/glib/gvariant.c b/glib/gvariant.c
-index b61bf7278..d6f68a9ea 100644
---- a/glib/gvariant.c
-+++ b/glib/gvariant.c
-@@ -33,6 +33,7 @@
- 
- #include <string.h>
- 
-+#include "gstrfuncsprivate.h"
- 
- /**
-  * SECTION:gvariant
-@@ -725,7 +726,7 @@ g_variant_new_variant (GVariant *value)
-   g_variant_ref_sink (value);
- 
-   return g_variant_new_from_children (G_VARIANT_TYPE_VARIANT,
--                                      g_memdup (&value, sizeof value),
-+                                      g_memdup2 (&value, sizeof value),
-                                       1, g_variant_is_trusted (value));
- }
- 
-@@ -1229,7 +1230,7 @@ g_variant_new_fixed_array (const GVariantType  *element_type,
-       return NULL;
-     }
- 
--  data = g_memdup (elements, n_elements * element_size);
-+  data = g_memdup2 (elements, n_elements * element_size);
-   value = g_variant_new_from_data (array_type, data,
-                                    n_elements * element_size,
-                                    FALSE, g_free, data);
-@@ -1908,7 +1909,7 @@ g_variant_dup_bytestring (GVariant *value,
-   if (length)
-     *length = size;
- 
--  return g_memdup (original, size + 1);
-+  return g_memdup2 (original, size + 1);
- }
- 
- /**
-diff --git a/glib/gvarianttype.c b/glib/gvarianttype.c
-index 1a228f73b..07659ff12 100644
---- a/glib/gvarianttype.c
-+++ b/glib/gvarianttype.c
-@@ -28,6 +28,7 @@
- 
- #include <string.h>
- 
-+#include "gstrfuncsprivate.h"
- 
- /**
-  * SECTION:gvarianttype
-@@ -1181,7 +1182,7 @@ g_variant_type_new_tuple (const GVariantType * const *items,
-   g_assert (offset < sizeof buffer);
-   buffer[offset++] = ')';
- 
--  return (GVariantType *) g_memdup (buffer, offset);
-+  return (GVariantType *) g_memdup2 (buffer, offset);
- }
- 
- /**
-diff --git a/glib/tests/array-test.c b/glib/tests/array-test.c
-index 3fcf1136a..11982f822 100644
---- a/glib/tests/array-test.c
-+++ b/glib/tests/array-test.c
-@@ -29,6 +29,8 @@
- #include <string.h>
- #include "glib.h"
- 
-+#include "gstrfuncsprivate.h"
-+
- /* Test data to be passed to any function which calls g_array_new(), providing
-  * the parameters for that call. Most #GArray tests should be repeated for all
-  * possible values of #ArrayTestData. */
-@@ -1642,7 +1644,7 @@ byte_array_new_take (void)
-   GByteArray *gbarray;
-   guint8 *data;
- 
--  data = g_memdup ("woooweeewow", 11);
-+  data = g_memdup2 ("woooweeewow", 11);
-   gbarray = g_byte_array_new_take (data, 11);
-   g_assert (gbarray->data == data);
-   g_assert_cmpuint (gbarray->len, ==, 11);
-diff --git a/glib/tests/option-context.c b/glib/tests/option-context.c
-index 149d22353..88d2b80d1 100644
---- a/glib/tests/option-context.c
-+++ b/glib/tests/option-context.c
-@@ -27,6 +27,8 @@
- #include <string.h>
- #include <locale.h>
- 
-+#include "gstrfuncsprivate.h"
-+
- static GOptionEntry main_entries[] = {
-   { "main-switch", 0, 0,
-     G_OPTION_ARG_NONE, NULL,
-@@ -256,7 +258,7 @@ join_stringv (int argc, char **argv)
- static char **
- copy_stringv (char **argv, int argc)
- {
--  return g_memdup (argv, sizeof (char *) * (argc + 1));
-+  return g_memdup2 (argv, sizeof (char *) * (argc + 1));
- }
- 
- static void
-@@ -2323,7 +2325,7 @@ test_group_parse (void)
-   g_option_context_add_group (context, group);
- 
-   argv = split_string ("program --test arg1 -f arg2 --group-test arg3 --frob arg4 -z arg5", &argc);
--  orig_argv = g_memdup (argv, (argc + 1) * sizeof (char *));
-+  orig_argv = g_memdup2 (argv, (argc + 1) * sizeof (char *));
- 
-   retval = g_option_context_parse (context, &argc, &argv, &error);
- 
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-05.patch b/gnu/packages/patches/glib-CVE-2021-27219-05.patch
deleted file mode 100644
index 62bce1b188..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-05.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-From 0cbad673215ec8a049b7fe2ff44b0beed31b376e Mon Sep 17 00:00:00 2001
-From: Philip Withnall <pwithnall@endlessos.org>
-Date: Thu, 4 Feb 2021 16:12:24 +0000
-Subject: [PATCH 05/11] gwinhttpfile: Avoid arithmetic overflow when
- calculating a size
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The members of `URL_COMPONENTS` (`winhttp_file->url`) are `DWORD`s, i.e.
-32-bit unsigned integers. Adding to and multiplying them may cause them
-to overflow the unsigned integer bounds, even if the result is passed to
-`g_memdup2()` which accepts a `gsize`.
-
-Cast the `URL_COMPONENTS` members to `gsize` first to ensure that the
-arithmetic is done in terms of `gsize`s rather than unsigned integers.
-
-Spotted by Sebastian Dröge.
-
-Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
-Helps: #2319
----
- gio/win32/gwinhttpfile.c | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/gio/win32/gwinhttpfile.c b/gio/win32/gwinhttpfile.c
-index 040ee8564..246ec0578 100644
---- a/gio/win32/gwinhttpfile.c
-+++ b/gio/win32/gwinhttpfile.c
-@@ -394,10 +394,10 @@ g_winhttp_file_resolve_relative_path (GFile      *file,
-   child = g_object_new (G_TYPE_WINHTTP_FILE, NULL);
-   child->vfs = winhttp_file->vfs;
-   child->url = winhttp_file->url;
--  child->url.lpszScheme = g_memdup2 (winhttp_file->url.lpszScheme, (winhttp_file->url.dwSchemeLength+1)*2);
--  child->url.lpszHostName = g_memdup2 (winhttp_file->url.lpszHostName, (winhttp_file->url.dwHostNameLength+1)*2);
--  child->url.lpszUserName = g_memdup2 (winhttp_file->url.lpszUserName, (winhttp_file->url.dwUserNameLength+1)*2);
--  child->url.lpszPassword = g_memdup2 (winhttp_file->url.lpszPassword, (winhttp_file->url.dwPasswordLength+1)*2);
-+  child->url.lpszScheme = g_memdup2 (winhttp_file->url.lpszScheme, ((gsize) winhttp_file->url.dwSchemeLength + 1) * 2);
-+  child->url.lpszHostName = g_memdup2 (winhttp_file->url.lpszHostName, ((gsize) winhttp_file->url.dwHostNameLength + 1) * 2);
-+  child->url.lpszUserName = g_memdup2 (winhttp_file->url.lpszUserName, ((gsize) winhttp_file->url.dwUserNameLength + 1) * 2);
-+  child->url.lpszPassword = g_memdup2 (winhttp_file->url.lpszPassword, ((gsize) winhttp_file->url.dwPasswordLength + 1) * 2);
-   child->url.lpszUrlPath = wnew_path;
-   child->url.dwUrlPathLength = wcslen (wnew_path);
-   child->url.lpszExtraInfo = NULL;
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-06.patch b/gnu/packages/patches/glib-CVE-2021-27219-06.patch
deleted file mode 100644
index 4e2435f5fd..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-06.patch
+++ /dev/null
@@ -1,94 +0,0 @@
-From f9ee2275cbc312c0b4cdbc338a4fbb76eb36fb9a Mon Sep 17 00:00:00 2001
-From: Philip Withnall <pwithnall@endlessos.org>
-Date: Thu, 4 Feb 2021 13:49:00 +0000
-Subject: [PATCH 06/11] gdatainputstream: Handle stop_chars_len internally as
- gsize
-
-Previously it was handled as a `gssize`, which meant that if the
-`stop_chars` string was longer than `G_MAXSSIZE` there would be an
-overflow.
-
-Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
-Helps: #2319
----
- gio/gdatainputstream.c | 25 +++++++++++++++++--------
- 1 file changed, 17 insertions(+), 8 deletions(-)
-
-diff --git a/gio/gdatainputstream.c b/gio/gdatainputstream.c
-index 2e7750cb5..2cdcbda19 100644
---- a/gio/gdatainputstream.c
-+++ b/gio/gdatainputstream.c
-@@ -27,6 +27,7 @@
- #include "gioenumtypes.h"
- #include "gioerror.h"
- #include "glibintl.h"
-+#include "gstrfuncsprivate.h"
- 
- #include <string.h>
- 
-@@ -856,7 +857,7 @@ static gssize
- scan_for_chars (GDataInputStream *stream,
- 		gsize            *checked_out,
- 		const char       *stop_chars,
--                gssize            stop_chars_len)
-+                gsize             stop_chars_len)
- {
-   GBufferedInputStream *bstream;
-   const char *buffer;
-@@ -952,7 +953,7 @@ typedef struct
-   gsize checked;
- 
-   gchar *stop_chars;
--  gssize stop_chars_len;
-+  gsize stop_chars_len;
-   gsize length;
- } GDataInputStreamReadData;
- 
-@@ -1078,12 +1079,17 @@ g_data_input_stream_read_async (GDataInputStream    *stream,
- {
-   GDataInputStreamReadData *data;
-   GTask *task;
-+  gsize stop_chars_len_unsigned;
- 
-   data = g_slice_new0 (GDataInputStreamReadData);
--  if (stop_chars_len == -1)
--    stop_chars_len = strlen (stop_chars);
--  data->stop_chars = g_memdup (stop_chars, stop_chars_len);
--  data->stop_chars_len = stop_chars_len;
-+
-+  if (stop_chars_len < 0)
-+    stop_chars_len_unsigned = strlen (stop_chars);
-+  else
-+    stop_chars_len_unsigned = (gsize) stop_chars_len;
-+
-+  data->stop_chars = g_memdup2 (stop_chars, stop_chars_len_unsigned);
-+  data->stop_chars_len = stop_chars_len_unsigned;
-   data->last_saw_cr = FALSE;
- 
-   task = g_task_new (stream, cancellable, callback, user_data);
-@@ -1338,17 +1344,20 @@ g_data_input_stream_read_upto (GDataInputStream  *stream,
-   gssize found_pos;
-   gssize res;
-   char *data_until;
-+  gsize stop_chars_len_unsigned;
- 
-   g_return_val_if_fail (G_IS_DATA_INPUT_STREAM (stream), NULL);
- 
-   if (stop_chars_len < 0)
--    stop_chars_len = strlen (stop_chars);
-+    stop_chars_len_unsigned = strlen (stop_chars);
-+  else
-+    stop_chars_len_unsigned = (gsize) stop_chars_len;
- 
-   bstream = G_BUFFERED_INPUT_STREAM (stream);
- 
-   checked = 0;
- 
--  while ((found_pos = scan_for_chars (stream, &checked, stop_chars, stop_chars_len)) == -1)
-+  while ((found_pos = scan_for_chars (stream, &checked, stop_chars, stop_chars_len_unsigned)) == -1)
-     {
-       if (g_buffered_input_stream_get_available (bstream) ==
-           g_buffered_input_stream_get_buffer_size (bstream))
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-07.patch b/gnu/packages/patches/glib-CVE-2021-27219-07.patch
deleted file mode 100644
index dad3d285f4..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-07.patch
+++ /dev/null
@@ -1,118 +0,0 @@
-Backport of:
-
-From 2aaf593a9eb96d84fe3be740aca2810a97d95592 Mon Sep 17 00:00:00 2001
-From: Philip Withnall <pwithnall@endlessos.org>
-Date: Thu, 4 Feb 2021 13:50:37 +0000
-Subject: [PATCH 07/11] gwin32: Use gsize internally in g_wcsdup()
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-This allows it to handle strings up to length `G_MAXSIZE` — previously
-it would overflow with such strings.
-
-Update the several copies of it identically.
-
-Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
-Helps: #2319
----
- gio/gwin32appinfo.c     | 33 ++++++++++++++++++++++++++-------
- gio/gwin32registrykey.c | 34 ++++++++++++++++++++++++++--------
- 2 files changed, 52 insertions(+), 15 deletions(-)
-
-diff --git a/gio/gwin32appinfo.c b/gio/gwin32appinfo.c
-index 9f335b370..dd7a96a4a 100644
---- a/gio/gwin32appinfo.c
-+++ b/gio/gwin32appinfo.c
-@@ -464,15 +464,34 @@ static GWin32RegistryKey *applications_key;
- /* Watch this key */
- static GWin32RegistryKey *classes_root_key;
- 
-+static gsize
-+g_utf16_len (const gunichar2 *str)
-+{
-+  gsize result;
-+
-+  for (result = 0; str[0] != 0; str++, result++)
-+    ;
-+
-+  return result;
-+}
-+
- static gunichar2 *
--g_wcsdup (const gunichar2 *str, gssize str_size)
-+g_wcsdup (const gunichar2 *str, gssize str_len)
- {
--  if (str_size == -1)
--    {
--      str_size = wcslen (str) + 1;
--      str_size *= sizeof (gunichar2);
--    }
--  return g_memdup (str, str_size);
-+  gsize str_len_unsigned;
-+  gsize str_size;
-+
-+  g_return_val_if_fail (str != NULL, NULL);
-+
-+  if (str_len < 0)
-+    str_len_unsigned = g_utf16_len (str);
-+  else
-+    str_len_unsigned = (gsize) str_len;
-+
-+  g_assert (str_len_unsigned <= G_MAXSIZE / sizeof (gunichar2) - 1);
-+  str_size = (str_len_unsigned + 1) * sizeof (gunichar2);
-+
-+  return g_memdup2 (str, str_size);
- }
- 
- #define URL_ASSOCIATIONS L"HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\"
-diff --git a/gio/gwin32registrykey.c b/gio/gwin32registrykey.c
-index 619fd48af..fbd65311a 100644
---- a/gio/gwin32registrykey.c
-+++ b/gio/gwin32registrykey.c
-@@ -127,16 +127,34 @@ typedef enum
-   G_WIN32_REGISTRY_UPDATED_PATH = 1,
- } GWin32RegistryKeyUpdateFlag;
- 
-+static gsize
-+g_utf16_len (const gunichar2 *str)
-+{
-+  gsize result;
-+
-+  for (result = 0; str[0] != 0; str++, result++)
-+    ;
-+
-+  return result;
-+}
-+
- static gunichar2 *
--g_wcsdup (const gunichar2 *str,
--          gssize           str_size)
-+g_wcsdup (const gunichar2 *str, gssize str_len)
- {
--  if (str_size == -1)
--    {
--      str_size = wcslen (str) + 1;
--      str_size *= sizeof (gunichar2);
--    }
--  return g_memdup (str, str_size);
-+  gsize str_len_unsigned;
-+  gsize str_size;
-+
-+  g_return_val_if_fail (str != NULL, NULL);
-+
-+  if (str_len < 0)
-+    str_len_unsigned = g_utf16_len (str);
-+  else
-+    str_len_unsigned = (gsize) str_len;
-+
-+  g_assert (str_len_unsigned <= G_MAXSIZE / sizeof (gunichar2) - 1);
-+  str_size = (str_len_unsigned + 1) * sizeof (gunichar2);
-+
-+  return g_memdup2 (str, str_size);
- }
- 
- /**
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-08.patch b/gnu/packages/patches/glib-CVE-2021-27219-08.patch
deleted file mode 100644
index 2c021ad317..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-08.patch
+++ /dev/null
@@ -1,94 +0,0 @@
-From ba8ca443051f93a74c0d03d62e70402036f967a5 Mon Sep 17 00:00:00 2001
-From: Philip Withnall <pwithnall@endlessos.org>
-Date: Thu, 4 Feb 2021 13:58:32 +0000
-Subject: [PATCH 08/11] gkeyfilesettingsbackend: Handle long keys when
- converting paths
-
-Previously, the code in `convert_path()` could not handle keys longer
-than `G_MAXINT`, and would overflow if that was exceeded.
-
-Convert the code to use `gsize` and `g_memdup2()` throughout, and
-change from identifying the position of the final slash in the string
-using a signed offset `i`, to using a pointer to the character (and
-`strrchr()`). This allows the slash to be at any position in a
-`G_MAXSIZE`-long string, without sacrificing a bit of the offset for
-indicating whether a slash was found.
-
-Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
-Helps: #2319
----
- gio/gkeyfilesettingsbackend.c | 21 ++++++++++-----------
- 1 file changed, 10 insertions(+), 11 deletions(-)
-
-diff --git a/gio/gkeyfilesettingsbackend.c b/gio/gkeyfilesettingsbackend.c
-index cd5765afd..25b057672 100644
---- a/gio/gkeyfilesettingsbackend.c
-+++ b/gio/gkeyfilesettingsbackend.c
-@@ -33,6 +33,7 @@
- #include "gfilemonitor.h"
- #include "gsimplepermission.h"
- #include "gsettingsbackendinternal.h"
-+#include "gstrfuncsprivate.h"
- #include "giomodule-priv.h"
- #include "gportalsupport.h"
- 
-@@ -145,8 +146,8 @@ convert_path (GKeyfileSettingsBackend  *kfsb,
-               gchar                   **group,
-               gchar                   **basename)
- {
--  gint key_len = strlen (key);
--  gint i;
-+  gsize key_len = strlen (key);
-+  const gchar *last_slash;
- 
-   if (key_len < kfsb->prefix_len ||
-       memcmp (key, kfsb->prefix, kfsb->prefix_len) != 0)
-@@ -155,38 +156,36 @@ convert_path (GKeyfileSettingsBackend  *kfsb,
-   key_len -= kfsb->prefix_len;
-   key += kfsb->prefix_len;
- 
--  for (i = key_len; i >= 0; i--)
--    if (key[i] == '/')
--      break;
-+  last_slash = strrchr (key, '/');
- 
-   if (kfsb->root_group)
-     {
-       /* if a root_group was specified, make sure the user hasn't given
-        * a path that ghosts that group name
-        */
--      if (i == kfsb->root_group_len && memcmp (key, kfsb->root_group, i) == 0)
-+      if (last_slash != NULL && (last_slash - key) == kfsb->root_group_len && memcmp (key, kfsb->root_group, last_slash - key) == 0)
-         return FALSE;
-     }
-   else
-     {
-       /* if no root_group was given, ensure that the user gave a path */
--      if (i == -1)
-+      if (last_slash == NULL)
-         return FALSE;
-     }
- 
-   if (group)
-     {
--      if (i >= 0)
-+      if (last_slash != NULL)
-         {
--          *group = g_memdup (key, i + 1);
--          (*group)[i] = '\0';
-+          *group = g_memdup2 (key, (last_slash - key) + 1);
-+          (*group)[(last_slash - key)] = '\0';
-         }
-       else
-         *group = g_strdup (kfsb->root_group);
-     }
- 
-   if (basename)
--    *basename = g_memdup (key + i + 1, key_len - i);
-+    *basename = g_memdup2 (last_slash + 1, key_len - (last_slash - key));
- 
-   return TRUE;
- }
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-09.patch b/gnu/packages/patches/glib-CVE-2021-27219-09.patch
deleted file mode 100644
index 4de0c1b349..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-09.patch
+++ /dev/null
@@ -1,98 +0,0 @@
-From 65ec7f4d6e8832c481f6e00e2eb007b9a60024ce Mon Sep 17 00:00:00 2001
-From: Philip Withnall <pwithnall@endlessos.org>
-Date: Thu, 4 Feb 2021 14:00:53 +0000
-Subject: [PATCH 09/11] gsocket: Use gsize to track native sockaddr's size
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Don’t use an `int`, that’s potentially too small. In practical terms,
-this is not a problem, since no socket address is going to be that big.
-
-By making these changes we can use `g_memdup2()` without warnings,
-though. Fewer warnings is good.
-
-Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
-Helps: #2319
----
- gio/gsocket.c | 16 ++++++++++------
- 1 file changed, 10 insertions(+), 6 deletions(-)
-
-diff --git a/gio/gsocket.c b/gio/gsocket.c
-index 66073af83..a3af149e8 100644
---- a/gio/gsocket.c
-+++ b/gio/gsocket.c
-@@ -75,6 +75,7 @@
- #include "gcredentialsprivate.h"
- #include "glibintl.h"
- #include "gioprivate.h"
-+#include "gstrfuncsprivate.h"
- 
- #ifdef G_OS_WIN32
- /* For Windows XP runtime compatibility, but use the system's if_nametoindex() if available */
-@@ -174,7 +175,7 @@ static gboolean     g_socket_datagram_based_condition_wait       (GDatagramBased
-                                                                   GError          **error);
- 
- static GSocketAddress *
--cache_recv_address (GSocket *socket, struct sockaddr *native, int native_len);
-+cache_recv_address (GSocket *socket, struct sockaddr *native, size_t native_len);
- 
- static gssize
- g_socket_receive_message_with_timeout  (GSocket                 *socket,
-@@ -260,7 +261,7 @@ struct _GSocketPrivate
-   struct {
-     GSocketAddress *addr;
-     struct sockaddr *native;
--    gint native_len;
-+    gsize native_len;
-     guint64 last_used;
-   } recv_addr_cache[RECV_ADDR_CACHE_SIZE];
- };
-@@ -5211,14 +5212,14 @@ g_socket_send_messages_with_timeout (GSocket        *socket,
- }
- 
- static GSocketAddress *
--cache_recv_address (GSocket *socket, struct sockaddr *native, int native_len)
-+cache_recv_address (GSocket *socket, struct sockaddr *native, size_t native_len)
- {
-   GSocketAddress *saddr;
-   gint i;
-   guint64 oldest_time = G_MAXUINT64;
-   gint oldest_index = 0;
- 
--  if (native_len <= 0)
-+  if (native_len == 0)
-     return NULL;
- 
-   saddr = NULL;
-@@ -5226,7 +5227,7 @@ cache_recv_address (GSocket *socket, struct sockaddr *native, int native_len)
-     {
-       GSocketAddress *tmp = socket->priv->recv_addr_cache[i].addr;
-       gpointer tmp_native = socket->priv->recv_addr_cache[i].native;
--      gint tmp_native_len = socket->priv->recv_addr_cache[i].native_len;
-+      gsize tmp_native_len = socket->priv->recv_addr_cache[i].native_len;
- 
-       if (!tmp)
-         continue;
-@@ -5256,7 +5257,7 @@ cache_recv_address (GSocket *socket, struct sockaddr *native, int native_len)
-       g_free (socket->priv->recv_addr_cache[oldest_index].native);
-     }
- 
--  socket->priv->recv_addr_cache[oldest_index].native = g_memdup (native, native_len);
-+  socket->priv->recv_addr_cache[oldest_index].native = g_memdup2 (native, native_len);
-   socket->priv->recv_addr_cache[oldest_index].native_len = native_len;
-   socket->priv->recv_addr_cache[oldest_index].addr = g_object_ref (saddr);
-   socket->priv->recv_addr_cache[oldest_index].last_used = g_get_monotonic_time ();
-@@ -5404,6 +5405,9 @@ g_socket_receive_message_with_timeout (GSocket                 *socket,
-     /* do it */
-     while (1)
-       {
-+        /* addrlen has to be of type int because that’s how WSARecvFrom() is defined */
-+        G_STATIC_ASSERT (sizeof addr <= G_MAXINT);
-+
- 	addrlen = sizeof addr;
- 	if (address)
- 	  result = WSARecvFrom (socket->priv->fd,
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-10.patch b/gnu/packages/patches/glib-CVE-2021-27219-10.patch
deleted file mode 100644
index 36198b8eef..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-10.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-From 777b95a88f006d39d9fe6d3321db17e7b0d4b9a4 Mon Sep 17 00:00:00 2001
-From: Philip Withnall <pwithnall@endlessos.org>
-Date: Thu, 4 Feb 2021 14:07:39 +0000
-Subject: [PATCH 10/11] gtlspassword: Forbid very long TLS passwords
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The public API `g_tls_password_set_value_full()` (and the vfunc it
-invokes) can only accept a `gssize` length. Ensure that nul-terminated
-strings passed to `g_tls_password_set_value()` can’t exceed that length.
-Use `g_memdup2()` to avoid an overflow if they’re longer than
-`G_MAXUINT` similarly.
-
-Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
-Helps: #2319
----
- gio/gtlspassword.c | 10 ++++++++--
- 1 file changed, 8 insertions(+), 2 deletions(-)
-
-diff --git a/gio/gtlspassword.c b/gio/gtlspassword.c
-index 1e437a7b6..dbcec41a8 100644
---- a/gio/gtlspassword.c
-+++ b/gio/gtlspassword.c
-@@ -23,6 +23,7 @@
- #include "glibintl.h"
- 
- #include "gioenumtypes.h"
-+#include "gstrfuncsprivate.h"
- #include "gtlspassword.h"
- 
- #include <string.h>
-@@ -287,9 +288,14 @@ g_tls_password_set_value (GTlsPassword  *password,
-   g_return_if_fail (G_IS_TLS_PASSWORD (password));
- 
-   if (length < 0)
--    length = strlen ((gchar *)value);
-+    {
-+      /* FIXME: g_tls_password_set_value_full() doesn’t support unsigned gsize */
-+      gsize length_unsigned = strlen ((gchar *) value);
-+      g_return_if_fail (length_unsigned > G_MAXSSIZE);
-+      length = (gssize) length_unsigned;
-+    }
- 
--  g_tls_password_set_value_full (password, g_memdup (value, length), length, g_free);
-+  g_tls_password_set_value_full (password, g_memdup2 (value, (gsize) length), length, g_free);
- }
- 
- /**
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-11.patch b/gnu/packages/patches/glib-CVE-2021-27219-11.patch
deleted file mode 100644
index 4413cb9827..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-11.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-From ecdf91400e9a538695a0895b95ad7e8abcdf1749 Mon Sep 17 00:00:00 2001
-From: Philip Withnall <pwithnall@endlessos.org>
-Date: Thu, 4 Feb 2021 14:09:40 +0000
-Subject: [PATCH 11/11] giochannel: Forbid very long line terminator strings
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The public API `GIOChannel.line_term_len` is only a `guint`. Ensure that
-nul-terminated strings passed to `g_io_channel_set_line_term()` can’t
-exceed that length. Use `g_memdup2()` to avoid a warning (`g_memdup()`
-is due to be deprecated), but not to avoid a bug, since it’s also
-limited to `G_MAXUINT`.
-
-Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
-Helps: #2319
----
- glib/giochannel.c | 17 +++++++++++++----
- 1 file changed, 13 insertions(+), 4 deletions(-)
-
-diff --git a/glib/giochannel.c b/glib/giochannel.c
-index 15927c391..66c6591f0 100644
---- a/glib/giochannel.c
-+++ b/glib/giochannel.c
-@@ -884,16 +884,25 @@ g_io_channel_set_line_term (GIOChannel	*channel,
-                             const gchar	*line_term,
- 			    gint         length)
- {
-+  guint length_unsigned;
-+
-   g_return_if_fail (channel != NULL);
-   g_return_if_fail (line_term == NULL || length != 0); /* Disallow "" */
- 
-   if (line_term == NULL)
--    length = 0;
--  else if (length < 0)
--    length = strlen (line_term);
-+    length_unsigned = 0;
-+  else if (length >= 0)
-+    length_unsigned = (guint) length;
-+  else
-+    {
-+      /* FIXME: We’re constrained by line_term_len being a guint here */
-+      gsize length_size = strlen (line_term);
-+      g_return_if_fail (length_size > G_MAXUINT);
-+      length_unsigned = (guint) length_size;
-+    }
- 
-   g_free (channel->line_term);
--  channel->line_term = line_term ? g_memdup2 (line_term, length) : NULL;
-+  channel->line_term = line_term ? g_memdup2 (line_term, length_unsigned) : NULL;
-   channel->line_term_len = length;
- }
- 
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-12.patch b/gnu/packages/patches/glib-CVE-2021-27219-12.patch
deleted file mode 100644
index 4fdbb81750..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-12.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From f8273b9aded135fe07094faebd527e43851aaf6e Mon Sep 17 00:00:00 2001
-From: "Jan Alexander Steffens (heftig)" <jan.steffens@gmail.com>
-Date: Sun, 7 Feb 2021 23:32:40 +0100
-Subject: [PATCH 1/5] giochannel: Fix length_size bounds check
-
-The inverted condition is an obvious error introduced by ecdf91400e9a.
-
-Fixes https://gitlab.gnome.org/GNOME/glib/-/issues/2323
-
-(cherry picked from commit a149bf2f9030168051942124536e303af8ba6176)
----
- glib/giochannel.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/glib/giochannel.c b/glib/giochannel.c
-index 66c6591f0..0d9d5f223 100644
---- a/glib/giochannel.c
-+++ b/glib/giochannel.c
-@@ -897,7 +897,7 @@ g_io_channel_set_line_term (GIOChannel	*channel,
-     {
-       /* FIXME: We’re constrained by line_term_len being a guint here */
-       gsize length_size = strlen (line_term);
--      g_return_if_fail (length_size > G_MAXUINT);
-+      g_return_if_fail (length_size <= G_MAXUINT);
-       length_unsigned = (guint) length_size;
-     }
- 
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-13.patch b/gnu/packages/patches/glib-CVE-2021-27219-13.patch
deleted file mode 100644
index 6a287cc3a2..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-13.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From e069c50467712e6d607822afd6b6c15c2c343dff Mon Sep 17 00:00:00 2001
-From: Simon McVittie <smcv@collabora.com>
-Date: Mon, 8 Feb 2021 10:34:50 +0000
-Subject: [PATCH 2/5] giochannel: Don't store negative line_term_len in
- GIOChannel struct
-
-Adding test coverage indicated that this was another bug in 0cc11f74.
-
-Fixes: 0cc11f74 "giochannel: Forbid very long line terminator strings"
-Resolves: https://gitlab.gnome.org/GNOME/glib/-/issues/2323
-Signed-off-by: Simon McVittie <smcv@collabora.com>
-(cherry picked from commit 5dc8b0014c03e7491d93b90275ab442e888a9628)
----
- glib/giochannel.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/glib/giochannel.c b/glib/giochannel.c
-index 0d9d5f223..4c39b9dc0 100644
---- a/glib/giochannel.c
-+++ b/glib/giochannel.c
-@@ -903,7 +903,7 @@ g_io_channel_set_line_term (GIOChannel	*channel,
- 
-   g_free (channel->line_term);
-   channel->line_term = line_term ? g_memdup2 (line_term, length_unsigned) : NULL;
--  channel->line_term_len = length;
-+  channel->line_term_len = length_unsigned;
- }
- 
- /**
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-14.patch b/gnu/packages/patches/glib-CVE-2021-27219-14.patch
deleted file mode 100644
index 78de2846da..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-14.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From 4506d1859a863087598c8d122740bae25b65b099 Mon Sep 17 00:00:00 2001
-From: Simon McVittie <smcv@collabora.com>
-Date: Mon, 8 Feb 2021 10:04:48 +0000
-Subject: [PATCH 4/5] gtlspassword: Fix inverted assertion
-
-The intention here was to assert that the length of the password fits
-in a gssize. Passwords more than half the size of virtual memory are
-probably excessive.
-
-Fixes: a8b204ff "gtlspassword: Forbid very long TLS passwords"
-Signed-off-by: Simon McVittie <smcv@collabora.com>
-(cherry picked from commit 61bb52ec42de1082bfb06ce1c737fc295bfe60b8)
----
- gio/gtlspassword.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/gio/gtlspassword.c b/gio/gtlspassword.c
-index dbcec41a8..bd86a6dfe 100644
---- a/gio/gtlspassword.c
-+++ b/gio/gtlspassword.c
-@@ -291,7 +291,7 @@ g_tls_password_set_value (GTlsPassword  *password,
-     {
-       /* FIXME: g_tls_password_set_value_full() doesn’t support unsigned gsize */
-       gsize length_unsigned = strlen ((gchar *) value);
--      g_return_if_fail (length_unsigned > G_MAXSSIZE);
-+      g_return_if_fail (length_unsigned <= G_MAXSSIZE);
-       length = (gssize) length_unsigned;
-     }
- 
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-15.patch b/gnu/packages/patches/glib-CVE-2021-27219-15.patch
deleted file mode 100644
index 37ef85b4fa..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-15.patch
+++ /dev/null
@@ -1,95 +0,0 @@
-From 3d1550354c3c6a8491c39881752d51cb7515f2c2 Mon Sep 17 00:00:00 2001
-From: Simon McVittie <smcv@collabora.com>
-Date: Mon, 8 Feb 2021 10:22:39 +0000
-Subject: [PATCH 5/5] tls-interaction: Add test coverage for various ways to
- set the password
-
-Signed-off-by: Simon McVittie <smcv@collabora.com>
-(cherry picked from commit df4501316ca3903072400504a5ea76498db19538)
----
- gio/tests/tls-interaction.c | 55 +++++++++++++++++++++++++++++++++++++
- 1 file changed, 55 insertions(+)
-
-diff --git a/gio/tests/tls-interaction.c b/gio/tests/tls-interaction.c
-index 4f0737d7e..5661e8e0d 100644
---- a/gio/tests/tls-interaction.c
-+++ b/gio/tests/tls-interaction.c
-@@ -174,6 +174,38 @@ test_interaction_ask_password_finish_failure (GTlsInteraction    *interaction,
- }
- 
- 
-+/* Return a copy of @str that is allocated in a silly way, to exercise
-+ * custom free-functions. The returned pointer points to a copy of @str
-+ * in a buffer of the form "BEFORE \0 str \0 AFTER". */
-+static guchar *
-+special_dup (const char *str)
-+{
-+  GString *buf = g_string_new ("BEFORE");
-+  guchar *ret;
-+
-+  g_string_append_c (buf, '\0');
-+  g_string_append (buf, str);
-+  g_string_append_c (buf, '\0');
-+  g_string_append (buf, "AFTER");
-+  ret = (guchar *) g_string_free (buf, FALSE);
-+  return ret + strlen ("BEFORE") + 1;
-+}
-+
-+
-+/* Free a copy of @str that was made with special_dup(), after asserting
-+ * that it has not been corrupted. */
-+static void
-+special_free (gpointer p)
-+{
-+  gchar *s = p;
-+  gchar *buf = s - strlen ("BEFORE") - 1;
-+
-+  g_assert_cmpstr (buf, ==, "BEFORE");
-+  g_assert_cmpstr (s + strlen (s) + 1, ==, "AFTER");
-+  g_free (buf);
-+}
-+
-+
- static GTlsInteractionResult
- test_interaction_ask_password_sync_success (GTlsInteraction    *interaction,
-                                             GTlsPassword       *password,
-@@ -181,6 +213,8 @@ test_interaction_ask_password_sync_success (GTlsInteraction    *interaction,
-                                             GError            **error)
- {
-   TestInteraction *self;
-+  const guchar *value;
-+  gsize len;
- 
-   g_assert (TEST_IS_INTERACTION (interaction));
-   self = TEST_INTERACTION (interaction);
-@@ -192,6 +226,27 @@ test_interaction_ask_password_sync_success (GTlsInteraction    *interaction,
-   g_assert (error != NULL);
-   g_assert (*error == NULL);
- 
-+  /* Exercise different ways to set the value */
-+  g_tls_password_set_value (password, (const guchar *) "foo", 4);
-+  len = 0;
-+  value = g_tls_password_get_value (password, &len);
-+  g_assert_cmpmem (value, len, "foo", 4);
-+
-+  g_tls_password_set_value (password, (const guchar *) "bar", -1);
-+  len = 0;
-+  value = g_tls_password_get_value (password, &len);
-+  g_assert_cmpmem (value, len, "bar", 3);
-+
-+  g_tls_password_set_value_full (password, special_dup ("baa"), 4, special_free);
-+  len = 0;
-+  value = g_tls_password_get_value (password, &len);
-+  g_assert_cmpmem (value, len, "baa", 4);
-+
-+  g_tls_password_set_value_full (password, special_dup ("baz"), -1, special_free);
-+  len = 0;
-+  value = g_tls_password_get_value (password, &len);
-+  g_assert_cmpmem (value, len, "baz", 3);
-+
-   /* Don't do this in real life. Include a null terminator for testing */
-   g_tls_password_set_value (password, (const guchar *)"the password", 13);
-   return G_TLS_INTERACTION_HANDLED;
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-16.patch b/gnu/packages/patches/glib-CVE-2021-27219-16.patch
deleted file mode 100644
index 43635e72ed..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-16.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From cb9ee701ef46c1819eed4e2a4dc181682bdfc176 Mon Sep 17 00:00:00 2001
-From: Philip Withnall <pwithnall@endlessos.org>
-Date: Wed, 10 Feb 2021 21:16:39 +0000
-Subject: [PATCH 1/3] gkeyfilesettingsbackend: Fix basename handling when group
- is unset
-
-Fix an effective regression in commit
-7781a9cbd2fd0aa84bee0f4eee88470640ff6706, which happens when
-`convert_path()` is called with a `key` which contains no slashes. In
-that case, the `key` is entirely the `basename`.
-
-Prior to commit 7781a9cb, the code worked through a fluke of `i == -1`
-cancelling out with the various additions in the `g_memdup()` call, and
-effectively resulting in `g_strdup (key)`.
-
-Spotted by Guido Berhoerster.
-
-Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
----
- gio/gkeyfilesettingsbackend.c | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/gio/gkeyfilesettingsbackend.c b/gio/gkeyfilesettingsbackend.c
-index 25b057672..861c3a661 100644
---- a/gio/gkeyfilesettingsbackend.c
-+++ b/gio/gkeyfilesettingsbackend.c
-@@ -185,7 +185,12 @@ convert_path (GKeyfileSettingsBackend  *kfsb,
-     }
- 
-   if (basename)
--    *basename = g_memdup2 (last_slash + 1, key_len - (last_slash - key));
-+    {
-+      if (last_slash != NULL)
-+        *basename = g_memdup2 (last_slash + 1, key_len - (last_slash - key));
-+      else
-+        *basename = g_strdup (key);
-+    }
- 
-   return TRUE;
- }
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-17.patch b/gnu/packages/patches/glib-CVE-2021-27219-17.patch
deleted file mode 100644
index 3153979071..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-17.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From 31e0d403ba635dbbacbfbff74295e5db02558d76 Mon Sep 17 00:00:00 2001
-From: Philip Withnall <pwithnall@endlessos.org>
-Date: Wed, 10 Feb 2021 21:19:30 +0000
-Subject: [PATCH 2/3] gkeyfilesettingsbackend: Disallow empty key or group
- names
-
-These should never have been allowed; they will result in precondition
-failures from the `GKeyFile` later on in the code.
-
-A test will be added for this shortly.
-
-Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
----
- gio/gkeyfilesettingsbackend.c | 7 +++++++
- 1 file changed, 7 insertions(+)
-
-diff --git a/gio/gkeyfilesettingsbackend.c b/gio/gkeyfilesettingsbackend.c
-index 861c3a661..de216e615 100644
---- a/gio/gkeyfilesettingsbackend.c
-+++ b/gio/gkeyfilesettingsbackend.c
-@@ -158,6 +158,13 @@ convert_path (GKeyfileSettingsBackend  *kfsb,
- 
-   last_slash = strrchr (key, '/');
- 
-+  /* Disallow empty group names or key names */
-+  if (key_len == 0 ||
-+      (last_slash != NULL &&
-+       (*(last_slash + 1) == '\0' ||
-+        last_slash == key)))
-+    return FALSE;
-+
-   if (kfsb->root_group)
-     {
-       /* if a root_group was specified, make sure the user hasn't given
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-18.patch b/gnu/packages/patches/glib-CVE-2021-27219-18.patch
deleted file mode 100644
index c18d44ddeb..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-18.patch
+++ /dev/null
@@ -1,232 +0,0 @@
-Backport of:
-
-From 221c26685354dea2b2732df94404e8e5e77a1591 Mon Sep 17 00:00:00 2001
-From: Philip Withnall <pwithnall@endlessos.org>
-Date: Wed, 10 Feb 2021 21:21:36 +0000
-Subject: [PATCH 3/3] tests: Add tests for key name handling in the keyfile
- backend
-
-This tests the two recent commits.
-
-Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
----
- gio/tests/gsettings.c | 171 +++++++++++++++++++++++++++++++++++++++++-
- 1 file changed, 170 insertions(+), 1 deletion(-)
-
-diff --git a/gio/tests/gsettings.c b/gio/tests/gsettings.c
-index baadca8f5..afe594a23 100644
---- a/gio/tests/gsettings.c
-+++ b/gio/tests/gsettings.c
-@@ -1,3 +1,4 @@
-+#include <errno.h>
- #include <stdlib.h>
- #include <locale.h>
- #include <libintl.h>
-@@ -1740,6 +1741,14 @@ key_changed_cb (GSettings *settings, const gchar *key, gpointer data)
-   (*b) = TRUE;
- }
- 
-+typedef struct
-+{
-+  const gchar *path;
-+  const gchar *root_group;
-+  const gchar *keyfile_group;
-+  const gchar *root_path;
-+} KeyfileTestData;
-+
- /*
-  * Test that using a keyfile works
-  */
-@@ -1834,7 +1843,11 @@ test_keyfile (Fixture       *fixture,
-   g_free (str);
- 
-   g_settings_set (settings, "farewell", "s", "cheerio");
--  
-+
-+  /* Check that empty keys/groups are not allowed. */
-+  g_assert_false (g_settings_is_writable (settings, ""));
-+  g_assert_false (g_settings_is_writable (settings, "/"));
-+
-   /* When executing as root, changing the mode of the keyfile will have
-    * no effect on the writability of the settings.
-    */
-@@ -1866,6 +1879,149 @@ test_keyfile (Fixture       *fixture,
-   g_free (keyfile_path);
- }
- 
-+/*
-+ * Test that using a keyfile works with a schema with no path set.
-+ */
-+static void
-+test_keyfile_no_path (Fixture       *fixture,
-+                      gconstpointer  user_data)
-+{
-+  const KeyfileTestData *test_data = user_data;
-+  GSettingsBackend *kf_backend;
-+  GSettings *settings;
-+  GKeyFile *keyfile;
-+  gboolean writable;
-+  gchar *key = NULL;
-+  GError *error = NULL;
-+  gchar *keyfile_path = NULL, *store_path = NULL;
-+
-+  keyfile_path = g_build_filename (fixture->tmp_dir, "keyfile", NULL);
-+  store_path = g_build_filename (keyfile_path, "gsettings.store", NULL);
-+  kf_backend = g_keyfile_settings_backend_new (store_path, test_data->root_path, test_data->root_group);
-+  settings = g_settings_new_with_backend_and_path ("org.gtk.test.no-path", kf_backend, test_data->path);
-+  g_object_unref (kf_backend);
-+
-+  g_settings_reset (settings, "test-boolean");
-+  g_assert_true (g_settings_get_boolean (settings, "test-boolean"));
-+
-+  writable = g_settings_is_writable (settings, "test-boolean");
-+  g_assert_true (writable);
-+  g_settings_set (settings, "test-boolean", "b", FALSE);
-+
-+  g_assert_false (g_settings_get_boolean (settings, "test-boolean"));
-+
-+  g_settings_delay (settings);
-+  g_settings_set (settings, "test-boolean", "b", TRUE);
-+  g_settings_apply (settings);
-+
-+  keyfile = g_key_file_new ();
-+  g_assert_true (g_key_file_load_from_file (keyfile, store_path, 0, NULL));
-+
-+  g_assert_true (g_key_file_get_boolean (keyfile, test_data->keyfile_group, "test-boolean", NULL));
-+
-+  g_key_file_free (keyfile);
-+
-+  g_settings_reset (settings, "test-boolean");
-+  g_settings_apply (settings);
-+  keyfile = g_key_file_new ();
-+  g_assert_true (g_key_file_load_from_file (keyfile, store_path, 0, NULL));
-+
-+  g_assert_false (g_key_file_get_string (keyfile, test_data->keyfile_group, "test-boolean", &error));
-+  g_assert_error (error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND);
-+  g_clear_error (&error);
-+
-+  /* Check that empty keys/groups are not allowed. */
-+  g_assert_false (g_settings_is_writable (settings, ""));
-+  g_assert_false (g_settings_is_writable (settings, "/"));
-+
-+  /* Keys which ghost the root group name are not allowed. This can only be
-+   * tested when the path is `/` as otherwise it acts as a prefix and prevents
-+   * any ghosting. */
-+  if (g_str_equal (test_data->path, "/"))
-+    {
-+      key = g_strdup_printf ("%s/%s", test_data->root_group, "");
-+      g_assert_false (g_settings_is_writable (settings, key));
-+      g_free (key);
-+
-+      key = g_strdup_printf ("%s/%s", test_data->root_group, "/");
-+      g_assert_false (g_settings_is_writable (settings, key));
-+      g_free (key);
-+
-+      key = g_strdup_printf ("%s/%s", test_data->root_group, "test-boolean");
-+      g_assert_false (g_settings_is_writable (settings, key));
-+      g_free (key);
-+    }
-+
-+  g_key_file_free (keyfile);
-+  g_object_unref (settings);
-+
-+  /* Clean up the temporary directory. */
-+  g_assert_cmpint (g_chmod (keyfile_path, 0777) == 0 ? 0 : errno, ==, 0);
-+  g_assert_cmpint (g_remove (store_path) == 0 ? 0 : errno, ==, 0);
-+  g_assert_cmpint (g_rmdir (keyfile_path) == 0 ? 0 : errno, ==, 0);
-+  g_free (store_path);
-+  g_free (keyfile_path);
-+}
-+
-+/*
-+ * Test that a keyfile rejects writes to keys outside its root path.
-+ */
-+static void
-+test_keyfile_outside_root_path (Fixture       *fixture,
-+                                gconstpointer  user_data)
-+{
-+  GSettingsBackend *kf_backend;
-+  GSettings *settings;
-+  gchar *keyfile_path = NULL, *store_path = NULL;
-+
-+  keyfile_path = g_build_filename (fixture->tmp_dir, "keyfile", NULL);
-+  store_path = g_build_filename (keyfile_path, "gsettings.store", NULL);
-+  kf_backend = g_keyfile_settings_backend_new (store_path, "/tests/basic-types/", "root");
-+  settings = g_settings_new_with_backend_and_path ("org.gtk.test.no-path", kf_backend, "/tests/");
-+  g_object_unref (kf_backend);
-+
-+  g_assert_false (g_settings_is_writable (settings, "test-boolean"));
-+
-+  g_object_unref (settings);
-+
-+  /* Clean up the temporary directory. The keyfile probably doesn’t exist, so
-+   * don’t error on failure. */
-+  g_remove (store_path);
-+  g_assert_cmpint (g_rmdir (keyfile_path) == 0 ? 0 : errno, ==, 0);
-+  g_free (store_path);
-+  g_free (keyfile_path);
-+}
-+
-+/*
-+ * Test that a keyfile rejects writes to keys in the root if no root group is set.
-+ */
-+static void
-+test_keyfile_no_root_group (Fixture       *fixture,
-+                            gconstpointer  user_data)
-+{
-+  GSettingsBackend *kf_backend;
-+  GSettings *settings;
-+  gchar *keyfile_path = NULL, *store_path = NULL;
-+
-+  keyfile_path = g_build_filename (fixture->tmp_dir, "keyfile", NULL);
-+  store_path = g_build_filename (keyfile_path, "gsettings.store", NULL);
-+  kf_backend = g_keyfile_settings_backend_new (store_path, "/", NULL);
-+  settings = g_settings_new_with_backend_and_path ("org.gtk.test.no-path", kf_backend, "/");
-+  g_object_unref (kf_backend);
-+
-+  g_assert_false (g_settings_is_writable (settings, "test-boolean"));
-+  g_assert_true (g_settings_is_writable (settings, "child/test-boolean"));
-+
-+  g_object_unref (settings);
-+
-+  /* Clean up the temporary directory. The keyfile probably doesn’t exist, so
-+   * don’t error on failure. */
-+  g_remove (store_path);
-+  g_assert_cmpint (g_rmdir (keyfile_path) == 0 ? 0 : errno, ==, 0);
-+  g_free (store_path);
-+  g_free (keyfile_path);
-+}
-+
- /* Test that getting child schemas works
-  */
- static void
-@@ -2844,6 +3000,14 @@ main (int argc, char *argv[])
-   gchar *override_text;
-   gchar *enums;
-   gint result;
-+  const KeyfileTestData keyfile_test_data_explicit_path = { "/tests/", "root", "tests", "/" };
-+  const KeyfileTestData keyfile_test_data_empty_path = { "/", "root", "root", "/" };
-+  const KeyfileTestData keyfile_test_data_long_path = {
-+    "/tests/path/is/very/long/and/this/makes/some/comparisons/take/a/different/branch/",
-+    "root",
-+    "tests/path/is/very/long/and/this/makes/some/comparisons/take/a/different/branch",
-+    "/"
-+  };
- 
- /* Meson build sets this */
- #ifdef TEST_LOCALE_PATH
-@@ -2967,6 +3131,11 @@ main (int argc, char *argv[])
-     }
- 
-   g_test_add ("/gsettings/keyfile", Fixture, NULL, setup, test_keyfile, teardown);
-+  g_test_add ("/gsettings/keyfile/explicit-path", Fixture, &keyfile_test_data_explicit_path, setup, test_keyfile_no_path, teardown);
-+  g_test_add ("/gsettings/keyfile/empty-path", Fixture, &keyfile_test_data_empty_path, setup, test_keyfile_no_path, teardown);
-+  g_test_add ("/gsettings/keyfile/long-path", Fixture, &keyfile_test_data_long_path, setup, test_keyfile_no_path, teardown);
-+  g_test_add ("/gsettings/keyfile/outside-root-path", Fixture, NULL, setup, test_keyfile_outside_root_path, teardown);
-+  g_test_add ("/gsettings/keyfile/no-root-group", Fixture, NULL, setup, test_keyfile_no_root_group, teardown);
-   g_test_add_func ("/gsettings/child-schema", test_child_schema);
-   g_test_add_func ("/gsettings/strinfo", test_strinfo);
-   g_test_add_func ("/gsettings/enums", test_enums);
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-28153.patch b/gnu/packages/patches/glib-CVE-2021-28153.patch
deleted file mode 100644
index 54443186d9..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-28153.patch
+++ /dev/null
@@ -1,283 +0,0 @@
-Backport of:
-
-From 317b3b587058a05dca95d56dac26568c5b098d33 Mon Sep 17 00:00:00 2001
-From: Philip Withnall <pwithnall@endlessos.org>
-Date: Wed, 24 Feb 2021 17:35:40 +0000
-Subject: [PATCH] glocalfileoutputstream: Fix CREATE_REPLACE_DESTINATION
- with symlinks
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The `G_FILE_CREATE_REPLACE_DESTINATION` flag is equivalent to unlinking
-the destination file and re-creating it from scratch. That did
-previously work, but in the process the code would call `open(O_CREAT)`
-on the file. If the file was a dangling symlink, this would create the
-destination file (empty). That’s not an intended side-effect, and has
-security implications if the symlink is controlled by a lower-privileged
-process.
-
-Fix that by not opening the destination file if it’s a symlink, and
-adjusting the rest of the code to cope with
- - the fact that `fd == -1` is not an error iff `is_symlink` is true,
- - and that `original_stat` will contain the `lstat()` results for the
-   symlink now, rather than the `stat()` results for its target (again,
-   iff `is_symlink` is true).
-
-This means that the target of the dangling symlink is no longer created,
-which was the bug. The symlink itself continues to be replaced (as
-before) with the new file — this is the intended behaviour of
-`g_file_replace()`.
-
-The behaviour for non-symlink cases, or cases where the symlink was not
-dangling, should be unchanged.
-
-Includes a unit test.
-
-Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
-
-Fixes: #2325
----
- gio/glocalfileoutputstream.c |  70 ++++++++++++++++-------
- gio/tests/file.c             | 108 +++++++++++++++++++++++++++++++++++
- 2 files changed, 158 insertions(+), 20 deletions(-)
-
-diff --git a/gio/glocalfileoutputstream.c b/gio/glocalfileoutputstream.c
-index a3dd62172..553fcbbae 100644
---- a/gio/glocalfileoutputstream.c
-+++ b/gio/glocalfileoutputstream.c
-@@ -874,16 +874,22 @@ handle_overwrite_open (const char    *filename,
-       /* Could be a symlink, or it could be a regular ELOOP error,
-        * but then the next open will fail too. */
-       is_symlink = TRUE;
--      fd = g_open (filename, open_flags, mode);
-+      if (!(flags & G_FILE_CREATE_REPLACE_DESTINATION))
-+        fd = g_open (filename, open_flags, mode);
-     }
--#else
--  fd = g_open (filename, open_flags, mode);
--  errsv = errno;
-+#else  /* if !O_NOFOLLOW */
-   /* This is racy, but we do it as soon as possible to minimize the race */
-   is_symlink = g_file_test (filename, G_FILE_TEST_IS_SYMLINK);
-+
-+  if (!is_symlink || !(flags & G_FILE_CREATE_REPLACE_DESTINATION))
-+    {
-+      fd = g_open (filename, open_flags, mode);
-+      errsv = errno;
-+    }
- #endif
- 
--  if (fd == -1)
-+  if (fd == -1 &&
-+      (!is_symlink || !(flags & G_FILE_CREATE_REPLACE_DESTINATION)))
-     {
-       char *display_name = g_filename_display_name (filename);
-       g_set_error (error, G_IO_ERROR,
-@@ -893,13 +899,25 @@ handle_overwrite_open (const char    *filename,
-       g_free (display_name);
-       return -1;
-     }
--  
-+
-+  if (!is_symlink)
-+    {
- #ifdef G_OS_WIN32
--  res = GLIB_PRIVATE_CALL (g_win32_fstat) (fd, &original_stat);
-+      res = GLIB_PRIVATE_CALL (g_win32_fstat) (fd, &original_stat);
- #else
--  res = fstat (fd, &original_stat);
-+      res = fstat (fd, &original_stat);
- #endif
--  errsv = errno;
-+      errsv = errno;
-+    }
-+  else
-+    {
-+#ifdef G_OS_WIN32
-+      res = GLIB_PRIVATE_CALL (g_win32_lstat_utf8) (filename, &original_stat);
-+#else
-+      res = g_lstat (filename, &original_stat);
-+#endif
-+      errsv = errno;
-+    }
- 
-   if (res != 0)
-     {
-@@ -916,16 +934,27 @@ handle_overwrite_open (const char    *filename,
-   if (!S_ISREG (original_stat.st_mode))
-     {
-       if (S_ISDIR (original_stat.st_mode))
--	g_set_error_literal (error,
--                             G_IO_ERROR,
--                             G_IO_ERROR_IS_DIRECTORY,
--                             _("Target file is a directory"));
--      else
--	g_set_error_literal (error,
--                             G_IO_ERROR,
--                             G_IO_ERROR_NOT_REGULAR_FILE,
--                             _("Target file is not a regular file"));
--      goto err_out;
-+        {
-+          g_set_error_literal (error,
-+                               G_IO_ERROR,
-+                               G_IO_ERROR_IS_DIRECTORY,
-+                               _("Target file is a directory"));
-+          goto err_out;
-+        }
-+      else if (!is_symlink ||
-+#ifdef S_ISLNK
-+               !S_ISLNK (original_stat.st_mode)
-+#else
-+               FALSE
-+#endif
-+               )
-+        {
-+          g_set_error_literal (error,
-+                               G_IO_ERROR,
-+                               G_IO_ERROR_NOT_REGULAR_FILE,
-+                               _("Target file is not a regular file"));
-+          goto err_out;
-+        }
-     }
-   
-   if (etag != NULL)
-@@ -1006,7 +1035,8 @@ handle_overwrite_open (const char    *filename,
- 	    }
- 	}
- 
--      g_close (fd, NULL);
-+      if (fd >= 0)
-+        g_close (fd, NULL);
-       *temp_filename = tmp_filename;
-       return tmpfd;
-     }
-diff --git a/gio/tests/file.c b/gio/tests/file.c
-index efb2eaadd..bc55f3af4 100644
---- a/gio/tests/file.c
-+++ b/gio/tests/file.c
-@@ -804,6 +804,113 @@ test_replace_cancel (void)
-   g_object_unref (tmpdir);
- }
- 
-+static void
-+test_replace_symlink (void)
-+{
-+#ifdef G_OS_UNIX
-+  gchar *tmpdir_path = NULL;
-+  GFile *tmpdir = NULL, *source_file = NULL, *target_file = NULL;
-+  GFileOutputStream *stream = NULL;
-+  const gchar *new_contents = "this is a test message which should be written to source and not target";
-+  gsize n_written;
-+  GFileEnumerator *enumerator = NULL;
-+  GFileInfo *info = NULL;
-+  gchar *contents = NULL;
-+  gsize length = 0;
-+  GError *local_error = NULL;
-+
-+  g_test_bug ("https://gitlab.gnome.org/GNOME/glib/-/issues/2325");
-+  g_test_summary ("Test that G_FILE_CREATE_REPLACE_DESTINATION doesn’t follow symlinks");
-+
-+  /* Create a fresh, empty working directory. */
-+  tmpdir_path = g_dir_make_tmp ("g_file_replace_symlink_XXXXXX", &local_error);
-+  g_assert_no_error (local_error);
-+  tmpdir = g_file_new_for_path (tmpdir_path);
-+
-+  g_test_message ("Using temporary directory %s", tmpdir_path);
-+  g_free (tmpdir_path);
-+
-+  /* Create symlink `source` which points to `target`. */
-+  source_file = g_file_get_child (tmpdir, "source");
-+  target_file = g_file_get_child (tmpdir, "target");
-+  g_file_make_symbolic_link (source_file, "target", NULL, &local_error);
-+  g_assert_no_error (local_error);
-+
-+  /* Ensure that `target` doesn’t exist */
-+  g_assert_false (g_file_query_exists (target_file, NULL));
-+
-+  /* Replace the `source` symlink with a regular file using
-+   * %G_FILE_CREATE_REPLACE_DESTINATION, which should replace it *without*
-+   * following the symlink */
-+  stream = g_file_replace (source_file, NULL, FALSE  /* no backup */,
-+                           G_FILE_CREATE_REPLACE_DESTINATION, NULL, &local_error);
-+  g_assert_no_error (local_error);
-+
-+  g_output_stream_write_all (G_OUTPUT_STREAM (stream), new_contents, strlen (new_contents),
-+                             &n_written, NULL, &local_error);
-+  g_assert_no_error (local_error);
-+  g_assert_cmpint (n_written, ==, strlen (new_contents));
-+
-+  g_output_stream_close (G_OUTPUT_STREAM (stream), NULL, &local_error);
-+  g_assert_no_error (local_error);
-+
-+  g_clear_object (&stream);
-+
-+  /* At this point, there should still only be one file: `source`. It should
-+   * now be a regular file. `target` should not exist. */
-+  enumerator = g_file_enumerate_children (tmpdir,
-+                                          G_FILE_ATTRIBUTE_STANDARD_NAME ","
-+                                          G_FILE_ATTRIBUTE_STANDARD_TYPE,
-+                                          G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, NULL, &local_error);
-+  g_assert_no_error (local_error);
-+
-+  info = g_file_enumerator_next_file (enumerator, NULL, &local_error);
-+  g_assert_no_error (local_error);
-+  g_assert_nonnull (info);
-+
-+  g_assert_cmpstr (g_file_info_get_name (info), ==, "source");
-+  g_assert_cmpint (g_file_info_get_file_type (info), ==, G_FILE_TYPE_REGULAR);
-+
-+  g_clear_object (&info);
-+
-+  info = g_file_enumerator_next_file (enumerator, NULL, &local_error);
-+  g_assert_no_error (local_error);
-+  g_assert_null (info);
-+
-+  g_file_enumerator_close (enumerator, NULL, &local_error);
-+  g_assert_no_error (local_error);
-+  g_clear_object (&enumerator);
-+
-+  /* Double-check that `target` doesn’t exist */
-+  g_assert_false (g_file_query_exists (target_file, NULL));
-+
-+  /* Check the content of `source`. */
-+  g_file_load_contents (source_file,
-+                        NULL,
-+                        &contents,
-+                        &length,
-+                        NULL,
-+                        &local_error);
-+  g_assert_no_error (local_error);
-+  g_assert_cmpstr (contents, ==, new_contents);
-+  g_assert_cmpuint (length, ==, strlen (new_contents));
-+  g_free (contents);
-+
-+  /* Tidy up. */
-+  g_file_delete (source_file, NULL, &local_error);
-+  g_assert_no_error (local_error);
-+
-+  g_file_delete (tmpdir, NULL, &local_error);
-+  g_assert_no_error (local_error);
-+
-+  g_clear_object (&target_file);
-+  g_clear_object (&source_file);
-+  g_clear_object (&tmpdir);
-+#else  /* if !G_OS_UNIX */
-+  g_test_skip ("Symlink replacement tests can only be run on Unix")
-+#endif
-+}
-+
- static void
- on_file_deleted (GObject      *object,
- 		 GAsyncResult *result,
-@@ -1754,6 +1861,7 @@ main (int argc, char *argv[])
-   g_test_add_data_func ("/file/async-create-delete/4096", GINT_TO_POINTER (4096), test_create_delete);
-   g_test_add_func ("/file/replace-load", test_replace_load);
-   g_test_add_func ("/file/replace-cancel", test_replace_cancel);
-+  g_test_add_func ("/file/replace-symlink", test_replace_symlink);
-   g_test_add_func ("/file/async-delete", test_async_delete);
- #ifdef G_OS_UNIX
-   g_test_add_func ("/file/copy-preserve-mode", test_copy_preserve_mode);
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-networking-32-bit-time.patch b/gnu/packages/patches/glib-networking-32-bit-time.patch
new file mode 100644
index 0000000000..a437310270
--- /dev/null
+++ b/gnu/packages/patches/glib-networking-32-bit-time.patch
@@ -0,0 +1,61 @@
+Work around a year-2038 issue when building with a 32-bit 'time_t'
+on 32-bit platforms:
+
+  https://gitlab.gnome.org/GNOME/glib-networking/-/issues/172
+
+From 4f8ca86a0e460794188c3355f0c7cc11fdbe4229 Mon Sep 17 00:00:00 2001
+From: Simon McVittie <simon.mcvittie@collabora.co.uk>
+Date: Tue, 21 Sep 2021 17:07:44 +0000
+Subject: [PATCH] tests: Accept GNUTLS' workaround for limited size of time_t
+
+---
+ tls/tests/certificate.c | 15 +++++++++++++++
+ tls/tests/meson.build   |  1 +
+ 2 files changed, 16 insertions(+)
+
+diff --git a/tls/tests/certificate.c b/tls/tests/certificate.c
+index c0100d30..d216c710 100644
+--- a/tls/tests/certificate.c
++++ b/tls/tests/certificate.c
+@@ -672,6 +672,12 @@ test_certificate_not_valid_before (void)
+   g_object_unref (cert);
+ }
+ 
++/* On 32-bit, GNUTLS caps expiry times at 2037-12-31 23:23:23 to avoid
++ * overflowing time_t. Hopefully by 2037, either 32-bit will finally have
++ * died out, or GNUTLS will rethink its approach to
++ * https://gitlab.com/gnutls/gnutls/-/issues/370 */
++#define GNUTLS_32_BIT_NOT_VALID_AFTER_MAX 2145914603
++
+ static void
+ test_certificate_not_valid_after (void)
+ {
+@@ -686,7 +692,16 @@ test_certificate_not_valid_after (void)
+   actual = g_tls_certificate_get_not_valid_after (cert);
+   g_assert_nonnull (actual);
+   actual_str = g_date_time_format_iso8601 (actual);
++
++#if SIZEOF_TIME_T <= 4
++  if (g_date_time_to_unix (actual) == GNUTLS_32_BIT_NOT_VALID_AFTER_MAX)
++    g_test_incomplete ("not-valid-after date not representable on 32-bit");
++  else
++    g_assert_cmpstr (actual_str, ==, EXPECTED_NOT_VALID_AFTER);
++#else
+   g_assert_cmpstr (actual_str, ==, EXPECTED_NOT_VALID_AFTER);
++#endif
++
+   g_free (actual_str);
+   g_date_time_unref (actual);
+   g_object_unref (cert);
+diff --git a/tls/tests/meson.build b/tls/tests/meson.build
+index e9c7d8c6..7415f913 100644
+--- a/tls/tests/meson.build
++++ b/tls/tests/meson.build
+@@ -69,6 +69,7 @@ foreach backend: backends
+     test_cflags = cflags + [
+       '-DBACKEND="@0@"'.format(backend),
+       '-DBACKEND_IS_' + backend.to_upper(),
++      '-DSIZEOF_TIME_T=@0@'.format(cc.sizeof('time_t', prefix: '#include <time.h>')),
+     ]
+ 
+     if backend == 'openssl'
diff --git a/gnu/packages/patches/glib-networking-gnutls-binding.patch b/gnu/packages/patches/glib-networking-gnutls-binding.patch
new file mode 100644
index 0000000000..91d0743056
--- /dev/null
+++ b/gnu/packages/patches/glib-networking-gnutls-binding.patch
@@ -0,0 +1,21 @@
+Skip failing test in 'test_connection_binding_match_tls_unique'
+in 'tls/tests/connection.c' when building glib-networking against
+GnuTLS 3.7.2.  The failure stems from the fact that
+'gnutls_session_channel_binding' returns GNUTLS_E_INVALID_REQUEST
+is known upstream:
+
+  https://gitlab.gnome.org/GNOME/glib-networking/-/issues/164
+
+diff --git a/tls/tests/connection.c b/tls/tests/connection.c
+index 036df04..347c7a4 100644
+--- a/tls/tests/connection.c
++++ b/tls/tests/connection.c
+@@ -3037,8 +3037,6 @@ main (int   argc,
+               setup_connection, test_connection_missing_server_identity, teardown_connection);
+   g_test_add ("/tls/" BACKEND "/connection/peer-certificate-notify", TestConnection, NULL,
+               setup_connection, test_peer_certificate_notify, teardown_connection);
+-  g_test_add ("/tls/" BACKEND "/connection/binding/match-tls-unique", TestConnection, NULL,
+-              setup_connection, test_connection_binding_match_tls_unique, teardown_connection);
+   g_test_add ("/tls/" BACKEND "/connection/binding/match-tls-server-end-point", TestConnection, NULL,
+               setup_connection, test_connection_binding_match_tls_server_end_point, teardown_connection);
+   g_test_add ("/tls/" BACKEND "/connection/binding/match-tls-exporter", TestConnection, NULL,
diff --git a/gnu/packages/patches/glib-skip-failing-test.patch b/gnu/packages/patches/glib-skip-failing-test.patch
new file mode 100644
index 0000000000..c7706aaa74
--- /dev/null
+++ b/gnu/packages/patches/glib-skip-failing-test.patch
@@ -0,0 +1,27 @@
+This test timed out on powerpc-linux even after extending the
+test_timeout_slow to 1800 seconds. Previously we tried to work around
+this test by extending test_timeout_slow by 1.5 its previous value.
+
+---
+ gio/tests/meson.build | 4 ----
+ 1 file changed, 4 deletions(-)
+
+diff --git a/gio/tests/meson.build b/gio/tests/meson.build
+index a926ae0..4fdbe7a 100644
+--- a/gio/tests/meson.build
++++ b/gio/tests/meson.build
+@@ -317,10 +317,6 @@ if host_machine.system() != 'windows'
+         'extra_sources' : [extra_sources, gdbus_test_codegen_generated, gdbus_test_codegen_generated_interface_info],
+         'c_args' : ['-DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_32'],
+       },
+-      'gdbus-threading' : {
+-        'extra_sources' : extra_sources,
+-        'suite' : ['slow'],
+-      },
+       'gmenumodel' : {
+         'extra_sources' : extra_sources,
+         'suite' : ['slow'],
+
+-- 
+2.31.1
+
diff --git a/gnu/packages/patches/glib-tests-timer.patch b/gnu/packages/patches/glib-tests-timer.patch
deleted file mode 100644
index e37425c0c8..0000000000
--- a/gnu/packages/patches/glib-tests-timer.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-* On i686 floating-point roundoff errors could sometimes cause this check to
-  fail depending on the elapsed microseconds.  Improve rounding by adding a
-  fractional bit.
-
---- glib-2.40.0/glib/tests/timer.c	2014-03-05 08:05:42.000000000 -0600
-+++ glib-2.40.0/glib/tests/timer.c	2014-07-10 16:33:12.746862822 -0500
-@@ -35,7 +35,7 @@
-   elapsed = g_timer_elapsed (timer, &micros);
- 
-   g_assert_cmpfloat (elapsed, <, 1.0);
--  g_assert_cmpuint (micros, ==, ((guint64)(elapsed * 1e6)) % 1000000);
-+  g_assert_cmpuint (micros, ==, ((guint64)(elapsed * 1e6 + 0.5)) % 1000000);
- 
-   g_timer_destroy (timer);
- }
diff --git a/gnu/packages/patches/glibc-2.27-git-fixes.patch b/gnu/packages/patches/glibc-2.27-git-fixes.patch
deleted file mode 100644
index 4ed67c7c25..0000000000
--- a/gnu/packages/patches/glibc-2.27-git-fixes.patch
+++ /dev/null
@@ -1,702 +0,0 @@
-These commits are cherry-picked from the "release/2.27/master" branch.
-
-https://sourceware.org/git/?p=glibc.git;a=shortlog;h=refs/heads/release/2.27/master
-
-Currently, we have the following (with NEWS and ChangeLog entries omitted).
-
-56170e064e2b21ce204f0817733e92f1730541ea
-516fa6080481a1433c173320b1c1432868e1e38a
-f36553bf6a4f69070f99badbdab5802b43e6e211
-7c6304182b9f422b782ace1cdd3efbde056aec36
-78a90c2f74a2012dd3eff302189e47ff6779a757
-1e52d8e65a58c49a48549053a1b89c06240e0c6c
-55ad82e45c313454de657931898e974a7a036cad
-
-From 56170e064e2b21ce204f0817733e92f1730541ea Mon Sep 17 00:00:00 2001
-From: Igor Gnatenko <ignatenko@redhat.com>
-Date: Wed, 7 Feb 2018 13:53:10 +0100
-Subject: [PATCH] Linux: use reserved name __key in pkey_get [BZ #22797]
-
-_key is not reserved name and we should avoid using that. It seems that
-it was simple typo when pkey_* was implemented.
-
-(cherry picked from commit 388ff7bd0d57d7061fdd39a2f26f65687e8058da)
-
-diff --git a/sysdeps/unix/sysv/linux/bits/mman-shared.h b/sysdeps/unix/sysv/linux/bits/mman-shared.h
-index 7715e680ca..d15ba95c9d 100644
---- a/sysdeps/unix/sysv/linux/bits/mman-shared.h
-+++ b/sysdeps/unix/sysv/linux/bits/mman-shared.h
-@@ -61,7 +61,7 @@ int pkey_set (int __key, unsigned int __access_rights) __THROW;
- 
- /* Return the access rights for the current thread for KEY, which must
-    have been allocated using pkey_alloc.  */
--int pkey_get (int _key) __THROW;
-+int pkey_get (int __key) __THROW;
- 
- /* Free an allocated protection key, which must have been allocated
-    using pkey_alloc.  */
-
-From 516fa6080481a1433c173320b1c1432868e1e38a Mon Sep 17 00:00:00 2001
-From: "Dmitry V. Levin" <ldv@altlinux.org>
-Date: Fri, 29 Dec 2017 23:19:32 +0000
-Subject: [PATCH] linux/aarch64: sync sys/ptrace.h with Linux 4.15 [BZ #22433]
-
-Remove compat-specific constants that were never exported by kernel
-headers under these names.  Before linux commit v3.7-rc1~16^2~1 they
-were exported with COMPAT_ prefix, and since that commit they are not
-exported at all.
-
-* sysdeps/unix/sysv/linux/aarch64/sys/ptrace.h (__ptrace_request):
-Remove arm-specific PTRACE_GET_THREAD_AREA, PTRACE_GETHBPREGS,
-and PTRACE_SETHBPREGS.
-
-(cherry picked from commit 2fd4bbaa1446f1be700e10c526cf585a796c4991)
-
-diff --git a/sysdeps/unix/sysv/linux/aarch64/sys/ptrace.h b/sysdeps/unix/sysv/linux/aarch64/sys/ptrace.h
-index 4be45b95ff..444edbb702 100644
---- a/sysdeps/unix/sysv/linux/aarch64/sys/ptrace.h
-+++ b/sysdeps/unix/sysv/linux/aarch64/sys/ptrace.h
-@@ -78,18 +78,10 @@ enum __ptrace_request
-   PTRACE_DETACH = 17,
- #define PT_DETACH PTRACE_DETACH
- 
--  PTRACE_GET_THREAD_AREA = 22,
--
-   /* Continue and stop at the next entry to or return from syscall.  */
-   PTRACE_SYSCALL = 24,
- #define PT_SYSCALL PTRACE_SYSCALL
- 
--  /* Get all hardware breakpoint registers.  */
--  PTRACE_GETHBPREGS = 29,
--
--  /* Set all hardware breakpoint registers.  */
--  PTRACE_SETHBPREGS = 30,
--
-   /* Set ptrace filter options.  */
-   PTRACE_SETOPTIONS = 0x4200,
- #define PT_SETOPTIONS PTRACE_SETOPTIONS
-
-From f36553bf6a4f69070f99badbdab5802b43e6e211 Mon Sep 17 00:00:00 2001
-From: Mike FABIAN <mfabian@redhat.com>
-Date: Mon, 19 Feb 2018 21:59:30 +0100
-Subject: [PATCH] =?UTF-8?q?Add=20missing=20=E2=80=9Creorder-end=E2=80=9D?=
- =?UTF-8?q?=20in=20LC=5FCOLLATE=20of=20et=5FEE=20[BZ=20#22517]?=
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-	[BZ #22517]
-	* localedata/locales/et_EE (LC_COLLATE): add missing “reorder-end”
-
-(cherry picked from commit 7ec5f9465e732e668d0dc94ac078ba68056d6d0a)
-
-diff --git a/localedata/locales/et_EE b/localedata/locales/et_EE
-index 9cb55b568f..bab7493c98 100644
---- a/localedata/locales/et_EE
-+++ b/localedata/locales/et_EE
-@@ -103,6 +103,8 @@ reorder-after <w>
- <U00FC> <u-diaresis>;<BAS>;<MIN>;IGNORE % ü
- <U00DC> <u-diaresis>;<BAS>;<CAP>;IGNORE % Ü
- 
-+reorder-end
-+
- END LC_COLLATE
- 
- LC_CTYPE
-
-From 7c6304182b9f422b782ace1cdd3efbde056aec36 Mon Sep 17 00:00:00 2001
-From: DJ Delorie <dj@redhat.com>
-Date: Thu, 1 Mar 2018 23:20:45 -0500
-Subject: [PATCH] [BZ #22342] Fix netgroup cache keys.
-
-Unlike other nscd caches, the netgroup cache contains two types of
-records - those for "iterate through a netgroup" (i.e. setnetgrent())
-and those for "is this user in this netgroup" (i.e. innetgr()),
-i.e. full and partial records.  The timeout code assumes these records
-have the same key for the group name, so that the collection of records
-that is "this netgroup" can be expired as a unit.
-
-However, the keys are not the same, as the in-netgroup key is generated
-by nscd rather than being passed to it from elsewhere, and is generated
-without the trailing NUL.  All other keys have the trailing NUL, and as
-noted in the linked BZ, debug statements confirm that two keys for the
-same netgroup are added to the cache with two different lengths.
-
-The result of this is that as records in the cache expire, the purge
-code only cleans out one of the two types of entries, resulting in
-stale, possibly incorrect, and possibly inconsistent cache data.
-
-The patch simply includes the existing NUL in the computation for the
-key length ('key' points to the char after the NUL, and 'group' to the
-first char of the group, so 'key-group' includes the first char to the
-NUL, inclusive).
-
-	[BZ #22342]
-	* nscd/netgroupcache.c (addinnetgrX): Include trailing NUL in
-	key value.
-
-Reviewed-by: Carlos O'Donell <carlos@redhat.com>
-(cherry picked from commit 1c81d55fc4b07b51adf68558ba74ce975153e580)
-
-diff --git a/nscd/netgroupcache.c b/nscd/netgroupcache.c
-index b832c9315f..2f187b208c 100644
---- a/nscd/netgroupcache.c
-+++ b/nscd/netgroupcache.c
-@@ -480,7 +480,7 @@ addinnetgrX (struct database_dyn *db, int fd, request_header *req,
- {
-   const char *group = key;
-   key = (char *) rawmemchr (key, '\0') + 1;
--  size_t group_len = key - group - 1;
-+  size_t group_len = key - group;
-   const char *host = *key++ ? key : NULL;
-   if (host != NULL)
-     key = (char *) rawmemchr (key, '\0') + 1;
-
-From 78a90c2f74a2012dd3eff302189e47ff6779a757 Mon Sep 17 00:00:00 2001
-From: Andreas Schwab <schwab@linux-m68k.org>
-Date: Fri, 2 Mar 2018 23:07:14 +0100
-Subject: [PATCH] Fix multiple definitions of __nss_*_database (bug 22918)
-
-(cherry picked from commit eaf6753f8aac33a36deb98c1031d1bad7b593d2d)
-
-diff --git a/nscd/gai.c b/nscd/gai.c
-index d081747797..576fd0045b 100644
---- a/nscd/gai.c
-+++ b/nscd/gai.c
-@@ -45,3 +45,6 @@
- #ifdef HAVE_LIBIDN
- # include <libidn/idn-stub.c>
- #endif
-+
-+/* Some variables normally defined in libc.  */
-+service_user *__nss_hosts_database attribute_hidden;
-diff --git a/nss/nsswitch.c b/nss/nsswitch.c
-index d5e655974f..b0f0c11a3e 100644
---- a/nss/nsswitch.c
-+++ b/nss/nsswitch.c
-@@ -62,7 +62,7 @@ static service_library *nss_new_service (name_database *database,
- 
- /* Declare external database variables.  */
- #define DEFINE_DATABASE(name)						      \
--  extern service_user *__nss_##name##_database attribute_hidden;	      \
-+  service_user *__nss_##name##_database attribute_hidden;		      \
-   weak_extern (__nss_##name##_database)
- #include "databases.def"
- #undef DEFINE_DATABASE
-diff --git a/nss/nsswitch.h b/nss/nsswitch.h
-index eccb535ef5..63573b9ebc 100644
---- a/nss/nsswitch.h
-+++ b/nss/nsswitch.h
-@@ -226,10 +226,10 @@ libc_hidden_proto (__nss_hostname_digits_dots)
- #define MAX_NR_ADDRS    48
- 
- /* Prototypes for __nss_*_lookup2 functions.  */
--#define DEFINE_DATABASE(arg)				    \
--  service_user *__nss_##arg##_database attribute_hidden;    \
--  int __nss_##arg##_lookup2 (service_user **, const char *, \
--			     const char *, void **);	    \
-+#define DEFINE_DATABASE(arg)						      \
-+  extern service_user *__nss_##arg##_database attribute_hidden;		      \
-+  int __nss_##arg##_lookup2 (service_user **, const char *,		      \
-+			     const char *, void **);			      \
-   libc_hidden_proto (__nss_##arg##_lookup2)
- #include "databases.def"
- #undef DEFINE_DATABASE
-diff --git a/posix/tst-rfc3484-2.c b/posix/tst-rfc3484-2.c
-index f509534ca9..8c64ac59ff 100644
---- a/posix/tst-rfc3484-2.c
-+++ b/posix/tst-rfc3484-2.c
-@@ -58,6 +58,7 @@ _res_hconf_init (void)
- #undef	USE_NSCD
- #include "../sysdeps/posix/getaddrinfo.c"
- 
-+service_user *__nss_hosts_database attribute_hidden;
- 
- /* This is the beginning of the real test code.  The above defines
-    (among other things) the function rfc3484_sort.  */
-diff --git a/posix/tst-rfc3484-3.c b/posix/tst-rfc3484-3.c
-index ae44087a10..1c61aaf844 100644
---- a/posix/tst-rfc3484-3.c
-+++ b/posix/tst-rfc3484-3.c
-@@ -58,6 +58,7 @@ _res_hconf_init (void)
- #undef	USE_NSCD
- #include "../sysdeps/posix/getaddrinfo.c"
- 
-+service_user *__nss_hosts_database attribute_hidden;
- 
- /* This is the beginning of the real test code.  The above defines
-    (among other things) the function rfc3484_sort.  */
-diff --git a/posix/tst-rfc3484.c b/posix/tst-rfc3484.c
-index 7f191abbbc..8f45848e44 100644
---- a/posix/tst-rfc3484.c
-+++ b/posix/tst-rfc3484.c
-@@ -58,6 +58,7 @@ _res_hconf_init (void)
- #undef	USE_NSCD
- #include "../sysdeps/posix/getaddrinfo.c"
- 
-+service_user *__nss_hosts_database attribute_hidden;
- 
- /* This is the beginning of the real test code.  The above defines
-    (among other things) the function rfc3484_sort.  */
-
-From 1e52d8e65a58c49a48549053a1b89c06240e0c6c Mon Sep 17 00:00:00 2001
-From: Adhemerval Zanella <adhemerval.zanella@linaro.org>
-Date: Fri, 17 Nov 2017 16:04:29 -0200
-Subject: [PATCH] i386: Fix i386 sigaction sa_restorer initialization
- (BZ#21269)
-
-This patch fixes the i386 sa_restorer field initialization for sigaction
-syscall for kernel with vDSO.  As described in bug report, i386 Linux
-(and compat on x86_64) interprets SA_RESTORER clear with nonzero
-sa_restorer as a request for stack switching if the SS segment is 'funny'.
-This means that anything that tries to mix glibc's signal handling with
-segmentation (for instance through modify_ldt syscall) is randomly broken
-depending on what values lands in sa_restorer.
-
-The testcase added  is based on Linux test tools/testing/selftests/x86/ldt_gdt.c,
-more specifically in do_multicpu_tests function.  The main changes are:
-
-  - C11 atomics instead of plain access.
-
-  - Remove x86_64 support which simplifies the syscall handling and fallbacks.
-
-  - Replicate only the test required to trigger the issue.
-
-Checked on i686-linux-gnu.
-
-	[BZ #21269]
-	* sysdeps/unix/sysv/linux/i386/Makefile (tests): Add tst-bz21269.
-	* sysdeps/unix/sysv/linux/i386/sigaction.c (SET_SA_RESTORER): Clear
-	sa_restorer for vDSO case.
-	* sysdeps/unix/sysv/linux/i386/tst-bz21269.c: New file.
-
-(cherry picked from commit 68448be208ee06e76665918b37b0a57e3e00c8b4)
-
-diff --git a/sysdeps/unix/sysv/linux/i386/Makefile b/sysdeps/unix/sysv/linux/i386/Makefile
-index 4080b8c966..da716e2c1b 100644
---- a/sysdeps/unix/sysv/linux/i386/Makefile
-+++ b/sysdeps/unix/sysv/linux/i386/Makefile
-@@ -3,6 +3,9 @@ default-abi := 32
- 
- ifeq ($(subdir),misc)
- sysdep_routines += ioperm iopl vm86
-+
-+tests += tst-bz21269
-+$(objpfx)tst-bz21269: $(shared-thread-library)
- endif
- 
- ifeq ($(subdir),elf)
-diff --git a/sysdeps/unix/sysv/linux/i386/sigaction.c b/sysdeps/unix/sysv/linux/i386/sigaction.c
-index a5eb9e0d3e..177ff60ee6 100644
---- a/sysdeps/unix/sysv/linux/i386/sigaction.c
-+++ b/sysdeps/unix/sysv/linux/i386/sigaction.c
-@@ -42,7 +42,6 @@ extern void restore_rt (void) asm ("__restore_rt") attribute_hidden;
- #endif
- extern void restore (void) asm ("__restore") attribute_hidden;
- 
--
- /* If ACT is not NULL, change the action for SIG to *ACT.
-    If OACT is not NULL, put the old action for SIG in *OACT.  */
- int
-@@ -65,6 +64,8 @@ __libc_sigaction (int sig, const struct sigaction *act, struct sigaction *oact)
- 	  kact.sa_restorer = ((act->sa_flags & SA_SIGINFO)
- 			      ? &restore_rt : &restore);
- 	}
-+      else
-+	kact.sa_restorer = NULL;
-     }
- 
-   /* XXX The size argument hopefully will have to be changed to the
-diff --git a/sysdeps/unix/sysv/linux/i386/tst-bz21269.c b/sysdeps/unix/sysv/linux/i386/tst-bz21269.c
-new file mode 100644
-index 0000000000..353e36507d
---- /dev/null
-+++ b/sysdeps/unix/sysv/linux/i386/tst-bz21269.c
-@@ -0,0 +1,233 @@
-+/* Test for i386 sigaction sa_restorer handling (BZ#21269)
-+   Copyright (C) 2017 Free Software Foundation, Inc.
-+   This file is part of the GNU C Library.
-+
-+   The GNU C 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.
-+
-+   The GNU C 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 the GNU C Library; if not, see
-+   <http://www.gnu.org/licenses/>.  */
-+
-+/* This is based on Linux test tools/testing/selftests/x86/ldt_gdt.c,
-+   more specifically in do_multicpu_tests function.  The main changes
-+   are:
-+
-+   - C11 atomics instead of plain access.
-+   - Remove x86_64 support which simplifies the syscall handling
-+     and fallbacks.
-+   - Replicate only the test required to trigger the issue for the
-+     BZ#21269.  */
-+
-+#include <stdatomic.h>
-+
-+#include <asm/ldt.h>
-+#include <linux/futex.h>
-+
-+#include <setjmp.h>
-+#include <signal.h>
-+#include <errno.h>
-+#include <sys/syscall.h>
-+#include <sys/mman.h>
-+
-+#include <support/xunistd.h>
-+#include <support/check.h>
-+#include <support/xthread.h>
-+
-+static int
-+xset_thread_area (struct user_desc *u_info)
-+{
-+  long ret = syscall (SYS_set_thread_area, u_info);
-+  TEST_VERIFY_EXIT (ret == 0);
-+  return ret;
-+}
-+
-+static void
-+xmodify_ldt (int func, const void *ptr, unsigned long bytecount)
-+{
-+  TEST_VERIFY_EXIT (syscall (SYS_modify_ldt, 1, ptr, bytecount) == 0);
-+}
-+
-+static int
-+futex (int *uaddr, int futex_op, int val, void *timeout, int *uaddr2,
-+	int val3)
-+{
-+  return syscall (SYS_futex, uaddr, futex_op, val, timeout, uaddr2, val3);
-+}
-+
-+static void
-+xsethandler (int sig, void (*handler)(int, siginfo_t *, void *), int flags)
-+{
-+  struct sigaction sa = { 0 };
-+  sa.sa_sigaction = handler;
-+  sa.sa_flags = SA_SIGINFO | flags;
-+  TEST_VERIFY_EXIT (sigemptyset (&sa.sa_mask) == 0);
-+  TEST_VERIFY_EXIT (sigaction (sig, &sa, 0) == 0);
-+}
-+
-+static jmp_buf jmpbuf;
-+
-+static void
-+sigsegv_handler (int sig, siginfo_t *info, void *ctx_void)
-+{
-+  siglongjmp (jmpbuf, 1);
-+}
-+
-+/* Points to an array of 1024 ints, each holding its own index.  */
-+static const unsigned int *counter_page;
-+static struct user_desc *low_user_desc;
-+static struct user_desc *low_user_desc_clear; /* Used to delete GDT entry.  */
-+static int gdt_entry_num;
-+
-+static void
-+setup_counter_page (void)
-+{
-+  long page_size = sysconf (_SC_PAGE_SIZE);
-+  TEST_VERIFY_EXIT (page_size > 0);
-+  unsigned int *page = xmmap (NULL, page_size, PROT_READ | PROT_WRITE,
-+			      MAP_ANONYMOUS | MAP_PRIVATE | MAP_32BIT, -1);
-+  for (int i = 0; i < (page_size / sizeof (unsigned int)); i++)
-+    page[i] = i;
-+  counter_page = page;
-+}
-+
-+static void
-+setup_low_user_desc (void)
-+{
-+  low_user_desc = xmmap (NULL, 2 * sizeof (struct user_desc),
-+			 PROT_READ | PROT_WRITE,
-+			 MAP_ANONYMOUS | MAP_PRIVATE | MAP_32BIT, -1);
-+
-+  low_user_desc->entry_number    = -1;
-+  low_user_desc->base_addr       = (unsigned long) &counter_page[1];
-+  low_user_desc->limit           = 0xffff;
-+  low_user_desc->seg_32bit       = 1;
-+  low_user_desc->contents        = 0;
-+  low_user_desc->read_exec_only  = 0;
-+  low_user_desc->limit_in_pages  = 1;
-+  low_user_desc->seg_not_present = 0;
-+  low_user_desc->useable         = 0;
-+
-+  xset_thread_area (low_user_desc);
-+
-+  low_user_desc_clear = low_user_desc + 1;
-+  low_user_desc_clear->entry_number = gdt_entry_num;
-+  low_user_desc_clear->read_exec_only = 1;
-+  low_user_desc_clear->seg_not_present = 1;
-+}
-+
-+/* Possible values of futex:
-+   0: thread is idle.
-+   1: thread armed.
-+   2: thread should clear LDT entry 0.
-+   3: thread should exit.  */
-+static atomic_uint ftx;
-+
-+static void *
-+threadproc (void *ctx)
-+{
-+  while (1)
-+    {
-+      futex ((int *) &ftx, FUTEX_WAIT, 1, NULL, NULL, 0);
-+      while (atomic_load (&ftx) != 2)
-+	{
-+	  if (atomic_load (&ftx) >= 3)
-+	    return NULL;
-+	}
-+
-+      /* clear LDT entry 0.  */
-+      const struct user_desc desc = { 0 };
-+      xmodify_ldt (1, &desc, sizeof (desc));
-+
-+      /* If ftx == 2, set it to zero,  If ftx == 100, quit.  */
-+      if (atomic_fetch_add (&ftx, -2) != 2)
-+	return NULL;
-+    }
-+}
-+
-+
-+/* As described in testcase, for historical reasons x86_32 Linux (and compat
-+   on x86_64) interprets SA_RESTORER clear with nonzero sa_restorer as a
-+   request for stack switching if the SS segment is 'funny' (this is default
-+   scenario for vDSO system).  This means that anything that tries to mix
-+   signal handling with segmentation should explicit clear the sa_restorer.
-+
-+   This testcase check if sigaction in fact does it by changing the local
-+   descriptor table (LDT) through the modify_ldt syscall and triggering
-+   a synchronous segfault on iret fault by trying to install an invalid
-+   segment.  With a correct zeroed sa_restorer it should not trigger an
-+   'real' SEGSEGV and allows the siglongjmp in signal handler.  */
-+
-+static int
-+do_test (void)
-+{
-+  setup_counter_page ();
-+  setup_low_user_desc ();
-+
-+  pthread_t thread;
-+  unsigned short orig_ss;
-+
-+  xsethandler (SIGSEGV, sigsegv_handler, 0);
-+  /* 32-bit kernels send SIGILL instead of SIGSEGV on IRET faults.  */
-+  xsethandler (SIGILL, sigsegv_handler, 0);
-+
-+  thread = xpthread_create (0, threadproc, 0);
-+
-+  asm volatile ("mov %%ss, %0" : "=rm" (orig_ss));
-+
-+  for (int i = 0; i < 5; i++)
-+    {
-+      if (sigsetjmp (jmpbuf, 1) != 0)
-+	continue;
-+
-+      /* Make sure the thread is ready after the last test. */
-+      while (atomic_load (&ftx) != 0)
-+	;
-+
-+      struct user_desc desc = {
-+	.entry_number       = 0,
-+	.base_addr          = 0,
-+	.limit              = 0xffff,
-+	.seg_32bit          = 1,
-+	.contents           = 0,
-+	.read_exec_only     = 0,
-+	.limit_in_pages     = 1,
-+	.seg_not_present    = 0,
-+	.useable            = 0
-+      };
-+
-+      xmodify_ldt (0x11, &desc, sizeof (desc));
-+
-+      /* Arm the thread.  */
-+      ftx = 1;
-+      futex ((int*) &ftx, FUTEX_WAKE, 0, NULL, NULL, 0);
-+
-+      asm volatile ("mov %0, %%ss" : : "r" (0x7));
-+
-+      /* Fire up thread modify_ldt call.  */
-+      atomic_store (&ftx, 2);
-+
-+      while (atomic_load (&ftx) != 0)
-+	;
-+
-+      /* On success, modify_ldt will segfault us synchronously and we will
-+	 escape via siglongjmp.  */
-+      support_record_failure ();
-+    }
-+
-+  atomic_store (&ftx, 100);
-+  futex ((int*) &ftx, FUTEX_WAKE, 0, NULL, NULL, 0);
-+
-+  xpthread_join (thread);
-+
-+  return 0;
-+}
-+
-+#include <support/test-driver.c>
-
-From 55ad82e45c313454de657931898e974a7a036cad Mon Sep 17 00:00:00 2001
-From: Andrew Senkevich <andrew.n.senkevich@gmail.com>
-Date: Fri, 23 Mar 2018 16:19:45 +0100
-Subject: [PATCH] Fix i386 memmove issue (bug 22644).
-
-	[BZ #22644]
-	* sysdeps/i386/i686/multiarch/memcpy-sse2-unaligned.S: Fixed
-	branch conditions.
-	* string/test-memmove.c (do_test2): New testcase.
-
-(cherry picked from commit cd66c0e584c6d692bc8347b5e72723d02b8a8ada)
-
-diff --git a/string/test-memmove.c b/string/test-memmove.c
-index edc7a4c3bf..64e3651ba4 100644
---- a/string/test-memmove.c
-+++ b/string/test-memmove.c
-@@ -24,6 +24,7 @@
- # define TEST_NAME "memmove"
- #endif
- #include "test-string.h"
-+#include <support/test-driver.h>
- 
- char *simple_memmove (char *, const char *, size_t);
- 
-@@ -245,6 +246,60 @@ do_random_tests (void)
-     }
- }
- 
-+static void
-+do_test2 (void)
-+{
-+  size_t size = 0x20000000;
-+  uint32_t * large_buf;
-+
-+  large_buf = mmap ((void*) 0x70000000, size, PROT_READ | PROT_WRITE,
-+		    MAP_PRIVATE | MAP_ANON, -1, 0);
-+
-+  if (large_buf == MAP_FAILED)
-+    error (EXIT_UNSUPPORTED, errno, "Large mmap failed");
-+
-+  if ((uintptr_t) large_buf > 0x80000000 - 128
-+      || 0x80000000 - (uintptr_t) large_buf > 0x20000000)
-+    {
-+      error (0, 0, "Large mmap allocated improperly");
-+      ret = EXIT_UNSUPPORTED;
-+      munmap ((void *) large_buf, size);
-+      return;
-+    }
-+
-+  size_t bytes_move = 0x80000000 - (uintptr_t) large_buf;
-+  size_t arr_size = bytes_move / sizeof (uint32_t);
-+  size_t i;
-+
-+  FOR_EACH_IMPL (impl, 0)
-+    {
-+      for (i = 0; i < arr_size; i++)
-+        large_buf[i] = (uint32_t) i;
-+
-+      uint32_t * dst = &large_buf[33];
-+
-+#ifdef TEST_BCOPY
-+      CALL (impl, (char *) large_buf, (char *) dst, bytes_move);
-+#else
-+      CALL (impl, (char *) dst, (char *) large_buf, bytes_move);
-+#endif
-+
-+      for (i = 0; i < arr_size; i++)
-+	{
-+	  if (dst[i] != (uint32_t) i)
-+	    {
-+	      error (0, 0,
-+		     "Wrong result in function %s dst \"%p\" src \"%p\" offset \"%zd\"",
-+		     impl->name, dst, large_buf, i);
-+	      ret = 1;
-+	      break;
-+	    }
-+	}
-+    }
-+
-+  munmap ((void *) large_buf, size);
-+}
-+
- int
- test_main (void)
- {
-@@ -284,6 +339,9 @@ test_main (void)
-     }
- 
-   do_random_tests ();
-+
-+  do_test2 ();
-+
-   return ret;
- }
- 
-diff --git a/sysdeps/i386/i686/multiarch/memcpy-sse2-unaligned.S b/sysdeps/i386/i686/multiarch/memcpy-sse2-unaligned.S
-index 9c3bbe7e17..9aa17de99c 100644
---- a/sysdeps/i386/i686/multiarch/memcpy-sse2-unaligned.S
-+++ b/sysdeps/i386/i686/multiarch/memcpy-sse2-unaligned.S
-@@ -72,7 +72,7 @@ ENTRY (MEMCPY)
- 	cmp	%edx, %eax
- 
- # ifdef USE_AS_MEMMOVE
--	jg	L(check_forward)
-+	ja	L(check_forward)
- 
- L(mm_len_0_or_more_backward):
- /* Now do checks for lengths. We do [0..16], [16..32], [32..64], [64..128]
-@@ -81,7 +81,7 @@ L(mm_len_0_or_more_backward):
- 	jbe	L(mm_len_0_16_bytes_backward)
- 
- 	cmpl	$32, %ecx
--	jg	L(mm_len_32_or_more_backward)
-+	ja	L(mm_len_32_or_more_backward)
- 
- /* Copy [0..32] and return.  */
- 	movdqu	(%eax), %xmm0
-@@ -92,7 +92,7 @@ L(mm_len_0_or_more_backward):
- 
- L(mm_len_32_or_more_backward):
- 	cmpl	$64, %ecx
--	jg	L(mm_len_64_or_more_backward)
-+	ja	L(mm_len_64_or_more_backward)
- 
- /* Copy [0..64] and return.  */
- 	movdqu	(%eax), %xmm0
-@@ -107,7 +107,7 @@ L(mm_len_32_or_more_backward):
- 
- L(mm_len_64_or_more_backward):
- 	cmpl	$128, %ecx
--	jg	L(mm_len_128_or_more_backward)
-+	ja	L(mm_len_128_or_more_backward)
- 
- /* Copy [0..128] and return.  */
- 	movdqu	(%eax), %xmm0
-@@ -132,7 +132,7 @@ L(mm_len_128_or_more_backward):
- 	add	%ecx, %eax
- 	cmp	%edx, %eax
- 	movl	SRC(%esp), %eax
--	jle	L(forward)
-+	jbe	L(forward)
- 	PUSH (%esi)
- 	PUSH (%edi)
- 	PUSH (%ebx)
-@@ -269,7 +269,7 @@ L(check_forward):
- 	add	%edx, %ecx
- 	cmp	%eax, %ecx
- 	movl	LEN(%esp), %ecx
--	jle	L(forward)
-+	jbe	L(forward)
- 
- /* Now do checks for lengths. We do [0..16], [0..32], [0..64], [0..128]
- 	separately.  */
diff --git a/gnu/packages/patches/glibc-2.27-supported-locales.patch b/gnu/packages/patches/glibc-2.27-supported-locales.patch
deleted file mode 100644
index 2888052bb8..0000000000
--- a/gnu/packages/patches/glibc-2.27-supported-locales.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-This patch is taken from debian's glibc package (generate-supported.mk).
-It install the localedata/SUPPORTED file of the glibc. This file lists
-all the supported locales of the glibc.
-
-diff --git a/localedata/Makefile.old b/localedata/Makefile
-index 34877c0..a61d9b9 100644
---- a/localedata/Makefile.old
-+++ b/localedata/Makefile
-@@ -91,7 +91,8 @@ endif
- # Files to install.
- install-others := $(addprefix $(inst_i18ndir)/, \
- 			      $(addsuffix .gz, $(charmaps)) \
--			      $(locales))
-+			      $(locales)) \
-+                   $(inst_i18ndir)/SUPPORTED
- 
- tests: $(objdir)/iconvdata/gconv-modules
- 
-@@ -195,6 +196,14 @@ endif
- 
- include SUPPORTED
- 
-+$(inst_i18ndir)/SUPPORTED: SUPPORTED $(+force)
-+	for locale in $(SUPPORTED-LOCALES); do \
-+		[ $$locale = true ] && continue; \
-+		echo $$locale | sed 's,/, ,' >> LOCALES; \
-+	done
-+	$(make-target-directory)
-+	$(INSTALL_DATA) LOCALES $@
-+
- INSTALL-SUPPORTED-LOCALES=$(addprefix install-, $(SUPPORTED-LOCALES))
- 
- # Sometimes the whole collection of locale files should be installed.
diff --git a/gnu/packages/patches/glibc-2.28-git-fixes.patch b/gnu/packages/patches/glibc-2.28-git-fixes.patch
deleted file mode 100644
index 7e370ef0b1..0000000000
--- a/gnu/packages/patches/glibc-2.28-git-fixes.patch
+++ /dev/null
@@ -1,248 +0,0 @@
-This file contains fixes from the "release/2.28/master" branch:
-https://sourceware.org/git/?p=glibc.git;a=shortlog;h=refs/heads/release/2.28/master
-
-Currently we have these commits (sans tests and ChangeLog updates):
-7f11842e7483da7aa9fa3031be122021978ef600
-726e1554ce4db5e35af41cb0110c54c5e1232054
-4b25485f03158959cff45379eecc1d73c7dcdd11
-d05b05d1570ba3ae354a2f5a3cfeefb373b09979
-bfcfa22589f2b4277a65e60c6b736b6bbfbd87d0
-2f498f3d140ab5152bd784df2be7af7d9c5e63ed
-
-diff --git a/htl/Versions b/htl/Versions
-index 6a63a1b8a1..c5a616da10 100644
---- a/htl/Versions
-+++ b/htl/Versions
-@@ -150,6 +150,8 @@ libpthread {
-     __cthread_keycreate;
-     __cthread_getspecific;
-     __cthread_setspecific;
-+    __pthread_getspecific;
-+    __pthread_setspecific;
-     __pthread_getattr_np;
-     __pthread_attr_getstack;
-   }
-
-diff --git a/sysdeps/htl/pt-getspecific.c b/sysdeps/htl/pt-getspecific.c
-index a0227a67f6..64ddf9551a 100644
---- a/sysdeps/htl/pt-getspecific.c
-+++ b/sysdeps/htl/pt-getspecific.c
-@@ -36,3 +36,4 @@ __pthread_getspecific (pthread_key_t key)
-   return self->thread_specifics[key];
- }
- strong_alias (__pthread_getspecific, pthread_getspecific);
-+hidden_def (__pthread_getspecific)
-diff --git a/sysdeps/htl/pt-setspecific.c b/sysdeps/htl/pt-setspecific.c
-index a46a12f157..02aff417ef 100644
---- a/sysdeps/htl/pt-setspecific.c
-+++ b/sysdeps/htl/pt-setspecific.c
-@@ -48,3 +48,4 @@ __pthread_setspecific (pthread_key_t key, const void *value)
-   return 0;
- }
- strong_alias (__pthread_setspecific, pthread_setspecific);
-+hidden_def (__pthread_setspecific)
-diff --git a/sysdeps/htl/pthreadP.h b/sysdeps/htl/pthreadP.h
-index 132ac1718e..71c2fcd9c6 100644
---- a/sysdeps/htl/pthreadP.h
-+++ b/sysdeps/htl/pthreadP.h
-@@ -68,6 +68,8 @@ struct __pthread_cancelation_handler **___pthread_get_cleanup_stack (void) attri
- 
- #if IS_IN (libpthread)
- hidden_proto (__pthread_key_create)
-+hidden_proto (__pthread_getspecific)
-+hidden_proto (__pthread_setspecific)
- hidden_proto (_pthread_mutex_init)
- #endif
- 
-diff --git a/sysdeps/unix/sysv/linux/getdents64.c b/sysdeps/unix/sysv/linux/getdents64.c
-index 3bde0cf4f0..bc140b5a7f 100644
---- a/sysdeps/unix/sysv/linux/getdents64.c
-+++ b/sysdeps/unix/sysv/linux/getdents64.c
-@@ -33,41 +33,80 @@ strong_alias (__getdents64, __getdents)
- # include <shlib-compat.h>
- 
- # if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
--# include <olddirent.h>
-+#  include <olddirent.h>
-+#  include <unistd.h>
- 
--/* kernel definition of as of 3.2.  */
--struct compat_linux_dirent
-+static ssize_t
-+handle_overflow (int fd, __off64_t offset, ssize_t count)
- {
--  /* Both d_ino and d_off are compat_ulong_t which are defined in all
--     architectures as 'u32'.  */
--  uint32_t        d_ino;
--  uint32_t        d_off;
--  unsigned short  d_reclen;
--  char            d_name[1];
--};
-+  /* If this is the first entry in the buffer, we can report the
-+     error.  */
-+  if (count == 0)
-+    {
-+      __set_errno (EOVERFLOW);
-+      return -1;
-+    }
-+
-+  /* Otherwise, seek to the overflowing entry, so that the next call
-+     will report the error, and return the data read so far..  */
-+  if (__lseek64 (fd, offset, SEEK_SET) != 0)
-+    return -1;
-+  return count;
-+}
- 
- ssize_t
- __old_getdents64 (int fd, char *buf, size_t nbytes)
- {
--  ssize_t retval = INLINE_SYSCALL_CALL (getdents, fd, buf, nbytes);
-+  /* We do not move the individual directory entries.  This is only
-+     possible if the target type (struct __old_dirent64) is smaller
-+     than the source type.  */
-+  _Static_assert (offsetof (struct __old_dirent64, d_name)
-+		  <= offsetof (struct dirent64, d_name),
-+		  "__old_dirent64 is larger than dirent64");
-+  _Static_assert (__alignof__ (struct __old_dirent64)
-+		  <= __alignof__ (struct dirent64),
-+		  "alignment of __old_dirent64 is larger than dirent64");
- 
--  /* The kernel added the d_type value after the name.  Change this now.  */
--  if (retval != -1)
-+  ssize_t retval = INLINE_SYSCALL_CALL (getdents64, fd, buf, nbytes);
-+  if (retval > 0)
-     {
--      union
--      {
--	struct compat_linux_dirent k;
--	struct dirent u;
--      } *kbuf = (void *) buf;
--
--      while ((char *) kbuf < buf + retval)
-+      char *p = buf;
-+      char *end = buf + retval;
-+      while (p < end)
- 	{
--	  char d_type = *((char *) kbuf + kbuf->k.d_reclen - 1);
--	  memmove (kbuf->u.d_name, kbuf->k.d_name,
--		   strlen (kbuf->k.d_name) + 1);
--	  kbuf->u.d_type = d_type;
-+	  struct dirent64 *source = (struct dirent64 *) p;
-+
-+	  /* Copy out the fixed-size data.  */
-+	  __ino_t ino = source->d_ino;
-+	  __off64_t offset = source->d_off;
-+	  unsigned int reclen = source->d_reclen;
-+	  unsigned char type = source->d_type;
-+
-+	  /* Check for ino_t overflow.  */
-+	  if (__glibc_unlikely (ino != source->d_ino))
-+	    return handle_overflow (fd, offset, p - buf);
-+
-+	  /* Convert to the target layout.  Use a separate struct and
-+	     memcpy to side-step aliasing issues.  */
-+	  struct __old_dirent64 result;
-+	  result.d_ino = ino;
-+	  result.d_off = offset;
-+	  result.d_reclen = reclen;
-+	  result.d_type = type;
-+
-+	  /* Write the fixed-sized part of the result to the
-+	     buffer.  */
-+	  size_t result_name_offset = offsetof (struct __old_dirent64, d_name);
-+	  memcpy (p, &result, result_name_offset);
-+
-+	  /* Adjust the position of the name if necessary.  Copy
-+	     everything until the end of the record, including the
-+	     terminating NUL byte.  */
-+	  if (result_name_offset != offsetof (struct dirent64, d_name))
-+	    memmove (p + result_name_offset, source->d_name,
-+		     reclen - offsetof (struct dirent64, d_name));
- 
--	  kbuf = (void *) ((char *) kbuf + kbuf->k.d_reclen);
-+	  p += reclen;
- 	}
-      }
-   return retval;
-
-diff --git a/misc/error.c b/misc/error.c
-index b4e8b6c938..03378e2f2a 100644
---- a/misc/error.c
-+++ b/misc/error.c
-@@ -319,6 +319,7 @@ error (int status, int errnum, const char *message, ...)
- 
-   va_start (args, message);
-   error_tail (status, errnum, message, args);
-+  va_end (args);
- 
- #ifdef _LIBC
-   _IO_funlockfile (stderr);
-@@ -390,6 +391,7 @@ error_at_line (int status, int errnum, const char *file_name,
- 
-   va_start (args, message);
-   error_tail (status, errnum, message, args);
-+  va_end (args);
- 
- #ifdef _LIBC
-   _IO_funlockfile (stderr);
-
-diff --git a/nscd/nscd_conf.c b/nscd/nscd_conf.c
-index 265a02434d..7293b795b6 100644
---- a/nscd/nscd_conf.c
-+++ b/nscd/nscd_conf.c
-@@ -190,7 +190,10 @@ nscd_parse_file (const char *fname, struct database_dyn dbs[lastdb])
- 	  if (!arg1)
- 	    error (0, 0, _("Must specify user name for server-user option"));
- 	  else
--	    server_user = xstrdup (arg1);
-+	    {
-+	      free ((char *) server_user);
-+	      server_user = xstrdup (arg1);
-+	    }
- 	}
-       else if (strcmp (entry, "stat-user") == 0)
- 	{
-@@ -198,6 +201,7 @@ nscd_parse_file (const char *fname, struct database_dyn dbs[lastdb])
- 	    error (0, 0, _("Must specify user name for stat-user option"));
- 	  else
- 	    {
-+	      free ((char *) stat_user);
- 	      stat_user = xstrdup (arg1);
- 
- 	      struct passwd *pw = getpwnam (stat_user);
-
-diff --git a/nss/nss_files/files-alias.c b/nss/nss_files/files-alias.c
-index cfd34b66b9..35b0bfc5d2 100644
---- a/nss/nss_files/files-alias.c
-+++ b/nss/nss_files/files-alias.c
-@@ -221,6 +221,13 @@ get_next_alias (FILE *stream, const char *match, struct aliasent *result,
- 			{
- 			  while (! feof_unlocked (listfile))
- 			    {
-+			      if (room_left < 2)
-+				{
-+				  free (old_line);
-+				  fclose (listfile);
-+				  goto no_more_room;
-+				}
-+
- 			      first_unused[room_left - 1] = '\xff';
- 			      line = fgets_unlocked (first_unused, room_left,
- 						     listfile);
-@@ -229,6 +236,7 @@ get_next_alias (FILE *stream, const char *match, struct aliasent *result,
- 			      if (first_unused[room_left - 1] != '\xff')
- 				{
- 				  free (old_line);
-+				  fclose (listfile);
- 				  goto no_more_room;
- 				}
- 
-@@ -256,6 +264,7 @@ get_next_alias (FILE *stream, const char *match, struct aliasent *result,
- 						       + __alignof__ (char *)))
- 					{
- 					  free (old_line);
-+					  fclose (listfile);
- 					  goto no_more_room;
- 					}
- 				      room_left -= ((first_unused - cp)
-
diff --git a/gnu/packages/patches/glibc-2.28-supported-locales.patch b/gnu/packages/patches/glibc-2.28-supported-locales.patch
deleted file mode 100644
index 2888052bb8..0000000000
--- a/gnu/packages/patches/glibc-2.28-supported-locales.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-This patch is taken from debian's glibc package (generate-supported.mk).
-It install the localedata/SUPPORTED file of the glibc. This file lists
-all the supported locales of the glibc.
-
-diff --git a/localedata/Makefile.old b/localedata/Makefile
-index 34877c0..a61d9b9 100644
---- a/localedata/Makefile.old
-+++ b/localedata/Makefile
-@@ -91,7 +91,8 @@ endif
- # Files to install.
- install-others := $(addprefix $(inst_i18ndir)/, \
- 			      $(addsuffix .gz, $(charmaps)) \
--			      $(locales))
-+			      $(locales)) \
-+                   $(inst_i18ndir)/SUPPORTED
- 
- tests: $(objdir)/iconvdata/gconv-modules
- 
-@@ -195,6 +196,14 @@ endif
- 
- include SUPPORTED
- 
-+$(inst_i18ndir)/SUPPORTED: SUPPORTED $(+force)
-+	for locale in $(SUPPORTED-LOCALES); do \
-+		[ $$locale = true ] && continue; \
-+		echo $$locale | sed 's,/, ,' >> LOCALES; \
-+	done
-+	$(make-target-directory)
-+	$(INSTALL_DATA) LOCALES $@
-+
- INSTALL-SUPPORTED-LOCALES=$(addprefix install-, $(SUPPORTED-LOCALES))
- 
- # Sometimes the whole collection of locale files should be installed.
diff --git a/gnu/packages/patches/glibc-2.31-hurd-clock_gettime_monotonic.patch b/gnu/packages/patches/glibc-2.31-hurd-clock_gettime_monotonic.patch
new file mode 100644
index 0000000000..1c3fe427f9
--- /dev/null
+++ b/gnu/packages/patches/glibc-2.31-hurd-clock_gettime_monotonic.patch
@@ -0,0 +1,84 @@
+This is needed to run Python on the Hurd, especially during the build of
+python-boot0.
+
+Adapted from https://salsa.debian.org/glibc-team/glibc/-/blob/glibc-2.31/debian/patches/hurd-i386/unsubmitted-clock_t_centiseconds.diff
+
+Use the realtime clock for the monotonic clock. This is of course not a proper
+implementation (which is being done in Mach), but will permit to fix at least
+the iceweasel stack.
+
+vlc however doesn't build when _POSIX_CLOCK_SELECTION is enabled but
+_POSIX_TIMERS is not, and they refuse to fix that (see #765578), so disable the
+former.
+
+From 0aa1dfd580cf9ad7b812c307b128decb782b825f Mon Sep 17 00:00:00 2001
+From: Jan Nieuwenhuizen <janneke@gnu.org>
+Date: Mon, 2 Mar 2020 18:59:04 +0100
+Subject: [PATCH 2/2] Use realtime clock for the monotonic clock.
+
+---
+ sysdeps/mach/clock_gettime.c       | 2 +-
+ sysdeps/mach/hurd/bits/posix_opt.h | 6 +++---
+ sysdeps/posix/clock_getres.c       | 1 +
+ sysdeps/pthread/timer_create.c     | 2 +-
+ 4 files changed, 6 insertions(+), 5 deletions(-)
+
+diff --git a/sysdeps/mach/clock_gettime.c b/sysdeps/mach/clock_gettime.c
+index ac3547df3c..af8681ba4e 100644
+--- a/sysdeps/mach/clock_gettime.c
++++ b/sysdeps/mach/clock_gettime.c
+@@ -25,7 +25,7 @@
+ int
+ __clock_gettime (clockid_t clock_id, struct timespec *ts)
+ {
+-  if (clock_id != CLOCK_REALTIME)
++  if (clock_id != CLOCK_MONOTONIC && clock_id != CLOCK_REALTIME)
+     {
+       errno = EINVAL;
+       return -1;
+diff --git a/sysdeps/mach/hurd/bits/posix_opt.h b/sysdeps/mach/hurd/bits/posix_opt.h
+index 0050151332..27b3a28ab7 100644
+--- a/sysdeps/mach/hurd/bits/posix_opt.h
++++ b/sysdeps/mach/hurd/bits/posix_opt.h
+@@ -163,10 +163,10 @@
+ #define _POSIX_THREAD_PROCESS_SHARED	-1
+ 
+ /* The monotonic clock might be available.  */
+-#define _POSIX_MONOTONIC_CLOCK	0
++#define _POSIX_MONOTONIC_CLOCK	200809L
+ 
+-/* The clock selection interfaces are available.  */
+-#define _POSIX_CLOCK_SELECTION	200809L
++/* The clock selection interfaces are not really available yet.  */
++#define _POSIX_CLOCK_SELECTION	-1
+ 
+ /* Advisory information interfaces could be available in future.  */
+ #define _POSIX_ADVISORY_INFO	0
+diff --git a/sysdeps/posix/clock_getres.c b/sysdeps/posix/clock_getres.c
+index fcd79fd554..1dd02aa449 100644
+--- a/sysdeps/posix/clock_getres.c
++++ b/sysdeps/posix/clock_getres.c
+@@ -52,6 +52,7 @@ __clock_getres (clockid_t clock_id, struct timespec *res)
+   switch (clock_id)
+     {
+     case CLOCK_REALTIME:
++    case CLOCK_MONOTONIC:
+       retval = realtime_getres (res);
+       break;
+ 
+diff --git a/sysdeps/pthread/timer_create.c b/sysdeps/pthread/timer_create.c
+index 9d8a9ea8ae..3430582c09 100644
+--- a/sysdeps/pthread/timer_create.c
++++ b/sysdeps/pthread/timer_create.c
+@@ -48,7 +48,7 @@ timer_create (clockid_t clock_id, struct sigevent *evp, timer_t *timerid)
+       return -1;
+     }
+ 
+-  if (clock_id != CLOCK_REALTIME)
++  if (clock_id != CLOCK_REALTIME && clock_id != CLOCK_MONOTONIC)
+     {
+       __set_errno (EINVAL);
+       return -1;
+-- 
+2.24.0
+
diff --git a/gnu/packages/patches/glibc-bootstrap-system.patch b/gnu/packages/patches/glibc-bootstrap-system.patch
index db6457e939..9c0fac3ff5 100644
--- a/gnu/packages/patches/glibc-bootstrap-system.patch
+++ b/gnu/packages/patches/glibc-bootstrap-system.patch
@@ -3,17 +3,10 @@ and popen(3) need to be tweaked to use the right shell.  For the bootstrap
 glibc, we just use whatever `sh' can be found in $PATH.  The final glibc
 instead uses the hard-coded absolute file name of `bash'.
 
---- a/sysdeps/posix/system.c
-+++ b/sysdeps/posix/system.c
-@@ -140,7 +140,7 @@ do_system (const char *line)
-   __posix_spawnattr_setflags (&spawn_attr,
- 			      POSIX_SPAWN_SETSIGDEF | POSIX_SPAWN_SETSIGMASK);
- 
--  status = __posix_spawn (&pid, SHELL_PATH, 0, &spawn_attr,
-+  status = __posix_spawnp (&pid, SHELL_NAME, 0, &spawn_attr,
- 			  (char *const[]){ (char*) SHELL_NAME,
- 					   (char*) "-c",
- 					   (char *) line, NULL },
+In addition, status should be initialized to 0 and not -1.
+
+diff --git a/libio/iopopen.c b/libio/iopopen.c
+index ebc381ed7c..e0d3ed1bc3 100644
 --- a/libio/iopopen.c
 +++ b/libio/iopopen.c
 @@ -85,7 +85,7 @@ spawn_process (posix_spawn_file_actions_t *fa, FILE *fp, const char *command,
@@ -25,6 +18,28 @@ instead uses the hard-coded absolute file name of `bash'.
  		     (char *const[]){ (char*) "sh", (char*) "-c",
  		     (char *) command, NULL }, __environ) != 0)
      return false;
+diff --git a/sysdeps/posix/system.c b/sysdeps/posix/system.c
+index a03f478fc7..94da6facf3 100644
+--- a/sysdeps/posix/system.c
++++ b/sysdeps/posix/system.c
+@@ -101,7 +101,7 @@ cancel_handler (void *arg)
+ static int
+ do_system (const char *line)
+ {
+-  int status = -1;
++  int status = 0;
+   int ret;
+   pid_t pid;
+   struct sigaction sa;
+@@ -145,7 +145,7 @@ do_system (const char *line)
+   __posix_spawnattr_setflags (&spawn_attr,
+ 			      POSIX_SPAWN_SETSIGDEF | POSIX_SPAWN_SETSIGMASK);
+ 
+-  ret = __posix_spawn (&pid, SHELL_PATH, 0, &spawn_attr,
++  ret = __posix_spawnp (&pid, SHELL_NAME, 0, &spawn_attr,
+ 		       (char *const[]){ (char *) SHELL_NAME,
+ 					(char *) "-c",
+ 					(char *) line, NULL },
 
 --- a/include/spawn.h
 +++ b/include/spawn.h
diff --git a/gnu/packages/patches/glibc-cross-objcopy.patch b/gnu/packages/patches/glibc-cross-objcopy.patch
new file mode 100644
index 0000000000..e4c693aa44
--- /dev/null
+++ b/gnu/packages/patches/glibc-cross-objcopy.patch
@@ -0,0 +1,159 @@
+Use 'powerpc64le-linux-gnu-objcopy' rather than 'objcopy' when cross-compiling
+to powerpc64le-linux-gnu: <https://issues.guix.gnu.org/49417>.
+
+Patch submitted:
+  <https://sourceware.org/pipermail/libc-alpha/2021-July/128333.html>
+
+diff --git a/aclocal.m4 b/aclocal.m4
+index 13a791ffde..5b370c07a2 100644
+--- a/aclocal.m4
++++ b/aclocal.m4
+@@ -118,8 +118,6 @@ AS=`$CC -print-prog-name=as`
+ LD=`$CC -print-prog-name=ld`
+ AR=`$CC -print-prog-name=ar`
+ AC_SUBST(AR)
+-OBJCOPY=`$CC -print-prog-name=objcopy`
+-AC_SUBST(OBJCOPY)
+ GPROF=`$CC -print-prog-name=gprof`
+ AC_SUBST(GPROF)
+ 
+diff --git a/configure b/configure
+index fe0eda1cd5..3a08270734 100755
+--- a/configure
++++ b/configure
+@@ -654,7 +654,6 @@ MAKE
+ LD
+ AS
+ GPROF
+-OBJCOPY
+ AR
+ LN_S
+ INSTALL_DATA
+@@ -689,6 +688,7 @@ sysheaders
+ ac_ct_CXX
+ CXXFLAGS
+ CXX
++OBJCOPY
+ OBJDUMP
+ READELF
+ CPP
+@@ -3054,6 +3054,98 @@ else
+   OBJDUMP="$ac_cv_prog_OBJDUMP"
+ fi
+ 
++if test -n "$ac_tool_prefix"; then
++  # Extract the first word of "${ac_tool_prefix}objcopy", so it can be a program name with args.
++set dummy ${ac_tool_prefix}objcopy; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_OBJCOPY+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  if test -n "$OBJCOPY"; then
++  ac_cv_prog_OBJCOPY="$OBJCOPY" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++    for ac_exec_ext in '' $ac_executable_extensions; do
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++    ac_cv_prog_OBJCOPY="${ac_tool_prefix}objcopy"
++    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++  done
++IFS=$as_save_IFS
++
++fi
++fi
++OBJCOPY=$ac_cv_prog_OBJCOPY
++if test -n "$OBJCOPY"; then
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJCOPY" >&5
++$as_echo "$OBJCOPY" >&6; }
++else
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_OBJCOPY"; then
++  ac_ct_OBJCOPY=$OBJCOPY
++  # Extract the first word of "objcopy", so it can be a program name with args.
++set dummy objcopy; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_ac_ct_OBJCOPY+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  if test -n "$ac_ct_OBJCOPY"; then
++  ac_cv_prog_ac_ct_OBJCOPY="$ac_ct_OBJCOPY" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++    for ac_exec_ext in '' $ac_executable_extensions; do
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++    ac_cv_prog_ac_ct_OBJCOPY="objcopy"
++    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++  done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_OBJCOPY=$ac_cv_prog_ac_ct_OBJCOPY
++if test -n "$ac_ct_OBJCOPY"; then
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJCOPY" >&5
++$as_echo "$ac_ct_OBJCOPY" >&6; }
++else
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++  if test "x$ac_ct_OBJCOPY" = x; then
++    OBJCOPY="false"
++  else
++    case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++    OBJCOPY=$ac_ct_OBJCOPY
++  fi
++else
++  OBJCOPY="$ac_cv_prog_OBJCOPY"
++fi
++
+ 
+ # We need the C++ compiler only for testing.
+ ac_ext=cpp
+@@ -4645,8 +4737,6 @@ AS=`$CC -print-prog-name=as`
+ LD=`$CC -print-prog-name=ld`
+ AR=`$CC -print-prog-name=ar`
+ 
+-OBJCOPY=`$CC -print-prog-name=objcopy`
+-
+ GPROF=`$CC -print-prog-name=gprof`
+ 
+ 
+diff --git a/configure.ac b/configure.ac
+index 924af12738..2148cd2ec8 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -53,6 +53,7 @@ AC_SUBST(cross_compiling)
+ AC_PROG_CPP
+ AC_CHECK_TOOL(READELF, readelf, false)
+ AC_CHECK_TOOL(OBJDUMP, objdump, false)
++AC_CHECK_TOOL(OBJCOPY, objcopy, false)
+ 
+ # We need the C++ compiler only for testing.
+ AC_PROG_CXX
diff --git a/gnu/packages/patches/glibc-cross-objdump.patch b/gnu/packages/patches/glibc-cross-objdump.patch
new file mode 100644
index 0000000000..1660d915f7
--- /dev/null
+++ b/gnu/packages/patches/glibc-cross-objdump.patch
@@ -0,0 +1,159 @@
+Arrange so that glibc uses 'TRIPLET-objdump -f' rather than 'objdump -f'
+to determine the 'OUTPUT_FORMAT' value in libc.so when cross-compiling.
+
+Patch submitted upstream:
+  <https://sourceware.org/pipermail/libc-alpha/2021-July/128333.html>.
+
+diff --git a/aclocal.m4 b/aclocal.m4
+index c195c4db56..13a791ffde 100644
+--- a/aclocal.m4
++++ b/aclocal.m4
+@@ -118,8 +118,6 @@ AS=`$CC -print-prog-name=as`
+ LD=`$CC -print-prog-name=ld`
+ AR=`$CC -print-prog-name=ar`
+ AC_SUBST(AR)
+-OBJDUMP=`$CC -print-prog-name=objdump`
+-AC_SUBST(OBJDUMP)
+ OBJCOPY=`$CC -print-prog-name=objcopy`
+ AC_SUBST(OBJCOPY)
+ GPROF=`$CC -print-prog-name=gprof`
+diff --git a/configure b/configure
+index 9619c10991..fe0eda1cd5 100755
+--- a/configure
++++ b/configure
+@@ -655,7 +655,6 @@ LD
+ AS
+ GPROF
+ OBJCOPY
+-OBJDUMP
+ AR
+ LN_S
+ INSTALL_DATA
+@@ -690,6 +689,7 @@ sysheaders
+ ac_ct_CXX
+ CXXFLAGS
+ CXX
++OBJDUMP
+ READELF
+ CPP
+ cross_compiling
+@@ -2962,6 +2962,98 @@ else
+   READELF="$ac_cv_prog_READELF"
+ fi
+ 
++if test -n "$ac_tool_prefix"; then
++  # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
++set dummy ${ac_tool_prefix}objdump; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_OBJDUMP+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  if test -n "$OBJDUMP"; then
++  ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++    for ac_exec_ext in '' $ac_executable_extensions; do
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++    ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
++    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++  done
++IFS=$as_save_IFS
++
++fi
++fi
++OBJDUMP=$ac_cv_prog_OBJDUMP
++if test -n "$OBJDUMP"; then
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
++$as_echo "$OBJDUMP" >&6; }
++else
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_OBJDUMP"; then
++  ac_ct_OBJDUMP=$OBJDUMP
++  # Extract the first word of "objdump", so it can be a program name with args.
++set dummy objdump; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  if test -n "$ac_ct_OBJDUMP"; then
++  ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++    for ac_exec_ext in '' $ac_executable_extensions; do
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++    ac_cv_prog_ac_ct_OBJDUMP="objdump"
++    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++  done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
++if test -n "$ac_ct_OBJDUMP"; then
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
++$as_echo "$ac_ct_OBJDUMP" >&6; }
++else
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++  if test "x$ac_ct_OBJDUMP" = x; then
++    OBJDUMP="false"
++  else
++    case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++    OBJDUMP=$ac_ct_OBJDUMP
++  fi
++else
++  OBJDUMP="$ac_cv_prog_OBJDUMP"
++fi
++
+ 
+ # We need the C++ compiler only for testing.
+ ac_ext=cpp
+@@ -4553,8 +4645,6 @@ AS=`$CC -print-prog-name=as`
+ LD=`$CC -print-prog-name=ld`
+ AR=`$CC -print-prog-name=ar`
+ 
+-OBJDUMP=`$CC -print-prog-name=objdump`
+-
+ OBJCOPY=`$CC -print-prog-name=objcopy`
+ 
+ GPROF=`$CC -print-prog-name=gprof`
+diff --git a/configure.ac b/configure.ac
+index 34ecbba540..924af12738 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -52,6 +52,7 @@ fi
+ AC_SUBST(cross_compiling)
+ AC_PROG_CPP
+ AC_CHECK_TOOL(READELF, readelf, false)
++AC_CHECK_TOOL(OBJDUMP, objdump, false)
+ 
+ # We need the C++ compiler only for testing.
+ AC_PROG_CXX
diff --git a/gnu/packages/patches/glibc-dl-cache.patch b/gnu/packages/patches/glibc-dl-cache.patch
new file mode 100644
index 0000000000..68c3a94846
--- /dev/null
+++ b/gnu/packages/patches/glibc-dl-cache.patch
@@ -0,0 +1,140 @@
+Read the shared library cache relative to $ORIGIN instead of reading
+from /etc/ld.so.cache.  Also arrange so that this cache takes
+precedence over RUNPATH.
+
+diff --git a/elf/dl-cache.c b/elf/dl-cache.c
+index 93d185e788..e0760a1f40 100644
+--- a/elf/dl-cache.c
++++ b/elf/dl-cache.c
+@@ -171,6 +171,51 @@ _dl_cache_libcmp (const char *p1, const char *p2)
+   return *p1 - *p2;
+ }
+ 
++/* Special value representing the lack of an ld.so cache.  */
++static const char ld_so_cache_lacking[] = "/ld.so cache is lacking";
++
++/* Return the per-application ld.so cache, relative to $ORIGIN, or NULL if
++   that fails for some reason.  Do not return the system-wide LD_SO_CACHE
++   since on a foreign distro it would contain invalid information.  */
++static const char *
++ld_so_cache (void)
++{
++  static const char *loader_cache;
++
++  if (loader_cache == NULL)
++    {
++      static const char store[] = @STORE_DIRECTORY@;
++      const char *origin = _dl_get_origin ();
++
++      /* Check whether ORIGIN is something like "/gnu/store/…-foo/bin".  */
++      if (strncmp (store, origin, strlen (store)) == 0
++	  && origin[sizeof store - 1] == '/')
++	{
++	  char *store_item_end = strchr (origin + sizeof store, '/');
++
++	  if (store_item_end != NULL)
++	    {
++	      static const char suffix[] = "/etc/ld.so.cache";
++	      size_t store_item_len = store_item_end - origin;
++
++	      /* Note: We can't use 'malloc' because it can be interposed.
++		 Likewise, 'strncpy' is not available.  */
++	      char *cache = alloca (strlen (origin) + sizeof suffix);
++
++	      strcpy (cache, origin);
++	      strcpy (cache + store_item_len, suffix);
++
++	      loader_cache = __strdup (cache) ?: ld_so_cache_lacking;
++	    }
++	  else
++	    loader_cache = ld_so_cache_lacking;
++	}
++      else
++	loader_cache = ld_so_cache_lacking;
++    }
++
++  return loader_cache;
++}
+ 
+ /* Look up NAME in ld.so.cache and return the file name stored there, or null
+    if none is found.  The cache is loaded if it was not already.  If loading
+@@ -190,12 +235,15 @@ _dl_load_cache_lookup (const char *name)
+ 
+   /* Print a message if the loading of libs is traced.  */
+   if (__glibc_unlikely (GLRO(dl_debug_mask) & DL_DEBUG_LIBS))
+-    _dl_debug_printf (" search cache=%s\n", LD_SO_CACHE);
++    _dl_debug_printf (" search cache=%s\n", ld_so_cache ());
++
++  if (__glibc_unlikely (ld_so_cache () == ld_so_cache_lacking))
++    return NULL;
+ 
+   if (cache == NULL)
+     {
+       /* Read the contents of the file.  */
+-      void *file = _dl_sysdep_read_whole_file (LD_SO_CACHE, &cachesize,
++      void *file = _dl_sysdep_read_whole_file (ld_so_cache (), &cachesize,
+ 					       PROT_READ);
+ 
+       /* We can handle three different cache file formats here:
+diff --git a/elf/dl-load.c b/elf/dl-load.c
+index f3201e7c14..a69aec3428 100644
+--- a/elf/dl-load.c
++++ b/elf/dl-load.c
+@@ -2152,28 +2152,6 @@ _dl_map_object (struct link_map *loader, const char *name,
+ 			loader ?: GL(dl_ns)[LM_ID_BASE]._ns_loaded,
+ 			LA_SER_LIBPATH, &found_other_class);
+ 
+-      /* Look at the RUNPATH information for this binary.  */
+-      if (fd == -1 && loader != NULL
+-	  && cache_rpath (loader, &loader->l_runpath_dirs,
+-			  DT_RUNPATH, "RUNPATH"))
+-	fd = open_path (name, namelen, mode,
+-			&loader->l_runpath_dirs, &realname, &fb, loader,
+-			LA_SER_RUNPATH, &found_other_class);
+-
+-      if (fd == -1)
+-        {
+-          realname = _dl_sysdep_open_object (name, namelen, &fd);
+-          if (realname != NULL)
+-            {
+-              fd = open_verify (realname, fd,
+-                                &fb, loader ?: GL(dl_ns)[nsid]._ns_loaded,
+-                                LA_SER_CONFIG, mode, &found_other_class,
+-                                false);
+-              if (fd == -1)
+-                free (realname);
+-            }
+-        }
+-
+ #ifdef USE_LDCONFIG
+       if (fd == -1
+ 	  && (__glibc_likely ((mode & __RTLD_SECURE) == 0)
+@@ -2232,6 +2210,28 @@ _dl_map_object (struct link_map *loader, const char *name,
+ 	}
+ #endif
+ 
++      /* Look at the RUNPATH information for this binary.  */
++      if (fd == -1 && loader != NULL
++	  && cache_rpath (loader, &loader->l_runpath_dirs,
++			  DT_RUNPATH, "RUNPATH"))
++	fd = open_path (name, namelen, mode,
++			&loader->l_runpath_dirs, &realname, &fb, loader,
++			LA_SER_RUNPATH, &found_other_class);
++
++      if (fd == -1)
++        {
++          realname = _dl_sysdep_open_object (name, namelen, &fd);
++          if (realname != NULL)
++            {
++              fd = open_verify (realname, fd,
++                                &fb, loader ?: GL(dl_ns)[nsid]._ns_loaded,
++                                LA_SER_CONFIG, mode, &found_other_class,
++                                false);
++              if (fd == -1)
++                free (realname);
++            }
++        }
++
+       /* Finally, try the default path.  */
+       if (fd == -1
+ 	  && ((l = loader ?: GL(dl_ns)[nsid]._ns_loaded) == NULL
diff --git a/gnu/packages/patches/glibc-hurd-clock_gettime_monotonic.patch b/gnu/packages/patches/glibc-hurd-clock_gettime_monotonic.patch
index 1c3fe427f9..e31f99a1ce 100644
--- a/gnu/packages/patches/glibc-hurd-clock_gettime_monotonic.patch
+++ b/gnu/packages/patches/glibc-hurd-clock_gettime_monotonic.patch
@@ -24,18 +24,17 @@ Subject: [PATCH 2/2] Use realtime clock for the monotonic clock.
  4 files changed, 6 insertions(+), 5 deletions(-)
 
 diff --git a/sysdeps/mach/clock_gettime.c b/sysdeps/mach/clock_gettime.c
-index ac3547df3c..af8681ba4e 100644
+index 6862fc8c..be1449bf 100644
 --- a/sysdeps/mach/clock_gettime.c
 +++ b/sysdeps/mach/clock_gettime.c
-@@ -25,7 +25,7 @@
- int
- __clock_gettime (clockid_t clock_id, struct timespec *ts)
- {
--  if (clock_id != CLOCK_REALTIME)
-+  if (clock_id != CLOCK_MONOTONIC && clock_id != CLOCK_REALTIME)
-     {
-       errno = EINVAL;
-       return -1;
+@@ -32,6 +32,7 @@ __clock_gettime (clockid_t clock_id, struct timespec *ts)
+   switch (clock_id) {
+ 
+     case CLOCK_REALTIME:
++    case CLOCK_MONOTONIC:
+       {
+ 	/* __host_get_time can only fail if passed an invalid host_t.
+ 	   __mach_host_self could theoretically fail (producing an
 diff --git a/sysdeps/mach/hurd/bits/posix_opt.h b/sysdeps/mach/hurd/bits/posix_opt.h
 index 0050151332..27b3a28ab7 100644
 --- a/sysdeps/mach/hurd/bits/posix_opt.h
diff --git a/gnu/packages/patches/glibc-skip-c++.patch b/gnu/packages/patches/glibc-skip-c++.patch
new file mode 100644
index 0000000000..b2cbe76d3b
--- /dev/null
+++ b/gnu/packages/patches/glibc-skip-c++.patch
@@ -0,0 +1,31 @@
+When building, say, glibc 2.31 using a compiler that's itself linked
+against 2.33, linking fails with:
+
+  gcc -Wl,-rpath-link=/tmp/guix-build-glibc-2.31.drv-0/build:/tmp/guix-build-glibc-2.31.drv-0/build/math:/tmp/guix-build-glibc-2.31.drv-0/build/elf:/tmp/guix-build-glibc-2.31.drv-0/build/dlfcn:/tmp/guix-build-glibc-2.31.drv-0/build/nss:/tmp/guix-build-glibc-2.31.drv-0/build/nis:/tmp/guix-build-glibc-2.31.drv-0/build/rt:/tmp/guix-build-glibc-2.31.drv-0/build/resolv:/tmp/guix-build-glibc-2.31.drv-0/build/mathvec:/tmp/guix-build-glibc-2.31.drv-0/build/support:/tmp/guix-build-glibc-2.31.drv-0/build/crypt:/tmp/guix-build-glibc-2.31.drv-0/build/nptl -nostdlib -nostartfiles -o /tmp/guix-build-glibc-2.31.drv-0/build/support/links-dso-program    -Wl,-z,combreloc -Wl,-z,relro -Wl,--hash-style=both /tmp/guix-build-glibc-2.31.drv-0/build/csu/crt1.o /tmp/guix-build-glibc-2.31.drv-0/build/csu/crti.o `gcc  --print-file-name=crtbegin.o` /tmp/guix-build-glibc-2.31.drv-0/build/support/links-dso-program.o -lstdc++ -lgcc -lgcc_s  -Wl,-dynamic-linker=/gnu/store/...-glibc-2.31/lib/ld-linux-x86-64.so.2  /tmp/guix-build-glibc-2.31.drv-0/build/libc.so.6 /tmp/guix-build-glibc-2.31.drv-0/build/libc_nonshared.a -Wl,--as-needed /tmp/guix-build-glibc-2.31.drv-0/build/elf/ld.so -Wl,--no-as-needed -lgcc  `gcc  --print-file-name=crtend.o` /tmp/guix-build-glibc-2.31.drv-0/build/csu/crtn.o
+  ld: /gnu/store/...-gcc-10.3.0-lib/lib/gcc/x86_64-unknown-linux-gnu/10.3.0/../../../libstdc++.so: undefined reference to `fstat64@GLIBC_2.33'
+  ld: /gnu/store/...-gcc-10.3.0-lib/lib/gcc/x86_64-unknown-linux-gnu/10.3.0/../../../libstdc++.so: undefined reference to `lstat@GLIBC_2.33'
+  ld: /gnu/store/...-gcc-10.3.0-lib/lib/gcc/x86_64-unknown-linux-gnu/10.3.0/../../../libstdc++.so: undefined reference to `stat@GLIBC_2.33'
+  collect2: error: ld returned 1 exit status
+
+This is unsurprising given that libstdc++.so here is linked against 2.33,
+whereas libc.so.6 here is 2.31.
+
+This patch works around it by not building the offending program.
+
+diff --git a/support/Makefile b/support/Makefile
+index bb9889ef..6614943b 100644
+--- a/support/Makefile
++++ b/support/Makefile
+@@ -210,12 +210,7 @@ CFLAGS-support_paths.c = \
+ # -fexcess-precision=standard.
+ CFLAGS-timespec.c += -fexcess-precision=standard
+ 
+-ifeq (,$(CXX))
+ LINKS_DSO_PROGRAM = links-dso-program-c
+-else
+-LINKS_DSO_PROGRAM = links-dso-program
+-LDLIBS-links-dso-program = -lstdc++ -lgcc -lgcc_s $(libunwind)
+-endif
+ 
+ ifeq (yes,$(have-selinux))
+ LDLIBS-$(LINKS_DSO_PROGRAM) += -lselinux
diff --git a/gnu/packages/patches/glibc-static-nss.patch b/gnu/packages/patches/glibc-static-nss.patch
new file mode 100644
index 0000000000..1a9db616cc
--- /dev/null
+++ b/gnu/packages/patches/glibc-static-nss.patch
@@ -0,0 +1,1244 @@
+This patch reinstates support for static NSS, which glibc 2.33 broke:
+
+  https://sourceware.org/bugzilla/show_bug.cgi?id=27959
+
+Patch obtained by running:
+
+  git diff f0c28504a9877be5da3ed1215f2da2d5914bbb0b..f9c8b11ed7726b858cd7b7cea0d3d7c5233d78cf
+  git diff 5e1ce61e3e71fb7ffe53f58fe96e67cb15f94854{^,}
+  git diff 135425a1dd50cbe2b9db0628d6c2b36c7889f30b{^,}
+
+It corresponds to these changes:
+
+  f9c8b11ed7 * nss: Access nss_files through direct references
+  6212bb67f4 * nss_files: Move into libc
+  36861a968a * nss_files: Add generic code for set*ent, end*ent and file open
+  f0c28504a9 * nss_files: Allocate nscd file registration data on the heap
+  5e1ce61e3e * nss: Fix NSS_DECLARE_MODULE_FUNCTIONS handling of _nss_*_endnetgrent
+  135425a1dd * nss: Fix build error with --disable-nscd
+
+... plus a manual fix in 'files-network.c' to address this compilation error:
+
+  nss_files/files-network.c: In function ‘_nss_files_parse_netent’:
+  nss_files/files-network.c:72:20: error: implicit declaration of function ‘__inet_network’; did you mean ‘inet_network’? [-Werror=implicit-function-declaration]
+     72 |    result->n_net = __inet_network (addr);
+	|                    ^~~~~~~~~~~~~~
+  nss_files/files-parse.c:106:3: note: in definition of macro ‘LINE_PARSER’
+    106 |   BODY;               \
+	|   ^~~~
+
+diff --git a/include/libc-symbols.h b/include/libc-symbols.h
+index 127ea656c2..d41ecf4384 100644
+--- a/include/libc-symbols.h
++++ b/include/libc-symbols.h
+@@ -798,29 +798,6 @@ for linking")
+ # define libdl_hidden_data_ver(local, name)
+ #endif
+ 
+-#if IS_IN (libnss_files)
+-# define libnss_files_hidden_proto(name, attrs...) hidden_proto (name, ##attrs)
+-# define libnss_files_hidden_tls_proto(name, attrs...) \
+-  hidden_tls_proto (name, ##attrs)
+-# define libnss_files_hidden_def(name) hidden_def (name)
+-# define libnss_files_hidden_weak(name) hidden_weak (name)
+-# define libnss_files_hidden_ver(local, name) hidden_ver (local, name)
+-# define libnss_files_hidden_data_def(name) hidden_data_def (name)
+-# define libnss_files_hidden_tls_def(name) hidden_tls_def (name)
+-# define libnss_files_hidden_data_weak(name) hidden_data_weak (name)
+-# define libnss_files_hidden_data_ver(local, name) hidden_data_ver(local, name)
+-#else
+-# define libnss_files_hidden_proto(name, attrs...)
+-# define libnss_files_hidden_tls_proto(name, attrs...)
+-# define libnss_files_hidden_def(name)
+-# define libnss_files_hidden_weak(name)
+-# define libnss_files_hidden_ver(local, name)
+-# define libnss_files_hidden_data_def(name)
+-# define libnss_files_hidden_tls_def(name)
+-# define libnss_files_hidden_data_weak(name)
+-# define libnss_files_hidden_data_ver(local, name)
+-#endif
+-
+ #if IS_IN (libnsl)
+ # define libnsl_hidden_proto(name, attrs...) hidden_proto (name, ##attrs)
+ # define libnsl_hidden_tls_proto(name, attrs...) \
+diff --git a/include/netdb.h b/include/netdb.h
+index 82e102ff76..4dcdbb8cd4 100644
+--- a/include/netdb.h
++++ b/include/netdb.h
+@@ -217,7 +217,7 @@ extern enum nss_status _nss_netgroup_parseline (char **cursor,
+ 						struct __netgrent *result,
+ 						char *buffer, size_t buflen,
+ 						int *errnop);
+-libnss_files_hidden_proto (_nss_netgroup_parseline)
++libc_hidden_proto (_nss_netgroup_parseline)
+ 
+ #define DECLARE_NSS_PROTOTYPES(service)					      \
+ extern enum nss_status _nss_ ## service ## _setprotoent (int);		      \
+diff --git a/include/nss_files.h b/include/nss_files.h
+index 6a0dcdb85b..6190cac6be 100644
+--- a/include/nss_files.h
++++ b/include/nss_files.h
+@@ -19,7 +19,11 @@
+ #ifndef _NSS_FILES_H
+ #define _NSS_FILES_H
+ 
++#include <nss.h>
+ #include <stdio.h>
++#if IS_IN (libc)
++#include <libc-lock.h>
++#endif
+ 
+ /* Open PATH for reading, as a data source for nss_files.  */
+ FILE *__nss_files_fopen (const char *path);
+@@ -47,6 +51,63 @@ int __nss_readline_seek (FILE *fp, off64_t offset) attribute_hidden;
+ int __nss_parse_line_result (FILE *fp, off64_t offset, int parse_line_result);
+ libc_hidden_proto (__nss_parse_line_result)
+ 
++/* Per-file data.  Used by the *ent functions that need to preserve
++   state across calls.  */
++struct nss_files_per_file_data
++{
++  FILE *stream;
++#if IS_IN (libc)
++  /* The size of locks changes between libc and nss_files, so this
++     member must be last and is only available in libc.  */
++  __libc_lock_define (, lock);
++#endif
++};
++
++/* File index for __nss_files_data_get.  */
++enum nss_files_file
++  {
++    nss_file_aliasent,
++    nss_file_etherent,
++    nss_file_grent,
++    nss_file_hostent,
++    nss_file_netent,
++    nss_file_protoent,
++    nss_file_pwent,
++    nss_file_rpcent,
++    nss_file_servent,
++    nss_file_sgent,
++    nss_file_spent,
++
++    nss_file_count
++  };
++
++/* Obtains a pointer to the per-file data for FILE, which is written
++   to *PDATA, and tries to open the file at PATH for it.  On success,
++   returns NSS_STATUS_SUCCESS, and the caller must later call
++   __nss_files_data_put.  On failure, NSS_STATUS_TRYAGAIN is returned,
++   and *ERRNOP and *HERRNOP are updated if these pointers are not
++   null.  */
++enum nss_status __nss_files_data_open (struct nss_files_per_file_data **pdata,
++                                       enum nss_files_file file,
++                                       const char *path,
++                                       int *errnop, int *herrnop);
++libc_hidden_proto (__nss_files_data_open)
++
++/* Unlock the per-file data, previously obtained by
++   __nss_files_data_open.  */
++void __nss_files_data_put (struct nss_files_per_file_data *data);
++libc_hidden_proto (__nss_files_data_put)
++
++/* Performs the set*ent operation for FILE.  PATH is the file to
++   open.  */
++enum nss_status __nss_files_data_setent (enum nss_files_file file,
++                                           const char *path);
++libc_hidden_proto (__nss_files_data_setent)
++
++/* Performs the end*ent operation for FILE.  */
++enum nss_status __nss_files_data_endent (enum nss_files_file file);
++libc_hidden_proto (__nss_files_data_endent)
++
+ struct parser_data;
+ 
+ /* Instances of the parse_line function from
+@@ -64,16 +125,25 @@ extern nss_files_parse_line _nss_files_parse_servent;
+ extern nss_files_parse_line _nss_files_parse_sgent;
+ extern nss_files_parse_line _nss_files_parse_spent;
+ 
+-libnss_files_hidden_proto (_nss_files_parse_etherent)
++libc_hidden_proto (_nss_files_parse_etherent)
+ libc_hidden_proto (_nss_files_parse_grent)
+-libnss_files_hidden_proto (_nss_files_parse_netent)
+-libnss_files_hidden_proto (_nss_files_parse_protoent)
++libc_hidden_proto (_nss_files_parse_netent)
++libc_hidden_proto (_nss_files_parse_protoent)
+ libc_hidden_proto (_nss_files_parse_pwent)
+-libnss_files_hidden_proto (_nss_files_parse_rpcent)
+-libnss_files_hidden_proto (_nss_files_parse_servent)
++libc_hidden_proto (_nss_files_parse_rpcent)
++libc_hidden_proto (_nss_files_parse_servent)
+ libc_hidden_proto (_nss_files_parse_sgent)
+ libc_hidden_proto (_nss_files_parse_spent)
+ 
++NSS_DECLARE_MODULE_FUNCTIONS (files)
++#undef DEFINE_NSS_FUNCTION
++#define DEFINE_NSS_FUNCTION(x) libc_hidden_proto (_nss_files_##x)
++#include <nss/function.def>
++#undef DEFINE_NSS_FUNCTION
++
++void _nss_files_init (void (*cb) (size_t, struct traced_file *));
++libc_hidden_proto (_nss_files_init)
++
+ /* Generic implementation of fget*ent_r.  Reads lines from FP until
+    EOF or a successful parse into *RESULT using PARSER.  Returns 0 on
+    success, ENOENT on EOF, ERANGE on too-small buffer.  */
+diff --git a/nss/Makefile b/nss/Makefile
+index 9682a31e20..63a386af18 100644
+--- a/nss/Makefile
++++ b/nss/Makefile
+@@ -31,7 +31,8 @@ routines		= nsswitch getnssent getnssent_r digits_dots \
+ 			  compat-lookup nss_hash nss_files_fopen \
+ 			  nss_readline nss_parse_line_result \
+ 			  nss_fgetent_r nss_module nss_action \
+-			  nss_action_parse nss_database
++			  nss_action_parse nss_database nss_files_data \
++			  nss_files_functions
+ 
+ # These are the databases that go through nss dispatch.
+ # Caution: if you add a database here, you must add its real name
+@@ -98,9 +99,11 @@ subdir-dirs = $(services:%=nss_%)
+ vpath %.c $(subdir-dirs) ../locale/programs ../intl
+ 
+ 
+-libnss_files-routines	:= $(addprefix files-, \
+-			     $(filter-out key, $(databases))) \
+-			   files-initgroups files-init
++routines += \
++  $(addprefix files-, $(filter-out key, $(databases))) \
++  files-init \
++  files-initgroups \
++  # routines
+ 
+ libnss_db-dbs		:= $(addprefix db-,\
+ 				       $(filter-out hosts network key alias,\
+@@ -116,12 +119,9 @@ libnss_compat-routines	:= $(addprefix compat-,grp pwd spwd initgroups) \
+ install-others		+= $(inst_vardbdir)/Makefile
+ 
+ # Build static module into libc if requested
+-libnss_files-inhibit-o	= $(filter-out .os,$(object-suffixes))
+ libnss_db-inhibit-o	= $(filter-out .os,$(object-suffixes))
+ libnss_compat-inhibit-o	= $(filter-out .os,$(object-suffixes))
+ ifeq ($(build-static-nss),yes)
+-routines                += $(libnss_files-routines)
+-static-only-routines    += $(libnss_files-routines)
+ tests-static		+= tst-nss-static
+ endif
+ extra-test-objs		+= nss_test1.os nss_test2.os
+@@ -138,8 +138,6 @@ libnss-libc = $(common-objpfx)linkobj/libc.so
+ # for new links:
+ $(services:%=$(objpfx)libnss_%.so): libc-for-link = $(libnss-libc)
+ 
+-$(objpfx)libnss_db.so: $(objpfx)libnss_files.so
+-
+ $(libnss_db-dbs:%=$(objpfx)%.c): $(objpfx)db-%.c: nss_files/files-%.c
+ 	@rm -f $@.new
+ 	(echo '#define EXTERN_PARSER';\
+diff --git a/nss/Versions b/nss/Versions
+index fdddea104c..e551524aa9 100644
+--- a/nss/Versions
++++ b/nss/Versions
+@@ -19,11 +19,12 @@ libc {
+     __nss_services_lookup2; __nss_next2; __nss_lookup;
+     __nss_hash; __nss_database_get;
+     __nss_files_fopen; __nss_readline; __nss_parse_line_result;
+-  }
+-}
++    __nss_files_data_endent;
++    __nss_files_data_open;
++    __nss_files_data_put;
++    __nss_files_data_setent;
+ 
+-libnss_files {
+-  GLIBC_PRIVATE {
++    # Routines formerly in libnss_files.so.2.
+     _nss_files_setaliasent;
+     _nss_files_endaliasent;
+     _nss_files_getaliasbyname_r;
+@@ -109,6 +110,14 @@ libnss_files {
+   }
+ }
+ 
++libnss_files {
++  GLIBC_PRIVATE {
++    # Keep a version node (with a synthesized local: * directive) so that
++    # __bss_* symbols are hidden on targets that need it.
++    __libnss_files_version_placeholder;
++  }
++}
++
+ libnss_db {
+   GLIBC_PRIVATE {
+     _nss_db_setetherent;
+diff --git a/nss/nss_files/files-XXX.c b/nss/nss_files/files-XXX.c
+index b4b989d9bb..c158a891bd 100644
+--- a/nss/nss_files/files-XXX.c
++++ b/nss/nss_files/files-XXX.c
+@@ -45,10 +45,12 @@
+ # include <netdb.h>
+ # define H_ERRNO_PROTO	, int *herrnop
+ # define H_ERRNO_ARG	, herrnop
++# define H_ERRNO_ARG_OR_NULL herrnop
+ # define H_ERRNO_SET(val) (*herrnop = (val))
+ #else
+ # define H_ERRNO_PROTO
+ # define H_ERRNO_ARG
++# define H_ERRNO_ARG_OR_NULL NULL
+ # define H_ERRNO_SET(val) ((void) 0)
+ #endif
+ 
+@@ -58,15 +60,11 @@
+ # define EXTRA_ARGS_VALUE
+ #endif
+ 
+-/* Locks the static variables in this file.  */
+-__libc_lock_define_initialized (static, lock)
+ 
+ /* Maintenance of the stream open on the database file.  For getXXent
+    operations the stream needs to be held open across calls, the other
+    getXXbyYY operations all use their own stream.  */
+ 
+-static FILE *stream;
+-
+ /* Open database file if not already opened.  */
+ static enum nss_status
+ internal_setent (FILE **stream)
+@@ -91,42 +89,16 @@ internal_setent (FILE **stream)
+ enum nss_status
+ CONCAT(_nss_files_set,ENTNAME) (int stayopen)
+ {
+-  enum nss_status status;
+-
+-  __libc_lock_lock (lock);
+-
+-  status = internal_setent (&stream);
+-
+-  __libc_lock_unlock (lock);
+-
+-  return status;
++  return __nss_files_data_setent (CONCAT (nss_file_, ENTNAME), DATAFILE);
+ }
++libc_hidden_def (CONCAT (_nss_files_set,ENTNAME))
+ 
+-
+-/* Close the database file.  */
+-static void
+-internal_endent (FILE **stream)
+-{
+-  if (*stream != NULL)
+-    {
+-      fclose (*stream);
+-      *stream = NULL;
+-    }
+-}
+-
+-
+-/* Thread-safe, exported version of that.  */
+ enum nss_status
+ CONCAT(_nss_files_end,ENTNAME) (void)
+ {
+-  __libc_lock_lock (lock);
+-
+-  internal_endent (&stream);
+-
+-  __libc_lock_unlock (lock);
+-
+-  return NSS_STATUS_SUCCESS;
++  return __nss_files_data_endent (CONCAT (nss_file_, ENTNAME));
+ }
++libc_hidden_def (CONCAT (_nss_files_end,ENTNAME))
+ 
+ 
+ /* Parsing the database file into `struct STRUCTURE' data structures.  */
+@@ -194,28 +166,22 @@ CONCAT(_nss_files_get,ENTNAME_r) (struct STRUCTURE *result, char *buffer,
+ 				  size_t buflen, int *errnop H_ERRNO_PROTO)
+ {
+   /* Return next entry in host file.  */
+-  enum nss_status status = NSS_STATUS_SUCCESS;
+-
+-  __libc_lock_lock (lock);
+ 
+-  /* Be prepared that the set*ent function was not called before.  */
+-  if (stream == NULL)
+-    {
+-      int save_errno = errno;
+-
+-      status = internal_setent (&stream);
+-
+-      __set_errno (save_errno);
+-    }
+-
+-  if (status == NSS_STATUS_SUCCESS)
+-    status = internal_getent (stream, result, buffer, buflen, errnop
+-			      H_ERRNO_ARG EXTRA_ARGS_VALUE);
++  struct nss_files_per_file_data *data;
++  enum nss_status status = __nss_files_data_open (&data,
++						  CONCAT (nss_file_, ENTNAME),
++						  DATAFILE,
++						  errnop, H_ERRNO_ARG_OR_NULL);
++  if (status != NSS_STATUS_SUCCESS)
++    return status;
+ 
+-  __libc_lock_unlock (lock);
++  status = internal_getent (data->stream, result, buffer, buflen, errnop
++			    H_ERRNO_ARG EXTRA_ARGS_VALUE);
+ 
++  __nss_files_data_put (data);
+   return status;
+ }
++libc_hidden_def (CONCAT (_nss_files_get,ENTNAME_r))
+ 
+ /* Macro for defining lookup functions for this file-based database.
+ 
+@@ -248,8 +214,9 @@ _nss_files_get##name##_r (proto,					      \
+ 	     == NSS_STATUS_SUCCESS)					      \
+ 	{ break_if_match }						      \
+ 									      \
+-      internal_endent (&stream);					      \
++      fclose (stream);							      \
+     }									      \
+ 									      \
+   return status;							      \
+-}
++}									      \
++libc_hidden_def (_nss_files_get##name##_r)
+diff --git a/nss/nss_files/files-alias.c b/nss/nss_files/files-alias.c
+index 30971bfe56..8c6e176ff6 100644
+--- a/nss/nss_files/files-alias.c
++++ b/nss/nss_files/files-alias.c
+@@ -31,18 +31,11 @@
+ #include "nsswitch.h"
+ #include <nss_files.h>
+ 
+-NSS_DECLARE_MODULE_FUNCTIONS (files)
+-
+-/* Locks the static variables in this file.  */
+-__libc_lock_define_initialized (static, lock)
+ 
+ /* Maintenance of the stream open on the database file.  For getXXent
+    operations the stream needs to be held open across calls, the other
+    getXXbyYY operations all use their own stream.  */
+ 
+-static FILE *stream;
+-
+-
+ static enum nss_status
+ internal_setent (FILE **stream)
+ {
+@@ -66,42 +59,16 @@ internal_setent (FILE **stream)
+ enum nss_status
+ _nss_files_setaliasent (void)
+ {
+-  enum nss_status status;
+-
+-  __libc_lock_lock (lock);
+-
+-  status = internal_setent (&stream);
+-
+-  __libc_lock_unlock (lock);
+-
+-  return status;
++  return __nss_files_data_setent (nss_file_aliasent, "/etc/aliases");
+ }
++libc_hidden_def (_nss_files_setaliasent)
+ 
+-
+-/* Close the database file.  */
+-static void
+-internal_endent (FILE **stream)
+-{
+-  if (*stream != NULL)
+-    {
+-      fclose (*stream);
+-      *stream = NULL;
+-    }
+-}
+-
+-
+-/* Thread-safe, exported version of that.  */
+ enum nss_status
+ _nss_files_endaliasent (void)
+ {
+-  __libc_lock_lock (lock);
+-
+-  internal_endent (&stream);
+-
+-  __libc_lock_unlock (lock);
+-
+-  return NSS_STATUS_SUCCESS;
++  return __nss_files_data_endent (nss_file_aliasent);
+ }
++libc_hidden_def (_nss_files_endaliasent)
+ 
+ /* Parsing the database file into `struct aliasent' data structures.  */
+ static enum nss_status
+@@ -131,7 +98,7 @@ get_next_alias (FILE *stream, const char *match, struct aliasent *result,
+       /* Read the first line.  It must contain the alias name and
+ 	 possibly some alias names.  */
+       first_unused[room_left - 1] = '\xff';
+-      line = fgets_unlocked (first_unused, room_left, stream);
++      line = __fgets_unlocked (first_unused, room_left, stream);
+       if (line == NULL)
+ 	/* Nothing to read.  */
+ 	break;
+@@ -220,7 +187,7 @@ get_next_alias (FILE *stream, const char *match, struct aliasent *result,
+ 		      /* If the file does not exist we simply ignore
+ 			 the statement.  */
+ 		      if (listfile != NULL
+-			  && (old_line = strdup (line)) != NULL)
++			  && (old_line = __strdup (line)) != NULL)
+ 			{
+ 			  while (! feof_unlocked (listfile))
+ 			    {
+@@ -232,8 +199,8 @@ get_next_alias (FILE *stream, const char *match, struct aliasent *result,
+ 				}
+ 
+ 			      first_unused[room_left - 1] = '\xff';
+-			      line = fgets_unlocked (first_unused, room_left,
+-						     listfile);
++			      line = __fgets_unlocked (first_unused, room_left,
++						       listfile);
+ 			      if (line == NULL)
+ 				break;
+ 			      if (first_unused[room_left - 1] != '\xff')
+@@ -335,7 +302,7 @@ get_next_alias (FILE *stream, const char *match, struct aliasent *result,
+ 		  /* The just read character is a white space and so
+ 		     can be ignored.  */
+ 		  first_unused[room_left - 1] = '\xff';
+-		  line = fgets_unlocked (first_unused, room_left, stream);
++		  line = __fgets_unlocked (first_unused, room_left, stream);
+ 		  if (line == NULL)
+ 		    {
+ 		      /* Continuation line without any data and
+@@ -369,29 +336,25 @@ _nss_files_getaliasent_r (struct aliasent *result, char *buffer, size_t buflen,
+ 			  int *errnop)
+ {
+   /* Return next entry in host file.  */
+-  enum nss_status status = NSS_STATUS_SUCCESS;
+ 
+-  __libc_lock_lock (lock);
+-
+-  /* Be prepared that the set*ent function was not called before.  */
+-  if (stream == NULL)
+-    status = internal_setent (&stream);
+-
+-  if (status == NSS_STATUS_SUCCESS)
+-    {
+-      result->alias_local = 1;
++  struct nss_files_per_file_data *data;
++  enum nss_status status = __nss_files_data_open (&data, nss_file_aliasent,
++						  "/etc/aliases", errnop, NULL);
++  if (status != NSS_STATUS_SUCCESS)
++    return status;
+ 
+-      /* Read lines until we get a definite result.  */
+-      do
+-	status = get_next_alias (stream, NULL, result, buffer, buflen, errnop);
+-      while (status == NSS_STATUS_RETURN);
+-    }
++  result->alias_local = 1;
+ 
+-  __libc_lock_unlock (lock);
++  /* Read lines until we get a definite result.  */
++  do
++    status = get_next_alias (data->stream, NULL, result, buffer, buflen,
++			     errnop);
++  while (status == NSS_STATUS_RETURN);
+ 
++  __nss_files_data_put (data);
+   return status;
+ }
+-
++libc_hidden_def (_nss_files_getaliasent_r)
+ 
+ enum nss_status
+ _nss_files_getaliasbyname_r (const char *name, struct aliasent *result,
+@@ -418,9 +381,10 @@ _nss_files_getaliasbyname_r (const char *name, struct aliasent *result,
+       do
+ 	status = get_next_alias (stream, name, result, buffer, buflen, errnop);
+       while (status == NSS_STATUS_RETURN);
+-    }
+ 
+-  internal_endent (&stream);
++      fclose (stream);
++    }
+ 
+   return status;
+ }
++libc_hidden_def (_nss_files_getaliasbyname_r)
+diff --git a/nss/nss_files/files-ethers.c b/nss/nss_files/files-ethers.c
+index 2fe7f81e4b..7c2c2b9833 100644
+--- a/nss/nss_files/files-ethers.c
++++ b/nss/nss_files/files-ethers.c
+@@ -20,8 +20,6 @@
+ #include <netinet/if_ether.h>
+ #include <nss.h>
+ 
+-NSS_DECLARE_MODULE_FUNCTIONS (files)
+-
+ struct etherent_data {};
+ 
+ #define ENTNAME		etherent
+diff --git a/nss/nss_files/files-grp.c b/nss/nss_files/files-grp.c
+index 49be38e8b1..a716d948e2 100644
+--- a/nss/nss_files/files-grp.c
++++ b/nss/nss_files/files-grp.c
+@@ -19,8 +19,6 @@
+ #include <grp.h>
+ #include <nss.h>
+ 
+-NSS_DECLARE_MODULE_FUNCTIONS (files)
+-
+ #define STRUCTURE	group
+ #define ENTNAME		grent
+ #define DATABASE	"group"
+diff --git a/nss/nss_files/files-hosts.c b/nss/nss_files/files-hosts.c
+index 2b47ec3e53..d54d91d038 100644
+--- a/nss/nss_files/files-hosts.c
++++ b/nss/nss_files/files-hosts.c
+@@ -26,8 +26,6 @@
+ #include <alloc_buffer.h>
+ #include <nss.h>
+ 
+-NSS_DECLARE_MODULE_FUNCTIONS (files)
+-
+ /* Get implementation for some internal functions.  */
+ #include "../resolv/res_hconf.h"
+ 
+@@ -57,12 +55,13 @@ LINE_PARSER
+    STRING_FIELD (addr, isspace, 1);
+ 
+    /* Parse address.  */
+-   if (inet_pton (af == AF_UNSPEC ? AF_INET : af, addr, entdata->host_addr)
++   if (__inet_pton (af == AF_UNSPEC ? AF_INET : af, addr, entdata->host_addr)
+        > 0)
+      af = af == AF_UNSPEC ? AF_INET : af;
+    else
+      {
+-       if (af == AF_INET && inet_pton (AF_INET6, addr, entdata->host_addr) > 0)
++       if (af == AF_INET
++	   && __inet_pton (AF_INET6, addr, entdata->host_addr) > 0)
+ 	 {
+ 	   if (IN6_IS_ADDR_V4MAPPED (entdata->host_addr))
+ 	     memcpy (entdata->host_addr, entdata->host_addr + 12, INADDRSZ);
+@@ -76,7 +75,7 @@ LINE_PARSER
+ 	     return 0;
+ 	 }
+        else if (af == AF_UNSPEC
+-		&& inet_pton (AF_INET6, addr, entdata->host_addr) > 0)
++		&& __inet_pton (AF_INET6, addr, entdata->host_addr) > 0)
+ 	 af = AF_INET6;
+        else
+ 	 /* Illegal address: ignore line.  */
+@@ -349,7 +348,7 @@ _nss_files_gethostbyname3_r (const char *name, int af, struct hostent *result,
+ 	status = gethostbyname3_multi
+ 	  (stream, name, af, result, buffer, buflen, errnop, herrnop);
+ 
+-      internal_endent (&stream);
++      fclose (stream);
+     }
+ 
+   if (canonp && status == NSS_STATUS_SUCCESS)
+@@ -357,6 +356,7 @@ _nss_files_gethostbyname3_r (const char *name, int af, struct hostent *result,
+ 
+   return status;
+ }
++libc_hidden_def (_nss_files_gethostbyname3_r)
+ 
+ enum nss_status
+ _nss_files_gethostbyname_r (const char *name, struct hostent *result,
+@@ -366,6 +366,7 @@ _nss_files_gethostbyname_r (const char *name, struct hostent *result,
+   return _nss_files_gethostbyname3_r (name, AF_INET, result, buffer, buflen,
+ 				      errnop, herrnop, NULL, NULL);
+ }
++libc_hidden_def (_nss_files_gethostbyname_r)
+ 
+ enum nss_status
+ _nss_files_gethostbyname2_r (const char *name, int af, struct hostent *result,
+@@ -375,6 +376,7 @@ _nss_files_gethostbyname2_r (const char *name, int af, struct hostent *result,
+   return _nss_files_gethostbyname3_r (name, af, result, buffer, buflen,
+ 				      errnop, herrnop, NULL, NULL);
+ }
++libc_hidden_def (_nss_files_gethostbyname2_r)
+ 
+ enum nss_status
+ _nss_files_gethostbyname4_r (const char *name, struct gaih_addrtuple **pat,
+@@ -475,7 +477,7 @@ _nss_files_gethostbyname4_r (const char *name, struct gaih_addrtuple **pat,
+ 	  status = NSS_STATUS_SUCCESS;
+ 	}
+ 
+-      internal_endent (&stream);
++      fclose (stream);
+     }
+   else if (status == NSS_STATUS_TRYAGAIN)
+     {
+@@ -490,3 +492,4 @@ _nss_files_gethostbyname4_r (const char *name, struct gaih_addrtuple **pat,
+ 
+   return status;
+ }
++libc_hidden_def (_nss_files_gethostbyname4_r)
+diff --git a/nss/nss_files/files-init.c b/nss/nss_files/files-init.c
+index 717c9fd334..18ed288d04 100644
+--- a/nss/nss_files/files-init.c
++++ b/nss/nss_files/files-init.c
+@@ -21,8 +21,7 @@
+ #include <string.h>
+ #include <nscd/nscd.h>
+ #include <nss.h>
+-
+-NSS_DECLARE_MODULE_FUNCTIONS (files)
++#include <nss_files.h>
+ 
+ static void
+ register_file (void (*cb) (size_t, struct traced_file *),
+@@ -49,5 +48,6 @@ _nss_files_init (void (*cb) (size_t, struct traced_file *))
+   register_file (cb, servdb, "/etc/services", 0);
+   register_file (cb, netgrdb, "/etc/netgroup", 0);
+ }
++libc_hidden_def (_nss_files_init)
+ 
+ #endif
+diff --git a/nss/nss_files/files-initgroups.c b/nss/nss_files/files-initgroups.c
+index 6fcea40b55..b44211e50b 100644
+--- a/nss/nss_files/files-initgroups.c
++++ b/nss/nss_files/files-initgroups.c
+@@ -28,8 +28,6 @@
+ #include <nss.h>
+ #include <nss_files.h>
+ 
+-NSS_DECLARE_MODULE_FUNCTIONS (files)
+-
+ enum nss_status
+ _nss_files_initgroups_dyn (const char *user, gid_t group, long int *start,
+ 			   long int *size, gid_t **groupsp, long int limit,
+@@ -129,3 +127,4 @@ _nss_files_initgroups_dyn (const char *user, gid_t group, long int *start,
+ 
+   return status == NSS_STATUS_SUCCESS && !any ? NSS_STATUS_NOTFOUND : status;
+ }
++libc_hidden_def (_nss_files_initgroups_dyn)
+diff --git a/nss/nss_files/files-netgrp.c b/nss/nss_files/files-netgrp.c
+index f8c821c2f0..75bfbd9e44 100644
+--- a/nss/nss_files/files-netgrp.c
++++ b/nss/nss_files/files-netgrp.c
+@@ -28,11 +28,9 @@
+ #include "netgroup.h"
+ #include <nss_files.h>
+ 
+-NSS_DECLARE_MODULE_FUNCTIONS (files)
+-
+ #define DATAFILE	"/etc/netgroup"
+ 
+-libnss_files_hidden_proto (_nss_files_endnetgrent)
++libc_hidden_proto (_nss_files_endnetgrent)
+ 
+ #define EXPAND(needed)							      \
+   do									      \
+@@ -152,7 +150,7 @@ _nss_files_setnetgrent (const char *group, struct __netgrent *result)
+ 
+   return status;
+ }
+-
++libc_hidden_def (_nss_files_setnetgrent)
+ 
+ enum nss_status
+ _nss_files_endnetgrent (struct __netgrent *result)
+@@ -164,7 +162,7 @@ _nss_files_endnetgrent (struct __netgrent *result)
+   result->cursor = NULL;
+   return NSS_STATUS_SUCCESS;
+ }
+-libnss_files_hidden_def (_nss_files_endnetgrent)
++libc_hidden_def (_nss_files_endnetgrent)
+ 
+ static char *
+ strip_whitespace (char *str)
+@@ -279,7 +277,7 @@ _nss_netgroup_parseline (char **cursor, struct __netgrent *result,
+ 
+   return status;
+ }
+-libnss_files_hidden_def (_nss_netgroup_parseline)
++libc_hidden_def (_nss_netgroup_parseline)
+ 
+ 
+ enum nss_status
+@@ -293,3 +291,4 @@ _nss_files_getnetgrent_r (struct __netgrent *result, char *buffer,
+ 
+   return status;
+ }
++libc_hidden_def (_nss_files_getnetgrent_r)
+diff --git a/nss/nss_files/files-network.c b/nss/nss_files/files-network.c
+index 9cd7d7dc79..217ed78609 100644
+--- a/nss/nss_files/files-network.c
++++ b/nss/nss_files/files-network.c
+@@ -22,8 +22,6 @@
+ #include <stdint.h>
+ #include <nss.h>
+ 
+-NSS_DECLARE_MODULE_FUNCTIONS (files)
+-
+ #define ENTNAME		netent
+ #define DATABASE	"networks"
+ #define NEED_H_ERRNO
+@@ -71,7 +69,7 @@ LINE_PARSER
+        *cp = '\0';
+        addr = newp;
+      }
+-   result->n_net = inet_network (addr);
++   result->n_net = inet_network (addr);
+    result->n_addrtype = AF_INET;
+ 
+  })
+diff --git a/nss/nss_files/files-parse.c b/nss/nss_files/files-parse.c
+index 68c51c7cbf..997eac573a 100644
+--- a/nss/nss_files/files-parse.c
++++ b/nss/nss_files/files-parse.c
+@@ -74,13 +74,7 @@ struct parser_data
+ /* Export the line parser function so it can be used in nss_db.  */
+ # define parser_stclass /* Global */
+ # define parse_line CONCAT(_nss_files_parse_,ENTNAME)
+-# if IS_IN (libc)
+-/* We are defining one of the functions that actually lives in libc
+-   because it is used to implement fget*ent and suchlike.  */
+-#  define nss_files_parse_hidden_def(name) libc_hidden_def (name)
+-# else
+-#  define nss_files_parse_hidden_def(name) libnss_files_hidden_def (name)
+-# endif
++# define nss_files_parse_hidden_def(name) libc_hidden_def (name)
+ #endif
+ 
+ 
+diff --git a/nss/nss_files/files-proto.c b/nss/nss_files/files-proto.c
+index 98d082c642..13072692c1 100644
+--- a/nss/nss_files/files-proto.c
++++ b/nss/nss_files/files-proto.c
+@@ -19,8 +19,6 @@
+ #include <netdb.h>
+ #include <nss.h>
+ 
+-NSS_DECLARE_MODULE_FUNCTIONS (files)
+-
+ #define ENTNAME		protoent
+ #define DATABASE	"protocols"
+ 
+diff --git a/nss/nss_files/files-pwd.c b/nss/nss_files/files-pwd.c
+index b04165ddde..5c74c6da9b 100644
+--- a/nss/nss_files/files-pwd.c
++++ b/nss/nss_files/files-pwd.c
+@@ -19,8 +19,6 @@
+ #include <pwd.h>
+ #include <nss.h>
+ 
+-NSS_DECLARE_MODULE_FUNCTIONS (files)
+-
+ #define STRUCTURE	passwd
+ #define ENTNAME		pwent
+ #define DATABASE	"passwd"
+diff --git a/nss/nss_files/files-rpc.c b/nss/nss_files/files-rpc.c
+index eeb2725d2c..3dea8f18f2 100644
+--- a/nss/nss_files/files-rpc.c
++++ b/nss/nss_files/files-rpc.c
+@@ -19,8 +19,6 @@
+ #include <rpc/netdb.h>
+ #include <nss.h>
+ 
+-NSS_DECLARE_MODULE_FUNCTIONS (files)
+-
+ #define ENTNAME		rpcent
+ #define DATABASE	"rpc"
+ 
+diff --git a/nss/nss_files/files-service.c b/nss/nss_files/files-service.c
+index f4f0985377..a8d83e094e 100644
+--- a/nss/nss_files/files-service.c
++++ b/nss/nss_files/files-service.c
+@@ -20,8 +20,6 @@
+ #include <netdb.h>
+ #include <nss.h>
+ 
+-NSS_DECLARE_MODULE_FUNCTIONS (files)
+-
+ #define ENTNAME		servent
+ #define DATABASE	"services"
+ 
+diff --git a/nss/nss_files/files-sgrp.c b/nss/nss_files/files-sgrp.c
+index 6b1c9eac02..213a408e7b 100644
+--- a/nss/nss_files/files-sgrp.c
++++ b/nss/nss_files/files-sgrp.c
+@@ -19,8 +19,6 @@
+ #include <gshadow.h>
+ #include <nss.h>
+ 
+-NSS_DECLARE_MODULE_FUNCTIONS (files)
+-
+ #define STRUCTURE	sgrp
+ #define ENTNAME		sgent
+ #define DATABASE	"gshadow"
+diff --git a/nss/nss_files/files-spwd.c b/nss/nss_files/files-spwd.c
+index 976deaf918..d031257a20 100644
+--- a/nss/nss_files/files-spwd.c
++++ b/nss/nss_files/files-spwd.c
+@@ -19,8 +19,6 @@
+ #include <shadow.h>
+ #include <nss.h>
+ 
+-NSS_DECLARE_MODULE_FUNCTIONS (files)
+-
+ #define STRUCTURE	spwd
+ #define ENTNAME		spent
+ #define DATABASE	"shadow"
+diff --git a/nss/nss_files_data.c b/nss/nss_files_data.c
+new file mode 100644
+index 0000000000..80fbfe5fff
+--- /dev/null
++++ b/nss/nss_files_data.c
+@@ -0,0 +1,161 @@
++/* Returns a pointer to the global nss_files data structure.
++   Copyright (C) 2021 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C 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.
++
++   The GNU C 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 the GNU C Library; if not, see
++   <https://www.gnu.org/licenses/>.  */
++
++#include <nss_files.h>
++
++#include <allocate_once.h>
++#include <errno.h>
++#include <netdb.h>
++#include <nss.h>
++#include <stdlib.h>
++
++/* This collects all per file-data.   */
++struct nss_files_data
++{
++  struct nss_files_per_file_data files[nss_file_count];
++};
++
++/* For use with allocate_once.  */
++static void *nss_files_global;
++static void *
++nss_files_global_allocate (void *closure)
++{
++  struct nss_files_data *result = malloc (sizeof (*result));
++  if (result != NULL)
++    {
++      for (int i = 0; i < nss_file_count; ++i)
++        {
++          result->files[i].stream = NULL;
++          __libc_lock_init (result->files[i].lock);
++        }
++    }
++  return result;
++}
++/* Like __nss_files_data_open, but does not perform the open call.  */
++static enum nss_status
++__nss_files_data_get (struct nss_files_per_file_data **pdata,
++                      enum nss_files_file file, int *errnop, int *herrnop)
++{
++  struct nss_files_data *data = allocate_once (&nss_files_global,
++                                               nss_files_global_allocate,
++                                               NULL, NULL);
++  if (data == NULL)
++    {
++      if (errnop != NULL)
++        *errnop = errno;
++      if (herrnop != NULL)
++        {
++          __set_h_errno (NETDB_INTERNAL);
++          *herrnop = NETDB_INTERNAL;
++        }
++      return NSS_STATUS_TRYAGAIN;
++    }
++
++  *pdata = &data->files[file];
++  __libc_lock_lock ((*pdata)->lock);
++  return NSS_STATUS_SUCCESS;
++}
++
++/* Helper function for opening the backing file at PATH.  */
++static enum nss_status
++__nss_files_data_internal_open (struct nss_files_per_file_data *data,
++                                const char *path)
++{
++  enum nss_status status = NSS_STATUS_SUCCESS;
++
++  if (data->stream == NULL)
++    {
++      data->stream = __nss_files_fopen (path);
++
++      if (data->stream == NULL)
++        status = errno == EAGAIN ? NSS_STATUS_TRYAGAIN : NSS_STATUS_UNAVAIL;
++    }
++
++  return status;
++}
++
++
++enum nss_status
++__nss_files_data_open (struct nss_files_per_file_data **pdata,
++                       enum nss_files_file file, const char *path,
++                       int *errnop, int *herrnop)
++{
++  enum nss_status status = __nss_files_data_get (pdata, file, errnop, herrnop);
++  if (status != NSS_STATUS_SUCCESS)
++    return status;
++
++  /* Be prepared that the set*ent function was not called before.  */
++  if ((*pdata)->stream == NULL)
++    {
++      int saved_errno = errno;
++      status = __nss_files_data_internal_open (*pdata, path);
++      __set_errno (saved_errno);
++      if (status != NSS_STATUS_SUCCESS)
++        __nss_files_data_put (*pdata);
++    }
++
++  return status;
++}
++
++libc_hidden_def (__nss_files_data_open)
++
++void
++__nss_files_data_put (struct nss_files_per_file_data *data)
++{
++  __libc_lock_unlock (data->lock);
++}
++libc_hidden_def (__nss_files_data_put)
++
++enum nss_status
++__nss_files_data_setent (enum nss_files_file file, const char *path)
++{
++  struct nss_files_per_file_data *data;
++  enum nss_status status = __nss_files_data_get (&data, file, NULL, NULL);
++  if (status != NSS_STATUS_SUCCESS)
++    return status;
++
++  if (data->stream == NULL)
++    status = __nss_files_data_internal_open (data, path);
++  else
++    rewind (data->stream);
++
++  __nss_files_data_put (data);
++  return status;
++}
++libc_hidden_def (__nss_files_data_setent)
++
++enum nss_status
++__nss_files_data_endent (enum nss_files_file file)
++{
++  /* No cleanup is necessary if not initialized.  */
++  struct nss_files_data *data = atomic_load_acquire (&nss_files_global);
++  if (data == NULL)
++    return NSS_STATUS_SUCCESS;
++
++  struct nss_files_per_file_data *fdata = &data->files[file];
++  __libc_lock_lock (fdata->lock);
++  if (fdata->stream != NULL)
++    {
++      fclose (fdata->stream);
++      fdata->stream = NULL;
++    }
++  __libc_lock_unlock (fdata->lock);
++
++  return NSS_STATUS_SUCCESS;
++}
++libc_hidden_def (__nss_files_data_endent)
+diff --git a/nss/nss_files_functions.c b/nss/nss_files_functions.c
+new file mode 100644
+index 0000000000..85720b4311
+--- /dev/null
++++ b/nss/nss_files_functions.c
+@@ -0,0 +1,43 @@
++/* Direct access for nss_files functions for NSS module loading.
++   Copyright (C) 2021 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C 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.
++
++   The GNU C 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 the GNU C Library; if not, see
++   <https://www.gnu.org/licenses/>.  */
++
++#include <nss_module.h>
++#include <nss_files.h>
++
++void
++__nss_files_functions (nss_module_functions_untyped pointers)
++{
++  void **fptr = pointers;
++
++  /* Functions which are not implemented.  */
++#define _nss_files_getcanonname_r NULL
++#define _nss_files_gethostbyaddr2_r NULL
++#define _nss_files_getpublickey NULL
++#define _nss_files_getsecretkey NULL
++#define _nss_files_netname2user NULL
++
++#undef DEFINE_NSS_FUNCTION
++#define DEFINE_NSS_FUNCTION(x) *fptr++ = _nss_files_##x;
++#include "function.def"
++
++#ifdef PTR_MANGLE
++  void **end = fptr;
++  for (fptr = pointers; fptr != end; ++fptr)
++    PTR_MANGLE (*fptr);
++#endif
++}
+diff --git a/nss/nss_module.c b/nss/nss_module.c
+index 60c070c851..7b42c585a4 100644
+--- a/nss/nss_module.c
++++ b/nss/nss_module.c
+@@ -30,6 +30,7 @@
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
++#include <nss_files.h>
+ 
+ /* Suffix after .so of NSS service modules.  This is a bit of magic,
+    but we assume LIBNSS_FILES_SO looks like "libnss_files.so.2" and we
+@@ -110,10 +111,45 @@ static const function_name nss_function_name_array[] =
+ #include "function.def"
+   };
+ 
++static bool
++module_load_nss_files (struct nss_module *module)
++{
++  if (is_nscd)
++    {
++      void (*cb) (size_t, struct traced_file *) = nscd_init_cb;
++#  ifdef PTR_DEMANGLE
++      PTR_DEMANGLE (cb);
++#  endif
++      _nss_files_init (cb);
++    }
++
++  /* Initialize the function pointers, following the double-checked
++     locking idiom.  */
++  __libc_lock_lock (nss_module_list_lock);
++  switch ((enum nss_module_state) atomic_load_acquire (&module->state))
++    {
++    case nss_module_uninitialized:
++    case nss_module_failed:
++      __nss_files_functions (module->functions.untyped);
++      module->handle = NULL;
++      /* Synchronizes with unlocked __nss_module_load atomic_load_acquire.  */
++      atomic_store_release (&module->state, nss_module_loaded);
++      break;
++    case nss_module_loaded:
++      /* Nothing to clean up.  */
++      break;
++    }
++  __libc_lock_unlock (nss_module_list_lock);
++  return true;
++}
++
+ /* Internal implementation of __nss_module_load.  */
+ static bool
+ module_load (struct nss_module *module)
+ {
++  if (strcmp (module->name, "files") == 0)
++    return module_load_nss_files (module);
++
+   void *handle;
+   {
+     char *shlib_name;
+@@ -360,7 +396,7 @@ __nss_module_freeres (void)
+   struct nss_module *current = nss_module_list;
+   while (current != NULL)
+     {
+-      if (current->state == nss_module_loaded)
++      if (current->state == nss_module_loaded && current->handle != NULL)
+         __libc_dlclose (current->handle);
+ 
+       struct nss_module *next = current->next;
+diff --git a/nss/nss_module.h b/nss/nss_module.h
+index 05c4791d11..c1a1d90b60 100644
+--- a/nss/nss_module.h
++++ b/nss/nss_module.h
+@@ -38,6 +38,10 @@ struct nss_module_functions
+ typedef void *nss_module_functions_untyped[sizeof (struct nss_module_functions)
+                                            / sizeof (void *)];
+ 
++/* Locate the nss_files functions, as if by dlopen/dlsym.  */
++void __nss_files_functions (nss_module_functions_untyped pointers)
++  attribute_hidden;
++
+ /* Initialization state of a NSS module.  */
+ enum nss_module_state
+ {
+diff --git a/nss/nss_readline.c b/nss/nss_readline.c
+index 4b3ecbccc8..a2f397a11f 100644
+--- a/nss/nss_readline.c
++++ b/nss/nss_readline.c
+@@ -40,7 +40,7 @@ __nss_readline (FILE *fp, char *buf, size_t len, off64_t *poffset)
+       *poffset = __ftello64 (fp);
+ 
+       buf[len - 1] = '\xff';        /* Marker to recognize truncation.  */
+-      if (fgets_unlocked (buf, len, fp) == NULL)
++      if (__fgets_unlocked (buf, len, fp) == NULL)
+         {
+           if (feof_unlocked (fp))
+             {
+@@ -61,7 +61,7 @@ __nss_readline (FILE *fp, char *buf, size_t len, off64_t *poffset)
+            line on the next call.  */
+         return __nss_readline_seek (fp, *poffset);
+ 
+-      /* fgets_unlocked succeeded.  */
++      /* __fgets_unlocked succeeded.  */
+ 
+       /* Remove leading whitespace.  */
+       char *p = buf;
+diff --git a/nss/nss.h b/nss/nss.h
+index ae213f9a6c..c6d62adc0f 100644
+--- a/nss/nss.h
++++ b/nss/nss.h
+@@ -196,7 +196,7 @@ typedef enum nss_status nss_setspent (int);
+   extern nss_endgrent _nss_##module##_endgrent;                          \
+   extern nss_endhostent _nss_##module##_endhostent;                      \
+   extern nss_endnetent _nss_##module##_endnetent;                        \
+-  extern nss_endnetgrent _nss_##module##__endnetgrent;                   \
++  extern nss_endnetgrent _nss_##module##_endnetgrent;                    \
+   extern nss_endprotoent _nss_##module##_endprotoent;                    \
+   extern nss_endpwent _nss_##module##_endpwent;                          \
+   extern nss_endrpcent _nss_##module##_endrpcent;                        \
+diff --git a/nss/nss_module.c b/nss/nss_module.c
+index 7b42c585a4..7ea5ad9887 100644
+--- a/nss/nss_module.c
++++ b/nss/nss_module.c
+@@ -114,14 +114,16 @@ static const function_name nss_function_name_array[] =
+ static bool
+ module_load_nss_files (struct nss_module *module)
+ {
++#ifdef USE_NSCD
+   if (is_nscd)
+     {
+       void (*cb) (size_t, struct traced_file *) = nscd_init_cb;
+-#  ifdef PTR_DEMANGLE
++# ifdef PTR_DEMANGLE
+       PTR_DEMANGLE (cb);
+-#  endif
++# endif
+       _nss_files_init (cb);
+     }
++#endif
+ 
+   /* Initialize the function pointers, following the double-checked
+      locking idiom.  */
diff --git a/gnu/packages/patches/gnome-boxes-add-guix-logo.patch b/gnu/packages/patches/gnome-boxes-add-guix-logo.patch
new file mode 100644
index 0000000000..e570675083
--- /dev/null
+++ b/gnu/packages/patches/gnome-boxes-add-guix-logo.patch
@@ -0,0 +1,32 @@
+Taken from upstream commit: 9091c6849652fa083297bc12645d8c57a962874a.
+
+diff --git a/data/osinfo/guix-1.3.xml b/data/osinfo/guix-1.3.xml
+new file mode 100644
+index 00000000..d4e1c167
+--- /dev/null
++++ b/data/osinfo/guix-1.3.xml
+@@ -0,0 +1,9 @@
++<libosinfo version="0.0.1">
++
++  <!-- Please read README.logos for any questions about usage of product logos in Boxes. !-->
++
++  <os id="http://guix.gnu.org/guix/1.3">
++    <logo>https://gitlab.gnome.org/GNOME/gnome-boxes-logos/-/raw/master/logos/guix.svg</logo>
++  </os>
++
++</libosinfo>
+diff --git a/data/osinfo/meson.build b/data/osinfo/meson.build
+index 46ff1570..d5531e60 100644
+--- a/data/osinfo/meson.build
++++ b/data/osinfo/meson.build
+@@ -7,6 +7,7 @@ osinfo_db = [
+   ['freedos-1.2.xml', 'gnome-boxes/osinfo/os/freedos.org'],
+   ['gnome-nightly.xml', 'gnome-boxes/osinfo/os/gnome.org'],
+   ['gnome-3.38.xml', 'gnome-boxes/osinfo/os/gnome.org'],
++  ['guix-1.3.xml', 'gnome-boxes/osinfo/os/guix.gnu.org'],
+   ['manjaro-19.0.xml', 'gnome-boxes/osinfo/os/manjaro.org'],
+   ['nixos-20.03.xml', 'gnome-boxes/osinfo/os/nixos.org'],
+   ['opensuse-10.2.xml', 'gnome-boxes/osinfo/os/opensuse.org'],
+-- 
+2.34.0
+
diff --git a/gnu/packages/patches/gnome-builder-update-libportal.patch b/gnu/packages/patches/gnome-builder-update-libportal.patch
new file mode 100644
index 0000000000..1cf7f32132
--- /dev/null
+++ b/gnu/packages/patches/gnome-builder-update-libportal.patch
@@ -0,0 +1,93 @@
+From b3bfa0df53a3749c3b73cb6c4bad5cab3fa549a1 Mon Sep 17 00:00:00 2001
+From: Abderrahim Kitouni <akitouni@gnome.org>
+Date: Sat, 25 Dec 2021 16:25:43 +0100
+Subject: [PATCH] build: use libportal 0.5
+
+This partly reverts 2aea4bd7d0ced77a7d0778517b4505af5dea2dac
+---
+ build-aux/flatpak/org.gnome.Builder.json                 | 7 ++++---
+ meson.build                                              | 2 +-
+ src/gstyle/gstyle-color-panel.c                          | 2 +-
+ src/plugins/devhelp/gbp-devhelp-page.c                   | 2 +-
+ src/plugins/open-with-external/gbp-owe-workbench-addin.c | 2 +-
+ 5 files changed, 8 insertions(+), 7 deletions(-)
+
+diff --git a/build-aux/flatpak/org.gnome.Builder.json b/build-aux/flatpak/org.gnome.Builder.json
+index 02ac31ede..a32d29b92 100644
+--- a/build-aux/flatpak/org.gnome.Builder.json
++++ b/build-aux/flatpak/org.gnome.Builder.json
+@@ -601,15 +601,16 @@
+             "name" : "libportal",
+             "config-opts" : [
+                 "--libdir=/app/lib",
+-                "--buildtype=debugoptimized"
++                "--buildtype=debugoptimized",
++                "-Dbackends=gtk3"
+             ],
+             "buildsystem" : "meson",
+             "builddir" : true,
+             "sources" : [
+                 {
+                     "type" : "archive",
+-                    "url" : "https://github.com/flatpak/libportal/releases/download/0.4/libportal-0.4.tar.xz",
+-                    "sha256" : "3cd5f50907831cf236b40aa14c5a14ccbbf08828cecb3286efa82ce03cacef28"
++                    "url" : "https://github.com/flatpak/libportal/releases/download/0.5/libportal-0.5.tar.xz",
++                    "sha256" : "d8c8cb18a34e5eeb26a39c94044c955995b01de0e139caac5e18c076cf821b3b"
+                 }
+             ]
+         },
+diff --git a/meson.build b/meson.build
+index 01737034b..494e0d752 100644
+--- a/meson.build
++++ b/meson.build
+@@ -284,7 +284,7 @@ libjsonrpc_glib_dep = dependency('jsonrpc-glib-1.0', version: '>= 3.41.0')
+ libm_dep = cc.find_library('m', required: false)
+ libpangoft2_dep = dependency('pangoft2', version: '>= 1.38.0')
+ libpeas_dep = dependency('libpeas-1.0', version: '>= 1.22.0')
+-libportal_dep = dependency('libportal', version: '>= 0.3', required: false)
++libportal_dep = dependency('libportal-gtk3', required: false)
+ libtemplate_glib_dep = dependency('template-glib-1.0', version: '>= 3.28.0')
+ libvte_dep = dependency('vte-2.91', version: '>= 0.65.0')
+ libwebkit_dep = dependency('webkit2gtk-4.0', version: '>= 2.26', required: false)
+diff --git a/src/gstyle/gstyle-color-panel.c b/src/gstyle/gstyle-color-panel.c
+index 15742a7be..a6295c168 100644
+--- a/src/gstyle/gstyle-color-panel.c
++++ b/src/gstyle/gstyle-color-panel.c
+@@ -30,7 +30,7 @@
+ #include "gstyle-color.h"
+ 
+ #include <libportal/portal.h>
+-#include <libportal/portal-gtk3.h>
++#include <libportal-gtk3/portal-gtk3.h>
+ 
+ #define HSV_TO_SCALE_FACTOR (1.0 / 256.0)
+ #define CIELAB_L_TO_SCALE_FACTOR (100.0 / 256.0)
+diff --git a/src/plugins/devhelp/gbp-devhelp-page.c b/src/plugins/devhelp/gbp-devhelp-page.c
+index 5d5c52b0d..2ac788414 100644
+--- a/src/plugins/devhelp/gbp-devhelp-page.c
++++ b/src/plugins/devhelp/gbp-devhelp-page.c
+@@ -25,7 +25,7 @@
+ #include <webkit2/webkit2.h>
+ 
+ #include <libportal/portal.h>
+-#include <libportal/portal-gtk3.h>
++#include <libportal-gtk3/portal-gtk3.h>
+ 
+ #include "gbp-devhelp-page.h"
+ #include "gbp-devhelp-search.h"
+diff --git a/src/plugins/open-with-external/gbp-owe-workbench-addin.c b/src/plugins/open-with-external/gbp-owe-workbench-addin.c
+index 51d2da844..816fe643f 100644
+--- a/src/plugins/open-with-external/gbp-owe-workbench-addin.c
++++ b/src/plugins/open-with-external/gbp-owe-workbench-addin.c
+@@ -23,7 +23,7 @@
+ #include "gbp-owe-workbench-addin.h"
+ 
+ #include <libportal/portal.h>
+-#include <libportal/portal-gtk3.h>
++#include <libportal-gtk3/portal-gtk3.h>
+ 
+ struct _GbpOweWorkbenchAddin
+ {
+-- 
+GitLab
+
diff --git a/gnu/packages/patches/gnome-control-center-libexecdir.patch b/gnu/packages/patches/gnome-control-center-libexecdir.patch
new file mode 100644
index 0000000000..a5f4988e34
--- /dev/null
+++ b/gnu/packages/patches/gnome-control-center-libexecdir.patch
@@ -0,0 +1,58 @@
+This reverts commit 2007a5b2, which broke installation of the package.
+See: https://gitlab.gnome.org/GNOME/gnome-control-center/-/issues/1579.
+
+diff --git a/meson.build b/meson.build
+index 734810d01..b4a45c60d 100644
+--- a/meson.build
++++ b/meson.build
+@@ -259,6 +259,13 @@ config_h.set('HAVE_WACOM', host_is_linux_not_s390,
+ config_h.set('BUILD_THUNDERBOLT', host_is_linux_not_s390,
+              description: 'Define to 1 to build the Thunderbolt panel')
+ 
++# Check for info panel
++gnome_session_libexecdir = get_option('gnome_session_libexecdir')
++if gnome_session_libexecdir == ''
++  gnome_session_libexecdir = control_center_libexecdir
++endif
++
++
+ gnome = import('gnome')
+ i18n = import('i18n')
+ pkg = import('pkgconfig')
+diff --git a/meson_options.txt b/meson_options.txt
+index 1b7b54810..910226c56 100644
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -1,5 +1,6 @@
+ option('cheese', type: 'boolean', value: true, description: 'build with cheese webcam support')
+ option('documentation', type: 'boolean', value: false, description: 'build documentation')
++option('gnome_session_libexecdir', type: 'string', value: '', description: 'Directory for gnome-session\'s libexecdir')
+ option('ibus', type: 'boolean', value: true, description: 'build with IBus support')
+ option('privileged_group', type: 'string', value: 'wheel', description: 'name of group that has elevated permissions')
+ option('snap', type: 'boolean', value: false, description: 'build with Snap support')
+diff --git a/panels/info-overview/cc-info-overview-panel.c b/panels/info-overview/cc-info-overview-panel.c
+index 6e832eb35..b34030c8c 100644
+--- a/panels/info-overview/cc-info-overview-panel.c
++++ b/panels/info-overview/cc-info-overview-panel.c
+@@ -236,7 +236,7 @@ static char *
+ get_renderer_from_helper (const char **env)
+ {
+   int status;
+-  char *argv[] = { LIBEXECDIR "/gnome-control-center-print-renderer", NULL };
++  char *argv[] = { GNOME_SESSION_DIR "/gnome-session-check-accelerated", NULL };
+   g_auto(GStrv) envp = NULL;
+   g_autofree char *renderer = NULL;
+   g_autoptr(GError) error = NULL;
+diff --git a/panels/info-overview/meson.build b/panels/info-overview/meson.build
+index 2fe10b32c..506b7274e 100644
+--- a/panels/info-overview/meson.build
++++ b/panels/info-overview/meson.build
+@@ -19,7 +19,7 @@ i18n.merge_file(
+ 
+ cflags += [
+   '-DDATADIR="@0@"'.format(control_center_datadir),
+-  '-DLIBEXECDIR="@0@"'.format(control_center_libexecdir),
++  '-DGNOME_SESSION_DIR="@0@"'.format(gnome_session_libexecdir)
+ ]
+ 
+ sources = files(
diff --git a/gnu/packages/patches/gnome-online-miners-tracker-3.patch b/gnu/packages/patches/gnome-online-miners-tracker-3.patch
new file mode 100644
index 0000000000..0f89c56695
--- /dev/null
+++ b/gnu/packages/patches/gnome-online-miners-tracker-3.patch
@@ -0,0 +1,1505 @@
+Apply the following merge requests:
+
+https://gitlab.gnome.org/GNOME/gnome-online-miners/-/merge_requests/3
+https://gitlab.gnome.org/GNOME/gnome-online-miners/-/merge_requests/4
+
+to add tracker 3 support and fix a use after free error.
+
+diff --git a/src/gom-miner.c b/src/gom-miner.c
+index 7147b33..4fb4d80 100644
+--- a/src/gom-miner.c
++++ b/src/gom-miner.c
+@@ -221,6 +221,7 @@ gom_miner_check_pending_jobs (GTask *task)
+     return;
+ 
+   g_task_return_boolean (task, TRUE);
++  g_clear_object (&cleanup_job->self);
+   g_slice_free (CleanupJob, cleanup_job);
+ }
+ 
+@@ -461,7 +462,9 @@ miner_job_process_ready_cb (GObject *source,
+   cleanup_job->pending_jobs = g_list_remove (cleanup_job->pending_jobs,
+                                              account_miner_job);
+ 
++  /* This will free the cleanup job data if there are no more pending jobs. */
+   gom_miner_check_pending_jobs (account_miner_job->parent_task);
++
+   gom_account_miner_job_free (account_miner_job);
+ }
+ 
+@@ -520,10 +523,9 @@ cleanup_old_accounts_done (gpointer data)
+       job->old_datasources = NULL;
+     }
+ 
++  /* This will free the task data if there are no more pending jobs */
+   gom_miner_check_pending_jobs (task);
+ 
+-  g_clear_object (&job->self);
+-
+   return FALSE;
+ }
+ 
+@@ -690,6 +692,8 @@ gom_miner_cleanup_old_accounts (GomMiner *self,
+ {
+   CleanupJob *job = g_slice_new0 (CleanupJob);
+ 
++  g_return_if_fail (GOM_IS_MINER (self));
++
+   job->self = g_object_ref (self);
+   job->content_objects = content_objects;
+   job->acc_objects = acc_objects;
+
+diff --git a/src/gom-application.c b/src/gom-application.c
+index fadd388..9e558f5 100644
+--- a/src/gom-application.c
++++ b/src/gom-application.c
+@@ -229,10 +229,16 @@ gom_application_constructed (GObject *object)
+ {
+   GomApplication *self = GOM_APPLICATION (object);
+   const gchar *display_name;
++  GError *error = NULL;
+ 
+   G_OBJECT_CLASS (gom_application_parent_class)->constructed (object);
+ 
+-  self->miner = g_object_new (self->miner_type, NULL);
++  self->miner = g_initable_new (self->miner_type, NULL, &error, NULL);
++
++  if (self->miner == NULL) {
++    g_error (error->message);
++  }
++
+   display_name = gom_miner_get_display_name (self->miner);
+   gom_dbus_set_display_name (self->skeleton, display_name);
+ }
+diff --git a/src/gom-miner.c b/src/gom-miner.c
+index 7147b33..1dd9bb8 100644
+--- a/src/gom-miner.c
++++ b/src/gom-miner.c
+@@ -28,7 +28,11 @@
+ 
+ #include "gom-miner.h"
+ 
+-G_DEFINE_TYPE (GomMiner, gom_miner, G_TYPE_OBJECT)
++static void gom_miner_initable_interface_init (GInitableIface *iface);
++
++G_DEFINE_TYPE_WITH_CODE (GomMiner, gom_miner, G_TYPE_OBJECT,
++                         G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, gom_miner_initable_interface_init))
++
+ 
+ struct _GomMinerPrivate {
+   GoaClient *client;
+@@ -132,20 +136,21 @@ gom_miner_dispose (GObject *object)
+ }
+ 
+ static void
+-gom_miner_init_goa (GomMiner *self)
++gom_miner_init_goa (GomMiner  *self,
++                    GError   **error)
+ {
+   GoaAccount *account;
+   GoaObject *object;
+   const gchar *provider_type;
+   GList *accounts, *l;
+   GomMinerClass *miner_class = GOM_MINER_GET_CLASS (self);
++  GError *inner_error = NULL;
+ 
+-  self->priv->client = goa_client_new_sync (NULL, &self->priv->client_error);
++  self->priv->client = goa_client_new_sync (NULL, &inner_error);
+ 
+-  if (self->priv->client_error != NULL)
++  if (inner_error)
+     {
+-      g_critical ("Unable to create GoaClient: %s - indexing for %s will not work",
+-                  self->priv->client_error->message, miner_class->goa_provider_type);
++      g_propagate_error (error, inner_error);
+       return;
+     }
+ 
+@@ -170,16 +175,34 @@ gom_miner_init_goa (GomMiner *self)
+   g_list_free_full (accounts, g_object_unref);
+ }
+ 
+-static void
+-gom_miner_constructed (GObject *obj)
++static gboolean
++gom_miner_initable_init (GInitable     *initable,
++                         GCancellable  *cancellable,
++                         GError       **error)
+ {
+-  GomMiner *self = GOM_MINER (obj);
++  GError *inner_error = NULL;
++  GomMiner *self;
+ 
+-  G_OBJECT_CLASS (gom_miner_parent_class)->constructed (obj);
++  self = GOM_MINER (initable);
+ 
+-  gom_miner_init_goa (self);
++  self->priv->connection = tracker_sparql_connection_get (cancellable, &inner_error);
++  if (inner_error)
++    {
++      g_propagate_prefixed_error (error, inner_error, "Unable to connect to Tracker store: ");
++      return FALSE;
++    }
++
++  gom_miner_init_goa (self, &inner_error);
++  if (inner_error)
++    {
++      g_propagate_prefixed_error (error, inner_error, "Unable to connect to GNOME Online Accounts: ");
++      return FALSE;
++    }
++
++  return TRUE;
+ }
+ 
++
+ static void
+ gom_miner_init (GomMiner *self)
+ {
+@@ -187,14 +210,12 @@ gom_miner_init (GomMiner *self)
+ 
+   self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GOM_TYPE_MINER, GomMinerPrivate);
+   self->priv->display_name = g_strdup ("");
++}
+ 
+-  self->priv->connection = tracker_sparql_connection_get (NULL, &self->priv->connection_error);
+-  if (self->priv->connection_error != NULL)
+-    {
+-      g_critical ("Unable to create TrackerSparqlConnection: %s - indexing for %s will not work",
+-                  self->priv->connection_error->message,
+-                  klass->goa_provider_type);
+-    }
++static void
++gom_miner_initable_interface_init (GInitableIface *iface)
++{
++  iface->init = gom_miner_initable_init;
+ }
+ 
+ static void
+@@ -202,7 +223,6 @@ gom_miner_class_init (GomMinerClass *klass)
+ {
+   GObjectClass *oclass = G_OBJECT_CLASS (klass);
+ 
+-  oclass->constructed = gom_miner_constructed;
+   oclass->dispose = gom_miner_dispose;
+ 
+   cleanup_pool = g_thread_pool_new (cleanup_job, NULL, 1, FALSE, NULL);
+diff --git a/configure.ac b/configure.ac
+index 06cba71..6c61247 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -21,7 +21,7 @@ AC_HEADER_STDC
+ 
+ GDATA_MIN_VERSION=0.15.2
+ GFBGRAPH_MIN_VERSION=0.2.2
+-GLIB_MIN_VERSION=2.35.1
++GLIB_MIN_VERSION=2.56.0
+ GOA_MIN_VERSION=3.13.3
+ GRILO_MIN_VERSION=0.3.0
+ ZAPOJIT_MIN_VERSION=0.0.2
+@@ -36,7 +36,7 @@ PKG_CHECK_MODULES(GIO, [gio-2.0 gio-unix-2.0])
+ PKG_CHECK_MODULES(GOA, [goa-1.0 >= $GOA_MIN_VERSION])
+ AC_DEFINE([GOA_API_IS_SUBJECT_TO_CHANGE], [], [We are aware that GOA's API can change])
+ 
+-PKG_CHECK_MODULES(TRACKER, [tracker-miner-2.0 tracker-sparql-2.0])
++PKG_CHECK_MODULES(TRACKER, [tracker-sparql-3.0])
+ 
+ # Facebook
+ AC_ARG_ENABLE([facebook], [AS_HELP_STRING([--enable-facebook], [Enable Facebook miner])], [], [enable_facebook=yes])
+diff --git a/src/gom-application.c b/src/gom-application.c
+index 9e558f5..b435e26 100644
+--- a/src/gom-application.c
++++ b/src/gom-application.c
+@@ -233,7 +233,9 @@ gom_application_constructed (GObject *object)
+ 
+   G_OBJECT_CLASS (gom_application_parent_class)->constructed (object);
+ 
+-  self->miner = g_initable_new (self->miner_type, NULL, &error, NULL);
++  self->miner = g_initable_new (self->miner_type, NULL, &error,
++                                "bus-name", g_application_get_application_id (G_APPLICATION (self)),
++                                NULL);
+ 
+   if (self->miner == NULL) {
+     g_error (error->message);
+diff --git a/src/gom-miner.c b/src/gom-miner.c
+index 1dd9bb8..ba76ebb 100644
+--- a/src/gom-miner.c
++++ b/src/gom-miner.c
+@@ -33,12 +33,13 @@ static void gom_miner_initable_interface_init (GInitableIface *iface);
+ G_DEFINE_TYPE_WITH_CODE (GomMiner, gom_miner, G_TYPE_OBJECT,
+                          G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, gom_miner_initable_interface_init))
+ 
+-
+ struct _GomMinerPrivate {
+   GoaClient *client;
+   GError *client_error;
+ 
++  gchar *bus_name;
+   TrackerSparqlConnection *connection;
++  TrackerEndpointDBus *endpoint;
+   GError *connection_error;
+ 
+   gchar *display_name;
+@@ -62,6 +63,14 @@ typedef struct {
+   gpointer service;
+ } InsertSharedContentData;
+ 
++typedef enum
++{
++    PROP_BUS_NAME = 1,
++    N_PROPERTIES
++} GomMinerProperty;
++
++static GParamSpec *obj_properties[N_PROPERTIES] = { NULL, };
++
+ static GThreadPool *cleanup_pool;
+ 
+ static void cleanup_job (gpointer data, gpointer user_data);
+@@ -135,6 +144,58 @@ gom_miner_dispose (GObject *object)
+   G_OBJECT_CLASS (gom_miner_parent_class)->dispose (object);
+ }
+ 
++static void
++gom_miner_init_database (GomMiner      *self,
++                         GCancellable  *cancellable,
++                         GError       **error)
++{
++  TrackerSparqlConnectionFlags flags;
++  g_autoptr (GFile) store_path = NULL;
++  g_autoptr (GDBusConnection) bus = NULL;
++  GError *inner_error = NULL;
++
++  flags = TRACKER_SPARQL_CONNECTION_FLAGS_FTS_ENABLE_STEMMER |
++          TRACKER_SPARQL_CONNECTION_FLAGS_FTS_ENABLE_UNACCENT |
++          TRACKER_SPARQL_CONNECTION_FLAGS_FTS_ENABLE_STOP_WORDS |
++          TRACKER_SPARQL_CONNECTION_FLAGS_FTS_IGNORE_NUMBERS;
++
++  store_path = g_file_new_build_filename (g_get_user_cache_dir (),
++                                          "gnome-online-miners",
++                                          self->priv->bus_name,
++                                          NULL);
++
++  self->priv->connection = tracker_sparql_connection_new (flags,
++                                                          store_path,
++                                                          tracker_sparql_get_ontology_nepomuk (),
++                                                          cancellable,
++                                                          &inner_error);
++
++  if (inner_error)
++    {
++      g_propagate_error (error, inner_error);
++      return;
++    }
++
++  bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &inner_error);
++
++  if (inner_error)
++    {
++      g_propagate_error (error, inner_error);
++      return;
++    }
++
++  self->priv->endpoint = tracker_endpoint_dbus_new (self->priv->connection,
++                                                    bus,
++                                                    NULL, /* object path */
++                                                    cancellable,
++                                                    &inner_error);
++  if (inner_error)
++    {
++      g_propagate_error (error, inner_error);
++      return;
++    }
++}
++
+ static void
+ gom_miner_init_goa (GomMiner  *self,
+                     GError   **error)
+@@ -185,10 +246,10 @@ gom_miner_initable_init (GInitable     *initable,
+ 
+   self = GOM_MINER (initable);
+ 
+-  self->priv->connection = tracker_sparql_connection_get (cancellable, &inner_error);
++  gom_miner_init_database (self, cancellable, &inner_error);
+   if (inner_error)
+     {
+-      g_propagate_prefixed_error (error, inner_error, "Unable to connect to Tracker store: ");
++      g_propagate_prefixed_error (error, inner_error, "Unable to set up Tracker database: ");
+       return FALSE;
+     }
+ 
+@@ -212,6 +273,47 @@ gom_miner_init (GomMiner *self)
+   self->priv->display_name = g_strdup ("");
+ }
+ 
++static void
++gom_miner_set_property (GObject      *object,
++                        guint         property_id,
++                        const GValue *value,
++                        GParamSpec   *pspec)
++{
++  GomMiner *self = GOM_MINER (object);
++
++  switch ((GomMinerProperty) property_id)
++    {
++      case PROP_BUS_NAME:
++        g_free (self->priv->bus_name);
++        self->priv->bus_name = g_value_dup_string (value);
++        break;
++
++      default:
++        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
++        break;
++    }
++}
++
++static void
++gom_miner_get_property (GObject    *object,
++                        guint       property_id,
++                        GValue     *value,
++                        GParamSpec *pspec)
++{
++  GomMiner *self = GOM_MINER (object);
++
++  switch ((GomMinerProperty) property_id)
++    {
++       case PROP_BUS_NAME:
++         g_value_set_string (value, self->priv->bus_name);
++         break;
++
++       default:
++         G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
++         break;
++    }
++}
++
+ static void
+ gom_miner_initable_interface_init (GInitableIface *iface)
+ {
+@@ -224,6 +326,19 @@ gom_miner_class_init (GomMinerClass *klass)
+   GObjectClass *oclass = G_OBJECT_CLASS (klass);
+ 
+   oclass->dispose = gom_miner_dispose;
++  oclass->set_property = gom_miner_set_property;
++  oclass->get_property = gom_miner_get_property;
++
++  obj_properties[PROP_BUS_NAME] = g_param_spec_string ("bus-name",
++                                                       "Bus Name",
++                                                       "D-Bus name of the miner",
++                                                       NULL  /* default value */,
++                                                       G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE |
++                                                       G_PARAM_STATIC_STRINGS);
++
++  g_object_class_install_properties (oclass,
++                                     N_PROPERTIES,
++                                     obj_properties);
+ 
+   cleanup_pool = g_thread_pool_new (cleanup_job, NULL, 1, FALSE, NULL);
+ 
+diff --git a/src/gom-miner.h b/src/gom-miner.h
+index 8f83139..5dcfc8d 100644
+--- a/src/gom-miner.h
++++ b/src/gom-miner.h
+@@ -61,6 +61,7 @@ typedef struct _GomMinerPrivate GomMinerPrivate;
+ typedef struct {
+   GomMiner *miner;
+   TrackerSparqlConnection *connection;
++  gchar *bus_name;
+ 
+   GoaAccount *account;
+   GHashTable *services;
+diff --git a/src/gom-tracker.c b/src/gom-tracker.c
+index 68818c4..5666c16 100644
+--- a/src/gom-tracker.c
++++ b/src/gom-tracker.c
+@@ -408,7 +408,7 @@ gom_tracker_utils_ensure_equipment_resource (TrackerSparqlConnection *connection
+   gchar *retval = NULL;
+   gchar *select = NULL;
+ 
+-  g_return_val_if_fail (TRACKER_SPARQL_IS_CONNECTION (connection), NULL);
++  g_return_val_if_fail (TRACKER_IS_SPARQL_CONNECTION (connection), NULL);
+   g_return_val_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable), NULL);
+   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+   g_return_val_if_fail (make != NULL || model != NULL, NULL);
+
+diff --git a/src/gom-tracker.c b/src/gom-tracker.c
+index 5666c16..63a4c29 100644
+--- a/src/gom-tracker.c
++++ b/src/gom-tracker.c
+@@ -208,6 +208,6 @@ gom_tracker_sparql_connection_insert_or_replace_triple (TrackerSparqlConnection
+   insert = g_string_new (NULL);
+   g_string_append_printf
+     (insert,
+-     "INSERT OR REPLACE %s { <%s> a nie:InformationElement ; %s %s }",
++     "INSERT OR REPLACE %s { <%s> a nie:InformationElement, nie:DataObject ; %s %s }",
+      graph_str, resource, property_name, quoted);
+   g_free (quoted);
+
+diff --git a/src/gom-facebook-miner.c b/src/gom-facebook-miner.c
+index ff42ca5..fc89096 100644
+--- a/src/gom-facebook-miner.c
++++ b/src/gom-facebook-miner.c
+@@ -70,7 +70,7 @@ account_miner_job_process_photo (GomAccountMinerJob *job,
+     (connection,
+      cancellable, error,
+      &resource_exists,
+-     datasource_urn, identifier,
++     TRACKER_PICTURES_GRAPH, identifier,
+      "nfo:RemoteDataObject", class, NULL);
+ 
+   if (*error != NULL)
+@@ -239,7 +239,7 @@ account_miner_job_process_album (GomAccountMinerJob *job,
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection,
+      cancellable, error,
+-     datasource_urn, resource,
++     TRACKER_PICTURES_GRAPH, resource,
+      "nie:url", album_link);
+ 
+   if (*error != NULL)
+@@ -248,7 +248,7 @@ account_miner_job_process_album (GomAccountMinerJob *job,
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection,
+      cancellable, error,
+-     datasource_urn, resource,
++     TRACKER_PICTURES_GRAPH, resource,
+      "nie:description", album_description);
+ 
+   if (*error != NULL)
+@@ -257,7 +257,7 @@ account_miner_job_process_album (GomAccountMinerJob *job,
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection,
+      cancellable, error,
+-     datasource_urn, resource,
++     TRACKER_PICTURES_GRAPH, resource,
+      "nie:title", album_name);
+ 
+   if (*error != NULL)
+@@ -274,7 +274,7 @@ account_miner_job_process_album (GomAccountMinerJob *job,
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection,
+      cancellable, error,
+-     datasource_urn, resource,
++     TRACKER_PICTURES_GRAPH, resource,
+      "nco:creator", contact_resource);
+   g_free (contact_resource);
+ 
+@@ -284,7 +284,7 @@ account_miner_job_process_album (GomAccountMinerJob *job,
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection,
+      cancellable, error,
+-     datasource_urn, resource,
++     TRACKER_PICTURES_GRAPH, resource,
+      "nie:contentCreated", album_created_time);
+ 
+   if (*error != NULL)
+
+diff --git a/src/gom-flickr-miner.c b/src/gom-flickr-miner.c
+index 9ac338e..dc7349e 100644
+--- a/src/gom-flickr-miner.c
++++ b/src/gom-flickr-miner.c
+@@ -143,14 +143,14 @@ account_miner_job_process_entry (GomAccountMinerJob *job,
+     (connection,
+      cancellable, error,
+      &resource_exists,
+-     datasource_urn, identifier,
++     TRACKER_PICTURES_GRAPH, identifier,
+      "nfo:RemoteDataObject", class, NULL);
+ 
+   if (*error != NULL)
+     goto out;
+ 
+   gom_tracker_update_datasource (connection, datasource_urn,
+-                                 resource_exists, identifier, resource,
++                                 resource_exists, TRACKER_PICTURES_GRAPH, resource,
+                                  cancellable, error);
+ 
+   if (*error != NULL)
+@@ -166,7 +166,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job,
+       parent_resource_urn = gom_tracker_sparql_connection_ensure_resource
+         (connection, cancellable, error,
+          NULL,
+-         datasource_urn, parent_identifier,
++         TRACKER_PICTURES_GRAPH, parent_identifier,
+          "nfo:RemoteDataObject", "nfo:DataContainer", NULL);
+       g_free (parent_identifier);
+ 
+@@ -176,7 +176,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job,
+       gom_tracker_sparql_connection_insert_or_replace_triple
+         (connection,
+          cancellable, error,
+-         datasource_urn, resource,
++         TRACKER_PICTURES_GRAPH, resource,
+          "nie:isPartOf", parent_resource_urn);
+       g_free (parent_resource_urn);
+ 
+@@ -187,7 +187,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job,
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection,
+      cancellable, error,
+-     datasource_urn, resource,
++     TRACKER_PICTURES_GRAPH, resource,
+      "nie:title", grl_media_get_title (entry->media));
+ 
+   if (*error != NULL)
+@@ -202,7 +202,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job,
+   created_time = modification_date = grl_media_get_creation_date (entry->media);
+   new_mtime = g_date_time_to_unix (modification_date);
+   mtime_changed = gom_tracker_update_mtime (connection, new_mtime,
+-                                            resource_exists, identifier, resource,
++                                            resource_exists, TRACKER_PICTURES_GRAPH, resource,
+                                             cancellable, error);
+ 
+   if (*error != NULL)
+@@ -221,7 +221,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job,
+       gom_tracker_sparql_connection_insert_or_replace_triple
+         (connection,
+          cancellable, error,
+-         datasource_urn, resource,
++         TRACKER_PICTURES_GRAPH, resource,
+          "nie:contentCreated", date);
+       g_free (date);
+     }
+@@ -233,7 +233,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job,
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection,
+      cancellable, error,
+-     datasource_urn, resource,
++     TRACKER_PICTURES_GRAPH, resource,
+      "nie:url", url);
+ 
+   if (*error != NULL)
+@@ -242,7 +242,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job,
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection,
+      cancellable, error,
+-     datasource_urn, resource,
++     TRACKER_PICTURES_GRAPH, resource,
+      "nie:description", grl_media_get_description (entry->media));
+ 
+   if (*error != NULL)
+@@ -254,7 +254,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job,
+       gom_tracker_sparql_connection_insert_or_replace_triple
+         (connection,
+          cancellable, error,
+-         datasource_urn, resource,
++         TRACKER_PICTURES_GRAPH, resource,
+          "nie:mimeType", mime);
+       g_free (mime);
+ 
+@@ -265,7 +265,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job,
+   contact_resource = gom_tracker_utils_ensure_contact_resource
+     (connection,
+      cancellable, error,
+-     datasource_urn, grl_media_get_author (entry->media));
++     TRACKER_PICTURES_GRAPH, grl_media_get_author (entry->media));
+ 
+   if (*error != NULL)
+     goto out;
+@@ -273,7 +273,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job,
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection,
+      cancellable, error,
+-     datasource_urn, resource,
++     TRACKER_PICTURES_GRAPH, resource,
+      "nco:creator", contact_resource);
+   g_free (contact_resource);
+ 
+diff --git a/src/gom-gdata-miner.c b/src/gom-gdata-miner.c
+index 7872431..d0deb80 100644
+--- a/src/gom-gdata-miner.c
++++ b/src/gom-gdata-miner.c
+@@ -120,7 +120,7 @@ account_miner_job_process_entry (TrackerSparqlConnection *connection,
+     (connection,
+      cancellable, error,
+      &resource_exists,
+-     datasource_urn, identifier,
++     TRACKER_DOCUMENTS_GRAPH, identifier,
+      "nfo:RemoteDataObject", class, NULL);
+ 
+   if (*error != NULL)
+@@ -187,7 +187,7 @@ account_miner_job_process_entry (TrackerSparqlConnection *connection,
+       parent_resource_urn = gom_tracker_sparql_connection_ensure_resource
+         (connection, cancellable, error,
+          NULL,
+-         datasource_urn, parent_resource_id,
++         GOM_GRAPH, parent_resource_id,
+          "nfo:RemoteDataObject", "nfo:DataContainer", NULL);
+       g_free (parent_resource_id);
+ 
+@@ -219,7 +219,7 @@ account_miner_job_process_entry (TrackerSparqlConnection *connection,
+   gom_tracker_sparql_connection_toggle_favorite
+     (connection,
+      cancellable, error,
+-     resource, starred);
++     TRACKER_PICTURES_GRAPH, resource, starred);
+ 
+   if (*error != NULL)
+     goto out;
+@@ -400,14 +400,14 @@ account_miner_job_process_photo (TrackerSparqlConnection *connection,
+     (connection,
+      cancellable, error,
+      &resource_exists,
+-     datasource_urn, identifier,
++     TRACKER_PICTURES_GRAPH, identifier,
+      "nfo:RemoteDataObject", "nmm:Photo", NULL);
+ 
+   if (*error != NULL)
+     goto out;
+ 
+   gom_tracker_update_datasource (connection, datasource_urn,
+-                                 resource_exists, identifier, resource,
++                                 resource_exists, TRACKER_PICTURES_GRAPH, resource,
+                                  cancellable, error);
+   if (*error != NULL)
+     goto out;
+@@ -566,6 +566,7 @@ account_miner_job_process_photo (TrackerSparqlConnection *connection,
+       equipment_resource = gom_tracker_utils_ensure_equipment_resource (connection,
+                                                                         cancellable,
+                                                                         error,
++                                                                        TRACKER_PICTURES_GRAPH,
+                                                                         make,
+                                                                         model);
+ 
+@@ -665,7 +666,7 @@ account_miner_job_process_album (TrackerSparqlConnection *connection,
+     (connection,
+      cancellable, error,
+      &resource_exists,
+-     datasource_urn, identifier,
++     TRACKER_PICTURES_GRAPH, identifier,
+      "nfo:RemoteDataObject", "nfo:DataContainer",
+      NULL);
+ 
+@@ -674,7 +675,7 @@ account_miner_job_process_album (TrackerSparqlConnection *connection,
+ 
+   gom_tracker_update_datasource
+     (connection, datasource_urn,
+-     resource_exists, identifier, resource,
++     resource_exists, TRACKER_PICTURES_GRAPH, resource,
+      cancellable, error);
+ 
+   if (*error != NULL)
+@@ -685,7 +686,7 @@ account_miner_job_process_album (TrackerSparqlConnection *connection,
+    */
+   new_mtime = gdata_entry_get_updated (GDATA_ENTRY (album));
+   mtime_changed = gom_tracker_update_mtime (connection, new_mtime,
+-                                            resource_exists, identifier, resource,
++                                            resource_exists, TRACKER_PICTURES_GRAPH, resource,
+                                             cancellable, error);
+ 
+   if (*error != NULL)
+@@ -703,7 +704,7 @@ account_miner_job_process_album (TrackerSparqlConnection *connection,
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection,
+      cancellable, error,
+-     datasource_urn, resource,
++     TRACKER_PICTURES_GRAPH, resource,
+      "nie:url", alternate_uri);
+ 
+   if (*error != NULL)
+@@ -713,7 +714,7 @@ account_miner_job_process_album (TrackerSparqlConnection *connection,
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection,
+      cancellable, error,
+-     datasource_urn, resource,
++     TRACKER_PICTURES_GRAPH, resource,
+      "nie:description", summary);
+ 
+   if (*error != NULL)
+@@ -723,7 +724,7 @@ account_miner_job_process_album (TrackerSparqlConnection *connection,
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection,
+      cancellable, error,
+-     datasource_urn, resource,
++     TRACKER_PICTURES_GRAPH, resource,
+      "nie:title", title);
+ 
+   if (*error != NULL)
+@@ -743,7 +744,7 @@ account_miner_job_process_album (TrackerSparqlConnection *connection,
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection,
+      cancellable, error,
+-     datasource_urn, resource,
++     TRACKER_PICTURES_GRAPH, resource,
+      "nco:creator", contact_resource);
+   g_free (contact_resource);
+ 
+@@ -755,7 +756,7 @@ account_miner_job_process_album (TrackerSparqlConnection *connection,
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection,
+      cancellable, error,
+-     datasource_urn, resource,
++     TRACKER_PICTURES_GRAPH, resource,
+      "nie:contentCreated", date);
+   g_free (date);
+ 
+@@ -865,7 +866,7 @@ insert_shared_content_photos (TrackerSparqlConnection *connection,
+   if (!gom_tracker_sparql_connection_insert_or_replace_triple (connection,
+                                                                cancellable,
+                                                                &local_error,
+-                                                               datasource_urn,
++                                                               TRACKER_PICTURES_GRAPH,
+                                                                source_urn,
+                                                                "nie:relatedTo",
+                                                                photo_resource_urn))
+@@ -878,7 +879,7 @@ insert_shared_content_photos (TrackerSparqlConnection *connection,
+   if (!gom_tracker_sparql_connection_insert_or_replace_triple (connection,
+                                                                cancellable,
+                                                                &local_error,
+-                                                               datasource_urn,
++                                                               TRACKER_PICTURES_GRAPH,
+                                                                photo_resource_urn,
+                                                                "nie:links",
+                                                                source_urn))
+
+diff --git a/src/gom-media-server-miner.c b/src/gom-media-server-miner.c
+index 490869e..32e08c6 100644
+--- a/src/gom-media-server-miner.c
++++ b/src/gom-media-server-miner.c
+@@ -65,14 +65,14 @@ account_miner_job_process_photo (GomAccountMinerJob *job,
+     (connection,
+      cancellable, error,
+      &resource_exists,
+-     datasource_urn, identifier,
++     TRACKER_PICTURES_GRAPH, identifier,
+      "nfo:RemoteDataObject", class, NULL);
+ 
+   if (*error != NULL)
+     goto out;
+ 
+   gom_tracker_update_datasource (connection, datasource_urn,
+-                                 resource_exists, identifier, resource,
++                                 resource_exists, TRACKER_PICTURES_GRAPH, resource,
+                                  cancellable, error);
+   if (*error != NULL)
+     goto out;
+@@ -81,7 +81,7 @@ account_miner_job_process_photo (GomAccountMinerJob *job,
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection,
+      cancellable, error,
+-     datasource_urn, resource,
++     TRACKER_PICTURES_GRAPH, resource,
+      "nie:url", photo->url);
+ 
+   if (*error != NULL)
+@@ -90,7 +90,7 @@ account_miner_job_process_photo (GomAccountMinerJob *job,
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection,
+      cancellable, error,
+-     datasource_urn, resource,
++     TRACKER_PICTURES_GRAPH, resource,
+      "nie:mimeType", photo->mimetype);
+ 
+   if (*error != NULL)
+@@ -99,7 +99,7 @@ account_miner_job_process_photo (GomAccountMinerJob *job,
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection,
+      cancellable, error,
+-     datasource_urn, resource,
++     TRACKER_PICTURES_GRAPH, resource,
+      "nie:title", photo->name);
+ 
+   if (*error != NULL)
+
+diff --git a/src/gom-miner.c b/src/gom-miner.c
+index ba76ebb..40b111d 100644
+--- a/src/gom-miner.c
++++ b/src/gom-miner.c
+@@ -375,7 +375,7 @@ gom_miner_ensure_datasource (GomMiner *self,
+                           "  <%s> a nie:DataSource ; nao:identifier \"%s\" . "
+                           "  <%s> a nie:InformationElement ; nie:rootElementOf <%s> ; nie:version \"%d\""
+                           "}",
+-                          datasource_urn,
++                          GOM_GRAPH,
+                           datasource_urn, klass->miner_identifier,
+                           root_element_urn, datasource_urn, klass->version);
+ 
+@@ -400,8 +400,8 @@ gom_account_miner_job_query_existing (GomAccountMinerJob *job,
+ 
+   select = g_string_new (NULL);
+   g_string_append_printf (select,
+-                          "SELECT ?urn nao:identifier(?urn) WHERE { ?urn nie:dataSource <%s> }",
+-                          job->datasource_urn);
++                          "SELECT ?urn ?id WHERE { GRAPH <%s> { ?urn nie:dataSource <%s> ; nao:identifier ?id . } }",
++                          GOM_GRAPH, job->datasource_urn);
+ 
+   cursor = tracker_sparql_connection_query (job->connection,
+                                             select->str,
+@@ -414,9 +414,21 @@ gom_account_miner_job_query_existing (GomAccountMinerJob *job,
+ 
+   while (tracker_sparql_cursor_next (cursor, cancellable, error))
+     {
+-      g_hash_table_insert (job->previous_resources,
+-                           g_strdup (tracker_sparql_cursor_get_string (cursor, 1, NULL)),
+-                           g_strdup (tracker_sparql_cursor_get_string (cursor, 0, NULL)));
++      const gchar *urn, *identifier;
++
++      urn = tracker_sparql_cursor_get_string (cursor, 0, NULL);
++      identifier = tracker_sparql_cursor_get_string (cursor, 1, NULL);
++
++      if (identifier != NULL)
++        {
++          g_hash_table_insert (job->previous_resources,
++                               g_strdup (identifier),
++                               g_strdup (urn));
++        }
++      else
++        {
++          g_warning ("Missing identifier for urn %s", urn);
++        }
+     }
+ 
+   g_object_unref (cursor);
+@@ -488,16 +500,19 @@ gom_account_miner_job (GTask *task,
+   if (error != NULL)
+     goto out;
+ 
++  g_debug ("account miner: Querying existing accounts stored in database");
+   gom_account_miner_job_query_existing (job, &error);
+ 
+   if (error != NULL)
+     goto out;
+ 
++  g_debug ("account miner: Querying remote server");
+   gom_account_miner_job_query (job, &error);
+ 
+   if (error != NULL)
+     goto out;
+ 
++  g_debug ("account miner: Removing stale accounts");
+   gom_account_miner_job_cleanup_previous (job, &error);
+ 
+   if (error != NULL)
+@@ -751,10 +766,15 @@ cleanup_job (gpointer data,
+ 
+   /* find all our datasources in the tracker DB */
+   select = g_string_new (NULL);
+-  g_string_append_printf (select, "SELECT ?datasource nie:version(?root) WHERE { "
+-                          "?datasource a nie:DataSource . "
+-                          "?datasource nao:identifier \"%s\" . "
+-                          "OPTIONAL { ?root nie:rootElementOf ?datasource } }",
++  g_string_append_printf (select,
++                          "SELECT ?datasource nie:version(?root) WHERE { "
++                          "  GRAPH <%s> { "
++                          "    ?datasource a nie:DataSource . "
++                          "    ?datasource nao:identifier \"%s\" . "
++                          "    OPTIONAL { ?root nie:rootElementOf ?datasource } "
++                          "  }"
++                          "}",
++                          GOM_GRAPH,
+                           klass->miner_identifier);
+ 
+   cursor = tracker_sparql_connection_query (self->priv->connection,
+
+diff --git a/src/gom-miner.h b/src/gom-miner.h
+index 5dcfc8d..8f83139 100644
+--- a/src/gom-miner.h
++++ b/src/gom-miner.h
+@@ -61,7 +61,6 @@ typedef struct _GomMinerPrivate GomMinerPrivate;
+ typedef struct {
+   GomMiner *miner;
+   TrackerSparqlConnection *connection;
+-  gchar *bus_name;
+ 
+   GoaAccount *account;
+   GHashTable *services;
+
+diff --git a/src/gom-owncloud-miner.c b/src/gom-owncloud-miner.c
+index 34d303b..623f2e1 100644
+--- a/src/gom-owncloud-miner.c
++++ b/src/gom-owncloud-miner.c
+@@ -100,14 +100,14 @@ account_miner_job_process_file (GomAccountMinerJob *job,
+     (connection,
+      cancellable, error,
+      &resource_exists,
+-     datasource_urn, identifier,
++     TRACKER_DOCUMENTS_GRAPH, identifier,
+      "nfo:RemoteDataObject", class, NULL);
+ 
+   if (*error != NULL)
+     goto out;
+ 
+   gom_tracker_update_datasource (connection, datasource_urn,
+-                                 resource_exists, identifier, resource,
++                                 resource_exists, TRACKER_DOCUMENTS_GRAPH, resource,
+                                  cancellable, error);
+ 
+   if (*error != NULL)
+@@ -117,7 +117,7 @@ account_miner_job_process_file (GomAccountMinerJob *job,
+   modification_time = g_date_time_new_from_timeval_local (&tv);
+   new_mtime = g_date_time_to_unix (modification_time);
+   mtime_changed = gom_tracker_update_mtime (connection, new_mtime,
+-                                            resource_exists, identifier, resource,
++                                            resource_exists, TRACKER_DOCUMENTS_GRAPH, resource,
+                                             cancellable, error);
+ 
+   if (*error != NULL)
+@@ -133,7 +133,7 @@ account_miner_job_process_file (GomAccountMinerJob *job,
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection,
+      cancellable, error,
+-     datasource_urn, resource,
++     TRACKER_DOCUMENTS_GRAPH, resource,
+      "nie:url", uri);
+ 
+   if (*error != NULL)
+@@ -156,7 +156,7 @@ account_miner_job_process_file (GomAccountMinerJob *job,
+           parent_resource_urn = gom_tracker_sparql_connection_ensure_resource
+             (connection, cancellable, error,
+              NULL,
+-             datasource_urn, parent_identifier,
++             GOM_GRAPH, parent_identifier,
+              "nfo:RemoteDataObject", "nfo:DataContainer", NULL);
+           g_checksum_reset (checksum);
+           g_free (parent_identifier);
+@@ -168,7 +168,7 @@ account_miner_job_process_file (GomAccountMinerJob *job,
+           gom_tracker_sparql_connection_insert_or_replace_triple
+             (connection,
+              cancellable, error,
+-             datasource_urn, resource,
++             TRACKER_DOCUMENTS_GRAPH, resource,
+              "nie:isPartOf", parent_resource_urn);
+           g_free (parent_resource_urn);
+ 
+@@ -182,7 +182,7 @@ account_miner_job_process_file (GomAccountMinerJob *job,
+           gom_tracker_sparql_connection_insert_or_replace_triple
+             (connection,
+              cancellable, error,
+-             datasource_urn, resource,
++             TRACKER_DOCUMENTS_GRAPH, resource,
+              "nie:mimeType", mime);
+ 
+           if (*error != NULL)
+@@ -194,7 +194,7 @@ account_miner_job_process_file (GomAccountMinerJob *job,
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection,
+      cancellable, error,
+-     datasource_urn, resource,
++     TRACKER_DOCUMENTS_GRAPH, resource,
+      "nfo:fileName", display_name);
+ 
+   if (*error != NULL)
+@@ -416,6 +416,11 @@ query_owncloud (GomAccountMinerJob *job,
+   mount = g_volume_get_mount (volume);
+   if (mount == NULL)
+     {
++      g_autofree gchar *volume_name;
++
++      volume_name = g_volume_get_name (volume);
++      g_debug ("Mounting Online Account volume %s", volume_name);
++
+       data.error = error;
+ 
+       context = g_main_context_new ();
+@@ -436,6 +441,7 @@ query_owncloud (GomAccountMinerJob *job,
+     }
+ 
+   root = g_mount_get_root (mount);
++  g_debug ("Got volume from gnome-online-accounts: root is %s", g_file_peek_path (root));
+   account_miner_job_traverse_dir (job, connection, previous_resources, datasource_urn, root, TRUE, cancellable, error);
+ 
+   g_object_unref (root);
+
+diff --git a/src/gom-tracker.c b/src/gom-tracker.c
+index 63a4c29..469583e 100644
+--- a/src/gom-tracker.c
++++ b/src/gom-tracker.c
+@@ -26,16 +26,11 @@
+ #include "gom-tracker.h"
+ #include "gom-utils.h"
+ 
+-static gchar *
+-_tracker_utils_format_into_graph (const gchar *graph)
+-{
+-  return (graph != NULL) ? g_strdup_printf ("INTO <%s> ", graph) : g_strdup ("");
+-}
+-
+ static gboolean
+ gom_tracker_sparql_connection_get_string_attribute (TrackerSparqlConnection *connection,
+                                                     GCancellable *cancellable,
+                                                     GError **error,
++                                                    const gchar *graph,
+                                                     const gchar *resource,
+                                                     const gchar *attribute,
+                                                     gchar **value)
+@@ -45,8 +40,8 @@ gom_tracker_sparql_connection_get_string_attribute (TrackerSparqlConnection *con
+   const gchar *string_value = NULL;
+   gboolean res;
+ 
+-  g_string_append_printf (select, "SELECT ?val { <%s> %s ?val }",
+-                          resource, attribute);
++  g_string_append_printf (select, "SELECT ?val { GRAPH <%s> { <%s> %s ?val } }",
++                          graph, resource, attribute);
+   cursor = tracker_sparql_connection_query (connection,
+                                             select->str,
+                                             cancellable, error);
+@@ -86,7 +81,8 @@ gom_tracker_sparql_connection_ensure_resource (TrackerSparqlConnection *connecti
+                                                const gchar *class,
+                                                ...)
+ {
+-  GString *select, *insert, *inner;
++  GString *select, *inner;
++  gchar *insert;
+   va_list args;
+   const gchar *arg;
+   TrackerSparqlCursor *cursor;
+@@ -98,6 +94,8 @@ gom_tracker_sparql_connection_ensure_resource (TrackerSparqlConnection *connecti
+   gchar *key = NULL, *val = NULL;
+   gboolean exists = FALSE;
+ 
++  g_return_val_if_fail (graph != NULL, NULL);
++
+   /* build the inner query with all the classes */
+   va_start (args, class);
+   inner = g_string_new (NULL);
+@@ -112,7 +110,7 @@ gom_tracker_sparql_connection_ensure_resource (TrackerSparqlConnection *connecti
+   /* query if such a resource is already in the DB */
+   select = g_string_new (NULL);
+   g_string_append_printf (select,
+-                          "SELECT ?urn WHERE { ?urn %s }", inner->str);
++                          "SELECT ?urn WHERE { GRAPH <%s> { ?urn %s } }", graph, inner->str);
+ 
+   cursor = tracker_sparql_connection_query (connection,
+                                             select->str,
+@@ -138,19 +136,12 @@ gom_tracker_sparql_connection_ensure_resource (TrackerSparqlConnection *connecti
+     }
+ 
+   /* not found, create the resource */
+-  insert = g_string_new (NULL);
+-  graph_str = _tracker_utils_format_into_graph (graph);
+-
+-  g_string_append_printf (insert, "INSERT %s { _:res %s }",
+-                          graph_str, inner->str);
+-  g_free (graph_str);
+-  g_string_free (inner, TRUE);
+-
++  insert = g_strdup_printf ("INSERT INTO <%s> { _:res %s }",
++                            graph, inner->str);
+   insert_res =
+-    tracker_sparql_connection_update_blank (connection, insert->str,
++    tracker_sparql_connection_update_blank (connection, insert,
+                                             G_PRIORITY_DEFAULT, NULL, error);
+-
+-  g_string_free (insert, TRUE);
++  g_free (insert);
+ 
+   if (*error != NULL)
+     goto out;
+@@ -194,10 +185,10 @@ gom_tracker_sparql_connection_insert_or_replace_triple (TrackerSparqlConnection
+                                                         const gchar *property_value)
+ {
+   GString *insert;
+-  gchar *graph_str, *quoted;
++  gchar *quoted;
+   gboolean retval = TRUE;
+ 
+-  graph_str = _tracker_utils_format_into_graph (graph);
++  g_return_val_if_fail (graph != NULL, FALSE);
+ 
+   /* the "null" value must not be quoted */
+   if (property_value == NULL)
+@@ -208,8 +199,8 @@ gom_tracker_sparql_connection_insert_or_replace_triple (TrackerSparqlConnection
+   insert = g_string_new (NULL);
+   g_string_append_printf
+     (insert,
+-     "INSERT OR REPLACE %s { <%s> a nie:InformationElement, nie:DataObject ; %s %s }",
+-     graph_str, resource, property_name, quoted);
++     "INSERT OR REPLACE INTO <%s> { <%s> a nie:InformationElement, nie:DataObject ; %s %s }",
++     graph, resource, property_name, quoted);
+   g_free (quoted);
+ 
+   g_debug ("Insert or replace triple: query %s", insert->str);
+@@ -223,8 +214,6 @@ gom_tracker_sparql_connection_insert_or_replace_triple (TrackerSparqlConnection
+   if (*error != NULL)
+     retval = FALSE;
+ 
+-  g_free (graph_str);
+-
+   return retval;
+ }
+ 
+@@ -271,6 +260,7 @@ gboolean
+ gom_tracker_sparql_connection_toggle_favorite (TrackerSparqlConnection *connection,
+                                                GCancellable *cancellable,
+                                                GError **error,
++                                               const gchar *graph,
+                                                const gchar *resource,
+                                                gboolean favorite)
+ {
+@@ -279,15 +269,15 @@ gom_tracker_sparql_connection_toggle_favorite (TrackerSparqlConnection *connecti
+   gboolean retval = TRUE;
+ 
+   if (favorite)
+-    op_str = "INSERT OR REPLACE";
++    op_str = "INSERT OR REPLACE INTO";
+   else
+-    op_str = "DELETE";
++    op_str = "DELETE FROM";
+ 
+   update = g_string_new (NULL);
+   g_string_append_printf
+     (update,
+-     "%s { <%s> nao:hasTag nao:predefined-tag-favorite }",
+-     op_str, resource);
++     "%s <%s> { <%s> nao:hasTag nao:predefined-tag-favorite }",
++     op_str, graph, resource);
+ 
+   g_debug ("Toggle favorite: query %s", update->str);
+ 
+@@ -321,9 +311,13 @@ gom_tracker_utils_ensure_contact_resource (TrackerSparqlConnection *connection,
+   mail_uri = g_strconcat ("mailto:", email, NULL);
+   select = g_string_new (NULL);
+   g_string_append_printf (select,
+-                          "SELECT ?urn WHERE { ?urn a nco:Contact . "
+-                          "?urn nco:hasEmailAddress ?mail . "
+-                          "FILTER (fn:contains(?mail, \"%s\" )) }", mail_uri);
++                          "SELECT ?urn WHERE { "
++                          "  GRAPH <%s> { "
++                          "    ?urn a nco:Contact . "
++                          "    ?urn nco:hasEmailAddress ?mail . "
++                          "    FILTER (fn:contains(?mail, \"%s\" )) "
++                          "  }"
++                          "}", TRACKER_CONTACTS_GRAPH, mail_uri);
+ 
+   cursor = tracker_sparql_connection_query (connection,
+                                             select->str,
+@@ -351,8 +345,9 @@ gom_tracker_utils_ensure_contact_resource (TrackerSparqlConnection *connection,
+   insert = g_string_new (NULL);
+ 
+   g_string_append_printf (insert,
+-                          "INSERT { <%s> a nco:EmailAddress ; nco:emailAddress \"%s\" . "
++                          "INSERT INTO <%s> { <%s> a nco:EmailAddress ; nco:emailAddress \"%s\" . "
+                           "_:res a nco:Contact ; nco:hasEmailAddress <%s> ; nco:fullname \"%s\" . }",
++                          TRACKER_CONTACTS_GRAPH,
+                           mail_uri, email,
+                           mail_uri, fullname);
+ 
+@@ -397,6 +392,7 @@ gchar *
+ gom_tracker_utils_ensure_equipment_resource (TrackerSparqlConnection *connection,
+                                              GCancellable *cancellable,
+                                              GError **error,
++                                             const gchar *graph,
+                                              const gchar *make,
+                                              const gchar *model)
+ {
+@@ -416,7 +412,7 @@ gom_tracker_utils_ensure_equipment_resource (TrackerSparqlConnection *connection
+   equip_uri = tracker_sparql_escape_uri_printf ("urn:equipment:%s:%s:",
+                                                 make != NULL ? make : "",
+                                                 model != NULL ? model : "");
+-  select = g_strdup_printf ("SELECT <%s> WHERE { }", equip_uri);
++  select = g_strdup_printf ("SELECT <%s> WHERE { GRAPH <%s> { } }", equip_uri, graph);
+ 
+   local_error = NULL;
+   cursor = tracker_sparql_connection_query (connection, select, cancellable, &local_error);
+@@ -449,7 +445,8 @@ gom_tracker_utils_ensure_equipment_resource (TrackerSparqlConnection *connection
+     }
+ 
+   /* not found, create the resource */
+-  insert = g_strdup_printf ("INSERT { <%s> a nfo:Equipment ; nfo:manufacturer \"%s\" ; nfo:model \"%s\" }",
++  insert = g_strdup_printf ("INSERT INTO <%s> { <%s> a nfo:Equipment ; nfo:manufacturer \"%s\" ; nfo:model \"%s\" }",
++                            graph,
+                             equip_uri,
+                             make,
+                             model);
+@@ -480,7 +477,7 @@ void
+ gom_tracker_update_datasource (TrackerSparqlConnection  *connection,
+                                const gchar              *datasource_urn,
+                                gboolean                  resource_exists,
+-                               const gchar              *identifier,
++                               const gchar              *graph,
+                                const gchar              *resource,
+                                GCancellable             *cancellable,
+                                GError                  **error)
+@@ -498,7 +495,7 @@ gom_tracker_update_datasource (TrackerSparqlConnection  *connection,
+ 
+       res = gom_tracker_sparql_connection_get_string_attribute
+         (connection, cancellable, error,
+-         resource, "nie:dataSource", &old_value);
++         graph, resource, "nie:dataSource", &old_value);
+       g_clear_error (error);
+ 
+       if (res)
+@@ -514,7 +511,7 @@ gom_tracker_update_datasource (TrackerSparqlConnection  *connection,
+   if (set_datasource)
+     gom_tracker_sparql_connection_set_triple
+       (connection, cancellable, error,
+-       identifier, resource,
++       graph, resource,
+        "nie:dataSource", datasource_urn);
+ }
+ 
+@@ -522,7 +519,7 @@ gboolean
+ gom_tracker_update_mtime (TrackerSparqlConnection  *connection,
+                           gint64                    new_mtime,
+                           gboolean                  resource_exists,
+-                          const gchar              *identifier,
++                          const gchar              *graph,
+                           const gchar              *resource,
+                           GCancellable             *cancellable,
+                           GError                  **error)
+@@ -536,7 +533,7 @@ gom_tracker_update_mtime (TrackerSparqlConnection  *connection,
+     {
+       res = gom_tracker_sparql_connection_get_string_attribute
+         (connection, cancellable, error,
+-         resource, "nie:contentLastModified", &old_value);
++         graph, resource, "nie:contentLastModified", &old_value);
+       g_clear_error (error);
+ 
+       if (res)
+@@ -552,7 +549,7 @@ gom_tracker_update_mtime (TrackerSparqlConnection  *connection,
+   date = gom_iso8601_from_timestamp (new_mtime);
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection, cancellable, error,
+-     identifier, resource,
++     graph, resource,
+      "nie:contentLastModified", date);
+   g_free (date);
+ 
+diff --git a/src/gom-tracker.h b/src/gom-tracker.h
+index 94a39e8..a5ae6fd 100644
+--- a/src/gom-tracker.h
++++ b/src/gom-tracker.h
+@@ -29,6 +29,14 @@
+ 
+ G_BEGIN_DECLS
+ 
++/* The graph where we store account meta information */
++#define GOM_GRAPH "tracker.api.gnome.org/ontology/v3/gnome-online-miners"
++
++/* Graphs where we store content information */
++#define TRACKER_CONTACTS_GRAPH "http://tracker.api.gnome.org/ontology/v3/tracker#Contacts"
++#define TRACKER_DOCUMENTS_GRAPH "http://tracker.api.gnome.org/ontology/v3/tracker#Documents"
++#define TRACKER_PICTURES_GRAPH "http://tracker.api.gnome.org/ontology/v3/tracker#Pictures"
++
+ gchar *gom_tracker_sparql_connection_ensure_resource (TrackerSparqlConnection *connection,
+                                                       GCancellable *cancellable,
+                                                       GError **error,
+@@ -57,6 +65,7 @@ gboolean gom_tracker_sparql_connection_set_triple (TrackerSparqlConnection *conn
+ gboolean gom_tracker_sparql_connection_toggle_favorite (TrackerSparqlConnection *connection,
+                                                         GCancellable *cancellable,
+                                                         GError **error,
++                                                        const gchar *graph,
+                                                         const gchar *resource,
+                                                         gboolean favorite);
+ 
+@@ -69,20 +78,21 @@ gchar* gom_tracker_utils_ensure_contact_resource (TrackerSparqlConnection *conne
+ gchar *gom_tracker_utils_ensure_equipment_resource (TrackerSparqlConnection *connection,
+                                                     GCancellable *cancellable,
+                                                     GError **error,
++                                                    const gchar *graph,
+                                                     const gchar *make,
+                                                     const gchar *model);
+ 
+ void gom_tracker_update_datasource (TrackerSparqlConnection  *connection,
+                                     const gchar              *datasource_urn,
+                                     gboolean                  resource_exists,
+-                                    const gchar              *identifier,
++                                    const gchar              *graph,
+                                     const gchar              *resource,
+                                     GCancellable             *cancellable,
+                                     GError                  **error);
+ gboolean gom_tracker_update_mtime (TrackerSparqlConnection  *connection,
+                                    gint64                    new_mtime,
+                                    gboolean                  resource_exists,
+-                                   const gchar              *identifier,
++                                   const gchar              *graph,
+                                    const gchar              *resource,
+                                    GCancellable             *cancellable,
+                                    GError                  **error);
+diff --git a/src/gom-zpj-miner.c b/src/gom-zpj-miner.c
+index 6dff947..1372de5 100644
+--- a/src/gom-zpj-miner.c
++++ b/src/gom-zpj-miner.c
+@@ -70,14 +70,14 @@ account_miner_job_process_entry (GomAccountMinerJob *job,
+     (connection,
+      cancellable, error,
+      &resource_exists,
+-     datasource_urn, identifier,
++     TRACKER_PICTURES_GRAPH, identifier,
+      "nfo:RemoteDataObject", class, NULL);
+ 
+   if (*error != NULL)
+     goto out;
+ 
+   gom_tracker_update_datasource (connection, datasource_urn,
+-                                 resource_exists, identifier, resource,
++                                 resource_exists, TRACKER_PICTURES_GRAPH, resource,
+                                  cancellable, error);
+ 
+   if (*error != NULL)
+@@ -86,7 +86,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job,
+   updated_time = zpj_skydrive_entry_get_updated_time (entry);
+   new_mtime = g_date_time_to_unix (updated_time);
+   mtime_changed = gom_tracker_update_mtime (connection, new_mtime,
+-                                            resource_exists, identifier, resource,
++                                            resource_exists, TRACKER_PICTURES_GRAPH, resource,
+                                             cancellable, error);
+ 
+   if (*error != NULL)
+@@ -102,7 +102,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job,
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection,
+      cancellable, error,
+-     datasource_urn, resource,
++     TRACKER_PICTURES_GRAPH, resource,
+      "nie:url", identifier);
+ 
+   if (*error != NULL)
+@@ -119,7 +119,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job,
+       parent_resource_urn = gom_tracker_sparql_connection_ensure_resource
+         (connection, cancellable, error,
+          NULL,
+-         datasource_urn, parent_identifier,
++         TRACKER_PICTURES_GRAPH, parent_identifier,
+          "nfo:RemoteDataObject", "nfo:DataContainer", NULL);
+       g_free (parent_identifier);
+ 
+@@ -129,7 +129,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job,
+       gom_tracker_sparql_connection_insert_or_replace_triple
+         (connection,
+          cancellable, error,
+-         datasource_urn, resource,
++         TRACKER_PICTURES_GRAPH, resource,
+          "nie:isPartOf", parent_resource_urn);
+       g_free (parent_resource_urn);
+ 
+@@ -142,7 +142,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job,
+           gom_tracker_sparql_connection_insert_or_replace_triple
+             (connection,
+              cancellable, error,
+-             datasource_urn, resource,
++             TRACKER_PICTURES_GRAPH, resource,
+              "nie:mimeType", mime);
+           g_free (mime);
+ 
+@@ -154,7 +154,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job,
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection,
+      cancellable, error,
+-     datasource_urn, resource,
++     TRACKER_PICTURES_GRAPH, resource,
+      "nie:description", zpj_skydrive_entry_get_description (entry));
+ 
+   if (*error != NULL)
+@@ -163,7 +163,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job,
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection,
+      cancellable, error,
+-     datasource_urn, resource,
++     TRACKER_PICTURES_GRAPH, resource,
+      "nfo:fileName", name);
+ 
+   if (*error != NULL)
+@@ -180,7 +180,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job,
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection,
+      cancellable, error,
+-     datasource_urn, resource,
++     TRACKER_PICTURES_GRAPH, resource,
+      "nco:creator", contact_resource);
+   g_free (contact_resource);
+ 
+@@ -192,6 +192,6 @@ account_miner_job_process_entry (GomAccountMinerJob *job,
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection,
+      cancellable, error,
+-     datasource_urn, resource,
++     TRACKER_PICTURES_GRAPH, resource,
+      "nie:contentCreated", date);
+   g_free (date);
+
+diff --git a/src/gom-miner.c b/src/gom-miner.c
+index 40b111d..f9e4be0 100644
+--- a/src/gom-miner.c
++++ b/src/gom-miner.c
+@@ -381,7 +381,6 @@ gom_miner_ensure_datasource (GomMiner *self,
+ 
+   tracker_sparql_connection_update (self->priv->connection,
+                                     datasource_insert->str,
+-                                    G_PRIORITY_DEFAULT,
+                                     cancellable,
+                                     error);
+ 
+@@ -468,7 +467,6 @@ gom_account_miner_job_cleanup_previous (GomAccountMinerJob *job,
+ 
+   tracker_sparql_connection_update (job->connection,
+                                     delete->str,
+-                                    G_PRIORITY_DEFAULT,
+                                     cancellable,
+                                     error);
+ 
+@@ -708,7 +706,6 @@ cleanup_job_do_cleanup (CleanupJob *job, GCancellable *cancellable)
+ 
+   tracker_sparql_connection_update (self->priv->connection,
+                                     update->str,
+-                                    G_PRIORITY_DEFAULT,
+                                     cancellable,
+                                     &error);
+   g_string_free (update, TRUE);
+
+diff --git a/src/gom-tracker.c b/src/gom-tracker.c
+index 469583e..716fc14 100644
+--- a/src/gom-tracker.c
++++ b/src/gom-tracker.c
+@@ -138,9 +138,7 @@ gom_tracker_sparql_connection_ensure_resource (TrackerSparqlConnection *connecti
+   /* not found, create the resource */
+   insert = g_strdup_printf ("INSERT INTO <%s> { _:res %s }",
+                             graph, inner->str);
+-  insert_res =
+-    tracker_sparql_connection_update_blank (connection, insert,
+-                                            G_PRIORITY_DEFAULT, NULL, error);
++  insert_res = tracker_sparql_connection_update_blank (connection, insert, NULL, error);
+   g_free (insert);
+ 
+   if (*error != NULL)
+@@ -205,9 +203,7 @@ gom_tracker_sparql_connection_insert_or_replace_triple (TrackerSparqlConnection
+ 
+   g_debug ("Insert or replace triple: query %s", insert->str);
+ 
+-  tracker_sparql_connection_update (connection, insert->str,
+-                                    G_PRIORITY_DEFAULT, cancellable,
+-                                    error);
++  tracker_sparql_connection_update (connection, insert->str, cancellable, error);
+ 
+   g_string_free (insert, TRUE);
+ 
+@@ -235,9 +231,7 @@ gom_tracker_sparql_connection_set_triple (TrackerSparqlConnection *connection,
+      "DELETE { <%s> %s ?val } WHERE { <%s> %s ?val }", resource,
+      property_name, resource, property_name);
+ 
+-  tracker_sparql_connection_update (connection, delete->str,
+-                                    G_PRIORITY_DEFAULT, cancellable,
+-                                    error);
++  tracker_sparql_connection_update (connection, delete->str, cancellable, error);
+ 
+   g_string_free (delete, TRUE);
+   if (*error != NULL)
+@@ -281,9 +275,7 @@ gom_tracker_sparql_connection_toggle_favorite (TrackerSparqlConnection *connecti
+ 
+   g_debug ("Toggle favorite: query %s", update->str);
+ 
+-  tracker_sparql_connection_update (connection, update->str,
+-                                    G_PRIORITY_DEFAULT, cancellable,
+-                                    error);
++  tracker_sparql_connection_update (connection, update->str, cancellable, error);
+ 
+   g_string_free (update, TRUE);
+ 
+@@ -351,9 +343,7 @@ gom_tracker_utils_ensure_contact_resource (TrackerSparqlConnection *connection,
+                           mail_uri, email,
+                           mail_uri, fullname);
+ 
+-  insert_res =
+-    tracker_sparql_connection_update_blank (connection, insert->str,
+-                                            G_PRIORITY_DEFAULT, cancellable, error);
++  insert_res = tracker_sparql_connection_update_blank (connection, insert->str, cancellable, error);
+ 
+   g_string_free (insert, TRUE);
+ 
+@@ -452,7 +442,7 @@ gom_tracker_utils_ensure_equipment_resource (TrackerSparqlConnection *connection
+                             model);
+ 
+   local_error = NULL;
+-  tracker_sparql_connection_update (connection, insert, G_PRIORITY_DEFAULT, cancellable, &local_error);
++  tracker_sparql_connection_update (connection, insert, cancellable, &local_error);
+   if (local_error != NULL)
+     {
+       g_propagate_error (error, local_error);
diff --git a/gnu/packages/patches/gnome-screenshot-meson-0.60.patch b/gnu/packages/patches/gnome-screenshot-meson-0.60.patch
new file mode 100644
index 0000000000..c80ce9d6a3
--- /dev/null
+++ b/gnu/packages/patches/gnome-screenshot-meson-0.60.patch
@@ -0,0 +1,39 @@
+Fixes build issue with Meson 0.60.0. Taken from upstream
+https://gitlab.gnome.org/GNOME/gnome-screenshot/-/merge_requests/57
+
+From b60dad3c2536c17bd201f74ad8e40eb74385ed9f Mon Sep 17 00:00:00 2001
+From: Jack Hill <jackhill@jackhill.us>
+Date: Thu, 18 Nov 2021 00:46:58 -0500
+Subject: [PATCH] meson: remove extraneous positional argument
+
+* data/meson.build (desktop_file)
+  (metainfo_file): Remove extraneous positional argument.
+
+Closes #186
+---
+ data/meson.build | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/data/meson.build b/data/meson.build
+index fd570b3..4e2e2e8 100644
+--- a/data/meson.build
++++ b/data/meson.build
+@@ -1,7 +1,6 @@
+ gnome = import('gnome')
+ 
+ desktop_file = i18n.merge_file(
+-  'desktop',
+   type: 'desktop',
+   input: 'org.gnome.Screenshot.desktop.in',
+   output: 'org.gnome.Screenshot.desktop',
+@@ -23,7 +22,6 @@ if desktop_file_validate.found()
+ endif
+ 
+ metainfo_file = i18n.merge_file(
+-  'appdata',
+   input: 'org.gnome.Screenshot.metainfo.xml.in',
+   output: 'org.gnome.Screenshot.metainfo.xml',
+   po_dir: join_paths(meson.current_source_dir(), '../po'),
+-- 
+2.33.1
+
diff --git a/gnu/packages/patches/gnome-session-support-elogind.patch b/gnu/packages/patches/gnome-session-support-elogind.patch
new file mode 100644
index 0000000000..b52b4c6855
--- /dev/null
+++ b/gnu/packages/patches/gnome-session-support-elogind.patch
@@ -0,0 +1,73 @@
+This patch, borrowed from Gentoo, allows configuring gnome-sesssion with
+elogind support.
+
+https://gitweb.gentoo.org/repo/gentoo.git/plain/gnome-base/gnome-session/files/gnome-session-3.38.0-meson-Support-elogind.patch?id=5f7fe88af5f888aff58fa0c069c3fe07973c7cd2
+
+From 4454f2a63394b69fba2c900151165ad8b5742f31 Mon Sep 17 00:00:00 2001
+From: Mart Raudsepp <leio@gentoo.org>
+Date: Sun, 15 Mar 2020 14:34:39 +0200
+Subject: [PATCH] meson: Support elogind
+
+---
+ meson.build       | 12 +++++++++---
+ meson_options.txt |  1 +
+ 2 files changed, 10 insertions(+), 3 deletions(-)
+
+diff --git a/meson.build b/meson.build
+index ef5132c6..7f68aaae 100644
+--- a/meson.build
++++ b/meson.build
+@@ -124,8 +124,10 @@ enable_systemd = get_option('systemd')
+ enable_systemd_session = get_option('systemd_session') != 'disable'
+ use_systemd_session = get_option('systemd_session') == 'default'
+ enable_systemd_journal = get_option('systemd_journal')
++enable_elogind = get_option('elogind')
+ enable_consolekit = get_option('consolekit')
+-if enable_systemd or enable_consolekit
++assert(not (enable_systemd and enable_elogind), 'Can not support systemd and elogind at once')
++if enable_systemd or enable_elogind or enable_consolekit
+   session_bin_deps += dependency('gio-unix-2.0', version: glib_req_version)
+ 
+   # Check for systemd
+@@ -152,6 +154,10 @@ if enable_systemd or enable_consolekit
+     endif
+ 
+     session_tracking = 'systemd'
++  elif enable_elogind
++    libelogind_dep = dependency('libelogind', version: '>= 239.4')
++    session_bin_deps += libelogind_dep
++    session_tracking = 'elogind'
+   endif
+ 
+   # Check for ConsoleKit
+@@ -161,7 +167,7 @@ if enable_systemd or enable_consolekit
+ 
+     session_bin_deps += dbus_glib_dep
+ 
+-    if enable_systemd
++    if enable_systemd or enable_elogind
+       session_tracking += ' (with fallback to ConsoleKit)'
+     else
+       session_tracking = 'ConsoleKit'
+@@ -171,7 +177,7 @@ endif
+ if enable_systemd_session
+   assert(enable_systemd, 'Systemd support must be enabled when using systemd session management')
+ endif
+-config_h.set('HAVE_SYSTEMD', enable_systemd)
++config_h.set('HAVE_SYSTEMD', enable_systemd or enable_elogind)
+ config_h.set('ENABLE_SYSTEMD_SESSION', enable_systemd_session)
+ config_h.set('ENABLE_SYSTEMD_JOURNAL', enable_systemd_journal)
+ config_h.set('HAVE_CONSOLEKIT', enable_consolekit)
+diff --git a/meson_options.txt b/meson_options.txt
+index 4c05dc6e..512d1528 100644
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -1,4 +1,5 @@
+ option('deprecation_flags', type: 'boolean', value: false, description: 'use *_DISABLE_DEPRECATED flags')
++option('elogind', type: 'boolean', value: true, description: 'Use elogind')
+ option('session_selector', type: 'boolean', value: false, description: 'enable building a custom session selector dialog')
+ option('systemd', type: 'boolean', value: true, description: 'Use systemd')
+ option('systemd_session', type: 'combo', choices: ['disable', 'enable', 'default'], value: 'default', description: 'Whether to include systemd session support and use it by default')
+-- 
+2.26.2
+
diff --git a/gnu/packages/patches/gnome-shell-CVE-2020-17489.patch b/gnu/packages/patches/gnome-shell-CVE-2020-17489.patch
deleted file mode 100644
index 4b7748950e..0000000000
--- a/gnu/packages/patches/gnome-shell-CVE-2020-17489.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From 05b7aec747282f62212b605249d518280ff80059 Mon Sep 17 00:00:00 2001
-From: Ray Strode <rstrode@redhat.com>
-Date: Mon, 27 Jul 2020 10:58:22 -0400
-Subject: [PATCH] loginDialog: Reset auth prompt on vt switch before fade in
-
-At the moment, if a user switches to the login screen vt,
-the login screen fades in whatever was on screen prior, and
-then does a reset.
-
-It makes more sense to reset first, so we fade in what the
-user is going to interact with instead of what they interacted
-with before.
-
-Fixes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/2997
----
- js/gdm/loginDialog.js | 9 ++++-----
- 1 file changed, 4 insertions(+), 5 deletions(-)
-
-diff --git a/js/gdm/loginDialog.js b/js/gdm/loginDialog.js
-index c3f90dc58..6b35ebb16 100644
---- a/js/gdm/loginDialog.js
-+++ b/js/gdm/loginDialog.js
-@@ -920,16 +920,15 @@ var LoginDialog = GObject.registerClass({
-         if (this.opacity == 255 && this._authPrompt.verificationStatus == AuthPrompt.AuthPromptStatus.NOT_VERIFYING)
-             return;
- 
-+        if (this._authPrompt.verificationStatus !== AuthPrompt.AuthPromptStatus.NOT_VERIFYING)
-+            this._authPrompt.reset();
-+
-         this._bindOpacity();
-         this.ease({
-             opacity: 255,
-             duration: _FADE_ANIMATION_TIME,
-             mode: Clutter.AnimationMode.EASE_OUT_QUAD,
--            onComplete: () => {
--                if (this._authPrompt.verificationStatus != AuthPrompt.AuthPromptStatus.NOT_VERIFYING)
--                    this._authPrompt.reset();
--                this._unbindOpacity();
--            }
-+            onComplete: () => this._unbindOpacity(),
-         });
-     }
- 
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/gnome-shell-disable-test.patch b/gnu/packages/patches/gnome-shell-disable-test.patch
deleted file mode 100644
index b4c7e73cd7..0000000000
--- a/gnu/packages/patches/gnome-shell-disable-test.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-This test seems to require a D-Bus connection not available in the build
-environment.
-
-diff -ur /tmp/guix-build-gnome-shell-3.34.2.drv-0/gnome-shell-3.34.2/src/st/meson.build b/src/st/meson.build
---- /tmp/guix-build-gnome-shell-3.34.2.drv-0/gnome-shell-3.34.2/src/st/meson.build	1969-12-31 19:00:00.000000000 -0500
-+++ b/src/st/meson.build	2019-12-23 00:46:14.721198022 -0500
-@@ -132,18 +132,6 @@
-   sources: st_enums[1]
- )
- 
--test_theme = executable('test-theme',
--  sources: 'test-theme.c',
--  c_args: st_cflags,
--  dependencies: [mutter_dep, gtk_dep],
--  build_rpath: mutter_typelibdir,
--  link_with: libst
--)
--
--test('CSS styling support', test_theme,
--  workdir: meson.current_source_dir()
--)
--
- libst_gir = gnome.generate_gir(libst,
-   sources: st_gir_sources,
-   nsversion: '1.0',
diff --git a/gnu/packages/patches/gnome-shell-theme.patch b/gnu/packages/patches/gnome-shell-theme.patch
deleted file mode 100644
index 3fa0670c43..0000000000
--- a/gnu/packages/patches/gnome-shell-theme.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-Adjust GNOME-Shell so that it uses a Guix theme by default.
-
-Patch by Ludovic Courtès <ludo@gnu.org>.
-
-diff -ur a/data/gnome-shell-theme.gresource.xml b/data/gnome-shell-theme.gresource.xml
---- a/data/gnome-shell-theme.gresource.xml	2019-12-11 15:06:31.000000000 -0500
-+++ b/data/gnome-shell-theme.gresource.xml	2019-12-21 00:31:55.895866241 -0500
-@@ -19,6 +19,8 @@
-     <file>no-events.svg</file>
-     <file>no-notifications.svg</file>
-     <file>noise-texture.png</file>
-+    <file>guix-background.png</file>
-+    <file>guix-logo.png</file>
-     <file>pad-osd.css</file>
-     <file alias="icons/pointer-double-click-symbolic.svg">pointer-double-click-symbolic.svg</file>
-     <file alias="icons/pointer-drag-symbolic.svg">pointer-drag-symbolic.svg</file>
-diff -ur a/data/theme/gnome-shell-sass/_common.scss b/data/theme/gnome-shell-sass/_common.scss
---- a/data/theme/gnome-shell-sass/_common.scss	2019-12-11 15:06:31.000000000 -0500
-+++ b/data/theme/gnome-shell-sass/_common.scss	2019-12-21 00:33:49.495832135 -0500
-@@ -1994,7 +1994,16 @@
-   }
- }
- 
--  .login-dialog-logo-bin { padding: 24px 0px; }
-+  .login-dialog-logo-bin {
-+      /* Make it a bit narrower than .login-dialog-user-list.  */
-+      width: 12em;
-+      height: 8em;
-+      background: url(resource:///org/gnome/shell/theme/guix-logo.png);
-+      background-color: transparent;
-+      background-repeat: no-repeat;
-+      background-size: contain;
-+      background-position: center; }
-+
-   .login-dialog-banner { color: darken($osd_fg_color,10%); }
-   .login-dialog-button-box { spacing: 5px; }
-   .login-dialog-message-warning { color: $warning_color; }
-@@ -2143,9 +2152,10 @@
- }
- 
- #lockDialogGroup {
--  background: lighten(#2e3436, 8%) url(resource:///org/gnome/shell/theme/noise-texture.png);
--  background-repeat: repeat;
--}
-+  background: lighten(#2e3436, 8%) url(resource:///org/gnome/shell/theme/guix-background.png);
-+  background-repeat: no-repeat;
-+  background-size: cover;
-+  background-position: center; }
- 
- #screenShieldNotifications {
-   StButton#vhandle, StButton#hhandle {
diff --git a/gnu/packages/patches/gnome-todo-delete-esource-duplicate.patch b/gnu/packages/patches/gnome-todo-delete-esource-duplicate.patch
deleted file mode 100644
index c680e86495..0000000000
--- a/gnu/packages/patches/gnome-todo-delete-esource-duplicate.patch
+++ /dev/null
@@ -1,10 +0,0 @@
-From: Emmanuele Bassi <ebassi@gnome.org>
-
-See also: https://gitlab.gnome.org/GNOME/gnome-todo/commit/6cdabc4dd0c6c804a093b94c269461ce376fed4f
---- gnome-todo-3.28.1/plugins/eds/gtd-eds-autoptr.h.orig	2020-05-06 14:20:49.589902539 +0200
-+++ gnome-todo-3.28.1/plugins/eds/gtd-eds-autoptr.h	2020-05-06 14:20:54.593919721 +0200
-@@ -25,4 +25,3 @@
- G_DEFINE_AUTOPTR_CLEANUP_FUNC (ECalComponent, g_object_unref);
- G_DEFINE_AUTOPTR_CLEANUP_FUNC (ECalComponentId, e_cal_component_free_id);
- G_DEFINE_AUTOPTR_CLEANUP_FUNC (ECalClient, g_object_unref);
--G_DEFINE_AUTOPTR_CLEANUP_FUNC (ESource, g_object_unref);
diff --git a/gnu/packages/patches/gnome-todo-libportal.patch b/gnu/packages/patches/gnome-todo-libportal.patch
new file mode 100644
index 0000000000..380c628592
--- /dev/null
+++ b/gnu/packages/patches/gnome-todo-libportal.patch
@@ -0,0 +1,54 @@
+From 3e1f4da8c0e536c09ffaf3b43fe2eb5dc17cc23e Mon Sep 17 00:00:00 2001
+From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
+Date: Thu, 18 Nov 2021 19:46:13 -0300
+Subject: [PATCH] flatpak: Adjust to libportal changes
+
+---
+ build-aux/flatpak/org.gnome.Todo.json          | 3 +++
+ src/plugins/background/gtd-plugin-background.c | 2 +-
+ src/plugins/background/meson.build             | 2 +-
+ 3 files changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/build-aux/flatpak/org.gnome.Todo.json b/build-aux/flatpak/org.gnome.Todo.json
+index 034e200c..44b83d66 100644
+--- a/build-aux/flatpak/org.gnome.Todo.json
++++ b/build-aux/flatpak/org.gnome.Todo.json
+@@ -143,6 +143,9 @@
+         {
+             "name" : "libportal",
+             "buildsystem" : "meson",
++            "config-opts" : [
++                "-Dbackends=gtk4"
++            ],
+             "sources" : [
+                 {
+                     "type" : "git",
+diff --git a/src/plugins/background/gtd-plugin-background.c b/src/plugins/background/gtd-plugin-background.c
+index cf48786c..f64d07aa 100644
+--- a/src/plugins/background/gtd-plugin-background.c
++++ b/src/plugins/background/gtd-plugin-background.c
+@@ -28,7 +28,7 @@
+ #include <gtk/gtk.h>
+ 
+ #include <libportal/portal.h>
+-#include <libportal/portal-gtk4.h>
++#include <libportal-gtk4/portal-gtk4.h>
+ 
+ #define AUTOSTART_NOTIFICATION_ID      "Gtd::BackgroundPlugin::autostart_notification"
+ #define AUTOSTART_NOTIFICATION_TIMEOUT 3  /* seconds */
+diff --git a/src/plugins/background/meson.build b/src/plugins/background/meson.build
+index a671a4f3..59d3635f 100644
+--- a/src/plugins/background/meson.build
++++ b/src/plugins/background/meson.build
+@@ -1,7 +1,7 @@
+ plugins_ldflags += ['-Wl,--undefined=gtd_plugin_background_register_types']
+ 
+ plugins_deps += [
+-  dependency('libportal'),
++  dependency('libportal-gtk4'),
+ ]
+ 
+ plugins_sources += files(
+-- 
+GitLab
+
diff --git a/gnu/packages/patches/gnupg-1-build-with-gcc10.patch b/gnu/packages/patches/gnupg-1-build-with-gcc10.patch
new file mode 100644
index 0000000000..40b2aff98e
--- /dev/null
+++ b/gnu/packages/patches/gnupg-1-build-with-gcc10.patch
@@ -0,0 +1,64 @@
+Borrowed from Debian
+https://sources.debian.org/src/gnupg1/1.4.23-1.1/debian/patches/0006-fix-for-gcc10.patch/
+
+Subject: Fix build with gcc-10
+Author: Christoph Biedl <debian.axhn@manchmal.in-ulm.de>
+Date: 2021-01-04
+Bug: https://dev.gnupg.org/T5215
+Bug-Debian: https://bugs.debian.org/957293
+
+--- a/g10/options.h
++++ b/g10/options.h
+@@ -29,6 +29,8 @@
+ /* Norcraft can't cope with common symbols */
+ #if defined (__riscos__) && !defined (INCLUDED_BY_MAIN_MODULE)
+ #define EXTERN_UNLESS_MAIN_MODULE extern
++#elif defined (__GNUC__) && __GNUC__ >= 10
++#define EXTERN_UNLESS_MAIN_MODULE __attribute__((__common__))
+ #else
+ #define EXTERN_UNLESS_MAIN_MODULE
+ #endif
+--- a/include/cipher.h
++++ b/include/cipher.h
+@@ -117,6 +117,8 @@
+ #ifndef EXTERN_UNLESS_MAIN_MODULE
+ #if defined (__riscos__) && !defined (INCLUDED_BY_MAIN_MODULE)
+ #define EXTERN_UNLESS_MAIN_MODULE extern
++#elif defined (__GNUC__) && __GNUC__ >= 10
++#define EXTERN_UNLESS_MAIN_MODULE __attribute__((__common__))
+ #else
+ #define EXTERN_UNLESS_MAIN_MODULE
+ #endif
+--- a/include/iobuf.h
++++ b/include/iobuf.h
+@@ -72,6 +72,8 @@
+ #ifndef EXTERN_UNLESS_MAIN_MODULE
+ #if defined (__riscos__) && !defined (INCLUDED_BY_MAIN_MODULE)
+ #define EXTERN_UNLESS_MAIN_MODULE extern
++#elif defined (__GNUC__) && __GNUC__ >= 10
++#define EXTERN_UNLESS_MAIN_MODULE __attribute__((__common__))
+ #else
+ #define EXTERN_UNLESS_MAIN_MODULE 
+ #endif
+--- a/include/memory.h
++++ b/include/memory.h
+@@ -93,6 +93,8 @@
+ #ifndef EXTERN_UNLESS_MAIN_MODULE
+ #if defined (__riscos__) && !defined (INCLUDED_BY_MAIN_MODULE)
+ #define EXTERN_UNLESS_MAIN_MODULE extern
++#elif defined (__GNUC__) && __GNUC__ >= 10
++#define EXTERN_UNLESS_MAIN_MODULE __attribute__((__common__))
+ #else
+ #define EXTERN_UNLESS_MAIN_MODULE 
+ #endif
+--- a/include/mpi.h
++++ b/include/mpi.h
+@@ -38,6 +38,8 @@
+ #ifndef EXTERN_UNLESS_MAIN_MODULE
+ #if defined (__riscos__) && !defined (INCLUDED_BY_MAIN_MODULE)
+ #define EXTERN_UNLESS_MAIN_MODULE extern
++#elif defined (__GNUC__) && __GNUC__ >= 10
++#define EXTERN_UNLESS_MAIN_MODULE __attribute__((__common__))
+ #else
+ #define EXTERN_UNLESS_MAIN_MODULE 
+ #endif
diff --git a/gnu/packages/patches/gnutls-CVE-2021-20231.patch b/gnu/packages/patches/gnutls-CVE-2021-20231.patch
deleted file mode 100644
index 5186522eee..0000000000
--- a/gnu/packages/patches/gnutls-CVE-2021-20231.patch
+++ /dev/null
@@ -1,62 +0,0 @@
-From 15beb4b193b2714d88107e7dffca781798684e7e Mon Sep 17 00:00:00 2001
-From: Daiki Ueno <ueno@gnu.org>
-Date: Fri, 29 Jan 2021 14:06:05 +0100
-Subject: [PATCH 1/2] key_share: avoid use-after-free around realloc
-
-Signed-off-by: Daiki Ueno <ueno@gnu.org>
----
- lib/ext/key_share.c | 12 +++++-------
- 1 file changed, 5 insertions(+), 7 deletions(-)
-
-diff --git a/lib/ext/key_share.c b/lib/ext/key_share.c
-index ab8abf8fe..a8c4bb5cf 100644
---- a/lib/ext/key_share.c
-+++ b/lib/ext/key_share.c
-@@ -664,14 +664,14 @@ key_share_send_params(gnutls_session_t session,
- {
- 	unsigned i;
- 	int ret;
--	unsigned char *lengthp;
--	unsigned int cur_length;
- 	unsigned int generated = 0;
- 	const gnutls_group_entry_st *group;
- 	const version_entry_st *ver;
- 
- 	/* this extension is only being sent on client side */
- 	if (session->security_parameters.entity == GNUTLS_CLIENT) {
-+		unsigned int length_pos;
-+
- 		ver = _gnutls_version_max(session);
- 		if (unlikely(ver == NULL || ver->key_shares == 0))
- 			return 0;
-@@ -679,16 +679,13 @@ key_share_send_params(gnutls_session_t session,
- 		if (!have_creds_for_tls13(session))
- 			return 0;
- 
--		/* write the total length later */
--		lengthp = &extdata->data[extdata->length];
-+		length_pos = extdata->length;
- 
- 		ret =
- 		    _gnutls_buffer_append_prefix(extdata, 16, 0);
- 		if (ret < 0)
- 			return gnutls_assert_val(ret);
- 
--		cur_length = extdata->length;
--
- 		if (session->internals.hsk_flags & HSK_HRR_RECEIVED) { /* we know the group */
- 			group = get_group(session);
- 			if (unlikely(group == NULL))
-@@ -736,7 +733,8 @@ key_share_send_params(gnutls_session_t session,
- 		}
- 
- 		/* copy actual length */
--		_gnutls_write_uint16(extdata->length - cur_length, lengthp);
-+		_gnutls_write_uint16(extdata->length - length_pos - 2,
-+				     &extdata->data[length_pos]);
- 
- 	} else { /* server */
- 		ver = get_version(session);
--- 
-2.30.2
-
diff --git a/gnu/packages/patches/gnutls-CVE-2021-20232.patch b/gnu/packages/patches/gnutls-CVE-2021-20232.patch
deleted file mode 100644
index dc3a0be690..0000000000
--- a/gnu/packages/patches/gnutls-CVE-2021-20232.patch
+++ /dev/null
@@ -1,60 +0,0 @@
-From 75a937d97f4fefc6f9b08e3791f151445f551cb3 Mon Sep 17 00:00:00 2001
-From: Daiki Ueno <ueno@gnu.org>
-Date: Fri, 29 Jan 2021 14:06:23 +0100
-Subject: [PATCH 2/2] pre_shared_key: avoid use-after-free around realloc
-
-Signed-off-by: Daiki Ueno <ueno@gnu.org>
----
- lib/ext/pre_shared_key.c | 15 ++++++++++++---
- 1 file changed, 12 insertions(+), 3 deletions(-)
-
-diff --git a/lib/ext/pre_shared_key.c b/lib/ext/pre_shared_key.c
-index a042c6488..380bf39ed 100644
---- a/lib/ext/pre_shared_key.c
-+++ b/lib/ext/pre_shared_key.c
-@@ -267,7 +267,7 @@ client_send_params(gnutls_session_t session,
- 	size_t spos;
- 	gnutls_datum_t username = {NULL, 0};
- 	gnutls_datum_t user_key = {NULL, 0}, rkey = {NULL, 0};
--	gnutls_datum_t client_hello;
-+	unsigned client_hello_len;
- 	unsigned next_idx;
- 	const mac_entry_st *prf_res = NULL;
- 	const mac_entry_st *prf_psk = NULL;
-@@ -428,8 +428,7 @@ client_send_params(gnutls_session_t session,
- 	assert(extdata->length >= sizeof(mbuffer_st));
- 	assert(ext_offset >= (ssize_t)sizeof(mbuffer_st));
- 	ext_offset -= sizeof(mbuffer_st);
--	client_hello.data = extdata->data+sizeof(mbuffer_st);
--	client_hello.size = extdata->length-sizeof(mbuffer_st);
-+	client_hello_len = extdata->length-sizeof(mbuffer_st);
- 
- 	next_idx = 0;
- 
-@@ -440,6 +439,11 @@ client_send_params(gnutls_session_t session,
- 	}
- 
- 	if (prf_res && rkey.size > 0) {
-+		gnutls_datum_t client_hello;
-+
-+		client_hello.data = extdata->data+sizeof(mbuffer_st);
-+		client_hello.size = client_hello_len;
-+
- 		ret = compute_psk_binder(session, prf_res,
- 					 binders_len, binders_pos,
- 					 ext_offset, &rkey, &client_hello, 1,
-@@ -474,6 +478,11 @@ client_send_params(gnutls_session_t session,
- 	}
- 
- 	if (prf_psk && user_key.size > 0 && info) {
-+		gnutls_datum_t client_hello;
-+
-+		client_hello.data = extdata->data+sizeof(mbuffer_st);
-+		client_hello.size = client_hello_len;
-+
- 		ret = compute_psk_binder(session, prf_psk,
- 					 binders_len, binders_pos,
- 					 ext_offset, &user_key, &client_hello, 0,
--- 
-2.30.2
-
diff --git a/gnu/packages/patches/gnutls-guile-eintr-eagain.patch b/gnu/packages/patches/gnutls-guile-eintr-eagain.patch
new file mode 100644
index 0000000000..e04c945158
--- /dev/null
+++ b/gnu/packages/patches/gnutls-guile-eintr-eagain.patch
@@ -0,0 +1,56 @@
+Fixes <https://issues.guix.gnu.org/47867>.
+
+This fix was merged upstream
+in <https://gitlab.com/gnutls/gnutls/-/merge_requests/1417> and will
+be in GnuTLS 3.7.3.  Upstream commit:
+
+commit 110e2172dbef1fbdf7399dab1e80780847b61c0c
+Author: Ludovic Courtès <ludo@gnu.org>
+Date:   Sat Apr 24 22:02:14 2021 +0200
+
+    guile: Writes to record ports handle EAGAIN/EINTR transparently.
+
+diff --git a/guile/src/core.c b/guile/src/core.c
+index a13670fc7b..0926dc8a97 100644
+--- a/guile/src/core.c
++++ b/guile/src/core.c
+@@ -985,7 +985,10 @@ write_to_session_record_port (SCM port, const void *data, size_t size)
+       c_result = gnutls_record_send (c_session, (char *) data + c_sent,
+                                      size - c_sent);
+       if (EXPECT_FALSE (c_result < 0))
+-        scm_gnutls_error (c_result, FUNC_NAME);
++	{
++	  if (c_result != GNUTLS_E_AGAIN && c_result != GNUTLS_E_INTERRUPTED)
++	    scm_gnutls_error (c_result, FUNC_NAME);
++	}
+       else
+         c_sent += c_result;
+     }
+@@ -1069,7 +1072,8 @@ read_from_session_record_port (SCM port, SCM dst, size_t start, size_t count)
+ #undef FUNC_NAME
+ 
+ /* Return the file descriptor that backs PORT.  This function is called upon a
+-   blocking read--i.e., 'read_from_session_record_port' returned -1.  */
++   blocking read--i.e., 'read_from_session_record_port' or
++   'write_to_session_record_port' returned -1.  */
+ static int
+ session_record_port_fd (SCM port)
+ {
+@@ -1097,7 +1101,16 @@ write_to_session_record_port (SCM port, SCM src, size_t start, size_t count)
+   c_session = scm_to_gnutls_session (session, 1, FUNC_NAME);
+   data = (char *) SCM_BYTEVECTOR_CONTENTS (src) + start;
+ 
+-  result = gnutls_record_send (c_session, data, count);
++  do
++    result = gnutls_record_send (c_session, data, count);
++  while (result == GNUTLS_E_INTERRUPTED
++	 || (result == GNUTLS_E_AGAIN
++	     && !SCM_GNUTLS_SESSION_TRANSPORT_IS_FD (c_session)));
++
++  if (result == GNUTLS_E_AGAIN
++      && SCM_GNUTLS_SESSION_TRANSPORT_IS_FD (c_session))
++    /* Tell Guile that reading would block.  */
++    return (size_t) -1;
+ 
+   if (EXPECT_FALSE (result < 0))
+     scm_gnutls_error (result, FUNC_NAME);
diff --git a/gnu/packages/patches/go-github-com-golang-snappy-32bit-test.patch b/gnu/packages/patches/go-github-com-golang-snappy-32bit-test.patch
new file mode 100644
index 0000000000..95b5819cdb
--- /dev/null
+++ b/gnu/packages/patches/go-github-com-golang-snappy-32bit-test.patch
@@ -0,0 +1,53 @@
+https://salsa.debian.org/go-team/packages/golang-github-golang-snappy/-/raw/debian/0.0.2-2/debian/patches/0002-Skip-failed-test-on-32bit-system.patch
+
+From: Shengjing Zhu <zhsj@debian.org>
+Date: Sun, 31 Jan 2021 22:41:42 +0800
+Subject: Skip failed test on 32bit system
+
+The test doesn't pass on old version too, not a regression.
+
+Bug: https://github.com/golang/snappy/issues/58
+---
+ snappy_test.go | 20 +++++++++++++++-----
+ 1 file changed, 15 insertions(+), 5 deletions(-)
+
+diff --git a/snappy_test.go b/snappy_test.go
+index d7c3ea6..c310ba1 100644
+--- a/snappy_test.go
++++ b/snappy_test.go
+@@ -19,6 +19,7 @@ import (
+ 	"runtime"
+ 	"strings"
+ 	"testing"
++	"unsafe"
+ )
+ 
+ var (
+@@ -316,13 +317,22 @@ func TestDecode(t *testing.T) {
+ 		"\x06" + "\x0cabcd" + "\x07\x03\x00\x00\x00",
+ 		"abcdbc",
+ 		nil,
+-	}, {
+-		`decodedLen=0; tagCopy4, 4 extra length|offset bytes; with msb set (0x93); discovered by go-fuzz`,
+-		"\x00\xfc000\x93",
+-		"",
+-		ErrCorrupt,
+ 	}}
+ 
++	if unsafe.Sizeof(int(0)) == 8 {
++		testCases = append(testCases, struct {
++			desc    string
++			input   string
++			want    string
++			wantErr error
++		}{
++			`decodedLen=0; tagCopy4, 4 extra length|offset bytes; with msb set (0x93); discovered by go-fuzz`,
++			"\x00\xfc000\x93",
++			"",
++			ErrCorrupt,
++		})
++	}
++
+ 	const (
+ 		// notPresentXxx defines a range of byte values [0xa0, 0xc5) that are
+ 		// not present in either the input or the output. It is written to dBuf
diff --git a/gnu/packages/patches/gpaste-fix-paths.patch b/gnu/packages/patches/gpaste-fix-paths.patch
new file mode 100644
index 0000000000..be63878fe6
--- /dev/null
+++ b/gnu/packages/patches/gpaste-fix-paths.patch
@@ -0,0 +1,24 @@
+This is copied from NixOS, which is under MIT licence.
+https://github.com/NixOS/nixpkgs/blob/master/pkgs/desktops/gnome/misc/gpaste/
+--- a/src/gnome-shell/extension.js
++++ b/src/gnome-shell/extension.js
+@@ -6,6 +6,8 @@
+ 
+ const Config = imports.misc.config;
+ 
++imports.gi.GIRepository.Repository.prepend_search_path('@typelibPath@');
++
+ imports.gi.versions.Clutter = Config.LIBMUTTER_API_VERSION;
+ imports.gi.versions.GLib = '2.0';
+ imports.gi.versions.GPaste = '1.0';
+--- a/src/gnome-shell/prefs.js
++++ b/src/gnome-shell/prefs.js
+@@ -6,6 +6,8 @@
+ 
+ const Gettext = imports.gettext;
+ 
++imports.gi.GIRepository.Repository.prepend_search_path('@typelibPath@');
++
+ //const { GPaste } = imports.gi;
+ 
+ const ExtensionUtils = imports.misc.extensionUtils;
diff --git a/gnu/packages/patches/graphviz-CVE-2020-18032.patch b/gnu/packages/patches/graphviz-CVE-2020-18032.patch
deleted file mode 100644
index 4cf94a9a36..0000000000
--- a/gnu/packages/patches/graphviz-CVE-2020-18032.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-Fix CVE-2020-18032:
-
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=2020-18032
-https://gitlab.com/graphviz/graphviz/-/issues/1700
-
-Patch copied from upstream source repository:
-
-https://gitlab.com/graphviz/graphviz/-/commit/784411ca3655c80da0f6025ab20634b2a6ff696b
-
-From 784411ca3655c80da0f6025ab20634b2a6ff696b Mon Sep 17 00:00:00 2001
-From: Matthew Fernandez <matthew.fernandez@gmail.com>
-Date: Sat, 25 Jul 2020 19:31:01 -0700
-Subject: [PATCH] fix: out-of-bounds write on invalid label
-
-When the label for a node cannot be parsed (due to it being malformed), it falls
-back on the symbol name of the node itself. I.e. the default label the node
-would have had if it had no label attribute at all. However, this is applied by
-dynamically altering the node's label to "\N", a shortcut for the symbol name of
-the node. All of this is fine, however if the hand written label itself is
-shorter than the literal string "\N", not enough memory would have been
-allocated to write "\N" into the label text.
-
-Here we account for the possibility of error during label parsing, and assume
-that the label text may need to be overwritten with "\N" after the fact. Fixes
-issue #1700.
----
- lib/common/shapes.c | 5 +++--
- 1 file changed, 3 insertions(+), 2 deletions(-)
-
-diff --git a/lib/common/shapes.c b/lib/common/shapes.c
-index 0a0635fc3..9dca9ba6e 100644
---- a/lib/common/shapes.c
-+++ b/lib/common/shapes.c
-@@ -3546,9 +3546,10 @@ static void record_init(node_t * n)
-     reclblp = ND_label(n)->text;
-     len = strlen(reclblp);
-     /* For some forgotten reason, an empty label is parsed into a space, so
--     * we need at least two bytes in textbuf.
-+     * we need at least two bytes in textbuf, as well as accounting for the
-+     * error path involving "\\N" below.
-      */
--    len = MAX(len, 1);
-+    len = MAX(MAX(len, 1), (int)strlen("\\N"));
-     textbuf = N_NEW(len + 1, char);
-     if (!(info = parse_reclbl(n, flip, TRUE, textbuf))) {
- 	agerr(AGERR, "bad label format %s\n", ND_label(n)->text);
--- 
-2.31.1
-
diff --git a/gnu/packages/patches/grfcodec-gcc-compat.patch b/gnu/packages/patches/grfcodec-gcc-compat.patch
new file mode 100644
index 0000000000..02685d46fd
--- /dev/null
+++ b/gnu/packages/patches/grfcodec-gcc-compat.patch
@@ -0,0 +1,31 @@
+Fix type comparison issue that is a hard error in GCC 10.
+
+Taken from upstream:
+
+  https://github.com/OpenTTD/grfcodec/commit/bb692b2c723c5e87cc8f89f445928e97594d5b8f
+
+diff --git a/src/command.cpp b/src/command.cpp
+index 9aa0e14..1f32cf1 100644
+--- a/src/command.cpp
++++ b/src/command.cpp
+@@ -300,8 +300,9 @@ bool parse_comment(const string&line){
+ 		break;
+ 	case BEAUTIFY:{
+ 		commandstream>>command_part;
+-		uint val=find_command(command_part,beaut),togglebit;
+-		if(val!=(uint)-1&&val!=OFF)_commandState.beautifier=true;
++		int val=find_command(command_part,beaut);
++		uint togglebit;
++		if(val!=-1&&val!=OFF)_commandState.beautifier=true;
+ 		switch(val){
+ 		case -1:
+ 			IssueMessage(0,COMMAND_INVALID_ARG,gen[BEAUTIFY].name);
+@@ -372,7 +373,7 @@ bool parse_comment(const string&line){
+ dotoggle:
+ 			commandstream>>command_part;
+ 			val=find_command(command_part,beaut);
+-			if(!commandstream||val==(uint)-1){
++			if(!commandstream||val==-1){
+ 				IssueMessage(0,COMMAND_INVALID_ARG,gen[BEAUTIFY].name);
+ 				return true;
+ 			}
diff --git a/gnu/packages/patches/gtk-doc-respect-xml-catalog.patch b/gnu/packages/patches/gtk-doc-respect-xml-catalog.patch
new file mode 100644
index 0000000000..710f208285
--- /dev/null
+++ b/gnu/packages/patches/gtk-doc-respect-xml-catalog.patch
@@ -0,0 +1,16 @@
+Taken from here:
+https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/tools/documentation/gtk-doc/respect-xml-catalog-files-var.patch.
+
+--- a/m4/gtkdoc_jh_check_xml_catalog.m4
++++ b/m4/gtkdoc_jh_check_xml_catalog.m4
+@@ -5,8 +5,8 @@
+ [
+ 	AC_REQUIRE([JH_PATH_XML_CATALOG],[JH_PATH_XML_CATALOG(,[:])])dnl
+ 	AC_MSG_CHECKING([for ifelse([$2],,[$1],[$2]) in XML catalog])
+-	if $jh_found_xmlcatalog && \
+-		AC_RUN_LOG([$XMLCATALOG --noout "$XML_CATALOG_FILE" "$1" >&2]); then
++	# empty argument forces libxml to use XML_CATALOG_FILES variable
++	if AC_RUN_LOG([$XMLCATALOG --noout "" "$1" >&2]); then
+ 		AC_MSG_RESULT([found])
+ 		ifelse([$3],,,[$3])
+ 	else
diff --git a/gnu/packages/patches/gtk-introspection-test.patch b/gnu/packages/patches/gtk-introspection-test.patch
new file mode 100644
index 0000000000..570ea806a9
--- /dev/null
+++ b/gnu/packages/patches/gtk-introspection-test.patch
@@ -0,0 +1,22 @@
+# Extend rather than stomp environment variables.
+# Upstream status: https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/4268
+diff --git a/testsuite/introspection/meson.build b/testsuite/introspection/meson.build
+index 6202fb7446..b59191eb0f 100644
+--- a/testsuite/introspection/meson.build
++++ b/testsuite/introspection/meson.build
+@@ -1,9 +1,10 @@
++env = environment()
++env.prepend('GI_TYPELIB_PATH',
++    join_paths(project_build_root, 'gtk'),
++    gi_dep.get_pkgconfig_variable('typelibdir'))
++env.prepend('LD_PRELOAD', join_paths(project_build_root, 'gtk', 'libgtk-4.so'))
+ 
+ test('api',
+      find_program('api.py', dirs: meson.current_source_dir()),
+      suite: ['introspection'],
+-     env: [
+-       'GI_TYPELIB_PATH=@0@/gtk:@1@'.format(project_build_root,
+-          gi_dep.get_pkgconfig_variable('typelibdir')),
+-       'LD_PRELOAD=@0@/gtk/libgtk-4.so'.format(project_build_root),
+-     ])
++     env: env)
diff --git a/gnu/packages/patches/gtk2-fix-builder-test.patch b/gnu/packages/patches/gtk2-fix-builder-test.patch
new file mode 100644
index 0000000000..8c41e596fe
--- /dev/null
+++ b/gnu/packages/patches/gtk2-fix-builder-test.patch
@@ -0,0 +1,94 @@
+From e45e11238036e06c8fe78bea1691b256ca41837b Mon Sep 17 00:00:00 2001
+From: Steve Langasek <steve.langasek@ubuntu.com>
+Date: Tue, 7 Jan 2014 13:55:28 +0100
+Subject: [PATCH] fix prototypes of signal callbacks in the test suite
+
+The signal callbacks are defined to take pointers as their arguments, but the
+callbacks found in testsuite/gtk/builder.c are passing a GParamSpec by value
+as the second argument.  This confuses and angers the compiler on ppc64el,
+resulting in segfaults after return from the function due to stack-smashing
+by the (completely-unused) argument.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=721700
+---
+
+This is a backport to v2.24.33 of upstream commit:
+
+https://gitlab.gnome.org/GNOME/gtk/-/commit/256561db2f0b34e01047f8882b3e0cb8c6d9dbab
+
+ gtk/tests/builder.c | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/gtk/tests/builder.c b/gtk/tests/builder.c
+index 8529dacc2f6e..23d5096062fa 100644
+--- a/gtk/tests/builder.c
++++ b/gtk/tests/builder.c
+@@ -132,7 +132,7 @@ static int object = 0;
+ static int object_after = 0;
+ 
+ void /* exported for GtkBuilder */
+-signal_normal (GtkWindow *window, GParamSpec spec)
++signal_normal (GtkWindow *window, GParamSpec *spec)
+ {
+   g_assert (GTK_IS_WINDOW (window));
+   g_assert (normal == 0);
+@@ -142,7 +142,7 @@ signal_normal (GtkWindow *window, GParamSpec spec)
+ }
+ 
+ void /* exported for GtkBuilder */
+-signal_after (GtkWindow *window, GParamSpec spec)
++signal_after (GtkWindow *window, GParamSpec *spec)
+ {
+   g_assert (GTK_IS_WINDOW (window));
+   g_assert (normal == 1);
+@@ -152,7 +152,7 @@ signal_after (GtkWindow *window, GParamSpec spec)
+ }
+ 
+ void /* exported for GtkBuilder */
+-signal_object (GtkButton *button, GParamSpec spec)
++signal_object (GtkButton *button, GParamSpec *spec)
+ {
+   g_assert (GTK_IS_BUTTON (button));
+   g_assert (object == 0);
+@@ -162,7 +162,7 @@ signal_object (GtkButton *button, GParamSpec spec)
+ }
+ 
+ void /* exported for GtkBuilder */
+-signal_object_after (GtkButton *button, GParamSpec spec)
++signal_object_after (GtkButton *button, GParamSpec *spec)
+ {
+   g_assert (GTK_IS_BUTTON (button));
+   g_assert (object == 1);
+@@ -172,28 +172,28 @@ signal_object_after (GtkButton *button, GParamSpec spec)
+ }
+ 
+ void /* exported for GtkBuilder */
+-signal_first (GtkButton *button, GParamSpec spec)
++signal_first (GtkButton *button, GParamSpec *spec)
+ {
+   g_assert (normal == 0);
+   normal = 10;
+ }
+ 
+ void /* exported for GtkBuilder */
+-signal_second (GtkButton *button, GParamSpec spec)
++signal_second (GtkButton *button, GParamSpec *spec)
+ {
+   g_assert (normal == 10);
+   normal = 20;
+ }
+ 
+ void /* exported for GtkBuilder */
+-signal_extra (GtkButton *button, GParamSpec spec)
++signal_extra (GtkButton *button, GParamSpec *spec)
+ {
+   g_assert (normal == 20);
+   normal = 30;
+ }
+ 
+ void /* exported for GtkBuilder */
+-signal_extra2 (GtkButton *button, GParamSpec spec)
++signal_extra2 (GtkButton *button, GParamSpec *spec)
+ {
+   g_assert (normal == 30);
+   normal = 40;
diff --git a/gnu/packages/patches/gtk4-respect-GUIX_GTK4_PATH.patch b/gnu/packages/patches/gtk4-respect-GUIX_GTK4_PATH.patch
new file mode 100644
index 0000000000..4a60023bf7
--- /dev/null
+++ b/gnu/packages/patches/gtk4-respect-GUIX_GTK4_PATH.patch
@@ -0,0 +1,51 @@
+From 889294a93fc6464c2c2919bc47f6fd85ec823363 Mon Sep 17 00:00:00 2001
+From: Raghav Gururajan <rg@raghavgururajan.name>
+Date: Tue, 18 May 2021 19:57:00 -0400
+Subject: [PATCH] [PATCH]: Honor GUIX_GTK4_PATH.
+
+This patch makes GTK look for additional modules in a list of directories
+specified by the environment variable "GUIX_GTK4_PATH". This can be used
+instead of "GTK_PATH" to make GTK find modules that are incompatible with
+other major versions of GTK.
+---
+ gtk/gtkmodules.c | 10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+diff --git a/gtk/gtkmodules.c b/gtk/gtkmodules.c
+index aace5dcbc9..193b6a02e9 100644
+--- a/gtk/gtkmodules.c
++++ b/gtk/gtkmodules.c
+@@ -105,6 +105,7 @@ static char **
+ get_module_path (void)
+ {
+   const char *module_path_env;
++  const gchar *module_guix_gtk4_path_env;
+   const char *exe_prefix;
+   char *module_path;
+   char *default_dir;
+@@ -114,6 +115,7 @@ get_module_path (void)
+     return result;
+ 
+   module_path_env = g_getenv ("GTK_PATH");
++  module_guix_gtk4_path_env = g_getenv ("GUIX_GTK4_PATH");
+   exe_prefix = g_getenv ("GTK_EXE_PREFIX");
+ 
+   if (exe_prefix)
+@@ -121,7 +123,13 @@ get_module_path (void)
+   else
+     default_dir = g_build_filename (_gtk_get_libdir (), "gtk-4.0", NULL);
+ 
+-  if (module_path_env)
++  if (module_guix_gtk4_path_env && module_path_env)
++    module_path = g_build_path (G_SEARCHPATH_SEPARATOR_S,
++				module_guix_gtk4_path_env, module_path_env, default_dir, NULL);
++  else if (module_guix_gtk4_path_env)
++    module_path = g_build_path (G_SEARCHPATH_SEPARATOR_S,
++				module_guix_gtk4_path_env, default_dir, NULL);
++  else if (module_path_env)
+     module_path = g_build_path (G_SEARCHPATH_SEPARATOR_S,
+ 				module_path_env, default_dir, NULL);
+   else
+-- 
+2.31.1
+
diff --git a/gnu/packages/patches/guile-email-fix-tests.patch b/gnu/packages/patches/guile-email-fix-tests.patch
new file mode 100644
index 0000000000..8621aaea02
--- /dev/null
+++ b/gnu/packages/patches/guile-email-fix-tests.patch
@@ -0,0 +1,35 @@
+This patch has been proposed upstream:
+https://lists.systemreboot.net/guile-email/87mtnv1r2p.fsf@gnu.org/T/#u.
+
+From c21fe0f0e28b80b606973d3e372e2bc8528c9766 Mon Sep 17 00:00:00 2001
+From: Mathieu Othacehe <othacehe@gnu.org>
+Date: Wed, 29 Sep 2021 12:47:35 +0000
+Subject: [PATCH 1/1] email: Do not use an empty bytevector to test the
+ charset.
+
+Using an empty bytevector no longer throws an exception since this Guile
+commit: 5ea8c69e9153a970952bf6f0b32c4fad6a28e839.
+
+* email/email.scm (post-process-content-transfer-encoding): Use a bytevector
+containg the 'e' character to test the charset validity.
+---
+ email/email.scm | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/email/email.scm b/email/email.scm
+index 3f4e194..ac70463 100644
+--- a/email/email.scm
++++ b/email/email.scm
+@@ -832,7 +832,8 @@ values. The returned headers is a string and body is a bytevector."
+   (define (valid-charset? charset)
+     (catch #t
+       (lambda ()
+-        (bytevector->string (make-bytevector 0 0) charset)
++        ;; Try to convert a bytevector containg the 'e' character.
++        (bytevector->string (make-bytevector 1 48) charset)
+         #t)
+       (const #f)))
+ 
+-- 
+2.33.0
+
diff --git a/gnu/packages/patches/guile-git-adjust-for-libgit2-1.2.0.patch b/gnu/packages/patches/guile-git-adjust-for-libgit2-1.2.0.patch
new file mode 100644
index 0000000000..436a11ad19
--- /dev/null
+++ b/gnu/packages/patches/guile-git-adjust-for-libgit2-1.2.0.patch
@@ -0,0 +1,78 @@
+diff --git a/configure.ac b/configure.ac
+index 107e6ca..20e9019 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -2,6 +2,7 @@ dnl Guile-Git --- GNU Guile bindings of libgit2
+ dnl Copyright © 2016-2018 Erik Edrosa <erik.edrosa@gmail.com>
+ dnl Copyright © 2017, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
+ dnl Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
++dnl Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+ dnl
+ dnl This file is part of Guile-Git.
+ dnl
+@@ -43,15 +44,20 @@ AS_IF([test "x$LIBGIT2_LIBDIR" = "x"], [
+ ])
+ AC_SUBST([LIBGIT2_LIBDIR])
+ 
++dnl Does the 'git_remote_callbacks' struct have a 'remote_ready' field?
++dnl It was added in 1.2.0, obsoleting 'resolve_url'.
++AC_CHECK_MEMBER([git_remote_callbacks.remote_ready],
++  [HAVE_REMOTE_CALLBACKS_REMOTE_READY="#true"],
++  [HAVE_REMOTE_CALLBACKS_REMOTE_READY="#false"],
++  [[#include <git2.h>]])
++AC_SUBST([HAVE_REMOTE_CALLBACKS_REMOTE_READY])
++
+ dnl Does the 'git_remote_callbacks' struct have a 'resolve_url' field?
+ dnl It's missing in libgit2 0.28.5, added in 1.0.
+-AC_CHECK_MEMBER([git_remote_callbacks.resolve_url], [], [],
++AC_CHECK_MEMBER([git_remote_callbacks.resolve_url],
++  [HAVE_REMOTE_CALLBACKS_RESOLVE_URL="#true"],
++  [HAVE_REMOTE_CALLBACKS_RESOLVE_URL="#false"],
+   [[#include <git2.h>]])
+-if test "x$ac_cv_member_git_remote_callbacks_resolve_url" = "xyes"; then
+-  HAVE_REMOTE_CALLBACKS_RESOLVE_URL="#true"
+-else
+-  HAVE_REMOTE_CALLBACKS_RESOLVE_URL="#false"
+-fi
+ AC_SUBST([HAVE_REMOTE_CALLBACKS_RESOLVE_URL])
+ 
+ dnl Those binaries are required for ssh authentication tests.
+diff --git a/git/configuration.scm.in b/git/configuration.scm.in
+index c45f698..64c4360 100644
+--- a/git/configuration.scm.in
++++ b/git/configuration.scm.in
+@@ -19,11 +19,17 @@
+ 
+ (define-module (git configuration)
+   #:export (%libgit2
++            %have-remote-callbacks-remote-ready?
+             %have-remote-callbacks-resolve-url?))
+ 
+ (define %libgit2
+   "@LIBGIT2_LIBDIR@/libgit2")
+ 
++(define %have-remote-callbacks-remote-ready?
++  ;; True if the 'git_remote_callbacks' struct has a
++  ;; 'remote_ready' field.
++  @HAVE_REMOTE_CALLBACKS_REMOTE_READY@)
++
+ (define %have-remote-callbacks-resolve-url?
+   ;; True if the 'git_remote_callbacks' struct has a 'resolve_url' field.
+   @HAVE_REMOTE_CALLBACKS_RESOLVE_URL@)
+diff --git a/git/structs.scm b/git/structs.scm
+index ca51728..be3d050 100644
+--- a/git/structs.scm
++++ b/git/structs.scm
+@@ -637,6 +637,12 @@ type to 'specified for this to take effect."
+                (push-update-reference ,(bs:pointer uint8))
+                (push-negotiation ,(bs:pointer uint8))
+                (transport ,(bs:pointer uint8))
++
++               ;; Added in libgit2 1.2.0.
++               ,@(if %have-remote-callbacks-remote-ready?
++                     `((remote-ready ,(bs:pointer uint8)))
++                     '())
++
+                (payload ,(bs:pointer uint8))
+ 
+                ;; libgit2 1.0 added this field, which is missing from 0.28.5,
diff --git a/gnu/packages/patches/guile-ssh-fix-test-suite.patch b/gnu/packages/patches/guile-ssh-fix-test-suite.patch
new file mode 100644
index 0000000000..dc10e08b0f
--- /dev/null
+++ b/gnu/packages/patches/guile-ssh-fix-test-suite.patch
@@ -0,0 +1,217 @@
+From f7942cded8b65341916a555186e2219efe174cd0 Mon Sep 17 00:00:00 2001
+From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
+Date: Thu, 4 Feb 2021 14:38:25 -0500
+Subject: [PATCH] tests: Fix test suite for Guile 3.0.5.
+
+The test-runner object is now reset to #f when calling the 'test-end'
+procedure.  See the commit de5d1a7f99b8e952b115237ebc29633062f99bb9 in
+Guile (srfi-64: Reset test-runner-current if done) which introduced this
+change.
+
+* tests/client-server.scm (exit-status): New variable.  Use it when calling
+exit.
+* tests/dist.scm: Likewise.
+* tests/key.scm: Likewise.
+* tests/log.scm: Likewise.
+* tests/popen.scm: Likewise.
+* tests/server-client.scm: Likewise.
+* tests/server.scm: Likewise.
+* tests/session.scm: Likewise.
+* tests/shell.scm: Likewise.
+* tests/sssh-ssshd.scm: Likewise.
+* tests/tunnel.scm: Likewise.
+---
+ tests/client-server.scm | 4 +++-
+ tests/dist.scm          | 4 +++-
+ tests/key.scm           | 3 ++-
+ tests/log.scm           | 5 ++++-
+ tests/popen.scm         | 4 +++-
+ tests/server-client.scm | 4 +++-
+ tests/server.scm        | 4 +++-
+ tests/session.scm       | 4 +++-
+ tests/shell.scm         | 3 ++-
+ tests/sssh-ssshd.scm    | 4 +++-
+ tests/tunnel.scm        | 4 +++-
+ 11 files changed, 32 insertions(+), 11 deletions(-)
+
+diff --git a/tests/client-server.scm b/tests/client-server.scm
+index 432a48c..fc46140 100644
+--- a/tests/client-server.scm
++++ b/tests/client-server.scm
+@@ -743,8 +743,10 @@
+ 
+ ;;;
+ 
++(define exit-status (test-runner-fail-count (test-runner-current)))
++
+ (test-end "client-server")
+ 
+-(exit (= (test-runner-fail-count (test-runner-current)) 0))
++(exit (= 0 exit-status))
+ 
+ ;;; client-server.scm ends here.
+diff --git a/tests/dist.scm b/tests/dist.scm
+index 2a3a75f..79f9e23 100644
+--- a/tests/dist.scm
++++ b/tests/dist.scm
+@@ -269,8 +269,10 @@ $4 = #<session #<undefined>@#<undefined>:22 (disconnected) 453fff>"
+ ;;;
+ 
+ 
++(define exit-status (test-runner-fail-count (test-runner-current)))
++
+ (test-end "dist")
+ 
+-(exit (= (test-runner-fail-count (test-runner-current)) 0))
++(exit (= 0 exit-status))
+ 
+ ;;; dist.scm ends here.
+diff --git a/tests/key.scm b/tests/key.scm
+index be31378..e1678f4 100644
+--- a/tests/key.scm
++++ b/tests/key.scm
+@@ -170,9 +170,10 @@
+                    (eq? (get-key-type key) 'ecdsa-p256)))))))
+ 
+ ;;;
++(define exit-status (test-runner-fail-count (test-runner-current)))
+ 
+ (test-end "key")
+ 
+-(exit (= (test-runner-fail-count (test-runner-current)) 0))
++(exit (= 0 exit-status))
+ 
+ ;;; key.scm ends here.
+diff --git a/tests/log.scm b/tests/log.scm
+index f547202..d528251 100644
+--- a/tests/log.scm
++++ b/tests/log.scm
+@@ -64,8 +64,11 @@
+   (get-log-verbosity))
+ 
+ 
++(define exit-status (test-runner-fail-count (test-runner-current)))
++
+ (test-end "log")
+ 
+-(exit (= (test-runner-fail-count (test-runner-current)) 0))
++(exit (= 0 exit-status))
++
+ 
+ ;;; log.scm ends here
+diff --git a/tests/popen.scm b/tests/popen.scm
+index e063e0b..fe77108 100644
+--- a/tests/popen.scm
++++ b/tests/popen.scm
+@@ -129,8 +129,10 @@
+           (format-log/scm 'nolog "open-remote-output-pipe"  "channel: ~A" channel)
+           (output-only? channel)))))))
+ 
++(define exit-status (test-runner-fail-count (test-runner-current)))
++
+ (test-end "popen")
+ 
+-(exit (= (test-runner-fail-count (test-runner-current)) 0))
++(exit (= 0 exit-status))
+ 
+ ;;; popen.scm ends here.
+diff --git a/tests/server-client.scm b/tests/server-client.scm
+index 920aa22..b6ed3eb 100644
+--- a/tests/server-client.scm
++++ b/tests/server-client.scm
+@@ -148,8 +148,10 @@
+          (equal? x session))))))
+ 
+ 
++(define exit-status (test-runner-fail-count (test-runner-current)))
++
+ (test-end "server-client")
+ 
+-(exit (= (test-runner-fail-count (test-runner-current)) 0))
++(exit (= 0 exit-status))
+ 
+ ;;; server-client.scm ends here.
+diff --git a/tests/server.scm b/tests/server.scm
+index c7f8b6c..1a6daea 100644
+--- a/tests/server.scm
++++ b/tests/server.scm
+@@ -157,9 +157,11 @@
+     (server-listen server)
+     #t))
+ 
++(define exit-status (test-runner-fail-count (test-runner-current)))
++
+ (test-end "server")
+ 
+-(exit (= (test-runner-fail-count (test-runner-current)) 0))
++(exit (= 0 exit-status))
+ 
+ ;;; server.scm ends here.
+ 
+diff --git a/tests/session.scm b/tests/session.scm
+index 8caa039..7310647 100644
+--- a/tests/session.scm
++++ b/tests/session.scm
+@@ -210,8 +210,10 @@
+   (let ((session (%make-session)))
+     (not (connected? session))))
+ 
++(define exit-status (test-runner-fail-count (test-runner-current)))
++
+ (test-end "session")
+ 
+-(exit (= (test-runner-fail-count (test-runner-current)) 0))
++(exit (= 0 exit-status))
+ 
+ ;;; session.scm ends here.
+diff --git a/tests/shell.scm b/tests/shell.scm
+index 7d613fb..e36e661 100644
+--- a/tests/shell.scm
++++ b/tests/shell.scm
+@@ -113,9 +113,10 @@
+ 
+ 
+ ;;;
++(define exit-status (test-runner-fail-count (test-runner-current)))
+ 
+ (test-end "shell")
+ 
+-(exit (= (test-runner-fail-count (test-runner-current)) 0))
++(exit (= 0 exit-status))
+ 
+ ;;; shell.scm ends here.
+diff --git a/tests/sssh-ssshd.scm b/tests/sssh-ssshd.scm
+index 2fe23db..edb53fc 100644
+--- a/tests/sssh-ssshd.scm
++++ b/tests/sssh-ssshd.scm
+@@ -118,8 +118,10 @@
+       result)))
+ 
+ 
++(define exit-status (test-runner-fail-count (test-runner-current)))
++
+ (test-end "sssh-ssshd")
+ 
+-(exit (= (test-runner-fail-count (test-runner-current)) 0))
++(exit (= 0 exit-status))
+ 
+ ;;; sssh-ssshd.scm ends here.
+diff --git a/tests/tunnel.scm b/tests/tunnel.scm
+index ef5a568..d6453b7 100644
+--- a/tests/tunnel.scm
++++ b/tests/tunnel.scm
+@@ -191,8 +191,10 @@
+                   (= pnum portnum)))
+            (eq? (channel-cancel-forward session "localhost" portnum) 'ok))))))))
+ 
++(define exit-status (test-runner-fail-count (test-runner-current)))
++
+ (test-end "tunnel")
+ 
+-(exit (= (test-runner-fail-count (test-runner-current)) 0))
++(exit (= 0 exit-status))
+ 
+ ;;; tunnel.scm ends here.
+-- 
+2.30.0
+
diff --git a/gnu/packages/patches/guile-ssh-read-error.patch b/gnu/packages/patches/guile-ssh-read-error.patch
new file mode 100644
index 0000000000..9cc6b048a0
--- /dev/null
+++ b/gnu/packages/patches/guile-ssh-read-error.patch
@@ -0,0 +1,18 @@
+This patch adjusts to slightly different 'read-error' in Guile 3.0.6
+compared to earlier versions:
+
+  https://github.com/artyom-poptsov/guile-ssh/issues/28
+
+--- a/tests/dist.scm
++++ b/tests/dist.scm
+@@ -183,8 +183,8 @@ Unbound variable: e"
+    rrepl-get-result))
+ 
+ (test-error-with-log/= "rrepl-get-result, unknown # object error"
+-  'node-repl-error "Reader error: scm_lreadr: #<unknown port>:1:3: \
+-Unknown # object: (#\\<): scheme@(guile-user)> \
++  'node-repl-error "Reader error: #f: #<unknown port>:1:3: \
++Unknown # object: (\"#<\"): scheme@(guile-user)> \
+ $4 = #<session #<undefined>@#<undefined>:22 (disconnected) 453fff>"
+   (call-with-input-string
+    (string-append  "scheme@(guile-user)> $4 = "
diff --git a/gnu/packages/patches/gvfs-add-support-for-libplist-2.2.patch b/gnu/packages/patches/gvfs-add-support-for-libplist-2.2.patch
deleted file mode 100644
index 250eef2c8b..0000000000
--- a/gnu/packages/patches/gvfs-add-support-for-libplist-2.2.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-Source: https://gitlab.gnome.org/GNOME/gvfs/-/commit/13551f3f40d41f1357126ac5a26d0fa012cd8123
-
-Note: This change should be incorporated into stable version 1.46.x of gvfs.
-
-From 13551f3f40d41f1357126ac5a26d0fa012cd8123 Mon Sep 17 00:00:00 2001
-From: Bastien Nocera <hadess@hadess.net>
-Date: Tue, 16 Jun 2020 13:28:35 +0200
-Subject: [PATCH] afc: Add support for libplist-2.2
-
-Which changed name from libplist to libplist-2.0 to embed its API
-version number in the library name.
----
- meson.build | 5 ++++-
- 1 file changed, 4 insertions(+), 1 deletion(-)
-
-diff --git a/meson.build b/meson.build
-index 1750f65ca..187bfd55f 100644
---- a/meson.build
-+++ b/meson.build
-@@ -357,7 +357,10 @@ config_h.set('HAVE_LOGIND', enable_logind)
- enable_afc = get_option('afc')
- if enable_afc
-   libimobiledevice_dep = dependency('libimobiledevice-1.0', version: '>= 1.2')
--  libplist_dep = dependency('libplist', version: '>= 0.15')
-+  libplist_dep = dependency('libplist-2.0', required: false)
-+  if not libplist_dep.found()
-+    libplist_dep = dependency('libplist', version: '>= 0.15')
-+  endif
- endif
- 
- # *** Check if we should build with GOA volume monitor ***
--- 
-GitLab
-
diff --git a/gnu/packages/patches/hedgewars-network-bsd.patch b/gnu/packages/patches/hedgewars-network-bsd.patch
new file mode 100644
index 0000000000..311ce8bf09
--- /dev/null
+++ b/gnu/packages/patches/hedgewars-network-bsd.patch
@@ -0,0 +1,150 @@
+From f813f3d5b63bb5be1b5e0b44930e77656c547aad Mon Sep 17 00:00:00 2001
+From: Jens Petersen <none@none>
+Date: Wed, 8 Jul 2020 17:02:45 +0300
+Subject: [PATCH] update server network
+
+---
+ gameServer/Actions.hs                | 2 +-
+ gameServer/CMakeLists.txt            | 3 ++-
+ gameServer/ClientIO.hs               | 4 ++--
+ gameServer/CoreTypes.hs              | 2 +-
+ gameServer/OfficialServer/checker.hs | 5 ++---
+ gameServer/Utils.hs                  | 6 +-----
+ gameServer/hedgewars-server.cabal    | 3 ++-
+ gameServer/hedgewars-server.hs       | 5 +++--
+ 8 files changed, 14 insertions(+), 16 deletions(-)
+
+diff --git a/gameServer/Actions.hs b/gameServer/Actions.hs
+index 125d6ea832..c42d17b9a9 100644
+--- a/gameServer/Actions.hs
++++ b/gameServer/Actions.hs
+@@ -709,7 +709,7 @@ processAction RestartServer = do
+         args <- gets (runArgs . serverInfo)
+         io $ do
+             noticeM "Core" "Closing listening socket"
+-            sClose sock
++            close sock
+             noticeM "Core" "Spawning new server"
+             _ <- createProcess (proc "./hedgewars-server" args)
+             return ()
+diff --git a/gameServer/CMakeLists.txt b/gameServer/CMakeLists.txt
+index 5f2c882563..e71650c70c 100644
+--- a/gameServer/CMakeLists.txt
++++ b/gameServer/CMakeLists.txt
+@@ -9,7 +9,8 @@ check_haskell_package_exists(base "Control.Exception" mask 1)
+ check_haskell_package_exists(containers "Data.Map" size 1)
+ check_haskell_package_exists(vector "Data.Vector" length 1)
+ check_haskell_package_exists(bytestring "Data.ByteString" pack 1)
+-check_haskell_package_exists(network "Network.BSD" getHostName 0)
++check_haskell_package_exists(network "Network.Socket" defaultHints 0)
++check_haskell_package_exists(network-bsd "Network.BSD" getHostName 0)
+ check_haskell_package_exists(time "Data.Time" getCurrentTime 0)
+ check_haskell_package_exists(mtl "Control.Monad.State" fix 1)
+ check_haskell_package_exists(sandi "Codec.Binary.Base64" encode 1)
+diff --git a/gameServer/ClientIO.hs b/gameServer/ClientIO.hs
+index 46dd40ed9f..0c97bde932 100644
+--- a/gameServer/ClientIO.hs
++++ b/gameServer/ClientIO.hs
+@@ -23,7 +23,7 @@ import qualified Control.Exception as Exception
+ import Control.Monad.State
+ import Control.Concurrent.Chan
+ import Control.Concurrent
+-import Network
++import Network.Socket hiding (recv)
+ import Network.Socket.ByteString
+ import qualified Data.ByteString.Char8 as B
+ ----------------
+@@ -90,7 +90,7 @@ clientSendLoop s tId chan ci = do
+             sendAll s $ B.unlines answer `B.snoc` '\n'
+ 
+     if isQuit answer then
+-        sClose s
++        close s
+         else
+         clientSendLoop s tId chan ci
+ 
+diff --git a/gameServer/CoreTypes.hs b/gameServer/CoreTypes.hs
+index f547df483a..72f35807e3 100644
+--- a/gameServer/CoreTypes.hs
++++ b/gameServer/CoreTypes.hs
+@@ -23,7 +23,7 @@ import Control.Concurrent
+ import Data.Word
+ import qualified Data.Map as Map
+ import Data.Time
+-import Network
++import Network.Socket
+ import Data.Function
+ import Data.ByteString.Char8 as B
+ import Data.Unique
+diff --git a/gameServer/OfficialServer/checker.hs b/gameServer/OfficialServer/checker.hs
+index 37df3208b9..b4ecb8fc57 100644
+--- a/gameServer/OfficialServer/checker.hs
++++ b/gameServer/OfficialServer/checker.hs
+@@ -28,8 +28,7 @@ import System.Directory
+ import Control.Monad.State
+ import Control.Concurrent.Chan
+ import Control.Concurrent
+-import Network
+-import Network.BSD
++import Network.BSD hiding (recv)
+ import Network.Socket hiding (recv, sClose)
+ import Network.Socket.ByteString
+ import qualified Data.ByteString.Char8 as B
+@@ -207,7 +206,7 @@ main = withSocketsDo . forever $ do
+ 
+     Exception.bracket
+         setupConnection
+-        (\s -> noticeM "Core" "Shutting down" >> sClose s)
++        (\s -> noticeM "Core" "Shutting down" >> close s)
+         (session login password (d ++ "/.hedgewars") exeFullname dataPrefix)
+     where
+         setupConnection = do
+diff --git a/gameServer/Utils.hs b/gameServer/Utils.hs
+index 3d81b7f7c6..9fd80c01ba 100644
+--- a/gameServer/Utils.hs
++++ b/gameServer/Utils.hs
+@@ -41,11 +41,7 @@ import CoreTypes
+ 
+ 
+ sockAddr2String :: SockAddr -> IO B.ByteString
+-sockAddr2String (SockAddrInet _ hostAddr) = liftM B.pack $ inet_ntoa hostAddr
+-sockAddr2String (SockAddrInet6 _ _ (a, b, c, d) _) =
+-    return $ B.pack $ (foldr1 (.)
+-        $ List.intersperse (':':)
+-        $ concatMap (\n -> (\(a0, a1) -> [showHex a0, showHex a1]) $ divMod n 65536) [a, b, c, d]) []
++sockAddr2String = liftM (B.pack . fromJust . fst) . getNameInfo [] True False
+ 
+ maybeRead :: Read a => String -> Maybe a
+ maybeRead s = case reads s of
+diff --git a/gameServer/hedgewars-server.cabal b/gameServer/hedgewars-server.cabal
+index 3c7f2418c9..9f764fd997 100644
+--- a/gameServer/hedgewars-server.cabal
++++ b/gameServer/hedgewars-server.cabal
+@@ -57,7 +57,8 @@ Executable checker
+     containers,
+     vector,
+     bytestring,
+-    network >= 2.3 && < 3.0,
++    network >= 2.3,
++    network-bsd,
+     mtl >= 2,
+     sandi,
+     hslogger,
+diff --git a/gameServer/hedgewars-server.hs b/gameServer/hedgewars-server.hs
+index e47ae2891d..7e6ab8fa38 100644
+--- a/gameServer/hedgewars-server.hs
++++ b/gameServer/hedgewars-server.hs
+@@ -50,10 +50,11 @@ server si = do
+     proto <- getProtocolNumber "tcp"
+     E.bracket
+         (socket AF_INET Stream proto)
+-        sClose
++        close
+         (\sock -> do
+             setSocketOption sock ReuseAddr 1
+-            bindSocket sock (SockAddrInet (listenPort si) iNADDR_ANY)
++            iNADDR_ANY <- addrAddress . head <$> getAddrInfo Nothing (Just "0") (Just (show (listenPort si)))
++            bind sock iNADDR_ANY
+             listen sock maxListenQueue
+             startServer si{serverSocket = Just sock}
+         )
diff --git a/gnu/packages/patches/helm-fix-gcc-9-build.patch b/gnu/packages/patches/helm-fix-gcc-9-build.patch
new file mode 100644
index 0000000000..f623fef203
--- /dev/null
+++ b/gnu/packages/patches/helm-fix-gcc-9-build.patch
@@ -0,0 +1,140 @@
+From cb611a80bd5a36d31bfc31212ebbf79aa86c6f08 Mon Sep 17 00:00:00 2001
+From: jikstra <jikstra@disroot.org>
+Date: Tue, 20 Aug 2019 03:00:51 +0200
+Subject: [PATCH] Backport
+ https://github.com/WeAreROLI/JUCE/commit/4e0adb2af8b424c43d22bd431011c9a6c57d36b6
+ to the bundled JUCE framework to make helm compile on gcc 9.1 again
+
+---
+ .../juce_graphics/colour/juce_PixelFormats.h  | 25 +---------
+ .../native/juce_RenderingHelpers.h            | 48 +------------------
+ 2 files changed, 4 insertions(+), 69 deletions(-)
+
+diff --git a/JUCE/modules/juce_graphics/colour/juce_PixelFormats.h b/JUCE/modules/juce_graphics/colour/juce_PixelFormats.h
+index 9be9ba09c..3535eab80 100644
+--- a/JUCE/modules/juce_graphics/colour/juce_PixelFormats.h
++++ b/JUCE/modules/juce_graphics/colour/juce_PixelFormats.h
+@@ -105,23 +105,9 @@ class JUCE_API  PixelARGB
+ 

+     //==============================================================================

+     forcedinline uint8 getAlpha() const noexcept      { return components.a; }

+-    forcedinline uint8 getRed() const noexcept        { return components.r; }

++    forcedinline uint8 getRed()   const noexcept      { return components.r; }

+     forcedinline uint8 getGreen() const noexcept      { return components.g; }

+-    forcedinline uint8 getBlue() const noexcept       { return components.b; }

+-

+-   #if JUCE_GCC

+-    // NB these are here as a workaround because GCC refuses to bind to packed values.

+-    forcedinline uint8& getAlpha() noexcept           { return comps [indexA]; }

+-    forcedinline uint8& getRed() noexcept             { return comps [indexR]; }

+-    forcedinline uint8& getGreen() noexcept           { return comps [indexG]; }

+-    forcedinline uint8& getBlue() noexcept            { return comps [indexB]; }

+-   #else

+-    forcedinline uint8& getAlpha() noexcept           { return components.a; }

+-    forcedinline uint8& getRed() noexcept             { return components.r; }

+-    forcedinline uint8& getGreen() noexcept           { return components.g; }

+-    forcedinline uint8& getBlue() noexcept            { return components.b; }

+-   #endif

+-

++    forcedinline uint8 getBlue()  const noexcept      { return components.b; }

+     //==============================================================================

+     /** Copies another pixel colour over this one.

+ 

+@@ -340,9 +326,6 @@ class JUCE_API  PixelARGB
+     {

+         uint32 internal;

+         Components components;

+-       #if JUCE_GCC

+-        uint8 comps[4];  // helper struct needed because gcc does not allow references to packed union members

+-       #endif

+     };

+ }

+ #ifndef DOXYGEN

+@@ -429,10 +412,6 @@ class JUCE_API  PixelRGB
+     forcedinline uint8 getGreen() const noexcept    { return g; }

+     forcedinline uint8 getBlue() const noexcept     { return b; }

+ 

+-    forcedinline uint8& getRed() noexcept           { return r; }

+-    forcedinline uint8& getGreen() noexcept         { return g; }

+-    forcedinline uint8& getBlue() noexcept          { return b; }

+-

+     //==============================================================================

+     /** Copies another pixel colour over this one.

+ 

+diff --git a/JUCE/modules/juce_graphics/native/juce_RenderingHelpers.h b/JUCE/modules/juce_graphics/native/juce_RenderingHelpers.h
+index 1c4cd31ef..29519cb5a 100644
+--- a/JUCE/modules/juce_graphics/native/juce_RenderingHelpers.h
++++ b/JUCE/modules/juce_graphics/native/juce_RenderingHelpers.h
+@@ -581,18 +581,10 @@ namespace EdgeTableFillers
+             : destData (image), sourceColour (colour)

+         {

+             if (sizeof (PixelType) == 3 && destData.pixelStride == sizeof (PixelType))

+-            {

+                 areRGBComponentsEqual = sourceColour.getRed() == sourceColour.getGreen()

+                                             && sourceColour.getGreen() == sourceColour.getBlue();

+-                filler[0].set (sourceColour);

+-                filler[1].set (sourceColour);

+-                filler[2].set (sourceColour);

+-                filler[3].set (sourceColour);

+-            }

+             else

+-            {

+                 areRGBComponentsEqual = false;

+-            }

+         }

+ 

+         forcedinline void setEdgeTableYPos (const int y) noexcept

+@@ -643,7 +635,6 @@ namespace EdgeTableFillers
+         const Image::BitmapData& destData;

+         PixelType* linePixels;

+         PixelARGB sourceColour;

+-        PixelRGB filler [4];

+         bool areRGBComponentsEqual;

+ 

+         forcedinline PixelType* getPixel (const int x) const noexcept

+@@ -658,43 +649,8 @@ namespace EdgeTableFillers
+ 

+         forcedinline void replaceLine (PixelRGB* dest, const PixelARGB colour, int width) const noexcept

+         {

+-            if (destData.pixelStride == sizeof (*dest))

+-            {

+-                if (areRGBComponentsEqual)  // if all the component values are the same, we can cheat..

+-                {

+-                    memset (dest, colour.getRed(), (size_t) width * 3);

+-                }

+-                else

+-                {

+-                    if (width >> 5)

+-                    {

+-                        const int* const intFiller = reinterpret_cast<const int*> (filler);

+-

+-                        while (width > 8 && (((pointer_sized_int) dest) & 7) != 0)

+-                        {

+-                            dest->set (colour);

+-                            ++dest;

+-                            --width;

+-                        }

+-

+-                        while (width > 4)

+-                        {

+-                            int* d = reinterpret_cast<int*> (dest);

+-                            *d++ = intFiller[0];

+-                            *d++ = intFiller[1];

+-                            *d++ = intFiller[2];

+-                            dest = reinterpret_cast<PixelRGB*> (d);

+-                            width -= 4;

+-                        }

+-                    }

+-

+-                    while (--width >= 0)

+-                    {

+-                        dest->set (colour);

+-                        ++dest;

+-                    }

+-                }

+-            }

++            if ((size_t) destData.pixelStride == sizeof (*dest) && areRGBComponentsEqual)

++                memset ((void*) dest, colour.getRed(), (size_t) width * 3);   // if all the component values are the same, we can cheat..

+             else

+             {

+                 JUCE_PERFORM_PIXEL_OP_LOOP (set (colour))

diff --git a/gnu/packages/patches/hexchat-add-libera-chat.patch b/gnu/packages/patches/hexchat-add-libera-chat.patch
deleted file mode 100644
index 2bbb3137ba..0000000000
--- a/gnu/packages/patches/hexchat-add-libera-chat.patch
+++ /dev/null
@@ -1,76 +0,0 @@
-Add libera.chat to the list of available networks and make it the
-default.
-
-Patches copied from upstream source repository:
-
-https://github.com/hexchat/hexchat/commit/a25f2381689d2c2279a0e43b33f6c0ec8305a096
-https://github.com/hexchat/hexchat/commit/d3545f37cd5f551ed8bc0ab7b20e5c8140adc0a6
-
-From a25f2381689d2c2279a0e43b33f6c0ec8305a096 Mon Sep 17 00:00:00 2001
-From: Panagiotis Vasilopoulos <hello@alwayslivid.com>
-Date: Wed, 19 May 2021 16:25:16 +0300
-Subject: [PATCH] Add Libera Chat to network list
-
----
- src/common/servlist.c | 3 +++
- 1 file changed, 3 insertions(+)
-
-diff --git a/src/common/servlist.c b/src/common/servlist.c
-index e44a3f2df..33bd80f2d 100644
---- a/src/common/servlist.c
-+++ b/src/common/servlist.c
-@@ -239,6 +239,9 @@ static const struct defaultserver def[] =
- 	/* Self signed */
- 	{0,			"irc.librairc.net"},
- 
-+	{"Libera Chat", 0, 0, 0, LOGIN_SASL, 0, TRUE},
-+	{0,			"irc.libera.chat"},
-+
- #ifdef USE_OPENSSL
- 	{"LinkNet",	0},
- 	{0,			"irc.link-net.org/+7000"},
-From d3545f37cd5f551ed8bc0ab7b20e5c8140adc0a6 Mon Sep 17 00:00:00 2001
-From: Patrick Griffis <pgriffis@igalia.com>
-Date: Sun, 23 May 2021 21:15:43 -0500
-Subject: [PATCH] Change default network to Libera.Chat
-
----
- src/common/servlist.c | 4 ++--
- src/fe-gtk/joind.c    | 2 +-
- 2 files changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/src/common/servlist.c b/src/common/servlist.c
-index de75c8b9a..93557f975 100644
---- a/src/common/servlist.c
-+++ b/src/common/servlist.c
-@@ -240,7 +240,7 @@ static const struct defaultserver def[] =
- 	/* Self signed */
- 	{0,			"irc.librairc.net"},
- 
--	{"Libera Chat", 0, 0, 0, LOGIN_SASL, 0, TRUE},
-+	{"Libera.Chat", 0, 0, 0, LOGIN_SASL, 0, TRUE},
- 	{0,			"irc.libera.chat"},
- 
- #ifdef USE_OPENSSL
-@@ -942,7 +942,7 @@ servlist_load_defaults (void)
- {
- 	int i = 0, j = 0;
- 	ircnet *net = NULL;
--	guint def_hash = g_str_hash ("freenode");
-+	guint def_hash = g_str_hash ("Libera.Chat");
- 
- 	while (1)
- 	{
-diff --git a/src/fe-gtk/joind.c b/src/fe-gtk/joind.c
-index f1d3da504..ce3cbcaec 100644
---- a/src/fe-gtk/joind.c
-+++ b/src/fe-gtk/joind.c
-@@ -247,7 +247,7 @@ joind_show_dialog (server *serv)
- 							G_CALLBACK (joind_ok_cb), serv);
- 							
- 	if (serv->network)
--		if (g_ascii_strcasecmp(((ircnet*)serv->network)->name, "freenode") == 0)
-+		if (g_ascii_strcasecmp(((ircnet*)serv->network)->name, "Libera.Chat") == 0)
- 		{
- 			gtk_entry_set_text (GTK_ENTRY (entry1), "#hexchat");
- 		}
diff --git a/gnu/packages/patches/htslib-for-stringtie.patch b/gnu/packages/patches/htslib-for-stringtie.patch
new file mode 100644
index 0000000000..3e6cd5bb63
--- /dev/null
+++ b/gnu/packages/patches/htslib-for-stringtie.patch
@@ -0,0 +1,26 @@
+These changes are commits d7e357946ead219b81cc1becbe0de8a99d96ca84 and
+8ed0daa39bc662defa99507f926815431056543a in
+https://github.com/samtools/htscodecs.  The stringtie package expects these
+changes to have been applied.
+
+diff -ru htslib-1.12/htscodecs/htscodecs/tokenise_name3.c stringtie-2.2.0/htslib/htscodecs/htscodecs/tokenise_name3.c
+--- a/htscodecs/htscodecs/tokenise_name3.c	2021-02-22 13:07:06.000000000 +0100
++++ b/htscodecs/htscodecs/tokenise_name3.c	2021-12-04 19:27:39.000000000 +0100
+@@ -211,7 +211,7 @@
+ 	if (!ctx) return NULL;
+ 	ctx->max_names = max_names;
+ 	pthread_setspecific(tok_key, ctx);
+-    } else if (ctx->max_names < max_names) {
++    } else if (ctx->max_names < max_names+1) {
+ 	ctx = realloc(ctx, sizeof(*ctx) + ++max_names*sizeof(*ctx->lc));
+ 	if (!ctx) return NULL;
+ 	ctx->max_names = max_names;
+@@ -1058,6 +1058,8 @@
+ 	tok = decode_token_type(ctx, ntok);
+ 	//fprintf(stderr, "Tok %d = %d\n", ntok, tok);
+ 
++	ctx->lc[cnum].last_ntok = 0;
++
+ 	switch (tok) {
+ 	case N_CHAR:
+ 	    if (len+1 >= name_len) return -1;
\ No newline at end of file
diff --git a/gnu/packages/patches/hueplusplus-mbedtls.patch b/gnu/packages/patches/hueplusplus-mbedtls.patch
new file mode 100644
index 0000000000..894590af8d
--- /dev/null
+++ b/gnu/packages/patches/hueplusplus-mbedtls.patch
@@ -0,0 +1,20 @@
+Remove references to bundled mbedtls library to use the one from inputs.
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 1e27d21..f0eb1a5 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -85,13 +85,6 @@ endif()
+ 
+ set(USE_STATIC_MBEDTLS_LIBRARY ON)
+ set(USE_SHARED_MBEDTLS_LIBRARY OFF)
+-add_subdirectory("lib/mbedtls" EXCLUDE_FROM_ALL)
+-
+-# Compile the mbedtls library as a static with position independent code,
+-# because we need it for both a shared and static library
+-set_property(TARGET mbedtls PROPERTY POSITION_INDEPENDENT_CODE ON)
+-set_property(TARGET mbedcrypto PROPERTY POSITION_INDEPENDENT_CODE ON)
+-set_property(TARGET mbedx509 PROPERTY POSITION_INDEPENDENT_CODE ON)
+ 
+ add_subdirectory(src)
+ 
diff --git a/gnu/packages/patches/i3status-rust-enable-unstable-features.patch b/gnu/packages/patches/i3status-rust-enable-unstable-features.patch
new file mode 100644
index 0000000000..535b45d865
--- /dev/null
+++ b/gnu/packages/patches/i3status-rust-enable-unstable-features.patch
@@ -0,0 +1,20 @@
+From 3006390c0058f06c255d9850327163aebcdc3b40 Mon Sep 17 00:00:00 2001
+From: Petr Hodina <phodina@protonmail.com>
+Date: Mon, 11 Oct 2021 22:35:39 +0200
+Subject: [PATCH] Enable unstable features.
+
+
+diff --git a/src/main.rs b/src/main.rs
+index d9e964b..820e22e 100644
+--- a/src/main.rs
++++ b/src/main.rs
+@@ -1,3 +1,6 @@
++#![feature(bool_to_option)]
++#![feature(clamp)]
++
+ #[macro_use]
+ mod de;
+ #[macro_use]
+--
+2.33.0
+
diff --git a/gnu/packages/patches/i7z-gcc-10.patch b/gnu/packages/patches/i7z-gcc-10.patch
new file mode 100644
index 0000000000..407e17a995
--- /dev/null
+++ b/gnu/packages/patches/i7z-gcc-10.patch
@@ -0,0 +1,23 @@
+From: Tobias Geerinckx-Rice <me@tobias.gr>
+Date: Sat, 11 Dec 2021 19:22:49 +0100
+Subject: [PATCH] gnu: i7z: Build with GCC 10.
+
+Patch from Debian, modified to apply to our i7z sources in src/.
+
+Author: Andreas Beckmann <anbe@debian.org>
+Description: fix FTBFS with gcc-10
+ gcc-10 defaults to -fno-common
+ see https://gcc.gnu.org/gcc-10/porting_to.html
+Bug-Debian: https://bugs.debian.org/957351
+
+--- a/src/i7z_Dual_Socket.c
++++ b/src/i7z_Dual_Socket.c
+@@ -37,7 +37,7 @@ float Read_Voltage_CPU(int cpu_num);
+ extern struct program_options prog_options;
+ FILE *fp_log_file;
+ 
+-struct timespec global_ts;
++extern struct timespec global_ts;
+ extern FILE *fp_log_file_freq_1, *fp_log_file_freq_2;
+ 
+ extern char* CPU_FREQUENCY_LOGGING_FILE_single;
diff --git a/gnu/packages/patches/icecat-makeicecat.patch b/gnu/packages/patches/icecat-makeicecat.patch
index edd1ced257..c46cb27ff6 100644
--- a/gnu/packages/patches/icecat-makeicecat.patch
+++ b/gnu/packages/patches/icecat-makeicecat.patch
@@ -3,108 +3,49 @@ in a snippet without network access.  After this patch is applied, some
 additional changes will be made using 'substitute*'.
 
 diff --git a/makeicecat b/makeicecat
-index 8be2362..48716f2 100755
+index bf2b7a6..bc3b19b 100755
 --- a/makeicecat
 +++ b/makeicecat
-@@ -31,55 +31,55 @@ SOURCEDIR=icecat-$FFVERSION
+@@ -58,7 +58,7 @@ readonly SOURCEDIR=icecat-${FFVERSION}
+ # debug/shell options
+ readonly DEVEL=0
+ set -euo pipefail
+-(( DEVEL )) && set -x
++set -x
  
- DATA="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"/data
  
--mkdir -p output
--cd output
-+# mkdir -p output
-+# cd output
- 
- ###############################################################################
- # Retrieve FF source code
  ###############################################################################
+@@ -459,7 +459,7 @@ configure_search()
+     sed 's|ddg@|ddg-html@|' -i browser/components/search/extensions/ddg-html/manifest.json
  
--rm mozilla-esr${FFMAJOR} $SOURCEDIR -rf
--
--wget -N https://ftp.mozilla.org/pub/mozilla.org/firefox/releases/${FFVERSION}esr/source/firefox-${FFVERSION}esr.source.tar.xz
--wget -N https://ftp.mozilla.org/pub/mozilla.org/firefox/releases/${FFVERSION}esr/source/firefox-${FFVERSION}esr.source.tar.xz.asc
--gpg --recv-keys --keyserver keyserver.ubuntu.com 14F26682D0916CDD81E37B6D61B7B526D98F0353
--gpg --verify firefox-${FFVERSION}esr.source.tar.xz.asc
--echo -n 1aa041db28cd742e93d663a9da8defd33040b38d8b9470350538473251621643 firefox-${FFVERSION}esr.source.tar.xz |sha256sum -c -
--
--echo Extracting Firefox tarball
--tar -xf firefox-${FFVERSION}esr.source.tar.xz
--
--mv firefox-${FFVERSION} $SOURCEDIR
-+# rm mozilla-esr${FFMAJOR} $SOURCEDIR -rf
-+# 
-+# wget -N https://ftp.mozilla.org/pub/mozilla.org/firefox/releases/${FFVERSION}esr/source/firefox-${FFVERSION}esr.source.tar.xz
-+# wget -N https://ftp.mozilla.org/pub/mozilla.org/firefox/releases/${FFVERSION}esr/source/firefox-${FFVERSION}esr.source.tar.xz.asc
-+# gpg --recv-keys --keyserver keyserver.ubuntu.com 14F26682D0916CDD81E37B6D61B7B526D98F0353
-+# gpg --verify firefox-${FFVERSION}esr.source.tar.xz.asc
-+# echo -n 1aa041db28cd742e93d663a9da8defd33040b38d8b9470350538473251621643 firefox-${FFVERSION}esr.source.tar.xz |sha256sum -c -
-+# 
-+# echo Extracting Firefox tarball
-+# tar -xf firefox-${FFVERSION}esr.source.tar.xz
-+# 
-+# mv firefox-${FFVERSION} $SOURCEDIR
+     # Process various JSON pre-configuration dumps.
+-    python3 ../../tools/process-json-files.py . browser/components/extensions/schemas/
++    python3 "${DATADIR}"/../tools/process-json-files.py . browser/components/extensions/schemas/
+ }
  
+ configure_mobile()
+@@ -855,12 +855,12 @@ finalize_sourceball()
+ # entry point
  ###############################################################################
- # Retrieve l10n
- ###############################################################################
- 
--mkdir l10n
--cd l10n
--while read line;do
--    line=$(echo $line |cut -d' ' -f1)
--    #[ $line = "es-ES" ] || continue # To speed up testing
--    [ $line = "en-US" ] && continue
--    hg clone https://hg.mozilla.org/l10n-central/$line
--    mkdir -p $line/browser/chrome/browser/preferences
--    touch $line/browser/chrome/browser/preferences/advanced-scripts.dtd
--    rm -rf $line/.hg*
--done < ../$SOURCEDIR/browser/locales/shipped-locales
--cd ..
--
--mv l10n $SOURCEDIR
--
--hg clone https://hg.mozilla.org/l10n/compare-locales/
--cd compare-locales/
--hg checkout RELEASE_8_0_0
--cd ..
--rm compare-locales/.hg* compare-locales/.git* -rf
--mv compare-locales $SOURCEDIR/l10n
-+# mkdir l10n
-+# cd l10n
-+# while read line;do
-+#     line=$(echo $line |cut -d' ' -f1)
-+#     #[ $line = "es-ES" ] || continue # To speed up testing
-+#     [ $line = "en-US" ] && continue
-+#     hg clone https://hg.mozilla.org/l10n-central/$line
-+#     mkdir -p $line/browser/chrome/browser/preferences
-+#     touch $line/browser/chrome/browser/preferences/advanced-scripts.dtd
-+#     rm -rf $line/.hg*
-+# done < ../$SOURCEDIR/browser/locales/shipped-locales
-+# cd ..
-+# 
-+# mv l10n $SOURCEDIR
-+# 
-+# hg clone https://hg.mozilla.org/l10n/compare-locales/
-+# cd compare-locales/
-+# hg checkout RELEASE_8_0_0
-+# cd ..
-+# rm compare-locales/.hg* compare-locales/.git* -rf
-+# mv compare-locales $SOURCEDIR/l10n
- 
- #######################################################
- 
--cd $SOURCEDIR
-+# cd $SOURCEDIR
- 
- shopt -s nullglob
- for patch in $DATA/patches/*.patch; do
-@@ -598,6 +598,6 @@ sed 's/777/755/;' -i toolkit/crashreporter/google-breakpad/Makefile.in
- # Fix CVE-2012-3386
- /bin/sed 's/chmod a+w/chmod u+w/' -i ./js/src/ctypes/libffi/Makefile.in ./toolkit/crashreporter/google-breakpad/Makefile.in ./toolkit/crashreporter/google-breakpad/src/third_party/glog/Makefile.in || true
  
--cd ..
--echo Packaging tarball
--tar cfj icecat-$ICECATVERSION.tar.bz2 $SOURCEDIR
-+# cd ..
-+# echo Packaging tarball
-+# tar cfj icecat-$ICECATVERSION.tar.bz2 $SOURCEDIR
+-validate_env || exit 1
+-prepare_env
+-fetch_source
+-verify_sources
+-extract_sources
+-fetch_l10n
++# validate_env || exit 1
++# prepare_env
++# fetch_source
++# verify_sources
++# extract_sources
++# fetch_l10n
+ apply_patches
+ configure
+ configure_search
+@@ -872,4 +872,4 @@ prepare_macos_packaging
+ configure_extensions
+ configure_onboarding
+ apply_bugfixes
+-finalize_sourceball
++# finalize_sourceball
diff --git a/gnu/packages/patches/icedtea-6-extend-hotspot-aarch64-support.patch b/gnu/packages/patches/icedtea-6-extend-hotspot-aarch64-support.patch
deleted file mode 100644
index 9dc112a344..0000000000
--- a/gnu/packages/patches/icedtea-6-extend-hotspot-aarch64-support.patch
+++ /dev/null
@@ -1,1831 +0,0 @@
-From d51cb8c0f7966ac0b870e90e421cc8a796d98abf Mon Sep 17 00:00:00 2001
-From: Simon South <simon@simonsouth.net>
-Date: Tue, 9 Jun 2020 13:48:42 -0400
-Subject: [PATCH] Extend AArch64 support
-
-This adds to IcedTea 6 a patch that extends the support for AArch64 in
-its version of HotSpot, allowing the portable Zero virtual machine to
-be built for that platform.
-
-The patch added is a backport of the one prepared for JDK 9 by the
-OpenJDK AArch64 Porting Project, available (as of 11 June 2020) for
-download from https://openjdk.java.net/jeps/237.
----
- Makefile.am                                   |    3 +-
- Makefile.in                                   |   12 +-
- .../hs23/aarch64-extended-support.patch       | 1766 +++++++++++++++++
- 3 files changed, 1775 insertions(+), 6 deletions(-)
- create mode 100644 patches/hotspot/hs23/aarch64-extended-support.patch
-
-diff --git a/Makefile.am b/Makefile.am
-index 97dac85..f5c917b 100644
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -621,7 +621,8 @@ ICEDTEA_PATCHES = \
- 	patches/openjdk/6260348-pr3068.patch \
- 	patches/openjdk/6961123-pr2975.patch \
- 	patches/pr2800-missing_resources.patch \
--	patches/pr3213-conditional_arm32jit.patch
-+	patches/pr3213-conditional_arm32jit.patch \
-+	patches/hotspot/hs23/aarch64-extended-support.patch
- 
- if WITH_RHINO
- ICEDTEA_PATCHES += \
-diff --git a/Makefile.in b/Makefile.in
-index aced7c2..e3545ee 100644
---- a/Makefile.in
-+++ b/Makefile.in
-@@ -1049,11 +1049,13 @@ ICEDTEA_PATCHES = $(DROP_PATCHES) $(SECURITY_PATCHES) \
- 	patches/openjdk/6260348-pr3068.patch \
- 	patches/openjdk/6961123-pr2975.patch \
- 	patches/pr2800-missing_resources.patch \
--	patches/pr3213-conditional_arm32jit.patch $(am__append_21) \
--	$(am__append_22) $(am__append_23) $(am__append_24) \
--	$(am__append_25) $(am__append_26) $(am__append_27) \
--	$(am__append_28) $(am__append_29) $(am__append_30) \
--	$(am__append_31) $(am__append_32) $(DISTRIBUTION_PATCHES)
-+	patches/pr3213-conditional_arm32jit.patch \
-+	patches/hotspot/hs23/aarch64-extended-support.patch \
-+	$(am__append_21) $(am__append_22) $(am__append_23) \
-+	$(am__append_24) $(am__append_25) $(am__append_26) \
-+	$(am__append_27) $(am__append_28) $(am__append_29) \
-+	$(am__append_30) $(am__append_31) $(am__append_32) \
-+	$(DISTRIBUTION_PATCHES)
- @ENABLE_NSS_FALSE@NSS_PATCHES = patches/nss-not-enabled-config.patch
- @ENABLE_NSS_TRUE@NSS_PATCHES = patches/nss-config.patch
- 
-diff --git a/patches/hotspot/hs23/aarch64-extended-support.patch b/patches/hotspot/hs23/aarch64-extended-support.patch
-new file mode 100644
-index 0000000..7817f4d
---- /dev/null
-+++ b/patches/hotspot/hs23/aarch64-extended-support.patch
-@@ -0,0 +1,1766 @@
-+diff --git openjdk.orig/hotspot/agent/src/os/linux/LinuxDebuggerLocal.c openjdk/hotspot/agent/src/os/linux/LinuxDebuggerLocal.c
-+index 5771fdd..b23cc17 100644
-+--- openjdk.orig/hotspot/agent/src/os/linux/LinuxDebuggerLocal.c
-++++ openjdk/hotspot/agent/src/os/linux/LinuxDebuggerLocal.c
-+@@ -304,6 +304,9 @@ JNIEXPORT jlongArray JNICALL Java_sun_jvm_hotspot_debugger_linux_LinuxDebuggerLo
-+ #ifdef amd64
-+ #define NPRGREG sun_jvm_hotspot_debugger_amd64_AMD64ThreadContext_NPRGREG
-+ #endif
-++#ifdef aarch64
-++#define NPRGREG 32
-++#endif
-+ #if defined(sparc) || defined(sparcv9)
-+ #define NPRGREG sun_jvm_hotspot_debugger_sparc_SPARCThreadContext_NPRGREG
-+ #endif
-+@@ -406,6 +409,12 @@ JNIEXPORT jlongArray JNICALL Java_sun_jvm_hotspot_debugger_linux_LinuxDebuggerLo
-+   regs[REG_INDEX(R_O7)]  = gregs.u_regs[14];
-+ #endif /* sparc */
-+ 
-++#if defined(aarch64)
-++
-++#define REG_INDEX(reg) sun_jvm_hotspot_debugger_aarch64_AARCH64ThreadContext_##reg
-++
-++#endif /* aarch64 */
-++
-+ 
-+   (*env)->ReleaseLongArrayElements(env, array, regs, JNI_COMMIT);
-+   return array;
-+diff --git openjdk.orig/hotspot/agent/src/os/linux/libproc.h openjdk/hotspot/agent/src/os/linux/libproc.h
-+index e4d77f7..c02b841 100644
-+--- openjdk.orig/hotspot/agent/src/os/linux/libproc.h
-++++ openjdk/hotspot/agent/src/os/linux/libproc.h
-+@@ -54,6 +54,10 @@ struct pt_regs {
-+ 
-+ #endif //sparc or sparcv9
-+ 
-++#if defined(aarch64)
-++#include "asm/ptrace.h"
-++#endif
-++
-+ /************************************************************************************
-+ 
-+ 0. This is very minimal subset of Solaris libproc just enough for current application.
-+@@ -97,6 +101,9 @@ unsigned long   regs[IA64_REG_COUNT];     /* integer and fp regs */
-+ #if defined(sparc)  || defined(sparcv9)
-+ #define user_regs_struct  pt_regs
-+ #endif
-++#if defined(aarch64)
-++#define user_regs_struct user_pt_regs
-++#endif
-+ 
-+ // This C bool type must be int for compatibility with Linux calls and
-+ // it would be a mistake to equivalence it to C++ bool on many platforms
-+diff --git openjdk.orig/hotspot/make/defs.make openjdk/hotspot/make/defs.make
-+index 44f21f8..4e8d00b 100644
-+--- openjdk.orig/hotspot/make/defs.make
-++++ openjdk/hotspot/make/defs.make
-+@@ -232,7 +232,7 @@ ifneq ($(OSNAME),windows)
-+ 
-+   # Use uname output for SRCARCH, but deal with platform differences. If ARCH
-+   # is not explicitly listed below, it is treated as x86. 
-+-  SRCARCH     = $(ARCH/$(filter sparc sparc64 ia64 amd64 x86_64 arm ppc zero,$(ARCH)))
-++  SRCARCH     = $(ARCH/$(filter sparc sparc64 ia64 amd64 x86_64 arm ppc aarch64 zero,$(ARCH)))
-+   ARCH/       = x86
-+   ARCH/sparc  = sparc
-+   ARCH/sparc64= sparc
-+@@ -242,6 +242,7 @@ ifneq ($(OSNAME),windows)
-+   ARCH/ppc64  = ppc
-+   ARCH/ppc    = ppc
-+   ARCH/arm    = arm
-++  ARCH/aarch64= aarch64
-+   ARCH/zero   = zero
-+ 
-+   # BUILDARCH is usually the same as SRCARCH, except for sparcv9
-+@@ -267,11 +268,12 @@ ifneq ($(OSNAME),windows)
-+   LIBARCH/sparcv9 = sparcv9
-+   LIBARCH/ia64    = ia64
-+   LIBARCH/ppc64   = ppc
-++  LIBARCH/aarch64 = aarch64
-+   LIBARCH/ppc     = ppc
-+   LIBARCH/arm     = arm
-+   LIBARCH/zero    = $(ZERO_LIBARCH)
-+ 
-+-  LP64_ARCH = sparcv9 amd64 ia64 zero
-++  LP64_ARCH = sparcv9 amd64 ia64 aarch64 zero
-+ endif
-+ 
-+ # Required make macro settings for all platforms
-+diff --git openjdk.orig/hotspot/make/linux/makefiles/buildtree.make openjdk/hotspot/make/linux/makefiles/buildtree.make
-+index 7c3d4f9..3bc7e8a 100644
-+--- openjdk.orig/hotspot/make/linux/makefiles/buildtree.make
-++++ openjdk/hotspot/make/linux/makefiles/buildtree.make
-+@@ -385,6 +385,7 @@ DATA_MODE/sparc   = 32
-+ DATA_MODE/sparcv9 = 64
-+ DATA_MODE/amd64   = 64
-+ DATA_MODE/ia64    = 64
-++DATA_MODE/aarch64 = 64
-+ DATA_MODE/zero    = $(ARCH_DATA_MODEL)
-+ 
-+ JAVA_FLAG/32 = -d32
-+diff --git openjdk.orig/hotspot/make/linux/makefiles/defs.make openjdk/hotspot/make/linux/makefiles/defs.make
-+index 7bb3149..39ffda4 100644
-+--- openjdk.orig/hotspot/make/linux/makefiles/defs.make
-++++ openjdk/hotspot/make/linux/makefiles/defs.make
-+@@ -118,6 +118,15 @@ ifeq ($(ARCH), ppc)
-+   HS_ARCH          = ppc
-+ endif
-+ 
-++# AARCH64
-++ifeq ($(ARCH), aarch64)
-++  ARCH_DATA_MODEL  = 64
-++  MAKE_ARGS        += LP64=1
-++  PLATFORM         = linux-aarch64
-++  VM_PLATFORM      = linux_aarch64
-++  HS_ARCH          = aarch64
-++endif
-++
-+ # determine if HotSpot is being built in JDK6 or earlier version
-+ JDK6_OR_EARLIER=0
-+ ifeq "$(shell expr \( '$(JDK_MAJOR_VERSION)' != '' \& '$(JDK_MINOR_VERSION)' != '' \& '$(JDK_MICRO_VERSION)' != '' \))" "1"
-+diff --git openjdk.orig/hotspot/make/linux/makefiles/gcc.make openjdk/hotspot/make/linux/makefiles/gcc.make
-+index 897e3a6..44f1673 100644
-+--- openjdk.orig/hotspot/make/linux/makefiles/gcc.make
-++++ openjdk/hotspot/make/linux/makefiles/gcc.make
-+@@ -104,6 +104,7 @@ endif
-+ ARCHFLAG = $(ARCHFLAG/$(BUILDARCH))
-+ ARCHFLAG/i486    = -m32 -march=i586
-+ ARCHFLAG/amd64   = -m64
-++ARCHFLAG/aarch64 =
-+ ARCHFLAG/ia64    =
-+ ARCHFLAG/sparc   = -m32 -mcpu=v9
-+ ARCHFLAG/sparcv9 = -m64 -mcpu=v9
-+diff --git openjdk.orig/hotspot/src/os/linux/vm/os_linux.cpp openjdk/hotspot/src/os/linux/vm/os_linux.cpp
-+index c1b0e5c..9f7cda0 100644
-+--- openjdk.orig/hotspot/src/os/linux/vm/os_linux.cpp
-++++ openjdk/hotspot/src/os/linux/vm/os_linux.cpp
-+@@ -296,6 +296,8 @@ static char cpu_arch[] = "sparcv9";
-+ #  else
-+ static char cpu_arch[] = "sparc";
-+ #  endif
-++#elif defined(AARCH64)
-++static char cpu_arch[] = "aarch64";
-+ #else
-+ #error Add appropriate cpu_arch setting
-+ #endif
-+@@ -1442,7 +1444,7 @@ void os::Linux::clock_init() {
-+ #ifndef SYS_clock_getres
-+ 
-+ #if defined(IA32) || defined(AMD64)
-+-#define SYS_clock_getres IA32_ONLY(266)  AMD64_ONLY(229)
-++#define SYS_clock_getres IA32_ONLY(266)  AMD64_ONLY(229) AARCH64_ONLY(114)
-+ #define sys_clock_getres(x,y)  ::syscall(SYS_clock_getres, x, y)
-+ #else
-+ #warning "SYS_clock_getres not defined for this platform, disabling fast_thread_cpu_time"
-+@@ -1930,7 +1932,7 @@ void * os::dll_load(const char *filename, char *ebuf, int ebuflen)
-+     static  Elf32_Half running_arch_code=EM_AARCH64;
-+   #else
-+     #error Method os::dll_load requires that one of following is defined:\
-+-         IA32, AMD64, IA64, __sparc, __powerpc__, ARM, S390, ALPHA, MIPS, MIPSEL, PARISC, M68K, SH
-++      IA32, AMD64, IA64, __sparc, __powerpc__, ARM, S390, ALPHA, MIPS, MIPSEL, PARISC, M68K, SH, AARCH64
-+   #endif
-+ 
-+   // Identify compatability class for VM's architecture and library's architecture
-+@@ -3056,7 +3058,7 @@ void os::large_page_init() {
-+ 
-+ #ifndef ZERO
-+     _large_page_size = IA32_ONLY(4 * M) AMD64_ONLY(2 * M) IA64_ONLY(256 * M) SPARC_ONLY(4 * M)
-+-                       ARM_ONLY(2 * M) PPC_ONLY(4 * M);
-++                       ARM_ONLY(2 * M) PPC_ONLY(4 * M) AARCH64_ONLY(2 * M);
-+ #endif // ZERO
-+ 
-+     FILE *fp = fopen("/proc/meminfo", "r");
-+@@ -5378,11 +5380,11 @@ void Parker::unpark() {
-+ extern char** environ;
-+ 
-+ #ifndef __NR_fork
-+-#define __NR_fork IA32_ONLY(2) IA64_ONLY(not defined) AMD64_ONLY(57)
-++#define __NR_fork IA32_ONLY(2) IA64_ONLY(not defined) AMD64_ONLY(57) AARCH64_ONLY(1079)
-+ #endif
-+ 
-+ #ifndef __NR_execve
-+-#define __NR_execve IA32_ONLY(11) IA64_ONLY(1033) AMD64_ONLY(59)
-++#define __NR_execve IA32_ONLY(11) IA64_ONLY(1033) AMD64_ONLY(59) AARCH64_ONLY(221)
-+ #endif
-+ 
-+ // Run the specified command in a separate process. Return its exit value,
-+diff --git openjdk.orig/hotspot/src/share/vm/adlc/main.cpp openjdk/hotspot/src/share/vm/adlc/main.cpp
-+index 47e207a..b93504e 100644
-+--- openjdk.orig/hotspot/src/share/vm/adlc/main.cpp
-++++ openjdk/hotspot/src/share/vm/adlc/main.cpp
-+@@ -244,6 +244,11 @@ int main(int argc, char *argv[])
-+   AD.addInclude(AD._CPP_file, "assembler_arm.inline.hpp");
-+   AD.addInclude(AD._CPP_file, "nativeInst_arm.hpp");
-+   AD.addInclude(AD._CPP_file, "vmreg_arm.inline.hpp");
-++#endif
-++#ifdef TARGET_ARCH_aarch64
-++  AD.addInclude(AD._CPP_file, "assembler_aarch64.inline.hpp");
-++  AD.addInclude(AD._CPP_file, "nativeInst_aarch64.hpp");
-++  AD.addInclude(AD._CPP_file, "vmreg_aarch64.inline.hpp");
-+ #endif
-+   AD.addInclude(AD._HPP_file, "memory/allocation.hpp");
-+   AD.addInclude(AD._HPP_file, "opto/machnode.hpp");
-+diff --git openjdk.orig/hotspot/src/share/vm/asm/assembler.cpp openjdk/hotspot/src/share/vm/asm/assembler.cpp
-+index 2bcdcbc..57787ac 100644
-+--- openjdk.orig/hotspot/src/share/vm/asm/assembler.cpp
-++++ openjdk/hotspot/src/share/vm/asm/assembler.cpp
-+@@ -43,6 +43,9 @@
-+ #ifdef TARGET_ARCH_ppc
-+ # include "assembler_ppc.inline.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "assembler_aarch64.inline.hpp"
-++#endif
-+ 
-+ 
-+ // Implementation of AbstractAssembler
-+diff --git openjdk.orig/hotspot/src/share/vm/asm/assembler.hpp openjdk/hotspot/src/share/vm/asm/assembler.hpp
-+index c25aa3f..4f77825 100644
-+--- openjdk.orig/hotspot/src/share/vm/asm/assembler.hpp
-++++ openjdk/hotspot/src/share/vm/asm/assembler.hpp
-+@@ -51,6 +51,10 @@
-+ # include "register_ppc.hpp"
-+ # include "vm_version_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "register_aarch64.hpp"
-++# include "vm_version_aarch64.hpp"
-++#endif
-+ 
-+ // This file contains platform-independent assembler declarations.
-+ 
-+@@ -459,6 +463,9 @@ class AbstractAssembler : public ResourceObj  {
-+ #ifdef TARGET_ARCH_ppc
-+ # include "assembler_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "assembler_aarch64.hpp"
-++#endif
-+ 
-+ 
-+ #endif // SHARE_VM_ASM_ASSEMBLER_HPP
-+diff --git openjdk.orig/hotspot/src/share/vm/asm/codeBuffer.hpp openjdk/hotspot/src/share/vm/asm/codeBuffer.hpp
-+index 685297a..002faef 100644
-+--- openjdk.orig/hotspot/src/share/vm/asm/codeBuffer.hpp
-++++ openjdk/hotspot/src/share/vm/asm/codeBuffer.hpp
-+@@ -573,6 +573,9 @@ class CodeBuffer: public StackObj {
-+ #ifdef TARGET_ARCH_ppc
-+ # include "codeBuffer_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "codeBuffer_aarch64.hpp"
-++#endif
-+ 
-+ };
-+ 
-+diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_Canonicalizer.cpp openjdk/hotspot/src/share/vm/c1/c1_Canonicalizer.cpp
-+index c95a23c..2ec31e5 100644
-+--- openjdk.orig/hotspot/src/share/vm/c1/c1_Canonicalizer.cpp
-++++ openjdk/hotspot/src/share/vm/c1/c1_Canonicalizer.cpp
-+@@ -877,6 +877,13 @@ static bool match(UnsafeRawOp* x,
-+     return false;
-+   }
-+ 
-++// AARCH64 cannot handle shifts which are not either 0, or log2 of the type size
-++#ifdef AARCH64
-++  if (*log2_scale != 0 &&
-++	(1 << *log2_scale) != type2aelembytes(x->basic_type(), true))
-++    return false;
-++#endif
-++
-+   // If the value is pinned then it will be always be computed so
-+   // there's no profit to reshaping the expression.
-+   return !root->is_pinned();
-+diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_Defs.hpp openjdk/hotspot/src/share/vm/c1/c1_Defs.hpp
-+index bebb3b0..ddaceb7 100644
-+--- openjdk.orig/hotspot/src/share/vm/c1/c1_Defs.hpp
-++++ openjdk/hotspot/src/share/vm/c1/c1_Defs.hpp
-+@@ -41,6 +41,9 @@
-+ #ifdef TARGET_ARCH_ppc
-+ # include "register_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "register_aarch64.hpp"
-++#endif
-+ 
-+ // set frame size and return address offset to these values in blobs
-+ // (if the compiled frame uses ebp as link pointer on IA; otherwise,
-+@@ -62,6 +65,9 @@ enum {
-+ #ifdef TARGET_ARCH_ppc
-+ # include "c1_Defs_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "c1_Defs_aarch64.hpp"
-++#endif
-+ 
-+ 
-+ // native word offsets from memory address
-+diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_FpuStackSim.hpp openjdk/hotspot/src/share/vm/c1/c1_FpuStackSim.hpp
-+index a1e4c38..491b064 100644
-+--- openjdk.orig/hotspot/src/share/vm/c1/c1_FpuStackSim.hpp
-++++ openjdk/hotspot/src/share/vm/c1/c1_FpuStackSim.hpp
-+@@ -44,6 +44,9 @@ class FpuStackSim;
-+ #ifdef TARGET_ARCH_ppc
-+ # include "c1_FpuStackSim_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "c1_FpuStackSim_aarch64.hpp"
-++#endif
-+ 
-+ 
-+ #endif // SHARE_VM_C1_C1_FPUSTACKSIM_HPP
-+diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_FrameMap.cpp openjdk/hotspot/src/share/vm/c1/c1_FrameMap.cpp
-+index ea50b27..6a3dc63 100644
-+--- openjdk.orig/hotspot/src/share/vm/c1/c1_FrameMap.cpp
-++++ openjdk/hotspot/src/share/vm/c1/c1_FrameMap.cpp
-+@@ -41,6 +41,9 @@
-+ #ifdef TARGET_ARCH_ppc
-+ # include "vmreg_ppc.inline.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "vmreg_aarch64.inline.hpp"
-++#endif
-+ 
-+ 
-+ 
-+diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_FrameMap.hpp openjdk/hotspot/src/share/vm/c1/c1_FrameMap.hpp
-+index 288fc5c..e9a0250 100644
-+--- openjdk.orig/hotspot/src/share/vm/c1/c1_FrameMap.hpp
-++++ openjdk/hotspot/src/share/vm/c1/c1_FrameMap.hpp
-+@@ -93,6 +93,9 @@ class FrameMap : public CompilationResourceObj {
-+ #endif
-+ #ifdef TARGET_ARCH_ppc
-+ # include "c1_FrameMap_ppc.hpp"
-++#endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "c1_FrameMap_aarch64.hpp"
-+ #endif
-+ 
-+ 
-+diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_LIR.cpp openjdk/hotspot/src/share/vm/c1/c1_LIR.cpp
-+index 776a6a3..6e1a362 100644
-+--- openjdk.orig/hotspot/src/share/vm/c1/c1_LIR.cpp
-++++ openjdk/hotspot/src/share/vm/c1/c1_LIR.cpp
-+@@ -67,7 +67,7 @@ FloatRegister LIR_OprDesc::as_double_reg() const {
-+ 
-+ #endif
-+ 
-+-#ifdef ARM
-++#if defined(ARM) || defined (TARGET_ARCH_aarch64)
-+ 
-+ FloatRegister LIR_OprDesc::as_float_reg() const {
-+   return as_FloatRegister(fpu_regnr());
-+@@ -147,7 +147,11 @@ void LIR_Address::verify() const {
-+ #endif
-+ #ifdef _LP64
-+   assert(base()->is_cpu_register(), "wrong base operand");
-++#ifndef TARGET_ARCH_aarch64
-+   assert(index()->is_illegal() || index()->is_double_cpu(), "wrong index operand");
-++#else
-++  assert(index()->is_illegal() || index()->is_double_cpu() || index()->is_single_cpu(), "wrong index operand");
-++#endif
-+   assert(base()->type() == T_OBJECT || base()->type() == T_LONG,
-+          "wrong type for addresses");
-+ #else
-+@@ -545,7 +549,7 @@ void LIR_OpVisitState::visit(LIR_Op* op) {
-+       assert(opConvert->_info == NULL, "must be");
-+       if (opConvert->_opr->is_valid())       do_input(opConvert->_opr);
-+       if (opConvert->_result->is_valid())    do_output(opConvert->_result);
-+-#ifdef PPC
-++#if defined(PPC) || defined(TARGET_ARCH_aarch64)
-+       if (opConvert->_tmp1->is_valid())      do_temp(opConvert->_tmp1);
-+       if (opConvert->_tmp2->is_valid())      do_temp(opConvert->_tmp2);
-+ #endif
-+@@ -1468,6 +1472,11 @@ void LIR_OprDesc::print(outputStream* out) const {
-+     out->print("fpu%d", fpu_regnr());
-+   } else if (is_double_fpu()) {
-+     out->print("fpu%d", fpu_regnrLo());
-++#elif defined(AARCH64)
-++  } else if (is_single_fpu()) {
-++    out->print("fpu%d", fpu_regnr());
-++  } else if (is_double_fpu()) {
-++    out->print("fpu%d", fpu_regnrLo());
-+ #elif defined(ARM)
-+   } else if (is_single_fpu()) {
-+     out->print("s%d", fpu_regnr());
-+@@ -1836,7 +1845,7 @@ void LIR_OpConvert::print_instr(outputStream* out) const {
-+   print_bytecode(out, bytecode());
-+   in_opr()->print(out);                  out->print(" ");
-+   result_opr()->print(out);              out->print(" ");
-+-#ifdef PPC
-++#if defined(PPC) || defined(TARGET_ARCH_aarch64)
-+   if(tmp1()->is_valid()) {
-+     tmp1()->print(out); out->print(" ");
-+     tmp2()->print(out); out->print(" ");
-+diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_LIR.hpp openjdk/hotspot/src/share/vm/c1/c1_LIR.hpp
-+index f8589c3..eb3383f 100644
-+--- openjdk.orig/hotspot/src/share/vm/c1/c1_LIR.hpp
-++++ openjdk/hotspot/src/share/vm/c1/c1_LIR.hpp
-+@@ -437,8 +437,8 @@ class LIR_OprDesc: public CompilationResourceObj {
-+   XMMRegister as_xmm_double_reg() const;
-+   // for compatibility with RInfo
-+   int fpu () const                                  { return lo_reg_half(); }
-+-#endif // X86
-+-#if defined(SPARC) || defined(ARM) || defined(PPC)
-++#endif
-++#if defined(SPARC) || defined(ARM) || defined(PPC) || defined(AARCH64)
-+   FloatRegister as_float_reg   () const;
-+   FloatRegister as_double_reg  () const;
-+ #endif
-+@@ -526,7 +526,7 @@ class LIR_Address: public LIR_OprPtr {
-+      , _type(type)
-+      , _disp(0) { verify(); }
-+ 
-+-#if defined(X86) || defined(ARM)
-++#if defined(X86) || defined(ARM) || defined(AARCH64)
-+   LIR_Address(LIR_Opr base, LIR_Opr index, Scale scale, intx disp, BasicType type):
-+        _base(base)
-+      , _index(index)
-+@@ -601,7 +601,7 @@ class LIR_OprFact: public AllStatic {
-+                                                                              LIR_OprDesc::fpu_register         |
-+                                                                              LIR_OprDesc::double_size); }
-+ #endif
-+-#ifdef X86
-++#if defined(X86) || defined(AARCH64)
-+   static LIR_Opr double_fpu(int reg)            { return (LIR_Opr)(intptr_t)((reg  << LIR_OprDesc::reg1_shift) |
-+                                                                              (reg  << LIR_OprDesc::reg2_shift) |
-+                                                                              LIR_OprDesc::double_type          |
-+@@ -1398,7 +1398,7 @@ class LIR_OpConvert: public LIR_Op1 {
-+  private:
-+    Bytecodes::Code _bytecode;
-+    ConversionStub* _stub;
-+-#ifdef PPC
-++#if defined(PPC) || defined(TARGET_ARCH_aarch64)
-+   LIR_Opr _tmp1;
-+   LIR_Opr _tmp2;
-+ #endif
-+@@ -1413,7 +1413,7 @@ class LIR_OpConvert: public LIR_Op1 {
-+ #endif
-+      , _bytecode(code)                           {}
-+ 
-+-#ifdef PPC
-++#if defined(PPC) || defined(TARGET_ARCH_aarch64)
-+    LIR_OpConvert(Bytecodes::Code code, LIR_Opr opr, LIR_Opr result, ConversionStub* stub
-+                  ,LIR_Opr tmp1, LIR_Opr tmp2)
-+      : LIR_Op1(lir_convert, opr, result)
-+@@ -1425,7 +1425,7 @@ class LIR_OpConvert: public LIR_Op1 {
-+ 
-+   Bytecodes::Code bytecode() const               { return _bytecode; }
-+   ConversionStub* stub() const                   { return _stub; }
-+-#ifdef PPC
-++#if defined(PPC) || defined(TARGET_ARCH_aarch64)
-+   LIR_Opr tmp1() const                           { return _tmp1; }
-+   LIR_Opr tmp2() const                           { return _tmp2; }
-+ #endif
-+@@ -1973,7 +1973,14 @@ class LIR_List: public CompilationResourceObj {
-+ #ifdef PPC
-+   void convert(Bytecodes::Code code, LIR_Opr left, LIR_Opr dst, LIR_Opr tmp1, LIR_Opr tmp2) { append(new LIR_OpConvert(code, left, dst, NULL, tmp1, tmp2)); }
-+ #endif
-++#if defined (TARGET_ARCH_aarch64)
-++  void convert(Bytecodes::Code code, LIR_Opr left, LIR_Opr dst,
-++	       ConversionStub* stub = NULL, LIR_Opr tmp1 = LIR_OprDesc::illegalOpr()) {
-++    append(new LIR_OpConvert(code, left, dst, stub, tmp1, LIR_OprDesc::illegalOpr()));
-++  }
-++#else
-+   void convert(Bytecodes::Code code, LIR_Opr left, LIR_Opr dst, ConversionStub* stub = NULL/*, bool is_32bit = false*/) { append(new LIR_OpConvert(code, left, dst, stub)); }
-++#endif
-+ 
-+   void logical_and (LIR_Opr left, LIR_Opr right, LIR_Opr dst) { append(new LIR_Op2(lir_logic_and,  left, right, dst)); }
-+   void logical_or  (LIR_Opr left, LIR_Opr right, LIR_Opr dst) { append(new LIR_Op2(lir_logic_or,   left, right, dst)); }
-+diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_LIRAssembler.cpp openjdk/hotspot/src/share/vm/c1/c1_LIRAssembler.cpp
-+index 528f21e..4d83fca 100644
-+--- openjdk.orig/hotspot/src/share/vm/c1/c1_LIRAssembler.cpp
-++++ openjdk/hotspot/src/share/vm/c1/c1_LIRAssembler.cpp
-+@@ -50,6 +50,10 @@
-+ # include "nativeInst_ppc.hpp"
-+ # include "vmreg_ppc.inline.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "nativeInst_aarch64.hpp"
-++# include "vmreg_aarch64.inline.hpp"
-++#endif
-+ 
-+ 
-+ void LIR_Assembler::patching_epilog(PatchingStub* patch, LIR_PatchCode patch_code, Register obj, CodeEmitInfo* info) {
-+diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_LIRAssembler.hpp openjdk/hotspot/src/share/vm/c1/c1_LIRAssembler.hpp
-+index 58adf59..f4a49b3 100644
-+--- openjdk.orig/hotspot/src/share/vm/c1/c1_LIRAssembler.hpp
-++++ openjdk/hotspot/src/share/vm/c1/c1_LIRAssembler.hpp
-+@@ -261,6 +261,9 @@ class LIR_Assembler: public CompilationResourceObj {
-+ #ifdef TARGET_ARCH_ppc
-+ # include "c1_LIRAssembler_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "c1_LIRAssembler_aarch64.hpp"
-++#endif
-+ 
-+ };
-+ 
-+diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_LinearScan.cpp openjdk/hotspot/src/share/vm/c1/c1_LinearScan.cpp
-+index aaae71d..93f9f5f 100644
-+--- openjdk.orig/hotspot/src/share/vm/c1/c1_LinearScan.cpp
-++++ openjdk/hotspot/src/share/vm/c1/c1_LinearScan.cpp
-+@@ -47,6 +47,9 @@
-+ #ifdef TARGET_ARCH_ppc
-+ # include "vmreg_ppc.inline.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "vmreg_aarch64.inline.hpp"
-++#endif
-+ 
-+ 
-+ #ifndef PRODUCT
-+@@ -2190,7 +2193,7 @@ LIR_Opr LinearScan::color_lir_opr(LIR_Opr opr, int op_id, LIR_OpVisitState::OprM
-+ 
-+   LIR_Opr res = operand_for_interval(interval);
-+ 
-+-#ifdef X86
-++#if defined(X86) || defined(AARCH64)
-+   // new semantic for is_last_use: not only set on definite end of interval,
-+   // but also before hole
-+   // This may still miss some cases (e.g. for dead values), but it is not necessary that the
-+diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_LinearScan.hpp openjdk/hotspot/src/share/vm/c1/c1_LinearScan.hpp
-+index 0c06f1b..a152328 100644
-+--- openjdk.orig/hotspot/src/share/vm/c1/c1_LinearScan.hpp
-++++ openjdk/hotspot/src/share/vm/c1/c1_LinearScan.hpp
-+@@ -985,6 +985,9 @@ class LinearScanTimers : public StackObj {
-+ #ifdef TARGET_ARCH_ppc
-+ # include "c1_LinearScan_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "c1_LinearScan_aarch64.hpp"
-++#endif
-+ 
-+ 
-+ #endif // SHARE_VM_C1_C1_LINEARSCAN_HPP
-+diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_MacroAssembler.hpp openjdk/hotspot/src/share/vm/c1/c1_MacroAssembler.hpp
-+index 55d9803..eda2174 100644
-+--- openjdk.orig/hotspot/src/share/vm/c1/c1_MacroAssembler.hpp
-++++ openjdk/hotspot/src/share/vm/c1/c1_MacroAssembler.hpp
-+@@ -41,6 +41,9 @@
-+ #ifdef TARGET_ARCH_ppc
-+ # include "assembler_ppc.inline.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "assembler_aarch64.inline.hpp"
-++#endif
-+ 
-+ class CodeEmitInfo;
-+ 
-+@@ -73,6 +76,9 @@ class C1_MacroAssembler: public MacroAssembler {
-+ #ifdef TARGET_ARCH_ppc
-+ # include "c1_MacroAssembler_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "c1_MacroAssembler_aarch64.hpp"
-++#endif
-+ 
-+ };
-+ 
-+diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_Runtime1.cpp openjdk/hotspot/src/share/vm/c1/c1_Runtime1.cpp
-+index 765dec4..f0b3aae 100644
-+--- openjdk.orig/hotspot/src/share/vm/c1/c1_Runtime1.cpp
-++++ openjdk/hotspot/src/share/vm/c1/c1_Runtime1.cpp
-+@@ -1103,6 +1103,7 @@ JRT_END
-+ // completes we can check for deoptimization. This simplifies the
-+ // assembly code in the cpu directories.
-+ //
-++#ifndef TARGET_ARCH_aarch64
-+ int Runtime1::move_klass_patching(JavaThread* thread) {
-+ //
-+ // NOTE: we are still in Java
-+@@ -1150,6 +1151,7 @@ int Runtime1::access_field_patching(JavaThread* thread) {
-+ 
-+   return caller_is_deopted();
-+ JRT_END
-++#endif
-+ 
-+ 
-+ JRT_LEAF(void, Runtime1::trace_block_entry(jint block_id))
-+diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_Runtime1.hpp openjdk/hotspot/src/share/vm/c1/c1_Runtime1.hpp
-+index 2032564..19261be 100644
-+--- openjdk.orig/hotspot/src/share/vm/c1/c1_Runtime1.hpp
-++++ openjdk/hotspot/src/share/vm/c1/c1_Runtime1.hpp
-+@@ -159,6 +159,9 @@ class Runtime1: public AllStatic {
-+   static int move_klass_patching(JavaThread* thread);
-+ 
-+   static void patch_code(JavaThread* thread, StubID stub_id);
-++#ifdef TARGET_ARCH_aarch64
-++  static void patch_code_aarch64(JavaThread* thread, StubID stub_id);
-++#endif
-+ 
-+  public:
-+   // initialization
-+diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_globals.hpp openjdk/hotspot/src/share/vm/c1/c1_globals.hpp
-+index 15f3cc1..4143a87 100644
-+--- openjdk.orig/hotspot/src/share/vm/c1/c1_globals.hpp
-++++ openjdk/hotspot/src/share/vm/c1/c1_globals.hpp
-+@@ -38,6 +38,9 @@
-+ #ifdef TARGET_ARCH_ppc
-+ # include "c1_globals_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "c1_globals_aarch64.hpp"
-++#endif
-+ #ifdef TARGET_OS_FAMILY_linux
-+ # include "c1_globals_linux.hpp"
-+ #endif
-+diff --git openjdk.orig/hotspot/src/share/vm/classfile/classFileStream.hpp openjdk/hotspot/src/share/vm/classfile/classFileStream.hpp
-+index cf6f0e5..b128b3a 100644
-+--- openjdk.orig/hotspot/src/share/vm/classfile/classFileStream.hpp
-++++ openjdk/hotspot/src/share/vm/classfile/classFileStream.hpp
-+@@ -41,6 +41,9 @@
-+ #ifdef TARGET_ARCH_ppc
-+ # include "bytes_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "bytes_aarch64.hpp"
-++#endif
-+ 
-+ // Input stream for reading .class file
-+ //
-+diff --git openjdk.orig/hotspot/src/share/vm/classfile/stackMapTable.hpp openjdk/hotspot/src/share/vm/classfile/stackMapTable.hpp
-+index f876029..ac415b6 100644
-+--- openjdk.orig/hotspot/src/share/vm/classfile/stackMapTable.hpp
-++++ openjdk/hotspot/src/share/vm/classfile/stackMapTable.hpp
-+@@ -46,6 +46,9 @@
-+ #ifdef TARGET_ARCH_ppc
-+ # include "bytes_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "bytes_aarch64.hpp"
-++#endif
-+ 
-+ class StackMapReader;
-+ 
-+diff --git openjdk.orig/hotspot/src/share/vm/classfile/verifier.cpp openjdk/hotspot/src/share/vm/classfile/verifier.cpp
-+index c5c5e11..9c22a21 100644
-+--- openjdk.orig/hotspot/src/share/vm/classfile/verifier.cpp
-++++ openjdk/hotspot/src/share/vm/classfile/verifier.cpp
-+@@ -60,6 +60,9 @@
-+ #ifdef TARGET_ARCH_ppc
-+ # include "bytes_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "bytes_aarch64.hpp"
-++#endif
-+ 
-+ #define NOFAILOVER_MAJOR_VERSION 51
-+ 
-+diff --git openjdk.orig/hotspot/src/share/vm/code/codeBlob.cpp openjdk/hotspot/src/share/vm/code/codeBlob.cpp
-+index 244c320..429e0be 100644
-+--- openjdk.orig/hotspot/src/share/vm/code/codeBlob.cpp
-++++ openjdk/hotspot/src/share/vm/code/codeBlob.cpp
-+@@ -54,6 +54,9 @@
-+ #ifdef TARGET_ARCH_ppc
-+ # include "nativeInst_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "nativeInst_aarch64.hpp"
-++#endif
-+ #ifdef COMPILER1
-+ #include "c1/c1_Runtime1.hpp"
-+ #endif
-+diff --git openjdk.orig/hotspot/src/share/vm/code/compiledIC.hpp openjdk/hotspot/src/share/vm/code/compiledIC.hpp
-+index fe1cfb3..c9f6a2e 100644
-+--- openjdk.orig/hotspot/src/share/vm/code/compiledIC.hpp
-++++ openjdk/hotspot/src/share/vm/code/compiledIC.hpp
-+@@ -44,6 +44,9 @@
-+ #ifdef TARGET_ARCH_ppc
-+ # include "nativeInst_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "nativeInst_aarch64.hpp"
-++#endif
-+ 
-+ //-----------------------------------------------------------------------------
-+ // The CompiledIC represents a compiled inline cache.
-+diff --git openjdk.orig/hotspot/src/share/vm/code/icBuffer.cpp openjdk/hotspot/src/share/vm/code/icBuffer.cpp
-+index ed70457..d022482 100644
-+--- openjdk.orig/hotspot/src/share/vm/code/icBuffer.cpp
-++++ openjdk/hotspot/src/share/vm/code/icBuffer.cpp
-+@@ -52,6 +52,9 @@
-+ #ifdef TARGET_ARCH_ppc
-+ # include "assembler_ppc.inline.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "assembler_aarch64.inline.hpp"
-++#endif
-+ 
-+ 
-+ DEF_STUB_INTERFACE(ICStub);
-+diff --git openjdk.orig/hotspot/src/share/vm/code/relocInfo.cpp openjdk/hotspot/src/share/vm/code/relocInfo.cpp
-+index 4fd82df..78310e6 100644
-+--- openjdk.orig/hotspot/src/share/vm/code/relocInfo.cpp
-++++ openjdk/hotspot/src/share/vm/code/relocInfo.cpp
-+@@ -49,6 +49,10 @@
-+ # include "assembler_ppc.inline.hpp"
-+ # include "nativeInst_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "assembler_aarch64.inline.hpp"
-++# include "nativeInst_aarch64.hpp"
-++#endif
-+ 
-+ 
-+ const RelocationHolder RelocationHolder::none; // its type is relocInfo::none
-+diff --git openjdk.orig/hotspot/src/share/vm/code/relocInfo.hpp openjdk/hotspot/src/share/vm/code/relocInfo.hpp
-+index 1d14b44..3823889 100644
-+--- openjdk.orig/hotspot/src/share/vm/code/relocInfo.hpp
-++++ openjdk/hotspot/src/share/vm/code/relocInfo.hpp
-+@@ -435,6 +435,9 @@ class relocInfo VALUE_OBJ_CLASS_SPEC {
-+ #endif
-+ #ifdef TARGET_ARCH_ppc
-+ # include "relocInfo_ppc.hpp"
-++#endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "relocInfo_aarch64.hpp"
-+ #endif
-+ 
-+ 
-+diff --git openjdk.orig/hotspot/src/share/vm/code/vmreg.hpp openjdk/hotspot/src/share/vm/code/vmreg.hpp
-+index d57e6f8..1c18e47 100644
-+--- openjdk.orig/hotspot/src/share/vm/code/vmreg.hpp
-++++ openjdk/hotspot/src/share/vm/code/vmreg.hpp
-+@@ -42,6 +42,9 @@
-+ #ifdef TARGET_ARCH_ppc
-+ # include "register_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "register_aarch64.hpp"
-++#endif
-+ #ifdef COMPILER2
-+ #include "opto/adlcVMDeps.hpp"
-+ #include "utilities/ostream.hpp"
-+@@ -63,6 +66,9 @@
-+ #ifdef TARGET_ARCH_MODEL_ppc
-+ # include "adfiles/adGlobals_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_MODEL_aarch64
-++# include "adfiles/adGlobals_aarch64.hpp"
-++#endif
-+ #endif
-+ 
-+ //------------------------------VMReg------------------------------------------
-+@@ -182,6 +188,9 @@ public:
-+ #ifdef TARGET_ARCH_ppc
-+ # include "vmreg_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "vmreg_aarch64.hpp"
-++#endif
-+ 
-+ 
-+ };
-+diff --git openjdk.orig/hotspot/src/share/vm/compiler/disassembler.cpp openjdk/hotspot/src/share/vm/compiler/disassembler.cpp
-+index 9603e86..3a67259 100644
-+--- openjdk.orig/hotspot/src/share/vm/compiler/disassembler.cpp
-++++ openjdk/hotspot/src/share/vm/compiler/disassembler.cpp
-+@@ -47,6 +47,9 @@
-+ #ifdef TARGET_ARCH_ppc
-+ # include "depChecker_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "depChecker_aarch64.hpp"
-++#endif
-+ #ifdef SHARK
-+ #include "shark/sharkEntry.hpp"
-+ #endif
-+diff --git openjdk.orig/hotspot/src/share/vm/compiler/disassembler.hpp openjdk/hotspot/src/share/vm/compiler/disassembler.hpp
-+index a70b8cc..4c90c9a 100644
-+--- openjdk.orig/hotspot/src/share/vm/compiler/disassembler.hpp
-++++ openjdk/hotspot/src/share/vm/compiler/disassembler.hpp
-+@@ -78,6 +78,9 @@ class Disassembler {
-+ #endif
-+ #ifdef TARGET_ARCH_ppc
-+ # include "disassembler_ppc.hpp"
-++#endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "disassembler_aarch64.hpp"
-+ #endif
-+ 
-+ 
-+diff --git openjdk.orig/hotspot/src/share/vm/interpreter/abstractInterpreter.hpp openjdk/hotspot/src/share/vm/interpreter/abstractInterpreter.hpp
-+index d23f37a..24ca30e 100644
-+--- openjdk.orig/hotspot/src/share/vm/interpreter/abstractInterpreter.hpp
-++++ openjdk/hotspot/src/share/vm/interpreter/abstractInterpreter.hpp
-+@@ -44,6 +44,9 @@
-+ #ifdef TARGET_ARCH_MODEL_ppc
-+ # include "interp_masm_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_MODEL_aarch64
-++# include "interp_masm_aarch64.hpp"
-++#endif
-+ #ifdef TARGET_OS_FAMILY_linux
-+ # include "thread_linux.inline.hpp"
-+ #endif
-+diff --git openjdk.orig/hotspot/src/share/vm/interpreter/bytecode.hpp openjdk/hotspot/src/share/vm/interpreter/bytecode.hpp
-+index 107161a..205d0f7 100644
-+--- openjdk.orig/hotspot/src/share/vm/interpreter/bytecode.hpp
-++++ openjdk/hotspot/src/share/vm/interpreter/bytecode.hpp
-+@@ -43,6 +43,9 @@
-+ #ifdef TARGET_ARCH_ppc
-+ # include "bytes_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "bytes_aarch64.hpp"
-++#endif
-+ 
-+ class ciBytecodeStream;
-+ 
-+diff --git openjdk.orig/hotspot/src/share/vm/interpreter/bytecodeInterpreter.hpp openjdk/hotspot/src/share/vm/interpreter/bytecodeInterpreter.hpp
-+index e637414..308ad3b 100644
-+--- openjdk.orig/hotspot/src/share/vm/interpreter/bytecodeInterpreter.hpp
-++++ openjdk/hotspot/src/share/vm/interpreter/bytecodeInterpreter.hpp
-+@@ -47,6 +47,9 @@
-+ #ifdef TARGET_ARCH_ppc
-+ # include "bytes_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "bytes_aarch64.hpp"
-++#endif
-+ 
-+ #ifdef CC_INTERP
-+ 
-+@@ -618,6 +621,9 @@ void print();
-+ #ifdef TARGET_ARCH_ppc
-+ # include "bytecodeInterpreter_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "bytecodeInterpreter_aarch64.hpp"
-++#endif
-+ 
-+ 
-+ }; // BytecodeInterpreter
-+diff --git openjdk.orig/hotspot/src/share/vm/interpreter/bytecodeInterpreter.inline.hpp openjdk/hotspot/src/share/vm/interpreter/bytecodeInterpreter.inline.hpp
-+index 3715a52..0d6a8aa 100644
-+--- openjdk.orig/hotspot/src/share/vm/interpreter/bytecodeInterpreter.inline.hpp
-++++ openjdk/hotspot/src/share/vm/interpreter/bytecodeInterpreter.inline.hpp
-+@@ -58,6 +58,9 @@
-+ #ifdef TARGET_ARCH_ppc
-+ # include "bytecodeInterpreter_ppc.inline.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "bytecodeInterpreter_aarch64.inline.hpp"
-++#endif
-+ 
-+ #endif // CC_INTERP
-+ 
-+diff --git openjdk.orig/hotspot/src/share/vm/interpreter/bytecodeStream.hpp openjdk/hotspot/src/share/vm/interpreter/bytecodeStream.hpp
-+index 6106eac..f3dee0a 100644
-+--- openjdk.orig/hotspot/src/share/vm/interpreter/bytecodeStream.hpp
-++++ openjdk/hotspot/src/share/vm/interpreter/bytecodeStream.hpp
-+@@ -43,6 +43,9 @@
-+ #ifdef TARGET_ARCH_ppc
-+ # include "bytes_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "bytes_aarch64.hpp"
-++#endif
-+ 
-+ // A BytecodeStream is used for fast iteration over the bytecodes
-+ // of a methodOop.
-+diff --git openjdk.orig/hotspot/src/share/vm/interpreter/bytecodes.cpp openjdk/hotspot/src/share/vm/interpreter/bytecodes.cpp
-+index 04f3f64..48ef30e 100644
-+--- openjdk.orig/hotspot/src/share/vm/interpreter/bytecodes.cpp
-++++ openjdk/hotspot/src/share/vm/interpreter/bytecodes.cpp
-+@@ -41,6 +41,9 @@
-+ #ifdef TARGET_ARCH_ppc
-+ # include "bytes_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "bytes_aarch64.hpp"
-++#endif
-+ 
-+ 
-+ #if defined(WIN32) && (defined(_MSC_VER) && (_MSC_VER < 1600))
-+diff --git openjdk.orig/hotspot/src/share/vm/interpreter/cppInterpreter.hpp openjdk/hotspot/src/share/vm/interpreter/cppInterpreter.hpp
-+index e3a9f2e..8347473 100644
-+--- openjdk.orig/hotspot/src/share/vm/interpreter/cppInterpreter.hpp
-++++ openjdk/hotspot/src/share/vm/interpreter/cppInterpreter.hpp
-+@@ -101,6 +101,9 @@ class CppInterpreter: public AbstractInterpreter {
-+ #ifdef TARGET_ARCH_ppc
-+ # include "cppInterpreter_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "cppInterpreter_aarch64.hpp"
-++#endif
-+ 
-+ 
-+ };
-+diff --git openjdk.orig/hotspot/src/share/vm/interpreter/cppInterpreterGenerator.hpp openjdk/hotspot/src/share/vm/interpreter/cppInterpreterGenerator.hpp
-+index c27805e..272f6e8 100644
-+--- openjdk.orig/hotspot/src/share/vm/interpreter/cppInterpreterGenerator.hpp
-++++ openjdk/hotspot/src/share/vm/interpreter/cppInterpreterGenerator.hpp
-+@@ -59,6 +59,9 @@ class CppInterpreterGenerator: public AbstractInterpreterGenerator {
-+ #ifdef TARGET_ARCH_ppc
-+ # include "cppInterpreterGenerator_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "cppInterpreterGenerator_aarch64.hpp"
-++#endif
-+ 
-+ };
-+ 
-+diff --git openjdk.orig/hotspot/src/share/vm/interpreter/interpreter.hpp openjdk/hotspot/src/share/vm/interpreter/interpreter.hpp
-+index 0ab0be7..6a6822f 100644
-+--- openjdk.orig/hotspot/src/share/vm/interpreter/interpreter.hpp
-++++ openjdk/hotspot/src/share/vm/interpreter/interpreter.hpp
-+@@ -158,6 +158,9 @@ class Interpreter: public CC_INTERP_ONLY(CppInterpreter) NOT_CC_INTERP(TemplateI
-+ #ifdef TARGET_ARCH_ppc
-+ # include "interpreter_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "interpreter_aarch64.hpp"
-++#endif
-+ 
-+ };
-+ 
-+diff --git openjdk.orig/hotspot/src/share/vm/interpreter/interpreterGenerator.hpp openjdk/hotspot/src/share/vm/interpreter/interpreterGenerator.hpp
-+index 7bc43ec..0434ca3 100644
-+--- openjdk.orig/hotspot/src/share/vm/interpreter/interpreterGenerator.hpp
-++++ openjdk/hotspot/src/share/vm/interpreter/interpreterGenerator.hpp
-+@@ -56,6 +56,9 @@ InterpreterGenerator(StubQueue* _code);
-+ #ifdef TARGET_ARCH_ppc
-+ # include "interpreterGenerator_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "interpreterGenerator_aarch64.hpp"
-++#endif
-+ 
-+ 
-+ };
-+diff --git openjdk.orig/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp openjdk/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp
-+index e451c04..37700fb 100644
-+--- openjdk.orig/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp
-++++ openjdk/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp
-+@@ -71,6 +71,9 @@
-+ #ifdef TARGET_ARCH_ppc
-+ # include "vm_version_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "vm_version_aarch64.hpp"
-++#endif
-+ #ifdef COMPILER2
-+ #include "opto/runtime.hpp"
-+ #endif
-+diff --git openjdk.orig/hotspot/src/share/vm/interpreter/interpreterRuntime.hpp openjdk/hotspot/src/share/vm/interpreter/interpreterRuntime.hpp
-+index 93c1a9e..425400e 100644
-+--- openjdk.orig/hotspot/src/share/vm/interpreter/interpreterRuntime.hpp
-++++ openjdk/hotspot/src/share/vm/interpreter/interpreterRuntime.hpp
-+@@ -164,6 +164,9 @@ class InterpreterRuntime: AllStatic {
-+ #endif
-+ #ifdef TARGET_ARCH_ppc
-+ # include "interpreterRT_ppc.hpp"
-++#endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "interpreterRT_aarch64.hpp"
-+ #endif
-+ 
-+ 
-+diff --git openjdk.orig/hotspot/src/share/vm/interpreter/templateInterpreter.hpp openjdk/hotspot/src/share/vm/interpreter/templateInterpreter.hpp
-+index 25d74f7..f78a16e 100644
-+--- openjdk.orig/hotspot/src/share/vm/interpreter/templateInterpreter.hpp
-++++ openjdk/hotspot/src/share/vm/interpreter/templateInterpreter.hpp
-+@@ -198,6 +198,9 @@ class TemplateInterpreter: public AbstractInterpreter {
-+ #ifdef TARGET_ARCH_ppc
-+ # include "templateInterpreter_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "templateInterpreter_aarch64.hpp"
-++#endif
-+ 
-+ 
-+ };
-+diff --git openjdk.orig/hotspot/src/share/vm/interpreter/templateInterpreterGenerator.hpp openjdk/hotspot/src/share/vm/interpreter/templateInterpreterGenerator.hpp
-+index fb7bdc5..6007630 100644
-+--- openjdk.orig/hotspot/src/share/vm/interpreter/templateInterpreterGenerator.hpp
-++++ openjdk/hotspot/src/share/vm/interpreter/templateInterpreterGenerator.hpp
-+@@ -101,6 +101,9 @@ class TemplateInterpreterGenerator: public AbstractInterpreterGenerator {
-+ #ifdef TARGET_ARCH_ppc
-+ # include "templateInterpreterGenerator_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "templateInterpreterGenerator_aarch64.hpp"
-++#endif
-+ 
-+ 
-+ };
-+diff --git openjdk.orig/hotspot/src/share/vm/interpreter/templateTable.hpp openjdk/hotspot/src/share/vm/interpreter/templateTable.hpp
-+index 5d2a7e8..c5e0f0a 100644
-+--- openjdk.orig/hotspot/src/share/vm/interpreter/templateTable.hpp
-++++ openjdk/hotspot/src/share/vm/interpreter/templateTable.hpp
-+@@ -43,6 +43,9 @@
-+ #ifdef TARGET_ARCH_MODEL_ppc
-+ # include "interp_masm_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_MODEL_aarch64
-++# include "interp_masm_aarch64.hpp"
-++#endif
-+ 
-+ #ifndef CC_INTERP
-+ // All the necessary definitions used for (bytecode) template generation. Instead of
-+@@ -373,6 +376,9 @@ class TemplateTable: AllStatic {
-+ #ifdef TARGET_ARCH_MODEL_ppc
-+ # include "templateTable_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_MODEL_aarch64
-++# include "templateTable_aarch64.hpp"
-++#endif
-+ 
-+ };
-+ #endif /* !CC_INTERP */
-+diff --git openjdk.orig/hotspot/src/share/vm/oops/constantPoolOop.hpp openjdk/hotspot/src/share/vm/oops/constantPoolOop.hpp
-+index c2f985d..3d0d0fc 100644
-+--- openjdk.orig/hotspot/src/share/vm/oops/constantPoolOop.hpp
-++++ openjdk/hotspot/src/share/vm/oops/constantPoolOop.hpp
-+@@ -45,6 +45,9 @@
-+ #ifdef TARGET_ARCH_ppc
-+ # include "bytes_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "bytes_aarch64.hpp"
-++#endif
-+ 
-+ // A constantPool is an array containing class constants as described in the
-+ // class file.
-+diff --git openjdk.orig/hotspot/src/share/vm/oops/oop.inline.hpp openjdk/hotspot/src/share/vm/oops/oop.inline.hpp
-+index db14b2e..c8b326f 100644
-+--- openjdk.orig/hotspot/src/share/vm/oops/oop.inline.hpp
-++++ openjdk/hotspot/src/share/vm/oops/oop.inline.hpp
-+@@ -58,6 +58,9 @@
-+ #ifdef TARGET_ARCH_ppc
-+ # include "bytes_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "bytes_aarch64.hpp"
-++#endif
-+ 
-+ // Implementation of all inlined member functions defined in oop.hpp
-+ // We need a separate file to avoid circular references
-+diff --git openjdk.orig/hotspot/src/share/vm/opto/buildOopMap.cpp openjdk/hotspot/src/share/vm/opto/buildOopMap.cpp
-+index fc73160..2c5ec41 100644
-+--- openjdk.orig/hotspot/src/share/vm/opto/buildOopMap.cpp
-++++ openjdk/hotspot/src/share/vm/opto/buildOopMap.cpp
-+@@ -47,6 +47,9 @@
-+ #ifdef TARGET_ARCH_ppc
-+ # include "vmreg_ppc.inline.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "vmreg_aarch64.inline.hpp"
-++#endif
-+ 
-+ // The functions in this file builds OopMaps after all scheduling is done.
-+ //
-+diff --git openjdk.orig/hotspot/src/share/vm/opto/c2_globals.hpp openjdk/hotspot/src/share/vm/opto/c2_globals.hpp
-+index f73dcbd..462c875 100644
-+--- openjdk.orig/hotspot/src/share/vm/opto/c2_globals.hpp
-++++ openjdk/hotspot/src/share/vm/opto/c2_globals.hpp
-+@@ -35,6 +35,9 @@
-+ #ifdef TARGET_ARCH_arm
-+ # include "c2_globals_arm.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "c2_globals_aarch64.hpp"
-++#endif
-+ #ifdef TARGET_OS_FAMILY_linux
-+ # include "c2_globals_linux.hpp"
-+ #endif
-+diff --git openjdk.orig/hotspot/src/share/vm/opto/c2compiler.cpp openjdk/hotspot/src/share/vm/opto/c2compiler.cpp
-+index 713e3f1..948e447 100644
-+--- openjdk.orig/hotspot/src/share/vm/opto/c2compiler.cpp
-++++ openjdk/hotspot/src/share/vm/opto/c2compiler.cpp
-+@@ -43,6 +43,9 @@
-+ #ifdef TARGET_ARCH_MODEL_ppc
-+ # include "adfiles/ad_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_MODEL_aarch64
-++# include "adfiles/ad_aarch64.hpp"
-++#endif
-+ 
-+ 
-+ volatile int C2Compiler::_runtimes = uninitialized;
-+diff --git openjdk.orig/hotspot/src/share/vm/opto/compile.cpp openjdk/hotspot/src/share/vm/opto/compile.cpp
-+index a7ee07a..91dc290 100644
-+--- openjdk.orig/hotspot/src/share/vm/opto/compile.cpp
-++++ openjdk/hotspot/src/share/vm/opto/compile.cpp
-+@@ -80,6 +80,9 @@
-+ #ifdef TARGET_ARCH_MODEL_ppc
-+ # include "adfiles/ad_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_MODEL_aarch64
-++# include "adfiles/ad_aarch64.hpp"
-++#endif
-+ 
-+ 
-+ // -------------------- Compile::mach_constant_base_node -----------------------
-+diff --git openjdk.orig/hotspot/src/share/vm/opto/gcm.cpp openjdk/hotspot/src/share/vm/opto/gcm.cpp
-+index 8b8f311..4deb0b4 100644
-+--- openjdk.orig/hotspot/src/share/vm/opto/gcm.cpp
-++++ openjdk/hotspot/src/share/vm/opto/gcm.cpp
-+@@ -53,6 +53,9 @@
-+ #ifdef TARGET_ARCH_MODEL_ppc
-+ # include "adfiles/ad_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_MODEL_aarch64
-++# include "adfiles/ad_aarch64.hpp"
-++#endif
-+ 
-+ // Portions of code courtesy of Clifford Click
-+ 
-+diff --git openjdk.orig/hotspot/src/share/vm/opto/lcm.cpp openjdk/hotspot/src/share/vm/opto/lcm.cpp
-+index aee6123..4b9aaed 100644
-+--- openjdk.orig/hotspot/src/share/vm/opto/lcm.cpp
-++++ openjdk/hotspot/src/share/vm/opto/lcm.cpp
-+@@ -48,6 +48,9 @@
-+ #ifdef TARGET_ARCH_MODEL_ppc
-+ # include "adfiles/ad_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_MODEL_aarch64
-++# include "adfiles/ad_aarch64.hpp"
-++#endif
-+ 
-+ // Optimization - Graph Style
-+ 
-+diff --git openjdk.orig/hotspot/src/share/vm/opto/locknode.hpp openjdk/hotspot/src/share/vm/opto/locknode.hpp
-+index 91b99bc..665594f 100644
-+--- openjdk.orig/hotspot/src/share/vm/opto/locknode.hpp
-++++ openjdk/hotspot/src/share/vm/opto/locknode.hpp
-+@@ -46,6 +46,9 @@
-+ #ifdef TARGET_ARCH_MODEL_ppc
-+ # include "adfiles/ad_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_MODEL_aarch64
-++# include "adfiles/ad_aarch64.hpp"
-++#endif
-+ 
-+ //------------------------------BoxLockNode------------------------------------
-+ class BoxLockNode : public Node {
-+diff --git openjdk.orig/hotspot/src/share/vm/opto/matcher.cpp openjdk/hotspot/src/share/vm/opto/matcher.cpp
-+index ca2d4e3..d0f55c5 100644
-+--- openjdk.orig/hotspot/src/share/vm/opto/matcher.cpp
-++++ openjdk/hotspot/src/share/vm/opto/matcher.cpp
-+@@ -55,6 +55,9 @@
-+ #ifdef TARGET_ARCH_MODEL_ppc
-+ # include "adfiles/ad_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_MODEL_aarch64
-++# include "adfiles/ad_aarch64.hpp"
-++#endif
-+ 
-+ OptoReg::Name OptoReg::c_frame_pointer;
-+ 
-+diff --git openjdk.orig/hotspot/src/share/vm/opto/output.hpp openjdk/hotspot/src/share/vm/opto/output.hpp
-+index 50b6e76..6a920b2 100644
-+--- openjdk.orig/hotspot/src/share/vm/opto/output.hpp
-++++ openjdk/hotspot/src/share/vm/opto/output.hpp
-+@@ -45,6 +45,9 @@
-+ #ifdef TARGET_ARCH_MODEL_ppc
-+ # include "adfiles/ad_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_MODEL_aarch64
-++# include "adfiles/ad_aarch64.hpp"
-++#endif
-+ 
-+ class Arena;
-+ class Bundle;
-+diff --git openjdk.orig/hotspot/src/share/vm/opto/regmask.cpp openjdk/hotspot/src/share/vm/opto/regmask.cpp
-+index ce220f0..20c6028 100644
-+--- openjdk.orig/hotspot/src/share/vm/opto/regmask.cpp
-++++ openjdk/hotspot/src/share/vm/opto/regmask.cpp
-+@@ -43,6 +43,9 @@
-+ #ifdef TARGET_ARCH_MODEL_ppc
-+ # include "adfiles/ad_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_MODEL_aarch64
-++# include "adfiles/ad_aarch64.hpp"
-++#endif
-+ 
-+ #define RM_SIZE _RM_SIZE /* a constant private to the class RegMask */
-+ 
-+diff --git openjdk.orig/hotspot/src/share/vm/opto/regmask.hpp openjdk/hotspot/src/share/vm/opto/regmask.hpp
-+index e50ff84..26c6854 100644
-+--- openjdk.orig/hotspot/src/share/vm/opto/regmask.hpp
-++++ openjdk/hotspot/src/share/vm/opto/regmask.hpp
-+@@ -46,6 +46,9 @@
-+ #ifdef TARGET_ARCH_MODEL_ppc
-+ # include "adfiles/adGlobals_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_MODEL_aarch64
-++# include "adfiles/adGlobals_aarch64.hpp"
-++#endif
-+ 
-+ // Some fun naming (textual) substitutions:
-+ //
-+diff --git openjdk.orig/hotspot/src/share/vm/opto/runtime.cpp openjdk/hotspot/src/share/vm/opto/runtime.cpp
-+index d315f10..11a58b1 100644
-+--- openjdk.orig/hotspot/src/share/vm/opto/runtime.cpp
-++++ openjdk/hotspot/src/share/vm/opto/runtime.cpp
-+@@ -86,6 +86,9 @@
-+ #ifdef TARGET_ARCH_MODEL_ppc
-+ # include "adfiles/ad_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_MODEL_aarch64
-++# include "adfiles/ad_aarch64.hpp"
-++#endif
-+ 
-+ 
-+ // For debugging purposes:
-+diff --git openjdk.orig/hotspot/src/share/vm/prims/jniCheck.cpp openjdk/hotspot/src/share/vm/prims/jniCheck.cpp
-+index 3bf4ecd..2ad9014 100644
-+--- openjdk.orig/hotspot/src/share/vm/prims/jniCheck.cpp
-++++ openjdk/hotspot/src/share/vm/prims/jniCheck.cpp
-+@@ -51,6 +51,9 @@
-+ #ifdef TARGET_ARCH_ppc
-+ # include "jniTypes_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "jniTypes_aarch64.hpp"
-++#endif
-+ 
-+ 
-+ // Heap objects are allowed to be directly referenced only in VM code,
-+diff --git openjdk.orig/hotspot/src/share/vm/prims/jni_md.h openjdk/hotspot/src/share/vm/prims/jni_md.h
-+index 7fa5829..3bd4e31 100644
-+--- openjdk.orig/hotspot/src/share/vm/prims/jni_md.h
-++++ openjdk/hotspot/src/share/vm/prims/jni_md.h
-+@@ -39,6 +39,9 @@
-+ #ifdef TARGET_ARCH_ppc
-+ # include "jni_ppc.h"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "jni_aarch64.h"
-++#endif
-+ 
-+ 
-+ /*
-+diff --git openjdk.orig/hotspot/src/share/vm/prims/jvmtiClassFileReconstituter.cpp openjdk/hotspot/src/share/vm/prims/jvmtiClassFileReconstituter.cpp
-+index 97dd154..fd1fa43 100644
-+--- openjdk.orig/hotspot/src/share/vm/prims/jvmtiClassFileReconstituter.cpp
-++++ openjdk/hotspot/src/share/vm/prims/jvmtiClassFileReconstituter.cpp
-+@@ -43,6 +43,9 @@
-+ #ifdef TARGET_ARCH_ppc
-+ # include "bytes_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "bytes_aarch64.hpp"
-++#endif
-+ // FIXME: add Deprecated, LVTT attributes
-+ // FIXME: fix Synthetic attribute
-+ // FIXME: per Serguei, add error return handling for constantPoolOopDesc::copy_cpool_bytes()
-+diff --git openjdk.orig/hotspot/src/share/vm/prims/methodHandles.hpp openjdk/hotspot/src/share/vm/prims/methodHandles.hpp
-+index 514ba6a..ea747d0 100644
-+--- openjdk.orig/hotspot/src/share/vm/prims/methodHandles.hpp
-++++ openjdk/hotspot/src/share/vm/prims/methodHandles.hpp
-+@@ -738,6 +738,9 @@ public:
-+ #ifdef TARGET_ARCH_ppc
-+ # include "methodHandles_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "methodHandles_aarch64.hpp"
-++#endif
-+ };
-+ 
-+ 
-+diff --git openjdk.orig/hotspot/src/share/vm/runtime/atomic.cpp openjdk/hotspot/src/share/vm/runtime/atomic.cpp
-+index 80780d7..5a34f15 100644
-+--- openjdk.orig/hotspot/src/share/vm/runtime/atomic.cpp
-++++ openjdk/hotspot/src/share/vm/runtime/atomic.cpp
-+@@ -60,6 +60,9 @@
-+ #ifdef TARGET_OS_ARCH_linux_ppc
-+ # include "atomic_linux_ppc.inline.hpp"
-+ #endif
-++#ifdef TARGET_OS_ARCH_linux_aarch64
-++# include "atomic_linux_aarch64.inline.hpp"
-++#endif
-+ #ifdef TARGET_OS_ARCH_bsd_x86
-+ # include "atomic_bsd_x86.inline.hpp"
-+ #endif
-+diff --git openjdk.orig/hotspot/src/share/vm/runtime/deoptimization.cpp openjdk/hotspot/src/share/vm/runtime/deoptimization.cpp
-+index 4735588..4e7958a 100644
-+--- openjdk.orig/hotspot/src/share/vm/runtime/deoptimization.cpp
-++++ openjdk/hotspot/src/share/vm/runtime/deoptimization.cpp
-+@@ -65,6 +65,9 @@
-+ #ifdef TARGET_ARCH_ppc
-+ # include "vmreg_ppc.inline.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "vmreg_aarch64.inline.hpp"
-++#endif
-+ #ifdef COMPILER2
-+ #ifdef TARGET_ARCH_MODEL_x86_32
-+ # include "adfiles/ad_x86_32.hpp"
-+@@ -84,6 +87,9 @@
-+ #ifdef TARGET_ARCH_MODEL_ppc
-+ # include "adfiles/ad_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_MODEL_aarch64
-++# include "adfiles/ad_aarch64.hpp"
-++#endif
-+ #endif
-+ 
-+ bool DeoptimizationMarker::_is_active = false;
-+diff --git openjdk.orig/hotspot/src/share/vm/runtime/dtraceJSDT.hpp openjdk/hotspot/src/share/vm/runtime/dtraceJSDT.hpp
-+index bff4310..1129cd6 100644
-+--- openjdk.orig/hotspot/src/share/vm/runtime/dtraceJSDT.hpp
-++++ openjdk/hotspot/src/share/vm/runtime/dtraceJSDT.hpp
-+@@ -41,6 +41,9 @@
-+ #ifdef TARGET_ARCH_ppc
-+ # include "nativeInst_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "nativeInst_aarch64.hpp"
-++#endif
-+ 
-+ class RegisteredProbes;
-+ typedef jlong OpaqueProbes;
-+diff --git openjdk.orig/hotspot/src/share/vm/runtime/frame.cpp openjdk/hotspot/src/share/vm/runtime/frame.cpp
-+index 7ae9aa8..6654714 100644
-+--- openjdk.orig/hotspot/src/share/vm/runtime/frame.cpp
-++++ openjdk/hotspot/src/share/vm/runtime/frame.cpp
-+@@ -59,6 +59,9 @@
-+ #ifdef TARGET_ARCH_ppc
-+ # include "nativeInst_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "nativeInst_aarch64.hpp"
-++#endif
-+ 
-+ RegisterMap::RegisterMap(JavaThread *thread, bool update_map) {
-+   _thread         = thread;
-+diff --git openjdk.orig/hotspot/src/share/vm/runtime/frame.hpp openjdk/hotspot/src/share/vm/runtime/frame.hpp
-+index c55380e..c13caae 100644
-+--- openjdk.orig/hotspot/src/share/vm/runtime/frame.hpp
-++++ openjdk/hotspot/src/share/vm/runtime/frame.hpp
-+@@ -50,6 +50,9 @@
-+ #ifdef TARGET_ARCH_MODEL_ppc
-+ # include "adfiles/adGlobals_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_MODEL_aarch64
-++# include "adfiles/adGlobals_aarch64.hpp"
-++#endif
-+ #endif
-+ #ifdef ZERO
-+ #ifdef TARGET_ARCH_zero
-+@@ -491,6 +494,9 @@ class frame VALUE_OBJ_CLASS_SPEC {
-+ #ifdef TARGET_ARCH_ppc
-+ # include "frame_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "frame_aarch64.hpp"
-++#endif
-+ 
-+ };
-+ 
-+diff --git openjdk.orig/hotspot/src/share/vm/runtime/frame.inline.hpp openjdk/hotspot/src/share/vm/runtime/frame.inline.hpp
-+index b80b042..f6e1b0e 100644
-+--- openjdk.orig/hotspot/src/share/vm/runtime/frame.inline.hpp
-++++ openjdk/hotspot/src/share/vm/runtime/frame.inline.hpp
-+@@ -46,6 +46,9 @@
-+ #ifdef TARGET_ARCH_ppc
-+ # include "jniTypes_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "jniTypes_aarch64.hpp"
-++#endif
-+ #ifdef ZERO
-+ #ifdef TARGET_ARCH_zero
-+ # include "entryFrame_zero.hpp"
-+@@ -100,6 +103,9 @@ inline bool frame::is_first_frame() const {
-+ #ifdef TARGET_ARCH_ppc
-+ # include "frame_ppc.inline.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "frame_aarch64.inline.hpp"
-++#endif
-+ 
-+ 
-+ #endif // SHARE_VM_RUNTIME_FRAME_INLINE_HPP
-+diff --git openjdk.orig/hotspot/src/share/vm/runtime/globals.hpp openjdk/hotspot/src/share/vm/runtime/globals.hpp
-+index 10d74cd..4cc5dfb 100644
-+--- openjdk.orig/hotspot/src/share/vm/runtime/globals.hpp
-++++ openjdk/hotspot/src/share/vm/runtime/globals.hpp
-+@@ -52,6 +52,9 @@
-+ #ifdef TARGET_ARCH_ppc
-+ # include "globals_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "globals_aarch64.hpp"
-++#endif
-+ #ifdef TARGET_OS_FAMILY_linux
-+ # include "globals_linux.hpp"
-+ #endif
-+@@ -88,6 +91,9 @@
-+ #ifdef TARGET_OS_ARCH_linux_ppc
-+ # include "globals_linux_ppc.hpp"
-+ #endif
-++#ifdef TARGET_OS_ARCH_linux_aarch64
-++# include "globals_linux_aarch64.hpp"
-++#endif
-+ #ifdef TARGET_OS_ARCH_bsd_x86
-+ # include "globals_bsd_x86.hpp"
-+ #endif
-+@@ -107,6 +113,9 @@
-+ #ifdef TARGET_ARCH_ppc
-+ # include "c1_globals_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "c1_globals_aarch64.hpp"
-++#endif
-+ #ifdef TARGET_OS_FAMILY_linux
-+ # include "c1_globals_linux.hpp"
-+ #endif
-+@@ -130,6 +139,9 @@
-+ #ifdef TARGET_ARCH_arm
-+ # include "c2_globals_arm.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "c2_globals_aarch64.hpp"
-++#endif
-+ #ifdef TARGET_OS_FAMILY_linux
-+ # include "c2_globals_linux.hpp"
-+ #endif
-+diff --git openjdk.orig/hotspot/src/share/vm/runtime/icache.hpp openjdk/hotspot/src/share/vm/runtime/icache.hpp
-+index d460a0f..9a3b9c8 100644
-+--- openjdk.orig/hotspot/src/share/vm/runtime/icache.hpp
-++++ openjdk/hotspot/src/share/vm/runtime/icache.hpp
-+@@ -83,6 +83,9 @@ class AbstractICache : AllStatic {
-+ #ifdef TARGET_ARCH_ppc
-+ # include "icache_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "icache_aarch64.hpp"
-++#endif
-+ 
-+ 
-+ 
-+diff --git openjdk.orig/hotspot/src/share/vm/runtime/java.cpp openjdk/hotspot/src/share/vm/runtime/java.cpp
-+index fc3b67a..46794b0 100644
-+--- openjdk.orig/hotspot/src/share/vm/runtime/java.cpp
-++++ openjdk/hotspot/src/share/vm/runtime/java.cpp
-+@@ -78,6 +78,9 @@
-+ #ifdef TARGET_ARCH_ppc
-+ # include "vm_version_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "vm_version_aarch64.hpp"
-++#endif
-+ #ifdef TARGET_OS_FAMILY_linux
-+ # include "thread_linux.inline.hpp"
-+ #endif
-+diff --git openjdk.orig/hotspot/src/share/vm/runtime/javaCalls.hpp openjdk/hotspot/src/share/vm/runtime/javaCalls.hpp
-+index d4f8595..bc2ca9b 100644
-+--- openjdk.orig/hotspot/src/share/vm/runtime/javaCalls.hpp
-++++ openjdk/hotspot/src/share/vm/runtime/javaCalls.hpp
-+@@ -45,6 +45,9 @@
-+ #ifdef TARGET_ARCH_ppc
-+ # include "jniTypes_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "jniTypes_aarch64.hpp"
-++#endif
-+ #ifdef TARGET_OS_FAMILY_linux
-+ # include "thread_linux.inline.hpp"
-+ #endif
-+diff --git openjdk.orig/hotspot/src/share/vm/runtime/javaFrameAnchor.hpp openjdk/hotspot/src/share/vm/runtime/javaFrameAnchor.hpp
-+index 8374aa2..6be5f79 100644
-+--- openjdk.orig/hotspot/src/share/vm/runtime/javaFrameAnchor.hpp
-++++ openjdk/hotspot/src/share/vm/runtime/javaFrameAnchor.hpp
-+@@ -47,6 +47,9 @@
-+ #ifdef TARGET_OS_ARCH_linux_arm
-+ # include "orderAccess_linux_arm.inline.hpp"
-+ #endif
-++#ifdef TARGET_OS_ARCH_linux_aarch64
-++# include "orderAccess_linux_aarch64.inline.hpp"
-++#endif
-+ #ifdef TARGET_OS_ARCH_linux_ppc
-+ # include "orderAccess_linux_ppc.inline.hpp"
-+ #endif
-+@@ -121,6 +124,9 @@ friend class JavaCallWrapper;
-+ #ifdef TARGET_ARCH_ppc
-+ # include "javaFrameAnchor_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "javaFrameAnchor_aarch64.hpp"
-++#endif
-+ 
-+ 
-+ public:
-+diff --git openjdk.orig/hotspot/src/share/vm/runtime/os.hpp openjdk/hotspot/src/share/vm/runtime/os.hpp
-+index 5867deb..0f1fbb4 100644
-+--- openjdk.orig/hotspot/src/share/vm/runtime/os.hpp
-++++ openjdk/hotspot/src/share/vm/runtime/os.hpp
-+@@ -719,6 +719,9 @@ class os: AllStatic {
-+ #ifdef TARGET_OS_ARCH_linux_ppc
-+ # include "os_linux_ppc.hpp"
-+ #endif
-++#ifdef TARGET_OS_ARCH_linux_aarch64
-++# include "os_linux_aarch64.hpp"
-++#endif
-+ #ifdef TARGET_OS_ARCH_bsd_x86
-+ # include "os_bsd_x86.hpp"
-+ #endif
-+diff --git openjdk.orig/hotspot/src/share/vm/runtime/registerMap.hpp openjdk/hotspot/src/share/vm/runtime/registerMap.hpp
-+index 5dd677a..7bd425f 100644
-+--- openjdk.orig/hotspot/src/share/vm/runtime/registerMap.hpp
-++++ openjdk/hotspot/src/share/vm/runtime/registerMap.hpp
-+@@ -42,6 +42,9 @@
-+ #ifdef TARGET_ARCH_ppc
-+ # include "register_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "register_aarch64.hpp"
-++#endif
-+ 
-+ class JavaThread;
-+ 
-+@@ -150,6 +153,9 @@ class RegisterMap : public StackObj {
-+ #ifdef TARGET_ARCH_ppc
-+ # include "registerMap_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "registerMap_aarch64.hpp"
-++#endif
-+ 
-+ };
-+ 
-+diff --git openjdk.orig/hotspot/src/share/vm/runtime/relocator.hpp openjdk/hotspot/src/share/vm/runtime/relocator.hpp
-+index c34866f..790bd80 100644
-+--- openjdk.orig/hotspot/src/share/vm/runtime/relocator.hpp
-++++ openjdk/hotspot/src/share/vm/runtime/relocator.hpp
-+@@ -42,6 +42,9 @@
-+ #ifdef TARGET_ARCH_ppc
-+ # include "bytes_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "bytes_aarch64.hpp"
-++#endif
-+ 
-+ // This code has been converted from the 1.1E java virtual machine
-+ // Thanks to the JavaTopics group for using the code
-+diff --git openjdk.orig/hotspot/src/share/vm/runtime/safepoint.cpp openjdk/hotspot/src/share/vm/runtime/safepoint.cpp
-+index c29d257..a842bb3 100644
-+--- openjdk.orig/hotspot/src/share/vm/runtime/safepoint.cpp
-++++ openjdk/hotspot/src/share/vm/runtime/safepoint.cpp
-+@@ -70,6 +70,10 @@
-+ # include "nativeInst_ppc.hpp"
-+ # include "vmreg_ppc.inline.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "nativeInst_aarch64.hpp"
-++# include "vmreg_aarch64.inline.hpp"
-++#endif
-+ #ifdef TARGET_OS_FAMILY_linux
-+ # include "thread_linux.inline.hpp"
-+ #endif
-+diff --git openjdk.orig/hotspot/src/share/vm/runtime/sharedRuntime.cpp openjdk/hotspot/src/share/vm/runtime/sharedRuntime.cpp
-+index c25dcfe..aa7caff 100644
-+--- openjdk.orig/hotspot/src/share/vm/runtime/sharedRuntime.cpp
-++++ openjdk/hotspot/src/share/vm/runtime/sharedRuntime.cpp
-+@@ -76,6 +76,10 @@
-+ # include "nativeInst_ppc.hpp"
-+ # include "vmreg_ppc.inline.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "nativeInst_aarch64.hpp"
-++# include "vmreg_aarch64.inline.hpp"
-++#endif
-+ #ifdef COMPILER1
-+ #include "c1/c1_Runtime1.hpp"
-+ #endif
-+diff --git openjdk.orig/hotspot/src/share/vm/runtime/stackValueCollection.cpp openjdk/hotspot/src/share/vm/runtime/stackValueCollection.cpp
-+index 110f712..779f994 100644
-+--- openjdk.orig/hotspot/src/share/vm/runtime/stackValueCollection.cpp
-++++ openjdk/hotspot/src/share/vm/runtime/stackValueCollection.cpp
-+@@ -39,6 +39,9 @@
-+ #ifdef TARGET_ARCH_ppc
-+ # include "jniTypes_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "jniTypes_aarch64.hpp"
-++#endif
-+ 
-+ jint StackValueCollection::int_at(int slot) const {
-+   intptr_t val =  at(slot)->get_int();
-+diff --git openjdk.orig/hotspot/src/share/vm/runtime/statSampler.cpp openjdk/hotspot/src/share/vm/runtime/statSampler.cpp
-+index 0b24def..c82a214 100644
-+--- openjdk.orig/hotspot/src/share/vm/runtime/statSampler.cpp
-++++ openjdk/hotspot/src/share/vm/runtime/statSampler.cpp
-+@@ -48,6 +48,9 @@
-+ #ifdef TARGET_ARCH_ppc
-+ # include "vm_version_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "vm_version_aarch64.hpp"
-++#endif
-+ 
-+ // --------------------------------------------------------
-+ // StatSamplerTask
-+diff --git openjdk.orig/hotspot/src/share/vm/runtime/stubCodeGenerator.cpp openjdk/hotspot/src/share/vm/runtime/stubCodeGenerator.cpp
-+index b6068a5..4ef7e38 100644
-+--- openjdk.orig/hotspot/src/share/vm/runtime/stubCodeGenerator.cpp
-++++ openjdk/hotspot/src/share/vm/runtime/stubCodeGenerator.cpp
-+@@ -42,6 +42,9 @@
-+ #ifdef TARGET_ARCH_ppc
-+ # include "assembler_ppc.inline.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "assembler_aarch64.inline.hpp"
-++#endif
-+ 
-+ 
-+ // Implementation of StubCodeDesc
-+diff --git openjdk.orig/hotspot/src/share/vm/runtime/stubRoutines.hpp openjdk/hotspot/src/share/vm/runtime/stubRoutines.hpp
-+index 8481dce..f233b56 100644
-+--- openjdk.orig/hotspot/src/share/vm/runtime/stubRoutines.hpp
-++++ openjdk/hotspot/src/share/vm/runtime/stubRoutines.hpp
-+@@ -46,6 +46,9 @@
-+ #ifdef TARGET_ARCH_ppc
-+ # include "nativeInst_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "nativeInst_aarch64.hpp"
-++#endif
-+ 
-+ // StubRoutines provides entry points to assembly routines used by
-+ // compiled code and the run-time system. Platform-specific entry
-+@@ -116,6 +119,9 @@ class StubRoutines: AllStatic {
-+ #endif
-+ #ifdef TARGET_ARCH_MODEL_ppc
-+ # include "stubRoutines_ppc.hpp"
-++#endif
-++#ifdef TARGET_ARCH_MODEL_aarch64
-++# include "stubRoutines_aarch64.hpp"
-+ #endif
-+ 
-+ 
-+diff --git openjdk.orig/hotspot/src/share/vm/runtime/thread.hpp openjdk/hotspot/src/share/vm/runtime/thread.hpp
-+index 7846cc0..6964c22 100644
-+--- openjdk.orig/hotspot/src/share/vm/runtime/thread.hpp
-++++ openjdk/hotspot/src/share/vm/runtime/thread.hpp
-+@@ -1651,6 +1651,9 @@ public:
-+ #ifdef TARGET_OS_ARCH_linux_ppc
-+ # include "thread_linux_ppc.hpp"
-+ #endif
-++#ifdef TARGET_OS_ARCH_linux_aarch64
-++# include "thread_linux_aarch64.hpp"
-++#endif
-+ #ifdef TARGET_OS_ARCH_bsd_x86
-+ # include "thread_bsd_x86.hpp"
-+ #endif
-+diff --git openjdk.orig/hotspot/src/share/vm/runtime/threadLocalStorage.hpp openjdk/hotspot/src/share/vm/runtime/threadLocalStorage.hpp
-+index c2f7a9e..26ef559 100644
-+--- openjdk.orig/hotspot/src/share/vm/runtime/threadLocalStorage.hpp
-++++ openjdk/hotspot/src/share/vm/runtime/threadLocalStorage.hpp
-+@@ -68,6 +68,9 @@ class ThreadLocalStorage : AllStatic {
-+ #ifdef TARGET_OS_ARCH_linux_ppc
-+ # include "threadLS_linux_ppc.hpp"
-+ #endif
-++#ifdef TARGET_OS_ARCH_linux_aarch64
-++# include "threadLS_linux_aarch64.hpp"
-++#endif
-+ #ifdef TARGET_OS_ARCH_bsd_x86
-+ # include "threadLS_bsd_x86.hpp"
-+ #endif
-+diff --git openjdk.orig/hotspot/src/share/vm/runtime/vmStructs.cpp openjdk/hotspot/src/share/vm/runtime/vmStructs.cpp
-+index 8afd933..359f9fc 100644
-+--- openjdk.orig/hotspot/src/share/vm/runtime/vmStructs.cpp
-++++ openjdk/hotspot/src/share/vm/runtime/vmStructs.cpp
-+@@ -125,6 +125,9 @@
-+ #ifdef TARGET_ARCH_ppc
-+ # include "vmStructs_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "vmStructs_aarch64.hpp"
-++#endif
-+ #ifdef TARGET_OS_FAMILY_linux
-+ # include "thread_linux.inline.hpp"
-+ #endif
-+@@ -161,6 +164,9 @@
-+ #ifdef TARGET_OS_ARCH_linux_ppc
-+ # include "vmStructs_linux_ppc.hpp"
-+ #endif
-++#ifdef TARGET_OS_ARCH_linux_aarch64
-++# include "vmStructs_linux_aarch64.hpp"
-++#endif
-+ #ifdef TARGET_OS_ARCH_bsd_x86
-+ # include "vmStructs_bsd_x86.hpp"
-+ #endif
-+@@ -221,6 +227,9 @@
-+ #ifdef TARGET_ARCH_MODEL_ppc
-+ # include "adfiles/adGlobals_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_MODEL_aarch64
-++# include "adfiles/adGlobals_aarch64.hpp"
-++#endif
-+ #endif
-+ 
-+ // Note: the cross-product of (c1, c2, product, nonproduct, ...),
-+diff --git openjdk.orig/hotspot/src/share/vm/runtime/vm_version.cpp openjdk/hotspot/src/share/vm/runtime/vm_version.cpp
-+index 2d51b67..bba9b01 100644
-+--- openjdk.orig/hotspot/src/share/vm/runtime/vm_version.cpp
-++++ openjdk/hotspot/src/share/vm/runtime/vm_version.cpp
-+@@ -41,6 +41,9 @@
-+ #ifdef TARGET_ARCH_ppc
-+ # include "vm_version_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "vm_version_aarch64.hpp"
-++#endif
-+ 
-+ const char* Abstract_VM_Version::_s_vm_release = Abstract_VM_Version::vm_release();
-+ const char* Abstract_VM_Version::_s_internal_vm_info_string = Abstract_VM_Version::internal_vm_info_string();
-+@@ -185,6 +188,7 @@ const char* Abstract_VM_Version::jre_release_version() {
-+                  AMD64_ONLY("amd64")             \
-+                  ARM_ONLY("arm")                 \
-+                  PPC_ONLY("ppc")                 \
-++                 AARCH64_ONLY("aarch64")         \
-+                  SPARC_ONLY("sparc")
-+ #endif // ZERO
-+ 
-+diff --git openjdk.orig/hotspot/src/share/vm/utilities/copy.hpp openjdk/hotspot/src/share/vm/utilities/copy.hpp
-+index 3dcbfee..198590f 100644
-+--- openjdk.orig/hotspot/src/share/vm/utilities/copy.hpp
-++++ openjdk/hotspot/src/share/vm/utilities/copy.hpp
-+@@ -337,6 +337,9 @@ class Copy : AllStatic {
-+ #ifdef TARGET_ARCH_ppc
-+ # include "copy_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "copy_aarch64.hpp"
-++#endif
-+ 
-+ };
-+ 
-+diff --git openjdk.orig/hotspot/src/share/vm/utilities/globalDefinitions.hpp openjdk/hotspot/src/share/vm/utilities/globalDefinitions.hpp
-+index b55b0ac..5d11e26 100644
-+--- openjdk.orig/hotspot/src/share/vm/utilities/globalDefinitions.hpp
-++++ openjdk/hotspot/src/share/vm/utilities/globalDefinitions.hpp
-+@@ -346,6 +346,9 @@ extern int LogMinObjAlignmentInBytes;
-+ #ifdef TARGET_ARCH_ppc
-+ # include "globalDefinitions_ppc.hpp"
-+ #endif
-++#ifdef TARGET_ARCH_aarch64
-++# include "globalDefinitions_aarch64.hpp"
-++#endif
-+ 
-+ 
-+ // The byte alignment to be used by Arena::Amalloc.  See bugid 4169348.
-+diff --git openjdk.orig/hotspot/src/share/vm/utilities/macros.hpp openjdk/hotspot/src/share/vm/utilities/macros.hpp
-+index 003f2af..2aa7f87 100644
-+--- openjdk.orig/hotspot/src/share/vm/utilities/macros.hpp
-++++ openjdk/hotspot/src/share/vm/utilities/macros.hpp
-+@@ -261,6 +261,14 @@
-+ #define NOT_ARM(code) code
-+ #endif
-+ 
-++#ifdef AARCH64
-++#define AARCH64_ONLY(code) code
-++#define NOT_AARCH64(code)
-++#else
-++#define AARCH64_ONLY(code)
-++#define NOT_AARCH64(code) code
-++#endif
-++
-+ #ifdef JAVASE_EMBEDDED
-+ #define EMBEDDED_ONLY(code) code
-+ #define NOT_EMBEDDED(code)
--- 
-2.26.2
-
diff --git a/gnu/packages/patches/icu4c-CVE-2020-10531.patch b/gnu/packages/patches/icu4c-CVE-2020-10531.patch
deleted file mode 100644
index c2ab923bdc..0000000000
--- a/gnu/packages/patches/icu4c-CVE-2020-10531.patch
+++ /dev/null
@@ -1,127 +0,0 @@
-Fix CVE-2020-10531:
-
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-10531
-
-Patch copied from upstream source repository (changes to the test suite
-are commented out):
-
-https://github.com/unicode-org/icu/commit/b7d08bc04a4296982fcef8b6b8a354a9e4e7afca
-
-From b7d08bc04a4296982fcef8b6b8a354a9e4e7afca Mon Sep 17 00:00:00 2001
-From: Frank Tang <ftang@chromium.org>
-Date: Sat, 1 Feb 2020 02:39:04 +0000
-Subject: [PATCH] ICU-20958 Prevent SEGV_MAPERR in append
-
-See #971
----
- icu4c/source/common/unistr.cpp          |  6 ++-
- icu4c/source/test/intltest/ustrtest.cpp | 62 +++++++++++++++++++++++++
- icu4c/source/test/intltest/ustrtest.h   |  1 +
- 3 files changed, 68 insertions(+), 1 deletion(-)
-
-diff --git a/icu4c/source/common/unistr.cpp b/icu4c/source/common/unistr.cpp
-index 901bb3358ba..077b4d6ef20 100644
---- a/icu4c/source/common/unistr.cpp
-+++ b/icu4c/source/common/unistr.cpp
-@@ -1563,7 +1563,11 @@ UnicodeString::doAppend(const UChar *srcChars, int32_t srcStart, int32_t srcLeng
-   }
- 
-   int32_t oldLength = length();
--  int32_t newLength = oldLength + srcLength;
-+  int32_t newLength;
-+  if (uprv_add32_overflow(oldLength, srcLength, &newLength)) {
-+    setToBogus();
-+    return *this;
-+  }
- 
-   // Check for append onto ourself
-   const UChar* oldArray = getArrayStart();
-#diff --git a/icu4c/source/test/intltest/ustrtest.cpp b/icu4c/source/test/intltest/ustrtest.cpp
-#index b6515ea813c..ad38bdf53a3 100644
-#--- a/icu4c/source/test/intltest/ustrtest.cpp
-#+++ b/icu4c/source/test/intltest/ustrtest.cpp
-#@@ -67,6 +67,7 @@ void UnicodeStringTest::runIndexedTest( int32_t index, UBool exec, const char* &
-#     TESTCASE_AUTO(TestWCharPointers);
-#     TESTCASE_AUTO(TestNullPointers);
-#     TESTCASE_AUTO(TestUnicodeStringInsertAppendToSelf);
-#+    TESTCASE_AUTO(TestLargeAppend);
-#     TESTCASE_AUTO_END;
-# }
-# 
-#@@ -2310,3 +2311,64 @@ void UnicodeStringTest::TestUnicodeStringInsertAppendToSelf() {
-#     str.insert(2, sub);
-#     assertEquals("", u"abbcdcde", str);
-# }
-#+
-#+void UnicodeStringTest::TestLargeAppend() {
-#+    if(quick) return;
-#+
-#+    IcuTestErrorCode status(*this, "TestLargeAppend");
-#+    // Make a large UnicodeString
-#+    int32_t len = 0xAFFFFFF;
-#+    UnicodeString str;
-#+    char16_t *buf = str.getBuffer(len);
-#+    // A fast way to set buffer to valid Unicode.
-#+    // 4E4E is a valid unicode character
-#+    uprv_memset(buf, 0x4e, len * 2);
-#+    str.releaseBuffer(len);
-#+    UnicodeString dest;
-#+    // Append it 16 times
-#+    // 0xAFFFFFF times 16 is 0xA4FFFFF1,
-#+    // which is greater than INT32_MAX, which is 0x7FFFFFFF.
-#+    int64_t total = 0;
-#+    for (int32_t i = 0; i < 16; i++) {
-#+        dest.append(str);
-#+        total += len;
-#+        if (total <= INT32_MAX) {
-#+            assertFalse("dest is not bogus", dest.isBogus());
-#+        } else {
-#+            assertTrue("dest should be bogus", dest.isBogus());
-#+        }
-#+    }
-#+    dest.remove();
-#+    total = 0;
-#+    for (int32_t i = 0; i < 16; i++) {
-#+        dest.append(str);
-#+        total += len;
-#+        if (total + len <= INT32_MAX) {
-#+            assertFalse("dest is not bogus", dest.isBogus());
-#+        } else if (total <= INT32_MAX) {
-#+            // Check that a string of exactly the maximum size works
-#+            UnicodeString str2;
-#+            int32_t remain = INT32_MAX - total;
-#+            char16_t *buf2 = str2.getBuffer(remain);
-#+            if (buf2 == nullptr) {
-#+                // if somehow memory allocation fail, return the test
-#+                return;
-#+            }
-#+            uprv_memset(buf2, 0x4e, remain * 2);
-#+            str2.releaseBuffer(remain);
-#+            dest.append(str2);
-#+            total += remain;
-#+            assertEquals("When a string of exactly the maximum size works", (int64_t)INT32_MAX, total);
-#+            assertEquals("When a string of exactly the maximum size works", INT32_MAX, dest.length());
-#+            assertFalse("dest is not bogus", dest.isBogus());
-#+
-#+            // Check that a string size+1 goes bogus
-#+            str2.truncate(1);
-#+            dest.append(str2);
-#+            total++;
-#+            assertTrue("dest should be bogus", dest.isBogus());
-#+        } else {
-#+            assertTrue("dest should be bogus", dest.isBogus());
-#+        }
-#+    }
-#+}
-#diff --git a/icu4c/source/test/intltest/ustrtest.h b/icu4c/source/test/intltest/ustrtest.h
-#index 218befdcc68..4a356a92c7a 100644
-#--- a/icu4c/source/test/intltest/ustrtest.h
-#+++ b/icu4c/source/test/intltest/ustrtest.h
-#@@ -97,6 +97,7 @@ class UnicodeStringTest: public IntlTest {
-#     void TestWCharPointers();
-#     void TestNullPointers();
-#     void TestUnicodeStringInsertAppendToSelf();
-#+    void TestLargeAppend();
-# };
-# 
-# #endif
diff --git a/gnu/packages/patches/idris-build-with-haskeline-0.8.patch b/gnu/packages/patches/idris-build-with-haskeline-0.8.patch
new file mode 100644
index 0000000000..5d1fec2409
--- /dev/null
+++ b/gnu/packages/patches/idris-build-with-haskeline-0.8.patch
@@ -0,0 +1,85 @@
+From 89a87cf666eb8b27190c779e72d0d76eadc1bc14 Mon Sep 17 00:00:00 2001
+From: Niklas Larsson <niklas@mm.st>
+Date: Sat, 6 Jun 2020 15:29:45 +0200
+Subject: [PATCH] Fix to unblock haskeline-0.8
+
+---
+Taken from <https://github.com/idris-lang/Idris-dev/pull/4871>
+
+ idris.cabal         |  2 +-
+ src/Idris/Output.hs |  8 --------
+ src/Idris/REPL.hs   | 12 +++++-------
+ 3 files changed, 6 insertions(+), 16 deletions(-)
+
+diff --git a/idris.cabal b/idris.cabal
+index 38359019a9..bc9e265023 100644
+--- a/idris.cabal
++++ b/idris.cabal
+@@ -336,7 +336,7 @@ Library
+                 , directory >= 1.2.2.0 && < 1.2.3.0 || > 1.2.3.0
+                 , filepath < 1.5
+                 , fingertree >= 0.1.4.1 && < 0.2
+-                , haskeline >= 0.7 && < 0.8
++                , haskeline >= 0.8 && < 0.9
+                 , ieee754 >= 0.7 && < 0.9
+                 , megaparsec >= 7.0.4 && < 9
+                 , mtl >= 2.1 && < 2.3
+diff --git a/src/Idris/Output.hs b/src/Idris/Output.hs
+index 70b4d48a30..6b5d59948c 100644
+--- a/src/Idris/Output.hs
++++ b/src/Idris/Output.hs
+@@ -37,21 +37,13 @@ import Prelude hiding ((<$>))
+ #endif
+ 
+ import Control.Arrow (first)
+-import Control.Monad.Trans.Except (ExceptT(ExceptT), runExceptT)
+ import Data.List (intersperse, nub)
+ import Data.Maybe (fromJust, fromMaybe, isJust, listToMaybe)
+ import qualified Data.Set as S
+-import System.Console.Haskeline.MonadException (MonadException(controlIO),
+-                                                RunIO(RunIO))
+ import System.FilePath (replaceExtension)
+ import System.IO (Handle, hPutStr, hPutStrLn)
+ import System.IO.Error (tryIOError)
+ 
+-instance MonadException m => MonadException (ExceptT Err m) where
+-    controlIO f = ExceptT $ controlIO $ \(RunIO run) -> let
+-                    run' = RunIO (fmap ExceptT . run . runExceptT)
+-                    in fmap runExceptT $ f run'
+-
+ pshow :: IState -> Err -> String
+ pshow ist err = displayDecorated (consoleDecorate ist) .
+                 renderPretty 1.0 80 .
+diff --git a/src/Idris/REPL.hs b/src/Idris/REPL.hs
+index 05587d9672..5e0dc21089 100644
+--- a/src/Idris/REPL.hs
++++ b/src/Idris/REPL.hs
+@@ -122,23 +122,21 @@ repl orig mods efile
+                              (if colour && not isWindows
+                                 then colourisePrompt theme str
+                                 else str) ++ " "
+-        x <- H.catch (H.withInterrupt $ getInputLine prompt)
+-                     (ctrlC (return $ Just ""))
++        x <- H.handleInterrupt (ctrlC (return $ Just "")) (H.withInterrupt $ getInputLine prompt)
+         case x of
+             Nothing -> do lift $ when (not quiet) (iputStrLn "Bye bye")
+                           return ()
+             Just input -> -- H.catch
+-                do ms <- H.catch (H.withInterrupt $ lift $ processInput input orig mods efile)
+-                                 (ctrlC (return (Just mods)))
++                do ms <- H.handleInterrupt (ctrlC (return (Just mods))) (H.withInterrupt $ lift $ processInput input orig mods efile)
+                    case ms of
+                         Just mods -> let efile' = fromMaybe efile (listToMaybe mods)
+                                      in repl orig mods efile'
+                         Nothing -> return ()
+ --                             ctrlC)
+ --       ctrlC
+-   where ctrlC :: InputT Idris a -> SomeException -> InputT Idris a
+-         ctrlC act e = do lift $ iputStrLn (show e)
+-                          act -- repl orig mods
++   where ctrlC :: InputT Idris a -> InputT Idris a
++         ctrlC act = do lift $ iputStrLn "Interrupted"
++                        act -- repl orig mods
+ 
+          showMVs c thm [] = ""
+          showMVs c thm ms = "Holes: " ++
diff --git a/gnu/packages/patches/idris-build-with-megaparsec-9.patch b/gnu/packages/patches/idris-build-with-megaparsec-9.patch
new file mode 100644
index 0000000000..6d7ff1d713
--- /dev/null
+++ b/gnu/packages/patches/idris-build-with-megaparsec-9.patch
@@ -0,0 +1,27 @@
+From 6ea9bc913877d765048d7cdb7fc5aec60b196fac Mon Sep 17 00:00:00 2001
+From: Felix Yan <felixonmars@archlinux.org>
+Date: Wed, 16 Dec 2020 21:48:32 +0800
+Subject: [PATCH] Fix compatibility with megaparsec 9
+
+---
+Taken from <https://github.com/idris-lang/Idris-dev/pull/4892>
+
+ src/Idris/Parser/Stack.hs | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/src/Idris/Parser/Stack.hs b/src/Idris/Parser/Stack.hs
+index fb7b611440..879786f4d2 100644
+--- a/src/Idris/Parser/Stack.hs
++++ b/src/Idris/Parser/Stack.hs
+@@ -84,7 +84,11 @@ instance Message ParseError where
+       (pos, _) = P.reachOffsetNoLine (parseErrorOffset err) (parseErrorPosState err)
+ #endif
+   messageText = PP.text . init . P.parseErrorTextPretty . parseError
++#if MIN_VERSION_megaparsec(9,0,0)
++  messageSource err = sline
++#else
+   messageSource err = Just sline
++#endif
+     where
+ #if MIN_VERSION_megaparsec(8,0,0)
+       (sline, _) = P.reachOffset (parseErrorOffset err) (parseErrorPosState err)
diff --git a/gnu/packages/patches/inetutils-hurd.patch b/gnu/packages/patches/inetutils-hurd.patch
deleted file mode 100644
index bd65c4feb1..0000000000
--- a/gnu/packages/patches/inetutils-hurd.patch
+++ /dev/null
@@ -1,583 +0,0 @@
-Support compiling on the Hurd.
-
-Taken from https://git.hadrons.org/cgit/debian/pkgs/inetutils.git/tree/debian/patches/0002-ifconfig-Improve-the-support-for-GNU-Hurd.patch
-
-From 9a90d9b9119906df23cb2db1503cb0f099942dd9 Mon Sep 17 00:00:00 2001
-From: Mats Erik Andersson <gnu@gisladisker.se>
-Date: Sat, 18 Jul 2015 01:12:41 +0200
-Subject: [PATCH 02/35] ifconfig: Improve the support for GNU/Hurd.
-
-Use system specific code instead of generic code.
-This provides abilities similar to other systems.
----
- ChangeLog                   |  17 +++
- ifconfig/system.c           |  10 +-
- ifconfig/system.h           |   2 +
- ifconfig/system/Makefile.am |   4 +-
- ifconfig/system/generic.c   |  14 +-
- ifconfig/system/hurd.c      | 292 ++++++++++++++++++++++++++++++++++++
- ifconfig/system/hurd.h      |  50 ++++++
- 7 files changed, 381 insertions(+), 8 deletions(-)
- create mode 100644 ifconfig/system/hurd.c
- create mode 100644 ifconfig/system/hurd.h
-
-diff --git a/ifconfig/system.c b/ifconfig/system.c
-index 30677e41..e108dc2e 100644
---- a/ifconfig/system.c
-+++ b/ifconfig/system.c
-@@ -25,10 +25,12 @@
- # include "system/solaris.c"
- #elif defined __QNX__
- # include "system/qnx.c"
--# elif defined __DragonFly__ || defined __FreeBSD__ || \
--       defined __FreeBSD_kernel__ || \
--       defined __NetBSD__ || defined __OpenBSD__
--#  include "system/bsd.c"
-+#elif defined __DragonFly__ || defined __FreeBSD__ || \
-+      defined __FreeBSD_kernel__ || \
-+      defined __NetBSD__ || defined __OpenBSD__
-+# include "system/bsd.c"
-+#elif defined __GNU__
-+# include "system/hurd.c"
- #else
- # include "system/generic.c"
- #endif
-diff --git a/ifconfig/system.h b/ifconfig/system.h
-index 8521ad95..66878d3a 100644
---- a/ifconfig/system.h
-+++ b/ifconfig/system.h
-@@ -97,6 +97,8 @@ extern struct if_nameindex* (*system_if_nameindex) (void);
-        defined __FreeBSD_kernel__ || \
-        defined __NetBSD__ || defined __OpenBSD__
- #  include "system/bsd.h"
-+# elif defined __GNU__
-+#  include "system/hurd.h"
- # else
- #  include "system/generic.h"
- # endif
-diff --git a/ifconfig/system/Makefile.am b/ifconfig/system/Makefile.am
-index 954c6774..62a9f1c4 100644
---- a/ifconfig/system/Makefile.am
-+++ b/ifconfig/system/Makefile.am
-@@ -26,8 +26,10 @@ noinst_HEADERS = \
- 	linux.h \
- 	solaris.h \
- 	qnx.h \
-+	hurd.h \
- 	bsd.c \
- 	generic.c \
- 	linux.c \
- 	solaris.c \
--	qnx.c
-+	qnx.c \
-+	hurd.c
-diff --git a/ifconfig/system/generic.c b/ifconfig/system/generic.c
-index 9a2bda55..20a78bde 100644
---- a/ifconfig/system/generic.c
-+++ b/ifconfig/system/generic.c
-@@ -22,6 +22,8 @@
- #include <config.h>
- 
- #include "../ifconfig.h"
-+
-+#include <unused-parameter.h>
- 
- 
- /* Output format stuff.  */
-@@ -36,19 +38,25 @@ const char *system_help;
- struct argp_child system_argp_child;
- 
- int
--system_parse_opt (struct ifconfig **ifp, char option, char *optarg)
-+system_parse_opt (struct ifconfig **ifp _GL_UNUSED_PARAMETER,
-+		  char option _GL_UNUSED_PARAMETER,
-+		  char *optarg _GL_UNUSED_PARAMETER)
- {
-   return 0;
- }
- 
- int
--system_parse_opt_rest (struct ifconfig **ifp, int argc, char *argv[])
-+system_parse_opt_rest (struct ifconfig **ifp _GL_UNUSED_PARAMETER,
-+		       int argc _GL_UNUSED_PARAMETER,
-+		       char *argv[] _GL_UNUSED_PARAMETER)
- {
-   return 0;
- }
- 
- int
--system_configure (int sfd, struct ifreq *ifr, struct system_ifconfig *ifs)
-+system_configure (int sfd _GL_UNUSED_PARAMETER,
-+		  struct ifreq *ifr _GL_UNUSED_PARAMETER,
-+		  struct system_ifconfig *ifs _GL_UNUSED_PARAMETER)
- {
-   return 0;
- }
-diff --git a/ifconfig/system/hurd.c b/ifconfig/system/hurd.c
-new file mode 100644
-index 00000000..3bd19775
---- /dev/null
-+++ b/ifconfig/system/hurd.c
-@@ -0,0 +1,292 @@
-+/* hurd.c -- Code for ifconfig specific to GNU/Hurd.
-+  Copyright (C) 2015 Free Software Foundation, Inc.
-+
-+  This file is part of GNU Inetutils.
-+
-+  GNU Inetutils 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 Inetutils is distributed in the hope that it will be useful, but
-+  WITHOUT ANY WARRANTY; without even the implied warranty of
-+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+  General Public License for more details.
-+
-+  You should have received a copy of the GNU General Public License
-+  along with this program.  If not, see `http://www.gnu.org/licenses/'. */
-+
-+/* Mostly written by Marcus Brinkmann.
-+   Adaptions to GNU/Hurd by Mats Erik Andersson.  */
-+
-+#include <config.h>
-+
-+#include <stdlib.h>
-+#include <sys/ioctl.h>
-+#include <net/if_arp.h>
-+#include "../ifconfig.h"
-+
-+#include <unused-parameter.h>
-+
-+
-+/* Output format stuff.  */
-+
-+const char *system_default_format = "gnu";
-+
-+
-+/* Argument parsing stuff.  */
-+
-+const char *system_help = "NAME [ADDR]\
-+ [broadcast BRDADDR] [netmask MASK]\
-+ [mtu N] [up|down] [FLAGS]";
-+
-+struct argp_child system_argp_child;
-+
-+int
-+system_parse_opt (struct ifconfig **ifp _GL_UNUSED_PARAMETER,
-+		  char option _GL_UNUSED_PARAMETER,
-+		  char *optarg _GL_UNUSED_PARAMETER)
-+{
-+  return 0;
-+}
-+
-+int
-+system_parse_opt_rest (struct ifconfig **ifp, int argc, char *argv[])
-+{
-+  int i = 0, mask, rev;
-+  enum {
-+    EXPECT_NOTHING,
-+    EXPECT_AF,
-+    EXPECT_BROADCAST,
-+    EXPECT_NETMASK,
-+    EXPECT_METRIC,
-+    EXPECT_MTU
-+  } expect = EXPECT_AF;
-+
-+  *ifp = parse_opt_new_ifs (argv[0]);
-+
-+  while (++i < argc)
-+    {
-+      switch (expect)
-+	{
-+	case EXPECT_BROADCAST:
-+	  parse_opt_set_brdaddr (*ifp, argv[i]);
-+	  break;
-+
-+	case EXPECT_NETMASK:
-+	  parse_opt_set_netmask (*ifp, argv[i]);
-+	  break;
-+
-+	case EXPECT_MTU:
-+	  parse_opt_set_mtu (*ifp, argv[i]);
-+	  break;
-+
-+	/* XXX: 2015-07-18, GNU/Hurd does not yet support
-+		ioctl(SIOCSIFMETRIC), but we let the code
-+		handle this standard ability anyway!
-+	 */
-+	case EXPECT_METRIC:
-+	  parse_opt_set_metric (*ifp, argv[i]);
-+	  break;
-+
-+	case EXPECT_AF:
-+	  expect = EXPECT_NOTHING;
-+	  if (!strcmp (argv[i], "inet"))
-+	    continue;
-+	  else if (!strcmp (argv[i], "inet6"))
-+	    {
-+	      error (0, 0, "%s is not a supported address family", argv[i]);
-+	      return 0;
-+	    }
-+	  break;
-+
-+	case EXPECT_NOTHING:
-+	  break;
-+	}
-+
-+      if (expect != EXPECT_NOTHING)
-+	expect = EXPECT_NOTHING;
-+      else if (!strcmp (argv[i], "broadcast"))
-+	expect = EXPECT_BROADCAST;
-+      else if (!strcmp (argv[i], "netmask"))
-+	expect = EXPECT_NETMASK;
-+      else if (!strcmp (argv[i], "metric"))
-+	expect = EXPECT_METRIC;
-+      else if (!strcmp (argv[i], "mtu"))
-+	expect = EXPECT_MTU;
-+      else if (!strcmp (argv[i], "up"))
-+	parse_opt_set_flag (*ifp, IFF_UP | IFF_RUNNING, 0);
-+      else if (!strcmp (argv[i], "down"))
-+	parse_opt_set_flag (*ifp, IFF_UP, 1);
-+      else if (((mask = if_nameztoflag (argv[i], &rev))
-+		& ~IU_IFF_CANTCHANGE) != 0)
-+	parse_opt_set_flag (*ifp, mask, rev);
-+      else
-+	{
-+	  if (!((*ifp)->valid & IF_VALID_ADDR))
-+	    parse_opt_set_address (*ifp, argv[i]);
-+	  else if (!((*ifp)->valid & IF_VALID_DSTADDR))
-+	    parse_opt_set_dstaddr (*ifp, argv[i]);
-+	}
-+    }
-+
-+  switch (expect)
-+    {
-+    case EXPECT_BROADCAST:
-+      error (0, 0, "option `broadcast' requires an argument");
-+      break;
-+
-+    case EXPECT_NETMASK:
-+      error (0, 0, "option `netmask' requires an argument");
-+      break;
-+
-+    case EXPECT_METRIC:
-+      error (0, 0, "option `metric' requires an argument");
-+      break;
-+
-+    case EXPECT_MTU:
-+      error (0, 0, "option `mtu' requires an argument");
-+      break;
-+
-+    case EXPECT_AF:
-+    case EXPECT_NOTHING:
-+      return 1;
-+    }
-+
-+  return 0;
-+}
-+
-+int
-+system_configure (int sfd _GL_UNUSED_PARAMETER,
-+		  struct ifreq *ifr _GL_UNUSED_PARAMETER,
-+		  struct system_ifconfig *ifs _GL_UNUSED_PARAMETER)
-+{
-+  return 0;
-+}
-+
-+struct if_nameindex* (*system_if_nameindex) (void) = if_nameindex;
-+
-+static void
-+print_hwaddr_ether (format_data_t form _GL_UNUSED_PARAMETER,
-+		    unsigned char *data)
-+{
-+  *column += printf ("%02X:%02X:%02X:%02X:%02X:%02X",
-+		     data[0], data[1], data[2], data[3], data[4], data[5]);
-+  had_output = 1;
-+}
-+
-+struct arphrd_symbol
-+{
-+  const char *name;
-+  const char *title;
-+  int value;
-+  void (*print_hwaddr) (format_data_t form, unsigned char *data);
-+} arphrd_symbols[] =
-+  {
-+#ifdef ARPHRD_ETHER		/* Ethernet 10/100Mbps.  */
-+    { "ETHER", "Ethernet", ARPHRD_ETHER, print_hwaddr_ether},
-+#endif
-+#ifdef ARPHRD_LOOPBACK		/* Loopback device.  */
-+    { "LOOPBACK", "Local Loopback", ARPHRD_LOOPBACK, NULL},
-+#endif
-+    /* XXX: The image debian-hurd-20150424 returns the value 4
-+	    instead of expected ARPHRD_LOOPBACK.  This has been
-+	    discussed in the list debian-hurd, where I was asked
-+	    to resist the temptation of a work around!
-+     */
-+    { NULL, NULL, 0, NULL}
-+  };
-+
-+struct arphrd_symbol *
-+arphrd_findvalue (int value)
-+{
-+  struct arphrd_symbol *arp = arphrd_symbols;
-+  while (arp->name != NULL)
-+    {
-+      if (arp->value == value)
-+	break;
-+      arp++;
-+    }
-+  if (arp->name)
-+    return arp;
-+  else
-+    return NULL;
-+}
-+
-+void
-+system_fh_hwaddr_query (format_data_t form, int argc, char *argv[])
-+{
-+#ifdef SIOCGIFHWADDR
-+  struct arphrd_symbol *arp;
-+
-+  if (ioctl (form->sfd, SIOCGIFHWADDR, form->ifr) < 0)
-+    select_arg (form, argc, argv, 1);
-+
-+  arp = arphrd_findvalue (form->ifr->ifr_hwaddr.sa_family);
-+  select_arg (form, argc, argv, (arp && arp->print_hwaddr) ? 0 : 1);
-+#else
-+  select_arg (form, argc, argv, 1);
-+#endif
-+}
-+
-+void
-+system_fh_hwaddr (format_data_t form, int argc _GL_UNUSED_PARAMETER,
-+		  char *argv[] _GL_UNUSED_PARAMETER)
-+{
-+#ifdef SIOCGIFHWADDR
-+  if (ioctl (form->sfd, SIOCGIFHWADDR, form->ifr) < 0)
-+    error (EXIT_FAILURE, errno,
-+	   "SIOCGIFHWADDR failed for interface `%s'",
-+	   form->ifr->ifr_name);
-+  else
-+    {
-+      struct arphrd_symbol *arp;
-+
-+      arp = arphrd_findvalue (form->ifr->ifr_hwaddr.sa_family);
-+      if (arp && arp->print_hwaddr)
-+	arp->print_hwaddr (form,
-+			   (unsigned char *) form->ifr->ifr_hwaddr.sa_data);
-+      else
-+	put_string (form, "(hwaddr unknown)");
-+    }
-+#else
-+  *column += printf ("(not available)");
-+  had_output = 1;
-+#endif
-+}
-+
-+void
-+system_fh_hwtype_query (format_data_t form, int argc, char *argv[])
-+{
-+#ifdef SIOCGIFHWADDR
-+  if (ioctl (form->sfd, SIOCGIFHWADDR, form->ifr) >= 0)
-+    select_arg (form, argc, argv, 0);
-+  else
-+#endif
-+    select_arg (form, argc, argv, 1);
-+}
-+
-+void
-+system_fh_hwtype (format_data_t form, int argc _GL_UNUSED_PARAMETER,
-+		  char *argv[] _GL_UNUSED_PARAMETER)
-+{
-+#ifdef SIOCGIFHWADDR
-+  if (ioctl (form->sfd, SIOCGIFHWADDR, form->ifr) < 0)
-+    error (EXIT_FAILURE, errno,
-+	   "SIOCGIFHWADDR failed for interface `%s'",
-+	   form->ifr->ifr_name);
-+  else
-+    {
-+      struct arphrd_symbol *arp;
-+
-+      arp = arphrd_findvalue (form->ifr->ifr_hwaddr.sa_family);
-+      if (arp)
-+	put_string (form, arp->title);
-+      else
-+	put_string (form, "(hwtype unknown)");
-+    }
-+#else
-+  *column += printf ("(not available)");
-+  had_output = 1;
-+#endif
-+}
-diff --git a/ifconfig/system/hurd.h b/ifconfig/system/hurd.h
-new file mode 100644
-index 00000000..bab14565
---- /dev/null
-+++ b/ifconfig/system/hurd.h
-@@ -0,0 +1,50 @@
-+/*
-+  Copyright (C) 2015 Free Software Foundation, Inc.
-+
-+  This file is part of GNU Inetutils.
-+
-+  GNU Inetutils 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 Inetutils is distributed in the hope that it will be useful, but
-+  WITHOUT ANY WARRANTY; without even the implied warranty of
-+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+  General Public License for more details.
-+
-+  You should have received a copy of the GNU General Public License
-+  along with this program.  If not, see `http://www.gnu.org/licenses/'. */
-+
-+/* Written by Mats Erik Andersson.  */
-+
-+#ifndef IFCONFIG_SYSTEM_HURD_H
-+# define IFCONFIG_SYSTEM_HURD_H
-+
-+# include "../printif.h"
-+# include "../options.h"
-+
-+
-+/* Option support.  */
-+
-+struct system_ifconfig
-+{
-+  int valid;
-+};
-+
-+
-+/* Output format support.  */
-+
-+# define SYSTEM_FORMAT_HANDLER \
-+  { "hurd", fh_nothing}, \
-+  { "hwaddr?", system_fh_hwaddr_query}, \
-+  { "hwaddr", system_fh_hwaddr}, \
-+  { "hwtype?", system_fh_hwtype_query}, \
-+  { "hwtype", system_fh_hwtype},
-+
-+void system_fh_hwaddr_query (format_data_t form, int argc, char *argv[]);
-+void system_fh_hwaddr (format_data_t form, int argc, char *argv[]);
-+void system_fh_hwtype_query (format_data_t form, int argc, char *argv[]);
-+void system_fh_hwtype (format_data_t form, int argc, char *argv[]);
-+
-+#endif /* !IFCONFIG_SYSTEM_HURD_H */
--- 
-2.23.0.rc1.170.gbd704faa3e
-
-From 589dab9c7d3119da82837dabae34c8a3d16cbe49 Mon Sep 17 00:00:00 2001
-From: Mats Erik Andersson <gnu@gisladisker.se>
-Date: Thu, 30 Jul 2015 01:06:42 +0200
-Subject: [PATCH 07/35] ifconfig: Hardware detection in GNU/Hurd.
-
-A work-around needed to distinguish hardware type.
----
- ChangeLog              | 10 ++++++++++
- ifconfig/system/hurd.c | 19 ++++++++++++-------
- 2 files changed, 22 insertions(+), 7 deletions(-)
-
-diff --git a/ifconfig/system/hurd.c b/ifconfig/system/hurd.c
-index 3bd19775..b6261a00 100644
---- a/ifconfig/system/hurd.c
-+++ b/ifconfig/system/hurd.c
-@@ -175,6 +175,16 @@ print_hwaddr_ether (format_data_t form _GL_UNUSED_PARAMETER,
-   had_output = 1;
- }
- 
-+/* GNU/Hurd and Mach are using a mixture of BSD definitions
-+ * and GNU/Linux interface headers, which in this situation
-+ * means that sa_family_t is an unsigned char, from BSD, while
-+ * all ARPHRD_* come from GNU/Linux and are thus 16 bits wide.
-+ * We must account for this.  The following bitmask will
-+ * adapt to any future change!
-+ */
-+
-+#define _ARP_MASK ((sizeof (sa_family_t) == 1) ? 0xff : 0xffff)
-+
- struct arphrd_symbol
- {
-   const char *name;
-@@ -184,16 +194,11 @@ struct arphrd_symbol
- } arphrd_symbols[] =
-   {
- #ifdef ARPHRD_ETHER		/* Ethernet 10/100Mbps.  */
--    { "ETHER", "Ethernet", ARPHRD_ETHER, print_hwaddr_ether},
-+    { "ETHER", "Ethernet", ARPHRD_ETHER & _ARP_MASK, print_hwaddr_ether},
- #endif
- #ifdef ARPHRD_LOOPBACK		/* Loopback device.  */
--    { "LOOPBACK", "Local Loopback", ARPHRD_LOOPBACK, NULL},
-+    { "LOOPBACK", "Local Loopback", ARPHRD_LOOPBACK & _ARP_MASK, NULL},
- #endif
--    /* XXX: The image debian-hurd-20150424 returns the value 4
--	    instead of expected ARPHRD_LOOPBACK.  This has been
--	    discussed in the list debian-hurd, where I was asked
--	    to resist the temptation of a work around!
--     */
-     { NULL, NULL, 0, NULL}
-   };
- 
--- 
-2.23.0.rc1.170.gbd704faa3e
-
-From d379784b4461d17b2536effd1b52bae21cd28a32 Mon Sep 17 00:00:00 2001
-From: Guillem Jover <guillem@hadrons.org>
-Date: Fri, 16 Aug 2019 00:34:03 +0200
-Subject: [PATCH 35/35] telnet: Several ioctls have been disabled in the Hurd's
- glibc
-
-But not the related option macros. inetutils uses those macros to decide
-whether the ioctls are available, so it is FTBFS now. The Hurd's glibc
-is being fixed, but we'll use this for now to get the builds going.
----
- telnet/sys_bsd.c | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/telnet/sys_bsd.c b/telnet/sys_bsd.c
-index 662536ab..5eb35cb5 100644
---- a/telnet/sys_bsd.c
-+++ b/telnet/sys_bsd.c
-@@ -63,6 +63,7 @@
- #include <errno.h>
- #include <arpa/telnet.h>
- #include <sys/select.h>
-+#include <sys/ioctl.h>
- #include <unused-parameter.h>
- 
- #include "ring.h"
-@@ -157,7 +158,7 @@ TerminalRead (char *buf, int n)
- int
- TerminalAutoFlush (void)
- {
--#if defined LNOFLSH
-+#if defined TIOCLGET && defined LNOFLSH
-   int flush;
- 
-   ioctl (0, TIOCLGET, (char *) &flush);
-@@ -260,7 +261,9 @@ TerminalSaveState (void)
-   ioctl (0, TIOCGETP, (char *) &ottyb);
-   ioctl (0, TIOCGETC, (char *) &otc);
-   ioctl (0, TIOCGLTC, (char *) &oltc);
-+#ifdef TIOCLGET
-   ioctl (0, TIOCLGET, (char *) &olmode);
-+#endif
- 
-   ntc = otc;
-   nltc = oltc;
-@@ -755,7 +758,9 @@ TerminalNewMode (register int f)
- #endif
-     }
- #ifndef USE_TERMIO
-+#ifdef TIOCLSET
-   ioctl (tin, TIOCLSET, (char *) &lmode);
-+#endif
-   ioctl (tin, TIOCSLTC, (char *) &ltc);
-   ioctl (tin, TIOCSETC, (char *) &tc);
-   ioctl (tin, TIOCSETN, (char *) &sb);
--- 
-2.23.0.rc1.170.gbd704faa3e
-
diff --git a/gnu/packages/patches/inkscape-1.1-fix-build-witch-gcc7.5.patch b/gnu/packages/patches/inkscape-1.1-fix-build-witch-gcc7.5.patch
deleted file mode 100644
index bd7b01f856..0000000000
--- a/gnu/packages/patches/inkscape-1.1-fix-build-witch-gcc7.5.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-From 0ae15d7e89b984f72780ff7afa8e57dd6ae7765a Mon Sep 17 00:00:00 2001
-From: "Boris A. Dekshteyn" <boris.dekshteyn@gmail.com>
-Date: Mon, 14 Jun 2021 23:52:16 +1200
-Subject: [PATCH] Fix build witch GCC@7.5.
-
----
- src/object/sp-use-reference.h | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/object/sp-use-reference.h b/src/object/sp-use-reference.h
-index 5958632059..f07c2a3721 100644
---- a/src/object/sp-use-reference.h
-+++ b/src/object/sp-use-reference.h
-@@ -14,6 +14,7 @@
- 
- #include "sp-item.h"
- #include "uri-references.h"
-+#include "display/curve.h"
- 
- #include <memory>
- 
--- 
-2.32.0
-
diff --git a/gnu/packages/patches/jacal-fix-texinfo.patch b/gnu/packages/patches/jacal-fix-texinfo.patch
deleted file mode 100644
index 83e44a3164..0000000000
--- a/gnu/packages/patches/jacal-fix-texinfo.patch
+++ /dev/null
@@ -1,92 +0,0 @@
-Fix the broken Texinfo in the Jacal package documentation
-
---- jacal/jacal.texi,orig	2017-02-23 20:35:55.303980444 +0100
-+++ jacal/jacal.texi	2017-02-23 20:53:14.539024674 +0100
-@@ -343,7 +343,7 @@
- 
- With the standard input grammar, the precedence of @samp{-} as a prefix
- behaves strangely.  @code{a^-b*c} becomes @code{a^(-b*c)} while
--@code{@result{a^b*c} (a^b)*c}.
-+@code{a^b*c @result{} (a^b)*c}.
- 
- Using @code{divide} to divide a polynomial by an integer does not work.
- 
-@@ -675,8 +675,9 @@
- e1: ---------
-         a
- @end example
-+@end deffn
- 
--@deffnx Command suchthat var exp
-+@deffn Command suchthat var exp
- 
- If an expression rather than an equation is given to @code{suchthat}, it
- is as though the equation @code{@var{exp}=0} was given.
-@@ -688,8 +689,9 @@
- e2: ---------
-         a
- @end example
-+@end deffn
- 
--@deffnx Operator | var exp_or_eqn
-+@deffn Operator | var exp_or_eqn
- 
- An alternative infix notation is also available for @code{suchthat}.
- 
-@@ -857,8 +859,9 @@
- 
- Returns the degree of polynomial or equation @var{poly} in variable
- @var{var}.
-+@end deffn
- 
--@deffnx Operator degree poly
-+@deffn Operator degree poly
- 
- Returns the total-degree, the degree of its highest degree monomial,
- of polynomial or equation @var{poly}.
-@@ -1016,10 +1019,12 @@
- Returns @var{poly1} reduced with respect to @var{poly2} (or @var{eqn})
- and @var{var}.  If @var{poly2} is univariate, the third argument is not
- needed.
-+@end deffn
- 
--@deffnx Command mod poly1 n
-+@deffn Command mod poly1 n
- Returns @var{poly1} with all the coefficients taken modulo @var{n}.
--@deffnx Command mod poly1
-+@end deffn
-+@deffn Command mod poly1
- Returns @var{poly1} with all the coefficients taken modulo the
- current modulus.
- 
-@@ -1220,8 +1225,9 @@
- e1: -1 2  3 5
- @end group
- @end example
-+@end deffn
- 
--@deffnx Command factor polyratio
-+@deffn Command factor polyratio
- Given a univariate ratio of polynomials @var{polyratio}, returns a
- matrix of factors and exponents.
- 
-@@ -2028,7 +2034,7 @@
- formed from the pair-wise products of components of the inputs.  For
- example, for the input tensors @code{x[a,b]} and @code{y[c]}
- @example
--@result{z:tmult(x,y);} z[a,b,c] = x[a,b]*y[c]
-+z:tmult(x,y); @result{} z[a,b,c] = x[a,b]*y[c]
- @end example
- 
- With an additional argument, @code{tmult} will produce the inner product
-@@ -2464,8 +2470,9 @@
- If you do not wish to return to Jacal but really want to terminate the
- session and return to the operating system, then after typing
- @code{qed();}, type @code{(slib:exit)} or use @code{quit}.
-+@end deffn
- 
--@deffnx Command quit
-+@deffn Command quit
- Exit directly from Jacal to the operating system.  You will not be able
- to continue your Jacal session.
- 
diff --git a/gnu/packages/patches/jami-fix-crash-on-quit.patch b/gnu/packages/patches/jami-fix-crash-on-quit.patch
new file mode 100644
index 0000000000..c25bce588a
--- /dev/null
+++ b/gnu/packages/patches/jami-fix-crash-on-quit.patch
@@ -0,0 +1,34 @@
+Retrieved from:
+https://git.jami.net/savoirfairelinux/jami-client-qt/-/commit/83f68573324a453a6d26e025fd6439f175a79d1b.diff.
+
+With the 'client-qt' prefix added to match the file hierarchy of the release tarball.
+
+diff --git a/client-qt/src/mainapplication.cpp b/client-qt/src/mainapplication.cpp
+index 0c3209fc6fa7c528bec197f1cf9332758170441c..278f19287b86dd2c916935ab0930cbe0abb35d26 100644
+--- a/client-qt/src/mainapplication.cpp
++++ b/client-qt/src/mainapplication.cpp
+@@ -155,7 +155,11 @@ MainApplication::MainApplication(int& argc, char** argv)
+     QObject::connect(this, &QApplication::aboutToQuit, [this] { cleanup(); });
+ }
+ 
+-MainApplication::~MainApplication() {}
++MainApplication::~MainApplication()
++{
++    engine_.reset();
++    lrcInstance_.reset();
++}
+ 
+ bool
+ MainApplication::init()
+diff --git a/src/mainapplication.h b/src/mainapplication.h
+index 51306be829478b9fbc1c61a08aeb96938be26dac..4047e3abb3cfd3e6250387a37fa5a896e9bc4161 100644
+--- a/client-qt/src/mainapplication.h
++++ b/client-qt/src/mainapplication.h
+@@ -80,7 +80,6 @@ private:
+ private:
+     QScopedPointer<QFile> debugFile_;
+     QScopedPointer<QQmlApplicationEngine> engine_;
+-
+     QScopedPointer<LRCInstance> lrcInstance_;
+ 
+     QScopedPointer<ConnectivityMonitor> connectivityMonitor_;
diff --git a/gnu/packages/patches/jsoncpp-fix-inverted-case.patch b/gnu/packages/patches/jsoncpp-fix-inverted-case.patch
deleted file mode 100644
index e4897de1b8..0000000000
--- a/gnu/packages/patches/jsoncpp-fix-inverted-case.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-This patch fixes a bug and related test failure on platforms where 'char'
-is unsigned.
-
-Taken from upstream:
-https://github.com/open-source-parsers/jsoncpp/commit/f11611c8785082ead760494cba06196f14a06dcb
-
-diff --git a/src/lib_json/json_writer.cpp b/src/lib_json/json_writer.cpp
-index 8e06cca2..56195dc1 100644
---- a/src/lib_json/json_writer.cpp
-+++ b/src/lib_json/json_writer.cpp
-@@ -178,8 +178,9 @@ static bool isAnyCharRequiredQuoting(char const* s, size_t n) {
- 
-   char const* const end = s + n;
-   for (char const* cur = s; cur < end; ++cur) {
--    if (*cur == '\\' || *cur == '\"' || *cur < ' ' ||
--        static_cast<unsigned char>(*cur) < 0x80)
-+    if (*cur == '\\' || *cur == '\"' ||
-+        static_cast<unsigned char>(*cur) < ' ' ||
-+        static_cast<unsigned char>(*cur) >= 0x80)
-       return true;
-   }
-   return false;
diff --git a/gnu/packages/patches/jsoncpp-pkg-config-version.patch b/gnu/packages/patches/jsoncpp-pkg-config-version.patch
new file mode 100644
index 0000000000..3983cc300c
--- /dev/null
+++ b/gnu/packages/patches/jsoncpp-pkg-config-version.patch
@@ -0,0 +1,24 @@
+Taken from upstream: https://github.com/open-source-parsers/jsoncpp/issues/1235.
+
+From ac2870298ed5b5a96a688d9df07461b31f83e906 Mon Sep 17 00:00:00 2001
+From: Derick Vigne <derickvigne@me.com>
+Date: Tue, 26 Jan 2021 14:59:12 -0500
+Subject: [PATCH] Fixed pkg-config Version
+
+---
+ pkg-config/jsoncpp.pc.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/pkg-config/jsoncpp.pc.in b/pkg-config/jsoncpp.pc.in
+index 632a377f5..2a2221069 100644
+--- a/pkg-config/jsoncpp.pc.in
++++ b/pkg-config/jsoncpp.pc.in
+@@ -5,7 +5,7 @@ includedir=@includedir_for_pc_file@
+ 
+ Name: jsoncpp
+ Description: A C++ library for interacting with JSON
+-Version: @JSONCPP_VERSION@
++Version: @PROJECT_VERSION@
+ URL: https://github.com/open-source-parsers/jsoncpp
+ Libs: -L${libdir} -ljsoncpp
+ Cflags: -I${includedir}
diff --git a/gnu/packages/patches/julia-allow-parallel-build.patch b/gnu/packages/patches/julia-allow-parallel-build.patch
new file mode 100644
index 0000000000..cc1d42fee4
--- /dev/null
+++ b/gnu/packages/patches/julia-allow-parallel-build.patch
@@ -0,0 +1,32 @@
+Allow parallel tests with isolated environment.
+
+See https://github.com/JuliaLang/julia/issues/43205 and
+https://github.com/JuliaLang/julia/pull/43211.
+
+diff --git a/test/runtests.jl b/test/runtests.jl
+index 2f9cd058bb..150395e78c 100644
+--- a/test/runtests.jl
++++ b/test/runtests.jl
+@@ -4,7 +4,7 @@ using Test
+ using Distributed
+ using Dates
+ import REPL
+-using Printf: @sprintf
++using Printf: @sprintf, @printf
+ using Base: Experimental
+ 
+ include("choosetests.jl")
+@@ -83,11 +83,12 @@ prepend!(tests, linalg_tests)
+ import LinearAlgebra
+ cd(@__DIR__) do
+     n = 1
+-    if net_on
++    if net_on || haskey(ENV, "JULIA_CPU_THREADS")
+         n = min(Sys.CPU_THREADS, length(tests))
+         n > 1 && addprocs_with_testenv(n)
+         LinearAlgebra.BLAS.set_num_threads(1)
+     end
++    @printf("Number of threads: %i\n", n)
+     skipped = 0
+ 
+     @everywhere include("testdefs.jl")
diff --git a/gnu/packages/patches/lcms-CVE-2018-16435.patch b/gnu/packages/patches/lcms-CVE-2018-16435.patch
deleted file mode 100644
index 60228e73af..0000000000
--- a/gnu/packages/patches/lcms-CVE-2018-16435.patch
+++ /dev/null
@@ -1,171 +0,0 @@
-https://github.com/mm2/Little-CMS/commit/768f70ca405cd3159d990e962d54456773bb8cf8.patch
-
-From 768f70ca405cd3159d990e962d54456773bb8cf8 Mon Sep 17 00:00:00 2001
-From: Marti Maria <info@littlecms.com>
-Date: Wed, 15 Aug 2018 20:07:56 +0200
-Subject: [PATCH] Upgrade Visual studio 2017 15.8
-
-- Upgrade to 15.8
-- Add check on CGATS memory allocation (thanks to Quang Nguyen for
-pointing out this)
----
- Projects/VC2017/jpegicc/jpegicc.vcxproj           |  1 +
- Projects/VC2017/lcms2_DLL/lcms2_DLL.vcxproj       |  2 +-
- Projects/VC2017/lcms2_static/lcms2_static.vcxproj |  2 +-
- Projects/VC2017/linkicc/linkicc.vcxproj           |  2 +-
- Projects/VC2017/psicc/psicc.vcxproj               |  2 +-
- Projects/VC2017/testbed/testbed.vcxproj           |  2 +-
- Projects/VC2017/tiffdiff/tiffdiff.vcxproj         |  2 +-
- Projects/VC2017/tifficc/tifficc.vcxproj           |  2 +-
- Projects/VC2017/transicc/transicc.vcxproj         |  1 +
- src/cmscgats.c                                    | 14 ++++++++++----
- 10 files changed, 19 insertions(+), 11 deletions(-)
-
-diff --git a/Projects/VC2017/jpegicc/jpegicc.vcxproj b/Projects/VC2017/jpegicc/jpegicc.vcxproj
-index ab26a53..39cfd00 100644
---- a/Projects/VC2017/jpegicc/jpegicc.vcxproj
-+++ b/Projects/VC2017/jpegicc/jpegicc.vcxproj
-@@ -22,6 +22,7 @@
-     <ProjectGuid>{62812507-F926-4968-96A9-17678460AD90}</ProjectGuid>
-     <RootNamespace>jpegicc</RootNamespace>
-     <Keyword>Win32Proj</Keyword>
-+    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
-   </PropertyGroup>
-   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-diff --git a/Projects/VC2017/lcms2_DLL/lcms2_DLL.vcxproj b/Projects/VC2017/lcms2_DLL/lcms2_DLL.vcxproj
-index 4c8aa3f..d1bf3eb 100644
---- a/Projects/VC2017/lcms2_DLL/lcms2_DLL.vcxproj
-+++ b/Projects/VC2017/lcms2_DLL/lcms2_DLL.vcxproj
-@@ -22,7 +22,7 @@
-     <ProjectGuid>{8C51BE48-ADB8-4089-A9EC-F6BF993A0548}</ProjectGuid>
-     <RootNamespace>lcms2_DLL</RootNamespace>
-     <Keyword>Win32Proj</Keyword>
--    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
-+    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
-   </PropertyGroup>
-   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-diff --git a/Projects/VC2017/lcms2_static/lcms2_static.vcxproj b/Projects/VC2017/lcms2_static/lcms2_static.vcxproj
-index 2a9988a..9fc05ce 100644
---- a/Projects/VC2017/lcms2_static/lcms2_static.vcxproj
-+++ b/Projects/VC2017/lcms2_static/lcms2_static.vcxproj
-@@ -22,7 +22,7 @@
-     <ProjectGuid>{71DEDE59-3F1E-486B-A899-4283000F76B5}</ProjectGuid>
-     <RootNamespace>lcms2_static</RootNamespace>
-     <Keyword>Win32Proj</Keyword>
--    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
-+    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
-   </PropertyGroup>
-   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-diff --git a/Projects/VC2017/linkicc/linkicc.vcxproj b/Projects/VC2017/linkicc/linkicc.vcxproj
-index 30c2b4e..51586dd 100644
---- a/Projects/VC2017/linkicc/linkicc.vcxproj
-+++ b/Projects/VC2017/linkicc/linkicc.vcxproj
-@@ -22,7 +22,7 @@
-     <ProjectGuid>{FBFBE1DC-DB84-4BA1-9552-B4780F457849}</ProjectGuid>
-     <RootNamespace>linkicc</RootNamespace>
-     <Keyword>Win32Proj</Keyword>
--    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
-+    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
-   </PropertyGroup>
-   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-diff --git a/Projects/VC2017/psicc/psicc.vcxproj b/Projects/VC2017/psicc/psicc.vcxproj
-index 9dcf89a..8f26e12 100644
---- a/Projects/VC2017/psicc/psicc.vcxproj
-+++ b/Projects/VC2017/psicc/psicc.vcxproj
-@@ -22,7 +22,7 @@
-     <ProjectGuid>{EF6A8851-65FE-46F5-B9EF-14F0B671F693}</ProjectGuid>
-     <RootNamespace>psicc</RootNamespace>
-     <Keyword>Win32Proj</Keyword>
--    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
-+    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
-   </PropertyGroup>
-   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-diff --git a/Projects/VC2017/testbed/testbed.vcxproj b/Projects/VC2017/testbed/testbed.vcxproj
-index 0af3762..3f6aea3 100644
---- a/Projects/VC2017/testbed/testbed.vcxproj
-+++ b/Projects/VC2017/testbed/testbed.vcxproj
-@@ -22,7 +22,7 @@
-     <ProjectGuid>{928A3A2B-46EF-4279-959C-513B3652FF0E}</ProjectGuid>
-     <RootNamespace>testbed</RootNamespace>
-     <Keyword>Win32Proj</Keyword>
--    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
-+    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
-   </PropertyGroup>
-   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-diff --git a/Projects/VC2017/tiffdiff/tiffdiff.vcxproj b/Projects/VC2017/tiffdiff/tiffdiff.vcxproj
-index 7edfe28..3a6d837 100644
---- a/Projects/VC2017/tiffdiff/tiffdiff.vcxproj
-+++ b/Projects/VC2017/tiffdiff/tiffdiff.vcxproj
-@@ -22,7 +22,7 @@
-     <ProjectGuid>{75B91835-CCD7-48BE-A606-A9C997D5DBEE}</ProjectGuid>
-     <RootNamespace>tiffdiff</RootNamespace>
-     <Keyword>Win32Proj</Keyword>
--    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
-+    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
-   </PropertyGroup>
-   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-diff --git a/Projects/VC2017/tifficc/tifficc.vcxproj b/Projects/VC2017/tifficc/tifficc.vcxproj
-index cd9f04c..5ef954f 100644
---- a/Projects/VC2017/tifficc/tifficc.vcxproj
-+++ b/Projects/VC2017/tifficc/tifficc.vcxproj
-@@ -22,7 +22,7 @@
-     <ProjectGuid>{2256DE16-ED92-4A6F-9C54-F65BB61E64A2}</ProjectGuid>
-     <RootNamespace>tifficc</RootNamespace>
-     <Keyword>Win32Proj</Keyword>
--    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
-+    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
-   </PropertyGroup>
-   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-diff --git a/Projects/VC2017/transicc/transicc.vcxproj b/Projects/VC2017/transicc/transicc.vcxproj
-index d9b77c6..b3173d8 100644
---- a/Projects/VC2017/transicc/transicc.vcxproj
-+++ b/Projects/VC2017/transicc/transicc.vcxproj
-@@ -22,6 +22,7 @@
-     <ProjectGuid>{9EE22D66-C849-474C-9ED5-C3E141DAB160}</ProjectGuid>
-     <RootNamespace>transicc</RootNamespace>
-     <Keyword>Win32Proj</Keyword>
-+    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
-   </PropertyGroup>
-   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-diff --git a/src/cmscgats.c b/src/cmscgats.c
-index 1a87613..8c3e96d 100644
---- a/src/cmscgats.c
-+++ b/src/cmscgats.c
-@@ -1,7 +1,7 @@
- //---------------------------------------------------------------------------------
- //
- //  Little Color Management System
--//  Copyright (c) 1998-2017 Marti Maria Saguer
-+//  Copyright (c) 1998-2018 Marti Maria Saguer
- //
- // Permission is hereby granted, free of charge, to any person obtaining
- // a copy of this software and associated documentation files (the "Software"),
-@@ -1506,10 +1506,16 @@ void AllocateDataSet(cmsIT8* it8)
-     t-> nSamples   = atoi(cmsIT8GetProperty(it8, "NUMBER_OF_FIELDS"));
-     t-> nPatches   = atoi(cmsIT8GetProperty(it8, "NUMBER_OF_SETS"));
- 
--    t-> Data = (char**)AllocChunk (it8, ((cmsUInt32Number) t->nSamples + 1) * ((cmsUInt32Number) t->nPatches + 1) *sizeof (char*));
--    if (t->Data == NULL) {
-+    if (t -> nSamples < 0 || t->nSamples > 0x7ffe || t->nPatches < 0 || t->nPatches > 0x7ffe)
-+    {
-+        SynError(it8, "AllocateDataSet: too much data");
-+    }
-+    else {
-+        t->Data = (char**)AllocChunk(it8, ((cmsUInt32Number)t->nSamples + 1) * ((cmsUInt32Number)t->nPatches + 1) * sizeof(char*));
-+        if (t->Data == NULL) {
- 
--        SynError(it8, "AllocateDataSet: Unable to allocate data array");
-+            SynError(it8, "AllocateDataSet: Unable to allocate data array");
-+        }
-     }
- 
- }
diff --git a/gnu/packages/patches/ldc-bootstrap-disable-tests.patch b/gnu/packages/patches/ldc-bootstrap-disable-tests.patch
deleted file mode 100644
index d2e40b8016..0000000000
--- a/gnu/packages/patches/ldc-bootstrap-disable-tests.patch
+++ /dev/null
@@ -1,72 +0,0 @@
-This patch fixes a failing unit test by feeding buildNormalizedPath to the
-tzdata properly.  Three other tests are disabled, one assumes /root and the
-two others use networking.  Not bad out of almost 700 tests!
-
-by Pjotr Prins <pjotr.guix@thebird.nl>
-
---- a/std/datetime.d.orig      2016-11-24 01:13:52.584495545 +0100
-+++ b/std/datetime.d   2016-11-24 01:17:09.655306728 +0100
-@@ -28081,22 +28081,24 @@
-         import std.range : retro;
-         import std.format : format;
-
--        name = strip(name);
--
-         enforce(tzDatabaseDir.exists(), new DateTimeException(format("Directory %s does not exist.", tzDatabaseDir)));
-         enforce(tzDatabaseDir.isDir, new DateTimeException(format("%s is not a directory.", tzDatabaseDir)));
-
-         version(Android)
-         {
-+            name = strip(name);
-             auto tzfileOffset = name in tzdataIndex(tzDatabaseDir);
-             enforce(tzfileOffset, new DateTimeException(format("The time zone %s is not listed.", name)));
-             string tzFilename = separate_index ? "zoneinfo.dat" : "tzdata";
-             immutable file = buildNormalizedPath(tzDatabaseDir, tzFilename);
-         }
-         else
--            immutable file = buildNormalizedPath(tzDatabaseDir, name);
-+        {
-+            auto filename = "./" ~ strip(name); // make sure the prefix is not stripped
-+            immutable file = buildNormalizedPath(tzDatabaseDir, filename);
-+        }
-
--        enforce(file.exists(), new DateTimeException(format("File %s does not exist.", file)));
-+        enforce(file.exists(), new DateTimeException(format("File %s does not exist in %s.", file, tzDatabaseDir)));
-         enforce(file.isFile, new DateTimeException(format("%s is not a file.", file)));
-
-         auto tzFile = File(file);
-diff --git a/std/path.d b/std/path.d
-index 254d8f0..b0fc04d 100644
---- a/std/path.d
-+++ b/std/path.d
-@@ -3080,8 +3080,11 @@ unittest
-         }
-         else
-         {
-+            pragma(msg, "test disabled on GNU Guix");
-+/*
-             assert(expandTilde("~root") == "/root", expandTilde("~root"));
-             assert(expandTilde("~root/") == "/root/", expandTilde("~root/"));
-+*/
-         }
-         assert(expandTilde("~Idontexist/hey") == "~Idontexist/hey");
-     }
-diff --git a/std/socket.d b/std/socket.d
-index b85d1c9..7fbf346 100644
---- a/std/socket.d
-+++ b/std/socket.d
-@@ -859,6 +862,8 @@ class InternetHost
-
- unittest
- {
-+    pragma(msg, "test disabled on GNU Guix");
-+    /*
-     InternetHost ih = new InternetHost;
-
-     ih.getHostByAddr(0x7F_00_00_01);
-@@ -889,6 +894,7 @@ unittest
-         //      writefln("aliases[%d] = %s", i, s);
-         // }
-     });
-+    */
- }
diff --git a/gnu/packages/patches/ldc-disable-phobos-tests.patch b/gnu/packages/patches/ldc-disable-phobos-tests.patch
deleted file mode 100644
index f8a9743d59..0000000000
--- a/gnu/packages/patches/ldc-disable-phobos-tests.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-diff --git a/std/socket.d b/std/socket.d
-index 111cd17..6d23da9 100644
---- a/std/socket.d
-+++ b/std/socket.d
-@@ -448,7 +448,7 @@ class Protocol
- // Skip this test on Android because getprotobyname/number are
- // unimplemented in bionic.
- version(CRuntime_Bionic) {} else
--@safe unittest
-+@safe version(hasNetwork) unittest
- {
-     // import std.stdio : writefln;
-     softUnittest({
-@@ -770,7 +770,7 @@ class InternetHost
- }
- 
- ///
--@safe unittest
-+@safe version(hasNetwork) unittest
- {
-     InternetHost ih = new InternetHost;
- 
diff --git a/gnu/packages/patches/libblockdev-glib-compat.patch b/gnu/packages/patches/libblockdev-glib-compat.patch
deleted file mode 100644
index bb25d5d963..0000000000
--- a/gnu/packages/patches/libblockdev-glib-compat.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-Don't use g_memdup() which is removed in newer versions of GLib.
-
-See <https://github.com/storaged-project/libblockdev/pull/623>.
-
-Taken from upstream:
-https://github.com/storaged-project/libblockdev/commit/5528baef6ccc835a06c45f9db34a2c9c3f2dd940
-
-diff --git a/src/lib/plugin_apis/vdo.api b/src/lib/plugin_apis/vdo.api
---- a/src/lib/plugin_apis/vdo.api
-+++ b/src/lib/plugin_apis/vdo.api
-@@ -170,7 +170,22 @@ void bd_vdo_stats_free (BDVDOStats *stats) {
-  * Deprecated: 2.24: Use LVM-VDO integration instead.
-  */
- BDVDOStats* bd_vdo_stats_copy (BDVDOStats *stats) {
--    return g_memdup (stats, sizeof (BDVDOStats));
-+    if (stats == NULL)
-+        return NULL;
-+
-+    BDVDOStats *new_stats = g_new0 (BDVDOStats, 1);
-+
-+    new_stats->block_size = stats->block_size;
-+    new_stats->logical_block_size = stats->logical_block_size;
-+    new_stats->physical_blocks = stats->physical_blocks;
-+    new_stats->data_blocks_used = stats->data_blocks_used;
-+    new_stats->overhead_blocks_used = stats->overhead_blocks_used;
-+    new_stats->logical_blocks_used = stats->logical_blocks_used;
-+    new_stats->used_percent = stats->used_percent;
-+    new_stats->saving_percent = stats->saving_percent;
-+    new_stats->write_amplification_ratio = stats->write_amplification_ratio;
-+
-+    return new_stats;
- }
- 
- GType bd_vdo_stats_get_type () {
-diff --git a/src/plugins/vdo.c b/src/plugins/vdo.c
---- a/src/plugins/vdo.c
-+++ b/src/plugins/vdo.c
-@@ -81,7 +81,22 @@ void bd_vdo_stats_free (BDVDOStats *stats) {
- }
- 
- BDVDOStats* bd_vdo_stats_copy (BDVDOStats *stats) {
--    return g_memdup (stats, sizeof (BDVDOStats));
-+    if (stats == NULL)
-+        return NULL;
-+
-+    BDVDOStats *new_stats = g_new0 (BDVDOStats, 1);
-+
-+    new_stats->block_size = stats->block_size;
-+    new_stats->logical_block_size = stats->logical_block_size;
-+    new_stats->physical_blocks = stats->physical_blocks;
-+    new_stats->data_blocks_used = stats->data_blocks_used;
-+    new_stats->overhead_blocks_used = stats->overhead_blocks_used;
-+    new_stats->logical_blocks_used = stats->logical_blocks_used;
-+    new_stats->used_percent = stats->used_percent;
-+    new_stats->saving_percent = stats->saving_percent;
-+    new_stats->write_amplification_ratio = stats->write_amplification_ratio;
-+
-+    return new_stats;
- }
- 
- 
diff --git a/gnu/packages/patches/libcacard-unknown-variable.patch b/gnu/packages/patches/libcacard-unknown-variable.patch
deleted file mode 100644
index 830a3ee8c0..0000000000
--- a/gnu/packages/patches/libcacard-unknown-variable.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-Fix Meson error when test dependencies are missing.
-
-Based on this upstream commit, with some adjustments to apply on 2.8.0:
-https://gitlab.freedesktop.org/spice/libcacard/-/commit/cf6121deb47e437aa566cfeb29a03da93c432394
-
-diff --git a/tests/meson.build b/tests/meson.build
-index 87945a2..baefaf5 100644
---- a/tests/meson.build
-+++ b/tests/meson.build
-@@ -9,15 +9,6 @@ modutil_dep = find_program('modutil', required: false)
- openssl_dep = find_program('openssl', required: false)
- softhsm_util_dep = find_program('softhsm2-util', required: false)
- 
--if pkcs11_tool_dep.found() and p11tool_dep.found() and modutil_dep.found() and openssl_dep.found() and softhsm_util_dep.found()
--  softhsm = custom_target(
--    'softhsm2.conf',
--    command: find_program('setup-softhsm2.sh'),
--    capture: true,
--    output: 'setup-softhsm2.log',
--  )
--endif
--
- libcacard_test = executable(
-   'libcacard',
-   ['libcacard.c', 'common.c'],
-@@ -64,9 +55,18 @@ hwtests_test = executable(
-   dependencies: [libcacard_dep],
- )
- 
--test(
--  'hwtests',
--  hwtests_test,
--  depends: [softhsm],
--  env: env,
--)
-+if pkcs11_tool_dep.found() and p11tool_dep.found() and modutil_dep.found() and openssl_dep.found() and softhsm_util_dep.found()
-+  softhsm = custom_target(
-+    'softhsm2.conf',
-+    command: find_program('setup-softhsm2.sh'),
-+    capture: true,
-+    output: 'setup-softhsm2.log',
-+  )
-+
-+  test(
-+    'hwtests',
-+    hwtests_test,
-+    depends: [softhsm],
-+    env: env,
-+  )
-+endif
diff --git a/gnu/packages/patches/libmicrohttpd-0.9.73-test-ssl3.patch b/gnu/packages/patches/libmicrohttpd-0.9.73-test-ssl3.patch
new file mode 100644
index 0000000000..e8d5dce0ed
--- /dev/null
+++ b/gnu/packages/patches/libmicrohttpd-0.9.73-test-ssl3.patch
@@ -0,0 +1,35 @@
+ Disable usage of SSLv3 in testing
+
+ Integrated uptream version 0.9.74
+
+
+diff --git a/src/testcurl/https/test_tls_options.c b/src/testcurl/https/test_tls_options.c
+
+--- a/src/testcurl/https/test_tls_options.c
++++ b/src/testcurl/https/test_tls_options.c
+@@ -119,11 +119,6 @@ main (int argc, char *const *argv)
+     fprintf (stderr, "Curl does not support SSL.  Cannot run the test.\n");
+     return 77;
+   }
+-  if (0 != strncmp (ssl_version, "GnuTLS", 6))
+-  {
+-    fprintf (stderr, "This test can be run only with libcurl-gnutls.\n");
+-    return 77;
+-  }
+ 
+   if (! testsuite_curl_global_init ())
+     return 99;
+@@ -152,10 +147,10 @@ main (int argc, char *const *argv)
+   fprintf (stderr,
+            "The following handshake should fail (and print an error message)...\n");
+   if (0 !=
+-      test_wrap ("TLS1.0 vs SSL3",
++      test_wrap ("TLS1.1 vs TLS1.0",
+                  &test_unmatching_ssl_version, NULL, port, daemon_flags,
+                  aes256_sha,
+-                 CURL_SSLVERSION_SSLv3,
++                 CURL_SSLVERSION_TLSv1_1,
+                  MHD_OPTION_HTTPS_MEM_KEY, srv_key_pem,
+                  MHD_OPTION_HTTPS_MEM_CERT, srv_self_signed_cert_pem,
+                  MHD_OPTION_HTTPS_PRIORITIES,
+
diff --git a/gnu/packages/patches/librime-fix-build-with-gcc10.patch b/gnu/packages/patches/librime-fix-build-with-gcc10.patch
new file mode 100644
index 0000000000..49ad011b57
--- /dev/null
+++ b/gnu/packages/patches/librime-fix-build-with-gcc10.patch
@@ -0,0 +1,41 @@
+From: Felix Gruber <felgru@posteo.net>
+Date: Mon, 6 Sep 2021 19:38:17 +0200
+Subject: [PATCH] Add missing <cmath> includes
+
+Fix a build failure with GCC 10 that manifests like this:
+
+------
+/tmp/guix-build-librime-1.7.3.drv-0/source/src/rime/gear/script_translator.cc: In member function ‘void rime::ScriptTranslation::PrepareCandidate()’:
+/tmp/guix-build-librime-1.7.3.drv-0/source/src/rime/gear/script_translator.cc:490:23: error: ‘exp’ was not declared in this scope
+  490 |     cand->set_quality(exp(entry->weight) +
+      |                       ^~~
+/tmp/guix-build-librime-1.7.3.drv-0/source/src/rime/gear/script_translator.cc:504:23: error: ‘exp’ was not declared in this scope
+  504 |     cand->set_quality(exp(entry->weight) +
+      |                       ^~~
+make[2]: *** [src/CMakeFiles/rime.dir/build.make:1241: src/CMakeFiles/rime.dir/rime/gear/script_translator.cc.o] Error 1
+------
+
+diff --git a/src/rime/gear/script_translator.cc b/src/rime/gear/script_translator.cc
+index 4a45f05..515c8db 100644
+--- a/src/rime/gear/script_translator.cc
++++ b/src/rime/gear/script_translator.cc
+@@ -7,6 +7,7 @@
+ // 2011-07-10 GONG Chen <chen.sst@gmail.com>
+ //
+ #include <algorithm>
++#include <cmath>
+ #include <stack>
+ #include <boost/algorithm/string/join.hpp>
+ #include <boost/range/adaptor/reversed.hpp>
+diff --git a/src/rime/gear/table_translator.cc b/src/rime/gear/table_translator.cc
+index 162ac02..dbea76a 100644
+--- a/src/rime/gear/table_translator.cc
++++ b/src/rime/gear/table_translator.cc
+@@ -4,6 +4,7 @@
+ //
+ // 2011-07-10 GONG Chen <chen.sst@gmail.com>
+ //
++#include <cmath>
+ #include <boost/algorithm/string.hpp>
+ #include <boost/range/adaptor/reversed.hpp>
+ #include <utf8.h>
diff --git a/gnu/packages/patches/libsequoia-fix-ffi-Makefile.patch b/gnu/packages/patches/libsequoia-fix-ffi-Makefile.patch
new file mode 100644
index 0000000000..21f5a1e4df
--- /dev/null
+++ b/gnu/packages/patches/libsequoia-fix-ffi-Makefile.patch
@@ -0,0 +1,32 @@
+From ed641d2048d131e077f54043764741b7e7b7fe03 Mon Sep 17 00:00:00 2001
+From: Hartmut Goebel <hartmut.goebel@pep.security>
+Date: Tue, 7 Dec 2021 16:42:43 +0100
+Subject: [PATCH] ffi: Update Makefile, remove rule remaining from store
+ removal.
+
+---
+ ffi/Makefile | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/ffi/Makefile b/ffi/Makefile
+index a5540db3..07328589 100644
+--- a/ffi/Makefile
++++ b/ffi/Makefile
+@@ -62,7 +62,6 @@ build-release:
+ 	    $(CARGO) build $(CARGO_FLAGS) --release --package sequoia-ffi
+ 	$(MAKE) -Clang/python build-release
+ 	$(call sequoia_pc,$(CARGO_TARGET_DIR)/release,true)
+-	$(MAKE) -C../store build-release
+ 
+ .PHONY: install
+ install: build-release
+@@ -82,7 +82,6 @@ install: build-release
+ 		$(DESTDIR)$(PREFIX)/lib/libsequoia_ffi.$(_SEQ_LIB_EXT)
+ 	$(INSTALL) $(CARGO_TARGET_DIR)/release/libsequoia_ffi.a \
+ 		$(DESTDIR)$(PREFIX)/lib/libsequoia_ffi.a
+-	$(MAKE) -C../store install
+ 	# Now the bindings.
+ 	$(MAKE) -Clang/python install
+ 
+-- 
+
diff --git a/gnu/packages/patches/libsequoia-remove-store.patch b/gnu/packages/patches/libsequoia-remove-store.patch
new file mode 100644
index 0000000000..e7e1a91ee3
--- /dev/null
+++ b/gnu/packages/patches/libsequoia-remove-store.patch
@@ -0,0 +1,432 @@
+Shortend version of
+From 351ad5e5e2dd67f427b7eb2e4d5d0b35d90ffaf7 Mon Sep 17 00:00:00 2001
+From: Justus Winter <justus@sequoia-pgp.org>
+Date: Wed, 24 Nov 2021 15:09:34 +0100
+Subject: [PATCH] store: Drop crate.
+
+  - The store has never been really used, and never reached a maturity
+    where it was useful.  And, we're on the verge of replacing it with
+    the Shared PGP Certificate Directory.
+---
+ Cargo.toml                               |    1 -
+ ffi/Cargo.toml                           |    4 +-
+ ffi/include/sequoia.h                    |    1 -
+ ffi/include/sequoia/store.h              |  409 ------
+ ffi/lang/python/sequoia/__init__.py      |    1 -
+ ffi/lang/python/sequoia/prelude.py       |    1 -
+ ffi/lang/python/sequoia/sequoia_build.py |    3 +-
+ ffi/lang/python/sequoia/store.py         |  246 ----
+ ffi/lang/python/tests/test_store.py      |   47 -
+ ffi/src/lib.rs                           |    2 -
+ ffi/src/store.rs                         |  659 ----------
+ 25 files changed, 3 insertions(+), 5064 deletions(-)
+ delete mode 100644 ffi/include/sequoia/store.h
+ delete mode 100644 ffi/lang/python/sequoia/store.py
+ delete mode 100644 ffi/lang/python/tests/test_store.py
+ delete mode 100644 ffi/src/store.rs
+
+diff --git a/Cargo.toml b/Cargo.toml
+index a4f48520..a573ddbf 100644
+--- a/Cargo.toml
++++ b/Cargo.toml
+@@ -10,7 +10,6 @@ members = [
+     "openpgp",
+     "openpgp-ffi",
+     "sq",
+-    "store",
+ ]
+ 
+ [profile.release]
+diff --git a/ffi/Cargo.toml b/ffi/Cargo.toml
+index 53ddaf68..2ec84e6e 100644
+--- a/ffi/Cargo.toml
++++ b/ffi/Cargo.toml
+@@ -24,7 +24,6 @@ maintenance = { status = "actively-developed" }
+ [dependencies]
+ sequoia-ffi-macros = { path = "../ffi-macros", version = "0.22" }
+ sequoia-openpgp = { path = "../openpgp", version = "1.0.0", default-features = false }
+-sequoia-store = { path = "../store", version = "0.22", default-features = false }
+ sequoia-net = { path = "../net", version = "0.23", default-features = false }
+ sequoia-ipc = { path = "../ipc", version = "0.26", default-features = false }
+ anyhow = "1.0.18"
+@@ -42,10 +41,9 @@ crate-type = ["cdylib", "staticlib"]
+ bench = false
+ 
+ [features]
+-default = ["sequoia-openpgp/default", "sequoia-store/default"]
++default = ["sequoia-openpgp/default"]
+ crypto-nettle = ["sequoia-openpgp/crypto-nettle"]
+ crypto-cng = ["sequoia-openpgp/crypto-cng"]
+ compression = ["sequoia-openpgp/compression"]
+ compression-deflate = ["sequoia-openpgp/compression-deflate"]
+ compression-bzip2 = ["sequoia-openpgp/compression-bzip2"]
+-background-services = ["sequoia-store/background-services"]
+diff --git a/ffi/include/sequoia.h b/ffi/include/sequoia.h
+index 8c62ba8f..c32a2f3e 100644
+--- a/ffi/include/sequoia.h
++++ b/ffi/include/sequoia.h
+@@ -5,6 +5,5 @@
+ #include <sequoia/core.h>
+ #include <sequoia/openpgp.h>
+ #include <sequoia/net.h>
+-#include <sequoia/store.h>
+ 
+ #endif
+diff --git a/ffi/lang/python/sequoia/__init__.py b/ffi/lang/python/sequoia/__init__.py
+index 4f84346e..fc170e20 100644
+--- a/ffi/lang/python/sequoia/__init__.py
++++ b/ffi/lang/python/sequoia/__init__.py
+@@ -4,5 +4,4 @@ from . import (
+     openpgp,
+     core,
+     net,
+-    store,
+ )
+diff --git a/ffi/lang/python/sequoia/prelude.py b/ffi/lang/python/sequoia/prelude.py
+index 42b0156a..61efbab0 100644
+--- a/ffi/lang/python/sequoia/prelude.py
++++ b/ffi/lang/python/sequoia/prelude.py
+@@ -3,4 +3,3 @@ from .error import *
+ from .openpgp import *
+ from .core import *
+ from .net import *
+-from .store import *
+diff --git a/ffi/lang/python/sequoia/sequoia_build.py b/ffi/lang/python/sequoia/sequoia_build.py
+index a3ce2786..058f1380 100644
+--- a/ffi/lang/python/sequoia/sequoia_build.py
++++ b/ffi/lang/python/sequoia/sequoia_build.py
+@@ -14,8 +14,7 @@ defs = "".join(l
+                               open(join(pgp_inc, "openpgp/serialize.h")).readlines(),
+                               open(join(pgp_inc, "openpgp.h")).readlines(),
+                               open(join(sq_inc, "core.h")).readlines(),
+-                              open(join(sq_inc, "net.h")).readlines(),
+-                              open(join(sq_inc, "store.h")).readlines())
++                              open(join(sq_inc, "net.h")).readlines())
+                if not l.startswith('#'))
+ 
+ defs = defs.replace("INT_MAX", "{}".format(1<<31))
+diff --git a/ffi/lang/python/sequoia/store.py b/ffi/lang/python/sequoia/store.py
+deleted file mode 100644
+index 57d1b18f..00000000
+--- a/ffi/lang/python/sequoia/store.py
++++ /dev/null
+@@ -1,246 +0,0 @@
+-from _sequoia import ffi, lib
+-
+-from .error import Error
+-from .glue import _str, _static_str, SQObject, sq_iterator, sq_time
+-from .net import NetworkPolicy
+-from .openpgp import Fingerprint, Cert
+-
+-class Store(object):
+-    @classmethod
+-    def log(cls, ctx):
+-        yield from sq_iterator(
+-            ffi.gc(
+-                lib.sq_store_server_log(ctx.ref()),
+-                lib.sq_log_iter_free),
+-            lib.sq_log_iter_next,
+-            lambda x: Log(x, context=ctx))
+-
+-    @classmethod
+-    def list_keys(cls, ctx):
+-        def next_fn(i):
+-            fpp = ffi.new("pgp_fingerprint_t[1]")
+-            key = lib.sq_key_iter_next(i, fpp)
+-            if key == ffi.NULL:
+-                return ffi.NULL
+-            else:
+-                return (Fingerprint(fpp[0], ctx),
+-                        Key(key, ctx))
+-
+-        yield from sq_iterator(
+-            ffi.gc(
+-                lib.sq_store_list_keys(ctx.ref()),
+-                lib.sq_key_iter_free),
+-            next_fn)
+-
+-class Mapping(SQObject):
+-    _del = lib.sq_mapping_free
+-
+-    # Keys used for communications.
+-    REALM_CONTACTS = _static_str(lib.SQ_REALM_CONTACTS)
+-
+-    # Keys used for signing software updates.
+-    REALM_SOFTWARE_UPDATES = _static_str(lib.SQ_REALM_SOFTWARE_UPDATES)
+-
+-    @classmethod
+-    def open(cls, ctx, network_policy=NetworkPolicy.Encrypted, realm=REALM_CONTACTS, name="default"):
+-        return Mapping(lib.sq_mapping_open(ctx.ref(), network_policy.value,
+-                                        realm.encode(), name.encode()),
+-                        context=ctx)
+-
+-
+-    def add(self, label, fingerprint):
+-        return Binding(lib.sq_mapping_add(self.context().ref(), self.ref(),
+-                                        label.encode(), fingerprint.ref()),
+-                       context=self.context())
+-
+-    def import_(self, label, cert):
+-        return Cert(lib.sq_mapping_import(self.context().ref(), self.ref(),
+-                                       label.encode(), cert.ref()),
+-                   context=self.context())
+-
+-    def lookup(self, label):
+-        return Binding(lib.sq_mapping_lookup(self.context().ref(), self.ref(),
+-                                           label.encode()),
+-                       self.context())
+-
+-    def delete(self):
+-        if lib.sq_mapping_delete(self.ref()):
+-            raise Error._last(self.context())
+-        super(Mapping, self)._delete(skip_free=True)
+-
+-    def iter(self):
+-        def next_fn(i):
+-            labelp = ffi.new("char *[1]")
+-            fpp = ffi.new("pgp_fingerprint_t[1]")
+-            binding = lib.sq_binding_iter_next(i, labelp, fpp)
+-            if binding == ffi.NULL:
+-                return ffi.NULL
+-            else:
+-                return (_str(labelp[0]),
+-                        Fingerprint(fpp[0], self.context()),
+-                        Binding(binding, self.context()))
+-
+-        yield from sq_iterator(
+-            ffi.gc(
+-                lib.sq_mapping_iter(self.context().ref(), self.ref()),
+-                lib.sq_binding_iter_free),
+-            next_fn)
+-
+-    def log(self):
+-        yield from sq_iterator(
+-            ffi.gc(
+-                lib.sq_mapping_log(self.context().ref(), self.ref()),
+-                lib.sq_log_iter_free),
+-            lib.sq_log_iter_next,
+-            lambda x: Log(x, context=self.context()))
+-
+-class Binding(SQObject):
+-    _del = lib.sq_binding_free
+-
+-    def stats(self):
+-        return Stats(lib.sq_binding_stats(self.context().ref(), self.ref()),
+-                     self.context())
+-
+-    def key(self):
+-        return Key(lib.sq_binding_key(self.context().ref(), self.ref()),
+-                   self.context())
+-
+-    def cert(self):
+-        return Cert(lib.sq_binding_cert(self.context().ref(), self.ref()),
+-                   self.context())
+-
+-    def import_(self, cert):
+-        return Cert(lib.sq_binding_import(self.context().ref(), self.ref(), cert),
+-                   self.context())
+-
+-    def rotate(self, cert):
+-        return Cert(lib.sq_binding_rotate(self.context().ref(), self.ref(), cert),
+-                   self.context())
+-
+-    def delete(self):
+-        if lib.sq_binding_delete(self.ref()):
+-            raise Error._last(self.context())
+-        super(Binding, self)._delete(skip_free=True)
+-
+-    def log(self):
+-        yield from sq_iterator(
+-            ffi.gc(
+-                lib.sq_binding_log(self.context().ref(), self.ref()),
+-                lib.sq_log_iter_free),
+-            lib.sq_log_iter_next,
+-            lambda x: Log(x, context=self.context()))
+-
+-class Key(SQObject):
+-    _del = lib.sq_key_free
+-
+-    def stats(self):
+-        return Stats(lib.sq_key_stats(self.context().ref(), self.ref()),
+-                     self.context())
+-
+-    def cert(self):
+-        return Cert(lib.sq_key_cert(self.context().ref(), self.ref()),
+-                   self.context())
+-
+-    def import_(self, cert):
+-        return Cert(lib.sq_key_import(self.context().ref(), self.ref(), cert),
+-                   self.context())
+-
+-    def log(self):
+-        yield from sq_iterator(
+-            ffi.gc(
+-                lib.sq_key_log(self.context().ref(), self.ref()),
+-                lib.sq_log_iter_free),
+-            lib.sq_log_iter_next)
+-
+-
+-class Stats(SQObject):
+-    _del = lib.sq_stats_free
+-    def __init__(self, o, context=None):
+-        super(Stats, self).__init__(o, context=context)
+-        self.encryption = Stamps(ffi.addressof(o, "encryption"))
+-        self.verification = Stamps(ffi.addressof(o, "verification"))
+-
+-    @property
+-    def created(self):
+-        return sq_time(self.ref().created)
+-
+-    @property
+-    def updated(self):
+-        return sq_time(self.ref().updated)
+-
+-    def __str__(self):
+-        return \
+-            "Stats{{created={}, updated={}, encryption={}, verification={}}}" \
+-            .format(self.created, self.updated, self.encryption,
+-                    self.verification)
+-
+-class Stamps(SQObject):
+-    @property
+-    def count(self):
+-        return self.ref().count
+-
+-    @property
+-    def first(self):
+-        return sq_time(self.ref().first)
+-
+-    @property
+-    def last(self):
+-        return sq_time(self.ref().last)
+-
+-    def __str__(self):
+-        return "Stamps{{count={}, first={}, last={}}}".format(
+-            self.count, self.first, self.last)
+-
+-class Log(SQObject):
+-    _del = lib.sq_log_free
+-
+-    @property
+-    def timestamp(self):
+-        return sq_time(self.ref().timestamp)
+-
+-    @property
+-    def store(self):
+-        if self.ref().store == ffi.NULL:
+-            return None
+-        else:
+-            return Store(self.ref().store, context=self.context(),
+-                         owner=self)
+-
+-    @property
+-    def binding(self):
+-        if self.ref().binding == ffi.NULL:
+-            return None
+-        else:
+-            return Binding(self.ref().binding, context=self.context(),
+-                           owner=self)
+-
+-    @property
+-    def key(self):
+-        if self.ref().key == ffi.NULL:
+-            return None
+-        else:
+-            return Key(self.ref().key, context=self.context(),
+-                       owner=self)
+-
+-    @property
+-    def slug(self):
+-        return ffi.string(self.ref().slug).decode()
+-
+-    @property
+-    def status(self):
+-        return ffi.string(self.ref().status).decode()
+-
+-    @property
+-    def error(self):
+-        if self.ref().error == ffi.NULL:
+-            return None
+-        else:
+-            return ffi.string(self.ref().error).decode()
+-
+-    def __str__(self):
+-        if self.error:
+-            return "{}: {}: {}: {}".format(
+-                self.timestamp, self.slug, self.status, self.error)
+-        else:
+-            return "{}: {}: {}".format(
+-                self.timestamp, self.slug, self.status)
+diff --git a/ffi/lang/python/tests/test_store.py b/ffi/lang/python/tests/test_store.py
+deleted file mode 100644
+index 7b06cc1a..00000000
+--- a/ffi/lang/python/tests/test_store.py
++++ /dev/null
+@@ -1,47 +0,0 @@
+-from sequoia.prelude import Context, Store, Mapping, Fingerprint
+-
+-def test_open():
+-    c = Context(ephemeral=True)
+-    Mapping.open(c)
+-
+-def test_add():
+-    c = Context(ephemeral=True)
+-    s = Mapping.open(c)
+-    fp = Fingerprint.from_hex("7DCA58B54EB143169DDEE15F247F6DABC84914FE")
+-    s.add("Ἀριστοτέλης", fp)
+-
+-def test_iterate():
+-    c = Context(ephemeral=True)
+-    s = Mapping.open(c)
+-    fp = Fingerprint.from_hex("7DCA58B54EB143169DDEE15F247F6DABC84914FE")
+-    s.add("Ἀριστοτέλης", fp)
+-    l = list(s.iter())
+-    assert len(l) == 1
+-    l = list(Store.list_keys(c))
+-    assert len(l) == 1
+-    fpi, key = l[0]
+-    assert fpi == fp
+-
+-def test_logs():
+-    c = Context(ephemeral=True)
+-    s = Mapping.open(c)
+-    fp = Fingerprint.from_hex("7DCA58B54EB143169DDEE15F247F6DABC84914FE")
+-    b = s.add("Ἀριστοτέλης", fp)
+-    l = list(s.iter())
+-    assert len(l) == 1
+-
+-    # global logs
+-    logs = list(Store.log(c))
+-    assert len(logs) > 0
+-
+-    # per store logs
+-    logs = list(s.log())
+-    assert len(logs) > 0
+-
+-    # per binding logs
+-    logs = list(b.log())
+-    assert len(logs) > 0
+-
+-    # per key logs
+-    logs = list(b.key().log())
+-    assert len(logs) > 0
+diff --git a/ffi/src/lib.rs b/ffi/src/lib.rs
+index 40e3672e..9b4577eb 100644
+--- a/ffi/src/lib.rs
++++ b/ffi/src/lib.rs
+@@ -130,7 +130,6 @@ pub(crate) use crate::openpgp::{
+     MoveResultIntoRaw,
+     Maybe,
+     maybe_time,
+-    to_time_t,
+ };
+ 
+ /* Error handling with implicit context.  */
+@@ -146,5 +145,4 @@ macro_rules! ffi_make_fry_from_ctx {
+ pub mod core;
+ pub mod error;
+ pub mod net;
+-pub mod store;
+ 
+GitLab
+
diff --git a/gnu/packages/patches/libsigrokdecode-python3.9-fix.patch b/gnu/packages/patches/libsigrokdecode-python3.9-fix.patch
new file mode 100644
index 0000000000..4a6e1223ec
--- /dev/null
+++ b/gnu/packages/patches/libsigrokdecode-python3.9-fix.patch
@@ -0,0 +1,19 @@
+From: Dan Horák <dan@danny.cz>
+Subject: Add support for Python 3.9
+
+Origin: upstream, https://sigrok.org/gitweb/?p=libsigrokdecode.git;a=commitdiff;h=9b0ad5177bd692f7556a4756bdbd2da81d9c34ce
+Bug-Debian: https://bugs.debian.org/972769
+
+diff --git a/configure.ac b/configure.ac
+index f9958b3..2917cb3 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -100,7 +100,7 @@ SR_PKG_CHECK_SUMMARY([srd_pkglibs_summary])
+ # first, since usually only that variant will add "-lpython3.8".
+ # https://docs.python.org/3/whatsnew/3.8.html#debug-build-uses-the-same-abi-as-release-build
+ SR_PKG_CHECK([python3], [SRD_PKGLIBS],
+-	[python-3.8-embed], [python-3.8 >= 3.8], [python-3.7 >= 3.7], [python-3.6 >= 3.6], [python-3.5 >= 3.5], [python-3.4 >= 3.4], [python-3.3 >= 3.3], [python-3.2 >= 3.2], [python3 >= 3.2])
++	[python-3.9-embed], [python-3.8-embed], [python-3.8 >= 3.8], [python-3.7 >= 3.7], [python-3.6 >= 3.6], [python-3.5 >= 3.5], [python-3.4 >= 3.4], [python-3.3 >= 3.3], [python-3.2 >= 3.2], [python3 >= 3.2])
+ AS_IF([test "x$sr_have_python3" = xno],
+ 	[AC_MSG_ERROR([Cannot find Python 3 development headers.])])
+ 
diff --git a/gnu/packages/patches/libtirpc-hurd-client.patch b/gnu/packages/patches/libtirpc-hurd-client.patch
deleted file mode 100644
index 526ad262d2..0000000000
--- a/gnu/packages/patches/libtirpc-hurd-client.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-Taken from https://salsa.debian.org/debian/libtirpc/-/raw/master/debian/patches/06-hurd-client-port.diff
-
-Description: Fix client code for hurd, avoiding malloc overflow
- When trying to setup a inet connection, it happens the following:
- - in libtirp, src/clnt_vc.c, clnt_vc_create gets called
- - when trying to allocate vc_fd_locks, __rpc_dtbsize() is used as size
-   for that array of fd locks
- - __rpc_dtbsize(), in src/rpc_generic.c, queries using rlimit the
-   maximum (rlim_max) number of file descriptors (RLIMIT_NOFILE):
-   - on Linux, the default is { rlim_cur = 1024, rlim_max = 4096 }
-   - on kFreeBSD, the default is { rlim_cur = 1024, rlim_max = 1024 }
-   - on Hurd, the default is { rlim_cur = 1024, rlim_max = RLIM_INFINITY }
-  meaning that on Hurd the memory allocation fails (as
-  __rpc_dtbsize() * sizeof(int) overflows and is negative)
-
- Change libtiprc so __rpc_dtbsize falls back on rlim_cur if rlim_max
- is unlimited.
-
- This patch fixes the client connection using inet sockets; local unix
- sockets are not working, for two reasons so far:
- - getpeername on them gives EOPNOTSUPP
- - SO_REUSEADDR is not implemented for them
-Author: Pino Toscano <pino@debian.org>
-
-Bug-Debian: http://bugs.debian.org/739674
-Forwarded: no
-Reviewed-By: Petter Reinholdtsen
-Last-Update: 2014-03-03
-
---- a/src/rpc_generic.c
-+++ b/src/rpc_generic.c
-@@ -107,12 +107,17 @@
- {
- 	static int tbsize;
- 	struct rlimit rl;
-+	rlim_t lim;
- 
- 	if (tbsize) {
- 		return (tbsize);
- 	}
- 	if (getrlimit(RLIMIT_NOFILE, &rl) == 0) {
--		return (tbsize = (int)rl.rlim_max);
-+		lim = rl.rlim_max;
-+		if (lim == RLIM_INFINITY) {
-+			lim = rl.rlim_cur;
-+		}
-+		return (tbsize = (int)lim);
- 	}
- 	/*
- 	 * Something wrong.  I'll try to save face by returning a
diff --git a/gnu/packages/patches/libtool-skip-tests2.patch b/gnu/packages/patches/libtool-skip-tests2.patch
index c9d61e3b41..3f86191b4f 100644
--- a/gnu/packages/patches/libtool-skip-tests2.patch
+++ b/gnu/packages/patches/libtool-skip-tests2.patch
@@ -1,4 +1,4 @@
-Skip the nopic test on ARM and MIPS systems.
+Skip the nopic test on ARM, MIPS and RISC-V systems.
 
 --- libtool-2.4.6/tests/demo.at.orig	2015-01-16 13:52:04.000000000 -0500
 +++ libtool-2.4.6/tests/demo.at	2015-02-16 10:48:51.435851966 -0500
@@ -7,7 +7,7 @@ Skip the nopic test on ARM and MIPS systems.
  
  AT_CHECK([case $host in
 -hppa*|x86_64*|s390*)
-+hppa*|x86_64*|s390*|arm*|mips*)
++hppa*|x86_64*|s390*|arm*|mips*|riscv*)
    # These hosts cannot use non-PIC shared libs
    exit 77 ;;
  *-solaris*|*-sunos*)
@@ -18,7 +18,7 @@ Skip the nopic test on ARM and MIPS systems.
  { set +x
  $as_echo "$at_srcdir/demo.at:535: case \$host in
 -hppa*|x86_64*|s390*)
-+hppa*|x86_64*|s390*|arm*|mips*)
++hppa*|x86_64*|s390*|arm*|mips*|riscv*)
    # These hosts cannot use non-PIC shared libs
    exit 77 ;;
  *-solaris*|*-sunos*)
@@ -27,7 +27,7 @@ Skip the nopic test on ARM and MIPS systems.
  at_fn_check_prepare_notrace 'a `...` command substitution' "demo.at:535"
  ( $at_check_trace; case $host in
 -hppa*|x86_64*|s390*)
-+hppa*|x86_64*|s390*|arm*|mips*)
++hppa*|x86_64*|s390*|arm*|mips*|riscv*)
    # These hosts cannot use non-PIC shared libs
    exit 77 ;;
  *-solaris*|*-sunos*)
diff --git a/gnu/packages/patches/libunwind-julia-fix-GCC10-fno-common.patch b/gnu/packages/patches/libunwind-julia-fix-GCC10-fno-common.patch
new file mode 100644
index 0000000000..8ef4b111e4
--- /dev/null
+++ b/gnu/packages/patches/libunwind-julia-fix-GCC10-fno-common.patch
@@ -0,0 +1,40 @@
+Fix compilation with -fno-common.
+
+Borrowed from upstream 29e17d8d2ccbca07c423e3089a6d5ae8a1c9cb6e.
+Author:     Yichao Yu <yyc1992@gmail.com>
+AuthorDate: Tue Mar 31 00:43:32 2020 -0400
+Commit:     Dave Watson <dade.watson@gmail.com>
+CommitDate: Tue Mar 31 08:06:29 2020 -0700
+
+diff --git a/src/x86/Ginit.c b/src/x86/Ginit.c
+index f6b8dc2..9550efa 100644
+--- a/src/x86/Ginit.c
++++ b/src/x86/Ginit.c
+@@ -54,13 +54,6 @@ tdep_uc_addr (ucontext_t *uc, int reg)
+ 
+ # endif /* UNW_LOCAL_ONLY */
+ 
+-HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
+-
+-/* XXX fix me: there is currently no way to locate the dyn-info list
+-       by a remote unwinder.  On ia64, this is done via a special
+-       unwind-table entry.  Perhaps something similar can be done with
+-       DWARF2 unwind info.  */
+-
+ static void
+ put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
+ {
+@@ -71,7 +64,12 @@ static int
+ get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
+                         void *arg)
+ {
+-  *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
++#ifndef UNW_LOCAL_ONLY
++# pragma weak _U_dyn_info_list_addr
++  if (!_U_dyn_info_list_addr)
++    return -UNW_ENOINFO;
++#endif
++  *dyn_info_list_addr = _U_dyn_info_list_addr ();
+   return 0;
+ }
+ 
diff --git a/gnu/packages/patches/libxml2-parent-pointers.patch b/gnu/packages/patches/libxml2-parent-pointers.patch
new file mode 100644
index 0000000000..1f0615c512
--- /dev/null
+++ b/gnu/packages/patches/libxml2-parent-pointers.patch
@@ -0,0 +1,228 @@
+Fix a regression in 2.9.12 where some corrupt XML structures were handled
+incorrectly:
+
+  https://gitlab.gnome.org/GNOME/libxml2/-/issues/255
+
+This is an amalgamation of these upstream commits:
+
+  https://gitlab.gnome.org/GNOME/libxml2/-/commit/85b1792e37b131e7a51af98a37f92472e8de5f3f
+  https://gitlab.gnome.org/GNOME/libxml2/-/commit/13ad8736d294536da4cbcd70a96b0a2fbf47070c
+
+diff --git a/HTMLtree.c b/HTMLtree.c
+--- a/HTMLtree.c
++++ b/HTMLtree.c
+@@ -744,7 +744,7 @@ void
+ htmlNodeDumpFormatOutput(xmlOutputBufferPtr buf, xmlDocPtr doc,
+ 	                 xmlNodePtr cur, const char *encoding ATTRIBUTE_UNUSED,
+                          int format) {
+-    xmlNodePtr root;
++    xmlNodePtr root, parent;
+     xmlAttrPtr attr;
+     const htmlElemDesc * info;
+ 
+@@ -755,6 +755,7 @@ htmlNodeDumpFormatOutput(xmlOutputBufferPtr buf, xmlDocPtr doc,
+     }
+ 
+     root = cur;
++    parent = cur->parent;
+     while (1) {
+         switch (cur->type) {
+         case XML_HTML_DOCUMENT_NODE:
+@@ -762,13 +763,25 @@ htmlNodeDumpFormatOutput(xmlOutputBufferPtr buf, xmlDocPtr doc,
+             if (((xmlDocPtr) cur)->intSubset != NULL) {
+                 htmlDtdDumpOutput(buf, (xmlDocPtr) cur, NULL);
+             }
+-            if (cur->children != NULL) {
++            /* Always validate cur->parent when descending. */
++            if ((cur->parent == parent) && (cur->children != NULL)) {
++                parent = cur;
+                 cur = cur->children;
+                 continue;
+             }
+             break;
+ 
+         case XML_ELEMENT_NODE:
++            /*
++             * Some users like lxml are known to pass nodes with a corrupted
++             * tree structure. Fall back to a recursive call to handle this
++             * case.
++             */
++            if ((cur->parent != parent) && (cur->children != NULL)) {
++                htmlNodeDumpFormatOutput(buf, doc, cur, encoding, format);
++                break;
++            }
++
+             /*
+              * Get specific HTML info for that node.
+              */
+@@ -817,6 +830,7 @@ htmlNodeDumpFormatOutput(xmlOutputBufferPtr buf, xmlDocPtr doc,
+                     (cur->name != NULL) &&
+                     (cur->name[0] != 'p')) /* p, pre, param */
+                     xmlOutputBufferWriteString(buf, "\n");
++                parent = cur;
+                 cur = cur->children;
+                 continue;
+             }
+@@ -825,9 +839,9 @@ htmlNodeDumpFormatOutput(xmlOutputBufferPtr buf, xmlDocPtr doc,
+                 (info != NULL) && (!info->isinline)) {
+                 if ((cur->next->type != HTML_TEXT_NODE) &&
+                     (cur->next->type != HTML_ENTITY_REF_NODE) &&
+-                    (cur->parent != NULL) &&
+-                    (cur->parent->name != NULL) &&
+-                    (cur->parent->name[0] != 'p')) /* p, pre, param */
++                    (parent != NULL) &&
++                    (parent->name != NULL) &&
++                    (parent->name[0] != 'p')) /* p, pre, param */
+                     xmlOutputBufferWriteString(buf, "\n");
+             }
+ 
+@@ -842,9 +856,9 @@ htmlNodeDumpFormatOutput(xmlOutputBufferPtr buf, xmlDocPtr doc,
+                 break;
+             if (((cur->name == (const xmlChar *)xmlStringText) ||
+                  (cur->name != (const xmlChar *)xmlStringTextNoenc)) &&
+-                ((cur->parent == NULL) ||
+-                 ((xmlStrcasecmp(cur->parent->name, BAD_CAST "script")) &&
+-                  (xmlStrcasecmp(cur->parent->name, BAD_CAST "style"))))) {
++                ((parent == NULL) ||
++                 ((xmlStrcasecmp(parent->name, BAD_CAST "script")) &&
++                  (xmlStrcasecmp(parent->name, BAD_CAST "style"))))) {
+                 xmlChar *buffer;
+ 
+                 buffer = xmlEncodeEntitiesReentrant(doc, cur->content);
+@@ -902,13 +916,9 @@ htmlNodeDumpFormatOutput(xmlOutputBufferPtr buf, xmlDocPtr doc,
+                 break;
+             }
+ 
+-            /*
+-             * The parent should never be NULL here but we want to handle
+-             * corrupted documents gracefully.
+-             */
+-            if (cur->parent == NULL)
+-                return;
+-            cur = cur->parent;
++            cur = parent;
++            /* cur->parent was validated when descending. */
++            parent = cur->parent;
+ 
+             if ((cur->type == XML_HTML_DOCUMENT_NODE) ||
+                 (cur->type == XML_DOCUMENT_NODE)) {
+@@ -939,9 +949,9 @@ htmlNodeDumpFormatOutput(xmlOutputBufferPtr buf, xmlDocPtr doc,
+                     (cur->next != NULL)) {
+                     if ((cur->next->type != HTML_TEXT_NODE) &&
+                         (cur->next->type != HTML_ENTITY_REF_NODE) &&
+-                        (cur->parent != NULL) &&
+-                        (cur->parent->name != NULL) &&
+-                        (cur->parent->name[0] != 'p')) /* p, pre, param */
++                        (parent != NULL) &&
++                        (parent->name != NULL) &&
++                        (parent->name[0] != 'p')) /* p, pre, param */
+                         xmlOutputBufferWriteString(buf, "\n");
+                 }
+             }
+diff --git a/xmlsave.c b/xmlsave.c
+--- a/xmlsave.c
++++ b/xmlsave.c
+@@ -847,7 +847,7 @@ htmlNodeDumpOutputInternal(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
+ static void
+ xmlNodeDumpOutputInternal(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
+     int format = ctxt->format;
+-    xmlNodePtr tmp, root, unformattedNode = NULL;
++    xmlNodePtr tmp, root, unformattedNode = NULL, parent;
+     xmlAttrPtr attr;
+     xmlChar *start, *end;
+     xmlOutputBufferPtr buf;
+@@ -856,6 +856,7 @@ xmlNodeDumpOutputInternal(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
+     buf = ctxt->buf;
+ 
+     root = cur;
++    parent = cur->parent;
+     while (1) {
+         switch (cur->type) {
+         case XML_DOCUMENT_NODE:
+@@ -868,7 +869,9 @@ xmlNodeDumpOutputInternal(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
+             break;
+ 
+         case XML_DOCUMENT_FRAG_NODE:
+-            if (cur->children != NULL) {
++            /* Always validate cur->parent when descending. */
++            if ((cur->parent == parent) && (cur->children != NULL)) {
++                parent = cur;
+                 cur = cur->children;
+                 continue;
+             }
+@@ -887,7 +890,18 @@ xmlNodeDumpOutputInternal(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
+             break;
+ 
+         case XML_ELEMENT_NODE:
+-	    if ((cur != root) && (ctxt->format == 1) && (xmlIndentTreeOutput))
++            /*
++             * Some users like lxml are known to pass nodes with a corrupted
++             * tree structure. Fall back to a recursive call to handle this
++             * case.
++             */
++            if ((cur->parent != parent) && (cur->children != NULL)) {
++                xmlNodeDumpOutputInternal(ctxt, cur);
++                break;
++            }
++
++	    if ((ctxt->level > 0) && (ctxt->format == 1) &&
++                (xmlIndentTreeOutput))
+ 		xmlOutputBufferWrite(buf, ctxt->indent_size *
+ 				     (ctxt->level > ctxt->indent_nr ?
+ 				      ctxt->indent_nr : ctxt->level),
+@@ -942,6 +956,7 @@ xmlNodeDumpOutputInternal(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
+                 xmlOutputBufferWrite(buf, 1, ">");
+                 if (ctxt->format == 1) xmlOutputBufferWrite(buf, 1, "\n");
+                 if (ctxt->level >= 0) ctxt->level++;
++                parent = cur;
+                 cur = cur->children;
+                 continue;
+             }
+@@ -1058,13 +1073,9 @@ xmlNodeDumpOutputInternal(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
+                 break;
+             }
+ 
+-            /*
+-             * The parent should never be NULL here but we want to handle
+-             * corrupted documents gracefully.
+-             */
+-            if (cur->parent == NULL)
+-                return;
+-            cur = cur->parent;
++            cur = parent;
++            /* cur->parent was validated when descending. */
++            parent = cur->parent;
+ 
+             if (cur->type == XML_ELEMENT_NODE) {
+                 if (ctxt->level > 0) ctxt->level--;
+diff --git a/xmlsave.c b/xmlsave.c
+--- a/xmlsave.c
++++ b/xmlsave.c
+@@ -890,6 +890,13 @@ xmlNodeDumpOutputInternal(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
+             break;
+ 
+         case XML_ELEMENT_NODE:
++	    if ((cur != root) && (ctxt->format == 1) &&
++                (xmlIndentTreeOutput))
++		xmlOutputBufferWrite(buf, ctxt->indent_size *
++				     (ctxt->level > ctxt->indent_nr ?
++				      ctxt->indent_nr : ctxt->level),
++				     ctxt->indent);
++
+             /*
+              * Some users like lxml are known to pass nodes with a corrupted
+              * tree structure. Fall back to a recursive call to handle this
+@@ -900,13 +907,6 @@ xmlNodeDumpOutputInternal(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
+                 break;
+             }
+ 
+-	    if ((ctxt->level > 0) && (ctxt->format == 1) &&
+-                (xmlIndentTreeOutput))
+-		xmlOutputBufferWrite(buf, ctxt->indent_size *
+-				     (ctxt->level > ctxt->indent_nr ?
+-				      ctxt->indent_nr : ctxt->level),
+-				     ctxt->indent);
+-
+             xmlOutputBufferWrite(buf, 1, "<");
+             if ((cur->ns != NULL) && (cur->ns->prefix != NULL)) {
+                 xmlOutputBufferWriteString(buf, (const char *)cur->ns->prefix);
diff --git a/gnu/packages/patches/libxml2-terminating-newline.patch b/gnu/packages/patches/libxml2-terminating-newline.patch
new file mode 100644
index 0000000000..3f5c88dd4e
--- /dev/null
+++ b/gnu/packages/patches/libxml2-terminating-newline.patch
@@ -0,0 +1,33 @@
+Fix a regression in 2.9.12 where serializing empty HTML documents would
+not add a terminating newline.
+
+  https://gitlab.gnome.org/GNOME/libxml2/-/issues/266
+
+Taken from upstream:
+
+  https://gitlab.gnome.org/GNOME/libxml2/-/commit/92d9ab4c28842a09ca2b76d3ff2f933e01b6cd6f
+
+diff --git a/HTMLtree.c b/HTMLtree.c
+--- a/HTMLtree.c
++++ b/HTMLtree.c
+@@ -763,11 +763,15 @@ htmlNodeDumpFormatOutput(xmlOutputBufferPtr buf, xmlDocPtr doc,
+             if (((xmlDocPtr) cur)->intSubset != NULL) {
+                 htmlDtdDumpOutput(buf, (xmlDocPtr) cur, NULL);
+             }
+-            /* Always validate cur->parent when descending. */
+-            if ((cur->parent == parent) && (cur->children != NULL)) {
+-                parent = cur;
+-                cur = cur->children;
+-                continue;
++            if (cur->children != NULL) {
++                /* Always validate cur->parent when descending. */
++                if (cur->parent == parent) {
++                    parent = cur;
++                    cur = cur->children;
++                    continue;
++                }
++            } else {
++                xmlOutputBufferWriteString(buf, "\n");
+             }
+             break;
+ 
diff --git a/gnu/packages/patches/libxml2-xpath-recursion-limit.patch b/gnu/packages/patches/libxml2-xpath-recursion-limit.patch
new file mode 100644
index 0000000000..051196c635
--- /dev/null
+++ b/gnu/packages/patches/libxml2-xpath-recursion-limit.patch
@@ -0,0 +1,20 @@
+Fix recursion accounting in XPath expressions:
+
+  https://gitlab.gnome.org/GNOME/libxml2/-/issues/264
+
+Taken from upstream:
+
+  https://gitlab.gnome.org/GNOME/libxml2/-/commit/3e1aad4fe584747fd7d17cc7b2863a78e2d21a77
+
+diff --git a/xpath.c b/xpath.c
+--- a/xpath.c
++++ b/xpath.c
+@@ -10983,7 +10983,7 @@ xmlXPathCompileExpr(xmlXPathParserContextPtr ctxt, int sort) {
+     }
+ 
+     if (xpctxt != NULL)
+-        xpctxt->depth -= 1;
++        xpctxt->depth -= 10;
+ }
+ 
+ /**
diff --git a/gnu/packages/patches/libxt-guix-search-paths.patch b/gnu/packages/patches/libxt-guix-search-paths.patch
index 5419edd1bd..61022d232a 100644
--- a/gnu/packages/patches/libxt-guix-search-paths.patch
+++ b/gnu/packages/patches/libxt-guix-search-paths.patch
@@ -1,13 +1,9 @@
 diff --git a/src/Intrinsic.c b/src/Intrinsic.c
-index c9624ec..addcdba 100644
 --- a/src/Intrinsic.c
 +++ b/src/Intrinsic.c
-@@ -1312,21 +1312,101 @@ static void FillInLangSubs(
-     } else (void) strcpy(*rest, string);
+@@ -1345,21 +1345,99 @@ FillInLangSubs(Substitution subs, XtPerDisplay pd)
  }
  
-+
-+
  /*
 - * default path used if environment variable XFILESEARCHPATH
 - * is not defined.  Also substitued for %D.
@@ -24,8 +20,9 @@ index c9624ec..addcdba 100644
 +   These values provide the default paths where Guix/GuixSD can expect
 +   to find resources for installed packages.
   */
--static const char *implementation_default_path(void)
-+static const char *guix_default_path(void)
+ static const char *
+-implementation_default_path(void)
++guix_default_path(void)
  {
 -#if defined(WIN32)
 -    static char xfilesearchpath[] = "";
@@ -115,7 +112,7 @@ index c9624ec..addcdba 100644
  }
  
  
-@@ -1354,7 +1434,7 @@ _XtString XtResolvePathname(
+@@ -1388,7 +1466,7 @@ XtResolvePathname(Display *dpy,
  {
      XtPerDisplay pd;
      static const char *defaultPath = NULL;
diff --git a/gnu/packages/patches/linuxdcpp-openssl-1.1.patch b/gnu/packages/patches/linuxdcpp-openssl-1.1.patch
new file mode 100644
index 0000000000..6f9912afd8
--- /dev/null
+++ b/gnu/packages/patches/linuxdcpp-openssl-1.1.patch
@@ -0,0 +1,26 @@
+--- a/dcpp/CryptoManager.cpp.orig	2011-04-17 17:57:09 UTC
++++ b/dcpp/CryptoManager.cpp
+@@ -107,12 +107,20 @@ CryptoManager::CryptoManager()
+                 };
+ 
+ 		if(dh) {
+-			dh->p = BN_bin2bn(dh4096_p, sizeof(dh4096_p), 0);
+-			dh->g = BN_bin2bn(dh4096_g, sizeof(dh4096_g), 0);
++			BIGNUM *p, *g;
+ 
+-			if (!dh->p || !dh->g) {
++			p = BN_bin2bn(dh4096_p, sizeof(dh4096_p), 0);
++			g = BN_bin2bn(dh4096_g, sizeof(dh4096_g), 0);
++
++			if (!p || !g) {
+ 				dh.reset();
+ 			} else {
++#if OPENSSL_VERSION_NUMBER < 0x10100005L
++				dh->p = p;
++				dh->g = g;
++#else
++				DH_set0_pqg(dh, p, NULL, g);
++#endif
+ 				SSL_CTX_set_options(serverContext, SSL_OP_SINGLE_DH_USE);
+ 				SSL_CTX_set_options(serverVerContext, SSL_OP_SINGLE_DH_USE);
+ 				SSL_CTX_set_tmp_dh(serverContext, (DH*)dh);
diff --git a/gnu/packages/patches/llvm-3.6-fix-build-with-gcc-10.patch b/gnu/packages/patches/llvm-3.6-fix-build-with-gcc-10.patch
new file mode 100644
index 0000000000..4982587d15
--- /dev/null
+++ b/gnu/packages/patches/llvm-3.6-fix-build-with-gcc-10.patch
@@ -0,0 +1,13 @@
+Adapted from https://github.com/digego/extempore/pull/322/files
+
+--- a/include/llvm/IR/ValueMap.h	2015-08-04 00:30:24.000000000 +0200
++++ b/include/llvm/IR/ValueMap.h	2018-07-14 21:09:09.769502736 +0200
+@@ -99,7 +99,7 @@
+   explicit ValueMap(const ExtraData &Data, unsigned NumInitBuckets = 64)
+       : Map(NumInitBuckets), Data(Data) {}
+
+-  bool hasMD() const { return MDMap; }
++  bool hasMD() const { return static_cast<bool>(MDMap); }
+   MDMapT &MD() {
+     if (!MDMap)
+       MDMap.reset(new MDMapT);
diff --git a/gnu/packages/patches/lua-5.4-liblua-so.patch b/gnu/packages/patches/lua-5.4-liblua-so.patch
new file mode 100644
index 0000000000..93dd011143
--- /dev/null
+++ b/gnu/packages/patches/lua-5.4-liblua-so.patch
@@ -0,0 +1,33 @@
+Patch the makefile to create liblua.so.
+
+--- a/src/Makefile	2021-02-09 18:47:17.000000000 +0000
++++ b/src/Makefile	2022-01-03 11:30:36.964501941 +0000
+@@ -33,6 +33,7 @@
+ PLATS= guess aix bsd c89 freebsd generic linux linux-readline macosx mingw posix solaris
+ 
+ LUA_A=	liblua.a
++LUA_SO= liblua.so
+ CORE_O=	lapi.o lcode.o lctype.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o lmem.o lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o ltm.o lundump.o lvm.o lzio.o
+ LIB_O=	lauxlib.o lbaselib.o lcorolib.o ldblib.o liolib.o lmathlib.o loadlib.o loslib.o lstrlib.o ltablib.o lutf8lib.o linit.o
+ BASE_O= $(CORE_O) $(LIB_O) $(MYOBJS)
+@@ -44,7 +45,7 @@
+ LUAC_O=	luac.o
+ 
+ ALL_O= $(BASE_O) $(LUA_O) $(LUAC_O)
+-ALL_T= $(LUA_A) $(LUA_T) $(LUAC_T)
++ALL_T= $(LUA_A) $(LUA_T) $(LUAC_T) $(LUA_SO)
+ ALL_A= $(LUA_A)
+ 
+ # Targets start here.
+@@ -56,6 +57,11 @@
+ 
+ a:	$(ALL_A)
+ 
++$(LUA_SO): $(CORE_O) $(LIB_O)
++	$(CC) -shared -ldl -Wl,-soname,$(LUA_SO).$(V) -o $@.$(R) $? -lm $(MYLDFLAGS)
++	ln -sf $(LUA_SO).$(R) $(LUA_SO).$(V)
++	ln -sf $(LUA_SO).$(R) $(LUA_SO)
++
+ $(LUA_A): $(BASE_O)
+ 	$(AR) $@ $(BASE_O)
+ 	$(RANLIB) $@
diff --git a/gnu/packages/patches/lua-5.4-pkgconfig.patch b/gnu/packages/patches/lua-5.4-pkgconfig.patch
new file mode 100644
index 0000000000..eb42633585
--- /dev/null
+++ b/gnu/packages/patches/lua-5.4-pkgconfig.patch
@@ -0,0 +1,110 @@
+Enables generating Lua's pkg-config file.
+
+http://lua-users.org/lists/lua-l/2015-03/msg00338.html
+
+--- a/Makefile	2022-01-03 12:06:37.760402709 +0000
++++ b/Makefile	2022-01-03 12:06:49.568402167 +0000
+@@ -14,6 +14,7 @@
+ INSTALL_BIN= $(INSTALL_TOP)/bin
+ INSTALL_INC= $(INSTALL_TOP)/include
+ INSTALL_LIB= $(INSTALL_TOP)/lib
++INSTALL_PC= $(INSTALL_LIB)/pkgconfig
+ INSTALL_MAN= $(INSTALL_TOP)/man/man1
+ INSTALL_LMOD= $(INSTALL_TOP)/share/lua/$V
+ INSTALL_CMOD= $(INSTALL_TOP)/lib/lua/$V
+@@ -39,9 +40,12 @@
+ PLATS= guess aix bsd c89 freebsd generic linux linux-readline macosx mingw posix solaris
+ 
+ # What to install.
+-TO_BIN= lua luac
++INTERPRETER= lua
++COMPILER= luac
++TO_BIN= $(INTERPRETER) $(COMPILER)
+ TO_INC= lua.h luaconf.h lualib.h lauxlib.h lua.hpp
+-TO_LIB= liblua.a
++TO_LIB= liblua.a liblua.so liblua.so.${V}
++TO_PC=  lua-$(V).pc
+ TO_MAN= lua.1 luac.1
+ 
+ # Lua version and release.
+@@ -51,20 +55,26 @@
+ # Targets start here.
+ all:	$(PLAT)
+ 
+-$(PLATS) help test clean:
+-	@cd src && $(MAKE) $@
++$(PLATS):
++	@cd src && $(MAKE) $@ V=$(V) R=$(R)
+ 
+-install: dummy
+-	cd src && $(MKDIR) $(INSTALL_BIN) $(INSTALL_INC) $(INSTALL_LIB) $(INSTALL_MAN) $(INSTALL_LMOD) $(INSTALL_CMOD)
++clean:
++	cd src && $(MAKE) $@
++	$(RM) $(TO_PC)
++	
++install: dummy $(TO_PC)
++	cd src && $(MKDIR) $(INSTALL_BIN) $(INSTALL_INC) $(INSTALL_LIB) $(INSTALL_PC) $(INSTALL_MAN) $(INSTALL_LMOD) $(INSTALL_CMOD)
+ 	cd src && $(INSTALL_EXEC) $(TO_BIN) $(INSTALL_BIN)
+ 	cd src && $(INSTALL_DATA) $(TO_INC) $(INSTALL_INC)
+-	cd src && $(INSTALL_DATA) $(TO_LIB) $(INSTALL_LIB)
++	cd src && $(INSTALL_EXEC) $(TO_LIB) $(INSTALL_LIB)
++	cd src && $(INSTALL_DATA) ../$(TO_PC) $(INSTALL_PC)
+ 	cd doc && $(INSTALL_DATA) $(TO_MAN) $(INSTALL_MAN)
+ 
+ uninstall:
+ 	cd src && cd $(INSTALL_BIN) && $(RM) $(TO_BIN)
+ 	cd src && cd $(INSTALL_INC) && $(RM) $(TO_INC)
+ 	cd src && cd $(INSTALL_LIB) && $(RM) $(TO_LIB)
++	cd src && cd $(INSTALL_PC)  && $(RM) $(TO_PC)
+ 	cd doc && cd $(INSTALL_MAN) && $(RM) $(TO_MAN)
+ 
+ local:
+@@ -82,11 +92,13 @@
+ 	@echo "TO_BIN= $(TO_BIN)"
+ 	@echo "TO_INC= $(TO_INC)"
+ 	@echo "TO_LIB= $(TO_LIB)"
++	@echo "TO_PC= $(TO_PC)"
+ 	@echo "TO_MAN= $(TO_MAN)"
+ 	@echo "INSTALL_TOP= $(INSTALL_TOP)"
+ 	@echo "INSTALL_BIN= $(INSTALL_BIN)"
+ 	@echo "INSTALL_INC= $(INSTALL_INC)"
+ 	@echo "INSTALL_LIB= $(INSTALL_LIB)"
++	@echo "INSTALL_PC= $(INSTALL_PC)"
+ 	@echo "INSTALL_MAN= $(INSTALL_MAN)"
+ 	@echo "INSTALL_LMOD= $(INSTALL_LMOD)"
+ 	@echo "INSTALL_CMOD= $(INSTALL_CMOD)"
+@@ -95,12 +107,29 @@
+ 
+ # Echo pkg-config data.
+ pc:
+-	@echo "version=$R"
+-	@echo "prefix=$(INSTALL_TOP)"
+-	@echo "libdir=$(INSTALL_LIB)"
+-	@echo "includedir=$(INSTALL_INC)"
++	@echo 'prefix=$(INSTALL_TOP)'
++	@echo 'libdir=$(INSTALL_LIB)'
++	@echo 'includedir=$(INSTALL_INC)'
++	@echo 'bindir=$(INSTALL_BIN)'
++	@echo
++	@echo 'INSTALL_LMOD=$(INSTALL_LMOD)'
++	@echo 'INSTALL_CMOD=$(INSTALL_CMOD)'
++	@echo 'INTERPRETER=$${bindir}/$(INTERPRETER)'
++	@echo 'COMPILER=$${bindir}/$(COMPILER)'
++	@echo
++	@echo 'Name: Lua'
++	@echo 'Description: A powerful, fast, lightweight, embeddable scripting language'
++	@echo 'Version: $(R)'
++	@echo
++	@echo 'Libs: -L$${libdir} -llua -lm'
++	@echo 'Cflags: -I$${includedir}'
++
++pkg-config: $(TO_PC)
++$(TO_PC):
++	@$(MAKE) -s pc > $@
++	
+ 
+ # Targets that do not create files (not all makes understand .PHONY).
+-.PHONY: all $(PLATS) help test clean install uninstall local dummy echo pc
++.PHONY: all $(PLATS) help test clean install uninstall local dummy echo pc pkg-config
+ 
+ # (end of Makefile)
diff --git a/gnu/packages/patches/mariadb-CVE-2021-27928.patch b/gnu/packages/patches/mariadb-CVE-2021-27928.patch
deleted file mode 100644
index 39a023c159..0000000000
--- a/gnu/packages/patches/mariadb-CVE-2021-27928.patch
+++ /dev/null
@@ -1,642 +0,0 @@
-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/mathjax-disable-webpack.patch b/gnu/packages/patches/mathjax-disable-webpack.patch
new file mode 100644
index 0000000000..7e3d705c15
--- /dev/null
+++ b/gnu/packages/patches/mathjax-disable-webpack.patch
@@ -0,0 +1,23 @@
+commit 0cfd5b23aed8767f2bcf9583c1feaf4c9a64703a
+Author: Lars-Dominik Braun <lars@6xq.net>
+Date:   Wed Dec 1 14:27:33 2021 +0100
+
+    guix: Disable webpack
+    
+    Guix uses esbuild to “link” the files. We only need the build step.
+
+diff --git a/components/bin/makeAll b/components/bin/makeAll
+index 3e7a8914..5dae9b9b 100755
+--- a/components/bin/makeAll
++++ b/components/bin/makeAll
+@@ -61,8 +61,8 @@ function processList(dirs) {
+   for (const dir of dirs) {
+     const fulldir = path.resolve(dir);
+     processDir(fulldir, buildLib);
+-    processDir(fulldir, webpackLib);
+-    processDir(fulldir, copyLib);
++    //processDir(fulldir, webpackLib);
++    //processDir(fulldir, copyLib);
+   }
+ }
+ 
diff --git a/gnu/packages/patches/mathjax-no-a11y.patch b/gnu/packages/patches/mathjax-no-a11y.patch
new file mode 100644
index 0000000000..40fb514b5a
--- /dev/null
+++ b/gnu/packages/patches/mathjax-no-a11y.patch
@@ -0,0 +1,286 @@
+commit 9bb6f1e11264fb075bfa70fa3684f10a32414594
+Author: Lars-Dominik Braun <lars@6xq.net>
+Date:   Wed Dec 1 14:28:06 2021 +0100
+
+    guix: Remove accessibility.
+    
+    We cannot build speech-rule-engine from source and thus all dependents
+    must be removed. This affects all a11y modules and menu items, which
+    may try to load components.
+
+diff --git a/components/src/dependencies.js b/components/src/dependencies.js
+index f9be6f93..822f8fb6 100644
+--- a/components/src/dependencies.js
++++ b/components/src/dependencies.js
+@@ -16,9 +16,6 @@
+  */
+ 
+ export const dependencies = {
+-  'a11y/semantic-enrich': ['input/mml', '[sre]'],
+-  'a11y/complexity': ['a11y/semantic-enrich'],
+-  'a11y/explorer': ['a11y/semantic-enrich', 'ui/menu'],
+   '[mml]/mml3': ['input/mml'],
+   '[tex]/all-packages': ['input/tex-base'],
+   '[tex]/action': ['input/tex-base', '[tex]/newcommand'],
+@@ -58,7 +55,6 @@ export const dependencies = {
+ export const paths = {
+   tex: '[mathjax]/input/tex/extensions',
+   mml: '[mathjax]/input/mml/extensions',
+-  sre: '[mathjax]/sre/' + (typeof window === 'undefined' ? 'sre-node' : 'sre_browser')
+ };
+ 
+ const allPackages = [
+diff --git a/components/src/mml-chtml/mml-chtml.js b/components/src/mml-chtml/mml-chtml.js
+index c0bd18ee..a283a1ab 100644
+--- a/components/src/mml-chtml/mml-chtml.js
++++ b/components/src/mml-chtml/mml-chtml.js
+@@ -5,5 +5,4 @@ import '../input/mml/mml.js';
+ import '../output/chtml/chtml.js';
+ import '../output/chtml/fonts/tex/tex.js';
+ import '../ui/menu/menu.js';
+-import '../a11y/assistive-mml/assistive-mml.js';
+ import '../startup/startup.js';
+diff --git a/components/src/mml-chtml/preload.js b/components/src/mml-chtml/preload.js
+index e3f202f7..3699570e 100644
+--- a/components/src/mml-chtml/preload.js
++++ b/components/src/mml-chtml/preload.js
+@@ -5,5 +5,5 @@ Loader.preLoad(
+   'core',
+   'input/mml',
+   'output/chtml', 'output/chtml/fonts/tex.js',
+-  'ui/menu', 'a11y/assistive-mml'
++  'ui/menu'
+ );
+diff --git a/components/src/mml-svg/mml-svg.js b/components/src/mml-svg/mml-svg.js
+index 172b2433..23b66e69 100644
+--- a/components/src/mml-svg/mml-svg.js
++++ b/components/src/mml-svg/mml-svg.js
+@@ -5,5 +5,4 @@ import '../input/mml/mml.js';
+ import '../output/svg/svg.js';
+ import '../output/svg/fonts/tex/tex.js';
+ import '../ui/menu/menu.js';
+-import '../a11y/assistive-mml/assistive-mml.js';
+ import '../startup/startup.js';
+diff --git a/components/src/mml-svg/preload.js b/components/src/mml-svg/preload.js
+index 3cb47d42..89f6b9f9 100644
+--- a/components/src/mml-svg/preload.js
++++ b/components/src/mml-svg/preload.js
+@@ -5,5 +5,5 @@ Loader.preLoad(
+   'core',
+   'input/mml',
+   'output/svg', 'output/svg/fonts/tex.js',
+-  'ui/menu', 'a11y/assistive-mml'
++  'ui/menu'
+ );
+diff --git a/components/src/source.js b/components/src/source.js
+index ba6d6835..02ecf18d 100644
+--- a/components/src/source.js
++++ b/components/src/source.js
+@@ -62,12 +62,6 @@ export const source = {
+   'output/chtml/fonts/tex': `${src}/output/chtml/fonts/tex/tex.js`,
+   'output/svg': `${src}/output/svg/svg.js`,
+   'output/svg/fonts/tex': `${src}/output/svg/fonts/tex/tex.js`,
+-  'a11y/assistive-mml': `${src}/a11y/assistive-mml/assistive-mml.js`,
+-  'a11y/semantic-enrich': `${src}/a11y/semantic-enrich/semantic-enrich.js`,
+-  'a11y/complexity': `${src}/a11y/complexity/complexity.js`,
+-  'a11y/explorer': `${src}/a11y/explorer/explorer.js`,
+-  '[sre]': (typeof window === 'undefined' ? `${src}/../../js/a11y/sre-node.js` :
+-            `${src}/../../node_modules/speech-rule-engine/lib/sre_browser.js`),
+   'ui/lazy': `${src}/ui/lazy/lazy.js`,
+   'ui/menu': `${src}/ui/menu/menu.js`,
+   'ui/safe': `${src}/ui/safe/safe.js`,
+diff --git a/components/src/tex-chtml-full/preload.js b/components/src/tex-chtml-full/preload.js
+index 76c81c92..0eb3a8e2 100644
+--- a/components/src/tex-chtml-full/preload.js
++++ b/components/src/tex-chtml-full/preload.js
+@@ -5,5 +5,5 @@ Loader.preLoad(
+   'core',
+   'input/tex-full',
+   'output/chtml', 'output/chtml/fonts/tex.js',
+-  'ui/menu', 'a11y/assistive-mml'
++  'ui/menu'
+ );
+diff --git a/components/src/tex-chtml-full/tex-chtml-full.js b/components/src/tex-chtml-full/tex-chtml-full.js
+index 12291be9..c3f59e6b 100644
+--- a/components/src/tex-chtml-full/tex-chtml-full.js
++++ b/components/src/tex-chtml-full/tex-chtml-full.js
+@@ -5,5 +5,4 @@ import '../input/tex-full/tex-full.js';
+ import '../output/chtml/chtml.js';
+ import '../output/chtml/fonts/tex/tex.js';
+ import '../ui/menu/menu.js';
+-import '../a11y/assistive-mml/assistive-mml.js';
+ import '../startup/startup.js';
+diff --git a/components/src/tex-chtml/preload.js b/components/src/tex-chtml/preload.js
+index 89f110c5..5dae092f 100644
+--- a/components/src/tex-chtml/preload.js
++++ b/components/src/tex-chtml/preload.js
+@@ -5,5 +5,5 @@ Loader.preLoad(
+   'core',
+   'input/tex',
+   'output/chtml', 'output/chtml/fonts/tex.js',
+-  'ui/menu', 'a11y/assistive-mml'
++  'ui/menu'
+ );
+diff --git a/components/src/tex-chtml/tex-chtml.js b/components/src/tex-chtml/tex-chtml.js
+index 8d98865e..4d100a48 100644
+--- a/components/src/tex-chtml/tex-chtml.js
++++ b/components/src/tex-chtml/tex-chtml.js
+@@ -5,5 +5,4 @@ import '../input/tex/tex.js';
+ import '../output/chtml/chtml.js';
+ import '../output/chtml/fonts/tex/tex.js';
+ import '../ui/menu/menu.js';
+-import '../a11y/assistive-mml/assistive-mml.js';
+ import '../startup/startup.js';
+diff --git a/components/src/tex-mml-chtml/preload.js b/components/src/tex-mml-chtml/preload.js
+index 7adb6a3b..3945370f 100644
+--- a/components/src/tex-mml-chtml/preload.js
++++ b/components/src/tex-mml-chtml/preload.js
+@@ -5,5 +5,5 @@ Loader.preLoad(
+   'core',
+   'input/tex', 'input/mml',
+   'output/chtml', 'output/chtml/fonts/tex.js',
+-  'ui/menu', 'a11y/assistive-mml'
++  'ui/menu'
+ );
+diff --git a/components/src/tex-mml-chtml/tex-mml-chtml.js b/components/src/tex-mml-chtml/tex-mml-chtml.js
+index 4167bd59..0b068dc6 100644
+--- a/components/src/tex-mml-chtml/tex-mml-chtml.js
++++ b/components/src/tex-mml-chtml/tex-mml-chtml.js
+@@ -6,5 +6,4 @@ import '../input/mml/mml.js';
+ import '../output/chtml/chtml.js';
+ import '../output/chtml/fonts/tex/tex.js';
+ import '../ui/menu/menu.js';
+-import '../a11y/assistive-mml/assistive-mml.js';
+ import '../startup/startup.js';
+diff --git a/components/src/tex-mml-svg/preload.js b/components/src/tex-mml-svg/preload.js
+index 69d6a2c5..bad39af1 100644
+--- a/components/src/tex-mml-svg/preload.js
++++ b/components/src/tex-mml-svg/preload.js
+@@ -5,5 +5,5 @@ Loader.preLoad(
+   'core',
+   'input/tex', 'input/mml',
+   'output/svg', 'output/svg/fonts/tex.js',
+-  'ui/menu', 'a11y/assistive-mml'
++  'ui/menu'
+ );
+diff --git a/components/src/tex-mml-svg/tex-mml-svg.js b/components/src/tex-mml-svg/tex-mml-svg.js
+index acff78dd..3ca4e6cf 100644
+--- a/components/src/tex-mml-svg/tex-mml-svg.js
++++ b/components/src/tex-mml-svg/tex-mml-svg.js
+@@ -6,5 +6,4 @@ import '../input/mml/mml.js';
+ import '../output/svg/svg.js';
+ import '../output/svg/fonts/tex/tex.js';
+ import '../ui/menu/menu.js';
+-import '../a11y/assistive-mml/assistive-mml.js';
+ import '../startup/startup.js';
+diff --git a/components/src/tex-svg-full/preload.js b/components/src/tex-svg-full/preload.js
+index d4165cf8..8871781a 100644
+--- a/components/src/tex-svg-full/preload.js
++++ b/components/src/tex-svg-full/preload.js
+@@ -5,5 +5,5 @@ Loader.preLoad(
+   'core',
+   'input/tex-full',
+   'output/svg', 'output/svg/fonts/tex.js',
+-  'ui/menu', 'a11y/assistive-mml'
++  'ui/menu'
+ );
+diff --git a/components/src/tex-svg-full/tex-svg-full.js b/components/src/tex-svg-full/tex-svg-full.js
+index 55ce32f2..09c7e65c 100644
+--- a/components/src/tex-svg-full/tex-svg-full.js
++++ b/components/src/tex-svg-full/tex-svg-full.js
+@@ -5,5 +5,4 @@ import '../input/tex-full/tex-full.js';
+ import '../output/svg/svg.js';
+ import '../output/svg/fonts/tex/tex.js';
+ import '../ui/menu/menu.js';
+-import '../a11y/assistive-mml/assistive-mml.js';
+ import '../startup/startup.js';
+diff --git a/components/src/tex-svg/preload.js b/components/src/tex-svg/preload.js
+index 284ce317..3eb02665 100644
+--- a/components/src/tex-svg/preload.js
++++ b/components/src/tex-svg/preload.js
+@@ -5,5 +5,5 @@ Loader.preLoad(
+   'core',
+   'input/tex',
+   'output/svg', 'output/svg/fonts/tex.js',
+-  'ui/menu', 'a11y/assistive-mml'
++  'ui/menu'
+ );
+diff --git a/components/src/tex-svg/tex-svg.js b/components/src/tex-svg/tex-svg.js
+index f4ce644e..5d8caa5c 100644
+--- a/components/src/tex-svg/tex-svg.js
++++ b/components/src/tex-svg/tex-svg.js
+@@ -5,5 +5,4 @@ import '../input/tex/tex.js';
+ import '../output/svg/svg.js';
+ import '../output/svg/fonts/tex/tex.js';
+ import '../ui/menu/menu.js';
+-import '../a11y/assistive-mml/assistive-mml.js';
+ import '../startup/startup.js';
+diff --git a/ts/ui/menu/Menu.ts b/ts/ui/menu/Menu.ts
+index 7553aafc..ca0b9780 100644
+--- a/ts/ui/menu/Menu.ts
++++ b/ts/ui/menu/Menu.ts
+@@ -135,7 +135,7 @@ export class Menu {
+       autocollapse: false,
+       collapsible: false,
+       inTabOrder: true,
+-      assistiveMml: true,
++      assistiveMml: false,
+       explorer: false
+     },
+     jax: {
+@@ -475,7 +475,7 @@ export class Menu {
+           this.command('Reset', 'Reset to defaults', () => this.resetDefaults())
+         ]),
+         this.submenu('Accessibility', 'Accessibility', [
+-          this.checkbox('Activate', 'Activate', 'explorer'),
++          this.checkbox('Activate', 'Activate', 'explorer', {disabled: true}),
+           this.submenu('Speech', 'Speech', [
+             this.checkbox('Speech', 'Speech Output', 'speech'),
+             this.checkbox('Subtitles', 'Speech Subtitles', 'subtitles'),
+@@ -534,11 +534,11 @@ export class Menu {
+             this.checkbox('Prefix', 'Prefix', 'infoPrefix')
+           ], true),
+           this.rule(),
+-          this.checkbox('Collapsible', 'Collapsible Math', 'collapsible'),
++          this.checkbox('Collapsible', 'Collapsible Math', 'collapsible', {disabled: true}),
+           this.checkbox('AutoCollapse', 'Auto Collapse', 'autocollapse', {disabled: true}),
+           this.rule(),
+           this.checkbox('InTabOrder', 'Include in Tab Order', 'inTabOrder'),
+-          this.checkbox('AssistiveMml', 'Include Hidden MathML', 'assistiveMml')
++          this.checkbox('AssistiveMml', 'Include Hidden MathML', 'assistiveMml', {disabled: true})
+         ]),
+         this.submenu('Language', 'Language'),
+         this.rule(),
+@@ -722,6 +722,7 @@ export class Menu {
+    * @param {boolean} mml   True to output hidden Mathml, false to not
+    */
+   protected setAssistiveMml(mml: boolean) {
++    mml = false;
+     this.document.options.enableAssistiveMml = mml;
+     if (!mml || (MathJax._.a11y && MathJax._.a11y['assistive-mml'])) {
+       this.rerender();
+@@ -734,6 +735,7 @@ export class Menu {
+    * @param {boolean} explore   True to enable the explorer, false to not
+    */
+   protected setExplorer(explore: boolean) {
++    explore = false;
+     this.enableExplorerItems(explore);
+     this.document.options.enableExplorer = explore;
+     if (!explore || (MathJax._.a11y && MathJax._.a11y.explorer)) {
+@@ -747,6 +749,7 @@ export class Menu {
+    * @param {boolean} collapse   True to enable collapsible math, false to not
+    */
+   protected setCollapsible(collapse: boolean) {
++    collapse = false;
+     this.document.options.enableComplexity = collapse;
+     if (!collapse || (MathJax._.a11y && MathJax._.a11y.complexity)) {
+       this.rerender(STATE.COMPILED);
+@@ -845,6 +848,8 @@ export class Menu {
+    * @param {string} component   The name of the a11y component to load
+    */
+   public loadA11y(component: string) {
++    console.log ('ignoring load for', component);
++    return;
+     const noEnrich = !STATE.ENRICHED;
+     this.loadComponent('a11y/' + component, () => {
+       const startup = MathJax.startup;
diff --git a/gnu/packages/patches/mesa-opencl-all-targets.patch b/gnu/packages/patches/mesa-opencl-all-targets.patch
new file mode 100644
index 0000000000..99d4abcea4
--- /dev/null
+++ b/gnu/packages/patches/mesa-opencl-all-targets.patch
@@ -0,0 +1,25 @@
+This patch restores LLVM targets needed for OpenCL, *reverting* this
+upstream commit:
+
+  From 80817b6e344258ac9b955f824ebf9019a0fc1610 Mon Sep 17 00:00:00 2001
+  From: Jesse Natalie <jenatali@microsoft.com>
+  Date: Wed, 18 Nov 2020 18:30:30 -0800
+  Subject: [PATCH] meson: Adjust Clover's required LLVM modules
+
+diff --git a/meson.build b/meson.build
+index 6d1607c35a3..f828eb80faa 100644
+--- b/meson.build
++++ a/meson.build
+@@ -1479,10 +1479,9 @@
+ endif
+ if with_gallium_opencl
+   llvm_modules += [
+-    'linker', 'coverage', 'instrumentation', 'ipo', 'irreader',
+-    'lto', 'option', 'objcarcopts', 'profiledata'
++    'all-targets', 'linker', 'coverage', 'instrumentation', 'ipo', 'irreader',
++    'lto', 'option', 'objcarcopts', 'profiledata',
+   ]
+-  llvm_optional_modules += ['frontendopenmp']
+ endif
+ if with_microsoft_clc
+   llvm_modules += ['target', 'linker', 'irreader', 'option', 'libdriver']
diff --git a/gnu/packages/patches/mesa-skip-tests.patch b/gnu/packages/patches/mesa-skip-tests.patch
index 2622d5d312..7ff571dcf5 100644
--- a/gnu/packages/patches/mesa-skip-tests.patch
+++ b/gnu/packages/patches/mesa-skip-tests.patch
@@ -1,23 +1,3 @@
-disk_cache_create() here looks up the users home directory from <pwd.h>
-which resolves to "/" in the build environment. I could not find an easy
-way to set the home directory to something else, so we disable this test
-for now.
-
---- a/src/compiler/glsl/tests/cache_test.c
-+++ b/src/compiler/glsl/tests/cache_test.c
-@@ -170,11 +170,6 @@
-    unsetenv("MESA_GLSL_CACHE_DIR");
-    unsetenv("XDG_CACHE_HOME");
- 
--   cache = disk_cache_create("test", "make_check", 0);
--   expect_non_null(cache, "disk_cache_create with no environment variables");
--
--   disk_cache_destroy(cache);
--
-    /* Test with XDG_CACHE_HOME set */
-    setenv("XDG_CACHE_HOME", CACHE_TEST_TMP "/xdg-cache-home", 1);
-    cache = disk_cache_create("test", "make_check", 0);
-
 This test fails on i686-linux. I couldn't come up with a regex that
 could be used to disable it just on i686-linux, so we disable it
 completely with this patch:
@@ -25,25 +5,15 @@ completely with this patch:
 https://gitlab.freedesktop.org/mesa/mesa/-/issues/4091
 
 diff --git a/src/util/meson.build b/src/util/meson.build
-index 0893f64..909b3e0 100644
+index 319b22d9bf7..93790c72675 100644
 --- a/src/util/meson.build
 +++ b/src/util/meson.build
-@@ -289,18 +289,6 @@ if with_tests
-      suite : ['util'],
-   )   
+@@ -344,7 +344,7 @@ if with_tests
+     )
+   endif
  
--  test(
--    'u_debug_stack',
--    executable(
--      'u_debug_stack_test',
--      files('u_debug_stack_test.cpp'),
--      include_directories : [inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux],
--      dependencies : [idep_mesautil, idep_gtest],
--      c_args : [c_msvc_compat_args],
--    ),
--     suite : ['util'],
--  )
--
-   process_test_exe = executable(
-     'process_test',
-     files('process_test.c'),
+-  foreach t: ['bitset', 'register_allocate', 'u_debug_stack', 'u_qsort']
++  foreach t: ['bitset', 'register_allocate', 'u_qsort']
+     test(
+       t,
+       executable(
diff --git a/gnu/packages/patches/meson-allow-dirs-outside-of-prefix.patch b/gnu/packages/patches/meson-allow-dirs-outside-of-prefix.patch
new file mode 100644
index 0000000000..f16daa8009
--- /dev/null
+++ b/gnu/packages/patches/meson-allow-dirs-outside-of-prefix.patch
@@ -0,0 +1,20 @@
+Source: https://raw.githubusercontent.com/NixOS/nixpkgs/master/pkgs/development/tools/build-managers/meson/allow-dirs-outside-of-prefix.patch
+--- a/mesonbuild/coredata.py
++++ b/mesonbuild/coredata.py
+@@ -506,7 +506,6 @@ class CoreData:
+             return value
+         if option.name.endswith('dir') and value.is_absolute() and \
+            option not in BULITIN_DIR_NOPREFIX_OPTIONS:
+-            # Value must be a subdir of the prefix
+             # commonpath will always return a path in the native format, so we
+             # must use pathlib.PurePath to do the same conversion before
+             # comparing.
+@@ -518,7 +517,7 @@ class CoreData:
+             try:
+                 value = value.relative_to(prefix)
+             except ValueError:
+-                raise MesonException(msg.format(option, value, prefix))
++                pass
+             if '..' in str(value):
+                 raise MesonException(msg.format(option, value, prefix))
+         return value.as_posix()
diff --git a/gnu/packages/patches/meson-for-build-rpath.patch b/gnu/packages/patches/meson-for-build-rpath.patch
deleted file mode 100644
index ef9a73f07c..0000000000
--- a/gnu/packages/patches/meson-for-build-rpath.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-This patch removes a part of meson that clears the rpath upon installation.
-This will only be applied to a special version of meson, used for the
-meson-build-system.
-
-Original patch for Meson 0.42.0 by Peter Mikkelsen <petermikkelsen10@gmail.com>
-
---- meson-0.47.1/mesonbuild/minstall.py.old	2018-08-10 11:01:27.812327013 +0200
-+++ meson-0.47.1/mesonbuild/minstall.py	2018-08-10 11:01:51.940368505 +0200
-@@ -436,15 +436,6 @@
-                         print("Symlink creation does not work on this platform. "
-                               "Skipping all symlinking.")
-                         printed_symlink_error = True
--            if os.path.isfile(outname):
--                try:
--                    depfixer.fix_rpath(outname, install_rpath, final_path,
--                                       install_name_mappings, verbose=False)
--                except SystemExit as e:
--                    if isinstance(e.code, int) and e.code == 0:
--                        pass
--                    else:
--                        raise
- 
- def run(args):
-     parser = buildparser()
diff --git a/gnu/packages/patches/metabat-fix-compilation.patch b/gnu/packages/patches/metabat-fix-compilation.patch
deleted file mode 100644
index 7086a96e86..0000000000
--- a/gnu/packages/patches/metabat-fix-compilation.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-This patch changes metabat so that (1) it is not build statically, (2) it uses
-shared libraries rather than static libraries where possible.
-
-diff --git a/SConstruct b/SConstruct
-index 69cdc0a..ac99bcb 100644
---- a/SConstruct
-+++ b/SConstruct
-@@ -26,8 +26,6 @@ debug = ARGUMENTS.get('DEBUG', None)
- build_flags = ['-Wall', '-g', '-std=c++11', '-fopenmp']
- link_flags = ['-lstdc++', '-lm', '-fopenmp']
- 
--if platform.platform(True, True).find('Darwin') == -1:
--    link_flags.extend(['-static', '-static-libgcc', '-static-libstdc++'])
- 
- if debug is None:
-     build_flags.extend(['-O3', '-DNDEBUG', '-Wno-unknown-pragmas', '-Wno-deprecated-declarations', '-Wno-overflow', '-Wno-unused-variable'])
-@@ -110,17 +108,17 @@ def findStaticOrShared( lib, testPaths, static_source_list, link_flag_list, stat
-     for path in testPaths:
-         if not os.path.isdir(path):
-             continue
-+        for testfile in ('%s/lib%s.so' % (path, lib), '%s/lib%s.dylib' % (path, lib)):
-+            if os.path.isfile(testfile):
-+                print "Found shared library %s as %s" % (lib, testfile)
-+                link_flag_list.extend( ["-L%s" % (path), "-l%s" % (lib) ] )
-+                return
-         for suffix in staticSuffixes:
-             testfile = '%s/lib%s%s' % (path, lib, suffix)
-             if os.path.isfile(testfile):
-                 static_source_list.append(testfile)
-                 print "Found static library %s as %s" % (lib, testfile)
-                 return
--        for testfile in ('%s/lib%s.so' % (path, lib), '%s/lib%s.dylib' % (path, lib)):
--            if os.path.isfile(testfile):
--                print "Found shared library %s as %s" % (lib, testfile)
--                link_flag_list.extend( ["-L%s" % (path), "-l%s" % (lib) ] )
--                return
-     print "Could not find library for %s!!! Looked in %s" % (lib, testPaths)
-     return
- 
diff --git a/gnu/packages/patches/mit-krb5-hurd.patch b/gnu/packages/patches/mit-krb5-hurd.patch
index d4962b1e60..449320cea4 100644
--- a/gnu/packages/patches/mit-krb5-hurd.patch
+++ b/gnu/packages/patches/mit-krb5-hurd.patch
@@ -148,18 +148,3 @@ index 7e981d4..d83b3b6 100644
 +# define MAXPATHLEN 4096
 +#endif
  #endif /* _DB_INT_H_ */
-diff --git a/src/tests/resolve/resolve.c b/src/tests/resolve/resolve.c
-index 7339d21..38f7253 100644
---- a/src/tests/resolve/resolve.c
-+++ b/src/tests/resolve/resolve.c
-@@ -73,6 +73,10 @@ char *strchr();
- #include <netinet/in.h>
- #include <netdb.h>
- 
-+#ifndef MAXHOSTNAMELEN
-+# define MAXHOSTNAMELEN 256
-+#endif
-+
- int
- main(argc, argv)
-     int argc;
diff --git a/gnu/packages/patches/mit-krb5-qualify-short-hostnames.patch b/gnu/packages/patches/mit-krb5-qualify-short-hostnames.patch
deleted file mode 100644
index 491a358731..0000000000
--- a/gnu/packages/patches/mit-krb5-qualify-short-hostnames.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-Fix a null pointer dereference when no DNS search path is configured.
-This showed up as a segfault while running the gsasl test suite.
-
-Taken from upstream:
-https://github.com/krb5/krb5/commit/cd82bf377e7fad2409c76bf8b241920692f34fda
-
-diff --git a/src/lib/krb5/os/dnsglue.c b/src/lib/krb5/os/dnsglue.c
-index e35ca9d76c..0cd213fdd7 100644
---- a/src/lib/krb5/os/dnsglue.c
-+++ b/src/lib/krb5/os/dnsglue.c
-@@ -91,7 +91,7 @@ static int initparse(struct krb5int_dns_state *);
- #define DECLARE_HANDLE(h) struct __res_state h
- #define INIT_HANDLE(h) (memset(&h, 0, sizeof(h)), res_ninit(&h) == 0)
- #define SEARCH(h, n, c, t, a, l) res_nsearch(&h, n, c, t, a, l)
--#define PRIMARY_DOMAIN(h) strdup(h.dnsrch[0])
-+#define PRIMARY_DOMAIN(h) ((h.dnsrch[0] == NULL) ? NULL : strdup(h.dnsrch[0]))
- #if HAVE_RES_NDESTROY
- #define DESTROY_HANDLE(h) res_ndestroy(&h)
- #else
-@@ -104,7 +104,8 @@ static int initparse(struct krb5int_dns_state *);
- #define DECLARE_HANDLE(h)
- #define INIT_HANDLE(h) (res_init() == 0)
- #define SEARCH(h, n, c, t, a, l) res_search(n, c, t, a, l)
--#define PRIMARY_DOMAIN(h) strdup(_res.defdname)
-+#define PRIMARY_DOMAIN(h) \
-+    ((_res.defdname == NULL) ? NULL : strdup(_res.defdname))
- #define DESTROY_HANDLE(h)
- 
- #endif
diff --git a/gnu/packages/patches/mixxx-link-qtscriptbytearray-qtscript.patch b/gnu/packages/patches/mixxx-link-qtscriptbytearray-qtscript.patch
new file mode 100644
index 0000000000..d7cd1c0d28
--- /dev/null
+++ b/gnu/packages/patches/mixxx-link-qtscriptbytearray-qtscript.patch
@@ -0,0 +1,25 @@
+From 7554aefc886d4ebc4b4c139a5cddcab6163cf72f Mon Sep 17 00:00:00 2001
+From: Vinicius Monego <monego@posteo.net>
+Date: Thu, 30 Sep 2021 23:37:29 -0300
+Subject: [PATCH] Link QtScriptByteArray with QtScript.
+
+---
+ CMakeLists.txt | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 492ccae..05fec08 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -2077,7 +2077,7 @@ add_library(QtScriptByteArray STATIC EXCLUDE_FROM_ALL
+   lib/qtscript-bytearray/bytearrayprototype.cpp
+ )
+ set_target_properties(QtScriptByteArray PROPERTIES AUTOMOC ON)
+-target_link_libraries(QtScriptByteArray Qt5::Core)
++target_link_libraries(QtScriptByteArray Qt5::Core Qt5::Script)
+ target_include_directories(mixxx-lib SYSTEM PUBLIC lib/qtscript-bytearray)
+ target_link_libraries(mixxx-lib PRIVATE QtScriptByteArray)
+ 
+-- 
+2.30.2
+
diff --git a/gnu/packages/patches/mixxx-system-googletest-benchmark.patch b/gnu/packages/patches/mixxx-system-googletest-benchmark.patch
new file mode 100644
index 0000000000..7adbe66208
--- /dev/null
+++ b/gnu/packages/patches/mixxx-system-googletest-benchmark.patch
@@ -0,0 +1,43 @@
+From eb2079d467f8658eea13e2ed86cc69d864632866 Mon Sep 17 00:00:00 2001
+From: Vinicius Monego <monego@posteo.net>
+Date: Wed, 29 Sep 2021 19:07:35 -0300
+Subject: [PATCH] Use system googletest and benchmark.
+
+---
+ CMakeLists.txt | 13 +++----------
+ 1 file changed, 3 insertions(+), 10 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 10e9b0a..492ccae 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -1467,12 +1467,7 @@ set(gtest_force_shared_crt ON CACHE BOOL "Pass Mixxx compiler/linker options to
+ # Prevent installation of GoogleTest libraries
+ set(INSTALL_GTEST OFF CACHE BOOL "Disable installation of GoogleTest" FORCE)
+ 
+-# Add googletest directly to our build. This adds the following targets:
+-# gtest, gtest_main, gmock and gmock_main
+-add_subdirectory(
+-  "${CMAKE_CURRENT_SOURCE_DIR}/lib/googletest"
+-  "${CMAKE_CURRENT_BINARY_DIR}/lib/googletest"
+-)
++find_package(GTest CONFIG REQUIRED)
+ 
+ add_executable(mixxx-test
+   src/test/analyserwaveformtest.cpp
+@@ -1582,10 +1577,8 @@ set(BENCHMARK_ENABLE_TESTING OFF CACHE BOOL "" FORCE)
+ # Prevent installation of google/benchmark artifacts
+ set(BENCHMARK_ENABLE_INSTALL OFF CACHE BOOL "Disable installation of google/benchmark" FORCE)
+ 
+-add_subdirectory(
+-  "${CMAKE_CURRENT_SOURCE_DIR}/lib/benchmark"
+-  "${CMAKE_CURRENT_BINARY_DIR}/lib/benchmark"
+-)
++find_package(benchmark CONFIG REQUIRED)
++
+ target_link_libraries(mixxx-test PRIVATE benchmark)
+ 
+ # Test Suite
+-- 
+2.30.2
+
diff --git a/gnu/packages/patches/monero-use-system-miniupnpc.patch b/gnu/packages/patches/monero-use-system-miniupnpc.patch
index c5d376d793..2bd179946f 100644
--- a/gnu/packages/patches/monero-use-system-miniupnpc.patch
+++ b/gnu/packages/patches/monero-use-system-miniupnpc.patch
@@ -1,14 +1,16 @@
 diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt
-index 7553f87e..8e865c6c 100644
+index 5b7f69a56..3a353a0f3 100644
 --- a/external/CMakeLists.txt
 +++ b/external/CMakeLists.txt
-@@ -37,19 +37,7 @@
+@@ -37,21 +37,7 @@
  
  find_package(Miniupnpc REQUIRED)
  
 -message(STATUS "Using in-tree miniupnpc")
+-set(UPNPC_NO_INSTALL TRUE CACHE BOOL "Disable miniupnp installation" FORCE)
 -add_subdirectory(miniupnp/miniupnpc)
 -set_property(TARGET libminiupnpc-static PROPERTY FOLDER "external")
+-set_property(TARGET libminiupnpc-static PROPERTY POSITION_INDEPENDENT_CODE ON)
 -if(MSVC)
 -  set_property(TARGET libminiupnpc-static APPEND_STRING PROPERTY COMPILE_FLAGS " -wd4244 -wd4267")
 -elseif(NOT MSVC)
@@ -24,12 +26,12 @@ index 7553f87e..8e865c6c 100644
  find_package(Unbound)
  
 diff --git a/src/p2p/net_node.inl b/src/p2p/net_node.inl
-index 74924e4f..3554dd0d 100644
+index d4b39869c..13071d898 100644
 --- a/src/p2p/net_node.inl
 +++ b/src/p2p/net_node.inl
-@@ -49,9 +49,9 @@
- #include "storages/levin_abstract_invoke2.h"
+@@ -61,9 +61,9 @@
  #include "cryptonote_core/cryptonote_core.h"
+ #include "net/parse.h"
  
 -#include <miniupnp/miniupnpc/miniupnpc.h>
 -#include <miniupnp/miniupnpc/upnpcommands.h>
diff --git a/gnu/packages/patches/mpg321-gcc-10.patch b/gnu/packages/patches/mpg321-gcc-10.patch
new file mode 100644
index 0000000000..8966d9f7c8
--- /dev/null
+++ b/gnu/packages/patches/mpg321-gcc-10.patch
@@ -0,0 +1,83 @@
+From f930c3b81bdf9c05152fb005562b3869f6e36f34 Mon Sep 17 00:00:00 2001
+From: "Azamat H. Hackimov" <azamat.hackimov@gmail.com>
+Date: Thu, 4 Jun 2020 20:41:25 +0300
+Subject: [PATCH] Fix GCC10 compilation
+
+---
+ mpg321.c |  8 ++++++++
+ mpg321.h | 16 ++++++++--------
+ 2 files changed, 16 insertions(+), 8 deletions(-)
+
+diff --git a/mpg321.c b/mpg321.c
+index 19282bb..663882e 100644
+--- a/mpg321.c
++++ b/mpg321.c
+@@ -63,6 +63,14 @@
+ #include <pthread.h>
+ #include <semaphore.h>
+ 
++output_frame *Output_Queue;
++decoded_frames *Decoded_Frames;
++int semarray;
++int mad_decoder_position;
++int output_buffer_position;
++double real[FFT_BUFFER_SIZE];
++double imag[FFT_BUFFER_SIZE];
++int loop_remaining;
+ 
+ int pflag = 0;
+ int volume = 0;
+diff --git a/mpg321.h b/mpg321.h
+index 798bff0..235cf4a 100644
+--- a/mpg321.h
++++ b/mpg321.h
+@@ -116,7 +116,7 @@ extern char *playlist_file;
+ extern int quit_now;
+ extern char remote_input_buf[PATH_MAX + 5];
+ extern int file_change;
+-int loop_remaining;
++extern int loop_remaining;
+ 
+ extern int status;
+ extern int scrobbler_time;
+@@ -233,8 +233,8 @@ RETSIGTYPE handle_sigchld(int sig);
+ #define FFT_BUFFER_SIZE_LOG 9
+ #define FFT_BUFFER_SIZE (1 << FFT_BUFFER_SIZE_LOG) /* 512 */
+ /*Temporary data stores to perform FFT in */
+-double real[FFT_BUFFER_SIZE];
+-double imag[FFT_BUFFER_SIZE];
++extern double real[FFT_BUFFER_SIZE];
++extern double imag[FFT_BUFFER_SIZE];
+ 
+ typedef struct {
+ 	double real[FFT_BUFFER_SIZE];
+@@ -258,10 +258,10 @@ fft_state *fft_init(void);
+ /* Output buffer process */
+ void frame_buffer_p();
+ /* Semaphore array */
+-int semarray;
++extern int semarray;
+ /* Input/Output buffer position */
+-int mad_decoder_position;
+-int output_buffer_position;
++extern int mad_decoder_position;
++extern int output_buffer_position;
+ /* Output Frame including needed information */
+ typedef struct {
+ 	unsigned char data[4*1152];
+@@ -285,10 +285,10 @@ typedef struct {
+ } decoded_frames;
+ 
+ /* Output frame queue pointer */
+-output_frame *Output_Queue;
++extern output_frame *Output_Queue;
+ 
+ /* Shared total decoded frames */
+-decoded_frames *Decoded_Frames;
++extern decoded_frames *Decoded_Frames;
+ 
+ #if defined(__GNU_LIBRARY__) && !defined(_SEM_SEMUN_UNDEFINED)
+ /* */
+-- 
+2.26.2
+
diff --git a/gnu/packages/patches/mupdf-CVE-2021-3407.patch b/gnu/packages/patches/mupdf-CVE-2021-3407.patch
deleted file mode 100644
index 9f901517c5..0000000000
--- a/gnu/packages/patches/mupdf-CVE-2021-3407.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-This patch came from https://git.ghostscript.com/?p=mupdf.git;a=patch;h=cee7cefc610d42fd383b3c80c12cbc675443176a
-and fixes CVE-2021-3407.
-
-From cee7cefc610d42fd383b3c80c12cbc675443176a Mon Sep 17 00:00:00 2001
-From: Robin Watts <Robin.Watts@artifex.com>
-Date: Fri, 22 Jan 2021 17:05:15 +0000
-Subject: [PATCH] Bug 703366: Fix double free of object during linearization.
-
-This appears to happen because we parse an illegal object from
-a broken file and assign it to object 0, which is defined to
-be free.
-
-Here, we fix the parsing code so this can't happen.
----
- source/pdf/pdf-parse.c | 6 ++++++
- source/pdf/pdf-xref.c  | 2 ++
- 2 files changed, 8 insertions(+)
-
-diff --git a/source/pdf/pdf-parse.c b/source/pdf/pdf-parse.c
-index 7abc8c3d4..5761c3351 100644
---- a/source/pdf/pdf-parse.c
-+++ b/source/pdf/pdf-parse.c
-@@ -749,6 +749,12 @@ pdf_parse_ind_obj(fz_context *ctx, pdf_document *doc,
- 		fz_throw(ctx, FZ_ERROR_SYNTAX, "expected generation number (%d ? obj)", num);
- 	}
- 	gen = buf->i;
-+	if (gen < 0 || gen >= 65536)
-+	{
-+		if (try_repair)
-+			*try_repair = 1;
-+		fz_throw(ctx, FZ_ERROR_SYNTAX, "invalid generation number (%d)", gen);
-+	}
- 
- 	tok = pdf_lex(ctx, file, buf);
- 	if (tok != PDF_TOK_OBJ)
-diff --git a/source/pdf/pdf-xref.c b/source/pdf/pdf-xref.c
-index 1b2bdcd59..30197b4b8 100644
---- a/source/pdf/pdf-xref.c
-+++ b/source/pdf/pdf-xref.c
-@@ -1190,6 +1190,8 @@ pdf_read_new_xref(fz_context *ctx, pdf_document *doc, pdf_lexbuf *buf)
- 	{
- 		ofs = fz_tell(ctx, doc->file);
- 		trailer = pdf_parse_ind_obj(ctx, doc, doc->file, buf, &num, &gen, &stm_ofs, NULL);
-+		if (num == 0)
-+			fz_throw(ctx, FZ_ERROR_GENERIC, "Trailer object number cannot be 0\n");
- 	}
- 	fz_catch(ctx)
- 	{
--- 
-2.17.1
-
diff --git a/gnu/packages/patches/mupdf-fix-linkage.patch b/gnu/packages/patches/mupdf-fix-linkage.patch
deleted file mode 100644
index 4ffd1c6a77..0000000000
--- a/gnu/packages/patches/mupdf-fix-linkage.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From: Tobias Geerinckx-Rice <me@tobias.gr>
-Date: Tue, 24 Nov 2020 10:29:28 +0000
-Subject: [PATCH] gnu: mupdf: Fix linkage.
-
-Replace broken linkage to ‘build/shared-release/libmupdf.so’ with the
-proper ‘-L$(libdir) -lmupdf’ incantation, and fix libmupdf.so's mode.
-
---- mupdf-1.18.0-source.org/Makefile
-+++ mupdf-1.18.0-source/Makefile
-@@ -61,7 +61,7 @@
- ifdef RANLIB
-   RANLIB_CMD = $(QUIET_RANLIB) $(RANLIB) $@
- endif
--LINK_CMD = $(QUIET_LINK) $(MKTGTDIR) ; $(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
-+LINK_CMD = $(QUIET_LINK) $(MKTGTDIR) ; $(CC) $(LDFLAGS) -o $@ $(subst $(MUPDF_LIB),-L$(libdir) -L$(OUT) -lmupdf,$^) $(LIBS)
- TAGS_CMD = $(QUIET_TAGS) ctags -R --c-kinds=+p
- WINDRES_CMD = $(QUIET_WINDRES) $(MKTGTDIR) ; $(WINDRES) $< $@
- OBJCOPY_CMD = $(QUIET_OBJCOPY) $(MKTGTDIR) ; $(LD) -r -b binary -z noexecstack -o $@ $<
-@@ -364,7 +364,7 @@ install: libs apps
- 	install -m 644 include/mupdf/pdf/*.h $(DESTDIR)$(incdir)/mupdf/pdf
- 
- 	install -d $(DESTDIR)$(libdir)
--	install -m 644 $(INSTALL_LIBS) $(DESTDIR)$(libdir)
-+	install -m 755 $(INSTALL_LIBS) $(DESTDIR)$(libdir)
- 
- 	install -d $(DESTDIR)$(bindir)
- 	install -m 755 $(TOOL_APPS) $(VIEW_APPS) $(DESTDIR)$(bindir)
diff --git a/gnu/packages/patches/nautilus-add-libportal-gtk3.patch b/gnu/packages/patches/nautilus-add-libportal-gtk3.patch
new file mode 100644
index 0000000000..cefa47cc64
--- /dev/null
+++ b/gnu/packages/patches/nautilus-add-libportal-gtk3.patch
@@ -0,0 +1,61 @@
+From 55cfd66ccca391fc144f5863ff6bfc1f3b137e2d Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Ant=C3=B3nio=20Fernandes?= <antoniojpfernandes@gmail.com>
+Date: Tue, 21 Dec 2021 17:42:27 +0000
+Subject: [PATCH] general: Add libportal-gtk3 dependency
+
+The portal-gtk3.h header has been moved into a separate library which
+binds gtk3 explicitly.
+
+https://github.com/flatpak/libportal/pull/53
+---
+ build-aux/flatpak/org.gnome.Nautilus.json | 5 +++--  ;; Changes removed in Guix
+ build-aux/flatpak/org.gnome.Nautilus.yml  | 3 ++-    ;; Changes removed in Guix
+ meson.build                               | 4 +++-
+ src/meson.build                           | 1 +
+ src/nautilus-files-view.c                 | 2 +-
+ 5 files changed, 10 insertions(+), 5 deletions(-)
+
+diff --git a/meson.build b/meson.build
+index 927216636..4626fa0bb 100644
+--- a/meson.build
++++ b/meson.build
+@@ -122,8 +122,10 @@ gnome_desktop = dependency('gnome-desktop-3.0', version: '>= 3.0.0')
+ gtk = dependency('gtk+-3.0', version: '>= 3.22.27')
+ libhandy = dependency('libhandy-1', version: '>= 1.1.90')
+ libportal = []
++libportal_gtk3 = []
+ if get_option('libportal')
+-  libportal = dependency('libportal', version: '>= 0.3')
++  libportal = dependency('libportal', version: '>= 0.5')
++  libportal_gtk3 = dependency('libportal-gtk3', version: '>= 0.5')
+ endif
+ selinux = []
+ if get_option('selinux')
+diff --git a/src/meson.build b/src/meson.build
+index 682d6f3a3..d7fb76d53 100644
+--- a/src/meson.build
++++ b/src/meson.build
+@@ -285,6 +285,7 @@ nautilus_deps = [
+   libgd_dep,
+   libhandy,
+   libportal,
++  libportal_gtk3,
+   nautilus_extension,
+   selinux,
+   tracker_sparql,
+diff --git a/src/nautilus-files-view.c b/src/nautilus-files-view.c
+index dfb7fb26c..a24005a11 100644
+--- a/src/nautilus-files-view.c
++++ b/src/nautilus-files-view.c
+@@ -93,7 +93,7 @@
+ 
+ #ifdef HAVE_LIBPORTAL
+ #include <libportal/portal.h>
+-#include <libportal/portal-gtk3.h>
++#include <libportal-gtk3/portal-gtk3.h>
+ #endif
+ 
+ /* Minimum starting update inverval */
+-- 
+GitLab
+
diff --git a/gnu/packages/patches/network-manager-meson.patch b/gnu/packages/patches/network-manager-meson.patch
new file mode 100644
index 0000000000..1056d40ede
--- /dev/null
+++ b/gnu/packages/patches/network-manager-meson.patch
@@ -0,0 +1,21 @@
+Since libnm-wwan.so is not just a loadable module but also a shared library
+that some plugin links against, build it as a shared library while avoiding
+'-Wl,--no-undefined':
+
+  https://github.com/mesonbuild/meson/issues/9492#issuecomment-973117289
+
+diff --git a/src/core/devices/wwan/meson.build b/src/core/devices/wwan/meson.build
+index 37ef738..18ac54f 100644
+--- a/src/core/devices/wwan/meson.build
++++ b/src/core/devices/wwan/meson.build
+@@ -4,8 +4,9 @@ wwan_inc = include_directories('.')
+ 
+ linker_script = join_paths(meson.current_source_dir(), 'libnm-wwan.ver')
+ 
+-libnm_wwan = shared_module(
++libnm_wwan = shared_library(
+   'nm-wwan',
++  override_options: ['b_lundef=false'],
+   sources: files(
+   'nm-service-providers.c',
+   'nm-modem-broadband.c',
diff --git a/gnu/packages/patches/network-manager-plugin-path.patch b/gnu/packages/patches/network-manager-plugin-path.patch
index 505ae31534..ec6767aaac 100644
--- a/gnu/packages/patches/network-manager-plugin-path.patch
+++ b/gnu/packages/patches/network-manager-plugin-path.patch
@@ -3,49 +3,40 @@ From: =?UTF-8?q?Tom=C3=A1=C5=A1=20=C4=8Cech?= <sleep_walker@gnu.org>
 Date: Wed, 3 Jul 2019 13:31:54 +0200
 Subject: [PATCH] respect NM_VPN_PLUGIN_DIR
 
----
- src/vpn/nm-vpn-manager.c | 14 ++++++++++++++
- 1 file changed, 14 insertions(+)
-
-diff --git a/src/vpn/nm-vpn-manager.c b/src/vpn/nm-vpn-manager.c
-index d063916..d779166 100644
---- a/src/vpn/nm-vpn-manager.c
-+++ b/src/vpn/nm-vpn-manager.c
-@@ -223,6 +223,7 @@ nm_vpn_manager_init (NMVpnManager *self)
- 	GSList *infos, *info;
- 	const char *conf_dir_etc = _nm_vpn_plugin_info_get_default_dir_etc ();
- 	const char *conf_dir_lib = _nm_vpn_plugin_info_get_default_dir_lib ();
-+	const char *conf_dir_user = _nm_vpn_plugin_info_get_default_dir_user ();
+--- a/src/core/vpn/nm-vpn-manager.c	2021-10-29 13:20:01.062917840 -0400
++++ b/src/core/vpn/nm-vpn-manager.c	2021-10-29 13:26:46.094397018 -0400
+@@ -211,6 +211,7 @@
+     GSList *             infos, *info;
+     const char *         conf_dir_etc = _nm_vpn_plugin_info_get_default_dir_etc();
+     const char *         conf_dir_lib = _nm_vpn_plugin_info_get_default_dir_lib();
++    const char *         conf_dir_user = _nm_vpn_plugin_info_get_default_dir_user ();
  
- 	/* Watch the VPN directory for changes */
- 	file = g_file_new_for_path (conf_dir_lib);
-@@ -241,6 +242,14 @@ nm_vpn_manager_init (NMVpnManager *self)
- 		                                         G_CALLBACK (vpn_dir_changed), self);
- 	}
+     /* Watch the VPN directory for changes */
+     file              = g_file_new_for_path(conf_dir_lib);
+@@ -229,6 +230,14 @@
+             g_signal_connect(priv->monitor_etc, "changed", G_CALLBACK(vpn_dir_changed), self);
+     }
  
-+	file = g_file_new_for_path (conf_dir_user);
-+	priv->monitor_etc = g_file_monitor_directory (file, G_FILE_MONITOR_NONE, NULL, NULL);
-+	g_object_unref (file);
-+	if (priv->monitor_etc) {
-+		priv->monitor_id_etc = g_signal_connect (priv->monitor_etc, "changed",
-+		                                         G_CALLBACK (vpn_dir_changed), self);
-+	}
++    file              = g_file_new_for_path (conf_dir_user);
++    priv->monitor_etc = g_file_monitor_directory (file, G_FILE_MONITOR_NONE, NULL, NULL);
++    g_object_unref (file);
++    if (priv->monitor_etc) {
++        priv->monitor_id_etc =
++            g_signal_connect (priv->monitor_etc, "changed", G_CALLBACK (vpn_dir_changed), self);
++    }
 +
- 	/* first read conf_dir_lib. The name files are not really user configuration, but
- 	 * plugin configuration. Hence we expect ~newer~ plugins to install their files
- 	 * in /usr/lib/NetworkManager. We want to prefer those files.
-@@ -255,6 +264,11 @@ nm_vpn_manager_init (NMVpnManager *self)
- 		try_add_plugin (self, info->data);
- 	g_slist_free_full (infos, g_object_unref);
+     /* first read conf_dir_lib. The name files are not really user configuration, but
+      * plugin configuration. Hence we expect ~newer~ plugins to install their files
+      * in /usr/lib/NetworkManager. We want to prefer those files.
+@@ -243,6 +252,11 @@
+         try_add_plugin(self, info->data);
+     g_slist_free_full(infos, g_object_unref);
  
-+	infos = _nm_vpn_plugin_info_list_load_dir (conf_dir_user, TRUE, 0, NULL, NULL);
-+	for (info = infos; info; info = info->next)
-+		try_add_plugin (self, info->data);
-+	g_slist_free_full (infos, g_object_unref);
++    infos = _nm_vpn_plugin_info_list_load_dir(conf_dir_user, TRUE, 0, NULL, NULL);
++    for (info = infos; info; info = info->next)
++            try_add_plugin (self, info->data);
++    g_slist_free_full (infos, g_object_unref);
 +
- 	priv->active_services = g_hash_table_new_full (nm_str_hash, g_str_equal, g_free, NULL);
+     priv->active_services = g_hash_table_new_full(nm_str_hash, g_str_equal, g_free, NULL);
  }
  
--- 
-2.22.0
-
diff --git a/gnu/packages/patches/ngless-unliftio.patch b/gnu/packages/patches/ngless-unliftio.patch
new file mode 100644
index 0000000000..87f5e79fcf
--- /dev/null
+++ b/gnu/packages/patches/ngless-unliftio.patch
@@ -0,0 +1,66 @@
+From 919565adc1216b9d3108b3043e8d307292b37393 Mon Sep 17 00:00:00 2001
+From: Luis Pedro Coelho <luis@luispedro.org>
+Date: Fri, 7 May 2021 11:42:56 +0800
+Subject: [PATCH] BLD Update to LTS-17.10
+
+- Updates the GHC version
+- Requires `extra-deps` for `diagrams` package
+- Simplifies code for NGLessIO monad as UnliftIO can now be auto-derived
+---
+ NGLess/NGLess/NGError.hs |  8 ++------
+ stack.yaml               | 11 ++++++++---
+ 2 files changed, 10 insertions(+), 9 deletions(-)
+
+diff --git a/NGLess/NGLess/NGError.hs b/NGLess/NGLess/NGError.hs
+index a22e557f..c7eddf5b 100644
+--- a/NGLess/NGLess/NGError.hs
++++ b/NGLess/NGLess/NGError.hs
+@@ -50,7 +50,8 @@ type NGLess = Either NGError
+ 
+ newtype NGLessIO a = NGLessIO { unwrapNGLessIO :: ResourceT IO a }
+                         deriving (Functor, Applicative, Monad, MonadIO,
+-                        MonadResource, MonadThrow, MonadCatch, MonadMask)
++                        MonadResource, MonadThrow, MonadCatch, MonadMask,
++                        MonadUnliftIO)
+ 
+ 
+ instance MonadError NGError NGLessIO where
+@@ -62,11 +63,6 @@ instance PrimMonad NGLessIO where
+     primitive act = NGLessIO (primitive act)
+     {-# INLINE primitive #-}
+ 
+-instance MonadUnliftIO NGLessIO where
+-    askUnliftIO = NGLessIO $ do
+-        u <- askUnliftIO
+-        return $ UnliftIO (\(NGLessIO act) -> unliftIO u act)
+-
+ instance MonadFail NGLessIO where
+     fail err = throwShouldNotOccur err
+ 
+diff --git a/stack.yaml b/stack.yaml
+index 051d973d..11b65887 100644
+--- a/stack.yaml
++++ b/stack.yaml
+@@ -1,14 +1,19 @@
+ # For more information, see: https://github.com/commercialhaskell/stack/blob/release/doc/yaml_configuration.md
+ 
+-resolver: lts-14.20
++resolver: lts-17.10
+ compiler-check: newer-minor
+ 
+ # Packages to be pulled from upstream that are not in the resolver (e.g., acme-missiles-0.3)
+ extra-deps:
+   - git: "https://github.com/ngless-toolkit/interval-to-int"
+     commit: "78289f6b48d41f7cc48169520ec9b77b050a0029"
+-
+-
++  - diagrams-core-1.4.2@sha256:47de45658e8a805b7cb7f535e7b093daf7e861604fa3c70e25bd4ef481bf1571,2997
++  - diagrams-lib-1.4.3@sha256:04f77778d4b550d3c8e54440800685f88467bef91075e82e009a8a6f45c51033,8232
++  - diagrams-svg-1.4.3@sha256:36708b0b4cf35507ccf689f1a25f6f81b8f41c2c4c2900793de820f66d4e241c,3181
++  - active-0.2.0.14@sha256:e618aba4a7881eb85dc1585e0a01230af6b4fbab6693931e4a5d0d3a5b184406,1823
++  - dual-tree-0.2.2.1@sha256:9ff31e461d873ae74ba51d93b454c0c4094726d7cb78a0c454394c965e83539d,2830
++  - monoid-extras-0.5.1@sha256:438dbfd7b4dce47d8f0ca577f56caf94bd1e21391afa545cad09fe7cf2e5793d,2333
++  - svg-builder-0.1.1@sha256:22de54d326a6b6912e461e1302edb9108b02aac0b6a6368fcdc3c4a224d487fd,1440
+ allow-newer: true
+ 
+ # Override default flag values for local packages and extra-deps
diff --git a/gnu/packages/patches/nix-dont-build-html-doc.diff b/gnu/packages/patches/nix-dont-build-html-doc.diff
new file mode 100644
index 0000000000..79142bc215
--- /dev/null
+++ b/gnu/packages/patches/nix-dont-build-html-doc.diff
@@ -0,0 +1,26 @@
+"--enable-doc-gen" configure flag will enable HTML document generation that requires mdbook.
+We can't simply disable it because we need manpages.
+
+Author: Zhu Zihao <all_but_last@163.com>
+
+diff --git a/doc/manual/local.mk b/doc/manual/local.mk
+index e43d9f2fb..c323d1847 100644
+--- a/doc/manual/local.mk
++++ b/doc/manual/local.mk
+@@ -69,8 +69,6 @@ $(d)/builtins.json: $(bindir)/nix
+ 	$(trace-gen) $(dummy-env) NIX_PATH=nix/corepkgs=corepkgs $(bindir)/nix __dump-builtins > $@.tmp
+ 	@mv $@.tmp $@
+ 
+-# Generate the HTML manual.
+-install: $(docdir)/manual/index.html
+ 
+ # Generate 'nix' manpages.
+ install: $(mandir)/man1/nix3-manpages
+@@ -94,7 +92,5 @@ doc/manual/generated/man1/nix3-manpages: $(d)/src/command-ref/new-cli
+ 	done
+ 	@touch $@
+ 
+-$(docdir)/manual/index.html: $(MANUAL_SRCS) $(d)/book.toml $(d)/custom.css $(d)/src/SUMMARY.md $(d)/src/command-ref/new-cli $(d)/src/command-ref/conf-file.md $(d)/src/expressions/builtins.md $(call rwildcard, $(d)/src, *.md)
+-	$(trace-gen) RUST_LOG=warn mdbook build doc/manual -d $(DESTDIR)$(docdir)/manual
+ 
+ endif
diff --git a/gnu/packages/patches/nss-getcwd-nonnull.patch b/gnu/packages/patches/nss-getcwd-nonnull.patch
new file mode 100644
index 0000000000..37c1b1c539
--- /dev/null
+++ b/gnu/packages/patches/nss-getcwd-nonnull.patch
@@ -0,0 +1,30 @@
+Disable -Werror=nonnull on getcwd(0, 4096) because GCC incorrectly warns that
+the second argument should be NULL with recent glibc.  See:
+
+https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96832
+https://sourceware.org/bugzilla/show_bug.cgi?id=26545
+
+diff --git a/nss/coreconf/nsinstall/nsinstall.c b/nss/coreconf/nsinstall/nsinstall.c
+--- a/nss/coreconf/nsinstall/nsinstall.c
++++ b/nss/coreconf/nsinstall/nsinstall.c
+@@ -236,14 +236,20 @@ main(int argc, char **argv)
+ 	return 0;
+ 
+     if (!cwd) {
++#pragma GCC diagnostic push
++#pragma GCC diagnostic ignored "-Wnonnull"
+ 	cwd = GETCWD(0, PATH_MAX);
++#pragma GCC diagnostic pop
+ 	if (!cwd)
+ 	    fail("could not get CWD");
+     }
+ 
+     /* make sure we can get into todir. */
+     xchdir(todir);
++#pragma GCC diagnostic push
++#pragma GCC diagnostic ignored "-Wnonnull"
+     todir = GETCWD(0, PATH_MAX);
++#pragma GCC diagnostic pop
+     if (!todir)
+ 	fail("could not get CWD in todir");
+     tdlen = strlen(todir);
diff --git a/gnu/packages/patches/ocaml-4.09-multiple-definitions.patch b/gnu/packages/patches/ocaml-4.09-multiple-definitions.patch
new file mode 100644
index 0000000000..b2661f822c
--- /dev/null
+++ b/gnu/packages/patches/ocaml-4.09-multiple-definitions.patch
@@ -0,0 +1,41 @@
+Avoid multiply-defined symbols that lead to link errors such as:
+
+  ld: libcamlrund.a(backtrace_bd.o):/tmp/guix-build-ocaml-4.09.0.drv-0/ocaml-4.09.0/runtime/backtrace.c:31: multiple definition of `caml_debug_info'; libcamlrund.a(backtrace_byt_bd.o):/tmp/guix-build-ocaml-4.09.0.drv-0/ocaml-4.09.0/runtime/backtrace_byt.c:47: first defined here
+
+diff --git a/runtime/backtrace.c b/runtime/backtrace.c
+index a3c2c08..f57c81c 100644
+--- a/runtime/backtrace.c
++++ b/runtime/backtrace.c
+@@ -28,7 +28,7 @@
+ #include "caml/fail.h"
+ 
+ /* The table of debug information fragments */
+-struct ext_table caml_debug_info;
++static struct ext_table caml_debug_info;
+ 
+ CAMLexport int32_t caml_backtrace_active = 0;
+ CAMLexport int32_t caml_backtrace_pos = 0;
+diff --git a/runtime/backtrace_byt.c b/runtime/backtrace_byt.c
+index b913dac..b5ec926 100644
+--- a/runtime/backtrace_byt.c
++++ b/runtime/backtrace_byt.c
+@@ -44,7 +44,7 @@
+ #include "caml/backtrace_prim.h"
+ 
+ /* The table of debug information fragments */
+-struct ext_table caml_debug_info;
++static struct ext_table caml_debug_info;
+ 
+ CAMLexport char_os * caml_cds_file = NULL;
+ 
+diff --git a/runtime/startup_nat.c b/runtime/startup_nat.c
+index b4e6bc4..7eca5fa 100644
+--- a/runtime/startup_nat.c
++++ b/runtime/startup_nat.c
+@@ -44,6 +44,5 @@
+ #endif
+ 
+ extern int caml_parser_trace;
+-CAMLexport header_t caml_atom_table[256];
+ char * caml_code_area_start, * caml_code_area_end;
+ struct ext_table caml_code_fragments_table;
diff --git a/gnu/packages/patches/ocaml-cairo2-caml_ba_array-fix.patch b/gnu/packages/patches/ocaml-cairo2-caml_ba_array-fix.patch
deleted file mode 100644
index 1ebde1997f..0000000000
--- a/gnu/packages/patches/ocaml-cairo2-caml_ba_array-fix.patch
+++ /dev/null
@@ -1,68 +0,0 @@
-From 3c70f2ff18650c4794556049cd4ea22a58cc719e Mon Sep 17 00:00:00 2001
-From: Christophe Troestler <Christophe.Troestler@umons.ac.be>
-Date: Sun, 27 Sep 2020 23:20:52 +0200
-Subject: [PATCH] Do not store the Caml_ba_array_val pointer during surface
- creation
-
-Extracted from Cairo git-tree on November 22, 2020 by
-Brett Gilio <brettg@gnu.org>
----
- src/cairo_stubs.c     | 3 ++-
- tests/image_create.ml | 5 +++--
- 2 files changed, 5 insertions(+), 3 deletions(-)
-
-diff --git a/src/cairo_stubs.c b/src/cairo_stubs.c
-index 641ee2c..200abf3 100644
---- a/src/cairo_stubs.c
-+++ b/src/cairo_stubs.c
-@@ -1580,6 +1580,7 @@ static cairo_status_t caml_cairo_image_bigarray_attach_proxy
-                                      caml_cairo_image_bigarray_finalize);
- }
- 
-+#define b (Caml_ba_array_val(vb))
- #define SURFACE_CREATE_DATA(name)                                       \
-   CAMLexport value caml_cairo_image_surface_create_for_##name           \
-   (value vb, value vformat, value vwidth, value vheight, value vstride) \
-@@ -1588,7 +1589,6 @@ static cairo_status_t caml_cairo_image_bigarray_attach_proxy
-     CAMLlocal1(vsurf);                                                  \
-     cairo_surface_t* surf;                                              \
-     const int width =  Int_val(vwidth);                                 \
--    struct caml_ba_array *b = Caml_ba_array_val(vb);                    \
-     cairo_status_t status;                                              \
-                                                                         \
-     if ((b->flags & CAML_BA_MANAGED_MASK) == CAML_BA_MAPPED_FILE)       \
-@@ -1610,6 +1610,7 @@ static cairo_status_t caml_cairo_image_bigarray_attach_proxy
- 
- SURFACE_CREATE_DATA(data8)
- SURFACE_CREATE_DATA(data32)
-+#undef b
- 
- #define SURFACE_GET_DATA(type, num_dims, dims ...)                      \
-   CAMLexport value caml_cairo_image_surface_get_##type(value vsurf)     \
-diff --git a/tests/image_create.ml b/tests/image_create.ml
-index eec98d6..b13c206 100644
---- a/tests/image_create.ml
-+++ b/tests/image_create.ml
-@@ -10,6 +10,7 @@ let create() =
- 
- let () =
-   let cr = create() in
-+  printf "With Cairo handle:\n%!";
-   set_source_rgb cr 1. 1. 1.;
-   rectangle cr 0. 0. ~w:300. ~h:300.;
-   fill cr;
-@@ -21,9 +22,9 @@ let () =
-   show_text cr "Hello";
-   Gc.compact();  Gc.compact();
- 
--  eprintf "Write image\n%!";
-+  eprintf "- Write image\n%!";
-   PNG.write (get_target cr) "test_image.png";
--  eprintf "Finish surface\n%!";
-+  eprintf "- Finish surface\n%!";
-   Surface.finish (get_target cr);
-   Gc.compact()
- 
--- 
-2.29.2
-
diff --git a/gnu/packages/patches/ocaml-multiple-definitions.patch b/gnu/packages/patches/ocaml-multiple-definitions.patch
new file mode 100644
index 0000000000..e8678f4f64
--- /dev/null
+++ b/gnu/packages/patches/ocaml-multiple-definitions.patch
@@ -0,0 +1,43 @@
+Avoid multiply-defined symbols that lead to link errors such as:
+
+  gcc -O2 -fno-strict-aliasing -fwrapv -Wall -fno-tree-vrp  -g -D_FILE_OFFSET_BITS=64 -D_REENTRANT -DCAML_NAME_SPACE  -Wl,-E -o ocamlruni prims.o libcamlruni.a -lm  -ldl -lpthread 
+  ld: libcamlruni.a(backtrace.i.o):/tmp/guix-build-ocaml-4.07.1.drv-0/ocaml-4.07.1/byterun/backtrace.c:31: multiple definition of `caml_debug_info'; libcamlruni.a(backtrace_prim.i.o):/tmp/guix-build-ocaml-4.07.1.drv-0/ocaml-4.07.1/byterun/backtrace_prim.c:47: first defined here
+
+diff --git a/asmrun/startup.c b/asmrun/startup.c
+index 070f0c6..cf8a56f 100644
+--- a/asmrun/startup.c
++++ b/asmrun/startup.c
+@@ -44,7 +44,6 @@
+ #endif
+ 
+ extern int caml_parser_trace;
+-CAMLexport header_t caml_atom_table[256];
+ char * caml_code_area_start, * caml_code_area_end;
+ struct ext_table caml_code_fragments_table;
+ 
+diff --git a/byterun/backtrace.c b/byterun/backtrace.c
+index 8dfe9b7..9cc9e72 100644
+--- a/byterun/backtrace.c
++++ b/byterun/backtrace.c
+@@ -28,7 +28,7 @@
+ #include "caml/fail.h"
+ 
+ /* The table of debug information fragments */
+-struct ext_table caml_debug_info;
++static struct ext_table caml_debug_info;
+ 
+ CAMLexport int32_t caml_backtrace_active = 0;
+ CAMLexport int32_t caml_backtrace_pos = 0;
+diff --git a/byterun/backtrace_prim.c b/byterun/backtrace_prim.c
+index e69b256..d794f73 100644
+--- a/byterun/backtrace_prim.c
++++ b/byterun/backtrace_prim.c
+@@ -44,7 +44,7 @@
+ #include "caml/backtrace_prim.h"
+ 
+ /* The table of debug information fragments */
+-struct ext_table caml_debug_info;
++static struct ext_table caml_debug_info;
+ 
+ CAMLexport char_os * caml_cds_file = NULL;
+ 
diff --git a/gnu/packages/patches/ocaml-ppx-variants-ppxlib-api-change.patch b/gnu/packages/patches/ocaml-ppx-variants-ppxlib-api-change.patch
deleted file mode 100644
index b437bfb061..0000000000
--- a/gnu/packages/patches/ocaml-ppx-variants-ppxlib-api-change.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From 6103f6fc56f978c847ba7c1f2d9f38ee93a5e337 Mon Sep 17 00:00:00 2001
-From: Sonja Heinze <sonjaleaheinze@gmail.com>
-Date: Tue, 9 Mar 2021 12:57:47 +0100
-Subject: [PATCH] Adapt to Ppxlib's API change
-
-Ppxlib is removing Lexer.keyword_table from the API in exchange for
-the more lightweight Keyword.is_keyword.
-
-Signed-off-by: Sonja Heinze <sonjaleaheinze@gmail.com>
----
-Patch from <https://github.com/janestreet/ppx_variants_conv/pull/9>.
-
- ppx_variants_conv.opam   | 2 +-
- src/ppx_variants_conv.ml | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/ppx_variants_conv.opam b/ppx_variants_conv.opam
-index 7e7148d..b56040f 100644
---- a/ppx_variants_conv.opam
-+++ b/ppx_variants_conv.opam
-@@ -15,7 +15,7 @@ depends: [
-   "base"        {>= "v0.14" & < "v0.15"}
-   "variantslib" {>= "v0.14" & < "v0.15"}
-   "dune"        {>= "2.0.0"}
--  "ppxlib"      {>= "0.14.0"}
-+  "ppxlib"      {>= "0.23.0"}
- ]
- synopsis: "Generation of accessor and iteration functions for ocaml variant types"
- description: "
-diff --git a/src/ppx_variants_conv.ml b/src/ppx_variants_conv.ml
-index 8d60086..112fc78 100644
---- a/src/ppx_variants_conv.ml
-+++ b/src/ppx_variants_conv.ml
-@@ -66,7 +66,7 @@ end
- 
- let variant_name_to_string v =
-   let s = String.lowercase v in
--  if Caml.Hashtbl.mem Lexer.keyword_table s
-+  if Keyword.is_keyword s
-   then s ^ "_"
-   else s
- 
diff --git a/gnu/packages/patches/ocaml-qcheck-fix-test-whitespace.patch b/gnu/packages/patches/ocaml-qcheck-fix-test-whitespace.patch
new file mode 100644
index 0000000000..012f5de31c
--- /dev/null
+++ b/gnu/packages/patches/ocaml-qcheck-fix-test-whitespace.patch
@@ -0,0 +1,24 @@
+From 0cb666fffcbeb78c8c14d271b3ba65ea514bfc44 Mon Sep 17 00:00:00 2001
+From: Julien Lepiller <julien@lepiller.eu>
+Date: Fri, 19 Nov 2021 03:03:21 +0100
+Subject: [PATCH] Fix whitespace issue in test
+
+---
+ example/alcotest/output.txt.expected | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/example/alcotest/output.txt.expected b/example/alcotest/output.txt.expected
+index bde0b83..9f1417c 100644
+--- a/example/alcotest/output.txt.expected
++++ b/example/alcotest/output.txt.expected
+@@ -16,7 +16,6 @@ test `fail_sort_id` failed on ≥ 1 cases: [1; 0] (after 20 shrink steps)
+ [exception] test `fail_sort_id` failed on ≥ 1 cases: [1; 0] (after 20 shrink steps)
+                                            
+             
+-
+  ──────────────────────────────────────────────────────────────────────────────
+ 
+ 3 failures! 5 tests run.
+-- 
+2.33.1
+
diff --git a/gnu/packages/patches/opencv-fix-build-of-grfmt_jpeg2000.cpp.patch b/gnu/packages/patches/opencv-fix-build-of-grfmt_jpeg2000.cpp.patch
deleted file mode 100644
index 8deb60296a..0000000000
--- a/gnu/packages/patches/opencv-fix-build-of-grfmt_jpeg2000.cpp.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From: Tobias Geerinckx-Rice <me@tobias.gr>
-Date: Thu, 13 Aug 2020 15:21:30 +0200
-Subject: [PATCH] gnu: opencv: Fix build with Jasper 2.0.19.
-
-Taken verbatim from upstream: <https://github.com/opencv/opencv/issues/17984>.
-
-From f66fc199a20882c546fa31142e9c0f5a8b3cf983 Mon Sep 17 00:00:00 2001
-From: Florian Jung <flo@windfis.ch>
-Date: Wed, 29 Jul 2020 18:51:55 +0200
-Subject: [PATCH] Fix build of grfmt_jpeg2000.cpp
-
-libjasper has recently changed `jas_matrix_get` from a macro to an inline function
-(389951d071 in https://github.com/jasper-software/jasper), causing the build to fail.
----
- modules/imgcodecs/src/grfmt_jpeg2000.cpp | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/modules/imgcodecs/src/grfmt_jpeg2000.cpp b/modules/imgcodecs/src/grfmt_jpeg2000.cpp
-index fe69f80c86f..0f4d28d6f4d 100644
---- a/modules/imgcodecs/src/grfmt_jpeg2000.cpp
-+++ b/modules/imgcodecs/src/grfmt_jpeg2000.cpp
-@@ -377,7 +377,7 @@ bool  Jpeg2KDecoder::readComponent8u( uchar *data, void *_buffer,
- 
-     for( y = 0; y < yend - ystart; )
-     {
--        jas_seqent_t* pix_row = &jas_matrix_get( buffer, y / ystep, 0 );
-+        jas_seqent_t* pix_row = jas_matrix_getref( buffer, y / ystep, 0 );
-         uchar* dst = data + (y - yoffset) * step - xoffset;
- 
-         if( xstep == 1 )
-@@ -443,7 +443,7 @@ bool  Jpeg2KDecoder::readComponent16u( unsigned short *data, void *_buffer,
- 
-     for( y = 0; y < yend - ystart; )
-     {
--        jas_seqent_t* pix_row = &jas_matrix_get( buffer, y / ystep, 0 );
-+        jas_seqent_t* pix_row = jas_matrix_getref( buffer, y / ystep, 0 );
-         ushort* dst = data + (y - yoffset) * step - xoffset;
- 
-         if( xstep == 1 )
diff --git a/gnu/packages/patches/opencv-rgbd-aarch64-test-fix.patch b/gnu/packages/patches/opencv-rgbd-aarch64-test-fix.patch
deleted file mode 100644
index 7792f8d1bf..0000000000
--- a/gnu/packages/patches/opencv-rgbd-aarch64-test-fix.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-https://github.com/opencv/opencv_contrib/commit/8aaa91c3dc835690477d7777e66948dbf5a87edc.patch
-
-From 8aaa91c3dc835690477d7777e66948dbf5a87edc Mon Sep 17 00:00:00 2001
-From: Tomoaki Teshima <tomoaki.teshima@gmail.com>
-Date: Mon, 5 Nov 2018 20:32:23 +0900
-Subject: [PATCH] avoid test failing on Aarch64   * loosen the threshold in
- Rgbd_Normals.compute   * make the minimum tvec larger in
- RGBD_Odometry_Rgbd.algorithmic
-
----
- modules/rgbd/test/test_normal.cpp   | 2 +-
- modules/rgbd/test/test_odometry.cpp | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/modules/rgbd/test/test_normal.cpp b/modules/rgbd/test/test_normal.cpp
-index f2233553a7..ed54f2cd98 100644
---- a/modules/rgbd/test/test_normal.cpp
-+++ b/modules/rgbd/test/test_normal.cpp
-@@ -211,7 +211,7 @@ class CV_RgbdNormalsTest: public cvtest::BaseTest
-             std::cout << std::endl << "*** FALS" << std::endl;
-             errors[0][0] = 0.006f;
-             errors[0][1] = 0.03f;
--            errors[1][0] = 0.00008f;
-+            errors[1][0] = 0.0001f;
-             errors[1][1] = 0.02f;
-             break;
-           case 1:
-diff --git a/modules/rgbd/test/test_odometry.cpp b/modules/rgbd/test/test_odometry.cpp
-index 62b654a1ec..f5a2084504 100644
---- a/modules/rgbd/test/test_odometry.cpp
-+++ b/modules/rgbd/test/test_odometry.cpp
-@@ -213,7 +213,7 @@ void CV_OdometryTest::generateRandomTransformation(Mat& rvec, Mat& tvec)
-     normalize(rvec, rvec, rng.uniform(0.007f, maxRotation));
- 
-     randu(tvec, Scalar(-1000), Scalar(1000));
--    normalize(tvec, tvec, rng.uniform(0.007f, maxTranslation));
-+    normalize(tvec, tvec, rng.uniform(0.008f, maxTranslation));
- }
- 
- void CV_OdometryTest::run(int)
diff --git a/gnu/packages/patches/openrgb-unbundle-hueplusplus.patch b/gnu/packages/patches/openrgb-unbundle-hueplusplus.patch
new file mode 100644
index 0000000000..7454e1efbe
--- /dev/null
+++ b/gnu/packages/patches/openrgb-unbundle-hueplusplus.patch
@@ -0,0 +1,58 @@
+Remove references to hueplusplus in order to unbundle and use the input package.
+
+diff --git a/OpenRGB.pro b/OpenRGB.pro
+index 61758892..8702d998 100644
+--- a/OpenRGB.pro
++++ b/OpenRGB.pro
+@@ -493,35 +493,6 @@ SOURCES +=
+     dependencies/Swatches/swatches.cpp                                                          \
+     dependencies/dmiinfo.cpp                                                                    \
+     dependencies/ColorWheel/ColorWheel.cpp                                                      \
+-    dependencies/hueplusplus-1.0.0/src/Action.cpp                                               \
+-    dependencies/hueplusplus-1.0.0/src/APICache.cpp                                             \
+-    dependencies/hueplusplus-1.0.0/src/BaseDevice.cpp                                           \
+-    dependencies/hueplusplus-1.0.0/src/BaseHttpHandler.cpp                                      \
+-    dependencies/hueplusplus-1.0.0/src/Bridge.cpp                                               \
+-    dependencies/hueplusplus-1.0.0/src/BridgeConfig.cpp                                         \
+-    dependencies/hueplusplus-1.0.0/src/CLIPSensors.cpp                                          \
+-    dependencies/hueplusplus-1.0.0/src/ColorUnits.cpp                                           \
+-    dependencies/hueplusplus-1.0.0/src/EntertainmentMode.cpp                                    \
+-    dependencies/hueplusplus-1.0.0/src/ExtendedColorHueStrategy.cpp                             \
+-    dependencies/hueplusplus-1.0.0/src/ExtendedColorTemperatureStrategy.cpp                     \
+-    dependencies/hueplusplus-1.0.0/src/Group.cpp                                                \
+-    dependencies/hueplusplus-1.0.0/src/HueCommandAPI.cpp                                        \
+-    dependencies/hueplusplus-1.0.0/src/HueDeviceTypes.cpp                                       \
+-    dependencies/hueplusplus-1.0.0/src/HueException.cpp                                         \
+-    dependencies/hueplusplus-1.0.0/src/Light.cpp                                                \
+-    dependencies/hueplusplus-1.0.0/src/ModelPictures.cpp                                        \
+-    dependencies/hueplusplus-1.0.0/src/NewDeviceList.cpp                                        \
+-    dependencies/hueplusplus-1.0.0/src/Scene.cpp                                                \
+-    dependencies/hueplusplus-1.0.0/src/Schedule.cpp                                             \
+-    dependencies/hueplusplus-1.0.0/src/Sensor.cpp                                               \
+-    dependencies/hueplusplus-1.0.0/src/SimpleBrightnessStrategy.cpp                             \
+-    dependencies/hueplusplus-1.0.0/src/SimpleColorHueStrategy.cpp                               \
+-    dependencies/hueplusplus-1.0.0/src/SimpleColorTemperatureStrategy.cpp                       \
+-    dependencies/hueplusplus-1.0.0/src/StateTransaction.cpp                                     \
+-    dependencies/hueplusplus-1.0.0/src/TimePattern.cpp                                          \
+-    dependencies/hueplusplus-1.0.0/src/UPnP.cpp                                                 \
+-    dependencies/hueplusplus-1.0.0/src/Utils.cpp                                                \
+-    dependencies/hueplusplus-1.0.0/src/ZLLSensors.cpp                                           \
+     dependencies/libe131/src/e131.c                                                             \
+     dependencies/libcmmk/src/libcmmk.c                                                          \
+     main.cpp                                                                                    \
+@@ -1188,6 +1159,7 @@ unix:!macx {
+     -lmbedx509                                                                                  \
+     -lmbedtls                                                                                   \
+     -lmbedcrypto                                                                                \
++    -lhueplusplusshared                                                                         \
+ 
+     COMPILER_VERSION = $$system($$QMAKE_CXX " -dumpversion")
+     if (!versionAtLeast(COMPILER_VERSION, "9")) {
+@@ -1218,7 +1190,6 @@ unix:!macx {
+     }
+ 
+     SOURCES +=                                                                                  \
+-    dependencies/hueplusplus-1.0.0/src/LinHttpHandler.cpp                                       \
+     i2c_smbus/i2c_smbus_linux.cpp                                                               \
+     serial_port/find_usb_serial_port_linux.cpp                                                  \
+     AutoStart/AutoStart-Linux.cpp                                                               \
diff --git a/gnu/packages/patches/p11-kit-hurd.patch b/gnu/packages/patches/p11-kit-hurd.patch
new file mode 100644
index 0000000000..01699882c4
--- /dev/null
+++ b/gnu/packages/patches/p11-kit-hurd.patch
@@ -0,0 +1,46 @@
+Taken from: https://groups.google.com/g/linux.debian.bugs.dist/c/mX4GpUJih4k.
+
+--- a/configure.ac
++++ b/configure.ac
+@@ -132,6 +132,16 @@ if test "$os_unix" = "yes"; then
+ 	AC_CHECK_FUNCS([getpeereid])
+ 	AC_CHECK_FUNCS([getpeerucred])
+ 	AC_CHECK_FUNCS([issetugid])
++	case "$host_os" in
++	kfreebsd*-gnu | gnu*)
++		have_getpeereid=no
++		AC_CHECK_LIB(bsd, getpeereid, have_getpeereid=yes)
++		if test "x$have_getpeereid" = "xyes"; then
++			AC_DEFINE([HAVE_GETPEEREID], [1], [have getpeereid])
++			AC_SEARCH_LIBS([getpeereid], [bsd])
++		fi
++	;;
++	esac
+ 
+ 	AC_CACHE_CHECK([for thread-local storage class],
+ 		[ac_cv_tls_keyword],
+
+--- a/common/unix-peer.c
++++ b/common/unix-peer.c
+@@ -47,6 +47,11 @@
+ #  include <ucred.h>
+ #endif
+ 
++#ifdef HAVE_GETPEEREID
++/* Declare getpeereid from /usr/include/bsd/unistd.h */
++extern int getpeereid(int s, uid_t *euid, gid_t *egid);
++#endif
++
+ /* Returns the unix domain socket peer information.
+  * Returns zero on success.
+  */
+@@ -73,7 +78,8 @@ p11_get_upeer_id (int cfd, uid_t *uid, u
+ 		*pid = cr.pid;
+ 
+ #elif defined(HAVE_GETPEEREID)
+-	/* *BSD/MacOSX */
++	/* *BSD/MacOSX/kFreeBSD/Hurd */
++
+ 	uid_t euid;
+ 	gid_t egid;
+ 
\ No newline at end of file
diff --git a/gnu/packages/patches/password-store-tree-compat.patch b/gnu/packages/patches/password-store-tree-compat.patch
new file mode 100644
index 0000000000..ce8de8f27c
--- /dev/null
+++ b/gnu/packages/patches/password-store-tree-compat.patch
@@ -0,0 +1,29 @@
+Tree 2.0 and later will unconditionally ignore all options and write
+JSON data on file descriptor 3 when available, which causes problems
+for the test harness and other scripts that use FD 3.  Work around by
+closing descriptor 3 for the 'tree' command.
+
+Taken from upstream:
+  https://git.zx2c4.com/password-store/commit/?id=eea24967a002a2a81ae9b97a1fe972b5287f3a09
+
+diff --git a/src/password-store.sh b/src/password-store.sh
+--- a/src/password-store.sh
++++ b/src/password-store.sh
+@@ -402,7 +402,7 @@ cmd_show() {
+ 		else
+ 			echo "${path%\/}"
+ 		fi
+-		tree -N -C -l --noreport "$PREFIX/$path" | tail -n +2 | sed -E 's/\.gpg(\x1B\[[0-9]+m)?( ->|$)/\1\2/g' # remove .gpg at end of line, but keep colors
++		tree -N -C -l --noreport "$PREFIX/$path" 3>&- | tail -n +2 | sed -E 's/\.gpg(\x1B\[[0-9]+m)?( ->|$)/\1\2/g' # remove .gpg at end of line, but keep colors
+ 	elif [[ -z $path ]]; then
+ 		die "Error: password store is empty. Try \"pass init\"."
+ 	else
+@@ -414,7 +414,7 @@ cmd_find() {
+ 	[[ $# -eq 0 ]] && die "Usage: $PROGRAM $COMMAND pass-names..."
+ 	IFS="," eval 'echo "Search Terms: $*"'
+ 	local terms="*$(printf '%s*|*' "$@")"
+-	tree -N -C -l --noreport -P "${terms%|*}" --prune --matchdirs --ignore-case "$PREFIX" | tail -n +2 | sed -E 's/\.gpg(\x1B\[[0-9]+m)?( ->|$)/\1\2/g'
++	tree -N -C -l --noreport -P "${terms%|*}" --prune --matchdirs --ignore-case "$PREFIX" 3>&- | tail -n +2 | sed -E 's/\.gpg(\x1B\[[0-9]+m)?( ->|$)/\1\2/g'
+ }
+ 
+ cmd_grep() {
diff --git a/gnu/packages/patches/passwordsafe-meson-remove-extra-argument.patch b/gnu/packages/patches/passwordsafe-meson-remove-extra-argument.patch
new file mode 100644
index 0000000000..3cb61a364a
--- /dev/null
+++ b/gnu/packages/patches/passwordsafe-meson-remove-extra-argument.patch
@@ -0,0 +1,20 @@
+diff --git a/data/meson.build b/data/meson.build
+index 46f6373..26a2c18 100644
+--- a/data/meson.build
++++ b/data/meson.build
+@@ -35,7 +35,6 @@ if get_option('profile') == 'development'
+ endif
+ desktop_conf.set('ICON', application_id)
+ desktop = i18n.merge_file(
+-  'desktop',
+   input: configure_file(
+     input: files('org.gnome.PasswordSafe.desktop.in.in'),
+     output: 'org.gnome.PasswordSafe.desktop.in',
+@@ -65,7 +64,6 @@ if get_option('profile') == 'development'
+ endif
+ appdata_conf.set('APPID', application_id)
+ appdata = i18n.merge_file(
+-  'appdata',
+   input: configure_file(
+     input: files('org.gnome.PasswordSafe.appdata.xml.in.in'),
+     output: 'org.gnome.PasswordSafe.appdata.xml.in',
diff --git a/gnu/packages/patches/perl-cross.patch b/gnu/packages/patches/perl-cross.patch
deleted file mode 100644
index a7d10b4e1f..0000000000
--- a/gnu/packages/patches/perl-cross.patch
+++ /dev/null
@@ -1,60 +0,0 @@
-Submitted upstream.
-
-From 4c3eb19a11dfe5c88c902481a8294c4f675fcd03 Mon Sep 17 00:00:00 2001
-From: "Jan (janneke) Nieuwenhuizen" <janneke@gnu.org>
-Date: Sun, 19 Apr 2020 23:33:28 +0200
-Subject: [PATCH] Support cross-compiling to the Hurd.
-
-* cnf/hints/gnu: New file.
-* cnf/configure_tool.sh: Guess it.
----
- cnf/configure_tool.sh |  4 ++++
- cnf/hints/gnu         | 21 +++++++++++++++++++++
- 2 files changed, 25 insertions(+)
- create mode 100644 cnf/hints/gnu
-
-diff --git a/cnf/configure_tool.sh b/cnf/configure_tool.sh
-index 32201c0..7b0baa4 100644
---- a/cnf/configure_tool.sh
-+++ b/cnf/configure_tool.sh
-@@ -266,6 +266,10 @@ if not hinted 'osname'; then
- 			define osname "bsd"
- 			result "BSD"
- 			;;
-+		*-gnu*)
-+			define osname "gnu"
-+			result "GNU"
-+			;;
- 		*)
- 			result "no"
- 			;;
-diff --git a/cnf/hints/gnu b/cnf/hints/gnu
-new file mode 100644
-index 0000000..a0583a2
---- /dev/null
-+++ b/cnf/hints/gnu
-@@ -0,0 +1,21 @@
-+# Hurd syscalls
-+d_voidsig='define'
-+d_nanosleep='undef'
-+d_clock_gettime='define'
-+d_clock_getres='define'
-+d_clock_nanosleep='define'
-+d_clock='define'
-+
-+# From the original linux.sh
-+usemallocwrap='define'
-+
-+# libraries to test
-+libswanted='m crypt pthread nm ndbm gdbm dbm db dl gdbm_compat'
-+
-+d_procselfexe='undef'
-+procselfexe='"undef"'
-+
-+st_ino_sign=1
-+st_ino_size=8
-+
-+d_fcntl_can_lock='define'
--- 
-2.26.0
-
diff --git a/gnu/packages/patches/perl-deterministic-ordering.patch b/gnu/packages/patches/perl-deterministic-ordering.patch
deleted file mode 100644
index be63d5cde3..0000000000
--- a/gnu/packages/patches/perl-deterministic-ordering.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From <https://bugs.debian.org/801523>.
-
-From c01f602d1926b0671fd2c8d91f7e52c4e4c9fb24 Mon Sep 17 00:00:00 2001
-From: Niko Tyni <ntyni@debian.org>
-Date: Sun, 11 Oct 2015 19:27:56 +0300
-Subject: [PATCH] Sort the list of XS code files when generating RealPPPort.xs
-
-all_files_in_dir() uses readdir() ordering to make the list of
-input files. This can vary between build systems, breaking build
-reproducibility.
----
- cpan/Devel-PPPort/PPPort_xs.PL | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/dist/Devel-PPPort/PPPort_xs.PL b/dist/Devel-PPPort/PPPort_xs.PL
-index 5f18940..149f2fe 100644
---- a/dist/Devel-PPPort/PPPort_xs.PL
-+++ b/dist/Devel-PPPort/PPPort_xs.PL
-@@ -38,7 +38,7 @@ END
- my $file;
- my $sec;
- 
--for $file (all_files_in_dir('parts/inc')) {
-+for $file (sort(all_files_in_dir('parts/inc'))) {
-   my $spec = parse_partspec($file);
- 
-   my $msg = 0;
--- 
-2.5.1
diff --git a/gnu/packages/patches/perl-io-socket-ssl-openssl-1.0.2f-fix.patch b/gnu/packages/patches/perl-io-socket-ssl-openssl-1.0.2f-fix.patch
deleted file mode 100644
index f2166aebfd..0000000000
--- a/gnu/packages/patches/perl-io-socket-ssl-openssl-1.0.2f-fix.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-Work around a problem arising from the update to OpenSSL 1.0.2f, based on the
-following upstream commit:
-
-  https://github.com/noxxi/p5-io-socket-ssl/commit/6e23ee4a433f83f1065bd2467255eba5ee9b1ddd
-
-Attempting to update to IO-Socket-SSL-2.023, which includes this commit,
-caused other test failures.  See:
-
-  https://lists.gnu.org/archive/html/guix-devel/2016-01/msg01032.html
-
-Description from the upstream commit:
-
-  OpenSSL 1.0.2f changed the behavior of SSL shutdown in case the TLS connection
-  was not fully established (commit: f73c737c7ac908c5d6407c419769123392a3b0a9).
-  This somehow resulted in Net::SSLeay::shutdown returning 0 (i.e. keep trying)
-  which caused an endless loop. It will now ignore this result in case the TLS
-  connection was not yet established and consider the TLS connection closed
-  instead.
-
---- IO-Socket-SSL-2.002/lib/IO/Socket/SSL.pm.orig	2014-10-21 16:51:16.000000000 -0400
-+++ IO-Socket-SSL-2.002/lib/IO/Socket/SSL.pm	2016-01-31 15:07:14.971099894 -0500
-@@ -1213,6 +1213,11 @@
- 		    # shutdown complete
- 		    last;
- 		}
-+		if ((${*$self}{'_SSL_opened'}||0) <= 0) {
-+		    # not really open, thus don't expect shutdown to return
-+		    # something meaningful
-+		    last;
-+		}
- 
- 		# initiate or complete shutdown
- 		local $SIG{PIPE} = 'IGNORE';
diff --git a/gnu/packages/patches/perl-no-sys-dirs.patch b/gnu/packages/patches/perl-no-sys-dirs.patch
index 2269d715c7..14d634cac9 100644
--- a/gnu/packages/patches/perl-no-sys-dirs.patch
+++ b/gnu/packages/patches/perl-no-sys-dirs.patch
@@ -6,7 +6,7 @@ Patch adapted from Nixpkgs, originally by Eelco Dolstra
 diff -ru -x '*~' -x '*.rej' perl-5.20.0-orig/Configure perl-5.20.0/Configure
 --- perl-5.20.0-orig/Configure	2014-05-26 15:34:18.000000000 +0200
 +++ perl-5.20.0/Configure	2014-06-25 10:43:35.368285986 +0200
-@@ -106,15 +106,7 @@
+@@ -108,15 +108,7 @@
  fi
  
  : Proper PATH setting
@@ -23,8 +23,8 @@ diff -ru -x '*~' -x '*.rej' perl-5.20.0-orig/Configure perl-5.20.0/Configure
  
  for p in $paths
  do
-@@ -1337,8 +1329,7 @@
- archname=''
+@@ -1435,8 +1427,7 @@
+ i_whoami=''
  : Possible local include directories to search.
  : Set locincpth to "" in a hint file to defeat local include searches.
 -locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
@@ -33,8 +33,8 @@ diff -ru -x '*~' -x '*.rej' perl-5.20.0-orig/Configure perl-5.20.0/Configure
  :
  : no include file wanted by default
  inclwanted=''
-@@ -1349,17 +1340,12 @@
- 
+@@ -1450,17 +1441,12 @@
+ archobjs=''
  libnames=''
  : change the next line if compiling for Xenix/286 on Xenix/386
 -xlibpth='/usr/lib/386 /lib/386'
@@ -54,8 +54,8 @@ diff -ru -x '*~' -x '*.rej' perl-5.20.0-orig/Configure perl-5.20.0/Configure
  
  : Private path used by Configure to find libraries.  Its value
  : is prepended to libpth. This variable takes care of special
-@@ -1391,8 +1377,6 @@
- libswanted="$libswanted m crypt sec util c cposix posix ucb bsd BSD"
+@@ -1495,8 +1481,6 @@
+ libswanted="$libswanted sun m crypt sec util c cposix posix ucb bsd BSD"
  : We probably want to search /usr/shlib before most other libraries.
  : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
 -glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
@@ -63,7 +63,7 @@ diff -ru -x '*~' -x '*.rej' perl-5.20.0-orig/Configure perl-5.20.0/Configure
  : Do not use vfork unless overridden by a hint file.
  usevfork=false
  
-@@ -2446,7 +2430,6 @@
+@@ -2553,7 +2537,6 @@
  zip
  "
  pth=`echo $PATH | sed -e "s/$p_/ /g"`
@@ -71,7 +71,7 @@ diff -ru -x '*~' -x '*.rej' perl-5.20.0-orig/Configure perl-5.20.0/Configure
  for file in $loclist; do
  	eval xxx=\$$file
  	case "$xxx" in
-@@ -4936,7 +4919,7 @@
+@@ -5049,7 +5033,7 @@
  : Set private lib path
  case "$plibpth" in
  '') if ./mips; then
@@ -80,7 +80,7 @@ diff -ru -x '*~' -x '*.rej' perl-5.20.0-orig/Configure perl-5.20.0/Configure
      fi;;
  esac
  case "$libpth" in
-@@ -8600,13 +8583,8 @@
+@@ -8877,13 +8861,8 @@
  echo " "
  case "$sysman" in
  '')
@@ -96,7 +96,7 @@ diff -ru -x '*~' -x '*.rej' perl-5.20.0-orig/Configure perl-5.20.0/Configure
  	;;
  esac
  if $test -d "$sysman"; then
-@@ -19900,9 +19878,10 @@
+@@ -21027,9 +21006,10 @@
  case "$full_ar" in
  '') full_ar=$ar ;;
  esac
@@ -169,7 +169,7 @@ diff -ru -x '*~' -x '*.rej' perl-5.20.0-orig/hints/freebsd.sh perl-5.20.0/hints/
 diff -ru -x '*~' -x '*.rej' perl-5.20.0-orig/hints/linux.sh perl-5.20.0/hints/linux.sh
 --- perl-5.20.0-orig/hints/linux.sh	2014-05-26 15:34:20.000000000 +0200
 +++ perl-5.20.0/hints/linux.sh	2014-06-25 10:33:47.354883843 +0200
-@@ -150,25 +150,6 @@
+@@ -150,28 +150,6 @@
      ;;
  esac
  
@@ -188,6 +188,9 @@ diff -ru -x '*~' -x '*.rej' perl-5.20.0-orig/hints/linux.sh perl-5.20.0/hints/li
 -# plibpth to bypass this check.
 -if [ -x /usr/bin/gcc ] ; then
 -    gcc=/usr/bin/gcc
+-# clang also provides -print-search-dirs
+-elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then
+-    gcc=${cc:-cc}
 -else
 -    gcc=gcc
 -fi
@@ -195,7 +198,40 @@ diff -ru -x '*~' -x '*.rej' perl-5.20.0-orig/hints/linux.sh perl-5.20.0/hints/li
  case "$plibpth" in
  '') plibpth=`LANG=C LC_ALL=C $gcc $ccflags $ldflags -print-search-dirs | grep libraries |
  	cut -f2- -d= | tr ':' $trnl | grep -v 'gcc' | sed -e 's:/$::'`
-@@ -367,33 +322,6 @@
+@@ -208,32 +186,6 @@
+   ;;
+ esac
+ 
+-case "$libc" in
+-'')
+-# If you have glibc, then report the version for ./myconfig bug reporting.
+-# (Configure doesn't need to know the specific version since it just uses
+-# gcc to load the library for all tests.)
+-# We don't use __GLIBC__ and  __GLIBC_MINOR__ because they
+-# are insufficiently precise to distinguish things like
+-# libc-2.0.6 and libc-2.0.7.
+-    for p in $plibpth
+-    do
+-        for trylib in libc.so.6 libc.so
+-        do
+-            if $test -e $p/$trylib; then
+-                libc=`ls -l $p/$trylib | awk '{print $NF}'`
+-                if $test "X$libc" != X; then
+-                    break
+-                fi
+-            fi
+-        done
+-        if $test "X$libc" != X; then
+-            break
+-        fi
+-    done
+-    ;;
+-esac
+-
+ if ${sh:-/bin/sh} -c exit; then
+   echo ''
+   echo 'You appear to have a working bash.  Good.'
+@@ -311,33 +263,6 @@
  	;;
  esac
  
@@ -229,40 +265,3 @@ diff -ru -x '*~' -x '*.rej' perl-5.20.0-orig/hints/linux.sh perl-5.20.0/hints/li
  # Linux on Synology.
  if [ -f /etc/synoinfo.conf -a -d /usr/syno ]; then
      # Tested on Synology DS213 and DS413
-diff --git a/hints/linux.sh b/hints/linux.sh
-index 3f38ea0..97aed11 100644
---- a/hints/linux.sh
-+++ b/hints/linux.sh
-@@ -195,32 +195,6 @@ case "$usequadmath" in
-   ;;
- esac
- 
--case "$libc" in
--'')
--# If you have glibc, then report the version for ./myconfig bug reporting.
--# (Configure doesn't need to know the specific version since it just uses
--# gcc to load the library for all tests.)
--# We don't use __GLIBC__ and  __GLIBC_MINOR__ because they
--# are insufficiently precise to distinguish things like
--# libc-2.0.6 and libc-2.0.7.
--    for p in $plibpth
--    do
--        for trylib in libc.so.6 libc.so
--        do
--            if $test -e $p/$trylib; then
--                libc=`ls -l $p/$trylib | awk '{print $NF}'`
--                if $test "X$libc" != X; then
--                    break
--                fi
--            fi
--        done
--        if $test "X$libc" != X; then
--            break
--        fi
--    done
--    ;;
--esac
--
- if ${sh:-/bin/sh} -c exit; then
-   echo ''
-   echo 'You appear to have a working bash.  Good.'
diff --git a/gnu/packages/patches/php-bug-74093-test.patch b/gnu/packages/patches/php-bug-74093-test.patch
new file mode 100644
index 0000000000..07b1949cef
--- /dev/null
+++ b/gnu/packages/patches/php-bug-74093-test.patch
@@ -0,0 +1,48 @@
+From c641825c64e42627a2c9cac969b371ed532e0b57 Mon Sep 17 00:00:00 2001
+From: Ryan Sundberg <ryan@arctype.co>
+Date: Mon, 4 Oct 2021 20:12:25 -0700
+Subject: [PATCH] Zend/tests/bug74093.phpt: Fix failing test case
+
+This test case fails (on non-Windows hosts, where it is enabled) due
+to mismatching output in the error log language. This fixes the
+expectation, and also rewrites the test procedure in a more stable
+fashion.
+
+The objective of the test case is to run a program that exceeds
+the max_execution_time and verify that the process was aborted. The
+previous implementation tested this using a loop on array_intersect with
+large enough inputs to "probably" take enough time to trigger
+max_execution_time to abort it. With faster CPUs, over time this test
+can become flaky. Instead we simply spin a loop until enough
+wall clock time has passed to check our assertion.
+---
+ Zend/tests/bug74093.phpt | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/Zend/tests/bug74093.phpt b/Zend/tests/bug74093.phpt
+index 7f20285805..32eb445ddc 100644
+--- a/Zend/tests/bug74093.phpt
++++ b/Zend/tests/bug74093.phpt
+@@ -1,5 +1,5 @@
+ --TEST--
+-Bug #74093 (Maximum execution time of n+2 seconds exceed not written in error_log)
++Bug #74093 (Maximum execution time exceeded not written in error_log)
+ --SKIPIF--
+ <?php
+ if (getenv("SKIP_SLOW_TESTS")) die("skip slow test");
+@@ -12,9 +12,9 @@ max_execution_time=1
+ hard_timeout=1
+ --FILE--
+ <?php
+-$a1 = range(1, 1000000);
+-$a2 = range(100000, 1999999);
+-array_intersect($a1, $a2);
++$start = time();
++while (time() - $start < 5);
++die("Failed to interrupt execution");
+ ?>
+ --EXPECTF--
+-Fatal error: Maximum execution time of 1+1 seconds exceeded %s
++Fatal error: Maximum execution time of 1 second exceeded in %s
+--
+2.31.1
diff --git a/gnu/packages/patches/php-openssl_x509_checkpurpose_basic.patch b/gnu/packages/patches/php-openssl_x509_checkpurpose_basic.patch
new file mode 100644
index 0000000000..427965f231
--- /dev/null
+++ b/gnu/packages/patches/php-openssl_x509_checkpurpose_basic.patch
@@ -0,0 +1,108 @@
+From 98175fc7f1623873ceb2e9a017a319d19bfb3912 Mon Sep 17 00:00:00 2001
+From: "Christoph M. Becker" <cmbecker69@gmx.de>
+Date: Sun, 12 Dec 2021 13:41:37 +0100
+Subject: [PATCH] Fix openssl_x509_checkpurpose_basic.phpt
+
+This test fails because san-cert.pem and san-ca.pem have expired.  We
+fix that by using the CertificateGenerator to generate temporary certs
+during the test run.  Since san-cert.pem and san-ca.pem have been
+identical, we only generate one certificate.
+
+Closes GH-7763.
+---
+ .../openssl_x509_checkpurpose_basic.phpt      | 10 +++++-
+ ext/openssl/tests/san-ca.pem                  | 15 ---------
+ ext/openssl/tests/san-cert.pem                | 31 -------------------
+ 3 files changed, 9 insertions(+), 47 deletions(-)
+ delete mode 100644 ext/openssl/tests/san-ca.pem
+ delete mode 100644 ext/openssl/tests/san-cert.pem
+
+diff --git a/ext/openssl/tests/openssl_x509_checkpurpose_basic.phpt b/ext/openssl/tests/openssl_x509_checkpurpose_basic.phpt
+index 99b4f0bdff31..35629bd93626 100644
+--- a/ext/openssl/tests/openssl_x509_checkpurpose_basic.phpt
++++ b/ext/openssl/tests/openssl_x509_checkpurpose_basic.phpt
+@@ -8,10 +8,14 @@ if (OPENSSL_VERSION_NUMBER < 0x10000000) die("skip Output requires OpenSSL 1.0")
+ ?>
+ --FILE--
+ <?php
++include 'CertificateGenerator.inc';
++$certificateGenerator = new CertificateGenerator();
++$certificateGenerator->saveCaCert(__DIR__ . "/san-cert.pem");
++
+ $cert = "file://" . __DIR__ . "/cert.crt";
+ $bert = "file://" . __DIR__ . "/bug41033.pem";
+ $sert = "file://" . __DIR__ . "/san-cert.pem";
+-$cpca = __DIR__ . "/san-ca.pem";
++$cpca = __DIR__ . "/san-cert.pem";
+ $utfl = __DIR__ . "/sni_server_uk.pem";
+ $rcrt = openssl_x509_read($cert);
+ 
+@@ -84,6 +88,10 @@ var_dump(openssl_x509_checkpurpose($sert, X509_PURPOSE_SMIME_ENCRYPT, array($cpc
+ var_dump(openssl_x509_checkpurpose($sert, X509_PURPOSE_CRL_SIGN, array($cpca), $utfl));
+ var_dump(openssl_x509_checkpurpose($sert, X509_PURPOSE_ANY, array($cpca), $utfl));
+ ?>
++--CLEAN--
++<?php
++@unlink(__DIR__ . "/san-cert.pem");
++?>
+ --EXPECT--
+ bool(false)
+ bool(false)
+diff --git a/ext/openssl/tests/san-ca.pem b/ext/openssl/tests/san-ca.pem
+deleted file mode 100644
+index 88682ba2dcf6..000000000000
+--- a/ext/openssl/tests/san-ca.pem
++++ /dev/null
+@@ -1,15 +0,0 @@
+------BEGIN CERTIFICATE-----
+-MIICYTCCAcqgAwIBAgIJAIaqxtY5dwjtMA0GCSqGSIb3DQEBBQUAMFMxCzAJBgNV
+-BAYTAlVTMQswCQYDVQQIEwJNTjEUMBIGA1UEBxMLTWlubmVhcG9saXMxITAfBgNV
+-BAsTGERvbWFpbiBDb250cm9sIFZhbGlkYXRlZDAeFw0xMzA5MjQwODA1NTFaFw0y
+-MTEyMTEwODA1NTFaMFMxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJNTjEUMBIGA1UE
+-BxMLTWlubmVhcG9saXMxITAfBgNVBAsTGERvbWFpbiBDb250cm9sIFZhbGlkYXRl
+-ZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAsFGqfbU/8D+KjroQl4XMyt9m
+-dcSP7iZtqphOu9nVZxYAAqfaqj8FnC/pwYV3TU6ZHndLTQAllwYT3sQBQPPGmZQ9
+-clSIMEL003t3pi4ZVXkttG6Vvr+Z9PBcHhlKLQ7WMHnn4qctllWXTSoyTQpkETF3
+-Fc3mrG5G37BhoUno7NECAwEAAaM9MDswOQYDVR0RBDIwMIILZXhhbXBsZS5vcmeC
+-D3d3dy5leGFtcGxlLm9yZ4IQdGVzdC5leGFtcGxlLm9yZzANBgkqhkiG9w0BAQUF
+-AAOBgQBf/FZhzheIcQJ+dyTk8xQ/nJLvpmBhbd1LNtfwk/MsC9UHsz4QXs9sBw1k
+-rH0FjoqgM6avj7zKHJFTj6q7Rd+OX5V4HynYPhX67sWbN3KWEHffL98nGGd/bo3X
+-pSjNk5vnyKYiwdUUe11Ac9csh0HcSBbhOYjy0T/i9AlQcKbuCg==
+------END CERTIFICATE-----
+diff --git a/ext/openssl/tests/san-cert.pem b/ext/openssl/tests/san-cert.pem
+deleted file mode 100644
+index 923d490e72fd..000000000000
+--- a/ext/openssl/tests/san-cert.pem
++++ /dev/null
+@@ -1,31 +0,0 @@
+------BEGIN CERTIFICATE-----
+-MIICYTCCAcqgAwIBAgIJAIaqxtY5dwjtMA0GCSqGSIb3DQEBBQUAMFMxCzAJBgNV
+-BAYTAlVTMQswCQYDVQQIEwJNTjEUMBIGA1UEBxMLTWlubmVhcG9saXMxITAfBgNV
+-BAsTGERvbWFpbiBDb250cm9sIFZhbGlkYXRlZDAeFw0xMzA5MjQwODA1NTFaFw0y
+-MTEyMTEwODA1NTFaMFMxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJNTjEUMBIGA1UE
+-BxMLTWlubmVhcG9saXMxITAfBgNVBAsTGERvbWFpbiBDb250cm9sIFZhbGlkYXRl
+-ZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAsFGqfbU/8D+KjroQl4XMyt9m
+-dcSP7iZtqphOu9nVZxYAAqfaqj8FnC/pwYV3TU6ZHndLTQAllwYT3sQBQPPGmZQ9
+-clSIMEL003t3pi4ZVXkttG6Vvr+Z9PBcHhlKLQ7WMHnn4qctllWXTSoyTQpkETF3
+-Fc3mrG5G37BhoUno7NECAwEAAaM9MDswOQYDVR0RBDIwMIILZXhhbXBsZS5vcmeC
+-D3d3dy5leGFtcGxlLm9yZ4IQdGVzdC5leGFtcGxlLm9yZzANBgkqhkiG9w0BAQUF
+-AAOBgQBf/FZhzheIcQJ+dyTk8xQ/nJLvpmBhbd1LNtfwk/MsC9UHsz4QXs9sBw1k
+-rH0FjoqgM6avj7zKHJFTj6q7Rd+OX5V4HynYPhX67sWbN3KWEHffL98nGGd/bo3X
+-pSjNk5vnyKYiwdUUe11Ac9csh0HcSBbhOYjy0T/i9AlQcKbuCg==
+------END CERTIFICATE-----
+------BEGIN PRIVATE KEY-----
+-MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALBRqn21P/A/io66
+-EJeFzMrfZnXEj+4mbaqYTrvZ1WcWAAKn2qo/BZwv6cGFd01OmR53S00AJZcGE97E
+-AUDzxpmUPXJUiDBC9NN7d6YuGVV5LbRulb6/mfTwXB4ZSi0O1jB55+KnLZZVl00q
+-Mk0KZBExdxXN5qxuRt+wYaFJ6OzRAgMBAAECgYB11e5iWvqjPmQEZRdnnJU0VD8u
+-n7ItT+Nk6qtb4gY8Abj6DWIW+01th5vqqJ8FvGyartFVYa69kuM+srG/zevAZWeu
+-fGZtwiwZR4DRSyRcPp4rnNiksK3dkAZA6UewmRDPv8uyHJlXc5i+Ft1ILJ5Q5jgn
+-UkC4z3EJP5Se9KZywQJBAOO4lRq42wLsYr2SDrQDSs4leie3FKc2bgvjF7Djosh1
+-ZYbf55F5b9w1zgnccmni2HkqOnyFu4SKarmXyCsYxrkCQQDGNvnUh7/zZswrdWZ/
+-PMp9zVDTh/5Oc2B4ByNLw1ERDwYhjchKgPRlQvn4cp3Pwf3UYPQ/8XGXzzEJey3A
+-r0rZAkBf/tDEOgcBPXsGZQrTscuYCU5sbY5ESvqrAilbhSp7DJom+D5bIfEYyIm5
+-uHd20Yzlzvpmwc1huyPwZt6X5FLpAkATDReoGMAXSesXxjnqwtIHk2NQYYLM0YQV
+-JUJ8NrKk/Bevw+vbVVeoH+7ctU97t36JGiR/vNoZKD3jVmaIXZDJAkEA4wJbwzIo
+-L32mu9VmZa7wjmfkraQEmXTPaA5D9lNC0AwRTgkj+x2Qe1vawNblNK9PPLBDdplQ
+-L//53ADq/wv5rA==
+------END PRIVATE KEY-----
diff --git a/gnu/packages/patches/pigx-bsseq-no-citeproc.patch b/gnu/packages/patches/pigx-bsseq-no-citeproc.patch
new file mode 100644
index 0000000000..882e660fe4
--- /dev/null
+++ b/gnu/packages/patches/pigx-bsseq-no-citeproc.patch
@@ -0,0 +1,33 @@
+diff -Naur pigx_bsseq-0.1.5/configure.ac pigx_bsseq-0.1.5.patched/configure.ac
+--- pigx_bsseq-0.1.5/configure.ac	2021-06-08 15:28:08.000000000 +0200
++++ pigx_bsseq-0.1.5.patched/configure.ac	2021-10-05 14:43:56.806529137 +0200
+@@ -38,7 +38,6 @@
+ find_or_override_prog([GNUBASH],         [bash])
+ find_or_override_prog([SNAKEMAKE],       [snakemake])
+ find_or_override_prog([PANDOC],          [pandoc])
+-find_or_override_prog([PANDOC_CITEPROC], [pandoc-citeproc])
+ find_or_override_prog([FASTQC],          [fastqc])
+ find_or_override_prog([MULTIQC],         [multiqc])
+ find_or_override_prog([TRIMGALORE],      [trim_galore])
+diff -Naur pigx_bsseq-0.1.5/Makefile.in pigx_bsseq-0.1.5.patched/Makefile.in
+--- pigx_bsseq-0.1.5/Makefile.in	2021-06-08 16:17:03.000000000 +0200
++++ pigx_bsseq-0.1.5.patched/Makefile.in	2021-10-05 14:43:34.635876855 +0200
+@@ -408,7 +408,6 @@
+ PACKAGE_URL = @PACKAGE_URL@
+ PACKAGE_VERSION = @PACKAGE_VERSION@
+ PANDOC = @PANDOC@
+-PANDOC_CITEPROC = @PANDOC_CITEPROC@
+ PATH_SEPARATOR = @PATH_SEPARATOR@
+ PYTHON = @PYTHON@
+ PYTHONPATH = @PYTHONPATH@
+diff -Naur pigx_bsseq-0.1.5/pigx-common/common/pigx-runner.in pigx_bsseq-0.1.5.patched/pigx-common/common/pigx-runner.in
+--- pigx_bsseq-0.1.5/pigx-common/common/pigx-runner.in	2021-06-08 10:14:29.000000000 +0200
++++ pigx_bsseq-0.1.5.patched/pigx-common/common/pigx-runner.in	2021-10-05 14:43:44.296161069 +0200
+@@ -375,7 +375,6 @@
+     if path.exists(bin): shutil.rmtree(bin)
+     os.makedirs(bin, exist_ok=True)
+     os.symlink('@PANDOC@', path.join(bin, "pandoc"))
+-    os.symlink('@PANDOC_CITEPROC@', path.join(bin, "pandoc-citeproc"))
+     os.symlink('@RSCRIPT@', path.join(bin, "Rscript"))
+     os.environ['PATH'] = path.abspath(bin) + ":" + os.environ['PATH']
+     os.environ['PIGX_PATH'] = path.abspath(bin) + ":" + os.environ['PATH']
diff --git a/gnu/packages/patches/pigx-chipseq-no-citeproc.patch b/gnu/packages/patches/pigx-chipseq-no-citeproc.patch
new file mode 100644
index 0000000000..b01820f110
--- /dev/null
+++ b/gnu/packages/patches/pigx-chipseq-no-citeproc.patch
@@ -0,0 +1,33 @@
+diff -Naur pigx_chipseq-0.0.53/configure.ac pigx_chipseq-0.0.53.patched/configure.ac
+--- pigx_chipseq-0.0.53/configure.ac	2021-09-28 11:14:12.000000000 +0200
++++ pigx_chipseq-0.0.53.patched/configure.ac	2021-10-07 14:48:53.034054327 +0200
+@@ -52,7 +52,6 @@
+ find_or_override_prog([MACS2],           [macs2])
+ find_or_override_prog([SNAKEMAKE],       [snakemake])
+ find_or_override_prog([PANDOC],          [pandoc])
+-find_or_override_prog([PANDOC_CITEPROC], [pandoc-citeproc])
+ find_or_override_prog([FASTQC],          [fastqc])
+ find_or_override_prog([BOWTIE2],         [bowtie2])
+ find_or_override_prog([BOWTIE2_BUILD],   [bowtie2-build])
+diff -Naur pigx_chipseq-0.0.53/Makefile.in pigx_chipseq-0.0.53.patched/Makefile.in
+--- pigx_chipseq-0.0.53/Makefile.in	2021-09-28 11:55:05.000000000 +0200
++++ pigx_chipseq-0.0.53.patched/Makefile.in	2021-10-07 14:48:37.195577143 +0200
+@@ -407,7 +407,6 @@
+ PACKAGE_URL = @PACKAGE_URL@
+ PACKAGE_VERSION = @PACKAGE_VERSION@
+ PANDOC = @PANDOC@
+-PANDOC_CITEPROC = @PANDOC_CITEPROC@
+ PATH_SEPARATOR = @PATH_SEPARATOR@
+ PERL = @PERL@
+ PYTHON = @PYTHON@
+diff -Naur pigx_chipseq-0.0.53/pigx-common/common/pigx-runner.in pigx_chipseq-0.0.53.patched/pigx-common/common/pigx-runner.in
+--- pigx_chipseq-0.0.53/pigx-common/common/pigx-runner.in	2021-09-27 18:16:42.000000000 +0200
++++ pigx_chipseq-0.0.53.patched/pigx-common/common/pigx-runner.in	2021-10-07 14:48:44.200788218 +0200
+@@ -379,7 +379,6 @@
+     if path.exists(bin): shutil.rmtree(bin)
+     os.makedirs(bin, exist_ok=True)
+     os.symlink('@PANDOC@', path.join(bin, "pandoc"))
+-    os.symlink('@PANDOC_CITEPROC@', path.join(bin, "pandoc-citeproc"))
+     os.symlink('@RSCRIPT@', path.join(bin, "Rscript"))
+     os.environ['PATH'] = path.abspath(bin) + ":" + os.environ['PATH']
+     os.environ['PIGX_PATH'] = path.abspath(bin) + ":" + os.environ['PATH']
diff --git a/gnu/packages/patches/pigx-rnaseq-no-citeproc.patch b/gnu/packages/patches/pigx-rnaseq-no-citeproc.patch
new file mode 100644
index 0000000000..366ae3890a
--- /dev/null
+++ b/gnu/packages/patches/pigx-rnaseq-no-citeproc.patch
@@ -0,0 +1,33 @@
+diff -Naur pigx_rnaseq-0.0.19/configure.ac pigx_rnaseq-0.0.19.patched/configure.ac
+--- pigx_rnaseq-0.0.19/configure.ac	2021-07-23 14:01:00.304391428 +0200
++++ pigx_rnaseq-0.0.19.patched/configure.ac	2021-10-06 13:51:29.512960106 +0200
+@@ -38,7 +38,6 @@
+ find_or_override_prog([GNUBASH],         [bash])
+ find_or_override_prog([SNAKEMAKE],       [snakemake])
+ find_or_override_prog([PANDOC],          [pandoc])
+-find_or_override_prog([PANDOC_CITEPROC], [pandoc-citeproc])
+ find_or_override_prog([STAR],            [STAR])
+ find_or_override_prog([HISAT2],          [hisat2])
+ find_or_override_prog([HISAT2_BUILD],    [hisat2-build])
+diff -Naur pigx_rnaseq-0.0.19/Makefile.in pigx_rnaseq-0.0.19.patched/Makefile.in
+--- pigx_rnaseq-0.0.19/Makefile.in	2021-08-13 13:40:10.402922844 +0200
++++ pigx_rnaseq-0.0.19.patched/Makefile.in	2021-10-06 13:51:04.052247524 +0200
+@@ -410,7 +410,6 @@
+ PACKAGE_URL = @PACKAGE_URL@
+ PACKAGE_VERSION = @PACKAGE_VERSION@
+ PANDOC = @PANDOC@
+-PANDOC_CITEPROC = @PANDOC_CITEPROC@
+ PATH_SEPARATOR = @PATH_SEPARATOR@
+ PYTHON = @PYTHON@
+ PYTHONPATH = @PYTHONPATH@
+diff -Naur pigx_rnaseq-0.0.19/pigx-common/common/pigx-runner.in pigx_rnaseq-0.0.19.patched/pigx-common/common/pigx-runner.in
+--- pigx_rnaseq-0.0.19/pigx-common/common/pigx-runner.in	2021-08-13 13:27:50.494352532 +0200
++++ pigx_rnaseq-0.0.19.patched/pigx-common/common/pigx-runner.in	2021-10-06 13:51:38.798220108 +0200
+@@ -379,7 +379,6 @@
+     if path.exists(bin): shutil.rmtree(bin)
+     os.makedirs(bin, exist_ok=True)
+     os.symlink('@PANDOC@', path.join(bin, "pandoc"))
+-    os.symlink('@PANDOC_CITEPROC@', path.join(bin, "pandoc-citeproc"))
+     os.symlink('@RSCRIPT@', path.join(bin, "Rscript"))
+     os.environ['PATH'] = path.abspath(bin) + ":" + os.environ['PATH']
+     os.environ['PIGX_PATH'] = path.abspath(bin) + ":" + os.environ['PATH']
diff --git a/gnu/packages/patches/pigx-sars-cov2-ww-no-citeproc.patch b/gnu/packages/patches/pigx-sars-cov2-ww-no-citeproc.patch
new file mode 100644
index 0000000000..3f34bca6b2
--- /dev/null
+++ b/gnu/packages/patches/pigx-sars-cov2-ww-no-citeproc.patch
@@ -0,0 +1,33 @@
+diff -Naur pigx_sars-cov2-ww-0.0.3/configure.ac pigx_sars-cov2-ww-0.0.3.patched/configure.ac
+--- pigx_sars-cov2-ww-0.0.3/configure.ac	2021-06-10 10:12:00.552889984 +0200
++++ pigx_sars-cov2-ww-0.0.3.patched/configure.ac	2021-10-05 14:52:32.318695129 +0200
+@@ -50,7 +50,6 @@
+ find_or_override_prog([MULTIQC],         [multiqc])
+ find_or_override_prog([WGET],            [wget])
+ find_or_override_prog([PANDOC],          [pandoc])
+-find_or_override_prog([PANDOC_CITEPROC], [pandoc-citeproc])
+ 
+ AC_ARG_ENABLE([r-packages-check],
+   AS_HELP_STRING([--disable-r-packages-check], [Do not check any R packages.]),
+diff -Naur pigx_sars-cov2-ww-0.0.3/Makefile.in pigx_sars-cov2-ww-0.0.3.patched/Makefile.in
+--- pigx_sars-cov2-ww-0.0.3/Makefile.in	2021-08-05 16:33:59.164123383 +0200
++++ pigx_sars-cov2-ww-0.0.3.patched/Makefile.in	2021-10-05 14:52:41.272958547 +0200
+@@ -402,7 +402,6 @@
+ PACKAGE_URL = @PACKAGE_URL@
+ PACKAGE_VERSION = @PACKAGE_VERSION@
+ PANDOC = @PANDOC@
+-PANDOC_CITEPROC = @PANDOC_CITEPROC@
+ PATH_SEPARATOR = @PATH_SEPARATOR@
+ PRINSEQ = @PRINSEQ@
+ PYTHON = @PYTHON@
+diff -Naur pigx_sars-cov2-ww-0.0.3/pigx-common/common/pigx-runner.in pigx_sars-cov2-ww-0.0.3.patched/pigx-common/common/pigx-runner.in
+--- pigx_sars-cov2-ww-0.0.3/pigx-common/common/pigx-runner.in	2021-07-30 11:10:17.913115902 +0200
++++ pigx_sars-cov2-ww-0.0.3.patched/pigx-common/common/pigx-runner.in	2021-10-05 14:52:23.602438714 +0200
+@@ -379,7 +379,6 @@
+     if path.exists(bin): shutil.rmtree(bin)
+     os.makedirs(bin, exist_ok=True)
+     os.symlink('@PANDOC@', path.join(bin, "pandoc"))
+-    os.symlink('@PANDOC_CITEPROC@', path.join(bin, "pandoc-citeproc"))
+     os.symlink('@RSCRIPT@', path.join(bin, "Rscript"))
+     os.environ['PATH'] = path.abspath(bin) + ":" + os.environ['PATH']
+     os.environ['PIGX_PATH'] = path.abspath(bin) + ":" + os.environ['PATH']
diff --git a/gnu/packages/patches/pigx-scrnaseq-no-citeproc.patch b/gnu/packages/patches/pigx-scrnaseq-no-citeproc.patch
new file mode 100644
index 0000000000..4cce33fb01
--- /dev/null
+++ b/gnu/packages/patches/pigx-scrnaseq-no-citeproc.patch
@@ -0,0 +1,33 @@
+diff -Naur pigx_scrnaseq-1.1.7/configure.ac pigx_scrnaseq-1.1.7.patched/configure.ac
+--- pigx_scrnaseq-1.1.7/configure.ac	2020-03-17 14:37:46.000000000 +0100
++++ pigx_scrnaseq-1.1.7.patched/configure.ac	2021-10-06 13:55:49.779271317 +0200
+@@ -43,7 +43,6 @@
+ find_or_override_prog([GNUBASH],         [bash])
+ find_or_override_prog([SNAKEMAKE],       [snakemake])
+ find_or_override_prog([PANDOC],          [pandoc])
+-find_or_override_prog([PANDOC_CITEPROC], [pandoc-citeproc])
+ find_or_override_prog([FASTQC],          [fastqc])
+ find_or_override_prog([STAR],            [STAR])
+ find_or_override_prog([SAMTOOLS],        [samtools])
+diff -Naur pigx_scrnaseq-1.1.7/Makefile.in pigx_scrnaseq-1.1.7.patched/Makefile.in
+--- pigx_scrnaseq-1.1.7/Makefile.in	2020-11-30 16:55:48.000000000 +0100
++++ pigx_scrnaseq-1.1.7.patched/Makefile.in	2021-10-06 13:55:52.224340194 +0200
+@@ -395,7 +395,6 @@
+ PACKAGE_URL = @PACKAGE_URL@
+ PACKAGE_VERSION = @PACKAGE_VERSION@
+ PANDOC = @PANDOC@
+-PANDOC_CITEPROC = @PANDOC_CITEPROC@
+ PATH_SEPARATOR = @PATH_SEPARATOR@
+ PERL = @PERL@
+ PYTHON = @PYTHON@
+diff -Naur pigx_scrnaseq-1.1.7/pigx-scrnaseq.in pigx_scrnaseq-1.1.7.patched/pigx-scrnaseq.in
+--- pigx_scrnaseq-1.1.7/pigx-scrnaseq.in	2020-11-30 16:08:55.000000000 +0100
++++ pigx_scrnaseq-1.1.7.patched/pigx-scrnaseq.in	2021-10-06 13:55:47.889218079 +0200
+@@ -274,7 +274,6 @@
+     if path.exists(bin): shutil.rmtree(bin)
+     os.makedirs(bin, exist_ok=True)
+     os.symlink('@PANDOC@', path.join(bin, "pandoc"))
+-    os.symlink('@PANDOC_CITEPROC@', path.join(bin, "pandoc-citeproc"))
+     os.symlink('@RSCRIPT@', path.join(bin, "Rscript"))
+     os.environ['PATH'] = path.abspath(bin) + ":" + os.environ['PATH']
+     os.environ['PIGX_PATH'] = path.abspath(bin) + ":" + os.environ['PATH']
diff --git a/gnu/packages/patches/pipewire-0.2.7-fno-common.patch b/gnu/packages/patches/pipewire-0.2.7-fno-common.patch
new file mode 100644
index 0000000000..f7d9b25932
--- /dev/null
+++ b/gnu/packages/patches/pipewire-0.2.7-fno-common.patch
@@ -0,0 +1,51 @@
+Fixes 'multiple definition errors' when building with GCC 10+
+
+From: https://bugs.gentoo.org/710796
+Originally from: https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/a62e41e
+and https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/7a976c7
+
+--- a/spa/plugins/bluez5/a2dp-codecs.h
++++ b/spa/plugins/bluez5/a2dp-codecs.h
+@@ -284,15 +284,15 @@
+         }
+ }
+ 
+-const a2dp_sbc_t bluez_a2dp_sbc;
++extern const a2dp_sbc_t bluez_a2dp_sbc;
+ #if ENABLE_MP3
+-const a2dp_mpeg_t bluez_a2dp_mpeg;
++extern const a2dp_mpeg_t bluez_a2dp_mpeg;
+ #endif
+ #if ENABLE_AAC
+-const a2dp_aac_t bluez_a2dp_aac;
++extern const a2dp_aac_t bluez_a2dp_aac;
+ #endif
+ #if ENABLE_APTX
+-const a2dp_aptx_t bluez_a2dp_aptx;
++extern const a2dp_aptx_t bluez_a2dp_aptx;
+ #endif
+ 
+ #endif
+--- a/spa/plugins/bluez5/bluez5-monitor.c
++++ b/spa/plugins/bluez5/bluez5-monitor.c
+@@ -75,7 +75,7 @@
+ 	struct spa_list transport_list;
+ };
+ 
+-struct spa_handle_factory spa_a2dp_sink_factory;
++extern struct spa_handle_factory spa_a2dp_sink_factory;
+ 
+ static void fill_item(struct spa_bt_monitor *this, struct spa_bt_transport *transport,
+ 		struct spa_pod **result, struct spa_pod_builder *builder)
+--- a/spa/plugins/bluez5/meson.build
++++ b/spa/plugins/bluez5/meson.build
+@@ -1,7 +1,8 @@
+ 
+ bluez5_sources = ['plugin.c',
+ 		  'a2dp-sink.c',
+-                  'bluez5-monitor.c']
++		  'a2dp-codecs.c',
++		  'bluez5-monitor.c']
+ 
+ bluez5lib = shared_library('spa-bluez5',
+ 	bluez5_sources,
diff --git a/gnu/packages/patches/pitivi-fix-build-with-meson-0.60.patch b/gnu/packages/patches/pitivi-fix-build-with-meson-0.60.patch
new file mode 100644
index 0000000000..652a86bff7
--- /dev/null
+++ b/gnu/packages/patches/pitivi-fix-build-with-meson-0.60.patch
@@ -0,0 +1,46 @@
+From b54da52289f9578d7021f466d731cfd48330e5fe Mon Sep 17 00:00:00 2001
+From: Leo Famulari <leo@famulari.name>
+Date: Thu, 25 Nov 2021 18:56:44 -0500
+Subject: [PATCH] Fix build with Meson 0.60.
+
+https://gitlab.gnome.org/GNOME/pitivi/-/issues/2593
+
+* data/meson.build: Adjust to changes in Meson 0.60.
+---
+ data/meson.build | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/data/meson.build b/data/meson.build
+index 2ea82cf..60d2316 100644
+--- a/data/meson.build
++++ b/data/meson.build
+@@ -6,7 +6,7 @@ install_subdir('audiopresets', install_dir: pkgdatadir)
+ install_subdir('videopresets', install_dir: pkgdatadir)
+ install_subdir('gstpresets', install_dir: pkgdatadir)
+ 
+-desktop_file = i18n.merge_file('org.pitivi.Pitivi.desktop',
++desktop_file = i18n.merge_file(
+     type: 'desktop',
+     output : 'org.pitivi.Pitivi.desktop',
+     input : 'org.pitivi.Pitivi.desktop.in',
+@@ -25,7 +25,7 @@ if desktop_file_validate.found()
+   )
+ endif
+ 
+-appdata_file = i18n.merge_file('org.pitivi.Pitivi.appdata.xml',
++appdata_file = i18n.merge_file(
+     type: 'xml',
+     output : 'org.pitivi.Pitivi.appdata.xml',
+     input : 'org.pitivi.Pitivi.appdata.xml.in',
+@@ -43,7 +43,7 @@ if appstream_util.found()
+   )
+ endif
+ 
+-i18n.merge_file('org.pitivi.Pitivi-mime.xml',
++i18n.merge_file(
+     output : 'org.pitivi.Pitivi-mime.xml',
+     input : 'org.pitivi.Pitivi-mime.xml.in',
+     po_dir: podir,
+-- 
+2.33.1
+
diff --git a/gnu/packages/patches/pjproject-correct-the-cflags-field.patch b/gnu/packages/patches/pjproject-correct-the-cflags-field.patch
deleted file mode 100644
index 8bc503580d..0000000000
--- a/gnu/packages/patches/pjproject-correct-the-cflags-field.patch
+++ /dev/null
@@ -1,121 +0,0 @@
-From 44f8f6c1c71bec6bf00269b075a2dc801ae6fd45 Mon Sep 17 00:00:00 2001
-From: Vladimir Stoiakin <VStoiakin@lavabit.com>
-Date: Thu, 23 Apr 2020 14:06:40 +0300
-Subject: [PATCH 1/2] libpjproject.pc: correct the field 'cflags'
-
----
- Makefile           | 6 ++----
- aconfigure         | 4 ++++
- aconfigure.ac      | 3 +++
- build.mak.in       | 7 +++----
- libpjproject.pc.in | 4 ++--
- 5 files changed, 14 insertions(+), 10 deletions(-)
-
-diff --git a/Makefile b/Makefile
-index ffaf638dd..3fd5cab40 100644
---- a/Makefile
-+++ b/Makefile
-@@ -132,10 +132,8 @@ install:
- 		sed -e "s!@INCLUDEDIR@!$(includedir)!" | \
- 		sed -e "s!@LIBDIR@!$(libdir)!" | \
- 		sed -e "s/@PJ_VERSION@/$(PJ_VERSION)/" | \
--		sed -e "s!@PJ_LDLIBS@!!" | \
--		sed -e "s!@PJ_LDXXLIBS@!$(PJ_LDXXLIBS)!" | \
--		sed -e "s!@PJ_INSTALL_CFLAGS@!!" | \
--		sed -e "s!@PJ_INSTALL_CXXFLAGS@!$(PJ_INSTALL_CXXFLAGS)!" > $(DESTDIR)/$(libdir)/pkgconfig/libpjproject.pc
-+		sed -e "s!@PJ_INSTALL_LDFLAGS@!$(PJ_INSTALL_LDFLAGS)!" | \
-+		sed -e "s!@PJ_INSTALL_CFLAGS@!$(PJ_INSTALL_CFLAGS)!" > $(DESTDIR)/$(libdir)/pkgconfig/libpjproject.pc
- 
- uninstall:
- 	$(RM) $(DESTDIR)$(libdir)/pkgconfig/libpjproject.pc
-diff --git a/aconfigure b/aconfigure
-index 2abbcf533..1ab932bda 100755
---- a/aconfigure
-+++ b/aconfigure
-@@ -706,6 +706,7 @@ GREP
- CPP
- ac_cross_compile
- ac_shlib_suffix
-+ac_cflags
- ac_build_mak_vars
- ac_pjdir
- CC_CFLAGS
-@@ -3952,6 +3953,7 @@ if test "$CC_CFLAGS" = ""; then CC_CFLAGS="-Wall"; fi
- 
- 
- 
-+
- case $host in
-     *mingw* | *cygw* | *win32* | *w32* )
- 	if pwd -W 2&> /dev/null; then
-@@ -5138,8 +5140,10 @@ $as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
- 
- if test "x$ac_cv_c_bigendian" = "xyes"; then
-   CFLAGS="$CFLAGS -DPJ_IS_BIG_ENDIAN=1 -DPJ_IS_LITTLE_ENDIAN=0"
-+  ac_cflags="$ac_cflags -DPJ_IS_BIG_ENDIAN=1 -DPJ_IS_LITTLE_ENDIAN=0"
- else
-   CFLAGS="$CFLAGS -DPJ_IS_BIG_ENDIAN=0 -DPJ_IS_LITTLE_ENDIAN=1"
-+  ac_cflags="$ac_cflags -DPJ_IS_BIG_ENDIAN=0 -DPJ_IS_LITTLE_ENDIAN=1"
- fi
- 
- 
-diff --git a/aconfigure.ac b/aconfigure.ac
-index 83d3559ed..b1d493c08 100644
---- a/aconfigure.ac
-+++ b/aconfigure.ac
-@@ -71,6 +71,7 @@ AC_SUBST(CC_CFLAGS)
- 
- AC_SUBST(ac_pjdir)
- AC_SUBST(ac_build_mak_vars)
-+AC_SUBST(ac_cflags)
- 
- case $host in 
-     *mingw* | *cygw* | *win32* | *w32* )
-@@ -144,8 +145,10 @@ AC_C_BIGENDIAN
- 
- if test "x$ac_cv_c_bigendian" = "xyes"; then
-   CFLAGS="$CFLAGS -DPJ_IS_BIG_ENDIAN=1 -DPJ_IS_LITTLE_ENDIAN=0"
-+  ac_cflags="$ac_cflags -DPJ_IS_BIG_ENDIAN=1 -DPJ_IS_LITTLE_ENDIAN=0"
- else
-   CFLAGS="$CFLAGS -DPJ_IS_BIG_ENDIAN=0 -DPJ_IS_LITTLE_ENDIAN=1"
-+  ac_cflags="$ac_cflags -DPJ_IS_BIG_ENDIAN=0 -DPJ_IS_LITTLE_ENDIAN=1"
- fi
- 
- dnl
-diff --git a/build.mak.in b/build.mak.in
-index abc0c4fa0..a9078bb25 100644
---- a/build.mak.in
-+++ b/build.mak.in
-@@ -299,7 +299,7 @@ export APP_LDXXLIBS := $(PJSUA2_LIB_LDLIB) \
- 	-lstdc++ \
- 	$(APP_LDLIBS)
- 
--# Here are the variabels to use if application is using the library
-+# Here are the variables to use if application is using the library
- # from within the source distribution
- export PJ_CC := $(APP_CC)
- export PJ_CXX := $(APP_CXX)
-@@ -317,6 +317,5 @@ export PJ_LIBXX_FILES := $(APP_LIBXX_FILES)
- export PJ_INSTALL_DIR := @prefix@
- export PJ_INSTALL_INC_DIR := @includedir@
- export PJ_INSTALL_LIB_DIR := @libdir@
--export PJ_INSTALL_CFLAGS := -I$(PJ_INSTALL_INC_DIR) -DPJ_AUTOCONF=1 @CFLAGS@
--export PJ_INSTALL_CXXFLAGS := @CXXFLAGS@ $(PJ_INSTALL_CFLAGS)
--export PJ_INSTALL_LDFLAGS := -L$(PJ_INSTALL_LIB_DIR) $(APP_LDLIBS)
-+export PJ_INSTALL_CFLAGS := -I$(PJ_INSTALL_INC_DIR) -DPJ_AUTOCONF=1 @ac_cflags@
-+export PJ_INSTALL_LDFLAGS := -L$(PJ_INSTALL_LIB_DIR) $(APP_LDXXLIBS)
-diff --git a/libpjproject.pc.in b/libpjproject.pc.in
-index fa8d39114..30ea05c07 100644
---- a/libpjproject.pc.in
-+++ b/libpjproject.pc.in
-@@ -9,5 +9,5 @@ Name: libpjproject
- Description: Multimedia communication library
- URL: http://www.pjsip.org
- Version: @PJ_VERSION@
--Libs: -L${libdir} @PJ_LDXXLIBS@
--Cflags: -I${includedir} @PJ_INSTALL_CXXFLAGS@
-+Libs: @PJ_INSTALL_LDFLAGS@
-+Cflags: @PJ_INSTALL_CFLAGS@
--- 
-2.27.0
-
diff --git a/gnu/packages/patches/pjproject-fix-pkg-config-ldflags.patch b/gnu/packages/patches/pjproject-fix-pkg-config-ldflags.patch
deleted file mode 100644
index 1199d82f1e..0000000000
--- a/gnu/packages/patches/pjproject-fix-pkg-config-ldflags.patch
+++ /dev/null
@@ -1,79 +0,0 @@
-From 9bcba7fb28055550961b134e517b695a8cd05b2a Mon Sep 17 00:00:00 2001
-From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
-Date: Mon, 3 Aug 2020 17:43:19 -0400
-Subject: [PATCH] libpjproject.pc: Move external libraries to Libs.private.
-
-This is done so users of a shared pjproject library do not get link
-directives (provided via pkg-config file of pjproject) to link against
-pjproject's own library dependencies.
-
-Static linking with pjproject is preserved by moving the external
-libraries link directives to the Libs.private field, which is
-specifically intended for this purpose, via for example:
-
-  $ pkg-config --static --libs libpjproject
-
-* build.mak.in (PJ_INSTALL_LDFLAGS_PRIVATE): New variable.
-(PJ_INSTALL_LDFLAGS): Filter out PJ_INSTALL_LDFLAGS_PRIVATE entries.
-* libpjproject.pc.in (Libs.private): New field.
-* Makefile: Substitute PJ_INSTALL_LDFLAGS_PRIVATE as the value for the
-Libs.private field.
----
- Makefile           | 5 +++--
- build.mak.in       | 3 ++-
- libpjproject.pc.in | 1 +
- 3 files changed, 6 insertions(+), 3 deletions(-)
-
-diff --git a/Makefile b/Makefile
-index 3fd5cab40..d67badfa4 100644
---- a/Makefile
-+++ b/Makefile
-@@ -54,14 +54,14 @@ doc:
- 		    exit 1; \
- 		fi; \
- 	done
--	
-+
- LIBS = 	pjlib/lib/libpj-$(TARGET_NAME).a \
- 	pjlib-util/lib/libpjlib-util-$(TARGET_NAME).a \
- 	pjnath/lib/libpjnath-$(TARGET_NAME).a \
- 	pjmedia/lib/libpjmedia-$(TARGET_NAME).a \
- 	pjmedia/lib/libpjmedia-audiodev-$(TARGET_NAME).a \
- 	pjmedia/lib/libpjmedia-codec-$(TARGET_NAME).a \
--    	pjsip/lib/libpjsip-$(TARGET_NAME).a \
-+	pjsip/lib/libpjsip-$(TARGET_NAME).a \
- 	pjsip/lib/libpjsip-ua-$(TARGET_NAME).a \
- 	pjsip/lib/libpjsip-simple-$(TARGET_NAME).a \
- 	pjsip/lib/libpjsua-$(TARGET_NAME).a
-@@ -133,6 +133,7 @@ install:
- 		sed -e "s!@LIBDIR@!$(libdir)!" | \
- 		sed -e "s/@PJ_VERSION@/$(PJ_VERSION)/" | \
- 		sed -e "s!@PJ_INSTALL_LDFLAGS@!$(PJ_INSTALL_LDFLAGS)!" | \
-+		sed -e "s!@PJ_INSTALL_LDFLAGS_PRIVATE@!$(PJ_INSTALL_LDFLAGS_PRIVATE)!" | \
- 		sed -e "s!@PJ_INSTALL_CFLAGS@!$(PJ_INSTALL_CFLAGS)!" > $(DESTDIR)/$(libdir)/pkgconfig/libpjproject.pc
- 
- uninstall:
-diff --git a/build.mak.in b/build.mak.in
-index a9078bb25..1a18a8513 100644
---- a/build.mak.in
-+++ b/build.mak.in
-@@ -318,4 +318,5 @@ export PJ_INSTALL_DIR := @prefix@
- export PJ_INSTALL_INC_DIR := @includedir@
- export PJ_INSTALL_LIB_DIR := @libdir@
- export PJ_INSTALL_CFLAGS := -I$(PJ_INSTALL_INC_DIR) -DPJ_AUTOCONF=1 @ac_cflags@
--export PJ_INSTALL_LDFLAGS := -L$(PJ_INSTALL_LIB_DIR) $(APP_LDXXLIBS)
-+export PJ_INSTALL_LDFLAGS_PRIVATE := $(APP_THIRD_PARTY_LIBS) $(APP_THIRD_PARTY_EXT) @LIBS@
-+export PJ_INSTALL_LDFLAGS := -L$(PJ_INSTALL_LIB_DIR) $(filter-out $(PJ_INSTALL_LDFLAGS_PRIVATE),$(APP_LDXXLIBS))
-diff --git a/libpjproject.pc.in b/libpjproject.pc.in
-index 30ea05c07..4372d5016 100644
---- a/libpjproject.pc.in
-+++ b/libpjproject.pc.in
-@@ -10,4 +10,5 @@ Description: Multimedia communication library
- URL: http://www.pjsip.org
- Version: @PJ_VERSION@
- Libs: @PJ_INSTALL_LDFLAGS@
-+Libs.private: @PJ_INSTALL_LDFLAGS_PRIVATE@
- Cflags: @PJ_INSTALL_CFLAGS@
--- 
-2.27.0
-
diff --git a/gnu/packages/patches/pjproject-install-libpjsua2.patch b/gnu/packages/patches/pjproject-install-libpjsua2.patch
new file mode 100644
index 0000000000..ef9b0de91f
--- /dev/null
+++ b/gnu/packages/patches/pjproject-install-libpjsua2.patch
@@ -0,0 +1,19 @@
+# Retrieved from upstream:
+# https://github.com/pjsip/pjproject/commit/742f7dc252ded778a8b677937791c02e2fbc0dde
+diff --git a/Makefile b/Makefile
+index 31a6d39d4..74e246a44 100644
+--- a/Makefile
++++ b/Makefile
+@@ -121,9 +121,10 @@ cmp_wav:
+ 
+ install:
+ 	mkdir -p $(DESTDIR)$(libdir)/
+-	cp -af $(APP_LIB_FILES) $(DESTDIR)$(libdir)/
+ 	if [ "$(PJ_EXCLUDE_PJSUA2)x" = "x" ] ; then \
+-	    cp -af $(PJ_DIR)/pjsip/lib/libpjsua2-$(LIB_SUFFIX) $(DESTDIR)$(libdir)/; \
++	    cp -af $(APP_LIBXX_FILES) $(DESTDIR)$(libdir)/; \
++	else \
++	    cp -af $(APP_LIB_FILES) $(DESTDIR)$(libdir)/; \
+ 	fi
+ 	mkdir -p $(DESTDIR)$(includedir)/
+ 	for d in pjlib pjlib-util pjnath pjmedia pjsip; do \
diff --git a/gnu/packages/patches/polkit-configure-elogind.patch b/gnu/packages/patches/polkit-configure-elogind.patch
new file mode 100644
index 0000000000..8fefb7a0c2
--- /dev/null
+++ b/gnu/packages/patches/polkit-configure-elogind.patch
@@ -0,0 +1,15 @@
+Even when the polkit configure script detects elogind, it does not use
+it.  This patch ensures that elogind is used when it is detected.
+
+diff -ruN a/configure b/configure
+--- a/configure	1969-12-31 19:00:01.000000000 -0500
++++ b/configure	2021-11-19 00:04:55.581385020 -0500
+@@ -20390,7 +20390,7 @@
+ 
+ 
+ 
+- if test "$have_libsystemd" = "yes"; then
++ if test "$have_libsystemd" = "yes" || test "$have_libelogind" = "yes"; then
+   HAVE_LIBSYSTEMD_TRUE=
+   HAVE_LIBSYSTEMD_FALSE='#'
+ else
diff --git a/gnu/packages/patches/polkit-use-duktape.patch b/gnu/packages/patches/polkit-use-duktape.patch
new file mode 100644
index 0000000000..4eaa7963c2
--- /dev/null
+++ b/gnu/packages/patches/polkit-use-duktape.patch
@@ -0,0 +1,5030 @@
+From 4f66a9549a393e4d74b93eb85301a04ea94bc750 Mon Sep 17 00:00:00 2001
+From: Wu Xiaotian <yetist@gmail.com>
+Date: Wed, 24 Jul 2019 15:55:17 +0800
+Subject: [PATCH 01/16] Add duktape as javascript engine.
+
+Signed-off-by: Gustavo Lima Chaves <gustavo.chaves@microsoft.com>
+---
+ configure.ac                                  |   28 +-
+ src/polkitbackend/Makefile.am                 |   14 +-
+ .../polkitbackendduktapeauthority.c           | 1402 +++++++++++++++++
+ 3 files changed, 1436 insertions(+), 8 deletions(-)
+ create mode 100644 src/polkitbackend/polkitbackendduktapeauthority.c
+
+diff --git a/configure.ac b/configure.ac
+index e434ca2..5a03593 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -80,11 +80,22 @@ PKG_CHECK_MODULES(GLIB, [gmodule-2.0 gio-unix-2.0 >= 2.30.0])
+ AC_SUBST(GLIB_CFLAGS)
+ AC_SUBST(GLIB_LIBS)
+ 
+-PKG_CHECK_MODULES(LIBJS, [mozjs-78])
+-
+-AC_SUBST(LIBJS_CFLAGS)
+-AC_SUBST(LIBJS_CXXFLAGS)
+-AC_SUBST(LIBJS_LIBS)
++dnl ---------------------------------------------------------------------------
++dnl - Check javascript backend
++dnl ---------------------------------------------------------------------------
++AC_ARG_WITH(duktape, AS_HELP_STRING([--with-duktape],[Use Duktape as javascript backend]),with_duktape=yes,with_duktape=no)
++AS_IF([test x${with_duktape} == xyes], [
++  PKG_CHECK_MODULES(LIBJS, [duktape >= 2.0.0 ])
++  AC_SUBST(LIBJS_CFLAGS)
++  AC_SUBST(LIBJS_LIBS)
++], [
++  PKG_CHECK_MODULES(LIBJS, [mozjs-78])
++
++  AC_SUBST(LIBJS_CFLAGS)
++  AC_SUBST(LIBJS_CXXFLAGS)
++  AC_SUBST(LIBJS_LIBS)
++])
++AM_CONDITIONAL(USE_DUKTAPE, [test x$with_duktape == xyes], [Using duktape as javascript engine library])
+ 
+ EXPAT_LIB=""
+ AC_ARG_WITH(expat, [  --with-expat=<dir>      Use expat from here],
+@@ -585,6 +596,13 @@ echo "
+         PAM support:                ${have_pam}
+         systemdsystemunitdir:       ${systemdsystemunitdir}
+         polkitd user:               ${POLKITD_USER}"
++if test "x${with_duktape}" = xyes; then
++echo "
++        Javascript engine:          Duktape"
++else
++echo "
++        Javascript engine:          Mozjs"
++fi
+ 
+ if test "$have_pam" = yes ; then
+ echo "
+diff --git a/src/polkitbackend/Makefile.am b/src/polkitbackend/Makefile.am
+index 7e3c080..abcbc6f 100644
+--- a/src/polkitbackend/Makefile.am
++++ b/src/polkitbackend/Makefile.am
+@@ -33,7 +33,7 @@ libpolkit_backend_1_la_SOURCES =                                   			\
+ 	polkitbackendprivate.h								\
+ 	polkitbackendauthority.h		polkitbackendauthority.c		\
+ 	polkitbackendinteractiveauthority.h	polkitbackendinteractiveauthority.c	\
+-	polkitbackendjsauthority.h		polkitbackendjsauthority.cpp		\
++	polkitbackendjsauthority.h				\
+ 	polkitbackendactionpool.h		polkitbackendactionpool.c		\
+ 	polkitbackendactionlookup.h		polkitbackendactionlookup.c		\
+         $(NULL)
+@@ -51,19 +51,27 @@ libpolkit_backend_1_la_CFLAGS =                                        	\
+         -D_POLKIT_BACKEND_COMPILATION                                  	\
+         $(GLIB_CFLAGS)							\
+ 	$(LIBSYSTEMD_CFLAGS)						\
+-	$(LIBJS_CFLAGS)							\
++	$(LIBJS_CFLAGS)						\
+         $(NULL)
+ 
+ libpolkit_backend_1_la_CXXFLAGS = $(libpolkit_backend_1_la_CFLAGS)
+ 
+ libpolkit_backend_1_la_LIBADD =                               		\
+         $(GLIB_LIBS)							\
++        $(DUKTAPE_LIBS)							\
+ 	$(LIBSYSTEMD_LIBS)						\
+ 	$(top_builddir)/src/polkit/libpolkit-gobject-1.la		\
+ 	$(EXPAT_LIBS)							\
+-	$(LIBJS_LIBS)							\
++	$(LIBJS_LIBS)                                                   \
+         $(NULL)
+ 
++if USE_DUKTAPE
++libpolkit_backend_1_la_SOURCES += polkitbackendduktapeauthority.c
++libpolkit_backend_1_la_LIBADD += -lm
++else
++libpolkit_backend_1_la_SOURCES += polkitbackendjsauthority.cpp
++endif
++
+ rulesdir = $(sysconfdir)/polkit-1/rules.d
+ rules_DATA = 50-default.rules
+ 
+diff --git a/src/polkitbackend/polkitbackendduktapeauthority.c b/src/polkitbackend/polkitbackendduktapeauthority.c
+new file mode 100644
+index 0000000..ae98453
+--- /dev/null
++++ b/src/polkitbackend/polkitbackendduktapeauthority.c
+@@ -0,0 +1,1402 @@
++/*
++ * Copyright (C) 2008-2012 Red Hat, Inc.
++ * Copyright (C) 2015 Tangent Space <jstpierre@mecheye.net>
++ * Copyright (C) 2019 Wu Xiaotian <yetist@gmail.com>
++ *
++ * 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 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.
++ *
++ * Author: David Zeuthen <davidz@redhat.com>
++ */
++
++#include "config.h"
++#include <sys/wait.h>
++#include <errno.h>
++#include <pwd.h>
++#include <grp.h>
++#include <netdb.h>
++#include <string.h>
++#include <glib/gstdio.h>
++#include <locale.h>
++#include <glib/gi18n-lib.h>
++
++#include <polkit/polkit.h>
++#include "polkitbackendjsauthority.h"
++
++#include <polkit/polkitprivate.h>
++
++#ifdef HAVE_LIBSYSTEMD
++#include <systemd/sd-login.h>
++#endif /* HAVE_LIBSYSTEMD */
++
++#include "initjs.h" /* init.js */
++#include "duktape.h"
++
++/**
++ * SECTION:polkitbackendjsauthority
++ * @title: PolkitBackendJsAuthority
++ * @short_description: JS Authority
++ * @stability: Unstable
++ *
++ * An implementation of #PolkitBackendAuthority that reads and
++ * evalates Javascript files and supports interaction with
++ * authentication agents (virtue of being based on
++ * #PolkitBackendInteractiveAuthority).
++ */
++
++/* ---------------------------------------------------------------------------------------------------- */
++
++struct _PolkitBackendJsAuthorityPrivate
++{
++  gchar **rules_dirs;
++  GFileMonitor **dir_monitors; /* NULL-terminated array of GFileMonitor instances */
++  duk_context *cx;
++};
++
++#define WATCHDOG_TIMEOUT (15 * G_TIME_SPAN_SECOND)
++
++static void utils_spawn (const gchar *const  *argv,
++                         guint                timeout_seconds,
++                         GCancellable        *cancellable,
++                         GAsyncReadyCallback  callback,
++                         gpointer             user_data);
++
++gboolean utils_spawn_finish (GAsyncResult   *res,
++                             gint           *out_exit_status,
++                             gchar         **out_standard_output,
++                             gchar         **out_standard_error,
++                             GError        **error);
++
++static void on_dir_monitor_changed (GFileMonitor     *monitor,
++                                    GFile            *file,
++                                    GFile            *other_file,
++                                    GFileMonitorEvent event_type,
++                                    gpointer          user_data);
++
++/* ---------------------------------------------------------------------------------------------------- */
++
++enum
++{
++  PROP_0,
++  PROP_RULES_DIRS,
++};
++
++/* ---------------------------------------------------------------------------------------------------- */
++
++static GList *polkit_backend_js_authority_get_admin_auth_identities (PolkitBackendInteractiveAuthority *authority,
++                                                                     PolkitSubject                     *caller,
++                                                                     PolkitSubject                     *subject,
++                                                                     PolkitIdentity                    *user_for_subject,
++                                                                     gboolean                           subject_is_local,
++                                                                     gboolean                           subject_is_active,
++                                                                     const gchar                       *action_id,
++                                                                     PolkitDetails                     *details);
++
++static PolkitImplicitAuthorization polkit_backend_js_authority_check_authorization_sync (
++                                                          PolkitBackendInteractiveAuthority *authority,
++                                                          PolkitSubject                     *caller,
++                                                          PolkitSubject                     *subject,
++                                                          PolkitIdentity                    *user_for_subject,
++                                                          gboolean                           subject_is_local,
++                                                          gboolean                           subject_is_active,
++                                                          const gchar                       *action_id,
++                                                          PolkitDetails                     *details,
++                                                          PolkitImplicitAuthorization        implicit);
++
++G_DEFINE_TYPE (PolkitBackendJsAuthority, polkit_backend_js_authority, POLKIT_BACKEND_TYPE_INTERACTIVE_AUTHORITY);
++
++/* ---------------------------------------------------------------------------------------------------- */
++
++/* ---------------------------------------------------------------------------------------------------- */
++
++static void
++polkit_backend_js_authority_init (PolkitBackendJsAuthority *authority)
++{
++  authority->priv = G_TYPE_INSTANCE_GET_PRIVATE (authority,
++                                                 POLKIT_BACKEND_TYPE_JS_AUTHORITY,
++                                                 PolkitBackendJsAuthorityPrivate);
++}
++
++static gint
++rules_file_name_cmp (const gchar *a,
++                     const gchar *b)
++{
++  gint ret;
++  const gchar *a_base;
++  const gchar *b_base;
++
++  a_base = strrchr (a, '/');
++  b_base = strrchr (b, '/');
++
++  g_assert (a_base != NULL);
++  g_assert (b_base != NULL);
++  a_base += 1;
++  b_base += 1;
++
++  ret = g_strcmp0 (a_base, b_base);
++  if (ret == 0)
++    {
++      /* /etc wins over /usr */
++      ret = g_strcmp0 (a, b);
++      g_assert (ret != 0);
++    }
++
++  return ret;
++}
++
++static void
++load_scripts (PolkitBackendJsAuthority  *authority)
++{
++  duk_context *cx = authority->priv->cx;
++  GList *files = NULL;
++  GList *l;
++  guint num_scripts = 0;
++  GError *error = NULL;
++  guint n;
++
++  files = NULL;
++
++  for (n = 0; authority->priv->rules_dirs != NULL && authority->priv->rules_dirs[n] != NULL; n++)
++    {
++      const gchar *dir_name = authority->priv->rules_dirs[n];
++      GDir *dir = NULL;
++
++      polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
++                                    "Loading rules from directory %s",
++                                    dir_name);
++
++      dir = g_dir_open (dir_name,
++                        0,
++                        &error);
++      if (dir == NULL)
++        {
++          polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
++                                        "Error opening rules directory: %s (%s, %d)",
++                                        error->message, g_quark_to_string (error->domain), error->code);
++          g_clear_error (&error);
++        }
++      else
++        {
++          const gchar *name;
++          while ((name = g_dir_read_name (dir)) != NULL)
++            {
++              if (g_str_has_suffix (name, ".rules"))
++                files = g_list_prepend (files, g_strdup_printf ("%s/%s", dir_name, name));
++            }
++          g_dir_close (dir);
++        }
++    }
++
++  files = g_list_sort (files, (GCompareFunc) rules_file_name_cmp);
++
++  for (l = files; l != NULL; l = l->next)
++    {
++      const gchar *filename = l->data;
++
++#if (DUK_VERSION >= 20000)
++      gchar *contents;
++      gsize length;
++      GError *error = NULL;
++      if (!g_file_get_contents (filename, &contents, &length, &error)){
++        g_warning("Error when file contents of %s: %s\n", filename, error->message);
++        g_error_free (error);
++        continue;
++      }
++      if (duk_peval_lstring_noresult(cx, contents,length) != 0)
++#else
++      if (duk_peval_file_noresult (cx, filename) != 0)
++#endif
++        {
++          polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
++                                        "Error compiling script %s: %s",
++                                        filename, duk_safe_to_string (authority->priv->cx, -1));
++#if (DUK_VERSION >= 20000)
++          g_free (contents);
++#endif
++          continue;
++        }
++#if (DUK_VERSION >= 20000)
++      g_free (contents);
++#endif
++      num_scripts++;
++    }
++
++  polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
++                                "Finished loading, compiling and executing %d rules",
++                                num_scripts);
++  g_list_free_full (files, g_free);
++}
++
++static void
++reload_scripts (PolkitBackendJsAuthority *authority)
++{
++  duk_context *cx = authority->priv->cx;
++
++  duk_set_top (cx, 0);
++  duk_get_global_string (cx, "polkit");
++  duk_push_string (cx, "_deleteRules");
++
++  duk_call_prop (cx, 0, 0);
++
++  polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
++                                "Collecting garbage unconditionally...");
++
++  load_scripts (authority);
++
++  /* Let applications know we have new rules... */
++  g_signal_emit_by_name (authority, "changed");
++}
++
++static void
++on_dir_monitor_changed (GFileMonitor     *monitor,
++                        GFile            *file,
++                        GFile            *other_file,
++                        GFileMonitorEvent event_type,
++                        gpointer          user_data)
++{
++  PolkitBackendJsAuthority *authority = POLKIT_BACKEND_JS_AUTHORITY (user_data);
++
++  /* TODO: maybe rate-limit so storms of events are collapsed into one with a 500ms resolution?
++   *       Because when editing a file with emacs we get 4-8 events..
++   */
++
++  if (file != NULL)
++    {
++      gchar *name;
++
++      name = g_file_get_basename (file);
++
++      /* g_print ("event_type=%d file=%p name=%s\n", event_type, file, name); */
++      if (!g_str_has_prefix (name, ".") &&
++          !g_str_has_prefix (name, "#") &&
++          g_str_has_suffix (name, ".rules") &&
++          (event_type == G_FILE_MONITOR_EVENT_CREATED ||
++           event_type == G_FILE_MONITOR_EVENT_DELETED ||
++           event_type == G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT))
++        {
++          polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
++                                        "Reloading rules");
++          reload_scripts (authority);
++        }
++      g_free (name);
++    }
++}
++
++
++static void
++setup_file_monitors (PolkitBackendJsAuthority *authority)
++{
++  guint n;
++  GPtrArray *p;
++
++  p = g_ptr_array_new ();
++  for (n = 0; authority->priv->rules_dirs != NULL && authority->priv->rules_dirs[n] != NULL; n++)
++    {
++      GFile *file;
++      GError *error;
++      GFileMonitor *monitor;
++
++      file = g_file_new_for_path (authority->priv->rules_dirs[n]);
++      error = NULL;
++      monitor = g_file_monitor_directory (file,
++                                          G_FILE_MONITOR_NONE,
++                                          NULL,
++                                          &error);
++      g_object_unref (file);
++      if (monitor == NULL)
++        {
++          g_warning ("Error monitoring directory %s: %s",
++                     authority->priv->rules_dirs[n],
++                     error->message);
++          g_clear_error (&error);
++        }
++      else
++        {
++          g_signal_connect (monitor,
++                            "changed",
++                            G_CALLBACK (on_dir_monitor_changed),
++                            authority);
++          g_ptr_array_add (p, monitor);
++        }
++    }
++  g_ptr_array_add (p, NULL);
++  authority->priv->dir_monitors = (GFileMonitor**) g_ptr_array_free (p, FALSE);
++}
++
++static duk_ret_t js_polkit_log (duk_context *cx);
++static duk_ret_t js_polkit_spawn (duk_context *cx);
++static duk_ret_t js_polkit_user_is_in_netgroup (duk_context *cx);
++
++static const duk_function_list_entry js_polkit_functions[] =
++{
++  { "log", js_polkit_log, 1 },
++  { "spawn", js_polkit_spawn, 1 },
++  { "_userIsInNetGroup", js_polkit_user_is_in_netgroup, 2 },
++  { NULL, NULL, 0 },
++};
++
++static void
++polkit_backend_js_authority_constructed (GObject *object)
++{
++  PolkitBackendJsAuthority *authority = POLKIT_BACKEND_JS_AUTHORITY (object);
++  duk_context *cx;
++
++  cx = duk_create_heap (NULL, NULL, NULL, authority, NULL);
++  if (cx == NULL)
++    goto fail;
++
++  authority->priv->cx = cx;
++
++  duk_push_global_object (cx);
++  duk_push_object (cx);
++  duk_put_function_list (cx, -1, js_polkit_functions);
++  duk_put_prop_string (cx, -2, "polkit");
++
++  duk_eval_string (cx, init_js);
++
++  if (authority->priv->rules_dirs == NULL)
++    {
++      authority->priv->rules_dirs = g_new0 (gchar *, 3);
++      authority->priv->rules_dirs[0] = g_strdup (PACKAGE_SYSCONF_DIR "/polkit-1/rules.d");
++      authority->priv->rules_dirs[1] = g_strdup (PACKAGE_DATA_DIR "/polkit-1/rules.d");
++    }
++
++  setup_file_monitors (authority);
++  load_scripts (authority);
++
++  G_OBJECT_CLASS (polkit_backend_js_authority_parent_class)->constructed (object);
++  return;
++
++ fail:
++  g_critical ("Error initializing JavaScript environment");
++  g_assert_not_reached ();
++}
++
++static void
++polkit_backend_js_authority_finalize (GObject *object)
++{
++  PolkitBackendJsAuthority *authority = POLKIT_BACKEND_JS_AUTHORITY (object);
++  guint n;
++
++  for (n = 0; authority->priv->dir_monitors != NULL && authority->priv->dir_monitors[n] != NULL; n++)
++    {
++      GFileMonitor *monitor = authority->priv->dir_monitors[n];
++      g_signal_handlers_disconnect_by_func (monitor,
++                                            G_CALLBACK (on_dir_monitor_changed),
++                                            authority);
++      g_object_unref (monitor);
++    }
++  g_free (authority->priv->dir_monitors);
++  g_strfreev (authority->priv->rules_dirs);
++
++  duk_destroy_heap (authority->priv->cx);
++
++  G_OBJECT_CLASS (polkit_backend_js_authority_parent_class)->finalize (object);
++}
++
++static void
++polkit_backend_js_authority_set_property (GObject      *object,
++                                          guint         property_id,
++                                          const GValue *value,
++                                          GParamSpec   *pspec)
++{
++  PolkitBackendJsAuthority *authority = POLKIT_BACKEND_JS_AUTHORITY (object);
++
++  switch (property_id)
++    {
++      case PROP_RULES_DIRS:
++        g_assert (authority->priv->rules_dirs == NULL);
++        authority->priv->rules_dirs = (gchar **) g_value_dup_boxed (value);
++        break;
++
++      default:
++        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
++        break;
++    }
++}
++
++static const gchar *
++polkit_backend_js_authority_get_name (PolkitBackendAuthority *authority)
++{
++  return "js";
++}
++
++static const gchar *
++polkit_backend_js_authority_get_version (PolkitBackendAuthority *authority)
++{
++  return PACKAGE_VERSION;
++}
++
++static PolkitAuthorityFeatures
++polkit_backend_js_authority_get_features (PolkitBackendAuthority *authority)
++{
++  return POLKIT_AUTHORITY_FEATURES_TEMPORARY_AUTHORIZATION;
++}
++
++static void
++polkit_backend_js_authority_class_init (PolkitBackendJsAuthorityClass *klass)
++{
++  GObjectClass *gobject_class;
++  PolkitBackendAuthorityClass *authority_class;
++  PolkitBackendInteractiveAuthorityClass *interactive_authority_class;
++
++
++  gobject_class = G_OBJECT_CLASS (klass);
++  gobject_class->finalize                               = polkit_backend_js_authority_finalize;
++  gobject_class->set_property                           = polkit_backend_js_authority_set_property;
++  gobject_class->constructed                            = polkit_backend_js_authority_constructed;
++
++  authority_class = POLKIT_BACKEND_AUTHORITY_CLASS (klass);
++  authority_class->get_name                             = polkit_backend_js_authority_get_name;
++  authority_class->get_version                          = polkit_backend_js_authority_get_version;
++  authority_class->get_features                         = polkit_backend_js_authority_get_features;
++
++  interactive_authority_class = POLKIT_BACKEND_INTERACTIVE_AUTHORITY_CLASS (klass);
++  interactive_authority_class->get_admin_identities     = polkit_backend_js_authority_get_admin_auth_identities;
++  interactive_authority_class->check_authorization_sync = polkit_backend_js_authority_check_authorization_sync;
++
++  g_object_class_install_property (gobject_class,
++                                   PROP_RULES_DIRS,
++                                   g_param_spec_boxed ("rules-dirs",
++                                                       NULL,
++                                                       NULL,
++                                                       G_TYPE_STRV,
++                                                       G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE));
++
++
++  g_type_class_add_private (klass, sizeof (PolkitBackendJsAuthorityPrivate));
++}
++
++/* ---------------------------------------------------------------------------------------------------- */
++
++static void
++set_property_str (duk_context *cx,
++                  const gchar *name,
++                  const gchar *value)
++{
++  duk_push_string (cx, value);
++  duk_put_prop_string (cx, -2, name);
++}
++
++static void
++set_property_strv (duk_context *cx,
++                   const gchar *name,
++                   GPtrArray   *value)
++{
++  guint n;
++  duk_push_array (cx);
++  for (n = 0; n < value->len; n++)
++    {
++      duk_push_string (cx, g_ptr_array_index (value, n));
++      duk_put_prop_index (cx, -2, n);
++    }
++  duk_put_prop_string (cx, -2, name);
++}
++
++static void
++set_property_int32 (duk_context *cx,
++                    const gchar *name,
++                    gint32       value)
++{
++  duk_push_int (cx, value);
++  duk_put_prop_string (cx, -2, name);
++}
++
++static void
++set_property_bool (duk_context *cx,
++                   const char  *name,
++                   gboolean     value)
++{
++  duk_push_boolean (cx, value);
++  duk_put_prop_string (cx, -2, name);
++}
++
++/* ---------------------------------------------------------------------------------------------------- */
++
++static gboolean
++push_subject (duk_context               *cx,
++              PolkitSubject             *subject,
++              PolkitIdentity            *user_for_subject,
++              gboolean                   subject_is_local,
++              gboolean                   subject_is_active,
++              GError                   **error)
++{
++  gboolean ret = FALSE;
++  pid_t pid;
++  uid_t uid;
++  gchar *user_name = NULL;
++  GPtrArray *groups = NULL;
++  struct passwd *passwd;
++  char *seat_str = NULL;
++  char *session_str = NULL;
++
++  duk_get_global_string (cx, "Subject");
++  duk_new (cx, 0);
++
++  if (POLKIT_IS_UNIX_PROCESS (subject))
++    {
++      pid = polkit_unix_process_get_pid (POLKIT_UNIX_PROCESS (subject));
++    }
++  else if (POLKIT_IS_SYSTEM_BUS_NAME (subject))
++    {
++      PolkitSubject *process;
++      process = polkit_system_bus_name_get_process_sync (POLKIT_SYSTEM_BUS_NAME (subject), NULL, error);
++      if (process == NULL)
++        goto out;
++      pid = polkit_unix_process_get_pid (POLKIT_UNIX_PROCESS (process));
++      g_object_unref (process);
++    }
++  else
++    {
++      g_assert_not_reached ();
++    }
++
++#ifdef HAVE_LIBSYSTEMD
++  if (sd_pid_get_session (pid, &session_str) == 0)
++    {
++      if (sd_session_get_seat (session_str, &seat_str) == 0)
++        {
++          /* do nothing */
++        }
++    }
++#endif /* HAVE_LIBSYSTEMD */
++
++  g_assert (POLKIT_IS_UNIX_USER (user_for_subject));
++  uid = polkit_unix_user_get_uid (POLKIT_UNIX_USER (user_for_subject));
++
++  groups = g_ptr_array_new_with_free_func (g_free);
++
++  passwd = getpwuid (uid);
++  if (passwd == NULL)
++    {
++      user_name = g_strdup_printf ("%d", (gint) uid);
++      g_warning ("Error looking up info for uid %d: %m", (gint) uid);
++    }
++  else
++    {
++      gid_t gids[512];
++      int num_gids = 512;
++
++      user_name = g_strdup (passwd->pw_name);
++
++      if (getgrouplist (passwd->pw_name,
++                        passwd->pw_gid,
++                        gids,
++                        &num_gids) < 0)
++        {
++          g_warning ("Error looking up groups for uid %d: %m", (gint) uid);
++        }
++      else
++        {
++          gint n;
++          for (n = 0; n < num_gids; n++)
++            {
++              struct group *group;
++              group = getgrgid (gids[n]);
++              if (group == NULL)
++                {
++                  g_ptr_array_add (groups, g_strdup_printf ("%d", (gint) gids[n]));
++                }
++              else
++                {
++                  g_ptr_array_add (groups, g_strdup (group->gr_name));
++                }
++            }
++        }
++    }
++
++  set_property_int32 (cx, "pid", pid);
++  set_property_str (cx, "user", user_name);
++  set_property_strv (cx, "groups", groups);
++  set_property_str (cx, "seat", seat_str);
++  set_property_str (cx, "session", session_str);
++  set_property_bool (cx, "local", subject_is_local);
++  set_property_bool (cx, "active", subject_is_active);
++
++  ret = TRUE;
++
++ out:
++  free (session_str);
++  free (seat_str);
++  g_free (user_name);
++  if (groups != NULL)
++    g_ptr_array_unref (groups);
++
++  return ret;
++}
++
++/* ---------------------------------------------------------------------------------------------------- */
++
++static gboolean
++push_action_and_details (duk_context               *cx,
++                         const gchar               *action_id,
++                         PolkitDetails             *details,
++                         GError                   **error)
++{
++  gchar **keys;
++  guint n;
++
++  duk_get_global_string (cx, "Action");
++  duk_new (cx, 0);
++
++  set_property_str (cx, "id", action_id);
++
++  keys = polkit_details_get_keys (details);
++  for (n = 0; keys != NULL && keys[n] != NULL; n++)
++    {
++      gchar *key;
++      const gchar *value;
++      key = g_strdup_printf ("_detail_%s", keys[n]);
++      value = polkit_details_lookup (details, keys[n]);
++      set_property_str (cx, key, value);
++      g_free (key);
++    }
++  g_strfreev (keys);
++
++  return TRUE;
++}
++
++/* ---------------------------------------------------------------------------------------------------- */
++
++/* ---------------------------------------------------------------------------------------------------- */
++
++static GList *
++polkit_backend_js_authority_get_admin_auth_identities (PolkitBackendInteractiveAuthority *_authority,
++                                                       PolkitSubject                     *caller,
++                                                       PolkitSubject                     *subject,
++                                                       PolkitIdentity                    *user_for_subject,
++                                                       gboolean                           subject_is_local,
++                                                       gboolean                           subject_is_active,
++                                                       const gchar                       *action_id,
++                                                       PolkitDetails                     *details)
++{
++  PolkitBackendJsAuthority *authority = POLKIT_BACKEND_JS_AUTHORITY (_authority);
++  GList *ret = NULL;
++  guint n;
++  GError *error = NULL;
++  const char *ret_str = NULL;
++  gchar **ret_strs = NULL;
++  duk_context *cx = authority->priv->cx;
++
++  duk_set_top (cx, 0);
++  duk_get_global_string (cx, "polkit");
++  duk_push_string (cx, "_runAdminRules");
++
++  if (!push_action_and_details (cx, action_id, details, &error))
++    {
++      polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
++                                    "Error converting action and details to JS object: %s",
++                                    error->message);
++      g_clear_error (&error);
++      goto out;
++    }
++
++  if (!push_subject (cx, subject, user_for_subject, subject_is_local, subject_is_active, &error))
++    {
++      polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
++                                    "Error converting subject to JS object: %s",
++                                    error->message);
++      g_clear_error (&error);
++      goto out;
++    }
++
++  if (duk_pcall_prop (cx, 0, 2) != DUK_ERR_NONE)
++    {
++      polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
++                                    "Error evaluating admin rules: ",
++                                    duk_safe_to_string (cx, -1));
++      goto out;
++    }
++
++  ret_str = duk_require_string (cx, -1);
++
++  ret_strs = g_strsplit (ret_str, ",", -1);
++  for (n = 0; ret_strs != NULL && ret_strs[n] != NULL; n++)
++    {
++      const gchar *identity_str = ret_strs[n];
++      PolkitIdentity *identity;
++
++      error = NULL;
++      identity = polkit_identity_from_string (identity_str, &error);
++      if (identity == NULL)
++        {
++          polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
++                                        "Identity `%s' is not valid, ignoring: %s",
++                                        identity_str, error->message);
++          g_clear_error (&error);
++        }
++      else
++        {
++          ret = g_list_prepend (ret, identity);
++        }
++    }
++  ret = g_list_reverse (ret);
++
++ out:
++  g_strfreev (ret_strs);
++  /* fallback to root password auth */
++  if (ret == NULL)
++    ret = g_list_prepend (ret, polkit_unix_user_new (0));
++
++  return ret;
++}
++
++/* ---------------------------------------------------------------------------------------------------- */
++
++static PolkitImplicitAuthorization
++polkit_backend_js_authority_check_authorization_sync (PolkitBackendInteractiveAuthority *_authority,
++                                                      PolkitSubject                     *caller,
++                                                      PolkitSubject                     *subject,
++                                                      PolkitIdentity                    *user_for_subject,
++                                                      gboolean                           subject_is_local,
++                                                      gboolean                           subject_is_active,
++                                                      const gchar                       *action_id,
++                                                      PolkitDetails                     *details,
++                                                      PolkitImplicitAuthorization        implicit)
++{
++  PolkitBackendJsAuthority *authority = POLKIT_BACKEND_JS_AUTHORITY (_authority);
++  PolkitImplicitAuthorization ret = implicit;
++  GError *error = NULL;
++  gchar *ret_str = NULL;
++  gboolean good = FALSE;
++  duk_context *cx = authority->priv->cx;
++
++  duk_set_top (cx, 0);
++  duk_get_global_string (cx, "polkit");
++  duk_push_string (cx, "_runRules");
++
++  if (!push_action_and_details (cx, action_id, details, &error))
++    {
++      polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
++                                    "Error converting action and details to JS object: %s",
++                                    error->message);
++      g_clear_error (&error);
++      goto out;
++    }
++
++  if (!push_subject (cx, subject, user_for_subject, subject_is_local, subject_is_active, &error))
++    {
++      polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
++                                    "Error converting subject to JS object: %s",
++                                    error->message);
++      g_clear_error (&error);
++      goto out;
++    }
++
++  if (duk_pcall_prop (cx, 0, 2) != DUK_ERR_NONE)
++  {
++      polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
++                                    "Error evaluating authorization rules: ",
++                                    duk_safe_to_string (cx, -1));
++      goto out;
++  }
++
++  if (duk_is_null(cx, -1)) {
++    good = TRUE;
++    goto out;
++  }
++  ret_str = g_strdup (duk_require_string (cx, -1));
++  if (!polkit_implicit_authorization_from_string (ret_str, &ret))
++    {
++      polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
++                                    "Returned result `%s' is not valid",
++                                    ret_str);
++      goto out;
++    }
++
++  good = TRUE;
++
++ out:
++  if (!good)
++    ret = POLKIT_IMPLICIT_AUTHORIZATION_NOT_AUTHORIZED;
++  g_free (ret_str);
++
++  return ret;
++}
++
++/* ---------------------------------------------------------------------------------------------------- */
++
++static duk_ret_t
++js_polkit_log (duk_context *cx)
++{
++  const char *str = duk_require_string (cx, 0);
++  fprintf (stderr, "%s\n", str);
++  return 0;
++}
++
++/* ---------------------------------------------------------------------------------------------------- */
++
++static const gchar *
++get_signal_name (gint signal_number)
++{
++  switch (signal_number)
++    {
++#define _HANDLE_SIG(sig) case sig: return #sig;
++    _HANDLE_SIG (SIGHUP);
++    _HANDLE_SIG (SIGINT);
++    _HANDLE_SIG (SIGQUIT);
++    _HANDLE_SIG (SIGILL);
++    _HANDLE_SIG (SIGABRT);
++    _HANDLE_SIG (SIGFPE);
++    _HANDLE_SIG (SIGKILL);
++    _HANDLE_SIG (SIGSEGV);
++    _HANDLE_SIG (SIGPIPE);
++    _HANDLE_SIG (SIGALRM);
++    _HANDLE_SIG (SIGTERM);
++    _HANDLE_SIG (SIGUSR1);
++    _HANDLE_SIG (SIGUSR2);
++    _HANDLE_SIG (SIGCHLD);
++    _HANDLE_SIG (SIGCONT);
++    _HANDLE_SIG (SIGSTOP);
++    _HANDLE_SIG (SIGTSTP);
++    _HANDLE_SIG (SIGTTIN);
++    _HANDLE_SIG (SIGTTOU);
++    _HANDLE_SIG (SIGBUS);
++#ifdef SIGPOLL
++    _HANDLE_SIG (SIGPOLL);
++#endif
++    _HANDLE_SIG (SIGPROF);
++    _HANDLE_SIG (SIGSYS);
++    _HANDLE_SIG (SIGTRAP);
++    _HANDLE_SIG (SIGURG);
++    _HANDLE_SIG (SIGVTALRM);
++    _HANDLE_SIG (SIGXCPU);
++    _HANDLE_SIG (SIGXFSZ);
++#undef _HANDLE_SIG
++    default:
++      break;
++    }
++  return "UNKNOWN_SIGNAL";
++}
++
++typedef struct
++{
++  GMainLoop *loop;
++  GAsyncResult *res;
++} SpawnData;
++
++static void
++spawn_cb (GObject       *source_object,
++          GAsyncResult  *res,
++          gpointer       user_data)
++{
++  SpawnData *data = user_data;
++  data->res = g_object_ref (res);
++  g_main_loop_quit (data->loop);
++}
++
++static duk_ret_t
++js_polkit_spawn (duk_context *cx)
++{
++#if (DUK_VERSION >= 20000)
++  duk_ret_t ret = DUK_RET_ERROR;
++#else
++  duk_ret_t ret = DUK_RET_INTERNAL_ERROR;
++#endif
++  gchar *standard_output = NULL;
++  gchar *standard_error = NULL;
++  gint exit_status;
++  GError *error = NULL;
++  guint32 array_len;
++  gchar **argv = NULL;
++  GMainContext *context = NULL;
++  GMainLoop *loop = NULL;
++  SpawnData data = {0};
++  char *err_str = NULL;
++  guint n;
++
++  if (!duk_is_array (cx, 0))
++    goto out;
++
++  array_len = duk_get_length (cx, 0);
++
++  argv = g_new0 (gchar*, array_len + 1);
++  for (n = 0; n < array_len; n++)
++    {
++      duk_get_prop_index (cx, 0, n);
++      argv[n] = g_strdup (duk_to_string (cx, -1));
++      duk_pop (cx);
++    }
++
++  context = g_main_context_new ();
++  loop = g_main_loop_new (context, FALSE);
++
++  g_main_context_push_thread_default (context);
++
++  data.loop = loop;
++  utils_spawn ((const gchar *const *) argv,
++               10, /* timeout_seconds */
++               NULL, /* cancellable */
++               spawn_cb,
++               &data);
++
++  g_main_loop_run (loop);
++
++  g_main_context_pop_thread_default (context);
++
++  if (!utils_spawn_finish (data.res,
++                           &exit_status,
++                           &standard_output,
++                           &standard_error,
++                           &error))
++    {
++      err_str = g_strdup_printf ("Error spawning helper: %s (%s, %d)",
++                                 error->message, g_quark_to_string (error->domain), error->code);
++      g_clear_error (&error);
++      goto out;
++    }
++
++  if (!(WIFEXITED (exit_status) && WEXITSTATUS (exit_status) == 0))
++    {
++      GString *gstr;
++      gstr = g_string_new (NULL);
++      if (WIFEXITED (exit_status))
++        {
++          g_string_append_printf (gstr,
++                                  "Helper exited with non-zero exit status %d",
++                                  WEXITSTATUS (exit_status));
++        }
++      else if (WIFSIGNALED (exit_status))
++        {
++          g_string_append_printf (gstr,
++                                  "Helper was signaled with signal %s (%d)",
++                                  get_signal_name (WTERMSIG (exit_status)),
++                                  WTERMSIG (exit_status));
++        }
++      g_string_append_printf (gstr, ", stdout=`%s', stderr=`%s'",
++                              standard_output, standard_error);
++      err_str = g_string_free (gstr, FALSE);
++      goto out;
++    }
++
++  duk_push_string (cx, standard_output);
++  ret = 1;
++
++ out:
++  g_strfreev (argv);
++  g_free (standard_output);
++  g_free (standard_error);
++  g_clear_object (&data.res);
++  if (loop != NULL)
++    g_main_loop_unref (loop);
++  if (context != NULL)
++    g_main_context_unref (context);
++
++  if (err_str)
++    duk_error (cx, DUK_ERR_ERROR, err_str);
++
++  return ret;
++}
++
++/* ---------------------------------------------------------------------------------------------------- */
++
++
++static duk_ret_t
++js_polkit_user_is_in_netgroup (duk_context *cx)
++{
++  const char *user;
++  const char *netgroup;
++  gboolean is_in_netgroup = FALSE;
++
++  user = duk_require_string (cx, 0);
++  netgroup = duk_require_string (cx, 1);
++
++  if (innetgr (netgroup,
++               NULL,  /* host */
++               user,
++               NULL)) /* domain */
++    {
++      is_in_netgroup = TRUE;
++    }
++
++  duk_push_boolean (cx, is_in_netgroup);
++  return 1;
++}
++
++/* ---------------------------------------------------------------------------------------------------- */
++
++typedef struct
++{
++  GSimpleAsyncResult *simple; /* borrowed reference */
++  GMainContext *main_context; /* may be NULL */
++
++  GCancellable *cancellable;  /* may be NULL */
++  gulong cancellable_handler_id;
++
++  GPid child_pid;
++  gint child_stdout_fd;
++  gint child_stderr_fd;
++
++  GIOChannel *child_stdout_channel;
++  GIOChannel *child_stderr_channel;
++
++  GSource *child_watch_source;
++  GSource *child_stdout_source;
++  GSource *child_stderr_source;
++
++  guint timeout_seconds;
++  gboolean timed_out;
++  GSource *timeout_source;
++
++  GString *child_stdout;
++  GString *child_stderr;
++
++  gint exit_status;
++} UtilsSpawnData;
++
++static void
++utils_child_watch_from_release_cb (GPid     pid,
++                                   gint     status,
++                                   gpointer user_data)
++{
++}
++
++static void
++utils_spawn_data_free (UtilsSpawnData *data)
++{
++  if (data->timeout_source != NULL)
++    {
++      g_source_destroy (data->timeout_source);
++      data->timeout_source = NULL;
++    }
++
++  /* Nuke the child, if necessary */
++  if (data->child_watch_source != NULL)
++    {
++      g_source_destroy (data->child_watch_source);
++      data->child_watch_source = NULL;
++    }
++
++  if (data->child_pid != 0)
++    {
++      GSource *source;
++      kill (data->child_pid, SIGTERM);
++      /* OK, we need to reap for the child ourselves - we don't want
++       * to use waitpid() because that might block the calling
++       * thread (the child might handle SIGTERM and use several
++       * seconds for cleanup/rollback).
++       *
++       * So we use GChildWatch instead.
++       *
++       * Avoid taking a references to ourselves. but note that we need
++       * to pass the GSource so we can nuke it once handled.
++       */
++      source = g_child_watch_source_new (data->child_pid);
++      g_source_set_callback (source,
++                             (GSourceFunc) utils_child_watch_from_release_cb,
++                             source,
++                             (GDestroyNotify) g_source_destroy);
++      g_source_attach (source, data->main_context);
++      g_source_unref (source);
++      data->child_pid = 0;
++    }
++
++  if (data->child_stdout != NULL)
++    {
++      g_string_free (data->child_stdout, TRUE);
++      data->child_stdout = NULL;
++    }
++
++  if (data->child_stderr != NULL)
++    {
++      g_string_free (data->child_stderr, TRUE);
++      data->child_stderr = NULL;
++    }
++
++  if (data->child_stdout_channel != NULL)
++    {
++      g_io_channel_unref (data->child_stdout_channel);
++      data->child_stdout_channel = NULL;
++    }
++  if (data->child_stderr_channel != NULL)
++    {
++      g_io_channel_unref (data->child_stderr_channel);
++      data->child_stderr_channel = NULL;
++    }
++
++  if (data->child_stdout_source != NULL)
++    {
++      g_source_destroy (data->child_stdout_source);
++      data->child_stdout_source = NULL;
++    }
++  if (data->child_stderr_source != NULL)
++    {
++      g_source_destroy (data->child_stderr_source);
++      data->child_stderr_source = NULL;
++    }
++
++  if (data->child_stdout_fd != -1)
++    {
++      g_warn_if_fail (close (data->child_stdout_fd) == 0);
++      data->child_stdout_fd = -1;
++    }
++  if (data->child_stderr_fd != -1)
++    {
++      g_warn_if_fail (close (data->child_stderr_fd) == 0);
++      data->child_stderr_fd = -1;
++    }
++
++  if (data->cancellable_handler_id > 0)
++    {
++      g_cancellable_disconnect (data->cancellable, data->cancellable_handler_id);
++      data->cancellable_handler_id = 0;
++    }
++
++  if (data->main_context != NULL)
++    g_main_context_unref (data->main_context);
++
++  if (data->cancellable != NULL)
++    g_object_unref (data->cancellable);
++
++  g_slice_free (UtilsSpawnData, data);
++}
++
++/* called in the thread where @cancellable was cancelled */
++static void
++utils_on_cancelled (GCancellable *cancellable,
++                    gpointer      user_data)
++{
++  UtilsSpawnData *data = user_data;
++  GError *error;
++
++  error = NULL;
++  g_warn_if_fail (g_cancellable_set_error_if_cancelled (cancellable, &error));
++  g_simple_async_result_take_error (data->simple, error);
++  g_simple_async_result_complete_in_idle (data->simple);
++  g_object_unref (data->simple);
++}
++
++static gboolean
++utils_read_child_stderr (GIOChannel *channel,
++                         GIOCondition condition,
++                         gpointer user_data)
++{
++  UtilsSpawnData *data = user_data;
++  gchar buf[1024];
++  gsize bytes_read;
++
++  g_io_channel_read_chars (channel, buf, sizeof buf, &bytes_read, NULL);
++  g_string_append_len (data->child_stderr, buf, bytes_read);
++  return TRUE;
++}
++
++static gboolean
++utils_read_child_stdout (GIOChannel *channel,
++                         GIOCondition condition,
++                         gpointer user_data)
++{
++  UtilsSpawnData *data = user_data;
++  gchar buf[1024];
++  gsize bytes_read;
++
++  g_io_channel_read_chars (channel, buf, sizeof buf, &bytes_read, NULL);
++  g_string_append_len (data->child_stdout, buf, bytes_read);
++  return TRUE;
++}
++
++static void
++utils_child_watch_cb (GPid     pid,
++                      gint     status,
++                      gpointer user_data)
++{
++  UtilsSpawnData *data = user_data;
++  gchar *buf;
++  gsize buf_size;
++
++  if (g_io_channel_read_to_end (data->child_stdout_channel, &buf, &buf_size, NULL) == G_IO_STATUS_NORMAL)
++    {
++      g_string_append_len (data->child_stdout, buf, buf_size);
++      g_free (buf);
++    }
++  if (g_io_channel_read_to_end (data->child_stderr_channel, &buf, &buf_size, NULL) == G_IO_STATUS_NORMAL)
++    {
++      g_string_append_len (data->child_stderr, buf, buf_size);
++      g_free (buf);
++    }
++
++  data->exit_status = status;
++
++  /* ok, child watch is history, make sure we don't free it in spawn_data_free() */
++  data->child_pid = 0;
++  data->child_watch_source = NULL;
++
++  /* we're done */
++  g_simple_async_result_complete_in_idle (data->simple);
++  g_object_unref (data->simple);
++}
++
++static gboolean
++utils_timeout_cb (gpointer user_data)
++{
++  UtilsSpawnData *data = user_data;
++
++  data->timed_out = TRUE;
++
++  /* ok, timeout is history, make sure we don't free it in spawn_data_free() */
++  data->timeout_source = NULL;
++
++  /* we're done */
++  g_simple_async_result_complete_in_idle (data->simple);
++  g_object_unref (data->simple);
++
++  return FALSE; /* remove source */
++}
++
++static void
++utils_spawn (const gchar *const  *argv,
++             guint                timeout_seconds,
++             GCancellable        *cancellable,
++             GAsyncReadyCallback  callback,
++             gpointer             user_data)
++{
++  UtilsSpawnData *data;
++  GError *error;
++
++  data = g_slice_new0 (UtilsSpawnData);
++  data->timeout_seconds = timeout_seconds;
++  data->simple = g_simple_async_result_new (NULL,
++                                            callback,
++                                            user_data,
++                                            utils_spawn);
++  data->main_context = g_main_context_get_thread_default ();
++  if (data->main_context != NULL)
++    g_main_context_ref (data->main_context);
++
++  data->cancellable = cancellable != NULL ? g_object_ref (cancellable) : NULL;
++
++  data->child_stdout = g_string_new (NULL);
++  data->child_stderr = g_string_new (NULL);
++  data->child_stdout_fd = -1;
++  data->child_stderr_fd = -1;
++
++  /* the life-cycle of UtilsSpawnData is tied to its GSimpleAsyncResult */
++  g_simple_async_result_set_op_res_gpointer (data->simple, data, (GDestroyNotify) utils_spawn_data_free);
++
++  error = NULL;
++  if (data->cancellable != NULL)
++    {
++      /* could already be cancelled */
++      error = NULL;
++      if (g_cancellable_set_error_if_cancelled (data->cancellable, &error))
++        {
++          g_simple_async_result_take_error (data->simple, error);
++          g_simple_async_result_complete_in_idle (data->simple);
++          g_object_unref (data->simple);
++          goto out;
++        }
++
++      data->cancellable_handler_id = g_cancellable_connect (data->cancellable,
++                                                            G_CALLBACK (utils_on_cancelled),
++                                                            data,
++                                                            NULL);
++    }
++
++  error = NULL;
++  if (!g_spawn_async_with_pipes (NULL, /* working directory */
++                                 (gchar **) argv,
++                                 NULL, /* envp */
++                                 G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD,
++                                 NULL, /* child_setup */
++                                 NULL, /* child_setup's user_data */
++                                 &(data->child_pid),
++                                 NULL, /* gint *stdin_fd */
++                                 &(data->child_stdout_fd),
++                                 &(data->child_stderr_fd),
++                                 &error))
++    {
++      g_prefix_error (&error, "Error spawning: ");
++      g_simple_async_result_take_error (data->simple, error);
++      g_simple_async_result_complete_in_idle (data->simple);
++      g_object_unref (data->simple);
++      goto out;
++    }
++
++  if (timeout_seconds > 0)
++    {
++      data->timeout_source = g_timeout_source_new_seconds (timeout_seconds);
++      g_source_set_priority (data->timeout_source, G_PRIORITY_DEFAULT);
++      g_source_set_callback (data->timeout_source, utils_timeout_cb, data, NULL);
++      g_source_attach (data->timeout_source, data->main_context);
++      g_source_unref (data->timeout_source);
++    }
++
++  data->child_watch_source = g_child_watch_source_new (data->child_pid);
++  g_source_set_callback (data->child_watch_source, (GSourceFunc) utils_child_watch_cb, data, NULL);
++  g_source_attach (data->child_watch_source, data->main_context);
++  g_source_unref (data->child_watch_source);
++
++  data->child_stdout_channel = g_io_channel_unix_new (data->child_stdout_fd);
++  g_io_channel_set_flags (data->child_stdout_channel, G_IO_FLAG_NONBLOCK, NULL);
++  data->child_stdout_source = g_io_create_watch (data->child_stdout_channel, G_IO_IN);
++  g_source_set_callback (data->child_stdout_source, (GSourceFunc) utils_read_child_stdout, data, NULL);
++  g_source_attach (data->child_stdout_source, data->main_context);
++  g_source_unref (data->child_stdout_source);
++
++  data->child_stderr_channel = g_io_channel_unix_new (data->child_stderr_fd);
++  g_io_channel_set_flags (data->child_stderr_channel, G_IO_FLAG_NONBLOCK, NULL);
++  data->child_stderr_source = g_io_create_watch (data->child_stderr_channel, G_IO_IN);
++  g_source_set_callback (data->child_stderr_source, (GSourceFunc) utils_read_child_stderr, data, NULL);
++  g_source_attach (data->child_stderr_source, data->main_context);
++  g_source_unref (data->child_stderr_source);
++
++ out:
++  ;
++}
++
++gboolean
++utils_spawn_finish (GAsyncResult   *res,
++                    gint           *out_exit_status,
++                    gchar         **out_standard_output,
++                    gchar         **out_standard_error,
++                    GError        **error)
++{
++  GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
++  UtilsSpawnData *data;
++  gboolean ret = FALSE;
++
++  g_return_val_if_fail (G_IS_ASYNC_RESULT (res), FALSE);
++  g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
++
++  g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == utils_spawn);
++
++  if (g_simple_async_result_propagate_error (simple, error))
++    goto out;
++
++  data = g_simple_async_result_get_op_res_gpointer (simple);
++
++  if (data->timed_out)
++    {
++      g_set_error (error,
++                   G_IO_ERROR,
++                   G_IO_ERROR_TIMED_OUT,
++                   "Timed out after %d seconds",
++                   data->timeout_seconds);
++      goto out;
++    }
++
++  if (out_exit_status != NULL)
++    *out_exit_status = data->exit_status;
++
++  if (out_standard_output != NULL)
++    *out_standard_output = g_strdup (data->child_stdout->str);
++
++  if (out_standard_error != NULL)
++    *out_standard_error = g_strdup (data->child_stderr->str);
++
++  ret = TRUE;
++
++ out:
++  return ret;
++}
+-- 
+GitLab
+
+
+From d74aad8152a7c51999fffa9abe28e4306a052399 Mon Sep 17 00:00:00 2001
+From: Wu Xiaotian <yetist@gmail.com>
+Date: Sun, 22 Nov 2020 13:15:17 +0800
+Subject: [PATCH 02/16] check netgroup.h header file
+
+Signed-off-by: Gustavo Lima Chaves <gustavo.chaves@microsoft.com>
+---
+ src/polkitbackend/polkitbackendduktapeauthority.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/src/polkitbackend/polkitbackendduktapeauthority.c b/src/polkitbackend/polkitbackendduktapeauthority.c
+index ae98453..543d6fd 100644
+--- a/src/polkitbackend/polkitbackendduktapeauthority.c
++++ b/src/polkitbackend/polkitbackendduktapeauthority.c
+@@ -26,7 +26,11 @@
+ #include <errno.h>
+ #include <pwd.h>
+ #include <grp.h>
++#ifdef HAVE_NETGROUP_H
++#include <netgroup.h>
++#else
+ #include <netdb.h>
++#endif
+ #include <string.h>
+ #include <glib/gstdio.h>
+ #include <locale.h>
+-- 
+GitLab
+
+
+From 69c761506cbe458807e4ae2742c9e05bc60dad3d Mon Sep 17 00:00:00 2001
+From: Wu Xiaotian <yetist@gmail.com>
+Date: Sun, 22 Nov 2020 10:59:03 +0800
+Subject: [PATCH 03/16] check return value
+
+Signed-off-by: Gustavo Lima Chaves <gustavo.chaves@microsoft.com>
+---
+ src/polkitbackend/polkitbackendduktapeauthority.c | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/src/polkitbackend/polkitbackendduktapeauthority.c b/src/polkitbackend/polkitbackendduktapeauthority.c
+index 543d6fd..a54ed5b 100644
+--- a/src/polkitbackend/polkitbackendduktapeauthority.c
++++ b/src/polkitbackend/polkitbackendduktapeauthority.c
+@@ -249,7 +249,11 @@ reload_scripts (PolkitBackendJsAuthority *authority)
+   duk_context *cx = authority->priv->cx;
+ 
+   duk_set_top (cx, 0);
+-  duk_get_global_string (cx, "polkit");
++  if (!duk_get_global_string (cx, "polkit")) {
++      polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
++                                    "Error deleting old rules, not loading new ones");
++      return;
++  }
+   duk_push_string (cx, "_deleteRules");
+ 
+   duk_call_prop (cx, 0, 0);
+-- 
+GitLab
+
+
+From f1536c4899934fd3c8243fda2d084a472fe57d2e Mon Sep 17 00:00:00 2001
+From: Wu Xiaotian <yetist@gmail.com>
+Date: Sun, 22 Nov 2020 11:22:39 +0800
+Subject: [PATCH 04/16] check return value
+
+Signed-off-by: Gustavo Lima Chaves <gustavo.chaves@microsoft.com>
+---
+ src/polkitbackend/polkitbackendduktapeauthority.c | 12 ++++++++++--
+ 1 file changed, 10 insertions(+), 2 deletions(-)
+
+diff --git a/src/polkitbackend/polkitbackendduktapeauthority.c b/src/polkitbackend/polkitbackendduktapeauthority.c
+index a54ed5b..1a7e6d3 100644
+--- a/src/polkitbackend/polkitbackendduktapeauthority.c
++++ b/src/polkitbackend/polkitbackendduktapeauthority.c
+@@ -656,7 +656,10 @@ push_action_and_details (duk_context               *cx,
+   gchar **keys;
+   guint n;
+ 
+-  duk_get_global_string (cx, "Action");
++  if (!duk_get_global_string (cx, "Action")) {
++    return FALSE;
++  }
++
+   duk_new (cx, 0);
+ 
+   set_property_str (cx, "id", action_id);
+@@ -699,7 +702,12 @@ polkit_backend_js_authority_get_admin_auth_identities (PolkitBackendInteractiveA
+   duk_context *cx = authority->priv->cx;
+ 
+   duk_set_top (cx, 0);
+-  duk_get_global_string (cx, "polkit");
++  if (!duk_get_global_string (cx, "polkit")) {
++      polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
++                                    "Error deleting old rules, not loading new ones");
++      goto out;
++  }
++
+   duk_push_string (cx, "_runAdminRules");
+ 
+   if (!push_action_and_details (cx, action_id, details, &error))
+-- 
+GitLab
+
+
+From ca15eecf5dc7755947515c1bfc651fd8770aaf8f Mon Sep 17 00:00:00 2001
+From: Wu Xiaotian <yetist@gmail.com>
+Date: Sun, 22 Nov 2020 13:17:16 +0800
+Subject: [PATCH 05/16] check return value
+
+Signed-off-by: Gustavo Lima Chaves <gustavo.chaves@microsoft.com>
+---
+ src/polkitbackend/polkitbackendduktapeauthority.c | 10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
+
+diff --git a/src/polkitbackend/polkitbackendduktapeauthority.c b/src/polkitbackend/polkitbackendduktapeauthority.c
+index 1a7e6d3..3f1b32d 100644
+--- a/src/polkitbackend/polkitbackendduktapeauthority.c
++++ b/src/polkitbackend/polkitbackendduktapeauthority.c
+@@ -550,7 +550,10 @@ push_subject (duk_context               *cx,
+   char *seat_str = NULL;
+   char *session_str = NULL;
+ 
+-  duk_get_global_string (cx, "Subject");
++  if (!duk_get_global_string (cx, "Subject")) {
++    return FALSE;
++  }
++
+   duk_new (cx, 0);
+ 
+   if (POLKIT_IS_UNIX_PROCESS (subject))
+@@ -789,8 +792,11 @@ polkit_backend_js_authority_check_authorization_sync (PolkitBackendInteractiveAu
+   gboolean good = FALSE;
+   duk_context *cx = authority->priv->cx;
+ 
++  if (!duk_get_global_string (cx, "polkit")) {
++      goto out;
++  }
++
+   duk_set_top (cx, 0);
+-  duk_get_global_string (cx, "polkit");
+   duk_push_string (cx, "_runRules");
+ 
+   if (!push_action_and_details (cx, action_id, details, &error))
+-- 
+GitLab
+
+
+From 870348365cc0166e14f28e0d144ed552bba4d794 Mon Sep 17 00:00:00 2001
+From: Wu Xiaotian <yetist@gmail.com>
+Date: Sun, 22 Nov 2020 13:18:13 +0800
+Subject: [PATCH 06/16] check return value
+
+Signed-off-by: Gustavo Lima Chaves <gustavo.chaves@microsoft.com>
+---
+ src/polkitbackend/polkitbackendduktapeauthority.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/polkitbackend/polkitbackendduktapeauthority.c b/src/polkitbackend/polkitbackendduktapeauthority.c
+index 3f1b32d..6294ad9 100644
+--- a/src/polkitbackend/polkitbackendduktapeauthority.c
++++ b/src/polkitbackend/polkitbackendduktapeauthority.c
+@@ -843,7 +843,8 @@ polkit_backend_js_authority_check_authorization_sync (PolkitBackendInteractiveAu
+  out:
+   if (!good)
+     ret = POLKIT_IMPLICIT_AUTHORIZATION_NOT_AUTHORIZED;
+-  g_free (ret_str);
++  if (ret_str != NULL)
++      g_free (ret_str);
+ 
+   return ret;
+ }
+-- 
+GitLab
+
+
+From 81c916ff08fdcee3c7340c4b2d4632086b89666c Mon Sep 17 00:00:00 2001
+From: Wu Xiaotian <yetist@gmail.com>
+Date: Sun, 22 Nov 2020 11:23:04 +0800
+Subject: [PATCH 07/16] fix typecase
+
+Signed-off-by: Gustavo Lima Chaves <gustavo.chaves@microsoft.com>
+---
+ src/polkitbackend/polkitbackendduktapeauthority.c | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/src/polkitbackend/polkitbackendduktapeauthority.c b/src/polkitbackend/polkitbackendduktapeauthority.c
+index 6294ad9..d466c9d 100644
+--- a/src/polkitbackend/polkitbackendduktapeauthority.c
++++ b/src/polkitbackend/polkitbackendduktapeauthority.c
+@@ -1191,7 +1191,7 @@ static void
+ utils_on_cancelled (GCancellable *cancellable,
+                     gpointer      user_data)
+ {
+-  UtilsSpawnData *data = user_data;
++  UtilsSpawnData *data = (UtilsSpawnData *)user_data;
+   GError *error;
+ 
+   error = NULL;
+@@ -1206,7 +1206,7 @@ utils_read_child_stderr (GIOChannel *channel,
+                          GIOCondition condition,
+                          gpointer user_data)
+ {
+-  UtilsSpawnData *data = user_data;
++  UtilsSpawnData *data = (UtilsSpawnData *)user_data;
+   gchar buf[1024];
+   gsize bytes_read;
+ 
+@@ -1220,7 +1220,7 @@ utils_read_child_stdout (GIOChannel *channel,
+                          GIOCondition condition,
+                          gpointer user_data)
+ {
+-  UtilsSpawnData *data = user_data;
++  UtilsSpawnData *data = (UtilsSpawnData *)user_data;
+   gchar buf[1024];
+   gsize bytes_read;
+ 
+@@ -1234,7 +1234,7 @@ utils_child_watch_cb (GPid     pid,
+                       gint     status,
+                       gpointer user_data)
+ {
+-  UtilsSpawnData *data = user_data;
++  UtilsSpawnData *data = (UtilsSpawnData *)user_data;
+   gchar *buf;
+   gsize buf_size;
+ 
+@@ -1263,7 +1263,7 @@ utils_child_watch_cb (GPid     pid,
+ static gboolean
+ utils_timeout_cb (gpointer user_data)
+ {
+-  UtilsSpawnData *data = user_data;
++  UtilsSpawnData *data = (UtilsSpawnData *)user_data;
+ 
+   data->timed_out = TRUE;
+ 
+-- 
+GitLab
+
+
+From acb956bf52f0a78bf7aaf925876f96e97a146995 Mon Sep 17 00:00:00 2001
+From: Wu Xiaotian <yetist@gmail.com>
+Date: Sun, 22 Nov 2020 18:04:27 +0800
+Subject: [PATCH 08/16] typecase
+
+Signed-off-by: Gustavo Lima Chaves <gustavo.chaves@microsoft.com>
+---
+ src/polkitbackend/polkitbackendduktapeauthority.c | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/src/polkitbackend/polkitbackendduktapeauthority.c b/src/polkitbackend/polkitbackendduktapeauthority.c
+index d466c9d..237b1ad 100644
+--- a/src/polkitbackend/polkitbackendduktapeauthority.c
++++ b/src/polkitbackend/polkitbackendduktapeauthority.c
+@@ -915,8 +915,8 @@ spawn_cb (GObject       *source_object,
+           GAsyncResult  *res,
+           gpointer       user_data)
+ {
+-  SpawnData *data = user_data;
+-  data->res = g_object_ref (res);
++  SpawnData *data = (SpawnData *)user_data;
++  data->res = (GAsyncResult*)g_object_ref (res);
+   g_main_loop_quit (data->loop);
+ }
+ 
+@@ -1292,12 +1292,12 @@ utils_spawn (const gchar *const  *argv,
+   data->simple = g_simple_async_result_new (NULL,
+                                             callback,
+                                             user_data,
+-                                            utils_spawn);
++                                            (gpointer*)utils_spawn);
+   data->main_context = g_main_context_get_thread_default ();
+   if (data->main_context != NULL)
+     g_main_context_ref (data->main_context);
+ 
+-  data->cancellable = cancellable != NULL ? g_object_ref (cancellable) : NULL;
++  data->cancellable = cancellable != NULL ? (GCancellable*)g_object_ref (cancellable) : NULL;
+ 
+   data->child_stdout = g_string_new (NULL);
+   data->child_stderr = g_string_new (NULL);
+@@ -1397,7 +1397,7 @@ utils_spawn_finish (GAsyncResult   *res,
+   if (g_simple_async_result_propagate_error (simple, error))
+     goto out;
+ 
+-  data = g_simple_async_result_get_op_res_gpointer (simple);
++  data = (UtilsSpawnData*)g_simple_async_result_get_op_res_gpointer (simple);
+ 
+   if (data->timed_out)
+     {
+-- 
+GitLab
+
+
+From be060e4d48aceb09af34868b555b6c73c7afdabb Mon Sep 17 00:00:00 2001
+From: Wu Xiaotian <yetist@gmail.com>
+Date: Sun, 22 Nov 2020 13:53:23 +0800
+Subject: [PATCH 09/16] some change
+
+Signed-off-by: Gustavo Lima Chaves <gustavo.chaves@microsoft.com>
+---
+ .../polkitbackendduktapeauthority.c           | 26 +++++++++++--------
+ 1 file changed, 15 insertions(+), 11 deletions(-)
+
+diff --git a/src/polkitbackend/polkitbackendduktapeauthority.c b/src/polkitbackend/polkitbackendduktapeauthority.c
+index 237b1ad..fad9017 100644
+--- a/src/polkitbackend/polkitbackendduktapeauthority.c
++++ b/src/polkitbackend/polkitbackendduktapeauthority.c
+@@ -207,18 +207,22 @@ load_scripts (PolkitBackendJsAuthority  *authority)
+ 
+   for (l = files; l != NULL; l = l->next)
+     {
+-      const gchar *filename = l->data;
+-
++      const gchar *filename = (gchar *)l->data;
+ #if (DUK_VERSION >= 20000)
+-      gchar *contents;
+-      gsize length;
+-      GError *error = NULL;
+-      if (!g_file_get_contents (filename, &contents, &length, &error)){
+-        g_warning("Error when file contents of %s: %s\n", filename, error->message);
+-        g_error_free (error);
+-        continue;
+-      }
+-      if (duk_peval_lstring_noresult(cx, contents,length) != 0)
++      GFile *file = g_file_new_for_path (filename);
++      char *contents;
++      gsize len;
++      if (!g_file_load_contents (file, NULL, &contents, &len, NULL, NULL))
++        {
++          polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
++                                        "Error compiling script %s",
++                                        filename);
++          g_object_unref (file);
++          continue;
++        }
++
++      g_object_unref (file);
++      if (duk_peval_lstring_noresult(cx, contents,len) != 0)
+ #else
+       if (duk_peval_file_noresult (cx, filename) != 0)
+ #endif
+-- 
+GitLab
+
+
+From 2ffb62048a5ebedfe3bb053feb7385c7270ede28 Mon Sep 17 00:00:00 2001
+From: Wu Xiaotian <yetist@gmail.com>
+Date: Sun, 22 Nov 2020 15:25:45 +0800
+Subject: [PATCH 10/16] some change
+
+Signed-off-by: Gustavo Lima Chaves <gustavo.chaves@microsoft.com>
+---
+ .../polkitbackendduktapeauthority.c           | 24 +++++++++----------
+ 1 file changed, 12 insertions(+), 12 deletions(-)
+
+diff --git a/src/polkitbackend/polkitbackendduktapeauthority.c b/src/polkitbackend/polkitbackendduktapeauthority.c
+index fad9017..6fac3be 100644
+--- a/src/polkitbackend/polkitbackendduktapeauthority.c
++++ b/src/polkitbackend/polkitbackendduktapeauthority.c
+@@ -125,6 +125,18 @@ G_DEFINE_TYPE (PolkitBackendJsAuthority, polkit_backend_js_authority, POLKIT_BAC
+ 
+ /* ---------------------------------------------------------------------------------------------------- */
+ 
++static duk_ret_t js_polkit_log (duk_context *cx);
++static duk_ret_t js_polkit_spawn (duk_context *cx);
++static duk_ret_t js_polkit_user_is_in_netgroup (duk_context *cx);
++
++static const duk_function_list_entry js_polkit_functions[] =
++{
++  { "log", js_polkit_log, 1 },
++  { "spawn", js_polkit_spawn, 1 },
++  { "_userIsInNetGroup", js_polkit_user_is_in_netgroup, 2 },
++  { NULL, NULL, 0 },
++};
++
+ static void
+ polkit_backend_js_authority_init (PolkitBackendJsAuthority *authority)
+ {
+@@ -347,18 +359,6 @@ setup_file_monitors (PolkitBackendJsAuthority *authority)
+   authority->priv->dir_monitors = (GFileMonitor**) g_ptr_array_free (p, FALSE);
+ }
+ 
+-static duk_ret_t js_polkit_log (duk_context *cx);
+-static duk_ret_t js_polkit_spawn (duk_context *cx);
+-static duk_ret_t js_polkit_user_is_in_netgroup (duk_context *cx);
+-
+-static const duk_function_list_entry js_polkit_functions[] =
+-{
+-  { "log", js_polkit_log, 1 },
+-  { "spawn", js_polkit_spawn, 1 },
+-  { "_userIsInNetGroup", js_polkit_user_is_in_netgroup, 2 },
+-  { NULL, NULL, 0 },
+-};
+-
+ static void
+ polkit_backend_js_authority_constructed (GObject *object)
+ {
+-- 
+GitLab
+
+
+From edb70ef69eed3275f5654510d135e680eb46c85d Mon Sep 17 00:00:00 2001
+From: Wu Xiaotian <yetist@gmail.com>
+Date: Sun, 22 Nov 2020 15:25:35 +0800
+Subject: [PATCH 11/16] remove WATCHDOG_TIMEOUT define
+
+Signed-off-by: Gustavo Lima Chaves <gustavo.chaves@microsoft.com>
+---
+ src/polkitbackend/polkitbackendduktapeauthority.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/src/polkitbackend/polkitbackendduktapeauthority.c b/src/polkitbackend/polkitbackendduktapeauthority.c
+index 6fac3be..51e03fd 100644
+--- a/src/polkitbackend/polkitbackendduktapeauthority.c
++++ b/src/polkitbackend/polkitbackendduktapeauthority.c
+@@ -69,7 +69,6 @@ struct _PolkitBackendJsAuthorityPrivate
+   duk_context *cx;
+ };
+ 
+-#define WATCHDOG_TIMEOUT (15 * G_TIME_SPAN_SECOND)
+ 
+ static void utils_spawn (const gchar *const  *argv,
+                          guint                timeout_seconds,
+-- 
+GitLab
+
+
+From 906ae404f29f15ef8c529b999bf091b5d18ed7ac Mon Sep 17 00:00:00 2001
+From: Wu Xiaotian <yetist@gmail.com>
+Date: Sun, 22 Nov 2020 12:46:40 +0800
+Subject: [PATCH 12/16] add meson build system support
+
+Signed-off-by: Gustavo Lima Chaves <gustavo.chaves@microsoft.com>
+---
+ meson.build                   | 11 ++++++++++-
+ meson_options.txt             |  1 +
+ src/polkitbackend/meson.build | 10 ++++++++--
+ 3 files changed, 19 insertions(+), 3 deletions(-)
+
+diff --git a/meson.build b/meson.build
+index 858078d..4e44723 100644
+--- a/meson.build
++++ b/meson.build
+@@ -133,7 +133,13 @@ expat_dep = dependency('expat')
+ assert(cc.has_header('expat.h', dependencies: expat_dep), 'Can\'t find expat.h. Please install expat.')
+ assert(cc.has_function('XML_ParserCreate', dependencies: expat_dep), 'Can\'t find expat library. Please install expat.')
+ 
+-mozjs_dep = dependency('mozjs-78')
++js_engine = get_option('js_engine')
++if js_engine == 'duktape'
++  js_dep = dependency('duktape')
++  libm_dep = cc.find_library('m')
++elif js_engine == 'mozjs'
++  js_dep = dependency('mozjs-78')
++endif
+ 
+ dbus_dep = dependency('dbus-1', required: false)
+ dbus_policydir = pk_prefix / pk_datadir / 'dbus-1/system.d'
+@@ -361,6 +367,9 @@ if enable_logind
+   output += '        systemdsystemunitdir:     ' + systemd_systemdsystemunitdir + '\n'
+ endif
+ output += '        polkitd user:             ' + polkitd_user + ' \n'
++output += '        Javascript engine:        ' + js_engine + '\n'
++if enable_logind
++endif
+ output += '        PAM support:              ' + enable_pam.to_string() + '\n\n'
+ if enable_pam
+   output += '        PAM file auth:            ' + pam_conf['PAM_FILE_INCLUDE_AUTH'] + '\n'
+diff --git a/meson_options.txt b/meson_options.txt
+index 25e3e77..76aa311 100644
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -16,3 +16,4 @@ option('introspection', type: 'boolean', value: true, description: 'Enable intro
+ 
+ option('gtk_doc', type: 'boolean', value: false, description: 'use gtk-doc to build documentation')
+ option('man', type: 'boolean', value: false, description: 'build manual pages')
++option('js_engine', type: 'combo', choices: ['mozjs', 'duktape'], value: 'duktape', description: 'javascript engine')
+diff --git a/src/polkitbackend/meson.build b/src/polkitbackend/meson.build
+index 64f0e4a..489897d 100644
+--- a/src/polkitbackend/meson.build
++++ b/src/polkitbackend/meson.build
+@@ -5,7 +5,6 @@ sources = files(
+   'polkitbackendactionpool.c',
+   'polkitbackendauthority.c',
+   'polkitbackendinteractiveauthority.c',
+-  'polkitbackendjsauthority.cpp',
+ )
+ 
+ output = 'initjs.h'
+@@ -21,7 +20,7 @@ sources += custom_target(
+ deps = [
+   expat_dep,
+   libpolkit_gobject_dep,
+-  mozjs_dep,
++  js_dep,
+ ]
+ 
+ c_flags = [
+@@ -31,6 +30,13 @@ c_flags = [
+   '-DPACKAGE_SYSCONF_DIR="@0@"'.format(pk_prefix / pk_sysconfdir),
+ ]
+ 
++if js_engine == 'duktape'
++  sources += files('polkitbackendduktapeauthority.c')
++  deps += libm_dep
++elif js_engine == 'mozjs'
++  sources += files('polkitbackendjsauthority.cpp')
++endif
++
+ if enable_logind
+   sources += files('polkitbackendsessionmonitor-systemd.c')
+ 
+-- 
+GitLab
+
+
+From 1380b505c25be4aebe54b1b4223a570d64af83cc Mon Sep 17 00:00:00 2001
+From: Wu Xiaotian <yetist@gmail.com>
+Date: Sun, 22 Nov 2020 18:49:14 +0800
+Subject: [PATCH 13/16] fix run error
+
+Signed-off-by: Gustavo Lima Chaves <gustavo.chaves@microsoft.com>
+---
+ src/polkitbackend/polkitbackendduktapeauthority.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/polkitbackend/polkitbackendduktapeauthority.c b/src/polkitbackend/polkitbackendduktapeauthority.c
+index 51e03fd..4b4f8fd 100644
+--- a/src/polkitbackend/polkitbackendduktapeauthority.c
++++ b/src/polkitbackend/polkitbackendduktapeauthority.c
+@@ -795,11 +795,11 @@ polkit_backend_js_authority_check_authorization_sync (PolkitBackendInteractiveAu
+   gboolean good = FALSE;
+   duk_context *cx = authority->priv->cx;
+ 
++  duk_set_top (cx, 0);
+   if (!duk_get_global_string (cx, "polkit")) {
+       goto out;
+   }
+ 
+-  duk_set_top (cx, 0);
+   duk_push_string (cx, "_runRules");
+ 
+   if (!push_action_and_details (cx, action_id, details, &error))
+-- 
+GitLab
+
+
+From 6856a704b70378948ef5f66e9b09555d97d4070b Mon Sep 17 00:00:00 2001
+From: Gustavo Lima Chaves <gustavo.chaves@microsoft.com>
+Date: Fri, 10 Sep 2021 15:17:58 -0700
+Subject: [PATCH 14/16] Deduplicate code for "Add duktape as JS engine backend"
+ effort/MR
+
+This leverages Wu Xiaotian (@yetist)'s original MR
+(https://gitlab.freedesktop.org/polkit/polkit/-/merge_requests/35), in
+an effort to complete said work.
+
+This is the first of the requests from maintainers--to reduce
+eliminate code duplication.
+
+The runaway-killer missing functionality will come in the sequence.
+
+Signed-off-by: Gustavo Lima Chaves <gustavo.chaves@microsoft.com>
+---
+ src/polkitbackend/Makefile.am                 |   1 +
+ src/polkitbackend/meson.build                 |   1 +
+ src/polkitbackend/polkitbackendcommon.c       | 530 +++++++++++++
+ src/polkitbackend/polkitbackendcommon.h       | 156 ++++
+ .../polkitbackendduktapeauthority.c           | 714 ++----------------
+ .../polkitbackendjsauthority.cpp              | 711 ++---------------
+ 6 files changed, 790 insertions(+), 1323 deletions(-)
+ create mode 100644 src/polkitbackend/polkitbackendcommon.c
+ create mode 100644 src/polkitbackend/polkitbackendcommon.h
+
+diff --git a/src/polkitbackend/Makefile.am b/src/polkitbackend/Makefile.am
+index abcbc6f..6a8b4ae 100644
+--- a/src/polkitbackend/Makefile.am
++++ b/src/polkitbackend/Makefile.am
+@@ -31,6 +31,7 @@ libpolkit_backend_1_la_SOURCES =                                   			\
+         polkitbackend.h									\
+ 	polkitbackendtypes.h								\
+ 	polkitbackendprivate.h								\
++	polkitbackendcommon.h			polkitbackendcommon.c			\
+ 	polkitbackendauthority.h		polkitbackendauthority.c		\
+ 	polkitbackendinteractiveauthority.h	polkitbackendinteractiveauthority.c	\
+ 	polkitbackendjsauthority.h				\
+diff --git a/src/polkitbackend/meson.build b/src/polkitbackend/meson.build
+index 489897d..9ec01b2 100644
+--- a/src/polkitbackend/meson.build
++++ b/src/polkitbackend/meson.build
+@@ -4,6 +4,7 @@ sources = files(
+   'polkitbackendactionlookup.c',
+   'polkitbackendactionpool.c',
+   'polkitbackendauthority.c',
++  'polkitbackendcommon.c',
+   'polkitbackendinteractiveauthority.c',
+ )
+ 
+diff --git a/src/polkitbackend/polkitbackendcommon.c b/src/polkitbackend/polkitbackendcommon.c
+new file mode 100644
+index 0000000..6783dff
+--- /dev/null
++++ b/src/polkitbackend/polkitbackendcommon.c
+@@ -0,0 +1,530 @@
++/*
++ * Copyright (C) 2008 Red Hat, Inc.
++ *
++ * 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 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.
++ *
++ * Author: David Zeuthen <davidz@redhat.com>
++ */
++
++#include "polkitbackendcommon.h"
++
++static void
++utils_child_watch_from_release_cb (GPid     pid,
++                                   gint     status,
++                                   gpointer user_data)
++{
++}
++
++static void
++utils_spawn_data_free (UtilsSpawnData *data)
++{
++  if (data->timeout_source != NULL)
++    {
++      g_source_destroy (data->timeout_source);
++      data->timeout_source = NULL;
++    }
++
++  /* Nuke the child, if necessary */
++  if (data->child_watch_source != NULL)
++    {
++      g_source_destroy (data->child_watch_source);
++      data->child_watch_source = NULL;
++    }
++
++  if (data->child_pid != 0)
++    {
++      GSource *source;
++      kill (data->child_pid, SIGTERM);
++      /* OK, we need to reap for the child ourselves - we don't want
++       * to use waitpid() because that might block the calling
++       * thread (the child might handle SIGTERM and use several
++       * seconds for cleanup/rollback).
++       *
++       * So we use GChildWatch instead.
++       *
++       * Avoid taking a references to ourselves. but note that we need
++       * to pass the GSource so we can nuke it once handled.
++       */
++      source = g_child_watch_source_new (data->child_pid);
++      g_source_set_callback (source,
++                             (GSourceFunc) utils_child_watch_from_release_cb,
++                             source,
++                             (GDestroyNotify) g_source_destroy);
++      g_source_attach (source, data->main_context);
++      g_source_unref (source);
++      data->child_pid = 0;
++    }
++
++  if (data->child_stdout != NULL)
++    {
++      g_string_free (data->child_stdout, TRUE);
++      data->child_stdout = NULL;
++    }
++
++  if (data->child_stderr != NULL)
++    {
++      g_string_free (data->child_stderr, TRUE);
++      data->child_stderr = NULL;
++    }
++
++  if (data->child_stdout_channel != NULL)
++    {
++      g_io_channel_unref (data->child_stdout_channel);
++      data->child_stdout_channel = NULL;
++    }
++  if (data->child_stderr_channel != NULL)
++    {
++      g_io_channel_unref (data->child_stderr_channel);
++      data->child_stderr_channel = NULL;
++    }
++
++  if (data->child_stdout_source != NULL)
++    {
++      g_source_destroy (data->child_stdout_source);
++      data->child_stdout_source = NULL;
++    }
++  if (data->child_stderr_source != NULL)
++    {
++      g_source_destroy (data->child_stderr_source);
++      data->child_stderr_source = NULL;
++    }
++
++  if (data->child_stdout_fd != -1)
++    {
++      g_warn_if_fail (close (data->child_stdout_fd) == 0);
++      data->child_stdout_fd = -1;
++    }
++  if (data->child_stderr_fd != -1)
++    {
++      g_warn_if_fail (close (data->child_stderr_fd) == 0);
++      data->child_stderr_fd = -1;
++    }
++
++  if (data->cancellable_handler_id > 0)
++    {
++      g_cancellable_disconnect (data->cancellable, data->cancellable_handler_id);
++      data->cancellable_handler_id = 0;
++    }
++
++  if (data->main_context != NULL)
++    g_main_context_unref (data->main_context);
++
++  if (data->cancellable != NULL)
++    g_object_unref (data->cancellable);
++
++  g_slice_free (UtilsSpawnData, data);
++}
++
++/* called in the thread where @cancellable was cancelled */
++static void
++utils_on_cancelled (GCancellable *cancellable,
++                    gpointer      user_data)
++{
++  UtilsSpawnData *data = (UtilsSpawnData *)user_data;
++  GError *error;
++
++  error = NULL;
++  g_warn_if_fail (g_cancellable_set_error_if_cancelled (cancellable, &error));
++  g_simple_async_result_take_error (data->simple, error);
++  g_simple_async_result_complete_in_idle (data->simple);
++  g_object_unref (data->simple);
++}
++
++static gboolean
++utils_timeout_cb (gpointer user_data)
++{
++  UtilsSpawnData *data = (UtilsSpawnData *)user_data;
++
++  data->timed_out = TRUE;
++
++  /* ok, timeout is history, make sure we don't free it in spawn_data_free() */
++  data->timeout_source = NULL;
++
++  /* we're done */
++  g_simple_async_result_complete_in_idle (data->simple);
++  g_object_unref (data->simple);
++
++  return FALSE; /* remove source */
++}
++
++static void
++utils_child_watch_cb (GPid     pid,
++                      gint     status,
++                      gpointer user_data)
++{
++  UtilsSpawnData *data = (UtilsSpawnData *)user_data;
++  gchar *buf;
++  gsize buf_size;
++
++  if (g_io_channel_read_to_end (data->child_stdout_channel, &buf, &buf_size, NULL) == G_IO_STATUS_NORMAL)
++    {
++      g_string_append_len (data->child_stdout, buf, buf_size);
++      g_free (buf);
++    }
++  if (g_io_channel_read_to_end (data->child_stderr_channel, &buf, &buf_size, NULL) == G_IO_STATUS_NORMAL)
++    {
++      g_string_append_len (data->child_stderr, buf, buf_size);
++      g_free (buf);
++    }
++
++  data->exit_status = status;
++
++  /* ok, child watch is history, make sure we don't free it in spawn_data_free() */
++  data->child_pid = 0;
++  data->child_watch_source = NULL;
++
++  /* we're done */
++  g_simple_async_result_complete_in_idle (data->simple);
++  g_object_unref (data->simple);
++}
++
++static gboolean
++utils_read_child_stderr (GIOChannel *channel,
++                         GIOCondition condition,
++                         gpointer user_data)
++{
++  UtilsSpawnData *data = (UtilsSpawnData *)user_data;
++  gchar buf[1024];
++  gsize bytes_read;
++
++  g_io_channel_read_chars (channel, buf, sizeof buf, &bytes_read, NULL);
++  g_string_append_len (data->child_stderr, buf, bytes_read);
++  return TRUE;
++}
++
++static gboolean
++utils_read_child_stdout (GIOChannel *channel,
++                         GIOCondition condition,
++                         gpointer user_data)
++{
++  UtilsSpawnData *data = (UtilsSpawnData *)user_data;
++  gchar buf[1024];
++  gsize bytes_read;
++
++  g_io_channel_read_chars (channel, buf, sizeof buf, &bytes_read, NULL);
++  g_string_append_len (data->child_stdout, buf, bytes_read);
++  return TRUE;
++}
++
++void
++polkit_backend_common_spawn (const gchar *const  *argv,
++                             guint                timeout_seconds,
++                             GCancellable        *cancellable,
++                             GAsyncReadyCallback  callback,
++                             gpointer             user_data)
++{
++  UtilsSpawnData *data;
++  GError *error;
++
++  data = g_slice_new0 (UtilsSpawnData);
++  data->timeout_seconds = timeout_seconds;
++  data->simple = g_simple_async_result_new (NULL,
++                                            callback,
++                                            user_data,
++                                            (gpointer*)polkit_backend_common_spawn);
++  data->main_context = g_main_context_get_thread_default ();
++  if (data->main_context != NULL)
++    g_main_context_ref (data->main_context);
++
++  data->cancellable = cancellable != NULL ? (GCancellable*)g_object_ref (cancellable) : NULL;
++
++  data->child_stdout = g_string_new (NULL);
++  data->child_stderr = g_string_new (NULL);
++  data->child_stdout_fd = -1;
++  data->child_stderr_fd = -1;
++
++  /* the life-cycle of UtilsSpawnData is tied to its GSimpleAsyncResult */
++  g_simple_async_result_set_op_res_gpointer (data->simple, data, (GDestroyNotify) utils_spawn_data_free);
++
++  error = NULL;
++  if (data->cancellable != NULL)
++    {
++      /* could already be cancelled */
++      error = NULL;
++      if (g_cancellable_set_error_if_cancelled (data->cancellable, &error))
++        {
++          g_simple_async_result_take_error (data->simple, error);
++          g_simple_async_result_complete_in_idle (data->simple);
++          g_object_unref (data->simple);
++          goto out;
++        }
++
++      data->cancellable_handler_id = g_cancellable_connect (data->cancellable,
++                                                            G_CALLBACK (utils_on_cancelled),
++                                                            data,
++                                                            NULL);
++    }
++
++  error = NULL;
++  if (!g_spawn_async_with_pipes (NULL, /* working directory */
++                                 (gchar **) argv,
++                                 NULL, /* envp */
++                                 G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD,
++                                 NULL, /* child_setup */
++                                 NULL, /* child_setup's user_data */
++                                 &(data->child_pid),
++                                 NULL, /* gint *stdin_fd */
++                                 &(data->child_stdout_fd),
++                                 &(data->child_stderr_fd),
++                                 &error))
++    {
++      g_prefix_error (&error, "Error spawning: ");
++      g_simple_async_result_take_error (data->simple, error);
++      g_simple_async_result_complete_in_idle (data->simple);
++      g_object_unref (data->simple);
++      goto out;
++    }
++
++  if (timeout_seconds > 0)
++    {
++      data->timeout_source = g_timeout_source_new_seconds (timeout_seconds);
++      g_source_set_priority (data->timeout_source, G_PRIORITY_DEFAULT);
++      g_source_set_callback (data->timeout_source, utils_timeout_cb, data, NULL);
++      g_source_attach (data->timeout_source, data->main_context);
++      g_source_unref (data->timeout_source);
++    }
++
++  data->child_watch_source = g_child_watch_source_new (data->child_pid);
++  g_source_set_callback (data->child_watch_source, (GSourceFunc) utils_child_watch_cb, data, NULL);
++  g_source_attach (data->child_watch_source, data->main_context);
++  g_source_unref (data->child_watch_source);
++
++  data->child_stdout_channel = g_io_channel_unix_new (data->child_stdout_fd);
++  g_io_channel_set_flags (data->child_stdout_channel, G_IO_FLAG_NONBLOCK, NULL);
++  data->child_stdout_source = g_io_create_watch (data->child_stdout_channel, G_IO_IN);
++  g_source_set_callback (data->child_stdout_source, (GSourceFunc) utils_read_child_stdout, data, NULL);
++  g_source_attach (data->child_stdout_source, data->main_context);
++  g_source_unref (data->child_stdout_source);
++
++  data->child_stderr_channel = g_io_channel_unix_new (data->child_stderr_fd);
++  g_io_channel_set_flags (data->child_stderr_channel, G_IO_FLAG_NONBLOCK, NULL);
++  data->child_stderr_source = g_io_create_watch (data->child_stderr_channel, G_IO_IN);
++  g_source_set_callback (data->child_stderr_source, (GSourceFunc) utils_read_child_stderr, data, NULL);
++  g_source_attach (data->child_stderr_source, data->main_context);
++  g_source_unref (data->child_stderr_source);
++
++ out:
++  ;
++}
++
++void
++polkit_backend_common_on_dir_monitor_changed (GFileMonitor     *monitor,
++                                              GFile            *file,
++                                              GFile            *other_file,
++                                              GFileMonitorEvent event_type,
++                                              gpointer          user_data)
++{
++  PolkitBackendJsAuthority *authority = POLKIT_BACKEND_JS_AUTHORITY (user_data);
++
++  /* TODO: maybe rate-limit so storms of events are collapsed into one with a 500ms resolution?
++   *       Because when editing a file with emacs we get 4-8 events..
++   */
++
++  if (file != NULL)
++    {
++      gchar *name;
++
++      name = g_file_get_basename (file);
++
++      /* g_print ("event_type=%d file=%p name=%s\n", event_type, file, name); */
++      if (!g_str_has_prefix (name, ".") &&
++          !g_str_has_prefix (name, "#") &&
++          g_str_has_suffix (name, ".rules") &&
++          (event_type == G_FILE_MONITOR_EVENT_CREATED ||
++           event_type == G_FILE_MONITOR_EVENT_DELETED ||
++           event_type == G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT))
++        {
++          polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
++                                        "Reloading rules");
++          polkit_backend_common_reload_scripts (authority);
++        }
++      g_free (name);
++    }
++}
++
++gboolean
++polkit_backend_common_spawn_finish (GAsyncResult   *res,
++                                    gint           *out_exit_status,
++                                    gchar         **out_standard_output,
++                                    gchar         **out_standard_error,
++                                    GError        **error)
++{
++  GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
++  UtilsSpawnData *data;
++  gboolean ret = FALSE;
++
++  g_return_val_if_fail (G_IS_ASYNC_RESULT (res), FALSE);
++  g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
++
++  g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == polkit_backend_common_spawn);
++
++  if (g_simple_async_result_propagate_error (simple, error))
++    goto out;
++
++  data = (UtilsSpawnData*)g_simple_async_result_get_op_res_gpointer (simple);
++
++  if (data->timed_out)
++    {
++      g_set_error (error,
++                   G_IO_ERROR,
++                   G_IO_ERROR_TIMED_OUT,
++                   "Timed out after %d seconds",
++                   data->timeout_seconds);
++      goto out;
++    }
++
++  if (out_exit_status != NULL)
++    *out_exit_status = data->exit_status;
++
++  if (out_standard_output != NULL)
++    *out_standard_output = g_strdup (data->child_stdout->str);
++
++  if (out_standard_error != NULL)
++    *out_standard_error = g_strdup (data->child_stderr->str);
++
++  ret = TRUE;
++
++ out:
++  return ret;
++}
++
++static const gchar *
++polkit_backend_js_authority_get_name (PolkitBackendAuthority *authority)
++{
++  return "js";
++}
++
++static const gchar *
++polkit_backend_js_authority_get_version (PolkitBackendAuthority *authority)
++{
++  return PACKAGE_VERSION;
++}
++
++static PolkitAuthorityFeatures
++polkit_backend_js_authority_get_features (PolkitBackendAuthority *authority)
++{
++  return POLKIT_AUTHORITY_FEATURES_TEMPORARY_AUTHORIZATION;
++}
++
++void
++polkit_backend_common_js_authority_class_init_common (PolkitBackendJsAuthorityClass *klass)
++{
++  GObjectClass *gobject_class;
++  PolkitBackendAuthorityClass *authority_class;
++  PolkitBackendInteractiveAuthorityClass *interactive_authority_class;
++
++  gobject_class = G_OBJECT_CLASS (klass);
++  gobject_class->finalize                               = polkit_backend_common_js_authority_finalize;
++  gobject_class->set_property                           = polkit_backend_common_js_authority_set_property;
++  gobject_class->constructed                            = polkit_backend_common_js_authority_constructed;
++
++  authority_class = POLKIT_BACKEND_AUTHORITY_CLASS (klass);
++  authority_class->get_name                             = polkit_backend_js_authority_get_name;
++  authority_class->get_version                          = polkit_backend_js_authority_get_version;
++  authority_class->get_features                         = polkit_backend_js_authority_get_features;
++
++  interactive_authority_class = POLKIT_BACKEND_INTERACTIVE_AUTHORITY_CLASS (klass);
++  interactive_authority_class->get_admin_identities     = polkit_backend_common_js_authority_get_admin_auth_identities;
++  interactive_authority_class->check_authorization_sync = polkit_backend_common_js_authority_check_authorization_sync;
++
++  g_object_class_install_property (gobject_class,
++                                   PROP_RULES_DIRS,
++                                   g_param_spec_boxed ("rules-dirs",
++                                                       NULL,
++                                                       NULL,
++                                                       G_TYPE_STRV,
++                                                       G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE));
++}
++
++gint
++polkit_backend_common_rules_file_name_cmp (const gchar *a,
++                                           const gchar *b)
++{
++  gint ret;
++  const gchar *a_base;
++  const gchar *b_base;
++
++  a_base = strrchr (a, '/');
++  b_base = strrchr (b, '/');
++
++  g_assert (a_base != NULL);
++  g_assert (b_base != NULL);
++  a_base += 1;
++  b_base += 1;
++
++  ret = g_strcmp0 (a_base, b_base);
++  if (ret == 0)
++    {
++      /* /etc wins over /usr */
++      ret = g_strcmp0 (a, b);
++      g_assert (ret != 0);
++    }
++
++  return ret;
++}
++
++const gchar *
++polkit_backend_common_get_signal_name (gint signal_number)
++{
++  switch (signal_number)
++    {
++#define _HANDLE_SIG(sig) case sig: return #sig;
++    _HANDLE_SIG (SIGHUP);
++    _HANDLE_SIG (SIGINT);
++    _HANDLE_SIG (SIGQUIT);
++    _HANDLE_SIG (SIGILL);
++    _HANDLE_SIG (SIGABRT);
++    _HANDLE_SIG (SIGFPE);
++    _HANDLE_SIG (SIGKILL);
++    _HANDLE_SIG (SIGSEGV);
++    _HANDLE_SIG (SIGPIPE);
++    _HANDLE_SIG (SIGALRM);
++    _HANDLE_SIG (SIGTERM);
++    _HANDLE_SIG (SIGUSR1);
++    _HANDLE_SIG (SIGUSR2);
++    _HANDLE_SIG (SIGCHLD);
++    _HANDLE_SIG (SIGCONT);
++    _HANDLE_SIG (SIGSTOP);
++    _HANDLE_SIG (SIGTSTP);
++    _HANDLE_SIG (SIGTTIN);
++    _HANDLE_SIG (SIGTTOU);
++    _HANDLE_SIG (SIGBUS);
++#ifdef SIGPOLL
++    _HANDLE_SIG (SIGPOLL);
++#endif
++    _HANDLE_SIG (SIGPROF);
++    _HANDLE_SIG (SIGSYS);
++    _HANDLE_SIG (SIGTRAP);
++    _HANDLE_SIG (SIGURG);
++    _HANDLE_SIG (SIGVTALRM);
++    _HANDLE_SIG (SIGXCPU);
++    _HANDLE_SIG (SIGXFSZ);
++#undef _HANDLE_SIG
++    default:
++      break;
++    }
++  return "UNKNOWN_SIGNAL";
++}
++
++void
++polkit_backend_common_spawn_cb (GObject       *source_object,
++                                GAsyncResult  *res,
++                                gpointer       user_data)
++{
++  SpawnData *data = (SpawnData *)user_data;
++  data->res = (GAsyncResult*)g_object_ref (res);
++  g_main_loop_quit (data->loop);
++}
+diff --git a/src/polkitbackend/polkitbackendcommon.h b/src/polkitbackend/polkitbackendcommon.h
+new file mode 100644
+index 0000000..6d0d267
+--- /dev/null
++++ b/src/polkitbackend/polkitbackendcommon.h
+@@ -0,0 +1,156 @@
++/*
++ * Copyright (C) 2008 Red Hat, Inc.
++ *
++ * 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 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.
++ *
++ * Author: David Zeuthen <davidz@redhat.com>
++ */
++
++#if !defined (_POLKIT_BACKEND_COMPILATION) && !defined(_POLKIT_BACKEND_INSIDE_POLKIT_BACKEND_H)
++#error "Only <polkitbackend/polkitbackend.h> can be included directly, this file may disappear or change contents."
++#endif
++
++#ifndef __POLKIT_BACKEND_COMMON_H
++#define __POLKIT_BACKEND_COMMON_H
++
++#include "config.h"
++#include <sys/wait.h>
++#include <errno.h>
++#include <pwd.h>
++#include <grp.h>
++#ifdef HAVE_NETGROUP_H
++#include <netgroup.h>
++#else
++#include <netdb.h>
++#endif
++#include <string.h>
++#include <glib/gstdio.h>
++#include <locale.h>
++#include <glib/gi18n-lib.h> //here, all things glib via glib.h (including -> gspawn.h)
++
++#include <polkit/polkit.h>
++#include "polkitbackendjsauthority.h"
++
++#include <polkit/polkitprivate.h>
++
++#ifdef HAVE_LIBSYSTEMD
++#include <systemd/sd-login.h>
++#endif /* HAVE_LIBSYSTEMD */
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++enum
++{
++  PROP_0,
++  PROP_RULES_DIRS,
++};
++
++typedef struct
++{
++  GSimpleAsyncResult *simple; /* borrowed reference */
++  GMainContext *main_context; /* may be NULL */
++
++  GCancellable *cancellable;  /* may be NULL */
++  gulong cancellable_handler_id;
++
++  GPid child_pid;
++  gint child_stdout_fd;
++  gint child_stderr_fd;
++
++  GIOChannel *child_stdout_channel;
++  GIOChannel *child_stderr_channel;
++
++  GSource *child_watch_source;
++  GSource *child_stdout_source;
++  GSource *child_stderr_source;
++
++  guint timeout_seconds;
++  gboolean timed_out;
++  GSource *timeout_source;
++
++  GString *child_stdout;
++  GString *child_stderr;
++
++  gint exit_status;
++} UtilsSpawnData;
++
++typedef struct
++{
++  GMainLoop *loop;
++  GAsyncResult *res;
++} SpawnData;
++
++void polkit_backend_common_spawn (const gchar *const  *argv,
++                                  guint                timeout_seconds,
++                                  GCancellable        *cancellable,
++                                  GAsyncReadyCallback  callback,
++                                  gpointer             user_data);
++void polkit_backend_common_spawn_cb (GObject       *source_object,
++                                     GAsyncResult  *res,
++                                     gpointer       user_data);
++gboolean polkit_backend_common_spawn_finish (GAsyncResult   *res,
++                                             gint           *out_exit_status,
++                                             gchar         **out_standard_output,
++                                             gchar         **out_standard_error,
++                                             GError        **error);
++
++void polkit_backend_common_on_dir_monitor_changed (GFileMonitor     *monitor,
++                                                   GFile            *file,
++                                                   GFile            *other_file,
++                                                   GFileMonitorEvent event_type,
++                                                   gpointer          user_data);
++
++void polkit_backend_common_js_authority_class_init_common (PolkitBackendJsAuthorityClass *klass);
++
++gint polkit_backend_common_rules_file_name_cmp (const gchar *a,
++                                                const gchar *b);
++
++const gchar *polkit_backend_common_get_signal_name (gint signal_number);
++
++/* To be provided by each JS backend, from here onwards  ---------------------------------------------- */
++
++void polkit_backend_common_reload_scripts (PolkitBackendJsAuthority *authority);
++void polkit_backend_common_js_authority_finalize (GObject *object);
++void polkit_backend_common_js_authority_constructed (GObject *object);
++GList *polkit_backend_common_js_authority_get_admin_auth_identities (PolkitBackendInteractiveAuthority *_authority,
++                                                                     PolkitSubject                     *caller,
++                                                                     PolkitSubject                     *subject,
++                                                                     PolkitIdentity                    *user_for_subject,
++                                                                     gboolean                           subject_is_local,
++                                                                     gboolean                           subject_is_active,
++                                                                     const gchar                       *action_id,
++                                                                     PolkitDetails                     *details);
++void polkit_backend_common_js_authority_set_property (GObject      *object,
++                                                      guint         property_id,
++                                                      const GValue *value,
++                                                      GParamSpec   *pspec);
++PolkitImplicitAuthorization polkit_backend_common_js_authority_check_authorization_sync (PolkitBackendInteractiveAuthority *_authority,
++                                                                                         PolkitSubject                     *caller,
++                                                                                         PolkitSubject                     *subject,
++                                                                                         PolkitIdentity                    *user_for_subject,
++                                                                                         gboolean                           subject_is_local,
++                                                                                         gboolean                           subject_is_active,
++                                                                                         const gchar                       *action_id,
++                                                                                         PolkitDetails                     *details,
++                                                                                         PolkitImplicitAuthorization        implicit);
++#ifdef __cplusplus
++}
++#endif
++
++#endif /* __POLKIT_BACKEND_COMMON_H */
++
+diff --git a/src/polkitbackend/polkitbackendduktapeauthority.c b/src/polkitbackend/polkitbackendduktapeauthority.c
+index 4b4f8fd..a2b4420 100644
+--- a/src/polkitbackend/polkitbackendduktapeauthority.c
++++ b/src/polkitbackend/polkitbackendduktapeauthority.c
+@@ -21,32 +21,12 @@
+  * Author: David Zeuthen <davidz@redhat.com>
+  */
+ 
+-#include "config.h"
+-#include <sys/wait.h>
+-#include <errno.h>
+-#include <pwd.h>
+-#include <grp.h>
+-#ifdef HAVE_NETGROUP_H
+-#include <netgroup.h>
+-#else
+-#include <netdb.h>
+-#endif
+-#include <string.h>
+-#include <glib/gstdio.h>
+-#include <locale.h>
+-#include <glib/gi18n-lib.h>
+-
+-#include <polkit/polkit.h>
+-#include "polkitbackendjsauthority.h"
+-
+-#include <polkit/polkitprivate.h>
++#include "polkitbackendcommon.h"
+ 
+-#ifdef HAVE_LIBSYSTEMD
+-#include <systemd/sd-login.h>
+-#endif /* HAVE_LIBSYSTEMD */
++#include "duktape.h"
+ 
++/* Built source and not too big to worry about deduplication */
+ #include "initjs.h" /* init.js */
+-#include "duktape.h"
+ 
+ /**
+  * SECTION:polkitbackendjsauthority
+@@ -54,10 +34,9 @@
+  * @short_description: JS Authority
+  * @stability: Unstable
+  *
+- * An implementation of #PolkitBackendAuthority that reads and
+- * evalates Javascript files and supports interaction with
+- * authentication agents (virtue of being based on
+- * #PolkitBackendInteractiveAuthority).
++ * An (Duktape-based) implementation of #PolkitBackendAuthority that reads and
++ * evaluates Javascript files and supports interaction with authentication
++ * agents (virtue of being based on #PolkitBackendInteractiveAuthority).
+  */
+ 
+ /* ---------------------------------------------------------------------------------------------------- */
+@@ -66,64 +45,16 @@ struct _PolkitBackendJsAuthorityPrivate
+ {
+   gchar **rules_dirs;
+   GFileMonitor **dir_monitors; /* NULL-terminated array of GFileMonitor instances */
+-  duk_context *cx;
+-};
+-
+-
+-static void utils_spawn (const gchar *const  *argv,
+-                         guint                timeout_seconds,
+-                         GCancellable        *cancellable,
+-                         GAsyncReadyCallback  callback,
+-                         gpointer             user_data);
+-
+-gboolean utils_spawn_finish (GAsyncResult   *res,
+-                             gint           *out_exit_status,
+-                             gchar         **out_standard_output,
+-                             gchar         **out_standard_error,
+-                             GError        **error);
+ 
+-static void on_dir_monitor_changed (GFileMonitor     *monitor,
+-                                    GFile            *file,
+-                                    GFile            *other_file,
+-                                    GFileMonitorEvent event_type,
+-                                    gpointer          user_data);
+-
+-/* ---------------------------------------------------------------------------------------------------- */
+-
+-enum
+-{
+-  PROP_0,
+-  PROP_RULES_DIRS,
++  duk_context *cx;
+ };
+ 
+ /* ---------------------------------------------------------------------------------------------------- */
+ 
+-static GList *polkit_backend_js_authority_get_admin_auth_identities (PolkitBackendInteractiveAuthority *authority,
+-                                                                     PolkitSubject                     *caller,
+-                                                                     PolkitSubject                     *subject,
+-                                                                     PolkitIdentity                    *user_for_subject,
+-                                                                     gboolean                           subject_is_local,
+-                                                                     gboolean                           subject_is_active,
+-                                                                     const gchar                       *action_id,
+-                                                                     PolkitDetails                     *details);
+-
+-static PolkitImplicitAuthorization polkit_backend_js_authority_check_authorization_sync (
+-                                                          PolkitBackendInteractiveAuthority *authority,
+-                                                          PolkitSubject                     *caller,
+-                                                          PolkitSubject                     *subject,
+-                                                          PolkitIdentity                    *user_for_subject,
+-                                                          gboolean                           subject_is_local,
+-                                                          gboolean                           subject_is_active,
+-                                                          const gchar                       *action_id,
+-                                                          PolkitDetails                     *details,
+-                                                          PolkitImplicitAuthorization        implicit);
+-
+ G_DEFINE_TYPE (PolkitBackendJsAuthority, polkit_backend_js_authority, POLKIT_BACKEND_TYPE_INTERACTIVE_AUTHORITY);
+ 
+ /* ---------------------------------------------------------------------------------------------------- */
+ 
+-/* ---------------------------------------------------------------------------------------------------- */
+-
+ static duk_ret_t js_polkit_log (duk_context *cx);
+ static duk_ret_t js_polkit_spawn (duk_context *cx);
+ static duk_ret_t js_polkit_user_is_in_netgroup (duk_context *cx);
+@@ -144,33 +75,6 @@ polkit_backend_js_authority_init (PolkitBackendJsAuthority *authority)
+                                                  PolkitBackendJsAuthorityPrivate);
+ }
+ 
+-static gint
+-rules_file_name_cmp (const gchar *a,
+-                     const gchar *b)
+-{
+-  gint ret;
+-  const gchar *a_base;
+-  const gchar *b_base;
+-
+-  a_base = strrchr (a, '/');
+-  b_base = strrchr (b, '/');
+-
+-  g_assert (a_base != NULL);
+-  g_assert (b_base != NULL);
+-  a_base += 1;
+-  b_base += 1;
+-
+-  ret = g_strcmp0 (a_base, b_base);
+-  if (ret == 0)
+-    {
+-      /* /etc wins over /usr */
+-      ret = g_strcmp0 (a, b);
+-      g_assert (ret != 0);
+-    }
+-
+-  return ret;
+-}
+-
+ static void
+ load_scripts (PolkitBackendJsAuthority  *authority)
+ {
+@@ -214,7 +118,7 @@ load_scripts (PolkitBackendJsAuthority  *authority)
+         }
+     }
+ 
+-  files = g_list_sort (files, (GCompareFunc) rules_file_name_cmp);
++  files = g_list_sort (files, (GCompareFunc) polkit_backend_common_rules_file_name_cmp);
+ 
+   for (l = files; l != NULL; l = l->next)
+     {
+@@ -258,8 +162,8 @@ load_scripts (PolkitBackendJsAuthority  *authority)
+   g_list_free_full (files, g_free);
+ }
+ 
+-static void
+-reload_scripts (PolkitBackendJsAuthority *authority)
++void
++polkit_backend_common_reload_scripts (PolkitBackendJsAuthority *authority)
+ {
+   duk_context *cx = authority->priv->cx;
+ 
+@@ -282,42 +186,6 @@ reload_scripts (PolkitBackendJsAuthority *authority)
+   g_signal_emit_by_name (authority, "changed");
+ }
+ 
+-static void
+-on_dir_monitor_changed (GFileMonitor     *monitor,
+-                        GFile            *file,
+-                        GFile            *other_file,
+-                        GFileMonitorEvent event_type,
+-                        gpointer          user_data)
+-{
+-  PolkitBackendJsAuthority *authority = POLKIT_BACKEND_JS_AUTHORITY (user_data);
+-
+-  /* TODO: maybe rate-limit so storms of events are collapsed into one with a 500ms resolution?
+-   *       Because when editing a file with emacs we get 4-8 events..
+-   */
+-
+-  if (file != NULL)
+-    {
+-      gchar *name;
+-
+-      name = g_file_get_basename (file);
+-
+-      /* g_print ("event_type=%d file=%p name=%s\n", event_type, file, name); */
+-      if (!g_str_has_prefix (name, ".") &&
+-          !g_str_has_prefix (name, "#") &&
+-          g_str_has_suffix (name, ".rules") &&
+-          (event_type == G_FILE_MONITOR_EVENT_CREATED ||
+-           event_type == G_FILE_MONITOR_EVENT_DELETED ||
+-           event_type == G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT))
+-        {
+-          polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
+-                                        "Reloading rules");
+-          reload_scripts (authority);
+-        }
+-      g_free (name);
+-    }
+-}
+-
+-
+ static void
+ setup_file_monitors (PolkitBackendJsAuthority *authority)
+ {
+@@ -349,7 +217,7 @@ setup_file_monitors (PolkitBackendJsAuthority *authority)
+         {
+           g_signal_connect (monitor,
+                             "changed",
+-                            G_CALLBACK (on_dir_monitor_changed),
++                            G_CALLBACK (polkit_backend_common_on_dir_monitor_changed),
+                             authority);
+           g_ptr_array_add (p, monitor);
+         }
+@@ -358,8 +226,8 @@ setup_file_monitors (PolkitBackendJsAuthority *authority)
+   authority->priv->dir_monitors = (GFileMonitor**) g_ptr_array_free (p, FALSE);
+ }
+ 
+-static void
+-polkit_backend_js_authority_constructed (GObject *object)
++void
++polkit_backend_common_js_authority_constructed (GObject *object)
+ {
+   PolkitBackendJsAuthority *authority = POLKIT_BACKEND_JS_AUTHORITY (object);
+   duk_context *cx;
+@@ -395,8 +263,8 @@ polkit_backend_js_authority_constructed (GObject *object)
+   g_assert_not_reached ();
+ }
+ 
+-static void
+-polkit_backend_js_authority_finalize (GObject *object)
++void
++polkit_backend_common_js_authority_finalize (GObject *object)
+ {
+   PolkitBackendJsAuthority *authority = POLKIT_BACKEND_JS_AUTHORITY (object);
+   guint n;
+@@ -405,7 +273,7 @@ polkit_backend_js_authority_finalize (GObject *object)
+     {
+       GFileMonitor *monitor = authority->priv->dir_monitors[n];
+       g_signal_handlers_disconnect_by_func (monitor,
+-                                            G_CALLBACK (on_dir_monitor_changed),
++                                            G_CALLBACK (polkit_backend_common_on_dir_monitor_changed),
+                                             authority);
+       g_object_unref (monitor);
+     }
+@@ -417,11 +285,11 @@ polkit_backend_js_authority_finalize (GObject *object)
+   G_OBJECT_CLASS (polkit_backend_js_authority_parent_class)->finalize (object);
+ }
+ 
+-static void
+-polkit_backend_js_authority_set_property (GObject      *object,
+-                                          guint         property_id,
+-                                          const GValue *value,
+-                                          GParamSpec   *pspec)
++void
++polkit_backend_common_js_authority_set_property (GObject      *object,
++                                                 guint         property_id,
++                                                 const GValue *value,
++                                                 GParamSpec   *pspec)
+ {
+   PolkitBackendJsAuthority *authority = POLKIT_BACKEND_JS_AUTHORITY (object);
+ 
+@@ -438,55 +306,10 @@ polkit_backend_js_authority_set_property (GObject      *object,
+     }
+ }
+ 
+-static const gchar *
+-polkit_backend_js_authority_get_name (PolkitBackendAuthority *authority)
+-{
+-  return "js";
+-}
+-
+-static const gchar *
+-polkit_backend_js_authority_get_version (PolkitBackendAuthority *authority)
+-{
+-  return PACKAGE_VERSION;
+-}
+-
+-static PolkitAuthorityFeatures
+-polkit_backend_js_authority_get_features (PolkitBackendAuthority *authority)
+-{
+-  return POLKIT_AUTHORITY_FEATURES_TEMPORARY_AUTHORIZATION;
+-}
+-
+ static void
+ polkit_backend_js_authority_class_init (PolkitBackendJsAuthorityClass *klass)
+ {
+-  GObjectClass *gobject_class;
+-  PolkitBackendAuthorityClass *authority_class;
+-  PolkitBackendInteractiveAuthorityClass *interactive_authority_class;
+-
+-
+-  gobject_class = G_OBJECT_CLASS (klass);
+-  gobject_class->finalize                               = polkit_backend_js_authority_finalize;
+-  gobject_class->set_property                           = polkit_backend_js_authority_set_property;
+-  gobject_class->constructed                            = polkit_backend_js_authority_constructed;
+-
+-  authority_class = POLKIT_BACKEND_AUTHORITY_CLASS (klass);
+-  authority_class->get_name                             = polkit_backend_js_authority_get_name;
+-  authority_class->get_version                          = polkit_backend_js_authority_get_version;
+-  authority_class->get_features                         = polkit_backend_js_authority_get_features;
+-
+-  interactive_authority_class = POLKIT_BACKEND_INTERACTIVE_AUTHORITY_CLASS (klass);
+-  interactive_authority_class->get_admin_identities     = polkit_backend_js_authority_get_admin_auth_identities;
+-  interactive_authority_class->check_authorization_sync = polkit_backend_js_authority_check_authorization_sync;
+-
+-  g_object_class_install_property (gobject_class,
+-                                   PROP_RULES_DIRS,
+-                                   g_param_spec_boxed ("rules-dirs",
+-                                                       NULL,
+-                                                       NULL,
+-                                                       G_TYPE_STRV,
+-                                                       G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE));
+-
+-
++  polkit_backend_common_js_authority_class_init_common (klass);
+   g_type_class_add_private (klass, sizeof (PolkitBackendJsAuthorityPrivate));
+ }
+ 
+@@ -689,15 +512,15 @@ push_action_and_details (duk_context               *cx,
+ 
+ /* ---------------------------------------------------------------------------------------------------- */
+ 
+-static GList *
+-polkit_backend_js_authority_get_admin_auth_identities (PolkitBackendInteractiveAuthority *_authority,
+-                                                       PolkitSubject                     *caller,
+-                                                       PolkitSubject                     *subject,
+-                                                       PolkitIdentity                    *user_for_subject,
+-                                                       gboolean                           subject_is_local,
+-                                                       gboolean                           subject_is_active,
+-                                                       const gchar                       *action_id,
+-                                                       PolkitDetails                     *details)
++GList *
++polkit_backend_common_js_authority_get_admin_auth_identities (PolkitBackendInteractiveAuthority *_authority,
++                                                              PolkitSubject                     *caller,
++                                                              PolkitSubject                     *subject,
++                                                              PolkitIdentity                    *user_for_subject,
++                                                              gboolean                           subject_is_local,
++                                                              gboolean                           subject_is_active,
++                                                              const gchar                       *action_id,
++                                                              PolkitDetails                     *details)
+ {
+   PolkitBackendJsAuthority *authority = POLKIT_BACKEND_JS_AUTHORITY (_authority);
+   GList *ret = NULL;
+@@ -777,16 +600,16 @@ polkit_backend_js_authority_get_admin_auth_identities (PolkitBackendInteractiveA
+ 
+ /* ---------------------------------------------------------------------------------------------------- */
+ 
+-static PolkitImplicitAuthorization
+-polkit_backend_js_authority_check_authorization_sync (PolkitBackendInteractiveAuthority *_authority,
+-                                                      PolkitSubject                     *caller,
+-                                                      PolkitSubject                     *subject,
+-                                                      PolkitIdentity                    *user_for_subject,
+-                                                      gboolean                           subject_is_local,
+-                                                      gboolean                           subject_is_active,
+-                                                      const gchar                       *action_id,
+-                                                      PolkitDetails                     *details,
+-                                                      PolkitImplicitAuthorization        implicit)
++PolkitImplicitAuthorization
++polkit_backend_common_js_authority_check_authorization_sync (PolkitBackendInteractiveAuthority *_authority,
++                                                             PolkitSubject                     *caller,
++                                                             PolkitSubject                     *subject,
++                                                             PolkitIdentity                    *user_for_subject,
++                                                             gboolean                           subject_is_local,
++                                                             gboolean                           subject_is_active,
++                                                             const gchar                       *action_id,
++                                                             PolkitDetails                     *details,
++                                                             PolkitImplicitAuthorization        implicit)
+ {
+   PolkitBackendJsAuthority *authority = POLKIT_BACKEND_JS_AUTHORITY (_authority);
+   PolkitImplicitAuthorization ret = implicit;
+@@ -864,65 +687,6 @@ js_polkit_log (duk_context *cx)
+ 
+ /* ---------------------------------------------------------------------------------------------------- */
+ 
+-static const gchar *
+-get_signal_name (gint signal_number)
+-{
+-  switch (signal_number)
+-    {
+-#define _HANDLE_SIG(sig) case sig: return #sig;
+-    _HANDLE_SIG (SIGHUP);
+-    _HANDLE_SIG (SIGINT);
+-    _HANDLE_SIG (SIGQUIT);
+-    _HANDLE_SIG (SIGILL);
+-    _HANDLE_SIG (SIGABRT);
+-    _HANDLE_SIG (SIGFPE);
+-    _HANDLE_SIG (SIGKILL);
+-    _HANDLE_SIG (SIGSEGV);
+-    _HANDLE_SIG (SIGPIPE);
+-    _HANDLE_SIG (SIGALRM);
+-    _HANDLE_SIG (SIGTERM);
+-    _HANDLE_SIG (SIGUSR1);
+-    _HANDLE_SIG (SIGUSR2);
+-    _HANDLE_SIG (SIGCHLD);
+-    _HANDLE_SIG (SIGCONT);
+-    _HANDLE_SIG (SIGSTOP);
+-    _HANDLE_SIG (SIGTSTP);
+-    _HANDLE_SIG (SIGTTIN);
+-    _HANDLE_SIG (SIGTTOU);
+-    _HANDLE_SIG (SIGBUS);
+-#ifdef SIGPOLL
+-    _HANDLE_SIG (SIGPOLL);
+-#endif
+-    _HANDLE_SIG (SIGPROF);
+-    _HANDLE_SIG (SIGSYS);
+-    _HANDLE_SIG (SIGTRAP);
+-    _HANDLE_SIG (SIGURG);
+-    _HANDLE_SIG (SIGVTALRM);
+-    _HANDLE_SIG (SIGXCPU);
+-    _HANDLE_SIG (SIGXFSZ);
+-#undef _HANDLE_SIG
+-    default:
+-      break;
+-    }
+-  return "UNKNOWN_SIGNAL";
+-}
+-
+-typedef struct
+-{
+-  GMainLoop *loop;
+-  GAsyncResult *res;
+-} SpawnData;
+-
+-static void
+-spawn_cb (GObject       *source_object,
+-          GAsyncResult  *res,
+-          gpointer       user_data)
+-{
+-  SpawnData *data = (SpawnData *)user_data;
+-  data->res = (GAsyncResult*)g_object_ref (res);
+-  g_main_loop_quit (data->loop);
+-}
+-
+ static duk_ret_t
+ js_polkit_spawn (duk_context *cx)
+ {
+@@ -962,21 +726,21 @@ js_polkit_spawn (duk_context *cx)
+   g_main_context_push_thread_default (context);
+ 
+   data.loop = loop;
+-  utils_spawn ((const gchar *const *) argv,
+-               10, /* timeout_seconds */
+-               NULL, /* cancellable */
+-               spawn_cb,
+-               &data);
++  polkit_backend_common_spawn ((const gchar *const *) argv,
++                               10, /* timeout_seconds */
++                               NULL, /* cancellable */
++                               polkit_backend_common_spawn_cb,
++                               &data);
+ 
+   g_main_loop_run (loop);
+ 
+   g_main_context_pop_thread_default (context);
+ 
+-  if (!utils_spawn_finish (data.res,
+-                           &exit_status,
+-                           &standard_output,
+-                           &standard_error,
+-                           &error))
++  if (!polkit_backend_common_spawn_finish (data.res,
++                                           &exit_status,
++                                           &standard_output,
++                                           &standard_error,
++                                           &error))
+     {
+       err_str = g_strdup_printf ("Error spawning helper: %s (%s, %d)",
+                                  error->message, g_quark_to_string (error->domain), error->code);
+@@ -998,7 +762,7 @@ js_polkit_spawn (duk_context *cx)
+         {
+           g_string_append_printf (gstr,
+                                   "Helper was signaled with signal %s (%d)",
+-                                  get_signal_name (WTERMSIG (exit_status)),
++                                  polkit_backend_common_get_signal_name (WTERMSIG (exit_status)),
+                                   WTERMSIG (exit_status));
+         }
+       g_string_append_printf (gstr, ", stdout=`%s', stderr=`%s'",
+@@ -1052,377 +816,3 @@ js_polkit_user_is_in_netgroup (duk_context *cx)
+ }
+ 
+ /* ---------------------------------------------------------------------------------------------------- */
+-
+-typedef struct
+-{
+-  GSimpleAsyncResult *simple; /* borrowed reference */
+-  GMainContext *main_context; /* may be NULL */
+-
+-  GCancellable *cancellable;  /* may be NULL */
+-  gulong cancellable_handler_id;
+-
+-  GPid child_pid;
+-  gint child_stdout_fd;
+-  gint child_stderr_fd;
+-
+-  GIOChannel *child_stdout_channel;
+-  GIOChannel *child_stderr_channel;
+-
+-  GSource *child_watch_source;
+-  GSource *child_stdout_source;
+-  GSource *child_stderr_source;
+-
+-  guint timeout_seconds;
+-  gboolean timed_out;
+-  GSource *timeout_source;
+-
+-  GString *child_stdout;
+-  GString *child_stderr;
+-
+-  gint exit_status;
+-} UtilsSpawnData;
+-
+-static void
+-utils_child_watch_from_release_cb (GPid     pid,
+-                                   gint     status,
+-                                   gpointer user_data)
+-{
+-}
+-
+-static void
+-utils_spawn_data_free (UtilsSpawnData *data)
+-{
+-  if (data->timeout_source != NULL)
+-    {
+-      g_source_destroy (data->timeout_source);
+-      data->timeout_source = NULL;
+-    }
+-
+-  /* Nuke the child, if necessary */
+-  if (data->child_watch_source != NULL)
+-    {
+-      g_source_destroy (data->child_watch_source);
+-      data->child_watch_source = NULL;
+-    }
+-
+-  if (data->child_pid != 0)
+-    {
+-      GSource *source;
+-      kill (data->child_pid, SIGTERM);
+-      /* OK, we need to reap for the child ourselves - we don't want
+-       * to use waitpid() because that might block the calling
+-       * thread (the child might handle SIGTERM and use several
+-       * seconds for cleanup/rollback).
+-       *
+-       * So we use GChildWatch instead.
+-       *
+-       * Avoid taking a references to ourselves. but note that we need
+-       * to pass the GSource so we can nuke it once handled.
+-       */
+-      source = g_child_watch_source_new (data->child_pid);
+-      g_source_set_callback (source,
+-                             (GSourceFunc) utils_child_watch_from_release_cb,
+-                             source,
+-                             (GDestroyNotify) g_source_destroy);
+-      g_source_attach (source, data->main_context);
+-      g_source_unref (source);
+-      data->child_pid = 0;
+-    }
+-
+-  if (data->child_stdout != NULL)
+-    {
+-      g_string_free (data->child_stdout, TRUE);
+-      data->child_stdout = NULL;
+-    }
+-
+-  if (data->child_stderr != NULL)
+-    {
+-      g_string_free (data->child_stderr, TRUE);
+-      data->child_stderr = NULL;
+-    }
+-
+-  if (data->child_stdout_channel != NULL)
+-    {
+-      g_io_channel_unref (data->child_stdout_channel);
+-      data->child_stdout_channel = NULL;
+-    }
+-  if (data->child_stderr_channel != NULL)
+-    {
+-      g_io_channel_unref (data->child_stderr_channel);
+-      data->child_stderr_channel = NULL;
+-    }
+-
+-  if (data->child_stdout_source != NULL)
+-    {
+-      g_source_destroy (data->child_stdout_source);
+-      data->child_stdout_source = NULL;
+-    }
+-  if (data->child_stderr_source != NULL)
+-    {
+-      g_source_destroy (data->child_stderr_source);
+-      data->child_stderr_source = NULL;
+-    }
+-
+-  if (data->child_stdout_fd != -1)
+-    {
+-      g_warn_if_fail (close (data->child_stdout_fd) == 0);
+-      data->child_stdout_fd = -1;
+-    }
+-  if (data->child_stderr_fd != -1)
+-    {
+-      g_warn_if_fail (close (data->child_stderr_fd) == 0);
+-      data->child_stderr_fd = -1;
+-    }
+-
+-  if (data->cancellable_handler_id > 0)
+-    {
+-      g_cancellable_disconnect (data->cancellable, data->cancellable_handler_id);
+-      data->cancellable_handler_id = 0;
+-    }
+-
+-  if (data->main_context != NULL)
+-    g_main_context_unref (data->main_context);
+-
+-  if (data->cancellable != NULL)
+-    g_object_unref (data->cancellable);
+-
+-  g_slice_free (UtilsSpawnData, data);
+-}
+-
+-/* called in the thread where @cancellable was cancelled */
+-static void
+-utils_on_cancelled (GCancellable *cancellable,
+-                    gpointer      user_data)
+-{
+-  UtilsSpawnData *data = (UtilsSpawnData *)user_data;
+-  GError *error;
+-
+-  error = NULL;
+-  g_warn_if_fail (g_cancellable_set_error_if_cancelled (cancellable, &error));
+-  g_simple_async_result_take_error (data->simple, error);
+-  g_simple_async_result_complete_in_idle (data->simple);
+-  g_object_unref (data->simple);
+-}
+-
+-static gboolean
+-utils_read_child_stderr (GIOChannel *channel,
+-                         GIOCondition condition,
+-                         gpointer user_data)
+-{
+-  UtilsSpawnData *data = (UtilsSpawnData *)user_data;
+-  gchar buf[1024];
+-  gsize bytes_read;
+-
+-  g_io_channel_read_chars (channel, buf, sizeof buf, &bytes_read, NULL);
+-  g_string_append_len (data->child_stderr, buf, bytes_read);
+-  return TRUE;
+-}
+-
+-static gboolean
+-utils_read_child_stdout (GIOChannel *channel,
+-                         GIOCondition condition,
+-                         gpointer user_data)
+-{
+-  UtilsSpawnData *data = (UtilsSpawnData *)user_data;
+-  gchar buf[1024];
+-  gsize bytes_read;
+-
+-  g_io_channel_read_chars (channel, buf, sizeof buf, &bytes_read, NULL);
+-  g_string_append_len (data->child_stdout, buf, bytes_read);
+-  return TRUE;
+-}
+-
+-static void
+-utils_child_watch_cb (GPid     pid,
+-                      gint     status,
+-                      gpointer user_data)
+-{
+-  UtilsSpawnData *data = (UtilsSpawnData *)user_data;
+-  gchar *buf;
+-  gsize buf_size;
+-
+-  if (g_io_channel_read_to_end (data->child_stdout_channel, &buf, &buf_size, NULL) == G_IO_STATUS_NORMAL)
+-    {
+-      g_string_append_len (data->child_stdout, buf, buf_size);
+-      g_free (buf);
+-    }
+-  if (g_io_channel_read_to_end (data->child_stderr_channel, &buf, &buf_size, NULL) == G_IO_STATUS_NORMAL)
+-    {
+-      g_string_append_len (data->child_stderr, buf, buf_size);
+-      g_free (buf);
+-    }
+-
+-  data->exit_status = status;
+-
+-  /* ok, child watch is history, make sure we don't free it in spawn_data_free() */
+-  data->child_pid = 0;
+-  data->child_watch_source = NULL;
+-
+-  /* we're done */
+-  g_simple_async_result_complete_in_idle (data->simple);
+-  g_object_unref (data->simple);
+-}
+-
+-static gboolean
+-utils_timeout_cb (gpointer user_data)
+-{
+-  UtilsSpawnData *data = (UtilsSpawnData *)user_data;
+-
+-  data->timed_out = TRUE;
+-
+-  /* ok, timeout is history, make sure we don't free it in spawn_data_free() */
+-  data->timeout_source = NULL;
+-
+-  /* we're done */
+-  g_simple_async_result_complete_in_idle (data->simple);
+-  g_object_unref (data->simple);
+-
+-  return FALSE; /* remove source */
+-}
+-
+-static void
+-utils_spawn (const gchar *const  *argv,
+-             guint                timeout_seconds,
+-             GCancellable        *cancellable,
+-             GAsyncReadyCallback  callback,
+-             gpointer             user_data)
+-{
+-  UtilsSpawnData *data;
+-  GError *error;
+-
+-  data = g_slice_new0 (UtilsSpawnData);
+-  data->timeout_seconds = timeout_seconds;
+-  data->simple = g_simple_async_result_new (NULL,
+-                                            callback,
+-                                            user_data,
+-                                            (gpointer*)utils_spawn);
+-  data->main_context = g_main_context_get_thread_default ();
+-  if (data->main_context != NULL)
+-    g_main_context_ref (data->main_context);
+-
+-  data->cancellable = cancellable != NULL ? (GCancellable*)g_object_ref (cancellable) : NULL;
+-
+-  data->child_stdout = g_string_new (NULL);
+-  data->child_stderr = g_string_new (NULL);
+-  data->child_stdout_fd = -1;
+-  data->child_stderr_fd = -1;
+-
+-  /* the life-cycle of UtilsSpawnData is tied to its GSimpleAsyncResult */
+-  g_simple_async_result_set_op_res_gpointer (data->simple, data, (GDestroyNotify) utils_spawn_data_free);
+-
+-  error = NULL;
+-  if (data->cancellable != NULL)
+-    {
+-      /* could already be cancelled */
+-      error = NULL;
+-      if (g_cancellable_set_error_if_cancelled (data->cancellable, &error))
+-        {
+-          g_simple_async_result_take_error (data->simple, error);
+-          g_simple_async_result_complete_in_idle (data->simple);
+-          g_object_unref (data->simple);
+-          goto out;
+-        }
+-
+-      data->cancellable_handler_id = g_cancellable_connect (data->cancellable,
+-                                                            G_CALLBACK (utils_on_cancelled),
+-                                                            data,
+-                                                            NULL);
+-    }
+-
+-  error = NULL;
+-  if (!g_spawn_async_with_pipes (NULL, /* working directory */
+-                                 (gchar **) argv,
+-                                 NULL, /* envp */
+-                                 G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD,
+-                                 NULL, /* child_setup */
+-                                 NULL, /* child_setup's user_data */
+-                                 &(data->child_pid),
+-                                 NULL, /* gint *stdin_fd */
+-                                 &(data->child_stdout_fd),
+-                                 &(data->child_stderr_fd),
+-                                 &error))
+-    {
+-      g_prefix_error (&error, "Error spawning: ");
+-      g_simple_async_result_take_error (data->simple, error);
+-      g_simple_async_result_complete_in_idle (data->simple);
+-      g_object_unref (data->simple);
+-      goto out;
+-    }
+-
+-  if (timeout_seconds > 0)
+-    {
+-      data->timeout_source = g_timeout_source_new_seconds (timeout_seconds);
+-      g_source_set_priority (data->timeout_source, G_PRIORITY_DEFAULT);
+-      g_source_set_callback (data->timeout_source, utils_timeout_cb, data, NULL);
+-      g_source_attach (data->timeout_source, data->main_context);
+-      g_source_unref (data->timeout_source);
+-    }
+-
+-  data->child_watch_source = g_child_watch_source_new (data->child_pid);
+-  g_source_set_callback (data->child_watch_source, (GSourceFunc) utils_child_watch_cb, data, NULL);
+-  g_source_attach (data->child_watch_source, data->main_context);
+-  g_source_unref (data->child_watch_source);
+-
+-  data->child_stdout_channel = g_io_channel_unix_new (data->child_stdout_fd);
+-  g_io_channel_set_flags (data->child_stdout_channel, G_IO_FLAG_NONBLOCK, NULL);
+-  data->child_stdout_source = g_io_create_watch (data->child_stdout_channel, G_IO_IN);
+-  g_source_set_callback (data->child_stdout_source, (GSourceFunc) utils_read_child_stdout, data, NULL);
+-  g_source_attach (data->child_stdout_source, data->main_context);
+-  g_source_unref (data->child_stdout_source);
+-
+-  data->child_stderr_channel = g_io_channel_unix_new (data->child_stderr_fd);
+-  g_io_channel_set_flags (data->child_stderr_channel, G_IO_FLAG_NONBLOCK, NULL);
+-  data->child_stderr_source = g_io_create_watch (data->child_stderr_channel, G_IO_IN);
+-  g_source_set_callback (data->child_stderr_source, (GSourceFunc) utils_read_child_stderr, data, NULL);
+-  g_source_attach (data->child_stderr_source, data->main_context);
+-  g_source_unref (data->child_stderr_source);
+-
+- out:
+-  ;
+-}
+-
+-gboolean
+-utils_spawn_finish (GAsyncResult   *res,
+-                    gint           *out_exit_status,
+-                    gchar         **out_standard_output,
+-                    gchar         **out_standard_error,
+-                    GError        **error)
+-{
+-  GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
+-  UtilsSpawnData *data;
+-  gboolean ret = FALSE;
+-
+-  g_return_val_if_fail (G_IS_ASYNC_RESULT (res), FALSE);
+-  g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+-
+-  g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == utils_spawn);
+-
+-  if (g_simple_async_result_propagate_error (simple, error))
+-    goto out;
+-
+-  data = (UtilsSpawnData*)g_simple_async_result_get_op_res_gpointer (simple);
+-
+-  if (data->timed_out)
+-    {
+-      g_set_error (error,
+-                   G_IO_ERROR,
+-                   G_IO_ERROR_TIMED_OUT,
+-                   "Timed out after %d seconds",
+-                   data->timeout_seconds);
+-      goto out;
+-    }
+-
+-  if (out_exit_status != NULL)
+-    *out_exit_status = data->exit_status;
+-
+-  if (out_standard_output != NULL)
+-    *out_standard_output = g_strdup (data->child_stdout->str);
+-
+-  if (out_standard_error != NULL)
+-    *out_standard_error = g_strdup (data->child_stderr->str);
+-
+-  ret = TRUE;
+-
+- out:
+-  return ret;
+-}
+diff --git a/src/polkitbackend/polkitbackendjsauthority.cpp b/src/polkitbackend/polkitbackendjsauthority.cpp
+index ca17108..e28091d 100644
+--- a/src/polkitbackend/polkitbackendjsauthority.cpp
++++ b/src/polkitbackend/polkitbackendjsauthority.cpp
+@@ -19,29 +19,7 @@
+  * Author: David Zeuthen <davidz@redhat.com>
+  */
+ 
+-#include "config.h"
+-#include <sys/wait.h>
+-#include <errno.h>
+-#include <pwd.h>
+-#include <grp.h>
+-#ifdef HAVE_NETGROUP_H
+-#include <netgroup.h>
+-#else
+-#include <netdb.h>
+-#endif
+-#include <string.h>
+-#include <glib/gstdio.h>
+-#include <locale.h>
+-#include <glib/gi18n-lib.h>
+-
+-#include <polkit/polkit.h>
+-#include "polkitbackendjsauthority.h"
+-
+-#include <polkit/polkitprivate.h>
+-
+-#ifdef HAVE_LIBSYSTEMD
+-#include <systemd/sd-login.h>
+-#endif /* HAVE_LIBSYSTEMD */
++#include "polkitbackendcommon.h"
+ 
+ #include <js/CompilationAndEvaluation.h>
+ #include <js/ContextOptions.h>
+@@ -52,6 +30,7 @@
+ #include <js/Array.h>
+ #include <jsapi.h>
+ 
++/* Built source and not too big to worry about deduplication */
+ #include "initjs.h" /* init.js */
+ 
+ #ifdef JSGC_USE_EXACT_ROOTING
+@@ -67,10 +46,9 @@
+  * @short_description: JS Authority
+  * @stability: Unstable
+  *
+- * An implementation of #PolkitBackendAuthority that reads and
+- * evalates Javascript files and supports interaction with
+- * authentication agents (virtue of being based on
+- * #PolkitBackendInteractiveAuthority).
++ * An (SpiderMonkey-based) implementation of #PolkitBackendAuthority that reads
++ * and evaluates Javascript files and supports interaction with authentication
++ * agents (virtue of being based on #PolkitBackendInteractiveAuthority).
+  */
+ 
+ /* ---------------------------------------------------------------------------------------------------- */
+@@ -100,57 +78,11 @@ static bool execute_script_with_runaway_killer (PolkitBackendJsAuthority *author
+                                     JS::HandleScript                 script,
+                                     JS::MutableHandleValue           rval);
+ 
+-static void utils_spawn (const gchar *const  *argv,
+-                         guint                timeout_seconds,
+-                         GCancellable        *cancellable,
+-                         GAsyncReadyCallback  callback,
+-                         gpointer             user_data);
+-
+-gboolean utils_spawn_finish (GAsyncResult   *res,
+-                             gint           *out_exit_status,
+-                             gchar         **out_standard_output,
+-                             gchar         **out_standard_error,
+-                             GError        **error);
+-
+-static void on_dir_monitor_changed (GFileMonitor     *monitor,
+-                                    GFile            *file,
+-                                    GFile            *other_file,
+-                                    GFileMonitorEvent event_type,
+-                                    gpointer          user_data);
+-
+-/* ---------------------------------------------------------------------------------------------------- */
+-
+-enum
+-{
+-  PROP_0,
+-  PROP_RULES_DIRS,
+-};
+-
+ /* ---------------------------------------------------------------------------------------------------- */
+ 
+ static gpointer runaway_killer_thread_func (gpointer user_data);
+ static void runaway_killer_terminate (PolkitBackendJsAuthority *authority);
+ 
+-static GList *polkit_backend_js_authority_get_admin_auth_identities (PolkitBackendInteractiveAuthority *authority,
+-                                                                     PolkitSubject                     *caller,
+-                                                                     PolkitSubject                     *subject,
+-                                                                     PolkitIdentity                    *user_for_subject,
+-                                                                     gboolean                           subject_is_local,
+-                                                                     gboolean                           subject_is_active,
+-                                                                     const gchar                       *action_id,
+-                                                                     PolkitDetails                     *details);
+-
+-static PolkitImplicitAuthorization polkit_backend_js_authority_check_authorization_sync (
+-                                                          PolkitBackendInteractiveAuthority *authority,
+-                                                          PolkitSubject                     *caller,
+-                                                          PolkitSubject                     *subject,
+-                                                          PolkitIdentity                    *user_for_subject,
+-                                                          gboolean                           subject_is_local,
+-                                                          gboolean                           subject_is_active,
+-                                                          const gchar                       *action_id,
+-                                                          PolkitDetails                     *details,
+-                                                          PolkitImplicitAuthorization        implicit);
+-
+ G_DEFINE_TYPE (PolkitBackendJsAuthority, polkit_backend_js_authority, POLKIT_BACKEND_TYPE_INTERACTIVE_AUTHORITY);
+ 
+ /* ---------------------------------------------------------------------------------------------------- */
+@@ -229,33 +161,6 @@ polkit_backend_js_authority_init (PolkitBackendJsAuthority *authority)
+                                                  PolkitBackendJsAuthorityPrivate);
+ }
+ 
+-static gint
+-rules_file_name_cmp (const gchar *a,
+-                     const gchar *b)
+-{
+-  gint ret;
+-  const gchar *a_base;
+-  const gchar *b_base;
+-
+-  a_base = strrchr (a, '/');
+-  b_base = strrchr (b, '/');
+-
+-  g_assert (a_base != NULL);
+-  g_assert (b_base != NULL);
+-  a_base += 1;
+-  b_base += 1;
+-
+-  ret = g_strcmp0 (a_base, b_base);
+-  if (ret == 0)
+-    {
+-      /* /etc wins over /usr */
+-      ret = g_strcmp0 (a, b);
+-      g_assert (ret != 0);
+-    }
+-
+-  return ret;
+-}
+-
+ /* authority->priv->cx must be within a request */
+ static void
+ load_scripts (PolkitBackendJsAuthority  *authority)
+@@ -299,7 +204,7 @@ load_scripts (PolkitBackendJsAuthority  *authority)
+         }
+     }
+ 
+-  files = g_list_sort (files, (GCompareFunc) rules_file_name_cmp);
++  files = g_list_sort (files, (GCompareFunc) polkit_backend_common_rules_file_name_cmp);
+ 
+   for (l = files; l != NULL; l = l->next)
+     {
+@@ -365,8 +270,8 @@ load_scripts (PolkitBackendJsAuthority  *authority)
+   g_list_free_full (files, g_free);
+ }
+ 
+-static void
+-reload_scripts (PolkitBackendJsAuthority *authority)
++void
++polkit_backend_common_reload_scripts (PolkitBackendJsAuthority *authority)
+ {
+   JS::RootedValueArray<1> args(authority->priv->cx);
+   JS::RootedValue rval(authority->priv->cx);
+@@ -395,42 +300,6 @@ reload_scripts (PolkitBackendJsAuthority *authority)
+   g_signal_emit_by_name (authority, "changed");
+ }
+ 
+-static void
+-on_dir_monitor_changed (GFileMonitor     *monitor,
+-                        GFile            *file,
+-                        GFile            *other_file,
+-                        GFileMonitorEvent event_type,
+-                        gpointer          user_data)
+-{
+-  PolkitBackendJsAuthority *authority = POLKIT_BACKEND_JS_AUTHORITY (user_data);
+-
+-  /* TODO: maybe rate-limit so storms of events are collapsed into one with a 500ms resolution?
+-   *       Because when editing a file with emacs we get 4-8 events..
+-   */
+-
+-  if (file != NULL)
+-    {
+-      gchar *name;
+-
+-      name = g_file_get_basename (file);
+-
+-      /* g_print ("event_type=%d file=%p name=%s\n", event_type, file, name); */
+-      if (!g_str_has_prefix (name, ".") &&
+-          !g_str_has_prefix (name, "#") &&
+-          g_str_has_suffix (name, ".rules") &&
+-          (event_type == G_FILE_MONITOR_EVENT_CREATED ||
+-           event_type == G_FILE_MONITOR_EVENT_DELETED ||
+-           event_type == G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT))
+-        {
+-          polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
+-                                        "Reloading rules");
+-          reload_scripts (authority);
+-        }
+-      g_free (name);
+-    }
+-}
+-
+-
+ static void
+ setup_file_monitors (PolkitBackendJsAuthority *authority)
+ {
+@@ -462,7 +331,7 @@ setup_file_monitors (PolkitBackendJsAuthority *authority)
+         {
+           g_signal_connect (monitor,
+                             "changed",
+-                            G_CALLBACK (on_dir_monitor_changed),
++                            G_CALLBACK (polkit_backend_common_on_dir_monitor_changed),
+                             authority);
+           g_ptr_array_add (p, monitor);
+         }
+@@ -471,8 +340,8 @@ setup_file_monitors (PolkitBackendJsAuthority *authority)
+   authority->priv->dir_monitors = (GFileMonitor**) g_ptr_array_free (p, FALSE);
+ }
+ 
+-static void
+-polkit_backend_js_authority_constructed (GObject *object)
++void
++polkit_backend_common_js_authority_constructed (GObject *object)
+ {
+   PolkitBackendJsAuthority *authority = POLKIT_BACKEND_JS_AUTHORITY (object);
+ 
+@@ -561,8 +430,8 @@ polkit_backend_js_authority_constructed (GObject *object)
+   g_assert_not_reached ();
+ }
+ 
+-static void
+-polkit_backend_js_authority_finalize (GObject *object)
++void
++polkit_backend_common_js_authority_finalize (GObject *object)
+ {
+   PolkitBackendJsAuthority *authority = POLKIT_BACKEND_JS_AUTHORITY (object);
+   guint n;
+@@ -577,7 +446,7 @@ polkit_backend_js_authority_finalize (GObject *object)
+     {
+       GFileMonitor *monitor = authority->priv->dir_monitors[n];
+       g_signal_handlers_disconnect_by_func (monitor,
+-                                            (gpointer*)G_CALLBACK (on_dir_monitor_changed),
++                                            (gpointer*)G_CALLBACK (polkit_backend_common_on_dir_monitor_changed),
+                                             authority);
+       g_object_unref (monitor);
+     }
+@@ -594,11 +463,11 @@ polkit_backend_js_authority_finalize (GObject *object)
+   G_OBJECT_CLASS (polkit_backend_js_authority_parent_class)->finalize (object);
+ }
+ 
+-static void
+-polkit_backend_js_authority_set_property (GObject      *object,
+-                                          guint         property_id,
+-                                          const GValue *value,
+-                                          GParamSpec   *pspec)
++void
++polkit_backend_common_js_authority_set_property (GObject      *object,
++                                                 guint         property_id,
++                                                 const GValue *value,
++                                                 GParamSpec   *pspec)
+ {
+   PolkitBackendJsAuthority *authority = POLKIT_BACKEND_JS_AUTHORITY (object);
+ 
+@@ -615,57 +484,12 @@ polkit_backend_js_authority_set_property (GObject      *object,
+     }
+ }
+ 
+-static const gchar *
+-polkit_backend_js_authority_get_name (PolkitBackendAuthority *authority)
+-{
+-  return "js";
+-}
+-
+-static const gchar *
+-polkit_backend_js_authority_get_version (PolkitBackendAuthority *authority)
+-{
+-  return PACKAGE_VERSION;
+-}
+-
+-static PolkitAuthorityFeatures
+-polkit_backend_js_authority_get_features (PolkitBackendAuthority *authority)
+-{
+-  return POLKIT_AUTHORITY_FEATURES_TEMPORARY_AUTHORIZATION;
+-}
+-
+ static void
+ polkit_backend_js_authority_class_init (PolkitBackendJsAuthorityClass *klass)
+ {
+-  GObjectClass *gobject_class;
+-  PolkitBackendAuthorityClass *authority_class;
+-  PolkitBackendInteractiveAuthorityClass *interactive_authority_class;
+-
+-
+-  gobject_class = G_OBJECT_CLASS (klass);
+-  gobject_class->finalize                               = polkit_backend_js_authority_finalize;
+-  gobject_class->set_property                           = polkit_backend_js_authority_set_property;
+-  gobject_class->constructed                            = polkit_backend_js_authority_constructed;
+-
+-  authority_class = POLKIT_BACKEND_AUTHORITY_CLASS (klass);
+-  authority_class->get_name                             = polkit_backend_js_authority_get_name;
+-  authority_class->get_version                          = polkit_backend_js_authority_get_version;
+-  authority_class->get_features                         = polkit_backend_js_authority_get_features;
+-
+-  interactive_authority_class = POLKIT_BACKEND_INTERACTIVE_AUTHORITY_CLASS (klass);
+-  interactive_authority_class->get_admin_identities     = polkit_backend_js_authority_get_admin_auth_identities;
+-  interactive_authority_class->check_authorization_sync = polkit_backend_js_authority_check_authorization_sync;
+-
+-  g_object_class_install_property (gobject_class,
+-                                   PROP_RULES_DIRS,
+-                                   g_param_spec_boxed ("rules-dirs",
+-                                                       NULL,
+-                                                       NULL,
+-                                                       G_TYPE_STRV,
+-                                                       GParamFlags(G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE)));
+-
++  polkit_backend_common_js_authority_class_init_common (klass);
+ 
+   g_type_class_add_private (klass, sizeof (PolkitBackendJsAuthorityPrivate));
+-
+   JS_Init ();
+ }
+ 
+@@ -1099,15 +923,15 @@ call_js_function_with_runaway_killer (PolkitBackendJsAuthority *authority,
+ 
+ /* ---------------------------------------------------------------------------------------------------- */
+ 
+-static GList *
+-polkit_backend_js_authority_get_admin_auth_identities (PolkitBackendInteractiveAuthority *_authority,
+-                                                       PolkitSubject                     *caller,
+-                                                       PolkitSubject                     *subject,
+-                                                       PolkitIdentity                    *user_for_subject,
+-                                                       gboolean                           subject_is_local,
+-                                                       gboolean                           subject_is_active,
+-                                                       const gchar                       *action_id,
+-                                                       PolkitDetails                     *details)
++GList *
++polkit_backend_common_js_authority_get_admin_auth_identities (PolkitBackendInteractiveAuthority *_authority,
++                                                              PolkitSubject                     *caller,
++                                                              PolkitSubject                     *subject,
++                                                              PolkitIdentity                    *user_for_subject,
++                                                              gboolean                           subject_is_local,
++                                                              gboolean                           subject_is_active,
++                                                              const gchar                       *action_id,
++                                                              PolkitDetails                     *details)
+ {
+   PolkitBackendJsAuthority *authority = POLKIT_BACKEND_JS_AUTHORITY (_authority);
+   GList *ret = NULL;
+@@ -1202,16 +1026,16 @@ polkit_backend_js_authority_get_admin_auth_identities (PolkitBackendInteractiveA
+ 
+ /* ---------------------------------------------------------------------------------------------------- */
+ 
+-static PolkitImplicitAuthorization
+-polkit_backend_js_authority_check_authorization_sync (PolkitBackendInteractiveAuthority *_authority,
+-                                                      PolkitSubject                     *caller,
+-                                                      PolkitSubject                     *subject,
+-                                                      PolkitIdentity                    *user_for_subject,
+-                                                      gboolean                           subject_is_local,
+-                                                      gboolean                           subject_is_active,
+-                                                      const gchar                       *action_id,
+-                                                      PolkitDetails                     *details,
+-                                                      PolkitImplicitAuthorization        implicit)
++PolkitImplicitAuthorization
++polkit_backend_common_js_authority_check_authorization_sync (PolkitBackendInteractiveAuthority *_authority,
++                                                             PolkitSubject                     *caller,
++                                                             PolkitSubject                     *subject,
++                                                             PolkitIdentity                    *user_for_subject,
++                                                             gboolean                           subject_is_local,
++                                                             gboolean                           subject_is_active,
++                                                             const gchar                       *action_id,
++                                                             PolkitDetails                     *details,
++                                                             PolkitImplicitAuthorization        implicit)
+ {
+   PolkitBackendJsAuthority *authority = POLKIT_BACKEND_JS_AUTHORITY (_authority);
+   PolkitImplicitAuthorization ret = implicit;
+@@ -1324,65 +1148,6 @@ js_polkit_log (JSContext  *cx,
+ 
+ /* ---------------------------------------------------------------------------------------------------- */
+ 
+-static const gchar *
+-get_signal_name (gint signal_number)
+-{
+-  switch (signal_number)
+-    {
+-#define _HANDLE_SIG(sig) case sig: return #sig;
+-    _HANDLE_SIG (SIGHUP);
+-    _HANDLE_SIG (SIGINT);
+-    _HANDLE_SIG (SIGQUIT);
+-    _HANDLE_SIG (SIGILL);
+-    _HANDLE_SIG (SIGABRT);
+-    _HANDLE_SIG (SIGFPE);
+-    _HANDLE_SIG (SIGKILL);
+-    _HANDLE_SIG (SIGSEGV);
+-    _HANDLE_SIG (SIGPIPE);
+-    _HANDLE_SIG (SIGALRM);
+-    _HANDLE_SIG (SIGTERM);
+-    _HANDLE_SIG (SIGUSR1);
+-    _HANDLE_SIG (SIGUSR2);
+-    _HANDLE_SIG (SIGCHLD);
+-    _HANDLE_SIG (SIGCONT);
+-    _HANDLE_SIG (SIGSTOP);
+-    _HANDLE_SIG (SIGTSTP);
+-    _HANDLE_SIG (SIGTTIN);
+-    _HANDLE_SIG (SIGTTOU);
+-    _HANDLE_SIG (SIGBUS);
+-#ifdef SIGPOLL
+-    _HANDLE_SIG (SIGPOLL);
+-#endif
+-    _HANDLE_SIG (SIGPROF);
+-    _HANDLE_SIG (SIGSYS);
+-    _HANDLE_SIG (SIGTRAP);
+-    _HANDLE_SIG (SIGURG);
+-    _HANDLE_SIG (SIGVTALRM);
+-    _HANDLE_SIG (SIGXCPU);
+-    _HANDLE_SIG (SIGXFSZ);
+-#undef _HANDLE_SIG
+-    default:
+-      break;
+-    }
+-  return "UNKNOWN_SIGNAL";
+-}
+-
+-typedef struct
+-{
+-  GMainLoop *loop;
+-  GAsyncResult *res;
+-} SpawnData;
+-
+-static void
+-spawn_cb (GObject       *source_object,
+-          GAsyncResult  *res,
+-          gpointer       user_data)
+-{
+-  SpawnData *data = (SpawnData *)user_data;
+-  data->res = (GAsyncResult*)g_object_ref (res);
+-  g_main_loop_quit (data->loop);
+-}
+-
+ static bool
+ js_polkit_spawn (JSContext  *cx,
+                  unsigned    js_argc,
+@@ -1440,21 +1205,21 @@ js_polkit_spawn (JSContext  *cx,
+   g_main_context_push_thread_default (context);
+ 
+   data.loop = loop;
+-  utils_spawn ((const gchar *const *) argv,
+-               10, /* timeout_seconds */
+-               NULL, /* cancellable */
+-               spawn_cb,
+-               &data);
++  polkit_backend_common_spawn ((const gchar *const *) argv,
++                               10, /* timeout_seconds */
++                               NULL, /* cancellable */
++                               polkit_backend_common_spawn_cb,
++                               &data);
+ 
+   g_main_loop_run (loop);
+ 
+   g_main_context_pop_thread_default (context);
+ 
+-  if (!utils_spawn_finish (data.res,
+-                           &exit_status,
+-                           &standard_output,
+-                           &standard_error,
+-                           &error))
++  if (!polkit_backend_common_spawn_finish (data.res,
++                                           &exit_status,
++                                           &standard_output,
++                                           &standard_error,
++                                           &error))
+     {
+       JS_ReportErrorUTF8 (cx,
+                       "Error spawning helper: %s (%s, %d)",
+@@ -1477,7 +1242,7 @@ js_polkit_spawn (JSContext  *cx,
+         {
+           g_string_append_printf (gstr,
+                                   "Helper was signaled with signal %s (%d)",
+-                                  get_signal_name (WTERMSIG (exit_status)),
++                                  polkit_backend_common_get_signal_name (WTERMSIG (exit_status)),
+                                   WTERMSIG (exit_status));
+         }
+       g_string_append_printf (gstr, ", stdout=`%s', stderr=`%s'",
+@@ -1542,381 +1307,5 @@ js_polkit_user_is_in_netgroup (JSContext  *cx,
+   return ret;
+ }
+ 
+-
+-
+ /* ---------------------------------------------------------------------------------------------------- */
+ 
+-typedef struct
+-{
+-  GSimpleAsyncResult *simple; /* borrowed reference */
+-  GMainContext *main_context; /* may be NULL */
+-
+-  GCancellable *cancellable;  /* may be NULL */
+-  gulong cancellable_handler_id;
+-
+-  GPid child_pid;
+-  gint child_stdout_fd;
+-  gint child_stderr_fd;
+-
+-  GIOChannel *child_stdout_channel;
+-  GIOChannel *child_stderr_channel;
+-
+-  GSource *child_watch_source;
+-  GSource *child_stdout_source;
+-  GSource *child_stderr_source;
+-
+-  guint timeout_seconds;
+-  gboolean timed_out;
+-  GSource *timeout_source;
+-
+-  GString *child_stdout;
+-  GString *child_stderr;
+-
+-  gint exit_status;
+-} UtilsSpawnData;
+-
+-static void
+-utils_child_watch_from_release_cb (GPid     pid,
+-                                   gint     status,
+-                                   gpointer user_data)
+-{
+-}
+-
+-static void
+-utils_spawn_data_free (UtilsSpawnData *data)
+-{
+-  if (data->timeout_source != NULL)
+-    {
+-      g_source_destroy (data->timeout_source);
+-      data->timeout_source = NULL;
+-    }
+-
+-  /* Nuke the child, if necessary */
+-  if (data->child_watch_source != NULL)
+-    {
+-      g_source_destroy (data->child_watch_source);
+-      data->child_watch_source = NULL;
+-    }
+-
+-  if (data->child_pid != 0)
+-    {
+-      GSource *source;
+-      kill (data->child_pid, SIGTERM);
+-      /* OK, we need to reap for the child ourselves - we don't want
+-       * to use waitpid() because that might block the calling
+-       * thread (the child might handle SIGTERM and use several
+-       * seconds for cleanup/rollback).
+-       *
+-       * So we use GChildWatch instead.
+-       *
+-       * Avoid taking a references to ourselves. but note that we need
+-       * to pass the GSource so we can nuke it once handled.
+-       */
+-      source = g_child_watch_source_new (data->child_pid);
+-      g_source_set_callback (source,
+-                             (GSourceFunc) utils_child_watch_from_release_cb,
+-                             source,
+-                             (GDestroyNotify) g_source_destroy);
+-      /* attach source to the global default main context */
+-      g_source_attach (source, NULL);
+-      g_source_unref (source);
+-      data->child_pid = 0;
+-    }
+-
+-  if (data->child_stdout != NULL)
+-    {
+-      g_string_free (data->child_stdout, TRUE);
+-      data->child_stdout = NULL;
+-    }
+-
+-  if (data->child_stderr != NULL)
+-    {
+-      g_string_free (data->child_stderr, TRUE);
+-      data->child_stderr = NULL;
+-    }
+-
+-  if (data->child_stdout_channel != NULL)
+-    {
+-      g_io_channel_unref (data->child_stdout_channel);
+-      data->child_stdout_channel = NULL;
+-    }
+-  if (data->child_stderr_channel != NULL)
+-    {
+-      g_io_channel_unref (data->child_stderr_channel);
+-      data->child_stderr_channel = NULL;
+-    }
+-
+-  if (data->child_stdout_source != NULL)
+-    {
+-      g_source_destroy (data->child_stdout_source);
+-      data->child_stdout_source = NULL;
+-    }
+-  if (data->child_stderr_source != NULL)
+-    {
+-      g_source_destroy (data->child_stderr_source);
+-      data->child_stderr_source = NULL;
+-    }
+-
+-  if (data->child_stdout_fd != -1)
+-    {
+-      g_warn_if_fail (close (data->child_stdout_fd) == 0);
+-      data->child_stdout_fd = -1;
+-    }
+-  if (data->child_stderr_fd != -1)
+-    {
+-      g_warn_if_fail (close (data->child_stderr_fd) == 0);
+-      data->child_stderr_fd = -1;
+-    }
+-
+-  if (data->cancellable_handler_id > 0)
+-    {
+-      g_cancellable_disconnect (data->cancellable, data->cancellable_handler_id);
+-      data->cancellable_handler_id = 0;
+-    }
+-
+-  if (data->main_context != NULL)
+-    g_main_context_unref (data->main_context);
+-
+-  if (data->cancellable != NULL)
+-    g_object_unref (data->cancellable);
+-
+-  g_slice_free (UtilsSpawnData, data);
+-}
+-
+-/* called in the thread where @cancellable was cancelled */
+-static void
+-utils_on_cancelled (GCancellable *cancellable,
+-                    gpointer      user_data)
+-{
+-  UtilsSpawnData *data = (UtilsSpawnData *)user_data;
+-  GError *error;
+-
+-  error = NULL;
+-  g_warn_if_fail (g_cancellable_set_error_if_cancelled (cancellable, &error));
+-  g_simple_async_result_take_error (data->simple, error);
+-  g_simple_async_result_complete_in_idle (data->simple);
+-  g_object_unref (data->simple);
+-}
+-
+-static gboolean
+-utils_read_child_stderr (GIOChannel *channel,
+-                         GIOCondition condition,
+-                         gpointer user_data)
+-{
+-  UtilsSpawnData *data = (UtilsSpawnData *)user_data;
+-  gchar buf[1024];
+-  gsize bytes_read;
+-
+-  g_io_channel_read_chars (channel, buf, sizeof buf, &bytes_read, NULL);
+-  g_string_append_len (data->child_stderr, buf, bytes_read);
+-  return TRUE;
+-}
+-
+-static gboolean
+-utils_read_child_stdout (GIOChannel *channel,
+-                         GIOCondition condition,
+-                         gpointer user_data)
+-{
+-  UtilsSpawnData *data = (UtilsSpawnData *)user_data;
+-  gchar buf[1024];
+-  gsize bytes_read;
+-
+-  g_io_channel_read_chars (channel, buf, sizeof buf, &bytes_read, NULL);
+-  g_string_append_len (data->child_stdout, buf, bytes_read);
+-  return TRUE;
+-}
+-
+-static void
+-utils_child_watch_cb (GPid     pid,
+-                      gint     status,
+-                      gpointer user_data)
+-{
+-  UtilsSpawnData *data = (UtilsSpawnData *)user_data;
+-  gchar *buf;
+-  gsize buf_size;
+-
+-  if (g_io_channel_read_to_end (data->child_stdout_channel, &buf, &buf_size, NULL) == G_IO_STATUS_NORMAL)
+-    {
+-      g_string_append_len (data->child_stdout, buf, buf_size);
+-      g_free (buf);
+-    }
+-  if (g_io_channel_read_to_end (data->child_stderr_channel, &buf, &buf_size, NULL) == G_IO_STATUS_NORMAL)
+-    {
+-      g_string_append_len (data->child_stderr, buf, buf_size);
+-      g_free (buf);
+-    }
+-
+-  data->exit_status = status;
+-
+-  /* ok, child watch is history, make sure we don't free it in spawn_data_free() */
+-  data->child_pid = 0;
+-  data->child_watch_source = NULL;
+-
+-  /* we're done */
+-  g_simple_async_result_complete_in_idle (data->simple);
+-  g_object_unref (data->simple);
+-}
+-
+-static gboolean
+-utils_timeout_cb (gpointer user_data)
+-{
+-  UtilsSpawnData *data = (UtilsSpawnData *)user_data;
+-
+-  data->timed_out = TRUE;
+-
+-  /* ok, timeout is history, make sure we don't free it in spawn_data_free() */
+-  data->timeout_source = NULL;
+-
+-  /* we're done */
+-  g_simple_async_result_complete_in_idle (data->simple);
+-  g_object_unref (data->simple);
+-
+-  return FALSE; /* remove source */
+-}
+-
+-static void
+-utils_spawn (const gchar *const  *argv,
+-             guint                timeout_seconds,
+-             GCancellable        *cancellable,
+-             GAsyncReadyCallback  callback,
+-             gpointer             user_data)
+-{
+-  UtilsSpawnData *data;
+-  GError *error;
+-
+-  data = g_slice_new0 (UtilsSpawnData);
+-  data->timeout_seconds = timeout_seconds;
+-  data->simple = g_simple_async_result_new (NULL,
+-                                            callback,
+-                                            user_data,
+-                                            (gpointer*)utils_spawn);
+-  data->main_context = g_main_context_get_thread_default ();
+-  if (data->main_context != NULL)
+-    g_main_context_ref (data->main_context);
+-
+-  data->cancellable = cancellable != NULL ? (GCancellable*)g_object_ref (cancellable) : NULL;
+-
+-  data->child_stdout = g_string_new (NULL);
+-  data->child_stderr = g_string_new (NULL);
+-  data->child_stdout_fd = -1;
+-  data->child_stderr_fd = -1;
+-
+-  /* the life-cycle of UtilsSpawnData is tied to its GSimpleAsyncResult */
+-  g_simple_async_result_set_op_res_gpointer (data->simple, data, (GDestroyNotify) utils_spawn_data_free);
+-
+-  error = NULL;
+-  if (data->cancellable != NULL)
+-    {
+-      /* could already be cancelled */
+-      error = NULL;
+-      if (g_cancellable_set_error_if_cancelled (data->cancellable, &error))
+-        {
+-          g_simple_async_result_take_error (data->simple, error);
+-          g_simple_async_result_complete_in_idle (data->simple);
+-          g_object_unref (data->simple);
+-          goto out;
+-        }
+-
+-      data->cancellable_handler_id = g_cancellable_connect (data->cancellable,
+-                                                            G_CALLBACK (utils_on_cancelled),
+-                                                            data,
+-                                                            NULL);
+-    }
+-
+-  error = NULL;
+-  if (!g_spawn_async_with_pipes (NULL, /* working directory */
+-                                 (gchar **) argv,
+-                                 NULL, /* envp */
+-                                 GSpawnFlags(G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD),
+-                                 NULL, /* child_setup */
+-                                 NULL, /* child_setup's user_data */
+-                                 &(data->child_pid),
+-                                 NULL, /* gint *stdin_fd */
+-                                 &(data->child_stdout_fd),
+-                                 &(data->child_stderr_fd),
+-                                 &error))
+-    {
+-      g_prefix_error (&error, "Error spawning: ");
+-      g_simple_async_result_take_error (data->simple, error);
+-      g_simple_async_result_complete_in_idle (data->simple);
+-      g_object_unref (data->simple);
+-      goto out;
+-    }
+-
+-  if (timeout_seconds > 0)
+-    {
+-      data->timeout_source = g_timeout_source_new_seconds (timeout_seconds);
+-      g_source_set_priority (data->timeout_source, G_PRIORITY_DEFAULT);
+-      g_source_set_callback (data->timeout_source, utils_timeout_cb, data, NULL);
+-      g_source_attach (data->timeout_source, data->main_context);
+-      g_source_unref (data->timeout_source);
+-    }
+-
+-  data->child_watch_source = g_child_watch_source_new (data->child_pid);
+-  g_source_set_callback (data->child_watch_source, (GSourceFunc) utils_child_watch_cb, data, NULL);
+-  g_source_attach (data->child_watch_source, data->main_context);
+-  g_source_unref (data->child_watch_source);
+-
+-  data->child_stdout_channel = g_io_channel_unix_new (data->child_stdout_fd);
+-  g_io_channel_set_flags (data->child_stdout_channel, G_IO_FLAG_NONBLOCK, NULL);
+-  data->child_stdout_source = g_io_create_watch (data->child_stdout_channel, G_IO_IN);
+-  g_source_set_callback (data->child_stdout_source, (GSourceFunc) utils_read_child_stdout, data, NULL);
+-  g_source_attach (data->child_stdout_source, data->main_context);
+-  g_source_unref (data->child_stdout_source);
+-
+-  data->child_stderr_channel = g_io_channel_unix_new (data->child_stderr_fd);
+-  g_io_channel_set_flags (data->child_stderr_channel, G_IO_FLAG_NONBLOCK, NULL);
+-  data->child_stderr_source = g_io_create_watch (data->child_stderr_channel, G_IO_IN);
+-  g_source_set_callback (data->child_stderr_source, (GSourceFunc) utils_read_child_stderr, data, NULL);
+-  g_source_attach (data->child_stderr_source, data->main_context);
+-  g_source_unref (data->child_stderr_source);
+-
+- out:
+-  ;
+-}
+-
+-gboolean
+-utils_spawn_finish (GAsyncResult   *res,
+-                    gint           *out_exit_status,
+-                    gchar         **out_standard_output,
+-                    gchar         **out_standard_error,
+-                    GError        **error)
+-{
+-  GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
+-  UtilsSpawnData *data;
+-  gboolean ret = FALSE;
+-
+-  g_return_val_if_fail (G_IS_ASYNC_RESULT (res), FALSE);
+-  g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+-
+-  g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == utils_spawn);
+-
+-  if (g_simple_async_result_propagate_error (simple, error))
+-    goto out;
+-
+-  data = (UtilsSpawnData*)g_simple_async_result_get_op_res_gpointer (simple);
+-
+-  if (data->timed_out)
+-    {
+-      g_set_error (error,
+-                   G_IO_ERROR,
+-                   G_IO_ERROR_TIMED_OUT,
+-                   "Timed out after %d seconds",
+-                   data->timeout_seconds);
+-      goto out;
+-    }
+-
+-  if (out_exit_status != NULL)
+-    *out_exit_status = data->exit_status;
+-
+-  if (out_standard_output != NULL)
+-    *out_standard_output = g_strdup (data->child_stdout->str);
+-
+-  if (out_standard_error != NULL)
+-    *out_standard_error = g_strdup (data->child_stderr->str);
+-
+-  ret = TRUE;
+-
+- out:
+-  return ret;
+-}
+-- 
+GitLab
+
+
+From 4858128107be9c3ab11828ee8f35c5e26efd36ce Mon Sep 17 00:00:00 2001
+From: Gustavo Lima Chaves <gustavo.chaves@microsoft.com>
+Date: Tue, 14 Sep 2021 14:38:15 -0700
+Subject: [PATCH 15/16] Gitlab CI: add duktape pkgconfig dependency
+
+Make way for the CI to be able to build with duktape too
+
+Signed-off-by: Gustavo Lima Chaves <gustavo.chaves@microsoft.com>
+---
+ .gitlab-ci.yml | 1 +
+ 1 file changed, 1 insertion(+)
+
+GitLab
+
+
+From cd5d6da837fce95f8831a355dad88c83347c7337 Mon Sep 17 00:00:00 2001
+From: Gustavo Lima Chaves <gustavo.chaves@microsoft.com>
+Date: Mon, 20 Sep 2021 17:17:26 -0700
+Subject: [PATCH 16/16] duktape: implement runaway scripts killer timeout
+
+This was missing on Duktape's JS backend proposal, now in. As
+discussed in
+https://gitlab.freedesktop.org/polkit/polkit/-/merge_requests/35 and
+verified by the commit author, Duktape has no interrupt injection
+mechanism (it has no thread-safe API entry whatsoever, even). Using
+DUK_USE_EXEC_TIMEOUT_CHECK is also not feasible, because:
+
+  i) It must be enabled at build time and shared object builds of the
+  lib on distros go with the default options, something we cannot
+  change/control
+
+  ii) That does not account for non-ECMAScript explicit execution
+  contexts, like regex execution, native C calls, etc.
+
+It has been agreed, on that thread, that pthread_cond_timedwait()-ing
+and having proper Duktape evaluation/execution calls take place in a
+separate thread, to be killed after the runaway script killer's
+accorded timeout value, a reasonable approach. We have considered
+using glib wrappers for direct pthread usage, but that way would make
+it impossible to issue
+pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, ...) and we want to
+be paranoid in that regard.
+
+On Duktape, we don't get to err from the JS context (to be captured by
+the offending script), but to be forcibly killed on timeout scenarios,
+leading to null returns, thus polkit negation, by definition. It's a
+reasonable design/compromise.
+
+A fatal error handler routine, for the Duktape context, has also been
+added, using the polkit_backend_authority_log() logging infra to
+better assist users on what went wrong.
+
+Finally, the script evaluation routine has been made to use
+duk_peval_lstring() (previously using _noresult variant), so to able
+to present the user with proper error messages, should any occur.
+
+The original runaway script killer test has been adjusted to please
+both JS backends.
+
+Signed-off-by: Gustavo Lima Chaves <gustavo.chaves@microsoft.com>
+---
+ meson.build                                   |   1 +
+ src/polkitbackend/meson.build                 |   1 +
+ src/polkitbackend/polkitbackendcommon.h       |   2 +
+ .../polkitbackendduktapeauthority.c           | 236 ++++++++++++++----
+ .../polkitbackendjsauthority.cpp              |  10 +-
+ .../etc/polkit-1/rules.d/10-testing.rules     |   6 +-
+ .../test-polkitbackendjsauthority.c           |   2 +-
+ 7 files changed, 209 insertions(+), 49 deletions(-)
+
+diff --git a/meson.build b/meson.build
+index 4e44723..46956e3 100644
+--- a/meson.build
++++ b/meson.build
+@@ -137,6 +137,7 @@ js_engine = get_option('js_engine')
+ if js_engine == 'duktape'
+   js_dep = dependency('duktape')
+   libm_dep = cc.find_library('m')
++  libpthread_dep = cc.find_library('pthread')
+ elif js_engine == 'mozjs'
+   js_dep = dependency('mozjs-78')
+ endif
+diff --git a/src/polkitbackend/meson.build b/src/polkitbackend/meson.build
+index 9ec01b2..4dfea39 100644
+--- a/src/polkitbackend/meson.build
++++ b/src/polkitbackend/meson.build
+@@ -34,6 +34,7 @@ c_flags = [
+ if js_engine == 'duktape'
+   sources += files('polkitbackendduktapeauthority.c')
+   deps += libm_dep
++  deps += libpthread_dep
+ elif js_engine == 'mozjs'
+   sources += files('polkitbackendjsauthority.cpp')
+ endif
+diff --git a/src/polkitbackend/polkitbackendcommon.h b/src/polkitbackend/polkitbackendcommon.h
+index 6d0d267..dd700fc 100644
+--- a/src/polkitbackend/polkitbackendcommon.h
++++ b/src/polkitbackend/polkitbackendcommon.h
+@@ -50,6 +50,8 @@
+ #include <systemd/sd-login.h>
+ #endif /* HAVE_LIBSYSTEMD */
+ 
++#define RUNAWAY_KILLER_TIMEOUT (15)
++
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+diff --git a/src/polkitbackend/polkitbackendduktapeauthority.c b/src/polkitbackend/polkitbackendduktapeauthority.c
+index a2b4420..80f1976 100644
+--- a/src/polkitbackend/polkitbackendduktapeauthority.c
++++ b/src/polkitbackend/polkitbackendduktapeauthority.c
+@@ -47,8 +47,20 @@ struct _PolkitBackendJsAuthorityPrivate
+   GFileMonitor **dir_monitors; /* NULL-terminated array of GFileMonitor instances */
+ 
+   duk_context *cx;
++
++  pthread_t runaway_killer_thread;
++};
++
++enum
++{
++  RUNAWAY_KILLER_THREAD_EXIT_STATUS_UNSET,
++  RUNAWAY_KILLER_THREAD_EXIT_STATUS_SUCCESS,
++  RUNAWAY_KILLER_THREAD_EXIT_STATUS_FAILURE,
+ };
+ 
++static gboolean execute_script_with_runaway_killer(PolkitBackendJsAuthority *authority,
++                                                   const gchar *filename);
++
+ /* ---------------------------------------------------------------------------------------------------- */
+ 
+ G_DEFINE_TYPE (PolkitBackendJsAuthority, polkit_backend_js_authority, POLKIT_BACKEND_TYPE_INTERACTIVE_AUTHORITY);
+@@ -67,6 +79,15 @@ static const duk_function_list_entry js_polkit_functions[] =
+   { NULL, NULL, 0 },
+ };
+ 
++static void report_error (void     *udata,
++                          const char *msg)
++{
++    PolkitBackendJsAuthority *authority = udata;
++    polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
++                                  "fatal Duktape JS backend error: %s",
++                                  (msg ? msg : "no message"));
++}
++
+ static void
+ polkit_backend_js_authority_init (PolkitBackendJsAuthority *authority)
+ {
+@@ -78,7 +99,6 @@ polkit_backend_js_authority_init (PolkitBackendJsAuthority *authority)
+ static void
+ load_scripts (PolkitBackendJsAuthority  *authority)
+ {
+-  duk_context *cx = authority->priv->cx;
+   GList *files = NULL;
+   GList *l;
+   guint num_scripts = 0;
+@@ -123,36 +143,9 @@ load_scripts (PolkitBackendJsAuthority  *authority)
+   for (l = files; l != NULL; l = l->next)
+     {
+       const gchar *filename = (gchar *)l->data;
+-#if (DUK_VERSION >= 20000)
+-      GFile *file = g_file_new_for_path (filename);
+-      char *contents;
+-      gsize len;
+-      if (!g_file_load_contents (file, NULL, &contents, &len, NULL, NULL))
+-        {
+-          polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
+-                                        "Error compiling script %s",
+-                                        filename);
+-          g_object_unref (file);
+-          continue;
+-        }
+ 
+-      g_object_unref (file);
+-      if (duk_peval_lstring_noresult(cx, contents,len) != 0)
+-#else
+-      if (duk_peval_file_noresult (cx, filename) != 0)
+-#endif
+-        {
+-          polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
+-                                        "Error compiling script %s: %s",
+-                                        filename, duk_safe_to_string (authority->priv->cx, -1));
+-#if (DUK_VERSION >= 20000)
+-          g_free (contents);
+-#endif
++      if (!execute_script_with_runaway_killer(authority, filename))
+           continue;
+-        }
+-#if (DUK_VERSION >= 20000)
+-      g_free (contents);
+-#endif
+       num_scripts++;
+     }
+ 
+@@ -232,7 +225,7 @@ polkit_backend_common_js_authority_constructed (GObject *object)
+   PolkitBackendJsAuthority *authority = POLKIT_BACKEND_JS_AUTHORITY (object);
+   duk_context *cx;
+ 
+-  cx = duk_create_heap (NULL, NULL, NULL, authority, NULL);
++  cx = duk_create_heap (NULL, NULL, NULL, authority, report_error);
+   if (cx == NULL)
+     goto fail;
+ 
+@@ -243,6 +236,9 @@ polkit_backend_common_js_authority_constructed (GObject *object)
+   duk_put_function_list (cx, -1, js_polkit_functions);
+   duk_put_prop_string (cx, -2, "polkit");
+ 
++  /* load polkit objects/functions into JS context (e.g. addRule(),
++   * _deleteRules(), _runRules() et al)
++   */
+   duk_eval_string (cx, init_js);
+ 
+   if (authority->priv->rules_dirs == NULL)
+@@ -510,6 +506,167 @@ push_action_and_details (duk_context               *cx,
+ 
+ /* ---------------------------------------------------------------------------------------------------- */
+ 
++typedef struct {
++  PolkitBackendJsAuthority *authority;
++  const gchar *filename;
++  pthread_cond_t cond;
++  pthread_mutex_t mutex;
++  gint ret;
++} RunawayKillerCtx;
++
++static gpointer
++runaway_killer_thread_execute_js (gpointer user_data)
++{
++  RunawayKillerCtx *ctx = user_data;
++  duk_context *cx = ctx->authority->priv->cx;
++
++  int oldtype;
++
++  pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &oldtype);
++
++#if (DUK_VERSION >= 20000)
++  GFile *file = g_file_new_for_path(ctx->filename);
++  char *contents;
++  gsize len;
++
++  if (!g_file_load_contents(file, NULL, &contents, &len, NULL, NULL)) {
++    polkit_backend_authority_log(POLKIT_BACKEND_AUTHORITY(ctx->authority),
++                                 "Error compiling script %s", ctx->filename);
++    g_object_unref(file);
++    goto err;
++  }
++
++  g_object_unref(file);
++
++  /* evaluate the script, trying to print context in any syntax errors
++     found */
++  if (duk_peval_lstring(cx, contents, len) != 0)
++#else
++  if (duk_peval_file(cx, ctx->filename) != 0)
++#endif
++  {
++    polkit_backend_authority_log(POLKIT_BACKEND_AUTHORITY(ctx->authority),
++                                 "Error compiling script %s: %s", ctx->filename,
++                                 duk_safe_to_string(cx, -1));
++    duk_pop(cx);
++    goto free_err;
++  }
++#if (DUK_VERSION >= 20000)
++  g_free(contents);
++#endif
++
++  ctx->ret = RUNAWAY_KILLER_THREAD_EXIT_STATUS_SUCCESS;
++  goto end;
++
++free_err:
++#if (DUK_VERSION >= 20000)
++  g_free(contents);
++#endif
++err:
++  ctx->ret = RUNAWAY_KILLER_THREAD_EXIT_STATUS_FAILURE;
++end:
++  pthread_cond_signal(&ctx->cond);
++  return NULL;
++}
++
++static gpointer
++runaway_killer_thread_call_js (gpointer user_data)
++{
++  RunawayKillerCtx *ctx = user_data;
++  duk_context *cx = ctx->authority->priv->cx;
++  int oldtype;
++
++  pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &oldtype);
++
++  if (duk_pcall_prop (cx, 0, 2) != DUK_EXEC_SUCCESS)
++    {
++      polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (ctx->authority),
++                                    "Error evaluating admin rules: ",
++                                    duk_safe_to_string (cx, -1));
++      goto err;
++    }
++
++  ctx->ret = RUNAWAY_KILLER_THREAD_EXIT_STATUS_SUCCESS;
++  goto end;
++
++err:
++  ctx->ret = RUNAWAY_KILLER_THREAD_EXIT_STATUS_FAILURE;
++end:
++  pthread_cond_signal(&ctx->cond);
++  return NULL;
++}
++
++/* Blocking for at most for RUNAWAY_KILLER_TIMEOUT */
++static gboolean
++execute_script_with_runaway_killer(PolkitBackendJsAuthority *authority,
++                                   const gchar *filename)
++{
++  gint64 end_time;
++  gboolean cancel = FALSE;
++  RunawayKillerCtx ctx = {.authority = authority, .filename = filename,
++                          .ret = RUNAWAY_KILLER_THREAD_EXIT_STATUS_UNSET,
++                          .mutex = PTHREAD_MUTEX_INITIALIZER,
++                          .cond = PTHREAD_COND_INITIALIZER};
++  struct timespec abs_time;
++
++  pthread_mutex_lock(&ctx.mutex);
++
++  clock_gettime(CLOCK_REALTIME, &abs_time);
++  abs_time.tv_sec += RUNAWAY_KILLER_TIMEOUT;
++
++  pthread_create(&authority->priv->runaway_killer_thread, NULL, runaway_killer_thread_execute_js, &ctx);
++
++  while (ctx.ret == RUNAWAY_KILLER_THREAD_EXIT_STATUS_UNSET) /* loop to treat spurious wakeups */
++    if (pthread_cond_timedwait(&ctx.cond, &ctx.mutex, &abs_time) == ETIMEDOUT) {
++      cancel = TRUE;
++      break;
++    }
++
++  pthread_mutex_unlock(&ctx.mutex);
++
++  if (cancel)
++    pthread_cancel (authority->priv->runaway_killer_thread);
++  pthread_join (authority->priv->runaway_killer_thread, NULL);
++
++  return ctx.ret == RUNAWAY_KILLER_THREAD_EXIT_STATUS_SUCCESS;
++}
++
++/* Calls already stacked function and args. Blocking for at most for
++ * RUNAWAY_KILLER_TIMEOUT
++ */
++static gboolean
++call_js_function_with_runaway_killer(PolkitBackendJsAuthority *authority)
++{
++  gint64 end_time;
++  gboolean cancel = FALSE;
++  RunawayKillerCtx ctx = {.authority = authority,
++                          .ret = RUNAWAY_KILLER_THREAD_EXIT_STATUS_UNSET,
++                          .mutex = PTHREAD_MUTEX_INITIALIZER,
++                          .cond = PTHREAD_COND_INITIALIZER};
++  struct timespec abs_time;
++
++  pthread_mutex_lock(&ctx.mutex);
++
++  clock_gettime(CLOCK_REALTIME, &abs_time);
++  abs_time.tv_sec += RUNAWAY_KILLER_TIMEOUT;
++
++  pthread_create(&authority->priv->runaway_killer_thread, NULL, runaway_killer_thread_call_js, &ctx);
++
++  while (ctx.ret == RUNAWAY_KILLER_THREAD_EXIT_STATUS_UNSET) /* loop to treat spurious wakeups */
++    if (pthread_cond_timedwait(&ctx.cond, &ctx.mutex, &abs_time) == ETIMEDOUT) {
++      cancel = TRUE;
++      break;
++    }
++
++  pthread_mutex_unlock(&ctx.mutex);
++
++  if (cancel)
++    pthread_cancel (authority->priv->runaway_killer_thread);
++  pthread_join (authority->priv->runaway_killer_thread, NULL);
++
++  return ctx.ret == RUNAWAY_KILLER_THREAD_EXIT_STATUS_SUCCESS;
++}
++
+ /* ---------------------------------------------------------------------------------------------------- */
+ 
+ GList *
+@@ -557,13 +714,8 @@ polkit_backend_common_js_authority_get_admin_auth_identities (PolkitBackendInter
+       goto out;
+     }
+ 
+-  if (duk_pcall_prop (cx, 0, 2) != DUK_ERR_NONE)
+-    {
+-      polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
+-                                    "Error evaluating admin rules: ",
+-                                    duk_safe_to_string (cx, -1));
+-      goto out;
+-    }
++  if (!call_js_function_with_runaway_killer (authority))
++    goto out;
+ 
+   ret_str = duk_require_string (cx, -1);
+ 
+@@ -643,15 +795,11 @@ polkit_backend_common_js_authority_check_authorization_sync (PolkitBackendIntera
+       goto out;
+     }
+ 
+-  if (duk_pcall_prop (cx, 0, 2) != DUK_ERR_NONE)
+-  {
+-      polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
+-                                    "Error evaluating authorization rules: ",
+-                                    duk_safe_to_string (cx, -1));
+-      goto out;
+-  }
++  if (!call_js_function_with_runaway_killer (authority))
++    goto out;
+ 
+   if (duk_is_null(cx, -1)) {
++    /* this fine, means there was no match, use implicit authorizations */
+     good = TRUE;
+     goto out;
+   }
+diff --git a/src/polkitbackend/polkitbackendjsauthority.cpp b/src/polkitbackend/polkitbackendjsauthority.cpp
+index e28091d..11e91c0 100644
+--- a/src/polkitbackend/polkitbackendjsauthority.cpp
++++ b/src/polkitbackend/polkitbackendjsauthority.cpp
+@@ -829,11 +829,14 @@ runaway_killer_setup (PolkitBackendJsAuthority *authority)
+ {
+   g_assert (authority->priv->rkt_source == NULL);
+ 
+-  /* set-up timer for runaway scripts, will be executed in runaway_killer_thread */
++  /* set-up timer for runaway scripts, will be executed in
++     runaway_killer_thread, that is one, permanent thread running a glib
++     mainloop (rkt_loop) whose context (rkt_context) has a timeout source
++     (rkt_source) */
+   g_mutex_lock (&authority->priv->rkt_timeout_pending_mutex);
+   authority->priv->rkt_timeout_pending = FALSE;
+   g_mutex_unlock (&authority->priv->rkt_timeout_pending_mutex);
+-  authority->priv->rkt_source = g_timeout_source_new_seconds (15);
++  authority->priv->rkt_source = g_timeout_source_new_seconds (RUNAWAY_KILLER_TIMEOUT);
+   g_source_set_callback (authority->priv->rkt_source, rkt_on_timeout, authority, NULL);
+   g_source_attach (authority->priv->rkt_source, authority->priv->rkt_context);
+ 
+@@ -893,6 +896,9 @@ execute_script_with_runaway_killer (PolkitBackendJsAuthority *authority,
+ {
+   bool ret;
+ 
++  // tries to JS_ExecuteScript(), may hang for > RUNAWAY_KILLER_TIMEOUT,
++  // runaway_killer_thread makes sure the call returns, due to exception
++  // injection
+   runaway_killer_setup (authority);
+   ret = JS_ExecuteScript (authority->priv->cx,
+                           script,
+diff --git a/test/data/etc/polkit-1/rules.d/10-testing.rules b/test/data/etc/polkit-1/rules.d/10-testing.rules
+index 98bf062..e346b5d 100644
+--- a/test/data/etc/polkit-1/rules.d/10-testing.rules
++++ b/test/data/etc/polkit-1/rules.d/10-testing.rules
+@@ -189,8 +189,10 @@ polkit.addRule(function(action, subject) {
+                 ;
+         } catch (error) {
+             if (error == "Terminating runaway script")
+-                return polkit.Result.YES;
+-            return polkit.Result.NO;
++                // Inverted logic to accomodate Duktape's model as well, which
++                // will always fail with negation, on timeouts
++                return polkit.Result.NO;
++            return polkit.Result.YES;
+         }
+     }
+ });
+diff --git a/test/polkitbackend/test-polkitbackendjsauthority.c b/test/polkitbackend/test-polkitbackendjsauthority.c
+index f97e0e0..2103b17 100644
+--- a/test/polkitbackend/test-polkitbackendjsauthority.c
++++ b/test/polkitbackend/test-polkitbackendjsauthority.c
+@@ -328,7 +328,7 @@ static const RulesTestCase rules_test_cases[] = {
+     "net.company.run_away_script",
+     "unix-user:root",
+     NULL,
+-    POLKIT_IMPLICIT_AUTHORIZATION_AUTHORIZED,
++    POLKIT_IMPLICIT_AUTHORIZATION_NOT_AUTHORIZED,
+   },
+ 
+   {
+-- 
+GitLab
+
diff --git a/gnu/packages/patches/ppsspp-disable-upgrade-and-gold.patch b/gnu/packages/patches/ppsspp-disable-upgrade-and-gold.patch
index 3a5ae1a2cd..93996b52a7 100644
--- a/gnu/packages/patches/ppsspp-disable-upgrade-and-gold.patch
+++ b/gnu/packages/patches/ppsspp-disable-upgrade-and-gold.patch
@@ -1,4 +1,4 @@
-From 942730ce7148cd54a30d4a606ce71a2654c8a2e0 Mon Sep 17 00:00:00 2001
+From debc32a287209e1d1bb6fedb479bd923fd016399 Mon Sep 17 00:00:00 2001
 From: Liliana Marie Prikler <liliana.prikler@gmail.com>
 Date: Sat, 5 Jun 2021 22:47:00 -0400
 Subject: [PATCH] ppsspp: Remove upgrade code and gold support.
@@ -6,27 +6,46 @@ Subject: [PATCH] ppsspp: Remove upgrade code and gold support.
 Original patch from Liliana Marie Prikler.
 Rebased on master (commit 69fa20744958aef8da9ca052ba7675fdc1636e46) by
 Maxim Cournoyer.
+Revised once again by Liliana Marie Prikler for version 1.12.3.
 ---
- Core/Config.cpp             | 11 ------
+ Common/System/System.h      |  1 -
+ Core/Config.cpp             | 12 -------
  Core/Config.h               |  2 --
  Qt/QtMain.cpp               |  6 ----
+ Qt/mainwindow.cpp           |  6 ----
+ Qt/mainwindow.h             |  1 -
  SDL/SDLMain.cpp             |  6 ----
  UI/DevScreens.cpp           |  3 --
- UI/GameSettingsScreen.cpp   |  2 --
+ UI/GameSettingsScreen.cpp   |  4 +--
  UI/MainScreen.cpp           | 70 +------------------------------------
+ UI/MemStickScreen.cpp       |  8 -----
  UI/MiscScreens.cpp          | 31 ++--------------
  UWP/PPSSPP_UWPMain.cpp      |  6 ----
- Windows/MainWindowMenu.cpp  |  2 +-
+ Windows/MainWindowMenu.cpp  |  8 +----
+ Windows/WindowsHost.cpp     |  4 ---
  Windows/main.cpp            |  6 ----
+ Windows/resource.h          |  1 -
  android/jni/app-android.cpp |  6 ----
  ios/main.mm                 |  6 ----
- 13 files changed, 5 insertions(+), 152 deletions(-)
+ 19 files changed, 6 insertions(+), 181 deletions(-)
 
+diff --git a/Common/System/System.h b/Common/System/System.h
+index 09560191e..5df68a120 100644
+--- a/Common/System/System.h
++++ b/Common/System/System.h
+@@ -83,7 +83,6 @@ enum SystemProperty {
+ 	SYSPROP_DISPLAY_SAFE_INSET_BOTTOM,
+ 
+ 	SYSPROP_DEVICE_TYPE,
+-	SYSPROP_APP_GOLD,  // To avoid having #ifdef GOLD other than in main.cpp and similar.
+ 
+ 	// Exposed on Android. Choosing the optimal sample rate for audio
+ 	// will result in lower latencies. Buffer size is automatically matched
 diff --git a/Core/Config.cpp b/Core/Config.cpp
-index 74be99d75..b14aa22c7 100644
+index 305098f47..9c28a3315 100644
 --- a/Core/Config.cpp
 +++ b/Core/Config.cpp
-@@ -467,7 +467,6 @@ static ConfigSetting generalSettings[] = {
+@@ -512,7 +512,6 @@ static ConfigSetting generalSettings[] = {
  	ConfigSetting("IgnoreBadMemAccess", &g_Config.bIgnoreBadMemAccess, true, true),
  	ConfigSetting("CurrentDirectory", &g_Config.currentDirectory, ""),
  	ConfigSetting("ShowDebuggerOnLoad", &g_Config.bShowDebuggerOnLoad, false),
@@ -34,7 +53,7 @@ index 74be99d75..b14aa22c7 100644
  	ConfigSetting("Language", &g_Config.sLanguageIni, &DefaultLangRegion),
  	ConfigSetting("ForceLagSync2", &g_Config.bForceLagSync, false, true, true),
  	ConfigSetting("DiscordPresence", &g_Config.bDiscordPresence, true, true, false),  // Or maybe it makes sense to have it per-game? Race conditions abound...
-@@ -1323,16 +1322,6 @@ void Config::Load(const char *iniFileName, const char *controllerIniFilename) {
+@@ -1395,17 +1394,6 @@ void Config::Load(const char *iniFileName, const char *controllerIniFilename) {
  		upgradeMessage = "";
  	}
  
@@ -43,8 +62,9 @@ index 74be99d75..b14aa22c7 100644
 -	// splash screen quickly), but then we'll just show the notification next time instead, we store the
 -	// upgrade number in the ini.
 -	if (iRunCount % 10 == 0 && bCheckForNewVersion) {
--		std::shared_ptr<http::Download> dl = g_DownloadManager.StartDownloadWithCallback(
--			"http://www.ppsspp.org/version.json", Path(), &DownloadCompletedCallback);
+-		const char *versionUrl = "http://www.ppsspp.org/version.json";
+-		const char *acceptMime = "application/json, text/*; q=0.9, */*; q=0.8";
+-		auto dl = g_DownloadManager.StartDownloadWithCallback(versionUrl, Path(), &DownloadCompletedCallback, acceptMime);
 -		dl->SetHidden(true);
 -	}
 -
@@ -52,10 +72,10 @@ index 74be99d75..b14aa22c7 100644
  	bSaveSettings = true;
  
 diff --git a/Core/Config.h b/Core/Config.h
-index 79323eefc..d47bec0c7 100644
+index 7bbbf2798..1bc1c2296 100644
 --- a/Core/Config.h
 +++ b/Core/Config.h
-@@ -103,7 +103,6 @@ struct Config {
+@@ -109,7 +109,6 @@ struct Config {
  
  	bool bFastMemory;
  	int iCpuCore;
@@ -63,7 +83,7 @@ index 79323eefc..d47bec0c7 100644
  	bool bForceLagSync;
  	bool bFuncReplacements;
  	bool bHideSlowWarnings;
-@@ -542,4 +541,3 @@ std::string CreateRandMAC();
+@@ -562,4 +561,3 @@ std::string CreateRandMAC();
  // TODO: Find a better place for this.
  extern http::Downloader g_DownloadManager;
  extern Config g_Config;
@@ -85,6 +105,42 @@ index b642f7442..a880d7c94 100644
  	case SYSPROP_CAN_JIT:
  		return true;
  	default:
+diff --git a/Qt/mainwindow.cpp b/Qt/mainwindow.cpp
+index 1f56e0e76..0b7680427 100644
+--- a/Qt/mainwindow.cpp
++++ b/Qt/mainwindow.cpp
+@@ -413,11 +413,6 @@ void MainWindow::forumAct()
+ 	QDesktopServices::openUrl(QUrl("https://forums.ppsspp.org/"));
+ }
+ 
+-void MainWindow::goldAct()
+-{
+-	QDesktopServices::openUrl(QUrl("https://central.ppsspp.org/buygold"));
+-}
+-
+ void MainWindow::gitAct()
+ {
+ 	QDesktopServices::openUrl(QUrl("https://github.com/hrydgard/ppsspp/"));
+@@ -666,7 +661,6 @@ void MainWindow::createMenus()
+ 	MenuTree* helpMenu = new MenuTree(this, menuBar(),    QT_TR_NOOP("&Help"));
+ 	helpMenu->add(new MenuAction(this, SLOT(websiteAct()),    QT_TR_NOOP("Visit www.&ppsspp.org")));
+ 	helpMenu->add(new MenuAction(this, SLOT(forumAct()),      QT_TR_NOOP("PPSSPP &forums")));
+-	helpMenu->add(new MenuAction(this, SLOT(goldAct()),       QT_TR_NOOP("Buy &Gold")));
+ 	helpMenu->add(new MenuAction(this, SLOT(gitAct()),        QT_TR_NOOP("Git&Hub")));
+ 	helpMenu->add(new MenuAction(this, SLOT(discordAct()),      QT_TR_NOOP("Discord")));
+ 	helpMenu->addSeparator();
+diff --git a/Qt/mainwindow.h b/Qt/mainwindow.h
+index 99c9fc3ad..8cd6cbf79 100644
+--- a/Qt/mainwindow.h
++++ b/Qt/mainwindow.h
+@@ -197,7 +197,6 @@ private slots:
+ 	// Help
+ 	void websiteAct();
+ 	void forumAct();
+-	void goldAct();
+ 	void gitAct();
+ 	void discordAct();
+ 	void aboutAct();
 diff --git a/SDL/SDLMain.cpp b/SDL/SDLMain.cpp
 index f0f74f979..f963f36e9 100644
 --- a/SDL/SDLMain.cpp
@@ -103,10 +159,10 @@ index f0f74f979..f963f36e9 100644
  		return true;
  	default:
 diff --git a/UI/DevScreens.cpp b/UI/DevScreens.cpp
-index 29baf2f2e..926692363 100644
+index 389fdf096..8442ee8c6 100644
 --- a/UI/DevScreens.cpp
 +++ b/UI/DevScreens.cpp
-@@ -635,9 +635,6 @@ void SystemInfoScreen::CreateViews() {
+@@ -649,9 +649,6 @@ void SystemInfoScreen::CreateViews() {
  #ifdef _M_SSE
  	buildConfig->Add(new InfoItem("_M_SSE", StringFromFormat("0x%x", _M_SSE)));
  #endif
@@ -117,23 +173,32 @@ index 29baf2f2e..926692363 100644
  	ViewGroup *cpuExtensionsScroll = new ScrollView(ORIENT_VERTICAL, new LinearLayoutParams(FILL_PARENT, FILL_PARENT));
  	cpuExtensionsScroll->SetTag("DevSystemInfoCPUExt");
 diff --git a/UI/GameSettingsScreen.cpp b/UI/GameSettingsScreen.cpp
-index 393e33cd9..d07d00d45 100644
+index 99fb151b9..90f26d5dc 100644
 --- a/UI/GameSettingsScreen.cpp
 +++ b/UI/GameSettingsScreen.cpp
-@@ -922,8 +922,6 @@ void GameSettingsScreen::CreateViews() {
+@@ -1023,7 +1023,6 @@ void GameSettingsScreen::CreateViews() {
  		}
  	}
  #endif
 -	systemSettings->Add(new CheckBox(&g_Config.bCheckForNewVersion, sy->T("VersionCheck", "Check for new versions of PPSSPP")));
--
+ 
  	systemSettings->Add(new Choice(sy->T("Restore Default Settings")))->OnClick.Handle(this, &GameSettingsScreen::OnRestoreDefaultSettings);
  	systemSettings->Add(new CheckBox(&g_Config.bEnableStateUndo, sy->T("Savestate slot backups")));
- 	static const char *autoLoadSaveStateChoices[] = { "Off", "Oldest Save", "Newest Save", "Slot 1", "Slot 2", "Slot 3", "Slot 4", "Slot 5" };
+@@ -2076,8 +2075,7 @@ void GestureMappingScreen::CreateViews() {
+ 	vert->Add(new PopupMultiChoice(&g_Config.iSwipeRight, mc->T("Swipe Right"), gestureButton, 0, ARRAY_SIZE(gestureButton), mc->GetName(), screenManager()))->SetEnabledPtr(&g_Config.bGestureControlEnabled);
+ 	vert->Add(new PopupSliderChoiceFloat(&g_Config.fSwipeSensitivity, 0.01f, 1.0f, co->T("Swipe sensitivity"), 0.01f, screenManager(), "x"))->SetEnabledPtr(&g_Config.bGestureControlEnabled);
+ 	vert->Add(new PopupSliderChoiceFloat(&g_Config.fSwipeSmoothing, 0.0f, 0.95f, co->T("Swipe smoothing"), 0.05f, screenManager(), "x"))->SetEnabledPtr(&g_Config.bGestureControlEnabled);
+-	
++
+ 	vert->Add(new ItemHeader(co->T("Double tap")));
+ 	vert->Add(new PopupMultiChoice(&g_Config.iDoubleTapGesture, mc->T("Double tap button"), gestureButton, 0, ARRAY_SIZE(gestureButton), mc->GetName(), screenManager()))->SetEnabledPtr(&g_Config.bGestureControlEnabled);
+ }
+-
 diff --git a/UI/MainScreen.cpp b/UI/MainScreen.cpp
-index f88509276..51b21b640 100644
+index 4e86ac1ab..be49c3add 100644
 --- a/UI/MainScreen.cpp
 +++ b/UI/MainScreen.cpp
-@@ -1080,11 +1080,7 @@ void MainScreen::CreateViews() {
+@@ -1100,11 +1100,7 @@ void MainScreen::CreateViews() {
  	sprintf(versionString, "%s", PPSSPP_GIT_VERSION);
  	rightColumnItems->SetSpacing(0.0f);
  	AnchorLayout *logos = new AnchorLayout(new AnchorLayoutParams(FILL_PARENT, 60.0f, false));
@@ -146,19 +211,19 @@ index f88509276..51b21b640 100644
  	logos->Add(new ImageView(ImageID("I_LOGO"), "PPSSPP", IS_DEFAULT, new AnchorLayoutParams(180, 64, 64, -5.0f, NONE, NONE, false)));
  
  #if !defined(MOBILE_DEVICE)
-@@ -1107,11 +1103,6 @@ void MainScreen::CreateViews() {
+@@ -1127,11 +1123,6 @@ void MainScreen::CreateViews() {
  	rightColumnItems->Add(new Choice(mm->T("Game Settings", "Settings")))->OnClick.Handle(this, &MainScreen::OnGameSettings);
  	rightColumnItems->Add(new Choice(mm->T("Credits")))->OnClick.Handle(this, &MainScreen::OnCredits);
  	rightColumnItems->Add(new Choice(mm->T("www.ppsspp.org")))->OnClick.Handle(this, &MainScreen::OnPPSSPPOrg);
 -	if (!System_GetPropertyBool(SYSPROP_APP_GOLD)) {
 -		Choice *gold = rightColumnItems->Add(new Choice(mm->T("Buy PPSSPP Gold")));
 -		gold->OnClick.Handle(this, &MainScreen::OnSupport);
--		gold->SetIcon(ImageID("I_ICONGOLD"));
+-		gold->SetIcon(ImageID("I_ICONGOLD"), 0.5f);
 -	}
  
  #if !PPSSPP_PLATFORM(UWP)
  	// Having an exit button is against UWP guidelines.
-@@ -1136,32 +1127,6 @@ void MainScreen::CreateViews() {
+@@ -1156,32 +1147,6 @@ void MainScreen::CreateViews() {
  	} else if (tabHolder_->GetVisibility() != V_GONE) {
  		root_->SetDefaultFocusView(tabHolder_);
  	}
@@ -191,7 +256,7 @@ index f88509276..51b21b640 100644
  }
  
  UI::EventReturn MainScreen::OnAllowStorage(UI::EventParams &e) {
-@@ -1169,30 +1134,6 @@ UI::EventReturn MainScreen::OnAllowStorage(UI::EventParams &e) {
+@@ -1189,30 +1154,6 @@ UI::EventReturn MainScreen::OnAllowStorage(UI::EventParams &e) {
  	return UI::EVENT_DONE;
  }
  
@@ -222,7 +287,7 @@ index f88509276..51b21b640 100644
  void MainScreen::sendMessage(const char *message, const char *value) {
  	// Always call the base class method first to handle the most common messages.
  	UIScreenWithBackground::sendMessage(message, value);
-@@ -1396,15 +1337,6 @@ UI::EventReturn MainScreen::OnCredits(UI::EventParams &e) {
+@@ -1386,15 +1327,6 @@ UI::EventReturn MainScreen::OnCredits(UI::EventParams &e) {
  	return UI::EVENT_DONE;
  }
  
@@ -238,11 +303,47 @@ index f88509276..51b21b640 100644
  UI::EventReturn MainScreen::OnPPSSPPOrg(UI::EventParams &e) {
  	LaunchBrowser("https://www.ppsspp.org");
  	return UI::EVENT_DONE;
+diff --git a/UI/MemStickScreen.cpp b/UI/MemStickScreen.cpp
+index ef617c5b5..664614c62 100644
+--- a/UI/MemStickScreen.cpp
++++ b/UI/MemStickScreen.cpp
+@@ -157,23 +157,16 @@ static void AddExplanation(UI::ViewGroup *viewGroup, MemStickScreen::Choice choi
+ 	case MemStickScreen::CHOICE_STORAGE_ROOT:
+ 		// Old school choice
+ 		holder->Add(new TextView(iz->T("DataWillStay", "Data will stay even if you uninstall PPSSPP"), flags, false))->SetBullet(true);
+-		holder->Add(new TextView(iz->T("DataCanBeShared", "Data can be shared between PPSSPP regular/Gold"), flags, false))->SetBullet(true);
+ 		holder->Add(new TextView(iz->T("EasyUSBAccess", "Easy USB access"), flags, false))->SetBullet(true);
+ 		break;
+ 	case MemStickScreen::CHOICE_BROWSE_FOLDER:
+ 		holder->Add(new TextView(iz->T("DataWillStay", "Data will stay even if you uninstall PPSSPP"), flags, false))->SetBullet(true);
+-		holder->Add(new TextView(iz->T("DataCanBeShared", "Data can be shared between PPSSPP regular/Gold"), flags, false))->SetBullet(true);
+ 		holder->Add(new TextView(iz->T("EasyUSBAccess", "Easy USB access"), flags, false))->SetBullet(true);
+ 		break;
+ 	case MemStickScreen::CHOICE_PRIVATE_DIRECTORY:
+ 		// Consider https://www.compart.com/en/unicode/U+26A0 (unicode warning sign?)? or a graphic?
+ 		holder->Add(new TextView(iz->T("DataWillBeLostOnUninstall", "Warning! Data will be lost when you uninstall PPSSPP!"), flags, false))->SetBullet(true);
+-		holder->Add(new TextView(iz->T("DataCannotBeShared", "Data CANNOT be shared between PPSSPP regular/Gold!"), flags, false))->SetBullet(true);
+-#if GOLD
+-		holder->Add(new TextView(iz->T("USBAccessThroughGold", "USB access through Android/data/org.ppsspp.ppssppgold/files"), flags, false))->SetBullet(true);
+-#else
+ 		holder->Add(new TextView(iz->T("USBAccessThrough", "USB access through Android/data/org.ppsspp.ppsspp/files"), flags, false))->SetBullet(true);
+-#endif
+ 		break;
+ 	case MemStickScreen::CHOICE_SET_MANUAL:
+ 	default:
+@@ -243,7 +236,6 @@ void MemStickScreen::CreateViews() {
+ 	} else {
+ 		leftColumn->Add(new RadioButton(&choice_, CHOICE_SET_MANUAL, iz->T("Manually specify PSP folder")))->OnClick.Handle(this, &MemStickScreen::OnChoiceClick);
+ 		leftColumn->Add(new TextView(iz->T("DataWillStay", "Data will stay even if you uninstall PPSSPP.")))->SetBullet(true);
+-		leftColumn->Add(new TextView(iz->T("DataCanBeShared", "Data can be shared between PPSSPP regular/Gold.")))->SetBullet(true);
+ 		// TODO: Show current folder here if we have one set.
+ 	}
+ 	if (choice_ == CHOICE_BROWSE_FOLDER || choice_ == CHOICE_SET_MANUAL) {
 diff --git a/UI/MiscScreens.cpp b/UI/MiscScreens.cpp
-index 901a5fb09..9d067aee6 100644
+index 04e5df6c3..fb6c29725 100644
 --- a/UI/MiscScreens.cpp
 +++ b/UI/MiscScreens.cpp
-@@ -661,11 +661,7 @@ void LogoScreen::render() {
+@@ -769,11 +769,7 @@ void LogoScreen::render() {
  	char temp[256];
  	// Manually formatting UTF-8 is fun.  \xXX doesn't work everywhere.
  	snprintf(temp, sizeof(temp), "%s Henrik Rydg%c%crd", cr->T("created", "Created by"), 0xC3, 0xA5);
@@ -255,7 +356,7 @@ index 901a5fb09..9d067aee6 100644
  	dc.Draw()->DrawImage(ImageID("I_LOGO"), bounds.centerX() + 40, bounds.centerY() - 30, 1.5f, textColor, ALIGN_CENTER);
  	//dc.Draw()->DrawTextShadow(UBUNTU48, "PPSSPP", bounds.w / 2, bounds.h / 2 - 30, textColor, ALIGN_CENTER);
  	dc.SetFontScale(1.0f, 1.0f);
-@@ -701,10 +697,6 @@ void CreditsScreen::CreateViews() {
+@@ -809,10 +805,6 @@ void CreditsScreen::CreateViews() {
  	// Really need to redo this whole layout with some linear layouts...
  
  	int rightYOffset = 0;
@@ -266,7 +367,7 @@ index 901a5fb09..9d067aee6 100644
  	root_->Add(new Button(cr->T("PPSSPP Forums"), new AnchorLayoutParams(260, 64, 10, NONE, NONE, 158, false)))->OnClick.Handle(this, &CreditsScreen::OnForums);
  	root_->Add(new Button(cr->T("Discord"), new AnchorLayoutParams(260, 64, 10, NONE, NONE, 232, false)))->OnClick.Handle(this, &CreditsScreen::OnDiscord);
  	root_->Add(new Button("www.ppsspp.org", new AnchorLayoutParams(260, 64, 10, NONE, NONE, 10, false)))->OnClick.Handle(this, &CreditsScreen::OnPPSSPPOrg);
-@@ -713,20 +705,7 @@ void CreditsScreen::CreateViews() {
+@@ -821,20 +813,7 @@ void CreditsScreen::CreateViews() {
  #if PPSSPP_PLATFORM(ANDROID) || PPSSPP_PLATFORM(IOS)
  	root_->Add(new Button(cr->T("Share PPSSPP"), new AnchorLayoutParams(260, 64, NONE, NONE, 10, rightYOffset + 158, false)))->OnClick.Handle(this, &CreditsScreen::OnShare);
  #endif
@@ -288,7 +389,7 @@ index 901a5fb09..9d067aee6 100644
  }
  
  UI::EventReturn CreditsScreen::OnTwitter(UI::EventParams &e) {
-@@ -916,11 +895,7 @@ void CreditsScreen::render() {
+@@ -1024,11 +1003,7 @@ void CreditsScreen::render() {
  
  	// TODO: This is kinda ugly, done on every frame...
  	char temp[256];
@@ -319,10 +420,37 @@ index 29afda806..b7028fc0c 100644
  		return true;
  	default:
 diff --git a/Windows/MainWindowMenu.cpp b/Windows/MainWindowMenu.cpp
-index c0d790e06..e8de4f956 100644
+index 006fed4f4..4761171ff 100644
 --- a/Windows/MainWindowMenu.cpp
 +++ b/Windows/MainWindowMenu.cpp
-@@ -1395,7 +1395,7 @@ namespace MainWindow {
+@@ -136,7 +136,6 @@ namespace MainWindow {
+ 
+ 		const std::wstring visitMainWebsite = ConvertUTF8ToWString(des->T("www.ppsspp.org"));
+ 		const std::wstring visitForum = ConvertUTF8ToWString(des->T("PPSSPP Forums"));
+-		const std::wstring buyGold = ConvertUTF8ToWString(des->T("Buy Gold"));
+ 		const std::wstring gitHub = ConvertUTF8ToWString(des->T("GitHub"));
+ 		const std::wstring discord = ConvertUTF8ToWString(des->T("Discord"));
+ 		const std::wstring aboutPPSSPP = ConvertUTF8ToWString(des->T("About PPSSPP..."));
+@@ -147,7 +146,6 @@ namespace MainWindow {
+ 		AppendMenu(helpMenu, MF_STRING | MF_BYCOMMAND, ID_HELP_OPENWEBSITE, visitMainWebsite.c_str());
+ 		AppendMenu(helpMenu, MF_STRING | MF_BYCOMMAND, ID_HELP_OPENFORUM, visitForum.c_str());
+ 		// Repeat the process for other languages, if necessary.
+-		AppendMenu(helpMenu, MF_STRING | MF_BYCOMMAND, ID_HELP_BUYGOLD, buyGold.c_str());
+ 		AppendMenu(helpMenu, MF_STRING | MF_BYCOMMAND, ID_HELP_GITHUB, gitHub.c_str());
+ 		AppendMenu(helpMenu, MF_STRING | MF_BYCOMMAND, ID_HELP_DISCORD, discord.c_str());
+ 		AppendMenu(helpMenu, MF_SEPARATOR, 0, 0);
+@@ -1015,10 +1013,6 @@ namespace MainWindow {
+ 			ShellExecute(NULL, L"open", L"https://www.ppsspp.org/", NULL, NULL, SW_SHOWNORMAL);
+ 			break;
+ 
+-		case ID_HELP_BUYGOLD:
+-			ShellExecute(NULL, L"open", L"https://central.ppsspp.org/buygold", NULL, NULL, SW_SHOWNORMAL);
+-			break;
+-
+ 		case ID_HELP_OPENFORUM:
+ 			ShellExecute(NULL, L"open", L"https://forums.ppsspp.org/", NULL, NULL, SW_SHOWNORMAL);
+ 			break;
+@@ -1397,7 +1391,7 @@ namespace MainWindow {
  		{
  			W32Util::CenterWindow(hDlg);
  			HWND versionBox = GetDlgItem(hDlg, IDC_VERSION);
@@ -331,8 +459,24 @@ index c0d790e06..e8de4f956 100644
  			windowText.append(PPSSPP_GIT_VERSION);
  			SetWindowText(versionBox, ConvertUTF8ToWString(windowText).c_str());
  		}
+diff --git a/Windows/WindowsHost.cpp b/Windows/WindowsHost.cpp
+index 610b79890..3d5926fce 100644
+--- a/Windows/WindowsHost.cpp
++++ b/Windows/WindowsHost.cpp
+@@ -155,11 +155,7 @@ void WindowsHost::ShutdownGraphics() {
+ }
+ 
+ void WindowsHost::SetWindowTitle(const char *message) {
+-#ifdef GOLD
+-	const char *name = "PPSSPP Gold ";
+-#else
+ 	const char *name = "PPSSPP ";
+-#endif
+ 	std::wstring winTitle = ConvertUTF8ToWString(std::string(name) + PPSSPP_GIT_VERSION);
+ 	if (message != nullptr) {
+ 		winTitle.append(ConvertUTF8ToWString(" - "));
 diff --git a/Windows/main.cpp b/Windows/main.cpp
-index ecfe18fa4..3261151d2 100644
+index 9395233e2..90abec570 100644
 --- a/Windows/main.cpp
 +++ b/Windows/main.cpp
 @@ -304,12 +304,6 @@ bool System_GetPropertyBool(SystemProperty prop) {
@@ -348,13 +492,25 @@ index ecfe18fa4..3261151d2 100644
  	case SYSPROP_CAN_JIT:
  		return true;
  	default:
+diff --git a/Windows/resource.h b/Windows/resource.h
+index ce21b3a85..1f8002c10 100644
+--- a/Windows/resource.h
++++ b/Windows/resource.h
+@@ -322,7 +322,6 @@
+ // Dummy option to let the buffered rendering hotkey cycle through all the options.
+ #define ID_OPTIONS_BUFFEREDRENDERINGDUMMY 40500
+ #define IDC_STEPOUT                       40501
+-#define ID_HELP_BUYGOLD                   40502
+ 
+ #define IDC_STATIC                      -1
+ 
 diff --git a/android/jni/app-android.cpp b/android/jni/app-android.cpp
-index 2fad16224..8ed6dd9cd 100644
+index df395e304..cebdf5804 100644
 --- a/android/jni/app-android.cpp
 +++ b/android/jni/app-android.cpp
-@@ -490,12 +490,6 @@ bool System_GetPropertyBool(SystemProperty prop) {
- 	case SYSPROP_HAS_FOLDER_BROWSER:
- 		// Uses OPEN_DOCUMENT_TREE to let you select a folder.
+@@ -458,12 +458,6 @@ bool System_GetPropertyBool(SystemProperty prop) {
+ 		// Doesn't actually mean it's usable though, in many early versions of Android
+ 		// this dialog is complete garbage and only lets you select subfolders of the Downloads folder.
  		return androidVersion >= 21;  // when ACTION_OPEN_DOCUMENT_TREE was added
 -	case SYSPROP_APP_GOLD:
 -#ifdef GOLD
@@ -383,5 +539,5 @@ index e53b7c7ab..fe69647ed 100644
  			return g_jitAvailable;
  
 -- 
-2.31.1
+2.34.0
 
diff --git a/gnu/packages/patches/pulseview-glib-2.68.patch b/gnu/packages/patches/pulseview-glib-2.68.patch
new file mode 100644
index 0000000000..bb49b3656f
--- /dev/null
+++ b/gnu/packages/patches/pulseview-glib-2.68.patch
@@ -0,0 +1,54 @@
+Taken from upstream:
+https://github.com/sigrokproject/pulseview/pull/39/commits/fb89dd11f2a4a08b73c498869789e38677181a8d.
+
+From fb89dd11f2a4a08b73c498869789e38677181a8d Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Stefan=20Br=C3=BCns?= <stefan.bruens@rwth-aachen.de>
+Date: Wed, 28 Apr 2021 02:14:47 +0200
+Subject: [PATCH] Fix broken build due to C++ template behind C linkage
+
+glib/gatomic.h since 2.68 includes type_traits, which causes a compilation
+error:
+In file included from /usr/include/glib-2.0/glib/gatomic.h:31,
+                 from /usr/include/glib-2.0/glib/gthread.h:32,
+                 from /usr/include/glib-2.0/glib/gasyncqueue.h:32,
+                 from /usr/include/glib-2.0/glib.h:32,
+                 from /usr/include/libsigrokdecode/libsigrokdecode.h:25,
+                 from /home/abuild/rpmbuild/BUILD/pulseview-0.4.2/pv/data/decode/annotation.cpp:21:
+/usr/include/c++/10/type_traits:2308:3: error: template with C linkage
+2308 |   template<typename _CTp, typename _Rp>
+
+As libsigrokdecode.h declares extern C linkage itself where necessary,
+remove it from pulseviews include statements from the last two occasions.
+---
+ pv/data/decode/annotation.cpp  | 2 --
+ pv/views/trace/decodetrace.cpp | 2 --
+ 2 files changed, 4 deletions(-)
+
+diff --git a/pv/data/decode/annotation.cpp b/pv/data/decode/annotation.cpp
+index 7f233478..f8a5c47b 100644
+--- a/pv/data/decode/annotation.cpp
++++ b/pv/data/decode/annotation.cpp
+@@ -17,9 +17,7 @@
+  * along with this program; if not, see <http://www.gnu.org/licenses/>.
+  */
+ 
+-extern "C" {
+ #include <libsigrokdecode/libsigrokdecode.h>
+-}
+ 
+ #include <cassert>
+ #include <vector>
+diff --git a/pv/views/trace/decodetrace.cpp b/pv/views/trace/decodetrace.cpp
+index 409f1d28..888064d0 100644
+--- a/pv/views/trace/decodetrace.cpp
++++ b/pv/views/trace/decodetrace.cpp
+@@ -17,9 +17,7 @@
+  * along with this program; if not, see <http://www.gnu.org/licenses/>.
+  */
+ 
+-extern "C" {
+ #include <libsigrokdecode/libsigrokdecode.h>
+-}
+ 
+ #include <limits>
+ #include <mutex>
diff --git a/gnu/packages/patches/purescript-relax-dependencies.patch b/gnu/packages/patches/purescript-relax-dependencies.patch
deleted file mode 100644
index 6ab4716fc4..0000000000
--- a/gnu/packages/patches/purescript-relax-dependencies.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-Allow the purescript dependencies to better match the available packages in
-Guix.
-
---- purescript-0.13.8/purescript.cabal
-+++ purescript-0.13.8/purescript.cabal.orig
-@@ -1091 +1091 @@ library
--        Glob ==0.9.*,
-+        Glob ==0.10.*,
-@@ -1095 +1095 @@ library
--        ansi-terminal >=0.7.1 && <0.9,
-+        ansi-terminal ==0.9.*,
-@@ -1105 +1105 @@ library
--        clock <0.8,
-+        clock ==0.8.*,
-@@ -1173 +1173 @@ executable purs
--        Glob ==0.9.*,
-+        Glob ==0.10.*,
-@@ -1177 +1177 @@ executable purs
--        ansi-terminal >=0.7.1 && <0.9,
-+        ansi-terminal ==0.9.*,
-@@ -1188 +1188 @@ executable purs
--        clock <0.8,
-+        clock ==0.8.*,
-@@ -1209 +1209 @@ executable purs
--        network >=3.0.1.1 && <3.1,
-+        network >=2.8 && <3.1,
-@@ -1288 +1288 @@ test-suite tests
--        Glob ==0.9.*,
-+        Glob ==0.10.*,
-@@ -1293 +1293 @@ test-suite tests
--        ansi-terminal >=0.7.1 && <0.9,
-+        ansi-terminal ==0.9.*,
-@@ -1303 +1303 @@ test-suite tests
--        clock <0.8,
-+        clock ==0.8.*,
-@@ -1315,2 +1315,2 @@ test-suite tests
--        hspec <2.7,
--        hspec-discover <2.7,
-+        hspec ==2.7.*,
-+        hspec-discover ==2.7.*,
diff --git a/gnu/packages/patches/python-2.7-no-static-lib.patch b/gnu/packages/patches/python-2.7-no-static-lib.patch
new file mode 100644
index 0000000000..02529989be
--- /dev/null
+++ b/gnu/packages/patches/python-2.7-no-static-lib.patch
@@ -0,0 +1,70 @@
+From 92e2dcace7a3c02289b314238c5f18caec659ff1 Mon Sep 17 00:00:00 2001
+From: Julien Lepiller <julien@lepiller.eu>
+Date: Sat, 5 Jun 2021 12:41:47 +0200
+Subject: [PATCH] No static lib.
+
+This patch is adapted from Fedora. The original patch did not apply
+because of whitespace changes.
+
+00111 #
+Patch the Makefile.pre.in so that the generated Makefile doesn't try to build
+a libpythonMAJOR.MINOR.a (bug 550692):
+Downstream only: not appropriate for upstream
+---
+ Makefile.pre.in | 26 +-------------------------
+ 1 file changed, 1 insertion(+), 25 deletions(-)
+
+diff --git a/Makefile.pre.in b/Makefile.pre.in
+index 6239fc3..948f196 100644
+--- a/Makefile.pre.in
++++ b/Makefile.pre.in
+@@ -486,7 +486,7 @@ coverage-report: regen-grammar
+ 
+ 
+ # Build the interpreter
+-$(BUILDPYTHON):	Modules/python.o $(LIBRARY) $(LDLIBRARY)
++$(BUILDPYTHON):	Modules/python.o $(LDLIBRARY)
+ 		$(LINKCC) $(LDFLAGS) $(LINKFORSHARED) -o $@ \
+ 			Modules/python.o \
+ 			$(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST)
+@@ -527,18 +527,6 @@ sharedmods: $(BUILDPYTHON) pybuilddir.txt Modules/_math.o
+ 		_TCLTK_INCLUDES='$(TCLTK_INCLUDES)' _TCLTK_LIBS='$(TCLTK_LIBS)' \
+ 		$(PY_BUILD_ENVIRON) $(PYTHON_FOR_BUILD) $(srcdir)/setup.py $$quiet build
+ 
+-# Build static library
+-# avoid long command lines, same as LIBRARY_OBJS
+-$(LIBRARY): $(LIBRARY_OBJS)
+-	-rm -f $@
+-	$(AR) $(ARFLAGS) $@ Modules/getbuildinfo.o
+-	$(AR) $(ARFLAGS) $@ $(PARSER_OBJS)
+-	$(AR) $(ARFLAGS) $@ $(OBJECT_OBJS)
+-	$(AR) $(ARFLAGS) $@ $(PYTHON_OBJS)
+-	$(AR) $(ARFLAGS) $@ $(MODULE_OBJS) $(SIGNAL_OBJS)
+-	$(AR) $(ARFLAGS) $@ $(MODOBJS)
+-	$(RANLIB) $@
+-
+ libpython$(VERSION).so: $(LIBRARY_OBJS)
+ 	if test $(INSTSONAME) != $(LDLIBRARY); then \
+ 		$(BLDSHARED) -Wl,-h$(INSTSONAME) -o $(INSTSONAME) $(LIBRARY_OBJS) $(MODLIBS) $(SHLIBS) $(LIBC) $(LIBM) $(LDLAST); \
+@@ -1216,18 +1204,6 @@ libainstall:	@DEF_MAKE_RULE@ python-config
+ 		else	true; \
+ 		fi; \
+ 	done
+-	@if test -d $(LIBRARY); then :; else \
+-		if test "$(PYTHONFRAMEWORKDIR)" = no-framework; then \
+-			if test "$(SO)" = .dll; then \
+-				$(INSTALL_DATA) $(LDLIBRARY) $(DESTDIR)$(LIBPL) ; \
+-			else \
+-				$(INSTALL_DATA) $(LIBRARY) $(DESTDIR)$(LIBPL)/$(LIBRARY) ; \
+-				$(RANLIB) $(DESTDIR)$(LIBPL)/$(LIBRARY) ; \
+-			fi; \
+-		else \
+-			echo Skip install of $(LIBRARY) - use make frameworkinstall; \
+-		fi; \
+-	fi
+ 	$(INSTALL_DATA) Modules/config.c $(DESTDIR)$(LIBPL)/config.c
+ 	$(INSTALL_DATA) Modules/python.o $(DESTDIR)$(LIBPL)/python.o
+ 	$(INSTALL_DATA) $(srcdir)/Modules/config.c.in $(DESTDIR)$(LIBPL)/config.c.in
+-- 
+2.31.1
+
diff --git a/gnu/packages/patches/python-3-fix-tests.patch b/gnu/packages/patches/python-3-fix-tests.patch
index e13790bd41..b44e743c71 100644
--- a/gnu/packages/patches/python-3-fix-tests.patch
+++ b/gnu/packages/patches/python-3-fix-tests.patch
@@ -1,10 +1,39 @@
-See the discussion about the issues fixed here at:
-http://bugs.python.org/issue20868 .
+From f0698133e7d6c353a3e6ae0fc62e57ba558a9bc0 Mon Sep 17 00:00:00 2001
+From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
+Date: Wed, 28 Oct 2020 22:55:05 -0400
+Subject: [PATCH] Skip problematic Python 3 tests in Guix.
+
+A subset of the hunks in this patch is tracked upstream at
+https://bugs.python.org/issue38845, which was contributed by Tanguy Le
+Carrour <tanguy@bioneland.org>.
+---
+ Lib/ctypes/test/test_callbacks.py         | 3 +++
+ Lib/ctypes/test/test_find.py              | 1 +
+ Lib/ctypes/test/test_libc.py              | 3 +++
+ Lib/distutils/tests/test_archive_util.py  | 2 ++
+ Lib/distutils/tests/test_sdist.py         | 1 +
+ Lib/test/_test_multiprocessing.py         | 2 ++
+ Lib/test/test_asyncio/test_base_events.py | 2 ++
+ Lib/test/test_generators.py               | 1 +
+ Lib/test/test_pathlib.py                  | 3 +--
+ Lib/test/test_pdb.py                      | 4 ++--
+ Lib/test/test_regrtest.py                 | 2 ++
+ Lib/test/test_resource.py                 | 1 +
+ Lib/test/test_shutil.py                   | 2 ++
+ Lib/test/test_signal.py                   | 4 ++++
+ Lib/test/test_socket.py                   | 8 ++++++++
+ Lib/test/test_spwd.py                     | 6 ++----
+ Lib/test/test_tarfile.py                  | 9 ++++++---
+ Lib/test/test_threading.py                | 3 +++
+ Lib/test/test_unicodedata.py              | 1 +
+ Tools/scripts/run_tests.py                | 2 +-
+ 20 files changed, 48 insertions(+), 12 deletions(-)
 
 diff --git a/Lib/ctypes/test/test_callbacks.py b/Lib/ctypes/test/test_callbacks.py
+index d8e9c5a760..94fc5929c9 100644
 --- a/Lib/ctypes/test/test_callbacks.py
 +++ b/Lib/ctypes/test/test_callbacks.py
-@@ -3,6 +3,7 @@ import unittest
+@@ -5,6 +5,7 @@ from test import support
  from ctypes import *
  from ctypes.test import need_symbol
  import _ctypes_test
@@ -12,7 +41,7 @@ diff --git a/Lib/ctypes/test/test_callbacks.py b/Lib/ctypes/test/test_callbacks.
  
  class Callbacks(unittest.TestCase):
      functype = CFUNCTYPE
-@@ -176,6 +177,8 @@ class SampleCallbacksTestCase(unittest.TestCase):
+@@ -178,6 +179,8 @@ class SampleCallbacksTestCase(unittest.TestCase):
  
          self.assertLess(diff, 0.01, "%s not less than 0.01" % diff)
  
@@ -21,7 +50,20 @@ diff --git a/Lib/ctypes/test/test_callbacks.py b/Lib/ctypes/test/test_callbacks.
      def test_issue_8959_a(self):
          from ctypes.util import find_library
          libc_path = find_library("c")
+diff --git a/Lib/ctypes/test/test_find.py b/Lib/ctypes/test/test_find.py
+index 92ac1840ad..c8eb75dedd 100644
+--- a/Lib/ctypes/test/test_find.py
++++ b/Lib/ctypes/test/test_find.py
+@@ -116,6 +116,7 @@ class FindLibraryLinux(unittest.TestCase):
+         with unittest.mock.patch("ctypes.util._findSoname_ldconfig", lambda *args: None):
+             self.assertNotEqual(find_library('c'), None)
+ 
++    @unittest.skipIf(True, "ldconfig is not used on Guix")
+     def test_find_library_with_ld(self):
+         with unittest.mock.patch("ctypes.util._findSoname_ldconfig", lambda *args: None), \
+              unittest.mock.patch("ctypes.util._findLib_gcc", lambda *args: None):
 diff --git a/Lib/ctypes/test/test_libc.py b/Lib/ctypes/test/test_libc.py
+index 56285b5ff8..c088ab3db8 100644
 --- a/Lib/ctypes/test/test_libc.py
 +++ b/Lib/ctypes/test/test_libc.py
 @@ -2,6 +2,7 @@ import unittest
@@ -42,6 +84,7 @@ diff --git a/Lib/ctypes/test/test_libc.py b/Lib/ctypes/test/test_libc.py
          comparefunc = CFUNCTYPE(c_int, POINTER(c_char), POINTER(c_char))
          lib.my_qsort.argtypes = c_void_p, c_size_t, c_size_t, comparefunc
 diff --git a/Lib/distutils/tests/test_archive_util.py b/Lib/distutils/tests/test_archive_util.py
+index e9aad0e40f..8bbaa51ee5 100644
 --- a/Lib/distutils/tests/test_archive_util.py
 +++ b/Lib/distutils/tests/test_archive_util.py
 @@ -333,6 +333,7 @@ class ArchiveUtilTestCase(support.TempdirManager,
@@ -61,6 +104,7 @@ diff --git a/Lib/distutils/tests/test_archive_util.py b/Lib/distutils/tests/test
          tmpdir =  self._create_files()
          base_name = os.path.join(self.mkdtemp(), 'archive')
 diff --git a/Lib/distutils/tests/test_sdist.py b/Lib/distutils/tests/test_sdist.py
+index 23db126959..6e2329df7d 100644
 --- a/Lib/distutils/tests/test_sdist.py
 +++ b/Lib/distutils/tests/test_sdist.py
 @@ -443,6 +443,7 @@ class SDistTestCase(BasePyPIRCCommandTestCase):
@@ -72,9 +116,10 @@ diff --git a/Lib/distutils/tests/test_sdist.py b/Lib/distutils/tests/test_sdist.
          # now building a sdist
          dist, cmd = self.get_cmd()
 diff --git a/Lib/test/_test_multiprocessing.py b/Lib/test/_test_multiprocessing.py
+index e47905c863..31a5a9c308 100644
 --- a/Lib/test/_test_multiprocessing.py
 +++ b/Lib/test/_test_multiprocessing.py
-@@ -1473,6 +1473,7 @@ class _TestCondition(BaseTestCase):
+@@ -1577,6 +1577,7 @@ class _TestCondition(BaseTestCase):
          if pid is not None:
              os.kill(pid, signal.SIGINT)
  
@@ -82,10 +127,19 @@ diff --git a/Lib/test/_test_multiprocessing.py b/Lib/test/_test_multiprocessing.
      def test_wait_result(self):
          if isinstance(self, ProcessesMixin) and sys.platform != 'win32':
              pid = os.getpid()
+@@ -3905,6 +3906,7 @@ class _TestSharedMemory(BaseTestCase):
+         sms.close()
+ 
+     @unittest.skipIf(os.name != "posix", "not feasible in non-posix platforms")
++    @unittest.skipUnless(sys.stdin.isatty(), "KeyboardInterrupts require a TTY device")
+     def test_shared_memory_SharedMemoryServer_ignores_sigint(self):
+         # bpo-36368: protect SharedMemoryManager server process from
+         # KeyboardInterrupt signals.
 diff --git a/Lib/test/test_asyncio/test_base_events.py b/Lib/test/test_asyncio/test_base_events.py
+index 533d5cc7f5..c4f860cc3b 100644
 --- a/Lib/test/test_asyncio/test_base_events.py
 +++ b/Lib/test/test_asyncio/test_base_events.py
-@@ -1323,6 +1323,8 @@ class BaseEventLoopWithSelectorTests(test_utils.TestCase):
+@@ -1341,6 +1341,8 @@ class BaseEventLoopWithSelectorTests(test_utils.TestCase):
          self._test_create_connection_ip_addr(m_socket, False)
  
      @patch_socket
@@ -95,9 +149,10 @@ diff --git a/Lib/test/test_asyncio/test_base_events.py b/Lib/test/test_asyncio/t
          m_socket.getaddrinfo = socket.getaddrinfo
          sock = m_socket.socket.return_value
 diff --git a/Lib/test/test_generators.py b/Lib/test/test_generators.py
+index 3bf1522808..04bac8a7db 100644
 --- a/Lib/test/test_generators.py
 +++ b/Lib/test/test_generators.py
-@@ -34,6 +34,7 @@ class SignalAndYieldFromTest(unittest.TestCase):
+@@ -33,6 +33,7 @@ class SignalAndYieldFromTest(unittest.TestCase):
          else:
              return "FAILED"
  
@@ -105,30 +160,11 @@ diff --git a/Lib/test/test_generators.py b/Lib/test/test_generators.py
      def test_raise_and_yield_from(self):
          gen = self.generator1()
          gen.send(None)
-diff --git a/Lib/test/test_normalization.py b/Lib/test/test_normalization.py
---- a/Lib/test/test_normalization.py
-+++ b/Lib/test/test_normalization.py
-@@ -2,6 +2,7 @@ from test.support import open_urlresource
- import unittest
- 
- from http.client import HTTPException
-+from urllib.error import URLError
- import sys
- from unicodedata import normalize, unidata_version
- 
-@@ -43,6 +44,8 @@ class NormalizationTest(unittest.TestCase):
-         except PermissionError:
-             self.skipTest(f"Permission error when downloading {TESTDATAURL} "
-                           f"into the test data directory")
-+        except URLError:
-+            self.skipTest("DNS lookups are not enabled.")
-         except (OSError, HTTPException):
-             self.fail(f"Could not retrieve {TESTDATAURL}")
- 
 diff --git a/Lib/test/test_pathlib.py b/Lib/test/test_pathlib.py
+index 3da35710b9..5404f9193d 100644
 --- a/Lib/test/test_pathlib.py
 +++ b/Lib/test/test_pathlib.py
-@@ -2134,8 +2134,7 @@ class PosixPathTest(_BasePathTest, unittest.TestCase):
+@@ -2408,8 +2408,7 @@ class PosixPathTest(_BasePathTest, unittest.TestCase):
          self.assertEqual(given, expect)
          self.assertEqual(set(p.rglob("FILEd*")), set())
  
@@ -139,9 +175,10 @@ diff --git a/Lib/test/test_pathlib.py b/Lib/test/test_pathlib.py
          P = self.cls
          support.import_module('pwd')
 diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py
+index 8016f81e5a..10190486b4 100644
 --- a/Lib/test/test_pdb.py
 +++ b/Lib/test/test_pdb.py
-@@ -1150,11 +1150,11 @@ def test_pdb_issue_20766():
+@@ -1219,11 +1219,11 @@ def test_pdb_issue_20766():
      > <doctest test.test_pdb.test_pdb_issue_20766[0]>(6)test_function()
      -> print('pdb %d: %s' % (i, sess._previous_sigint_handler))
      (Pdb) continue
@@ -156,9 +193,10 @@ diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py
  
  
 diff --git a/Lib/test/test_regrtest.py b/Lib/test/test_regrtest.py
+index a77638b10a..2069b349a8 100644
 --- a/Lib/test/test_regrtest.py
 +++ b/Lib/test/test_regrtest.py
-@@ -762,6 +762,7 @@ class ArgsTestCase(BaseTestCase):
+@@ -811,6 +811,7 @@ class ArgsTestCase(BaseTestCase):
          output = self.run_tests('--fromfile', filename)
          self.check_executed_tests(output, tests)
  
@@ -166,7 +204,7 @@ diff --git a/Lib/test/test_regrtest.py b/Lib/test/test_regrtest.py
      def test_interrupted(self):
          code = TEST_INTERRUPTED
          test = self.create_test('sigint', code=code)
-@@ -779,6 +780,7 @@ class ArgsTestCase(BaseTestCase):
+@@ -828,6 +829,7 @@ class ArgsTestCase(BaseTestCase):
                   % (self.TESTNAME_REGEX, len(tests)))
          self.check_line(output, regex)
  
@@ -175,9 +213,10 @@ diff --git a/Lib/test/test_regrtest.py b/Lib/test/test_regrtest.py
          # Issue #25373: test --slowest with an interrupted test
          code = TEST_INTERRUPTED
 diff --git a/Lib/test/test_resource.py b/Lib/test/test_resource.py
+index e5ece5284c..5299e54507 100644
 --- a/Lib/test/test_resource.py
 +++ b/Lib/test/test_resource.py
-@@ -145,6 +145,7 @@ class ResourceTest(unittest.TestCase):
+@@ -148,6 +148,7 @@ class ResourceTest(unittest.TestCase):
  
      @unittest.skipUnless(hasattr(resource, 'prlimit'), 'no prlimit')
      @support.requires_linux_version(2, 6, 36)
@@ -186,37 +225,75 @@ diff --git a/Lib/test/test_resource.py b/Lib/test/test_resource.py
          self.assertRaises(TypeError, resource.prlimit)
          self.assertRaises(ProcessLookupError, resource.prlimit,
 diff --git a/Lib/test/test_shutil.py b/Lib/test/test_shutil.py
+index e19af64be0..1b893df6fa 100644
 --- a/Lib/test/test_shutil.py
 +++ b/Lib/test/test_shutil.py
-@@ -1143,6 +1143,7 @@ class TestShutil(unittest.TestCase):
+@@ -1427,6 +1427,7 @@ class TestArchives(BaseTest, unittest.TestCase):
+         base_name = os.path.join(tmpdir, 'archive')
          self.assertRaises(ValueError, make_archive, base_name, 'xxx')
  
-     @support.requires_zlib
-+    @unittest.skipIf(True, "getgrgid(0)[0] raises a KeyError on Guix")
++    @unittest.skipIf(True, "The Guix build container has no root user")
+     @support.requires_zlib()
      def test_make_archive_owner_group(self):
          # testing make_archive with owner and group, with various combinations
-         # this works even if there's not gid/uid support
-@@ -1171,6 +1172,7 @@ class TestShutil(unittest.TestCase):
+@@ -1455,6 +1456,7 @@ class TestArchives(BaseTest, unittest.TestCase):
+         self.assertTrue(os.path.isfile(res))
  
  
-     @support.requires_zlib
-+    @unittest.skipIf(True, "getgrgid(0)[0] raises a KeyError on Guix")
++    @unittest.skipIf(True, "The Guix build container has no root user")
+     @support.requires_zlib()
      @unittest.skipUnless(UID_GID_SUPPORT, "Requires grp and pwd support")
      def test_tarfile_root_owner(self):
-         root_dir, base_dir = self._create_files()
+diff --git a/Lib/test/test_signal.py b/Lib/test/test_signal.py
+index 45553a6a42..55623f01a3 100644
+--- a/Lib/test/test_signal.py
++++ b/Lib/test/test_signal.py
+@@ -78,6 +78,7 @@ class PosixTests(unittest.TestCase):
+         self.assertLess(len(s), signal.NSIG)
+ 
+     @unittest.skipUnless(sys.executable, "sys.executable required.")
++    @unittest.skipUnless(sys.stdin.isatty(), "KeyboardInterrupts require a TTY device")
+     def test_keyboard_interrupt_exit_code(self):
+         """KeyboardInterrupt triggers exit via SIGINT."""
+         process = subprocess.run(
+@@ -128,6 +129,7 @@ class WindowsSignalTests(unittest.TestCase):
+             signal.signal(7, handler)
+ 
+     @unittest.skipUnless(sys.executable, "sys.executable required.")
++    @unittest.skipUnless(sys.stdin.isatty(), "KeyboardInterrupts require a TTY device")
+     def test_keyboard_interrupt_exit_code(self):
+         """KeyboardInterrupt triggers an exit using STATUS_CONTROL_C_EXIT."""
+         # We don't test via os.kill(os.getpid(), signal.CTRL_C_EVENT) here
+@@ -1245,6 +1247,7 @@ class StressTest(unittest.TestCase):
+ 
+ class RaiseSignalTest(unittest.TestCase):
+ 
++    @unittest.skipUnless(sys.stdin.isatty(), "KeyboardInterrupts require a TTY device")
+     def test_sigint(self):
+         with self.assertRaises(KeyboardInterrupt):
+             signal.raise_signal(signal.SIGINT)
+@@ -1275,6 +1278,7 @@ class RaiseSignalTest(unittest.TestCase):
+ 
+ class PidfdSignalTest(unittest.TestCase):
+ 
++    @unittest.skipUnless(sys.stdin.isatty(), "KeyboardInterrupts require a TTY device")
+     @unittest.skipUnless(
+         hasattr(signal, "pidfd_send_signal"),
+         "pidfd support not built in",
 diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py
+index aefba4f397..6c89f558d5 100755
 --- a/Lib/test/test_socket.py
 +++ b/Lib/test/test_socket.py
-@@ -875,6 +875,8 @@ class GeneralModuleTests(unittest.TestCase):
+@@ -1009,6 +1009,8 @@ class GeneralModuleTests(unittest.TestCase):
          if not fqhn in all_host_names:
              self.fail("Error testing host resolution mechanisms. (fqdn: %s, all: %s)" % (fqhn, repr(all_host_names)))
  
 +    @unittest.skipUnless(support.is_resource_enabled('network'),
 +                         'network is not enabled')
      def test_host_resolution(self):
-         for addr in [support.HOSTv4, '10.0.0.1', '255.255.255.255']:
+         for addr in [socket_helper.HOSTv4, '10.0.0.1', '255.255.255.255']:
              self.assertEqual(socket.gethostbyname(addr), addr)
-@@ -1004,6 +1006,8 @@ class GeneralModuleTests(unittest.TestCase):
+@@ -1140,6 +1142,8 @@ class GeneralModuleTests(unittest.TestCase):
              self.assertWarns(DeprecationWarning, socket.ntohs, k)
              self.assertWarns(DeprecationWarning, socket.htons, k)
  
@@ -225,7 +302,7 @@ diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py
      def testGetServBy(self):
          eq = self.assertEqual
          # Find one service that exists, then check all the related interfaces.
-@@ -1358,6 +1362,8 @@ class GeneralModuleTests(unittest.TestCase):
+@@ -1489,6 +1493,8 @@ class GeneralModuleTests(unittest.TestCase):
              raise
          self.assertRaises(TypeError, s.ioctl, socket.SIO_LOOPBACK_FAST_PATH, None)
  
@@ -234,7 +311,7 @@ diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py
      def testGetaddrinfo(self):
          try:
              socket.getaddrinfo('localhost', 80)
-@@ -1440,6 +1446,8 @@ class GeneralModuleTests(unittest.TestCase):
+@@ -1571,6 +1577,8 @@ class GeneralModuleTests(unittest.TestCase):
          # only IP addresses are allowed
          self.assertRaises(OSError, socket.getnameinfo, ('mail.python.org',0), 0)
  
@@ -244,6 +321,7 @@ diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py
                           'network is not enabled')
      def test_idna(self):
 diff --git a/Lib/test/test_spwd.py b/Lib/test/test_spwd.py
+index 07793c84c8..fec672bcbe 100644
 --- a/Lib/test/test_spwd.py
 +++ b/Lib/test/test_spwd.py
 @@ -5,8 +5,7 @@ from test import support
@@ -267,9 +345,10 @@ diff --git a/Lib/test/test_spwd.py b/Lib/test/test_spwd.py
  
      def test_getspnam_exception(self):
 diff --git a/Lib/test/test_tarfile.py b/Lib/test/test_tarfile.py
+index 29cde91bf7..8d0f20e8bf 100644
 --- a/Lib/test/test_tarfile.py
 +++ b/Lib/test/test_tarfile.py
-@@ -2509,9 +2509,12 @@ def root_is_uid_gid_0():
+@@ -2607,9 +2607,12 @@ def root_is_uid_gid_0():
          import pwd, grp
      except ImportError:
          return False
@@ -286,9 +365,10 @@ diff --git a/Lib/test/test_tarfile.py b/Lib/test/test_tarfile.py
      return True
  
 diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py
+index c21cdf8eb7..6c9d575032 100644
 --- a/Lib/test/test_threading.py
 +++ b/Lib/test/test_threading.py
-@@ -1249,6 +1249,7 @@ class MiscTestCase(unittest.TestCase):
+@@ -1398,6 +1398,7 @@ class MiscTestCase(unittest.TestCase):
  
  
  class InterruptMainTests(unittest.TestCase):
@@ -296,7 +376,7 @@ diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py
      def test_interrupt_main_subthread(self):
          # Calling start_new_thread with a function that executes interrupt_main
          # should raise KeyboardInterrupt upon completion.
-@@ -1260,6 +1261,8 @@ class InterruptMainTests(unittest.TestCase):
+@@ -1409,6 +1410,8 @@ class InterruptMainTests(unittest.TestCase):
              t.join()
          t.join()
  
@@ -305,10 +385,23 @@ diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py
      def test_interrupt_main_mainthread(self):
          # Make sure that if interrupt_main is called in main thread that
          # KeyboardInterrupt is raised instantly.
+diff --git a/Lib/test/test_unicodedata.py b/Lib/test/test_unicodedata.py
+index b552d2bd17..28b1144e15 100644
+--- a/Lib/test/test_unicodedata.py
++++ b/Lib/test/test_unicodedata.py
+@@ -309,6 +309,7 @@ class UnicodeMiscTest(UnicodeDatabaseTest):
+                 self.assertEqual(len(lines), 1,
+                                  r"\u%.4x should not be a linebreak" % i)
+ 
++@requires_resource('network')
+ class NormalizationTest(unittest.TestCase):
+     @staticmethod
+     def check_version(testfile):
 diff --git a/Tools/scripts/run_tests.py b/Tools/scripts/run_tests.py
+index bcfa5e943b..1f2484971b 100644
 --- a/Tools/scripts/run_tests.py
 +++ b/Tools/scripts/run_tests.py
-@@ -39,7 +39,7 @@ def main(regrtest_args):
+@@ -41,7 +41,7 @@ def main(regrtest_args):
      if not any(is_multiprocess_flag(arg) for arg in regrtest_args):
          args.extend(['-j', '0'])  # Use all CPU cores
      if not any(is_resource_use_flag(arg) for arg in regrtest_args):
@@ -317,3 +410,6 @@ diff --git a/Tools/scripts/run_tests.py b/Tools/scripts/run_tests.py
      args.extend(regrtest_args)
      print(' '.join(args))
      if sys.platform == 'win32':
+-- 
+2.29.2
+
diff --git a/gnu/packages/patches/python-3-hurd-configure.patch b/gnu/packages/patches/python-3-hurd-configure.patch
new file mode 100644
index 0000000000..aa25a401c5
--- /dev/null
+++ b/gnu/packages/patches/python-3-hurd-configure.patch
@@ -0,0 +1,27 @@
+Upstream status: Not upstreamed.
+
+The build system refuses to cross-compile for unknown targets
+even though it works fine.  Add GNU/Hurd target.
+
+--- Python-3.8.5/configure.orig	2020-10-26 14:06:09.665423525 +0100
++++ Python-3.8.5/configure	2020-10-26 14:08:30.987765738 +0100
+@@ -3278,6 +3278,9 @@
+ 	*-*-vxworks*)
+ 	    ac_sys_system=VxWorks
+ 	    ;;
++	*-*-gnu)
++	    ac_sys_system=GNU
++	    ;;
+ 	*)
+ 		# for now, limit cross builds to known configurations
+ 		MACHDEP="unknown"
+@@ -3328,6 +3331,9 @@
+ 	*-*-vxworks*)
+ 		_host_cpu=$host_cpu
+ 		;;
++	*-*-gnu)
++		_host_cpu=$host_cpu
++	    ;;
+ 	*)
+ 		# for now, limit cross builds to known configurations
+ 		MACHDEP="unknown"
diff --git a/gnu/packages/patches/python-3-no-static-lib.patch b/gnu/packages/patches/python-3-no-static-lib.patch
new file mode 100644
index 0000000000..b44dbc976c
--- /dev/null
+++ b/gnu/packages/patches/python-3-no-static-lib.patch
@@ -0,0 +1,75 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: David Malcolm <dmalcolm@redhat.com>
+Date: Mon, 18 Jan 2010 17:59:07 +0000
+Subject: [PATCH] 00111: Don't try to build a libpythonMAJOR.MINOR.a
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Downstream only: not appropriate for upstream.
+
+See https://bugzilla.redhat.com/show_bug.cgi?id=556092
+
+Co-authored-by: David Malcolm <dmalcolm@redhat.com>
+Co-authored-by: Bohuslav Kabrda <bkabrda@redhat.com>
+Co-authored-by: Matej Stuchlik <mstuchli@redhat.com>
+Co-authored-by: Robert Kuska <rkuska@redhat.com>
+Co-authored-by: Charalampos Stratakis <cstratak@redhat.com>
+Co-authored-by: Miro Hrončok <miro@hroncok.cz>
+---
+ Makefile.pre.in | 21 ++-------------------
+ 1 file changed, 2 insertions(+), 19 deletions(-)
+
+diff --git a/Makefile.pre.in b/Makefile.pre.in
+index 0c3981c132..5587422ec7 100644
+--- a/Makefile.pre.in
++++ b/Makefile.pre.in
+@@ -589,7 +589,7 @@ clinic: check-clean-src $(srcdir)/Modules/_blake2/blake2s_impl.c
+ 	$(PYTHON_FOR_REGEN) $(srcdir)/Tools/clinic/clinic.py --make --srcdir $(srcdir)
+ 
+ # Build the interpreter
+-$(BUILDPYTHON):	Programs/python.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY) $(EXPORTSYMS)
++$(BUILDPYTHON):	Programs/python.o $(LDLIBRARY) $(PY3LIBRARY) $(EXPORTSYMS)
+ 	$(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/python.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS)
+ 
+ platform: $(BUILDPYTHON) pybuilddir.txt
+@@ -637,12 +637,6 @@ sharedmods: $(BUILDPYTHON) pybuilddir.txt Modules/_math.o
+ 		_TCLTK_INCLUDES='$(TCLTK_INCLUDES)' _TCLTK_LIBS='$(TCLTK_LIBS)' \
+ 		$(PYTHON_FOR_BUILD) $(srcdir)/setup.py $$quiet build
+ 
+-
+-# Build static library
+-$(LIBRARY): $(LIBRARY_OBJS)
+-	-rm -f $@
+-	$(AR) $(ARFLAGS) $@ $(LIBRARY_OBJS)
+-
+ libpython$(LDVERSION).so: $(LIBRARY_OBJS) $(DTRACE_OBJS)
+ 	if test $(INSTSONAME) != $(LDLIBRARY); then \
+ 		$(BLDSHARED) -Wl,-h$(INSTSONAME) -o $(INSTSONAME) $(LIBRARY_OBJS) $(MODLIBS) $(SHLIBS) $(LIBC) $(LIBM); \
+@@ -724,7 +718,7 @@ Makefile Modules/config.c: Makefile.pre \
+ 	@echo "The Makefile was updated, you may need to re-run make."
+ 
+ 
+-Programs/_testembed: Programs/_testembed.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY) $(EXPORTSYMS)
++Programs/_testembed: Programs/_testembed.o $(LDLIBRARY) $(PY3LIBRARY) $(EXPORTSYMS)
+ 	$(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/_testembed.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS)
+ 
+ ############################################################################
+@@ -1652,17 +1646,6 @@ libainstall:	@DEF_MAKE_RULE@ python-config
+ 		else	true; \
+ 		fi; \
+ 	done
+-	@if test -d $(LIBRARY); then :; else \
+-		if test "$(PYTHONFRAMEWORKDIR)" = no-framework; then \
+-			if test "$(SHLIB_SUFFIX)" = .dll; then \
+-				$(INSTALL_DATA) $(LDLIBRARY) $(DESTDIR)$(LIBPL) ; \
+-			else \
+-				$(INSTALL_DATA) $(LIBRARY) $(DESTDIR)$(LIBPL)/$(LIBRARY) ; \
+-			fi; \
+-		else \
+-			echo Skip install of $(LIBRARY) - use make frameworkinstall; \
+-		fi; \
+-	fi
+ 	$(INSTALL_DATA) Modules/config.c $(DESTDIR)$(LIBPL)/config.c
+ 	$(INSTALL_DATA) Programs/python.o $(DESTDIR)$(LIBPL)/python.o
+ 	$(INSTALL_DATA) $(srcdir)/Modules/config.c.in $(DESTDIR)$(LIBPL)/config.c.in
diff --git a/gnu/packages/patches/python-3.8-CVE-2021-3177.patch b/gnu/packages/patches/python-3.8-CVE-2021-3177.patch
deleted file mode 100644
index 01f6b52865..0000000000
--- a/gnu/packages/patches/python-3.8-CVE-2021-3177.patch
+++ /dev/null
@@ -1,194 +0,0 @@
-Fix CVE-2021-3177 for Python 3.8:
-
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-3177
-
-Patch copied from upstream source repository:
-
-https://github.com/python/cpython/commit/ece5dfd403dac211f8d3c72701fe7ba7b7aa5b5f
-
-From ece5dfd403dac211f8d3c72701fe7ba7b7aa5b5f Mon Sep 17 00:00:00 2001
-From: "Miss Islington (bot)"
- <31488909+miss-islington@users.noreply.github.com>
-Date: Mon, 18 Jan 2021 13:28:52 -0800
-Subject: [PATCH] closes bpo-42938: Replace snprintf with Python unicode
- formatting in ctypes param reprs. (GH-24248)
-
-(cherry picked from commit 916610ef90a0d0761f08747f7b0905541f0977c7)
-
-Co-authored-by: Benjamin Peterson <benjamin@python.org>
-
-Co-authored-by: Benjamin Peterson <benjamin@python.org>
----
- Lib/ctypes/test/test_parameters.py            | 43 ++++++++++++++++
- .../2021-01-18-09-27-31.bpo-42938.4Zn4Mp.rst  |  2 +
- Modules/_ctypes/callproc.c                    | 51 +++++++------------
- 3 files changed, 64 insertions(+), 32 deletions(-)
- create mode 100644 Misc/NEWS.d/next/Security/2021-01-18-09-27-31.bpo-42938.4Zn4Mp.rst
-
-diff --git a/Lib/ctypes/test/test_parameters.py b/Lib/ctypes/test/test_parameters.py
-index e4c25fd880cef..531894fdec838 100644
---- a/Lib/ctypes/test/test_parameters.py
-+++ b/Lib/ctypes/test/test_parameters.py
-@@ -201,6 +201,49 @@ def __dict__(self):
-         with self.assertRaises(ZeroDivisionError):
-             WorseStruct().__setstate__({}, b'foo')
- 
-+    def test_parameter_repr(self):
-+        from ctypes import (
-+            c_bool,
-+            c_char,
-+            c_wchar,
-+            c_byte,
-+            c_ubyte,
-+            c_short,
-+            c_ushort,
-+            c_int,
-+            c_uint,
-+            c_long,
-+            c_ulong,
-+            c_longlong,
-+            c_ulonglong,
-+            c_float,
-+            c_double,
-+            c_longdouble,
-+            c_char_p,
-+            c_wchar_p,
-+            c_void_p,
-+        )
-+        self.assertRegex(repr(c_bool.from_param(True)), r"^<cparam '\?' at 0x[A-Fa-f0-9]+>$")
-+        self.assertEqual(repr(c_char.from_param(97)), "<cparam 'c' ('a')>")
-+        self.assertRegex(repr(c_wchar.from_param('a')), r"^<cparam 'u' at 0x[A-Fa-f0-9]+>$")
-+        self.assertEqual(repr(c_byte.from_param(98)), "<cparam 'b' (98)>")
-+        self.assertEqual(repr(c_ubyte.from_param(98)), "<cparam 'B' (98)>")
-+        self.assertEqual(repr(c_short.from_param(511)), "<cparam 'h' (511)>")
-+        self.assertEqual(repr(c_ushort.from_param(511)), "<cparam 'H' (511)>")
-+        self.assertRegex(repr(c_int.from_param(20000)), r"^<cparam '[li]' \(20000\)>$")
-+        self.assertRegex(repr(c_uint.from_param(20000)), r"^<cparam '[LI]' \(20000\)>$")
-+        self.assertRegex(repr(c_long.from_param(20000)), r"^<cparam '[li]' \(20000\)>$")
-+        self.assertRegex(repr(c_ulong.from_param(20000)), r"^<cparam '[LI]' \(20000\)>$")
-+        self.assertRegex(repr(c_longlong.from_param(20000)), r"^<cparam '[liq]' \(20000\)>$")
-+        self.assertRegex(repr(c_ulonglong.from_param(20000)), r"^<cparam '[LIQ]' \(20000\)>$")
-+        self.assertEqual(repr(c_float.from_param(1.5)), "<cparam 'f' (1.5)>")
-+        self.assertEqual(repr(c_double.from_param(1.5)), "<cparam 'd' (1.5)>")
-+        self.assertEqual(repr(c_double.from_param(1e300)), "<cparam 'd' (1e+300)>")
-+        self.assertRegex(repr(c_longdouble.from_param(1.5)), r"^<cparam ('d' \(1.5\)|'g' at 0x[A-Fa-f0-9]+)>$")
-+        self.assertRegex(repr(c_char_p.from_param(b'hihi')), "^<cparam 'z' \(0x[A-Fa-f0-9]+\)>$")
-+        self.assertRegex(repr(c_wchar_p.from_param('hihi')), "^<cparam 'Z' \(0x[A-Fa-f0-9]+\)>$")
-+        self.assertRegex(repr(c_void_p.from_param(0x12)), r"^<cparam 'P' \(0x0*12\)>$")
-+
- ################################################################
- 
- if __name__ == '__main__':
-#diff --git a/Misc/NEWS.d/next/Security/2021-01-18-09-27-31.bpo-42938.4Zn4Mp.rst b/Misc/NEWS.d/next/Security/2021-01-18-09-27-31.bpo-42938.4Zn4Mp.rst
-#new file mode 100644
-#index 0000000000000..7df65a156feab
-#--- /dev/null
-#+++ b/Misc/NEWS.d/next/Security/2021-01-18-09-27-31.bpo-42938.4Zn4Mp.rst
-#@@ -0,0 +1,2 @@
-#+Avoid static buffers when computing the repr of :class:`ctypes.c_double` and
-#+:class:`ctypes.c_longdouble` values.
-diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c
-index a9b8675cd951b..de75918d49f37 100644
---- a/Modules/_ctypes/callproc.c
-+++ b/Modules/_ctypes/callproc.c
-@@ -484,58 +484,47 @@ is_literal_char(unsigned char c)
- static PyObject *
- PyCArg_repr(PyCArgObject *self)
- {
--    char buffer[256];
-     switch(self->tag) {
-     case 'b':
-     case 'B':
--        sprintf(buffer, "<cparam '%c' (%d)>",
-+        return PyUnicode_FromFormat("<cparam '%c' (%d)>",
-             self->tag, self->value.b);
--        break;
-     case 'h':
-     case 'H':
--        sprintf(buffer, "<cparam '%c' (%d)>",
-+        return PyUnicode_FromFormat("<cparam '%c' (%d)>",
-             self->tag, self->value.h);
--        break;
-     case 'i':
-     case 'I':
--        sprintf(buffer, "<cparam '%c' (%d)>",
-+        return PyUnicode_FromFormat("<cparam '%c' (%d)>",
-             self->tag, self->value.i);
--        break;
-     case 'l':
-     case 'L':
--        sprintf(buffer, "<cparam '%c' (%ld)>",
-+        return PyUnicode_FromFormat("<cparam '%c' (%ld)>",
-             self->tag, self->value.l);
--        break;
- 
-     case 'q':
-     case 'Q':
--        sprintf(buffer,
--#ifdef MS_WIN32
--            "<cparam '%c' (%I64d)>",
--#else
--            "<cparam '%c' (%lld)>",
--#endif
-+        return PyUnicode_FromFormat("<cparam '%c' (%lld)>",
-             self->tag, self->value.q);
--        break;
-     case 'd':
--        sprintf(buffer, "<cparam '%c' (%f)>",
--            self->tag, self->value.d);
--        break;
--    case 'f':
--        sprintf(buffer, "<cparam '%c' (%f)>",
--            self->tag, self->value.f);
--        break;
--
-+    case 'f': {
-+        PyObject *f = PyFloat_FromDouble((self->tag == 'f') ? self->value.f : self->value.d);
-+        if (f == NULL) {
-+            return NULL;
-+        }
-+        PyObject *result = PyUnicode_FromFormat("<cparam '%c' (%R)>", self->tag, f);
-+        Py_DECREF(f);
-+        return result;
-+    }
-     case 'c':
-         if (is_literal_char((unsigned char)self->value.c)) {
--            sprintf(buffer, "<cparam '%c' ('%c')>",
-+            return PyUnicode_FromFormat("<cparam '%c' ('%c')>",
-                 self->tag, self->value.c);
-         }
-         else {
--            sprintf(buffer, "<cparam '%c' ('\\x%02x')>",
-+            return PyUnicode_FromFormat("<cparam '%c' ('\\x%02x')>",
-                 self->tag, (unsigned char)self->value.c);
-         }
--        break;
- 
- /* Hm, are these 'z' and 'Z' codes useful at all?
-    Shouldn't they be replaced by the functionality of c_string
-@@ -544,22 +533,20 @@ PyCArg_repr(PyCArgObject *self)
-     case 'z':
-     case 'Z':
-     case 'P':
--        sprintf(buffer, "<cparam '%c' (%p)>",
-+        return PyUnicode_FromFormat("<cparam '%c' (%p)>",
-             self->tag, self->value.p);
-         break;
- 
-     default:
-         if (is_literal_char((unsigned char)self->tag)) {
--            sprintf(buffer, "<cparam '%c' at %p>",
-+            return PyUnicode_FromFormat("<cparam '%c' at %p>",
-                 (unsigned char)self->tag, (void *)self);
-         }
-         else {
--            sprintf(buffer, "<cparam 0x%02x at %p>",
-+            return PyUnicode_FromFormat("<cparam 0x%02x at %p>",
-                 (unsigned char)self->tag, (void *)self);
-         }
--        break;
-     }
--    return PyUnicode_FromString(buffer);
- }
- 
- static PyMemberDef PyCArgType_members[] = {
diff --git a/gnu/packages/patches/python-3.8-fix-tests.patch b/gnu/packages/patches/python-3.8-fix-tests.patch
deleted file mode 100644
index 4fbdd444c7..0000000000
--- a/gnu/packages/patches/python-3.8-fix-tests.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-diff --git a/Lib/test/_test_multiprocessing.py b/Lib/test/_test_multiprocessing.py
-index 1474624..887f8ee 100644
---- a/Lib/test/_test_multiprocessing.py
-+++ b/Lib/test/_test_multiprocessing.py
-@@ -3801,6 +3801,7 @@ class _TestSharedMemory(BaseTestCase):
-         sms.close()
-
-     @unittest.skipIf(os.name != "posix", "not feasible in non-posix platforms")
-+    @unittest.skipUnless(sys.stdin.isatty(), "KeyboardInterrupts require a TTY device")
-     def test_shared_memory_SharedMemoryServer_ignores_sigint(self):
-         # bpo-36368: protect SharedMemoryManager server process from
-         # KeyboardInterrupt signals.
-diff --git a/Lib/test/test_signal.py b/Lib/test/test_signal.py
-index d41e94b..a1c15e7 100644
---- a/Lib/test/test_signal.py
-+++ b/Lib/test/test_signal.py
-@@ -78,6 +78,7 @@ class PosixTests(unittest.TestCase):
-         self.assertLess(len(s), signal.NSIG)
-
-     @unittest.skipUnless(sys.executable, "sys.executable required.")
-+    @unittest.skipUnless(sys.stdin.isatty(), "KeyboardInterrupts require a TTY device")
-     def test_keyboard_interrupt_exit_code(self):
-         """KeyboardInterrupt triggers exit via SIGINT."""
-         process = subprocess.run(
-@@ -128,6 +129,7 @@ class WindowsSignalTests(unittest.TestCase):
-             signal.signal(7, handler)
-
-     @unittest.skipUnless(sys.executable, "sys.executable required.")
-+    @unittest.skipUnless(sys.stdin.isatty(), "KeyboardInterrupts require a TTY device")
-     def test_keyboard_interrupt_exit_code(self):
-         """KeyboardInterrupt triggers an exit using STATUS_CONTROL_C_EXIT."""
-         # We don't test via os.kill(os.getpid(), signal.CTRL_C_EVENT) here
-@@ -1245,6 +1247,7 @@ class StressTest(unittest.TestCase):
-
- class RaiseSignalTest(unittest.TestCase):
-
-+    @unittest.skipUnless(sys.stdin.isatty(), "KeyboardInterrupts require a TTY device")
-     def test_sigint(self):
-         with self.assertRaises(KeyboardInterrupt):
-             signal.raise_signal(signal.SIGINT)
---
-2.23.0
diff --git a/gnu/packages/patches/python-3.9-fix-tests.patch b/gnu/packages/patches/python-3.9-fix-tests.patch
deleted file mode 100644
index dc6b8c4cc8..0000000000
--- a/gnu/packages/patches/python-3.9-fix-tests.patch
+++ /dev/null
@@ -1,370 +0,0 @@
-See the discussion about the issues fixed here at:
-http://bugs.python.org/issue20868 .
-
-diff --git a/Lib/ctypes/test/test_callbacks.py b/Lib/ctypes/test/test_callbacks.py
---- a/Lib/ctypes/test/test_callbacks.py
-+++ b/Lib/ctypes/test/test_callbacks.py
-@@ -3,6 +3,7 @@ import unittest
- from ctypes import *
- from ctypes.test import need_symbol
- import _ctypes_test
-+import platform
-
- class Callbacks(unittest.TestCase):
-     functype = CFUNCTYPE
-@@ -176,6 +177,8 @@ class SampleCallbacksTestCase(unittest.TestCase):
-
-         self.assertLess(diff, 0.01, "%s not less than 0.01" % diff)
-
-+    @unittest.skipIf(platform.machine() in ['mips64'],
-+                     "This test fails on this platform")
-     def test_issue_8959_a(self):
-         from ctypes.util import find_library
-         libc_path = find_library("c")
-diff --git a/Lib/ctypes/test/test_libc.py b/Lib/ctypes/test/test_libc.py
---- a/Lib/ctypes/test/test_libc.py
-+++ b/Lib/ctypes/test/test_libc.py
-@@ -2,6 +2,7 @@ import unittest
-
- from ctypes import *
- import _ctypes_test
-+import platform
-
- lib = CDLL(_ctypes_test.__file__)
-
-@@ -17,6 +18,8 @@ class LibTest(unittest.TestCase):
-         import math
-         self.assertEqual(lib.my_sqrt(2.0), math.sqrt(2.0))
-
-+    @unittest.skipIf(platform.machine() in ['mips64'],
-+                     "This test fails on this platform")
-     def test_qsort(self):
-         comparefunc = CFUNCTYPE(c_int, POINTER(c_char), POINTER(c_char))
-         lib.my_qsort.argtypes = c_void_p, c_size_t, c_size_t, comparefunc
-diff --git a/Lib/distutils/tests/test_archive_util.py b/Lib/distutils/tests/test_archive_util.py
---- a/Lib/distutils/tests/test_archive_util.py
-+++ b/Lib/distutils/tests/test_archive_util.py
-@@ -333,6 +333,7 @@ class ArchiveUtilTestCase(support.TempdirManager,
-         self.assertEqual(os.path.basename(res), 'archive.tar.xz')
-         self.assertEqual(self._tarinfo(res), self._created_files)
-
-+    @unittest.skipIf(True, "getgrgid(0)[0] raises a KeyError on Guix")
-     def test_make_archive_owner_group(self):
-         # testing make_archive with owner and group, with various combinations
-         # this works even if there's not gid/uid support
-@@ -362,6 +363,7 @@ class ArchiveUtilTestCase(support.TempdirManager,
-
-     @unittest.skipUnless(ZLIB_SUPPORT, "Requires zlib")
-     @unittest.skipUnless(UID_GID_SUPPORT, "Requires grp and pwd support")
-+    @unittest.skipIf(True, "getgrgid(0)[0] raises a KeyError on Guix")
-     def test_tarfile_root_owner(self):
-         tmpdir =  self._create_files()
-         base_name = os.path.join(self.mkdtemp(), 'archive')
-diff --git a/Lib/distutils/tests/test_sdist.py b/Lib/distutils/tests/test_sdist.py
---- a/Lib/distutils/tests/test_sdist.py
-+++ b/Lib/distutils/tests/test_sdist.py
-@@ -443,6 +443,7 @@ class SDistTestCase(BasePyPIRCCommandTestCase):
-                      "The tar command is not found")
-     @unittest.skipIf(find_executable('gzip') is None,
-                      "The gzip command is not found")
-+    @unittest.skipIf(True, "getgrgid(0)[0] raises a KeyError on Guix")
-     def test_make_distribution_owner_group(self):
-         # now building a sdist
-         dist, cmd = self.get_cmd()
-diff --git a/Lib/test/_test_multiprocessing.py b/Lib/test/_test_multiprocessing.py
---- a/Lib/test/_test_multiprocessing.py
-+++ b/Lib/test/_test_multiprocessing.py
-@@ -1473,6 +1473,7 @@ class _TestCondition(BaseTestCase):
-         if pid is not None:
-             os.kill(pid, signal.SIGINT)
-
-+    @unittest.skipIf(True, "This fails for unknown reasons on Guix")
-     def test_wait_result(self):
-         if isinstance(self, ProcessesMixin) and sys.platform != 'win32':
-             pid = os.getpid()
-diff --git a/Lib/test/test_asyncio/test_base_events.py b/Lib/test/test_asyncio/test_base_events.py
---- a/Lib/test/test_asyncio/test_base_events.py
-+++ b/Lib/test/test_asyncio/test_base_events.py
-@@ -1323,6 +1323,8 @@ class BaseEventLoopWithSelectorTests(test_utils.TestCase):
-         self._test_create_connection_ip_addr(m_socket, False)
-
-     @patch_socket
-+    @unittest.skipUnless(support.is_resource_enabled('network'),
-+                         'network is not enabled')
-     def test_create_connection_service_name(self, m_socket):
-         m_socket.getaddrinfo = socket.getaddrinfo
-         sock = m_socket.socket.return_value
-diff --git a/Lib/test/test_generators.py b/Lib/test/test_generators.py
---- a/Lib/test/test_generators.py
-+++ b/Lib/test/test_generators.py
-@@ -34,6 +34,7 @@ class SignalAndYieldFromTest(unittest.TestCase):
-         else:
-             return "FAILED"
-
-+    @unittest.skipIf(True, 'Keyboard interrupts do not work in the Guix build environment')
-     def test_raise_and_yield_from(self):
-         gen = self.generator1()
-         gen.send(None)
-diff --git a/Lib/test/test_pathlib.py b/Lib/test/test_pathlib.py
---- a/Lib/test/test_pathlib.py
-+++ b/Lib/test/test_pathlib.py
-@@ -2134,8 +2134,7 @@ class PosixPathTest(_BasePathTest, unittest.TestCase):
-         self.assertEqual(given, expect)
-         self.assertEqual(set(p.rglob("FILEd*")), set())
-
--    @unittest.skipUnless(hasattr(pwd, 'getpwall'),
--                         'pwd module does not expose getpwall()')
-+    @unittest.skipIf(True, "Guix builder home is '/' which causes trouble for these tests")
-     def test_expanduser(self):
-         P = self.cls
-         support.import_module('pwd')
-diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py
---- a/Lib/test/test_pdb.py
-+++ b/Lib/test/test_pdb.py
-@@ -1150,11 +1150,11 @@ def test_pdb_issue_20766():
-     > <doctest test.test_pdb.test_pdb_issue_20766[0]>(6)test_function()
-     -> print('pdb %d: %s' % (i, sess._previous_sigint_handler))
-     (Pdb) continue
--    pdb 1: <built-in function default_int_handler>
-+    pdb 1: Handlers.SIG_IGN
-     > <doctest test.test_pdb.test_pdb_issue_20766[0]>(5)test_function()
-     -> sess.set_trace(sys._getframe())
-     (Pdb) continue
--    pdb 2: <built-in function default_int_handler>
-+    pdb 2: Handlers.SIG_IGN
-     """
-
-
-diff --git a/Lib/test/test_regrtest.py b/Lib/test/test_regrtest.py
---- a/Lib/test/test_regrtest.py
-+++ b/Lib/test/test_regrtest.py
-@@ -762,6 +762,7 @@ class ArgsTestCase(BaseTestCase):
-         output = self.run_tests('--fromfile', filename)
-         self.check_executed_tests(output, tests)
-
-+    @unittest.skipIf(True, 'Keyboard interrupts do not work in the Guix build environment.')
-     def test_interrupted(self):
-         code = TEST_INTERRUPTED
-         test = self.create_test('sigint', code=code)
-@@ -779,6 +780,7 @@ class ArgsTestCase(BaseTestCase):
-                  % (self.TESTNAME_REGEX, len(tests)))
-         self.check_line(output, regex)
-
-+    @unittest.skipIf(True, 'Keyboard interrupts do not work in the Guix build environment.')
-     def test_slowest_interrupted(self):
-         # Issue #25373: test --slowest with an interrupted test
-         code = TEST_INTERRUPTED
-diff --git a/Lib/test/test_resource.py b/Lib/test/test_resource.py
---- a/Lib/test/test_resource.py
-+++ b/Lib/test/test_resource.py
-@@ -145,6 +145,7 @@ class ResourceTest(unittest.TestCase):
-
-     @unittest.skipUnless(hasattr(resource, 'prlimit'), 'no prlimit')
-     @support.requires_linux_version(2, 6, 36)
-+    @unittest.skipIf(True, "Bug: the PermissionError is not raised")
-     def test_prlimit(self):
-         self.assertRaises(TypeError, resource.prlimit)
-         self.assertRaises(ProcessLookupError, resource.prlimit,
-diff --git a/Lib/test/test_shutil.py b/Lib/test/test_shutil.py
---- a/Lib/test/test_shutil.py
-+++ b/Lib/test/test_shutil.py
-@@ -1428,6 +1428,7 @@ class TestArchives(BaseTest, unittest.TestCase):
-         self.assertRaises(ValueError, make_archive, base_name, 'xxx')
-
-     @support.requires_zlib()
-+    @unittest.skipIf(True, "getgrgid(0)[0] raises a KeyError on Guix")
-     def test_make_archive_owner_group(self):
-         # testing make_archive with owner and group, with various combinations
-         # this works even if there's not gid/uid support
-@@ -1456,6 +1457,7 @@ class TestArchives(BaseTest, unittest.TestCase):
-
-
-     @support.requires_zlib()
-+    @unittest.skipIf(True, "getgrgid(0)[0] raises a KeyError on Guix")
-     @unittest.skipUnless(UID_GID_SUPPORT, "Requires grp and pwd support")
-     def test_tarfile_root_owner(self):
-         root_dir, base_dir = self._create_files()
-diff --git a/Lib/test/test_unicodedata.py b/Lib/test/test_unicodedata.py
---- a/Lib/test/test_unicodedata.py
-+++ b/Lib/test/test_unicodedata.py
-@@ -320,6 +320,7 @@ class NormalizationTest(unittest.TestCase):
-         data = [int(x, 16) for x in data.split(" ")]
-         return "".join([chr(x) for x in data])
-
-+    @unittest.skipIf(True, 'Network is not available in the Guix build environment')
-     def test_normalization(self):
-         TESTDATAFILE = "NormalizationTest.txt"
-         TESTDATAURL = f"http://www.pythontest.net/unicode/{unicodedata.unidata_version}/{TESTDATAFILE}"
-diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py
---- a/Lib/test/test_socket.py
-+++ b/Lib/test/test_socket.py
-@@ -875,6 +875,8 @@ class GeneralModuleTests(unittest.TestCase):
-         if not fqhn in all_host_names:
-             self.fail("Error testing host resolution mechanisms. (fqdn: %s, all: %s)" % (fqhn, repr(all_host_names)))
-
-+    @unittest.skipUnless(support.is_resource_enabled('network'),
-+                         'network is not enabled')
-     def test_host_resolution(self):
-         for addr in [support.HOSTv4, '10.0.0.1', '255.255.255.255']:
-             self.assertEqual(socket.gethostbyname(addr), addr)
-@@ -1004,6 +1006,8 @@ class GeneralModuleTests(unittest.TestCase):
-             self.assertWarns(DeprecationWarning, socket.ntohs, k)
-             self.assertWarns(DeprecationWarning, socket.htons, k)
-
-+    @unittest.skipUnless(os.path.exists("/etc/services"),
-+                         "getservbyname uses /etc/services, which is not in the chroot")
-     def testGetServBy(self):
-         eq = self.assertEqual
-         # Find one service that exists, then check all the related interfaces.
-@@ -1358,6 +1362,8 @@ class GeneralModuleTests(unittest.TestCase):
-             raise
-         self.assertRaises(TypeError, s.ioctl, socket.SIO_LOOPBACK_FAST_PATH, None)
-
-+    @unittest.skipUnless(os.path.exists("/etc/gai.conf"),
-+                         "getaddrinfo() will fail")
-     def testGetaddrinfo(self):
-         try:
-             socket.getaddrinfo('localhost', 80)
-@@ -1440,6 +1446,8 @@ class GeneralModuleTests(unittest.TestCase):
-         # only IP addresses are allowed
-         self.assertRaises(OSError, socket.getnameinfo, ('mail.python.org',0), 0)
-
-+    @unittest.skipUnless(os.path.exists("/etc/gai.conf"),
-+                         "getaddrinfo() will fail")
-     @unittest.skipUnless(support.is_resource_enabled('network'),
-                          'network is not enabled')
-     def test_idna(self):
-diff --git a/Lib/test/test_spwd.py b/Lib/test/test_spwd.py
---- a/Lib/test/test_spwd.py
-+++ b/Lib/test/test_spwd.py
-@@ -5,8 +5,7 @@ from test import support
- spwd = support.import_module('spwd')
-
-
--@unittest.skipUnless(hasattr(os, 'geteuid') and os.geteuid() == 0,
--                     'root privileges required')
-+@unittest.skipUnless(os.path.exists("/etc/shadow"), 'spwd tests require /etc/shadow')
- class TestSpwdRoot(unittest.TestCase):
-
-     def test_getspall(self):
-@@ -56,8 +55,7 @@ class TestSpwdRoot(unittest.TestCase):
-             self.assertRaises(TypeError, spwd.getspnam, bytes_name)
-
-
--@unittest.skipUnless(hasattr(os, 'geteuid') and os.geteuid() != 0,
--                     'non-root user required')
-+@unittest.skipUnless(os.path.exists("/etc/shadow"), 'spwd tests require /etc/shadow')
- class TestSpwdNonRoot(unittest.TestCase):
-
-     def test_getspnam_exception(self):
-diff --git a/Lib/test/test_tarfile.py b/Lib/test/test_tarfile.py
---- a/Lib/test/test_tarfile.py
-+++ b/Lib/test/test_tarfile.py
-@@ -2509,9 +2509,12 @@ def root_is_uid_gid_0():
-         import pwd, grp
-     except ImportError:
-         return False
--    if pwd.getpwuid(0)[0] != 'root':
--        return False
--    if grp.getgrgid(0)[0] != 'root':
-+    try:
-+        if pwd.getpwuid(0)[0] != 'root':
-+            return False
-+        if grp.getgrgid(0)[0] != 'root':
-+            return False
-+    except KeyError:
-         return False
-     return True
-
-diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py
---- a/Lib/test/test_threading.py
-+++ b/Lib/test/test_threading.py
-@@ -1249,6 +1249,7 @@ class MiscTestCase(unittest.TestCase):
-
-
- class InterruptMainTests(unittest.TestCase):
-+    @unittest.skipIf(True, 'Keyboard interrupts do not work in the Guix build container.')
-     def test_interrupt_main_subthread(self):
-         # Calling start_new_thread with a function that executes interrupt_main
-         # should raise KeyboardInterrupt upon completion.
-@@ -1260,6 +1261,8 @@ class InterruptMainTests(unittest.TestCase):
-             t.join()
-         t.join()
-
-+
-+    @unittest.skipIf(True, 'Keyboard interrupts do not work in the Guix build container.')
-     def test_interrupt_main_mainthread(self):
-         # Make sure that if interrupt_main is called in main thread that
-         # KeyboardInterrupt is raised instantly.
-diff --git a/Tools/scripts/run_tests.py b/Tools/scripts/run_tests.py
---- a/Tools/scripts/run_tests.py
-+++ b/Tools/scripts/run_tests.py
-@@ -39,7 +39,7 @@ def main(regrtest_args):
-     if not any(is_multiprocess_flag(arg) for arg in regrtest_args):
-         args.extend(['-j', '0'])  # Use all CPU cores
-     if not any(is_resource_use_flag(arg) for arg in regrtest_args):
--        args.extend(['-u', 'all,-largefile,-audio,-gui'])
-+        args.extend(['-u', 'all,-largefile,-audio,-gui,-network'])
-     args.extend(regrtest_args)
-     print(' '.join(args))
-     if sys.platform == 'win32':
-diff --git a/Lib/test/_test_multiprocessing.py b/Lib/test/_test_multiprocessing.py
-index 1474624..887f8ee 100644
---- a/Lib/test/_test_multiprocessing.py
-+++ b/Lib/test/_test_multiprocessing.py
-@@ -3801,6 +3801,7 @@ class _TestSharedMemory(BaseTestCase):
-         sms.close()
-
-     @unittest.skipIf(os.name != "posix", "not feasible in non-posix platforms")
-+    @unittest.skipUnless(sys.stdin.isatty(), "KeyboardInterrupts require a TTY device")
-     def test_shared_memory_SharedMemoryServer_ignores_sigint(self):
-         # bpo-36368: protect SharedMemoryManager server process from
-         # KeyboardInterrupt signals.
-diff --git a/Lib/test/test_signal.py b/Lib/test/test_signal.py
-index d41e94b..a1c15e7 100644
---- a/Lib/test/test_signal.py
-+++ b/Lib/test/test_signal.py
-@@ -78,6 +78,7 @@ class PosixTests(unittest.TestCase):
-         self.assertLess(len(s), signal.NSIG)
-
-     @unittest.skipUnless(sys.executable, "sys.executable required.")
-+    @unittest.skipUnless(sys.stdin.isatty(), "KeyboardInterrupts require a TTY device")
-     def test_keyboard_interrupt_exit_code(self):
-         """KeyboardInterrupt triggers exit via SIGINT."""
-         process = subprocess.run(
-@@ -128,6 +129,7 @@ class WindowsSignalTests(unittest.TestCase):
-             signal.signal(7, handler)
-
-     @unittest.skipUnless(sys.executable, "sys.executable required.")
-+    @unittest.skipUnless(sys.stdin.isatty(), "KeyboardInterrupts require a TTY device")
-     def test_keyboard_interrupt_exit_code(self):
-         """KeyboardInterrupt triggers an exit using STATUS_CONTROL_C_EXIT."""
-         # We don't test via os.kill(os.getpid(), signal.CTRL_C_EVENT) here
-@@ -1245,6 +1247,7 @@ class StressTest(unittest.TestCase):
-
- class RaiseSignalTest(unittest.TestCase):
-
-+    @unittest.skipUnless(sys.stdin.isatty(), "KeyboardInterrupts require a TTY device")
-     def test_sigint(self):
-         with self.assertRaises(KeyboardInterrupt):
-             signal.raise_signal(signal.SIGINT)
-@@ -1279,6 +1279,7 @@ class PidfdSignalTest(unittest.TestCase):
-         hasattr(signal, "pidfd_send_signal"),
-         "pidfd support not built in",
-     )
-+    @unittest.skipUnless(sys.stdin.isatty(), "KeyboardInterrupts require a TTY device")
-     def test_pidfd_send_signal(self):
-         with self.assertRaises(OSError) as cm:
-             signal.pidfd_send_signal(0, signal.SIGINT)
-diff --git a/Lib/ctypes/test/test_find.py b/Lib/ctypes/test/test_find.py
-index 92ac184..49eec2c 100644
---- a/Lib/ctypes/test/test_find.py
-+++ b/Lib/ctypes/test/test_find.py
-@@ -116,6 +116,7 @@ class FindLibraryLinux(unittest.TestCase):
-         with unittest.mock.patch("ctypes.util._findSoname_ldconfig", lambda *args: None):
-             self.assertNotEqual(find_library('c'), None)
-
-+    @unittest.skipIf(True, "This fails for unknown reasons on Guix")
-     def test_find_library_with_ld(self):
-         with unittest.mock.patch("ctypes.util._findSoname_ldconfig", lambda *args: None), \
-              unittest.mock.patch("ctypes.util._findLib_gcc", lambda *args: None):
diff --git a/gnu/packages/patches/python-babel-fix-parse-future-test.patch b/gnu/packages/patches/python-babel-fix-parse-future-test.patch
new file mode 100644
index 0000000000..8a90166ec5
--- /dev/null
+++ b/gnu/packages/patches/python-babel-fix-parse-future-test.patch
@@ -0,0 +1,68 @@
+From 7bdaa28a55e8d8228d5434effa4b1473ab7b3669 Mon Sep 17 00:00:00 2001
+From: Felix Schwarz <felix.schwarz@oss.schwarz.eu>
+Date: Tue, 5 May 2020 08:05:56 +0000
+Subject: [PATCH] fix tests when using Python 3.9a6
+
+In Python 3.9a6 integer values for future flags were changed to prevent
+collision with compiler flags. We need to retrieve these at runtime so
+the test suite works with Python <= 3.8 as well as Python 3.9.
+---
+ tests/test_util.py | 17 ++++++++++++-----
+ 1 file changed, 12 insertions(+), 5 deletions(-)
+
+diff --git a/tests/test_util.py b/tests/test_util.py
+index a6a4450c..b9343aaa 100644
+--- a/tests/test_util.py
++++ b/tests/test_util.py
+@@ -11,6 +11,7 @@
+ # individuals. For the exact contribution history, see the revision
+ # history and logs, available at http://babel.edgewall.org/log/.
+ 
++import __future__
+ import unittest
+ 
+ import pytest
+@@ -20,6 +21,12 @@
+ from babel.util import parse_future_flags
+ 
+ 
++class _FF:
++    division         = __future__.division.compiler_flag
++    print_function   = __future__.print_function.compiler_flag
++    with_statement   = __future__.with_statement.compiler_flag
++    unicode_literals = __future__.unicode_literals.compiler_flag
++
+ def test_distinct():
+     assert list(util.distinct([1, 2, 1, 3, 4, 4])) == [1, 2, 3, 4]
+     assert list(util.distinct('foobar')) == ['f', 'o', 'b', 'a', 'r']
+@@ -70,25 +77,25 @@ def test_parse_encoding_non_ascii():
+ from __future__ import print_function,
+     division, with_statement,
+     unicode_literals
+-''', 0x10000 | 0x2000 | 0x8000 | 0x20000),
++''', _FF.print_function | _FF.division | _FF.with_statement | _FF.unicode_literals),
+     ('''
+ from __future__ import print_function, division
+ print('hello')
+-''', 0x10000 | 0x2000),
++''', _FF.print_function | _FF.division),
+     ('''
+ from __future__ import print_function, division, unknown,,,,,
+ print 'hello'
+-''', 0x10000 | 0x2000),
++''', _FF.print_function | _FF.division),
+     ('''
+ from __future__ import (
+     print_function,
+     division)
+-''', 0x10000 | 0x2000),
++''', _FF.print_function | _FF.division),
+     ('''
+ from __future__ import \\
+     print_function, \\
+     division
+-''', 0x10000 | 0x2000),
++''', _FF.print_function | _FF.division),
+ ])
+ def test_parse_future(source, result):
+     fp = BytesIO(source.encode('latin-1'))
diff --git a/gnu/packages/patches/python-chai-drop-python2.patch b/gnu/packages/patches/python-chai-drop-python2.patch
new file mode 100644
index 0000000000..0eb980e5db
--- /dev/null
+++ b/gnu/packages/patches/python-chai-drop-python2.patch
@@ -0,0 +1,32 @@
+Patch copied from Gentoo removing obsolete Python2 code.
+
+--- a/chai/chai.py
++++ b/chai/chai.py
+@@ -62,11 +62,6 @@
+             try:
+                 func(self, *args, **kwargs)
+             except UnexpectedCall as e:
+-                # if this is not python3, use python2 syntax
+-                if not hasattr(e, '__traceback__'):
+-                    from .python2 import reraise
+-                    reraise(
+-                        AssertionError, '\n\n' + str(e), sys.exc_info()[-1])
+                 exc = AssertionError('\n\n' + str(e))
+                 setattr(exc, '__traceback__', sys.exc_info()[-1])
+                 raise exc
+--- a/chai/python2.py
++++ b/chai/python2.py
+@@ -1,3 +0,0 @@
+-
+-def reraise(exc, msg, traceback):
+-    raise exc, msg, traceback
+--- a/chai.egg-info/SOURCES.txt
++++ b/chai.egg-info/SOURCES.txt
+@@ -10,7 +10,6 @@
+ chai/exception.py
+ chai/expectation.py
+ chai/mock.py
+-chai/python2.py
+ chai/spy.py
+ chai/stub.py
+ chai.egg-info/PKG-INFO
diff --git a/gnu/packages/patches/python-docopt-pytest6-compat.patch b/gnu/packages/patches/python-docopt-pytest6-compat.patch
new file mode 100644
index 0000000000..acd4955778
--- /dev/null
+++ b/gnu/packages/patches/python-docopt-pytest6-compat.patch
@@ -0,0 +1,29 @@
+https://sources.debian.org/data/main/d/docopt/0.6.2-3/debian/patches/pytest6
+
+From: Michael R. Crusoe <crusoe@debian.org>
+Subject: fix for pytest 6.x comptability
+Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=979285
+
+--- docopt.orig/conftest.py
++++ docopt/conftest.py
+@@ -11,6 +11,8 @@
+ 
+ def pytest_collect_file(path, parent):
+     if path.ext == ".docopt" and path.basename.startswith("test"):
++        if hasattr(DocoptTestFile, "from_parent"):
++            return DocoptTestFile.from_parent(parent, fspath=path)
+         return DocoptTestFile(path, parent)
+ 
+ 
+@@ -41,7 +43,10 @@
+         for name, doc, cases in parse_test(raw):
+             name = self.fspath.purebasename
+             for case in cases:
+-                yield DocoptTestItem("%s(%d)" % (name, index), self, doc, case)
++                if hasattr(DocoptTestItem, "from_parent"):
++                    yield DocoptTestItem.from_parent(self, name="%s(%d)" % (name, index), doc=doc, case=case)
++                else:
++                    yield DocoptTestItem("%s(%d)" % (name, index), self, doc, case)
+                 index += 1
+ 
+ 
diff --git a/gnu/packages/patches/python-fixtures-remove-monkeypatch-test.patch b/gnu/packages/patches/python-fixtures-remove-monkeypatch-test.patch
new file mode 100644
index 0000000000..4ffe9b373d
--- /dev/null
+++ b/gnu/packages/patches/python-fixtures-remove-monkeypatch-test.patch
@@ -0,0 +1,59 @@
+https://sources.debian.org/data/main/p/python-fixtures/3.0.0-4/debian/patches/remove-broken-monkey-patch-test.patch
+
+The last release was May 2016. This can be removed when the next release happens.
+
+Description: Remove broken monkey patch tests
+Author: Thomas Goirand <zigo@debian.org>
+Bug-Debian: https://bugs.debian.org/973239
+Forwarded: no
+Last-Update: 2020-11-12
+
+--- python-fixtures-3.0.0.orig/fixtures/tests/_fixtures/test_monkeypatch.py
++++ python-fixtures-3.0.0/fixtures/tests/_fixtures/test_monkeypatch.py
+@@ -181,22 +181,6 @@ class TestMonkeyPatch(testtools.TestCase
+         self._check_restored_static_or_class_method(oldmethod, oldmethod_inst,
+                 C, 'foo_cls')
+ 
+-    def test_patch_classmethod_with_classmethod(self):
+-        oldmethod = C.foo_cls
+-        oldmethod_inst = C().foo_cls
+-        fixture = MonkeyPatch(
+-            'fixtures.tests._fixtures.test_monkeypatch.C.foo_cls',
+-            D.bar_cls_args)
+-        with fixture:
+-            cls, target_class = C.foo_cls()
+-            self.expectThat(cls, Is(D))
+-            self.expectThat(target_class, Is(C))
+-            cls, target_class = C().foo_cls()
+-            self.expectThat(cls, Is(D))
+-            self.expectThat(target_class, Is(C))
+-        self._check_restored_static_or_class_method(oldmethod, oldmethod_inst,
+-                C, 'foo_cls')
+-
+     def test_patch_classmethod_with_function(self):
+         oldmethod = C.foo_cls
+         oldmethod_inst = C().foo_cls
+@@ -212,23 +196,6 @@ class TestMonkeyPatch(testtools.TestCase
+         self._check_restored_static_or_class_method(oldmethod, oldmethod_inst,
+                 C, 'foo_cls')
+ 
+-    def test_patch_classmethod_with_boundmethod(self):
+-        oldmethod = C.foo_cls
+-        oldmethod_inst = C().foo_cls
+-        d = D()
+-        fixture = MonkeyPatch(
+-            'fixtures.tests._fixtures.test_monkeypatch.C.foo_cls',
+-            d.bar_two_args)
+-        with fixture:
+-            slf, cls = C.foo_cls()
+-            self.expectThat(slf, Is(d))
+-            self.expectThat(cls, Is(C))
+-            slf, cls = C().foo_cls()
+-            self.expectThat(slf, Is(d))
+-            self.expectThat(cls, Is(C))
+-        self._check_restored_static_or_class_method(oldmethod, oldmethod_inst,
+-                C, 'foo_cls')
+-
+     def test_patch_function_with_staticmethod(self):
+         oldmethod = fake_no_args
+         fixture = MonkeyPatch(
diff --git a/gnu/packages/patches/python-magic-python-bytecode.patch b/gnu/packages/patches/python-magic-python-bytecode.patch
new file mode 100644
index 0000000000..997fb4ee5a
--- /dev/null
+++ b/gnu/packages/patches/python-magic-python-bytecode.patch
@@ -0,0 +1,19 @@
+File 5.41 changed the MIME type of Python bytecode; adjust accordingly.
+
+Taken from upstream:
+
+  https://github.com/ahupp/python-magic/commit/0ae7e7ceac0e80e03adc75c858bb378c0427331a
+
+diff --git a/test/test.py b/test/test.py
+index 0c4621c..e443b84 100755
+--- a/test/test.py
++++ b/test/test.py
+@@ -90,7 +90,7 @@ def test_mime_types(self):
+         try:
+             m = magic.Magic(mime=True)
+             self.assert_values(m, {
+-                'magic._pyc_': ('application/octet-stream', 'text/x-bytecode.python'),
++                'magic._pyc_': ('application/octet-stream', 'text/x-bytecode.python', 'application/x-bytecode.python'),
+                 'test.pdf': 'application/pdf',
+                 'test.gz': ('application/gzip', 'application/x-gzip'),
+                 'test.snappy.parquet': 'application/octet-stream',
diff --git a/gnu/packages/patches/python-pdoc3-tests.patch b/gnu/packages/patches/python-pdoc3-tests.patch
new file mode 100644
index 0000000000..a411b300ee
--- /dev/null
+++ b/gnu/packages/patches/python-pdoc3-tests.patch
@@ -0,0 +1,42 @@
+Taken from upstream: https://github.com/pdoc3/pdoc/commit/4aa70de2221a34a3003a7e5f52a9b91965f0e359.patch.
+
+From 4aa70de2221a34a3003a7e5f52a9b91965f0e359 Mon Sep 17 00:00:00 2001
+From: Spencer Baugh <sbaugh@catern.com>
+Date: Thu, 23 Sep 2021 09:00:25 -0400
+Subject: [PATCH] TST: use explicit ClassWithNew instead of typing.Generic
+
+typing.Generic doesn't have a __new__ method in 3.9.
+
+Fixes https://github.com/pdoc3/pdoc/issues/355
+---
+ pdoc/test/__init__.py | 10 +++++++---
+ 1 file changed, 7 insertions(+), 3 deletions(-)
+
+diff --git a/pdoc/test/__init__.py b/pdoc/test/__init__.py
+index e8c3d94..8b67ab7 100644
+--- a/pdoc/test/__init__.py
++++ b/pdoc/test/__init__.py
+@@ -1043,16 +1043,20 @@ class C2:
+ 
+         self.assertEqual(pdoc.Class('C2', mod, C2).params(), ['a', 'b', 'c=None', '*', 'd=1', 'e'])
+ 
+-        class G(typing.Generic[T]):
++        class ClassWithNew:
++            def __new__(self, arg):
++                pass
++
++        class G(ClassWithNew):
+             def __init__(self, a, b, c=100):
+                 pass
+ 
+         self.assertEqual(pdoc.Class('G', mod, G).params(), ['a', 'b', 'c=100'])
+ 
+-        class G2(typing.Generic[T]):
++        class G2(ClassWithNew):
+             pass
+ 
+-        self.assertEqual(pdoc.Class('G2', mod, G2).params(), ['*args', '**kwds'])
++        self.assertEqual(pdoc.Class('G2', mod, G2).params(), ['arg'])
+ 
+     def test_url(self):
+         mod = pdoc.Module(EXAMPLE_MODULE)
diff --git a/gnu/packages/patches/python-peachpy-determinism.patch b/gnu/packages/patches/python-peachpy-determinism.patch
new file mode 100644
index 0000000000..f326a4b6b0
--- /dev/null
+++ b/gnu/packages/patches/python-peachpy-determinism.patch
@@ -0,0 +1,25 @@
+Make PeachPy processes deterministic:
+
+  https://github.com/Maratyszcza/PeachPy/issues/88
+  https://issues.guix.gnu.org/50672
+
+diff --git a/peachpy/name.py b/peachpy/name.py
+index b6a03dc..412079d 100644
+--- a/peachpy/name.py
++++ b/peachpy/name.py
+@@ -86,13 +86,13 @@ def add_scoped_name(self, scoped_name):
+                 self.names[scope_name.name] = scope
+         else:
+             assert scope_name.name is None
+-            self.prenames.setdefault(scope_name.prename, set())
++            self.prenames.setdefault(scope_name.prename, {})
+             if subscoped_name:
+                 for subscope in iter(self.prenames[scope_name.prename]):
+                     if isinstance(subscope, Namespace) and subscope.scope_name is scope_name:
+                         subscope.add_scoped_name(subscoped_name)
+                         return
+-            self.prenames[scope_name.prename].add(scope)
++            self.prenames[scope_name.prename][scope] = None
+ 
+     def assign_names(self):
+         # Step 1: assign names to symbols with prenames with no conflicts
diff --git a/gnu/packages/patches/python-piexif-fix-tests-with-pillow-7.2.patch b/gnu/packages/patches/python-piexif-fix-tests-with-pillow-7.2.patch
new file mode 100644
index 0000000000..874264dc25
--- /dev/null
+++ b/gnu/packages/patches/python-piexif-fix-tests-with-pillow-7.2.patch
@@ -0,0 +1,44 @@
+From 5209b53e9689ce28dcd045f384633378d619718f Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jan=20Wi=C5=9Bniewski?= <vuko@vuko.pl>
+Date: Thu, 5 Nov 2020 16:18:52 +0100
+Subject: [PATCH] convert IFDRational to tuples in tests
+
+This fixes tests with Pillow version >= 7.2.0
+---
+ tests/s_test.py | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+diff --git a/tests/s_test.py b/tests/s_test.py
+index 5d105de..a7cad54 100644
+--- a/tests/s_test.py
++++ b/tests/s_test.py
+***************
+*** 9,14 ****
+--- 9,15 ----
+  import time

+  import unittest

+  

++ import PIL

+  from PIL import Image

+  import piexif

+  from piexif import _common, ImageIFD, ExifIFD, GPSIFD, TAGS, InvalidImageDataError

+***************
+*** 580,585 ****
+--- 581,597 ----
+  # test utility methods----------------------------------------------

+  

+      def _compare_value(self, v1, v2):

++         if isinstance(v2, PIL.TiffImagePlugin.IFDRational):

++             v2 = (v2.numerator, v2.denominator)

++         if isinstance(v2, tuple):

++             converted_v2 = []

++             for el in v2:

++                 if isinstance(el, PIL.TiffImagePlugin.IFDRational):

++                     converted_v2.append((el.numerator, el.denominator))

++                 else:

++                     converted_v2.append(el)

++             v2 = tuple(converted_v2)

++ 

+          if type(v1) != type(v2):

+              if isinstance(v1, tuple):

+                  self.assertEqual(pack_byte(*v1), v2)

diff --git a/gnu/packages/patches/python-poppler-qt5-fix-build.patch b/gnu/packages/patches/python-poppler-qt5-fix-build.patch
new file mode 100644
index 0000000000..099bb86d2f
--- /dev/null
+++ b/gnu/packages/patches/python-poppler-qt5-fix-build.patch
@@ -0,0 +1,116 @@
+Patch taken from the upstream repository
+https://github.com/frescobaldi/python-poppler-qt5/issues/43
+
+From 92e5962ec3751ab051d0b655fd61afc7a1cf709e Mon Sep 17 00:00:00 2001
+From: Ben Greiner <code@bnavigator.de>
+Date: Thu, 4 Mar 2021 17:02:51 +0100
+Subject: [PATCH] map type QVector< QPair<TYPE, TYPE> > for
+ FormFieldChoice::choicesWithExportValues() (#45)
+
+---
+ types.sip | 93 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 93 insertions(+)
+
+diff --git a/types.sip b/types.sip
+index 239b8c9..81cb283 100644
+--- a/types.sip
++++ b/types.sip
+@@ -331,5 +331,98 @@ template <TYPE>
+ };
+ 
+ 
++/**
++ * Convert QVector< QPair<TYPE, TYPE> >
++ * from and to a Python list of a 2-item tuple
++ */
++
++template<TYPE>
++%MappedType QVector< QPair<TYPE, TYPE> >
++{
++%TypeHeaderCode
++#include <qvector.h>
++#include <qpair.h>
++%End
++
++%ConvertFromTypeCode
++  // Create the list.
++  PyObject *l;
++
++  if ((l = PyList_New(sipCpp->size())) == NULL)
++      return NULL;
++
++  // Set the list elements.
++  for (int i = 0; i < sipCpp->size(); ++i)
++  {
++    QPair<TYPE, TYPE>* p = new QPair<TYPE, TYPE>(sipCpp->at(i));
++    PyObject *ptuple = PyTuple_New(2);
++    PyObject *pfirst;
++    PyObject *psecond;
++
++    TYPE *sfirst = new TYPE(p->first);
++    if ((pfirst = sipConvertFromType(sfirst, sipType_TYPE, sipTransferObj)) == NULL)
++    {
++      Py_DECREF(l);
++      Py_DECREF(ptuple);
++      return NULL;
++    }
++    PyTuple_SET_ITEM(ptuple, 0, pfirst);
++
++    TYPE *ssecond = new TYPE(p->second);
++    if ((psecond = sipConvertFromType(ssecond, sipType_TYPE, sipTransferObj)) == NULL)
++    {
++      Py_DECREF(l);
++      Py_DECREF(ptuple);
++      Py_DECREF(pfirst);
++      return NULL;
++    }
++    PyTuple_SET_ITEM(ptuple, 1, psecond);
++
++    PyList_SET_ITEM(l, i, ptuple);
++  }
++
++  return l;
++%End
++
++%ConvertToTypeCode
++  const sipTypeDef* qpair_type = sipFindType("QPair<TYPE, TYPE>");
++
++  // Check the type if that is all that is required.
++  if (sipIsErr == NULL)
++  {
++    if (!PySequence_Check(sipPy))
++      return 0;
++
++    for (int i = 0; i < PySequence_Size(sipPy); ++i)
++      if (!sipCanConvertToType(PySequence_ITEM(sipPy, i), qpair_type, SIP_NOT_NONE))
++        return 0;
++
++    return 1;
++  }
++
++
++  QVector< QPair<TYPE, TYPE> > *qv = new QVector< QPair<TYPE, TYPE> >;
++
++  for (int i = 0; i < PySequence_Size(sipPy); ++i)
++  {
++    int state;
++    QPair<TYPE, TYPE> * p = reinterpret_cast< QPair<TYPE, TYPE> * >(sipConvertToType(PySequence_ITEM(sipPy, i), qpair_type, sipTransferObj, SIP_NOT_NONE, &state, sipIsErr));
++
++    if (*sipIsErr)
++    {
++      sipReleaseType(p, qpair_type, state);
++      delete qv;
++      return 0;
++    }
++    qv->append(*p);
++    sipReleaseType(p, qpair_type, state);
++  }
++
++  *sipCppPtr = qv;
++  return sipGetState(sipTransferObj);
++%End
++
++};
++
+ 
+ /* kate: indent-width 4; space-indent on; hl c++; indent-mode cstyle; */
diff --git a/gnu/packages/patches/python-pydot-regression-test.patch b/gnu/packages/patches/python-pydot-regression-test.patch
deleted file mode 100644
index d2f0f5996e..0000000000
--- a/gnu/packages/patches/python-pydot-regression-test.patch
+++ /dev/null
@@ -1,79 +0,0 @@
-This patch is taken from the upstream repository
-https://github.com/pydot/pydot/commit/a10ced4d132361027a545a471af4541dea8c5cf5.patch
-It should be included in the 1.4.2 release.
-
-
-From a10ced4d132361027a545a471af4541dea8c5cf5 Mon Sep 17 00:00:00 2001
-From: Peter Nowee <peter@peternowee.com>
-Date: Wed, 26 Jun 2019 15:43:38 +0800
-Subject: [PATCH] Fix multi.dot Graphviz regression test
-
-Commit d6602ad of 2018-12-01 fixed the regression test broken by commit
-2d55978 of 2016-07-01. This revealed that `test/graphs/multi.dot` was
-failing.
-
-`multi.dot` was introduced in commit 2b3f088 of 2010-11-07 together
-with many of the other tests still here today. It has not been touched
-since. It is a DOT-file containing two digraphs. The regression test
-compares the JPEG images rendered from the DOT-file by pydot with those
-rendered by Graphviz's dot directly.
-
-Commit 66734d2 of 2016-07-01 is the actual cause of the failure. It
-changed one of the render methods of the regression test,
-`_render_with_pydot`, from calculating a single hash for all the JPEG
-images to calculating separate hashes for each JPEG image and then
-concatenating those hashes in one long string. The other render method,
-`_render_with_graphviz`, still calculates a single hash over all data.
-For DOT-files that generate only one image the end result is the same,
-but because `multi.dot` has two graphs, it produces two images and this
-leads to comparing a string of two hashes with one single hash.
-
-I do not think the change in generating the hash was intentional, for
-the following reasons:
-- Commit 66734d2 states that its purpose was to adapt the test to an
-  API change in pydot. It does not mention a deliberate choice to
-  change the testing method.
-- There was no effort to change `_render_with_graphviz` to also produce
-  multiple hashes.
-- Except for easier debugging in case of a failing test with multiple
-  images (AFAICT, only `multi.dot`), I do not see much added benefit in
-  checking a concatenation of the hashes of all images vs. checking one
-  hash of all images together: In both cases the test will fail if one
-  or more images is rendered differently.
-- Given that there were many commits authored that same hour, including
-  commit 2d55978 which broke the regression tests, I suspect the author
-  did not run the tests for each individual commit, but only at the end
-  of that batch, and was therefore also not alerted of this change by
-  the test suite.
-
-Assuming that the change was not intended, this commit will now revert
-`_render_with_pydot` to the old behavior of calculating a single hash
-from all JPEG image data.
-
-Tested with Debian 9.9, Graphviz 2.38.0-17, Python 2.7.13-2 and 3.5.3-1.
-
-Fixes https://github.com/pydot/pydot/issues/204.
----
- test/pydot_unittest.py | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/test/pydot_unittest.py b/test/pydot_unittest.py
-index 881ee16..64aa856 100644
---- a/test/pydot_unittest.py
-+++ b/test/pydot_unittest.py
-@@ -194,11 +194,11 @@ def _render_with_graphviz(self, filename, encoding):
- 
-     def _render_with_pydot(self, filename, encoding):
-         c = pydot.graph_from_dot_file(filename, encoding=encoding)
--        sha = ''
-+        jpe_data = bytearray()
-         for g in c:
--            jpe_data = g.create(prog=TEST_PROGRAM, format='jpe', encoding=encoding)
--            sha += sha256(jpe_data).hexdigest()
--        return sha
-+            jpe_data.extend(g.create(prog=TEST_PROGRAM, format='jpe',
-+                                     encoding=encoding))
-+        return sha256(jpe_data).hexdigest()
- 
-     def test_my_regression_tests(self):
-         path = os.path.join(test_dir, TESTS_DIR_1)
diff --git a/gnu/packages/patches/python-pyflakes-test-location.patch b/gnu/packages/patches/python-pyflakes-test-location.patch
new file mode 100644
index 0000000000..ea2c50c82e
--- /dev/null
+++ b/gnu/packages/patches/python-pyflakes-test-location.patch
@@ -0,0 +1,42 @@
+This patch fixes test failure related to reported source code locations.
+It is a backport of this patch:
+
+  commit 6a5f38b5ab12260fde8a0463acd433bc2d34dbcf
+  Author: Louis Sautier <sautier.louis@gmail.com>
+  Date:   Sat Oct 3 02:37:53 2020 +0200
+
+      Fix tests with Python 3.9, closes #549 (#586)
+
+      Stop allowing failures on Python nightly.
+
+diff --git a/pyflakes/test/test_api.py b/pyflakes/test/test_api.py
+index 128aa69..b728e65 100644
+--- a/pyflakes/test/test_api.py
++++ b/pyflakes/test/test_api.py
+@@ -515,6 +515,8 @@ def foo(bar=baz, bax):
+             if ERROR_HAS_LAST_LINE:
+                 if PYPY and sys.version_info >= (3,):
+                     column = 7
++                elif sys.version_info >= (3, 9):
++                    column = 21
+                 elif sys.version_info >= (3, 8):
+                     column = 9
+                 else:
+@@ -543,6 +545,8 @@ foo(bar=baz, bax)
+             if ERROR_HAS_LAST_LINE:
+                 if PYPY and sys.version_info >= (3,):
+                     column = 12
++                elif sys.version_info >= (3, 9):
++                    column = 17
+                 elif sys.version_info >= (3, 8):
+                     column = 14
+                 else:
+@@ -577,6 +581,8 @@ foo(bar=baz, bax)
+                 position_end = 1
+                 if PYPY:
+                     column = 6
++                elif ver >= (3, 9):
++                    column = 13
+                 else:
+                     column = 7
+                     # Column has been "fixed" since 3.2.4 and 3.3.1
diff --git a/gnu/packages/patches/python-pytorch-system-libraries.patch b/gnu/packages/patches/python-pytorch-system-libraries.patch
index 76c06520f0..ae872cfd84 100644
--- a/gnu/packages/patches/python-pytorch-system-libraries.patch
+++ b/gnu/packages/patches/python-pytorch-system-libraries.patch
@@ -1,37 +1,11 @@
 Use our own googletest rather than the bundled one.
 Get NNPACK to use our own PeachPy rather than the bundled one.
 
-diff --git a/cmake/Dependencies.cmake b/cmake/Dependencies.cmake
-index 5d57b9ca78..620cca4e60 100644
---- a/cmake/Dependencies.cmake
-+++ b/cmake/Dependencies.cmake
-@@ -644,11 +644,6 @@ if(BUILD_TEST OR BUILD_MOBILE_BENCHMARK OR BUILD_MOBILE_TEST)
-   # this shouldn't be necessary anymore.
-   get_property(INC_DIR_temp DIRECTORY PROPERTY INCLUDE_DIRECTORIES)
-   set_property(DIRECTORY PROPERTY INCLUDE_DIRECTORIES "")
--  add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/../third_party/googletest)
--  set_property(DIRECTORY PROPERTY INCLUDE_DIRECTORIES ${INC_DIR_temp})
--
--  include_directories(BEFORE SYSTEM ${CMAKE_CURRENT_LIST_DIR}/../third_party/googletest/googletest/include)
--  include_directories(BEFORE SYSTEM ${CMAKE_CURRENT_LIST_DIR}/../third_party/googletest/googlemock/include)
- 
-   # We will not need to test benchmark lib itself.
-   set(BENCHMARK_ENABLE_TESTING OFF CACHE BOOL "Disable benchmark testing as we don't need it.")
-@@ -1485,7 +1480,7 @@ if(CAFFE2_CMAKE_BUILDING_WITH_MAIN_REPO AND NOT INTERN_DISABLE_ONNX)
-     endif()
-     set_property(TARGET onnx_proto PROPERTY IMPORTED_LOCATION ${ONNX_PROTO_LIBRARY})
-     message("-- Found onnx: ${ONNX_LIBRARY} ${ONNX_PROTO_LIBRARY}")
--    list(APPEND Caffe2_DEPENDENCY_LIBS onnx_proto onnx)
-+    list(APPEND Caffe2_DEPENDENCY_LIBS onnx_proto onnx onnx_optimizer)
-   endif()
-   include_directories(${FOXI_INCLUDE_DIRS})
-   list(APPEND Caffe2_DEPENDENCY_LIBS foxi_loader)
-
 diff --git a/caffe2/CMakeLists.txt b/caffe2/CMakeLists.txt
-index 50ebb224ce..5953d9ddf7 100644
+index 26210cb5..18b6df27 100644
 --- a/caffe2/CMakeLists.txt
 +++ b/caffe2/CMakeLists.txt
-@@ -1632,7 +1632,7 @@ if(BUILD_TEST)
+@@ -1723,7 +1723,7 @@ if(BUILD_TEST)
          if(NOT MSVC)
            add_executable(${test_name}_${CPU_CAPABILITY} "${test_src}" ../aten/src/ATen/native/quantized/affine_quantizer_base.cpp)
            # TODO: Get rid of c10 dependency (which is only needed for the implementation of AT_ERROR)
@@ -40,16 +14,16 @@ index 50ebb224ce..5953d9ddf7 100644
            if(USE_FBGEMM)
              target_link_libraries(${test_name}_${CPU_CAPABILITY} fbgemm)
            endif()
-@@ -1655,7 +1655,7 @@ if(BUILD_TEST)
+@@ -1746,7 +1746,7 @@ if(BUILD_TEST)
    foreach(test_src ${Caffe2_CPU_TEST_SRCS})
      get_filename_component(test_name ${test_src} NAME_WE)
      add_executable(${test_name} "${test_src}")
 -    target_link_libraries(${test_name} torch_library gtest_main)
 +    target_link_libraries(${test_name} torch_library gtest_main gtest)
-     target_include_directories(${test_name} PRIVATE $<INSTALL_INTERFACE:include>)
-     target_include_directories(${test_name} PRIVATE $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/include>)
-     target_include_directories(${test_name} PRIVATE ${Caffe2_CPU_INCLUDE})
-@@ -1673,7 +1673,7 @@ if(BUILD_TEST)
+     if(USE_OPENMP)
+       # -fopenmp is a compile time flag and as result not guaranteed
+       # to link executable against OpenMP runtime library
+@@ -1769,7 +1769,7 @@ if(BUILD_TEST)
      foreach(test_src ${Caffe2_GPU_TEST_SRCS})
        get_filename_component(test_name ${test_src} NAME_WE)
        cuda_add_executable(${test_name} "${test_src}")
@@ -58,7 +32,7 @@ index 50ebb224ce..5953d9ddf7 100644
        target_include_directories(${test_name} PRIVATE $<INSTALL_INTERFACE:include>)
        target_include_directories(${test_name} PRIVATE ${Caffe2_CPU_INCLUDE})
        add_test(NAME ${test_name} COMMAND $<TARGET_FILE:${test_name}>)
-@@ -1691,7 +1691,7 @@ if(BUILD_TEST)
+@@ -1787,7 +1787,7 @@ if(BUILD_TEST)
      foreach(test_src ${Caffe2_VULKAN_TEST_SRCS})
        get_filename_component(test_name ${test_src} NAME_WE)
        add_executable(${test_name} "${test_src}")
@@ -67,7 +41,7 @@ index 50ebb224ce..5953d9ddf7 100644
        target_include_directories(${test_name} PRIVATE $<INSTALL_INTERFACE:include>)
        target_include_directories(${test_name} PRIVATE ${Caffe2_CPU_INCLUDE})
        add_test(NAME ${test_name} COMMAND $<TARGET_FILE:${test_name}>)
-@@ -1709,7 +1709,7 @@ if(BUILD_TEST)
+@@ -1805,7 +1805,7 @@ if(BUILD_TEST)
      foreach(test_src ${Caffe2_HIP_TEST_SRCS})
        get_filename_component(test_name ${test_src} NAME_WE)
        add_executable(${test_name} "${test_src}")
@@ -76,47 +50,33 @@ index 50ebb224ce..5953d9ddf7 100644
        target_include_directories(${test_name} PRIVATE $<INSTALL_INTERFACE:include>)
        target_include_directories(${test_name} PRIVATE ${Caffe2_CPU_INCLUDE} ${Caffe2_HIP_INCLUDE})
        target_compile_options(${test_name} PRIVATE ${HIP_CXX_FLAGS})
-
-diff --git a/torch/lib/c10d/test/CMakeLists.txt b/torch/lib/c10d/test/CMakeLists.txt
-index b74d4b65f7..fc7c207505 100644
---- a/torch/lib/c10d/test/CMakeLists.txt
-+++ b/torch/lib/c10d/test/CMakeLists.txt
-@@ -16,24 +16,24 @@ function(c10d_add_test test_src)
-   add_test(NAME ${test_name} COMMAND $<TARGET_FILE:${test_name}>)
- endfunction()
- 
--c10d_add_test(FileStoreTest.cpp c10d gtest_main)
--c10d_add_test(TCPStoreTest.cpp c10d gtest_main)
-+c10d_add_test(FileStoreTest.cpp c10d gtest_main gtest)
-+c10d_add_test(TCPStoreTest.cpp c10d gtest_main gtest)
- if(NOT WIN32)
--  c10d_add_test(HashStoreTest.cpp c10d gtest_main)
-+  c10d_add_test(HashStoreTest.cpp c10d gtest_main gtest)
- endif()
+diff --git a/cmake/Dependencies.cmake b/cmake/Dependencies.cmake
+index ca560288..c0696e53 100644
+--- a/cmake/Dependencies.cmake
++++ b/cmake/Dependencies.cmake
+@@ -684,11 +684,6 @@ if(BUILD_TEST OR BUILD_MOBILE_BENCHMARK OR BUILD_MOBILE_TEST)
+   # this shouldn't be necessary anymore.
+   get_property(INC_DIR_temp DIRECTORY PROPERTY INCLUDE_DIRECTORIES)
+   set_property(DIRECTORY PROPERTY INCLUDE_DIRECTORIES "")
+-  add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/../third_party/googletest)
+-  set_property(DIRECTORY PROPERTY INCLUDE_DIRECTORIES ${INC_DIR_temp})
+-
+-  include_directories(BEFORE SYSTEM ${CMAKE_CURRENT_LIST_DIR}/../third_party/googletest/googletest/include)
+-  include_directories(BEFORE SYSTEM ${CMAKE_CURRENT_LIST_DIR}/../third_party/googletest/googlemock/include)
  
- if(USE_CUDA)
-   if(USE_C10D_GLOO)
--    c10d_add_test(ProcessGroupGlooTest.cpp c10d c10d_cuda_test gtest_main)
--    c10d_add_test(ProcessGroupGlooAsyncTest.cpp c10d c10d_cuda_test gtest_main)
-+    c10d_add_test(ProcessGroupGlooTest.cpp c10d c10d_cuda_test gtest_main gtest)
-+    c10d_add_test(ProcessGroupGlooAsyncTest.cpp c10d c10d_cuda_test gtest_main gtest)
-   endif()
-   if(USE_C10D_NCCL)
--    c10d_add_test(ProcessGroupNCCLTest.cpp c10d c10d_cuda_test gtest_main)
-+    c10d_add_test(ProcessGroupNCCLTest.cpp c10d c10d_cuda_test gtest_main gtest)
-     c10d_add_test(ProcessGroupNCCLErrorsTest.cpp c10d c10d_cuda_test
--        gtest_main)
-+        gtest_main gtest)
-   endif()
- else()
-   if(USE_C10D_GLOO)
--    c10d_add_test(ProcessGroupGlooTest.cpp c10d gtest_main)
-+    c10d_add_test(ProcessGroupGlooTest.cpp c10d gtest_main gtest)
+   # We will not need to test benchmark lib itself.
+   set(BENCHMARK_ENABLE_TESTING OFF CACHE BOOL "Disable benchmark testing as we don't need it.")
+@@ -1537,7 +1532,7 @@ if(CAFFE2_CMAKE_BUILDING_WITH_MAIN_REPO AND NOT INTERN_DISABLE_ONNX)
+     endif()
+     set_property(TARGET onnx_proto PROPERTY IMPORTED_LOCATION ${ONNX_PROTO_LIBRARY})
+     message("-- Found onnx: ${ONNX_LIBRARY} ${ONNX_PROTO_LIBRARY}")
+-    list(APPEND Caffe2_DEPENDENCY_LIBS onnx_proto onnx)
++    list(APPEND Caffe2_DEPENDENCY_LIBS onnx_proto onnx onnx_optimizer)
    endif()
- endif()
-
+   include_directories(${FOXI_INCLUDE_DIRS})
+   list(APPEND Caffe2_DEPENDENCY_LIBS foxi_loader)
 diff --git a/cmake/External/nnpack.cmake b/cmake/External/nnpack.cmake
-index a41343cbb5..6075bdd0a4 100644
+index a41343cb..6075bdd0 100644
 --- a/cmake/External/nnpack.cmake
 +++ b/cmake/External/nnpack.cmake
 @@ -40,7 +40,7 @@ endif()
@@ -137,3 +97,61 @@ index a41343cbb5..6075bdd0a4 100644
 -set(USE_NNPACK OFF)
 +set(NNPACK_FOUND TRUE)
 +set(USE_NNPACK ON)
+diff --git a/test/cpp/c10d/CMakeLists.txt b/test/cpp/c10d/CMakeLists.txt
+index 2e48773a..a70506ce 100644
+--- a/test/cpp/c10d/CMakeLists.txt
++++ b/test/cpp/c10d/CMakeLists.txt
+@@ -17,14 +17,14 @@ function(c10d_add_test test_src)
+   add_test(NAME ${test_name} COMMAND $<TARGET_FILE:${test_name}>)
+ endfunction()
+ 
+-c10d_add_test(FileStoreTest.cpp torch_cpu gtest_main)
+-c10d_add_test(TCPStoreTest.cpp torch_cpu gtest_main)
++c10d_add_test(FileStoreTest.cpp torch_cpu gtest_main gtest)
++c10d_add_test(TCPStoreTest.cpp torch_cpu gtest_main gtest)
+ if(INSTALL_TEST)
+   install(TARGETS FileStoreTest DESTINATION bin)
+   install(TARGETS TCPStoreTest DESTINATION bin)
+ endif()
+ if(NOT WIN32)
+-  c10d_add_test(HashStoreTest.cpp torch_cpu gtest_main)
++  c10d_add_test(HashStoreTest.cpp torch_cpu gtest_main gtest)
+   if(INSTALL_TEST)
+     install(TARGETS HashStoreTest DESTINATION bin)
+   endif()
+@@ -32,11 +32,11 @@ endif()
+ 
+ if(USE_CUDA)
+   if(USE_GLOO AND USE_C10D_GLOO)
+-    c10d_add_test(ProcessGroupGlooTest.cpp torch_cpu c10d_cuda_test gtest_main)
++    c10d_add_test(ProcessGroupGlooTest.cpp torch_cpu c10d_cuda_test gtest_main gtest)
+     if(INSTALL_TEST)
+       install(TARGETS ProcessGroupGlooTest DESTINATION bin)
+     endif()
+-    c10d_add_test(ProcessGroupGlooAsyncTest.cpp torch_cpu c10d_cuda_test gtest_main)
++    c10d_add_test(ProcessGroupGlooAsyncTest.cpp torch_cpu c10d_cuda_test gtest_main gtest)
+   endif()
+   if(USE_NCCL AND USE_C10D_NCCL)
+     # NCCL is a private dependency of libtorch, but the tests include some
+@@ -57,7 +57,7 @@ if(USE_CUDA)
+   endif()
+ else()
+   if(USE_GLOO AND USE_C10D_GLOO)
+-    c10d_add_test(ProcessGroupGlooTest.cpp torch_cpu gtest_main)
++    c10d_add_test(ProcessGroupGlooTest.cpp torch_cpu gtest_main gtest)
+   endif()
+ endif()
+ 
+diff --git a/test/cpp/tensorexpr/CMakeLists.txt b/test/cpp/tensorexpr/CMakeLists.txt
+index 213e99bd..ecaae840 100644
+--- a/test/cpp/tensorexpr/CMakeLists.txt
++++ b/test/cpp/tensorexpr/CMakeLists.txt
+@@ -46,7 +46,7 @@ target_include_directories(tutorial_tensorexpr PRIVATE ${ATen_CPU_INCLUDE})
+ # pthreadpool header. For some build environment we need add the dependency
+ # explicitly.
+ if(USE_PTHREADPOOL)
+-  target_link_libraries(test_tensorexpr PRIVATE pthreadpool_interface)
++  target_link_libraries(test_tensorexpr PRIVATE pthreadpool)
+ endif()
+ if(USE_CUDA)
+   target_link_libraries(test_tensorexpr PRIVATE
diff --git a/gnu/packages/patches/python-random2-getrandbits-test.patch b/gnu/packages/patches/python-random2-getrandbits-test.patch
new file mode 100644
index 0000000000..4f6c56027a
--- /dev/null
+++ b/gnu/packages/patches/python-random2-getrandbits-test.patch
@@ -0,0 +1,23 @@
+From 1bac6355d9c65de847cc445d782c466778b94fbd Mon Sep 17 00:00:00 2001
+From: "Robert T. McGibbon" <rmcgibbo@gmail.com>
+Date: Sun, 9 May 2021 11:18:23 -0400
+Subject: [PATCH] Update tests for python3.9
+
+---
+ src/tests.py | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/tests.py b/src/tests.py
+index d918891..4f2c3de 100644
+--- a/src/tests.py
++++ b/src/tests.py
+@@ -448,7 +448,8 @@ def test_genrandbits(self):
+         self.assertRaises(TypeError, self.gen.getrandbits)
+         self.assertRaises(TypeError, self.gen.getrandbits, 'a')
+         self.assertRaises(TypeError, self.gen.getrandbits, 1, 2)
+-        self.assertRaises(ValueError, self.gen.getrandbits, 0)
++        if sys.version_info < (3, 9):
++            self.assertRaises(ValueError, self.gen.getrandbits, 0)
+         self.assertRaises(ValueError, self.gen.getrandbits, -1)
+ 
+     def test_randbelow_logic(self, _log=log, int=int):
diff --git a/gnu/packages/patches/python-testtools.patch b/gnu/packages/patches/python-testtools.patch
deleted file mode 100644
index 42536e50f9..0000000000
--- a/gnu/packages/patches/python-testtools.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-https://github.com/testing-cabal/testtools/commit/29004731f9c480b7c44a9c2605513d50d372898f.patch
-Should be fixed in the next release
-
-From 29004731f9c480b7c44a9c2605513d50d372898f Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro@hroncok.cz>
-Date: Thu, 17 May 2018 17:52:26 +0200
-Subject: [PATCH] Fix the tests on Python 3.7
-
-Exception's repr got changed not to include trailing comma
-
-Fixes https://github.com/testing-cabal/testtools/issues/270
----
- .travis.yml                                |  1 +
- testtools/tests/matchers/test_exception.py | 11 +++++++++--
- 2 files changed, 10 insertions(+), 2 deletions(-)
-
-diff --git a/.travis.yml b/.travis.yml
-index 7f1f4db7..784608e0 100644
---- a/.travis.yml
-+++ b/.travis.yml
-@@ -5,6 +5,7 @@ python:
-   - "3.4"
-   - "3.5"
-   - "3.6"
-+  - "3.7-dev"
-   - "pypy"
- 
- install:
-diff --git a/testtools/tests/matchers/test_exception.py b/testtools/tests/matchers/test_exception.py
-index 6cd80af1..acd39252 100644
---- a/testtools/tests/matchers/test_exception.py
-+++ b/testtools/tests/matchers/test_exception.py
-@@ -32,15 +32,22 @@ class TestMatchesExceptionInstanceInterface(TestCase, TestMatchersInterface):
-     matches_matches = [error_foo]
-     matches_mismatches = [error_bar, error_base_foo]
- 
-+    if sys.version_info >= (3, 7):
-+        # exception's repr has changed
-+        _e = ''
-+    else:
-+        _e = ','
-+
-     str_examples = [
--        ("MatchesException(Exception('foo',))",
-+        ("MatchesException(Exception('foo'%s))" % _e,
-          MatchesException(Exception('foo')))
-         ]
-     describe_examples = [
-         ("%r is not a %r" % (Exception, ValueError),
-          error_base_foo,
-          MatchesException(ValueError("foo"))),
--        ("ValueError('bar',) has different arguments to ValueError('foo',).",
-+        ("ValueError('bar'%s) has different arguments to ValueError('foo'%s)."
-+         % (_e, _e),
-          error_bar,
-          MatchesException(ValueError("foo"))),
-         ]
diff --git a/gnu/packages/patches/python-typing-inspect-fix.patch b/gnu/packages/patches/python-typing-inspect-fix.patch
new file mode 100644
index 0000000000..e6e28981b7
--- /dev/null
+++ b/gnu/packages/patches/python-typing-inspect-fix.patch
@@ -0,0 +1,38 @@
+From 16919e21936179e53df2f376c8b59b5fc44bd2dd Mon Sep 17 00:00:00 2001
+From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
+Date: Fri, 15 Jan 2021 09:22:52 -0500
+Subject: [PATCH] Fix for Python 3.9+.
+
+Fixes <https://github.com/ilevkivskyi/typing_inspect/issues/60>.
+
+Based on an idea in
+https://github.com/ilevkivskyi/typing_inspect/issues/60#issuecomment-683187584.
+---
+ typing_inspect.py | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/typing_inspect.py b/typing_inspect.py
+index 1ca68ed..31d05ee 100644
+--- a/typing_inspect.py
++++ b/typing_inspect.py
+@@ -21,7 +21,7 @@ LEGACY_TYPING = False
+ 
+ if NEW_TYPING:
+     from typing import (
+-        Generic, Callable, Union, TypeVar, ClassVar, Tuple, _GenericAlias, ForwardRef
++        Generic, Callable, Union, TypeVar, ClassVar, Tuple, _GenericAlias, _SpecialGenericAlias, ForwardRef
+     )
+     from typing_extensions import Literal
+ else:
+@@ -75,7 +75,7 @@ def is_generic_type(tp):
+     """
+     if NEW_TYPING:
+         return (isinstance(tp, type) and issubclass(tp, Generic) or
+-                isinstance(tp, _GenericAlias) and
++                (isinstance(tp, _GenericAlias) or isinstance(tp, _SpecialGenericAlias)) and
+                 tp.__origin__ not in (Union, tuple, ClassVar, collections.abc.Callable))
+     return (isinstance(tp, GenericMeta) and not
+             isinstance(tp, (CallableMeta, TupleMeta)))
+-- 
+2.29.2
+
diff --git a/gnu/packages/patches/python-versioneer-guix-support.patch b/gnu/packages/patches/python-versioneer-guix-support.patch
new file mode 100644
index 0000000000..336020bc5e
--- /dev/null
+++ b/gnu/packages/patches/python-versioneer-guix-support.patch
@@ -0,0 +1,35 @@
+Versioneer does not work in the Guix build container because:
+
+* VCS information is unavailable
+* the build directory does not have the supported "$name-$version" format
+* as of 0.21, versioneer has no way to override the discovered values
+
+This patch adds support for extracting version from the
+'/tmp/guix-build-foo-0.1.drv-0' style directories created by the daemon.
+
+diff --git a/src/from_parentdir.py b/src/from_parentdir.py
+index 69ada9a..e0fac8f 100644
+--- a/src/from_parentdir.py
++++ b/src/from_parentdir.py
+@@ -15,6 +15,21 @@ def versions_from_parentdir(parentdir_prefix, root, verbose):
+             return {"version": dirname[len(parentdir_prefix):],
+                     "full-revisionid": None,
+                     "dirty": False, "error": None, "date": None}
++        # Guix specific patch: try extracting the version from the build
++        # directory.
++        elif dirname.startswith("guix-build-"):
++            delimiter = dirname.rindex(".drv-")
++            name_and_version = dirname[11:delimiter]
++            if name_and_version.startswith(parentdir_prefix):
++                guix_version = name_and_version[len(parentdir_prefix):]
++            elif name_and_version.startswith("python-{}".format(parentdir_prefix)):
++                guix_version = name_and_version[(7 + len(parentdir_prefix)):]
++            else:
++                break
++            return {"version": guix_version,
++                    "full-revisionid": None,
++                    "dirty": False, "error": None, "date": None}
++
+         rootdirs.append(root)
+         root = os.path.dirname(root)  # up a level
+ 
diff --git a/gnu/packages/patches/python-werkzeug-tests.patch b/gnu/packages/patches/python-werkzeug-tests.patch
new file mode 100644
index 0000000000..4eca53f30c
--- /dev/null
+++ b/gnu/packages/patches/python-werkzeug-tests.patch
@@ -0,0 +1,58 @@
+Do not leave open files behind as this triggers 'ResourceWarning' and leads
+these tests to fail.
+
+--- Werkzeug-1.0.1/tests/test_datastructures.py	2020-03-31 19:48:06.000000000 +0200
++++ Werkzeug-1.0.1/tests/test_datastructures.py	2021-11-21 18:19:11.304369878 +0100
+@@ -1238,9 +1238,10 @@
+     def test_save_to_pathlib_dst(self, tmp_path):
+         src = tmp_path / "src.txt"
+         src.write_text(u"test")
+-        storage = self.storage_class(src.open("rb"))
+-        dst = tmp_path / "dst.txt"
+-        storage.save(dst)
++        with src.open("rb") as input:
++            storage = self.storage_class(input)
++            dst = tmp_path / "dst.txt"
++            storage.save(dst)
+         assert dst.read_text() == "test"
+ 
+     def test_save_to_bytes_io(self):
+@@ -1251,11 +1252,12 @@
+ 
+     def test_save_to_file(self, tmp_path):
+         path = tmp_path / "file.data"
+-        storage = self.storage_class(io.BytesIO(b"one\ntwo"))
+-        with path.open("wb") as dst:
+-            storage.save(dst)
+-        with path.open("rb") as src:
+-            assert src.read() == b"one\ntwo"
++        with io.BytesIO(b"one\ntwo") as input:
++            storage = self.storage_class(input)
++            with path.open("wb") as dst:
++                storage.save(dst)
++            with path.open("rb") as src:
++                assert src.read() == b"one\ntwo"
+ 
+ 
+ @pytest.mark.parametrize("ranges", ([(0, 1), (-5, None)], [(5, None)]))
+--- Werkzeug-1.0.1/tests/test_formparser.py	2020-03-31 19:48:06.000000000 +0200
++++ Werkzeug-1.0.1/tests/test_formparser.py	2021-11-21 22:11:43.654622751 +0100
+@@ -27,7 +27,7 @@
+ from werkzeug.test import create_environ
+ from werkzeug.wrappers import Request
+ from werkzeug.wrappers import Response
+-
++import warnings
+ 
+ @Request.application
+ def form_data_consumer(request):
+@@ -242,6 +244,9 @@
+ 
+ class TestMultiPart(object):
+     def test_basic(self):
++        # Ignore leaked file descriptor of unknown origin.
++        warnings.filterwarnings(action="ignore", message="unclosed", category=ResourceWarning)
++
+         resources = join(dirname(__file__), "multipart")
+         client = Client(form_data_consumer, Response)
+ 
diff --git a/gnu/packages/patches/qemu-CVE-2021-20203.patch b/gnu/packages/patches/qemu-CVE-2021-20203.patch
deleted file mode 100644
index 9d2ceaa649..0000000000
--- a/gnu/packages/patches/qemu-CVE-2021-20203.patch
+++ /dev/null
@@ -1,172 +0,0 @@
-From mboxrd@z Thu Jan  1 00:00:00 1970
-Return-Path: <SRS0=i+5i=HB=nongnu.org=qemu-devel-bounces+qemu-devel=archiver.kernel.org@kernel.org>
-X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on
-	aws-us-west-2-korg-lkml-1.web.codeaurora.org
-X-Spam-Level: 
-X-Spam-Status: No, score=-10.8 required=3.0 tests=BAYES_00,DKIM_INVALID,
-	DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH,
-	MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,UNWANTED_LANGUAGE_BODY,
-	URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0
-Received: from mail.kernel.org (mail.kernel.org [198.145.29.99])
-	by smtp.lore.kernel.org (Postfix) with ESMTP id 87556C433E0
-	for <qemu-devel@archiver.kernel.org>; Sat, 30 Jan 2021 13:20:40 +0000 (UTC)
-Received: from lists.gnu.org (lists.gnu.org [209.51.188.17])
-	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
-	(No client certificate requested)
-	by mail.kernel.org (Postfix) with ESMTPS id EF26964DE1
-	for <qemu-devel@archiver.kernel.org>; Sat, 30 Jan 2021 13:20:39 +0000 (UTC)
-DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org EF26964DE1
-Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com
-Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org
-Received: from localhost ([::1]:42488 helo=lists1p.gnu.org)
-	by lists.gnu.org with esmtp (Exim 4.90_1)
-	(envelope-from <qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org>)
-	id 1l5qB3-0008CX-02
-	for qemu-devel@archiver.kernel.org; Sat, 30 Jan 2021 08:20:37 -0500
-Received: from eggs.gnu.org ([2001:470:142:3::10]:45174)
- by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
- (Exim 4.90_1) (envelope-from <ppandit@redhat.com>)
- id 1l5q9q-0007ld-1c
- for qemu-devel@nongnu.org; Sat, 30 Jan 2021 08:19:22 -0500
-Received: from us-smtp-delivery-124.mimecast.com ([63.128.21.124]:42898)
- by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256)
- (Exim 4.90_1) (envelope-from <ppandit@redhat.com>)
- id 1l5q9k-0007Ia-TV
- for qemu-devel@nongnu.org; Sat, 30 Jan 2021 08:19:21 -0500
-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;
- s=mimecast20190719; t=1612012753;
- h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
- to:to:cc:cc:mime-version:mime-version:content-type:content-type:
- content-transfer-encoding:content-transfer-encoding;
- bh=7vu4z8M+bFjhFzEuAYsQG4i3APx7aMqv7tFxRRO5+8Q=;
- b=egCsTdgVBnRlHnVN84HsSpNOUl/NkqEnGuv9rRdG2AZ1Fee5ZatpJm5zJ7YUW2HvzB4rtO
- EaDIKaN1wzf/yHf0CsJ60TPGG3DqQSC/EsTSr2l/GNGq4prDYTXVrS3rXFu9ofByUVvzwU
- q9Iy1X1Bh3S21m7jXY0AYx4Tu9Ikq9w=
-Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com
- [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id
- us-mta-588-1JF7mzMfP1KpRpNKj4cAWQ-1; Sat, 30 Jan 2021 08:19:08 -0500
-X-MC-Unique: 1JF7mzMfP1KpRpNKj4cAWQ-1
-Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com
- [10.5.11.22])
- (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))
- (No client certificate requested)
- by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 8F0F439380;
- Sat, 30 Jan 2021 13:19:07 +0000 (UTC)
-Received: from localhost.localdomain (unknown [10.33.36.2])
- by smtp.corp.redhat.com (Postfix) with ESMTPS id 17D581002C11;
- Sat, 30 Jan 2021 13:19:04 +0000 (UTC)
-From: P J P <ppandit@redhat.com>
-To: Dmitry Fleytman <dmitry.fleytman@gmail.com>
-Subject: [PATCH] net: vmxnet3: validate configuration values during activate
- (CVE-2021-20203)
-Date: Sat, 30 Jan 2021 18:46:52 +0530
-Message-Id: <20210130131652.954143-1-ppandit@redhat.com>
-MIME-Version: 1.0
-X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22
-Authentication-Results: relay.mimecast.com;
- auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=ppandit@redhat.com
-X-Mimecast-Spam-Score: 0
-X-Mimecast-Originator: redhat.com
-Content-Transfer-Encoding: 8bit
-Content-Type: text/plain; charset="US-ASCII"
-Received-SPF: pass client-ip=63.128.21.124; envelope-from=ppandit@redhat.com;
- helo=us-smtp-delivery-124.mimecast.com
-X-Spam_score_int: -30
-X-Spam_score: -3.1
-X-Spam_bar: ---
-X-Spam_report: (-3.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.255,
- DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
- RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001,
- SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no
-X-Spam_action: no action
-X-BeenThere: qemu-devel@nongnu.org
-X-Mailman-Version: 2.1.23
-Precedence: list
-List-Id: <qemu-devel.nongnu.org>
-List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
- <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
-List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
-List-Post: <mailto:qemu-devel@nongnu.org>
-List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
-List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
- <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
-Cc: Gaoning Pan <pgn@zju.edu.cn>, QEMU Developers <qemu-devel@nongnu.org>,
- Prasad J Pandit <pjp@fedoraproject.org>
-Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org
-Sender: "Qemu-devel"
- <qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org>
-Archived-At: <https://lore.kernel.org/qemu-devel/20210130131652.954143-1-ppandit@redhat.com/>
-List-Archive: <https://lore.kernel.org/qemu-devel/>
-
-From: Prasad J Pandit <pjp@fedoraproject.org>
-
-While activating device in vmxnet3_acticate_device(), it does not
-validate guest supplied configuration values against predefined
-minimum - maximum limits. This may lead to integer overflow or
-OOB access issues. Add checks to avoid it.
-
-Fixes: CVE-2021-20203
-Buglink: https://bugs.launchpad.net/qemu/+bug/1913873
-Reported-by: Gaoning Pan <pgn@zju.edu.cn>
-Signed-off-by: Prasad J Pandit <pjp@fedoraproject.org>
----
- hw/net/vmxnet3.c | 13 +++++++++++++
- 1 file changed, 13 insertions(+)
-
-diff --git a/hw/net/vmxnet3.c b/hw/net/vmxnet3.c
-index eff299f629..4a910ca971 100644
---- a/hw/net/vmxnet3.c
-+++ b/hw/net/vmxnet3.c
-@@ -1420,6 +1420,7 @@ static void vmxnet3_activate_device(VMXNET3State *s)
-     vmxnet3_setup_rx_filtering(s);
-     /* Cache fields from shared memory */
-     s->mtu = VMXNET3_READ_DRV_SHARED32(d, s->drv_shmem, devRead.misc.mtu);
-+    assert(VMXNET3_MIN_MTU <= s->mtu && s->mtu < VMXNET3_MAX_MTU);
-     VMW_CFPRN("MTU is %u", s->mtu);
- 
-     s->max_rx_frags =
-@@ -1473,6 +1474,9 @@ static void vmxnet3_activate_device(VMXNET3State *s)
-         /* Read rings memory locations for TX queues */
-         pa = VMXNET3_READ_TX_QUEUE_DESCR64(d, qdescr_pa, conf.txRingBasePA);
-         size = VMXNET3_READ_TX_QUEUE_DESCR32(d, qdescr_pa, conf.txRingSize);
-+        if (size > VMXNET3_TX_RING_MAX_SIZE) {
-+            size = VMXNET3_TX_RING_MAX_SIZE;
-+        }
- 
-         vmxnet3_ring_init(d, &s->txq_descr[i].tx_ring, pa, size,
-                           sizeof(struct Vmxnet3_TxDesc), false);
-@@ -1483,6 +1487,9 @@ static void vmxnet3_activate_device(VMXNET3State *s)
-         /* TXC ring */
-         pa = VMXNET3_READ_TX_QUEUE_DESCR64(d, qdescr_pa, conf.compRingBasePA);
-         size = VMXNET3_READ_TX_QUEUE_DESCR32(d, qdescr_pa, conf.compRingSize);
-+        if (size > VMXNET3_TC_RING_MAX_SIZE) {
-+            size = VMXNET3_TC_RING_MAX_SIZE;
-+        }
-         vmxnet3_ring_init(d, &s->txq_descr[i].comp_ring, pa, size,
-                           sizeof(struct Vmxnet3_TxCompDesc), true);
-         VMXNET3_RING_DUMP(VMW_CFPRN, "TXC", i, &s->txq_descr[i].comp_ring);
-@@ -1524,6 +1531,9 @@ static void vmxnet3_activate_device(VMXNET3State *s)
-             /* RX rings */
-             pa = VMXNET3_READ_RX_QUEUE_DESCR64(d, qd_pa, conf.rxRingBasePA[j]);
-             size = VMXNET3_READ_RX_QUEUE_DESCR32(d, qd_pa, conf.rxRingSize[j]);
-+            if (size > VMXNET3_RX_RING_MAX_SIZE) {
-+                size = VMXNET3_RX_RING_MAX_SIZE;
-+            }
-             vmxnet3_ring_init(d, &s->rxq_descr[i].rx_ring[j], pa, size,
-                               sizeof(struct Vmxnet3_RxDesc), false);
-             VMW_CFPRN("RX queue %d:%d: Base: %" PRIx64 ", Size: %d",
-@@ -1533,6 +1543,9 @@ static void vmxnet3_activate_device(VMXNET3State *s)
-         /* RXC ring */
-         pa = VMXNET3_READ_RX_QUEUE_DESCR64(d, qd_pa, conf.compRingBasePA);
-         size = VMXNET3_READ_RX_QUEUE_DESCR32(d, qd_pa, conf.compRingSize);
-+        if (size > VMXNET3_RC_RING_MAX_SIZE) {
-+            size = VMXNET3_RC_RING_MAX_SIZE;
-+        }
-         vmxnet3_ring_init(d, &s->rxq_descr[i].comp_ring, pa, size,
-                           sizeof(struct Vmxnet3_RxCompDesc), true);
-         VMW_CFPRN("RXC queue %d: Base: %" PRIx64 ", Size: %d", i, pa, size);
--- 
-2.29.2
-
-
-
diff --git a/gnu/packages/patches/qemu-fix-agent-paths.patch b/gnu/packages/patches/qemu-fix-agent-paths.patch
new file mode 100644
index 0000000000..bae62fadbf
--- /dev/null
+++ b/gnu/packages/patches/qemu-fix-agent-paths.patch
@@ -0,0 +1,66 @@
+Allow a QEMU host to set the time and shutdown Guix guests.  Styled
+after the patch from the Nix package:
+
+https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/virtualization/qemu/fix-qemu-ga.patch
+
+diff --git a/qga/commands-posix.c b/qga/commands-posix.c
+index 75dbaab..b416b03 100644
+--- a/qga/commands-posix.c
++++ b/qga/commands-posix.c
+@@ -84,6 +84,7 @@ static void ga_wait_child(pid_t pid, int *status, Error **errp)
+ void qmp_guest_shutdown(bool has_mode, const char *mode, Error **errp)
+ {
+     const char *shutdown_flag;
++    const char *command;
+     Error *local_err = NULL;
+     pid_t pid;
+     int status;
+@@ -91,10 +92,13 @@ void qmp_guest_shutdown(bool has_mode, const char *mode, Error **errp)
+     slog("guest-shutdown called, mode: %s", mode);
+     if (!has_mode || strcmp(mode, "powerdown") == 0) {
+         shutdown_flag = "-P";
++        command = "shutdown";
+     } else if (strcmp(mode, "halt") == 0) {
+         shutdown_flag = "-H";
++        command = "halt";
+     } else if (strcmp(mode, "reboot") == 0) {
+         shutdown_flag = "-r";
++        command = "reboot";
+     } else {
+         error_setg(errp,
+                    "mode is invalid (valid values are: halt|powerdown|reboot");
+@@ -109,6 +113,11 @@ void qmp_guest_shutdown(bool has_mode, const char *mode, Error **errp)
+         reopen_fd_to_null(1);
+         reopen_fd_to_null(2);
+ 
++        /* try Guix’s shutdown/halt/reboot first */
++        char *path = g_strdup_printf("/run/current-system/profile/sbin/%s", command);
++        execle(path, command, (char *)NULL, environ);
++        g_free(path);
++
+         execle("/sbin/shutdown", "shutdown", "-h", shutdown_flag, "+0",
+                "hypervisor initiated shutdown", (char *)NULL, environ);
+         _exit(EXIT_FAILURE);
+@@ -158,10 +167,12 @@ void qmp_guest_set_time(bool has_time, int64_t time_ns, Error **errp)
+     Error *local_err = NULL;
+     struct timeval tv;
+     static const char hwclock_path[] = "/sbin/hwclock";
++    static const char hwclock_path_guix[] = "/run/current-system/profile/sbin/hwclock";
+     static int hwclock_available = -1;
+ 
+     if (hwclock_available < 0) {
+-        hwclock_available = (access(hwclock_path, X_OK) == 0);
++        hwclock_available = (access(hwclock_path_guix, X_OK) == 0) ||
++                            (access(hwclock_path, X_OK) == 0);
+     }
+ 
+     if (!hwclock_available) {
+@@ -207,6 +218,8 @@ void qmp_guest_set_time(bool has_time, int64_t time_ns, Error **errp)
+ 
+         /* Use '/sbin/hwclock -w' to set RTC from the system time,
+          * or '/sbin/hwclock -s' to set the system time from RTC. */
++        execle(hwclock_path_guix, "hwclock", has_time ? "-w" : "-s",
++               NULL, environ);
+         execle(hwclock_path, "hwclock", has_time ? "-w" : "-s",
+                NULL, environ);
+         _exit(EXIT_FAILURE);
diff --git a/gnu/packages/patches/qemu-meson-compat.patch b/gnu/packages/patches/qemu-meson-compat.patch
deleted file mode 100644
index e6968c57dc..0000000000
--- a/gnu/packages/patches/qemu-meson-compat.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-Fix a build failure that occurs with newer versions of Meson when
-gdbus-codegen is unavailable.
-
-Taken from upstream:
-https://gitlab.com/qemu-project/qemu/-/commit/5ecfb76ccc056eb6127e44268e475827ae73b9e0
-
-diff --git a/configure b/configure
---- a/configure
-+++ b/configure
-@@ -3341,7 +3341,7 @@ if ! test "$gio" = "no"; then
-         gio_cflags=$($pkg_config --cflags gio-2.0)
-         gio_libs=$($pkg_config --libs gio-2.0)
-         gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
--        if [ ! -x "$gdbus_codegen" ]; then
-+        if ! has "$gdbus_codegen"; then
-             gdbus_codegen=
-         fi
-         # Check that the libraries actually work -- Ubuntu 18.04 ships
-@@ -5704,6 +5704,8 @@ if test "$gio" = "yes" ; then
-     echo "CONFIG_GIO=y" >> $config_host_mak
-     echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
-     echo "GIO_LIBS=$gio_libs" >> $config_host_mak
-+fi
-+if test "$gdbus_codegen" != "" ; then
-     echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
- fi
- echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
diff --git a/gnu/packages/patches/qemu-sphinx-compat.patch b/gnu/packages/patches/qemu-sphinx-compat.patch
deleted file mode 100644
index 7342ebee4e..0000000000
--- a/gnu/packages/patches/qemu-sphinx-compat.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-Prevent Sphinx 4 and later from creating subdirectories, which
-the build scripts are not equipped to deal with.
-
-Taken from upstream:
-https://gitlab.com/qemu-project/qemu/-/issues/256
-https://gitlab.com/qemu-project/qemu/-/commit/269a7e97865cb863c9ca19e5f2e6a40ac9eddf82
-
-diff --git a/docs/conf.py b/docs/conf.py
---- a/docs/conf.py
-+++ b/docs/conf.py
-@@ -279,6 +279,7 @@
-      ['Stefan Hajnoczi <stefanha@redhat.com>',
-       'Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>'], 1),
- ]
-+man_make_section_directory = False
- 
- # -- Options for Texinfo output -------------------------------------------
- 
diff --git a/gnu/packages/patches/qtwebkit-fix-building-with-bison-3.7.patch b/gnu/packages/patches/qtwebkit-fix-building-with-bison-3.7.patch
new file mode 100644
index 0000000000..ddaf8e2849
--- /dev/null
+++ b/gnu/packages/patches/qtwebkit-fix-building-with-bison-3.7.patch
@@ -0,0 +1,54 @@
+Fix build with Bison 3.7
+
+https://bugs.gentoo.org/736499
+
+Patch copied from upstream source repository:
+
+https://github.com/qtwebkit/qtwebkit/commit/d92b11fea65364fefa700249bd3340e0cd4c5b31
+
+From d92b11fea65364fefa700249bd3340e0cd4c5b31 Mon Sep 17 00:00:00 2001
+From: Dmitry Shachnev <mitya57@gmail.com>
+Date: Tue, 4 Aug 2020 21:04:06 +0300
+Subject: [PATCH] Let Bison generate the header directly, to fix build with
+ Bison 3.7
+
+Starting with Bison 3.7, the generated C++ file #include's the header
+by default, instead of duplicating it. So we should not delete it.
+
+Remove the code to add #ifdef guards to the header, since Bison adds
+them itself since version 2.6.3.
+---
+ Source/WebCore/css/makegrammar.pl | 21 +--------------------
+ 1 file changed, 1 insertion(+), 20 deletions(-)
+
+diff --git a/Source/WebCore/css/makegrammar.pl b/Source/WebCore/css/makegrammar.pl
+index 5d63b08102eb5..9435701c70612 100644
+--- a/Source/WebCore/css/makegrammar.pl
++++ b/Source/WebCore/css/makegrammar.pl
+@@ -73,25 +73,6 @@
+ }
+ 
+ my $fileBase = File::Spec->join($outputDir, $filename);
+-my @bisonCommand = ($bison, "-d", "-p", $symbolsPrefix, $grammarFilePath, "-o", "$fileBase.cpp");
++my @bisonCommand = ($bison, "--defines=$fileBase.h", "-p", $symbolsPrefix, $grammarFilePath, "-o", "$fileBase.cpp");
+ push @bisonCommand, "--no-lines" if $^O eq "MSWin32"; # Work around bug in bison >= 3.0 on Windows where it puts backslashes into #line directives.
+ system(@bisonCommand) == 0 or die;
+-
+-open HEADER, ">$fileBase.h" or die;
+-print HEADER << "EOF";
+-#ifndef CSSGRAMMAR_H
+-#define CSSGRAMMAR_H
+-EOF
+-
+-open HPP, "<$fileBase.cpp.h" or open HPP, "<$fileBase.hpp" or die;
+-while (<HPP>) {
+-    print HEADER;
+-}
+-close HPP;
+-
+-print HEADER "#endif\n";
+-close HEADER;
+-
+-unlink("$fileBase.cpp.h");
+-unlink("$fileBase.hpp");
+-
diff --git a/gnu/packages/patches/qtwebkit-fix-building-with-glib-2.68.patch b/gnu/packages/patches/qtwebkit-fix-building-with-glib-2.68.patch
new file mode 100644
index 0000000000..63840f4bbc
--- /dev/null
+++ b/gnu/packages/patches/qtwebkit-fix-building-with-glib-2.68.patch
@@ -0,0 +1,21 @@
+Fix building with glib 2.68:
+
+https://github.com/qtwebkit/qtwebkit/issues/1057
+
+Patch copied from upstream pull request:
+
+https://github.com/qtwebkit/qtwebkit/pull/1058/commits/5b698ba3faffd4e198a45be9fe74f53307395e4b
+
+diff -aurN qtwebkit-5.212.0-alpha4/Source/WTF/wtf/glib/GRefPtr.h qtwebkit-5.212.0-alpha4-mod/Source/WTF/wtf/glib/GRefPtr.h
+--- qtwebkit-5.212.0-alpha4/Source/WTF/wtf/glib/GRefPtr.h	2020-03-04 18:16:37.000000000 +0100
++++ qtwebkit-5.212.0-alpha4-mod/Source/WTF/wtf/glib/GRefPtr.h	2021-04-05 06:58:44.763328636 +0200
+@@ -29,9 +29,6 @@
+ #include <wtf/RefPtr.h>
+ #include <algorithm>
+ 
+-extern "C" void g_object_unref(gpointer);
+-extern "C" gpointer g_object_ref_sink(gpointer);
+-
+ namespace WTF {
+ 
+ enum GRefPtrAdoptType { GRefPtrAdopt };
diff --git a/gnu/packages/patches/qtwebkit-fix-building-with-icu-68.patch b/gnu/packages/patches/qtwebkit-fix-building-with-icu-68.patch
new file mode 100644
index 0000000000..acbfc4c4c8
--- /dev/null
+++ b/gnu/packages/patches/qtwebkit-fix-building-with-icu-68.patch
@@ -0,0 +1,152 @@
+Fix building with ICU > 68.
+
+https://bugs.gentoo.org/753260
+
+Patch adapted from Gentoo:
+
+https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=335f29d266c5b169ff1e781f9851a3a203f3198c
+
+From 335f29d266c5b169ff1e781f9851a3a203f3198c Mon Sep 17 00:00:00 2001
+From: Andreas Sturmlechner <asturm@gentoo.org>
+Date: Fri, 6 Nov 2020 09:22:15 +0100
+Subject: dev-qt/qtwebkit: Fix build with ICU-68
+
+Thanks-to: Lars Wendler <polynomial-c@gentoo.org>
+Closes: https://bugs.gentoo.org/753260
+Package-Manager: Portage-3.0.9, Repoman-3.0.2
+Signed-off-by: Andreas Sturmlechner <asturm@gentoo.org>
+---
+ .../qtwebkit-5.212.0_pre20200309-icu-68.patch      | 120 +++++++++++++++++++++
+ 1 file changed, 120 insertions(+)
+ create mode 100644 dev-qt/qtwebkit/files/qtwebkit-5.212.0_pre20200309-icu-68.patch
+
+(limited to 'dev-qt/qtwebkit/files/qtwebkit-5.212.0_pre20200309-icu-68.patch')
+
+diff --git a/Source/WebCore/platform/text/TextCodecICU.cpp b/Source/WebCore/platform/text/TextCodecICU.cpp
+index dd6ff06..e0f4bd7 100644
+--- a/Source/WebCore/platform/text/TextCodecICU.cpp
++++ b/Source/WebCore/platform/text/TextCodecICU.cpp
+@@ -308,7 +308,7 @@ void TextCodecICU::createICUConverter() const
+     m_converterICU = ucnv_open(m_canonicalConverterName, &err);
+     ASSERT(U_SUCCESS(err));
+     if (m_converterICU)
+-        ucnv_setFallback(m_converterICU, TRUE);
++        ucnv_setFallback(m_converterICU, true);
+ }
+ 
+ int TextCodecICU::decodeToBuffer(UChar* target, UChar* targetLimit, const char*& source, const char* sourceLimit, int32_t* offsets, bool flush, UErrorCode& err)
+diff --git a/Source/WebCore/platform/text/icu/UTextProvider.h b/Source/WebCore/platform/text/icu/UTextProvider.h
+index c254fc4..6d1e1cb 100644
+--- a/Source/WebCore/platform/text/icu/UTextProvider.h
++++ b/Source/WebCore/platform/text/icu/UTextProvider.h
+@@ -80,12 +80,12 @@ inline bool uTextAccessInChunkOrOutOfRange(UText* text, int64_t nativeIndex, int
+             // Ensure chunk offset is well formed if computed offset exceeds int32_t range.
+             ASSERT(offset < std::numeric_limits<int32_t>::max());
+             text->chunkOffset = offset < std::numeric_limits<int32_t>::max() ? static_cast<int32_t>(offset) : 0;
+-            isAccessible = TRUE;
++            isAccessible = true;
+             return true;
+         }
+         if (nativeIndex >= nativeLength && text->chunkNativeLimit == nativeLength) {
+             text->chunkOffset = text->chunkLength;
+-            isAccessible = FALSE;
++            isAccessible = false;
+             return true;
+         }
+     } else {
+@@ -94,12 +94,12 @@ inline bool uTextAccessInChunkOrOutOfRange(UText* text, int64_t nativeIndex, int
+             // Ensure chunk offset is well formed if computed offset exceeds int32_t range.
+             ASSERT(offset < std::numeric_limits<int32_t>::max());
+             text->chunkOffset = offset < std::numeric_limits<int32_t>::max() ? static_cast<int32_t>(offset) : 0;
+-            isAccessible = TRUE;
++            isAccessible = true;
+             return true;
+         }
+         if (nativeIndex <= 0 && !text->chunkNativeStart) {
+             text->chunkOffset = 0;
+-            isAccessible = FALSE;
++            isAccessible = false;
+             return true;
+         }
+     }
+diff --git a/Source/WebCore/platform/text/icu/UTextProviderLatin1.cpp b/Source/WebCore/platform/text/icu/UTextProviderLatin1.cpp
+index cd6852c..6a864b1 100644
+--- a/Source/WebCore/platform/text/icu/UTextProviderLatin1.cpp
++++ b/Source/WebCore/platform/text/icu/UTextProviderLatin1.cpp
+@@ -100,23 +100,23 @@ static UBool uTextLatin1Access(UText* uText, int64_t index, UBool forward)
+         if (index < uText->chunkNativeLimit && index >= uText->chunkNativeStart) {
+             // Already inside the buffer. Set the new offset.
+             uText->chunkOffset = static_cast<int32_t>(index - uText->chunkNativeStart);
+-            return TRUE;
++            return true;
+         }
+         if (index >= length && uText->chunkNativeLimit == length) {
+             // Off the end of the buffer, but we can't get it.
+             uText->chunkOffset = static_cast<int32_t>(index - uText->chunkNativeStart);
+-            return FALSE;
++            return false;
+         }
+     } else {
+         if (index <= uText->chunkNativeLimit && index > uText->chunkNativeStart) {
+             // Already inside the buffer. Set the new offset.
+             uText->chunkOffset = static_cast<int32_t>(index - uText->chunkNativeStart);
+-            return TRUE;
++            return true;
+         }
+         if (!index && !uText->chunkNativeStart) {
+             // Already at the beginning; can't go any farther.
+             uText->chunkOffset = 0;
+-            return FALSE;
++            return false;
+         }
+     }
+     
+@@ -144,7 +144,7 @@ static UBool uTextLatin1Access(UText* uText, int64_t index, UBool forward)
+ 
+     uText->nativeIndexingLimit = uText->chunkLength;
+ 
+-    return TRUE;
++    return true;
+ }
+ 
+ static int32_t uTextLatin1Extract(UText* uText, int64_t start, int64_t limit, UChar* dest, int32_t destCapacity, UErrorCode* status)
+@@ -336,7 +336,7 @@ static int64_t uTextLatin1ContextAwareNativeLength(UText* text)
+ static UBool uTextLatin1ContextAwareAccess(UText* text, int64_t nativeIndex, UBool forward)
+ {
+     if (!text->context)
+-        return FALSE;
++        return false;
+     int64_t nativeLength = uTextLatin1ContextAwareNativeLength(text);
+     UBool isAccessible;
+     if (uTextAccessInChunkOrOutOfRange(text, nativeIndex, nativeLength, forward, isAccessible))
+@@ -356,7 +356,7 @@ static UBool uTextLatin1ContextAwareAccess(UText* text, int64_t nativeIndex, UBo
+         ASSERT(newContext == UTextProviderContext::PriorContext);
+         textLatin1ContextAwareSwitchToPriorContext(text, nativeIndex, nativeLength, forward);
+     }
+-    return TRUE;
++    return true;
+ }
+ 
+ static int32_t uTextLatin1ContextAwareExtract(UText*, int64_t, int64_t, UChar*, int32_t, UErrorCode* errorCode)
+diff --git a/Source/WebCore/platform/text/icu/UTextProviderUTF16.cpp b/Source/WebCore/platform/text/icu/UTextProviderUTF16.cpp
+index 7aaac48..9ae0d36 100644
+--- a/Source/WebCore/platform/text/icu/UTextProviderUTF16.cpp
++++ b/Source/WebCore/platform/text/icu/UTextProviderUTF16.cpp
+@@ -125,7 +125,7 @@ static inline int64_t uTextUTF16ContextAwareNativeLength(UText* text)
+ static UBool uTextUTF16ContextAwareAccess(UText* text, int64_t nativeIndex, UBool forward)
+ {
+     if (!text->context)
+-        return FALSE;
++        return false;
+     int64_t nativeLength = uTextUTF16ContextAwareNativeLength(text);
+     UBool isAccessible;
+     if (uTextAccessInChunkOrOutOfRange(text, nativeIndex, nativeLength, forward, isAccessible))
+@@ -145,7 +145,7 @@ static UBool uTextUTF16ContextAwareAccess(UText* text, int64_t nativeIndex, UBoo
+         ASSERT(newContext == UTextProviderContext::PriorContext);
+         textUTF16ContextAwareSwitchToPriorContext(text, nativeIndex, nativeLength, forward);
+     }
+-    return TRUE;
++    return true;
+ }
+ 
+ static int32_t uTextUTF16ContextAwareExtract(UText*, int64_t, int64_t, UChar*, int32_t, UErrorCode* errorCode)
diff --git a/gnu/packages/patches/qtwebkit-fix-building-with-python-3.9.patch b/gnu/packages/patches/qtwebkit-fix-building-with-python-3.9.patch
new file mode 100644
index 0000000000..9f9674de33
--- /dev/null
+++ b/gnu/packages/patches/qtwebkit-fix-building-with-python-3.9.patch
@@ -0,0 +1,35 @@
+Fix building with Python 3.9:
+
+https://github.com/qtwebkit/qtwebkit/issues/993
+
+Patch copied from upstream source repository:
+
+https://github.com/qtwebkit/qtwebkit/commit/78360c01c796b6260bf828bc9c8a0ef73c5132fd
+
+From 78360c01c796b6260bf828bc9c8a0ef73c5132fd Mon Sep 17 00:00:00 2001
+From: Konstantin Tokarev <annulen@yandex.ru>
+Date: Wed, 3 Jun 2020 15:01:42 +0300
+Subject: [PATCH] Fix compilation with Python 3.9: avoid passing encoding to
+ json.load()
+
+In Python 2.7 UTF-8 is assumed by default, while in Python 3 this argument
+is not supported.
+
+Change-Id: Ic459d60a6b20bc1838d8771bc36ac41614fe61a9
+---
+ Source/JavaScriptCore/generate-bytecode-files | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Source/JavaScriptCore/generate-bytecode-files b/Source/JavaScriptCore/generate-bytecode-files
+index c5dab429c7b0f..af3431275ecf9 100644
+--- a/Source/JavaScriptCore/generate-bytecode-files
++++ b/Source/JavaScriptCore/generate-bytecode-files
+@@ -163,7 +163,7 @@ if __name__ == "__main__":
+         initBytecodesFile = openOrExit(initASMFileName, "w")
+ 
+     try:
+-        bytecodeSections = json.load(bytecodeFile, encoding = "utf-8")
++        bytecodeSections = json.load(bytecodeFile)
+     except:
+         print("Unexpected error parsing {0}: {1}".format(bytecodeJSONFile, sys.exc_info()))
+ 
diff --git a/gnu/packages/patches/quassel-qt-514-compat.patch b/gnu/packages/patches/quassel-qt-514-compat.patch
deleted file mode 100644
index 7a0c42e8aa..0000000000
--- a/gnu/packages/patches/quassel-qt-514-compat.patch
+++ /dev/null
@@ -1,130 +0,0 @@
-https://github.com/quassel/quassel/commit/579e559a6322209df7cd51c34801fecff5fe734b.patch
-
-Based on the above patch, with some changes due to how the code has changed
-in the time since 0.13.1 was released.
-
-https://git.archlinux.org/svntogit/community.git/plain/trunk/quassel-0.13.1-qt5.14.patch?h=packages/quassel
-
-From 579e559a6322209df7cd51c34801fecff5fe734b Mon Sep 17 00:00:00 2001
-From: Manuel Nickschas <sputnick@quassel-irc.org>
-Date: Tue, 7 Jan 2020 18:34:54 +0100
-Subject: [PATCH] common: Disable enum type stream operators for Qt >= 5.14
-
-Starting from version 5.14, Qt provides stream operators for enum
-types, which collide with the ones we ship in types.h. Disable
-Quassel's stream operators when compiling against Qt 5.14 or later.
-
-Add a unit test that ensures that enum serialization honors the width
-of the underlying type.
----
- src/common/types.h          |  2 +
- tests/common/CMakeLists.txt |  2 +
- tests/common/typestest.cpp  | 79 +++++++++++++++++++++++++++++++++++++
- 3 files changed, 83 insertions(+)
- create mode 100644 tests/common/typestest.cpp
-
-diff --git a/src/common/types.h b/src/common/types.h
-index d3742b788..e2a9aab5e 100644
---- a/src/common/types.h
-+++ b/src/common/types.h
-@@ -140,6 +140,7 @@ Q_DECLARE_METATYPE(QHostAddress)
- typedef QList<MsgId> MsgIdList;
- typedef QList<BufferId> BufferIdList;
-
-+#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0)
- /**
-   * Catch-all stream serialization operator for enum types.
-   *
-@@ -169,6 +170,7 @@ QDataStream &operator>>(QDataStream &in, T &value) {
-     value = static_cast<T>(v);
-     return in;
- }
-+#endif
-
- // Exceptions
-
-diff --git a/tests/common/typestest.cpp b/tests/common/typestest.cpp
-new file mode 100644
-index 000000000..04031c299
---- /dev/null
-+++ b/tests/common/typestest.cpp
-@@ -0,0 +1,79 @@
-+/***************************************************************************
-+ *   Copyright (C) 2005-2020 by the Quassel Project                        *
-+ *   devel@quassel-irc.org                                                 *
-+ *                                                                         *
-+ *   This program is free software; you can redistribute it and/or modify  *
-+ *   it under the terms of the GNU General Public License as published by  *
-+ *   the Free Software Foundation; either version 2 of the License, or     *
-+ *   (at your option) version 3.                                           *
-+ *                                                                         *
-+ *   This program is distributed in the hope that it will be useful,       *
-+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
-+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
-+ *   GNU General Public License for more details.                          *
-+ *                                                                         *
-+ *   You should have received a copy of the GNU General Public License     *
-+ *   along with this program; if not, write to the                         *
-+ *   Free Software Foundation, Inc.,                                       *
-+ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.         *
-+ ***************************************************************************/
-+
-+#include <cstdint>
-+
-+#include <QByteArray>
-+#include <QDataStream>
-+#include <QObject>
-+
-+#include "testglobal.h"
-+#include "types.h"
-+
-+using namespace ::testing;
-+
-+class EnumHolder
-+{
-+    Q_GADGET
-+
-+public:
-+    enum class Enum16 : uint16_t {};
-+    enum class Enum32 : uint32_t {};
-+
-+    enum class EnumQt16 : uint16_t {};
-+    Q_ENUM(EnumQt16)
-+    enum class EnumQt32 : uint32_t {};
-+    Q_ENUM(EnumQt32)
-+};
-+
-+// Verify that enums are (de)serialized as their underlying type
-+TEST(TypesTest, enumSerialization)
-+{
-+    QByteArray data;
-+    QDataStream out(&data, QIODevice::WriteOnly);
-+
-+    // Serialize
-+    out << EnumHolder::Enum16(0xabcd);
-+    ASSERT_THAT(data.size(), Eq(2));
-+    out << EnumHolder::Enum32(0x123456);
-+    ASSERT_THAT(data.size(), Eq(6));
-+    out << EnumHolder::EnumQt16(0x4321);
-+    ASSERT_THAT(data.size(), Eq(8));
-+    out << EnumHolder::Enum32(0xfedcba);
-+    ASSERT_THAT(data.size(), Eq(12));
-+    ASSERT_THAT(out.status(), Eq(QDataStream::Status::Ok));
-+
-+    // Deserialize
-+    QDataStream in(data);
-+    EnumHolder::Enum16 enum16;
-+    EnumHolder::Enum32 enum32;
-+    EnumHolder::EnumQt16 enumQt16;
-+    EnumHolder::EnumQt32 enumQt32;
-+    in >> enum16  >> enum32 >> enumQt16 >> enumQt32;
-+    ASSERT_THAT(in.status(), Eq(QDataStream::Status::Ok));
-+    EXPECT_TRUE(in.atEnd());
-+
-+    EXPECT_THAT((int)enum16, Eq(0xabcd));
-+    EXPECT_THAT((int)enum32, Eq(0x123456));
-+    EXPECT_THAT((int)enumQt16, Eq(0x4321));
-+    EXPECT_THAT((int)enumQt32, Eq(0xfedcba));
-+}
-+
-+#include "typestest.moc"
diff --git a/gnu/packages/patches/r-httpuv-1.5.5-unvendor-libuv.patch b/gnu/packages/patches/r-httpuv-1.5.5-unvendor-libuv.patch
index 0947718059..30c6425477 100644
--- a/gnu/packages/patches/r-httpuv-1.5.5-unvendor-libuv.patch
+++ b/gnu/packages/patches/r-httpuv-1.5.5-unvendor-libuv.patch
@@ -20,7 +20,7 @@ Removes references to bundled libuv.
  
  # To avoid spurious warnings from `R CMD check --as-cran`, about compiler
  # warning flags like -Werror.
-@@ -43,35 +43,5 @@
+@@ -43,49 +43,5 @@
  # PKG_CPPFLAGS += -D_GLIBCXX_ASSERTIONS
  
  
@@ -32,10 +32,18 @@ Removes references to bundled libuv.
 -libuv/m4/lt~obsolete.m4: libuv/m4/lt_obsolete.m4
 -	cp -p -f libuv/m4/lt_obsolete.m4 libuv/m4/lt~obsolete.m4
 -
--# Run ./configure. We need to touch various autotools-related files to avoid
--# it trying to run autotools programs again. We also need to make sure
--# configure is executable, because on some platforms, calling unzip() in R
--# does not preserve the executable bit.
+-# Run ./configure to create the Makefile.
+-#
+-# On systems that do _not_ have automake installed, we need to make sure that
+-# configure does not try to run automake, because it will fail. To do that, we
+-# we need to touch various autotools-related files so it doesn't try to run
+-# autotools programs again. We also need to make sure configure is executable,
+-# because on some platforms, calling unzip() in R does not preserve the
+-# executable bit.
+-#
+-# If the system does have automake, then we'll run autogen.sh before configure,
+-# as per the official build instructions for libuv. autogen.sh will in turn run
+-# aclocal, autoconf, and automake.
 -#
 -# It's VERY IMPORTANT that mtime(aclocal.m4) <= mtime(configure), and also
 -# mtime(aclocal.m4) <= mtime(Makefile.in). On some platforms, passing multiple
@@ -45,11 +53,17 @@ Removes references to bundled libuv.
 -# use "-r aclocal.m4" to ensure that all three files are guaranteed to have
 -# precisely the same timestamp value.
 -libuv/Makefile: libuv/m4/lt~obsolete.m4
--	(cd libuv \
--		&& touch aclocal.m4 \
--		&& touch -r aclocal.m4 configure Makefile.in \
--		&& chmod +x configure \
--		&& CC="$(CC)" CFLAGS="$(CFLAGS) $(CPICFLAGS) $(C_VISIBILITY)" AR="$(AR)" RANLIB="$(RANLIB)" LDFLAGS="$(LDFLAGS)" ./configure $(CONFIGURE_FLAGS))
+-	cd libuv; \
+-	if ! command -v automake >/dev/null 2>&1 ; then \
+-		echo "automake not found. Touching files so configure will not try to run automake."; \
+-		touch aclocal.m4; \
+-		touch -r aclocal.m4 configure Makefile.in; \
+-	else \
+-		echo "automake found. Running autogen.sh."; \
+-		sh autogen.sh; \
+-	fi; \
+-	chmod +x configure; \
+-	CC="$(CC)" CFLAGS="$(CFLAGS) $(CPICFLAGS) $(C_VISIBILITY)" AR="$(AR)" RANLIB="$(RANLIB)" LDFLAGS="$(LDFLAGS)" ./configure $(CONFIGURE_FLAGS)
 -
 -libuv/.libs/libuv.a: libuv/Makefile
 -	$(MAKE) --directory=libuv \
diff --git a/gnu/packages/patches/racket-minimal-backport-1629887.patch b/gnu/packages/patches/racket-minimal-backport-1629887.patch
deleted file mode 100644
index aa060ef5aa..0000000000
--- a/gnu/packages/patches/racket-minimal-backport-1629887.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From fb1a6ab205fd63a46669a463931af473e2ac0c87 Mon Sep 17 00:00:00 2001
-From: Matthew Flatt <mflatt@racket-lang.org>
-Date: Sat, 21 Aug 2021 15:29:59 -0600
-Subject: [PATCH] setup/variant: recognize starter executables
-
-Related to #3969
-
-(cherry picked from commit 1629887071fe3cc8fe8af0a7aa0d3912509cb058)
----
- racket/collects/setup/variant.rkt | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/racket/collects/setup/variant.rkt b/racket/collects/setup/variant.rkt
-index 81da6f5701..b23131e481 100644
---- a/racket/collects/setup/variant.rkt
-+++ b/racket/collects/setup/variant.rkt
-@@ -25,7 +25,7 @@
-         (and (file-exists? f)
-              (with-input-from-file f
-                (lambda ()
--                 (define m (regexp-match #rx#"bINARy tYPe:..(.)"
-+                 (define m (regexp-match #rx#"bINARy tYPe:e?..(.)"
-                                          (current-input-port)))
-                  (cond
-                    [(not m) '3m]
--- 
-2.30.2
-
diff --git a/gnu/packages/patches/ragel-char-signedness.patch b/gnu/packages/patches/ragel-char-signedness.patch
new file mode 100644
index 0000000000..b3b2bf958a
--- /dev/null
+++ b/gnu/packages/patches/ragel-char-signedness.patch
@@ -0,0 +1,42 @@
+From 2e638fccd81e96ce09841adc4b295b5ce694ea73 Mon Sep 17 00:00:00 2001
+From: Adrian Thurston <thurston@colm.net>
+Date: Sat, 6 Nov 2021 12:20:05 -0700
+Subject: [PATCH] C char type: decide signedness of char based on CHAR_MIN
+
+Previously had char fixed to signed char, this is not useful on ARM as it does
+not align with the host type. Instead, decide at runtime (or probably compile
+time) if char is signed or not.
+---
+ ragel/common.cpp | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/ragel/common.cpp b/ragel/common.cpp
+index 8e9f8ed0..55875c06 100644
+--- a/ragel/common.cpp
++++ b/ragel/common.cpp
+@@ -27,14 +27,14 @@
+ 
+ HostType hostTypesC[] =
+ {
+-	{ "char",     0,       "char",    true,   true,  false,  CHAR_MIN,  CHAR_MAX,   0, 0,              sizeof(char) },
+-	{ "unsigned", "char",  "uchar",   false,  true,  false,  0, 0,                  0,     UCHAR_MAX,  sizeof(unsigned char) },
+-	{ "short",    0,       "short",   true,   true,  false,  SHRT_MIN,  SHRT_MAX,   0, 0,              sizeof(short) },
+-	{ "unsigned", "short", "ushort",  false,  true,  false,  0, 0,                  0,     USHRT_MAX,  sizeof(unsigned short) },
+-	{ "int",      0,       "int",     true,   true,  false,  INT_MIN,   INT_MAX,    0, 0,              sizeof(int) },
+-	{ "unsigned", "int",   "uint",    false,  true,  false,  0, 0,                  0,     UINT_MAX,   sizeof(unsigned int) },
+-	{ "long",     0,       "long",    true,   true,  false,  LONG_MIN,  LONG_MAX,   0, 0,              sizeof(long) },
+-	{ "unsigned", "long",  "ulong",   false,  true,  false,  0, 0,                  0,     ULONG_MAX,  sizeof(unsigned long) }
++	{ "char",     0,       "char",    (CHAR_MIN != 0), true,  false,  SCHAR_MIN, SCHAR_MAX,  0, UCHAR_MAX, sizeof(char) },
++	{ "unsigned", "char",  "uchar",   false,           true,  false,  0, 0,                  0, UCHAR_MAX, sizeof(unsigned char) },
++	{ "short",    0,       "short",   true,            true,  false,  SHRT_MIN,  SHRT_MAX,   0, 0,         sizeof(short) },
++	{ "unsigned", "short", "ushort",  false,           true,  false,  0, 0,                  0, USHRT_MAX, sizeof(unsigned short) },
++	{ "int",      0,       "int",     true,            true,  false,  INT_MIN,   INT_MAX,    0, 0,         sizeof(int) },
++	{ "unsigned", "int",   "uint",    false,           true,  false,  0, 0,                  0, UINT_MAX,  sizeof(unsigned int) },
++	{ "long",     0,       "long",    true,            true,  false,  LONG_MIN,  LONG_MAX,   0, 0,         sizeof(long) },
++	{ "unsigned", "long",  "ulong",   false,           true,  false,  0, 0,                  0, ULONG_MAX, sizeof(unsigned long) }
+ };
+ 
+ #define S8BIT_MIN  -128
+-- 
+2.33.1
+
diff --git a/gnu/packages/patches/range-v3-build-with-gcc10.patch b/gnu/packages/patches/range-v3-build-with-gcc10.patch
new file mode 100644
index 0000000000..a5d5b33523
--- /dev/null
+++ b/gnu/packages/patches/range-v3-build-with-gcc10.patch
@@ -0,0 +1,122 @@
+From 0487cca29e352e8f16bbd91fda38e76e39a0ed28 Mon Sep 17 00:00:00 2001
+From: Louis Dionne <ldionne.2@gmail.com>
+Date: Tue, 15 Jun 2021 14:40:01 -0400
+Subject: [PATCH] Work around broken integration with latest libc++. (#1635)
+
+* Work around broken integration with latest libc++.
+
+In newer versions of libc++, the base template of std::iterator_traits
+provides a member typedef called __primary_template which is an alias
+to the std::iterator_traits specialization itself. This fix works with
+both the old version of libc++ and the new one.
+
+Fixes issue #1633.
+
+* Fix is_std_iterator_traits_specialized_v on MSVC
+
+It used to pretend that std::iterator_traits<T*> is a user-defined
+specialization, which isn't the case. This is due to MSVC's
+iterator_traits<T*> specialization not posing as the base template.
+---
+ include/std/detail/associated_types.hpp | 22 +++++++++++-----
+ test/CMakeLists.txt                     |  1 +
+ test/bug1633.cpp                        | 34 +++++++++++++++++++++++++
+ 3 files changed, 51 insertions(+), 6 deletions(-)
+ create mode 100644 test/bug1633.cpp
+
+diff --git a/include/std/detail/associated_types.hpp b/include/std/detail/associated_types.hpp
+index b642166d4..449a3f91c 100644
+--- a/include/std/detail/associated_types.hpp
++++ b/include/std/detail/associated_types.hpp
+@@ -265,11 +265,22 @@ namespace ranges
+         template<typename I>
+         char is_std_iterator_traits_specialized_impl_(void *);
+ #elif defined(_LIBCPP_VERSION)
+-        template<typename I, bool B>
+-        char (
+-            &is_std_iterator_traits_specialized_impl_(std::__iterator_traits<I, B> *))[2];
++        // In older versions of libc++, the base template inherits from std::__iterator_traits<typename, bool>.
++        template<template<typename, bool> class IteratorTraitsBase, typename I, bool B>
++        char (&libcpp_iterator_traits_base_impl(IteratorTraitsBase<I, B> *))[2];
++        template<template<typename, bool> class IteratorTraitsBase, typename I>
++        char libcpp_iterator_traits_base_impl(void *);
++
++        // In newer versions, the base template has only one template parameter and provides the
++        // __primary_template typedef which aliases the iterator_traits specialization.
++        template<template<typename> class, typename I>
++        char (&libcpp_iterator_traits_base_impl(typename std::iterator_traits<I>::__primary_template *))[2];
++        template<template<typename> class, typename I>
++        char libcpp_iterator_traits_base_impl(void *);
++
+         template<typename I>
+-        char is_std_iterator_traits_specialized_impl_(void *);
++        auto is_std_iterator_traits_specialized_impl_(std::iterator_traits<I>* traits)
++            -> decltype(libcpp_iterator_traits_base_impl<std::__iterator_traits, I>(traits));
+ #elif defined(_MSVC_STL_VERSION)
+         template<typename I>
+         char (&is_std_iterator_traits_specialized_impl_(
+@@ -287,14 +298,13 @@ namespace ranges
+         RANGES_INLINE_VAR constexpr bool is_std_iterator_traits_specialized_v =
+             1 == sizeof(is_std_iterator_traits_specialized_impl_<I>(
+                      static_cast<std::iterator_traits<I> *>(nullptr)));
+-
++#endif
+         // The standard iterator_traits<T *> specialization(s) do not count
+         // as user-specialized. This will no longer be necessary in C++20.
+         // This helps with `T volatile*` and `void *`.
+         template<typename T>
+         RANGES_INLINE_VAR constexpr bool is_std_iterator_traits_specialized_v<T *> =
+             false;
+-#endif
+     } // namespace detail
+     /// \endcond
+ } // namespace ranges
+diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
+index 889f314af..2c2b7c09c 100644
+--- a/test/CMakeLists.txt
++++ b/test/CMakeLists.txt
+@@ -19,3 +19,4 @@ rv3_add_test(test.bug474 bug474 bug474.cpp)
+ rv3_add_test(test.bug566 bug566 bug566.cpp)
+ rv3_add_test(test.bug1322 bug1322 bug1322.cpp)
+ rv3_add_test(test.bug1335 bug1335 bug1335.cpp)
++rv3_add_test(test.bug1633 bug1633 bug1633.cpp)
+diff --git a/test/bug1633.cpp b/test/bug1633.cpp
+new file mode 100644
+index 000000000..be52420ad
+--- /dev/null
++++ b/test/bug1633.cpp
+@@ -0,0 +1,34 @@
++// Range v3 library
++//
++//  Use, modification and distribution is subject to the
++//  Boost Software License, Version 1.0. (See accompanying
++//  file LICENSE_1_0.txt or copy at
++//  http://www.boost.org/LICENSE_1_0.txt)
++//
++// Project home: https://github.com/ericniebler/range-v3
++
++#include <cstddef>
++#include <iterator>
++#include <range/v3/iterator.hpp>
++
++struct X { };
++
++namespace std {
++    template<> struct iterator_traits<X> { };
++}
++
++struct Y {
++    using difference_type = std::ptrdiff_t;
++    using value_type = int;
++    using pointer = int*;
++    using reference = int&;
++    using iterator_category = std::forward_iterator_tag;
++};
++
++static_assert(ranges::detail::is_std_iterator_traits_specialized_v<X>, "");
++static_assert(!ranges::detail::is_std_iterator_traits_specialized_v<Y>, "");
++static_assert(!ranges::detail::is_std_iterator_traits_specialized_v<int*>, "");
++
++int main()
++{
++}
diff --git a/gnu/packages/patches/retroarch-LIBRETRO_DIRECTORY.patch b/gnu/packages/patches/retroarch-LIBRETRO_DIRECTORY.patch
index 30515cbe48..ffa75918b8 100644
--- a/gnu/packages/patches/retroarch-LIBRETRO_DIRECTORY.patch
+++ b/gnu/packages/patches/retroarch-LIBRETRO_DIRECTORY.patch
@@ -1,32 +1,36 @@
-From f308dc91660954ab88bb41868c0b9809592923e6 Mon Sep 17 00:00:00 2001
+From 4c02c080475c9d08dbed98dd64ecca337aa359ae Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?=E5=AE=8B=E6=96=87=E6=AD=A6?= <iyzsong@member.fsf.org>
 Date: Sat, 20 Feb 2021 20:37:39 +0800
 Subject: [PATCH] Allow set libretro_directory via environment variable
 
 ---
- retroarch.c | 9 +++++++++
- 1 file changed, 9 insertions(+)
+ retroarch.c | 13 ++++++++++++-
+ 1 file changed, 12 insertions(+), 1 deletion(-)
 
 diff --git a/retroarch.c b/retroarch.c
-index 6a88c3108e..6807c12b5b 100644
+index 8a0461c816..cbf11d8b6a 100644
 --- a/retroarch.c
 +++ b/retroarch.c
-@@ -36038,6 +36038,15 @@ static void retroarch_parse_input_and_config(
- #endif
-       config_load(&p_rarch->g_extern);
- 
+@@ -17603,7 +17603,18 @@ static bool retroarch_parse_input_and_config(
+             p_rarch->configuration_settings->bools.log_to_file,
+             p_rarch->configuration_settings->bools.log_to_file_timestamp,
+             p_rarch->configuration_settings->paths.log_dir);
+-            
++
 +   /* Override settings via environment variables */
-+   if (getenv("LIBRETRO_DIRECTORY")) {
++   {
 +      settings_t *settings = p_rarch->configuration_settings;
-+      retroarch_override_setting_set(RARCH_OVERRIDE_SETTING_LIBRETRO_DIRECTORY, NULL);
-+      configuration_set_string(settings,
-+            settings->paths.directory_libretro,
-+            getenv("LIBRETRO_DIRECTORY"));
++      char *value = getenv("LIBRETRO_DIRECTORY");
++      if (value != NULL)
++      {
++         retroarch_override_setting_set(RARCH_OVERRIDE_SETTING_LIBRETRO_DIRECTORY, NULL);
++         configuration_set_string(settings, settings->paths.directory_libretro, value);
++      }
 +   }
 +
     /* Second pass: All other arguments override the config file */
     optind = 1;
  
 -- 
-2.30.0
+2.33.0
 
diff --git a/gnu/packages/patches/rust-1.19-mrustc.patch b/gnu/packages/patches/rust-1.19-mrustc.patch
deleted file mode 100644
index 261162172e..0000000000
--- a/gnu/packages/patches/rust-1.19-mrustc.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-See https://github.com/thepowersgang/mrustc/archive/v0.8.0.tar.gz
-
---- rustc-1.19.0-src-orig/src/libcore/intrinsics.rs
-+++ rustc-1.19.0-src/src/libcore/intrinsics.rs
-@@ -678,5 +678,9 @@
-     pub fn min_align_of_val<T: ?Sized>(_: &T) -> usize;
- 
-+    /// Obtain the length of a slice pointer
-+    #[cfg(rust_compiler="mrustc")]
-+    pub fn mrustc_slice_len<T>(pointer: *const [T]) -> usize;
-+
-     /// Gets a static string slice containing the name of a type.
-     pub fn type_name<T: ?Sized>() -> &'static str;
-
---- rustc-1.19.0-src-orig/src/libcore/slice/mod.rs
-+++ rustc-1.19.0-src/src/libcore/slice/mod.rs
-@@ -413,6 +413,8 @@
-     #[inline]
-     fn len(&self) -> usize {
--        unsafe {
--            mem::transmute::<&[T], Repr<T>>(self).len
--        }
-+        #[cfg(not(rust_compiler="mrustc"))]
-+        let rv = unsafe { mem::transmute::<&[T], Repr<T>>(self).len };
-+        #[cfg(rust_compiler="mrustc")]
-+        let rv = unsafe { ::intrinsics::mrustc_slice_len(self) };
-+        rv
-     }
diff --git a/gnu/packages/patches/rust-1.25-accept-more-detailed-gdb-lines.patch b/gnu/packages/patches/rust-1.25-accept-more-detailed-gdb-lines.patch
deleted file mode 100644
index a2bad55117..0000000000
--- a/gnu/packages/patches/rust-1.25-accept-more-detailed-gdb-lines.patch
+++ /dev/null
@@ -1,111 +0,0 @@
-GDB responds with some overly detailed lines - which makes the tests fail.
-Patch rust to accept those instead.
-See <https://github.com/rust-lang/rust/issues/54178>.
-diff -ur orig/rustc-1.25.0-src/src/test/debuginfo/generic-enum-with-different-disr-sizes.rs rustc-1.25.0-src/src/test/debuginfo/generic-enum-with-different-disr-sizes.rs
---- orig/rustc-1.25.0-src/src/test/debuginfo/generic-enum-with-different-disr-sizes.rs	2018-09-13 10:24:33.775565159 +0200
-+++ rustc-1.25.0-src/src/test/debuginfo/generic-enum-with-different-disr-sizes.rs	2018-09-13 10:25:56.322513658 +0200
-@@ -19,36 +19,36 @@
- 
- // gdb-command:print eight_bytes1
- // gdbg-check:$1 = {{RUST$ENUM$DISR = Variant1, __0 = 100}, {RUST$ENUM$DISR = Variant1, __0 = 100}}
--// gdbr-check:$1 = generic_enum_with_different_disr_sizes::Enum::Variant1(100)
-+// gdbr-check:$1 = generic_enum_with_different_disr_sizes::Enum<f64>::Variant1(100)
- 
- // gdb-command:print four_bytes1
- // gdbg-check:$2 = {{RUST$ENUM$DISR = Variant1, __0 = 101}, {RUST$ENUM$DISR = Variant1, __0 = 101}}
--// gdbr-check:$2 = generic_enum_with_different_disr_sizes::Enum::Variant1(101)
-+// gdbr-check:$2 = generic_enum_with_different_disr_sizes::Enum<i32>::Variant1(101)
- 
- // gdb-command:print two_bytes1
- // gdbg-check:$3 = {{RUST$ENUM$DISR = Variant1, __0 = 102}, {RUST$ENUM$DISR = Variant1, __0 = 102}}
--// gdbr-check:$3 = generic_enum_with_different_disr_sizes::Enum::Variant1(102)
-+// gdbr-check:$3 = generic_enum_with_different_disr_sizes::Enum<i16>::Variant1(102)
- 
- // gdb-command:print one_byte1
- // gdbg-check:$4 = {{RUST$ENUM$DISR = Variant1, __0 = 65 'A'}, {RUST$ENUM$DISR = Variant1, __0 = 65 'A'}}
--// gdbr-check:$4 = generic_enum_with_different_disr_sizes::Enum::Variant1(65)
-+// gdbr-check:$4 = generic_enum_with_different_disr_sizes::Enum<u8>::Variant1(65)
- 
- 
- // gdb-command:print eight_bytes2
- // gdbg-check:$5 = {{RUST$ENUM$DISR = Variant2, __0 = 100}, {RUST$ENUM$DISR = Variant2, __0 = 100}}
--// gdbr-check:$5 = generic_enum_with_different_disr_sizes::Enum::Variant2(100)
-+// gdbr-check:$5 = generic_enum_with_different_disr_sizes::Enum<f64>::Variant2(100)
- 
- // gdb-command:print four_bytes2
- // gdbg-check:$6 = {{RUST$ENUM$DISR = Variant2, __0 = 101}, {RUST$ENUM$DISR = Variant2, __0 = 101}}
--// gdbr-check:$6 = generic_enum_with_different_disr_sizes::Enum::Variant2(101)
-+// gdbr-check:$6 = generic_enum_with_different_disr_sizes::Enum<i32>::Variant2(101)
- 
- // gdb-command:print two_bytes2
- // gdbg-check:$7 = {{RUST$ENUM$DISR = Variant2, __0 = 102}, {RUST$ENUM$DISR = Variant2, __0 = 102}}
--// gdbr-check:$7 = generic_enum_with_different_disr_sizes::Enum::Variant2(102)
-+// gdbr-check:$7 = generic_enum_with_different_disr_sizes::Enum<i16>::Variant2(102)
- 
- // gdb-command:print one_byte2
- // gdbg-check:$8 = {{RUST$ENUM$DISR = Variant2, __0 = 65 'A'}, {RUST$ENUM$DISR = Variant2, __0 = 65 'A'}}
--// gdbr-check:$8 = generic_enum_with_different_disr_sizes::Enum::Variant2(65)
-+// gdbr-check:$8 = generic_enum_with_different_disr_sizes::Enum<u8>::Variant2(65)
- 
- // gdb-command:continue
- 
-diff -ur orig/rustc-1.25.0-src/src/test/debuginfo/generic-struct-style-enum.rs rustc-1.25.0-src/src/test/debuginfo/generic-struct-style-enum.rs
---- orig/rustc-1.25.0-src/src/test/debuginfo/generic-struct-style-enum.rs	2018-09-13 10:24:33.775565159 +0200
-+++ rustc-1.25.0-src/src/test/debuginfo/generic-struct-style-enum.rs	2018-09-13 10:27:43.353108111 +0200
-@@ -19,15 +19,15 @@
- 
- // gdb-command:print case1
- // gdbg-check:$1 = {{RUST$ENUM$DISR = Case1, a = 0, b = 31868, c = 31868, d = 31868, e = 31868}, {RUST$ENUM$DISR = Case1, [...]}, {RUST$ENUM$DISR = Case1, [...]}}
--// gdbr-check:$1 = generic_struct_style_enum::Regular::Case1{a: 0, b: 31868, c: 31868, d: 31868, e: 31868}
-+// gdbr-check:$1 = generic_struct_style_enum::Regular<u16, u32, i64>::Case1{a: 0, b: 31868, c: 31868, d: 31868, e: 31868}
- 
- // gdb-command:print case2
- // gdbg-check:$2 = {{RUST$ENUM$DISR = Case2, [...]}, {RUST$ENUM$DISR = Case2, a = 0, b = 286331153, c = 286331153}, {RUST$ENUM$DISR = Case2, [...]}}
--// gdbr-check:$2 = generic_struct_style_enum::Regular::Case2{a: 0, b: 286331153, c: 286331153}
-+// gdbr-check:$2 = generic_struct_style_enum::Regular<i16, u32, i64>::Case2{a: 0, b: 286331153, c: 286331153}
- 
- // gdb-command:print case3
- // gdbg-check:$3 = {{RUST$ENUM$DISR = Case3, [...]}, {RUST$ENUM$DISR = Case3, [...]}, {RUST$ENUM$DISR = Case3, a = 0, b = 6438275382588823897}}
--// gdbr-check:$3 = generic_struct_style_enum::Regular::Case3{a: 0, b: 6438275382588823897}
-+// gdbr-check:$3 = generic_struct_style_enum::Regular<u16, i32, u64>::Case3{a: 0, b: 6438275382588823897}
- 
- // gdb-command:print univariant
- // gdbg-check:$4 = {{a = -1}}
-diff -ur orig/rustc-1.25.0-src/src/test/debuginfo/generic-tuple-style-enum.rs rustc-1.25.0-src/src/test/debuginfo/generic-tuple-style-enum.rs
---- orig/rustc-1.25.0-src/src/test/debuginfo/generic-tuple-style-enum.rs	2018-09-13 10:24:33.775565159 +0200
-+++ rustc-1.25.0-src/src/test/debuginfo/generic-tuple-style-enum.rs	2018-09-13 10:28:26.328546298 +0200
-@@ -21,15 +21,15 @@
- 
- // gdb-command:print case1
- // gdbg-check:$1 = {{RUST$ENUM$DISR = Case1, __0 = 0, __1 = 31868, __2 = 31868, __3 = 31868, __4 = 31868}, {RUST$ENUM$DISR = Case1, [...]}, {RUST$ENUM$DISR = Case1, [...]}}
--// gdbr-check:$1 = generic_tuple_style_enum::Regular::Case1(0, 31868, 31868, 31868, 31868)
-+// gdbr-check:$1 = generic_tuple_style_enum::Regular<u16, u32, u64>::Case1(0, 31868, 31868, 31868, 31868)
- 
- // gdb-command:print case2
- // gdbg-check:$2 = {{RUST$ENUM$DISR = Case2, [...]}, {RUST$ENUM$DISR = Case2, __0 = 0, __1 = 286331153, __2 = 286331153}, {RUST$ENUM$DISR = Case2, [...]}}
--// gdbr-check:$2 = generic_tuple_style_enum::Regular::Case2(0, 286331153, 286331153)
-+// gdbr-check:$2 = generic_tuple_style_enum::Regular<i16, i32, i64>::Case2(0, 286331153, 286331153)
- 
- // gdb-command:print case3
- // gdbg-check:$3 = {{RUST$ENUM$DISR = Case3, [...]}, {RUST$ENUM$DISR = Case3, [...]}, {RUST$ENUM$DISR = Case3, __0 = 0, __1 = 6438275382588823897}}
--// gdbr-check:$3 = generic_tuple_style_enum::Regular::Case3(0, 6438275382588823897)
-+// gdbr-check:$3 = generic_tuple_style_enum::Regular<i16, i32, i64>::Case3(0, 6438275382588823897)
- 
- // gdb-command:print univariant
- // gdbg-check:$4 = {{__0 = -1}}
---- orig/rustc-1.25.0-src/src/test/debuginfo/nil-enum.rs	2018-09-13 10:24:33.783565071 +0200
-+++ rustc-1.25.0-src/src/test/debuginfo/nil-enum.rs	2018-10-26 18:19:20.404564587 +0200
-@@ -17,11 +17,11 @@
- 
- // gdb-command:print first
- // gdbg-check:$1 = {<No data fields>}
--// gdbr-check:$1 = <error reading variable>
-+// gdbr-check:$1 = nil_enum::ANilEnum
- 
- // gdb-command:print second
- // gdbg-check:$2 = {<No data fields>}
--// gdbr-check:$2 = <error reading variable>
-+// gdbr-check:$2 = nil_enum::AnotherNilEnum
- 
- #![allow(unused_variables)]
- #![feature(omit_gdb_pretty_printer_section)]
diff --git a/gnu/packages/patches/rust-1.30-gdb-llvm.patch b/gnu/packages/patches/rust-1.30-gdb-llvm.patch
deleted file mode 100644
index e8f0acc8b4..0000000000
--- a/gnu/packages/patches/rust-1.30-gdb-llvm.patch
+++ /dev/null
@@ -1,89 +0,0 @@
-Tweak some gdb tests which were broken during LLVM upgrades.
-This has been subsequently fixed upstream in later rustc versions,
-but still needed to bootstrap some earlier versions of the compiler.
-
-diff -r -u rustc-1.30.1-src-orig/src/test/debuginfo/borrowed-c-style-enum.rs rustc-1.30.1-src/src/test/debuginfo/borrowed-c-style-enum.rs
---- rustc-1.30.1-src-orig/src/test/debuginfo/borrowed-c-style-enum.rs	2019-02-04 12:49:34.055483896 -0800
-+++ rustc-1.30.1-src/src/test/debuginfo/borrowed-c-style-enum.rs	2019-02-04 13:01:10.915950356 -0800
-@@ -18,15 +18,15 @@
- 
- // gdb-command:print *the_a_ref
- // gdbg-check:$1 = TheA
--// gdbr-check:$1 = borrowed_c_style_enum::ABC::TheA
-+// gdbr-check:$1 = borrowed_c_style_enum::TheA
- 
- // gdb-command:print *the_b_ref
- // gdbg-check:$2 = TheB
--// gdbr-check:$2 = borrowed_c_style_enum::ABC::TheB
-+// gdbr-check:$2 = borrowed_c_style_enum::TheB
- 
- // gdb-command:print *the_c_ref
- // gdbg-check:$3 = TheC
--// gdbr-check:$3 = borrowed_c_style_enum::ABC::TheC
-+// gdbr-check:$3 = borrowed_c_style_enum::TheC
- 
- 
- // === LLDB TESTS ==================================================================================
-diff -r -u rustc-1.30.1-src-orig/src/test/debuginfo/c-style-enum-in-composite.rs rustc-1.30.1-src/src/test/debuginfo/c-style-enum-in-composite.rs
---- rustc-1.30.1-src-orig/src/test/debuginfo/c-style-enum-in-composite.rs	2019-02-04 12:49:34.051483727 -0800
-+++ rustc-1.30.1-src/src/test/debuginfo/c-style-enum-in-composite.rs	2019-02-04 13:02:00.981997525 -0800
-@@ -19,31 +19,31 @@
- 
- // gdb-command:print tuple_interior_padding
- // gdbg-check:$1 = {__0 = 0, __1 = OneHundred}
--// gdbr-check:$1 = (0, c_style_enum_in_composite::AnEnum::OneHundred)
-+// gdbr-check:$1 = (0, c_style_enum_in_composite::OneHundred)
- 
- // gdb-command:print tuple_padding_at_end
- // gdbg-check:$2 = {__0 = {__0 = 1, __1 = OneThousand}, __1 = 2}
--// gdbr-check:$2 = ((1, c_style_enum_in_composite::AnEnum::OneThousand), 2)
-+// gdbr-check:$2 = ((1, c_style_enum_in_composite::OneThousand), 2)
- 
- // gdb-command:print tuple_different_enums
- // gdbg-check:$3 = {__0 = OneThousand, __1 = MountainView, __2 = OneMillion, __3 = Vienna}
--// gdbr-check:$3 = (c_style_enum_in_composite::AnEnum::OneThousand, c_style_enum_in_composite::AnotherEnum::MountainView, c_style_enum_in_composite::AnEnum::OneMillion, c_style_enum_in_composite::AnotherEnum::Vienna)
-+// gdbr-check:$3 = (c_style_enum_in_composite::OneThousand, c_style_enum_in_composite::MountainView, c_style_enum_in_composite::OneMillion, c_style_enum_in_composite::Vienna)
- 
- // gdb-command:print padded_struct
- // gdbg-check:$4 = {a = 3, b = OneMillion, c = 4, d = Toronto, e = 5}
--// gdbr-check:$4 = c_style_enum_in_composite::PaddedStruct {a: 3, b: c_style_enum_in_composite::AnEnum::OneMillion, c: 4, d: c_style_enum_in_composite::AnotherEnum::Toronto, e: 5}
-+// gdbr-check:$4 = c_style_enum_in_composite::PaddedStruct {a: 3, b: c_style_enum_in_composite::OneMillion, c: 4, d: c_style_enum_in_composite::Toronto, e: 5}
- 
- // gdb-command:print packed_struct
- // gdbg-check:$5 = {a = 6, b = OneHundred, c = 7, d = Vienna, e = 8}
--// gdbr-check:$5 = c_style_enum_in_composite::PackedStruct {a: 6, b: c_style_enum_in_composite::AnEnum::OneHundred, c: 7, d: c_style_enum_in_composite::AnotherEnum::Vienna, e: 8}
-+// gdbr-check:$5 = c_style_enum_in_composite::PackedStruct {a: 6, b: c_style_enum_in_composite::OneHundred, c: 7, d: c_style_enum_in_composite::Vienna, e: 8}
- 
- // gdb-command:print non_padded_struct
- // gdbg-check:$6 = {a = OneMillion, b = MountainView, c = OneThousand, d = Toronto}
--// gdbr-check:$6 = c_style_enum_in_composite::NonPaddedStruct {a: c_style_enum_in_composite::AnEnum::OneMillion, b: c_style_enum_in_composite::AnotherEnum::MountainView, c: c_style_enum_in_composite::AnEnum::OneThousand, d: c_style_enum_in_composite::AnotherEnum::Toronto}
-+// gdbr-check:$6 = c_style_enum_in_composite::NonPaddedStruct {a: c_style_enum_in_composite::OneMillion, b: c_style_enum_in_composite::MountainView, c: c_style_enum_in_composite::OneThousand, d: c_style_enum_in_composite::Toronto}
- 
- // gdb-command:print struct_with_drop
- // gdbg-check:$7 = {__0 = {a = OneHundred, b = Vienna}, __1 = 9}
--// gdbr-check:$7 = (c_style_enum_in_composite::StructWithDrop {a: c_style_enum_in_composite::AnEnum::OneHundred, b: c_style_enum_in_composite::AnotherEnum::Vienna}, 9)
-+// gdbr-check:$7 = (c_style_enum_in_composite::StructWithDrop {a: c_style_enum_in_composite::OneHundred, b: c_style_enum_in_composite::Vienna}, 9)
- 
- // === LLDB TESTS ==================================================================================
- 
-diff -r -u rustc-1.30.1-src-orig/src/test/debuginfo/gdb-pretty-struct-and-enums-pre-gdb-7-7.rs rustc-1.30.1-src/src/test/debuginfo/gdb-pretty-struct-and-enums-pre-gdb-7-7.rs
---- rustc-1.30.1-src-orig/src/test/debuginfo/gdb-pretty-struct-and-enums-pre-gdb-7-7.rs	2019-02-04 12:49:34.043483393 -0800
-+++ rustc-1.30.1-src/src/test/debuginfo/gdb-pretty-struct-and-enums-pre-gdb-7-7.rs	2019-02-04 13:02:17.954691634 -0800
-@@ -27,15 +27,15 @@
- 
- // gdb-command: print c_style_enum1
- // gdbg-check:$3 = CStyleEnumVar1
--// gdbr-check:$3 = gdb_pretty_struct_and_enums_pre_gdb_7_7::CStyleEnum::CStyleEnumVar1
-+// gdbr-check:$3 = gdb_pretty_struct_and_enums_pre_gdb_7_7::CStyleEnumVar1
- 
- // gdb-command: print c_style_enum2
- // gdbg-check:$4 = CStyleEnumVar2
--// gdbr-check:$4 = gdb_pretty_struct_and_enums_pre_gdb_7_7::CStyleEnum::CStyleEnumVar2
-+// gdbr-check:$4 = gdb_pretty_struct_and_enums_pre_gdb_7_7::CStyleEnumVar2
- 
- // gdb-command: print c_style_enum3
- // gdbg-check:$5 = CStyleEnumVar3
--// gdbr-check:$5 = gdb_pretty_struct_and_enums_pre_gdb_7_7::CStyleEnum::CStyleEnumVar3
-+// gdbr-check:$5 = gdb_pretty_struct_and_enums_pre_gdb_7_7::CStyleEnumVar3
- 
- #![allow(dead_code, unused_variables)]
diff --git a/gnu/packages/patches/rust-1.45-linker-locale.patch b/gnu/packages/patches/rust-1.45-linker-locale.patch
deleted file mode 100644
index 40220e8e77..0000000000
--- a/gnu/packages/patches/rust-1.45-linker-locale.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-Patch will be included upstream in 1.47: https://github.com/rust-lang/rust/pull/74416
-diff --git a/src/librustc_codegen_ssa/back/linker.rs b/src/librustc_codegen_ssa/back/linker.rs
-index e64aafa599f..12575ac4358 100644
---- a/src/librustc_codegen_ssa/back/linker.rs
-+++ b/src/librustc_codegen_ssa/back/linker.rs
-@@ -28,7 +28,7 @@ use rustc_target::spec::{LinkOutputKind, LinkerFlavor, LldFlavor};
- pub fn disable_localization(linker: &mut Command) {
-     // No harm in setting both env vars simultaneously.
-     // Unix-style linkers.
--    linker.env("LC_ALL", "C");
-+    linker.env("LC_ALL", "en_US.UTF-8");
-     // MSVC's `link.exe`.
-     linker.env("VSLANG", "1033");
- }
diff --git a/gnu/packages/patches/rust-1.48-linker-locale.patch b/gnu/packages/patches/rust-1.48-linker-locale.patch
deleted file mode 100644
index d06dcbe682..0000000000
--- a/gnu/packages/patches/rust-1.48-linker-locale.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-https://github.com/rust-lang/rust/pull/74416
-diff --git a/compiler/rustc_codegen_ssa/src/back/linker.rs b/compiler/rustc_codegen_ssa/src/back/linker.rs
-index 3df956c465e..f45fee45be4 100644
---- a/compiler/rustc_codegen_ssa/src/back/linker.rs
-+++ b/compiler/rustc_codegen_ssa/src/back/linker.rs
-@@ -28,7 +28,7 @@
- pub fn disable_localization(linker: &mut Command) {
-     // No harm in setting both env vars simultaneously.
-     // Unix-style linkers.
--    linker.env("LC_ALL", "C");
-+    linker.env("LC_ALL", "en_US.UTF-8");
-     // MSVC's `link.exe`.
-     linker.env("VSLANG", "1033");
- }
diff --git a/gnu/packages/patches/rust-adblock-ignore-live-tests.patch b/gnu/packages/patches/rust-adblock-ignore-live-tests.patch
new file mode 100644
index 0000000000..fc7f2858ff
--- /dev/null
+++ b/gnu/packages/patches/rust-adblock-ignore-live-tests.patch
@@ -0,0 +1,69 @@
+From b83b5b453d3f7883ef4c12f84a7045486957c709 Mon Sep 17 00:00:00 2001
+From: Petr Hodina <phodina@protonmail.com>
+Date: Tue, 9 Nov 2021 17:02:54 +0100
+Subject: [PATCH] Ignore live tests.
+
+
+diff --git a/tests/live.rs b/tests/live.rs
+index b1a19fc..6bd4685 100644
+--- a/tests/live.rs
++++ b/tests/live.rs
+@@ -140,6 +140,7 @@ fn get_blocker_engine_deserialized_ios() -> Engine {
+ }
+
+ #[test]
++#[ignore]
+ fn check_live_specific_urls() {
+     let mut engine = get_blocker_engine();
+     {
+@@ -176,6 +177,7 @@ fn check_live_specific_urls() {
+ }
+
+ #[test]
++#[ignore]
+ fn check_live_deserialized_specific_urls() {
+     let mut engine = get_blocker_engine_deserialized();
+     {
+@@ -201,6 +203,7 @@ fn check_live_deserialized_specific_urls() {
+ }
+
+ #[test]
++#[ignore]
+ fn check_live_from_filterlists() {
+     let engine = get_blocker_engine();
+     let requests = load_requests();
+@@ -214,6 +217,7 @@ fn check_live_from_filterlists() {
+ }
+
+ #[test]
++#[ignore]
+ fn check_live_deserialized_file() {
+     let engine = get_blocker_engine_deserialized();
+     let requests = load_requests();
+@@ -243,6 +247,7 @@ fn check_live_deserialized_ios() {
+
+ #[cfg(feature = "resource_assembler")]
+ #[test]
++#[ignore]
+ fn check_live_redirects() {
+     use adblock::resources::resource_assembler::assemble_web_accessible_resources;
+
+@@ -278,6 +283,7 @@ fn check_live_redirects() {
+ }
+
+ #[test]
++#[ignore]
+ /// Ensure that two different engines loaded from the same textual filter set serialize to
+ /// identical buffers.
+ fn stable_serialization() {
+@@ -291,6 +297,7 @@ fn stable_serialization() {
+ }
+
+ #[test]
++#[ignore]
+ /// Ensure that one engine's serialization result can be exactly reproduced by another engine after
+ /// deserializing from it.
+ fn stable_serialization_through_load() {
+--
+2.33.1
+
diff --git a/gnu/packages/patches/rust-bootstrap-stage0-test.patch b/gnu/packages/patches/rust-bootstrap-stage0-test.patch
deleted file mode 100644
index e8484903e5..0000000000
--- a/gnu/packages/patches/rust-bootstrap-stage0-test.patch
+++ /dev/null
@@ -1,55 +0,0 @@
-Bootstrap tests failed with local stage0 cargo and rustc
-Backported changes from https://github.com/rust-lang/rust/pull/51977
-
-From 0834d9d771e912f51deca6c25699e44734624546 Mon Sep 17 00:00:00 2001
-From: Nikolai Merinov <nikolai.merinov@member.fsf.org>
-Date: Mon, 2 Jul 2018 01:45:35 +0500
-Subject: [PATCH] bootstrap: tests should use rustc from config.toml
-
-Tests should always use "rustc" and "cargo" from config.toml instead
-of assuming that stage0 binaries was downloaded to build directory.
----
- src/bootstrap/bootstrap.py | 2 ++
- src/bootstrap/config.rs    | 6 ++----
- 2 files changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/src/bootstrap/bootstrap.py b/src/bootstrap/bootstrap.py
-index 487440becf..1701f7b83a 100644
---- a/src/bootstrap/bootstrap.py
-+++ b/src/bootstrap/bootstrap.py
-@@ -788,6 +788,8 @@ def bootstrap(help_triggered):
-     env["BOOTSTRAP_PARENT_ID"] = str(os.getpid())
-     env["BOOTSTRAP_PYTHON"] = sys.executable
-     env["BUILD_DIR"] = build.build_dir
-+    env["CARGO"] = build.cargo()
-+    env["RUSTC"] = build.rustc()
-     run(args, env=env, verbose=build.verbose)
- 
- 
-diff --git a/src/bootstrap/config.rs b/src/bootstrap/config.rs
-index 6dd6291be2..d1a0deb583 100644
---- a/src/bootstrap/config.rs
-+++ b/src/bootstrap/config.rs
-@@ -23,7 +23,6 @@ use std::cmp;
- 
- use num_cpus;
- use toml;
--use util::exe;
- use cache::{INTERNER, Interned};
- use flags::Flags;
- pub use flags::Subcommand;
-@@ -362,9 +361,8 @@ impl Config {
-         config.src = Config::path_from_python("SRC");
-         config.out = Config::path_from_python("BUILD_DIR");
- 
--        let stage0_root = config.out.join(&config.build).join("stage0/bin");
--        config.initial_rustc = stage0_root.join(exe("rustc", &config.build));
--        config.initial_cargo = stage0_root.join(exe("cargo", &config.build));
-+        config.initial_rustc = Config::path_from_python("RUSTC");
-+        config.initial_cargo = Config::path_from_python("CARGO");
- 
-         config
-     }
--- 
-2.17.1
-
diff --git a/gnu/packages/patches/rust-openssl-sys-no-vendor.patch b/gnu/packages/patches/rust-openssl-sys-no-vendor.patch
index 78a6b5e3f7..9855faf8b2 100644
--- a/gnu/packages/patches/rust-openssl-sys-no-vendor.patch
+++ b/gnu/packages/patches/rust-openssl-sys-no-vendor.patch
@@ -2,6 +2,8 @@ https://sources.debian.org/data/main/r/rust-openssl-sys/0.9.53-1/debian/patches/
 "MIT" licensed according to debian/copyright file
 slightly modified to only change the vendored openssl-src dependency
 
+Starting from rust-openssl-sys@0.9.69 Cargo.toml starts searching for openssl-3.0.
+
 --- a/Cargo.toml
 +++ b/Cargo.toml
 @@ -31,14 +31,11 @@
diff --git a/gnu/packages/patches/rust-reproducible-builds.patch b/gnu/packages/patches/rust-reproducible-builds.patch
deleted file mode 100644
index ef7bf53b5d..0000000000
--- a/gnu/packages/patches/rust-reproducible-builds.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From b9ca108fcae2b738ca3f0c88c84ae5dc5a6f843f Mon Sep 17 00:00:00 2001
-From: Tim Ryan <id@timryan.org>
-Date: Mon, 14 May 2018 06:22:21 -0400
-Subject: [PATCH] Support reproducible builds by forcing window.search to use
- stable key ordering. (#692)
-See <https://github.com/rust-lang-nursery/mdBook/pull/692>
----
- src/vendor/mdbook/src/renderer/html_handlebars/search.rs | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/src/vendor/mdbook/src/renderer/html_handlebars/search.rs b/src/vendor/mdbook/src/renderer/html_handlebars/search.rs
-index d49772f8b..1ee66a511 100644
---- a/src/vendor/mdbook/src/renderer/html_handlebars/search.rs
-+++ b/src/vendor/mdbook/src/renderer/html_handlebars/search.rs
-@@ -205,6 +205,10 @@ fn write_to_js(index: Index, search_config: &Search) -> Result<String> {
-         searchoptions,
-         index,
-     };
-+
-+    // By converting to serde_json::Value as an intermediary, we use a
-+    // BTreeMap internally and can force a stable ordering of map keys.
-+    let json_contents = serde_json::to_value(&json_contents)?;
-     let json_contents = serde_json::to_string(&json_contents)?;
- 
-     Ok(format!("window.search = {};", json_contents))
diff --git a/gnu/packages/patches/rust-shell2batch-lint-fix.patch b/gnu/packages/patches/rust-shell2batch-lint-fix.patch
new file mode 100644
index 0000000000..7c160b6cca
--- /dev/null
+++ b/gnu/packages/patches/rust-shell2batch-lint-fix.patch
@@ -0,0 +1,25 @@
+Resolves the following error that was most likely introduced in new version of
+rust as this package is from 2019:
+
+error: unnecessary parentheses around type
+   --> src/converter.rs:108:61
+    |
+108 | fn add_arguments(arguments: &str, additional_arguments: Vec<(String)>, pre: bool) -> String {
+    |                                                             ^^^^^^^^ help: remove these parentheses
+
+Reported upstream at https://github.com/sagiegurari/shell2batch/issues/17.
+
+diff --git a/src/converter.rs b/src/converter.rs
+index fc87d68..af309d2 100644
+--- a/src/converter.rs
++++ b/src/converter.rs
+@@ -105,7 +105,7 @@ fn replace_vars(arguments: &str) -> String {
+     updated_arguments
+ }
+ 
+-fn add_arguments(arguments: &str, additional_arguments: Vec<(String)>, pre: bool) -> String {
++fn add_arguments(arguments: &str, additional_arguments: Vec<String>, pre: bool) -> String {
+     let mut windows_arguments = if pre {
+         "".to_string()
+     } else {
+
diff --git a/gnu/packages/patches/rust-wl-clipboard-rs-newer-wl.patch b/gnu/packages/patches/rust-wl-clipboard-rs-newer-wl.patch
new file mode 100644
index 0000000000..9fb692e9a6
--- /dev/null
+++ b/gnu/packages/patches/rust-wl-clipboard-rs-newer-wl.patch
@@ -0,0 +1,26 @@
+diff --git a/Cargo.toml b/Cargo.toml
+index 7b975e0..313cb63 100644
+--- a/Cargo.toml
++++ b/Cargo.toml.new
+@@ -75,17 +75,17 @@ version = "3"
+ version = "0.2"
+ 
+ [dependencies.wayland-client]
+-version = "0.27"
++version = "0.28"
+ 
+ [dependencies.wayland-protocols]
+-version = "0.27"
++version = "0.28"
+ features = ["client", "unstable_protocols"]
+ [dev-dependencies.wayland-protocols]
+-version = "0.27"
++version = "0.28"
+ features = ["server", "unstable_protocols"]
+ 
+ [dev-dependencies.wayland-server]
+-version = "0.27"
++version = "0.28"
+ 
+ [features]
+ dlopen = ["native_lib", "wayland-client/dlopen", "wayland-server/dlopen"]
diff --git a/gnu/packages/patches/rustc-1.39.0-src.patch b/gnu/packages/patches/rustc-1.39.0-src.patch
new file mode 100644
index 0000000000..7859bd44d5
--- /dev/null
+++ b/gnu/packages/patches/rustc-1.39.0-src.patch
@@ -0,0 +1,99 @@
+# This modified patch is to disable the hunk applying to LLVM, unbundled in Guix.
+
+# Add mrustc slice length intrinsics
+--- src/libcore/intrinsics.rs
++++ src/libcore/intrinsics.rs
+@@ -685,4 +685,8 @@
+     pub fn min_align_of_val<T: ?Sized>(_: &T) -> usize;
+ 
++    /// Obtain the length of a slice pointer
++    #[cfg(rust_compiler="mrustc")]
++    pub fn mrustc_slice_len<T>(pointer: *const [T]) -> usize;
++
+     /// Gets a static string slice containing the name of a type.
+     pub fn type_name<T: ?Sized>() -> &'static str;
+
+--- src/libcore/slice/mod.rs
++++ src/libcore/slice/mod.rs
+@@ -68,5 +68,8 @@
+     pub const fn len(&self) -> usize {
+-        unsafe {
+-            crate::ptr::Repr { rust: self }.raw.len
+-        }
++        #[cfg(not(rust_compiler="mrustc"))]
++        #[cfg_attr(not(bootstrap), allow_internal_unstable(const_fn_union))]
++        const fn len_inner<T>(s: &[T]) -> usize { unsafe { crate::ptr::Repr { rust: s }.raw.len } };
++        #[cfg(rust_compiler="mrustc")]
++        const fn len_inner<T>(s: &[T]) -> usize { unsafe { crate::intrinsics::mrustc_slice_len(s) } }
++        len_inner(self)
+     }
+#
+# Static-link rustc_codegen_llvm so the generated rustc is standalone
+# > Note: Interacts with `rustc-1.39.0-overrides.toml`
+#
+--- src/librustc_interface/util.rs
++++ src/librustc_interface/util.rs
+@@ -421,2 +421,4 @@
+ pub fn get_codegen_sysroot(backend_name: &str) -> fn() -> Box<dyn CodegenBackend> {
++    #[cfg(rust_compiler="mrustc")]
++    { if(backend_name == "llvm") { extern "Rust" { fn __rustc_codegen_backend() -> Box<dyn CodegenBackend>; } return || unsafe { __rustc_codegen_backend() } } }
+     // For now we only allow this function to be called once as it'll dlopen a
+# Disable most architecture intrinsics
+--- src/stdarch/crates/std_detect/src/detect/mod.rs
++++ src/stdarch/crates/std_detect/src/detect/mod.rs
+@@ -74,4 +74,7 @@
+         // this run-time detection logic is never called.
+         #[path = "os/other.rs"]
+         mod os;
++    } else if #[cfg(rust_compiler="mrustc")] {
++        #[path = "os/other.rs"]
++        mod os;
+     } else if #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] {
+--- vendor/ppv-lite86/src/lib.rs
++++ vendor/ppv-lite86/src/lib.rs
+@@ -12,10 +12,10 @@
+-#[cfg(all(feature = "simd", target_arch = "x86_64", not(miri)))]
++#[cfg(all(feature = "simd", target_arch = "x86_64", not(miri), not(rust_compiler="mrustc")))]
+ pub mod x86_64;
+-#[cfg(all(feature = "simd", target_arch = "x86_64", not(miri)))]
++#[cfg(all(feature = "simd", target_arch = "x86_64", not(miri), not(rust_compiler="mrustc")))]
+ use self::x86_64 as arch;
+
+-#[cfg(any(miri, not(all(feature = "simd", any(target_arch = "x86_64")))))]
++#[cfg(any(miri, rust_compiler="mrustc", not(all(feature = "simd", any(target_arch = "x86_64")))))]
+ pub mod generic;
+-#[cfg(any(miri, not(all(feature = "simd", any(target_arch = "x86_64")))))]
++#[cfg(any(miri, rust_compiler="mrustc", not(all(feature = "simd", any(target_arch = "x86_64")))))]
+ use self::generic as arch;
+
+# diff --git a/llvm/include/llvm/Demangle/MicrosoftDemangleNodes.h b/llvm/include/llvm/Demangle/MicrosoftDemangleNodes.h
+# index da9d9d5bfdc0..3d47471f0ef0 100644
+# --- src/llvm-project/llvm/include/llvm/Demangle/MicrosoftDemangleNodes.h
+# +++ src/llvm-project/llvm/include/llvm/Demangle/MicrosoftDemangleNodes.h
+# @@ -16,6 +16,8 @@
+#  #include "llvm/Demangle/DemangleConfig.h"
+#  #include "llvm/Demangle/StringView.h"
+#  #include <array>
+# +#include <cstdint>
+# +#include <string>
+
+#  namespace llvm {
+#  namespace itanium_demangle {
+##
+## gcc (used by mrustc) has 16-byte uint128_t alignment, while rustc uses 8
+##
+#--- src/libsyntax/ast.rs
+#+++ src/libsyntax/ast.rs
+#@@ -986,2 +986,2 @@
+#-#[cfg(target_arch = "x86_64")]
+#-static_assert_size!(Expr, 96);
+#+//#[cfg(target_arch = "x86_64")]
+#+//static_assert_size!(Expr, 96);
+#--- src/librustc/ty/sty.rs
+#+++ src/librustc/ty/sty.rs
+#@@ -2258,2 +2258,2 @@
+#-#[cfg(target_arch = "x86_64")]
+#-static_assert_size!(Const<'_>, 40);
+#+//#[cfg(target_arch = "x86_64")]
+#+//static_assert_size!(Const<'_>, 40);
+
diff --git a/gnu/packages/patches/sbcl-aserve-add-HTML-5-elements.patch b/gnu/packages/patches/sbcl-aserve-add-HTML-5-elements.patch
new file mode 100644
index 0000000000..93962e10ec
--- /dev/null
+++ b/gnu/packages/patches/sbcl-aserve-add-HTML-5-elements.patch
@@ -0,0 +1,63 @@
+From 940679fb75073a59186099e3dd7fb381e727db6b Mon Sep 17 00:00:00 2001
+From: Kevin Layer <layer@franz.com>
+Date: Thu, 31 Oct 2013 04:27:29 -0700
+Subject: [PATCH 1/2] rfe12668: add HTML 5 elements to htmlgen
+
+Add the new elements listed here:
+  http://www.w3.org/TR/html5-diff/#new-elements
+
+Change-Id: I7f64363751130644caf90ecdd65c13175d77ae97
+---
+ aserve/htmlgen/htmlgen.cl | 38 ++++++++++++++++++++++++++++++++++++--
+ 1 file changed, 36 insertions(+), 2 deletions(-)
+
+diff --git a/aserve/htmlgen/htmlgen.cl b/aserve/htmlgen/htmlgen.cl
+index 59248ef..0c0d6e8 100644
+--- a/aserve/htmlgen/htmlgen.cl
++++ b/aserve/htmlgen/htmlgen.cl
+@@ -747,6 +747,40 @@
+ 
+ (def-std-html :var 	t nil)
+ 
+-(def-std-html :wbr  	nil nil)
+-
+ (def-std-html :xmp 	t nil)
++
++;; html 5
++
++(def-std-html :section		t nil)
++(def-std-html :article		t nil)
++(def-std-html :main		t nil)
++(def-std-html :aside		t nil)
++(def-std-html :hgroup		t nil)
++(def-std-html :header		t nil)
++(def-std-html :footer		t nil)
++(def-std-html :nav		t nil)
++(def-std-html :figure		t nil)
++(def-std-html :figcaption 	t nil)
++
++(def-std-html :video	 	t nil)
++(def-std-html :audio	 	t nil)
++(def-std-html :source	 	t nil)
++(def-std-html :track	 	t nil)
++(def-std-html :embed	 	t nil)
++(def-std-html :mark	 	t nil)
++(def-std-html :progress	 	t nil)
++(def-std-html :meter	 	t nil)
++(def-std-html :time	 	t nil)
++(def-std-html :data	 	t nil)
++(def-std-html :dialog	 	t nil)
++(def-std-html :ruby	 	t nil)
++(def-std-html :rt	 	t nil)
++(def-std-html :rp	 	t nil)
++(def-std-html :bdi	 	t nil)
++(def-std-html :wbr		nil nil)
++(def-std-html :canvas	 	t nil)
++(def-std-html :menuitem	 	t nil)
++(def-std-html :details	 	t nil)
++(def-std-html :datalist	 	t nil)
++(def-std-html :keygen	 	t nil)
++(def-std-html :output	 	t nil)
+-- 
+2.25.1
+
diff --git a/gnu/packages/patches/sbcl-aserve-fix-rfe12668.patch b/gnu/packages/patches/sbcl-aserve-fix-rfe12668.patch
new file mode 100644
index 0000000000..c7a8e05aae
--- /dev/null
+++ b/gnu/packages/patches/sbcl-aserve-fix-rfe12668.patch
@@ -0,0 +1,43 @@
+From 8110ebd55d5bf659cd40dab2df59d80dafdb367a Mon Sep 17 00:00:00 2001
+From: Kevin Layer <layer@franz.com>
+Date: Mon, 10 Feb 2014 11:10:42 -0800
+Subject: [PATCH 2/2] fix bugs in rfe12668 implementation
+
+The previous commit added :embed and :keygen but they were already
+there.  Resolve this issue.
+
+Change-Id: Ieb962a12880394e67d973835945005446833fab7
+---
+ aserve/htmlgen/htmlgen.cl | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+diff --git a/aserve/htmlgen/htmlgen.cl b/aserve/htmlgen/htmlgen.cl
+index 0c0d6e8..f77d6de 100644
+--- a/aserve/htmlgen/htmlgen.cl
++++ b/aserve/htmlgen/htmlgen.cl
+@@ -658,7 +658,6 @@
+ (def-std-html :dt        t nil)
+ 
+ (def-std-html :em        t nil)
+-(def-std-html :embed     t nil)
+ 
+ (def-std-html :fieldset        t nil)
+ (def-std-html :font        t nil)
+@@ -685,7 +684,6 @@
+ (def-std-html :isindex    nil nil)
+ 
+ (def-std-html :kbd  	t nil)
+-(def-std-html :keygen  	nil nil)
+ 
+ (def-std-html :label  	t nil)
+ (def-std-html :layer  	t nil)
+@@ -782,5 +780,5 @@
+ (def-std-html :menuitem	 	t nil)
+ (def-std-html :details	 	t nil)
+ (def-std-html :datalist	 	t nil)
+-(def-std-html :keygen	 	t nil)
++(def-std-html :keygen	 	nil nil)
+ (def-std-html :output	 	t nil)
+-- 
+2.25.1
+
diff --git a/gnu/packages/patches/scalapack-blacs-mpi-deprecations.patch b/gnu/packages/patches/scalapack-blacs-mpi-deprecations.patch
deleted file mode 100644
index 6ec1b8f21f..0000000000
--- a/gnu/packages/patches/scalapack-blacs-mpi-deprecations.patch
+++ /dev/null
@@ -1,170 +0,0 @@
-From f11c3f094ed5ca727ec819983425b6641db8227c Mon Sep 17 00:00:00 2001
-From: Eric Bavier <bavier@member.fsf.org>
-Date: Wed, 13 Feb 2019 09:32:11 -0600
-Subject: [PATCH] BLACS: Remove use of long-deprecated MPI1 functions.
-
-* BLACS/SRC/blacs_get_.c: 'MPI_Attr_get' -> 'MPI_Comm_get_attr'.
-* BLACS/SRC/cgamn2d_.c, BLACS/SRC/cgamx2d_.c, BLACS/SRC/dgamn2d_.c,
-BLACS/SRC/dgamx2d_.c, BLACS/SRC/igamn2d_.c, BLACS/SRC/igamx2d_.c,
-BLACS/SRC/sgamn2d_.c, BLACS/SRC/sgamx2d_.c, BLACS/SRC/zgamn2d_.c,
-BLACS/SRC/zgamx2d_.c: 'MPI_Type_struct' -> 'MPI_Type_create_struct'.
----
- BLACS/SRC/blacs_get_.c | 2 +-
- BLACS/SRC/cgamn2d_.c   | 2 +-
- BLACS/SRC/cgamx2d_.c   | 2 +-
- BLACS/SRC/dgamn2d_.c   | 2 +-
- BLACS/SRC/dgamx2d_.c   | 2 +-
- BLACS/SRC/igamn2d_.c   | 2 +-
- BLACS/SRC/igamx2d_.c   | 2 +-
- BLACS/SRC/sgamn2d_.c   | 2 +-
- BLACS/SRC/sgamx2d_.c   | 2 +-
- BLACS/SRC/zgamn2d_.c   | 2 +-
- BLACS/SRC/zgamx2d_.c   | 2 +-
- 11 files changed, 11 insertions(+), 11 deletions(-)
-
-diff --git a/BLACS/SRC/blacs_get_.c b/BLACS/SRC/blacs_get_.c
-index e979767..d4b04cf 100644
---- a/BLACS/SRC/blacs_get_.c
-+++ b/BLACS/SRC/blacs_get_.c
-@@ -23,7 +23,7 @@ F_VOID_FUNC blacs_get_(int *ConTxt, int *what, int *val)
-    case SGET_MSGIDS:
-       if (BI_COMM_WORLD == NULL) Cblacs_pinfo(val, &val[1]);
-       iptr = &val[1];
--      ierr=MPI_Attr_get(MPI_COMM_WORLD, MPI_TAG_UB, (BVOID **) &iptr,val);
-+      ierr=MPI_Comm_get_attr(MPI_COMM_WORLD, MPI_TAG_UB, (BVOID **) &iptr,val);
-       val[0] = 0;
-       val[1] = *iptr;
-       break;
-diff --git a/BLACS/SRC/cgamn2d_.c b/BLACS/SRC/cgamn2d_.c
-index 2db6ccb..6958f32 100644
---- a/BLACS/SRC/cgamn2d_.c
-+++ b/BLACS/SRC/cgamn2d_.c
-@@ -221,7 +221,7 @@ F_VOID_FUNC cgamn2d_(int *ConTxt, F_CHAR scope, F_CHAR top, int *m, int *n,
-       {
- #endif
-       i = 2;
--      ierr=MPI_Type_struct(i, len, disp, dtypes, &MyType);
-+      ierr=MPI_Type_create_struct(i, len, disp, dtypes, &MyType);
-       ierr=MPI_Type_commit(&MyType);
-       bp->N = bp2->N = 1;
-       bp->dtype = bp2->dtype = MyType;
-diff --git a/BLACS/SRC/cgamx2d_.c b/BLACS/SRC/cgamx2d_.c
-index 707c0b6..f802d01 100644
---- a/BLACS/SRC/cgamx2d_.c
-+++ b/BLACS/SRC/cgamx2d_.c
-@@ -221,7 +221,7 @@ F_VOID_FUNC cgamx2d_(int *ConTxt, F_CHAR scope, F_CHAR top, int *m, int *n,
-       {
- #endif
-       i = 2;
--      ierr=MPI_Type_struct(i, len, disp, dtypes, &MyType);
-+      ierr=MPI_Type_create_struct(i, len, disp, dtypes, &MyType);
-       ierr=MPI_Type_commit(&MyType);
-       bp->N = bp2->N = 1;
-       bp->dtype = bp2->dtype = MyType;
-diff --git a/BLACS/SRC/dgamn2d_.c b/BLACS/SRC/dgamn2d_.c
-index dff23b4..a2627ac 100644
---- a/BLACS/SRC/dgamn2d_.c
-+++ b/BLACS/SRC/dgamn2d_.c
-@@ -221,7 +221,7 @@ F_VOID_FUNC dgamn2d_(int *ConTxt, F_CHAR scope, F_CHAR top, int *m, int *n,
-       {
- #endif
-       i = 2;
--      ierr=MPI_Type_struct(i, len, disp, dtypes, &MyType);
-+      ierr=MPI_Type_create_struct(i, len, disp, dtypes, &MyType);
-       ierr=MPI_Type_commit(&MyType);
-       bp->N = bp2->N = 1;
-       bp->dtype = bp2->dtype = MyType;
-diff --git a/BLACS/SRC/dgamx2d_.c b/BLACS/SRC/dgamx2d_.c
-index a51f731..2a644d0 100644
---- a/BLACS/SRC/dgamx2d_.c
-+++ b/BLACS/SRC/dgamx2d_.c
-@@ -221,7 +221,7 @@ F_VOID_FUNC dgamx2d_(int *ConTxt, F_CHAR scope, F_CHAR top, int *m, int *n,
-       {
- #endif
-       i = 2;
--      ierr=MPI_Type_struct(i, len, disp, dtypes, &MyType);
-+      ierr=MPI_Type_create_struct(i, len, disp, dtypes, &MyType);
-       ierr=MPI_Type_commit(&MyType);
-       bp->N = bp2->N = 1;
-       bp->dtype = bp2->dtype = MyType;
-diff --git a/BLACS/SRC/igamn2d_.c b/BLACS/SRC/igamn2d_.c
-index 16bc003..f6a7859 100644
---- a/BLACS/SRC/igamn2d_.c
-+++ b/BLACS/SRC/igamn2d_.c
-@@ -218,7 +218,7 @@ F_VOID_FUNC igamn2d_(int *ConTxt, F_CHAR scope, F_CHAR top, int *m, int *n,
-       {
- #endif
-       i = 2;
--      ierr=MPI_Type_struct(i, len, disp, dtypes, &MyType);
-+      ierr=MPI_Type_create_struct(i, len, disp, dtypes, &MyType);
-       ierr=MPI_Type_commit(&MyType);
-       bp->N = bp2->N = 1;
-       bp->dtype = bp2->dtype = MyType;
-diff --git a/BLACS/SRC/igamx2d_.c b/BLACS/SRC/igamx2d_.c
-index 8165cbe..a7cfcc6 100644
---- a/BLACS/SRC/igamx2d_.c
-+++ b/BLACS/SRC/igamx2d_.c
-@@ -218,7 +218,7 @@ F_VOID_FUNC igamx2d_(int *ConTxt, F_CHAR scope, F_CHAR top, int *m, int *n,
-       {
- #endif
-       i = 2;
--      ierr=MPI_Type_struct(i, len, disp, dtypes, &MyType);
-+      ierr=MPI_Type_create_struct(i, len, disp, dtypes, &MyType);
-       ierr=MPI_Type_commit(&MyType);
-       bp->N = bp2->N = 1;
-       bp->dtype = bp2->dtype = MyType;
-diff --git a/BLACS/SRC/sgamn2d_.c b/BLACS/SRC/sgamn2d_.c
-index d6c95e5..569c797 100644
---- a/BLACS/SRC/sgamn2d_.c
-+++ b/BLACS/SRC/sgamn2d_.c
-@@ -221,7 +221,7 @@ F_VOID_FUNC sgamn2d_(int *ConTxt, F_CHAR scope, F_CHAR top, int *m, int *n,
-       {
- #endif
-       i = 2;
--      ierr=MPI_Type_struct(i, len, disp, dtypes, &MyType);
-+      ierr=MPI_Type_create_struct(i, len, disp, dtypes, &MyType);
-       ierr=MPI_Type_commit(&MyType);
-       bp->N = bp2->N = 1;
-       bp->dtype = bp2->dtype = MyType;
-diff --git a/BLACS/SRC/sgamx2d_.c b/BLACS/SRC/sgamx2d_.c
-index 4b0af6f..8897ece 100644
---- a/BLACS/SRC/sgamx2d_.c
-+++ b/BLACS/SRC/sgamx2d_.c
-@@ -221,7 +221,7 @@ F_VOID_FUNC sgamx2d_(int *ConTxt, F_CHAR scope, F_CHAR top, int *m, int *n,
-       {
- #endif
-       i = 2;
--      ierr=MPI_Type_struct(i, len, disp, dtypes, &MyType);
-+      ierr=MPI_Type_create_struct(i, len, disp, dtypes, &MyType);
-       ierr=MPI_Type_commit(&MyType);
-       bp->N = bp2->N = 1;
-       bp->dtype = bp2->dtype = MyType;
-diff --git a/BLACS/SRC/zgamn2d_.c b/BLACS/SRC/zgamn2d_.c
-index 9de2b23..37897df 100644
---- a/BLACS/SRC/zgamn2d_.c
-+++ b/BLACS/SRC/zgamn2d_.c
-@@ -221,7 +221,7 @@ F_VOID_FUNC zgamn2d_(int *ConTxt, F_CHAR scope, F_CHAR top, int *m, int *n,
-       {
- #endif
-       i = 2;
--      ierr=MPI_Type_struct(i, len, disp, dtypes, &MyType);
-+      ierr=MPI_Type_create_struct(i, len, disp, dtypes, &MyType);
-       ierr=MPI_Type_commit(&MyType);
-       bp->N = bp2->N = 1;
-       bp->dtype = bp2->dtype = MyType;
-diff --git a/BLACS/SRC/zgamx2d_.c b/BLACS/SRC/zgamx2d_.c
-index 414c381..0e9d474 100644
---- a/BLACS/SRC/zgamx2d_.c
-+++ b/BLACS/SRC/zgamx2d_.c
-@@ -221,7 +221,7 @@ F_VOID_FUNC zgamx2d_(int *ConTxt, F_CHAR scope, F_CHAR top, int *m, int *n,
-       {
- #endif
-       i = 2;
--      ierr=MPI_Type_struct(i, len, disp, dtypes, &MyType);
-+      ierr=MPI_Type_create_struct(i, len, disp, dtypes, &MyType);
-       ierr=MPI_Type_commit(&MyType);
-       bp->N = bp2->N = 1;
-       bp->dtype = bp2->dtype = MyType;
--- 
-2.20.1
-
diff --git a/gnu/packages/patches/scalapack-gcc-10-compilation.patch b/gnu/packages/patches/scalapack-gcc-10-compilation.patch
new file mode 100644
index 0000000000..cd6fb61cdf
--- /dev/null
+++ b/gnu/packages/patches/scalapack-gcc-10-compilation.patch
@@ -0,0 +1,5684 @@
+Fix Scalapack compilation with GCC 10+.
+
+Patches from <https://github.com/Reference-ScaLAPACK/scalapack/pull/26>.
+
+From 9c909f06cf51a3d00252323ce52aba46cc64ab41 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Tiziano=20M=C3=BCller?= <tiziano.mueller@chem.uzh.ch>
+Date: Thu, 25 Jun 2020 18:36:46 +0200
+Subject: [PATCH] fix argument mismatches in the SRC
+
+---
+ SRC/pclarf.f   |  80 +++++++++++++++++-----------------
+ SRC/pclarfc.f  |  88 ++++++++++++++++++-------------------
+ SRC/pclarz.f   | 111 ++++++++++++++++++++++++-----------------------
+ SRC/pclarzc.f  | 115 +++++++++++++++++++++++++------------------------
+ SRC/pclattrs.f |  55 +++++++++++------------
+ SRC/pclawil.f  |  53 +++++++++++------------
+ SRC/pctrevc.f  |  20 +++++----
+ SRC/pdhseqr.f  |  36 ++++++++--------
+ SRC/pdlacon.f  |  36 ++++++++--------
+ SRC/pdlarf.f   |  80 +++++++++++++++++-----------------
+ SRC/pdlarz.f   | 100 +++++++++++++++++++++---------------------
+ SRC/pdlawil.f  |  48 ++++++++++-----------
+ SRC/pdstebz.f  |  20 ++++-----
+ SRC/pdtrord.f  |  43 +++++++++++-------
+ SRC/pdtrsen.f  |  24 ++++++-----
+ SRC/pshseqr.f  |  36 ++++++++--------
+ SRC/pslacon.f  |  36 +++++++++-------
+ SRC/pslarf.f   |  80 +++++++++++++++++-----------------
+ SRC/pslarz.f   | 100 +++++++++++++++++++++---------------------
+ SRC/pslawil.f  |  50 +++++++++++----------
+ SRC/psstebz.f  |  20 ++++-----
+ SRC/pstrord.f  |  45 +++++++++++--------
+ SRC/pstrsen.f  |  22 ++++++----
+ SRC/pzlarf.f   |  80 +++++++++++++++++-----------------
+ SRC/pzlarfc.f  |  88 ++++++++++++++++++-------------------
+ SRC/pzlarz.f   | 103 +++++++++++++++++++++----------------------
+ SRC/pzlarzc.f  | 111 ++++++++++++++++++++++++-----------------------
+ SRC/pzlattrs.f |  55 +++++++++++------------
+ SRC/pzlawil.f  |  49 +++++++++++----------
+ SRC/pztrevc.f  |  20 +++++----
+ 30 files changed, 927 insertions(+), 877 deletions(-)
+
+diff --git a/SRC/pclarf.f b/SRC/pclarf.f
+index f941e46..371f710 100644
+--- a/SRC/pclarf.f
++++ b/SRC/pclarf.f
+@@ -242,7 +242,7 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+      $                   IOFFV, IPW, IROFF, IVCOL, IVROW, JJC, JJV, LDC,
+      $                   LDV, MYCOL, MYROW, MP, NCC, NCV, NPCOL, NPROW,
+      $                   NQ, RDEST
+-      COMPLEX            TAULOC
++      COMPLEX            TAULOC( 1 )
+ *     ..
+ *     .. External Subroutines ..
+       EXTERNAL           BLACS_GRIDINFO, CCOPY, CGEBR2D, CGEBS2D,
+@@ -336,7 +336,7 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                      CALL CGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                             TAU( IIV ), 1 )
+-                     TAULOC = TAU( IIV )
++                     TAULOC( 1 ) = TAU( IIV )
+ *
+                   ELSE
+ *
+@@ -345,7 +345,7 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   END IF
+ *
+-                  IF( TAULOC.NE.ZERO ) THEN
++                  IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                    w := sub( C )' * v
+ *
+@@ -363,8 +363,8 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                    sub( C ) := sub( C ) - v * w'
+ *
+-                     CALL CGERC( MP, NQ, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                           1, C( IOFFC ), LDC )
++                     CALL CGERC( MP, NQ, -TAULOC( 1 ), WORK, 1,
++     $                           WORK( IPW ), 1, C( IOFFC ), LDC )
+                   END IF
+ *
+                END IF
+@@ -379,9 +379,9 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   IF( MYCOL.EQ.ICCOL ) THEN
+ *
+-                     TAULOC = TAU( JJV )
++                     TAULOC( 1 ) = TAU( JJV )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C )' * v
+ *
+@@ -398,7 +398,7 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                       sub( C ) := sub( C ) - v * w'
+ *
+-                        CALL CGERC( MP, NQ, -TAULOC, V( IOFFV ), 1,
++                        CALL CGERC( MP, NQ, -TAULOC( 1 ), V( IOFFV ), 1,
+      $                              WORK, 1, C( IOFFC ), LDC )
+                      END IF
+ *
+@@ -421,9 +421,9 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+                      IPW = MP+1
+                      CALL CGERV2D( ICTXT, IPW, 1, WORK, IPW, MYROW,
+      $                             IVCOL )
+-                     TAULOC = WORK( IPW )
++                     TAULOC( 1 ) = WORK( IPW )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C )' * v
+ *
+@@ -441,7 +441,7 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                       sub( C ) := sub( C ) - v * w'
+ *
+-                        CALL CGERC( MP, NQ, -TAULOC, WORK, 1,
++                        CALL CGERC( MP, NQ, -TAULOC( 1 ), WORK, 1,
+      $                              WORK( IPW ), 1, C( IOFFC ), LDC )
+                      END IF
+ *
+@@ -471,7 +471,7 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   CALL CGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                          TAU( IIV ), 1 )
+-                  TAULOC = TAU( IIV )
++                  TAULOC( 1 ) = TAU( IIV )
+ *
+                ELSE
+ *
+@@ -480,7 +480,7 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C )' * v
+ *
+@@ -500,8 +500,8 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *                 sub( C ) := sub( C ) - v * w'
+ *
+                   IF( IOFFC.GT.0 )
+-     $               CALL CGERC( MP, NQ, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                           1, C( IOFFC ), LDC )
++     $               CALL CGERC( MP, NQ, -TAULOC( 1 ), WORK, 1,
++     $                           WORK( IPW ), 1, C( IOFFC ), LDC )
+                END IF
+ *
+             ELSE
+@@ -516,18 +516,18 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+                   WORK(IPW) = TAU( JJV )
+                   CALL CGEBS2D( ICTXT, 'Rowwise', ROWBTOP, IPW, 1,
+      $                          WORK, IPW )
+-                  TAULOC = TAU( JJV )
++                  TAULOC( 1 ) = TAU( JJV )
+ *
+                ELSE
+ *
+                   IPW = MP+1
+                   CALL CGEBR2D( ICTXT, 'Rowwise', ROWBTOP, IPW, 1, WORK,
+      $                          IPW, MYROW, IVCOL )
+-                  TAULOC = WORK( IPW )
++                  TAULOC( 1 ) = WORK( IPW )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C )' * v
+ *
+@@ -547,8 +547,8 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *                 sub( C ) := sub( C ) - v * w'
+ *
+                   IF( IOFFC.GT.0 )
+-     $               CALL CGERC( MP, NQ, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                           1, C( IOFFC ), LDC )
++     $               CALL CGERC( MP, NQ, -TAULOC( 1 ), WORK, 1,
++     $                           WORK( IPW ), 1, C( IOFFC ), LDC )
+                END IF
+ *
+             END IF
+@@ -577,9 +577,9 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   IF( MYROW.EQ.ICROW ) THEN
+ *
+-                     TAULOC = TAU( IIV )
++                     TAULOC( 1 ) = TAU( IIV )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C ) * v
+ *
+@@ -597,7 +597,7 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *                       sub( C ) := sub( C ) - w * v'
+ *
+                         IF( IOFFV.GT.0 .AND. IOFFC.GT.0 )
+-     $                     CALL CGERC( MP, NQ, -TAULOC, WORK, 1,
++     $                     CALL CGERC( MP, NQ, -TAULOC( 1 ), WORK, 1,
+      $                                 V( IOFFV ), LDV, C( IOFFC ),
+      $                                 LDC )
+                      END IF
+@@ -621,9 +621,9 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+                      IPW = NQ+1
+                      CALL CGERV2D( ICTXT, IPW, 1, WORK, IPW, IVROW,
+      $                             MYCOL )
+-                     TAULOC = WORK( IPW )
++                     TAULOC( 1 ) = WORK( IPW )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C ) * v
+ *
+@@ -641,8 +641,8 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                       sub( C ) := sub( C ) - w * v'
+ *
+-                        CALL CGERC( MP, NQ, -TAULOC, WORK( IPW ), 1,
+-     $                              WORK, 1, C( IOFFC ), LDC )
++                        CALL CGERC( MP, NQ, -TAULOC( 1 ), WORK( IPW ),
++     $                              1, WORK, 1, C( IOFFC ), LDC )
+                      END IF
+ *
+                   END IF
+@@ -667,7 +667,7 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                      CALL CGEBS2D( ICTXT, 'Rowwise', ' ', 1, 1,
+      $                             TAU( JJV ), 1 )
+-                     TAULOC = TAU( JJV )
++                     TAULOC( 1 ) = TAU( JJV )
+ *
+                   ELSE
+ *
+@@ -676,7 +676,7 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   END IF
+ *
+-                  IF( TAULOC.NE.ZERO ) THEN
++                  IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                    w := sub( C ) * v
+ *
+@@ -694,8 +694,8 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                    sub( C ) := sub( C ) - w * v'
+ *
+-                     CALL CGERC( MP, NQ, -TAULOC, WORK( IPW ), 1, WORK,
+-     $                           1, C( IOFFC ), LDC )
++                     CALL CGERC( MP, NQ, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                           WORK, 1, C( IOFFC ), LDC )
+                   END IF
+ *
+                END IF
+@@ -720,18 +720,18 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+                   WORK(IPW) = TAU( IIV )
+                   CALL CGEBS2D( ICTXT, 'Columnwise', COLBTOP, IPW, 1,
+      $                          WORK, IPW )
+-                  TAULOC = TAU( IIV )
++                  TAULOC( 1 ) = TAU( IIV )
+ *
+                ELSE
+ *
+                   IPW = NQ+1
+                   CALL CGEBR2D( ICTXT, 'Columnwise', COLBTOP, IPW, 1,
+      $                          WORK, IPW, IVROW, MYCOL )
+-                  TAULOC = WORK( IPW )
++                  TAULOC( 1 ) = WORK( IPW )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C ) * v
+ *
+@@ -750,8 +750,8 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *                 sub( C ) := sub( C ) - w * v'
+ *
+                   IF( IOFFC.GT.0 )
+-     $               CALL CGERC( MP, NQ, -TAULOC, WORK( IPW ), 1, WORK,
+-     $                           1, C( IOFFC ), LDC )
++     $               CALL CGERC( MP, NQ, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                           WORK, 1, C( IOFFC ), LDC )
+                END IF
+ *
+             ELSE
+@@ -770,7 +770,7 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   CALL CGEBS2D( ICTXT, 'Rowwise', ' ', 1, 1, TAU( JJV ),
+      $                          1 )
+-                  TAULOC = TAU( JJV )
++                  TAULOC( 1 ) = TAU( JJV )
+ *
+                ELSE
+ *
+@@ -779,7 +779,7 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C ) * v
+ *
+@@ -797,8 +797,8 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                 sub( C ) := sub( C ) - w * v'
+ *
+-                  CALL CGERC( MP, NQ, -TAULOC, WORK( IPW ), 1, WORK, 1,
+-     $                        C( IOFFC ), LDC )
++                  CALL CGERC( MP, NQ, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                        WORK, 1, C( IOFFC ), LDC )
+                END IF
+ *
+             END IF
+diff --git a/SRC/pclarfc.f b/SRC/pclarfc.f
+index d6a2d3b..f84c493 100644
+--- a/SRC/pclarfc.f
++++ b/SRC/pclarfc.f
+@@ -242,7 +242,7 @@ SUBROUTINE PCLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+      $                   IOFFV, IPW, IROFF, IVCOL, IVROW, JJC, JJV, LDC,
+      $                   LDV, MYCOL, MYROW, MP, NCC, NCV, NPCOL, NPROW,
+      $                   NQ, RDEST
+-      COMPLEX            TAULOC
++      COMPLEX            TAULOC( 1 )
+ *     ..
+ *     .. External Subroutines ..
+       EXTERNAL           BLACS_GRIDINFO, CCOPY, CGEBR2D, CGEBS2D,
+@@ -336,17 +336,17 @@ SUBROUTINE PCLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                      CALL CGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                             TAU( IIV ), 1 )
+-                     TAULOC = CONJG( TAU( IIV ) )
++                     TAULOC( 1 ) = CONJG( TAU( IIV ) )
+ *
+                   ELSE
+ *
+                      CALL CGEBR2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                             TAULOC, 1, IVROW, MYCOL )
+-                     TAULOC = CONJG( TAULOC )
++                     TAULOC( 1 ) = CONJG( TAULOC( 1 ) )
+ *
+                   END IF
+ *
+-                  IF( TAULOC.NE.ZERO ) THEN
++                  IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                    w := sub( C )' * v
+ *
+@@ -364,8 +364,8 @@ SUBROUTINE PCLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                    sub( C ) := sub( C ) - v * w'
+ *
+-                     CALL CGERC( MP, NQ, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                           1, C( IOFFC ), LDC )
++                     CALL CGERC( MP, NQ, -TAULOC( 1 ), WORK, 1,
++     $                           WORK( IPW ), 1, C( IOFFC ), LDC )
+                   END IF
+ *
+                END IF
+@@ -380,9 +380,9 @@ SUBROUTINE PCLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   IF( MYCOL.EQ.ICCOL ) THEN
+ *
+-                     TAULOC = CONJG( TAU( JJV ) )
++                     TAULOC( 1 ) = CONJG( TAU( JJV ) )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C )' * v
+ *
+@@ -399,7 +399,7 @@ SUBROUTINE PCLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                       sub( C ) := sub( C ) - v * w'
+ *
+-                        CALL CGERC( MP, NQ, -TAULOC, V( IOFFV ), 1,
++                        CALL CGERC( MP, NQ, -TAULOC( 1 ), V( IOFFV ), 1,
+      $                              WORK, 1, C( IOFFC ), LDC )
+                      END IF
+ *
+@@ -422,9 +422,9 @@ SUBROUTINE PCLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+                      IPW = MP+1
+                      CALL CGERV2D( ICTXT, IPW, 1, WORK, IPW, MYROW,
+      $                             IVCOL )
+-                     TAULOC = CONJG( WORK( IPW ) )
++                     TAULOC( 1 ) = CONJG( WORK( IPW ) )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C )' * v
+ *
+@@ -442,7 +442,7 @@ SUBROUTINE PCLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                       sub( C ) := sub( C ) - v * w'
+ *
+-                        CALL CGERC( MP, NQ, -TAULOC, WORK, 1,
++                        CALL CGERC( MP, NQ, -TAULOC( 1 ), WORK, 1,
+      $                              WORK( IPW ), 1, C( IOFFC ), LDC )
+                      END IF
+ *
+@@ -472,17 +472,17 @@ SUBROUTINE PCLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   CALL CGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                          TAU( IIV ), 1 )
+-                  TAULOC = CONJG( TAU( IIV ) )
++                  TAULOC( 1 ) = CONJG( TAU( IIV ) )
+ *
+                ELSE
+ *
+                   CALL CGEBR2D( ICTXT, 'Columnwise', ' ', 1, 1, TAULOC,
+      $                          1, IVROW, MYCOL )
+-                  TAULOC = CONJG( TAULOC )
++                  TAULOC( 1 ) = CONJG( TAULOC( 1 ) )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C )' * v
+ *
+@@ -500,8 +500,8 @@ SUBROUTINE PCLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                 sub( C ) := sub( C ) - v * w'
+ *
+-                  CALL CGERC( MP, NQ, -TAULOC, WORK, 1, WORK( IPW ), 1,
+-     $                        C( IOFFC ), LDC )
++                  CALL CGERC( MP, NQ, -TAULOC( 1 ), WORK, 1,
++     $                        WORK( IPW ), 1, C( IOFFC ), LDC )
+                END IF
+ *
+             ELSE
+@@ -516,18 +516,18 @@ SUBROUTINE PCLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+                   WORK(IPW) = TAU( JJV )
+                   CALL CGEBS2D( ICTXT, 'Rowwise', ROWBTOP, IPW, 1,
+      $                          WORK, IPW )
+-                  TAULOC = CONJG( TAU( JJV ) )
++                  TAULOC( 1 ) = CONJG( TAU( JJV ) )
+ *
+                ELSE
+ *
+                   IPW = MP+1
+                   CALL CGEBR2D( ICTXT, 'Rowwise', ROWBTOP, IPW, 1, WORK,
+      $                          IPW, MYROW, IVCOL )
+-                  TAULOC = CONJG( WORK( IPW ) )
++                  TAULOC( 1 ) = CONJG( WORK( IPW ) )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C )' * v
+ *
+@@ -545,8 +545,8 @@ SUBROUTINE PCLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                 sub( C ) := sub( C ) - v * w'
+ *
+-                  CALL CGERC( MP, NQ, -TAULOC, WORK, 1, WORK( IPW ), 1,
+-     $                        C( IOFFC ), LDC )
++                  CALL CGERC( MP, NQ, -TAULOC( 1 ), WORK, 1,
++     $                        WORK( IPW ), 1, C( IOFFC ), LDC )
+                END IF
+ *
+             END IF
+@@ -575,9 +575,9 @@ SUBROUTINE PCLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   IF( MYROW.EQ.ICROW ) THEN
+ *
+-                     TAULOC = CONJG( TAU( IIV ) )
++                     TAULOC( 1 ) = CONJG( TAU( IIV ) )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C ) * v
+ *
+@@ -594,7 +594,7 @@ SUBROUTINE PCLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                       sub( C ) := sub( C ) - w * v'
+ *
+-                        CALL CGERC( MP, NQ, -TAULOC, WORK, 1,
++                        CALL CGERC( MP, NQ, -TAULOC( 1 ), WORK, 1,
+      $                              V( IOFFV ), LDV, C( IOFFC ), LDC )
+                      END IF
+ *
+@@ -617,9 +617,9 @@ SUBROUTINE PCLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+                      IPW = NQ+1
+                      CALL CGERV2D( ICTXT, IPW, 1, WORK, IPW, IVROW,
+      $                             MYCOL )
+-                     TAULOC = CONJG( WORK( IPW ) )
++                     TAULOC( 1 ) = CONJG( WORK( IPW ) )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C ) * v
+ *
+@@ -637,8 +637,8 @@ SUBROUTINE PCLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                       sub( C ) := sub( C ) - w * v'
+ *
+-                        CALL CGERC( MP, NQ, -TAULOC, WORK( IPW ), 1,
+-     $                              WORK, 1, C( IOFFC ), LDC )
++                        CALL CGERC( MP, NQ, -TAULOC( 1 ), WORK( IPW ),
++     $                              1, WORK, 1, C( IOFFC ), LDC )
+                      END IF
+ *
+                   END IF
+@@ -663,17 +663,17 @@ SUBROUTINE PCLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                      CALL CGEBS2D( ICTXT, 'Rowwise', ' ', 1, 1,
+      $                             TAU( JJV ), 1 )
+-                     TAULOC = CONJG( TAU( JJV ) )
++                     TAULOC( 1 ) = CONJG( TAU( JJV ) )
+ *
+                   ELSE
+ *
+                      CALL CGEBR2D( ICTXT, 'Rowwise', ' ', 1, 1, TAULOC,
+      $                             1, MYROW, IVCOL )
+-                     TAULOC = CONJG( TAULOC )
++                     TAULOC( 1 ) = CONJG( TAULOC( 1 ) )
+ *
+                   END IF
+ *
+-                  IF( TAULOC.NE.ZERO ) THEN
++                  IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                    w := sub( C ) * v
+ *
+@@ -691,8 +691,8 @@ SUBROUTINE PCLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                    sub( C ) := sub( C ) - w * v'
+ *
+-                     CALL CGERC( MP, NQ, -TAULOC, WORK( IPW ), 1, WORK,
+-     $                           1, C( IOFFC ), LDC )
++                     CALL CGERC( MP, NQ, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                           WORK, 1, C( IOFFC ), LDC )
+                   END IF
+ *
+                END IF
+@@ -716,18 +716,18 @@ SUBROUTINE PCLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+                   WORK(IPW) = TAU( IIV )
+                   CALL CGEBS2D( ICTXT, 'Columnwise', COLBTOP, IPW, 1,
+      $                          WORK, IPW )
+-                  TAULOC = CONJG( TAU( IIV ) )
++                  TAULOC( 1 ) = CONJG( TAU( IIV ) )
+ *
+                ELSE
+ *
+                   IPW = NQ+1
+                   CALL CGEBR2D( ICTXT, 'Columnwise', COLBTOP, IPW, 1,
+      $                          WORK, IPW, IVROW, MYCOL )
+-                  TAULOC = CONJG( WORK( IPW ) )
++                  TAULOC( 1 ) = CONJG( WORK( IPW ) )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C ) * v
+ *
+@@ -745,8 +745,8 @@ SUBROUTINE PCLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                 sub( C ) := sub( C ) - w * v'
+ *
+-                  CALL CGERC( MP, NQ, -TAULOC, WORK( IPW ), 1, WORK, 1,
+-     $                        C( IOFFC ), LDC )
++                  CALL CGERC( MP, NQ, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                        WORK, 1, C( IOFFC ), LDC )
+                END IF
+ *
+             ELSE
+@@ -765,17 +765,17 @@ SUBROUTINE PCLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   CALL CGEBS2D( ICTXT, 'Rowwise', ' ', 1, 1, TAU( JJV ),
+      $                          1 )
+-                  TAULOC = CONJG( TAU( JJV ) )
++                  TAULOC( 1 ) = CONJG( TAU( JJV ) )
+ *
+                ELSE
+ *
+                   CALL CGEBR2D( ICTXT, 'Rowwise', ' ', 1, 1, TAULOC, 1,
+      $                          MYROW, IVCOL )
+-                  TAULOC = CONJG( TAULOC )
++                  TAULOC( 1 ) = CONJG( TAULOC( 1 ) )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C ) * v
+ *
+@@ -793,8 +793,8 @@ SUBROUTINE PCLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                 sub( C ) := sub( C ) - w * v'
+ *
+-                  CALL CGERC( MP, NQ, -TAULOC, WORK( IPW ), 1, WORK, 1,
+-     $                        C( IOFFC ), LDC )
++                  CALL CGERC( MP, NQ, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                        WORK, 1, C( IOFFC ), LDC )
+                END IF
+ *
+             END IF
+diff --git a/SRC/pclarz.f b/SRC/pclarz.f
+index 9ba730c..673860a 100644
+--- a/SRC/pclarz.f
++++ b/SRC/pclarz.f
+@@ -251,7 +251,7 @@ SUBROUTINE PCLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                   IVCOL, IVROW, JJC1, JJC2, JJV, LDC, LDV, MPC2,
+      $                   MPV, MYCOL, MYROW, NCC, NCV, NPCOL, NPROW,
+      $                   NQC2, NQV, RDEST
+-      COMPLEX            TAULOC
++      COMPLEX            TAULOC( 1 )
+ *     ..
+ *     .. External Subroutines ..
+       EXTERNAL           BLACS_GRIDINFO, CAXPY, CCOPY, CGEBR2D,
+@@ -370,7 +370,7 @@ SUBROUTINE PCLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                      CALL CGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                             TAU( IIV ), 1 )
+-                     TAULOC = TAU( IIV )
++                     TAULOC( 1 ) = TAU( IIV )
+ *
+                   ELSE
+ *
+@@ -379,7 +379,7 @@ SUBROUTINE PCLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   END IF
+ *
+-                  IF( TAULOC.NE.ZERO ) THEN
++                  IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                    w := sub( C )' * v
+ *
+@@ -402,9 +402,9 @@ SUBROUTINE PCLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                    sub( C ) := sub( C ) - v * w'
+ *
+                      IF( MYROW.EQ.ICROW1 )
+-     $                  CALL CAXPY( NQC2, -TAULOC, WORK( IPW ),
++     $                  CALL CAXPY( NQC2, -TAULOC( 1 ), WORK( IPW ),
+      $                              MAX( 1, NQC2 ), C( IOFFC1 ), LDC )
+-                     CALL CGERC( MPV, NQC2, -TAULOC, WORK, 1,
++                     CALL CGERC( MPV, NQC2, -TAULOC( 1 ), WORK, 1,
+      $                           WORK( IPW ), 1, C( IOFFC2 ), LDC )
+                   END IF
+ *
+@@ -420,9 +420,9 @@ SUBROUTINE PCLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   IF( MYCOL.EQ.ICCOL2 ) THEN
+ *
+-                     TAULOC = TAU( JJV )
++                     TAULOC( 1 ) = TAU( JJV )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C )' * v
+ *
+@@ -445,11 +445,11 @@ SUBROUTINE PCLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                       sub( C ) := sub( C ) - v * w'
+ *
+                         IF( MYROW.EQ.ICROW1 )
+-     $                     CALL CAXPY( NQC2, -TAULOC, WORK,
++     $                     CALL CAXPY( NQC2, -TAULOC( 1 ), WORK,
+      $                                 MAX( 1, NQC2 ), C( IOFFC1 ),
+      $                                 LDC )
+-                        CALL CGERC( MPV, NQC2, -TAULOC, V( IOFFV ), 1,
+-     $                              WORK, 1, C( IOFFC2 ), LDC )
++                        CALL CGERC( MPV, NQC2, -TAULOC( 1 ), V( IOFFV ),
++     $                              1, WORK, 1, C( IOFFC2 ), LDC )
+                      END IF
+ *
+                   END IF
+@@ -471,9 +471,9 @@ SUBROUTINE PCLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+                      IPW = MPV+1
+                      CALL CGERV2D( ICTXT, IPW, 1, WORK, IPW, MYROW,
+      $                             IVCOL )
+-                     TAULOC = WORK( IPW )
++                     TAULOC( 1 ) = WORK( IPW )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C )' * v
+ *
+@@ -496,10 +496,10 @@ SUBROUTINE PCLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                       sub( C ) := sub( C ) - v * w'
+ *
+                         IF( MYROW.EQ.ICROW1 )
+-     $                     CALL CAXPY( NQC2, -TAULOC, WORK( IPW ),
++     $                     CALL CAXPY( NQC2, -TAULOC( 1 ), WORK( IPW ),
+      $                                 MAX( 1, NQC2 ), C( IOFFC1 ),
+      $                                 LDC )
+-                        CALL CGERC( MPV, NQC2, -TAULOC, WORK, 1,
++                        CALL CGERC( MPV, NQC2, -TAULOC( 1 ), WORK, 1,
+      $                              WORK( IPW ), 1, C( IOFFC2 ), LDC )
+                      END IF
+ *
+@@ -530,16 +530,16 @@ SUBROUTINE PCLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   CALL CGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                          TAU( IIV ), 1 )
+-                  TAULOC = TAU( IIV )
++                  TAULOC( 1 ) = TAU( IIV )
+ *
+                ELSE
+ *
+-                  CALL CGEBR2D( ICTXT, 'Columnwise', ' ', 1, 1, TAULOC,
+-     $                          1, IVROW, MYCOL )
++                  CALL CGEBR2D( ICTXT, 'Columnwise', ' ', 1, 1,
++     $                          TAULOC( 1 ), 1, IVROW, MYCOL )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C )' * v
+ *
+@@ -562,10 +562,10 @@ SUBROUTINE PCLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                 sub( C ) := sub( C ) - v * w'
+ *
+                   IF( MYROW.EQ.ICROW1 )
+-     $               CALL CAXPY( NQC2, -TAULOC, WORK( IPW ),
++     $               CALL CAXPY( NQC2, -TAULOC( 1 ), WORK( IPW ),
+      $                           MAX( 1, NQC2 ), C( IOFFC1 ), LDC )
+-                  CALL CGERC( MPV, NQC2, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                        1, C( IOFFC2 ), LDC )
++                  CALL CGERC( MPV, NQC2, -TAULOC( 1 ), WORK, 1,
++     $                        WORK( IPW ), 1, C( IOFFC2 ), LDC )
+                END IF
+ *
+             ELSE
+@@ -580,18 +580,18 @@ SUBROUTINE PCLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+                   WORK( IPW ) = TAU( JJV )
+                   CALL CGEBS2D( ICTXT, 'Rowwise', ROWBTOP, IPW, 1,
+      $                          WORK, IPW )
+-                  TAULOC = TAU( JJV )
++                  TAULOC( 1 ) = TAU( JJV )
+ *
+                ELSE
+ *
+                   IPW = MPV+1
+                   CALL CGEBR2D( ICTXT, 'Rowwise', ROWBTOP, IPW, 1, WORK,
+      $                          IPW, MYROW, IVCOL )
+-                  TAULOC = WORK( IPW )
++                  TAULOC( 1 ) = WORK( IPW )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C )' * v
+ *
+@@ -614,10 +614,10 @@ SUBROUTINE PCLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                 sub( C ) := sub( C ) - v * w'
+ *
+                   IF( MYROW.EQ.ICROW1 )
+-     $               CALL CAXPY( NQC2, -TAULOC, WORK( IPW ),
++     $               CALL CAXPY( NQC2, -TAULOC( 1 ), WORK( IPW ),
+      $                           MAX( 1, NQC2 ), C( IOFFC1 ), LDC )
+-                  CALL CGERC( MPV, NQC2, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                        1, C( IOFFC2 ), LDC )
++                  CALL CGERC( MPV, NQC2, -TAULOC( 1 ), WORK, 1,
++     $                        WORK( IPW ), 1, C( IOFFC2 ), LDC )
+                END IF
+ *
+             END IF
+@@ -646,9 +646,9 @@ SUBROUTINE PCLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   IF( MYROW.EQ.ICROW2 ) THEN
+ *
+-                     TAULOC = TAU( IIV )
++                     TAULOC( 1 ) = TAU( IIV )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C ) * v
+ *
+@@ -669,13 +669,13 @@ SUBROUTINE PCLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                               ICCOL2 )
+ *
+                         IF( MYCOL.EQ.ICCOL1 )
+-     $                     CALL CAXPY( MPC2, -TAULOC, WORK, 1,
++     $                     CALL CAXPY( MPC2, -TAULOC( 1 ), WORK, 1,
+      $                                 C( IOFFC1 ), 1 )
+ *
+ *                       sub( C ) := sub( C ) - w * v'
+ *
+                         IF( MPC2.GT.0 .AND. NQV.GT.0 )
+-     $                     CALL CGERC( MPC2, NQV, -TAULOC, WORK, 1,
++     $                     CALL CGERC( MPC2, NQV, -TAULOC( 1 ), WORK, 1,
+      $                                 V( IOFFV ), LDV, C( IOFFC2 ),
+      $                                 LDC )
+                      END IF
+@@ -699,9 +699,9 @@ SUBROUTINE PCLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+                      IPW = NQV+1
+                      CALL CGERV2D( ICTXT, IPW, 1, WORK, IPW, IVROW,
+      $                             MYCOL )
+-                     TAULOC = WORK( IPW )
++                     TAULOC( 1 ) = WORK( IPW )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C ) * v
+ *
+@@ -720,13 +720,14 @@ SUBROUTINE PCLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                                WORK( IPW ), MAX( 1, MPC2 ),
+      $                                RDEST, ICCOL2 )
+                         IF( MYCOL.EQ.ICCOL1 )
+-     $                     CALL CAXPY( MPC2, -TAULOC, WORK( IPW ), 1,
+-     $                                 C( IOFFC1 ), 1 )
++     $                     CALL CAXPY( MPC2, -TAULOC( 1 ), WORK( IPW ),
++     $                                 1, C( IOFFC1 ), 1 )
+ *
+ *                       sub( C ) := sub( C ) - w * v'
+ *
+-                        CALL CGERC( MPC2, NQV, -TAULOC, WORK( IPW ), 1,
+-     $                              WORK, 1, C( IOFFC2 ), LDC )
++                        CALL CGERC( MPC2, NQV, -TAULOC( 1 ),
++     $                              WORK( IPW ), 1, WORK, 1,
++     $                              C( IOFFC2 ), LDC )
+                      END IF
+ *
+                   END IF
+@@ -751,16 +752,16 @@ SUBROUTINE PCLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                      CALL CGEBS2D( ICTXT, 'Rowwise', ' ', 1, 1,
+      $                             TAU( JJV ), 1 )
+-                     TAULOC = TAU( JJV )
++                     TAULOC( 1 ) = TAU( JJV )
+ *
+                   ELSE
+ *
+-                     CALL CGEBR2D( ICTXT, 'Rowwise', ' ', 1, 1, TAULOC,
+-     $                             1, MYROW, IVCOL )
++                     CALL CGEBR2D( ICTXT, 'Rowwise', ' ', 1, 1,
++     $                             TAULOC( 1 ), 1, MYROW, IVCOL )
+ *
+                   END IF
+ *
+-                  IF( TAULOC.NE.ZERO ) THEN
++                  IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                    w := sub( C ) * v
+ *
+@@ -779,13 +780,13 @@ SUBROUTINE PCLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                             WORK( IPW ), MAX( 1, MPC2 ), RDEST,
+      $                             ICCOL2 )
+                      IF( MYCOL.EQ.ICCOL1 )
+-     $                  CALL CAXPY( MPC2, -TAULOC, WORK( IPW ), 1,
++     $                  CALL CAXPY( MPC2, -TAULOC( 1 ), WORK( IPW ), 1,
+      $                              C( IOFFC1 ), 1 )
+ *
+ *                    sub( C ) := sub( C ) - w * v'
+ *
+-                     CALL CGERC( MPC2, NQV, -TAULOC, WORK( IPW ), 1,
+-     $                           WORK, 1, C( IOFFC2 ), LDC )
++                     CALL CGERC( MPC2, NQV, -TAULOC( 1 ), WORK( IPW ),
++     $                           1, WORK, 1, C( IOFFC2 ), LDC )
+                   END IF
+ *
+                END IF
+@@ -809,18 +810,18 @@ SUBROUTINE PCLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+                   WORK( IPW ) = TAU( IIV )
+                   CALL CGEBS2D( ICTXT, 'Columnwise', COLBTOP, IPW, 1,
+      $                          WORK, IPW )
+-                  TAULOC = TAU( IIV )
++                  TAULOC( 1 ) = TAU( IIV )
+ *
+                ELSE
+ *
+                   IPW = NQV+1
+                   CALL CGEBR2D( ICTXT, 'Columnwise', COLBTOP, IPW, 1,
+      $                          WORK, IPW, IVROW, MYCOL )
+-                  TAULOC = WORK( IPW )
++                  TAULOC( 1 ) = WORK( IPW )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C ) * v
+ *
+@@ -840,13 +841,13 @@ SUBROUTINE PCLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                          WORK( IPW ), MAX( 1, MPC2 ), RDEST,
+      $                          ICCOL2 )
+                   IF( MYCOL.EQ.ICCOL1 )
+-     $               CALL CAXPY( MPC2, -TAULOC, WORK( IPW ), 1,
++     $               CALL CAXPY( MPC2, -TAULOC( 1 ), WORK( IPW ), 1,
+      $                           C( IOFFC1 ), 1 )
+ *
+ *                 sub( C ) := sub( C ) - w * v'
+ *
+-                  CALL CGERC( MPC2, NQV, -TAULOC, WORK( IPW ), 1, WORK,
+-     $                        1, C( IOFFC2 ), LDC )
++                  CALL CGERC( MPC2, NQV, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                        WORK, 1, C( IOFFC2 ), LDC )
+                END IF
+ *
+             ELSE
+@@ -865,7 +866,7 @@ SUBROUTINE PCLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   CALL CGEBS2D( ICTXT, 'Rowwise', ' ', 1, 1, TAU( JJV ),
+      $                          1 )
+-                  TAULOC = TAU( JJV )
++                  TAULOC( 1 ) = TAU( JJV )
+ *
+                ELSE
+ *
+@@ -874,7 +875,7 @@ SUBROUTINE PCLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C ) * v
+ *
+@@ -893,13 +894,13 @@ SUBROUTINE PCLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                          WORK( IPW ), MAX( 1, MPC2 ), RDEST,
+      $                          ICCOL2 )
+                   IF( MYCOL.EQ.ICCOL1 )
+-     $               CALL CAXPY( MPC2, -TAULOC, WORK( IPW ), 1,
++     $               CALL CAXPY( MPC2, -TAULOC( 1 ), WORK( IPW ), 1,
+      $                           C( IOFFC1 ), 1 )
+ *
+ *                 sub( C ) := sub( C ) - w * v'
+ *
+-                  CALL CGERC( MPC2, NQV, -TAULOC, WORK( IPW ), 1, WORK,
+-     $                        1, C( IOFFC2 ), LDC )
++                  CALL CGERC( MPC2, NQV, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                        WORK, 1, C( IOFFC2 ), LDC )
+                END IF
+ *
+             END IF
+diff --git a/SRC/pclarzc.f b/SRC/pclarzc.f
+index f1bc21e..b6d3b6d 100644
+--- a/SRC/pclarzc.f
++++ b/SRC/pclarzc.f
+@@ -251,7 +251,7 @@ SUBROUTINE PCLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                   IVCOL, IVROW, JJC1, JJC2, JJV, LDC, LDV, MPC2,
+      $                   MPV, MYCOL, MYROW, NCC, NCV, NPCOL, NPROW,
+      $                   NQC2, NQV, RDEST
+-      COMPLEX            TAULOC
++      COMPLEX            TAULOC( 1 )
+ *     ..
+ *     .. External Subroutines ..
+       EXTERNAL           BLACS_GRIDINFO, CAXPY, CCOPY, CGEBR2D,
+@@ -370,17 +370,17 @@ SUBROUTINE PCLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                      CALL CGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                             TAU( IIV ), 1 )
+-                     TAULOC = CONJG( TAU( IIV ) )
++                     TAULOC( 1 ) = CONJG( TAU( IIV ) )
+ *
+                   ELSE
+ *
+                      CALL CGEBR2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                             TAULOC, 1, IVROW, MYCOL )
+-                     TAULOC = CONJG( TAULOC )
++                     TAULOC( 1 ) = CONJG( TAULOC( 1 ) )
+ *
+                   END IF
+ *
+-                  IF( TAULOC.NE.ZERO ) THEN
++                  IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                    w := sub( C )' * v
+ *
+@@ -403,9 +403,9 @@ SUBROUTINE PCLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                    sub( C ) := sub( C ) - v * w'
+ *
+                      IF( MYROW.EQ.ICROW1 )
+-     $                  CALL CAXPY( NQC2, -TAULOC, WORK( IPW ),
++     $                  CALL CAXPY( NQC2, -TAULOC( 1 ), WORK( IPW ),
+      $                              MAX( 1, NQC2 ), C( IOFFC1 ), LDC )
+-                     CALL CGERC( MPV, NQC2, -TAULOC, WORK, 1,
++                     CALL CGERC( MPV, NQC2, -TAULOC( 1 ), WORK, 1,
+      $                           WORK( IPW ), 1, C( IOFFC2 ), LDC )
+                   END IF
+ *
+@@ -421,9 +421,9 @@ SUBROUTINE PCLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   IF( MYCOL.EQ.ICCOL2 ) THEN
+ *
+-                     TAULOC = CONJG( TAU( JJV ) )
++                     TAULOC( 1 ) = CONJG( TAU( JJV ) )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C )' * v
+ *
+@@ -446,11 +446,11 @@ SUBROUTINE PCLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                       sub( C ) := sub( C ) - v * w'
+ *
+                         IF( MYROW.EQ.ICROW1 )
+-     $                     CALL CAXPY( NQC2, -TAULOC, WORK,
++     $                     CALL CAXPY( NQC2, -TAULOC( 1 ), WORK,
+      $                                 MAX( 1, NQC2 ), C( IOFFC1 ),
+      $                                 LDC )
+-                        CALL CGERC( MPV, NQC2, -TAULOC, V( IOFFV ), 1,
+-     $                              WORK, 1, C( IOFFC2 ), LDC )
++                        CALL CGERC( MPV, NQC2, -TAULOC( 1 ), V( IOFFV ),
++     $                              1, WORK, 1, C( IOFFC2 ), LDC )
+                      END IF
+ *
+                   END IF
+@@ -472,9 +472,9 @@ SUBROUTINE PCLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+                      IPW = MPV+1
+                      CALL CGERV2D( ICTXT, IPW, 1, WORK, IPW, MYROW,
+      $                             IVCOL )
+-                     TAULOC = CONJG( WORK( IPW ) )
++                     TAULOC( 1 ) = CONJG( WORK( IPW ) )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C )' * v
+ *
+@@ -497,10 +497,10 @@ SUBROUTINE PCLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                       sub( C ) := sub( C ) - v * w'
+ *
+                         IF( MYROW.EQ.ICROW1 )
+-     $                     CALL CAXPY( NQC2, -TAULOC, WORK( IPW ),
++     $                     CALL CAXPY( NQC2, -TAULOC( 1 ), WORK( IPW ),
+      $                                 MAX( 1, NQC2 ), C( IOFFC1 ),
+      $                                 LDC )
+-                        CALL CGERC( MPV, NQC2, -TAULOC, WORK, 1,
++                        CALL CGERC( MPV, NQC2, -TAULOC( 1 ), WORK, 1,
+      $                              WORK( IPW ), 1, C( IOFFC2 ), LDC )
+                      END IF
+ *
+@@ -531,17 +531,17 @@ SUBROUTINE PCLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   CALL CGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                          TAU( IIV ), 1 )
+-                  TAULOC = CONJG( TAU( IIV ) )
++                  TAULOC( 1 ) = CONJG( TAU( IIV ) )
+ *
+                ELSE
+ *
+                   CALL CGEBR2D( ICTXT, 'Columnwise', ' ', 1, 1, TAULOC,
+      $                          1, IVROW, MYCOL )
+-                  TAULOC = CONJG( TAULOC )
++                  TAULOC( 1 ) = CONJG( TAULOC( 1 ) )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C )' * v
+ *
+@@ -564,10 +564,10 @@ SUBROUTINE PCLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                 sub( C ) := sub( C ) - v * w'
+ *
+                   IF( MYROW.EQ.ICROW1 )
+-     $               CALL CAXPY( NQC2, -TAULOC, WORK( IPW ),
++     $               CALL CAXPY( NQC2, -TAULOC( 1 ), WORK( IPW ),
+      $                           MAX( 1, NQC2 ), C( IOFFC1 ), LDC )
+-                  CALL CGERC( MPV, NQC2, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                        1, C( IOFFC2 ), LDC )
++                  CALL CGERC( MPV, NQC2, -TAULOC( 1 ), WORK, 1,
++     $                        WORK( IPW ), 1, C( IOFFC2 ), LDC )
+                END IF
+ *
+             ELSE
+@@ -582,18 +582,18 @@ SUBROUTINE PCLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+                   WORK( IPW ) = TAU( JJV )
+                   CALL CGEBS2D( ICTXT, 'Rowwise', ROWBTOP, IPW, 1,
+      $                          WORK, IPW )
+-                  TAULOC = CONJG( TAU( JJV ) )
++                  TAULOC( 1 ) = CONJG( TAU( JJV ) )
+ *
+                ELSE
+ *
+                   IPW = MPV+1
+                   CALL CGEBR2D( ICTXT, 'Rowwise', ROWBTOP, IPW, 1, WORK,
+      $                          IPW, MYROW, IVCOL )
+-                  TAULOC = CONJG( WORK( IPW ) )
++                  TAULOC( 1 ) = CONJG( WORK( IPW ) )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C )' * v
+ *
+@@ -616,10 +616,10 @@ SUBROUTINE PCLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                 sub( C ) := sub( C ) - v * w'
+ *
+                   IF( MYROW.EQ.ICROW1 )
+-     $               CALL CAXPY( NQC2, -TAULOC, WORK( IPW ),
++     $               CALL CAXPY( NQC2, -TAULOC( 1 ), WORK( IPW ),
+      $                           MAX( 1, NQC2 ), C( IOFFC1 ), LDC )
+-                  CALL CGERC( MPV, NQC2, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                        1, C( IOFFC2 ), LDC )
++                  CALL CGERC( MPV, NQC2, -TAULOC( 1 ), WORK, 1,
++     $                        WORK( IPW ), 1, C( IOFFC2 ), LDC )
+                END IF
+ *
+             END IF
+@@ -648,9 +648,9 @@ SUBROUTINE PCLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   IF( MYROW.EQ.ICROW2 ) THEN
+ *
+-                     TAULOC = CONJG( TAU( IIV ) )
++                     TAULOC( 1 ) = CONJG( TAU( IIV ) )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C ) * v
+ *
+@@ -671,12 +671,12 @@ SUBROUTINE PCLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                               ICCOL2 )
+ *
+                         IF( MYCOL.EQ.ICCOL1 )
+-     $                     CALL CAXPY( MPC2, -TAULOC, WORK, 1,
++     $                     CALL CAXPY( MPC2, -TAULOC( 1 ), WORK, 1,
+      $                                 C( IOFFC1 ), 1 )
+ *
+ *                       sub( C ) := sub( C ) - w * v'
+ *
+-                        CALL CGERC( MPC2, NQV, -TAULOC, WORK, 1,
++                        CALL CGERC( MPC2, NQV, -TAULOC( 1 ), WORK, 1,
+      $                              V( IOFFV ), LDV, C( IOFFC2 ), LDC )
+                      END IF
+ *
+@@ -699,9 +699,9 @@ SUBROUTINE PCLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+                      IPW = NQV+1
+                      CALL CGERV2D( ICTXT, IPW, 1, WORK, IPW, IVROW,
+      $                             MYCOL )
+-                     TAULOC = CONJG( WORK( IPW ) )
++                     TAULOC( 1 ) = CONJG( WORK( IPW ) )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C ) * v
+ *
+@@ -720,13 +720,14 @@ SUBROUTINE PCLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                                WORK( IPW ), MAX( 1, MPC2 ),
+      $                                RDEST, ICCOL2 )
+                         IF( MYCOL.EQ.ICCOL1 )
+-     $                     CALL CAXPY( MPC2, -TAULOC, WORK( IPW ), 1,
+-     $                                 C( IOFFC1 ), 1 )
++     $                     CALL CAXPY( MPC2, -TAULOC( 1 ), WORK( IPW ),
++     $                                 1, C( IOFFC1 ), 1 )
+ *
+ *                       sub( C ) := sub( C ) - w * v'
+ *
+-                        CALL CGERC( MPC2, NQV, -TAULOC, WORK( IPW ), 1,
+-     $                              WORK, 1, C( IOFFC2 ), LDC )
++                        CALL CGERC( MPC2, NQV, -TAULOC( 1 ),
++     $                              WORK( IPW ), 1, WORK, 1,
++     $                              C( IOFFC2 ), LDC )
+                      END IF
+ *
+                   END IF
+@@ -751,17 +752,17 @@ SUBROUTINE PCLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                      CALL CGEBS2D( ICTXT, 'Rowwise', ' ', 1, 1,
+      $                             TAU( JJV ), 1 )
+-                     TAULOC = CONJG( TAU( JJV ) )
++                     TAULOC( 1 ) = CONJG( TAU( JJV ) )
+ *
+                   ELSE
+ *
+                      CALL CGEBR2D( ICTXT, 'Rowwise', ' ', 1, 1, TAULOC,
+      $                             1, MYROW, IVCOL )
+-                     TAULOC = CONJG( TAULOC )
++                     TAULOC( 1 ) = CONJG( TAULOC( 1 ) )
+ *
+                   END IF
+ *
+-                  IF( TAULOC.NE.ZERO ) THEN
++                  IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                    w := sub( C ) * v
+ *
+@@ -780,13 +781,13 @@ SUBROUTINE PCLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                             WORK( IPW ), MAX( 1, MPC2 ), RDEST,
+      $                             ICCOL2 )
+                      IF( MYCOL.EQ.ICCOL1 )
+-     $                  CALL CAXPY( MPC2, -TAULOC, WORK( IPW ), 1,
++     $                  CALL CAXPY( MPC2, -TAULOC( 1 ), WORK( IPW ), 1,
+      $                              C( IOFFC1 ), 1 )
+ *
+ *                    sub( C ) := sub( C ) - w * v'
+ *
+-                     CALL CGERC( MPC2, NQV, -TAULOC, WORK( IPW ), 1,
+-     $                           WORK, 1, C( IOFFC2 ), LDC )
++                     CALL CGERC( MPC2, NQV, -TAULOC( 1 ), WORK( IPW ),
++     $                           1, WORK, 1, C( IOFFC2 ), LDC )
+                   END IF
+ *
+                END IF
+@@ -810,18 +811,18 @@ SUBROUTINE PCLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+                   WORK( IPW ) = TAU( IIV )
+                   CALL CGEBS2D( ICTXT, 'Columnwise', COLBTOP, IPW, 1,
+      $                          WORK, IPW )
+-                  TAULOC = CONJG( TAU( IIV ) )
++                  TAULOC( 1 ) = CONJG( TAU( IIV ) )
+ *
+                ELSE
+ *
+                   IPW = NQV+1
+                   CALL CGEBR2D( ICTXT, 'Columnwise', COLBTOP, IPW, 1,
+      $                          WORK, IPW, IVROW, MYCOL )
+-                  TAULOC = CONJG( WORK( IPW ) )
++                  TAULOC( 1 ) = CONJG( WORK( IPW ) )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C ) * v
+ *
+@@ -841,13 +842,13 @@ SUBROUTINE PCLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                          WORK( IPW ), MAX( 1, MPC2 ), RDEST,
+      $                          ICCOL2 )
+                   IF( MYCOL.EQ.ICCOL1 )
+-     $               CALL CAXPY( MPC2, -TAULOC, WORK( IPW ), 1,
++     $               CALL CAXPY( MPC2, -TAULOC( 1 ), WORK( IPW ), 1,
+      $                           C( IOFFC1 ), 1 )
+ *
+ *                 sub( C ) := sub( C ) - w * v'
+ *
+-                  CALL CGERC( MPC2, NQV, -TAULOC, WORK( IPW ), 1, WORK,
+-     $                        1, C( IOFFC2 ), LDC )
++                  CALL CGERC( MPC2, NQV, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                        WORK, 1, C( IOFFC2 ), LDC )
+                END IF
+ *
+             ELSE
+@@ -866,17 +867,17 @@ SUBROUTINE PCLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   CALL CGEBS2D( ICTXT, 'Rowwise', ' ', 1, 1, TAU( JJV ),
+      $                          1 )
+-                  TAULOC = CONJG( TAU( JJV ) )
++                  TAULOC( 1 ) = CONJG( TAU( JJV ) )
+ *
+                ELSE
+ *
+-                  CALL CGEBR2D( ICTXT, 'Rowwise', ' ', 1, 1, TAULOC, 1,
+-     $                          MYROW, IVCOL )
+-                  TAULOC = CONJG( TAULOC )
++                  CALL CGEBR2D( ICTXT, 'Rowwise', ' ', 1, 1,
++     $                          TAULOC( 1 ), 1, MYROW, IVCOL )
++                  TAULOC( 1 ) = CONJG( TAULOC( 1 ) )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C ) * v
+ *
+@@ -895,13 +896,13 @@ SUBROUTINE PCLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                          WORK( IPW ), MAX( 1, MPC2 ), RDEST,
+      $                          ICCOL2 )
+                   IF( MYCOL.EQ.ICCOL1 )
+-     $               CALL CAXPY( MPC2, -TAULOC, WORK( IPW ), 1,
++     $               CALL CAXPY( MPC2, -TAULOC( 1 ), WORK( IPW ), 1,
+      $                           C( IOFFC1 ), 1 )
+ *
+ *                 sub( C ) := sub( C ) - w * v'
+ *
+-                  CALL CGERC( MPC2, NQV, -TAULOC, WORK( IPW ), 1, WORK,
+-     $                        1, C( IOFFC2 ), LDC )
++                  CALL CGERC( MPC2, NQV, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                        WORK, 1, C( IOFFC2 ), LDC )
+                END IF
+ *
+             END IF
+diff --git a/SRC/pclattrs.f b/SRC/pclattrs.f
+index c744aea..0d12a8b 100644
+--- a/SRC/pclattrs.f
++++ b/SRC/pclattrs.f
+@@ -271,7 +271,8 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+      $                   JINC, JLAST, LDA, LDX, MB, MYCOL, MYROW, NB,
+      $                   NPCOL, NPROW, RSRC
+       REAL               BIGNUM, GROW, REC, SMLNUM, TJJ, TMAX, TSCAL,
+-     $                   XBND, XJ, XMAX
++     $                   XBND, XJ
++      REAL               XMAX( 1 )
+       COMPLEX            CSUMJ, TJJS, USCAL, XJTMP, ZDUM
+ *     ..
+ *     .. External Functions ..
+@@ -391,11 +392,11 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+ *     Compute a bound on the computed solution vector to see if the
+ *     Level 2 PBLAS routine PCTRSV can be used.
+ *
+-      XMAX = ZERO
++      XMAX( 1 ) = ZERO
+       CALL PCAMAX( N, ZDUM, IMAX, X, IX, JX, DESCX, 1 )
+-      XMAX = CABS2( ZDUM )
++      XMAX( 1 ) = CABS2( ZDUM )
+       CALL SGSUM2D( CONTXT, 'Row', ' ', 1, 1, XMAX, 1, -1, -1 )
+-      XBND = XMAX
++      XBND = XMAX( 1 )
+ *
+       IF( NOTRAN ) THEN
+ *
+@@ -590,16 +591,16 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+ *
+ *        Use a Level 1 PBLAS solve, scaling intermediate results.
+ *
+-         IF( XMAX.GT.BIGNUM*HALF ) THEN
++         IF( XMAX( 1 ).GT.BIGNUM*HALF ) THEN
+ *
+ *           Scale X so that its components are less than or equal to
+ *           BIGNUM in absolute value.
+ *
+-            SCALE = ( BIGNUM*HALF ) / XMAX
++            SCALE = ( BIGNUM*HALF ) / XMAX( 1 )
+             CALL PCSSCAL( N, SCALE, X, IX, JX, DESCX, 1 )
+-            XMAX = BIGNUM
++            XMAX( 1 ) = BIGNUM
+          ELSE
+-            XMAX = XMAX*TWO
++            XMAX( 1 ) = XMAX( 1 )*TWO
+          END IF
+ *
+          IF( NOTRAN ) THEN
+@@ -651,7 +652,7 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                         CALL PCSSCAL( N, REC, X, IX, JX, DESCX, 1 )
+                         XJTMP = XJTMP*REC
+                         SCALE = SCALE*REC
+-                        XMAX = XMAX*REC
++                        XMAX( 1 ) = XMAX( 1 )*REC
+                      END IF
+                   END IF
+ *                 X( J ) = CLADIV( X( J ), TJJS )
+@@ -682,7 +683,7 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                      CALL PCSSCAL( N, REC, X, IX, JX, DESCX, 1 )
+                      XJTMP = XJTMP*REC
+                      SCALE = SCALE*REC
+-                     XMAX = XMAX*REC
++                     XMAX( 1 ) = XMAX( 1 )*REC
+                   END IF
+ *                 X( J ) = CLADIV( X( J ), TJJS )
+ *                 XJ = CABS1( X( J ) )
+@@ -706,7 +707,7 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                   XJTMP = CONE
+                   XJ = ONE
+                   SCALE = ZERO
+-                  XMAX = ZERO
++                  XMAX( 1 ) = ZERO
+                END IF
+    90          CONTINUE
+ *
+@@ -715,7 +716,7 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+ *
+                IF( XJ.GT.ONE ) THEN
+                   REC = ONE / XJ
+-                  IF( CNORM( J ).GT.( BIGNUM-XMAX )*REC ) THEN
++                  IF( CNORM( J ).GT.( BIGNUM-XMAX( 1 ) )*REC ) THEN
+ *
+ *                    Scale x by 1/(2*abs(x(j))).
+ *
+@@ -724,7 +725,7 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                      XJTMP = XJTMP*REC
+                      SCALE = SCALE*REC
+                   END IF
+-               ELSE IF( XJ*CNORM( J ).GT.( BIGNUM-XMAX ) ) THEN
++               ELSE IF( XJ*CNORM( J ).GT.( BIGNUM-XMAX( 1 ) ) ) THEN
+ *
+ *                 Scale x by 1/2.
+ *
+@@ -743,7 +744,7 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                      CALL PCAXPY( J-1, ZDUM, A, IA, JA+J-1, DESCA, 1, X,
+      $                            IX, JX, DESCX, 1 )
+                      CALL PCAMAX( J-1, ZDUM, IMAX, X, IX, JX, DESCX, 1 )
+-                     XMAX = CABS1( ZDUM )
++                     XMAX( 1 ) = CABS1( ZDUM )
+                      CALL SGSUM2D( CONTXT, 'Row', ' ', 1, 1, XMAX, 1,
+      $                             -1, -1 )
+                   END IF
+@@ -757,7 +758,7 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                      CALL PCAXPY( N-J, ZDUM, A, IA+J, JA+J-1, DESCA, 1,
+      $                            X, IX+J, JX, DESCX, 1 )
+                      CALL PCAMAX( N-J, ZDUM, I, X, IX+J, JX, DESCX, 1 )
+-                     XMAX = CABS1( ZDUM )
++                     XMAX( 1 ) = CABS1( ZDUM )
+                      CALL SGSUM2D( CONTXT, 'Row', ' ', 1, 1, XMAX, 1,
+      $                             -1, -1 )
+                   END IF
+@@ -785,7 +786,7 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                END IF
+                XJ = CABS1( XJTMP )
+                USCAL = CMPLX( TSCAL )
+-               REC = ONE / MAX( XMAX, ONE )
++               REC = ONE / MAX( XMAX( 1 ), ONE )
+                IF( CNORM( J ).GT.( BIGNUM-XJ )*REC ) THEN
+ *
+ *                 If x(j) could overflow, scale x by 1/(2*XMAX).
+@@ -820,7 +821,7 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                      CALL PCSSCAL( N, REC, X, IX, JX, DESCX, 1 )
+                      XJTMP = XJTMP*REC
+                      SCALE = SCALE*REC
+-                     XMAX = XMAX*REC
++                     XMAX( 1 ) = XMAX( 1 )*REC
+                   END IF
+                END IF
+ *
+@@ -924,7 +925,7 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                            CALL PCSSCAL( N, REC, X, IX, JX, DESCX, 1 )
+                            XJTMP = XJTMP*REC
+                            SCALE = SCALE*REC
+-                           XMAX = XMAX*REC
++                           XMAX( 1 ) = XMAX( 1 )*REC
+                         END IF
+                      END IF
+ *                    X( J ) = CLADIV( X( J ), TJJS )
+@@ -945,7 +946,7 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                         CALL PCSSCAL( N, REC, X, IX, JX, DESCX, 1 )
+                         XJTMP = XJTMP*REC
+                         SCALE = SCALE*REC
+-                        XMAX = XMAX*REC
++                        XMAX( 1 ) = XMAX( 1 )*REC
+                      END IF
+ *                    X( J ) = CLADIV( X( J ), TJJS )
+                      XJTMP = CLADIV( XJTMP, TJJS )
+@@ -966,7 +967,7 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                      END IF
+                      XJTMP = CONE
+                      SCALE = ZERO
+-                     XMAX = ZERO
++                     XMAX( 1 ) = ZERO
+                   END IF
+   110             CONTINUE
+                ELSE
+@@ -981,7 +982,7 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                      X( IROWX ) = XJTMP
+                   END IF
+                END IF
+-               XMAX = MAX( XMAX, CABS1( XJTMP ) )
++               XMAX( 1 ) = MAX( XMAX( 1 ), CABS1( XJTMP ) )
+   120       CONTINUE
+ *
+          ELSE
+@@ -1004,7 +1005,7 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                END IF
+                XJ = CABS1( XJTMP )
+                USCAL = TSCAL
+-               REC = ONE / MAX( XMAX, ONE )
++               REC = ONE / MAX( XMAX( 1 ), ONE )
+                IF( CNORM( J ).GT.( BIGNUM-XJ )*REC ) THEN
+ *
+ *                 If x(j) could overflow, scale x by 1/(2*XMAX).
+@@ -1039,7 +1040,7 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                      CALL PCSSCAL( N, REC, X, IX, JX, DESCX, 1 )
+                      XJTMP = XJTMP*REC
+                      SCALE = SCALE*REC
+-                     XMAX = XMAX*REC
++                     XMAX( 1 ) = XMAX( 1 )*REC
+                   END IF
+                END IF
+ *
+@@ -1145,7 +1146,7 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                            CALL PCSSCAL( N, REC, X, IX, JX, DESCX, 1 )
+                            XJTMP = XJTMP*REC
+                            SCALE = SCALE*REC
+-                           XMAX = XMAX*REC
++                           XMAX( 1 ) = XMAX( 1 )*REC
+                         END IF
+                      END IF
+ *                    X( J ) = CLADIV( X( J ), TJJS )
+@@ -1164,7 +1165,7 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                         CALL PCSSCAL( N, REC, X, IX, JX, DESCX, 1 )
+                         XJTMP = XJTMP*REC
+                         SCALE = SCALE*REC
+-                        XMAX = XMAX*REC
++                        XMAX( 1 ) = XMAX( 1 )*REC
+                      END IF
+ *                    X( J ) = CLADIV( X( J ), TJJS )
+                      XJTMP = CLADIV( XJTMP, TJJS )
+@@ -1181,7 +1182,7 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+      $                  X( IROWX ) = CONE
+                      XJTMP = CONE
+                      SCALE = ZERO
+-                     XMAX = ZERO
++                     XMAX( 1 ) = ZERO
+                   END IF
+   130             CONTINUE
+                ELSE
+@@ -1194,7 +1195,7 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                   IF( ( MYROW.EQ.ITMP1X ) .AND. ( MYCOL.EQ.ITMP2X ) )
+      $               X( IROWX ) = XJTMP
+                END IF
+-               XMAX = MAX( XMAX, CABS1( XJTMP ) )
++               XMAX( 1 ) = MAX( XMAX( 1 ), CABS1( XJTMP ) )
+   140       CONTINUE
+          END IF
+          SCALE = SCALE / TSCAL
+diff --git a/SRC/pclawil.f b/SRC/pclawil.f
+index 24a49b9..b33b3b1 100644
+--- a/SRC/pclawil.f
++++ b/SRC/pclawil.f
+@@ -124,11 +124,10 @@ SUBROUTINE PCLAWIL( II, JJ, M, A, DESCA, H44, H33, H43H34, V )
+      $                   MODKM1, MYCOL, MYROW, NPCOL, NPROW, NUM, RIGHT,
+      $                   RSRC, UP
+       REAL               S
+-      COMPLEX            CDUM, H11, H12, H21, H22, H33S, H44S, V1, V2,
+-     $                   V3
++      COMPLEX            CDUM, H22, H33S, H44S, V1, V2
+ *     ..
+ *     .. Local Arrays ..
+-      COMPLEX            BUF( 4 )
++      COMPLEX            BUF( 4 ), V3( 1 ), H11( 1 ), H12( 1 ), H21( 1 )
+ *     ..
+ *     .. External Subroutines ..
+       EXTERNAL           BLACS_GRIDINFO, INFOG2L, CGERV2D, CGESD2D
+@@ -181,18 +180,18 @@ SUBROUTINE PCLAWIL( II, JJ, M, A, DESCA, H44, H33, H43H34, V )
+             IF( NPCOL.GT.1 ) THEN
+                CALL CGERV2D( CONTXT, 1, 1, V3, 1, MYROW, LEFT )
+             ELSE
+-               V3 = A( ( ICOL-2 )*LDA+IROW )
++               V3( 1 ) = A( ( ICOL-2 )*LDA+IROW )
+             END IF
+             IF( NUM.GT.1 ) THEN
+                CALL CGERV2D( CONTXT, 4, 1, BUF, 4, UP, LEFT )
+-               H11 = BUF( 1 )
+-               H21 = BUF( 2 )
+-               H12 = BUF( 3 )
++               H11( 1 ) = BUF( 1 )
++               H21( 1 ) = BUF( 2 )
++               H12( 1 ) = BUF( 3 )
+                H22 = BUF( 4 )
+             ELSE
+-               H11 = A( ( ICOL-3 )*LDA+IROW-2 )
+-               H21 = A( ( ICOL-3 )*LDA+IROW-1 )
+-               H12 = A( ( ICOL-2 )*LDA+IROW-2 )
++               H11( 1 ) = A( ( ICOL-3 )*LDA+IROW-2 )
++               H21( 1 ) = A( ( ICOL-3 )*LDA+IROW-1 )
++               H12( 1 ) = A( ( ICOL-2 )*LDA+IROW-2 )
+                H22 = A( ( ICOL-2 )*LDA+IROW-1 )
+             END IF
+          END IF
+@@ -223,22 +222,22 @@ SUBROUTINE PCLAWIL( II, JJ, M, A, DESCA, H44, H33, H43H34, V )
+             CALL INFOG2L( M+2, M+2, DESCA, NPROW, NPCOL, MYROW, MYCOL,
+      $                    IROW, ICOL, RSRC, JSRC )
+             IF( NUM.GT.1 ) THEN
+-               CALL CGERV2D( CONTXT, 1, 1, H11, 1, UP, LEFT )
++               CALL CGERV2D( CONTXT, 1, 1, H11( 1 ), 1, UP, LEFT )
+             ELSE
+-               H11 = A( ( ICOL-3 )*LDA+IROW-2 )
++               H11( 1 ) = A( ( ICOL-3 )*LDA+IROW-2 )
+             END IF
+             IF( NPROW.GT.1 ) THEN
+                CALL CGERV2D( CONTXT, 1, 1, H12, 1, UP, MYCOL )
+             ELSE
+-               H12 = A( ( ICOL-2 )*LDA+IROW-2 )
++               H12( 1 ) = A( ( ICOL-2 )*LDA+IROW-2 )
+             END IF
+             IF( NPCOL.GT.1 ) THEN
+-               CALL CGERV2D( CONTXT, 1, 1, H21, 1, MYROW, LEFT )
++               CALL CGERV2D( CONTXT, 1, 1, H21( 1 ), 1, MYROW, LEFT )
+             ELSE
+-               H21 = A( ( ICOL-3 )*LDA+IROW-1 )
++               H21( 1 ) = A( ( ICOL-3 )*LDA+IROW-1 )
+             END IF
+             H22 = A( ( ICOL-2 )*LDA+IROW-1 )
+-            V3 = A( ( ICOL-2 )*LDA+IROW )
++            V3( 1 ) = A( ( ICOL-2 )*LDA+IROW )
+          END IF
+       END IF
+       IF( ( MYROW.NE.II ) .OR. ( MYCOL.NE.JJ ) )
+@@ -247,24 +246,24 @@ SUBROUTINE PCLAWIL( II, JJ, M, A, DESCA, H44, H33, H43H34, V )
+       IF( MODKM1.GT.1 ) THEN
+          CALL INFOG2L( M+2, M+2, DESCA, NPROW, NPCOL, MYROW, MYCOL,
+      $                 IROW, ICOL, RSRC, JSRC )
+-         H11 = A( ( ICOL-3 )*LDA+IROW-2 )
+-         H21 = A( ( ICOL-3 )*LDA+IROW-1 )
+-         H12 = A( ( ICOL-2 )*LDA+IROW-2 )
++         H11( 1 ) = A( ( ICOL-3 )*LDA+IROW-2 )
++         H21( 1 ) = A( ( ICOL-3 )*LDA+IROW-1 )
++         H12( 1 ) = A( ( ICOL-2 )*LDA+IROW-2 )
+          H22 = A( ( ICOL-2 )*LDA+IROW-1 )
+-         V3 = A( ( ICOL-2 )*LDA+IROW )
++         V3( 1 ) = A( ( ICOL-2 )*LDA+IROW )
+       END IF
+ *
+-      H44S = H44 - H11
+-      H33S = H33 - H11
+-      V1 = ( H33S*H44S-H43H34 ) / H21 + H12
+-      V2 = H22 - H11 - H33S - H44S
+-      S = CABS1( V1 ) + CABS1( V2 ) + CABS1( V3 )
++      H44S = H44 - H11( 1 )
++      H33S = H33 - H11( 1 )
++      V1 = ( H33S*H44S-H43H34 ) / H21( 1 ) + H12( 1 )
++      V2 = H22 - H11( 1 ) - H33S - H44S
++      S = CABS1( V1 ) + CABS1( V2 ) + CABS1( V3( 1 ) )
+       V1 = V1 / S
+       V2 = V2 / S
+-      V3 = V3 / S
++      V3( 1 ) = V3( 1 ) / S
+       V( 1 ) = V1
+       V( 2 ) = V2
+-      V( 3 ) = V3
++      V( 3 ) = V3( 1 )
+ *
+       RETURN
+ *
+diff --git a/SRC/pctrevc.f b/SRC/pctrevc.f
+index d0a3043..bf6c52b 100644
+--- a/SRC/pctrevc.f
++++ b/SRC/pctrevc.f
+@@ -218,11 +218,12 @@ SUBROUTINE PCTREVC( SIDE, HOWMNY, SELECT, N, T, DESCT, VL, DESCVL,
+      $                   ITMP2, J, K, KI, LDT, LDVL, LDVR, LDW, MB,
+      $                   MYCOL, MYROW, NB, NPCOL, NPROW, RSRC
+       REAL               SELF
+-      REAL               OVFL, REMAXD, SCALE, SMIN, SMLNUM, ULP, UNFL
++      REAL               OVFL, REMAXD, SCALE, SMLNUM, ULP, UNFL
+       COMPLEX            CDUM, REMAXC, SHIFT
+ *     ..
+ *     .. Local Arrays ..
+       INTEGER            DESCW( DLEN_ )
++      REAL               SMIN( 1 )
+ *     ..
+ *     .. External Functions ..
+       LOGICAL            LSAME
+@@ -355,13 +356,13 @@ SUBROUTINE PCTREVC( SIDE, HOWMNY, SELECT, N, T, DESCT, VL, DESCVL,
+      $            GO TO 70
+             END IF
+ *
+-            SMIN = ZERO
++            SMIN( 1 ) = ZERO
+             SHIFT = CZERO
+             CALL INFOG2L( KI, KI, DESCT, NPROW, NPCOL, MYROW, MYCOL,
+      $                    IROW, ICOL, ITMP1, ITMP2 )
+             IF( ( MYROW.EQ.ITMP1 ) .AND. ( MYCOL.EQ.ITMP2 ) ) THEN
+                SHIFT = T( ( ICOL-1 )*LDT+IROW )
+-               SMIN = MAX( ULP*( CABS1( SHIFT ) ), SMLNUM )
++               SMIN( 1 ) = MAX( ULP*( CABS1( SHIFT ) ), SMLNUM )
+             END IF
+             CALL SGSUM2D( CONTXT, 'ALL', ' ', 1, 1, SMIN, 1, -1, -1 )
+             CALL CGSUM2D( CONTXT, 'ALL', ' ', 1, 1, SHIFT, 1, -1, -1 )
+@@ -396,8 +397,9 @@ SUBROUTINE PCTREVC( SIDE, HOWMNY, SELECT, N, T, DESCT, VL, DESCVL,
+                IF( ( MYROW.EQ.ITMP1 ) .AND. ( MYCOL.EQ.ITMP2 ) ) THEN
+                   T( ( ICOL-1 )*LDT+IROW ) = T( ( ICOL-1 )*LDT+IROW ) -
+      $               SHIFT
+-                  IF( CABS1( T( ( ICOL-1 )*LDT+IROW ) ).LT.SMIN ) THEN
+-                     T( ( ICOL-1 )*LDT+IROW ) = CMPLX( SMIN )
++                  IF( CABS1( T( ( ICOL-1 )*LDT+IROW ) ).LT.SMIN( 1 ) )
++     $            THEN
++                     T( ( ICOL-1 )*LDT+IROW ) = CMPLX( SMIN( 1 ) )
+                   END IF
+                END IF
+    50       CONTINUE
+@@ -467,13 +469,13 @@ SUBROUTINE PCTREVC( SIDE, HOWMNY, SELECT, N, T, DESCT, VL, DESCVL,
+      $            GO TO 110
+             END IF
+ *
+-            SMIN = ZERO
++            SMIN( 1 ) = ZERO
+             SHIFT = CZERO
+             CALL INFOG2L( KI, KI, DESCT, NPROW, NPCOL, MYROW, MYCOL,
+      $                    IROW, ICOL, ITMP1, ITMP2 )
+             IF( ( MYROW.EQ.ITMP1 ) .AND. ( MYCOL.EQ.ITMP2 ) ) THEN
+                SHIFT = T( ( ICOL-1 )*LDT+IROW )
+-               SMIN = MAX( ULP*( CABS1( SHIFT ) ), SMLNUM )
++               SMIN( 1 ) = MAX( ULP*( CABS1( SHIFT ) ), SMLNUM )
+             END IF
+             CALL SGSUM2D( CONTXT, 'ALL', ' ', 1, 1, SMIN, 1, -1, -1 )
+             CALL CGSUM2D( CONTXT, 'ALL', ' ', 1, 1, SHIFT, 1, -1, -1 )
+@@ -507,8 +509,8 @@ SUBROUTINE PCTREVC( SIDE, HOWMNY, SELECT, N, T, DESCT, VL, DESCVL,
+                IF( ( MYROW.EQ.ITMP1 ) .AND. ( MYCOL.EQ.ITMP2 ) ) THEN
+                   T( ( ICOL-1 )*LDT+IROW ) = T( ( ICOL-1 )*LDT+IROW ) -
+      $               SHIFT
+-                  IF( CABS1( T( ( ICOL-1 )*LDT+IROW ) ).LT.SMIN )
+-     $               T( ( ICOL-1 )*LDT+IROW ) = CMPLX( SMIN )
++                  IF( CABS1( T( ( ICOL-1 )*LDT+IROW ) ).LT.SMIN( 1 ) )
++     $               T( ( ICOL-1 )*LDT+IROW ) = CMPLX( SMIN( 1 ) )
+                END IF
+    90       CONTINUE
+ *
+diff --git a/SRC/pdhseqr.f b/SRC/pdhseqr.f
+index ffc3652..6e0f751 100644
+--- a/SRC/pdhseqr.f
++++ b/SRC/pdhseqr.f
+@@ -259,11 +259,12 @@ SUBROUTINE PDHSEQR( JOB, COMPZ, N, ILO, IHI, H, DESCH, WR, WI, Z,
+      $                   HRSRC4, HCSRC4, LIWKOPT
+       LOGICAL            INITZ, LQUERY, WANTT, WANTZ, PAIR, BORDER
+       DOUBLE PRECISION   TMP1, TMP2, TMP3, TMP4, DUM1, DUM2, DUM3,
+-     $                   DUM4, ELEM1, ELEM2, ELEM3, ELEM4,
++     $                   DUM4, ELEM1, ELEM4,
+      $                   CS, SN, ELEM5, TMP, LWKOPT
+ *     ..
+ *     .. Local Arrays ..
+       INTEGER            DESCH2( DLEN_ )
++      DOUBLE PRECISION   ELEM2( 1 ), ELEM3( 1 )
+ *     ..
+ *     .. External Functions ..
+       INTEGER            PILAENVX, NUMROC, ICEIL
+@@ -566,28 +567,28 @@ SUBROUTINE PDHSEQR( JOB, COMPZ, N, ILO, IHI, H, DESCH, WR, WI, Z,
+                   IF( MYROW.EQ.HRSRC1 .AND. MYCOL.EQ.HCSRC1 ) THEN
+                      ELEM1 = H((JLOC1-1)*LLDH+ILOC1)
+                      IF( K.LT.N ) THEN
+-                        ELEM3 = H((JLOC1-1)*LLDH+ILOC1+1)
++                        ELEM3( 1 ) = H((JLOC1-1)*LLDH+ILOC1+1)
+                      ELSE
+-                        ELEM3 = ZERO
++                        ELEM3( 1 ) = ZERO
+                      END IF
+-                     IF( ELEM3.NE.ZERO ) THEN
+-                        ELEM2 = H((JLOC1)*LLDH+ILOC1)
++                     IF( ELEM3( 1 ).NE.ZERO ) THEN
++                        ELEM2( 1 ) = H((JLOC1)*LLDH+ILOC1)
+                         ELEM4 = H((JLOC1)*LLDH+ILOC1+1)
+-                        CALL DLANV2( ELEM1, ELEM2, ELEM3, ELEM4,
+-     $                       WR( K ), WI( K ), WR( K+1 ), WI( K+1 ),
+-     $                       SN, CS )
++                        CALL DLANV2( ELEM1, ELEM2( 1 ), ELEM3( 1 ),
++     $                       ELEM4, WR( K ), WI( K ), WR( K+1 ),
++     $                       WI( K+1 ), SN, CS )
+                         PAIR = .TRUE.
+                      ELSE
+                         IF( K.GT.1 ) THEN
+                            TMP = H((JLOC1-2)*LLDH+ILOC1)
+                            IF( TMP.NE.ZERO ) THEN
+                               ELEM1 = H((JLOC1-2)*LLDH+ILOC1-1)
+-                              ELEM2 = H((JLOC1-1)*LLDH+ILOC1-1)
+-                              ELEM3 = H((JLOC1-2)*LLDH+ILOC1)
++                              ELEM2( 1 ) = H((JLOC1-1)*LLDH+ILOC1-1)
++                              ELEM3( 1 ) = H((JLOC1-2)*LLDH+ILOC1)
+                               ELEM4 = H((JLOC1-1)*LLDH+ILOC1)
+-                              CALL DLANV2( ELEM1, ELEM2, ELEM3,
+-     $                             ELEM4, WR( K-1 ), WI( K-1 ),
+-     $                             WR( K ), WI( K ), SN, CS )
++                              CALL DLANV2( ELEM1, ELEM2( 1 ),
++     $                             ELEM3( 1 ), ELEM4, WR( K-1 ),
++     $                             WI( K-1 ), WR( K ), WI( K ), SN, CS )
+                            ELSE
+                               WR( K ) = ELEM1
+                            END IF
+@@ -620,12 +621,12 @@ SUBROUTINE PDHSEQR( JOB, COMPZ, N, ILO, IHI, H, DESCH, WR, WI, Z,
+             CALL INFOG2L( K+1, K+1, DESCH, NPROW, NPCOL, MYROW, MYCOL,
+      $           ILOC4, JLOC4, HRSRC4, HCSRC4 )
+             IF( MYROW.EQ.HRSRC2 .AND. MYCOL.EQ.HCSRC2 ) THEN
+-               ELEM2 = H((JLOC2-1)*LLDH+ILOC2)
++               ELEM2( 1 ) = H((JLOC2-1)*LLDH+ILOC2)
+                IF( HRSRC1.NE.HRSRC2 .OR. HCSRC1.NE.HCSRC2 )
+      $            CALL DGESD2D( ICTXT, 1, 1, ELEM2, 1, HRSRC1, HCSRC1)
+             END IF
+             IF( MYROW.EQ.HRSRC3 .AND. MYCOL.EQ.HCSRC3 ) THEN
+-               ELEM3 = H((JLOC3-1)*LLDH+ILOC3)
++               ELEM3( 1 ) = H((JLOC3-1)*LLDH+ILOC3)
+                IF( HRSRC1.NE.HRSRC3 .OR. HCSRC1.NE.HCSRC3 )
+      $            CALL DGESD2D( ICTXT, 1, 1, ELEM3, 1, HRSRC1, HCSRC1)
+             END IF
+@@ -651,8 +652,9 @@ SUBROUTINE PDHSEQR( JOB, COMPZ, N, ILO, IHI, H, DESCH, WR, WI, Z,
+                ELEM5 = WORK(2)
+                IF( ELEM5.EQ.ZERO ) THEN
+                   IF( WR( K ).EQ.ZERO .AND. WI( K ).EQ.ZERO ) THEN
+-                     CALL DLANV2( ELEM1, ELEM2, ELEM3, ELEM4, WR( K ),
+-     $                    WI( K ), WR( K+1 ), WI( K+1 ), SN, CS )
++                     CALL DLANV2( ELEM1, ELEM2( 1 ), ELEM3( 1 ), ELEM4,
++     $                    WR( K ), WI( K ), WR( K+1 ), WI( K+1 ), SN,
++     $                    CS )
+                   ELSEIF( WR( K+1 ).EQ.ZERO .AND. WI( K+1 ).EQ.ZERO )
+      $                 THEN
+                      WR( K+1 ) = ELEM4
+diff --git a/SRC/pdlacon.f b/SRC/pdlacon.f
+index b625d97..74b9eab 100644
+--- a/SRC/pdlacon.f
++++ b/SRC/pdlacon.f
+@@ -160,10 +160,10 @@ SUBROUTINE PDLACON( N, V, IV, JV, DESCV, X, IX, JX, DESCX, ISGN,
+       INTEGER            I, ICTXT, IFLAG, IIVX, IMAXROW, IOFFVX, IROFF,
+      $                   ITER, IVXCOL, IVXROW, J, JLAST, JJVX, JUMP,
+      $                   K, MYCOL, MYROW, NP, NPCOL, NPROW
+-      DOUBLE PRECISION   ALTSGN, ESTOLD, JLMAX, TEMP, XMAX
++      DOUBLE PRECISION   ALTSGN, ESTOLD, JLMAX, XMAX
+ *     ..
+ *     .. Local Arrays ..
+-      DOUBLE PRECISION   WORK( 2 )
++      DOUBLE PRECISION   ESTWORK( 1 ), TEMP( 1 ), WORK( 2 )
+ *     ..
+ *     .. External Subroutines ..
+       EXTERNAL           BLACS_GRIDINFO, DCOPY, DGEBR2D, DGEBS2D,
+@@ -184,6 +184,7 @@ SUBROUTINE PDLACON( N, V, IV, JV, DESCV, X, IX, JX, DESCX, ISGN,
+ *
+ *     Get grid parameters.
+ *
++      ESTWORK( 1 ) = EST
+       ICTXT = DESCX( CTXT_ )
+       CALL BLACS_GRIDINFO( ICTXT, NPROW, NPCOL, MYROW, MYCOL )
+ *
+@@ -215,21 +216,21 @@ SUBROUTINE PDLACON( N, V, IV, JV, DESCV, X, IX, JX, DESCX, ISGN,
+       IF( N.EQ.1 ) THEN
+          IF( MYROW.EQ.IVXROW ) THEN
+             V( IOFFVX ) = X( IOFFVX )
+-            EST = ABS( V( IOFFVX ) )
+-            CALL DGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1, EST, 1 )
++            ESTWORK( 1 ) = ABS( V( IOFFVX ) )
++            CALL DGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1, ESTWORK, 1 )
+          ELSE
+-            CALL DGEBR2D( ICTXT, 'Columnwise', ' ', 1, 1, EST, 1,
++            CALL DGEBR2D( ICTXT, 'Columnwise', ' ', 1, 1, ESTWORK, 1,
+      $                    IVXROW, MYCOL )
+          END IF
+ *        ... QUIT
+          GO TO 150
+       END IF
+-      CALL PDASUM( N, EST, X, IX, JX, DESCX, 1 )
++      CALL PDASUM( N, ESTWORK( 1 ), X, IX, JX, DESCX, 1 )
+       IF( DESCX( M_ ).EQ.1 .AND. N.EQ.1 ) THEN
+          IF( MYROW.EQ.IVXROW ) THEN
+-            CALL DGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1, EST, 1 )
++            CALL DGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1, ESTWORK, 1 )
+          ELSE
+-            CALL DGEBR2D( ICTXT, 'Columnwise', ' ', 1, 1, EST, 1,
++            CALL DGEBR2D( ICTXT, 'Columnwise', ' ', 1, 1, ESTWORK, 1,
+      $                    IVXROW, MYCOL )
+          END IF
+       END IF
+@@ -281,13 +282,13 @@ SUBROUTINE PDLACON( N, V, IV, JV, DESCV, X, IX, JX, DESCX, ISGN,
+ *
+    70 CONTINUE
+       CALL DCOPY( NP, X( IOFFVX ), 1, V( IOFFVX ), 1 )
+-      ESTOLD = EST
+-      CALL PDASUM( N, EST, V, IV, JV, DESCV, 1 )
++      ESTOLD = ESTWORK( 1 )
++      CALL PDASUM( N, ESTWORK( 1 ), V, IV, JV, DESCV, 1 )
+       IF( DESCV( M_ ).EQ.1 .AND. N.EQ.1 ) THEN
+          IF( MYROW.EQ.IVXROW ) THEN
+-            CALL DGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1, EST, 1 )
++            CALL DGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1, ESTWORK, 1 )
+          ELSE
+-            CALL DGEBR2D( ICTXT, 'Columnwise', ' ', 1, 1, EST, 1,
++            CALL DGEBR2D( ICTXT, 'Columnwise', ' ', 1, 1, ESTWORK, 1,
+      $                    IVXROW, MYCOL )
+          END IF
+       END IF
+@@ -305,7 +306,7 @@ SUBROUTINE PDLACON( N, V, IV, JV, DESCV, X, IX, JX, DESCX, ISGN,
+ *     REPEATED SIGN VECTOR DETECTED, HENCE ALGORITHM HAS CONVERGED.
+ *     ALONG WITH IT, TEST FOR CYCLING.
+ *
+-      IF( IFLAG.EQ.0 .OR. EST.LE.ESTOLD )
++      IF( IFLAG.EQ.0 .OR. ESTWORK( 1 ).LE.ESTOLD )
+      $   GO TO 120
+ *
+       DO 100 I = IOFFVX, IOFFVX+NP-1
+@@ -361,7 +362,7 @@ SUBROUTINE PDLACON( N, V, IV, JV, DESCV, X, IX, JX, DESCX, ISGN,
+ *     X HAS BEEN OVERWRITTEN BY A*X
+ *
+   140 CONTINUE
+-      CALL PDASUM( N, TEMP, X, IX, JX, DESCX, 1 )
++      CALL PDASUM( N, TEMP( 1 ), X, IX, JX, DESCX, 1 )
+       IF( DESCX( M_ ).EQ.1 .AND. N.EQ.1 ) THEN
+          IF( MYROW.EQ.IVXROW ) THEN
+             CALL DGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1, TEMP, 1 )
+@@ -370,15 +371,16 @@ SUBROUTINE PDLACON( N, V, IV, JV, DESCV, X, IX, JX, DESCX, ISGN,
+      $                    IVXROW, MYCOL )
+          END IF
+       END IF
+-      TEMP = TWO*( TEMP / DBLE( 3*N ) )
+-      IF( TEMP.GT.EST ) THEN
++      TEMP( 1 ) = TWO*( TEMP( 1 ) / DBLE( 3*N ) )
++      IF( TEMP( 1 ).GT.ESTWORK( 1 ) ) THEN
+          CALL DCOPY( NP, X( IOFFVX ), 1, V( IOFFVX ), 1 )
+-         EST = TEMP
++         ESTWORK( 1 ) = TEMP( 1 )
+       END IF
+ *
+   150 CONTINUE
+       KASE = 0
+ *
++      EST = ESTWORK( 1 )
+       RETURN
+ *
+ *     End of PDLACON
+diff --git a/SRC/pdlarf.f b/SRC/pdlarf.f
+index 29da1ac..41368d6 100644
+--- a/SRC/pdlarf.f
++++ b/SRC/pdlarf.f
+@@ -241,7 +241,7 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+      $                   IOFFV, IPW, IROFF, IVCOL, IVROW, JJC, JJV, LDC,
+      $                   LDV, MYCOL, MYROW, MP, NCC, NCV, NPCOL, NPROW,
+      $                   NQ, RDEST
+-      DOUBLE PRECISION   TAULOC
++      DOUBLE PRECISION   TAULOC( 1 )
+ *     ..
+ *     .. External Subroutines ..
+       EXTERNAL           BLACS_GRIDINFO, DCOPY, DGEBR2D, DGEBS2D,
+@@ -335,7 +335,7 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                      CALL DGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                             TAU( IIV ), 1 )
+-                     TAULOC = TAU( IIV )
++                     TAULOC( 1 ) = TAU( IIV )
+ *
+                   ELSE
+ *
+@@ -344,7 +344,7 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   END IF
+ *
+-                  IF( TAULOC.NE.ZERO ) THEN
++                  IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                    w := sub( C )' * v
+ *
+@@ -362,8 +362,8 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                    sub( C ) := sub( C ) - v * w'
+ *
+-                     CALL DGER( MP, NQ, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                          1, C( IOFFC ), LDC )
++                     CALL DGER( MP, NQ, -TAULOC( 1 ), WORK, 1,
++     $                          WORK( IPW ), 1, C( IOFFC ), LDC )
+                   END IF
+ *
+                END IF
+@@ -378,9 +378,9 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   IF( MYCOL.EQ.ICCOL ) THEN
+ *
+-                     TAULOC = TAU( JJV )
++                     TAULOC( 1 ) = TAU( JJV )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C )' * v
+ *
+@@ -397,8 +397,8 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                       sub( C ) := sub( C ) - v * w'
+ *
+-                        CALL DGER( MP, NQ, -TAULOC, V( IOFFV ), 1, WORK,
+-     $                             1, C( IOFFC ), LDC )
++                        CALL DGER( MP, NQ, -TAULOC( 1 ), V( IOFFV ), 1,
++     $                             WORK, 1, C( IOFFC ), LDC )
+                      END IF
+ *
+                   END IF
+@@ -420,9 +420,9 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+                      IPW = MP+1
+                      CALL DGERV2D( ICTXT, IPW, 1, WORK, IPW, MYROW,
+      $                             IVCOL )
+-                     TAULOC = WORK( IPW )
++                     TAULOC( 1 ) = WORK( IPW )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C )' * v
+ *
+@@ -440,7 +440,7 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                       sub( C ) := sub( C ) - v * w'
+ *
+-                        CALL DGER( MP, NQ, -TAULOC, WORK, 1,
++                        CALL DGER( MP, NQ, -TAULOC( 1 ), WORK, 1,
+      $                             WORK( IPW ), 1, C( IOFFC ), LDC )
+                      END IF
+ *
+@@ -470,7 +470,7 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   CALL DGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                          TAU( IIV ), 1 )
+-                  TAULOC = TAU( IIV )
++                  TAULOC( 1 ) = TAU( IIV )
+ *
+                ELSE
+ *
+@@ -479,7 +479,7 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C )' * v
+ *
+@@ -499,8 +499,8 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *                 sub( C ) := sub( C ) - v * w'
+ *
+                   IF( IOFFC.GT.0 )
+-     $               CALL DGER( MP, NQ, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                          1, C( IOFFC ), LDC )
++     $               CALL DGER( MP, NQ, -TAULOC( 1 ), WORK, 1,
++     $                          WORK( IPW ), 1, C( IOFFC ), LDC )
+                END IF
+ *
+             ELSE
+@@ -515,18 +515,18 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+                   WORK(IPW) = TAU( JJV )
+                   CALL DGEBS2D( ICTXT, 'Rowwise', ROWBTOP, IPW, 1,
+      $                          WORK, IPW )
+-                  TAULOC = TAU( JJV )
++                  TAULOC( 1 ) = TAU( JJV )
+ *
+                ELSE
+ *
+                   IPW = MP+1
+                   CALL DGEBR2D( ICTXT, 'Rowwise', ROWBTOP, IPW, 1, WORK,
+      $                          IPW, MYROW, IVCOL )
+-                  TAULOC = WORK( IPW )
++                  TAULOC( 1 ) = WORK( IPW )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C )' * v
+ *
+@@ -546,8 +546,8 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *                 sub( C ) := sub( C ) - v * w'
+ *
+                   IF( IOFFC.GT.0 )
+-     $               CALL DGER( MP, NQ, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                          1, C( IOFFC ), LDC )
++     $               CALL DGER( MP, NQ, -TAULOC( 1 ), WORK, 1,
++     $                          WORK( IPW ), 1, C( IOFFC ), LDC )
+                END IF
+ *
+             END IF
+@@ -576,9 +576,9 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   IF( MYROW.EQ.ICROW ) THEN
+ *
+-                     TAULOC = TAU( IIV )
++                     TAULOC( 1 ) = TAU( IIV )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C ) * v
+ *
+@@ -596,7 +596,7 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *                       sub( C ) := sub( C ) - w * v'
+ *
+                         IF( IOFFV.GT.0 .AND. IOFFC.GT.0 )
+-     $                     CALL DGER( MP, NQ, -TAULOC, WORK, 1,
++     $                     CALL DGER( MP, NQ, -TAULOC( 1 ), WORK, 1,
+      $                                V( IOFFV ), LDV, C( IOFFC ), LDC )
+                      END IF
+ *
+@@ -619,9 +619,9 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+                      IPW = NQ+1
+                      CALL DGERV2D( ICTXT, IPW, 1, WORK, IPW, IVROW,
+      $                             MYCOL )
+-                     TAULOC = WORK( IPW )
++                     TAULOC( 1 ) = WORK( IPW )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C ) * v
+ *
+@@ -639,7 +639,7 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                       sub( C ) := sub( C ) - w * v'
+ *
+-                        CALL DGER( MP, NQ, -TAULOC, WORK( IPW ), 1,
++                        CALL DGER( MP, NQ, -TAULOC( 1 ), WORK( IPW ), 1,
+      $                             WORK, 1, C( IOFFC ), LDC )
+                      END IF
+ *
+@@ -665,7 +665,7 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                      CALL DGEBS2D( ICTXT, 'Rowwise', ' ', 1, 1,
+      $                             TAU( JJV ), 1 )
+-                     TAULOC = TAU( JJV )
++                     TAULOC( 1 ) = TAU( JJV )
+ *
+                   ELSE
+ *
+@@ -674,7 +674,7 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   END IF
+ *
+-                  IF( TAULOC.NE.ZERO ) THEN
++                  IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                    w := sub( C ) * v
+ *
+@@ -692,8 +692,8 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                    sub( C ) := sub( C ) - w * v'
+ *
+-                     CALL DGER( MP, NQ, -TAULOC, WORK( IPW ), 1, WORK,
+-     $                          1, C( IOFFC ), LDC )
++                     CALL DGER( MP, NQ, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                          WORK, 1, C( IOFFC ), LDC )
+                   END IF
+ *
+                END IF
+@@ -718,18 +718,18 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+                   WORK(IPW) = TAU( IIV )
+                   CALL DGEBS2D( ICTXT, 'Columnwise', COLBTOP, IPW, 1,
+      $                          WORK, IPW )
+-                  TAULOC = TAU( IIV )
++                  TAULOC( 1 ) = TAU( IIV )
+ *
+                ELSE
+ *
+                   IPW = NQ+1
+                   CALL DGEBR2D( ICTXT, 'Columnwise', COLBTOP, IPW, 1,
+      $                          WORK, IPW, IVROW, MYCOL )
+-                  TAULOC = WORK( IPW )
++                  TAULOC( 1 ) = WORK( IPW )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C ) * v
+ *
+@@ -748,8 +748,8 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *                 sub( C ) := sub( C ) - w * v'
+ *
+                   IF( IOFFC.GT.0 )
+-     $               CALL DGER( MP, NQ, -TAULOC, WORK( IPW ), 1, WORK,
+-     $                          1, C( IOFFC ), LDC )
++     $               CALL DGER( MP, NQ, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                          WORK, 1, C( IOFFC ), LDC )
+                END IF
+ *
+             ELSE
+@@ -768,7 +768,7 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   CALL DGEBS2D( ICTXT, 'Rowwise', ' ', 1, 1, TAU( JJV ),
+      $                          1 )
+-                  TAULOC = TAU( JJV )
++                  TAULOC( 1 ) = TAU( JJV )
+ *
+                ELSE
+ *
+@@ -777,7 +777,7 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C ) * v
+ *
+@@ -795,8 +795,8 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                 sub( C ) := sub( C ) - w * v'
+ *
+-                  CALL DGER( MP, NQ, -TAULOC, WORK( IPW ), 1, WORK, 1,
+-     $                       C( IOFFC ), LDC )
++                  CALL DGER( MP, NQ, -TAULOC( 1 ), WORK( IPW ), 1, WORK,
++     $                       1, C( IOFFC ), LDC )
+                END IF
+ *
+             END IF
+diff --git a/SRC/pdlarz.f b/SRC/pdlarz.f
+index b91282c..f45c137 100644
+--- a/SRC/pdlarz.f
++++ b/SRC/pdlarz.f
+@@ -250,7 +250,7 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                   IVCOL, IVROW, JJC1, JJC2, JJV, LDC, LDV, MPC2,
+      $                   MPV, MYCOL, MYROW, NCC, NCV, NPCOL, NPROW,
+      $                   NQC2, NQV, RDEST
+-      DOUBLE PRECISION   TAULOC
++      DOUBLE PRECISION   TAULOC( 1 )
+ *     ..
+ *     .. External Subroutines ..
+       EXTERNAL           BLACS_GRIDINFO, DAXPY, DCOPY, DGEBR2D,
+@@ -369,7 +369,7 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                      CALL DGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                             TAU( IIV ), 1 )
+-                     TAULOC = TAU( IIV )
++                     TAULOC( 1 ) = TAU( IIV )
+ *
+                   ELSE
+ *
+@@ -378,7 +378,7 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   END IF
+ *
+-                  IF( TAULOC.NE.ZERO ) THEN
++                  IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                    w := sub( C )' * v
+ *
+@@ -401,9 +401,9 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                    sub( C ) := sub( C ) - v * w'
+ *
+                      IF( MYROW.EQ.ICROW1 )
+-     $                  CALL DAXPY( NQC2, -TAULOC, WORK( IPW ),
++     $                  CALL DAXPY( NQC2, -TAULOC( 1 ), WORK( IPW ),
+      $                              MAX( 1, NQC2 ), C( IOFFC1 ), LDC )
+-                     CALL DGER( MPV, NQC2, -TAULOC, WORK, 1,
++                     CALL DGER( MPV, NQC2, -TAULOC( 1 ), WORK, 1,
+      $                          WORK( IPW ), 1, C( IOFFC2 ), LDC )
+                   END IF
+ *
+@@ -419,9 +419,9 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   IF( MYCOL.EQ.ICCOL2 ) THEN
+ *
+-                     TAULOC = TAU( JJV )
++                     TAULOC( 1 ) = TAU( JJV )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C )' * v
+ *
+@@ -444,11 +444,11 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                       sub( C ) := sub( C ) - v * w'
+ *
+                         IF( MYROW.EQ.ICROW1 )
+-     $                     CALL DAXPY( NQC2, -TAULOC, WORK,
++     $                     CALL DAXPY( NQC2, -TAULOC( 1 ), WORK,
+      $                                 MAX( 1, NQC2 ), C( IOFFC1 ),
+      $                                 LDC )
+-                        CALL DGER( MPV, NQC2, -TAULOC, V( IOFFV ), 1,
+-     $                             WORK, 1, C( IOFFC2 ), LDC )
++                        CALL DGER( MPV, NQC2, -TAULOC( 1 ), V( IOFFV ),
++     $                             1, WORK, 1, C( IOFFC2 ), LDC )
+                      END IF
+ *
+                   END IF
+@@ -470,9 +470,9 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+                      IPW = MPV+1
+                      CALL DGERV2D( ICTXT, IPW, 1, WORK, IPW, MYROW,
+      $                             IVCOL )
+-                     TAULOC = WORK( IPW )
++                     TAULOC( 1 ) = WORK( IPW )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C )' * v
+ *
+@@ -495,10 +495,10 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                       sub( C ) := sub( C ) - v * w'
+ *
+                         IF( MYROW.EQ.ICROW1 )
+-     $                     CALL DAXPY( NQC2, -TAULOC, WORK( IPW ),
++     $                     CALL DAXPY( NQC2, -TAULOC( 1 ), WORK( IPW ),
+      $                                 MAX( 1, NQC2 ), C( IOFFC1 ),
+      $                                 LDC )
+-                        CALL DGER( MPV, NQC2, -TAULOC, WORK, 1,
++                        CALL DGER( MPV, NQC2, -TAULOC( 1 ), WORK, 1,
+      $                             WORK( IPW ), 1, C( IOFFC2 ), LDC )
+                      END IF
+ *
+@@ -529,7 +529,7 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   CALL DGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                          TAU( IIV ), 1 )
+-                  TAULOC = TAU( IIV )
++                  TAULOC( 1 ) = TAU( IIV )
+ *
+                ELSE
+ *
+@@ -538,7 +538,7 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C )' * v
+ *
+@@ -561,10 +561,10 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                 sub( C ) := sub( C ) - v * w'
+ *
+                   IF( MYROW.EQ.ICROW1 )
+-     $               CALL DAXPY( NQC2, -TAULOC, WORK( IPW ),
++     $               CALL DAXPY( NQC2, -TAULOC( 1 ), WORK( IPW ),
+      $                           MAX( 1, NQC2 ), C( IOFFC1 ), LDC )
+-                  CALL DGER( MPV, NQC2, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                       1, C( IOFFC2 ), LDC )
++                  CALL DGER( MPV, NQC2, -TAULOC( 1 ), WORK, 1,
++     $                       WORK( IPW ), 1, C( IOFFC2 ), LDC )
+                END IF
+ *
+             ELSE
+@@ -579,18 +579,18 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+                   WORK( IPW ) = TAU( JJV )
+                   CALL DGEBS2D( ICTXT, 'Rowwise', ROWBTOP, IPW, 1,
+      $                          WORK, IPW )
+-                  TAULOC = TAU( JJV )
++                  TAULOC( 1 ) = TAU( JJV )
+ *
+                ELSE
+ *
+                   IPW = MPV+1
+                   CALL DGEBR2D( ICTXT, 'Rowwise', ROWBTOP, IPW, 1, WORK,
+      $                          IPW, MYROW, IVCOL )
+-                  TAULOC = WORK( IPW )
++                  TAULOC( 1 ) = WORK( IPW )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C )' * v
+ *
+@@ -613,10 +613,10 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                 sub( C ) := sub( C ) - v * w'
+ *
+                   IF( MYROW.EQ.ICROW1 )
+-     $               CALL DAXPY( NQC2, -TAULOC, WORK( IPW ),
++     $               CALL DAXPY( NQC2, -TAULOC( 1 ), WORK( IPW ),
+      $                           MAX( 1, NQC2 ), C( IOFFC1 ), LDC )
+-                  CALL DGER( MPV, NQC2, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                       1, C( IOFFC2 ), LDC )
++                  CALL DGER( MPV, NQC2, -TAULOC( 1 ), WORK, 1,
++     $                       WORK( IPW ), 1, C( IOFFC2 ), LDC )
+                END IF
+ *
+             END IF
+@@ -645,9 +645,9 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   IF( MYROW.EQ.ICROW2 ) THEN
+ *
+-                     TAULOC = TAU( IIV )
++                     TAULOC( 1 ) = TAU( IIV )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C ) * v
+ *
+@@ -668,13 +668,13 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                               ICCOL2 )
+ *
+                         IF( MYCOL.EQ.ICCOL1 )
+-     $                     CALL DAXPY( MPC2, -TAULOC, WORK, 1,
++     $                     CALL DAXPY( MPC2, -TAULOC( 1 ), WORK, 1,
+      $                                 C( IOFFC1 ), 1 )
+ *
+ *                       sub( C ) := sub( C ) - w * v'
+ *
+                         IF( MPC2.GT.0 .AND. NQV.GT.0 )
+-     $                     CALL DGER( MPC2, NQV, -TAULOC, WORK, 1,
++     $                     CALL DGER( MPC2, NQV, -TAULOC( 1 ), WORK, 1,
+      $                                V( IOFFV ), LDV, C( IOFFC2 ),
+      $                                LDC )
+                      END IF
+@@ -698,9 +698,9 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+                      IPW = NQV+1
+                      CALL DGERV2D( ICTXT, IPW, 1, WORK, IPW, IVROW,
+      $                             MYCOL )
+-                     TAULOC = WORK( IPW )
++                     TAULOC( 1 ) = WORK( IPW )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C ) * v
+ *
+@@ -719,13 +719,13 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                                WORK( IPW ), MAX( 1, MPC2 ),
+      $                                RDEST, ICCOL2 )
+                         IF( MYCOL.EQ.ICCOL1 )
+-     $                     CALL DAXPY( MPC2, -TAULOC, WORK( IPW ), 1,
+-     $                                 C( IOFFC1 ), 1 )
++     $                     CALL DAXPY( MPC2, -TAULOC( 1 ), WORK( IPW ),
++     $                                 1, C( IOFFC1 ), 1 )
+ *
+ *                       sub( C ) := sub( C ) - w * v'
+ *
+-                        CALL DGER( MPC2, NQV, -TAULOC, WORK( IPW ), 1,
+-     $                             WORK, 1, C( IOFFC2 ), LDC )
++                        CALL DGER( MPC2, NQV, -TAULOC( 1 ), WORK( IPW ),
++     $                             1, WORK, 1, C( IOFFC2 ), LDC )
+                      END IF
+ *
+                   END IF
+@@ -750,7 +750,7 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                      CALL DGEBS2D( ICTXT, 'Rowwise', ' ', 1, 1,
+      $                             TAU( JJV ), 1 )
+-                     TAULOC = TAU( JJV )
++                     TAULOC( 1 ) = TAU( JJV )
+ *
+                   ELSE
+ *
+@@ -759,7 +759,7 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   END IF
+ *
+-                  IF( TAULOC.NE.ZERO ) THEN
++                  IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                    w := sub( C ) * v
+ *
+@@ -778,12 +778,12 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                             WORK( IPW ), MAX( 1, MPC2 ), RDEST,
+      $                             ICCOL2 )
+                      IF( MYCOL.EQ.ICCOL1 )
+-     $                  CALL DAXPY( MPC2, -TAULOC, WORK( IPW ), 1,
++     $                  CALL DAXPY( MPC2, -TAULOC( 1 ), WORK( IPW ), 1,
+      $                              C( IOFFC1 ), 1 )
+ *
+ *                    sub( C ) := sub( C ) - w * v'
+ *
+-                     CALL DGER( MPC2, NQV, -TAULOC, WORK( IPW ), 1,
++                     CALL DGER( MPC2, NQV, -TAULOC( 1 ), WORK( IPW ), 1,
+      $                          WORK, 1, C( IOFFC2 ), LDC )
+                   END IF
+ *
+@@ -808,18 +808,18 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+                   WORK( IPW ) = TAU( IIV )
+                   CALL DGEBS2D( ICTXT, 'Columnwise', COLBTOP, IPW, 1,
+      $                          WORK, IPW )
+-                  TAULOC = TAU( IIV )
++                  TAULOC( 1 ) = TAU( IIV )
+ *
+                ELSE
+ *
+                   IPW = NQV+1
+                   CALL DGEBR2D( ICTXT, 'Columnwise', COLBTOP, IPW, 1,
+      $                          WORK, IPW, IVROW, MYCOL )
+-                  TAULOC = WORK( IPW )
++                  TAULOC( 1 ) = WORK( IPW )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C ) * v
+ *
+@@ -839,13 +839,13 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                          WORK( IPW ), MAX( 1, MPC2 ), RDEST,
+      $                          ICCOL2 )
+                   IF( MYCOL.EQ.ICCOL1 )
+-     $               CALL DAXPY( MPC2, -TAULOC, WORK( IPW ), 1,
++     $               CALL DAXPY( MPC2, -TAULOC( 1 ), WORK( IPW ), 1,
+      $                           C( IOFFC1 ), 1 )
+ *
+ *                 sub( C ) := sub( C ) - w * v'
+ *
+-                  CALL DGER( MPC2, NQV, -TAULOC, WORK( IPW ), 1, WORK,
+-     $                       1, C( IOFFC2 ), LDC )
++                  CALL DGER( MPC2, NQV, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                       WORK, 1, C( IOFFC2 ), LDC )
+                END IF
+ *
+             ELSE
+@@ -864,7 +864,7 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   CALL DGEBS2D( ICTXT, 'Rowwise', ' ', 1, 1, TAU( JJV ),
+      $                          1 )
+-                  TAULOC = TAU( JJV )
++                  TAULOC( 1 ) = TAU( JJV )
+ *
+                ELSE
+ *
+@@ -873,7 +873,7 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C ) * v
+ *
+@@ -892,13 +892,13 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                          WORK( IPW ), MAX( 1, MPC2 ), RDEST,
+      $                          ICCOL2 )
+                   IF( MYCOL.EQ.ICCOL1 )
+-     $               CALL DAXPY( MPC2, -TAULOC, WORK( IPW ), 1,
++     $               CALL DAXPY( MPC2, -TAULOC( 1 ), WORK( IPW ), 1,
+      $                           C( IOFFC1 ), 1 )
+ *
+ *                 sub( C ) := sub( C ) - w * v'
+ *
+-                  CALL DGER( MPC2, NQV, -TAULOC, WORK( IPW ), 1, WORK,
+-     $                       1, C( IOFFC2 ), LDC )
++                  CALL DGER( MPC2, NQV, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                       WORK, 1, C( IOFFC2 ), LDC )
+                END IF
+ *
+             END IF
+diff --git a/SRC/pdlawil.f b/SRC/pdlawil.f
+index 90a4d74..e8bc3a0 100644
+--- a/SRC/pdlawil.f
++++ b/SRC/pdlawil.f
+@@ -120,10 +120,10 @@ SUBROUTINE PDLAWIL( II, JJ, M, A, DESCA, H44, H33, H43H34, V )
+       INTEGER            CONTXT, DOWN, HBL, ICOL, IROW, JSRC, LDA, LEFT,
+      $                   MODKM1, MYCOL, MYROW, NPCOL, NPROW, NUM, RIGHT,
+      $                   RSRC, UP
+-      DOUBLE PRECISION   H11, H12, H21, H22, H33S, H44S, S, V1, V2, V3
++      DOUBLE PRECISION   H22, H33S, H44S, S, V1, V2
+ *     ..
+ *     .. Local Arrays ..
+-      DOUBLE PRECISION   BUF( 4 )
++      DOUBLE PRECISION   BUF( 4 ), H11( 1 ), H12( 1 ), H21( 1 ), V3( 1 )
+ *     ..
+ *     .. External Subroutines ..
+       EXTERNAL           BLACS_GRIDINFO, DGERV2D, DGESD2D, INFOG2L
+@@ -170,18 +170,18 @@ SUBROUTINE PDLAWIL( II, JJ, M, A, DESCA, H44, H33, H43H34, V )
+             IF( NPCOL.GT.1 ) THEN
+                CALL DGERV2D( CONTXT, 1, 1, V3, 1, MYROW, LEFT )
+             ELSE
+-               V3 = A( ( ICOL-2 )*LDA+IROW )
++               V3( 1 ) = A( ( ICOL-2 )*LDA+IROW )
+             END IF
+             IF( NUM.GT.1 ) THEN
+                CALL DGERV2D( CONTXT, 4, 1, BUF, 4, UP, LEFT )
+-               H11 = BUF( 1 )
+-               H21 = BUF( 2 )
+-               H12 = BUF( 3 )
++               H11( 1 ) = BUF( 1 )
++               H21( 1 ) = BUF( 2 )
++               H12( 1 ) = BUF( 3 )
+                H22 = BUF( 4 )
+             ELSE
+-               H11 = A( ( ICOL-3 )*LDA+IROW-2 )
+-               H21 = A( ( ICOL-3 )*LDA+IROW-1 )
+-               H12 = A( ( ICOL-2 )*LDA+IROW-2 )
++               H11( 1 ) = A( ( ICOL-3 )*LDA+IROW-2 )
++               H21( 1 ) = A( ( ICOL-3 )*LDA+IROW-1 )
++               H12( 1 ) = A( ( ICOL-2 )*LDA+IROW-2 )
+                H22 = A( ( ICOL-2 )*LDA+IROW-1 )
+             END IF
+          END IF
+@@ -214,20 +214,20 @@ SUBROUTINE PDLAWIL( II, JJ, M, A, DESCA, H44, H33, H43H34, V )
+             IF( NUM.GT.1 ) THEN
+                CALL DGERV2D( CONTXT, 1, 1, H11, 1, UP, LEFT )
+             ELSE
+-               H11 = A( ( ICOL-3 )*LDA+IROW-2 )
++               H11( 1 ) = A( ( ICOL-3 )*LDA+IROW-2 )
+             END IF
+             IF( NPROW.GT.1 ) THEN
+                CALL DGERV2D( CONTXT, 1, 1, H12, 1, UP, MYCOL )
+             ELSE
+-               H12 = A( ( ICOL-2 )*LDA+IROW-2 )
++               H12( 1 ) = A( ( ICOL-2 )*LDA+IROW-2 )
+             END IF
+             IF( NPCOL.GT.1 ) THEN
+                CALL DGERV2D( CONTXT, 1, 1, H21, 1, MYROW, LEFT )
+             ELSE
+-               H21 = A( ( ICOL-3 )*LDA+IROW-1 )
++               H21( 1 ) = A( ( ICOL-3 )*LDA+IROW-1 )
+             END IF
+             H22 = A( ( ICOL-2 )*LDA+IROW-1 )
+-            V3 = A( ( ICOL-2 )*LDA+IROW )
++            V3( 1 ) = A( ( ICOL-2 )*LDA+IROW )
+          END IF
+       END IF
+       IF( ( MYROW.NE.II ) .OR. ( MYCOL.NE.JJ ) )
+@@ -236,24 +236,24 @@ SUBROUTINE PDLAWIL( II, JJ, M, A, DESCA, H44, H33, H43H34, V )
+       IF( MODKM1.GT.1 ) THEN
+          CALL INFOG2L( M+2, M+2, DESCA, NPROW, NPCOL, MYROW, MYCOL,
+      $                 IROW, ICOL, RSRC, JSRC )
+-         H11 = A( ( ICOL-3 )*LDA+IROW-2 )
+-         H21 = A( ( ICOL-3 )*LDA+IROW-1 )
+-         H12 = A( ( ICOL-2 )*LDA+IROW-2 )
++         H11( 1 ) = A( ( ICOL-3 )*LDA+IROW-2 )
++         H21( 1 ) = A( ( ICOL-3 )*LDA+IROW-1 )
++         H12( 1 ) = A( ( ICOL-2 )*LDA+IROW-2 )
+          H22 = A( ( ICOL-2 )*LDA+IROW-1 )
+-         V3 = A( ( ICOL-2 )*LDA+IROW )
++         V3( 1 ) = A( ( ICOL-2 )*LDA+IROW )
+       END IF
+ *
+-      H44S = H44 - H11
+-      H33S = H33 - H11
+-      V1 = ( H33S*H44S-H43H34 ) / H21 + H12
+-      V2 = H22 - H11 - H33S - H44S
+-      S = ABS( V1 ) + ABS( V2 ) + ABS( V3 )
++      H44S = H44 - H11( 1 )
++      H33S = H33 - H11( 1 )
++      V1 = ( H33S*H44S-H43H34 ) / H21( 1 ) + H12( 1 )
++      V2 = H22 - H11( 1 ) - H33S - H44S
++      S = ABS( V1 ) + ABS( V2 ) + ABS( V3( 1 ) )
+       V1 = V1 / S
+       V2 = V2 / S
+-      V3 = V3 / S
++      V3( 1 ) = V3( 1 ) / S
+       V( 1 ) = V1
+       V( 2 ) = V2
+-      V( 3 ) = V3
++      V( 3 ) = V3( 1 )
+ *
+       RETURN
+ *
+diff --git a/SRC/pdstebz.f b/SRC/pdstebz.f
+index e7006f9..bf4dacc 100644
+--- a/SRC/pdstebz.f
++++ b/SRC/pdstebz.f
+@@ -246,14 +246,14 @@ SUBROUTINE PDSTEBZ( ICTXT, RANGE, ORDER, N, VL, VU, IL, IU,
+      $                   ITMP2, J, JB, K, LAST, LEXTRA, LREQ, MYCOL,
+      $                   MYROW, NALPHA, NBETA, NCMP, NEIGINT, NEXT, NGL,
+      $                   NGLOB, NGU, NINT, NPCOL, NPROW, OFFSET,
+-     $                   ONEDCONTEXT, P, PREV, REXTRA, RREQ, SELF,
+-     $                   TORECV
++     $                   ONEDCONTEXT, P, PREV, REXTRA, RREQ, SELF
+       DOUBLE PRECISION   ALPHA, ATOLI, BETA, BNORM, DRECV, DSEND, GL,
+      $                   GU, INITVL, INITVU, LSAVE, MID, PIVMIN, RELTOL,
+      $                   SAFEMN, TMP1, TMP2, TNORM, ULP
+ *     ..
+ *     .. Local Arrays ..
+       INTEGER            IDUM( 5, 2 )
++      INTEGER            TORECV( 1, 1 )
+ *     ..
+ *     .. Executable Statements ..
+ *       This is just to keep ftnchek happy
+@@ -784,14 +784,14 @@ SUBROUTINE PDSTEBZ( ICTXT, RANGE, ORDER, N, VL, VU, IL, IU,
+          ELSE
+             CALL IGEBR2D( ONEDCONTEXT, 'ALL', ' ', 1, 1, TORECV, 1, 0,
+      $                    I-1 )
+-            IF( TORECV.NE.0 ) THEN
+-               CALL IGEBR2D( ONEDCONTEXT, 'ALL', ' ', TORECV, 1, IWORK,
+-     $                       TORECV, 0, I-1 )
+-               CALL DGEBR2D( ONEDCONTEXT, 'ALL', ' ', TORECV, 1, WORK,
+-     $                       TORECV, 0, I-1 )
+-               CALL IGEBR2D( ONEDCONTEXT, 'ALL', ' ', TORECV, 1,
+-     $                       IWORK( N+1 ), TORECV, 0, I-1 )
+-               DO 120 J = 1, TORECV
++            IF( TORECV( 1, 1 ).NE.0 ) THEN
++               CALL IGEBR2D( ONEDCONTEXT, 'ALL', ' ', TORECV( 1, 1 ), 1,
++     $                       IWORK, TORECV( 1, 1 ), 0, I-1 )
++               CALL DGEBR2D( ONEDCONTEXT, 'ALL', ' ', TORECV( 1, 1 ), 1,
++     $                       WORK, TORECV( 1, 1 ), 0, I-1 )
++               CALL IGEBR2D( ONEDCONTEXT, 'ALL', ' ', TORECV( 1, 1 ), 1,
++     $                       IWORK( N+1 ), TORECV( 1, 1 ), 0, I-1 )
++               DO 120 J = 1, TORECV( 1, 1 )
+                   W( IWORK( J ) ) = WORK( J )
+                   IBLOCK( IWORK( J ) ) = IWORK( N+J )
+   120          CONTINUE
+diff --git a/SRC/pdtrord.f b/SRC/pdtrord.f
+index 1f37d8e..3870574 100644
+--- a/SRC/pdtrord.f
++++ b/SRC/pdtrord.f
+@@ -328,12 +328,13 @@ SUBROUTINE PDTRORD( COMPQ, SELECT, PARA, N, T, IT, JT,
+      $                   EAST, WEST, ILOC4, SOUTH, NORTH, INDXS,
+      $                   ITT, JTT, ILEN, DLEN, INDXE, TRSRC1, TCSRC1,
+      $                   TRSRC2, TCSRC2, ILOS, DIR, TLIHI, TLILO, TLSEL,
+-     $                   ROUND, LAST, WIN0S, WIN0E, WINE, MMAX, MMIN
++     $                   ROUND, LAST, WIN0S, WIN0E, WINE
+       DOUBLE PRECISION   ELEM, ELEM1, ELEM2, ELEM3, ELEM4, SN, CS, TMP,
+      $                   ELEM5
+ *     ..
+ *     .. Local Arrays ..
+-      INTEGER            IBUFF( 8 ), IDUM1( 1 ), IDUM2( 1 )
++      INTEGER            IBUFF( 8 ), IDUM1( 1 ), IDUM2( 1 ), MMAX( 1 ),
++     $                   MMIN( 1 ), INFODUM( 1 )
+ *     ..
+ *     .. External Functions ..
+       LOGICAL            LSAME
+@@ -483,16 +484,16 @@ SUBROUTINE PDTRORD( COMPQ, SELECT, PARA, N, T, IT, JT,
+                END IF
+                IF( SELECT(K).NE.0 ) M = M + 1
+  10         CONTINUE
+-            MMAX = M
+-            MMIN = M
++            MMAX( 1 ) = M
++            MMIN( 1 ) = M
+             IF( NPROCS.GT.1 )
+      $         CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, MMAX, 1, -1,
+      $              -1, -1, -1, -1 )
+             IF( NPROCS.GT.1 )
+      $         CALL IGAMN2D( ICTXT, 'All', TOP, 1, 1, MMIN, 1, -1,
+      $              -1, -1, -1, -1 )
+-            IF( MMAX.GT.MMIN ) THEN
+-               M = MMAX
++            IF( MMAX( 1 ).GT.MMIN( 1 ) ) THEN
++               M = MMAX( 1 )
+                IF( NPROCS.GT.1 )
+      $            CALL IGAMX2D( ICTXT, 'All', TOP, N, 1, SELECT, N,
+      $                 -1, -1, -1, -1, -1 )
+@@ -520,9 +521,11 @@ SUBROUTINE PDTRORD( COMPQ, SELECT, PARA, N, T, IT, JT,
+ *
+ *     Global maximum on info.
+ *
+-      IF( NPROCS.GT.1 )
+-     $   CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, INFO, 1, -1, -1, -1,
++      IF( NPROCS.GT.1 ) THEN
++         CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, INFODUM, 1, -1, -1, -1,
+      $        -1, -1 )
++         INFO = INFODUM( 1 )
++      END IF
+ *
+ *     Return if some argument is incorrect.
+ *
+@@ -1576,9 +1579,11 @@ SUBROUTINE PDTRORD( COMPQ, SELECT, PARA, N, T, IT, JT,
+ *        experienced a failure in the reordering.
+ *
+          MYIERR = IERR
+-         IF( NPROCS.GT.1 )
+-     $      CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, IERR, 1, -1,
++         IF( NPROCS.GT.1 ) THEN
++            CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, INFODUM, 1, -1,
+      $           -1, -1, -1, -1 )
++            IERR = INFODUM( 1 )
++         END IF
+ *
+          IF( IERR.NE.0 ) THEN
+ *
+@@ -1586,9 +1591,11 @@ SUBROUTINE PDTRORD( COMPQ, SELECT, PARA, N, T, IT, JT,
+ *           to swap.
+ *
+             IF( MYIERR.NE.0 ) INFO = MAX(1,I+KKS-1)
+-            IF( NPROCS.GT.1 )
+-     $         CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, INFO, 1, -1,
++            IF( NPROCS.GT.1 ) THEN
++               CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, INFODUM, 1, -1,
+      $              -1, -1, -1, -1 )
++               INFO = INFODUM( 1 )
++            END IF
+             GO TO 300
+          END IF
+ *
+@@ -3245,9 +3252,11 @@ SUBROUTINE PDTRORD( COMPQ, SELECT, PARA, N, T, IT, JT,
+ *        experienced a failure in the reordering.
+ *
+          MYIERR = IERR
+-         IF( NPROCS.GT.1 )
+-     $      CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, IERR, 1, -1,
++         IF( NPROCS.GT.1 ) THEN
++            CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, INFODUM, 1, -1,
+      $           -1, -1, -1, -1 )
++            IERR = INFODUM( 1 )
++         END IF
+ *
+          IF( IERR.NE.0 ) THEN
+ *
+@@ -3255,9 +3264,11 @@ SUBROUTINE PDTRORD( COMPQ, SELECT, PARA, N, T, IT, JT,
+ *           to swap.
+ *
+             IF( MYIERR.NE.0 ) INFO = MAX(1,I+KKS-1)
+-            IF( NPROCS.GT.1 )
+-     $         CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, INFO, 1, -1,
++            IF( NPROCS.GT.1 ) THEN
++               CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, INFODUM, 1, -1,
+      $              -1, -1, -1, -1 )
++               IERR = INFODUM( 1 )
++            END IF
+             GO TO 300
+          END IF
+ *
+diff --git a/SRC/pdtrsen.f b/SRC/pdtrsen.f
+index 78c5599..c65ea91 100644
+--- a/SRC/pdtrsen.f
++++ b/SRC/pdtrsen.f
+@@ -354,13 +354,15 @@ SUBROUTINE PDTRSEN( JOB, COMPQ, SELECT, PARA, N, T, IT, JT,
+       LOGICAL            LQUERY, WANTBH, WANTQ, WANTS, WANTSP
+       INTEGER            ICOFFT12, ICTXT, IDUM1, IDUM2, IERR, ILOC1,
+      $                   IPW1, ITER, ITT, JLOC1, JTT, K, LIWMIN, LLDT,
+-     $                   LLDQ, LWMIN, MMAX, MMIN, MYROW, MYCOL, N1, N2,
++     $                   LLDQ, LWMIN, MYROW, MYCOL, N1, N2,
+      $                   NB, NOEXSY, NPCOL, NPROCS, NPROW, SPACE,
+      $                   T12ROWS, T12COLS, TCOLS, TCSRC, TROWS, TRSRC,
+      $                   WRK1, IWRK1, WRK2, IWRK2, WRK3, IWRK3
+-      DOUBLE PRECISION   DPDUM1, ELEM, EST, SCALE, RNORM
++      DOUBLE PRECISION   ELEM, EST, SCALE, RNORM
+ *     .. Local Arrays ..
+-      INTEGER            DESCT12( DLEN_ ), MBNB2( 2 )
++      INTEGER            DESCT12( DLEN_ ), MBNB2( 2 ), MMAX( 1 ),
++     $                   MMIN( 1 )
++      DOUBLE PRECISION   DPDUM1( 1 )
+ *     ..
+ *     .. External Functions ..
+       LOGICAL            LSAME
+@@ -521,16 +523,16 @@ SUBROUTINE PDTRSEN( JOB, COMPQ, SELECT, PARA, N, T, IT, JT,
+                END IF
+                IF( SELECT(K) ) M = M + 1
+  10         CONTINUE
+-            MMAX = M
+-            MMIN = M
++            MMAX( 1 ) = M
++            MMIN( 1 ) = M
+             IF( NPROCS.GT.1 )
+-     $           CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, MMAX, 1, -1,
+-     $                -1, -1, -1, -1 )
++     $           CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, MMAX( 1 ), 1,
++     $                -1, -1, -1, -1, -1 )
+             IF( NPROCS.GT.1 )
+-     $           CALL IGAMN2D( ICTXT, 'All', TOP, 1, 1, MMIN, 1, -1,
+-     $                -1, -1, -1, -1 )
+-            IF( MMAX.GT.MMIN ) THEN
+-               M = MMAX
++     $           CALL IGAMN2D( ICTXT, 'All', TOP, 1, 1, MMIN( 1 ), 1,
++     $                -1, -1, -1, -1, -1 )
++            IF( MMAX( 1 ).GT.MMIN( 1 ) ) THEN
++               M = MMAX( 1 )
+                IF( NPROCS.GT.1 )
+      $              CALL IGAMX2D( ICTXT, 'All', TOP, N, 1, IWORK, N,
+      $                   -1, -1, -1, -1, -1 )
+diff --git a/SRC/pshseqr.f b/SRC/pshseqr.f
+index 10eb24a..e8ecea9 100644
+--- a/SRC/pshseqr.f
++++ b/SRC/pshseqr.f
+@@ -259,11 +259,12 @@ SUBROUTINE PSHSEQR( JOB, COMPZ, N, ILO, IHI, H, DESCH, WR, WI, Z,
+      $                   HRSRC4, HCSRC4, LIWKOPT
+       LOGICAL            INITZ, LQUERY, WANTT, WANTZ, PAIR, BORDER
+       REAL               TMP1, TMP2, TMP3, TMP4, DUM1, DUM2, DUM3,
+-     $                   DUM4, ELEM1, ELEM2, ELEM3, ELEM4,
++     $                   DUM4, ELEM1, ELEM4,
+      $                   CS, SN, ELEM5, TMP, LWKOPT
+ *     ..
+ *     .. Local Arrays ..
+       INTEGER            DESCH2( DLEN_ )
++      REAL               ELEM2( 1 ), ELEM3( 1 )
+ *     ..
+ *     .. External Functions ..
+       INTEGER            PILAENVX, NUMROC, ICEIL
+@@ -566,28 +567,28 @@ SUBROUTINE PSHSEQR( JOB, COMPZ, N, ILO, IHI, H, DESCH, WR, WI, Z,
+                   IF( MYROW.EQ.HRSRC1 .AND. MYCOL.EQ.HCSRC1 ) THEN
+                      ELEM1 = H((JLOC1-1)*LLDH+ILOC1)
+                      IF( K.LT.N ) THEN
+-                        ELEM3 = H((JLOC1-1)*LLDH+ILOC1+1)
++                        ELEM3( 1 ) = H((JLOC1-1)*LLDH+ILOC1+1)
+                      ELSE
+-                        ELEM3 = ZERO
++                        ELEM3( 1 ) = ZERO
+                      END IF
+-                     IF( ELEM3.NE.ZERO ) THEN
+-                        ELEM2 = H((JLOC1)*LLDH+ILOC1)
++                     IF( ELEM3( 1 ).NE.ZERO ) THEN
++                        ELEM2( 1 ) = H((JLOC1)*LLDH+ILOC1)
+                         ELEM4 = H((JLOC1)*LLDH+ILOC1+1)
+-                        CALL SLANV2( ELEM1, ELEM2, ELEM3, ELEM4,
+-     $                       WR( K ), WI( K ), WR( K+1 ), WI( K+1 ),
+-     $                       SN, CS )
++                        CALL SLANV2( ELEM1, ELEM2( 1 ), ELEM3( 1 ),
++     $                       ELEM4, WR( K ), WI( K ), WR( K+1 ),
++     $                       WI( K+1 ), SN, CS )
+                         PAIR = .TRUE.
+                      ELSE
+                         IF( K.GT.1 ) THEN
+                            TMP = H((JLOC1-2)*LLDH+ILOC1)
+                            IF( TMP.NE.ZERO ) THEN
+                               ELEM1 = H((JLOC1-2)*LLDH+ILOC1-1)
+-                              ELEM2 = H((JLOC1-1)*LLDH+ILOC1-1)
+-                              ELEM3 = H((JLOC1-2)*LLDH+ILOC1)
++                              ELEM2( 1 ) = H((JLOC1-1)*LLDH+ILOC1-1)
++                              ELEM3( 1 ) = H((JLOC1-2)*LLDH+ILOC1)
+                               ELEM4 = H((JLOC1-1)*LLDH+ILOC1)
+-                              CALL SLANV2( ELEM1, ELEM2, ELEM3,
+-     $                             ELEM4, WR( K-1 ), WI( K-1 ),
+-     $                             WR( K ), WI( K ), SN, CS )
++                              CALL SLANV2( ELEM1, ELEM2( 1 ),
++     $                             ELEM3( 1 ), ELEM4, WR( K-1 ),
++     $                             WI( K-1 ), WR( K ), WI( K ), SN, CS )
+                            ELSE
+                               WR( K ) = ELEM1
+                            END IF
+@@ -620,12 +621,12 @@ SUBROUTINE PSHSEQR( JOB, COMPZ, N, ILO, IHI, H, DESCH, WR, WI, Z,
+             CALL INFOG2L( K+1, K+1, DESCH, NPROW, NPCOL, MYROW, MYCOL,
+      $           ILOC4, JLOC4, HRSRC4, HCSRC4 )
+             IF( MYROW.EQ.HRSRC2 .AND. MYCOL.EQ.HCSRC2 ) THEN
+-               ELEM2 = H((JLOC2-1)*LLDH+ILOC2)
++               ELEM2( 1 ) = H((JLOC2-1)*LLDH+ILOC2)
+                IF( HRSRC1.NE.HRSRC2 .OR. HCSRC1.NE.HCSRC2 )
+      $            CALL SGESD2D( ICTXT, 1, 1, ELEM2, 1, HRSRC1, HCSRC1)
+             END IF
+             IF( MYROW.EQ.HRSRC3 .AND. MYCOL.EQ.HCSRC3 ) THEN
+-               ELEM3 = H((JLOC3-1)*LLDH+ILOC3)
++               ELEM3( 1 ) = H((JLOC3-1)*LLDH+ILOC3)
+                IF( HRSRC1.NE.HRSRC3 .OR. HCSRC1.NE.HCSRC3 )
+      $            CALL SGESD2D( ICTXT, 1, 1, ELEM3, 1, HRSRC1, HCSRC1)
+             END IF
+@@ -651,8 +652,9 @@ SUBROUTINE PSHSEQR( JOB, COMPZ, N, ILO, IHI, H, DESCH, WR, WI, Z,
+                ELEM5 = WORK(2)
+                IF( ELEM5.EQ.ZERO ) THEN
+                   IF( WR( K ).EQ.ZERO .AND. WI( K ).EQ.ZERO ) THEN
+-                     CALL SLANV2( ELEM1, ELEM2, ELEM3, ELEM4, WR( K ),
+-     $                    WI( K ), WR( K+1 ), WI( K+1 ), SN, CS )
++                     CALL SLANV2( ELEM1, ELEM2( 1 ), ELEM3( 1 ), ELEM4,
++     $                    WR( K ), WI( K ), WR( K+1 ), WI( K+1 ), SN,
++     $                    CS )
+                   ELSEIF( WR( K+1 ).EQ.ZERO .AND. WI( K+1 ).EQ.ZERO )
+      $                 THEN
+                      WR( K+1 ) = ELEM4
+diff --git a/SRC/pslacon.f b/SRC/pslacon.f
+index 20d27ff..673bf1a 100644
+--- a/SRC/pslacon.f
++++ b/SRC/pslacon.f
+@@ -160,10 +160,12 @@ SUBROUTINE PSLACON( N, V, IV, JV, DESCV, X, IX, JX, DESCX, ISGN,
+       INTEGER            I, ICTXT, IFLAG, IIVX, IMAXROW, IOFFVX, IROFF,
+      $                   ITER, IVXCOL, IVXROW, J, JLAST, JJVX, JUMP,
+      $                   K, MYCOL, MYROW, NP, NPCOL, NPROW
+-      REAL               ALTSGN, ESTOLD, JLMAX, TEMP, XMAX
++      REAL               ALTSGN, ESTOLD, JLMAX, XMAX
+ *     ..
+ *     .. Local Arrays ..
+       REAL               WORK( 2 )
++      REAL               ESTWORK( 1 )
++      REAL               TEMP( 1 )
+ *     ..
+ *     .. External Subroutines ..
+       EXTERNAL           BLACS_GRIDINFO, IGSUM2D, INFOG2L, PSAMAX,
+@@ -184,6 +186,7 @@ SUBROUTINE PSLACON( N, V, IV, JV, DESCV, X, IX, JX, DESCX, ISGN,
+ *
+ *     Get grid parameters.
+ *
++      ESTWORK( 1 ) = EST
+       ICTXT = DESCX( CTXT_ )
+       CALL BLACS_GRIDINFO( ICTXT, NPROW, NPCOL, MYROW, MYCOL )
+ *
+@@ -215,21 +218,21 @@ SUBROUTINE PSLACON( N, V, IV, JV, DESCV, X, IX, JX, DESCX, ISGN,
+       IF( N.EQ.1 ) THEN
+          IF( MYROW.EQ.IVXROW ) THEN
+             V( IOFFVX ) = X( IOFFVX )
+-            EST = ABS( V( IOFFVX ) )
+-            CALL SGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1, EST, 1 )
++            ESTWORK( 1 ) = ABS( V( IOFFVX ) )
++            CALL SGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1, ESTWORK, 1 )
+          ELSE
+-            CALL SGEBR2D( ICTXT, 'Columnwise', ' ', 1, 1, EST, 1,
++            CALL SGEBR2D( ICTXT, 'Columnwise', ' ', 1, 1, ESTWORK, 1,
+      $                    IVXROW, MYCOL )
+          END IF
+ *        ... QUIT
+          GO TO 150
+       END IF
+-      CALL PSASUM( N, EST, X, IX, JX, DESCX, 1 )
++      CALL PSASUM( N, ESTWORK( 1 ), X, IX, JX, DESCX, 1 )
+       IF( DESCX( M_ ).EQ.1 .AND. N.EQ.1 ) THEN
+          IF( MYROW.EQ.IVXROW ) THEN
+-            CALL SGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1, EST, 1 )
++            CALL SGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1, ESTWORK, 1 )
+          ELSE
+-            CALL SGEBR2D( ICTXT, 'Columnwise', ' ', 1, 1, EST, 1,
++            CALL SGEBR2D( ICTXT, 'Columnwise', ' ', 1, 1, ESTWORK, 1,
+      $                    IVXROW, MYCOL )
+          END IF
+       END IF
+@@ -281,13 +284,13 @@ SUBROUTINE PSLACON( N, V, IV, JV, DESCV, X, IX, JX, DESCX, ISGN,
+ *
+    70 CONTINUE
+       CALL SCOPY( NP, X( IOFFVX ), 1, V( IOFFVX ), 1 )
+-      ESTOLD = EST
+-      CALL PSASUM( N, EST, V, IV, JV, DESCV, 1 )
++      ESTOLD = ESTWORK( 1 )
++      CALL PSASUM( N, ESTWORK( 1 ), V, IV, JV, DESCV, 1 )
+       IF( DESCV( M_ ).EQ.1 .AND. N.EQ.1 ) THEN
+          IF( MYROW.EQ.IVXROW ) THEN
+-            CALL SGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1, EST, 1 )
++            CALL SGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1, ESTWORK, 1 )
+          ELSE
+-            CALL SGEBR2D( ICTXT, 'Columnwise', ' ', 1, 1, EST, 1,
++            CALL SGEBR2D( ICTXT, 'Columnwise', ' ', 1, 1, ESTWORK, 1,
+      $                    IVXROW, MYCOL )
+          END IF
+       END IF
+@@ -305,7 +308,7 @@ SUBROUTINE PSLACON( N, V, IV, JV, DESCV, X, IX, JX, DESCX, ISGN,
+ *     REPEATED SIGN VECTOR DETECTED, HENCE ALGORITHM HAS CONVERGED.
+ *     ALONG WITH IT, TEST FOR CYCLING.
+ *
+-      IF( IFLAG.EQ.0 .OR. EST.LE.ESTOLD )
++      IF( IFLAG.EQ.0 .OR. ESTWORK( 1 ).LE.ESTOLD )
+      $   GO TO 120
+ *
+       DO 100 I = IOFFVX, IOFFVX+NP-1
+@@ -361,7 +364,7 @@ SUBROUTINE PSLACON( N, V, IV, JV, DESCV, X, IX, JX, DESCX, ISGN,
+ *     X HAS BEEN OVERWRITTEN BY A*X
+ *
+   140 CONTINUE
+-      CALL PSASUM( N, TEMP, X, IX, JX, DESCX, 1 )
++      CALL PSASUM( N, TEMP( 1 ), X, IX, JX, DESCX, 1 )
+       IF( DESCX( M_ ).EQ.1 .AND. N.EQ.1 ) THEN
+          IF( MYROW.EQ.IVXROW ) THEN
+             CALL SGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1, TEMP, 1 )
+@@ -370,15 +373,16 @@ SUBROUTINE PSLACON( N, V, IV, JV, DESCV, X, IX, JX, DESCX, ISGN,
+      $                    IVXROW, MYCOL )
+          END IF
+       END IF
+-      TEMP = TWO*( TEMP / REAL( 3*N ) )
+-      IF( TEMP.GT.EST ) THEN
++      TEMP( 1 ) = TWO*( TEMP( 1 ) / REAL( 3*N ) )
++      IF( TEMP( 1 ).GT.ESTWORK( 1 ) ) THEN
+          CALL SCOPY( NP, X( IOFFVX ), 1, V( IOFFVX ), 1 )
+-         EST = TEMP
++         ESTWORK( 1 ) = TEMP( 1 )
+       END IF
+ *
+   150 CONTINUE
+       KASE = 0
+ *
++      EST = ESTWORK( 1 )
+       RETURN
+ *
+ *     End of PSLACON
+diff --git a/SRC/pslarf.f b/SRC/pslarf.f
+index c1d3a15..39de0ed 100644
+--- a/SRC/pslarf.f
++++ b/SRC/pslarf.f
+@@ -241,7 +241,7 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+      $                   IOFFV, IPW, IROFF, IVCOL, IVROW, JJC, JJV, LDC,
+      $                   LDV, MYCOL, MYROW, MP, NCC, NCV, NPCOL, NPROW,
+      $                   NQ, RDEST
+-      REAL               TAULOC
++      REAL               TAULOC( 1 )
+ *     ..
+ *     .. External Subroutines ..
+       EXTERNAL           BLACS_GRIDINFO, INFOG2L, PB_TOPGET, PBSTRNV,
+@@ -335,7 +335,7 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                      CALL SGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                             TAU( IIV ), 1 )
+-                     TAULOC = TAU( IIV )
++                     TAULOC( 1 ) = TAU( IIV )
+ *
+                   ELSE
+ *
+@@ -344,7 +344,7 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   END IF
+ *
+-                  IF( TAULOC.NE.ZERO ) THEN
++                  IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                    w := sub( C )' * v
+ *
+@@ -362,8 +362,8 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                    sub( C ) := sub( C ) - v * w'
+ *
+-                     CALL SGER( MP, NQ, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                          1, C( IOFFC ), LDC )
++                     CALL SGER( MP, NQ, -TAULOC( 1 ), WORK, 1,
++     $                          WORK( IPW ), 1, C( IOFFC ), LDC )
+                   END IF
+ *
+                END IF
+@@ -378,9 +378,9 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   IF( MYCOL.EQ.ICCOL ) THEN
+ *
+-                     TAULOC = TAU( JJV )
++                     TAULOC( 1 ) = TAU( JJV )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C )' * v
+ *
+@@ -397,8 +397,8 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                       sub( C ) := sub( C ) - v * w'
+ *
+-                        CALL SGER( MP, NQ, -TAULOC, V( IOFFV ), 1, WORK,
+-     $                             1, C( IOFFC ), LDC )
++                        CALL SGER( MP, NQ, -TAULOC( 1 ), V( IOFFV ), 1,
++     $                             WORK, 1, C( IOFFC ), LDC )
+                      END IF
+ *
+                   END IF
+@@ -420,9 +420,9 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+                      IPW = MP+1
+                      CALL SGERV2D( ICTXT, IPW, 1, WORK, IPW, MYROW,
+      $                             IVCOL )
+-                     TAULOC = WORK( IPW )
++                     TAULOC( 1 ) = WORK( IPW )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C )' * v
+ *
+@@ -440,7 +440,7 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                       sub( C ) := sub( C ) - v * w'
+ *
+-                        CALL SGER( MP, NQ, -TAULOC, WORK, 1,
++                        CALL SGER( MP, NQ, -TAULOC( 1 ), WORK, 1,
+      $                             WORK( IPW ), 1, C( IOFFC ), LDC )
+                      END IF
+ *
+@@ -470,7 +470,7 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   CALL SGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                          TAU( IIV ), 1 )
+-                  TAULOC = TAU( IIV )
++                  TAULOC( 1 ) = TAU( IIV )
+ *
+                ELSE
+ *
+@@ -479,7 +479,7 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C )' * v
+ *
+@@ -499,8 +499,8 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *                 sub( C ) := sub( C ) - v * w'
+ *
+                   IF( IOFFC.GT.0 )
+-     $               CALL SGER( MP, NQ, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                          1, C( IOFFC ), LDC )
++     $               CALL SGER( MP, NQ, -TAULOC( 1 ), WORK, 1,
++     $                          WORK( IPW ), 1, C( IOFFC ), LDC )
+                END IF
+ *
+             ELSE
+@@ -515,18 +515,18 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+                   WORK(IPW) = TAU( JJV )
+                   CALL SGEBS2D( ICTXT, 'Rowwise', ROWBTOP, IPW, 1,
+      $                          WORK, IPW )
+-                  TAULOC = TAU( JJV )
++                  TAULOC( 1 ) = TAU( JJV )
+ *
+                ELSE
+ *
+                   IPW = MP+1
+                   CALL SGEBR2D( ICTXT, 'Rowwise', ROWBTOP, IPW, 1, WORK,
+      $                          IPW, MYROW, IVCOL )
+-                  TAULOC = WORK( IPW )
++                  TAULOC( 1 ) = WORK( IPW )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C )' * v
+ *
+@@ -546,8 +546,8 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *                 sub( C ) := sub( C ) - v * w'
+ *
+                   IF( IOFFC.GT.0 )
+-     $               CALL SGER( MP, NQ, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                          1, C( IOFFC ), LDC )
++     $               CALL SGER( MP, NQ, -TAULOC( 1 ), WORK, 1,
++     $                          WORK( IPW ), 1, C( IOFFC ), LDC )
+                END IF
+ *
+             END IF
+@@ -576,9 +576,9 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   IF( MYROW.EQ.ICROW ) THEN
+ *
+-                     TAULOC = TAU( IIV )
++                     TAULOC( 1 ) = TAU( IIV )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C ) * v
+ *
+@@ -596,7 +596,7 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *                       sub( C ) := sub( C ) - w * v'
+ *
+                         IF( IOFFV.GT.0 .AND. IOFFC.GT.0 )
+-     $                     CALL SGER( MP, NQ, -TAULOC, WORK, 1,
++     $                     CALL SGER( MP, NQ, -TAULOC( 1 ), WORK, 1,
+      $                                V( IOFFV ), LDV, C( IOFFC ), LDC )
+                      END IF
+ *
+@@ -619,9 +619,9 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+                      IPW = NQ+1
+                      CALL SGERV2D( ICTXT, IPW, 1, WORK, IPW, IVROW,
+      $                             MYCOL )
+-                     TAULOC = WORK( IPW )
++                     TAULOC( 1 ) = WORK( IPW )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C ) * v
+ *
+@@ -639,7 +639,7 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                       sub( C ) := sub( C ) - w * v'
+ *
+-                        CALL SGER( MP, NQ, -TAULOC, WORK( IPW ), 1,
++                        CALL SGER( MP, NQ, -TAULOC( 1 ), WORK( IPW ), 1,
+      $                             WORK, 1, C( IOFFC ), LDC )
+                      END IF
+ *
+@@ -665,7 +665,7 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                      CALL SGEBS2D( ICTXT, 'Rowwise', ' ', 1, 1,
+      $                             TAU( JJV ), 1 )
+-                     TAULOC = TAU( JJV )
++                     TAULOC( 1 ) = TAU( JJV )
+ *
+                   ELSE
+ *
+@@ -674,7 +674,7 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   END IF
+ *
+-                  IF( TAULOC.NE.ZERO ) THEN
++                  IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                    w := sub( C ) * v
+ *
+@@ -692,8 +692,8 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                    sub( C ) := sub( C ) - w * v'
+ *
+-                     CALL SGER( MP, NQ, -TAULOC, WORK( IPW ), 1, WORK,
+-     $                          1, C( IOFFC ), LDC )
++                     CALL SGER( MP, NQ, -TAULOC( 1 ), WORK( IPW ), 1
++     $                         , WORK, 1, C( IOFFC ), LDC )
+                   END IF
+ *
+                END IF
+@@ -718,18 +718,18 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+                   WORK(IPW) = TAU( IIV )
+                   CALL SGEBS2D( ICTXT, 'Columnwise', COLBTOP, IPW, 1,
+      $                          WORK, IPW )
+-                  TAULOC = TAU( IIV )
++                  TAULOC( 1 ) = TAU( IIV )
+ *
+                ELSE
+ *
+                   IPW = NQ+1
+                   CALL SGEBR2D( ICTXT, 'Columnwise', COLBTOP, IPW, 1,
+      $                          WORK, IPW, IVROW, MYCOL )
+-                  TAULOC = WORK( IPW )
++                  TAULOC( 1 ) = WORK( IPW )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C ) * v
+ *
+@@ -748,8 +748,8 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *                 sub( C ) := sub( C ) - w * v'
+ *
+                   IF( IOFFC.GT.0 )
+-     $               CALL SGER( MP, NQ, -TAULOC, WORK( IPW ), 1, WORK,
+-     $                          1, C( IOFFC ), LDC )
++     $               CALL SGER( MP, NQ, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                          WORK, 1, C( IOFFC ), LDC )
+                END IF
+ *
+             ELSE
+@@ -768,7 +768,7 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   CALL SGEBS2D( ICTXT, 'Rowwise', ' ', 1, 1, TAU( JJV ),
+      $                          1 )
+-                  TAULOC = TAU( JJV )
++                  TAULOC( 1 ) = TAU( JJV )
+ *
+                ELSE
+ *
+@@ -777,7 +777,7 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C ) * v
+ *
+@@ -795,8 +795,8 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                 sub( C ) := sub( C ) - w * v'
+ *
+-                  CALL SGER( MP, NQ, -TAULOC, WORK( IPW ), 1, WORK, 1,
+-     $                       C( IOFFC ), LDC )
++                  CALL SGER( MP, NQ, -TAULOC( 1 ), WORK( IPW ), 1, WORK,
++     $                       1, C( IOFFC ), LDC )
+                END IF
+ *
+             END IF
+diff --git a/SRC/pslarz.f b/SRC/pslarz.f
+index aa70db7..8901530 100644
+--- a/SRC/pslarz.f
++++ b/SRC/pslarz.f
+@@ -250,7 +250,7 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                   IVCOL, IVROW, JJC1, JJC2, JJV, LDC, LDV, MPC2,
+      $                   MPV, MYCOL, MYROW, NCC, NCV, NPCOL, NPROW,
+      $                   NQC2, NQV, RDEST
+-      REAL               TAULOC
++      REAL               TAULOC( 1 )
+ *     ..
+ *     .. External Subroutines ..
+       EXTERNAL           BLACS_GRIDINFO, INFOG2L, PB_TOPGET, PBSTRNV,
+@@ -369,7 +369,7 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                      CALL SGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                             TAU( IIV ), 1 )
+-                     TAULOC = TAU( IIV )
++                     TAULOC( 1 ) = TAU( IIV )
+ *
+                   ELSE
+ *
+@@ -378,7 +378,7 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   END IF
+ *
+-                  IF( TAULOC.NE.ZERO ) THEN
++                  IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                    w := sub( C )' * v
+ *
+@@ -401,9 +401,9 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                    sub( C ) := sub( C ) - v * w'
+ *
+                      IF( MYROW.EQ.ICROW1 )
+-     $                  CALL SAXPY( NQC2, -TAULOC, WORK( IPW ),
++     $                  CALL SAXPY( NQC2, -TAULOC( 1 ), WORK( IPW ),
+      $                              MAX( 1, NQC2 ), C( IOFFC1 ), LDC )
+-                     CALL SGER( MPV, NQC2, -TAULOC, WORK, 1,
++                     CALL SGER( MPV, NQC2, -TAULOC( 1 ), WORK, 1,
+      $                          WORK( IPW ), 1, C( IOFFC2 ), LDC )
+                   END IF
+ *
+@@ -419,9 +419,9 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   IF( MYCOL.EQ.ICCOL2 ) THEN
+ *
+-                     TAULOC = TAU( JJV )
++                     TAULOC( 1 ) = TAU( JJV )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C )' * v
+ *
+@@ -444,11 +444,11 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                       sub( C ) := sub( C ) - v * w'
+ *
+                         IF( MYROW.EQ.ICROW1 )
+-     $                     CALL SAXPY( NQC2, -TAULOC, WORK,
++     $                     CALL SAXPY( NQC2, -TAULOC( 1 ), WORK,
+      $                                 MAX( 1, NQC2 ), C( IOFFC1 ),
+      $                                 LDC )
+-                        CALL SGER( MPV, NQC2, -TAULOC, V( IOFFV ), 1,
+-     $                             WORK, 1, C( IOFFC2 ), LDC )
++                        CALL SGER( MPV, NQC2, -TAULOC( 1 ), V( IOFFV ),
++     $                             1, WORK, 1, C( IOFFC2 ), LDC )
+                      END IF
+ *
+                   END IF
+@@ -470,9 +470,9 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+                      IPW = MPV+1
+                      CALL SGERV2D( ICTXT, IPW, 1, WORK, IPW, MYROW,
+      $                             IVCOL )
+-                     TAULOC = WORK( IPW )
++                     TAULOC( 1 ) = WORK( IPW )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C )' * v
+ *
+@@ -495,10 +495,10 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                       sub( C ) := sub( C ) - v * w'
+ *
+                         IF( MYROW.EQ.ICROW1 )
+-     $                     CALL SAXPY( NQC2, -TAULOC, WORK( IPW ),
++     $                     CALL SAXPY( NQC2, -TAULOC( 1 ), WORK( IPW ),
+      $                                 MAX( 1, NQC2 ), C( IOFFC1 ),
+      $                                 LDC )
+-                        CALL SGER( MPV, NQC2, -TAULOC, WORK, 1,
++                        CALL SGER( MPV, NQC2, -TAULOC( 1 ), WORK, 1,
+      $                             WORK( IPW ), 1, C( IOFFC2 ), LDC )
+                      END IF
+ *
+@@ -529,7 +529,7 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   CALL SGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                          TAU( IIV ), 1 )
+-                  TAULOC = TAU( IIV )
++                  TAULOC( 1 ) = TAU( IIV )
+ *
+                ELSE
+ *
+@@ -538,7 +538,7 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C )' * v
+ *
+@@ -561,10 +561,10 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                 sub( C ) := sub( C ) - v * w'
+ *
+                   IF( MYROW.EQ.ICROW1 )
+-     $               CALL SAXPY( NQC2, -TAULOC, WORK( IPW ),
++     $               CALL SAXPY( NQC2, -TAULOC( 1 ), WORK( IPW ),
+      $                           MAX( 1, NQC2 ), C( IOFFC1 ), LDC )
+-                  CALL SGER( MPV, NQC2, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                       1, C( IOFFC2 ), LDC )
++                  CALL SGER( MPV, NQC2, -TAULOC( 1 ), WORK, 1,
++     $                       WORK( IPW ), 1, C( IOFFC2 ), LDC )
+                END IF
+ *
+             ELSE
+@@ -579,18 +579,18 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+                   WORK( IPW ) = TAU( JJV )
+                   CALL SGEBS2D( ICTXT, 'Rowwise', ROWBTOP, IPW, 1,
+      $                          WORK, IPW )
+-                  TAULOC = TAU( JJV )
++                  TAULOC( 1 ) = TAU( JJV )
+ *
+                ELSE
+ *
+                   IPW = MPV+1
+                   CALL SGEBR2D( ICTXT, 'Rowwise', ROWBTOP, IPW, 1, WORK,
+      $                          IPW, MYROW, IVCOL )
+-                  TAULOC = WORK( IPW )
++                  TAULOC( 1 ) = WORK( IPW )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C )' * v
+ *
+@@ -613,10 +613,10 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                 sub( C ) := sub( C ) - v * w'
+ *
+                   IF( MYROW.EQ.ICROW1 )
+-     $               CALL SAXPY( NQC2, -TAULOC, WORK( IPW ),
++     $               CALL SAXPY( NQC2, -TAULOC( 1 ), WORK( IPW ),
+      $                           MAX( 1, NQC2 ), C( IOFFC1 ), LDC )
+-                  CALL SGER( MPV, NQC2, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                       1, C( IOFFC2 ), LDC )
++                  CALL SGER( MPV, NQC2, -TAULOC( 1 ), WORK, 1,
++     $                       WORK( IPW ), 1, C( IOFFC2 ), LDC )
+                END IF
+ *
+             END IF
+@@ -645,9 +645,9 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   IF( MYROW.EQ.ICROW2 ) THEN
+ *
+-                     TAULOC = TAU( IIV )
++                     TAULOC( 1 ) = TAU( IIV )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C ) * v
+ *
+@@ -668,13 +668,13 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                               ICCOL2 )
+ *
+                         IF( MYCOL.EQ.ICCOL1 )
+-     $                     CALL SAXPY( MPC2, -TAULOC, WORK, 1,
++     $                     CALL SAXPY( MPC2, -TAULOC( 1 ), WORK, 1,
+      $                                 C( IOFFC1 ), 1 )
+ *
+ *                       sub( C ) := sub( C ) - w * v'
+ *
+                         IF( MPC2.GT.0 .AND. NQV.GT.0 )
+-     $                     CALL SGER( MPC2, NQV, -TAULOC, WORK, 1,
++     $                     CALL SGER( MPC2, NQV, -TAULOC( 1 ), WORK, 1,
+      $                                V( IOFFV ), LDV, C( IOFFC2 ),
+      $                                LDC )
+                      END IF
+@@ -698,9 +698,9 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+                      IPW = NQV+1
+                      CALL SGERV2D( ICTXT, IPW, 1, WORK, IPW, IVROW,
+      $                             MYCOL )
+-                     TAULOC = WORK( IPW )
++                     TAULOC( 1 ) = WORK( IPW )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C ) * v
+ *
+@@ -719,13 +719,13 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                                WORK( IPW ), MAX( 1, MPC2 ),
+      $                                RDEST, ICCOL2 )
+                         IF( MYCOL.EQ.ICCOL1 )
+-     $                     CALL SAXPY( MPC2, -TAULOC, WORK( IPW ), 1,
+-     $                                 C( IOFFC1 ), 1 )
++     $                     CALL SAXPY( MPC2, -TAULOC( 1 ), WORK( IPW ),
++     $                                 1, C( IOFFC1 ), 1 )
+ *
+ *                       sub( C ) := sub( C ) - w * v'
+ *
+-                        CALL SGER( MPC2, NQV, -TAULOC, WORK( IPW ), 1,
+-     $                             WORK, 1, C( IOFFC2 ), LDC )
++                        CALL SGER( MPC2, NQV, -TAULOC( 1 ), WORK( IPW ),
++     $                             1, WORK, 1, C( IOFFC2 ), LDC )
+                      END IF
+ *
+                   END IF
+@@ -750,7 +750,7 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                      CALL SGEBS2D( ICTXT, 'Rowwise', ' ', 1, 1,
+      $                             TAU( JJV ), 1 )
+-                     TAULOC = TAU( JJV )
++                     TAULOC( 1 ) = TAU( JJV )
+ *
+                   ELSE
+ *
+@@ -759,7 +759,7 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   END IF
+ *
+-                  IF( TAULOC.NE.ZERO ) THEN
++                  IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                    w := sub( C ) * v
+ *
+@@ -778,12 +778,12 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                             WORK( IPW ), MAX( 1, MPC2 ), RDEST,
+      $                             ICCOL2 )
+                      IF( MYCOL.EQ.ICCOL1 )
+-     $                  CALL SAXPY( MPC2, -TAULOC, WORK( IPW ), 1,
++     $                  CALL SAXPY( MPC2, -TAULOC( 1 ), WORK( IPW ), 1,
+      $                              C( IOFFC1 ), 1 )
+ *
+ *                    sub( C ) := sub( C ) - w * v'
+ *
+-                     CALL SGER( MPC2, NQV, -TAULOC, WORK( IPW ), 1,
++                     CALL SGER( MPC2, NQV, -TAULOC( 1 ), WORK( IPW ), 1,
+      $                          WORK, 1, C( IOFFC2 ), LDC )
+                   END IF
+ *
+@@ -808,18 +808,18 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+                   WORK( IPW ) = TAU( IIV )
+                   CALL SGEBS2D( ICTXT, 'Columnwise', COLBTOP, IPW, 1,
+      $                          WORK, IPW )
+-                  TAULOC = TAU( IIV )
++                  TAULOC( 1 ) = TAU( IIV )
+ *
+                ELSE
+ *
+                   IPW = NQV+1
+                   CALL SGEBR2D( ICTXT, 'Columnwise', COLBTOP, IPW, 1,
+      $                          WORK, IPW, IVROW, MYCOL )
+-                  TAULOC = WORK( IPW )
++                  TAULOC( 1 ) = WORK( IPW )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C ) * v
+ *
+@@ -839,13 +839,13 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                          WORK( IPW ), MAX( 1, MPC2 ), RDEST,
+      $                          ICCOL2 )
+                   IF( MYCOL.EQ.ICCOL1 )
+-     $               CALL SAXPY( MPC2, -TAULOC, WORK( IPW ), 1,
++     $               CALL SAXPY( MPC2, -TAULOC( 1 ), WORK( IPW ), 1,
+      $                           C( IOFFC1 ), 1 )
+ *
+ *                 sub( C ) := sub( C ) - w * v'
+ *
+-                  CALL SGER( MPC2, NQV, -TAULOC, WORK( IPW ), 1, WORK,
+-     $                       1, C( IOFFC2 ), LDC )
++                  CALL SGER( MPC2, NQV, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                       WORK, 1, C( IOFFC2 ), LDC )
+                END IF
+ *
+             ELSE
+@@ -864,7 +864,7 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   CALL SGEBS2D( ICTXT, 'Rowwise', ' ', 1, 1, TAU( JJV ),
+      $                          1 )
+-                  TAULOC = TAU( JJV )
++                  TAULOC( 1 ) = TAU( JJV )
+ *
+                ELSE
+ *
+@@ -873,7 +873,7 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C ) * v
+ *
+@@ -892,13 +892,13 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                          WORK( IPW ), MAX( 1, MPC2 ), RDEST,
+      $                          ICCOL2 )
+                   IF( MYCOL.EQ.ICCOL1 )
+-     $               CALL SAXPY( MPC2, -TAULOC, WORK( IPW ), 1,
++     $               CALL SAXPY( MPC2, -TAULOC( 1 ), WORK( IPW ), 1,
+      $                           C( IOFFC1 ), 1 )
+ *
+ *                 sub( C ) := sub( C ) - w * v'
+ *
+-                  CALL SGER( MPC2, NQV, -TAULOC, WORK( IPW ), 1, WORK,
+-     $                       1, C( IOFFC2 ), LDC )
++                  CALL SGER( MPC2, NQV, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                       WORK, 1, C( IOFFC2 ), LDC )
+                END IF
+ *
+             END IF
+diff --git a/SRC/pslawil.f b/SRC/pslawil.f
+index e04c16b..671e08e 100644
+--- a/SRC/pslawil.f
++++ b/SRC/pslawil.f
+@@ -120,10 +120,14 @@ SUBROUTINE PSLAWIL( II, JJ, M, A, DESCA, H44, H33, H43H34, V )
+       INTEGER            CONTXT, DOWN, HBL, ICOL, IROW, JSRC, LDA, LEFT,
+      $                   MODKM1, MYCOL, MYROW, NPCOL, NPROW, NUM, RIGHT,
+      $                   RSRC, UP
+-      REAL               H11, H12, H21, H22, H33S, H44S, S, V1, V2, V3
++      REAL               H22, H33S, H44S, S, V1, V2
+ *     ..
+ *     .. Local Arrays ..
+       REAL               BUF( 4 )
++      REAL               H11( 1 )
++      REAL               H12( 1 )
++      REAL               H21( 1 )
++      REAL               V3( 1 )
+ *     ..
+ *     .. External Subroutines ..
+       EXTERNAL           BLACS_GRIDINFO, SGERV2D, SGESD2D, INFOG2L
+@@ -170,18 +174,18 @@ SUBROUTINE PSLAWIL( II, JJ, M, A, DESCA, H44, H33, H43H34, V )
+             IF( NPCOL.GT.1 ) THEN
+                CALL SGERV2D( CONTXT, 1, 1, V3, 1, MYROW, LEFT )
+             ELSE
+-               V3 = A( ( ICOL-2 )*LDA+IROW )
++               V3( 1 ) = A( ( ICOL-2 )*LDA+IROW )
+             END IF
+             IF( NUM.GT.1 ) THEN
+                CALL SGERV2D( CONTXT, 4, 1, BUF, 4, UP, LEFT )
+-               H11 = BUF( 1 )
+-               H21 = BUF( 2 )
+-               H12 = BUF( 3 )
++               H11( 1 ) = BUF( 1 )
++               H21( 1 ) = BUF( 2 )
++               H12( 1 ) = BUF( 3 )
+                H22 = BUF( 4 )
+             ELSE
+-               H11 = A( ( ICOL-3 )*LDA+IROW-2 )
+-               H21 = A( ( ICOL-3 )*LDA+IROW-1 )
+-               H12 = A( ( ICOL-2 )*LDA+IROW-2 )
++               H11( 1 ) = A( ( ICOL-3 )*LDA+IROW-2 )
++               H21( 1 ) = A( ( ICOL-3 )*LDA+IROW-1 )
++               H12( 1 ) = A( ( ICOL-2 )*LDA+IROW-2 )
+                H22 = A( ( ICOL-2 )*LDA+IROW-1 )
+             END IF
+          END IF
+@@ -214,20 +218,20 @@ SUBROUTINE PSLAWIL( II, JJ, M, A, DESCA, H44, H33, H43H34, V )
+             IF( NUM.GT.1 ) THEN
+                CALL SGERV2D( CONTXT, 1, 1, H11, 1, UP, LEFT )
+             ELSE
+-               H11 = A( ( ICOL-3 )*LDA+IROW-2 )
++               H11( 1 ) = A( ( ICOL-3 )*LDA+IROW-2 )
+             END IF
+             IF( NPROW.GT.1 ) THEN
+                CALL SGERV2D( CONTXT, 1, 1, H12, 1, UP, MYCOL )
+             ELSE
+-               H12 = A( ( ICOL-2 )*LDA+IROW-2 )
++               H12( 1 ) = A( ( ICOL-2 )*LDA+IROW-2 )
+             END IF
+             IF( NPCOL.GT.1 ) THEN
+                CALL SGERV2D( CONTXT, 1, 1, H21, 1, MYROW, LEFT )
+             ELSE
+-               H21 = A( ( ICOL-3 )*LDA+IROW-1 )
++               H21( 1 ) = A( ( ICOL-3 )*LDA+IROW-1 )
+             END IF
+             H22 = A( ( ICOL-2 )*LDA+IROW-1 )
+-            V3 = A( ( ICOL-2 )*LDA+IROW )
++            V3( 1 ) = A( ( ICOL-2 )*LDA+IROW )
+          END IF
+       END IF
+       IF( ( MYROW.NE.II ) .OR. ( MYCOL.NE.JJ ) )
+@@ -236,24 +240,24 @@ SUBROUTINE PSLAWIL( II, JJ, M, A, DESCA, H44, H33, H43H34, V )
+       IF( MODKM1.GT.1 ) THEN
+          CALL INFOG2L( M+2, M+2, DESCA, NPROW, NPCOL, MYROW, MYCOL,
+      $                 IROW, ICOL, RSRC, JSRC )
+-         H11 = A( ( ICOL-3 )*LDA+IROW-2 )
+-         H21 = A( ( ICOL-3 )*LDA+IROW-1 )
+-         H12 = A( ( ICOL-2 )*LDA+IROW-2 )
++         H11( 1 ) = A( ( ICOL-3 )*LDA+IROW-2 )
++         H21( 1 ) = A( ( ICOL-3 )*LDA+IROW-1 )
++         H12( 1 ) = A( ( ICOL-2 )*LDA+IROW-2 )
+          H22 = A( ( ICOL-2 )*LDA+IROW-1 )
+-         V3 = A( ( ICOL-2 )*LDA+IROW )
++         V3( 1 ) = A( ( ICOL-2 )*LDA+IROW )
+       END IF
+ *
+-      H44S = H44 - H11
+-      H33S = H33 - H11
+-      V1 = ( H33S*H44S-H43H34 ) / H21 + H12
+-      V2 = H22 - H11 - H33S - H44S
+-      S = ABS( V1 ) + ABS( V2 ) + ABS( V3 )
++      H44S = H44 - H11( 1 )
++      H33S = H33 - H11( 1 )
++      V1 = ( H33S*H44S-H43H34 ) / H21( 1 ) + H12( 1 )
++      V2 = H22 - H11( 1 ) - H33S - H44S
++      S = ABS( V1 ) + ABS( V2 ) + ABS( V3( 1 ) )
+       V1 = V1 / S
+       V2 = V2 / S
+-      V3 = V3 / S
++      V3( 1 ) = V3( 1 ) / S
+       V( 1 ) = V1
+       V( 2 ) = V2
+-      V( 3 ) = V3
++      V( 3 ) = V3( 1 )
+ *
+       RETURN
+ *
+diff --git a/SRC/psstebz.f b/SRC/psstebz.f
+index a8a2496..7e588a9 100644
+--- a/SRC/psstebz.f
++++ b/SRC/psstebz.f
+@@ -244,14 +244,14 @@ SUBROUTINE PSSTEBZ( ICTXT, RANGE, ORDER, N, VL, VU, IL, IU,
+      $                   ITMP2, J, JB, K, LAST, LEXTRA, LREQ, MYCOL,
+      $                   MYROW, NALPHA, NBETA, NCMP, NEIGINT, NEXT, NGL,
+      $                   NGLOB, NGU, NINT, NPCOL, NPROW, OFFSET,
+-     $                   ONEDCONTEXT, P, PREV, REXTRA, RREQ, SELF,
+-     $                   TORECV
++     $                   ONEDCONTEXT, P, PREV, REXTRA, RREQ, SELF
+       REAL               ALPHA, ATOLI, BETA, BNORM, DRECV, DSEND, GL,
+      $                   GU, INITVL, INITVU, LSAVE, MID, PIVMIN, RELTOL,
+      $                   SAFEMN, TMP1, TMP2, TNORM, ULP
+ *     ..
+ *     .. Local Arrays ..
+       INTEGER            IDUM( 5, 2 )
++      INTEGER            TORECV( 1, 1 )
+ *     ..
+ *     .. Executable Statements ..
+ *       This is just to keep ftnchek happy
+@@ -774,14 +774,14 @@ SUBROUTINE PSSTEBZ( ICTXT, RANGE, ORDER, N, VL, VU, IL, IU,
+          ELSE
+             CALL IGEBR2D( ONEDCONTEXT, 'ALL', ' ', 1, 1, TORECV, 1, 0,
+      $                    I-1 )
+-            IF( TORECV.NE.0 ) THEN
+-               CALL IGEBR2D( ONEDCONTEXT, 'ALL', ' ', TORECV, 1, IWORK,
+-     $                       TORECV, 0, I-1 )
+-               CALL SGEBR2D( ONEDCONTEXT, 'ALL', ' ', TORECV, 1, WORK,
+-     $                       TORECV, 0, I-1 )
+-               CALL IGEBR2D( ONEDCONTEXT, 'ALL', ' ', TORECV, 1,
+-     $                       IWORK( N+1 ), TORECV, 0, I-1 )
+-               DO 120 J = 1, TORECV
++            IF( TORECV( 1, 1 ).NE.0 ) THEN
++               CALL IGEBR2D( ONEDCONTEXT, 'ALL', ' ', TORECV( 1, 1 ), 1,
++     $                       IWORK, TORECV( 1, 1 ), 0, I-1 )
++               CALL SGEBR2D( ONEDCONTEXT, 'ALL', ' ', TORECV( 1, 1 ), 1,
++     $                       WORK, TORECV( 1, 1 ), 0, I-1 )
++               CALL IGEBR2D( ONEDCONTEXT, 'ALL', ' ', TORECV( 1, 1 ), 1,
++     $                       IWORK( N+1 ), TORECV( 1, 1 ), 0, I-1 )
++               DO 120 J = 1, TORECV( 1, 1 )
+                   W( IWORK( J ) ) = WORK( J )
+                   IBLOCK( IWORK( J ) ) = IWORK( N+J )
+   120          CONTINUE
+diff --git a/SRC/pstrord.f b/SRC/pstrord.f
+index 3562242..5cdb549 100644
+--- a/SRC/pstrord.f
++++ b/SRC/pstrord.f
+@@ -328,12 +328,13 @@ SUBROUTINE PSTRORD( COMPQ, SELECT, PARA, N, T, IT, JT,
+      $                   EAST, WEST, ILOC4, SOUTH, NORTH, INDXS,
+      $                   ITT, JTT, ILEN, DLEN, INDXE, TRSRC1, TCSRC1,
+      $                   TRSRC2, TCSRC2, ILOS, DIR, TLIHI, TLILO, TLSEL,
+-     $                   ROUND, LAST, WIN0S, WIN0E, WINE, MMAX, MMIN
++     $                   ROUND, LAST, WIN0S, WIN0E, WINE
+       REAL               ELEM, ELEM1, ELEM2, ELEM3, ELEM4, SN, CS, TMP,
+      $                   ELEM5
+ *     ..
+ *     .. Local Arrays ..
+-      INTEGER            IBUFF( 8 ), IDUM1( 1 ), IDUM2( 1 )
++      INTEGER            IBUFF( 8 ), IDUM1( 1 ), IDUM2( 1 ), MMAX( 1 ),
++     $                    MMIN( 1 ), INFODUM( 1 )
+ *     ..
+ *     .. External Functions ..
+       LOGICAL            LSAME
+@@ -483,16 +484,16 @@ SUBROUTINE PSTRORD( COMPQ, SELECT, PARA, N, T, IT, JT,
+                END IF
+                IF( SELECT(K).NE.0 ) M = M + 1
+  10         CONTINUE
+-            MMAX = M
+-            MMIN = M
++            MMAX( 1 ) = M
++            MMIN( 1 ) = M
+             IF( NPROCS.GT.1 )
+      $         CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, MMAX, 1, -1,
+      $              -1, -1, -1, -1 )
+             IF( NPROCS.GT.1 )
+      $         CALL IGAMN2D( ICTXT, 'All', TOP, 1, 1, MMIN, 1, -1,
+      $              -1, -1, -1, -1 )
+-            IF( MMAX.GT.MMIN ) THEN
+-               M = MMAX
++            IF( MMAX( 1 ).GT.MMIN( 1 ) ) THEN
++               M = MMAX( 1 )
+                IF( NPROCS.GT.1 )
+      $            CALL IGAMX2D( ICTXT, 'All', TOP, N, 1, SELECT, N,
+      $                 -1, -1, -1, -1, -1 )
+@@ -520,9 +521,11 @@ SUBROUTINE PSTRORD( COMPQ, SELECT, PARA, N, T, IT, JT,
+ *
+ *     Global maximum on info.
+ *
+-      IF( NPROCS.GT.1 )
+-     $   CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, INFO, 1, -1, -1, -1,
+-     $        -1, -1 )
++      IF( NPROCS.GT.1 ) THEN
++            CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, INFODUM, 1, -1, -1,
++     $        -1, -1, -1 )
++            INFO = INFODUM( 1 )
++      END IF
+ *
+ *     Return if some argument is incorrect.
+ *
+@@ -1576,9 +1579,11 @@ SUBROUTINE PSTRORD( COMPQ, SELECT, PARA, N, T, IT, JT,
+ *        experienced a failure in the reordering.
+ *
+          MYIERR = IERR
+-         IF( NPROCS.GT.1 )
+-     $      CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, IERR, 1, -1,
++         IF( NPROCS.GT.1 ) THEN
++            CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, INFODUM, 1, -1,
+      $           -1, -1, -1, -1 )
++            IERR = INFODUM( 1 )
++         END IF
+ *
+          IF( IERR.NE.0 ) THEN
+ *
+@@ -1586,9 +1591,11 @@ SUBROUTINE PSTRORD( COMPQ, SELECT, PARA, N, T, IT, JT,
+ *           to swap.
+ *
+             IF( MYIERR.NE.0 ) INFO = MAX(1,I+KKS-1)
+-            IF( NPROCS.GT.1 )
+-     $         CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, INFO, 1, -1,
++            IF( NPROCS.GT.1 ) THEN
++               CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, INFODUM, 1, -1,
+      $              -1, -1, -1, -1 )
++               INFO = INFODUM( 1 )
++            END IF
+             GO TO 300
+          END IF
+ *
+@@ -3245,9 +3252,11 @@ SUBROUTINE PSTRORD( COMPQ, SELECT, PARA, N, T, IT, JT,
+ *        experienced a failure in the reordering.
+ *
+          MYIERR = IERR
+-         IF( NPROCS.GT.1 )
+-     $      CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, IERR, 1, -1,
++         IF( NPROCS.GT.1 ) THEN
++            CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, INFODUM, 1, -1,
+      $           -1, -1, -1, -1 )
++            IERR = INFODUM( 1 )
++         END IF
+ *
+          IF( IERR.NE.0 ) THEN
+ *
+@@ -3255,9 +3264,11 @@ SUBROUTINE PSTRORD( COMPQ, SELECT, PARA, N, T, IT, JT,
+ *           to swap.
+ *
+             IF( MYIERR.NE.0 ) INFO = MAX(1,I+KKS-1)
+-            IF( NPROCS.GT.1 )
+-     $         CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, INFO, 1, -1,
++            IF( NPROCS.GT.1 ) THEN
++               CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, INFODUM, 1, -1,
+      $              -1, -1, -1, -1 )
++               INFO = INFODUM( 1 )
++            END IF
+             GO TO 300
+          END IF
+ *
+diff --git a/SRC/pstrsen.f b/SRC/pstrsen.f
+index 6219bdb..1922e8f 100644
+--- a/SRC/pstrsen.f
++++ b/SRC/pstrsen.f
+@@ -354,13 +354,15 @@ SUBROUTINE PSTRSEN( JOB, COMPQ, SELECT, PARA, N, T, IT, JT,
+       LOGICAL            LQUERY, WANTBH, WANTQ, WANTS, WANTSP
+       INTEGER            ICOFFT12, ICTXT, IDUM1, IDUM2, IERR, ILOC1,
+      $                   IPW1, ITER, ITT, JLOC1, JTT, K, LIWMIN, LLDT,
+-     $                   LLDQ, LWMIN, MMAX, MMIN, MYROW, MYCOL, N1, N2,
++     $                   LLDQ, LWMIN, MYROW, MYCOL, N1, N2,
+      $                   NB, NOEXSY, NPCOL, NPROCS, NPROW, SPACE,
+      $                   T12ROWS, T12COLS, TCOLS, TCSRC, TROWS, TRSRC,
+      $                   WRK1, IWRK1, WRK2, IWRK2, WRK3, IWRK3
+-      REAL               DPDUM1, ELEM, EST, SCALE, RNORM
++      REAL               ELEM, EST, SCALE, RNORM
+ *     .. Local Arrays ..
+-      INTEGER            DESCT12( DLEN_ ), MBNB2( 2 )
++      INTEGER            DESCT12( DLEN_ ), MBNB2( 2 ), MMAX( 1 ),
++     $                   MMIN( 1 ), INFODUM( 1 )
++      REAL               DPDUM1( 1 )
+ *     ..
+ *     .. External Functions ..
+       LOGICAL            LSAME
+@@ -521,16 +523,16 @@ SUBROUTINE PSTRSEN( JOB, COMPQ, SELECT, PARA, N, T, IT, JT,
+                END IF
+                IF( SELECT(K) ) M = M + 1
+  10         CONTINUE
+-            MMAX = M
+-            MMIN = M
++            MMAX( 1 ) = M
++            MMIN( 1 ) = M
+             IF( NPROCS.GT.1 )
+      $           CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, MMAX, 1, -1,
+      $                -1, -1, -1, -1 )
+             IF( NPROCS.GT.1 )
+      $           CALL IGAMN2D( ICTXT, 'All', TOP, 1, 1, MMIN, 1, -1,
+      $                -1, -1, -1, -1 )
+-            IF( MMAX.GT.MMIN ) THEN
+-               M = MMAX
++            IF( MMAX( 1 ).GT.MMIN( 1 ) ) THEN
++               M = MMAX( 1 )
+                IF( NPROCS.GT.1 )
+      $              CALL IGAMX2D( ICTXT, 'All', TOP, N, 1, IWORK, N,
+      $                   -1, -1, -1, -1, -1 )
+@@ -602,9 +604,11 @@ SUBROUTINE PSTRSEN( JOB, COMPQ, SELECT, PARA, N, T, IT, JT,
+ *
+ *     Global maximum on info
+ *
+-      IF( NPROCS.GT.1 )
+-     $     CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, INFO, 1, -1, -1, -1,
++      IF( NPROCS.GT.1 ) THEN
++         CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, INFODUM, 1, -1, -1, -1,
+      $          -1, -1 )
++         INFO = INFODUM( 1 )
++      END IF
+ *
+ *     Return if some argument is incorrect
+ *
+diff --git a/SRC/pzlarf.f b/SRC/pzlarf.f
+index df65912..7bff287 100644
+--- a/SRC/pzlarf.f
++++ b/SRC/pzlarf.f
+@@ -242,7 +242,7 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+      $                   IOFFV, IPW, IROFF, IVCOL, IVROW, JJC, JJV, LDC,
+      $                   LDV, MYCOL, MYROW, MP, NCC, NCV, NPCOL, NPROW,
+      $                   NQ, RDEST
+-      COMPLEX*16         TAULOC
++      COMPLEX*16         TAULOC( 1 )
+ *     ..
+ *     .. External Subroutines ..
+       EXTERNAL           BLACS_GRIDINFO, INFOG2L, PB_TOPGET, PBZTRNV,
+@@ -336,7 +336,7 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                      CALL ZGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                             TAU( IIV ), 1 )
+-                     TAULOC = TAU( IIV )
++                     TAULOC( 1 ) = TAU( IIV )
+ *
+                   ELSE
+ *
+@@ -345,7 +345,7 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   END IF
+ *
+-                  IF( TAULOC.NE.ZERO ) THEN
++                  IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                    w := sub( C )' * v
+ *
+@@ -363,8 +363,8 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                    sub( C ) := sub( C ) - v * w'
+ *
+-                     CALL ZGERC( MP, NQ, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                           1, C( IOFFC ), LDC )
++                     CALL ZGERC( MP, NQ, -TAULOC( 1 ), WORK, 1,
++     $                           WORK( IPW ), 1, C( IOFFC ), LDC )
+                   END IF
+ *
+                END IF
+@@ -379,9 +379,9 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   IF( MYCOL.EQ.ICCOL ) THEN
+ *
+-                     TAULOC = TAU( JJV )
++                     TAULOC( 1 ) = TAU( JJV )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C )' * v
+ *
+@@ -398,7 +398,7 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                       sub( C ) := sub( C ) - v * w'
+ *
+-                        CALL ZGERC( MP, NQ, -TAULOC, V( IOFFV ), 1,
++                        CALL ZGERC( MP, NQ, -TAULOC( 1 ), V( IOFFV ), 1,
+      $                              WORK, 1, C( IOFFC ), LDC )
+                      END IF
+ *
+@@ -421,9 +421,9 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+                      IPW = MP+1
+                      CALL ZGERV2D( ICTXT, IPW, 1, WORK, IPW, MYROW,
+      $                             IVCOL )
+-                     TAULOC = WORK( IPW )
++                     TAULOC( 1 ) = WORK( IPW )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C )' * v
+ *
+@@ -441,7 +441,7 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                       sub( C ) := sub( C ) - v * w'
+ *
+-                        CALL ZGERC( MP, NQ, -TAULOC, WORK, 1,
++                        CALL ZGERC( MP, NQ, -TAULOC( 1 ), WORK, 1,
+      $                              WORK( IPW ), 1, C( IOFFC ), LDC )
+                      END IF
+ *
+@@ -471,7 +471,7 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   CALL ZGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                          TAU( IIV ), 1 )
+-                  TAULOC = TAU( IIV )
++                  TAULOC( 1 ) = TAU( IIV )
+ *
+                ELSE
+ *
+@@ -480,7 +480,7 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C )' * v
+ *
+@@ -500,8 +500,8 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *                 sub( C ) := sub( C ) - v * w'
+ *
+                   IF( IOFFC.GT.0 )
+-     $               CALL ZGERC( MP, NQ, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                           1, C( IOFFC ), LDC )
++     $               CALL ZGERC( MP, NQ, -TAULOC( 1 ), WORK, 1,
++     $                           WORK( IPW ), 1, C( IOFFC ), LDC )
+                END IF
+ *
+             ELSE
+@@ -516,18 +516,18 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+                   WORK(IPW) = TAU( JJV )
+                   CALL ZGEBS2D( ICTXT, 'Rowwise', ROWBTOP, IPW, 1,
+      $                          WORK, IPW )
+-                  TAULOC = TAU( JJV )
++                  TAULOC( 1 ) = TAU( JJV )
+ *
+                ELSE
+ *
+                   IPW = MP+1
+                   CALL ZGEBR2D( ICTXT, 'Rowwise', ROWBTOP, IPW, 1, WORK,
+      $                          IPW, MYROW, IVCOL )
+-                  TAULOC = WORK( IPW )
++                  TAULOC( 1 ) = WORK( IPW )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C )' * v
+ *
+@@ -547,8 +547,8 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *                 sub( C ) := sub( C ) - v * w'
+ *
+                   IF( IOFFC.GT.0 )
+-     $               CALL ZGERC( MP, NQ, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                           1, C( IOFFC ), LDC )
++     $               CALL ZGERC( MP, NQ, -TAULOC( 1 ), WORK, 1,
++     $                           WORK( IPW ), 1, C( IOFFC ), LDC )
+                END IF
+ *
+             END IF
+@@ -577,9 +577,9 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   IF( MYROW.EQ.ICROW ) THEN
+ *
+-                     TAULOC = TAU( IIV )
++                     TAULOC( 1 ) = TAU( IIV )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C ) * v
+ *
+@@ -597,7 +597,7 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *                       sub( C ) := sub( C ) - w * v'
+ *
+                         IF( IOFFV.GT.0 .AND. IOFFC.GT.0 )
+-     $                     CALL ZGERC( MP, NQ, -TAULOC, WORK, 1,
++     $                     CALL ZGERC( MP, NQ, -TAULOC( 1 ), WORK, 1,
+      $                                 V( IOFFV ), LDV, C( IOFFC ),
+      $                                 LDC )
+                      END IF
+@@ -621,9 +621,9 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+                      IPW = NQ+1
+                      CALL ZGERV2D( ICTXT, IPW, 1, WORK, IPW, IVROW,
+      $                             MYCOL )
+-                     TAULOC = WORK( IPW )
++                     TAULOC( 1 ) = WORK( IPW )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C ) * v
+ *
+@@ -641,8 +641,8 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                       sub( C ) := sub( C ) - w * v'
+ *
+-                        CALL ZGERC( MP, NQ, -TAULOC, WORK( IPW ), 1,
+-     $                              WORK, 1, C( IOFFC ), LDC )
++                        CALL ZGERC( MP, NQ, -TAULOC( 1 ), WORK( IPW ),
++     $                              1, WORK, 1, C( IOFFC ), LDC )
+                      END IF
+ *
+                   END IF
+@@ -667,7 +667,7 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                      CALL ZGEBS2D( ICTXT, 'Rowwise', ' ', 1, 1,
+      $                             TAU( JJV ), 1 )
+-                     TAULOC = TAU( JJV )
++                     TAULOC( 1 ) = TAU( JJV )
+ *
+                   ELSE
+ *
+@@ -676,7 +676,7 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   END IF
+ *
+-                  IF( TAULOC.NE.ZERO ) THEN
++                  IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                    w := sub( C ) * v
+ *
+@@ -694,8 +694,8 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                    sub( C ) := sub( C ) - w * v'
+ *
+-                     CALL ZGERC( MP, NQ, -TAULOC, WORK( IPW ), 1, WORK,
+-     $                           1, C( IOFFC ), LDC )
++                     CALL ZGERC( MP, NQ, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                           WORK, 1, C( IOFFC ), LDC )
+                   END IF
+ *
+                END IF
+@@ -720,18 +720,18 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+                   WORK(IPW) = TAU( IIV )
+                   CALL ZGEBS2D( ICTXT, 'Columnwise', COLBTOP, IPW, 1,
+      $                          WORK, IPW )
+-                  TAULOC = TAU( IIV )
++                  TAULOC( 1 ) = TAU( IIV )
+ *
+                ELSE
+ *
+                   IPW = NQ+1
+                   CALL ZGEBR2D( ICTXT, 'Columnwise', COLBTOP, IPW, 1,
+      $                          WORK, IPW, IVROW, MYCOL )
+-                  TAULOC = WORK( IPW )
++                  TAULOC( 1 ) = WORK( IPW )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C ) * v
+ *
+@@ -750,8 +750,8 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *                 sub( C ) := sub( C ) - w * v'
+ *
+                   IF( IOFFC.GT.0 )
+-     $               CALL ZGERC( MP, NQ, -TAULOC, WORK( IPW ), 1, WORK,
+-     $                           1, C( IOFFC ), LDC )
++     $               CALL ZGERC( MP, NQ, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                           WORK, 1, C( IOFFC ), LDC )
+                END IF
+ *
+             ELSE
+@@ -770,7 +770,7 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   CALL ZGEBS2D( ICTXT, 'Rowwise', ' ', 1, 1, TAU( JJV ),
+      $                          1 )
+-                  TAULOC = TAU( JJV )
++                  TAULOC( 1 ) = TAU( JJV )
+ *
+                ELSE
+ *
+@@ -779,7 +779,7 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C ) * v
+ *
+@@ -797,8 +797,8 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                 sub( C ) := sub( C ) - w * v'
+ *
+-                  CALL ZGERC( MP, NQ, -TAULOC, WORK( IPW ), 1, WORK, 1,
+-     $                        C( IOFFC ), LDC )
++                  CALL ZGERC( MP, NQ, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                        WORK, 1, C( IOFFC ), LDC )
+                END IF
+ *
+             END IF
+diff --git a/SRC/pzlarfc.f b/SRC/pzlarfc.f
+index eb469fc..ddd7ec6 100644
+--- a/SRC/pzlarfc.f
++++ b/SRC/pzlarfc.f
+@@ -242,7 +242,7 @@ SUBROUTINE PZLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+      $                   IOFFV, IPW, IROFF, IVCOL, IVROW, JJC, JJV, LDC,
+      $                   LDV, MYCOL, MYROW, MP, NCC, NCV, NPCOL, NPROW,
+      $                   NQ, RDEST
+-      COMPLEX*16         TAULOC
++      COMPLEX*16         TAULOC( 1 )
+ *     ..
+ *     .. External Subroutines ..
+       EXTERNAL           BLACS_GRIDINFO, INFOG2L, PB_TOPGET, PBZTRNV,
+@@ -336,17 +336,17 @@ SUBROUTINE PZLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                      CALL ZGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                             TAU( IIV ), 1 )
+-                     TAULOC = DCONJG( TAU( IIV ) )
++                     TAULOC( 1 ) = DCONJG( TAU( IIV ) )
+ *
+                   ELSE
+ *
+                      CALL ZGEBR2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                             TAULOC, 1, IVROW, MYCOL )
+-                     TAULOC = DCONJG( TAULOC )
++                     TAULOC( 1 ) = DCONJG( TAULOC( 1 ) )
+ *
+                   END IF
+ *
+-                  IF( TAULOC.NE.ZERO ) THEN
++                  IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                    w := sub( C )' * v
+ *
+@@ -364,8 +364,8 @@ SUBROUTINE PZLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                    sub( C ) := sub( C ) - v * w'
+ *
+-                     CALL ZGERC( MP, NQ, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                           1, C( IOFFC ), LDC )
++                     CALL ZGERC( MP, NQ, -TAULOC( 1 ), WORK, 1,
++     $                           WORK( IPW ), 1, C( IOFFC ), LDC )
+                   END IF
+ *
+                END IF
+@@ -380,9 +380,9 @@ SUBROUTINE PZLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   IF( MYCOL.EQ.ICCOL ) THEN
+ *
+-                     TAULOC = DCONJG( TAU( JJV ) )
++                     TAULOC( 1 ) = DCONJG( TAU( JJV ) )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C )' * v
+ *
+@@ -399,7 +399,7 @@ SUBROUTINE PZLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                       sub( C ) := sub( C ) - v * w'
+ *
+-                        CALL ZGERC( MP, NQ, -TAULOC, V( IOFFV ), 1,
++                        CALL ZGERC( MP, NQ, -TAULOC( 1 ), V( IOFFV ), 1,
+      $                              WORK, 1, C( IOFFC ), LDC )
+                      END IF
+ *
+@@ -422,9 +422,9 @@ SUBROUTINE PZLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+                      IPW = MP+1
+                      CALL ZGERV2D( ICTXT, IPW, 1, WORK, IPW, MYROW,
+      $                             IVCOL )
+-                     TAULOC = DCONJG( WORK( IPW ) )
++                     TAULOC( 1 ) = DCONJG( WORK( IPW ) )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C )' * v
+ *
+@@ -442,7 +442,7 @@ SUBROUTINE PZLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                       sub( C ) := sub( C ) - v * w'
+ *
+-                        CALL ZGERC( MP, NQ, -TAULOC, WORK, 1,
++                        CALL ZGERC( MP, NQ, -TAULOC( 1 ), WORK, 1,
+      $                              WORK( IPW ), 1, C( IOFFC ), LDC )
+                      END IF
+ *
+@@ -472,17 +472,17 @@ SUBROUTINE PZLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   CALL ZGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                          TAU( IIV ), 1 )
+-                  TAULOC = DCONJG( TAU( IIV ) )
++                  TAULOC( 1 ) = DCONJG( TAU( IIV ) )
+ *
+                ELSE
+ *
+                   CALL ZGEBR2D( ICTXT, 'Columnwise', ' ', 1, 1, TAULOC,
+      $                          1, IVROW, MYCOL )
+-                  TAULOC = DCONJG( TAULOC )
++                  TAULOC( 1 ) = DCONJG( TAULOC( 1 ) )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C )' * v
+ *
+@@ -500,8 +500,8 @@ SUBROUTINE PZLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                 sub( C ) := sub( C ) - v * w'
+ *
+-                  CALL ZGERC( MP, NQ, -TAULOC, WORK, 1, WORK( IPW ), 1,
+-     $                        C( IOFFC ), LDC )
++                  CALL ZGERC( MP, NQ, -TAULOC( 1 ), WORK, 1,
++     $                        WORK( IPW ), 1, C( IOFFC ), LDC )
+                END IF
+ *
+             ELSE
+@@ -516,18 +516,18 @@ SUBROUTINE PZLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+                   WORK(IPW) = TAU( JJV )
+                   CALL ZGEBS2D( ICTXT, 'Rowwise', ROWBTOP, IPW, 1,
+      $                          WORK, IPW )
+-                  TAULOC = DCONJG( TAU( JJV ) )
++                  TAULOC( 1 ) = DCONJG( TAU( JJV ) )
+ *
+                ELSE
+ *
+                   IPW = MP+1
+                   CALL ZGEBR2D( ICTXT, 'Rowwise', ROWBTOP, IPW, 1, WORK,
+      $                          IPW, MYROW, IVCOL )
+-                  TAULOC = DCONJG( WORK( IPW ) )
++                  TAULOC( 1 ) = DCONJG( WORK( IPW ) )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C )' * v
+ *
+@@ -545,8 +545,8 @@ SUBROUTINE PZLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                 sub( C ) := sub( C ) - v * w'
+ *
+-                  CALL ZGERC( MP, NQ, -TAULOC, WORK, 1, WORK( IPW ), 1,
+-     $                        C( IOFFC ), LDC )
++                  CALL ZGERC( MP, NQ, -TAULOC( 1 ), WORK, 1,
++     $                        WORK( IPW ), 1, C( IOFFC ), LDC )
+                END IF
+ *
+             END IF
+@@ -575,9 +575,9 @@ SUBROUTINE PZLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   IF( MYROW.EQ.ICROW ) THEN
+ *
+-                     TAULOC = DCONJG( TAU( IIV ) )
++                     TAULOC( 1 ) = DCONJG( TAU( IIV ) )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C ) * v
+ *
+@@ -594,7 +594,7 @@ SUBROUTINE PZLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                       sub( C ) := sub( C ) - w * v'
+ *
+-                        CALL ZGERC( MP, NQ, -TAULOC, WORK, 1,
++                        CALL ZGERC( MP, NQ, -TAULOC( 1 ), WORK, 1,
+      $                              V( IOFFV ), LDV, C( IOFFC ), LDC )
+                      END IF
+ *
+@@ -617,9 +617,9 @@ SUBROUTINE PZLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+                      IPW = NQ+1
+                      CALL ZGERV2D( ICTXT, IPW, 1, WORK, IPW, IVROW,
+      $                             MYCOL )
+-                     TAULOC = DCONJG( WORK( IPW ) )
++                     TAULOC( 1 ) = DCONJG( WORK( IPW ) )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C ) * v
+ *
+@@ -637,8 +637,8 @@ SUBROUTINE PZLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                       sub( C ) := sub( C ) - w * v'
+ *
+-                        CALL ZGERC( MP, NQ, -TAULOC, WORK( IPW ), 1,
+-     $                              WORK, 1, C( IOFFC ), LDC )
++                        CALL ZGERC( MP, NQ, -TAULOC( 1 ), WORK( IPW ),
++     $                              1, WORK, 1, C( IOFFC ), LDC )
+                      END IF
+ *
+                   END IF
+@@ -663,17 +663,17 @@ SUBROUTINE PZLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                      CALL ZGEBS2D( ICTXT, 'Rowwise', ' ', 1, 1,
+      $                             TAU( JJV ), 1 )
+-                     TAULOC = DCONJG( TAU( JJV ) )
++                     TAULOC( 1 ) = DCONJG( TAU( JJV ) )
+ *
+                   ELSE
+ *
+                      CALL ZGEBR2D( ICTXT, 'Rowwise', ' ', 1, 1, TAULOC,
+      $                             1, MYROW, IVCOL )
+-                     TAULOC = DCONJG( TAULOC )
++                     TAULOC( 1 ) = DCONJG( TAULOC( 1 ) )
+ *
+                   END IF
+ *
+-                  IF( TAULOC.NE.ZERO ) THEN
++                  IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                    w := sub( C ) * v
+ *
+@@ -691,8 +691,8 @@ SUBROUTINE PZLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                    sub( C ) := sub( C ) - w * v'
+ *
+-                     CALL ZGERC( MP, NQ, -TAULOC, WORK( IPW ), 1, WORK,
+-     $                           1, C( IOFFC ), LDC )
++                     CALL ZGERC( MP, NQ, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                           WORK, 1, C( IOFFC ), LDC )
+                   END IF
+ *
+                END IF
+@@ -716,18 +716,18 @@ SUBROUTINE PZLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+                   WORK(IPW) = TAU( IIV )
+                   CALL ZGEBS2D( ICTXT, 'Columnwise', COLBTOP, IPW, 1,
+      $                          WORK, IPW )
+-                  TAULOC = DCONJG( TAU( IIV ) )
++                  TAULOC( 1 ) = DCONJG( TAU( IIV ) )
+ *
+                ELSE
+ *
+                   IPW = NQ+1
+                   CALL ZGEBR2D( ICTXT, 'Columnwise', COLBTOP, IPW, 1,
+      $                          WORK, IPW, IVROW, MYCOL )
+-                  TAULOC = DCONJG( WORK( IPW ) )
++                  TAULOC( 1 ) = DCONJG( WORK( IPW ) )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C ) * v
+ *
+@@ -745,8 +745,8 @@ SUBROUTINE PZLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                 sub( C ) := sub( C ) - w * v'
+ *
+-                  CALL ZGERC( MP, NQ, -TAULOC, WORK( IPW ), 1, WORK, 1,
+-     $                        C( IOFFC ), LDC )
++                  CALL ZGERC( MP, NQ, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                        WORK, 1, C( IOFFC ), LDC )
+                END IF
+ *
+             ELSE
+@@ -765,17 +765,17 @@ SUBROUTINE PZLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   CALL ZGEBS2D( ICTXT, 'Rowwise', ' ', 1, 1, TAU( JJV ),
+      $                          1 )
+-                  TAULOC = DCONJG( TAU( JJV ) )
++                  TAULOC( 1 ) = DCONJG( TAU( JJV ) )
+ *
+                ELSE
+ *
+                   CALL ZGEBR2D( ICTXT, 'Rowwise', ' ', 1, 1, TAULOC, 1,
+      $                          MYROW, IVCOL )
+-                  TAULOC = DCONJG( TAULOC )
++                  TAULOC( 1 ) = DCONJG( TAULOC( 1 ) )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C ) * v
+ *
+@@ -793,8 +793,8 @@ SUBROUTINE PZLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                 sub( C ) := sub( C ) - w * v'
+ *
+-                  CALL ZGERC( MP, NQ, -TAULOC, WORK( IPW ), 1, WORK, 1,
+-     $                        C( IOFFC ), LDC )
++                  CALL ZGERC( MP, NQ, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                        WORK, 1, C( IOFFC ), LDC )
+                END IF
+ *
+             END IF
+diff --git a/SRC/pzlarz.f b/SRC/pzlarz.f
+index fefc133..abf6288 100644
+--- a/SRC/pzlarz.f
++++ b/SRC/pzlarz.f
+@@ -251,7 +251,7 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                   IVCOL, IVROW, JJC1, JJC2, JJV, LDC, LDV, MPC2,
+      $                   MPV, MYCOL, MYROW, NCC, NCV, NPCOL, NPROW,
+      $                   NQC2, NQV, RDEST
+-      COMPLEX*16         TAULOC
++      COMPLEX*16         TAULOC( 1 )
+ *     ..
+ *     .. External Subroutines ..
+       EXTERNAL           BLACS_GRIDINFO, INFOG2L, PB_TOPGET, PBZTRNV,
+@@ -370,7 +370,7 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                      CALL ZGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                             TAU( IIV ), 1 )
+-                     TAULOC = TAU( IIV )
++                     TAULOC( 1 ) = TAU( IIV )
+ *
+                   ELSE
+ *
+@@ -379,7 +379,7 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   END IF
+ *
+-                  IF( TAULOC.NE.ZERO ) THEN
++                  IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                    w := sub( C )' * v
+ *
+@@ -402,9 +402,9 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                    sub( C ) := sub( C ) - v * w'
+ *
+                      IF( MYROW.EQ.ICROW1 )
+-     $                  CALL ZAXPY( NQC2, -TAULOC, WORK( IPW ),
++     $                  CALL ZAXPY( NQC2, -TAULOC( 1 ), WORK( IPW ),
+      $                              MAX( 1, NQC2 ), C( IOFFC1 ), LDC )
+-                     CALL ZGERC( MPV, NQC2, -TAULOC, WORK, 1,
++                     CALL ZGERC( MPV, NQC2, -TAULOC( 1 ), WORK, 1,
+      $                           WORK( IPW ), 1, C( IOFFC2 ), LDC )
+                   END IF
+ *
+@@ -420,9 +420,9 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   IF( MYCOL.EQ.ICCOL2 ) THEN
+ *
+-                     TAULOC = TAU( JJV )
++                     TAULOC( 1 ) = TAU( JJV )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C )' * v
+ *
+@@ -445,11 +445,11 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                       sub( C ) := sub( C ) - v * w'
+ *
+                         IF( MYROW.EQ.ICROW1 )
+-     $                     CALL ZAXPY( NQC2, -TAULOC, WORK,
++     $                     CALL ZAXPY( NQC2, -TAULOC( 1 ), WORK,
+      $                                 MAX( 1, NQC2 ), C( IOFFC1 ),
+      $                                 LDC )
+-                        CALL ZGERC( MPV, NQC2, -TAULOC, V( IOFFV ), 1,
+-     $                              WORK, 1, C( IOFFC2 ), LDC )
++                        CALL ZGERC( MPV, NQC2, -TAULOC( 1 ), V( IOFFV ),
++     $                              1, WORK, 1, C( IOFFC2 ), LDC )
+                      END IF
+ *
+                   END IF
+@@ -471,9 +471,9 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+                      IPW = MPV+1
+                      CALL ZGERV2D( ICTXT, IPW, 1, WORK, IPW, MYROW,
+      $                             IVCOL )
+-                     TAULOC = WORK( IPW )
++                     TAULOC( 1 ) = WORK( IPW )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C )' * v
+ *
+@@ -496,10 +496,10 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                       sub( C ) := sub( C ) - v * w'
+ *
+                         IF( MYROW.EQ.ICROW1 )
+-     $                     CALL ZAXPY( NQC2, -TAULOC, WORK( IPW ),
++     $                     CALL ZAXPY( NQC2, -TAULOC( 1 ), WORK( IPW ),
+      $                                 MAX( 1, NQC2 ), C( IOFFC1 ),
+      $                                 LDC )
+-                        CALL ZGERC( MPV, NQC2, -TAULOC, WORK, 1,
++                        CALL ZGERC( MPV, NQC2, -TAULOC( 1 ), WORK, 1,
+      $                              WORK( IPW ), 1, C( IOFFC2 ), LDC )
+                      END IF
+ *
+@@ -530,7 +530,7 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   CALL ZGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                          TAU( IIV ), 1 )
+-                  TAULOC = TAU( IIV )
++                  TAULOC( 1 ) = TAU( IIV )
+ *
+                ELSE
+ *
+@@ -539,7 +539,7 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C )' * v
+ *
+@@ -562,10 +562,10 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                 sub( C ) := sub( C ) - v * w'
+ *
+                   IF( MYROW.EQ.ICROW1 )
+-     $               CALL ZAXPY( NQC2, -TAULOC, WORK( IPW ),
++     $               CALL ZAXPY( NQC2, -TAULOC( 1 ), WORK( IPW ),
+      $                           MAX( 1, NQC2 ), C( IOFFC1 ), LDC )
+-                  CALL ZGERC( MPV, NQC2, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                        1, C( IOFFC2 ), LDC )
++                  CALL ZGERC( MPV, NQC2, -TAULOC( 1 ), WORK, 1,
++     $                        WORK( IPW ), 1, C( IOFFC2 ), LDC )
+                END IF
+ *
+             ELSE
+@@ -580,18 +580,18 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+                   WORK( IPW ) = TAU( JJV )
+                   CALL ZGEBS2D( ICTXT, 'Rowwise', ROWBTOP, IPW, 1,
+      $                          WORK, IPW )
+-                  TAULOC = TAU( JJV )
++                  TAULOC( 1 ) = TAU( JJV )
+ *
+                ELSE
+ *
+                   IPW = MPV+1
+                   CALL ZGEBR2D( ICTXT, 'Rowwise', ROWBTOP, IPW, 1, WORK,
+      $                          IPW, MYROW, IVCOL )
+-                  TAULOC = WORK( IPW )
++                  TAULOC( 1 ) = WORK( IPW )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C )' * v
+ *
+@@ -614,10 +614,10 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                 sub( C ) := sub( C ) - v * w'
+ *
+                   IF( MYROW.EQ.ICROW1 )
+-     $               CALL ZAXPY( NQC2, -TAULOC, WORK( IPW ),
++     $               CALL ZAXPY( NQC2, -TAULOC( 1 ), WORK( IPW ),
+      $                           MAX( 1, NQC2 ), C( IOFFC1 ), LDC )
+-                  CALL ZGERC( MPV, NQC2, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                        1, C( IOFFC2 ), LDC )
++                  CALL ZGERC( MPV, NQC2, -TAULOC( 1 ), WORK, 1,
++     $                        WORK( IPW ), 1, C( IOFFC2 ), LDC )
+                END IF
+ *
+             END IF
+@@ -646,9 +646,9 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   IF( MYROW.EQ.ICROW2 ) THEN
+ *
+-                     TAULOC = TAU( IIV )
++                     TAULOC( 1 ) = TAU( IIV )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C ) * v
+ *
+@@ -669,13 +669,13 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                               ICCOL2 )
+ *
+                         IF( MYCOL.EQ.ICCOL1 )
+-     $                     CALL ZAXPY( MPC2, -TAULOC, WORK, 1,
++     $                     CALL ZAXPY( MPC2, -TAULOC( 1 ), WORK, 1,
+      $                                 C( IOFFC1 ), 1 )
+ *
+ *                       sub( C ) := sub( C ) - w * v'
+ *
+                         IF( MPC2.GT.0 .AND. NQV.GT.0 )
+-     $                     CALL ZGERC( MPC2, NQV, -TAULOC, WORK, 1,
++     $                     CALL ZGERC( MPC2, NQV, -TAULOC( 1 ), WORK, 1,
+      $                                 V( IOFFV ), LDV, C( IOFFC2 ),
+      $                                 LDC )
+                      END IF
+@@ -699,9 +699,9 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+                      IPW = NQV+1
+                      CALL ZGERV2D( ICTXT, IPW, 1, WORK, IPW, IVROW,
+      $                             MYCOL )
+-                     TAULOC = WORK( IPW )
++                     TAULOC( 1 ) = WORK( IPW )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C ) * v
+ *
+@@ -720,13 +720,14 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                                WORK( IPW ), MAX( 1, MPC2 ),
+      $                                RDEST, ICCOL2 )
+                         IF( MYCOL.EQ.ICCOL1 )
+-     $                     CALL ZAXPY( MPC2, -TAULOC, WORK( IPW ), 1,
+-     $                                 C( IOFFC1 ), 1 )
++     $                     CALL ZAXPY( MPC2, -TAULOC( 1 ), WORK( IPW ),
++     $                                 1, C( IOFFC1 ), 1 )
+ *
+ *                       sub( C ) := sub( C ) - w * v'
+ *
+-                        CALL ZGERC( MPC2, NQV, -TAULOC, WORK( IPW ), 1,
+-     $                              WORK, 1, C( IOFFC2 ), LDC )
++                        CALL ZGERC( MPC2, NQV, -TAULOC( 1 ),
++     $                              WORK( IPW ), 1, WORK, 1,
++     $                              C( IOFFC2 ), LDC )
+                      END IF
+ *
+                   END IF
+@@ -751,7 +752,7 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                      CALL ZGEBS2D( ICTXT, 'Rowwise', ' ', 1, 1,
+      $                             TAU( JJV ), 1 )
+-                     TAULOC = TAU( JJV )
++                     TAULOC( 1 ) = TAU( JJV )
+ *
+                   ELSE
+ *
+@@ -760,7 +761,7 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   END IF
+ *
+-                  IF( TAULOC.NE.ZERO ) THEN
++                  IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                    w := sub( C ) * v
+ *
+@@ -779,13 +780,13 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                             WORK( IPW ), MAX( 1, MPC2 ), RDEST,
+      $                             ICCOL2 )
+                      IF( MYCOL.EQ.ICCOL1 )
+-     $                  CALL ZAXPY( MPC2, -TAULOC, WORK( IPW ), 1,
++     $                  CALL ZAXPY( MPC2, -TAULOC( 1 ), WORK( IPW ), 1,
+      $                              C( IOFFC1 ), 1 )
+ *
+ *                    sub( C ) := sub( C ) - w * v'
+ *
+-                     CALL ZGERC( MPC2, NQV, -TAULOC, WORK( IPW ), 1,
+-     $                           WORK, 1, C( IOFFC2 ), LDC )
++                     CALL ZGERC( MPC2, NQV, -TAULOC( 1 ), WORK( IPW ),
++     $                           1, WORK, 1, C( IOFFC2 ), LDC )
+                   END IF
+ *
+                END IF
+@@ -809,18 +810,18 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+                   WORK( IPW ) = TAU( IIV )
+                   CALL ZGEBS2D( ICTXT, 'Columnwise', COLBTOP, IPW, 1,
+      $                          WORK, IPW )
+-                  TAULOC = TAU( IIV )
++                  TAULOC( 1 ) = TAU( IIV )
+ *
+                ELSE
+ *
+                   IPW = NQV+1
+                   CALL ZGEBR2D( ICTXT, 'Columnwise', COLBTOP, IPW, 1,
+      $                          WORK, IPW, IVROW, MYCOL )
+-                  TAULOC = WORK( IPW )
++                  TAULOC( 1 ) = WORK( IPW )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C ) * v
+ *
+@@ -840,13 +841,13 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                          WORK( IPW ), MAX( 1, MPC2 ), RDEST,
+      $                          ICCOL2 )
+                   IF( MYCOL.EQ.ICCOL1 )
+-     $               CALL ZAXPY( MPC2, -TAULOC, WORK( IPW ), 1,
++     $               CALL ZAXPY( MPC2, -TAULOC( 1 ), WORK( IPW ), 1,
+      $                           C( IOFFC1 ), 1 )
+ *
+ *                 sub( C ) := sub( C ) - w * v'
+ *
+-                  CALL ZGERC( MPC2, NQV, -TAULOC, WORK( IPW ), 1, WORK,
+-     $                        1, C( IOFFC2 ), LDC )
++                  CALL ZGERC( MPC2, NQV, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                        WORK, 1, C( IOFFC2 ), LDC )
+                END IF
+ *
+             ELSE
+@@ -865,7 +866,7 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   CALL ZGEBS2D( ICTXT, 'Rowwise', ' ', 1, 1, TAU( JJV ),
+      $                          1 )
+-                  TAULOC = TAU( JJV )
++                  TAULOC( 1 ) = TAU( JJV )
+ *
+                ELSE
+ *
+@@ -874,7 +875,7 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C ) * v
+ *
+@@ -893,13 +894,13 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                          WORK( IPW ), MAX( 1, MPC2 ), RDEST,
+      $                          ICCOL2 )
+                   IF( MYCOL.EQ.ICCOL1 )
+-     $               CALL ZAXPY( MPC2, -TAULOC, WORK( IPW ), 1,
++     $               CALL ZAXPY( MPC2, -TAULOC( 1 ), WORK( IPW ), 1,
+      $                           C( IOFFC1 ), 1 )
+ *
+ *                 sub( C ) := sub( C ) - w * v'
+ *
+-                  CALL ZGERC( MPC2, NQV, -TAULOC, WORK( IPW ), 1, WORK,
+-     $                        1, C( IOFFC2 ), LDC )
++                  CALL ZGERC( MPC2, NQV, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                        WORK, 1, C( IOFFC2 ), LDC )
+                END IF
+ *
+             END IF
+diff --git a/SRC/pzlarzc.f b/SRC/pzlarzc.f
+index 936caec..2c574ff 100644
+--- a/SRC/pzlarzc.f
++++ b/SRC/pzlarzc.f
+@@ -251,7 +251,7 @@ SUBROUTINE PZLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                   IVCOL, IVROW, JJC1, JJC2, JJV, LDC, LDV, MPC2,
+      $                   MPV, MYCOL, MYROW, NCC, NCV, NPCOL, NPROW,
+      $                   NQC2, NQV, RDEST
+-      COMPLEX*16         TAULOC
++      COMPLEX*16         TAULOC( 1 )
+ *     ..
+ *     .. External Subroutines ..
+       EXTERNAL           BLACS_GRIDINFO, INFOG2L, PB_TOPGET, PBZTRNV,
+@@ -370,17 +370,17 @@ SUBROUTINE PZLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                      CALL ZGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                             TAU( IIV ), 1 )
+-                     TAULOC = DCONJG( TAU( IIV ) )
++                     TAULOC( 1 ) = DCONJG( TAU( IIV ) )
+ *
+                   ELSE
+ *
+                      CALL ZGEBR2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                             TAULOC, 1, IVROW, MYCOL )
+-                     TAULOC = DCONJG( TAULOC )
++                     TAULOC( 1 ) = DCONJG( TAULOC( 1 ) )
+ *
+                   END IF
+ *
+-                  IF( TAULOC.NE.ZERO ) THEN
++                  IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                    w := sub( C )' * v
+ *
+@@ -403,9 +403,9 @@ SUBROUTINE PZLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                    sub( C ) := sub( C ) - v * w'
+ *
+                      IF( MYROW.EQ.ICROW1 )
+-     $                  CALL ZAXPY( NQC2, -TAULOC, WORK( IPW ),
++     $                  CALL ZAXPY( NQC2, -TAULOC( 1 ), WORK( IPW ),
+      $                              MAX( 1, NQC2 ), C( IOFFC1 ), LDC )
+-                     CALL ZGERC( MPV, NQC2, -TAULOC, WORK, 1,
++                     CALL ZGERC( MPV, NQC2, -TAULOC( 1 ), WORK, 1,
+      $                           WORK( IPW ), 1, C( IOFFC2 ), LDC )
+                   END IF
+ *
+@@ -421,9 +421,9 @@ SUBROUTINE PZLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   IF( MYCOL.EQ.ICCOL2 ) THEN
+ *
+-                     TAULOC = DCONJG( TAU( JJV ) )
++                     TAULOC( 1 ) = DCONJG( TAU( JJV ) )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C )' * v
+ *
+@@ -446,11 +446,11 @@ SUBROUTINE PZLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                       sub( C ) := sub( C ) - v * w'
+ *
+                         IF( MYROW.EQ.ICROW1 )
+-     $                     CALL ZAXPY( NQC2, -TAULOC, WORK,
++     $                     CALL ZAXPY( NQC2, -TAULOC( 1 ), WORK,
+      $                                 MAX( 1, NQC2 ), C( IOFFC1 ),
+      $                                 LDC )
+-                        CALL ZGERC( MPV, NQC2, -TAULOC, V( IOFFV ), 1,
+-     $                              WORK, 1, C( IOFFC2 ), LDC )
++                        CALL ZGERC( MPV, NQC2, -TAULOC( 1 ), V( IOFFV ),
++     $                              1, WORK, 1, C( IOFFC2 ), LDC )
+                      END IF
+ *
+                   END IF
+@@ -472,9 +472,9 @@ SUBROUTINE PZLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+                      IPW = MPV+1
+                      CALL ZGERV2D( ICTXT, IPW, 1, WORK, IPW, MYROW,
+      $                             IVCOL )
+-                     TAULOC = DCONJG( WORK( IPW ) )
++                     TAULOC( 1 ) = DCONJG( WORK( IPW ) )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C )' * v
+ *
+@@ -497,10 +497,10 @@ SUBROUTINE PZLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                       sub( C ) := sub( C ) - v * w'
+ *
+                         IF( MYROW.EQ.ICROW1 )
+-     $                     CALL ZAXPY( NQC2, -TAULOC, WORK( IPW ),
++     $                     CALL ZAXPY( NQC2, -TAULOC( 1 ), WORK( IPW ),
+      $                                 MAX( 1, NQC2 ), C( IOFFC1 ),
+      $                                 LDC )
+-                        CALL ZGERC( MPV, NQC2, -TAULOC, WORK, 1,
++                        CALL ZGERC( MPV, NQC2, -TAULOC( 1 ), WORK, 1,
+      $                              WORK( IPW ), 1, C( IOFFC2 ), LDC )
+                      END IF
+ *
+@@ -531,17 +531,17 @@ SUBROUTINE PZLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   CALL ZGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                          TAU( IIV ), 1 )
+-                  TAULOC = DCONJG( TAU( IIV ) )
++                  TAULOC( 1 ) = DCONJG( TAU( IIV ) )
+ *
+                ELSE
+ *
+                   CALL ZGEBR2D( ICTXT, 'Columnwise', ' ', 1, 1, TAULOC,
+      $                          1, IVROW, MYCOL )
+-                  TAULOC = DCONJG( TAULOC )
++                  TAULOC( 1 ) = DCONJG( TAULOC( 1 ) )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C )' * v
+ *
+@@ -564,10 +564,10 @@ SUBROUTINE PZLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                 sub( C ) := sub( C ) - v * w'
+ *
+                   IF( MYROW.EQ.ICROW1 )
+-     $               CALL ZAXPY( NQC2, -TAULOC, WORK( IPW ),
++     $               CALL ZAXPY( NQC2, -TAULOC( 1 ), WORK( IPW ),
+      $                           MAX( 1, NQC2 ), C( IOFFC1 ), LDC )
+-                  CALL ZGERC( MPV, NQC2, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                        1, C( IOFFC2 ), LDC )
++                  CALL ZGERC( MPV, NQC2, -TAULOC( 1 ), WORK, 1,
++     $                        WORK( IPW ), 1, C( IOFFC2 ), LDC )
+                END IF
+ *
+             ELSE
+@@ -582,18 +582,18 @@ SUBROUTINE PZLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+                   WORK( IPW ) = TAU( JJV )
+                   CALL ZGEBS2D( ICTXT, 'Rowwise', ROWBTOP, IPW, 1,
+      $                          WORK, IPW )
+-                  TAULOC = DCONJG( TAU( JJV ) )
++                  TAULOC( 1 ) = DCONJG( TAU( JJV ) )
+ *
+                ELSE
+ *
+                   IPW = MPV+1
+                   CALL ZGEBR2D( ICTXT, 'Rowwise', ROWBTOP, IPW, 1, WORK,
+      $                          IPW, MYROW, IVCOL )
+-                  TAULOC = DCONJG( WORK( IPW ) )
++                  TAULOC( 1 ) = DCONJG( WORK( IPW ) )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C )' * v
+ *
+@@ -616,10 +616,10 @@ SUBROUTINE PZLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                 sub( C ) := sub( C ) - v * w'
+ *
+                   IF( MYROW.EQ.ICROW1 )
+-     $               CALL ZAXPY( NQC2, -TAULOC, WORK( IPW ),
++     $               CALL ZAXPY( NQC2, -TAULOC( 1 ), WORK( IPW ),
+      $                           MAX( 1, NQC2 ), C( IOFFC1 ), LDC )
+-                  CALL ZGERC( MPV, NQC2, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                        1, C( IOFFC2 ), LDC )
++                  CALL ZGERC( MPV, NQC2, -TAULOC( 1 ), WORK, 1,
++     $                        WORK( IPW ), 1, C( IOFFC2 ), LDC )
+                END IF
+ *
+             END IF
+@@ -648,9 +648,9 @@ SUBROUTINE PZLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   IF( MYROW.EQ.ICROW2 ) THEN
+ *
+-                     TAULOC = DCONJG( TAU( IIV ) )
++                     TAULOC( 1 ) = DCONJG( TAU( IIV ) )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C ) * v
+ *
+@@ -671,12 +671,12 @@ SUBROUTINE PZLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                               ICCOL2 )
+ *
+                         IF( MYCOL.EQ.ICCOL1 )
+-     $                     CALL ZAXPY( MPC2, -TAULOC, WORK, 1,
++     $                     CALL ZAXPY( MPC2, -TAULOC( 1 ), WORK, 1,
+      $                                 C( IOFFC1 ), 1 )
+ *
+ *                       sub( C ) := sub( C ) - w * v'
+ *
+-                        CALL ZGERC( MPC2, NQV, -TAULOC, WORK, 1,
++                        CALL ZGERC( MPC2, NQV, -TAULOC( 1 ), WORK, 1,
+      $                              V( IOFFV ), LDV, C( IOFFC2 ), LDC )
+                      END IF
+ *
+@@ -699,9 +699,9 @@ SUBROUTINE PZLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+                      IPW = NQV+1
+                      CALL ZGERV2D( ICTXT, IPW, 1, WORK, IPW, IVROW,
+      $                             MYCOL )
+-                     TAULOC = DCONJG( WORK( IPW ) )
++                     TAULOC( 1 ) = DCONJG( WORK( IPW ) )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C ) * v
+ *
+@@ -720,13 +720,14 @@ SUBROUTINE PZLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                                WORK( IPW ), MAX( 1, MPC2 ),
+      $                                RDEST, ICCOL2 )
+                         IF( MYCOL.EQ.ICCOL1 )
+-     $                     CALL ZAXPY( MPC2, -TAULOC, WORK( IPW ), 1,
+-     $                                 C( IOFFC1 ), 1 )
++     $                     CALL ZAXPY( MPC2, -TAULOC( 1 ), WORK( IPW ),
++     $                                 1, C( IOFFC1 ), 1 )
+ *
+ *                       sub( C ) := sub( C ) - w * v'
+ *
+-                        CALL ZGERC( MPC2, NQV, -TAULOC, WORK( IPW ), 1,
+-     $                              WORK, 1, C( IOFFC2 ), LDC )
++                        CALL ZGERC( MPC2, NQV, -TAULOC( 1 ),
++     $                              WORK( IPW ), 1, WORK, 1,
++     $                              C( IOFFC2 ), LDC )
+                      END IF
+ *
+                   END IF
+@@ -751,17 +752,17 @@ SUBROUTINE PZLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                      CALL ZGEBS2D( ICTXT, 'Rowwise', ' ', 1, 1,
+      $                             TAU( JJV ), 1 )
+-                     TAULOC = DCONJG( TAU( JJV ) )
++                     TAULOC( 1 ) = DCONJG( TAU( JJV ) )
+ *
+                   ELSE
+ *
+                      CALL ZGEBR2D( ICTXT, 'Rowwise', ' ', 1, 1, TAULOC,
+      $                             1, MYROW, IVCOL )
+-                     TAULOC = DCONJG( TAULOC )
++                     TAULOC( 1 ) = DCONJG( TAULOC( 1 ) )
+ *
+                   END IF
+ *
+-                  IF( TAULOC.NE.ZERO ) THEN
++                  IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                    w := sub( C ) * v
+ *
+@@ -780,13 +781,13 @@ SUBROUTINE PZLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                             WORK( IPW ), MAX( 1, MPC2 ), RDEST,
+      $                             ICCOL2 )
+                      IF( MYCOL.EQ.ICCOL1 )
+-     $                  CALL ZAXPY( MPC2, -TAULOC, WORK( IPW ), 1,
++     $                  CALL ZAXPY( MPC2, -TAULOC( 1 ), WORK( IPW ), 1,
+      $                              C( IOFFC1 ), 1 )
+ *
+ *                    sub( C ) := sub( C ) - w * v'
+ *
+-                     CALL ZGERC( MPC2, NQV, -TAULOC, WORK( IPW ), 1,
+-     $                           WORK, 1, C( IOFFC2 ), LDC )
++                     CALL ZGERC( MPC2, NQV, -TAULOC( 1 ), WORK( IPW ),
++     $                           1, WORK, 1, C( IOFFC2 ), LDC )
+                   END IF
+ *
+                END IF
+@@ -810,18 +811,18 @@ SUBROUTINE PZLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+                   WORK( IPW ) = TAU( IIV )
+                   CALL ZGEBS2D( ICTXT, 'Columnwise', COLBTOP, IPW, 1,
+      $                          WORK, IPW )
+-                  TAULOC = DCONJG( TAU( IIV ) )
++                  TAULOC( 1 ) = DCONJG( TAU( IIV ) )
+ *
+                ELSE
+ *
+                   IPW = NQV+1
+                   CALL ZGEBR2D( ICTXT, 'Columnwise', COLBTOP, IPW, 1,
+      $                          WORK, IPW, IVROW, MYCOL )
+-                  TAULOC = DCONJG( WORK( IPW ) )
++                  TAULOC( 1 ) = DCONJG( WORK( IPW ) )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C ) * v
+ *
+@@ -841,13 +842,13 @@ SUBROUTINE PZLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                          WORK( IPW ), MAX( 1, MPC2 ), RDEST,
+      $                          ICCOL2 )
+                   IF( MYCOL.EQ.ICCOL1 )
+-     $               CALL ZAXPY( MPC2, -TAULOC, WORK( IPW ), 1,
++     $               CALL ZAXPY( MPC2, -TAULOC( 1 ), WORK( IPW ), 1,
+      $                           C( IOFFC1 ), 1 )
+ *
+ *                 sub( C ) := sub( C ) - w * v'
+ *
+-                  CALL ZGERC( MPC2, NQV, -TAULOC, WORK( IPW ), 1, WORK,
+-     $                        1, C( IOFFC2 ), LDC )
++                  CALL ZGERC( MPC2, NQV, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                        WORK, 1, C( IOFFC2 ), LDC )
+                END IF
+ *
+             ELSE
+@@ -866,17 +867,17 @@ SUBROUTINE PZLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   CALL ZGEBS2D( ICTXT, 'Rowwise', ' ', 1, 1, TAU( JJV ),
+      $                          1 )
+-                  TAULOC = DCONJG( TAU( JJV ) )
++                  TAULOC( 1 ) = DCONJG( TAU( JJV ) )
+ *
+                ELSE
+ *
+                   CALL ZGEBR2D( ICTXT, 'Rowwise', ' ', 1, 1, TAULOC, 1,
+      $                          MYROW, IVCOL )
+-                  TAULOC = DCONJG( TAULOC )
++                  TAULOC( 1 ) = DCONJG( TAULOC( 1 ) )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C ) * v
+ *
+@@ -895,13 +896,13 @@ SUBROUTINE PZLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                          WORK( IPW ), MAX( 1, MPC2 ), RDEST,
+      $                          ICCOL2 )
+                   IF( MYCOL.EQ.ICCOL1 )
+-     $               CALL ZAXPY( MPC2, -TAULOC, WORK( IPW ), 1,
++     $               CALL ZAXPY( MPC2, -TAULOC( 1 ), WORK( IPW ), 1,
+      $                           C( IOFFC1 ), 1 )
+ *
+ *                 sub( C ) := sub( C ) - w * v'
+ *
+-                  CALL ZGERC( MPC2, NQV, -TAULOC, WORK( IPW ), 1, WORK,
+-     $                        1, C( IOFFC2 ), LDC )
++                  CALL ZGERC( MPC2, NQV, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                        WORK, 1, C( IOFFC2 ), LDC )
+                END IF
+ *
+             END IF
+diff --git a/SRC/pzlattrs.f b/SRC/pzlattrs.f
+index 819e476..5a54209 100644
+--- a/SRC/pzlattrs.f
++++ b/SRC/pzlattrs.f
+@@ -271,8 +271,9 @@ SUBROUTINE PZLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+      $                   JINC, JLAST, LDA, LDX, MB, MYCOL, MYROW, NB,
+      $                   NPCOL, NPROW, RSRC
+       DOUBLE PRECISION   BIGNUM, GROW, REC, SMLNUM, TJJ, TMAX, TSCAL,
+-     $                   XBND, XJ, XMAX
++     $                   XBND, XJ
+       COMPLEX*16         CSUMJ, TJJS, USCAL, XJTMP, ZDUM
++      DOUBLE PRECISION   XMAX( 1 )
+ *     ..
+ *     .. External Functions ..
+       LOGICAL            LSAME
+@@ -391,11 +392,11 @@ SUBROUTINE PZLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+ *     Compute a bound on the computed solution vector to see if the
+ *     Level 2 PBLAS routine PZTRSV can be used.
+ *
+-      XMAX = ZERO
++      XMAX( 1 ) = ZERO
+       CALL PZAMAX( N, ZDUM, IMAX, X, IX, JX, DESCX, 1 )
+-      XMAX = CABS2( ZDUM )
++      XMAX( 1 ) = CABS2( ZDUM )
+       CALL DGSUM2D( CONTXT, 'Row', ' ', 1, 1, XMAX, 1, -1, -1 )
+-      XBND = XMAX
++      XBND = XMAX( 1 )
+ *
+       IF( NOTRAN ) THEN
+ *
+@@ -590,16 +591,16 @@ SUBROUTINE PZLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+ *
+ *        Use a Level 1 PBLAS solve, scaling intermediate results.
+ *
+-         IF( XMAX.GT.BIGNUM*HALF ) THEN
++         IF( XMAX( 1 ).GT.BIGNUM*HALF ) THEN
+ *
+ *           Scale X so that its components are less than or equal to
+ *           BIGNUM in absolute value.
+ *
+-            SCALE = ( BIGNUM*HALF ) / XMAX
++            SCALE = ( BIGNUM*HALF ) / XMAX( 1 )
+             CALL PZDSCAL( N, SCALE, X, IX, JX, DESCX, 1 )
+-            XMAX = BIGNUM
++            XMAX( 1 ) = BIGNUM
+          ELSE
+-            XMAX = XMAX*TWO
++            XMAX( 1 ) = XMAX( 1 )*TWO
+          END IF
+ *
+          IF( NOTRAN ) THEN
+@@ -651,7 +652,7 @@ SUBROUTINE PZLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                         CALL PZDSCAL( N, REC, X, IX, JX, DESCX, 1 )
+                         XJTMP = XJTMP*REC
+                         SCALE = SCALE*REC
+-                        XMAX = XMAX*REC
++                        XMAX( 1 ) = XMAX( 1 )*REC
+                      END IF
+                   END IF
+ *                 X( J ) = ZLADIV( X( J ), TJJS )
+@@ -682,7 +683,7 @@ SUBROUTINE PZLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                      CALL PZDSCAL( N, REC, X, IX, JX, DESCX, 1 )
+                      XJTMP = XJTMP*REC
+                      SCALE = SCALE*REC
+-                     XMAX = XMAX*REC
++                     XMAX( 1 ) = XMAX( 1 )*REC
+                   END IF
+ *                 X( J ) = ZLADIV( X( J ), TJJS )
+ *                 XJ = CABS1( X( J ) )
+@@ -706,7 +707,7 @@ SUBROUTINE PZLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                   XJTMP = CONE
+                   XJ = ONE
+                   SCALE = ZERO
+-                  XMAX = ZERO
++                  XMAX( 1 ) = ZERO
+                END IF
+    90          CONTINUE
+ *
+@@ -715,7 +716,7 @@ SUBROUTINE PZLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+ *
+                IF( XJ.GT.ONE ) THEN
+                   REC = ONE / XJ
+-                  IF( CNORM( J ).GT.( BIGNUM-XMAX )*REC ) THEN
++                  IF( CNORM( J ).GT.( BIGNUM-XMAX( 1 ) )*REC ) THEN
+ *
+ *                    Scale x by 1/(2*abs(x(j))).
+ *
+@@ -724,7 +725,7 @@ SUBROUTINE PZLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                      XJTMP = XJTMP*REC
+                      SCALE = SCALE*REC
+                   END IF
+-               ELSE IF( XJ*CNORM( J ).GT.( BIGNUM-XMAX ) ) THEN
++               ELSE IF( XJ*CNORM( J ).GT.( BIGNUM-XMAX( 1 ) ) ) THEN
+ *
+ *                 Scale x by 1/2.
+ *
+@@ -743,7 +744,7 @@ SUBROUTINE PZLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                      CALL PZAXPY( J-1, ZDUM, A, IA, JA+J-1, DESCA, 1, X,
+      $                            IX, JX, DESCX, 1 )
+                      CALL PZAMAX( J-1, ZDUM, IMAX, X, IX, JX, DESCX, 1 )
+-                     XMAX = CABS1( ZDUM )
++                     XMAX( 1 ) = CABS1( ZDUM )
+                      CALL DGSUM2D( CONTXT, 'Row', ' ', 1, 1, XMAX, 1,
+      $                             -1, -1 )
+                   END IF
+@@ -757,7 +758,7 @@ SUBROUTINE PZLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                      CALL PZAXPY( N-J, ZDUM, A, IA+J, JA+J-1, DESCA, 1,
+      $                            X, IX+J, JX, DESCX, 1 )
+                      CALL PZAMAX( N-J, ZDUM, I, X, IX+J, JX, DESCX, 1 )
+-                     XMAX = CABS1( ZDUM )
++                     XMAX( 1 ) = CABS1( ZDUM )
+                      CALL DGSUM2D( CONTXT, 'Row', ' ', 1, 1, XMAX, 1,
+      $                             -1, -1 )
+                   END IF
+@@ -785,7 +786,7 @@ SUBROUTINE PZLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                END IF
+                XJ = CABS1( XJTMP )
+                USCAL = DCMPLX( TSCAL )
+-               REC = ONE / MAX( XMAX, ONE )
++               REC = ONE / MAX( XMAX( 1 ), ONE )
+                IF( CNORM( J ).GT.( BIGNUM-XJ )*REC ) THEN
+ *
+ *                 If x(j) could overflow, scale x by 1/(2*XMAX).
+@@ -820,7 +821,7 @@ SUBROUTINE PZLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                      CALL PZDSCAL( N, REC, X, IX, JX, DESCX, 1 )
+                      XJTMP = XJTMP*REC
+                      SCALE = SCALE*REC
+-                     XMAX = XMAX*REC
++                     XMAX( 1 ) = XMAX( 1 )*REC
+                   END IF
+                END IF
+ *
+@@ -924,7 +925,7 @@ SUBROUTINE PZLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                            CALL PZDSCAL( N, REC, X, IX, JX, DESCX, 1 )
+                            XJTMP = XJTMP*REC
+                            SCALE = SCALE*REC
+-                           XMAX = XMAX*REC
++                           XMAX( 1 ) = XMAX( 1 )*REC
+                         END IF
+                      END IF
+ *                    X( J ) = ZLADIV( X( J ), TJJS )
+@@ -945,7 +946,7 @@ SUBROUTINE PZLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                         CALL PZDSCAL( N, REC, X, IX, JX, DESCX, 1 )
+                         XJTMP = XJTMP*REC
+                         SCALE = SCALE*REC
+-                        XMAX = XMAX*REC
++                        XMAX( 1 ) = XMAX( 1 )*REC
+                      END IF
+ *                    X( J ) = ZLADIV( X( J ), TJJS )
+                      XJTMP = ZLADIV( XJTMP, TJJS )
+@@ -966,7 +967,7 @@ SUBROUTINE PZLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                      END IF
+                      XJTMP = CONE
+                      SCALE = ZERO
+-                     XMAX = ZERO
++                     XMAX( 1 ) = ZERO
+                   END IF
+   110             CONTINUE
+                ELSE
+@@ -981,7 +982,7 @@ SUBROUTINE PZLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                      X( IROWX ) = XJTMP
+                   END IF
+                END IF
+-               XMAX = MAX( XMAX, CABS1( XJTMP ) )
++               XMAX( 1 ) = MAX( XMAX( 1 ), CABS1( XJTMP ) )
+   120       CONTINUE
+ *
+          ELSE
+@@ -1004,7 +1005,7 @@ SUBROUTINE PZLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                END IF
+                XJ = CABS1( XJTMP )
+                USCAL = TSCAL
+-               REC = ONE / MAX( XMAX, ONE )
++               REC = ONE / MAX( XMAX( 1 ), ONE )
+                IF( CNORM( J ).GT.( BIGNUM-XJ )*REC ) THEN
+ *
+ *                 If x(j) could overflow, scale x by 1/(2*XMAX).
+@@ -1039,7 +1040,7 @@ SUBROUTINE PZLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                      CALL PZDSCAL( N, REC, X, IX, JX, DESCX, 1 )
+                      XJTMP = XJTMP*REC
+                      SCALE = SCALE*REC
+-                     XMAX = XMAX*REC
++                     XMAX( 1 ) = XMAX( 1 )*REC
+                   END IF
+                END IF
+ *
+@@ -1145,7 +1146,7 @@ SUBROUTINE PZLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                            CALL PZDSCAL( N, REC, X, IX, JX, DESCX, 1 )
+                            XJTMP = XJTMP*REC
+                            SCALE = SCALE*REC
+-                           XMAX = XMAX*REC
++                           XMAX( 1 ) = XMAX( 1 )*REC
+                         END IF
+                      END IF
+ *                    X( J ) = ZLADIV( X( J ), TJJS )
+@@ -1164,7 +1165,7 @@ SUBROUTINE PZLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                         CALL PZDSCAL( N, REC, X, IX, JX, DESCX, 1 )
+                         XJTMP = XJTMP*REC
+                         SCALE = SCALE*REC
+-                        XMAX = XMAX*REC
++                        XMAX( 1 ) = XMAX( 1 )*REC
+                      END IF
+ *                    X( J ) = ZLADIV( X( J ), TJJS )
+                      XJTMP = ZLADIV( XJTMP, TJJS )
+@@ -1181,7 +1182,7 @@ SUBROUTINE PZLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+      $                  X( IROWX ) = CONE
+                      XJTMP = CONE
+                      SCALE = ZERO
+-                     XMAX = ZERO
++                     XMAX( 1 ) = ZERO
+                   END IF
+   130             CONTINUE
+                ELSE
+@@ -1194,7 +1195,7 @@ SUBROUTINE PZLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                   IF( ( MYROW.EQ.ITMP1X ) .AND. ( MYCOL.EQ.ITMP2X ) )
+      $               X( IROWX ) = XJTMP
+                END IF
+-               XMAX = MAX( XMAX, CABS1( XJTMP ) )
++               XMAX( 1 ) = MAX( XMAX( 1 ), CABS1( XJTMP ) )
+   140       CONTINUE
+          END IF
+          SCALE = SCALE / TSCAL
+diff --git a/SRC/pzlawil.f b/SRC/pzlawil.f
+index e89a9a3..7e502ef 100644
+--- a/SRC/pzlawil.f
++++ b/SRC/pzlawil.f
+@@ -124,11 +124,10 @@ SUBROUTINE PZLAWIL( II, JJ, M, A, DESCA, H44, H33, H43H34, V )
+      $                   MODKM1, MYCOL, MYROW, NPCOL, NPROW, NUM, RIGHT,
+      $                   RSRC, UP
+       DOUBLE PRECISION   S
+-      COMPLEX*16         CDUM, H11, H12, H21, H22, H33S, H44S, V1, V2,
+-     $                   V3
++      COMPLEX*16         CDUM, H22, H33S, H44S, V1, V2
+ *     ..
+ *     .. Local Arrays ..
+-      COMPLEX*16         BUF( 4 )
++      COMPLEX*16         BUF( 4 ), H11( 1 ), H12( 1 ), H21( 1 ), V3( 1 )
+ *     ..
+ *     .. External Subroutines ..
+       EXTERNAL           BLACS_GRIDINFO, INFOG2L, ZGERV2D, ZGESD2D
+@@ -181,18 +180,18 @@ SUBROUTINE PZLAWIL( II, JJ, M, A, DESCA, H44, H33, H43H34, V )
+             IF( NPCOL.GT.1 ) THEN
+                CALL ZGERV2D( CONTXT, 1, 1, V3, 1, MYROW, LEFT )
+             ELSE
+-               V3 = A( ( ICOL-2 )*LDA+IROW )
++               V3( 1 ) = A( ( ICOL-2 )*LDA+IROW )
+             END IF
+             IF( NUM.GT.1 ) THEN
+                CALL ZGERV2D( CONTXT, 4, 1, BUF, 4, UP, LEFT )
+-               H11 = BUF( 1 )
+-               H21 = BUF( 2 )
+-               H12 = BUF( 3 )
++               H11( 1 ) = BUF( 1 )
++               H21( 1 ) = BUF( 2 )
++               H12( 1 ) = BUF( 3 )
+                H22 = BUF( 4 )
+             ELSE
+-               H11 = A( ( ICOL-3 )*LDA+IROW-2 )
+-               H21 = A( ( ICOL-3 )*LDA+IROW-1 )
+-               H12 = A( ( ICOL-2 )*LDA+IROW-2 )
++               H11( 1 ) = A( ( ICOL-3 )*LDA+IROW-2 )
++               H21( 1 ) = A( ( ICOL-3 )*LDA+IROW-1 )
++               H12( 1 ) = A( ( ICOL-2 )*LDA+IROW-2 )
+                H22 = A( ( ICOL-2 )*LDA+IROW-1 )
+             END IF
+          END IF
+@@ -225,20 +224,20 @@ SUBROUTINE PZLAWIL( II, JJ, M, A, DESCA, H44, H33, H43H34, V )
+             IF( NUM.GT.1 ) THEN
+                CALL ZGERV2D( CONTXT, 1, 1, H11, 1, UP, LEFT )
+             ELSE
+-               H11 = A( ( ICOL-3 )*LDA+IROW-2 )
++               H11( 1 ) = A( ( ICOL-3 )*LDA+IROW-2 )
+             END IF
+             IF( NPROW.GT.1 ) THEN
+                CALL ZGERV2D( CONTXT, 1, 1, H12, 1, UP, MYCOL )
+             ELSE
+-               H12 = A( ( ICOL-2 )*LDA+IROW-2 )
++               H12( 1 ) = A( ( ICOL-2 )*LDA+IROW-2 )
+             END IF
+             IF( NPCOL.GT.1 ) THEN
+                CALL ZGERV2D( CONTXT, 1, 1, H21, 1, MYROW, LEFT )
+             ELSE
+-               H21 = A( ( ICOL-3 )*LDA+IROW-1 )
++               H21( 1 ) = A( ( ICOL-3 )*LDA+IROW-1 )
+             END IF
+             H22 = A( ( ICOL-2 )*LDA+IROW-1 )
+-            V3 = A( ( ICOL-2 )*LDA+IROW )
++            V3( 1 ) = A( ( ICOL-2 )*LDA+IROW )
+          END IF
+       END IF
+       IF( ( MYROW.NE.II ) .OR. ( MYCOL.NE.JJ ) )
+@@ -247,24 +246,24 @@ SUBROUTINE PZLAWIL( II, JJ, M, A, DESCA, H44, H33, H43H34, V )
+       IF( MODKM1.GT.1 ) THEN
+          CALL INFOG2L( M+2, M+2, DESCA, NPROW, NPCOL, MYROW, MYCOL,
+      $                 IROW, ICOL, RSRC, JSRC )
+-         H11 = A( ( ICOL-3 )*LDA+IROW-2 )
+-         H21 = A( ( ICOL-3 )*LDA+IROW-1 )
+-         H12 = A( ( ICOL-2 )*LDA+IROW-2 )
++         H11( 1 ) = A( ( ICOL-3 )*LDA+IROW-2 )
++         H21( 1 ) = A( ( ICOL-3 )*LDA+IROW-1 )
++         H12( 1 ) = A( ( ICOL-2 )*LDA+IROW-2 )
+          H22 = A( ( ICOL-2 )*LDA+IROW-1 )
+-         V3 = A( ( ICOL-2 )*LDA+IROW )
++         V3( 1 ) = A( ( ICOL-2 )*LDA+IROW )
+       END IF
+ *
+-      H44S = H44 - H11
+-      H33S = H33 - H11
+-      V1 = ( H33S*H44S-H43H34 ) / H21 + H12
+-      V2 = H22 - H11 - H33S - H44S
+-      S = CABS1( V1 ) + CABS1( V2 ) + CABS1( V3 )
++      H44S = H44 - H11( 1 )
++      H33S = H33 - H11( 1 )
++      V1 = ( H33S*H44S-H43H34 ) / H21( 1 ) + H12( 1 )
++      V2 = H22 - H11( 1 ) - H33S - H44S
++      S = CABS1( V1 ) + CABS1( V2 ) + CABS1( V3( 1 ) )
+       V1 = V1 / S
+       V2 = V2 / S
+-      V3 = V3 / S
++      V3( 1 ) = V3( 1 ) / S
+       V( 1 ) = V1
+       V( 2 ) = V2
+-      V( 3 ) = V3
++      V( 3 ) = V3( 1 )
+ *
+       RETURN
+ *
+diff --git a/SRC/pztrevc.f b/SRC/pztrevc.f
+index 0536475..3b27286 100644
+--- a/SRC/pztrevc.f
++++ b/SRC/pztrevc.f
+@@ -218,11 +218,12 @@ SUBROUTINE PZTREVC( SIDE, HOWMNY, SELECT, N, T, DESCT, VL, DESCVL,
+      $                   ITMP2, J, K, KI, LDT, LDVL, LDVR, LDW, MB,
+      $                   MYCOL, MYROW, NB, NPCOL, NPROW, RSRC
+       REAL               SELF
+-      DOUBLE PRECISION   OVFL, REMAXD, SCALE, SMIN, SMLNUM, ULP, UNFL
++      DOUBLE PRECISION   OVFL, REMAXD, SCALE, SMLNUM, ULP, UNFL
+       COMPLEX*16         CDUM, REMAXC, SHIFT
+ *     ..
+ *     .. Local Arrays ..
+       INTEGER            DESCW( DLEN_ )
++      DOUBLE PRECISION   SMIN( 1 )
+ *     ..
+ *     .. External Functions ..
+       LOGICAL            LSAME
+@@ -355,13 +356,13 @@ SUBROUTINE PZTREVC( SIDE, HOWMNY, SELECT, N, T, DESCT, VL, DESCVL,
+      $            GO TO 70
+             END IF
+ *
+-            SMIN = ZERO
++            SMIN( 1 ) = ZERO
+             SHIFT = CZERO
+             CALL INFOG2L( KI, KI, DESCT, NPROW, NPCOL, MYROW, MYCOL,
+      $                    IROW, ICOL, ITMP1, ITMP2 )
+             IF( ( MYROW.EQ.ITMP1 ) .AND. ( MYCOL.EQ.ITMP2 ) ) THEN
+                SHIFT = T( ( ICOL-1 )*LDT+IROW )
+-               SMIN = MAX( ULP*( CABS1( SHIFT ) ), SMLNUM )
++               SMIN( 1 ) = MAX( ULP*( CABS1( SHIFT ) ), SMLNUM )
+             END IF
+             CALL DGSUM2D( CONTXT, 'ALL', ' ', 1, 1, SMIN, 1, -1, -1 )
+             CALL ZGSUM2D( CONTXT, 'ALL', ' ', 1, 1, SHIFT, 1, -1, -1 )
+@@ -396,8 +397,9 @@ SUBROUTINE PZTREVC( SIDE, HOWMNY, SELECT, N, T, DESCT, VL, DESCVL,
+                IF( ( MYROW.EQ.ITMP1 ) .AND. ( MYCOL.EQ.ITMP2 ) ) THEN
+                   T( ( ICOL-1 )*LDT+IROW ) = T( ( ICOL-1 )*LDT+IROW ) -
+      $               SHIFT
+-                  IF( CABS1( T( ( ICOL-1 )*LDT+IROW ) ).LT.SMIN ) THEN
+-                     T( ( ICOL-1 )*LDT+IROW ) = DCMPLX( SMIN )
++                  IF( CABS1( T( ( ICOL-1 )*LDT+IROW ) ).LT.SMIN( 1 ) )
++     $            THEN
++                     T( ( ICOL-1 )*LDT+IROW ) = DCMPLX( SMIN( 1 ) )
+                   END IF
+                END IF
+    50       CONTINUE
+@@ -467,13 +469,13 @@ SUBROUTINE PZTREVC( SIDE, HOWMNY, SELECT, N, T, DESCT, VL, DESCVL,
+      $            GO TO 110
+             END IF
+ *
+-            SMIN = ZERO
++            SMIN( 1 ) = ZERO
+             SHIFT = CZERO
+             CALL INFOG2L( KI, KI, DESCT, NPROW, NPCOL, MYROW, MYCOL,
+      $                    IROW, ICOL, ITMP1, ITMP2 )
+             IF( ( MYROW.EQ.ITMP1 ) .AND. ( MYCOL.EQ.ITMP2 ) ) THEN
+                SHIFT = T( ( ICOL-1 )*LDT+IROW )
+-               SMIN = MAX( ULP*( CABS1( SHIFT ) ), SMLNUM )
++               SMIN( 1 ) = MAX( ULP*( CABS1( SHIFT ) ), SMLNUM )
+             END IF
+             CALL DGSUM2D( CONTXT, 'ALL', ' ', 1, 1, SMIN, 1, -1, -1 )
+             CALL ZGSUM2D( CONTXT, 'ALL', ' ', 1, 1, SHIFT, 1, -1, -1 )
+@@ -507,8 +509,8 @@ SUBROUTINE PZTREVC( SIDE, HOWMNY, SELECT, N, T, DESCT, VL, DESCVL,
+                IF( ( MYROW.EQ.ITMP1 ) .AND. ( MYCOL.EQ.ITMP2 ) ) THEN
+                   T( ( ICOL-1 )*LDT+IROW ) = T( ( ICOL-1 )*LDT+IROW ) -
+      $               SHIFT
+-                  IF( CABS1( T( ( ICOL-1 )*LDT+IROW ) ).LT.SMIN )
+-     $               T( ( ICOL-1 )*LDT+IROW ) = DCMPLX( SMIN )
++                  IF( CABS1( T( ( ICOL-1 )*LDT+IROW ) ).LT.SMIN( 1 ) )
++     $               T( ( ICOL-1 )*LDT+IROW ) = DCMPLX( SMIN( 1 ) )
+                END IF
+    90       CONTINUE
+ *
+
+From 189c84001bcd564296a475c5c757afc9f337e828 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Tiziano=20M=C3=BCller?= <tiziano.mueller@chem.uzh.ch>
+Date: Thu, 25 Jun 2020 18:37:34 +0200
+Subject: [PATCH] use -std=legacy for tests with GCC-10+
+
+---
+ BLACS/TESTING/CMakeLists.txt | 10 +++++++---
+ PBLAS/TESTING/CMakeLists.txt |  7 ++++---
+ PBLAS/TIMING/CMakeLists.txt  |  5 +++--
+ TESTING/EIG/CMakeLists.txt   |  3 +++
+ TESTING/LIN/CMakeLists.txt   |  4 ++++
+ 5 files changed, 21 insertions(+), 8 deletions(-)
+
+diff --git a/BLACS/TESTING/CMakeLists.txt b/BLACS/TESTING/CMakeLists.txt
+index d8846b5..4e91ac2 100644
+--- a/BLACS/TESTING/CMakeLists.txt
++++ b/BLACS/TESTING/CMakeLists.txt
+@@ -1,10 +1,14 @@
+-set(FTestObj  
++set(FTestObj
+    blacstest.f btprim.f tools.f)
+ 
++if ("${CMAKE_Fortran_COMPILER_ID}" STREQUAL "GNU" AND CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL 10)
++    set_source_files_properties(blacstest.f PROPERTIES COMPILE_FLAGS "-std=legacy")
++endif()
++
+ add_executable(xFbtest ${FTestObj})
+ target_link_libraries(xFbtest scalapack)
+ 
+-set(CTestObj  
++set(CTestObj
+    Cbt.c)
+ 
+ set_property(
+@@ -46,4 +50,4 @@ add_test(xFbtest
+     -DRUNTIMEDIR=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
+     -DSOURCEDIR=${CMAKE_CURRENT_SOURCE_DIR}
+     -P ${CMAKE_CURRENT_SOURCE_DIR}/runtest.cmake
+-    )
+\ No newline at end of file
++    )
+diff --git a/PBLAS/TESTING/CMakeLists.txt b/PBLAS/TESTING/CMakeLists.txt
+index e60f5e4..ee77091 100644
+--- a/PBLAS/TESTING/CMakeLists.txt
++++ b/PBLAS/TESTING/CMakeLists.txt
+@@ -10,7 +10,7 @@ set (zpbtcom pzblastst.f dlamch.f ${pbtcom})
+ 
+ set_property(
+    SOURCE ${PblasErrorHandler}
+-   APPEND PROPERTY COMPILE_DEFINITIONS TestingPblas 
++   APPEND PROPERTY COMPILE_DEFINITIONS TestingPblas
+    )
+ 
+ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${SCALAPACK_BINARY_DIR}/PBLAS/TESTING)
+@@ -74,5 +74,6 @@ add_test(dpb3tst ${MPIEXEC} ${MPIEXEC_NUMPROC_FLAG} 4 ./dpb3tst)
+ add_test(cpb3tst ${MPIEXEC} ${MPIEXEC_NUMPROC_FLAG} 4 ./cpb3tst)
+ add_test(zpb3tst ${MPIEXEC} ${MPIEXEC_NUMPROC_FLAG} 4 ./zpb3tst)
+ 
+-
+-
++if ("${CMAKE_Fortran_COMPILER_ID}" STREQUAL "GNU" AND CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL 10)
++    set( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -std=legacy" )  # local to this directory
++endif()
+diff --git a/PBLAS/TIMING/CMakeLists.txt b/PBLAS/TIMING/CMakeLists.txt
+index 763330f..208bbc3 100644
+--- a/PBLAS/TIMING/CMakeLists.txt
++++ b/PBLAS/TIMING/CMakeLists.txt
+@@ -74,5 +74,6 @@ add_test(dpb3tim ${MPIEXEC} ${MPIEXEC_NUMPROC_FLAG} 4 ./dpb3tim)
+ add_test(cpb3tim ${MPIEXEC} ${MPIEXEC_NUMPROC_FLAG} 4 ./cpb3tim)
+ add_test(zpb3tim ${MPIEXEC} ${MPIEXEC_NUMPROC_FLAG} 4 ./zpb3tim)
+ 
+-
+-
++if ("${CMAKE_Fortran_COMPILER_ID}" STREQUAL "GNU" AND CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL 10)
++    set( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -std=legacy" )  # local to this directory
++endif()
+diff --git a/TESTING/EIG/CMakeLists.txt b/TESTING/EIG/CMakeLists.txt
+index 97c7036..19a1f34 100644
+--- a/TESTING/EIG/CMakeLists.txt
++++ b/TESTING/EIG/CMakeLists.txt
+@@ -97,3 +97,6 @@ target_link_libraries(xzheevr scalapack ${LAPACK_LIBRARIES} ${BLAS_LIBRARIES})
+ target_link_libraries(xshseqr scalapack ${LAPACK_LIBRARIES} ${BLAS_LIBRARIES})
+ target_link_libraries(xdhseqr scalapack ${LAPACK_LIBRARIES} ${BLAS_LIBRARIES})
+ 
++if ("${CMAKE_Fortran_COMPILER_ID}" STREQUAL "GNU" AND CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL 10)
++    set( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -std=legacy" )  # local to this directory
++endif()
+diff --git a/TESTING/LIN/CMakeLists.txt b/TESTING/LIN/CMakeLists.txt
+index 55a53e9..65f169b 100644
+--- a/TESTING/LIN/CMakeLists.txt
++++ b/TESTING/LIN/CMakeLists.txt
+@@ -110,3 +110,7 @@ target_link_libraries(xsls scalapack ${LAPACK_LIBRARIES} ${BLAS_LIBRARIES})
+ target_link_libraries(xdls scalapack ${LAPACK_LIBRARIES} ${BLAS_LIBRARIES})
+ target_link_libraries(xcls scalapack ${LAPACK_LIBRARIES} ${BLAS_LIBRARIES})
+ target_link_libraries(xzls scalapack ${LAPACK_LIBRARIES} ${BLAS_LIBRARIES})
++
++if ("${CMAKE_Fortran_COMPILER_ID}" STREQUAL "GNU" AND CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL 10)
++    set( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -std=legacy" )  # local to this directory
++endif()
diff --git a/gnu/packages/patches/sendgmail-accept-ignored-gsuite-flag.patch b/gnu/packages/patches/sendgmail-accept-ignored-gsuite-flag.patch
new file mode 100644
index 0000000000..8405ff4e42
--- /dev/null
+++ b/gnu/packages/patches/sendgmail-accept-ignored-gsuite-flag.patch
@@ -0,0 +1,39 @@
+From 854490dc4a8a6a661b4750730c3ff749519f6e36 Mon Sep 17 00:00:00 2001
+From: Philip McGrath <philip@philipmcgrath.com>
+Date: Sun, 14 Nov 2021 10:14:24 -0500
+Subject: [PATCH] sendgmail: accept and ignore a "-gsuite" flag
+
+Accepting a "-gsuite" flag provides compatability with
+https://github.com/Flameeyes/gmail-oauth2-tools/commit/eabb456
+so users do not have to change their scripts or config files.
+
+Full hash of original: eabb45608ff4ce04045ff4ea92d05450e789ac81
+
+Related to https://github.com/google/gmail-oauth2-tools/pull/17
+---
+ go/sendgmail/main.go | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/go/sendgmail/main.go b/go/sendgmail/main.go
+index 405aa1b..5cfd0c1 100644
+--- a/go/sendgmail/main.go
++++ b/go/sendgmail/main.go
+@@ -40,6 +40,7 @@ var (
+ 	setUp  bool
+ 	dummyF string
+ 	dummyI bool
++	gsuite bool
+ )
+ 
+ func init() {
+@@ -47,6 +48,7 @@ func init() {
+ 	flag.BoolVar(&setUp, "setup", false, "If true, sendgmail sets up the sender's OAuth2 token and then exits.")
+ 	flag.StringVar(&dummyF, "f", "", "Dummy flag for compatibility with sendmail.")
+ 	flag.BoolVar(&dummyI, "i", true, "Dummy flag for compatibility with sendmail.")
++	flag.BoolVar(&gsuite, "gsuite", true, "Dummy flag for compatibility with other forks of sendgmail.")
+ }
+ 
+ func main() {
+-- 
+2.32.0
+
diff --git a/gnu/packages/patches/sendgmail-remove-domain-restriction.patch b/gnu/packages/patches/sendgmail-remove-domain-restriction.patch
new file mode 100644
index 0000000000..d23af33375
--- /dev/null
+++ b/gnu/packages/patches/sendgmail-remove-domain-restriction.patch
@@ -0,0 +1,34 @@
+From a5ecd1b2302d0def2f6f8349747022a615a9f017 Mon Sep 17 00:00:00 2001
+From: Tamas K Lengyel <tamas@tklengyel.com>
+Date: Tue, 26 May 2020 13:27:50 -0600
+Subject: [PATCH] Don't limit to email with @gmail.com
+
+---
+ go/sendgmail/main.go | 4 ----
+ 1 file changed, 4 deletions(-)
+
+diff --git a/go/sendgmail/main.go b/go/sendgmail/main.go
+index b35ef23..405aa1b 100644
+--- a/go/sendgmail/main.go
++++ b/go/sendgmail/main.go
+@@ -30,7 +30,6 @@ import (
+ 	"log"
+ 	"net/smtp"
+ 	"os"
+-	"strings"
+ 
+ 	"golang.org/x/oauth2"
+ 	googleOAuth2 "golang.org/x/oauth2/google"
+@@ -52,9 +51,6 @@ func init() {
+ 
+ func main() {
+ 	flag.Parse()
+-	if atDomain := "@gmail.com"; !strings.HasSuffix(sender, atDomain) {
+-		log.Fatalf("-sender must specify an %v email address.", atDomain)
+-	}
+ 	config := getConfig()
+ 	tokenPath := fmt.Sprintf("%v/.sendgmail.%v.json", os.Getenv("HOME"), sender)
+ 	if setUp {
+-- 
+2.32.0
+
diff --git a/gnu/packages/patches/shadow-hurd-pctrl.patch b/gnu/packages/patches/shadow-hurd-pctrl.patch
deleted file mode 100644
index 2e376e19a9..0000000000
--- a/gnu/packages/patches/shadow-hurd-pctrl.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-Avoid including sys/prctl.h on the Hurd.
-
-Upstream status: Not submitted.
-
---- shadow-4.8.1/libmisc/idmapping.c.orig	2020-03-07 16:32:05.000000000 -0500
-+++ shadow-4.8.1/libmisc/idmapping.c	2020-03-07 16:32:27.000000000 -0500
-@@ -36,8 +36,8 @@
- #include <stdio.h>
- #include "prototypes.h"
- #include "idmapping.h"
--#include <sys/prctl.h>
- #if HAVE_SYS_CAPABILITY_H
-+#include <sys/prctl.h>
- #include <sys/capability.h>
- #endif
- 
diff --git a/gnu/packages/patches/spice-vdagent-glib-2.68.patch b/gnu/packages/patches/spice-vdagent-glib-2.68.patch
new file mode 100644
index 0000000000..cd5f13a909
--- /dev/null
+++ b/gnu/packages/patches/spice-vdagent-glib-2.68.patch
@@ -0,0 +1,112 @@
+From 8348ef3c6121247e2b8be0641bbf3df3d55d9bff Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= <marcandre.lureau@redhat.com>
+Date: Tue, 4 May 2021 13:20:47 +0400
+Subject: [PATCH] Fix g_memdup deprecation warning with glib >= 2.68
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Related to:
+https://bugzilla.redhat.com/show_bug.cgi?id=1943059
+
+Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
+---
+ configure.ac            | 4 ++++
+ src/vdagent/vdagent.c   | 4 ++--
+ src/vdagent/x11-randr.c | 2 +-
+ src/vdagentd/vdagentd.c | 8 ++++----
+ 4 files changed, 11 insertions(+), 7 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 7b2a99c..3de9b9b 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -124,6 +124,10 @@ PKG_CHECK_MODULES(ALSA, [alsa >= 1.0.22])
+ PKG_CHECK_MODULES([DBUS], [dbus-1])
+ PKG_CHECK_MODULES([DRM], [libdrm])
+ 
++PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.68], [], [
++    AC_DEFINE(g_memdup2, g_memdup, [GLib2 < 2.68 compatibility])
++])
++
+ if test "$with_session_info" = "auto" || test "$with_session_info" = "systemd"; then
+     PKG_CHECK_MODULES([LIBSYSTEMD_LOGIN],
+                       [libsystemd >= 209],
+diff --git a/src/vdagent/vdagent.c b/src/vdagent/vdagent.c
+index 0c69907..fd08522 100644
+--- a/src/vdagent/vdagent.c
++++ b/src/vdagent/vdagent.c
+@@ -228,7 +228,7 @@ static void daemon_read_complete(UdscsConnection *conn,
+         break;
+     case VDAGENTD_AUDIO_VOLUME_SYNC: {
+         VDAgentAudioVolumeSync *avs = (VDAgentAudioVolumeSync *)data;
+-        uint16_t *volume = g_memdup(avs->volume, sizeof(uint16_t) * avs->nchannels);
++        uint16_t *volume = g_memdup2(avs->volume, sizeof(uint16_t) * avs->nchannels);
+ 
+         if (avs->is_playback) {
+             vdagent_audio_playback_sync(avs->mute, avs->nchannels, volume);
+@@ -414,7 +414,7 @@ int main(int argc, char *argv[])
+     GOptionContext *context;
+     GError *error = NULL;
+     VDAgent *agent;
+-    char **orig_argv = g_memdup(argv, sizeof(char*) * (argc+1));
++    char **orig_argv = g_memdup2(argv, sizeof(char*) * (argc+1));
+     orig_argv[argc] = NULL; /* To avoid clang analyzer false-positive */
+ 
+     context = g_option_context_new(NULL);
+diff --git a/src/vdagent/x11-randr.c b/src/vdagent/x11-randr.c
+index 27404a1..037aded 100644
+--- a/src/vdagent/x11-randr.c
++++ b/src/vdagent/x11-randr.c
+@@ -982,7 +982,7 @@ void vdagent_x11_set_monitor_config(struct vdagent_x11 *x11,
+                    fullscreen it will keep sending the failing config. */
+                 g_free(x11->randr.failed_conf);
+                 x11->randr.failed_conf =
+-                    g_memdup(mon_config, config_size(mon_config->num_of_monitors));
++                    g_memdup2(mon_config, config_size(mon_config->num_of_monitors));
+                 return;
+             }
+         }
+diff --git a/src/vdagentd/vdagentd.c b/src/vdagentd/vdagentd.c
+index 78378aa..3e59331 100644
+--- a/src/vdagentd/vdagentd.c
++++ b/src/vdagentd/vdagentd.c
+@@ -216,7 +216,7 @@ static void do_client_monitors(VirtioPort *vport, int port_nr,
+     vdagentd_write_xorg_conf(new_monitors);
+ 
+     g_free(mon_config);
+-    mon_config = g_memdup(new_monitors, size);
++    mon_config = g_memdup2(new_monitors, size);
+ 
+     /* Send monitor config to currently active agent */
+     if (active_session_conn)
+@@ -249,7 +249,7 @@ static void do_client_capabilities(VirtioPort *vport,
+ {
+     capabilities_size = VD_AGENT_CAPS_SIZE_FROM_MSG_SIZE(message_header->size);
+     g_free(capabilities);
+-    capabilities = g_memdup(caps->caps, capabilities_size * sizeof(uint32_t));
++    capabilities = g_memdup2(caps->caps, capabilities_size * sizeof(uint32_t));
+ 
+     if (caps->request) {
+         /* Report the previous client has disconnected. */
+@@ -647,7 +647,7 @@ static void virtio_port_read_complete(
+     case VD_AGENT_GRAPHICS_DEVICE_INFO: {
+         // store device info for re-sending when a session agent reconnects
+         g_free(device_info);
+-        device_info = g_memdup(data, message_header->size);
++        device_info = g_memdup2(data, message_header->size);
+         device_info_size = message_header->size;
+         forward_data_to_session_agent(VDAGENTD_GRAPHICS_DEVICE_INFO, data, message_header->size);
+         break;
+@@ -1090,7 +1090,7 @@ static void do_agent_xorg_resolution(UdscsConnection             *conn,
+     }
+ 
+     g_free(agent_data->screen_info);
+-    agent_data->screen_info = g_memdup(data, header->size);
++    agent_data->screen_info = g_memdup2(data, header->size);
+     agent_data->width  = header->arg1;
+     agent_data->height = header->arg2;
+     agent_data->screen_count = n;
+-- 
+GitLab
+
diff --git a/gnu/packages/patches/sssd-collision-with-external-nss-symbol.patch b/gnu/packages/patches/sssd-collision-with-external-nss-symbol.patch
new file mode 100644
index 0000000000..9d59ae91be
--- /dev/null
+++ b/gnu/packages/patches/sssd-collision-with-external-nss-symbol.patch
@@ -0,0 +1,71 @@
+From fe9eeb51be06059721e873f77092b1e9ba08e6c1 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Michal=20=C5=BDidek?= <mzidek@redhat.com>
+Date: Thu, 27 Feb 2020 06:50:40 +0100
+Subject: [PATCH] nss: Collision with external nss symbol
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+One of our internal static function names started
+to collide with external nss symbol. Additional
+sss_ suffix was added to avoid the collision.
+
+This is needed to unblock Fedora Rawhide's
+SSSD build.
+
+Reviewed-by: Pavel Březina <pbrezina@redhat.com>
+---
+ src/responder/nss/nss_cmd.c | 18 ++++++++++--------
+ 1 file changed, 10 insertions(+), 8 deletions(-)
+
+diff --git a/src/responder/nss/nss_cmd.c b/src/responder/nss/nss_cmd.c
+index 356aea1564..02706c4b94 100644
+--- a/src/responder/nss/nss_cmd.c
++++ b/src/responder/nss/nss_cmd.c
+@@ -731,11 +731,13 @@ static void nss_getent_done(struct tevent_req *subreq)
+     talloc_free(cmd_ctx);
+ }
+ 
+-static void nss_setnetgrent_done(struct tevent_req *subreq);
++static void sss_nss_setnetgrent_done(struct tevent_req *subreq);
+ 
+-static errno_t nss_setnetgrent(struct cli_ctx *cli_ctx,
+-                               enum cache_req_type type,
+-                               nss_protocol_fill_packet_fn fill_fn)
++/* This function's name started to collide with external nss symbol,
++ * so it has additional sss_* prefix unlike other functions here. */
++static errno_t sss_nss_setnetgrent(struct cli_ctx *cli_ctx,
++                                   enum cache_req_type type,
++                                   nss_protocol_fill_packet_fn fill_fn)
+ {
+     struct nss_ctx *nss_ctx;
+     struct nss_state_ctx *state_ctx;
+@@ -777,7 +779,7 @@ static errno_t nss_setnetgrent(struct cli_ctx *cli_ctx,
+         goto done;
+     }
+ 
+-    tevent_req_set_callback(subreq, nss_setnetgrent_done, cmd_ctx);
++    tevent_req_set_callback(subreq, sss_nss_setnetgrent_done, cmd_ctx);
+ 
+     ret = EOK;
+ 
+@@ -790,7 +792,7 @@ static errno_t nss_setnetgrent(struct cli_ctx *cli_ctx,
+     return EOK;
+ }
+ 
+-static void nss_setnetgrent_done(struct tevent_req *subreq)
++static void sss_nss_setnetgrent_done(struct tevent_req *subreq)
+ {
+     struct nss_cmd_ctx *cmd_ctx;
+     errno_t ret;
+@@ -1040,8 +1042,8 @@ static errno_t nss_cmd_initgroups_ex(struct cli_ctx *cli_ctx)
+ 
+ static errno_t nss_cmd_setnetgrent(struct cli_ctx *cli_ctx)
+ {
+-    return nss_setnetgrent(cli_ctx, CACHE_REQ_NETGROUP_BY_NAME,
+-                           nss_protocol_fill_setnetgrent);
++    return sss_nss_setnetgrent(cli_ctx, CACHE_REQ_NETGROUP_BY_NAME,
++                               nss_protocol_fill_setnetgrent);
+ }
+ 
+ static errno_t nss_cmd_getnetgrent(struct cli_ctx *cli_ctx)
diff --git a/gnu/packages/patches/sssd-fix-samba-4.15.3.patch b/gnu/packages/patches/sssd-fix-samba-4.15.3.patch
new file mode 100644
index 0000000000..731daa0ed9
--- /dev/null
+++ b/gnu/packages/patches/sssd-fix-samba-4.15.3.patch
@@ -0,0 +1,523 @@
+From 3ba88c317fd64b69b000adbdf881c88383f325d1 Mon Sep 17 00:00:00 2001
+From: Noel Power <noel.power@suse.com>
+Date: Tue, 24 Mar 2020 13:37:07 +0000
+Subject: [PATCH] Use ndr_pull_steal_switch_value for modern samba versions
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+commit bc56b10aea999284458dcc293b54cf65288e325d attempted to
+fix the build error resulting from removal of 'ndr_pull_get_switch'
+
+This change uses the new replacement method
+'ndr_pull_steal_switch_value' however depending on the samba version
+the ndr_pull_steal_switch_value abi is different.
+
+Note: ndr_pull_steal_switch_value is used since samba 4.10 for
+      the affected methods
+
+Note: the following methods have been refreshed from samba-4.12 generated
+      code;
+
+    o ndr_pull_security_ace_object_type
+    o ndr_pull_security_ace_object_inherited_type
+    o ndr_pull_security_ace_object_ctr
+
+Signed-off-by: Noel Power <noel.power@suse.com>
+
+Reviewed-by: Pavel Březina <pbrezina@redhat.com>
+(cherry picked from commit 1fdd8fa2fded1985fbfc6aa67394eebcdbb6a2fc)
+
+Reviewed-by: Pavel Březina <pbrezina@redhat.com>
+---
+ src/external/samba.m4         |  9 ++++++-
+ src/providers/ad/ad_gpo_ndr.c | 45 ++++++++++++++++++++---------------
+ 2 files changed, 34 insertions(+), 20 deletions(-)
+
+diff --git a/src/external/samba.m4 b/src/external/samba.m4
+index 089f602a60..8e06174ead 100644
+--- a/src/external/samba.m4
++++ b/src/external/samba.m4
+@@ -132,8 +132,15 @@ int main(void)
+         AC_DEFINE_UNQUOTED(SMB_IDMAP_DOMAIN_HAS_DOM_SID, 1,
+                            [Samba's struct idmap_domain has dom_sid member])
+         AC_MSG_NOTICE([Samba's struct idmap_domain has dom_sid member])
++        if test $samba_minor_version -ge 12 ; then
++            AC_DEFINE_UNQUOTED(SMB_HAS_NEW_NDR_PULL_STEAL_SWITCH, 1,
++                               [Samba's new push/pull switch functions])
++            AC_MSG_NOTICE([Samba has support for new ndr_push_steal_switch_value and ndr_pull_steal_switch_value functions])
++        else
++            AC_MSG_NOTICE([Samba supports old ndr_pull_steal_switch_value and ndr_pull_steal_switch_value functions])
++        fi
+     else
+         AC_MSG_NOTICE([Samba's struct idmap_domain does not have dom_sid member])
++        AC_MSG_NOTICE([Samba supports old ndr_pull_steal_switch_value and ndr_pull_steal_switch_value functions])
+     fi
+-
+ fi
+
+ SAVE_CFLAGS=$CFLAGS
+diff --git a/src/providers/ad/ad_gpo_ndr.c b/src/providers/ad/ad_gpo_ndr.c
+index 49c49d71b2..3d389e513d 100644
+--- a/src/providers/ad/ad_gpo_ndr.c
++++ b/src/providers/ad/ad_gpo_ndr.c
+@@ -105,9 +105,14 @@ ndr_pull_security_ace_object_type(struct ndr_pull *ndr,
+                                   union security_ace_object_type *r)
+ {
+     uint32_t level;
+-    level = ndr_token_peek(&ndr->switch_list, r);
+     NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
+     if (ndr_flags & NDR_SCALARS) {
++        /* This token is not used again (except perhaps below in the NDR_BUFFERS case) */
++#ifdef SMB_HAS_NEW_NDR_PULL_STEAL_SWITCH
++        NDR_CHECK(ndr_pull_steal_switch_value(ndr, r, &level));
++#else
++        level = ndr_pull_steal_switch_value(ndr, r);
++#endif
+         NDR_CHECK(ndr_pull_union_align(ndr, 4));
+         switch (level) {
+         case SEC_ACE_OBJECT_TYPE_PRESENT: {
+@@ -117,14 +122,6 @@ ndr_pull_security_ace_object_type(struct ndr_pull *ndr,
+             break; }
+         }
+     }
+-    if (ndr_flags & NDR_BUFFERS) {
+-        switch (level) {
+-        case SEC_ACE_OBJECT_TYPE_PRESENT:
+-            break;
+-        default:
+-            break;
+-        }
+-    }
+     return NDR_ERR_SUCCESS;
+ }
+
+@@ -135,9 +132,14 @@ ndr_pull_security_ace_object_inherited_type(struct ndr_pull *ndr,
+                                             union security_ace_object_inherited_type *r)
+ {
+     uint32_t level;
+-    level = ndr_token_peek(&ndr->switch_list, r);
+     NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
+     if (ndr_flags & NDR_SCALARS) {
++        /* This token is not used again (except perhaps below in the NDR_BUFFERS case) */
++#ifdef SMB_HAS_NEW_NDR_PULL_STEAL_SWITCH
++        NDR_CHECK(ndr_pull_steal_switch_value(ndr, r, &level));
++#else
++        level = ndr_pull_steal_switch_value(ndr, r);
++#endif
+         NDR_CHECK(ndr_pull_union_align(ndr, 4));
+         switch (level) {
+         case SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT: {
+@@ -149,14 +151,6 @@ ndr_pull_security_ace_object_inherited_type(struct ndr_pull *ndr,
+             break; }
+         }
+     }
+-    if (ndr_flags & NDR_BUFFERS) {
+-        switch (level) {
+-        case SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT:
+-            break;
+-        default:
+-            break;
+-        }
+-    }
+     return NDR_ERR_SUCCESS;
+ }
+
+@@ -198,9 +192,14 @@ ndr_pull_security_ace_object_ctr(struct ndr_pull *ndr,
+                                  union security_ace_object_ctr *r)
+ {
+     uint32_t level;
+-    level = ndr_token_peek(&ndr->switch_list, r);
+     NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
+     if (ndr_flags & NDR_SCALARS) {
++        /* This token is not used again (except perhaps below in the NDR_BUFFERS case) */
++#ifdef SMB_HAS_NEW_NDR_PULL_STEAL_SWITCH
++        NDR_CHECK(ndr_pull_steal_switch_value(ndr, r, &level));
++#else
++        level = ndr_pull_steal_switch_value(ndr, r);
++#endif
+         NDR_CHECK(ndr_pull_union_align(ndr, 4));
+         switch (level) {
+         case SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT: {
+@@ -224,6 +223,14 @@ ndr_pull_security_ace_object_ctr(struct ndr_pull *ndr,
+         }
+     }
+     if (ndr_flags & NDR_BUFFERS) {
++        if (!(ndr_flags & NDR_SCALARS)) {
++            /* We didn't get it above, and the token is not needed after this. */
++#ifdef SMB_HAS_NEW_NDR_PULL_STEAL_SWITCH
++            NDR_CHECK(ndr_pull_steal_switch_value(ndr, r, &level));
++#else
++            level = ndr_pull_steal_switch_value(ndr, r);
++#endif
++        }
+         switch (level) {
+         case SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT:
+             NDR_CHECK(ndr_pull_security_ace_object
+From 5285a1896ee19bb8f1ff752380547bc6d7a43334 Mon Sep 17 00:00:00 2001
+From: Noel Power <noel.power@suse.com>
+Date: Tue, 24 Mar 2020 18:14:34 +0000
+Subject: [PATCH] ad_gpo_ndr.c: refresh ndr_ methods from samba-4.12
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Noel Power <noel.power@suse.com>
+
+Reviewed-by: Pavel Březina <pbrezina@redhat.com>
+(cherry picked from commit c031adde4f532f39845a0efd78693600f1f8b2f4)
+
+Reviewed-by: Pavel Březina <pbrezina@redhat.com>
+---
+ src/providers/ad/ad_gpo_ndr.c | 201 ++++++++++++++++++----------------
+ 1 file changed, 106 insertions(+), 95 deletions(-)
+
+diff --git a/src/providers/ad/ad_gpo_ndr.c b/src/providers/ad/ad_gpo_ndr.c
+index 3d389e513d..a64b1a0f84 100644
+--- a/src/providers/ad/ad_gpo_ndr.c
++++ b/src/providers/ad/ad_gpo_ndr.c
+@@ -177,8 +177,16 @@ ndr_pull_security_ace_object(struct ndr_pull *ndr,
+         NDR_CHECK(ndr_pull_trailer_align(ndr, 4));
+     }
+     if (ndr_flags & NDR_BUFFERS) {
++        NDR_CHECK(ndr_pull_set_switch_value
++                  (ndr,
++                   &r->type,
++                   r->flags & SEC_ACE_OBJECT_TYPE_PRESENT));
+         NDR_CHECK(ndr_pull_security_ace_object_type
+                   (ndr, NDR_BUFFERS, &r->type));
++        NDR_CHECK(ndr_pull_set_switch_value
++                  (ndr,
++                   &r->inherited_type,
++                   r->flags & SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT));
+         NDR_CHECK(ndr_pull_security_ace_object_inherited_type
+                   (ndr, NDR_BUFFERS, &r->inherited_type));
+     }
+@@ -342,7 +350,7 @@ ndr_pull_security_acl(struct ndr_pull *ndr,
+                   (ndr, NDR_SCALARS, &r->revision));
+         NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->size));
+         NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->num_aces));
+-        if (r->num_aces > 1000) {
++        if (r->num_aces > 2000) {
+             return ndr_pull_error(ndr, NDR_ERR_RANGE, "value out of range");
+         }
+         size_aces_0 = r->num_aces;
+@@ -408,107 +416,110 @@ ad_gpo_ndr_pull_security_descriptor(struct ndr_pull *ndr,
+     TALLOC_CTX *_mem_save_sacl_0;
+     uint32_t _ptr_dacl;
+     TALLOC_CTX *_mem_save_dacl_0;
+-    uint32_t _flags_save_STRUCT = ndr->flags;
+-    uint32_t _relative_save_offset;
+-
+-    ndr_set_flags(&ndr->flags, LIBNDR_FLAG_LITTLE_ENDIAN);
+-    NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
+-    if (ndr_flags & NDR_SCALARS) {
+-        NDR_CHECK(ndr_pull_align(ndr, 5));
+-        NDR_CHECK(ndr_pull_security_descriptor_revision(ndr,
++    {
++        uint32_t _flags_save_STRUCT = ndr->flags;
++        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_LITTLE_ENDIAN);
++        NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
++        if (ndr_flags & NDR_SCALARS) {
++            NDR_CHECK(ndr_pull_align(ndr, 5));
++            NDR_CHECK(ndr_pull_security_descriptor_revision(ndr,
++                                                            NDR_SCALARS,
++                                                            &r->revision));
++            NDR_CHECK(ndr_pull_security_descriptor_type(ndr,
+                                                         NDR_SCALARS,
+-                                                        &r->revision));
+-        NDR_CHECK(ndr_pull_security_descriptor_type(ndr,
+-                                                    NDR_SCALARS,
+-                                                    &r->type));
+-        NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_owner_sid));
+-        if (_ptr_owner_sid) {
+-            NDR_PULL_ALLOC(ndr, r->owner_sid);
+-            NDR_CHECK(ndr_pull_relative_ptr1(ndr,
+-                                             r->owner_sid,
+-                                             _ptr_owner_sid));
+-        } else {
+-            r->owner_sid = NULL;
+-        }
+-        NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_group_sid));
+-        if (_ptr_group_sid) {
+-            NDR_PULL_ALLOC(ndr, r->group_sid);
+-            NDR_CHECK(ndr_pull_relative_ptr1(ndr,
+-                                             r->group_sid,
+-                                             _ptr_group_sid));
+-        } else {
+-            r->group_sid = NULL;
+-        }
+-        NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sacl));
+-        if (_ptr_sacl) {
+-            NDR_PULL_ALLOC(ndr, r->sacl);
+-            NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->sacl, _ptr_sacl));
+-        } else {
+-            r->sacl = NULL;
+-        }
+-        NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_dacl));
+-        if (_ptr_dacl) {
+-            NDR_PULL_ALLOC(ndr, r->dacl);
+-            NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->dacl, _ptr_dacl));
+-        } else {
+-            r->dacl = NULL;
+-        }
+-        NDR_CHECK(ndr_pull_trailer_align(ndr, 5));
+-    }
+-    if (ndr_flags & NDR_BUFFERS) {
+-        if (r->owner_sid) {
+-            _relative_save_offset = ndr->offset;
+-            NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->owner_sid));
+-            _mem_save_owner_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
+-            NDR_PULL_SET_MEM_CTX(ndr, r->owner_sid, 0);
+-            NDR_CHECK(ndr_pull_dom_sid(ndr, NDR_SCALARS, r->owner_sid));
+-            NDR_PULL_SET_MEM_CTX(ndr, _mem_save_owner_sid_0, 0);
+-            if (ndr->offset > ndr->relative_highest_offset) {
+-                ndr->relative_highest_offset = ndr->offset;
++                                                        &r->type));
++            NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_owner_sid));
++            if (_ptr_owner_sid) {
++                NDR_PULL_ALLOC(ndr, r->owner_sid);
++                NDR_CHECK(ndr_pull_relative_ptr1(ndr,
++                                                 r->owner_sid,
++                                                 _ptr_owner_sid));
++            } else {
++                r->owner_sid = NULL;
+             }
+-            ndr->offset = _relative_save_offset;
+-        }
+-        if (r->group_sid) {
+-            _relative_save_offset = ndr->offset;
+-            NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->group_sid));
+-            _mem_save_group_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
+-            NDR_PULL_SET_MEM_CTX(ndr, r->group_sid, 0);
+-            NDR_CHECK(ndr_pull_dom_sid(ndr, NDR_SCALARS, r->group_sid));
+-            NDR_PULL_SET_MEM_CTX(ndr, _mem_save_group_sid_0, 0);
+-            if (ndr->offset > ndr->relative_highest_offset) {
+-                ndr->relative_highest_offset = ndr->offset;
++            NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_group_sid));
++            if (_ptr_group_sid) {
++                NDR_PULL_ALLOC(ndr, r->group_sid);
++                NDR_CHECK(ndr_pull_relative_ptr1(ndr,
++                                                 r->group_sid,
++                                                 _ptr_group_sid));
++            } else {
++                r->group_sid = NULL;
+             }
+-            ndr->offset = _relative_save_offset;
+-        }
+-        if (r->sacl) {
+-            _relative_save_offset = ndr->offset;
+-            NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->sacl));
+-            _mem_save_sacl_0 = NDR_PULL_GET_MEM_CTX(ndr);
+-            NDR_PULL_SET_MEM_CTX(ndr, r->sacl, 0);
+-            NDR_CHECK(ndr_pull_security_acl(ndr,
+-                                            NDR_SCALARS|NDR_BUFFERS,
+-                                            r->sacl));
+-            NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sacl_0, 0);
+-            if (ndr->offset > ndr->relative_highest_offset) {
+-                ndr->relative_highest_offset = ndr->offset;
++            NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sacl));
++            if (_ptr_sacl) {
++                NDR_PULL_ALLOC(ndr, r->sacl);
++                NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->sacl, _ptr_sacl));
++            } else {
++                r->sacl = NULL;
+             }
+-            ndr->offset = _relative_save_offset;
++            NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_dacl));
++            if (_ptr_dacl) {
++                NDR_PULL_ALLOC(ndr, r->dacl);
++                NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->dacl, _ptr_dacl));
++            } else {
++                r->dacl = NULL;
++            }
++            NDR_CHECK(ndr_pull_trailer_align(ndr, 5));
+         }
+-        if (r->dacl) {
+-            _relative_save_offset = ndr->offset;
+-            NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->dacl));
+-            _mem_save_dacl_0 = NDR_PULL_GET_MEM_CTX(ndr);
+-            NDR_PULL_SET_MEM_CTX(ndr, r->dacl, 0);
+-            NDR_CHECK(ndr_pull_security_acl(ndr,
+-                                            NDR_SCALARS|NDR_BUFFERS,
+-                                            r->dacl));
+-            NDR_PULL_SET_MEM_CTX(ndr, _mem_save_dacl_0, 0);
+-            if (ndr->offset > ndr->relative_highest_offset) {
+-                ndr->relative_highest_offset = ndr->offset;
++        if (ndr_flags & NDR_BUFFERS) {
++            if (r->owner_sid) {
++                uint32_t _relative_save_offset;
++                _relative_save_offset = ndr->offset;
++                NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->owner_sid));
++                _mem_save_owner_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
++                NDR_PULL_SET_MEM_CTX(ndr, r->owner_sid, 0);
++                NDR_CHECK(ndr_pull_dom_sid(ndr, NDR_SCALARS, r->owner_sid));
++                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_owner_sid_0, 0);
++                if (ndr->offset > ndr->relative_highest_offset) {
++                    ndr->relative_highest_offset = ndr->offset;
++                }
++                ndr->offset = _relative_save_offset;
++            }
++            if (r->group_sid) {
++                uint32_t _relative_save_offset;
++                _relative_save_offset = ndr->offset;
++                NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->group_sid));
++                _mem_save_group_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
++                NDR_PULL_SET_MEM_CTX(ndr, r->group_sid, 0);
++                NDR_CHECK(ndr_pull_dom_sid(ndr, NDR_SCALARS, r->group_sid));
++                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_group_sid_0, 0);
++                if (ndr->offset > ndr->relative_highest_offset) {
++                    ndr->relative_highest_offset = ndr->offset;
++                }
++                ndr->offset = _relative_save_offset;
++            }
++            if (r->sacl) {
++                uint32_t _relative_save_offset;
++                _relative_save_offset = ndr->offset;
++                NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->sacl));
++                _mem_save_sacl_0 = NDR_PULL_GET_MEM_CTX(ndr);
++                NDR_PULL_SET_MEM_CTX(ndr, r->sacl, 0);
++                NDR_CHECK(ndr_pull_security_acl(ndr,
++                                                NDR_SCALARS|NDR_BUFFERS,
++                                                r->sacl));
++                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sacl_0, 0);
++                if (ndr->offset > ndr->relative_highest_offset) {
++                    ndr->relative_highest_offset = ndr->offset;
++                }
++                ndr->offset = _relative_save_offset;
++            }
++            if (r->dacl) {
++                uint32_t _relative_save_offset;
++                _relative_save_offset = ndr->offset;
++                NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->dacl));
++                _mem_save_dacl_0 = NDR_PULL_GET_MEM_CTX(ndr);
++                NDR_PULL_SET_MEM_CTX(ndr, r->dacl, 0);
++                NDR_CHECK(ndr_pull_security_acl(ndr,
++                                                NDR_SCALARS|NDR_BUFFERS,
++                                                r->dacl));
++                NDR_PULL_SET_MEM_CTX(ndr, _mem_save_dacl_0, 0);
++                if (ndr->offset > ndr->relative_highest_offset) {
++                    ndr->relative_highest_offset = ndr->offset;
++                }
++                ndr->offset = _relative_save_offset;
+             }
+-            ndr->offset = _relative_save_offset;
+         }
+-
+         ndr->flags = _flags_save_STRUCT;
+     }
+     return NDR_ERR_SUCCESS;
+From d5809f6f41ec0dc3fd38f9e4ae917a38bf7dfa43 Mon Sep 17 00:00:00 2001
+From: Sumit Bose <sbose@redhat.com>
+Date: Thu, 28 May 2020 15:02:43 +0200
+Subject: [PATCH] ad_gpo_ndr.c: more ndr updates
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This patch add another update to the ndr code which was previously
+updated by commit c031adde4f532f39845a0efd78693600f1f8b2f4 and
+1fdd8fa2fded1985fbfc6aa67394eebcdbb6a2fc.
+
+As missing update in ndr_pull_security_ace() cased
+a failure in ad_gpo_parse_sd(). A unit-test for ad_gpo_parse_sd() was
+added to prevent similar issues in future.
+
+Resolves: https://github.com/SSSD/sssd/issues/5183
+
+Reviewed-by: Pavel Březina <pbrezina@redhat.com>
+(cherry picked from commit a7c755672cd277497da3df4714f6d9457b6ac5ae)
+
+Reviewed-by: Pavel Březina <pbrezina@redhat.com>
+---
+ src/providers/ad/ad_gpo_ndr.c  |  1 +
+ src/tests/cmocka/test_ad_gpo.c | 57 ++++++++++++++++++++++++++++++++++
+ 2 files changed, 58 insertions(+)
+
+diff --git a/src/providers/ad/ad_gpo_ndr.c b/src/providers/ad/ad_gpo_ndr.c
+index a64b1a0f84..9f040dfb03 100644
+--- a/src/providers/ad/ad_gpo_ndr.c
++++ b/src/providers/ad/ad_gpo_ndr.c
+@@ -317,6 +317,7 @@ ndr_pull_security_ace(struct ndr_pull *ndr,
+         ndr->offset += pad;
+     }
+     if (ndr_flags & NDR_BUFFERS) {
++        NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->object, r->type));
+         NDR_CHECK(ndr_pull_security_ace_object_ctr
+                   (ndr, NDR_BUFFERS, &r->object));
+     }
+diff --git a/src/tests/cmocka/test_ad_gpo.c b/src/tests/cmocka/test_ad_gpo.c
+index 0589adcc3d..97dbe01794 100644
+--- a/src/tests/cmocka/test_ad_gpo.c
++++ b/src/tests/cmocka/test_ad_gpo.c
+@@ -329,6 +329,60 @@ void test_ad_gpo_ace_includes_client_sid_false(void **state)
+                                         ace_dom_sid, false);
+ }
+
++uint8_t test_sid_data[] = {
++0x01, 0x00, 0x04, 0x9c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x34, 0x01, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00,
++0xbd, 0x00, 0x0e, 0x00, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x15, 0x00, 0x00, 0x00,
++0xda, 0x0e, 0xba, 0x60, 0x0f, 0xa2, 0xf4, 0x55, 0xb5, 0x57, 0x47, 0xf8, 0x00, 0x02, 0x00, 0x00,
++0x00, 0x0a, 0x24, 0x00, 0xff, 0x00, 0x0f, 0x00, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
++0x15, 0x00, 0x00, 0x00, 0xda, 0x0e, 0xba, 0x60, 0x0f, 0xa2, 0xf4, 0x55, 0xb5, 0x57, 0x47, 0xf8,
++0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0xbd, 0x00, 0x0e, 0x00, 0x01, 0x05, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x05, 0x15, 0x00, 0x00, 0x00, 0xda, 0x0e, 0xba, 0x60, 0x0f, 0xa2, 0xf4, 0x55,
++0xb5, 0x57, 0x47, 0xf8, 0x07, 0x02, 0x00, 0x00, 0x00, 0x0a, 0x24, 0x00, 0xff, 0x00, 0x0f, 0x00,
++0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x15, 0x00, 0x00, 0x00, 0xda, 0x0e, 0xba, 0x60,
++0x0f, 0xa2, 0xf4, 0x55, 0xb5, 0x57, 0x47, 0xf8, 0x07, 0x02, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00,
++0xbd, 0x00, 0x0e, 0x00, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x15, 0x00, 0x00, 0x00,
++0xda, 0x0e, 0xba, 0x60, 0x0f, 0xa2, 0xf4, 0x55, 0xb5, 0x57, 0x47, 0xf8, 0x00, 0x02, 0x00, 0x00,
++0x00, 0x0a, 0x14, 0x00, 0xff, 0x00, 0x0f, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x14, 0x00, 0xff, 0x00, 0x0f, 0x00, 0x01, 0x01, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x05, 0x12, 0x00, 0x00, 0x00, 0x00, 0x02, 0x14, 0x00, 0x94, 0x00, 0x02, 0x00,
++0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0b, 0x00, 0x00, 0x00, 0x05, 0x02, 0x28, 0x00,
++0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8f, 0xfd, 0xac, 0xed, 0xb3, 0xff, 0xd1, 0x11,
++0xb4, 0x1d, 0x00, 0xa0, 0xc9, 0x68, 0xf9, 0x39, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
++0x0b, 0x00, 0x00, 0x00, 0x00, 0x02, 0x14, 0x00, 0x94, 0x00, 0x02, 0x00, 0x01, 0x01, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x05, 0x09, 0x00, 0x00, 0x00
++};
++
++void test_ad_gpo_parse_sd(void **state)
++{
++    int ret;
++    struct security_descriptor *sd = NULL;
++
++    ret = ad_gpo_parse_sd(test_ctx, NULL, 0, &sd);
++    assert_int_equal(ret, EINVAL);
++
++    ret = ad_gpo_parse_sd(test_ctx, test_sid_data, sizeof(test_sid_data), &sd);
++    assert_int_equal(ret, EOK);
++    assert_non_null(sd);
++    assert_int_equal(sd->revision, 1);
++    assert_int_equal(sd->type, 39940);
++    assert_null(sd->owner_sid);
++    assert_null(sd->group_sid);
++    assert_null(sd->sacl);
++    assert_non_null(sd->dacl);
++    assert_int_equal(sd->dacl->revision, 4);
++    assert_int_equal(sd->dacl->size, 308);
++    assert_int_equal(sd->dacl->num_aces, 10);
++    assert_int_equal(sd->dacl->aces[0].type, 0);
++    assert_int_equal(sd->dacl->aces[0].flags, 0);
++    assert_int_equal(sd->dacl->aces[0].size, 36);
++    assert_int_equal(sd->dacl->aces[0].access_mask, 917693);
++    /* There are more components and ACEs in the security_descriptor struct
++     * which are not checked here. */
++
++    talloc_free(sd);
++}
++
+ int main(int argc, const char *argv[])
+ {
+     poptContext pc;
+@@ -364,6 +418,9 @@ int main(int argc, const char *argv[])
+         cmocka_unit_test_setup_teardown(test_ad_gpo_ace_includes_client_sid_false,
+                                         ad_gpo_test_setup,
+                                         ad_gpo_test_teardown),
++        cmocka_unit_test_setup_teardown(test_ad_gpo_parse_sd,
++                                        ad_gpo_test_setup,
++                                        ad_gpo_test_teardown),
+     };
+
+     /* Set debug level to invalid value so we can decide if -d 0 was used. */
diff --git a/gnu/packages/patches/strace-readlink-tests.patch b/gnu/packages/patches/strace-readlink-tests.patch
new file mode 100644
index 0000000000..dd5ee98703
--- /dev/null
+++ b/gnu/packages/patches/strace-readlink-tests.patch
@@ -0,0 +1,46 @@
+Prevent strace's "readlink" and "readlinkat" tests from failing due to the
+additional system call made by glibc with the patch "glibc-dl-cache.patch"
+applied (introduced in commit 52564e9).
+
+These changes cause strace to report during these tests only system calls on
+files contained in the test directory, effectively filtering out the
+additional readlink/readlinkat call on "/proc/self/exe" and allowing the tests
+to complete as normal.
+
+diff --git a/tests/gen_tests.in b/tests/gen_tests.in
+index 8b4e2e9..cc3ca63 100644
+--- a/tests/gen_tests.in
++++ b/tests/gen_tests.in
+@@ -623,8 +623,8 @@ quotactl-xfs-v	-v -e trace=quotactl
+ read-write	-a15 -eread=0,5 -ewrite=1,4 -e trace=read,write -P read-write-tmpfile -P /dev/zero -P /dev/null
+ readahead	-a1
+ readdir	-a16
+-readlink	-xx
+-readlinkat	-xx
++readlink	-xx --trace-path=test.readlink.link
++readlinkat	-xx --trace-path=test.readlinkat.link
+ reboot		-s 256
+ recv-MSG_TRUNC	-a26 -e trace=recv
+ recvfrom	-a35
+diff --git a/tests/readlink.gen.test b/tests/readlink.gen.test
+index 4263234..418691b 100755
+--- a/tests/readlink.gen.test
++++ b/tests/readlink.gen.test
+@@ -1,4 +1,4 @@
+ #!/bin/sh -efu
+-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (readlink -xx ); do not edit.
++# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (readlink -xx --trace-path=test.readlink.link); do not edit.
+ . "${srcdir=.}/init.sh"
+-run_strace_match_diff -xx 
++run_strace_match_diff -xx --trace-path=test.readlink.link
+diff --git a/tests/readlinkat.gen.test b/tests/readlinkat.gen.test
+index d7de993..a48d590 100755
+--- a/tests/readlinkat.gen.test
++++ b/tests/readlinkat.gen.test
+@@ -1,4 +1,4 @@
+ #!/bin/sh -efu
+-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (readlinkat -xx ); do not edit.
++# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (readlinkat -xx --trace-path=test.readlinkat.link); do not edit.
+ . "${srcdir=.}/init.sh"
+-run_strace_match_diff -xx 
++run_strace_match_diff -xx --trace-path=test.readlinkat.link
diff --git a/gnu/packages/patches/supertux-unbundle-squirrel.patch b/gnu/packages/patches/supertux-unbundle-squirrel.patch
index 054183b75f..f504aacfdd 100644
--- a/gnu/packages/patches/supertux-unbundle-squirrel.patch
+++ b/gnu/packages/patches/supertux-unbundle-squirrel.patch
@@ -1,9 +1,8 @@
-diff -ur a/CMakeLists.txt b/CMakeLists.txt
---- a/CMakeLists.txt	2019-05-24 17:58:19.693090158 -0400
-+++ b/CMakeLists.txt	2019-05-24 17:57:43.349473252 -0400
-@@ -375,44 +375,15 @@
- 
- include(ConfigureChecks)
+--- a/CMakeLists.txt	2022-01-05 18:51:17.828392874 +0100
++++ b/CMakeLists.txt	2022-01-05 18:54:50.826717830 +0100
+@@ -487,48 +487,15 @@
+   include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/ppc)
+ endif()
  
 -
 -## Also build external/squirrel
@@ -15,6 +14,9 @@ diff -ur a/CMakeLists.txt b/CMakeLists.txt
  set(SQUIRREL_PREFIX ${CMAKE_BINARY_DIR}/squirrel/ex)
 -ExternalProject_Add(squirrel
 -  SOURCE_DIR "${CMAKE_SOURCE_DIR}/external/squirrel/"
+-  BUILD_BYPRODUCTS
+-  "${SQUIRREL_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}sqstdlib_static${CMAKE_STATIC_LIBRARY_SUFFIX}"
+-  "${SQUIRREL_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}squirrel_static${CMAKE_STATIC_LIBRARY_SUFFIX}"
 -  CMAKE_ARGS
 -  -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
 -  -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
@@ -22,7 +24,8 @@ diff -ur a/CMakeLists.txt b/CMakeLists.txt
 -  -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
 -  -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}
 -  -DCMAKE_INSTALL_PREFIX=${SQUIRREL_PREFIX}
--  -DINSTALL_INC_DIR=include)
+-  -DINSTALL_INC_DIR=include
+-  -DCMAKE_POSITION_INDEPENDENT_CODE=ON)
 -
 -if(WIN32)
 -  add_library(squirrel_lib SHARED IMPORTED)
diff --git a/gnu/packages/patches/syslinux-gcc10.patch b/gnu/packages/patches/syslinux-gcc10.patch
new file mode 100644
index 0000000000..8d3750b36e
--- /dev/null
+++ b/gnu/packages/patches/syslinux-gcc10.patch
@@ -0,0 +1,87 @@
+Taken from Gentoo and adapted to fix the build using GCC 10. See:
+https://bugs.gentoo.org/705730.
+
+--- a/mk/com32.mk
++++ b/mk/com32.mk
+@@ -47,6 +47,7 @@ GCCOPT += $(call gcc_ok,-falign-functions=0,-malign-functions=0)
+ GCCOPT += $(call gcc_ok,-falign-jumps=0,-malign-jumps=0)
+ GCCOPT += $(call gcc_ok,-falign-labels=0,-malign-labels=0)
+ GCCOPT += $(call gcc_ok,-falign-loops=0,-malign-loops=0)
++GCCOPT += $(call gcc_ok,-fcommon)
+ 
+ ifeq ($(FWCLASS),EFI)
+ GCCOPT += -mno-red-zone
+--- a/mk/elf.mk
++++ b/mk/elf.mk
+@@ -42,6 +42,7 @@ GCCOPT += $(call gcc_ok,-falign-functions=0,-malign-functions=0)
+ GCCOPT += $(call gcc_ok,-falign-jumps=0,-malign-jumps=0)
+ GCCOPT += $(call gcc_ok,-falign-labels=0,-malign-labels=0)
+ GCCOPT += $(call gcc_ok,-falign-loops=0,-malign-loops=0)
++GCCOPT += $(call gcc_ok,-fcommon)
+ 
+ com32 = $(topdir)/com32
+ core = $(topdir)/core
+--- a/mk/embedded.mk
++++ b/mk/embedded.mk
+@@ -51,6 +51,7 @@ GCCOPT    += $(call gcc_ok,-falign-jumps=0,-malign-jumps=0)
+ GCCOPT    += $(call gcc_ok,-falign-labels=0,-malign-labels=0)
+ GCCOPT    += $(call gcc_ok,-falign-loops=0,-malign-loops=0)
+ GCCOPT    += $(call gcc_ok,-fvisibility=hidden)
++GCCOPT    += $(call gcc_ok,-fcommon)
+ 
+ LIBGCC    := $(shell $(CC) $(GCCOPT) --print-libgcc)
+ 
+--- a/mk/lib.mk
++++ b/mk/lib.mk
+@@ -28,6 +28,7 @@ GCCOPT += $(call gcc_ok,-falign-functions=0,-malign-functions=0)
+ GCCOPT += $(call gcc_ok,-falign-jumps=0,-malign-jumps=0)
+ GCCOPT += $(call gcc_ok,-falign-labels=0,-malign-labels=0)
+ GCCOPT += $(call gcc_ok,-falign-loops=0,-malign-loops=0)
++GCCOPT += $(call gcc_ok,-fcommon)
+ 
+ INCLUDE	= -I$(SRC)
+ STRIP	= strip --strip-all -R .comment -R .note
+--- a/mk/efi.mk
++++ b/mk/efi.mk
+@@ -7,7 +7,7 @@ core = $(topdir)/core
+ # Set up architecture specifics; for cross compilation, set ARCH as apt
+ # gnuefi sets up architecture specifics in ia32 or x86_64 sub directories
+ # set up the LIBDIR and EFIINC for building for the appropriate architecture
+-GCCOPT := $(call gcc_ok,-fno-stack-protector,)
++GCCOPT := $(call gcc_ok,-fno-stack-protector,) $(call gcc_ok,-fcommon)
+ EFIINC = $(objdir)/include/efi
+ LIBDIR  = $(objdir)/lib
+ 
+diff --git a/dos/string.h b/dos/string.h
+index f648de2..a502132 100644
+--- a/dos/string.h
++++ b/dos/string.h
+@@ -5,12 +5,13 @@
+ #ifndef _STRING_H
+ #define _STRING_H
+ 
++#include <stddef.h>
++
+ /* Standard routines */
+ #define memcpy(a,b,c)	__builtin_memcpy(a,b,c)
+ #define memmove(a,b,c)	__builtin_memmove(a,b,c)
+ #define memset(a,b,c)	__builtin_memset(a,b,c)
+ #define strcpy(a,b)	__builtin_strcpy(a,b)
+-#define strlen(a)	__builtin_strlen(a)
+ 
+ /* This only returns true or false */
+ static inline int memcmp(const void *__m1, const void *__m2, unsigned int __n)
+@@ -21,6 +22,13 @@ static inline int memcmp(const void *__m1, const void *__m2, unsigned int __n)
+     return rv;
+ }
+ 
++static inline size_t strlen(const char *s)
++{
++    size_t len = 0;
++    while (*s++) len++;
++    return len;
++}
++
+ extern char *strchr(const char *s, int c);
+ 
+ #endif /* _STRING_H */
\ No newline at end of file
diff --git a/gnu/packages/patches/syslinux-strip-gnu-property.patch b/gnu/packages/patches/syslinux-strip-gnu-property.patch
new file mode 100644
index 0000000000..c656bbeedd
--- /dev/null
+++ b/gnu/packages/patches/syslinux-strip-gnu-property.patch
@@ -0,0 +1,31 @@
+Taken from: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=906414.
+
+Author: Lukas Schwaighofer <lukas@schwaighofer.name>
+Description: Strip the .note.gnu.property section for the mbr. This section is
+ added since binutils Debian version 2.31.1-2 and causes mbr.bin to grow in
+ size beyond what can fit into the master boot record.
+---
+ mbr/i386/mbr.ld   | 1 +
+ mbr/x86_64/mbr.ld | 1 +
+ 2 files changed, 2 insertions(+)
+
+diff --git a/mbr/i386/mbr.ld b/mbr/i386/mbr.ld
+index d14ba80..5368346 100644
+--- a/mbr/i386/mbr.ld
++++ b/mbr/i386/mbr.ld
+@@ -70,4 +70,5 @@ SECTIONS
+   .debug_typenames 0 : { *(.debug_typenames) }
+   .debug_varnames  0 : { *(.debug_varnames) }
+   /DISCARD/ : { *(.note.GNU-stack) }
++  /DISCARD/ : { *(.note.gnu.property) }
+ }
+diff --git a/mbr/x86_64/mbr.ld b/mbr/x86_64/mbr.ld
+index ae27d49..b8c0d89 100644
+--- a/mbr/x86_64/mbr.ld
++++ b/mbr/x86_64/mbr.ld
+@@ -69,4 +69,5 @@ SECTIONS
+   .debug_typenames 0 : { *(.debug_typenames) }
+   .debug_varnames  0 : { *(.debug_varnames) }
+   /DISCARD/ : { *(.note.GNU-stack) }
++  /DISCARD/ : { *(.note.gnu.property) }
+ }
diff --git a/gnu/packages/patches/tcl-fix-cross-compilation.patch b/gnu/packages/patches/tcl-fix-cross-compilation.patch
deleted file mode 100644
index 00c36b8f27..0000000000
--- a/gnu/packages/patches/tcl-fix-cross-compilation.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From f7fa48c4c75a1e748dc5071e709c0b62ff739eaa Mon Sep 17 00:00:00 2001
-From: "jan.nijtmans" <nijtmans@users.sourceforge.net>
-Date: Mon, 9 Dec 2019 10:02:20 +0000
-Subject: [PATCH] Fix [abd4abedd2]: Failed to build tk 8.6.10 with cross
- compile
-
-Patch taken from upstream to fix cross-compilation. To be removed on next Tcl release.
-
----
- compat/strtol.c  | 2 +-
- compat/strtoul.c | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/compat/strtol.c b/compat/strtol.c
-index b7f69196ce2..811006a64c3 100644
---- a/compat/strtol.c
-+++ b/compat/strtol.c
-@@ -53,7 +53,7 @@ strtol(
-      */
- 
-     p = string;
--    while (TclIsSpaceProc(*p)) {
-+    while (isspace(UCHAR(*p))) {
- 	p += 1;
-     }
- 
-diff --git a/compat/strtoul.c b/compat/strtoul.c
-index e37eb05f823..15587f1da1a 100644
---- a/compat/strtoul.c
-+++ b/compat/strtoul.c
-@@ -74,7 +74,7 @@ strtoul(
-      */
- 
-     p = string;
--    while (TclIsSpaceProc(*p)) {
-+    while (isspace(UCHAR(*p))) {
- 	p += 1;
-     }
-     if (*p == '-') {
diff --git a/gnu/packages/patches/tcsh-fix-autotest.patch b/gnu/packages/patches/tcsh-fix-autotest.patch
index 200867cb9b..9f5790641b 100644
--- a/gnu/packages/patches/tcsh-fix-autotest.patch
+++ b/gnu/packages/patches/tcsh-fix-autotest.patch
@@ -63,17 +63,6 @@
  
  AT_DATA([comment2.csh],
  [[echo testing...@%:@\
---- tests/subst.at
-+++ tests/subst.at
-@@ -54,7 +54,7 @@ AT_CHECK([export HOME=$(getent passwd $(id -un) | awk -F: '{ print $(NF - 1) }')
- , [1
- ])
- 
--AT_CHECK([export HOME=$(getent passwd $(id -un) | awk -F: '{ print $(NF - 1) }'); echo "echo ~$(id -un)/foo; echo \"\$HOME/foo\"" | tcsh -f | uniq dnl
-+AT_CHECK([export HOME=$(getent passwd $(id -un) | awk -F: '{ print $(NF - 1) }'); echo "echo ~$(id -un)//foo; echo \"\$HOME/foo\"" | tcsh -f | uniq dnl
- 	  | wc -l | tr -d ' \t'], , [1
- ])
- 
 --- tests/variables.at
 +++ tests/variables.at
 @@ -666,7 +666,8 @@ set listflags=(-xA $cwd/args.sh)
diff --git a/gnu/packages/patches/telepathy-glib-channel-memory-leak.patch b/gnu/packages/patches/telepathy-glib-channel-memory-leak.patch
deleted file mode 100644
index fe07548ec0..0000000000
--- a/gnu/packages/patches/telepathy-glib-channel-memory-leak.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-Prevent a memory leak in call-channel, which otherwise would cause a
-test failure in file-transfer-channel.c.
-
-Taken from upstream:
-https://gitlab.freedesktop.org/telepathy/telepathy-glib/commit/2e8b2cc0db09b781d99e3755bb6d01548037fe7b
-
-diff --git a/telepathy-glib/call-channel.c b/telepathy-glib/call-channel.c
-index 8ed76323be32f83c5f4d6045a50bc1698d8093fd..2a1fa203d4be9f0c8b99344225f4ba9900666ffc 100644
---- a/telepathy-glib/call-channel.c
-+++ b/telepathy-glib/call-channel.c
-@@ -525,6 +525,8 @@ update_call_members (TpCallChannel *self,
- 
-   _tp_channel_contacts_queue_prepare_async ((TpChannel *) self,
-       contacts, update_call_members_prepared_cb, data);
-+
-+  g_ptr_array_unref (contacts);
- }
- 
- static void
diff --git a/gnu/packages/patches/tensorflow-c-api-fix.patch b/gnu/packages/patches/tensorflow-c-api-fix.patch
new file mode 100644
index 0000000000..7f39b9f60f
--- /dev/null
+++ b/gnu/packages/patches/tensorflow-c-api-fix.patch
@@ -0,0 +1,312 @@
+From eb61daae91432be0b07bb2f6854887bedfa6fc95 Mon Sep 17 00:00:00 2001
+From: Asim Shankar <ashankar@google.com>
+Date: Tue, 26 Jun 2018 00:57:33 -0700
+Subject: [PATCH] [C API]: Bugfix for TF_AddGradients.
+
+TF_AddGradients could create nodes in the graph with names that conflicted with
+other nodes in the graph. This would most clearly happen if TF_AddGradients()
+was called twice on the same graph, and could also happen if there were other
+nodes in the graph that happened to have "gradients" as a prefix of their name.
+
+Fix that.
+
+The added test in c_api_test.cc would fail in the call to TF_SessionRun() with
+  Node 'gradients/OnesLike' is not unique
+without the changes to c_api.cc and c_api_internal.h
+
+While at it, also fixed a possible name collision bug when using the C++ API
+to constructor graphs (using Scope).
+
+Thanks @karllessard for pointing this out.
+
+PiperOrigin-RevId: 202087996
+---
+ tensorflow/c/c_api.cc                    | 13 ++++-
+ tensorflow/c/c_api_test.cc               | 65 ++++++++++++++++++++++--
+ tensorflow/c/c_test_util.cc              |  7 +++
+ tensorflow/c/c_test_util.h               |  3 ++
+ tensorflow/cc/framework/scope.cc         | 30 ++++++++---
+ tensorflow/cc/framework/scope_internal.h |  3 +-
+ tensorflow/cc/framework/scope_test.cc    | 10 ++++
+ 7 files changed, 116 insertions(+), 15 deletions(-)
+
+diff --git a/tensorflow/c/c_api.cc b/tensorflow/c/c_api.cc
+index 09a03639d6fa3..37c8302e08bc3 100644
+--- a/tensorflow/c/c_api.cc
++++ b/tensorflow/c/c_api.cc
+@@ -2414,7 +2414,18 @@ void TF_AddGradients(TF_Graph* g, TF_Output* y, int ny, TF_Output* x, int nx,
+     for (int i = first_new_node_id; i < g->graph.num_node_ids(); ++i) {
+       Node* n = g->graph.FindNodeId(i);
+       if (n == nullptr) continue;
+-      g->name_map[n->name()] = n;
++      // We have a convoluted scheme here: Using the C++ graph construction API
++      // to add potentially many nodes to the graph without running the checks
++      // (such as uniqueness of the names of nodes) we run with other functions
++      // that add a node to the graph (like TF_FinishOperation).
++      if (!g->name_map.insert(std::make_pair(n->name(), n)).second) {
++        status->status = tensorflow::errors::Internal(
++            "BUG: The API allowed construction of a graph with duplicate node "
++            "names (",
++            n->name(),
++            "). This is a bug. Please file an issue at "
++            "https://github.com/tensorflow/tensorflow/issues.");
++      }
+     }
+   }
+ 
+diff --git a/tensorflow/c/c_api_test.cc b/tensorflow/c/c_api_test.cc
+index 577f10c5e69ea..bc04b53fbb7fa 100644
+--- a/tensorflow/c/c_api_test.cc
++++ b/tensorflow/c/c_api_test.cc
+@@ -1160,7 +1160,7 @@ TEST(CAPI, GetOpDef) {
+ }
+ 
+ void StringVectorToArrays(const std::vector<string>& v,
+-                          std::unique_ptr<const void* []>* ptrs,
++                          std::unique_ptr<const void*[]>* ptrs,
+                           std::unique_ptr<size_t[]>* lens) {
+   ptrs->reset(new const void*[v.size()]);
+   lens->reset(new size_t[v.size()]);
+@@ -1196,7 +1196,7 @@ class CApiColocationTest : public ::testing::Test {
+ 
+   void SetViaStringList(TF_OperationDescription* desc,
+                         const std::vector<string>& list) {
+-    std::unique_ptr<const void* []> list_ptrs;
++    std::unique_ptr<const void*[]> list_ptrs;
+     std::unique_ptr<size_t[]> list_lens;
+     StringVectorToArrays(list, &list_ptrs, &list_lens);
+     TF_SetAttrStringList(desc, tensorflow::kColocationAttrName, list_ptrs.get(),
+@@ -1700,6 +1700,61 @@ TEST_F(CApiGradientsTest, OpWithNoGradientRegistered_NoGradInputs) {
+   TestGradientsError(false);
+ }
+ 
++void ScalarFloatFromTensor(const TF_Tensor* t, float* f) {
++  ASSERT_TRUE(t != nullptr);
++  ASSERT_EQ(TF_FLOAT, TF_TensorType(t));
++  ASSERT_EQ(0, TF_NumDims(t));
++  ASSERT_EQ(4, TF_TensorByteSize(t));
++  float* p = static_cast<float*>(TF_TensorData(t));
++  *f = *p;
++}
++
++TEST_F(CApiGradientsTest, MultipleCallsToAddGradients) {
++  const float X = 3.0f, Y = 7.0f;
++  TF_Operation* x = Placeholder(graph_, s_, "x", TF_FLOAT);
++  TF_Operation* y = Placeholder(graph_, s_, "y", TF_FLOAT);
++  TF_Operation* xy = Mul(x, y, graph_, s_, "xy");
++  TF_Output dxy_dx, dxy_dy;
++
++  TF_Output outputs[1] = {{xy, 0}};
++  TF_Output inputs[1] = {{x, 0}};
++  TF_AddGradients(graph_, outputs, 1, inputs, 1, nullptr, s_, &dxy_dx);
++  ASSERT_EQ(TF_OK, TF_GetCode(s_)) << TF_Message(s_);
++
++  inputs[0] = {y, 0};
++  TF_AddGradients(graph_, outputs, 1, inputs, 1, nullptr, s_, &dxy_dy);
++  ASSERT_EQ(TF_OK, TF_GetCode(s_)) << TF_Message(s_);
++
++  TF_SessionOptions* opts = TF_NewSessionOptions();
++  TF_Session* sess = TF_NewSession(graph_, opts, s_);
++  TF_DeleteSessionOptions(opts);
++  ASSERT_EQ(TF_OK, TF_GetCode(s_)) << TF_Message(s_);
++
++  TF_Output feeds[] = {{x, 0}, {y, 0}};
++  TF_Tensor* feedValues[] = {FloatTensor(X), FloatTensor(Y)};
++  TF_Output fetches[] = {dxy_dx, dxy_dy};
++  TF_Tensor* fetchValues[] = {nullptr, nullptr};
++
++  TF_SessionRun(sess, nullptr /* run_options */, feeds, feedValues, 2, fetches,
++                fetchValues, 2, nullptr /* target_opers */, 0,
++                nullptr /* run_metadata */, s_);
++  TF_DeleteTensor(feedValues[0]);
++  TF_DeleteTensor(feedValues[1]);
++  ASSERT_EQ(TF_OK, TF_GetCode(s_)) << TF_Message(s_);
++  TF_DeleteSession(sess, s_);
++  ASSERT_EQ(TF_OK, TF_GetCode(s_)) << TF_Message(s_);
++
++  float dxy_dxValue = 0.0f, dxy_dyValue = 0.0f;
++  ScalarFloatFromTensor(fetchValues[0], &dxy_dxValue);
++  EXPECT_EQ(Y, dxy_dxValue);
++
++  ScalarFloatFromTensor(fetchValues[1], &dxy_dyValue);
++  EXPECT_EQ(X, dxy_dyValue);
++
++  TF_DeleteTensor(fetchValues[0]);
++  TF_DeleteTensor(fetchValues[1]);
++}
++
+ // REGISTER_OP for CApiAttributesTest test cases.
+ // Registers two ops, each with a single attribute called 'v'.
+ // The attribute in one op will have a type 'type', the other
+@@ -1784,7 +1839,7 @@ TEST_F(CApiAttributesTest, String) {
+ 
+ TEST_F(CApiAttributesTest, StringList) {
+   std::vector<string> list = {"bugs", "bunny", "duck"};
+-  std::unique_ptr<const void* []> list_ptrs;
++  std::unique_ptr<const void*[]> list_ptrs;
+   std::unique_ptr<size_t[]> list_lens;
+   StringVectorToArrays(list, &list_ptrs, &list_lens);
+   int list_total_size = 0;
+@@ -1800,7 +1855,7 @@ TEST_F(CApiAttributesTest, StringList) {
+   ASSERT_EQ(TF_OK, TF_GetCode(s_)) << TF_Message(s_);
+ 
+   EXPECT_TF_META("v", list.size(), TF_ATTR_STRING, list_total_size);
+-  std::unique_ptr<void* []> values(new void*[list.size()]);
++  std::unique_ptr<void*[]> values(new void*[list.size()]);
+   std::unique_ptr<size_t[]> lens(new size_t[list.size()]);
+   std::unique_ptr<char[]> storage(new char[list_total_size]);
+   TF_OperationGetAttrStringList(oper, "v", values.get(), lens.get(),
+@@ -2025,7 +2080,7 @@ TEST_F(CApiAttributesTest, TensorShapeProtoList) {
+   tensorflow::PartialTensorShape(pts2).AsProto(&proto);
+   proto.SerializeToString(&bytes2);
+ 
+-  std::unique_ptr<const void* []> list_ptrs;
++  std::unique_ptr<const void*[]> list_ptrs;
+   std::unique_ptr<size_t[]> list_lens;
+   const std::vector<string> list = {bytes1, bytes2};
+   StringVectorToArrays(list, &list_ptrs, &list_lens);
+diff --git a/tensorflow/c/c_test_util.cc b/tensorflow/c/c_test_util.cc
+index f3b28c1708129..24eb6c069b213 100644
+--- a/tensorflow/c/c_test_util.cc
++++ b/tensorflow/c/c_test_util.cc
+@@ -216,6 +216,13 @@ TF_Operation* Min(TF_Operation* l, TF_Operation* r, TF_Graph* graph,
+   return MinWithDevice(l, r, graph, /*op_device=*/"", s, name);
+ }
+ 
++TF_Operation* Mul(TF_Operation* l, TF_Operation* r, TF_Graph* graph,
++                  TF_Status* s, const char* name) {
++  TF_Operation* op;
++  BinaryOpHelper("Mul", l, r, graph, s, name, &op, "", true);
++  return op;
++}
++
+ TF_Operation* Add(TF_Output l, TF_Output r, TF_Graph* graph, TF_Status* s,
+                   const char* name) {
+   TF_OperationDescription* desc = TF_NewOperation(graph, "AddN", name);
+diff --git a/tensorflow/c/c_test_util.h b/tensorflow/c/c_test_util.h
+index c16aba666ee69..38313d647ca93 100644
+--- a/tensorflow/c/c_test_util.h
++++ b/tensorflow/c/c_test_util.h
+@@ -80,6 +80,9 @@ TF_Operation* Add(TF_Output l, TF_Output r, TF_Graph* graph, TF_Status* s,
+ TF_Operation* Min(TF_Operation* l, TF_Operation* r, TF_Graph* graph,
+                   TF_Status* s, const char* name = "min");
+ 
++TF_Operation* Mul(TF_Operation* l, TF_Operation* r, TF_Graph* graph,
++                  TF_Status* s, const char* name = "mul");
++
+ // If `op_device` is non-empty, set the created op on that device.
+ TF_Operation* MinWithDevice(TF_Operation* l, TF_Operation* r, TF_Graph* graph,
+                             const string& op_device, TF_Status* s,
+diff --git a/tensorflow/cc/framework/scope.cc b/tensorflow/cc/framework/scope.cc
+index 62a889181e787..8c886f31711eb 100644
+--- a/tensorflow/cc/framework/scope.cc
++++ b/tensorflow/cc/framework/scope.cc
+@@ -37,6 +37,11 @@ Scope& Scope::operator=(const Scope& other) {
+   return *this;
+ }
+ 
++namespace {
++const char kScopeSeparator[] = "/";
++const char kSuffixSeparator[] = "_";
++}  // namespace
++
+ Scope::Impl::Impl(Graph* graph, Status* status, NameMap* name_map,
+                   ShapeRefiner* refiner, bool disable_shape_inference)
+     : graph_(graph),
+@@ -308,19 +313,23 @@ string Scope::Impl::GetUniqueName(const string& prefix,
+     return prefix;
+   }
+   auto entry = name_map_->find(prefix);
+-  string unique_name = prefix;
+   if (entry == name_map_->end()) {
+     name_map_->insert({prefix, 0});
+-  } else {
+-    unique_name = strings::StrCat(unique_name, "_", ++entry->second);
++    return prefix;
+   }
++  string unique_name;
++  do {
++    unique_name = strings::StrCat(prefix, kSuffixSeparator, ++entry->second);
++  } while (name_map_->find(unique_name) != name_map_->end());
++  name_map_->insert({unique_name, 0});
+   return unique_name;
+ }
+ 
+ string Scope::Impl::GetNameForOp(const string& default_name) const {
+   const string unique_name =
+       GetUniqueName(default_name, true /* check_single_use */);
+-  const string sep = name_.empty() || unique_name.empty() ? "" : "/";
++  const string sep =
++      name_.empty() || unique_name.empty() ? "" : kScopeSeparator;
+   return strings::StrCat(name_, sep, unique_name);
+ }
+ 
+@@ -345,7 +354,8 @@ Scope Scope::NewSubScope(const string& child_scope_name) const {
+   }
+   const string unique_name =
+       impl()->GetUniqueName(child_scope_name, false /* check_single_use */);
+-  const string sep = impl()->name_.empty() || unique_name.empty() ? "" : "/";
++  const string sep =
++      impl()->name_.empty() || unique_name.empty() ? "" : kScopeSeparator;
+   return Scope(new Impl(*this, Impl::Tags::ScopeName(),
+                         strings::StrCat(impl()->name_, sep, unique_name),
+                         false /* copy_names */));
+@@ -412,7 +422,7 @@ CompositeOpScopes Scope::GetCompositeOpScopes(
+   if (!impl()->single_use_scope()) {
+     Scope child = NewSubScope(impl()->op_name_.empty() ? composite_op_name
+                                                        : impl()->op_name_);
+-    const string child_op_sep = impl()->name_.empty() ? "" : "_";
++    const string child_op_sep = impl()->name_.empty() ? "" : kSuffixSeparator;
+     const string child_name =
+         strings::StrCat(impl()->name_, child_op_sep, child.impl()->name_);
+     return {child,
+@@ -435,7 +445,13 @@ class InternalScope {
+   static Scope NewScope(Graph* graph, Status* status, ShapeRefiner* refiner) {
+     Scope::Impl::NameMap* name_map = new Scope::Impl::NameMap;
+     for (const Node* node : graph->nodes()) {
+-      (*name_map)[node->name()] = 0;
++      const string& name = node->name();
++      (*name_map)[name] = 0;
++      // Add all name prefixes ('/' separated).
++      size_t idx = -1;
++      while ((idx = name.find(kScopeSeparator, idx + 1)) != string::npos) {
++        (*name_map)[name.substr(0, idx)] = 0;
++      }
+     }
+     // We provide null destructors for these shared ptrs (except for name_map)
+     // since the caller owns them and doesn't want the scope to destroy them.
+diff --git a/tensorflow/cc/framework/scope_internal.h b/tensorflow/cc/framework/scope_internal.h
+index 8efcfed20d0b8..58adaef2e942a 100644
+--- a/tensorflow/cc/framework/scope_internal.h
++++ b/tensorflow/cc/framework/scope_internal.h
+@@ -34,8 +34,7 @@ class Scope::Impl {
+   // name that has not been used so far in a scope will get no suffix. Later
+   // uses of the same name will get suffixes _1, _2, _3, etc. Multiple scopes
+   // can share the same NameMap. For instance, a new scope created using
+-  // WithControlDependencies() should would share the same NameMap with the
+-  // parent.
++  // WithControlDependencies() would share the same NameMap with the parent.
+   typedef std::unordered_map<string, int> NameMap;
+ 
+   Impl(const std::shared_ptr<Graph>& graph,
+diff --git a/tensorflow/cc/framework/scope_test.cc b/tensorflow/cc/framework/scope_test.cc
+index 9eca9d3face34..b40b345eb8423 100644
+--- a/tensorflow/cc/framework/scope_test.cc
++++ b/tensorflow/cc/framework/scope_test.cc
+@@ -26,6 +26,16 @@ TEST(ScopeTest, BasicNames) {
+   EXPECT_EQ(root.GetUniqueNameForOp("mul"), "mul");
+ }
+ 
++TEST(ScopeTest, OpAndScopeNameCollision) {
++  Scope root = Scope::NewRootScope();
++  EXPECT_EQ(root.GetUniqueNameForOp("foo"), "foo");
++  EXPECT_EQ(root.GetUniqueNameForOp("foo"), "foo_1");
++  EXPECT_EQ(root.GetUniqueNameForOp("foo_1"), "foo_1_1");
++  EXPECT_EQ(root.GetUniqueNameForOp("foo_2"), "foo_2");
++  EXPECT_EQ(root.GetUniqueNameForOp("foo"), "foo_3");
++  EXPECT_EQ(root.GetUniqueNameForOp("foo_2"), "foo_2_1");
++}
++
+ TEST(ScopeTest, HierarchicalNames) {
+   Scope root = Scope::NewRootScope();
+   Scope child = root.NewSubScope("child");
diff --git a/gnu/packages/patches/texlive-bin-poppler-0.83.patch b/gnu/packages/patches/texlive-bin-poppler-0.83.patch
deleted file mode 100644
index 5e57e3efac..0000000000
--- a/gnu/packages/patches/texlive-bin-poppler-0.83.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-Fix build with Poppler 0.83 and later.
-
-Taken from Arch Linux, but adjusted to patch the versioned Poppler
-files, as upstream applies it after copying them in place.
-https://git.archlinux.org/svntogit/packages.git/tree/trunk/texlive-poppler-0.83.patch?h=packages/texlive-bin
-
-diff -ru texlive-source-orig/texk/web2c/pdftexdir/pdftoepdf-poppler0.76.0.cc texlive-source/texk/web2c/pdftexdir/pdftoepdf-poppler0.76.0.cc
---- texlive-source-orig/texk/web2c/pdftexdir/pdftoepdf-poppler0.76.0.cc
-+++ texlive-source/texk/web2c/pdftexdir/pdftoepdf-poppler0.76.0.cc
-@@ -723,7 +723,7 @@
- #endif
-     // initialize
-     if (!isInit) {
--        globalParams = new GlobalParams();
-+        globalParams.reset(new GlobalParams());
-         globalParams->setErrQuiet(false);
-         isInit = true;
-     }
-@@ -1108,6 +1108,5 @@
-             delete_document(p);
-         }
-         // see above for globalParams
--        delete globalParams;
-     }
- }
-diff -ru texlive-source-orig/texk/web2c/pdftexdir/pdftosrc-poppler0.76.0.cc texlive-source/texk/web2c/pdftexdir/pdftosrc-poppler0.76.0.cc
---- texlive-source-orig/texk/web2c/pdftexdir/pdftosrc-poppler0.76.0.cc
-+++ texlive-source/texk/web2c/pdftexdir/pdftosrc-poppler0.76.0.cc
-@@ -79,7 +79,7 @@
-         exit(1);
-     }
-     fileName = new GString(argv[1]);
--    globalParams = new GlobalParams();
-+    globalParams.reset(new GlobalParams());
-     doc = new PDFDoc(fileName);
-     if (!doc->isOk()) {
-         fprintf(stderr, "Invalid PDF file\n");
-@@ -100,7 +100,7 @@
-     if (objnum == 0) {
-         srcStream = catalogDict.dictLookup("SourceObject");
-         static char const_SourceFile[] = "SourceFile";
--        if (!srcStream.isStream(const_SourceFile)) {
-+        if (!srcStream.isDict(const_SourceFile)) {
-             fprintf(stderr, "No SourceObject found\n");
-             exit(1);
-         }
-@@ -202,5 +202,4 @@
-         fprintf(stderr, "Cross-reference table extracted to %s\n", outname);
-     fclose(outfile);
-     delete doc;
--    delete globalParams;
- }
diff --git a/gnu/packages/patches/texlive-bin-poppler-0.86.patch b/gnu/packages/patches/texlive-bin-poppler-0.86.patch
deleted file mode 100644
index b1adca657b..0000000000
--- a/gnu/packages/patches/texlive-bin-poppler-0.86.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-Fix build with Poppler 0.86 and later.
-
-Taken from Arch Linux, but adjusted to patch the versioned Poppler
-files, as upstream applies it after copying them in place.
-https://git.archlinux.org/svntogit/packages.git/tree/trunk/texlive-poppler-0.86.patch?h=packages/texlive-bin
-
---- a/texk/web2c/pdftexdir/pdftoepdf-poppler0.76.0.cc	2020-03-03 21:11:35.102711802 +0000
-+++ b/texk/web2c/pdftexdir/pdftoepdf-poppler0.76.0.cc	2020-03-03 21:13:13.057420111 +0000
-@@ -757,7 +757,7 @@
-     if (page_name) {
-         // get page by name
-         GString name(page_name);
--        LinkDest *link = pdf_doc->doc->findDest(&name);
-+        LinkDest *link = pdf_doc->doc->findDest(&name).get();
-         if (link == 0 || !link->isOk())
-             pdftex_fail("PDF inclusion: invalid destination <%s>", page_name);
-         Ref ref = link->getPageRef();
diff --git a/gnu/packages/patches/tootle-glib-object-naming.patch b/gnu/packages/patches/tootle-glib-object-naming.patch
new file mode 100644
index 0000000000..08ee23dd8f
--- /dev/null
+++ b/gnu/packages/patches/tootle-glib-object-naming.patch
@@ -0,0 +1,66 @@
+From 0816105028c26965e37c9afc7c598854f3fecde1 Mon Sep 17 00:00:00 2001
+From: Clayton Craft <clayton@craftyguy.net>
+Date: Tue, 26 Oct 2021 15:03:25 -0700
+Subject: [PATCH] Adhere to GLib.Object naming conventions for properties
+
+Vala now validates property names against GLib.Object conventions, this
+fixes a compilation error as a result of this enforcement:
+
+../src/API/Status.vala:27.5-27.23: error: Name `_url' is not valid for a GLib.Object property
+    public string? _url { get; set; }
+    ^^^^^^^^^^^^^^^^^^^
+
+Relevant Vala change:
+https://gitlab.gnome.org/GNOME/vala/-/commit/38d61fbff037687ea4772e6df85c7e22a74b335e
+
+fixes #337
+
+Signed-off-by: Clayton Craft <clayton@craftyguy.net>
+---
+ src/API/Attachment.vala | 6 +++---
+ src/API/Status.vala     | 8 ++++----
+ 2 files changed, 7 insertions(+), 7 deletions(-)
+
+diff --git a/src/API/Attachment.vala b/src/API/Attachment.vala
+index 88bc5bb..35c4018 100644
+--- a/src/API/Attachment.vala
++++ b/src/API/Attachment.vala
+@@ -4,10 +4,10 @@ public class Tootle.API.Attachment : Entity, Widgetizable {
+ 	public string kind { get; set; default = "unknown"; }
+ 	public string url { get; set; }
+ 	public string? description { get; set; }
+-	public string? _preview_url { get; set; }
++	private string? t_preview_url { get; set; }
+ 	public string? preview_url {
+-		set { this._preview_url = value; }
+-		get { return (this._preview_url == null || this._preview_url == "") ? url : _preview_url; }
++		set { this.t_preview_url = value; }
++		get { return (this.t_preview_url == null || this.t_preview_url == "") ? url : t_preview_url; }
+ 	}
+ 
+ 	public File? source_file { get; set; }
+diff --git a/src/API/Status.vala b/src/API/Status.vala
+index 4f92cdb..00e8a9f 100644
+--- a/src/API/Status.vala
++++ b/src/API/Status.vala
+@@ -28,16 +28,16 @@ public class Tootle.API.Status : Entity, Widgetizable {
+     public ArrayList<API.Mention>? mentions { get; set; default = null; }
+     public ArrayList<API.Attachment>? media_attachments { get; set; default = null; }
+ 
+-    public string? _url { get; set; }
++    private string? t_url { get; set; }
+     public string url {
+         owned get { return this.get_modified_url (); }
+-        set { this._url = value; }
++        set { this.t_url = value; }
+     }
+     string get_modified_url () {
+-        if (this._url == null) {
++        if (this.t_url == null) {
+             return this.uri.replace ("/activity", "");
+         }
+-        return this._url;
++        return this.t_url;
+     }
+ 
+     public Status formal {
diff --git a/gnu/packages/patches/tootle-reason-phrase.patch b/gnu/packages/patches/tootle-reason-phrase.patch
new file mode 100644
index 0000000000..72a1d1ecfa
--- /dev/null
+++ b/gnu/packages/patches/tootle-reason-phrase.patch
@@ -0,0 +1,48 @@
+From 858ee78fbebe161a4cdd707a469dc0f045211a51 Mon Sep 17 00:00:00 2001
+From: Max Harmathy <harmathy@mailbox.org>
+Date: Wed, 25 Aug 2021 13:05:58 +0200
+Subject: [PATCH] Use reason_phrase instead of get_phrase
+
+---
+ src/Services/Cache.vala   | 2 +-
+ src/Services/Network.vala | 7 +------
+ 2 files changed, 2 insertions(+), 7 deletions(-)
+
+diff --git a/src/Services/Cache.vala b/src/Services/Cache.vala
+index 2251697..2ed314e 100644
+--- a/src/Services/Cache.vala
++++ b/src/Services/Cache.vala
+@@ -88,7 +88,7 @@ public class Tootle.Cache : GLib.Object {
+                 try {
+                     var code = msg.status_code;
+ 					if (code != Soup.Status.OK) {
+-					    var error = network.describe_error (code);
++					    var error = msg.reason_phrase;
+ 					    throw new Oopsie.INSTANCE (@"Server returned $error");
+ 					}
+ 
+diff --git a/src/Services/Network.vala b/src/Services/Network.vala
+index fa2839c..d0143b0 100644
+--- a/src/Services/Network.vala
++++ b/src/Services/Network.vala
+@@ -56,7 +56,7 @@ public class Tootle.Network : GLib.Object {
+                 else if (status == Soup.Status.CANCELLED)
+                     debug ("Message is cancelled. Ignoring callback invocation.");
+                 else
+-                    ecb ((int32) status, describe_error ((int32) status));
++                    ecb ((int32) status, msg.reason_phrase);
+             });
+         }
+         catch (Error e) {
+@@ -65,11 +65,6 @@ public class Tootle.Network : GLib.Object {
+         }
+     }
+ 
+-	public string describe_error (uint code) {
+-	    var reason = Soup.Status.get_phrase (code);
+-		return @"$code: $reason";
+-	}
+-
+     public void on_error (int32 code, string message) {
+         warning (message);
+         app.toast (message);
diff --git a/gnu/packages/patches/tor-sandbox-i686.patch b/gnu/packages/patches/tor-sandbox-i686.patch
new file mode 100644
index 0000000000..34b0a053b1
--- /dev/null
+++ b/gnu/packages/patches/tor-sandbox-i686.patch
@@ -0,0 +1,36 @@
+This patch fixes sandboxing on i686 by allowing 'statx'.  Without this,
+'src/test/test_include.sh' would fail.
+
+Patch adapted from:
+
+  https://gitlab.torproject.org/tpo/core/tor/-/merge_requests/480
+
+From 001d880d1082f5d124e10554e2718e407c7e88c6 Mon Sep 17 00:00:00 2001
+From: Simon South <simon@simonsouth.net>
+Date: Fri, 5 Nov 2021 10:10:10 -0400
+Subject: [PATCH] sandbox: Allow "statx" syscall on i386 for glibc 2.33
+
+glibc versions 2.33 and newer use the modern "statx" system call in their
+implementations of stat() and opendir() for Linux on i386.  Prevent failures in
+the sandbox unit tests by modifying the sandbox to allow this system call
+without restriction on i386 when it is available, and update the test suite to
+skip the "sandbox/stat_filename" test in this case as it is certain to fail.
+---
+ src/lib/sandbox/sandbox.c | 3 +++
+ src/test/test_sandbox.c   | 7 ++++---
+ 2 files changed, 7 insertions(+), 3 deletions(-)
+
+diff --git a/src/lib/sandbox/sandbox.c b/src/lib/sandbox/sandbox.c
+index fb02a345ab..a15f99ad76 100644
+--- a/src/lib/sandbox/sandbox.c
++++ b/src/lib/sandbox/sandbox.c
+@@ -252,6 +252,9 @@ static int filter_nopar_gen[] = {
+     SCMP_SYS(sigreturn),
+ #endif
+     SCMP_SYS(stat),
++#if defined(__i386__) && defined(__NR_statx)
++    SCMP_SYS(statx),
++#endif
+     SCMP_SYS(uname),
+     SCMP_SYS(wait4),
+     SCMP_SYS(write),
diff --git a/gnu/packages/patches/transmission-remote-gtk-fix-appstream.patch b/gnu/packages/patches/transmission-remote-gtk-fix-appstream.patch
deleted file mode 100644
index e7d4c8bb86..0000000000
--- a/gnu/packages/patches/transmission-remote-gtk-fix-appstream.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-Fix a bug related to AppStream:
-
-https://github.com/transmission-remote-gtk/transmission-remote-gtk/issues/95
-
-Patch adapted from upstream source repository:
-
-https://github.com/transmission-remote-gtk/transmission-remote-gtk/commit/89259ff90c703c7fe6768b5317803b9aa5b5ab8c
-
-From 89259ff90c703c7fe6768b5317803b9aa5b5ab8c Mon Sep 17 00:00:00 2001
-From: Alan <alan-github@eth0.org.uk>
-Date: Tue, 17 Nov 2020 01:26:22 +0000
-Subject: [PATCH] fix screenshot and add OARS rating so appdata validates
-
----
- README.md                                           | 5 ++---
- data/io.github.TransmissionRemoteGtk.appdata.xml.in | 5 +++--
- 2 files changed, 5 insertions(+), 5 deletions(-)
-
-diff --git a/README.md b/README.md
-index 4306cc7..d38314b 100644
---- a/README.md
-+++ b/README.md
-@@ -6,13 +6,12 @@ the Transmission BitTorrent client, using its HTTP RPC protocol.
- 
- # DEPENDENCIES
- 
--The following packages are required dependencies:
-+The following packages are required dependencies (debian/ubuntu).
- 
- ```bash
--autoconf-archive appstream-glib intltool
-+libgtk-3-dev automake autoconf gcc libgeoip-dev gettext autoconf-archive libappstream-dev appstream-util libcurl4-openssl-dev libjson-glib-dev
- ```
- 
--
- # BUILDING
- 
- Optionally install `libgeoip` and its headers to see the country
-diff --git a/data/io.github.TransmissionRemoteGtk.appdata.xml.in b/data/io.github.TransmissionRemoteGtk.appdata.xml.in
-index fc35a8f..1476c2a 100644
---- a/data/io.github.TransmissionRemoteGtk.appdata.xml.in
-+++ b/data/io.github.TransmissionRemoteGtk.appdata.xml.in
-@@ -7,6 +7,7 @@
-   <translation type="gettext">transmission-remote-gtk</translation>
-   <name>Transmission Remote</name>
-   <developer_name>Transmission Remote Gtk Team</developer_name>
-+  <content_rating type="oars-1.1" />
-   <summary>Remotely manage the Transmission BitTorrent client</summary>
-   <url type="homepage">https://github.com/transmission-remote-gtk/transmission-remote-gtk</url>
-   <url type="bugtracker">https://github.com/transmission-remote-gtk/transmission-remote-gtk/issues</url>
-@@ -23,8 +24,8 @@
-     </ul>
-   </description>
-   <screenshots>
--    <screenshot height="576" width="1024" type="default">
--      <image>http://eth0.org.uk/~alan/transmission-remote-gtk-1.1.1.png</image>
-+    <screenshot height="512" width="973" type="default">
-+      <image>https://community.linuxmint.com/img/screenshots/transmission-remote-gtk.png</image>
-     </screenshot>
-   </screenshots>
-   <releases>
diff --git a/gnu/packages/patches/tremc-fix-decodestring.patch b/gnu/packages/patches/tremc-fix-decodestring.patch
new file mode 100644
index 0000000000..346f65e611
--- /dev/null
+++ b/gnu/packages/patches/tremc-fix-decodestring.patch
@@ -0,0 +1,25 @@
+From 79995bc82e81f0429222aab4d90a03440feef057 Mon Sep 17 00:00:00 2001
+From: Matan Ziv-Av <matan@svgalib.org>
+Date: Mon, 29 Jun 2020 15:18:03 +0300
+Subject: [PATCH] Use base64.decodebytes.
+
+Based on upstream commit 79995bc82e81f0429222aab4d90a03440feef057 which
+confuses several unrelated changes.
+
+---
+ tremc | 29 ++++++++++++++++++++++++++++-
+ 1 file changed, 28 insertions(+), 1 deletion(-)
+
+diff --git a/tremc b/tremc
+index b47f012..c626fde 100755
+--- a/tremc
++++ b/tremc
+@@ -440,7 +443,7 @@ class Transmission(object):
+                 # TAG_TORRENT_DETAILS, but just passing seems to help.(?)
+                 try:
+                     torrent_details = response['arguments']['torrents'][0]
+-                    torrent_details['pieces'] = base64.decodestring(bytes(torrent_details['pieces'], ENCODING))
++                    torrent_details['pieces'] = base64.decodebytes(bytes(torrent_details['pieces'], ENCODING))
+                     self.torrent_details_cache = torrent_details
+                     self.upgrade_peerlist()
+                 except IndexError:
diff --git a/gnu/packages/patches/trytond-add-egg-modules-to-path.patch b/gnu/packages/patches/trytond-add-egg-modules-to-path.patch
new file mode 100644
index 0000000000..1baccfee1c
--- /dev/null
+++ b/gnu/packages/patches/trytond-add-egg-modules-to-path.patch
@@ -0,0 +1,22 @@
+Work around trytond.module not being a real namespace module.
+
+Solution is to add all trytond module's locations to
+trytond.modules._path__. This will make trytond.module behave much
+like a namespace module.
+Adding to __path__ is done in update_egg_modules() to ensure __path__
+is updated whenever the list of egg modules is updated.
+
+*** a/trytond/modules/__init__.py	1970-01-01 01:00:01.000000000 +0100
+--- b/trytond/modules/__init__.py	2021-12-02 18:12:15.385101986 +0100
+***************
+*** 38,43 ****
+--- 38,46 ----
+          import pkg_resources
+          for ep in pkg_resources.iter_entry_points('trytond.modules'):
+              EGG_MODULES[ep.name] = ep
++             path = os.path.join(ep.dist.location, 'trytond', 'modules')
++             if not path in __path__ and os.path.isdir(path):
++                 __path__.append(path)
+      except ImportError:
+          pass
+  
diff --git a/gnu/packages/patches/trytond-add-guix_trytond_path.patch b/gnu/packages/patches/trytond-add-guix_trytond_path.patch
new file mode 100644
index 0000000000..7dc136ec46
--- /dev/null
+++ b/gnu/packages/patches/trytond-add-guix_trytond_path.patch
@@ -0,0 +1,26 @@
+Make trytond add all paths listed in GUIX_TRYTOND_MODULES_PATH to sys.path.
+
+*** a/trytond/modules/__init__.py	1970-01-01 01:00:01.000000000 +0100
+--- b/trytond/modules/__init__.py	2021-12-02 22:17:28.014612267 +0100
+***************
+*** 31,36 ****
+--- 31,48 ----
+  
+  EGG_MODULES = {}
+  
++ def __extend_python_path__():
++     tryton_python_path = os.environ.get("GUIX_TRYTOND_MODULES_PATH")
++     if tryton_python_path:
++         paths = [path[:-16]  # remove "/trytond/modules"
++                  for path in tryton_python_path.split(os.pathsep)]
++         sys.path.extend(paths)
++         # ensure new paths are in the pkg_resources WorkingSet
++         import pkg_resources
++         list(map(pkg_resources.working_set.add_entry, paths))
++ 
++ __extend_python_path__()
++ 
+  
+  def update_egg_modules():
+      global EGG_MODULES
+l
diff --git a/gnu/packages/patches/u-boot-allow-disabling-openssl.patch b/gnu/packages/patches/u-boot-allow-disabling-openssl.patch
new file mode 100644
index 0000000000..e3ec92be84
--- /dev/null
+++ b/gnu/packages/patches/u-boot-allow-disabling-openssl.patch
@@ -0,0 +1,164 @@
+From f060e90d148270307228315e2759a0065ec1d796 Mon Sep 17 00:00:00 2001
+From: Vagrant Cascadian <vagrant@debian.org>
+Date: Fri, 22 Oct 2021 17:34:53 -0700
+Subject: [PATCH] Revert "tools: kwbimage: Do not hide usage of secure header
+ under CONFIG_ARMADA_38X"
+
+This reverts commit b4f3cc2c42d97967a3a3c8796c340f6b07ecccac.
+---
+ tools/Makefile   |  8 ++++++++
+ tools/kwbimage.c | 22 ++++++++++++++++++++++
+ 2 files changed, 30 insertions(+)
+
+diff --git a/tools/Makefile b/tools/Makefile
+index 4a86321f64..9517f203fd 100644
+--- a/tools/Makefile
++++ b/tools/Makefile
+@@ -169,6 +169,14 @@ HOST_EXTRACFLAGS	+= -DCONFIG_FIT_SIGNATURE_MAX_SIZE=0xffffffff
+ HOST_EXTRACFLAGS	+= -DCONFIG_FIT_CIPHER
+ endif
+ 
++ifneq ($(CONFIG_SYS_U_BOOT_OFFS),)
++HOSTCFLAGS_kwbimage.o += -DCONFIG_SYS_U_BOOT_OFFS=$(CONFIG_SYS_U_BOOT_OFFS)
++endif
++
++ifneq ($(CONFIG_ARMADA_38X),)
++HOSTCFLAGS_kwbimage.o += -DCONFIG_KWB_SECURE
++endif
++
+ # MXSImage needs LibSSL
+ ifneq ($(CONFIG_MX23)$(CONFIG_MX28)$(CONFIG_ARMADA_38X)$(CONFIG_TOOLS_LIBCRYPTO),)
+ HOSTCFLAGS_kwbimage.o += \
+diff --git a/tools/kwbimage.c b/tools/kwbimage.c
+index d200ff2425..23d6be3c9a 100644
+--- a/tools/kwbimage.c
++++ b/tools/kwbimage.c
+@@ -14,6 +14,7 @@
+ #include <stdint.h>
+ #include "kwbimage.h"
+ 
++#ifdef CONFIG_KWB_SECURE
+ #include <openssl/bn.h>
+ #include <openssl/rsa.h>
+ #include <openssl/pem.h>
+@@ -39,10 +40,13 @@ void EVP_MD_CTX_cleanup(EVP_MD_CTX *ctx)
+ 	EVP_MD_CTX_reset(ctx);
+ }
+ #endif
++#endif
+ 
+ static struct image_cfg_element *image_cfg;
+ static int cfgn;
++#ifdef CONFIG_KWB_SECURE
+ static int verbose_mode;
++#endif
+ 
+ struct boot_mode {
+ 	unsigned int id;
+@@ -237,6 +241,8 @@ image_count_options(unsigned int optiontype)
+ 	return count;
+ }
+ 
++#if defined(CONFIG_KWB_SECURE)
++
+ static int image_get_csk_index(void)
+ {
+ 	struct image_cfg_element *e;
+@@ -259,6 +265,8 @@ static bool image_get_spezialized_img(void)
+ 	return e->sec_specialized_img;
+ }
+ 
++#endif
++
+ /*
+  * Compute a 8-bit checksum of a memory area. This algorithm follows
+  * the requirements of the Marvell SoC BootROM specifications.
+@@ -353,6 +361,7 @@ static uint8_t baudrate_to_option(unsigned int baudrate)
+ 	}
+ }
+ 
++#if defined(CONFIG_KWB_SECURE)
+ static void kwb_msg(const char *fmt, ...)
+ {
+ 	if (verbose_mode) {
+@@ -847,6 +856,8 @@ done:
+ 	return ret;
+ }
+ 
++#endif
++
+ static void *image_create_v0(size_t *imagesz, struct image_tool_params *params,
+ 			     int payloadsz)
+ {
+@@ -977,11 +988,13 @@ static size_t image_headersz_v1(int *hasext)
+ 			*hasext = 1;
+ 	}
+ 
++#if defined(CONFIG_KWB_SECURE)
+ 	if (image_get_csk_index() >= 0) {
+ 		headersz += sizeof(struct secure_hdr_v1);
+ 		if (hasext)
+ 			*hasext = 1;
+ 	}
++#endif
+ 
+ 	/*
+ 	 * The payload should be aligned on some reasonable
+@@ -1058,6 +1071,8 @@ err_close:
+ 	return -1;
+ }
+ 
++#if defined(CONFIG_KWB_SECURE)
++
+ int export_pub_kak_hash(RSA *kak, struct secure_hdr_v1 *secure_hdr)
+ {
+ 	FILE *hashf;
+@@ -1170,6 +1185,7 @@ int add_secure_header_v1(struct image_tool_params *params, uint8_t *ptr,
+ 
+ 	return 0;
+ }
++#endif
+ 
+ static void *image_create_v1(size_t *imagesz, struct image_tool_params *params,
+ 			     uint8_t *ptr, int payloadsz)
+@@ -1177,7 +1193,9 @@ static void *image_create_v1(size_t *imagesz, struct image_tool_params *params,
+ 	struct image_cfg_element *e;
+ 	struct main_hdr_v1 *main_hdr;
+ 	struct register_set_hdr_v1 *register_set_hdr;
++#if defined(CONFIG_KWB_SECURE)
+ 	struct secure_hdr_v1 *secure_hdr = NULL;
++#endif
+ 	size_t headersz;
+ 	uint8_t *image, *cur;
+ 	int hasext = 0;
+@@ -1253,6 +1271,7 @@ static void *image_create_v1(size_t *imagesz, struct image_tool_params *params,
+ 	if (main_hdr->blockid == IBR_HDR_PEX_ID)
+ 		main_hdr->srcaddr = cpu_to_le32(0xFFFFFFFF);
+ 
++#if defined(CONFIG_KWB_SECURE)
+ 	if (image_get_csk_index() >= 0) {
+ 		/*
+ 		 * only reserve the space here; we fill the header later since
+@@ -1263,6 +1282,7 @@ static void *image_create_v1(size_t *imagesz, struct image_tool_params *params,
+ 		*next_ext = 1;
+ 		next_ext = &secure_hdr->next;
+ 	}
++#endif
+ 
+ 	datai = 0;
+ 	register_set_hdr = (struct register_set_hdr_v1 *)cur;
+@@ -1310,9 +1330,11 @@ static void *image_create_v1(size_t *imagesz, struct image_tool_params *params,
+ 			return NULL;
+ 	}
+ 
++#if defined(CONFIG_KWB_SECURE)
+ 	if (secure_hdr && add_secure_header_v1(params, ptr, payloadsz,
+ 					       headersz, image, secure_hdr))
+ 		return NULL;
++#endif
+ 
+ 	/* Calculate and set the header checksum */
+ 	main_hdr->checksum = image_checksum8(main_hdr, headersz);
+-- 
+2.30.2
+
diff --git a/gnu/packages/patches/u-boot-rk3399-enable-emmc-phy.patch b/gnu/packages/patches/u-boot-rk3399-enable-emmc-phy.patch
new file mode 100644
index 0000000000..f14a9ce104
--- /dev/null
+++ b/gnu/packages/patches/u-boot-rk3399-enable-emmc-phy.patch
@@ -0,0 +1,26 @@
+adapting commit ac804143cf ("mmc: rockchip_sdhci: add phy and clock
+config for rk3399") to fix the issue "Not found emmc phy device".
+
+Signed-off-by: Yifeng Zhao <yifeng.zhao@rock-chips.com>
+---
+
+ arch/arm/dts/rk3399-u-boot.dtsi | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/arch/arm/dts/rk3399-u-boot.dtsi b/arch/arm/dts/rk3399-u-boot.dtsi
+index 73922c328a..716b9a433a 100644
+--- a/arch/arm/dts/rk3399-u-boot.dtsi
++++ b/arch/arm/dts/rk3399-u-boot.dtsi
+@@ -88,6 +88,10 @@
+ 	u-boot,dm-pre-reloc;
+ };
+ 
++&emmc_phy {
++	u-boot,dm-pre-reloc;
++};
++
+ &grf {
+ 	u-boot,dm-pre-reloc;
+ };
+-- 
+2.17.1
diff --git a/gnu/packages/patches/udiskie-no-appindicator.patch b/gnu/packages/patches/udiskie-no-appindicator.patch
deleted file mode 100644
index df3efe104b..0000000000
--- a/gnu/packages/patches/udiskie-no-appindicator.patch
+++ /dev/null
@@ -1,155 +0,0 @@
-Remove the support for Unity's appindicator.
-
-diff -Naur udiskie-2.0.4/completions/zsh/_udiskie udiskie-2.0.4-new/completions/zsh/_udiskie
---- udiskie-2.0.4/completions/zsh/_udiskie	2020-01-21 01:12:40.000000000 +0100
-+++ udiskie-2.0.4-new/completions/zsh/_udiskie	2020-01-23 10:15:46.956141667 +0100
-@@ -18,8 +18,6 @@
-     '(-a)'{-A,--no-automount}"[disable automounting]"
-     '(-N)'{-n,--notify}"[show popup notifications]"
-     '(-n)'{-N,--no-notify}"[disable notifications]"
--    '(--no-appindicator)'--appindicator"[use appindicator for status icon]"
--    '(--appindicator)'--no-appindicator"[don't use appindicator]"
-     '(-T -s)'{-t,--tray}"[show tray icon]"
-     '(-T -t)'{-s,--smart-tray}"[auto hide tray icon]"
-     '(-t -s)'{-T,--no-tray}"[disable tray icon]"
-diff -Naur udiskie-2.0.4/doc/udiskie.8.txt udiskie-2.0.4-new/doc/udiskie.8.txt
---- udiskie-2.0.4/doc/udiskie.8.txt	2020-01-21 01:12:40.000000000 +0100
-+++ udiskie-2.0.4-new/doc/udiskie.8.txt	2020-01-23 10:16:12.636290647 +0100
-@@ -92,12 +92,6 @@
- *--no-terminal*::
- 	Disable terminal action.
- 
--*--appindicator*::
--	Use AppIndicator3 for the status icon. Use this on Ubuntu/Unity if no icon is shown.
--
--*--no-appindicator*::
--	Use Gtk.StatusIcon for the status icon (default).
--
- *--password-cache MINUTES*::
- 	Cache passwords for LUKS partitions and set the timeout.
- 
-diff -Naur udiskie-2.0.4/udiskie/appindicator.py udiskie-2.0.4-new/udiskie/appindicator.py
---- udiskie-2.0.4/udiskie/appindicator.py	2020-01-21 01:12:40.000000000 +0100
-+++ udiskie-2.0.4-new/udiskie/appindicator.py	1970-01-01 01:00:00.000000000 +0100
-@@ -1,61 +0,0 @@
--"""
--Status icon using AppIndicator3.
--"""
--
--from gi.repository import Gtk
--from gi.repository import AppIndicator3
--
--from .async_ import Future
--
--
--class AppIndicatorIcon:
--
--    """
--    Show status icon using AppIndicator as backend. Replaces
--    `udiskie.tray.StatusIcon` on ubuntu/unity.
--    """
--
--    def __init__(self, menumaker, _icons):
--        self._maker = menumaker
--        self._menu = Gtk.Menu()
--        self._indicator = AppIndicator3.Indicator.new(
--            'udiskie',
--            _icons.get_icon_name('media'),
--            AppIndicator3.IndicatorCategory.HARDWARE)
--        self._indicator.set_status(AppIndicator3.IndicatorStatus.PASSIVE)
--        self._indicator.set_menu(self._menu)
--        # Get notified before menu is shown, see:
--        # https://bugs.launchpad.net/screenlets/+bug/522152/comments/15
--        dbusmenuserver = self._indicator.get_property('dbus-menu-server')
--        self._dbusmenuitem = dbusmenuserver.get_property('root-node')
--        self._conn = self._dbusmenuitem.connect('about-to-show', self._on_show)
--        self.task = Future()
--        menumaker._quit_action = self.destroy
--        # Populate menu initially, so libdbusmenu does not ignore the
--        # 'about-to-show':
--        self._maker(self._menu)
--
--    def destroy(self):
--        self.show(False)
--        self._dbusmenuitem.disconnect(self._conn)
--        self.task.set_result(True)
--
--    @property
--    def visible(self):
--        status = self._indicator.get_status()
--        return status == AppIndicator3.IndicatorStatus.ACTIVE
--
--    def show(self, show=True):
--        if show == self.visible:
--            return
--        status = (AppIndicator3.IndicatorStatus.ACTIVE if show else
--                  AppIndicator3.IndicatorStatus.PASSIVE)
--        self._indicator.set_status(status)
--
--    def _on_show(self, menu):
--        # clear menu:
--        for item in self._menu.get_children():
--            self._menu.remove(item)
--        # repopulate:
--        self._maker(self._menu)
--        self._menu.show_all()
-diff -Naur udiskie-2.0.4/udiskie/cli.py udiskie-2.0.4-new/udiskie/cli.py
---- udiskie-2.0.4/udiskie/cli.py	2020-01-21 01:12:40.000000000 +0100
-+++ udiskie-2.0.4-new/udiskie/cli.py	2020-01-23 10:17:13.064810617 +0100
-@@ -287,9 +287,6 @@
-         -T, --no-tray                           Disable tray icon
-         -m MENU, --menu MENU                    Tray menu [flat/nested]
- 
--        --appindicator                          Use appindicator for status icon
--        --no-appindicator                       Don't use appindicator
--
-         --password-cache MINUTES                Set password cache timeout
-         --no-password-cache                     Disable password cache
- 
-@@ -312,7 +309,6 @@
-         'notify': True,
-         'tray': False,
-         'menu': 'flat',
--        'appindicator': False,
-         'file_manager': 'xdg-open',
-         'terminal': '',
-         'password_prompt': 'builtin:gui',
-@@ -328,7 +324,6 @@
-             '--no-tray': False,
-             '--smart-tray': 'auto'}),
-         'menu': Value('--menu'),
--        'appindicator': Switch('appindicator'),
-         'file_manager': OptionalValue('--file-manager'),
-         'password_prompt': OptionalValue('--password-prompt'),
-         'password_cache': OptionalValue('--password-cache'),
-@@ -459,11 +454,7 @@
- 
-         menu_maker = udiskie.tray.UdiskieMenu(self, icons, actions, flat,
-                                               config.quickmenu_actions)
--        if options['appindicator']:
--            import udiskie.appindicator
--            TrayIcon = udiskie.appindicator.AppIndicatorIcon
--        else:
--            TrayIcon = udiskie.tray.TrayIcon
-+        TrayIcon = udiskie.tray.TrayIcon
-         trayicon = TrayIcon(menu_maker, icons)
-         return udiskie.tray.UdiskieStatusIcon(trayicon, menu_maker, smart)
- 
-diff -Naur udiskie-2.0.4/udiskie.egg-info/SOURCES.txt udiskie-2.0.4-new/udiskie.egg-info/SOURCES.txt
---- udiskie-2.0.4/udiskie.egg-info/SOURCES.txt	2020-01-21 01:12:41.000000000 +0100
-+++ udiskie-2.0.4-new/udiskie.egg-info/SOURCES.txt	2020-01-23 10:17:50.657205798 +0100
-@@ -25,7 +25,6 @@
- test/test_cache.py
- test/test_match.py
- udiskie/__init__.py
--udiskie/appindicator.py
- udiskie/async_.py
- udiskie/automount.py
- udiskie/cache.py
-@@ -47,4 +46,4 @@
- udiskie.egg-info/entry_points.txt
- udiskie.egg-info/requires.txt
- udiskie.egg-info/top_level.txt
--udiskie.egg-info/zip-safe
-\ Pas de fin de ligne à la fin du fichier
-+udiskie.egg-info/zip-safe
diff --git a/gnu/packages/patches/ungoogled-chromium-RUNPATH.patch b/gnu/packages/patches/ungoogled-chromium-RUNPATH.patch
new file mode 100644
index 0000000000..379c47ac7e
--- /dev/null
+++ b/gnu/packages/patches/ungoogled-chromium-RUNPATH.patch
@@ -0,0 +1,22 @@
+Use RUNPATH instead of RPATH so that end users can override the library
+search path (and the 'validate-runpath' phase can do its work).
+
+diff --git a/build/config/gcc/BUILD.gn b/build/config/gcc/BUILD.gn
+--- a/build/config/gcc/BUILD.gn
++++ b/build/config/gcc/BUILD.gn
+@@ -99,7 +99,14 @@ config("executable_config") {
+     ]
+   }
+ 
+-  if (!is_android && current_os != "aix") {
++  if (is_linux) {
++    ldflags += [
++      # Set DT_RUNPATH instead of DT_RPATH which is important because the
++      # former can be overridden at runtime, and Guix has support for
++      # verifying that nothing is missing.
++      "-Wl,--enable-new-dtags",
++    ]
++  } else if (!is_android && current_os != "aix") {
+     ldflags += [
+       # TODO(GYP): Do we need a check on the binutils version here?
+       #
diff --git a/gnu/packages/patches/ungoogled-chromium-accelerated-video-decode.patch b/gnu/packages/patches/ungoogled-chromium-accelerated-video-decode.patch
new file mode 100644
index 0000000000..cbab626e59
--- /dev/null
+++ b/gnu/packages/patches/ungoogled-chromium-accelerated-video-decode.patch
@@ -0,0 +1,18 @@
+Upstream Chromium no longer supports hardware accelerated video decoding
+on GNU/Linux, yet it still works fine on many systems.  This patch "unexpires"
+the support.
+
+Taken from Arch Linux:
+https://github.com/archlinux/svntogit-packages/blob/packages/chromium/trunk/unexpire-accelerated-video-decode-flag.patch
+
+--- a/chrome/browser/flag-metadata.json
++++ b/chrome/browser/flag-metadata.json
+@@ -1285,7 +1285,7 @@
+   {
+     "name": "enable-accelerated-video-decode",
+     "owners": [ "media-dev@chromium.org" ],
+-    "expiry_milestone": 93
++    "expiry_milestone": 99
+   },
+   {
+     "name": "enable-accessibility-live-caption",
diff --git a/gnu/packages/patches/ungoogled-chromium-system-ffmpeg.patch b/gnu/packages/patches/ungoogled-chromium-system-ffmpeg.patch
new file mode 100644
index 0000000000..1472206b02
--- /dev/null
+++ b/gnu/packages/patches/ungoogled-chromium-system-ffmpeg.patch
@@ -0,0 +1,18 @@
+Alias the av_stream_get_first_dts definition added by Chromium in
+their bundled fork.
+
+Taken from Arch Linux:
+
+  https://github.com/archlinux/svntogit-packages/blob/38fd5d2f2e0ade932aa7a80b7dea26215fc41854/trunk/unbundle-ffmpeg-av_stream_get_first_dts.patch
+
+diff --git a/build/linux/unbundle/ffmpeg.gn b/build/linux/unbundle/ffmpeg.gn
+--- a/build/linux/unbundle/ffmpeg.gn
++++ b/build/linux/unbundle/ffmpeg.gn
+@@ -12,6 +12,7 @@ pkg_config("system_ffmpeg") {
+     "libavformat",
+     "libavutil",
+   ]
++  defines = [ "av_stream_get_first_dts(stream)=stream->first_dts" ]
+ }
+ 
+ buildflag_header("ffmpeg_features") {
diff --git a/gnu/packages/patches/vigra-python-compat.patch b/gnu/packages/patches/vigra-python-compat.patch
deleted file mode 100644
index 63c6abb326..0000000000
--- a/gnu/packages/patches/vigra-python-compat.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-Fix build with Boost + Python 3.7.
-
-Taken from upstream:
-https://github.com/ukoethe/vigra/commit/a6fa62663c6a6b752ed0707e95f643e25867a0f9
-
-diff --git a/vigranumpy/src/core/vigranumpycore.cxx b/vigranumpy/src/core/vigranumpycore.cxx
-index ec38d3636..c81c6ae52 100644
---- a/vigranumpy/src/core/vigranumpycore.cxx
-+++ b/vigranumpy/src/core/vigranumpycore.cxx
-@@ -61,7 +61,7 @@ UInt32 pychecksum(python::str const & s)
- 	return checksum(data, size);
- #else
- 	Py_ssize_t size = 0;
--	char * data = PyUnicode_AsUTF8AndSize(s.ptr(), &size);
-+	const char * data = PyUnicode_AsUTF8AndSize(s.ptr(), &size);
- 	return checksum(data, size);
- #endif
- }
diff --git a/gnu/packages/patches/widelands-add-missing-map-include.patch b/gnu/packages/patches/widelands-add-missing-map-include.patch
new file mode 100644
index 0000000000..633731bea2
--- /dev/null
+++ b/gnu/packages/patches/widelands-add-missing-map-include.patch
@@ -0,0 +1,28 @@
+From 316eaea209754368a57f445ea4dd016ecf8eded6 Mon Sep 17 00:00:00 2001
+From: matthiakl <t-m.42@mailpost.spdns.org>
+Date: Sat, 14 Aug 2021 19:24:08 +0200
+Subject: [PATCH] Added missing direct incude (#5025)
+
+---
+This patch is from
+https://github.com/widelands/widelands/pull/5025
+which has been merged after the release of Widelands 1.0.
+
+ src/network/bufferedconnection.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/network/bufferedconnection.h b/src/network/bufferedconnection.h
+index fe974b9e..7e1ecf87 100644
+--- a/src/network/bufferedconnection.h
++++ b/src/network/bufferedconnection.h
+@@ -20,6 +20,7 @@
+ #ifndef WL_NETWORK_BUFFEREDCONNECTION_H
+ #define WL_NETWORK_BUFFEREDCONNECTION_H
+ 
++#include <map>
+ #include <memory>
+ #include <mutex>
+ #include <thread>
+-- 
+2.30.2
+
diff --git a/gnu/packages/patches/wpa-supplicant-CVE-2021-27803.patch b/gnu/packages/patches/wpa-supplicant-CVE-2021-27803.patch
deleted file mode 100644
index 1942bb3d55..0000000000
--- a/gnu/packages/patches/wpa-supplicant-CVE-2021-27803.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-From 8460e3230988ef2ec13ce6b69b687e941f6cdb32 Mon Sep 17 00:00:00 2001
-From: Jouni Malinen <jouni@codeaurora.org>
-Date: Tue, 8 Dec 2020 23:52:50 +0200
-Subject: [PATCH] P2P: Fix a corner case in peer addition based on PD Request
-
-p2p_add_device() may remove the oldest entry if there is no room in the
-peer table for a new peer. This would result in any pointer to that
-removed entry becoming stale. A corner case with an invalid PD Request
-frame could result in such a case ending up using (read+write) freed
-memory. This could only by triggered when the peer table has reached its
-maximum size and the PD Request frame is received from the P2P Device
-Address of the oldest remaining entry and the frame has incorrect P2P
-Device Address in the payload.
-
-Fix this by fetching the dev pointer again after having called
-p2p_add_device() so that the stale pointer cannot be used.
-
-Fixes: 17bef1e97a50 ("P2P: Add peer entry based on Provision Discovery Request")
-Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
----
- src/p2p/p2p_pd.c | 12 +++++-------
- 1 file changed, 5 insertions(+), 7 deletions(-)
-
-diff --git a/src/p2p/p2p_pd.c b/src/p2p/p2p_pd.c
-index 3994ec03f86b..05fd593494ef 100644
---- a/src/p2p/p2p_pd.c
-+++ b/src/p2p/p2p_pd.c
-@@ -595,14 +595,12 @@ void p2p_process_prov_disc_req(struct p2p_data *p2p, const u8 *sa,
- 			goto out;
- 		}
- 
-+		dev = p2p_get_device(p2p, sa);
- 		if (!dev) {
--			dev = p2p_get_device(p2p, sa);
--			if (!dev) {
--				p2p_dbg(p2p,
--					"Provision Discovery device not found "
--					MACSTR, MAC2STR(sa));
--				goto out;
--			}
-+			p2p_dbg(p2p,
-+				"Provision Discovery device not found "
-+				MACSTR, MAC2STR(sa));
-+			goto out;
- 		}
- 	} else if (msg.wfd_subelems) {
- 		wpabuf_free(dev->info.wfd_subelems);
--- 
-2.25.1
-
diff --git a/gnu/packages/patches/wpa-supplicant-CVE-2021-30004.patch b/gnu/packages/patches/wpa-supplicant-CVE-2021-30004.patch
deleted file mode 100644
index 8c8ba93355..0000000000
--- a/gnu/packages/patches/wpa-supplicant-CVE-2021-30004.patch
+++ /dev/null
@@ -1,115 +0,0 @@
-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/patches/xdg-desktop-portal-wlr-harcoded-length.patch b/gnu/packages/patches/xdg-desktop-portal-wlr-harcoded-length.patch
new file mode 100644
index 0000000000..b499a039e8
--- /dev/null
+++ b/gnu/packages/patches/xdg-desktop-portal-wlr-harcoded-length.patch
@@ -0,0 +1,28 @@
+From 3121eeb5e68bedd6e2398f35b9bd60b69709a47e Mon Sep 17 00:00:00 2001
+From: Josselin Poiret <dev@jpoiret.xyz>
+Date: Tue, 14 Dec 2021 18:49:54 +0100
+Subject: [PATCH] Replace hardcoded command length
+
+---
+ src/screenshot/screenshot.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/src/screenshot/screenshot.c b/src/screenshot/screenshot.c
+index 9df0ea7..5f27681 100644
+--- a/src/screenshot/screenshot.c
++++ b/src/screenshot/screenshot.c
+@@ -42,8 +42,9 @@ static bool exec_screenshooter_interactive(const char *path) {
+ 		perror("fork");
+ 		return false;
+ 	} else if (pid == 0) {
+-		char cmd[strlen(path) + 25];
+-		snprintf(cmd, sizeof(cmd), "grim -g \"$(slurp)\" -- %s", path);
++		const char cmd_fmt[] = "grim -g \"$(slurp)\" -- %s";
++		char cmd[strlen(path) + sizeof(cmd_fmt)];
++		snprintf(cmd, sizeof(cmd), cmd_fmt, path);
+ 		execl("/bin/sh", "/bin/sh", "-c", cmd, NULL);
+ 		perror("execl");
+ 		exit(127);
+-- 
+2.34.0
+
diff --git a/gnu/packages/patches/xf86-video-mach64-bool-to-boolean.patch b/gnu/packages/patches/xf86-video-mach64-bool-to-boolean.patch
new file mode 100644
index 0000000000..b85acdd401
--- /dev/null
+++ b/gnu/packages/patches/xf86-video-mach64-bool-to-boolean.patch
@@ -0,0 +1,79 @@
+From ff1a69144735298d1a190fa23b3ae5747e914859 Mon Sep 17 00:00:00 2001
+From: Josselin Poiret <dev@jpoiret.xyz>
+Date: Thu, 18 Nov 2021 13:18:25 +0000
+Subject: [PATCH] Rename bool to boolean for OptionInfoRec.
+
+* src/aticonfig.c: Change uses of .value.bool to .value.boolean
+---
+ src/aticonfig.c | 38 +++++++++++++++++++-------------------
+ 1 file changed, 19 insertions(+), 19 deletions(-)
+
+diff --git a/src/aticonfig.c b/src/aticonfig.c
+index 621e79e..8ea0c6e 100644
+--- a/src/aticonfig.c
++++ b/src/aticonfig.c
+@@ -311,42 +311,42 @@ ATIProcessOptions
+ 
+     (void)memcpy(PublicOption, ATIPublicOptions, ATIPublicOptionSize);
+ 
+-#   define ProbeSparse   PublicOption[ATI_OPTION_PROBE_SPARSE].value.bool
+-#   define Accel         PublicOption[ATI_OPTION_ACCEL].value.bool
+-#   define BIOSDisplay   PrivateOption[ATI_OPTION_BIOS_DISPLAY].value.bool
+-#   define Blend         PrivateOption[ATI_OPTION_BLEND].value.bool
+-#   define CRTDisplay    PublicOption[ATI_OPTION_CRT_DISPLAY].value.bool
+-#   define CRTScreen     PrivateOption[ATI_OPTION_CRT_SCREEN].value.bool
+-#   define CSync         PublicOption[ATI_OPTION_CSYNC].value.bool
+-#   define Devel         PrivateOption[ATI_OPTION_DEVEL].value.bool
+-#   define HWCursor      PublicOption[ATI_OPTION_HWCURSOR].value.bool
++#   define ProbeSparse   PublicOption[ATI_OPTION_PROBE_SPARSE].value.boolean
++#   define Accel         PublicOption[ATI_OPTION_ACCEL].value.boolean
++#   define BIOSDisplay   PrivateOption[ATI_OPTION_BIOS_DISPLAY].value.boolean
++#   define Blend         PrivateOption[ATI_OPTION_BLEND].value.boolean
++#   define CRTDisplay    PublicOption[ATI_OPTION_CRT_DISPLAY].value.boolean
++#   define CRTScreen     PrivateOption[ATI_OPTION_CRT_SCREEN].value.boolean
++#   define CSync         PublicOption[ATI_OPTION_CSYNC].value.boolean
++#   define Devel         PrivateOption[ATI_OPTION_DEVEL].value.boolean
++#   define HWCursor      PublicOption[ATI_OPTION_HWCURSOR].value.boolean
+ 
+ #ifdef XF86DRI_DEVEL
+ 
+-#   define IsPCI       PublicOption[ATI_OPTION_IS_PCI].value.bool
++#   define IsPCI       PublicOption[ATI_OPTION_IS_PCI].value.boolean
+ #   define DMAMode     PublicOption[ATI_OPTION_DMA_MODE].value.str
+ #   define AGPMode     PublicOption[ATI_OPTION_AGP_MODE].value.num
+ #   define AGPSize     PublicOption[ATI_OPTION_AGP_SIZE].value.num
+-#   define LocalTex    PublicOption[ATI_OPTION_LOCAL_TEXTURES].value.bool
++#   define LocalTex    PublicOption[ATI_OPTION_LOCAL_TEXTURES].value.boolean
+ #   define BufferSize  PublicOption[ATI_OPTION_BUFFER_SIZE].value.num
+ 
+ #endif /* XF86DRI_DEVEL */
+ 
+ #ifdef TV_OUT
+ 
+-#   define TvOut        PublicOption[ATI_OPTION_TV_OUT].value.bool
++#   define TvOut        PublicOption[ATI_OPTION_TV_OUT].value.boolean
+ #   define TvStd        PublicOption[ATI_OPTION_TV_STD].value.str
+ 
+ #endif /* TV_OUT */
+ 
+-#   define CacheMMIO     PublicOption[ATI_OPTION_MMIO_CACHE].value.bool
+-#   define TestCacheMMIO PublicOption[ATI_OPTION_TEST_MMIO_CACHE].value.bool
+-#   define PanelDisplay  PublicOption[ATI_OPTION_PANEL_DISPLAY].value.bool
+-#   define ShadowFB      PublicOption[ATI_OPTION_SHADOW_FB].value.bool
+-#   define SWCursor      PublicOption[ATI_OPTION_SWCURSOR].value.bool
++#   define CacheMMIO     PublicOption[ATI_OPTION_MMIO_CACHE].value.boolean
++#   define TestCacheMMIO PublicOption[ATI_OPTION_TEST_MMIO_CACHE].value.boolean
++#   define PanelDisplay  PublicOption[ATI_OPTION_PANEL_DISPLAY].value.boolean
++#   define ShadowFB      PublicOption[ATI_OPTION_SHADOW_FB].value.boolean
++#   define SWCursor      PublicOption[ATI_OPTION_SWCURSOR].value.boolean
+ #   define AccelMethod   PublicOption[ATI_OPTION_ACCELMETHOD].value.str
+-#   define RenderAccel   PublicOption[ATI_OPTION_RENDER_ACCEL].value.bool
+-#   define LCDSync       PrivateOption[ATI_OPTION_LCDSYNC].value.bool
++#   define RenderAccel   PublicOption[ATI_OPTION_RENDER_ACCEL].value.boolean
++#   define LCDSync       PrivateOption[ATI_OPTION_LCDSYNC].value.boolean
+ 
+ #   define ReferenceClock \
+         PublicOption[ATI_OPTION_REFERENCE_CLOCK].value.freq.freq
+-- 
+2.33.1
+
diff --git a/gnu/packages/patches/xf86-video-nouveau-fixup-ABI.patch b/gnu/packages/patches/xf86-video-nouveau-fixup-ABI.patch
new file mode 100644
index 0000000000..a18e3f8ab9
--- /dev/null
+++ b/gnu/packages/patches/xf86-video-nouveau-fixup-ABI.patch
@@ -0,0 +1,64 @@
+From e80e73ced69b15662103d0fd6837db4ce6c6eb5b Mon Sep 17 00:00:00 2001
+From: Dave Airlie <airlied@redhat.com>
+Date: Mon, 13 Jul 2020 09:20:15 +1000
+Subject: [PATCH] nouveau: fixup driver for new X server ABI
+
+---
+ src/compat-api.h  | 4 ++++
+ src/nouveau_exa.c | 2 +-
+ src/nv_driver.c   | 6 +++---
+ 3 files changed, 8 insertions(+), 4 deletions(-)
+
+diff --git a/src/compat-api.h b/src/compat-api.h
+index fde2f4b..8a1fcf9 100644
+--- a/src/compat-api.h
++++ b/src/compat-api.h
+@@ -102,4 +102,8 @@
+ 
+ #endif
+ 
++#if ABI_VIDEODRV_VERSION < SET_ABI_VERSION(25, 2)
++#define secondary_dst slave_dst
++#endif
++
+ #endif
+diff --git a/src/nouveau_exa.c b/src/nouveau_exa.c
+index 55df6f8..db3b112 100644
+--- a/src/nouveau_exa.c
++++ b/src/nouveau_exa.c
+@@ -157,7 +157,7 @@ nouveau_exa_destroy_pixmap(ScreenPtr pScreen, void *priv)
+ 
+ #ifdef NOUVEAU_PIXMAP_SHARING
+ static Bool
+-nouveau_exa_share_pixmap_backing(PixmapPtr ppix, ScreenPtr slave, void **handle_p)
++nouveau_exa_share_pixmap_backing(PixmapPtr ppix, ScreenPtr secondary, void **handle_p)
+ {
+ 	struct nouveau_bo *bo = nouveau_pixmap_bo(ppix);
+ 	struct nouveau_pixmap *nvpix = nouveau_pixmap(ppix);
+diff --git a/src/nv_driver.c b/src/nv_driver.c
+index e72a6b6..f9ab4af 100644
+--- a/src/nv_driver.c
++++ b/src/nv_driver.c
+@@ -559,16 +559,16 @@ redisplay_dirty(ScreenPtr screen, PixmapDirtyUpdatePtr dirty)
+ {
+ 	RegionRec pixregion;
+ 
+-	PixmapRegionInit(&pixregion, dirty->slave_dst);
++	PixmapRegionInit(&pixregion, dirty->secondary_dst);
+ 
+-	DamageRegionAppend(&dirty->slave_dst->drawable, &pixregion);
++	DamageRegionAppend(&dirty->secondary_dst->drawable, &pixregion);
+ #ifdef HAS_DIRTYTRACKING_ROTATION
+ 	PixmapSyncDirtyHelper(dirty);
+ #else
+ 	PixmapSyncDirtyHelper(dirty, &pixregion);
+ #endif
+ 
+-	DamageRegionProcessPending(&dirty->slave_dst->drawable);
++	DamageRegionProcessPending(&dirty->secondary_dst->drawable);
+ 	RegionUninit(&pixregion);
+ }
+ 
+-- 
+2.33.1
+
diff --git a/gnu/packages/patches/xf86-video-qxl-fix-build.patch b/gnu/packages/patches/xf86-video-qxl-fix-build.patch
new file mode 100644
index 0000000000..9ea50e4c91
--- /dev/null
+++ b/gnu/packages/patches/xf86-video-qxl-fix-build.patch
@@ -0,0 +1,101 @@
+From 4b083ede3c4a827a84295ff223e34ee3c2e581b2 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zolt=C3=A1n=20B=C3=B6sz=C3=B6rm=C3=A9nyi?=
+ <zboszor@gmail.com>
+Date: Sat, 28 Aug 2021 15:38:40 +0200
+Subject: [PATCH] Fix a build  error with Xorg master
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Use xf86ReturnOptValBool() in get_bool_option() instead of
+options[option_index].value.bool to fix a compiler error with
+current Xorg xserver master branch.
+
+Also use xf86GetOptValInteger() in get_int_option() and
+xf86GetOptValString() in get_str_option() for consistency.
+
+The change causes a slight performance drop during option parsing
+because the passed-in index_value is no longer used as an index
+into the options array.
+
+Instead, it's used as a token now for the standard option getter
+functions which works since the index_value to the get_*_option()
+functions are identical to the value of options[n].token in the
+passed-in OptionInfoRec array.
+
+Also rename "int option_index" to "int token" for clarity in all
+three functions.
+
+Signed-off-by: Zoltán Böszörményi <zboszor@gmail.com>
+---
+ src/qxl_option_helpers.c | 13 +++++++------
+ src/qxl_option_helpers.h |  6 +++---
+ 2 files changed, 10 insertions(+), 9 deletions(-)
+
+diff --git a/src/qxl_option_helpers.c b/src/qxl_option_helpers.c
+index 2aba677..7707b7c 100644
+--- a/src/qxl_option_helpers.c
++++ b/src/qxl_option_helpers.c
+@@ -10,31 +10,32 @@
+ 
+ #include "qxl_option_helpers.h"
+ 
+-int get_int_option(OptionInfoPtr options, int option_index,
++int get_int_option(OptionInfoPtr options, int token,
+                    const char *env_name)
+ {
++    int value;
+     if (env_name && getenv(env_name)) {
+         return atoi(getenv(env_name));
+     }
+-    return options[option_index].value.num;
++    return xf86GetOptValInteger(options, token, &value) ? value : 0;
+ }
+ 
+-const char *get_str_option(OptionInfoPtr options, int option_index,
++const char *get_str_option(OptionInfoPtr options, int token,
+                            const char *env_name)
+ {
+     if (getenv(env_name)) {
+         return getenv(env_name);
+     }
+-    return options[option_index].value.str;
++    return xf86GetOptValString(options, token);
+ }
+ 
+-int get_bool_option(OptionInfoPtr options, int option_index,
++int get_bool_option(OptionInfoPtr options, int token,
+                      const char *env_name)
+ {
+     const char* value = getenv(env_name);
+ 
+     if (!value) {
+-        return options[option_index].value.bool;
++        return xf86ReturnOptValBool(options, token, FALSE);
+     }
+     if (strcmp(value, "0") == 0 ||
+         strcasecmp(value, "off") == 0 ||
+diff --git a/src/qxl_option_helpers.h b/src/qxl_option_helpers.h
+index 7c54c72..66d0a17 100644
+--- a/src/qxl_option_helpers.h
++++ b/src/qxl_option_helpers.h
+@@ -4,13 +4,13 @@
+ #include <xf86Crtc.h>
+ #include <xf86Opt.h>
+ 
+-int get_int_option(OptionInfoPtr options, int option_index,
++int get_int_option(OptionInfoPtr options, int token,
+                    const char *env_name);
+ 
+-const char *get_str_option(OptionInfoPtr options, int option_index,
++const char *get_str_option(OptionInfoPtr options, int token,
+                            const char *env_name);
+ 
+-int get_bool_option(OptionInfoPtr options, int option_index,
++int get_bool_option(OptionInfoPtr options, int token,
+                      const char *env_name);
+ 
+ #endif // OPTION_HELPERS_H
+-- 
+GitLab
+
diff --git a/gnu/packages/patches/xgboost-use-system-dmlc-core.patch b/gnu/packages/patches/xgboost-use-system-dmlc-core.patch
index c654694fec..6b2a1651a5 100644
--- a/gnu/packages/patches/xgboost-use-system-dmlc-core.patch
+++ b/gnu/packages/patches/xgboost-use-system-dmlc-core.patch
@@ -1,34 +1,35 @@
-From 34167cc105e47589b86b6f62da76e0ab744002dd Mon Sep 17 00:00:00 2001
-From: Vinicius Monego <monego@posteo.net>
-Date: Tue, 11 May 2021 19:35:30 -0300
-Subject: [PATCH] Use dmlc-core from Guix.
-
----
-This patch is a subset of the following Debian patch: https://sources.debian.org/src/xgboost/1.2.1-1/debian/patches/cmake.patch/
-
-Rabit is now developed as part of xgboost, so we don't build it separately.
-
- CMakeLists.txt | 8 +++-----
- 1 file changed, 3 insertions(+), 5 deletions(-)
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 6cc19fbd..3b42bc17 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -150,11 +150,9 @@ endif (USE_OPENMP)
+# This patch was imported from Debian: https://sources.debian.org/src/xgboost/1.5.1-1/debian/patches/cmake-dmlc-core.patch/
 
+Index: xgboost/CMakeLists.txt
+===================================================================
+--- xgboost.orig/CMakeLists.txt
++++ xgboost/CMakeLists.txt
+@@ -164,7 +164,9 @@ endif (USE_NCCL)
+ 
  # dmlc-core
  msvc_use_static_runtime()
 -add_subdirectory(${xgboost_SOURCE_DIR}/dmlc-core)
--set_target_properties(dmlc PROPERTIES
--  CXX_STANDARD 14
--  CXX_STANDARD_REQUIRED ON
--  POSITION_INDEPENDENT_CODE ON)
 +add_library(dmlc SHARED IMPORTED)
 +find_library(DMLC_LIBRARY dmlc)
 +set_property(TARGET dmlc PROPERTY IMPORTED_LOCATION "${DMLC_LIBRARY}")
+ 
  if (MSVC)
-   target_compile_options(dmlc PRIVATE
-                          -D_CRT_SECURE_NO_WARNINGS -D_CRT_SECURE_NO_DEPRECATE)
---
-2.31.1
+   if (TARGET dmlc_unit_tests)
+@@ -222,7 +224,7 @@ set_target_properties(runxgboost PROPERT
+ #-- End CLI for xgboost
+ 
+ # Common setup for all targets
+-foreach(target xgboost objxgboost dmlc runxgboost)
++foreach(target xgboost objxgboost runxgboost)
+   xgboost_target_properties(${target})
+   xgboost_target_link_libraries(${target})
+   xgboost_target_defs(${target})
+@@ -273,7 +275,7 @@ install(DIRECTORY ${xgboost_SOURCE_DIR}/
+ #
+ # https://github.com/dmlc/xgboost/issues/6085
+ if (BUILD_STATIC_LIB)
+-  set(INSTALL_TARGETS xgboost runxgboost objxgboost dmlc)
++  set(INSTALL_TARGETS xgboost runxgboost objxgboost)
+ else (BUILD_STATIC_LIB)
+   set(INSTALL_TARGETS xgboost runxgboost)
+ endif (BUILD_STATIC_LIB)
diff --git a/gnu/packages/patches/xmonad-next-dynamic-linking.patch b/gnu/packages/patches/xmonad-next-dynamic-linking.patch
new file mode 100644
index 0000000000..a1d71825b6
--- /dev/null
+++ b/gnu/packages/patches/xmonad-next-dynamic-linking.patch
@@ -0,0 +1,16 @@
+This patch is required for xmonad to make use of shared libraries.
+Without it, xmonad will not work since we do not (by default) use
+statically linked Haskell libraries.
+
+index 46a0939..5ad4f8f 100644
+--- a/src/XMonad/Core.hs
++++ b/src/XMonad/Core.hs
+@@ -664,6 +664,8 @@ compile dirs method =
+   where
+     ghcArgs = [ "--make"
+               , "xmonad.hs"
++              , "-dynamic"
++              , "-fPIC"
+               , "-i" -- only look in @lib@
+               , "-ilib"
+               , "-fforce-recomp"
diff --git a/gnu/packages/patches/xpra-4.2-install_libs.patch b/gnu/packages/patches/xpra-4.2-install_libs.patch
new file mode 100644
index 0000000000..65d489a3b8
--- /dev/null
+++ b/gnu/packages/patches/xpra-4.2-install_libs.patch
@@ -0,0 +1,29 @@
+This workaround for Gentoo interferes with our use of --no-compile during
+the 'install stage.
+
+--- a/setup.py	2022-01-04 10:10:05.039825000 +0100
++++ b/setup.py	2022-01-06 15:10:31.952656039 +0100
+@@ -589,8 +589,6 @@
+         })
+ 
+ def add_cython_ext(*args, **kwargs):
+-    if "--no-compile" in sys.argv and not ("build" in sys.argv and "install" in sys.argv):
+-        return
+     assert cython_ENABLED, "cython compilation is disabled"
+     if cython_tracing_ENABLED:
+         kwargs["define_macros"] = [
+@@ -1703,14 +1701,6 @@
+             if uinput_ENABLED:
+                 add_data_files("lib/udev/rules.d/", ["fs/lib/udev/rules.d/71-xpra-virtual-pointer.rules"])
+ 
+-    #gentoo does weird things, calls --no-compile with build *and* install
+-    #then expects to find the cython modules!? ie:
+-    #> python2.7 setup.py build -b build-2.7 install --no-compile \
+-    # --root=/var/tmp/portage/x11-wm/xpra-0.7.0/temp/images/2.7
+-    #otherwise we use the flags to skip pkgconfig
+-    if ("--no-compile" in sys.argv or "--skip-build" in sys.argv) and not ("build" in sys.argv and "install" in sys.argv):
+-        pkgconfig = no_pkgconfig
+-
+     if OSX and "py2app" in sys.argv:
+         import py2app    #@UnresolvedImport
+         assert py2app is not None
diff --git a/gnu/packages/patches/xygrib-fix-finding-data.patch b/gnu/packages/patches/xygrib-fix-finding-data.patch
new file mode 100644
index 0000000000..0b718b0eff
--- /dev/null
+++ b/gnu/packages/patches/xygrib-fix-finding-data.patch
@@ -0,0 +1,131 @@
+This is a backport of the commits in PR 235 (“Fixes for packaging on
+linux-like systems”), which was merged upstream:
+
+https://github.com/opengribs/XyGrib/pull/235
+
+It fixes finding resources such as icons, maps and translations installed in
+the data directory.  This patch has been merged upstream and can be removed
+with the next release.
+
+Sightly adapted to find openjpg-2.4.
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 64059ab65dae..00cc5d6aea6f 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -7,6 +7,9 @@ set(VERSION_PATCH 6)
+ set(XYGRIB_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
+ set(XYGRIB_VERSION_DATE "2019-07-05")
+ 
++option(GNU_PACKAGE "Install into GNU standard directories" OFF)
++option(GEN_TRANSLATIONS "Generate translations" ON)
++
+ set(CMAKE_VERBOSE_MAKEFILE ON)
+ 
+ # Find includes in corresponding build directories
+@@ -25,7 +28,7 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON)
+ set(CMAKE_CXX_STANDARD 11)
+ #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3")
+ if(UNIX AND NOT APPLE)
+-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fPIC")
++add_compile_options(-Wall -fPIC)
+ endif()
+ 
+ # Add support for address etc sanitizers, part 1/2 (other half after ADD_EXECUTABLE)
+@@ -108,17 +111,12 @@ find_path(OPENJPEG_INCLUDE_DIR
+      ~/Library/Frameworks/include
+      /Library/Frameworks/include
+      /usr/local/include
+-     /usr/local/include/openjpeg-2.3
+-     /usr/include/openjpeg-2.3
+-     /usr/local/include/openjpeg-2.1
+-     /usr/include/openjpeg-2.1
+-     /usr/local/include/openjpeg-2.2
+-     /usr/include/openjpeg-2.2
+      /usr/include
+      /sw/include # Fink
+      /opt/local/include # DarwinPorts
+      /opt/csw/include # Blastwave
+      /opt/include
++     PATH_SUFFIXES openjpeg-2.4 openjpeg-2.3 openjpeg-2.2 openjpeg-2.1
+      REQUIRED
+  )
+ include_directories(${OPENJPEG_INCLUDE_DIR})
+@@ -212,22 +210,24 @@ include_directories(${PNG_INCLUDE_DIR})
+ configure_file(cmake/Version.h.in ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/include/Version.h)
+ include_directories(${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/include)
+ 
+-if(APPLE)
+-set(PREFIX_BIN ${PROJECT_NAME})
+-set(PREFIX_PKGDATA ${PROJECT_NAME})
+-endif()
+-if(WIN32)
+-set(PREFIX_BIN ".")
+-set(PREFIX_PKGDATA ".")
+-endif()
+-if(UNIX AND NOT APPLE)
+-# This is not exactly a good idea on linux - the code should be changed so that the executable would go to /usr/local/bin and the data to /usr/local/share/XyGrib
+-set(PREFIX_BIN ${PROJECT_NAME})
+-set(PREFIX_PKGDATA ${PROJECT_NAME})
++if(GNU_PACKAGE)
++    include(GNUInstallDirs)
++    set(PREFIX_BIN ${CMAKE_INSTALL_FULL_BINDIR})
++    set(PREFIX_PKGDATA ${CMAKE_INSTALL_FULL_DATADIR}/openGribs/${PROJECT_NAME})
++else()
++    if(WIN32)
++        set(PREFIX_BIN ".")
++        set(PREFIX_PKGDATA ".")
++    else()
++        set(PREFIX_BIN ${PROJECT_NAME})
++        set(PREFIX_PKGDATA ${PROJECT_NAME})
++    endif()
+ endif()
+ 
+ add_subdirectory(src)
+-add_subdirectory(data/tr)
++if(GEN_TRANSLATIONS)
++    add_subdirectory(data/tr)
++endif()
+ 
+ # Installation
+ # macOS bundle parameters
+@@ -241,4 +241,14 @@ set_target_properties(${PROJECT_NAME} PROPERTIES MACOSX_BUNDLE_SHORT_VERSION_STR
+ set_target_properties(${PROJECT_NAME} PROPERTIES MACOSX_BUNDLE_BUNDLE_VERSION "${XYGRIB_VERSION}")
+ set_target_properties(${PROJECT_NAME} PROPERTIES MACOSX_BUNDLE_COPYRIGHT "${PROJECT_NAME} Authors")
+ # Install data
+-install(DIRECTORY data DESTINATION ${PREFIX_PKGDATA})
++install(DIRECTORY data DESTINATION ${PREFIX_PKGDATA}
++        PATTERN "CMakeFiles" EXCLUDE
++        PATTERN "CMakeLists.txt" EXCLUDE
++        PATTERN "Makefile" EXCLUDE
++        PATTERN "cmake_install.cmake" EXCLUDE)
++if(GNU_PACKAGE)
++    install(FILES debian/xygrib.desktop
++            DESTINATION ${CMAKE_INSTALL_FULL_DATADIR}/applications)
++    install(FILES debian/xygrib.png
++            DESTINATION ${CMAKE_INSTALL_FULL_DATADIR}/pixmaps)
++endif()
+diff --git a/INSTALL.md b/INSTALL.md
+index 2c9d3ab4da03..1190cc780182 100644
+--- a/INSTALL.md
++++ b/INSTALL.md
+@@ -22,7 +22,19 @@ https://gihub.com/opengribs/XyGrib/releases or on https://opengribs.org in the d
+   - openSUSE Tumbleweed: `sudo zypper install gcc git cmake libqt5-qtbase-devel libpng-devel openjpeg2-devel libnova-devel libproj-devel zlib-devel libbz2-devel
+ 
+ ## Build and package
++### Options
+ 
++XyGrib has two CMake options
++- GNU_PACKAGE (DEFAULT: OFF)
++```
++Files will be installed in GNU standard installation directories such as prefix/bin and prefix/share.
++Packagers are recommended to test this option.
++```
++- GEN_TRANSLATION (DEFAULT: ON)
++```
++Create targets to generate translation files.
++Turning this off removes the need for qt-linguist, part of qttools qt5 submodule, during build.
++```
+ ### macOS
+ 
+ - Get the source
diff --git a/gnu/packages/patches/yggdrasil-extra-config.patch b/gnu/packages/patches/yggdrasil-extra-config.patch
index c21ca29a84..bd4bea7b9f 100644
--- a/gnu/packages/patches/yggdrasil-extra-config.patch
+++ b/gnu/packages/patches/yggdrasil-extra-config.patch
@@ -1,27 +1,39 @@
+From 779f980451d20079b34812f7006f2d7230738ad0 Mon Sep 17 00:00:00 2001
+From: csepp <raingloom@riseup.net>
+Date: Wed, 3 Nov 2021 21:14:54 +0100
+Subject: [PATCH] add extra config file option to yggdrasil command
+
+This is useful in Guix and Nix, because one config file can come
+from the world-readable store and another can be placed directly
+into /etc with much stricter permissions.
+---
+ cmd/yggdrasil/main.go | 29 ++++++++++++++++++++++-------
+ 1 file changed, 22 insertions(+), 7 deletions(-)
+
 diff --git a/cmd/yggdrasil/main.go b/cmd/yggdrasil/main.go
-index 813e950..08d35cc 100644
+index 58b8230..b9df98a 100644
 --- a/cmd/yggdrasil/main.go
 +++ b/cmd/yggdrasil/main.go
-@@ -40,11 +40,12 @@ type node struct {
- 	admin     module.Module // admin.AdminSocket
+@@ -43,11 +43,12 @@ type node struct {
+ 	admin     *admin.AdminSocket
  }
  
--func readConfig(useconf *bool, useconffile *string, normaliseconf *bool) *config.NodeConfig {
-+func readConfig(useconf *bool, useconffile *string, extraconffile *string, normaliseconf *bool) *config.NodeConfig {
+-func readConfig(log *log.Logger, useconf bool, useconffile string, normaliseconf bool) *config.NodeConfig {
++func readConfig(log *log.Logger, useconf bool, useconffile string, extraconffile string, normaliseconf bool) *config.NodeConfig {
  	// Use a configuration file. If -useconf, the configuration will be read
  	// from stdin. If -useconffile, the configuration will be read from the
  	// filesystem.
  	var conf []byte
 +	var extraconf []byte
  	var err error
- 	if *useconffile != "" {
+ 	if useconffile != "" {
  		// Read the file from the filesystem
-@@ -56,6 +57,21 @@ func readConfig(useconf *bool, useconffile *string, normaliseconf *bool) *config
+@@ -59,6 +60,21 @@ func readConfig(log *log.Logger, useconf bool, useconffile string, normaliseconf
  	if err != nil {
  		panic(err)
  	}
-+	if *extraconffile != "" {
-+		extraconf, err = ioutil.ReadFile(*extraconffile);
++	if extraconffile != "" {
++		extraconf, err = ioutil.ReadFile(extraconffile);
 +	}
 +	if err != nil {
 +		panic(err)
@@ -30,7 +42,7 @@ index 813e950..08d35cc 100644
 +	// then parse the configuration we loaded above on top of it. The effect
 +	// of this is that any configuration item that is missing from the provided
 +	// configuration will use a sane default.
-+	cfg := config.GenerateConfig()
++	cfg := defaults.GenerateConfig()
 +	var confs [2][]byte
 +	confs[0]=conf
 +	confs[1]=extraconf
@@ -38,7 +50,7 @@ index 813e950..08d35cc 100644
  	// If there's a byte order mark - which Windows 10 is now incredibly fond of
  	// throwing everywhere when it's converting things into UTF-16 for the hell
  	// of it - remove it and decode back down into UTF-8. This is necessary
-@@ -69,11 +85,6 @@ func readConfig(useconf *bool, useconffile *string, normaliseconf *bool) *config
+@@ -72,11 +88,6 @@ func readConfig(log *log.Logger, useconf bool, useconffile string, normaliseconf
  			panic(err)
  		}
  	}
@@ -46,11 +58,11 @@ index 813e950..08d35cc 100644
 -	// then parse the configuration we loaded above on top of it. The effect
 -	// of this is that any configuration item that is missing from the provided
 -	// configuration will use a sane default.
--	cfg := config.GenerateConfig()
+-	cfg := defaults.GenerateConfig()
  	var dat map[string]interface{}
  	if err := hjson.Unmarshal(conf, &dat); err != nil {
  		panic(err)
-@@ -112,6 +123,7 @@ func readConfig(useconf *bool, useconffile *string, normaliseconf *bool) *config
+@@ -136,6 +147,7 @@ func readConfig(log *log.Logger, useconf bool, useconffile string, normaliseconf
  	if err = mapstructure.Decode(dat, &cfg); err != nil {
  		panic(err)
  	}
@@ -58,7 +70,15 @@ index 813e950..08d35cc 100644
  	return cfg
  }
  
-@@ -164,6 +176,7 @@ func main() {
+@@ -192,6 +204,7 @@ type yggArgs struct {
+ 	getaddr       bool
+ 	getsnet       bool
+ 	useconffile   string
++        extraconffile string
+ 	logto         string
+ 	loglevel      string
+ }
+@@ -200,6 +213,7 @@ func getArgs() yggArgs {
  	genconf := flag.Bool("genconf", false, "print a new config to stdout")
  	useconf := flag.Bool("useconf", false, "read HJSON/JSON config from stdin")
  	useconffile := flag.String("useconffile", "", "read HJSON/JSON config from specified file path")
@@ -66,21 +86,23 @@ index 813e950..08d35cc 100644
  	normaliseconf := flag.Bool("normaliseconf", false, "use in combination with either -useconf or -useconffile, outputs your configuration normalised")
  	confjson := flag.Bool("json", false, "print configuration from -genconf or -normaliseconf as JSON instead of HJSON")
  	autoconf := flag.Bool("autoconf", false, "automatic mode (dynamic IP, peer with IPv6 neighbors)")
-@@ -187,7 +200,7 @@ func main() {
- 		cfg = config.GenerateConfig()
- 	case *useconffile != "" || *useconf:
+@@ -213,6 +227,7 @@ func getArgs() yggArgs {
+ 		genconf:       *genconf,
+ 		useconf:       *useconf,
+ 		useconffile:   *useconffile,
++                extraconffile: *extraconffile,
+ 		normaliseconf: *normaliseconf,
+ 		confjson:      *confjson,
+ 		autoconf:      *autoconf,
+@@ -265,7 +280,7 @@ func run(args yggArgs, ctx context.Context, done chan struct{}) {
+ 		cfg = defaults.GenerateConfig()
+ 	case args.useconffile != "" || args.useconf:
  		// Read the configuration from either stdin or from the filesystem
--		cfg = readConfig(useconf, useconffile, normaliseconf)
-+		cfg = readConfig(useconf, useconffile, extraconffile, normaliseconf)
+-		cfg = readConfig(logger, args.useconf, args.useconffile, args.normaliseconf)
++		cfg = readConfig(logger, args.useconf, args.useconffile, args.extraconffile, args.normaliseconf)
  		// If the -normaliseconf option was specified then remarshal the above
  		// configuration and print it back to stdout. This lets the user update
  		// their configuration file with newly mapped names (like above) or to
-@@ -332,7 +345,7 @@ func main() {
- 			goto exit
- 		case _ = <-r:
- 			if *useconffile != "" {
--				cfg = readConfig(useconf, useconffile, normaliseconf)
-+				cfg = readConfig(useconf, useconffile, extraconffile, normaliseconf)
- 				logger.Infoln("Reloading configuration from", *useconffile)
- 				n.core.UpdateConfig(cfg)
- 				n.tuntap.UpdateConfig(cfg)
+-- 
+2.33.1
+
diff --git a/gnu/packages/patches/zig-disable-libc-note-test.patch b/gnu/packages/patches/zig-disable-libc-note-test.patch
new file mode 100644
index 0000000000..4508cee200
--- /dev/null
+++ b/gnu/packages/patches/zig-disable-libc-note-test.patch
@@ -0,0 +1,31 @@
+This test fails with "error.CompilationIncorrectlySucceeded".
+
+diff --git a/test/compile_errors.zig b/test/compile_errors.zig
+index b1eaa0302..621f9db0a 100644
+--- a/test/compile_errors.zig
++++ b/test/compile_errors.zig
+@@ -2943,15 +2943,15 @@ pub fn addCases(ctx: *TestContext) !void {
+             "tmp.zig:3:5: error: dependency on libc must be explicitly specified in the build command",
+         });
+ 
+-        ctx.testErrStage1("libc headers note",
+-            \\const c = @cImport(@cInclude("stdio.h"));
+-            \\export fn entry() void {
+-            \\    _ = c.printf("hello, world!\n");
+-            \\}
+-        , &[_][]const u8{
+-            "tmp.zig:1:11: error: C import failed",
+-            "tmp.zig:1:11: note: libc headers not available; compilation does not link against libc",
+-        });
++        // ctx.testErrStage1("libc headers note",
++        //     \\const c = @cImport(@cInclude("stdio.h"));
++        //     \\export fn entry() void {
++        //     \\    _ = c.printf("hello, world!\n");
++        //     \\}
++        // , &[_][]const u8{
++        //     "tmp.zig:1:11: error: C import failed",
++        //     "tmp.zig:1:11: note: libc headers not available; compilation does not link against libc",
++        // });
+     }
+ 
+     ctx.testErrStage1("comptime vector overflow shows the index",
diff --git a/gnu/packages/patches/zig-use-system-paths.patch b/gnu/packages/patches/zig-use-system-paths.patch
new file mode 100644
index 0000000000..a008beafc2
--- /dev/null
+++ b/gnu/packages/patches/zig-use-system-paths.patch
@@ -0,0 +1,148 @@
+This patch replaces the OS-specific detection mechanism by one that solely
+relies on environment variables.  This has the benefit that said environment
+variables can be used as search paths in Guix.
+
+diff --git a/lib/std/zig/system/NativePaths.zig b/lib/std/zig/system/NativePaths.zig
+index 8e3e46e48..1ed9d3206 100644
+--- a/lib/std/zig/system/NativePaths.zig
++++ b/lib/std/zig/system/NativePaths.zig
+@@ -26,73 +26,42 @@ pub fn detect(allocator: Allocator, native_info: NativeTargetInfo) !NativePaths
+     };
+     errdefer self.deinit();
+ 
+-    var is_nix = false;
+-    if (process.getEnvVarOwned(allocator, "NIX_CFLAGS_COMPILE")) |nix_cflags_compile| {
+-        defer allocator.free(nix_cflags_compile);
+-
+-        is_nix = true;
+-        var it = mem.tokenize(u8, nix_cflags_compile, " ");
++    // TODO: Support cross-compile paths?
++    if (process.getEnvVarOwned(allocator, "C_INCLUDE_PATH")) |c_include_path| {
++        defer allocator.free(c_include_path);
++        var it = mem.tokenize(u8, c_include_path, ":");
+         while (true) {
+-            const word = it.next() orelse break;
+-            if (mem.eql(u8, word, "-isystem")) {
+-                const include_path = it.next() orelse {
+-                    try self.addWarning("Expected argument after -isystem in NIX_CFLAGS_COMPILE");
+-                    break;
+-                };
+-                try self.addIncludeDir(include_path);
+-            } else {
+-                if (mem.startsWith(u8, word, "-frandom-seed=")) {
+-                    continue;
+-                }
+-                try self.addWarningFmt("Unrecognized C flag from NIX_CFLAGS_COMPILE: {s}", .{word});
+-            }
++            const dir = it.next() orelse break;
++            try self.addIncludeDir(dir);
+         }
+     } else |err| switch (err) {
+         error.InvalidUtf8 => {},
+         error.EnvironmentVariableNotFound => {},
+         error.OutOfMemory => |e| return e,
+     }
+-    if (process.getEnvVarOwned(allocator, "NIX_LDFLAGS")) |nix_ldflags| {
+-        defer allocator.free(nix_ldflags);
+-
+-        is_nix = true;
+-        var it = mem.tokenize(u8, nix_ldflags, " ");
++    if (process.getEnvVarOwned(allocator, "CPLUS_INCLUDE_PATH")) |cplus_include_path| {
++        defer allocator.free(cplus_include_path);
++        var it = mem.tokenize(u8, cplus_include_path, ":");
+         while (true) {
+-            const word = it.next() orelse break;
+-            if (mem.eql(u8, word, "-rpath")) {
+-                const rpath = it.next() orelse {
+-                    try self.addWarning("Expected argument after -rpath in NIX_LDFLAGS");
+-                    break;
+-                };
+-                try self.addRPath(rpath);
+-            } else if (word.len > 2 and word[0] == '-' and word[1] == 'L') {
+-                const lib_path = word[2..];
+-                try self.addLibDir(lib_path);
+-            } else {
+-                try self.addWarningFmt("Unrecognized C flag from NIX_LDFLAGS: {s}", .{word});
+-                break;
+-            }
++            const dir = it.next() orelse break;
++            try self.addIncludeDir(dir);
+         }
+     } else |err| switch (err) {
+         error.InvalidUtf8 => {},
+         error.EnvironmentVariableNotFound => {},
+         error.OutOfMemory => |e| return e,
+     }
+-    if (is_nix) {
+-        return self;
+-    }
+-
+-    if (comptime builtin.target.isDarwin()) {
+-        try self.addIncludeDir("/usr/include");
+-        try self.addIncludeDir("/usr/local/include");
+-
+-        try self.addLibDir("/usr/lib");
+-        try self.addLibDir("/usr/local/lib");
+-
+-        try self.addFrameworkDir("/Library/Frameworks");
+-        try self.addFrameworkDir("/System/Library/Frameworks");
+-
+-        return self;
++    if (process.getEnvVarOwned(allocator, "LIBRARY_PATH")) |library_path| {
++        defer allocator.free(library_path);
++        var it = mem.tokenize(u8, library_path, ":");
++        while (true) {
++            const dir = it.next() orelse break;
++            try self.addLibDir(dir);
++        }
++    } else |err| switch (err) {
++        error.InvalidUtf8 => {},
++        error.EnvironmentVariableNotFound => {},
++        error.OutOfMemory => |e| return e,
+     }
+ 
+     if (comptime native_target.os.tag == .solaris) {
+@@ -106,32 +75,17 @@ pub fn detect(allocator: Allocator, native_info: NativeTargetInfo) !NativePaths
+         return self;
+     }
+ 
+-    if (native_target.os.tag != .windows) {
+-        const triple = try native_target.linuxTriple(allocator);
+-        const qual = native_target.cpu.arch.ptrBitWidth();
+-
+-        // TODO: $ ld --verbose | grep SEARCH_DIR
+-        // the output contains some paths that end with lib64, maybe include them too?
+-        // TODO: what is the best possible order of things?
+-        // TODO: some of these are suspect and should only be added on some systems. audit needed.
+-
+-        try self.addIncludeDir("/usr/local/include");
+-        try self.addLibDirFmt("/usr/local/lib{d}", .{qual});
+-        try self.addLibDir("/usr/local/lib");
+-
+-        try self.addIncludeDirFmt("/usr/include/{s}", .{triple});
+-        try self.addLibDirFmt("/usr/lib/{s}", .{triple});
+-
+-        try self.addIncludeDir("/usr/include");
+-        try self.addLibDirFmt("/lib{d}", .{qual});
+-        try self.addLibDir("/lib");
+-        try self.addLibDirFmt("/usr/lib{d}", .{qual});
+-        try self.addLibDir("/usr/lib");
+-
+-        // example: on a 64-bit debian-based linux distro, with zlib installed from apt:
+-        // zlib.h is in /usr/include (added above)
+-        // libz.so.1 is in /lib/x86_64-linux-gnu (added here)
+-        try self.addLibDirFmt("/lib/{s}", .{triple});
++    if (process.getEnvVarOwned(allocator, "DYLD_FRAMEWORK_PATH")) |dyld_framework_path| {
++        defer allocator.free(dyld_framework_path);
++        var it = mem.tokenize(u8, dyld_framework_path, ":");
++        while (true) {
++            const dir = it.next() orelse break;
++            try self.addFrameworkDir(dir);
++        }
++    } else |err| switch (err) {
++        error.InvalidUtf8 => {},
++        error.EnvironmentVariableNotFound => {},
++        error.OutOfMemory => |e| return e,
+     }
+ 
+     return self;
diff --git a/gnu/packages/patches/zstd-CVE-2021-24031_CVE-2021-24032.patch b/gnu/packages/patches/zstd-CVE-2021-24031_CVE-2021-24032.patch
deleted file mode 100644
index 48b5eb18eb..0000000000
--- a/gnu/packages/patches/zstd-CVE-2021-24031_CVE-2021-24032.patch
+++ /dev/null
@@ -1,68 +0,0 @@
-Description: fix race condition allowing attackers to access destination file
- This commit addresses https://github.com/facebook/zstd/issues/2491.
- .
- Note that a downside of this solution is that it is global: `umask()` affects
- all file creation calls in the process. I believe this is safe since
- `fileio.c` functions should only ever be used in the zstd binary, and these
- are (almost) the only files ever created by zstd, and AIUI they're only
- created in a single thread. So we can get away with messing with global state.
- .
- Note that this doesn't change the permissions of files created by `dibio.c`.
- I'm not sure what those should be...
-Author: W. Felix Handte <w@felixhandte.com>
-Origin: upstream
-Bug: https://github.com/facebook/zstd/issues/2491
-Bug-Debian: https://github.com/facebook/zstd/issues/2491
-Applied-Upstream: commit:a774c5797399040af62db21d8a9b9769e005430e
-Reviewed-by: Étienne Mollier <etienne.mollier@mailoo.org>
-Last-Update: 2021-03-03
----
-This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
---- a/programs/fileio.c
-+++ b/programs/fileio.c
-@@ -606,11 +606,11 @@ FIO_openDstFile(FIO_prefs_t* const prefs
-             FIO_remove(dstFileName);
-     }   }
- 
--    {   FILE* const f = fopen( dstFileName, "wb" );
-+    {   const int old_umask = UTIL_umask(0177); /* u-x,go-rwx */
-+        FILE* const f = fopen( dstFileName, "wb" );
-+        UTIL_umask(old_umask);
-         if (f == NULL) {
-             DISPLAYLEVEL(1, "zstd: %s: %s\n", dstFileName, strerror(errno));
--        } else if(srcFileName != NULL && strcmp (srcFileName, stdinmark)) {
--            chmod(dstFileName, 00600);
-         }
-         return f;
-     }
---- a/programs/util.c
-+++ b/programs/util.c
-@@ -54,6 +54,15 @@ int UTIL_getFileStat(const char* infilen
-     return 1;
- }
- 
-+int UTIL_umask(int mode) {
-+#if PLATFORM_POSIX_VERSION > 0
-+    return umask(mode);
-+#else
-+    /* do nothing, fake return value */
-+    return mode;
-+#endif
-+}
-+
- int UTIL_setFileStat(const char *filename, stat_t *statbuf)
- {
-     int res = 0;
---- a/programs/util.h
-+++ b/programs/util.h
-@@ -136,6 +136,10 @@ int UTIL_isSameFile(const char* file1, c
- int UTIL_compareStr(const void *p1, const void *p2);
- int UTIL_isCompressedFile(const char* infilename, const char *extensionList[]);
- const char* UTIL_getFileExtension(const char* infilename);
-+/**
-+ * Wraps umask(). Does nothing when the platform doesn't have that concept.
-+ */
-+int UTIL_umask(int mode);
- 
- #ifndef _MSC_VER
- U32 UTIL_isFIFO(const char* infilename);
diff --git a/gnu/packages/patches/zziplib-CVE-2018-16548.patch b/gnu/packages/patches/zziplib-CVE-2018-16548.patch
deleted file mode 100644
index a17c6a9768..0000000000
--- a/gnu/packages/patches/zziplib-CVE-2018-16548.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-The following 3 patches applied to 0.13.69 in this order, combined:
-https://github.com/gdraheim/zziplib/commit/9411bde3e4a70a81ff3ffd256b71927b2d90dcbb.patch
-https://github.com/gdraheim/zziplib/commit/d2e5d5c53212e54a97ad64b793a4389193fec687.patch
-https://github.com/gdraheim/zziplib/commit/0e1dadb05c1473b9df2d7b8f298dab801778ef99.patch
-
-diff --git a/test/test.zip b/test/test.zip
-index 2c992ea..952d475 100644
-Binary files a/test/test.zip and b/test/test.zip differ
-diff --git a/zzip/zip.c b/zzip/zip.c
-index 14e2e06..f97a40a 100644
---- a/zzip/zip.c
-+++ b/zzip/zip.c
-@@ -472,9 +472,15 @@ __zzip_parse_root_directory(int fd,
-         } else
-         {
-             if (io->fd.seeks(fd, zz_rootseek + zz_offset, SEEK_SET) < 0)
-+	    {
-+	    	free(hdr0);
-                 return ZZIP_DIR_SEEK;
-+	    }
-             if (io->fd.read(fd, &dirent, sizeof(dirent)) < __sizeof(dirent))
-+	    {
-+	    	free(hdr0);
-                 return ZZIP_DIR_READ;
-+	    }
-             d = &dirent;
-         }
- 
-@@ -574,11 +580,18 @@ __zzip_parse_root_directory(int fd,
- 
-         if (hdr_return)
-             *hdr_return = hdr0;
-+	else
-+	{
-+	    /* If it is not assigned to *hdr_return, it will never be free()'d */
-+	    free(hdr0);
-+	}
-     }                           /* else zero (sane) entries */
-+    else
-+        free(hdr0);
- #  ifndef ZZIP_ALLOW_MODULO_ENTRIES
--    return (entries != zz_entries ? ZZIP_CORRUPTED : 0);
-+    return (entries != zz_entries) ? ZZIP_CORRUPTED : 0;
- #  else
--    return ((entries & (unsigned)0xFFFF) != zz_entries ? ZZIP_CORRUPTED : 0);
-+    return ((entries & (unsigned)0xFFFF) != zz_entries) ? ZZIP_CORRUPTED : 0;
- #  endif
- }
- 
diff --git a/gnu/packages/patchutils.scm b/gnu/packages/patchutils.scm
index 6eaf0e371c..5f16deaffa 100644
--- a/gnu/packages/patchutils.scm
+++ b/gnu/packages/patchutils.scm
@@ -64,8 +64,7 @@
          "1va5pzmxbzpi87vdnbjm9qdf9bvzps9xfv0gi4mycgg3bybb0xc8"))))
     (build-system gnu-build-system)
     (inputs
-     `(("perl" ,perl)
-       ("python" ,python)))
+     (list perl python))
     (arguments
      '(#:parallel-tests? #f
        #:phases
@@ -112,11 +111,7 @@ listing the files modified by a patch.")
     (build-system gnu-build-system)
     (native-inputs
      `(("gettext" ,gettext-minimal)))
-    (inputs `(("perl" ,perl)
-              ("less" ,less)
-              ("file" ,file)
-              ("ed" ,ed)
-              ("diffstat" ,diffstat)))
+    (inputs (list perl less file ed diffstat))
     (arguments
      '(#:parallel-tests? #f
        #:phases
@@ -183,8 +178,7 @@ refreshed, and more.")
          (delete 'configure)            ; no configure script
          (delete 'build))))             ; nothing to build
     (inputs
-     `(("perl" ,perl)
-       ("xmlto" ,xmlto)))
+     (list perl xmlto))
     (home-page "https://www.colordiff.org")
     (synopsis "Display diff output with colors")
     (description
@@ -208,7 +202,7 @@ refreshed, and more.")
                   "11rdmhv0l1s8nqb20ywmw2zqizczch2p62qf9apyx5wqgxlnjshk"))
                 (file-name (string-append name "-"version "-checkout"))))
       (build-system python-build-system)
-      (inputs `(("python-notmuch" ,python2-notmuch)))
+      (inputs (list python2-notmuch))
       (arguments
        `(#:tests? #f                             ;no "test" target
          #:python ,python-2))                    ;not compatible with Python 3
@@ -234,7 +228,7 @@ the command-line or from Emacs via its Notmuch integration.")
                 "1f1kj4jki08bnrwpzi663mjfkrx4wnfpzdfwd2qgijlkx5ysjkgh"))))
     (build-system gnu-build-system)
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (home-page "https://www.cjmweb.net/vbindiff/")
     (synopsis "Console-based tool for comparing binary data")
     (description "Visual Binary Diff (@command{vbindiff}) displays files in
@@ -267,7 +261,7 @@ GiB).")
        ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
        ("gtksourceview" ,gtksourceview-3)))
     (propagated-inputs
-     `(("dconf" ,dconf)))
+     (list dconf))
     (arguments
      `(#:imported-modules ((guix build glib-or-gtk-build-system)
                            ,@%python-build-system-modules)
@@ -328,7 +322,7 @@ you to figure out what is going on in that merge you keep avoiding.")
 (define-public patchwork
   (package
     (name "patchwork")
-    (version "3.0.1")
+    (version "3.0.4")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -337,7 +331,7 @@ you to figure out what is going on in that merge you keep avoiding.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "049ih1fbbbmj11v5m9ilahifl8x7gi6wyba58552y9n9djzs8csc"))))
+                "0dl0prsyzsnlq6g0jw05mxx00bq9y2rpc3vrbfxfiblyyydrn2xn"))))
     (build-system python-build-system)
     (arguments
      `(;; TODO: Tests require a running database
@@ -355,7 +349,7 @@ you to figure out what is going on in that merge you keep avoiding.")
                  ;; as the python modules in this package in the wsgi.py file,
                  ;; as this will ensure they are available at runtime.
                  (define pythonpath
-                   (string-append (getenv "PYTHONPATH")
+                   (string-append (getenv "GUIX_PYTHONPATH")
                                   ":"
                                   (site-packages inputs outputs)))
                  (display
@@ -390,22 +384,22 @@ application = get_wsgi_application()\n") port)))))
                (for-each (lambda (directory)
                            (copy-recursively
                             directory
-                            (string-append out-site-packages directory)))
+                            (string-append out-site-packages "/" directory)))
                          '(;; Contains the python code
                            "patchwork"
                            ;; Contains the templates for the generated HTML
                            "templates"))
                (delete-file-recursively
-                (string-append out-site-packages "patchwork/tests"))
+                (string-append out-site-packages "/patchwork/tests"))
 
                ;; Install patchwork related tools
                (for-each (lambda (file)
                            (install-file file (string-append out "/bin")))
                          (list
                           (string-append out-site-packages
-                                         "patchwork/bin/parsemail.sh")
+                                         "/patchwork/bin/parsemail.sh")
                           (string-append out-site-packages
-                                         "patchwork/bin/parsemail-batch.sh")))
+                                         "/patchwork/bin/parsemail-batch.sh")))
 
                ;; Collect the static assets, this includes JavaScript, CSS and
                ;; fonts. This is a standard Django process when running a
@@ -459,15 +453,15 @@ if __name__ == \"__main__\":
                (chmod (string-append out "/bin/patchwork-admin") #o555))
              #t)))))
     (inputs
-     `(("python-wrapper" ,python-wrapper)))
+     (list python-wrapper))
     (propagated-inputs
-     `(("python-django" ,python-django-2.2)
-       ;; TODO: Make this configurable
-       ("python-psycopg2" ,python-psycopg2)
-       ("python-mysqlclient" ,python-mysqlclient)
-       ("python-django-filter" ,python-django-filter)
-       ("python-djangorestframework" ,python-djangorestframework)
-       ("python-django-debug-toolbar" ,python-django-debug-toolbar)))
+     (list python-django-3.2
+           ;; TODO: Make this configurable
+           python-psycopg2
+           python-mysqlclient
+           python-django-filter
+           python-django-rest-framework
+           python-django-debug-toolbar))
     (synopsis "Web based patch tracking system")
     (description
      "Patchwork is a patch tracking system.  It takes in emails containing
@@ -518,10 +512,7 @@ Users can login allowing them to change the state of patches.")
                             "/share/man/man1"))
              #t)))))
     (native-inputs
-     `(("python-pbr" ,python-pbr)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-mock" ,python-mock)))
+     (list python-pbr python-pytest python-pytest-cov python-mock))
     (home-page
      "https://github.com/getpatchwork/pwclient")
     (synopsis "Command-line client for the Patchwork patch tracking tool")
diff --git a/gnu/packages/patool.scm b/gnu/packages/patool.scm
index a808555795..31dfd994b1 100644
--- a/gnu/packages/patool.scm
+++ b/gnu/packages/patool.scm
@@ -54,25 +54,25 @@
                       (when tests?
                         (invoke "pytest")))))))
     (native-inputs
-     `(("bzip2" ,bzip2)
-       ("cabextract" ,cabextract)
-       ("cdrtools" ,cdrtools)
-       ("clzip" ,clzip)
-       ("cpio" ,cpio)
-       ("dpkg" ,dpkg)
-       ("file" ,file)
-       ("flac" ,flac)
-       ("libarchive" ,libarchive)       ;for bsdtar
-       ("lhasa" ,lhasa)
-       ("lrzip" ,lrzip)
-       ("lzip" ,lzip)
-       ("lzop" ,lzop)
-       ("python-pytest" ,python-pytest)
-       ("p7zip" ,p7zip)
-       ("pbzip2" ,pbzip2)
-       ("pigz" ,pigz)
-       ("plzip" ,plzip)
-       ("rpm" ,rpm)))
+     (list bzip2
+           cabextract
+           cdrtools
+           clzip
+           cpio
+           dpkg
+           file
+           flac
+           libarchive ;for bsdtar
+           lhasa
+           lrzip
+           lzip
+           lzop
+           python-pytest
+           p7zip
+           pbzip2
+           pigz
+           plzip
+           rpm))
     (home-page "https://wummel.github.io/patool/")
     (synopsis "Portable archive file manager")
     (description "Patool provides a unified command line interface for a
diff --git a/gnu/packages/pciutils.scm b/gnu/packages/pciutils.scm
index d7d224b292..b6b1e3ad85 100644
--- a/gnu/packages/pciutils.scm
+++ b/gnu/packages/pciutils.scm
@@ -87,8 +87,7 @@
 
                (("^IDSDIR=.*$")
                 ;; Installation directory of 'pci.ids.gz'.
-                "IDSDIR = $(SHAREDIR)/hwdata\n"))
-             #t))
+                "IDSDIR = $(SHAREDIR)/hwdata\n"))))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              ;; Install the commands, library, and .pc files.
@@ -109,12 +108,9 @@
        ;; No test suite.
        #:tests? #f))
     (native-inputs
-     `(("which" ,which)
-       ("pkg-config" ,pkg-config)))
+     (list which pkg-config))
     (inputs
-     `(,@(if (member (or (%current-target-system)
-                         (%current-system))
-                     (package-supported-systems kmod))
+     `(,@(if (not (hurd-target?))
              `(("kmod" ,kmod))
              '())
        ,@(if (hurd-target?)
diff --git a/gnu/packages/pcre.scm b/gnu/packages/pcre.scm
index bc0e285001..0324a21261 100644
--- a/gnu/packages/pcre.scm
+++ b/gnu/packages/pcre.scm
@@ -5,7 +5,7 @@
 ;;; Copyright © 2016 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2017, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2021 Jean-Baptiste Volatier <jbv@pm.me>
 ;;; Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
@@ -30,6 +30,7 @@
   #:use-module (gnu packages compression)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages)
+  #:use-module (guix utils)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix build-system gnu))
@@ -37,28 +38,22 @@
 (define-public pcre
   (package
    (name "pcre")
-   (version "8.44")
+   (version "8.45")
    (source (origin
             (method url-fetch)
-            (uri (list
-                  (string-append "ftp://ftp.csx.cam.ac.uk"
-                                 "/pub/software/programming/pcre/"
-                                 "pcre-" version ".tar.bz2")
-                  (string-append "mirror://sourceforge/pcre/pcre/"
-                                 version "/pcre-" version ".tar.bz2")))
+            (uri (string-append "https://ftp.pcre.org/pub/pcre/pcre-"
+                                version ".tar.bz2"))
             (sha256
              (base32
-              "0v9nk51wh55pcbnf2jr36yarz8ayajn6d7ywiq2wagivn9c8c40r"))))
+              "1f7zichy6iimmkfrqdl575sdlm795cyc75szgg1vc2xvsbf6zbjd"))))
    (build-system gnu-build-system)
    (outputs '("out"           ;library & headers
               "bin"           ;depends on Readline (adds 20MiB to the closure)
               "doc"           ;1.8 MiB of HTML
               "static"))      ;1.8 MiB static libraries
-   (inputs `(("bzip2" ,bzip2)
-             ("readline" ,readline)
-             ("zlib" ,zlib)))
+   (inputs (list bzip2 readline zlib))
    (arguments
-    '(#:disallowed-references ("doc")
+    `(#:disallowed-references ("doc")
       #:configure-flags '("--enable-utf"
                           "--enable-pcregrep-libz"
                           "--enable-pcregrep-libbz2"
@@ -66,7 +61,10 @@
                           "--enable-unicode-properties"
                           "--enable-pcre16"
                           "--enable-pcre32"
-                          "--enable-jit")
+                          ;; pcretest fails on powerpc32.
+                          ,@(if (target-ppc32?)
+                              '()
+                              `("--enable-jit")))
       #:phases (modify-phases %standard-phases
                  (add-after 'install 'move-static-libs
                    (lambda* (#:key outputs #:allow-other-keys)
@@ -77,8 +75,7 @@
                                    (link lib (string-append static "/"
                                                             (basename lib)))
                                    (delete-file lib))
-                                 (find-files source "\\.a$"))
-                       #t))))))
+                                 (find-files source "\\.a$"))))))))
    (synopsis "Perl Compatible Regular Expressions")
    (description
     "The PCRE library is a set of functions that implement regular expression
@@ -91,18 +88,16 @@ POSIX regular expression API.")
 (define-public pcre2
   (package
     (name "pcre2")
-    (version "10.35")
+    (version "10.37")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/pcre/pcre2/"
                                   version "/pcre2-" version ".tar.bz2"))
               (sha256
                (base32
-                "04s6kmk9qdd4rjz477h547j4bx7hfz0yalpvrm381rqc5ghaijww"))))
+                "0w6jaswjmg3bc0wsw6msn5bvk66p90kf2asnnj9rhll0idpak5ad"))))
    (build-system gnu-build-system)
-   (inputs `(("bzip2" ,bzip2)
-             ("readline" ,readline)
-             ("zlib" ,zlib)))
+   (inputs (list bzip2 readline zlib))
    (arguments
     `(#:configure-flags '("--enable-unicode"
                           "--enable-pcre2grep-libz"
@@ -110,15 +105,17 @@ POSIX regular expression API.")
                           "--enable-pcre2test-libreadline"
                           "--enable-pcre2-16"
                           "--enable-pcre2-32"
-                          "--enable-jit"
+                          ;; pcre2_jit_test fails on powerpc32.
+                          ,@(if (target-ppc32?)
+                              '()
+                              `("--enable-jit"))
                           "--disable-static")
       #:phases
       (modify-phases %standard-phases
         (add-after 'unpack 'patch-paths
           (lambda _
             (substitute* "RunGrepTest"
-              (("/bin/echo") (which "echo")))
-            #t)))))
+              (("/bin/echo") (which "echo"))))))))
    (synopsis "Perl Compatible Regular Expressions")
    (description
     "The PCRE library is a set of functions that implement regular expression
@@ -127,16 +124,3 @@ own native API, as well as a set of wrapper functions that correspond to the
 POSIX regular expression API.")
    (license license:bsd-3)
    (home-page "https://www.pcre.org/")))
-
-(define-public pcre2-10.36
-  (package
-    (inherit pcre2)
-    (name "pcre2")
-    (version "10.36")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "mirror://sourceforge/pcre/pcre2/"
-                                  version "/pcre2-" version ".tar.bz2"))
-              (sha256
-               (base32
-                "0p3699msps07p40g9426lvxa3b41rg7k2fn7qxl2jm0kh4kkkvx9"))))))
diff --git a/gnu/packages/pdf.scm b/gnu/packages/pdf.scm
index a5b5442f29..d4e97e1d82 100644
--- a/gnu/packages/pdf.scm
+++ b/gnu/packages/pdf.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013, 2015, 2016 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2014, 2015, 2016, 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2014, 2015, 2016, 2018, 2019, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
 ;;; Copyright © 2016 Roel Janssen <roel@gnu.org>
 ;;; Copyright © 2016 Nikita <nikita@n0.is>
@@ -21,6 +21,7 @@
 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
 ;;; Copyright © 2020 Timotej Lazar <timotej.lazar@araneo.si>
 ;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -55,6 +56,7 @@
   #:use-module (gnu packages backup)
   #:use-module (gnu packages base)
   #:use-module (gnu packages bash)
+  #:use-module (gnu packages build-tools)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages cups)
@@ -63,7 +65,6 @@
   #:use-module (gnu packages fonts)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages game-development)
-  #:use-module (gnu packages gcc)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages ghostscript)
   #:use-module (gnu packages gl)
@@ -79,6 +80,7 @@
   #:use-module (gnu packages linux)
   #:use-module (gnu packages lua)
   #:use-module (gnu packages man)
+  #:use-module (gnu packages markup)
   #:use-module (gnu packages pcre)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages photo)
@@ -97,6 +99,7 @@
   #:use-module (gnu packages tcl)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages web)
+  #:use-module (gnu packages webkit)
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
@@ -130,7 +133,7 @@
        ("pkg-config" ,pkg-config)
        ("texlive" ,texlive-tiny)))
     (inputs
-     `(("poppler" ,poppler)))
+     (list poppler))
     (home-page "https://github.com/trueroad/extractpdfmark")
     (synopsis "Extract page mode and named destinations as PDFmark from PDF")
     (description
@@ -175,10 +178,7 @@ information.")
                    (,(string-append qtbase "/lib/qt5/plugins/platforms"))))
                #t))))))
     (inputs
-     `(("python-pypdf2" ,python-pypdf2)
-       ("python-pyqt" ,python-pyqt)
-       ("python-poppler-qt5" ,python-poppler-qt5)
-       ("qtbase" ,qtbase-5)))
+     (list python-pypdf2 python-pyqt python-poppler-qt5 qtbase-5))
     (home-page "http://crazy-compilers.com/flyer-composer")
     (synopsis "Rearrange PDF pages to print as flyers on one sheet")
     (description "@command{flyer-composer} can be used to prepare one- or
@@ -223,14 +223,14 @@ please install the @code{flyer-composer-gui} package.")))
 (define-public poppler
   (package
    (name "poppler")
-   (version "0.86.1")
+   (version "21.07.0")
    (source (origin
             (method url-fetch)
             (uri (string-append "https://poppler.freedesktop.org/poppler-"
                                 version ".tar.xz"))
             (sha256
              (base32
-              "0v3z4mk1rr8i0c4cfkab7pnxdbil30j4cm4w6cqlq6cfghkhlqxg"))))
+              "1m54hsi8z6c13jdbjwz55flkra1mahmkw2igavbf8p86d2gv4sp2"))))
    (build-system cmake-build-system)
    ;; FIXME:
    ;;  use libcurl:        no
@@ -250,20 +250,28 @@ please install the @code{flyer-composer-gui} package.")))
     ;; As per poppler-cairo and poppler-glib.pc.
     ;; XXX: Ideally we'd propagate Cairo too, but that would require a
     ;; different solution to the circular dependency mentioned above.
-    `(("glib" ,glib)))
+    (list glib))
    (native-inputs
-      `(("pkg-config" ,pkg-config)
-        ("glib" ,glib "bin")                      ; glib-mkenums, etc.
-        ("gobject-introspection" ,gobject-introspection)))
+      (list pkg-config
+            `(,glib "bin") ; glib-mkenums, etc.
+            gobject-introspection))
    (arguments
-    `(#:tests? #f ; no test data provided with the tarball
+    `(#:tests? #f                      ;no test data provided with the tarball
       #:configure-flags
       (let* ((out (assoc-ref %outputs "out"))
              (lib (string-append out "/lib")))
         (list "-DENABLE_UNSTABLE_API_ABI_HEADERS=ON" ;to install header files
               "-DENABLE_ZLIB=ON"
+              "-DENABLE_BOOST=OFF"      ;disable Boost to save size
               (string-append "-DCMAKE_INSTALL_LIBDIR=" lib)
-              (string-append "-DCMAKE_INSTALL_RPATH=" lib)))))
+              (string-append "-DCMAKE_INSTALL_RPATH=" lib)))
+      ,@(if (%current-target-system)
+            `(#:phases
+              (modify-phases %standard-phases
+                (add-after 'unpack 'set-PKG_CONFIG
+                  (lambda _
+                    (setenv "PKG_CONFIG" ,(pkg-config-for-target))))))
+            '())))
    (synopsis "PDF rendering library")
    (description
     "Poppler is a PDF rendering library based on the xpdf-3.0 code base.")
@@ -273,14 +281,14 @@ please install the @code{flyer-composer-gui} package.")))
 (define-public poppler-data
   (package
     (name "poppler-data")
-    (version "0.4.10")
+    (version "0.4.11")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://poppler.freedesktop.org/poppler-data"
                                   "-" version ".tar.gz"))
               (sha256
                (base32
-                "0c3vjs3p7rjc4yfacnhd865r27czmzwcr4j2z4jldi68dvvcwbvf"))))
+                "137h4m48gc4v0srnr0gkwaqna6kfdqpy5886if5gjfmh3g6hbv1c"))))
     (build-system gnu-build-system)
     (arguments
      '(#:tests? #f                      ; no test suite
@@ -317,7 +325,8 @@ When present, Poppler is able to correctly render CJK and Cyrillic text.")
         (uri (pypi-uri "python-poppler-qt5" version))
         (sha256
          (base32
-          "0b82gm4i75q5v19kfbq0h4y0b2vcwr2213zkhxh6l0h45kdndmxd"))))
+          "0b82gm4i75q5v19kfbq0h4y0b2vcwr2213zkhxh6l0h45kdndmxd"))
+       (patches (search-patches "python-poppler-qt5-fix-build.patch"))))
     (build-system python-build-system)
     (arguments
      `(;; There are no tests.  The check phase just causes a rebuild.
@@ -338,12 +347,9 @@ When present, Poppler is able to correctly render CJK and Cyrillic text.")
                                                (assoc-ref inputs "python-pyqt")
                                                "/share/sip")) #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("python-sip" ,python-sip-4)
-       ("python-pyqt" ,python-pyqt)
-       ("poppler-qt5" ,poppler-qt5)
-       ("qtbase" ,qtbase-5)))
+     (list python-sip-4 python-pyqt poppler-qt5 qtbase-5))
     (home-page "https://pypi.org/project/python-poppler-qt5/")
     (synopsis "Python bindings for Poppler-Qt5")
     (description
@@ -374,12 +380,9 @@ Poppler PDF rendering library.")
             (string-append "--with-png="
                            (assoc-ref %build-inputs "libpng")))))
    (inputs
-    `(("zlib" ,zlib)
-      ("libpng" ,libpng)))
+    (list zlib libpng))
    (native-inputs
-    `(("autoconf" ,autoconf)
-      ("automake" ,automake)
-      ("libtool" ,libtool)))
+    (list autoconf automake libtool))
    (home-page "http://libharu.org/")
    (synopsis "Library for generating PDF files")
    (description
@@ -398,11 +401,7 @@ reading and editing of existing PDF files.")
       (sha256
        (base32 "0ip81c9vy0igjnasl9iv2lz214fb01vvvdzbvjmgwc63fi1jgr0g"))))
    (build-system cmake-build-system)
-   (inputs `(("cups" ,cups)
-             ("freetype" ,freetype)
-             ("libpng" ,libpng)
-             ("qtbase" ,qtbase-5)
-             ("zlib" ,zlib)))
+   (inputs (list cups freetype libpng qtbase-5 zlib))
    (arguments
     `(#:tests? #f))                   ; there is no check target
    (synopsis "Viewer for PDF files based on the Motif toolkit")
@@ -423,9 +422,8 @@ reading and editing of existing PDF files.")
               (sha256
                (base32
                 "1i6cf0vks501cggwvfsl6qb7mdaf3sszdymphimfvnspw810faj5"))))
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("libarchive" ,libarchive)
-              ("zathura" ,zathura)))
+    (native-inputs (list pkg-config))
+    (inputs (list libarchive zathura))
     (build-system meson-build-system)
     (arguments
      `(#:tests? #f                      ; package does not contain tests
@@ -458,9 +456,8 @@ using libarchive.")
               (sha256
                (base32
                 "0wygq89nyjrjnsq7vbpidqdsirjm6iq4w2rijzwpk2f83ys8bc3y"))))
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("libspectre" ,libspectre)
-              ("zathura" ,zathura)))
+    (native-inputs (list pkg-config))
+    (inputs (list libspectre zathura))
     (build-system meson-build-system)
     (arguments
      `(#:tests? #f                      ; package does not contain tests
@@ -493,10 +490,9 @@ using libspectre.")
               (sha256
                (base32
                 "0062n236414db7q7pnn3ccg5111ghxj3407pn9ri08skxskgirln"))))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (inputs
-     `(("djvulibre" ,djvulibre)
-       ("zathura" ,zathura)))
+     (list djvulibre zathura))
     (build-system meson-build-system)
     (arguments
      `(#:tests? #f                      ; package does not contain tests
@@ -529,7 +525,7 @@ using the DjVuLibre library.")
               (sha256
                (base32
                 "1r3v37k9fl2rxipvacgxr36llywvy7n20a25h3ajlyk70697sa66"))))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (inputs
      `(("jbig2dec" ,jbig2dec)
        ("libjpeg" ,libjpeg-turbo)
@@ -579,10 +575,9 @@ by using the @code{mupdf} rendering library.")
               (sha256
                (base32
                 "1vfl4vkyy3rf39r1sqaa7y8113bgkh2bkfq3nn2inis9mrykmk6m"))))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (inputs
-     `(("poppler" ,poppler)
-       ("zathura" ,zathura)))
+     (list poppler zathura))
     (build-system meson-build-system)
     (arguments
      `(#:tests? #f                      ; package does not include tests
@@ -628,10 +623,9 @@ by using the poppler rendering engine.")
                      ;; For tests.
                      ("check" ,check)
                      ("xorg-server" ,xorg-server-for-tests)))
-    (inputs `(("sqlite" ,sqlite)))
+    (inputs (list sqlite))
     ;; Listed in 'Requires.private' of 'zathura.pc'.
-    (propagated-inputs `(("cairo" ,cairo)
-                         ("girara" ,girara)))
+    (propagated-inputs (list cairo girara))
     (native-search-paths
      (list (search-path-specification
             (variable "ZATHURA_PLUGINS_PATH")
@@ -674,8 +668,7 @@ interaction.")
                 "1f0yvkx6nf99fp741w2y706d8bs9824x1z2gqm3rdy5fv8bfgwkw"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("cppunit" ,cppunit)
-       ("pkg-config" ,pkg-config)))
+     (list cppunit pkg-config))
     (inputs
      `(("libjpeg" ,libjpeg-turbo)
        ("libtiff" ,libtiff)
@@ -710,21 +703,20 @@ extracting content or merging files.")
 (define-public mupdf
   (package
     (name "mupdf")
-    (version "1.18.0")
+    (version "1.19.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://mupdf.com/downloads/archive/"
                            "mupdf-" version "-source.tar.xz"))
        (sha256
-        (base32 "16m5sksil22sshxy70xkslsb2qhvcqb1d95i9savnhds1xn4ybar"))
-       (patches (search-patches "mupdf-fix-linkage.patch"
-                                "mupdf-CVE-2021-3407.patch"))
+        (base32 "1i98xqgnzp168hnnhradl8658qsif06wlbvcglz0mmh8wi1rkwrq"))
        (modules '((guix build utils)))
        (snippet
         '(begin
            ;; Remove bundled software.
-           (let* ((keep (list "lcms2")) ; different from our lcms2 package
+           (let* ((keep (list "extract"
+                              "lcms2")) ; different from our lcms2 package
                   (from "thirdparty")
                   (kept (string-append from "~temp")))
              (mkdir-p kept)
@@ -750,7 +742,7 @@ extracting content or merging files.")
         ("openssl" ,openssl)
         ("zlib" ,zlib)))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (arguments
       `(#:tests? #f                     ; no check target
         #:make-flags (list "verbose=yes"
@@ -809,12 +801,10 @@ line tools for batch rendering @command{pdfdraw}, rewriting files
               (("/usr/bin/env") (which "env")))
             #t)))))
    (native-inputs
-    `(("pkg-config" ,pkg-config)
-      ("perl" ,perl)))
+    (list pkg-config perl))
    (propagated-inputs
     ;; In Requires.private of libqpdf.pc.
-    `(("libjpeg-turbo" ,libjpeg-turbo)
-      ("zlib" ,zlib)))
+    (list libjpeg-turbo zlib))
    (synopsis "Command-line tools and library for transforming PDF files")
    (description
     "QPDF is a command-line program that does structural, content-preserving
@@ -842,22 +832,22 @@ program capable of converting PDF into other formats.")
        (patches (search-patches "qpdfview-qt515-compat.patch"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("cups" ,cups)
-       ("djvulibre" ,djvulibre)
-       ("libspectre" ,libspectre)
-       ("poppler-qt5" ,poppler-qt5)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)))
+     (list cups
+           djvulibre
+           libspectre
+           poppler-qt5
+           qtbase-5
+           qtsvg))
     (arguments
      `(#:tests? #f ; no tests
        #:phases
        (modify-phases %standard-phases
          (replace 'configure
-           (lambda _
+           (lambda* (#:key outputs #:allow-other-keys)
              (substitute* "qpdfview.pri"
-               (("/usr") (assoc-ref %outputs "out")))
+               (("/usr") (assoc-ref outputs "out")))
              (invoke "qmake" "qpdfview.pro"))))))
     (home-page "https://launchpad.net/qpdfview")
     (synopsis "Tabbed document viewer")
@@ -881,13 +871,9 @@ SyncTeX support, and rudimentary support for annotations and forms.")
          "09i88v3wacmx7f96dmq0l3afpyv95lh6jrx16xzm0jd1szdrhn5j"))))
     (build-system gnu-build-system)
     (inputs
-     `(("gtk" ,gtk+-2)
-       ("pango" ,pango)
-       ("poppler" ,poppler)
-       ("glib" ,glib)
-       ("libgnomecanvas" ,libgnomecanvas)))
+     (list gtk+-2 pango poppler glib libgnomecanvas))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://xournal.sourceforge.net/")
     (synopsis "Notetaking using a stylus")
     (description
@@ -934,21 +920,20 @@ using a stylus.")
            (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap)))))
     (native-inputs
      `(("cppunit" ,cppunit)
-       ("gcc" ,gcc-8)
        ("gettext" ,gettext-minimal)
        ("help2man" ,help2man)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("gtk+" ,gtk+)
-       ("librsvg" ,librsvg)
-       ("libsndfile" ,libsndfile)
-       ("libxml2" ,libxml2)
-       ("libzip" ,libzip)
-       ("lua" ,lua)
-       ("poppler" ,poppler)
-       ("portaudio" ,portaudio)
-       ("texlive-bin" ,texlive-bin)))
+     (list alsa-lib
+           gtk+
+           librsvg
+           libsndfile
+           libxml2
+           libzip
+           lua
+           poppler
+           portaudio
+           texlive-bin))
     (home-page "https://github.com/xournalpp/xournalpp")
     (synopsis "Handwriting notetaking software with PDF annotation support")
     (description "Xournal++ is a hand note taking software written in
@@ -1027,7 +1012,7 @@ optimize toolbar for portrait / landscape
             (base32
              "1v0gy4mbx02ys96ssx89420y0njknlrxs2bx64bv4rp8a0al66w5"))))))
     (propagated-inputs
-     `(("python-pillow" ,python-pillow)))
+     (list python-pillow))
     (home-page "https://www.reportlab.com")
     (synopsis "Python library for generating PDFs and graphics")
     (description "This is the ReportLab PDF Toolkit.  It allows rapid creation
@@ -1053,10 +1038,7 @@ vector formats.")
     (build-system python-build-system)
 
     ;; TODO: Add dependency on pdftk.
-    (inputs `(("python2-pygame" ,python2-pygame)
-              ("python2-pillow" ,python2-pillow)
-              ("sdl" ,sdl)
-              ("xpdf" ,xpdf)))
+    (inputs (list python2-pygame python2-pillow sdl xpdf))
 
     (arguments
      `(#:python ,python-2
@@ -1094,18 +1076,17 @@ the PDF pages.")
 (define-public img2pdf
   (package
     (name "img2pdf")
-    (version "0.4.1")
+    (version "0.4.3")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "img2pdf" version))
        (sha256
-        (base32 "0ljmxp7myxccfdy4kxpn4jzq35qs4pbmmmnih9vis8abm2f2589q"))))
+        (base32 "17z0bn8kihiyqjd1m5jr80m7ry06l1qn0l8v918xg5gs7q2calcf"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pikepdf" ,python-pikepdf)
-       ("python-pillow" ,python-pillow)
-       ("python-tkinter" ,python "tk")))
+     (list python-pikepdf python-pillow
+           `(,python "tk")))
     (home-page "https://gitlab.mister-muffin.de/josch/img2pdf")
     (synopsis "Convert images to PDF via direct JPEG inclusion")
     (description
@@ -1135,10 +1116,14 @@ information for every pixel as the input.")
              (substitute* "mk/Autoconf.mk"
                (("/bin/echo") "echo")
                (("/sbin/ldconfig -p") "echo lib")) #t))
+         (add-before 'build 'set-fcommon
+           (lambda _
+             (setenv "CFLAGS" "-fcommon")))
          (delete 'configure))
         #:tests? #f
-        #:make-flags (list ,(string-append "CC=" (cc-for-target))
-                           (string-append "prefix=" (assoc-ref %outputs "out")))))
+        #:make-flags
+        (list (string-append "CC=" ,(cc-for-target))
+              (string-append "prefix=" (assoc-ref %outputs "out")))))
     (inputs `(("libjpeg" ,libjpeg-turbo)
               ("curl" ,curl)
               ("libtiff" ,libtiff)
@@ -1155,12 +1140,11 @@ information for every pixel as the input.")
               ("libepoxy" ,libepoxy)
               ("libpng" ,libpng)
               ("poppler" ,poppler)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (synopsis "Framebuffer and drm-based image viewer")
     (description
       "fbida contains a few applications for viewing and editing images on
 the framebuffer.")
-
     (license license:gpl2+)))
 
 (define-public pdf2svg
@@ -1178,10 +1162,9 @@ the framebuffer.")
                 "14ffdm4y26imq99wjhkrhy9lp33165xci1l5ndwfia8hz53bl02k"))))
     (build-system gnu-build-system)
     (inputs
-     `(("cairo" ,cairo)
-       ("poppler" ,poppler)))
+     (list cairo poppler))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://www.cityinthesky.co.uk/opensource/pdf2svg/")
     (synopsis "PDF to SVG converter")
     (description "@command{pdf2svg} is a simple command-line PDF to SVG
@@ -1262,7 +1245,7 @@ python-pypdf2 instead.")
 (define-public pdfarranger
   (package
     (name "pdfarranger")
-    (version "1.7.1")
+    (version "1.8.2")
     (source
      (origin
        (method git-fetch)
@@ -1271,31 +1254,29 @@ python-pypdf2 instead.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1c2mafnz8pv32wzkc2wx4q8y2x7xffpn6ag12dj7ga5n772fb6s3"))))
+        (base32 "18bpnnwjx72d5ps06dr89mkixiwzc9hf5gr75k8qcnrkshl038v2"))))
     (build-system python-build-system)
     (arguments
      '(#:tests? #f                      ;no tests
-       #:phases (modify-phases %standard-phases
-                  (add-after 'install 'wrap-for-typelib
-                    (lambda* (#:key inputs outputs #:allow-other-keys)
-                      (let* ((out     (assoc-ref outputs "out"))
-                             (program (string-append out "/bin/pdfarranger")))
-                        (wrap-program program
-                          `("GI_TYPELIB_PATH" ":" prefix
-                            (,(getenv "GI_TYPELIB_PATH"))))
-                        #t))))))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'wrap-for-typelib
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((out     (assoc-ref outputs "out"))
+                    (program (string-append out "/bin/pdfarranger")))
+               (wrap-program program
+                 `("GI_TYPELIB_PATH" ":" prefix
+                   (,(getenv "GI_TYPELIB_PATH"))))))))))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("python-distutils-extra" ,python-distutils-extra)))
+     (list intltool python-distutils-extra))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("poppler" ,poppler)))
+     (list gtk+ poppler))
     (propagated-inputs
-     `(("img2pdf" ,img2pdf)
-       ("python-dateutil" ,python-dateutil)
-       ("python-pikepdf" ,python-pikepdf)
-       ("python-pycairo" ,python-pycairo)
-       ("python-pygobject" ,python-pygobject)))
+     (list img2pdf
+           python-dateutil
+           python-pikepdf
+           python-pycairo
+           python-pygobject))
     (home-page "https://github.com/jeromerobert/pdfarranger")
     (synopsis "Merge, split and re-arrange pages from PDF documents")
     (description
@@ -1320,7 +1301,7 @@ PDF Arranger was formerly known as PDF-Shuffler.")
     (arguments
      `(#:tests? #f))  ; test-suite not included in source archive
     (inputs
-     `(("python-pypdf2" ,python-pypdf2)))
+     (list python-pypdf2))
     (home-page "https://pythonhosted.org/pdftools.pdfposter/")
     (synopsis "Scale and tile PDF images/pages to print on multiple pages")
     (description "@command{pdfposter} can be used to create a large poster by
@@ -1348,11 +1329,9 @@ PDF.  Indeed @command{pdfposter} was inspired by @command{poster}.")
          "1fia10djcxxl7n9jw2prargw4yzbykk6izig2443ycj9syhxrwqf"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libgcrypt" ,libgcrypt)
-       ("pcre" ,pcre)
-       ("poppler" ,poppler)))
+     (list libgcrypt pcre poppler))
     (home-page "https://pdfgrep.org")
     (synopsis "Command-line utility to search text in PDF files")
     (description
@@ -1365,7 +1344,7 @@ multiple files.")
 (define-public pdfpc
   (package
     (name "pdfpc")
-    (version "4.4.1")
+    (version "4.5.0")
     (source
      (origin
        (method git-fetch)
@@ -1374,20 +1353,33 @@ multiple files.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "11n925c5jj3yfwnqkgxzqrmsrpqh8ls1g4idmqqzpsanpam1xvna"))))
+        (base32 "0bmy51w6ypz927hxwp5g7wapqvzqmsi3w32rch6i3f94kg1152ck"))))
     (build-system cmake-build-system)
-    (arguments '(#:tests? #f))          ; no test target
+    (arguments
+     '(#:tests? #f          ; no test target
+       #:phases
+       (modify-phases %standard-phases
+         ;; This is really a bug in Vala.
+         ;; https://github.com/pdfpc/pdfpc/issues/594
+         (add-after 'unpack 'fix-vala-API-conflict
+           (lambda _
+             (substitute* "src/classes/action/movie.vala"
+               (("info.from_caps\\(caps\\)")
+                "Gst.Video.info_from_caps(out info, caps)")))))))
     (inputs
      `(("cairo" ,cairo)
+       ("discount" ,discount) ; libmarkdown
        ("gtk+" ,gtk+)
        ("gstreamer" ,gstreamer)
        ("gst-plugins-base" ,gst-plugins-base)
+       ("json-glib" ,json-glib)
        ("libgee" ,libgee)
        ("poppler" ,poppler)
        ("pango" ,pango)
-       ("vala" ,vala)))
+       ("vala" ,vala)
+       ("webkitgtk" ,webkitgtk-with-libsoup2)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://pdfpc.github.io/")
     (synopsis "Presenter console with multi-monitor support for PDF files")
     (description
@@ -1397,7 +1389,7 @@ is able to show a normal presentation window on one screen, while showing a
 more sophisticated overview on the other one providing information like a
 picture of the next slide, as well as the left over time till the end of the
 presentation.  The input files processed by pdfpc are PDF documents.")
-    (license license:gpl2+)))
+    (license license:gpl3+)))
 
 (define-public paps
   (package
@@ -1412,10 +1404,9 @@ presentation.  The input files processed by pdfpc are PDF documents.")
         (base32 "1z1w1fg2bvb8p92n1jlpqp3n9mq42szb2mqhh4xqmmnmfcdkpi9s"))))
     (build-system gnu-build-system)
     (inputs
-     `(("pango" ,pango)))
+     (list pango))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (home-page "https://github.com/dov/paps")
     (synopsis "Pango to PostScript converter")
     (description
@@ -1446,8 +1437,7 @@ rendering of the file through the Pango Cairo back end.")
                (("more-itertools>=2\\.2,<6\\.0\\.0") "more-itertools>=2.2"))
              #t)))))
     (propagated-inputs
-     `(("python-more-itertools" ,python-more-itertools)
-       ("python-pypdf2" ,python-pypdf2)))
+     (list python-more-itertools python-pypdf2))
     (home-page "https://github.com/hellerbarde/stapler")
     (synopsis "PDF manipulation tool")
     (description "Stapler is a pure Python alternative to PDFtk, a tool for
@@ -1525,18 +1515,17 @@ manipulating PDF documents from the command line.  It supports
        ("glib" ,glib)
        ("pango" ,pango)))
     (propagated-inputs
-     `(("gdk-pixbuf" ,gdk-pixbuf)
-       ("python-cairocffi" ,python-cairocffi)
-       ("python-cairosvg" ,python-cairosvg)
-       ("python-cffi" ,python-cffi)
-       ("python-cssselect2" ,python-cssselect2)
-       ("python-html5lib" ,python-html5lib)
-       ("python-pyphen" ,python-pyphen)
-       ("python-tinycss2" ,python-tinycss2)))
+     (list gdk-pixbuf
+           python-cairocffi
+           python-cairosvg
+           python-cffi
+           python-cssselect2
+           python-html5lib
+           python-pyphen
+           python-tinycss2))
     (native-inputs
-     `(("font-dejavu" ,font-dejavu)     ;tests depend on it
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list font-dejavu ;tests depend on it
+           python-pytest-cov python-pytest-runner))
     (home-page "https://weasyprint.org/")
     (synopsis "Document factory for creating PDF files from HTML")
     (description "WeasyPrint helps web developers to create PDF documents.  It
diff --git a/gnu/packages/pem.scm b/gnu/packages/pem.scm
index df0ee54c46..2fba63336f 100644
--- a/gnu/packages/pem.scm
+++ b/gnu/packages/pem.scm
@@ -36,7 +36,7 @@
        (base32
         "03iqcki1lakkck1akdyvljjapgqda3l0rh38id7jhrac9kcxqgg2"))))
     (build-system gnu-build-system)
-    (inputs `(("perl" ,perl)))
+    (inputs (list perl))
     (home-page "https://www.gnu.org/software/pem/")
     (synopsis "Personal expenses manager")
     (description
diff --git a/gnu/packages/pep.scm b/gnu/packages/pep.scm
index aa0d786d87..d0dfb0a685 100644
--- a/gnu/packages/pep.scm
+++ b/gnu/packages/pep.scm
@@ -54,7 +54,7 @@
         (base32 "0fm1x1fv4lwcpbn59s55idzf7x173n59xpz8rlrxalmi6gvsjijr"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-lxml" ,python-lxml)))
+     (list python-lxml))
     (home-page "https://fdik.org/yml/")
     (synopsis "Use a Domain Specific Language for XML without defining
 a grammar")
@@ -127,9 +127,8 @@ OPENPGP=SEQUOIA
            (lambda _
              (invoke "make" "-C" "db" "install"))))))
     (native-inputs
-     `(("asn1c" ,asn1c) ; >= 0.9.27
-       ("pkg-config" ,pkg-config)
-       ("yml2" ,yml2)))
+     (list asn1c ; >= 0.9.27
+           pkg-config yml2))
     (inputs
      `(("libetpan" ,fdik-libetpan)
        ("libiconv" ,libiconv)
@@ -181,7 +180,7 @@ ENGINE_INC_PATH=~a/include
 " out engine engine))))
              #t)))))
     (inputs
-     `(("pep-engine" ,pep-engine)))
+     (list pep-engine))
     (home-page "https://pep.foundation/")
     (synopsis "Library for building p≡p adapters")
     (description "This C++ library provides common structures used in p≡p
@@ -238,14 +237,10 @@ ENGINE_INC_PATH=~a/include
                (("\"wheel *>=.*\"") ""))
              #t)))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-forked" ,python-pytest-forked)))
+     (list python-pytest python-pytest-forked))
     (inputs
-     `(("boost-python" ,boost-with-python3)
-       ("libpepadapter" ,libpepadapter)
-       ("pep-engine" ,pep-engine)
-       ("python-setuptools-scm" ,python-setuptools-scm/next)
-       ("util-linux" ,util-linux "lib"))) ;; uuid.h
+     (list boost libpepadapter pep-engine python-setuptools-scm
+           `(,util-linux "lib"))) ;; uuid.h
     (home-page "https://pep.foundation/")
     (synopsis "Python adapter for p≡p (pretty Easy Privacy)")
     (description "The p≡p Python adapter is an adaptor interface to the p≡p
@@ -329,15 +324,11 @@ JAVA_HOME=~a
                (copy-recursively "doc/doxygen/java/html" javaout)
                #t))))))
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("graphviz" ,graphviz)
-       ("openjdk" ,openjdk9 "jdk")
-       ("which" ,which)
-       ("yml2" ,yml2)))
+     (list doxygen graphviz
+           `(,openjdk9 "jdk") which yml2))
     (inputs
-     `(("libpepadapter" ,libpepadapter)
-       ("pep-engine" ,pep-engine)
-       ("util-linux" ,util-linux "lib"))) ;; uuid.h
+     (list libpepadapter pep-engine
+           `(,util-linux "lib"))) ;; uuid.h
     (home-page "https://pep.foundation/")
     (synopsis "Java adapter for p≡p (pretty Easy Privacy)")
     (description "The p≡p JNI adapter is a Java adapter interface to the p≡p
diff --git a/gnu/packages/perl-check.scm b/gnu/packages/perl-check.scm
index 87f233a3aa..bde3079bef 100644
--- a/gnu/packages/perl-check.scm
+++ b/gnu/packages/perl-check.scm
@@ -87,9 +87,7 @@ lexically, just dynamically.")
          (add-after 'unpack 'set-env
            (lambda _ (setenv "PERL_USE_UNSAFE_INC" "1") #t)))))
     (propagated-inputs
-     `(("perl-importer" ,perl-importer)
-       ("perl-term-table" ,perl-term-table)
-       ("perl-sub-info" ,perl-sub-info)))
+     (list perl-importer perl-term-table perl-sub-info))
     (home-page "https://metacpan.org/pod/Test2-Suite")
     (synopsis "Full set of tools for Test2::Suite")
     (description "This package provides a rich set of tools, plugins, bundles,
@@ -110,9 +108,9 @@ etc built upon the Test2 testing library.")
           "002qk6qsm0l6r2kaxywvc38w0yf0mlavgywq8li076pn6kcw3242"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-ipc-run3" ,perl-ipc-run3)))
+     (list perl-ipc-run3))
     (propagated-inputs
-     `(("perl-test2-suite" ,perl-test2-suite)))
+     (list perl-test2-suite))
     (home-page "https://metacpan.org/release/Test2-Plugin-NoWarnings")
     (synopsis "Fail if tests warn")
     (description "Loading this plugin causes your tests to fail if there any
@@ -134,11 +132,9 @@ warning content is outputted via diag.")
          "056hibgg3i2b89mwr76vyxi6ayb3hqjqcwicvn3s5lximsma3517"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-algorithm-diff" ,perl-algorithm-diff)
-       ("perl-text-diff" ,perl-text-diff)))
+     (list perl-algorithm-diff perl-text-diff))
     (propagated-inputs
-     `(("perl-spiffy" ,perl-spiffy)
-       ("perl-test-deep" ,perl-test-deep)))
+     (list perl-spiffy perl-test-deep))
     (home-page "https://metacpan.org/release/Test-Base")
     (synopsis "Data-driven testing framework for Perl")
     (description "Test::Base gives a way to trivially write your own test
@@ -162,7 +158,7 @@ patterns, so that you can write tests with a minimum of code.")
          "1vjinlixxdx6gfcw8y1dw2rla8bfhi8nmgcqr3nffc7kqskcrz36"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-cpan-meta-check" ,perl-cpan-meta-check)))
+     (list perl-cpan-meta-check))
     (home-page "https://metacpan.org/release/Test-CheckDeps")
     (synopsis "Check for presence of dependencies")
     (description
@@ -186,11 +182,9 @@ installed properly.")
          "0l0kk5jvxjkic2jkf1r7v41irb344aasnzr3f5ygjgxgiknm9489"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-exception" ,perl-test-exception)))
+     (list perl-test-exception))
     (inputs
-     `(("perl-module-runtime" ,perl-module-runtime)
-       ("perl-mro-compat" ,perl-mro-compat)
-       ("perl-try-tiny" ,perl-try-tiny)))
+     (list perl-module-runtime perl-mro-compat perl-try-tiny))
     (home-page "https://metacpan.org/release/Test-Class")
     (synopsis "Easily create test classes in an xUnit/JUnit style")
     (description "@code{Test::Class} provides a simple way of creating classes
@@ -217,13 +211,10 @@ Built using @code{Test::Builder}, it was designed to work with other
          "1zvx9hil0mg0pnb8xfa4m0xgjpvh8s5gnbyprq3xwpdsdgcdwk33"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (inputs
-     `(("perl-test-class" ,perl-test-class)
-       ("perl-test-most" ,perl-test-most)
-       ("perl-module-runtime" ,perl-module-runtime)
-       ("perl-try-tiny" ,perl-try-tiny)
-       ("perl-mro-compat" ,perl-mro-compat)))
+     (list perl-test-class perl-test-most perl-module-runtime
+           perl-try-tiny perl-mro-compat))
     (home-page "https://metacpan.org/release/Test-Class-Most")
     (synopsis "Test classes the easy way")
     (description "@code{Test::Class::Most} provides some more convenience when
@@ -243,18 +234,15 @@ using @code{Test::Class}.")
         (base32 "0yijspncqgmbkkxrh66xx1pliajar05yqhzq6m4nb6p8x1lmb39k"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-file-pushd" ,perl-file-pushd)
-       ("perl-test-requires" ,perl-test-requires)
-       ("perl-test-deep" ,perl-test-deep)
-       ("perl-test-warnings" ,perl-test-warnings)
-       ("perl-test-needs" ,perl-test-needs)))
+     (list perl-file-pushd perl-test-requires perl-test-deep
+           perl-test-warnings perl-test-needs))
     (propagated-inputs
-     `(("perl-namespace-clean" ,perl-namespace-clean)
-       ("perl-package-stash" ,perl-package-stash)
-       ("perl-sub-identify" ,perl-sub-identify)
-       ("perl-sub-exporter" ,perl-sub-exporter)
-       ("perl-file-find-rule" ,perl-file-find-rule)
-       ("perl-file-find-rule-perl" ,perl-file-find-rule-perl)))
+     (list perl-namespace-clean
+           perl-package-stash
+           perl-sub-identify
+           perl-sub-exporter
+           perl-file-find-rule
+           perl-file-find-rule-perl))
     (home-page "https://metacpan.org/release/Test-CleanNamespaces")
     (synopsis "Check for uncleaned imports")
     (description "This module lets you check your module's namespaces for
@@ -277,7 +265,7 @@ called as methods, which usually isn't want you want.")
                 "0cwm3c4d49mdrbm6vgh78b3x8mk730l0zg8i7xb9z8bkx9pzr8r8"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (home-page "https://github.com/danboo/perl-test-command")
     (synopsis "Test routines for external commands")
     (description
@@ -301,9 +289,7 @@ output and standard error of external commands.")
          "1dcdbbdwdyhpldkhjzc9rvzlmb5jbil6fwh2x07nsfdwysf4ynzm"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-cpan-meta-json" ,perl-test-cpan-meta-json)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+     (list perl-test-cpan-meta-json perl-test-pod perl-test-pod-coverage))
     (home-page
      "https://metacpan.org/release/Test-CPAN-Meta")
     (synopsis "Validate your CPAN META.yml files")
@@ -328,10 +314,9 @@ specification.")
          "1jg9ka50ixwq083wd4k12rhdjq87w0ihb34gd8jjn7gvvyd51b37"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+     (list perl-test-pod perl-test-pod-coverage))
     (inputs
-     `(("perl-json" ,perl-json)))
+     (list perl-json))
     (home-page
      "https://metacpan.org/release/Test-CPAN-Meta-JSON")
     (synopsis "Validate your CPAN META.json files")
@@ -352,7 +337,7 @@ specification.")
                (base32
                 "1kdy06r0yg7zwarqglc9163vbfb0sfc4s6ld4pw5q7i9f7mghzi0"))))
     (build-system perl-build-system)
-    (inputs `(("perl-test-nowarnings" ,perl-test-nowarnings)))
+    (inputs (list perl-test-nowarnings))
     (synopsis "Flexible deep comparison for the Test::Builder framework")
     (description
      "Test::Deep compares two structures by going through each level, ensuring
@@ -375,10 +360,9 @@ structures without getting caught in an infinite loop.")
         (base32 "1nkqr3m4lbzw7fkkzah42aiqlhxapamk6kw7hj90cjwkifsbp3f8"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (propagated-inputs
-     `(("perl-text-diff" ,perl-text-diff)
-       ("perl-capture-tiny" ,perl-capture-tiny)))
+     (list perl-text-diff perl-capture-tiny))
     (home-page "https://metacpan.org/release/Test-Differences")
     (synopsis "Test strings and data structures and show differences")
     (description "This module exports three test functions and four diff-style
@@ -401,13 +385,11 @@ functions.")
          "1hpafgr93jjl6s8spskhdxhgich4cccmaiq99mla5diyj4iv6ckk"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-pod-coverage" ,perl-pod-coverage)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+     (list perl-pod-coverage perl-test-pod perl-test-pod-coverage))
     (home-page "https://metacpan.org/release/Test-Dir")
     (synopsis "Utilities for testing directory attributes")
     (description
-     "This modules provides a collection of test utilities for directory
+     "This module provides a collection of test utilities for directory
 attributes.")
     (license perl-license)))
 
@@ -424,7 +406,7 @@ attributes.")
         (base32
          "1ncql08cizhicbxwd753b4czns8nlcnlw0zfjcfrbdd41x4j6hqr"))))
     (build-system perl-build-system)
-    (native-inputs `(("perl-test-exception" ,perl-test-exception)))
+    (native-inputs (list perl-test-exception))
     (home-page "https://metacpan.org/release/Test-Directory")
     (synopsis "Perl extension for maintaining test directories")
     (description "Testing code can involve making sure that files are created
@@ -449,9 +431,9 @@ files, as well as to verify that there are no missing or unknown files.")
         (base32 "1ifpff5simjslabwy7ac6kdylv4c0b5b39fgpwf9ha16yh6w49ix"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (propagated-inputs
-     `(("perl-module-manifest" ,perl-module-manifest)))
+     (list perl-module-manifest))
     (home-page "https://github.com/jawnsy/Test-DistManifest")
     (synopsis "Author test that validates a package @file{MANIFEST}")
     (description
@@ -474,12 +456,10 @@ files, as well as to verify that there are no missing or unknown files.")
         "0s1bj459qaw2x1fckklv9irpf3mr8gp2cm9vlyrb5dyanrzx1v2h"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (propagated-inputs
-     `(("perl-file-find-rule" ,perl-file-find-rule)
-       ("perl-pod-coverage" ,perl-pod-coverage)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+     (list perl-file-find-rule perl-pod-coverage perl-test-pod
+           perl-test-pod-coverage))
     (home-page "https://metacpan.org/release/Test-Distribution")
     (synopsis "Perform tests on all modules of a distribution")
     (description "When used in a test script @code{Test::Distribution}
@@ -531,9 +511,9 @@ and/or windows line endings in your perl code.")
          "0cxm7s4bg0xpxa6l6996a6iq3brr4j7p4hssnkc6dxv4fzq16sqm"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (propagated-inputs
-     `(("perl-sub-uplevel" ,perl-sub-uplevel)))
+     (list perl-sub-uplevel))
     (home-page "https://metacpan.org/release/Test-Exception")
     (synopsis "Test exception based code")
     (description "This module provides a few convenience methods for testing
@@ -556,7 +536,7 @@ Test::More and friends.")
          "0vx9chcp5x8m0chq574p9fnfckh5gl94j7904rh9v17n568fyd6s"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-capture-tiny" ,perl-capture-tiny)))
+     (list perl-capture-tiny))
     (home-page "https://metacpan.org/release/Test-FailWarnings")
     (synopsis "Add test failures if warnings are caught")
     (description
@@ -576,7 +556,7 @@ Test::More and friends.")
         (base32
          "1c6bs68mss4q7cyapkv2c0jn66i21050p0faxf3s3417gdffzp5w"))))
     (build-system perl-build-system)
-    (propagated-inputs `(("perl-try-tiny" ,perl-try-tiny)))
+    (propagated-inputs (list perl-try-tiny))
     (home-page "https://metacpan.org/release/Test-Fatal")
     (synopsis "Simple helpers for testing code with exceptions")
     (description "Test::Fatal is an alternative to the popular
@@ -599,7 +579,7 @@ testing exception-throwing code with about the same amount of typing.")
         (base32 "0195dnvwxxphwbglw6cjid3j7kq15xg46lr7r4468idvadyal6c7"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-utf8" ,perl-test-utf8)))
+     (list perl-test-utf8))
     (home-page "https://metacpan.org/release/Test-File")
     (synopsis "Utilities for testing file attributes")
     (description
@@ -623,11 +603,9 @@ attributes.")
          "0g8zgfyw84181snw7ghahnl9r4lrmlfj7zwi76sv8d0bj7xssvyd"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (propagated-inputs
-     `(("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)
-       ("perl-text-diff" ,perl-text-diff)))
+     (list perl-test-pod perl-test-pod-coverage perl-text-diff))
     (home-page "https://metacpan.org/release/Test-File-Contents")
     (synopsis "Test routines for examining the contents of files")
     (description
@@ -649,12 +627,12 @@ files.")
           "1bbs6cx69wcinq77gif4i4pmrj8a7lwb92sgvvxzrwmjnk5lfdmk"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-class-tiny" ,perl-class-tiny)
-       ("perl-file-copy-recursive" ,perl-file-copy-recursive)
-       ("perl-file-sharedir" ,perl-file-sharedir)
-       ("perl-path-tiny" ,perl-path-tiny)
-       ("perl-scope-guard" ,perl-scope-guard)
-       ("perl-test-fatal" ,perl-test-fatal)))
+     (list perl-class-tiny
+           perl-file-copy-recursive
+           perl-file-sharedir
+           perl-path-tiny
+           perl-scope-guard
+           perl-test-fatal))
     (home-page "https://github.com/kentnl/Test-File-ShareDir")
     (synopsis "Dist oriented ShareDir tester")
     (description "This module creates a Fake ShareDir for your modules
@@ -676,7 +654,7 @@ for testing.")
          "1gpw4mjw68gnby8s4cifvbz6g2923xsc189jkw9d27i8qv20qiba"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-path-tiny" ,perl-path-tiny)))
+     (list perl-path-tiny))
     (home-page "https://metacpan.org/release/Test-Filename")
     (synopsis "Portable filename comparison")
     (description "Test::Filename provides functions to convert all path
@@ -699,8 +677,7 @@ separators automatically.")
          "1zn33yigznq7i1jr4yjr4lxvc6bn7znkbqdzj7slhc146pqapkln"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-algorithm-diff" ,perl-algorithm-diff)
-       ("perl-text-diff" ,perl-text-diff)))
+     (list perl-algorithm-diff perl-text-diff))
     (home-page "https://metacpan.org/release/Test-Files")
     (synopsis "Ease software testing with files and directories")
     (description "This library provides functions to enable testing of files
@@ -791,8 +768,7 @@ you test against long strings.")
                 "1n9jscnni24sbp4v5gjlcy3iknfwvmy0731xwvk1c3jq3kbslym4"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+     (list perl-test-pod perl-test-pod-coverage))
     (home-page "https://metacpan.org/release/Test-Manifest")
     (synopsis "Interact with a t/test_manifest file")
     (description "@code{Test::Manifest} overrides the default test file order.  Instead of
@@ -817,9 +793,9 @@ It constructs the right value for the build system to do the right thing.")
          "00ijmgx1r3cxrcs1qa9rb2s4gbm3nsawd90drda89kb4r7yxslwx"))))
     (build-system perl-build-system)
     (inputs
-     `(("perl-padwalker" ,perl-padwalker)))
+     (list perl-padwalker))
     (propagated-inputs
-     `(("perl-devel-cycle" ,perl-devel-cycle)))
+     (list perl-devel-cycle))
     (home-page
      "https://metacpan.org/release/Test-Memory-Cycle")
     (synopsis
@@ -840,23 +816,21 @@ memory_cycle_ok( $object );
 (define-public perl-test-mockmodule
   (package
     (name "perl-test-mockmodule")
-    (version "0.171.0")
+    (version "0.177.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://cpan/authors/id/G/GF/GFRANKS/"
                            "Test-MockModule-v" version ".tar.gz"))
        (sha256
-        (base32 "1arqgb1773zym5dqlwm6kz48bfrccjhb5bjfsif0vkalwq2gvm7b"))))
+        (base32 "0i8hiw9r2kak8kgp2qabr0cnnpp1yg1sddm781nhfxpavi4pmnhv"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ;; For tests.
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)
-       ("perl-test-warnings" ,perl-test-warnings)))
+     (list perl-module-build
+           ;; For tests.
+           perl-test-pod perl-test-pod-coverage perl-test-warnings))
     (propagated-inputs
-     `(("perl-super" ,perl-super)))
+     (list perl-super))
     (home-page "https://metacpan.org/release/Test-MockModule")
     (synopsis "Override subroutines in a module for unit testing")
     (description
@@ -881,14 +855,10 @@ you @code{unmock()} the subroutine.")
         (base32 "160r36j727hw6syazh6sfq862f95dp1zcga0nil7cjlry77lqsn7"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-cgi" ,perl-cgi)
-       ("perl-test-exception" ,perl-test-exception)
-       ("perl-test-warn" ,perl-test-warn)))
+     (list perl-cgi perl-test-exception perl-test-warn))
     (propagated-inputs
-     `(("perl-test-exception" ,perl-test-exception)
-       ("perl-test-warn" ,perl-test-warn)
-       ("perl-universal-can" ,perl-universal-can)
-       ("perl-universal-isa" ,perl-universal-isa)))
+     (list perl-test-exception perl-test-warn perl-universal-can
+           perl-universal-isa))
     (home-page "https://metacpan.org/release/Test-MockObject")
     (synopsis "Emulate troublesome interfaces in Perl")
     (description "Test::MockObject allows you to create objects that conform
@@ -908,7 +878,7 @@ the behavior, just the input and the output.")
        (sha256
         (base32 "1y820qsq7yf7r6smy5c6f0mpf2cis2q24vwmpim1svv0n8cf2qrk"))))
     (propagated-inputs
-     `(("perl-time-piece" ,perl-time-piece)))
+     (list perl-time-piece))
     (build-system perl-build-system)
     (home-page "https://metacpan.org/release/Test-MockTime")
     (synopsis "Replaces actual time with simulated time")
@@ -956,11 +926,8 @@ easy use flagged strings without warnings like \"Wide character in print
          "0zv5dyzq55r28plffibcr7wd00abap0h2zh4s4p8snaiszsad5wq"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-test-differences" ,perl-test-differences)
-       ("perl-test-warn" ,perl-test-warn)
-       ("perl-exception-class" ,perl-exception-class)
-       ("perl-test-deep" ,perl-test-deep)
-       ("perl-test-exception" ,perl-test-exception)))
+     (list perl-test-differences perl-test-warn perl-exception-class
+           perl-test-deep perl-test-exception))
     (home-page "https://metacpan.org/release/Test-Most")
     (synopsis "Most commonly needed test functions and features")
     (description "This module provides the most commonly used testing
@@ -971,7 +938,7 @@ bit more fine-grained control over test suites.")
 (define-public perl-test-needs
   (package
     (name "perl-test-needs")
-    (version "0.002005")
+    (version "0.002009")
     (source
      (origin
        (method url-fetch)
@@ -981,7 +948,7 @@ bit more fine-grained control over test suites.")
              ".tar.gz"))
        (sha256
         (base32
-         "16gkgpmr9hvkz382iaqd3500269lk2d44fqaw3dsrvc66nc36kss"))))
+         "1hsagkxw0b0xf9qk4i4c74dkjskrk23jcsxhb3graqfi78cj272p"))))
     (build-system perl-build-system)
     (home-page
      "https://metacpan.org/release/Test-Needs")
@@ -1034,7 +1001,7 @@ code.")
     (build-system perl-build-system)
     (synopsis "Ensure no warnings are produced while testing")
     (description
-     "This modules causes any warnings during testing to be captured and
+     "This module causes any warnings during testing to be captured and
 stored.  It automatically adds an extra test that will run when your script
 ends to check that there were no warnings.  If there were any warnings, the
 test will fail and output diagnostics of where, when and what the warning was,
@@ -1106,8 +1073,7 @@ classes in its inheritance tree in one single call.")
                 "0vjm62c7g3xxs3h4lba55dnpr4pg71yrhkdg5b9glxdh80klia7n"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-capture-tiny" ,perl-capture-tiny)
-       ("perl-sub-exporter" ,perl-sub-exporter)))
+     (list perl-capture-tiny perl-sub-exporter))
     (synopsis "Utilities to test STDOUT and STDERR messages")
     (description
      "Test::Output provides a simple interface for testing output sent to
@@ -1129,7 +1095,7 @@ as flexible as possible to the tester.")
         (base32
          "1z75x1pxwp8ajwq9iazlg2c3wd7rdlim08yclpdg32qnc36dpa30"))))
     (build-system perl-build-system)
-    (native-inputs `(("perl-module-build" ,perl-module-build)))
+    (native-inputs (list perl-module-build))
     (home-page "https://metacpan.org/release/Test-Pod")
     (synopsis "Check for POD errors in files")
     (description "Check POD files for errors or warnings in a test file, using
@@ -1150,7 +1116,7 @@ Pod::Simple to do the heavy lifting.")
          "1m203mhgfilz7iqc8mxaw4lw02fz391mni3n25sfx7nryylwrja8"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-pod-coverage" ,perl-pod-coverage)))
+     (list perl-pod-coverage))
     (home-page "https://metacpan.org/release/Test-Pod-Coverage")
     (synopsis "Check for pod coverage")
     (description "This module adds a test to your Perl distribution which
@@ -1170,9 +1136,9 @@ checks for pod coverage of all appropriate files.")
         (base32 "05hs80gljkd6mhb8zvilyk3pjqxp5samgnymam5v9h9d94rb9r08"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-simple" ,perl-test-simple)))
+     (list perl-test-simple))
     (propagated-inputs
-     `(("perl-pathtools" ,perl-pathtools)))
+     (list perl-pathtools))
     (home-page "https://metacpan.org/dist/Test-Portability-Files")
     (synopsis "Check file names portability")
     (description "Test::Portability::Files module is used to check the
@@ -1240,14 +1206,14 @@ reported, and the tests skipped.")
          "1mnym49j1lj7gzylma5b6nr4vp75rmgz2v71904v01xmxhy9l4i1"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-capture-tiny" ,perl-capture-tiny)))
+     (list perl-capture-tiny))
     (propagated-inputs
-     `(("perl-indirect" ,perl-indirect)
-       ("perl-moo" ,perl-moo)
-       ("perl-moox-types-mooselike" ,perl-moox-types-mooselike)
-       ("perl-multidimensional" ,perl-multidimensional)
-       ("perl-strictures" ,perl-strictures)
-       ("perl-sub-install" ,perl-sub-install)))
+     (list perl-indirect
+           perl-moo
+           perl-moox-types-mooselike
+           perl-multidimensional
+           perl-strictures
+           perl-sub-install))
     (home-page "https://metacpan.org/release/Test-Roo")
     (synopsis "Composable, reusable tests with roles and Moo")
     (description "Test::Roo provides composable, reusable tests with roles.")
@@ -1268,11 +1234,9 @@ reported, and the tests skipped.")
         (base32 "1vm5iw5sy0mhjjypaaviil9qgqixmkaghdbjbcyb4lf2mm6d24v9"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (propagated-inputs
-     `(("perl-path-tiny" ,perl-path-tiny)
-       ("perl-test-trap" ,perl-test-trap)
-       ("valgrind" ,valgrind)))
+     (list perl-path-tiny perl-test-trap valgrind))
     (home-page "https://metacpan.org/release/Test-RunValgrind")
     (synopsis "Tests that an external program is valgrind-clean")
     (description "Test::RunValgind checks weather Valgrind does not detect
@@ -1292,8 +1256,7 @@ errors (such as memory leaks) in an arbitrary binary executable.")
                 "1msavbi6przkxq3npm90nv925v58iym9jrk677wn46x19whwzwzm"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-capture-tiny" ,perl-capture-tiny)
-       ("perl-probe-perl" ,perl-probe-perl)))
+     (list perl-capture-tiny perl-probe-perl))
     (synopsis "Basic cross-platform tests for scripts")
     (description
      "The intent of the Test::Script module is to provide a series of basic
@@ -1315,7 +1278,7 @@ bin as is also commonly used) paths of your Perl distribution.")
         (base32 "17y52j20k1bs9dgf4n6rhh9dn4cfxxbnfn2cfs7pb00fc5jyhci9"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-requires" ,perl-test-requires)))
+     (list perl-test-requires))
     (home-page "https://metacpan.org/release/Test-SharedFork")
     (synopsis "Fork test in Perl")
     (description "Test::SharedFork is a utility module for Test::Builder.  It
@@ -1353,7 +1316,7 @@ makes fork(2) safe to use in test cases.")
         (base32 "1hmnv9nkdzyrr6yis0dnkf4lk0hwld3zapiyq7mizrq5barykhfb"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-hook-lexwrap" ,perl-hook-lexwrap)))
+     (list perl-hook-lexwrap))
     (home-page "https://metacpan.org/release/Test-SubCalls")
     (synopsis "Track the number of times subs are called")
     (description
@@ -1427,10 +1390,7 @@ a minimum of effort.")
          "1j5rsb4km9rzcbd1ljavj8vm42bmilji40v2jj2k87l1ykrxj59z"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-file-finder" ,perl-file-finder)
-       ("perl-file-slurp" ,perl-file-slurp)
-       ("perltidy" ,perltidy)
-       ("perl-text-diff" ,perl-text-diff)))
+     (list perl-file-finder perl-file-slurp perltidy perl-text-diff))
     (home-page "https://metacpan.org/release/Test-PerlTidy")
     (synopsis "Check that all your Perl files are tidy")
     (description
@@ -1451,10 +1411,9 @@ cause a test fail unless it is exactly as @code{perltidy} would like it to be.")
         (base32 "1qjs2080kcc66s4d7499br5lw2qmhr9gxky4xsl6vjdn6dpna10b"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-simple" ,perl-test-simple)))
+     (list perl-module-build perl-test-simple))
     (propagated-inputs
-     `(("perl-data-dump" ,perl-data-dump)))
+     (list perl-data-dump))
     (home-page "https://metacpan.org/release/Test-Trap")
     (synopsis "Trap exit codes, exceptions, output, and so on")
     (description "This module is primarily (but not exclusively) for use in
@@ -1476,7 +1435,7 @@ from boxed blocks of test code.")
         (base32 "1mwbdgbbzm54v7wdw3l80bk73lr4z9i8274zlhjhp0s0b6fg10nz"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)))
+     (list perl-module-install))
     (home-page "https://metacpan.org/release/Test-utf8")
     (synopsis "UTF-8 testing in Perl")
     (description "This module is a collection of tests useful for dealing with
@@ -1501,9 +1460,9 @@ will check that string has a given set of characteristics.")
          "1q1qradaf7r2rb3jhpv01wl8z3bxymkfqrl9gwdhxwx5jwldvqcw"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-exception" ,perl-test-exception)))
+     (list perl-test-exception))
     (propagated-inputs
-     `(("perl-file-find-rule-perl" ,perl-file-find-rule-perl)))
+     (list perl-file-find-rule-perl))
     (home-page "https://metacpan.org/release/Test-Version")
     (synopsis "Check versions in modules")
     (description
@@ -1525,7 +1484,7 @@ defined, and that the version is valid.")
          "1nkc7jzxff0w4x9axbpsgxrksqdjnf70rb74q39zikkrsd3a7g7c"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-sub-uplevel" ,perl-sub-uplevel)))
+     (list perl-sub-uplevel))
     (home-page "https://metacpan.org/release/Test-Warn")
     (synopsis "Perl extension to test methods for warnings")
     (description "This module provides a few convenience methods for testing
@@ -1588,13 +1547,10 @@ installed.")
         (base32 "11v4j3607bydxsqy2ylx9w6qr3qxcalfx3mdc4q4ccqmxsyw4jb3"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-most" ,perl-test-most)
-       ("perl-test-directory" ,perl-test-directory)))
+     (list perl-test-most perl-test-directory))
     (propagated-inputs
-     `(("perl-data-tumbler" ,perl-data-tumbler)
-       ("perl-file-homedir" ,perl-file-homedir)
-       ("perl-module-pluggable" ,perl-module-pluggable)
-       ("perl-module-runtime" ,perl-module-runtime)))
+     (list perl-data-tumbler perl-file-homedir perl-module-pluggable
+           perl-module-runtime))
     (home-page "https://metacpan.org/release/Test-WriteVariants")
     (synopsis "Dynamic generation of tests")
     (description "The Test::WriteVariants module provides for the dynamic
@@ -1614,7 +1570,7 @@ generation of tests in nested combinations of contexts.")
         (base32 "0pwrrnwi1qaiy3c5522vy0kzncxc9g02r4b056wqqaa69w1hsc0z"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-test-base" ,perl-test-base)))
+     (list perl-test-base))
     (home-page "https://metacpan.org/release/Test-YAML")
     (synopsis "Testing module for YAML implementations")
     (description "Test::YAML is a subclass of Test::Base with YAML specific
@@ -1637,13 +1593,9 @@ support.")
           "04aszaw4n3sra7n7sq2cj4wjjvfghia9zqi47aj00ry0vqx2d7gh"))))
   (build-system perl-build-system)
   (native-inputs
-    `(("perl-module-build" ,perl-module-build)
-      ("perl-file-find-object" ,perl-file-find-object)
-      ("perl-class-xsaccessor" ,perl-class-xsaccessor)))
+    (list perl-module-build perl-file-find-object perl-class-xsaccessor))
   (inputs
-    `(("perl-file-find-object-rule" ,perl-file-find-object-rule)
-      ("perl-text-glob" ,perl-text-glob)
-      ("perl-number-compare" ,perl-number-compare)))
+    (list perl-file-find-object-rule perl-text-glob perl-number-compare))
   (home-page
     "https://metacpan.org/release/Test-TrailingSpace")
   (synopsis
diff --git a/gnu/packages/perl-compression.scm b/gnu/packages/perl-compression.scm
index 48e3209ce1..54e5185169 100644
--- a/gnu/packages/perl-compression.scm
+++ b/gnu/packages/perl-compression.scm
@@ -57,7 +57,7 @@
                (setenv "BZLIB_LIB" (string-append bzip2 "/lib"))
                #t))))))
     (inputs
-     `(("bzip2" ,bzip2)))
+     (list bzip2))
     (home-page "https://metacpan.org/release/Compress-Bzip2")
     (synopsis "Interface to Bzip2 compression library")
     (description
@@ -98,7 +98,7 @@ compression library.")
         (base32 "04jrqvqsa2c655idw7skv5rhb9vx9997h4n9if5p99srq4hblk6d"))))
     (build-system perl-build-system)
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (add-before
@@ -134,8 +134,7 @@ compression library.")
     (build-system perl-build-system)
     (propagated-inputs
      ;; These two packages should be updated to this one's version first.
-     `(("perl-compress-raw-zlib" ,perl-compress-raw-zlib)
-       ("perl-compress-raw-bzip2" ,perl-compress-raw-bzip2)))
+     (list perl-compress-raw-zlib perl-compress-raw-bzip2))
     (home-page "https://metacpan.org/release/IO-Compress")
     (synopsis "IO Interface to compressed files/buffers")
     (description "IO-Compress provides a Perl interface to allow reading and
@@ -160,7 +159,7 @@ writing of compressed data created with the zlib and bzip2 libraries.")
        ;; MakeMaker doesn't honor LIBRARY_PATH.
        (let ((zlib (assoc-ref %build-inputs "zlib")))
          (list (format #f "LIBS=-L~a/lib/ -lz" zlib)))))
-    (inputs `(("zlib" ,zlib)))
+    (inputs (list zlib))
     (home-page "https://metacpan.org/pod/PerlIO::gzip")
     (synopsis "Perl extension to provide a PerlIO layer to gzip/gunzip")
     (description "PerlIO::gzip provides a PerlIO layer that manipulates files
@@ -202,7 +201,7 @@ type by using either Perl modules, or command-line tools on your system.")
     (build-system perl-build-system)
     (native-inputs
      ;; For tests.
-     `(("perl-test-mockmodule" ,perl-test-mockmodule)))
+     (list perl-test-mockmodule))
     (synopsis  "Provides an interface to Zip archive files")
     (description "The @code{Archive::Zip} module allows a Perl program to
 create, manipulate, read, and write Zip archive files.")
diff --git a/gnu/packages/perl-maths.scm b/gnu/packages/perl-maths.scm
index 4f70c85fcf..b317e3c1cf 100644
--- a/gnu/packages/perl-maths.scm
+++ b/gnu/packages/perl-maths.scm
@@ -35,7 +35,12 @@
                     version ".tar.gz"))
               (sha256
                (base32
-                "18c3xg53d1vv7hlj43601jj7ks119fm6ndpwpv94irr2905806jn"))))
+                "18c3xg53d1vv7hlj43601jj7ks119fm6ndpwpv94irr2905806jn"))
+              ;; For reproducibility
+              (modules '((guix build utils)))
+              (snippet
+               '(substitute* "libmd/Makefile.PL"
+                  (("readdir DIR") "sort readdir DIR")))))
     (build-system perl-build-system)
     (home-page "https://metacpan.org/release/Math-Cephes")
     (synopsis "Perl interface to the Cephes math library")
@@ -57,8 +62,7 @@
                 "1cml5wqd99hm398gl8f147ccsck9v179l7a6vqjj4kfkdnja37sg"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-most" ,perl-test-most)))
+     (list perl-module-build perl-test-most))
     (home-page "https://metacpan.org/release/Math-MatrixReal")
     (synopsis "Manipulate NxN matrices of real numbers")
     (description "This package provides the @code{Math::MatrixReal} module.
diff --git a/gnu/packages/perl-web.scm b/gnu/packages/perl-web.scm
index 498d5bcc10..c3a3e17188 100644
--- a/gnu/packages/perl-web.scm
+++ b/gnu/packages/perl-web.scm
@@ -67,10 +67,9 @@ endeavor to implement this idea using modern technologies.")
          "0n56xxlw7c39pfar0dxckr9mbmp6yrzk53ic0cb24raiykm9v6f4"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (propagated-inputs
-     `(("perl-uri" ,perl-uri)
-       ("perl-uri-nested" ,perl-uri-nested)))
+     (list perl-uri perl-uri-nested))
     (home-page "https://metacpan.org/release/URI-db")
     (synopsis "Handle database URIs")
     (description
@@ -92,7 +91,7 @@ class to handle these.")
          "0gj1aj18k43kmzc3y1zhj5giinf8rksacf757r475xfna0fqxjdj"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-needs" ,perl-test-needs)))
+     (list perl-test-needs))
     (home-page "https://github.com/libwww-perl/URI")
     (synopsis "Percent-encode and percent-decode unsafe characters")
     (description "This module provides functions to percent-encode and
@@ -117,9 +116,9 @@ which predates the formalization of the terms by the RFC by several years.")
          "1bzg6f11m8wfnmycflvp858rs99xknsx8hkip0xcdfjzlqwi75z1"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (propagated-inputs
-     `(("perl-uri" ,perl-uri)))
+     (list perl-uri))
     (home-page "https://metacpan.org/release/URI-Nested")
     (synopsis "Nested URIs")
     (description
diff --git a/gnu/packages/perl.scm b/gnu/packages/perl.scm
index 5d4843d39a..d2c9d0d24e 100644
--- a/gnu/packages/perl.scm
+++ b/gnu/packages/perl.scm
@@ -13,7 +13,7 @@
 ;;; Copyright © 2016 Ben Woodcroft <donttrustben@gmail.com>
 ;;; Copyright © 2016, 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2017 Raoul J.P. Bonnal <ilpuccio.febo@gmail.com>
-;;; Copyright © 2017, 2018 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2017, 2018, 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2017 Adriano Peluso <catonano@gmail.com>
 ;;; Copyright © 2017, 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
@@ -31,6 +31,7 @@
 ;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
 ;;; Copyright © 2021 Raghav Gururajan <rg@raghavgururajan.name>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -51,6 +52,7 @@
   #:use-module (srfi srfi-1)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (gnu packages)
+  #:use-module (guix gexp)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
@@ -75,11 +77,13 @@
   #:use-module (gnu packages perl-maths)
   #:use-module (gnu packages perl-web)
   #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages python)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages sdl)
   #:use-module (gnu packages textutils)
   #:use-module (gnu packages video)
   #:use-module (gnu packages web)
+  #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg))
 
 ;;;
@@ -91,18 +95,17 @@
   ;; Yeah, Perl...  It is required early in the bootstrap process by Linux.
   (package
     (name "perl")
-    (version "5.30.2")
+    (version "5.34.0")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://cpan/src/5.0/perl-"
                                  version ".tar.gz"))
              (sha256
               (base32
-               "128nfdxcvxfn5kq55qcfrx2851ys8hv794dcdxbyny8rm7w7vnv6"))
+               "16mywn5afpv1mczv9dlc1w84rbgjgrr0pyr4c0hhb2wnif0zq7jm"))
              (patches (search-patches
                        "perl-no-sys-dirs.patch"
                        "perl-autosplit-default-time.patch"
-                       "perl-deterministic-ordering.patch"
                        "perl-reproducible-build-date.patch"))))
     (build-system gnu-build-system)
     (arguments
@@ -124,44 +127,36 @@
        #:phases
        (modify-phases %standard-phases
          (add-before 'configure 'setup-configure
-           (lambda _
+           (lambda* (#:key inputs #:allow-other-keys)
              ;; Use the right path for `pwd'.
-             ;; TODO: use coreutils from INPUTS instead of 'which'
-             ;; in next rebuild cycle, see fixup below.
              (substitute* "dist/PathTools/Cwd.pm"
-               (("/bin/pwd")
-                (which "pwd")))
+               (("'/bin/pwd'")
+                (string-append "'" (search-input-file inputs "bin/pwd") "'")))
 
              ;; Build in GNU89 mode to tolerate C++-style comment in libc's
              ;; <bits/string3.h>.
              (substitute* "cflags.SH"
                (("-std=c89")
-                "-std=gnu89"))
-             #t))
+                "-std=gnu89"))))
          ,@(if (%current-target-system)
                `((add-after 'unpack 'unpack-cross
                    (lambda* (#:key native-inputs inputs #:allow-other-keys)
                      (let ((cross-checkout
-                            (assoc-ref native-inputs "perl-cross"))
-                           (cross-patch
-                            (assoc-ref native-inputs "perl-cross-patch")))
+                            (assoc-ref native-inputs "perl-cross")))
                        (rename-file "Artistic" "Artistic.perl")
                        (rename-file "Copying" "Copying.perl")
-                       (copy-recursively cross-checkout ".")
-                       (format #t "Applying ~a\n" cross-patch)
-                       (invoke "patch" "-p1" "-i" cross-patch))
-                     (let ((bash (assoc-ref inputs "bash")))
+                       (copy-recursively cross-checkout "."))
+                     (let ((bash (search-input-file inputs "bin/bash")))
                        (substitute* '("Makefile.config.SH"
                                       "cnf/config.guess"
                                       "cnf/config.sub"
                                       "cnf/configure"
                                       "cnf/configure_misc.sh"
                                       "miniperl_top")
-                         (("! */bin/sh") (string-append "! " bash "/bin/bash"))
-                         ((" /bin/sh") (string-append bash "/bin/bash")))
+                         (("! */bin/sh") (string-append "! " bash))
+                         ((" /bin/sh") bash))
                        (substitute* '("ext/Errno/Errno_pm.PL")
-                         (("\\$cpp < errno.c") "$Config{cc} -E errno.c")))
-                       #t))
+                         (("\\$cpp < errno.c") "$Config{cc} -E errno.c")))))
                  (replace 'configure
                    (lambda* (#:key configure-flags outputs inputs #:allow-other-keys)
                      (let* ((out (assoc-ref outputs "out"))
@@ -177,22 +172,18 @@
                                        (lambda (x) (or (string-prefix? "-d" x)
                                                        (string-prefix? "-Dcc=" x))))
                                       configure-flags)))
-                            (bash (assoc-ref inputs "bash"))
-                            (coreutils (assoc-ref inputs "coreutils")))
+                            (bash (assoc-ref inputs "bash-minimal")))
                        (format (current-error-port)
-                               "running ./configure ~a\n" (string-join configure-flags))
+                               "running ./configure ~a\n"
+                               (string-join configure-flags))
                        (apply invoke (cons "./configure" configure-flags))
                        (substitute* "config.sh"
                          (((string-append store-directory "/[^/]*-bash-[^/]*"))
                           bash))
                        (substitute* '("config.h")
                          (("^#define SH_PATH .*")
-                          (string-append  "#define SH_PATH \"" bash "/bin/bash\"\n")))
-                       ;;TODO: fix this in setup-configure next rebuild cycle
-                       (substitute* "dist/PathTools/Cwd.pm"
-                         (((string-append store-directory "/[^/]*-coreutils-[^/]*"))
-                          coreutils))
-                       #t)))
+                          (string-append  "#define SH_PATH \""
+                                          bash "/bin/bash\"\n"))))))
                  (add-after 'build 'touch-non-built-files-for-install
                    (lambda _
                      ;; `make install' wants to install these although they do
@@ -206,8 +197,7 @@
                                  '("Pod-Usage/blib/script/pod2text"
                                    "Pod-Usage/blib/script/pod2usage"
                                    "Pod-Checker/blib/script/podchecker"
-                                   "Pod-Parser/blib/script/podselect")))
-                     #t)))
+                                   "Pod-Parser/blib/script/podselect"))))))
                `((replace 'configure
                    (lambda* (#:key configure-flags #:allow-other-keys)
                      (format #t "Perl configure flags: ~s~%" configure-flags)
@@ -238,13 +228,12 @@
                              (("libpth => .*$")
                               (string-append "libpth => '" libc
                                              "/lib',\n"))))
-                         config2)
-               #t))))))
+                         config2)))))))
     (inputs
-     (if (%current-target-system)
-         `(("bash" ,bash-minimal)
-           ("coreutils" ,coreutils))
-         '()))
+     (append (list coreutils-minimal)
+             (if (%current-target-system)
+                 (list bash-minimal)
+                 '())))
     (native-inputs
      (if (%current-target-system)
          `(("perl-cross"
@@ -252,11 +241,10 @@
                (method git-fetch)
                (uri (git-reference
                      (url "https://github.com/arsv/perl-cross")
-                     (commit "1.3.3")))
-               (file-name (git-file-name "perl-cross" "1.3.3"))
+                     (commit "1.3.6")))
+               (file-name (git-file-name "perl-cross" "1.3.6"))
                (sha256
-                (base32 "065qbl1x44maykaj8p8za0b6qxj74bz7fi2zsrlydir1mqb1js3d"))))
-           ("perl-cross-patch" ,@(search-patches "perl-cross.patch")))
+                (base32 "0k5vyj40czbkfl7r3dcwxpc7dvdlp2xliaav358bviq3dq9vq9bb")))))
          '()))
     (native-search-paths (list (search-path-specification
                                 (variable "PERL5LIB")
@@ -323,7 +311,7 @@ differences.")
         (base32
          "1syyqzy462501kn5ma9gl6xbmcahqcn4qpafhsmpz0nd0x2m4l63"))))
     (build-system perl-build-system)
-    (native-inputs `(("perl-module-build" ,perl-module-build)))
+    (native-inputs (list perl-module-build))
     (home-page "https://metacpan.org/release/aliased")
     (synopsis "Use shorter versions of class names")
     (description "The alias module loads the class you specify and exports
@@ -365,13 +353,13 @@ implicitly.")
                (("GetOptions\\( \"travis\" => \\\\\\$travis \\);") ""))
              #t)))))
     (native-inputs
-     `(("perl-archive-extract" ,perl-archive-extract)
-       ("perl-archive-zip" ,perl-archive-zip)
-       ("perl-capture-tiny" ,perl-capture-tiny)
-       ("perl-file-sharedir" ,perl-file-sharedir)
-       ("perl-file-which" ,perl-file-which)
-       ("perl-module-build" ,perl-module-build)
-       ("perl-text-patch" ,perl-text-patch)))
+     (list perl-archive-extract
+           perl-archive-zip
+           perl-capture-tiny
+           perl-file-sharedir
+           perl-file-which
+           perl-module-build
+           perl-text-patch))
     (inputs
      `(("freetype" ,freetype)
        ("fontconfig" ,fontconfig)
@@ -402,8 +390,7 @@ from source codes.")
                 "0dc55mpayrixwx8dwql0vj0jalg4rlb3k64rprc84bl0z8vkx9m8"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-mouse" ,perl-mouse)
-       ("perl-moose" ,perl-moose)))
+     (list perl-mouse perl-moose))
     (home-page "https://metacpan.org/release/Any-Moose")
     (synopsis "Transparently use Moose or Mouse modules")
     (description
@@ -414,6 +401,54 @@ users can force the decision of which backend to use by setting the environment
 variable ANY_MOOSE to be Moose or Mouse.")
     (license (package-license perl))))
 
+(define-public perl-app-xml-docbook-builder
+  (package
+    (name "perl-app-xml-docbook-builder")
+    (version "0.1003")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://cpan/authors/id/S/SH/SHLOMIF/"
+                           "App-XML-DocBook-Builder-" version ".tar.gz"))
+       (sha256
+        (base32 "12423lk4r7m5pkm1dvk1ci6s1d6rsnnl4chnavckpmja18jyay3j"))))
+    (build-system perl-build-system)
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+             (add-after 'unpack 'refer-to-xsltproc
+               (lambda* (#:key inputs #:allow-other-keys)
+                 (substitute* (list "lib/App/XML/DocBook/Docmake.pm"
+                                    "t/01-use.t")
+                   (("\"xsltproc\"")
+                    (format #f "\"~a\""
+                            (search-input-file inputs "bin/xsltproc")))))))))
+    (native-inputs
+     (list perl-module-build python))
+    (inputs
+     (list libxslt))
+    (propagated-inputs
+     (list perl-class-xsaccessor perl-test-trap))
+    (native-search-paths
+     ;; xsltproc's search paths, to avoid propagating libxslt.
+     (list (search-path-specification
+            (variable "XML_CATALOG_FILES")
+            (separator " ")
+            (files '("xml"))
+            (file-pattern "^catalog\\.xml$")
+            (file-type 'regular))))
+    (home-page "https://www.shlomifish.org/open-source/projects/docmake/")
+    (synopsis "Translate DocBook/XML documentation into other file formats")
+    (description
+     "This package provides the @command{docmake} command-line tool, and the
+@code{App::XML::DocBook::Docmake} and @code{App::XML::DocBook::Builder} Perl
+modules.
+
+It translates DocBook/XML mark-up into various other documentation formats such
+as XHTML, RTF, PDF, and XSL-FO, using the more low-level tools.  It aims to be a
+replacement for @command{xmlto}.")
+    (license license:expat)))
+
 (define-public perl-appconfig
   (package
     (name "perl-appconfig")
@@ -428,7 +463,7 @@ variable ANY_MOOSE to be Moose or Mouse.")
          "03vvi3mk4833mx2c6dkm9zhvakf02mb2b7wz9pk9xc7c4mq04xqi"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-pod" ,perl-test-pod)))
+     (list perl-test-pod))
     (home-page "https://metacpan.org/release/AppConfig")
     (synopsis "Configuration files and command line parsing")
     (description "AppConfig is a bundle of Perl5 modules for reading
@@ -469,9 +504,9 @@ list manipulation routines.")
                 "0nq8wqy0gsnwhiw23wsp1dmgzzbf2q1asi85yd0d7cmg4haxsmib"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-canary-stability" ,perl-canary-stability)))
+     (list perl-canary-stability))
     (propagated-inputs
-     `(("perl-common-sense" ,perl-common-sense)))
+     (list perl-common-sense))
     (home-page "https://metacpan.org/release/Async-Interrupt")
     (synopsis "Allow C/XS libraries to interrupt perl asynchronously")
     (description
@@ -533,13 +568,9 @@ of general interest as follows:
         "0xzind7zr2prjq3zbs2j18snfpshd4xrd7igv4kp67xl0axr6fpl"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+     (list perl-module-build perl-test-pod perl-test-pod-coverage))
     (propagated-inputs
-     `(("perl-data-integer" ,perl-data-integer)
-       ("perl-digest-crc" ,perl-digest-crc)
-       ("perl-scalar-string" ,perl-scalar-string)))
+     (list perl-data-integer perl-digest-crc perl-scalar-string))
     (home-page "https://metacpan.org/release/Authen-DecHpwd")
     (synopsis "DEC VMS password hashing")
     (description "@code{Authen::DecHpwd} implements the
@@ -564,20 +595,18 @@ pure Perl backup version for systems that cannot handle XS.")
         "0qq4krap687rxf6xr31bg5nj5dqmm1frcm7fq249v1bxc4h4bnsm"))))
   (build-system perl-build-system)
   (native-inputs
-   `(("perl-module-build" ,perl-module-build)
-     ("perl-test-pod" ,perl-test-pod)
-     ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+   (list perl-module-build perl-test-pod perl-test-pod-coverage))
   (propagated-inputs
-   `(("perl-authen-dechpwd" ,perl-authen-dechpwd)
-     ("perl-crypt-des" ,perl-crypt-des)
-     ("perl-crypt-eksblowfish" ,perl-crypt-eksblowfish)
-     ("perl-crypt-mysql" ,perl-crypt-mysql)
-     ("perl-crypt-passwdmd5" ,perl-crypt-passwdmd5)
-     ("perl-crypt-unixcrypt_xs" ,perl-crypt-unixcrypt_xs)
-     ("perl-data-entropy" ,perl-data-entropy)
-     ("perl-digest-md4" ,perl-digest-md4)
-     ("perl-module-runtime" ,perl-module-runtime)
-     ("perl-params-classify" ,perl-params-classify)))
+   (list perl-authen-dechpwd
+         perl-crypt-des
+         perl-crypt-eksblowfish
+         perl-crypt-mysql
+         perl-crypt-passwdmd5
+         perl-crypt-unixcrypt_xs
+         perl-data-entropy
+         perl-digest-md4
+         perl-module-runtime
+         perl-params-classify))
   (home-page "https://metacpan.org/release/Authen-Passphrase")
   (synopsis "Hashed passwords/passphrases as objects")
   (description "@code{Authen-Passphrase} is the base class for a
@@ -634,11 +663,9 @@ error when it would have happened.")
          "0zy1v746pzv3vvvpr3plpykz0vfhi940q9bfypzzhynq2qvm6d21"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-b-hooks-op-check" ,perl-b-hooks-op-check)
-       ("perl-extutils-depends" ,perl-extutils-depends)))
+     (list perl-b-hooks-op-check perl-extutils-depends))
     (propagated-inputs
-     `(("perl-b-hooks-op-check" ,perl-b-hooks-op-check)
-       ("perl-lexical-sealrequirehints" ,perl-lexical-sealrequirehints)))
+     (list perl-b-hooks-op-check perl-lexical-sealrequirehints))
     (home-page "https://metacpan.org/release/bareword-filehandles")
     (synopsis "Disables bareword filehandles")
     (description "This module disables bareword filehandles.")
@@ -701,10 +728,8 @@ limits like @code{getrlimit} and @code{setpriority}.")
          "1imcqxp23yc80a7p0h56sja9glbrh4qyhgzljqd4g9habpz3vah3"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-module-runtime" ,perl-module-runtime)
-       ("perl-module-implementation" ,perl-module-implementation)
-       ("perl-sub-exporter-progressive" ,perl-sub-exporter-progressive)
-       ("perl-variable-magic" ,perl-variable-magic)))
+     (list perl-module-runtime perl-module-implementation
+           perl-sub-exporter-progressive perl-variable-magic))
     (home-page "https://metacpan.org/release/B-Hooks-EndOfScope")
     (synopsis "Execute code after a scope finished compilation")
     (description "This module allows you to execute code when perl finished
@@ -726,7 +751,7 @@ compiling the surrounding scope.")
          "1kfdv25gn6yik8jrwik4ajp99gi44s6idcvyyrzhiycyynzd3df7"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-extutils-depends" ,perl-extutils-depends)))
+     (list perl-extutils-depends))
     (home-page "https://metacpan.org/release/B-Hooks-OP-Check")
     (synopsis "Wrap OP check callbacks")
     (description "This module allows you to wrap OP check callbacks.")
@@ -766,7 +791,7 @@ keywords: @code{@@Scalars, @@Arrays, @@Hashes, @@Filehandles, @@Symbols,
                 "1gl9ybm9hgia3ld5s11b7bv2p2hmx5rss5hxcfy6rmbzrjcnci01"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)))
+     (list perl-module-install))
     ;; The optional input module Statistics::PointEstimation (from
     ;; Statistics-TTest) lists no license.
     (synopsis "Benchmarking with statistical confidence")
@@ -793,7 +818,7 @@ but don't want to go all out and profile your code.")
          "09m96p8c0ipgz42li2ywdgy0vxb57mb5nf59j9gw7yzc3xkslv9w"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-carp-clan" ,perl-carp-clan)))
+     (list perl-carp-clan))
     (home-page "https://metacpan.org/release/Bit-Vector")
     (synopsis "Bit vector library")
     (description "Bit::Vector is an efficient C library which allows you to
@@ -856,11 +881,10 @@ Agency.")
          "07l3zfv8hagv37i3clvj5a1zc2jarr5phg80c93ks35zaz6llx9i"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-business-isbn-data" ,perl-business-isbn-data)
-       ("perl-mojolicious" ,perl-mojolicious)))
+     (list perl-business-isbn-data perl-mojolicious))
     (home-page "https://metacpan.org/release/Business-ISBN")
     (synopsis "Work with International Standard Book Numbers")
-    (description "This modules provides tools to deal with International
+    (description "This module provides tools to deal with International
 Standard Book Numbers, including ISBN-10 and ISBN-13.")
     (license license:artistic2.0)))
 
@@ -879,7 +903,7 @@ Standard Book Numbers, including ISBN-10 and ISBN-13.")
     (build-system perl-build-system)
     (home-page "https://metacpan.org/release/Business-ISSN")
     (synopsis "Work with International Standard Serial Numbers")
-    (description "This modules provides tools to deal with International
+    (description "This module provides tools to deal with International
 Standard Serial Numbers.")
     (license (package-license perl))))
 
@@ -896,10 +920,10 @@ Standard Serial Numbers.")
         (base32 "1cpcfyaz1fl6fnm076jx2jsphw147wj6aszj2yzqrgsncjhk2cja"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-tie-cycle" ,perl-tie-cycle)))
+     (list perl-tie-cycle))
     (home-page "https://metacpan.org/release/Business-ISMN")
     (synopsis "Work with International Standard Music Numbers")
-    (description "This modules provides tools to deal with International
+    (description "This module provides tools to deal with International
 Standard Music Numbers.")
     (license (package-license perl))))
 
@@ -916,9 +940,7 @@ Standard Music Numbers.")
                 "1s6i670dc3yb6ngvdk48y6szdk5n1f4icdcjv2vi1l2xp9fzviyj"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-digest-sha1" ,perl-digest-sha1)
-       ("perl-error" ,perl-error)
-       ("perl-ipc-sharelite" ,perl-ipc-sharelite)))
+     (list perl-digest-sha1 perl-error perl-ipc-sharelite))
     (home-page "https://metacpan.org/release/Cache-Cache")
     (synopsis "Cache interface for Perl")
     (description "The Cache modules are designed to assist a developer in
@@ -1030,7 +1052,7 @@ but it is a good educated guess.")
         (base32 "1wb6b0qjga7kvn4p8df6k4g1pl2yzaqiln1713xidh3i454i3alq"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-base" ,perl-test-base)))
+     (list perl-test-base))
     (home-page "https://metacpan.org/release/Carp-Always")
     (synopsis "Warns and dies noisily with stack backtraces/")
     (description "This module is meant as a debugging aid.  It can be used to
@@ -1070,9 +1092,9 @@ library assert.h.")
         (base32 "14x4m4dlj7pwq2r2fsmww3q3xb61cdgnrlmjh5mms3ikaln6rmmk"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-exception" ,perl-test-exception)))
+     (list perl-test-exception))
     (propagated-inputs
-     `(("perl-carp-assert" ,perl-carp-assert)))
+     (list perl-carp-assert))
     (home-page "https://metacpan.org/release/Carp-Assert-More")
     (synopsis "Convenience wrappers around Carp::Assert")
     (description "Carp::Assert::More is a set of handy assertion functions for
@@ -1092,7 +1114,7 @@ Perl.")
         (base32 "0237xx3rqa72sr4vdvws9r1m453h5f25bl85mdjmmk128kir4py7"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-exception" ,perl-test-exception)))
+     (list perl-test-exception))
     (home-page "https://metacpan.org/release/Carp-Clan")
     (synopsis "Report errors from a \"clan\" of modules")
     (description "This module allows errors from a clan (or family) of modules
@@ -1184,30 +1206,30 @@ the Carp.pm module doesn't help.")
                (install-file "bin/circos" bin)
                #t))))))
     (propagated-inputs
-     `(("perl" ,perl)
-       ("perl-carp" ,perl-carp)
-       ("perl-clone" ,perl-clone)
-       ("perl-config-general" ,perl-config-general)
-       ("perl-digest-md5" ,perl-digest-md5)
-       ("perl-file-temp" ,perl-file-temp)
-       ("perl-font-ttf" ,perl-font-ttf)
-       ("perl-gd" ,perl-gd)
-       ("perl-getopt-long" ,perl-getopt-long)
-       ("perl-list-allutils" ,perl-list-allutils)
-       ("perl-math-bezier" ,perl-math-bezier)
-       ("perl-math-round" ,perl-math-round)
-       ("perl-math-vecstat" ,perl-math-vecstat)
-       ("perl-memoize" ,perl-memoize)
-       ("perl-number-format" ,perl-number-format)
-       ("perl-params-validate" ,perl-params-validate)
-       ("perl-readonly" ,perl-readonly)
-       ("perl-regexp-common" ,perl-regexp-common)
-       ("perl-set-intspan" ,perl-set-intspan)
-       ("perl-statistics-basic" ,perl-statistics-basic)
-       ("perl-svg" ,perl-svg)
-       ("perl-text-balanced" ,perl-text-balanced)
-       ("perl-text-format" ,perl-text-format)
-       ("perl-time-hires" ,perl-time-hires)))
+     (list perl
+           perl-carp
+           perl-clone
+           perl-config-general
+           perl-digest-md5
+           perl-file-temp
+           perl-font-ttf
+           perl-gd
+           perl-getopt-long
+           perl-list-allutils
+           perl-math-bezier
+           perl-math-round
+           perl-math-vecstat
+           perl-memoize
+           perl-number-format
+           perl-params-validate
+           perl-readonly
+           perl-regexp-common
+           perl-set-intspan
+           perl-statistics-basic
+           perl-svg
+           perl-text-balanced
+           perl-text-format
+           perl-time-hires))
     (home-page "http://circos.ca/")
     (synopsis "Generation of circularly composited renditions")
     (description
@@ -1229,7 +1251,7 @@ composited renditions of genomic data and related annotations.")
          "07215zzr4ydf49832vn54i3gf2q5b97lydkv8j56wb2svvjs64mz"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-sub-name" ,perl-sub-name)))
+     (list perl-sub-name))
     (home-page "https://metacpan.org/release/Class-Accessor")
     (synopsis "Automated accessor generation")
     (description "This module automagically generates accessors/mutators for
@@ -1250,9 +1272,9 @@ your class.")
          "1lilrjy1s0q5hyr0888kf0ifxjyl2iyk4vxil4jsv0sgh39lkgx5"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (propagated-inputs
-     `(("perl-class-accessor" ,perl-class-accessor)))
+     (list perl-class-accessor))
     (home-page "https://metacpan.org/release/Class-Accessor-Chained")
     (synopsis "Faster, but less expandable, chained accessors")
     (description "A chained accessor is one that always returns the object
@@ -1274,12 +1296,9 @@ the same mk_accessors interface.")
         (base32 "1fy48hx56n5kdn1gz66awg465qf34r0n5jam64x7zxh9zhzb1m9m"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)
-       ("perl-test-exception" ,perl-test-exception)))
+     (list perl-module-install perl-test-exception))
     (propagated-inputs
-     `(("perl-class-xsaccessor" ,perl-class-xsaccessor)
-       ("perl-module-runtime" ,perl-module-runtime)
-       ("perl-sub-name" ,perl-sub-name)))
+     (list perl-class-xsaccessor perl-module-runtime perl-sub-name))
     (home-page "https://metacpan.org/release/Class-Accessor-Grouped")
     (synopsis "Build groups of accessors")
     (description "This class lets you build groups of accessors that will call
@@ -1299,7 +1318,7 @@ different getters and setters.")
         (base32 "0gp3czp6y0jxx4448kz37f7gdxq4vw514bvc0l98rk4glvqkq1c4"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-algorithm-c3" ,perl-algorithm-c3)))
+     (list perl-algorithm-c3))
     (home-page "https://metacpan.org/release//Class-C3")
     (synopsis "Pragma to use the C3 method resolution order algorithm")
     (description "This is pragma to change Perl 5's standard method resolution
@@ -1320,12 +1339,9 @@ sophisticated C3 method resolution order.")
         (base32 "1xsbydmiskpa1qbmnf6n39cb83nlb432xgkad9kfhxnvm8jn4rw5"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-module-build-tiny" ,perl-module-build-tiny)
-       ("perl-test-exception" ,perl-test-exception)))
+     (list perl-module-build perl-module-build-tiny perl-test-exception))
     (propagated-inputs
-     `(("perl-list-moreutils" ,perl-list-moreutils)
-       ("perl-mro-compat" ,perl-mro-compat)))
+     (list perl-list-moreutils perl-mro-compat))
     (home-page "https://metacpan.org/release/Class-C3-Adopt-NEXT")
     (synopsis "Drop-in replacement for NEXT")
     (description "This module is intended as a drop-in replacement for NEXT,
@@ -1345,12 +1361,9 @@ supporting the same interface, but using Class::C3 to do the hard work.")
         (base32 "14wn1g45z3b5apqq7dcai5drk01hfyqydsd2m6hsxzhyvi3b2l9h"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)
-       ("perl-test-exception" ,perl-test-exception)))
+     (list perl-module-install perl-test-exception))
     (propagated-inputs
-     `(("perl-class-c3" ,perl-class-c3)
-       ("perl-class-inspector" ,perl-class-inspector)
-       ("perl-mro-compat" ,perl-mro-compat)))
+     (list perl-class-c3 perl-class-inspector perl-mro-compat))
     (home-page "https://metacpan.org/release/Class-C3-Componentised")
     (synopsis "Load mix-ins or components to your C3-based class")
     (description "This module will inject base classes to your module using
@@ -1431,7 +1444,7 @@ to the calling program.")
         (base32
          "09ifd6v0c94vr20n9yr1dxgcp7hyscqq851szdip7y24bd26nlbc"))))
     (build-system perl-build-system)
-    (native-inputs `(("perl-module-build" ,perl-module-build)))
+    (native-inputs (list perl-module-build))
     (home-page "https://metacpan.org/release/Class-Factory-Util")
     (synopsis "Utility methods for factory classes")
     (description "This module exports methods useful for factory classes.")
@@ -1469,16 +1482,11 @@ loaded class.")
         (base32 "13sz4w8kwljhfcy7yjjgrgg5hv3wccr8n3iqarhyb5sjkdvzlj1a"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build-tiny" ,perl-module-build-tiny)
-       ("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-needs" ,perl-test-needs)
-       ("perl-test-without-module" ,perl-test-without-module)))
+     (list perl-module-build-tiny perl-test-fatal perl-test-needs
+           perl-test-without-module))
     (propagated-inputs
-     `(("perl-package-stash" ,perl-package-stash)
-       ("perl-data-optlist" ,perl-data-optlist)
-       ("perl-namespace-clean" ,perl-namespace-clean)
-       ("perl-module-runtime" ,perl-module-runtime)
-       ("perl-module-implementation" ,perl-module-implementation)))
+     (list perl-package-stash perl-data-optlist perl-namespace-clean
+           perl-module-runtime perl-module-implementation))
     (home-page "https://metacpan.org/release/Class-Load")
     (synopsis "Working (require \"Class::Name\") and more")
     (description "\"require EXPR\" only accepts Class/Name.pm style module
@@ -1500,10 +1508,8 @@ names, not Class::Name.  For that, this module provides \"load_class
          "1ldd4a306hjagm5v9j0gjg8y7km4v3q45bxxqmj2bzgb6vsjrhjv"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-needs" ,perl-test-needs)
-       ("perl-test-without-module" ,perl-test-without-module)))
-    (inputs `(("perl-class-load" ,perl-class-load)))
+     (list perl-test-fatal perl-test-needs perl-test-without-module))
+    (inputs (list perl-class-load))
     (home-page "https://metacpan.org/release/Class-Load-XS")
     (synopsis "XS implementation of parts of Class::Load")
     (description "This module provides an XS implementation for portions of
@@ -1543,8 +1549,7 @@ write accessor methods for your objects that perform standard tasks.")
         (base32 "0qzx83mgd71hlc2m1kpw15dqsjzjq7b2cj3sdgg45a0q23vhfn5b"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-needs" ,perl-test-needs)))
+     (list perl-test-fatal perl-test-needs))
     (home-page "https://metacpan.org/release/Class-Method-Modifiers")
     (synopsis "Moose-like method modifiers")
     (description "Class::Method::Modifiers provides three modifiers:
@@ -1569,11 +1574,9 @@ with a hook to easily call that original method.")
         "02vwzzqn1s24g525arbrjh9s9j0y1inp3wbr972gh51ri51zciw7"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+     (list perl-module-build perl-test-pod perl-test-pod-coverage))
     (propagated-inputs
-     `(("perl-params-classify" ,perl-params-classify)))
+     (list perl-params-classify))
     (home-page "https://metacpan.org/release/Class-Mix")
     (synopsis "Dynamic class mixing")
     (description "The @code{mix_class} function provided by this
@@ -1634,9 +1637,9 @@ uses no non-core modules for any recent Perl.")
         (base32 "0pqa98z3ij6a3v9wkmvc8b410kv30y0xxqf0i6if3lp4lx3rgqjj"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-requires" ,perl-test-requires)))
+     (list perl-test-requires))
     (propagated-inputs
-     `(("perl-class-inspector" ,perl-class-inspector)))
+     (list perl-class-inspector))
     (home-page "https://metacpan.org/release/Class-Unload")
     (synopsis "Unload a class")
     (description "Class:Unload unloads a given class by clearing out its
@@ -1700,11 +1703,9 @@ objects.")
          "0cin2bjn5z8xhm9v4j7pwlkx88jnvz8al0njdjwyvs6fb0glh8sn"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-clone" ,perl-clone)
-       ("perl-clone-pp" ,perl-clone-pp)
-       ("perl-test-without-module" ,perl-test-without-module)))
+     (list perl-clone perl-clone-pp perl-test-without-module))
     (propagated-inputs
-     `(("perl-module-runtime" ,perl-module-runtime)))
+     (list perl-module-runtime))
     (home-page "https://metacpan.org/release/Clone-Choose")
     (synopsis "Choose appropriate Perl @code{clone} utility")
     (description "This @code{Clone::Choose} module checks several different
@@ -1764,12 +1765,10 @@ as defined by two typical specimens of Perl coders.")
         (base32 "0qdypqd7mx96bwdjlv13fn6p96bs4w0yv94yv94xa7z5lqkdj4rg"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-extutils-pkgconfig" ,perl-extutils-pkgconfig)
-       ("perl-test-deep" ,perl-test-deep)
-       ("perl-test-exception" ,perl-test-exception)
-       ("perl-test-warn" ,perl-test-warn)))
+     (list perl-extutils-pkgconfig perl-test-deep perl-test-exception
+           perl-test-warn))
     (inputs
-     `(("libconfig" ,libconfig)))
+     (list libconfig))
     (home-page "https://metacpan.org/release/Conf-Libconfig")
     (synopsis "Perl extension for libconfig")
     (description
@@ -1814,7 +1813,7 @@ tabular data.")
          "0l31sg7dwh4dwwnql42hp7arkhcm15bhsgfg4i6xvbjzy9f2mnk8"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-module-pluggable" ,perl-module-pluggable)))
+     (list perl-module-pluggable))
     (home-page "https://metacpan.org/release/Config-Any")
     (synopsis "Load configuration from different file formats")
     (description "Config::Any provides a facility for Perl applications and
@@ -1835,8 +1834,7 @@ supports XML, YAML, JSON, Apache-style configuration, and Perl code.")
         (base32 "02dsz3inh5jwgaxmbcz8qxwgin8mkhm6vj9jyzfmm3dr5pnxcbnr"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-io-stringy",perl-io-stringy)))
+     (list perl-module-build perl-io-stringy))
     (home-page "https://metacpan.org/pod/Config::IniFiles")
     (synopsis "Package for configuration files outside your Perl script")
     (description "This package provides a way to have readable configuration
@@ -1858,7 +1856,7 @@ can be grouped, and settings can be accessed from a tied hash.")
          "1qcwib4yaml5z2283qy5khjcydyibklsnk8zrk9wzdzc5wnv5r01"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-capture-tiny" ,perl-capture-tiny)))
+     (list perl-capture-tiny))
     (home-page "https://metacpan.org/release/Config-AutoConf")
     (synopsis "Module to implement some AutoConf macros in Perl")
     (description "Config::AutoConf is intended to provide the same
@@ -1904,10 +1902,9 @@ options.")
          "0kp57na9mk6yni693h2fwap6l1ndbcj97l4860r9vkzx2jw0fjk7"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-exception" ,perl-test-exception)))
+     (list perl-test-exception))
     (propagated-inputs
-     `(("perl-moo" ,perl-moo)
-       ("perl-moox-types-mooselike" ,perl-moox-types-mooselike)))
+     (list perl-moo perl-moox-types-mooselike))
     (home-page "https://metacpan.org/release/Config-GitLike")
     (synopsis "Parse Git style configuration files")
     (description
@@ -1929,9 +1926,7 @@ of the style used by the Git version control system.")
                 "0clphq6a17chvb663fvjnxqvyvh26g03x0fl4bg9vy4ibdnzg2v2"))))
     (build-system perl-build-system)
     (inputs
-     `(("perl-mixin-linewise" ,perl-mixin-linewise)
-       ("perl-perlio-utf8_strict" ,perl-perlio-utf8_strict)
-       ("perl-sub-exporter" ,perl-sub-exporter)))
+     (list perl-mixin-linewise perl-perlio-utf8_strict perl-sub-exporter))
     (home-page "https://metacpan.org/release/Config-INI")
     (synopsis "Simple .ini-file format reader and writer")
     (description "@code{Config::INI} is a module that facilates the reading
@@ -1952,11 +1947,10 @@ and writing of @code{.ini}-style configuration files.")
         (base32
          "1nwlldgrx86yn7y6a53cqgvzm2ircsvxg1addahlcy6510x9a1gq"))))
     (inputs
-     `(("perl-module-build-tiny" ,perl-module-build-tiny)
-       ("perl-test-fatal" ,perl-test-fatal)))
+     (list perl-module-build-tiny perl-test-fatal))
     ;; Needed for tests.
     (native-inputs
-     `(("perl-sub-exporter-progressive" ,perl-sub-exporter-progressive)))
+     (list perl-sub-exporter-progressive))
     (build-system perl-build-system)
     (home-page "https://metacpan.org/release/Const-Fast")
     (synopsis "Facility for creating read-only scalars, arrays, and hashes")
@@ -1978,8 +1972,7 @@ scalars, arrays, and hashes.")
          "07zxgmb11bn4zj3w9g1zwbb9iv4jyk5q7hc0nv59knvv5i64m489"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-exception" ,perl-test-exception)
-       ("perl-test-simple" ,perl-test-simple)))
+     (list perl-test-exception perl-test-simple))
     (home-page "https://metacpan.org/release/Context-Preserve")
     (synopsis "Preserve context during subroutine call")
     (description "This module runs code after a subroutine call, preserving
@@ -2003,8 +1996,7 @@ the caller.")
          "15v3489k179cx0fz3lix79ssjid0nhhpf6c33swpxga6pss92dai"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-file-slurp" ,perl-file-slurp)
-       ("perl-test-most" ,perl-test-most)))
+     (list perl-file-slurp perl-test-most))
     (home-page
      "https://metacpan.org/release/Convert-BinHex")
     (synopsis "Extract data from Macintosh BinHex files")
@@ -2071,8 +2063,8 @@ name and version from filenames.")
         (base32
          "07rmdbz1rbnb7w33vswn1wixlyh947sqr93xrvcph1hwzhmmg818"))))
     (build-system perl-build-system)
-    (native-inputs `(("perl-test-deep" ,perl-test-deep)))
-    (propagated-inputs `(("perl-cpan-meta" ,perl-cpan-meta)))
+    (native-inputs (list perl-test-deep))
+    (propagated-inputs (list perl-cpan-meta))
     (home-page "https://metacpan.org/release/CPAN-Meta-Check")
     (synopsis "Verify requirements in a CPAN::Meta object")
     (description "This module verifies if requirements described in a
@@ -2092,7 +2084,7 @@ CPAN::Meta object are present.")
         (base32 "0c07jfh6pq0f3hlhg0cqmznna7rlcflgrqv17mbkz9gnvg4x3szv"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-common-sense" ,perl-common-sense)))
+     (list perl-common-sense))
     (home-page "https://metacpan.org/release/Cpanel-JSON-XS")
     (synopsis "JSON::XS for Cpanel")
     (description "This module converts Perl data structures to JSON and vice
@@ -2114,7 +2106,7 @@ versa.")
         "0ig698lmpjz7fslnznxm0609lvlnvf4f3s370082nzycnqhxww3a"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-crypt-rijndael" ,perl-crypt-rijndael)))
+     (list perl-crypt-rijndael))
     (home-page "https://metacpan.org/release/Crypt-CBC")
     (synopsis "Encrypt Data with Cipher Block Chaining Mode")
     (description "@code{Crypt::CBC} is a Perl-only implementation of
@@ -2139,7 +2131,7 @@ are compatible with the encryption format used by SSLeay.")
         "1rypxlhpd1jc0c327aghgl9y6ls47drmpvn0a40b4k3vhfsypc9d"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-crypt-cbc" ,perl-crypt-cbc)))
+     (list perl-crypt-cbc))
     (home-page "https://metacpan.org/release/Crypt-DES")
     (synopsis "DES encryption module")
     (description "@code{Crypt::DES} is an XS-based implementation of
@@ -2163,11 +2155,9 @@ decrypt functions.")
         "0k01aw3qb2s4m1w4dqsc9cycyry1zg3wabdym4vp4421b1ni5irw"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+     (list perl-module-build perl-test-pod perl-test-pod-coverage))
     (propagated-inputs
-     `(("perl-class-mix" ,perl-class-mix)))
+     (list perl-class-mix))
     (home-page "https://metacpan.org/release/Crypt-Eksblowfish")
     (synopsis "The Eksblowfish block cipher")
     (description "Eksblowfish is a variant of the Blowfish cipher,
@@ -2197,10 +2187,9 @@ password hashing algorithm based on Eksblowfish.")
         "1qyx6ha13r0rh80ldv5wy2bq2pa74igwh8817xlapsfgxymdzswk"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-dbd-mysql" ,perl-dbd-mysql)))
+     (list perl-module-build perl-dbd-mysql))
     (propagated-inputs
-     `(("perl-digest-sha1" ,perl-digest-sha1)))
+     (list perl-digest-sha1))
     (home-page "https://metacpan.org/release/Crypt-MySQL")
     (synopsis "Emulate the MySQL PASSWORD() function")
     (description "@code{Crypt::MySQL} emulates the MySQL PASSWORD()
@@ -2224,7 +2213,7 @@ without the need for a real MySQL environment.")
         "0j0r74f18nk63phddzqbf7wqma2ci4p4bxvrwrxsy0aklbp6lzdp"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (home-page "https://metacpan.org/release/Crypt-PasswdMD5")
     (synopsis "Interoperable MD5-based crypt() functions")
     (description "@code{Crypt::PasswdMD5} provides various
@@ -2342,8 +2331,7 @@ used in @code{crypt} are also supplied separately.")
                 "0xwf4rmii55k3lp19mpbh00mbgby7rxdk2lk84148bjhp6i7rz3s"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-requires" ,perl-test-requires)))
+     (list perl-module-build perl-test-requires))
     (home-page "https://metacpan.org/release/Cwd-Guard")
     (synopsis "Temporarily change working directory")
     (description
@@ -2404,15 +2392,10 @@ bioinformatics data.")
          "12vgqdjbfqf2qfg21x22wg88xnwxfbw2ki3qzcb3nb0chwjj4axn"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-deep" ,perl-test-deep)
-       ("perl-test-output" ,perl-test-output)
-       ("perl-test-fatal" ,perl-test-fatal)))
+     (list perl-test-deep perl-test-output perl-test-fatal))
     (inputs
-     `(("perl-class-method-modifiers" ,perl-class-method-modifiers)
-       ("perl-list-moreutils" ,perl-list-moreutils)
-       ("perl-module-runtime" ,perl-module-runtime)
-       ("perl-role-tiny" ,perl-role-tiny)
-       ("perl-strictures" ,perl-strictures)))
+     (list perl-class-method-modifiers perl-list-moreutils
+           perl-module-runtime perl-role-tiny perl-strictures))
     (home-page "https://metacpan.org/release/Data-Perl")
     (synopsis "Base classes wrapping fundamental Perl data types")
     (description "Collection of classes that wrap fundamental data types that
@@ -2435,8 +2418,7 @@ input.")
         (base32 "1gg8rqbv3x6a1lrpabv6vnlab53zxmpwz2ygad9fcx4gygqj12l1"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-clone" ,perl-clone)
-       ("perl-file-find-rule" ,perl-file-find-rule)))
+     (list perl-clone perl-file-find-rule))
     (home-page "https://metacpan.org/release/Data-Compare")
     (synopsis "Compare Perl data structures")
     (description "This module compares arbitrary data structures to see if
@@ -2458,14 +2440,10 @@ they are copies of each other.")
         "1r176jjzir2zg5kidx85f7vzi6jsw7ci9vd4kvbr9183lfhw8496"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+     (list perl-module-build perl-test-pod perl-test-pod-coverage))
     (propagated-inputs
-     `(("perl-crypt-rijndael" ,perl-crypt-rijndael)
-       ("perl-data-float" ,perl-data-float)
-       ("perl-http-lite" ,perl-http-lite)
-       ("perl-params-classify" ,perl-params-classify)))
+     (list perl-crypt-rijndael perl-data-float perl-http-lite
+           perl-params-classify))
     (home-page "https://metacpan.org/release/Data-Entropy")
     (synopsis "Entropy (randomness) management")
     (description "@code{Data::Entropy} provides modules relating to
@@ -2496,9 +2474,7 @@ functions to shuffle arrays.")
         "0m53zxhx9sn49yqh7azlpyy9m65g54v8cd2ha98y77337gg7xdv3"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+     (list perl-module-build perl-test-pod perl-test-pod-coverage))
     (home-page "https://metacpan.org/release/Data-Integer")
     (synopsis "Details of the native integer data type")
     (description "This module is about the native integer numerical
@@ -2624,9 +2600,7 @@ indentation and newlines plus sub deparsing.")
         "12ji4yf3nc965rqqgfhr96w7irpm6n1g15nivfxvhc49hlym5cg2"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+     (list perl-module-build perl-test-pod perl-test-pod-coverage))
     (home-page "https://metacpan.org/release/Data-Float")
     (synopsis "Details of the floating point data type")
     (description "@code{Data::Float} is about the native floating
@@ -2652,8 +2626,7 @@ point values at a low level.")
          "1hzmgr2imdg1fc3hmwx0d56fhsdfyrgmgx7jb4jkyiv6575ifq9n"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-sub-install" ,perl-sub-install)
-       ("perl-params-util" ,perl-params-util)))
+     (list perl-sub-install perl-params-util))
     (home-page "https://metacpan.org/release/Data-OptList")
     (synopsis "Parse and validate simple name/value option pairs")
     (description
@@ -2673,10 +2646,9 @@ point values at a low level.")
         (base32 "12rxrr2b11qjk0c437cisw2kfqkafw1awcng09cv6yhzglb55yif"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-exception" ,perl-test-exception)))
+     (list perl-module-build perl-test-exception))
     (propagated-inputs
-     `(("perl-class-accessor-chained" ,perl-class-accessor-chained)))
+     (list perl-class-accessor-chained))
     (home-page "https://metacpan.org/release/Data-Page")
     (synopsis "Help when paging through sets of results")
     (description "When searching through large amounts of data, it is often
@@ -2701,17 +2673,12 @@ The maths behind this is unfortunately fiddly, hence this module.")
          "12vgqdjbfqf2qfg21x22wg88xnwxfbw2ki3qzcb3nb0chwjj4axn"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-deep" ,perl-test-deep)
-       ("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-output" ,perl-test-output)))
+     (list perl-test-deep perl-test-fatal perl-test-output))
     (inputs
-     `(("perl-class-method-modifiers"
-        ,perl-class-method-modifiers)
-       ("perl-module-runtime" ,perl-module-runtime)
-       ("perl-role-tiny" ,perl-role-tiny)
-       ("perl-strictures" ,perl-strictures)))
+     (list perl-class-method-modifiers perl-module-runtime perl-role-tiny
+           perl-strictures))
     (propagated-inputs
-     `(("perl-list-moreutils" ,perl-list-moreutils)))
+     (list perl-list-moreutils))
     (home-page
      "https://metacpan.org/release/Data-Perl")
     (synopsis "Base classes wrapping fundamental Perl data types")
@@ -2742,10 +2709,8 @@ The maths behind this is unfortunately fiddly, hence this module.")
          "0njjh8zp5afc4602jrnmg89icj7gfsil6i955ypcqxc2gl830sb0"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-clone-pp" ,perl-clone-pp)
-       ("perl-file-homedir" ,perl-file-homedir)
-       ("perl-package-stash" ,perl-package-stash)
-       ("perl-sort-naturally" ,perl-sort-naturally)))
+     (list perl-clone-pp perl-file-homedir perl-package-stash
+           perl-sort-naturally))
     (home-page "https://metacpan.org/release/Data-Printer")
     (synopsis "Colored pretty-print of Perl data structures and objects")
     (description "Display Perl variables and objects on screen, properly
@@ -2766,10 +2731,9 @@ formatted (to be inspected by a human).")
          "1gwyhjwg4lrnfsn8wb6r8msb4yh0y4wca4mz3z120xbnl9nycshx"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-exception" ,perl-test-exception)
-       ("perl-module-build" ,perl-module-build)))
+     (list perl-test-exception perl-module-build))
     (propagated-inputs
-     `(("perl-sub-uplevel" ,perl-sub-uplevel)))
+     (list perl-sub-uplevel))
     (home-page "https://metacpan.org/release/Data-Record")
     (synopsis "Conditionally split data into records")
     (description "This Perl module allows you to split data into records by
@@ -2795,10 +2759,9 @@ like split on newlines unless newlines are embedded in quotes.")
          "1pmlxca0a8sv2jjwvhwgqavq6iwys6kf457lby4anjp3f1dpx4yd"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-failwarnings" ,perl-test-failwarnings)))
+     (list perl-test-failwarnings))
     (propagated-inputs
-     `(("perl-mro-compat" ,perl-mro-compat)
-       ("perl-sub-exporter" ,perl-sub-exporter)))
+     (list perl-mro-compat perl-sub-exporter))
     (home-page "https://metacpan.org/release/Data-Section")
     (synopsis "Read multiple hunks of data out of your DATA section")
     (description "This package provides a Perl library to read multiple hunks
@@ -2818,7 +2781,7 @@ of data out of your DATA section.")
         (base32 "1jx9g5sxcw0i2zkm2z895k422i49kpx0idnnvvvs36lhvgzkac0b"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-requires" ,perl-test-requires)))
+     (list perl-test-requires))
     (home-page "https://metacpan.org/release/Data-Section-Simple")
     (synopsis "Read data from __DATA__")
     (description
@@ -2840,7 +2803,7 @@ section of the file.")
          "0ncf4l39ka23nb01jlm6rzxdb5pqbip01x0m38bnvf1gim825caa"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-io-string" ,perl-io-string)))
+     (list perl-io-string))
     (home-page "https://metacpan.org/release/Data-Stag")
     (synopsis "Structured tags datastructures")
     (description
@@ -2864,12 +2827,10 @@ Perl.")
          "05q9ygcv7r318j7daxz42rjr5b99j6whjmwjdih0axxrlqr89q06"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-requires" ,perl-test-requires)))
+     (list perl-test-requires))
     (propagated-inputs
-     `(("perl-moose" ,perl-moose)
-       ("perl-namespace-clean" ,perl-namespace-clean)
-       ("perl-path-class" ,perl-path-class)
-       ("perl-sub-exporter" ,perl-sub-exporter)))
+     (list perl-moose perl-namespace-clean perl-path-class
+           perl-sub-exporter))
     (home-page "https://metacpan.org/release/Data-Stream-Bulk")
     (synopsis "N at a time iteration API")
     (description "This module tries to find middle ground between one at a
@@ -2892,9 +2853,9 @@ necessary later on.")
         (base32 "15pgvmf7mf9fxsg2l4l88xwvs41218d0bvawhlk15sx06qqp0kwb"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-most" ,perl-test-most)))
+     (list perl-test-most))
     (propagated-inputs
-     `(("perl-file-homedir" ,perl-file-homedir)))
+     (list perl-file-homedir))
     (home-page "https://metacpan.org/release/Data-Tumbler")
     (synopsis "Dynamic generation of nested combinations of variants")
     (description "Data::Tumbler - Dynamic generation of nested combinations of
@@ -2915,13 +2876,10 @@ variants.")
          "0m7d1505af9z2hj5aw020grcmjjlvnkjpvjam457d7k5qfy4m8lf"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-requires" ,perl-test-requires)))
+     (list perl-test-requires))
     (propagated-inputs
-     `(("perl-class-load" ,perl-class-load)
-       ("perl-moose" ,perl-moose)
-       ("perl-namespace-clean" ,perl-namespace-clean)
-       ("perl-task-weaken" ,perl-task-weaken)
-       ("perl-tie-toobject" ,perl-tie-toobject)))
+     (list perl-class-load perl-moose perl-namespace-clean
+           perl-task-weaken perl-tie-toobject))
     (home-page "https://metacpan.org/release/Data-Visitor")
     (synopsis "Visitor style traversal of Perl data structures")
     (description "This module is a simple visitor implementation for Perl
@@ -2946,8 +2904,7 @@ structures, and all ref types (hashes, arrays, scalars, code, globs).")
          "1barz0jgdaan3jm7ciphs5n3ahwkl42imprs3y8c1dwpwyr3gqbw"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-bit-vector" ,perl-bit-vector)
-       ("perl-carp-clan" ,perl-carp-clan)))
+     (list perl-bit-vector perl-carp-clan))
     (home-page "https://metacpan.org/release/Date-Calc")
     (synopsis "Gregorian calendar date calculations")
     (description "This package consists of a Perl module for date calculations
@@ -2970,9 +2927,7 @@ applicable).")
          "1cssi9rmd31cgaafgp4m70jqbm1mgh3aphxsxz1dwdz8h283n6jz"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-bit-vector" ,perl-bit-vector)
-       ("perl-carp-clan" ,perl-carp-clan)
-       ("perl-date-calc" ,perl-date-calc)))
+     (list perl-bit-vector perl-carp-clan perl-date-calc))
     (home-page "https://metacpan.org/release/Date-Calc-XS")
     (synopsis "XS wrapper for Date::Calc")
     (description "Date::Calc::XS is an XS wrapper and C library plug-in for
@@ -3038,16 +2993,11 @@ hours, minutes, seconds, and time zones.")
         (base32 "1rxjagwmkdlmksz1cbxwx2ad51pv5q7dri2djqkz44q7j1nxlbmi"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-cpan-meta-check" ,perl-cpan-meta-check)
-       ("perl-module-build" ,perl-module-build)
-       ("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-warnings" ,perl-test-warnings)))
+     (list perl-cpan-meta-check perl-module-build perl-test-fatal
+           perl-test-warnings))
     (propagated-inputs
-     `(("perl-datetime-locale" ,perl-datetime-locale)
-       ("perl-datetime-timezone" ,perl-datetime-timezone)
-       ("perl-file-sharedir" ,perl-file-sharedir)
-       ("perl-params-validate" ,perl-params-validate)
-       ("perl-try-tiny" ,perl-try-tiny)))
+     (list perl-datetime-locale perl-datetime-timezone perl-file-sharedir
+           perl-params-validate perl-try-tiny))
     (home-page "https://metacpan.org/release/DateTime")
     (synopsis "Date and time object for Perl")
     (description "DateTime is a class for the representation of date/time
@@ -3069,7 +3019,7 @@ time before its creation (in 1582).")
     (build-system perl-build-system)
     ;; Only needed for tests
     (native-inputs
-     `(("perl-datetime" ,perl-datetime)))
+     (list perl-datetime))
     (home-page "https://metacpan.org/release/DateTime-Calendar-Julian")
     (synopsis "Dates in the Julian calendar")
     (description "This package is a companion module to @code{DateTime.pm}.
@@ -3092,11 +3042,9 @@ precise.")
          "0ih9pi6myg5i26hjpmpzqn58s0yljl2qxdd6gzpy9zda4hwirx4l"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (propagated-inputs
-     `(("perl-datetime" ,perl-datetime)
-       ("perl-params-validate" ,perl-params-validate)
-       ("perl-set-infinite" ,perl-set-infinite)))
+     (list perl-datetime perl-params-validate perl-set-infinite))
     (home-page "https://metacpan.org/release/DateTime-Set")
     (synopsis "DateTime set objects")
     (description "The DateTime::Set module provides a date/time sets
@@ -3119,8 +3067,7 @@ within a time range.")
          "1skmykxbrf98ldi72d5s1v6228gfdr5iy4y0gpl0xwswxy247njk"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-datetime" ,perl-datetime)
-       ("perl-datetime-event-recurrence" ,perl-datetime-event-recurrence)))
+     (list perl-datetime perl-datetime-event-recurrence))
     (home-page "https://metacpan.org/release/DateTime-Event-ICal")
     (synopsis "DateTime rfc2445 recurrences")
     (description "This module provides convenience methods that let you easily
@@ -3141,8 +3088,7 @@ create DateTime::Set objects for RFC 2445 style recurrences.")
          "19dms2vg9hvfx80p85m8gkn2ww0yxjrjn8qsr9k7f431lj4qfh7r"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-datetime" ,perl-datetime)
-       ("perl-datetime-set" ,perl-datetime-set)))
+     (list perl-datetime perl-datetime-set))
     (home-page "https://metacpan.org/release/DateTime-Event-Recurrence")
     (synopsis "DateTime::Set extension for basic recurrences")
     (description "This module provides convenience methods that let you easily
@@ -3165,10 +3111,8 @@ or \"every day\".  You can also create more complicated recurrences, such as
          "18qw5rn1qbji3iha8gmpgldbjv9gvn97j9d5cp57fb4r5frawgrq"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-class-factory-util" ,perl-class-factory-util)
-       ("perl-datetime" ,perl-datetime)
-       ("perl-datetime-format-strptime" ,perl-datetime-format-strptime)
-       ("perl-params-validate" ,perl-params-validate)))
+     (list perl-class-factory-util perl-datetime
+           perl-datetime-format-strptime perl-params-validate))
     (home-page "https://metacpan.org/release/DateTime-Format-Builder")
     (synopsis "Create DateTime parser classes and objects")
     (description "DateTime::Format::Builder creates DateTime parsers.  Many
@@ -3190,15 +3134,10 @@ to do this without writing reams of structural code.")
         (base32 "1vnq3a8bwhidcv3z9cvcmfiq2qa84hikr993ffr19fw7nbzbk9sh"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-exception" ,perl-test-exception)
-       ("perl-test-nowarnings" ,perl-test-nowarnings)
-       ("perl-test-mocktime" ,perl-test-mocktime)))
+     (list perl-test-exception perl-test-nowarnings perl-test-mocktime))
     (propagated-inputs
-     `(("perl-datetime" ,perl-datetime)
-       ("perl-datetime-format-builder" ,perl-datetime-format-builder)
-       ("perl-datetime-timezone" ,perl-datetime-timezone)
-       ("perl-list-moreutils" ,perl-list-moreutils)
-       ("perl-module-pluggable" ,perl-module-pluggable)))
+     (list perl-datetime perl-datetime-format-builder
+           perl-datetime-timezone perl-list-moreutils perl-module-pluggable))
     (home-page "https://metacpan.org/release/DateTime-Format-Flexible")
     (synopsis "Parse date and time strings")
     (description "DateTime::Format::Flexible attempts to take any string you
@@ -3219,13 +3158,10 @@ give it and parse it into a DateTime object.")
          "0cvwk7pigj7czsp81z35h7prxvylkrlk2l0kwvq0v72ykx9zc2cb"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (propagated-inputs
-     `(("perl-datetime" ,perl-datetime)
-       ("perl-datetime-event-ical" ,perl-datetime-event-ical)
-       ("perl-datetime-set" ,perl-datetime-set)
-       ("perl-datetime-timezone" ,perl-datetime-timezone)
-       ("perl-params-validate" ,perl-params-validate)))
+     (list perl-datetime perl-datetime-event-ical perl-datetime-set
+           perl-datetime-timezone perl-params-validate))
     (home-page "https://metacpan.org/release/DateTime-Format-ICal")
     (synopsis "Parse and format iCal datetime and duration strings")
     (description "This module understands the ICal date/time and duration
@@ -3248,13 +3184,10 @@ order to create the appropriate objects.")
         "1syccqd5jlwms8v78ksnf68xijzl97jky5vbwhnyhxi5gvgfx8xk"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (propagated-inputs
-     `(("perl-datetime" ,perl-datetime)
-       ("perl-datetime-format-builder" ,perl-datetime-format-builder)
-       ("perl-file-find-rule" ,perl-file-find-rule)
-       ("perl-test-distribution" ,perl-test-distribution)
-       ("perl-test-pod" ,perl-test-pod)))
+     (list perl-datetime perl-datetime-format-builder perl-file-find-rule
+           perl-test-distribution perl-test-pod))
     (home-page "https://metacpan.org/release/DateTime-Format-ISO8601")
     (synopsis "Parse ISO8601 date and time formats")
     (description "@code{DateTime::Format::ISO8601} is a DateTime
@@ -3274,18 +3207,16 @@ extension that parses almost all ISO8601 date and time formats.")
         (base32 "0mqjsjyfymzp7lx7czx17bsdshzsh6l8r6hcadv81zvga326zprw"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-module-util" ,perl-module-util)
-       ("perl-test-mocktime" ,perl-test-mocktime)))
+     (list perl-module-build perl-module-util perl-test-mocktime))
     (propagated-inputs
-     `(("perl-boolean" ,perl-boolean)
-       ("perl-clone" ,perl-clone)
-       ("perl-date-calc" ,perl-date-calc)
-       ("perl-date-calc-xs" ,perl-date-calc-xs)
-       ("perl-datetime" ,perl-datetime)
-       ("perl-datetime-timezone" ,perl-datetime-timezone)
-       ("perl-list-moreutils" ,perl-list-moreutils)
-       ("perl-params-validate" ,perl-params-validate)))
+     (list perl-boolean
+           perl-clone
+           perl-date-calc
+           perl-date-calc-xs
+           perl-datetime
+           perl-datetime-timezone
+           perl-list-moreutils
+           perl-params-validate))
     (home-page "https://metacpan.org/release/DateTime-Format-Natural")
     (synopsis "Machine-readable date/time with natural parsing")
     (description "DateTime::Format::Natural takes a string with a human
@@ -3306,13 +3237,13 @@ parsing logic.")
         (base32 "0jiy2yc9h9932ykb8x2l1j3ff8ms3p4426m947r5clygis1kr91g"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-datetime" ,perl-datetime)
-       ("perl-datetime-locale" ,perl-datetime-locale)
-       ("perl-datetime-timezone" ,perl-datetime-timezone)
-       ("perl-package-deprecationmanager" ,perl-package-deprecationmanager)
-       ("perl-params-validate" ,perl-params-validate)
-       ("perl-sub-name" ,perl-sub-name)
-       ("perl-test-warnings" ,perl-test-warnings)))
+     (list perl-datetime
+           perl-datetime-locale
+           perl-datetime-timezone
+           perl-package-deprecationmanager
+           perl-params-validate
+           perl-sub-name
+           perl-test-warnings))
     (home-page "https://metacpan.org/release/DateTime-Format-Strptime")
     (synopsis "Parse and format strp and strf time patterns")
     (description "This module implements most of `strptime(3)`, the POSIX
@@ -3335,18 +3266,17 @@ takes a string and a pattern and returns the `DateTime` object associated.")
          "05f0jchminv5g2nrvsx5v1ihc5919fzzhh4f82dxi5ns8bkq2nis"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-file-sharedir" ,perl-file-sharedir)
-       ("perl-ipc-system-simple" ,perl-ipc-system-simple)
-       ("perl-test-file-sharedir-dist" ,perl-test-file-sharedir-dist)
-       ("perl-test-warnings" ,perl-test-warnings)
-       ("perl-test-requires" ,perl-test-requires)
-       ("perl-namespace-autoclean" ,perl-namespace-autoclean)
-       ("perl-file-sharedir-install" ,perl-file-sharedir-install)
-       ("perl-cpan-meta-check" ,perl-cpan-meta-check)
-       ("perl-module-build" ,perl-module-build)))
+     (list perl-file-sharedir
+           perl-ipc-system-simple
+           perl-test-file-sharedir-dist
+           perl-test-warnings
+           perl-test-requires
+           perl-namespace-autoclean
+           perl-file-sharedir-install
+           perl-cpan-meta-check
+           perl-module-build))
     (propagated-inputs
-     `(("perl-list-moreutils" ,perl-list-moreutils)
-       ("perl-params-validationcompiler" ,perl-params-validationcompiler)))
+     (list perl-list-moreutils perl-params-validationcompiler))
     (home-page "https://metacpan.org/release/DateTime-Locale")
     (synopsis "Localization support for DateTime.pm")
     (description "The DateTime::Locale modules provide localization data for
@@ -3378,17 +3308,16 @@ the DateTime.pm class.")
                                "';")))
              #t)))))
     (native-inputs
-     `(("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-requires" ,perl-test-requires)))
+     (list perl-test-fatal perl-test-requires))
     (inputs
-     `(("tzdata" ,tzdata)))
-    (propagated-inputs
-     `(("perl-class-singleton" ,perl-class-singleton)
-       ("perl-list-allutils" ,perl-list-allutils)
-       ("perl-module-runtime" ,perl-module-runtime)
-       ("perl-namespace-autoclean" ,perl-namespace-autoclean)
-       ("perl-params-validationcompiler" ,perl-params-validationcompiler)
-       ("perl-try-tiny" ,perl-try-tiny)))
+     (list tzdata))
+    (propagated-inputs
+     (list perl-class-singleton
+           perl-list-allutils
+           perl-module-runtime
+           perl-namespace-autoclean
+           perl-params-validationcompiler
+           perl-try-tiny))
     (home-page "https://metacpan.org/release/DateTime-TimeZone")
     (synopsis "Time zone object for Perl")
     (description "This class is the base class for all time zone objects.  A
@@ -3413,13 +3342,11 @@ DateTime::TimeZone methods.")
          "0ybs9175h4s39x8a23ap129cgqwmy6w7psa86194jq5cww1d5rhp"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-most" ,perl-test-most)))
+     (list perl-test-most))
     (propagated-inputs
-     `(("perl-datetime" ,perl-datetime)
-       ("perl-datetime-format-flexible" ,perl-datetime-format-flexible)
-       ("perl-datetime-format-ical" ,perl-datetime-format-ical)
-       ("perl-datetime-format-natural" ,perl-datetime-format-natural)
-       ("perl-timedate" ,perl-timedate)))
+     (list perl-datetime perl-datetime-format-flexible
+           perl-datetime-format-ical perl-datetime-format-natural
+           perl-timedate))
     (home-page "https://metacpan.org/release/DateTimeX-Easy")
     (synopsis "Parse date/time strings")
     (description "DateTimeX::Easy uses a variety of DateTime::Format packages
@@ -3440,8 +3367,7 @@ edges (mainly concerning timezone detection and selection).")
                 "1c7wapbi9g9p2za52l3skhh31vg4da5kx2yfqzsqyf3p8iff7y4d"))))
     (build-system perl-build-system)
     (inputs
-     `(("perl-datetime" ,perl-datetime)
-       ("perl-params-validate" ,perl-params-validate)))
+     (list perl-datetime perl-params-validate))
     (home-page "https://metacpan.org/release/DateTime-Format-Mail")
     (synopsis "Convert between DateTime and RFC2822/822 formats")
     (description "RFCs 2822 and 822 specify date formats to be used by email.
@@ -3461,10 +3387,9 @@ This module parses and emits such dates.")
                 "0s32lb1k80p3b3sb7w234zgxnrmadrwbcg41lhaal7dz3dk2p839"))))
     (build-system perl-build-system)
     (inputs
-     `(("perl-datetime" ,perl-datetime)))
+     (list perl-datetime))
     (native-inputs
-     `(("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+     (list perl-test-pod perl-test-pod-coverage))
     (home-page "https://metacpan.org/release/DateTime-Format-W3CDTF")
     (synopsis "Parse and format W3CDTF datetime strings")
     (description
@@ -3489,12 +3414,9 @@ the appropriate objects.")
         "1p0ij2k2i81zhl7064h9ghld1w5xy2zsbghkpdzm2hjryl5lwn2x"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+     (list perl-module-build perl-test-pod perl-test-pod-coverage))
     (propagated-inputs
-     `(("perl-b-hooks-op-check" ,perl-b-hooks-op-check)
-       ("perl-dynaloader-functions" ,perl-dynaloader-functions)))
+     (list perl-b-hooks-op-check perl-dynaloader-functions))
     (home-page "https://metacpan.org/release/Devel-CallChecker")
     (synopsis "Custom op checking attached to subroutines")
     (description "This module makes some new features of the Perl
@@ -3521,7 +3443,7 @@ functions available.")
          "1pxpimifzmnjnvf4icclx77myc15ahh0k56sj1djad1855mawwva"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-padwalker" ,perl-padwalker)))
+     (list perl-padwalker))
     (home-page "https://metacpan.org/release/Devel-Caller")
     (synopsis "Meatier version of caller")
     (description "Devel::Caller provides meatier version of caller.")
@@ -3540,7 +3462,7 @@ functions available.")
         (base32
          "1r735yzgvsxkj4m6ks34xva5m21cfzp9qiis2d4ivv99kjskszqm"))))
     (build-system perl-build-system)
-    (native-inputs `(("perl-module-build" ,perl-module-build)))
+    (native-inputs (list perl-module-build))
     (home-page "https://metacpan.org/release/Devel-CheckBin")
     (synopsis "Check that a command is available")
     (description "Devel::CheckBin is a perl module that checks whether a
@@ -3560,8 +3482,7 @@ particular command is available.")
         (base32 "15621qh5gaan1sgmk9y9svl70nm8viw17x5h1kf0zknkk8lmw77j"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-capture-tiny" ,perl-capture-tiny)
-       ("perl-mock-config" ,perl-mock-config)))
+     (list perl-capture-tiny perl-mock-config))
     (home-page "https://metacpan.org/release/Devel-CheckLib")
     (synopsis "Check that a library is available")
     (description
@@ -3584,7 +3505,7 @@ particular results.")
               "1db973a4dbyknjxq608hywil5ai6vplnayshqxrd7m5qnjbpd2vn"))))
   (build-system perl-build-system)
   (native-inputs
-   `(("perl-module-build-tiny" ,perl-module-build-tiny)))
+   (list perl-module-build-tiny))
   (home-page "https://metacpan.org/release/Devel-CheckCompiler")
   (synopsis "Check compiler availability")
   (description "@code{Devel::CheckCompiler} is a tiny module to check
@@ -3630,7 +3551,7 @@ based memory management, circular references will cause memory leaks.")
          "1aslj6myylsvzr0vpqry1cmmvzbmpbdcl4v9zrl18ccik7rabf1l"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-sub-exporter-progressive" ,perl-sub-exporter-progressive)))
+     (list perl-sub-exporter-progressive))
     (home-page "https://metacpan.org/release/Devel-GlobalDestruction")
     (synopsis "Provides equivalent of ${^GLOBAL_PHASE} eq 'DESTRUCT' for older perls")
     (description "Devel::GlobalDestruction provides a function returning the
@@ -3650,8 +3571,7 @@ equivalent of \"$@{^GLOBAL_PHASE@} eq 'DESTRUCT'\" for older perls.")
         (base32 "10jyv9nmv513hs75rls5yx2xn82513xnnhjir3dxiwgb1ykfyvvm"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+     (list perl-test-pod perl-test-pod-coverage))
     (home-page "https://metacpan.org/release/Devel-Hide")
     (synopsis "Forces the unavailability of specified Perl modules (for testing)")
     (description "Given a list of Perl modules/filenames, this module makes
@@ -3693,7 +3613,7 @@ allocating perl data and not releasing them again.")
          "0wpfpjqlrncslnmxa37494sfdy0901510kj2ds2k6q167vadj2jy"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-devel-caller" ,perl-devel-caller)))
+     (list perl-devel-caller))
     (home-page "https://metacpan.org/release/Devel-LexAlias")
     (synopsis "Alias lexical variables")
     (description "Devel::LexAlias provides the ability to alias a lexical
@@ -3714,11 +3634,9 @@ variable in a subroutines scope to one of your choosing.")
          "1rx6g8pyhi7lx6z130b7vlf8syzrq92w9ky8mpw4d6bwlkzy5zcb"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-fatal" ,perl-test-fatal)))
+     (list perl-test-fatal))
     (propagated-inputs
-     `(("perl-package-stash" ,perl-package-stash)
-       ("perl-sub-identify" ,perl-sub-identify)
-       ("perl-mro-compat" ,perl-mro-compat)))
+     (list perl-package-stash perl-sub-identify perl-mro-compat))
     (home-page "https://metacpan.org/release/Devel-OverloadInfo")
     (synopsis "Introspect overloaded operators")
     (description "Devel::OverloadInfo returns information about overloaded
@@ -3740,13 +3658,9 @@ hierarchy the overloads are declared and where the code implementing it is.")
          "0i1khiyi4h4h8vfwn7xip5c53z2hb2rk6407f3csvrdsiibvy53q"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build-tiny" ,perl-module-build-tiny)
-       ("perl-test-warn" ,perl-test-warn)
-       ("perl-test-simple" ,perl-test-simple)))
+     (list perl-module-build-tiny perl-test-warn perl-test-simple))
     (propagated-inputs
-     `(("perl-class-tiny" ,perl-class-tiny)
-       ("perl-sub-exporter" ,perl-sub-exporter)
-       ("perl-namespace-clean" ,perl-namespace-clean)))
+     (list perl-class-tiny perl-sub-exporter perl-namespace-clean))
     (home-page "https://metacpan.org/release/Devel-PartialDump")
     (synopsis "Partial dumping of data structures")
     (description "This module is a data dumper optimized for logging of
@@ -3787,7 +3701,7 @@ providing a simple interface to this data.")
          "0iri5nb2lb76qv5l9z0vjpfrq5j2fyclkd64kh020bvy37idp0v2"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-devel-stacktrace" ,perl-devel-stacktrace)))
+     (list perl-devel-stacktrace))
     (home-page "https://metacpan.org/release/Devel-StackTrace-AsHTML")
     (synopsis "Displays stack trace in HTML")
     (description "Devel::StackTrace::AsHTML adds as_html method to
@@ -3952,9 +3866,9 @@ SHA-1 message digest algorithm for use by Perl programs.")
                (base32
                 "1i7dr9jpdiy2nijl2p4q5zg2q2s9ckbj2hs4kmnnckf9hsb4p17a"))))
     (build-system perl-build-system)
-    (native-inputs `(("perl-test-fatal" ,perl-test-fatal)))
+    (native-inputs (list perl-test-fatal))
     (propagated-inputs
-     `(("perl-module-runtime" ,perl-module-runtime)))
+     (list perl-module-runtime))
     (home-page "https://metacpan.org/release/Dist-CheckConflicts")
     (synopsis "Declare version conflicts for your dist")
     (description "This module allows you to specify conflicting versions of
@@ -3976,9 +3890,7 @@ modules separately and deal with them after the module is done installing.")
         "10x13q920j9kid7vmbj6fiaz153042dy4mwdmpzrdrxw2ir39ciy"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+     (list perl-module-build perl-test-pod perl-test-pod-coverage))
     (home-page "https://metacpan.org/release/DynaLoader-Functions")
     (synopsis "Deconstructed dynamic C library loading")
     (description "This module provides a function-based interface to
@@ -4000,9 +3912,7 @@ the programmer to be mindfulof the space of platform variations.")
         (base32 "1a8rwcrxxhq81jcdvdwns05c65jwr5r6bxvby6vdcr3ny5m91my2"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-exporter" ,perl-exporter)
-       ("perl-storable" ,perl-storable)
-       ("perl-parent" ,perl-parent)))
+     (list perl-exporter perl-storable perl-parent))
     (home-page "https://metacpan.org/dist/Encode")
     (synopsis "Character encodings in Perl")
     (description "Encode module provides the interface between Perl strings and
@@ -4023,7 +3933,7 @@ the rest of the system.  Perl strings are sequences of characters.")
          "1wdv9ffgs4xyfh5dnh09dqkmmlbf5m1hxgdgb3qy6v6vlwx8jkc3"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (home-page "https://metacpan.org/release/Encode-Detect")
     (synopsis "Detect the encoding of data")
     (description "This package provides a class @code{Encode::Detect} to detect
@@ -4129,7 +4039,7 @@ separator.")
                (base32
                 "0q796nwwiarfc6pga97380c9z8xva5545632001qj75kb1g5rn1s"))))
     (build-system perl-build-system)
-    (native-inputs `(("perl-module-build" ,perl-module-build)))
+    (native-inputs (list perl-module-build))
     (home-page "https://metacpan.org/release/Error")
     (synopsis "OO-ish Error/Exception handling for Perl")
     (description "The Error package provides two interfaces.  Firstly Error
@@ -4152,10 +4062,9 @@ catch, or can simply be recorded.")
          "1bcc47r6zm3hfr6ccsrs72kgwxm3wkk07mgnpsaxi67cypr482ga"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-requires" ,perl-test-requires)))
+     (list perl-test-fatal perl-test-requires))
     (propagated-inputs
-     `(("perl-devel-lexalias" ,perl-devel-lexalias)))
+     (list perl-devel-lexalias))
     (home-page "https://metacpan.org/release/Eval-Closure")
     (synopsis "Safely and cleanly create closures via string eval")
     (description "String eval is often used for dynamic code generation.  For
@@ -4196,8 +4105,7 @@ errors are rethrown automatically.")
                              ,(string-append out "/lib/perl5/site_perl"))))
                         #t))))))
     (propagated-inputs
-     `(("perl-moo" ,perl-moo)
-       ("perl-strictures" ,perl-strictures)))
+     (list perl-moo perl-strictures))
     (home-page "https://metacpan.org/release/Eval-WithLexicals")
     (synopsis "Lexical scope evaluation library for Perl")
     (description "The Eval::WithLexicals Perl library provides support for
@@ -4219,8 +4127,7 @@ command, which can be used as a minimal Perl read-eval-print loop (REPL).")
          "03gf4cdgrjnljgrlxkvbh2cahsyzn0zsh2zcli7b1lrqn7wgpwrk"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-devel-stacktrace" ,perl-devel-stacktrace)
-       ("perl-class-data-inheritable" ,perl-class-data-inheritable)))
+     (list perl-devel-stacktrace perl-class-data-inheritable))
     (home-page "https://metacpan.org/release/Exception-Class")
     (synopsis "Allows you to declare real exception classes in Perl")
     (description "Exception::Class allows you to declare exception hierarchies
@@ -4240,9 +4147,9 @@ in your modules in a \"Java-esque\" manner.")
         (base32 "1f25k5iaygiizlrkbbl6wxd647pwfmynykxalq6r9bbkysg8inza"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-pod" ,perl-test-pod)))
+     (list perl-test-pod))
     (propagated-inputs
-     `(("perl-carp" ,perl-carp)))
+     (list perl-carp))
     (home-page "https://metacpan.org/dist/Exporter")
     (synopsis "Default import method for modules")
     (description "Exporter implements an import method which allows a module to
@@ -4328,7 +4235,7 @@ maniread, maniskip, manicopy, maniadd.")
          "1v9lshfhm9ck4p0v77arj5f7haj1mmkqal62lgzzvcds6wq5www4"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-extutils-config" ,perl-extutils-config)))
+     (list perl-extutils-config))
     (home-page "https://metacpan.org/release/ExtUtils-InstallPaths")
     (synopsis "Build.PL install path logic made easy")
     (description "This module tries to make install path resolution as easy as
@@ -4371,10 +4278,9 @@ it ties together a family of modern toolchain modules.")
             "0q9ynigk600fv95xac6aslrg2k19m6qbzf5hqfsnall8113r3gqj"))))
     (build-system perl-build-system)
     (native-inputs
-      `(("perl-capture-tiny" ,perl-capture-tiny)
-        ("perl-module-build" ,perl-module-build)))
+      (list perl-capture-tiny perl-module-build))
     (propagated-inputs
-      `(("perl-capture-tiny" ,perl-capture-tiny)))
+      (list perl-capture-tiny))
     (home-page
       "https://metacpan.org/release/ExtUtils-CppGuess")
     (synopsis "Tool for guessing C++ compiler and flags")
@@ -4395,7 +4301,7 @@ is compatible with the C compiler used to build perl.")
                 "0b4ab9qmcihsfs2ajhn5qzg7nhazr68v3r0zvb7076smswd41mla"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-number-delta" ,perl-test-number-delta)))
+     (list perl-test-number-delta))
     (home-page "https://metacpan.org/release/ExtUtils-Depends")
     (synopsis "Easily build XS extensions that depend on XS extensions")
     (description
@@ -4438,7 +4344,7 @@ module building modules.")
          "1lmmfcjxvsvhn4f3v2lyylgr8dzcf5j7mnd1pkq3jc75dph724f5"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (home-page "https://metacpan.org/release/ExtUtils-LibBuilder")
     (synopsis "Tool to build C libraries")
     (description "Some Perl modules need to ship C libraries together with
@@ -4483,7 +4389,7 @@ handle Perl/XS typemap files, and their submodules.")
                 "0vhwh0731rhh1sswmvagq0myn754dnkab8sizh6d3n6pjpcwxsmv"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://metacpan.org/release/ExtUtils-PkgConfig")
     (synopsis "Simplistic interface to pkg-config")
     (description
@@ -4509,7 +4415,7 @@ It is really just boilerplate code that you would have written yourself.")
             "1phmha0ks95kvzl00r1kgnd5hvg7qb1q9jmzjmw01p5zgs1zbyix"))))
     (build-system perl-build-system)
     (native-inputs
-      `(("perl-module-build" ,perl-module-build)))
+      (list perl-module-build))
     (home-page
       "https://metacpan.org/release/ExtUtils-Typemaps-Default")
     (synopsis "Set of useful typemaps")
@@ -4533,9 +4439,7 @@ submodules of ExtUtils::Typemaps.")
             "1zx84f93lkymqz7qa4d63gzlnhnkxm5i3gvsrwkvvqr9cxjasxli"))))
     (build-system perl-build-system)
     (native-inputs
-      `(("perl-module-build" ,perl-module-build)
-        ("perl-test-base" ,perl-test-base)
-        ("perl-test-differences" ,perl-test-differences)))
+      (list perl-module-build perl-test-base perl-test-differences))
     (home-page
       "https://metacpan.org/release/ExtUtils-XSpp")
     (synopsis "XS for C++")
@@ -4557,17 +4461,15 @@ interface XS for C++; it is a thin layer over plain XS.")
          "090i265f73jlcl5rv250791vw32j9vvl4nd5abc7myg0klb8109w"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-exception" ,perl-test-exception)))
+     (list perl-module-build perl-test-exception))
     (propagated-inputs
-     `(("perl-class-load" ,perl-class-load)
-       ("perl-list-moreutils" ,perl-list-moreutils)
-       ("perl-module-pluggable" ,perl-module-pluggable)
-       ("perl-moose" ,perl-moose)
-       ("perl-moosex-params-validate" ,perl-moosex-params-validate)
-       ("perl-moosex-semiaffordanceaccessor"
-        ,perl-moosex-semiaffordanceaccessor)
-       ("perl-namespace-autoclean" ,perl-namespace-autoclean)))
+     (list perl-class-load
+           perl-list-moreutils
+           perl-module-pluggable
+           perl-moose
+           perl-moosex-params-validate
+           perl-moosex-semiaffordanceaccessor
+           perl-namespace-autoclean))
     (home-page "https://metacpan.org/release/File-ChangeNotify")
     (synopsis "Watch for changes to files")
     (description "This module provides a class to monitor a directory for
@@ -4588,9 +4490,7 @@ changes made to any file.")
          "1ihlhdbwaybyj3xqfxpx4ii0ypa41907b6zdh94rvr4wyqa5lh3b"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-file-homedir" ,perl-file-homedir)
-       ("perl-list-moreutils" ,perl-list-moreutils)
-       ("perl-test-without-module" ,perl-test-without-module)))
+     (list perl-file-homedir perl-list-moreutils perl-test-without-module))
     (home-page "https://metacpan.org/release/File-ConfigDir")
     (synopsis "Get directories of configuration files")
     (description "This module is a helper for installing, reading and finding
@@ -4633,8 +4533,7 @@ type.")
          "1znachnhmi1w5pdqx8dzgfa892jb7x8ivrdy4pzjj7zb6g61cvvy"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-text-glob" ,perl-text-glob)
-       ("perl-number-compare" ,perl-number-compare)))
+     (list perl-text-glob perl-number-compare))
     (home-page "https://metacpan.org/release/File-Find-Rule")
     (synopsis "Alternative interface to File::Find")
     (description "File::Find::Rule is a friendlier interface to File::Find.
@@ -4656,9 +4555,7 @@ directories.")
          "19iy8spzrvh71x33b5yi16wjw5jjvs12jvjj0f7f3370hqzl6j4s"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-file-find-rule" ,perl-file-find-rule)
-       ("perl-params-util" ,perl-params-util)
-       ("perl-parse-cpan-meta" ,perl-parse-cpan-meta)))
+     (list perl-file-find-rule perl-params-util perl-parse-cpan-meta))
     (home-page "https://metacpan.org/release/File-Find-Rule-Perl")
     (synopsis "Common rules for searching for Perl things")
     (description "File::Find::Rule::Perl provides methods for finding various
@@ -4703,7 +4600,7 @@ provide a quick dropin when such functionality is needed.")
          "1bciyzwv7gwsnaykqz0czj6mlbkkg4hg1s40s1q7j2p6nlmpxxj5"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-file-which" ,perl-file-which)))
+     (list perl-file-which))
     (arguments `(#:tests? #f))          ;Not appropriate for chroot
     (home-page "https://metacpan.org/release/File-HomeDir")
     (synopsis "Find your home and other directories on any platform")
@@ -4829,7 +4726,7 @@ the input record separator string on a per file basis.")
          "1n6h5w3sp2bs4cfrifdx2z15cfpb4r536179mx1a12xbmj1yrxl1"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (home-page "https://metacpan.org/release/File-Remove")
     (synopsis "Remove files and directories in Perl")
     (description "@code{File::Remove::remove} removes files and directories.
@@ -4851,9 +4748,9 @@ that.  It also accepts wildcards, * and ?, as arguments for file names.")
         (base32 "0a43rfb0a1fpxh4d2dayarkdxw4cx9a2krkk87zmcilcz7yhpnar"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-file-sharedir-install" ,perl-file-sharedir-install)))
+     (list perl-file-sharedir-install))
     (propagated-inputs
-     `(("perl-class-inspector" ,perl-class-inspector)))
+     (list perl-class-inspector))
     (home-page "https://metacpan.org/release/File-ShareDir")
     (synopsis "Locate per-dist and per-module shared files")
     (description "The intent of File::ShareDir is to provide a companion to
@@ -4896,7 +4793,7 @@ distributions.  It is a companion module to File::ShareDir.")
          "1yc0wlkav2l2wr36a53n4mnhsy2zv29z5nm14mygxgjwv7qgvgj5"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (home-page "https://metacpan.org/release/File-ShareDir-Install")
     (synopsis "Install shared files")
     (description "File::ShareDir::Install allows you to install read-only data
@@ -4939,9 +4836,9 @@ file names in a directory.")
          "0y5518ji60yfkx9ggjp309j6g8vfri4ka4zqlsys245i2sj2xysf"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-warnings" ,perl-test-warnings)))
+     (list perl-test-warnings))
     (propagated-inputs
-     `(("perl-perlio-utf8_strict" ,perl-perlio-utf8_strict)))
+     (list perl-perlio-utf8_strict))
     (home-page "https://metacpan.org/release/File-Slurper")
     (synopsis "Simple, sane and efficient module to slurp a file")
     (description "This module provides functions for fast and correct file
@@ -5019,7 +4916,7 @@ shell.")
                 "16v61rn0yimpv5kp6b20z2f1c93n5kpsyjvr0gq4w2dc43gfvc8w"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)))
+     (list perl-module-install))
     (home-page "https://metacpan.org/release/File-Zglob")
     (synopsis "Extended Unix style glob functionality")
     (description "@code{File::Zglob} provides a traditional Unix @code{glob}
@@ -5041,7 +4938,7 @@ For instance, it supports the @code{**/*.pm} form.")
          "18jv96k1pf8wqf4vn2ahs7dv44lc9cyqj0bja9z17qici3dx7qxd"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-sharedfork" ,perl-test-sharedfork)))
+     (list perl-test-sharedfork))
     (home-page "https://metacpan.org/release/Filesys-Notify-Simple")
     (synopsis "Simple and dumb file system watcher")
     (description
@@ -5093,12 +4990,9 @@ single-letter approach, is provided but not enabled by default.")
          "1cpl240qxmh7jf85ai9sfkp3nzm99syya4jxidizp7aa83kvmqbh"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-cpan-meta-check" ,perl-cpan-meta-check)
-       ("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-warnings" ,perl-test-warnings)))
+     (list perl-cpan-meta-check perl-test-fatal perl-test-warnings))
     (propagated-inputs
-     `(("perl-params-validate" ,perl-params-validate)
-       ("perl-sub-exporter" ,perl-sub-exporter)))
+     (list perl-params-validate perl-sub-exporter))
     (home-page "https://metacpan.org/release/Getopt-Long-Descriptive")
     (synopsis "Getopt::Long, but simpler and more powerful")
     (description "Getopt::Long::Descriptive is yet another Getopt library.
@@ -5126,6 +5020,25 @@ vaguely inspired by John Ousterhout's Tk_ParseArgv.")
     (home-page "https://metacpan.org/release/Getopt-Tabular")
     (license (package-license perl))))
 
+(define-public perl-gettext
+  (package
+    (name "perl-gettext")
+    (version "1.07")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://cpan/authors/id/P/PV/PVANDRY"
+                                  "/gettext-" version ".tar.gz"))
+              (sha256
+               (base32
+                "05cwqjxxary11di03gg3fm6j9lbvg1dr2wpr311c1rwp8salg7ch"))))
+    (build-system perl-build-system)
+    (home-page "https://metacpan.org/release/gettext")
+    (synopsis "Perl bindings for POSIX i18n gettext functions")
+    (description
+     "Locale::gettext provides an object oriented interface to the
+internationalization functions provided by the C library.")
+    (license license:perl-license)))
+
 (define-public perl-graph
   (package
     (name "perl-graph")
@@ -5194,8 +5107,7 @@ which are tied to the scope exit.")
                                     (getenv "PERL5LIB")))
              #t)))))
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-leaktrace" ,perl-test-leaktrace)))
+     (list perl-module-build perl-test-leaktrace))
     (home-page "https://metacpan.org/release/Hash-FieldHash")
     (synopsis "Lightweight field hash for inside-out objects")
     (description "@code{Hash::FieldHash} provides the field hash mechanism
@@ -5218,10 +5130,9 @@ relic support.")
     (build-system perl-build-system)
     (native-inputs
      ;; For tests only.
-     `(("perl-clone" ,perl-clone)
-       ("perl-clone-pp" ,perl-clone-pp)))
+     (list perl-clone perl-clone-pp))
     (propagated-inputs
-     `(("perl-clone-choose" ,perl-clone-choose)))
+     (list perl-clone-choose))
     (home-page "https://metacpan.org/release/Hash-Merge")
     (synopsis "Merge arbitrarily deep hashes into a single hash")
     (description "Hash::Merge merges two arbitrarily deep hashes into a single
@@ -5311,7 +5222,7 @@ variables.")
          "0rq5kz7c270q33jq6hnrv3xgkvajsc62ilqq7fs40av6zfipg7mx"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-module-runtime" ,perl-module-runtime)))
+     (list perl-module-runtime))
     (home-page "https://metacpan.org/release/Import-Into")
     (synopsis "Import packages into other packages")
     (description "Writing exporters is a pain.  Some use Exporter, some use
@@ -5376,7 +5287,7 @@ inc directory within a distribution and are used by Makefile.PL or Build.PL.")
        "0fhyspkg2ka7yz7kbq8a028hj0chfc7qqkl7n20dpc0is3i7s2ji"))))
    (build-system perl-build-system)
    (native-inputs
-    `(("perl-test-warn" ,perl-test-warn)))
+    (list perl-test-warn))
    (home-page "https://metacpan.org/release/Inline")
    (synopsis "Write Perl subroutines in other programming languages")
    (description "The @code{Inline} module allows you to put source code
@@ -5399,15 +5310,22 @@ for immediate access from Perl.")
         (base32
          "1b3sr39813di3j1kwbgn1xq2z726rhjjdw809ydzgmshj26jb1gi"))))
     (build-system perl-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-paths
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((make (assoc-ref inputs "make")))
+             (substitute* "lib/Inline/C.pm"
+               (("'\"make\"'")
+                (string-append "'\"" make "/bin/make\"'"))
+               (("'\"make install\"'")
+                (string-append "'\"" make "/bin/make install\"'")))))))))
     (native-inputs
-     `(("perl-file-copy-recursive" ,perl-file-copy-recursive)
-       ("perl-file-sharedir-install" ,perl-file-sharedir-install)
-       ("perl-test-warn" ,perl-test-warn)
-       ("perl-yaml-libyaml" ,perl-yaml-libyaml)))
+     (list perl-file-copy-recursive perl-file-sharedir-install
+           perl-test-warn perl-yaml-libyaml))
     (propagated-inputs
-     `(("perl-inline" ,perl-inline)
-       ("perl-parse-recdescent" ,perl-parse-recdescent)
-       ("perl-pegex" ,perl-pegex)))
+     (list perl-inline perl-parse-recdescent perl-pegex))
     (home-page "https://metacpan.org/release/Inline-C")
     (synopsis "C Language Support for Inline")
     (description "The @code{Inline::C} module allows you to write Perl
@@ -5433,8 +5351,7 @@ It also goes a bit into Perl C internals.")
          "0nsd9knlbd7if2v6zwj4q978axq0w5hk8ymp61z14a821hjivqjl"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-file-mimeinfo" ,perl-file-mimeinfo)
-       ("perl-file-readbackwards" ,perl-file-readbackwards)))
+     (list perl-file-mimeinfo perl-file-readbackwards))
     (home-page "https://metacpan.org/release/IO-All")
     (synopsis "@code{IO::All} to Larry Wall!")
     (description "@code{IO::All} combines all of the best Perl IO modules into
@@ -5510,9 +5427,9 @@ and busy().")
                 (which "less")))
              #t)))))
     (propagated-inputs
-     `(("perl-file-which" ,perl-file-which)))
+     (list perl-file-which))
     (inputs
-     `(("less" ,less)))
+     (list less))
     (home-page "https://metacpan.org/release/IO-Pager")
     (synopsis "Select a pager and pipe text to it")
     (description
@@ -5610,7 +5527,7 @@ run interactively.  It also has an option to capture output/error buffers.")
         (base32 "0bvckcs1629ifqfb68xkapd4a74fd5qbg6z9qs8i6rx4z3nxfl1q"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-io-tty" ,perl-io-tty)))
+     (list perl-io-tty))
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (add-before
@@ -5708,7 +5625,7 @@ commands.")
          "0z32x2lijij28c9fhmzgxc41i9nw24fyvd2a8ajs5zw9b9sqhjj4"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-json-xs" ,perl-json-xs))) ;recommended
+     (list perl-json-xs)) ;recommended
     (home-page "https://metacpan.org/release/JSON")
     (synopsis "JSON encoder/decoder for Perl")
     (description "This module converts Perl data structures to JSON and vice
@@ -5729,12 +5646,10 @@ versa using either JSON::XS or JSON::PP.")
          "1hspg6khjb38syn59cysnapc1q77qgavfym3fqr6l2kiydf7ajdf"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-requires" ,perl-test-requires)
-       ("perl-test-warnings" ,perl-test-warnings)
-       ("perl-test-without-module" ,perl-test-without-module)))
+     (list perl-test-fatal perl-test-requires perl-test-warnings
+           perl-test-without-module))
     (propagated-inputs
-     `(("perl-namespace-clean" ,perl-namespace-clean)))
+     (list perl-namespace-clean))
     (home-page "https://metacpan.org/release/JSON-Any")
     (synopsis "Wrapper for Perl JSON classes")
     (description
@@ -5758,9 +5673,9 @@ installed.")
          "1grg8saa318bs4x2wqnww7y0nra7azrzg35bk5pgvkwxzwbkpvjv"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-needs" ,perl-test-needs)))
+     (list perl-test-needs))
     (inputs
-     `(("perl-cpanel-json-xs" ,perl-cpanel-json-xs)))
+     (list perl-cpanel-json-xs))
     (home-page "https://metacpan.org/release/JSON-MaybeXS")
     (synopsis "Cpanel::JSON::XS with fallback")
     (description "This module first checks to see if either Cpanel::JSON::XS
@@ -5783,10 +5698,9 @@ either uses the first module it finds or throws an error.")
          "0118yrzagwlcfj5yldn3h23zzqs2rx282jlm068nf7fjlvy4m7s7"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-canary-stability" ,perl-canary-stability)))
+     (list perl-canary-stability))
     (propagated-inputs
-     `(("perl-common-sense" ,perl-common-sense)
-       ("perl-types-serialiser" ,perl-types-serialiser)))
+     (list perl-common-sense perl-types-serialiser))
     (home-page "https://metacpan.org/release/JSON-XS")
     (synopsis "JSON serialising/deserialising for Perl")
     (description "This module converts Perl data structures to JSON and vice
@@ -5809,7 +5723,7 @@ versa.")
          "0fh1arpr0hsj7skbn97yfvbk22pfcrpcvcfs15p5ss7g338qx4cy"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (home-page "https://metacpan.org/release/Lexical-SealRequireHints")
     (synopsis "Prevent leakage of lexical hints")
     (description
@@ -5829,12 +5743,12 @@ versa.")
         (base32 "0z6w3m6f3r29ljicdigsyvpa9w9j2m65l4gjxcw0wgwdll26ngxp"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-html-parser" ,perl-html-parser)
-       ("perl-lingua-en-sentence" ,perl-lingua-en-sentence)
-       ("perl-ppi" ,perl-ppi)
-       ("perl-template-toolkit" ,perl-template-toolkit)
-       ("perl-text-haml" ,perl-text-haml)
-       ("perl-yaml" ,perl-yaml)))
+     (list perl-html-parser
+           perl-lingua-en-sentence
+           perl-ppi
+           perl-template-toolkit
+           perl-text-haml
+           perl-yaml))
     (home-page "https://metacpan.org/release/Locale-Maketext-Lexicon")
     (synopsis "Use other catalog formats in Maketext")
     (description
@@ -5888,8 +5802,7 @@ logging mechanism.")
          "19f1drqnzr6g4xwjm6jk4iaa3zmiax8bzxqch04f4jr12bjd75qi"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-log-any" ,perl-log-any)
-       ("perl-log-log4perl" ,perl-log-log4perl)))
+     (list perl-log-any perl-log-log4perl))
     (home-page
      "https://metacpan.org/release/Log-Any-Adapter-Log4perl")
     (synopsis "Log::Any adapter for Log::Log4perl")
@@ -5916,7 +5829,7 @@ logging mechanism.")
 throughout programs and projects.  Every message will be logged with
 stacktraces, timestamps and so on.  You can use built-in handlers
 immediately, or after the fact when you inspect the error stack.  It
-is highly configurable and let's you even provide your own handlers
+is highly configurable and lets you even provide your own handlers
 for dealing with messages.")
    (license (package-license perl))))
 
@@ -5935,7 +5848,7 @@ for dealing with messages.")
        "15nxi935nfrf8dkdrgvcrf2qlai4pbz03yj8sja0n9mcq2jd24ma"))))
    (build-system perl-build-system)
    (inputs
-    `(("perl-log-message" ,perl-log-message)))
+    (list perl-log-message))
    (home-page "https://metacpan.org/release/Log-Message-Simple")
    (synopsis "Simplified interface to @code{Log::Message}")
    (description "This package provides a simplified frontend to
@@ -5979,7 +5892,7 @@ widely popular (Java-based) Log4j logging package in pure Perl.")
                 "11ciiaq8vy186m7mzj8pcncwi8p9qp13wblvk427g1pnqjzlda0g"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-string-print" ,perl-string-print)))
+     (list perl-string-print))
     (home-page "https://metacpan.org/release/Log-Report-Optional")
     (synopsis "Log::Report in the lightest form")
     (description
@@ -6004,9 +5917,8 @@ version.")
                 "1jjx1ari3a7ixsyan91b6n7lmjq6dy5223k3x2ah18qbxvw4caap"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-devel-globaldestruction" ,perl-devel-globaldestruction)
-       ("perl-log-report-optional" ,perl-log-report-optional)
-       ("perl-string-print" ,perl-string-print)))
+     (list perl-devel-globaldestruction perl-log-report-optional
+           perl-string-print))
     (home-page "https://metacpan.org/release/Log-Report")
     (synopsis "Get messages to users and logs")
     (description
@@ -6036,7 +5948,7 @@ one: logging, exceptions, and translations.")
                                                (getenv "PERL5LIB")))
              #t)))))
     (propagated-inputs
-     `(("perl-file-sharedir" ,perl-file-sharedir)))
+     (list perl-file-sharedir))
     (home-page "https://metacpan.org/release/libintl-perl")
     (synopsis "High-level interface to Uniforum message translation")
     (description "This package is an internationalization library for Perl
@@ -6057,7 +5969,7 @@ implemented for example in GNU gettext.")
         (base32 "11hlg92khd2azbxndnffsj9lggbxb3lqfdbwc6asr1c9lxlqddms"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (home-page "https://metacpan.org/release/Lingua-EN-Sentence")
     (synopsis "Split text into sentences")
     (description
@@ -6101,7 +6013,7 @@ tables.  Where possible a reverse transliteration is supported.")
          "0crlxmaa4lsgdjm5p9ib8rdxiy70qj1s68za3q3v57v8ll6s4hfx"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-common-sense" ,perl-common-sense)))
+     (list perl-common-sense))
     (home-page "https://metacpan.org/release/Linux-Inotify2")
     (synopsis "Scalable file change notification")
     (description "This module implements an interface to the Linux 2.6.13 and
@@ -6122,10 +6034,9 @@ later Inotify file change notification system.")
          "1qmfpmly0pghc94k6ifnd1vwzlv8nks27qkqs6h4p7vcricn7zjc"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-warnings" ,perl-test-warnings)))
+     (list perl-test-warnings))
     (propagated-inputs
-     `(("perl-list-moreutils" ,perl-list-moreutils)
-       ("perl-scalar-list-utils" ,perl-scalar-list-utils)))
+     (list perl-list-moreutils perl-scalar-list-utils))
     (home-page "https://metacpan.org/release/List-AllUtils")
     (synopsis "Combination of List::Util and List::MoreUtils")
     (description "This module exports all of the functions that either
@@ -6148,7 +6059,7 @@ List::Util or List::MoreUtils defines, with preference to List::Util.")
          "0l451yqhx1hlm7f2c3bjsl3n8w6l1jngrxzyfm2d8d9iggv4zgzx"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-io-captureoutput" ,perl-io-captureoutput)))
+     (list perl-io-captureoutput))
     (home-page "https://metacpan.org/release/List-Compare")
     (synopsis "Compare elements of two or more lists")
     (description "@code{List::Compare} provides a module to perform
@@ -6179,11 +6090,9 @@ intersections, unions, unique elements, complements and many more.")
                                     (getenv "PERL5LIB")))
              #t)))))
     (native-inputs
-     `(("perl-config-autoconf" ,perl-config-autoconf)
-       ("perl-test-leaktrace" ,perl-test-leaktrace)))
+     (list perl-config-autoconf perl-test-leaktrace))
     (propagated-inputs
-     `(("perl-exporter-tiny" ,perl-exporter-tiny)
-       ("perl-list-moreutils-xs" ,perl-list-moreutils-xs)))
+     (list perl-exporter-tiny perl-list-moreutils-xs))
     (home-page "https://metacpan.org/release/List-MoreUtils")
     (synopsis "Provide the stuff missing in List::Util")
     (description "List::MoreUtils provides some trivial but commonly needed
@@ -6203,9 +6112,7 @@ functionality on lists which is not going to go into List::Util.")
         (base32 "0hmjkhmk1qlzbg8skq7g1zral07k1x0fk4w2fpcfr7hpgkaldkp8"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-config-autoconf" ,perl-config-autoconf)
-       ("perl-inc-latest" ,perl-inc-latest)
-       ("perl-test-leaktrace" ,perl-test-leaktrace)))
+     (list perl-config-autoconf perl-inc-latest perl-test-leaktrace))
     (home-page "https://metacpan.org/release/List-MoreUtils-XS")
     (synopsis "Provide the stuff missing in List::Util in XS")
     (description "@code{List::MoreUtils::XS} provides some trivial but
@@ -6228,11 +6135,9 @@ commonly needed functionality on lists which is not going to go into
         (base32 "1xw9dzg949997b10y6zgzrmhmk2ap274qivnk0wc1033x2fdk9za"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-leaktrace" ,perl-test-leaktrace)))
+     (list perl-test-leaktrace))
     (inputs
-     `(("perl-exporter-tiny" ,perl-exporter-tiny)
-       ("perl-module-implementation"
-        ,perl-module-implementation)))
+     (list perl-exporter-tiny perl-module-implementation))
     (home-page "https://metacpan.org/release/List-SomeUtils")
     (synopsis "Provide the stuff missing in List::Util")
     (description "@code{List::SomeUtils} provides some trivial but commonly
@@ -6261,7 +6166,7 @@ portions of this module couldn't be compiled on this machine.")
          "1js43bp2dnd8n2rv8clsv749166jnyqnc91k4wkkmw5n4rlbvnaa"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-timedate" ,perl-timedate)))
+     (list perl-timedate))
     (home-page
      "https://metacpan.org/release/MailTools")
     (synopsis "Bundle of ancient email modules")
@@ -6424,8 +6329,7 @@ the argument to the CACHESIZE parameter, will be cached.")
         (base32 "05v04kjaz2ya0zaj4m64gzxpfv4vgxhw5n5h12z373gbg9pkvxvp"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-exporter" ,perl-exporter)
-       ("perl-xsloader" ,perl-xsloader)))
+     (list perl-exporter perl-xsloader))
     (home-page "https://metacpan.org/dist/MIME-Base64")
     (synopsis "Encoding and decoding of base64 strings")
     (description "MIME::Base64 module provides functions to encode and decode
@@ -6471,11 +6375,11 @@ MIME messages on Internet.")
          "0wv9rzx5j1wjm01c3dg48qk9wlbm6iyf91j536idk09xj869ymv4"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-deep" ,perl-test-deep)))
+     (list perl-test-deep))
     (inputs
-     `(("perl-convert-binhex" ,perl-convert-binhex)))
+     (list perl-convert-binhex))
     (propagated-inputs
-     `(("perl-mailtools" ,perl-mailtools)))
+     (list perl-mailtools))
     (home-page
      "https://metacpan.org/release/MIME-tools")
     (synopsis "Tools to manipulate MIME messages")
@@ -6519,8 +6423,7 @@ knowledge of Apache.")
                 "1wmfr19w9y8qys7b32mnj1vmps7qwdahqas71a9p62ac8xw0dwkx"))))
     (build-system perl-build-system)
     (inputs
-     `(("perl-perlio-utf8_strict" ,perl-perlio-utf8_strict)
-       ("perl-sub-exporter" ,perl-sub-exporter)))
+     (list perl-perlio-utf8_strict perl-sub-exporter))
     (home-page "https://metacpan.org/release/Mixin-Linewise")
     (synopsis "Write your linewise code for handles; this does the rest")
     (description "It's boring to deal with opening files for IO, converting
@@ -6544,7 +6447,7 @@ file names are added for you.")
         (base32 "1064k29aavabxj8m20b65rxk7qa3mjmzgmrikvdrxasgx378676s"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (home-page
      "https://metacpan.org/release/Modern-Perl")
     (synopsis
@@ -6567,15 +6470,11 @@ multiple, by now, standard libraries in a Perl program.")
          "077ijxbvamybph4ymamy1i9q2993xb46vf1npxaybjz0mkv0yn3x"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-extutils-installpaths" ,perl-extutils-installpaths)
-       ("perl-extutils-config" ,perl-extutils-config)
-       ("perl-extutils-helpers" ,perl-extutils-helpers)
-       ("perl-test-harness" ,perl-test-harness)))
+     (list perl-extutils-installpaths perl-extutils-config
+           perl-extutils-helpers perl-test-harness))
     (propagated-inputs
-     `(("perl-extutils-installpaths" ,perl-extutils-installpaths)
-       ("perl-extutils-config" ,perl-extutils-config)
-       ("perl-extutils-helpers" ,perl-extutils-helpers)
-       ("perl-test-harness" ,perl-test-harness)))
+     (list perl-extutils-installpaths perl-extutils-config
+           perl-extutils-helpers perl-test-harness))
     (home-page "https://metacpan.org/release/Module-Build-Tiny")
     (synopsis "Tiny replacement for Module::Build")
     (description "Many Perl distributions use a Build.PL file instead of a
@@ -6602,11 +6501,9 @@ has less than 120, yet supports the features needed by most distributions.")
             "0d39fjg9c0n820bk3fb50vvlwhdny4hdl69xmlyzql5xzp4cicsk"))))
     (build-system perl-build-system)
     (native-inputs
-      `(("perl-module-build" ,perl-module-build)))
+      (list perl-module-build))
     (propagated-inputs
-      `(("perl-extutils-cppguess" ,perl-extutils-cppguess)
-        ("perl-extutils-xspp" ,perl-extutils-xspp)
-        ("perl-module-build" ,perl-module-build)))
+      (list perl-extutils-cppguess perl-extutils-xspp perl-module-build))
     (home-page
       "https://metacpan.org/release/Module-Build-WithXSpp")
     (synopsis
@@ -6629,12 +6526,10 @@ processes to make it easier to use for wrapping C++ using XS++
                 "1nrs0b6hmwl3sw3g50b9857qgp5cbbbpl716zwn30h9vwjj2yxhm"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-capture-tiny" ,perl-capture-tiny)
-       ("perl-cwd-guard" ,perl-cwd-guard)
-       ("perl-file-copy-recursive" ,perl-file-copy-recursive)
-       ("perl-module-build" ,perl-module-build)))
+     (list perl-capture-tiny perl-cwd-guard perl-file-copy-recursive
+           perl-module-build))
     (propagated-inputs
-     `(("perl-devel-checkcompiler" ,perl-devel-checkcompiler)))
+     (list perl-devel-checkcompiler))
     (home-page "https://metacpan.org/release/Module-Build-XSUtil")
     (synopsis "Module::Build class for building XS modules")
     (description
@@ -6695,11 +6590,9 @@ subcategories.")
          "0vfngw4dbryihqhi7g9ks360hyw8wnpy3hpkzyg0q4y2y091lpy1"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-requires" ,perl-test-requires)))
+     (list perl-test-fatal perl-test-requires))
     (propagated-inputs
-     `(("perl-module-runtime" ,perl-module-runtime)
-       ("perl-try-tiny" ,perl-try-tiny)))
+     (list perl-module-runtime perl-try-tiny))
     (home-page "https://metacpan.org/release/Module-Implementation")
     (synopsis "Loads alternate underlying implementations for a module")
     (description "This module abstracts out the process of choosing one of
@@ -6723,19 +6616,19 @@ implementations.")
          "06q12cm97yh4p7qbm0a2p96996ii6ss59qy57z0f7f9svy6sflqs"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-yaml-tiny" ,perl-yaml-tiny)))
+     (list perl-yaml-tiny))
     (propagated-inputs
-     `(("perl-archive-zip" ,perl-archive-zip)
-       ("perl-file-homedir" ,perl-file-homedir)
-       ("perl-file-remove" ,perl-file-remove)
-       ("perl-json" ,perl-json)
-       ;; The LWP::Simple and LWP::UserAgent modules are recommended, but
-       ;; would cause a circular dependency with (gnu packages web), so we
-       ;; leave it out.  It may be resolved at runtime, however.
-       ;("perl-libwww-perl" ,perl-libwww-perl)
-       ("perl-module-scandeps" ,perl-module-scandeps)
-       ("perl-par-dist" ,perl-par-dist)
-       ("perl-yaml-tiny" ,perl-yaml-tiny)))
+     (list perl-archive-zip
+           perl-file-homedir
+           perl-file-remove
+           perl-json
+           ;; The LWP::Simple and LWP::UserAgent modules are recommended, but
+           ;; would cause a circular dependency with (gnu packages web), so we
+           ;; leave it out.  It may be resolved at runtime, however.
+           ;("perl-libwww-perl" ,perl-libwww-perl)
+           perl-module-scandeps
+           perl-par-dist
+           perl-yaml-tiny))
     ;; TODO: One test requires Test::More >= 0.99, another fails with unicode
     ;; character handling.
     (arguments `(#:tests? #f))
@@ -6762,10 +6655,9 @@ installation version 5.005 or newer.")
          "16skpm804a19gsgxzn1wba3lmvc7cx5q8ly4srpyd82yy47zi5d3"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-exception" ,perl-test-exception)
-       ("perl-test-warn" ,perl-test-warn)))
+     (list perl-test-exception perl-test-warn))
     (propagated-inputs
-     `(("perl-params-util" ,perl-params-util)))
+     (list perl-params-util))
     (home-page "https://metacpan.org/release/Module-Manifest")
     (synopsis "Parse and examine a Perl distribution @file{MANIFEST} file")
     (description
@@ -6810,7 +6702,7 @@ examine the contents, and perform some simple tasks.  It can also load the
         (base32
          "097hy2czwkxlppri32m599ph0xfvfsbf0a5y23a4fdc38v32wc38"))))
     (build-system perl-build-system)
-    (native-inputs `(("perl-module-build" ,perl-module-build)))
+    (native-inputs (list perl-module-build))
     (home-page "https://metacpan.org/release/Module-Runtime")
     (synopsis "Perl runtime module handling")
     (description "The functions exported by this module deal with runtime
@@ -6831,10 +6723,9 @@ handling of Perl modules, which are normally handled at compile time.")
          "0x9qfg4pq70v1rl9dfk775fmca7ia308m24vfy8zww4c0dsxqz3h"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (propagated-inputs
-     `(("perl-module-runtime" ,perl-module-runtime)
-       ("perl-dist-checkconflicts" ,perl-dist-checkconflicts)))
+     (list perl-module-runtime perl-dist-checkconflicts))
     (home-page "https://metacpan.org/release/Module-Runtime-Conflicts")
     (synopsis "Provide information on conflicts for Module::Runtime")
     (description "This module provides conflicts checking for Module::Runtime,
@@ -6856,7 +6747,7 @@ from Moose::Conflicts and moose-outdated.")
          "0j6r9r99x5p0i6fv06i44wpsvjxj32amjkiqf6pmqpj80jff2k7f"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-requires" ,perl-test-requires)))
+     (list perl-test-requires))
     (home-page "https://metacpan.org/release/Module-ScanDeps")
     (synopsis "Recursively scan Perl code for dependencies")
     (description "Module::ScanDeps is a module to recursively scan Perl
@@ -6877,7 +6768,7 @@ programs for dependencies.")
          "1ip2yg3x517gg8c48crhd52ba864vmyimvm0ibn4ci068mmcpyvc"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build))) ; >= 0.40
+     (list perl-module-build)) ; >= 0.40
     (home-page "https://metacpan.org/release/Module-Util")
     (synopsis "Module name tools and transformations")
     (description "This module provides a few useful functions for manipulating
@@ -6900,15 +6791,15 @@ module names to relative paths.")
          "0y9s6s9jjd519wgal6lwc9id4sadrvfn8gjb51dl602d0kk0l7n5"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-fatal" ,perl-test-fatal)))
+     (list perl-test-fatal))
     (propagated-inputs
-     `(("perl-class-method-modifiers" ,perl-class-method-modifiers)
-       ("perl-class-xsaccessor" ,perl-class-xsaccessor)
-       ("perl-devel-globaldestruction" ,perl-devel-globaldestruction)
-       ("perl-import-into" ,perl-import-into)
-       ("perl-module-runtime" ,perl-module-runtime)
-       ("perl-role-tiny" ,perl-role-tiny)
-       ("perl-strictures" ,perl-strictures)))
+     (list perl-class-method-modifiers
+           perl-class-xsaccessor
+           perl-devel-globaldestruction
+           perl-import-into
+           perl-module-runtime
+           perl-role-tiny
+           perl-strictures))
     (home-page "https://metacpan.org/release/Moo")
     (synopsis "Minimalist Object Orientation (with Moose compatibility)")
     (description "Moo is an extremely light-weight Object Orientation system.
@@ -6960,12 +6851,12 @@ Moose and is optimised for rapid startup.")
                 "05gma3q3l15igqrqi8ax8v5cmmvy7s939q3xzs45l1rc7sfx6yd6"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-cpan-meta-check" ,perl-cpan-meta-check)
-       ("perl-dist-checkconflicts" ,perl-dist-checkconflicts)
-       ("perl-test-cleannamespaces" ,perl-test-cleannamespaces)
-       ("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-requires" ,perl-test-requires)
-       ("perl-test-warnings" ,perl-test-warnings)))
+     (list perl-cpan-meta-check
+           perl-dist-checkconflicts
+           perl-test-cleannamespaces
+           perl-test-fatal
+           perl-test-requires
+           perl-test-warnings))
     ;; XXX::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
     ;; # === Other Modules ===
     ;; #
@@ -6993,28 +6884,28 @@ Moose and is optimised for rapid startup.")
     ;; #     Test::Output                  any missing
     ;; #     URI                           any missing
     (propagated-inputs
-     `(("perl-class-load" ,perl-class-load)
-       ("perl-class-load-xs" ,perl-class-load-xs)
-       ("perl-data-optlist" ,perl-data-optlist)
-       ("perl-devel-globaldestruction" ,perl-devel-globaldestruction)
-       ("perl-devel-overloadinfo" ,perl-devel-overloadinfo)
-       ("perl-devel-partialdump" ,perl-devel-partialdump)
-       ("perl-devel-stacktrace" ,perl-devel-stacktrace)
-       ("perl-dist-checkconflicts" ,perl-dist-checkconflicts)
-       ("perl-eval-closure" ,perl-eval-closure)
-       ("perl-list-moreutils" ,perl-list-moreutils)
-       ("perl-module-runtime" ,perl-module-runtime)
-       ("perl-module-runtime-conflicts" ,perl-module-runtime-conflicts)
-       ("perl-mro-compat" ,perl-mro-compat)
-       ("perl-package-deprecationmanager" ,perl-package-deprecationmanager)
-       ("perl-package-stash" ,perl-package-stash)
-       ("perl-package-stash-xs" ,perl-package-stash-xs)
-       ("perl-params-util" ,perl-params-util)
-       ("perl-scalar-list-utils" ,perl-scalar-list-utils)
-       ("perl-sub-exporter" ,perl-sub-exporter)
-       ("perl-sub-name" ,perl-sub-name)
-       ("perl-task-weaken" ,perl-task-weaken)
-       ("perl-try-tiny" ,perl-try-tiny)))
+     (list perl-class-load
+           perl-class-load-xs
+           perl-data-optlist
+           perl-devel-globaldestruction
+           perl-devel-overloadinfo
+           perl-devel-partialdump
+           perl-devel-stacktrace
+           perl-dist-checkconflicts
+           perl-eval-closure
+           perl-list-moreutils
+           perl-module-runtime
+           perl-module-runtime-conflicts
+           perl-mro-compat
+           perl-package-deprecationmanager
+           perl-package-stash
+           perl-package-stash-xs
+           perl-params-util
+           perl-scalar-list-utils
+           perl-sub-exporter
+           perl-sub-name
+           perl-task-weaken
+           perl-try-tiny))
     (home-page "https://metacpan.org/release/Moose")
     (synopsis "Postmodern object system for Perl 5")
     (description
@@ -7041,10 +6932,9 @@ sentences.")
         (base32 "153r30nggcyyx7ai15dbnba2h5145f8jdsh6wj54298d3zpvgvl2"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)
-       ("perl-test-exception" ,perl-test-exception)))
+     (list perl-module-install perl-test-exception))
     (propagated-inputs
-     `(("perl-moose" ,perl-moose)))
+     (list perl-moose))
     (home-page "https://metacpan.org/release/MooseX-Emulate-Class-Accessor-Fast")
     (synopsis "Emulate Class::Accessor::Fast behavior using Moose attributes")
     (description "This module attempts to emulate the behavior of
@@ -7066,20 +6956,18 @@ private methods are not.")
         (base32 "1j7b2jnf0blxr4czp3vfcnv1h5zj601mrfdm92g1wf5wn9dvxwv3"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-module-build-tiny" ,perl-module-build-tiny)
-       ("perl-path-tiny" ,perl-path-tiny)
-       ("perl-test-deep" ,perl-test-deep)
-       ("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-needs" ,perl-test-needs)
-       ("perl-test-requires" ,perl-test-requires)
-       ("perl-test-trap" ,perl-test-trap)
-       ("perl-test-warnings" ,perl-test-warnings)))
-    (propagated-inputs
-     `(("perl-getopt-long-descriptive" ,perl-getopt-long-descriptive)
-       ("perl-moose" ,perl-moose)
-       ("perl-moosex-role-parameterized" ,perl-moosex-role-parameterized)
-       ("perl-namespace-autoclean" ,perl-namespace-autoclean)))
+     (list perl-module-build
+           perl-module-build-tiny
+           perl-path-tiny
+           perl-test-deep
+           perl-test-fatal
+           perl-test-needs
+           perl-test-requires
+           perl-test-trap
+           perl-test-warnings))
+    (propagated-inputs
+     (list perl-getopt-long-descriptive perl-moose
+           perl-moosex-role-parameterized perl-namespace-autoclean))
     (home-page "https://metacpan.org/release/MooseX-Getopt")
     (synopsis "Moose role for processing command line options")
     (description "This is a Moose role which provides an alternate constructor
@@ -7100,8 +6988,7 @@ for creating objects using parameters passed in from the command line.")
          "1y3yxwcjjajm66pvca54cv9fax7a6dy36xqr92x7vzyhfqrw3v69"))))
     (build-system perl-build-system)
     (inputs
-     `(("perl-moose" ,perl-moose)
-       ("perl-namespace-autoclean" ,perl-namespace-autoclean)))
+     (list perl-moose perl-namespace-autoclean))
     (home-page "https://metacpan.org/release/MooseX-MarkAsMethods")
     (synopsis "Mark overload code symbols as methods")
     (description "MooseX::MarkAsMethods allows one to easily mark certain
@@ -7126,13 +7013,9 @@ overloads will \"just work\".")
          "1whd10w7bm3dwaj7gpgw40bci9vvb2zmxs4349ifji91hvinwqck"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build-tiny" ,perl-module-build-tiny)
-       ("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-requires" ,perl-test-requires)))
+     (list perl-module-build-tiny perl-test-fatal perl-test-requires))
     (propagated-inputs
-     `(("perl-moose" ,perl-moose)
-       ("perl-moosex-types" ,perl-moosex-types)
-       ("perl-namespace-autoclean" ,perl-namespace-autoclean)))
+     (list perl-moose perl-moosex-types perl-namespace-autoclean))
     (home-page "https://metacpan.org/release/MooseX-MethodAttributes")
     (synopsis "Code attribute introspection")
     (description "This module allows code attributes of methods to be
@@ -7153,13 +7036,10 @@ introspected using Moose meta method objects.")
           "0zdaiphc45s5xj0ax5mkijf5d8v6w6yccb3zplgj6f30y7n55gnb"))))
   (build-system perl-build-system)
   (native-inputs
-    `(("perl-moose" ,perl-moose)
-      ("perl-test-fatal" ,perl-test-fatal)))
+    (list perl-moose perl-test-fatal))
   (propagated-inputs
-    `(("perl-list-moreutils" ,perl-list-moreutils)
-      ("perl-module-runtime" ,perl-module-runtime)
-      ("perl-moose" ,perl-moose)
-      ("perl-try-tiny" ,perl-try-tiny)))
+    (list perl-list-moreutils perl-module-runtime perl-moose
+          perl-try-tiny))
   (home-page "https://metacpan.org/release/MooseX-NonMoose")
   (synopsis "Subclassing of non-Moose classes")
   (description "MooseX::NonMoose allows for easily subclassing non-Moose
@@ -7182,13 +7062,10 @@ BUILD methods are called.  It tries to be as non-intrusive as possible.")
         (base32 "1n9ry6gnskkp9ir6s7d5jirn3mh14ydgpmwqz6wcp6d9md358ac8"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-moose" ,perl-moose)
-       ("perl-test-fatal" ,perl-test-fatal)))
+     (list perl-moose perl-test-fatal))
     (propagated-inputs
-     `(("perl-devel-caller" ,perl-devel-caller)
-       ("perl-moose" ,perl-moose)
-       ("perl-params-validate" ,perl-params-validate)
-       ("perl-sub-exporter" ,perl-sub-exporter)))
+     (list perl-devel-caller perl-moose perl-params-validate
+           perl-sub-exporter))
     (home-page "https://metacpan.org/release/MooseX-Params-Validate")
     (synopsis "Extension of Params::Validate using Moose's types")
     (description "This module fills a gap in Moose by adding method parameter
@@ -7209,8 +7086,7 @@ validation to Moose.")
          "17vynkf6m5d039qkr4in1c9lflr8hnwp1fgzdwhj4q6jglipmnrh"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-moose" ,perl-moose)
-       ("perl-moosex-role-parameterized" ,perl-moosex-role-parameterized)))
+     (list perl-moose perl-moosex-role-parameterized))
     (home-page "https://metacpan.org/release/MooseX-RelatedClassRoles")
     (synopsis "Apply roles to a related Perl class")
     (description "This module applies roles to make a subclass instead of
@@ -7230,14 +7106,11 @@ manually setting up a subclass.")
         (base32 "0plx25n80mv9qwhix52z79md0qil616nbcryk2f4216kghpw2ij8"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-cpan-meta-check" ,perl-cpan-meta-check)
-       ("perl-module-build" ,perl-module-build)
-       ("perl-moosex-role-withoverloading" ,perl-moosex-role-withoverloading)
-       ("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-requires" ,perl-test-requires)))
+     (list perl-cpan-meta-check perl-module-build
+           perl-moosex-role-withoverloading perl-test-fatal
+           perl-test-requires))
     (propagated-inputs
-     `(("perl-moose" ,perl-moose)
-       ("perl-namespace-autoclean" ,perl-namespace-autoclean)))
+     (list perl-moose perl-namespace-autoclean))
     (home-page "https://metacpan.org/release/MooseX-Role-Parameterized")
     (synopsis "Moose roles with composition parameters")
     (description "Because Moose roles serve many different masters, they
@@ -7262,9 +7135,7 @@ Parameterized roles offer a solution to these (and other) kinds of problems.")
          "0rb8k0dp1a55bm2pr6r0vsi5msvjl1dslfidxp1gj80j7zbrbc4j"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-aliased" ,perl-aliased)
-       ("perl-moose" ,perl-moose)
-       ("perl-namespace-autoclean" ,perl-namespace-autoclean)))
+     (list perl-aliased perl-moose perl-namespace-autoclean))
     (home-page "https://metacpan.org/release/MooseX-Role-WithOverloading")
     (synopsis "Roles which support overloading")
     (description "MooseX::Role::WithOverloading allows you to write a
@@ -7287,7 +7158,7 @@ where plain Moose::Roles would lose the overloading.")
          "1mdil9ckgmgr78z59p8wfa35ixn5855ndzx14y01dvfxpiv5gf55"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-moose" ,perl-moose)))
+     (list perl-moose))
     (home-page "https://metacpan.org/release/MooseX-SemiAffordanceAccessor")
     (synopsis "Name your accessors foo() and set_foo()")
     (description "This module does not provide any methods.  Simply loading it
@@ -7310,11 +7181,9 @@ accessor, while set methods are prefixed with \"_set_\".")
          "0ccawja1kabgglrkdw5v82m1pbw189a0mnd33l43rs01d70p6ra8"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-moose" ,perl-moose)
-       ("perl-test-fatal" ,perl-test-fatal)))
+     (list perl-moose perl-test-fatal))
     (propagated-inputs
-     `(("perl-moose" ,perl-moose)
-       ("perl-namespace-autoclean" ,perl-namespace-autoclean)))
+     (list perl-moose perl-namespace-autoclean))
     (home-page "https://metacpan.org/release/MooseX-StrictConstructor")
     (synopsis "Strict object constructors for Moose")
     (description "Simply loading this module makes your constructors
@@ -7336,13 +7205,10 @@ that your class does not declare, then it calls Moose->throw_error().")
          "1jjqmcidy4kdgp5yffqqwxrsab62mbhbpvnzdy1rpwnb1savg5mb"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-moose" ,perl-moose)
-       ("perl-test-exception" ,perl-test-exception)))
+     (list perl-moose perl-test-exception))
     (propagated-inputs
-     `(("perl-class-load" ,perl-class-load)
-       ("perl-list-moreutils" ,perl-list-moreutils)
-       ("perl-moose" ,perl-moose)
-       ("perl-namespace-autoclean" ,perl-namespace-autoclean)))
+     (list perl-class-load perl-list-moreutils perl-moose
+           perl-namespace-autoclean))
     (home-page
      "https://metacpan.org/release/MooseX-Traits-Pluggable")
     (synopsis "Trait loading and resolution for Moose")
@@ -7364,13 +7230,9 @@ search for traits and some extra attributes.")
          "1iq90s1f0xbmr194q0mhnp9wxqxwwilkbdml040ibqbqvfiz87yh"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-requires" ,perl-test-requires)))
+     (list perl-module-build perl-test-fatal perl-test-requires))
     (propagated-inputs
-     `(("perl-carp-clan" ,perl-carp-clan)
-       ("perl-moose" ,perl-moose)
-       ("perl-namespace-autoclean" ,perl-namespace-autoclean)))
+     (list perl-carp-clan perl-moose perl-namespace-autoclean))
     (home-page "https://metacpan.org/release/MooseX-Types")
     (synopsis "Organise your Moose types in libraries")
     (description "This package lets you declare types using short names, but
@@ -7392,17 +7254,15 @@ prevent name clashes between packages.")
          "1iir3mdvz892kbbs2q91vjxnhas7811m3d3872m7x8gn6rka57xq"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build-tiny" ,perl-module-build-tiny)
-       ("perl-moose" ,perl-moose)
-       ("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-simple" ,perl-test-simple)))
+     (list perl-module-build-tiny perl-moose perl-test-fatal
+           perl-test-simple))
     (propagated-inputs
-     `(("perl-datetime" ,perl-datetime)
-       ("perl-datetime-locale" ,perl-datetime-locale)
-       ("perl-datetime-timezone" ,perl-datetime-timezone)
-       ("perl-moose" ,perl-moose)
-       ("perl-moosex-types" ,perl-moosex-types)
-       ("perl-namespace-clean" ,perl-namespace-clean)))
+     (list perl-datetime
+           perl-datetime-locale
+           perl-datetime-timezone
+           perl-moose
+           perl-moosex-types
+           perl-namespace-clean))
     (home-page "https://metacpan.org/release/MooseX-Types-DateTime")
     (synopsis "DateTime related constraints and coercions for Moose")
     (description "This module packages several Moose::Util::TypeConstraints
@@ -7423,17 +7283,15 @@ with coercions, designed to work with the DateTime suite of objects.")
         (base32 "15ip1rgaana2p4vww355jb5jxyawim0k58gadkdqx20rfxckmfr1"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build-tiny" ,perl-module-build-tiny)
-       ("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-simple" ,perl-test-simple)))
+     (list perl-module-build-tiny perl-test-fatal perl-test-simple))
     (propagated-inputs
-     `(("perl-datetime" ,perl-datetime)
-       ("perl-datetimex-easy" ,perl-datetimex-easy)
-       ("perl-moose" ,perl-moose)
-       ("perl-moosex-types" ,perl-moosex-types)
-       ("perl-moosex-types-datetime" ,perl-moosex-types-datetime)
-       ("perl-namespace-clean" ,perl-namespace-clean)
-       ("perl-time-duration-parse" ,perl-time-duration-parse)))
+     (list perl-datetime
+           perl-datetimex-easy
+           perl-moose
+           perl-moosex-types
+           perl-moosex-types-datetime
+           perl-namespace-clean
+           perl-time-duration-parse))
     (home-page
      "https://metacpan.org/release/MooseX-Types-DateTime-MoreCoercions")
     (synopsis "Extensions to MooseX::Types::DateTime")
@@ -7455,15 +7313,10 @@ all coercions and constraints are inherited.")
         (base32 "1x1vb96hcrd96bzs73w0lb04jr0fvax1ams38qlzkp2kh9vx6dz0"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build-tiny" ,perl-module-build-tiny)
-       ("perl-namespace-clean" ,perl-namespace-clean)
-       ("perl-moose" ,perl-moose)
-       ("perl-test-fatal" ,perl-test-fatal)
-       ("perl-class-load" ,perl-class-load)))
+     (list perl-module-build-tiny perl-namespace-clean perl-moose
+           perl-test-fatal perl-class-load))
     (propagated-inputs
-     `(("perl-module-runtime" ,perl-module-runtime)
-       ("perl-moosex-types" ,perl-moosex-types)
-       ("perl-namespace-autoclean" ,perl-namespace-autoclean)))
+     (list perl-module-runtime perl-moosex-types perl-namespace-autoclean))
     (home-page "https://metacpan.org/release/MooseX-Types-LoadableClass")
     (synopsis "ClassName type constraints for Moose")
     (description "MooseX::Types::LoadableClass provides a ClassName type
@@ -7486,10 +7339,8 @@ constraint with coercion to load the class.")
          "1m9jvrqcidiabdih211byadwnnkygafq54r2ljnf1akqdrjimy9g"))))
     (build-system perl-build-system)
     (inputs
-     `(("perl-data-optlist" ,perl-data-optlist)
-       ("perl-import-into" ,perl-import-into)
-       ("perl-module-runtime" ,perl-module-runtime)
-       ("perl-moo" ,perl-moo)))
+     (list perl-data-optlist perl-import-into perl-module-runtime
+           perl-moo))
     (home-page "https://metacpan.org/release/MooX")
     (synopsis
      "Using Moo and MooX:: packages the most lazy way")
@@ -7509,15 +7360,14 @@ constraint with coercion to load the class.")
         (base32 "1xbhmq07v9z371ygkyghva9aryhc22kwbzn5qwkp72c0ma6z4gwl"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-capture-tiny" ,perl-capture-tiny)
-       ("perl-list-moreutils" ,perl-list-moreutils)))
+     (list perl-capture-tiny perl-list-moreutils))
     (propagated-inputs
-     `(("perl-module-pluggable" ,perl-module-pluggable)
-       ("perl-module-runtime" ,perl-module-runtime)
-       ("perl-moo" ,perl-moo)
-       ("perl-package-stash" ,perl-package-stash)
-       ("perl-params-util" ,perl-params-util)
-       ("perl-regexp-common" ,perl-regexp-common)))
+     (list perl-module-pluggable
+           perl-module-runtime
+           perl-moo
+           perl-package-stash
+           perl-params-util
+           perl-regexp-common))
     (home-page "https://metacpan.org/release/MooX-Cmd")
     (synopsis "Giving an easy Moo style way to make command organized CLI apps")
     (description "This package eases the writing of command line utilities,
@@ -7541,17 +7391,15 @@ most specific one) is instantiated.")
          "1zrpz4mzngnhaap6988is0w0aarilfj4kb1yc8hvfqna69lywac0"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-hash-merge" ,perl-hash-merge)
-       ("perl-json" ,perl-json)
-       ("perl-moox-cmd" ,perl-moox-cmd)))
+     (list perl-hash-merge perl-json perl-moox-cmd))
     (propagated-inputs
-     `(("perl-config-any" ,perl-config-any)
-       ("perl-file-configdir" ,perl-file-configdir)
-       ("perl-file-find-rule" ,perl-file-find-rule)
-       ("perl-hash-merge" ,perl-hash-merge)
-       ("perl-moo" ,perl-moo)
-       ("perl-moox-file-configdir" ,perl-moox-file-configdir)
-       ("perl-namespace-clean" ,perl-namespace-clean)))
+     (list perl-config-any
+           perl-file-configdir
+           perl-file-find-rule
+           perl-hash-merge
+           perl-moo
+           perl-moox-file-configdir
+           perl-namespace-clean))
     (home-page "https://metacpan.org/release/MooX-ConfigFromFile")
     (synopsis "Moo eXtension for initializing objects from config file")
     (description "This module is intended to easily load initialization values
@@ -7573,9 +7421,7 @@ building is done in @code{MooX::ConfigFromFile::Role}---using
         (base32 "1b033injzk9d8clgip67ps5j5bpkrnag28q89ddwhrgqx12i3m7q"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-file-configdir" ,perl-file-configdir)
-       ("perl-moo" ,perl-moo)
-       ("perl-namespace-clean" ,perl-namespace-clean)))
+     (list perl-file-configdir perl-moo perl-namespace-clean))
     (home-page "https://metacpan.org/release/MooX-File-ConfigDir")
     (synopsis "Moo eXtension for @code{File::ConfigDir}")
     (description "This module is a helper for easily finding configuration
@@ -7598,18 +7444,12 @@ installing configuration files or for finding any piece of settings.")
         (base32 "04kcyflg49rclxa1nm035c05jpyvhdacjyy1wklbgv4li3im6qvi"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-moox-types-mooselike"
-        ,perl-moox-types-mooselike)
-       ("perl-test-exception" ,perl-test-exception)
-       ("perl-test-fatal" ,perl-test-fatal)))
+     (list perl-moox-types-mooselike perl-test-exception perl-test-fatal))
     (inputs
-     `(("perl-class-method-modifiers"
-        ,perl-class-method-modifiers)
-       ("perl-module-runtime" ,perl-module-runtime)
-       ("perl-moo" ,perl-moo)
-       ("perl-role-tiny" ,perl-role-tiny)))
+     (list perl-class-method-modifiers perl-module-runtime perl-moo
+           perl-role-tiny))
     (propagated-inputs
-     `(("perl-data-perl" ,perl-data-perl)))
+     (list perl-data-perl))
     (home-page
      "https://metacpan.org/release/MooX-HandlesVia")
     (synopsis "NativeTrait-like behavior for Moo")
@@ -7633,14 +7473,11 @@ an external class to the given attribute.")
         (base32 "0kjy86rrpzfy6w5r9ykjq7njwdnvp7swd6r2k4gfrh3picz3kdhz"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-requires" ,perl-test-requires)))
+     (list perl-test-fatal perl-test-requires))
     (inputs
-     `(("perl-moo" ,perl-moo)
-       ("perl-moox" ,perl-moox)
-       ("perl-moox-handlesvia" ,perl-moox-handlesvia)))
+     (list perl-moo perl-moox perl-moox-handlesvia))
     (propagated-inputs
-     `(("perl-type-tiny" ,perl-type-tiny)))
+     (list perl-type-tiny))
     (home-page "https://metacpan.org/release/MooX-late")
     (synopsis "Easily translate Moose code to Moo")
     (description
@@ -7670,34 +7507,34 @@ MooX::HandlesVia.
          "14kz51hybxx8vcm4wg36f0qa64aainw7i2sqmqxg20c3qvczyvj2"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-capture-tiny" ,perl-capture-tiny)
-       ("perl-import-into" ,perl-import-into)
-       ("perl-module-build" ,perl-module-build)
-       ("perl-moo" ,perl-moo)
-       ("perl-moose" ,perl-moose)
-       ("perl-moox-cmd" ,perl-moox-cmd)
-       ("perl-namespace-clean" ,perl-namespace-clean)
-       ("perl-role-tiny" ,perl-role-tiny)
-       ("perl-test-requires" ,perl-test-requires)
-       ("perl-test-trap" ,perl-test-trap)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-try-tiny" ,perl-try-tiny)))
-    (propagated-inputs
-     `(("perl-config-any" ,perl-config-any)
-       ("perl-moox-configfromfile" ,perl-moox-configfromfile)
-       ("perl-data-record" ,perl-data-record)
-       ("perl-file-configdir" ,perl-file-configdir)
-       ("perl-file-find-rule" ,perl-file-find-rule)
-       ("perl-file-sharedir" ,perl-file-sharedir)
-       ("perl-getopt-long-descriptive" ,perl-getopt-long-descriptive)
-       ("perl-json-maybexs" ,perl-json-maybexs)
-       ("perl-libintl-perl" ,perl-libintl-perl)
-       ("perl-moox-configfromfile" ,perl-moox-configfromfile)
-       ("perl-moox-file-configdir" ,perl-moox-file-configdir)
-       ("perl-path-class" ,perl-path-class)
-       ("perl-regexp-common" ,perl-regexp-common)
-       ("perl-term-size-any" ,perl-term-size-any)
-       ("perl-unicode-linebreak" ,perl-unicode-linebreak)))
+     (list perl-capture-tiny
+           perl-import-into
+           perl-module-build
+           perl-moo
+           perl-moose
+           perl-moox-cmd
+           perl-namespace-clean
+           perl-role-tiny
+           perl-test-requires
+           perl-test-trap
+           perl-test-pod
+           perl-try-tiny))
+    (propagated-inputs
+     (list perl-config-any
+           perl-moox-configfromfile
+           perl-data-record
+           perl-file-configdir
+           perl-file-find-rule
+           perl-file-sharedir
+           perl-getopt-long-descriptive
+           perl-json-maybexs
+           perl-libintl-perl
+           perl-moox-configfromfile
+           perl-moox-file-configdir
+           perl-path-class
+           perl-regexp-common
+           perl-term-size-any
+           perl-unicode-linebreak))
     (home-page "https://metacpan.org/release/MooX-Options")
     (synopsis "Explicit Options eXtension for Object Class")
     (description "Create a command line tool with your Mo, Moo, Moose objects.
@@ -7723,11 +7560,9 @@ generate a command line tool.")
           "0vvjgz7xbfmf69yav7sxsxmvklqv835xvh7h47w0apxmlkm9fjgr"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-fatal" ,perl-test-fatal)))
+     (list perl-test-fatal))
     (propagated-inputs
-     `(("perl-class-method-modifiers" ,perl-class-method-modifiers)
-       ("perl-moo" ,perl-moo)
-       ("perl-strictures" ,perl-strictures)))
+     (list perl-class-method-modifiers perl-moo perl-strictures))
     (home-page "https://metacpan.org/release/MooX-StrictConstructor")
     (synopsis "Make Moo-based object constructors blow up on unknown attributes")
     (description
@@ -7749,11 +7584,9 @@ does not declare, then it dies.")
         (base32 "1d6jg9x3p7gm2r0xmbcag374a44gf5pcga2swvxhlhzakfm80dqx"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-moo" ,perl-moo)
-       ("perl-test-fatal" ,perl-test-fatal)))
+     (list perl-moo perl-test-fatal))
     (propagated-inputs
-     `(("perl-module-runtime" ,perl-module-runtime)
-       ("perl-strictures" ,perl-strictures)))
+     (list perl-module-runtime perl-strictures))
     (home-page "https://metacpan.org/release/MooX-Types-MooseLike")
     (synopsis "Moosish types and type builder")
     (description "MooX::Types::MooseLike provides a possibility to build your
@@ -7776,14 +7609,14 @@ fields in Moo-based classes.")
               "1vijm8wkyws1jhnqmx104585q3srw9z1crcpy1zlcfhm8qww53ff"))))
   (build-system perl-build-system)
   (native-inputs
-   `(("perl-module-build" ,perl-module-build)
-     ("perl-module-build-xsutil" ,perl-module-build-xsutil)
-     ("perl-test-exception" ,perl-test-exception)
-     ("perl-test-fatal" ,perl-test-fatal)
-     ("perl-test-leaktrace" ,perl-test-leaktrace)
-     ("perl-test-output" ,perl-test-output)
-     ("perl-test-requires" ,perl-test-requires)
-     ("perl-try-tiny" ,perl-try-tiny)))
+   (list perl-module-build
+         perl-module-build-xsutil
+         perl-test-exception
+         perl-test-fatal
+         perl-test-leaktrace
+         perl-test-output
+         perl-test-requires
+         perl-try-tiny))
   (home-page "https://github.com/gfx/p5-Mouse")
   (synopsis "Fast Moose-compatible object system for perl5")
   (description
@@ -7804,11 +7637,9 @@ subset of the functionality for reduced startup time.")
                 "0pnbchkxfz9fwa8sniyjqp0mz75b3k2fafq9r09znbbh51dbz9gq"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-any-moose" ,perl-any-moose)
-       ("perl-module-install" ,perl-module-install)
-       ("perl-test-fatal" ,perl-test-fatal)))
+     (list perl-any-moose perl-module-install perl-test-fatal))
     (propagated-inputs
-     `(("perl-mouse" ,perl-mouse)))
+     (list perl-mouse))
     (home-page "https://metacpan.org/release/MouseX-NativeTraits")
     (synopsis "Extend attribute interfaces for Mouse")
     (description
@@ -7853,11 +7684,9 @@ and libraries based on OpenSSL.")
          "0prchsg547ziysjl8ghiid6ph3m2xnwpsrwrjymibga7fhqi9sqj"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-b-hooks-op-check" ,perl-b-hooks-op-check)
-       ("perl-extutils-depends" ,perl-extutils-depends)))
+     (list perl-b-hooks-op-check perl-extutils-depends))
     (propagated-inputs
-     `(("perl-b-hooks-op-check" ,perl-b-hooks-op-check)
-       ("perl-lexical-sealrequirehints" ,perl-lexical-sealrequirehints)))
+     (list perl-b-hooks-op-check perl-lexical-sealrequirehints))
     (home-page "https://metacpan.org/release/multidimensional")
     (synopsis "Disable multidimensional array emulation")
     (description
@@ -7898,12 +7727,9 @@ Perl (back to 5.6.0).")
         (base32 "012qqs561xyyhm082znmzsl8lz4n299fa6p0v246za2l9bkdiss5"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-needs" ,perl-test-needs)))
+     (list perl-module-build perl-test-needs))
     (propagated-inputs
-     `(("perl-b-hooks-endofscope" ,perl-b-hooks-endofscope)
-       ("perl-namespace-clean" ,perl-namespace-clean)
-       ("perl-sub-identify" ,perl-sub-identify)))
+     (list perl-b-hooks-endofscope perl-namespace-clean perl-sub-identify))
     (home-page "https://metacpan.org/release/namespace-autoclean")
     (synopsis "Keep imports out of your namespace")
     (description "The namespace::autoclean pragma will remove all imported
@@ -7929,8 +7755,7 @@ anything that looks like a method.")
          "17dg64pd4bwi2ad3p8ykwys1zha7kg8a8ykvks7wfg8q7qyah44a"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-package-stash" ,perl-package-stash)
-       ("perl-b-hooks-endofscope" ,perl-b-hooks-endofscope)))
+     (list perl-package-stash perl-b-hooks-endofscope))
     (home-page "https://metacpan.org/release/namespace-clean")
     (synopsis "Keep imports and functions out of your namespace")
     (description "The namespace::clean pragma will remove all previously
@@ -8000,8 +7825,7 @@ system threads instead of Perl threads.")
         (base32 "1aiy7adirk3wpwlczd8sldi9k1dray0jrg1lbcrcw97zwcrkciam"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-nowarnings" ,perl-test-nowarnings)))
+     (list perl-module-build perl-test-nowarnings))
     (home-page "https://metacpan.org/release/Net-IDN-Encode")
     (synopsis "Internationalizing Domain Names in Applications (IDNA)")
     (description
@@ -8112,7 +7936,7 @@ number exists in a given range, and to be able to manipulate the range.")
         (base32 "12k90c19ly93ib1p6sm3k7sbnr2h5dbywkdmnff2ngm99p4m68c4"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)))
+     (list perl-module-install))
     (home-page "https://metacpan.org/release/Object-Signature")
     (synopsis "Generate cryptographic signatures for objects")
     (description "Object::Signature is an abstract base class that you can
@@ -8158,9 +7982,7 @@ documents within a single file.")
           (base32
             "1q3lz168q081iwl9jg21fbzhp9la79gav9mv6nmh2jab83s2l3mj"))))
     (build-system perl-build-system)
-    (inputs `(("freeglut" ,freeglut)
-              ("libxi" ,libxi)
-              ("libxmu" ,libxmu)))
+    (inputs (list freeglut libxi libxmu))
     (arguments
      '(#:tests? #f ; test.pl fails with our empty glversion.txt, while
                    ; the package still seems to work on the examples
@@ -8215,8 +8037,7 @@ and FreeGLUT.")
          "1fj1fakkfklf2iwzsl64vfgshya3jgm6vhxiphw12wlac9g2il0m"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-sub-exporter" ,perl-sub-exporter)
-       ("perl-params-util" ,perl-params-util)))
+     (list perl-sub-exporter perl-params-util))
     (home-page "https://metacpan.org/release/Package-Anon")
     (synopsis "Anonymous packages")
     (description "This module allows for anonymous packages that are
@@ -8238,13 +8059,9 @@ instance, not by name.")
          "0jv8svfh1c1q4vxlkf8vjfbdq3n2sj3nx5llv1qrhp1b93d3lx0x"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-requires" ,perl-test-requires)
-       ("perl-test-output" ,perl-test-output)))
+     (list perl-test-fatal perl-test-requires perl-test-output))
     (propagated-inputs
-     `(("perl-list-moreutils" ,perl-list-moreutils)
-       ("perl-params-util" ,perl-params-util)
-       ("perl-sub-install" ,perl-sub-install)))
+     (list perl-list-moreutils perl-params-util perl-sub-install))
     (arguments `(#:tests? #f))          ;XXX: Failing for some reason...
     (home-page "https://metacpan.org/release/Package-DeprecationManager")
     (synopsis "Manage deprecation warnings for your distribution")
@@ -8265,14 +8082,11 @@ one or more modules.")
         (base32 "0zrs4byhlpq5ybnl0fd3y6pfzair6i2dyvzn7f7a7pgj9n2fi3n5"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-dist-checkconflicts" ,perl-dist-checkconflicts)
-       ("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-requires" ,perl-test-requires)
-       ("perl-package-anon" ,perl-package-anon)))
+     (list perl-dist-checkconflicts perl-test-fatal perl-test-requires
+           perl-package-anon))
     (propagated-inputs
-     `(("perl-module-implementation" ,perl-module-implementation)
-       ("perl-dist-checkconflicts" ,perl-dist-checkconflicts)
-       ("perl-package-stash-xs" ,perl-package-stash-xs)))
+     (list perl-module-implementation perl-dist-checkconflicts
+           perl-package-stash-xs))
     (home-page "https://metacpan.org/release/Package-Stash")
     (synopsis "Routines for manipulating stashes")
     (description "Manipulating stashes (Perl's symbol tables) is occasionally
@@ -8293,9 +8107,7 @@ of that behind a simple API.")
         (base32 "1akqk10qxwk798qppajqbczwmhy4cs9g0lg961m3vq218slnnryk"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-requires" ,perl-test-requires)
-       ("perl-package-anon" ,perl-package-anon)))
+     (list perl-test-fatal perl-test-requires perl-package-anon))
     (home-page "https://metacpan.org/release/Package-Stash-XS")
     (synopsis "Faster implementation of the Package::Stash API")
     (description "This is a backend for Package::Stash, which provides the
@@ -8340,7 +8152,7 @@ is particularly useful for debugging.")
          "0wm4wp6p3ah5z212jl12728z68nmxmfr0f03z1jpvdzffnc2xppi"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-warn" ,perl-test-warn)))
+     (list perl-test-warn))
     (home-page "https://metacpan.org/release/Parallel-ForkManager")
     (synopsis "Simple parallel processing fork manager")
     (description "@code{Parallel::ForkManager} is intended for use in
@@ -8363,11 +8175,9 @@ processes to be forked off should be limited.")
         "052r198xyrsv8wz21gijdigz2cgnidsa37nvyfzdiz4rv1fc33ir"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+     (list perl-module-build perl-test-pod perl-test-pod-coverage))
     (propagated-inputs
-     `(("perl-devel-callchecker" ,perl-devel-callchecker)))
+     (list perl-devel-callchecker))
     (home-page "https://metacpan.org/release/Params-Classify")
     (synopsis "Argument type classification")
     (description "This module provides various type-testing functions.
@@ -8417,11 +8227,9 @@ checking parameters easier.")
          "0cwpf8yxwyxbnwhf6rx4wnaq1q38j38i34a78a005shb8gxqv9j9"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-requires" ,perl-test-requires)))
+     (list perl-module-build perl-test-fatal perl-test-requires))
     (propagated-inputs
-     `(("perl-module-implementation" ,perl-module-implementation)))
+     (list perl-module-implementation))
     (home-page "https://metacpan.org/release/Params-Validate")
     (synopsis "Validate method/function parameters")
     (description "The Params::Validate module allows you to validate method or
@@ -8442,14 +8250,10 @@ function call parameters to an arbitrary level of specificity.")
     (build-system perl-build-system)
     (native-inputs
      ;; For tests.
-     `(("perl-test-without-module" ,perl-test-without-module)
-       ("perl-test2-plugin-nowarnings" ,perl-test2-plugin-nowarnings)
-       ("perl-test2-suite" ,perl-test2-suite)
-       ("perl-type-tiny" ,perl-type-tiny)))
-    (propagated-inputs
-     `(("perl-eval-closure" ,perl-eval-closure)
-       ("perl-exception-class" ,perl-exception-class)
-       ("perl-specio" ,perl-specio)))
+     (list perl-test-without-module perl-test2-plugin-nowarnings
+           perl-test2-suite perl-type-tiny))
+    (propagated-inputs
+     (list perl-eval-closure perl-exception-class perl-specio))
     (home-page "https://github.com/houseabsolute/Params-ValidationCompiler")
     (synopsis "Build an optimized subroutine parameter validator")
     (description "This module creates a customized, highly efficient
@@ -8494,7 +8298,7 @@ distributions.")
         (base32
          "1kj8q8dmd8jci94w5arav59nkp0pkxrkliz4n8n6yf02hsa82iv5"))))
     (build-system perl-build-system)
-    (native-inputs `(("perl-module-build" ,perl-module-build)))
+    (native-inputs (list perl-module-build))
     (home-page "https://metacpan.org/release/Path-Class")
     (synopsis "Path specification manipulation")
     (description "Path::Class is a module for manipulation of file and
@@ -8525,7 +8329,7 @@ directory specifications in a cross-platform manner.")
                                "/bin/pwd'")))
              #t)))))
     (inputs
-     `(("coreutils" ,coreutils)))
+     (list coreutils))
     (home-page "https://metacpan.org/release/PathTools")
     (synopsis "Tools for working with directory and file names")
     (description "This package provides functions to work with directory and
@@ -8550,7 +8354,7 @@ file names.")
     ;;  `(("perl-test-failwarnings" ,perl-test-failwarnings)
     ;;    ("perl-test-mockrandom" ,perl-test-mockrandom)))
     (inputs
-     `(("perl-unicode-utf8" ,perl-unicode-utf8)))
+     (list perl-unicode-utf8))
     (home-page "https://metacpan.org/release/Path-Tiny")
     (synopsis "File path utility")
     (description "This module provides a small, fast utility for working
@@ -8571,10 +8375,9 @@ with file paths.")
                 "0nlks4p33d08h0fiv6aivinalf9f9zdkgkxqvvbbvdkvyh4z29a9"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-exception" ,perl-test-exception)
-       ("perl-test-memory-cycle" ,perl-test-memory-cycle)))
+     (list perl-test-exception perl-test-memory-cycle))
     (propagated-inputs
-     `(("perl-font-ttf" ,perl-font-ttf)))
+     (list perl-font-ttf))
     (home-page "https://metacpan.org/release/PDF-API2")
     (synopsis "Facilitates the creation and modification of PDF files")
     (description "This Perl module facilitates the creation and modification
@@ -8595,7 +8398,7 @@ of PDF files.")
                 "1jw1ri8nkm4ck73arbsld1y2qgj2b9ir01y8mzb3mjs6w0pkz8w3"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-exception" ,perl-test-exception)))
+     (list perl-test-exception))
     (home-page
      "https://metacpan.org/release/PerlIO-utf8_strict")
     (synopsis "Fast and correct UTF-8 IO")
@@ -8619,8 +8422,7 @@ for correctness.")
        "1zd0zm6vxapw6bds3ipymkbzam70p3j3rm48794qy11620r22dgx"))))
    (build-system perl-build-system)
    (native-inputs
-    `(("perl-file-sharedir-install" ,perl-file-sharedir-install)
-      ("perl-yaml-libyaml" ,perl-yaml-libyaml)))
+    (list perl-file-sharedir-install perl-yaml-libyaml))
    (home-page "https://metacpan.org/release/Pegex")
    (synopsis "Acmeist PEG Parser Framework")
    (description "Pegex is an Acmeist parser framework.  It allows you to easily
@@ -8645,13 +8447,38 @@ available.")
          "01xifj83dv492lxixijmg6va02rf3ydlxly0a9slmx22r6qa1drh"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-devel-symdump" ,perl-devel-symdump)))
+     (list perl-devel-symdump perl-pod-parser))
     (home-page "https://metacpan.org/release/Pod-Coverage")
     (synopsis "Check for comprehensive documentation of a module")
     (description "This module provides a mechanism for determining if the pod
 for a given module is comprehensive.")
     (license (package-license perl))))
 
+(define-public perl-pod-parser
+  (package
+    (name "perl-pod-parser")
+    (version "1.63")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://cpan/authors/id/M/MA/MAREKR/Pod-Parser-"
+                    version ".tar.gz"))
+              (sha256
+               (base32
+                "1k8clxxdjag56zm6cv38c3q81gj7xphfhh98l21jynwp55hvbq6v"))))
+    (build-system perl-build-system)
+    (home-page "https://metacpan.org/release/Pod-Parser")
+    (synopsis "Modules for parsing/translating POD format documents")
+    (description
+     "@code{Pod::Parser} is a base class for creating POD filters and
+translators.  It handles most of the effort involved with parsing the POD
+sections from an input stream, leaving subclasses free to be concerned only
+with performing the actual translation of text.
+
+@emph{NOTE}: This module is considered legacy.  New projects should prefer
+@code{Pod::Simple} instead.")
+    (license license:perl-license)))
+
 (define-public perl-pod-simple
   (package
     (name "perl-pod-simple")
@@ -8684,7 +8511,7 @@ used for writing documentation for Perl and for Perl modules.")
         (base32
          "04dcn2n4rfkj8p24vj2p17vvis40l87pf2vdqp0vqm5jg3fjnn16"))))
     (build-system perl-build-system)
-    (native-inputs `(("perl-module-build" ,perl-module-build)))
+    (native-inputs (list perl-module-build))
     (arguments `(#:tests? #f))          ; TODO: Timezone test failures
     (home-page "https://metacpan.org/release/POSIX-strftime-Compiler")
     (synopsis "GNU C library compatible strftime for loggers and servers")
@@ -8709,16 +8536,10 @@ applications.")
     (arguments
      `(#:tests? #f))                    ;FIXME: some tests fail
     (native-inputs
-     `(("perl-class-inspector" ,perl-class-inspector)
-       ("perl-test-deep" ,perl-test-deep)
-       ("perl-test-nowarnings" ,perl-test-nowarnings)
-       ("perl-test-object" ,perl-test-object)
-       ("perl-test-subcalls" ,perl-test-subcalls)))
+     (list perl-class-inspector perl-test-deep perl-test-nowarnings
+           perl-test-object perl-test-subcalls))
     (propagated-inputs
-     `(("perl-clone" ,perl-clone)
-       ("perl-io-string" ,perl-io-string)
-       ("perl-params-util" ,perl-params-util)
-       ("perl-task-weaken" ,perl-task-weaken)))
+     (list perl-clone perl-io-string perl-params-util perl-task-weaken))
     (home-page "https://metacpan.org/release/PPI")
     (synopsis "Parse, analyze and manipulate Perl (without Perl)")
     (description "The PPI module parses, analyzes and manipulates Perl
@@ -8764,7 +8585,7 @@ Module::Build project, but has been externalized here for general use.")
          (add-after 'unpack 'set-EDITOR
            (lambda _ (setenv "EDITOR" "echo") #t)))))
     (propagated-inputs
-     `(("perl-carp-assert" ,perl-carp-assert)))
+     (list perl-carp-assert))
     (home-page "https://metacpan.org/release/Proc-InvokeEditor")
     (synopsis "Interface to external editor from Perl")
     (description "This module provides the ability to supply some text to an
@@ -8784,7 +8605,7 @@ external text editor, have it edited by the user, and retrieve the results.")
         (base32
          "165zcf9lpijdpkx82za0g9rx8ckjnhipmcivdkyzshl8jmp1bl4v"))))
     (build-system perl-build-system)
-    (native-inputs `(("perl-module-build" ,perl-module-build)))
+    (native-inputs (list perl-module-build))
     (home-page "https://metacpan.org/release/Readonly")
     (synopsis "Create read-only scalars, arrays, hashes")
     (description "This module provides a facility for creating non-modifiable
@@ -8873,10 +8694,9 @@ and @code{deserialize_regexp}.")
          "0ak60hakn0ixmsiw403si0lf5pagq5r6wjgl7p0pr979nlcikfmd"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-namespace-autoclean" ,perl-namespace-autoclean)
-       ("perl-test-fatal" ,perl-test-fatal)))
+     (list perl-namespace-autoclean perl-test-fatal))
     (propagated-inputs
-     `(("perl-class-method-modifiers" ,perl-class-method-modifiers)))
+     (list perl-class-method-modifiers))
     (home-page "https://metacpan.org/release/Role-Tiny")
     (synopsis "Roles, as a slice of Moose")
     (description "Role::Tiny is a minimalist role composition tool.")
@@ -8929,9 +8749,7 @@ safely on things that may not be objects.")
         "0llbsqk7rsg9p7l1f4yk6iv7wij91gvavprsqhnb04w7nz4ifjpm"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+     (list perl-module-build perl-test-pod perl-test-pod-coverage))
     (home-page "https://metacpan.org/release/Scalar-String")
     (synopsis "String aspects of scalars")
     (description "@code{Scalar::String} is about the string part of
@@ -9001,7 +8819,7 @@ collector.")
       (base32 "0jf3vdmdgxx6a9xrfwnbbs9g37i1i6qhfg5qwln8x5i280701m3g"))))
    (build-system perl-build-system)
    (native-inputs
-    `(("perl-extutils-cppguess" ,perl-extutils-cppguess)))
+    (list perl-extutils-cppguess))
    (home-page "https://metacpan.org/release/Set-IntervalTree")
    (synopsis "Perform range-based lookups on sets of ranges")
    (description "This package provides an efficient mechanism to look up
@@ -9040,8 +8858,7 @@ optimized for sets that have long runs of consecutive integers.")
         (base32 "040q819l9x55j0hjhfvc153451syvjffw3d22gs398sd23mwzzsy"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-moose" ,perl-moose)
-       ("perl-test-leaktrace" ,perl-test-leaktrace)))
+     (list perl-moose perl-test-leaktrace))
     (home-page "https://metacpan.org/release/Set-Object")
     (synopsis "Unordered collections of Perl Objects")
     (description "Set::Object provides efficient sets, unordered collections
@@ -9123,13 +8940,13 @@ word-characters are compared lexically.")
          "1s5xd9awwrzc94ymimjkxqs6jq513wwlmwwarxaklvg2hk4lps0l"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-devel-stacktrace" ,perl-devel-stacktrace)
-       ("perl-eval-closure" ,perl-eval-closure)
-       ("perl-module-runtime" ,perl-module-runtime)
-       ("perl-mro-compat" ,perl-mro-compat)
-       ("perl-role-tiny" ,perl-role-tiny)
-       ("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-needs" ,perl-test-needs)))
+     (list perl-devel-stacktrace
+           perl-eval-closure
+           perl-module-runtime
+           perl-mro-compat
+           perl-role-tiny
+           perl-test-fatal
+           perl-test-needs))
     (home-page "https://metacpan.org/release/Specio")
     (synopsis "Classes for representing type constraints and coercion")
     (description "The Specio distribution provides classes for representing type
@@ -9198,7 +9015,7 @@ its return value is going to be immediately used.")
                 "0y4zf5qkpayp4kkg7lw9ydbbin1z99m6xvy02fgacjbfw4ai9zh9"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-want" ,perl-want)))
+     (list perl-want))
     (home-page "https://metacpan.org/release/Contextual-Return")
     (synopsis "Create context-sensitive return values")
     (description "This module provides a collection of named blocks that allow
@@ -9220,7 +9037,7 @@ which it is called.")
                 "1ywl398z42hz9w1k0waf1caa6agz8jzsjlf4rzs1lgpx2mbcwmb8"))))
     (build-system perl-build-system)
     (inputs
-     `(("perl-number-format" ,perl-number-format)))
+     (list perl-number-format))
     (home-page "https://metacpan.org/release/Statistics-Basic")
     (synopsis "Collection of very basic statistics modules")
     (description "This package provides basic statistics functions like
@@ -9241,12 +9058,10 @@ which it is called.")
                 "1i3bskwibp54c9a2wx8gzr3hyds6mmhr3d550g8j6893005v3bgq"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (propagated-inputs
-     `(("perl-contextual-return" ,perl-contextual-return)
-       ("perl-math-cephes" ,perl-math-cephes)
-       ("perl-math-matrixreal" ,perl-math-matrixreal)
-       ("perl-text-simpletable" ,perl-text-simpletable)))
+     (list perl-contextual-return perl-math-cephes perl-math-matrixreal
+           perl-text-simpletable))
     (home-page "https://metacpan.org/release/Statistics-PCA")
     (synopsis "Perl implementation of Principal Component Analysis")
     (description "This package provides the Statistics::PCA module, an
@@ -9266,7 +9081,7 @@ implementation of @dfn{Principal Component Analysis} (PCA).")
         (base32 "1nkln4fm4962b5jk1dp6lf635nnrj5a5pg1a5xmchvrfrc3asggw"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-xsloader" ,perl-xsloader)))
+     (list perl-xsloader))
     (home-page "https://metacpan.org/dist/Storable")
     (synopsis "Persistence for Perl data structures")
     (description "Storable brings persistence to your Perl data structures
@@ -9393,8 +9208,7 @@ removing double-quotes, and truncating to fit within a desired length.")
          "0mlwm0rirv46gj4h072q8gdync5zxxsxy8p028gdyrhczl942dc3"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-params-util" ,perl-params-util)
-       ("perl-sub-exporter" ,perl-sub-exporter)))
+     (list perl-params-util perl-sub-exporter))
     (home-page "https://metacpan.org/release/String-Formatter")
     (synopsis "Build your own sprintf-like functions")
     (description
@@ -9417,7 +9231,7 @@ fixed string interpolation, and simple width-matching.")
          "18nxl1vgkcx0r7ifkmbl9fp73f8ihiqhqqf3vq6sj5b3cgawrfsw"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-sub-exporter" ,perl-sub-exporter)))
+     (list perl-sub-exporter))
     (home-page "https://metacpan.org/release/String-RewritePrefix")
     (synopsis "Rewrite strings based on a set of known prefixes")
     (description "This module allows you to rewrite strings based on a set of
@@ -9459,7 +9273,7 @@ that they won't be changed.")
                 "1n9lc5dr66sg89hym47764fyfms7vrxrhwvdps2x8x8gxly7rsdl"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-unicode-linebreak" ,perl-unicode-linebreak)))
+     (list perl-unicode-linebreak))
     (home-page "https://metacpan.org/release/String-Print")
     (synopsis "String printing alternatives to printf")
     (description
@@ -9471,7 +9285,7 @@ a functional interface.")
 (define-public perl-sub-exporter
   (package
     (name "perl-sub-exporter")
-    (version "0.987")
+    (version "0.988")
     (source
      (origin
        (method url-fetch)
@@ -9480,11 +9294,10 @@ a functional interface.")
              version ".tar.gz"))
        (sha256
         (base32
-         "1ml3n1ck4ln9qjm2mcgkczj1jb5n1fkscz9c4x23v4db0glb4g2l"))))
+         "03040vk227icdkb0hvxplck2y6rglj67s1rgf12z3465ss3lhci3"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-data-optlist" ,perl-data-optlist)
-       ("perl-params-util" ,perl-params-util)))
+     (list perl-data-optlist perl-params-util))
     (home-page "https://metacpan.org/release/Sub-Exporter")
     (synopsis "Sophisticated exporter for custom-built routines")
     (description
@@ -9505,7 +9318,7 @@ custom-built routines.")
         (base32
          "0mn0x8mkh36rrsr58s1pk4srwxh2hbwss7sv630imnk49navfdfm"))))
     (build-system perl-build-system)
-    (native-inputs `(("perl-sub-exporter" ,perl-sub-exporter)))
+    (native-inputs (list perl-sub-exporter))
     (home-page "https://metacpan.org/release/Sub-Exporter-Progressive")
     (synopsis "Only use Sub::Exporter if you need it")
     (description "Sub::Exporter is an incredibly powerful module, but with
@@ -9549,7 +9362,7 @@ references.")
           "1snhrmc6gpw2zjnj7zvvqj69mlw711bxah6kk4dg5vxxjvb5cc7a"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-importer" ,perl-importer)))
+     (list perl-importer))
     (home-page "https://metacpan.org/release/Sub-Info")
     (synopsis "Tool to inspect subroutines")
     (description "This package provides tools for inspecting subroutines
@@ -9592,7 +9405,7 @@ can see them.")
          "05viq8scqk29g964fsfvls2rhvlb8myz3jblwh5c2ivhw3gfjcmx"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-devel-checkbin" ,perl-devel-checkbin)))
+     (list perl-devel-checkbin))
     (home-page "https://metacpan.org/release/Sub-Name")
     (synopsis "(Re)name a sub")
     (description "Assigns a new name to referenced sub.  If package
@@ -9614,9 +9427,9 @@ return value is the sub.")
         (base32 "17fq4iskrisnqs96amrz493vxikwvqbj9s7014k6vyl84gs2lkkf"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-fatal" ,perl-test-fatal)))
+     (list perl-test-fatal))
     (propagated-inputs
-     `(("perl-sub-name" ,perl-sub-name)))
+     (list perl-sub-name))
     (home-page "https://metacpan.org/release/Sub-Quote")
     (synopsis "Efficient generation of subroutines via string eval")
     (description "Sub::Quote provides an efficient generation of subroutines
@@ -9656,9 +9469,9 @@ uplevel() are avoided.")
         (base32 "16nk2za9fwyg7mcifacr69qi075iz1yvy8r9jh3903kzdvkiwpb8"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (propagated-inputs
-     `(("perl-sub-identify" ,perl-sub-identify)))
+     (list perl-sub-identify))
     (home-page "https://metacpan.org/release/SUPER")
     (synopsis "Control superclass method dispatching")
     (description
@@ -9847,8 +9660,7 @@ error encouraging the user to seek support.")
          "1msxg3j1hx5wsc7vr81x5gs9gdbn4y0x6cvyj3pq4dgi1603dbvi"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-appconfig" ,perl-appconfig)
-       ("perl-test-leaktrace" ,perl-test-leaktrace)))
+     (list perl-appconfig perl-test-leaktrace))
     (home-page "https://metacpan.org/release/Template-Toolkit")
     (synopsis "Template processing system for Perl")
     (description "The Template Toolkit is a collection of modules which
@@ -9872,7 +9684,7 @@ documents: HTML, XML, POD, PostScript, LaTeX, and so on.")
          "1d3pbcx1kz73ncg8s8lx3ifwphz838qy0m40gdar7790cnrlqcdp"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-template-toolkit" ,perl-template-toolkit)))
+     (list perl-template-toolkit))
     (home-page "https://metacpan.org/release/Template-Timer")
     (synopsis "Profiling for Template Toolkit")
     (description "Template::Timer provides inline profiling of the template
@@ -9918,7 +9730,7 @@ future, or if you want the retain the familiarity of TT-style templates.")
         (base32 "0zgj329kfrwcyqn491v04x65yjydwfc4845a71f8hypdrj3vv0b2"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-warn" ,perl-test-warn)))
+     (list perl-test-warn))
     (home-page "https://metacpan.org/dist/Term-ANSIColor")
     (synopsis "Interface to the ANSI terminal escape sequences for color")
     (description "Term::ANSIColor provides constants and simple functions for
@@ -9943,7 +9755,7 @@ supported.")
          "02qx4ni1vqp9hvkw69hp5bxcf2ghjiw8sl34pqy5mlimsy3rdflm"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)))
+     (list perl-module-install))
     (home-page "https://metacpan.org/release/Term-Encoding")
     (synopsis "Detect encoding of the current terminal")
     (description "Term::Encoding is a simple module to detect the encoding of
@@ -9964,11 +9776,9 @@ the current terminal expects in various ways.")
          "15pn42zf793dplpfnmawh7v7xc4qm38s1jhvn1agx4cafcn61q61"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-capture-tiny" ,perl-capture-tiny)
-       ("perl-test-exception" ,perl-test-exception)))
+     (list perl-capture-tiny perl-test-exception))
     (propagated-inputs
-     `(("perl-class-methodmaker" ,perl-class-methodmaker)
-       ("perl-term-readkey" ,perl-term-readkey)))
+     (list perl-class-methodmaker perl-term-readkey))
     (home-page "https://metacpan.org/release/Term-ProgressBar")
     (synopsis "Progress meter on a standard terminal")
     (description "Term::ProgressBar provides a simple progress bar on the
@@ -9990,9 +9800,7 @@ stuff has been done, and maybe an estimate at how long remains.")
          "19l4476iinwz19vh360k3rss38m9gmkg633i5v9jkg48yn954rr5"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-io-interactive" ,perl-io-interactive)
-       ("perl-term-progressbar" ,perl-term-progressbar)
-       ("perl-test-mockobject" ,perl-test-mockobject)))
+     (list perl-io-interactive perl-term-progressbar perl-test-mockobject))
     (home-page "https://metacpan.org/release/Term-ProgressBar-Quiet")
     (synopsis "Progress meter if run interactively")
     (description "Term::ProgressBar is a wonderful module for showing progress
@@ -10015,7 +9823,7 @@ a cron job) then it does not show the progress bar.")
          "19kr6l2aflwv9yph5xishkpag038qb8wd4mkzb0x1psvgp3b63d2"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-term-progressbar-quiet" ,perl-term-progressbar-quiet)))
+     (list perl-term-progressbar-quiet))
     (home-page "https://metacpan.org/release/Term-ProgressBar-Simple")
     (synopsis "Simple progress bars")
     (description "Term::ProgressBar::Simple tells you how much work has been
@@ -10058,8 +9866,7 @@ screen size, and retrieval/modification of the control characters.")
          "09b9mcmp09kdfh5jaqdr528yny8746hvn3f185aqd6rw06jgf24s"))))
     (build-system perl-build-system)
     (inputs
-     `(("readline" ,readline)
-       ("ncurses" ,ncurses)))
+     (list readline ncurses))
     (arguments
      `(#:tests? #f ; Tests fail without other Term::ReadLine interfaces present
        #:phases (modify-phases %standard-phases
@@ -10096,9 +9903,9 @@ compatible with Term::ReadLine.")
          "1lnynd8pwjp3g85bl4nav6yigg2lag3sx5da989j7a733bdmzyk4"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-devel-hide" ,perl-devel-hide)))
+     (list perl-devel-hide))
     (propagated-inputs
-     `(("perl-term-size-perl" ,perl-term-size-perl)))
+     (list perl-term-size-perl))
     (home-page "https://metacpan.org/release/Term-Size-Any")
     (synopsis "Retrieve terminal size")
     (description "This is a unified interface to retrieve terminal size.  It
@@ -10139,7 +9946,7 @@ Now in pure Perl, with the exception of a C probe run at build time.")
           "0gi4lyvs6n8y6hjwmflfpamfl65y7mb1g39zi0rx35nclj8xb370"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-importer" ,perl-importer)))
+     (list perl-importer))
     (home-page "https://metacpan.org/release/Term-Table")
     (synopsis "Format a header and rows into a table")
     (description "This module is able to generically format rows of data
@@ -10158,7 +9965,7 @@ into tables.")
        (sha256
         (base32 "1vry21jrh91l2pkajnrps83bnr1fn6zshbzi80mcrnggrn9iq776"))))
     (build-system perl-build-system)
-    (native-inputs `(("perl-module-build" ,perl-module-build)))
+    (native-inputs (list perl-module-build))
     (home-page "https://metacpan.org/release/Text-Aligner")
     (synopsis "Align text")
     (description "Text::Aligner exports a single function, align(), which is
@@ -10239,7 +10046,7 @@ and escapes.")
          "013g13prdghxvrp5754gyc7rmv1syyxrhs33yc5f0lrz3dxs1fp8"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-algorithm-diff" ,perl-algorithm-diff)))
+     (list perl-algorithm-diff))
     (home-page "https://metacpan.org/release/Text-Diff")
     (synopsis "Perform diffs on files and record sets")
     (description "Text::Diff provides a basic set of services akin to the GNU
@@ -10263,9 +10070,7 @@ generally slower on larger files.")
                 "0104z7jjv46kqh77rnx8kvmsbr5dy0s56xm01dckq4ly65br0hkx"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+     (list perl-module-build perl-test-pod perl-test-pod-coverage))
     (home-page "https://metacpan.org/release/Text-Format")
     (synopsis "Various subroutines to format text")
     (description "This package provides functions to format text in various
@@ -10286,7 +10091,7 @@ to tabs.")
         (base32
          "11sj62fynfgwrlgkv5a051cq6yn0pagxqjsz27dxx8phsd4wv706"))))
     (build-system perl-build-system)
-    (native-inputs `(("perl-module-build" ,perl-module-build)))
+    (native-inputs (list perl-module-build))
     (home-page "https://metacpan.org/release/Text-Glob")
     (synopsis "Match globbing patterns against text")
     (description "Text::Glob implements glob(3) style matching that can be
@@ -10307,10 +10112,9 @@ you want to do full file globbing use the File::Glob module instead.")
         (base32 "1siq8hgj7s8gwpf3n3h1is5v50rwi6av8lfb19khiyyqz0rp7a57"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build-tiny" ,perl-module-build-tiny)))
+     (list perl-module-build-tiny))
     (propagated-inputs
-     `(("perl-data-section-simple" ,perl-data-section-simple)
-       ("perl-uri" ,perl-uri)))
+     (list perl-data-section-simple perl-uri))
     (home-page "https://metacpan.org/release/Text-Haml")
     (synopsis "Haml Perl implementation")
     (description
@@ -10333,7 +10137,7 @@ you want to do full file globbing use the File::Glob module instead.")
          "129msa57jzxxi2x7z9hgzi48r48y65w77ycfk1w733zz2m8nr8y3"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (home-page
      "https://metacpan.org/release/Text-NeatTemplate")
     (synopsis "Fast, middleweight template engine")
@@ -10374,7 +10178,7 @@ tokens or array of arrays.")
         (base32 "1k1xbhxwn9fymqqwnam9pm7hr2p5ikq6dk578qw18gkap9hqxwga"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-text-diff" ,perl-text-diff)))
+     (list perl-text-diff))
     (home-page "https://metacpan.org/release/Text-Patch")
     (synopsis "Patches text with given patch")
     (description "Text::Patch combines source text with given
@@ -10434,9 +10238,9 @@ algorism to indicate multiplication by 1000.")
          "04kh5x5inq183rdg221wlqaaqi1ipyj588mxsslik6nhc14f17nd"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (propagated-inputs
-     `(("perl-text-aligner" ,perl-text-aligner)))
+     (list perl-text-aligner))
     (home-page "https://metacpan.org/release/Text-Table")
     (synopsis "Organize Data in Tables")
     (description "Text::Table renders plaintext tables.")
@@ -10476,8 +10280,7 @@ Text::Wrap will reformat lines into paragraphs.")
          "12zi08mwmlbfbnsialmppk75s6dkg765dvmay3wif3158plqp554"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-more-utf8" ,perl-test-more-utf8)
-       ("perl-test-warnings" ,perl-test-warnings)))
+     (list perl-test-more-utf8 perl-test-warnings))
     (home-page
      "https://metacpan.org/release/Text-Template")
     (synopsis
@@ -10542,11 +10345,9 @@ system.")
          "184gdcwxqwnkrx5md968v1ny70pq6blzpkihccm3bpdxnpgd11wr"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-devel-stacktrace" ,perl-devel-stacktrace)))
+     (list perl-devel-stacktrace))
     (propagated-inputs
-     `(("perl-devel-stacktrace" ,perl-devel-stacktrace)
-       ("perl-module-runtime" ,perl-module-runtime)
-       ("perl-moo" ,perl-moo)))
+     (list perl-devel-stacktrace perl-module-runtime perl-moo))
     (home-page "https://metacpan.org/release/Throwable")
     (synopsis "Role for classes that can be thrown")
     (description "Throwable is a role for classes that are meant to be thrown
@@ -10605,7 +10406,7 @@ again.  Once you get to the end of the list, you go back to the beginning.")
         (base32
           "0mmg9iyh42syal3z1p2pn9airq65yrkfs66cnqs9nz76jy60pfzs"))))
   (build-system perl-build-system)
-  (native-inputs `(("perl-module-build" ,perl-module-build)))
+  (native-inputs (list perl-module-build))
   (home-page "https://metacpan.org/release/Tie-IxHash")
   (synopsis "Ordered associative arrays for Perl")
   (description "This Perl module implements Perl hashes that preserve the
@@ -10633,7 +10434,7 @@ operations can also be performed on the IxHash.")
     (home-page "https://metacpan.org/release/Tie-Handle-Offset")
     (synopsis "Special file handle that hides the beginning of a file")
     (description
-     "This modules provides a file handle that hides the beginning of a file,
+     "This module provides a file handle that hides the beginning of a file,
 by modifying the @code{seek()} and @code{tell()} calls.")
     (license license:asl2.0)))
 
@@ -10676,7 +10477,7 @@ figure out what you're trying to do.")
          "1x1smn1kw383xc5h9wajxk9dlx92bgrbf7gk4abga57y6120s6m3"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-test-simple" ,perl-test-simple)))
+     (list perl-test-simple))
     (home-page "https://metacpan.org/release/Tie-ToObject")
     (synopsis "Tie to an existing Perl object")
     (description "This class provides a tie constructor that returns the
@@ -10697,9 +10498,7 @@ $object->TIEHASH are avoided.")
         (base32 "1f59z2svfydxgd1gzrb5k3hl6d432kzmskk7jhv2dyb5hyx0wd7y"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+     (list perl-module-install perl-test-pod perl-test-pod-coverage))
     (home-page "https://metacpan.org/release/Time-Duration")
     (synopsis "English expression of durations")
     (description "This module provides functions for expressing durations in
@@ -10719,9 +10518,9 @@ rounded or exact terms.")
         (base32 "10g39bbrxkabbsfq4rv7f5b5x7h3jba08j4pg8gwr0b9iqx19n31"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-time-duration" ,perl-time-duration)))
+     (list perl-time-duration))
     (propagated-inputs
-     `(("perl-exporter-lite" ,perl-exporter-lite)))
+     (list perl-exporter-lite))
     (home-page "https://metacpan.org/release/Time-Duration-Parse")
     (synopsis "Parse time duration strings")
     (description "Time::Duration::Parse is a module to parse human readable
@@ -10823,9 +10622,9 @@ time values and formatting dates into ASCII strings.")
          "0bwqyg8z98m8cjw1qcm4wg502n225k33j2fp8ywxkgfjdd1zgllv"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (propagated-inputs
-     `(("perl-timedate" ,perl-timedate))) ;For Date::Parse
+     (list perl-timedate)) ;For Date::Parse
     (home-page "https://metacpan.org/release/Time-Mock")
     (synopsis "Shift and scale time")
     (description "This module allows you to speed up your sleep(), alarm(),
@@ -10845,10 +10644,9 @@ and time() calls.")
         (base32 "176j8zgsndfnxb5mxaiarnva3ghck1jxgxwkz77r9fr2sadpksdp"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-exception" ,perl-test-exception)))
+     (list perl-module-build perl-test-exception))
     (propagated-inputs
-     `(("perl-scalar-list-utils" ,perl-scalar-list-utils)))
+     (list perl-scalar-list-utils))
     (home-page "https://metacpan.org/release/Tree-Simple")
     (synopsis "Simple tree object")
     (description "This module in a fully object-oriented implementation of a
@@ -10868,10 +10666,9 @@ simple n-ary tree.")
         (base32 "19hdi00rw492m5r51b495gv5c64g91g98f8lm6sgym1cl7x3ixcw"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-exception" ,perl-test-exception)))
+     (list perl-module-build perl-test-exception))
     (propagated-inputs
-     `(("perl-tree-simple" ,perl-tree-simple)))
+     (list perl-tree-simple))
     (home-page "https://metacpan.org/release/Tree-Simple-VisitorFactory")
     (synopsis "Factory object for dispensing Visitor objects")
     (description "This module is a factory for dispensing
@@ -10911,11 +10708,9 @@ else.")
         (base32 "0d2ldn6pi8dj7shk4gkjm9bzqr7509fzkwjs7579pmgg6xkkynjf"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-requires" ,perl-test-requires)))
+     (list perl-test-fatal perl-test-requires))
     (propagated-inputs
-     `(("perl-exporter-tiny" ,perl-exporter-tiny)
-       ("perl-hash-fieldhash" ,perl-hash-fieldhash)))
+     (list perl-exporter-tiny perl-hash-fieldhash))
     (home-page "https://metacpan.org/release/Type-Tie")
     (synopsis "Tie a variable to a type constraint")
     (description "This module exports a single function: @code{ttie}.  It ties
@@ -10938,17 +10733,17 @@ variable conform.")
         (base32 "0s11rlkkjjys8x6ihm5mrhzbbf341g5ckqbalph4g7l98kcy26yl"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-warnings" ,perl-test-warnings)))
+     (list perl-test-warnings))
     (propagated-inputs
-     `(("perl-devel-lexalias" ,perl-devel-lexalias)
-       ("perl-devel-stacktrace" ,perl-devel-stacktrace)
-       ("perl-exporter-tiny" ,perl-exporter-tiny)
-       ("perl-moo" ,perl-moo)
-       ("perl-moose" ,perl-moose)
-       ("perl-mouse" ,perl-mouse)
-       ("perl-ref-util-xs" ,perl-ref-util-xs)
-       ("perl-regexp-util" ,perl-regexp-util)
-       ("perl-type-tie" ,perl-type-tie)))
+     (list perl-devel-lexalias
+           perl-devel-stacktrace
+           perl-exporter-tiny
+           perl-moo
+           perl-moose
+           perl-mouse
+           perl-ref-util-xs
+           perl-regexp-util
+           perl-type-tie))
     (home-page "https://metacpan.org/release/Type-Tiny")
     (synopsis "Tiny, yet Moo(se)-compatible type constraint")
     (description "@code{Type::Tiny} is a small class for writing type
@@ -10991,10 +10786,8 @@ so other data validation frameworks might also consider using it.")
         (base32 "1072vwcbx2bldfg8xpxc9iqs3rzqd18yik60b432hsdwxpxcjgsr"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-file-pushd" ,perl-file-pushd)
-       ("perl-path-tiny" ,perl-path-tiny)
-       ("perl-type-tiny" ,perl-type-tiny)
-       ("perl-exporter-tiny" ,perl-exporter-tiny)))
+     (list perl-file-pushd perl-path-tiny perl-type-tiny
+           perl-exporter-tiny))
     (home-page "https://metacpan.org/release/Types-Path-Tiny")
     (synopsis "Types and coercions for Moose and Moo")
     (description "This module provides @code{Path::Tiny} types for Moose, Moo,
@@ -11017,7 +10810,7 @@ to ensure that files or directories exist.")
          "03bk0hm5ys8k7265dkap825ybn2zmzb1hl0kf1jdm8yq95w39lvs"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-common-sense" ,perl-common-sense)))
+     (list perl-common-sense))
     (home-page "https://metacpan.org/release/Types-Serialiser")
     (synopsis "Data types for common serialisation formats")
     (description "This module provides some extra datatypes that are used by
@@ -11074,7 +10867,7 @@ common serialisation formats such as JSON or CBOR.")
                                     (getenv "PERL5LIB")))
              #t)))))
     (propagated-inputs
-     `(("perl-unicode-normalize" ,perl-unicode-normalize)))
+     (list perl-unicode-normalize))
     (home-page "https://metacpan.org/release/Unicode-Collate")
     (synopsis "Unicode collation algorithm")
     (description "This package provides tools for sorting and comparing
@@ -11096,7 +10889,7 @@ Unicode data.")
                 "12iinva5gqc9g7qzxrvmh45n714z0ad9g7wq2dxwgp6drbj64rs8"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-mime-charset" ,perl-mime-charset)))
+     (list perl-mime-charset))
     (home-page "https://metacpan.org/release/Unicode-LineBreak")
     (synopsis "Unicode line breaking algorithm")
     (description
@@ -11121,10 +10914,8 @@ defined by Annex #11 is used to determine breaking positions.")
     ;; <https://rt.cpan.org/Public/Bug/Display.html?id=127007>.
     (arguments `(#:tests? ,(target-64bit?)))
     (native-inputs
-     `(("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-leaktrace" ,perl-test-leaktrace)
-       ("perl-variable-magic" ,perl-variable-magic)
-       ("perl-test-pod" ,perl-test-pod)))
+     (list perl-test-fatal perl-test-leaktrace perl-variable-magic
+           perl-test-pod))
     (home-page "https://metacpan.org/release/Unicode-UTF8")
     (synopsis "Encoding and decoding of UTF-8 encoding form")
     (description
@@ -11165,7 +10956,7 @@ UNIVERSAL::can() as a function, which it is not.")
          "0avzv9j32aab6l0rd63n92v0pgliz1p4yabxxjfq275hdh1mcsfi"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build-tiny" ,perl-module-build-tiny)))
+     (list perl-module-build-tiny))
     (home-page "https://metacpan.org/release/UNIVERSAL-isa")
     (synopsis "UNIVERSAL::isa() reimplementation")
     (description "This module attempts to recover from people calling
@@ -11255,10 +11046,8 @@ attribute names.")
         (base32 "0pyqr12jsqagna75fm2gijfzw06wy1hrh5chn9hwnmcfddda66g8"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-distribution" ,perl-test-distribution)
-       ("perl-text-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)
-       ("perl-test-portability-files" ,perl-test-portability-files)))
+     (list perl-test-distribution perl-test-pod perl-test-pod-coverage
+           perl-test-portability-files))
     (home-page "https://metacpan.org/dist/XSLoader")
     (synopsis "Dynamically load C libraries into Perl code")
     (description "XSLoader module defines a standard simplified interface to the
@@ -11279,9 +11068,7 @@ to implement cheap automatic dynamic loading of Perl modules.")
                 "0njyy4y0zax4zz55y82dlm9cly1pld1lcxb281s12bp9rrhf9j9x"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-extutils-depends" ,perl-extutils-depends)
-       ("perl-module-install" ,perl-module-install)
-       ("perl-test-fatal" ,perl-test-fatal)))
+     (list perl-extutils-depends perl-module-install perl-test-fatal))
     (home-page "https://metacpan.org/release/XS-Object-Magic")
     (synopsis "Opaque, extensible XS pointer backed objects using sv_magic")
     (description
@@ -11304,7 +11091,7 @@ neither visible nor modifiable from Perl space).")
         (base32 "1kbrfksjg4k4vmx1i337m5n69m00m0m5bgsh61c15bzzrgbacc2h"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-yaml" ,perl-test-yaml)))
+     (list perl-test-yaml))
     (home-page "https://metacpan.org/release/YAML")
     (synopsis "YAML for Perl")
     (description "The YAML.pm module implements a YAML Loader and Dumper based
@@ -11345,8 +11132,7 @@ best YAML support to date.")
          "0i3p4nz8ysrsrs6vlzc6gkjcfpcaf05xjc7lwbjkw7lg5shmycdw"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-json-maybexs" ,perl-json-maybexs)
-       ("perl-module-build-tiny" ,perl-module-build-tiny)))
+     (list perl-json-maybexs perl-module-build-tiny))
     (arguments
      `(#:tests? #f))                    ;requires Test::More >= 0.99
     (home-page "https://metacpan.org/release/YAML-Tiny")
@@ -11372,7 +11158,7 @@ and memory overhead.")
          "0dvfcn2xvj9r4ra5xqgasl847nsm1iy85w1kly41fkxm9im36hqr"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (home-page
      "https://metacpan.org/release/Parse-RecDescent")
     (synopsis "Generate recursive-descent parsers")
@@ -11420,9 +11206,8 @@ grammars to generate Perl object oriented parser modules.")
          "1mm3dfw3ffyzb2ikpqn9l6zyqrxijb4vyywmbx2l21ryqwp0zy74"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-cpan-meta-requirements" ,perl-cpan-meta-requirements)
-       ("perl-cpan-meta-yaml" ,perl-cpan-meta-yaml)
-       ("perl-parse-cpan-meta" ,perl-parse-cpan-meta)))
+     (list perl-cpan-meta-requirements perl-cpan-meta-yaml
+           perl-parse-cpan-meta))
     (home-page "https://metacpan.org/release/CPAN-Meta")
     (synopsis "Distribution metadata for a CPAN dist")
     (description "Software distributions released to the CPAN include a
@@ -11481,7 +11266,7 @@ MYMETA.yml.")
 (define-public perl-module-build
   (package
     (name "perl-module-build")
-    (version "0.4229")
+    (version "0.4231")
     (source
      (origin
        (method url-fetch)
@@ -11489,10 +11274,10 @@ MYMETA.yml.")
                            "Module-Build-" version ".tar.gz"))
        (sha256
         (base32
-         "064c03wxia7jz0i578awj4srykj0nnigm4p5r0dv0559rnk93r0z"))))
+         "05xpn8qg814y49vrih16zfr9iiwb7pmdf57ahjnc2h0p5illq3vy"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-cpan-meta" ,perl-cpan-meta)))
+     (list perl-cpan-meta))
     (home-page "https://metacpan.org/release/Module-Build")
     (synopsis "Build and install Perl modules")
     (description "@code{Module::Build} is a system for building, testing, and
@@ -11519,7 +11304,7 @@ system---most of the @code{Module::Build} code is pure-Perl.")
          "1mm3dfw3ffyzb2ikpqn9l6zyqrxijb4vyywmbx2l21ryqwp0zy74"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-cpan-meta-yaml" ,perl-cpan-meta-yaml)))
+     (list perl-cpan-meta-yaml))
     (home-page "https://metacpan.org/release/DAGOLDEN/Parse-CPAN-Meta-1.4422")
     (synopsis "Parse META.yml and META.json CPAN metadata files")
     (description "Parse::CPAN::Meta is a parser for META.json and META.yml
@@ -11529,14 +11314,14 @@ files, using JSON::PP and/or CPAN::Meta::YAML.")
 (define-public perl-scalar-list-utils
   (package
     (name "perl-scalar-list-utils")
-    (version "1.56")
+    (version "1.60")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://cpan/authors/id/P/PE/PEVANS/"
                            "Scalar-List-Utils-" version ".tar.gz"))
        (sha256
-        (base32 "0nxb29x7i2w6kjxq188n131b56bsqj1ykrxjcjp6sgpv81ym7f0m"))))
+        (base32 "01szp3agmww6gj3hwqbpi8csn9675qcc7dw828r8y00z0bcbm1f6"))))
     (build-system perl-build-system)
     (home-page "https://metacpan.org/release/Scalar-List-Utils")
     (synopsis "Common Scalar and List utility subroutines")
@@ -11559,24 +11344,27 @@ such that being individual extensions would be wasteful.")
         (base32 "1dagpmcpjnwvd4g6mmnc312rqpd4qcwx21rpi2j7084wz8mijai5"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-alien-sdl" ,perl-alien-sdl)
-       ("perl-capture-tiny" ,perl-capture-tiny)
-       ("perl-file-sharedir" ,perl-file-sharedir)
-       ("perl-module-build" ,perl-module-build)
-       ("perl-test-most" ,perl-test-most)
-       ("perl-tie-simple" ,perl-tie-simple)))
+     (list perl-alien-sdl
+           perl-capture-tiny
+           perl-file-sharedir
+           perl-module-build
+           perl-test-most
+           perl-tie-simple))
     (inputs
-     `(("freeglut" ,freeglut)
-       ("libjpeg" ,libjpeg-turbo)
-       ("libpng" ,libpng)
-       ("libsmpeg" ,libsmpeg)
-       ("libtiff" ,libtiff)
-       ("mesa" ,mesa)
-       ("sdl" ,(sdl-union
-                (list sdl sdl-gfx sdl-image sdl-mixer sdl-pango sdl-ttf)))))
-    (propagated-inputs
-     `(("perl-file-sharedir" ,perl-file-sharedir)
-       ("perl-tie-simple" ,perl-tie-simple)))
+     (list freeglut
+           libjpeg-turbo
+           libpng
+           libsmpeg
+           libtiff
+           mesa
+           (sdl-union (list sdl
+                            sdl-gfx
+                            sdl-image
+                            sdl-mixer
+                            sdl-pango
+                            sdl-ttf))))
+    (propagated-inputs
+     (list perl-file-sharedir perl-tie-simple))
     (home-page "https://metacpan.org/release/SDL")
     (synopsis "SDL bindings to Perl")
     (description
@@ -11610,7 +11398,7 @@ spirit of both the SDL and Perl.")
                             `("PERL5LIB" suffix (,site))))
                         #t))))))
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (home-page "https://metacpan.org/release/RAAB/SGMLSpm-1.1")
     (synopsis "Perl module for processing SGML parser output")
     (description "This package contains @code{SGMLS.pm}, a perl5 class library
@@ -11659,9 +11447,9 @@ be used.")
           "0gf13b76b824s73r5rp00v8xrd6dnb5yi5jjavfc394scqv6ldh4"))))
   (build-system perl-build-system)
   (native-inputs
-    `(("perl-module-build" ,perl-module-build)))
+    (list perl-module-build))
   (inputs
-    `(("perl-class-xsaccessor" ,perl-class-xsaccessor)))
+    (list perl-class-xsaccessor))
   (home-page
     "https://metacpan.org/release/File-Find-Object")
   (synopsis
@@ -11685,12 +11473,10 @@ File::Find replacement in Perl.")
         (base32 "0gjzfd5fz7mhr5abafxr7qic7nwhk7y9iv17as6l880973j952h3"))))
   (build-system perl-build-system)
   (native-inputs
-    `(("perl-module-build" ,perl-module-build)))
+    (list perl-module-build))
   (inputs
-    `(("perl-class-xsaccessor" ,perl-class-xsaccessor)
-      ("perl-file-find-object" ,perl-file-find-object)
-      ("perl-number-compare" ,perl-number-compare)
-      ("perl-text-glob" ,perl-text-glob)))
+    (list perl-class-xsaccessor perl-file-find-object perl-number-compare
+          perl-text-glob))
   (home-page
     "https://metacpan.org/release/File-Find-Object-Rule")
   (synopsis
@@ -11714,7 +11500,7 @@ interface to File::Find::Object.")
          "0x3a2xgzrka73lcmmwalq2mmpzxa7s6pm01ahxf677ksqsdc3jrf"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-text-glob" ,perl-text-glob)))
+     (list perl-text-glob))
     (home-page "https://metacpan.org/release/File-Finder")
     (synopsis "Wrapper for @code{File::Find} ala @code{find(1)}")
     (description
@@ -11745,7 +11531,7 @@ used as the head of many different sequences.")
                 "14y29ja3lsa3yw0ll20lj96f3zz5zydjqi1c5nh9wxar8927ssab"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-io-string" ,perl-io-string)))
+     (list perl-io-string))
     (home-page "https://metacpan.org/release/Font-TTF")
     (synopsis "TTF font support for Perl")
     (description "This package provides a Perl module for TrueType/OpenType
@@ -11779,12 +11565,10 @@ prop, vhea, vmtx and the reading and writing of all other table types.")
          ;; This is needed for tests
          (add-after 'unpack 'set-TZDIR
            (lambda* (#:key inputs #:allow-other-keys)
-             (setenv "TZDIR" (string-append (assoc-ref inputs "tzdata")
-                                            "/share/zoneinfo"))
-             #t)))))
+             (setenv "TZDIR"
+                     (search-input-directory inputs "share/zoneinfo")))))))
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("tzdata" ,tzdata-for-tests)))
+     (list perl-module-build tzdata-for-tests))
     (home-page "https://metacpan.org/release/Time-ParseDate")
     (synopsis "Collection of Perl modules for time/date manipulation")
     (description "Provides several perl modules for date/time manipulation:
@@ -11813,7 +11597,7 @@ libtime-parsedate-perl_2015.103-2_copyright"))))
         (base32 "0c0yd999h0ikj88c9j95wa087m87i0qh7vja3715y2kd7vixkci2"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     ;; Unless some other homepage is out there...
     (home-page "https://packages.debian.org/stretch/libtime-period-perl")
     (synopsis "Perl library for testing if a time() is in a specific period")
@@ -11839,14 +11623,10 @@ till 5pm\" and \"on the second Tuesday of the month\" and \"between 4pm and
         (base32 "19mik0r5v1cmxfxm0h4lwqyj0nmq6jgnvvq96hqcjgylpvc02x1z"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-file-pushd" ,perl-file-pushd)
-       ("perl-path-tiny" ,perl-path-tiny)
-       ("perl-test-deep" ,perl-test-deep)
-       ("perl-test-filename" ,perl-test-filename)))
+     (list perl-file-pushd perl-path-tiny perl-test-deep
+           perl-test-filename))
     (propagated-inputs
-     `(("perl-number-compare" ,perl-number-compare)
-       ("perl-text-glob" ,perl-text-glob)
-       ("perl-try-tiny" ,perl-try-tiny)))
+     (list perl-number-compare perl-text-glob perl-try-tiny))
     (home-page "https://metacpan.org/release/Path-Iterator-Rule")
     (synopsis "Iterative, recursive file finder")
     (description "Path::Iterator::Rule iterates over files and directories to
@@ -11888,6 +11668,8 @@ arduous to type for one-liners.")
         (base32
          "1njgr2zly9nrwvfrjhgk9dqq48as1pmbb2rs4bh3irvla75v7azg"))))
     (build-system perl-build-system)
+    (propagated-inputs
+     (list perl-pod-parser))
     (home-page "https://metacpan.org/release/Pod-Constants")
     (synopsis "Include constants from POD")
     (description "This module allows you to specify those constants that
@@ -11915,7 +11697,7 @@ lookup in %INC or by assuming it is $0 if the caller is @code{main}
     (build-system perl-build-system)
     (home-page
      "https://metacpan.org/release/Text-Soundex")
-    (synopsis "Implementation of the soundex algorithm.")
+    (synopsis "Implementation of the soundex algorithm")
     (description "Soundex is a phonetic algorithm for indexing names by sound,
 as pronounced in English.  The goal is for names with the same pronunciation to
 be encoded to the same representation so that they can be matched despite
@@ -11941,7 +11723,7 @@ the National Archives and Records Administration (NARA).")
         (base32 "064igp2wxgsz4yb33v1r90i8clwjzs2xnpvw9niqlqrbzzrd4q1l"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-exception" ,perl-test-exception)))
+     (list perl-test-exception))
     (home-page "https://metacpan.org/release/Regexp-Pattern")
     (synopsis "Collection of regexp patterns")
     (description "Regexp::Pattern is a convention for organizing reusable
@@ -11963,10 +11745,9 @@ regexp patterns in modules.")
          "16qls1yqcmhxrcx9agsmaypxa1nirq4nvbyzbww9984589m44ql1"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)
-       ("perl-test-deep" ,perl-test-deep)))
+     (list perl-module-install perl-test-deep))
     (propagated-inputs
-     `(("perl-class-accessor" ,perl-class-accessor)))
+     (list perl-class-accessor))
     (home-page "https://metacpan.org/release/Data-SExpression")
     (synopsis "Parse Lisp S-Expressions into Perl data structures")
     (description "Data::SExpression parses Lisp S-Expressions into Perl data
diff --git a/gnu/packages/perl6.scm b/gnu/packages/perl6.scm
index e02dd757e5..dab9dd477b 100644
--- a/gnu/packages/perl6.scm
+++ b/gnu/packages/perl6.scm
@@ -62,6 +62,7 @@
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((out        (assoc-ref outputs "out"))
                    (pkg-config (assoc-ref inputs "pkg-config")))
+               (setenv "CFLAGS" "-fcommon")
                (setenv "LDFLAGS" (string-append "-Wl,-rpath=" out "/lib"))
                (invoke "perl" "Configure.pl"
                        "--prefix" out
@@ -73,12 +74,9 @@
     (home-page "https://moarvm.org/")
     ;; These should be inputs but moar.h can't find them when building rakudo
     (propagated-inputs
-     `(("libatomic-ops" ,libatomic-ops)
-       ("libffi" ,libffi)
-       ("libtommath" ,libtommath-1.0)
-       ("libuv" ,libuv)))
+     (list libatomic-ops libffi libtommath-1.0 libuv))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "VM for NQP And Rakudo Perl 6")
     (description
      "Short for \"Metamodel On A Runtime\", MoarVM is a modern virtual machine
@@ -149,7 +147,7 @@ with native libraries.
                        "--with-moar" (string-append moar "/bin/moar")
                        "--prefix" out)))))))
     (inputs
-     `(("moarvm" ,moarvm)))
+     (list moarvm))
     (home-page "https://github.com/perl6/nqp")
     (synopsis "Not Quite Perl")
     (description "This is \"Not Quite Perl\" -- a lightweight Perl 6-like
@@ -212,9 +210,7 @@ regular expression engine for the virtual machine.")
                   (string-append out "/bin/perl6"))))
              #t)))))
     (inputs
-     `(("moarvm" ,moarvm)
-       ("nqp" ,nqp)
-       ("openssl" ,openssl)))
+     (list moarvm nqp openssl))
     (home-page "https://rakudo.org/")
     (native-search-paths
       (list (search-path-specification
@@ -247,7 +243,7 @@ specification and runs on top of several virtual machines.")
             "0y826z3m276n7ia810hgcb3div67nxmx125m2fzlc16994zd5vm5"))))
       (build-system rakudo-build-system)
       (propagated-inputs
-       `(("perl6-terminal-ansicolor" ,perl6-terminal-ansicolor)))
+       (list perl6-terminal-ansicolor))
       (home-page "https://github.com/jnthn/grammar-debugger")
       (synopsis "Simple tracing and debugging support for Perl 6 grammars")
       (description "This module provides a simple debugger for grammars.  Just
@@ -302,7 +298,7 @@ have profiling information collected when the grammar is used.")
     (build-system rakudo-build-system)
     (arguments '(#:with-zef? #f))
     (home-page "https://github.com/moritz/json")
-    (synopsis "A minimal JSON (de)serializer")
+    (synopsis "Minimal JSON (de)serializer")
     (description "This module is a simple Perl 6 module for serializing and
 deserializing JSON.")
     (license license:artistic2.0)))
@@ -323,10 +319,9 @@ deserializing JSON.")
           "1zyzajc57j3m8q0nr72h9pw4w2nx92rafywlvysgphc5q9sb8np2"))))
     (build-system rakudo-build-system)
     (propagated-inputs
-     `(("perl6-json-marshal" ,perl6-json-marshal)
-       ("perl6-json-unmarshal" ,perl6-json-unmarshal)))
+     (list perl6-json-marshal perl6-json-unmarshal))
     (native-inputs
-     `(("perl6-json-fast" ,perl6-json-fast)))
+     (list perl6-json-fast))
     (home-page "https://github.com/jonathanstowe/JSON-Class")
     (synopsis "Provide simple serialisation/deserialisation of objects to/from JSON")
     (description "This is a simple role that provides methods to instantiate a
@@ -378,10 +373,9 @@ but it offers a few extra features.")
           "0qy7j83h6gjzyyv74ncd92cd9h45rv8diaz3vldiv3b6fqwz4c6i"))))
     (build-system rakudo-build-system)
     (propagated-inputs
-     `(("perl6-json-fast" ,perl6-json-fast)
-       ("perl6-json-name" ,perl6-json-name)))
+     (list perl6-json-fast perl6-json-name))
     (native-inputs
-     `(("perl6-json-fast" ,perl6-json-fast)))
+     (list perl6-json-fast))
     (home-page "https://github.com/jonathanstowe/JSON-Marshal")
     (synopsis "Simple serialisation of objects to JSON")
     (description "This library provides a single exported subroutine to create
@@ -434,8 +428,7 @@ It will of course also be needed in classes thar are going to use
           "14azsmzmwdn8k0gqcpvballharcvzylmlyrx2wmv4kpqfnz29fjc"))))
       (build-system rakudo-build-system)
       (propagated-inputs
-       `(("perl6-json-fast" ,perl6-json-fast)
-         ("perl6-json-name" ,perl6-json-name)))
+       (list perl6-json-fast perl6-json-name))
       (home-page "https://github.com/tadzik/JSON-Unmarshal")
       (synopsis "Make JSON from an Object")
       (description "This library provides a single exported subroutine to
@@ -458,7 +451,7 @@ create an object from a JSON representation of an object.")
           "0dl263c3fbxk001gm5fisrzqz1dx182ipaa0x2qva2gxvl075xm8"))))
     (build-system rakudo-build-system)
     (propagated-inputs
-     `(("perl6-json-class" ,perl6-json-class)))
+     (list perl6-json-class))
     (home-page "https://github.com/jonathanstowe/License-SPDX")
     (synopsis "Abstraction over the SPDX License List")
     (description "This provides an abstraction over the SPDX License List as
@@ -483,9 +476,9 @@ licences therein.")
           "1xnlaamfbdlfb2zidim3bbc4mawsrg6qxhxi6gbld46z1cyry1cw"))))
     (build-system rakudo-build-system)
     (propagated-inputs
-     `(("perl6-json-class" ,perl6-json-class)))
+     (list perl6-json-class))
     (native-inputs
-     `(("perl6-json-fast" ,perl6-json-fast)))
+     (list perl6-json-fast))
     (home-page "https://github.com/jonathanstowe/META6")
     (synopsis "Do things with Perl 6 [META files]")
     (description "This provides a representation of the Perl 6 META files
@@ -568,7 +561,7 @@ monitor.  Condition variables are also supported.")
             "0mkjdhg7ajksdn61n8fqhyzfd7ly9myazsvpsm02a5c2q73hdygg"))))
       (build-system rakudo-build-system)
       (propagated-inputs
-       `(("perl6-xml-writer" ,perl6-xml-writer)))
+       (list perl6-xml-writer))
       (home-page "https://github.com/moritz/svg")
       (synopsis "Perl 6 module to generate SVG")
       (description "This is a Perl 6 module that makes it easy to write
@@ -596,7 +589,7 @@ XML file as SVG.")
             "095ga5hbg92jnmczxvhk1hjz14yr334zyf8cph4w5w5frcza44my"))))
       (build-system rakudo-build-system)
       (propagated-inputs
-       `(("perl6-svg" ,perl6-svg)))
+       (list perl6-svg))
       (home-page "https://github.com/moritz/svg-plot")
       (synopsis "Perl 6 charting and plotting library that produces SVG output")
       (description "@code{SVG::Plot} is a simple 2D chart plotter for Perl 6.
@@ -672,8 +665,7 @@ minimal wrapper around an instance of this module.")
           "1mzrglb7lbiy5h9dlc7dyhvv9gppxmdmpmrv6nzbd695jzr38bri"))))
     (build-system rakudo-build-system)
     (propagated-inputs
-     `(("perl6-meta6" ,perl6-meta6)
-       ("perl6-uri" ,perl6-uri)))
+     (list perl6-meta6 perl6-uri))
     (home-page "https://github.com/jonathanstowe/Test-META")
     (synopsis "Test a distributions META file")
     (description "This provides a simple mechanism for module authors to have
@@ -697,7 +689,7 @@ some confidence that they have a working distribution META description file.")
           "07yr3qimc8fl29p23562ayj2j9h53madcnf9sgqvgf2kcprh0zd2"))))
     (build-system rakudo-build-system)
     (propagated-inputs
-     `(("perl6-oo-monitors" ,perl6-oo-monitors)))
+     (list perl6-oo-monitors))
     (home-page "https://github.com/jnthn/test-mock")
     (synopsis "Module for simply generating and checking mock objects")
     (description "@code{Test::Mock} is a module that works alongside the
diff --git a/gnu/packages/phabricator.scm b/gnu/packages/phabricator.scm
index af95cd93d2..df9b369506 100644
--- a/gnu/packages/phabricator.scm
+++ b/gnu/packages/phabricator.scm
@@ -62,18 +62,9 @@
                    `("PATH" ":" prefix
                      (,@(map (lambda (i)
                                (string-append (assoc-ref %build-inputs i) "/bin"))
-                             '("php" "git" "mercurial" "subversion"))))))
-               #t))
-           (add-before 'reset-gzip-timestamps 'make-compressed-files-writable
-             (lambda _
-               (for-each make-file-writable
-                         (find-files %output ".*\\.t?gz$"))
-               #t)))))
+                             '("php" "git" "mercurial" "subversion")))))))))))
       (inputs
-       `(("php" ,php)
-         ("git" ,git)
-         ("mercurial" ,mercurial)
-         ("subversion" ,subversion)))
+       (list php git mercurial subversion))
       (home-page "https://github.com/phacility/arcanist")
       (synopsis "Command-line interface for Phabricator")
       (description
@@ -83,6 +74,3 @@ send code for review, download patches, transfer files, view status, make API
 calls, and various other things.")
       ;; Bundled libraries are expat-licensed.
       (license (list license:asl2.0 license:expat)))))
-
-(define-public libphutil
-  (deprecated-package "libphutil" arcanist))
diff --git a/gnu/packages/photo.scm b/gnu/packages/photo.scm
index 908a872b6b..26295207c6 100644
--- a/gnu/packages/photo.scm
+++ b/gnu/packages/photo.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014, 2015, 2017, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015, 2017, 2019, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015, 2017 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2016, 2017, 2018, 2019, 2021 Efraim Flashner <efraim@flashner.co.il>
@@ -41,6 +41,7 @@
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
   #:use-module (gnu packages boost)
+  #:use-module (gnu packages build-tools)
   #:use-module (gnu packages check)
   #:use-module (gnu packages cmake)
   #:use-module (gnu packages compression)
@@ -103,9 +104,7 @@
                 "15p7sssg6vmqbm5xnc4j5dr89d7gl7y5qyq44a240yl5aqkjnybw"))))
     (build-system python-build-system)
     (native-inputs
-     `(("file" ,file)
-       ("intltool" ,intltool)
-       ("gobject-introspection" ,gobject-introspection)))
+     (list file intltool gobject-introspection))
     (inputs
      `(("gdk-pixbuf" ,gdk-pixbuf)
        ("gexiv2" ,gexiv2)
@@ -156,13 +155,13 @@
                                               "/bin"))
                                        ":"))
                    (gi-typelib-path   (getenv "GI_TYPELIB_PATH"))
-                   (python-path       (getenv "PYTHONPATH")))
+                   (python-path       (getenv "GUIX_PYTHONPATH")))
                (for-each
                 (lambda (program)
                   (wrap-program program
                     `("PATH" ":" prefix (,path))
                     `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))
-                    `("PYTHONPATH"             ":" prefix (,python-path))))
+                    `("GUIX_PYTHONPATH"             ":" prefix (,python-path))))
                 (map (lambda (name)
                        (string-append out "/bin/" name))
                      '("analyze-pv-structure"
@@ -187,11 +186,11 @@ cards and generate meaningful file and folder names.")
                 "18wlsvj6c1rv036ph3695kknpgzc3lk2ikgshy8417yfl8ykh2hz"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libjpeg" ,libjpeg-turbo)))     ;for lossy DNGs and old Kodak cameras
+     (list libjpeg-turbo))     ;for lossy DNGs and old Kodak cameras
     (propagated-inputs
-     `(("lcms" ,lcms)))                 ;for color profiles
+     (list lcms))                 ;for color profiles
     (home-page "https://www.libraw.org")
     (synopsis "Raw image decoder")
     (description
@@ -240,24 +239,21 @@ data as produced by digital cameras.")
 (define-public libgphoto2
   (package
     (name "libgphoto2")
-    (version "2.5.27")
+    (version "2.5.28")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/gphoto/libgphoto/"
                                   version "/libgphoto2-" version ".tar.bz2"))
               (sha256
                (base32
-                "1ms06b3dj1p33aypcb16gg5pn7fylbylsk9cnnqa0j29qiw59f7q"))))
+                "1gayf81nzi8gxmwhgs4k1p0dwqajsx0h9lzjfvnib3100dm5j04n"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (inputs
-     `(("libjpeg-turbo" ,libjpeg-turbo)
-       ("libltdl" ,libltdl)
-       ("libusb" ,libusb)
-       ("libxml2" ,libxml2)))
+     (list libjpeg-turbo libltdl libusb libxml2))
     (propagated-inputs
-     `(;; The .pc refers to libexif.
-       ("libexif" ,libexif)))
+     (list ;; The .pc refers to libexif.
+           libexif))
     (home-page "http://www.gphoto.org/proj/libgphoto2/")
     (synopsis "Accessing digital cameras")
     (description
@@ -271,23 +267,19 @@ from digital cameras.")
 (define-public gphoto2
   (package
     (name "gphoto2")
-    (version "2.5.27")
+    (version "2.5.28")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/gphoto/gphoto/" version
                                   "/gphoto2-" version ".tar.bz2"))
               (sha256
                (base32
-                "0f4d3q381jnnkcqkb2dj1k709skp65qihl5xm80zandvl69lw19h"))))
+                "0xbki37q9ja34igidr2vj0ps1lp7sfz4xpsmh8h9x89dy76qsr1a"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("readline" ,readline)
-       ("libjpeg-turbo" ,libjpeg-turbo)
-       ("popt" ,popt)
-       ("libexif" ,libexif)
-       ("libgphoto2" ,libgphoto2)))
+     (list readline libjpeg-turbo popt libexif libgphoto2))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -295,13 +287,10 @@ from digital cameras.")
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* (find-files "tests/data" "\\.param$")
                (("/usr/bin/env")
-                (which "env")))
-             #t)))
-
+                (which "env"))))))
        ;; FIXME: There is 1 test failure, most likely related to the build
        ;; environment.
        #:tests? #f))
-
     (home-page "http://www.gphoto.org/")
     (synopsis "Command-line tools to access digital cameras")
     (description
@@ -368,10 +357,7 @@ and a wide variety of other metadata.")
                 "12cv4886l1czfjwy7k6ipgf3zjksgwhdjzr2s9fdg33vqcv2hlrv"))))
     (build-system cmake-build-system)
     (inputs
-     `(("libjpeg" ,libjpeg-turbo)
-       ("libpng" ,libpng)
-       ("libtiff" ,libtiff)
-       ("zlib" ,zlib)))
+     (list libjpeg-turbo libpng libtiff zlib))
     (home-page "http://panotools.sourceforge.net/")
     (synopsis "Library for panoramic images")
     (description
@@ -413,7 +399,7 @@ overlapping images, as well as some command line tools.")
        ("libjpeg" ,libjpeg-turbo)
        ("libpng" ,libpng)
        ("libtiff" ,libtiff)
-       ("openexr" ,openexr)
+       ("openexr" ,openexr-2)
        ("vigra" ,vigra)
        ("zlib" ,zlib)))
     (arguments
@@ -448,9 +434,9 @@ scene to produce an image that looks much like a tone-mapped image.")
         '(#:configure-flags '("-DBUILD_FOR_SSE=OFF" "-DBUILD_FOR_SSE2=OFF")))
        #:tests? #f)) ; There are no tests to run.
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("glib" ,glib)))
+     (list glib))
     (home-page "https://sourceforge.net/projects/lensfun/")
     (synopsis "Library to correct optical lens defects with a lens database")
     (description "Digital photographs are not ideal.  Of course, the better is
@@ -471,7 +457,7 @@ photographic equipment.")
 (define-public darktable
   (package
     (name "darktable")
-    (version "3.6.1")
+    (version "3.8.0")
     (source
      (origin
        (method url-fetch)
@@ -479,7 +465,7 @@ photographic equipment.")
              "https://github.com/darktable-org/darktable/releases/"
              "download/release-" version "/darktable-" version ".tar.xz"))
        (sha256
-        (base32 "051dwhdqa9q3zyrvr78g0cfzl1zhaagfvgx9axa9895q0g0wggx2"))))
+        (base32 "01gp9dg5wr2rg1k8cqs0l3s7ism8a4q8qypgwccd4jh7ip3wfr9f"))))
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags '("-DBINARY_PACKAGE_BUILD=On"
@@ -503,18 +489,12 @@ photographic equipment.")
              (substitute* "CMakeLists.txt"
                (("\\$\\{LLVM_INSTALL_PREFIX\\}")
                 (assoc-ref %build-inputs "clang")))))
-         (add-before 'configure 'set-LDFLAGS-and-CPATH
-           (lambda* (#:key inputs outputs #:allow-other-keys)
+         (add-before 'configure 'set-LDFLAGS
+           (lambda* (#:key outputs #:allow-other-keys)
              (setenv "LDFLAGS"
                      (string-append
                       "-Wl,-rpath="
-                      (assoc-ref outputs "out") "/lib/darktable"))
-
-             ;; Ensure the OpenEXR headers are found.
-             (setenv "CPATH"
-                     (string-append (assoc-ref inputs "ilmbase")
-                                    "/include/OpenEXR:"
-                                    (or (getenv "CPATH") "")))))
+                      (assoc-ref outputs "out") "/lib/darktable"))))
          (add-after 'install 'wrap-program
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (wrap-program (string-append (assoc-ref outputs "out")
@@ -538,42 +518,42 @@ photographic equipment.")
        ("python" ,python-wrapper)
        ("ruby" ,ruby)))
     (inputs
-     `(("cairo" ,cairo)
-       ("colord-gtk" ,colord-gtk) ;optional, for color profile support
-       ("cups" ,cups) ;optional, for printing support
-       ("curl" ,curl)
-       ("dbus-glib" ,dbus-glib)
-       ("exiv2" ,exiv2)
-       ("freeimage" ,freeimage)
-       ("gmic" ,gmic) ;optional, for HaldcLUT support
-       ("graphicsmagick" ,graphicsmagick)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gtk+" ,gtk+)
-       ("ilmbase" ,ilmbase)
-       ("iso-codes" ,iso-codes) ;optional, for language names in the preferences
-       ("json-glib" ,json-glib)
-       ("lcms" ,lcms)
-       ("lensfun" ,lensfun) ;optional, for the lens distortion plugin
-       ("libgphoto2" ,libgphoto2) ;optional, for camera tethering
-       ("libavif" ,libavif) ;optional, for AVIF support
-       ("libjpeg" ,libjpeg-turbo)
-       ("libomp" ,libomp)
-       ("libpng" ,libpng)
-       ("librsvg" ,librsvg)
-       ("libsecret" ,libsecret) ;optional, for storing passwords
-       ("libsoup" ,libsoup)
-       ("libtiff" ,libtiff)
-       ("libwebp" ,libwebp) ;optional, for WebP support
-       ("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)
-       ("lua" ,lua) ;optional, for plugins
-       ("opencl-icd-loader" ,opencl-icd-loader) ;optional, for OpenCL support
-       ("openexr" ,openexr) ;optional, for EXR import/export
-       ("openjpeg" ,openjpeg) ;optional, for JPEG2000 export
-       ("osm-gps-map" ,osm-gps-map) ;optional, for geotagging view
-       ("pugixml" ,pugixml)
-       ("python-jsonschema" ,python-jsonschema)
-       ("sqlite" ,sqlite)))
+     (list cairo
+           colord-gtk ;optional, for color profile support
+           cups ;optional, for printing support
+           curl
+           dbus-glib
+           exiv2
+           freeimage
+           gmic ;optional, for HaldcLUT support
+           graphicsmagick
+           gsettings-desktop-schemas
+           gtk+
+           imath
+           iso-codes ;optional, for language names in the preferences
+           json-glib
+           lcms
+           lensfun ;optional, for the lens distortion plugin
+           libgphoto2 ;optional, for camera tethering
+           libavif ;optional, for AVIF support
+           libjpeg-turbo
+           libomp
+           libpng
+           librsvg
+           libsecret ;optional, for storing passwords
+           libsoup-minimal-2
+           libtiff
+           libwebp ;optional, for WebP support
+           libxml2
+           libxslt
+           lua-5.4 ;optional, for plugins
+           opencl-icd-loader ;optional, for OpenCL support
+           openexr ;optional, for EXR import/export
+           openjpeg ;optional, for JPEG2000 export
+           osm-gps-map ;optional, for geotagging view
+           pugixml
+           python-jsonschema
+           sqlite))
     (home-page "https://www.darktable.org")
     (synopsis "Virtual lighttable and darkroom for photographers")
     (description "Darktable is a photography workflow application and RAW
@@ -613,12 +593,9 @@ and enhance them.")
                        (string-append "PREFIX=" out)
                        "Photoflare.pro")))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list pkg-config qttools))
     (inputs
-     `(("graphicsmagick" ,graphicsmagick)
-       ("libomp" ,libomp)
-       ("qtbase" ,qtbase-5)))
+     (list graphicsmagick libomp qtbase-5))
     (home-page "https://photoflare.io")
     (synopsis "Quick, simple but powerful image editor")
     (description "Photoflare is a cross-platform image editor with an aim
@@ -658,10 +635,10 @@ such as Batch image processing.")
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((out               (assoc-ref outputs "out"))
                    (gi-typelib-path   (getenv "GI_TYPELIB_PATH"))
-                   (python-path       (getenv "PYTHONPATH")))
+                   (python-path       (getenv "GUIX_PYTHONPATH")))
                (wrap-program (string-append out "/bin/entangle")
                  `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))
-                 `("PYTHONPATH" ":" prefix (,python-path))))
+                 `("GUIX_PYTHONPATH" ":" prefix (,python-path))))
              #t)))))
     (native-inputs
      `(("cmake" ,cmake)
@@ -673,18 +650,18 @@ such as Batch image processing.")
        ("pkg-config" ,pkg-config)
        ("xmllint" ,libxml2)))
     (inputs
-     `(("gdk-pixbuf" ,gdk-pixbuf)
-       ("gexiv2" ,gexiv2)
-       ("gst-plugins-base" ,gst-plugins-base)
-       ("gstreamer" ,gstreamer)
-       ("gtk+" ,gtk+)
-       ("lcms" ,lcms)
-       ("libgphoto2" ,libgphoto2)
-       ("libgudev" ,libgudev)
-       ("libpeas" ,libpeas)
-       ("libraw" ,libraw)
-       ("python" ,python)
-       ("python-pygobject" ,python-pygobject)))
+     (list gdk-pixbuf
+           gexiv2
+           gst-plugins-base
+           gstreamer
+           gtk+
+           lcms
+           libgphoto2
+           libgudev
+           libpeas
+           libraw
+           python
+           python-pygobject))
     (home-page "https://entangle-photo.org/")
     (synopsis "Camera control and capture")
     (description
@@ -726,7 +703,7 @@ off' shooting directly from the controlling computer.")
        ("libxi" ,libxi)
        ("libxmu" ,libxmu)
        ("mesa" ,mesa)
-       ("openexr" ,openexr)
+       ("openexr" ,openexr-2)
        ("sqlite" ,sqlite)
        ("vigra" ,vigra)
        ("wxwidgets" ,wxwidgets)
@@ -789,17 +766,18 @@ a complete panorama and stitch any series of overlapping pictures.")
              "-DPROC_TARGET_NUMBER=1"
              ;; These flags are recommended by upstream for distributed packages.
              ;; See the file 'RELEASE_NOTES.txt' in the source distribution.
-             "-O3"
+             "-DCMAKE_CXX_FLAGS=-O3 -fPIC"
+             "-DCMAKE_C_FLAGS=-O3 -fPIC"
              "-DCACHE_NAME_SUFFIX=\"\"")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("expat" ,expat)
        ("fftw" ,fftwf)
        ("glib" ,glib)
        ("glibmm" ,glibmm)
        ("gtk+" ,gtk+)
-       ("gtkmm" ,gtkmm)
+       ("gtkmm" ,gtkmm-3)
        ("lcms" ,lcms)
        ("lensfun" ,lensfun)
        ("libcanberra" ,libcanberra)
diff --git a/gnu/packages/php.scm b/gnu/packages/php.scm
index 89fa978bd2..191dcafb4a 100644
--- a/gnu/packages/php.scm
+++ b/gnu/packages/php.scm
@@ -5,6 +5,7 @@
 ;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2019 Oleg Pykhalov <go.wigust@gmail.com>
 ;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -60,7 +61,7 @@
 (define-public php
   (package
     (name "php")
-    (version "7.4.22")
+    (version "7.4.26")
     (home-page "https://secure.php.net/")
     (source (origin
               (method url-fetch)
@@ -68,7 +69,10 @@
                                   "php-" version ".tar.xz"))
               (sha256
                (base32
-                "1s5xjy1cchlg0vfxic73wy2wip8spfjr094hzzyc76plsbbqq1wf"))
+                "1y0f1xgfi8cks6npdhrycg8r9g3q0pikqgf5h4xafpy8znmb61g3"))
+              (patches
+               (search-patches "php-bug-74093-test.patch"
+                               "php-openssl_x509_checkpurpose_basic.patch"))
               (modules '((guix build utils)))
               (snippet
                '(with-directory-excursion "ext"
@@ -81,8 +85,7 @@
                             ;;"fileinfo/libmagic" ; a patched version of libmagic
                             '("gd/libgd"
                               "pcre/pcre2lib"
-                              "xmlrpc/libxmlrpc"))
-                  #t))))
+                              "xmlrpc/libxmlrpc"))))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
@@ -93,7 +96,7 @@
          (list (with "--with-bz2" "bzip2")
                (with "--with-curl" "curl")
                (with "--with-gdbm" "gdbm")
-               (with "--with-gettext" "glibc") ; libintl.h
+               (with "--with-gettext" "libc")  ; libintl.h
                (with "--with-gmp" "gmp")
                (with "--with-ldap" "openldap")
                (with "--with-ldap-sasl" "cyrus-sasl")
@@ -197,6 +200,20 @@
                                 "Zend/tests/concat_003.phpt")))
                    '())
 
+             ,@(if (target-ppc64le?)
+                   ;; Drop tests known to fail on powerpc64le.
+                   '((for-each delete-file
+                               (list
+                                ;; phpdbg watchpoints don't work.
+                                ;; Bug tracked upstream at:
+                                ;; https://bugs.php.net/bug.php?id=81408
+                                "sapi/phpdbg/tests/watch_001.phpt"
+                                "sapi/phpdbg/tests/watch_003.phpt"
+                                "sapi/phpdbg/tests/watch_004.phpt"
+                                "sapi/phpdbg/tests/watch_005.phpt"
+                                "sapi/phpdbg/tests/watch_006.phpt")))
+                   '())
+
              ;; Drop tests that are known to fail.
              (for-each delete-file
                        '("ext/posix/tests/posix_getgrgid.phpt"    ; Requires /etc/group.
@@ -326,7 +343,9 @@
                          ;; Expects an empty Array; gets one with " " in it.
                          "ext/pcre/tests/bug80118.phpt"
                          ;; Renicing a process fails in the build environment.
-                         "ext/standard/tests/general_functions/proc_nice_basic.phpt"))
+                         "ext/standard/tests/general_functions/proc_nice_basic.phpt"
+                         ;; Can fail on fast machines?
+                         "Zend/tests/bug74093.phpt"))
 
              ;; Accomodate two extra openssl errors flanking the expected one:
              ;; random number generator:RAND_{load,write}_file:Cannot open file
@@ -351,7 +370,6 @@
        ("cyrus-sasl" ,cyrus-sasl)
        ("gd" ,gd)
        ("gdbm" ,gdbm)
-       ("glibc" ,glibc)
        ("gmp" ,gmp)
        ("gnutls" ,gnutls)
        ("icu4c" ,icu4c)
diff --git a/gnu/packages/piet.scm b/gnu/packages/piet.scm
index a09c05d990..824efe59de 100644
--- a/gnu/packages/piet.scm
+++ b/gnu/packages/piet.scm
@@ -52,11 +52,8 @@
                  `("PATH" ":" prefix (,(dirname (which "wish")))))
                #t))))))
     (inputs
-     `(("gd" ,gd)
-       ("giflib" ,giflib)
-       ("libpng" ,libpng)
-       ("tk" ,tk)))
-    (native-inputs `(("groff" ,groff)))
+     (list gd giflib libpng tk))
+    (native-inputs (list groff))
     (synopsis "Piet interpreter")
     (description
      "Npiet is an interpreter for the Piet programming language.  Instead of
@@ -151,11 +148,9 @@ an Algol-like language
                    #t)))))))
       (native-inputs
        ;; For our tests.
-       `(("netpbm" ,netpbm)
-         ("npiet" ,npiet)))
+       (list netpbm npiet))
       (inputs
-       `(("perl" ,perl)
-         ("perl-parse-recdescent" ,perl-parse-recdescent)))
+       (list perl perl-parse-recdescent))
       (home-page "https://www.toothycat.net/wiki/wiki.pl?MoonShadow/Piet")
       (synopsis "Piet compiler and assembler")
       (description
diff --git a/gnu/packages/pkg-config.scm b/gnu/packages/pkg-config.scm
index 9c632532be..770426d779 100644
--- a/gnu/packages/pkg-config.scm
+++ b/gnu/packages/pkg-config.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012, 2013, 2014, 2016 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -21,8 +22,10 @@
   #:use-module (guix licenses)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix gexp)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system trivial)
+  #:use-module (gnu packages bash)
   #:use-module (guix memoization)
   #:export (pkg-config))
 
@@ -130,3 +133,37 @@ build, or a GNU triplet."
 ;; environment or not.
 (define-syntax pkg-config
   (identifier-syntax (pkg-config-for-target (%current-target-system))))
+
+;; This hack allows for using both "pkg-config" and "TARGET-pkg-config"
+;; at the same time.  Simply using '%pkg-config' and 'pkg-config' won't
+;; work because they both use the "PKG_CONFIG_PATH" environment variable.
+(define-public pkg-config-for-build
+  (package
+    (inherit (hidden-package %pkg-config))
+    (name "pkg-config-for-build")
+    (version "0")
+    (source #f)
+    (build-system trivial-build-system)
+    (inputs
+     (list bash-minimal %pkg-config))
+    (arguments
+     `(#:modules ((guix build utils))
+       #:builder
+       ,#~(begin
+            (use-modules (guix build utils))
+            (define where (string-append #$output "/bin/pkg-config"))
+            (mkdir-p (dirname where))
+            (call-with-output-file where
+              (lambda (port)
+                (format port "#!~a
+export PKG_CONFIG_PATH=\"$PKG_CONFIG_PATH_FOR_BUILD\"
+exec ~a \"$@\""
+                        (search-input-file %build-inputs "bin/bash")
+                        (search-input-file %build-inputs "bin/pkg-config"))))
+            (chmod where #o500))))
+    (native-search-paths
+     (map (lambda (original)
+            (search-path-specification
+             (inherit original)
+             (variable "PKG_CONFIG_PATH_FOR_BUILD")))
+          (package-native-search-paths %pkg-config)))))
diff --git a/gnu/packages/plan9.scm b/gnu/packages/plan9.scm
index e306e04d85..73694c4ed3 100644
--- a/gnu/packages/plan9.scm
+++ b/gnu/packages/plan9.scm
@@ -55,8 +55,7 @@
                  (install-file "drawterm" bin)
                  (install-file "drawterm.1" man)))))))
       (inputs
-       `(("libx11" ,libx11)
-         ("libxt" ,libxt)))
+       (list libx11 libxt))
       (synopsis "Connect to Plan 9 systems")
       (home-page "http://drawterm.9front.org")
       (description
diff --git a/gnu/packages/plotutils.scm b/gnu/packages/plotutils.scm
index 4b89ddafd1..c0cbd24c9d 100644
--- a/gnu/packages/plotutils.scm
+++ b/gnu/packages/plotutils.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Eric Bavier <bavier@member.fsf.org>
-;;; Copyright © 2016, 2017, 2019, 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2016-2022 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
@@ -22,6 +22,8 @@
 
 (define-module (gnu packages plotutils)
   #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix gexp)
+  #:use-module ((guix utils) #:select (target-x86-32?))
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
@@ -29,6 +31,7 @@
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages bdw-gc)
+  #:use-module (gnu packages boost)
   #:use-module (gnu packages emacs)
   #:use-module (gnu packages xorg)
   #:use-module (gnu packages image)
@@ -37,6 +40,7 @@
   #:use-module (gnu packages gl)
   #:use-module (gnu packages gtk)
   #: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 python)
@@ -45,6 +49,7 @@
   #:use-module (gnu packages qt)
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages tex)
+  #:use-module (gnu packages web)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages))
 
@@ -83,11 +88,28 @@
               (search-patches "plotutils-spline-test.patch"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:configure-flags (list "--enable-libplotter")))
-    (inputs `(("libpng" ,libpng)
-              ("libx11" ,libx11)
-              ("libxt" ,libxt)
-              ("libxaw" ,libxaw)))
+     (list #:configure-flags
+           #~(list "--enable-libplotter"
+
+                   ;; On i686 some tests fail due to excess floating point
+                   ;; precision; work around it.  However, libplotter is C++
+                   ;; and thus unaffected by CFLAGS, but '-fexcess-precision'
+                   ;; is not implemented for C++ as of GCC 10.
+                   #$@(if (target-x86-32?)
+                          #~("CFLAGS=-g -O2 -fexcess-precision=standard")
+                          #~()))
+
+           #:phases
+           (if (target-x86-32?)
+               #~(modify-phases %standard-phases
+                   (add-before 'check 'skip-sloppy-test
+                     (lambda _
+                       ;; This test reveals a slight difference in the SVG
+                       ;; output due to floating point inequalities.  Skip it.
+                       (substitute* "test/plot2svg.test"
+                         (("^exit .*") "exit 77")))))
+               #~%standard-phases)))
+    (inputs (list libpng libx11 libxt libxaw))
     (home-page "https://www.gnu.org/software/plotutils/")
     (synopsis "Plotting utilities and library")
     (description
@@ -98,6 +120,54 @@ for 2D vector graphics animations.  The package also contains command-line
 programs for plotting scientific data.")
     (license license:gpl2+)))
 
+(define-public guile-plotutils
+  (package
+    (name "guile-plotutils")
+    (version "1.0.1")
+    (source (origin
+              (method url-fetch)
+              (uri (list (string-append "https://lonelycactus.com/tarball/"
+                                        "guile_plotutils-" version ".tar.gz")
+                         (string-append
+                          "https://github.com/spk121/guile-plotutils/releases/download/v"
+                          version "/guile_plotutils-" version
+                          ".tar.gz")))
+              (sha256
+               (base32
+                "0r245z75cdzgzi57fpz84mnyrjq44793zzaaxxrszyxm1d06hc6r"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:imported-modules ((guix build guile-build-system)
+                           ,@%gnu-build-system-modules)
+       #:modules (((guix build guile-build-system)
+                   #:select (target-guile-effective-version))
+                  (guix build gnu-build-system)
+                  (guix build utils))
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'install 'set-library-file-name
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out"))
+                   (version (target-guile-effective-version)))
+               ;; First install libguile-plotutils.so.
+               (invoke "make" "install-guileextensionLTLIBRARIES")
+
+               ;; Then change source files to refer to it.
+               (substitute* '("module/plotutils/graph.scm"
+                              "module/plotutils/plot.scm")
+                 (("\"libguile-plotutils\"")
+                  (string-append "\"" out "/lib/guile/" version
+                                 "/extensions/libguile-plotutils\"")))))))))
+    (native-inputs (list pkg-config texinfo))
+    (inputs (list plotutils guile-3.0 zlib))
+    (home-page "https://lonelycactus.com/guile-plotutils.html")
+    (synopsis "Guile bindings to the GNU Plotutils plotting libraries")
+    (description
+     "Guile-Plotutils is a Guile binding to the venerable GNU Plotutils
+plotting and graphing library.  If you want to make graphs that look like you
+went to university in the 1990s, this is the library for you.")
+    (license license:gpl3+)))
+
 (define-public guile-charting
   ;; This commit fixes a few things, including Guile 3 support, not available
   ;; in the latest release.
@@ -117,12 +187,9 @@ programs for plotting scientific data.")
                   "03049g7wnpyfi0r36ij4a46kc9l45jbanx02iklkjwav2n6jqnnk"))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("texinfo" ,texinfo)
-         ("pkg-config" ,pkg-config)))
-      (inputs `(("guile" ,guile-3.0)))
-      (propagated-inputs `(("guile-cairo" ,guile-cairo)))
+       (list autoconf automake texinfo pkg-config))
+      (inputs (list guile-3.0))
+      (propagated-inputs (list guile-cairo))
       (home-page "http://wingolog.org/projects/guile-charting/")
       (synopsis "Create charts and graphs in Guile")
       (description
@@ -134,11 +201,8 @@ using the Cairo drawing library.")
   (package
     (inherit guile-charting)
     (name "guile2.2-charting")
-    (inputs `(("guile" ,guile-2.2)))
-    (propagated-inputs `(("guile-cairo" ,guile2.2-cairo)))))
-
-(define-public guile3.0-charting
-  (deprecated-package "guile3.0-charting" guile-charting))
+    (inputs (list guile-2.2))
+    (propagated-inputs (list guile2.2-cairo))))
 
 (define-public ploticus
   (package
@@ -190,9 +254,7 @@ using the Cairo drawing library.")
                         (wrap-program (string-append bin "/pl")
                           `("PLOTICUS_PREFABS" ":" = (,dir)))))))))
     (inputs
-     `(("libpng" ,libpng)
-       ("libx11" ,libx11)
-       ("zlib" ,zlib)))
+     (list libpng libx11 zlib))
     (home-page "http://ploticus.sourceforge.net/")
     (synopsis "Command-line tool for producing plots and charts")
     (description
@@ -206,70 +268,98 @@ colors, styles, options and details.")
 (define-public asymptote
   (package
     (name "asymptote")
-    (version "2.70")
+    (version "2.77")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://sourceforge/asymptote/"
                            version "/asymptote-" version ".src.tgz"))
        (sha256
-        (base32 "0gqcm0m916kjzyfswlplhyyvmqhg9hsishmbg4pyjcwchlx93k7m"))))
+        (base32 "0v5r8g3b7f2dxsiba4f3yrgfkigr5nsdhg6jrdsnqrmf6y7dqgdf"))))
     (build-system gnu-build-system)
     ;; Note: The 'asy' binary retains a reference to docdir for use with its
     ;; "help" command in interactive mode, so adding a "doc" output is not
     ;; currently useful.
     (native-inputs
-     `(("emacs" ,emacs-minimal)
-       ("gs" ,ghostscript)              ;For tests
-       ("perl" ,perl)
-       ("texinfo" ,texinfo)             ;For generating documentation
-       ;; For the manual and the tests.
-       ("texlive" ,(texlive-union (list texlive-amsfonts/patched
-                                        texlive-epsf
-                                        texlive-etoolbox
-                                        texlive-latex-base
-                                        texlive-latex-geometry
-                                        texlive-latex-graphics
-                                        texlive-latex-oberdiek ; for ifluatex
-                                        texlive-latex-parskip
-                                        texlive-tex-texinfo)))))
+     (list autoconf
+           automake
+           boost
+           emacs-minimal
+           ghostscript                  ;for tests
+           perl
+           rapidjson
+           texinfo                      ;for generating documentation
+           (texlive-updmap.cfg
+            (list texlive-amsfonts
+                  texlive-dvips-l3backend
+                  texlive-epsf
+                  texlive-etoolbox
+                  texlive-fonts-ec
+                  texlive-generic-infwarerr
+                  texlive-generic-kvdefinekeys
+                  texlive-grfext
+                  texlive-hyperref
+                  texlive-latex-base
+                  texlive-latex-geometry
+                  texlive-latex-graphics
+                  texlive-latex-kvoptions
+                  texlive-latex-media9
+                  texlive-latex-ocgx2
+                  texlive-latex-pdftexcmds
+                  texlive-oberdiek      ;for ifluatex
+                  texlive-latex-parskip
+                  texlive-tex-texinfo))))
     (inputs
-     `(("fftw" ,fftw)
-       ("freeglut" ,freeglut)
-       ("glew" ,glew)
-       ("glm" ,glm)
-       ("gsl" ,gsl)
-       ("libgc" ,libgc)
-       ("python" ,python)
-       ("python-cson" ,python-cson)
-       ("python-numpy" ,python-numpy)
-       ("python-pyqt" ,python-pyqt)
-       ("readline" ,readline)
-       ("zlib" ,zlib)))
+     (list fftw
+           freeglut
+           glew
+           glm
+           gsl
+           libgc
+           libtirpc
+           python
+           python-cson
+           python-numpy
+           python-pyqt
+           readline
+           zlib))
     (arguments
-     `(#:modules ((guix build emacs-utils)
+     (list
+      #:modules '((guix build emacs-utils)
                   (guix build gnu-build-system)
                   (guix build utils)
                   (srfi srfi-26))
-       #:imported-modules (,@%gnu-build-system-modules
+      #:imported-modules `(,@%gnu-build-system-modules
                            (guix build emacs-utils))
-       #:configure-flags
-       (list (string-append "--enable-gc=" (assoc-ref %build-inputs "libgc"))
-             (string-append "--with-latex="
-                            (assoc-ref %outputs "out")
-                            "/share/texmf/tex/latex")
-             (string-append "--with-context="
-                            (assoc-ref %outputs "out")
-                            "/share/texmf/tex/context/third"))
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-build
-           ;; XXX: Build process complains about missing "config.h"
-           ;; and "primitives.h" files.
+      #:configure-flags
+      #~(list (string-append "--enable-gc=" #$(this-package-input "libgc"))
+              (string-append "--with-latex=" #$output "/share/texmf/tex/latex")
+              (string-append "--with-context="
+                             #$output
+                             "/share/texmf/tex/context/third"))
+      #:phases
+      `(modify-phases %standard-phases
+         (add-after 'unpack 'locate-tirpc
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* (list "configure.ac")
+               (("/usr/include/tirpc")
+                (search-input-directory inputs "include/tirpc")))))
+         (add-after 'unpack 'fix-includes
            (lambda _
              (substitute* (find-files "." "\\.in$")
                (("#include <primitives.h>") "#include \"primitives.h\""))
-             (invoke "touch" "prc/config.h")))
+             (substitute* (find-files "prc" "\\.h$")
+               (("#include \"config.h\"") "#include \"../config.h\""))
+             (substitute* "prc/oPRCFile.h"
+               (("#include \"xstream.h\"") "#include \"../xstream.h\""))
+             (substitute* "v3dfile.h"
+               (("#include <prc/oPRCFile.h>") "#include \"prc/oPRCFile.h\""))
+             (substitute* "LspCpp/LibLsp/lsp/ParentProcessWatcher.cpp"
+               (("#include <boost/process.hpp>" all)
+                (string-append "#include <algorithm>\n" all)))))
+         (replace 'bootstrap
+           (lambda _
+             (invoke "autoreconf" "-vfi")))
          (add-after 'unpack 'move-info-location
            ;; Build process installs info file in the unusual
            ;; "%out/share/info/asymptote/" location.  Move it to
@@ -278,21 +368,18 @@ colors, styles, options and details.")
              (substitute* "doc/png/Makefile.in"
                (("(\\$\\(infodir\\))/asymptote" _ infodir) infodir))
              (substitute* "doc/asymptote.texi"
-               (("asymptote/asymptote") "asymptote"))
-             #t))
+               (("asymptote/asymptote") "asymptote"))))
          (add-before 'build 'patch-pdf-viewer
            (lambda _
              ;; Default to a free pdf viewer.
              (substitute* "settings.cc"
                (("defaultPDFViewer=\"acroread\"")
-                "defaultPDFViewer=\"gv\""))
-             #t))
+                "defaultPDFViewer=\"gv\""))))
          (add-before 'check 'set-HOME
            ;; Some tests require write access to $HOME, otherwise leading to
            ;; "failed to create directory /homeless-shelter/.asy" error.
            (lambda _
-             (setenv "HOME" "/tmp")
-             #t))
+             (setenv "HOME" "/tmp")))
          (add-after 'install 'install-Emacs-data
            (lambda* (#:key outputs #:allow-other-keys)
              ;; Install related Emacs libraries into an appropriate location.
@@ -300,16 +387,14 @@ colors, styles, options and details.")
                     (lisp-dir (string-append out "/share/emacs/site-lisp")))
                (for-each (cut install-file <> lisp-dir)
                          (find-files "." "\\.el$"))
-               (emacs-generate-autoloads ,name lisp-dir))
-             #t))
+               (emacs-generate-autoloads ,name lisp-dir))))
          (add-after 'install-Emacs-data 'wrap-python-script
            (lambda* (#:key inputs outputs #:allow-other-keys)
              ;; Make sure 'xasy' runs with the correct PYTHONPATH.
              (let* ((out (assoc-ref outputs "out"))
-                    (path (getenv "PYTHONPATH")))
+                    (path (getenv "GUIX_PYTHONPATH")))
                (wrap-program (string-append out "/share/asymptote/GUI/xasy.py")
-                 `("PYTHONPATH" ":" prefix (,path))))
-             #t)))))
+                 `("GUIX_PYTHONPATH" ":" prefix (,path)))))))))
     (home-page "http://asymptote.sourceforge.net")
     (synopsis "Script-based vector graphics language")
     (description
diff --git a/gnu/packages/poedit.scm b/gnu/packages/poedit.scm
index 3487636a3d..fd8ed06c83 100644
--- a/gnu/packages/poedit.scm
+++ b/gnu/packages/poedit.scm
@@ -60,19 +60,16 @@
                             (assoc-ref %build-inputs "boost")
                             "/lib"))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("gettext-minimal" ,gettext-minimal)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake gettext-minimal pkg-config))
     (inputs
-     `(("boost" ,boost)
-       ("enchant" ,enchant)
-       ("gtk+" ,gtk+)
-       ("gtkspell3" ,gtkspell3)
-       ("icu4c" ,icu4c)
-       ("lucene++" ,lucene++)
-       ("pugixml" ,pugixml)
-       ("wxwidgets" ,wxwidgets)))
+     (list boost
+           enchant
+           gtk+
+           gtkspell3
+           icu4c
+           lucene++
+           pugixml
+           wxwidgets))
     (home-page "https://poedit.net/")
     (synopsis "Gettext catalog editing tool")
     (description "Poedit is a GUI frontend to the GNU gettext utilities and
diff --git a/gnu/packages/polkit.scm b/gnu/packages/polkit.scm
index 0f89bd051c..e4f4b1276f 100644
--- a/gnu/packages/polkit.scm
+++ b/gnu/packages/polkit.scm
@@ -1,13 +1,14 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2015 Andy Wingo <wingo@igalia.com>
-;;; Copyright © 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2015, 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 Huang Ying <huang.ying.caritas@gmail.com>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2021 Morgan Smith <Morgan.J.Smith@outlook.com>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -28,22 +29,28 @@
   #:use-module ((guix licenses) #:select (lgpl2.0+))
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix memoization)
+  #:use-module (guix utils)
+  #:use-module (guix build utils)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
   #:use-module (gnu packages)
+  #:use-module (gnu packages autotools)
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages docbook)
   #:use-module (gnu packages gnuzilla)
+  #:use-module (gnu packages javascript)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages nss)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages qt)
-  #:use-module (gnu packages xml))
+  #:use-module (gnu packages xml)
+  #:export (polkit))
 
-(define-public polkit
+(define-public polkit-mozjs
   (package
     (name "polkit")
     (version "0.120")
@@ -55,6 +62,7 @@
              (sha256
               (base32
                "00zfg9b9ivkcj2jcf5b92cpvvyljz8cmfwj86lkvy5rihnd5jypf"))
+             (patches (search-patches "polkit-configure-elogind.patch"))
              (modules '((guix build utils)))
              (snippet
               '(begin
@@ -63,8 +71,14 @@
                  (substitute* "test/Makefile.in"
                    (("SUBDIRS = mocklibc . polkit polkitbackend")
                     "SUBDIRS = mocklibc . polkit"))
-                 ;; Guix System's polkit service stores actions under
-                 ;; /etc/polkit-1/actions.
+                 ;; Disable a test that requires Python, D-Bus and a few
+                 ;; libraries and fails with "ERROR: timed out waiting for bus
+                 ;; process to terminate".
+                 (substitute* "test/polkitbackend/Makefile.am"
+                   (("TEST_PROGS \\+= polkitbackendjsauthoritytest-wrapper.py")
+                    ""))
+                 ;; Guix System's polkit
+                 ;; service stores actions under /etc/polkit-1/actions.
                  (substitute* "src/polkitbackend/polkitbackendinteractiveauthority.c"
                    (("PACKAGE_DATA_DIR \"/polkit-1/actions\"")
                     "PACKAGE_SYSCONF_DIR \"/polkit-1/actions\""))
@@ -74,13 +88,9 @@
                     "\"/run/setuid-programs/polkit-agent-helper-1\""))))))
     (build-system gnu-build-system)
     (inputs
-     `(("expat" ,expat)
-       ("linux-pam" ,linux-pam)
-       ("elogind" ,elogind)
-       ("mozjs" ,mozjs-78)
-       ("nspr" ,nspr)))
+     (list expat linux-pam elogind mozjs-78 nspr))
     (propagated-inputs
-     `(("glib" ,glib))) ; required by polkit-gobject-1.pc
+     (list glib)) ; required by polkit-gobject-1.pc
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("glib:bin" ,glib "bin") ; for glib-mkenums
@@ -90,7 +100,12 @@
        ("docbook-xsl" ,docbook-xsl))) ; for man page generation
     (arguments
      `(#:configure-flags '("--sysconfdir=/etc"
-                           "--enable-man-pages")
+                           "--enable-man-pages"
+                           ;; Prevent ‘configure: error: cannot check for
+                           ;; file existence when cross compiling’.
+                           ,@(if (%current-target-system)
+                                 '("--with-os-type=unknown")
+                                 '()))
        #:phases
        (modify-phases %standard-phases
          (add-after
@@ -131,6 +146,53 @@ making process with respect to granting access to privileged operations
 for unprivileged applications.")
     (license lgpl2.0+)))
 
+;;; Variant of polkit built with Duktape, a lighter JavaScript engine compared
+;;; to mozjs.
+(define-public polkit-duktape
+  (let ((base polkit-mozjs))
+    (package/inherit base
+      (name "polkit-duktape")
+      (source
+       (origin
+         (inherit (package-source base))
+         (patches
+          (append
+              (search-patches "polkit-use-duktape.patch")
+              (origin-patches (package-source base))))))
+      (arguments
+       (substitute-keyword-arguments (package-arguments base)
+         ((#:configure-flags flags)
+          `(cons "--with-duktape" ,flags))
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'force-gnu-build-system-bootstrap
+               (lambda _
+                 (delete-file "configure")))))))
+      (native-inputs
+       (append `(("autoconf" ,autoconf)
+                 ("automake" ,automake)
+                 ("libtool" ,libtool)
+                 ("pkg-config" ,pkg-config))
+           (package-native-inputs base)))
+      (inputs (alist-replace "mozjs" `(,duktape)
+                             (package-inputs base))))))
+
+(define polkit-for-system
+  (mlambda (system)
+    "Return a polkit package that can be built for SYSTEM; that is, either the
+regular polkit that requires mozjs or its duktape variant."
+    (if (string-prefix? "x86_64" system)
+        polkit-mozjs
+        polkit-duktape)))
+
+;;; Define a top level polkit variable that can be built on any of the
+;;; supported platforms.  This is to work around the fact that our
+;;; mrustc-bootstrapped rust toolchain currently only supports the x86_64
+;;; architecture.
+(define-syntax polkit
+  (identifier-syntax (polkit-for-system
+                      (or (%current-target-system) (%current-system)))))
+
 (define-public polkit-qt
   (package
     (name "polkit-qt")
@@ -145,11 +207,11 @@ for unprivileged applications.")
                "1ip78x20hjqvm08kxhp6gb8hf6k5n6sxyx6kk2yvvq53djzh7yv7"))))
     (build-system cmake-build-system)
     (inputs
-     `(("polkit" ,polkit)))
+     (list polkit))
     (propagated-inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
      `(#:configure-flags (list (string-append "-DCMAKE_INSTALL_RPATH="
                                               (assoc-ref %outputs "out")
@@ -178,10 +240,8 @@ easily with PolicyKit.")
                (base32
                 "0sckmcbxyj6sbrnfc5p5lnw27ccghsid6v6wxq09mgxqcd4lk10p"))))
     (build-system gnu-build-system)
-    (inputs `(("gtk+" ,gtk+)
-              ("polkit" ,polkit)))
-    (native-inputs `(("intltool"   ,intltool)
-                     ("pkg-config" ,pkg-config)))
+    (inputs (list gtk+ polkit))
+    (native-inputs (list intltool pkg-config))
     (synopsis "Legacy polkit authentication agent for GNOME")
     (description "PolicyKit-gnome provides a D-Bus session bus service
 that is used to bring up authentication dialogs used for obtaining
diff --git a/gnu/packages/popt.scm b/gnu/packages/popt.scm
index 1c325e0c3d..16ff2c3448 100644
--- a/gnu/packages/popt.scm
+++ b/gnu/packages/popt.scm
@@ -141,7 +141,7 @@ appropriately.")
      `(#:parallel-build? #f             ; not supported
        #:parallel-tests? #f))           ; likewise
     (native-inputs
-     `(("texinfo" ,texinfo)))
+     (list texinfo))
     (synopsis "Create parsers for command line options")
     (description
      "GNU Gengetopt is a program to generate a C/C++ function for parsing
diff --git a/gnu/packages/presentation.scm b/gnu/packages/presentation.scm
index 0ad407d36c..1601ba7f2a 100644
--- a/gnu/packages/presentation.scm
+++ b/gnu/packages/presentation.scm
@@ -62,25 +62,24 @@
                      `("PATH" ":" prefix (,(dirname (which "cowsay"))
                                           ,(dirname (which "figlet"))
                                           ,(dirname (which "jp2a"))))
-                     `("PYTHONPATH" prefix
+                     `("GUIX_PYTHONPATH" prefix
                        ,(cons (string-append out "/lib/python"
                                              (python-version python)
                                              "/site-packages")
                               (search-path-as-string->list
-                                (or (getenv "PYTHONPATH") ""))))))
+                                (or (getenv "GUIX_PYTHONPATH") ""))))))
                  '("presentty" "presentty-console")))
              #t)))))
     (inputs
-     `(("cowsay" ,cowsay)
-       ("figlet" ,figlet)
-       ("jp2a" ,jp2a)
-       ("python-docutils" ,python-docutils)
-       ("python-pillow" ,python-pillow-2.9)
-       ("python-six" ,python-six)
-       ("python-urwid" ,python-urwid)))
+     (list cowsay
+           figlet
+           jp2a
+           python-docutils
+           python-pillow-2.9
+           python-six
+           python-urwid))
     (native-inputs
-     `(("python-pbr" ,python-pbr)
-       ("python-pygments" ,python-pygments)))
+     (list python-pbr python-pygments))
     (home-page "http://git.inaugust.com/cgit/presentty/")
     (synopsis "Console-based presentation system")
     (description "Presentty is a console-based presentation program where slides
diff --git a/gnu/packages/pretty-print.scm b/gnu/packages/pretty-print.scm
index 1fc1441052..05960f6f48 100644
--- a/gnu/packages/pretty-print.scm
+++ b/gnu/packages/pretty-print.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2016, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
-;;; Copyright © 2017, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2017, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 Meiyo Peng <meiyo@riseup.net>
 ;;; Copyright © 2020 Paul Garlick <pgarlick@tourbillion-technology.com>
@@ -72,12 +72,9 @@
                         "a2ps-CVE-2015-8107.patch"))))
     (build-system gnu-build-system)
     (inputs
-     `(("psutils" ,psutils)
-       ("gv" ,gv)))
+     (list psutils gv))
     (native-inputs
-     `(("gperf" ,gperf)
-       ("groff" ,groff)
-       ("perl" ,perl)))
+     (list gperf groff perl))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -168,19 +165,19 @@ different programming languages.")
 (define-public fmt
   (package
     (name "fmt")
-    (version "7.1.3")
+    (version "8.0.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://github.com/fmtlib/fmt/releases/download/"
                            version "/fmt-" version ".zip"))
        (sha256
-        (base32 "17sc10hfg087z0s774lnn05wwy3bfzmcv7j448p92pr0s02cb62x"))))
+        (base32 "1gqmsk4r93x65cqs8w7zhfiv70w5fv8279nrblggqm4mmdpaa9x6"))))
     (build-system cmake-build-system)
     (arguments
      '(#:configure-flags '("-DBUILD_SHARED_LIBS=ON")))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://fmt.dev")
     (synopsis "Small and fast C++ formatting library")
     (description
@@ -190,6 +187,17 @@ 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-7
+  (package (inherit fmt)
+    (version "7.1.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/fmtlib/fmt/releases/download/"
+                           version "/fmt-" version ".zip"))
+       (sha256
+        (base32 "17sc10hfg087z0s774lnn05wwy3bfzmcv7j448p92pr0s02cb62x"))))))
+
 (define-public fmt-for-irods
   (package
     (inherit fmt)
@@ -217,8 +225,7 @@ to @code{IOStreams}.")
              (let ((gcc (assoc-ref inputs "gcc")))
                (setenv "CPLUS_INCLUDE_PATH"
                        (string-join
-                        (cons (string-append (assoc-ref inputs "libcxx")
-                                             "/include/c++/v1")
+                        (cons (search-input-directory inputs "/include/c++/v1")
                               ;; Hide GCC's C++ headers so that they do not interfere with
                               ;; the Clang headers.
                               (delete (string-append gcc "/include/c++")
@@ -230,7 +237,7 @@ to @code{IOStreams}.")
                        (getenv "CPLUS_INCLUDE_PATH"))))))))
     (properties `((hidden? . #true)))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (inputs
      `(("libcxx" ,libcxx+libcxxabi-6)
        ("libcxxabi" ,libcxxabi-6)
@@ -252,10 +259,9 @@ to @code{IOStreams}.")
     ;; The ctags that comes with emacs does not support the --excmd options,
     ;; so can't be used
     (inputs
-     `(("boost" ,boost)))
+     (list boost))
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)))
+     (list bison flex))
     (arguments
      `(#:configure-flags
        (list (string-append "--with-boost="
@@ -348,12 +354,9 @@ seen in a terminal.")
                  (install-file "highlight.so" autodir))
                #t))))))
     (inputs
-     `(("lua" ,lua)
-       ("boost" ,boost)
-       ("perl" ,perl)))
+     (list lua boost perl))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("swig" ,swig)))
+     (list pkg-config swig))
     (home-page "http://www.andre-simon.de/doku/highlight/en/highlight.php")
     (synopsis "Convert code to documents with syntax highlighting")
     (description "Highlight converts source code to HTML, XHTML, RTF, LaTeX,
diff --git a/gnu/packages/profiling.scm b/gnu/packages/profiling.scm
index b4d52d8d85..2740644448 100644
--- a/gnu/packages/profiling.scm
+++ b/gnu/packages/profiling.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017 Dave Love <fx@gnu.org>
 ;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2022 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -19,6 +20,7 @@
 
 (define-module (gnu packages profiling)
   #:use-module (guix packages)
+  #:use-module (guix gexp)
   #:use-module ((guix licenses) #:prefix license:) ; avoid zlib, expat clashes
   #:use-module (guix download)
   #:use-module (guix utils)
@@ -48,74 +50,75 @@
 (define-public papi
   (package
     (name "papi")
-    (version "5.5.1")
+    (version "6.0.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "http://icl.utk.edu/projects/papi/downloads/papi-"
                            version ".tar.gz"))
-       (sha256 (base32 "1m62s8fkjjgq04ayf18jcxc33rqfd7nrkdw1gr54q5pn4cijrp29"))))
+       (sha256 (base32
+                "0pq5nhy105fpnk78k6l9ygsfr5akn6l0ck1hbf2c419lmsfp0hil"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           ;; Remove bundled software.
+           (for-each delete-file-recursively
+                     '("src/libpfm-3.y" "src/libpfm4"
+                       "src/perfctr-2.6.x"
+                       "src/perfctr-2.7.x"))
+
+           ;; Adjust include directives.
+           (substitute* "src/components/lmsensors/linux-lmsensors.c"
+             (("<sensors.h>")
+              "<sensors/sensors.h>"))))))
     (build-system gnu-build-system)
     (inputs
-     `(("ncurses" ,ncurses)
-       ("lm-sensors" ,lm-sensors "lib")
-       ("rdma-core" ,rdma-core)
-       ("infiniband-diags" ,infiniband-diags "lib")
-       ("net-tools" ,net-tools)))
+     (list ncurses
+           rdma-core
+           libpfm4
+           `(,lm-sensors "lib")
+           `(,infiniband-diags "lib")
+           net-tools))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("gfortran" ,gfortran)))
+     (list gfortran))
     (arguments
-     `(#:tests? #f ; no check target
-       #:configure-flags
-       ;; These are roughly per Fedora, but elide mx (assumed to be dead, even
-       ;; Open-MX) and add and powercap -- I don't know the pros/cons of
-       ;; infiniband and infiniband_mad, but you can't use them together, and
-       ;; the umad version needs at least one patch.
-       ;; Implicit enabled components: perf_event perf_event_uncore
-       `("--with-perf-events" "--with-shared-lib=yes" "--with-shlib"
-         "--with-static-lib=no"
-         "--with-components=appio coretemp example lustre micpower net rapl \
+     (list #:tests? #f                            ;no check target
+           #:configure-flags
+           ;; These are roughly per Fedora, but elide mx (assumed to be dead, even
+           ;; Open-MX) and add and powercap -- I don't know the pros/cons of
+           ;; infiniband and infiniband_mad, but you can't use them together, and
+           ;; the umad version needs at least one patch.
+           ;; Implicit enabled components: perf_event perf_event_uncore
+           #~`("--with-perf-events" "--with-shared-lib=yes" "--with-shlib"
+               "--with-static-lib=no" "--with-shlib-tools"
+               "--with-components=appio coretemp example lustre micpower net rapl \
 stealtime lmsensors infiniband powercap"
-         ;; So utils get rpath set correctly:
-         ,(string-append "LDFLAGS=-Xlinker -rpath -Xlinker "
-                         (assoc-ref %outputs "out") "/lib"))
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'autoconf
-           (lambda _
-             (chdir "src")
-             (invoke "autoconf")
-             #t))
-         ;; Amalgamating with the following clause gives double substitution.
-         (add-before 'patch-source-shebangs 'patch-components
-           (lambda _
-             (with-directory-excursion "src/components"
-               (substitute* '("lmsensors/configure" "infiniband_umad/configure")
-                 (("/bin/sh") (which "sh"))))
-             #t))
-         (add-after 'configure 'components
-           (lambda*  (#:key inputs #:allow-other-keys)
-             (with-directory-excursion "components"
-               (with-directory-excursion "infiniband_umad"
-                 (invoke "./configure"))
-               (with-directory-excursion "lmsensors"
-                 (let ((base (assoc-ref inputs "lm-sensors")))
-                   (invoke "./configure"
-                           (string-append "--with-sensors_incdir="
-                                          base "/include/sensors")
-                           (string-append "--with-sensors_libdir="
-                                          base "/lib")))))
-             #t))
-         (add-after 'install 'extra-doc
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((doc (string-append (assoc-ref outputs "out")
-                                       "/share/doc/" ,name "-" ,version)))
-               (chdir "..")             ; we went into src above
-               (for-each (lambda (file)
-                           (install-file file doc))
-                         '("README" "RELEASENOTES.txt"))
-               #t))))))
+               ;; So utils get rpath set correctly:
+               ,(string-append "LDFLAGS=-Xlinker -rpath -Xlinker "
+                               #$output "/lib")
+               ,(string-append "--with-pfm-prefix="
+                               #$(this-package-input "libpfm4")))
+
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'change-directory
+                 (lambda _
+                   (chdir "src")
+
+                   ;; Work around a mistake whereby 'configure' would always error
+                   ;; out when passing '--with-static-lib=no'.
+                   (substitute* "configure"
+                     (("test \"\\$static_lib\" = \"no\"")
+                      "false"))))
+               (add-after 'install 'extra-doc
+                 (lambda* (#:key outputs #:allow-other-keys)
+                   (let ((doc (string-append (assoc-ref outputs "out")
+                                             "/share/doc/"
+                                             #$name "-" #$version)))
+                     (chdir "..")                   ; we went into src above
+                     (for-each (lambda (file)
+                                 (install-file file doc))
+                               '("README.md" "RELEASENOTES.txt"))))))))
     (home-page "https://icl.utk.edu/papi/")
     (synopsis "Performance Application Programming Interface")
     (description
@@ -126,14 +129,14 @@ real time, the relation between software performance and processor events.
 
 In addition, PAPI provides access to a collection of components that expose
 performance measurement opportunites across the hardware and software stack.")
+    (properties
+     '((release-monitoring-url
+        . "http://icl.cs.utk.edu/papi/software/")))
     ;; See Debian papi copyright file.
     (license (list license:bsd-3
-                   license:lgpl2.1+     ;src/components/infiniband/pscanf.h
+                   license:lgpl2.1+        ;src/components/infiniband/pscanf.h
                    ;; not used in output
                    license:gpl2+ ;src/components/appio/tests/iozone/gengnuplot.sh
-                                 ;src/libpfm-3.y/*/multiplex*
-                   ;; "BSD-like": src/libpfm-3.y/*, src/libpfm4/*
-                   ;; lgpl2.1+: src/perfctr-2.*/*
                    ))))
 
 ;; NB. there's a potential name clash with libotf.
@@ -147,7 +150,7 @@ performance measurement opportunites across the hardware and software stack.")
        (uri (string-append "http://www.vi-hps.org/upload/packages/otf2/otf2-"
                            version ".tar.gz"))
        (sha256 (base32 "1ls7rz6qwnqbkifpafc95bnfh3m9xbs74in8zxlnhfbgwx11nn81"))))
-    (native-inputs `(("python" ,python)))
+    (native-inputs (list python))
     (outputs '("doc"                              ; 18MB
                "lib"
                "out"))
@@ -182,9 +185,9 @@ memory-efficient event trace data format plus support library.")
        (sha256
         (base32 "1xaf25lcxk4ky1kzfks40ja9mayh8pnmrzch2107c8dcjrsxsd4h"))))
     (build-system gnu-build-system)
-    (inputs `(("gfortran" ,gfortran)))
-    (native-inputs `(("gawk" ,gawk)     ; for tests
-                     ("which" ,which)))
+    (inputs (list gfortran))
+    (native-inputs (list gawk ; for tests
+                         which))
     (home-page "https://www.vi-hps.org/projects/score-p")
     (synopsis "OpenMP runtime performance measurement instrumenter")
     (description "OPARI2 is a source-to-source instrumentation tool for OpenMP
@@ -204,11 +207,9 @@ with calls to the POMP2 measurement interface.")
              version ".tar.gz"))
        (sha256 (base32 "04irflia4rfw02093w9nx7rr98r640y4q8hisjywvd4b7r3nzhhx"))
        (patches (search-patches "cube-nocheck.patch"))))
-    (inputs `(("dbus" ,dbus)
-              ("zlib" ,zlib)))
-    (native-inputs `(("perl" ,perl)
-                     ("qtbase" ,qtbase-5)           ; native because of qmake
-                     ("which" ,which)))
+    (inputs (list dbus zlib))
+    (native-inputs (list perl qtbase-5 ; native because of qmake
+                         which))
 
     ;; FIXME: The doc is 14MB, but adding a doc output results in a cycle.
     (outputs '("out"                              ;"doc"
@@ -354,13 +355,13 @@ different kinds of performance behavior.")
        ("openmpi" ,openmpi)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("flex" ,flex)
-       ("cube" ,cube)                             ;for cube-config
-       ("bison" ,bison)
-       ("python" ,python)
-       ("doxygen" ,doxygen)
-       ("which" ,which)))
+     (list gfortran
+           flex
+           cube ;for cube-config
+           bison
+           python
+           doxygen
+           which))
     (arguments
      `(#:configure-flags
        (list "--enable-shared" "--disable-static"
diff --git a/gnu/packages/protobuf.scm b/gnu/packages/protobuf.scm
index 322ce61b13..3a74a4c613 100644
--- a/gnu/packages/protobuf.scm
+++ b/gnu/packages/protobuf.scm
@@ -7,6 +7,7 @@
 ;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2020 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2020 Brett Gilio <brettg@gnu.org>
+;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -59,9 +60,9 @@
          "1i9y8a1712aj80p5a1kcp378bnjrg3s2127q7304hklhmjcrjl1d"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libevent" ,libevent)))
+     (list libevent))
     (home-page "https://github.com/farsightsec/fstrm")
     (synopsis "Implementation of the Frame Streams data transport protocol")
     (description
@@ -94,7 +95,7 @@ data in motion, or as a file format for data at rest.")
                (base32
                 "1jzqrklhj9grs6xbddyb5dyxfbgbgbyhl5zig8ml50wb22gwkkji"))))
     (build-system gnu-build-system)
-    (inputs `(("zlib" ,zlib)))
+    (inputs (list zlib))
     (outputs (list "out"
                    "static"))           ; ~12 MiB of .a files
     (arguments
@@ -194,8 +195,8 @@ internal RPC protocols and file formats.")
                (base32
                 "0y3yaanq97si7iyld06p8w20m0shpj7sf4xwzbhhvijhxw36d592"))))
     (build-system gnu-build-system)
-    (inputs `(("protobuf" ,protobuf)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list protobuf))
+    (native-inputs (list pkg-config))
     (home-page "https://github.com/protobuf-c/protobuf-c")
     (synopsis "Protocol Buffers implementation in C")
     (description
@@ -209,7 +210,7 @@ code.")
 (define-public protozero
   (package
     (name "protozero")
-    (version "1.6.8")
+    (version "1.7.1")
     (source
      (origin
        (method git-fetch)
@@ -218,7 +219,7 @@ code.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1hfijpfylf1c71wa3mk70gjc88b6k1q7cxb87cwqdflw5q2x8ma6"))))
+        (base32 "052cq5mdjjgcsgk612zkqi8k08p3ikl22r59dk6i6fq41dxldja7"))))
     (build-system cmake-build-system)
     (home-page "https://github.com/mapbox/protozero")
     (synopsis "Minimalistic protocol buffer decoder and encoder in C++")
@@ -242,9 +243,9 @@ encoder in C++.  The developer using protozero has to manually translate the
          "0mj6z58aiw532s1mq48m9xdrm3gdyp2vv9cdinfb5wmnfpm5m7n9"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-wheel" ,python-wheel)))
+     (list python-wheel))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://github.com/google/protobuf")
     (synopsis "Protocol buffers is a data interchange format")
     (description
@@ -268,33 +269,17 @@ mechanism for serializing structured data.")
         (base32 "15dp5pvazd0jx4wzzh79080ah7hkpd3axh40al9vhzs2hf3v90hx"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-flake8" ,python-flake8)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-isort" ,python-isort)))
+     (list python-flake8 python-pytest python-pytest-cov python-isort))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-before 'check 'setup-test-env
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (py3sitedir
-                     (string-append out "/lib/python"
-                                    ,(version-major+minor
-                                      (package-version python))
-                                    "/site-packages")))
-               (setenv "PYTHONPATH"
-                       (string-append py3sitedir ":"
-                                      (getenv "PYTHONPATH"))))
-             #t))
          (replace 'check
            (lambda _
              (invoke "pytest" "--cov-report" "term-missing" "--cov"
                      "pure_protobuf")
              (invoke "flake8" "pure_protobuf" "tests"
                      "--ignore=F541")
-             (invoke "isort" "-rc" "-c" "pure_protobuf" "tests")
-             #t)))))
+             (invoke "isort" "-rc" "-c" "pure_protobuf" "tests"))))))
     (home-page "https://pypi.org/project/pure-protobuf/")
     (synopsis "Protobuf implementation using dataclasses")
     (description
@@ -397,26 +382,23 @@ source files.")
            (lambda _
              (invoke "rspec"))))))
     (native-inputs
-     `(("ruby-benchmark-ips" ,ruby-benchmark-ips)
-       ("ruby-ffi-rzmq" ,ruby-ffi-rzmq)
-       ("ruby-parser" ,ruby-parser)
-       ("ruby-pry-byebug" ,ruby-pry-byebug)
-       ("ruby-pry-stack-explorer" ,ruby-pry-stack-explorer)
-       ("ruby-rake" ,ruby-rake)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-rubocop" ,ruby-rubocop)
-       ("ruby-ruby-prof" ,ruby-ruby-prof)
-       ("ruby-simplecov" ,ruby-simplecov)
-       ("ruby-timecop" ,ruby-timecop)
-       ("ruby-varint" ,ruby-varint)
-       ("ruby-yard" ,ruby-yard)))
+     (list ruby-benchmark-ips
+           ruby-ffi-rzmq
+           ruby-parser
+           ruby-pry-byebug
+           ruby-pry-stack-explorer
+           ruby-rake
+           ruby-rspec
+           ruby-rubocop
+           ruby-ruby-prof
+           ruby-simplecov
+           ruby-timecop
+           ruby-varint
+           ruby-yard))
     (inputs
-     `(("protobuf" ,protobuf)))
+     (list protobuf))
     (propagated-inputs
-     `(("ruby-activesupport" ,ruby-activesupport)
-       ("ruby-middleware" ,ruby-middleware)
-       ("ruby-thor" ,ruby-thor)
-       ("ruby-thread-safe" ,ruby-thread-safe)))
+     (list ruby-activesupport ruby-middleware ruby-thor ruby-thread-safe))
     (home-page "https://github.com/ruby-protobuf/protobuf")
     (synopsis "Implementation of Google's Protocol Buffers in Ruby")
     (description "Protobuf is an implementation of Google's Protocol Buffers
diff --git a/gnu/packages/pth.scm b/gnu/packages/pth.scm
index 1908ce7763..8efede068c 100644
--- a/gnu/packages/pth.scm
+++ b/gnu/packages/pth.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2012, 2015 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2021 Thiago Jung Bauermann <bauermann@kolabnow.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -19,6 +20,7 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages pth)
+  #:use-module (gnu packages autotools)
   #:use-module (guix licenses)
   #:use-module (guix packages)
   #:use-module (guix download)
@@ -38,12 +40,20 @@
         "0ckjqw5kz5m30srqi87idj7xhpw6bpki43mj07bazjm2qmh3cdbj"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:parallel-build? #f
-       #:configure-flags (list 
-                           ,@(if (string=? "aarch64-linux"
-                                           (%current-system))
-                               '("--host=aarch64-unknown-linux-gnu")
-                               '()))))
+     '(#:parallel-build? #f
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'update-config-scripts
+           (lambda* (#:key inputs native-inputs #:allow-other-keys)
+             ;; Replace outdated config.guess and config.sub.
+             (for-each (lambda (file)
+                         (install-file
+                          (search-input-file
+                           (or native-inputs inputs)
+                           (string-append "/bin/" file)) "."))
+                       '("config.guess" "config.sub")))))))
+    (native-inputs
+     (list config))
     (home-page "https://www.gnu.org/software/pth/")
     (synopsis "Portable thread library")
     (description
diff --git a/gnu/packages/pulseaudio.scm b/gnu/packages/pulseaudio.scm
index 191920e64a..fe028b5202 100644
--- a/gnu/packages/pulseaudio.scm
+++ b/gnu/packages/pulseaudio.scm
@@ -51,6 +51,7 @@
   #:use-module (gnu packages boost)
   #:use-module (gnu packages check)
   #:use-module (gnu packages databases)
+  #:use-module (gnu packages documentation)
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gettext)
@@ -101,13 +102,10 @@
                    (("^/usr/bin/env") "env"))
                  #t))))
     (build-system gnu-build-system)
-    (inputs
-     `(("libvorbis" ,libvorbis)
-       ("libogg" ,libogg)
-       ("flac" ,flac)))
+    (propagated-inputs
+     (list flac libogg libvorbis opus))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python" ,python)))
+     (list pkg-config python))
     (home-page "http://www.mega-nerd.com/libsndfile/")
     (synopsis "Reading and writing files containing sampled sound")
     (description
@@ -123,17 +121,6 @@ SPARC.  Hopefully the design of the library will also make it easy to extend
 for reading and writing new sound file formats.")
     (license l:gpl2+)))
 
-;; Remove this on core-updates
-(define-public libsndfile/fixed
-  (package
-    (inherit libsndfile)
-    (inputs '())
-    (propagated-inputs
-     `(("libvorbis" ,libvorbis)
-       ("libogg" ,libogg)
-       ("flac" ,flac)
-       ("opus" ,opus)))))
-
 (define-public libsamplerate
   (package
     (name "libsamplerate")                     ; aka. Secret Rabbit Code (SRC)
@@ -147,11 +134,9 @@ for reading and writing new sound file formats.")
                "1ha46i0nbibq0pl0pjwcqiyny4hj8lp1bnl4dpxm64zjw9lb2zha"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("automake" ,automake))) ;For up to date 'config.guess' and 'config.sub'.
+     (list pkg-config automake)) ;For up to date 'config.guess' and 'config.sub'.
     (propagated-inputs
-     `(("libsndfile" ,libsndfile)
-       ("fftw" ,fftw)))
+     (list libsndfile fftw))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -238,28 +223,28 @@ rates.")
                      (setenv "CK_DEFAULT_TIMEOUT" "120")
                      #t)))))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("bluez" ,bluez)
-       ("sbc" ,sbc)
-       ("speexdsp" ,speexdsp)
-       ("libsndfile" ,libsndfile)
-       ("jack" ,jack-1) ; For routing the output to jack.
-       ("dbus" ,dbus)
-       ("glib" ,glib)
-       ("libltdl" ,libltdl)
-       ("fftwf" ,fftwf)
-       ("avahi" ,avahi)
-
-       ;; For the optional X11 modules.
-       ("libice" ,libice)
-       ("libsm" ,libsm)
-       ("libxcb" ,libxcb)
-       ("libxtst" ,libxtst)
-
-       ("elogind" ,elogind)
-       ("eudev" ,eudev)))         ;for the detection of hardware audio devices
+     (list alsa-lib
+           bluez
+           sbc
+           speexdsp
+           libsndfile
+           jack-1 ; For routing the output to jack.
+           dbus
+           glib
+           libltdl
+           fftwf
+           avahi
+           webrtc-audio-processing
+           ;; For the optional X11 modules.
+           libice
+           libsm
+           libxcb
+           libxtst
+           elogind
+           eudev))         ;for the detection of hardware audio devices
     (native-inputs
      `(("check" ,check)
+       ("doxygen" ,doxygen)
        ("gettext" ,gettext-minimal)
        ("glib:bin" ,glib "bin")
        ("m4" ,m4)
@@ -268,8 +253,7 @@ rates.")
        ("pkg-config" ,pkg-config)))
     (propagated-inputs
      ;; 'libpulse*.la' contain `-ltdb' and `-lcap', so propagate them.
-     `(("libcap" ,libcap)
-       ("tdb" ,tdb)))
+     (list libcap tdb))
     (home-page "http://www.pulseaudio.org/")
     (synopsis "Sound server")
     (description
@@ -288,7 +272,7 @@ sound server.")
 (define-public pavucontrol
   (package
     (name "pavucontrol")
-    (version "4.0")
+    (version "5.0")
     (source (origin
              (method url-fetch)
              (uri (string-append
@@ -297,16 +281,16 @@ sound server.")
                    ".tar.xz"))
              (sha256
               (base32
-               "1qhlkl3g8d7h72xjskii3g1l7la2cavwp69909pzmbi2jyn5pi4g"))))
+               "0yjfiwpaydh5s8v3l78dhwhbsmcl1xsq3p8rvz80m9zinp1p4ayf"))))
     (build-system glib-or-gtk-build-system)
     (inputs
-     `(("adwaita-icon-theme" ,adwaita-icon-theme)          ;hard-coded theme
-       ("gtkmm" ,gtkmm)
-       ("libcanberra" ,libcanberra)
-       ("pulseaudio" ,pulseaudio)))
+     (list adwaita-icon-theme ;hard-coded theme
+           gtkmm-3
+           json-glib
+           libcanberra
+           pulseaudio))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (home-page "https://www.freedesktop.org/software/pulseaudio/pavucontrol/")
     (synopsis "PulseAudio volume control")
     (description
@@ -341,9 +325,9 @@ easily control the volume of all clients, sinks, etc.")
                (("/usr") ""))))
          (delete 'configure)))) ; There's no configure phase.
     (inputs
-     `(("pulseaudio" ,pulseaudio)))
+     (list pulseaudio))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/falconindy/ponymix")
     (synopsis "Console-based PulseAudio mixer")
     (description "Ponymix is a PulseAudio mixer and volume controller with a
@@ -376,7 +360,7 @@ sinks.")
                   (string-append pulse "/lib/libpulse.so.0")))
                #t))))))
     (inputs
-     `(("pulseaudio" ,pulseaudio)))
+     (list pulseaudio))
     (home-page "https://github.com/GeorgeFilipkin/pulsemixer/")
     (synopsis "Command-line and curses mixer for PulseAudio")
     (description "Pulsemixer is a PulseAudio mixer with command-line and
@@ -403,20 +387,20 @@ curses-style interfaces.")
       (build-system python-build-system)
       (arguments `(#:python ,python-2))
       (inputs
-       `(("python2-chardet" ,python2-chardet)
-         ("python2-dbus" ,python2-dbus)
-         ("python2-docopt" ,python2-docopt)
-         ("python2-futures" ,python2-futures)
-         ("python2-pygobject" ,python2-pygobject)
-         ("python2-lxml" ,python2-lxml)
-         ("python2-netifaces" ,python2-netifaces)
-         ("python2-notify2" ,python2-notify2)
-         ("python2-protobuf" ,python2-protobuf)
-         ("python2-psutil" ,python2-psutil)
-         ("python2-requests" ,python2-requests)
-         ("python2-pyroute2" ,python2-pyroute2)
-         ("python2-setproctitle" ,python2-setproctitle)
-         ("python2-zeroconf" ,python2-zeroconf)))
+       (list python2-chardet
+             python2-dbus
+             python2-docopt
+             python2-futures
+             python2-pygobject
+             python2-lxml
+             python2-netifaces
+             python2-notify2
+             python2-protobuf
+             python2-psutil
+             python2-requests
+             python2-pyroute2
+             python2-setproctitle
+             python2-zeroconf))
       (home-page "https://github.com/masmu/pulseaudio-dlna")
       (synopsis "Stream audio to DLNA/UPnP and Chromecast devices")
       (description "This lightweight streaming server brings DLNA/UPnP and
@@ -438,7 +422,7 @@ install one or more of the following packages alongside pulseaudio-dlna:
 (define-public pamixer
   (package
     (name "pamixer")
-    (version "1.4")
+    (version "1.5")
     (source
      (origin
        (method git-fetch)
@@ -447,22 +431,20 @@ install one or more of the following packages alongside pulseaudio-dlna:
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1i14550n8paijwwnhksv5izgfqm3s5q2773bdfp6vyqybkll55f7"))))
+        (base32 "1d5arjbsh3q9z693pi2rq553ai9b18iz36ss7q8ff29m0hf62lzd"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:tests? #f                      ; There is no test suite.
+     `(#:tests? #f                      ; no test suite
        #:make-flags
        (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
        #:phases
        (modify-phases %standard-phases
-         (delete 'configure)            ; There's no configure phase.
+         (delete 'configure)            ; no configure script
          (add-before 'install 'mkdir-bin
            (lambda _
-             (mkdir-p (string-append (assoc-ref %outputs "out") "/bin"))
-             #t)))))
+             (mkdir-p (string-append (assoc-ref %outputs "out") "/bin")))))))
     (inputs
-     `(("boost" ,boost)
-       ("pulseaudio" ,pulseaudio)))
+     (list boost pulseaudio))
     (home-page "https://github.com/cdemoulins/pamixer")
     (synopsis "PulseAudio command line mixer")
     (description
@@ -493,15 +475,9 @@ volume levels of the sinks (get, set, decrease, increase, toggle mute, etc).")
              (delete-file "bootstrap.sh")
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config))
     (inputs
-     `(("avahi" ,avahi)
-       ("gtk+" ,gtk+)
-       ("libnotify" ,libnotify)
-       ("libx11" ,libx11)
-       ("pulseaudio" ,pulseaudio)))
+     (list avahi gtk+ libnotify libx11 pulseaudio))
     (home-page "https://github.com/christophgysin/pasystray")
     (synopsis "PulseAudio controller for the system tray")
     (description "@command{pasystray} enables control of various
@@ -523,11 +499,9 @@ README.md for a detailed list of features.")
          "189z5p20hk0xv9vwvym293503j4pwl03xqk9hl7cl6dwgv0l7wkf"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("pkg-config" ,pkg-config)))
+     (list gettext-minimal pkg-config))
     (inputs
-     `(("gtkmm" ,gtkmm)
-       ("pulseaudio" ,pulseaudio)))
+     (list gtkmm-3 pulseaudio))
     (home-page "https://freedesktop.org/software/pulseaudio/paprefs/")
     (synopsis "Simple GTK based configuration dialog for the PulseAudio sound
 server")
@@ -555,8 +529,8 @@ module-gsettings is loaded in the sound server.")
      ;; No tests.
      '(#:tests? #f))
     (inputs
-     `(;; TODO: Package VST to build the corresponding plugin.
-       ("pulseaudio" ,pulseaudio)))
+     (list ;; TODO: Package VST to build the corresponding plugin.
+           pulseaudio))
     (home-page "https://github.com/werman/noise-suppression-for-voice")
     (synopsis "Real-time Noise suppression plugin based on Xiph's RNNoise")
     (description "The plugin is meant to suppress a wide range of noise
@@ -618,7 +592,7 @@ The plugin is made to work with 1 or 2 channels (ladspa plugin),
              (with-directory-excursion "src/github.com/lawl/NoiseTorch"
                (invoke "go" "generate")))))))
     (inputs
-     `(("rnnoise" ,rnnoise)))
+     (list rnnoise))
     (home-page "https://github.com/lawl/NoiseTorch")
     (synopsis "Real-time microphone noise suppression")
     (description "NoiseTorch creates a virtual PulseAudio microphone that
diff --git a/gnu/packages/pumpio.scm b/gnu/packages/pumpio.scm
index f8a60af760..2f4dd359d1 100644
--- a/gnu/packages/pumpio.scm
+++ b/gnu/packages/pumpio.scm
@@ -50,20 +50,16 @@
              ;; Fix dependency tests.
              (substitute* "pumpa.pro"
                (("/usr/include/tidy\\.h")
-                (string-append (assoc-ref inputs "tidy")
-                               "/include/tidy.h"))
+                (search-input-file inputs "/include/tidy.h"))
                (("/usr/include/aspell.h")
-                (string-append (assoc-ref inputs "aspell")
-                               "/include/aspell.h")))
+                (search-input-file inputs "/include/aspell.h")))
              ;; Run qmake with proper installation prefix.
              (let ((prefix (string-append "PREFIX="
                                           (assoc-ref outputs "out"))))
                (invoke "qmake" prefix))
              #t)))))
     (inputs
-     `(("aspell" ,aspell)
-       ("qtbase" ,qtbase-5)
-       ("tidy" ,tidy)))
+     (list aspell qtbase-5 tidy))
     (synopsis "Qt-based pump.io client")
     (description "Pumpa is a simple pump.io client written in C++ and Qt.")
     (home-page "https://pumpa.branchable.com/")
diff --git a/gnu/packages/pure.scm b/gnu/packages/pure.scm
index 39c1d6089f..cb4cdd4d88 100644
--- a/gnu/packages/pure.scm
+++ b/gnu/packages/pure.scm
@@ -56,9 +56,7 @@
                 "`$LLVMCONF --libs`"))
              #t)))))
     (inputs
-     `(("gmp" ,gmp)
-       ("llvm" ,llvm-3.5)
-       ("mpfr" ,mpfr)))
+     (list gmp llvm-3.5 mpfr))
     (home-page "https://agraef.github.io/pure-lang/")
     (synopsis "Pure programming Language")
     (description "@code{pure} is a programming language based on term
diff --git a/gnu/packages/purescript.scm b/gnu/packages/purescript.scm
index cc51b163c9..fe135be5d9 100644
--- a/gnu/packages/purescript.scm
+++ b/gnu/packages/purescript.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2020 John Soo <jsoo1@asu.edu>
 ;;; Copyright © 2020 Bonface Munyoki Kilyungi <bonfacemunyoki@gmail.com>
+;;; Copyright © 2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -30,107 +31,158 @@
   #:use-module (guix build-system haskell)
   #:use-module ((guix licenses) #:prefix license:))
 
-(define ghc-happy-1.19.9
-  (package
-    (inherit ghc-happy)
-    (version "1.19.9")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/happy/happy-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "138xpxdb7x62lpmgmb6b3v3vgdqqvqn4273jaap3mjmc2gla709y"))))))
-
 (define-public purescript
   (package
     (name "purescript")
-    (version "0.13.8")
+    (version "0.14.5")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
-             "mirror://hackage/package/purescript/purescript-"
+             "https://hackage.haskell.org/package/purescript/purescript-"
              version
              ".tar.gz"))
        (sha256
-        (base32
-         "0sh9z3ir3jiwmi5h95v9p7j746xxidg1hrxha89c0zl6vr4sq7vh"))
-       (patches (search-patches "purescript-relax-dependencies.patch"))))
+        (base32 "06f318hdah076vkviw1ryyg2p0gpbabsp8lbm5x03f2qv92n9j1n"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-glob" ,ghc-glob)
-       ("ghc-aeson" ,ghc-aeson)
-       ("ghc-aeson-better-errors" ,ghc-aeson-better-errors)
-       ("ghc-aeson-pretty" ,ghc-aeson-pretty)
-       ("ghc-ansi-terminal" ,ghc-ansi-terminal)
-       ("ghc-base-compat" ,ghc-base-compat)
-       ("ghc-blaze-html" ,ghc-blaze-html)
-       ("ghc-bower-json" ,ghc-bower-json)
-       ("ghc-boxes" ,ghc-boxes)
-       ("ghc-cborg" ,ghc-cborg)
-       ("ghc-cheapskate" ,ghc-cheapskate)
-       ("ghc-clock" ,ghc-clock)
-       ("ghc-cryptonite" ,ghc-cryptonite)
-       ("ghc-data-ordlist" ,ghc-data-ordlist)
-       ("ghc-dlist" ,ghc-dlist)
-       ("ghc-edit-distance" ,ghc-edit-distance)
-       ("ghc-file-embed" ,ghc-file-embed)
-       ("ghc-fsnotify" ,ghc-fsnotify)
-       ("ghc-happy" ,ghc-happy)
-       ("ghc-language-javascript" ,ghc-language-javascript)
-       ("ghc-lifted-async" ,ghc-lifted-async)
-       ("ghc-lifted-base" ,ghc-lifted-base)
-       ("ghc-memory" ,ghc-memory)
-       ("ghc-microlens-platform" ,ghc-microlens-platform)
-       ("ghc-monad-control" ,ghc-monad-control)
-       ("ghc-monad-logger" ,ghc-monad-logger)
-       ("ghc-network" ,ghc-network)
-       ("ghc-parallel" ,ghc-parallel)
-       ("ghc-pattern-arrows" ,ghc-pattern-arrows)
-       ("ghc-protolude" ,ghc-protolude)
-       ("ghc-regex-tdfa" ,ghc-regex-tdfa)
-       ("ghc-safe" ,ghc-safe)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-semialign" ,ghc-semialign)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-serialise" ,ghc-serialise)
-       ("ghc-sourcemap" ,ghc-sourcemap)
-       ("ghc-split" ,ghc-split)
-       ("ghc-stringsearch" ,ghc-stringsearch)
-       ("ghc-syb" ,ghc-syb)
-       ("ghc-these" ,ghc-these)
-       ("ghc-transformers-base" ,ghc-transformers-base)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-ansi-wl-pprint" ,ghc-ansi-wl-pprint)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-network" ,ghc-network)
-       ("ghc-optparse-applicative" ,ghc-optparse-applicative)
-       ("ghc-wai" ,ghc-wai)
-       ("ghc-wai-websockets" ,ghc-wai-websockets)
-       ("ghc-warp" ,ghc-warp)
-       ("ghc-websockets" ,ghc-websockets)))
+     (list ghc-glob
+           ghc-aeson
+           ghc-aeson-better-errors
+           ghc-aeson-pretty
+           ghc-ansi-terminal
+           ghc-base-compat
+           ghc-blaze-html
+           ghc-bower-json
+           ghc-boxes
+           ghc-cborg
+           ghc-cheapskate
+           ghc-clock
+           ghc-cryptonite
+           ghc-data-ordlist
+           ghc-dlist
+           ghc-edit-distance
+           ghc-file-embed
+           ghc-fsnotify
+           ghc-happy
+           ghc-language-javascript
+           ghc-lifted-async
+           ghc-lifted-base
+           ghc-memory
+           ghc-microlens-platform
+           ghc-monad-control
+           ghc-monad-logger
+           ghc-network
+           ghc-parallel
+           ghc-pattern-arrows
+           ghc-protolude
+           ghc-purescript-cst
+           ghc-regex-tdfa
+           ghc-safe
+           ghc-scientific
+           ghc-semialign
+           ghc-semigroups
+           ghc-serialise
+           ghc-sourcemap
+           ghc-split
+           ghc-stringsearch
+           ghc-syb
+           ghc-these
+           ghc-transformers-base
+           ghc-transformers-compat
+           ghc-unordered-containers
+           ghc-utf8-string
+           ghc-vector
+           ghc-ansi-wl-pprint
+           ghc-http-types
+           ghc-network
+           ghc-optparse-applicative-0.15.1.0 ; XXX: needs specific version
+           ghc-wai
+           ghc-wai-websockets
+           ghc-warp
+           ghc-websockets))
     (native-inputs
-     `(("ghc-happy" ,ghc-happy-1.19.9) ; build fails with 1.19.12
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-golden" ,ghc-tasty-golden)
-       ("ghc-tasty-hspec" ,ghc-tasty-hspec)))
+     (list ghc-happy
+           ghc-hunit
+           ghc-hspec
+           hspec-discover
+           ghc-tasty
+           ghc-tasty-golden
+           ghc-tasty-hspec))
     (arguments
      `(;; Tests require npm
        #:tests? #f
-       #:configure-flags '("--flags=release")))
+       #:configure-flags '("--flags=release")
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'update-constraints
+           (lambda _
+             (substitute* "purescript.cabal"
+               (("\\b(ansi-terminal|cryptonite|dlist|language-javascript)\\s+[^,]+" all dep)
+                dep)))))))
     (home-page "https://www.purescript.org/")
     (synopsis "Haskell inspired programming language compiling to JavaScript")
     (description
      "Purescript is a small strongly, statically typed programming language with
 expressive types, inspired by Haskell and compiling to JavaScript.")
     (license license:bsd-3)))
+
+(define-public ghc-purescript-cst
+  (package
+    (name "ghc-purescript-cst")
+    (version "0.4.0.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/purescript-cst/purescript-cst-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32 "0r3f5lr9lrv9wpgkwj6nyl42lvxryj2lvr1w7ld4gki8ylq24n8g"))))
+    (build-system haskell-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'update-constraints
+           (lambda _
+             (substitute* "purescript-cst.cabal"
+               (("\\b(dlist)\\s+[^,]+" all dep)
+                dep)))))))
+    (inputs
+      (list ghc-aeson
+            ghc-base-compat
+            ghc-dlist
+            ghc-microlens
+            ghc-protolude
+            ghc-scientific
+            ghc-semigroups
+            ghc-serialise
+            ghc-vector))
+    (native-inputs (list ghc-happy))
+    (home-page "https://www.purescript.org/")
+    (synopsis "PureScript Programming Language Concrete Syntax Tree")
+    (description
+     "This package implements parser for the PureScript programming language.")
+    (license license:bsd-3)))
+
+(define-public ghc-optparse-applicative-0.15.1.0
+  (package
+    (inherit ghc-optparse-applicative)
+    (name "ghc-optparse-applicative")
+    (version "0.15.1.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/optparse-applicative/optparse-applicative-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32 "1ws6y3b3f6hsgv0ff0yp6lw4hba1rps4dnvry3yllng0s5gngcsd"))))
+    (inputs
+      (list ghc-transformers-compat ghc-ansi-wl-pprint))
+    (native-inputs (list ghc-quickcheck))
+    (arguments
+      `(#:cabal-revision
+        ("1" "0zmhqkd96v2z1ilhqdkd9z4jgsnsxb8yi2479ind8m5zm9363zr9")))))
diff --git a/gnu/packages/pv.scm b/gnu/packages/pv.scm
index db6c3dd669..97b3dcdadc 100644
--- a/gnu/packages/pv.scm
+++ b/gnu/packages/pv.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015 Claes Wallin <claes.wallin@greatsinodevelopment.com>
+;;; Copyright © 2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -25,22 +26,22 @@
 (define-public pv
   (package
     (name "pv")
-    (version "1.6.6")
+    (version "1.6.20")
     (source
      (origin
-      (method url-fetch)
-      (uri (string-append "https://www.ivarch.com/programs/sources/pv-"
-                          version ".tar.bz2"))
-      (sha256
-       (base32
-        "1wbk14xh9rfypiwyy68ssl8dliyji30ly70qki1y2xx3ywszk3k0"))))
+       (method url-fetch)
+       (uri (string-append "https://www.ivarch.com/programs/sources/pv-"
+                           version ".tar.bz2"))
+       (sha256
+        (base32 "00y6zla8h653sn4axgqz7rr0x79vfwl62a7gn6lzn607zwg9acg8"))))
     (build-system gnu-build-system)
     (home-page "https://www.ivarch.com/programs/pv.shtml")
     (synopsis "Pipeline progress indicator")
     (description
-     "pv (Pipe Viewer) is a terminal-based tool for monitoring the progress
+     "@acronym{pv, Pipe Viewer} is a terminal tool for monitoring the progress
 of data through a pipeline.  It can be inserted into any normal pipeline
-between two processes to give a visual indication of how quickly data is
-passing through, how long it has taken, how near to completion it is, and an
-estimate of how long it will be until completion.")
+between two processes.  It gives a visual indication of how quickly data is
+passing through, how much has been transferred and how near to completion it is
+(with a progress bar), how long it has taken, and an estimate of the remaining
+time before completion.")
     (license artistic2.0)))
diff --git a/gnu/packages/python-build.scm b/gnu/packages/python-build.scm
index ace80382bb..2abb781f76 100644
--- a/gnu/packages/python-build.scm
+++ b/gnu/packages/python-build.scm
@@ -23,9 +23,12 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages python-build)
+  #:use-module (gnu packages)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix build-system python)
+  #:use-module (guix gexp)
   #:use-module (guix download)
+  #:use-module (guix git-download)
   #:use-module (guix packages))
 
 ;;; Commentary:
@@ -39,14 +42,14 @@
 (define-public python-wheel
   (package
     (name "python-wheel")
-    (version "0.36.2")
+    (version "0.37.0")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "wheel" version))
         (sha256
          (base32
-          "0pi4w0brz7a86ddk6pm8p6j0w6d7jgacgxm0c2dab3k5cb8yy7p1"))))
+          "1bbga5i49rj1cwi4sjpkvfhl1f8vl9lfky2lblsy768nk4wp5vz2"))))
     (build-system python-build-system)
     (arguments
      ;; FIXME: The test suite runs "python setup.py bdist_wheel", which in turn
@@ -90,6 +93,38 @@ installed with a newer @code{pip} or with wheel's own command line utility.")
 Language (TOML) configuration files.")
     (license license:expat)))
 
+(define-public python-tomli-w
+  (package
+    (name "python-tomli-w")
+    (version "1.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "tomli_w" version))
+       (sha256
+        (base32 "1fg13bfq5qy1ym4x77815nhxh1xpfs0drhn9r9464cz00m1l6qzl"))))
+    (build-system python-build-system)
+    (arguments
+     (list
+      #:tests? #f                       ;to avoid extra dependencies
+      #:phases
+      #~(modify-phases %standard-phases
+          ;; XXX: PEP 517 manual build copied from python-isort.
+          (replace 'build
+            (lambda _
+              (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
+          (replace 'install
+            (lambda _
+              (let ((whl (car (find-files "dist" "\\.whl$"))))
+                (invoke "pip" "--no-cache-dir" "--no-input"
+                        "install" "--no-deps" "--prefix" #$output whl)))))))
+    (native-inputs (list python-pypa-build python-flit-core))
+    (home-page "https://github.com/hukkin/tomli-w")
+    (synopsis "Minimal TOML writer")
+    (description "Tomli-W is a Python library for writing TOML.  It is a
+write-only counterpart to Tomli, which is a read-only TOML parser.")
+    (license license:expat)))
+
 (define-public python-pytoml
   (package
     (name "python-pytoml")
@@ -107,6 +142,70 @@ Language (TOML) configuration files.")
     (description "This package provides a Python parser for TOML-0.4.0.")
     (license license:expat)))
 
+(define-public python-six-bootstrap
+  (package
+    (name "python-six-bootstrap")
+    (version "1.16.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "six" version))
+       (sha256
+        (base32
+         "09n9qih9rpj95q3r4a40li7hk6swma11syvgwdc68qm1fxsc6q8y"))))
+    (build-system python-build-system)
+    (arguments `(#:tests? #f))          ;to avoid pytest dependency
+    (home-page "https://pypi.org/project/six/")
+    (synopsis "Python 2 and 3 compatibility utilities")
+    (description
+     "Six is a Python 2 and 3 compatibility library.  It provides utility
+functions for smoothing over the differences between the Python versions with
+the goal of writing Python code that is compatible on both Python versions.
+Six supports every Python version since 2.5.  It is contained in only one
+Python file, so it can be easily copied into your project.")
+    (license license:x11)))
+
+(define-public python2-six-bootstrap
+  (package-with-python2 python-six-bootstrap))
+
+(define-public python-tomli
+  (package
+    (name "python-tomli")
+    (version "2.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "tomli" version))
+       (sha256
+        (base32 "1q8lrh9ypa6zpgbc5f7z23p7phzblp4vpxdrpfr1wajhb17w74n2"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:tests? #f                      ;disabled to avoid extra dependencies
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'build
+           (lambda _
+             (setenv "PYTHONPATH" (string-append (getcwd) ":"
+                                                 (getenv "GUIX_PYTHONPATH")))
+             (invoke "python" "-m" "build" "--wheel" "--no-isolation"
+                     "--skip-dependency-check")))
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out"))
+                   (whl (car (find-files "dist" "\\.whl$"))))
+               (invoke "pip" "--no-cache-dir" "--no-input"
+                       "install" "--no-deps" "--prefix" out whl)))))))
+    (native-inputs
+     `(("python-flit-core-bootstrap" ,python-flit-core-bootstrap)
+       ("python-pypa-build" ,python-pypa-build)
+       ("python-six", python-six-bootstrap)))
+    (home-page "https://github.com/hukkin/tomli")
+    (synopsis "Small and fast TOML parser")
+    (description "Tomli is a minimal TOML parser that is fully compatible with
+@url{https://toml.io/en/v1.0.0,TOML v1.0.0}.  It is about 2.4 times as fast as
+@code{python-toml}.")
+    (license license:expat)))
+
 (define-public python-pep517-bootstrap
   (hidden-package
    (package
@@ -123,31 +222,135 @@ Language (TOML) configuration files.")
      (arguments
       `(#:tests? #f))                     ;to avoid circular dependencies
      (propagated-inputs
-      `(("python-toml" ,python-toml)
-        ("python-wheel" ,python-wheel)))
+      (list python-toml python-wheel))
      (home-page "https://github.com/pypa/pep517")
      (synopsis "Wrappers to build Python packages using PEP 517 hooks")
      (description
       "Wrappers to build Python packages using PEP 517 hooks.")
      (license license:expat))))
 
+(define-public python-pyparsing
+  (package
+    (name "python-pyparsing")
+    (version "3.0.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pyparsing" version))
+       (sha256
+        (base32 "109b9r802wb472hgmxclljprh5cid0w3p6mk9alba7pg2c0frgfr"))))
+    (build-system python-build-system)
+    (outputs '("out" "doc"))
+    (arguments
+     `(#:tests? #f                      ;no test target
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'install-doc
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((doc (string-append (assoc-ref outputs "doc")
+                                        "/share/doc/" ,name "-" ,version))
+                    (html-doc (string-append doc "/html"))
+                    (examples (string-append doc "/examples")))
+               (mkdir-p html-doc)
+               (mkdir-p examples)
+               (for-each
+                (lambda (dir tgt)
+                  (map (lambda (file)
+                         (install-file file tgt))
+                       (find-files dir ".*")))
+                (list "docs" "htmldoc" "examples")
+                (list doc html-doc examples))))))))
+    (home-page "https://github.com/pyparsing/pyparsing")
+    (synopsis "Python parsing class library")
+    (description
+     "The pyparsing module is an alternative approach to creating and
+executing simple grammars, vs. the traditional lex/yacc approach, or the use
+of regular expressions.  The pyparsing module provides a library of classes
+that client code uses to construct the grammar directly in Python code.")
+    (license license:expat)
+    (properties `((python2-variant . ,(delay python2-pyparsing))))))
+
+;;; This is the last release compatible with Python 2.
+(define-public python-pyparsing-2.4.7
+  (package
+    (inherit python-pyparsing)
+    (version "2.4.7")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pyparsing" version))
+       (sha256
+        (base32 "1hgc8qrbq1ymxbwfbjghv01fm3fbpjwpjwi0bcailxxzhf3yq0y2"))))))
+
+(define-public python2-pyparsing
+  (package-with-python2 (strip-python2-variant python-pyparsing-2.4.7)))
+
+(define-public python-packaging-bootstrap
+  (package
+    (name "python-packaging-bootstrap")
+    (version "21.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "packaging" version))
+       (sha256
+        (base32
+         "1sygirdrqgv4f1ckh9nhpcw1yfidrh3qjl86wq8vk6nq4wlw8iyx"))))
+    (build-system python-build-system)
+    (arguments `(#:tests? #f))         ;disabled to avoid extra dependencies
+    (propagated-inputs
+     (list python-pyparsing python-six-bootstrap))
+    (home-page "https://github.com/pypa/packaging")
+    (synopsis "Core utilities for Python packages")
+    (description "Packaging is a Python module for dealing with Python packages.
+It offers an interface for working with package versions, names, and dependency
+information.")
+    ;; From 'LICENSE': This software is made available under the terms of
+    ;; *either* of the licenses found in LICENSE.APACHE or LICENSE.BSD.
+    ;; Contributions to this software is made under the terms of *both* these
+    ;; licenses.
+    (license (list license:asl2.0 license:bsd-2))))
+
+(define-public python2-packaging-bootstrap
+  (let ((base (package-with-python2 python-packaging-bootstrap)))
+    (package/inherit base
+      (version "20.0")                  ;last version with Python 2 support
+      (source
+       (origin
+         (method url-fetch)
+         (uri (pypi-uri "packaging" version))
+         ;; XXX: The URL in the patch file is wrong, it should be
+         ;; <https://github.com/pypa/packaging/pull/256>.
+         (patches (search-patches "python-packaging-test-arch.patch"))
+         (sha256
+          (base32
+           "1y2ip3a4ykkpgnwgn85j6hkspcl0cg3mzms97f40mk57vwqq67gy")))))))
+
 ;;; The name 'python-pypa-build' is chosen rather than 'python-build' to avoid
 ;;; a name clash with python-build from (guix build-system python).
 (define-public python-pypa-build
   (package
     (name "python-pypa-build")
-    (version "0.1.0")
+    (version "0.7.0")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "build" version))
               (sha256
                (base32
-                "1d6m21lijwm04g50nwgsgj7x3vhblzw7jv05ah8psqgzk20bbch8"))))
+                "17xqija27x4my1yrnk6q2vwln60r39g2dhby9zg2l99qjgbdrahs"))))
     (build-system python-build-system)
     (arguments
-     `(#:tests? #f))                    ;to tests in the PyPI release
+     `(#:tests? #f                      ;to tests in the PyPI release
+       #:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'use-toml-instead-of-tomli
+                    ;; Using toml instead of tomli eases bootstrapping.
+                    (lambda _
+                      (substitute* "setup.cfg"
+                        (("tomli>=.*")
+                         "toml\n")))))))
     (propagated-inputs
-     `(("python-pep517", python-pep517-bootstrap)
+     `(("python-packaging" ,python-packaging-bootstrap)
+       ("python-pep517", python-pep517-bootstrap)
        ("python-toml" ,python-toml)))
     (home-page "https://pypa-build.readthedocs.io/en/latest/")
     (synopsis "Simple Python PEP 517 package builder")
@@ -160,13 +363,13 @@ order to make bootstrapping easier.")
 (define-public python-poetry-core
   (package
     (name "python-poetry-core")
-    (version "1.0.3")
+    (version "1.0.7")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "poetry-core" version))
        (sha256
-        (base32 "1ichii48zkywcnj8v3bcn9vk09v69jv6h65805w21hwz4hlcj593"))))
+        (base32 "01n2rbsvks7snrq3m1d08r3xz9q2715ajb62fdb6rvqnb9sirhcq"))))
     (build-system python-build-system)
     (home-page "https://github.com/python-poetry/poetry-core")
     (synopsis "Poetry PEP 517 build back-end")
@@ -176,3 +379,52 @@ implementation developed for Poetry.  This project is intended to be
 a light weight, fully compliant, self-contained package allowing PEP 517
 compatible build front-ends to build Poetry managed projects.")
     (license license:expat)))
+
+;;; This package exists to bootstrap python-tomli.
+(define-public python-flit-core-bootstrap
+  (package
+    (name "python-flit-core-bootstrap")
+    (version "3.5.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "flit" version))
+       (sha256
+        (base32 "04152qj46sqbnlrj7ch9p7svjrrlpzbk0qr39g2yr0s4f5vp6frf"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     (list python-toml))
+    (arguments
+     ;; flit-core has a test suite, but it requires Pytest.  Disable it so
+     ;; as to not pull pytest as an input.
+     `(#:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'build
+           ;; flit-core requires itself to build.  Luckily, a
+           ;; bootstrapping script exists, which does so using just
+           ;; the checkout sources and Python.
+           (lambda _
+             (invoke "python" "flit_core/build_dists.py")))
+         (replace 'install
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out"))
+                   (whl (car (find-files "." "\\.whl$"))))
+               (invoke "pip" "--no-cache-dir" "--no-input"
+                       "install" "--no-deps" "--prefix" out whl))))
+         ;; The sanity-check phase fails because flit depends on tomli at
+         ;; run-time, but this core variant avoids it to avoid a cycle.
+         (delete 'sanity-check))))
+    (home-page "https://github.com/takluyver/flit")
+    (synopsis "Core package of the Flit Python build system")
+    (description "This package provides @code{flit-core}, a PEP 517 build
+backend for packages using Flit.  The only public interface is the API
+specified by PEP 517, @code{flit_core.buildapi}.")
+    (license license:bsd-3)))
+
+(define-public python-flit-core
+  (package/inherit python-flit-core-bootstrap
+    (name "python-flit-core")
+    (propagated-inputs
+     (modify-inputs (package-propagated-inputs python-flit-core-bootstrap)
+       (replace "python-toml" python-tomli)))))
diff --git a/gnu/packages/python-check.scm b/gnu/packages/python-check.scm
index 8252f02182..f971dae5b4 100644
--- a/gnu/packages/python-check.scm
+++ b/gnu/packages/python-check.scm
@@ -1,11 +1,11 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2019 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2019, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2019, 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2019, 2021 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;; Copyright © 2020 Julien Lepiller <julien@lepiller.eu>
-;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2020, 2022 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2020 Edouard Klein <edk@beaver-labs.com>
 ;;; Copyright © 2020, 2021 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2020 Tanguy Le Carrour <tanguy@bioneland.org>
@@ -44,6 +44,7 @@
   #:use-module (guix utils)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
+  #:use-module (guix gexp)
   #:use-module (guix git-download)
   #:use-module (guix download)
   #:use-module (guix build-system python))
@@ -80,8 +81,7 @@ data in a standard way.")
         (base32 "1rcv4m850rl7djzdgzz2zhjd8g5ih8w6l0sj2f9hsynymlsq82xl"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-click" ,python-click)
-       ("python-pytest" ,python-pytest)))
+     (list python-click python-pytest))
     (home-page "https://github.com/Stranger6667/pytest-click")
     (synopsis "Py.test plugin for Click")
     (description "This package provides a plugin to test Python click
@@ -112,15 +112,12 @@ interfaces with pytest.")
                (add-installed-pythonpath inputs outputs)
                (invoke "pytest")))))))
     (native-inputs
-     `(("python-pytest-flake8" ,python-pytest-flake8)
-       ("python-pytest-xdist" ,python-pytest-xdist-next)
-       ("python-tabulate" ,python-tabulate)))
+     (list python-pytest-flake8 python-pytest-xdist-next python-tabulate))
     (propagated-inputs
-     `(("python-pytest" ,python-pytest-6)
-       ("python-six" ,python-six)))
+     (list python-pytest-6 python-six))
     (home-page "https://github.com/nicoulaj/pytest-csv")
     (synopsis "CSV reporter for Pytest")
-    (description "This packages provides a plugin for Pytest that enables a
+    (description "This package provides a plugin for Pytest that enables a
 CSV output mode for Pytest.  It can be enabled via the @option{--csv} option
 it adds to the Pytest command line interface (CLI).")
     (license license:gpl3+)))
@@ -139,17 +136,44 @@ it adds to the Pytest command line interface (CLI).")
     (arguments
      `(#:tests? #f))          ; PyTest-Django fails to build in master
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ;;("python-pytest-django" ,python-pytest-django)
-       ("python-twine" ,python-twine)
-       ("python-wheel" ,python-wheel)))
+     (list python-pytest python-pytest-cov
+           ;;("python-pytest-django" ,python-pytest-django)
+           python-twine python-wheel))
     (synopsis "Tests components for Python")
     (description "Testfixtures is a collection of helpers and mock objects that
 are useful when writing automated tests in Python.")
     (home-page "https://testfixtures.readthedocs.io/en/latest/")
     (license license:expat)))
 
+(define-public python-cucumber-tag-expressions
+  (package
+    (name "python-cucumber-tag-expressions")
+    (version "4.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "cucumber-tag-expressions" version))
+       (sha256
+        (base32 "0q7rn4l4ppjd1zsglr37ccc5xccg4iigaw827282zfzfsvzda573"))))
+    (build-system python-build-system)
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (replace 'check
+                 (lambda* (#:key tests? #:allow-other-keys)
+                   (when tests?
+                     ;; Ignore the configuration file since we don't
+                     ;; need HTML reports, etc.
+                     (invoke "pytest" "-c" "/dev/null" "-vv")))))))
+    (native-inputs
+     (list python-invoke python-pathpy python-pytest))
+    (home-page "https://github.com/cucumber/tag-expressions-python")
+    (synopsis "Tag-expression parser for cucumber/behave")
+    (description
+     "This package provides a tag-expression parser for Cucumber and
+@command{behave}.")
+    (license license:expat)))
+
 (define-public python-coveralls
   (package
     (name "python-coveralls")
@@ -177,14 +201,9 @@ are useful when writing automated tests in Python.")
                           (invoke "pytest" "-vv")
                           (format #t "test suite not run~%")))))))
     (propagated-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-docopt" ,python-docopt)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-requests" ,python-requests)))
+     (list python-coverage python-docopt python-pyyaml python-requests))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("python-responses" ,python-responses)))
+     (list python-mock python-pytest python-responses))
     (synopsis "Show coverage stats online via coveralls.io")
     (description
      "Coveralls.io is a service for publishing code coverage statistics online.
@@ -216,9 +235,9 @@ nosetests, etc...) in Python projects.")
                       (lambda _
                         (invoke "pytest" "-vv"))))))
       (native-inputs
-       `(("python-pytest" ,python-pytest)))
+       (list python-pytest))
       (propagated-inputs
-       `(("python-six" ,python-six)))
+       (list python-six))
       (synopsis "Create JUnit XML test results")
       (description
        "This package provides a Python module for creating JUnit XML test
@@ -228,25 +247,40 @@ result documents that can be read by tools such as Jenkins or Bamboo.")
 (define-public python-vcrpy
   (package
     (name "python-vcrpy")
-    (version "2.0.1")
+    (version "4.1.1")
     (source
-      (origin
-        (method url-fetch)
-        (uri (pypi-uri "vcrpy" version))
-        (sha256
-         (base32
-          "0kws7l3hci1dvjv01nxw3805q9v2mwldw58bgl8s90wqism69gjp"))))
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "vcrpy" version))
+       (sha256
+        (base32 "16gmzxs3lzbgf1828n0q61vbmwyhpvzdlk37x6gdk8n05zr5n2ap"))))
     (build-system python-build-system)
-    (arguments `(#:tests? #f)) ; tests require more packages for python-pytest-httpbin
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? outputs #:allow-other-keys)
+             (when tests?
+               (substitute* "tox.ini"
+                 (("AWS_ACCESS_KEY_ID") "PYTHONPATH"))
+               ;; These tests require network access.
+               (delete-file "tests/unit/test_stubs.py")
+               (invoke "pytest" "tests/unit")))))))
     (propagated-inputs
-     `(("python-pyyaml" ,python-pyyaml)
-       ("python-six" ,python-six)
-       ("python-wrapt" ,python-wrapt)
-       ("python-yarl" ,python-yarl)))
+     (list python-pyyaml python-six python-wrapt python-yarl))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-httpbin" ,python-pytest-httpbin)))
+     (list python-black
+           python-coverage
+           python-flake8
+           python-flask
+           python-httplib2
+           python-ipaddress
+           python-mock
+           python-pytest
+           python-pytest-cov
+           python-pytest-httpbin
+           python-tox
+           python-urllib3))
     (home-page "https://github.com/kevin1024/vcrpy")
     (synopsis "Automatically mock your HTTP interactions")
     (description
@@ -297,7 +331,7 @@ interactions, which will update them to correspond to the new API.")
                      ;; argument passed to @code{pytest.main}.
                      "not test_run_marker_registered"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/ftobia/pytest-ordering")
     (synopsis "Pytest plugin to run your tests in a specific order")
     (description
@@ -317,8 +351,7 @@ of tests run in a specific order.")
         (base32 "1y87agr324p6x5gvhziymxjlw54pyn4gqnd49papbl941djpkp5g"))))
   (build-system python-build-system)
   (native-inputs
-   `(("pytest" ,python-pytest)
-     ("setuptools-scm" ,python-setuptools-scm)))
+   (list python-pytest python-setuptools-scm))
   (home-page "https://www.astropy.org/")
   (synopsis
    "Pytest plugin adding diagnostic data to the header of the test output")
@@ -341,21 +374,26 @@ Astropy project, but is optimized for use with astropy-related projects.")
         (base32 "18j6z6y2fvykmcs5z0mldhhaxxn6wzpnhlm2ps7m8r5z5kmh1631"))))
     (build-system python-build-system)
     (arguments
-     ;; No tests provided
-     '(#:tests? #f))
+     `(#:tests? #f ; there are no tests
+       #:phases
+       (modify-phases %standard-phases
+         ;; There is a bug somewhere that makes pytest-filter-subpackage appear
+         ;; as version 0.0.0 to setup.py.  Remove it from the requirements.
+         (add-after 'unpack 'remove-requirement
+           (lambda _
+             (substitute* "setup.cfg"
+               ((".*pytest-filter-subpackage.*") "")))))))
     (native-inputs
-     `(("attrs" ,python-attrs)
-       ("hypothesis" ,python-hypothesis)
-       ("pytest" ,python-pytest)
-       ("pytest-arraydiff" ,python-pytest-arraydiff)
-       ("pytest-astropy-header" ,python-pytest-astropy-header)
-       ("pytest-cov" ,python-pytest-cov)
-       ("pytest-doctestplus" ,python-pytest-doctestplus)
-       ("pytest-filter-subpackage" ,python-pytest-filter-subpackage)
-       ("pytest-mock" ,python-pytest-mock)
-       ("pytest-openfiles" ,python-pytest-openfiles)
-       ("pytest-remotedata" ,python-pytest-remotedata)
-       ("setuptools-scm" ,python-setuptools-scm)))
+     (list python-attrs python-pytest-mock python-setuptools-scm))
+    (propagated-inputs
+     (list python-hypothesis
+           python-pytest-arraydiff
+           python-pytest-astropy-header
+           python-pytest-cov
+           python-pytest-doctestplus
+           python-pytest-filter-subpackage
+           python-pytest-openfiles
+           python-pytest-remotedata))
     (home-page "https://github.com/astropy/pytest-astropy")
     (synopsis
      "Metapackage for all the testing machinery used by the Astropy Project")
@@ -379,9 +417,10 @@ astropy related packages.")
      ;; Tests require python-astropy, which itself requires this package.
      ;; Disable tests to avoid the circular dependency problem.
      '(#:tests? #f))
+    (native-inputs
+     (list python-pytest)) ; for sanity-check
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-six" ,python-six)))
+     (list python-numpy python-six))
     (home-page "https://github.com/astropy/pytest-arraydiff")
     (synopsis "Pytest plugin to help with comparing array output from tests")
     (description
@@ -393,24 +432,32 @@ are too large to conveniently hard-code them in the tests.")
 (define-public python-pytest-doctestplus
   (package
     (name "python-pytest-doctestplus")
-    (version "0.7.0")
+    (version "0.11.2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pytest-doctestplus" version))
        (sha256
-        (base32 "1ai9kvd7xbq2jg2h8gmkb8lqzyrxvdh4zg3vxndg149iwd1hyi7d"))))
+        (base32 "0j1lvlj3ps975q9hmg8i6rpqm0313j3r18bc3l8mz6khb7vav4zk"))))
     (build-system python-build-system)
     (arguments
      '(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda* (#:key inputs outputs #:allow-other-keys)
+           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
              ;; Make the installed plugin discoverable by Pytest.
-             (add-installed-pythonpath inputs outputs)
-             (invoke "pytest" "-vv"))))))
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "python" "-m" "pytest" "-k"
+                       (string-append   ; skip tests that require remote data
+                        "not test_remote_data_url"
+                        " and not test_remote_data_float_cmp"
+                        " and not test_remote_data_ignore_whitespace"
+                        " and not test_remote_data_ellipsis"
+                        " and not test_remote_data_requires"
+                        " and not test_remote_data_ignore_warnings"))))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest python-setuptools-scm))
     (home-page "https://github.com/astropy/pytest-doctestplus")
     (synopsis "Pytest plugin with advanced doctest features")
     (description
@@ -437,10 +484,8 @@ advanced doctest support and enables the testing of reStructuredText files.")
              (when tests?
                (invoke "pytest" "tests")))))))
     (propagated-inputs
-     `(("python-ipython" ,python-ipython)
-       ("python-py" ,python-py)
-       ("python-pytest" ,python-pytest)))
-    (native-inputs `(("python-pytest" ,python-pytest)))
+     (list python-ipython python-py python-pytest))
+    (native-inputs (list python-pytest))
     (home-page "https://github.com/nokia/pytest-exploratory")
     (synopsis "Interactive console for Pytest")
     (description "This Pytest plugin provides an IPython extension that allows
@@ -470,10 +515,7 @@ for interactively selecting and running Pytest tests.")
              (add-installed-pythonpath inputs outputs)
              (invoke "pytest" "-vv" "-k" "not test_with_rst"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-doctestplus"
-        ,python-pytest-doctestplus)))
+     (list python-pytest python-pytest-cov python-pytest-doctestplus))
     (home-page "https://github.com/astropy/pytest-filter-subpackage")
     (synopsis "Pytest plugin for filtering based on sub-packages")
     (description
@@ -503,11 +545,8 @@ sub-package.")
              (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)))
+     (list python-pytest python-setuptools ; needs setuptools >= 50.3.2
+           python-setuptools-scm 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
@@ -515,6 +554,32 @@ 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-metadata
+  (package
+    (name "python-pytest-metadata")
+    (version "1.11.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pytest-metadata" version))
+       (sha256
+        (base32 "1wgcz0w053lnjln0081kjmfflaq7bwncxdzx7k63kr9lkpa0ddbi"))))
+    (build-system python-build-system)
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (replace 'check
+                 (lambda* (#:key tests? #:allow-other-keys)
+                   (when tests?
+                     (invoke "pytest" "-vv")))))))
+    (native-inputs (list python-pytest python-setuptools-scm))
+    (home-page "https://github.com/pytest-dev/pytest-metadata")
+    (synopsis "Access test session metadata with Pytest")
+    (description
+     "@code{pytest-metadata} is a @command{pytest} plugin that provides
+access to test session metadata.")
+    (license license:mpl2.0)))
+
 (define-public python-pytest-openfiles
   (package
     (name "python-pytest-openfiles")
@@ -535,10 +600,9 @@ someone to import them in their actual tests to use them.")
              (add-installed-pythonpath inputs outputs)
              (invoke "pytest" "-vv"))))))
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-pytest" ,python-pytest)))
+     (list python-setuptools-scm python-pytest))
     (propagated-inputs
-     `(("python-psutil" ,python-psutil)))
+     (list python-psutil))
     (home-page "https://github.com/astropy/pytest-openfiles")
     (synopsis "Pytest plugin for detecting inadvertent open file handles")
     (description
@@ -571,9 +635,9 @@ were inadvertently left open at the end of a unit test.")
                       "not test_default_behavior"
                       " and not test_strict_with_decorator")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://github.com/astropy/pytest-remotedata")
     (synopsis "Pytest plugin for controlling remote data access")
     (description
@@ -601,9 +665,9 @@ internet.")
              (when tests?
                (invoke "pytest")))))))
     (propagated-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-setuptools-scm))
     (home-page "https://github.com/pytest-dev/pytest-repeat")
     (synopsis "Pytest plugin for repeating tests")
     (description "@code{pytest-repeat} is a plugin for Pytest that makes it
@@ -611,6 +675,45 @@ enables repeating a single test, or multiple tests, a specific number of
 times.")
     (license license:mpl2.0)))
 
+(define-public python-pytest-mockito
+  (package
+    (name "python-pytest-mockito")
+    (version "0.0.4")
+    (source
+     (origin
+       (method git-fetch)               ;no tests in pypi archive
+       (uri (git-reference
+             (url "https://github.com/kaste/pytest-mockito")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0hnpazaw3mglx1c405z2hkavgan99rqb3wgrcqk8x5kmhpay53xx"))))
+    (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" "-vv")))))))
+    (propagated-inputs
+     (list python-mockito python-pytest))
+    (home-page "https://github.com/kaste/pytest-mockito")
+    (synopsis "Mockito base fixtures for Pytest")
+    (description "The @code{pytest-mockito} plugin provides base Mockito
+fixtures for Pytest.  It covers the main entry points of the Mockito mocking
+framework and makes it easy to undo any monkey patching.  The fixtures are:
+@itemize
+@item when
+@item when2
+@item expect
+@item patch
+@item unstub
+@item spy2
+@end itemize")
+    (license license:expat)))
+
 (define-public python-pytest-mpl
   (package
     (name "python-pytest-mpl")
@@ -629,10 +732,9 @@ times.")
            (lambda _
              (invoke "pytest" "-vv"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (propagated-inputs
-     `(("python-matplotlib" ,python-matplotlib)
-       ("python-pillow" ,python-pillow)))
+     (list python-matplotlib python-nose python-pillow))
     (home-page "https://github.com/matplotlib/pytest-mpl")
     (synopsis "Pytest plugin to help with testing figures output from Matplotlib")
     (description
@@ -640,6 +742,31 @@ times.")
 in Pytest.")
     (license license:bsd-3)))
 
+(define-public python-pytest-pydocstyle
+  (package
+    (name "python-pytest-pydocstyle")
+    (version "2.2.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/henry0312/pytest-pydocstyle")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0w6fivz4nb4b70wzmi5sk17qs9pd05rnh03fmch6v00r3dmfpk39"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:tests? #f)) ; test requires the package itself
+    (propagated-inputs
+     (list python-pydocstyle
+           python-pytest))              ;apparently required
+    (home-page "https://github.com/henry0312/pytest-pydocstyle")
+    (synopsis "Pytest plugin to run @command{pydocstyle}")
+    (description "This package provides a Pytest plugin to run
+@command{pydocstyle}.")
+    (license license:expat)))
+
 (define-public python-covdefaults
   (package
     (name "python-covdefaults")
@@ -662,8 +789,7 @@ in Pytest.")
            (lambda _
              (invoke "pytest" "-vv"))))))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-pytest" ,python-pytest)))
+     (list python-coverage python-pytest))
     (home-page "https://github.com/asottile/covdefaults")
     (synopsis "Coverage plugin to provide opinionated default settings")
     (description
@@ -671,6 +797,33 @@ in Pytest.")
  settings.")
     (license license:expat)))
 
+(define-public python-pytest-subtests
+  (package
+    (name "python-pytest-subtests")
+    (version "0.5.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pytest-subtests" version))
+       (sha256
+        (base32 "087i03nmkmfnrpc7mmizvr40ijnjw4lfxc22rnk8jk6s1szy9lav"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "python" "-m" "pytest")))))))
+    (native-inputs
+     (list python-pytest python-setuptools-scm))
+    (home-page "https://github.com/pytest-dev/pytest-subtests")
+    (synopsis "Unittest subTest() support and subtests fixture")
+    (description "This Pytest plugin provides unittest @code{subTest()}
+support and @code{subtests} fixture.")
+    (license license:expat)))
+
 (define-public python-pytest-vcr
   ;; This commit fixes integration with pytest-5
   (let ((commit "4d6c7b3e379a6a7cba0b8f9d20b704dc976e9f05")
@@ -697,31 +850,57 @@ in Pytest.")
                (add-installed-pythonpath inputs outputs)
                (invoke "pytest" "tests/"))))))
       (propagated-inputs
-       `(("python-pytest" ,python-pytest)
-         ("python-vcrpy" ,python-vcrpy)))
+       (list python-pytest python-vcrpy))
       (home-page "https://github.com/ktosiek/pytest-vcr")
       (synopsis "Plugin for managing VCR.py cassettes")
       (description
        "Plugin for managing VCR.py cassettes.")
       (license license:expat))))
 
+(define-public python-pytest-doctest-custom
+  (package
+    (name "python-pytest-doctest-custom")
+    (version "1.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pytest-doctest-custom" version))
+       (sha256
+        (base32 "0kxkdd6q9c3h31kc88lbyfll4c45b0zjd24cbr4c083fcvcy7lip"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "python" "test_pytest_doctest_custom.py")))))))
+    (native-inputs
+     (list python-pytest))
+    (home-page "https://github.com/danilobellini/pytest-doctest-custom")
+    (synopsis
+     "Pytest plugin to customize string representations of doctest results")
+    (description "This package provides a Pytest plugin for customizing string
+representations of doctest results.  It can change the display hook used by
+doctest to render the object representations.")
+    (license license:expat)))
+
 (define-public python-pytest-checkdocs
   (package
     (name "python-pytest-checkdocs")
-    (version "1.2.2")
+    (version "1.2.5")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pytest-checkdocs" version))
        (sha256
-        (base32 "0j6j1gvj6x451y3qsx4xbaq9p1w9gg3mwk7n0w80cy8vdyjkngb0"))))
+        (base32 "0m4kn7141i6k8qr8ak3lbmk9vim11xsrlnrggcfwczfrglc6jmia"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-docutils" ,python-docutils)
-       ("python-importlib-metadata" ,python-importlib-metadata)
-       ("python-more-itertools" ,python-more-itertools)))
+     (list python-docutils python-importlib-metadata python-more-itertools))
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-setuptools-scm python-pytest))
     (home-page "https://github.com/jaraco/pytest-checkdocs")
     (synopsis "Check the README when running tests")
     (description
@@ -751,11 +930,9 @@ of the project to ensure it renders properly.")
            (lambda _
              (invoke "pytest" "-vv"))))))
     (native-inputs
-     `(("python-covdefaults" ,python-covdefaults)
-       ("python-coverage" ,python-coverage)
-       ("python-pytest" ,python-pytest)))
+     (list python-covdefaults python-coverage python-pytest))
     (propagated-inputs
-     `(("python-regex" ,python-regex)))
+     (list python-regex))
     (home-page "https://github.com/asottile/re-assert")
     (synopsis "Show where your regex match assertion failed")
     (description
@@ -766,28 +943,33 @@ simpler.")
 (define-public python-pytest-trio
   (package
     (name "python-pytest-trio")
-    (version "0.6.0")
+    (version "0.7.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pytest-trio" version))
        (sha256
-        (base32 "1zm8didm9h5jkqhghl9bvqs7kr7sjci282c7grhk6yhpzn8a9w4v"))))
+        (base32 "0c8cqf9by2884riksrqymqfp2g1d2d798a2zalcw9hmf34c786y0"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (add-installed-pythonpath inputs outputs)
-             (invoke "pytest" "-W" "error" "-ra" "-v" "--pyargs"
-                     "pytest_trio" "--verbose" "--cov"))))))
+           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "pytest" "-W" "error" "-ra" "-v" "--pyargs"
+                       "pytest_trio" "--verbose" "--cov" "-k"
+                       (string-append
+                         ;; Needs network
+                         "not test_async_yield_fixture_with_nursery"
+                         " and not test_try"
+                         ;; No keyboard interrupt in our build environment.
+                         " and not test_actual_test"))))))))
     (native-inputs
-     `(("python-hypothesis" ,python-hypothesis)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)))
+     (list python-hypothesis python-pytest python-pytest-cov))
     (propagated-inputs
-     `(("python-trio" ,python-trio)))
+      (list python-async-generator python-outcome python-pytest python-trio))
     (home-page "https://github.com/python-trio/pytest-trio")
     (synopsis "Pytest plugin for trio")
     (description
@@ -809,9 +991,9 @@ friendly library for concurrency and async I/O in Python.")
          "0syx68xk5ss3hgp3nr2y122w0fgkzr5936ghsqrkymh3m5hrf9gh"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-flake8" ,python-flake8)))
+     (list python-flake8))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/tholo/pytest-flake8")
     (synopsis "Pytest plugin to check FLAKE8 requirements")
     (description
@@ -822,26 +1004,25 @@ compliance.")
 (define-public python-pytest-isort
   (package
     (name "python-pytest-isort")
-    (version "0.3.1")
+    (version "2.0.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pytest-isort" version))
        (sha256
-        (base32 "06myn5hhxs5yp8dqr1yjsgcnnxnsrvsqannm00bvaw0qml6ydzjb"))))
+        (base32 "05wi28zlqk3jafpjal8j523y5jcsx3xl3id9rx93qfjgkif8q6l2"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda _
-             (setenv "PYTHONPATH"
-                     (string-append (getcwd) ":"
-                                    (getenv "PYTHONPATH")))
-             (invoke "pytest"))))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "pytest")))))))
     (propagated-inputs
-     `(("python-isort" ,python-isort)
-       ("python-pytest" ,python-pytest)))
+     (list python-isort python-pytest))
+    (native-inputs
+     (list python-mock))
     (home-page "https://github.com/moccu/pytest-isort/")
     (synopsis "Pytest plugin to check import ordering using isort")
     (description
@@ -874,14 +1055,10 @@ isort.")
                 "bindir = os.path.realpath('/tmp/bin')"))
              #t)))))
     (propagated-inputs
-     `(("python-contextlib2" ,python-contextlib2)
-       ("python-execnet" ,python-execnet)
-       ("python-pathpy" ,python-pathpy)
-       ("python-termcolor" ,python-termcolor)))
+     (list python-contextlib2 python-execnet python-pathpy
+           python-termcolor))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("python-setuptools-git" ,python-setuptools-git)))
+     (list python-mock python-pytest python-setuptools-git))
     (home-page "https://github.com/manahl/pytest-plugins")
     (synopsis "Assorted shell and environment tools for py.test")
     (description
@@ -902,8 +1079,7 @@ py.test testing framework.")
          "13i1qpz22w3x4dmw8vih5jdnbqfqvl7jiqs0dg764s0zf8bp98a1"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-setuptools-git" ,python-setuptools-git)))
+     (list python-pytest python-setuptools-git))
     (home-page "https://github.com/manahl/pytest-plugins")
     (synopsis "Fixture configuration utils for py.test")
     (description
@@ -940,14 +1116,11 @@ testing framework.")
                           virtualenv-bin)))
                #t))))))
     (propagated-inputs
-     `(("python-pytest-shutil" ,python-pytest-shutil)
-       ("python-pytest-fixture-config" ,python-pytest-fixture-config)))
+     (list python-pytest-shutil python-pytest-fixture-config))
     (inputs
-     `(("python-virtualenv" ,python-virtualenv)))
+     (list python-virtualenv))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("python-setuptools-git" ,python-setuptools-git)))
+     (list python-mock python-pytest python-setuptools-git))
     (home-page "https://github.com/manahl/pytest-plugins")
     (synopsis "Virtualenv fixture for py.test")
     (description "This package provides a virtualenv fixture for the py.test
@@ -957,19 +1130,19 @@ framework.")
 (define-public python-pytest-pycodestyle
   (package
     (name "python-pytest-pycodestyle")
-    (version "2.0.0")               ;later versions require python-pytest~=5.4
+    (version "2.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pytest-pycodestyle" version))
        (sha256
         (base32
-         "02i5gl7pm9cwxk15sn29inz3n8flpj1r3p1l110h43f2na5w8h7z"))))
+         "1clyjypn93hwvz17f4i6n2688835d4y8qsq2aw17d6fkbqiy8mg7"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pycodestyle" ,python-pycodestyle)))
+     (list python-pycodestyle))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/henry0312/pytest-pycodestyle")
     (synopsis "Pytest plugin to run pycodestyle")
     (description "This package provides a plugin to run @code{pycodestyle}
@@ -989,10 +1162,9 @@ for the @code{pytest} framework.")
          "0a4mpb4j73dsyk47hd1prrjpfk4r458s102cn80rf253jg818hxd"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-py-cpuinfo" ,python-py-cpuinfo)))
+     (list python-py-cpuinfo))
     (native-inputs
-     `(("python-pathlib2" ,python-pathlib2)
-       ("python-pytest" ,python-pytest)))
+     (list python-pathlib2 python-pytest))
     (home-page "https://github.com/ionelmc/pytest-benchmark")
     (synopsis "Pytest fixture for benchmarking code")
     (description
@@ -1024,12 +1196,9 @@ rounds that are calibrated to the chosen timer.")
              (delete-file "tests/test_xvfb_windows.py")
              #t)))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)
-       ("xorg-server" ,xorg-server-for-tests)))
+     (list python-pytest python-pytest-runner xorg-server-for-tests))
     (propagated-inputs
-     `(("python-pyvirtualdisplay"
-        ,python-pyvirtualdisplay)))
+     (list python-pyvirtualdisplay))
     (home-page "https://github.com/The-Compiler/pytest-xvfb")
     (synopsis "Pytest plugin to run Xvfb for tests")
     (description
@@ -1050,10 +1219,9 @@ rounds that are calibrated to the chosen timer.")
     (build-system python-build-system)
     (arguments '(#:tests? #f)) ; Tests not included in release tarball.
     (propagated-inputs
-     `(("python-psutil" ,python-psutil)
-       ("python-requests" ,python-requests)))
+     (list python-psutil python-requests))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/pytest-dev/pytest-services")
     (synopsis "Services plugin for pytest testing framework")
     (description
@@ -1080,23 +1248,15 @@ service processes for your tests with pytest.")
      '(#: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"))))))
+           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+             (when tests?
+               (substitute* "setup.cfg"
+                 ((".*timeout.*") ""))
+               ;; Make the installed plugin discoverable by Pytest.
+               (add-installed-pythonpath inputs outputs)
+               (invoke "pytest" "-vv")))))))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-docutils" ,python-docutils)
-       ("python-flake8" ,python-flake8)
-       ("python-isort" ,python-isort)
-       ("python-pydantic" ,python-pydantic)
-       ("python-pyflakes" ,python-pyflakes)
-       ("python-pygments" ,python-pygments)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-isort" ,python-pytest-isort)
-       ("python-pytest-mock" ,python-pytest-mock)
-       ("python-pytest-sugar" ,python-pytest-sugar)))
+     (list python-pydantic python-pytest python-pytest-isort))
     (home-page "https://github.com/samuelcolvin/pytest-toolbox")
     (synopsis "Numerous useful plugins for Pytest")
     (description
@@ -1117,9 +1277,9 @@ new fixtures, new methods and new comparison objects.")
          "0kx4mbs9bflycd8x9af0idcjhdgnzri3nw1qb0vpfyb3751qaaf9"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (propagated-inputs
-     `(("python-aiohttp" ,python-aiohttp)))
+     (list python-aiohttp))
     (home-page "https://github.com/aio-libs/pytest-aiohttp/")
     (synopsis "Pytest plugin for aiohttp support")
     (description "This package provides a pytest plugin for aiohttp support.")
@@ -1155,14 +1315,10 @@ new fixtures, new methods and new comparison objects.")
                      ;; https://github.com/computationalmodelling/nbval/pull/148.
                       " and not test_timeouts")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-sympy" ,python-sympy)))
+     (list python-pytest python-pytest-cov python-sympy))
     (propagated-inputs
-     `(("python-ipykernel" ,python-ipykernel)
-       ("python-jupyter-client" ,python-jupyter-client)
-       ("python-nbformat" ,python-nbformat)
-       ("python-six" ,python-six)))
+     (list python-ipykernel python-jupyter-client python-nbformat
+           python-six))
     (home-page "https://github.com/computationalmodelling/nbval")
     (synopsis "Pytest plugin to validate Jupyter notebooks")
     (description
@@ -1185,10 +1341,8 @@ also ensuring that the notebooks are running without errors.")
          "1hln7mwgdzfi5ma0kqfsi768l7p24jhkw8l0imhifwy08nh7hmjd"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-flask" ,python-flask)
-       ("python-pytest" ,python-pytest)
-       ("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-werkzeug" ,python-werkzeug)))
+     (list python-flask python-pytest python-setuptools-scm
+           python-werkzeug))
     (home-page "https://github.com/pytest-dev/pytest-flask")
     (synopsis "Pytest fixtures to test Flask applications")
     (description
@@ -1198,14 +1352,14 @@ also ensuring that the notebooks are running without errors.")
 (define-public python-pytest-console-scripts
   (package
     (name "python-pytest-console-scripts")
-    (version "1.2.0")
+    (version "1.2.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pytest-console-scripts" version))
        (sha256
         (base32
-         "073l2cz11013dl30zjr575ms78j9b2bsbdl1w0gmig37spbkh8aa"))))
+         "1qsw3i2h3psyi5avwf14panx8wxqfik2z7294dy37w8ha415iwn7"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -1218,10 +1372,9 @@ also ensuring that the notebooks are running without errors.")
                        ;; This one test fails because of PATH assumptions
                        "-k" "not test_elsewhere_in_the_path")))))))
     (propagated-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)))
+     (list python-mock python-pytest))
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-setuptools-scm))
     (home-page "https://github.com/kvas-it/pytest-console-scripts")
     (synopsis "Pytest plugin for testing console scripts")
     (description
@@ -1250,8 +1403,7 @@ also ensuring that the notebooks are running without errors.")
                (add-installed-pythonpath inputs outputs)
                (invoke "pytest" "--verbose")))))))
     (propagated-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-tornado" ,python-tornado)))
+     (list python-pytest python-tornado))
     (home-page "https://github.com/eukaryote/pytest-tornasync")
     (synopsis "Pytest plugin for testing Tornado code")
     (description
@@ -1260,6 +1412,28 @@ fixtures for testing Tornado (version 5.0 or newer) apps and easy handling of
 plain (undecoratored) native coroutine tests.")
     (license license:expat)))
 
+(define-public python-pytest-celery
+  (package
+    (name "python-pytest-celery")
+    (version "0.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pytest-celery" version))
+       (sha256
+        (base32 "01pli108qqiiyrn8qsqqabcpazrzj27r7cji9wgglsk76by61l6g"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:tests? #f ; no tests and circular dependency on python-celery
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'sanity-check)))) ; checks for celery
+    (home-page "https://github.com/graingert/pytest-celery")
+    (synopsis "Shim pytest plugin to enable @code{celery.contrib.pytest}")
+    (description
+     "This package provides a shim Pytest plugin to enable a Celery marker.")
+    (license license:bsd-3)))
+
 (define-public python-pytest-env
   (package
     (name "python-pytest-env")
@@ -1272,7 +1446,7 @@ plain (undecoratored) native coroutine tests.")
         (base32 "1hl0ln0cicdid4qjk7mv90lw9xkb0v71dlj7q7rn89vzxxm9b53y"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/MobileDynasty/pytest-env")
     (synopsis "Pytest plugin that allows you to add environment variables")
     (description
@@ -1320,11 +1494,9 @@ libraries.")
              (setenv "QT_QPA_PLATFORM" "offscreen")
              #t)))))
     (propagated-inputs
-     `(("python-pyqt" ,python-pyqt)))
+     (list python-pyqt))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)
-       ("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-pytest python-pytest-runner python-setuptools-scm))
     (home-page "https://github.com/pytest-dev/pytest-qt")
     (synopsis "Pytest support for PyQt and PySide applications")
     (description
@@ -1351,7 +1523,7 @@ interaction, like key presses and mouse clicks.")
     (arguments
      `(#:tests? #f)); no tests
     (propagated-inputs
-     `(("python-check-manifest" ,python-check-manifest)))
+     (list python-check-manifest python-requests))
     (home-page "https://github.com/codacy/python-codacy-coverage")
     (synopsis "Codacy coverage reporter for Python")
     (description "This package analyses Python test suites and reports how much
@@ -1374,9 +1546,9 @@ analysing code quality.")
     (arguments
      `(#:tests? #f)); no tests
     (propagated-inputs
-     `(("python-requests" ,python-requests)))
+     (list python-requests))
     (home-page "https://github.com/patrys/httmock")
-    (synopsis "Mocking library for requests.")
+    (synopsis "Mocking library for requests")
     (description "This package provides a library for replying fake data to
 Python software under test, when they make an HTTP query.")
     (license license:asl2.0)))
@@ -1404,7 +1576,7 @@ Python software under test, when they make an HTTP query.")
            (lambda _
              (invoke "python" "-m" "nose2" "-v"))))))
     (native-inputs
-     `(("python-nose2" ,python-nose2)))
+     (list python-nose2))
     (home-page "https://public.readthedocs.io/")
     (synopsis "@code{@@public} decorator for populating @code{__all__}")
     (description
@@ -1415,6 +1587,37 @@ the implementation of that name.")
     (license (list license:asl2.0
                    license:lgpl3))))    ; only for setup_helpers.py
 
+(define-public python-mockito
+  (package
+    (name "python-mockito")
+    (version "1.2.2")
+    (source
+     (origin
+       (method git-fetch)               ;no tests in pypi archive
+       (uri (git-reference
+             (url "https://github.com/kaste/mockito-python")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0fg8jflcf4c929gd4zbcrk73d08waaqjfjmdjrgnv54mzl35pjxl"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "pytest")))))))
+    (native-inputs
+     (list python-numpy python-pytest))
+    (home-page "https://github.com/kaste/mockito-python")
+    (synopsis "Mocking library for Python")
+    (description "This package provides a Python implementation of the Java
+library of the same name.  It eases monkey patching, for example to stub out
+side effects when unit testing.")
+    (license license:expat)))
+
 (define-public python-mypy-extensions
   (package
     (name "python-mypy-extensions")
@@ -1438,7 +1641,7 @@ supported by the MyPy typechecker.")
 (define-public python-mypy
   (package
     (name "python-mypy")
-    (version "0.910")
+    (version "0.931")
     (source
      (origin
        ;; Because of https://github.com/python/mypy/issues/9584, the
@@ -1455,7 +1658,7 @@ supported by the MyPy typechecker.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "16ryn9d48ilcs3yrkrm9ynx36qnv0gkdkc4sbafpagcqgr2f0mrg"))))
+         "1v83flrdxh8grcp40qw04q4hzjflih9xwib64078vsxv2w36f817"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -1465,23 +1668,15 @@ supported by the MyPy typechecker.")
              (when tests?
                (invoke "pytest" "mypyc")))))))
     (native-inputs
-     `(("python-attrs" ,python-attrs)
-       ("python-flake8" ,python-flake8)
-       ("python-flake8-bugbear" ,python-flake8-bugbear)
-       ("python-flake8-pyi" ,python-flake8-pyi)
-       ("python-importlib-metadata" ,python-importlib-metadata)
-       ("python-lxml" ,python-lxml)
-       ("python-psutil" ,python-psutil)
-       ("python-pytest" ,python-pytest-6)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-forked" ,python-pytest-forked)
-       ("python-pytest-xdist" ,python-pytest-xdist)
-       ("python-virtualenv" ,python-virtualenv)))
+     (list python-attrs
+           python-lxml
+           python-psutil
+           python-pytest
+           python-pytest-forked
+           python-pytest-xdist
+           python-virtualenv))
     (propagated-inputs
-     `(("python-mypy-extensions" ,python-mypy-extensions)
-       ("python-toml" ,python-toml)
-       ("python-typing-extensions" ,python-typing-extensions)
-       ("python-typed-ast" ,python-typed-ast)))
+     (list python-mypy-extensions python-tomli python-typing-extensions))
     (home-page "http://www.mypy-lang.org/")
     (synopsis "Static type checker for Python")
     (description "Mypy is an optional static type checker for Python that aims
@@ -1494,6 +1689,59 @@ any Python VM with basically no runtime overhead.")
     ;; mypyc/lib-rt/getargs.c
     (license (list license:expat license:psfl))))
 
+;;; This variant exists to break a cycle between python-pylama and python-isort.
+(define-public python-mypy-minimal
+  (hidden-package
+   (package
+     (inherit python-mypy)
+     (name "python-mypy-minimal")
+     (arguments
+      `(#:tests? #f
+        #:phases (modify-phases %standard-phases
+                   ;; XXX: Fails with: "In procedure utime: No such file or
+                   ;; directory".
+                   (delete 'ensure-no-mtimes-pre-1980))))
+     (native-inputs '()))))
+
+(define-public python-pylama
+  (package
+    (name "python-pylama")
+    (version "7.7.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pylama" version))
+       (sha256
+        (base32
+         "13vx7daqz2918y9s8q3v2i3xaq3ah43a9p58srqi6hqskkpm7blv"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'disable-failing-tests
+                    (lambda _
+                      ;; Fails with: "ImportError: cannot import name
+                      ;; 'commented_out_code_line_numbers' from 'eradicate'".
+                      (delete-file "pylama/lint/pylama_eradicate.py")
+                      ;; Requires python-astroid, which fails to build on
+                      ;; Python 3.9+ (see:
+                      ;; https://github.com/PyCQA/astroid/issues/881).
+                      (delete-file "pylama/lint/pylama_pylint.py"))))))
+    (native-inputs
+     (list python-py python-pytest python-radon))
+    (propagated-inputs
+     `(("python-mccabe" ,python-mccabe)
+       ("python-mypy", python-mypy-minimal)
+       ("python-pycodestyle" ,python-pycodestyle)
+       ("python-pydocstyle" ,python-pydocstyle)
+       ("python-pyflakes" ,python-pyflakes)))
+    (home-page "https://github.com/klen/pylama")
+    (synopsis "Code audit tool for python")
+    (description "Pylama is a code audit tool for Python and JavaScript to check
+for style, syntax and other code health metrics.  It is essentially a
+convenient wrapper above tools such as Pyflakes, pydocstyle, pycodestyle and
+McCabe, among others.")
+    (license license:lgpl3+)))
+
 (define-public python-pyannotate
   (package
     (name "python-pyannotate")
@@ -1507,8 +1755,7 @@ any Python VM with basically no runtime overhead.")
          "16bm0mf7wxvy0lgmcs1p8n1ji8pnvj1jvj8zk3am70dkp825iv84"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-mypy-extensions" ,python-mypy-extensions)
-       ("python-six" ,python-six)))
+     (list python-mypy-extensions python-six))
     (home-page
      "https://github.com/dropbox/pyannotate")
     (synopsis "Auto-generate PEP-484 annotations")
@@ -1551,8 +1798,7 @@ valid Python syntax that are likely to be commented out code.")
     ;; Reported upstream: <https://github.com/vesln/robber.py/issues/20>.
     (arguments '(#:tests? #f))
     (propagated-inputs
-     `(("python-mock" ,python-mock)
-       ("python-termcolor" ,python-termcolor)))
+     (list python-mock python-termcolor))
     ;; URL of the fork used to generate the package available on PyPI.
     (home-page "https://github.com/EastAgile/robber.py")
     (synopsis "Test-driven development (TDD) assertion library for Python")
@@ -1575,15 +1821,15 @@ behavior-driven development (TDD and BDD).")
     (arguments
      `(#:tests? #f))                    ;to avoid circular dependencies
     (native-inputs
-     `(("python-pbr" ,python-pbr)))
+     (list python-pbr))
     (propagated-inputs
-     `(("python-cliff" ,python-cliff)
-       ("python-fixtures" ,python-fixtures)
-       ("python-future" ,python-future)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-subunit" ,python-subunit)
-       ("python-testtools" ,python-testtools)
-       ("python-voluptuous" ,python-voluptuous)))
+     (list python-cliff
+           python-fixtures
+           python-future
+           python-pyyaml
+           python-subunit
+           python-testtools
+           python-voluptuous))
     (home-page "https://stestr.readthedocs.io/en/latest/")
     (synopsis "Parallel Python test runner")
     (description "This package provides the @command{stestr} command, a
@@ -1609,11 +1855,8 @@ help in debugging failures and optimizing the scheduler to improve speed.")
      ;; Tests depend on python-sanic.
      `(#:tests? #f))
     (propagated-inputs
-      `(("python-httpx" ,python-httpx)
-        ("python-async-generator"
-         ,python-async-generator)
-        ("python-pytest" ,python-pytest)
-        ("python-websockets" ,python-websockets)))
+      (list python-httpx python-async-generator python-pytest
+            python-websockets))
     (home-page
       "https://github.com/yunstanford/pytest-sanic")
     (synopsis "Pytest plugin for Sanic")
@@ -1633,8 +1876,7 @@ code asynchronously.")
         (base32 "1c987h13dly9919d15w3h747rgn50ilnv7dginhlprxbj564hn4k"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-pytest python-pytest-runner))
     (home-page "https://github.com/thombashi/allpairspy")
     (synopsis "Pairwise test combinations generator")
     (description
@@ -1659,8 +1901,7 @@ most situations.")
         (base32 "01v98b6n3yvkfmxf2v38xk5ijqlk6ika0yljwkhl5bh6qhq23498"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-psutil" ,python-psutil)))
+     (list python-pytest python-psutil))
     (arguments
      ;; tests require setuptools-markdown, which is deprecated and not in guix
      '(#:tests? #f
@@ -1680,3 +1921,86 @@ or use cases.  Design is based on supporting slow, io-bound testing with often
 tedious system under test configuration that can benefit from running several
 tests at one time.")
     (license license:expat)))
+
+(define-public python-aioresponses
+  (package
+    (name "python-aioresponses")
+    (version "0.7.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "aioresponses" version))
+       (sha256
+        (base32 "16p8mdyfirddrsay62ji7rwcrqmmzxzf2isdbfm9cj5p338rbr42"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke
+                "pytest" "-vv" "tests" "-k"
+                (string-append
+                 ;; These tests require network access.
+                 "not test_address_as_instance_of_url_combined_with_pass_through "
+                 "and not test_pass_through_with_origin_params"))))))))
+    (native-inputs
+     (list python-pbr python-ddt python-pytest))
+    (propagated-inputs
+     (list python-aiohttp))
+    (home-page "https://github.com/pnuckowski/aioresponses")
+    (synopsis "Mock out requests made by ClientSession from aiohttp package")
+    (description
+     "Aioresponses is a helper to mock/fake web requests in python aiohttp
+package.  For requests module there are a lot of packages that help us with
+testing (eg. httpretty, responses, requests-mock).  When it comes to testing
+asynchronous HTTP requests it is a bit harder (at least at the beginning).
+The purpose of this package is to provide an easy way to test asynchronous
+HTTP requests.")
+    (license license:expat)))
+
+(define-public python-pytest-rerunfailures
+  (package
+    (name "python-pytest-rerunfailures")
+    (version "10.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pytest-rerunfailures" version))
+       (sha256
+        (base32 "15v68kggjvkflbqr0vz8gp5yp3pcsk0rz05bpg2l4xp0a6nin7ly"))))
+    (build-system python-build-system)
+    (propagated-inputs (list python-pytest python-setuptools))
+    (home-page "https://github.com/pytest-dev/pytest-rerunfailures")
+    (synopsis "Pytest plugin to re-run flaky tests")
+    (description "This package provides a pytest plugin to re-run tests to
+eliminate flaky failures.")
+    (license license:mpl2.0)))
+
+(define-public python-xunitparser
+  (package
+    (name "python-xunitparser")
+    (version "1.3.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "xunitparser" version))
+       (sha256
+        (base32 "05amn9yik0mxg89iiprkb6lrmc7rlccgvwajrpyfi6zbp8mjdsgn"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         ;; See https://github.com/laurentb/xunitparser/pull/11
+         (add-after 'unpack 'fix-test-suite
+           (lambda _
+             (substitute* "xunitparser.py"
+               (("(^ +)self.stderr = None" m indent)
+                (string-append m "\n" indent "self._cleanup = False\n"))))))))
+    (home-page "http://git.p.engu.in/laurentb/xunitparser/")
+    (synopsis "Read JUnit/XUnit XML files and map them to Python objects")
+    (description "xunitparser reads a JUnit/XUnit XML file and maps it to
+Python objects.  It tries to use the objects available in the standard
+@code{unittest} module.")
+    (license license:expat)))
diff --git a/gnu/packages/python-compression.scm b/gnu/packages/python-compression.scm
index 30062f43c5..e7f008e112 100644
--- a/gnu/packages/python-compression.scm
+++ b/gnu/packages/python-compression.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2017, 2019 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2017, 2019, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017 Nikita <nikita@n0.is>
 ;;; Copyright © 2017 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
@@ -28,6 +28,7 @@
   #:use-module (guix utils)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix gexp)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system python)
   #:use-module (gnu packages)
@@ -56,14 +57,14 @@
          "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)))
+     (list python-pep517
+           python-setuptools
+           python-setuptools-scm
+           python-coverage
+           python-coveralls
+           python-pyannotate
+           python-pytest
+           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
@@ -84,20 +85,45 @@ were a single file.")
          "1jcczrb8zgg6w7v76w1wpz3nw75fghk3xwxkn09ll7kck7sdf68d"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-cffi" ,python-cffi)
-       ("python-toml" ,python-toml)
-       ("python-setuptools-scm" ,python-setuptools-scm/next)))
+     (list python-cffi python-toml python-setuptools-scm))
     (native-inputs
-     `(("python-setuptools" ,python-setuptools)
-       ("python-coverage" ,python-coverage)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)))
+     (list python-setuptools python-coverage python-pytest
+           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-isal
+  (package
+    (name "python-isal")
+    (version "0.11.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "isal" version))
+       (sha256
+        (base32 "1bxj7r24p974pqfgym485s90ydhzji9q7zyfg3sf8fycm9ya01wd"))
+       ;; Remove bundles isa-l source code
+       (modules '((guix build utils)))
+       (snippet
+        '(delete-file-recursively "src/isal/isa-l"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'use-dynamic-linking
+           (lambda _ (setenv "PYTHON_ISAL_LINK_DYNAMIC" "1"))))))
+    (inputs (list isa-l))
+    (native-inputs (list python-cython))
+    (home-page "https://github.com/pycompression/python-isal")
+    (synopsis "Python bindings for the ISA-L compression library")
+    (description
+     "This package aims to provide faster zlib and gzip compatible compression
+and decompression by implementing Python bindings for the ISA-L library.")
+    (license license:expat)))
+
 (define-public python-ppmd-cffi
   (package
     (name "python-ppmd-cffi")
@@ -111,14 +137,14 @@ Jump conversion filter by CFFI for Python.")
          "01wcd9l6pp6hivdmd275qh9dhcwficjqfl67hxix5n07vvq7jzz0"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-cffi" ,python-cffi)))
+     (list 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)))
+     (list python-setuptools
+           python-setuptools-scm
+           python-pep517
+           python-coverage
+           python-pytest
+           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
@@ -139,26 +165,26 @@ several possible methods.")
          "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)))
+     (list python-bcj-cffi
+           python-multivolumefile
+           python-ppmd-cffi
+           python-pycryptodome
+           python-pyzstd
+           python-texttable
+           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)))
+     (list python-setuptools
+           python-setuptools-scm
+           python-coverage
+           python-coveralls
+           python-libarchive-c
+           python-py-cpuinfo
+           python-pyannotate
+           python-pytest
+           python-pytest-benchmark
+           python-pytest-cov
+           python-pytest-remotedata
+           python-pytest-timeout))
     (home-page "https://github.com/miurahr/py7zr")
     (synopsis "7-zip in Python")
     (description "This package provides py7zr, which implements 7-zip
@@ -192,7 +218,7 @@ Python.")
                                "')")))
              #t)))))
     (inputs
-     `(("lzo" ,lzo)))
+     (list lzo))
     (home-page "https://github.com/jd-boyd/python-lzo")
     (synopsis "Python bindings for the LZO data compression library")
     (description
@@ -223,11 +249,9 @@ Python strings.")
            #t))))
     (build-system python-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python-nose" ,python-nose)
-       ("python-setuptools-scm" ,python-setuptools-scm)))
+     (list pkg-config python-nose python-setuptools-scm))
     (inputs
-     `(("lz4" ,lz4)))
+     (list lz4))
     (home-page "https://github.com/python-lz4/python-lz4")
     (synopsis "LZ4 bindings for Python")
     (description
@@ -252,7 +276,7 @@ the LZ4 frame format.")
          "18ly9pppy2yspxzw7k1b23wk77k7m44rz2g0271bqgqrk3jn3yhs"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-future" ,python-future)))
+     (list python-future))
     (home-page "https://github.com/gkovacs/lz-string-python")
     (synopsis "String compression")
     (description "Lz-string is a string compressor library for Python.")
@@ -261,26 +285,6 @@ the LZ4 frame format.")
 (define-public python2-lzstring
   (package-with-python2 python-lzstring))
 
-(define-public python-brotli
-  (package
-    (name "python-brotli")
-    (version "1.0.9")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (pypi-uri "Brotli" version ".zip"))
-        (sha256
-         (base32
-          "0f4433s4wv9masc303kkb1s0a09x81xwr8pdvj0kyxzdl05826sd"))))
-    (build-system python-build-system)
-    (native-inputs
-     `(("unzip" ,unzip)))
-    (home-page "https://github.com/google/brotli")
-    (synopsis "Python bindings for the Brotli compression library")
-    (description
-     "This package provides python bindings for the Brotli compression library.")
-    (license license:asl2.0)))
-
 (define-public bitshuffle
   (package
     (name "bitshuffle")
@@ -379,9 +383,9 @@ install: libbitshuffle.so
          "0v3qayhqv7vyzydpydwcp51bqciw8p2ajddw68x5k8zppc0vx3yk"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-more-itertools" ,python-more-itertools)))
+     (list python-more-itertools))
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-setuptools-scm))
     (home-page "https://github.com/jaraco/zipp")
     (synopsis
      "Backport of pathlib-compatible object wrapper for zip files")
@@ -413,6 +417,38 @@ wrapper.  It provides a backport of the @code{Path} object.")
     (native-inputs
      `(("python-setuptools-scm" ,python2-setuptools-scm))))))
 
+(define-public python-zopfli
+  (package
+    (name "python-zopfli")
+    (version "0.1.9")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "zopfli" version ".zip"))
+       (sha256
+        (base32 "0yqdwvlpbvhhri0qmzag076ddi0sv43qjlk17l0siylfib03rpkq"))))
+    (build-system python-build-system)
+    (arguments
+     (list
+      #:phases #~(modify-phases %standard-phases
+                   (add-after 'unpack 'use-system-zopfli
+                     (lambda _
+                       (setenv "USE_SYSTEM_ZOPFLI" "1")))
+                   (add-before 'build 'set-version
+                     (lambda _
+                       (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version)))
+                   (replace 'check
+                     (lambda* (#:key tests? #:allow-other-keys)
+                       (when tests?
+                         (invoke "python" "tests/tests.py" "-v")))))))
+    (native-inputs (list unzip python-setuptools-scm))
+    (inputs (list zopfli))
+    (home-page "https://github.com/fonttools/py-zopfli")
+    (synopsis "Python bindings for Zopfli")
+    (description "@code{pyzopfli} is a straight forward wrapper around the
+@code{ZlibCompress} method of the the @code{zopfli} library.")
+    (license license:asl2.0)))
+
 (define-public python-zstandard
   (package
     (name "python-zstandard")
@@ -425,7 +461,7 @@ wrapper.  It provides a backport of the @code{Path} object.")
         (base32 "0by9z7nxnkzhmza075q6q91rs8lnpf91129k8ppv7kymbwshipjj"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-hypothesis" ,python-hypothesis)))
+     (list python-hypothesis))
     (home-page "https://github.com/indygreg/python-zstandard")
     (synopsis "Zstandard bindings for Python")
     (description "This project provides Python bindings for interfacing with
diff --git a/gnu/packages/python-crypto.scm b/gnu/packages/python-crypto.scm
index 1cddc56f1b..e49ccdf1f2 100644
--- a/gnu/packages/python-crypto.scm
+++ b/gnu/packages/python-crypto.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2015 Eric Dvorsak <eric@dvorsak.fr>
 ;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2015, 2016, 2017, 2019 Leo Famulari <leo@famulari.name>
-;;; Copyright © 2016, 2017, 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2016, 2017, 2020, 2022 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2017 Ben Sturmfels <ben@sturm.com.au>
 ;;; Copyright © 2016 Sou Bunnbu <iyzsong@gmail.com>
 ;;; Copyright © 2015 Cyril Roelandt <tipecaml@gmail.com>
@@ -47,9 +47,11 @@
   #:use-module (guix download)
   #:use-module (guix gexp)
   #:use-module (guix git-download)
+  #:use-module (guix build-system cargo)
   #:use-module (guix build-system python)
   #:use-module (gnu packages)
   #:use-module (gnu packages check)
+  #:use-module (gnu packages crates-io)
   #:use-module (gnu packages crypto)
   #:use-module (gnu packages kerberos)
   #:use-module (gnu packages libffi)
@@ -62,6 +64,7 @@
   #:use-module (gnu packages python-compression)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
+  #:use-module (gnu packages rust)
   #:use-module (gnu packages swig)
   #:use-module (gnu packages time)
   #:use-module (gnu packages tls)
@@ -86,7 +89,7 @@
         (base32 "1hzw6h01fm216nmipyylgz0zybd80w1xsk12m7djycnhqrnrvvv1"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pycrypto" ,python-pycrypto)))
+     (list python-pycrypto))
     (synopsis "Python OTR Implementation")
     (description "Python OTR is an Off-The-Record Protocol Implementation in
 Python.  It does not bind to libotr.")
@@ -96,17 +99,22 @@ Python.  It does not bind to libotr.")
 (define-public python-base58
   (package
     (name "python-base58")
-    (version "2.0.1")
+    (version "2.1.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "base58" version))
        (sha256
         (base32
-         "0yfaqp76kbdb62hikr5n4jkkfjfmii89grwfy6sw3fmsv5hrap1n"))))
+         "1317ly0db7nnjg5k58f6nqa0svfcvn446xd5bpiyi0bfbczwpl65"))))
     (build-system python-build-system)
+    (arguments
+     '(#:phases (modify-phases %standard-phases
+                  (replace 'check
+                    (lambda* (#:key tests? #:allow-other-keys)
+                      (when tests? (invoke "pytest" "-vv")))))))
     (native-inputs
-     `(("python-pyhamcrest" ,python-pyhamcrest)))
+     (list python-pyhamcrest python-pytest python-pytest-benchmark))
     (home-page "https://github.com/keis/base58")
     (synopsis "Base58 and Base58Check implementation")
     (description "Base58 and Base58Check implementation compatible
@@ -125,11 +133,9 @@ with what is used by the Bitcoin network.")
         (base32 "0agvzdn7r7jx5y4scl5gjmrmr6njvizwmr9n7h1kmaahdrrc34sv"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pycparser" ,python-pycparser)
-       ("python-pytest" ,python-pytest)))
+     (list python-pycparser python-pytest))
     (propagated-inputs
-     `(("python-cffi" ,python-cffi)
-       ("python-six" ,python-six)))
+     (list python-cffi python-six))
     (home-page "https://github.com/pyca/bcrypt/")
     (synopsis
      "Modern password hashing library")
@@ -152,9 +158,9 @@ Password Scheme\"} by Niels Provos and David Mazieres.")
         (base32 "015y5qaw9qnxr29lg60dml1g5rbqd4586wy5n8m41ib55gvm1zfy"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (propagated-inputs
-     `(("python-bcrypt" ,python-bcrypt)))
+     (list python-bcrypt))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -212,10 +218,7 @@ This package provides a Python interface for BLAKE2.")
      `(;; FIXME: Tests require many unpackaged libraries, see dev-requirements.txt.
        #:tests? #f))
     (propagated-inputs
-     `(("python-bcrypt" ,python-bcrypt)
-       ("python-pyasn1" ,python-pyasn1)
-       ("python-pynacl" ,python-pynacl)
-       ("python-cryptography" ,python-cryptography)))
+     (list python-bcrypt python-pyasn1 python-pynacl python-cryptography))
     (home-page "https://www.paramiko.org/")
     (synopsis "SSHv2 protocol library")
     (description "Paramiko is a python implementation of the SSHv2 protocol,
@@ -227,24 +230,27 @@ Python interface around SSH networking concepts.")
 (define-public python-ecdsa
   (package
     (name "python-ecdsa")
-    (version "0.14.1")
+    (version "0.17.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "ecdsa" version))
        (sha256
-        (base32 "13nx5cbfxc0gnax5zwdmp9xc40qd1llk62mv85jyrvqkbw017ik4"))))
+        (base32 "1ak8xa2r660d85abrlffp0bqvwdadg9ga4066g856hcy8fxh1xdr"))))
     (build-system python-build-system)
     (arguments
      '(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda _ (invoke "pytest"))))))
+           (lambda _ (invoke
+                      "pytest"
+                      "-vv"
+                      "-k"
+                      "not test_multithreading_with_interrupts"))))))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (native-inputs
-     `(("openssl" ,openssl)
-       ("python-pytest" ,python-pytest)))
+     (list openssl python-pytest))
     (home-page "https://github.com/warner/python-ecdsa")
     (synopsis "ECDSA cryptographic signature library (pure python)")
     (description
@@ -278,8 +284,7 @@ making them easy to handle and incorporate into other protocols.")
         "0g0ayql5b9mkjam8hym6zyg6bv77lbh66rv1fyvgqb17kfc1xkpj"))))
     (build-system python-build-system)
     (inputs
-     `(("python" ,python)
-       ("gmp" ,gmp)))
+     (list python gmp))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -316,7 +321,7 @@ etc.).  The package is structured to make adding new modules easy.")
          "19663qxmma0i8bfbjc2iwy5hgq0g4pfb75r023v5dps68zfvffgh"))))
     (build-system python-build-system)
     (inputs
-     `(("mit-krb5" ,mit-krb5)))
+     (list mit-krb5))
     (home-page "https://github.com/apple/ccs-pykerberos")
     (synopsis
      "Python Kerberos library used by CalendarServer")
@@ -349,15 +354,15 @@ do what is needed for client/server Kerberos authentication based on
                (invoke "pytest"))
              #t)))))
     (native-inputs
-     `(("python-toml" ,python-toml)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-checkdocs" ,python-pytest-checkdocs)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-flake8" ,python-pytest-flake8)
-       ("python-setuptools" ,python-setuptools)
-       ("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-toml
+           python-pytest
+           python-pytest-checkdocs
+           python-pytest-cov
+           python-pytest-flake8
+           python-setuptools
+           python-setuptools-scm))
     (propagated-inputs
-     `(("python-secretstorage" ,python-secretstorage)))
+     (list python-secretstorage))
     (home-page "https://github.com/jaraco/keyring")
     (synopsis "Store and access your passwords safely")
     (description
@@ -385,11 +390,9 @@ password storage.")
       (arguments
        `(#:python ,python-2))
       (native-inputs
-       `(("python2-pytest" ,python2-pytest)
-         ("python2-pytest-runner" ,python2-pytest-runner)
-         ("python2-setuptools-scm" ,python2-setuptools-scm)))
+       (list python2-pytest python2-pytest-runner python2-setuptools-scm))
       (propagated-inputs
-       `(("python2-pycrypto" ,python2-pycrypto))))))
+       (list python2-pycrypto)))))
 
 (define-public python-keyrings.alt
   (package
@@ -418,9 +421,7 @@ password storage.")
             #t))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-keyring" ,python-keyring)
-       ("python-pytest" ,python-pytest)
-       ("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-keyring python-pytest python-setuptools-scm))
     (home-page "https://github.com/jaraco/keyrings.alt")
     (synopsis "Alternate keyring implementations")
     (description "Keyrings in this package may have security risks or other
@@ -443,10 +444,9 @@ risk.")
          "1yxqfb5131wahjyw9pxz03bq476rcfx62s6k53xx4cqbzzgdaqkq"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pyopenssl" ,python-pyopenssl)
-       ("python-tldextract" ,python-tldextract)))
+     (list python-pyopenssl python-tldextract))
     (native-inputs
-     `(("python-pytest-cov" ,python-pytest-cov)))
+     (list python-pytest-cov))
     (home-page "https://github.com/ikreymer/certauth")
     (synopsis "Certificate authority creation tool")
     (description "This package provides a small library, built on top of
@@ -513,19 +513,13 @@ is used by the Requests library to verify HTTPS requests.")
          "1ribd1vxq9wwz564mg60dzcy699gng54admihjjkgs9dx95pw5vy"))))
     (build-system python-build-system)
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (propagated-inputs
-     `(("python-asn1crypto" ,python-asn1crypto)
-       ("python-cffi" ,python-cffi)
-       ("python-six" ,python-six)
-       ("python-idna" ,python-idna)
-       ("python-iso8601" ,python-iso8601)))
+     (list python-asn1crypto python-cffi python-six python-idna
+           python-iso8601))
     (native-inputs
-     `(("python-cryptography-vectors" ,python-cryptography-vectors)
-       ("python-hypothesis" ,python-hypothesis)
-       ("python-pretend" ,python-pretend)
-       ("python-pytz" ,python-pytz)
-       ("python-pytest" ,python-pytest)))
+     (list python-cryptography-vectors python-hypothesis python-pretend
+           python-pytz python-pytest))
     (home-page "https://github.com/pyca/cryptography")
     (synopsis "Cryptographic recipes and primitives for Python")
     (description
@@ -542,6 +536,13 @@ message digests and key derivation functions.")
   (let ((crypto (package-with-python2
                  (strip-python2-variant python-cryptography))))
     (package/inherit crypto
+      (arguments
+       `(#:python ,python-2
+         #:phases
+         (modify-phases %standard-phases
+           ;; The sanity-check attempts attempts to import the non-existent
+           ;; modules "_openssl" and "_padding".
+           (delete 'sanity-check))))
       (propagated-inputs
        `(("python2-ipaddress" ,python2-ipaddress)
          ("python2-backport-ssl-match-hostname"
@@ -549,17 +550,140 @@ message digests and key derivation functions.")
          ("python2-enum34" ,python2-enum34)
          ,@(package-propagated-inputs crypto))))))
 
+;; TODO: Make this the default in the next staging cycle.
+(define-public python-cryptography-vectors-next
+  (package
+    (inherit python-cryptography-vectors)
+    (version "36.0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "cryptography_vectors" version))
+       (sha256
+        (base32
+         "166mvhhmgglqai1sjkkb76mpdkad2yykam11d2w44hs2snpr117w"))))))
+
+(define-public python-cryptography-next
+  (package
+    (inherit python-cryptography)
+    (version "36.0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "cryptography" version))
+       (sha256
+        (base32
+         "0f1n8bvngarhsssm60xc59xfzkh7yqpyyyypaph3v5bs7pfc3rak"))))
+    (build-system python-build-system)
+    (arguments
+     (list
+      #:imported-modules (append %cargo-build-system-modules
+                                 %python-build-system-modules)
+      #:modules `(((guix build cargo-build-system) #:prefix cargo:)
+                  ,@%python-build-system-modules
+                  (srfi srfi-1)
+                  (ice-9 match))
+      #:phases
+      #~(modify-phases (@ (guix build python-build-system) %standard-phases)
+          (add-after 'unpack 'loosen-ouroboros-version
+            (lambda _
+              (substitute* "src/rust/Cargo.toml"
+                (("ouroboros = \"0\\.13\"")
+                 "ouroboros = \"0.14\""))))
+          (add-before 'build 'configure-cargo
+            (lambda* (#:key inputs #:allow-other-keys)
+              ;; Hide irrelevant inputs from cargo-build-system so it does
+              ;; not try to unpack sanity-check.py, etc.
+              (let ((cargo-inputs (filter (match-lambda
+                                            ((name . path)
+                                             (or (string-prefix? "rust-" name)
+                                                 (string=? "gcc" name))))
+                                          inputs)))
+                (with-directory-excursion "src/rust"
+                  ((assoc-ref cargo:%standard-phases 'unpack-rust-crates)
+                   #:inputs cargo-inputs
+                   #:vendor-dir "guix-vendor")
+                  ((assoc-ref cargo:%standard-phases 'configure)
+                   #:inputs cargo-inputs)
+                  ((assoc-ref cargo:%standard-phases 'patch-cargo-checksums)
+                   #:vendor-dir "guix-vendor"))
+                (rename-file "src/rust/.cargo" ".cargo"))))
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (invoke "pytest" "-vv" "tests")))))))
+    (inputs
+     (list openssl
+           rust-aliasable-0.1
+           rust-asn1-0.8
+           rust-asn1-derive-0.8
+           rust-autocfg-1
+           rust-base64-0.13
+           rust-bitflags-1
+           rust-cfg-if-0.1
+           rust-cfg-if-1
+           rust-chrono-0.4
+           rust-cloudabi-0.1
+           rust-lazy-static-1
+           rust-libc-0.2
+           rust-indoc-0.3
+           rust-indoc-impl-0.3
+           rust-inflector-0.11
+           rust-instant-0.1
+           rust-lock-api-0.4
+           rust-num-integer-0.1
+           rust-num-traits-0.2
+           rust-once-cell-1
+           rust-ouroboros-0.14
+           rust-ouroboros-macro-0.14
+           rust-parking-lot-0.11
+           rust-parking-lot-core-0.8
+           rust-paste-0.1
+           rust-paste-impl-0.1
+           rust-pem-1
+           rust-proc-macro-error-1
+           rust-proc-macro-error-attr-1
+           rust-proc-macro-hack-0.5
+           rust-proc-macro2-1
+           rust-pyo3-0.15
+           rust-pyo3-build-config-0.15
+           rust-pyo3-macros-0.15
+           rust-pyo3-macros-backend-0.15
+           rust-quote-1
+           rust-redox-syscall-0.1
+           rust-scopeguard-1
+           rust-smallvec-1
+           rust-stable-deref-trait-1
+           rust-syn-1
+           rust-unicode-xid-0.2
+           rust-unindent-0.1
+           rust-version-check-0.9
+           rust-winapi-0.3))
+    (propagated-inputs
+     (list python-asn1crypto python-cffi python-six python-idna
+           python-iso8601))
+    (native-inputs
+     (list python-cryptography-vectors-next
+           python-hypothesis
+           python-pretend
+           python-pytz
+           python-pytest
+           python-pytest-subtests
+           python-setuptools-rust
+           rust `(,rust "cargo")))
+    (properties '())))
+
 (define-public python-pyopenssl
   (package
     (name "python-pyopenssl")
-    (version "20.0.0")
+    (version "20.0.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pyOpenSSL" version))
        (sha256
         (base32
-         "1i8ab5zn9i9iq2ksizp3rd42v157kacddzz88kviqw3kpp68xw4j"))))
+         "0labcbh2g0jhgisd79wx9kixmi6fip28096d1xb05fj3jmsiq8sc"))))
     (build-system python-build-system)
     (arguments
      '(#:phases
@@ -571,7 +695,7 @@ message digests and key derivation functions.")
              ;; PyOpenSSL runs tests against a certificate with a fixed
              ;; expiry time.  To ensure successful builds in the future,
              ;; set the time to roughly the release date.
-             (invoke "faketime" "2020-12-01" "py.test" "-v" "-k"
+             (invoke "faketime" "2021-05-01" "py.test" "-v" "-k"
                      (string-append
                       ;; This test tries to look up certificates from
                       ;; the compiled-in default path in OpenSSL, which
@@ -584,15 +708,11 @@ message digests and key derivation functions.")
                       ;; https://github.com/pyca/pyopenssl/issues/974
                       "and not test_verify_with_time")))))))
     (propagated-inputs
-     `(("python-cryptography" ,python-cryptography)
-       ("python-six" ,python-six)))
+     (list python-cryptography python-six))
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (native-inputs
-     `(("libfaketime" ,libfaketime)
-       ("python-flaky" ,python-flaky)
-       ("python-pretend" ,python-pretend)
-       ("python-pytest" ,python-pytest)))
+     (list libfaketime python-flaky python-pretend python-pytest))
     (home-page "https://github.com/pyca/pyopenssl")
     (synopsis "Python wrapper module around the OpenSSL library")
     (description
@@ -669,9 +789,7 @@ python-axolotl.")
                        '("axolotl/tests" "build/lib/axolotl/tests"))
              #t)))))
     (propagated-inputs
-     `(("python-axolotl-curve25519" ,python-axolotl-curve25519)
-       ("python-cryptography" ,python-cryptography)
-       ("python-protobuf" ,python-protobuf)))
+     (list python-axolotl-curve25519 python-cryptography python-protobuf))
     (home-page "https://github.com/tgalal/python-axolotl")
     (synopsis "Python port of libaxolotl-android")
     (description "This is a python port of libaxolotl-android.  This
@@ -771,38 +889,24 @@ PKCS#8, PKCS#12, PKCS#5, X.509 and TSP.")
            (substitute* "setup.py"
              (("\"wheel\"") ""))
            ;; Remove bundled libsodium.
-           (delete-file-recursively "src/libsodium")
-           #t))
+           (delete-file-recursively "src/libsodium")))
        (sha256
         (base32
          "01b56hxrbif3hx8l6rwz5kljrgvlbj7shmmd2rjh0hn7974a5sal"))))
     (build-system python-build-system)
     (arguments
-     `(#:modules (,@%python-build-system-modules
-                  (guix build utils)
-                  (ice-9 ftw)
-                  (srfi srfi-26))
-       #:phases
-       (modify-phases (@ (guix build python-build-system) %standard-phases)
+     `(#:phases
+       (modify-phases %standard-phases
          (add-before 'build 'use-system-sodium
            (lambda _
-             (setenv "SODIUM_INSTALL" "system")
-             #t))
+             (setenv "SODIUM_INSTALL" "system")))
          (replace 'check
            (lambda _
-             (let ((build-directory
-                    (car (scandir "build" (cut string-prefix? "lib" <>)))))
-               (setenv "PYTHONPATH"
-                       (string-append "./build/" build-directory ":"
-                                      (getenv "PYTHONPATH")))
-               (invoke "pytest" "-vv")))))))
+             (invoke "pytest" "-vv"))))))
     (native-inputs
-     `(("python-hypothesis" ,python-hypothesis)
-       ("python-pytest" ,python-pytest)))
+     (list python-hypothesis python-pytest))
     (propagated-inputs
-     `(("python-cffi" ,python-cffi)
-       ("python-six" ,python-six)
-       ("libsodium" ,libsodium)))
+     (list python-cffi python-six libsodium))
     (home-page "https://github.com/pyca/pynacl/")
     (synopsis "Python bindings to libsodium")
     (description
@@ -835,9 +939,7 @@ of improving usability, security and speed.")
              (delete-file "setup.cfg")
              (invoke "pytest"))))))
     (native-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-pillow" ,python-pillow)
-       ("python-pytest" ,python-pytest)))
+     (list python-numpy python-pillow python-pytest))
     (home-page "https://github.com/halcy/blurhash-python")
     (synopsis
      "Pure-Python implementation of the blurhash algorithm")
@@ -858,7 +960,7 @@ of improving usability, security and speed.")
             "1gc3i5s93zq6x1nkaxkq1dvmsc12vmrw0hns9f5s1hcb78ni52c8"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-future" ,python-future)))
+     (list python-future))
     (home-page "https://github.com/ubinity/ECPy")
     (synopsis "Pure Python Elliptic Curve Library")
     (description "This package provides a Elliptic Curve Library in pure
@@ -883,9 +985,7 @@ Python.")
      ;; The tests require flake8 >= 3.5, which is not yet packaged.
      '(#:tests? #f))
     (propagated-inputs
-     `(("python-cryptography" ,python-cryptography)
-       ("python-pyopenssl" ,python-pyopenssl)
-       ("python-six" ,python-six)))
+     (list python-cryptography python-pyopenssl python-six))
 ;; TODO Enable when we have flake8 >= 3.5.
 ;    (native-inputs
 ;     `(("python-coverage" ,python-coverage)
@@ -924,20 +1024,19 @@ protocol (Javascript Object Signing and Encryption).")
 (define-public python-pycryptodome
   (package
     (name "python-pycryptodome")
-    (version "3.9.9")
+    (version "3.11.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pycryptodome" version))
        (sha256
         (base32
-         "1i4m74f88qj9ci8rpyzrbk2slmsdj5ipmwdkq6qk24byalm203li"))
+         "1l3a80z3lxcj1q0hzj1d3plavy2d51y4vzcd85zj0zm7yyxrd022"))
        (modules '((guix build utils)))
        (snippet pycryptodome-unbundle-tomcrypt-snippet)))
     (build-system python-build-system)
     (inputs
-     `(("libtomcrypt" ,libtomcrypt)
-       ("libtommath" ,libtommath)))
+     (list libtomcrypt libtommath))
     (home-page "https://www.pycryptodome.org")
     (synopsis "Low-level cryptographic Python library")
     (description
@@ -990,7 +1089,7 @@ PyCryptodome variants, the other being python-pycryptodomex.")
        (method url-fetch)
        (uri (pypi-uri "pycryptodomex" version))
        (sha256
-        (base32 "0lbx4qk3xmwqiidhmkj8qa7bh2lf8bwzg0xjpsh2w5zqjrc7qnvv"))
+        (base32 "0vcd65ylri2a4pdqcc1897jasj7wfmqklj8x3pdynmdvark3d603"))
        (modules '((guix build utils)))
        (snippet pycryptodome-unbundle-tomcrypt-snippet)))
     (description
@@ -1044,8 +1143,8 @@ provides drop-in compatibility with PyCrypto.")))
      `(;; FIXME: Tests start failing with time due to date checks in TLS
        ;; certificates.
        #:tests? #f))
-    (inputs `(("openssl" ,openssl)))
-    (native-inputs `(("swig" ,swig)))
+    (inputs (list openssl))
+    (native-inputs (list swig))
     (home-page "https://gitlab.com/m2crypto/m2crypto")
     (synopsis "Python crypto and TLS toolkit")
     (description "@code{M2Crypto} is a complete Python wrapper for OpenSSL
@@ -1097,12 +1196,12 @@ through the Engine interface.")
                (("==") ">="))
              #t)))))
     (propagated-inputs
-     `(("python-argon2-cffi" ,python-argon2-cffi)
-       ("python-construct" ,python-construct)
-       ("python-dateutil" ,python-dateutil)
-       ("python-future" ,python-future)
-       ("python-lxml" ,python-lxml)
-       ("python-pycryptodomex" ,python-pycryptodomex)))
+     (list python-argon2-cffi
+           python-construct
+           python-dateutil
+           python-future
+           python-lxml
+           python-pycryptodomex))
     (home-page "https://github.com/libkeepass/pykeepass")
     (synopsis "Python library to interact with keepass databases")
     (description
@@ -1142,7 +1241,7 @@ supports KDBX3 and KDBX4.")
     ;; requires "hashlib.scrypt", provided by Python 3.6+ built with OpenSSL
     ;; 1.1+.  Use that as soon as Guix provides it.
     (inputs
-     `(("libscrypt" ,libscrypt)))
+     (list libscrypt))
     (home-page "https://github.com/jvarho/pylibscrypt")
     (synopsis "Scrypt for Python")
     (description "There are a lot of different scrypt modules for Python, but
@@ -1169,13 +1268,11 @@ none of them have everything that I'd like, so here's one more.  It uses
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "libnacl/__init__.py"
                (("/usr/local/lib/libsodium.so")
-                (string-append (assoc-ref inputs "libsodium")
-                               "/lib/libsodium.so")))
-             #t)))))
+                (search-input-file inputs "/lib/libsodium.so"))))))))
     (native-inputs
-     `(("python-pyhamcrest" ,python-pyhamcrest)))
+     (list python-pyhamcrest))
     (inputs
-     `(("libsodium" ,libsodium)))
+     (list libsodium))
     (home-page "https://libnacl.readthedocs.org/")
     (synopsis "Python bindings for libsodium based on ctypes")
     (description "@code{libnacl} is used to gain direct access to the
@@ -1217,7 +1314,7 @@ require users to log in.")
          "0hjk71k3mgnl8siikm9lii9im8kv0rb7inkjzx78rnancra48xxr"))))
     (build-system python-build-system)
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (home-page "https://bitbucket.org/mhallin/py-scrypt")
     (synopsis "Bindings for the scrypt key derivation function library")
     (description "This is a set of Python bindings for the scrypt key
@@ -1237,10 +1334,8 @@ derivation function.")
          "0b9f5qiqjy8ralzgwjgkhx82h6h8sa7532psmb8mkd65md5aan08"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-attrs" ,python-attrs)
-       ("python-pyasn1" ,python-pyasn1)
-       ("python-pyasn1-modules" ,python-pyasn1-modules)
-       ("python-pyopenssl" ,python-pyopenssl)))
+     (list python-attrs python-pyasn1 python-pyasn1-modules
+           python-pyopenssl))
     (home-page "https://service-identity.readthedocs.io/")
     (synopsis "Service identity verification for PyOpenSSL")
     (description
@@ -1267,7 +1362,7 @@ relevant RFCs too.")
           "1jhxk5vhxmxxjp3zj526ry521v9inzzl8jqaaf0ma65w6k332ak2"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (home-page "https://github.com/casebeer/python-hkdf")
     (synopsis "HMAC-based Extract-and-Expand Key Derivation Function (HKDF)")
     (description "This package provides a Python implementation of the HMAC Key
@@ -1287,7 +1382,7 @@ Derivation function (HKDF) defined in RFC 5869.")
           "1x16r7lrbklvfzbacb66qv9iiih6liq1y612dqh2chgf555n2yn1"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-hkdf" ,python-hkdf)))
+     (list python-hkdf))
     (home-page "https://github.com/warner/python-spake2")
     (synopsis "SPAKE2 password-authenticated key exchange in Python")
     (description "This package provides a Python implementation of the SPAKE2
@@ -1311,12 +1406,12 @@ Password-Authenticated Key Exchange algorithm.")
       ;; <https://github.com/meejah/txtorcon/issues/330>
      `(#:tests? #f))
     (propagated-inputs
-     `(("python-automat" ,python-automat)
-       ("python-idna" ,python-idna)
-       ("python-incremental" ,python-incremental)
-       ("python-service-identity" ,python-service-identity)
-       ("python-twisted" ,python-twisted)
-       ("python-zope-interface" ,python-zope-interface)))
+     (list python-automat
+           python-idna
+           python-incremental
+           python-service-identity
+           python-twisted
+           python-zope-interface))
     (home-page "https://github.com/meejah/txtorcon")
     (synopsis "Twisted-based Tor controller client")
     (description "This package provides a Twisted-based Tor controller client,
@@ -1336,10 +1431,9 @@ with state-tracking and configuration abstractions.")
          "0lipygpzhwzzsq2k5imb1jgkmj8y4khxdwhzadjs3bd56g6bmkx9"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-pytest python-pytest-runner))
     (inputs
-     `(("keyutils" ,keyutils)))
+     (list keyutils))
     (arguments
      '(#:tests? #f))
     (home-page "https://github.com/sassoftware/python-keyutils")
@@ -1378,9 +1472,7 @@ storing and retrieving sensitive information in your programs.")
              (chdir "scripts")
              #t)))))
     (propagated-inputs
-     `(("python-click" ,python-click)
-       ("python-intelhex" ,python-intelhex)
-       ("python-cryptography" ,python-cryptography)))
+     (list python-click python-intelhex python-cryptography))
     (home-page "https://mcuboot.com")
     (synopsis "Tool to securely sign firmware images for booting by MCUboot")
     (description "MCUboot is a secure bootloader for 32-bit MCUs.  This
@@ -1401,7 +1493,7 @@ MCUboot.")
          "16mavidki4ma5ip8srqalr19gz4f5yn3cnmmgps1fmgfr24j63rm"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-cryptography" ,python-cryptography)))
+     (list python-cryptography))
     (home-page "https://github.com/jborean93/ntlm-auth")
     (synopsis
      "Calculates NTLM Authentication codes")
@@ -1432,8 +1524,7 @@ and Backlog for a list of what is and is not currently supported.")
     (arguments
      '(#:tests? #f)) ; Tests require a running dbus service.
     (propagated-inputs
-     `(("python-cryptography" ,python-cryptography)
-       ("python-jeepney" ,python-jeepney)))
+     (list python-cryptography python-jeepney))
     (home-page "https://github.com/mitya57/secretstorage")
     (synopsis "Python bindings to FreeDesktop.org Secret Service API")
     (description
@@ -1464,14 +1555,14 @@ items and collections, editing items, locking and unlocking collections
              (add-installed-pythonpath inputs outputs)
              (invoke "pytest" "-vv"))))))
     (native-inputs
-     `(("python-more-itertools" ,python-more-itertools)
-       ("python-pyopenssl" ,python-pyopenssl)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-service-identity" ,python-service-identity)
-       ("python-zipp" ,python-zipp)))
+     (list python-more-itertools
+           python-pyopenssl
+           python-pytest
+           python-pytest-cov
+           python-service-identity
+           python-zipp))
     (propagated-inputs
-     `(("python-cryptography" ,python-cryptography)))
+     (list python-cryptography))
     (home-page "https://github.com/python-trio/trustme")
     (synopsis "Fake a certificate authority for tests")
     (description
@@ -1494,9 +1585,9 @@ use in your tests.")
           "0n980gqpzh0fm58h3i4mi2i10wgj606lscm1r5sk60vbf6vh8mv9"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pyopenssl" ,python-pyopenssl)))
+     (list python-pyopenssl))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/LLNL/certipy")
     (synopsis "Utility to create and sign CAs and certificates")
     (description
@@ -1517,11 +1608,8 @@ certificates, signing and building trust bundles.")
          (base32 "0mw6ch5s4czpmsiwqwhcidgk27858pl8vlvb7acrxjkm4ribcnbx"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-testpath" ,python-testpath)
-       ("python-tornado" ,python-tornado)
-       ("python-trio" ,python-trio)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-trio" ,python-pytest-trio)))
+     (list python-testpath python-tornado python-trio python-pytest
+           python-pytest-trio))
     (home-page "https://gitlab.com/takluyver/jeepney")
     (synopsis "Low-level, pure Python DBus protocol wrapper")
     (description
@@ -1558,12 +1646,10 @@ I/O-free core, and integration modules for different event loops.")
              ;; see tox.ini
              (invoke "python" "-m" "argon2" "-n" "1" "-t" "1" "-m" "8" "-p" "1"))))))
     (propagated-inputs
-     `(("python-cffi" ,python-cffi)
-       ("python-six" ,python-six)))
-    (inputs `(("argon2" ,argon2)))
+     (list python-cffi python-six))
+    (inputs (list argon2))
     (native-inputs
-     `(("python-hypothesis" ,python-hypothesis)
-       ("python-pytest" ,python-pytest)))
+     (list python-hypothesis python-pytest))
     (home-page "https://argon2-cffi.readthedocs.io/")
     (synopsis "Secure Password Hashes for Python")
     (description
@@ -1595,10 +1681,9 @@ can decide how long it takes to hash a password and how much memory is required.
            (lambda _
              (invoke "python" "-m" "pytest"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (propagated-inputs
-     `(("python-argon2-cffi" ,python-argon2-cffi)
-       ("python-cryptography" ,python-cryptography)))
+     (list python-argon2-cffi python-cryptography))
     (home-page "https://www.dropbox.com/developers")
     (synopsis "Library to password-protect your data")
     (description
@@ -1626,12 +1711,12 @@ signatures.")
              (when tests?
                (invoke "pytest")))))))
     (native-inputs
-     `(("python-cryptography" ,python-cryptography)
-       ("python-pyasn1" ,python-pyasn1)
-       ("python-pytest" ,python-pytest)
-       ("python-singledispatch" ,python-singledispatch)
-       ("python-six" ,python-six)
-       ("python-wheel" ,python-wheel)))
+     (list python-cryptography
+           python-pyasn1
+           python-pytest
+           python-singledispatch
+           python-six
+           python-wheel))
     (home-page "https://github.com/SecurityInnovation/PGPy")
     (synopsis "Python implementation of OpenPGP")
     (description
diff --git a/gnu/packages/python-science.scm b/gnu/packages/python-science.scm
index cc6a759e82..8df311baea 100644
--- a/gnu/packages/python-science.scm
+++ b/gnu/packages/python-science.scm
@@ -4,9 +4,9 @@
 ;;; Copyright © 2016 Ben Woodcroft <donttrustben@gmail.com>
 ;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
-;;; Copyright © 2016, 2017, 2018, 2019, 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2016-2020, 2022 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2019 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2019 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2019, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2019 Giacomo Leidi <goodoldpaul@autistici.org>
 ;;; Copyright © 2020 Pierre Langlois <pierre.langlois@gmx.com>
 ;;; Copyright © 2020, 2021 Vinicius Monego <monego@posteo.net>
@@ -14,6 +14,7 @@
 ;;; Copyright © 2021 Roel Janssen <roel@gnu.org>
 ;;; Copyright © 2021 Paul Garlick <pgarlick@tourbillion-technology.com>
 ;;; Copyright © 2021 Arun Isaac <arunisaac@systemreboot.net>
+;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -65,38 +66,39 @@
 (define-public python-scipy
   (package
     (name "python-scipy")
-    (version "1.6.0")
+    (version "1.7.3")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "scipy" version))
        (sha256
-        (base32 "0rh5b1rwdcvvagld8vpxnpaibszy1skpx39a0fwzd5gx5pwcjvfb"))))
+        (base32 "1gxsnw6viz2j3sm8ak2a8l7fcn4b2zm3kzfm8w57xxyyrzx7an5b"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-pyparsing" ,python-pyparsing)))
+     (list python-numpy python-matplotlib python-pyparsing))
     (inputs
-     `(("openblas" ,openblas)
-       ("pybind11" ,pybind11)))
+     (list openblas pybind11))
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-pytest" ,python-pytest)
-       ("python-sphinx" ,python-sphinx)
-       ("python-numpydoc" ,python-numpydoc)
-       ("gfortran" ,gfortran)
-       ("perl" ,perl)
-       ("which" ,which)))
+     (list python-cython
+           python-pydata-sphinx-theme
+           python-pytest
+           python-sphinx
+           python-sphinx-panels
+           python-numpydoc
+           gfortran
+           perl
+           which))
     (outputs '("out" "doc"))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'disable-pythran
+           (lambda _
+             (setenv "SCIPY_USE_PYTHRAN" "0")))
          (add-before 'build 'change-home-dir
            (lambda _
              ;; Change from /homeless-shelter to /tmp for write permission.
-             (setenv "HOME" "/tmp")
-             #t))
+             (setenv "HOME" "/tmp")))
          (add-after 'unpack 'disable-broken-tests
            (lambda _
              (substitute* "scipy/sparse/linalg/dsolve/tests/test_linsolve.py"
@@ -107,8 +109,7 @@
              (substitute* "scipy/sparse/linalg/eigen/arpack/tests/test_arpack.py"
                (("^def test_parallel_threads\\(\\):" m)
                 (string-append "@pytest.mark.skip(reason=\"Disabled by Guix\")\n"
-                               m)))
-             #t))
+                               m)))))
          (add-before 'build 'configure-openblas
            (lambda* (#:key inputs #:allow-other-keys)
              (call-with-output-file "site.cfg"
@@ -126,8 +127,7 @@ atlas_libs = openblas
 "
                          (assoc-ref inputs "openblas")
                          (assoc-ref inputs "openblas")
-                         (assoc-ref inputs "openblas"))))
-             #t))
+                         (assoc-ref inputs "openblas"))))))
          (add-after 'install 'install-doc
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
@@ -153,17 +153,17 @@ atlas_libs = openblas
                                (let* ((dir (dirname file))
                                       (tgt-dir (string-append html "/" dir)))
                                  (install-file file html)))
-                             (find-files "." ".*")))))
-             #t))
+                             (find-files ".")))))))
          ;; Tests can only be run after the library has been installed and not
          ;; within the source directory.
          (delete 'check)
          (add-after 'install 'check
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (add-installed-pythonpath inputs outputs)
-             (with-directory-excursion "/tmp"
-               (invoke "python" "-c"
-                       "import scipy; scipy.test(verbose=2)")))))))
+           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (with-directory-excursion "/tmp"
+                 (invoke "python" "-c"
+                         "import scipy; scipy.test(verbose=2)"))))))))
     (home-page "https://www.scipy.org/")
     (synopsis "The Scipy library provides efficient numerical routines")
     (description "The SciPy library is one of the core packages that make up
@@ -184,7 +184,16 @@ routines such as routines for numerical integration and optimization.")
        (uri (pypi-uri "scipy" version))
        (sha256
         (base32
-         "1cgvgin8fvckv96hjh3ikmwkra5rif51bdb75ifzf7xbil5iwcx4"))))))
+         "1cgvgin8fvckv96hjh3ikmwkra5rif51bdb75ifzf7xbil5iwcx4"))))
+    (native-inputs
+     (list python2-cython
+           python2-pytest
+           python2-sphinx
+           python2-numpydoc
+           gfortran-7
+           gcc-7
+           perl
+           which))))
 
 (define-public python2-weave
   (package
@@ -207,9 +216,9 @@ routines such as routines for numerical integration and optimization.")
                      "--exclude"
                      "test_(user|incorrect_ownership|char_fail|obj_fail)"))))))
     (propagated-inputs
-     `(("python-numpy" ,python2-numpy)))
+     (list python2-numpy))
     (native-inputs
-     `(("python-nose" ,python2-nose)))
+     (list python2-nose))
     (home-page "https://www.scipy.org/")
     (synopsis "Tools for including C/C++ code within Python code")
     (description "Weave is the stand-alone version of the obsolete Scipy
@@ -230,19 +239,11 @@ Cython.")
        (sha256
         (base32 "0bp1n771fj44kdp7a00bcvfwirvv2rc803b7g6yf3va7v0j29c8s"))))
     (build-system python-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (replace 'check
-           (lambda _
-             (invoke "nosetests" "-s" "-v" "skfuzzy")
-             #t)))))
+    (arguments '(#:tests? #f))   ;XXX: not compatible with newer numpy.testing
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (propagated-inputs
-     `(("python-networkx" ,python-networkx)
-       ("python-numpy" ,python-numpy)
-       ("python-scipy" ,python-scipy)))
+     (list python-networkx python-numpy python-scipy))
     (home-page "https://github.com/scikit-fuzzy/scikit-fuzzy")
     (synopsis "Fuzzy logic toolkit for SciPy")
     (description
@@ -282,24 +283,24 @@ logic, also known as grey logic.")
     ;; NOTE: scikit-image has an optional dependency on python-pooch, however
     ;; propagating it would enable many more tests that require online data.
     (propagated-inputs
-     `(("python-cloudpickle" ,python-cloudpickle)
-       ("python-dask" ,python-dask)
-       ("python-imageio" ,python-imageio)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-networkx" ,python-networkx)
-       ("python-numpy" ,python-numpy)
-       ("python-pillow" ,python-pillow)
-       ("python-pywavelets" ,python-pywavelets)
-       ("python-scipy" ,python-scipy)
-       ("python-tifffile" ,python-tifffile)))
+     (list python-cloudpickle
+           python-dask
+           python-imageio
+           python-matplotlib
+           python-networkx
+           python-numpy
+           python-pillow
+           python-pywavelets
+           python-scipy
+           python-tifffile))
     (native-inputs
-     `(("python-codecov" ,python-codecov)
-       ("python-cython" ,python-cython)
-       ("python-flake8" ,python-flake8)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-localserver" ,python-pytest-localserver)
-       ("python-wheel" ,python-wheel)))
+     (list python-codecov
+           python-cython
+           python-flake8
+           python-pytest
+           python-pytest-cov
+           python-pytest-localserver
+           python-wheel))
     (home-page "https://scikit-image.org/")
     (synopsis "Image processing in Python")
     (description
@@ -318,7 +319,7 @@ logic, also known as grey logic.")
         (base32 "0dncp9i5b6afkg7f8mj9j0qzsp008b8v73yc0qkmizhpns7mvwvx"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (home-page "https://github.com/brandon-rhodes/python-sgp4")
     (synopsis "Track earth satellite TLE orbits using SGP4")
     (description
@@ -329,13 +330,13 @@ of the SGP4 satellite tracking algorithm.")
 (define-public python-pandas
   (package
     (name "python-pandas")
-    (version "1.3.0")
+    (version "1.3.5")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pandas" version))
        (sha256
-        (base32 "1qi2cv450m05dwccx3p1s373k5b4ncvwi74plnms2pidrz4ycm65"))))
+        (base32 "1wd92ra8xcjgigbypid53gvby89myg68ica6r8hdw4hhvvsqahhy"))))
     (build-system python-build-system)
     (arguments
      `(#:modules ((guix build utils)
@@ -358,47 +359,48 @@ of the SGP4 satellite tracking algorithm.")
              ;; xsel needs to write a log file.
              (setenv "HOME" "/tmp")))
          (replace 'check
-           (lambda _
+           (lambda* (#:key tests? #:allow-other-keys)
              (let ((build-directory
                     (string-append
                      (getcwd) "/build/"
                      (first (scandir "build"
                                      (cut string-prefix? "lib." <>))))))
+               (substitute* "pyproject.toml"
+                 ;; Not all data files are distributed with the tarball.
+                 (("--strict-data-files ") ""))
                (with-directory-excursion build-directory
-                 (invoke "pytest" "-vv" "pandas" "--skip-slow"
-                         "--skip-network"
-                         "-k"
-                         ;; These tets access the internet:
-                         ;; pandas/tests/io/xml/test_xml.py::test_wrong_url[lxml]
-                         ;; pandas/tests/io/xml/test_xml.py::test_wrong_url[etree]
-                         ;; TODO: the excel tests fail for unknown reasons
-                         (string-append "not test_wrong_url"
-                                        " and not test_excelwriter_fspath"
-                                        " and not test_ExcelWriter_dispatch"
-                                        ;; TODO: Missing input
-                                        " and not TestS3"
-                                        " and not s3")))))))))
+                 (when tests?
+                   (invoke "pytest" "-vv" "pandas" "--skip-slow"
+                           "--skip-network"
+                           "-k"
+                           (string-append
+                            ;; These test access the internet (see:
+                            ;; https://github.com/pandas-dev/pandas/issues/45085).:
+                            ;; pandas/tests/io/xml/test_xml.py::test_wrong_url[lxml]
+                            ;; pandas/tests/io/xml/test_xml.py::test_wrong_url[etree]
+                            "not test_wrong_url"
+                            ;; TODO: Missing input
+                            " and not TestS3"
+                            " and not s3"))))))))))
     (propagated-inputs
-     `(("python-jinja2" ,python-jinja2)
-       ("python-numpy" ,python-numpy)
-       ("python-openpyxl" ,python-openpyxl)
-       ("python-pytz" ,python-pytz)
-       ("python-dateutil" ,python-dateutil)
-       ("python-xlrd" ,python-xlrd)))
+     (list python-jinja2
+           python-numpy
+           python-openpyxl
+           python-pytz
+           python-dateutil
+           python-xlrd
+           python-xlsxwriter))
     (inputs
-     `(("which" ,which)
-       ("xclip" ,xclip)
-       ("xsel" ,xsel)))
+     (list which xclip xsel))
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-beautifulsoup4" ,python-beautifulsoup4)
-       ("python-lxml" ,python-lxml)
-       ("python-html5lib" ,python-html5lib)
-       ("python-nose" ,python-nose)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-mock" ,python-pytest-mock)
-       ;; Needed to test clipboard support.
-       ("xorg-server" ,xorg-server-for-tests)))
+     (list python-cython
+           python-beautifulsoup4
+           python-lxml
+           python-html5lib
+           python-pytest
+           python-pytest-mock
+           ;; Needed to test clipboard support.
+           xorg-server-for-tests))
     (home-page "https://pandas.pydata.org")
     (synopsis "Data structures for data analysis, time series, and statistics")
     (description
@@ -410,33 +412,10 @@ doing practical, real world data analysis in Python.")
     (properties `((python2-variant . ,(delay python2-pandas))))
     (license license:bsd-3)))
 
-(define-public python-pandas-0.25
-  (package
-    (inherit python-pandas)
-    (version "0.25.3")
-    (source (origin
-              (method url-fetch)
-              (uri (pypi-uri "pandas" version))
-              (sha256
-               (base32
-                "191048m6kdc6yfvqs9w412lq60cfvigrsb57y0x116lwibgp9njj"))))
-    (arguments
-     (substitute-keyword-arguments (package-arguments python-pandas)
-       ((#:phases phases)
-        `(modify-phases ,phases
-           (replace 'patch-which
-             (lambda* (#:key inputs #:allow-other-keys)
-               (let ((which (assoc-ref inputs "which")))
-                 (substitute* "pandas/io/clipboard/__init__.py"
-                   (("^CHECK_CMD = .*")
-                     (string-append "CHECK_CMD = \"" which "\"\n"))))
-               #t))
-           (delete 'prepare-x)))))))
-
 ;; Pandas 0.24.x are the last versions that support Python 2.
 (define-public python2-pandas
   (let ((pandas (package-with-python2
-                 (strip-python2-variant python-pandas-0.25))))
+                 (strip-python2-variant python-pandas))))
     (package
       (inherit pandas)
       (version "0.24.2")
@@ -493,25 +472,22 @@ doing practical, real world data analysis in Python.")
                            ;; XXX: Due to the deleted tests above.
                            "not test_read_s3_jsonl"))))))))
       (propagated-inputs
-       `(("python-numpy" ,python2-numpy)
-         ("python-openpyxl" ,python2-openpyxl)
-         ("python-pytz" ,python2-pytz)
-         ("python-dateutil" ,python2-dateutil)
-         ("python-xlrd" ,python2-xlrd)))
+       (list python2-numpy python2-openpyxl python2-pytz python2-dateutil
+             python2-xlrd))
       (inputs
-       `(("which" ,which)))
+       (list which))
       (native-inputs
-       `(("python-cython" ,python2-cython)
-         ("python-beautifulsoup4" ,python2-beautifulsoup4)
-         ("python-lxml" ,python2-lxml)
-         ("python-html5lib" ,python2-html5lib)
-         ("python-nose" ,python2-nose)
-         ("python-pytest" ,python2-pytest)
-         ("python-pytest-mock" ,python2-pytest-mock))))))
+       (list python2-cython
+             python2-beautifulsoup4
+             python2-lxml
+             python2-html5lib
+             python2-nose
+             python2-pytest
+             python2-pytest-mock)))))
 
-(define-public python-pyflow
+(define-public python2-pyflow
   (package
-    (name "python-pyflow")
+    (name "python2-pyflow")
     (version "1.1.20")
     (source (origin
               (method url-fetch)
@@ -523,7 +499,10 @@ doing practical, real world data analysis in Python.")
                 "1bvfvviw58cndyn862qnv9nj3d9cd3a0dm4vc4sd9vwq8a6z1riv"))))
     (build-system python-build-system)
     (arguments
-     `(#:tests? #f)) ; There is no test suite.
+     `(#:tests? #f ; There is no test suite.
+       ;; There is no official Python 3-compatible version and upstream is
+       ;; dead. See https://github.com/Illumina/pyflow/issues/20.
+       #:python ,python-2))
     (home-page "https://illumina.github.io/pyflow/")
     (synopsis "Tool to manage tasks in a task dependency graph")
     (description "This package is a Python module to manage tasks in the
@@ -548,11 +527,9 @@ context of a task dependency graph.  It has some similarities to make.")
            (lambda _
              (invoke "python" "setup.py" "pytest"))))))
     (native-inputs
-     `(("python-hypothesis" ,python-hypothesis)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-hypothesis python-pytest python-pytest-runner))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (home-page "https://github.com/pydata/bottleneck")
     (synopsis "Fast NumPy array functions written in C")
     (description
@@ -572,9 +549,7 @@ written in C.")
         (base32 "1c1354a7b3g8slychjgyjxqdm8z40z9kviyl9n4g9kfpdg0p4d64"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-matplotlib" ,python-matplotlib)
-       ("python-numpy" ,python-numpy)
-       ("python-scipy" ,python-scipy)))
+     (list python-matplotlib python-numpy python-scipy))
     (home-page "https://github.com/janezd/baycomp")
     (synopsis "Library for comparison of Bayesian classifiers")
     (description
@@ -598,11 +573,9 @@ higher scores.")
                 "1yx8j66b7rn10m2l6gmn8yr9cn38pi5cj0x0wwpy4hdnhy6i7qv4"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-pytest" ,python-pytest)))
+     (list python-setuptools-scm python-pytest))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-pandas" ,python-pandas)))
+     (list python-numpy python-pandas))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -634,8 +607,7 @@ and visualization with these data structures.")
          "0syzy645mwcy7lfjwz6pc8f9p2vv1qk4limc8iina3l5nnf0rjyz"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-msgpack" ,python-msgpack)
-       ("python-numpy" ,python-numpy)))
+     (list python-msgpack python-numpy))
     (home-page "https://github.com/lebedov/msgpack-numpy")
     (synopsis
      "Numpy data serialization using msgpack")
@@ -669,7 +641,7 @@ Python's native complex data types is also supported.")
                (with-directory-excursion "ruffus/test"
                  (invoke "bash" "run_all_unit_tests3.cmd"))))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "http://www.ruffus.org.uk")
     (synopsis "Light-weight computational pipeline management")
     (description
@@ -690,11 +662,8 @@ automated with the minimum of fuss and the least effort.")
          "1f8c2sylzr7lpjbyqxsqlp9xi8rj3d8c9hfh98x4jbb83zxc4026"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-seaborn" ,python-seaborn)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-pandas" ,python-pandas)
-       ("python-scipy" ,python-scipy)))
+     (list python-numpy python-seaborn python-matplotlib python-pandas
+           python-scipy))
     (home-page
      "https://github.com/webermarcolivier/statannot")
     (synopsis "Add annotations to existing plots generated by seaborn")
@@ -706,32 +675,35 @@ annotations on an existing boxplots and barplots generated by seaborn.")
 (define-public python-upsetplot
   (package
     (name "python-upsetplot")
-    (version "0.4.1")
+    (version "0.6.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "UpSetPlot" version))
        (sha256
         (base32
-         "0kwljcmsvrxm33y3ssham2bwv4a5m31mv96y9h18va0cv7s3mqn1"))))
+         "11zrykwnb00w5spx4mnsnm0f9gwrphdczainpmwkyyi50vipaa2l"))
+       (modules '((guix build utils)))
+       (snippet
+        ;; Patch for compatibility with newer setuptools:
+        ;; https://github.com/jnothman/UpSetPlot/pull/178
+        '(substitute* "upsetplot/data.py"
+           (("import distutils")
+            "from distutils.version import LooseVersion")
+           (("if distutils\\.version\\.LooseVersion")
+            "if LooseVersion")))))
     (build-system python-build-system)
     (arguments
-     `(#:phases
+     '(#:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'fix-versioning
-           (lambda _
-             (substitute* "setup.py"
-               (("pytest-cov<2.6") "pytest-cov"))))
          (replace 'check
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (add-installed-pythonpath inputs outputs)
-             (invoke "pytest" "-v" "--doctest-modules"))))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "pytest" "-v" "--doctest-modules")))))))
     (propagated-inputs
-     `(("python-matplotlib" ,python-matplotlib)
-       ("python-pandas" ,python-pandas)))
+     (list python-matplotlib python-pandas))
     (native-inputs
-     `(("python-pytest-runner" ,python-pytest-runner)
-       ("python-pytest-cov" ,python-pytest-cov)))
+     (list python-pytest-runner python-pytest-cov))
     (home-page "https://upsetplot.readthedocs.io")
     (synopsis "Draw UpSet plots with Pandas and Matplotlib")
     (description
@@ -775,7 +747,7 @@ readable.")
        ("pkgconfig" ,python-pkgconfig)
        ("matplotlib" ,python-matplotlib)))
     (native-inputs ; for python-pkgconfig
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (propagated-inputs
      `(("numpy" ,python-numpy)
        ("vtk" ,vtk)))
@@ -811,8 +783,7 @@ dependencies.")
          "12g4av8gpl6l83yza3h97j3f2jblqv69frlidrvdq8ny2rc6awbq"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pandas" ,python-pandas)
-       ("python-xarray" ,python-xarray)))
+     (list python-pandas python-xarray))
     (home-page "https://github.com/Zsailer/pandas_flavor")
     (synopsis "Write your own flavor of Pandas")
     (description "Pandas 0.23 added a simple API for registering accessors
@@ -828,7 +799,7 @@ of Pandas
 (define-public python-pingouin
   (package
     (name "python-pingouin")
-    (version "0.3.12")
+    (version "0.5.0")
     (source
      ;; The PyPI tarball does not contain the tests.
      (origin
@@ -839,7 +810,7 @@ of Pandas
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1ap29x54kdr19vi8qxj9g6cz2r1q4f0z7dcf6g77zwav7hf7r61a"))))
+         "01aaq023q4bymffrc2wm56af87da32wcvy5d5156i4g7qgvh346r"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -859,19 +830,18 @@ of Pandas
              (when tests?
                (invoke "pytest")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)))
+     (list python-pytest python-pytest-cov))
     (propagated-inputs
-     `(("python-matplotlib" ,python-matplotlib)
-       ("python-mpmath" ,python-mpmath)
-       ("python-numpy" ,python-numpy)
-       ("python-pandas" ,python-pandas)
-       ("python-pandas-flavor" ,python-pandas-flavor)
-       ("python-scikit-learn" ,python-scikit-learn)
-       ("python-scipy" ,python-scipy)
-       ("python-seaborn" ,python-seaborn)
-       ("python-statsmodels" ,python-statsmodels)
-       ("python-tabulate" ,python-tabulate)))
+     (list python-matplotlib
+           python-mpmath
+           python-numpy
+           python-pandas
+           python-pandas-flavor
+           python-scikit-learn
+           python-scipy
+           python-seaborn
+           python-statsmodels
+           python-tabulate))
     (home-page "https://pingouin-stats.org/")
     (synopsis "Statistical package for Python")
     (description "Pingouin is a statistical package written in Python 3 and
@@ -899,7 +869,7 @@ and more
 (define-public python-distributed
   (package
     (name "python-distributed")
-    (version "2021.07.1")
+    (version "2021.11.2")
     (source
      (origin
        ;; The test files are not included in the archive on pypi
@@ -910,11 +880,16 @@ and more
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0i55zf3k55sqjxnwlzsyj3h3v1588fn54ng4mj3dfiqzh3nlj0dg"))))
+         "1p20cbyabzl7rs8y3ydzszsskh4kw088m252ghgairhs0p2f95hl"))
+       ;; Delete bundled copy of python-versioneer.
+       (snippet '(delete-file "versioneer.py"))))
     (build-system python-build-system)
     (arguments
      '(#:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'versioneer
+           (lambda _
+             (invoke "versioneer" "install")))
          (add-after 'unpack 'fix-references
            (lambda* (#:key outputs #:allow-other-keys)
              (substitute* '("distributed/comm/tests/test_ucx_config.py"
@@ -939,29 +914,31 @@ and more
                        "-m" "not slow and not gpu and not ipython and not avoid_ci"
                        "-k"
                        ;; TODO: These tests fail for unknown reasons:
-                       ;; Assertion error.
                        (string-append
-                        "not test_version_option"
+                        ;; TimeoutExpired
+                        "not test_text"
+                        ;; AssertionError
+                        " and not test_version_option"
                         ;; "The 'distributed' distribution was not found"
                         " and not test_register_backend_entrypoint"
                         ;; "AttributeError: module 'distributed.dashboard' has no attribute 'scheduler'"
                         " and not test_get_client_functions_spawn_clusters"))))))))
     (propagated-inputs
-     `(("python-click" ,python-click)
-       ("python-cloudpickle" ,python-cloudpickle)
-       ("python-cryptography" ,python-cryptography)
-       ("python-dask" ,python-dask)
-       ("python-msgpack" ,python-msgpack)
-       ("python-psutil" ,python-psutil)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-setuptools" ,python-setuptools)
-       ("python-sortedcontainers" ,python-sortedcontainers)
-       ("python-tblib" ,python-tblib)
-       ("python-toolz" ,python-toolz)
-       ("python-tornado" ,python-tornado-6)
-       ("python-zict" ,python-zict)))
+     (list python-click
+           python-cloudpickle
+           python-cryptography
+           python-dask
+           python-msgpack
+           python-psutil
+           python-pyyaml
+           python-setuptools
+           python-sortedcontainers
+           python-tblib
+           python-toolz
+           python-tornado-6
+           python-zict))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest python-versioneer))
     (home-page "https://distributed.dask.org")
     (synopsis "Distributed scheduler for Dask")
     (description "Dask.distributed is a lightweight library for distributed
@@ -991,6 +968,12 @@ computing in Python.  It extends both the @code{concurrent.futures} and
          (add-after 'unpack 'make-files-writable
            (lambda _
              (for-each make-file-writable (find-files "."))))
+         (add-after 'unpack 'loosen-requirements
+           (lambda _
+             (substitute* "setup.py"
+               ;; Don't depend on a specific version of Pandas.
+               (("pandas==")
+                "pandas>="))))
          (replace 'check
            (lambda* (#:key tests? #:allow-other-keys)
              (when tests?
@@ -1001,31 +984,31 @@ computing in Python.  It extends both the @code{concurrent.futures} and
                (invoke "python" "-m" "pytest"
                        "modin/pandas/test/test_concat.py")))))))
     (propagated-inputs
-     `(("python-cloudpickle" ,python-cloudpickle)
-       ("python-dask" ,python-dask)
-       ("python-distributed" ,python-distributed)
-       ("python-numpy" ,python-numpy)
-       ("python-packaging" ,python-packaging)
-       ("python-pandas" ,python-pandas)))
+     (list python-cloudpickle
+           python-dask
+           python-distributed
+           python-numpy
+           python-packaging
+           python-pandas))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-jinja2" ,python-jinja2)
-       ("python-lxml" ,python-lxml)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-msgpack" ,python-msgpack)
-       ("python-openpyxl" ,python-openpyxl)
-       ("python-psutil" ,python-psutil)
-       ("python-pyarrow" ,python-pyarrow)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-benchmark" ,python-pytest-benchmark)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-xdist" ,python-pytest-xdist)
-       ("python-scipy" ,python-scipy)
-       ("python-sqlalchemy" ,python-sqlalchemy)
-       ("python-tables" ,python-tables)
-       ("python-tqdm" ,python-tqdm)
-       ("python-xarray" ,python-xarray)
-       ("python-xlrd" ,python-xlrd)))
+     (list python-coverage
+           python-jinja2
+           python-lxml
+           python-matplotlib
+           python-msgpack
+           python-openpyxl
+           python-psutil
+           python-pyarrow
+           python-pytest
+           python-pytest-benchmark
+           python-pytest-cov
+           python-pytest-xdist
+           python-scipy
+           python-sqlalchemy
+           python-tables
+           python-tqdm
+           python-xarray
+           python-xlrd))
     (home-page "https://github.com/modin-project/modin")
     (synopsis "Make your pandas code run faster")
     (description
diff --git a/gnu/packages/python-web.scm b/gnu/packages/python-web.scm
index b99e358e26..406c6cb51b 100644
--- a/gnu/packages/python-web.scm
+++ b/gnu/packages/python-web.scm
@@ -1,10 +1,10 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015 Eric Dvorsak <eric@dvorsak.fr>
-;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Christopher Baines <mail@cbaines.net>
 ;;; 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, 2021 Marius Bakke <marius@gnu.org>
+;;; Copyright © 2016, 2017, 2019-2022 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017, 2021 Roel Janssen <roel@gnu.org>
 ;;; Copyright © 2016, 2017, 2020 Julien Lepiller <julien@lepiller.eu>
@@ -26,7 +26,7 @@
 ;;; Copyright © 2018 Tomáš Čech <sleep_walker@gnu.org>
 ;;; Copyright © 2018, 2019, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2018 Mathieu Othacehe <m.othacehe@gmail.com>
-;;; Copyright © 2018, 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2018, 2020, 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2019 Vagrant Cascadian <vagrant@debian.org>
 ;;; Copyright © 2019 Brendan Tildesley <mail@brendan.scot>
 ;;; Copyright © 2019 Pierre Langlois <pierre.langlois@gmx.com>
@@ -37,13 +37,17 @@
 ;;; Copyright © 2020 Holger Peters <holger.peters@posteo.de>
 ;;; Copyright © 2020 Noisytoot <noisytoot@gmail.com>
 ;;; Copyright © 2020 Edouard Klein <edk@beaver-labs.com>
-;;; Copyright © 2020, 2021 Vinicius Monego <monego@posteo.net>
+;;; Copyright © 2020, 2021, 2022 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2020 Konrad Hinsen <konrad.hinsen@fastmail.net>
-;;; Copyright © 2020 Giacomo Leidi <goodoldpaul@autistici.org>
+;;; Copyright © 2020, 2022 Giacomo Leidi <goodoldpaul@autistici.org>
 ;;; Copyright © 2021 Ekaitz Zarraga <ekaitz@elenq.tech>
 ;;; Copyright © 2021 Greg Hogan <code@greghogan.com>
 ;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;; Copyright © 2021 Pradana Aumars <paumars@courrier.dev>
+;;; Copyright © 2021 Arun Isaac <arunisaac@systemreboot.net>
+;;; Copyright © 2021 jgart <jgart@dismail.de>
+;;; Copyright © 2021 Alice Brenon <alice.brenon@ens-lyon.fr>
+;;; Copyright © 2022 John Kehayias <john.kehayias@protonmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -65,6 +69,7 @@
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix build-system python)
+  #:use-module (guix gexp)
   #:use-module (guix utils)
   #:use-module (gnu packages)
   #:use-module (gnu packages base)
@@ -77,14 +82,16 @@
   #:use-module (gnu packages groff)
   #:use-module (gnu packages libevent)
   #:use-module (gnu packages libffi)
+  #:use-module (gnu packages node)
+  #:use-module (gnu packages pcre)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-check)
-  #:use-module (gnu packages python-compression)
   #:use-module (gnu packages python-crypto)
   #:use-module (gnu packages python-science)
   #:use-module (gnu packages python-xyz)
+  #:use-module (gnu packages qt)
   #:use-module (gnu packages serialization)
   #:use-module (gnu packages sphinx)
   #:use-module (gnu packages texinfo)
@@ -98,23 +105,23 @@
 (define-public python-prawcore
   (package
     (name "python-prawcore")
-    (version "2.0.0")
+    (version "2.3.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "prawcore" version))
        (sha256
-        (base32 "1l9nrn4s03xl8fvkyybdk86bm9cyyk43alkxf9g014a9ynvdk65l"))))
+        (base32 "0vgmhjddqxnz5vy70dyqvakak51fg1nk6j3xavkc83d8nzacrwfs"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-betamax" ,python-betamax)
-       ("python-betamax-matchers" ,python-betamax-matchers)
-       ("python-betamax-serializers" ,python-betamax-serializers)
-       ("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("python-testfixtures" ,python-testfixtures)))
-    (propagated-inputs
-     `(("python-requests" ,python-requests)))
+     (list python-betamax
+           python-betamax-matchers
+           python-betamax-serializers
+           python-mock
+           python-pytest
+           python-testfixtures))
+    (propagated-inputs
+     (list python-requests))
     (synopsis "Core component of PRAW")
     (description "PRAWcore is a low-level communication layer used by PRAW.")
     (home-page "https://praw.readthedocs.io/en/latest/")
@@ -123,13 +130,13 @@
 (define-public python-praw
   (package
     (name "python-praw")
-    (version "7.2.0")
+    (version "7.5.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "praw" version))
        (sha256
-        (base32 "0ll1a0n8xs8gykizdsfrw63jp6bc39ab0pk3yzwcak96fyxh0ij3"))))
+        (base32 "1nqcwz8r8xp4rfpy2i11x2fjga8fmmf6zw94xjk1h1yxgn1gq6zr"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -137,25 +144,22 @@
          (add-after 'unpack 'disable-failing-tests
            (lambda _
              (with-directory-excursion "tests"
-               ;; Require networking.
+               ;; Integration tests depend on files that are not included.
                (for-each delete-file-recursively
                          '("integration/models" "unit/models"))
-               ;; https://github.com/praw-dev/praw/issues/1699
-               ;; #issuecomment-795336704
-               (delete-file "unit/test_config.py"))
-             #t))
+               ;; The configuration file does not seem to exist.
+               (delete-file "unit/test_config.py"))))
          (replace 'check
            (lambda* (#:key tests? #:allow-other-keys)
              (when tests?
-               (invoke "pytest"))
-             #t)))))
+               (invoke "pytest" "-k"
+                       ;; These tests depend on test files that don't exist.
+                       (string-append "not test_bad_request_without_json_text_plain_response"
+                                      " and not test_bad_request_without_json_text_html_response"))))))))
     (native-inputs
-     `(("python-betamax" ,python-betamax)
-       ("python-betamax-matchers" ,python-betamax-matchers)
-       ("python-pytest" ,python-pytest)))
+     (list python-betamax python-betamax-matchers python-pytest))
     (propagated-inputs
-     `(("python-prawcore" ,python-prawcore)
-       ("python-websocket-client" ,python-websocket-client)))
+     (list python-prawcore python-update-checker python-websocket-client))
     (synopsis "Python Reddit API Wrapper")
     (description "PRAW is a Python package that allows for simple access to
 Reddit’s API.  It aims to be easy to use and internally follows all of Reddit’s
@@ -163,16 +167,74 @@ API rules.")
     (home-page "https://praw.readthedocs.io/en/latest/")
     (license license:bsd-2)))
 
+(define-public python-frozenlist
+  (package
+    (name "python-frozenlist")
+    (version "1.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "frozenlist" version))
+       (sha256
+        (base32 "1pkr23by7pk9lsmsh0wiqirpkq3f1f08b0615nbzysn51bk1n838"))))
+    (build-system python-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "pytest" "tests")))))))
+    (native-inputs (list python-pytest))
+    (home-page "https://github.com/aio-libs/frozenlist")
+    (synopsis "List-like data structure for Python")
+    (description "@code{frozenlist.FrozenList} is a list-like structure which
+implements @code{collections.abc.MutableSequence}.  It can be made immutable
+by calling @code{FrozenList.freeze}.")
+    (license license:asl2.0)))
+
+(define-public python-aiosignal
+  (package
+    (name "python-aiosignal")
+    (version "1.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "aiosignal" version))
+       (sha256
+        (base32 "1wkxbdgw07ay8yzx3pg1jcm46p3d21rfb5g4k17ysz3vdkdngvbq"))))
+    (build-system python-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "pytest" "tests")))))))
+    (propagated-inputs (list python-frozenlist))
+    (native-inputs (list python-pytest python-pytest-asyncio))
+    (home-page "https://github.com/aio-libs/aiosignal")
+    (synopsis "Callback manager for Python @code{asyncio} projects")
+    (description "This Python module provides @code{Signal}, an abstraction to
+register asynchronous callbacks.  The @code{Signal} abstraction can be used
+for adding, removing and dropping callbacks.")
+    (license license:asl2.0)))
+
 (define-public python-aiohttp
   (package
     (name "python-aiohttp")
-    (version "3.7.4")
+    (version "3.8.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "aiohttp" version))
        (sha256
-        (base32 "1pn79h8fng4xi5gl1f6saw31nxgmgyxl41yf3vba1l21673yr12x"))))
+        (base32 "0y3m1dzl4h6frg8vys0fc3m83ijd1plfpihv3kvmxqadlphp2m7w"))
+       ;; TODO: Unbundle the llhttp sources.
+       ;; (modules '((guix build utils)))
+       ;; (snippet
+       ;;  '((delete-file-recursively "vendor")))
+       ))
     (build-system python-build-system)
     (arguments
      '(#:phases
@@ -194,35 +256,59 @@ API rules.")
                 (string-append "@pytest.mark.xfail\n" all)))
 
              ;; Don't test the aiohttp pytest plugin to avoid a dependency loop.
-             (delete-file "tests/test_pytest_plugin.py")
-             #t))
+             (delete-file "tests/test_pytest_plugin.py")))
+         (add-before 'build 'cythonize
+           (lambda _
+             ;; Adapted from the Makefile.
+             (with-directory-excursion "aiohttp"
+               (for-each
+                (lambda (file)
+                  (invoke "cython" "-3"
+                          file "-I" "."))
+                (find-files "." "_.*\\.pyx$")))))
          (replace 'check
            (lambda* (#:key tests? #:allow-other-keys)
-             (setenv "PYTHONPATH"
-                     (string-append ".:" (getenv "PYTHONPATH")))
-             (if tests?
-                 (invoke "pytest" "-vv"
-                         ;; Disable loading the aiohttp coverage plugin
-                         ;; to avoid a circular dependency (code coverage
-                         ;; is not very interesting to us anyway).
-                         "-o" "addopts=''")
-                 (format #t "test suite not run~%")))))))
-    (propagated-inputs
-     `(("python-aiodns" ,python-aiodns)
-       ("python-async-timeout" ,python-async-timeout)
-       ("python-attrs" ,python-attrs)   ;note: remove for > 3.7
-       ("python-chardet" ,python-chardet)
-       ("python-idna-ssl" ,python-idna-ssl)
-       ("python-multidict" ,python-multidict)
-       ("python-typing-extensions" ,python-typing-extensions)
-       ("python-yarl" ,python-yarl)))
+             (when tests?
+               ;; This tests requires the 'proxy.py' module, not yet
+               ;; packaged.
+               (delete-file "tests/test_proxy_functional.py")
+               (invoke "pytest" "-vv"
+                       ;; Disable loading the aiohttp coverage plugin
+                       ;; to avoid a circular dependency (code coverage
+                       ;; is not very interesting to us anyway).
+                       "-o" "addopts=''" "--ignore=aiohttp"
+                       "-n" (number->string (parallel-job-count))
+                       "-k" (string-append
+                             ;; This test probably requires to be run with the
+                             ;; library loaded from the the build directory.
+                             "not test_c_parser_loaded and "
+                             ;; Disable the following tests as they require
+                             ;; networking.
+                             "not TestDeflateBuffer and "
+                             "not test_client_session_timeout_zero and "
+                             "not test_empty_body and "
+                             "not test_mark_formdata_as_processed[pyloop] and "
+                             "not test_receive_runtime_err[pyloop]"))))))))
+    (propagated-inputs
+     (list python-aiodns
+           python-aiosignal
+           python-attrs
+           python-async-timeout
+           python-charset-normalizer
+           python-frozenlist
+           python-idna-ssl
+           python-multidict
+           python-typing-extensions
+           python-yarl))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-mock" ,python-pytest-mock)
-       ("python-re-assert" ,python-re-assert)
-       ("gunicorn" ,gunicorn-bootstrap)
-       ("python-freezegun" ,python-freezegun)
-       ("python-async-generator" ,python-async-generator)))
+     (list gunicorn-bootstrap
+           python-async-generator
+           python-cython
+           python-freezegun
+           python-pytest
+           python-pytest-mock
+           python-pytest-xdist
+           python-re-assert))
     (home-page "https://github.com/aio-libs/aiohttp/")
     (synopsis "Async HTTP client/server framework (asyncio)")
     (description "@code{aiohttp} is an asynchronous HTTP client/server
@@ -240,19 +326,17 @@ Callback Hell.
 (define-public python-aiohttp-socks
   (package
     (name "python-aiohttp-socks")
-    (version "0.5.5")
+    (version "0.6.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "aiohttp_socks" version))
        (sha256
         (base32
-         "0jmhb0l1w8k1nishij3awd9zv8zbyb5l35a2pdalrqxxasbhbcif"))))
+         "04w010bvi719ifpc3sshav95k10hf9nq8czn9yglkj206yxcypdr"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-aiohttp" ,python-aiohttp)
-       ("python-attrs" ,python-attrs)
-       ("python-socks" ,python-socks)))
+     (list python-aiohttp python-attrs python-socks))
     (home-page "https://github.com/romis2012/aiohttp-socks")
     (synopsis "SOCKS proxy connector for aiohttp")
     (description "This package provides a SOCKS proxy connector for
@@ -272,7 +356,7 @@ aiohttp.  It supports SOCKS4(a) and SOCKS5.")
          "1snr5paql8dgvc676n8xq460wypjsb1xj53cf3px1s4wczf7lryq"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pycares" ,python-pycares)))
+     (list python-pycares))
     (arguments
      `(#:tests? #f))                    ;tests require internet access
     (home-page "https://github.com/saghul/aiodns")
@@ -295,7 +379,7 @@ using @url{https://github.com/saghul/pycares,pycares}.")
          "0lx54bcinp44fmr8q4bbffsqbkg8kdcwykf9i5jj0bj3sfzgf9k0"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-attrs" ,python-attrs)))
+     (list python-attrs))
     (home-page "https://github.com/kyuupichan/aiorpcX")
     (synopsis "Generic asyncio RPC implementation")
     (description
@@ -322,25 +406,22 @@ comes with a SOCKS proxy client.")
 (define-public python-asgiref
   (package
     (name "python-asgiref")
-    (version "3.3.4")
+    (version "3.4.1")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "asgiref" version))
               (sha256
-               (base32
-                "0y0vdzldjkbs4pxf10pi6jpxq9b2sfp1rlwm153jcf5nvzxns8fi"))))
+               (base32 "1saqgpgbdvb8awzm0f0640j0im55hkrfzvcw683cgqw4ni3apwaf"))))
     (build-system python-build-system)
     (arguments
-     '(#:phases (modify-phases %standard-phases
-                  (replace 'check
-                    (lambda _
-                      (setenv "PYTHONPATH"
-                              (string-append "./build/lib:"
-                                             (getenv "PYTHONPATH")))
-                      (invoke "pytest" "-vv"))))))
+     '(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "pytest" "-vv")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-asyncio" ,python-pytest-asyncio)))
+     (list python-pytest python-pytest-asyncio))
     (home-page "https://github.com/django/asgiref/")
     (synopsis "ASGI specs, helper code, and adapters")
     (description
@@ -363,7 +444,7 @@ WSGI.  This package includes libraries for implementing ASGI servers.")
     ;; XXX: The git repository has no tags, and the PyPI releases do not
     ;; contain tests.
     (arguments '(#:tests? #f))
-    (native-inputs `(("unzip" ,unzip)))
+    (native-inputs (list unzip))
     (home-page "https://github.com/juancarlospaco/css-html-js-minify")
     (synopsis "CSS/HTML/JS minifier")
     (description
@@ -376,13 +457,13 @@ WSGI.  This package includes libraries for implementing ASGI servers.")
 (define-public python-aws-sam-translator
   (package
     (name "python-aws-sam-translator")
-    (version "1.38.0")
+    (version "1.40.0")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "aws-sam-translator" version))
               (sha256
                (base32
-                "1djwlsjpbh13m4biglimrm9lq7hmla0k29giay7k3cjsrylxvjhf"))))
+                "1hq5ggbzcq4k3ks439hki493w4sasgaxns6j5x57xsj822acalmf"))))
     (build-system python-build-system)
     (arguments
      `(;; XXX: Tests are not distributed with the PyPI archive, and would
@@ -395,13 +476,10 @@ WSGI.  This package includes libraries for implementing ASGI servers.")
                       ;; of dependencies, when it works fine with others.
                       (substitute* "requirements/base.txt"
                         (("(.*)(~=[0-9\\.]+)" all package version)
-                         package))
-                      #t)))))
+                         package)))))))
     (propagated-inputs
-     `(("python-boto3" ,python-boto3)
-       ("python-jsonschema" ,python-jsonschema)
-       ("python-six" ,python-six)))
-    (home-page "https://github.com/awslabs/serverless-application-model")
+     (list python-boto3 python-jsonschema python-six))
+    (home-page "https://github.com/aws/serverless-application-model")
     (synopsis "Transform AWS SAM templates into AWS CloudFormation templates")
     (description
      "AWS SAM Translator is a library that transform @dfn{Serverless Application
@@ -448,28 +526,27 @@ Model} (SAM) templates into AWS CloudFormation templates.")
                                   "tests/ext/aiohttp/test_client.py"))))
                   (replace 'check
                     (lambda _
-                      (setenv "PYTHONPATH"
-                              (string-append "./build/lib:.:"
-                                             (getenv "PYTHONPATH")))
+                      ;; Allow "import tests.utils" to work as expected.
+                      (setenv "PYTHONPATH" (getcwd))
                       (invoke "pytest" "-vv" "tests"))))))
     (native-inputs
-     `(;; These are required for the test suite.
-       ("python-bottle" ,python-bottle)
-       ("python-flask" ,python-flask)
-       ("python-flask-sqlalchemy" ,python-flask-sqlalchemy)
-       ("python-pymysql" ,python-pymysql)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-aiohttp" ,python-pytest-aiohttp)
-       ("python-requests" ,python-requests)
-       ("python-sqlalchemy" ,python-sqlalchemy)
-       ("python-webtest" ,python-webtest)))
-    (propagated-inputs
-     `(("python-aiohttp" ,python-aiohttp)
-       ("python-botocore" ,python-botocore)
-       ("python-future" ,python-future)
-       ("python-jsonpickle" ,python-jsonpickle)
-       ("python-urllib3" ,python-urllib3)
-       ("python-wrapt" ,python-wrapt)))
+     (list ;; These are required for the test suite.
+           python-bottle
+           python-flask
+           python-flask-sqlalchemy
+           python-pymysql
+           python-pytest
+           python-pytest-aiohttp
+           python-requests
+           python-sqlalchemy
+           python-webtest))
+    (propagated-inputs
+     (list python-aiohttp
+           python-botocore
+           python-future
+           python-jsonpickle
+           python-urllib3
+           python-wrapt))
     (synopsis "Profile applications on AWS X-Ray")
     (description
      "The AWS X-Ray SDK for Python enables Python developers to record and
@@ -479,8 +556,8 @@ emit information from within their applications to the AWS X-Ray service.")
 (define-public python-cfn-lint
   (package
     (name "python-cfn-lint")
-    (version "0.54.1")
-    (home-page "https://github.com/aws-cloudformation/cfn-python-lint")
+    (version "0.54.3")
+    (home-page "https://github.com/aws-cloudformation/cfn-lint")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -489,37 +566,36 @@ emit information from within their applications to the AWS X-Ray service.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "161mzzlpbi85q43kwzrj39qb32l6wg6xhnbbd4z860yrfbymsn87"))))
+                "106qf19n2k6sdjkb4006aidibd24qqiw901c1613xgjpnyw4dyl6"))))
     (build-system python-build-system)
     (arguments
-     `(#:phases (modify-phases %standard-phases
-                  (replace 'check
-                    (lambda* (#:key outputs #:allow-other-keys)
-                      (let ((out (assoc-ref outputs "out")))
-                        ;; Remove test for the documentation update scripts
-                        ;; to avoid a dependency on 'git'.
-                        (delete-file
-                         "test/unit/module/maintenance/test_update_documentation.py")
-                        (delete-file
-                         "test/unit/module/maintenance/test_update_resource_specs.py")
-                        (setenv "PYTHONPATH"
-                                (string-append "./build/lib:"
-                                               (getenv "PYTHONPATH")))
-                        (setenv "PATH" (string-append out "/bin:"
-                                                      (getenv "PATH")))
-                        (invoke "python" "-m" "unittest" "discover" "-v"
-                                "-s" "test")))))))
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+             (when tests?
+               (let ((out (assoc-ref outputs "out")))
+                 ;; Remove test for the documentation update scripts
+                 ;; to avoid a dependency on 'git'.
+                 (delete-file
+                  "test/unit/module/maintenance/test_update_documentation.py")
+                 (delete-file
+                  "test/unit/module/maintenance/test_update_resource_specs.py")
+                 (add-installed-pythonpath inputs outputs)
+                 (setenv "PATH" (string-append out "/bin:"
+                                               (getenv "PATH")))
+                 (invoke "python" "-m" "unittest" "discover"
+                         "-s" "test"))))))))
     (native-inputs
-     `(("python-pydot" ,python-pydot)
-       ("python-mock" ,python-mock)))
-    (propagated-inputs
-     `(("python-aws-sam-translator" ,python-aws-sam-translator)
-       ("python-jsonpatch" ,python-jsonpatch)
-       ("python-jsonschema" ,python-jsonschema)
-       ("python-junit-xml" ,python-junit-xml)
-       ("python-networkx" ,python-networkx)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-six" ,python-six)))
+     (list python-pydot python-mock))
+    (propagated-inputs
+     (list python-aws-sam-translator
+           python-jsonpatch
+           python-jsonschema
+           python-junit-xml
+           python-networkx
+           python-pyyaml
+           python-six))
     (synopsis "Validate CloudFormation templates")
     (description
      "This package lets you validate CloudFormation YAML/JSON templates against
@@ -562,18 +638,18 @@ for resource properties and best practices.")
              (add-installed-pythonpath inputs outputs)
              (invoke "pytest" "--ignore" "falcon"))))))
     (propagated-inputs
-     `(("python-mimeparse" ,python-mimeparse)))
+     (list python-mimeparse))
     (native-inputs
-     `(("python-cython" ,python-cython) ;for faster binaries
-       ("python-mujson" ,python-mujson)
-       ("python-msgpack" ,python-msgpack)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-rapidjson" ,python-rapidjson)
-       ("python-requests" ,python-requests)
-       ("python-testtools" ,python-testtools)
-       ("python-ujson" ,python-ujson)))
+     (list python-cython ;for faster binaries
+           python-mujson
+           python-msgpack
+           python-pytest
+           python-pytest-runner
+           python-pyyaml
+           python-rapidjson
+           python-requests
+           python-testtools
+           python-ujson))
     (home-page "https://falconframework.org")
     (synopsis
      "Web framework for building APIs and application backends")
@@ -608,7 +684,7 @@ classes
          "12pym7hwsbd8b0c1azn95nas8gm3f1qpr6lpyx0958xm65ffr20p"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-falcon" ,python-falcon)))
+     (list python-falcon))
     (home-page
      "https://github.com/lwcolton/falcon-cors")
     (synopsis "Falcon @dfn{cross-origin resource sharing} (CORS) library")
@@ -621,20 +697,19 @@ over a different origin than that of the web application.")
 (define-public python-furl
   (package
     (name "python-furl")
-    (version "2.0.0")
+    (version "2.1.3")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "furl" version))
         (sha256
           (base32
-            "1v2lakx03d5w8954a39ki44xv5mllnq0a0avhxykv9hrzg0yvjpx"))))
+            "0knc76pm8pzigs3bpx9fccfsfxqrgblqphar46hq9i364vz8hqas"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-orderedmultidict" ,python-orderedmultidict)))
+     (list python-six python-orderedmultidict))
     (native-inputs
-     `(("python-flake8" ,python-flake8)))
+     (list python-flake8))
     (home-page "https://github.com/gruns/furl")
     (synopsis "URL manipulation in Python")
     (description "Furl provides an easy-to-use alternative to the
@@ -679,10 +754,8 @@ other HTTP libraries.")
      ;; The tests attempt to access external web servers, so we cannot run them.
      '(#:tests? #f))
     (propagated-inputs
-     `(("python-colorama" ,python-colorama)
-       ("python-pygments" ,python-pygments)
-       ("python-requests" ,python-requests)
-       ("python-requests-toolbelt" ,python-requests-toolbelt-0.9.1)))
+     (list python-colorama python-pygments python-requests
+           python-requests-toolbelt))
     (home-page "https://httpie.io")
     (synopsis "cURL-like tool for humans")
     (description
@@ -713,7 +786,7 @@ HTTP servers, RESTful APIs, and web services.")
            (lambda _
              (invoke "pytest" "test/"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/Alir3z4/html2text")
     (synopsis "Convert HTML into plain text")
     (description "html2text takes HTML and converts it into plain ASCII text
@@ -721,23 +794,10 @@ which is also valid markdown.  html2text was originally written by Aaron
 Swartz.")
     (license license:gpl3+)))
 
-(define-public python2-html2text
-  (let ((base (package-with-python2 python-html2text)))
-    (package
-      (inherit base)
-      ;; This is the last version with support for Python 2.
-      (version "2019.8.11")
-      (source (origin
-                (method url-fetch)
-                (uri (pypi-uri "html2text" version))
-                (sha256
-                 (base32
-                  "0ppgjplg06kmv9sj0x8p7acczcq2mcfgk1jdjwm4w5w40b0vj5pm")))))))
-
 (define-public python-jose
   (package
     (name "python-jose")
-    (version "3.2.0")
+    (version "3.3.0")
     (home-page "https://github.com/mpdavis/python-jose")
     (source (origin
               (method git-fetch)
@@ -745,7 +805,7 @@ Swartz.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1xmnf8whzv2gnkkdv0fqcn9qwmcc7y647p4kw9fi3lvcp9kch8vi"))))
+                "18whsdpllg8574ma4r0qawkgw4nam6lsf63pi6761j38rvl84lg9"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -757,15 +817,11 @@ Swartz.")
                  (format #t "test suite not run~%"))
              #t)))))
     (native-inputs
-     `(;; All native inputs are for tests.
-       ("python-pyasn1" ,python-pyasn1)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-runner" ,python-pytest-runner)))
-    (propagated-inputs
-     `(("python-cryptography" ,python-cryptography)
-       ("python-rsa" ,python-rsa)
-       ("python-six" ,python-six)))
+     (list ;; All native inputs are for tests.
+           python-pyasn1 python-pytest python-pytest-cov
+           python-pytest-runner))
+    (propagated-inputs
+     (list python-cryptography python-ecdsa python-rsa python-six))
     (synopsis "JOSE implementation in Python")
     (description
      "The @dfn{JavaScript Object Signing and Encryption} (JOSE) technologies
@@ -774,36 +830,67 @@ JSON Web Algorithms (JWA) - collectively can be used to encrypt and/or sign
 content using a variety of algorithms.")
     (license license:expat)))
 
+(define-public python-pyscss
+  (package
+    (name "python-pyscss")
+    (version "1.3.7")
+    (source
+     (origin
+       (method git-fetch)               ; no tests in PyPI release
+       (uri (git-reference
+             (url "https://github.com/Kronuz/pyScss")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0701hziiiw67blafgpmjhzspmrss8mfvif7fw0rs8fikddwwc9g6"))))
+    (build-system python-build-system)
+    (arguments
+     ;; XXX: error in test collection, possible incompatibility with Pytest 6.
+     `(#:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "python" "-m" "pytest" "--pyargs" "scss")))))))
+    (native-inputs
+     (list python-pytest python-pytest-cov))
+    (inputs
+     (list pcre))
+    (home-page "https://github.com/Kronuz/pyScss")
+    (synopsis "Scss compiler for Python")
+    (description "@code{pyScss} is a compiler for Sass, a superset language of
+CSS3 that adds programming capabilities and some other syntactic sugar.")
+    (license license:expat)))
+
 (define-public python-jsonpickle
   (package
     (name "python-jsonpickle")
-    (version "1.4.1")
+    (version "1.5.2")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "jsonpickle" version))
               (sha256
                (base32
-                "1fn86z468hamw8njh2grw2xdhsm7g48dyxs3lw0n10nn1g6vgm78"))))
+                "0n93h9b9ad58lxdfbvgsh4b25mkg146qikzcgghyc75vjk7rp2cy"))))
     (build-system python-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (replace 'check
                     (lambda _
-                      (setenv "PYTHONPATH"
-                              (string-append "./build/lib:"
-                                             (getenv "PYTHONPATH")))
                       (invoke "pytest" "-vv"
                               ;; Prevent running the flake8 and black
                               ;; pytest plugins, which only tests style
                               ;; and frequently causes harmless failures.
                               "-o" "addopts=''"))))))
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-toml" ,python-toml)  ;XXX: for setuptools_scm[toml]
-       ;; For tests.
-       ("python-numpy" ,python-numpy)
-       ("python-pandas" ,python-pandas)
-       ("python-pytest" ,python-pytest)))
+     (list python-setuptools-scm
+           python-toml ;XXX: for setuptools_scm[toml]
+           ;; For tests.
+           python-numpy
+           python-pandas
+           python-pytest))
     (home-page "https://jsonpickle.github.io/")
     (synopsis "Serialize object graphs into JSON")
     (description
@@ -823,17 +910,14 @@ object graph to and from JSON.")
         (base32 "01sddjxy3rznh63hnl5lbv1hhk6xyiviwmkiw4x7v4ap35fb3lrp"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-beautifulsoup4" ,python-beautifulsoup4)
-       ("python-lxml" ,python-lxml)
-       ("python-requests" ,python-requests)
-       ("python-six" ,python-six)))
+     (list python-beautifulsoup4 python-lxml python-requests python-six))
     (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)))
+     (list python-pytest-cov
+           python-pytest-flake8
+           python-pytest-httpbin
+           python-pytest-mock
+           python-pytest-runner
+           python-requests-mock))
     (home-page "https://mechanicalsoup.readthedocs.io/")
     (synopsis "Python library for automating website interaction")
     (description
@@ -845,13 +929,13 @@ follow links and submit forms.  It doesn’t do JavaScript.")
 (define-public python-hyperframe
   (package
     (name "python-hyperframe")
-    (version "5.2.0")
+    (version "6.0.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "hyperframe" version))
        (sha256
-        (base32 "07xlf44l1cw0ghxx46sbmkgzil8vqv8kxwy42ywikiy35izw3xd9"))))
+        (base32 "055951gyhnjqpa2al52rj34g8yrls9inyn56n7nfkj0x4d300ldf"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -862,7 +946,7 @@ follow links and submit forms.  It doesn’t do JavaScript.")
                (add-installed-pythonpath inputs outputs)
                (invoke "pytest" "-vv" "test")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/python-hyper/hyperframe")
     (synopsis "HTTP/2 framing layer for Python")
     (description
@@ -874,7 +958,7 @@ into HTTP/2 frames.")
 (define-public python-hpack
   (package
     (name "python-hpack")
-    (version "3.0.0")
+    (version "4.0.0")
     (source
      (origin
        ;; PyPI tarball is missing some files necessary for the tests.
@@ -884,7 +968,7 @@ into HTTP/2 frames.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0w8hkz50a6lzkmgi41ryicm0mh9ca9cx29pm3s0xlpn0vs29xrmd"))))
+        (base32 "11qdayvz5a8zlzdcdm37f2z1fgnl67pz6j8xj2dz5rfa5lds29yq"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -893,12 +977,9 @@ into HTTP/2 frames.")
            (lambda* (#:key tests? inputs outputs #:allow-other-keys)
              (when tests?
                (add-installed-pythonpath inputs outputs)
-               (invoke "pytest" "-vv" "test" "-k"
-                       ;; This test will be fixed in the next version. See:
-                       ;; https://github.com/python-hyper/hpack/issues/168.
-                       "not test_get_by_index_out_of_range")))))))
+               (invoke "pytest" "-vv" "test")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://hyper.rtfd.org")
     (synopsis "Pure-Python HPACK header compression")
     (description
@@ -909,13 +990,13 @@ for use in Python programs that implement HTTP/2.")
 (define-public python-h11
   (package
     (name "python-h11")
-    (version "0.9.0")
+    (version "0.12.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "h11" version))
        (sha256
-        (base32 "1qfad70h59hya21vrzz8dqyyaiqhac0anl2dx3s3k80gpskvrm1k"))))
+        (base32 "0hk0nll6qazsambp3kl8cxxsbl4gv5y9252qadyk0jky0sv2q8j7"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -925,7 +1006,7 @@ for use in Python programs that implement HTTP/2.")
              (when tests?
                (invoke "pytest" "-vv")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/python-hyper/h11")
     (synopsis "Pure-Python, bring-your-own-I/O implementation of HTTP/1.1")
     (description
@@ -938,13 +1019,13 @@ and that could be anything you want.")
 (define-public python-h2
   (package
     (name "python-h2")
-    (version "3.2.0")
+    (version "4.1.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "h2" version))
        (sha256
-        (base32 "051gg30aca26rdxsmr9svwqm06pdz9bv21ch4n0lgi7jsvml2pw7"))))
+        (base32 "1fraip114fm1ha5w37pdc0sk8dn9pb0ck267zrwwpap7zc4clfm8"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -953,13 +1034,12 @@ and that could be anything you want.")
            (lambda* (#:key tests? inputs outputs #:allow-other-keys)
              (when tests?
                (add-installed-pythonpath inputs outputs)
-               (invoke "pytest" "-vv" "test")))))))
+               (invoke "python" "-m" "pytest" "-vv" "test")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-hypothesis-6.23 python-pytest))
     (propagated-inputs
-     `(("python-hpack" ,python-hpack)
-       ("python-hyperframe" ,python-hyperframe)))
-    (home-page "https://github.com/python-hyper/hyper-h2")
+     (list python-hpack python-hyperframe))
+    (home-page "https://github.com/python-hyper/h2")
     (synopsis "HTTP/2 State-Machine based protocol implementation")
     (description
      "This module contains a pure-Python implementation of a HTTP/2 protocol
@@ -986,7 +1066,7 @@ Python HTTP implementation.")
        ;; dependencies
        #:tests? #f))
     (propagated-inputs
-     `(("python-tornado" ,python-tornado)))
+     (list python-tornado))
     (home-page "https://github.com/mrjoes/sockjs-tornado/")
     (synopsis
      "SockJS Python server implementation on top of the Tornado framework")
@@ -1001,6 +1081,28 @@ between a web browser and web server.")
 (define-public python2-sockjs-tornado
   (package-with-python2 python-sockjs-tornado))
 
+(define-public python-flask-assets
+  (package
+    (name "python-flask-assets")
+    (version "2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "Flask-Assets" version))
+       (sha256
+        (base32 "1hmqldxc7zciksmcl35jx0wbyrrxc7vk2a57mmmd8i07whsymz8x"))))
+    (build-system python-build-system)
+    (arguments
+     ;; Tests require python-flask-script which is incompatible with Flask2.
+     `(#:tests? #f))
+    (propagated-inputs
+     (list python-flask python-webassets))
+    (home-page "https://github.com/miracle2k/flask-assets")
+    (synopsis "Asset management for Flask")
+    (description "This package integrates @code{webassets} with Flask, adding
+support for merging, minifying and compiling CSS and Javascript files.")
+    (license license:bsd-2)))
+
 (define-public python-flask-babel
   (package
     (name "python-flask-babel")
@@ -1020,10 +1122,7 @@ between a web browser and web server.")
                       (with-directory-excursion "tests"
                         (invoke "python" "tests.py")))))))
     (propagated-inputs
-     `(("python-flask" ,python-flask)
-       ("python-babel" ,python-babel)
-       ("python-jinja2" ,python-jinja2)
-       ("python-pytz" ,python-pytz)))
+     (list python-flask python-babel python-jinja2 python-pytz))
     (home-page "https://github.com/python-babel/flask-babel")
     (synopsis "Add i18n/l10n support to Flask applications")
     (description "This package implements internationalization and localization
@@ -1034,20 +1133,18 @@ both of which are installed automatically if you install this library.")
 (define-public python-flask-cors
   (package
     (name "python-flask-cors")
-    (version "3.0.9")
+    (version "3.0.10")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "Flask-Cors" version))
               (sha256
                (base32
-                "1f36hkaxc92zn12f88fkzwifdvlvsnmlp1dv3p5inpcc500c3kvb"))))
+                "1pl16615fn1pc5n0vdrqlxm45mqsdjjxqv3gfkrs111v7wwkj25n"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-flask" ,python-flask)
-       ("python-nose" ,python-nose)
-       ("python-packaging" ,python-packaging)))
+     (list python-flask python-nose python-packaging))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://flask-cors.readthedocs.io/en/latest/")
     (synopsis "Handle Cross-Origin Resource Sharing with Flask")
     (description
@@ -1070,10 +1167,9 @@ Origin Resource Sharing}, making cross-origin AJAX possible.")
     (arguments
      '(#:tests? #f))        ; Tests seem to be incompatible with latest python
     (propagated-inputs
-     `(("python-markdown" ,python-markdown)
-       ("python-flask" ,python-flask)))
+     (list python-markdown python-flask))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (home-page "https://github.com/dcolish/flask-markdown")
     (synopsis "Small extension to help with using Markdown in Flask")
     (description
@@ -1094,11 +1190,9 @@ into Jinja2 by default.")
             "12gm6hq3lvlj0ddw8p6lk5pky8jk3pw758ihffjl49shnnzc68zl"))))
     (build-system python-build-system)
     (native-inputs
-      `(("python-coverage" ,python-coverage)
-        ("python-mock" ,python-mock)))
+      (list python-coverage python-mock))
     (propagated-inputs
-      `(("python-flask" ,python-flask)
-        ("python-misaka" ,python-misaka)))
+      (list python-flask python-misaka))
     (home-page "https://github.com/singingwolfboy/flask-misaka/")
     (synopsis "Flask interface to Misaka, a Markdown parsing library")
     (description
@@ -1109,19 +1203,19 @@ the Misaka Markdown parser.")
 (define-public python-flask-session
   (package
     (name "python-flask-session")
-    (version "0.3.2")
+    (version "0.4.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "Flask-Session" version))
        (sha256
         (base32
-         "08s4msg8jzb8vgb9bd491zvrzhrdldxdw6vimb0kx5kgy2xy4s07"))))
+         "0ihzlhdhss8f93p3njzva9rdm7kmhaakdlzz680wmi583wr59vf9"))))
     (build-system python-build-system)
     (arguments
      '(#:tests? #f)) ; Tests require the various storage backends to be present
     (propagated-inputs
-     `(("python-flask" ,python-flask)))
+     (list python-cachelib python-flask))
     (home-page "https://github.com/fengsp/flask-session")
     (synopsis "Adds server-side session support to your Flask application")
     (description
@@ -1143,10 +1237,9 @@ storage.")
             "0vqlhk0hgbsfkh7ybmby93xhlx8dq6pr5blf356ka3z2c41b9rdj"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-webencodings" ,python-webencodings)
-       ;; Required by Calibre 5.
-       ("python-chardet" ,python-chardet)))
+     (list python-six python-webencodings
+           ;; Required by Calibre 5.
+           python-chardet))
     (arguments
      `(#:test-target "check"))
     (home-page
@@ -1189,12 +1282,11 @@ and written in Python.")
                 "13yl3vnf3sxl05m0nhpngnrz3g1jvyahd33lys3m3hfb91l8zzi5"))))
     (build-system python-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libxml2" ,libxml2)))
+     (list libxml2))
     (propagated-inputs
-     `(("python-lxml" ,python-lxml)
-       ("python-beautifulsoup4" ,python-beautifulsoup4)))
+     (list python-lxml python-beautifulsoup4 python-chardet))
     (home-page "https://html5-parser.readthedocs.io")
     (synopsis "Fast C-based HTML5 parsing for Python")
     (description "This package provides a fast implementation of the HTML5
@@ -1205,9 +1297,6 @@ C, yielding parse times that can be a thirtieth of the html5lib parse times.")
     ;; indicate ASL2.0, including the LICENSE file for the whole project.
     (license (list license:asl2.0 license:gpl3))))
 
-(define-public python2-html5-parser
-  (package-with-python2 python-html5-parser))
-
 (define-public python-minio
   (package
     (name "python-minio")
@@ -1227,15 +1316,10 @@ C, yielding parse times that can be a thirtieth of the html5lib parse times.")
                       (delete-file "tests/unit/credentials_test.py")
                       #t)))))
     (native-inputs
-     `(("python-faker" ,python-faker)
-       ("python-mock" ,python-mock)
-       ("python-nose" ,python-nose)))
-    (propagated-inputs
-     `(("python-certifi" ,python-certifi)
-       ("python-configparser" ,python-configparser)
-       ("python-dateutil" ,python-dateutil)
-       ("python-pytz" ,python-pytz)
-       ("python-urllib3" ,python-urllib3)))
+     (list python-faker python-mock python-nose))
+    (propagated-inputs
+     (list python-certifi python-configparser python-dateutil python-pytz
+           python-urllib3))
     (home-page "https://github.com/minio/minio-py")
     (synopsis "Programmatically access Amazon S3 from Python")
     (description
@@ -1267,11 +1351,9 @@ Amazon S3 compatible object storage server.")
                         (setenv "PYCURL_SSL_LIBRARY" "gnutls")
                         #t)))))
     (native-inputs
-     `(("python-nose" ,python-nose)
-       ("python-bottle" ,python-bottle)))
+     (list python-nose python-bottle))
     (inputs
-     `(("curl" ,curl)
-       ("gnutls" ,gnutls)))
+     (list curl gnutls))
     (home-page "http://pycurl.io/")
     (synopsis "Lightweight Python wrapper around libcurl")
     (description "Pycurl is a lightweight wrapper around libcurl.  It provides
@@ -1303,7 +1385,7 @@ high-speed transfers via libcurl and frequently outperforms alternatives.")
              (invoke "py.test" "-v" "webencodings/tests.py")
              #t)))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/SimonSapin/python-webencodings")
     (synopsis "Character encoding aliases for legacy web content")
     (description
@@ -1341,45 +1423,20 @@ is Python’s.")
      `(#:phases
        (modify-phases %standard-phases
         (replace 'check
-          (lambda _
-            (invoke "coverage" "run" "-m"
-                    "unittest" "openid.test.test_suite"))))))
-    (properties `((python2-variant . ,(delay python2-openid))))
+          (lambda* (#:key tests? #:allow-other-keys)
+            (when tests?
+              (invoke "coverage" "run" "-m"
+                      "unittest" "openid.test.test_suite")))))))
     (propagated-inputs
-     `(("python-defusedxml" ,python-defusedxml)))
+     (list python-defusedxml))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-psycopg2" ,python-psycopg2)
-       ("python-django" ,python-django)))
+     (list python-coverage python-psycopg2 python-django))
     (home-page "https://github.com/necaris/python3-openid")
     (synopsis "OpenID support for servers and consumers")
     (description "This library provides OpenID authentication for Python, both
 for clients and servers.")
     (license license:asl2.0)))
 
-(define-public python2-openid
-  (package
-    (name "python2-openid")
-    (version "2.2.5")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "python-openid" version))
-       (sha256
-        (base32
-         "1vvhxlghjan01snfdc4k7ykd80vkyjgizwgg9bncnin8rqz1ricj"))))
-    (build-system python-build-system)
-    (arguments
-     ;; Python 3 support is in `python3-openid`, a separate package.
-     `(#:python ,python-2
-       ;; Tests aren't initialized correctly.
-       #:tests? #f))
-    (home-page "https://github.com/openid/python-openid")
-    (synopsis "OpenID support for servers and consumers")
-    (description "This library provides OpenID authentication for Python, both
-for clients and servers.")
-    (license license:asl2.0)))
-
 (define-public python-cssutils
   (package
     (name "python-cssutils")
@@ -1393,7 +1450,7 @@ for clients and servers.")
           "1bxchrbqzapwijap0yhlxdil1w9bmwvgx77aizlkhc2mcxjg1z52"))))
     (build-system python-build-system)
     (native-inputs
-     `(("unzip" ,unzip)))               ; for unpacking the source
+     (list unzip))               ; for unpacking the source
     (arguments
      `(#:tests? #f))                    ; tests require python-pbr < 1.7.0
     (home-page "http://cthedot.de/cssutils/")
@@ -1405,9 +1462,6 @@ Cascading Style Sheets.  Currently it provides a DOM only and no rendering
 options.")
     (license license:lgpl3+)))
 
-(define-public python2-cssutils
-  (package-with-python2 python-cssutils))
-
 (define-public python-css-parser
   (package
     (inherit python-cssutils)
@@ -1430,9 +1484,6 @@ It's a fork of cssutils 1.0.2, updated and modified for parsing ebooks, due to
 cssutils not receiving updates as of 1.0.2.")
     (license license:lgpl3+)))
 
-(define-public python2-css-parser
-  (package-with-python2 python-css-parser))
-
 (define-public python-cssselect
   (package
     (name "python-cssselect")
@@ -1454,8 +1505,7 @@ cssutils not receiving updates as of 1.0.2.")
                     (lambda _
                       (invoke "pytest" "-vv"))))))
     (native-inputs
-     `(("python-lxml" ,python-lxml)
-       ("python-pytest" ,python-pytest)))
+     (list python-lxml python-pytest))
     (home-page "https://github.com/scrapy/cssselect")
     (synopsis "CSS3 selector parser and translator to XPath 1.0")
     (description
@@ -1464,9 +1514,6 @@ them to XPath 1.0 expressions.  Such expressions can be used in lxml or
 another XPath engine to find the matching elements in an XML or HTML document.")
     (license license:bsd-3)))
 
-(define-public python2-cssselect
-  (package-with-python2 python-cssselect))
-
 (define-public python-databricks-cli
   (package
     (name "python-databricks-cli")
@@ -1484,25 +1531,16 @@ another XPath engine to find the matching elements in an XML or HTML document.")
      `(#:phases (modify-phases %standard-phases
                   (replace 'check
                     (lambda _
-                      (setenv "PYTHONPATH"
-                              (string-append "./build/lib:"
-                                             (getenv "PYTHONPATH")))
                       (invoke "pytest" "tests" "-vv"
                               ;; XXX: This fails with newer Pytest
                               ;; (upstream uses Pytest 3..).
                               "-k" "not test_get_request_with_list"))))))
     (native-inputs
-     `(;; For tests.
-       ("python-decorator" ,python-decorator)
-       ("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("python-requests-mock" ,python-requests-mock)))
-    (propagated-inputs
-     `(("python-click" ,python-click)
-       ("python-configparser" ,python-configparser)
-       ("python-requests" ,python-requests)
-       ("python-six" ,python-six)
-       ("python-tabulate" ,python-tabulate)))
+     (list ;; For tests.
+           python-decorator python-mock python-pytest python-requests-mock))
+    (propagated-inputs
+     (list python-click python-configparser python-requests python-six
+           python-tabulate))
     (synopsis "Command line interface for Databricks")
     (description
      "The Databricks Command Line Interface is a tool which provides an easy
@@ -1529,9 +1567,6 @@ Databricks REST APIs.")
 contributor license agreement extension for python-openid.")
     (license license:bsd-3)))
 
-(define-public python2-openid-cla
-  (package-with-python2 python-openid-cla))
-
 (define-public python-openid-teams
   (package
     (name "python-openid-teams")
@@ -1552,9 +1587,6 @@ contributor license agreement extension for python-openid.")
 teams extension for python-openid.")
     (license license:bsd-3)))
 
-(define-public python2-openid-teams
-  (package-with-python2 python-openid-teams))
-
 (define-public python-priority
   (package
     (name "python-priority")
@@ -1576,10 +1608,8 @@ teams extension for python-openid.")
                      ;; This test exceeded the Hypothesis deadline.
                      "not test_period_of_repetition"))))))
     (native-inputs
-     `(("python-hypothesis" ,python-hypothesis)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-xdist" ,python-pytest-xdist)))
+     (list python-hypothesis python-pytest python-pytest-cov
+           python-pytest-xdist))
     (home-page "https://python-hyper.org/projects/priority/en/latest/")
     (synopsis "Pure-Python implementation of the HTTP/2 priority tree")
     (description
@@ -1606,9 +1636,9 @@ set out in RFC 7540 Section 5.3 (Stream Priority).")
              (add-installed-pythonpath inputs outputs)
              (invoke "pytest" "-vv" "test"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (propagated-inputs
-     `(("python-h11" ,python-h11)))
+     (list python-h11))
     (home-page "https://github.com/python-hyper/wsproto/")
     (synopsis "WebSockets state-machine based protocol implementation")
     (description
@@ -1618,39 +1648,41 @@ choose to use, ensuring that you can communicate via WebSockets, as defined in
 RFC6455, regardless of your programming paradigm.")
     (license license:expat)))
 
-(define-public python-hypercorn
+(define-public hypercorn
   (package
-    (name "python-hypercorn")
-    (version "0.10.2")
+    (name "hypercorn")
+    (version "0.11.2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "Hypercorn" version))
        (sha256
-        (base32 "15dgy47a18w2ls3hwykra1cyf7yzxmfjqnsqml482p12cxr2xwqr"))))
+        (base32 "16kai5d12f05jr89mj611zslxqri4cd7ixcgd6yhl211qlcyg8av"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (add-installed-pythonpath inputs outputs)
-             (invoke "pytest" "-vv"))))))
-    (propagated-inputs
-     `(("python-h11" ,python-h11)
-       ("python-h2" ,python-h2)
-       ("python-priority" ,python-priority)
-       ("python-toml" ,python-toml)
-       ("python-typing-extensions" ,python-typing-extensions)
-       ("python-wsproto" ,python-wsproto)))
+           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "python" "-m" "pytest")))))))
+    ;; Propagate because Hypercorn also exposes functionality over a module.
+    (propagated-inputs
+     (list python-h11
+           python-h2
+           python-priority
+           python-toml
+           python-typing-extensions
+           python-wsproto))
     (native-inputs
-     `(("python-hypothesis" ,python-hypothesis)
-       ("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-asyncio" ,python-pytest-asyncio)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-trio" ,python-pytest-trio)
-       ("python-trio" ,python-trio)))
+     (list python-hypothesis
+           python-mock
+           python-pytest
+           python-pytest-asyncio
+           python-pytest-cov
+           python-pytest-trio
+           python-trio))
     (home-page "https://gitlab.com/pgjones/hypercorn/")
     (synopsis "ASGI Server based on Hyper libraries")
     (description
@@ -1660,6 +1692,9 @@ WebSockets (over HTTP/1 and HTTP/2), ASGI/2, and ASGI/3 specifications.  It can
 utilise asyncio, uvloop, or trio worker types.")
     (license license:expat)))
 
+(define-public python-hypercorn
+  (deprecated-package "python-hypercorn" hypercorn))
+
 (define-public python-querystring-parser
   (package
     (name "python-querystring-parser")
@@ -1682,7 +1717,7 @@ utilise asyncio, uvloop, or trio worker types.")
                          "True"))
                       (invoke "python" "querystring_parser/tests.py"))))))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://github.com/bernii/querystring-parser")
     (synopsis "QueryString parser that correctly handles nested dictionaries")
     (description
@@ -1716,7 +1751,7 @@ data.")
        ;;       #t)))
        #:tests? #f))
     (native-inputs
-     `(("python-certifi" ,python-certifi)))
+     (list python-certifi))
     (home-page "https://www.tornadoweb.org/")
     (synopsis "Python web framework and asynchronous networking library")
     (description
@@ -1748,7 +1783,7 @@ connection to each user.")
              (invoke "python" "-m" "tornado.test.runtests")
              #t)))))
     (native-inputs
-     `(("python-certifi" ,python-certifi)))
+     (list python-certifi))
     (home-page "https://www.tornadoweb.org/")
     (synopsis "Python web framework and asynchronous networking library")
     (description
@@ -1781,7 +1816,7 @@ connection to each user.")
         (base32 "0hyc5f0a09i5yb99pk4bxpg6w9ichbrb5cv7hc9hff7rxd8w0v0x"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-tornado" ,python-tornado)))
+     (list python-tornado))
     (home-page "https://github.com/gvalkov/tornado-http-auth")
     (synopsis "Digest and basic authentication module for Tornado")
     (description
@@ -1802,10 +1837,9 @@ web framework, either via the basic or digest authentication schemes.")
          "1smvra3sc9sg64w49kfn5yhagshq3x55839748ck5dvxvk4hgza6"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-tornado" ,python-tornado-6)
-       ("python-ptyprocess" ,python-ptyprocess)))
+     (list python-tornado-6 python-ptyprocess))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1829,12 +1863,9 @@ term.js Javascript terminal emulator library.")
                "0kjj2v2dvmnpdd5h5gk9rzz0f54rhjb0yiz3zg65bmp65slfw65d"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-httplib2" ,python-httplib2)
-       ("python-requests" ,python-requests)
-       ("python-urllib3" ,python-urllib3)))
+     (list python-pytest python-httplib2 python-requests python-urllib3))
     (synopsis "Puts a WSGI application in place of a real URI for testing")
     (description "Wsgi_intercept installs a WSGI application in place of a real
 URI for testing.  Testing a WSGI application normally involves starting a
@@ -1859,7 +1890,7 @@ your Web app.")
           "026i3z99nr3px75isa9mbnky5i7rffiv4d124h5kxfjjsxz92fma"))))
     (build-system python-build-system)
     (native-inputs
-      `(("python-nose" ,python-nose)))
+      (list python-nose))
     (home-page "https://webob.org/")
     (synopsis "WSGI request and response object")
     (description
@@ -1907,10 +1938,8 @@ dispatching systems can be built.")
     (build-system python-build-system)
     (arguments '(#:tests? #f))  ; test suite can't find python-zope-testing
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-nose" ,python-nose)
-       ("python-zope-event" ,python-zope-event)
-       ("python-zope-testing" ,python-zope-testing)))
+     (list python-coverage python-nose python-zope-event
+           python-zope-testing))
     (home-page "https://github.com/zopefoundation/zope.interface")
     (synopsis "Python implementation of the \"design by contract\"
 methodology")
@@ -1938,26 +1967,41 @@ conforming to a given API or contract.")
      '(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda _
-             (invoke "zope-testrunner" "--test-path=src"))))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (if tests?
+                 (invoke "zope-testrunner" "--test-path=src")
+                 (format #t "test suite not run~%")))))))
     (native-inputs
      `(("python-zope-testrunner" ,python-zope-testrunner-bootstrap)))
     (propagated-inputs
-     `(("python-zope-interface" ,python-zope-interface)))
+     (list python-zope-interface))
     (home-page "https://pypi.org/project/zope.exceptions/")
     (synopsis "Zope exceptions")
     (description "Zope.exceptions provides general-purpose exception types
 that have uses outside of the Zope framework.")
     (license license:zpl2.1)))
 
-(define-public python-zope-exceptions-bootstrap
+(define (python-zope-bootstrap-package orig)
   (package
-    (inherit python-zope-exceptions)
-    (arguments `(#:tests? #f))
+    (inherit orig)
+    (name (string-append (package-name orig) "-bootstrap"))
+    (arguments
+     (if (null? (package-arguments orig))
+         `(#:tests? #f
+           #:phases (modify-phases %standard-phases
+                      (delete 'sanity-check)))
+         (substitute-keyword-arguments (package-arguments orig)
+           ((#:tests? _ #f) #f)
+           ((#:phases phases '%standard-phases)
+            `(modify-phases ,phases
+               (delete 'sanity-check))))))
     (propagated-inputs `())
     (native-inputs `())
     (properties `((hidden? . #t)))))
 
+(define-public python-zope-exceptions-bootstrap
+  (python-zope-bootstrap-package python-zope-exceptions))
+
 (define-public python2-zope-exceptions
   (package-with-python2 python-zope-exceptions))
 
@@ -1995,13 +2039,19 @@ forms, HTTP servers, regular expressions, and more.")
          "0jyyf1dcz156q95x2y7yw2v420q2xn3cff0c5aci7hmdmcbn0gc7"))))
     (build-system python-build-system)
     (arguments
-     '(#:tests? #f)) ; FIXME: Tests can't find zope.interface.
+     '(#:tests? #f                    ;FIXME: Tests can't find zope.interface.
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'remove-problematic-test
+           (lambda _
+             ;; This test contains invalid syntax, which breaks bytecode
+             ;; compilation.  For simplicity just remove it.
+             (delete-file
+              "src/zope/testrunner/tests/testrunner-ex/sample2/badsyntax.py"))))))
     (native-inputs
-     `(("python-zope-testing" ,python-zope-testing)))
+     (list python-zope-testing))
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-zope-exceptions" ,python-zope-exceptions)
-       ("python-zope-interface" ,python-zope-interface)))
+     (list python-six python-zope-exceptions python-zope-interface))
     (home-page "https://pypi.org/project/zope.testrunner/")
     (synopsis "Zope testrunner script")
     (description "Zope.testrunner provides a script for running Python
@@ -2010,8 +2060,7 @@ tests.")
 
 (define-public python-zope-testrunner-bootstrap
   (package
-    (inherit python-zope-testrunner)
-    (arguments `(#:tests? #f))
+    (inherit (python-zope-bootstrap-package python-zope-testrunner))
     (propagated-inputs
      `(("python-six" ,python-six)
        ("python-zope-exceptions" ,python-zope-exceptions-bootstrap)))
@@ -2033,10 +2082,9 @@ tests.")
          "0ndhn4w1qgwkfbwf9vm2bgq418z5g0wmfsgl0d9nz62cd0mi8d4m"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-zope-testrunner" ,python-zope-testrunner)))
+     (list python-coverage python-zope-testrunner))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://pypi.org/project/zope.i18nmessageid/")
     (synopsis "Message identifiers for internationalization")
     (description "Zope.i18nmessageid provides facilities for declaring
@@ -2068,12 +2116,10 @@ internationalized messages within program source text.")
                (invoke "zope-testrunner" "--test-path=src")
                #t))))))
     (propagated-inputs
-     `(("python-zope-event" ,python-zope-event)
-       ("python-zope-interface" ,python-zope-interface)))
+     (list python-zope-event python-zope-interface))
     (native-inputs
-     `(("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
-       ("python-zope-testing" ,python-zope-testing)
-       ("python-zope-testrunner" ,python-zope-testrunner)))
+     (list python-zope-i18nmessageid python-zope-testing
+           python-zope-testrunner))
     (home-page "https://pypi.org/project/zope.schema/")
     (synopsis "Zope data schemas")
     (description "Zope.scheme provides extensions to zope.interface for
@@ -2095,13 +2141,10 @@ defining data schemas.")
                 "0g6vrl7y27z9cj5xyrww9xlzk4npj55mgmlrcd9d2nj08jn2pw79"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-manuel" ,python-manuel)
-       ("python-zope-testing" ,python-zope-testing)
-       ("python-zope-testrunner" ,python-zope-testrunner)))
+     (list python-manuel python-zope-testing python-zope-testrunner))
     (propagated-inputs
-     `(("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
-       ("python-zope-interface" ,python-zope-interface)
-       ("python-zope-schema" ,python-zope-schema)))
+     (list python-zope-i18nmessageid python-zope-interface
+           python-zope-schema))
     (home-page "https://pypi.org/project/zope.configuration/")
     (synopsis "Zope Configuration Markup Language")
     (description "Zope.configuration implements ZCML, the Zope Configuration
@@ -2109,11 +2152,7 @@ Markup Language.")
     (license license:zpl2.1)))
 
 (define-public python-zope-configuration-bootstrap
-  (package
-    (inherit python-zope-configuration)
-    (arguments `(#:tests? #f))
-    (native-inputs `())
-    (properties `((hidden? . #t)))))
+  (python-zope-bootstrap-package python-zope-configuration))
 
 (define-public python2-zope-configuration
   (package-with-python2 python-zope-configuration))
@@ -2137,7 +2176,7 @@ Markup Language.")
            (lambda _
              (invoke "zope-testrunner" "--test-path=src" "\\[]"))))))
     (propagated-inputs
-     `(("python-zope-interface" ,python-zope-interface)))
+     (list python-zope-interface))
     (native-inputs
      `(("python-zope-component" ,python-zope-component-bootstrap)
        ("python-zope-location" ,python-zope-location-bootstrap)
@@ -2162,10 +2201,9 @@ Markup Language.")
          "14h7nyfbl5vpfk0rbviy4ygdfx0yx5kncvg6jpbdb0dhwna0ssm6"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-zope-security" ,python-zope-security-bootstrap)
-       ("python-zope-testrunner" ,python-zope-testrunner)))
+     (list python-zope-security-bootstrap python-zope-testrunner))
     (propagated-inputs
-     `(("python-zope-interface" ,python-zope-interface)))
+     (list python-zope-interface))
     (home-page "https://pypi.org/project/zope.proxy/")
     (synopsis "Generic, transparent proxies")
     (description "Zope.proxy provides generic, transparent proxies for Python.
@@ -2176,11 +2214,7 @@ brokering, etc.) for which the proxy is responsible.")
     (license license:zpl2.1)))
 
 (define-public python-zope-proxy-bootstrap
-  (package
-    (inherit python-zope-proxy)
-    (arguments `(#:tests? #f))
-    (native-inputs `())
-    (properties `((hidden? . #t)))))
+  (python-zope-bootstrap-package python-zope-proxy))
 
 (define-public python2-zope-proxy
   (package-with-python2 python-zope-proxy))
@@ -2198,8 +2232,7 @@ brokering, etc.) for which the proxy is responsible.")
           "0hc82lfr7bk53nvbxvjkibkarngyrzgfk2i6bg8wshl0ly0pdl19"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-zope-testing" ,python-zope-testing)))
+     (list python-coverage python-zope-testing))
     (home-page "https://github.com/zopefoundation/zope.hookable")
     (synopsis "Zope hookable")
     (description "This package supports the efficient creation of hookable
@@ -2225,11 +2258,9 @@ that imported it, will see the change.")
     (arguments
      '(#:tests? #f)) ; FIXME: Tests can't find zope.interface.
     (native-inputs
-     `(("python-zope-testrunner" ,python-zope-testrunner)))
+     (list python-zope-testrunner))
     (propagated-inputs
-     `(("python-zope-interface" ,python-zope-interface)
-       ("python-zope-proxy" ,python-zope-proxy)
-       ("python-zope-schema" ,python-zope-schema)))
+     (list python-zope-interface python-zope-proxy python-zope-schema))
     (home-page "https://pypi.org/project/zope.location/")
     (synopsis "Zope location library")
     (description "Zope.location implements the concept of \"locations\" in
@@ -2237,11 +2268,7 @@ Zope3, which are are special objects that have a structural location.")
     (license license:zpl2.1)))
 
 (define-public python-zope-location-bootstrap
-  (package
-    (inherit python-zope-location)
-    (arguments `(#:tests? #f))
-    (native-inputs `())
-    (properties `((hidden? . #t)))))
+  (python-zope-bootstrap-package python-zope-location))
 
 (define-public python2-zope-location
   (package-with-python2 python-zope-location))
@@ -2259,19 +2286,19 @@ Zope3, which are are special objects that have a structural location.")
          "11lfw67cigscfax9c5j63xcvz2qcj724zx5fcdqyc94am2glim0h"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-zope-component" ,python-zope-component)
-       ("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
-       ("python-zope-interface" ,python-zope-interface)
-       ("python-zope-location" ,python-zope-location)
-       ("python-zope-proxy" ,python-zope-proxy)
-       ("python-zope-schema" ,python-zope-schema)))
+     (list python-zope-component
+           python-zope-i18nmessageid
+           python-zope-interface
+           python-zope-location
+           python-zope-proxy
+           python-zope-schema))
     (native-inputs
-     `(("python-btrees" ,python-btrees)
-       ("python-zope-component" ,python-zope-component-bootstrap)
-       ("python-zope-configuration" ,python-zope-configuration-bootstrap)
-       ("python-zope-location" ,python-zope-location-bootstrap)
-       ("python-zope-testing" ,python-zope-testing)
-       ("python-zope-testrunner" ,python-zope-testrunner)))
+     (list python-btrees
+           python-zope-component-bootstrap
+           python-zope-configuration-bootstrap
+           python-zope-location-bootstrap
+           python-zope-testing
+           python-zope-testrunner))
     (home-page "https://pypi.org/project/zope.security/")
     (synopsis "Zope security framework")
     (description "Zope.security provides a generic mechanism to implement
@@ -2280,15 +2307,12 @@ security policies on Python objects.")
 
 (define-public python-zope-security-bootstrap
   (package
-    (inherit python-zope-security)
-    (arguments `(#:tests? #f))
+    (inherit (python-zope-bootstrap-package python-zope-security))
     (propagated-inputs
      `(("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
        ("python-zope-interface" ,python-zope-interface)
        ("python-zope-proxy" ,python-zope-proxy-bootstrap)
-       ("python-zope-schema" ,python-zope-schema)))
-    (native-inputs `())
-    (properties `((hidden? . #t)))))
+       ("python-zope-schema" ,python-zope-schema)))))
 
 (define-public python2-zope-security
   (package-with-python2 python-zope-security))
@@ -2309,9 +2333,10 @@ security policies on Python objects.")
      '(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (add-installed-pythonpath inputs outputs)
-             (invoke "python" "setup.py" "test"))))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (if tests?
+                 (invoke "python" "setup.py" "test")
+                 (format #t "test suite not run~%")))))))
     (native-inputs
      `(("python-persistent" ,python-persistent)
        ("python-zope-configuration" ,python-zope-configuration-bootstrap)
@@ -2322,11 +2347,8 @@ security policies on Python objects.")
        ("python-zope-testing" ,python-zope-testing)
        ("python-zope-testrunner" ,python-zope-testrunner)))
     (propagated-inputs
-     `(("python-zope-deferredimport" ,python-zope-deferredimport)
-       ("python-zope-deprecation" ,python-zope-deprecation)
-       ("python-zope-event" ,python-zope-event)
-       ("python-zope-hookable" ,python-zope-hookable)
-       ("python-zope-interface" ,python-zope-interface)))
+     (list python-zope-deferredimport python-zope-deprecation
+           python-zope-event python-zope-hookable python-zope-interface))
     (home-page "https://github.com/zopefoundation/zope.component")
     (synopsis "Zope Component Architecture")
     (description "Zope.component represents the core of the Zope Component
@@ -2335,11 +2357,7 @@ facilities for defining, registering and looking up components.")
     (license license:zpl2.1)))
 
 (define-public python-zope-component-bootstrap
-  (package
-    (inherit python-zope-component)
-    (arguments `(#:tests? #f))
-    (native-inputs `())
-    (properties `((hidden? . #t)))))
+  (python-zope-bootstrap-package python-zope-component))
 
 (define-public python2-zope-component
   (package-with-python2 python-zope-component))
@@ -2357,9 +2375,9 @@ facilities for defining, registering and looking up components.")
           "1q89v54dwniiqypjbwywwdfjdr4kdkqlyqsgrpplgvsygdg39cjp"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-zope-proxy" ,python-zope-proxy)))
+     (list python-zope-proxy))
     (native-inputs
-     `(("python-zope-testrunner" ,python-zope-testrunner)))
+     (list python-zope-testrunner))
     (home-page "https://github.com/zopefoundation/zope.deferredimport")
     (synopsis "Defer imports until used by code")
     (description
@@ -2385,7 +2403,7 @@ deprecation warnings to be issued when a variable is used.")
      '(;; The tests appear to require networking.
        #:tests? #f))
     (propagated-inputs
-     `(("python-pyopenssl" ,python-pyopenssl)))
+     (list python-pyasn1 python-pyopenssl))
     (synopsis "HTTPS support for Python's httplib and urllib2")
     (description "This is a HTTPS client implementation for httplib and urllib2
 based on PyOpenSSL.  PyOpenSSL provides a more fully-featured SSL implementation
@@ -2394,46 +2412,47 @@ verification of the SSL peer.")
     (home-page "https://github.com/cedadev/ndg_httpsclient/")
     (license license:bsd-3)))
 
-;; python2-openssl requires special care, so package-with-python2 is
-;; insufficient.
-(define-public python2-ndg-httpsclient
-  (package/inherit python-ndg-httpsclient
-    (name "python2-ndg-httpsclient")
-    (arguments
-     (substitute-keyword-arguments (package-arguments python-ndg-httpsclient)
-       ((#:python _) python-2)))
-    (propagated-inputs
-     `(("python2-pyopenssl" ,python2-pyopenssl)))))
-
 (define-public python-websocket-client
   (package
     (name "python-websocket-client")
-    (version "0.54.0")
+    (version "1.2.3")
     (source
      (origin
        (method url-fetch)
-       (uri (pypi-uri "websocket_client" version))
+       (uri (pypi-uri "websocket-client" version))
        (sha256
-        (base32
-         "0j88zmikaypf38lvpkf4aaxrjp9j07dmy5ghj7kli0fv3p4n45g5"))))
+        (base32 "1xba9z6b211pandrlk2l5p8wj6gn7yfkpq1sxfbqjl6c19n8258k"))))
     (build-system python-build-system)
-    (propagated-inputs
-     `(("python-six" ,python-six)))
-    (home-page "https://github.com/liris/websocket-client")
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'skip-network-test
+           (lambda _
+             ;; This test requires networking.
+             (substitute* "websocket/tests/test_http.py"
+               (("def testConnect") "def _testConnect"))))
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "pytest" "-vv" "websocket/tests")))))))
+    (native-inputs
+     (list python-pysocks python-pytest python-websockets))
+    (home-page "https://github.com/websocket-client/websocket-client")
     (synopsis "WebSocket client for Python")
     (description "The Websocket-client module provides the low level APIs for
 WebSocket usage in Python programs.")
-    (properties `((python2-variant . ,(delay python2-websocket-client))))
     (license license:lgpl2.1+)))
 
-(define-public python2-websocket-client
-  (let ((base (package-with-python2
-                (strip-python2-variant python-websocket-client))))
-    (package/inherit base
-      (native-inputs
-       `(("python2-backport-ssl-match-hostname"
-          ,python2-backport-ssl-match-hostname)
-         ,@(package-native-inputs base))))))
+(define-public python-websocket-client-0.59
+  (package
+    (inherit python-websocket-client)
+    (version "0.59.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "websocket-client" version))
+       (sha256
+        (base32 "0p0cz2mdissq7iw1n7jrmsfir0jfmgs1dvnpnrx477ffx9hbsxnk"))))))
 
 (define-public python-purl
   (package
@@ -2447,7 +2466,7 @@ WebSocket usage in Python programs.")
           (base32
             "15ibnz1xrh5msmn04j0nr00sz4n7jwx6cwd6zlx99kkz3vpin53m"))))
     (build-system python-build-system)
-    (propagated-inputs `(("python-six" ,python-six)))
+    (propagated-inputs (list python-six))
     (home-page
       "https://github.com/codeinthehole/purl")
     (synopsis
@@ -2477,10 +2496,9 @@ WebSocket usage in Python programs.")
                      ;; This test tries to connect to the internet.
                      "not test_call"))))))
     (propagated-inputs
-     `(("python-requests" ,python-requests)))
+     (list python-requests))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)))
+     (list python-pytest python-pytest-cov))
     (home-page "https://github.com/ithaka/apiron")
     (synopsis "Python wrapper for interacting with RESTful APIs")
     (description
@@ -2504,7 +2522,7 @@ APIs.")
      ;; The test tries to open a connection to a remote server.
      `(#:tests? #f))
     (propagated-inputs
-     `(("python-apiron" ,python-apiron)))
+     (list python-apiron))
     (home-page "https://github.com/teffalump/beren")
     (synopsis "REST client for Orthanc DICOM servers")
     (description
@@ -2514,19 +2532,17 @@ APIs.")
 (define-public python-requests
   (package
     (name "python-requests")
-    (version "2.25.0")
+    (version "2.26.0")
     (source (origin
              (method url-fetch)
              (uri (pypi-uri "requests" version))
              (sha256
               (base32
-               "1y6mb8c0ipd64d5axq2p368yxndp3f966hmabjka2q2a5y9hn6kz"))))
+               "19q73fq7hip7b74fwls3p9x6zwvfwqcwpn6kha3zsgvrrzw5iamq"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-certifi" ,python-certifi)
-       ("python-chardet" ,python-chardet)
-       ("python-idna" ,python-idna)
-       ("python-urllib3" ,python-urllib3)))
+     (list python-certifi python-chardet python-charset-normalizer
+           python-idna python-urllib3))
     (arguments
      ;; FIXME: Some tests require network access.
      '(#:tests? #f))
@@ -2535,26 +2551,17 @@ APIs.")
     (description
      "Requests is a Python HTTP client library.  It aims to be easier to use
 than Python’s urllib2 library.")
-    (license license:asl2.0)))
-
-;; Some software requires an older version of Requests, notably Docker/Docker
-;; Compose.
-(define-public python-requests-2.20
-  (package (inherit python-requests)
-           (version "2.20.1")
-           (source (origin
-                     (method url-fetch)
-                     (uri (pypi-uri "requests" version))
-                     (sha256
-                      (base32
-                       "0qzj6cgv3k9wyj7wlxgz7xq0cfg4jbbkfm24pp8dnhczwl31527a"))))
-           (propagated-inputs
-            `(("python-urllib3" ,python-urllib3-1.24)
-              ("python-idna" ,python-idna-2.7)
-              ,@(package-propagated-inputs python-requests)))))
+    (license license:asl2.0)
+    (properties `((python2-variant . ,(delay python2-requests))))))
 
 (define-public python2-requests
-  (package-with-python2 python-requests))
+  (let ((base (package-with-python2 (strip-python2-variant python-requests))))
+    (package
+      (inherit base)
+      ;; The python-charset-normalizer dependency is necessary on Python 3
+      ;; only.
+      (propagated-inputs (modify-inputs (package-propagated-inputs base)
+                           (delete "python-charset-normalizer"))))))
 
 (define-public python-requests-unixsocket
   (package
@@ -2576,26 +2583,28 @@ than Python’s urllib2 library.")
              (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"))))))
+           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+             ;; Avoid a deprecation error.
+             (substitute* "pytest.ini"
+               (("--pep8") ""))
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "pytest" "-vv")))))))
     (propagated-inputs
-     `(("python-pbr" ,python-pbr)
-       ("python-requests" ,python-requests)
-       ("python-urllib3" ,python-urllib3)))
+     (list python-pbr python-requests 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)))
+     (list python-apipkg
+           python-appdirs
+           python-execnet
+           python-packaging
+           python-pep8
+           python-py
+           python-pyparsing
+           python-pytest
+           python-pytest-cache
+           python-pytest-pep8
+           python-six
+           python-waitress))
     (home-page "https://github.com/msabramo/requests-unixsocket")
     (synopsis "Talk HTTP via a UNIX domain socket")
     (description
@@ -2616,9 +2625,7 @@ HTTP via a UNIX domain socket.")
          "0wgbqzaq9w7bas16b7brdb75f91bh3275fb459093bk1ihpck2ci"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-cryptography" ,python-cryptography)
-       ("python-ntlm-auth" ,python-ntlm-auth)
-       ("python-requests" ,python-requests)))
+     (list python-cryptography python-ntlm-auth python-requests))
     (home-page "https://github.com/requests/requests-ntlm")
     (synopsis
      "NTLM authentication support for Requests")
@@ -2640,18 +2647,17 @@ library.")
          "09nj8fmyj7xz2mgwyvbw0fl9zybmx2d3qd2hf529vvjc9s24d3z6"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-requests" ,python-requests)
-       ("python-six" ,python-six)))
+     (list python-requests python-six))
     (native-inputs
-     `(("python-pbr" ,python-pbr)
-       ("python-discover" ,python-discover)
-       ("python-docutils" ,python-docutils)
-       ("python-fixtures" ,python-fixtures)
-       ("python-mock" ,python-mock)
-       ("python-purl" ,python-purl)
-       ("python-pytest" ,python-pytest)
-       ("python-sphinx" ,python-sphinx)
-       ("python-testrepository" ,python-testrepository)))
+     (list python-pbr
+           python-discover
+           python-docutils
+           python-fixtures
+           python-mock
+           python-purl
+           python-pytest
+           python-sphinx
+           python-testrepository))
     (home-page "https://requests-mock.readthedocs.org/")
     (synopsis "Mock out responses from the requests package")
     (description
@@ -2662,43 +2668,33 @@ portions of your testing code.")
 (define-public python-requests-toolbelt
   (package
     (name "python-requests-toolbelt")
-    (version "0.8.0")
+    (version "0.9.1")
     (source (origin
              (method url-fetch)
              (uri (pypi-uri "requests-toolbelt" version))
              (sha256
               (base32
-               "1dc7l42i4080r8i4m9fj51jx367lqkai170vrv7wd93gdj9k39gn"))))
+               "1h3gm88dcjbd7gm229a7x5qkkhnsqsjz0m0l2xyavm2ab3a8k04n"))))
     (build-system python-build-system)
+    (arguments
+     '(#:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'delete-problematic-tests
+                    (lambda _
+                      ;; Fails because of expired certificate.
+                      (delete-file "tests/test_x509_adapter.py")
+                      ;; Fails due to networking (socket.gaierror: [Errno -2]
+                      ;; Name or service not known).
+                      (delete-file "tests/test_multipart_encoder.py"))))))
     (native-inputs
-     `(("python-betamax" ,python-betamax)
-       ("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)))
+     (list python-betamax python-mock python-pytest))
     (propagated-inputs
-     `(("python-requests" ,python-requests)))
+     (list python-requests))
     (synopsis "Extensions to python-requests")
     (description "This is a toolbelt of useful classes and functions to be used
 with python-requests.")
-    (home-page "https://github.com/sigmavirus24/requests-toolbelt")
+    (home-page "https://github.com/requests/toolbelt/")
     (license license:asl2.0)))
 
-(define-public python2-requests-toolbelt
-  (package-with-python2 python-requests-toolbelt))
-
-(define-public python-requests-toolbelt-0.9.1
-  (package
-    (inherit python-requests-toolbelt)
-    (version "0.9.1")
-    (source (origin
-             (method url-fetch)
-             (uri (pypi-uri "requests-toolbelt" version))
-             (sha256
-              (base32
-               "1h3gm88dcjbd7gm229a7x5qkkhnsqsjz0m0l2xyavm2ab3a8k04n"))))
-    (arguments
-     `(;; FIXME: Some tests require network access.
-       #:tests? #f))))
-
 (define-public python-requests-ftp
   (package
     (name "python-requests-ftp")
@@ -2712,7 +2708,7 @@ with python-requests.")
          "0yh5v21v36dsjsgv4y9dx4mmz35741l5jf6pbq9w19d8rfsww13m"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-requests" ,python-requests)))
+     (list python-requests))
     (home-page
      "https://github.com/Lukasa/requests-ftp")
     (synopsis "FTP Transport Adapter for Requests")
@@ -2738,13 +2734,9 @@ adapter for use with the Requests library.")
                     (lambda _
                       (invoke "pytest" "-vv"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-mock" ,python-mock)))
+     (list python-pytest python-pytest-cov python-mock))
     (propagated-inputs
-     `(("python-cryptography" ,python-cryptography)
-       ("python-pyjwt" ,python-pyjwt)
-       ("python-blinker" ,python-blinker)))
+     (list python-cryptography python-pyjwt python-blinker))
     (home-page "https://github.com/oauthlib/oauthlib")
     (synopsis "OAuth implementation for Python")
     (description
@@ -2770,7 +2762,7 @@ OAuth request-signing logic.")
     (arguments
      `(#:test-target "check"))
     (propagated-inputs
-     `(("python-requests" ,python-requests)))
+     (list python-requests))
     (home-page "https://github.com/litl/rauth")
     (synopsis "Python library for OAuth 1.0/a, 2.0, and Ofly")
     (description
@@ -2789,24 +2781,23 @@ authenticated session objects providing things like keep-alive.")
 (define-public python-urllib3
   (package
     (name "python-urllib3")
-    (version "1.26.2")
+    (version "1.26.7")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "urllib3" version))
         (sha256
          (base32
-          "024yldjwjavps39yb77sc422z8fa9bn20wcqrcncjwrqjab8y60r"))))
-    (replacement python-urllib3/fixed)
+          "1kkf6gi8a1fs0dqkf6kpmdpsy97iirvliz8q1krxp8ppaiawd1s9"))))
     (build-system python-build-system)
     (arguments `(#:tests? #f))
     (propagated-inputs
-     `(;; These 5 inputs are used to build urrlib3[secure]
-       ("python-certifi" ,python-certifi)
-       ("python-cryptography" ,python-cryptography)
-       ("python-idna" ,python-idna)
-       ("python-pyopenssl" ,python-pyopenssl)
-       ("python-pysocks" ,python-pysocks)))
+     (list ;; These 5 inputs are used to build urrlib3[secure]
+           python-certifi
+           python-cryptography
+           python-idna
+           python-pyopenssl
+           python-pysocks))
     (home-page "https://urllib3.readthedocs.io/")
     (synopsis "HTTP library with thread-safe connection pooling")
     (description
@@ -2816,29 +2807,6 @@ supports url redirection and retries, and also gzip and deflate decoding.")
     (properties `((python2-variant . ,(delay python2-urllib3))))
     (license license:expat)))
 
-(define python-urllib3/fixed
-  (package
-    (inherit python-urllib3)
-    (version "1.26.7")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "urllib3" version))
-       (sha256
-        (base32
-         "1kkf6gi8a1fs0dqkf6kpmdpsy97iirvliz8q1krxp8ppaiawd1s9"))))))
-
-;; Some software requires an older version of urllib3, notably Docker.
-(define-public python-urllib3-1.24
-  (package (inherit python-urllib3)
-           (version "1.24.3")
-           (source (origin
-                     (method url-fetch)
-                     (uri (pypi-uri "urllib3" version))
-                     (sha256
-                      (base32
-                       "1x0slqrv6kixkbcdnxbglvjliwhc1payavxjvk8fvbqjrnasd4r3"))))))
-
 (define-public python2-urllib3
   (let ((base (package-with-python2 (strip-python2-variant python-urllib3))))
     (package/inherit
@@ -2851,14 +2819,14 @@ supports url redirection and retries, and also gzip and deflate decoding.")
   (package
     ;; Note: updating awscli typically requires updating botocore as well.
     (name "awscli")
-    (version "1.18.203")
+    (version "1.21.11")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri name version))
        (sha256
         (base32
-         "128zg24961j8nmnq2dxqg6a7zwh3qgv87cmvclsdqwwih9nigxv9"))))
+         "0fkivwbx4nind5b7l4jhqm5bb9drgqsclcslrg4aggf9rcs4g4s0"))))
     (build-system python-build-system)
     (arguments
      ;; FIXME: The 'pypi' release does not contain tests.
@@ -2871,17 +2839,16 @@ supports url redirection and retries, and also gzip and deflate decoding.")
                (("if not self._exists_on_path\\('groff'\\):") "")
                (("raise ExecutableNotFoundError\\('groff'\\)") "")
                (("cmdline = \\['groff'")
-                (string-append "cmdline = ['" (which "groff") "'")))
-             #t)))))
-    (propagated-inputs
-     `(("python-colorama" ,python-colorama)
-       ("python-botocore" ,python-botocore)
-       ("python-s3transfer" ,python-s3transfer)
-       ("python-docutils" ,python-docutils)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-rsa" ,python-rsa)))
+                (string-append "cmdline = ['" (which "groff") "'"))))))))
+    (propagated-inputs
+     (list python-colorama-for-awscli
+           python-botocore
+           python-s3transfer
+           python-docutils-0.15
+           python-pyyaml
+           python-rsa))
     (native-inputs
-     `(("groff" ,groff)))
+     (list groff))
     (home-page "https://aws.amazon.com/cli/")
     (synopsis "Command line client for AWS")
     (description "AWS CLI provides a unified command line interface to the
@@ -2900,12 +2867,9 @@ Amazon Web Services (AWS) API.")
         (base32 "16jch5nic0hia28lps3c678s9s9mjdq8n87igxncjg0rpi5adqnf"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-webtest" ,python-webtest)))
+     (list python-webtest))
     (propagated-inputs
-     `(("python-requests" ,python-requests)
-       ("python-six" ,python-six)
-       ("python-urllib3" ,python-urllib3)
-       ("python-webob" ,python-webob)))
+     (list python-requests python-six python-urllib3 python-webob))
     (home-page "https://github.com/gawel/WSGIProxy2/")
     (synopsis "WSGI Proxy with various http client backends")
     (description "WSGI turns HTTP requests into WSGI function calls.
@@ -2928,8 +2892,7 @@ and to spawn subprocesses to handle requests.")
     (arguments
      '(#:test-target "pytest"))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-pytest python-pytest-runner))
     (home-page "https://pylonsproject.org/")
     (synopsis
      "Load, configure, and compose WSGI applications and servers")
@@ -2958,10 +2921,7 @@ file.")
      ;; Tests require python-pyquery, which creates a circular dependency.
      `(#:tests? #f))
     (propagated-inputs
-     `(("python-waitress" ,python-waitress)
-       ("python-webob" ,python-webob)
-       ("python-six" ,python-six)
-       ("python-beautifulsoup4" ,python-beautifulsoup4)))
+     (list python-waitress python-webob python-six python-beautifulsoup4))
     (home-page "https://docs.pylonsproject.org/projects/webtest/")
     (synopsis "Helper to test WSGI applications")
     (description "Webtest allows you to test your Python web applications
@@ -2969,35 +2929,28 @@ without starting an HTTP server.  It supports anything that supports the
 minimum of WSGI.")
     (license license:expat)))
 
-(define-public python2-webtest
-  (package-with-python2 python-webtest))
-
 (define-public python-flask
   (package
     (name "python-flask")
-    (version "1.1.2")
+    (version "2.0.2")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "Flask" version))
               (sha256
                (base32
-                "0q3h295izcil7lswkzfnyg3k5gq4hpmqmpl6i7s5m1n9szi1myjf"))))
+                "1qilnrdakhbw5k951kczdy8ia0wczh0dpp1vi4qhgmfx6klvhbvv"))))
     (build-system python-build-system)
     (arguments
      '(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda _
-             (setenv "PYTHONPATH" (string-append "./build/lib:"
-                                                 (getenv "PYTHONPATH")))
-             (invoke "pytest" "-vv" "tests"))))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "pytest" "-vv" "tests")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (propagated-inputs
-     `(("python-itsdangerous" ,python-itsdangerous)
-       ("python-jinja2" ,python-jinja2)
-       ("python-click" ,python-click)
-       ("python-werkzeug" ,python-werkzeug)))
+     (list python-itsdangerous python-jinja2 python-click python-werkzeug))
     (home-page "https://www.palletsprojects.com/p/flask/")
     (synopsis "Microframework based on Werkzeug, Jinja2 and good intentions")
     (description "Flask is a micro web framework based on the Werkzeug toolkit
@@ -3022,15 +2975,11 @@ presume or force a developer to use a particular tool or library.")
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (setenv "PYTHONPATH" (string-append "./build/lib:"
-                                                 (getenv "PYTHONPATH")))
              (invoke "pytest" "-vv"))))))
     (propagated-inputs
-     `(("python-flask-babel" ,python-flask-babel)
-       ("python-babel" ,python-babel)
-       ("python-wtforms" ,python-wtforms)))
+     (list python-flask-babel python-babel python-wtforms))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/lepture/flask-wtf")
     (synopsis "Simple integration of Flask and WTForms")
     (description "Flask-WTF integrates Flask and WTForms, including CSRF, file
@@ -3050,7 +2999,7 @@ upload, and reCAPTCHA.")
          "0p4v50rwv64wcd0zlq7rzl4waprwr4hj19s3cgf1isywa7jcisgm"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-flask" ,python-flask)))
+     (list python-flask))
     (home-page "https://pagure.io/flask-multistatic")
     (synopsis "Flask plugin to allow overriding static files")
     (description "@code{flask-multistatic} is a flask plugin that adds support
@@ -3072,7 +3021,7 @@ for overriding static files.")
      `(;; test are broken: https://gitlab.com/sashahart/cookies/issues/3
        #:tests? #f))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (synopsis "HTTP cookie parser and renderer")
     (description "A RFC 6265-compliant HTTP cookie parser and renderer in
 Python.")
@@ -3098,11 +3047,9 @@ Python.")
        ;; https://github.com/getsentry/responses/issues/38
        #:tests? #f))
     (native-inputs
-     `(("python-mock" ,python-mock)))
+     (list python-mock))
     (propagated-inputs
-     `(("python-requests" ,python-requests)
-       ("python-cookies" ,python-cookies)
-       ("python-six" ,python-six)))
+     (list python-requests python-cookies python-six))
     (home-page "https://github.com/getsentry/responses")
     (synopsis "Utility for mocking out the `requests` Python library")
     (description "A utility library for mocking out the `requests` Python
@@ -3125,12 +3072,9 @@ library.")
          "1j9icncllbkv7x5719b20mx670c6q1jrdx1sakskkarvx3pc8h8g"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-gevent" ,python-gevent)
-       ("python-requests" ,python-requests)))
+     (list python-gevent python-requests))
     (native-inputs
-     `(("python-nose" ,python-nose)
-       ("python-zope.interface" ,python-zope-interface)
-       ("python-zope.event" ,python-zope-event)))
+     (list python-nose python-zope-interface python-zope-event))
     (home-page "https://github.com/kennethreitz/grequests")
     (synopsis "Python library for asynchronous HTTP requests")
     (description "GRequests is a Python library that allows you to use
@@ -3158,13 +3102,13 @@ for the basic TCP/IP protocols.")
 (define-public python-geventhttpclient
   (package
     (name "python-geventhttpclient")
-    (version "1.4.4")
+    (version "1.5.3")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "geventhttpclient" version))
               (sha256
                (base32
-                "1hy4qm9d3r69n5199i7qjji1v7718n7cxbj8ggi0njify99m37pm"))
+                "104p14p67xa5gch8dy2zqmzmjra31fflk1c1alrry8dp8bzwj3nq"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -3185,22 +3129,16 @@ for the basic TCP/IP protocols.")
                ((".*sock.last_seen_sni = None.*")
                 ""))))
          (replace 'check
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (add-installed-pythonpath inputs outputs)
-             (invoke "py.test"  "src/geventhttpclient/tests" "-v"
-                     ;; Append the test modules to sys.path to avoid
-                     ;; namespace conflict which breaks SSL tests.
-                     "--import-mode=append"
-                     ;; XXX: This test fails with Python 3.8:
-                     ;; https://github.com/gwik/geventhttpclient/issues/119
-                     "-k" "not test_cookielib_compatibility"))))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "pytest"  "src/geventhttpclient/tests" "-v"
+                       ;; Append the test modules to sys.path to avoid
+                       ;; namespace conflict which breaks SSL tests.
+                       "--import-mode=append")))))))
     (native-inputs
-     `(("python-dpkt" ,python-dpkt)
-       ("python-pytest" ,python-pytest)))
+     (list python-dpkt python-pytest))
     (propagated-inputs
-     `(("python-certifi" ,python-certifi)
-       ("python-gevent" ,python-gevent)
-       ("python-six" ,python-six)))
+     (list python-brotli python-certifi python-gevent python-six))
     (home-page "https://github.com/gwik/geventhttpclient")
     (synopsis "HTTP client library for gevent")
     (description "@code{python-geventhttpclient} is a high performance,
@@ -3228,12 +3166,9 @@ concurrent HTTP client library for python using @code{gevent}.")
              (delete-file "tests/test_core.py")
              #t)))))
     (native-inputs
-     `(("python-pyjwt" ,python-pyjwt)
-       ("python-requests-mock" ,python-requests-mock)
-       ("python-mock" ,python-mock)))
+     (list python-pyjwt python-requests-mock python-mock))
     (propagated-inputs
-     `(("python-oauthlib" ,python-oauthlib)
-       ("python-requests" ,python-requests)))
+     (list python-oauthlib python-requests))
     (home-page
      "https://github.com/requests/requests-oauthlib")
     (synopsis
@@ -3255,28 +3190,20 @@ provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients."
                 "0v879yadcz9qxfl41ak6wkga1kimp9cflla9ddz03hjjvgkqy5ki"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-publicsuffix" ,python-publicsuffix)))
+     (list python-publicsuffix))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-nose" ,python-nose)))
+     (list python-coverage python-nose))
     (arguments
      `(#:tests? #f)) ; FIXME: tests fail with "ImportError: No module named 'tests'"
     (home-page "https://github.com/seomoz/url-py")
     (synopsis "URL Parsing")
     (description "Library for parsing urls.")
-    (license license:expat)
-    (properties `((python2-variant . ,(delay python2-url))))))
-
-(define-public python2-url
-  (let ((base (package-with-python2 (strip-python2-variant python-url))))
-    (package/inherit base
-      (propagated-inputs
-       `(("python2-publicsuffix" ,python2-publicsuffix))))))
+    (license license:expat)))
 
 (define-public python-cachecontrol
   (package
     (name "python-cachecontrol")
-    (version "0.12.5")
+    (version "0.12.10")
     (source
      (origin
        (method git-fetch)
@@ -3287,16 +3214,14 @@ provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients."
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "03lgc65sl04n0cgzmmgg99bk83f9i6k8yrmcd4hpl46q1pymn0kz"))))
+         "0fviacb13h72l5c77p35lgr6kvlidfdb9xsicg3v6lblmp9cn2ws"))))
     (build-system python-build-system)
     (arguments
      ;; Versions > 0.11.6 depend on CherryPy for testing.
      ;; It's too much work to package CherryPy for now.
      `(#:tests? #f))
     (propagated-inputs
-     `(("python-requests" ,python-requests)
-       ("python-msgpack" ,python-msgpack)
-       ("python-lockfile" ,python-lockfile)))
+     (list python-requests python-msgpack python-lockfile))
     (home-page "https://github.com/ionrock/cachecontrol")
     (synopsis "The httplib2 caching algorithms for use with requests")
     (description "CacheControl is a port of the caching algorithms in
@@ -3332,7 +3257,7 @@ provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients."
      '(;; Many tests fail because they require networking.
        #:tests? #f))
     (propagated-inputs
-     `(("python-requests" ,python-requests)))
+     (list python-requests))
     (home-page "https://github.com/sigmavirus24/betamax")
     (synopsis "Record HTTP interactions with python-requests")
     (description "Betamax will record your test suite's HTTP interactions and
@@ -3355,17 +3280,13 @@ replay them during future tests.  It is designed to work with python-requests.")
          "07qpwjyq2i2aqhz5iwghnj4pqr2ys5n45v1vmpcfx9r5mhwrsq43"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-betamax" ,python-betamax)
-       ("python-requests-toolbelt" ,python-requests-toolbelt)))
+     (list python-betamax python-requests-toolbelt))
     (home-page "https://github.com/sigmavirus24/betamax_matchers")
     (synopsis "VCR imitation for python-requests")
     (description "@code{betamax-matchers} provides a set of Matchers for
 Betamax.")
     (license license:asl2.0)))
 
-(define-public python2-betamax-matchers
-  (package-with-python2 python-betamax-matchers))
-
 (define-public python-betamax-serializers
   (package
     (name "python-betamax-serializers")
@@ -3378,8 +3299,7 @@ Betamax.")
         (base32 "0ja9isbjmzzhxdj69s0kdsvw8nkp073w6an6a4liy5vk3fdl2p1l"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-betamax" ,python-betamax)
-       ("python-pyyaml" ,python-pyyaml)))
+     (list python-betamax python-pyyaml))
     (synopsis "Set of third-party serializers for Betamax")
     (description "Betamax-Serializers are an experimental set of Serializers for
 Betamax that may possibly end up in the main package.")
@@ -3389,52 +3309,32 @@ Betamax that may possibly end up in the main package.")
 (define-public python-s3transfer
   (package
     (name "python-s3transfer")
-    (version "0.3.3")
+    (version "0.5.0")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "s3transfer" version))
               (sha256
                (base32
-                "1nzp5kwmy9669334shcz9ipg89jgpdqhrmbkgdg18r7wmvi3f6lj"))))
+                "0k6sc956yrrv9b4laa0r79jhxajpyxr21jcd1ka8m1n53lz85vah"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'patch
-           (lambda _
-             ;; There's a small issue with one test with Python 3.8, this
-             ;; change has been suggested upstream:
-             ;; https://github.com/boto/s3transfer/pull/164
-             (substitute* "tests/unit/test_s3transfer.py"
-               (("super\\(FailedDownloadParts, self\\)\\.submit\\(function\\)")
-                "futures.Future()"))
-             #t))
          (replace 'check
-           (lambda _
-             ;; Some of the 'integration' tests require network access or
-             ;; login credentials.
-             (invoke "nosetests" "--exclude=integration")
-             #t)))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               ;; Some of the 'integration' tests require network access or
+               ;; login credentials.
+               (invoke "nosetests" "--exclude=integration")))))))
     (native-inputs
-     `(("python-docutils" ,python-docutils)
-       ("python-mock" ,python-mock)
-       ("python-nose" ,python-nose)))
+     (list python-docutils python-mock python-nose))
     (propagated-inputs
-     `(("python-botocore" ,python-botocore)
-       ("python-urllib3" ,python-urllib3)))
+     (list python-botocore python-urllib3))
     (synopsis "Amazon S3 Transfer Manager")
     (description "S3transfer is a Python library for managing Amazon S3
 transfers.")
     (home-page "https://github.com/boto/s3transfer")
-    (license license:asl2.0)
-    (properties `((python2-variant . ,(delay python2-s3transfer))))))
-
-(define-public python2-s3transfer
-  (let ((base (package-with-python2 (strip-python2-variant python-s3transfer))))
-    (package/inherit base
-      (native-inputs
-       `(("python2-futures" ,python2-futures)
-         ,@(package-native-inputs base))))))
+    (license license:asl2.0)))
 
 (define-public python-slimit
   (package
@@ -3449,9 +3349,9 @@ transfers.")
          "02vj2x728rs1127q2nc27frrqra4fczivnb7gch6n5lzi7pxqczl"))))
     (build-system python-build-system)
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (propagated-inputs
-     `(("python-ply" ,python-ply)))
+     (list python-ply))
     (home-page "https://slimit.readthedocs.io/")
     (synopsis "JavaScript minifier, parser and lexer written in Python")
     (description
@@ -3474,16 +3374,19 @@ pretty printer and a tree visitor.")
          (base32
           "05b9lzx5yc3wgml2bcq50lq35h66m8zpj6dc9advcb5z3acsbaay"))))
     (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-imports
+           (lambda _
+             (substitute* "flask_restful/__init__.py"
+               (("flask\\.helpers") "flask.scaffold")))))))
     (propagated-inputs
-      `(("python-aniso8601" ,python-aniso8601)
-        ("python-flask" ,python-flask)
-        ("python-pycrypto" ,python-pycrypto)
-        ("python-pytz" ,python-pytz)))
+      (list python-aniso8601 python-flask python-pycrypto python-pytz))
     (native-inputs
-      `(;; Optional dependency of Flask. Tests need it.
-        ("python-blinker" ,python-blinker)
-        ("python-mock" ,python-mock) ; For tests
-        ("python-nose" ,python-nose)))  ;for tests
+      (list ;; Optional dependency of Flask. Tests need it.
+            python-blinker python-mock ; For tests
+            python-nose))  ;for tests
     (home-page
       "https://www.github.com/flask-restful/flask-restful/")
     (synopsis
@@ -3516,7 +3419,7 @@ pretty printer and a tree visitor.")
                          "flask_basicauth"))
                       #t)))))
     (propagated-inputs
-     `(("python-flask" ,python-flask)))
+     (list python-flask))
     (home-page "https://github.com/jpvanhal/flask-basicauth")
     (synopsis "HTTP basic access authentication for Flask")
     (description
@@ -3536,10 +3439,7 @@ pretty printer and a tree visitor.")
             "14q1y1y9i9bhabdnwd25jqzc4ljli23smxfyyh8abxz1vq93pxra"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-flask" ,python-flask)
-       ("python-itsdangerous" ,python-itsdangerous)
-       ("python-passlib" ,python-passlib)
-       ("python-tox" ,python-tox)))
+     (list python-flask python-itsdangerous python-passlib python-tox))
     (home-page "https://github.com/carsongee/flask-htpasswd")
     (synopsis "Basic authentication via htpasswd files in Flask applications")
     (description "This package provides Basic authentication via
@@ -3559,53 +3459,13 @@ applications.")
                 "04jrx4sjrz1b20j38qk4qin975xwz30krzq59rfv3b3w7ss49nib"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-flask" ,python-flask)
-       ("python-sqlalchemy" ,python-sqlalchemy)))
+     (list python-flask python-sqlalchemy))
     (home-page "https://github.com/mitsuhiko/flask-sqlalchemy")
     (synopsis "Module adding SQLAlchemy support to your Flask application")
     (description
      "This package adds SQLAlchemy support to your Flask application.")
     (license license:bsd-3)))
 
-(define-public python-flask-restplus
-  (package
-    (name "python-flask-restplus")
-    (version "0.9.2")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (pypi-uri "flask-restplus" version))
-        (sha256
-          (base32
-            "11his6ii5brpkhld0d5bwzjjw4q3vmplpd6fmgzjrvvklsbk0cf4"))))
-    (build-system python-build-system)
-    (arguments
-     '(#:tests? #f)) ; FIXME: 35/882 tests failing.
-       ;; #:phases
-       ;; (modify-phases %standard-phases
-       ;;   (replace 'check
-       ;;     (lambda _
-       ;;       (invoke "nosetests")
-       ;;       #t)))))
-    (propagated-inputs
-      `(("python-aniso8601" ,python-aniso8601)
-        ("python-flask" ,python-flask)
-        ("python-jsonschema" ,python-jsonschema)
-        ("python-pytz" ,python-pytz)
-        ("python-six" ,python-six)))
-    (native-inputs
-     `(("python-tzlocal" ,python-tzlocal)
-       ("python-blinker" ,python-blinker)
-       ("python-nose" ,python-nose)
-       ("python-rednose" ,python-rednose)))
-    (home-page "https://github.com/noirbizarre/flask-restplus")
-    (synopsis "Framework for documented API development with Flask")
-    (description "This package provides a framework for API development with
-the Flask web framework in Python.  It is similar to package
-@code{python-flask-restful} but supports the @code{python-swagger}
-documentation builder.")
-    (license license:expat)))
-
 (define-public python-flask-restful-swagger
   (package
     (name "python-flask-restful-swagger")
@@ -3620,7 +3480,7 @@ documentation builder.")
     (build-system python-build-system)
     (arguments '(#:tests? #f))          ;no tests
     (propagated-inputs
-     `(("python-flask-restful" ,python-flask-restful)))
+     (list python-flask-restful))
     (home-page "https://github.com/rantav/flask-restful-swagger")
     (synopsis "Extract Swagger specs from Flask-Restful projects")
     (description "This package lets you extract Swagger API documentation
@@ -3647,9 +3507,6 @@ specs from your Flask-Restful projects.")
 It comes with safe defaults and easily configurable options.")
     (license license:bsd-3)))
 
-(define-public python2-htmlmin
-  (package-with-python2 python-htmlmin))
-
 (define-public python-flask-htmlmin
   (package
     (name "python-flask-htmlmin")
@@ -3662,8 +3519,7 @@ It comes with safe defaults and easily configurable options.")
        (base32
         "1n6zlq72kakkw0z2jpq6nh74lfsmxybm4g053pwhc14fbr809348"))))
     (propagated-inputs
-     `(("python-flask" ,python-flask)
-       ("python-htmlmin" ,python-htmlmin)))
+     (list python-flask python-htmlmin))
     (build-system python-build-system)
     (home-page "https://github.com/hamidfzm/Flask-HTMLmin")
     (synopsis "HTML response minifier for Flask")
@@ -3674,14 +3530,14 @@ It comes with safe defaults and easily configurable options.")
 (define-public python-jsmin
   (package
     (name "python-jsmin")
-    (version "2.2.2")
+    (version "3.0.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "jsmin" version))
        (sha256
         (base32
-         "0fsmqbjvpxvff0984x7c0y8xmf49ax9mncz48b9xjx8wrnr9kpxn"))))
+         "1z1brjsvni0260bypldkl8a05sgp0qk18x560zl44igr3q99m5f0"))))
     (build-system python-build-system)
     (home-page "https://github.com/tikitu/jsmin/")
     (synopsis "Python JavaScript minifier")
@@ -3705,17 +3561,17 @@ on the command line.")
         (base32 "11ac924w0y4m0kf3mxnxdlidy88jfa7njw5yyrq16dvnx4iwd8gg"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-flask" ,python-flask)))
+     (list python-flask))
     (native-inputs
      ;; For tests.
-     `(("python-blinker" ,python-blinker)
-       ("python-coverage" ,python-coverage)
-       ("python-mock" ,python-mock)
-       ("python-pycodestyle" ,python-pycodestyle)
-       ("python-pyflakes" ,python-pyflakes)
-       ("python-pytest" ,python-pytest)
-       ("python-semantic-version" ,python-semantic-version)
-       ("python-werkzeug" ,python-werkzeug)))
+     (list python-blinker
+           python-coverage
+           python-mock
+           python-pycodestyle
+           python-pyflakes
+           python-pytest
+           python-semantic-version
+           python-werkzeug))
     (home-page "https://github.com/maxcountryman/flask-login")
     (synopsis "User session management for Flask")
     (description
@@ -3739,11 +3595,8 @@ users' sessions over extended periods of time.")
     (arguments
      `(#:tests? #f))
     (propagated-inputs
-     `(("python-httplib2" ,python-httplib2)
-       ("python-pyasn1" ,python-pyasn1)
-       ("python-pyasn1-modules" ,python-pyasn1-modules)
-       ("python-rsa" ,python-rsa)
-       ("python-six" ,python-six)))
+     (list python-httplib2 python-pyasn1 python-pyasn1-modules python-rsa
+           python-six))
     (home-page "https://github.com/google/oauth2client/")
     (synopsis "OAuth 2.0 client library")
     (description "@code{python-oauth2client} provides an OAuth 2.0 client
@@ -3756,23 +3609,27 @@ library for Python")
 (define-public python-flask-oidc
   (package
     (name "python-flask-oidc")
-    (version "1.1.1")
+    (version "1.4.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "flask-oidc" version))
        (sha256
         (base32
-         "1ay5j0mf174bix7i67hclr95gv16z81fpx0dijvi0gydvdj3ddy2"))))
+         "0klgwpn2iy5y7011xh2c8zkryxdwkpxh7qjs3hp5cynl748ia4hc"))))
     (build-system python-build-system)
-    (propagated-inputs
-     `(("python-flask" ,python-flask)
-       ("python-itsdangerous" ,python-itsdangerous)
-       ("python-oauth2client" ,python-oauth2client)
-       ("python-six" ,python-six)))
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (replace 'check
+                 (lambda* (#:key tests? #:allow-other-keys)
+                   (when tests?
+                     (invoke "nosetests")))))))
+    (propagated-inputs
+     (list python-flask python-itsdangerous python-oauth2client
+           python-six))
     (native-inputs
-     `(("python-nose" ,python-nose)
-       ("python-mock" ,python-mock)))
+     (list python-nose python-mock))
     (home-page "https://github.com/puiterwijk/flask-oidc")
     (synopsis "OpenID Connect extension for Flask")
     (description "@code{python-flask-oidc} provides an OpenID Connect extension
@@ -3793,23 +3650,20 @@ for Flask.")
     (build-system python-build-system)
     (arguments
      '(#:phases (modify-phases %standard-phases
-                  (add-before 'check 'disable-some-tests
+                  (add-before 'check 'adjust-tests
                     (lambda _
+                      ;; Fix for Python 3.9 compatibility.
+                      (substitute* "tests/test_script.py"
+                        (("self\\.t\\.isAlive")
+                         "self.t.is_alive"))
                       ;; This test requires 'postcss' and 'babel' which are
                       ;; not yet available in Guix.
-                      (delete-file "tests/test_filters.py")
-                      #t))
+                      (delete-file "tests/test_filters.py")))
                   (replace 'check
                     (lambda _
-                      (setenv "PYTHONPATH"
-                              (string-append "./build/lib:"
-                                             (getenv "PYTHONPATH")))
                       (invoke "pytest" "-vv"))))))
     (native-inputs
-     `(("python-jinja2" ,python-jinja2)
-       ("python-mock" ,python-mock)
-       ("python-nose" ,python-nose)
-       ("python-pytest" ,python-pytest)))
+     (list python-jinja2 python-mock python-nose python-pytest))
     (home-page "https://github.com/miracle2k/webassets")
     (synopsis "Media asset management")
     (description "Merges, minifies and compresses Javascript and CSS files,
@@ -3834,9 +3688,6 @@ CSS tidy.  Also supports URL rewriting in CSS files.")
     (description "Python port of the YUI CSS Compressor.")
     (license (list license:expat license:bsd-3))))
 
-(define-public python2-cssmin
-  (package-with-python2 python-cssmin))
-
 (define-public python-elasticsearch
   (package
     (name "python-elasticsearch")
@@ -3850,8 +3701,7 @@ CSS tidy.  Also supports URL rewriting in CSS files.")
           "1q38w9nh2j2yi82d8rhzb57597l4lq5zx7xzfg45xf7ffrgsipaj"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-certifi" ,python-certifi)
-       ("python-urllib3" ,python-urllib3)))
+     (list python-certifi python-urllib3))
     (arguments
      ;; tests require the test_elasticsearch module but it is not distributed.
      `(#:tests? #f))
@@ -3862,9 +3712,6 @@ provide common ground for all Elasticsearch-related code in Python; because of
 this it tries to be opinion-free and very extendable.")
     (license license:expat)))
 
-(define-public python2-elasticsearch
-  (package-with-python2 python-elasticsearch))
-
 (define-public python-engineio
   (package
     (name "python-engineio")
@@ -3878,9 +3725,7 @@ this it tries to be opinion-free and very extendable.")
          "0xqkjjxbxakz9fd7v94rkr2r5r9nrkap2c3gf3abbd0j6ld5qmxv"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-aiohttp" ,python-aiohttp)
-       ("python-requests" ,python-requests)
-       ("python-websocket-client" ,python-websocket-client)))
+     (list python-aiohttp python-requests python-websocket-client))
     (arguments '(#:tests? #f))        ; Tests not included in release tarball.
     (home-page "https://github.com/miguelgrinberg/python-engineio/")
     (synopsis "Engine.IO server")
@@ -3888,66 +3733,26 @@ this it tries to be opinion-free and very extendable.")
 server.")
     (license license:expat)))
 
-(define-public python-flask-script
-  (package
-  (name "python-flask-script")
-  (version "2.0.6")
-  (source
-    (origin
-      (method url-fetch)
-      (uri (pypi-uri "Flask-Script" version))
-      (sha256
-        (base32
-          "0r8w2v89nj6b9p91p495cga5m72a673l2wc0hp0zqk05j4yrc9b4"))))
-  (build-system python-build-system)
-  (arguments
-   `(#:phases
-     (modify-phases %standard-phases
-       (add-after 'unpack 'patch-tests
-         (lambda _
-           (substitute* "tests.py"
-            (("flask\\.ext\\.script") "flask_script"))
-           #t)))))
-  (propagated-inputs
-   `(("python-flask" ,python-flask)
-     ("python-argcomplete" ,python-argcomplete)
-     ("python-werkzeug" ,python-werkzeug)))
-  (native-inputs
-   `(("python-pytest" ,python-pytest)))
-  (home-page
-    "https://github.com/smurfix/flask-script")
-  (synopsis "Scripting support for Flask")
-  (description "The Flask-Script extension provides support for writing
-external scripts in Flask.  This includes running a development server,
-a customised Python shell, scripts to set up your database, cronjobs,
-and other command-line tasks that belong outside the web application
-itself.")
-  (license license:bsd-3)))
-
 (define-public python-flask-migrate
   (package
-  (name "python-flask-migrate")
-  (version "2.5.3")
-  (source
-    (origin
-      (method url-fetch)
-      (uri (pypi-uri "Flask-Migrate" version))
-      (sha256
-        (base32
-          "1vip9ww6l18dxffjsggm83k71zkvihxpnhaswpv8klh95s6517d6"))))
-  (build-system python-build-system)
-  (propagated-inputs
-   `(("python-flask" ,python-flask)
-     ("python-alembic" ,python-alembic)
-     ("python-sqlalchemy" ,python-sqlalchemy)
-     ("python-flask-script" ,python-flask-script)
-     ("python-flask-sqlalchemy" ,python-flask-sqlalchemy)))
-  (home-page "https://github.com/miguelgrinberg/flask-migrate/")
-  (synopsis "SQLAlchemy database migrations for Flask programs using
+    (name "python-flask-migrate")
+    (version "3.1.0")
+    (home-page "https://github.com/miguelgrinberg/flask-migrate/")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference (url home-page)
+                                  (commit (string-append "v" version))))
+              (sha256
+               (base32
+                "0zj7qpknvlhrh4fsp5sx4fwyx3sp41ynclka992zympm3xym9zyq"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     (list python-flask python-alembic python-flask-sqlalchemy))
+    (synopsis "SQLAlchemy database migrations for Flask programs using
 Alembic")
-  (description "This package contains SQLAlchemy database migration tools
+    (description "This package contains SQLAlchemy database migration tools
 for Flask programs that are using @code{python-alembic}.")
-  (license license:expat)))
+    (license license:expat)))
 
 (define-public python-genshi
   (package
@@ -3963,7 +3768,7 @@ for Flask programs that are using @code{python-alembic}.")
        (sha256
         (base32 "04i0caywiwrgw09grz988n15qr9lr31d9n6a529p8v80cy1fv23c"))))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (build-system python-build-system)
     (home-page "https://genshi.edgewall.org/")
     (synopsis "Toolkit for generation of output for the web")
@@ -3988,10 +3793,9 @@ textual content for output generation on the web.")
            "0lwlr5smz8vfm5h9a9i7da3q1c24xqc6vm9jdywdpgxfbi5i7mpm"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-blinker" ,python-blinker)))
+     (list python-blinker))
     (native-inputs
-     `(("python-flask" ,python-flask)
-       ("python-nose" ,python-nose)))
+     (list python-flask python-nose))
     (home-page "https://pythonhosted.org/Flask-Principal/")
     (synopsis "Identity management for Flask")
     (description "@code{flask_principal} is a identity management library for
@@ -4012,7 +3816,7 @@ thread-local variable.")
          "13gff5w1mqpzm5nccyg02v3ifb9ifqh5k866cssjhghhg6msfjsz"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-flask" ,python-flask)))
+     (list python-flask))
     (home-page "https://github.com/miguelgrinberg/flask-httpauth/")
     (synopsis "Basic and Digest HTTP authentication for Flask routes")
     (description "@code{flask_httpauth} provides Basic and Digest HTTP
@@ -4022,23 +3826,23 @@ authentication for Flask routes.")
 (define-public python-uritemplate
   (package
     (name "python-uritemplate")
-    (version "3.0.1")
+    (version "4.1.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "uritemplate" version))
        (sha256
         (base32
-         "1bkwmgr0ia9gcn4bszs2xlvml79f0bi2s4a87xg22ky9rq8avy2s"))))
+         "1w14a775d92mx9pdhb5zimifpfr2lfcn0vfdpjagcy9vbkyfsij3"))))
     (build-system python-build-system)
     (home-page "https://uritemplate.readthedocs.org")
     (synopsis "Library to deal with URI Templates")
     (description "@code{uritemplate} provides Python library to deal with URI
 Templates.")
-    (license license:bsd-2)))
-
-(define-public python2-uritemplate
-  (package-with-python2 python-uritemplate))
+    ;; The software is made available under the terms of *either* of the
+    ;; licenses found in LICENSE.APACHE or LICENSE.BSD.  Contributions
+    ;; are made under *both* licenses (excerpt from the LICENSE file).
+    (license (list license:bsd-2 license:asl2.0))))
 
 (define-public python-publicsuffix
   (package
@@ -4059,9 +3863,6 @@ Templates.")
 List.")
     (license license:expat)))
 
-(define-public python2-publicsuffix
-  (package-with-python2 python-publicsuffix))
-
 (define-public python-publicsuffix2
   (package
     (name "python-publicsuffix2")
@@ -4091,34 +3892,32 @@ List.")
 List.  Forked from and using the same API as the publicsuffix package.")
     (license (list license:expat license:mpl2.0))))
 
-(define-public python2-publicsuffix2
-  (package-with-python2 python-publicsuffix2))
-
 (define-public python-werkzeug
   (package
     (name "python-werkzeug")
-    (version "1.0.1")
+    (version "2.0.2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "Werkzeug" version))
        (sha256
         (base32
-         "0z74sa1xw5h20yin9faj0vvdbq713cgbj84klc72jr9nmpjv303c"))))
+         "16nvv9dh37ssf5pkny9yj2li0n6wyzsygh8a9i86r3gfipybcaxa"))))
     (build-system python-build-system)
     (arguments
      '(#:phases
        (modify-phases %standard-phases
-         (delete 'check)
-         (add-after 'install 'check
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (add-installed-pythonpath inputs outputs)
-             (invoke "python" "-m" "pytest"))))))
+         (replace 'check
+           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "python" "-m" "pytest"
+                       ;; Test tries to use the network.
+                       "-k not test_reloader_sys_path")))))))
     (propagated-inputs
-     `(("python-requests" ,python-requests)))
+     (list python-requests))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-timeout" ,python-pytest-timeout)))
+     (list python-pytest python-pytest-timeout python-pytest-xprocess))
     (home-page "https://palletsprojects.com/p/werkzeug/")
     (synopsis "Utilities for WSGI applications")
     (description "One of the most advanced WSGI utility modules.  It includes a
@@ -4128,6 +3927,30 @@ uploads, a powerful URL routing system and a bunch of community-contributed
 addon modules.")
     (license license:x11)))
 
+(define-public python-werkzeug-1.0
+  (package
+    (inherit python-werkzeug)
+    (version "1.0.1")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "Werkzeug" version))
+              (sha256
+               (base32
+                "0z74sa1xw5h20yin9faj0vvdbq713cgbj84klc72jr9nmpjv303c"))
+              (patches (search-patches "python-werkzeug-tests.patch"))))
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (delete 'check)
+         (add-after 'install 'check
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (add-installed-pythonpath inputs outputs)
+             (invoke "python" "-m" "pytest"))))))
+    (propagated-inputs
+     (list python-requests))
+    (native-inputs
+     (list python-pytest python-pytest-timeout))))
+
 (define-public python-bottle
   (package
     (name "python-bottle")
@@ -4140,7 +3963,7 @@ addon modules.")
         (base32 "0b6s50vc4iad97b6bb3xnyrgajb3nj6n6jbr5p54a4vapky3zmx9"))))
     (build-system python-build-system)
     (home-page "https://bottlepy.org/")
-    (synopsis "WSGI framework for small web-applications.")
+    (synopsis "WSGI framework for small web-applications")
     (description "@code{python-bottle} is a WSGI framework for small web-applications.")
     (license license:expat)))
 
@@ -4175,12 +3998,9 @@ addon modules.")
                (invoke "python" "setup.py" "compile_catalog")
                (invoke "python" "tests/runtests.py")))))))
     (native-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-sqlalchemy" ,python-sqlalchemy)))
+     (list python-dateutil python-sqlalchemy))
     (propagated-inputs
-     `(("python-babel" ,python-babel)
-       ("python-email-validator" ,python-email-validator)
-       ("python-markupsafe" ,python-markupsafe)))
+     (list python-babel python-email-validator python-markupsafe))
     (home-page "http://wtforms.simplecodes.com/")
     (synopsis
      "Form validation and rendering library for Python web development")
@@ -4209,11 +4029,9 @@ available in Django, but is a standalone package.")
            (delete-file "tests/test_proxy.py") #t))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)
-       ("python-nose" ,python-nose)))
+     (list python-pytest python-pytest-runner python-nose))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://pythonpaste.readthedocs.io/")
     (synopsis
      "Python web development tools, focusing on WSGI")
@@ -4223,9 +4041,6 @@ can be nested together to build web applications.  Paste's design closely
 follows ideas flowing from WSGI (Web Standard Gateway Interface).")
     (license license:expat)))
 
-(define-public python2-paste
-  (package-with-python2 python-paste))
-
 (define-public python-pastescript
   (package
     (name "python-pastescript")
@@ -4239,10 +4054,9 @@ follows ideas flowing from WSGI (Web Standard Gateway Interface).")
          "1h3nnhn45kf4pbcv669ik4faw04j58k8vbj1hwrc532k0nc28gy0"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (propagated-inputs
-     `(("python-paste" ,python-paste)
-       ("python-pastedeploy" ,python-pastedeploy)))
+     (list python-paste python-pastedeploy))
     (home-page (string-append "https://web.archive.org/web/20161025192515/"
                               "http://pythonpaste.org/script/"))
     (arguments
@@ -4260,27 +4074,33 @@ variety of features, from launching web applications to bootstrapping project
 layouts.")
     (license license:expat)))
 
-(define-public python2-pastescript
-  (package-with-python2 python-pastescript))
-
-(define-public python2-urlgrabber
+(define-public python-urlgrabber
   (package
-    (name "python2-urlgrabber")
-    (version "3.10.2")
+    (name "python-urlgrabber")
+    (version "4.1.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "urlgrabber" version))
        (sha256
-        (base32 "0w1h7hlsq406bxfy2pn4i9bd003bwl0q9b7p03z3g6yl0d21ddq5"))))
+        (base32 "0fg16zlw49cw7pjq9dhpc5vd35d5zz1mlki55m464qxfmfpzhnh7"))))
     (build-system python-build-system)
-    (arguments `(#:python ,python-2)) ; urlgrabber supports python2 only
-    (home-page "http://urlgrabber.baseurl.org")
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "python" "test/runtests.py")))))))
+    (propagated-inputs
+     (list python-pycurl python-setuptools python-six))
+    (home-page "http://urlgrabber.baseurl.org/") ; no HTTPS
     (synopsis "High-level cross protocol url-grabber")
-    (description "@code{urlgrabber} is Python2 library that unifies access to
-files available on web, FTP or locally.  It supports HTTP, FTP and file://
-protocols, it supports features like HTTP keep-alive, reget, throttling and
-more.")
+    (description
+     "@code{urlgrabber} is a library that unifies access to files available on
+the web, FTP or locally.  It supports HTTP, FTP and file:// protocols, it
+supports features like HTTP keep-alive, reget, throttling and more.")
     (license license:lgpl2.1+)))
 
 (define-public python-pycares
@@ -4307,27 +4127,67 @@ name resolutions asynchronously.")
 (define-public python-yarl
   (package
     (name "python-yarl")
-    (version "1.1.1")
+    (version "1.6.3")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "yarl" version))
        (sha256
         (base32
-         "1s6z13g8vgxfkkqwhn6imnm7pl7ky9arv4jygnn6bcndcbidg7d6"))))
+         "045z4ssg8g5h0qhz8hnx74hswgkndaldqq1xi5l1n5s0j996d44a"))
+       (modules '((guix build utils)))
+       (snippet
+         #~(begin
+             (delete-file "yarl/_quoting_c.c")))))
     (build-system python-build-system)
+    (arguments
+      (list #:tests? #f     ; test suite can't find yarl._quoting_c
+            #:phases
+            #~(modify-phases %standard-phases
+                (add-after 'unpack 'cythonize-code
+                  (lambda _
+                    (invoke "cython" "yarl/_quoting_c.pyx")))
+                (replace 'check
+                  (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+                    (when tests?
+                      (substitute* "setup.cfg"
+                        (("--cov=yarl") ""))
+                      (add-installed-pythonpath inputs outputs)
+                      (invoke "python" "-m" "pytest")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-cython python-pytest python-pytest-runner))
     (propagated-inputs
-     `(("python-idna" ,python-idna)
-       ("python-multidict" ,python-multidict)))
+     (list python-idna python-multidict))
     (home-page "https://github.com/aio-libs/yarl/")
     (synopsis "Yet another URL library")
     (description "@code{yarl} module provides handy @code{URL} class
 for URL parsing and changing.")
     (license license:asl2.0)))
 
+(define-public python-canvasapi
+  (package
+    (name "python-canvasapi")
+    (version "2.2.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/ucfopen/canvasapi")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0i13wrq2czcaz3h98pvnsl237104v611y9636jf32b1nn76sbp0p"))))
+    (build-system python-build-system)
+    (propagated-inputs (list python-pytz python-requests))
+    (native-inputs (list python-requests-mock))
+    (home-page "https://github.com/ucfopen/canvasapi")
+    (synopsis "API wrapper for the Canvas LMS")
+    (description
+     "CanvasAPI is a Python library for accessing Instructure’s Canvas LMS API.
+The library enables developers to programmatically manage Canvas courses,
+users, gradebooks, and more.")
+    (license license:expat)))
+
 (define-public python-google
   (package
     (name "python-google")
@@ -4360,20 +4220,23 @@ Google search engine.  Its module is called @code{googlesearch}.")
          "1wpbbbxfpy9mwxdy3kn352cb590ladv574j1aa2l4grjdqw3ln05"))))
     (build-system python-build-system)
     (arguments
-     '(#:tests? #f)) ; tests require internet access
+     `(#:tests? #f ; tests require internet access
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-setup-py
+           (lambda _
+             (substitute* "setup.py"
+               (("googleapiclient/discovery_cache")
+                "googleapiclient.discovery_cache"))
+             #t)))))
     (native-inputs
-     `(("python-httplib2" ,python-httplib2)
-       ("python-six" ,python-six)
-       ("python-oauth2client" ,python-oauth2client)
-       ("python-uritemplate" ,python-uritemplate)))
+     (list python-httplib2 python-six python-oauth2client
+           python-uritemplate))
     (home-page "https://github.com/google/google-api-python-client")
     (synopsis "Core Python library for accessing Google APIs")
     (description "Python client library for Google's discovery based APIs")
     (license license:asl2.0)))
 
-(define-public python2-google-api-client
-  (package-with-python2 python-google-api-client))
-
 (define-public python-hawkauthlib
   (package
     (name "python-hawkauthlib")
@@ -4387,8 +4250,7 @@ Google search engine.  Its module is called @code{googlesearch}.")
          "03ai47s4h8nfnrf25shbfvkm1b9n1ccd4nmmj280sg1fayi69zgg"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-requests" ,python-requests)
-       ("python-webob" ,python-webob)))
+     (list python-requests python-webob))
     (home-page "https://github.com/mozilla-services/hawkauthlib")
     (synopsis "Hawk Access Authentication protocol")
     (description
@@ -4409,9 +4271,9 @@ a simple HTTP request-signing scheme.")
          "1qvi79kfb8x9kxkm5lw2mp42hm82cpps1xknmsb5ghkwx1lpc8kc"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-requests" ,python-requests)))
+     (list python-requests))
     (native-inputs
-     `(("python-mock" ,python-mock)))
+     (list python-mock))
     (home-page "https://github.com/mozilla/PyBrowserID")
     (synopsis "Python library for the BrowserID protocol")
     (description
@@ -4433,16 +4295,10 @@ underlies Mozilla Persona.")
     (build-system python-build-system)
     (arguments '(#:tests? #f)) ; 17 tests require network access
     (propagated-inputs
-     `(("python-cryptography" ,python-cryptography)
-       ("python-hawkauthlib" ,python-hawkauthlib)
-       ("python-pybrowserid" ,python-pybrowserid)
-       ("python-requests" ,python-requests)
-       ("python-six" ,python-six)))
+     (list python-cryptography python-hawkauthlib python-pybrowserid
+           python-requests python-six))
     (native-inputs
-     `(("python-grequests" ,python-grequests)
-       ("python-mock" ,python-mock)
-       ("python-responses" ,python-responses)
-       ("python-unittest2" ,python-unittest2)))
+     (list python-grequests python-mock python-responses python-unittest2))
     (home-page "https://github.com/mozilla/PyFxA")
     (synopsis "Firefox Accounts client library for Python")
     (description
@@ -4463,7 +4319,7 @@ ecosystem.")
           "0m2nhi0j8wmgfscf974wd5v1xfq8mah286hil6npy1ys0m3y7222"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-idna" ,python-idna)))
+     (list python-idna))
     (home-page "https://github.com/python-hyper/hyperlink")
     (synopsis "Python module to create immutable URLs according to spec")
     (description "This package provides a Python module to create immutable, and
@@ -4483,12 +4339,12 @@ correct URLs for Python according to RFCs 3986 and 3987.")
           "0j4zwq9p1c9piv1vc66nxcv9s6hdinf90jwkbsm91k14npv9zq4i"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-attrs" ,python-attrs)
-       ("python-idna" ,python-idna)
-       ("python-incremental" ,python-incremental)
-       ("python-requests" ,python-requests)
-       ("python-service-identity" ,python-service-identity)
-       ("python-twisted" ,python-twisted)))
+     (list python-attrs
+           python-idna
+           python-incremental
+           python-requests
+           python-service-identity
+           python-twisted))
     (home-page "https://github.com/twisted/treq")
     (synopsis "Requests-like API built on top of twisted.web's Agent")
     (description "This package provides an HTTP library inspired by
@@ -4513,9 +4369,7 @@ high level API for making HTTP requests when using Twisted.")
       ;; https://github.com/crossbario/autobahn-python/issues/1117
      `(#:tests? #f))
     (propagated-inputs
-     `(("python-cffi" ,python-cffi)
-       ("python-twisted" ,python-twisted)
-       ("python-txaio" ,python-txaio)))
+     (list python-cffi python-twisted python-txaio))
     (home-page "https://crossbar.io/autobahn/")
     (synopsis "Web Application Messaging Protocol implementation")
     (description "This package provides an implementation of the @dfn{Web Application
@@ -4553,8 +4407,7 @@ such as IoT applications or multi-user database-driven business applications.")
              (delete-file "ws4py/server/cherrypyserver.py")
              #t)))))
     (propagated-inputs
-     `(("python-gevent" ,python-gevent)
-       ("python-tornado" ,python-tornado)))
+     (list python-gevent python-tornado))
     (home-page "https://github.com/Lawouach/WebSocket-for-Python")
     (synopsis "WebSocket client and server library")
     (description
@@ -4565,21 +4418,22 @@ Python.")
 (define-public python-slugify
   (package
     (name "python-slugify")
-    (version "4.0.1")
+    (version "5.0.2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "python-slugify" version))
        (sha256
-        (base32 "0w22fapghmzk3xdasc4dn7h8sl58l08d1h5zbf72dh80drv1g9b9"))))
+        (base32 "1aww2ncglyii4jkbfjxqhinivawf9zmwifcj32d69gpwp6h86czi"))))
     (propagated-inputs
-     `(("python-unidecode" ,python-unidecode)))
+     (list python-unidecode python-text-unidecode))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda _
-             (invoke "python" "test.py"))))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "python" "test.py")))))))
     (build-system python-build-system)
     (home-page "https://github.com/un33k/python-slugify")
     (synopsis "Python Slugify application that handles Unicode")
@@ -4600,10 +4454,9 @@ library to create slugs from unicode strings while keeping it DRY.")
          "0pmigd521j2228xf8x34vbx0niwvms7xl7za0lymywj0vydjqxiy"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-jinja2" ,python-jinja2)
-       ("python-six" ,python-six)))
+     (list python-jinja2 python-six))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/python-visualization/branca")
     (synopsis "Generate complex HTML+JS pages with Python")
     (description "Generate complex HTML+JS pages with Python")
@@ -4634,10 +4487,8 @@ library to create slugs from unicode strings while keeping it DRY.")
              (invoke "python" "-m" "pytest" "-k"
                      "not test_speedups"))))))
     (native-inputs
-     `(("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-flake8" ,python-pytest-flake8)
-       ("python-pytest-isort" ,python-pytest-isort)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-pytest-cov python-pytest-flake8 python-pytest-isort
+           python-pytest-runner))
     (home-page "https://tinycss.readthedocs.io/")
     (synopsis "Complete yet simple CSS parser for Python")
     (description
@@ -4692,13 +4543,10 @@ modules:
              (add-installed-pythonpath inputs outputs)
              (invoke "pytest" "-vv"))))))
     (propagated-inputs
-     `(("python-webencodings" ,python-webencodings)))
+     (list 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)))
+     (list python-flit python-pytest python-pytest-cov
+           python-pytest-flake8 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
@@ -4724,15 +4572,22 @@ in various CSS modules.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'disable-linters
+           ;; Their check fails; none of our business.
+           (lambda _
+             (substitute* '("setup.py" "pyproject.toml")
+               (("'pytest-flake8',") "")
+               (("'pytest-isort',") "")
+               (("--flake8") "")
+               (("--isort") ""))))
          (replace 'check
-           (lambda _ (invoke "pytest"))))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (lambda _ (invoke "pytest"))))))))
     (propagated-inputs
-     `(("python-tinycss2" ,python-tinycss2)))
+     (list python-tinycss2))
     (native-inputs
-     `(("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-flake8" ,python-pytest-flake8)
-       ("python-pytest-isort" ,python-pytest-isort)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-pytest-cov python-pytest-runner))
     (home-page "https://cssselect2.readthedocs.io/")
     (synopsis "CSS selectors for Python ElementTree")
     (description "@code{cssselect2} is a straightforward implementation of
@@ -4747,33 +4602,58 @@ hard or impossible to fix in cssselect.")
 (define-public python-uvloop
   (package
     (name "python-uvloop")
-    (version "0.14.0")
+    (version "0.16.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "uvloop" version))
        (sha256
-        (base32 "07j678z9gf41j98w72ysrnb5sa41pl5yxd7ib17lcwfxqz0cjfhj"))))
+        (base32 "0a0jzwrhkszknh14alflrp1db6dyjp7ph730f9yc5lb7gc6c4jzp"))
+       (modules '((guix build utils)))
+        (snippet
+         '(begin (delete-file-recursively "vendor")
+                 (delete-file  "uvloop/loop.c")))))
     (build-system python-build-system)
     (arguments
-     '(#:tests? #f ;FIXME: tests hang and with some errors in the way
-       #:phases
+     `(#:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'preparations
            (lambda _
              ;; Use packaged libuv.
              (substitute* "setup.py" (("self.use_system_libuv = False")
                                       "self.use_system_libuv = True"))
-             #t)))))
+             ;; Replace hardcoded shell command.
+             (substitute* "uvloop/loop.pyx"
+               (("b'/bin/sh'") (string-append "b'" (which "sh") "'")))
+             #t))
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               ;; Remove Python module, which conflicts with the installed version,
+               ;; but lacks the built C module.
+               (delete-file-recursively "uvloop")
+               ;; The tests are prone to get stuck. Use pytest-timeout’s --timeout
+               ;; flag to get a meaningful idea about where.
+               (invoke "pytest" "-vv" "--timeout=300"
+                       "-k" ,(string-append
+                              ;; Timeout, because SIGINT cannot be sent to child.
+                              "not test_signals_sigint_pycode_continue "
+                              "and not test_signals_sigint_pycode_stop "
+                              "and not test_signals_sigint_uvcode "
+                              "and not test_signals_sigint_uvcode_two_loop_runs "
+                              ;; It looks like pytest is preventing
+                              ;; custom stdout/stderr redirection,
+                              ;; even with -s.
+                              "and not test_process_streams_redirect "))))))))
     (native-inputs
-     `(("python-aiohttp" ,python-aiohttp)
-       ("python-cython" ,python-cython)
-       ("python-flake8" ,python-flake8)
-       ("python-psutil" ,python-psutil)
-       ("python-pyopenssl" ,python-pyopenssl)
-       ("python-twine" ,python-twine)))
+     (list python-aiohttp
+           python-cython
+           python-psutil
+           python-pyopenssl
+           python-pytest
+           python-pytest-timeout))
     (inputs
-     `(("libuv" ,libuv)))
+     (list libuv))
     (home-page "https://github.com/MagicStack/uvloop")
     (synopsis "Fast implementation of asyncio event loop on top of libuv")
     (description
@@ -4801,14 +4681,11 @@ event loop.  It is implemented in Cython and uses libuv under the hood.")
            (lambda _
              (invoke "make" "-C" "docs" "PAPER=a4" "html" "info")
              (delete-file "docs/build/texinfo/Makefile")
-             (delete-file "docs/build/texinfo/Gunicorn.texi")
-             #t))
+             (delete-file "docs/build/texinfo/Gunicorn.texi")))
          (replace 'check
            (lambda* (#:key tests? #:allow-other-keys)
              (if tests?
                  (begin
-                   (setenv "PYTHONPATH"
-                           (string-append ".:" (getenv "PYTHONPATH")))
                    (invoke "pytest" "-vv"
                            ;; Disable the geventlet tests because eventlet uses
                            ;; dnspython, which does not work in the build
@@ -4847,13 +4724,13 @@ event loop.  It is implemented in Cython and uses libuv under the hood.")
                            (string-append output sitedir))
                          (list python out))))))))))
     (native-inputs
-     `(("binutils" ,binutils)  ;; for ctypes.util.find_library()
-       ("python-aiohttp" ,python-aiohttp)
-       ("python-gevent" ,python-gevent)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-sphinx" ,python-sphinx)
-       ("texinfo" ,texinfo)))
+     (list binutils ;; for ctypes.util.find_library()
+           python-aiohttp
+           python-gevent
+           python-pytest
+           python-pytest-cov
+           python-sphinx
+           texinfo))
     (home-page "https://gunicorn.org/")
     (synopsis "Python WSGI HTTP Server for UNIX")
     (description "Gunicorn ‘Green Unicorn’ is a Python WSGI HTTP
@@ -4912,10 +4789,9 @@ and fairly speedy.")
              (substitute* "setup.py" (("Cython==") "Cython>="))
              #t)))))
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-pytest" ,python-pytest)))
+     (list python-cython python-pytest))
     (inputs
-     `(("http-parser" ,http-parser)))
+     (list http-parser))
     (home-page "https://github.com/MagicStack/httptools")
     (synopsis "Collection of framework independent HTTP protocol utils")
     (description
@@ -4925,7 +4801,7 @@ and fairly speedy.")
 (define-public python-uvicorn
   (package
     (name "python-uvicorn")
-    (version "0.11.8")
+    (version "0.13.2")
     (source
      (origin
        ;; PyPI tarball has no tests.
@@ -4935,7 +4811,7 @@ and fairly speedy.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "00iidg5ysp7k00bw3kmkvr8mghnh4jdi0p2ryiarhryf8wz2r3fy"))))
+        (base32 "04zgmp9z46k72ay6cz7plga6d3w3a6x41anabm7ramp7jdqf6na9"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -4945,24 +4821,16 @@ and fairly speedy.")
              (add-installed-pythonpath inputs outputs)
              (invoke "pytest" "-vv"))))))
     (native-inputs
-     `(("python-black" ,python-black)
-       ("python-codecov" ,python-codecov)
-       ("python-flake8" ,python-flake8)
-       ("python-isort" ,python-isort)
-       ("python-mypy" ,python-mypy)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-mock" ,python-pytest-mock)
-       ("python-requests" ,python-requests)))
-    (propagated-inputs
-     `(("python-click" ,python-click)
-       ("python-h11" ,python-h11)
-       ("python-httptools" ,python-httptools)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-uvloop" ,python-uvloop)
-       ("python-watchgod" ,python-watchgod)
-       ("python-websockets" ,python-websockets)
-       ("python-wsproto" ,python-wsproto)))
+     (list python-pytest python-pytest-mock python-requests
+           python-trustme python-wsproto))
+    (propagated-inputs
+     (list python-click
+           python-h11
+           python-httptools
+           python-pyyaml
+           python-uvloop
+           python-watchgod
+           python-websockets))
     (home-page "https://github.com/encode/uvicorn")
     (synopsis "Fast ASGI server implementation")
     (description
@@ -4991,16 +4859,10 @@ for HTTP/2 is planned.")
              (delete-file "translation_finder/test_api.py")
              #t)))))
     (propagated-inputs
-     `(("python-chardet" ,python-chardet)
-       ("python-pathlib2" ,python-pathlib2)
-       ("python-ruamel.yaml" ,python-ruamel.yaml)
-       ("python-six" ,python-six)))
+     (list python-chardet python-pathlib2 python-ruamel.yaml python-six))
     (native-inputs
-     `(("python-codecov" ,python-codecov)
-       ("python-codacy-coverage" ,python-codacy-coverage)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-runner" ,python-pytest-runner)
-       ("python-twine" ,python-twine)))
+     (list python-codecov python-codacy-coverage python-pytest-cov
+           python-pytest-runner python-twine))
     (home-page "https://weblate.org/")
     (synopsis "Translation file finder for Weblate")
     (description "This package provides a function to find translation file in
@@ -5021,11 +4883,9 @@ is part of the Weblate translation platform.")
           "0zl6kz8v8cg1bcy2r78b2snb0lpw0b573gdx2x1ps0nhsh75l4j5"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-requests" ,python-requests)
-       ("python-six" ,python-six)))
+     (list python-requests python-six))
     (native-inputs
-     `(("python-httmock" ,python-httmock)
-       ("python-mock" ,python-mock)))
+     (list python-httmock python-mock))
     (home-page
       "https://github.com/python-gitlab/python-gitlab")
     (synopsis "Interact with GitLab API")
@@ -5057,7 +4917,7 @@ with GitLab instances through their API.")
              (add-installed-pythonpath inputs outputs)
              (invoke "py.test"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/joeyespo/path-and-address")
     (synopsis "Functions for command-line server tools used by humans")
     (description "Path-and-address resolves ambiguities of command-line
@@ -5083,15 +4943,14 @@ interfaces, inferring which argument is the path, and which is the address.")
            "0kx5hgb3q19i4l18a4vqdq9af390xgpk88lp2ay75qi96k0dc68w"))))
       (build-system python-build-system)
       (propagated-inputs
-       `(("python-docopt" ,python-docopt)
-         ("python-flask" ,python-flask)
-         ("python-markdown" ,python-markdown)
-         ("python-path-and-address" ,python-path-and-address)
-         ("python-pygments" ,python-pygments)
-         ("python-requests" ,python-requests)))
+       (list python-docopt
+             python-flask
+             python-markdown
+             python-path-and-address
+             python-pygments
+             python-requests))
       (native-inputs
-       `(("python-pytest" ,python-pytest)
-         ("python-responses" ,python-responses)))
+       (list python-pytest python-responses))
       (arguments
        `(#:phases
          (modify-phases %standard-phases
@@ -5132,9 +4991,9 @@ without requiring a page refresh.")
                (("urllib2") "urllib3"))
              #t)))))
     (propagated-inputs
-     `(("python-urllib3" ,python-urllib3)))
+     (list python-urllib3))
     (native-inputs
-     `(("python-mock" ,python-mock)))
+     (list python-mock))
     (home-page "https://github.com/kmike/port-for/")
     (synopsis "TCP localhost port finder and association manager")
     (description
@@ -5156,8 +5015,7 @@ association.")
          "0rhggz185bxc3zjnfpmhcvibyzi86i624za1lfh7x7ajsxw4y9c9"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-tornado" ,python-tornado)))
+     (list python-six python-tornado))
     (home-page "https://github.com/lepture/python-livereload")
     (synopsis "Python LiveReload")
     (description
@@ -5211,24 +5069,21 @@ and serve updated contents upon changes to the directory.")
                        "--cov=tests" "tests"))
              #t)))))
     (native-inputs
-     `(("python-autoflake" ,python-autoflake)
-       ("python-flake8" ,python-flake8)
-       ("python-flake8-bugbear" ,python-flake8-bugbear)
-       ("python-flake8-pie" ,python-flake8-pie)
-       ("python-isort" ,python-isort)
-       ("python-mypy" ,python-mypy)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-asyncio" ,python-pytest-asyncio)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-trio" ,python-pytest-trio)
-       ("python-uvicorn" ,python-uvicorn)
-       ("python-trustme" ,python-trustme)))
-    (propagated-inputs
-     `(("python-h11" ,python-h11)
-       ("python-h2" ,python-h2)
-       ("python-sniffio" ,python-sniffio)
-       ("python-trio" ,python-trio)
-       ("python-trio-typing" ,python-trio-typing)))
+     (list python-autoflake
+           python-flake8
+           python-flake8-bugbear
+           python-flake8-pie
+           python-isort
+           python-mypy
+           python-pytest
+           python-pytest-asyncio
+           python-pytest-cov
+           python-pytest-trio
+           python-uvicorn
+           python-trustme))
+    (propagated-inputs
+     (list python-h11 python-h2 python-sniffio python-trio
+           python-trio-typing))
     (home-page "https://github.com/encode/httpcore")
     (synopsis "Minimal, low-level HTTP client")
     (description
@@ -5266,43 +5121,44 @@ Some things HTTP Core does do:
      `(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda _
-             (invoke "pytest" "-vv" "-k"
-                     ;; These tests try to open an outgoing connection.
-                     (string-append
-                      "not test_connect_timeout"
-                      " and not test_that_send_cause_async_client_to_be_not_"
-                      "closed"
-                      " and not test_that_async_client_caused_warning_when_"
-                      "being_deleted"
-                      " and not test_that_send_cause_client_to_be_not_closed"
-                      " and not test_async_proxy_close"
-                      " and not test_sync_proxy_close")))))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "pytest" "-vv" "-k"
+                       ;; These tests try to open an outgoing connection.
+                       (string-append
+                        "not test_connect_timeout"
+                        " and not test_that_send_cause_async_client_to_be_not_"
+                        "closed"
+                        " and not test_that_async_client_caused_warning_when_"
+                        "being_deleted"
+                        " and not test_that_send_cause_client_to_be_not_closed"
+                        " and not test_async_proxy_close"
+                        " and not test_sync_proxy_close"))))))))
     (native-inputs
-     `(("python-autoflake" ,python-autoflake)
-       ("python-black" ,python-black)
-       ("python-cryptography" ,python-cryptography)
-       ("python-flake8" ,python-flake8)
-       ("python-flake8-bugbear" ,python-flake8-bugbear)
-       ("python-flake8-pie" ,python-flake8-pie)
-       ("python-isort" ,python-isort)
-       ("python-mypy" ,python-mypy)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-asyncio" ,python-pytest-asyncio)
-       ("python-pytest-trio" ,python-pytest-trio)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-trio" ,python-trio)
-       ("python-trio-typing" ,python-trio-typing)
-       ("python-trustme" ,python-trustme)
-       ("python-uvicorn" ,python-uvicorn)))
-    (propagated-inputs
-     `(("python-brotli" ,python-brotli)
-       ("python-certifi" ,python-certifi)
-       ("python-chardet" ,python-chardet)
-       ("python-httpcore" ,python-httpcore)
-       ("python-idna" ,python-idna)
-       ("python-rfc3986" ,python-rfc3986)
-       ("python-sniffio" ,python-sniffio)))
+     (list python-autoflake
+           python-black
+           python-cryptography
+           python-flake8
+           python-flake8-bugbear
+           python-flake8-pie
+           python-isort
+           python-mypy
+           python-pytest
+           python-pytest-asyncio
+           python-pytest-trio
+           python-pytest-cov
+           python-trio
+           python-trio-typing
+           python-trustme
+           python-uvicorn))
+    (propagated-inputs
+     (list python-brotli
+           python-certifi
+           python-chardet
+           python-httpcore
+           python-idna
+           python-rfc3986
+           python-sniffio))
     (home-page "https://www.python-httpx.org/")
     (synopsis "HTTP client for Python")
     (description
@@ -5367,13 +5223,9 @@ Plus all the standard features of requests:
                (("--doctest-module")
                 "--doctest-modules")))))))
     (propagated-inputs
-     `(("python-certauth" ,python-certauth)
-       ("python-gevent" ,python-gevent)
-       ("python-websocket-client" ,python-websocket-client)))
+     (list python-certauth python-gevent python-websocket-client))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-waitress" ,python-waitress)))
+     (list python-mock python-pytest-cov python-waitress))
     (home-page "https://github.com/webrecorder/wsgiprox")
     (synopsis "HTTP/S proxy with WebSockets over WSGI")
     (description "@code{wsgiprox} is a Python WSGI (Web Server Gateway
@@ -5414,10 +5266,8 @@ them to a designated prefix.")
                                                 "not test_remote") "'"))))))))
       (native-inputs
        ;; These inputs are required for the test suite.
-       `(("python-httpbin" ,python-httpbin)
-         ("python-pytest-cov" ,python-pytest-cov)
-         ("python-requests" ,python-requests)
-         ("python-wsgiprox" ,python-wsgiprox)))
+       (list python-httpbin python-pytest-cov python-requests
+             python-wsgiprox))
       (home-page "https://github.com/webrecorder/warcio")
       (synopsis "Streaming web archival archive (WARC) library")
       (description "warcio is a Python library to read and write the WARC format
@@ -5438,7 +5288,15 @@ files.")
          (base32
           "03s3ml6sbki24aajllf8aily0xzrn929zxi84p50zkkbikdd4raw"))))
     (build-system python-build-system)
-    (arguments '(#:tests? #f))  ; Tests not included in release tarball.
+    (arguments
+     '(#:tests? #f  ; Tests not included in release tarball.
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-websockets-package-name-requirement
+           (lambda* (#:key inputs #:allow-other-keys)
+             ;; Python package names use dot as separator.
+             (substitute* "setup.py"
+               (("websockets/extensions") "websockets.extensions")))))))
     (home-page "https://github.com/aaugustin/websockets")
     (synopsis
      "Python implementation of the WebSocket Protocol (RFC 6455 & 7692)")
@@ -5463,7 +5321,7 @@ it provides an elegant coroutine-based API.")
          "039hf9knvl4s3hp21bzwsp1g5ri9gxsh504dp48lc6nr1av35byy"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-urllib3" ,python-urllib3)))
+     (list python-urllib3))
     (home-page
      "https://github.com/SeleniumHQ/selenium/")
     (synopsis "Python bindings for Selenium")
@@ -5509,9 +5367,7 @@ major web browsers.")
              (delete-file "tests/test_validator.py")
              (invoke "python" "-m" "pytest" "tests"))))))
     (native-inputs
-     `(("rapidjson" ,rapidjson)
-       ("python-pytest" ,python-pytest)
-       ("python-pytz" ,python-pytz)))
+     (list rapidjson python-pytest python-pytz))
     (home-page "https://github.com/python-rapidjson/python-rapidjson")
     (synopsis "Python wrapper around rapidjson")
     (description "This package provides a python wrapper around rapidjson.")
@@ -5592,7 +5448,7 @@ translation.")
                 "1hy8k0nv2mxq94y5aysk6hjk9ryb4bsd13g83m60hcyzxz3wflc3"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://docs.pylonsproject.org/projects/plaster/en/latest/")
     (synopsis "Configuration loader for multiple config file formats")
     (description
@@ -5616,16 +5472,15 @@ be registered via an entrypoint.")
                 "1zg7gcsvc1kzay1ry5p699rg2qavfsxqwl17mqxzr0gzw6j9679r"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (propagated-inputs
-     `(("python-plaster" ,python-plaster)
-       ("python-pastedeploy" ,python-pastedeploy)))
+     (list python-plaster python-pastedeploy))
     (home-page "https://github.com/Pylons/plaster_pastedeploy")
     (synopsis "Plugin for python-plaster adding PasteDeploy syntax")
     (description
      "This plugin for @code{python-plaster} adds support for PasteDeploy
 syntax, it provides a plaster @code{Loader} object that can parse ini files
-according to the standard set by PasteDeploy ")
+according to the standard set by PasteDeploy")
     (license license:expat)))
 
 (define-public python-hupper
@@ -5641,13 +5496,10 @@ according to the standard set by PasteDeploy ")
     (build-system python-build-system)
     (arguments '(#:test-target "pytest"))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)
-       ("python-watchdog" ,python-watchdog)
-       ("python-mock" ,python-mock)
-       ("python-pytest-cov" ,python-pytest-cov)))
+     (list python-pytest python-pytest-runner python-watchdog python-mock
+           python-pytest-cov))
     (propagated-inputs
-     `(("python-pytz" ,python-pytz)))
+     (list python-pytz))
     (home-page "https://readthedocs.org/projects/hupper")
     (synopsis "Integrated process monitor tracking changes to imported Python files")
     (description
@@ -5668,16 +5520,16 @@ changed the process is restarted.")
                 "0rkxs1ajycg2zh1c94xlmls56mx5m161sn8112skj0amza6cn36q"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-hupper" ,python-hupper)
-       ("python-plaster-pastedeploy" ,python-plaster-pastedeploy)
-       ("python-translationstring" ,python-translationstring)
-       ("python-venusian" ,python-venusian)
-       ("python-webob" ,python-webob)
-       ("python-zope-deprecation" ,python-zope-deprecation)
-       ("python-zope-interface" ,python-zope-interface)
-       ("python-webtest" ,python-webtest)
-       ("python-zope-component" ,python-zope-component)
-       ("python-plaster" ,python-plaster)))
+     (list python-hupper
+           python-plaster-pastedeploy
+           python-translationstring
+           python-venusian
+           python-webob
+           python-zope-deprecation
+           python-zope-interface
+           python-webtest
+           python-zope-component
+           python-plaster))
     (home-page "https://trypyramid.com/")
     (synopsis "Python web-framework suitable for small and large sites")
     (description
@@ -5708,7 +5560,7 @@ based on filters.")
 (define-public python-flask-restx
   (package
     (name "python-flask-restx")
-    (version "0.2.0")
+    (version "0.5.1")
     (source
      ;; We fetch from the Git repo because there are no tests in the PyPI
      ;; archive.
@@ -5719,21 +5571,17 @@ based on filters.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0xf2vkmdngp9cv9klznizai4byxjcf0iqh1pr4b83nann0jxqwy7"))))
+        (base32 "18vrmknyxw6adn62pz3kr9kvazfgjgl4pgimdf8527fyyiwcqy15"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-aniso8601" ,python-aniso8601)
-       ("python-flask" ,python-flask)
-       ("python-jsonschema" ,python-jsonschema)
-       ("python-pytz" ,python-pytz)))
+     (list python-aniso8601 python-flask python-jsonschema python-pytz))
     (native-inputs
-     `(("python-blinker" ,python-blinker)
-       ("python-faker" ,python-faker)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-benchmark"
-        ,python-pytest-benchmark)
-       ("python-pytest-flask" ,python-pytest-flask)
-       ("python-pytest-mock" ,python-pytest-mock)))
+     (list python-blinker
+           python-faker
+           python-pytest
+           python-pytest-benchmark
+           python-pytest-flask
+           python-pytest-mock))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -5741,7 +5589,8 @@ based on filters.")
            (lambda _
              (invoke "pytest" "--benchmark-skip" "-k"
                      ;; Those tests need internet access
-                     "not test_check and not test_valid_value_check"))))))
+                     "not test_check and not test_valid_value_check \
+and not test_override_app_level"))))))
     (home-page "https://github.com/python-restx/flask-restx")
     (synopsis
      "Framework for fast, easy and documented API development with Flask")
@@ -5753,6 +5602,9 @@ decorators and tools to describe your API and expose its documentation properly
 Swagger.")
     (license license:bsd-3)))
 
+(define-public python-flask-restplus
+  (deprecated-package "python-flask-restplus" python-flask-restx))
+
 (define-public python-flask-socketio
   (package
     (name "python-flask-socketio")
@@ -5766,8 +5618,7 @@ Swagger.")
          "09r2gpj2nbn72v2zaf6xsvlazln77pgqzp2pg2021nja47sijhsw"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-flask" ,python-flask)
-       ("python-socketio" ,python-socketio)))
+     (list python-flask python-socketio))
     (arguments '(#:tests? #f))        ; Tests not included in release tarball.
     (home-page "https://github.com/miguelgrinberg/Flask-SocketIO/")
     (synopsis "Socket.IO integration for Flask applications")
@@ -5787,9 +5638,9 @@ Swagger.")
           "1bdzay7j70fly5fy6wbdi8fbrxjrrlxnxnw226rwry1c8a351rpy"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (native-inputs
-     `(("python-zope-testing" ,python-zope-testing)))
+     (list python-zope-testing))
     (home-page "https://pypi.org/project/manuel/")
     (synopsis "Build tested documentation")
     (description
@@ -5809,11 +5660,9 @@ Swagger.")
           "0imm9ji03lhkpcfmhid7x5209ix8g2rlgki9ik1qxks4b8sm8gzq"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-cffi" ,python-cffi)
-       ("python-zope-interface" ,python-zope-interface)))
+     (list python-cffi python-zope-interface))
     (native-inputs
-     `(("python-manuel" ,python-manuel)
-       ("python-zope-testrunner" ,python-zope-testrunner)))
+     (list python-manuel python-zope-testrunner))
     (home-page "https://github.com/zopefoundation/persistent/")
     (synopsis "Translucent persistent objects")
     (description "This package contains a generic persistence implementation for
@@ -5834,12 +5683,9 @@ Python.  It forms the core protocol for making objects interact
           "0iiq0g9k1g6qgqq84q9h6639vlvzznk1rgdm0rfcnnqkbkmsbr3w"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-persistent" ,python-persistent)
-       ("python-zope-interface" ,python-zope-interface)))
+     (list python-persistent python-zope-interface))
     (native-inputs
-     `(("python-persistent" ,python-persistent)
-       ("python-transaction" ,python-transaction)
-       ("python-zope-testrunner" ,python-zope-testrunner)))
+     (list python-persistent python-transaction python-zope-testrunner))
     (home-page "https://github.com/zopefoundation/BTrees")
     (synopsis "Scalable persistent object containers")
     (description
@@ -5862,11 +5708,9 @@ conflicts detected by that mechanism.")
           "0bdaks31bgfh78wnj3sij24bfysmqk25crsis6amz8kzrc0d82iv"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-zope-interface" ,python-zope-interface)))
+     (list python-zope-interface))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-mock" ,python-mock)
-       ("python-nose" ,python-nose)))
+     (list python-coverage python-mock python-nose))
     (home-page "https://github.com/zopefoundation/transaction")
     (synopsis "Transaction management for Python")
     (description "This package contains a generic transaction implementation
@@ -5886,7 +5730,7 @@ for Python.  It is mainly used by the ZODB.")
           "1xd2jm3yn31bnk1kqzggils2rxj26ylxsfz3ap7bhr3ilhnbg3rx"))))
     (build-system python-build-system)
     (arguments '(#:tests? #f)) ; Tests not shipped in pypi release.
-    (propagated-inputs `(("python-six" ,python-six)))
+    (propagated-inputs (list python-six))
     (home-page "https://github.com/rory/robot-detection")
     (synopsis "Detect web crawlers")
     (description
@@ -5910,9 +5754,9 @@ Agent is a web crawler.  It uses the list of registered robots from
     (arguments
      '(#:tests? #f)) ; Tests require network access.
     (propagated-inputs
-     `(("python-requests" ,python-requests)))
+     (list python-requests))
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-setuptools-scm))
     (home-page "https://github.com/django-haystack/pysolr/")
     (synopsis "Lightweight python wrapper for Apache Solr")
     (description
@@ -5920,6 +5764,44 @@ Agent is a web crawler.  It uses the list of registered robots from
 using a pure Python implementation.")
     (license license:bsd-3)))
 
+(define-public python-pyjsparser
+  (package
+    (name "python-pyjsparser")
+    (version "2.7.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pyjsparser" version))
+       (sha256
+        (base32 "0ycmf9fsvwliqmm1n6sfz7x71y7i2kbfgn39d8lsbiccfxmxlq5y"))))
+    (build-system python-build-system)
+    (home-page "https://github.com/PiotrDabkowski/pyjsparser")
+    (synopsis "Fast JavaScript parser")
+    (description "This package provides a fast JavaScript parser (based on
+esprima.js)")
+    (license license:expat)))
+
+(define-public python-js2py
+  (package
+    (name "python-js2py")
+    (version "0.71")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "Js2Py" version))
+       (sha256
+        (base32 "1kkzkys6dfcbdv51vqxr9cmak350ab4mmykb8dysx60lvl4i06x4"))))
+    (build-system python-build-system)
+    (arguments '(#:tests? #false)) ; none included
+    (propagated-inputs
+     (list python-pyjsparser python-six python-tzlocal))
+    (home-page "https://github.com/PiotrDabkowski/Js2Py")
+    (synopsis "JavaScript to Python translator")
+    (description
+     "This package provides a JavaScript to Python translator and a JavaScript
+interpreter written in pure Python.")
+    (license license:expat)))
+
 (define-public python-http-ece
   (package
     (name "python-http-ece")
@@ -5941,12 +5823,9 @@ using a pure Python implementation.")
          (add-after 'unpack 'change-directory
            (lambda _ (chdir "python") #t)))))
     (propagated-inputs
-     `(("python-cryptography" ,python-cryptography)))
+     (list python-cryptography))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-flake8" ,python-flake8)
-       ("python-mock" ,python-mock)
-       ("python-nose" ,python-nose)))
+     (list python-coverage python-flake8 python-mock python-nose))
     (home-page "https://github.com/web-push-libs/encrypted-content-encoding")
     (synopsis "Encrypted Content Encoding for HTTP")
     (description
@@ -5957,26 +5836,27 @@ Encoding for HTTP.")
 (define-public python-cloudscraper
   (package
     (name "python-cloudscraper")
-    (version "1.2.48")
+    (version "1.2.58")
     (source
      (origin
-       (method url-fetch)
-       (uri (pypi-uri "cloudscraper" version))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/VeNoMouS/cloudscraper")
+             ;; Corresponds to 1.2.58
+             (commit "f3a3d067ea8b5238e9a0948aed0c3fa0d9c29b96")))
+       (file-name (git-file-name name version))
        (sha256
-        (base32 "0qjxzb0z5bprvmdhx42ayqhlhi2h49d9dwc0vvycj817s71f2sxv"))
+        (base32 "18fbp086imabjxly04rrchbf6n6m05bpd150zxbw7z2w3mjnpsqd"))
        (modules '((guix build utils)))
        (snippet
         '(with-directory-excursion "cloudscraper"
            (for-each delete-file
-                     '("captcha/2captcha.py"
-                       "captcha/9kw.py"
-                       "captcha/anticaptcha.py"
-                       "captcha/deathbycaptcha.py"))
+                     '("captcha/9kw.py"
+                       "captcha/anticaptcha.py"))
            (substitute* "__init__.py"
              ;; Perhaps it's a joke, but don't promote proprietary software.
              (("([Th]is feature is not available) in the .*'" _ prefix)
-              (string-append prefix ".'")))
-           #t))))
+              (string-append prefix ".'")))))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -5987,15 +5867,28 @@ Encoding for HTTP.")
            (lambda _
              (with-directory-excursion "cloudscraper"
                (for-each delete-file
-                         '("interpreters/js2py.py"
-                           "interpreters/v8.py")))
-             #t)))))
-    (propagated-inputs
-     `(("python-requests" ,python-requests)
-       ("python-requests-toolbelt" ,python-requests-toolbelt-0.9.1)
-       ("python-pyparsing" ,python-pyparsing-2.4.7)))
+                         '("interpreters/v8.py")))))
+         (add-after 'unpack 'fix-references
+           (lambda _
+             (substitute* "cloudscraper/interpreters/nodejs.py"
+               (("'node'")
+                (string-append "'" (which "node") "'")))))
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "pytest" "-vv"
+                       "-k" "not test_getCookieString_challenge_js_challenge1_16_05_2020")))))))
+    (inputs
+     (list node))
+    (propagated-inputs
+     (list python-js2py
+           python-polling2
+           python-requests
+           python-requests-toolbelt
+           python-responses
+           python-pyparsing-2.4.7))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/venomous/cloudscraper")
     (synopsis "Cloudflare anti-bot bypass")
     (description
@@ -6030,6 +5923,23 @@ over IMAP:
 @end itemize")
     (license license:asl2.0)))
 
+(define-public python-giturlparse
+  (package
+    (name "python-giturlparse")
+    (version "0.10.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "giturlparse" version))
+        (sha256
+         (base32 "0dxk7sqy8ibaqdl6jzxd0ac1p7shzp4p9f3lhkd7qw9h3llsp595"))))
+    (build-system python-build-system)
+    (home-page "https://github.com/nephila/giturlparse")
+    (synopsis "Git URL parsing module")
+    (description "This package provides a git URL parsing module which supports
+parsing and rewriting of remote git URLs from various hosting providers.")
+    (license license:asl2.0)))
+
 (define-public python-hstspreload
   (package
     (name "python-hstspreload")
@@ -6054,14 +5964,14 @@ as a Python package.")
 (define-public python-sanic
   (package
     (name "python-sanic")
-    (version "20.12.2")
+    (version "20.12.4")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "sanic" version))
        (sha256
         (base32
-         "1c02gdp1j18xny9jd33fp0w57qqi7g66zwmaykv2dhcks96f5mxr"))))
+         "0axfc151s7nrykzypzciyvkxxrs5ayx8kxv4r620hjb9w3jjhfnp"))))
     (build-system python-build-system)
     (arguments
      '(#:phases
@@ -6078,28 +5988,30 @@ as a Python package.")
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (add-installed-pythonpath inputs outputs)
              (invoke "pytest" "-vv" "./tests" "-k"
-                     "not test_zero_downtime and not test_gunicorn_worker"))))))
-    (propagated-inputs
-     `(("python-aiofiles" ,python-aiofiles)
-       ("python-httptools" ,python-httptools)
-       ("python-httpx" ,python-httpx)
-       ("python-multidict" ,python-multidict)
-       ("python-ujson" ,python-ujson)
-       ("python-uvloop" ,python-uvloop)
-       ("python-websockets" ,python-websockets)))
+                     (string-append "not test_zero_downtime "
+                                    "and not test_gunicorn_worker "
+                                    "and not test_logo_")))))))
+    (propagated-inputs
+     (list python-aiofiles
+           python-httptools
+           python-httpx
+           python-multidict
+           python-ujson
+           python-uvloop
+           python-websockets))
     (native-inputs
-     `(("gunicorn" ,gunicorn)
-       ("python-beautifulsoup4" ,python-beautifulsoup4)
-       ("python-hstspreload" ,python-hstspreload)
-       ("python-httpcore" ,python-httpcore)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-benchmark" ,python-pytest-benchmark)
-       ("python-pytest-sanic" ,python-pytest-sanic)
-       ("python-pytest-sugar" ,python-pytest-sugar)
-       ("python-pytest-asyncio" ,python-pytest-asyncio)
-       ("python-urllib3" ,python-urllib3)
-       ("python-uvicorn" ,python-uvicorn)))
+     (list gunicorn
+           python-beautifulsoup4
+           python-hstspreload
+           python-httpcore
+           python-pytest
+           python-pytest-cov
+           python-pytest-benchmark
+           python-pytest-sanic
+           python-pytest-sugar
+           python-pytest-asyncio
+           python-urllib3
+           python-uvicorn))
     (home-page
      "https://github.com/sanic-org/sanic/")
     (synopsis
@@ -6124,12 +6036,12 @@ your code non-blocking and speedy.")
          "14vhpxdn54lz54mhcqlgcks0ssbws9gd1y7ii16a2g3gpfdc531k"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-aiohttp" ,python-aiohttp)
-       ("python-bidict" ,python-bidict)
-       ("python-engineio" ,python-engineio)
-       ("python-requests" ,python-requests)
-       ("python-websocket-client" ,python-websocket-client)
-       ("python-websockets" ,python-websockets)))
+     (list python-aiohttp
+           python-bidict
+           python-engineio
+           python-requests
+           python-websocket-client
+           python-websockets))
     (arguments '(#:tests? #f))        ; Tests not included in release tarball.
     (home-page "https://github.com/miguelgrinberg/python-socketio/")
     (synopsis "Python Socket.IO server")
@@ -6140,17 +6052,17 @@ your code non-blocking and speedy.")
 (define-public python-socks
   (package
     (name "python-socks")
-    (version "1.1.2")
+    (version "1.2.4")
     (source
-      (origin
-        (method url-fetch)
-        (uri (pypi-uri "python-socks" version))
-        (sha256
-         (base32
-          "06mgv3icsyglv50w3sb71x6cpbskza20pqd93l5xk59x574i6xgs"))))
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "python-socks" version))
+       (sha256
+        (base32
+         "1n6xb18jy41ybgkmamakg6psp3qididd45qknxiggngaiibz43kx"))))
     (build-system python-build-system)
     (arguments
-     `(#:tests? #f  ; tests not included
+     `(#:tests? #f                      ; tests not included
        #:phases
        (modify-phases %standard-phases
          (replace 'check
@@ -6159,11 +6071,9 @@ your code non-blocking and speedy.")
                (invoke "pytest" "tests/" "-s"))
              #t)))))
     (propagated-inputs
-     `(("python-async-timeout" ,python-async-timeout)
-       ("python-curio" ,python-curio)
-       ("python-trio" ,python-trio)))
+     (list python-async-timeout python-curio python-trio))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/romis2012/python-socks")
     (synopsis
      "Core proxy (SOCKS4, SOCKS5, HTTP tunneling) functionality for Python")
@@ -6184,7 +6094,7 @@ your code non-blocking and speedy.")
         (base32
          "1l4xwdh0fcnvrv0mzig4g2kgqkfbsy64zjm1ggc6grk3mykcxlz7"))))
     (build-system python-build-system)
-    (native-inputs `(("unzip" ,unzip)))
+    (native-inputs (list unzip))
     (home-page "https://github.com/Azure/azure-sdk-for-python")
     (synopsis "Azure namespace internals")
     (description
@@ -6204,7 +6114,7 @@ your code non-blocking and speedy.")
          "049qcmgshz7dj9yaqma0fwcgbxwddgwyfcw4gmv45xfmaa3bwfvg"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-azure-nspkg" ,python-azure-nspkg)))
+     (list python-azure-nspkg))
     (home-page "https://github.com/Azure/azure-storage-python")
     (synopsis "Microsoft Azure Storage Namespace package")
     (description
@@ -6225,7 +6135,7 @@ communicate with Microsoft Azure Storage services.")
          "1pv02lvvmgz2qb61vz1jkjc04fgm4hpfvaj5zm4i3mjp64hd1mha"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://github.com/scrapy/w3lib")
     (synopsis "Python library of web-related functions")
     (description
@@ -6233,3 +6143,189 @@ communicate with Microsoft Azure Storage services.")
 comments, or tags from HTML snippets, extract base url from HTML snippets,
 translate entities on HTML strings, among other things.")
     (license license:bsd-3)))
+
+(define-public python-webcolors
+  (package
+    (name "python-webcolors")
+    (version "1.11.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "webcolors" version))
+       (sha256
+        (base32 "1rkda75h2p65zx6r84c9mjavn4xpviqvqrklvdvcklapd5in1wvn"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "pytest")))))))
+    (native-inputs
+     (list python-pytest))
+    (home-page "https://github.com/ubernostrum/webcolors")
+    (synopsis "HTML/CSS color definitions library")
+    (description "@code{python-webcolors} is a module for working with
+HTML/CSS color definitions.  Normalizing and converting between the following
+formats is supported.
+@itemize
+@item Specification-defined color names
+@item Six-digit hexadecimal
+@item Three-digit hexadecimal
+@item Integer rgb() triplet
+@item Percentage rgb() triplet
+@end itemize
+Only the RGB colorspace is supported.  Conversion to/from the HSL colorspace
+can be handled by the @code{colorsys} module in the Python standard library.")
+    (license license:bsd-3)))
+
+(define-public python-woob
+  (package
+    (name "python-woob")
+    (version "3.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "woob" version))
+       (sha256
+        (base32 "09hpxy5zhn2b8li0xjf3zd7s46lawb0315p5mdcsci3bj3s4v1j7"))))
+    (build-system python-build-system)
+    ;; A small number of tests for optional applications fails due to missing
+    ;; inputs.
+    (arguments `(#:tests? #f))
+    (propagated-inputs
+     (list python-babel
+           python-colorama
+           python-cssselect
+           python-dateutil
+           python-feedparser
+           python-html2text
+           python-lxml
+           python-pillow
+           python-prettytable
+           python-pyqt
+           python-pyyaml
+           python-requests
+           python-six
+           python-unidecode))
+    (native-inputs
+     (list python-coverage python-flake8 python-nose python-selenium
+           python-xunitparser))
+    (home-page "https://woob.tech/")
+    (synopsis "Woob, Web Outside Of Browsers")
+    (description "Woob is a collection of applications able to interact with
+websites, without requiring the user to open them in a browser.  It also
+provides well-defined APIs to talk to websites lacking one.")
+    (license license:lgpl3+)))
+
+(define-public python-flask-combo-jsonapi
+  (package
+    (name "python-flask-combo-jsonapi")
+    (version "1.1.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/AdCombo/flask-combo-jsonapi")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "07fhcjiyif80z1vyh35za29sqx1mmqh568jrbrrs675j4a797sj1"))))
+    (build-system python-build-system)
+    (arguments
+     '(#:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'loosen-requirements
+                    (lambda _
+                      ;; Don't pin specific versions of dependencies.
+                      (substitute* "requirements.txt"
+                        (("^sqlalchemy[=<>].*") "sqlalchemy\n")
+                        (("^marshmallow[=<>].*") "marshmallow\n")
+                        (("^Flask[=<>].*") "Flask\n"))))
+                  (replace 'check
+                    (lambda _
+                      (invoke "pytest" "-vv"))))))
+    (propagated-inputs
+     (list python-flask
+           python-marshmallow
+           python-marshmallow-jsonapi
+           python-simplejson
+           python-sqlalchemy
+           python-apispec
+           python-simplejson
+           python-six))
+    (native-inputs
+     (list python-coverage python-coveralls python-pytest
+           python-pytest-runner))
+    (home-page "https://github.com/AdCombo/flask-combo-jsonapi")
+    (synopsis "Flask extension to quickly create JSON:API 1.0 REST Web APIs")
+    (description
+     "Flask-COMBO-JSONAPI is a Python Flask extension for building REST Web APIs
+compliant with the @uref{https://jsonapi.org, JSON:API 1.0} specification.
+
+It tries to combine the power of Flask-Restless with the flexibility of
+Flask-RESTful to quickly build APIs that fit the complexity of existing
+real-life projects with legacy data and diverse storage providers.")
+    (license license:expat)))
+
+(define-public python-mwparserfromhell
+  (package
+    (name "python-mwparserfromhell")
+    (version "0.6.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "mwparserfromhell" version))
+       (sha256
+        (base32 "0zh9zaqbac18s7mivqk8am9xw97lfkgcj9hhxj0d4208pkqpkmqs"))))
+    (build-system python-build-system)
+    (native-inputs
+     (list python-pytest python-pytest-runner))
+    (home-page "https://github.com/earwig/mwparserfromhell")
+    (synopsis "Python parser for MediaWiki wikicode")
+    (description
+     "The MediaWiki Parser From Hell is a python library package that provides
+a parser for MediaWiki.
+
+It exposes parses as normal string objects with additional methods giving
+access to the special Wikicode features it contains (hyperlinks, tags,
+templates…).  The parser doesn't interpolate strings at all, it remains at a
+purely formal level.
+
+Full documentation may be found at
+@uref{https://mwparserfromhell.readthedocs.io, ReadTheDocs}")
+    (license license:expat)))
+
+(define-public python-tweepy
+  (package
+    (name "python-tweepy")
+    (version "4.4.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url "https://github.com/tweepy/tweepy")
+         (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0jl3j20iqvzqqw5q5ldval5wrc2pdx94zff3b6b87j51yjx3qjhr"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "python" "-m" "unittest" "discover" "tests")))))))
+    (propagated-inputs
+     (list python-aiohttp python-requests python-requests-oauthlib))
+    (native-inputs
+     (list python-vcrpy))
+    (home-page "https://www.tweepy.org/")
+    (synopsis "Twitter library for Python")
+    (description "This package provides @code{Tweepy}, an easy-to-use Python
+library for accessing the Twitter API.")
+    (license license:expat)))
diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index 03b83b188b..c8ba314d38 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -14,7 +14,7 @@
 ;;; Copyright © 2015, 2016, 2017, 2019 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2015, 2017 Ben Woodcroft <donttrustben@gmail.com>
 ;;; Copyright © 2015, 2016 Erik Edrosa <erik.edrosa@gmail.com>
-;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2015, 2017, 2020 Kyle Meyer <kyle@kyleam.com>
 ;;; Copyright © 2015, 2016 Chris Marusich <cmmarusich@gmail.com>
 ;;; Copyright © 2016 Danny Milosavljevic <dannym+a@scratchpost.org>
@@ -26,7 +26,7 @@
 ;;; Copyright © 2016, 2017 Nikita <nikita@n0.is>
 ;;; Copyright © 2016 Dylan Jeffers <sapientech@sapientech@openmailbox.org>
 ;;; Copyright © 2016 David Craven <david@craven.ch>
-;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Marius Bakke <marius@gnu.org>
+;;; Copyright © 2016-2022 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2016, 2017, 2021 Stefan Reichör <stefan@xsteve.at>
 ;;; Copyright © 2016, 2017, 2019 Alex Vong <alexvong1995@gmail.com>
 ;;; Copyright © 2016, 2017, 2018, 2021 Arun Isaac <arunisaac@systemreboot.net>
@@ -37,7 +37,7 @@
 ;;; Copyright © 2017 Frederick M. Muriithi <fredmanglis@gmail.com>
 ;;; Copyright © 2017, 2018 Adriano Peluso <catonano@gmail.com>
 ;;; Copyright © 2017 Ben Sturmfels <ben@sturm.com.au>
-;;; Copyright © 2017, 2018, 2019 Mathieu Othacehe <m.othacehe@gmail.com>
+;;; Copyright © 2017, 2018, 2019, 2021, 2022 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2017 José Miguel Sánchez García <jmi2k@openmailbox.org>
 ;;; Copyright © 2017, 2020, 2021 Roel Janssen <roel@gnu.org>
 ;;; Copyright © 2017, 2018, 2019 Kei Kebreau <kkebreau@posteo.net>
@@ -49,10 +49,10 @@
 ;;; Copyright © 2018 Mathieu Lirzin <mthl@gnu.org>
 ;;; Copyright © 2018 Adam Massmann <massmannak@gmail.com>
 ;;; Copyright © 2016, 2018 Tomáš Čech <sleep_walker@gnu.org>
-;;; Copyright © 2018, 2019, 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2018-2022 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
-;;; Copyright © 2018, 2019 Clément Lassieur <clement@lassieur.org>
-;;; Copyright © 2018, 2019, 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2018, 2019, 2021 Clément Lassieur <clement@lassieur.org>
+;;; Copyright © 2018, 2019, 2020, 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2018 Luther Thompson <lutheroto@gmail.com>
 ;;; Copyright © 2018 Vagrant Cascadian <vagrant@debian.org>
 ;;; Copyright © 2015, 2018 Pjotr Prins <pjotr.guix@thebird.nl>
@@ -63,9 +63,9 @@
 ;;; Copyright © 2019, 2020 Alex Griffin <a@ajgrf.com>
 ;;; Copyright © 2019, 2020, 2021 Pierre Langlois <pierre.langlois@gmx.com>
 ;;; Copyright © 2019 Jacob MacDonald <jaccarmac@gmail.com>
-;;; Copyright © 2019, 2020 Giacomo Leidi <goodoldpaul@autistici.org>
+;;; Copyright © 2019, 2020, 2021 Giacomo Leidi <goodoldpaul@autistici.org>
 ;;; Copyright © 2019 Wiktor Żelazny <wzelazny@vurv.cz>
-;;; Copyright © 2019, 2020, 2021 Tanguy Le Carrour <tanguy@bioneland.org>
+;;; Copyright © 2019, 2020, 2021, 2022 Tanguy Le Carrour <tanguy@bioneland.org>
 ;;; Copyright © 2019, 2021 Mădălin Ionel Patrașcu <madalinionel.patrascu@mdc-berlin.de>
 ;;; Copyright © 2020 Riku Viitanen <riku.viitanen@protonmail.com>
 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
@@ -80,7 +80,7 @@
 ;;; Copyright © 2020 Josh Holland <josh@inv.alid.pw>
 ;;; Copyright © 2020 Yuval Kogman <nothingmuch@woobling.org>
 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
-;;; Copyright © 2020, 2021 Vinicius Monego <monego@posteo.net>
+;;; Copyright © 2020, 2021, 2022 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2020 Guy Fleury Iteriteka <gfleury@disroot.org>
 ;;; Copyright © 2020 Hendursaga <hendursaga@yahoo.com>
 ;;; Copyright © 2020 Malte Frank Gerdes <malte.f.gerdes@gmail.com>
@@ -92,8 +92,8 @@
 ;;; Copyright © 2020 Liliana Marie Prikler <liliana.prikler@gmail.com>
 ;;; Copyright © 2019 Kristian Trandem <kristian@devup.no>
 ;;; Copyright © 2020, 2021 Zheng Junjie <873216071@qq.com>
-;;; Copyright © 2021 Morgan Smith <Morgan.J.Smith@outlook.com>
 ;;; Copyright © 2020 EuAndreh <eu@euandre.org>
+;;; Copyright © 2021, 2022 Morgan Smith <Morgan.J.Smith@outlook.com>
 ;;; Copyright © 2021 Sharlatan Hellseher <sharlatanus@gmail.com>
 ;;; Copyright © 2021 Ellis Kenyő <me@elken.dev>
 ;;; Copyright © 2021 LibreMiami <packaging-guix@libremiami.org>
@@ -108,6 +108,14 @@
 ;;; Copyright © 2021 Simon Streit <simon@netpanic.org>
 ;;; Copyright © 2021 Daniel Meißner <daniel.meissner-i4k@ruhr-uni-bochum.de>
 ;;; Copyright © 2021 Pradana Aumars <paumars@courrier.dev>
+;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
+;;; Copyright © 2021 Sébastien Lerique <sl@eauchat.org>
+;;; Copyright © 2021 Raphaël Mélotte <raphael.melotte@mind.be>
+;;; Copyright © 2021 ZmnSCPxj <ZmnSCPxj@protonmail.com>
+;;; Copyright © 2021 Filip Lajszczak <filip@lajszczak.dev>
+;;; Copyright © 2021 Greg Hogan <code@greghogan.com>
+;;; Copyright © 2022 John Kehayias <john.kehayias@protonmail.com>
+;;; Copyright © 2022 Aleksandr Vityazev <avityazev@posteo.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -139,11 +147,13 @@
   #:use-module (gnu packages crypto)
   #:use-module (gnu packages databases)
   #:use-module (gnu packages dbm)
+  #:use-module (gnu packages django)
   #:use-module (gnu packages djvu)
   #:use-module (gnu packages docker)
   #:use-module (gnu packages enchant)
   #:use-module (gnu packages file)
   #:use-module (gnu packages fontutils)
+  #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages gcc)
   #:use-module (gnu packages geo)
   #:use-module (gnu packages ghostscript)
@@ -221,6 +231,7 @@
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix hg-download)
+  #:use-module (guix gexp)
   #:use-module (guix utils)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system cmake)
@@ -229,6 +240,106 @@
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-26))
 
+(define-public python-janus
+  (package
+    (name "python-janus")
+    (version "0.6.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "janus" version))
+       (sha256
+        (base32 "030xvl2vghi5ispfalhvch1rl6i2jsy5bf1dgjafa7vifppy04j7"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "pytest" "--cov=janus" "--cov=tests")))))))
+    (native-inputs
+     (list python-pytest python-pytest-cov python-pytest-asyncio))
+    (home-page "https://github.com/aio-libs/janus/")
+    (synopsis
+     "Sync-async queue to interoperate between asyncio tasks and classic threads")
+    (description
+     "Mixed sync-async queue, supposed to be used for communicating between
+classic synchronous (threaded) code and asynchronous (in terms of
+@url{https://docs.python.org/3/library/asyncio.html,asyncio}) one.  Like
+@url{https://en.wikipedia.org/wiki/Janus,Janus god} the queue object from the
+library has two faces: synchronous and asynchronous interface.  Synchronous is
+fully compatible with
+@url{https://docs.python.org/3/library/queue.html,standard queue},
+asynchronous one follows
+@url{https://docs.python.org/3/library/asyncio-queue.html,asyncio queue
+design}.")
+    (license license:asl2.0)))
+
+(define-public python-logzero
+  (package
+    (name "python-logzero")
+    (version "1.7.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "logzero" version))
+       (sha256
+        (base32 "10nh186vk6hpnpfycym44gja4fja0jyzw7q8dwimfd1rmv9xswvz"))))
+    (build-system python-build-system)
+    (native-inputs
+     (list python-pytest python-pytest-runner))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "pytest")))))))
+    (home-page "https://github.com/metachris/logzero")
+    (synopsis "Robust and effective logging for Python")
+    (description
+     "@code{logzero} provides a fully configured Python logger object for
+easy logging and rotating to a console or a file.")
+    (license license:expat)))
+
+(define-public python-logbook
+  (package
+    (name "python-logbook")
+    (version "1.5.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "Logbook" version))
+       (sha256
+        (base32 "1s1gyfw621vid7qqvhddq6c3z2895ci4lq3g0r1swvpml2nm9x36"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'cythonize-sources
+           (lambda _
+             (with-directory-excursion "logbook"
+               (invoke "cython" "_speedups.pyx"))))
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               ;; Check cython build also
+               (setenv "CYBUILD" "True")
+               (invoke "pytest" "--cov=logbook" "-r" "s" "tests")))))))
+    (native-inputs
+     (list python-cython python-mock python-pytest python-pytest-cov
+           python-google-brotli))
+    (home-page "https://github.com/getlogbook/logbook")
+    (synopsis "Logbook is a logging replacement for Python")
+    (description
+     "Logbook is a logging system for Python that replaces the standard
+library’s logging module.  It was designed with both complex and simple
+applications in mind and the idea to make logging fun.")
+    (license license:bsd-3)))
+
 (define-public python-ueberzug
   (package
     (name "python-ueberzug")
@@ -242,16 +353,12 @@
          "1hxd45dnwa9yv908acarr98n2drmar66wzq9z2qd3irj24srzr3w"))))
     (build-system python-build-system)
     (inputs
-     `(("libx11" ,libx11)
-       ("libxext" ,libxext)))
+     (list libx11 libxext))
     (propagated-inputs
-     `(("python-attrs" ,python-attrs)
-       ("python-docopt" ,python-docopt)
-       ("python-pillow" ,python-pillow)
-       ("python-xlib" ,python-xlib)))
+     (list python-attrs python-docopt python-pillow python-xlib))
     (home-page "https://github.com/seebye/ueberzug")
     (synopsis "Command line util to display images in combination with X11")
-    (description "Überzug is a command line util which allows to draw images on
+    (description "Überzug is a command line util which draws images on
 terminals by using child windows.  The advantages of using Überzug are:
 @itemize
 @item No race conditions as a new window is created to display images.
@@ -277,7 +384,7 @@ workspaces.
          "0qka44n88y3qcj7xz0k0f3qb4phcg4z0wvd4jcii9lcr6rvbiqn5"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest", python-pytest)))
+     (list python-pytest))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -286,8 +393,7 @@ workspaces.
              (when tests?
                (invoke "pytest")))))))
     (inputs
-     `(("python-six", python-six)
-       ("python-termcolor", python-termcolor)))
+     (list python-six python-termcolor))
     (synopsis "Library for automatically generating command line interfaces")
     (description
      "Fire is a library for automatically generating command line interfaces
@@ -350,13 +456,10 @@ features of the Python's built-in dict.")
               "0ybs7kkp0cpl8zn1lvf7481xhssg1bbhh5la2cjzdm5yibashyxa"))))
    (build-system python-build-system)
    (native-inputs
-    `(("python-coverage" ,python-coverage)
-      ("python-nose" ,python-nose)
-      ("python-setuptools" ,python-setuptools) ; Won't build without this.
-      ("python-setuptools-scm" ,python-setuptools-scm)))
+    (list python-coverage python-nose python-setuptools ; Won't build without this.
+          python-setuptools-scm))
    (propagated-inputs
-    `(("python-toml" ,python-toml)
-      ("python-flake8" ,python-flake8)))
+    (list python-toml python-flake8))
    (home-page "https://github.com/casperdcl/argopt")
    (synopsis "Generate a command-line interface from a docstring")
    (description "This package provides tools to define a command line interface
@@ -398,11 +501,9 @@ decorators, including variants of the Python standard library's
     (arguments
      `(#:tests? #f))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-flake8" ,python-flake8)
-       ("python-pytest" ,python-pytest)))
+     (list python-coverage python-flake8 python-pytest))
     (propagated-inputs
-     `(("python-colorama" ,python-colorama)))
+     (list python-colorama))
     (home-page "http://github.com/timofurrer/colorful")
     (synopsis "Terminal string styling")
     (description "Colorful provides an array of text styles, that can be used
@@ -422,7 +523,7 @@ as functions or string constants to form colored terminal output.")
         (base32 "1iirah0kydrdp505qnjj6gi54avcr7z0hbkfx9vmh8myr30rpz6q"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/pavdmyt/yaspin")
     (synopsis "Yet Another Terminal Spinner")
     (description "Yaspin provides a terminal spinner to indicate the progress
@@ -442,10 +543,9 @@ during long operations.")
         (base32 "106akalywfmnypzkdrhgz4n4740a8xayspybsw59kq06vz8i2qrc"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)))
+     (list python-mock python-pytest))
     (propagated-inputs
-     `(("python-nltk" ,python-nltk-3.4)))
+     (list python-nltk-3.4))
     (home-page
      "https://github.com/yeraydiazdiaz/lunr.py")
     (synopsis "Full-text search library")
@@ -454,6 +554,26 @@ It indexes documents and provides a search interface for retrieving documents
 that best match text queries.")
     (license license:expat)))
 
+(define-public python-mrkd
+  (package
+    (name "python-mrkd")
+    (version "0.2.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "mrkd" version))
+        (sha256
+          (base32 "1bvaqbna1ihb4y2mv9pmvqcq3r9j6lwbbii99dani8lxx4dqqvs5"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     (list python-jinja2 python-mistune python-pygments))
+    (home-page "https://pypi.org/project/mrkd/")
+    (synopsis "Python Markdown implementation")
+    (description
+     "@code{mrkd} writes man pages using Markdown, and convert them to Roff or
+HTML")
+    (license license:bsd-3)))
+
 (define-public python-mkdocs
   (package
     (name "python-mkdocs")
@@ -476,13 +596,13 @@ that best match text queries.")
              (substitute* "setup.py"
                (("==") ">=")))))))
     (propagated-inputs
-     `(("python-click" ,python-click)
-       ("python-jinja2" ,python-jinja2)
-       ("python-livereload" ,python-livereload)
-       ("python-lunr" ,python-lunr)
-       ("python-markdown" ,python-markdown)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-tornado" ,python-tornado)))
+     (list python-click
+           python-jinja2
+           python-livereload
+           python-lunr
+           python-markdown
+           python-pyyaml
+           python-tornado))
     (home-page "https://www.mkdocs.org")
     (synopsis "Project documentation with Markdown")
     (description "MkDocs is a static site generator geared towards building
@@ -506,7 +626,7 @@ configured with a single YAML configuration file.")
     (arguments
      `(#:tests? #f))
     (propagated-inputs
-     `(("python-markdown" ,python-markdown)))
+     (list python-markdown))
     (home-page "https://github.com/facelessuser/pymdown-extensions")
     (synopsis "Extension pack for Python Markdown")
     (description "PyMdown Extensions is a collection of extensions for Python
@@ -536,11 +656,8 @@ Markdown.  All extensions are found under the module namespace of pymdownx.")
              (substitute* "requirements.txt"
                (("mkdocs-material-extensions.*$") "")))))))
     (propagated-inputs
-     `(("python-markdown" ,python-markdown)
-       ("python-mkdocs" ,python-mkdocs)
-       ("python-pygments" ,python-pygments)
-       ("python-pymdown-extensions"
-        ,python-pymdown-extensions)))
+     (list python-markdown python-mkdocs python-pygments
+           python-pymdown-extensions))
     (home-page "https://squidfunk.github.io/mkdocs-material/")
     (synopsis "Material Design theme for MkDocs")
     (description "This package provides a theme plugin for the static site
@@ -578,13 +695,10 @@ generator MkDocs.")
        ("gnupg" ,gnupg)
        ("pkg-config" ,pkg-config)))
     (propagated-inputs
-     `(("python-aiodns" ,python-aiodns)
-       ("python-aiohttp" ,python-aiohttp)
-       ("python-pyasn1" ,python-pyasn1)
-       ("python-pyasn1-modules" ,python-pyasn1-modules)))
+     (list python-aiodns python-aiohttp python-pyasn1
+           python-pyasn1-modules))
     (inputs
-     `(("libidn" ,libidn)
-       ("python" ,python))) ; We are building a Python extension.
+     (list libidn python)) ; We are building a Python extension.
     (synopsis "XMPP library without threads")
     (description "Slixmpp is a XMPP library for Python 3.7+.  It is a fork of
 SleekXMPP.  Its goal is to only rewrite the core of the library (the low level
@@ -596,27 +710,22 @@ threads.")
 (define-public python-tenacity
   (package
     (name "python-tenacity")
-    (version "6.1.0")
+    (version "8.0.1")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "tenacity" version))
               (sha256
                (base32
-                "1j36v9fcpmmd4985ix0cwnvcq71rkrn5cjiiv0id9vkl4kpxh0gv"))))
+                "0bwkvjpjfyi9dgszzad9aww2vc00w3bczjnbifi92cp7wch2l923"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-sphinx" ,python-sphinx)
-       ("python-tornado" ,python-tornado)
-       ("python-pytest" ,python-pytest)))
-    (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-setuptools-scm python-tornado python-typeguard
+           python-pytest))
     (arguments
-     `(#:phases (modify-phases %standard-phases
-                  (replace 'check
-                    (lambda _
-                      (invoke "pytest")
-                      #t)))))
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (replace 'check
+                 (lambda _ (invoke "pytest" "-vv"))))))
     (home-page "https://github.com/jd/tenacity")
     (synopsis "Retrying library for python")
     (description "Tenacity is a general-purpose python library to simplify the
@@ -647,9 +756,9 @@ task of adding retry behavior to just about anything.")
                  (invoke "py.test")))
              #t)))))
     (propagated-inputs
-     `(("python-requests" ,python-requests)))
+     (list python-requests))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/eternnoir/pyTelegramBotAPI")
     (synopsis "Python Telegram bot api")
     (description "This package provides a simple, but extensible Python
@@ -659,26 +768,24 @@ implementation for the Telegram Bot API.")
 (define-public python-colorlog
   (package
     (name "python-colorlog")
-    (version "4.1.0")
-    (source (origin
-              (method url-fetch)
-              (uri (pypi-uri "colorlog" version))
-              (sha256
-               (base32
-                "1lpk8zmfv8vz090h5d0hzb4n39wgasxdd3x3bpn3v1x1n9dfzaih"))))
+    (version "6.6.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "colorlog" version))
+       (sha256
+        (base32 "1s7x0v872h8aks8xp01wmv6hzisxqjrh1svbbcycir0980h76krl"))))
     (build-system python-build-system)
-    (native-inputs
-     `(("python-pytest" ,python-pytest)))
     (arguments
-     `(#:phases (modify-phases %standard-phases
-                  (replace 'check
-                    (lambda _
-                      ;; Extend PYTHONPATH so the built package will be found.
-                      (setenv "PYTHONPATH"
-                              (string-append (getcwd) "/build/lib:"
-                                             (getenv "PYTHONPATH")))
-                      (invoke "pytest" "-p" "no:logging")
-                      #t)))))
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "python" "-m" "pytest")))))))
+    (native-inputs
+     (list python-pytest))
     (home-page "https://github.com/borntyping/python-colorlog")
     (synopsis "Log formatting with colors for python")
     (description "The @code{colorlog.ColoredFormatter} is a formatter for use
@@ -697,7 +804,7 @@ with Python's logging module that outputs records using terminal colors.")
                 "1gscnlvj37m421ch3akm3kddxqkrgbg5zrpwy2ky1j59w6vclzg3"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-psutil" ,python-psutil)))
+     (list python-psutil))
     (home-page "https://github.com/rasbt/pyprind")
     (synopsis "Python Progress Bar and Percent Indicator Utility")
     (description "The PyPrind (Python Progress Indicator) module provides a
@@ -717,9 +824,9 @@ of a loop structure or other iterative computation.")
                 "118zm25c8mlajfl0pzssnwz4b8lamj9dgymla9rn4nla7l244a0r"))))
     (build-system python-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libgphoto2" ,libgphoto2)))
+     (list libgphoto2))
     (home-page "https://github.com/jim-easterbrook/python-gphoto2")
     (synopsis "Python interface to libgphoto2")
     (description "@code{python-gphoto2} is a comprehensive Python interface
@@ -739,7 +846,7 @@ automatically generate the interface code.")
                 "1visbisfini5j14bdzgs95yssw6sm4pfzyq1n3lfvbyjxw7i485g"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-d2to1" ,python-d2to1)))
+     (list python-d2to1))
     (home-page "https://github.com/vaab/colour")
     (synopsis "Convert and manipulate various color representations")
     (description "Pythonic way to manipulate color representations (HSL, RVB,
@@ -758,7 +865,7 @@ web, X11, ...).")
                 "09fq7pq1z8d006xh5z75rm2lk61v6yn2xhy53z4gsgibhqb2vvs9"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (home-page "https://github.com/embray/d2to1")
     (synopsis "Allows for distutils2-like setup.cfg files as package metadata
 in python")
@@ -779,10 +886,9 @@ distribute/setuptools setup.py script.")
                 "0vrhrpr70i61y5q5ysk341x1539ff1q1k82g59zq69lv16s0f76s"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-mock" ,python-mock)))
+     (list python-pytest python-mock))
     (inputs
-     `(("libraw" ,libraw)))
+     (list libraw))
     (home-page "https://rawkit.readthedocs.io")
     (synopsis "Ctypes-based LibRaw binding for Python")
     (description "The rawkit package provides two modules:  rawkit and libraw.
@@ -803,7 +909,7 @@ interacting with the low-level LibRaw C APIs.")
                 "1zmvmwgxyzvm83818skhn8b4wrci4kmnixaax8q3ia5cn7xrmj6v"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-tkinter" ,python "tk")))
+     (list `(,python "tk")))
     (home-page "https://github.com/robertlugg/easygui")
     (synopsis "GUI programming module for Python")
     (description "EasyGUI is a module for very simple, very easy GUI
@@ -824,11 +930,9 @@ simple function calls.")
         (base32 "07s3arn85ri92im6x3ipljdmrxmpik7irs06i6lm17j1x6j9841d"))))
     (build-system python-build-system)
     (inputs
-     `(("md4c" ,md4c)))
+     (list md4c))
     (native-inputs
-     `(("python-flake8" ,python-flake8)
-       ("python-pkgconfig" ,python-pkgconfig)
-       ("pkg-config" ,pkg-config)))
+     (list python-flake8 python-pkgconfig pkg-config))
     (home-page "https://github.com/dominickpastore/pymd4c")
     (synopsis "Python bindings for MD4C")
     (description
@@ -849,10 +953,9 @@ to CommonMark.")
          "0mhpxs7vlqx8w75z93dy7nnvx89kwfdjkla03l19an15rlyqyspd"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-pytest" ,python-pytest)))
+     (list python-setuptools-scm python-pytest))
     (inputs
-     `(("libmediainfo" ,libmediainfo)))
+     (list libmediainfo))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -860,25 +963,22 @@ to CommonMark.")
            (lambda _
              (substitute* "pymediainfo/__init__.py"
                (("libmediainfo.so.0")
-                (string-append (assoc-ref %build-inputs "libmediainfo")
-                               "/lib/libmediainfo.so.0")))
-             #t))
+                (search-input-file %build-inputs
+                                   "/lib/libmediainfo.so.0")))))
          (replace 'check
-           (lambda* (#:key tests? #:allow-other-keys)
+           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
              (when tests?
-               ;; Extend PYTHONPATH so the built package will be found.
-               (setenv "PYTHONPATH"
-                       (string-append (getcwd) "/build/lib:"
-                                      (getenv "PYTHONPATH")))
-               ;; Skip the only failing test "test_parse_url"
+               (add-installed-pythonpath inputs outputs)
+               ;; Skip the only failing test "test_parse_url" because it tries
+               ;; to access the internet.
                (invoke "pytest" "-vv" "-k" "not test_parse_url")))))))
     (home-page
      "https://github.com/sbraz/pymediainfo")
     (synopsis
      "Python wrapper for the mediainfo library")
     (description
-     "Python wrapper for the mediainfo library to access the technical and tag
-data for video and audio files.")
+     "This package provides a Python wrapper for the mediainfo library to
+access the technical and tag data for video and audio files.")
     (license license:expat)))
 
 (define-public python-psutil
@@ -935,14 +1035,12 @@ iotop, uptime, pidof, tty, taskset, pmap.")
            #t))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)))
+     (list python-cython python-matplotlib python-pytest
+           python-pytest-cov))
     (inputs
-     `(("geos" ,geos)))
+     (list geos))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -981,7 +1079,7 @@ planar geometric objects.  It is based on the @code{GEOS} library.")
          "1f8i4zwj5vmpzbz6b17bljy4399gx5aq7vsyw63sz2qgyjcd73yh"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pep8" ,python-pep8)))
+     (list python-pep8))
     (home-page "https://github.com/skorokithakis/shortuuid")
     (synopsis "Generator library for concise, unambiguous and URL-safe UUIDs")
     (description
@@ -1012,11 +1110,8 @@ module and then similar looking characters are removed.")
                (invoke "pytest"))
              #t)))))
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-pytest" ,python-pytest)
-       ("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-toml" ,python-toml)
-       ("python-wheel" ,python-wheel)))
+     (list python-cython python-pytest python-setuptools-scm python-toml
+           python-wheel))
     (home-page "https://github.com/python-useful-helpers/logwrap")
     (synopsis "Decorator for logging function arguments")
     (description "This package provides a decorator to log function arguments
@@ -1036,7 +1131,7 @@ and function call return values in a human-readable way.")
          "1r9987qmy1pz3hq54160bapqsywpq14waw4w9x3ly8hmq7kpgfbj"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-mock" ,python-mock)))
+     (list python-mock))
     (home-page "https://github.com/Anaconda-Platform/clyent")
     (synopsis "Command line client library")
     (description "Clyent is a Python command line utility library.  It is used
@@ -1052,23 +1147,22 @@ by @code{binstar}, @code{binstar-build}, and @code{chalmers}.")
     (version "2.9.0")
     (source
      (origin
-      (method url-fetch)
-      (uri (pypi-uri "Babel" version))
-      (sha256
-       (base32
-        "018yg7g2pa6vjixx1nx41cfispgfi0azzp0a1chlycbj8jsil0ys"))))
+       (method url-fetch)
+       (uri (pypi-uri "Babel" version))
+       (sha256
+        (base32
+         "018yg7g2pa6vjixx1nx41cfispgfi0azzp0a1chlycbj8jsil0ys"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-freezegun" ,python-freezegun)
-       ("python-pytest" ,python-pytest)))
+     (list python-freezegun python-pytest tzdata-for-tests))
     (propagated-inputs
-     `(("python-pytz" ,python-pytz)))
+     (list python-pytz))
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (replace 'check
                     (lambda _
                       (invoke "pytest" "-vv"))))))
-    (home-page "http://babel.pocoo.org/")
+    (home-page "https://babel.pocoo.org/")
     (synopsis
      "Tools for internationalizing Python applications")
     (description
@@ -1076,7 +1170,7 @@ by @code{binstar}, @code{binstar-build}, and @code{chalmers}.")
 - tools to build and work with gettext message catalogs
 - a Python interface to the CLDR (Common Locale Data Repository), providing
 access to various locale display names, localized number and date formatting,
-etc. ")
+etc.")
     (license license:bsd-3)))
 
 (define-public python2-babel
@@ -1119,19 +1213,19 @@ and verifies that it matches the intended target hostname.")
          "02dy0b1k7qlhn7ajyzkrvxhyhjj0hzcq6ws3zjml9hkdz5znz92g"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-hypothesis" ,python-hypothesis-5.23) ; use_true_random=... from >=5.19.0
-       ("python-pre-commit" ,python-pre-commit)
-       ("python-py" ,python-py)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-benchmark" ,python-pytest-benchmark)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-sortedcollections" ,python-sortedcollections)
-       ("python-sortedcontainers" ,python-sortedcontainers)
-       ("python-sphinx" ,python-sphinx)
-       ("python-sphinx-autodoc-typehints" ,python-sphinx-autodoc-typehints)
-       ("python-tox" ,python-tox)))
+     (list python-coverage
+           python-hypothesis
+           python-pre-commit
+           python-py
+           python-pytest
+           python-pytest-benchmark
+           python-pytest-cov
+           python-setuptools-scm
+           python-sortedcollections
+           python-sortedcontainers
+           python-sphinx
+           python-sphinx-autodoc-typehints
+           python-tox))
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (add-after 'unpack 'relax-reqs
@@ -1220,14 +1314,6 @@ Expressions are constructed from parsed strings or directly in Python.")
       (modify-phases %standard-phases
         (replace 'check
           (lambda _
-            ;; The 'runexamples' script sets PYTHONPATH to CWD, then goes
-            ;; on to import numpy. Somehow this works on their CI system.
-            ;; Let's just manage PYTHONPATH here instead.
-            (substitute* "runexamples.sh"
-              (("export PYTHONPATH=.*") ""))
-            (setenv "PYTHONPATH"
-                    (string-append (getcwd) ":"
-                                   (getenv "PYTHONPATH")))
             (invoke "./runexamples.sh")
             (invoke "nosetests" "-v"))))))
    (home-page "https://github.com/fhs/python-hdf4")
@@ -1268,14 +1354,11 @@ NetCDF files can also be read and modified.  Python-HDF4 is a fork of
                  (string-append "['" prefix "/lib" "']")))
               #t))))))
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-numpy" ,python-numpy)))
+     (list python-six python-numpy))
     (inputs
-     `(("hdf5" ,hdf5-1.10)))
+     (list hdf5-1.10))
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-pkgconfig" ,python-pkgconfig)
-       ("pkg-config" ,pkg-config)))
+     (list python-cython python-pkgconfig pkg-config))
     (home-page "https://www.h5py.org/")
     (synopsis "Read and write HDF5 files from Python")
     (description
@@ -1289,10 +1372,38 @@ concepts.")
 (define-public python2-h5py
   (package-with-python2 python-h5py))
 
+(define-public python-hnswlib
+  (package
+    (name "python-hnswlib")
+    (version "0.5.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "hnswlib" version))
+       (sha256
+        (base32 "0wf1cwmxmdzfqmfhrkqdxb5spf21ylgl2bidswhzjrqhwf35c9qf"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'disable-native-optimization
+           (lambda _
+             (substitute* "setup.py"
+               ((", '-march=native'") "")))))))
+    (propagated-inputs
+     (list python-numpy))
+    (native-inputs
+     (list pybind11))
+    (home-page "https://github.com/nmslib/hnswlib")
+    (synopsis "Fast approximate nearest neighbor search")
+    (description "Hnswlib is a header-only C++ implementation of fast
+approximate nearest neighbor search with Python bindings.")
+    (license license:asl2.0)))
+
 (define-public python-pyls-black
   (package
     (name "python-pyls-black")
-    (version "0.4.6")
+    (version "0.4.7")
     (source
      (origin
        ;; There are no tests in the PyPI tarball.
@@ -1302,21 +1413,30 @@ concepts.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0cjf0mjn156qp0x6md6mncs31hdpzfim769c2lixaczhyzwywqnj"))))
+        (base32 "0bkhfnlik89j3yamr20br4wm8975f20v33wabi2nyxvj10whr5dj"))
+       ;; Patch to work with python-lsp-server.  Taken from
+       ;; <https://github.com/rupert/pyls-black/pull/37>.
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           (substitute* "setup.cfg"
+             (("python-language-server")
+              "python-lsp-server"))
+           (substitute* '("pyls_black/plugin.py" "tests/test_plugin.py")
+             (("pyls_format_document")
+              "pylsp_format_document")
+             (("pyls_format_range")
+              "pylsp_format_range")
+             (("from pyls([ \\.])" _ char)
+              (string-append "from pylsp" char)))))))
     (build-system python-build-system)
     (arguments
      `(#:test-target "pytest"))
     (propagated-inputs
-     `(("python-black" ,python-black)
-       ("python-language-server"
-        ,python-language-server)
-       ("python-toml" ,python-toml)))
+     (list python-black python-lsp-server python-tomli))
     (native-inputs
-     `(("python-flake8" ,python-flake8)
-       ("python-isort" ,python-isort)
-       ("python-mypy" ,python-mypy)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-flake8 python-isort python-mypy python-pytest
+           python-pytest-runner))
     (home-page "https://github.com/rupert/pyls-black")
     (synopsis "Black plugin for the Python Language Server")
     (description "Black plugin for the Python Language Server.")
@@ -1343,7 +1463,7 @@ concepts.")
              (setenv "HOME" "/tmp")
              (invoke "python" "sh.py" "test"))))))
     (native-inputs
-     `(("python-coverage" ,python-coverage)))
+     (list python-coverage))
     (home-page "https://github.com/amoffat/sh")
     (synopsis "Python subprocess replacement")
     (description "This package provides a replacement for Python's
@@ -1353,28 +1473,31 @@ concepts.")
 (define-public python-cftime
   (package
     (name "python-cftime")
-    (version "1.0.4.2")
+    (version "1.5.1.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "cftime" version))
        (sha256
-        (base32 "0w0gi6jnch38hiygl62j4xkcirv4y3dcwrvxl9p7bsk6j27lzihs"))))
+        (base32 "0l1a22zlhdpgaisibvvm7dhij4vzfm661rnv00y2snpyqxpdgi3d"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (native-inputs
-     `(("python-coveralls" ,python-coveralls)
-       ("python-cython" ,python-cython)
-       ("python-pytest-cov" ,python-pytest-cov)))
-    (home-page "https://github.com/Unidata/cftime")
+     (list python-check-manifest
+           python-coverage
+           python-coveralls
+           python-cython
+           python-pytest-cov
+           python-sphinx
+           python-twine
+           python-wheel))
+    (home-page "https://unidata.github.io/cftime/")
     (synopsis "Library for time handling")
     (description
      "This package provides time-handling functionality that used to be part
 of the netcdf4 package before.")
-    ;; This package claims to include code under the GPLv3 but is released
-    ;; under ISC.
-    (license (list license:isc license:gpl3+))))
+    (license license:expat)))
 
 (define-public python-netcdf4
   (package
@@ -1396,14 +1519,11 @@ of the netcdf4 package before.")
              (setenv "HDF5_DIR" (assoc-ref inputs "hdf5"))
              #t)))))
     (native-inputs
-     `(("python-cython" ,python-cython)))
+     (list python-cython))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-cftime" ,python-cftime)))
+     (list python-numpy python-cftime))
     (inputs
-     `(("netcdf" ,netcdf)
-       ("hdf4" ,hdf4)
-       ("hdf5" ,hdf5)))
+     (list netcdf hdf4 hdf5))
     (home-page "https://github.com/Unidata/netcdf4-python")
     (synopsis "Python/numpy interface to the netCDF library")
     (description "Netcdf4-python is a Python interface to the netCDF C
@@ -1439,10 +1559,9 @@ to users of that module.")
                       (when tests?
                         (invoke "pytest")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (propagated-inputs
-     `(("python-lxml" ,python-lxml)
-       ("python-paramiko" ,python-paramiko)))
+     (list python-lxml python-paramiko))
     (home-page "https://github.com/ncclient/ncclient")
     (synopsis "Python library for NETCONF clients")
     (description "@code{ncclient} is a Python library that facilitates
@@ -1462,7 +1581,7 @@ protocol.")
         (base32 "1g0sgphss8hbi1rpl4avy1nmbixmy9v194xdbvkjgl90vzgy2q3r"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-boolean.py" ,python-boolean.py)))
+     (list python-boolean.py))
     (home-page "https://github.com/nexB/license-expression")
     (synopsis "Apply boolean logic to license expressions")
     (description
@@ -1473,6 +1592,35 @@ and simplified.  It supports SPDX license expressions as well as other naming
 conventions and aliases in the same expression.")
     (license license:gpl2+)))
 
+(define-public python-wand
+  (package
+    (name "python-wand")
+    (version "0.6.7")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "Wand" version))
+       (sha256
+        (base32 "1nxn7zvbnfgk4kkxajbzglcjpbgr84ilhnxm990nifjxqb61ph7b"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'find-magickwand
+           (lambda* (#:key inputs #:allow-other-keys)
+             (setenv "MAGICK_HOME" (assoc-ref inputs "imagemagick"))
+             (setenv "WAND_MAGICK_LIBRARY_SUFFIX" ".Q16"))))))
+    (native-inputs
+     (list python-pytest))
+    (inputs
+     (list imagemagick))
+    (home-page "https://docs.wand-py.org/")
+    (synopsis "MagickWand API binding for Python")
+    (description
+     "Wand is a ctypes-based binding for the C API of ImageMagick's MagickWand
+library.")
+    (license license:expat)))
+
 (define-public python-lockfile
   (package
     (name "python-lockfile")
@@ -1487,7 +1635,7 @@ conventions and aliases in the same expression.")
     (build-system python-build-system)
     (arguments '(#:test-target "check"))
     (native-inputs
-     `(("python-pbr" ,python-pbr)))
+     (list python-pbr))
     (home-page "https://launchpad.net/pylockfile")
     (synopsis "Platform-independent file locking module")
     (description
@@ -1511,7 +1659,7 @@ API for locking files.")
          "0snprxdnh3m45r3b0az4v0l28h90ycmfbybzla6xg1qviwv9w1ak"))))
     (build-system python-build-system)
     (inputs
-     `(("re2" ,re2)))
+     (list re2))
     (home-page "https://github.com/facebook/pyre2")
     (synopsis "Python wrapper for RE2")
     (description "This package provides a Python extension that wraps Google's
@@ -1577,8 +1725,7 @@ version identifier.")
         (base32 "1arnckykpkvv2qrp49l1k7q5mr5pisswl0rvdx98x8wsl1n361pk"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-attrs" ,python-attrs)
-       ("python-pytz" ,python-pytz)))
+     (list python-attrs python-pytz))
     (home-page "https://github.com/irmen/Serpent")
     (synopsis "Serializer for literal Python expressions")
     (description
@@ -1669,7 +1816,7 @@ Python 3 support.")
     (arguments
      `(#:tests? #f))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://pypi.org/project/setuptools/")
     (synopsis
      "Library designed to facilitate packaging Python projects")
@@ -1704,11 +1851,9 @@ Python 3 support.")
          "1l8zmcnp9h8sp8hsw7b81djaa1a9yig0y7i4phh5pihqz1gdn7yi"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-pytest python-setuptools-scm))
     (propagated-inputs
-     `(("python-toml" ,python-toml)
-       ("python-wheel" ,python-wheel)))
+     (list python-toml python-wheel))
     (home-page
      "https://github.com/s0undt3ch/setuptools-declarative-requirements")
     (synopsis "File support for setuptools declarative setup.cfg")
@@ -1717,7 +1862,7 @@ Python 3 support.")
 @code{setup.cfg}.")
     (license license:asl2.0)))
 
-;; The setuptools provided by Python 3.7.4 is too new for Tensorflow.
+;; The setuptools provided by Python 3.9 is too new for Tensorflow.
 (define-public python-setuptools-for-tensorflow
   (hidden-package
    (package
@@ -1728,7 +1873,21 @@ Python 3 support.")
                (uri (pypi-uri "setuptools" version ".zip"))
                (sha256
                 (base32
-                 "1mzdhvfhnv4lggxa8rjl0dzqxvfx377gg5sqs57v89wrp09lwj65")))))))
+                 "1mzdhvfhnv4lggxa8rjl0dzqxvfx377gg5sqs57v89wrp09lwj65"))))
+     (arguments
+      `(#:tests? #f                     ; tests require vendored resources
+        #:phases
+        (modify-phases %standard-phases
+          (add-after 'unpack 'compatibility-fixes
+            (lambda _
+              ;; Python 3.9 no longer has HTMLParser
+              (substitute* "setuptools/py33compat.py"
+                (("html_parser.HTMLParser\\(\\).unescape")
+                 "html.unescape"))
+              ;; This needs distutils.msvc9compiler
+              (delete-file "setuptools/tests/test_msvc.py"))))))
+     (native-inputs
+      (list python-pytest python-mock python-six)))))
 
 (define-public python-uniseg
   (package
@@ -1745,7 +1904,7 @@ Python 3 support.")
     (arguments
      '(#:tests? #f)) ; The test suite requires network access.
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page
      "https://bitbucket.org/emptypage/uniseg-python")
     (synopsis
@@ -1833,9 +1992,6 @@ language.  It aims to be fast.")
      `(#:phases (modify-phases %standard-phases
                   (replace 'check
                     (lambda _
-                      (format #t "current working dir ~s~%" (getcwd))
-                      (setenv "PYTHONPATH"
-                              (string-append ".:" (getenv "PYTHONPATH")))
                       ;; We must run the test suite module directly, as it
                       ;; fails to define the 'tempdir' variable in scope for
                       ;; the tests otherwise
@@ -1887,19 +2043,18 @@ class.")
                         (("\"can_player\\.py --help\"") ""))
                       #t)))))
     (propagated-inputs
-     `(("python-aenum" ,python-aenum)
-       ("python-wrapt" ,python-wrapt)))
-    (native-inputs
-     `(("python-codecov" ,python-codecov)
-       ("python-coverage" ,python-coverage)
-       ("python-future" ,python-future)
-       ("python-hypothesis" ,python-hypothesis)
-       ("python-mock" ,python-mock)
-       ("python-pyserial" ,python-pyserial)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-runner" ,python-pytest-runner)
-       ("python-pytest-timeout" ,python-pytest-timeout)))
+     (list python-aenum python-wrapt))
+    (native-inputs
+     (list python-codecov
+           python-coverage
+           python-future
+           python-hypothesis
+           python-mock
+           python-pyserial
+           python-pytest
+           python-pytest-cov
+           python-pytest-runner
+           python-pytest-timeout))
     (home-page "https://github.com/hardbyte/python-can")
     (synopsis "Controller Area Network (CAN) interface module for Python")
     (description "This package defines the @code{can} module, which provides
@@ -1935,12 +2090,9 @@ sending and receiving messages on a CAN bus.")
                     (lambda _
                       (invoke "py.test" "-k" "not NetworkTests"))))))
     (propagated-inputs
-      `(("python-distlib" ,python-distlib)
-        ("python-packaging" ,python-packaging)
-        ("python-requests" ,python-requests)))
+      (list python-distlib python-packaging python-requests))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)))
+     (list python-mock python-pytest))
     (home-page "https://github.com/brettcannon/caniusepython3")
     (synopsis "Check for Python 3-incompatible Python libraries")
     (description "The @command{caniusepython3} command scans your project and
@@ -2029,10 +2181,7 @@ bits instead of primitive data types like @code{char}, @code{int}, etc.")
      `(("sphinx" ,python-sphinx)
        ("texinfo" ,texinfo)))
     (propagated-inputs
-     `(("python-bitstruct" ,python-bitstruct)
-       ("python-can" ,python-can)
-       ("python-diskcache" ,python-diskcache)
-       ("python-textparser" ,python-textparser)))
+     (list python-bitstruct python-can python-diskcache python-textparser))
     (home-page "https://github.com/eerimoq/cantools")
     (synopsis "Tools for the Controller Area Network (CAN) bus protocol")
     (description "This package includes Controller Area Network (CAN) related
@@ -2064,7 +2213,7 @@ tools that can be used to:
     (arguments
      `(#:tests? #f))
     (propagated-inputs
-     `(("python-humanfriendly" ,python-humanfriendly)))
+     (list python-humanfriendly))
     (home-page "https://capturer.readthedocs.io")
     (synopsis "Capture stdout and stderr streams of the current process")
     (description
@@ -2090,12 +2239,9 @@ for additional processing.")
          "1cagg06vfph864s6l5jb0zqliwxh647bki8j6lf4a4qrv40jnhs8"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-mock" ,python-mock)
-       ("python-nose" ,python-nose)
-       ("python-six" ,python-six)
-       ("python-unittest2" ,python-unittest2)))
+     (list python-mock python-nose python-six python-unittest2))
     (native-inputs
-     `(("python-coverage" ,python-coverage)))
+     (list python-coverage))
     (home-page "https://github.com/celery/case")
     (synopsis "Unittest utilities and convenience methods")
     (description
@@ -2125,8 +2271,7 @@ some helpful Python 2 compatibility convenience methods.")
              (invoke "pytest" "-v" "-k" "not test_pylint_plugin"
                      "verboselogs/tests.py"))))))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)))
+     (list python-mock python-pytest))
     (home-page "https://verboselogs.readthedocs.io")
     (synopsis "Verbose logging level for Python's logging module")
     (description
@@ -2153,7 +2298,7 @@ add the log levels NOTICE, SPAM, SUCCESS and VERBOSE.")
      `(;Tests require some updated modules
        #:tests? #f))
     (propagated-inputs
-     `(("python-capturer" ,python-capturer)))
+     (list python-capturer))
     (home-page "https://coloredlogs.readthedocs.io")
     (synopsis "Colored stream handler for Python's logging module")
     (description
@@ -2200,22 +2345,18 @@ files are easily readable and they work nicely with version control systems.")
          "0vmxgn9wd3j80hp4gr5iq06jrl4gryz5zgfdd2ah30d12sfcfig0"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python2-backports-functools-lru-cache"
-        ,python2-backports-functools-lru-cache)
-       ("python2-backports-shutil-get-terminal-size"
-        ,python2-backports-shutil-get-terminal-size)
-       ("python-cached-property" ,python-cached-property)
-       ("python-colorama" ,python-colorama)
-       ("python-imagesize" ,python-imagesize)
-       ("python-importlib-metadata" ,python-importlib-metadata)
-       ("python-lxml" ,python-lxml)
-       ("python-requests" ,python-requests)
-       ("python-six" ,python-six)))
+     (list python2-backports-functools-lru-cache
+           python2-backports-shutil-get-terminal-size
+           python-cached-property
+           python-colorama
+           python-imagesize
+           python-importlib-metadata
+           python-lxml
+           python-requests
+           python-six))
     (native-inputs
-     `(("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-xdist" ,python-pytest-xdist)
-       ("python-responses" ,python-responses)
-       ("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-pytest-cov python-pytest-xdist python-responses
+           python-setuptools-scm))
     (home-page "https://github.com/webcomics/dosage")
     (synopsis "Comic strip downloader and archiver")
     (description "Dosage is designed to keep a local copy of specific webcomics and other
@@ -2242,8 +2383,7 @@ downloaded, or download a strip for a particular date or index, if possible.")
                     (lambda _
                       (invoke "pytest"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-lxml" ,python-lxml)))   ;used for the tests
+     (list python-pytest python-lxml))   ;used for the tests
     (home-page "https://bitbucket.org/openpyxl/et_xmlfile")
     (synopsis "Low memory implementation of @code{lxml.xmlfile}")
     (description "This Python library is based upon the @code{xmlfile} module
@@ -2257,7 +2397,7 @@ of @code{xmlfile}.")
 (define-public python-openpyxl
   (package
     (name "python-openpyxl")
-    (version "3.0.5")
+    (version "3.0.9")
     (source
      (origin
        ;; We use the upstream repository, as the tests are not included in the
@@ -2268,7 +2408,7 @@ of @code{xmlfile}.")
              (changeset version)))
        (file-name (string-append name "-" version "-checkout"))
        (sha256
-        (base32 "0s6fgwwkcfz1bnrp5gjd4g2lcbl4a76147ylkrmkbabi2nf4xlli"))))
+        (base32 "1p8xvc2gjw6zyzbd7qdvc3x178sm00ymrbyh9539l4fpzgxh0j9c"))))
     (build-system python-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
@@ -2277,12 +2417,9 @@ of @code{xmlfile}.")
                       (invoke "pytest"))))))
     (native-inputs
      ;; For the test suite.
-     `(("python-lxml" ,python-lxml)
-       ("python-pillow" ,python-pillow)
-       ("python-pytest" ,python-pytest)))
+     (list python-lxml python-pillow python-pytest))
     (propagated-inputs
-     `(("python-et-xmlfile" ,python-et-xmlfile)
-       ("python-jdcal" ,python-jdcal)))
+     (list python-et-xmlfile python-jdcal))
     (home-page "https://openpyxl.readthedocs.io")
     (synopsis "Python library to read/write Excel 2010 XLSX/XLSM files")
     (description "This Python library allows reading and writing to the Excel XLSX, XLSM,
@@ -2305,27 +2442,44 @@ standard.")
           (sha256
            (base32
             "1qzjj8nwj4dn0mhq1j64f136afiqqb81lvqiikipz3g1g0b80lqx"))))
-      (arguments '(#:tests? #f)))))     ; No test suite.
+      (arguments
+       `(#:python ,python-2
+         #:tests? #f)))))     ; No test suite.
 
 (define-public python-eventlet
   (package
     (name "python-eventlet")
-    (version "0.25.1")
+    (version "0.33.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "eventlet" version))
        (sha256
         (base32
-         "1hgz8jq19wlz8vwqj900ry8cjv578nz4scc91mlc8944yid6573c"))))
+         "07qlyhcm0f28sxdizawvdf3d50m3hnbzz5kg3fjp7chvki44y540"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-dnspython" ,python-dnspython)
-       ("python-greenlet" ,python-greenlet)
-       ("python-monotonic" ,python-monotonic)))
+     (list python-dnspython python-greenlet python-monotonic python-six))
+    (native-inputs
+     (list python-nose))
     (arguments
-     ;; TODO: Requires unpackaged 'enum-compat'.
-     '(#:tests? #f))
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'avoid-OSError
+           (lambda _
+             ;; If eventlet tries to load greendns, an OSError is thrown when
+             ;; getprotobyname is called.  Thankfully there is an environment
+             ;; variable to disable the greendns import, so use it:
+             (setenv "EVENTLET_NO_GREENDNS" "yes")))
+         (add-after 'unpack 'delete-broken-tests
+           (lambda _
+             (delete-file "tests/greendns_test.py")
+             (delete-file "tests/socket_test.py")))
+         ;; See https://github.com/eventlet/eventlet/issues/562#issuecomment-714183009
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "nosetests" "-v" "tests/")))))))
     (home-page "https://eventlet.net")
     (synopsis "Concurrent networking library for Python")
     (description
@@ -2336,7 +2490,7 @@ Coroutines ensure that the developer uses a blocking style of programming
 that is similar to threading, but provide the benefits of non-blocking I/O.
 The event dispatch is implicit, which means you can easily use @code{Eventlet}
 from the Python interpreter, or as a small part of a larger application.")
-  (license license:expat)))
+    (license license:expat)))
 
 (define-public python-sinfo
   (package
@@ -2350,7 +2504,7 @@ from the Python interpreter, or as a small part of a larger application.")
                 "0kdsp883mx0lfyykv0p12bvs203kdm3skb8bw5wf2pc7kb393sl1"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-stdlib-list" ,python-stdlib-list)))
+     (list python-stdlib-list))
     (home-page "https://gitlab.com/joelostblom/session_info")
     (synopsis "Output module version information loaded in a Python session")
     (description "This package outputs version information for modules loaded
@@ -2358,48 +2512,20 @@ in the current session, Python, and the OS.")
     (license license:bsd-3)))
 
 (define-public python-six
-  (package
+  (package/inherit python-six-bootstrap
     (name "python-six")
-    (version "1.14.0")
-    (source
-     (origin
-      (method url-fetch)
-      (uri (pypi-uri "six" version))
-      (sha256
-       (base32
-        "02lw67hprv57hyg3cfy02y3ixjk3nzwc0dx3c4ynlvkfwkfdnsr3"))))
-    (build-system python-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (invoke "py.test" "-v"))))))
+             (invoke "pytest" "-v"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest-bootstrap)))
-    (home-page "https://pypi.org/project/six/")
-    (synopsis "Python 2 and 3 compatibility utilities")
-    (description
-     "Six is a Python 2 and 3 compatibility library.  It provides utility
-functions for smoothing over the differences between the Python versions with
-the goal of writing Python code that is compatible on both Python versions.
-Six supports every Python version since 2.5.  It is contained in only one
-Python file, so it can be easily copied into your project.")
-    (license license:x11)))
+     `(("python-pytest" ,python-pytest-bootstrap)))))
 
 (define-public python2-six
   (package-with-python2 python-six))
 
-(define-public python-six-bootstrap
-  (package
-    (inherit python-six)
-    (name "python-six-bootstrap")
-    (native-inputs `())
-    (arguments `(#:tests? #f))))
-
-(define-public python2-six-bootstrap
-  (package-with-python2 python-six-bootstrap))
-
 (define-public python-schedule
   (package
     (name "python-schedule")
@@ -2413,8 +2539,7 @@ Python file, so it can be easily copied into your project.")
         "0vplyjcbfrq50sphlwya749z8p2pcyi2nycw3518i0qpd9a6189i"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-mock" ,python-mock)))
+     (list python-pytest python-mock))
     (home-page "https://github.com/dbader/schedule")
     (synopsis "Schedule periodic function calls in Python")
     (description
@@ -2443,7 +2568,7 @@ human-friendly syntax.")
        (sha256
         (base32 "0mmfvx4wqp8gkpv0kbih89zfs9njvmd3v4dxfqii62xddpxq0f1k"))))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (build-system python-build-system)
     (home-page "https://github.com/scour-project/scour")
     (synopsis "Scour is an SVG optimizer/cleaner written in Python")
@@ -2466,7 +2591,7 @@ lossless but can be tweaked for more aggressive cleaning.")
         "1z9kqcwb8gfq2l6i42z624kxpd8692a0c8gw2x5bbm7n848w2mb3"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-html5lib" ,python-html5lib)))
+     (list python-html5lib))
     (home-page "https://github.com/python-mechanize/mechanize")
     (synopsis
      "Stateful programmatic web browsing in Python")
@@ -2493,7 +2618,7 @@ after Andy Lester’s Perl module WWW::Mechanize.")
     (arguments
      `(#:tests? #f))
     (inputs
-      `(("alsa-lib" ,alsa-lib)))
+      (list alsa-lib))
     (home-page
      "https://github.com/hamiltron/py-simple-audio")
     (synopsis "Simple, asynchronous audio playback for Python 3")
@@ -2505,16 +2630,18 @@ audio playback capability for Python 3 on OSX, Windows, and Linux.")
 (define-public python-simplejson
   (package
     (name "python-simplejson")
-    (version "3.17.0")
+    (version "3.17.2")
     (source
      (origin
       (method url-fetch)
       (uri (pypi-uri "simplejson" version))
       (sha256
        (base32
-        "108yf3252fy4ndqab7h46raksxfhcn113bzy2yd8369vidrjnjrb"))))
+        "0hc8nqwdlll4a9cr1k9msn5kmb6kmbjirpgvhjh254nr4sgwgv3m"))))
     (build-system python-build-system)
-    (home-page "http://simplejson.readthedocs.org/en/latest/")
+    (native-inputs
+     (list python-toml))
+    (home-page "https://simplejson.readthedocs.io/en/latest")
     (synopsis
      "Json library for Python")
     (description
@@ -2537,20 +2664,19 @@ Python 3.3+.")
 (define-public python-pyicu
   (package
     (name "python-pyicu")
-    (version "2.4.3")
+    (version "2.7.4")
     (source
      (origin
       (method url-fetch)
       (uri (pypi-uri "PyICU" version))
       (sha256
        (base32
-        "075bw66b3w0nw6mc5k32fwmrhyrmq3d7da3q2mw212qfmm0pgjn0"))))
+        "0mkz1673qxldxs4mrqg9882xgmz5fhpia17yrsd6z8dfw8156rf0"))))
     (build-system python-build-system)
     (inputs
-     `(("icu4c" ,icu4c)))
+     (list icu4c))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-six" ,python-six)))
+     (list python-pytest python-six))
     (home-page "https://github.com/ovalhub/pyicu")
     (synopsis "Python extension wrapping the ICU C++ API")
     (description
@@ -2587,9 +2713,7 @@ Python 3.3+.")
                (invoke "dbus-run-session" "--" "nosetests" "-v" "tests/"))
              #t)))))
     (propagated-inputs
-     `(("python-pygobject" ,python-pygobject)
-       ("python-pycairo" ,python-pycairo)
-       ("python-pyatspi" ,python-pyatspi)))
+     (list python-pygobject python-pycairo python-pyatspi))
     (native-inputs
      `(("python-nose" ,python-nose)
        ("gtk+" ,gtk+)
@@ -2744,21 +2868,21 @@ backported for previous versions of Python from 2.4 to 3.3.")
 (define-public python-parse-type
   (package
     (name "python-parse-type")
-    (version "0.4.2")
+    (version "0.5.2")
     (source
      (origin
       (method url-fetch)
       (uri (pypi-uri "parse_type" version))
       (sha256
        (base32
-        "0g3b6gsdwnm8dpkh2vn34q6dzxm9gl908ggyzcv31n9xbp3vv5pm"))))
+        "02wclgiqky06y36b3q07b7ngpks5j0gmgl6n71ac2j2hscc0nsbz"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-parse" ,python-parse)))
+     (list python-six python-parse))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     ;; Use setuptools < 58 to work around
+     ;; https://github.com/jenisys/parse_type/issues/17
+     (list python-pytest python-pytest-runner python-setuptools))
     (home-page "https://github.com/jenisys/parse_type")
     (synopsis "Extended parse module")
     (description
@@ -2824,6 +2948,26 @@ existing ones.")
                    ;; Tests don't work with python2.
                    #:tests? #f)))))
 
+(define-public python-polling2
+  (package
+    (name "python-polling2")
+    (version "0.5.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "polling2" version))
+       (sha256
+        (base32 "0hp3238fv6k1qk43gv4jwnv1mwlkmx33akbj560b9nvsry1dmdwh"))))
+    (build-system python-build-system)
+    (arguments '(#:tests? #false)) ; no tests included
+    (native-inputs
+     (list python-mock python-pytest python-pytest-runner))
+    (home-page "https://github.com/ddmee/polling2")
+    (synopsis "Polling utility with many configurable options")
+    (description "Polling2 is a utility used to wait for a function to return
+a certain expected condition.")
+    (license license:expat)))
+
 (define-public python-poyo
   (package
     (name "python-poyo")
@@ -2902,10 +3046,8 @@ software.")
         (base32 "10iqjzmya2h4sk765dlm1pbqypwlqyh8rw59a5m9i63d3klnz2mc"))))
   (build-system python-build-system)
   (native-inputs
-    `(("coverage" ,python-coverage)
-      ("pytest" ,python-pytest-astropy)
-      ("pytest-cov" ,python-pytest-cov)
-      ("setuptools-scm" ,python-setuptools-scm)))
+    (list python-coverage python-pytest-astropy python-pytest-cov
+          python-setuptools-scm))
   (home-page "https://github.com/astropy/astropy-helpers")
   (synopsis
    "Utilities for building and installing packages in the Astropy ecosystem")
@@ -3006,7 +3148,7 @@ server.")
     (propagated-inputs
      ;; Youtube-dl is a python package which is imported in the file
      ;; "backend_youtube_dl.py", therefore it needs to be propagated.
-     `(("youtube-dl" ,youtube-dl)))
+     (list youtube-dl))
     (home-page "https://np1.github.io/pafy/")
     (synopsis "Retrieve YouTube content and metadata")
     (description
@@ -3027,7 +3169,7 @@ server.")
     (arguments
      `(#:python ,python-2))
     (native-inputs
-     `(("python2-unittest2" ,python2-unittest2)))
+     (list python2-unittest2))
     (home-page "http://funcsigs.readthedocs.org")
     (synopsis "Python function signatures from PEP362")
     (description
@@ -3046,14 +3188,14 @@ server.")
 (define-public python-py
   (package
     (name "python-py")
-    (version "1.8.1")
+    (version "1.10.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "py" version))
        (sha256
         (base32
-         "1ajjazg3913n0sp3vjyva9c2qh5anx8ziryng935f89604a0h9sy"))))
+         "1lqvkqk3b440g9z82gqbzlzas84wrm6ir8kplzhzavmn2pd1pf11"))))
     (build-system python-build-system)
     (arguments
      ;; FIXME: "ImportError: 'test' module incorrectly imported from
@@ -3062,7 +3204,7 @@ server.")
      ;; Is this module globally installed?"
      '(#:tests? #f))
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-setuptools-scm))
     (home-page "https://github.com/pytest-dev/py")
     (synopsis "Python library for parsing, I/O, instrospection, and logging")
     (description
@@ -3070,18 +3212,6 @@ server.")
 code introspection, and logging.")
     (license license:expat)))
 
-(define-public python-py-next
-  (package
-    (inherit python-py)
-    (version "1.10.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "py" version))
-       (sha256
-        (base32
-         "1lqvkqk3b440g9z82gqbzlzas84wrm6ir8kplzhzavmn2pd1pf11"))))))
-
 (define-public python2-py
   (package-with-python2 python-py))
 
@@ -3098,14 +3228,14 @@ code introspection, and logging.")
 (define-public python-pbr-minimal
   (package
     (name "python-pbr-minimal")
-    (version "3.0.1")
+    (version "5.5.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pbr" version))
        (sha256
         (base32
-         "14fs5acnalnb3h62s7q7av239j541fk0n0z0lawh4h09b1s93s6p"))))
+         "1j8k5d4rdhy5bw5ai1vkjzln2albah94in3vvyvxa0n42fv81baz"))))
     (build-system python-build-system)
     (arguments
      `(#:tests? #f))
@@ -3122,7 +3252,7 @@ code introspection, and logging.")
     (arguments
      `(#:tests? #f)) ;; Most tests seem to use the Internet.
     (propagated-inputs
-      `(("git" ,git))) ;; pbr actually uses the "git" binary.
+      (list git)) ;; pbr actually uses the "git" binary.
     (native-inputs
       `(("python-fixtures" ,python-fixtures-bootstrap)
         ;; discover, coverage, hacking, subunit
@@ -3165,11 +3295,9 @@ from git information.
                         (("hypothesis<5") "hypothesis"))
                       #t)))))
     (native-inputs
-     `(("python-hypothesis" ,python-hypothesis)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-hypothesis python-pytest python-pytest-runner))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (synopsis "Persistent data structures for Python")
     (description
      "Pyrsistent is a number of persistent collections (by some referred to as
@@ -3241,12 +3369,10 @@ files.")
         (base32 "1bg2iw9l5dip0kbs00hajdk2v18wvhssbnq8hdf71278qf0wks5l"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (propagated-inputs
-     `(("python-wcwidth" ,python-wcwidth)
-       ("python-configobj" ,python-configobj)
-       ("python-tabulate" ,python-tabulate)
-       ("python-terminaltables" ,python-terminaltables)))
+     (list python-wcwidth python-configobj python-tabulate
+           python-terminaltables))
     (home-page "https://github.com/dbcli/cli_helpers")
     (synopsis "Helpers for building command-line apps")
     (description
@@ -3276,14 +3402,12 @@ interfaces.")
                                                  "cross-libc" "libc"))))
                (substitute* "src/click/_unicodefun.py"
                  (("'locale'")
-                  (string-append "'" glibc "/bin/locale'"))))
-             #t))
+                  (string-append "'" glibc "/bin/locale'"))))))
          (replace 'check
            (lambda _
-             (setenv "PYTHONPATH" (string-append "./src:" (getenv "PYTHONPATH")))
              (invoke "python" "-m" "pytest"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://palletsprojects.com/p/click/")
     (synopsis "Command line library for Python")
     (description
@@ -3308,6 +3432,30 @@ with sensible defaults out of the box.")
         (base32 "0njsm0wn31l21bi118g5825ma5sa3rwn7v2x4wjd7yiiahkri337"))))
     (arguments `())))
 
+(define-public python-cligj
+  (package
+    (name "python-cligj")
+    (version "0.7.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "cligj" version))
+        (sha256
+          (base32
+            "09vbkik6kyn6yrqzl2r74vaybjk8kjykvi975hy3fsrm4gb17g54"))))
+    (build-system python-build-system)
+    (propagated-inputs
+      (list python-click))
+    (native-inputs
+      (list python-pytest-cov))
+    (home-page "https://github.com/mapbox/cligj")
+    (synopsis "Click params for command line interfaces to GeoJSON")
+    (description
+      "cligj is for Python developers who create command line interfaces
+for geospatial data.  cligj allows you to quickly build consistent,
+well-tested and interoperable CLIs for handling GeoJSON.")
+    (license license:bsd-3)))
+
 (define-public python-vcversioner
   (package
     (name "python-vcversioner")
@@ -3348,7 +3496,7 @@ version numbers.")
                     (lambda _
                       (invoke "pytest"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/phn/jdcal")
     (synopsis "Functions to convert between Julian dates Gregorian dates")
     (description "This Python library provides functions for converting
@@ -3371,8 +3519,7 @@ between Julian dates and Gregorian dates.")
        "00v3689175aqzdscrxpffm712ylp8jvcpqdg51ca22ni6721p51l"))))
    (build-system python-build-system)
    (native-inputs
-    `(("python-nose" ,python-nose)
-      ("python-nose-random" ,python-nose-random)))
+    (list python-nose python-nose-random))
    (home-page
     "https://github.com/fzumstein/jsondiff")
    (synopsis "Compare JSON and JSON-like structures in Python")
@@ -3395,18 +3542,15 @@ compare, diff, and patch JSON and JSON-like structures in Python.")
      '(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (add-installed-pythonpath inputs outputs)
-             (setenv "PYTHONPATH" (string-append ".:" (getenv "PYTHONPATH")))
-             (invoke "trial" "jsonschema"))))))
+           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+             (when tests?
+               (setenv "JSON_SCHEMA_TEST_SUITE" "json")
+               (invoke "trial" "jsonschema")))))))
     (native-inputs
      `(("python-setuptools_scm" ,python-setuptools-scm)
        ("python-twisted" ,python-twisted)))
     (propagated-inputs
-     `(("python-attrs" ,python-attrs)
-       ("python-importlib-metadata" ,python-importlib-metadata) ;; python < 3.8
-       ("python-pyrsistent" ,python-pyrsistent)
-       ("python-six" ,python-six)))
+     (list python-attrs python-pyrsistent python-six))
     (home-page "https://github.com/Julian/jsonschema")
     (synopsis "Implementation of JSON Schema for Python")
     (description
@@ -3426,7 +3570,7 @@ compare, diff, and patch JSON and JSON-like structures in Python.")
          "1lw28j9w9vxyigg7vkfkvi6ic9lgjkdnfvnxdr7pklslqvzmk2vm"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/keleshev/schema")
     (synopsis "Simple data validation library")
     (description
@@ -3466,7 +3610,7 @@ something else) to Python data-types.")
          "1zakh6l0yjvwic9p0nkvmbidpnkygkxbigh2skmb5gccyrhbp7xg"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-chardet" ,python-chardet)))
+     (list python-chardet))
     (home-page "https://github.com/fedora-infra/kitchen")
     (synopsis "Python API for snippets")
     (description "@code{kitchen} module provides a python API for all sorts of
@@ -3539,12 +3683,9 @@ somewhat intelligible.")
      '(#:phases (modify-phases %standard-phases
                   (replace 'check
                     (lambda _
-                      (setenv "PYTHONPATH"
-                              (string-append "./build/lib:"
-                                             (getenv "PYTHONPATH")))
                       (invoke "pytest" "-vv"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/kmike/text-unidecode/")
     (synopsis "Decode Unicode data")
     (description
@@ -3588,8 +3729,7 @@ memory usage and transliteration quality.")
                          ""))
                       (invoke "pytest" "-vv"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)))
+     (list python-pytest python-pytest-cov))
     (home-page "https://github.com/progrium/pyjwt")
     (synopsis "JSON Web Token implementation in Python")
     (description
@@ -3637,13 +3777,13 @@ JavaScript-like message boxes.  Types of dialog boxes include:
   (package
     (name "python-pympler")
     (home-page "https://pythonhosted.org/Pympler/")
-    (version "0.8")
+    (version "0.9")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "Pympler" version))
               (sha256
                (base32
-                "08mrpnb6cv2nvfncvr8a9a8bpwhnasa924anapnjvnaw5jcd4k7p"))))
+                "0ivfw2k86nbw9ck9swidl4422w7bhjldxwj90a4sy5r1cbgygjzj"))))
     (build-system python-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
@@ -3672,14 +3812,14 @@ visualisation and class tracker statistics.")
 (define-public python-itsdangerous
   (package
     (name "python-itsdangerous")
-    (version "1.1.0")
+    (version "2.0.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "itsdangerous" version))
        (sha256
         (base32
-         "068zpbksq5q2z4dckh2k1zbcq43ay74ylqn77rni797j0wyh66rj"))))
+         "1w6gfb2zhbcmrfj6digwzw1z68w6zg1q87rm6la2m412zil4swly"))))
     (build-system python-build-system)
     (home-page "https://palletsprojects.com/p/itsdangerous/")
     (synopsis "Python library for passing data to/from untrusted environments")
@@ -3688,9 +3828,6 @@ visualisation and class tracker statistics.")
 environments and back.")
     (license license:bsd-3)))
 
-(define-public python2-itsdangerous
-  (package-with-python2 python-itsdangerous))
-
 (define-public python-pyyaml
   (package
     (name "python-pyyaml")
@@ -3704,7 +3841,7 @@ environments and back.")
          "0pm440pmpvgv5rbbnm8hk4qga5a292kvlm1bh3x2nwr8pb5p8xv0"))))
     (build-system python-build-system)
     (inputs
-     `(("libyaml" ,libyaml)))
+     (list libyaml python-cython))
     (home-page "https://pyyaml.org")
     (synopsis "YAML parser and emitter for Python")
     (description
@@ -3720,18 +3857,16 @@ provides Python-specific tags that represent an arbitrary Python object.")
 (define-public python-vine
   (package
     (name "python-vine")
-    (version "1.1.4")
+    (version "5.0.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "vine" version))
        (sha256
-        (base32
-         "0wkskb2hb494v9gixqnf4bl972p4ibcmxdykzpwjlfa5picns4aj"))))
+        (base32 "0zk3pm0g7s4qfn0gk28lfmsyplvisaxi6826cgpq5njkm4j1cfvx"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-case" ,python-case)))
+     (list python-pytest python-case))
     (home-page "https://github.com/celery/vine")
     (synopsis "Promises for Python")
     (description
@@ -3744,113 +3879,119 @@ e.g. filters, callbacks and errbacks can all be promises.")
 (define-public python-virtualenv
   (package
     (name "python-virtualenv")
-    (version "20.2.1")
+    (version "20.3.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "virtualenv" version))
        (sha256
         (base32
-         "1rd6wmymsgv0cdsn50jwybcvbbslzym3mzffcjbl42l8br9cgap0"))))
+         "1nbhnpzswcf3lmzn5xabmfdd7ki8r2w2i37y6wml54di6qi1l48c"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ;; NOTE: guix lint remarks that "python-setuptools should probably not
-       ;; be an input at all". However, removing the input makes the build error:
-       ;; File "setup.py", line 4, in <module>
-       ;;   raise RuntimeError("setuptools >= 41 required to build")
-       ("python-setuptools" ,python-setuptools)
-       ("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-mock python-pytest python-setuptools-scm))
     (propagated-inputs
-     `(("python-appdirs" ,python-appdirs)
-       ("python-distlib" ,python-distlib/next)
-       ("python-filelock" ,python-filelock)
-       ("python-six" ,python-six)
-       ("python-importlib-metadata" ,python-importlib-metadata)))
+     (list python-appdirs python-distlib python-filelock python-six))
     (home-page "https://virtualenv.pypa.io/")
     (synopsis "Virtual Python environment builder")
     (description
      "Virtualenv is a tool to create isolated Python environments.")
     (license license:expat)))
 
+(define-public python2-virtualenv
+  (let ((base (package-with-python2 (strip-python2-variant python-virtualenv))))
+    (package
+      (inherit base)
+      (propagated-inputs
+       (modify-inputs (package-propagated-inputs base)
+         (prepend python2-contextlib2))))))
+
 (define-public python-markupsafe
   (package
     (name "python-markupsafe")
-    (version "1.1.1")
+    (version "2.0.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "MarkupSafe" version))
        (sha256
         (base32
-         "0sqipg4fk7xbixqd8kq6rlkxj664d157bdwbh93farcphf92x1r9"))))
+         "02k2ynmqvvd0z0gakkf8s4idyb606r7zgga41jrkhqmigy06fk2r"))))
     (build-system python-build-system)
     (arguments
-     `(#:modules ((ice-9 ftw)
-                  (srfi srfi-1)
-                  (srfi srfi-26)
-                  (guix build utils)
-                  (guix build python-build-system))
-       #:phases (modify-phases %standard-phases
+     `(#:phases (modify-phases %standard-phases
                   (replace 'check
-                    (lambda _
-                      (let ((cwd (getcwd))
-                            (libdir (find (cut string-prefix? "lib." <>)
-                                          (scandir "build"))))
-                      (setenv "PYTHONPATH"
-                              (string-append cwd "/build/" libdir ":"
-                                             (getenv "PYTHONPATH")))
-                      (invoke "pytest" "-vv")))))))
-    (native-inputs
-     `(("python-pytest" ,python-pytest)))
+                    (lambda* (#:key tests? #:allow-other-keys)
+                      (when tests?
+                        (invoke "pytest" "-vv")))))))
+    (native-inputs
+     (list python-pytest))
     (home-page "https://github.com/mitsuhiko/markupsafe")
     (synopsis "XML/HTML/XHTML markup safe string implementation for Python")
     (description
      "Markupsafe provides an XML/HTML/XHTML markup safe string implementation
 for Python.")
-    (license license:bsd-3)))
+    (license license:bsd-3)
+    (properties `((python2-variant . ,(delay python2-markupsafe))))))
 
+;; Version 1.1.1 is the last to support Python 2.
 (define-public python2-markupsafe
-  (package-with-python2 python-markupsafe))
+  (package
+    (inherit (package-with-python2
+              (strip-python2-variant python-markupsafe)))
+    (version "1.1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "MarkupSafe" version))
+       (sha256
+        (base32
+         "0sqipg4fk7xbixqd8kq6rlkxj664d157bdwbh93farcphf92x1r9"))))))
 
 (define-public python-jinja2
   (package
     (name "python-jinja2")
-    (version "2.11.2")
+    (version "3.0.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "Jinja2" version))
        (sha256
         (base32
-         "1c1v3djnr0ymp5xpy1h3h60abcaqxdlm4wsqmls9rxby88av5al9"))))
+         "197ms1wimxql650245v63wkv04n8bicj549wfhp51bx68x5lhgvh"))))
     (build-system python-build-system)
     (arguments
      '(#:phases (modify-phases %standard-phases
                   (replace 'check
                     (lambda* (#:key tests? #:allow-other-keys)
                       (if tests?
-                          (begin
-                            (setenv "PYTHONPATH"
-                                    (string-append "./build/lib:"
-                                                   (getenv "PYTHONPATH")))
-                            (invoke "pytest" "-vv"))
-                          (format #t "test suite not run~%"))
-                      #t)))))
+                          (invoke "pytest" "-vv")
+                          (format #t "test suite not run~%")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (propagated-inputs
-     `(("python-markupsafe" ,python-markupsafe)))
+     (list python-markupsafe))
     (home-page "http://jinja.pocoo.org/")
     (synopsis "Python template engine")
     (description
      "Jinja2 is a small but fast and easy to use stand-alone template engine
 written in pure Python.")
-    (license license:bsd-3)))
+    (license license:bsd-3)
+    (properties `((python2-variant . ,(delay python2-jinja2))))))
 
+;; Version 2.11.3 is the last to support Python 2.
 (define-public python2-jinja2
-  (package-with-python2 python-jinja2))
+  (package
+    (inherit (package-with-python2
+              (strip-python2-variant python-jinja2)))
+    (version "2.11.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "Jinja2" version))
+       (sha256
+        (base32
+         "1iiklf3wns67y5lfcacxma5vxfpb7h2a67xbghs01s0avqrq9md6"))))))
 
 (define-public python-jinja2-time
   (package
@@ -3865,8 +4006,7 @@ written in pure Python.")
          "0h0dr7cfpjnjj8bgl2vk9063a53649pn37wnlkd8hxjy656slkni"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-arrow" ,python-arrow)
-       ("python-jinja2" ,python-jinja2)))
+     (list python-arrow python-jinja2))
     (home-page
      "https://github.com/hackebrot/jinja2-time")
     (synopsis "Jinja2 Extension for Dates and Times")
@@ -3879,13 +4019,13 @@ templates.  A format string can be provided to control the output.")
 (define-public python-pystache
   (package
     (name "python-pystache")
-    (version "0.5.4")
+    (version "0.6.0")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "pystache" version))
               (sha256
                (base32
-                "0nmqsfmiw4arjxqkmf9z66ml950pcdjk6aq4gin4sywmzdjw5fzp"))))
+                "03a73ppf5vxnsk6az5ackvc0hp6xqv2f4hi1s5c4nk4s2jr95gwk"))))
     (build-system python-build-system)
     (arguments
      '(#:tests? #f)) ; FIXME: Python 3 tests are failing.
@@ -3909,24 +4049,56 @@ logic-free templating system Mustache.")
              (lambda _
                (invoke "python" "test_pystache.py")))))))))
 
+(define-public python-pystitcher
+  (package
+    (name "python-pystitcher")
+    (version "1.0.4")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url "https://github.com/captn3m0/pystitcher")
+         (commit
+          (string-append "v" version))))
+       (file-name
+        (git-file-name name version))
+       (sha256
+        (base32 "03yrzqhcsjdj5zprrk3bh5bbyqfy3vfhxra9974vmkir3m121394"))))
+    (build-system python-build-system)
+    (inputs
+     (list python-html5lib python-importlib-metadata python-markdown
+           python-pypdf3 python-validators))
+    (home-page "https://github.com/captn3m0/pystitcher")
+    (synopsis "Declaratively stitch together a PDF file from multiple sources")
+    (description
+     "This package stitches your PDF files together, generating customizable
+bookmarks using a declarative input in the form of a markdown file.")
+    (license license:expat)))
+
 (define-public python-joblib
   (package
     (name "python-joblib")
-    (version "0.14.1")
+    (version "1.1.0")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "joblib" version))
               (sha256
                (base32
-                "1j464w137w6s367gl697j1l63g52akydrxgv4czlck36ynjfwc06"))))
+                "0d8ypyhsw1bjr96zan9ms8wbvnzbjqxniq4vcszghcrps7ngqn21"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda _ (invoke "pytest" "-v" "joblib"))))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (setenv "JOBLIB_MULTIPROCESSING" "0")
+               (invoke "pytest" "-v" "joblib"
+                       ;; We disable this test to avoid having to depend on ipython/jupyter
+                       "-k" "not test_parallel_call_cached_function_defined_in_jupyter")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://joblib.readthedocs.io/")
     (synopsis "Using Python functions as pipeline jobs")
     (description
@@ -3936,39 +4108,54 @@ and lazy re-evaluation (memoize pattern), easy simple parallel computing
 logging and tracing of the execution.")
     (license license:bsd-3)))
 
+;; Newer versions of joblib don't support Python 2.
 (define-public python2-joblib
-  (package-with-python2 python-joblib))
+  (package
+    (inherit (package-with-python2 python-joblib))
+    (version "0.14.1")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "joblib" version))
+              (sha256
+               (base32
+                "1j464w137w6s367gl697j1l63g52akydrxgv4czlck36ynjfwc06"))))))
 
 (define-public python-daemon
   (package
     (name "python-daemon")
-    (version "2.2.3")
+    (version "2.3.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "python-daemon" version))
        (sha256
         (base32
-         "09fcjdjzk9ywmpnrj62iyxqgcygzdafsz41qlrk2dknzbagcmzmg"))))
+         "1bxfn2bq56sd4w0nm9mqy8y0905m7fc8vmhnjxlrf49vcbqr7adx"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-before 'check 'disable-tests
+         (add-before 'check 'adjust-tests
            (lambda _
+             ;; Drop use of testtools.helpers.safe_hasattr which has
+             ;; been removed in favor of hasattr.
+             (substitute* "test/test_metadata.py"
+               (("testtools\\.helpers\\.safe_hasattr")
+                "hasattr"))
              ;; FIXME: Determine why test fails
              (substitute* "test/test_daemon.py"
                (("test_detaches_process_context")
-                "skip_test_detaches_process_context"))
-             #t)))))
+                "skip_test_detaches_process_context")))))))
     (propagated-inputs
-     `(("python-lockfile" ,python-lockfile)))
+     (list python-lockfile))
     (native-inputs
-     `(("python-unittest2" ,python-unittest2)
-       ("python-testtools" ,python-testtools)
-       ("python-testscenarios" ,python-testscenarios)
-       ("python-mock" ,python-mock)
-       ("python-docutils" ,python-docutils)))
+     (list python-coverage
+           python-unittest2
+           python-testtools
+           python-testscenarios
+           python-twine
+           python-mock
+           python-docutils))
     (home-page "https://pagure.io/python-daemon/")
     (synopsis "Python library for making a Unix daemon process")
     (description "Python-daemon is a library that assists a Python program to
@@ -4002,11 +4189,11 @@ important tasks for becoming a daemon process:
                 "1aycpc387wqz7h9w2p53qxn43qsh3m6by6ak4kkc66x9aprr63rz"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (native-inputs
-     `(;; For tests.
-       ("graphviz" ,graphviz)           ;for 'dot'
-       ("python-nose" ,python-nose)))
+     (list ;; For tests.
+           graphviz ;for 'dot'
+           python-nose))
     (home-page "https://github.com/c0fec0de/anytree")
     (synopsis "Lightweight tree data library")
     (description
@@ -4014,6 +4201,77 @@ important tasks for becoming a daemon process:
 structure for Python.")
     (license license:asl2.0)))
 
+(define-public autokey
+  (package
+    (name "autokey")
+    (version "0.95.10")
+    (source (origin
+             (method git-fetch)
+             (uri (git-reference
+                   (url "https://github.com/autokey/autokey")
+                   (commit (string-append "v" version))))
+             (file-name (git-file-name name version))
+             (sha256
+              (base32
+               "0f0cqfnb49wwdy7zl2f2ypcnd5pc8r8n7z7ssxkq20d4xfxlgamr"))))
+    (build-system python-build-system)
+    (arguments
+     (list
+      ;; Tests are deprecated and broken until next version, see
+      ;; https://github.com/autokey/autokey/issues/327
+      #:tests? #f
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'fix-paths
+            (lambda* (#:key inputs #:allow-other-keys)
+              (substitute* "lib/autokey/scripting.py"
+                (("\"wmctrl\"")
+                 (string-append "\"" (search-input-file inputs "bin/wmctrl") "\""))
+                (("\"zenity\"")
+                 (string-append "\"" (search-input-file inputs "bin/zenity") "\"")))
+              (substitute* "autokey-shell"
+                (("'ipython3'")
+                 (string-append "'" (search-input-file inputs "bin/ipython3") "'"))
+                (("'python3'")
+                 (string-append "'" (search-input-file inputs "bin/python3") "'")))))
+          ;; Use 'prefix' instead of '=' to allow the user to use additional
+          ;; GI paths from their autokey scripts.  GUIX_PYTHONPATH is already
+          ;; wrapped with prefix in python-build-system's wrap.
+          (add-before 'wrap 'wrap-autokey-gi
+            (lambda _
+              (let ((gi-typelib-path (getenv "GI_TYPELIB_PATH")))
+                (for-each
+                 (lambda (program)
+                   (wrap-program program
+                     `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))))
+                 (map (lambda (name)
+                        (string-append #$output "/bin/" name))
+                      '("autokey-gtk"
+                        "autokey-shell")))))))))
+    (inputs
+     (list bash-minimal ; for wrap-program
+           gtksourceview-3
+           libappindicator
+           libnotify
+           python-dbus
+           python-ipython
+           python-pygobject
+           python-pyinotify
+           python-pyqt+qscintilla
+           python-xlib
+           wmctrl
+           zenity))
+    (home-page "https://github.com/autokey/autokey")
+    (synopsis
+      "Keyboard and GUI automation utility")
+    (description
+      "AutoKey is a desktop automation utility for X11.  It allows the automation of
+virtually any task by responding to typed abbreviations and hotkeys.  It
+offers a full-featured GUI (GTK and QT versions) that makes it highly
+accessible for novices, as well as a scripting interface offering the full
+flexibility and power of the Python language.")
+    (license license:gpl3+)))
+
 (define-public python-docutils
   (package
     (name "python-docutils")
@@ -4050,6 +4308,20 @@ via commands such as @command{rst2man}, as well as supporting Python code.")
 (define-public python2-docutils
   (package-with-python2 python-docutils))
 
+;; awscli refuses to be built with docutils < 0.16.
+(define-public python-docutils-0.15
+  (package
+    (inherit python-docutils)
+    (version "0.15")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "docutils" version))
+              (sha256
+               (base32
+                "0ja8q6mdj6xv62jjw3phv8j5nfqi5x8hnfy4pqfcjcgz4b34k8sl"))))
+    ;; tests contain Python 2 syntax.
+    (arguments '(#:tests? #false))))
+
 ;; python2-sphinx fails its test suite with newer versions.
 (define-public python2-docutils-0.14
   (package
@@ -4085,15 +4357,46 @@ via commands such as @command{rst2man}, as well as supporting Python code.")
                (invoke "nosetests" "-v"))
              #t)))))
     (propagated-inputs
-     `(("python-docutils" ,python-docutils)))
+     (list python-docutils))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (home-page "https://github.com/twolfson/restructuredtext-lint")
     (synopsis "reStructuredText linter")
     (description "This package provides a linter for the reStructuredText
 format.")
     (license license:unlicense)))
 
+(define-public python-click-repl
+  (package
+    (name "python-click-repl")
+    (version "0.2.0")
+    (source
+     (origin
+       (method git-fetch)               ; no tests in PyPI release
+       (uri (git-reference
+             (url "https://github.com/click-contrib/click-repl")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "16ybsnwlj2jlqcfxflky8jz7i3nhrd3f6mvkpgs95618l8lx994i"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "python" "-m" "pytest")))))))
+    (native-inputs
+     (list python-pytest))
+    (propagated-inputs
+     (list python-click python-prompt-toolkit python-six))
+    (home-page "https://github.com/untitaker/click-repl")
+    (synopsis "REPL plugin for Click")
+    (description "This package provides a REPL plugin for Click.")
+    (license license:expat)))
+
 (define-public python-doc8
   (package
     (name "python-doc8")
@@ -4117,14 +4420,10 @@ format.")
                (invoke "pytest" "-v"))
              #t)))))
     (propagated-inputs
-     `(("python-chardet" ,python-chardet)
-       ("python-docutils" ,python-docutils)
-       ("python-restructuredtext-lint" ,python-restructuredtext-lint)
-       ("python-six" ,python-six)
-       ("python-stevedore" ,python-stevedore)))
+     (list python-chardet python-docutils python-restructuredtext-lint
+           python-six python-stevedore))
     (native-inputs
-     `(("python-testtools" ,python-testtools)
-       ("python-pytest" ,python-pytest)))
+     (list python-testtools python-pytest))
     (home-page "https://launchpad.net/doc8")
     (synopsis
      "Style checker for Sphinx (or other) RST documentation")
@@ -4181,7 +4480,7 @@ text styles of documentation.")
          "0cz14clcc9z4pn79ll8hp3xzgsrfjscak5zfsvlgrz6ngkkmgjma"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pygments" ,python-pygments)))
+     (list 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.")
@@ -4231,7 +4530,7 @@ software version simply.")
 (define-public python-deprecated
   (package
     (name "python-deprecated")
-    (version "1.2.5")
+    (version "1.2.13")
     (source
      (origin
        (method git-fetch)
@@ -4241,21 +4540,19 @@ software version simply.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "14909glxxwwc4b9qpz2b9jdriwzi5n65ichw85xqppap5f79wcwz"))))
+         "0v4ys9xr8lski2r98da99spsj6hjlnnqgnhhmyhrm66myiix885c"))))
     (build-system python-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (replace 'check
-                    (lambda _
-                      (invoke "pytest"))))))
+                    (lambda* (#:key tests? #:allow-other-keys)
+                      (when tests?
+                        (invoke "pytest")))))))
     (propagated-inputs
-     `(("python-wrapt" ,python-wrapt)))
+     (list python-wrapt))
     (native-inputs
-     `(("python-bumpversion" ,python-bumpversion)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-sphinx" ,python-sphinx)
-       ("python-tox" ,python-tox)))
+     (list python-bumpversion python-pytest python-pytest-cov
+           python-sphinx python-tox))
     (home-page "https://github.com/tantale/deprecated")
     (synopsis "Python decorator to deprecate classes, functions or methods")
     (description "The @code{deprecated} decorator provides a convenient way to deprecate
@@ -4287,13 +4584,10 @@ to deprecate classes, functions or methods.")
                (invoke "pytest"))
              #t)))))
     (propagated-inputs
-     `(("python-cryptography" ,python-cryptography)
-       ("python-deprecated" ,python-deprecated)
-       ("python-pyjwt" ,python-pyjwt)
-       ("python-requests" ,python-requests)))
+     (list python-cryptography python-deprecated python-pyjwt
+           python-requests))
     (native-inputs
-     `(("python-httpretty" ,python-httpretty)
-       ("python-pytest" ,python-pytest)))
+     (list python-httpretty python-pytest))
     (home-page "https://pygithub.readthedocs.io/en/latest/")
     (synopsis "Python library for the GitHub API")
     (description "This library allows managing GitHub resources such as
@@ -4314,8 +4608,7 @@ using version 3 of the GitHub application programming interface (API).")
          "1w0arpj1sm7vh29nrbnca4pnp8sx42l07r17inwqcjjf9bhng66x"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-invoke" ,python-invoke)
-       ("python-pygithub" ,python-pygithub)))
+     (list python-invoke python-pygithub))
     (home-page "https://github.com/robotframework/rellu")
     (synopsis "Utilities to create PyPI releases")
     (description "This collection of utilities contains tooling and templates
@@ -4327,7 +4620,7 @@ ecosystem, but can naturally be used also by other projects.")
 (define-public python-robotframework
   (package
     (name "python-robotframework")
-    (version "3.2.2")
+    (version "4.1.2")
     ;; There are no tests in the PyPI archive.
     (source
      (origin
@@ -4337,7 +4630,7 @@ ecosystem, but can naturally be used also by other projects.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0if0h3myb9m3hgmn1phrhq8pfp89kfqsaq32vmfdjkyjdj7y59ds"))
+        (base32 "0s6lakbd8h1pa4lfdj18sm13gpywszgpcns4hz026a4kam787kby"))
        (patches (search-patches
                  "python-robotframework-source-date-epoch.patch"))))
     (build-system python-build-system)
@@ -4351,8 +4644,7 @@ ecosystem, but can naturally be used also by other projects.")
                         (invoke "invoke" "library-docs" "all")
                         (mkdir-p doc)
                         (copy-recursively "doc/libraries"
-                                          (string-append doc "/libraries"))
-                        #t)))
+                                          (string-append doc "/libraries")))))
                   (replace 'check
                     (lambda* (#:key inputs #:allow-other-keys)
                       ;; Some tests require timezone data.  Otherwise, they
@@ -4361,13 +4653,14 @@ ecosystem, but can naturally be used also by other projects.")
                       ;;
                       ;; OverflowError: mktime argument out of range
                       (setenv "TZDIR"
-                              (string-append (assoc-ref inputs "tzdata")
-                                             "/share/zoneinfo"))
+                              (search-input-directory inputs "share/zoneinfo"))
                       (setenv "TZ" "Europe/Paris")
 
                       (invoke "python" "utest/run.py"))))))
     (native-inputs
-     `(("python-invoke" ,python-invoke)
+     `(("python-docutils" ,python-docutils)
+       ("python-jsonschema" ,python-jsonschema)
+       ("python-invoke" ,python-invoke)
        ("python-rellu" ,python-rellu)
        ("python:tk" ,python "tk")             ;used when building the HTML doc
        ("tzdata" ,tzdata-for-tests)))
@@ -4379,6 +4672,48 @@ acceptance testing, acceptance test driven development (ATDD), and robotic
 process automation (RPA).")
     (license license:asl2.0)))
 
+(define-public python-robotframework-datadriver
+  (package
+    (name "python-robotframework-datadriver")
+    (version "1.5.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "robotframework-datadriver" version))
+       (sha256
+        (base32 "1kv6h47850gdqr8azknkh81z7hw6yz5pjn53mkn71ly4szw4pqb7"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-readme-file-name
+           (lambda _
+             (rename-file "Readme.rst" "README.rst")))
+         (add-before 'check 'skip-problematic-tests
+           (lambda _
+             ;; The test file 'tab-csv-file-name.tsv' contains special
+             ;; characters for which there is no locale in the build
+             ;; environment, causing one test to fail.
+             (delete-file-recursively "atest/TestCases/csv_reader_config")))
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (with-directory-excursion "atest"
+                 (invoke "sh" "run_atest.sh"))))))))
+    (native-inputs (list python-docutils
+                         python-robotframework-stacktrace))
+    (propagated-inputs (list python-openpyxl
+                             python-pandas
+                             python-pygments
+                             python-robotframework))
+    (home-page "https://github.com/Snooz82/robotframework-datadriver")
+    (synopsis "Data-driven test extension for Robot Framework")
+    (description "DataDriver is a data-driven extension for Robot Framework.
+DataDriver uses the Listener Interface of Robot Framework to create new test
+cases based on a data file that contains the test data.  DataDriver supports
+data files in the CSV, XLS or XLSX formats.")
+    (license license:asl2.0)))
+
 (define-public python-robotframework-lint
   ;; There is no properly tagged release; the commit below seems to correspond
   ;; to the 0.9 stable release available from PyPI.  The tests are not
@@ -4409,17 +4744,46 @@ process automation (RPA).")
                (invoke "python" "-m" "robot" "-A"
                        "tests/conf/default.args" "tests"))))))
       (propagated-inputs
-       `(("python-robotframework" ,python-robotframework)))
+       (list python-robotframework))
       (home-page "https://github.com/boakley/robotframework-lint/")
       (synopsis "Static analysis tool (linter) for Robot Framework")
       (description "This package provides the @code{rflint} command-line
 utility, a static analysis tool (linter) for Robot Framework source files.")
       (license license:asl2.0))))
 
+(define-public python-robotframework-stacktrace
+  (package
+    (name "python-robotframework-stacktrace")
+    (version "0.4.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "robotframework-stacktrace" version))
+       (sha256
+        (base32 "19gnwr7da1zz9clhwsmvqfjf02d195i61lzpq4253dcsgrpb6v79"))))
+    (build-system python-build-system)
+    (arguments
+     ;; The test suite fails (see:
+     ;; https://github.com/MarketSquare/robotframework-stacktrace/issues/4).
+     `(#:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (with-directory-excursion "tests"
+                 (invoke "python" "-m" "robot" "."))))))))
+    (propagated-inputs (list python-robotframework))
+    (home-page "https://github.com/MarketSquare/robotframework-stacktrace")
+    (synopsis "Robot Framework listener to print a stack trace on error")
+    (description "StackTrace is a Robot Framework listener that prints a stack
+trace directly to the terminal to ease debugging.")
+    (license license:asl2.0)))
+
 (define-public python-robotframework-sshlibrary
   (package
     (name "python-robotframework-sshlibrary")
-    (version "3.3.0")
+    (version "3.7.0")
     ;; There are no tests in the PyPI archive.
     (source
      (origin
@@ -4430,7 +4794,7 @@ utility, a static analysis tool (linter) for Robot Framework source files.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1mk6dz2jqqndbx4yji09012q6rmadnqdywi7czvj62b0s07dr3r2"))))
+         "09ak22rh9qa9wlpvhkliyybcp4xafjhxsps28wz0pf0030771xav"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -4444,26 +4808,24 @@ utility, a static analysis tool (linter) for Robot Framework source files.")
                (invoke "invoke" "kw-docs" "project-docs")
                (mkdir-p doc)
                (for-each delete-file (find-files "docs" "\\.rst"))
-               (copy-recursively "docs" doc)
-               #t)))
+               (copy-recursively "docs" doc))))
          (replace 'check
-           (lambda _
-             ;; Some tests require an SSH server; we remove them.
-             (delete-file "utest/test_client_api.py")
-             (delete-file "utest/test_scp.py")
-             (invoke "python" "utest/run.py"))))))
-    (propagated-inputs
-     `(("python-robotframework" ,python-robotframework)
-       ("python-paramiko" ,python-paramiko)
-       ("python-scp" ,python-scp)))
-    (native-inputs
-     `(("openssh" ,openssh)
-       ("which" ,which)
-       ;; To generate the documentation
-       ("python-docutils" ,python-docutils)
-       ("python-invoke" ,python-invoke)
-       ("python-pygments" ,python-pygments)
-       ("python-rellu" ,python-rellu)))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               ;; Some tests require an SSH server; we remove them.
+               (delete-file "utest/test_client_api.py")
+               (delete-file "utest/test_scp.py")
+               (invoke "python" "utest/run.py")))))))
+    (propagated-inputs
+     (list python-robotframework python-paramiko python-scp))
+    (native-inputs
+     (list openssh
+           which
+           ;; To generate the documentation
+           python-docutils
+           python-invoke
+           python-pygments
+           python-rellu))
     (outputs '("out" "doc"))
     (home-page "https://github.com/robotframework/SSHLibrary")
     (synopsis "Robot Framework library for SSH and SFTP")
@@ -4477,6 +4839,88 @@ for SSH and SFTP.  It has the following main usages:
 @end itemize")
     (license license:asl2.0)))
 
+(define-public python-robotframework-pythonlibcore
+  (package
+    (name "python-robotframework-pythonlibcore")
+    (version "3.0.0")
+    (source
+     (origin
+       (method git-fetch)               ;no tests in pypi archive
+       (uri (git-reference
+             (url "https://github.com/robotframework/PythonLibCore")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0v89v8va65l6inh0fb34qgxawx6p29pnrmw4n5941yzdi3804rc4"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases (modify-phases %standard-phases
+                  (replace 'check
+                    (lambda* (#:key tests? #:allow-other-keys)
+                      (when tests?
+                        (invoke "utest/run.py")))))))
+    (native-inputs
+     (list python-pytest python-pytest-cov python-pytest-mockito
+           python-robotframework))
+    (home-page "https://github.com/robotframework/PythonLibCore")
+    (synopsis "Robot Framework Python library tools")
+    (description "PythonLibCore provides tools for creating larger test
+libraries for Robot Framework using Python.  The Robot Framework hybrid and
+dynamic library APIs give more flexibility for library than the static library
+API, but they also set requirements for libraries which need to be implemented
+in the library side.  PythonLibCore eases the problem by providing a simpler
+interface and by handling all the requirements towards the Robot Framework
+library APIs.")
+    (license license:asl2.0)))
+
+(define-public python-robotframework-seleniumlibrary
+  (package
+    (name "python-robotframework-seleniumlibrary")
+    (version "5.1.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "robotframework-seleniumlibrary" version))
+       (sha256
+        (base32 "1dihrbcid9i7daw2qy6h3xsvwaxzmyip820jw5z11n60qrl006pm"))))
+    (build-system python-build-system)
+    ;; XXX: Tests require ungoogled-chromium, but the chromium module would
+    ;; introduce a cycle if imported here.
+    (propagated-inputs
+     (list python-robotframework python-robotframework-pythonlibcore
+           python-selenium))
+    (home-page "https://github.com/robotframework/SeleniumLibrary")
+    (synopsis "Web testing library for Robot Framework")
+    (description "SeleniumLibrary is a web testing library for Robot Framework
+that utilizes the Selenium tool internally.")
+    (license license:asl2.0)))
+
+(define-public python-robotframework-seleniumscreenshots
+  (package
+    (name "python-robotframework-seleniumscreenshots")
+    (version "0.9.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "robotframework-seleniumscreenshots" version))
+       (sha256
+        (base32 "05qv323hvjmy62h33ryrjaa9k1hyvp8hq5qnj8j1x3ap2ci3q3s0"))))
+    (build-system python-build-system)
+    (arguments
+    ;; XXX: The tests require a relatively complicated setup configured in
+    ;; their CI with Nix (!).
+     `(#:tests? #f))
+    (propagated-inputs
+     (list python-robotframework python-robotframework-seleniumlibrary))
+    (home-page "https://github.com/MarketSquare/robotframework-seleniumscreenshots")
+    (synopsis "Robot Framework library for annotating and cropping screenshots")
+    (description "The SeleniumScreenshots library for Robot Framework provides
+keywords for annotating and cropping screenshots taken with SeleniumLibrary.
+It is useful for scripting automatically updated screenshots for documentation
+or for visual regression testing purposes.")
+    (license license:bsd-3)))
+
 (define-public python-rstr
   (package
    (name "python-rstr")
@@ -4511,7 +4955,7 @@ outside the standard library.")
     (arguments
      '(#:tests? #f))                     ;tests require an SSH server
     (propagated-inputs
-     `(("python-paramiko" ,python-paramiko)))
+     (list python-paramiko))
     (home-page "https://github.com/jbardin/scp.py")
     (synopsis "SCP protocol module for Python and Paramiko")
     (description "The scp module extends the Paramiko library to send and
@@ -4531,10 +4975,9 @@ receive files via the SCP1 protocol, as implemented by the OpenSSH
         (base32 "0pqsfqqx8h0pq21k8l3k62kznrgaj2ala93c64s4d9rpbr4mgkd2"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-six" ,python-six)))
+     (list python-dateutil python-six))
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-setuptools-scm))
     ;; Test would require path.py, which would introduce a cyclic dependence.
     (arguments `(#:tests? #f))
     ;; Note: As of version 1.7 the documentation is not worth building.
@@ -4564,8 +5007,7 @@ augment the changelog, but it can be used for other documents, too.")
                 "1h4gwmcfn84kkqh83km1vfz8sc5kr2g4gzgzmr8gz704jmqiv7nq"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-cryptography" ,python-cryptography)
-       ("python-ecdsa" ,python-ecdsa)))
+     (list python-cryptography python-ecdsa))
     (synopsis "OpenSSH public key parser")
     (description
      "This package provides a library for parsing and validating OpenSSH
@@ -4593,8 +5035,7 @@ public key files.")
            #t))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pytz" ,python-pytz)
-       ("python-six" ,python-six)))
+     (list python-pytz python-six))
     (home-page "https://github.com/getpelican/feedgenerator")
     (synopsis
      "Standalone version of Django's Atom/RSS feed generator")
@@ -4606,29 +5047,31 @@ which can produce feeds in RSS 2.0, RSS 0.91, and Atom formats.")
 (define-public python2-feedgenerator
   (package-with-python2 python-feedgenerator))
 
-(define-public python-jsonrpc-server
+(define-public python-lsp-jsonrpc
   (package
-    (name "python-jsonrpc-server")
-    (version "0.4.0")
+    (name "python-lsp-jsonrpc")
+    (version "1.0.0")
     (source
      (origin
        (method url-fetch)
-       (uri (pypi-uri "python-jsonrpc-server" version))
+       (uri (pypi-uri "python-lsp-jsonrpc" version))
        (sha256
         (base32
-         "1585ybn3djvx5r5zbxkzlhz2wb1d47y4wrfwaxdyq0gi87jl7ib2"))))
+         "1gb0fsamxndhplx25v8m0b3k7aknzy454fpa0qsqsqnv6c3igv3v"))))
     (build-system python-build-system)
+    (native-inputs
+     (list python-mock python-pytest))
     (propagated-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("python-ujson" ,python-ujson)))
-    (home-page
-     "https://github.com/palantir/python-jsonrpc-server")
+     (list python-ujson))
+    (home-page "https://github.com/python-lsp/python-lsp-jsonrpc")
     (synopsis "JSON RPC 2.0 server library")
     (description
      "This package provides a JSON RPC 2.0 server library for Python.")
     (license license:expat)))
 
+(define-public python-jsonrpc-server
+  (deprecated-package "python-jsonrpc-server" python-lsp-jsonrpc))
+
 (define-public python-pydantic
   (package
     (name "python-pydantic")
@@ -4670,10 +5113,9 @@ which can produce feeds in RSS 2.0, RSS 0.91, and Atom formats.")
          (replace 'check
            (lambda _ (invoke "pytest" "-vv"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-mock" ,python-pytest-mock)))
+     (list python-pytest python-pytest-mock))
     (propagated-inputs
-     `(("python-typing-extensions" ,python-typing-extensions)))
+     (list python-typing-extensions))
     (home-page "https://github.com/samuelcolvin/pydantic")
     (synopsis "Python data validation and settings management")
     (description
@@ -4694,8 +5136,7 @@ errors when data is invalid.")
          "1m1xv9clkg9lgzyza6dnj359z04vh5g0h49nhzghv7lg81gchhap"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-snowballstemmer" ,python-snowballstemmer)))
+     (list python-six python-snowballstemmer))
     (home-page
      "https://github.com/PyCQA/pydocstyle/")
     (synopsis "Python docstring style checker")
@@ -4704,79 +5145,76 @@ errors when data is invalid.")
 Server (PLS).")
     (license license:expat)))
 
-(define-public python-language-server
+(define-public python-lsp-server
   (package
-    (name "python-language-server")
-    (version "0.36.2")
+    (name "python-lsp-server")
+    (version "1.3.3")
     (source
      (origin
        (method url-fetch)
-       (uri (pypi-uri "python-language-server" version))
+       (uri (pypi-uri "python-lsp-server" version))
        (sha256
         (base32
-         "1c0pnk2aibfhfaanrs0a5gkabkvz81gj20z7r0152b7fcx5ci14r"))))
+         "0h6wxzmm6qjfwkkn3mnzn1fpmcp23fpbk74bi8p540q1nzccqj0v"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'relax-deps
-           (lambda _
-             (substitute* "setup.py" (("pycodestyle>=2.6.0,<2.7.0")
-                                      "pycodestyle"))
-             (substitute* "setup.py" (("pyflakes>=2.2.0,<2.3.0") "pyflakes"))
-             #t))
          (add-before 'check 'set-HOME
-           (lambda _ (setenv "HOME" "/tmp") #t))
+           (lambda _ (setenv "HOME" "/tmp")))
          (replace 'check
            (lambda _
              ;; Disable failing test.
              (invoke "python" "-m" "pytest" "-k"
                      "not test_pyqt_completion"))))))
     (propagated-inputs
-     `(("python-autopep8" ,python-autopep8)
-       ("python-configparser" ,python-configparser)
-       ("python-pydocstyle" ,python-pydocstyle)
-       ("python-flake8" ,python-flake8)
-       ("python-future" ,python-future)
-       ("python-jedi" ,python-jedi)
-       ("python-jsonrpc-server" ,python-jsonrpc-server)
-       ("python-pluggy" ,python-pluggy)
-       ("python-pycodestyle" ,python-pycodestyle)
-       ("python-pyflakes" ,python-pyflakes)
-       ("python-rope" ,python-rope)
-       ("python-ujson" ,python-ujson)
-       ("python-yapf" ,python-yapf)))
-    (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-flaky" ,python-flaky)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-mock" ,python-mock)
-       ("python-numpy" ,python-numpy)
-       ("python-pandas" ,python-pandas)
-       ("python-pylint" ,python-pylint)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-versioneer" ,python-versioneer)))
-    (home-page "https://github.com/palantir/python-language-server")
+     (list python-autopep8
+           python-configparser
+           python-pydocstyle
+           python-flake8
+           python-future
+           python-jedi
+           python-lsp-jsonrpc
+           python-pluggy
+           python-pycodestyle
+           python-pyflakes
+           python-rope
+           python-ujson
+           python-yapf))
+    (native-inputs
+     (list python-coverage
+           python-flaky
+           python-matplotlib
+           python-mock
+           python-numpy
+           python-pandas
+           python-pylint
+           python-pytest
+           python-pytest-cov
+           python-versioneer))
+    (home-page "https://github.com/python-lsp/python-lsp-server")
     (synopsis "Python implementation of the Language Server Protocol")
     (description
-     "The Python Language Server (pyls) is an implementation of the Python 3
-language specification for the Language Server Protocol (LSP).  This tool is
-used in text editing environments to provide a complete and integrated
-feature-set for programming Python effectively.")
+"The Python Language Server @command{pylsp} is an implementation of the
+Python 3 language specification for the Language Server Protocol (LSP).
+This tool is used in text editing environments to provide a complete
+and integrated feature-set for programming Python effectively.")
     (license license:expat)))
 
+(define-public python-language-server
+  (deprecated-package "python-language-server" python-lsp-server))
+
 (define-public python-pathspec
   (package
     (name "python-pathspec")
-    (version "0.7.0")
+    (version "0.9.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pathspec" version))
        (sha256
         (base32
-         "15lvs4awlg8xzl0l4gk9y53xx4yqmqvsv44pglv39m70y85afajn"))))
+         "1cdbdb3s6ldnjpwbi0bgl0xlmw4mbfxk08bbdxc3srx26na4jr75"))))
     (build-system python-build-system)
     (home-page "https://github.com/cpburnz/python-path-specification")
     (synopsis "Utility library for gitignore style pattern matching of file paths")
@@ -4788,67 +5226,73 @@ matching of file paths.")
 (define-public python-black
   (package
     (name "python-black")
-    (version "20.8b1")
+    (version "21.12b0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "black" version))
        (sha256
         (base32
-         "1spv6sldp3mcxr740dh3ywp25lly9s8qlvs946fin44rl1x5a0hw"))))
+         "1czjwr1bx9ax5l64xfi54sxb1ycdy4s9ciaqg592x7jn79lhzf3p"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-after 'patch-source-shebangs 'patch-extra-shebangs
+         (add-after 'unpack 'relax-version-requirements
            (lambda _
-             (let ((python3 (which "python3")))
-               (substitute* '("tests/data/fmtonoff.py"
-                              "tests/data/string_prefixes.py"
-                              "tests/data/function.py"
-                              "tests/data/python37.py")
+             (substitute* "setup.py"
+               (("tomli[^\"]*\",")
+                "tomli\","))))
+         (add-after 'patch-source-shebangs 'use-absolute-file-names
+           (lambda* (#:key native-inputs inputs #:allow-other-keys)
+             (let* ((inpts (or native-inputs inputs))
+                    (python3 (search-input-file inpts "/bin/python3"))
+                    (/bin/false (search-input-file inpts "/bin/false"))
+                    (/bin/sleep (search-input-file inpts "/bin/sleep")))
+               (substitute* (find-files "tests" "\\.py$")
                  (("#!/usr/bin/env python3(\\.[0-9]+)?" _ minor-version)
                   (string-append "#!" python3 (if (string? minor-version)
                                                   minor-version
-                                                  "")))))
-             #t))
+                                                  ""))))
+               (substitute* "tests/test_primer.py"
+                 (("/bin/false") /bin/false)
+                 (("/bin/sleep") /bin/sleep)))))
          (add-after 'unpack 'disable-broken-tests
            (lambda* (#:key outputs inputs #:allow-other-keys)
              ;; Make installed package available for running the tests
              (setenv "PATH" (string-append (assoc-ref outputs "out") "/bin"
                                            ":" (getenv "PATH")))
 
-             ;; These tests are supposed to be skipped when the blackd
-             ;; dependencies are missing, but this doesn't quite work.
-             (substitute* "tests/test_black.py"
-               (("( *)class BlackDTestCase.*" match indent)
-                (string-append indent "@unittest.skip(\"no blackd deps\")\n"
-                               indent "class BlackDTestCase(unittest.TestCase):\n"))
-               (("web.Application") "False")
-               (("@unittest_run_loop") ""))
-
-             ;; Patching the above file breaks the self test
-             (substitute* "tests/test_black.py"
-               (("( *)def test_self" match indent)
-                (string-append indent "@unittest.skip(\"guix\")\n" match)))
-
-             (substitute* "tests/test_black.py"
-               (("( *)def test_python38" match indent)
-                (string-append indent "@unittest.skip(\"guix\")\n" match)))
-             #t)))))
-    (propagated-inputs
-     `(("python-click" ,python-click)
-       ("python-attrs" ,python-attrs)
-       ("python-appdirs" ,python-appdirs)
-       ("python-pathspec" ,python-pathspec)
-       ("python-mypy-extensions" ,python-mypy-extensions)
-       ("python-regex" ,python-regex)
-       ("python-toml" ,python-toml)
-       ("python-typed-ast" ,python-typed-ast)
-       ("python-typing-extensions" ,python-typing-extensions)))
-    (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)))
-    (home-page "https://github.com/ambv/black")
+             ;; The source formatting test fails because we patch various
+             ;; files; just disable it.
+             (substitute* "tests/test_format.py"
+               (("def test_source_is_formatted" all)
+                (format #f "@pytest.mark.skip(\"Disabled by Guix.\")\n~a"
+                        all)))))
+         ;; Remove blackd, because it depends on python-aiohttp and
+         ;; python-aiohttp-cors.
+         (add-after 'unpack 'remove-entrypoint
+           (lambda _
+             (substitute* "setup.py"
+               (("\\s*\"blackd=blackd:patched_main \\[d\\]\",\n") "")
+               (("\"blackd\", ") ""))))
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests? (invoke "pytest" "-vv")))))))
+    (propagated-inputs
+     (list python-click
+           python-attrs
+           python-appdirs
+           python-pathspec
+           python-mypy-extensions
+           python-platformdirs
+           python-regex
+           python-tomli
+           python-typed-ast
+           python-typing-extensions))
+    (native-inputs
+     (list python-pytest python-pytest-aiohttp python-setuptools-scm))
+    (home-page "https://github.com/psf/black")
     (synopsis "The uncompromising code formatter")
     (description "Black is the uncompromising Python code formatter.")
     (license license:expat)))
@@ -4866,7 +5310,7 @@ matching of file paths.")
          "1drp5p697ni1xn5y2lbjpalgpkzy2i4cyxjj5pk4dxr0vk97dd7i"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-black" ,python-black)))
+     (list python-black))
     (home-page "https://github.com/wbolster/black-macchiato")
     (synopsis "Partial @code{python-black} formatting")
     (description
@@ -4899,27 +5343,28 @@ interested parties to subscribe to events, or \"signals\".")
 (define-public pelican
   (package
     (name "pelican")
-    (version "4.2.0")
+    (version "4.7.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pelican" version))
        (sha256
-        (base32
-         "0mp7hjyhs38ag1hyfcy882g400z0babqi72pnli46dqijfhajzmy"))))
+        (base32 "1sfckd3fhgnj305002fi3fdhkynric1ck7a5i8qany7k3vdsbasv"))))
     (build-system python-build-system)
-    (propagated-inputs
-     `(("python-blinker" ,python-blinker)
-       ("python-dateutil" ,python-dateutil)
-       ("python-docutils" ,python-docutils)
-       ("python-feedgenerator" ,python-feedgenerator)
-       ("python-jinja2" ,python-jinja2)
-       ("python-markdown" ,python-markdown)
-       ("python-pygments" ,python-pygments)
-       ("python-pytz" ,python-pytz)
-       ("python-six" ,python-six)
-       ("python-unidecode" ,python-unidecode)))
-    (home-page "https://getpelican.com/")
+    (inputs
+     (list python-blinker
+           python-dateutil
+           ;; Ignoring `guix lint` warning as python-docutils is used to support
+           ;; reStructuredText processing at runtime.
+           python-docutils
+           python-feedgenerator
+           python-jinja2
+           python-markdown
+           python-pygments
+           python-pytz
+           python-rich
+           python-unidecode))
+    (home-page "https://blog.getpelican.com/")
     (arguments
      `(;; XXX Requires a lot more packages to do unit tests :P
        #:tests? #f))
@@ -4966,38 +5411,41 @@ provides additional functionality on the produced Mallard documents.")
 (define-public python-cython
   (package
     (name "python-cython")
-    (version "0.29.22")
+    (version "0.29.24")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "Cython" version))
        (sha256
-        (base32 "01jl3544qwsi8lp6anbl55566xqkjd53x452i7m6gnfilv3q6syz"))))
+        (base32 "0hw4gs18rh4slij1fg252argxhraypld9apbqbl60230qc3lvw6d"))))
     (build-system python-build-system)
     ;; we need the full python package and not just the python-wrapper
     ;; because we need libpython3.3m.so
     (inputs
-     `(("python" ,python)))
+     (list python))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (add-before 'check 'set-HOME
            ;; some tests require access to "$HOME/.cython"
-           (lambda _ (setenv "HOME" "/tmp") #t))
+           (lambda _ (setenv "HOME" "/tmp")))
          (replace 'check
-           (lambda _
+           (lambda* (#:key tests? #:allow-other-keys)
              ;; Disable compiler optimizations to greatly reduce the running
              ;; time of the test suite.
              (setenv "CFLAGS" "-O0")
 
-             (invoke "python" "runtests.py" "-vv"
-                     "-j" (number->string (parallel-job-count))
-                     ;; XXX: On 32-bit architectures, running the parallel tests
-                     ;; fails on many-core systems, see
-                     ;; <https://github.com/cython/cython/issues/2807>.
-                     ,@(if (not (target-64bit?))
-                           '("-x" "run.parallel")
-                           '())))))))
+             (when tests?
+               (invoke "python" "runtests.py" "-vv"
+                       "-j" (number->string (parallel-job-count))
+                       ;; XXX: On 32-bit architectures, running the parallel tests
+                       ;; fails on many-core systems, see
+                       ;; <https://github.com/cython/cython/issues/2807>.
+                       ,@(if (not (target-64bit?))
+                             '("-x" "run.parallel")
+                             '())
+                       ;; This test fails when running on 24 cores.
+                       "-x" "cpp_stl_conversion")))))))
     (home-page "https://cython.org/")
     (synopsis "C extensions for Python")
     (description "Cython is an optimising static compiler for both the Python
@@ -5040,12 +5488,25 @@ writing C extensions for Python as easy as Python itself.")
                     ""))
                  #t)))))))))
 
-;; NOTE: when upgrading numpy please make sure that python-pandas and
-;; python-scipy still build, as these three packages are often used together.
-(define-public python-numpy
+(define-public python-cython-3
   (package
-    (name "python-numpy")
-    (version "1.17.3")
+    (inherit python-cython)
+    ;; Cython 3 is not officially released yet, so distinguish the name
+    ;; for now.
+    (name "python-cython-next")
+    (version "3.0.0a10")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "Cython" version))
+              (sha256
+               (base32
+                "17fqacrpis05w1rpi7d7sbimrk20xf8h6d3vrz5nf6ix3899abil"))))
+    (properties '())))
+
+(define-public python-numpy-next
+  (package
+    (name "python-numpy-next")
+    (version "1.21.3")
     (source
      (origin
        (method url-fetch)
@@ -5054,38 +5515,29 @@ writing C extensions for Python as easy as Python itself.")
              version "/numpy-" version ".tar.gz"))
        (sha256
         (base32
-         "1ak9dmjja0q90a7fsxli51ypcwssh8c4pb6f8wkrsnf2xgdk6dy9"))))
+         "0s6hy8828yr7fcjiwnym4l8lrknr21gqfkaiawsf86n0hd0a5fyh"))))
     (build-system python-build-system)
     (inputs
-     `(("openblas" ,openblas)))
+     (list openblas))
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-pytest" ,python-pytest)
-       ("gfortran" ,gfortran)))
+     (list python-cython python-hypothesis python-pytest
+           python-pytest-xdist gfortran))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-before 'build 'configure-blas-lapack
+         (add-before 'build 'configure-blas
            (lambda* (#:key inputs #:allow-other-keys)
              (call-with-output-file "site.cfg"
                (lambda (port)
                  (format port
-                         "[openblas]
+                         "\
+[openblas]
 libraries = openblas
 library_dirs = ~a/lib
 include_dirs = ~a/include
-
-# backslash-n to make emacs happy
-\n[lapack]
-lapack_libs = lapack
-library_dirs = ~a/lib
-include_dirs = ~a/include
 "
                          (assoc-ref inputs "openblas")
-                         (assoc-ref inputs "openblas")
-                         (assoc-ref inputs "lapack")
-                         (assoc-ref inputs "lapack"))))
-             #t))
+                         (assoc-ref inputs "openblas"))))))
          (add-before 'build 'fix-executable-paths
            (lambda* (#:key inputs #:allow-other-keys)
              ;; Make /gnu/store/...-bash-.../bin/sh the default shell,
@@ -5096,21 +5548,17 @@ include_dirs = ~a/include
              ;; Use "gcc" executable, not "cc".
              (substitute* "numpy/distutils/system_info.py"
                (("c = distutils\\.ccompiler\\.new_compiler\\(\\)")
-                "c = distutils.ccompiler.new_compiler(); c.set_executables(compiler='gcc',compiler_so='gcc',linker_exe='gcc',linker_so='gcc -shared')"))
-             #t))
-         ;; Tests can only be run after the library has been installed and not
-         ;; within the source directory.
-         (delete 'check)
-         (add-after 'install 'check
-           (lambda* (#:key outputs inputs #:allow-other-keys)
-             ;; Make installed package available for running the tests
-             (add-installed-pythonpath inputs outputs)
-             ;; Make sure "f2py" etc is found.
-             (setenv "PATH" (string-append (assoc-ref outputs "out") "/bin"
-                                           ":" (getenv "PATH")))
-             (with-directory-excursion "/tmp"
-               (invoke "python" "-c"
-                       "import numpy; numpy.test(verbose=2)")))))))
+                "c = distutils.ccompiler.new_compiler(); c.set_executables(compiler='gcc',compiler_so='gcc',linker_exe='gcc',linker_so='gcc -shared')"))))
+         (replace 'check
+           (lambda* (#:key tests? outputs inputs #:allow-other-keys)
+             (when tests?
+               ;; Make installed package available for running the tests.
+               (add-installed-pythonpath inputs outputs)
+               ;; Make sure "f2py" etc is found.
+               (setenv "PATH" (string-append (assoc-ref outputs "out") "/bin"
+                                             ":" (getenv "PATH")))
+               (invoke "./runtests.py"
+                       "-j" (number->string (parallel-job-count)))))))))
     (home-page "https://numpy.org")
     (synopsis "Fundamental package for scientific computing with Python")
     (description "NumPy is the fundamental package for scientific computing
@@ -5124,9 +5572,10 @@ capabilities.")
 ;; Numpy 1.16.x are the last versions that support Python 2.
 (define-public python2-numpy
   (let ((numpy (package-with-python2
-                (strip-python2-variant python-numpy))))
+                (strip-python2-variant python-numpy-next))))
     (package
       (inherit numpy)
+      (name "python-numpy")
       (version "1.16.5")
       (source (origin
                 (method url-fetch)
@@ -5135,7 +5584,43 @@ capabilities.")
                       version "/numpy-" version ".tar.gz"))
                 (sha256
                  (base32
-                  "0lg1cycxzi4rvvrd5zxinpdz0ni792fpx6xjd75z1923zcac8qrb")))))))
+                  "0lg1cycxzi4rvvrd5zxinpdz0ni792fpx6xjd75z1923zcac8qrb"))))
+      (arguments
+       (substitute-keyword-arguments (package-arguments numpy)
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'delete-failing-test
+               (lambda _
+                 ;; There's just one failing test here.
+                 (delete-file "numpy/linalg/tests/test_linalg.py")
+                 ;; ...and this one depends on the previous one.
+                 (delete-file "numpy/matrixlib/tests/test_matrix_linalg.py")))))))
+      (native-inputs
+       (list python2-cython python2-pytest gfortran)))))
+
+;; Needed by python-numba, see https://github.com/numba/numba/issues/7176
+(define-public python-numpy-1.20
+  (package
+    (inherit python-numpy-next)
+    (name "python-numpy")
+    (version "1.20.3")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/numpy/numpy/releases/download/v"
+                    version "/numpy-" version ".tar.gz"))
+              (sha256
+               (base32
+                "140zq9snx0di4id4g97vaw9zz8x2rfla5lp3a70j666f5030yd5p"))))
+    ;; 92 tests fail, many of them because parts of the temp file name
+    ;; accidentally ends up in a comparison.
+    (arguments
+     (substitute-keyword-arguments (package-arguments python-numpy-next)
+       ((#:tests? _ #t) #f)))))
+
+;; NOTE: when upgrading numpy please make sure that python-pandas and
+;; python-scipy still build, as these three packages are often used together.
+(define-public python-numpy python-numpy-1.20)
 
 ;; NOTE: NumPy 1.8 is packaged only for Python 2 because it is of
 ;; interest only for legacy code going back to NumPy's predecessor
@@ -5157,23 +5642,20 @@ capabilities.")
      (substitute-keyword-arguments (package-arguments python2-numpy)
        ((#:phases phases)
         `(modify-phases ,phases
-           (replace 'configure-blas-lapack
+           (replace 'configure-blas
              (lambda* (#:key inputs #:allow-other-keys)
                (call-with-output-file "site.cfg"
                  (lambda (port)
                    (format port
                            "[openblas]
-libraries = openblas,lapack
-library_dirs = ~a/lib:~a/lib
-include_dirs = ~a/include:~a/include
+libraries = openblas
+library_dirs = ~a/lib
+include_dirs = ~a/include
 "
                            (assoc-ref inputs "openblas")
-                           (assoc-ref inputs "lapack")
-                           (assoc-ref inputs "openblas")
-                           (assoc-ref inputs "lapack"))))
-               #t))))))
+                           (assoc-ref inputs "openblas"))))))))))
     (native-inputs
-     `(("python2-nose" ,python2-nose)))
+     (list python2-nose))
     (description "NumPy is the fundamental package for scientific computing
 with Python.  It contains among other things: a powerful N-dimensional array
 object, sophisticated (broadcasting) functions, tools for integrating C/C++
@@ -5217,28 +5699,24 @@ objects.")
          "05qjycgxp3p2f9n6lmic68sxmsyvgnnlyl4z9w7dl9s56jphaiix"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-networkx" ,python-networkx)
-       ("python-numpy" ,python-numpy)))
+     (list python-networkx python-numpy))
     (home-page "https://github.com/gtaylor/python-colormath")
     (synopsis "Color math and conversion library")
     (description
      "This is a Python library for color math and conversions.")
     (license license:bsd-3)))
 
-(define-public python2-colormath
-  (package-with-python2 python-colormath))
-
 (define-public python-sparse
   (package
     (name "python-sparse")
-    (version "0.12.0")
+    (version "0.13.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "sparse" version))
        (sha256
         (base32
-         "05lmzckv69cvxavhdr36k803bgr5dl04cppglid1l880xswc759c"))))
+         "05ar1lhq1yy4nb78s7vpb1wz4ac4kj0r4lrd7yrf23kpmaacjpb8"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -5248,14 +5726,10 @@ objects.")
              (when tests?
                (invoke "python" "-m" "pytest" "-v")))))))
     (propagated-inputs
-     `(("python-numba" ,python-numba)
-       ("python-numpy" ,python-numpy)
-       ("python-scipy" ,python-scipy)))
+     (list python-numba python-numpy python-scipy))
     (native-inputs
-     `(("python-dask" ,python-dask)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-black" ,python-pytest-black)
-       ("python-pytest-cov" ,python-pytest-cov)))
+     (list python-dask python-pytest python-pytest-black
+           python-pytest-cov))
     (home-page "https://github.com/pydata/sparse/")
     (synopsis "Library for multi-dimensional sparse arrays")
     (description
@@ -5291,9 +5765,9 @@ depends on @code{scipy.sparse} for some computations.")
          (replace 'check
            (lambda _ (invoke "nosetests" "-v"))))))
     (propagated-inputs
-     `(("python-colormath" ,python-colormath)))
+     (list python-colormath))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (home-page "https://github.com/jsvine/spectra")
     (synopsis "Color scales and color conversion")
     (description
@@ -5310,9 +5784,6 @@ color scales, and color space conversion easy.  It has support for:
 @end enumerate\n")
     (license license:expat)))
 
-(define-public python2-spectra
-  (package-with-python2 python-spectra))
-
 (define-public python-pyspnego
   (package
     (name "python-pyspnego")
@@ -5335,12 +5806,9 @@ color scales, and color space conversion easy.  It has support for:
                       (when tests?
                         (invoke "pytest")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-mock" ,python-pytest-mock)))
+     (list python-pytest python-pytest-mock))
     (propagated-inputs
-     `(("python-cryptography" ,python-cryptography)
-       ("python-gssapi" ,python-gssapi)
-       ("python-ruamel.yaml" ,python-ruamel.yaml)))
+     (list python-cryptography python-gssapi python-ruamel.yaml))
     (home-page "https://github.com/jborean93/pyspnego")
     (synopsis "Python SPNEGO library")
     (description "The @code{pyspnego} Python library handles Negotiate, NTLM,
@@ -5361,16 +5829,16 @@ readable format.")
        ("pkg-config" ,pkg-config)
        ("python-sphinx" ,python-sphinx)
        ("python-numpydoc" ,python-numpydoc)
-       ("texlive" ,(texlive-union (list texlive-fonts-cm-super
+       ("texlive" ,(texlive-updmap.cfg (list texlive-cm-super
                                         texlive-fonts-ec
-                                        texlive-generic-ifxetex
+                                        texlive-generic-iftex
                                         texlive-pdftex
-                                        texlive-amsfonts/patched
+                                        texlive-amsfonts
                                         texlive-latex-capt-of
                                         texlive-latex-cmap
                                         texlive-latex-environ
                                         texlive-latex-eqparbox
-                                        texlive-latex-etoolbox
+                                        texlive-etoolbox
                                         texlive-latex-expdlist
                                         texlive-latex-fancyhdr
                                         texlive-latex-fancyvrb
@@ -5379,11 +5847,11 @@ readable format.")
                                         texlive-latex-framed
                                         texlive-latex-geometry
                                         texlive-latex-graphics
-                                        texlive-latex-hyperref
+                                        texlive-hyperref
                                         texlive-latex-mdwtools
                                         texlive-latex-multirow
                                         texlive-latex-needspace
-                                        texlive-latex-oberdiek
+                                        texlive-oberdiek
                                         texlive-latex-parskip
                                         texlive-latex-preview
                                         texlive-latex-tabulary
@@ -5392,7 +5860,7 @@ readable format.")
                                         texlive-latex-trimspaces
                                         texlive-latex-ucs
                                         texlive-latex-upquote
-                                        texlive-latex-url
+                                        texlive-url
                                         texlive-latex-varwidth
                                         texlive-latex-wrapfig)))
        ("texinfo" ,texinfo)
@@ -5427,7 +5895,7 @@ readable format.")
                     (sphinx-theme-checkout (assoc-ref inputs scipy-sphinx-theme))
                     (pyver ,(string-append "PYVER=")))
 
-               ;; FIXME: this is needed to for texlive-union to generate
+               ;; FIXME: this is needed to for texlive-updmap.cfg to generate
                ;; fonts, which are not found.
                (setenv "HOME" "/tmp")
 
@@ -5464,22 +5932,20 @@ readable format.")
 (define-public python-pygit2
   (package
     (name "python-pygit2")
-    (version "1.6.0")
+    (version "1.7.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pygit2" version))
        (sha256
-        (base32 "0qjd5aqpmla64da4pb47vdnrmnqdbn7248a4fzs7f5q1ax7fmb3s"))))
+        (base32 "0p8n25bijirxh31cv99vd1mkdsvpcs6z6441wz1fqva3b2as5ynp"))))
     (build-system python-build-system)
     (arguments
      '(#:tests? #f))            ; tests don't run correctly in our environment
     (propagated-inputs
-     `(("python-cached-property" ,python-cached-property)
-       ("python-cffi" ,python-cffi)
-       ("libgit2" ,libgit2)))
+     (list python-cached-property python-cffi libgit2))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/libgit2/pygit2")
     (synopsis "Python bindings for libgit2")
     (description "Pygit2 is a set of Python bindings to the libgit2 shared
@@ -5527,7 +5993,8 @@ humans, and implementation simplicity.")
                         (substitute* "wmctrl.py"
                           (("'wmctrl")
                            (string-append "'" wmctrl "/bin/wmctrl")))))))))
-    (inputs `(("wmctrl" ,wmctrl)))
+    (inputs (list wmctrl))
+    (propagated-inputs (list python-attrs))
     (home-page "https://github.com/antocuni/wmctrl")
     (synopsis "Tool to programmatically control Xorg windows")
     (description "This package provides a library for programmatically
@@ -5589,12 +6056,9 @@ module from the standard Python library.")
                         "not interaction_restores_previous_sigint_handler "
                         "and not python_m_pdb_uses_pdbpp"))))))))
     (propagated-inputs
-     `(("python-fancycompleter" ,python-fancycompleter)
-       ("python-pygments" ,python-pygments)
-       ("python-wmctrl" ,python-wmctrl)))
+     (list python-fancycompleter python-pygments python-wmctrl))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-pytest python-setuptools-scm))
     (home-page "https://github.com/pdbpp/pdbpp")
     (synopsis "Drop-in replacement for pdb")
     (description "Pdb++ is a drop-in replacement for @code{pdb}.  It
@@ -5621,7 +6085,7 @@ includes the following improvements compared to @code{pdb}:
         (base32 "1555wbgr5spj8xflrs4mwsrdmba2f9s72nk50xzqk9ghxaxdvy6a"))))
     (build-system python-build-system)
     (inputs
-     `(("poppler" ,poppler)))
+     (list poppler))
     (home-page "https://github.com/jalan/pdftotext")
     (synopsis "Simple PDF text extraction")
     (description "Pdftotext is a Python library of PDF text extraction.")
@@ -5645,7 +6109,7 @@ includes the following improvements compared to @code{pdb}:
                     (lambda* (#:key tests? #:allow-other-keys)
                       (when tests?
                         (invoke "make" "test")))))))
-    (native-inputs `(("python-pytest" ,python-pytest)))
+    (native-inputs (list python-pytest))
     (home-page "https://github.com/mitsuhiko/pluginbase")
     (synopsis "Simple but flexible plugin system for Python")
     (description "PluginBase is a library useful in the development of
@@ -5665,7 +6129,7 @@ flexible plugin systems in Python.")
          "000ypfns5x72b41w5f9pk6k3jnr35scliqfbvmilyvv0178005i8"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/podhmo/python-node-semver")
     (synopsis "Python port of node-semver")
     (description "This module provides a Python version of node-semver, a
@@ -5704,77 +6168,32 @@ parse and apply unified diffs.  It has features such as:
 @end itemize")
     (license license:expat)))
 
-(define-public python-pyparsing
-  (package
-    (name "python-pyparsing")
-    (version "2.4.6")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "pyparsing" version))
-       (sha256
-        (base32 "17wn5zlijc9m9zj26gy3f541y7smpj8rfhl51d025c2gm210b0sc"))))
-    (build-system python-build-system)
-    (outputs '("out" "doc"))
-    (arguments
-     `(#:tests? #f ; no test target
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'install 'install-doc
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((doc (string-append (assoc-ref outputs "doc")
-                                        "/share/doc/" ,name "-" ,version))
-                    (html-doc (string-append doc "/html"))
-                    (examples (string-append doc "/examples")))
-               (mkdir-p html-doc)
-               (mkdir-p examples)
-               (for-each
-                (lambda (dir tgt)
-                  (map (lambda (file)
-                         (install-file file tgt))
-                       (find-files dir ".*")))
-                (list "docs" "htmldoc" "examples")
-                (list doc html-doc examples))
-               #t))))))
-    (home-page "https://github.com/pyparsing/pyparsing")
-    (synopsis "Python parsing class library")
-    (description
-     "The pyparsing module is an alternative approach to creating and
-executing simple grammars, vs. the traditional lex/yacc approach, or the use
-of regular expressions.  The pyparsing module provides a library of classes
-that client code uses to construct the grammar directly in Python code.")
-    (license license:expat)))
-
-(define-public python2-pyparsing
-  (package-with-python2 python-pyparsing))
-
-(define-public python-pyparsing-2.4.7
-  (package
-    (inherit python-pyparsing)
-    (version "2.4.7")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "pyparsing" version))
-       (sha256
-        (base32 "1hgc8qrbq1ymxbwfbjghv01fm3fbpjwpjwi0bcailxxzhf3yq0y2"))))))
-
 (define-public python-numpydoc
   (package
     (name "python-numpydoc")
-    (version "0.8.0")
+    (version "1.1.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "numpydoc" version))
        (sha256
         (base32
-         "1zazxg3m8j4fksv3f7v7vpf4bj9qb1vj3r326am0vdip141vzx31"))))
+         "13j4fvy2p7lc8sn00sxvs0jb19vicaznfgx4cphv9jgxgz5xcvy3"))))
     (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "pytest" "-v" "numpydoc/tests"
+                       ;; TODO: unclear why these fail.
+                       "-k" "not test_MyClass and not test_my_function")))))))
     (propagated-inputs
-     `(("python-sphinx" ,python-sphinx)))
+     (list python-sphinx))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-matplotlib python-pytest python-pytest-cov))
     (home-page "https://pypi.org/project/numpydoc/")
     (synopsis
      "Numpy's Sphinx extensions")
@@ -5787,6 +6206,15 @@ that client code uses to construct the grammar directly in Python code.")
   (let ((base (package-with-python2
                (strip-python2-variant python-numpydoc))))
     (package/inherit base
+      ;; This is the last version to support Python 2
+      (version "0.9.1")
+      (source
+       (origin
+         (method url-fetch)
+         (uri (pypi-uri "numpydoc" version))
+         (sha256
+          (base32
+           "09x6l1a4dcvj7001bvcmcayg1nwqwhaxlwbp6kzj9qrk57lqx3z0"))))
       (propagated-inputs
        `(("python2-jinja2" ,python2-jinja2)
          ,@(package-propagated-inputs base))))))
@@ -5805,7 +6233,7 @@ that client code uses to construct the grammar directly in Python code.")
     (build-system python-build-system)
     (arguments `(#:tests? #f))          ; no tests included
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (home-page "https://github.com/pydata/numexpr")
     (synopsis "Fast numerical expression evaluator for NumPy")
     (description
@@ -5836,7 +6264,7 @@ transcendental functions).")
      ;; Enable this for the next release which uses 'python-pytest'.
      '(#:tests? #f))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://matplotlib.org/cycler/")
     (synopsis "Composable keyword argument iterator")
     (description
@@ -5865,9 +6293,9 @@ To address this and enable easy cycling over arbitrary @code{kwargs}, the
         (base32 "0x7nkphr6g5ql5fvgss8l56rgiyjgh6fm8zzs73i94ci9wzlm63w"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -5897,8 +6325,7 @@ convert between colorspaces like sRGB, XYZ, CIEL*a*b*, CIECAM02, CAM02-UCS, etc.
     (arguments
      `(#:tests? #f))                    ;no test suite
     (propagated-inputs
-     `(("python-protobuf" ,python-protobuf)
-       ("python-pyhamcrest" ,python-pyhamcrest)))
+     (list python-protobuf python-pyhamcrest))
     (home-page "https://github.com/dayfine/proto-matcher")
     (synopsis "PyHamcrest test matchers for protocol buffers")
     (description "This package provides the following PyHamcrest test
@@ -5925,21 +6352,22 @@ comparison.
 (define-public python-matplotlib
   (package
     (name "python-matplotlib")
-    (version "3.1.2")
+    (version "3.5.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "matplotlib" version))
        (sha256
-        (base32 "1nmshfqh7wyg15i16hx1yiylcvzkws29ivn66n3i0wyqwcpjr3lf"))
-       (patches
-        (search-patches "python-matplotlib-run-under-wayland-gtk3.patch"))))
+        (base32 "076f8qi265x8jy89c03r3vv5h4is4ir5mawwrrrpp96314783sdj"))))
     (build-system python-build-system)
-    (propagated-inputs ; the following packages are all needed at run time
+    (propagated-inputs     ; the following packages are all needed at run time
      `(("python-cycler" ,python-cycler)
+       ("python-fonttools" ,python-fonttools)
        ("python-kiwisolver" ,python-kiwisolver)
+       ("python-packaging" ,python-packaging)
        ("python-pyparsing" ,python-pyparsing)
        ("python-pygobject" ,python-pygobject)
+       ("python-certifi" ,python-certifi)
        ("gobject-introspection" ,gobject-introspection)
        ("python-tkinter" ,python "tk")
        ("python-dateutil" ,python-dateutil)
@@ -5947,6 +6375,7 @@ comparison.
        ("python-pillow" ,python-pillow)
        ("python-pytz" ,python-pytz)
        ("python-six" ,python-six)
+       ("python-wxpython" ,python-wxpython)
        ;; From version 1.4.0 'matplotlib' makes use of 'cairocffi' instead of
        ;; 'pycairo'. However, 'pygobject' makes use of a 'pycairo' 'context'
        ;; object. For this reason we need to import both libraries.
@@ -5954,96 +6383,92 @@ comparison.
        ("python-pycairo" ,python-pycairo)
        ("python-cairocffi" ,python-cairocffi)))
     (inputs
-     `(("libpng" ,libpng)
-       ("freetype" ,freetype)
-       ("cairo" ,cairo)
-       ("glib" ,glib)
-       ;; FIXME: Add backends when available.
-       ;("python-wxpython" ,python-wxpython)
-       ("tcl" ,tcl)
-       ("tk" ,tk)))
+     (list libpng
+           freetype
+           qhull
+           cairo
+           glib
+           tcl
+           tk))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("python-pytest" ,python-pytest)
-       ("python-mock" ,python-mock)
-       ("unzip" ,unzip)
-       ("jquery-ui"
-        ,(origin
-           (method url-fetch)
-           (uri "https://jqueryui.com/resources/download/jquery-ui-1.12.1.zip")
-           (sha256
-            (base32
-             "0kb21xf38diqgxcdi1z3s9ssq36pldvyqxy56hn6pcva6rs3c8zq"))))))
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         ;; XXX We disable all image comparison tests because we're using a
-         ;; newer version of FreeType than matplotlib expects.  This leads to
-         ;; minor differences throughout the tests.
-         (add-after 'unpack 'fix-and-disable-failing-tests
-           (lambda _
-             (substitute* (append (find-files "lib/matplotlib/tests/"
-                                              "test_.*\\.py$")
-                                  (find-files "lib/mpl_toolkits/tests"
-                                              "test_.*\\.py$"))
-               (("^from matplotlib" match)
-                (string-append "import pytest\n" match))
-               (("( *)@image_comparison" match indent)
-                (string-append indent
-                               "@pytest.mark.skip(reason=\"unknown minor image differences\")\n"
-                               match)))
-             (substitute* "lib/matplotlib/tests/test_animation.py"
-               (("/bin/sh") (which "sh")))
-             (for-each delete-file
-                       ;; test_normal_axes, test_get_tightbbox_polar
-                       '("lib/matplotlib/tests/test_axes.py"
-                         ;; We don't use the webagg backend and this test forces it.
-                         "lib/matplotlib/tests/test_backend_webagg.py"
-                         ;; test_outward_ticks
-                         "lib/matplotlib/tests/test_tightlayout.py"
-                         ;; test_hidden_axes fails with minor extent
-                         ;; differences, possibly due to the use of a
-                         ;; different version of FreeType.
-                         "lib/matplotlib/tests/test_constrainedlayout.py"
-                         ;; Fontconfig returns no fonts.
-                         "lib/matplotlib/tests/test_font_manager.py"))
-             #t))
-         (add-before 'install 'install-jquery-ui
-           (lambda* (#:key outputs inputs #:allow-other-keys)
-             (let* ((python-version (python-version
-                                      (assoc-ref inputs "python")))
-                    (dir (string-append (assoc-ref outputs "out")
-                                       "/lib/python" python-version "/site-packages"
-                                       "/matplotlib/backends/web_backend/")))
-               (mkdir-p dir)
-               (invoke "unzip"
-                       (assoc-ref inputs "jquery-ui")
-                       "-d" dir))
-             #t))
-         (replace 'check
-           (lambda* (#:key outputs inputs #:allow-other-keys)
-             (add-installed-pythonpath inputs outputs)
-             (invoke "python" "tests.py" "-v"
-                     "-m" "not network and not webagg")))
-         (add-before 'build 'configure-environment
-           (lambda* (#:key outputs inputs #:allow-other-keys)
-             (let ((cairo (assoc-ref inputs "cairo")))
-               ;; Setting this directory in the 'basedirlist' of 'setup.cfg'
-               ;; has not effect.
-               (setenv "LD_LIBRARY_PATH" (string-append cairo "/lib"))
-               (setenv "HOME" (getcwd))
-               ;; Fix rounding errors when using the x87 FPU.
-               (when (string-prefix? "i686" ,(%current-system))
-                 (setenv "CFLAGS" "-ffloat-store"))
-               (call-with-output-file "setup.cfg"
-                 (lambda (port)
-                   (format port "[directories]~%
-basedirlist = ~a,~a~%
-[packages]~%
-tests = True~%"
-                        (assoc-ref inputs "tcl")
-                        (assoc-ref inputs "tk")))))
-             #t)))))
+       ("python-pytest-timeout" ,python-pytest-timeout)
+       ("python-pytest-xdist" ,python-pytest-xdist)
+       ("python-setuptools-scm" ,python-setuptools-scm)
+       ("python-setuptools-scm-git-archive" ,python-setuptools-scm-git-archive)))
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-before 'build 'pretend-version
+            ;; The version string is usually derived via setuptools-scm, but
+            ;; without the git metadata available, the version string is set to
+            ;; '0.0.0'.
+            (lambda _
+              (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version)))
+          (add-after 'unpack 'fix-and-disable-failing-tests
+            ;; XXX: Disable all image comparison tests because we're using a
+            ;; newer version of FreeType than matplotlib expects.  This leads
+            ;; to minor differences throughout the tests.
+            (lambda _
+              (substitute* (append (find-files "lib/matplotlib/tests/"
+                                               "test_.*\\.py$")
+                               (find-files "lib/mpl_toolkits/tests"
+                                           "test_.*\\.py$"))
+                (("^from matplotlib" match)
+                 (string-append "import pytest\n" match))
+                (("( *)@([^_]+_)*(image_comparison|check_figures_equal)" match
+                  indent)
+                 (string-append indent "@pytest.mark.skip(\
+reason=\"unknown minor image differences\")\n" match)))
+              (substitute* "lib/matplotlib/tests/test_animation.py"
+                (("/bin/sh") (which "sh")))
+              (for-each delete-file
+                        ;; test_normal_axes, test_get_tightbbox_polar
+                        '("lib/matplotlib/tests/test_axes.py"
+                          "lib/matplotlib/tests/test_polar.py"
+                          ;; We don't use the webagg backend and this test
+                          ;; forces it.
+                          "lib/matplotlib/tests/test_backend_webagg.py"
+                          ;; test_outward_ticks
+                          "lib/matplotlib/tests/test_tightlayout.py"
+                          ;; test_hidden_axes fails with minor extent
+                          ;; differences, possibly due to the use of a
+                          ;; different version of FreeType.
+                          "lib/matplotlib/tests/test_constrainedlayout.py"
+                          ;; Fontconfig returns no fonts.
+                          "lib/matplotlib/tests/test_font_manager.py"))))
+          (add-before 'build 'configure-environment
+            (lambda* (#:key inputs #:allow-other-keys)
+              ;; Fix rounding errors when using the x87 FPU.
+              (when (string-prefix? "i686" #$(%current-system))
+                (setenv "CFLAGS" "-ffloat-store"))
+              (call-with-output-file "mplsetup.cfg"
+                (lambda (port)
+                  (format port "\
+[libs]
+system_freetype = true
+system_qhull = true
+
+[rc_options]
+backend=Agg
+
+[directories]
+basedirlist = ~a,~a
+
+[packages]
+tests = True~%" (assoc-ref inputs "tcl") (assoc-ref inputs "tk"))))))
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                ;; Step out of the source directory to avoid interference.
+                (with-directory-excursion "/tmp"
+                  ;; Run the installed tests, which is what we want since not
+                  ;; everything gets built in the source directory.
+                  (invoke "pytest"
+                          "-n" (number->string (parallel-job-count))
+                          "-m" "not network" "--pyargs" "matplotlib"))))))))
     (home-page "https://matplotlib.org/")
     (synopsis "2D plotting library for Python")
     (description
@@ -6058,46 +6483,47 @@ toolkits.")
 (define-public python2-matplotlib
   (let ((matplotlib (package-with-python2
                      (strip-python2-variant python-matplotlib))))
-    (package (inherit matplotlib)
-      (version "2.2.4")
+    (package/inherit matplotlib
+      (version "2.2.5")
       (source
        (origin
          (method url-fetch)
          (uri (pypi-uri "matplotlib" version))
          (sha256
           (base32
-           "09i1gnrra1590brc1f8d5rh2zvnknmfgzp613ab0462qkrwj15h2"))))
+           "1sk05fdai9rw35l983rw2ymvz0nafs7szs7yz4nxrpyr1j27l0x3"))))
       (arguments
        (substitute-keyword-arguments (package-arguments matplotlib)
          ((#:phases phases)
-          `(modify-phases ,phases
-             (replace 'install-jquery-ui
-               (lambda* (#:key outputs inputs #:allow-other-keys)
-                 (let ((dir (string-append (assoc-ref outputs "out")
-                                           "/lib/python2.7/site-packages/"
-                                           "matplotlib/backends/web_backend/")))
-                   (mkdir-p dir)
-                   (invoke "unzip"
-                           (assoc-ref inputs "jquery-ui")
-                           "-d" dir))
-                 #t))
-             (delete 'fix-and-disable-failing-tests)
-             (delete 'check))))) ; These tests weren't run the the past.
-      ;; Make sure to use special packages for Python 2 instead
-      ;; of those automatically rewritten by package-with-python2.
+          #~(modify-phases #$phases
+              (add-after 'install 'create-init-file
+                (lambda _
+                  (with-output-to-file
+                      (string-append
+                       #$output
+                       "/lib/python2.7/site-packages/mpl_toolkits/__init__.py")
+                    (lambda _ (display "")))))
+              (delete 'fix-and-disable-failing-tests)
+              (delete 'check)))))      ; These tests weren't run the the past.
+      (native-inputs
+       `(("pkg-config" ,pkg-config)))
       (propagated-inputs
-       `(("python2-pycairo" ,python2-pycairo)
-         ("python2-backports-functools-lru-cache"
-          ,python2-backports-functools-lru-cache)
+       `(("gobject-introspection" ,gobject-introspection)
+         ("python2-backports-functools-lru-cache" ,python2-backports-functools-lru-cache)
+         ("python2-certifi" ,python2-certifi)
+         ("python2-cycler" ,python2-cycler)
+         ("python2-dateutil" ,python2-dateutil)
          ("python2-functools32" ,python2-functools32)
+         ("python2-kiwisolver" ,python2-kiwisolver)
+         ("python2-numpy" ,python2-numpy)
+         ("python2-pillow" ,python2-pillow)
+         ("python2-pycairo" ,python2-pycairo)
          ("python2-pygobject-2" ,python2-pygobject-2)
+         ("python2-pyparsing" ,python2-pyparsing)
+         ("python2-pytz" ,python2-pytz)
+         ("python2-six" ,python2-six)
          ("python2-subprocess32" ,python2-subprocess32)
-         ("python2-tkinter" ,python-2 "tk")
-         ,@(fold alist-delete (package-propagated-inputs matplotlib)
-                 '("python-cairocffi"
-                   "python-pycairo"
-                   "python-pygobject"
-                   "python-tkinter")))))))
+         ("python2-tkinter" ,python-2 "tk"))))))
 
 (define-public python-matplotlib-documentation
   (package
@@ -6116,7 +6542,7 @@ toolkits.")
        ("python-ipykernel" ,python-ipykernel)
        ("python-mock" ,python-mock)
        ("graphviz" ,graphviz)
-       ("texlive" ,(texlive-union (list texlive-amsfonts/patched
+       ("texlive" ,(texlive-updmap.cfg (list texlive-amsfonts
                                         texlive-latex-amsmath
                                         texlive-latex-enumitem
                                         texlive-latex-expdlist
@@ -6128,8 +6554,8 @@ toolkits.")
                                         texlive-pdftex
 
                                         texlive-fonts-ec
-                                        texlive-fonts-adobe-times
-                                        texlive-fonts-txfonts)))
+                                        texlive-times
+                                        texlive-txfonts)))
        ("texinfo" ,texinfo)
        ,@(package-native-inputs python-matplotlib)))
     (arguments
@@ -6142,9 +6568,7 @@ toolkits.")
          (replace 'build
            (lambda _
              (chdir "doc")
-             (setenv "PYTHONPATH"
-                     (string-append (getenv "PYTHONPATH")
-                                    ":" (getcwd) "/../examples/units"))
+             (setenv "PYTHONPATH" "../examples/units")
              (substitute* "conf.py"
                ;; Don't use git.
                (("^SHA = check_output.*")
@@ -6179,13 +6603,35 @@ toolkits.")
                           "./matplotlib-figures")
                  (invoke "makeinfo" "--no-split"
                          "-o" "matplotlib.info" "matplotlib.texi"))
-               (install-file "build/texinfo/matplotlib.info" info))
-             #t)))))
+               (install-file "build/texinfo/matplotlib.info" info)))))))
     (home-page (package-home-page python-matplotlib))
     (synopsis "Documentation for the python-matplotlib package")
     (description (package-description python-matplotlib))
     (license (package-license python-matplotlib))))
 
+(define-public python-matplotlib-inline
+  (package
+    (name "python-matplotlib-inline")
+    (version "0.1.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "matplotlib-inline" version))
+       (sha256
+        (base32 "1vilzwj3xp00mxprmmn1hlafm3p23vn56s46kx3ra4qd5signjx0"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     (list python-matplotlib python-traitlets))
+    (arguments
+     ;; Tests disabled because of a circular dependency with ipython.
+     `(#:tests? #f))
+    (home-page "https://github.com/ipython/matplotlib-inline")
+    (synopsis "Inline Matplotlib backend for Jupyter")
+    (description
+     "This package provides a Matplotlib inline back-end for IPython and
+Jupyter.")
+    (license license:bsd-3)))
+
 (define-public python-matplotlib-venn
   (package
     (name "python-matplotlib-venn")
@@ -6200,11 +6646,9 @@ toolkits.")
     (build-system python-build-system)
     (arguments '(#:tests? #f)) ; tests are not included
     (propagated-inputs
-     `(("python-matplotlib" ,python-matplotlib)
-       ("python-numpy" ,python-numpy)
-       ("python-scipy" ,python-scipy)))
+     (list python-matplotlib python-numpy python-scipy))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://github.com/konstantint/matplotlib-venn")
     (synopsis "Plot area-proportional Venn diagrams")
     (description
@@ -6236,14 +6680,14 @@ three-way Venn diagrams in @code{matplotlib}.")
                    (invoke "python3" "pysnptools/test.py"))
                  #t))))))
     (propagated-inputs
-     `(("python-dill" ,python-dill)
-       ("python-h5py" ,python-h5py)
-       ("python-numpy" ,python-numpy)
-       ("python-pandas" ,python-pandas)
-       ("python-psutil" ,python-psutil)
-       ("python-scipy" ,python-scipy)))
+     (list python-dill
+           python-h5py
+           python-numpy
+           python-pandas
+           python-psutil
+           python-scipy))
     (native-inputs
-     `(("python-cython" ,python-cython)))
+     (list python-cython))
     (home-page "http://microsoftgenomics.github.io/PySnpTools/")
     (synopsis "Library for reading and manipulating genetic data")
     (description
@@ -6268,9 +6712,9 @@ operators such as union, intersection, and difference.")
         (base32 "0p8n2ljdacfixkiw092974dmhy4s1c0h032ii1z9kwi9h5h5rgmy"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (home-page "https://github.com/storpipfugl/pykdtree")
     (synopsis "Fast kd-tree implementation with OpenMP-enabled queries")
     (description
@@ -6296,8 +6740,7 @@ search in Python.")
            (lambda _
              (invoke "pytest" "-vv" "test.py"))))))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)))
+     (list python-mock python-pytest))
     (home-page "https://github.com/minrk/wurlitzer")
     (synopsis "Capture C-level output in context managers")
     (description
@@ -6379,7 +6822,7 @@ a simple netcat replacement with chaining support.")
            (lambda _
              (invoke "pytest" "-vv"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://pycodestyle.readthedocs.io/")
     (synopsis "Python style guide checker")
     (description "@code{pycodestyle} (formerly pep8) is a tool to check
@@ -6414,27 +6857,14 @@ Python code against some of the style conventions in
          "07ikq2c72kd263hpldw55y0px2l3g34hjk66ml9lryh1jv287qmf"))))
     (build-system python-build-system)
     (arguments
-     '(#:modules ((ice-9 ftw)
-                  (srfi srfi-1)
-                  (srfi srfi-26)
-                  (guix build utils)
-                  (guix build python-build-system))
-       #:phases (modify-phases %standard-phases
+     '(#:phases (modify-phases %standard-phases
                   (replace 'check
                     (lambda* (#:key tests? #:allow-other-keys)
                       (if tests?
-                          (begin
-                            (let ((libdir (find (cut string-prefix? "lib." <>)
-                                                (scandir "build"))))
-                              (setenv "PYTHONPATH"
-                                      (string-append "./build/" libdir ":"
-                                                     (getenv "PYTHONPATH")))
-                              (invoke "pytest" "-vv")))
-                          (format #t "test suite not run~%"))
-                      #t)))))
+                          (invoke "pytest" "-vv")
+                          (format #t "test suite not run~%")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)))
+     (list python-pytest python-pytest-cov))
     (home-page "https://github.com/aio-libs/multidict/")
     (synopsis "Multidict implementation")
     (description "Multidict is dict-like collection of key-value pairs
@@ -6444,29 +6874,19 @@ where key might be occurred more than once in the container.")
 (define-public python-orderedmultidict
   (package
     (name "python-orderedmultidict")
-    (version "1.0")
+    (version "1.0.1")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "orderedmultidict" version))
         (sha256
           (base32
-            "1idjbl933avgaadscrjw1np3xkvnz3phq0l8vw5qs0rqcjx9b65q"))))
+            "1bc2v0yflsxjyyjx4q9wqx0j3bvzcw9z87d5pz4iqac7bsxhn1q4"))))
     (build-system python-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-tests
-           (lambda _
-             ;; The package uses nosetest for running the tests.
-             ;; Adding this initfile allows to run the test suite
-             ;; without requiring nosetest.
-             (with-output-to-file "tests/__init__.py" newline)
-             #t)))))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (native-inputs
-     `(("python-pycodestyle" ,python-pycodestyle)))
+     (list python-flake8 python-pycodestyle))
     (home-page "https://github.com/gruns/orderedmultidict")
     (synopsis "Python Ordered Multivalue Dictionary - omdict")
     (description "This package contains a library for ordered multivalue
@@ -6475,9 +6895,6 @@ multiple values for the same key.  An ordered multivalue dictionary is a
 multivalue dictionary that retains the order of insertions and deletions.")
     (license license:unlicense)))
 
-(define-public python2-orderedmultidict
-  (package-with-python2 python-orderedmultidict))
-
 (define-public python-autopep8
   (package
     (name "python-autopep8")
@@ -6491,8 +6908,7 @@ multivalue dictionary that retains the order of insertions and deletions.")
          "1w6vh627vrmgfbvrdcxrc3k4gxcldrb2lpgxv9irkdds851qrzb0"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pycodestyle" ,python-pycodestyle)
-       ("python-toml" ,python-toml)))
+     (list python-pycodestyle python-toml))
     (home-page "https://github.com/hhatto/autopep8")
     (synopsis "Format Python code according to the PEP 8 style guide")
     (description
@@ -6510,14 +6926,14 @@ by pycodestyle.")
 (define-public python-distlib
   (package
     (name "python-distlib")
-    (version "0.3.0")
+    (version "0.3.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "distlib" version ".zip"))
        (sha256
         (base32
-         "08fyi2r246733vharl2yckw20rilci28r91mzrnnvcr638inw5if"))))
+         "1wdzv7fsjhrkhh1wfkarlhcwa8m00mgcpdsvknmf2qy8f9l13xpd"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -6533,7 +6949,7 @@ by pycodestyle.")
              ;; NOTE: Any value works, the variable just has to be present.
              (setenv "SKIP_ONLINE" "1")
              #t)))))
-    (native-inputs `(("unzip" ,unzip)))
+    (native-inputs (list unzip))
     (home-page "https://bitbucket.org/pypa/distlib")
     (synopsis "Distribution utilities")
     (description "Distlib is a library which implements low-level functions that
@@ -6541,19 +6957,6 @@ relate to packaging and distribution of Python software.  It is intended to be
 used as the basis for third-party packaging tools.")
     (license license:psfl)))
 
-;; TODO: Merge with 'python-distlib' on the next rebuild cycle.
-(define-public python-distlib/next
-  (package
-    (inherit python-distlib)
-    (version "0.3.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "distlib" version ".zip"))
-       (sha256
-        (base32
-         "1wdzv7fsjhrkhh1wfkarlhcwa8m00mgcpdsvknmf2qy8f9l13xpd"))))))
-
 (define-public python-distutils-extra
   (package
     (name "python-distutils-extra")
@@ -6622,7 +7025,7 @@ services for your Python modules and applications.")
          "1kjxh4gr651hpqkjfv89cfzr40hyvf3vjlda7mifiail83j7j07m"))))
     (build-system python-build-system)
     (home-page "https://www.decalage.info/python/olefileio")
-    (synopsis "Read and write Microsoft OLE2 files.")
+    (synopsis "Read and write Microsoft OLE2 files")
     (description
      "@code{olefile} can parse, read and write Microsoft OLE2 files (Structured
 Storage or Compound Document, Microsoft Office).  It is an improved version of
@@ -6632,6 +7035,27 @@ the OleFileIO module from PIL, the Python Image Library.")
 (define-public python2-olefile
   (package-with-python2 python-olefile))
 
+(define-public python-pypdf3
+  (package
+    (name "python-pypdf3")
+    (version "1.0.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "PyPDF3" version))
+       (sha256
+        (base32 "018hlq9q2qa96vw4j7ppq352znykldwy98h2w9qcpkvpi93sjqhc"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     (list python-tqdm))
+    (home-page "https://github.com/sfneal/PyPDF3")
+    (synopsis "Utility to read and write PDFs with Python")
+    (description "PyPDF3 is a pure-python PDF library capable of splitting,
+merging together, cropping, and transforming the pages of PDF files.  It can
+also add custom data, viewing options, and passwords to PDF files.  It can
+retrieve text and metadata from PDFs as well as merge entire files together.")
+    (license license:bsd-3)))
+
 (define-public python-pikepdf
   (package
     (name "python-pikepdf")
@@ -6646,17 +7070,16 @@ the OleFileIO module from PIL, the Python Image Library.")
     (arguments
      `(#:tests? #false))                ;require python-xmp-toolkit
     (native-inputs
-     `(("pybind11" ,pybind11)
-       ("python-setuptools" ,python-setuptools)
-       ("python-setuptools-scm" ,python-setuptools-scm/next)
-       ("python-setuptools-scm-git-archive" ,python-setuptools-scm-git-archive)
-       ("python-toml" ,python-toml)
-       ("python-wheel" ,python-wheel)))
+     (list pybind11
+           python-setuptools
+           python-setuptools-scm
+           python-setuptools-scm-git-archive
+           python-toml
+           python-wheel))
     (inputs
-     `(("qpdf" ,qpdf)))
+     (list qpdf))
     (propagated-inputs
-     `(("python-lxml" ,python-lxml)
-       ("python-pillow" ,python-pillow)))
+     (list python-lxml python-pillow))
     (home-page "https://github.com/pikepdf/pikepdf")
     (synopsis "Read and write PDFs with Python")
     (description
@@ -6666,27 +7089,31 @@ the OleFileIO module from PIL, the Python Image Library.")
 (define-public python-pillow
   (package
     (name "python-pillow")
-    (version "8.1.1")
+    (version "9.0.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "Pillow" version))
        (sha256
         (base32
-         "086g7nhv52wclrwnzbzs2x3nvyzs2hfq1bvgivsrp5f7r7wiiz7n"))))
+         "0gjry0yqryd2678sm47jhdnbghzxn5wk8pgyaqwr4qi7x5ijjvpf"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           (delete-file-recursively "src/thirdparty")))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (inputs
-     `(("freetype" ,freetype)
-       ("lcms"     ,lcms)
-       ("libjpeg"  ,libjpeg-turbo)
-       ("libtiff"  ,libtiff)
-       ("libwebp"  ,libwebp)
-       ("openjpeg" ,openjpeg)
-       ("zlib"     ,zlib)))
+     (list freetype
+           lcms
+           libjpeg-turbo
+           libtiff
+           libwebp
+           openjpeg
+           zlib))
     (propagated-inputs
-     `(("python-olefile" ,python-olefile)))
+     (list python-olefile))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -6696,14 +7123,12 @@ the OleFileIO module from PIL, the Python Image Library.")
                (("\\['/sbin/ldconfig', '-p'\\]") "['true']"))))
          (replace 'check
            (lambda* (#:key outputs inputs tests? #:allow-other-keys)
-             (if tests?
-               (begin
-                 (setenv "HOME" (getcwd))
-                 ;; Make installed package available for running the tests.
-                 (add-installed-pythonpath inputs outputs)
-                 (invoke "python" "selftest.py" "--installed")
-                 (invoke "python" "-m" "pytest" "-vv"))
-               #t))))))
+             (when tests?
+               (setenv "HOME" (getcwd))
+               ;; Make installed package available for running the tests.
+               (add-installed-pythonpath inputs outputs)
+               (invoke "python" "selftest.py" "--installed")
+               (invoke "python" "-m" "pytest" "-vv")))))))
     (home-page "https://python-pillow.org")
     (synopsis "Fork of the Python Imaging Library")
     (description
@@ -6713,7 +7138,8 @@ efficient internal representation, and fairly powerful image processing
 capabilities.  The core image library is designed for fast access to data
 stored in a few basic pixel formats.  It should provide a solid foundation for
 a general image processing tool.")
-    (properties `((python2-variant . ,(delay python2-pillow))))
+    (properties `((python2-variant . ,(delay python2-pillow))
+                  (cpe-name . "pillow")))
     (license (license:x11-style
               "http://www.pythonware.com/products/pil/license.htm"
               "The PIL Software License"))))
@@ -6730,7 +7156,11 @@ a general image processing tool.")
         (uri (pypi-uri "Pillow" version))
         (sha256
          (base32
-          "0l5rv8jkdrb5q846v60v03mcq64yrhklidjkgwv6s1pda71g17yv")))))))
+          "0l5rv8jkdrb5q846v60v03mcq64yrhklidjkgwv6s1pda71g17yv"))))
+     (arguments
+      (substitute-keyword-arguments (package-arguments python-pillow)
+        ;; FIXME: One of the tests is failing.
+        ((#:tests? _ #f) #f))))))
 
 (define-public python-pillow-2.9
   (package
@@ -6752,7 +7182,7 @@ a general image processing tool.")
   (package
     (inherit python-pillow)
     (name "python-pillow-simd")
-    (version "7.1.2")
+    (version "9.0.0")
     ;; The PyPI tarball does not include test files.
     (source
      (origin
@@ -6762,20 +7192,10 @@ a general image processing tool.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0w11np4cybamry3jsg70x747c79zwjzfq0xiprfp6c186rd6nzp9"))))
-    (arguments
-     (substitute-keyword-arguments
-         (package-arguments python-pillow)
-       ((#:phases phases)
-        `(modify-phases ,phases
-           (add-after 'unpack 'make-tests-writable
-             (lambda _
-               (for-each make-file-writable (find-files "Tests"))
-               #t))))))
+        (base32 "0pxvfyzxzgk18mhm7xh5n19s88bpwaah5cm60p4c239phspzprdb"))))
     (inputs
-     `(("libraqm" ,libraqm)
-       ("libimagequant" ,libimagequant)
-       ,@(package-inputs python-pillow)))
+     (modify-inputs (package-inputs python-pillow)
+       (prepend libraqm libimagequant)))
     (home-page "https://github.com/uploadcare/pillow-simd")
     (synopsis "Fork of the Python Imaging Library (Pillow)")
     (description "This package is a fork of Pillow which adds support for SIMD
@@ -6829,31 +7249,34 @@ def customize_build(EXTENSIONS, OPTIONS):
     del EXTENSIONS['zfp']
     del EXTENSIONS['zopfli']
     OPTIONS['cythonize']
-")))
-             #t)))))
+")))))
+         ;; XXX: The installed scripts import packages that depend on
+         ;; this package; disable import check to avoid the cycle.
+         (delete 'sanity-check))))
     (inputs
-      `(("c-blosc" ,c-blosc)
-        ("giflib" ,giflib)
-        ("google-brotli" ,google-brotli)
-        ("libjpeg-turbo" ,libjpeg-turbo)
-        ("libpng" ,libpng)
-        ("libtiff" ,libtiff)
-        ("libwebp" ,libwebp)
-        ("lz4" ,lz4)
-        ("snappy" ,snappy)
-        ("xz" ,xz)
-        ("zlib" ,zlib)
-        ("zstd" ,zstd "lib")))
-    (propagated-inputs
-      `(("python-numpy" ,python-numpy)))
+      (list c-blosc
+            giflib
+            brotli
+            libjpeg-turbo
+            libpng
+            libtiff
+            libwebp
+            lz4
+            snappy
+            xz
+            zlib
+            `(,zstd "lib")))
+    (propagated-inputs
+      ;; For the Python library.
+      (list python-numpy))
     (native-inputs
       ;; For building.
-      `(("python-cython" ,python-cython)
-        ;; For testing. Incomplete.
-        ;("python-numcodecs" ,python-numcodecs)
-        ;("python-zarr" ,python-zarr)
-        ;("python-pytest" ,python-pytest)
-        ))
+      (list python-cython
+            ;; For testing. Incomplete.
+            ;("python-numcodecs" ,python-numcodecs)
+            ;("python-zarr" ,python-zarr)
+            ;("python-pytest" ,python-pytest)
+            ))
     (home-page "https://www.lfd.uci.edu/~gohlke/")
     (synopsis
       "Image transformation, compression, and decompression codecs")
@@ -6863,6 +7286,27 @@ buffer transformation, compression, and decompression functions for use in the
 tifffile, czifile, and other scientific image input/output modules.")
     (license license:bsd-3)))
 
+(define-public python-executing
+  (package
+    (name "python-executing")
+    (version "0.8.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "executing" version))
+       (sha256
+        (base32 "08q0xh9fd8k41sqpp23q6fb9bf7yj4y2q6sv30pj36vvk8pg8fy2"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:tests? #f))                    ; TODO: tests require python-asttokens
+    (native-inputs
+     (list python-setuptools-scm python-toml))
+    (home-page "https://github.com/alexmojaki/executing")
+    (synopsis "Get information about what a Python frame is currently doing")
+    (description "This package lets you get information about what a frame is
+currently doing, particularly the AST node being executed.")
+    (license license:expat)))
+
 (define-public python-roifile
   (package
     (name "python-roifile")
@@ -6877,7 +7321,7 @@ tifffile, czifile, and other scientific image input/output modules.")
     (build-system python-build-system)
     (arguments `(#:tests? #f)) ; there are none
     (propagated-inputs
-      `(("python-numpy" ,python-numpy)))
+      (list python-numpy))
     (home-page "https://www.lfd.uci.edu/~gohlke/")
     (synopsis "Read and write ImageJ ROI format")
     (description "Roifile is a Python library to read, write, create, and plot
@@ -6900,8 +7344,7 @@ regions of interest, geometric shapes, paths, text, etc for image overlays.")
     ;; Tests require lfdfiles, which depends on tifffile
     (arguments `(#:tests? #f))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-imagecodecs" ,python-imagecodecs)))
+     (list python-numpy python-imagecodecs))
     (home-page "https://www.lfd.uci.edu/~gohlke/")
     (synopsis "Read and write TIFF(r) files")
     (description "This package lets you read image and metadata from many
@@ -6931,10 +7374,8 @@ numpy arrays to TIFF, BigTIFF, and ImageJ hyperstack compatible files.")
     (arguments
      `(#:tests? #f)) ; No tests exist, despite a test dependency on pytest.
     (propagated-inputs
-     `(("python-click" ,python-click)
-       ("python-numpy" ,python-numpy)
-       ("python-tifffile" ,python-tifffile)))
-    (native-inputs `(("python-cython" ,python-cython)))
+     (list python-click python-numpy python-tifffile))
+    (native-inputs (list python-cython))
     (home-page "https://www.lfd.uci.edu/~gohlke/")
     (synopsis "Work with LFD data files")
     (description
@@ -6968,11 +7409,9 @@ experimental data and metadata at the Laboratory for Fluorescence Dynamics.")
                    (invoke "pytest" "-vv"))
                  #t))))))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-pillow" ,python-pillow)
-       ("python-psutil" ,python-psutil)))
+     (list python-numpy python-pillow python-psutil))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://imageio.github.io/")
     (synopsis "Library for reading and writing a wide range of image data")
     (description
@@ -6995,7 +7434,7 @@ data, and scientific formats.")
     (outputs '("out" "doc"))
     (build-system python-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -7052,14 +7491,14 @@ formulas and hyperlinks to multiple worksheets in an Excel 2007+ XLSX file.")
 (define-public python-pywavelets
   (package
     (name "python-pywavelets")
-    (version "1.1.1")
+    (version "1.2.0")
     (home-page "https://github.com/PyWavelets/pywt")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "PyWavelets" version))
               (sha256
                (base32
-                "1j88c0r4j1d4mb3f8qhz6nalyx21qrzmsm70rjngnkybd87v8r0s"))))
+                "13csbr6ls9q9ww53z2xwwsj0hpsz88rj2iwp623h0kmv8yq6kgbc"))))
     (build-system python-build-system)
     (arguments
      '(#:modules ((ice-9 ftw)
@@ -7077,10 +7516,10 @@ formulas and hyperlinks to multiple worksheets in an Excel 2007+ XLSX file.")
                (with-directory-excursion (string-append cwd "/build/" libdir)
                  (invoke "pytest" "-vv"))))))))
     (native-inputs
-     `(("python-matplotlib" ,python-matplotlib)          ;for tests
-       ("python-pytest" ,python-pytest)))
+     (list python-matplotlib ;for tests
+           python-pytest))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (synopsis "Wavelet transforms in Python")
     (description
      "PyWavelets is a library for wavelet transforms in Python.  Wavelets are
@@ -7113,7 +7552,7 @@ localized only in frequency instead of in time and frequency.")
              (setenv "HOME" "/tmp")
              #t)))))
     (inputs
-     `(("imagemagick" ,imagemagick)))
+     (list imagemagick))
     (home-page "https://github.com/dylanaraps/pywal")
     (synopsis "Color palette generator and applicator")
     (description
@@ -7122,6 +7561,27 @@ in an image.  It then applies the colors system-wide and on-the-fly in all of
 your favourite programs.")
     (license license:expat)))
 
+(define-public python-click-didyoumean
+  (package
+    (name "python-click-didyoumean")
+    (version "0.3.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "click-didyoumean" version))
+       (sha256
+        (base32 "0dc0xrmqbw0idpx843ahzzvivmvx3fcfsm3k54lnssyra7cg117i"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:tests? #f))              ; no tests in PyPI and no setup.py in github
+    (propagated-inputs
+     (list python-click))
+    (home-page "https://github.com/timofurrer/click-didyoumean")
+    (synopsis "Git-like did-you-mean feature in Click")
+    (description
+     "This plugin enables git-like did-you-mean feature in Click.")
+    (license license:expat)))
+
 (define-public python-pywinrm
   (package
     (name "python-pywinrm")
@@ -7135,13 +7595,10 @@ your favourite programs.")
          "10gabhhg3rgacd5ahmi2r128z99fzbrbx6mz1nnq0dxmhmn5rpjf"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-requests_ntlm" ,python-requests_ntlm)
-       ("python-xmltodict" ,python-xmltodict)
-       ("python-kerberos" ,python-kerberos)))
+     (list python-six python-requests_ntlm python-xmltodict
+           python-kerberos))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)))
+     (list python-mock python-pytest))
     (home-page "https://github.com/diyan/pywinrm/")
     (synopsis
      "Python library for Windows Remote Management (WinRM)")
@@ -7154,20 +7611,20 @@ any machine that can run Python.")
 (define-public python-xcffib
   (package
     (name "python-xcffib")
-    (version "0.6.0")
+    (version "0.11.1")
     (source
      (origin
       (method url-fetch)
       (uri (pypi-uri "xcffib" version))
       (sha256
        (base32
-        "04k91yxyb3pgc5lvxmivh8w71yjrap2g57yk3s73x4rm4nvjq51n"))))
+        "0nkglsm9nbhv238iagmmsjcz6lf1yfdvp5kmspphdj385vz9r50j"))))
     (build-system python-build-system)
     (inputs
-     `(("libxcb" ,libxcb)))
+     (list libxcb))
     (propagated-inputs
-     `(("python-cffi" ,python-cffi) ; used at run time
-       ("python-six" ,python-six)))
+     (list python-cffi ; used at run time
+           python-six))
     (arguments
      `(;; FIXME: Tests need more work. See ".travis.yml" in the repository.
        #:tests? #f
@@ -7177,7 +7634,8 @@ any machine that can run Python.")
            (lambda* (#:key inputs #:allow-other-keys)
              (let ((libxcb (assoc-ref inputs "libxcb")))
                (substitute* '("xcffib/__init__.py")
-                 (("^soname = \"") (string-append "soname = \"" libxcb "/lib/")))
+                 (("soname = ctypes.util.find_library.*xcb.*")
+                  (string-append "soname = \"" libxcb "/lib/libxcb.so\"\n")))
                #t)))
          (add-after 'install 'install-doc
            (lambda* (#:key outputs #:allow-other-keys)
@@ -7215,19 +7673,16 @@ support for Python 3 and PyPy.  It is based on cffi.")
     (build-system python-build-system)
     (outputs '("out" "doc"))
     (inputs
-     `(("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("gdk-pixbuf" ,gdk-pixbuf)
-       ("cairo" ,cairo)))
+     (list glib gtk+ gdk-pixbuf cairo))
     (native-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-runner" ,python-pytest-runner)
-       ("python-sphinx" ,python-sphinx)
-       ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)))
+     (list python-numpy
+           python-pytest
+           python-pytest-cov
+           python-pytest-runner
+           python-sphinx
+           python-sphinx-rtd-theme))
     (propagated-inputs
-     `(("python-xcffib" ,python-xcffib))) ; used at run time
+     (list python-xcffib)) ; used at run time
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -7240,22 +7695,16 @@ support for Python 3 and PyPy.  It is based on cffi.")
                (("filenames = \\(library_filename,\\) \\+ filenames")
                 "pass")
                (("libcairo.so.2")
-                (string-append (assoc-ref inputs "cairo")
-                               "/lib/libcairo.so.2")))
+                (search-input-file inputs "/lib/libcairo.so.2")))
              (substitute* "cairocffi/pixbuf.py"
                (("libgdk_pixbuf-2.0.so.0")
-                (string-append (assoc-ref inputs "gdk-pixbuf")
-                               "/lib/libgdk_pixbuf-2.0.so.0"))
+                (search-input-file inputs "/lib/libgdk_pixbuf-2.0.so.0"))
                (("libgobject-2.0.so.0")
-                (string-append (assoc-ref inputs "glib")
-                               "/lib/libgobject-2.0.so.0"))
+                (search-input-file inputs "/lib/libgobject-2.0.so.0"))
                (("libglib-2.0.so.0")
-                (string-append (assoc-ref inputs "glib")
-                               "/lib/libglib-2.0.so.0"))
+                (search-input-file inputs "/lib/libglib-2.0.so.0"))
                (("libgdk-3.so.0")
-                (string-append (assoc-ref inputs "gtk+")
-                               "/lib/libgdk-3.so.0")))
-             #t))
+                (search-input-file inputs "/lib/libgdk-3.so.0")))))
          (add-after 'unpack 'disable-linters
            ;; Their check fails; none of our business.
            (lambda _
@@ -7309,10 +7758,21 @@ PNG, PostScript, PDF, and SVG file output.")
 for the average programmer, and to popularize decorators usage giving examples
 of useful decorators, such as memoize, tracing, redirecting_stdout, locked,
 etc.  The core of this module is a decorator factory.")
-    (license license:expat)))
+    (license license:expat)
+    (properties `((python2-variant . ,(delay python2-decorator))))))
 
+;; Version 5 does not support Python 2
 (define-public python2-decorator
-  (package-with-python2 python-decorator))
+  (package
+    (inherit (package-with-python2
+              (strip-python2-variant python-decorator)))
+    (version "4.3.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "decorator" version))
+       (sha256
+        (base32 "0308djallnh00v112y5b7nadl657ysmkp6vc8xn51d6yzc9zm7n3"))))))
 
 (define-public python-drmaa
   (package
@@ -7330,7 +7790,7 @@ etc.  The core of this module is a decorator factory.")
     ;; should be set to the path of the libdrmaa library.
     (arguments '(#:tests? #f))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (home-page "https://pypi.org/project/drmaa/")
     (synopsis "Python bindings for the DRMAA library")
     (description
@@ -7357,9 +7817,7 @@ Python language binding specification.")
     (build-system python-build-system)
     (arguments '(#:tests? #f)) ; Test file 'grako.ebnf' is missing from archive.
     (native-inputs
-     `(("unzip" ,unzip)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list unzip python-pytest python-pytest-runner))
     (home-page "https://bitbucket.org/neogeny/grako")
     (synopsis "EBNF parser generator")
     (description
@@ -7393,11 +7851,9 @@ memoizing PEG/Packrat parser in Python.")
            (lambda _
              (invoke "python" "setup.py" "pytest"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-pytest python-pytest-runner))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-ply" ,python-ply)))
+     (list python-numpy python-ply))
     (home-page "https://github.com/bdcht/grandalf")
     (synopsis "Graph and drawing algorithms framework")
     (description
@@ -7442,9 +7898,7 @@ you to actually draw things with your favorite toolkit.")
     (arguments
      '(#:tests? #f)) ; FIXME: Requires python-cherrypy.
     (propagated-inputs
-     `(("python-psutil" ,python-psutil)
-       ("python-drmaa" ,python-drmaa)
-       ("python-pyzmq" ,python-pyzmq)))
+     (list python-psutil python-drmaa python-pyzmq))
     (home-page "https://github.com/pygridtools/gridmap")
     (synopsis "Create jobs on a cluster directly from Python")
     (description
@@ -7468,12 +7922,9 @@ cluster without needing to write any wrapper code yourself.")
         (base32 "11bd87474qpif20xdcn0ra1idj5k16ka51i658wfpxwc6nzsn92b"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-mock" ,python-mock)
-       ("python-tox" ,python-tox)
-       ("which" ,which))) ;for tests
+     (list python-pytest python-mock python-tox which)) ;for tests
     (propagated-inputs
-     `(("python-jinja2" ,python-jinja2)))
+     (list python-jinja2))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -7509,7 +7960,7 @@ displayed.")
         (base32 "16siqc3brbk7dp4d9sg48bjl6a8wyy24aib3il1hf4y2624draxh"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -7561,7 +8012,7 @@ wraps Python's standard library threading and multiprocessing objects.")
        ("which" ,which)
        ("bash-full" ,bash)))                 ;full Bash for 'test_replwrap.py'
     (propagated-inputs
-     `(("python-ptyprocess" ,python-ptyprocess)))
+     (list python-ptyprocess))
     (home-page "http://pexpect.readthedocs.org/")
     (synopsis "Controlling interactive console applications")
     (description
@@ -7577,36 +8028,37 @@ child application and control it as if a human were typing commands.")
 (define-public python-setuptools-scm
   (package
     (name "python-setuptools-scm")
-    (version "3.4.3")
+    (version "6.3.2")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "setuptools_scm" version))
               (sha256
-               (base32
-                "083k93wi7mrmp1cn28hcbnr6sivbgls0y7zz2m5qzn1wg04a3f16"))))
+               (base32 "1wm0i27siyy1yqr9rv7lqvb65agay9051yi8jzmi8dgb3q4ai6m4"))))
     (build-system python-build-system)
+    (propagated-inputs
+     `(("python-packaging",python-packaging-bootstrap)
+       ("python-tomli" ,python-tomli)))
     (home-page "https://github.com/pypa/setuptools_scm/")
     (synopsis "Manage Python package versions in SCM metadata")
     (description
      "Setuptools_scm handles managing your Python package versions in
 @dfn{software configuration management} (SCM) metadata instead of declaring
 them as the version argument or in a SCM managed file.")
-    (license license:expat)))
-
-;; TODO: Merge with 'python-setuptools-scm' on the next rebuild cycle.
-(define-public python-setuptools-scm/next
-  (package
-    (inherit python-setuptools-scm)
-    (version "5.0.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "setuptools_scm" version))
-       (sha256
-        (base32 "0ahlrxxkx2xhmxskx57gc96w3bdndflxx30304ihvm7ds136nny8"))))))
+    (license license:expat)
+    (properties `((python2-variant . ,(delay python2-setuptools-scm))))))
 
 (define-public python2-setuptools-scm
-  (package-with-python2 python-setuptools-scm))
+  (let ((base (package-with-python2
+               (strip-python2-variant python-setuptools-scm))))
+    (package/inherit base
+      (version "5.0.2")                  ;no python 2 support in version 6
+      (source (origin
+                (method url-fetch)
+                (uri (pypi-uri "setuptools_scm" version))
+                (sha256
+                 (base32
+                  "1j75i8avp9fhrkpbabsa8vyvbi49kmxlq6l10xir9qs96kfwx843"))))
+      (propagated-inputs '()))))
 
 (define-public python-sexpdata
   (package
@@ -7630,18 +8082,17 @@ functions like pickle, json or PyYAML module.")
 (define-public python-pathlib2
   (package
     (name "python-pathlib2")
-    (version "2.3.3")
+    (version "2.3.6")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pathlib2" version))
        (sha256
         (base32
-         "0hpp92vqqgcd8h92msm9slv161b1q160igjwnkf2ag6cx0c96695"))))
+         "0psyg60vk8wca473djrh0v9gb853z8wcawi8im5dyg00amawp2vx"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-scandir" ,python-scandir)
-       ("python-six" ,python-six)))
+     (list python-scandir python-six))
     (home-page "https://pypi.org/project/pathlib2/")
     (synopsis "Object-oriented file system paths")
     (description "The goal of pathlib2 is to provide a backport of the
@@ -7663,8 +8114,7 @@ older Python versions.")
           "1hq626mx5jl9zfl0wdrjkxsnh8qd98fqv322n68b9251xjk4bxqr"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-toml" ,python-toml)))
+     (list python-setuptools-scm python-toml))
     (home-page "http://importlib-resources.readthedocs.io/")
     (synopsis "Read resources from Python packages")
     (description
@@ -7697,8 +8147,7 @@ older Python versions.")
                          ""))
                       #t)))))
     (propagated-inputs
-     `(("python-pathlib2" ,python2-pathlib2)
-       ("python-typing" ,python2-typing)))
+     (list python2-pathlib2 python2-typing))
     (home-page "https://gitlab.com/python-devs/importlib_resources")
     (synopsis "Backport of @code{importlib.resources} from Python 3.7")
     (description
@@ -7729,11 +8178,9 @@ for older versions of Python.")
          "00ikdj4gjhankdljnz7g5ggak4k9lql2926x0x117ir9j2lv7x86"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-zipp" ,python-zipp)))
+     (list python-zipp))
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-pyfakefs" ,python-pyfakefs)
-       ("python-packaging" ,python-packaging)))
+     (list python-setuptools-scm python-pyfakefs python-packaging))
     (home-page "https://importlib-metadata.readthedocs.io/")
     (synopsis "Read metadata from Python packages")
     (description
@@ -7832,14 +8279,14 @@ finding unresolved symbols in Python code and their corresponding imports.")
             "0zimrnkh33b9g8ffw11mjh6kvs54cy5gcjw1h5cl1r7dc833dmkm"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-checkdocs" ,python-pytest-checkdocs)
-       ("python-pytest-flake8" ,python-pytest-flake8)
-       ("python-rst.linker" ,python-rst.linker)
-       ("python-setuptools" ,python-setuptools)
-       ("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-six" ,python-six)
-       ("python-sphinx" ,python-sphinx)))
+     (list python-pytest
+           python-pytest-checkdocs
+           python-pytest-flake8
+           python-rst.linker
+           python-setuptools
+           python-setuptools-scm
+           python-six
+           python-sphinx))
     (home-page "https://github.com/jaraco/jaraco.packaging")
     (synopsis "Tools to supplement packaging Python releases")
     (description
@@ -7860,15 +8307,14 @@ releases.")
     (outputs '("out" "doc"))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-appdirs" ,python-appdirs)
-       ("python-importlib-metadata" ,python-importlib-metadata)))
+     (list python-appdirs python-importlib-metadata))
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-sphinx" ,python-sphinx)
-       ("python-rst.linker" ,python-rst.linker)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)
-       ("python-jaraco-packaging" ,python-jaraco-packaging)))
+     (list python-setuptools-scm
+           python-sphinx
+           python-rst.linker
+           python-pytest
+           python-pytest-runner
+           python-jaraco-packaging))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -7911,7 +8357,7 @@ common operations on files to be invoked on those path objects directly.")
         (base32 "0wwi1c6md4vkbcsfsf8dklf3vr4mcdj4mpxkanwgb6jb1432x5yw"))))
     (build-system python-build-system)
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "http://cheeseshop.python.org/pypi/simplegeneric")
     (synopsis "Python module for simple generic functions")
     (description
@@ -7975,22 +8421,22 @@ away.")
              (setenv "HOME" (getcwd))
              #t)))))
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-decorator" ,python-decorator)
-       ("python-ipykernel" ,python-ipykernel)
-       ("python-ipython" ,python-ipython)
-       ("python-ipython-genutils" ,python-ipython-genutils)
-       ("python-jupyter-client" ,python-jupyter-client)
-       ("python-pyzmq" ,python-pyzmq)
-       ("python-tornado" ,python-tornado)
-       ("python-traitlets" ,python-traitlets)))
-    (native-inputs
-     `(("python-ipython" ,python-ipython)
-       ("python-mock" ,python-mock)
-       ("python-nose" ,python-nose)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-testpath" ,python-testpath)))
+     (list python-dateutil
+           python-decorator
+           python-ipykernel
+           python-ipython
+           python-ipython-genutils
+           python-jupyter-client
+           python-pyzmq
+           python-tornado
+           python-traitlets))
+    (native-inputs
+     (list python-ipython
+           python-mock
+           python-nose
+           python-pytest
+           python-pytest-cov
+           python-testpath))
     (home-page "https://ipython.org/")
     (synopsis "Interactive Parallel Computing with IPython")
     (description
@@ -8034,12 +8480,12 @@ CLI scripts:
                  (invoke "python" "example/example.py" "--local"))
                #t))))))
     (propagated-inputs
-     `(("python-ipyparallel" ,python-ipyparallel)
-       ("python-ipython" ,python-ipython)
-       ("python-netifaces" ,python-netifaces)
-       ("python-pyzmq" ,python-pyzmq)
-       ("python-setuptools" ,python-setuptools)
-       ("python-six" ,python-six)))
+     (list python-ipyparallel
+           python-ipython
+           python-netifaces
+           python-pyzmq
+           python-setuptools
+           python-six))
     (home-page "https://github.com/roryk/ipython-cluster-helper")
     (synopsis
      "Simplify IPython cluster start up and use for multiple schedulers")
@@ -8049,6 +8495,41 @@ profile, launches a cluster and returns a view.  On program exit it shuts the
 cluster down and deletes the throwaway profile.")
     (license license:expat)))
 
+(define-public python-ipython-sql
+  (package
+    (name "python-ipython-sql")
+    (version "0.4.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "ipython-sql" version))
+       (sha256
+        (base32 "0v74ayc6vw98f4jljmwy45qpqbcbhlrb4g1qdyypq9sppxcqx21y"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-build
+           (lambda _
+             ;; The "NEWS.rst" file is missing from the PyPI distribution.
+             ;; (see: https://github.com/catherinedevlin/ipython-sql/issues/164)
+             (substitute* "setup.py"
+               (("NEWS = [^\n]*") "")
+               (("long_description=README \\+ '\\\\n\\\\n' \\+ NEWS,")
+                "long_description=README,")))))))
+    (propagated-inputs
+     (list python-ipython
+           python-ipython-genutils
+           python-prettytable
+           python-six
+           python-sqlalchemy
+           python-sqlparse))
+    (home-page "https://github.com/catherinedevlin/ipython-sql")
+    (synopsis "RDBMS access via IPython")
+    (description "This library connects to a database, using SQLAlchemy URL
+connect strings, then issue SQL commands within IPython or IPython Notebook.")
+    (license license:expat)))
+
 (define-public python-traitlets
   (package
     (name "python-traitlets")
@@ -8066,12 +8547,9 @@ cluster down and deletes the throwaway profile.")
        (modify-phases %standard-phases
          (replace 'check (lambda _ (invoke "pytest" "-vv" "traitlets"))))))
     (propagated-inputs
-     `(("python-ipython-genutils" ,python-ipython-genutils)
-       ("python-decorator" ,python-decorator)
-       ("python-six" ,python-six)))
+     (list python-ipython-genutils python-decorator python-six))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
-    (properties `((python2-variant . ,(delay python2-traitlets))))
+     (list python-pytest))
     (home-page "https://ipython.org")
     (synopsis "Configuration system for Python applications")
     (description
@@ -8083,13 +8561,6 @@ is a distinct layer on top of traitlets, so you can use traitlets in your code
 without using the configuration machinery.")
     (license license:bsd-3)))
 
-(define-public python2-traitlets
-  (let ((traitlets (package-with-python2 (strip-python2-variant python-traitlets))))
-    (package/inherit traitlets
-      (propagated-inputs
-       `(("python2-enum34" ,python2-enum34)
-         ,@(package-propagated-inputs traitlets))))))
-
 (define-public python-jupyter-core
   (package
     (name "python-jupyter-core")
@@ -8116,12 +8587,12 @@ without using the configuration machinery.")
          (add-after 'unpack 'patch-testsuite
            (lambda _
              ;; test_not_on_path() and test_path_priority() try to run a test
-             ;; that loads jupyter_core, so we need PYTHONPATH
+             ;; that loads jupyter_core, so we need GUIX_PYTHONPATH
              (substitute* "jupyter_core/tests/test_command.py"
                (("env = \\{'PATH': ''\\}")
-                "env = {'PATH': '', 'PYTHONPATH': os.environ['PYTHONPATH']}")
+                "env = {'PATH': '', 'PYTHONPATH': os.environ['GUIX_PYTHONPATH']}")
                (("env = \\{'PATH':  str\\(b\\)\\}")
-                "env = {'PATH': str(b), 'PYTHONPATH': os.environ['PYTHONPATH']}"))
+                "env = {'PATH': str(b), 'PYTHONPATH': os.environ['GUIX_PYTHONPATH']}"))
              #t))
          ;; Migration is running whenever etc/jupyter exists, but the
          ;; Guix-managed directory will never contain any migratable IPython
@@ -8135,15 +8606,14 @@ without using the configuration machinery.")
                  (assoc-ref outputs "out")
                  "/etc/jupyter/migrated")))))))
     (propagated-inputs
-     `(("python-traitlets" ,python-traitlets)))
+     (list python-traitlets))
     (native-inputs
-     `(("python-six" ,python-six)
-       ("python-pytest" ,python-pytest)))
+     (list python-six python-pytest))
     ;; This package provides the `jupyter` binary and thus also exports the
     ;; search paths.
     (native-search-paths
      (list (search-path-specification
-            (variable "JUPYTER_CONFIG_DIR")
+            (variable "JUPYTER_CONFIG_PATH")
             (files '("etc/jupyter")))
            (search-path-specification
             (variable "JUPYTER_PATH")
@@ -8185,14 +8655,10 @@ without using the configuration machinery.")
     (inputs
      `(("iproute" ,iproute)))
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-jupyter-core" ,python-jupyter-core)
-       ("python-pyzmq" ,python-pyzmq)
-       ("python-tornado" ,python-tornado-6)
-       ("python-traitlets" ,python-traitlets)))
+     (list python-dateutil python-jupyter-core python-pyzmq
+           python-tornado-6 python-traitlets))
     (native-inputs
      `(("python-pytest" ,python-pytest)
-       ("python-pytest-asyncio" ,python-pytest-asyncio)
        ("python-pytest-timeout" ,python-pytest-timeout)
        ("python-async-generator" ,python-async-generator)
        ("python-mock" ,python-mock)
@@ -8237,10 +8703,10 @@ installing @code{kernelspec}s for use with Jupyter frontends.")
      `(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda _
-             (setenv "HOME" "/tmp")
-             (invoke "pytest" "-v")
-             #t))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (setenv "HOME" "/tmp")
+               (invoke "pytest" "-v"))))
          (add-after 'install 'set-python-file-name
            (lambda* (#:key outputs #:allow-other-keys)
              ;; Record the absolute file name of the 'python' executable in
@@ -8252,15 +8718,11 @@ installing @code{kernelspec}s for use with Jupyter frontends.")
                   (string-append "\"" (which "python") "\"")))
                #t))))))
     (propagated-inputs
-     `(("python-ipython" ,python-ipython)
-       ("python-tornado" ,python-tornado-6)
-       ("python-traitlets" ,python-traitlets)
-       ;; imported at runtime during connect
-       ("python-jupyter-client" ,python-jupyter-client)))
+     (list python-ipython python-tornado-6 python-traitlets
+           ;; imported at runtime during connect
+           python-jupyter-client))
     (native-inputs
-     `(("python-flaky" ,python-flaky)
-       ("python-nose" ,python-nose)
-       ("python-pytest" ,python-pytest)))
+     (list python-flaky python-nose python-pytest))
     (home-page "https://ipython.org")
     (synopsis "IPython Kernel for Jupyter")
     (description
@@ -8283,25 +8745,22 @@ installing @code{kernelspec}s for use with Jupyter frontends.")
 (define-public python-pari-jupyter
   (package
     (name "python-pari-jupyter")
-    (version "1.3.2")
+    (version "1.4.0")
     (source
      (origin
        (method url-fetch)
-       (uri (pypi-uri "pari_jupyter" version))
+       (uri (pypi-uri "pari-jupyter" version))
        (sha256
         (base32
-         "1yash0p422nnin7z58b99d0p23nx79f5m0mainc9hsjg72jhdhr6"))))
+         "1hwjr66vfjsx28qmxrgsp3z0px1xqwxv53byvsrbwbjp4pbp79sz"))))
     (build-system python-build-system)
+    (arguments '(#:tests? #f))          ;no test suite
     (propagated-inputs
-     `(("python-ipykernel" ,python-ipykernel)))
+     (list python-ipykernel))
     (inputs
-     `(("pari-gp" ,pari-gp)
-       ("readline" ,readline)))
-    (arguments
-     `(#:tests? #f)) ; no test suite
-    (home-page
-     "https://github.com/jdemeyer/pari_jupyter")
-    (synopsis "A Jupyter kernel for PARI/GP")
+     (list pari-gp readline))
+    (home-page "https://github.com/jdemeyer/pari-jupyter")
+    (synopsis "Jupyter kernel for PARI/GP")
     (description "The package provides a PARI/GP kernel for Jupyter.")
     (license license:gpl3+)))
 
@@ -8330,41 +8789,41 @@ callback signature using a prototype function.")
 (define-public python-ipython
   (package
     (name "python-ipython")
-    (version "7.9.0")
+    (version "7.27.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "ipython" version ".tar.gz"))
        (sha256
-        (base32 "103jkw18z7fnwdal1mdbijjxi1fndzn31g887lmj7ddpf2r07lyz"))))
-    (build-system python-build-system)
-    (propagated-inputs
-     `(("python-backcall" ,python-backcall)
-       ("python-pyzmq" ,python-pyzmq)
-       ("python-prompt-toolkit" ,python-prompt-toolkit-2)
-       ("python-terminado" ,python-terminado)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-numpy" ,python-numpy)
-       ("python-numpydoc" ,python-numpydoc)
-       ("python-jedi" ,python-jedi)
-       ("python-jinja2" ,python-jinja2)
-       ("python-mistune" ,python-mistune)
-       ("python-pexpect" ,python-pexpect)
-       ("python-pickleshare" ,python-pickleshare)
-       ("python-simplegeneric" ,python-simplegeneric)
-       ("python-jsonschema" ,python-jsonschema)
-       ("python-traitlets" ,python-traitlets)
-       ("python-nbformat" ,python-nbformat)
-       ("python-pygments" ,python-pygments)))
+        (base32 "04xgymypnbfgf2q0d5b0hanjbjsp53f055sh1p8xlq52vyzmxdaq"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     (list python-backcall
+           python-pyzmq
+           python-prompt-toolkit-2
+           python-terminado
+           python-matplotlib
+           python-matplotlib-inline
+           python-numpy
+           python-numpydoc
+           python-jedi
+           python-jinja2
+           python-mistune
+           python-pexpect
+           python-pickleshare
+           python-simplegeneric
+           python-jsonschema
+           python-traitlets
+           python-nbformat
+           python-pygments))
     (inputs
-     `(("readline" ,readline)
-       ("which" ,which)))
+     (list readline which))
     (native-inputs
-     `(("graphviz" ,graphviz)
-       ("pkg-config" ,pkg-config)
-       ("python-requests" ,python-requests) ;; for tests
-       ("python-testpath" ,python-testpath)
-       ("python-nose" ,python-nose)))
+     (list graphviz
+           pkg-config
+           python-requests ;; for tests
+           python-testpath
+           python-nose))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -8373,8 +8832,7 @@ callback signature using a prototype function.")
              (substitute* "IPython/sphinxext/ipython_directive.py"
                ((".*import datetime") "")
                ((".*datetime.datetime.now\\(\\)") "")
-               (("%timeit") "# %timeit"))
-             #t))
+               (("%timeit") "# %timeit"))))
          ;; Tests can only be run after the library has been installed and not
          ;; within the source directory.
          (delete 'check)
@@ -8388,8 +8846,7 @@ callback signature using a prototype function.")
                    ;; We only test the core because one of the other tests
                    ;; tries to import ipykernel.
                    (invoke "python" "IPython/testing/iptest.py"
-                           "-v" "IPython/core/tests"))
-                 #t)))
+                           "-v" "IPython/core/tests")))))
          (add-before 'check 'fix-tests
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "./IPython/utils/_process_posix.py"
@@ -8402,7 +8859,9 @@ callback signature using a prototype function.")
              (delete-file "IPython/core/tests/test_display.py")
              ;; AttributeError: module 'IPython.core' has no attribute 'formatters'
              (delete-file "IPython/core/tests/test_interactiveshell.py")
-             #t)))))
+             ;; AttributeError: module 'matplotlib_inline' has no
+             ;; attribute 'backend_inline'
+             (delete-file "IPython/core/tests/test_pylabtools.py"))))))
     (home-page "https://ipython.org")
     (synopsis "IPython is a tool for interactive computing in Python")
     (description
@@ -8451,21 +8910,20 @@ computing.")
                (copy-file "COPYING.rst" (string-append doc "/COPYING.rst")))
              #t)))))
     (inputs
-     `(("python-ipython" ,python-ipython)
-       ("python-ipykernel" ,python-ipykernel)))
+     (list python-ipython python-ipykernel))
     (native-inputs
      `(("python-sphinx" ,python-sphinx)
        ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
        ;; FIXME: It's possible that a smaller union would work just as well.
-       ("texlive" ,(texlive-union (list texlive-amsfonts/patched
+       ("texlive" ,(texlive-updmap.cfg (list texlive-amsfonts
                                         texlive-fonts-ec
-                                        texlive-generic-ifxetex
+                                        texlive-generic-iftex
                                         texlive-pdftex
                                         texlive-latex-capt-of
                                         texlive-latex-cmap
                                         texlive-latex-environ
                                         texlive-latex-eqparbox
-                                        texlive-latex-etoolbox
+                                        texlive-etoolbox
                                         texlive-latex-expdlist
                                         texlive-latex-fancyhdr
                                         texlive-latex-fancyvrb
@@ -8474,11 +8932,11 @@ computing.")
                                         texlive-latex-framed
                                         texlive-latex-geometry
                                         texlive-latex-graphics
-                                        texlive-latex-hyperref
+                                        texlive-hyperref
                                         texlive-latex-mdwtools
                                         texlive-latex-multirow
                                         texlive-latex-needspace
-                                        texlive-latex-oberdiek
+                                        texlive-oberdiek
                                         texlive-latex-parskip
                                         texlive-latex-preview
                                         texlive-latex-tabulary
@@ -8487,7 +8945,7 @@ computing.")
                                         texlive-latex-trimspaces
                                         texlive-latex-ucs
                                         texlive-latex-upquote
-                                        texlive-latex-url
+                                        texlive-url
                                         texlive-latex-varwidth
                                         texlive-latex-wrapfig)))
        ("texinfo" ,texinfo)))))
@@ -8504,6 +8962,15 @@ computing.")
         (base32
          "1bky2bra6673xx8jy0826znw6cmxs89wcwwzda8d025j3jffx2sq"))))
     (build-system python-build-system)
+    (arguments
+      (list
+        #:phases
+        #~(modify-phases %standard-phases
+            (add-after 'unpack 'remove-vterm-tests
+              ;; According to Debian these tests are cursed.
+              ;; https://salsa.debian.org/python-team/packages/urwid/-/blob/debian/2.1.2-2/debian/changelog#L141
+              (lambda _
+                (delete-file "urwid/tests/test_vterm.py"))))))
     (home-page "http://urwid.org")
     (synopsis "Console user interface library for Python")
     (description
@@ -8550,9 +9017,9 @@ features useful for text console applications.")
                (invoke "python" "-m" "pytest"))
              #t)))))
     (propagated-inputs
-     `(("python-urwid" ,python-urwid)))
+     (list python-urwid))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/rr-/urwid_readline")
     (synopsis "Text input widget for urwid that supports readline shortcuts")
     (description
@@ -8585,12 +9052,12 @@ supports @code{readline} shortcuts.")
              (delete-file "tests/test_external.py")
              #t)))))
     (native-inputs
-     `(("python-hypothesis" ,python-hypothesis)
-       ("python-isort" ,python-isort)
-       ("python-numpy" ,python-numpy)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)
-       ("python-tabulate" ,python-tabulate)))
+     (list python-hypothesis
+           python-isort
+           python-numpy
+           python-pytest
+           python-pytest-runner
+           python-tabulate))
     (home-page "https://github.com/life4/textdistance")
     (synopsis "Compute distance between the two texts")
     (description "@code{textdistance} is a pure Python library for comparing
@@ -8600,7 +9067,7 @@ distance between two or more sequences by many algorithms.")
 (define-public python-urwidtrees
   (package
     (name "python-urwidtrees")
-    (version "1.0.2")
+    (version "1.0.3")
     (source
       (origin
         (method git-fetch)
@@ -8612,12 +9079,12 @@ distance between two or more sequences by many algorithms.")
         (file-name (git-file-name name version))
         (sha256
           (base32
-           "1n1kpidvkdnsqyb82vlvk78gmly96kh8351lqxn2pzgwwns6fml2"))))
+           "1y1vysx7jg0vbrarlsykhf7nmr8fc6k1fva1q3i98xq2m30s6r68"))))
     (build-system python-build-system)
     (arguments
-     '(#:use-setuptools? #f
-       #:tests? #f)) ; no tests
-    (propagated-inputs `(("python-urwid" ,python-urwid)))
+     '(#:tests? #f)) ; no tests
+    (propagated-inputs (list python-urwid))
+    (native-inputs (list python-mock))
     (home-page "https://github.com/pazz/urwidtrees")
     (synopsis "Tree widgets for urwid")
     (description "Urwidtrees is a Widget Container API for the @code{urwid}
@@ -8642,7 +9109,7 @@ toolkit.  Use it to build trees of widgets.")
     (arguments
      `(#:tests? #f))                    ;no test suite in release
     (native-inputs
-     `(("python-pyyaml" ,python-pyyaml)))
+     (list python-pyyaml))
     (home-page "https://github.com/ua-parser/uap-python")
     (synopsis "User agent parser")
     (description
@@ -8667,7 +9134,7 @@ toolkit.  Use it to build trees of widgets.")
     (arguments
      `(#:tests? #f))                  ;missing devices.json test file in release
     (propagated-inputs
-     `(("python-ua-parser" ,python-ua-parser)))
+     (list python-ua-parser))
     (home-page "https://github.com/selwin/python-user-agents")
     (synopsis "User Agent strings parsing library")
   (description
@@ -8678,20 +9145,40 @@ parsing (browser/HTTP) user agent strings.")
 (define-public python2-user-agents
   (package-with-python2 python-user-agents))
 
+(define-public python-pydbus
+  (package
+    (name "python-pydbus")
+    (version "0.6.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "pydbus" version))
+        (sha256
+          (base32 "0b0gipvz7vcfa9ddmwq2jrx16d4apb0hdnl5q4i3h8jlzwp1c1s2"))))
+    (build-system python-build-system)
+    (propagated-inputs (list python-pygobject))
+    (home-page "https://github.com/LEW21/pydbus")
+    (synopsis "Pythonic D-Bus library")
+    (description "Pydbus provides a pythonic interface to the D-Bus
+message bus system.  Pydbus can be used to access remote objects and
+also for object publication.  It is based on PyGI, the Python GObject
+Introspection bindings, which is the recommended way to use GLib from Python.")
+    (license license:lgpl2.1+)))
+
 (define-public python-dbus
   (package
     (name "python-dbus")
-    (version "1.2.16")
+    (version "1.2.18")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://dbus.freedesktop.org/releases/dbus-python/"
                            "dbus-python-" version ".tar.gz"))
        (sha256
-        (base32 "196m5rk3qzw5nkmgzjl7wmq0v7vpwfhh8bz2sapdi5f9hqfqy8qi"))))
+        (base32 "0q3jrw515z98mqdk9x822nd95rky455zz9876f1nqna5igkd3gcj"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("python" ,python-wrapper)
        ("dbus-glib" ,dbus-glib)))
@@ -8699,6 +9186,7 @@ parsing (browser/HTTP) user agent strings.")
     (description "python-dbus provides bindings for libdbus, the reference
 implementation of D-Bus.")
     (home-page "https://www.freedesktop.org/wiki/Software/DBusBindings/")
+    (properties `((python2-variant . ,(delay python2-dbus))))
     (license license:expat)))
 
 (define-public python2-dbus
@@ -8706,8 +9194,34 @@ implementation of D-Bus.")
     (name "python2-dbus")
     (inputs `(("python" ,python-2)
               ,@(alist-delete "python"
-                              (package-inputs python-dbus)
-                              equal?)))))
+                              (package-inputs python-dbus))))
+    (arguments
+     `(#:configure-flags '("PYTHON_VERSION=2")))))
+
+(define-public python-dbus-next
+  (package
+    (name "python-dbus-next")
+    (version "0.2.3")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/altdesktop/python-dbus-next")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1ahaz52kny1p9xxv6phvk4iq56rg8li390wywlxf2yslaij1188h"))))
+    (build-system python-build-system)
+    (native-inputs
+      (list python-pytest))
+    (home-page "https://github.com/altdesktop/python-dbus-next")
+    (synopsis "Zero-dependency DBus library for Python with asyncio support")
+    (description
+     "This DBus library for Python aims to be a fully-featured high-level
+library primarily geared towards integration of applications into desktop and
+mobile environments.")
+    (license license:expat)))
 
 (define-public python-notify2
   (package
@@ -8722,8 +9236,8 @@ implementation of D-Bus.")
          "0z8rrv9rsg1r2qgh2dxj3dfj5xnki98kgi3w839kqby4a26i1yik"))))
     (build-system python-build-system)
     (arguments `(#:tests? #f))                    ; tests depend on system state
-    (native-inputs
-     `(("python-dbus" ,python-dbus)))
+    (propagated-inputs
+     (list python-dbus))
     (home-page "https://bitbucket.org/takluyver/pynotify2")
     (synopsis "Python interface to D-Bus notifications")
     (description
@@ -8741,27 +9255,17 @@ the GObject Introspection bindings to libnotify for non-GTK applications.")
 (define-public python-beautifulsoup4
   (package
     (name "python-beautifulsoup4")
-    (version "4.9.3")
+    (version "4.10.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "beautifulsoup4" version))
        (sha256
         (base32
-         "09gbd49mwz86k572r1231x2rdp82p42zlnw0bz9b9mfi58r9wwl4"))))
+         "14c8z4gh9bi38agx9ls8ym5rscc02pc6f6hmliaqk08xa8yd4fn2"))))
     (build-system python-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         ;; The Python 2 source is the definitive source of beautifulsoup4. We
-         ;; must use this conversion script when building with Python 3. The
-         ;; conversion script also runs the tests.
-         ;; For more information, see the file 'convert-py3k' in the source
-         ;; distribution.
-         (replace 'check
-           (lambda _ (invoke "./convert-py3k"))))))
     (propagated-inputs
-     `(("python-soupsieve" ,python-soupsieve)))
+     (list python-soupsieve python-html5lib python-lxml))
     (home-page
      "https://www.crummy.com/software/BeautifulSoup/bs4/")
     (synopsis
@@ -8778,8 +9282,16 @@ converts incoming documents to Unicode and outgoing documents to UTF-8.")
 (define-public python2-beautifulsoup4
   (let ((base (package-with-python2
                (strip-python2-variant python-beautifulsoup4))))
-   (package/inherit base
-     (arguments `(#:python ,python-2)))))
+    (package/inherit base
+      (version "4.9.3")                 ;last version to support Python 2
+      (source
+       (origin
+         (method url-fetch)
+         (uri (pypi-uri "beautifulsoup4" version))
+         (sha256
+          (base32
+           "09gbd49mwz86k572r1231x2rdp82p42zlnw0bz9b9mfi58r9wwl4"))))
+      (arguments `(#:python ,python-2)))))
 
 (define-public python-soupsieve
   (package
@@ -8793,10 +9305,15 @@ converts incoming documents to Unicode and outgoing documents to UTF-8.")
         (base32
          "1k70gpn2d3vgdyxbdy536dgm4kchcraxz6lmgsfg3324iy2789q5"))))
     (build-system python-build-system)
-    (arguments `(#:tests? #f))
-    ;;XXX: 2 tests fail currently despite claming they were to be
-    ;;skipped. Also, beautifulsoup4 may depend on this in the future, so we
-    ;;don't want to create a circular dependency.
+    (arguments
+      ;;XXX: 2 tests fail currently despite claming they were to be
+      ;;skipped. Also, beautifulsoup4 may depend on this in the future, so we
+      ;;don't want to create a circular dependency.
+      (list #:tests? #f
+            #:phases
+            #~(modify-phases %standard-phases
+                ;; Circular dependency with python-beautifulsoup4.
+                (delete 'sanity-check))))
     (home-page "https://github.com/facelessuser/soupsieve")
     (synopsis "CSS selector library")
     (description
@@ -8822,21 +9339,20 @@ some are not yet implemented).")
           (base32
            "1apgqxngi1216h1cyvrvj9gy3wf45mh1lz4n76j26jf3k36bm1br"))))
       (propagated-inputs
-       `(("python2-backports-functools-lru-cache"
-          ,python2-backports-functools-lru-cache)
-         ,@(package-propagated-inputs base))))))
+       (modify-inputs (package-propagated-inputs base)
+         (prepend python2-backports-functools-lru-cache))))))
 
 (define-public python-netifaces
   (package
     (name "python-netifaces")
-    (version "0.10.9")
+    (version "0.11.0")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "netifaces" version))
         (sha256
           (base32
-            "1wxby874kcr3pp4ygzk5aiarbzhg1yi093d56s1qg4k2s7yrzvid"))))
+            "0cnajf5rl4w1sa72j921scbigr6zndig56cq8ggpx45jdqa7jfh4"))))
     (build-system python-build-system)
     (home-page "https://github.com/al45tair/netifaces")
     (synopsis
@@ -8870,9 +9386,9 @@ interfaces in an easy and portable manner.")
                       #t)))))
     ;; python-decorator is needed at runtime.
     (propagated-inputs
-     `(("python-decorator" ,python-decorator)))
+     (list python-decorator))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://networkx.github.io/")
     (synopsis "Python module for creating and manipulating graphs and networks")
     (description
@@ -8896,8 +9412,7 @@ of the structure, dynamics, and functions of complex networks.")
       (arguments
        `(#:python ,python-2))
       (native-inputs
-       `(("python-nose" ,python2-nose)
-         ("unzip" ,unzip))))))
+       (list python2-nose unzip)))))
 
 (define-public python-datrie
   (package
@@ -8912,10 +9427,8 @@ of the structure, dynamics, and functions of complex networks.")
          "0pbn32flkrpjiwfcknmj6398qa81ba783kbcvwan3kym73v0hnsj"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-hypothesis" ,python-hypothesis)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-cython python-hypothesis python-pytest
+           python-pytest-runner))
     (home-page "https://github.com/kmike/datrie")
     (synopsis "Fast, efficiently stored trie for Python")
     (description
@@ -8936,10 +9449,9 @@ Python.")
          "0f1db9zp0rsfzxvaz55xwh8h5rfdgr9a2a715g06ic8nknsdq4nb"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-docutils" ,python-docutils)
-       ("python-pyparsing" ,python-pyparsing)))
+     (list python-docutils python-pyparsing))
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-setuptools-scm))
     (home-page "https://github.com/willu47/amply")
     (synopsis "Load and manipulate AMPL/GLPK data as Python data structures")
     (description
@@ -8960,7 +9472,7 @@ structures.")
          "1dammrg0f1v0r028i3rpxbf2bsyxmjq0q6ihb4x2wsdki44z3bxj"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-amply" ,python-amply)))
+     (list python-amply))
     (home-page "https://github.com/coin-or/pulp")
     (synopsis "Linear Programming modeler")
     (description
@@ -9006,13 +9518,10 @@ algorithm.")
     (arguments
      `(#:test-target "pytest"))
     (propagated-inputs
-     `(("python-diff-match-patch" ,python-diff-match-patch)))
+     (list python-diff-match-patch))
     (native-inputs
-     `(("python-flaky" ,python-flaky)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-runner" ,python-pytest-runner)
-       ("python-pytest-timeout" ,python-pytest-timeout)))
+     (list python-flaky python-pytest python-pytest-cov
+           python-pytest-runner python-pytest-timeout))
     (home-page "https://github.com/spyder-ide/three-merge")
     (synopsis "Library for merging two strings with respect to a base one")
     (description
@@ -9049,22 +9558,22 @@ approach.")
                                "/bin/snakemake")))
              #t)))))
     (propagated-inputs
-     `(("python-appdirs" ,python-appdirs)
-       ("python-configargparse" ,python-configargparse)
-       ("python-datrie" ,python-datrie)
-       ("python-docutils" ,python-docutils)
-       ("python-gitpython" ,python-gitpython)
-       ("python-jinja2" ,python-jinja2)
-       ("python-jsonschema" ,python-jsonschema)
-       ("python-nbformat" ,python-nbformat)
-       ("python-networkx" ,python-networkx)
-       ("python-psutil" ,python-psutil)
-       ("python-pulp" ,python-pulp)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-ratelimiter" ,python-ratelimiter)
-       ("python-requests" ,python-requests)
-       ("python-toposort" ,python-toposort)
-       ("python-wrapt" ,python-wrapt)))
+     (list python-appdirs
+           python-configargparse
+           python-datrie
+           python-docutils
+           python-gitpython
+           python-jinja2
+           python-jsonschema
+           python-nbformat
+           python-networkx
+           python-psutil
+           python-pulp
+           python-pyyaml
+           python-ratelimiter
+           python-requests
+           python-toposort
+           python-wrapt))
     (home-page "https://snakemake.readthedocs.io")
     (synopsis "Python-based execution environment for make-like workflows")
     (description
@@ -9096,13 +9605,13 @@ SVG, EPS, PNG and terminal output.")
 (define-public python-seaborn
   (package
     (name "python-seaborn")
-    (version "0.11.1")
+    (version "0.11.2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "seaborn" version))
        (sha256
-        (base32 "1b81p9s6li3b606ivgbynrh102fclwlw74m8qxzsii9pv6p8xrs4"))
+        (base32 "1xpl3zb945sihsiwm9q1yyx84sakk1phcg0fprj6i0j0dllfjifg"))
        (patches (search-patches "python-seaborn-kde-test.patch"))))
     (build-system python-build-system)
     (arguments
@@ -9119,13 +9628,9 @@ SVG, EPS, PNG and terminal output.")
              (when tests?
                (invoke "pytest" "seaborn")))))))
     (propagated-inputs
-     `(("python-pandas" ,python-pandas)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-numpy" ,python-numpy)
-       ("python-scipy" ,python-scipy)))
+     (list python-pandas python-matplotlib python-numpy python-scipy))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("xorg-server" ,xorg-server-for-tests)))
+     (list python-pytest xorg-server-for-tests))
     (home-page "https://seaborn.pydata.org/")
     (synopsis "Statistical data visualization")
     (description
@@ -9151,31 +9656,40 @@ and statistical routines from scipy and statsmodels.")
 
 (define-public python-mpmath
   (package
-  (name "python-mpmath")
-  (version "1.1.0")
-  (source (origin
-            (method url-fetch)
-            (uri (pypi-uri "mpmath" version))
-            (file-name (git-file-name name version))
-            (sha256
-             (base32
-              "1xlrcja213jpfhw25q1jl5pl10w1a2cc68x1c4mkicxsbzhan5zw"))))
-  (build-system python-build-system)
-  (native-inputs
-   `(("python-pytest" ,python-pytest)))
-  (arguments
-   '(#:phases
-     (modify-phases %standard-phases
-       (replace 'check
-         (lambda _
-           (invoke "python" "mpmath/tests/runtests.py" "-local"))))))
-  (home-page "https://mpmath.org")
-  (synopsis "Arbitrary-precision floating-point arithmetic in python")
-  (description
-    "@code{mpmath} can be used as an arbitrary-precision substitute for
+    (name "python-mpmath")
+    (version "1.2.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/fredrik-johansson/mpmath")
+                    (commit "c6a35f9ee7c294bcf4e0517bc76b268843db9499")))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0ifw59fjjls3mas104rh0frilvab2fhk1dkjraxlqni5n9l676im"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'set-version
+           (lambda _
+             (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" ,version)
+             ;; ZIP does not support timestamps before 1980.
+             (setenv "SOURCE_DATE_EPOCH" "315532800")))
+         (replace 'check
+           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "pytest" "-vv")))))))
+    (native-inputs
+     (list python-pytest python-setuptools-scm))
+    (home-page "https://mpmath.org")
+    (synopsis "Arbitrary-precision floating-point arithmetic in python")
+    (description
+     "@code{mpmath} can be used as an arbitrary-precision substitute for
 Python's float/complex types and math/cmath modules, but also does much
 more advanced mathematics.")
-  (license license:bsd-3)))
+    (license license:bsd-3)))
 
 (define-public python2-mpmath
   (package-with-python2 python-mpmath))
@@ -9192,7 +9706,7 @@ more advanced mathematics.")
         (base32 "0xd7q4l7v0f463diznjv4k9wlaks80pn9drdqmfifi7zx8qvybi6"))))
     (build-system python-build-system)
     (inputs
-     `(("mpfr" ,mpfr)))
+     (list mpfr))
     (home-page "https://github.com/mdickinson/bigfloat")
     (synopsis "Arbitrary precision floating-point arithmetic for Python")
     (description
@@ -9220,7 +9734,7 @@ multiprecision arithmetic.")
                (or (which "python3") (which "python"))
                "-c" "import sympy; sympy.test(\"/core\")"))))))
     (propagated-inputs
-     `(("python-mpmath" ,python-mpmath)))
+     (list python-mpmath))
     (home-page "https://www.sympy.org/")
     (synopsis "Python library for symbolic mathematics")
     (description
@@ -9289,11 +9803,9 @@ falling into the Python interpreter.")
                (setenv "DISPLAY" ":1")
                #t))))))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-setuptools-scm" ,python-setuptools-scm)
-       ("xorg-server" ,xorg-server)))
+     (list python-mock python-setuptools-scm xorg-server))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://github.com/python-xlib/python-xlib")
     (synopsis "Python X11 client library")
     (description
@@ -9318,7 +9830,7 @@ low-level X clients.  It is written entirely in Python.")
          "171b7ip0hsq5qm83np40h3phlr36ym18w0lay0a8v08kvy3sy1jv"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-six" ,python-six))) ; required for conversion, not at run-time
+     (list python-six)) ; required for conversion, not at run-time
     (home-page
      "https://docs.python.org/3/library/functools.html#functools.singledispatch")
     (synopsis "Backport of singledispatch feature from Python 3.4")
@@ -9375,7 +9887,14 @@ Python 2 and Python 3.")
     (license license:psfl)))
 
 (define-public python2-backports-csv
-  (package-with-python2 python-backports-csv))
+  (package
+    (inherit (package-with-python2 python-backports-csv))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         ;; The sanity-check attempts attempts to import the non-existent
+         ;; module "backports".
+         (delete 'sanity-check))))))
 
 (define-public python2-backports-shutil-get-terminal-size
   (package
@@ -9395,11 +9914,9 @@ Python 2 and Python 3.")
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (setenv "PYTHONPATH" (string-append "./build/lib:"
-                                                 (getenv "PYTHONPATH")))
              (invoke "py.test" "-v"))))))
     (native-inputs
-     `(("python2-pytest" ,python2-pytest)))
+     (list python2-pytest))
     (home-page "https://github.com/chrippa/backports.shutil_get_terminal_size")
     (synopsis "Backport of Python 3.3's @code{shutil.get_terminal_size}")
     (description
@@ -9455,13 +9972,13 @@ applications.")
 (define-public python-pyzmq
   (package
     (name "python-pyzmq")
-    (version "22.1.0")
+    (version "22.3.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pyzmq" version))
        (sha256
-        (base32 "0pa1y97z75xqyca9xfp9zrzksydbgzsxf8yh0hwp0rgahpfxch3h"))))
+        (base32 "0737kizh53n4rjq1xbm6nhr0bq65xflg04i1d8fcky0nwwrw1pcf"))))
     (build-system python-build-system)
     (arguments
      `(#:configure-flags
@@ -9473,17 +9990,172 @@ applications.")
              ;; Cython extensions have to be built before running the tests.
              (invoke "python" "setup.py" "build_ext" "--inplace"))))))
     (inputs
-     `(("zeromq" ,zeromq)))
+     (list zeromq))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python-cython" ,python-cython)
-       ("python-pytest" ,python-pytest)))
+     (list pkg-config python-cython python-pytest))
     (home-page "https://github.com/zeromq/pyzmq")
     (synopsis "Python bindings for 0MQ")
     (description
      "PyZMQ is the official Python binding for the ZeroMQ messaging library.")
     (license license:bsd-4)))
 
+(define-public python-immutabledict
+  (package
+    (name "python-immutabledict")
+    (version "2.2.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "immutabledict" version))
+       (sha256
+        (base32 "0fpc4gbk7inpfbgdypsg6c18bmdjw8gwx47bjw0hvixn3gghxnqx"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:tests? #f)) ; no tests in PyPI release and no setup.py in GitHub
+    (native-inputs
+     (list python-pytest))
+    (home-page "https://github.com/corenting/immutabledict")
+    (synopsis "Immutable wrapper around dictionaries")
+    (description
+     "@dfn{immutabledict} is an immutable wrapper around dictionaries.
+It implements the complete mapping interface and can be used as a drop-in
+replacement for dictionaries where immutability is desired.")
+    (license license:expat)))
+
+(define-public python-emoji
+  (package
+    (name "python-emoji")
+    (version "1.6.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "emoji" version))
+       (sha256
+        (base32 "0923mpixwq6hdpkgvi4r46alfvf608iq975rb8lnqpq29j71mmjk"))))
+    (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")))))))
+    (native-inputs
+     (list python-pytest))
+    (home-page "https://github.com/carpedm20/emoji/")
+    (synopsis "Emoji terminal output for Python")
+    (description "This package provides Emoji terminal output for Python.  The
+entire set of Emoji codes as defined by the Unicode Consortium is supported in
+addition to a bunch of aliases.")
+    (license license:bsd-3)))
+
+(define-public python-sarge
+  (package
+    (name "python-sarge")
+    (version "0.1.7.post1") ; post release only to correct errors in metadata
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "sarge" version))
+       (sha256
+        (base32 "0g9a53mfnp96877n1yq2jdk1mcv3xm0d93iisvgcn2prdsp45zv4"))))
+    (build-system python-build-system)
+    (home-page "https://docs.red-dove.com/sarge/")
+    (synopsis "Subprocess wrapper with command pipeline functionality")
+    (description "@code{sarge} is a wrapper for subprocess which provides
+command pipeline functionality.")
+    (license license:bsd-3)))
+
+(define-public python-zipstream-new
+  (package
+    (name "python-zipstream-new")
+    (version "1.1.8")
+    (source
+     (origin
+       (method git-fetch)               ; no tests in PyPI release
+       (uri (git-reference
+             (url "https://github.com/arjan-s/python-zipstream")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "14vhgg8mcjqi8cpzrw8qzbij2fr2a63l2a8fhil21k2r8vzv92cv"))))
+    (build-system python-build-system)
+    (native-inputs
+     (list python-nose))
+    (home-page "https://github.com/arjan-s/python-zipstream")
+    (synopsis "Zipfile generator that takes input files as well as streams")
+    (description "@code{zipstream.py} is a zip archive generator based on
+@code{zipfile.py}.  It was created to generate a zip file generator for
+streaming.  This is beneficial for when you want to provide a downloadable
+archive of a large collection of regular files, which would be infeasible
+to generate the archive prior to downloading or of a very large file that
+you do not want to store entirely on disk or on memory.")
+    ;; No copyright headers in the source.  The LICENSE file indicates GPL3.
+    (license license:gpl3)))
+
+(define-public python-sentry-sdk
+  (package
+    (name "python-sentry-sdk")
+    (version "1.5.1")
+    (source
+     (origin
+       (method git-fetch)               ; no tests in PyPI release
+       (uri (git-reference
+             (url "https://github.com/getsentry/sentry-python")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "128bm136l5zprr3sqqb8j3d6k5i1fhz853mzvh3w8g0w1dw763mx"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "python" "-m" "pytest" "-k"
+                       (string-append
+                        ;; This test requires extra dependencies.
+                        "not test_auto_enabling_integrations"
+                        "_catches_import_error"
+                        ;; Tests below run pip command.
+                        " and not test_unhandled_exception"
+                        " and not test_timeout_error"
+                        " and not test_performance_no_error"
+                        " and not test_performance_error"
+                        " and not test_traces_sampler_gets_correct"
+                        "_values_in_sampling_context"
+                        " and not test_handled_exception"
+                        ;; Tests below require network.
+                        " and not test_crumb_capture"
+                        " and not test_crumb_capture"
+                        " and not test_crumb_capture_hint"
+                        " and not test_httplib_misuse"
+                        ;; Fails with IndexError.
+                        " and not test_session_mode_defaults_to"
+                        "_request_mode_in_wsgi_handler"))))))))
+    (native-inputs
+     (list python-django
+           python-executing
+           python-gevent
+           python-jsonschema
+           python-mock
+           python-pyrsistent
+           python-pytest
+           python-pytest-cov
+           python-pytest-django
+           python-pytest-forked
+           python-pytest-localserver
+           python-werkzeug))
+    (propagated-inputs
+     (list python-certifi python-urllib3))
+    (home-page "https://github.com/getsentry/sentry-python")
+    (synopsis "Python SDK for Sentry")
+    (description "This package provides a Python SDK for the Sentry
+application monitoring and error tracking software.")
+    (license license:bsd-2)))
+
 (define-public python-pep8
   ;; This package has been renamed to ‘pycodestyle’ and is no longer updated.
   ;; Its last release (1.7.1) adds only a scary warning to this effect, breaking
@@ -9523,8 +10195,7 @@ PEP 8.")
          "04kyh9hkpyc8jzj16d1kkk29b5n8miqdvbs0zm035n1z5z5kx6hz"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-flake8" ,python-flake8)
-       ("python-flake8-polyfill" ,python-flake8-polyfill)))
+     (list python-flake8 python-flake8-polyfill))
     (home-page "https://github.com/PyCQA/pep8-naming")
     (synopsis "Check PEP-8 naming conventions")
     (description
@@ -9548,9 +10219,7 @@ plugin for flake8 to check PEP-8 naming conventions.")
                (invoke "pytest")
                #t))))))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("python-testpath" ,python-testpath)))
+     (list python-mock python-pytest python-testpath))
     (properties `((python2-variant . ,(delay python2-pep517))))))
 
 ;; Skip the tests so we don't create a cyclical dependency with pytest.
@@ -9573,11 +10242,10 @@ plugin for flake8 to check PEP-8 naming conventions.")
         (method url-fetch)
         (uri (pypi-uri "pyflakes" version))
         (sha256
-          (base32
-            "1ny10364ciqh4ripasj4zzv4145l21l3s85m3qlrvfq5pk58xg7m"))))
+         (base32
+          "1ny10364ciqh4ripasj4zzv4145l21l3s85m3qlrvfq5pk58xg7m"))))
     (build-system python-build-system)
-    (home-page
-      "https://github.com/pyflakes/pyflakes")
+    (home-page "https://github.com/PyCQA/pyflakes")
     (synopsis "Passive checker of Python programs")
     (description
       "Pyflakes statically checks Python source code for common errors.")
@@ -9595,28 +10263,28 @@ plugin for flake8 to check PEP-8 naming conventions.")
               (uri (pypi-uri "pyflakes" version))
               (sha256
                (base32
-                "1j3zqbiwkyicvww499bblq33x0bjpzdrxajhaysr7sk7x5gdgcim"))))))
+                "1j3zqbiwkyicvww499bblq33x0bjpzdrxajhaysr7sk7x5gdgcim"))
+              (patches
+               (search-patches "python-pyflakes-test-location.patch"))))))
 
 (define-public python-mccabe
   (package
     (name "python-mccabe")
     (version "0.6.1")
     (source
-      (origin
-        (method url-fetch)
-        (uri (pypi-uri "mccabe" version))
-        (sha256
-          (base32
-            "07w3p1qm44hgxf3vvwz84kswpsx6s7kvaibzrsx5dzm0hli1i3fx"))))
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "mccabe" version))
+       (sha256
+        (base32
+         "07w3p1qm44hgxf3vvwz84kswpsx6s7kvaibzrsx5dzm0hli1i3fx"))))
     (build-system python-build-system)
     (native-inputs
-      `(("python-pytest" ,python-pytest-bootstrap)
-        ("python-pytest-runner" ,python-pytest-runner)))
-    (home-page "https://github.com/flintwork/mccabe")
+     (list python-toml python-pytest-bootstrap python-pytest-runner))
+    (home-page "https://github.com/PyCQA/mccabe")
     (synopsis "McCabe checker, plugin for flake8")
-    (description
-      "This package provides a Flake8 plug-in to compute the McCabe cyclomatic
-complexity of Python source code.")
+    (description "This package provides a Flake8 plug-in to compute the McCabe
+cyclomatic complexity of Python source code.")
     (license license:expat)))
 
 (define-public python2-mccabe
@@ -9641,13 +10309,10 @@ complexity of Python source code.")
              (add-installed-pythonpath inputs outputs)
              (invoke "pytest" "-v"))))))
     (propagated-inputs
-     `(("python-pycodestyle" ,python-pycodestyle)
-       ("python-entrypoints" ,python-entrypoints)
-       ("python-pyflakes" ,python-pyflakes)
-       ("python-mccabe" ,python-mccabe)))
+     (list python-pycodestyle python-entrypoints python-pyflakes
+           python-mccabe))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)))
+     (list python-mock python-pytest))
     (home-page "https://gitlab.com/pycqa/flake8")
     (synopsis
       "The modular source code checker: pep8, pyflakes and co")
@@ -9677,10 +10342,8 @@ complexity of Python source code.")
                (base32
                 "0fvcrsbyzjpcli8ldbpsdbpmf238nkvwc1dy4hy82lf63rvfinma"))))
     (propagated-inputs
-     `(("python-pycodestyle" ,python-pycodestyle-2.6)
-       ("python-entrypoints" ,python-entrypoints)
-       ("python-pyflakes" ,python-pyflakes-2.2)
-       ("python-mccabe" ,python-mccabe)))))
+     (list python-pycodestyle-2.6 python-entrypoints python-pyflakes-2.2
+           python-mccabe))))
 
 (define-public python-flake8-bugbear
   (package
@@ -9704,11 +10367,9 @@ complexity of Python source code.")
                (("def test_does_not_crash_on_any_valid_code")
                 "def _test_does_not_crash_on_any_valid_code")))))))
     (native-inputs
-     `(("python-hypothesis" ,python-hypothesis)
-       ("python-hypothesmith" ,python-hypothesmith)))
+     (list python-hypothesis python-hypothesmith))
     (propagated-inputs
-     `(("python-attrs" ,python-attrs)
-       ("python-flake8" ,python-flake8)))
+     (list python-attrs python-flake8))
     (home-page "https://github.com/PyCQA/flake8-bugbear")
     (synopsis
       "Flake8 plugin for finding likely bugs and design problems in your program")
@@ -9731,9 +10392,7 @@ in pyflakes and pycodestyle.")
          "0dzaw8jr7yhlabxhrblnrizxx17xa9ngjnbr1kidg5lapq6b9q1y"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-flake8" ,python-flake8)
-       ("python-pycodestyle" ,python-pycodestyle)
-       ("python-six" ,python-six)))
+     (list python-flake8 python-pycodestyle 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
@@ -9757,9 +10416,16 @@ These should be used in preference to using a backslash for line continuation.
        (sha256
         (base32 "1v0y29xlmbr2q12a4nnpm1dm9aw1mjiys1x8jif4z8c90d63cqm6"))))
     (build-system python-build-system)
+    (arguments
+     '(#:tests? #f         ;no tests
+       #:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'loosen-requirements
+                    (lambda _
+                      ;; Permit newer versions of attrs.  Remove for >0.2.
+                      (substitute* "setup.py"
+                        ((", <21") "")))))))
     (propagated-inputs
-     `(("python-attrs" ,python-attrs)
-       ("python-more-itertools" ,python-more-itertools)))
+     (list python-attrs python-more-itertools))
     (home-page "https://github.com/keisheiled/flake8-implicit-str-concat")
     (synopsis "Flake8 plugin to encourage correct string literal concatenation")
     (description
@@ -9793,17 +10459,11 @@ unnecessary plus operators for explicit string literal concatenation.")
              (substitute* "setup.cfg"
                (("\\[pytest\\]")
                 "[tool:pytest]"))
-
-             (setenv "PYTHONPATH"
-                     (string-append (getcwd) "/build/lib:"
-                                    (getenv "PYTHONPATH")))
              (invoke "py.test" "-v"))))))
+    (propagated-inputs
+     (list python-flake8))
     (native-inputs
-     `(("python-flake8" ,python-flake8)
-       ("python-mock" ,python-mock)
-       ("python-pep8" ,python-pep8)
-       ("python-pycodestyle" ,python-pycodestyle)
-       ("python-pytest" ,python-pytest)))
+     (list python-mock python-pep8 python-pycodestyle python-pytest))
     (home-page "https://gitlab.com/pycqa/flake8-polyfill")
     (synopsis "Polyfill package for Flake8 plugins")
     (description
@@ -9826,9 +10486,7 @@ plugins that intend to support Flake8 2.x and 3.x simultaneously.")
         (base32 "05k5kkvyk6fdmvnacxfzypk74vbl3pmva13dqg1aljfwnxsc7yjs"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-flake8" ,python-flake8)
-       ("python-pycodestyle" ,python-pycodestyle)
-       ("python-six" ,python-six)))
+     (list python-flake8 python-pycodestyle python-six))
     (home-page "https://github.com/jbkahn/flake8-print")
     (synopsis "Print statement checker plugin for Flake8")
     (description
@@ -9839,19 +10497,17 @@ files.")
 (define-public python-flake8-pyi
   (package
     (name "python-flake8-pyi")
-    (version "20.5.0")
+    (version "20.10.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "flake8-pyi" version))
        (sha256
         (base32
-         "1zpq4s9kp8w95pccmhhyyx1ff2zhnidcf1zb3xs46lzcx9plvnzk"))))
+         "0b27n2pmrxcc7nva4wp2i7mrag0fnq0firvhg1ljq593a45b5qyf"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-attrs" ,python-attrs)
-       ("python-flake8" ,python-flake8)
-       ("python-pyflakes" ,python-pyflakes)))
+     (list python-attrs python-flake8 python-pyflakes))
     (home-page "https://github.com/ambv/flake8-pyi")
     (synopsis
       "Flake8 plugin that provides specializations for type hinting stub files")
@@ -9897,7 +10553,7 @@ lints.")
          "0ph5s6lxgpzz4an0ax6s5xjqypqmngwr5b1i0h9pqhzghplic49z"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-flake8" ,python-flake8)))
+     (list python-flake8))
     (home-page "https://github.com/zheller/flake8-quotes/")
     (synopsis "Flake8 lint for quotes")
     (description "This package provides a Flake8 lint for quotes.")
@@ -9916,7 +10572,7 @@ lints.")
          "05arm0sch3r8248035kilmf01z0mxsahw6vpbbz0d343zy8m8k3f"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pycodestyle" ,python-pycodestyle)))
+     (list python-pycodestyle))
     (home-page "https://github.com/schlamar/flake8-todo")
     (synopsis "TODO notes checker, plugin for flake8")
     (description
@@ -9936,7 +10592,7 @@ TODO notes checker plugin for flake8.")
         (base32 "0nzr057dbmgprp4a52ymafdkdd5zp2wcqf42913xc7hhvvdbj338"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pyflakes" ,python-pyflakes)))
+     (list python-pyflakes))
     (home-page "https://github.com/myint/autoflake")
     (synopsis "Removes unused imports and unused variables")
     (description
@@ -9961,8 +10617,7 @@ It also removes useless @code{pass} statements.")
          "0vkmsh0x480rni51lhyvigfdf06b9247z868pk3bal1wnnfl58sr"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-nose" ,python-nose)
-       ("python-cython" ,python-cython)))
+     (list python-nose python-cython))
     (home-page "https://github.com/lepture/mistune")
     (synopsis "Markdown parser in pure Python")
     (description "This package provides a fast markdown parser in pure
@@ -9972,6 +10627,20 @@ Python.")
 (define-public python2-mistune
   (package-with-python2 python-mistune))
 
+;; 2.0 is not released yet, but some packages have started using it.
+(define-public python-mistune-next
+  (package
+    (inherit python-mistune)
+    (name "python-mistune-next")
+    (version "2.0.0rc1")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "mistune" version))
+              (sha256
+               (base32
+                "1nd7iav1ixh9hlj4hxn6lmpava88d86ys8rqm30wgvr7gjlxnas5"))))
+    (native-inputs (list python-nose))))
+
 (define-public python-markdown
   (package
     (name "python-markdown")
@@ -9985,8 +10654,7 @@ Python.")
          "0jbs73nincha8fkfxx267sfxac6pl0ckszjbqbb8gk4dhs8v9d9i"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-nose" ,python-nose)
-       ("python-pyyaml" ,python-pyyaml)))
+     (list python-nose python-pyyaml))
     (home-page "https://python-markdown.github.io/")
     (synopsis "Python implementation of Markdown")
     (description
@@ -10023,7 +10691,7 @@ markdown_py is also provided to convert Markdown files to HTML.")
          "0ra31k10v3629xq0kdn8lwmfbi97anmk48r03yvh7mks0kq96hg6"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -10089,8 +10757,7 @@ pseudo terminal (pty), and interact with both the process and its pty.")
              (invoke "make" "test"))))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("which" ,which)))
+     (list python-coverage which))
     (synopsis "Simple testing framework for command line applications")
     (description
      "Cram is a functional testing framework for command line applications.
@@ -10133,7 +10800,7 @@ output.")
     (arguments
      `(#:tests? #f)) ; Tests require more dependencies.
     (native-inputs
-     `(("python-sphinx" ,python-sphinx)))
+     (list python-sphinx))
     (home-page "https://github.com/jackmaney/python-stdlib-list")
     (synopsis "Python Standard Libraries")
     (description "This package contains a list of Python Standard Libraries.")
@@ -10161,30 +10828,181 @@ add functionality and customization to your projects with their own plugins.")
 (define-public python2-straight-plugin
   (package-with-python2 python-straight-plugin))
 
-(define-public python-fonttools
+(define-public python-pysendfile
   (package
-    (name "python-fonttools")
-    (version "4.6.0")
-    (source (origin
-              (method url-fetch)
-              (uri (pypi-uri "fonttools" version ".zip"))
-              (sha256
-               (base32
-                "1mq9kdzhcsp96bhv7smnrpdg1s4z5wh70bsl99c0jmcrahqdisqq"))))
+    (name "python-pysendfile")
+    (version "2.0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pysendfile" version))
+       (sha256
+        (base32 "05qf0m32isflln1zjgxlpw0wf469lj86vdwwqyizp1h94x5l22ji"))))
+    (build-system python-build-system)
+    (arguments
+     (list
+      #:phases #~(modify-phases %standard-phases
+                   (replace 'check
+                     (lambda* (#:key tests? #:allow-other-keys)
+                       (when tests?
+                         (setenv "HOME" "/tmp")
+                         (invoke "make" "test")))))))
+    (home-page "https://github.com/giampaolo/pysendfile")
+    (synopsis "Python interface to sendfile(2)")
+    (description "The @{pysendfile} Python library provides an interface to
+the @code{sendfile(2)} system call.")
+    (license license:expat)))
+
+(define-public python-pyftpdlib
+  (package
+    (name "python-pyftpdlib")
+    (version "1.5.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pyftpdlib" version))
+       (sha256
+        (base32 "0pnv2byzmzg84q5nmmhn1xafvfil85qa5y52bj455br93zc5b9px"))))
+    (build-system python-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (invoke
+                 "pytest"
+                 ;; Deselect failing tests.
+                 "-k" (string-append
+                       ;; Using Pytest instead of the Makefile causes the
+                       ;; command line tests to fail on unknown Pytest
+                       ;; arguments.
+                       "not TestCommandLineParser "
+                       ;; https://github.com/giampaolo/pyftpdlib/issues/478
+                       "and not test_use_gmt_times "
+                       ;; https://github.com/giampaolo/pyftpdlib/issues/550
+                       "and not test_masquerade_address "
+                       ;; https://github.com/giampaolo/pyftpdlib/issues/500
+                       "and not test_rest_on_stor "
+                       "and not test_stor_ascii"))))))))
+    (native-inputs (list python-psutil python-pytest))
+    (propagated-inputs (list python-pyopenssl python-pysendfile))
+    (home-page "https://github.com/giampaolo/pyftpdlib/")
+    (synopsis "Asynchronous and scalable Python FTP server library")
+    (description "The Python FTP server library provides a high-level
+interface to write efficient, scalable and asynchronous FTP servers with
+Python.  It is the most complete @url{http://www.faqs.org/rfcs/rfc959.html,
+RFC-959} FTP server implementation available for Python, and has the following
+traits:
+@itemize
+@item
+It is lightweight, fast and scalable.
+@item
+It uses the @code{sendfile(2)} system call for uploads.
+@item
+It uses @code{epoll}, @code{kqueue} and @code{select} to handle concurrency
+asynchronously.
+@item
+It supports FTPS (@url{http://tools.ietf.org/html/rfc4217, RFC-4217}),
+IPv6 (RFC-2428), Unicode file names (@url{http://tools.ietf.org/html/rfc2640,
+RFC-2640}) and MLSD/MLST commands (RFC-3659).
+@item
+It has a flexible system of @samp{authorizers} able to manage both
+@samp{virtual} and @samp{real} users.
+@end itemize")
+    (license license:expat)))
+
+(define-public python-fs
+  (package
+    (name "python-fs")
+    (version "2.4.14")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "fs" version))
+       (sha256
+        (base32 "0v5kqzi0vd8ar4j4qf5440nzwa9dcagpxb3q6k0cln4cqlmxqmcm"))))
     (build-system python-build-system)
+    (arguments
+     (list
+      #:phases #~(modify-phases %standard-phases
+                   (replace 'check
+                     (lambda* (#:key tests? #:allow-other-keys)
+                       (when tests?
+                         (setenv "HOME" "/tmp")
+                         (invoke "pytest" "-m" "not slow")))))))
+    (propagated-inputs
+     (list python-appdirs python-pytz python-six))
     (native-inputs
-     `(("unzip" ,unzip)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
-    (home-page "https://github.com/fonttools/fonttools")
-    (synopsis "Tools to manipulate font files")
-    (description
-     "FontTools/TTX is a library to manipulate font files from Python.  It
+     (list python-mock python-parameterized python-pyftpdlib python-pytest))
+    (home-page "https://github.com/PyFilesystem/pyfilesystem2/")
+    (synopsis "File system abstraction layer for Python")
+    (description "PyFilesystem's @code{FS} object is a file system abstraction
+sharing similarities with Python's own @code{file} object for single files.
+It allows opening all the files under a given directory recursively, as a
+single @code{FS} object.  This enables, for example, counting the combined
+number of lines in the contained files easily.")
+    (license license:expat)))
+
+;;; Tests are left out in the main package to avoid cycles.
+(define-public python-fonttools
+  (hidden-package
+   (package
+     (name "python-fonttools")
+     (version "4.28.5")
+     (source (origin
+               (method url-fetch)
+               (uri (pypi-uri "fonttools" version ".zip"))
+               (sha256
+                (base32
+                 "1jhl5n3rfqq7fznvsh6r80n7ylap1a7ppq1040y8cflhyz80ap2l"))))
+     (build-system python-build-system)
+     (native-inputs
+      (list unzip))
+     (arguments '(#:tests? #f))
+     (home-page "https://github.com/fonttools/fonttools")
+     (synopsis "Tools to manipulate font files")
+     (description
+      "FontTools/TTX is a library to manipulate font files from Python.  It
 supports reading and writing of TrueType/OpenType fonts, reading and writing
 of AFM files, reading (and partially writing) of PS Type 1 fonts.  The package
 also contains a tool called “TTX” which converts TrueType/OpenType fonts to and
 from an XML-based format.")
-    (license license:expat)))
+     (license license:expat)
+     (properties `((python2-variant . ,(delay python2-fonttools)))))))
+
+(define-public python-fonttools-with-tests
+  (package/inherit python-fonttools
+    (arguments
+     (substitute-keyword-arguments (package-arguments python-fonttools)
+       ((#:tests? _ #f)
+        #t)
+       ((#:phases phases '%standard-phases)
+        `(modify-phases ,phases
+           (replace 'check
+             (lambda* (#:key tests? #:allow-other-keys)
+               (when tests?
+                 (invoke "pytest" "-vv"
+                         "-k"
+                         ;; XXX: These tests need .trm files that are
+                         ;; not shipped with the PyPI release.
+                         (format #f "not ~a"
+                                 (string-join
+                                  '("test_read_fontdimens_mathsy"
+                                    "test_read_fontdimens_mathex"
+                                    "test_read_fontdimens_vanilla"
+                                    "test_read_boundary_char"
+                                    "fontTools.tfmLib")
+                                  " and not "))))))))))
+    (native-inputs
+     (modify-inputs (package-native-inputs python-fonttools)
+       (append python-pytest            ;FIXME: indentation is broken
+           python-brotli
+         python-fs
+         python-scipy
+         python-zopfli)))
+    (properties (alist-delete 'hidden? (package-properties python-fonttools)))))
 
 ;; Fonttools 4.x dropped support for Python 2, so stick with 3.x here.
 (define-public python2-fonttools
@@ -10276,10 +11094,9 @@ third-party code.")
                 "1g2cdhdqrb6m7655qp61pn61pwj1ql61cdzhr2jvl3w4i8877ddr"))))
     (build-system python-build-system)
     (inputs
-     `(("fuse" ,fuse)
-       ("attr" ,attr)))
+     (list fuse attr))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "Python bindings for FUSE")
     (description
      "Python-LLFUSE is a set of Python bindings for the low level FUSE API.")
@@ -10296,13 +11113,13 @@ third-party code.")
 (define-public python-msgpack
   (package
     (name "python-msgpack")
-    (version "1.0.0")
+    (version "1.0.3")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "msgpack" version))
               (sha256
                (base32
-                "1h5mxh84rcw04dvxy1qbfn2hisavfqgilh9k09rgyjhd936dad4m"))))
+                "07m84yisf8m6gr68ip9v6vzxax7kqbn8qxg7ir18clk1jgxwgzai"))))
     (build-system python-build-system)
     (arguments
      `(#:modules ((guix build utils)
@@ -10314,16 +11131,9 @@ third-party code.")
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (let ((cwd (getcwd)))
-               (setenv "PYTHONPATH"
-                       (string-append cwd "/build/"
-                                      (find (cut string-prefix? "lib" <>)
-                                            (scandir (string-append cwd "/build")))
-                                      ":"
-                                      (getenv "PYTHONPATH")))
-             (invoke "pytest" "-v" "test")))))))
-    (native-inputs
-     `(("python-pytest" ,python-pytest)))
+             (invoke "pytest" "-v" "test"))))))
+    (native-inputs
+     (list python-pytest))
     (synopsis "MessagePack (de)serializer")
     (description "MessagePack is a fast, compact binary serialization format,
 suitable for similar data to JSON.  This package provides CPython bindings for
@@ -10355,6 +11165,11 @@ reading and writing MessagePack data.")
                (substitute* "setup.py"
                  (("TRANSITIONAL = False")
                    "TRANSITIONAL = 1"))
+               ;; This old version is not compatible with Python 3.9
+               (substitute* '("test/test_buffer.py" "test/test_extension.py")
+                 ((".tostring\\(") ".tobytes("))
+               (substitute* '("test/test_buffer.py" "test/test_extension.py")
+                 ((".fromstring\\(") ".frombytes("))
                #t))))))))
 
 (define-public python2-msgpack
@@ -10489,9 +11304,9 @@ Supported netlink families and protocols include:
                            (filter (lambda (f) (grep "from test." f))
                                    test-files)))))))))
     (propagated-inputs
-     `(("python-lark-parser" ,python-lark-parser)))
+     (list python-lark-parser))
     (native-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://github.com/vaidik/commentjson")
     (synopsis "Python library for adding comments to JSON files")
     (description "Comment JSON is a Python package that helps you create JSON
@@ -10524,9 +11339,7 @@ similar to the Python standard library's @code{json} module.")
                (add-installed-pythonpath inputs outputs)
                (invoke "pytest")))))))
     (native-inputs
-     `(("python-commentjson" ,python-commentjson)
-       ("python-packaging" ,python-packaging)
-       ("python-pytest" ,python-pytest)))
+     (list python-commentjson python-packaging python-pytest))
     (home-page "https://github.com/sarugaku/resolvelib")
     (synopsis "Abstract dependencies resolver")
     (description "The ResolveLib library provides a @code{Resolver} class that
@@ -10578,23 +11391,20 @@ native modules.")
 (define-public python-xlrd
   (package
     (name "python-xlrd")
-    (version "1.2.0")
+    (version "2.0.1")
     (source (origin
-              (method url-fetch)
-              (uri (pypi-uri "xlrd" version))
+              ;; The tests are not included in the PyPI archive.
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/python-excel/xlrd")
+                    (commit version)))
+              (file-name (git-file-name name version))
               (sha256
                (base32
-                "1ci93fda4n67qhdvfl16zasyxrpygzk53hs6m8z0rd4dxrnb6vjl"))))
+                "170asszffvf6rh5w169ic4h5kxgjkmdl3060vw737d4g1qfifvzz"))))
     (build-system python-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         ;; Some tests depend on writing a temporary file to the user's home
-         ;; directory.
-         (add-after 'unpack 'fix-tests
-           (lambda _
-             (delete-file "tests/test_open_workbook.py")
-             #t)))))
+    (native-inputs
+     (list python-pytest))
     (home-page "http://www.python-excel.org/")
     (synopsis "Library for extracting data from Excel files")
     (description "This package provides a library to extract data from
@@ -10606,6 +11416,7 @@ Unicode-aware.  It is not intended as an end-user tool.")
 (define-public python2-xlrd
   (package-with-python2 python-xlrd))
 
+;;; Note: this package is unmaintained since 2018 (archived on GitHub).
 (define-public python-xlwt
   (package
     (name "python-xlwt")
@@ -10623,9 +11434,9 @@ Unicode-aware.  It is not intended as an end-user tool.")
          (replace 'check
            (lambda* (#:key tests? #:allow-other-keys)
              (when tests?
-               (setenv "PYTHONPATH"
+               (setenv "GUIX_PYTHONPATH"
                        (string-append (getcwd) "/build/lib:"
-                                      (getenv "PYTHONPATH")))
+                                      (getenv "GUIX_PYTHONPATH")))
                (invoke "nosetests" "-v")))))))
     (native-inputs
      `(("nose" ,python-nose)))
@@ -10683,25 +11494,30 @@ printing of sub-tables by specifying a row range.")
 (define-public python-curio
   (package
     (name "python-curio")
-    (version "1.2")
+    (version "1.5")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "curio" version))
        (sha256
-        (base32 "16wkww6kh511b9bzsfhpvrv0766cc6ssgbzz4lgpjnrzzgx21wwh"))))
+        (base32 "045wwg16qadsalhicbv21p14sj8i4w0l57639j7dmdqbb4p2225g"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (add-installed-pythonpath inputs outputs)
-             (invoke "pytest" "-vv" "-k"
-                     ;; Tries to open an outgoing connection.
-                     "not test_ssl_outgoing"))))))
+           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "pytest" "-vv" "-k"
+                       (string-append
+                        ;; Tries to open an outgoing connection.
+                        "not test_ssl_outgoing "
+                        ;; This test fails since Python 3.9.9 (see:
+                        ;; https://github.com/dabeaz/curio/issues/347).
+                        "and not test_timeout"))))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/dabeaz/curio")
     (synopsis "Coroutine-based library for concurrent Python")
     (description
@@ -10764,15 +11580,11 @@ tasks, sockets, files, locks, and queues.")
                      (string-append "--hdf5="
                                     (assoc-ref inputs "hdf5"))))))))
     (propagated-inputs
-     `(("python-numexpr" ,python-numexpr)
-       ("python-numpy" ,python-numpy)))
+     (list python-numexpr python-numpy))
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("pkg-config" ,pkg-config)))
+     (list python-cython pkg-config))
     (inputs
-     `(("hdf5" ,hdf5-1.10)
-       ("bzip2" ,bzip2)
-       ("zlib" ,zlib)))
+     (list hdf5-1.10 bzip2 zlib))
     (home-page "https://www.pytables.org/")
     (synopsis "Hierarchical datasets for Python")
     (description "PyTables is a package for managing hierarchical datasets and
@@ -10797,9 +11609,7 @@ designed to efficiently cope with extremely large amounts of data.")
            (lambda _
              (invoke "pytest" "-vv"))))))
     (native-inputs
-     `(("python-curio" ,python-curio)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)))
+     (list python-curio python-pytest python-pytest-cov))
     (home-page "https://github.com/python-trio/sniffio")
     (synopsis "Detect which async library a program is running under")
     (description "This package detects which async library a program is
@@ -10821,11 +11631,9 @@ asyncio.")
          "04lppqydxm0f3f3x0l8hj7v0j6d8syj34jc37yzqwqcyqsnaga81"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-black" ,python-black)
-       ("python-toml" ,python-toml)))
+     (list python-pytest python-black python-toml))
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-setuptools-scm))
     (home-page "https://github.com/shopkeep/pytest-black")
     (synopsis "Pytest plugin to enable format checking with black")
     (description
@@ -10846,12 +11654,12 @@ Python code formatter \"black\".")
          "1g15jyx33vkxavv9hwv275cs4g9bp2i1y942raw3fxamq8kbaml1"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pygments" ,python-pygments)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-black" ,python-pytest-black)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-setuptools" ,python-setuptools)
-       ("python-testpath" ,python-testpath)))
+     (list python-pygments
+           python-pytest
+           python-pytest-black
+           python-pytest-cov
+           python-setuptools
+           python-testpath))
     (home-page "https://github.com/flying-sheep/get_version")
     (synopsis "Version helper in the spirit of versioneer")
     (description
@@ -10862,6 +11670,94 @@ your package is installed, via @code{pkg_resources} (part of
 @code{setuptools}).")
     (license license:gpl3+)))
 
+(define-public python-filetype
+  (package
+    (name "python-filetype")
+    (version "1.0.8")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "filetype" version))
+       (sha256
+        (base32 "05mkinkcn36v1cnb5hzay3zxmv7jmmflckxxp08rgzbkkf3i9pvp"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "python" "-m" "pytest" "-k"
+                       (string-append
+                        ;; Both tests fail with FileNotFoundError.
+                        "not test_infer_zip_from_disk"
+                        " and not test_infer_tar_from_disk"))))))))
+    (native-inputs
+     (list python-pytest python-pytest-benchmark))
+    (home-page "https://github.com/h2non/filetype.py")
+    (synopsis "Infer file type and MIME type of any file/buffer")
+    (description "@code{filetype} is a small and dependency free Python
+package to infer file type and MIME type checking the magic numbers
+signature of a file or buffer.")
+    (license license:expat)))
+
+(define-public python-cachelib
+  (package
+    (name "python-cachelib")
+    (version "0.4.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "cachelib" version))
+       (sha256
+        (base32 "0p4chkvbvffcllsny5rpzmsq2vyr24ql3kzif4ha0fxp3fp7vqk8"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "pytest")))))))
+    (native-inputs
+     (list python-pytest python-pytest-xprocess))
+    (home-page "https://github.com/pallets/cachelib")
+    (synopsis "Collection of cache libraries")
+    (description "Cachelib is a library extracted from @code{werkzeug} which
+provides a collection of cache libraries in the same API interface.")
+    (license license:bsd-3)))
+
+(define-public python-pylru
+  (package
+    (name "python-pylru")
+    (version "1.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pylru" version))
+       (sha256
+        (base32 "15yj46307sw703vjfkgnr04dqvaicmfcj0hc6yrciildp55r6bs9"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "python" "test.py")))))))
+    (home-page "https://github.com/jlhutch/pylru")
+    (synopsis "Least recently used (LRU) cache implementation")
+    (description
+     "Pylru implements a true LRU cache along with several support classes.
+Pylru provides a cache class with a simple dict interface.  It also provides
+classes to wrap any object that has a dict interface with a cache.  Both
+write-through and write-back semantics are supported.  Pylru also provides
+classes to wrap functions in a similar way, including a function decorator.")
+    (license license:gpl2+)))
+
 (define-public python-legacy-api-wrap
   (package
     (name "python-legacy-api-wrap")
@@ -10875,11 +11771,8 @@ your package is installed, via @code{pkg_resources} (part of
          "06qhp0g543dy98vpa41hwdalvdbsjfc3ldk474yr9sd75mhl8jh3"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-get-version" ,python-get-version)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-black" ,python-pytest-black)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-setuptools" ,python-setuptools)))
+     (list python-get-version python-pytest python-pytest-black
+           python-pytest-cov python-setuptools))
     (home-page "https://github.com/flying-sheep/legacy-api-wrap")
     (synopsis "Legacy API wrapper")
     (description "This module defines a decorator to wrap legacy APIs.  The
@@ -10898,7 +11791,7 @@ primary use case is APIs defined before keyword-only parameters existed.")
         (base32 "1805svvb7xjm4sf1j7b6nc3409x37pd1xmabfwwjf1ldkzwgxhfb"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://github.com/Mimino666/langdetect")
     (synopsis "Language detection library")
     (description
@@ -10931,17 +11824,17 @@ suitable for a wide range of protocols based on the ASN.1 specification.")
 (define-public python-pyasn1-modules
   (package
     (name "python-pyasn1-modules")
-    (version "0.2.2")
+    (version "0.2.8")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "pyasn1-modules" version))
         (sha256
          (base32
-          "0ivm850yi7ajjbi8j115qpsj95bgxdsx48nbjzg0zip788c3xkx0"))))
+          "0pp6dcagd8c2c9qx3lahc1rdwlnmm0y0siqr5icjq2r32b3q8pwh"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pyasn1" ,python-pyasn1)))
+     (list python-pyasn1))
     (home-page "https://sourceforge.net/projects/pyasn1/")
     (synopsis "ASN.1 codec implementations")
     (description
@@ -10952,9 +11845,9 @@ implementations of ASN.1-based codecs and protocols.")
 (define-public python2-pyasn1-modules
   (package-with-python2 python-pyasn1-modules))
 
-(define-public python2-ipaddress
+(define-public python-ipaddress
   (package
-    (name "python2-ipaddress")
+    (name "python-ipaddress")
     (version "1.0.23")
     (source (origin
               (method url-fetch)
@@ -10963,17 +11856,17 @@ implementations of ASN.1-based codecs and protocols.")
                (base32
                 "1qp743h30s04m3cg3yk3fycad930jv17q7dsslj4mfw0jlvf1y5p"))))
     (build-system python-build-system)
-    (arguments
-     `(#:python ,python-2))
     (home-page "https://github.com/phihag/ipaddress")
     (synopsis "IP address manipulation library")
     (description
       "This package provides a fast, lightweight IPv4/IPv6 manipulation library
  in Python.  This library is used to create, poke at, and manipulate IPv4 and
- IPv6 addresses and networks.  This is a port of the Python 3.3 ipaddress
- module to older versions of Python.")
+ IPv6 addresses and networks.")
     (license license:psfl)))
 
+(define-public python2-ipaddress
+  (package-with-python2 python-ipaddress))
+
 (define-public python-asn1tools
   (package
     (name "python-asn1tools")
@@ -10986,10 +11879,8 @@ implementations of ASN.1-based codecs and protocols.")
         (base32 "1k88a1azmyvp2ab6qcf2i40dig5abhyn7cmlyhmwwh8kr3syvma0"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-bitstruct" ,python-bitstruct)
-       ("python-diskcache" ,python-diskcache)
-       ("python-prompt-toolkit" ,python-prompt-toolkit)
-       ("python-pyparsing" ,python-pyparsing)))
+     (list python-bitstruct python-diskcache python-prompt-toolkit
+           python-pyparsing))
     (home-page "https://github.com/eerimoq/asn1tools")
     (synopsis  "ASN.1 parsing, encoding and decoding")
     (description "This package provides ASN.1 parsing, encoding and decoding
@@ -11092,12 +11983,11 @@ specification.")
              (add-installed-pythonpath inputs outputs)
              (invoke "pytest" "sasstests.py"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-werkzeug" ,python-werkzeug)))
+     (list python-pytest python-werkzeug))
     (inputs
-     `(("libsass" ,libsass)))
+     (list libsass))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://sass.github.io/libsass-python/")
     (synopsis "Straightforward binding of libsass for Python")
     (description
@@ -11119,6 +12009,7 @@ is binding LibSass.")
     (build-system python-build-system)
     (arguments
      `(#:tests? #f))          ;circular dependency with python-aiohttp
+    (propagated-inputs (list python-idna))
     (home-page "https://github.com/aio-libs/idna-ssl")
     (synopsis "Patch @code{ssl.match_hostname} for Unicode(idna) domains support")
     (description "Patch @code{ssl.match_hostname} for Unicode(idna)
@@ -11287,10 +12178,9 @@ applications from a list of lists of strings.  It supports multi-line rows.")
                   (replace 'check
                     (lambda _ (invoke "pytest" "-vv"))))))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)))
+     (list python-mock python-pytest))
     (inputs
-     `(("libarchive" ,libarchive)))
+     (list libarchive))
     (home-page "https://github.com/Changaco/python-libarchive-c")
     (synopsis "Python interface to libarchive")
     (description
@@ -11364,8 +12254,7 @@ libmagic.")))
                       (delete-file "lib/debian/tests/test_debfile.py")
                       #t)))))
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-chardet" ,python-chardet)))
+     (list python-six python-chardet))
     (synopsis "Debian package related modules")
     (description
      ;; XXX: Use @enumerate instead of @itemize to work around
@@ -11399,10 +12288,9 @@ Debian-related files, such as:
             "06dpbsq61ja9r89wpa2pzdii47qh3xri9ajdrgn1awfl102znchb"))))
     (build-system python-build-system)
     (propagated-inputs
-      `(("python-pathlib" ,python-pathlib)
-        ("python-six" ,python-six)))
+      (list python-pathlib python-six))
     (native-inputs
-      `(("python-pytest" ,python-pytest)))
+      (list python-pytest))
     (home-page "http://py.errorist.io/json-spec")
     (synopsis
       "JSON Schema, JSON Pointer and JSON Reference for Python")
@@ -11431,15 +12319,14 @@ JSON Reference and JSON Pointer.")
             (when tests?
               (invoke "pytest" "-vv" "-m" "not benchmark")))))))
     (native-inputs
-      `(("python-colorama" ,python-colorama)
-        ("python-json-spec" ,python-json-spec)
-        ("python-jsonschema" ,python-jsonschema)
-        ("python-pylint" ,python-pylint)
-        ("python-pytest" ,python-pytest-6)
-        ("python-pytest-benchmark"
-         ,python-pytest-benchmark)
-        ("python-pytest-cache" ,python-pytest-cache)
-        ("python-validictory" ,python-validictory)))
+      (list python-colorama
+            python-json-spec
+            python-jsonschema
+            python-pylint
+            python-pytest
+            python-pytest-benchmark
+            python-pytest-cache
+            python-validictory))
     (home-page
       "https://github.com/horejsek/python-fastjsonschema")
     (synopsis
@@ -11472,49 +12359,66 @@ drafts 04, 06 and 07.")
              (when tests?
                (invoke "pytest" "-vv")))))))
     (propagated-inputs
-     `(("python-ipython-genutils" ,python-ipython-genutils)
-       ("python-jsonschema" ,python-jsonschema)
-       ("python-jupyter-core" ,python-jupyter-core)
-       ("python-traitlets" ,python-traitlets)))
+     (list python-ipython-genutils python-jsonschema python-jupyter-core
+           python-traitlets))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-fastjsonschema" ,python-fastjsonschema) ; This is only active
-       ; when setting NBFORMAT_VALIDATOR="fastjsonschema", so include it for
-       ; testing only.
-       ("python-testpath" ,python-testpath)))
+     (list python-pytest
+           python-fastjsonschema ; This is only active
+           ; when setting NBFORMAT_VALIDATOR="fastjsonschema", so include it for
+           ; testing only.
+           python-testpath))
     (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.")
     (license license:bsd-3)))
 
+(define-public python-nb-clean
+  (package
+    (name "python-nb-clean")
+    (version "2.1.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "nb-clean" version))
+        (sha256
+          (base32 "01qvk9n7rx15dhc23m8bj9bw5wdyxh6y18c5fm8hllmrd3ndsx14"))))
+    (build-system python-build-system)
+    (propagated-inputs (list python-nbformat))
+    (home-page "https://github.com/srstevenson/nb-clean")
+    (synopsis "Clean Jupyter notebooks for versioning")
+    (description "This package cleans Jupyter notebooks of cell execution
+counts, metadata, outputs, and empty cells, preparing them for committing to
+version control.  It provides a Git filter to automatically clean notebooks
+before they're staged, and can also be used with other version control
+systems, as a command line tool, and as a Python library.")
+    (license license:isc)))
+
 (define-public python-bleach
   (package
     (name "python-bleach")
-    (version "3.1.5")
+    (version "4.1.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "bleach" version))
        (sha256
-        (base32 "0jqa8f1ni10cyf4h7sjpf8mbqlcbkyvmsnli77qrxdcxvc7m4k1w"))))
+        (base32 "1nkibazmw1ry4cfxs9qrkkidxdf2z1hh1b20xq1ahqdsgsrxh009"))))
     (build-system python-build-system)
+    (arguments
+     '(#:phases (modify-phases %standard-phases
+                  (replace 'check
+                    (lambda* (#:key tests? #:allow-other-keys)
+                      (when tests? (invoke "pytest" "-vv")))))))
     (propagated-inputs
-     `(("python-webencodings" ,python-webencodings)
-       ("python-six" ,python-six)))
+     (list python-packaging python-six python-webencodings))
     (native-inputs
-     `(("python-datrie" ,python-datrie)
-       ("python-genshi" ,python-genshi)
-       ("python-lxml" ,python-lxml)
-       ("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/mozilla/bleach")
     (synopsis "Whitelist-based HTML-sanitizing tool")
     (description "Bleach is an easy whitelist-based HTML-sanitizing tool.")
     (license license:asl2.0)))
 
-(define-public python2-bleach
-  (package-with-python2 python-bleach))
-
 (define-public python-entrypoints
   (package
     (name "python-entrypoints")
@@ -11548,10 +12452,15 @@ objects with some common interface.  The most common examples are
 @code{console_scripts} entry points, which define shell commands by
 identifying a Python function to run.  The @code{entrypoints} module contains
 functions to find and load entry points.")
-    (license license:expat)))
+    (license license:expat)
+    (properties `((python2-variant . ,(delay python2-entrypoints))))))
 
 (define-public python2-entrypoints
-  (package-with-python2 python-entrypoints))
+  (package
+    (inherit (package-with-python2
+              (strip-python2-variant python-entrypoints)))
+    (propagated-inputs
+     (list python2-configparser))))
 
 (define-public python-epc
   (package
@@ -11566,9 +12475,9 @@ functions to find and load entry points.")
          "09bx1ln1bwa00917dndlgs4k589h8qx2x080xch5m58p92kjwkd1"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-sexpdata" ,python-sexpdata)))
+     (list python-sexpdata))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (home-page "https://github.com/tkf/python-epc")
     (synopsis "Remote procedure call (RPC) stack for Emacs Lisp and Python")
     (description
@@ -11592,8 +12501,7 @@ from elisp.")
      ;; repository require online data.
      `(#:tests? #f))
     (propagated-inputs
-     `(("python-requests" ,python-requests)
-       ("python-simplejson" ,python-simplejson)))
+     (list python-requests python-simplejson))
     (home-page "https://github.com/MicroPyramid/forex-python")
     (synopsis "Foreign exchange rates and currency conversion")
     (description
@@ -11616,13 +12524,13 @@ Features:
 (define-public python-simpleeval
   (package
     (name "python-simpleeval")
-    (version "0.9.10")
+    (version "0.9.12")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "simpleeval" version))
        (sha256
-        (base32 "1skvl467kj83rzkhk01i0wm8m5vmh6j5znrfdizn6r18ii45a839"))))
+        (base32 "0diysdzvx865yy2rjfah75ha2qfxaxz7r108kp7j2kkd903ya2ry"))))
     (build-system python-build-system)
     (home-page "https://github.com/danthedeckie/simpleeval")
     (synopsis "Simple, safe single expression evaluator library")
@@ -11678,8 +12586,6 @@ time.")
              (when tests?
                ;; Some tests invoke the installed nbconvert binary.
                (add-installed-pythonpath inputs outputs)
-               ;; Tries to write to this path.
-               (unsetenv "JUPYTER_CONFIG_DIR")
                ;; Tests depend on templates installed to output.
                (setenv "JUPYTER_PATH"
                        (string-append
@@ -11690,10 +12596,10 @@ time.")
                (setenv "HOME" "/tmp")
                (invoke "pytest" "-vv")))))))
     (inputs
-     `(("pandoc" ,pandoc)
-       ;; XXX: Disabled, needs substitute*.
-       ;;("inkscape" ,inkscape)
-       ))
+     (list pandoc
+           ;; XXX: Disabled, needs substitute*.
+           ;;("inkscape" ,inkscape)
+           ))
     (native-inputs
      `(("python-ipykernel" ,python-ipykernel)
        ;; XXX: Disabled, not in guix.
@@ -11701,52 +12607,54 @@ time.")
        ("python-pytest" ,python-pytest)
        ("python-pytest-cov" ,python-pytest-cov)
        ("python-pytest-dependency" ,python-pytest-dependency)
-       ("texlive" ,(texlive-union (list texlive-adjustbox
-                                        texlive-amsfonts/patched
+       ("texlive" ,(texlive-updmap.cfg (list texlive-adjustbox
+                                        texlive-amsfonts
                                         texlive-booktabs
                                         texlive-caption
                                         texlive-eurosym
                                         texlive-fonts-rsfs
                                         texlive-generic-ulem
-                                        texlive-iftex
+                                        texlive-generic-iftex
                                         texlive-jknappen
                                         texlive-latex-amsmath
                                         texlive-latex-enumitem
                                         texlive-latex-fancyvrb
                                         texlive-latex-float
-                                        texlive-latex-fontspec
+                                        texlive-fontspec
                                         texlive-latex-geometry
-                                        texlive-latex-hyperref
+                                        texlive-grffile
+                                        texlive-hyperref
                                         texlive-latex-jknapltx
                                         texlive-latex-ms
-                                        texlive-latex-oberdiek
+                                        texlive-oberdiek
                                         texlive-latex-parskip
                                         texlive-latex-trimspaces
                                         texlive-latex-upquote
                                         texlive-latex-ucs
                                         texlive-lm
                                         texlive-mathpazo
+                                        texlive-stringenc
                                         texlive-tcolorbox
                                         texlive-titling
                                         texlive-tools
                                         texlive-xcolor
                                         texlive-zapfding)))))
     (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)
-       ;; Required, even if [serve] is not used.
-       ("python-tornado" ,python-tornado-6)))
+     (list python-bleach
+           python-defusedxml
+           python-entrypoints
+           python-jinja2
+           python-jupyter-core
+           python-mistune
+           python-nbclient
+           python-nbformat
+           python-pandocfilters
+           python-pygments
+           python-jupyterlab-pygments
+           python-testpath
+           python-traitlets
+           ;; Required, even if [serve] is not used.
+           python-tornado-6))
     (home-page "https://jupyter.org")
     (synopsis "Converting Jupyter Notebooks")
     (description "The @code{nbconvert} tool, @{jupyter nbconvert}, converts
@@ -11778,44 +12686,55 @@ convert an @code{.ipynb} notebook file into various static formats including:
     (arguments
      `(#:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'use-our-home-for-tests
+           (lambda _
+             ;; The 'get_patch_env' function in this file reads:
+             ;;   'HOME': cls.home_dir
+             ;; but for some reason, that definition of HOME is not what the
+             ;; GLib/GIO trash mechanism honors, which would cause test
+             ;; failures.  Instead, set 'HOME' here to an existing directory
+             ;; and let the tests honor it.
+             (substitute* "notebook/tests/launchnotebook.py"
+               (("'HOME': .*," all)
+                (string-append "# " all "\n")))
+             (setenv "HOME" (getcwd))))
          (replace 'check
            (lambda* (#:key tests? inputs outputs #:allow-other-keys)
              ;; These tests require a browser
              (delete-file-recursively "notebook/tests/selenium")
              (when tests?
                (add-installed-pythonpath inputs outputs)
+               ;; Interferes with test expectations.
+               (unsetenv "JUPYTER_CONFIG_PATH")
                ;; Some tests do not expect all files to be installed in the
                ;; same directory, but JUPYTER_PATH contains multiple entries.
                (unsetenv "JUPYTER_PATH")
-               ;; 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-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-tornado" ,python-tornado-6)
-       ("python-traitlets" ,python-traitlets)))
-    (native-inputs
-     `(("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)))
+               (invoke "pytest" "-vv"
+                       ;; TODO: This tests fails because nbconvert does not
+                       ;; list "python" as a format.
+                       "-k" "not test_list_formats")))))))
+    (propagated-inputs
+     (list python-argon2-cffi
+           python-ipykernel
+           python-ipython-genutils
+           python-jinja2
+           python-jupyter-client
+           python-jupyter-core
+           python-nbconvert
+           python-nbformat
+           python-prometheus-client
+           python-pyzmq
+           python-send2trash
+           python-terminado
+           python-tornado-6
+           python-traitlets))
+    (native-inputs
+     (list python-coverage
+           python-nbval
+           python-pytest
+           python-pytest-cov
+           python-requests
+           python-requests-unixsocket))
     (home-page "https://jupyter.org/")
     (synopsis "Web-based notebook environment for interactive computing")
     (description
@@ -11836,7 +12755,7 @@ interactive computing.")
          "1ismyaxbv9d56yqqqb8xl58hg0iq0bbyy014a53y1g3hfbc8g7q7"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-notebook" ,python-notebook)))
+     (list python-notebook))
     (home-page "https://ipython.org")
     (synopsis "IPython HTML widgets for Jupyter")
     (description "This package provides interactive HTML widgets for Jupyter
@@ -11856,16 +12775,14 @@ notebooks.")
          "1w217j8i53x14l7b05fk300k222zs9vkcjaa1rbrw3sk43k466lz"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("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)))
+     (list python-ipykernel
+           python-ipython
+           python-jupyterlab-widgets
+           python-nbformat
+           python-traitlets
+           python-widgetsnbextension))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)))
+     (list python-mock python-pytest python-pytest-cov))
     (home-page "https://ipython.org")
     (synopsis "IPython HTML widgets for Jupyter")
     (description "Ipywidgets are interactive HTML widgets for Jupyter
@@ -11877,22 +12794,20 @@ in the data.")
 (define-public python-jupyter-console
   (package
     (name "python-jupyter-console")
-    (version "6.1.0")
+    (version "6.4.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "jupyter_console" version))
        (sha256
         (base32
-         "06s3kr5vx0l1y1b7fxb04dmrppscl7q69sl9yyfr0d057d1ssvkg"))))
+         "1iqrxhd8hvlyf8cqbc731ssnwm61wrycnbiczy5wsfahd3hlh8i4"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-ipykernel" ,python-ipykernel)
-       ("python-jupyter-client" ,python-jupyter-client)
-       ("python-prompt-toolkit" ,python-prompt-toolkit-2)
-       ("python-pygments" ,python-pygments)))
+     (list python-ipykernel python-jupyter-client python-prompt-toolkit-2
+           python-pygments))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose python-pytest))
     (home-page "https://jupyter.org")
     (synopsis "Jupyter terminal console")
     (description "This package provides a terminal-based console frontend for
@@ -11928,33 +12843,30 @@ Jupyter kernels such as IJulia and IRKernel.")
 (define-public python-qtconsole
   (package
     (name "python-qtconsole")
-    (version "4.4.3")
+    (version "4.7.7")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "qtconsole" version))
        (sha256
-        (base32
-         "1b03n1ixzscm0jw97l4dq5iy4fslnqxq5bb8287xb7n2a1gs26xw"))))
+        (base32 "013qgpsm8jzcz3prhq7sxs36l8f7fgagmn3xa010gfhxf7cfldpj"))))
     (build-system python-build-system)
     (arguments
-     ;; XXX: Tests are disabled, because this package needs python-ipython 7,
-     ;; but we only have the LTS version 5.x.  This means that there might be
-     ;; runtime errors, but since this is a dependency of the Jupyter package,
-     ;; and Jupyter can be used without the qtconsole we can overlook this for
-     ;; now.
-     `(#:tests? #f
-       #:phases
+     `(#:phases
        (modify-phases %standard-phases
          (add-before 'check 'pre-check
            (lambda _
              (setenv "QT_QPA_PLATFORM" "offscreen")
-             #t)))))
+             (setenv "HOME" "/tmp")
+             ;; FIXME: skip a failing test.
+             (substitute* "qtconsole/tests/test_jupyter_widget.py"
+               (("def test_other_output") "def _test_other_output")))))))
     (propagated-inputs
-     `(("python-ipykernel" ,python-ipykernel)
-       ("python-ipython" ,python-ipython)))
+     (list python-ipykernel python-ipython-genutils python-jupyter-client
+           python-jupyter-core python-pygments python-pyqt python-pyzmq
+           python-qtpy python-traitlets))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-flaky python-pytest))
     (home-page "https://jupyter.org")
     (synopsis "Jupyter Qt console")
     (description "This package provides a Qt-based console for Jupyter with
@@ -11991,10 +12903,9 @@ support for rich media output.")
                          "six>=1.11.0"))
                       #t)))))
     (propagated-inputs
-     `(("python-editorconfig" ,python-editorconfig)
-       ("python-six" ,python-six)))
+     (list python-editorconfig python-six))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (synopsis "JavaScript unobfuscator and beautifier")
     (description "Beautify, unpack or deobfuscate JavaScript, leveraging
 popular online obfuscators.")
@@ -12014,12 +12925,12 @@ popular online obfuscators.")
     (build-system python-build-system)
     (arguments '(#:tests? #f)) ; there are none.
     (propagated-inputs
-     `(("python-ipykernel" ,python-ipykernel)
-       ("python-ipywidgets" ,python-ipywidgets)
-       ("python-jupyter-console" ,python-jupyter-console)
-       ("python-nbconvert" ,python-nbconvert)
-       ("python-notebook" ,python-notebook)
-       ("python-qtconsole" ,python-qtconsole)))
+     (list python-ipykernel
+           python-ipywidgets
+           python-jupyter-console
+           python-nbconvert
+           python-notebook
+           python-qtconsole))
     (home-page "https://jupyter.org")
     (synopsis "Web application for interactive documents")
     (description
@@ -12041,9 +12952,7 @@ simulation, statistical modeling, machine learning and much more.")
         (base32
          "1bpalpia6r5x1kknbk11p1fzph56fmmnp405ds8icksd3knr5aw4"))))
     (native-inputs
-     `(("python-hypothesis" ,python-hypothesis)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-hypothesis python-pytest python-pytest-runner))
     (build-system python-build-system)
     ;; XXX: Incompatible with Pytest 4: <https://github.com/chardet/chardet/issues/173>.
     (arguments `(#:tests? #f))
@@ -12069,7 +12978,7 @@ automatically detect a wide range of file encodings.")
         (base32 "0rr3iv2xw4rz5ijnfqk229fw85cq6p6rhqqsilm0ldzncblfg63h"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/ousret/charset_normalizer")
     (synopsis "Universal Charset Detector, alternative to Chardet")
     (description "This library helps you read text from an unknown charset
@@ -12092,15 +13001,18 @@ library provides codecs are supported.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0aad9gbswnnhssin2q0m5lmpm0ahyf80ahs2zjigbn5y7fvljnd0"))))
+         "0aad9gbswnnhssin2q0m5lmpm0ahyf80ahs2zjigbn5y7fvljnd0"))
+       (patches (search-patches "python-docopt-pytest6-compat.patch"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda _ (invoke "py.test"))))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "py.test")))))))
     (home-page "http://docopt.org")
     (synopsis "Command-line interface description language for Python")
     (description "This library allows the user to define a command-line
@@ -12112,6 +13024,54 @@ programmatically with command-line parsers like @code{getopt} and
 (define-public python2-docopt
   (package-with-python2 python-docopt))
 
+(define-public python-pythonanywhere
+  (package
+    (name "python-pythonanywhere")
+    (version "0.9.10")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/pythonanywhere/helper_scripts")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+          (base32
+           "0vzzc1g8pl7cb9yvm3n1j5zlzxf0jd423rzspc2kvpb8yhvydklx"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'change-home
+           (lambda _
+             (setenv "HOME" "/tmp")))
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               ;; Exclude tests marked as slowtest that assume running
+               ;; inside Git repository on system with virtualenvwrapper
+               ;; installed.
+               (invoke "pytest" "-m" "not slowtest")))))))
+    (native-inputs
+      (list python-pytest
+            python-psutil
+            python-responses
+            python-pytest-mock))
+    (propagated-inputs
+      (list python-dateutil
+            python-docopt
+            python-packaging
+            python-requests
+            python-schema
+            python-tabulate
+            python-typer))
+    (home-page "https://github.com/pythonanywhere/helper_scripts/")
+    (synopsis "PythonAnywhere helper tools for users")
+    (description "PythonAnywhere provides a command-line interface and an
+application programming interface that allows managing Web apps and scheduled
+tasks.  It includes single-command deployment for the Django Girls tutorial.")
+    (license license:expat)))
+
 (define-public python-pythondialog
   (package
     (name "python-pythondialog")
@@ -12138,7 +13098,7 @@ programmatically with command-line parsers like @code{getopt} and
                #t))))
        #:tests? #f)) ; no test suite
     (propagated-inputs
-     `(("dialog" ,dialog)))
+     (list dialog))
     (home-page "http://pythondialog.sourceforge.net/")
     (synopsis "Python interface to the UNIX dialog utility")
     (description "A Python wrapper for the dialog utility.  Its purpose is to
@@ -12174,7 +13134,7 @@ This allows one to make simple text-mode user interfaces on Unix-like systems")
               (patches (search-patches "python-configobj-setuptools.patch"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (synopsis "Config file reading, writing and validation")
     (description "ConfigObj is a simple but powerful config file reader and
 writer: an ini file round tripper.  Its main feature is that it is very easy to
@@ -12198,7 +13158,7 @@ config files.")
                 "1p1pzpf5qpf80bfxsx1mbw9blyhhypjvhl3i60pbmhfmhvlpplgd"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pyyaml" ,python-pyyaml)))
+     (list python-pyyaml))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -12286,22 +13246,23 @@ the standard library.")
 (define-public python-texttable
   (package
     (name "python-texttable")
-    (version "1.6.2")
+    (version "1.6.4")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "texttable" version))
        (sha256
         (base32
-         "1x5l77akfc20x52jma9573qp8l8r07q103pm4l0pbizvh4vp1wzg"))))
+         "1sbn821394rix6xgj3zqk743pj6nqm1qz81zgis2bcpp2ng7pvj2"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda _ (invoke "pytest" "tests.py"))))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests? (invoke "pytest" "-vv" "tests.py")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/foutaise/texttable/")
     (synopsis "Python module for creating simple ASCII tables")
     (description "Texttable is a Python module for creating simple ASCII
@@ -12314,14 +13275,15 @@ tables.")
 (define-public python-atomicwrites
   (package
     (name "python-atomicwrites")
-    (version "1.3.0")
+    (version "1.4.0")
     (source (origin
              (method url-fetch)
              (uri (pypi-uri "atomicwrites" version))
              (sha256
               (base32
-               "19ngcscdf3jsqmpcxn6zl5b6anmsajb6izp1smcd1n02midl9abm"))))
+               "0yla2svfhfqrcj8qbyqzx7wi4jy0dwcxvlkg0k3zjd54s5m3jw5f"))))
     (build-system python-build-system)
+    (arguments `(#:tests? #f))          ;avoid circular dependency with pytest
     (synopsis "Atomic file writes in Python")
     (description "Library for atomic file writes using platform dependent tools
 for atomic file system operations.")
@@ -12331,6 +13293,17 @@ for atomic file system operations.")
 (define-public python2-atomicwrites
   (package-with-python2 python-atomicwrites))
 
+(define-public python-atomicwrites-1.4
+  (package
+    (inherit python-atomicwrites)
+    (version "1.4.0")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "atomicwrites" version))
+              (sha256
+               (base32
+                "0yla2svfhfqrcj8qbyqzx7wi4jy0dwcxvlkg0k3zjd54s5m3jw5f"))))))
+
 (define-public python-qstylizer
   (package
     (name "python-qstylizer")
@@ -12353,16 +13326,15 @@ for atomic file system operations.")
            (lambda _
              (setenv "PBR_VERSION" "3.0.1"))))))
     (native-inputs
-     `(("python-pbr" ,python-pbr)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-catchlog" ,python-pytest-catchlog)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-mock" ,python-pytest-mock)
-       ("python-pytest-runner" ,python-pytest-runner)
-       ("python-pytest-xdist" ,python-pytest-xdist)))
+     (list python-pbr
+           python-pytest
+           python-pytest-catchlog
+           python-pytest-cov
+           python-pytest-mock
+           python-pytest-runner
+           python-pytest-xdist))
     (propagated-inputs
-     `(("python-inflection" ,python-inflection)
-       ("python-tinycss" ,python-tinycss)))
+     (list python-inflection python-tinycss))
     (home-page "https://github.com/blambright/qstylizer")
     (synopsis "Qt stylesheet generation utility for PyQt/PySide")
     (description "@code{qstylizer} is a Python package designed to help with
@@ -12372,16 +13344,16 @@ the construction of PyQt/PySide stylesheets.")
 (define-public python-click-threading
   (package
     (name "python-click-threading")
-    (version "0.4.4")
+    (version "0.5.0")
     (source (origin
              (method url-fetch)
              (uri (pypi-uri "click-threading" version))
              (sha256
               (base32
-               "1rsxc2fbkxlhwhlmxsdjzq3spn284l6rvjfcz9mbb17ibgdgmc5j"))))
+               "0f9lmxwcq0y9lb8w0whbni7gwy12gbv74h1igh85qn9aq0iydkxd"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-click" ,python-click)))
+     (list python-click))
     (synopsis "Utilities for multithreading in Click")
     (description "This package provides utilities for multithreading in Click
 applications.")
@@ -12400,7 +13372,7 @@ applications.")
                "091i03bhxyzsdbc6kilxhivfda2f8ymz3b33xa6cj5kbzjiirz8n"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-click" ,python-click)))
+     (list python-click))
     (synopsis "Logging for click applications")
     (description "This package provides a Python library for logging Click
 applications.")
@@ -12421,7 +13393,7 @@ applications.")
     (arguments
       `(#:tests? #f)) ; no target
     (propagated-inputs
-     `(("python-click" ,python-click)))
+     (list python-click))
     (synopsis "Extends click.Group")
     (description "This package extends click.Group to invoke a command without
 explicit subcommand name.")
@@ -12450,13 +13422,13 @@ explicit subcommand name.")
                (invoke "pytest"))
              #t)))))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-freezegun" ,python-freezegun)
-       ("python-pretend" ,python-pretend)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-asyncio" ,python-pytest-asyncio)
-       ("python-simplejson" ,python-simplejson)
-       ("python-twisted" ,python-twisted)))
+     (list python-coverage
+           python-freezegun
+           python-pretend
+           python-pytest
+           python-pytest-asyncio
+           python-simplejson
+           python-twisted))
     (home-page "https://www.structlog.org/")
     (synopsis "Structured Logging for Python")
     (description "@code{structlog} changes logging in Python by adding structure
@@ -12475,8 +13447,7 @@ to your log entries.")
                "1xhak74yj3lqflvpijg15rnkklrigvsp5q7s4as4h6a157d8q8ip"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-pytest python-setuptools-scm))
     (synopsis "Namespace control and lazy-import mechanism")
     (description "With apipkg you can control the exported namespace of a Python
 package and greatly reduce the number of imports for your users.  It is a small
@@ -12502,11 +13473,15 @@ pure Python module that works on virtually all Python versions.")
                   (replace 'check
                     (lambda* (#:key inputs outputs tests? #:allow-other-keys)
                       (when tests?
+                        ;; Unset PYTHONDONTWRITEBYTECODE to match the
+                        ;; expectations of a test in
+                        ;; 'testing/test_gateway.py'.
+                        (unsetenv "PYTHONDONTWRITEBYTECODE")
+
                         (add-installed-pythonpath inputs outputs)
                         (invoke "pytest" "-vv")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-pytest python-setuptools-scm))
     (synopsis "Rapid multi-Python deployment")
     (description "Execnet provides a share-nothing model with
 channel-send/receive communication for distributing execution across many
@@ -12535,8 +13510,7 @@ minimal and fast API targeting the following uses:
                "19574j3jwssm2dkqykih4568xqfgjsa3hcd79yl5s2vfys3qvh8g"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-pytz" ,python-pytz)))
+     (list python-dateutil python-pytz))
     (synopsis "Python library for parsing iCalendar files")
     (description "The icalendar package is a parser/generator of iCalendar
 files for use with Python.")
@@ -12580,9 +13554,9 @@ files for use with Python.")
          (replace 'check
            (lambda _ (invoke "py.test" "-v"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (propagated-inputs
-     `(("python-args" ,python-args)))
+     (list python-args))
     (home-page "https://github.com/kennethreitz/clint")
     (synopsis "Command-line interface tools")
     (description
@@ -12606,7 +13580,7 @@ output, progress bar display, and pipes.")
                 "1j81nddvnb145x4p81bnfpyai6g26i2dc1633ycsk025bb18m01a"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-appdirs" ,python-appdirs)))
+     (list python-appdirs))
     (home-page "https://github.com/alex/rply")
     (synopsis "Parser generator for Python")
     (description
@@ -12621,35 +13595,33 @@ with a new public API, and RPython support.")
 (define-public python-hy
   (package
     (name "python-hy")
-    (version "0.18.0")
-    (source (origin
-              (method url-fetch)
-              (uri (pypi-uri "hy" version))
-              (sha256
-               (base32
-                "04dfwm336gw61fmgwikvh0cnxk682p19b4w555wl5d7mlym4rwj2"))))
+    (version "0.20.0")
+    (source
+     (origin
+       (method git-fetch)               ; no tests in PyPI release
+       (uri (git-reference
+             (url "https://github.com/hylang/hy")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1g7djra9z7b0wyqyfrk2n4z3zamp2xkahv00jwdv35xmwwn09hq4"))))
     (build-system python-build-system)
     (arguments
      '(#:phases
        (modify-phases %standard-phases
-         (add-before 'install 'set-HOME
-           (lambda _
-             (setenv "HOME" "/tmp") #t))
          (replace 'check
-           (lambda _
-             ;; Tests require write access to HOME.
-             (setenv "HOME" "/tmp")
-             (invoke "nosetests"))))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "python" "-m" "pytest" "-k"
+                       (string-append   ; skip some failed tests
+                        "not test_bin_hy_sys_executable"
+                        " and not test_bin_hy_circular_macro_require"
+                        " and not test_macro_from_module"))))))))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-nose" ,python-nose)))
+     (list python-pytest))
     (propagated-inputs
-     `(("python-astor" ,python-astor)
-       ("python-colorama" ,python-colorama)
-       ("python-rply" ,python-rply)
-       ("python-funcparserlib"
-        ,python-funcparserlib)))
-    (home-page "http://hylang.org/")
+     (list python-astor python-colorama python-funcparserlib python-rply))
+    (home-page "https://docs.hylang.org/en/stable/")
     (synopsis "Lisp frontend to Python")
     (description
      "Hy is a dialect of Lisp that's embedded in Python.  Since Hy transforms
@@ -12811,18 +13783,17 @@ concurrent.futures package from Python 3.2")
          "0b2v3mim90rmfvixkaniz2qrs650sk230rzgd5zhcjfldmlqgxpc"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-utils" ,python-utils)))
+     (list python-six python-utils))
     (native-inputs
-     `(("python-flake8" ,python-flake8)
-       ("python-freezegun" ,python-freezegun)
-       ("python-pycodestyle" ,python-pycodestyle)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cache" ,python-pytest-cache)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-flakes" ,python-pytest-flakes)
-       ("python-pytest-pep8" ,python-pytest-pep8)
-       ("python-sphinx" ,python-sphinx)))
+     (list python-flake8
+           python-freezegun
+           python-pycodestyle
+           python-pytest
+           python-pytest-cache
+           python-pytest-cov
+           python-pytest-flakes
+           python-pytest-pep8
+           python-sphinx))
     (home-page "https://github.com/WoLpH/python-progressbar")
     (synopsis "Text progress bar library for Python")
     (description
@@ -12872,66 +13843,86 @@ text.")
 (define-public python2-colorama
   (package-with-python2 python-colorama))
 
+;; awscli and botocore do not accept version 0.4.4
+(define-public python-colorama-for-awscli
+  (package
+    (inherit python-colorama)
+    (version "0.4.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "colorama" version))
+       (sha256
+        (base32 "189n8hpijy14jfan4ha9f5n06mnl33cxz7ay92wjqgkr639s0vg9"))))))
+
 (define-public python-moto
   (package
     (name "python-moto")
-    ;; XXX: Use a pre-release for compatibility with latest botocore & friends.
-    (version "1.3.16.dev134")
+    (version "2.2.12")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "moto" version))
               (sha256
                (base32
-                "1pix0c7zszjwzfy88n1rpih9vkdm25nqcvz93z850xvgwb4v81bd"))))
+                "0pvay0jp119lzzwf5qj5h6311271yq0w2i6344ds20grpf6g6gz8"))))
     (build-system python-build-system)
     (arguments
-     `(#:phases (modify-phases %standard-phases
-                  (add-after 'unpack 'patch-hardcoded-executable-names
-                    (lambda _
-                      (substitute* "moto/batch/models.py"
-                        (("/bin/sh")
-                         (which "sh")))
-                      (substitute* (find-files "tests" "\\.py$")
-                        (("#!/bin/bash")
-                         (string-append "#!" (which "bash"))))
-                      #t))
-                  (replace 'check
-                    (lambda _
-                      (setenv "PYTHONPATH" (string-append "./build/lib:"
-                                                          (getenv "PYTHONPATH")))
-                      (invoke "pytest" "-vv" "-m" "not network"
-                              ;; These tests require Docker.
-                              "-k" "not test_terminate_job \
-and not test_invoke_function_from_sqs_exception"))))))
-    (native-inputs
-     `(("python-flask" ,python-flask)
-       ("python-flask-cors" ,python-flask-cors)
-       ("python-freezegun" ,python-freezegun)
-       ("python-parameterized" ,python-parameterized)
-       ("python-pytest" ,python-pytest)
-       ("python-sure" ,python-sure)))
-    (propagated-inputs
-     `(("python-aws-xray-sdk" ,python-aws-xray-sdk)
-       ("python-boto" ,python-boto)
-       ("python-boto3" ,python-boto3)
-       ("python-botocore" ,python-botocore)
-       ("python-cfn-lint" ,python-cfn-lint)
-       ("python-cryptography" ,python-cryptography)
-       ("python-dateutil" ,python-dateutil)
-       ("python-docker" ,python-docker)
-       ("python-idna" ,python-idna)
-       ("python-jinja2" ,python-jinja2)
-       ("python-jose" ,python-jose)
-       ("python-jsondiff" ,python-jsondiff)
-       ("python-mock" ,python-mock)
-       ("python-pytz" ,python-pytz)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-requests" ,python-requests)
-       ("python-responses" ,python-responses)
-       ("python-six" ,python-six)
-       ("python-sshpubkeys" ,python-sshpubkeys)
-       ("python-werkzeug" ,python-werkzeug)
-       ("python-xmltodict" ,python-xmltodict)))
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-hardcoded-executable-names
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((bash-exec (search-input-file inputs "/bin/sh")))
+               (substitute* "moto/batch/models.py"
+                 (("/bin/sh") bash-exec))
+               (substitute* (find-files "tests" "\\.py$")
+                 (("#!/bin/bash") (string-append "#!" bash-exec))))))
+         (replace 'check
+           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "pytest" "-vv" "-m" "not network" "-k"
+                       (string-append
+                        ;; These tests require Docker.
+                        "not test_terminate_job"
+                        " and not test_invoke_function_from_sqs_exception"
+                        " and not test_rotate_secret_lambda_invocations"
+                        ;; These tests also require the network.
+                        " and not test_put_record_batch_http_destination"
+                        " and not test_put_record_http_destination"
+                        " and not test_dependencies"
+                        " and not test_cancel_running_job"
+                        " and not test_container_overrides"))))))))
+    (native-inputs
+     (list python-flask
+           python-flask-cors
+           python-freezegun
+           python-parameterized
+           python-pytest
+           python-sure))
+    (inputs
+     `(("bash" ,bash-minimal)))
+    (propagated-inputs
+     (list python-aws-xray-sdk
+           python-boto
+           python-boto3
+           python-botocore
+           python-cfn-lint
+           python-cryptography
+           python-dateutil
+           python-docker
+           python-idna
+           python-jinja2
+           python-jose
+           python-jsondiff
+           python-mock
+           python-pytz
+           python-pyyaml
+           python-requests
+           python-responses
+           python-six
+           python-sshpubkeys
+           python-werkzeug
+           python-xmltodict))
     (home-page "https://github.com/spulec/moto")
     (synopsis "Mock out the boto library")
     (description
@@ -12952,7 +13943,7 @@ and not test_invoke_function_from_sqs_exception"))))))
        "1dcxvszbikgzh99ybdc7jq0zb9wspy2ds8z9mjsqiyv3q884xpr5"))))
    (build-system python-build-system)
    (propagated-inputs
-    `(("python-pyasn1" ,python-pyasn1)))
+    (list python-pyasn1))
    (synopsis "Pure-Python RSA implementation")
    (description "Python-RSA is a pure-Python RSA implementation.  It supports
 encryption and decryption, signing and verifying signatures, and key
@@ -12977,7 +13968,7 @@ library as well as on the command line.")
        "1c35qyhvy27q9ih9n899f3h4sdnpgq027dbiilly2qb5cvgarchm"))))
    (build-system python-build-system)
    (native-inputs
-    `(("python-setuptools-scm" ,python-setuptools-scm)))
+    (list python-setuptools-scm))
    (synopsis "Plugin and hook calling mechanism for Python")
    (description "Pluggy is an extraction of the plugin manager as used by
 Pytest but stripped of Pytest specific details.")
@@ -13023,7 +14014,7 @@ Pytest but stripped of Pytest specific details.")
     (native-inputs
      ;; XXX: Not actually used since there are no tests but required for
      ;; build.
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://plumbum.readthedocs.io")
     (synopsis "Python shell combinators library")
     (description
@@ -13044,9 +14035,9 @@ code.")
          "1zqqjlgmhgkpzg9ss5ki8wamxl83xn51fs6gn2a8cxsx9vkbvcvj"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-packaging" ,python-packaging)))
+     (list python-packaging))
     (native-inputs
-     `(("python-unittest2" ,python-unittest2)))
+     (list python-unittest2))
     (home-page "https://deprecation.readthedocs.io/")
     (synopsis "Python library to handle automated deprecations")
     (description
@@ -13074,17 +14065,17 @@ that deprecated code is eventually removed.")
      ;; pytest>=2.8.0 for installation.
      '(#:tests? #f))
     (propagated-inputs
-     `(("python-filelock" ,python-filelock)
-       ("python-packaging" ,python-packaging)
-       ("python-pluggy" ,python-pluggy)
-       ("python-py" ,python-py)
-       ("python-six" ,python-six)
-       ("python-toml" ,python-toml)
-       ("python-virtualenv" ,python-virtualenv)))
-    (native-inputs
-     `(; FIXME: Missing: ("python-pytest-timeout" ,python-pytest-timeout)
-       ("python-pytest" ,python-pytest)  ; >= 2.3.5
-       ("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-filelock
+           python-packaging
+           python-pluggy
+           python-py
+           python-six
+           python-toml
+           python-virtualenv))
+    (native-inputs
+     (list ; FIXME: Missing: ("python-pytest-timeout" ,python-pytest-timeout)
+           python-pytest ; >= 2.3.5
+           python-setuptools-scm))
     (home-page "https://tox.readthedocs.io")
     (synopsis "Virtualenv-based automation of test activities")
     (description "Tox is a generic virtualenv management and test command line
@@ -13107,7 +14098,7 @@ servers.")
        "0k0765x1mybcrzajh3hiqkl8sy9hs0bmn4900frxy0j3ykvaxqmx"))))
    (build-system python-build-system)
    (native-inputs
-    `(("python-nose" ,python-nose)))
+    (list python-nose))
    (synopsis "JSON Matching Expressions")
    (description "JMESPath (pronounced “james path”) is a Python library that
 allows one to declaratively specify how to extract elements from a JSON
@@ -13130,10 +14121,9 @@ document.")
         (base32 "1kn1w4dp9mrsq6kzmhf4pjmx3wicxc3dw1mwa924q8g48g77lr4c"))))
     (build-system python-build-system)
     (native-inputs
-     `(("cmake" ,cmake)
-       ("python-cython" ,python-cython)))
+     (list cmake python-cython))
     (inputs
-     `(("symengine" ,symengine)))
+     (list symengine))
     (home-page "https://github.com/symengine/symengine.py")
     (synopsis "Python library providing wrappers to SymEngine")
     (description
@@ -13157,10 +14147,9 @@ manipulation library.")
     ;; fail.
     (arguments '(#:tests? #false))
     (propagated-inputs
-     `(("python-future" ,python-future)))
+     (list python-future))
     (native-inputs
-     `(("python-nose" ,python-nose)
-       ("python-numpy" ,python-numpy)))
+     (list python-nose python-numpy))
     (home-page "https://uncertainties-python-package.readthedocs.io/")
     (synopsis "Calculations with uncertainties")
     (description
@@ -13182,7 +14171,7 @@ expression.")
          "0f54sd4w1a72ij1bcxs2x7dk9xf8bzclawijf1z18bqx9f96l2gm"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/newville/asteval")
     (synopsis "Minimalistic evaluator of Python expressions")
     (description
@@ -13203,12 +14192,9 @@ using the @code{ast} module")
          "0iab33jjb60f8kn0k0cqb0vjp1mdskks2n3kpn97zkw5cvjhq2b7"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-asteval" ,python-asteval)
-       ("python-numpy" ,python-numpy)
-       ("python-scipy" ,python-scipy)
-       ("python-uncertainties" ,python-uncertainties)))
+     (list python-asteval python-numpy python-scipy python-uncertainties))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://lmfit.github.io/lmfit-py/")
     (synopsis "Least-Squares minimization with bounds and constraints")
     (description
@@ -13237,8 +14223,7 @@ enhancements to optimization and data fitting problems.")
      ;; subset of this library, so keep it around for now, but disable tests.
      '(#:tests? #f))
     (propagated-inputs
-     `(("python-paramiko" ,python-paramiko)
-       ("python-requests" ,python-requests)))
+     (list python-paramiko python-requests))
     (home-page "https://github.com/boto/boto")
     (synopsis "Python interfaces for Amazon Web Services")
     (description
@@ -13253,22 +14238,20 @@ This software is unmaintained, and new projects should use @code{boto3} instead.
   ;; are compatible.
   (package
     (name "python-botocore")
-    (version "1.19.22")
+    (version "1.22.11")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "botocore" version))
        (sha256
         (base32
-         "0iim86x7c6hqmvd61ygz6x6x9glnsfbnyzv2y67qjdcdx8jpkmw7"))))
+         "1z7g2scyzvfq4yj9b4w911k7802ry1v6lqfnwq12l0ak7ywmsvrh"))))
     (build-system python-build-system)
     (arguments
      ;; FIXME: Many tests are failing.
      '(#:tests? #f))
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-jmespath" ,python-jmespath)
-       ("python-urllib3" ,python-urllib3)))
+     (list python-dateutil python-jmespath python-urllib3))
     (home-page "https://github.com/boto/botocore")
     (synopsis "Low-level interface to AWS")
     (description "Botocore is a Python library that provides a low-level
@@ -13281,7 +14264,7 @@ interface to the Amazon Web Services (AWS) API.")
 (define-public python-boto3
   (package
     (name "python-boto3")
-    (version "1.16.22")
+    (version "1.19.11")
     (home-page "https://github.com/boto/boto3")
     (source (origin
               (method git-fetch)
@@ -13289,23 +14272,19 @@ interface to the Amazon Web Services (AWS) API.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0h20hgl4yfl58g75qhb6ibrdmzn47md3srgar7hask14cjmfhfy3"))))
+                "1wv0ci2z5ywvm63dh4mp64vqyyvkm4qxc8dxv8ncrqiiphpgr9aq"))))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'delete-network-tests
            ;; Deleting integration tests because they are trying to connect to AWS.
-	   (lambda _
-	     (delete-file-recursively "tests/integration")
-	     #t)))))
+           (lambda _
+             (delete-file-recursively "tests/integration"))))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-nose" ,python-nose)
-       ("python-mock" ,python-mock)))
+     (list python-nose python-mock python-pytest))
     (propagated-inputs
-     `(("python-botocore" ,python-botocore)
-       ("python-jmespath" ,python-jmespath)
-       ("python-s3transfer" ,python-s3transfer)))
+     (list python-botocore python-jmespath python-s3transfer))
     (synopsis "AWS SDK for Python")
     (description
      "Boto3 is a Python library for writing programs that interact with
@@ -13351,14 +14330,19 @@ in pure Python.")
            (lambda* (#:key inputs #:allow-other-keys)
              (let ((libxdo (string-append
                             (assoc-ref inputs "xdotool")
-                            "/lib/libxdo.so")))
+                            "/lib/libxdo.so"))
+                   (libc (string-append
+                          (assoc-ref inputs "libc")
+                          "/lib/libc.so.6")))
                (substitute* "xdo/_xdo.py"
                  (("find_library\\(\"xdo\"\\)")
-                  (simple-format #f "\"~a\"" libxdo)))
+                  (simple-format #f "\"~a\"" libxdo))
+                 (("ctypes\\.util\\.find_library\\('libc'\\)")
+                  (simple-format #f "\"~a\"" libc)))
                #t))))
        #:tests? #f))  ; no tests provided
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (inputs
      `(("xdotool" ,xdotool)
        ("libX11" ,libx11)))
@@ -13393,10 +14377,9 @@ python-xdo for newer bindings.)")
                           (format #t "test suite not run~%"))
                       #t)))))
     (propagated-inputs
-     `(("python-markupsafe" ,python-markupsafe)))
+     (list python-markupsafe))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-nose" ,python-nose)))
+     (list python-mock python-nose))
     (home-page "https://www.makotemplates.org/")
     (synopsis "Templating language for Python")
     (description "Mako is a templating language for Python that compiles
@@ -13441,7 +14424,7 @@ server with very acceptable performance.")
          "11yfkzyplizdgndy34vyd5qlmr1n5mxis3a3svxmx8fnccdvknxc"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/pydanny/whichcraft")
     (synopsis "Cross-platform cross-python shutil.which functionality")
     (description
@@ -13461,22 +14444,19 @@ designed to work across multiple versions of Python.")
         (base32 "0mx49whhwcxmvcak27zr7p7ndzkn3w7psfd7fzh3n91fi1r4v6kb"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-freezegun" ,python-freezegun)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-catchlog" ,python-pytest-catchlog)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-mock" ,python-pytest-mock)))
-    (propagated-inputs
-     `(("python-binaryornot" ,python-binaryornot)
-       ("python-click" ,python-click)
-       ("python-future" ,python-future)
-       ("python-jinja2" ,python-jinja2)
-       ("python-jinja2-time" ,python-jinja2-time)
-       ("python-poyo" ,python-poyo)
-       ("python-requests" ,python-requests)
-       ("python-slugify" ,python-slugify)
-       ("python-text-unidecode" ,python-text-unidecode)
-       ("python-whichcraft" ,python-whichcraft)))
+     (list python-freezegun python-pytest python-pytest-catchlog
+           python-pytest-cov python-pytest-mock))
+    (propagated-inputs
+     (list python-binaryornot
+           python-click
+           python-future
+           python-jinja2
+           python-jinja2-time
+           python-poyo
+           python-requests
+           python-slugify
+           python-text-unidecode
+           python-whichcraft))
     (home-page "https://github.com/cookiecutter/cookiecutter")
     (synopsis
      "Command-line utility that creates projects from project templates")
@@ -13499,11 +14479,9 @@ project template.")
          "1xia20wm0vx5dk85kcwgh13bylz8qh47ffjxssd2586r60xi783a"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-webob" ,python-webob)
-       ("python-webtest" ,python-webtest)))
+     (list python-webob python-webtest))
     (propagated-inputs
-     `(("python-lxml" ,python-lxml)
-       ("python-cssselect" ,python-cssselect)))
+     (list python-lxml python-cssselect))
     (home-page "https://github.com/gawel/pyquery")
     (synopsis "Make jQuery-like queries on xml documents")
     (description "pyquery allows you to make jQuery queries on xml documents.
@@ -13552,40 +14530,25 @@ and provides a uniform API regardless of which JSON implementation is used.")
 (define-public python-amqp
   (package
     (name "python-amqp")
-    (version "2.3.2")
+    (version "5.0.7")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "amqp" version))
        (sha256
-        (base32
-         "1sv600dgqwpimr6i1g59y9hpn50mc236gdqkr7zin13kvlpx0g87"))))
+        (base32 "0p9alyinl24z699w4gpd8wvn90sm2il1p0gfwdhbpinksy7vfmyp"))))
     (build-system python-build-system)
-    (native-inputs
-     `(("python-case" ,python-case)
-       ("python-pytest-sugar" ,python-pytest-sugar)
-       ("python-mock" ,python-mock)))
+    (arguments
+     `(#:tests? #f)) ; not compatible with pytest>=6 as of 5.0.7
     (propagated-inputs
-     `(("python-vine" ,python-vine)))
+     (list python-vine))
     (home-page "https://github.com/celery/py-amqp")
-    (synopsis
-     "Low-level AMQP client for Python (fork of amqplib)")
+    (synopsis "Low-level AMQP client for Python (fork of amqplib)")
     (description
      "This is a fork of amqplib which was originally written by Barry Pederson.
 It is maintained by the Celery project, and used by kombu as a pure python
 alternative when librabbitmq is not available.")
-    (license license:lgpl2.1+)
-    (properties `((python2-variant . ,(delay python2-amqp))))))
-
-(define-public python2-amqp
-  (let ((amqp (package-with-python2
-               (strip-python2-variant python-amqp))))
-    (package/inherit amqp
-      (arguments `(;; Tries to run coverage tests with nose-cover3, which seems
-                   ;; unmaintained.  Weirdly, does not do this on the python 3
-                   ;; version?
-                   #:tests? #f
-                   ,@(package-arguments amqp))))))
+    (license license:lgpl2.1+)))
 
 (define-public python-txamqp
   (package
@@ -13600,8 +14563,7 @@ alternative when librabbitmq is not available.")
          "0jd9864k3csc06kipiwzjlk9mq4054s8kzk5q1cfnxj8572s4iv4"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-twisted" ,python-twisted)))
+     (list python-six python-twisted))
     (home-page "https://github.com/txamqp/txamqp")
     (synopsis "Communicate with AMQP peers and brokers using Twisted")
     (description
@@ -13616,25 +14578,25 @@ applications.")
 (define-public python-kombu
   (package
     (name "python-kombu")
-    (version "4.2.2")
+    (version "5.2.2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "kombu" version))
        (sha256
-        (base32
-         "15k8f7mzqr049sg9vi48m19vjykviafk3f0p5xzgw9by0x0kyxjj"))))
+        (base32 "0256915q3z4pjrkqxw16a31np3p25dxnk1mq2zv0hs4izdihfp8g"))))
     (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'delete-transport-tests
+           (lambda _ ; this tests message passing to many different databases
+             (delete-file-recursively "t/unit/transport"))))))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-case" ,python-case)
-       ("python-pyro4" ,python-pyro4)
-       ("python-pytest-sugar" ,python-pytest-sugar)
-       ("python-pytz" ,python-pytz)))
+     (list python-case python-mock python-pyro4 python-pytest-sugar
+           python-pytz))
     (propagated-inputs
-     `(("python-anyjson" ,python-anyjson)
-       ("python-amqp" ,python-amqp)
-       ("python-redis" ,python-redis)))
+     (list python-amqp python-cached-property python-vine))
     (home-page "https://kombu.readthedocs.io")
     (synopsis "Message passing library for Python")
     (description "The aim of Kombu is to make messaging in Python as easy as
@@ -13643,85 +14605,89 @@ and also provide proven and tested solutions to common messaging problems.
 AMQP is the Advanced Message Queuing Protocol, an open standard protocol for
 message orientation, queuing, routing, reliability and security, for which the
 RabbitMQ messaging server is the most popular implementation.")
-    (license license:bsd-3)
-    (properties `((python2-variant . ,(delay python2-kombu))))))
-
-(define-public python2-kombu
-  (let ((kombu (package-with-python2
-                (strip-python2-variant python-kombu))))
-    (package/inherit kombu
-      (arguments `(;; FIXME: 'TestTransport.test_del_sync' fails on python2.
-                   ;; It works fine on the python3 variant.
-                   #:tests? #f
-                   ,@(package-arguments kombu)))
-      (native-inputs `(("python2-unittest2" ,python2-unittest2)
-                ,@(package-native-inputs kombu))))))
+    (license license:bsd-3)))
 
 (define-public python-billiard
   (package
     (name "python-billiard")
-    (version "3.5.0.5")
+    (version "3.6.4.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "billiard" version))
        (sha256
-        (base32
-         "03msmapj3s5zgqk87d646mafz7a01h5bm2wijalgpi0s80ks5na2"))))
+        (base32 "0ismj2p8c66ykpss94rs0bfra5agxxmljz8r3gaq79r8valfb799"))))
     (build-system python-build-system)
-    (native-inputs
-     `(("python-case" ,python-case)
-       ("python-pytest" ,python-pytest)))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'remove-win-files
+           (lambda _
+             (for-each delete-file-recursively
+                       ;; test_multiprocessing seem to be written in Python2.
+                       '("t/integration/tests/test_multiprocessing.py"
+                         "t/unit/test_win32.py"
+                         "billiard/popen_spawn_win32.py"
+                         "billiard/_win.py")))))))
+    (native-inputs
+     (list python-case python-psutil python-pytest))
     (home-page "https://github.com/celery/billiard")
-    (synopsis
-     "Python multiprocessing fork with improvements and bugfixes")
+    (synopsis "Python multiprocessing fork with improvements and bugfixes")
     (description
      "Billiard is a fork of the Python 2.7 multiprocessing package.  The
 multiprocessing package itself is a renamed and updated version of R Oudkerk's
 pyprocessing package.  This standalone variant is intended to be compatible with
 Python 2.4 and 2.5, and will draw its fixes/improvements from python-trunk.")
-    (license license:bsd-3)
-    (properties `((python2-variant . ,(delay python2-billiard))))))
-
-(define-public python2-billiard
-  (let ((billiard (package-with-python2
-                   (strip-python2-variant python-billiard))))
-    (package/inherit billiard
-      (native-inputs `(("python2-unittest2" ,python2-unittest2)
-                       ("python2-mock" ,python2-mock)
-                       ,@(package-native-inputs billiard))))))
+    (license license:bsd-3)))
 
 (define-public python-celery
   (package
     (name "python-celery")
-    (version "4.2.1")
+    (version "5.1.2")                  ;newer versions require python-click>=8
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "celery" version))
        (sha256
-        (base32
-         "0y66rz7z8dfcgs3s0qxmdddlaq57bzbgxgfz896nbp14grkv9nkp"))))
+        (base32 "1c6lw31i3v81fyj4yn37lbvv70xdgb389iccirzyjr992vlkv6ld"))))
     (build-system python-build-system)
     (arguments
-     '(;; TODO The tests fail with Python 3.7
-       ;; https://github.com/celery/celery/issues/4849
-       #:tests? #f
+     '(#:tests? #f
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'patch-requirements
+         (add-after 'unpack 'delete-integration-tests
            (lambda _
-             (substitute* "requirements/test.txt"
-               (("pytest>=3\\.0,<3\\.3")
-                "pytest>=3.0"))
-             #t)))))
-    (native-inputs
-     `(("python-case" ,python-case)
-       ("python-pytest" ,python-pytest)))
-    (propagated-inputs
-     `(("python-pytz" ,python-pytz)
-       ("python-billiard" ,python-billiard)
-       ("python-kombu" ,python-kombu)))
+             (delete-file-recursively "t/integration"))) ;hangs tests
+         (replace 'check
+           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "python" "-m" "pytest" "t" "-k"
+                       (string-append   ; AssertionErrors
+                        "not test_check_privileges_no_fchown"
+                        " and not test_all_reqs_enabled_in_tests"))))))))
+    (native-inputs
+     (list python-case
+           python-flaky
+           python-iniconfig
+           python-moto
+           python-msgpack
+           python-pytest
+           python-pytest-celery
+           python-pytest-subtests
+           python-pytest-timeout
+           python-toml))
+    (propagated-inputs
+     (list python-billiard
+           python-boto3
+           python-click
+           python-click-didyoumean
+           python-click-plugins
+           python-click-repl
+           python-cryptography
+           python-kombu
+           python-pytz
+           python-vine))
     (home-page "https://celeryproject.org")
     (synopsis "Distributed Task Queue")
     (description "Celery is an asynchronous task queue/job queue based on
@@ -13730,16 +14696,7 @@ supports scheduling as well.  The execution units, called tasks, are executed
 concurrently on a single or more worker servers using multiprocessing,
 Eventlet, or gevent.  Tasks can execute asynchronously (in the background) or
 synchronously (wait until ready).")
-    (license license:bsd-3)
-    (properties `((python2-variant . ,(delay python2-celery))))))
-
-(define-public python2-celery
-  (let ((celery (package-with-python2
-                 (strip-python2-variant python-celery))))
-    (package/inherit celery
-      (native-inputs `(("python2-unittest2" ,python2-unittest2)
-                       ("python2-mock" ,python2-mock)
-                       ,@(package-native-inputs celery))))))
+    (license license:bsd-3)))
 
 (define-public python-translitcodec
   (package
@@ -13771,13 +14728,13 @@ ISO 8859, etc.).")
 (define-public python-anyqt
   (package
     (name "python-anyqt")
-    (version "0.0.11")
+    (version "0.0.13")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "AnyQt" version))
        (sha256
-        (base32 "0gl2czirzjvhbq963i2awxp8kwbc1grh67lpcwfipyn9w3kdwdj4"))))
+        (base32 "0z7myf0mp1qx4gza6ncqyq9whk67vblmh9n3klk19dv4aakjml2f"))))
     (build-system python-build-system)
     (arguments
      `(#:tests? #f ;there are no tests
@@ -13787,8 +14744,7 @@ ISO 8859, etc.).")
            ;; Delete files related to other operating systems.
            (lambda _
              (delete-file "AnyQt/QtMacExtras.py")
-             (delete-file "AnyQt/QtWinExtras.py")
-             #t)))))
+             (delete-file "AnyQt/QtWinExtras.py"))))))
     (home-page "https://github.com/ales-erjavec/anyqt")
     (synopsis "PyQt4/PyQt5 compatibility layer")
     (description "AnyQt is a PyQt4/PyQt5 compatibility layer.")
@@ -13817,27 +14773,27 @@ ISO 8859, etc.).")
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (add-installed-pythonpath inputs outputs)
              (invoke "pytest" "-vv" "-k"
-                     ;; These tests try to download online data.
-                     (string-append "not test_PolyLineROI"
-                                    " and not test_getArrayRegion_axisorder"
-                                    " and not test_getArrayRegion"
-                                    " and not test_PlotCurveItem"
-                                    " and not test_NonUniformImage_colormap"
-                                    " and not test_NonUniformImage_lut"
-                                    " and not test_ImageItem_axisorder"
-                                    " and not test_ImageItem")))))))
-    (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-xdist" ,python-pytest-xdist)))
+                     (string-append
+                      ;; These tests try to download online data.
+                      "not test_PolyLineROI"
+                      " and not test_getArrayRegion_axisorder"
+                      " and not test_getArrayRegion"
+                      " and not test_PlotCurveItem"
+                      " and not test_NonUniformImage_colormap"
+                      " and not test_NonUniformImage_lut"
+                      " and not test_ImageItem_axisorder"
+                      " and not test_ImageItem"
+                      ;; The test_reload test fails and suggests adding
+                      ;; "--assert=plain" to the pytest command, but it
+                      ;; doesn't solve the failure.
+                      " and not test_reload")))))))
+    (native-inputs
+     (list python-pytest python-pytest-cov python-pytest-xdist))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (propagated-inputs
-     `(("python-h5py" ,python-h5py)
-       ("python-numpy" ,python-numpy)
-       ("python-pyopengl" ,python-pyopengl)
-       ("python-scipy" ,python-scipy)
-       ("python-pyqt" ,python-pyqt)))
+     (list python-h5py python-numpy python-pyopengl python-scipy
+           python-pyqt))
     (home-page "http://www.pyqtgraph.org")
     (synopsis "Scientific graphics and GUI library for Python")
     (description
@@ -13849,7 +14805,7 @@ applications.")
 (define-public python-qasync
   (package
     (name "python-qasync")
-    (version "0.15.0")
+    (version "0.22.0")
     (source
      (origin
        ;; There are no tests in the PyPI tarball.
@@ -13859,7 +14815,7 @@ applications.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0va9h6v102d7mxz608banjc0l0v02dq3ywhr5i4nqaxx3qkazc2l"))))
+        (base32 "1q9cllrwf94whr0f6mipa0hdq1rcyqvklwx19g35g2dav8f3xkjl"))))
     (build-system python-build-system)
     (arguments
      `(#:test-target "pytest"
@@ -13867,13 +14823,11 @@ applications.")
        (modify-phases %standard-phases
          (add-before 'check 'set-qpa
            (lambda _
-             (setenv "QT_QPA_PLATFORM" "offscreen")
-             #t)))))
+             (setenv "QT_QPA_PLATFORM" "offscreen"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-pytest python-pytest-runner))
     (propagated-inputs
-     `(("python-pyqt" ,python-pyqt)))
+     (list python-pyqt))
     (home-page "https://github.com/CabbageDevelopment/qasync")
     (synopsis "Implementation of the PEP 3156 Event-Loop with Qt")
     (description
@@ -13942,8 +14896,7 @@ main process so that they are handled correctly.")
      '(;; The test suite relies on some non-portable Windows interfaces.
        #:tests? #f))
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-pyicu" ,python-pyicu)))
+     (list python-dateutil python-pyicu))
     (synopsis "Parse and generate vCard and vCalendar files")
     (description "Vobject is intended to be a full featured Python package for
 parsing and generating vCard and vCalendar files.  Currently, iCalendar files
@@ -13967,7 +14920,7 @@ way.")
                (base32
                 "00yvj8bxmhhhhd74v7j0x673is7vizmxwgb3dd5xmnkr74ybyi7w"))))
     (build-system python-build-system)
-    (native-inputs `(("python-pytest" ,python-pytest-6)))
+    (native-inputs (list python-pytest-6))
     (home-page "https://software.clapper.org/munkres/")
     (synopsis "Implementation of the Munkres algorithm")
     (description "The Munkres module provides an implementation of the Munkres
@@ -13975,9 +14928,6 @@ algorithm (also called the Hungarian algorithm or the Kuhn-Munkres algorithm),
 useful for solving the Assignment Problem.")
     (license license:bsd-3)))
 
-(define-public python2-munkres
-  (package-with-python2 python-munkres))
-
 (define-public python-whoosh
   (package
     (name "python-whoosh")
@@ -13992,7 +14942,7 @@ useful for solving the Assignment Problem.")
     (build-system python-build-system)
     (arguments '(#:tests? #f)) ; Test invocation is no longer supported by Python.
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://bitbucket.org/mchaput/whoosh")
     (synopsis "Full text indexing, search, and spell checking library")
     (description
@@ -14008,6 +14958,50 @@ checking library.")
           ,python2-backport-ssl-match-hostname)
           ,@(package-propagated-inputs whoosh))))))
 
+(define-public python-codespell
+  (package
+    (name "python-codespell")
+    (version "2.1.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "codespell" version))
+        (sha256
+          (base32 "1r9y714cz8m894rxp7pyvicr1lw2iid24vz6fxbl5wzy8ibgxlqr"))))
+    (build-system python-build-system)
+    (inputs
+      (list python-chardet))
+    (native-inputs
+      (list python-check-manifest python-flake8 python-pytest
+            python-pytest-cov python-pytest-dependency))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key outputs tests? #:allow-other-keys)
+             (when tests?
+               ;; Make installed executable available for running the tests.
+               (setenv "PATH"
+                       (string-append (assoc-ref outputs "out") "/bin"
+                                      ":" (getenv "PATH")))
+               (invoke "pytest" "-vv")))))))
+    (home-page "https://github.com/codespell-project/codespell/")
+    (synopsis "Spellchecker for code")
+    (description "Codespell fixes common misspellings in text files.
+It's designed primarily for checking misspelled words in source code,
+but it can be used with other files as well.  It does not check for word
+membership in a complete dictionary, but instead looks for a set of
+common misspellings.  Therefore it should catch errors like \"adn\", but
+it will not catch \"adnasdfasdf\".  This also means it shouldn't
+generate false-positives when you use a niche term it doesn't know
+about.")
+    (license
+      (list
+        ; for codespell and codespell_lib
+        license:gpl2
+        ; for dictionary*.txt
+        license:cc-by-sa3.0))))
+
 (define-public python-pathlib
   (package
     (name "python-pathlib")
@@ -14062,8 +15056,7 @@ anymore.")
     (arguments
      `(#:python ,python-2))
     (propagated-inputs
-     `(("python2-scandir" ,python2-scandir)
-       ("python2-six" ,python2-six)))
+     (list python2-scandir python2-six))
     (home-page "https://pypi.org/project/pathlib2/")
     (synopsis "Object-oriented file system paths - backport of standard
 pathlib module")
@@ -14114,7 +15107,7 @@ ambiguities (forward vs. backward slashes, etc.).
                (add-installed-pythonpath inputs outputs)
                (invoke "pytest" "-vv" "jellyfish/test.py")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/jamesturk/jellyfish")
     (synopsis "Approximate and phonetic matching of strings")
     (description "Jellyfish uses a variety of string comparison and phonetic
@@ -14141,7 +15134,7 @@ encoding algorithms to do fuzzy string matching.")
      `(;; It supports Python 3, but Python 3 can already do Unicode CSV.
        #:python ,python-2))
     (native-inputs
-     `(("python2-unittest2" ,python2-unittest2)))
+     (list python2-unittest2))
     (home-page "https://github.com/jdunck/python-unicodecsv")
     (synopsis "Unicode CSV module for Python 2")
     (description "Unicodecsv is a drop-in replacement for Python 2.7's CSV
@@ -14173,20 +15166,11 @@ module, adding support for Unicode strings.")
              #t))
          (replace 'check
            (lambda _
-             (invoke "make" "test")))
-         (add-before 'reset-gzip-timestamps 'make-files-writable
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out")))
-               (for-each make-file-writable
-                         (find-files out "\\.gz$"))
-               #t))))))
+             (invoke "make" "test"))))))
     (propagated-inputs
-     `(("python-chardet" ,python-chardet)
-       ("python-cryptography" ,python-cryptography)
-       ("python-sortedcontainers" ,python-sortedcontainers)))
+     (list python-chardet python-cryptography python-sortedcontainers))
     (native-inputs
-     `(("python-nose" ,python-nose)
-       ("python-tox" ,python-tox)))
+     (list python-nose python-tox))
     (home-page "https://github.com/pdfminer/pdfminer.six")
     (synopsis "PDF parser and analyzer")
     (description "@code{pdfminer.six} is a community maintained fork of
@@ -14224,8 +15208,8 @@ can also be used to get the exact location, font or color of the text.")
            (lambda* (#:key inputs tests? #:allow-other-keys)
              (when tests?
                (invoke "pytest" "-vv")))))))
-    (native-inputs `(("python-pytest" ,python-pytest)))
-    (inputs `(("libarchive" ,libarchive)))
+    (native-inputs (list python-pytest))
+    (inputs (list libarchive))
     (home-page "https://github.com/markokr/rarfile")
     (synopsis "RAR archive reader for Python")
     (description "This is Python module for RAR archive reading.  The interface
@@ -14254,12 +15238,8 @@ is made as zipfile like as possible.")
                                  "tests")
                (invoke "python" "-m" "pytest" "-vv")))))))
     (propagated-inputs
-     `(("python-attrs" ,python-attrs)
-       ("python-colorama" ,python-colorama)
-       ("python-commonmark" ,python-commonmark)
-       ("python-ipywidgets" ,python-ipywidgets)
-       ("python-pygments" ,python-pygments)
-       ("python-typing-extensions" ,python-typing-extensions)))
+     (list python-attrs python-colorama python-commonmark python-pygments
+           python-typing-extensions))
     (native-inputs
      `(("python-pytest" ,python-pytest)
        ("tests"
@@ -14285,31 +15265,20 @@ syntax highlighting, markdown and more to the terminal.")
 (define-public python-magic
   (package
     (name "python-magic")
-    (version "0.4.15")
+    (version "0.4.24")
+    (home-page "https://github.com/ahupp/python-magic")
     (source
      (origin
-       (method url-fetch)
-       (uri (pypi-uri "python-magic" version))
+       (method git-fetch)
+       (uri (git-reference (url home-page) (commit version)))
+       (file-name (git-file-name name version))
+       (patches (search-patches "python-magic-python-bytecode.patch"))
        (sha256
         (base32
-         "1mgwig9pnzgkf86q9ji9pnc99bngms15lfszq5rgqb9db07mqxpk"))
-       (file-name (string-append name "-" version "-checkout"))))
+         "17jalhjbfd600lzfz296m0nvgp6c7vx1mgz82jbzn8hgdzknf4w0"))))
     (build-system python-build-system)
     (arguments
-     ;; The tests are unreliable, so don't run them.  The tests fail
-     ;; under Python3 because they were written for Python2 and
-     ;; contain import statements that do not work in Python3.  One of
-     ;; the tests fails under Python2 because its assertions are
-     ;; overly stringent; it relies on comparing output strings which
-     ;; are brittle and can change depending on the version of
-     ;; libmagic being used and the system on which the test is
-     ;; running.  In my case, under GuixSD 0.10.0, only one test
-     ;; failed, and it seems to have failed only because the version
-     ;; of libmagic that is packaged in Guix outputs a slightly
-     ;; different (but not wrong) string than the one that the test
-     ;; expected.
-     '(#:tests? #f
-       #:phases (modify-phases %standard-phases
+     '(#:phases (modify-phases %standard-phases
                   ;; Replace a specific method call with a hard-coded
                   ;; path to the necessary libmagic.so file in the
                   ;; store.  If we don't do this, then the method call
@@ -14318,25 +15287,27 @@ syntax highlighting, markdown and more to the terminal.")
                   ;; python-magic to fail.
                   (add-before 'build 'hard-code-path-to-libmagic
                     (lambda* (#:key inputs #:allow-other-keys)
-                      (let ((file (assoc-ref inputs "file")))
-                        (substitute* "magic.py"
-                          (("ctypes.util.find_library\\('magic'\\)")
-                           (string-append "'" file "/lib/libmagic.so'")))
-                        #t)))
-                  (add-before 'install 'disable-egg-compression
-                    (lambda _
-                      (let ((port (open-file "setup.cfg" "a")))
-                        (display "\n[easy_install]\nzip_ok = 0\n"
-                                 port)
-                        (close-port port)
-                        #t))))))
+                      (let ((magic (search-input-file inputs "/lib/libmagic.so")))
+                        (substitute* "magic/loader.py"
+                          (("find_library\\('magic'\\)")
+                           (string-append "'" magic "'"))))))
+                  (replace 'check
+                    (lambda* (#:key tests? #:allow-other-keys)
+                      ;; The test suite mandates this variable.
+                      (setenv "LC_ALL" "en_US.UTF-8")
+                      (if tests?
+                          (with-directory-excursion "test"
+                            (invoke "python" "./test.py")
+                            (invoke "python" "./libmagic_test.py"))
+                          (format #t "test suite not run~%")))))))
+    (native-inputs
+     (list which))
     (inputs
      ;; python-magic needs to be able to find libmagic.so.
-     `(("file" ,file)))
-    (home-page
-     "https://github.com/ahupp/python-magic")
-    (synopsis
-     "File type identification using libmagic")
+     ;; Use a newer version because 5.39 returns bogus for some archives
+     ;; (notably Chromium .crx extensions), which breaks e.g. 'diffoscope'.
+     (list file-next))
+    (synopsis "File type identification using libmagic")
     (description
      "This module uses ctypes to access the libmagic file type
 identification library.  It makes use of the local magic database and
@@ -14367,15 +15338,15 @@ the same purpose: to provide Python bindings for libmagic.")
      `(#:python ,python-2
        #:tests? #f))
     (propagated-inputs
-     `(("python2-dateutil" ,python2-dateutil)
-       ;; The python-file package also provides a magic.py module.
-       ;; This is an unfortunate state of affairs; however, s3cmd
-       ;; fails to install if it cannot find specifically the
-       ;; python-magic package.  Thus we include it, instead of using
-       ;; python-file.  Ironically, s3cmd sometimes works better
-       ;; without libmagic bindings at all:
-       ;; https://github.com/s3tools/s3cmd/issues/198
-       ("python2-magic" ,python2-magic)))
+     (list python2-dateutil
+           ;; The python-file package also provides a magic.py module.
+           ;; This is an unfortunate state of affairs; however, s3cmd
+           ;; fails to install if it cannot find specifically the
+           ;; python-magic package.  Thus we include it, instead of using
+           ;; python-file.  Ironically, s3cmd sometimes works better
+           ;; without libmagic bindings at all:
+           ;; https://github.com/s3tools/s3cmd/issues/198
+           python2-magic))
     (home-page "https://s3tools.org/s3cmd")
     (synopsis "Command line tool for S3-compatible storage services")
     (description
@@ -14399,9 +15370,9 @@ CloudFront content delivery network.")
             "107x2wmchlch8saixb488cgjz9n6inl38wi7nxkb942rbaapxiqb"))))
     (build-system python-build-system)
     (native-inputs
-      `(("python-nose" ,python-nose)))
+      (list python-nose))
     (inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (arguments
       `(#:phases
         (modify-phases %standard-phases
@@ -14455,19 +15426,36 @@ development version of CPython that are not available in older releases.")
 (define-public python-future
   (package
     (name "python-future")
-    (version "0.17.1")
+    (version "0.18.2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "future" version))
        (sha256
         (base32
-         "1f2rlqn9rh7adgir52dlbqz69gsab44x0mlm8gf1cs7xvhv54137"))))
+         "0zakvfj87gy6mn1nba06sdha63rn4njm7bhh0wzyrxhcny8avgmi"))))
     (build-system python-build-system)
     ;; Many tests connect to the network or are otherwise flawed.
     ;; https://github.com/PythonCharmers/python-future/issues/210
     (arguments
-     `(#:tests? #f))
+     `(#:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'sanity-check
+           (let ((sanity-check (assoc-ref %standard-phases 'sanity-check)))
+             (lambda* (#:key inputs outputs #:allow-other-keys #:rest args)
+               (let* ((files (find-files (site-packages inputs outputs)
+                                         "top_level\\.txt"))
+                      (backups (map (lambda (f) (string-append f ".bak"))
+                                    files)))
+                 (for-each copy-file files backups)
+                 (substitute* files
+                   ;; Nobody be usin' winreg on Guix
+                   ;; Also, don't force users to have tkinter when they don't
+                   ;; need it
+                   (("(winreg|tkinter)") ""))
+                 (apply sanity-check args)
+                 (for-each rename-file backups files))))))))
     (home-page "https://python-future.org")
     (synopsis "Single-source support for Python 3 and 2")
     (description
@@ -14492,10 +15480,9 @@ to support both Python 2 and Python 3 with minimal overhead.")
             "15ix8crpad26cfl1skyg7qajqqfdrm8q5ahhmlfmqi1aw0jqj2g2"))))
     (build-system python-build-system)
     (native-inputs
-      `(("python-cython" ,python-cython)
-        ("python-sphinx" ,python-sphinx)))
+      (list python-cython python-sphinx))
     (inputs
-      `(("pari-gp" ,pari-gp)))
+      (list pari-gp))
     (arguments
      `(#:modules ((guix build python-build-system)
                   ((guix build gnu-build-system) #:prefix gnu:)
@@ -14554,8 +15541,7 @@ respectively.")
                                    "            line += ' -L" pcre "/lib"
                                    " -L " libgc "/lib'")))
                   #t))))))
-  (inputs `(("pcre" ,pcre)
-            ("libgc" ,libgc)))
+  (inputs (list pcre libgc))
   (home-page "https://shedskin.github.io/")
   (synopsis "Experimental Python-2 to C++ Compiler")
   (description (string-append "This is an experimental compiler for a subset of
@@ -14594,7 +15580,7 @@ to occurrences in strings and comments.")
         (base32 "16z8zq83hxy48g6hh4xczbdz50qvxv9k1aahr4fqq7jis60cc262"))))
     (build-system python-build-system)
     (inputs
-     `(("file" ,file)))
+     (list file))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -14631,16 +15617,9 @@ own code, responding to click events and updating clock every second.")
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             ;; Upstream runs tests after installation and the package itself
-             ;; resides in a subdirectory. Extend PYTHONPATH so it will be
-             ;; found.
-             (setenv "PYTHONPATH"
-                     (string-append (getcwd) "/build/lib:"
-                                    (getenv "PYTHONPATH")))
              (invoke "py.test" "-vv" "tests" "README.rst"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-six" ,python-six)))
+     (list python-pytest python-six))
     (home-page "https://github.com/ionelmc/python-tblib")
     (synopsis "Traceback serialization library")
     (description
@@ -14722,10 +15701,9 @@ are synchronized with data exchanges on \"channels\".")
          "19qmqsh984zq1rzzjy4vqnmviaqnymcyl8h7z99pnicbgwnm2adz"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-graphviz" ,python-graphviz)))
+     (list python-graphviz))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("graphviz" ,graphviz)))
+     (list python-mock graphviz))
     (home-page "https://mg.pov.lt/objgraph/")
     (synopsis "Draw Python object reference graphs with graphviz")
     (description
@@ -14739,13 +15717,13 @@ graphviz.")
 (define-public python-gevent
   (package
     (name "python-gevent")
-    (version "21.1.2")
+    (version "21.12.0")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "gevent" version))
               (sha256
                (base32
-                "10f9y899y9nmq51pv4r1zb51b4w5yxx00sz5whvg9vm956hc432j"))
+                "0kh9mmq811mzfgj60n64icybjp4ryjmfmy1vg7x92yrniibn92zl"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -14830,32 +15808,18 @@ graphviz.")
                                     (string-join disabled-tests "\n")))))))
                   (replace 'check
                     (lambda _
-                      ;; Make sure the build directory is on PYTHONPATH.
-                      (setenv "PYTHONPATH"
-                              (string-append
-                               (getenv "PYTHONPATH") ":"
-                               (getcwd) "/build/"
-                               (car (scandir "build" (cut string-prefix? "lib." <>)))))
-
                       ;; Use the build daemons configured number of workers.
                       (setenv "NWORKERS" (number->string (parallel-job-count)))
 
                       (invoke "python" "-m" "gevent.tests" "-unone" "--config"
                               "known_failures.py" "--ignore" "skipped_tests.txt"))))))
     (propagated-inputs
-     `(("python-greenlet" ,python-greenlet)
-       ("python-objgraph" ,python-objgraph)
-       ("python-zope.event" ,python-zope-event)
-       ("python-zope.interface" ,python-zope-interface)))
+     (list python-greenlet python-zope-event python-zope-interface))
     (native-inputs
-     `(("python-six" ,python-six)
-
-       ;; For tests.
-       ("python-dnspython" ,python-dnspython)
-       ("python-psutil" ,python-psutil)))
+     ;; For tests.
+     (list python-dnspython python-psutil python-objgraph))
     (inputs
-     `(("c-ares" ,c-ares)
-       ("libev" ,libev)))
+     (list c-ares libev))
     (home-page "https://www.gevent.org/")
     (synopsis "Coroutine-based network library")
     (description
@@ -14894,14 +15858,21 @@ format.")
                 "17d3hnxv9qndagzz63mdpyk99xj63p9gq586vjn0rxk8cl197nym"))))
     (build-system python-build-system)
     (arguments
-     '(#:tests? #f))                    ; FIXME: some tests fail
-    (propagated-inputs
-     `(("python-zope-interface" ,python-zope-interface)
-       ("python-pyhamcrest" ,python-pyhamcrest)
-       ("python-incremental" ,python-incremental)
-       ("python-hyperlink" ,python-hyperlink)
-       ("python-constantly" ,python-constantly)
-       ("python-automat" ,python-automat)))
+     '(#:tests? #f                    ; FIXME: some tests fail
+       #:phases
+       (modify-phases %standard-phases
+         ;; Remove scripts, because they depend on [conch]
+         (add-after 'unpack 'remove-entrypoint
+           (lambda _
+             (substitute* "src/twisted/python/_setup.py"
+               (("\".+ = twisted\\.conch\\.scripts\\..+\",") "")))))))
+    (propagated-inputs
+     (list python-zope-interface
+           python-pyhamcrest
+           python-incremental
+           python-hyperlink
+           python-constantly
+           python-automat))
     (home-page "https://twistedmatrix.com/")
     (synopsis "Asynchronous networking framework written in Python")
     (description
@@ -14941,13 +15912,12 @@ focus on event-based network programming and multiprotocol integration.")
                     (lambda _
                       (invoke "nosetests"))))))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-nose" ,python-nose)
-
-       ;; These are optional at runtime, and provided here for tests.
-       ("python-gevent" ,python-gevent)
-       ("python-tornado" ,python-tornado)
-       ("python-twisted" ,python-twisted)))
+     (list python-mock
+           python-nose
+           ;; These are optional at runtime, and provided here for tests.
+           python-gevent
+           python-tornado
+           python-twisted))
     (home-page "https://pika.readthedocs.org")
     (synopsis "Pure Python AMQP Client Library")
     (description
@@ -15002,18 +15972,18 @@ data in Python.")
 (define-public python-kazoo
   (package
     (name "python-kazoo")
-    (version "2.4.0")
+    (version "2.8.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "kazoo" version))
        (sha256
         (base32
-         "16y213k7r8shyn2zw1k6lkzjgcrvm441pqv8scvcjixhvpbx3hm7"))))
+         "1zpj5cc8624w6i0pxgcxqkjwbkm4pkrv19d7wh5df3jais32g3jq"))))
     (build-system python-build-system)
     (arguments '(#:tests? #f)) ; XXX: needs zookeeper
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://kazoo.readthedocs.org")
     (synopsis "High-level Zookeeper client library")
     (description
@@ -15038,11 +16008,9 @@ programming errors.")
     (build-system python-build-system)
     (arguments '(#:tests? #f)) ; XXX: needs zookeeper, kafka, etc.
     (propagated-inputs
-     `(("python-gevent" ,python-gevent)
-       ("python-kazoo" ,python-kazoo)
-       ("python-tabulate" ,python-tabulate)))
+     (list python-gevent python-kazoo python-tabulate))
     (inputs
-     `(("librdkafka" ,librdkafka)))
+     (list librdkafka))
     (home-page "https://pykafka.readthedocs.io/")
     (synopsis "Apache Kafka client for Python")
     (description
@@ -15106,7 +16074,8 @@ etc.")
               (uri (pypi-uri "chai" version))
               (sha256
                (base32
-                "1k6n6zbgrrs83crp6mr3yqj9zlv40b8rpisyrliwsq7naml2p3gz"))))
+                "1k6n6zbgrrs83crp6mr3yqj9zlv40b8rpisyrliwsq7naml2p3gz"))
+              (patches (search-patches "python-chai-drop-python2.patch"))))
     (build-system python-build-system)
     (home-page "https://github.com/agoragames/chai")
     (synopsis "Mocking framework for Python")
@@ -15115,9 +16084,6 @@ etc.")
 objects, patterned after the Mocha library for Ruby.")
     (license license:bsd-3)))
 
-(define-public python2-chai
-  (package-with-python2 python-chai))
-
 (define-public python-inflection
   (package
     (name "python-inflection")
@@ -15130,7 +16096,7 @@ objects, patterned after the Mocha library for Ruby.")
                "1jhnxgnw8y3mbzjssixh6qkc7a3afc4fygajhqrqalnilyvpzshq"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/jpvanhal/inflection")
     (synopsis "Python string transformation library")
     (description
@@ -15175,15 +16141,10 @@ Wikipedia code samples at
                 "17q6wi3q280kxmxzb2iwnnqih2xbljn18v0bjx2ip18p079j43ix"))))
     (build-system python-build-system)
     (native-inputs
-     `( ;; For testing
-       ("python-mock" ,python-mock)
-       ("python-pytest-mock" ,python-pytest-mock)
-       ("python-pytest" ,python-pytest)))
+     (list ;; For testing
+           python-mock python-pytest-mock python-pytest))
     (propagated-inputs
-     `(("python-backpack" ,python-backpack)
-       ("python-clikit" ,python-clikit)
-       ("python-pastel" ,python-pastel)
-       ("python-pylev" ,python-pylev)))
+     (list python-backpack python-clikit python-pastel python-pylev))
     (home-page "https://github.com/sdispater/cleo")
     (synopsis "Command-line arguments library for Python")
     (description
@@ -15206,8 +16167,7 @@ docstring and colored output.")
         (base32 "062n694sfv24ylda6nh8228y2q9hrvy554kqx84y7czsjfbg4mxc"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pyyaml" ,python-pyyaml)))
+     (list python-pytest python-pyyaml))
     (home-page "https://github.com/sdispater/tomlkit")
     (synopsis "Style-preserving TOML library")
     (description
@@ -15260,7 +16220,7 @@ running in.")
          "0kvyapavbirk2x3n1jx4yb9nyigrj1s3x15nm3qhpvhkpqvqdqm2"))
        (patches (search-patches "python-memcached-syntax-warnings.patch"))))
     (build-system python-build-system)
-    (propagated-inputs `(("python-six" ,python-six)))
+    (propagated-inputs (list python-six))
     (home-page
      "https://github.com/linsomniac/python-memcached")
     (synopsis "Pure python memcached client")
@@ -15284,9 +16244,7 @@ more, possibly remote, memcached servers.")
     (build-system python-build-system)
     (arguments '(#:tests? #f))  ; no test in the PyPI tarball
     (propagated-inputs
-     `(("python-crashtest" ,python-crashtest)
-       ("python-pastel" ,python-pastel)
-       ("python-pylev" ,python-pylev)))
+     (list python-crashtest python-pastel python-pylev))
     (home-page "https://github.com/sdispater/clikit")
     (synopsis "Group of utilities to build command line interfaces")
     (description
@@ -15344,15 +16302,10 @@ strings require only one extra byte in addition to the strings themselves.")
            (lambda _ (invoke "pifpaf" "run" "memcached" "--port" "11211" "--"
                              "pytest"))))))
     (native-inputs
-     `(("memcached" ,memcached)
-       ("python-fakeredis" ,python-fakeredis)
-       ("python-flexmock" ,python-flexmock)
-       ("python-pifpaf" ,python-pifpaf)
-       ("python-pytest" ,python-pytest)))
+     (list memcached python-fakeredis python-flexmock python-pifpaf
+           python-pytest))
     (propagated-inputs
-     `(("python-memcached" ,python-memcached)
-       ("python-msgpack-python" ,python-msgpack-python)
-       ("python-redis" ,python-redis)))
+     (list python-memcached python-msgpack-python python-redis))
     (home-page "https://github.com/sdispater/cachy")
     (synopsis "Simple yet effective caching library")
     (description
@@ -15364,47 +16317,46 @@ database, file, dict stores.  Cachy supports python versions 2.7+ and 3.2+.")
 (define-public poetry
   (package
     (name "poetry")
-    (version "1.1.5")
-    ;; Poetry can only be built from source with Poetry.
+    (version "1.1.12")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "poetry" version))
        (sha256
         (base32
-         "1dvx08ksv5wnsj45db23921rj136akmcnxa0kmlsddf3wbh6wcka"))))
+         "0rr54mvcfcv9cv6vw2122y28xvd2pwqpv2x8c8j5ayz3gwsy4rjw"))))
     (build-system python-build-system)
     (arguments
-     `(#:tests? #f ;; Pypi does not have tests.
+     `(#:tests? #f                      ;PyPI does not have tests
        #:phases
        (modify-phases %standard-phases
          (add-before 'build 'patch-setup-py
            (lambda _
              (substitute* "setup.py"
-               ;; Allow newer versions of python-keyring.
+               ;; Relax some of the requirements.
                (("(keyring>=21.2.0),<22.0.0" _ keyring) keyring)
-               ;; TODO: remove after the next release cycle,
-               ;; when packaging has been updated.
-               (("packaging>=20.4,<21.0") "packaging>=20.0,<21.0"))
-             #t)))))
-    (propagated-inputs
-     `(("python-cachecontrol" ,python-cachecontrol)
-       ("python-cachy" ,python-cachy)
-       ("python-cleo" ,python-cleo)
-       ("python-clikit" ,python-clikit)
-       ("python-html5lib" ,python-html5lib)
-       ("python-keyring" ,python-keyring)
-       ("python-msgpack-transitional" ,python-msgpack-transitional)
-       ("python-packaging" ,python-packaging)
-       ("python-pexpect" ,python-pexpect)
-       ("python-pip" ,python-pip)
-       ("python-pkginfo" ,python-pkginfo)
-       ("python-poetry-core" ,python-poetry-core)
-       ("python-requests" ,python-requests)
-       ("python-requests-toolbelt" ,python-requests-toolbelt-0.9.1)
-       ("python-shellingham" ,python-shellingham)
-       ("python-tomlkit" ,python-tomlkit)
-       ("python-virtualenv" ,python-virtualenv)))
+               (("(packaging>=20.4),<21.0" _ packaging) packaging)))))))
+    (propagated-inputs
+     (list python-cachecontrol
+           python-cachy
+           python-cleo
+           python-crashtest
+           python-entrypoints
+           python-html5lib
+           python-keyring
+           ; Use of deprecated version of msgpack reported upstream:
+           ; https://github.com/python-poetry/poetry/issues/3607
+           python-msgpack-transitional
+           python-packaging
+           python-pexpect
+           python-pip
+           python-pkginfo
+           python-poetry-core
+           python-requests
+           python-requests-toolbelt
+           python-shellingham
+           python-tomlkit
+           python-virtualenv))
     (home-page "https://python-poetry.org")
     (synopsis "Python dependency management and packaging made easy")
     (description "Poetry is a tool for dependency management and packaging
@@ -15454,24 +16406,19 @@ some degree most natural languages too.")
              (delete-file "libcst/tests/test_pyre_integration.py")
              (delete-file "libcst/codemod/tests/test_codemod_cli.py")
              (delete-file "libcst/metadata/tests/test_full_repo_manager.py")
-             (delete-file "libcst/metadata/tests/test_type_inference_provider.py")
-             #t))
+             (delete-file "libcst/metadata/tests/test_type_inference_provider.py")))
          (add-before 'check 'generate-test-data
            (lambda _
-             (setenv "PYTHONPATH" (string-append (getcwd) ":" (getenv "PYTHONPATH")))
              (invoke "python" "-m" "libcst.codegen.generate" "visitors")
              (invoke "python" "-m" "libcst.codegen.generate" "return_types")))
          (replace 'check
-           (lambda _
-             (invoke "python" "-m" "unittest")
-             #t)))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "python" "-m" "unittest")))))))
     (native-inputs
-     `(("python-black" ,python-black)
-       ("python-isort" ,python-isort)))
+     (list python-black python-isort))
     (propagated-inputs
-     `(("python-typing-extensions" ,python-typing-extensions)
-       ("python-typing-inspect" ,python-typing-inspect)
-       ("python-pyyaml" ,python-pyyaml)))
+     (list python-typing-extensions python-typing-inspect python-pyyaml))
     (home-page "https://github.com/Instagram/LibCST")
     (synopsis "Concrete Syntax Tree (CST) parser and serializer library for Python")
     (description
@@ -15489,6 +16436,14 @@ feels like an AST.")
                    ;; libcst/_add_slots.py
                    license:asl2.0))))
 
+(define-public python-libcst-minimal
+  (hidden-package
+   (package
+     (inherit python-libcst)
+     (name "python-libcst-minimal")
+     (arguments '(#:tests? #f))
+     (native-inputs '()))))
+
 (define-public python-typing-inspect
   (package
     (name "python-typing-inspect")
@@ -15498,11 +16453,11 @@ feels like an AST.")
               (uri (pypi-uri "typing_inspect" version))
               (sha256
                (base32
-                "1dzs9a1pr23dhbvmnvms2jv7l7jk26023g5ysf0zvnq8b791s6wg"))))
+                "1dzs9a1pr23dhbvmnvms2jv7l7jk26023g5ysf0zvnq8b791s6wg"))
+              (patches (search-patches "python-typing-inspect-fix.patch"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-mypy-extensions" ,python-mypy-extensions)
-       ("python-typing-extensions" ,python-typing-extensions)))
+     (list python-mypy-extensions python-typing-extensions))
     (home-page "https://github.com/ilevkivskyi/typing_inspect")
     (synopsis "API for inspection of types in the Python @code{typing} module")
     (description
@@ -15521,7 +16476,7 @@ inspection of types defined in the Python standard typing module.")
                (base32
                 "0hwh29m9wa582ramj30p4pysckdrmki1z1b8iaaxk6mpfx2kc8wp"))))
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-setuptools-scm))
     (build-system python-build-system)
     (home-page "https://github.com/ionelmc/python-lazy-object-proxy")
     (synopsis "Lazy object proxy for python")
@@ -15544,8 +16499,21 @@ until the object is actually required, and caches the result of said call.")
                (base32
                 "1m0xvyby8baaxp6pfm0fgq8d2pq5dd8qm8bzfbrs009jaw5pza74"))))
     (build-system python-build-system)
-    (native-inputs `(("unzip" ,unzip)))
-    (arguments '(#:tests? #f))          ; XXX: requires internet access
+    (arguments
+     `(#:tests? #f                      ; XXX: requires internet access
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-getprotobyname-calls
+           ;; These calls are problematic in the build environment as there is
+           ;; no /etc/protocols.  This breaks the sanity-check phase of any
+           ;; package depnding on this one.
+           (lambda _
+             (substitute* "dns/rdtypes/IN/WKS.py"
+               (("socket.getprotobyname\\('tcp'\\)")
+                "6")
+               (("socket.getprotobyname\\('udp'\\)")
+                "17")))))))
+    (native-inputs (list unzip))
     (home-page "https://www.dnspython.org")
     (synopsis "DNS toolkit for Python")
     (description
@@ -15621,8 +16589,7 @@ simple, lightweight implementation.")
                (("dnspython3") "dnspython"))
              #t)))))
     (propagated-inputs
-     `(("python-dnspython" ,python-dnspython)
-       ("python-idna" ,python-idna)))
+     (list python-dnspython python-idna))
     (home-page "https://github.com/JoshData/python-email-validator")
     (synopsis "Email address validation library for Python")
     (description
@@ -15635,14 +16602,29 @@ simple, lightweight implementation.")
 (define-public python-ukpostcodeparser
   (package
     (name "python-ukpostcodeparser")
-    (version "1.0.3")
+    (version "1.1.2")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "UkPostcodeParser" version))
               (sha256
                (base32
-                "1jwg9z4rz51mcka1821rwgycsd0mcicyp1kiwjfa2kvg8bm9p2qd"))))
+                "03jkf1ygbwq3akzbcjyjk1akc1hv2sfgx90306pq1nwklbpn80lk"))))
     (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               ;; Tests for lowercase postcodes fail.
+               (invoke "pytest" "-vv" "ukpostcodeparser/test/parser.py" "-k"
+                       (string-append "not test_091 "
+                                      "and not test_097 "
+                                      "and not test_098 "
+                                      "and not test_125 "
+                                      "and not test_131"))))))))
+    (native-inputs
+     (list python-pytest))
     (home-page "https://github.com/hamstah/ukpostcodeparser")
     (synopsis "UK Postcode parser for Python")
     (description
@@ -15655,58 +16637,35 @@ parsing UK postcodes.")
 
 (define-public python-faker
   (package
-  (name "python-faker")
-  (version "4.0.2")
-  (source (origin
-            (method url-fetch)
-            (uri (pypi-uri "Faker" version))
-            (sha256
-             (base32
-              "13qq485ydxmdnqn3xbfv1xfyqbf9qfnfw33v1vw5l6jyy9p8cgrd"))))
-  (build-system python-build-system)
-  (arguments
-   '(#:phases
-     (modify-phases %standard-phases
-       (replace 'check
-         (lambda _ (invoke "python" "-m" "pytest" "-v"))))))
-  (native-inputs
-   `(;; For testing
-     ("python-freezegun" ,python-freezegun)
-     ("python-pytest" ,python-pytest)
-     ("python-random2" ,python-random2)
-     ("python-ukpostcodeparser" ,python-ukpostcodeparser)
-     ("python-validators" ,python-validators)))
-  (propagated-inputs
-   `(("python-dateutil" ,python-dateutil)
-     ("python-text-unidecode" ,python-text-unidecode)))
-  (home-page "https://github.com/joke2k/faker")
-  (synopsis "Python package that generates fake data")
-  (description
-   "Faker is a Python package that generates fake data such as names,
+    (name "python-faker")
+    (version "9.3.1")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "Faker" version))
+              (sha256
+               (base32
+                "0lpfdc4ndvk7chgqrfd2b1my4n54pccq9b645vp9cp5s5ypyknfd"))))
+    (build-system python-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda _ (invoke "python" "-m" "pytest" "-v"))))))
+    (native-inputs
+     (list ;; For testing
+           python-freezegun
+           python-pytest-6
+           python-random2
+           python-ukpostcodeparser
+           python-validators))
+    (propagated-inputs
+     (list python-dateutil python-text-unidecode))
+    (home-page "https://github.com/joke2k/faker")
+    (synopsis "Python package that generates fake data")
+    (description
+     "Faker is a Python package that generates fake data such as names,
 addresses, and phone numbers.")
-  (license license:expat)
-  (properties `((python2-variant . ,(delay python2-faker))))))
-
-;; Faker 4.0 dropped Python 2 support, so we stick with this older version here.
-(define-public python2-faker
-  (let ((base (package-with-python2 (strip-python2-variant
-                                     python-faker))))
-    (package
-      (inherit base)
-      (version "3.0.1")
-      (source (origin
-                (method url-fetch)
-                (uri (pypi-uri "Faker" version))
-                (sha256
-                 (base32
-                  "11cr0qvspkdh6198rqy56qildk7bnp6llj8kyy1dan5sp5n4dxy7"))))
-      (native-inputs
-       `(("python-mock" ,python2-mock)
-         ,@(package-native-inputs base)))
-      (propagated-inputs
-       `(("python2-ipaddress" ,python2-ipaddress)
-         ("python2-six" ,python2-six)
-         ,@(package-propagated-inputs base))))))
+    (license license:expat)))
 
 (define-public python-pyaml
   (package
@@ -15720,9 +16679,9 @@ addresses, and phone numbers.")
                 "0fi604ix8lbpj1266q7js6szm771saprdzzcdwmj43wy83694qmr"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-unidecode" ,python-unidecode)))
+     (list python-unidecode))
     (propagated-inputs
-     `(("python-pyyaml" ,python-pyyaml)))
+     (list python-pyyaml))
     (home-page "https://github.com/mk-fg/pretty-yaml")
     (synopsis "YAML pretty-print library for Python")
     (description
@@ -15746,10 +16705,9 @@ YAML-serialized data.")
          "14rq1mvm0jda90lcx9gyyby9dvq4x3js2cmxvd6vl4686ixwyqh1"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-nose" ,python-nose)))
+     (list python-pytest python-nose python-toml))
     (propagated-inputs
-     `(("python-simplejson" ,python-simplejson)))
+     (list python-simplejson))
     (home-page "https://github.com/sdispater/backpack")
     (synopsis "Utilities for working with Python collections")
     (description "Backpack provides some useful utilities for working with
@@ -15782,9 +16740,9 @@ collections of data.")
              (add-installed-pythonpath inputs outputs)
              (invoke "py.test"))))))
     (propagated-inputs
-     `(("python-wcwidth" ,python-wcwidth)))
+     (list python-wcwidth))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/prompt-toolkit/python-prompt-toolkit")
     (synopsis "Library for building command line interfaces in Python")
     (description
@@ -15808,9 +16766,7 @@ characters, mouse support, and auto suggestions.")
         (base32
          "0fgacqk73w7s932vy46pan2yp8rvjmlkag20xvaydh9mhf6h85zx"))))
     (propagated-inputs
-     `(("python-wcwidth" ,python-wcwidth)
-       ("python-six" ,python-six)
-       ("python-pygments" ,python-pygments)))
+     (list python-wcwidth python-six python-pygments))
     (properties '())))
 
 (define-public python2-prompt-toolkit
@@ -15833,13 +16789,18 @@ characters, mouse support, and auto suggestions.")
 (define-public python-jedi
   (package
     (name "python-jedi")
-    (version "0.17.2")
+    (version "0.18.1")
     (source
      (origin
-       (method url-fetch)
-       (uri (pypi-uri "jedi" version))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/davidhalter/jedi")
+             (commit (string-append "v" version))
+             (recursive? #true)))
+       (file-name (git-file-name name version))
        (sha256
-        (base32 "080xyf97ifabdz7jp8clg00b8zv5g33fva1fb2xf80q6fndpvvc6"))))
+        (base32
+         "07drmi3ai49jw5n23ibkambcgijqcw073ihypjgxfnks5lv4yqy1"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -15851,10 +16812,9 @@ characters, mouse support, and auto suggestions.")
                (invoke "python" "-m" "pytest" "-vv"))
              #t)))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-docopt" ,python-docopt)))
+     (list python-colorama python-docopt python-django-2.2 python-pytest))
     (propagated-inputs
-     `(("python-parso" ,python-parso)))
+     (list python-parso))
     (home-page "https://github.com/davidhalter/jedi")
     (synopsis "Autocompletion and static analysis library for Python")
     (description
@@ -15862,13 +16822,10 @@ characters, mouse support, and auto suggestions.")
 Development Environments (@dfn{IDE}s) and text editors.  It understands Python
 on a deeper level than many other static analysis frameworks for Python.
 
-Jedi understands docstrings and you can use Jedi autocompletion in your REPL as
-well.")
+Jedi understands docstrings and you can use Jedi autocompletion in your REPL
+as well.")
     (license license:expat)))
 
-(define-public python2-jedi
-  (package-with-python2 python-jedi))
-
 (define-public ptpython
   (package
     (name "ptpython")
@@ -15883,18 +16840,15 @@ well.")
     (arguments
      `(#:tests? #f)) ;there are no tests
     (propagated-inputs
-     `(("python-appdirs" ,python-appdirs)
-       ("python-black" ,python-black)
-       ("python-jedi" ,python-jedi)
-       ("python-prompt-toolkit" ,python-prompt-toolkit)
-       ("python-pygments" ,python-pygments)))
+     (list python-appdirs python-black python-jedi python-prompt-toolkit
+           python-pygments))
     (home-page "https://github.com/jonathanslenders/ptpython")
     (synopsis "Python Read-Eval-Print-Loop with nice IDE-like features")
     (description
      "ptpython is a Python read-eval-print loop with IDE-like features.
-It supports syntax highlighting, multiline editing, autocompletion, mouse,
-color schemes, bracketed paste, Vi and Emacs keybindings, Chinese characters
-etc.")
+     It supports syntax highlighting, multiline editing, autocompletion, mouse,
+     color schemes, bracketed paste, Vi and Emacs keybindings, Chinese characters
+     etc.")
     (license license:bsd-3)
     (properties `((python2-variant . ,(delay ptpython-2))))))
 
@@ -15937,15 +16891,13 @@ etc.")
     (arguments
      `(#:test-target "pytest"))
     (native-inputs
-     `(("python-easyprocess" ,python-easyprocess)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-easyprocess python-pytest python-pytest-runner))
     (home-page "https://github.com/ponty/entrypoint2")
     (synopsis "Command-line interface for Python modules")
     (description
      "@code{entrypoint2} is an easy to use command-line interface for Python
-modules based on @code{argparse}.  It translates function signature and
-documentation to argparse configuration.")
+     modules based on @code{argparse}.  It translates function signature and
+     documentation to argparse configuration.")
     (license license:bsd-3)))
 
 (define-public python-pyvirtualdisplay
@@ -15964,13 +16916,10 @@ documentation to argparse configuration.")
      ;; FileNotFoundError: [Errno 2] No such file or directory: 'Xvnc'.
      `(#:tests? #f))
     (native-inputs
-     `(("python-entrypoint2" ,python-entrypoint2)
-       ("python-psutil" ,python-psutil)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-entrypoint2 python-psutil python-pytest
+           python-pytest-runner))
     (propagated-inputs
-     `(("python-easyprocess" ,python-easyprocess)
-       ("python-pillow" ,python-pillow)))
+     (list python-easyprocess python-pillow))
     (home-page "https://github.com/ponty/pyvirtualdisplay")
     (synopsis "Python wrapper for Xvfb, Xephyr and Xvnc")
     (description
@@ -15992,21 +16941,25 @@ documentation to argparse configuration.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'fix-tests
+           ;; See https://github.com/torproject/stem/issues/56
+           (lambda _
+             (substitute* "run_tests.py"
+               (("test\\.task\\.MOCK_VERSION,")
+                ""))))
          (replace 'check
            (lambda _
              (invoke "./run_tests.py" "--unit")
              #t)))))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pycodestyle" ,python-pycodestyle)
-       ("python-pyflakes" ,python-pyflakes)))
+     (list python-mock python-pycodestyle python-pyflakes))
     (home-page "https://stem.torproject.org/")
     (synopsis
      "Python controller library that allows applications to interact with Tor")
     (description
      "Stem is a Python controller library for Tor.  With it you can use Tor's
-control protocol to script against the Tor process and read descriptor data
-relays publish about themselves.")
+     control protocol to script against the Tor process and read descriptor data
+     relays publish about themselves.")
     (license license:lgpl3)))
 
 (define-public python-pyserial
@@ -16032,8 +16985,8 @@ relays publish about themselves.")
       "https://github.com/pyserial/pyserial")
     (synopsis "Python Serial Port Bindings")
     (description "@code{pyserial} provide serial port bindings for Python.  It
-supports different byte sizes, stop bits, parity and flow control with RTS/CTS
-and/or Xon/Xoff.  The port is accessed in RAW mode.")
+     supports different byte sizes, stop bits, parity and flow control with RTS/CTS
+     and/or Xon/Xoff.  The port is accessed in RAW mode.")
     (license license:bsd-3)))
 
 (define-public python2-pyserial
@@ -16050,17 +17003,17 @@ and/or Xon/Xoff.  The port is accessed in RAW mode.")
        (sha256
         (base32 "0cwd2cjz859v6jrm3y6hikfqjyhyfj5vhfjb8vvflvl6791yah8n"))))
     (build-system python-build-system)
-    (propagated-inputs `(("python-pyserial" ,python-pyserial)))
+    (propagated-inputs (list python-pyserial))
     (home-page "https://github.com/pyserial/pyserial-asyncio")
     (synopsis "Pyserial asynchronous I/O extension")
     (description "This package extends Pyserial with asynchronous I/O
-support.")
+     support.")
     (license license:bsd-3)))
 
 (define-public python-pymodbus
   (package
     (name "python-pymodbus")
-    (version "2.5.2")
+    (version "2.5.3")
     (source
      (origin
        (method git-fetch)
@@ -16070,61 +17023,92 @@ support.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "009blvzi56434f0qfjdg3r8q1flb1jcx2786wi0i0xf81025z9cf"))))
+         "0kjjrx7xrlx0pf3y67hhr4xvqrly3xzmvf6ic5as61m6z19m7zd5"))))
     (build-system python-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (add-after 'unpack 'disable-problematic-tests
                     (lambda _
-                      ;; The following test module rely on Python's own 'test'
-                      ;; module, which is not distributed in the Python
+                      ;; The following test modules rely on Python's own
+                      ;; 'test' module, which is not distributed in the Python
                       ;; package of Guix.
                       (delete-file "test/test_client_async_asyncio.py")
-                      (delete-file "test/test_client_sync_diag.py")))
+                      (delete-file "test/test_client_sync_diag.py")
+                      ;; The following test module requires the asynctest
+                      ;; library, abandoned without support for Python 3.9+
+                      ;; (see:
+                      ;; https://github.com/riptideio/pymodbus/issues/681).
+                      (delete-file "test/test_server_asyncio.py")))
                   (replace 'check
                     (lambda* (#:key tests? #:allow-other-keys)
                       (when tests?
                         (invoke "python" "-m" "pytest")))))))
     (native-inputs
-     `(("python-asynctest" ,python-asynctest)
-       ("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("python-redis" ,python-redis)
-       ("python-sqlalchemy" ,python-sqlalchemy)
-       ("python-tornado" ,python-tornado)
-       ("python-twisted" ,python-twisted)))
-    (propagated-inputs
-     `(("python-pyserial" ,python-pyserial)
-       ("python-six" ,python-six)
-       ;; For the REPL.
-       ("python-aiohttp" ,python-aiohttp)
-       ("python-click" ,python-click)
-       ("python-prompt-toolkit" ,python-prompt-toolkit)
-       ("python-pygments" ,python-pygments)
-       ("python-pyserial-asyncio" ,python-pyserial-asyncio)))
+     (list python-mock
+           python-pytest
+           python-redis
+           python-sqlalchemy
+           python-tornado
+           python-twisted))
+    (propagated-inputs
+     (list python-pyserial
+           python-six
+           ;; For the REPL.
+           python-aiohttp
+           python-click
+           python-prompt-toolkit
+           python-pygments
+           python-pyserial-asyncio))
     (home-page "https://github.com/riptideio/pymodbus/")
     (synopsis "Modbus protocol stack in Python")
     (description "Pymodbus is a full Modbus protocol implementation using
-@code{asyncio}, @code{tornado} or @code{twisted} for its asynchronous
-communications core.  It includes the following @emph{client} features:
-@itemize
-@item full read/write protocol on discrete and register
-@item most of the extended protocol (diagnostic/file/pipe/setting/information)
-@item TCP, UDP, Serial ASCII, Serial RTU, and Serial Binary
-@item asynchronous and synchronous versions
-@item payload builder/decoder utilities
-@item pymodbus read eval print loop (REPL).
-@end itemize
-It also includes the following @emph{server} features:
-@itemize
-@item can function as a fully implemented Modbus server
-@item TCP, UDP, Serial ASCII, Serial RTU, and Serial Binary
-@item asynchronous and synchronous versions
-@item full server control context (device information, counters, etc)
-@item a number of backing contexts (database, redis, sqlite, a slave device).
-@end itemize")
+     @code{asyncio}, @code{tornado} or @code{twisted} for its asynchronous
+     communications core.  It includes the following @emph{client} features:
+     @itemize
+     @item full read/write protocol on discrete and register
+     @item most of the extended protocol (diagnostic/file/pipe/setting/information)
+     @item TCP, UDP, Serial ASCII, Serial RTU, and Serial Binary
+     @item asynchronous and synchronous versions
+     @item payload builder/decoder utilities
+     @item pymodbus read eval print loop (REPL).
+     @end itemize
+     It also includes the following @emph{server} features:
+     @itemize
+     @item can function as a fully implemented Modbus server
+     @item TCP, UDP, Serial ASCII, Serial RTU, and Serial Binary
+     @item asynchronous and synchronous versions
+     @item full server control context (device information, counters, etc)
+     @item a number of backing contexts (database, redis, sqlite, a slave device).
+     @end itemize")
     (license license:bsd-3)))
 
+(define-public python-kivy-garden
+  (package
+    (name "python-kivy-garden")
+    (version "0.1.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "kivy-garden" version))
+       (sha256
+        (base32 "0wkcpr2zc1q5jb0bi7v2dgc0vs5h1y7j42mviyh764j2i0kz8mn2"))))
+    (build-system python-build-system)
+    (arguments
+     '(#:phases (modify-phases %standard-phases
+                  (add-after 'install 'remove-bat-file
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      (let ((out (assoc-ref outputs "out")))
+                        (delete-file
+                         (string-append out "/bin/garden.bat"))))))))
+    (propagated-inputs
+     (list python-requests))
+    (home-page "https://github.com/kivy-garden/garden")
+    (synopsis "Garden tool for Kivy flowers")
+    (description
+     "This package provides the @command{garden} command to install packages
+for Kivy, the multitouch application platform.")
+    (license license:expat)))
+
 (define-public python-kivy
   (package
     (name "python-kivy")
@@ -16145,23 +17129,25 @@ It also includes the following @emph{server} features:
          (add-after 'patch-generated-file-shebangs 'set-sdl-paths
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "KIVY_SDL2_PATH"
-                     (string-append (assoc-ref inputs "sdl-union")
-                                    "/include/SDL2"))
-             #t)))))
+                     (search-input-directory inputs "/include/SDL2"))))
+         (add-before 'sanity-check 'set-home
+           (lambda _
+             ;; 'kivy/__init__.py' wants to create $HOME/.kivy.
+             (setenv "HOME" (getcwd)))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python-cython" ,python-cython)))
+     (list pkg-config python-cython))
     (inputs
-     `(("gstreamer" ,gstreamer)
-       ("mesa" ,mesa)
-       ("sdl-union"
-        ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))))
+     (list gstreamer
+           mesa
+           (sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf))
+           python-docutils
+           python-kivy-garden
+           python-pygments))
     (home-page "https://kivy.org")
-    (synopsis
-     "Multitouch application framework")
+    (synopsis "Multitouch application framework")
     (description
-     "A software library for rapid development of
-hardware-accelerated multitouch applications.")
+     "Kivy is a software library for rapid development of hardware-accelerated
+multitouch applications.")
     (license license:expat)))
 
 (define-public python2-kivy
@@ -16189,12 +17175,11 @@ hardware-accelerated multitouch applications.")
               (("average_size=512") ""))
              #t)))))
     (propagated-inputs
-     `(("python-chardet" ,python-chardet)
-       ("python-hypothesis" ,python-hypothesis)))
+     (list python-chardet python-hypothesis))
     (home-page "https://github.com/audreyr/binaryornot")
     (synopsis "Package to check if a file is binary or text")
     (description "Ultra-lightweight pure Python package to check if a file is
-binary or text.")
+     binary or text.")
     (license license:bsd-3)
     (properties `((python2-variant . ,(delay python2-binaryornot))))))
 
@@ -16205,10 +17190,10 @@ binary or text.")
        `(("python2-enum34" ,python2-enum34)
          ,@(package-propagated-inputs base))))))
 
-(define-public python-binwalk
+(define-public binwalk
   (package
-    (name "python-binwalk")
-    (version "2.2.0")
+    (name "binwalk")
+    (version "2.3.2")
     (source
      (origin
        (method git-fetch)
@@ -16217,29 +17202,25 @@ binary or text.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32
-         "1bxgj569fzwv6jhcbl864nmlsi9x1k1r20aywjxc8b9b1zgqrlvc"))))
+        (base32 "01dalxw07c42ka4fqpixcacvy42h04ya909lzpmsblr9s2xdgwcm"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-before 'check 'set-pythonpath
+         (add-before 'check 'set-home
            (lambda _
-             (setenv "PYTHONPATH"
-                     (string-append
-                      (getcwd) "/src/"
-                      ":" (getenv "PYTHONPATH")))
-             (setenv "HOME" "")
-             #t)))))
+             (setenv "HOME" ""))))))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-nose" ,python-nose)))
+     (list python-coverage python-nose))
     (home-page "https://github.com/ReFirmLabs/binwalk")
     (synopsis "Firmware analysis tool")
     (description "Binwalk is a tool for analyzing, reverse engineering, and
-extracting firmware images")
+     extracting firmware images")
     (license license:expat)))
 
+(define-public python-binwalk
+  (deprecated-package "python-binwalk" binwalk))
+
 (define-public python-nltk
   (package
     (name "python-nltk")
@@ -16256,18 +17237,15 @@ extracting firmware images")
        ;; TODO Try packaging these resources.
        #:tests? #f))
     (propagated-inputs
-     `(("python-click" ,python-click)
-       ("python-joblib" ,python-joblib)
-       ("python-regex" ,python-regex)
-       ("python-tqdm" ,python-tqdm)))
+     (list python-click python-joblib python-regex python-tqdm))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "http://nltk.org/")
     (synopsis "Natural Language Toolkit")
     (description "It provides interfaces to over 50 corpora and lexical
-resources such as WordNet, along with a suite of text processing libraries
-for classification, tokenization, stemming, tagging, parsing, and semantic
-reasoning, wrappers for natural language processing libraries.")
+     resources such as WordNet, along with a suite of text processing libraries
+     for classification, tokenization, stemming, tagging, parsing, and semantic
+     reasoning, wrappers for natural language processing libraries.")
     (license license:asl2.0)))
 
 ;; Versions >=3.5 breaks backward-compatibility,
@@ -16282,10 +17260,7 @@ reasoning, wrappers for natural language processing libraries.")
        (uri (pypi-uri "nltk" version ".zip"))
        (sha256
         (base32 "153x2clrnigs74jdgnn3qmljdjj4gprmvpdvh49i18ls4m8mbm5y"))))
-    (propagated-inputs `(("python-six" ,python-six)))))
-
-(define-public python2-nltk
-  (package-with-python2 python-nltk))
+    (propagated-inputs (list python-six))))
 
 (define-public python-pymongo
   (package
@@ -16299,15 +17274,12 @@ reasoning, wrappers for natural language processing libraries.")
                 "0zis4707r9hdg5qgkhp3wss9camr9h56ixyfc8n9dxwlnnly4x4c"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-certifi" ,python-certifi)))
+     (list python-certifi))
     (home-page "https://github.com/mongodb/mongo-python-driver")
     (synopsis "Python driver for MongoDB")
     (description "Python driver for MongoDB.")
     (license license:asl2.0)))
 
-(define-public python2-pymongo
-  (package-with-python2 python-pymongo))
-
 (define-public python-consul
   (package
     (name "python-consul")
@@ -16323,13 +17295,12 @@ reasoning, wrappers for natural language processing libraries.")
     (arguments
      '(#:tests? #f)) ; The tests are not distributed
     (propagated-inputs
-     `(("python-requests" ,python-requests)
-       ("python-six" ,python-six)))
+     (list python-requests python-six))
     (home-page "https://github.com/cablehead/python-consul")
     (synopsis "Python client for Consul")
     (description
      "Python client for @url{http://www.consul.io/,Consul}, a tool for service
-discovery, monitoring and configuration.")
+     discovery, monitoring and configuration.")
     (license license:expat)))
 
 (define-public python2-consul
@@ -16350,7 +17321,7 @@ discovery, monitoring and configuration.")
         (base32 "0xdqskycznqc7mfp60bhw1zq8wx7yx1dvmbq3brnm1dx3xnqa0zd"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (arguments
      ;; The tests require a bunch of not very nice packages with fixed
      ;; version requirements (e.g. python-coveralls).
@@ -16378,18 +17349,16 @@ discovery, monitoring and configuration.")
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (setenv "PYTHONPATH" (string-append "./build/lib:"
-                                                 (getenv "PYTHONPATH")))
              (invoke "pytest" "-vv"))))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (propagated-inputs
-     `(("python-defusedxml" ,python-defusedxml)))
+     (list python-defusedxml))
     (home-page "https://github.com/eea/odfpy")
     (synopsis "Python API and tools to manipulate OpenDocument files")
     (description "Collection of libraries and utility programs written in
-Python to manipulate OpenDocument 1.2 files.")
+     Python to manipulate OpenDocument 1.2 files.")
     (license
      ;; The software is mainly dual GPL2+ and ASL2.0, but includes a
      ;; number of files with other licenses.
@@ -16410,42 +17379,27 @@ Python to manipulate OpenDocument 1.2 files.")
                 "00y49bfsi7rrsd1s42gc2w95a6arl9ipdsx2493hr0v54fj07ih0"))))
     (build-system python-build-system)
     (arguments
-     `(#:modules ((guix build utils)
-                  (guix build python-build-system)
-                  (srfi srfi-1)
-                  (srfi srfi-26)
-                  (ice-9 ftw))
-       #:phases
+     `(#:phases
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (let ((cwd (getcwd)))
-               (setenv "PYTHONPATH"
-                       (string-append
-                        cwd "/build/"
-                        (find (cut string-prefix? "lib" <>)
-                              (scandir (string-append cwd "/build")))
-                        ":"
-                        (getenv "PYTHONPATH")))
-               (invoke "pytest" "-v")))))))
+             (invoke "pytest" "-v"))))))
     (native-inputs
-     `(("python-hypothesis" ,python-hypothesis)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-mock" ,python-pytest-mock)
-       ("python-pytest" ,python-pytest)))
+     (list python-hypothesis python-pytest-cov python-pytest-mock
+           python-pytest))
     (propagated-inputs ; TODO: Add python-fastnumbers.
-     `(("python-pyicu" ,python-pyicu)))
+     (list python-pyicu))
     (home-page "https://github.com/SethMMorton/natsort")
     (synopsis "Natural sorting for python and shell")
     (description
      "Natsort lets you apply natural sorting on lists instead of
-lexicographical.  If you use the built-in @code{sorted} method in python
-on a list such as @code{[@code{a20}, @code{a9}, @code{a1}, @code{a4},
-@code{a10}]}, it would be returned as @code{[@code{a1}, @code{a10}, @code{a20},
-@code{a4}, @code{a9}]}.  Natsort provides a function @code{natsorted} that
-identifies numbers and sorts them separately from strings.  It can also sort
-version numbers, real numbers, mixed types and more, and comes with a shell
-command @command{natsort} that exposes this functionality in the command line.")
+     lexicographical.  If you use the built-in @code{sorted} method in python
+     on a list such as @code{[@code{a20}, @code{a9}, @code{a1}, @code{a4},
+                                   @code{a10}]}, it would be returned as @code{[@code{a1}, @code{a10}, @code{a20},
+                                   @code{a4}, @code{a9}]}.  Natsort provides a function @code{natsorted} that
+     identifies numbers and sorts them separately from strings.  It can also sort
+     version numbers, real numbers, mixed types and more, and comes with a shell
+     command @command{natsort} that exposes this functionality in the command line.")
     (license license:expat)))
 
 (define-public glances
@@ -16471,19 +17425,15 @@ command @command{natsort} that exposes this functionality in the command line.")
           #t))))
   (build-system python-build-system)
   (propagated-inputs
-   `(("python-future" ,python-future)
-     ("python-psutil" ,python-psutil)))
+   (list python-future python-psutil))
   (home-page "https://github.com/nicolargo/glances")
   (synopsis "Cross-platform curses-based monitoring tool")
   (description
     "Glances is a curses-based monitoring tool for a wide variety of platforms.
-Glances uses the PsUtil library to get information from your system.  It
-monitors CPU, load, memory, network bandwidth, disk I/O, disk use, and more.")
+     Glances uses the PsUtil library to get information from your system.  It
+     monitors CPU, load, memory, network bandwidth, disk I/O, disk use, and more.")
   (license license:lgpl3+)))
 
-(define-public python-glances
-  (deprecated-package "python-glances" glances))
-
 (define-public python-graphql-core
   (package
     (name "python-graphql-core")
@@ -16506,19 +17456,16 @@ monitors CPU, load, memory, network bandwidth, disk I/O, disk use, and more.")
                        (("'gevent==1.1rc1'") "'gevent'"))
              #t)))))
     (native-inputs
-     `(("python-gevent" ,python-gevent)
-       ("python-mock" ,python-mock)
-       ("python-pytest-mock" ,python-pytest-mock)))
+     (list python-gevent python-mock python-pytest-mock))
     (propagated-inputs
-     `(("python-promise" ,python-promise)
-       ("python-six" ,python-six)))
+     (list python-promise python-six))
     (home-page "https://github.com/graphql-python/graphql-core")
     (synopsis "GraphQL implementation for Python")
     (description
      "GraphQL implementation for Python.  GraphQL is a data query language and
-runtime designed and used to request and deliver data to mobile and web apps.
-This library is a port of @url{https://github.com/graphql/graphql-js,graphql-js}
-to Python.")
+     runtime designed and used to request and deliver data to mobile and web apps.
+     This library is a port of @url{https://github.com/graphql/graphql-js,graphql-js}
+     to Python.")
     (license license:expat)))
 
 (define-public python-graphql-relay
@@ -16534,78 +17481,51 @@ to Python.")
           "1d70vwam9gjhx7fqzsa03x7lc6ivcqki5r9pk8m7rslmb7pagmbh"))))
     (build-system python-build-system)
     (arguments
-     '(#:tests? #f)) ; The tests are not distributed
+     '(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "pytest" "tests")))))))
+    (native-inputs
+     (list
+       python-pytest
+       python-pytest-asyncio))
     (propagated-inputs
-     `(("python-graphql-core" ,python-graphql-core)))
+     (list python-graphql-core))
     (home-page "https://github.com/graphql-python/graphql-relay-py")
     (synopsis "Relay implementation for Python")
     (description
      "This is a library to allow the easy creation of Relay-compliant servers
-using the GraphQL Python reference implementation of a GraphQL server.  It
-should be noted that the code is a exact port of the original
-@url{https://github.com/graphql/graphql-relay-js,graphql-relay js implementation}
-from Facebook.")
+     using the GraphQL Python reference implementation of a GraphQL server.  It
+     should be noted that the code is a exact port of the original
+     @url{https://github.com/graphql/graphql-relay-js,graphql-relay js implementation}
+     from Facebook.")
     (license license:expat)))
 
 (define-public python-graphene
   (package
     (name "python-graphene")
-    (version "0.10.2")
+    (version "3.0")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "graphene" version))
         (sha256
          (base32
-          "09zhac7igh9ixdz0ay6csy35b40l1jwbf2wrbxmgxwfhy51iy06q"))))
+          "08m1n2ydk48c18cvl8474v3pwwacjl1vgq61m9qs00122mp0cj5g"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-graphql-core" ,python-graphql-core)
-       ("python-graphql-relay" ,python-graphql-relay)
-       ("python-iso8601" ,python-iso8601)
-       ("python-promise" ,python-promise)
-       ("python-six" ,python-six)))
+     (list python-graphql-core python-graphql-relay python-aniso8601
+           python-promise python-six))
     (arguments
      `(#:tests? #f))                    ; no tests/ in the PyPI tarball
     (home-page "https://graphene-python.org/")
     (synopsis "GraphQL Framework for Python")
     (description
      "Graphene is a Python library for building GraphQL schemas/types.
-A GraphQL schema describes your data model, and provides a GraphQL server
-with an associated set of resolve methods that know how to fetch data.")
-    (license license:expat)))
-
-(define-public python-nautilus
-  (package
-    (name "python-nautilus")
-    (version "0.4.9")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (pypi-uri "nautilus" version))
-        (sha256
-         (base32
-          "01hwzjc1zshk4vvxrcghm398fpy4jls66dyz06g07mrwqif8878p"))))
-    (build-system python-build-system)
-    (arguments `(#:tests? #f)) ; fails to import test modules
-    (propagated-inputs
-     `(("python-bcrypt" ,python-bcrypt)
-       ("python-click" ,python-click)
-       ("python-consul" ,python-consul)
-       ("python-graphene" ,python-graphene)
-       ("python-jinja2" ,python-jinja2)
-       ("python-peewee" ,python-peewee)
-       ("python-pika" ,python-pika)
-       ("python-tornado" ,python-tornado)
-       ("python-wtforms" ,python-wtforms)))
-    (native-inputs
-     `(("python-nose2" ,python-nose2)))
-    (home-page "https://github.com/AlecAivazis/nautilus")
-    (synopsis "Library for creating microservice applications")
-    (description
-     "Nautilus is a framework for flux based microservices that looks to
-provide extendible implementations of common aspects of a cloud so that you can
-focus on building massively scalable web applications.")
+     A GraphQL schema describes your data model, and provides a GraphQL server
+     with an associated set of resolve methods that know how to fetch data.")
     (license license:expat)))
 
 (define-public python-random2
@@ -16617,20 +17537,22 @@ focus on building massively scalable web applications.")
               (uri (pypi-uri "random2" version ".zip"))
               (sha256
                (base32
-                "01y0s4747plsx8fdnxy0nz83dp69naddz58m81r9h0s1qfm31b9l"))))
+                "01y0s4747plsx8fdnxy0nz83dp69naddz58m81r9h0s1qfm31b9l"))
+              (patches
+               (search-patches "python-random2-getrandbits-test.patch"))))
     (build-system python-build-system)
-    (native-inputs `(("unzip" ,unzip)))
+    (native-inputs (list unzip))
     (home-page "http://pypi.python.org/pypi/random2")
     (synopsis "Python 3 version of the Python 2 @code{random} module")
     (description
      "This package provides a Python 3 ported version of Python 2.7’s
-@code{random} module.  It has also been back-ported to work in Python 2.6.
+     @code{random} module.  It has also been back-ported to work in Python 2.6.
 
-In Python 3, the implementation of @code{randrange()} was changed, so that
-even with the same seed you get different sequences in Python 2 and 3.
+     In Python 3, the implementation of @code{randrange()} was changed, so that
+     even with the same seed you get different sequences in Python 2 and 3.
 
-This package closes that gap, allowing stable random number generation
-between the different Python versions.")
+     This package closes that gap, allowing stable random number generation
+     between the different Python versions.")
     (license license:psfl)))
 
 (define-public python2-random2
@@ -16653,8 +17575,8 @@ between the different Python versions.")
     (home-page "https://github.com/shibukawa/snowball_py")
     (synopsis "Snowball stemming library collection for Python")
     (description "This package provides 16 word stemmer algorithms generated
-from Snowball algorithms.  It includes the 15 original ones plus the Poerter
-English stemmer.")
+     from Snowball algorithms.  It includes the 15 original ones plus the Poerter
+     English stemmer.")
     (license license:bsd-3)))
 
 (define-public python2-snowballstemmer
@@ -16697,17 +17619,17 @@ English stemmer.")
              ;; the Makefile will build anyway
              (invoke "make" "check"))))))
     (native-inputs
-     `(("procps" ,procps)))             ; required for tests
+     (list procps))             ; required for tests
     (home-page "https://github.com/dvarrazzo/py-setproctitle")
     (synopsis
      "Setproctitle implementation for Python to customize the process title")
     (description "The library allows a process to change its title (as displayed
-by system tools such as ps and top).
+                                                                       by system tools such as ps and top).
 
-Changing the title is mostly useful in multi-process systems, for
-example when a master process is forked: changing the children's title
-allows identifying the task each process is busy with.  The technique
-is used by PostgreSQL and the OpenSSH Server for example.")
+     Changing the title is mostly useful in multi-process systems, for
+     example when a master process is forked: changing the children's title
+     allows identifying the task each process is busy with.  The technique
+     is used by PostgreSQL and the OpenSSH Server for example.")
     (license license:bsd-3)
     (properties `((python2-variant . ,(delay python2-setproctitle))))))
 
@@ -16741,21 +17663,17 @@ is used by PostgreSQL and the OpenSSH Server for example.")
              (delete-file "tests/__init__.py")))
          (replace 'check
            (lambda _
-             ;; Extend PYTHONPATH so the built package will be found.
-             (setenv "PYTHONPATH"
-                     (string-append (getcwd) "/build/lib:"
-                                    (getenv "PYTHONPATH")))
              (invoke "py.test" "-vv" ))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page
      "https://github.com/jamesturk/validictory")
     (synopsis "General purpose Python data validator")
     (description "It allows validation of arbitrary Python data structures.
 
-The schema format is based on the JSON Schema
-proposal (http://json-schema.org), so combined with json the library is also
-useful as a validator for JSON data.")
+     The schema format is based on the JSON Schema
+     proposal (http://json-schema.org), so combined with json the library is also
+     useful as a validator for JSON data.")
   (license license:expat)))
 
 (define-public python2-validictory
@@ -16773,24 +17691,14 @@ useful as a validator for JSON data.")
         (base32
          "090vdksbz341f7ljvr0zswblw4lspa8qaiikzyjkf318arpxmil9"))))
     (build-system python-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-before 'check 'set-pythonpath
-           (lambda _
-             (setenv "PYTHONPATH"
-                     (string-append
-                      (getcwd) "/test/"
-                      ":" (getenv "PYTHONPATH")))
-             #t)))))
     (home-page
      "https://github.com/eliben/pyelftools")
     (synopsis
      "Analyze binary and library file information")
     (description "This Python library provides interfaces for parsing and
-analyzing two binary and library file formats; the Executable and Linking
-Format (ELF), and debugging information in the Debugging With Attributed
-Record Format (DWARF).")
+     analyzing two binary and library file formats ; the Executable and Linking
+     Format (ELF), and debugging information in the Debugging With Attributed
+     Record Format (DWARF).")
     (license license:public-domain)))
 
 (define-public python-pyev
@@ -16811,13 +17719,12 @@ Record Format (DWARF).")
        (modify-phases %standard-phases
          (add-after 'unpack 'patch
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((libev (string-append (assoc-ref inputs "libev")
-                                         "/lib/libev.so.4")))
+             (let ((libev (search-input-file inputs "/lib/libev.so.4")))
                (substitute* "setup.py"
                  (("libev_dll_name = find_library\\(\\\"ev\\\"\\)")
                   (string-append "libev_dll_name = \"" libev "\"")))))))))
     (inputs
-     `(("libev" ,libev)))
+     (list libev))
     (home-page "https://github.com/gabrielfalcao/pyev")
     (synopsis "Python libev interface")
     (description "Pyev provides a Python interface to libev.")
@@ -16842,7 +17749,7 @@ Record Format (DWARF).")
     (synopsis "Gets image size of files in various formats in Python")
     (description
       "This package allows determination of image size from
-PNG, JPEG, JPEG2000 and GIF files in pure Python.")
+     PNG, JPEG, JPEG2000 and GIF files in pure Python.")
     (license license:expat)))
 
 (define-public python2-imagesize
@@ -16885,20 +17792,20 @@ PNG, JPEG, JPEG2000 and GIF files in pure Python.")
        (patches (search-patches "python-argcomplete-1.11.1-fish31.patch"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-flake8" ,python-flake8)
-       ("python-pexpect" ,python-pexpect)
-       ("python-wheel" ,python-wheel)
-       ("tcsh" ,tcsh)
-       ("fish" ,fish)
-       ("bash-full" ,bash)))            ;full Bash for 'test_file_completion'
+     (list python-coverage
+           python-flake8
+           python-pexpect
+           python-wheel
+           tcsh
+           fish
+           bash))            ;full Bash for 'test_file_completion'
     (home-page "https://github.com/kislyuk/argcomplete")
     (synopsis "Shell tab completion for Python argparse")
     (description "argcomplete provides extensible command line tab completion
-of arguments and options for Python scripts using @code{argparse}.  It's
-particularly useful for programs with many options or sub-parsers that can
-dynamically suggest completions; for example, when browsing resources over the
-network.")
+     of arguments and options for Python scripts using @code{argparse}.  It's
+     particularly useful for programs with many options or sub-parsers that can
+     dynamically suggest completions ; for example, when browsing resources over the
+     network.")
     (license license:asl2.0)
     (properties `((python2-variant . ,(delay python2-argcomplete))))))
 
@@ -16935,7 +17842,7 @@ network.")
            (lambda _
              (invoke "py.test"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/sprymix/csscompressor")
     (synopsis "Python port of YUI CSS Compressor")
     (description
@@ -16963,7 +17870,7 @@ network.")
     (home-page "http://opensource.perlig.de/rcssmin/")
     (synopsis "CSS Minifier")
     (description "The minifier is based on the semantics of the YUI compressor,
-which itself is based on the rule list by Isaac Schlueter.")
+     which itself is based on the rule list by Isaac Schlueter.")
     (license license:asl2.0)))
 
 (define-public python-rjsmin
@@ -16994,36 +17901,36 @@ which itself is based on the rule list by Isaac Schlueter.")
                (invoke "py.test" "-vv" "tests")
                #t))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "http://opensource.perlig.de/rjsmin/")
     (synopsis "Javascript Minifier")
     (description "@code{rJSmin} is a javascript minifier written in Python.  The
-minifier is based on the semantics of jsmin.c by Douglas Crockford.  The module
-is a re-implementation aiming for speed, so it can be used at runtime (rather
-than during a preprocessing step).")
+     minifier is based on the semantics of jsmin.c by Douglas Crockford.  The module
+     is a re-implementation aiming for speed, so it can be used at runtime (rather
+                                                                            than during a preprocessing step).")
     (license license:asl2.0)))
 
 (define-public python-xopen
   (package
     (name "python-xopen")
-    (version "0.5.0")
+    (version "0.8.2")
     (source
-      (origin
-        (method url-fetch)
-        (uri (pypi-uri "xopen" version))
-        (sha256
-          (base32
-           "17xbrgi23l87yg6h0qcknssp2q812miiy33qw6v45v5gx0jwv5xh"))))
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "xopen" version))
+       (sha256
+        (base32
+         "1xrlcnd6fri3w97zzzp6vyk4l21yq1lc8r4wksi06hgpkbh4jdq0"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-setuptools-scm))
     (home-page "https://github.com/marcelm/xopen/")
     (synopsis "Open compressed files transparently")
     (description "This module provides an @code{xopen} function that works like
-Python's built-in @code{open} function, but can also deal with compressed files.
-Supported compression formats are gzip, bzip2 and, xz, and are automatically
-recognized by their file extensions.  The focus is on being as efficient as
-possible on all supported Python versions.")
+     Python's built-in @code{open} function, but can also deal with compressed files.
+     Supported compression formats are gzip, bzip2 and, xz, and are automatically
+     recognized by their file extensions.  The focus is on being as efficient as
+     possible on all supported Python versions.")
     (license license:expat)))
 
 (define-public python2-xopen
@@ -17046,71 +17953,53 @@ possible on all supported Python versions.")
            "0ar5dqjnqaw0c17mymd6xgd81jn9br9fblawr0x438v1571bkaya"))))
     (build-system python-build-system)
     (arguments
-     `(#:modules ((guix build utils)
-                  (guix build python-build-system)
-                  (ice-9 ftw)
-                  (srfi srfi-1)
-                  (srfi srfi-26))
-       #:phases (modify-phases %standard-phases
+     `(#:phases (modify-phases %standard-phases
                   (add-after 'unpack 'use-absolute-python
                     (lambda _
                       (substitute* "Cheetah/CheetahWrapper.py"
                         (("#!/usr/bin/env python")
-                         (string-append "#!" (which "python"))))
-                      #t))
+                         (string-append "#!" (which "python"))))))
                   (add-after 'unpack 'fix-tests
                     (lambda _
                       (substitute* "Cheetah/Tests/ImportHooks.py"
                         (("os.path.dirname\\(__file__\\)")
-                         (string-append "'" (getcwd) "/Cheetah/Tests'")))
-                      #t))
+                         (string-append "'" (getcwd) "/Cheetah/Tests'")))))
                   (replace 'check
                     (lambda _
-                      (let ((cwd (getcwd)))
-                        (setenv "PYTHONPATH"
-                                (string-append
-                                 cwd "/build/"
-                                 (find (cut string-prefix? "lib" <>)
-                                       (scandir (string-append cwd "/build")))
-                                 ":" (getenv "PYTHONPATH")))
-                        (setenv "PATH"
-                                (string-append (getenv "PATH")
-                                               ":" cwd "/bin"))
-                        (setenv "TMPDIR" "/tmp")
-
-                        (substitute* "Cheetah/Tests/Test.py"
-                          (("unittest.TextTestRunner\\(\\)")
-                           "unittest.TextTestRunner(verbosity=2)"))
-
-                        (invoke "python" "Cheetah/Tests/Test.py")))))))
-    (propagated-inputs
-     `(("python-markdown" ,python-markdown)))    ;optional
+                      (setenv "TMPDIR" "/tmp")
+                      (substitute* "Cheetah/Tests/Test.py"
+                        (("unittest.TextTestRunner\\(\\)")
+                         "unittest.TextTestRunner(verbosity=2)"))
+
+                      (invoke "python" "Cheetah/Tests/Test.py"))))))
+    (propagated-inputs
+     (list python-markdown))    ;optional
     (home-page "https://cheetahtemplate.org/")
     (synopsis "Template engine")
     (description "Cheetah is a text-based template engine and Python code
-generator.
-
-Cheetah can be used as a standalone templating utility or referenced as
-a library from other Python applications.  It has many potential uses,
-but web developers looking for a viable alternative to ASP, JSP, PHP and
-PSP are expected to be its principle user group.
-
-Features:
-@enumerate
-@item Generates HTML, SGML, XML, SQL, Postscript, form email, LaTeX, or any other
-   text-based format.
-@item Cleanly separates content, graphic design, and program code.
-@item Blends the power and flexibility of Python with a simple template language
-   that non-programmers can understand.
-@item Gives template writers full access to any Python data structure, module,
-   function, object, or method in their templates.
-@item Makes code reuse easy by providing an object-orientated interface to
-   templates that is accessible from Python code or other Cheetah templates.
-   One template can subclass another and selectively reimplement sections of it.
-@item Provides a simple, yet powerful, caching mechanism that can dramatically
-   improve the performance of a dynamic website.
-@item Compiles templates into optimized, yet readable, Python code.
-@end enumerate")
+     generator.
+
+     Cheetah can be used as a standalone templating utility or referenced as
+     a library from other Python applications.  It has many potential uses,
+     but web developers looking for a viable alternative to ASP, JSP, PHP and
+     PSP are expected to be its principle user group.
+
+     Features:
+     @enumerate
+     @item Generates HTML, SGML, XML, SQL, Postscript, form email, LaTeX, or any other
+     text-based format.
+     @item Cleanly separates content, graphic design, and program code.
+     @item Blends the power and flexibility of Python with a simple template language
+     that non-programmers can understand.
+     @item Gives template writers full access to any Python data structure, module,
+     function, object, or method in their templates.
+     @item Makes code reuse easy by providing an object-orientated interface to
+     templates that is accessible from Python code or other Cheetah templates.
+     One template can subclass another and selectively reimplement sections of it.
+     @item Provides a simple, yet powerful, caching mechanism that can dramatically
+     improve the performance of a dynamic website.
+     @item Compiles templates into optimized, yet readable, Python code.
+     @end enumerate")
     (license (license:x11-style "file://LICENSE"))))
 
 (define-public python2-cheetah
@@ -17119,7 +18008,7 @@ Features:
 (define-public python-dulwich
   (package
     (name "python-dulwich")
-    (version "0.19.16")
+    (version "0.20.30")
     (source
       (origin
         (method url-fetch)
@@ -17128,36 +18017,28 @@ Features:
                    (pypi-uri "dulwich" version)))
         (sha256
           (base32
-           "0l589jl0lxx59yq0p6vmgw0q0hmfh48iqwyy0x6g1dmz93262igp"))))
+           "0hafaff30bmkj30b8pwpwsy3fz5h6c1pn98ihqcvl5zndflr1h22"))))
     (build-system python-build-system)
     (arguments
-     `(#:phases
+     '(#:phases
        (modify-phases %standard-phases
          (add-before 'check 'fix-tests
            (lambda* (#:key inputs #:allow-other-keys)
-             ;; The tests use Popen with a custom environment which doesn't
-             ;; include PATH.
-             (substitute* "dulwich/tests/compat/utils.py"
-               (("'git'") (string-append "'"
-                                         (which "git")
-                                         "'")))
              (substitute* '("dulwich/tests/test_repository.py"
+                            "dulwich/tests/test_porcelain.py"
                             "dulwich/tests/test_hooks.py")
-               (("#!/bin/sh") (string-append "#!" (which "sh"))))
+               (("/bin/sh") (search-input-file inputs "/bin/sh")))
              (setenv "TEST_RUNNER" "unittest")
-             (setenv "PYTHONHASHSEED" "random")
-             #t)))))
+             (setenv "PYTHONHASHSEED" "random"))))))
     (propagated-inputs
-     `(("python-fastimport" ,python-fastimport)
-       ("python-urllib3" ,python-urllib3)))
+     (list python-fastimport python-urllib3))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-geventhttpclient" ,python-geventhttpclient)
-       ("git" ,git)))
+     (list python-mock python-geventhttpclient python-gpg
+           git gnupg))
     (home-page "https://www.dulwich.io/")
     (synopsis "Git implementation in Python")
     (description "Dulwich is an implementation of the Git file formats and
-protocols written in pure Python.")
+     protocols written in pure Python.")
     ;; Can be used with either license.
     (license (list license:asl2.0 license:gpl2+))))
 
@@ -17178,22 +18059,19 @@ protocols written in pure Python.")
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (setenv "PYTHONPATH"
-                     (string-append (getcwd) "/build/lib:"
-                                    (getenv "PYTHONPATH")))
              (invoke "python" "test/test_pbkdf2.py"))))))
     (propagated-inputs
-     `(("python-pycrypto" ,python-pycrypto)))  ; optional
+     (list python-pycrypto))  ; optional
     (home-page "https://www.dlitz.net/software/python-pbkdf2/")
     (synopsis "Password-based key derivation")
     (description "This module implements the password-based key derivation
-function, PBKDF2, specified in RSA PKCS#5 v2.0.
+     function, PBKDF2, specified in RSA PKCS#5 v2.0.
 
-PKCS#5 v2.0 Password-Based Key Derivation is a key derivation function which
-is part of the RSA Public Key Cryptography Standards series.  The provided
-implementation takes a password or a passphrase and a salt value (and
-optionally a iteration count, a digest module, and a MAC module) and provides
-a file-like object from which an arbitrarily-sized key can be read.")
+     PKCS#5 v2.0 Password-Based Key Derivation is a key derivation function which
+     is part of the RSA Public Key Cryptography Standards series.  The provided
+     implementation takes a password or a passphrase and a salt value (and
+                                                                       optionally a iteration count, a digest module, and a MAC module) and provides
+     a file-like object from which an arbitrarily-sized key can be read.")
     (license license:expat)))
 
 (define-public python2-pbkdf2
@@ -17214,18 +18092,18 @@ a file-like object from which an arbitrarily-sized key can be read.")
      ;; FIXME: Tests require packaging 'pymaging'.
      '(#:tests? #f))
     (propagated-inputs
-     `(("python-lxml" ,python-lxml)     ; for SVG output
-       ("python-pillow" ,python-pillow) ; for PNG output
-       ("python-six" ,python-six)))
+     (list python-lxml ; for SVG output
+           python-pillow ; for PNG output
+           python-six))
     (home-page "https://github.com/lincolnloop/python-qrcode")
     (synopsis "QR Code image generator")
     (description "This package provides a pure Python QR Code generator
-module.  It uses the Python Imaging Library (PIL) to allow for the generation
-of QR Codes.
+     module.  It uses the Python Imaging Library (PIL) to allow for the generation
+     of QR Codes.
 
-In addition this package provides a command line tool to generate QR codes and
-either write these QR codes to a file or do the output as ascii art at the
-console.")
+     In addition this package provides a command line tool to generate QR codes and
+     either write these QR codes to a file or do the output as ascii art at the
+     console.")
     (license license:bsd-3)))
 
 (define-public python2-qrcode
@@ -17244,12 +18122,12 @@ console.")
          "0vzy6gd60l79ff750scl0sz48r1laalkl6md6dwzah4dcadgn5qv"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-docutils" ,python-docutils)))
+     (list python-docutils))
     (home-page "https://github.com/Snaipe/python-rst-to-ansi")
     (synopsis "Convert RST to ANSI-decorated console output")
     (description
      "Python module dedicated to rendering RST (reStructuredText) documents
-to ansi-escaped strings suitable for display in a terminal.")
+     to ansi-escaped strings suitable for display in a terminal.")
     (license license:expat)))
 
 (define-public python-ansi2html
@@ -17265,15 +18143,14 @@ to ansi-escaped strings suitable for display in a terminal.")
          "1wa00zffprb78w1mqq90dk47czz1knanys2a40zbw2vyapd5lp9y"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-nose" ,python-nose)))
+     (list python-mock python-nose))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://github.com/ralphbean/ansi2html")
     (synopsis "Convert ANSI-decorated console output to HTML")
     (description
      "@command{ansi2html} is a Python library and command line utility for
-converting text with ANSI color codes to HTML or LaTeX.")
+     converting text with ANSI color codes to HTML or LaTeX.")
     (license license:gpl3+)))
 
 (define-public python2-ansi2html
@@ -17297,10 +18174,10 @@ converting text with ANSI color codes to HTML or LaTeX.")
     (synopsis "Terminal framework API")
     (description
      "Easy ANSI is a terminal framework API to give you an easy way to use
-colors, cursor control movements, and line/box drawing.  It is not meant as a
-replacement to more full-featured frameworks (such as curses or urwid), but as
-a tool to quickly create nice-looking screens in your terminal window.  You
-can even create animations with the cursor controls.")
+     colors, cursor control movements, and line/box drawing.  It is not meant as a
+     replacement to more full-featured frameworks (such as curses or urwid), but as
+     a tool to quickly create nice-looking screens in your terminal window.  You
+     can even create animations with the cursor controls.")
     (license license:expat)))
 
 (define-public python-ddt
@@ -17316,15 +18193,15 @@ can even create animations with the cursor controls.")
          "0y2k756qjz1rhpivi60hy29b4bf0bh3wck39i1mn6pkil9k779k4"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (propagated-inputs
-     `(("python-pyyaml" ,python-pyyaml)))
+     (list python-pyyaml))
     (home-page "https://github.com/datadriventests/ddt")
     (synopsis "Data-Driven Tests")
     (description
      "Data-Driven Tests (@dfn{DDT}) allow you to multiply one test case by
-running it with different test data, and make it appear as multiple test
-cases.")
+     running it with different test data, and make it appear as multiple test
+     cases.")
     (license license:expat)))
 
 (define-public python-pycountry
@@ -17343,16 +18220,16 @@ cases.")
     (synopsis "ISO databases for languages, countries, currencies, etc.")
     (description
      "@code{pycountry} provides the ISO databases for the standards:
-@enumerate
-@item 639-3 (Languages)
-@item 3166 (Countries)
-@item 3166-3 (Deleted Countries)
-@item 3166-2 (Subdivisions of countries)
-@item 4217 (Currencies)
-@item 15924 (Scripts)
-@end enumerate
-It includes a copy from Debian’s pkg-isocodes and makes the data accessible
-through a Python API.")
+     @enumerate
+     @item 639-3 (Languages)
+     @item 3166 (Countries)
+     @item 3166-3 (Deleted Countries)
+     @item 3166-2 (Subdivisions of countries)
+     @item 4217 (Currencies)
+     @item 15924 (Scripts)
+     @end enumerate
+     It includes a copy from Debian’s pkg-isocodes and makes the data accessible
+     through a Python API.")
     (license license:lgpl2.1+)))
 
 (define-public python2-pycountry
@@ -17372,14 +18249,14 @@ through a Python API.")
     ;; TODO: Unundle picosat. http://fmv.jku.at/picosat/
     (build-system python-build-system)
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://github.com/ContinuumIO/pycosat")
     (synopsis "Bindings to picosat (a SAT solver)")
     (description
      "This package provides efficient Python bindings to @code{picosat} on
-the C level.  When importing pycosat, the @code{picosat} solver becomes part
-of the Python process itself.  @code{picosat} is a @dfn{Boolean Satisfiability
-Problem} (SAT) solver.")
+     the C level.  When importing pycosat, the @code{picosat} solver becomes part
+     of the Python process itself.  @code{picosat} is a @dfn{Boolean Satisfiability
+                                                                     Problem} (SAT) solver.")
     (license license:expat)))
 
 (define-public python2-pycosat
@@ -17410,13 +18287,13 @@ Problem} (SAT) solver.")
     (synopsis "Version of dict that keeps keys in insertion order")
     (description
      "This is an implementation of an ordered dictionary with @dfn{Key
-Insertion Order} (KIO: updates of values do not affect the position of the
-key), @dfn{Key Value Insertion Order} (KVIO, an existing key's position is
-removed and put at the back).  The standard library module @code{OrderedDict},
-implemented later, implements a subset of @code{ordereddict} functionality.
-Sorted dictionaries are also provided.  Currently only with @dfn{Key Sorted
-Order} (KSO, no sorting function can be specified, but a transform can be
-specified to apply on the key before comparison (e.g. @code{string.lower})).")
+                                                                     Insertion Order} (KIO: updates of values do not affect the position of the
+                                                                     key), @dfn{Key Value Insertion Order} (KVIO, an existing key's position is
+                                                                     removed and put at the back).  The standard library module @code{OrderedDict},
+     implemented later, implements a subset of @code{ordereddict} functionality.
+     Sorted dictionaries are also provided.  Currently only with @dfn{Key Sorted
+                                                                          Order} (KSO, no sorting function can be specified, but a transform can be
+                                                                          specified to apply on the key before comparison (e.g. @code{string.lower})).")
     (license license:expat)))
 
 (define-public python-pypeg2
@@ -17431,15 +18308,15 @@ specified to apply on the key before comparison (e.g. @code{string.lower})).")
         (base32
          "0v8ziaam2r637v94ra4dbjw6jzxz99gs5x4i585kgag1v204yb9b"))))
     (build-system python-build-system)
-    (propagated-inputs `(("python-lxml" ,python-lxml)))
+    (propagated-inputs (list python-lxml))
     (arguments
      ;;https://bitbucket.org/fdik/pypeg/issues/36/test-failures-on-py35
      '(#:tests? #f))
     (home-page "https://fdik.org/pyPEG/")
     (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.")
+     Python.  It is based on Parsing Expression Grammars, PEG.  With pyPEG you can
+     parse many formal languages.")
     (license license:gpl2)))
 
 (define-public python-incremental
@@ -17457,7 +18334,7 @@ parse many formal languages.")
     (home-page "https://github.com/hawkowl/incremental")
     (synopsis "Library for versioning Python projects")
     (description "Incremental is a small library that versions your Python
-projects.")
+     projects.")
     (license license:expat)))
 
 (define-public python2-incremental
@@ -17467,39 +18344,50 @@ projects.")
   (package
     (name "python-invoke")
     (home-page "https://www.pyinvoke.org/")
-    (version "1.5.0")
+    (version "1.6.0")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "invoke" version))
               (sha256
                (base32
-                "0l16v7zcbgi36z6pvmdrs5q4ks8lalcafi5d9nhrpcjzbc3n1igh"))))
+                "1lsql9daabfr31c7syva5myc5bka45k57ygs9fliv63qrwp1wk9p"))))
     (build-system python-build-system)
     (arguments
      ;; XXX: Requires many dependencies that are not yet in Guix.
      `(#:tests? #f
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'delete-python2-code
+           (lambda _
+             (delete-file-recursively "invoke/vendor/yaml2")))
          (add-after 'unpack 'fix-bash-path
            (lambda* (#:key inputs #:allow-other-keys)
              (let ((bash (assoc-ref inputs "bash")))
                (substitute* "invoke/config.py"
                  (("shell = \"/bin/bash\"")
-                  (string-append "shell = \"" bash "/bin/bash\""))
-                 )
-               #t))))))
+                  (string-append "shell = \"" bash "/bin/bash\"")))))))))
     (inputs
      `(("bash" ,bash-minimal)))
     (synopsis "Pythonic task execution")
     (description
      "Invoke is a Python task execution tool and library, drawing inspiration
-from various sources to arrive at a powerful and clean feature set.  It is
-evolved from the Fabric project, but focuses on local and abstract concerns
-instead of servers and network commands.")
+     from various sources to arrive at a powerful and clean feature set.  It is
+     evolved from the Fabric project, but focuses on local and abstract concerns
+     instead of servers and network commands.")
     (license license:bsd-3)))
 
 (define-public python2-invoke
-  (package-with-python2 python-invoke))
+  (let ((parent (package-with-python2 python-invoke)))
+    (package
+      (inherit parent)
+      (arguments
+       (substitute-keyword-arguments (package-arguments parent)
+         ((#:phases phases #t)
+          `(modify-phases ,phases
+             (delete 'delete-python2-code)
+             (add-after 'unpack 'delete-python3-code
+               (lambda _
+                 (delete-file-recursively "invoke/vendor/yaml3"))))))))))
 
 (define-public python-automat
   (package
@@ -17516,19 +18404,24 @@ instead of servers and network commands.")
     ;; python-twisted depends on python-automat.  Twisted is optional, but the
     ;; tests fail if it is not available.  Also see
     ;; <https://github.com/glyph/automat/issues/71>.
-    (arguments '(#:tests? #f))
+    (arguments
+     `(#:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         ;; Remove script, because it depends on python-twisted.
+         (add-after 'unpack 'remove-entrypoint
+           (lambda _
+             (substitute* "setup.py"
+               (("\"automat-visualize = automat._visualize:tool\"") "")))))))
     (native-inputs
-     `(("python-m2r" ,python-m2r)
-       ("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-graphviz" ,python-graphviz)))
+     (list python-m2r python-setuptools-scm python-graphviz))
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-attrs" ,python-attrs)))
+     (list python-six python-attrs))
     (home-page "https://github.com/glyph/Automat")
     (synopsis "Self-service finite-state machines")
     (description "Automat is a library for concise, idiomatic Python
-expression of finite-state automata (particularly deterministic finite-state
-transducers).")
+     expression of finite-state automata (particularly deterministic finite-state
+                                                       transducers).")
     (license license:expat)))
 
 (define-public python2-automat
@@ -17546,15 +18439,13 @@ transducers).")
                 "16gdm8i06jjmlpvckpfmlkr4693dh0vs192vgsqn84fsdkbbm45z"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-docutils" ,python-docutils)
-       ("python-mistune" ,python-mistune)))
+     (list python-docutils python-mistune))
     (native-inputs
-     `(("python-pygments" ,python-pygments)
-       ("python-mock" ,python-mock)))
+     (list python-pygments python-mock))
     (home-page "https://github.com/miyakogi/m2r")
     (synopsis "Markdown to reStructuredText converter")
     (description "M2R converts a markdown file including reST markups to valid
-reST format.")
+     reST format.")
     (license license:expat)))
 
 (define-public python2-m2r
@@ -17574,8 +18465,8 @@ reST format.")
     (home-page "https://github.com/twisted/constantly")
     (synopsis "Symbolic constants in Python")
     (description "Constantly is a Python library that provides symbolic
-constant support.  It includes collections and constants with text, numeric,
-and bit flag values.")
+     constant support.  It includes collections and constants with text, numeric,
+     and bit flag values.")
     (license license:expat)))
 
 (define-public python2-constantly
@@ -17593,38 +18484,19 @@ and bit flag values.")
                 "1yzmwi5d197p0qhl7rl4xi9q1w8mk9i3zn6hrl22knbcrb1slspg"))))
     (build-system python-build-system)
     (arguments
-     `(#:modules ((guix build utils)
-                  (guix build python-build-system)
-                  (ice-9 ftw)
-                  (srfi srfi-1)
-                  (srfi srfi-26))
-       #:phases
-       (modify-phases %standard-phases
-         (replace 'check
-           (lambda* (#:key tests? #:allow-other-keys)
-             (when tests?
-               (let ((cwd (getcwd)))
-                 (setenv "PYTHONPATH"
-                         (string-append
-                          cwd "/build/"
-                          (find (cut string-prefix? "lib" <>)
-                                (scandir (string-append cwd "/build")))
-                          ":"
-                          (getenv "PYTHONPATH")))
-                 (invoke "python" "-m" "pytest"))))))))
-    (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-hypothesis" ,python-hypothesis)
-       ("python-pympler" ,python-pympler)
-       ("python-pytest" ,python-pytest)
-       ("python-six" ,python-six)
-       ("python-sphinx" ,python-sphinx)
-       ("python-zope-interface" ,python-zope-interface)))
+     `(#:phases (modify-phases %standard-phases
+                  (replace 'check
+                    (lambda* (#:key tests? #:allow-other-keys)
+                      (when tests?
+                        (invoke "pytest")))))))
+    (native-inputs
+     (list python-coverage python-hypothesis python-pympler python-pytest
+           python-six))
     (home-page "https://github.com/python-attrs/attrs/")
     (synopsis "Attributes without boilerplate")
     (description "@code{attrs} is a Python package with class decorators that
-ease the chores of implementing the most common attribute-related object
-protocols.")
+     ease the chores of implementing the most common attribute-related object
+     protocols.")
     (license license:expat)))
 
 (define-public python2-attrs
@@ -17634,13 +18506,6 @@ protocols.")
   (package
     (inherit python-attrs)
     (name "python-attrs-bootstrap")
-    (version "19.3.0")
-    (source (origin
-              (method url-fetch)
-              (uri (pypi-uri "attrs" version))
-              (sha256
-               (base32
-                "0wky4h28n7xnr6xv69p9z6kv8bzn50d10c3drmd9ds8gawbcxdzp"))))
     (native-inputs `())
     (arguments `(#:tests? #f))))
 
@@ -17666,15 +18531,14 @@ protocols.")
        ;; fails due to deprecation warnings, etc.
        #:tests? #f))
     (native-inputs
-     `(("python-coverage-test-runner" ,python-coverage-test-runner)
-       ("python-pep8" ,python-pep8)))
+     (list python-coverage-test-runner python-pep8))
     (propagated-inputs
-     `(("python-pyaml" ,python-pyaml)))
+     (list python-pyaml))
     (home-page "https://liw.fi/cliapp/")
     (synopsis "Python framework for command line programs")
     (description "@code{cliapp} is a Python framework for command line
-programs.  It contains the typical stuff such programs need to do, such
-as parsing the command line for options, and iterating over input files.")
+     programs.  It contains the typical stuff such programs need to do, such
+     as parsing the command line for options, and iterating over input files.")
     (license license:gpl2+)))
 
 (define-public python2-cliapp
@@ -17696,8 +18560,7 @@ as parsing the command line for options, and iterating over input files.")
        (file-name (git-file-name name version))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-coverage-test-runner" ,python-coverage-test-runner)
-       ("python-pep8" ,python-pep8)))
+     (list python-coverage-test-runner python-pep8))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -17709,11 +18572,11 @@ as parsing the command line for options, and iterating over input files.")
            (lambda _ (invoke "make" "check"))))))
     (home-page "https://liw.fi/ttystatus/")
     (synopsis "Python library for showing progress reporting and
-status updates on terminals")
+     status updates on terminals")
     (description "@code{ttystatus} is a Python library for showing progress
-reporting and status updates on terminals, for command line programs.
-Output is automatically adapted to the width of the terminal: truncated
-if it does not fit, and resized if the terminal size changes.")
+     reporting and status updates on terminals, for command line programs.
+     Output is automatically adapted to the width of the terminal: truncated
+     if it does not fit, and resized if the terminal size changes.")
     (license license:gpl3+)))
 
 (define-public python2-ttystatus
@@ -17738,88 +18601,44 @@ if it does not fit, and resized if the terminal size changes.")
     (home-page "https://liw.fi/tracing/")
     (synopsis "Python debug logging helper")
     (description "@code{python2-tracing} is a python library for
-logging debug messages.  It provides a way to turn debugging messages
-on and off, based on the filename they occur in.  It is much faster
-than using @code{logging.Filter} to accomplish the same thing, which
-matters when code is run in production mode.  The actual logging still
-happens using the @code{logging} library.")
+     logging debug messages.  It provides a way to turn debugging messages
+     on and off, based on the filename they occur in.  It is much faster
+     than using @code{logging.Filter} to accomplish the same thing, which
+     matters when code is run in production mode.  The actual logging still
+     happens using the @code{logging} library.")
     (license license:gpl3+)))
 
 (define-public python-astroid
   (package
     (name "python-astroid")
-    (version "2.4.2")
+    (version "2.9.0")
     (source
      (origin
-       (method url-fetch)
-       (uri (pypi-uri "astroid" version))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/PyCQA/astroid")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
        (sha256
-        (base32 "00xp5gqxidxvgg1bwd91myqzdf2fpb9cjwbdl3p7gwqvlk17hh1g"))
-       (modules '((guix build utils)))
-       (snippet
-        '(begin
-           ;; Check to see if the version pinning has been removed.
-           (substitute* "astroid/__pkginfo__.py"
-             (("==1\\.4\\.\\*") ">=1.4.0"))
-           #t))))
+        (base32 "19iiys4233cicpm48fd7lrkm31kk47qiv44wvk952rqbcn4rd2dh"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-lazy-object-proxy" ,python-lazy-object-proxy)
-       ("python-six" ,python-six)
-       ("python-wrapt" ,python-wrapt)))
+     (list python-lazy-object-proxy python-wrapt))
     (native-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-pytest python-pytest-runner python-typing-extensions))
     (home-page "https://github.com/PyCQA/astroid")
     (synopsis "Common base representation of python source code for pylint and
-other projects")
+     other projects")
     (description "@code{python-astroid} provides a common base representation
-of python source code for projects such as pychecker, pyreverse, pylint, etc.
-
-It provides a compatible representation which comes from the _ast module.  It
-rebuilds the tree generated by the builtin _ast module by recursively walking
-down the AST and building an extended ast.  The new node classes have
-additional methods and attributes for different usages.  They include some
-support for static inference and local name scopes.  Furthermore, astroid
-builds partial trees by inspecting living objects.")
-    (license license:lgpl2.1+)
-    (properties `((python2-variant . ,(delay python2-astroid))))))
-
-(define-public python2-astroid
-  (let ((base (package-with-python2
-               (strip-python2-variant python-astroid))))
-    (package (inherit base)
-    ;; Version 2.x removes python2 support.
-    (version "1.6.5")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "astroid" version))
-       (sha256
-        (base32
-         "0fir4b67sm7shcacah9n61pvq313m523jb4q80sycrh3p8nmi6zw"))))
-    (arguments
-      (substitute-keyword-arguments (package-arguments base)
-        ((#:phases phases)
-         `(modify-phases ,phases
-            (add-after 'unpack 'remove-spurious-test
-              (lambda _
-                ;; https://github.com/PyCQA/astroid/issues/276
-                (delete-file "astroid/tests/unittest_brain.py")
-                #t))
-            (replace 'check
-              (lambda _
-                (invoke"python" "-m" "unittest" "discover"
-                                "-p" "unittest*.py")))))))
-    (native-inputs `())
-    (propagated-inputs
-      `(("python2-backports-functools-lru-cache"
-         ,python2-backports-functools-lru-cache)
-        ("python2-enum34" ,python2-enum34)
-        ("python2-singledispatch" ,python2-singledispatch)
-        ,@(alist-delete "python-typed-ast"
-                        (package-propagated-inputs base)))))))
+     of python source code for projects such as pychecker, pyreverse, pylint, etc.
+
+     It provides a compatible representation which comes from the _ast module.  It
+     rebuilds the tree generated by the builtin _ast module by recursively walking
+     down the AST and building an extended ast.  The new node classes have
+     additional methods and attributes for different usages.  They include some
+     support for static inference and local name scopes.  Furthermore, astroid
+     builds partial trees by inspecting living objects.")
+    (license license:lgpl2.1+)))
 
 (define-public python-isbnlib
   (package
@@ -17837,36 +18656,99 @@ builds partial trees by inspecting living objects.")
     (home-page "https://github.com/xlcnd/isbnlib")
     (synopsis "Python library to work with ISBN strings")
     (description "@code{python-isbnlib} is a (pure) python library that provides
-several useful methods and functions to validate, clean, transform, hyphenate and
-get metadata for ISBN strings.  Its origin was as the core of isbntools.  This short
-version, is suitable to be include as a dependency in other projects.")
+     several useful methods and functions to validate, clean, transform, hyphenate and
+     get metadata for ISBN strings.  Its origin was as the core of isbntools.  This short
+     version, is suitable to be include as a dependency in other projects.")
     (license license:lgpl3+)))
 
 (define-public python-isort
   (package
     (name "python-isort")
-    (version "4.3.4")
+    (version "5.10.1")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
-              ;; Tests pass only from the Github sources
-              (url "https://github.com/timothycrosley/isort")
-              (commit version)))
+             ;; Tests pass only from the Github sources
+             (url "https://github.com/timothycrosley/isort")
+             (commit version)))
        (file-name (git-file-name name version))
+       (modules '((guix build utils)))
+       (snippet '(for-each delete-file (find-files "." "\\.whl$")))
        (sha256
         (base32
-         "1q0mlrpki5vjbgwxag5rghljjcfg7mvb0pbkwid80p0sqrxlm2p6"))))
+         "09spgl2k9xrprr5gbpfc91a8p7mx7a0c64ydgc91b3jhrmnd9jg1"))))
     (build-system python-build-system)
-    (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)))
-    (home-page "https://github.com/timothycrosley/isort")
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'loosen-requirements
+           (lambda _
+             ;; Permit newer versions of black.
+             (substitute* "example_isort_formatting_plugin/pyproject.toml"
+               (("\\^20\\.08b1")
+                ">= 20.08b1"))))
+         ;; A foretaste of what our future python-build-system will need to
+         ;; do.
+         (replace 'build
+           (lambda _
+             (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out"))
+                   (whl (car (find-files "dist" "\\.whl$"))))
+               (invoke "pip" "--no-cache-dir" "--no-input"
+                       "install" "--no-deps" "--prefix" out whl))))
+         (add-after 'install 'install-example-plugins
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               ;; Patch to use the core poetry API.
+               (substitute* '("example_isort_formatting_plugin/pyproject.toml"
+                              "example_isort_sorting_plugin/pyproject.toml"
+                              "example_shared_isort_profile/pyproject.toml")
+                 (("poetry>=0.12")
+                  "poetry-core>=1.0.0")
+                 (("poetry.masonry.api")
+                  "poetry.core.masonry.api"))
+               ;; Build the example plugins.
+               (for-each (lambda (source-directory)
+                           (invoke "python" "-m" "build" "--wheel"
+                                   "--no-isolation" "--outdir=dist"
+                                   source-directory))
+                         '("example_isort_formatting_plugin"
+                           "example_isort_sorting_plugin"
+                           "example_shared_isort_profile"))
+               ;; Install them to temporary storage, for the test.
+               (setenv "HOME" (getcwd))
+               (let ((example-whls (find-files "dist" "^example.*\\.whl$")))
+                 (apply invoke "pip" "--no-cache-dir" "--no-input"
+                        "install"  "--user" "--no-deps" example-whls)))))
+         (replace 'check
+           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+             (when tests?
+               (let ((bin (string-append (assoc-ref outputs "out") "/bin")))
+                 (setenv "PATH" (string-append (getenv "PATH") ":" bin)))
+               (add-installed-pythonpath inputs outputs)
+               (invoke "pytest" "-vv" "tests/unit/"
+                       "-k" "not test_gitignore" ;requires git
+                       "--ignore=tests/unit/test_deprecated_finders.py")))))))
+    (native-inputs
+     (list python-black
+           python-colorama
+           python-hypothesmith
+           python-libcst-minimal
+           python-natsort
+           python-poetry-core
+           python-pylama
+           python-pypa-build
+           python-pytest-mock
+           python-pytest))
+    (home-page "https://github.com/PyCQA/isort")
     (synopsis "Python utility/library to sort python imports")
     (description "@code{python-isort} is a python utility/library to sort
-imports alphabetically, and automatically separated into sections.  It
-provides a command line utility, a python library and plugins for various
-editors.")
+     imports alphabetically, and automatically separated into sections.  It
+     provides a command line utility, a python library and plugins for various
+     editors.")
     (license license:expat)
     (properties `((python2-variant . ,(delay python2-isort))))))
 
@@ -17892,13 +18774,13 @@ editors.")
          "0jidrkk2w6bhjm197plxiaxrav64mgcrign0bfyr7md2ilc5zplg"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python2-setuptools-scm" ,python2-setuptools-scm)))
+     (list python2-setuptools-scm))
     (arguments
      `(#:python ,python-2))
     (home-page "https://github.com/jaraco/backports.functools_lru_cache")
     (synopsis "Backport of functools.lru_cache from Python 3.3")
     (description "@code{python2-backports-functools-lru-cache} is a backport
-of @code{functools.lru_cache} from python 3.3.")
+     of @code{functools.lru_cache} from python 3.3.")
     (license license:expat)))
 
 (define-public python-configparser
@@ -17913,13 +18795,13 @@ of @code{functools.lru_cache} from python 3.3.")
         (base32
          "1priacxym85yjcf68hh38w55nqswaxp71ryjyfdk222kg9l85ln7"))))
     (native-inputs
-     `(("python-setuptools_scm" ,python-setuptools-scm)))
+     (list python-setuptools-scm))
     (build-system python-build-system)
     (home-page "https://github.com/jaraco/configparser/")
     (synopsis "Backport of configparser from python 3.5")
     (description "@code{python-configparser} is a backport of
-@code{configparser} from Python 3.5 so that it can be used directly
-in other versions.")
+     @code{configparser} from Python 3.5 so that it can be used directly
+     in other versions.")
     (license license:expat)))
 
 (define-public python2-configparser
@@ -17940,14 +18822,14 @@ in other versions.")
     (home-page "https://github.com/RonnyPfannschmidt/iniconfig")
     (synopsis "Simple INI-file parser")
     (description "The @code{iniconfig} package provides a small and simple
-INI-file parser module having a unique set of features; @code{iniconfig}
-@itemize
-@item maintains the order of sections and entries;
-@item supports multi-line values with or without line-continuations;
-@item supports \"#\" comments everywhere;
-@item raises errors with proper line-numbers;
-@item raises an error when two sections have the same name.
-@end itemize")
+     INI-file parser module having a unique set of features ; @code{iniconfig}
+     @itemize
+     @item maintains the order of sections and entries              ;
+     @item supports multi-line values with or without line-continuations ;
+     @item supports \"#\" comments everywhere                            ;
+     @item raises errors with proper line-numbers                        ;
+     @item raises an error when two sections have the same name.
+     @end itemize")
     (license license:expat)))
 
 (define-public python-mamba
@@ -17963,13 +18845,12 @@ INI-file parser module having a unique set of features; @code{iniconfig}
     (build-system python-build-system)
     (arguments `(#:tests? #f))  ; No test
     (propagated-inputs
-     `(("python-clint" ,python-clint)
-       ("python-coverage" ,python-coverage)))
+     (list python-clint python-coverage))
     (home-page "https://nestorsalceda.com/mamba/")
     (synopsis "Test runner for Python")
     (description
      "Mamba is a Behaviour-Driven Development tool for Python developers.
-Is heavily influenced from RSpec, Mocha, Jasmine or Ginkgo.")
+     Is heavily influenced from RSpec, Mocha, Jasmine or Ginkgo.")
     (license license:expat)))
 
 (define-public python-mando
@@ -17984,16 +18865,15 @@ Is heavily influenced from RSpec, Mocha, Jasmine or Ginkgo.")
                 "0q6rl085q1hw1wic52pqfndr0x3nirbxnhqj9akdm5zhq2fv3zkr"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-rst2ansi" ,python-rst2ansi)
-       ("python-six" ,python-six)))
+     (list python-rst2ansi python-six))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://mando.readthedocs.org/")
     (synopsis
      "Wrapper around argparse, allowing creation of complete CLI applications")
     (description
      "This package is a wrapper around argparse, allowing you to write complete CLI
-applications in seconds while maintaining all the flexibility.")
+     applications in seconds while maintaining all the flexibility.")
     (license license:expat)))
 
 (define-public python2-mando
@@ -18017,7 +18897,7 @@ applications in seconds while maintaining all the flexibility.")
     (synopsis "Python command-line parsing library")
     (description
      "This package is mostly for people who want to have @code{argparse} on
-older Pythons because it was not part of the standard library back then.")
+     older Pythons because it was not part of the standard library back then.")
     (license license:psfl)))
 
 (define-public python-mwclient
@@ -18036,14 +18916,10 @@ older Pythons because it was not part of the standard library back then.")
         (base32 "120snnsh9n5svfwkyj1w9jrxf99jnqm0jk282yypd3lpyca1l9hj"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-requests-oauthlib" ,python-requests-oauthlib)
-       ("python-six" ,python-six)))
+     (list python-requests-oauthlib python-six))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-runner" ,python-pytest-runner)
-       ("python-responses" ,python-responses)))
+     (list python-mock python-pytest python-pytest-cov
+           python-pytest-runner python-responses))
     (home-page "https://github.com/btongminh/mwclient")
     (synopsis "MediaWiki API client")
     (description "This package provides a MediaWiki API client.")
@@ -18076,7 +18952,7 @@ older Pythons because it was not part of the standard library back then.")
     (synopsis "Convenient utilities not included with the standard Python install")
     (description
       "Python Utils is a collection of small Python functions and classes which
-make common patterns shorter and easier.")
+     make common patterns shorter and easier.")
     (license license:bsd-2)))
 
 (define-public python-diff-match-patch
@@ -18094,7 +18970,7 @@ make common patterns shorter and easier.")
     (home-page "https://code.google.com/p/google-diff-match-patch")
     (synopsis "Synchronize plain text")
     (description "Diff Match and Patch libraries offer robust algorithms to
-perform the operations required for synchronizing plain text.")
+     perform the operations required for synchronizing plain text.")
     (license license:asl2.0)))
 
 (define-public python2-diff-match-patch
@@ -18113,7 +18989,7 @@ perform the operations required for synchronizing plain text.")
           "1gm82jddm1lkazdi8lfsl1b3vi1z0252ng60mzjym8irnv94qfhy"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("six" ,python-six)))
+     (list python-six))
     (home-page "https://github.com/tkhyn/dirsync")
     (synopsis "Advanced directory tree synchronisation tool")
     (description "Advanced directory tree synchronisation tool.")
@@ -18125,26 +19001,26 @@ perform the operations required for synchronizing plain text.")
 (define-public python-levenshtein
   (package
     (name "python-levenshtein")
-    (version "0.12.0")
+    (version "0.12.2")
     (source
      (origin
       (method url-fetch)
       (uri (pypi-uri "python-Levenshtein" version))
       (sha256
        (base32
-        "1c9ybqcja31nghfcc8xxbbz9h60s9qi12b9hr4jyl69xbvg12fh3"))))
+        "1xj60gymwx1jl2ra9razx2wk8nb9cv1i7l8d14qsp8a8s7xra8yw"))))
     (build-system python-build-system)
     (home-page "https://github.com/ztane/python-Levenshtein")
     (synopsis "Fast computation of Levenshtein distance and string similarity")
     (description
      "The Levenshtein Python C extension module contains functions for fast computation of
-@enumerate
-@item Levenshtein (edit) distance, and edit operations
-@item string similarity
-@item approximate median strings, and generally string averaging
-@item string sequence and set similarity
-@end enumerate
-It supports both normal and Unicode strings.")
+     @enumerate
+     @item Levenshtein (edit) distance, and edit operations
+     @item string similarity
+     @item approximate median strings, and generally string averaging
+     @item string sequence and set similarity
+     @end enumerate
+     It supports both normal and Unicode strings.")
     (license license:gpl2+)))
 
 (define-public python2-levenshtein
@@ -18170,12 +19046,12 @@ It supports both normal and Unicode strings.")
     (synopsis "Directory iteration function")
     (description
      "Directory iteration function like os.listdir(), except that instead of
-returning a list of bare filenames, it yields DirEntry objects that include
-file type and stat information along with the name.  Using scandir() increases
-the speed of os.walk() by 2-20 times (depending on the platform and file
-system) by avoiding unnecessary calls to os.stat() in most cases.
+     returning a list of bare filenames, it yields DirEntry objects that include
+     file type and stat information along with the name.  Using scandir() increases
+     the speed of os.walk() by 2-20 times (depending on the platform and file
+                                                     system) by avoiding unnecessary calls to os.stat() in most cases.
 
-This package is part of the Python standard library since version 3.5.")
+     This package is part of the Python standard library since version 3.5.")
     (license license:bsd-3)))
 
 (define-public python2-scandir
@@ -18198,10 +19074,10 @@ This package is part of the Python standard library since version 3.5.")
     (synopsis "Python implementations of various stemming algorithms")
     (description
      "Python implementations of the Porter, Porter2, Paice-Husk, and Lovins
-stemming algorithms for English.  These implementations are straightforward and
-efficient, unlike some Python versions of the same algorithms available on the
-Web.  This package is an extraction of the stemming code included in the Whoosh
-search engine.")
+     stemming algorithms for English.  These implementations are straightforward and
+     efficient, unlike some Python versions of the same algorithms available on the
+     Web.  This package is an extraction of the stemming code included in the Whoosh
+     search engine.")
     (license license:public-domain)))
 
 (define-public python-factory-boy
@@ -18225,41 +19101,37 @@ search engine.")
     (description
      "Factory_boy is a fixtures replacement based on thoughtbot’s factory_girl.
 
-As a fixtures replacement tool, it aims to replace static, hard to maintain
-fixtures with easy-to-use factories for complex object.
+     As a fixtures replacement tool, it aims to replace static, hard to maintain
+     fixtures with easy-to-use factories for complex object.
 
-Instead of building an exhaustive test setup with every possible combination
-of corner cases, factory_boy allows you to use objects customized for the
-current test, while only declaring the test-specific fields")
+     Instead of building an exhaustive test setup with every possible combination
+     of corner cases, factory_boy allows you to use objects customized for the
+     current test, while only declaring the test-specific fields")
     (license license:expat)))
 
-(define-public python2-factory-boy
-  (package-with-python2 python-factory-boy))
-
 (define-public python-translate-toolkit
   (package
     (name "python-translate-toolkit")
-    (version "2.1.0")
+    (version "3.5.1")
     (source
      (origin
        (method url-fetch)
-       (uri (pypi-uri "translate-toolkit" version ".tar.bz2"))
+       (uri (pypi-uri "translate-toolkit" version ".tar.gz"))
        (sha256
-        (base32 "1vlkwrg83vb17jc36pmwh2b7jphwf390lz0jw8hakcg16qhwypvq"))))
+        (base32 "020pp7pbpnavxd41z90vyzzx06ci57mx9drkgbsb89wxxx4gal9v"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-sphinx" ,python-sphinx)))
-    (propagated-inputs
-     `(("python-babel" ,python-babel)
-       ("python-beautifulsoup4" ,python-beautifulsoup4)
-       ("python-chardet" ,python-chardet)
-       ("python-diff-match-patch" ,python-diff-match-patch)
-       ("python-levenshtein" ,python-levenshtein)
-       ("python-lxml" ,python-lxml)
-       ("python-six" ,python-six)
-       ("python-vobject" ,python-vobject)
-       ("python-pyyaml" ,python-pyyaml)))
+     (list python-pytest python-sphinx))
+    (propagated-inputs
+     (list python-babel
+           python-beautifulsoup4
+           python-chardet
+           python-diff-match-patch
+           python-levenshtein
+           python-lxml
+           python-six
+           python-vobject
+           python-pyyaml))
     (arguments
      ;; TODO: tests are not run, because they end with
      ;; TypeError: parse() missing 2 required positional arguments: 'tree' and
@@ -18270,35 +19142,32 @@ current test, while only declaring the test-specific fields")
     (synopsis "Tools and API for translation and localization engineering")
     (description
      "Tools and API for translation and localization engineering.  It contains
-several utilities, as well as an API for building localization tools.")
+     several utilities, as well as an API for building localization tools.")
     (license license:gpl2+)))
 
+;; Required for virtaal, newer versions do not build with python2
 (define-public python2-translate-toolkit
-  (package-with-python2 python-translate-toolkit))
+  (package-with-python2
+    (package
+      (inherit python-translate-toolkit)
+      (version "2.1.0")
+      (source
+       (origin
+         (method url-fetch)
+         (uri (pypi-uri "translate-toolkit" version ".tar.bz2"))
+         (sha256
+          (base32 "1vlkwrg83vb17jc36pmwh2b7jphwf390lz0jw8hakcg16qhwypvq")))))))
 
 (define-public python-packaging
-  (package
+  (package/inherit python-packaging-bootstrap
     (name "python-packaging")
-    (version "20.0")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (pypi-uri "packaging" version))
-        ;; XXX: The URL in the patch file is wrong, it should be
-        ;; <https://github.com/pypa/packaging/pull/256>.
-        (patches (search-patches "python-packaging-test-arch.patch"))
-        (sha256
-         (base32
-          "1y2ip3a4ykkpgnwgn85j6hkspcl0cg3mzms97f40mk57vwqq67gy"))))
-    (build-system python-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (replace 'check
                     (lambda* (#:key tests? #:allow-other-keys)
                       (if tests?
-                          (invoke "py.test" "-vv")
-                          (format #t "test suite not run~%"))
-                      #t)))))
+                          (invoke "pytest" "-vv")
+                          (format #t "test suite not run~%")))))))
     (native-inputs
      `(("python-pretend" ,python-pretend)
        ("python-pytest" ,python-pytest)))
@@ -18308,8 +19177,8 @@ several utilities, as well as an API for building localization tools.")
     (home-page "https://github.com/pypa/packaging")
     (synopsis "Core utilities for Python packages")
     (description "Packaging is a Python module for dealing with Python packages.
-It offers an interface for working with package versions, names, and dependency
-information.")
+     It offers an interface for working with package versions, names, and dependency
+     information.")
     ;; From 'LICENSE': This software is made available under the terms of
     ;; *either* of the licenses found in LICENSE.APACHE or LICENSE.BSD.
     ;; Contributions to this software is made under the terms of *both* these
@@ -18319,28 +19188,18 @@ information.")
 (define-public python2-packaging
   (package-with-python2 python-packaging))
 
-;; Variants with minimal dependencies, for bootstrapping Pytest.
-(define-public python-packaging-bootstrap
-  (hidden-package
-   (package/inherit
-    python-packaging
-    (name "python-packaging-bootstrap")
-    (native-inputs '())
-    (propagated-inputs
-     `(("python-pyparsing" ,python-pyparsing)))
-    (arguments '(#:tests? #f)))))
-
-(define-public python2-packaging-bootstrap
-  (hidden-package
-   (package/inherit
-    python2-packaging
-    (name "python2-packaging-bootstrap")
-    (native-inputs '())
-    (propagated-inputs
-     `(("python-pyparsing" ,python2-pyparsing)))
-    (arguments
-     `(#:tests? #f
-       ,@(package-arguments python2-packaging))))))
+;; TODO(staging): merge with python-packaging-bootstrap.
+(define-public python-packaging-next
+  (package
+    (inherit python-packaging)
+    (version "21.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "packaging" version))
+       (sha256
+        (base32
+         "1sygirdrqgv4f1ckh9nhpcw1yfidrh3qjl86wq8vk6nq4wlw8iyx"))))))
 
 (define-public python-relatorio
   (package
@@ -18355,20 +19214,16 @@ information.")
          "09nhrz80dfm60nssbvjgz4czzy4yzfa8gxczcdlzbgcnnvm914vb"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-lxml" ,python-lxml)
-       ("python-genshi" ,python-genshi)))
+     (list python-lxml python-genshi))
     (native-inputs
-     `(("python-magic" ,python-magic)))
+     (list python-magic))
     (home-page "https://relatorio.tryton.org/")
     (synopsis "Templating library able to output ODT and PDF files")
     (description "Relatorio is a templating library which provides a way to
-easily output ODT, ODS, PNG, SVG and several other kinds of files.  Support
-for more filetypes can be easily added by creating plugins for them.")
+     easily output ODT, ODS, PNG, SVG and several other kinds of files.  Support
+     for more filetypes can be easily added by creating plugins for them.")
     (license license:gpl3+)))
 
-(define-public python2-relatorio
-  (package-with-python2 python-relatorio))
-
 (define-public python-radon
   (package
     (name "python-radon")
@@ -18383,26 +19238,30 @@ for more filetypes can be easily added by creating plugins for them.")
     (build-system python-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'relax-requirements
+                    (lambda _
+                      (substitute* "setup.py"
+                        ((".*'future'.*")
+                         "")
+                        (("colorama==0.4.1")
+                         "colorama>=0.4.1"))))
                   (replace 'check
                     (lambda _
                       (invoke "python" "radon/tests/run.py"))))))
     (propagated-inputs
-     `(("python-colorama" ,python-colorama)
-       ("python-flake8-polyfill" ,python-flake8-polyfill)
-       ("python-mando" ,python-mando)))
+     (list python-colorama python-flake8-polyfill python-mando))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-mock" ,python-pytest-mock)))
+     (list python-pytest python-pytest-mock))
     (home-page "https://radon.readthedocs.org/")
     (synopsis "Code Metrics in Python")
     (description "Radon is a Python tool which computes various code metrics.
-Supported metrics are:
-@itemize @bullet
-@item raw metrics: SLOC, comment lines, blank lines, &c.
-@item Cyclomatic Complexity (i.e.  McCabe’s Complexity)
-@item Halstead metrics (all of them)
-@item the Maintainability Index (a Visual Studio metric)
-@end itemize")
+     Supported metrics are:
+     @itemize @bullet
+     @item raw metrics: SLOC, comment lines, blank lines, &c.
+     @item Cyclomatic Complexity (i.e.  McCabe’s Complexity)
+     @item Halstead metrics (all of them)
+     @item the Maintainability Index (a Visual Studio metric)
+     @end itemize")
     (properties `((python2-variant . ,(delay python2-radon))))
     (license license:expat)))
 
@@ -18427,15 +19286,14 @@ Supported metrics are:
          "1and0drq8w9iplsic22n2h7hkpyq03a1mbqk4sgcdqhqzdqm539w"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-mock" ,python-mock)
-       ("python-six" ,python-six)))
+     (list python-mock python-six))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (home-page "https://github.com/gabrielfalcao/sure")
     (synopsis "Automated testing library in python for python")
     (description
      "Sure is a python library that leverages a DSL for writing assertions.
-Sure is heavily inspired by @code{RSpec Expectations} and @code{should.js}.")
+     Sure is heavily inspired by @code{RSpec Expectations} and @code{should.js}.")
     (license license:gpl3+)))
 
 (define-public python2-sure
@@ -18462,7 +19320,7 @@ Sure is heavily inspired by @code{RSpec Expectations} and @code{should.js}.")
      "ANSI terminal tool for python, colored shell and other handy fancy features")
     (description
      "@code{Couleur} provides python programs a way to use the ANSI features in a unix
-terminal such as coloured output in the shell, overwriting output, indentation, etc.")
+     terminal such as coloured output in the shell, overwriting output, indentation, etc.")
     ;; README.md says ASL2.0, but all source code headers are LGPL3+.
     ;; https://github.com/gabrielfalcao/couleur/issues/11
     (license license:lgpl3+)))
@@ -18487,13 +19345,13 @@ terminal such as coloured output in the shell, overwriting output, indentation,
        ;; for which it does not have the permission to write.
        #:tests? #f))
     (propagated-inputs
-     `(("python-cffi" ,python-cffi)))
+     (list python-cffi))
     (home-page "https://github.com/FSX/misaka")
     (synopsis "Python binding for Hoedown")
     (description
      "@code{Misaka} is a CFFI-based binding for @code{Hoedown}, a fast markdown processing
-library written in C.  It features a fast HTML renderer and functionality to make custom
-renderers (e.g. man pages or LaTeX).")
+     library written in C.  It features a fast HTML renderer and functionality to make custom
+     renderers (e.g. man pages or LaTeX).")
     (license license:expat)))
 
 (define-public python2-misaka
@@ -18515,9 +19373,7 @@ renderers (e.g. man pages or LaTeX).")
          "1640i9g8dycql3cc8j0bky0jkzj0q39blfbp4lsgpkprkfgcdk8v"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-couleur" ,python2-couleur)
-       ("python-sure" ,python2-sure)
-       ("python-misaka" ,python2-misaka)))
+     (list python2-couleur python2-sure python2-misaka))
     (arguments
      `(#:python ,python-2
        #:phases
@@ -18533,9 +19389,9 @@ renderers (e.g. man pages or LaTeX).")
     (synopsis "Markdown-based test runner for python")
     (description
      "@code{Steadymark} allows documentation to be written in github-flavoured
-markdown.  The documentation may contain snippets of code surrounded by python
-code blocks and @code{Steadymark} will find these snippets and run them, making
-sure that there are no old malfunctional examples in the documentation examples.")
+     markdown.  The documentation may contain snippets of code surrounded by python
+     code blocks and @code{Steadymark} will find these snippets and run them, making
+     sure that there are no old malfunctional examples in the documentation examples.")
     (license license:expat)))
 
 (define-public python-jsonpointer
@@ -18553,7 +19409,7 @@ sure that there are no old malfunctional examples in the documentation examples.
   (home-page "https://github.com/stefankoegl/python-json-pointer")
   (synopsis "Identify specific nodes in a JSON document")
   (description "@code{jsonpointer} allows you to access specific nodes
-by path in a JSON document (see RFC 6901).")
+     by path in a JSON document (see RFC 6901).")
   (license license:bsd-3)))
 
 (define-public python2-jsonpointer
@@ -18576,11 +19432,11 @@ by path in a JSON document (see RFC 6901).")
          "0k9pff06lxama3nhsc7cdxbp83422bdy8ifs52i6xkas8hpyzfzr"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-jsonpointer" ,python-jsonpointer)))
+     (list python-jsonpointer))
     (home-page "https://github.com/stefankoegl/python-json-patch")
     (synopsis "Applying JSON Patches in Python 2.6+ and 3.x")
     (description "@code{jsonpatch} is a library and program that allows
-applying JSON Patches according to RFC 6902.")
+     applying JSON Patches according to RFC 6902.")
     (license license:bsd-3)))
 
 (define-public python2-jsonpatch
@@ -18616,31 +19472,19 @@ applying JSON Patches according to RFC 6902.")
                 "17dvx15m3r49bmif5zlli8kzjd6bys6psixzbp14sd5367d9h8qi"))))
     (build-system python-build-system)
     (arguments
-     `(#:modules ((guix build utils)
-                  (guix build python-build-system)
-                  (ice-9 ftw)
-                  (srfi srfi-1)
-                  (srfi srfi-26))
-       #:phases
+     `(#:phases
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (let ((cwd (getcwd)))
-               (setenv "PYTHONPATH"
-                       (string-append cwd "/build/"
-                                      (find (cut string-prefix? "lib" <>)
-                                            (scandir (string-append cwd "/build")))
-                                      ":"
-                                      (getenv "PYTHONPATH")))
-             (invoke "pytest" "-v")))))))
-    (native-inputs
-     `(("python-pytest" ,python-pytest)))
+             (invoke "pytest" "-v"))))))
+    (native-inputs
+     (list python-pytest))
     (home-page "https://rfc3986.readthedocs.io/")
     (synopsis "Parse and validate URI references")
     (description
      "@code{rfc3986} is a Python implementation of RFC@tie{}3986 including
-validation and authority parsing.  This module also supports RFC@tie{}6874
-which adds support for zone identifiers to IPv6 addresses.")
+     validation and authority parsing.  This module also supports RFC@tie{}6874
+     which adds support for zone identifiers to IPv6 addresses.")
     (license license:asl2.0)))
 
 (define-public python2-rfc3986
@@ -18661,7 +19505,7 @@ which adds support for zone identifiers to IPv6 addresses.")
     (home-page "https://pypi.org/project/rfc3987/")
     (synopsis "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)")
     (description "@code{rfc3987} provides routines for parsing and
-validation of URIs (see RFC 3986) and IRIs (see RFC 3987).")
+     validation of URIs (see RFC 3986) and IRIs (see RFC 3987).")
     (license license:gpl3+)))
 
 (define-public python2-rfc3987
@@ -18694,13 +19538,13 @@ validation of URIs (see RFC 3986) and IRIs (see RFC 3987).")
                  (invoke "pytest" "tests/test_ipv6.py")
                  #t))))))
       (native-inputs
-       `(("python-pytest" ,python-pytest)))
+       (list python-pytest))
       (home-page "https://pypi.org/project/rfc6555/")
       (synopsis "Python implementation of RFC 6555")
       (description
        "Python implementation of the Happy Eyeballs Algorithm described in RFC
-6555.  Provided with a single file and dead-simple API to allow easy vendoring
-and integration into other projects.")
+     6555.  Provided with a single file and dead-simple API to allow easy vendoring
+     and integration into other projects.")
       (license license:asl2.0))))
 
 (define-public python-bagit
@@ -18716,14 +19560,12 @@ and integration into other projects.")
           "1m6y04qmig0b5hzb35lnaw3d2yfydb7alyr1579yblvgs3da6j7j"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-coverage" ,python-coverage)
-       ("python-mock" ,python-mock)))
+     (list python-setuptools-scm python-coverage python-mock))
     (home-page "https://libraryofcongress.github.io/bagit-python/")
     (synopsis "Create and validate BagIt packages")
     (description "Bagit is a Python library and command line utility for working
-with BagIt style packages.  BagIt is a minimalist packaging format for digital
-preservation.")
+     with BagIt style packages.  BagIt is a minimalist packaging format for digital
+     preservation.")
     (license license:cc0)))
 
 (define-public python-prov
@@ -18739,19 +19581,15 @@ preservation.")
           "1vi2fj31vygfcqrkimdmk52q2ldw08g9fn4v4zlgdfgcjlhqyhxn"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-lxml" ,python-lxml)
-       ("python-networkx" ,python-networkx)
-       ("python-rdflib" ,python-rdflib)))
+     (list python-dateutil python-lxml python-networkx python-rdflib-5))
     (native-inputs
-     `(("graphviz" ,graphviz)
-       ("python-pydot" ,python-pydot)))
+     (list graphviz python-pydot))
     (home-page "https://github.com/trungdong/prov")
     (synopsis
      "W3C Provenance Data Model supporting PROV-JSON, PROV-XML and PROV-O (RDF)")
     (description
      "This package provides a library for W3C Provenance Data Model supporting
-PROV-O (RDF), PROV-XML, PROV-JSON import/export.")
+     PROV-O (RDF), PROV-XML, PROV-JSON import/export.")
     (license license:expat)))
 
 (define-public python-arcp
@@ -18767,23 +19605,23 @@ PROV-O (RDF), PROV-XML, PROV-JSON import/export.")
           "1p8mfyjssa6pbn5dp6pyzv9yy6kwm2rz5jn2kjbq5vy9f9wsq5sw"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "http://arcp.readthedocs.io/")
     (synopsis
      "Archive and Package URI parser and generator")
     (description
      "@acronym{arcp, Archive and Package} provides functions for creating
-@code{arcp_} URIs, which can be used for identifying or parsing hypermedia files
-packaged in an archive or package, like a ZIP file.  arcp URIs can be used to
-consume or reference hypermedia resources bundled inside a file archive or an
-application package, as well as to resolve URIs for archive resources within a
-programmatic framework.  This URI scheme provides mechanisms to generate a
-unique base URI to represent the root of the archive, so that relative URI
-references in a bundled resource can be resolved within the archive without
-having to extract the archive content on the local file system.  An arcp URI can
-be used for purposes of isolation (e.g. when consuming multiple archives),
-security constraints (avoiding \"climb out\" from the archive), or for
-externally identiyfing sub-resources referenced by hypermedia formats.")
+     @code{arcp_} URIs, which can be used for identifying or parsing hypermedia files
+     packaged in an archive or package, like a ZIP file.  arcp URIs can be used to
+     consume or reference hypermedia resources bundled inside a file archive or an
+     application package, as well as to resolve URIs for archive resources within a
+     programmatic framework.  This URI scheme provides mechanisms to generate a
+     unique base URI to represent the root of the archive, so that relative URI
+     references in a bundled resource can be resolved within the archive without
+     having to extract the archive content on the local file system.  An arcp URI can
+     be used for purposes of isolation (e.g. when consuming multiple archives),
+     security constraints (avoiding \"climb out\" from the archive), or for
+     externally identiyfing sub-resources referenced by hypermedia formats.")
     (license license:asl2.0)))
 
 (define-public python-shellescape
@@ -18811,27 +19649,27 @@ externally identiyfing sub-resources referenced by hypermedia formats.")
                (invoke "python" "tests/test_shellescape.py"))
              #t)))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/chrissimpkins/shellescape")
     (synopsis
      "Shell escape a string to safely use it as a token in a shell command")
     (description
      "The shellescape Python module defines the @code{shellescape.quote()}
-function that returns a shell-escaped version of a Python string.  This is a
-backport of the @code{shlex.quote()} function from Python 3.8 that makes it
-accessible to users of Python 3 versions < 3.3 and all Python 2.x versions.")
+     function that returns a shell-escaped version of a Python string.  This is a
+     backport of the @code{shlex.quote()} function from Python 3.8 that makes it
+     accessible to users of Python 3 versions < 3.3 and all Python 2.x versions.")
     (license license:expat)))
 
 (define-public python-validators
   (package
     (name "python-validators")
-    (version "0.14.2")
+    (version "0.18.2")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "validators" version))
               (sha256
                (base32
-                "024m15j33szd0v8k5l4ccish6n0b4knq81gmb4fq25ynwyyyd4mi"))))
+                "19lypf7hm7p203ay3v8zmckc5rv6889zkfdm16nki1972f99mk9p"))))
     (build-system python-build-system)
     (arguments
      '(#:phases (modify-phases %standard-phases
@@ -18839,24 +19677,18 @@ accessible to users of Python 3 versions < 3.3 and all Python 2.x versions.")
                     (lambda _
                       (invoke "pytest" "-vv"))))))
     (propagated-inputs
-     `(("python-decorator" ,python-decorator)
-       ("python-six" ,python-six)))
+     (list python-decorator python-six))
     (native-inputs
-     `(("python-flake8" ,python-flake8)
-       ("python-isort" ,python-isort)
-       ("python-pytest" ,python-pytest)))
+     (list python-flake8 python-isort python-pytest))
     (home-page "https://github.com/kvesteri/validators")
     (synopsis "Data validation library")
     (description
      "This package contains validators for different things such as email
-addresses, IP addresses, URLs, hashes and more.  It has been designed to
-be easy to use and not require defining a schema or form just to validate
-some input.")
+     addresses, IP addresses, URLs, hashes and more.  It has been designed to
+     be easy to use and not require defining a schema or form just to validate
+     some input.")
     (license license:expat)))
 
-(define-public python2-validators
-  (package-with-python2 python-validators))
-
 (define-public python-validate-email
   (package
     (name "python-validate-email")
@@ -18872,7 +19704,7 @@ some input.")
     (home-page "https://github.com/syrusakbary/validate_email")
     (synopsis "Verifies if an email address is valid and really exists")
     (description "@code{validate_email} can be used to verify if an email
-address is valid and really exists.")
+     address is valid and really exists.")
     (license license:lgpl3+)))
 
 (define-public python2-validate-email
@@ -18891,14 +19723,14 @@ address is valid and really exists.")
         "00pamnwla3khk8nyla7y28dq9jnh69swd7f4jfsl7sn1izs8n8zk"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-click" ,python-click)
-       ("python-iso8601" ,python-iso8601)
-       ("python-jsonpointer" ,python-jsonpointer)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-requests" ,python-requests)
-       ("python-rfc3987" ,python-rfc3987)
-       ("python-six" ,python-six)
-       ("python-validate-email" ,python-validate-email)))
+     (list python-click
+           python-iso8601
+           python-jsonpointer
+           python-pyyaml
+           python-requests
+           python-rfc3987
+           python-six
+           python-validate-email))
     (home-page "https://github.com/pipermerriam/flex")
     (synopsis "Validates Swagger schemata")
     (description "@code{flex} can be used to validate Swagger schemata.")
@@ -18920,16 +19752,44 @@ address is valid and really exists.")
         "0kizhh3mnhpa08wfnsv1gagy22bpxzxszgbiylkhpz1d8qvwrykk"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-simplejson" ,python-simplejson)))
+     (list python-dateutil python-simplejson))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytz" ,python-pytz)))
+     (list python-pytest python-pytz))
     (home-page "https://github.com/marshmallow-code/marshmallow")
     (synopsis "Convert complex datatypes to and from native
-Python datatypes.")
+     Python datatypes")
     (description "@code{marshmallow} provides a library for converting
-complex datatypes to and from native Python datatypes.")
+     complex datatypes to and from native Python datatypes.")
+    (license license:expat)))
+
+(define-public python-marshmallow-jsonapi
+  (package
+    (name "python-marshmallow-jsonapi")
+    (version "0.24.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "marshmallow-jsonapi" version))
+       (sha256
+        (base32 "1d9pxcgmln4gls99vwj1h24qv0lz7fb2jqmqrsiv1pid1snc125x"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     (list python-marshmallow))
+    (native-inputs
+     (list python-faker
+           python-flake8
+           python-flake8-bugbear
+           python-flask
+           python-mock
+           python-pre-commit
+           python-pytest
+           python-tox))
+    (home-page "https://github.com/marshmallow-code/marshmallow-jsonapi")
+    (synopsis "JSON:API 1.0 formatting with Marshmallow")
+    (description
+     "The marshmallow-jsonapi package provides a simple way to produce
+     @uref{https://jsonapi.org, JSON:API}-compliant data in any Python Web framework.
+     It includes optional utilities to integrate with Flask.")
     (license license:expat)))
 
 (define-public python-apispec
@@ -18946,29 +19806,22 @@ complex datatypes to and from native Python datatypes.")
     (build-system python-build-system)
     (arguments
      '(#:phases (modify-phases %standard-phases
-                  (add-after 'unpack 'disable-prance-tests
-                    (lambda _
-                      ;; Disable validation tests since they require the
-                      ;; optional 'prance' library which is not yet in Guix.
-                      (substitute* "tests/test_ext_marshmallow_openapi.py"
-                        (("def test_openapi_tools_validate.*" all)
-                         (string-append "@pytest.mark.xfail\n" all)))))
                   (replace 'check
                     (lambda _
-                      (setenv "PYTHONPATH"
-                              (string-append "./build/lib:"
-                                             (getenv "PYTHONPATH")))
-                      (invoke "pytest" "-vv"))))))
+                      (invoke "pytest" "-vv"
+                              ;; Disable validation tests since they require
+                              ;; the optional 'prance' library which is not
+                              ;; yet in Guix.
+                              "-k" "not openapi_tools_validate"))))))
     (propagated-inputs
-     `(("python-pyyaml" ,python-pyyaml)))
+     (list python-pyyaml))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-marshmallow" ,python-marshmallow)))
+     (list python-pytest python-marshmallow))
     (home-page "https://github.com/marshmallow-code/apispec")
     (synopsis "Swagger/OpenAPI specification generator")
     (description "@code{python-apispec} is a pluggable API specification
-generator.  It currently supports the OpenAPI specification, formerly known
-as Swagger.")
+     generator.  It currently supports the OpenAPI specification, formerly known
+     as Swagger.")
     (license license:expat)))
 
 (define-public python-flasgger
@@ -18993,29 +19846,23 @@ as Swagger.")
              (substitute* "Makefile"
                (("flake8 flasgger --ignore=F403")
                 "flake8 flasgger --ignore=E731,F403"))
-             (setenv "PYTHONPATH" (string-append (getcwd)
-                                                 ":"
-                                                 (getenv "PYTHONPATH")))
              (invoke "py.test"))))))
     (propagated-inputs
-     `(("python-flask" ,python-flask)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-jsonschema" ,python-jsonschema)
-       ("python-mistune" ,python-mistune)
-       ("python-six" ,python-six)))
-    (native-inputs
-     `(("python-decorator" ,python-decorator)
-       ("python-flake8" ,python-flake8)
-       ("python-flask-restful" ,python-flask-restful)
-       ("python-flex" ,python-flex)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-marshmallow" ,python-marshmallow)
-       ("python-apispec" ,python-apispec)))
+     (list python-flask python-pyyaml python-jsonschema python-mistune
+           python-six))
+    (native-inputs
+     (list python-decorator
+           python-flake8
+           python-flask-restful
+           python-flex
+           python-pytest
+           python-pytest-cov
+           python-marshmallow
+           python-apispec))
     (home-page "https://github.com/rochacbruno/flasgger/")
     (synopsis "Extract Swagger specs from your Flask project")
     (description "@code{python-flasgger} allows extracting Swagger specs
-from your Flask project.  It is a fork of Flask-Swagger.")
+     from your Flask project.  It is a fork of Flask-Swagger.")
     (license license:expat)))
 
 (define-public python-swagger-spec-validator
@@ -19031,14 +19878,12 @@ from your Flask project.  It is a fork of Flask-Swagger.")
          "11g627icrsqwazsncwi0sdvprcj6hwaayw5xk3xsj8d97bmrzqjp"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-jsonschema" ,python-jsonschema)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-six" ,python-six)))
+     (list python-jsonschema python-pyyaml python-six))
     (home-page
      "https://github.com/Yelp/swagger_spec_validator")
     (synopsis "Validation of Swagger specifications")
     (description "@code{swagger_spec_validator} provides a library for
-validating Swagger API specifications.")
+     validating Swagger API specifications.")
     (license license:asl2.0)))
 
 (define-public python-apache-libcloud
@@ -19054,41 +19899,35 @@ validating Swagger API specifications.")
           "1b28j265kvibgxrgxx0gwfm6cmv252c8ph1j2vb0cpms8ph5if5v"))))
     (build-system python-build-system)
     (arguments
-     `(#:phases
+     '(#:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-ssh
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "libcloud/compute/ssh.py"
-               (("'ssh'") (string-append "'" (assoc-ref inputs "openssh")
-                                         "/bin/ssh" "'")))
-             #t))
+               (("'ssh'")
+                (string-append "'" (search-input-file inputs "/bin/ssh")
+                               "'")))))
          (add-after 'unpack 'patch-tests
            (lambda _
              (substitute* "libcloud/test/compute/test_ssh_client.py"
-               (("class ShellOutSSHClientTests")
+               (("^class ShellOutSSHClientTests")
                 "@unittest.skip(\"Guix container doesn't have ssh service\")
-class ShellOutSSHClientTests"))
-             #t))
+class ShellOutSSHClientTests"))))
          (add-before 'check 'copy-secret
            (lambda _
              (copy-file "libcloud/test/secrets.py-dist"
-                        "libcloud/test/secrets.py")
-             #t)))))
+                        "libcloud/test/secrets.py"))))))
     (inputs
-     `(("openssh" ,openssh)))
+     (list openssh))
     (propagated-inputs
-     `(("python-paramiko" ,python-paramiko)
-       ("python-requests" ,python-requests)))
+     (list python-paramiko python-requests))
     (native-inputs
-     `(("python-lockfile" ,python-lockfile)
-       ("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)
-       ("python-requests-mock" ,python-requests-mock)))
+     (list python-lockfile python-mock python-pytest python-pytest-runner
+           python-requests-mock))
     (home-page "https://libcloud.apache.org/")
     (synopsis "Unified Cloud API")
     (description "@code{libcloud} is a Python library for interacting with
-many of the popular cloud service providers using a unified API.")
+     many of the popular cloud service providers using a unified API.")
     (license license:asl2.0)))
 
 (define-public python-smmap
@@ -19103,22 +19942,16 @@ many of the popular cloud service providers using a unified API.")
         (base32 "0ijlnv60y8f41py1wnn5n1a1i81cxd9dfpdhr0k3cgkrcbz8850p"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-nosexcover" ,python-nosexcover)))
+     (list python-nosexcover))
     (home-page "https://github.com/Byron/smmap")
     (synopsis "Python sliding window memory map manager")
     (description "@code{smmap} is a pure Python implementation of a sliding
-window memory map manager.")
+     window memory map manager.")
     (license license:bsd-3)))
 
-(define-public python-smmap2
-  (deprecated-package "python-smmap2" python-smmap))
-
 (define-public python2-smmap
   (package-with-python2 python-smmap))
 
-(define-public python2-smmap2
-  (deprecated-package "python2-smmap2" python2-smmap))
-
 (define-public python-regex
   (package
     (name "python-regex")
@@ -19137,13 +19970,13 @@ window memory map manager.")
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (add-installed-pythonpath inputs outputs)
              (invoke "python" "-c"
-                     "from regex.test_regex import test_main; test_main()"))))))
-    (home-page "https://bitbucket.org/mrabarnett/mrab-regex")
-    (synopsis "Alternative regular expression module")
-    (description "This regular expression implementation is backwards-
+                     "from regex.test_regex import test_main ; test_main()"))))))
+     (home-page "https://bitbucket.org/mrabarnett/mrab-regex")
+     (synopsis "Alternative regular expression module")
+     (description "This regular expression implementation is backwards-
 compatible with the standard @code{re} module, but offers additional
 functionality like full case-folding for case-insensitive matches in Unicode.")
-    (license license:psfl)))
+     (license license:psfl)))
 
 (define-public python2-regex
   (package-with-python2 python-regex))
@@ -19161,9 +19994,7 @@ functionality like full case-folding for case-insensitive matches in Unicode.")
          "091lp9bpqi8yf1nmyg19xmvw611lrzq2q94cl1k5gnlh0c6vl1s1"))))
     (build-system python-build-system)
     (inputs
-     `(("mesa" ,mesa)
-       ("freeglut" ,freeglut)
-       ("glu" ,glu)))
+     (list mesa freeglut glu))
     (arguments
      `(#:tests? #f ; Tests fail: AttributeError: 'GLXPlatform' object has no
                                         ;attribute 'OSMesa'
@@ -19207,8 +20038,7 @@ library.")
         (base32
          "01iggy5jwxv7lxnj51zbmlbhag9wcb7dvrbwgi97i90n0a5m3r8j"))))
     (inputs
-     `(("mesa" ,mesa)
-       ("python-numpy" ,python-numpy))) ; for cython module
+     (list mesa python-numpy)) ; for cython module
                                         ; numpy_formathandler, thus not propagated
     (arguments
      `(#:tests? #f
@@ -19240,8 +20070,7 @@ library.")
           (lambda _
             (delete-file "rencode/t.py")
             #t)))))
-   (native-inputs `(("pkg-config" ,pkg-config)
-                    ("python-cython" ,python-cython)))
+   (native-inputs (list pkg-config python-cython))
    (home-page "https://github.com/aresch/rencode")
    (synopsis "Serialization of heterogeneous data structures")
    (description
@@ -19269,11 +20098,8 @@ pure Python module.")
          "0nv207ql2wmh9q62503np056c4vf1c1hlsi5cvv5p5kx574k6r2y"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pyyaml" ,python-pyyaml)
-       ("python-radon" ,python-radon)
-       ("python-requests" ,python-requests)
-       ("python-flake8" ,python-flake8)
-       ("python-tox" ,python-tox)))
+     (list python-pyyaml python-radon python-requests python-flake8
+           python-tox))
     (arguments
      `(#:tests? #f                      ;test suite not shipped with the PyPI archive
        #:phases
@@ -19341,14 +20167,14 @@ ignoring formatting changes.")
 (define-public python-pydub
   (package
     (name "python-pydub")
-    (version "0.24.1")
+    (version "0.25.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pydub" version))
        (sha256
         (base32
-         "0sfwfq7yjv4bl3yqbmizszscafvwf4zr40hzbsy7rclvzyznh333"))))
+         "03ykn2kp6qglsrzqi5h79z5cp3kl9mknasv0d6jv5jj9k77362lq"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -19367,9 +20193,9 @@ ignoring formatting changes.")
                #t))))))
     (home-page "https://pydub.com")
     (inputs
-     `(("ffmpeg" ,ffmpeg)))
+     (list ffmpeg))
     (propagated-inputs
-     `(("python-scipy" ,python-scipy)))
+     (list python-scipy))
     (synopsis "Manipulate audio with a high level interface in Python")
     (description
      "@code{pydub} makes it easy to manipulate audio in Python.  It relies on
@@ -19379,25 +20205,25 @@ ignoring formatting changes.")
 (define-public python-tqdm
   (package
     (name "python-tqdm")
-    (version "4.43.0")
+    (version "4.62.3")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "tqdm" version))
          (sha256
            (base32
-             "093v4c2x5hpigv47zvyxl8wh10y2yd2gvz3l9vchn0zsp8hv2pzk"))))
+             "03cjj8jl8iybvfjbpvdql5qfslzfv043g7w6nx8rhv2h2xrdwnfk"))))
     (build-system python-build-system)
     (arguments
      '(#:phases (modify-phases %standard-phases
                   (replace 'check
-                    (lambda* (#:key inputs outputs #:allow-other-keys)
-                      (add-installed-pythonpath inputs outputs)
-                      ;; This invokation is taken from tox.ini.
-                      (invoke "nosetests" "--ignore-files=\"test_perf.py\""
-                              "-d" "-v" "tqdm/"))))))
+                    (lambda _
+                      (invoke "pytest" "-vv"
+                              "-o" "asyncio_mode=auto"
+                              "-k" "not perf"))))))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-pytest python-pytest-asyncio python-pytest-timeout
+           python-setuptools-scm python-toml))
     (home-page "https://github.com/tqdm/tqdm")
     (synopsis "Fast, extensible progress meter")
     (description
@@ -19406,20 +20232,16 @@ iterable with @code{|tqdm(iterable)|}.  Offers many options to define
 design and layout.")
     (license (list license:mpl2.0 license:expat))))
 
-(define-public python2-tqdm
-  (package-with-python2 python-tqdm))
-
 (define-public python-pkginfo
   (package
     (name "python-pkginfo")
-    (version "1.7.0")
+    (version "1.8.2")
     (source
-      (origin
-        (method url-fetch)
-        (uri (pypi-uri "pkginfo" version))
-        (sha256
-          (base32
-            "1d1xn1xmfvz0jr3pj8irdwnwby3r13g0r2gwklr1q5y68p5p16h2"))))
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pkginfo" version))
+       (sha256
+        (base32 "1zrbn2gblb1q1rx0jlbd0vc9h1dm1bj0760p40ff5qjhcw5hsbjl"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -19428,14 +20250,13 @@ design and layout.")
            (lambda _
              (substitute* "pkginfo/tests/test_installed.py"
                (("test_ctor_w_package_no_PKG_INFO")
-                "_test_ctor_w_package_no_PKG_INFO"))
-             #t)))))
-    (home-page
-      "https://code.launchpad.net/~tseaver/pkginfo/trunk")
-    (synopsis
-      "Query metadatdata from sdists, bdists, and installed packages")
+                "_test_ctor_w_package_no_PKG_INFO")))))))
+    (native-inputs
+     (list python-wheel))
+    (home-page "https://code.launchpad.net/~tseaver/pkginfo/trunk")
+    (synopsis "Query metadatdata from sdists, bdists, and installed packages")
     (description
-      "API to query the distutils metadata written in @file{PKG-INFO} inside a
+     "API to query the distutils metadata written in @file{PKG-INFO} inside a
 source distriubtion (an sdist) or a binary distribution (e.g., created by
 running bdist_egg).  It can also query the EGG-INFO directory of an installed
 distribution, and the *.egg-info stored in a \"development checkout\" (e.g,
@@ -19457,12 +20278,12 @@ created by running @code{python setup.py develop}).")
          (base32 "11rpd653zcgzkq3sgwkzs3mpxl3r5rij59745ni84ikv8smjmlm3"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-tqdm" ,python-tqdm)
-       ("python-packaging" ,python-packaging)
-       ("python-pkginfo" ,python-pkginfo)
-       ("python-readme-renderer" ,python-readme-renderer)
-       ("python-requests" ,python-requests)
-       ("python-requests-toolbelt" ,python-requests-toolbelt)))
+     (list python-tqdm
+           python-packaging
+           python-pkginfo
+           python-readme-renderer
+           python-requests
+           python-requests-toolbelt))
     (home-page "https://github.com/pypa/twine")
     (synopsis "Collection of utilities for interacting with PyPI")
     (description
@@ -19471,9 +20292,6 @@ distributions.  It authenticates the user over HTTPS, allows them to pre-sign
 their files and supports any packaging format (including wheels).")
     (license license:asl2.0)))
 
-(define-public python2-twine
-  (package-with-python2 python-twine))
-
 (define-public python-linecache2
   (package
     (name "python-linecache2")
@@ -19521,7 +20339,7 @@ lines are read from a single file.")
     (native-inputs
      `(("python-pbr" ,python-pbr-minimal)))
     (propagated-inputs
-      `(("python-linecache2" ,python-linecache2)))
+      (list python-linecache2 python-six))
     (home-page
       "https://github.com/testing-cabal/traceback2")
     (synopsis "Backports of the traceback module")
@@ -19622,10 +20440,20 @@ services.")
         (base32
          "1nii1sz5jq75ilf18bjnr11l9rz1lvdmyk66bxl7q90qan85yhjj"))))
     (build-system python-build-system)
+    (arguments
+     '(#:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'dont-install-defunct-egginfo
+                    (lambda _
+                      ;; When a ".git" directory is missing, the setup.py
+                      ;; script invokes setuptools.setup twice, once with
+                      ;; "0" as the version.  Prevent that.
+                      (substitute* "setup.py"
+                        (("if not isdir\\('\\.git'\\):")
+                         "if False:")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (propagated-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-setuptools-scm))
     (home-page "https://github.com/Changaco/setuptools_scm_git_archive/")
     (synopsis "Setuptools_scm plugin for git archives")
     (description
@@ -19668,6 +20496,29 @@ belong to tagged versions.")
 Git.")
     (license license:bsd-3)))
 
+(define-public python-setuptools-rust
+  (package
+    (name "python-setuptools-rust")
+    (version "1.1.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "setuptools-rust" version))
+       (sha256
+        (base32 "1lb57qx1azklgzmalflq960agvwci4bwddw0zvlc9zy00fsvkbd0"))))
+    (build-system python-build-system)
+    (arguments '(#:tests? #f))          ;no tests
+    (native-inputs
+     (list python-setuptools-scm))
+    (propagated-inputs
+     (list python-semantic-version python-typing-extensions))
+    (home-page "https://github.com/PyO3/setuptools-rust")
+    (synopsis "Setuptools plugin for Rust extensions")
+    (description
+     "@code{setuptools-rust} is a plugin for @code{setuptools} to build
+Rust Python extensions implemented with @code{PyO3} or @code{rust-cpython}.")
+    (license license:expat)))
+
 (define-public python-pyclipper
   (package
     (name "python-pyclipper")
@@ -19692,13 +20543,10 @@ Git.")
              (with-directory-excursion "pyclipper"
                (invoke "cython" "--cplus" "pyclipper.pyx")))))))
     (propagated-inputs
-     `(("python-setuptools-scm-git-archive" ,python-setuptools-scm-git-archive)))
+     (list python-setuptools-scm-git-archive))
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)
-       ("python-unittest2" ,python-unittest2)
-       ("unzip" ,unzip)))
+     (list python-cython python-pytest python-pytest-runner
+           python-unittest2 unzip))
     (home-page "https://github.com/greginvm/pyclipper")
     (synopsis "Wrapper for Angus Johnson's Clipper library")
     (description
@@ -19724,13 +20572,9 @@ Angus Johnson's polygon clipping Clipper library (ver. 6.4.2).")
     (arguments
      `(#:python ,python-2))
     (native-inputs
-     `(("unzip" ,unzip)
-       ("python2-pytest" ,python2-pytest)
-       ("python2-pytest-runner" ,python2-pytest-runner)))
+     (list unzip python2-pytest python2-pytest-runner))
     (propagated-inputs
-     `(("python-fonttools" ,python2-fonttools)
-       ("python-pyclipper" ,python2-pyclipper)
-       ("python-ufolib" ,python2-ufolib)))
+     (list python2-fonttools python2-pyclipper python2-ufolib))
     (home-page "https://github.com/typemytype/booleanOperations")
     (synopsis "Boolean operations on paths")
     (description
@@ -19804,10 +20648,9 @@ particularly convenient for use in tests.")
                                 (lambda (filename)
                                   (string-suffix? ".py" filename)))))))))
     (native-inputs
-     `(("python-tempdir" ,python-tempdir)
-       ("python-nose" ,python-nose)))
+     (list python-tempdir python-nose))
     (propagated-inputs
-     `(("python-h5py" ,python-h5py)))
+     (list python-h5py))
     (home-page "https://www.activepapers.org/")
     (synopsis "Executable papers for scientific computing")
     (description
@@ -19853,7 +20696,7 @@ such as figshare or Zenodo.")
                       (delete-file "setup.cfg")
                       (invoke "py.test"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/k-bx/python-semver")
     (synopsis "Python helper for Semantic Versioning")
     (description "This package provides a Python library for
@@ -19877,11 +20720,9 @@ such as figshare or Zenodo.")
     (arguments
      '(#:tests? #f)) ;FIXME: Some tests require network access.
     (native-inputs
-     `(("python-cloudpickle" ,python-cloudpickle)
-       ("python-dill" ,python-dill)
-       ("python-msgpack" ,python-msgpack)))
+     (list python-cloudpickle python-dill python-msgpack))
     (propagated-inputs
-     `(("python-serpent" ,python-serpent)))
+     (list python-serpent))
     (home-page "https://pyro4.readthedocs.io")
     (synopsis "Distributed object middleware for Python")
     (description
@@ -19935,10 +20776,9 @@ is the new Pyro version that is actively developed.")
          "16l48aj9fps9r7jyk8gpxppwrv0fqvlc13sayxskz28r5s6sjwbl"))))
     (build-system python-build-system)
     (inputs
-     `(("netcdf" ,netcdf)))
+     (list netcdf))
     (propagated-inputs
-     `(("python-numpy" ,python2-numpy-1.8)
-       ("python-pyro" ,python2-pyro)))
+     (list python2-numpy-1.8 python2-pyro))
     (arguments
      ;; ScientificPython is not compatible with Python 3
      `(#:python ,python-2
@@ -19975,7 +20815,7 @@ not actively maintained and works only with Python 2 and NumPy < 1.9.")
          "1fqwh3ba9jd42nigvn5shndgwb1zy7kh9520ncvqci7n8ffjr6p1"))))
     (build-system python-build-system)
     (native-inputs
-     `(("netcdf" ,netcdf)))
+     (list netcdf))
     (propagated-inputs
      `(("python-scientific" ,python2-scientific)
        ("python-tkinter" ,python-2 "tk")))
@@ -20057,9 +20897,9 @@ queue.")
          "05pd1hyhqvpw87rnbvl3vdyf619snpyccbswaxisdj17frwnjacf"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-heapdict" ,python-heapdict)))
+     (list python-heapdict))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://zict.readthedocs.io/en/latest/")
     (synopsis "Composable mutable mapping tools")
     (description "This package provides abstract @code{MutableMapping} classes
@@ -20108,9 +20948,8 @@ user's @file{~/Trash} directory.")
           `(modify-phases ,phases
              (add-before 'check 'setenv
                (lambda _
-                 (setenv "PYTHONPATH"
-                         (string-append (getcwd) ":" (getenv "PYTHONPATH")))
-                 #t)))))))))
+                 (setenv "GUIX_PYTHONPATH"
+                         (string-append (getcwd) ":" (getenv "GUIX_PYTHONPATH"))))))))))))
 
 (define-public python-pyfavicon
   (package
@@ -20128,9 +20967,7 @@ user's @file{~/Trash} directory.")
      ;; repository require online data.
      '(#:tests? #f))
     (propagated-inputs
-     `(("python-aiohttp" ,python-aiohttp)
-       ("python-beautifulsoup4" ,python-beautifulsoup4)
-       ("python-pillow" ,python-pillow)))
+     (list python-aiohttp python-beautifulsoup4 python-pillow))
     (home-page "https://github.com/bilelmoussaoui/pyfavicon")
     (synopsis "Async favicon fetcher")
     (description
@@ -20149,9 +20986,7 @@ user's @file{~/Trash} directory.")
         (base32 "090krlxj7az0d9yl8i20vjrqi66dfxx7y5xakjhxzsfp7qmldnc7"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pathspec" ,python-pathspec)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-setuptools" ,python-setuptools)))
+     (list python-pathspec python-pyyaml python-setuptools))
     (home-page "https://github.com/adrienverge/yamllint")
     (synopsis "Linter for YAML files")
     (description
@@ -20208,14 +21043,9 @@ style guide, even if the original code didn't violate the style guide.")
                  "/bin/jq")))
              #t)))))
     (inputs
-     `(("python-argcomplete" ,python-argcomplete)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-xmltodict" ,python-xmltodict)
-       ("jq" ,jq)))
-    (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-flake8" ,python-flake8)
-       ("python-wheel" ,python-wheel)))
+     (list python-argcomplete python-pyyaml python-xmltodict jq))
+    (native-inputs
+     (list python-coverage python-flake8 python-wheel))
     (home-page "https://github.com/kislyuk/yq")
     (synopsis "Command-line YAML/XML processor")
     (description
@@ -20277,7 +21107,7 @@ files, and Makefiles.")
           (lambda _
             (invoke "py.test"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/Suor/whatever")
     (synopsis "Make anonymous functions by partial application of operators")
     (description "@code{whatever} provides an easy way to make anonymous
@@ -20308,8 +21138,7 @@ functions by partial application of operators.")
            (lambda _
              (invoke "py.test"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-whatever" ,python-whatever)))
+     (list python-pytest python-whatever))
     (home-page "https://github.com/Suor/funcy")
     (synopsis "Functional tools")
     (description "@code{funcy} is a library that provides functional tools.
@@ -20394,11 +21223,9 @@ Week instances stringify to this form.")
                   (string-append "'" libzbar "/lib/libzbar.so.0'")))
                #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python-numpy" ,python-numpy)
-       ("python-pillow" ,python-pillow)))
+     (list pkg-config python-numpy python-pillow))
     (inputs
-     `(("zbar" ,zbar)))
+     (list zbar))
     (home-page "https://github.com/NaturalHistoryMuseum/pyzbar/")
     (synopsis "Read one-dimensional barcodes and QR codes")
     (description
@@ -20427,7 +21254,7 @@ Features:
          "1yjvbz7rvrz31zjyax1cgy3xhf4wb3j18jwnj4bnl77ca4gliyiw"))))
     (build-system python-build-system)
     (home-page "https://github.com/asottile/tokenize-rt")
-    (synopsis "Wrapper around the stdlib tokenize which roundtrips.")
+    (synopsis "Wrapper around the stdlib tokenize which roundtrips")
     (description
      "This Python library is a wrapper around @code{tokenize} from the Python
 standard library.  It provides two additional tokens @code{ESCAPED_NL} and
@@ -20448,7 +21275,7 @@ and @code{tokens_to_src} to roundtrip.")
          "0ydxqz2dvns44g55p8ix2x18qkfk3aaz0m0dc70f3g6n8js35h47"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-tokenize-rt" ,python-tokenize-rt)))
+     (list python-tokenize-rt))
     (home-page "https://github.com/asottile/future-fstrings")
     (synopsis "Backport of fstrings to Python < 3.6")
     (description
@@ -20461,7 +21288,7 @@ source bytes using the UTF-8 encoding and then rewrites Python 3.6 style
 (define-public python-typed-ast
   (package
     (name "python-typed-ast")
-    (version "1.4.0")
+    (version "1.5.1")
     (source
      (origin
        (method git-fetch)
@@ -20469,29 +21296,16 @@ source bytes using the UTF-8 encoding and then rewrites Python 3.6 style
              (url "https://github.com/python/typed_ast")
              (commit version)))
        (sha256
-        (base32 "0l0hz809f7i356kmqkvfsaswiidb98j9hs9rrjnfawzqcbffzgyb"))
+        (base32 "1xfcs5246c8v5600aaa8zs7ii4sxb62q6r3sb2fgazyjx97wrxd9"))
        (file-name (git-file-name name version))))
     (build-system python-build-system)
     (arguments
-     `(#:modules ((guix build utils)
-                  (guix build python-build-system)
-                  (ice-9 ftw)
-                  (srfi srfi-1)
-                  (srfi srfi-26))
-       #:phases
+     `(#:phases
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (let ((cwd (getcwd)))
-               (setenv "PYTHONPATH"
-                       (string-append cwd "/build/"
-                                      (find (cut string-prefix? "lib" <>)
-                                            (scandir (string-append cwd "/build")))
-                                      ":"
-                                      (getenv "PYTHONPATH"))))
-             (invoke "pytest")
-             #t)))))
-    (native-inputs `(("python-pytest" ,python-pytest)))
+             (invoke "pytest"))))))
+    (native-inputs (list python-pytest))
     (home-page "https://github.com/python/typed_ast")
     (synopsis "Fork of Python @code{ast} modules with type comment support")
     (description "This package provides a parser similar to the standard
@@ -20521,36 +21335,35 @@ based on the CPython 2.7 and 3.7 parsers.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-before 'check 'disable-failing-tests
+         ;; Unfortunately, this doesn't seem to be enough to fix these two
+         ;; tests, but we'll patch this anyway.
+         (add-after 'unpack 'patch-shell-reference
            (lambda _
              (substitute* "tests/test_completion/test_completion.py"
-               (("def test_show_completion")
-                "def _test_show_completion")
-               (("def test_install_completion")
-                "def _test_install_completion"))
-             (substitute* "tests/test_completion/test_completion_install.py"
-               (("def test_completion_install_bash")
-                "def _test_completion_install_bash")
-               (("def test_completion_install_zsh")
-                "def _test_completion_install_zsh")
-               (("def test_completion_install_fish")
-                "def _test_completion_install_fish")
-               (("def test_completion_install_powershell")
-                "def _test_completion_install_powershell"))
-             #t))
+               (("\"bash\"") (string-append "\"" (which "bash") "\""))
+               (("\"/bin/bash\"") (string-append "\"" (which "bash") "\"")))))
          (replace 'check
-           (lambda _
-             (setenv "PYTHONPATH"
-                     (string-append (getcwd) ":"
-                                    (getenv "PYTHONPATH")))
-             (invoke "python" "-m" "pytest" "tests/")
-             #t)))))
-    (propagated-inputs
-     `(("python-click" ,python-click)))
-    (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-pytest" ,python-pytest)
-       ("python-shellingham" ,python-shellingham)))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (setenv "HOME" "/tmp") ; some tests need it
+
+               ;; This is for completion tests
+               (with-output-to-file "/tmp/.bashrc" (lambda _ (display "# dummy")))
+
+               (setenv "GUIX_PYTHONPATH"
+                       (string-append (getcwd) ":"
+                                      (getenv "GUIX_PYTHONPATH")))
+               (let ((disabled-tests (list "test_show_completion"
+                                           "test_install_completion")))
+                 (invoke "python" "-m" "pytest" "tests/"
+                         "-k"
+                         (string-append "not "
+                                        (string-join disabled-tests
+                                                     " and not "))))))))))
+    (propagated-inputs
+     (list python-click))
+    (native-inputs
+     (list python-coverage python-pytest python-shellingham))
     (home-page "https://github.com/tiangolo/typer")
     (synopsis
       "Typer builds CLI based on Python type hints")
@@ -20560,17 +21373,49 @@ Python 3.6+ type hints.")
     ;; MIT license
     (license license:expat)))
 
-(define-public python-typing
+(define-public python-typeguard
   (package
-    (name "python-typing")
-    (version "3.7.4.3")
+    (name "python-typeguard")
+    (version "2.13.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "typeguard" version))
+       (sha256
+        (base32 "1i5qzcyw2715h1g1hvj7fxykck2bkxyshpngjr3nfcx1lf6smv80"))))
+    (build-system python-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (invoke "pytest" "-vv" "-k"
+                        ;; XXX: These fail when installed as a library:
+                        ;; https://github.com/agronholm/typeguard/issues/176
+                        "not usefixtures and not test_cached_module")))))))
+    (native-inputs
+     (list python-mypy python-pytest python-typing-extensions))
+    (home-page "https://github.com/agronholm/typeguard")
+    (synopsis "Run-time type checker for Python")
+    (description
+     "@code{typeguard} provides run-time type checking for functions defined
+with PEP 484 argument (and return) type annotations.")
+    (license license:expat)))
+
+(define-public python2-typing
+  (package
+    (name "python2-typing")
+    (version "3.10.0.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "typing" version))
        (sha256
-        (base32 "1j8wnz8c9s049w9xbf7ssr1dmgg4rz7vdfq7m880srzxhafgp1qi"))))
+        (base32 "0c5il4d68fd4qrm5k3dps70j0xz0n5krj6lhwn9vzpal3whsvd0k"))))
     (build-system python-build-system)
+    (arguments (list #:python python-2))
     (home-page "https://docs.python.org/3/library/typing.html")
     (synopsis "Type hints for Python")
     (description "This is a backport of the standard library @code{typing}
@@ -20581,23 +21426,44 @@ to also be used by static and runtime type checkers, static analyzers, IDEs
 and other tools.")
     (license license:psfl)))
 
-(define-public python2-typing
-  (package-with-python2 python-typing))
-
 (define-public python-typing-extensions
   (package
     (name "python-typing-extensions")
-    (version "3.7.4.3")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "typing_extensions" version))
-       (sha256
-        (base32
-         "0356ljrrplm917dqgpn8wjkw6j3mpp916gwxas7jhc3xc4xhgm4r"))))
+    (version "4.0.1")
+    (source (origin
+              ;; The test script is missing from the PyPI archive.
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/python/typing")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0a35fh5wk9s538x0w3dz95y0avnhd2srzyv9s1a372711n8hdl4p"))))
     (build-system python-build-system)
-    (home-page
-     "https://github.com/python/typing/blob/master/typing_extensions/README.rst")
+    (arguments
+     (list
+      #:tests? #f       ;requires Python's test module, not available in Guix
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'enter-source-directory
+            (lambda _
+              (chdir "typing_extensions")))
+          ;; XXX: PEP 517 manual build copied from python-isort.
+          (replace 'build
+            (lambda _
+              (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (invoke "python" "src/test_typing_extensions.py"))))
+          (replace 'install
+            (lambda _
+              (let ((whl (car (find-files "dist" "\\.whl$"))))
+                (invoke "pip" "--no-cache-dir" "--no-input"
+                        "install" "--no-deps" "--prefix" #$output whl)))))))
+    (native-inputs (list python-pypa-build python-flit-core))
+    (home-page "https://github.com/python/typing/typing_extensions")
     (synopsis "Experimental type hints for Python")
     (description
      "The typing_extensions module contains additional @code{typing} hints not
@@ -20624,13 +21490,13 @@ Included are implementations of:
 (define-public bpython
   (package
     (name "bpython")
-    (version "0.20.1")
+    (version "0.21")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "bpython" version))
        (sha256
-        (base32 "00vmkkc79mlnkyvwww1cr7bpwmf4p61704dhayz6kd0kc203hxvf"))))
+        (base32 "11wlf12nm6ggn9512y4yqs26s8gdgpx0h9ls94k7fsjgjy4rpal8"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -20651,19 +21517,19 @@ Included are implementations of:
                 '("bpython3" "bpython3-curses" "bpython3-urwid" "bpdb3")))
              #t)))))
     (propagated-inputs
-     `(("python-pygments" ,python-pygments)
-       ("python-requests" ,python-requests)
-       ("python-curtsies" ,python-curtsies)
-       ("python-greenlet" ,python-greenlet)
-       ("python-six" ,python-six)
-       ("python-wcwidth" ,python-wcwidth)
-       ;; optional dependencies
-       ("python-urwid" ,python-urwid)   ; for bpython-urwid only
-       ("python-watchdog" ,python-watchdog)
-       ("python-jedi" ,python-jedi)))
-    (native-inputs
-     `(("python-sphinx" ,python-sphinx)
-       ("python-mock" ,python-mock)))
+     (list python-pygments
+           python-requests
+           python-curtsies
+           python-greenlet
+           python-six
+           python-cwcwidth
+           python-pyxdg
+           ;; optional dependencies
+           python-urwid ; for bpython-urwid only
+           python-watchdog
+           python-jedi))
+    (native-inputs
+     (list python-sphinx python-mock python-tox python-wheel))
     (home-page "https://bpython-interpreter.org/")
     (synopsis "Fancy interface to the Python interpreter")
     (description "Bpython is a fancy interface to the Python
@@ -20719,7 +21585,7 @@ file system events on Linux.")
          "14gv8ll3ipqv4kyc2xiy891nrmjl4ic823zfyx8hassagyclyppw"))))
     (build-system python-build-system)
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (arguments
      `(#:python ,python-2
        #:tests? #f
@@ -20809,7 +21675,7 @@ working with iterables.")
         (base32 "0wnp3yqcgx0rpy8dz51vh75lbp2qif67da19zi7m3ca98n887hgb"))))
     (build-system python-build-system)
     (inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://readthedocs.org/projects/latexcodec/")
     (synopsis "Work with LaTeX code in Python")
     (description "Lexer and codec to work with LaTeX code in Python.")
@@ -20827,11 +21693,9 @@ working with iterables.")
         (base32 "070wfcmxrd7xg1si421mi9150gmx2qwx431nwf69sq3hhmgnx080"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (inputs
-     `(("python-latexcodec" ,python-latexcodec)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-six" ,python-six)))
+     (list python-latexcodec python-pyyaml python-six))
     (arguments
      `(#:test-target "nosetests"))
     (home-page "https://pybtex.org/")
@@ -20851,7 +21715,7 @@ in Python.  You can simply type pybtex instead of bibtex.")
        (sha256
         (base32 "09vagxgbq78wvq4xbikmn2hpqqsa2i96kqsmphf7dqynfv0dlsd5"))))
     (build-system python-build-system)
-    (propagated-inputs `(("python-six" ,python-six)))
+    (propagated-inputs (list python-six))
     (home-page "https://github.com/tadeck/onetimepass/")
     (synopsis "One-time password library")
     (description "Python one-time password library for HMAC-based (HOTP) and
@@ -20861,15 +21725,15 @@ time-based (TOTP) passwords.")
 (define-public python-parso
   (package
     (name "python-parso")
-    (version "0.7.1")
+    (version "0.8.2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "parso" version))
        (sha256
-        (base32 "1f9fc99mjx0h2ad4mgsid728nnmw58hvnq3411g8ljlr9dr49fna"))))
+        (base32 "161k8771m7w60qakyvrwf9q62lvakmix7mpfylpy7713qs939f0j"))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (build-system python-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
@@ -20898,7 +21762,7 @@ Parso is also able to list multiple syntax errors in your Python file.")
          "0i11f6z6lix8ixi3vsk6s76zvvpmgrw6zjrcwjm0m4hjdh83vfvf"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/python-trio/async_generator")
     (synopsis "Async generators and context managers for Python 3.5+")
     (description "@code{async_generator} back-ports Python 3.6's native async
@@ -20909,16 +21773,16 @@ generators and Python 3.7's context managers into Python 3.5.")
 (define-public python-async-timeout
   (package
     (name "python-async-timeout")
-    (version "3.0.1")
+    (version "4.0.2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "async-timeout" version))
        (sha256
         (base32
-         "0pscbyr840m7fyfc3r8zv9kgkwdcn9f78p7zsrczciwd09m82g0c"))))
+         "05bbjz16n1a7m1s3lmcwri2x5rc7hnh6f2hdr2lbflnv1mjf2qr1"))))
     (build-system python-build-system)
-    (home-page "https://github.com/aio-libs/async_timeout/")
+    (home-page "https://github.com/aio-libs/async-timeout")
     (synopsis "Timeout context manager for asyncio programs")
     (description "@code{async-timeout} provides a timeout timeout context
 manager compatible with @code{asyncio}.")
@@ -20973,9 +21837,9 @@ Glob2 currently based on the glob code from Python 3.3.1.")
          "0pd9by719qh882hqs6xpby61sn1x5h98hms5p2p8yqnycrf1s0h2"))))
     (build-system python-build-system)
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (propagated-inputs
-     `(("python-gevent" ,python-gevent)))
+     (list python-gevent))
     (home-page "https://gehrcke.de/gipc/")
     (synopsis "Child process management in the context of gevent")
     (description "Usage of Python's multiprocessing package in a
@@ -20997,7 +21861,7 @@ gevent-powered application.")
          "0wwlbifcbpzy3wfv6yzsxncarsngzizmmxbn6cy5gazlcq7h4k5x"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-wcwidth" ,python-wcwidth)))
+     (list python-wcwidth))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -21071,14 +21935,13 @@ path components.")
                (("setup\\(")
                 "setup(\n    test_suite=\"test\",")))))))
     (propagated-inputs
-     `(("python-beautifultable" ,python-beautifultable)
-       ("python-dateutil" ,python-dateutil)
-       ("python-gitpython" ,python-gitpython)
-       ("python-globber" ,python-globber)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-sqlalchemy" ,python-sqlalchemy)
-       ("python-sqlalchemy-utils"
-        ,python-sqlalchemy-utils)))
+     (list python-beautifultable
+           python-dateutil
+           python-gitpython
+           python-globber
+           python-matplotlib
+           python-sqlalchemy
+           python-sqlalchemy-utils))
     (home-page "https://github.com/asharov/git-hammer")
     (synopsis "Provide statistics for git repositories")
     (description
@@ -21110,7 +21973,7 @@ commit, but it also includes some other useful statistics.")
                   (string-append "'" fuse "/lib/libfuse.so'")))
                #t))))))
     (propagated-inputs
-     `(("fuse" ,fuse)))
+     (list fuse))
     (home-page "https://github.com/fusepy/fusepy")
     (synopsis "Simple ctypes bindings for FUSE")
     (description "Python module that provides a simple interface to FUSE and
@@ -21143,9 +22006,9 @@ MacFUSE.  The binding is created using the standard @code{ctypes} library.")
                   (string-append "\"" fuse "/lib/libfuse.so\""))))
              #t)))))
     (inputs
-     `(("fuse" ,fuse)))
+     (list fuse))
     (propagated-inputs
-     `(("python-paramiko" ,python-paramiko)))
+     (list python-paramiko))
     (home-page "https://github.com/rianhunter/fusepyng")
     (synopsis "Simple ctypes bindings for FUSE")
     (description "@code{fusepyng} is a Python module that provides a simple
@@ -21153,20 +22016,39 @@ interface to FUSE on various operating systems.  It's just one file and is
 implemented using @code{ctypes}.")
     (license license:isc)))
 
+(define-public python-update-checker
+  (package
+    (name "python-update-checker")
+    (version "0.18.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "update-checker" version))
+       (sha256
+        (base32 "04yb5a9mi45ax50m2m0ih6gdvkk1j7gfmy83dd58i1f59axlabba"))))
+    (build-system python-build-system)
+    (propagated-inputs (list python-requests))
+    (native-inputs (list python-black python-flake8 python-pytest))
+    (home-page "https://github.com/bboe/update_checker")
+    (synopsis "Python module that will check for package updates")
+    (description "This package provides a Python module that will check for
+package updates.")
+    (license license:bsd-2)))
+
 (define-public python-userspacefs
   (package
     (name "python-userspacefs")
-    (version "2.0.3")
+    (version "2.0.4")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "userspacefs" version))
         (sha256
          (base32
-          "1v6saf62ml3j63adalvlkj4iavxjbsbapl20b21mn73p7kvn4ayf"))))
+          "06f2gsiypas270nqfjir4wwjlpkjp097pm6zchc7k20ggg32gv1k"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-fusepyng" ,python-fusepyng)))
+     (list python-fusepyng))
     (home-page "https://github.com/rianhunter/userspacefs")
     (synopsis "User-space file systems for Python")
     (description
@@ -21196,8 +22078,7 @@ user-space file systems in Python.")
                (("pytest < 5") "pytest < 7"))
              ;; We don't care about a coverage report.
              (substitute* "test/requirements.txt"
-               (("coverage.*") "coverage\n"))
-             #t))
+               (("coverage.*") "coverage\n"))))
          (replace 'check
            (lambda* (#:key tests? #:allow-other-keys)
              (when tests?
@@ -21205,19 +22086,11 @@ user-space file systems in Python.")
                (delete-file "test/test_js_client.py")
                (delete-file "test/test_tsd_types.py")
                (delete-file "test/test_python_gen.py")
-               (setenv "PYTHONPATH"
-                       (string-append (getcwd) ":"
-                                      (getenv "PYTHONPATH")))
-               (invoke "pytest"))
-             #t)))))
+               (invoke "pytest")))))))
     (propagated-inputs
-     `(("python-ply" ,python-ply)
-       ("python-six" ,python-six)))
+     (list python-ply python-six))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-coverage python-mock python-pytest python-pytest-runner))
     (home-page "https://github.com/dropbox/stone")
     (synopsis "Official Api Spec Language for Dropbox")
     (description
@@ -21287,9 +22160,7 @@ inferring type information using compile-time introspection.")
     (arguments
      `(#:tests? #f)) ;requires online data
     (propagated-inputs
-     `(("python-appdirs" ,python-appdirs)
-       ("python-packaging" ,python-packaging)
-       ("python-requests" ,python-requests)))
+     (list python-appdirs python-packaging python-requests))
     (home-page "https://github.com/fatiando/pooch")
     (synopsis "Manage your Python library's sample data files")
     (description
@@ -21311,10 +22182,9 @@ and corruption checks.")
          "1vzmz1xh38b84dv0f4hlp7arwmx8wjlih6lf964bpy8dnyk6s5rs"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-monotonic" ,python-monotonic)
-       ("python-six" ,python-six)))
+     (list python-monotonic python-six))
     (native-inputs
-     `(("python-testtools" ,python-testtools)))
+     (list python-testtools))
     (home-page "https://github.com/harlowja/fasteners")
     (synopsis "Python package that provides useful locks")
     (description
@@ -21341,8 +22211,7 @@ and corruption checks.")
          "1yp2jaxg3v86pia0q512dg3hz6s9y5vzdivsgrba1kds05ial14g"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-requests" ,python-requests)
-       ("python-six" ,python-six)))
+     (list python-requests python-six))
     (home-page
      "https://github.com/dashea/requests-file")
     (synopsis "File transport adapter for Requests")
@@ -21372,14 +22241,16 @@ library to allow local file system access via @code{file://} URLs.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
+         ;; system-error "utime" "~A" ("No such file or directory")
+         (delete 'ensure-no-mtimes-pre-1980)
          (replace 'check
-           (lambda _
-             (invoke "pytest" "-vv"))))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "pytest" "-vv")))))))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-pytest" ,python-pytest)))
+     (list python-coverage python-pytest))
     (propagated-inputs
-     `(("python-editdistance" ,python-editdistance)))
+     (list python-editdistance))
     (home-page "https://github.com/chriskuehl/identify")
     (synopsis "File identification library for Python")
     (description
@@ -21401,12 +22272,9 @@ identifying what the file is.")
          "1d5s8v6kpsgazyahflhji1cfdcf89rv7l7z55v774bhzvcjp2y99"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-responses" ,python-responses)))
+     (list python-pytest python-responses))
     (propagated-inputs
-     `(("python-idna" ,python-idna)
-       ("python-requests" ,python-requests)
-       ("python-requests-file" ,python-requests-file)))
+     (list python-idna python-requests python-requests-file))
     (home-page
      "https://github.com/john-kurkowski/tldextract")
     (synopsis
@@ -21445,12 +22313,9 @@ Public Suffix List's private domains as well.")
                ;; This test fails. It tries to open a network socket.
                (invoke "pytest" "-vv" "-k" "not test_error_message")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-pytest python-pytest-runner))
     (inputs
-     `(("python-argcomplete" ,python-argcomplete)
-       ("python-colorama" ,python-colorama)
-       ("python-termcolor" ,python-termcolor)))
+     (list python-argcomplete python-colorama python-termcolor))
     (home-page "https://github.com/tldr-pages/tldr-python-client")
     (synopsis "Python command-line client for tldr pages")
     (description "This package provides the @code{tldr} command allowing users
@@ -21481,9 +22346,7 @@ effort to simplify the man pages with practical examples.")
              ;; This test fails. It tries to open a network socket.
              (invoke "pytest" "-vv" "-k" "not test_smoke"))))))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)))
+     (list python-coverage python-mock python-pytest))
     (home-page "https://ekalinin.github.io/nodeenv/")
     (synopsis "Create isolated node.js environments")
     (description
@@ -21506,7 +22369,7 @@ environments.")
          "0wkbwz208j8nfrsmzmclvxg22ymknn0mlz76wbdza9k2bx2zja6l"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-requests" ,python-requests)))
+     (list python-requests))
     (home-page
      "https://github.com/Bemmu/PyNamecheap")
     (synopsis
@@ -21533,11 +22396,8 @@ environments.")
     (arguments
      `(#:tests? #f))                    ;requires internet access
     (propagated-inputs
-     `(("python-future" ,python-future)
-       ("python-pynamecheap" ,python-pynamecheap)
-       ("python-requests" ,python-requests)
-       ("python-tldextract" ,python-tldextract)
-       ("python-urllib3" ,python-urllib3)))
+     (list python-future python-pynamecheap python-requests
+           python-tldextract python-urllib3))
     (home-page "https://github.com/AnalogJ/lexicon")
     (synopsis
      "Manipulate DNS records on various DNS providers")
@@ -21573,9 +22433,7 @@ Let's Encrypt.")
            (lambda _
              (invoke "pytest" "-vv"))))))
     (native-inputs
-     `(("python-covdefaults" ,python-covdefaults)
-       ("python-coverage" ,python-coverage)
-       ("python-pytest" ,python-pytest)))
+     (list python-covdefaults python-coverage python-pytest))
     (home-page "https://github.com/asottile/cfgv")
     (synopsis "Configuration validation library")
     (description
@@ -21608,14 +22466,14 @@ validation testing and application logic.")
 (define-public python-numba
   (package
     (name "python-numba")
-    (version "0.51.2")
+    (version "0.54.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "numba" version))
        (sha256
         (base32
-         "0s0777m8kq4l96i88zj78np7283v1n4878qfc1gvzb8l45bmkg8n"))))
+         "0gzl2hz9azav9mny4mga19096rrnpw5816r1h4iwrvb4r01wipzr"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -21623,24 +22481,27 @@ validation testing and application logic.")
          (add-after 'unpack 'disable-proprietary-features
            (lambda _
              (setenv "NUMBA_DISABLE_HSA" "1")
-             (setenv "NUMBA_DISABLE_CUDA" "1")
-             #t))
+             (setenv "NUMBA_DISABLE_CUDA" "1")))
+         (add-after 'unpack 'disable-failing-tests
+           (lambda _
+             ;; This one test fails because a deprecation warning is printed.
+             (substitute* "numba/tests/test_import.py"
+               (("def test_no_accidental_warnings")
+                "def disabled_test_no_accidental_warnings"))))
          (replace 'check
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (add-installed-pythonpath inputs outputs)
-             ;; Something is wrong with the PYTHONPATH when running the
-             ;; tests from the build directory, as it complains about not being
-             ;; able to import certain modules.
-             (with-directory-excursion "/tmp"
-               (setenv "HOME" (getcwd))
-               (invoke "python3" "-m" "numba.runtests" "-v" "-m")))))))
+           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               ;; Something is wrong with the PYTHONPATH when running the
+               ;; tests from the build directory, as it complains about not being
+               ;; able to import certain modules.
+               (with-directory-excursion "/tmp"
+                 (setenv "HOME" (getcwd))
+                 (invoke "python3" "-m" "numba.runtests" "-v" "-m"))))))))
     (propagated-inputs
-     `(("python-llvmlite" ,python-llvmlite)
-       ("python-numpy" ,python-numpy)
-       ("python-singledispatch" ,python-singledispatch)))
+     (list python-llvmlite python-numpy python-singledispatch))
     (native-inputs                      ;for tests
-     `(("python-jinja2" ,python-jinja2)
-       ("python-pygments" ,python-pygments)))
+     (list python-jinja2 python-pygments))
     (home-page "https://numba.pydata.org")
     (synopsis "Compile Python code using LLVM")
     (description "Numba gives you the power to speed up your applications with
@@ -21664,14 +22525,49 @@ tool).")
        (uri (pypi-uri "numcodecs" version))
        (sha256
         (base32
-         "0kbfr8pl3x9glsypbq8hzim003f16ml1b1cvgrh4w1sdvgal6j7g"))))
+         "0kbfr8pl3x9glsypbq8hzim003f16ml1b1cvgrh4w1sdvgal6j7g"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           (delete-file-recursively "c-blosc")
+           (for-each delete-file '("numcodecs/blosc.c"
+                                   "numcodecs/compat_ext.c"
+                                   "numcodecs/lz4.c"
+                                   "numcodecs/vlen.c"
+                                   "numcodecs/zstd.c"))))))
     (build-system python-build-system)
+    (arguments
+     `(#:tests? #false ; TODO: unclear why numcodecs.* are not found
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'disable-avx2
+           (lambda _
+             (setenv "DISABLE_NUMCODECS_AVX2" "1")))
+         (add-after 'unpack 'unbundle
+           (lambda _
+             (substitute* "setup.py"
+               (("sources=sources \\+ blosc_sources,")
+                "sources=sources,")
+               (("extra_compile_args=extra_compile_args")
+                "extra_compile_args=list(base_compile_args)")
+               (("'numcodecs.zstd',")
+                "'numcodecs.zstd', libraries=['zstd'], ")
+               (("'numcodecs.lz4',")
+                "'numcodecs.lz4', libraries=['lz4'], ")
+               (("'numcodecs.blosc',")
+                "'numcodecs.blosc', libraries=['blosc'], "))))
+         (replace 'check
+           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "pytest" "-vv")))))))
+    (inputs
+     (list c-blosc lz4 zlib
+           `(,zstd "lib")))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-msgpack" ,python-msgpack)))
+     (list python-numpy python-msgpack))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-cython python-pytest python-setuptools-scm))
     (home-page "https://github.com/zarr-developers/numcodecs")
     (synopsis "Buffer compression and transformation codecs")
     (description
@@ -21722,13 +22618,10 @@ codecs for use in data storage and communication applications.")
              (invoke "pytest" "-vv" "-k" "not lmdb")
              #t)))))
     (propagated-inputs
-     `(("python-asciitree" ,python-asciitree)
-       ("python-fasteners" ,python-fasteners)
-       ("python-numcodecs" ,python-numcodecs)
-       ("python-numpy" ,python-numpy)))
+     (list python-asciitree python-fasteners python-numcodecs
+           python-numpy))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-pytest python-setuptools-scm))
     (home-page "https://github.com/zarr-developers/zarr-python")
     (synopsis "Chunked, compressed, N-dimensional arrays for Python")
     (description
@@ -21779,20 +22672,17 @@ N-dimensional arrays for Python.")
                          (find-files "dist" "\\.whl$")))
              #t)))))
     (propagated-inputs
-     `(("python-h5py" ,python-h5py)
-       ("python-importlib-metadata" ,python-importlib-metadata)
-       ("python-natsort" ,python-natsort)
-       ("python-numcodecs" ,python-numcodecs)
-       ("python-packaging" ,python-packaging)
-       ("python-pandas" ,python-pandas)
-       ("python-scipy" ,python-scipy)
-       ("python-zarr" ,python-zarr)))
-    (native-inputs
-     `(("python-joblib" ,python-joblib)
-       ("python-pytest" ,python-pytest)
-       ("python-toml" ,python-toml)
-       ("python-flit" ,python-flit)
-       ("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-h5py
+           python-importlib-metadata
+           python-natsort
+           python-numcodecs
+           python-packaging
+           python-pandas
+           python-scipy
+           python-zarr))
+    (native-inputs
+     (list python-joblib python-pytest python-toml python-flit
+           python-setuptools-scm))
     (home-page "https://github.com/theislab/anndata")
     (synopsis "Annotated data for data analysis pipelines")
     (description "Anndata is a package for simple (functional) high-level APIs
@@ -21822,7 +22712,7 @@ object-oriented library such as @code{scikit-learn}.")
                (invoke "nosetests" "-v"))
              #t)))))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (home-page "https://pypi.org/project/dill/")
     (synopsis "Serialize all of Python")
     (description "Dill extends Python's @code{pickle} module for serializing
@@ -21869,7 +22759,7 @@ the saved state of the original interpreter session.")
              (invoke "python" "-m" "multiprocess.tests")
              #t)))))
     (propagated-inputs
-     `(("python-dill" ,python-dill)))
+     (list python-dill))
     (home-page "https://pypi.org/project/multiprocess/")
     (synopsis "Multiprocessing and multithreading in Python")
     (description
@@ -21881,14 +22771,14 @@ library's @code{threading} module.")
 (define-public python-toolz
   (package
     (name "python-toolz")
-    (version "0.11.1")
+    (version "0.11.2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "toolz" version))
        (sha256
         (base32
-         "1grz3zvw5ixwqqlbv0n7j11mlcxb66cirh5i9x9zw8kqy0hpk967"))))
+         "0cxwlh8dz8gq0l0bzchjnqqwhdp261nfd958ppqm518k2mg2scbb"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -21900,7 +22790,7 @@ library's @code{threading} module.")
                (invoke "python" "-m" "pytest" "--doctest-modules"
                        "--pyargs" "toolz")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/pytoolz/toolz/")
     (synopsis "List processing tools and functional utilities")
     (description
@@ -21911,22 +22801,25 @@ functions, and dictionaries.")
 (define-public python-cytoolz
   (package
     (name "python-cytoolz")
-    (version "0.9.0.1")
+    (version "0.11.2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "cytoolz" version))
        (sha256
         (base32
-         "1r80p88hm3f3r4zpixzr047y5hw4bzy41m4xywnhycda83x0dk44"))))
+         "1d12mgaippxxhn24w2hj0my3aqkx80fks5g4wzfdsvl0acqnc8za"))
+       (modules '((guix build utils)))
+       (snippet
+        '(for-each delete-file (find-files "cytoolz" "\\.c$")))))
     (build-system python-build-system)
     ;; FIXME: tests fail with "module 'cytoolz.curried' has no attribute
     ;; 'exceptions'"
     (arguments '(#:tests? #f))
     (propagated-inputs
-     `(("python-toolz" ,python-toolz)))
+     (list python-toolz))
     (native-inputs
-     `(("python-cython" ,python-cython)))
+     (list python-cython))
     (home-page "https://github.com/pytoolz/cytoolz")
     (synopsis "High performance functional utilities")
     (description
@@ -21935,6 +22828,22 @@ main differences are that @code{cytoolz} is faster and cytoolz offers a C API
 that is accessible to other projects developed in Cython.")
     (license license:bsd-3)))
 
+;; python-cooler doesn't work with 0.11 yet
+(define-public python-cytoolz-for-cooler
+  (package
+    (inherit python-cytoolz)
+    (version "0.10.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "cytoolz" version))
+       (sha256
+        (base32
+         "0p4a9nadsy1337gy2cnb5yanbn03j3zm6d9adyqad9bk3nlbpxc2"))
+       (modules '((guix build utils)))
+       (snippet
+        '(for-each delete-file (find-files "cytoolz" "\\.c$")))))))
+
 (define-public python-sortedcollections
   (package
     (name "python-sortedcollections")
@@ -21948,7 +22857,7 @@ that is accessible to other projects developed in Cython.")
          "1kfabpnjyjm5ml2zspry9jy3xq49aybchgaa4ahic2jqdjfn1sfq"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-sortedcontainers" ,python-sortedcontainers)))
+     (list python-sortedcontainers))
     (arguments '(#:tests? #f))  ; Tests not included in release tarball.
     (home-page "http://www.grantjenks.com/docs/sortedcollections/")
     (synopsis "Python Sorted Collections")
@@ -22025,24 +22934,15 @@ data.")
     (arguments
      '(#:phases
        (modify-phases %standard-phases
-         (add-before 'check 'do-not-override-PYTHONPATH
-           (lambda _
-             ;; Append to PYTHONPATH instead of overriding it so
-             ;; that dependencies from Guix can be found.
-             (substitute* "tests/testutils.py"
-               (("env\\['PYTHONPATH'\\] = pythonpath")
-                "env['PYTHONPATH'] += os.pathsep + pythonpath"))))
          (replace 'check
            (lambda* (#:key tests? #:allow-other-keys)
              (if tests?
                  (invoke "pytest" "-s" "-vv")
                  (format #t "test suite not run~%")))))))
     (native-inputs
-     `(;; For tests.
-       ("python-cloudpickle-testpkg" ,python-cloudpickle-testpkg)
-       ("python-psutil" ,python-psutil)
-       ("python-pytest" ,python-pytest)
-       ("python-tornado" ,python-tornado-6)))
+     (list ;; For tests.
+           python-cloudpickle-testpkg python-psutil python-pytest
+           python-tornado-6))
     (home-page "https://github.com/cloudpipe/cloudpickle")
     (synopsis "Extended pickling support for Python objects")
     (description
@@ -22113,7 +23013,7 @@ they use the same path.")
     ;; TypeError: calling <function run at 0x7ffff2568d90> returned None, not a test
     (arguments '(#:tests? #f))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (home-page "https://github.com/blosc/python-blosc")
     (synopsis "Python wrapper for the Blosc data compressor library")
     (description "Blosc is a high performance compressor optimized for binary
@@ -22144,12 +23044,12 @@ This Python package wraps the Blosc library.")
          "1sy3vdfyyx3bc5590zb7gwpsmimqz8m992x9hsydq8nmhixqjrxa"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-blosc" ,python-blosc)
-       ("python-locket" ,python-locket)
-       ("python-numpy" ,python-numpy)
-       ("python-pandas" ,python-pandas)
-       ("python-pyzmq" ,python-pyzmq)
-       ("python-toolz" ,python-toolz)))
+     (list python-blosc
+           python-locket
+           python-numpy
+           python-pandas
+           python-pyzmq
+           python-toolz))
     (home-page "https://github.com/dask/partd/")
     (synopsis "Appendable key-value storage")
     (description "Partd stores key-value pairs.  Values are raw bytes.  We
@@ -22178,41 +23078,45 @@ behavior and not have to worry about the specific internal implementation
 decisions with any given backend.")
     (license license:bsd-3)))
 
+;; Note: Remember to update python-distributed when updating dask.
 (define-public python-dask
   (package
     (name "python-dask")
-    (version "2021.7.1")
+    (version "2021.11.2")
     (source
      (origin
-       (method url-fetch)
-       (uri (pypi-uri "dask" version))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/dask/dask/")
+             (commit "5a8275dd53193b47457cdfadc0e2356ea3eb6ccd")))
+       (file-name (git-file-name name version))
        (sha256
-        (base32 "131c1bp193d7wp4gx09j6wark1c322c8sqjy22i0jaafl5rqfbz7"))))
+        (base32 "0h8w7c03mn6s2mmwbqd2sqay3k4vaqiwlsbvliziggw28042zfw2"))
+       (snippet
+        ;; Delete generated copy of python-versioneer.  We recreate it below.
+        '(delete-file "versioneer.py"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'disable-broken-tests
+         (add-after 'unpack 'versioneer
            (lambda _
-             ;; This test is marked as xfail when pytest-xdist is used.
-             (substitute* "dask/tests/test_threaded.py"
-               (("def test_interrupt\\(\\)" m)
-                (string-append "@pytest.mark.skip(reason=\"Disabled by Guix\")\n"
-                               m)))))
+             (invoke "versioneer" "install")))
          (replace 'check
-           (lambda _ (invoke "pytest" "-vv"))))))
-    (propagated-inputs
-     `(("python-cloudpickle" ,python-cloudpickle)
-       ("python-fsspec" ,python-fsspec)
-       ("python-numpy" ,python-numpy)
-       ("python-packaging" ,python-packaging)
-       ("python-pandas" ,python-pandas)
-       ("python-partd" ,python-partd)
-       ("python-toolz" ,python-toolz)
-       ("python-pyyaml" ,python-pyyaml)))
-    (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests? (invoke "pytest" "-vv")))))))
+    (propagated-inputs
+     (list python-cloudpickle
+           python-fsspec
+           python-numpy
+           python-packaging
+           python-pandas
+           python-partd
+           python-toolz
+           python-pyyaml))
+    (native-inputs
+     (list python-pytest python-pytest-runner python-pytest-rerunfailures
+           python-versioneer))
     (home-page "https://github.com/dask/dask/")
     (synopsis "Parallel computing with task scheduling")
     (description
@@ -22221,7 +23125,7 @@ consists of two components: dynamic task scheduling optimized for computation,
 and large data collections like parallel arrays, dataframes, and lists that
 extend common interfaces like NumPy, Pandas, or Python iterators to
 larger-than-memory or distributed environments.  These parallel collections
-run on top of the dynamic task schedulers. ")
+run on top of the dynamic task schedulers.")
     (license license:bsd-3)))
 
 (define-public python-ilinkedlist
@@ -22236,8 +23140,8 @@ run on top of the dynamic task schedulers. ")
         (base32
          "0nrw4sr3afldrp7073hvc0rgdz282s0l819jdmj1i6nn05v33h0l"))))
     (build-system python-build-system)
-    (native-inputs `(("python-pytest" ,python-pytest)))
-    (inputs `(("python" ,python)))
+    (native-inputs (list python-pytest))
+    (inputs (list python))
     (home-page "https://github.com/luther9/ilinkedlist-py")
     (synopsis "Immutable linked list library")
     (description
@@ -22318,7 +23222,7 @@ on regular expressions.")
          "1kqipkbdaw5s1xg0gi29awm03vp1x8dz24pjidgxagvkvrjpzhi7"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://github.com/rholder/retrying")
     (synopsis "Library for adding retry behavior")
     (description "Retrying is a general-purpose retrying library to simplify
@@ -22351,14 +23255,14 @@ Features:
      ;; attribute 'empty_template_setup'".
      `(#:tests? #false))
     (propagated-inputs
-     `(("python-cfgv" ,python-cfgv)
-       ("python-identify" ,python-identify)
-       ("python-importlib-metadata" ,python-importlib-metadata)
-       ("python-importlib-resources" ,python-importlib-resources)
-       ("python-nodeenv" ,python-nodeenv)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-toml" ,python-toml)
-       ("python-virtualenv" ,python-virtualenv)))
+     (list python-cfgv
+           python-identify
+           python-importlib-metadata
+           python-importlib-resources
+           python-nodeenv
+           python-pyyaml
+           python-toml
+           python-virtualenv))
     (home-page "https://github.com/pre-commit/pre-commit")
     (synopsis "Framework for managing multi-language pre-commit hooks")
     (description
@@ -22369,14 +23273,14 @@ multi-language pre-commit hooks.")
 (define-public python-precis-i18n
   (package
     (name "python-precis-i18n")
-    (version "1.0.0")
+    (version "1.0.3")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "precis_i18n" version))
        (sha256
         (base32
-         "0gjhvwd8aifx94rl1ag08vlmndyx2q3fkyqb0c4i46x3p2bc2yi2"))))
+         "1qfb78zpx565vqkg0xhx75pna9sc35m370vpcz82982c8ix3ypyz"))))
     (build-system python-build-system)
     (home-page "https://github.com/byllyfish/precis_i18n")
     (synopsis "Implementation of the PRECIS framework")
@@ -22398,7 +23302,7 @@ RFC 8265 and RFC 8266.")
          "1mp9lk0b2qa37b7y6ak4lvf6ifw2ylyy6bkf9ik77md3j4xrwlc7"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://github.com/abseil/abseil-py")
     (synopsis "Abseil Python common libraries")
     (description
@@ -22442,8 +23346,7 @@ source via the Abstract Syntax Tree.")
     (build-system python-build-system)
     (arguments '(#:tests? #f))          ; there are none
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-wheel" ,python-wheel)))
+     (list python-six python-wheel))
     (home-page "https://github.com/simonpercivall/astunparse")
     (synopsis "AST unparser for Python")
     (description "This package provides an AST unparser for Python.  It is a
@@ -22454,16 +23357,16 @@ distribution.")
 (define-public python-gast
   (package
     (name "python-gast")
-    (version "0.3.3")
+    (version "0.5.2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "gast" version))
        (sha256
-        (base32 "0mrvvfzqafj1wzd0xxfmjf4vphnlxypbhpic1m283aj9i8lfz0dq"))))
+        (base32 "1xv77kzghiqfm4fnvlv0p878ma152dvcfkly3jij89lqigxcw7zq"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-astunparse" ,python-astunparse)))
+     (list python-astunparse))
     (home-page "https://pypi.org/project/gast/")
     (synopsis "Generic Python AST that abstracts the underlying Python version")
     (description
@@ -22485,7 +23388,7 @@ module.")
          "08nlnydddfp1jj0cdmshvld1irzngbp3dij928wqsg9ziklm6mw9"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-babel" ,python-babel)))
+     (list python-babel))
     (home-page "https://github.com/dahlia/wikidata")
     (synopsis "Wikidata client library")
     (description
@@ -22507,7 +23410,7 @@ module.")
          "1m9aa4qnyj21lbq4sbvmv1vcz7zksss4rz37ddf2hxv4hk8b547w"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (home-page "https://github.com/gnublade/doctest-ignore-unicode")
     (synopsis "Ignore Unicode literal prefixes in doctests")
     (description
@@ -22548,10 +23451,7 @@ class in a @acronym{DRY, Don't Repeat Yourself} way.")
     (arguments
      `(#:tests? #f)) ; No tests exist.
     (propagated-inputs
-     `(("python-extras" ,python-extras)
-       ("python-arrow" ,python-arrow)
-       ("python-numpy" ,python-numpy)
-       ("python-ruamel.yaml" ,python-ruamel.yaml)))
+     (list python-extras python-arrow python-numpy python-ruamel.yaml))
     (home-page "https://construct.readthedocs.io")
     (synopsis "Declarative and symmetrical parser and builder for binary data")
     (description
@@ -22582,12 +23482,9 @@ make your work easier.")
              (add-installed-pythonpath inputs outputs)
              (invoke "pytest" "-vv"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-asyncio" ,python-pytest-asyncio)))
+     (list python-pytest python-pytest-cov python-pytest-asyncio))
     (propagated-inputs
-     `(("python-async-generator" ,python-async-generator)
-       ("python-attrs" ,python-attrs)))
+     (list python-async-generator python-attrs))
     (home-page "https://github.com/python-trio/outcome")
     (synopsis "Capture the outcome of Python function calls")
     (description
@@ -22599,13 +23496,13 @@ project.")
 (define-public python-trio
   (package
     (name "python-trio")
-    (version "0.17.0")
+    (version "0.19.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "trio" version))
        (sha256
-        (base32 "0zcxirpdvvl54pbfkgw7vz984879xwvdygqfpggnam24is2zjp78"))))
+        (base32 "1qgg4zhca81dxc1nlmcr5pl1bclmvdp3niqbyslwxs65bs732pl9"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -22616,39 +23513,43 @@ project.")
              (setenv "HOME" "/tmp")
              #t))
          (replace 'check
-           (lambda _
-             (invoke "pytest" "-vv" "-k"
-                     (string-append
-                     ;; This test times out.
-                     "not test_ki_protection_works"
-                     ;; Assertion errors.
-                     " and not test_guest_mode_ki"
-                     " and not test_run_in_trio_thread_ki"
-                     ;; These try to raise KeyboardInterrupt which does not work
-                     ;; in the build environment.
-                     " and not test_ki_self"
-                     " and not test_ki_wakes_us_up"
-                     ;; Failure in name resolution.
-                     " and not test_getnameinfo"
-                     " and not test_SocketType_resolve"
-                     ;; OSError: protocol not found.
-                     " and not test_getprotobyname")))))))
-    (native-inputs
-     `(("python-astor" ,python-astor)
-       ("python-ipython" ,python-ipython)
-       ("python-jedi" ,python-jedi)
-       ("python-pylint" ,python-pylint)
-       ("python-pyopenssl" ,python-pyopenssl)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-trustme" ,python-trustme)))
-    (propagated-inputs
-     `(("python-attrs" ,python-attrs)
-       ("python-idna" ,python-idna)
-       ("python-outcome" ,python-outcome)
-       ("python-sniffio" ,python-sniffio)
-       ("python-sortedcontainers"
-        ,python-sortedcontainers)))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "pytest" "-vv" "-k"
+                       (string-append
+                         ;; This test times out.
+                         "not test_ki_protection_works"
+                         ;; Assertion errors.
+                         " and not test_guest_mode_ki"
+                         " and not test_run_in_trio_thread_ki"
+                         " and not test_simple_cancel_scope_usage_doesnt_create_cyclic_garbage"
+                         " and not test_nursery_cancel_doesnt_create_cyclic_garbage"
+                         " and not test_locals_destroyed_promptly_on_cancel"
+                         ;; These try to raise KeyboardInterrupt which does not work
+                         ;; in the build environment.
+                         " and not test_ki_self"
+                         " and not test_ki_wakes_us_up"
+                         ;; Failure in name resolution.
+                         " and not test_getnameinfo"
+                         " and not test_SocketType_resolve"
+                         ;; OSError: protocol not found.
+                         " and not test_getprotobyname"))))))))
+    (native-inputs
+     (list python-astor
+           python-ipython
+           python-jedi
+           python-pylint
+           python-pyopenssl
+           python-pytest
+           python-pytest-cov
+           python-trustme))
+    (propagated-inputs
+     (list python-async-generator
+           python-attrs
+           python-idna
+           python-outcome
+           python-sniffio
+           python-sortedcontainers))
     (home-page "https://github.com/python-trio/trio")
     (synopsis "Friendly Python library for async concurrency and I/O")
     (description
@@ -22676,15 +23577,10 @@ programs that do multiple things at the same time with parallelized I/O.")
            (lambda _
              (invoke "pytest" "-vv"))))))
     (native-inputs
-     `(("python-attrs" ,python-attrs)
-       ("python-pytest" ,python-pytest)))
+     (list python-attrs python-pytest))
     (propagated-inputs
-     `(("python-mypy" ,python-mypy)
-       ("python-mypy-extensions"
-        ,python-mypy-extensions)
-       ("python-trio" ,python-trio)
-       ("python-typing-extensions"
-        ,python-typing-extensions)))
+     (list python-mypy python-mypy-extensions python-trio
+           python-typing-extensions))
     (home-page "https://github.com/python-trio/trio-typing")
     (synopsis "Static type checking support for Trio and related projects")
     (description
@@ -22740,8 +23636,7 @@ and dates in \"human readable\" forms.  For example, it would display
           "1zmpdph6zddgrnkkcykh6qk5s46l7s5mzfqrh82m4b5iffn61qv7"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-twisted" ,python-twisted)
-       ("python-six" ,python-six)))
+     (list python-twisted python-six))
     (home-page "https://github.com/crossbario/txaio")
     (synopsis "Compatibility layer between Python asyncio and Twisted")
     (description "Txaio provides a compatibility layer between the Python
@@ -22761,7 +23656,7 @@ and dates in \"human readable\" forms.  For example, it would display
          "14zvz51gzf9i1i3d1sj363ba4rksl6lcf4lz1arl8hpqgcbir8r3"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (home-page "https://github.com/brentp/toolshed/")
     (synopsis "Collection of modules and functions for working with data")
     (description "This is a collection of well-tested, simple modules and
@@ -22781,7 +23676,7 @@ functions that aim to reduce boilerplate when working with data.")
          "1rxn6snn0r32r07g45hdjhh8aa1xzx6fjrm8g62d8vzp46z7rzrp"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (home-page "https://github.com/spotify/annoy/")
     (synopsis "Approximate nearest neighbors library")
     (description
@@ -22803,8 +23698,7 @@ processes may share the same data.")
                 "0r79cx4v2dw4hzr0annkkxxis46c8hivq61sr39z6p7lcjsbk1ki"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-natsort" ,python-natsort)))
+     (list python-dateutil python-natsort))
     (home-page "https://github.com/kiorky/croniter")
     (synopsis "Iterate datetime objects with cron-like syntax")
     (description
@@ -22827,7 +23721,7 @@ format.")
      ;; Comptability tests fail so they are disabled.
      `(#:tests? #f))
     (inputs
-     `(("python-dateutil" ,python-dateutil)))
+     (list python-dateutil))
     (home-page "https://gitlab.com/doctormo/python-crontab/")
     (synopsis "Module for reading and writing crontab files")
     (description "This Python module can read, write crontab files, and
@@ -22847,7 +23741,7 @@ access the system cron automatically and simply using a direct API.")
             "074anvhyjgsv2iby2ql1ixfvjgmhnvcwjbdz8gk70xzkzcm1fx5q"))))
     (build-system python-build-system)
     (home-page "https://www.joachim-bauch.de/projects/pylzma/")
-    (synopsis "Python bindings for the LZMA library by Igor Pavlov.")
+    (synopsis "Python bindings for the LZMA library by Igor Pavlov")
     (description "This package provides Python bindings for the LZMA library
 by Igor Pavlov.")
     (license license:lgpl2.1+)))
@@ -22873,7 +23767,7 @@ by Igor Pavlov.")
          (replace 'check
            (lambda _ (invoke "nosetests"))))))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list 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
@@ -22883,34 +23777,40 @@ enumeration library in Python.")
 (define-public python-zeroconf
   (package
     (name "python-zeroconf")
-    (version "0.28.8")
+    (version "0.38.1")
     (source
      (origin
-       (method url-fetch)
-       (uri (pypi-uri "zeroconf" version))
+       (method git-fetch)               ; no tests in PyPI release
+       (uri (git-reference
+             (url "https://github.com/jstasiak/python-zeroconf")
+             (commit version)))
+       (file-name (git-file-name name version))
        (sha256
-        (base32
-         "0narq8haa3b375vfblbyil77n8bw0wxqnanl91pl0wwwm884mqjb"))))
+        (base32 "1p1a0ywlg5sq0ilcphmz9h4kayscz0q1lyfk57j7mwxyx4gl9cpi"))))
     (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"))))))
+           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "python" "-m" "pytest" "-k"
+                       (string-append
+                        ;; Networking isn't available for these tests.
+                        "not test_integration_with_listener_ipv6"
+                        " and not test_launch_and_close_v4_v6"
+                        " and not test_launch_and_close_context_manager"
+                        " and not test_launch_and_close"
+                        " and not test_close_multiple_times"))))))))
+    (native-inputs
+     (list python-pytest))
+    (propagated-inputs
+     (list python-ifaddr))
     (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).")
+    (description "Pure Python multicast DNS (mDNS) service discovery library
+(Bonjour/Avahi compatible).")
     (license license:lgpl2.1+)))
 
 (define-public python2-zeroconf
@@ -22952,17 +23852,16 @@ compatible).")
 (define-public python-bsddb3
   (package
     (name "python-bsddb3")
-    (version "6.2.6")
+    (version "6.2.9")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "bsddb3" version))
        (sha256
-        (base32
-         "019db2y6bfmiqbrgg9x9f6h72qjmqh05czdn2v5sy9bl0gs23mj2"))))
+        (base32 "00bqdsfx8jgmfz5bgkx10nlw5bfsw11a86f91zkl53snvk45xl3h"))))
     (build-system python-build-system)
     (inputs
-     `(("bdb" ,bdb)))
+     (list bdb))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -22998,7 +23897,7 @@ Complete support for Berkeley DB Base Replication.  Support for RPC.")
                 "0gdpwdzf1fngsi6jrdyj4qdf6cr7gnnr3zp80dpkzbgz0spskj07"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://dbfread.readthedocs.io")
     (synopsis "Read DBF Files with Python")
     (description
@@ -23032,7 +23931,7 @@ one-off scripts.")
                                "    " m)))
              #t)))))
     (native-inputs
-     `(("python-freezegun" ,python-freezegun)))
+     (list python-freezegun))
     (home-page
      "https://github.com/pydanny/cached-property")
     (synopsis
@@ -23057,15 +23956,12 @@ time-or-computationally-expensive properties quick and easy and works in Python
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0yi5y9pfpbc4bc4ibr8cblif8ls1wf3k0zawyx86r2qwxxkkyd6k"))))
+        (base32 "1q05pzca3wfwgnbg03l3bagnhh348yx68w4aa91rg3g8zlviwjz1"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-branca" ,python-branca)
-       ("python-jinja2" ,python-jinja2)
-       ("python-numpy" ,python-numpy)
-       ("python-requests" ,python-requests)))
+     (list python-branca python-jinja2 python-numpy python-requests))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/python-visualization/folium")
     (synopsis "Make beautiful maps with Leaflet.js & Python")
     (description "@code{folium} makes it easy to visualize data that’s been
@@ -23116,7 +24012,7 @@ for manual interpretation.")
          "1hpbydpn2alyswiajfbvhzq4c7f36vdmvxy91hgv8l1lb2g2vfrj"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)))
+     (list python-dateutil))
     (home-page "https://github.com/MKuranowski/pyroutelib3")
     (synopsis "Library for simple routing on OSM data")
     (description "Library for simple routing on OSM data")
@@ -23135,9 +24031,9 @@ for manual interpretation.")
          "0zwhfkrzf3n5847dbnfng92k7ak199l9v6x6ax3dgdidfpm6d2fz"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pyparsing" ,python-pyparsing)))
+     (list python-pyparsing))
     (native-inputs
-     `(("python-future" ,python-future)))
+     (list python-future))
     (home-page "https://github.com/sciunto-org/python-bibtexparser")
     (synopsis "Python library to parse BibTeX files")
     (description "BibtexParser is a Python library to parse BibTeX files.")
@@ -23146,17 +24042,17 @@ for manual interpretation.")
 (define-public python-distro
   (package
     (name "python-distro")
-    (version "1.4.0")
+    (version "1.6.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "distro" version))
        (sha256
         (base32
-         "0mrg75w4ap7mdzyga75yaid9n8bgb345ih5mwjp3plj6v1jxwb9n"))))
+         "09441261dd3c8b2gv15vhw1cryzg60lmgpkk07v6hpwwkyhfbxc3"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/nir0s/distro")
     (synopsis
      "OS platform information API")
@@ -23187,15 +24083,10 @@ information in various formats.")
          (replace 'check
            (lambda _ (invoke "pytest"))))))
     (propagated-inputs
-     `(("python-cairocffi" ,python-cairocffi)
-       ("python-cssselect2" ,python-cssselect2)
-       ("python-defusedxml" ,python-defusedxml)
-       ("python-pillow" ,python-pillow)
-       ("python-tinycss2" ,python-tinycss2)))
+     (list python-cairocffi python-cssselect2 python-defusedxml
+           python-pillow python-tinycss2))
     (native-inputs
-     `(("python-pytest-flake8" ,python-pytest-flake8)
-       ("python-pytest-isort" ,python-pytest-isort)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-pytest-flake8 python-pytest-isort python-pytest-runner))
     (home-page "https://cairosvg.org/")
     (synopsis "SVG to PDF/PS/PNG converter based on Cairo")
     (description "CairoSVG is a SVG converter based on Cairo.  It can export
@@ -23227,16 +24118,15 @@ existing Hunspell hyphenation dictionaries.")
 (define-public python-intelhex
   (package
     (name "python-intelhex")
-    (version "2.2.1")
+    (version "2.3.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "intelhex" version))
        (sha256
         (base32
-         "0ckqjbxd8gwcg98gfzpn4vq1qxzfvq3rdbrr1hikj1nmw08qb780"))))
+         "14q04p6qs47ab9w55232ylrdn4wm9rswz36s6x999x0rlxhp6aw9"))))
     (build-system python-build-system)
-    (arguments '(#:tests? #f))          ;issue with version
     (home-page "https://pypi.org/project/IntelHex/")
     (synopsis "Python library for Intel HEX files manipulations")
     (description "The Intel HEX file format is widely used in microprocessors
@@ -23262,9 +24152,7 @@ converters and more, those based on the library itself.")
     (build-system python-build-system)
     (arguments '(#:tests? #f))          ;missing dependencies
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-docopt" ,python-docopt)
-       ("python-pyyaml" ,python-pyyaml)))
+     (list python-dateutil python-docopt python-pyyaml))
     (home-page "https://github.com/grokzen/pykwalify")
     (synopsis
      "Python lib/cli for JSON/YAML schema validation")
@@ -23276,31 +24164,55 @@ for YAML and JSON.")
 (define-public python-dbusmock
   (package
     (name "python-dbusmock")
-    (version "0.18.3")
+    (version "0.25.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "python-dbusmock" version))
        (sha256
         (base32
-         "0hp2kyac88nh9iv6l8hlmv7s1sa1s5f1a3wc2pmlmmxnd211fjlr"))))
+         "1nwl0gzzds2g1w1gfxfzlgrkb5hr1rrdyn619ml25c6b1rjyfk3g"))))
     (build-system python-build-system)
     (arguments
-     '(#:phases
+     `(#:imported-modules (,@%python-build-system-modules
+                           (guix build syscalls))
+       #:modules ((guix build python-build-system)
+                  (guix build syscalls)
+                  (guix build utils)
+                  (ice-9 match))
+       #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'patch-shell-path
-           (lambda _
+         (add-after 'unpack 'patch-paths
+           (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "tests/test_code.py"
                (("/bin/bash") (which "bash")))
-             #t)))))
-    (native-inputs
-     `(;; For tests.
-       ("dbus" ,dbus) ; for dbus-daemon
-       ("python-nose" ,python-nose)
-       ("which" ,which)))
+             (substitute* "dbusmock/testcase.py"
+               (("'dbus-daemon'")
+                (string-append "'" (assoc-ref inputs "dbus")
+                               "/bin/dbus-daemon'")))))
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (match (primitive-fork)
+                 (0                     ;child process
+                  (set-child-subreaper!)
+                  ;; Use tini so that signals are properly handled and
+                  ;; doubly-forked processes get reaped; otherwise,
+                  ;; python-dbusmock would waste time polling for the dbus
+                  ;; processes it spawns to be reaped, in vain.
+                  (execlp "tini" "--" "pytest" "-vv"))
+                 (pid
+                  (match (waitpid pid)
+                    ((_ . status)
+                     (unless (zero? status)
+                       (error "`pytest' exited with status"
+                              status))))))))))))
+    (native-inputs
+     (list dbus python-pytest tini which))
+    (inputs
+     (list dbus))
     (propagated-inputs
-     `(("python-dbus" ,python-dbus)
-       ("python-pygobject" ,python-pygobject)))
+     (list python-dbus python-pygobject))
     (home-page "https://github.com/martinpitt/python-dbusmock")
     (synopsis "Python library for mock D-Bus objects")
     (description "python-dbusmock allows for the easy creation of mock objects on
@@ -23325,9 +24237,7 @@ services to what you expect in your tests.")
     ;; XXX: No tests on PyPI, and the repository has no tags.
     (arguments '(#:tests? #f))
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-simplejson" ,python-simplejson)
-       ("python-sortedcontainers" ,python-sortedcontainers)))
+     (list python-dateutil python-simplejson python-sortedcontainers))
     (synopsis "Serialize Python types to/from JSON")
     (description
      "This package provides functionality to serialize arbitrary data types
@@ -23369,9 +24279,7 @@ register custom encoders and decoders.")
              (add-installed-pythonpath inputs outputs)
              (invoke "pytest"))))))
     (native-inputs
-     `(("double-conversion" ,double-conversion)
-       ("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-pytest" ,python-pytest)))
+     (list double-conversion python-setuptools-scm python-pytest))
     (home-page "https://github.com/ultrajson/ultrajson")
     (synopsis "Ultra fast JSON encoder and decoder for Python")
     (description
@@ -23407,10 +24315,7 @@ bindings for Python 3.")
                (invoke "py.test" "-v" "tests")
                #t)))))
       (propagated-inputs
-       `(("python-flexmock" ,python-flexmock)
-         ("python-pytest" ,python-pytest)
-         ("python-pytest-cov" ,python-pytest-cov)
-         ("python-six" ,python-six)))
+       (list python-flexmock python-pytest python-pytest-cov python-six))
       (home-page "https://github.com/oinume/iocapture")
       (synopsis "Python capturing tool for stdout and stderr")
       (description
@@ -23478,20 +24383,18 @@ standard error channel (stderr) in your program.")
                         " and not test_send_receive"
                         " and not test_socket_options"))))))))
     (propagated-inputs
-     `(("python-idna" ,python-idna)
-       ("python-sniffio" ,python-sniffio)
-       ("python-typing-extensions" ,python-typing-extensions)))
-    (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-hypothesis" ,python-hypothesis)
-       ("python-iniconfig" ,python-iniconfig)
-       ("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest-6)
-       ("python-pytest-mock" ,python-pytest-mock)
-       ("python-pytest-trio" ,python-pytest-trio)
-       ("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-trustme" ,python-trustme)
-       ("python-uvloop" ,python-uvloop)))
+     (list python-idna python-sniffio python-typing-extensions))
+    (native-inputs
+     (list python-coverage
+           python-hypothesis
+           python-iniconfig
+           python-mock
+           python-pytest-6
+           python-pytest-mock
+           python-pytest-trio
+           python-setuptools-scm
+           python-trustme
+           python-uvloop))
     (home-page "https://github.com/agronholm/anyio")
     (synopsis "Compatibility layer for multiple asynchronous event loops")
     (description
@@ -23521,11 +24424,8 @@ itself.")
            "1p5h3dnpbsjmqrvil96s71asc6i3gpinmbrabqmwnrsxprz7r3ns"))))
       (build-system python-build-system)
       (propagated-inputs
-       `(("python-iocapture" ,python-iocapture)
-         ("python-mock" ,python-mock)
-         ("python-pytest" ,python-pytest)
-         ("python-pytest-cov" ,python-pytest-cov)
-         ("python-pytest-xdist" ,python-pytest-xdist)))
+       (list python-iocapture python-mock python-pytest python-pytest-cov
+             python-pytest-xdist))
       (home-page "https://github.com/neithere/argh/")
       (synopsis "Argparse wrapper with natural syntax")
       (description
@@ -23550,7 +24450,7 @@ including the native API of @code{python-argparse}.")
     (build-system python-build-system)
     (arguments '(#:tests? #f))          ; there are none
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://pypi.org/project/ppft/")
     (synopsis "Fork of Parallel Python")
     (description
@@ -23585,8 +24485,7 @@ load balancing.")
              (invoke "py.test" "-vv")
              #t)))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("which" ,which)))
+     (list python-pytest which))
     (home-page "https://pypi.org/project/pox/")
     (synopsis "Python utilities for file system exploration and automated builds")
     (description
@@ -23616,16 +24515,11 @@ essential tools are located.")
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (setenv "PYTHONPATH"
-                     (string-append (getcwd) ":" (getenv "PYTHONPATH")))
              (invoke "python" "./tests/__main__.py"))))))
     (propagated-inputs
-     `(("python-dill" ,python-dill)
-       ("python-multiprocess" ,python-multiprocess)
-       ("python-pox" ,python-pox)
-       ("python-ppft" ,python-ppft)))
+     (list python-dill python-multiprocess python-pox python-ppft))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://pypi.org/project/pathos/")
     (synopsis
      "Parallel graph management and execution in heterogeneous computing")
@@ -23640,93 +24534,52 @@ the syntactic logic to configure and launch jobs in an execution environment.")
 (define-public python-flit
   (package
     (name "python-flit")
-    (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"))))
+    (version "3.5.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "flit" version))
+       (sha256
+        (base32 "04152qj46sqbnlrj7ch9p7svjrrlpzbk0qr39g2yr0s4f5vp6frf"))))
     (build-system python-build-system)
     (arguments
-     `(#: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")))))))
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          ;; XXX: PEP 517 manual build copied from python-isort.
+          (replace 'build
+            (lambda _
+              (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
+          (replace 'check
+            (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+              (when tests?
+                (setenv "HOME" "/tmp")
+                (setenv "FLIT_NO_NETWORK" "1"))))
+          (replace 'install
+            (lambda _
+              (let ((whl (car (find-files "dist" "\\.whl$"))))
+                (invoke "pip" "--no-cache-dir" "--no-input"
+                        "install" "--no-deps" "--prefix" #$output whl)))))))
+    (propagated-inputs
+     (list python-pypa-build
+           python-tomli-w
+           python-flit-core
+           python-docutils
+           python-requests))
+    (native-inputs
+     (list python-responses
+           python-pygments-github-lexers
+           python-pytest
+           python-pytest-cov
+           python-sphinx
+           python-sphinxcontrib-github-alt
+           python-testpath))
     (home-page "https://flit.readthedocs.io/")
-    (synopsis
-     "Simple packaging tool for simple packages")
-    (description
-     "Flit is a simple way to put Python packages and modules on PyPI.  Flit
-packages a single importable module or package at a time, using the import
-name as the name on PyPI.  All subpackages and data files within a package
-are included automatically.")
+    (synopsis "Simple packaging tool for simple packages")
+    (description "Flit is a simple way to put Python packages and modules on
+PyPI.  Flit packages a single importable module or package at a time, using
+the import name as the name on PyPI.  All subpackages and data files within a
+package are included automatically.")
     (license license:bsd-3)))
 
 (define-public python-pathtools
@@ -23773,25 +24626,17 @@ scripts to load entry points more quickly.")
 (define-public python-funcparserlib
   (package
     (name "python-funcparserlib")
-    (version "0.3.6")
+    (version "1.0.0a0")                 ; last stable release was in 2013
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "funcparserlib" version))
        (sha256
-        (base32
-         "07f9cgjr3h4j2m67fhwapn8fja87vazl58zsj4yppf9y3an2x6dp"))))
-    (native-inputs
-     `(("python-tox" ,python-tox)))
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (replace 'check
-           (lambda _
-             (invoke "tox"))))))
+        (base32 "0ama5w5lswxlp3l4qfqq3zlg7i6qkw45jfl1f7p8w1vnj8m47yz6"))))
     (build-system python-build-system)
-    (home-page
-     "https://github.com/vlasovskikh/funcparserlib")
+    (arguments
+     `(#:tests? #f))              ; no tests in PyPI and no setup.py in GitHub
+    (home-page "https://github.com/vlasovskikh/funcparserlib")
     (synopsis
      "Recursive descent parsing library based on functional combinators")
     (description
@@ -23813,7 +24658,7 @@ that take parsers as their arguments and return them as result values.")
     (arguments
      `(#:tests? #f))                    ;FIXME: tests fail, not sure why
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (build-system python-build-system)
     (home-page "https://github.com/avakar/speg")
     (synopsis "PEG-based parser interpreter with memoization")
@@ -23833,57 +24678,13 @@ memoization.")
         (base32 "00cyvigg4npbph39ghkg77xbxisa6plf75vii24igxfizik0337f"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-speg" ,python-speg)))
+     (list python-speg))
     (home-page "https://github.com/avakar/pycson")
     (synopsis "Parser for Coffeescript Object Notation (CSON)")
     (description "This package is a parser for Coffeescript Object
 Notation (CSON).")
     (license license:expat)))
 
-(define-public python-asynctest
-  (package
-    (name "python-asynctest")
-    (version "0.13.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "asynctest" version))
-       (sha256
-        (base32
-         "1b3zsy7p84gag6q8ai2ylyrhx213qdk2h2zb6im3xn0m5n264y62"))))
-    (build-system python-build-system)
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (replace 'check
-           (lambda _
-             (invoke "python" "-X" "dev" "-m" "unittest" "-v" "test")))
-         (add-after 'unpack 'disable-tests
-           (lambda* _
-             ;; XXX: 7 tests fail out of 220. Disable them for now.
-             (substitute* (list "test/test_selector.py"
-                                "test/test_mock.py")
-               (("def test_events_watched_outside_test_are_ignored")
-                "@unittest.skip('disabled by guix')
-    def test_events_watched_outside_test_are_ignored")
-               (("def test_awaited_from_autospec_mock.*" line)
-                (string-append line "        return True\n"))
-               (("def test_create_autospec_on_coroutine_and_using_assert_methods.*" line)
-                (string-append line "        return True\n"))
-               (("def test_patch_coroutine_with_multiple_scopes.*" line)
-                (string-append line "        return True\n"))
-               (("def test_multiple_patches_on_coroutine.*" line)
-                (string-append line "        return True\n"))
-               (("def test_patch_coroutine_only_when_running.*" line)
-                (string-append line "        return True\n")))
-             #t)))))
-    (home-page "https://github.com/Martiusweb/asynctest")
-    (synopsis "Extension of unittest for testing asyncio libraries")
-    (description
-     "The package asynctest is built on top of the standard unittest module
-and cuts down boilerplate code when testing libraries for asyncio.")
-    (license license:asl2.0)))
-
 (define-public python-aionotify
   (package
     (name "python-aionotify")
@@ -23928,8 +24729,7 @@ and cuts down boilerplate code when testing libraries for asyncio.")
            (lambda _
              (invoke "make" "SKIP_DEPS=1"))))))
     (native-inputs
-     `(("python-nose" ,python-nose)
-       ("python-coverage" ,python-coverage)))
+     (list python-nose python-coverage))
     (home-page "https://github.com/clarete/forbiddenfruit")
     (synopsis "Patch python built-in objects")
     (description "This project allows Python code to extend built-in types.")
@@ -23948,11 +24748,10 @@ and cuts down boilerplate code when testing libraries for asyncio.")
          "1lqp3jgfngyhaxjgj3n230hn90wsylwilh120yjf62h7b1s02mh8"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ;; `which`, `kadmin.local` binaries called inside library
-       ("which" ,which)
-       ("mit-krb5" ,mit-krb5)))
-    (native-inputs `(("mit-krb5" ,mit-krb5)))
+     (list python-six
+           ;; `which`, `kadmin.local` binaries called inside library
+           which mit-krb5))
+    (native-inputs (list mit-krb5))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -23985,15 +24784,12 @@ tests.")
          "1j2idrbrbczykzlb56q1bn0ivc9c0rjjljpk4yz86xn3gxfkpv8n"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-decorator" ,python-decorator)
-       ("python-six" ,python-six)))
+     (list python-decorator python-six))
     (inputs
-     `(("mit-krb5" ,mit-krb5)))
+     (list mit-krb5))
     ;; for tests
     (native-inputs
-     `(("python-parameterized" ,python-parameterized)
-       ("python-k5test" ,python-k5test)
-       ("python-nose" ,python-nose)))
+     (list python-parameterized python-k5test python-nose))
     (home-page "https://github.com/pythongssapi/python-gssapi")
     (synopsis "Python GSSAPI Wrapper")
     (description
@@ -24015,8 +24811,7 @@ also be usable with other GSSAPI mechanisms.")
           "0lk45ifdv2cpkl6ayfyix7jwmnxa1rha7xvb0ih5999k115wzqs4"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("git" ,git)))
+     (list python-mock git))
     (home-page "https://github.com/mgedmin/check-manifest")
     (synopsis "Check MANIFEST.in in a Python source package for completeness")
     (description "Python package can include a MANIFEST.in file to help with
@@ -24050,30 +24845,28 @@ files.  These files are used to translate strings in android apps.")
 (define-public python-watchdog
   (package
     (name "python-watchdog")
-    (version "0.9.0")
+    (version "2.1.6")
     (source
-      (origin
-        (method url-fetch)
-        (uri (pypi-uri "watchdog" version))
-        (sha256
-         (base32
-          "07cnvvlpif7a6cg4rav39zq8fxa5pfqawchr46433pij0y6napwn"))))
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "watchdog" version))
+       (sha256
+        (base32 "1rx2nyl0cyj0v4ja795cl3gi26577c5wg48syr3byz3ndkgpavm3"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-before 'check 'remove-failing
-           (lambda _
-             (delete-file "tests/test_inotify_buffer.py")
-             (delete-file "tests/test_snapshot_diff.py")
-             #t)))))
+         (replace 'check
+           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "python" "-m" "pytest" "-k"
+                       ;; This test failed.
+                       "not test_kill_auto_restart")))))))
     (propagated-inputs
-     `(("python-argh" ,python-argh)
-       ("python-pathtools" ,python-pathtools)
-       ("python-pyyaml" ,python-pyyaml)))
+     (list python-pathtools python-pyyaml))
     (native-inputs
-     `(("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-timeout" ,python-pytest-timeout)))
+     (list python-pytest-cov python-pytest-timeout))
     (home-page "https://github.com/gorakhargosh/watchdog")
     (synopsis "File system events monitoring")
     (description "This package provides a way to monitor file system events
@@ -24084,7 +24877,7 @@ but portable.")
 (define-public python-watchgod
   (package
     (name "python-watchgod")
-    (version "0.6")
+    (version "0.7")
     (source
      (origin
        ;; There are no tests in the PyPI tarball.
@@ -24094,7 +24887,7 @@ but portable.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1lqx44wkryakgpyqj3m0hsz61bqr07vc7smgzh188374hwvscp66"))))
+        (base32 "1w2xsidwp9n4giqhja0bzw7rwrh01db0kdxf2n54mv3dkx545jpq"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -24102,21 +24895,17 @@ but portable.")
          (replace 'check
            (lambda* (#:key tests? #:allow-other-keys)
              (when tests?
-               (invoke "pytest" "-vv")))))))
-    (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-docutils" ,python-docutils)
-       ("python-flake8" ,python-flake8)
-       ("python-isort" ,python-isort)
-       ("python-pycodestyle" ,python-pycodestyle)
-       ("python-pyflakes" ,python-pyflakes)
-       ("python-pygments" ,python-pygments)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-aiohttp" ,python-pytest-aiohttp)
-       ("python-pytest-mock" ,python-pytest-mock)
-       ("python-pytest-sugar" ,python-pytest-sugar)
-       ("python-pytest-toolbox" ,python-pytest-toolbox)))
+               (invoke "pytest"  "-vv"
+                       "-o" "asyncio_mode=auto")))))))
+    (native-inputs
+     (list python-coverage
+           python-pygments
+           python-pytest
+           python-pytest-asyncio
+           python-pytest-cov
+           python-pytest-mock
+           python-pytest-sugar
+           python-pytest-toolbox))
     (home-page "https://github.com/samuelcolvin/watchgod")
     (synopsis "Simple, modern file watching and code reload in Python")
     (description
@@ -24137,7 +24926,7 @@ operating systems and an elegant approach to concurrency using threading.")
         (base32
          "0qb0y7ipby42m4m7h0ipazpdyc3bn9xi46lvifcwwl5albn31rim"))))
     (build-system python-build-system)
-    (native-inputs `(("unzip" ,unzip)))
+    (native-inputs (list unzip))
     (home-page "https://bitbucket.org/techtonik/python-wget/")
     (synopsis "Pure Python download utility")
     (description "The python-wget library provides an API to download files
@@ -24163,21 +24952,21 @@ with features similar to the @command{wget} utility.")
      ;; No tests
      `(#:tests? #f))
     (propagated-inputs
-      `(("python-android-stringslib" ,python-android-stringslib)
-        ("python-dateutil" ,python-dateutil)
-        ("python-gitlab" ,python-gitlab)
-        ("python-lxml" ,python-lxml)
-        ("python-polib" ,python-polib)
-        ("python-pyenchant" ,python-pyenchant)
-        ("python-pygit2" ,python-pygit2)
-        ("python-pygithub" ,python-pygithub)
-        ("python-pyqt" ,python-pyqt)
-        ("python-requests" ,python-requests)
-        ("python-ruamel.yaml" ,python-ruamel.yaml)
-        ("python-translation-finder" ,python-translation-finder)
-        ("python-watchdog" ,python-watchdog)))
-    (native-inputs
-     `(("qttools" ,qttools)))
+      (list python-android-stringslib
+            python-dateutil
+            python-gitlab
+            python-lxml
+            python-polib
+            python-pyenchant
+            python-pygit2
+            python-pygithub
+            python-pyqt
+            python-requests
+            python-ruamel.yaml
+            python-translation-finder
+            python-watchdog))
+    (native-inputs
+     (list qttools))
     (home-page "https://framagit.org/tyreunom/offlate")
     (synopsis "Offline translation interface for online translation tools")
     (description "Offlate offers a unified interface for different translation
@@ -24201,7 +24990,7 @@ an upload option to send your work back to the platform.")
          "0486i99wf8ssa7sgn81fn6fv6i4rhhq6n751bc740b3hzfbpmpl4"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (home-page "https://github.com/ppannuto/python-titlecase")
     (synopsis "Capitalize strings similar to book titles")
     (description
@@ -24253,11 +25042,9 @@ custom PNG processing.")
          "1s00zn75y2dkxgnbw8kl8dw4p1mc77cv78fwfa4yb0274s96w0a5"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-hypothesis" ,python-hypothesis)
-       ("python-pycodestyle" ,python-pycodestyle)
-       ("python-pytest" ,python-pytest)))
+     (list python-hypothesis python-pycodestyle python-pytest))
     (propagated-inputs
-     `(("python-levenshtein" ,python-levenshtein)))
+     (list python-levenshtein))
     (home-page "https://github.com/seatgeek/fuzzywuzzy")
     (synopsis "Fuzzy string matching in Python")
     (description "Approximate string matching using
@@ -24302,8 +25089,7 @@ your process.")
           "0gyady7x3v3l9fm1zan0idaggqqcm31y7g5vxk7h05p5h7f39bjs"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-lxml" ,python-lxml)
-       ("python-jinja2" ,python-jinja2)))
+     (list python-lxml python-jinja2))
     (home-page "https://gcovr.com/")
     (synopsis "Utility for generating code coverage results")
     (description
@@ -24325,7 +25111,10 @@ Python.")
         (base32 "0v8vg0naa9rywvd31cpq65ljbdclpsrx09788v4xj7lg10np8nk0"))))
     (build-system python-build-system)
     (arguments
-     '(#:tests? #f)) ; TODO: package dependencies required for tests.
+     ;; TODO: package dependencies required for tests.
+     '(#:tests? #f
+       #:phases (modify-phases %standard-phases
+                  (delete 'sanity-check))))
     (synopsis "Interface for Open Geospatial Consortium web service")
     (description
      "OWSLib is a Python package for client programming with Open Geospatial
@@ -24348,13 +25137,13 @@ content models.")
     ;; Testing requires undocumented setup changes, and so testing is disabled here.
     (arguments `(#:tests? #f))
     (propagated-inputs
-      `(("python-certifi" ,python-certifi)
-        ("python-six" ,python-six)
-        ("python-dateutil" ,python-dateutil)
-        ("python-urllib3" ,python-urllib3)
-        ("python-pyjwt" ,python-pyjwt)
-        ("python-cryptography" ,python-cryptography)
-        ("python-nose" ,python-nose)))
+      (list python-certifi
+            python-six
+            python-dateutil
+            python-urllib3
+            python-pyjwt
+            python-cryptography
+            python-nose))
     (synopsis "DocuSign Python Client")
     (description "The Official DocuSign Python Client Library used to interact
  with the eSign REST API.  Send, sign, and approve documents using this client.")
@@ -24364,17 +25153,17 @@ content models.")
 (define-public python-xattr
   (package
     (name "python-xattr")
-    (version "0.9.7")
+    (version "0.9.9")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "xattr" version))
        (sha256
         (base32
-         "0i4xyiqbhjz2g16zbim17zjdbjkw79xsw8k59942vvq4is1cmfxh"))))
+         "0ipkfblyvp5hylahjkw9zss1ii9xnwjypr3b3ncv989szcg7xjq9"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-cffi" ,python-cffi)))
+     (list python-cffi))
     (home-page "https://github.com/xattr/xattr")
     (synopsis
      "Python wrapper for extended file system attributes")
@@ -24417,12 +25206,9 @@ we can stop writing custom parsers for syslog-type records.")
          "1qmank3c217ddiig3xr8ps0mqaydcp0q5a62in9a9g4zf72zjnqd"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-json-logger" ,python-json-logger)))
+     (list python-json-logger))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-six" ,python-six)))
+     (list python-mock python-pytest python-setuptools-scm python-six))
     (home-page "https://github.com/jd/daiquiri")
     (synopsis
      "Library to configure Python logging easily")
@@ -24433,14 +25219,14 @@ logging in Python.  It also provides some custom formatters and handlers.")
 (define-public python-pifpaf
   (package
     (name "python-pifpaf")
-    (version "2.5.0")
+    (version "3.1.5")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pifpaf" version))
        (sha256
         (base32
-         "1gy9p4nqf70fh38wn4icyfm7i9wrvx22wnjpg71g89wxbz27igaa"))))
+         "19bdmxldc2m570isl7hbqgbb20si4sin7pi5fw8sv9py8dyv2s4n"))))
     (build-system python-build-system)
     (arguments
      '(#:phases
@@ -24450,20 +25236,16 @@ logging in Python.  It also provides some custom formatters and handlers.")
              (invoke "python" "setup.py" "testr" "--slowest"
                      "--testr-args=until-failure"))))))
     (propagated-inputs
-     `(("python-click" ,python-click)
-       ("python-daiquiri" ,python-daiquiri)
-       ("python-fixtures" ,python-fixtures)
-       ("python-jinja2" ,python-jinja2)
-       ("python-pbr" ,python-pbr)
-       ("python-psutil" ,python-psutil)
-       ("python-six" ,python-six)
-       ("python-xattr" ,python-xattr)))
+     (list python-click
+           python-daiquiri
+           python-fixtures
+           python-jinja2
+           python-pbr
+           python-psutil
+           python-xattr))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-os-testr" ,python-os-testr)
-       ("python-requests" ,python-requests)
-       ("python-testrepository" ,python-testrepository)
-       ("python-testtools" ,python-testtools)))
+     (list python-mock python-os-testr python-requests
+           python-testrepository python-testtools))
     (home-page "https://github.com/jd/pifpaf")
     (synopsis "Tools and fixtures to manage daemons for testing in Python")
     (description "Pifpaf is a suite of fixtures and a command-line tool that
@@ -24486,14 +25268,14 @@ evolved from its precursor @code{overtest}.")
          "12x3wmrdzm6wgk0vz02hb769h68nr49q47w5q1pj95pc89hsa34v"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-docutils" ,python-docutils)
-       ("python-html5lib" ,python-html5lib)
-       ("python-nbconvert" ,python-nbconvert)
-       ("python-nbformat" ,python-nbformat)
-       ("python-pytest" ,python-pytest)
-       ("python-six" ,python-six)))
+     (list python-docutils
+           python-html5lib
+           python-nbconvert
+           python-nbformat
+           python-pytest
+           python-six))
     (native-inputs
-     `(("python-pbr-minimal" ,python-pbr-minimal)))
+     (list python-pbr-minimal))
     (home-page "https://github.com/minrk/pytest-check-links")
     (synopsis "Check links in files")
     (description "This package provides a pytest plugin that checks URLs for
@@ -24546,19 +25328,40 @@ replacement for dictionaries where immutability is desired.")
 (define-public python-unpaddedbase64
   (package
     (name "python-unpaddedbase64")
-    (version "1.1.0")
+    (version "2.1.0")
     (source
      (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/matrix-org/python-unpaddedbase64")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
+       (method url-fetch)
+       (uri (pypi-uri "unpaddedbase64" version))
        (sha256
-        (base32
-         "0if3fjfxga0bwdq47v77fs9hrcqpmwdxry2i2a7pdqsp95258nxd"))))
+        (base32 "01ghlmw63fgslwj8j74vkpf1kqvr7a4agm6nyn89vqwx106ccwvj"))))
     (build-system python-build-system)
-    (home-page "https://pypi.org/project/unpaddedbase64/")
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key inputs tests? #:allow-other-keys)
+             (when tests?
+               (copy-recursively (string-append
+                                  (assoc-ref inputs "tests") "/tests")
+                                 "tests")
+               (invoke "python" "-m" "pytest" "-vv")))))))
+    (native-inputs
+     `(("python-pytest" ,python-pytest)
+       ("tests"
+        ;; The release on pypi comes without tests.  We can't build from this
+        ;; checkout, though, because installation requires an invocation of
+        ;; poetry.
+        ,(origin
+           (method git-fetch)
+           (uri (git-reference
+                 (url "https://github.com/matrix-org/python-unpaddedbase64")
+                 (commit (string-append "v" version))))
+           (file-name (git-file-name name version))
+           (sha256
+            (base32
+             "1n6har8pxv0mqb96lanzihp1xf76aa17jw3977drb1fgz947pnmz"))))))
+    (home-page "https://github.com/matrix-org/python-unpaddedbase64")
     (synopsis "Encode and decode Base64 without “=” padding")
     (description
      "RFC 4648 specifies that Base64 should be padded to a multiple of 4 bytes
@@ -24597,9 +25400,7 @@ information for your operating system.")
         (base32 "0c86g0vvzdcg3nrcsqnbzlfhpprc2i894p8i14hska56yl27d6w9"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-frozendict" ,python-frozendict)
-       ("python-simplejson" ,python-simplejson)))
+     (list python-six python-frozendict python-simplejson))
     (home-page "https://github.com/matrix-org/python-canonicaljson")
     (synopsis "Canonical JSON")
     (description
@@ -24629,13 +25430,10 @@ information for your operating system.")
         (base32 "0280f8zyycsmd7iy65bs438flm7m8ffs1kcxfbvhi8hbazkqc19m"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-canonicaljson" ,python-canonicaljson)
-       ("python-importlib-metadata" ,python-importlib-metadata)
-       ("python-pynacl" ,python-pynacl)
-       ("python-typing-extensions" ,python-typing-extensions)
-       ("python-unpaddedbase64" ,python-unpaddedbase64)))
+     (list python-canonicaljson python-importlib-metadata python-pynacl
+           python-typing-extensions python-unpaddedbase64))
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-setuptools-scm))
     (home-page "https://github.com/matrix-org/python-signedjson")
     (synopsis "Sign JSON objects with ED25519 signatures")
     (description
@@ -24679,8 +25477,7 @@ key.
         (base32 "1f0357a6g1h96sk6wy030xmc1p4rd80a999qvxd28v7nlm1blsqy"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-pynacl" ,python-pynacl)))
+     (list python-six python-pynacl))
     (home-page "https://github.com/ecordell/pymacaroons")
     (synopsis "Python Macaroon Library")
     (description
@@ -24717,10 +25514,9 @@ enforcement of that policy.")
                         (invoke "nosetests" "-s" "test"))
                       #t)))))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (propagated-inputs
-     `(("python-gssapi" ,python-gssapi)
-       ("python-pyasn1" ,python-pyasn1)))
+     (list python-gssapi python-pyasn1))
     (synopsis "Python LDAP client")
     (description
      "LDAP3 is a strictly RFC 4510 conforming LDAP V3 pure Python client
@@ -24761,13 +25557,13 @@ tbutils
 (define-public python-eliot
   (package
     (name "python-eliot")
-    (version "1.12.0")
+    (version "1.13.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "eliot" version))
        (sha256
-        (base32 "0wabv7hk63l12881f4zw02mmj06583qsx2im0yywdjlj8f56vqdn"))))
+        (base32 "1xzzhsjrrw430dc84vamf683bwp9i0nr86xf2iav6yla615ijq2p"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -24783,25 +25579,33 @@ tbutils
            ;; be installed and these tests should pass.
            (lambda _
              (delete-file "eliot/tests/test_prettyprint.py")
+             #t))
+         (add-after 'remove-eliot-prettyprint-tests 'remove-failing-tests
+           (lambda _
+             ;; These tests started to fail after updating python-pandas to
+             ;; 1.3.3 and python-dask to 2021.9.1.
+             (substitute* "eliot/tests/test_validation.py"
+               (("test_omitLoggerFromActionType")
+                "_test_omitLoggerFromActionType")
+               (("test_logCallsDefaultLoggerWrite")
+                "_test_logCallsDefaultLoggerWrite"))
              #t)))))
     (propagated-inputs
-     `(("python-boltons" ,python-boltons)
-       ("python-pyrsistent" ,python-pyrsistent)
-       ("python-six" ,python-six)
-       ("python-zope-interface" ,python-zope-interface)))
-    (native-inputs
-     `(("python-black" ,python-black)
-       ("python-coverage" ,python-coverage)
-       ("python-dask" ,python-dask)
-       ("python-flake8" ,python-flake8)
-       ("python-hypothesis" ,python-hypothesis)
-       ("python-pytest" ,python-pytest)
-       ("python-setuptools" ,python-setuptools)
-       ("python-sphinx" ,python-sphinx)
-       ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
-       ("python-testtools" ,python-testtools)
-       ("python-twine" ,python-twine)
-       ("python-twisted" ,python-twisted)))
+     (list python-boltons python-pyrsistent python-six
+           python-zope-interface))
+    (native-inputs
+     (list python-black
+           python-coverage
+           python-dask
+           python-flake8
+           python-hypothesis
+           python-pytest
+           python-setuptools
+           python-sphinx
+           python-sphinx-rtd-theme
+           python-testtools
+           python-twine
+           python-twisted))
     (home-page "https://github.com/itamarst/eliot/")
     (synopsis "Eliot: the logging system that tells you why it happened")
     (description
@@ -24824,13 +25628,13 @@ happened, and what caused it.")
          "1xh88ss279fprxnzd10dczmqwjhppbyvljm33zrg2mgybwd66qr7"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-certifi" ,python-certifi)
-       ("python-coverage" ,python-coverage)
-       ("python-pretend" ,python-pretend)
-       ("python-pyopenssl" ,python-pyopenssl)
-       ("python-pytest" ,python-pytest)
-       ("python-sphinx" ,python-sphinx)
-       ("python-twisted" ,python-twisted)))
+     (list python-certifi
+           python-coverage
+           python-pretend
+           python-pyopenssl
+           python-pytest
+           python-sphinx
+           python-twisted))
     (home-page "https://pem.readthedocs.io/")
     (synopsis "Easy PEM file parsing in Python")
     (description
@@ -24856,9 +25660,7 @@ happened, and what caused it.")
            "0imfxx4yjj1lbq0n5ad45al3wvv4qv96sivnc1r51i66mxi658z8"))))
       (build-system python-build-system)
       (propagated-inputs
-       `(("python-pyopenssl" ,python-pyopenssl)
-         ("python-service-identity" ,python-service-identity)
-         ("python-twisted" ,python-twisted)))
+       (list python-pyopenssl python-service-identity python-twisted))
       (synopsis "Run TLS servers with Twisted")
       (description
        "This package provides an easy-to-use SNI endpoint for use
@@ -24877,23 +25679,22 @@ with the Twisted web framework.")
         (base32 "1cplx4llq7i508w6fgwjdv9di7rsz9k9irfmzdfbiz6q6a0ykf1d"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-acme" ,python-acme)
-       ("python-attrs" ,python-attrs)
-       ("python-eliot" ,python-eliot)
-       ("python-josepy" ,python-josepy)
-       ("python-pem" ,python-pem)
-       ("python-treq" ,python-treq)
-       ("python-twisted" ,python-twisted)
-       ("python-txsni" ,python-txsni)))
-    (native-inputs
-     `(("python-fixtures" ,python-fixtures)
-       ("python-hypothesis" ,python-hypothesis)
-       ("python-mock" ,python-mock)
-       ("python-service-identity"
-        ,python-service-identity)
-       ("python-testrepository" ,python-testrepository)
-       ("python-testscenarios" ,python-testscenarios)
-       ("python-testtools" ,python-testtools)))
+     (list python-acme
+           python-attrs
+           python-eliot
+           python-josepy
+           python-pem
+           python-treq
+           python-twisted
+           python-txsni))
+    (native-inputs
+     (list python-fixtures
+           python-hypothesis
+           python-mock
+           python-service-identity
+           python-testrepository
+           python-testscenarios
+           python-testtools))
     (home-page "https://github.com/twisted/txacme")
     (synopsis "Twisted implexmentation of the ACME protocol")
     (description
@@ -24919,16 +25720,15 @@ networking engine for Python.")
          "1xk2x0slz1f8cqv7vn77qx99xfd1mshhswiwrljk9m72w2m9iivd"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-cryptography" ,python-cryptography)
-       ("python-dateutil" ,python-dateutil)
-       ("python-defusedxml" ,python-defusedxml)
-       ("python-importlib-resources"
-        ,python-importlib-resources)
-       ("python-pyopenssl" ,python-pyopenssl)
-       ("python-pytz" ,python-pytz)
-       ("python-requests" ,python-requests)
-       ("python-six" ,python-six)
-       ("python-xmlschema" ,python-xmlschema)))
+     (list python-cryptography
+           python-dateutil
+           python-defusedxml
+           python-importlib-resources
+           python-pyopenssl
+           python-pytz
+           python-requests
+           python-six
+           python-xmlschema))
     (home-page "https://idpy.org")
     (synopsis "Python implementation of SAML Version 2 Standard")
     (description
@@ -24952,9 +25752,9 @@ there are extensions that allow you to use it with other frameworks.")
         (base32 "0jr6bxj67vg988vkm6nz8jj98v9lg46bn49lkhak3n598jbrkas6"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (propagated-inputs
-     `(("python-click" ,python-click)))
+     (list python-click))
     (synopsis "Extension for Click to register external CLI commands")
     (description "This package provides n extension module for Click to
 register external CLI commands via setuptools entry-points.")
@@ -24974,9 +25774,7 @@ register external CLI commands via setuptools entry-points.")
          "0klb0ysybzlh2wihvir82hgq62v0jjmlcqklwajyms7c0p529yby"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-coverage python-pytest python-pytest-runner))
     (home-page "https://github.com/ulif/diceware/")
     (synopsis "Generates memorable passphrases")
     (description "This package generates passphrases by concatenating words
@@ -24988,27 +25786,20 @@ cryptographically signed ones).")
 (define-public python-dictdiffer
   (package
     (name "python-dictdiffer")
-    (version "0.8.1")
+    (version "0.9.0")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "dictdiffer" version))
               (sha256
                (base32
-                "1lk3qmy1hkaphk4n7ayfk0wl6m2yvd6r7qkam6yncqfzgkbc1phs"))))
+                "0y3mk74qm2q9hsm37892i1wzn8bbdrvbs4nmnvqwq4z6pxgwzfhp"))))
     (build-system python-build-system)
+    (arguments
+     ;; XXX: The PyPI tarball lacks tests and the git repository
+     ;; fails to determine version.
+     '(#:tests? #f))
     (native-inputs
-     `(("python-check-manifest" ,python-check-manifest)
-       ("python-coverage" ,python-coverage)
-       ("python-isort" ,python-isort)
-       ("python-mock" ,python-mock)
-       ("python-pydoctstyle" ,python-pydocstyle)
-       ("python-pytest-cache" ,python-pytest-cache)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-pep8" ,python-pytest-pep8)
-       ("python-pytest-runner" ,python-pytest-runner)
-       ("python-pytest" ,python-pytest)
-       ("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-tox" ,python-tox)))
+     (list python-pytest-runner python-setuptools-scm))
     (home-page "https://github.com/inveniosoftware/dictdiffer")
     (synopsis "Diff and patch Python dictionary objects")
     (description
@@ -25019,13 +25810,17 @@ dictionaries.")
 (define-public pyzo
   (package
     (name "pyzo")
-    (version "4.11.2")
+    (version "4.12.0")
     (source
      (origin
-       (method url-fetch)
-       (uri (pypi-uri "pyzo" version))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/pyzo/pyzo.git")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
        (sha256
-        (base32 "1jk5f79lj09vnsdk9h01w21p9h49z2hhf8xhkx8471pjbg9vrlzr"))))
+        (base32
+         "0ndiplnz2d5qc6ppjhfwl4zswn79q6732s4vlkaw8xwc3kjrql5b"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -25033,13 +25828,12 @@ dictionaries.")
          (add-before 'check 'fix-home-directory
            (lambda _
              ;; Tests fail with "Permission denied: '/homeless-shelter'".
-             (setenv "HOME" "/tmp")
-             #t)))
+             (setenv "HOME" "/tmp"))))
        ;; Tests fail with "Uncaught Python exception: python: undefined
        ;; symbol: objc_getClass".
        #:tests? #f))
     (propagated-inputs
-     `(("python-pyqt" ,python-pyqt)))
+     (list python-pyqt))
     (home-page "https://pyzo.org")
     (synopsis
      "Python IDE for scientific computing")
@@ -25087,7 +25881,7 @@ Open Sound Control 1.0} specification.")
             "0mplkcpb5d8wjf8vk195fys4y6a3wbibiyf708imw33lphfk9g1a"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (home-page "https://github.com/alecthomas/voluptuous")
     (synopsis "Python data validation library")
     (description
@@ -25098,37 +25892,35 @@ intended for validating data coming into Python as JSON, YAML, etc.")
 (define-public python-cmd2
   (package
     (name "python-cmd2")
-    (version "1.0.2")
+    (version "2.3.3")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "cmd2" version))
        (sha256
         (base32
-         "1f18plbc9yyvhn0js3d2bii9yld8zfl775gxsaw9jza5pmlg9ss2"))))
+         "0h1naik558qh48gx2iyy0a0khvw5fz0in69y84mbrhsm9nq7w3bm"))))
     (build-system python-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (if tests?
+                 (invoke "pytest" "-vv" "-k"
+                         ;; These tests fail because no EDITOR is in PATH.
+                         "not test_find_editor_not_specified \
+and not test_transcript")
+                 (format #t "test suite not run~%")))))))
     (propagated-inputs
-     `(("python-attrs" ,python-attrs)
-       ("python-colorama" ,python-colorama)
-       ("python-pyperclip" ,python-pyperclip)
-       ("python-wcwidth" ,python-wcwidth)))
+     (list python-attrs python-colorama python-pyperclip python-wcwidth))
     (native-inputs
-     `(("python-codecov" ,python-codecov)
-       ("python-coverage" ,python-coverage)
-       ("python-doc8" ,python-doc8)
-       ("python-flake8" ,python-flake8)
-       ("python-invoke" ,python-invoke)
-       ("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-mock" ,python-pytest-mock)
-       ("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-sphinx" ,python-sphinx)
-       ("python-sphinx-autobuild" ,python-sphinx-autobuild)
-       ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
-       ("python-tox" ,python-tox)
-       ("python-twine" ,python-twine)
-       ("which" ,which)))
+     (list python-invoke
+           python-mock
+           python-pytest
+           python-pytest-cov
+           python-pytest-mock
+           python-setuptools-scm))
     (home-page "https://github.com/python-cmd2/cmd2")
     (synopsis "Tool for building interactive command line applications")
     (description
@@ -25157,13 +25949,12 @@ be necessary when using @code{cmd}.")
        (modify-phases %standard-phases
          (add-before 'build 'qualify-libtidy
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((libtidy (string-append (assoc-ref inputs "tidy")
-                                           "/lib/libtidy.so")))
+             (let ((libtidy (search-input-file inputs "/lib/libtidy.so")))
                (substitute* "tidylib/tidy.py"
                  (("ctypes\\.util\\.find_library\\('tidy'\\)")
                   (format #f "'~a'" libtidy)))
                #t))))))
-    (inputs `(("tidy" ,tidy)))
+    (inputs (list tidy))
     (home-page "https://github.com/countergram/pytidylib")
     (synopsis "Python wrapper for HTML Tidy library")
     (description
@@ -25251,7 +26042,7 @@ For the most part it's transliterated from C, the major differences are:
                #t))))
        #:tests? #f)) ; _curses.error: setupterm: could not find terminal
     (native-inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (home-page "https://github.com/Rockhopper-Technologies/jinxed")
     (synopsis "Jinxed Terminal Library")
     (description
@@ -25271,7 +26062,7 @@ For the most part it's transliterated from C, the major differences are:
          "0lz0w2ajdvwd269a7ppnzawmx8px0116j0nx8xvhlihxrd28zx4y"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-lxml" ,python-lxml)))
+     (list python-lxml))
     (home-page "https://svgutils.readthedocs.io")
     (synopsis "Python SVG editor")
     (description "This is an utility package that helps with editing and
@@ -25298,12 +26089,9 @@ placement and scaling of SVG figures and adding markers, such as labels.")
             (delete-file "blessed/win_terminal.py") #t))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-jinxed" ,python-jinxed)
-       ("python-six" ,python-six)
-       ("python-wcwidth" ,python-wcwidth)))
+     (list python-jinxed python-six python-wcwidth))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)))
+     (list python-mock python-pytest))
     (home-page "https://github.com/jquast/blessed")
     (synopsis "Wrapper around terminal capabilities")
     (description
@@ -25314,23 +26102,33 @@ positioning, and keyboard input.")
 (define-public python-readme-renderer
   (package
     (name "python-readme-renderer")
-    (version "26.0")
+    (version "32.0")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "readme_renderer" version))
         (sha256
          (base32
-          "13fnrv7z3y0yfafzcjbl55cqxncvbxadr72ql4l29pgyvrqxpsfb"))))
+          "11av194kgq6mvp2afpapkb6vyn3y14gingmgsp3n10krlspvw4mm"))))
     (build-system python-build-system)
+    (arguments
+     '(#:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'loosen-cmarkgfm-dependency
+                    (lambda _
+                      ;; Permit newer versions of cmarkgfm.
+                      (substitute* "setup.py"
+                        (("cmarkgfm>=0\\.5\\.0,<0\\.7\\.0")
+                         "cmarkgfm>=0.5.0"))))
+                  (replace 'check
+                    (lambda* (#:key tests? #:allow-other-keys)
+                      (when tests? (invoke "pytest" "-vv")))))))
     (propagated-inputs
-     `(("python-bleach" ,python-bleach)
-       ("python-docutils" ,python-docutils)
-       ("python-pygments" ,python-pygments)
-       ("python-six" ,python-six)))
+     (list python-bleach python-docutils python-pygments
+
+           ;; Optional dependencies.
+           python-cmarkgfm))           ;required by postorius
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)))
+     (list python-mock python-pytest))
     (home-page "https://github.com/pypa/readme_renderer")
     (synopsis "Render README files in Warehouse")
     (description
@@ -25356,12 +26154,12 @@ and plain text.")
      '(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda _
-             (invoke "python" "setup.py" "nosetests"))))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests? (invoke "nosetests")))))))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (propagated-inputs
-     `(("python-zope-interface" ,python-zope-interface)))
+     (list python-zope-interface))
     (home-page "https://launchpad.net/lazr.delegates")
     (synopsis "Easily write objects that delegate behavior")
     (description
@@ -25374,14 +26172,14 @@ and delegating behavior.")
 (define-public python-lazr-config
   (package
     (name "python-lazr-config")
-    (version "2.2.2")
+    (version "2.2.3")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "lazr.config" version))
         (sha256
          (base32
-          "11xpddgyhyj7sf27wbmrq5lnqk21wnprx3ajycgwlxjamh6sgffd"))))
+          "1qdbrzl61q7cjhbnxvw9y3frcr935y7diwy15xrwcv9ynvw76jmp"))))
     (build-system python-build-system)
     (arguments
      '(#:phases
@@ -25390,10 +26188,9 @@ and delegating behavior.")
            (lambda _
              (invoke "python" "-s" "-m" "nose" "-P" "lazr"))))))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (propagated-inputs
-     `(("python-lazr-delegates" ,python-lazr-delegates)
-       ("python-zope-interface" ,python-zope-interface)))
+     (list python-lazr-delegates python-zope-interface))
     (home-page "https://launchpad.net/lazr.config")
     (synopsis "Create configuration schemas and process and validate configurations")
     (description
@@ -25408,20 +26205,28 @@ validation.")
 (define-public python-flufl-bounce
   (package
     (name "python-flufl-bounce")
-    (version "3.0.1")
+    (version "4.0")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "flufl.bounce" version))
         (sha256
          (base32
-          "01lg1b0jpf8605mzaz9miq3nray6s7a7gc8n4wzg5nsxl8fglcp4"))))
+          "0c9qc2l47lyqnpwskp6vvi7m3jqh6hx42v6d35dgxh3fjzmlll15"))))
     (build-system python-build-system)
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (replace 'check
+                 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+                   (when tests?
+                     (with-directory-excursion
+                         (string-append (site-packages inputs outputs) "/flufl")
+                       (invoke "python" "-m" "nose2" "-v"))))))))
     (propagated-inputs
-     `(("python-atpublic" ,python-atpublic)
-       ("python-zope-interface" ,python-zope-interface)))
+     (list python-atpublic python-zope-interface))
     (native-inputs
-     `(("python-nose2" ,python-nose2)))
+     (list python-flufl-testing python-nose2))
     (home-page "https://fluflbounce.readthedocs.io/en/latest/")
     (synopsis "Email bounce detectors")
     (description "The @code{flufl.bounce} library provides a set of heuristics
@@ -25444,7 +26249,7 @@ RFC 3464.")
           "1flwpn1xhgc957zj3zxw92dhdjh0lsy0hdvzq32dzqpsajfsvq1r"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-atpublic" ,python-atpublic)))
+     (list python-atpublic))
     (home-page "https://flufli18n.readthedocs.io")
     (synopsis "API for Python internationalization")
     (description
@@ -25470,8 +26275,7 @@ different tasks.")
           "055941zyma3wfx25jhm8wcsghpv3jc3iwi1gdrdjhzcnfhn62lxq"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-atpublic" ,python-atpublic)
-       ("python-psutil" ,python-psutil)))
+     (list python-atpublic python-psutil))
     (home-page "https://flufllock.readthedocs.io")
     (synopsis "NFS-safe file locking with timeouts for POSIX systems")
     (description
@@ -25494,8 +26298,7 @@ and have a maximum lifetime built-in.")
          (base32
           "1nkm95mhcfhl4x5jgs6y97ikszaxsfh07nyawsih6cxxm6l62641"))))
     (build-system python-build-system)
-    (native-inputs
-     `(("python-nose2" ,python-nose2)))
+    (arguments '(#:tests? #f))          ;no tests
     (home-page "https://gitlab.com/warsaw/flufl.testing")
     (synopsis "Collection of test tool plugins")
     (description
@@ -25518,10 +26321,9 @@ and have a maximum lifetime built-in.")
         (base32 "15zczdcm90wl54c68f1qjb05nkd5bjsc9xjl3lk4frs7k7wkmrvp"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-mock" ,python-pytest-mock)))
+     (list python-pytest python-pytest-mock))
     (propagated-inputs
-     `(("python-pygments" ,python-pygments)))
+     (list python-pygments))
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (replace 'check
@@ -25548,15 +26350,10 @@ It adds a simple and readable way to print stuff during development.")
          "1ypbyqxlk7n6zibk90js3ybz37xmin3kk0i35g8c51bwqpcfyxg8"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-pytz" ,python-pytz)
-       ("python-regex" ,python-regex)
-       ("python-ruamel.yaml" ,python-ruamel.yaml)
-       ("python-tzlocal" ,python-tzlocal)))
+     (list python-dateutil python-pytz python-regex python-ruamel.yaml
+           python-tzlocal))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-parameterized" ,python-parameterized)
-       ("tzdata" ,tzdata-for-tests)))
+     (list python-mock python-parameterized tzdata-for-tests))
     (arguments
      `(;; TODO: Of 23320 tests, 6 fail and 53 error.
        #:tests? #f
@@ -25566,9 +26363,8 @@ It adds a simple and readable way to print stuff during development.")
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "TZ" "UTC")
              (setenv "TZDIR"
-                     (string-append (assoc-ref inputs "tzdata")
-                                    "/share/zoneinfo"))
-             #t)))))
+                     (search-input-directory inputs
+                                             "share/zoneinfo")))))))
     (home-page "https://github.com/scrapinghub/dateparser")
     (synopsis
      "Date parsing library designed to parse dates from HTML pages")
@@ -25590,11 +26386,9 @@ dates in almost any string formats commonly found on web pages.")
             "0rzkg3nymsbwdjc0ms2bsajkda02jipwyp3xk97qj71f21lz3dd1"))))
     (build-system python-build-system)
     (native-inputs
-      `(("python-pytest" ,python-pytest)))
+      (list python-pytest))
     (propagated-inputs
-      `(("python-packaging" ,python-packaging)
-        ("python-pyyaml" ,python-pyyaml)
-        ("python-toml" ,python-toml)))
+      (list python-packaging python-pyyaml python-toml))
     (home-page "https://github.com/pyupio/dparse")
     (synopsis "Parser for Python dependency files")
     (description "This package provides a parser for Python dependency files.")
@@ -25613,9 +26407,7 @@ dates in almost any string formats commonly found on web pages.")
          "1ymi9ssk7i0mx3mviplf4csfvzibdd6wyj4qzj6s487n9xgnp85y"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-hypothesis" ,python-hypothesis)
-       ("python-mock" ,python-mock)
-       ("python-nose" ,python-nose)))
+     (list python-hypothesis python-mock python-nose))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -25658,10 +26450,7 @@ facility for filtering those results.")
                (("def test_check_live") "def _test_check_live"))
              #t)))))
     (propagated-inputs
-      `(("python-click" ,python-click)
-        ("python-dparse" ,python-dparse)
-        ("python-packaging" ,python-packaging)
-        ("python-requests" ,python-requests)))
+      (list python-click python-dparse python-packaging python-requests))
     (home-page "https://github.com/pyupio/safety")
     (synopsis "Check installed dependencies for known vulnerabilities")
     (description "Safety checks installed dependencies for known vulnerabilities.
@@ -25671,25 +26460,25 @@ By default it uses the open Python vulnerability database Safety DB.")
 (define-public python-pypandoc
   (package
     (name "python-pypandoc")
-    (version "1.5")
+    (version "1.6.4")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pypandoc" version))
        (sha256
         (base32
-         "1zvn9764cf7kkjkmr9gw6wc8adpk06qxr1rhxwa9pg0zmdvrk90l"))))
+         "149basv4pvzg9zm74cjz68x8s2n5fykyj7prgysb0qfmja73r83f"))))
     (build-system python-build-system)
     (inputs
-     `(("pandoc" ,pandoc)
-       ("pandoc-citeproc" ,pandoc-citeproc)))
+     (list pandoc))
     (propagated-inputs
      `(("wheel" ,python-wheel)))
     (native-inputs
-     `(("texlive" ,(texlive-union (list texlive-amsfonts/patched
+     `(("texlive" ,(texlive-updmap.cfg (list texlive-amsfonts
                                         texlive-fonts-ec
-                                        texlive-latex-hyperref
-                                        texlive-latex-oberdiek
+                                        texlive-generic-iftex
+                                        texlive-hyperref
+                                        texlive-oberdiek
                                         texlive-lm
                                         texlive-xcolor)))))
     (arguments
@@ -25701,8 +26490,6 @@ By default it uses the open Python vulnerability database Safety DB.")
              (substitute* "tests.py"
                (("test_basic_conversion_from_http_url")
                 "skip_test_basic_conversion_from_http_url"))
-             ;; Needed by texlive-union to generate fonts
-             (setenv "HOME" "/tmp")
              #t)))))
     (home-page "https://github.com/bebraw/pypandoc")
     (synopsis "Python wrapper for pandoc")
@@ -25723,7 +26510,7 @@ and pandoc-citeproc.")
          "1kmp3iwxxyzjsd47j2sprd47ihhkwhb3yydih3af5bbfq0ibh1w8"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-rply" ,python-rply)))
+     (list python-rply))
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (replace 'check
@@ -25760,12 +26547,9 @@ equivalent schemata in the XML-based default RELAX NG syntax.")
                (invoke "py.test" "-v"))
              #t)))))
     (propagated-inputs
-     `(("python-rsa" ,python-rsa)
-       ("python-pyaes" ,python-pyaes)))
+     (list python-rsa python-pyaes))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-asyncio" ,python-pytest-asyncio)
-       ("python-pytest-trio" ,python-pytest-trio)))
+     (list python-pytest python-pytest-asyncio python-pytest-trio))
     (home-page "https://docs.telethon.dev")
     (synopsis "Full-featured Telegram client library for Python 3")
     (description "This library is designed to make it easy to write Python
@@ -25785,8 +26569,7 @@ programs that can interact with Telegram.")
          "00aaff50jy4j0nakdzq9258z1gzrac9baarli2ymgspj88jg5968"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-lxml" ,python-lxml)
-       ("python-rnc2rng" ,python-rnc2rng)))
+     (list python-lxml python-rnc2rng))
     (home-page
      "https://github.com/brechtm/citeproc-py")
     (synopsis "Citations and bibliography formatter")
@@ -25812,12 +26595,9 @@ are plain text, reStructuredText and HTML.")
     (arguments
      `(#:tests? #f))  ; PyPI tarball lacks tests
     (native-inputs
-      `(("python-hypothesis" ,python-hypothesis)
-        ("python-pytest-cov" ,python-pytest-cov)
-        ("python-pytest-runner" ,python-pytest-runner)))
+      (list python-hypothesis python-pytest-cov python-pytest-runner))
     (propagated-inputs
-      `(("python-arrow" ,python-arrow)
-        ("python-six" ,python-six)))
+      (list python-arrow python-six))
     (home-page "https://inform.readthedocs.io")
     (synopsis "Print & logging utilities for communicating with user")
     (description
@@ -25841,7 +26621,7 @@ cleanly print different types of messages.")
     (arguments
      `(#:tests? #f))  ; PyPI tarball lacks tests
     (propagated-inputs
-      `(("python-inform" ,python-inform)))
+      (list python-inform))
     (home-page "https://nestedtext.org")
     (synopsis "Human readable and writable data interchange format")
     (description
@@ -25902,9 +26682,7 @@ module patches @code{asyncio} to allow nested use of @code{asyncio.run} and
                (invoke "pytest" "--maxfail" "3" "--verbose"))
              #t)))))
     (native-inputs
-     `(("python-aiohttp" ,python-aiohttp)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-asyncio" ,python-pytest-asyncio)))
+     (list python-aiohttp python-pytest python-pytest-asyncio))
     (home-page "https://github.com/yuvipanda/simpervisor")
     (synopsis "Simple async process supervisor")
     (description
@@ -25925,7 +26703,7 @@ module patches @code{asyncio} to allow nested use of @code{asyncio.run} and
         (base32
          "1mzk4yabxj6r149fswhis18hd8dnag5sj8i4wb06450zq3pi8dh7"))))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (build-system python-build-system)
     (arguments '(#:tests? #f))  ; No test suite.
     (home-page "https://www.parallelpython.com")
@@ -25953,12 +26731,9 @@ applications with variable CPU loads).")
         (base32 "089smpq29ll0z37lnq26r2f72d31i33xm9fw9pc6hlcsm6nbjbiv"))))
     (build-system python-build-system)
     (native-inputs
-     `(("ghostscript" ,ghostscript)
-       ("pkg-config" ,pkg-config)
-       ("python-nose" ,python-nose)))
+     (list ghostscript pkg-config python-nose))
     (inputs
-     `(("djvulibre" ,djvulibre)
-       ("python-cython" ,python-cython)))
+     (list djvulibre python-cython))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -25979,14 +26754,15 @@ applications with variable CPU loads).")
 (define-public python-versioneer
   (package
     (name "python-versioneer")
-    (version "0.19")
+    (version "0.21")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "versioneer" version))
        (sha256
         (base32
-         "1bmg8y78am371rd9b4clf11b8g1h7xvq8q58z03jvgdwpsdx7zm4"))))
+         "084fglxafbzvf1vbkzfajvs9qwnvjwwn8pxql9nrlpyipv5xpwk4"))
+       (patches (search-patches "python-versioneer-guix-support.patch"))))
     (build-system python-build-system)
     (home-page
      "https://github.com/python-versioneer/python-versioneer")
@@ -26020,12 +26796,16 @@ process.")
                        "src/zlib-1.2.8"))))))
     (build-system python-build-system)
     (inputs
-     `(("libpng" ,libpng)
-       ("libtiff" ,libtiff)
-       ("python2-wxpython" ,python2-wxpython)
-       ("zlib" ,zlib)))
+     (list libpng libtiff zlib))
     (arguments
-     `(#:python ,python-2))
+     `(#:python ,python-2
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'disable-wx-support
+           (lambda _
+             (substitute* "setup.py"
+               (("no_wx = False")
+                "no_wx = True")))))))
     (synopsis "Framework for building document analysis applications")
     (description
      "Gamera is a toolkit for building document image recognition systems.")
@@ -26045,7 +26825,7 @@ process.")
             "17n3w8c20kgkgc6khaafdhhlcdj4bzman4paxqsl7harma59137k"))))
     (build-system python-build-system)
     (propagated-inputs
-      `(("python-immutables" ,python-immutables)))
+      (list python-immutables))
     (home-page
       "https://github.com/MagicStack/contextvars")
     (synopsis "PEP 567 Backport")
@@ -26084,9 +26864,7 @@ disk files in asyncio applications.")
             "0c5cbbqrfyjwakdh3kbwxis6mbrbwky1z1fqslgszgpcj4g43q30"))))
     (build-system python-build-system)
     (propagated-inputs
-      `(("python-typing-extensions"
-         ,python-typing-extensions)
-        ("python-typing-inspect" ,python-typing-inspect)))
+      (list python-typing-extensions python-typing-inspect))
     (home-page "https://pyre-check.org")
     (synopsis
      "Type system extensions for use with @code{python-pyre}")
@@ -26137,6 +26915,24 @@ backport of the @code{dataclasses} module for Python 3.6.")
 query Watchman to discover file changes.")
     (license license:bsd-3)))
 
+(define-public python-roundrobin
+  (package
+    (name "python-roundrobin")
+    (version "0.0.2")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "roundrobin" version))
+              (sha256
+               (base32 "1akwhvfyi0120zg2xkhfc6jwfkirz5x90yyvw06bndhaaxwcnc5c"))))
+    (build-system python-build-system)
+    (arguments '(#:tests? #f))          ;no tests on PyPI and no tags in repo
+    (home-page "https://github.com/linnik/roundrobin")
+    (synopsis "Collection of roundrobin utilities")
+    (description
+     "This package provides a collection of utilities for round-robin
+distribution in Python.")
+    (license license:expat)))
+
 (define-public python-helpdev
   (package
     (name "python-helpdev")
@@ -26159,9 +26955,9 @@ query Watchman to discover file changes.")
                (invoke "pytest" "tests"))
              #t)))))
     (propagated-inputs
-     `(("python-importlib-metadata" ,python-importlib-metadata)))
+     (list python-importlib-metadata))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://gitlab.com/dpizetta/helpdev")
     (synopsis
      "Extract information about the Python environment easily")
@@ -26203,10 +26999,9 @@ older versions of Python and so are packaged here.")
                 "1d2j64wgbggzv5rhvil10zndp2w78wa5np5w0psj122ws9qr9wsa"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-mock" ,python-mock)))
+     (list python-mock))
     (propagated-inputs
-     `(("python-logutils" ,python-logutils)
-       ("python-pyyaml" ,python-pyyaml)))
+     (list python-logutils python-pyyaml))
     (home-page "https://github.com/gmr/helper")
     (synopsis "Library for writing configurable applications and daemons")
     (description
@@ -26239,11 +27034,9 @@ applications and daemons.")
              (for-each make-file-writable (find-files "."))
              #t)))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-pytest python-pytest-cov python-pytest-runner))
     (propagated-inputs
-     `(("python-libsass" ,python-libsass)))
+     (list python-libsass))
     (home-page "https://github.com/spyder-ide/qtsass")
     (synopsis "Compile SCSS files to valid Qt stylesheets")
     (description
@@ -26272,8 +27065,7 @@ handling those variations.")
        ;; added as native-inputs.
        #:tests? #f))
     (propagated-inputs
-     `(("python-helpdev" ,python-helpdev)
-       ("python-qtpy" ,python-qtpy)))
+     (list python-helpdev python-qtpy))
     (home-page
      "https://github.com/ColinDuquesnoy/QDarkStyleSheet")
     (synopsis
@@ -26305,7 +27097,7 @@ Qt applications.")
                  (invoke "pytest")))
              #t)))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/scott-griffiths/bitstring")
     (synopsis
      "Simple construction, analysis and modification of binary data")
@@ -26327,7 +27119,7 @@ Qt applications.")
          "0bh2kyj8wd7h9gg4nsvrbykl5ly0f70f0wi3fbm204b1f0fcmywj"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pyyaml" ,python-pyyaml)))
+     (list python-pyyaml))
     (home-page "https://github.com/beetbox/confuse")
     (synopsis "Painless YAML configuration")
     (description "Confuse is a configuration library for Python that uses
@@ -26350,10 +27142,9 @@ integration, human-readable errors, and standard OS-specific locations.")
     (arguments
      `(#:tests? #false)) ; almost all tests want to run mkfs.btrfs
     (propagated-inputs
-     `(("python-cffi" ,python-cffi)))
+     (list python-cffi))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-pytest python-pytest-runner))
     (home-page "https://gitlab.com/rubdos/pyreflink")
     (synopsis "Python wrapper around reflink system call")
     (description
@@ -26361,6 +27152,31 @@ integration, human-readable errors, and standard OS-specific locations.")
 implementations.")
     (license license:expat)))
 
+(define-public python-retry
+  (package
+    (name "python-retry")
+    (version "0.9.2")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "retry" version))
+              (sha256
+               (base32 "197v6qrh6858bhzzrjgk2zdqrybppymb1lsvdxnm1i39kfwsigzq"))))
+    (build-system python-build-system)
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (replace 'check
+                 (lambda* (#:key tests? #:allow-other-keys)
+                   (when tests? (invoke "pytest" "-vv")))))))
+    (native-inputs (list python-pbr python-pytest))
+    (propagated-inputs (list python-decorator python-py))
+    (home-page "https://github.com/invl/retry")
+    (synopsis "Retry decorator")
+    (description
+     "@code{retry} is an easy to use retry decorator for Python.  It can be
+used to retry a function a given number of times.")
+    (license license:asl2.0)))
+
 (define-public python-pivy
   (package
     (name "python-pivy")
@@ -26388,16 +27204,15 @@ implementations.")
                            "${Coin_INCLUDE_DIR};${SoQt_INCLUDE_DIRS}"))
              #t)))))
     (native-inputs
-      `(("cmake" ,cmake)
-        ("swig" ,swig)))
+      (list cmake swig))
     (inputs
-      `(("python-wrapper" ,python-wrapper)
-        ("qtbase" ,qtbase-5)
-        ("libxi" ,libxi)
-        ("libice" ,libice)
-        ("soqt" ,soqt)
-        ("glew" ,glew)
-        ("coin3D" ,coin3D-4)))
+      (list python-wrapper
+            qtbase-5
+            libxi
+            libice
+            soqt
+            glew
+            coin3D-4))
     (home-page "https://github.com/coin3d/pivy")
     (synopsis "Python bindings to Coin3D")
     (description
@@ -26418,7 +27233,7 @@ Application Programming Interface based on the Open Inventor 2.1 API.")
           "0gw106k4b6y8mw7pp52awxyplj2bwvwk315k4sywzwh0g1abfcxx"))))
     (build-system python-build-system)
     (propagated-inputs
-      `(("python-colorama" ,python-colorama)))
+      (list python-colorama))
     (home-page "https://github.com/MasterOdin/crayons")
     (synopsis "TextUI colors for Python")
     (description "This package gives you colored strings for the terminal.
@@ -26439,9 +27254,9 @@ restores the original state after the string is printed.")
          "1pi597z94n2mkd821ln52fq0g727n2jxfskf280ip3kf7jw8w294"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (inputs
-     `(("sane-backends" ,sane-backends)))
+     (list sane-backends))
     (home-page "https://github.com/python-pillow/Sane")
     (synopsis "Python interface to the SANE scanner")
     (description "This package provides Python interface to the SANE scanner
@@ -26483,25 +27298,25 @@ and frame grabber interface.")
             (lambda* (#:key outputs #:allow-other-keys)
               (wrap-program
                   (string-append (assoc-ref outputs "out") "/bin/screenkey")
-                `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH")))
+                `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH")))
                 `("GI_TYPELIB_PATH"
-                  ":" prefix (,(getenv "GI_TYPELIB_PATH"))))
-              #t)))))
+                  ":" prefix (,(getenv "GI_TYPELIB_PATH")))))))))
     (inputs
-     `(("python-distutils-extra" ,python-distutils-extra)
-       ("python-tokenize-rt" ,python-tokenize-rt)
-       ("libx11" ,libx11)
-       ("libxtst" ,libxtst)
-       ("gtk+" ,gtk+)
-       ("python-pygobject" ,python-pygobject)
-       ("python-pycairo" ,python-pycairo)
-       ("python-setuptools-git" ,python-setuptools-git)
-       ("python-babel" ,python-babel)))
+     (list python-distutils-extra
+           python-tokenize-rt
+           libx11
+           libxtst
+           gtk+
+           python-pygobject
+           python-pycairo
+           python-setuptools-git
+           python-babel))
     (home-page "https://www.thregr.org/~wavexx/software/screenkey/")
     (synopsis
       "Screencast tool to display pressed keys")
     (description
-      "A screencast tool to display your keys inspired by Screenflick.")
+      "Screenkey is a screencast tool to display your keys inspired by
+Screenflick.")
     (license license:gpl3+)))
 
 (define-public python-jinja2-cli
@@ -26517,11 +27332,9 @@ and frame grabber interface.")
             "0vikx7v6fbvww6kfrv0k5a24jyv3ak7nindg60906pdd1m9qvkcw"))))
     (build-system python-build-system)
     (propagated-inputs
-      `(("python-jinja2" ,python-jinja2)))
+      (list python-jinja2))
     (native-inputs
-      `(("python-flake8" ,python-flake8)
-        ("python-jinja2" ,python-jinja2)
-        ("python-pytest" ,python-pytest)))
+      (list python-flake8 python-jinja2 python-pytest))
     (home-page "https://github.com/mattrobenolt/jinja2-cli")
     (synopsis "Command-line interface to Jinja2")
     (description
@@ -26599,9 +27412,7 @@ iGoogle subscription lists.")
              (invoke "nosetests" "-v" "--exclude=^load_tests$"))))))
     (native-inputs
      ;; For tests.
-     `(("python-docutils" ,python-docutils)
-       ("python-nose" ,python-nose)
-       ("python-pygments" ,python-pygments)))
+     (list python-docutils python-nose python-pygments))
     (home-page "https://github.com/leohemsted/smartypants.py")
     (synopsis "Translate punctuation characters into smart quotes")
     (description
@@ -26633,10 +27444,10 @@ entities
            (lambda _
              (invoke "nosetests" "-v"))))))
     (propagated-inputs
-     `(("python-smartypants" ,python-smartypants)))
+     (list python-smartypants))
     (native-inputs
      ;; For tests.
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (home-page "https://github.com/mintchaos/typogrify")
     (synopsis "Filters to transform text into typographically-improved HTML")
     (description
@@ -26659,7 +27470,7 @@ Django template systems, the filters can be used in any environment.")
          "1k4ydp5rgkv4985v459kcl06i1igjm1ywvh2vkbi9ck1zyyri1z5"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://github.com/nir0s/ld")
     (synopsis "OS platform information API")
     (description
@@ -26698,8 +27509,7 @@ runs on, such as a reliable machine-readable ID, or version information.")
                (invoke "pytest"))
              #t)))))
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-pytest" ,python-pytest)))
+     (list python-cython python-pytest))
     (home-page "https://github.com/scoder/quicktions")
     (synopsis "Fast fractions data type for rational numbers")
     (description
@@ -26724,10 +27534,7 @@ is the cythonized version of @code{fractions.Fraction}.")
     ;; 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)))
+     (list python-allpairspy python-click python-faker python-pytest))
     (home-page "https://github.com/thombashi/pathvalidate")
     (synopsis "Sanitize strings representing paths")
     (description
@@ -26768,9 +27575,7 @@ result.")
          "0rvdd2ikdr0yg6cx6594fdzn53cmdc0g0i6qsbcdq8i2kxjdpd5x"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-commonmark" ,python-commonmark)
-       ("python-docutils" ,python-docutils)
-       ("python-sphinx" ,python-sphinx)))
+     (list python-commonmark python-docutils python-sphinx))
     (arguments
      '(#:phases (modify-phases %standard-phases
                   (add-after 'unpack 'delete-test-sphinx
@@ -26780,8 +27585,8 @@ result.")
     (home-page "https://github.com/readthedocs/recommonmark")
     (synopsis "Docutils-compatibility bridge to CommonMark")
     (description
-     "This packages provides a docutils-compatibility bridge to CommonMark,
-enabling you to write CommonMark inside of Docutils & Sphinx projects.")
+     "This package provides a docutils-compatibility bridge to CommonMark that
+lets you write CommonMark inside of Docutils & Sphinx projects.")
     (license license:expat)))
 
 (define-public python-pyhull
@@ -26797,7 +27602,7 @@ enabling you to write CommonMark inside of Docutils & Sphinx projects.")
          "091sph52c4yk1jlm5w8xidxpzbia9r7s42bnb23q4m4b56ihmzyj"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (home-page "https://github.com/materialsvirtuallab/pyhull")
     (synopsis "Python wrapper to Qhull")
     (description
@@ -26854,20 +27659,19 @@ and BMI2).")
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "1yy62k3cjr6556nbp651w6v4hzl7kz4y75wy2dfqgndgbnixskx2"))))
+                  "1yy62k3cjr6556nbp651w6v4hzl7kz4y75wy2dfqgndgbnixskx2"))
+                (patches (search-patches "python-peachpy-determinism.patch"))))
       (build-system python-build-system)
       (arguments
        '(#:phases (modify-phases %standard-phases
                     (replace 'check
                       (lambda* (#:key tests? #:allow-other-keys)
                         (when tests?
-                          (invoke "python" "setup.py" "nosetests")))))))
+                          (invoke "nosetests")))))))
       (native-inputs
-       `(("python-nose" ,python-nose)
-         ("python-rednose" ,python-rednose)))
+       (list python-nose python-rednose python-setuptools))
       (propagated-inputs
-       `(("python-six" ,python-six)
-         ("python-opcodes" ,python-opcodes)))
+       (list python-six python-opcodes))
       (synopsis "Efficient assembly code generation in Python")
       (description
        "PeachPy is a Python framework for writing high-performance assembly kernels.
@@ -26880,6 +27684,53 @@ application binary interfaces (ABIs); it takes care of register allocation; it
 supports x86_64 instructions up to AVX-512 and SHA.")
       (license license:bsd-2))))
 
+(define-public python-sgmllib3k
+  (let ((commit "799964676f35349ca2dd04503e34c2b3ad522c0d")
+        (revision "1"))
+    (package
+      (name "python-sgmllib3k")
+      (version
+       (git-version "1.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/hsoft/sgmllib")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "0bzf6pv85dzfxfysm6zbj8m40hp0xzr9h8qlk4hp3nmy88rznqvr"))))
+      (build-system python-build-system)
+      (home-page "https://github.com/hsoft/sgmllib")
+      (synopsis "Python 3 port of sgmllib")
+      (description "This package provides an unmaintained port of sgmllib to
+Python 3.  It is used to parse text files formatted in @acronym{SGML,Standard
+Generalized Mark-up Language}.")
+      (license license:bsd-3))))
+
+(define-public python-cwcwidth
+  (package
+    (name "python-cwcwidth")
+    (version "0.1.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "cwcwidth" version))
+       (sha256
+        (base32
+         "1azrphpkcyggg38xvkfb9dpc4xmmm90p02kf8dkqd4d6j5w96aj8"))))
+    (build-system python-build-system)
+    (native-inputs
+     (list python-cython python-pytest python-setuptools-scm python-toml
+           python-wheel))
+    (home-page
+     "https://github.com/sebastinas/cwcwidth")
+    (synopsis "Python bindings for wc(s)width")
+    (description "This package provides bindings for wcwidth and wcswidth
+functions defined in POSIX.1-2001 and POSIX.1-2008.")
+    (license license:expat)))
+
 (define-public python-pyan3
   (package
     (name "python-pyan3")
@@ -26905,15 +27756,13 @@ supports x86_64 instructions up to AVX-512 and SHA.")
            (lambda* (#:key tests? #:allow-other-keys)
              (when tests?
                ;; Extend PYTHONPATH so the built package will be found.
-               (setenv "PYTHONPATH"
-                       (string-append (getcwd) ":" (getenv "PYTHONPATH")))
+               (setenv "GUIX_PYTHONPATH"
+                       (string-append (getcwd) ":" (getenv "GUIX_PYTHONPATH")))
                (invoke "pytest")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-wheel" ,python-wheel)))
+     (list python-pytest python-pytest-cov python-wheel))
     (propagated-inputs
-     `(("python-jinja2" ,python-jinja2)))
+     (list python-jinja2))
     (home-page "https://github.com/Technologicat/pyan")
     (synopsis "Offline call graph generator for Python 3")
     (description "Pyan takes one or more Python source files, performs
@@ -26922,6 +27771,176 @@ objects in the combined source, and how they define or use each other.  The
 graph can be output for rendering by GraphViz or yEd.")
     (license license:gpl2)))
 
+(define-public python-multipledispatch
+  (package
+    (name "python-multipledispatch")
+    (version "0.6.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "multipledispatch" version))
+       (sha256
+        (base32
+         "1slblghfjg9fdi9zpd7gmrkvfbv20nrdgnrymcnbky8bzm8i9ax7"))))
+    (build-system python-build-system)
+    (propagated-inputs (list python-six))
+    (home-page "https://github.com/mrocklin/multipledispatch/")
+    (synopsis "Multiple dispatch for Python based on pattern matching")
+    (description "This library provides an efficient mechanism for overloading
+function implementations based on the types of the arguments.")
+    (license license:bsd-3)))
+
+(define-public python-logical-unification
+  (package
+    (name "python-logical-unification")
+    (version "0.4.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "logical-unification" version))
+       (sha256
+        (base32
+         "0j57953hi7kg2rl0163vzjzsvzdyjimnklhx6idf5vaqqf1d3p1j"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     (list python-multipledispatch python-toolz))
+    (home-page "https://github.com/pythological/unification/")
+    (synopsis "Logical unification in Python for solving symbolic expressions")
+    (description "This library provides algorithms and data types for solving
+symbolic expressions in pure Python using the technique of logical unification.")
+    (license license:bsd-3)))
+
+(define-public python-cons
+  (package
+    (name "python-cons")
+    (version "0.4.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "cons" version))
+       (sha256
+        (base32
+         "0w9giq196wps7mbm47c4shdzs5yvwvqajqzkim2p92i51sm5qgvm"))))
+    (build-system python-build-system)
+    (native-inputs
+     (list python-pytest-6 python-toml))
+    (propagated-inputs
+     (list python-logical-unification))
+    (home-page "https://github.com/pythological/python-cons")
+    (synopsis "Cons cell data structures and related algorithms for Python")
+    (description
+     "This library implements algorithms and data structures for Lisp-style
+cons cells in Python.")
+    (license license:lgpl3+)))
+
+(define-public python-etuples
+  (package
+    (name "python-etuples")
+    (version "0.3.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "etuples" version))
+       (sha256
+        (base32
+         "0jhfyp177v37rl0i7wqfx7q6s5qkz027hl283d1x8d0vm3w0zqc8"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     (list python-cons python-multipledispatch))
+    (home-page "https://github.com/pythological/etuples")
+    (synopsis "S-expressions in Python")
+    (description
+     "This library implements eval'able S-expression in Python using tuple-like objects.")
+    (license license:asl2.0)))
+
+(define-public python-minikanren
+  (package
+    (name "python-minikanren")
+    (version "1.0.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/pythological/kanren")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0g7wfj5hxalwz7k1301nsjqhjpzsif1bj6wjm2x2kavlm2ypv9jc"))))
+    (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" "-v" "tests/" "kanren/"))
+                      #t)))))
+    (native-inputs
+     (list python-coveralls
+           python-pydocstyle
+           python-pytest
+           python-pytest-cov
+           python-pylint
+           python-black
+           python-sympy
+           python-versioneer
+           python-coverage
+           python-pre-commit))
+    (propagated-inputs
+     (list python-toolz python-cons python-multipledispatch
+           python-etuples python-logical-unification))
+    (home-page "https://github.com/pythological/kanren")
+    (synopsis "Relational logic programming in pure Python")
+    (description
+     "The minikanren library provides an algorithmic core for computer algebra
+systems in Python.")
+    (license license:bsd-3)))
+
+(define-public python-dotenv
+  (package
+    (name "python-dotenv")
+    (version "0.19.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "python-dotenv" version))
+       (sha256
+        (base32 "0pv5ygpr6syc6zkw21in4ysqs3k7qaxk9m1g5pzlafwm3silkpm5"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (setenv "PATH" (string-append (getenv "PATH") ":"
+                                             (assoc-ref outputs "out") "/bin"))
+               ;; Skip the ipython tests.
+               (delete-file "tests/test_ipython.py")
+               (invoke "python" "-m" "pytest")))))))
+    (propagated-inputs
+     (list python-click))
+    (native-inputs
+     (list python-mock python-pytest python-sh))
+    (home-page "https://github.com/theskumar/python-dotenv")
+    (synopsis "Setup environment variables according to .env files")
+    (description
+     "This package provides the @code{python-dotenv} Python module to read
+key-value pairs from a @code{.env} file and set them as environment variables.")
+    (license license:bsd-3)))
+
+(define-public python-dotenv-0.13.0
+  (package (inherit python-dotenv)
+    (name "python-dotenv")
+    (version "0.13.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "python-dotenv" version))
+       (sha256
+        (base32
+         "0x5dagmfn31phrbxlwacw3s4w5vibv8fxqc62nqcdvdhjsy0k69v"))))))
+
 (define-public date2name
   (let ((commit "6c8f37277e8ec82aa50f90b8921422be30c4e798")
         (revision "1"))
@@ -26970,7 +27989,7 @@ YYYY-MM-DD at the beginning of the file or directory name.")
         (base32 "19kli85q18p80nsn8fm4ql6axpr7bllfqg5chv2ywhr8zr8bssll"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-requests" ,python-requests)))
+     (list python-requests))
     (home-page
      "https://developers.braintreepayments.com/python/sdk/server/overview")
     (synopsis "Braintree Python Library")
@@ -26990,7 +28009,7 @@ Braintree Gateway.  Braintree is a US-based payments service provider.")
         (base32 "0pqdmpxbr8iq22b4css2gz5z6s01ddpzyj25x27kgbs2lp0f5phs"))))
     (build-system python-build-system)
     (home-page "https://github.com/tylerbakke/MarkupPy")
-    (synopsis "A pythonic HTML/XML generator")
+    (synopsis "Pythonic HTML/XML generator")
     (description "This Python module attempts to make it easier to generate
 HTML/XML from a Python program in an intuitive, lightweight, customizable and
 pythonic way.")
@@ -27013,23 +28032,21 @@ pythonic way.")
          (replace 'check
            (lambda* (#:key tests? #:allow-other-keys)
              (when tests?
-               (setenv "PYTHONPATH"
+               (setenv "GUIX_PYTHONPATH"
                        (string-append (getcwd) "/build/lib:"
-                                      (getenv "PYTHONPATH")))
+                                      (getenv "GUIX_PYTHONPATH")))
                (invoke "pytest")))))))
     (native-inputs
-     `(("python-pandas" ,python-pandas)  ;; required for test-suite
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-setuptools-scm" ,python-setuptools-scm)))
-    (propagated-inputs
-     `(("python-markuppy" ,python-markuppy)
-       ("python-odfpy" ,python-odfpy)
-       ("python-openpyxl" ,python-openpyxl)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-tabulate" ,python-tabulate)
-       ("python-xlrd" ,python-xlrd)
-       ("python-xlwt" ,python-xlwt)))
+     (list python-pandas ;; required for test-suite
+           python-pytest python-pytest-cov python-setuptools-scm))
+    (propagated-inputs
+     (list python-markuppy
+           python-odfpy
+           python-openpyxl
+           python-pyyaml
+           python-tabulate
+           python-xlrd
+           python-xlwt))
     (home-page "https://tablib.readthedocs.io")
     (synopsis "Format agnostic tabular data library")
     (description "@code{tablib} is a format-agnostic tabular dataset library,
@@ -27054,11 +28071,9 @@ install @code{python-pandas}.")
         (base32 "0r0csl9npncnkfafg3rg6xr38d1qr0sxvq7wn7mg9bq41hvvh1si"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-lxml" ,python-lxml)))
+     (list python-lxml))
     (propagated-inputs
-     `(("python-pycountry" ,python-pycountry)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-tablib" ,python-tablib)))
+     (list python-pycountry python-pyyaml python-tablib))
     (home-page "https://bitbucket.org/wmj/csb43")
     (synopsis "Tools for converting from the Spanish banks' format CSB norm
 43 (CSB43)")
@@ -27082,7 +28097,7 @@ spreadsheet), CSV, TSV, XLS, XLSX (Microsoft Excel spreadsheet), and YAML.")
         (base32 "10nf4hdwldqgdmh4g613vx55sbsw1x1yzpvs3crwlggbp75fjjfi"))))
     (build-system python-build-system)
     (home-page "https://coda.b2ck.com/")
-    (synopsis "A module to parse Belgian CODA files")
+    (synopsis "Module to parse Belgian CODA files")
     (description "This package provides a module to parse Coded statement of
 account (CODA) files as defined be the Belgian Febelfin bank standard.")
     (license license:bsd-3)))
@@ -27106,11 +28121,9 @@ account (CODA) files as defined be the Belgian Febelfin bank standard.")
              (when tests?
                (invoke "nosetests" "-v")))))))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (propagated-inputs
-     `(("python-beautifulsoup4" ,python-beautifulsoup4)
-       ("python-lxml" ,python-lxml)
-       ("python-six" ,python-six)))
+     (list python-beautifulsoup4 python-lxml python-six))
     (home-page "http://sites.google.com/site/ofxparse")
     (synopsis "Tools for working with the OFX (Open Financial Exchange) file
 format")
@@ -27135,7 +28148,7 @@ statements in OFX files.")
     (arguments
      '(#:tests? #f))  ;; tests require network
     (propagated-inputs
-     `(("python-requests" ,python-requests)))
+     (list python-requests))
     (home-page "https://github.com/stripe/stripe-python")
     (synopsis "Python bindings for the Stripe financial services' API")
     (description "This package provides access to the Stripe financial
@@ -27147,19 +28160,23 @@ compatible with a wide range of versions of the Stripe API.")
 (define-public python-platformdirs
   (package
     (name "python-platformdirs")
-    (version "2.2.0")
+    (version "2.4.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "platformdirs" version))
        (sha256
-        (base32 "07hq5qrp7pqj63iczg01wbf5ii6f0ncd0dq5mzkdhsslmg9slbb3"))))
+        (base32 "1njz0h4iky8iglrb85cd07hpa3lp1a2dfr934dj65hxwzvfk61j4"))))
     (build-system python-build-system)
+    (arguments
+     '(#:phases (modify-phases %standard-phases
+                  (replace 'check
+                    (lambda* (#:key tests? #:allow-other-keys)
+                      (when tests?
+                        (invoke "pytest" "-vv")))))))
     (native-inputs
-     `(("python-appdirs" ,python-appdirs)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-mock" ,python-pytest-mock)))
+     (list python-appdirs python-pytest python-pytest-mock
+           python-setuptools-scm))
     (home-page "https://github.com/platformdirs/platformdirs")
     (synopsis "Determine the appropriate platform-specific directories")
     (description "When writing applications, finding the right location to
@@ -27169,6 +28186,35 @@ location.  This small Python module determines the appropriate
 platform-specific directories, e.g. the ``user data dir''.")
     (license license:expat)))
 
+(define-public python-json2html
+  (package
+    (name "python-json2html")
+    (version "1.3.0")
+    (source
+     ;; There are no tests in the PyPI tarball.
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/softvar/json2html")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1ncypljnl5y8lsxy6ibcqy412kx3mzxl4ajg67568hvq98kv1sb3"))))
+    (build-system python-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "python" "test/run_tests.py")))))))
+    (home-page "https://github.com/softvar/json2html")
+    (synopsis "Convert JSON to HTML table")
+    (description "@code{python-json2html} is a python module to convert JSON
+into a human readable HTML table representation.")
+    (license license:expat)))
+
 (define-public python-face
   (package
     (name "python-face")
@@ -27190,9 +28236,9 @@ platform-specific directories, e.g. the ``user data dir''.")
                (add-installed-pythonpath inputs outputs)
                (invoke "pytest" "-v")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (propagated-inputs
-     `(("python-boltons" ,python-boltons)))
+     (list python-boltons))
     (home-page "https://github.com/mahmoud/face")
     (synopsis "CLI parsing and dispatching microframework")
     (description "@code{python-face} is a Pythonic microframework for building
@@ -27231,12 +28277,9 @@ command-line applications.
                                       ":" (getenv "PATH")))
                (invoke "pytest" "-v")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pyyaml" ,python-pyyaml)))
+     (list python-pytest python-pyyaml))
     (propagated-inputs
-     `(("python-attrs" ,python-attrs)
-       ("python-boltons" ,python-boltons)
-       ("python-face" ,python-face)))
+     (list python-attrs python-boltons python-face))
     (home-page "https://github.com/mahmoud/glom")
     (synopsis "Declaratively restructure data")
     (description "Real applications have real data, and real data
@@ -27264,12 +28307,482 @@ and powerful way to handle real-world data, featuring:
          "0jhrdif57khx2hsw1q6a9x42knwcvq8ijgqyq1jmll6y6ifyzm2f"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-msgpack" ,python-msgpack)
-       ("python-ruamel.yaml" ,python-ruamel.yaml)
-       ("python-toml" ,python-toml)))
+     (list python-msgpack python-ruamel.yaml python-toml))
     (home-page "https://github.com/cdgriffith/Box")
     (synopsis "Advanced Python dictionaries with dot notation access")
     (description
      "This package provides the @code{python-box} Python module.
 It implements advanced Python dictionaries with dot notation access.")
     (license license:expat)))
+
+(define-public python-fields
+  (package
+    (name "python-fields")
+    (version "5.0.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "fields" version))
+        (sha256
+          (base32 "09sppvhhkhkv9zc9g994m53z15v92csxwcf42ggkaknlv01smm1i"))))
+    (build-system python-build-system)
+    (home-page "https://python-fields.readthedocs.io/")
+    (synopsis "Python container class boilerplate killer")
+    (description "Avoid repetetive boilerplate code in Python classes.")
+    (license license:bsd-3)))
+
+(define-public python-aspectlib
+  (package
+    (name "python-aspectlib")
+    (version "1.5.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "aspectlib" version))
+        (sha256
+          (base32 "1am4ycf292zbmgz791z393v63w7qrynf8q5p9db2wwf2qj1fqxfj"))))
+    (build-system python-build-system)
+    (propagated-inputs (list python-fields))
+    (home-page "https://github.com/ionelmc/python-aspectlib")
+    (synopsis
+      "Python monkey-patching and decorators")
+    (description
+      "This package provides an aspect-oriented programming, monkey-patch
+and decorators library.  It is useful when changing behavior in existing
+code is desired.  It includes tools for debugging and testing:
+simple mock/record and a complete capture/replay framework.")
+    (license license:bsd-2)))
+
+(define-public python-ijson
+  (package
+    (name "python-ijson")
+    (version "3.1.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "ijson" version))
+       (sha256
+        (base32 "1sp463ywj4jv5cp6hsv2qwiima30d09xsabxb2dyq5b17jp0640x"))))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         ;; the tests run by the default setup.py require yajl 1.x,
+         ;; but we have 2.x.  yajl 1.x support is going to be removed
+         ;; anyway, so use pytest to avoid running the yajl1-related
+         ;; tests. See: https://github.com/ICRAR/ijson/issues/55
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "pytest" "-vv")))))))
+    (inputs
+     ;; libyajl is optional, but compiling with it makes faster
+     ;; backends available to ijson:
+     (list libyajl))
+    (native-inputs
+     (list python-pytest))
+    (build-system python-build-system)
+    (home-page "https://github.com/ICRAR/ijson")
+    (synopsis "Iterative JSON parser with Python iterator interfaces")
+    (description
+     "Ijson is an iterative JSON parser with standard Python iterator
+interfaces.")
+    (license license:bsd-3)))
+
+(define-public python-orgparse
+  (package
+    (name "python-orgparse")
+    (version "0.3.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "orgparse" version))
+       (sha256
+        (base32 "14iv4pg3rma9560plg0w943x04mr2cmrssda43y2d1x9acrd2n71"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "pytest" "-vv" "orgparse/tests")))))))
+    (native-inputs
+     (list python-pytest python-setuptools-scm))
+    (home-page "https://github.com/karlicoss/orgparse")
+    (synopsis "Emacs Org mode parser in Python")
+    (description
+     "This package is a Python module for reading Emacs Org mode files.")
+    (license license:bsd-3)))
+
+(define-public dynaconf
+  (package
+    (name "dynaconf")
+    (version "3.1.7")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url "https://github.com/rochacbruno/dynaconf")
+         (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0pjyjsdzairpn5vq8nzddhxwxmr18grn272nj31wcy2ipwdl3c3h"))
+       (patches (search-patches "dynaconf-unvendor-deps.patch"))
+       (modules '((guix build utils)))
+       (snippet '(begin
+                   ;; Remove vendored dependencies
+                   (let ((unvendor '("click" "dotenv" "ruamel" "toml")))
+                     (with-directory-excursion "dynaconf/vendor"
+                       (for-each delete-file-recursively unvendor))
+                     (with-directory-excursion "dynaconf/vendor_src"
+                       (for-each delete-file-recursively unvendor)))))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? outputs #:allow-other-keys)
+             (when tests?
+               (setenv "PATH"
+                       (string-append (assoc-ref outputs "out") "/bin:"
+                                      (getenv "PATH")))
+               ;; These tests depend on hvac and a live Vault process.
+               (delete-file "tests/test_vault.py")
+               (invoke "make" "test_only")))))))
+    (propagated-inputs
+     (list python-click python-configobj python-dotenv-0.13.0
+           python-ruamel.yaml python-toml))
+    (native-inputs
+     (list python-django python-flask python-pytest-6 python-pytest-cov
+           python-pytest-mock))
+    (home-page "https://www.dynaconf.com/")
+    (synopsis "The dynamic configurator for your Python project")
+    (description
+     "This package provides @code{dynaconf} the dynamic configurator manager for
+your Python project.  It provides features such as:
+
+@itemize
+@item Inspired by the @url{https://12factor.net/config, 12-factor application guide};
+@item Settings management (default values, validation, parsing, templating);
+@item Protection of sensitive information (passwords/tokens);
+@item Multiple file formats @code{toml|yaml|json|ini|py} and also customizable
+loaders;
+@item Full support for environment variables to override existing settings
+(dotenv support included);
+@item Optional layered system for multiple environments @code{[default,
+development, testing, production]};
+@item Built-in support for Hashicorp Vault and Redis as settings and secrets storage;
+@item Built-in extensions for Django and Flask web frameworks;
+@item CLI for common operations such as @code{init, list, write, validate, export}.
+@end itemize")
+    (license license:expat)))
+
+(define-public pudb
+  (package
+    (name "pudb")
+    (version "2021.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pudb" version))
+       (sha256
+        (base32 "0p16pvzfa3w02ybg3n0iy5rs23z4rz4a42lb8wh3mcq62y9ik2w7"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'fix-read-only-home
+           (lambda _
+             (setenv "HOME" "/tmp")))
+         (replace 'check
+           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "pytest")))))))
+    (native-inputs
+     (list python-numpy python-pytest python-pytest-mock))
+    (propagated-inputs
+     (list python-jedi python-pygments python-urwid python-urwid-readline))
+    (home-page "https://documen.tician.de/pudb/")
+    (synopsis "Console-based Python debugger")
+    (description
+     "@command{pudb} is a full-screen, console-based Python debugger providing
+all the niceties of modern GUI-based debuggers in a more lightweight and
+keyboard-friendly package.")
+    (license license:expat)))
+
+(define-public python-iwlib
+  (package
+    (name "python-iwlib")
+    (version "1.7.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "iwlib" version))
+       (sha256
+        (base32 "18bd35wn7zclalpqbry42pf7bjrdggxkkw58mc0k1vkhg9czc1d8"))))
+    (build-system python-build-system)
+    (inputs
+     (list wireless-tools))
+    (propagated-inputs (list python-cffi))
+    (home-page "https://github.com/nhoad/python-iwlib")
+    (synopsis "Python module to interface with iwlib")
+    (description
+     "This package provides a Python interface to iw wireless tools.")
+    (license license:gpl2)))
+
+(define-public python-pdoc3
+  (package
+    (name "python-pdoc3")
+    (version "0.10.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pdoc3" version))
+       (sha256
+        (base32 "1dz4hw10ngidzg9cjvflc8nlrwrjbb3ijhmaw4w6f039p6yff8jz"))
+       (patches
+        (search-patches "python-pdoc3-tests.patch"))))
+    (build-system python-build-system)
+    (native-inputs
+     (list python-setuptools-git python-setuptools-scm))
+    (propagated-inputs (list python-mako python-markdown))
+    (home-page "https://pdoc3.github.io/pdoc/")
+    (synopsis "Auto-generate API documentation for Python projects")
+    (description
+     "This package auto-generates API documentation from Python projects
+already existing modules and objects docstrings.")
+    (license license:agpl3+)))
+
+(define-public python-piexif
+  (package
+    (name "python-piexif")
+    (version "1.1.3")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "piexif" version ".zip"))
+        (sha256
+         (base32 "06sz58q4mrw472p8fbnq7wsj8zpi5js5r8phm2hiwfmz0v33bjw3"))
+        (patches
+         (search-patches "python-piexif-fix-tests-with-pillow-7.2.patch"))))
+    (build-system python-build-system)
+    (native-inputs
+     (list unzip python-pillow))
+    (home-page "https://github.com/hMatoba/Piexif")
+    (synopsis "Simplify exif manipulations with Python")
+    (description "Piexif simplifies interacting with EXIF data in
+Python.  It includes the tools necessary for extracting, creating,
+manipulating, converting and writing EXIF data to JPEG, WebP and TIFF files.")
+    (license license:expat)))
+
+(define-public python-pyrss2gen
+  (package
+    (name "python-pyrss2gen")
+    (version "1.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "PyRSS2Gen" version))
+        (sha256
+          (base32 "1rvf5jw9hknqz02rp1vg8abgb1lpa0bc65l7ylmlillqx7bswq3r"))))
+    (build-system python-build-system)
+    (home-page "http://dalkescientific.com/Python/PyRSS2Gen.html")
+    (synopsis "Generate RSS 2.0 feeds using a Python data structure")
+    (description "PyRSS2Gen is the interface to generate RSS 2.0 feeds.
+PyRSS2Gen builds the feed up by using a XML generator.")
+    (license license:bsd-3)))
+
+(define-public python-yapsy
+  (package
+    (name "python-yapsy")
+    (version "1.12.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "Yapsy" version))
+        (sha256
+          (base32 "12rznbnswfw0w7qfbvmmffr9r317gl1rqg36nijwzsklkjgks4fq"))))
+    (build-system python-build-system)
+    (home-page "http://yapsy.sourceforge.net")
+    (synopsis "Simple plugin system for Python applications")
+    (description "Yapsy, or Yet Another Plugin SYstem, is a small library
+implementing the core mechanisms needed to build a plugin system into a wider
+application.
+
+The main purpose is to depend only on Python's standard libraries and to
+implement only the basic functionalities needed to detect, load and keep track
+of several plugins.")
+    (license license:bsd-3)))
+
+(define-public python-doit
+  (package
+    (name "python-doit")
+    (version "0.34.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "doit" version))
+        (sha256
+          (base32 "0bf0m9n0hyjvjpv051zd26725j8jr23gyvc37v3kkadwbh8dxwcf"))))
+    (build-system python-build-system)
+    (propagated-inputs
+      (list python-cloudpickle python-pyinotify))
+    (native-inputs
+      (list python-pytest))
+    (home-page "https://pydoit.org")
+    (synopsis "Automation tool to execute any kind of task in a build-tools
+fashion")
+    (description "doit is an automation tool that brings the power of
+build-tools to execute any kind of task.
+
+A task describes some computation to be done (actions), and contains some
+extra meta-data.  The actions can be external programs or Python functions.  A
+single task may define more than one action.doit uses the task’s meta-data
+to:
+
+@itemize
+@item cache task results
+@item correct execution order
+@item parallel execution
+@item powerful dependency system
+@end itemize")
+    (license license:expat)))
+
+(define-public python-phpserialize
+  (package
+    (name "python-phpserialize")
+    (version "1.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "phpserialize" version))
+       (sha256
+        (base32 "19qgkb9z4zjbjxlpwh2w6pxkz2j3iymnydi69jl0jg905lqjsrxz"))))
+    (build-system python-build-system)
+    (arguments
+     (list
+      ;; tests missing in pypi archive, anhow they are quite simple and not worth any hassle
+      #:tests? #f))
+    (home-page "http://github.com/mitsuhiko/phpserialize")
+    (synopsis "Python port of the serialize and unserialize functions of PHP")
+    (description
+     "This package provides a port of the serialize and unserialize functions of PHP for Python")
+    (license license:bsd-3)))
+
+(define-public nikola
+  (package
+    (name "nikola")
+    (version "8.1.3")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "Nikola" version))
+        (sha256
+          (base32 "1vspzvi4039zgjc93bspqjb384r6c9ksvmidbp8csws2pdbc7sh5"))))
+    (build-system python-build-system)
+    (propagated-inputs
+      (list python-babel
+            python-blinker
+            python-dateutil
+            python-docutils
+            python-doit
+            python-jinja2        ;; for themes
+            python-lxml
+            python-mako
+            python-markdown
+            python-natsort
+            python-notebook      ;; for ipynb
+            python-phpserialize  ;; for wordpress import
+            python-piexif
+            python-pillow
+            python-pygments
+            python-pyrss2gen
+            python-requests
+            python-ruamel.yaml   ;; for YAML metadata
+            python-unidecode
+            python-yapsy))
+    (native-inputs
+      (list python-coverage
+            python-flake8
+            python-freezegun
+            python-pytest
+            python-pytest-cov))
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                ;;(add-installed-pythonpath inputs outputs)
+                (invoke "pytest" "tests" "--no-cov"
+                        "-k" "not test_compiling_markdown[hilite]")))))))
+    (home-page "https://getnikola.com/")
+    (synopsis "Modular, fast and simple static website and blog generator")
+    (description "Nikola generates static websites and blogs.  Out of the box,
+it supports reStructuredText, Markdown, IPython (Jupyter) Notebooks and HTML,
+and has plugins for many other formats.")
+    (license license:expat)))
+
+(define-public nbss-upload
+  (package
+    (name "nbss-upload")
+    (version "0.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "nbss-upload" version))
+        (sha256
+          (base32 "0jhyfm7w2ssknmh9789fmpnf79xr7sxbdcjwak6hfha6qparvk38"))))
+    (build-system python-build-system)
+    (propagated-inputs
+      (list python-requests))
+    (arguments
+     `(#:tests? #f)) ;no tests
+    (home-page "https://github.com/notebook-sharing-space/nbss-upload")
+    (synopsis "Upload notebooks to a notebooksharing.space instance")
+    (description
+"Upload notebooks as @code{.ipynb}, @code{.rmd}, and @code{.html} to a
+notebooksharing.space instance.")
+    (license license:bsd-3)))
+
+(define-public python-reedsolo
+  (package
+    (name "python-reedsolo")
+    (version "1.5.4")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "reedsolo" version))
+        (sha256
+          (base32 "09q15ji9iac3nmmxrcdvz8ynldvvqanqy3hs6q3cp327hgf5rcmq"))))
+    (build-system python-build-system)
+    (home-page "https://github.com/tomerfiliba/reedsolomon")
+    (synopsis "Pure-Python Reed Solomon encoder/decoder")
+    (description "A pure-python universal errors-and-erasures Reed-Solomon
+Codec, based on the tutorial at Wikiversity.  This is a burst-type
+implementation, so that it supports any Galois field higher than 2^3,
+but not binary streams.")
+    (license license:public-domain)))
+
+(define-public python-esprima
+  (package
+    (name "python-esprima")
+    (version "4.0.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "esprima" version))
+        (sha256
+          (base32 "1vi32g991lxcxzmncfiszh8m9bwkh4887szskkdi0a9wdn3imnq8"))))
+    (build-system python-build-system)
+    (home-page "https://github.com/Kronuz/esprima-python")
+    (synopsis
+      "ECMAScript parsing infrastructure for analysis in Python")
+    (description
+      "This package provides ECMAScript parsing infrastructure for
+multipurpose analysis in Python.")
+    (license license:bsd-3)))
diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
index 6fa0987d24..3bc3346c21 100644
--- a/gnu/packages/python.scm
+++ b/gnu/packages/python.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
-;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013, 2014, 2015, 2016 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2014, 2017, 2019 Eric Bavier <bavier@member.fsf.org>
@@ -26,12 +26,12 @@
 ;;; Copyright © 2016, 2017 Nikita <nikita@n0.is>
 ;;; Copyright © 2016 Dylan Jeffers <sapientech@sapientech@openmailbox.org>
 ;;; Copyright © 2016 David Craven <david@craven.ch>
-;;; Copyright © 2016, 2017, 2018, 2019, 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2016, 2017 Stefan Reichör <stefan@xsteve.at>
 ;;; Copyright © 2016, 2017 Alex Vong <alexvong1995@gmail.com>
 ;;; Copyright © 2016, 2017, 2018 Arun Isaac <arunisaac@systemreboot.net>
-;;; Copyright © 2016, 2017, 2018 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2016–2018, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2016, 2017, 2018, 2021 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2016, 2017 Thomas Danckaert <post@thomasdanckaert.be>
 ;;; Copyright © 2017 Carlo Zancanaro <carlo@zancanaro.id.au>
 ;;; Copyright © 2017 Frederick M. Muriithi <fredmanglis@gmail.com>
@@ -52,12 +52,12 @@
 ;;; Copyright © 2018 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
 ;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org>
-;;; Copyright © 2018, 2019 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2018, 2019, 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2018 Luther Thompson <lutheroto@gmail.com>
 ;;; Copyright © 2018 Vagrant Cascadian <vagrant@debian.org>
 ;;; Copyright © 2019 Tanguy Le Carrour <tanguy@bioneland.org>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
-;;; Copyright © 2021 Greg Hogan <code@greghogan.com>
+;;; Copyright © 2020, 2021 Greg Hogan <code@greghogan.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -94,68 +94,104 @@
   #:use-module (gnu packages tcl)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages xml)
+  #:use-module (guix gexp)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix utils)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system trivial)
   #:use-module (srfi srfi-1)
-  #:use-module (srfi srfi-26))
+  #:use-module (srfi srfi-26)
+
+  #:export (customize-site
+            guix-pythonpath-search-path))
+
+(define* (customize-site version)
+  "Generate a install-sitecustomize.py phase, using VERSION."
+  `(lambda* (#:key native-inputs inputs outputs #:allow-other-keys)
+     (let* ((out (assoc-ref outputs "out"))
+            (site-packages (string-append
+                            out "/lib/python"
+                            ,(version-major+minor version)
+                            "/site-packages"))
+            (sitecustomize.py (assoc-ref (or native-inputs inputs)
+                                         "sitecustomize.py"))
+            (dest (string-append site-packages "/sitecustomize.py")))
+       (mkdir-p site-packages)
+       (copy-file sitecustomize.py dest)
+       ;; Set the correct permissions on the installed file, else the byte
+       ;; compilation phase fails with a permission denied error.
+       (chmod dest #o644))))
+
+(define (guix-pythonpath-search-path version)
+  "Generate a GUIX_PYTHONPATH search path specification, using VERSION."
+  (search-path-specification (variable "GUIX_PYTHONPATH")
+                             (files (list (string-append
+                                           "lib/python"
+                                           (version-major+minor version)
+                                           "/site-packages")))))
 
 (define-public python-2.7
   (package
     (name "python2")
-    (version "2.7.17")
+    (version "2.7.18")
     (source
      (origin
-      (method url-fetch)
-      (uri (string-append "https://www.python.org/ftp/python/"
-                          version "/Python-" version ".tar.xz"))
-      (sha256
-       (base32
-        "0hds28cg226m8j8sr394nm9yc4gxhvlv109w0avsf2mxrlrz0hsd"))
-      (patches (search-patches "python-2.7-search-paths.patch"
-                               "python-2-deterministic-build-info.patch"
-                               "python-2.7-site-prefixes.patch"
-                               "python-2.7-source-date-epoch.patch"
-                               "python-2.7-adjust-tests.patch"
-                               "python-cross-compile.patch"
-                               "python-2.7-CVE-2021-3177.patch"))
-      (modules '((guix build utils)))
-      (snippet
-       '(begin
-          ;; Ensure the bundled copies of these libraries are not used.
-          (for-each delete-file-recursively
-                    '("Modules/_ctypes/libffi" "Modules/expat" "Modules/zlib"))
+       (method url-fetch)
+       (uri (string-append "https://www.python.org/ftp/python/"
+                           version "/Python-" version ".tar.xz"))
+       (sha256
+        (base32
+         "0hzgxl94hnflis0d6m4szjx0b52gah7wpmcg5g00q7am6xwhwb5n"))
+       (patches (search-patches "python-2.7-search-paths.patch"
+                                "python-2-deterministic-build-info.patch"
+                                "python-2.7-site-prefixes.patch"
+                                "python-2.7-source-date-epoch.patch"
+                                "python-2.7-adjust-tests.patch"
+                                "python-cross-compile.patch"
+                                "python-2.7-CVE-2021-3177.patch"
+                                "python-2.7-no-static-lib.patch"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           ;; Ensure the bundled copies of these libraries are not used.
+           (for-each delete-file-recursively
+                     '("Modules/_ctypes/libffi" "Modules/expat" "Modules/zlib"))
 
-          (substitute* "Modules/Setup.dist"
-            ;; Link Expat instead of embedding the bundled one.
-            (("^#pyexpat.*") "pyexpat pyexpat.c -lexpat\n"))
+           (substitute* "Modules/Setup.dist"
+             ;; Link Expat instead of embedding the bundled one.
+             (("^#pyexpat.*") "pyexpat pyexpat.c -lexpat\n"))
 
-          ;; Suboptimal to delete failing tests here, but if we delete them in
-          ;; the arguments then we need to make sure to strip out that phase
-          ;; when it gets inherited by python and python-minimal.
-          (for-each delete-file
-                    '("Lib/test/test_compileall.py"
-                      "Lib/test/test_ctypes.py" ; fails on mips64el
-                      "Lib/test/test_distutils.py"
-                      "Lib/test/test_import.py"
-                      "Lib/test/test_shutil.py"
-                      "Lib/test/test_socket.py"
-                      "Lib/test/test_subprocess.py"))
-          #t))))
+           ;; Suboptimal to delete failing tests here, but if we delete them in
+           ;; the arguments then we need to make sure to strip out that phase
+           ;; when it gets inherited by python and python-minimal.
+           (for-each delete-file
+                     '("Lib/test/test_compileall.py"
+                       "Lib/test/test_ctypes.py" ; fails on mips64el
+                       "Lib/test/test_distutils.py"
+                       "Lib/test/test_import.py"
+                       "Lib/test/test_shutil.py"
+                       "Lib/test/test_socket.py"
+                       "Lib/test/test_subprocess.py"))))))
     (outputs '("out"
-               "tk"))                     ;tkinter; adds 50 MiB to the closure
+               "tk"                     ;tkinter; adds 50 MiB to the closure
+               "idle"))                 ;programming environment; weighs 5MB
     (build-system gnu-build-system)
     (arguments
      `(#:test-target "test"
        #:configure-flags
-       (list "--enable-shared"                    ;allow embedding
-             "--with-system-expat"                ;for XML support
-             "--with-system-ffi"                  ;build ctypes
-             "--with-ensurepip=install"           ;install pip and setuptools
+       (list "--enable-shared"          ;allow embedding
+             "--with-system-expat"      ;for XML support
+             "--with-system-ffi"        ;build ctypes
+             "--with-ensurepip=install" ;install pip and setuptools
+             "--with-computed-gotos"    ;main interpreter loop optimization
              "--enable-unicode=ucs4"
 
+             ;; FIXME: These flags makes Python significantly faster, but
+             ;; leads to non-reproducible binaries.
+             ;; "--with-lto"               ;increase size by 20MB, but 15% speedup
+             ;; "--enable-optimizations"
+
              ;; Prevent the installed _sysconfigdata.py from retaining a reference
              ;; to coreutils.
              "INSTALL=install -c"
@@ -168,8 +204,13 @@
                      "ac_cv_file__dev_ptmx=no"
                      "ac_cv_file__dev_ptc=no")
                    '())
+             ;; -fno-semantic-interposition reinstates some optimizations by gcc
+             ;; leading to around 15% speedup. This is the default starting from
+             ;; python 3.10.
+             "CFLAGS=-fno-semantic-interposition"
              (string-append "LDFLAGS=-Wl,-rpath="
-                            (assoc-ref %outputs "out") "/lib"))
+                            (assoc-ref %outputs "out") "/lib"
+                            " -fno-semantic-interposition"))
        ;; With no -j argument tests use all available cpus, so provide one.
        #:make-flags
        (list (string-append
@@ -181,12 +222,12 @@
               ;; https://github.com/python/cpython/commit/529525fb5a8fd9b96ab4021311a598c77588b918.
               " --exclude test_urllib2_localnet test_httplib"))
 
-        #:modules ((ice-9 ftw) (ice-9 match)
-                   (guix build utils) (guix build gnu-build-system))
-        #:phases
-        (modify-phases %standard-phases
-          (add-before
-           'configure 'patch-lib-shells
+       #:modules ((ice-9 ftw) (ice-9 match)
+                  (guix build utils) (guix build gnu-build-system))
+       #:phases
+       (modify-phases %standard-phases
+         (add-before
+             'configure 'patch-lib-shells
            (lambda _
              ;; This variable is used in setup.py to enable cross compilation
              ;; specific switches. As it is not set properly by configure
@@ -202,40 +243,34 @@
                                     "Lib/distutils/tests/test_spawn.py"
                                     "Lib/test/support/__init__.py"
                                     "Lib/test/test_subprocess.py"))
-               (("/bin/sh") (which "sh")))
-             #t))
-          ,@(if (hurd-system?)
-                `((add-before 'build 'patch-regen-for-hurd
-                    (lambda* (#:key inputs #:allow-other-keys)
-                      (let ((libc (assoc-ref inputs "libc")))
-                        (substitute* "Lib/plat-generic/regen"
-                          (("/usr/include/") (string-append libc "/include/")))
-                        #t))))
-                '())
-          (add-before 'configure 'do-not-record-configure-flags
-            (lambda* (#:key configure-flags #:allow-other-keys)
-              ;; Remove configure flags from the installed '_sysconfigdata.py'
-              ;; and 'Makefile' so we don't end up keeping references to the
-              ;; build tools.
-              ;;
-              ;; Preserve at least '--with-system-ffi' since otherwise the
-              ;; thing tries to build libffi, fails, and we end up with a
-              ;; Python that lacks ctypes.
-              (substitute* "configure"
-                (("^CONFIG_ARGS=.*$")
-                 (format #f "CONFIG_ARGS='~a'\n"
-                         (if (member "--with-system-ffi" configure-flags)
-                             "--with-system-ffi"
-                             ""))))
-              #t))
-          (add-before
-           'check 'pre-check
+               (("/bin/sh") (which "sh")))))
+         ,@(if (hurd-system?)
+               `((add-before 'build 'patch-regen-for-hurd
+                   (lambda* (#:key inputs #:allow-other-keys)
+                     (let ((libc (assoc-ref inputs "libc")))
+                       (substitute* "Lib/plat-generic/regen"
+                         (("/usr/include/") (string-append libc "/include/")))))))
+               '())
+         (add-before 'configure 'do-not-record-configure-flags
+           (lambda* (#:key configure-flags #:allow-other-keys)
+             ;; Remove configure flags from the installed '_sysconfigdata.py'
+             ;; and 'Makefile' so we don't end up keeping references to the
+             ;; build tools.
+             ;;
+             ;; Preserve at least '--with-system-ffi' since otherwise the
+             ;; thing tries to build libffi, fails, and we end up with a
+             ;; Python that lacks ctypes.
+             (substitute* "configure"
+               (("^CONFIG_ARGS=.*$")
+                (format #f "CONFIG_ARGS='~a'\n"
+                        (if (member "--with-system-ffi" configure-flags)
+                            "--with-system-ffi"
+                            ""))))))
+         (add-before 'check 'pre-check
            (lambda _
              ;; 'Lib/test/test_site.py' needs a valid $HOME
-             (setenv "HOME" (getcwd))
-             #t))
-          (add-after
-           'unpack 'set-source-file-times-to-1980
+             (setenv "HOME" (getcwd))))
+         (add-after 'unpack 'set-source-file-times-to-1980
            ;; XXX One of the tests uses a ZIP library to pack up some of the
            ;; source tree, and fails with "ZIP does not support timestamps
            ;; before 1980".  Work around this by setting the file times in the
@@ -244,98 +279,130 @@
              (let ((circa-1980 (* 10 366 24 60 60)))
                (ftw "." (lambda (file stat flag)
                           (utime file circa-1980 circa-1980)
-                          #t))
-               #t)))
-          (add-after 'install 'remove-tests
-            ;; Remove 25 MiB of unneeded unit tests.  Keep test_support.*
-            ;; because these files are used by some libraries out there.
-            (lambda* (#:key outputs #:allow-other-keys)
-              (let ((out (assoc-ref outputs "out")))
-                (match (scandir (string-append out "/lib")
-                                (lambda (name)
-                                  (string-prefix? "python" name)))
-                  ((pythonX.Y)
-                   (let ((testdir (string-append out "/lib/" pythonX.Y
-                                                 "/test")))
-                     (with-directory-excursion testdir
-                       (for-each delete-file-recursively
-                                 (scandir testdir
-                                          (match-lambda
-                                            ((or "." "..") #f)
-                                            ("support" #f)
-                                            (file
-                                             (not
-                                              (string-prefix? "test_support."
-                                                              file))))))
-                       (call-with-output-file "__init__.py" (const #t))
-                       #t)))))))
-          (add-after 'remove-tests 'rebuild-bytecode
-            (lambda* (#:key outputs #:allow-other-keys)
-              (let ((out (assoc-ref outputs "out")))
-                ;; Disable hash randomization to ensure the generated .pycs
-                ;; are reproducible.
-                (setenv "PYTHONHASHSEED" "0")
-                (for-each
-                 (lambda (opt)
-                   (format #t "Compiling with optimization level: ~a\n"
-                           (if (null? opt) "none" (car opt)))
-                   (for-each (lambda (file)
-                               (apply invoke
-                                      `(,,(if (%current-target-system)
-                                              "python2"
-                                              '(string-append out "/bin/python"))
-                                        ,@opt
-                                        "-m" "compileall"
-                                        "-f" ; force rebuild
-                                        ;; Don't build lib2to3, because it contains Python 3 code.
-                                        "-x" "lib2to3/.*"
-                                        ,file)))
-                             (find-files out "\\.py$")))
-                 (list '() '("-O") '("-OO")))
-                #t)))
-          (add-after 'install 'move-tk-inter
-            (lambda* (#:key outputs #:allow-other-keys)
-              ;; When Tkinter support is built move it to a separate output so
-              ;; that the main output doesn't contain a reference to Tcl/Tk.
-              (let ((out (assoc-ref outputs "out"))
-                    (tk  (assoc-ref outputs "tk")))
-                (when tk
-                  (match (find-files out "tkinter.*\\.so")
-                    ((tkinter.so)
-                     ;; The .so is in OUT/lib/pythonX.Y/lib-dynload, but we
-                     ;; want it under TK/lib/pythonX.Y/site-packages.
-                     (let* ((len    (string-length out))
-                            (target (string-append
-                                     tk "/"
-                                     (string-drop
-                                      (dirname (dirname tkinter.so))
-                                      len)
-                                     "/site-packages")))
-                       (install-file tkinter.so target)
-                       (delete-file tkinter.so)))))
-                #t))))))
+                          #t)))))
+         (add-after 'install 'remove-tests
+           ;; Remove 25 MiB of unneeded unit tests.  Keep test_support.*
+           ;; because these files are used by some libraries out there.
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (match (scandir (string-append out "/lib")
+                               (lambda (name)
+                                 (string-prefix? "python" name)))
+                 ((pythonX.Y)
+                  (let ((testdir (string-append out "/lib/" pythonX.Y
+                                                "/test")))
+                    (with-directory-excursion testdir
+                      (for-each delete-file-recursively
+                                (scandir testdir
+                                         (match-lambda
+                                           ((or "." "..") #f)
+                                           ("support" #f)
+                                           (file
+                                            (not
+                                             (string-prefix? "test_support."
+                                                             file))))))
+                      (call-with-output-file "__init__.py" (const #t))))
+                  (let ((libdir (string-append out "/lib/" pythonX.Y)))
+                    (for-each
+                     (lambda (directory)
+                       (let ((dir (string-append libdir "/" directory)))
+                         (when (file-exists? dir)
+                           (delete-file-recursively dir))))
+                     '("email/test" "ctypes/test" "unittest/test" "tkinter/test"
+                       "sqlite3/test" "bsddb/test" "lib-tk/test" "json/tests"
+                       "distutils/tests"))))))))
+         (add-after 'remove-tests 'move-tk-inter
+           (lambda* (#:key outputs #:allow-other-keys)
+             ;; When Tkinter support is built move it to a separate output so
+             ;; that the main output doesn't contain a reference to Tcl/Tk.
+             (let ((out (assoc-ref outputs "out"))
+                   (tk  (assoc-ref outputs "tk")))
+               (when tk
+                 (match (find-files out "tkinter.*\\.so")
+                   ((tkinter.so)
+                    ;; The .so is in OUT/lib/pythonX.Y/lib-dynload, but we
+                    ;; want it under TK/lib/pythonX.Y/site-packages.
+                    (let* ((len    (string-length out))
+                           (target (string-append
+                                    tk "/"
+                                    (string-drop
+                                     (dirname (dirname tkinter.so))
+                                     len)
+                                    "/site-packages")))
+                      (install-file tkinter.so target)
+                      (delete-file tkinter.so))))))))
+         (add-after 'move-tk-inter 'move-idle
+           (lambda* (#:key outputs #:allow-other-keys)
+             ;; when idle is built, move it to a separate output to save some
+             ;; space (5MB)
+             (let ((out (assoc-ref outputs "out"))
+                   (idle (assoc-ref outputs "idle")))
+               (when idle
+                 (for-each
+                  (lambda (file)
+                    (let ((target (string-append idle "/bin/" (basename file))))
+                      (install-file file (dirname target))
+                      (delete-file file)))
+                  (find-files (string-append out "/bin") "^idle"))
+                 (match (find-files out "^idlelib$" #:directories? #t)
+                   ((idlelib)
+                    (let* ((len (string-length out))
+                           (target (string-append idle "/"
+                                                  (string-drop idlelib len)
+                                                  "/site-packages")))
+                      (mkdir-p (dirname target))
+                      (rename-file idlelib target))))))))
+         (add-after 'move-idle 'rebuild-bytecode
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               ;; Disable hash randomization to ensure the generated .pycs
+               ;; are reproducible.
+               (setenv "PYTHONHASHSEED" "0")
+               (for-each
+                (lambda (output)
+                  (for-each (lambda (opt)
+                              (format #t "Compiling with optimization level: ~a\n"
+                                      (if (null? opt) "none" (car opt)))
+                              (apply invoke
+                                     `(,,(if (%current-target-system)
+                                             "python2"
+                                             '(string-append out "/bin/python"))
+                                       ,@opt
+                                       "-m" "compileall"
+                                       "-f" ; force rebuild
+                                       ;; Don't build lib2to3, because it contains
+                                       ;; Python 3 code.
+                                       "-x" "lib2to3/.*"
+                                       ,output)))
+                            ;; Python 2 has a single file extension (.pyo) for the
+                            ;; chosen level of optimization, so it doesn't make
+                            ;; sense to byte compile with more than one level.
+                            (list '() '("-OO"))))
+                (map cdr outputs)))))
+         (add-after 'install 'install-sitecustomize.py
+           ,(customize-site version)))))
     (inputs
-     `(("bzip2" ,bzip2)
-       ("expat" ,expat)
-       ("gdbm" ,gdbm)
-       ("libffi" ,libffi)                         ; for ctypes
-       ("sqlite" ,sqlite)                         ; for sqlite extension
-       ("openssl" ,openssl)
-       ("readline" ,readline)
-       ("zlib" ,zlib)
-       ("tcl" ,tcl)
-       ("tk" ,tk)))                               ; for tkinter
+     (list bzip2
+           expat
+           gdbm
+           libffi ; for ctypes
+           sqlite ; for sqlite extension
+           openssl
+           readline
+           zlib
+           tcl
+           tk))                     ; for tkinter
     (native-inputs
      `(("pkg-config" ,pkg-config)
+       ("sitecustomize.py" ,(local-file (search-auxiliary-file
+                                         "python/sitecustomize.py")))
        ;; When cross-compiling, a native version of Python itself is needed.
        ,@(if (%current-target-system)
              `(("python2" ,this-package)
                ("which" ,which))
              '())))
     (native-search-paths
-     (list (search-path-specification
-            (variable "PYTHONPATH")
-            (files '("lib/python2.7/site-packages")))))
+     (list (guix-pythonpath-search-path version)))
     (home-page "https://www.python.org")
     (synopsis "High-level, dynamically-typed programming language")
     (description
@@ -360,24 +427,25 @@ data types.")
     (name "python")
     (properties `((superseded . ,python-2)))))
 
-(define-public python-3.8
-  (package (inherit python-2)
+(define-public python-3.9
+  (package
+    (inherit python-2)
     (name "python")
-    (version "3.8.2")
+    (version "3.9.9")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://www.python.org/ftp/python/"
                                   version "/Python-" version ".tar.xz"))
               (patches (search-patches
-                        "python-CVE-2020-26116.patch"
-                        "python-3.8-CVE-2021-3177.patch"
-                        "python-3-fix-tests.patch"
-                        "python-3.8-fix-tests.patch"
+                        "python-3-arm-alignment.patch"
                         "python-3-deterministic-build-info.patch"
-                        "python-3-search-paths.patch"))
+                        "python-3-fix-tests.patch"
+                        "python-3-hurd-configure.patch"
+                        "python-3-search-paths.patch"
+                        "python-3-no-static-lib.patch"))
               (sha256
                (base32
-                "1ps5v323cp5czfshqjmbsqw7nvrdpcbk06f62jbzaqik4gfffii6"))
+                "09vd7g71i11iz5ydqghwc8kaxr0vgji94hhwwnj77h3kll28r0h6"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -386,17 +454,16 @@ data types.")
                   (substitute* "Modules/Setup"
                     ;; Link Expat instead of embedding the bundled one.
                     (("^#pyexpat.*") "pyexpat pyexpat.c -lexpat\n"))
-                  #t))))
+                  ;; Delete windows binaries
+                  (for-each delete-file
+                            (find-files "Lib/distutils/command" "\\.exe$"))))))
     (arguments
      (substitute-keyword-arguments (package-arguments python-2)
        ((#:make-flags _)
         `(list (string-append
                 (format #f "TESTOPTS=-j~d" (parallel-job-count))
-                ;; test_mmap fails on low-memory systems.
-                " --exclude test_mmap"
-                ;; test_socket may hang and eventually run out of memory
-                ;; on some systems: <https://bugs.python.org/issue34587>.
-                " test_socket"
+                ;; test_mmap fails on low-memory systems
+                " --exclude test_mmap test_socket"
                 ,@(if (hurd-target?)
                       '(" test_posix"      ;multiple errors
                         " test_time"
@@ -430,124 +497,90 @@ data types.")
                         " test_write_pty")
                       '()))))
        ((#:phases phases)
-       `(modify-phases ,phases
-          ,@(if (hurd-system?)
-                `((delete 'patch-regen-for-hurd)) ;regen was removed after 3.5.9
-                '())
-          ,@(if (hurd-target?)
-                ;; The build system refuses to cross-compile for unknown targets
-                ;; even though it works fine.  Add GNU/Hurd target.
-                ;; TODO: Make it a patch in a future rebuild cycle.
-                '((add-before 'configure 'support-hurd-cross-compile
-                    (lambda _
-                      (substitute* "configure"
-                        (("\\*-\\*-vxworks.*" all)
-                         (string-append "*-*-gnu)\nac_sys_system=GNU\n;;\n" all)))
-                      #t)))
-                '())
-          (add-before 'check 'set-TZDIR
-            (lambda* (#:key inputs native-inputs #:allow-other-keys)
-              ;; test_email requires the Olson time zone database.
-              (setenv "TZDIR"
-                      (string-append (assoc-ref
-                                      (or native-inputs inputs) "tzdata")
-                                     "/share/zoneinfo"))
-              #t))
-          ;; Unset SOURCE_DATE_EPOCH while running the test-suite and set it
-          ;; again afterwards.  See <https://bugs.python.org/issue34022>.
-          (add-before 'check 'unset-SOURCE_DATE_EPOCH
-            (lambda _ (unsetenv "SOURCE_DATE_EPOCH") #t))
-          (add-after 'check 'reset-SOURCE_DATE_EPOCH
-            (lambda _ (setenv "SOURCE_DATE_EPOCH" "1") #t))
+        `(modify-phases ,phases
+           ,@(if (hurd-system?)
+                 `((delete 'patch-regen-for-hurd)) ;regen was removed after 3.5.9
+                 '())
+           (add-after 'unpack 'remove-windows-binaries
+             (lambda _
+               ;; Delete .exe from embedded .whl (zip) files
+               (for-each
+                (lambda (whl)
+                  (let ((dir "whl-content")
+                        (circa-1980 (* 10 366 24 60 60)))
+                    (mkdir-p dir)
+                    (with-directory-excursion dir
+                      (let ((whl (string-append "../" whl)))
+                        (invoke "unzip" whl)
+                        (for-each delete-file
+                                  (find-files "." "\\.exe$"))
+                        (delete-file whl)
+                        ;; Reset timestamps to prevent them from ending
+                        ;; up in the Zip archive.
+                        (ftw "." (lambda (file stat flag)
+                                   (utime file circa-1980 circa-1980)
+                                   #t))
+                        (apply invoke "zip" "-X" whl
+                               (find-files "." #:directories? #t))))
+                    (delete-file-recursively dir)))
+                (find-files "Lib/ensurepip" "\\.whl$"))))
+           (add-before 'check 'set-TZDIR
+             (lambda* (#:key inputs native-inputs #:allow-other-keys)
+               ;; test_email requires the Olson time zone database.
+               (setenv "TZDIR"
+                       (string-append (assoc-ref
+                                       (or native-inputs inputs) "tzdata")
+                                      "/share/zoneinfo"))))
            (replace 'rebuild-bytecode
              (lambda* (#:key outputs #:allow-other-keys)
                (let ((out (assoc-ref outputs "out")))
                  ;; Disable hash randomization to ensure the generated .pycs
                  ;; are reproducible.
                  (setenv "PYTHONHASHSEED" "0")
-                 (for-each
-                  (lambda (opt)
-                    (format #t "Compiling with optimization level: ~a\n"
-                            (if (null? opt) "none" (car opt)))
-                    (for-each (lambda (file)
-                                (apply invoke
-                                       `(,,(if (%current-target-system)
-                                               "python3"
-                                               '(string-append out
-                                                               "/bin/python3"))
-                                          ,@opt
-                                          "-m" "compileall"
-                                          "-f" ; force rebuild
-                                          ;; Don't build lib2to3, because it's Python 2 code.
-                                          "-x" "lib2to3/.*"
-                                          ,file)))
-                              (find-files out "\\.py$")))
-                  (list '() '("-O") '("-OO")))
-                 #t)))
-           ;; XXX: Apply patch on ARM platforms only to avoid a full rebuild.
-           ;; Remove this phase in the next rebuild cycle.
-           ,@(let ((system (or (%current-target-system)
-                               (%current-system))))
-               (if (any (cute string-prefix? <> system)
-                        '("arm" "aarch64"))
-                   '((add-after 'unpack 'apply-alignment-patch
-                       (lambda* (#:key native-inputs inputs #:allow-other-keys)
-                        (invoke "patch" "-p1" "--force" "--input"
-                                (assoc-ref (or native-inputs inputs)
-                                           "arm-alignment.patch")))))
-                   '()))))))
-    (native-inputs
-     `(("tzdata" ,tzdata-for-tests)
 
-       ;; Disable unaligned accesses in the sha3 module on ARM as
-       ;; it causes a test failure when building 32-bit Python on a
-       ;; 64-bit kernel.  See <https://bugs.python.org/issue36515>.
-       ;; TODO: make this a regular patch in the next rebuild cycle.
-       ,@(let ((system (or (%current-target-system)
-                           (%current-system))))
-           (if (any (cute string-prefix? <> system)
-                    '("arm" "aarch64"))
-               `(("arm-alignment.patch" ,(search-patch "python-3-arm-alignment.patch")))
-               '()))
+                 (for-each (lambda (output)
+                             ;; XXX: Delete existing pycs generated by the build
+                             ;; system beforehand because the -f argument does
+                             ;; not necessarily overwrite all files, leading to
+                             ;; indeterministic results.
+                             (for-each (lambda (pyc)
+                                         (delete-file pyc))
+                                       (find-files output "\\.pyc$"))
 
+                             (apply invoke
+                                    `(,,(if (%current-target-system)
+                                            "python3"
+                                            '(string-append out
+                                                            "/bin/python3"))
+                                      "-m" "compileall"
+                                      "-o" "0" "-o" "1" "-o" "2"
+                                      "-f" ; force rebuild
+                                      "--invalidation-mode=unchecked-hash"
+                                      ;; Don't build lib2to3, because it's
+                                      ;; Python 2 code.
+                                      "-x" "lib2to3/.*"
+                                      ,output)))
+                           (map cdr outputs)))))
+           (replace 'install-sitecustomize.py
+             ,(customize-site version))))))
+    (native-inputs
+     `(("tzdata" ,tzdata-for-tests)
+       ("unzip" ,unzip)
+       ("zip" ,(@ (gnu packages compression) zip))
        ,@(if (%current-target-system)
              `(("python3" ,this-package))
              '())
        ,@(package-native-inputs python-2)))
     (native-search-paths
-     (list (search-path-specification
-            (variable "PYTHONPATH")
-            (files (list (string-append "lib/python"
-                                        (version-major+minor version)
-                                        "/site-packages"))))))))
-
-(define-public python-3.9
-  (package (inherit python-3.8)
-    (name "python-next")
-    (version "3.9.2")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://www.python.org/ftp/python/"
-                                  version "/Python-" version ".tar.xz"))
-              (patches (search-patches
-                        "python-3.9-fix-tests.patch"
-                        "python-3-deterministic-build-info.patch"
-                        "python-3-search-paths.patch"))
-              (sha256
-               (base32
-                "0z94vv5qhlwvcgc4sy9sdiqs0220s84wx3b62vslh5419z2k881w"))
-              (modules '((guix build utils)))
-              (snippet
-               '(begin
-                  ;; Delete the bundled copy of libexpat.
-                  (delete-file-recursively "Modules/expat")
-                  (substitute* "Modules/Setup"
-                    ;; Link Expat instead of embedding the bundled one.
-                    (("^#pyexpat.*") "pyexpat pyexpat.c -lexpat\n"))
-                  #t))))))
+     (list (guix-pythonpath-search-path version)
+           ;; Used to locate tzdata by the zoneinfo module introduced in
+           ;; Python 3.9.
+           (search-path-specification
+            (variable "PYTHONTZPATH")
+            (files (list "share/zoneinfo")))))))
 
 ;; Current 3.x version.
-(define-public python-3 python-3.8)
+(define-public python-3 python-3.9)
 
 ;; Current major version.
 (define-public python python-3)
@@ -621,8 +654,8 @@ for more information.")))
                   (lambda (old new)
                     (symlink (string-append python old)
                              (string-append bin "/" new)))
-                  `("python3" ,"pydoc3" ,"idle3" ,"pip3")
-                  `("python"  ,"pydoc"  ,"idle"  ,"pip"))
+                  `("python3" ,"pydoc3" ,"pip3")
+                  `("python"  ,"pydoc"  ,"pip"))
                 ;; python-config outputs search paths based upon its location,
                 ;; use a bash wrapper to avoid changing its outputs.
                 (let ((bash (string-append (assoc-ref %build-inputs "bash")
@@ -633,8 +666,7 @@ for more information.")))
                     (lambda ()
                       (format #t "#!~a~%" bash)
                       (format #t "exec \"~a\" \"$@\"~%" old)
-                      (chmod new #o755)
-                      #t)))))))
+                      (chmod new #o755))))))))
     (synopsis "Wrapper for the Python 3 commands")
     (description
      "This package provides wrappers for the commands of Python@tie{}3.x such
@@ -697,7 +729,7 @@ To function properly, this package should not be installed together with the
      `(("pkg-config" ,pkg-config)
        ("python" ,python-wrapper)))
     (inputs
-     `(("libffi" ,libffi)))
+     (list libffi))
     (home-page "https://micropython.org/")
     (synopsis "Python implementation for microcontrollers and constrained systems")
     (description "MicroPython is a lean and efficient implementation of the
@@ -732,22 +764,23 @@ ease from the desktop to a microcontroller or embedded system.")
        ("nss-certs" ,nss-certs)         ; For ssl tests
        ("gzip" ,gzip)))
     (inputs
-     `(("libffi" ,libffi)
-       ("zlib" ,zlib)
-       ("ncurses" ,ncurses)
-       ("openssl" ,openssl)
-       ("expat" ,expat)
-       ("bzip2" ,bzip2)
-       ("sqlite" ,sqlite)
-       ("gdbm" ,gdbm)
-       ("tcl" ,tcl)
-       ("tk" ,tk)
-       ("glibc" ,glibc)
-       ("xz" ,xz)))                     ; liblzma
+     (list libffi
+           zlib
+           ncurses
+           openssl
+           expat
+           bzip2
+           sqlite
+           gdbm
+           tcl
+           tk
+           glibc
+           xz))                     ; liblzma
     (arguments
      `(#:tests? #f                     ;FIXME: 43 out of 364 tests are failing
        #:modules ((ice-9 ftw) (ice-9 match)
                   (guix build utils) (guix build gnu-build-system))
+       #:disallowed-references (,nss-certs)
        #:phases (modify-phases %standard-phases
                   (delete 'configure)
                   (add-after 'unpack 'patch-source
@@ -791,7 +824,8 @@ ease from the desktop to a microcontroller or embedded system.")
                                         "/lib/libsqlite3.so.0'")))
                       (substitute* '("lib-python/3/subprocess.py")
                         ;; Fix shell path
-                        (("/bin/sh") (which "sh")))
+                        (("/bin/sh")
+                         (search-input-file inputs "/bin/sh")))
                       (substitute* '("lib-python/3/distutils/unixccompiler.py")
                         ;; gcc-toolchain does not provide symlink cc -> gcc
                         (("\"cc\"") "\"gcc\""))))
@@ -816,9 +850,6 @@ ease from the desktop to a microcontroller or embedded system.")
                                 "--allworkingmodules"))
                       ;; Build c modules and package everything, so tests work.
                       (with-directory-excursion "pypy/tool/release"
-                        (unsetenv "PYTHONPATH") ; Do not use the system’s python libs:
-                                        ; AttributeError: module 'enum' has no
-                                        ; attribute 'IntFlag'
                         (invoke "python2" "package.py"
                                 "--archive-name" "pypy-dist"
                                 "--builddir" (getcwd)))))
diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm
index 4625d2220d..49d514503d 100644
--- a/gnu/packages/qt.scm
+++ b/gnu/packages/qt.scm
@@ -8,7 +8,7 @@
 ;;; Copyright © 2017, 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017 Quiliro <quiliro@fsfla.org>
 ;;; Copyright © 2017, 2018, 2020, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2018, 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2018, 2020, 2022 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2018 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;; Copyright © 2018 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2019, 2020 Marius Bakke <mbakke@fastmail.com>
@@ -49,6 +49,7 @@
   #:use-module (guix build-system trivial)
   #:use-module (guix build-system python)
   #:use-module (guix build-system qt)
+  #:use-module (guix gexp)
   #:use-module (guix packages)
   #:use-module (guix deprecation)
   #:use-module (guix utils)
@@ -69,6 +70,7 @@
   #:use-module (gnu packages ghostscript)
   #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
+  #:use-module (gnu packages gnome)
   #:use-module (gnu packages gnupg)
   #:use-module (gnu packages gperf)
   #:use-module (gnu packages graphics)
@@ -135,8 +137,7 @@
                (chdir "libqite")
                #t)))))
       (inputs
-       `(("qtbase" ,qtbase-5)
-         ("qtmultimedia" ,qtmultimedia)))
+       (list qtbase-5 qtmultimedia))
       (home-page "https://github.com/Ri0n/qite/")
       (synopsis "Qt Interactive Text Elements")
       (description "Qite manages interactive elements on QTextEdit.")
@@ -169,9 +170,7 @@
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "qt5ct.pro"
                (("\\$\\$\\[QT_INSTALL_BINS\\]/lrelease")
-                (string-append (assoc-ref inputs "qttools")
-                               "/bin/lrelease")))
-             #t))
+                (search-input-file inputs "/bin/lrelease")))))
          (replace 'configure
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out")))
@@ -184,10 +183,9 @@
          (add-after 'install 'qt-wrap
            (assoc-ref qt:%standard-phases 'qt-wrap)))))
     (native-inputs
-     `(("qttools" ,qttools)))
+     (list qttools))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)))
+     (list qtbase-5 qtsvg))
     (synopsis "Qt5 Configuration Tool")
     (description "Qt5CT is a program that allows users to configure Qt5
 settings (such as icons, themes, and fonts) in desktop environments or
@@ -223,15 +221,13 @@ window managers, that don't provide Qt integration by themselves.")
       (arguments
        `(#:tests? #f                    ; No target
          #:configure-flags
-         (list
-          (string-append "-DCMAKE_CXX_FLAGS=-I"
-                         (assoc-ref %build-inputs "qtbase")
-                         "/include/qt5/QtXkbCommonSupport/"
-                         ,(package-version qtbase-5)))))
+         ,#~(list
+             (string-append "-DCMAKE_CXX_FLAGS=-I"
+                            #$(this-package-input "qtbase")
+                            "/include/qt5/QtXkbCommonSupport/"
+                            #$(package-version qtbase-5)))))
       (native-inputs
-       `(("cmake-shared" ,cmake-shared)
-         ("extra-cmake-modules" ,extra-cmake-modules)
-         ("pkg-config" ,pkg-config)))
+       (list cmake-shared extra-cmake-modules pkg-config))
       (inputs
        `(("qtbase" ,qtbase-5)
          ("qtwayland" ,qtwayland)
@@ -258,11 +254,9 @@ applications on Wayland.")
          (base32 "02dyqxjyxiqxrlz5g7v9ly8f095vs3iha39l75q6s8axs36y01lq"))))
     (native-inputs
      ;; Optional: lcov and cccc, both are for code coverage
-     `(("doxygen" ,doxygen)))
+     (list doxygen))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtscript" ,qtscript)))
+     (list qtbase-5 qtdeclarative qtscript))
     (build-system cmake-build-system)
     (arguments
      `(#:phases
@@ -323,9 +317,9 @@ system, and the core design of Django is reused in Grantlee.")
     (build-system gnu-build-system)
     (outputs '("out" "debug"))
     (propagated-inputs
-     `(("mesa" ,mesa)
-       ;; Use which the package, not the function
-       ("which" ,(@ (gnu packages base) which))))
+     (list mesa
+           ;; Use which the package, not the function
+           (@ (gnu packages base) which)))
     (inputs
      `(("alsa-lib" ,alsa-lib)
        ("cups" ,cups)
@@ -372,14 +366,14 @@ system, and the core design of Django is reused in Grantlee.")
        ("xdg-utils" ,xdg-utils)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)
-       ("gperf" ,gperf)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python)
-       ("vulkan-headers" ,vulkan-headers)
-       ("ruby" ,ruby)))
+     (list bison
+           flex
+           gperf
+           perl
+           pkg-config
+           python
+           vulkan-headers
+           ruby))
     (arguments
      `(#:configure-flags
        (let ((out (assoc-ref %outputs "out")))
@@ -710,11 +704,9 @@ developers using C++ or QML, a CSS & JavaScript like language.")
               (base32
                "0pjqrdmd1991x9h4rl8sf81pkd89hfd5h1a2gp3fjw96pk0w5hwb"))))
     (propagated-inputs `())
-    (native-inputs `(("perl" ,perl)))
+    (native-inputs (list perl))
     (inputs
-     `(("mesa" ,mesa)
-       ("qtbase" ,qtbase-5)
-       ("zlib" ,zlib)))
+     (list mesa qtbase-5 zlib))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -798,13 +790,13 @@ HostData=lib/qt5
                #t))))))
     (native-inputs `())
     (inputs
-     `(("jasper" ,jasper)
-       ("libmng" ,libmng)
-       ("libtiff" ,libtiff)
-       ("libwebp" ,libwebp)
-       ("mesa" ,mesa)
-       ("qtbase" ,qtbase-5)
-       ("zlib" ,zlib)))
+     (list jasper
+           libmng
+           libtiff
+           libwebp
+           mesa
+           qtbase-5
+           zlib))
     (synopsis "Additional Image Format plugins for Qt")
     (description "The QtImageFormats module contains plugins for adding
 support for MNG, TGA, TIFF and WBMP image formats.")))
@@ -822,10 +814,9 @@ support for MNG, TGA, TIFF and WBMP image formats.")))
     (arguments
      (substitute-keyword-arguments (package-arguments qtsvg)
        ((#:tests? _ #f) #f))) ; TODO: Enable the tests
-    (native-inputs `(("perl" ,perl)))
+    (native-inputs (list perl))
     (inputs
-     `(("mesa" ,mesa)
-       ("qtbase" ,qtbase-5)))
+     (list mesa qtbase-5))
     (synopsis "Qt Extras for X11")
     (description "The QtX11Extras module includes the library to access X11
 from within Qt 5.")))
@@ -850,9 +841,8 @@ from within Qt 5.")))
                          (("qxmlquery") "# qxmlquery")
                          (("xmlpatterns ") "# xmlpatterns"))
                #t))))))
-    (native-inputs `(("perl" ,perl)
-                     ("qtdeclarative" ,qtdeclarative)))
-    (inputs `(("qtbase" ,qtbase-5)))
+    (native-inputs (list perl qtdeclarative))
+    (inputs (list qtbase-5))
     (synopsis "Qt XML patterns module")
     (description "The QtXmlPatterns module is a XQuery and XPath engine for
 XML and custom data models.  It contains programs such as xmlpatterns and
@@ -883,15 +873,14 @@ xmlpatternsvalidator.")))
                    (("\\$\\{_qt5Core_install_prefix\\}") out)))
                #t))))))
     (native-inputs
-     `(("perl" ,perl)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python)
-       ("python-wrapper" ,python-wrapper)
-       ("qtsvg" ,qtsvg)
-       ("vulkan-headers" ,vulkan-headers)))
+     (list perl
+           pkg-config
+           python
+           python-wrapper
+           qtsvg
+           vulkan-headers))
     (inputs
-     `(("mesa" ,mesa)
-       ("qtbase" ,qtbase-5)))
+     (list mesa qtbase-5))
     (synopsis "Qt QML module (Quick 2)")
     (description "The Qt QML module provides a framework for developing
 applications and libraries with the QML language.  It defines and implements the
@@ -910,12 +899,9 @@ with JavaScript and C++.")))
               (base32
                "185zci61ip1wpjrygcw2m6v55lvninc0b8y2p3jh6qgpf5w35003"))))
     (native-inputs
-     `(("perl" ,perl)
-       ("pkg-config" ,pkg-config)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list perl pkg-config qtdeclarative))
     (inputs
-     `(("bluez" ,bluez)
-       ("qtbase" ,qtbase-5)))
+     (list bluez qtbase-5))
     (synopsis "Qt Connectivity module")
     (description "The Qt Connectivity modules provides modules for interacting
 with Bluetooth and NFC.")))
@@ -934,9 +920,8 @@ with Bluetooth and NFC.")))
      (substitute-keyword-arguments (package-arguments qtsvg)
        ((#:tests? _ #f) #f))) ; TODO: Enable the tests
     (native-inputs
-     `(("perl" ,perl)
-       ("qtdeclarative" ,qtdeclarative)))
-    (inputs `(("qtbase" ,qtbase-5)))
+     (list perl qtdeclarative))
+    (inputs (list qtbase-5))
     (synopsis "Qt Web Sockets module")
     (description "WebSocket is a web-based protocol designed to enable two-way
 communication between a client application and a remote host.  The Qt
@@ -966,9 +951,8 @@ consume data received from the server, or both.")))
                  (("QTest::newRow(\"twist\") << \"twist\"") "")) ;failing test
                #t))))))
     (native-inputs
-     `(("perl" ,perl)
-       ("qtdeclarative" ,qtdeclarative)))
-    (inputs `(("qtbase" ,qtbase-5)))
+     (list perl qtdeclarative))
+    (inputs (list qtbase-5))
     (synopsis "Qt Sensors module")
     (description "The Qt Sensors API provides access to sensor hardware via QML
 and C++ interfaces.  The Qt Sensors API also provides a motion gesture
@@ -1005,18 +989,15 @@ recognition API for devices.")))
                          (string-append "PREFIX=" out)))))))
        ((#:tests? _ #f) #f)))           ; TODO: Enable the tests
     (native-inputs
-     `(("perl" ,perl)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list perl pkg-config python qtdeclarative))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("mesa" ,mesa)
-       ("pulseaudio" ,pulseaudio)
-       ("qtbase" ,qtbase-5)
-       ;; Gstreamer is needed for the mediaplayer plugin
-       ("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base)))
+     (list alsa-lib
+           mesa
+           pulseaudio
+           qtbase-5
+           ;; Gstreamer is needed for the mediaplayer plugin
+           gstreamer
+           gst-plugins-base))
     (synopsis "Qt Multimedia module")
     (description "The Qt Multimedia module provides set of APIs to play and
 record media, and manage a collection of media content.  It also contains a
@@ -1053,10 +1034,7 @@ set of plugins for interacting with pulseaudio and GStreamer.")))
                (setenv "DBUS_FATAL_WARNINGS" "0")
                #t))))))
     (native-inputs
-     `(("glib" ,glib)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list glib perl pkg-config qtdeclarative))
     (inputs
      `(("fontconfig" ,fontconfig)
        ("freetype" ,freetype)
@@ -1084,10 +1062,9 @@ compositor libraries.")))
              (sha256
               (base32
                "17gp5qzg4wdg8qlxk2p3mh8x1vk33rf33wic3fy0cws193bmkiar"))))
-    (native-inputs `(("perl" ,perl)))
+    (native-inputs (list perl))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("eudev" ,eudev)))
+     (list qtbase-5 eudev))
     (arguments
      (substitute-keyword-arguments (package-arguments qtsvg)
        ((#:phases phases)
@@ -1129,9 +1106,7 @@ interacting with serial ports from within Qt.")))
                     (format #f "QStringLiteral(~s)" libcansocket.so)))
                  #t)))))))
     (inputs
-     `(("libsocketcan" ,libsocketcan)
-       ("qtbase" ,qtbase-5)
-       ("qtserialport" ,qtserialport)))
+     (list libsocketcan qtbase-5 qtserialport))
     (synopsis "Qt Serial Bus module")
     (description "The Qt Serial Bus API provides classes and functions to
 access the various industrial serial buses and protocols, such as CAN, ModBus,
@@ -1148,10 +1123,8 @@ and others.")))
               (base32
                "1h9y634phvvk557mhmf9z4lmxr41rl8x9mqy2lzp31mk8ffffzqj"))))
     (native-inputs
-     `(("perl" ,perl)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtwebsockets" ,qtwebsockets)))
-    (inputs `(("qtbase" ,qtbase-5)))
+     (list perl qtdeclarative qtwebsockets))
+    (inputs (list qtbase-5))
     (synopsis "Web communication library for Qt")
     (description "The Qt WebChannel module enables peer-to-peer communication
 between the host (QML/C++ application) and the client (HTML/JavaScript
@@ -1178,11 +1151,7 @@ popular web engines, Qt WebKit 2 and Qt WebEngine.")))
                #t))))))
     (native-inputs '())
     (inputs
-     `(("mesa" ,mesa)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtwebsockets" ,qtwebsockets)
-       ("zlib" ,zlib)))
+     (list mesa qtbase-5 qtdeclarative qtwebsockets zlib))
     (synopsis "QPA plugin for running an application via a browser using
 streamed WebGL commands")
     (description "Qt back end that uses WebGL for rendering. It allows Qt
@@ -1202,10 +1171,9 @@ OpenGL ES 2.0 and can be used in HTML5 canvas elements")))
               (base32
                "1rw1wibmbxlj6xc86qs3y8h42al1vczqiksyxzaylxs9gqb4d7xy"))))
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list qtbase-5 qtdeclarative))
     (synopsis "Display web content in a QML application")
     (description "Qt WebView provides a way to display web content in a QML
 application without necessarily including a full web browser stack by using
@@ -1228,15 +1196,9 @@ native APIs where it makes sense.")))
      (substitute-keyword-arguments (package-arguments qtsvg)
        ((#:tests? _ #f) #f))) ; TODO: Enable the tests
     (native-inputs
-     `(("perl" ,perl)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtquickcontrols" ,qtquickcontrols)
-       ("qtserialport" ,qtserialport)))
+     (list perl qtdeclarative qtquickcontrols qtserialport))
     (inputs
-     `(("icu4c" ,icu4c)
-       ("openssl" ,openssl)
-       ("qtbase" ,qtbase-5)
-       ("zlib" ,zlib)))
+     (list icu4c openssl qtbase-5 zlib))
     (synopsis "Qt Location and Positioning modules")
     (description "The Qt Location module provides an interface for location,
 positioning and geolocation plugins.")))
@@ -1255,12 +1217,9 @@ positioning and geolocation plugins.")))
      (substitute-keyword-arguments (package-arguments qtsvg)
        ((#:tests? _ #f) #f))) ; TODO: Enable the tests
     (native-inputs
-     `(("perl" ,perl)
-       ("qtdeclarative" ,qtdeclarative)
-       ("vulkan-headers" ,vulkan-headers)))
+     (list perl qtdeclarative vulkan-headers))
     (inputs
-     `(("mesa" ,mesa)
-       ("qtbase" ,qtbase-5)))
+     (list mesa qtbase-5))
     (synopsis "Qt Tools and Designer modules")
     (description "The Qt Tools module provides a set of applications to browse
 the documentation, translate applications, generate help files and other stuff
@@ -1278,10 +1237,9 @@ that helps in Qt development.")))
                "0gk74hk488k9ldacxbxcranr3arf8ifqg8kz9nm1rgdgd59p36d2"))
              (patches (search-patches "qtscript-disable-tests.patch"))))
     (native-inputs
-     `(("perl" ,perl)
-       ("qttools" ,qttools)))
+     (list perl qttools))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (synopsis "Qt Script module")
     (description "Qt provides support for application scripting with ECMAScript.
 The following guides and references cover aspects of programming with
@@ -1301,8 +1259,7 @@ ECMAScript and Qt.")))
      (substitute-keyword-arguments (package-arguments qtsvg)
        ((#:tests? _ #f) #f))) ; TODO: Enable the tests
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list qtbase-5 qtdeclarative))
     (synopsis "Qt Quick Controls and other Quick modules")
     (description "The QtScript module provides classes for making Qt
 applications scriptable.  This module provides a set of extra components that
@@ -1322,8 +1279,7 @@ can be used to build complete interfaces in Qt Quick.")))
      (substitute-keyword-arguments (package-arguments qtsvg)
        ((#:tests? _ #f) #f))) ; TODO: Enable the tests
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list qtbase-5 qtdeclarative))
     (synopsis "Qt Quick Controls 2 and other Quick 2 modules")
     (description "The Qt Quick Controls 2 module contains the Qt Labs Platform
 module that provides platform integration: native dialogs, menus and menu bars,
@@ -1344,8 +1300,7 @@ not available.")))
      (substitute-keyword-arguments (package-arguments qtsvg)
        ((#:tests? _ #f) #f))) ; TODO: Enable the tests
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list qtbase-5 qtdeclarative))
     (synopsis "Qt Graphical Effects module")
     (description "The Qt Graphical Effects module provides a set of QML types
 for adding visually impressive and configurable effects to user interfaces.
@@ -1365,8 +1320,7 @@ coloring, and many more.")))
               (base32
                "0p07bg93fdfn4gr2kv38qgnws5znhswajrxdfs8xc9l3i7vi2xn7"))))
     (native-inputs
-     `(("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list perl pkg-config))
     (inputs
      `(("fontconfig" ,fontconfig)
        ("freetype" ,freetype)
@@ -1400,8 +1354,7 @@ and mobile applications targeting TV-like form factors.")))
                    (("scion") "#"))
                  #t))))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list qtbase-5 qtdeclarative))
     (synopsis "Qt SCXML module")
     (description "The Qt SCXML module provides functionality to create state
 machines from SCXML files.  This includes both dynamically creating state
@@ -1420,8 +1373,7 @@ also contains functionality to support data models and executable content.")))
               (base32
                "09rjx53519dfk4qj2gbn3vlxyriasyb747wpg1p11y7jkwqhs4l7"))))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list qtbase-5 qtdeclarative))
     (synopsis "Qt Purchasing module")
     (description "The Qt Purchasing module provides and in-app API for
 purchasing goods and services.")))
@@ -1440,8 +1392,7 @@ purchasing goods and services.")))
      (substitute-keyword-arguments (package-arguments qtsvg)
        ((#:tests? _ #f) #f))) ; TODO: Enable the tests
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list qtbase-5 qtdeclarative))
     (synopsis "Qt Charts module")
     (description "The Qt Charts module provides a set of easy to use chart
 components.  It uses the Qt Graphics View Framework, therefore charts can be
@@ -1464,8 +1415,7 @@ selecting one of the charts themes.")
      (substitute-keyword-arguments (package-arguments qtsvg)
        ((#:tests? _ #f) #f))) ; TODO: Enable the tests
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list qtbase-5 qtdeclarative))
     (synopsis "Qt Data Visualization module")
     (description "The Qt Data Visualization module provides a way to visualize
 data in 3D as bar, scatter, and surface graphs. It is especially useful for
@@ -1495,7 +1445,7 @@ customized by using themes or by adding custom items and labels to them.")
                  (("oauth1 ") "# oauth1 "))
                #t))))))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (synopsis "Qt Network Authorization module")
     (description "The Qt Network Authorization module provides an
 implementation of OAuth and OAuth2 authenticathon methods for Qt.")))
@@ -1526,8 +1476,7 @@ implementation of OAuth and OAuth2 authenticathon methods for Qt.")))
                    "integration_multiprocess"))
                #t))))))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list qtbase-5 qtdeclarative))
     (synopsis "Qt Remote Objects module")
     (description "The Qt Remote Objects module is an @dfn{inter-process
 communication} (IPC) module developed for Qt.  The idea is to extend existing
@@ -1549,12 +1498,9 @@ processes or computers.")))
      (substitute-keyword-arguments (package-arguments qtsvg)
        ((#:tests? _ #f) #f))) ; TODO: Enable the tests
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (native-inputs
-     `(("perl" ,perl)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtmultimedia" ,qtmultimedia)
-       ("qtxmlpatterns" ,qtxmlpatterns)))
+     (list perl qtdeclarative qtmultimedia qtxmlpatterns))
     (synopsis "Qt Speech module")
     (description "The Qt Speech module enables a Qt application to support
 accessibility features such as text-to-speech, which is useful for end-users
@@ -1567,7 +1513,7 @@ message.")))
 (define-public qtspell
   (package
     (name "qtspell")
-    (version "0.9.0")
+    (version "1.0.1")
     (source
      (origin
        (method git-fetch)
@@ -1576,16 +1522,14 @@ message.")))
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1081makirjxixz44ghwz362vgnk5wcks6ni6w01pl667x8wggsd2"))))
+        (base32 "19ff6jzm699wrxrk57w3d4kl9qxgdipdikpwls9n4aqv4mw7g969"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f))                    ;no test
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list pkg-config qttools))
     (inputs
-     `(("enchant" ,enchant)
-       ("qtbase" ,qtbase-5)))
+     (list enchant qtbase-5))
     (home-page "https://github.com/manisandro/qtspell")
     (synopsis "Spell checking for Qt text widgets")
     (description
@@ -1941,7 +1885,9 @@ using the Enchant spell-checking library.")
                (invoke "qmake" "QT_BUILD_PARTS = libs tools" "--"
                        "--webengine-printing-and-pdf=no"
                        "--webengine-ffmpeg=system"
-                       "--webengine-icu=system"
+                       ;; FIXME: Building qtwebengine 5.12.2 with
+                       ;; icu4c >= 68 fails.
+                       ;;"--webengine-icu=system"
                        "--webengine-pepper-plugins=no"
                        "-webengine-proprietary-codecs")))))
        ;; Tests are disabled due to "Could not find QtWebEngineProcess error"
@@ -2004,7 +1950,7 @@ and binaries removed, and adds modular support for using system libraries.")
                     "singleapplication.h" "singleapplication_p.h"))
                  #t))))))
       (inputs
-       `(("qtbase" ,qtbase-5)))
+       (list qtbase-5))
       (home-page "https://github.com/itay-grudev/SingleApplication")
       (synopsis "Replacement of QtSingleApplication for Qt5 and Qt6")
       (description
@@ -2032,10 +1978,9 @@ instances.")
           "1idaivamp1jvbbai9yzv471c62xbqxhaawccvskaizihkd0lq0jx"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python" ,python-wrapper)))
+     (list python-wrapper))
     (propagated-inputs
-     `(("python-toml" ,python-toml)
-       ("python-packaging" ,python-packaging)))
+     (list python-toml python-packaging))
     (home-page "https://www.riverbankcomputing.com/software/sip/intro")
     (synopsis "Python binding creator for C and C++ libraries")
     (description
@@ -2114,10 +2059,9 @@ module provides support functions to the automatically generated code.")
         (patches (search-patches "pyqt-configure.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("qtbase" ,qtbase-5))) ; for qmake
+     (list qtbase-5)) ; for qmake
     (propagated-inputs
-     `(("python-sip" ,python-sip)
-       ("python-pyqt5-sip" ,python-pyqt5-sip)))
+     (list python-sip python-pyqt5-sip))
     (inputs
      `(("python" ,python-wrapper)
        ("qtbase" ,qtbase-5)
@@ -2223,10 +2167,9 @@ contain over 620 classes.")
          "0d56ak71r14w4f9r96vaj34qcn2rbln3s6ildvvyc707fjkzwwjd"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("python" ,python)
-       ("python-sip" ,python-sip)
-       ;; qtbase is required for qmake
-       ("qtbase" ,qtbase-5)))
+     (list python python-sip
+           ;; qtbase is required for qmake
+           qtbase-5))
     (inputs
      `(("python" ,python-wrapper)
        ("python-sip" ,python-sip)
@@ -2311,7 +2254,7 @@ itself.")
        "0nh0054c54ji3sm6d268fccf0y5f613spswwgwqd3rnn816hnljl"))))
    (build-system python-build-system)
    (inputs
-    `(("python-sip" ,python-sip)))
+    (list 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++
@@ -2378,7 +2321,7 @@ top of the PyQt bindings for Qt.  PyQt-builder is used to build PyQt itself.")
                  (("\\$\\$\\[QT_HOST_DATA\\]")
                  (string-append out "/lib/qt$${QT_MAJOR_VERSION}")))
                (invoke "qmake")))))))
-    (native-inputs `(("qtbase" ,qtbase-5)))
+    (native-inputs (list qtbase-5))
     (home-page "https://www.riverbankcomputing.co.uk/software/qscintilla/intro")
     (synopsis "Qt port of the Scintilla C++ editor control")
     (description "QScintilla is a port to Qt of Neil Hodgson's Scintilla C++
@@ -2460,7 +2403,7 @@ This package provides the Python bindings.")))
 (define-public qtkeychain
   (package
     (name "qtkeychain")
-    (version "0.9.1")
+    (version "0.13.2")
     (source
       (origin
         (method git-fetch)
@@ -2470,13 +2413,12 @@ This package provides the Python bindings.")))
         (file-name (git-file-name name version))
         (sha256
          (base32
-          "0h4wgngn2yl35hapbjs24amkjfbzsvnna4ixfhn87snjnq5lmjbc"))))
+          "1zk6r2vc1q48qs7mw2h47bpgrfbb9r7lf9cwq4sb1a4nls87zznk"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list pkg-config qttools))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list libsecret qtbase-5))
     (arguments
      `(#:tests? #f ; No tests included
        #:phases
@@ -2485,8 +2427,7 @@ This package provides the Python bindings.")))
            (lambda _
              (substitute* "CMakeLists.txt"
               (("\\$\\{qt_translations_dir\\}")
-               "${CMAKE_INSTALL_PREFIX}/share/qt5/translations"))
-             #t)))))
+               "${CMAKE_INSTALL_PREFIX}/share/qt5/translations")))))))
     (home-page "https://github.com/frankosterfeld/qtkeychain")
     (synopsis "Qt API to store passwords")
     (description
@@ -2586,7 +2527,7 @@ securely.  It will not store any data unencrypted unless explicitly requested.")
                          '("qtlockedfile" "qtpropertybrowser" "qtservice"
                            "qtsingleapplication" "qtsoap")))))))
       (inputs
-       `(("qtbase" ,qtbase-5)))
+       (list qtbase-5))
       (synopsis "Collection of Qt extensions")
       (description "QtSolutions is a set of components extending Qt.
 @itemize
@@ -2619,9 +2560,7 @@ that can be only started once per user.
          (base32 "0hf0mpca248xlqn7xnzkfj8drf19gdyg5syzklvq8pibxiixwxj0"))))
   (build-system gnu-build-system)
   (inputs
-   `(("qtbase" ,qtbase-5)
-     ("qtsvg" ,qtsvg)
-     ("qttools" ,qttools)))
+   (list qtbase-5 qtsvg qttools))
   (arguments
    `(#:phases
      (modify-phases %standard-phases
@@ -2682,16 +2621,20 @@ different kinds of sliders, and much more.")
         (sha256
          (base32
           "1rm9sjkabxna67dl7myx9d9vpdyfxfdhrk9w7b94srkkjbd2d8cw"))
-        (patches (search-patches "qtwebkit-pbutils-include.patch"))))
+        (patches (search-patches "qtwebkit-pbutils-include.patch"
+                                 "qtwebkit-fix-building-with-bison-3.7.patch"
+                                 "qtwebkit-fix-building-with-glib-2.68.patch"
+                                 "qtwebkit-fix-building-with-icu-68.patch"
+                                 "qtwebkit-fix-building-with-python-3.9.patch"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("perl" ,perl)
-       ("python" ,python)
-       ("ruby" ,ruby)
-       ("bison" ,bison)
-       ("flex" ,flex)
-       ("gperf" ,gperf)
-       ("pkg-config" ,pkg-config)))
+     (list perl
+           python
+           ruby
+           bison
+           flex
+           gperf
+           pkg-config))
     (inputs
      `(("icu" ,icu4c)
        ("glib" ,glib)
@@ -2765,10 +2708,9 @@ time Web content can be enhanced with native controls.")
          "09fz6v8rp28997f235yaifj8p4vvsyv45knc1iivgdvx7msgcd0m"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("qttools" ,qttools)))
+     (list qttools))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list qtbase-5 qtdeclarative))
     (home-page "https://filcuc.github.io/DOtherSide/index.html")
     (synopsis "C language library for creating bindings for the Qt QML language")
     (description
@@ -2803,9 +2745,9 @@ a binding language:
       (build-system cmake-build-system)
       (arguments `(#:tests? #f)) ; There are no tests
       (native-inputs
-       `(("qttools" ,qttools)))
+       (list qttools))
       (inputs
-       `(("qtbase" ,qtbase-5)))
+       (list qtbase-5))
       (home-page "https://gitlab.com/mattia.basaglia/Qt-Color-Widgets")
       (synopsis "Color management widgets")
       (description "QtColorWidgets provides a Qt color dialog that is more
@@ -2834,7 +2776,7 @@ color-related widgets.")
            (sha256
             (base32 "0vp8lpxvd1nlp4liqrlvslpqrgfn0wpiwizzdsjbj22zzb8vxikc"))))))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -2879,12 +2821,12 @@ color-related widgets.")
                 "060ljj1nzyp4zfz2vasbv2i7gs5rfkkjwxxbisd0fdw01d5m01mk"))))
     (build-system cmake-build-system)
     (inputs
-     `(("clang-toolchain" ,clang-toolchain)
-       ("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)
-       ("python-wrapper" ,python-wrapper)
-       ("qtbase" ,qtbase-5)
-       ("qtxmlpatterns" ,qtxmlpatterns)))
+     (list clang-toolchain
+           libxml2
+           libxslt
+           python-wrapper
+           qtbase-5
+           qtxmlpatterns))
     (arguments
      `(#:tests? #f
        ;; FIXME: Building tests fails
@@ -2930,25 +2872,25 @@ color-related widgets.")
     (source (package-source python-shiboken-2))
     (build-system cmake-build-system)
     (inputs
-     `(("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)
-       ("clang-toolchain" ,clang-toolchain)
-       ("qtbase" ,qtbase-5)
-       ("qtdatavis3d" ,qtdatavis3d)
-       ("qtlocation" ,qtlocation)
-       ("qtmultimedia" ,qtmultimedia)
-       ("qtquickcontrols" ,qtquickcontrols)
-       ("qtscript" ,qtscript)
-       ("qtscxml" ,qtscxml)
-       ("qtsensors" ,qtsensors)
-       ("qtspeech" ,qtspeech)
-       ("qtsvg" ,qtsvg)
-       ("qtwebchannel" ,qtwebchannel)
-       ("qtwebsockets" ,qtwebsockets)
-       ("qtx11extras" ,qtx11extras)
-       ("qtxmlpatterns" ,qtxmlpatterns)))
+     (list libxml2
+           libxslt
+           clang-toolchain
+           qtbase-5
+           qtdatavis3d
+           qtlocation
+           qtmultimedia
+           qtquickcontrols
+           qtscript
+           qtscxml
+           qtsensors
+           qtspeech
+           qtsvg
+           qtwebchannel
+           qtwebsockets
+           qtx11extras
+           qtxmlpatterns))
     (propagated-inputs
-     `(("python-shiboken-2" ,python-shiboken-2)))
+     (list python-shiboken-2))
     (native-inputs
      `(("cmake" ,cmake-minimal)
        ("python" ,python-wrapper)
@@ -2999,9 +2941,7 @@ generate Python bindings for your C or C++ code.")
     (source (package-source python-shiboken-2))
     (build-system cmake-build-system)
     (inputs
-     `(("python-pyside-2" ,python-pyside-2)
-       ("python-shiboken-2" ,python-shiboken-2)
-       ("qtbase" ,qtbase-5)))
+     (list python-pyside-2 python-shiboken-2 qtbase-5))
     (native-inputs
      `(("python" ,python-wrapper)))
     (arguments
@@ -3045,10 +2985,9 @@ generate Python bindings for your C or C++ code.")
            (lambda* (#:key make-flags #:allow-other-keys)
              (apply invoke (cons "qmake" make-flags)))))))
     (native-inputs
-     `(("qtbase" ,qtbase-5)
-       ("qttools" ,qttools)))
+     (list qtbase-5 qttools))
     (inputs
-     `(("glu" ,glu)))
+     (list glu))
     (home-page "http://libqglviewer.com")
     (synopsis "Qt-based C++ library for the creation of OpenGL 3D viewers")
     (description
@@ -3085,11 +3024,9 @@ being fully customizable and easy to extend.")
     (build-system cmake-build-system)
     (arguments '(#:tests? #f)) ; There are no tests
     (native-inputs
-      `(("pkg-config" ,pkg-config)
-        ("cmake" ,cmake)))
+      (list pkg-config cmake))
     (inputs
-      `(("qtbase" ,qtbase-5)
-        ("coin3D" ,coin3D-4)))
+      (list qtbase-5 coin3D-4))
     (home-page "https://github.com/coin3d/soqt")
     (synopsis "Qt GUI component toolkit library for Coin")
     (description "SoQt is a Qt GUI component toolkit library for Coin.  It is
diff --git a/gnu/packages/racket.scm b/gnu/packages/racket.scm
index 661443e0c3..d0a5ca494b 100644
--- a/gnu/packages/racket.scm
+++ b/gnu/packages/racket.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020 Pierre Neidhardt <mail@ambrevar.xyz>
 ;;; Copyright © 2021 Philip McGrath <philip@philipmcgrath.com>
+;;; Copyright © 2021 jgart <jgart@dismail.de>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -128,7 +129,7 @@
 (define-public racket-minimal
   (package
     (name "racket-minimal")
-    (version "8.2")            ; note: remember to also update racket!
+    (version "8.3")            ; note: remember to also update racket!
     (source
      (origin
        (method git-fetch)
@@ -136,11 +137,9 @@
              (url "https://github.com/racket/racket")
              (commit (string-append "v" version))))
        (sha256
-        "061bhiyjlvazph0dj9i3i3x2q5z53rp8h5cjwg3frjimkr45lncn")
+        "1i1jnv1wb0kanfg47hniafx2vhwjc33qqx66lq7wkf5hbmgsyws3")
        (file-name (git-file-name name version))
-       (patches (search-patches "racket-minimal-sh-via-rktio.patch"
-                                ;; Remove the following in version 8.3:
-                                "racket-minimal-backport-1629887.patch"))
+       (patches (search-patches "racket-minimal-sh-via-rktio.patch"))
        (modules '((guix build utils)))
        (snippet
         (with-imported-modules '((guix build utils))
@@ -264,10 +263,10 @@ DrRacket IDE, are not included.")
      (inherit racket-minimal)
      (name "racket-minimal-bc-3m")
      (inputs
-      `(("libffi" ,libffi) ;; <- only for BC variants
-        ,@(fold alist-delete
-                (package-inputs racket-minimal)
-                '("zlib" "zlib:static" "lz4" "lz4:static"))))
+      (modify-inputs (package-inputs racket-minimal)
+        (delete "zlib" "zlib:static" "lz4" "lz4:static")
+        (prepend libffi ;; <- only for BC variants
+                 )))
      (native-inputs
       `(("libtool" ,libtool)
         ("racket" ,(if (%current-target-system)
@@ -427,7 +426,7 @@ Chez Scheme.")
                  %installer-mirrors))
        (sha256
         (base32
-         "10sgzsraxzxp1k2y2wvz8rcjwvhbcd6k72l9lyqr34yazlwfdz26"))
+         "0jdr0y7scvv2a3sq456ifrgq0yfsbiwavdf2m86zmrapp481mby4"))
        (snippet
         #~(begin
             (use-modules (guix build utils)
@@ -530,7 +529,7 @@ Chez Scheme.")
          (delete 'install))
        ;; we still don't have these:
        #:tests? #f))
-    (synopsis "A programmable programming language in the Scheme family")
+    (synopsis "Programmable programming language in the Scheme family")
     (description
      "Racket is a general-purpose programming language in the Scheme family,
 with a large set of libraries and a compiler based on Chez Scheme.  Racket is
diff --git a/gnu/packages/radio.scm b/gnu/packages/radio.scm
index 7707fcf004..bba064c672 100644
--- a/gnu/packages/radio.scm
+++ b/gnu/packages/radio.scm
@@ -26,6 +26,7 @@
 
 (define-module (gnu packages radio)
   #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix gexp)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
@@ -143,11 +144,9 @@ useful in modems implemented with @dfn{digital signal processing} (DSP).")
               (base32 "1n6dbg13q8ga5qhg1yiszwly4jj0rxqr6f1xwm9waaly5z493xsd"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (inputs
-     `(("fftwf" ,fftwf)
-       ("libfec" ,libfec)))
+     (list fftwf libfec))
     (arguments
      `(;; For reproducibility, disable use of SSE3, SSE4.1, etc.
        #:configure-flags '("--enable-simdoverride")
@@ -185,9 +184,9 @@ mathematical operations, and much more.")
          "0lmvsnb4xw4hmz6zs0z5ilsah5hjz29g1s0050n59fllskqr3b8k"))))
     (build-system cmake-build-system)
     (inputs
-     `(("libusb" ,libusb)))
+     (list libusb))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
      `(#:configure-flags '("-DDETACH_KERNEL_DRIVER=ON"
                            "-DINSTALL_UDEV_RULES=ON")
@@ -236,9 +235,9 @@ this package.  E.g.: @code{(udev-rules-service 'rtl-sdr rtl-sdr)}")
         (base32 "0n699i5a9fzzhf80fcjlqq6p2a013rzlwmwv4nmwfafy6c8cr924"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libusb" ,libusb)))
+     (list libusb))
     (arguments
      '(#:configure-flags '("-DINSTALL_UDEV_RULES=ON")
        #:tests? #f ; No tests
@@ -283,8 +282,7 @@ with this package.  E.g.: @code{(udev-rules-service 'airspyhf airspyhf)}")
         (base32 "1dy25zxk7wmg7ik82dx7h3bbbynvalbz1dxsl7kgm3374yxhnixv"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("python" ,python)
-       ("swig" ,swig)))
+     (list python swig))
     (native-search-paths
      (list (search-path-specification
             (variable "SOAPY_SDR_PLUGIN_PATH")
@@ -312,8 +310,7 @@ defined radio hardware devices with a common API.")
         (base32 "04krqinglgkjvx7klqik6yn8rb4mlpwzb6zvnmvm7szqci2agggz"))))
     (build-system cmake-build-system)
     (inputs
-     `(("airspyhf" ,airspyhf)
-       ("soapysdr" ,soapysdr)))
+     (list airspyhf soapysdr))
     (arguments
      `(#:tests? #f))  ; No test suite
     (home-page "https://github.com/pothosware/SoapyAirspyHF/wiki")
@@ -341,8 +338,7 @@ SoapySDR library.")
           (base32 "0l5890a240i1fan88jjdxaqswk3as410nlrv12a698fy9npqh4w4"))))
       (build-system cmake-build-system)
       (inputs
-       `(("hackrf" ,hackrf)
-         ("soapysdr" ,soapysdr)))
+       (list hackrf soapysdr))
       (arguments
        `(#:tests? #f))  ; No test suite
       (home-page "https://github.com/pothosware/SoapyHackRF/wiki")
@@ -366,8 +362,7 @@ SoapySDR library.")
         (base32 "1dlnryj6k20pk7w7v4v13y099r7ikhvlzbgzgphmi5cxkdv0shrd"))))
     (build-system cmake-build-system)
     (inputs
-     `(("rtl-sdr" ,rtl-sdr)
-       ("soapysdr" ,soapysdr)))
+     (list rtl-sdr soapysdr))
     (arguments
      `(#:tests? #f))  ; No test suite
     (home-page "https://github.com/pothosware/SoapyRTLSDR/wiki")
@@ -379,19 +374,17 @@ SoapySDR library.")
 (define-public chirp
   (package
     (name "chirp")
-    (version "20201121")
+    (version "20211016")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://trac.chirp.danplanet.com/chirp_daily/daily-"
                            version "/chirp-daily-" version ".tar.gz"))
        (sha256
-        (base32 "092jryb1jn9li6zj243awv6piz1lhghqsm4phrz7j0rgqf76dy4n"))))
+        (base32 "13xzqnhvnw6yipv4izkq0s9ykyl9pc5ifpr1ii8xfp28ch706qyw"))))
     (build-system python-build-system)
     (inputs
-     `(("python2-libxml2" ,python2-libxml2)
-       ("python2-pygtk" ,python2-pygtk)
-       ("python2-pyserial" ,python2-pyserial)))
+     (list python2-libxml2 python2-pygtk python2-pyserial))
     (arguments
      `(#:python ,python-2))
     (home-page "https://chirp.danplanet.com")
@@ -420,8 +413,7 @@ memory contents between them.")
           (base32 "0i7vkjjrq392gs9qaibr7j3v4hijqqg8458dn21dwh16ncrvr9bp"))))
       (build-system cmake-build-system)
       (inputs
-       `(("libpng" ,libpng)
-         ("libsndfile" ,libsndfile)))
+       (list libpng libsndfile))
       (arguments
        `(#:tests? #f))  ; no tests
       (home-page "https://github.com/Xerbo/aptdec")
@@ -464,12 +456,9 @@ and a dedicated receiver.")
                 "esac\nAC_SUBST([ICONV], [\"-liconv\"])"))
              #t)))))
     (inputs
-     `(("libiconv" ,libiconv)
-       ("libsndfile" ,libsndfile)
-       ("liquid-dsp" ,liquid-dsp)))
+     (list libiconv libsndfile liquid-dsp))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (home-page "https://github.com/windytan/redsea")
     (synopsis "Lightweight RDS to JSON decoder")
     (description "redsea is a lightweight command-line @dfn{FM Radio Data
@@ -505,10 +494,10 @@ used by RDS Spy, and audio files containing @dfn{multiplex} signals (MPX).")
        ("python-pyzmq" ,python-pyzmq)
        ("python-scipy" ,python-scipy)
        ("python-sphinx" ,python-sphinx)
-       ("texlive" ,(texlive-union (list texlive-amsfonts/patched
-                                        texlive-latex-amsmath
-                                        ;; TODO: Add newunicodechar.
-                                        texlive-latex-graphics)))
+       ("texlive" ,(texlive-updmap.cfg (list texlive-amsfonts
+                                             texlive-latex-amsmath
+                                             ;; TODO: Add newunicodechar.
+                                             texlive-latex-graphics)))
        ("xorg-server" ,xorg-server-for-tests)))
     (inputs
      `(("alsa-lib" ,alsa-lib)
@@ -535,6 +524,7 @@ used by RDS Spy, and audio files containing @dfn{multiplex} signals (MPX).")
        ("python-pycairo" ,python-pycairo)
        ("python-pygobject" ,python-pygobject)
        ("python-pyqt" ,python-pyqt-without-qtwebkit)
+       ("python-pyqtgraph" ,python-pyqtgraph)
        ("python-pyyaml" ,python-pyyaml)
        ("qtbase" ,qtbase-5)
        ("qwt" ,qwt)
@@ -582,8 +572,7 @@ used by RDS Spy, and audio files containing @dfn{multiplex} signals (MPX).")
          (add-before 'check 'set-test-environment
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "HOME" "/tmp")
-             (system (string-append (assoc-ref inputs "xorg-server")
-                                    "/bin/Xvfb :1 &"))
+             (system "Xvfb :1 &")
              (setenv "DISPLAY" ":1")
              #t))
          (replace 'check
@@ -597,7 +586,10 @@ used by RDS Spy, and audio files containing @dfn{multiplex} signals (MPX).")
                            '(;; https://github.com/gnuradio/gnuradio/issues/3871
                              "qa_header_payload_demux"
                              ;; https://github.com/gnuradio/gnuradio/issues/4348
-                             "qa_packet_headerparser_b")
+                             "qa_packet_headerparser_b"
+                             ;; qa_rotator_cc sometimes fails, it looks like
+                             ;; a floating point number precision issue.
+                             "qa_rotator_cc")
                            "|"))))
          (add-after 'install 'wrap-python
            (assoc-ref python:%standard-phases 'wrap))
@@ -624,7 +616,7 @@ used by RDS Spy, and audio files containing @dfn{multiplex} signals (MPX).")
             (variable "GRC_BLOCKS_PATH")
             (files '("share/gnuradio/grc/blocks")))
            (search-path-specification
-            (variable "PYTHONPATH")
+            (variable "GUIX_PYTHONPATH")
             (files (list (string-append "lib/python"
                                         (version-major+minor
                                          (package-version python))
@@ -656,26 +648,22 @@ environment.")
           (base32 "1pk5gnyznfyy510lbqzg9ijcb1fnhmn547n24aiqyrxd6i6vv1ki"))))
       (build-system cmake-build-system)
       (native-inputs
-       `(("doxygen" ,doxygen)
-         ("pkg-config" ,pkg-config)
-         ("pybind11" ,pybind11)
-         ("python-mako" ,python-mako)
-         ("python-six" ,python-six)))
+       (list doxygen pkg-config pybind11 python-mako python-six))
       (inputs
-       `(("airspyhf" ,airspyhf)
-         ("boost" ,boost)
-         ("fftwf" ,fftwf)
-         ("gmp" ,gmp)
-         ("gnuradio" ,gnuradio)
-         ("hackrf" ,hackrf)
-         ("libsndfile" ,libsndfile)
-         ("log4cpp" ,log4cpp)
-         ("python" ,python)
-         ("python-numpy" ,python-numpy)
-         ("python-pyqt" ,python-pyqt)
-         ("rtl-sdr" ,rtl-sdr)
-         ("soapysdr" ,soapysdr)
-         ("volk" ,volk)))
+       (list airspyhf
+             boost
+             fftwf
+             gmp
+             gnuradio
+             hackrf
+             libsndfile
+             log4cpp
+             python
+             python-numpy
+             python-pyqt
+             rtl-sdr
+             soapysdr
+             volk))
       (arguments
        `(#:modules ((guix build cmake-build-system)
                     ((guix build python-build-system) #:prefix python:)
@@ -714,12 +702,12 @@ to access different radio hardware.")
        ("doxygen" ,doxygen)
        ("libtool" ,libtool)
        ("pkg-config" ,pkg-config)
-       ("texlive" ,(texlive-union (list texlive-amsfonts/patched
+       ("texlive" ,(texlive-updmap.cfg (list texlive-amsfonts
                                         texlive-latex-amsmath
                                         ;; TODO: Add newunicodechar.
                                         texlive-latex-graphics)))))
     (inputs
-     `(("fftwf" ,fftwf)))
+     (list fftwf))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -727,9 +715,7 @@ to access different radio hardware.")
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "git-version-gen"
                (("/bin/sh")
-                (string-append (assoc-ref inputs "bash")
-                               "/bin/bash")))
-             #t)))))
+                (search-input-file inputs "/bin/bash"))))))))
     (synopsis "DSP primitives for SDR")
     (description
      "This a C-language library for common DSP (Digital Signal Processing)
@@ -755,20 +741,20 @@ primitives for SDR (Software Defined Radio).")
           (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)))
+       (list doxygen
+             pkg-config
+             pybind11
+             python
+             python-numpy
+             python-six))
       (inputs
-       `(("boost" ,boost)
-         ("fftwf" ,fftwf)
-         ("gmp" ,gmp)
-         ("gnuradio" ,gnuradio)
-         ("libosmo-dsp" ,libosmo-dsp)
-         ("log4cpp" ,log4cpp)
-         ("volk" ,volk)))
+       (list boost
+             fftwf
+             gmp
+             gnuradio
+             libosmo-dsp
+             log4cpp
+             volk))
       (synopsis "GNU Radio block to correct IQ imbalance")
       (description
      "This is a GNU Radio block to correct IQ imbalance in quadrature
@@ -797,21 +783,19 @@ to the fix block above.
         (base32 "01p9cnwjxas3pkqr9m5fnrgm45cji0sfdqqa51hzy7izx9vgzaf8"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("pybind11" ,pybind11)
-       ("python-six" ,python-six)))
+     (list pkg-config pybind11 python-six))
     (inputs
-     `(("boost" ,boost)
-       ("gmp" ,gmp)
-       ("gnuradio" ,gnuradio)
-       ("log4cpp" ,log4cpp)
-       ("python" ,python)
-       ("python-construct" ,python-construct)
-       ("python-numpy" ,python-numpy)
-       ("python-pyaml" ,python-pyaml)
-       ("python-pyzmq" ,python-pyzmq)
-       ("python-requests" ,python-requests)
-       ("volk" ,volk)))
+     (list boost
+           gmp
+           gnuradio
+           log4cpp
+           python
+           python-construct
+           python-numpy
+           python-pyaml
+           python-pyzmq
+           python-requests
+           volk))
     (arguments
      `(#:modules ((guix build cmake-build-system)
                   ((guix build python-build-system) #:prefix python:)
@@ -838,35 +822,35 @@ satellites.")
 (define-public gqrx
   (package
     (name "gqrx")
-    (version "2.14.4")
+    (version "2.15.4")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://github.com/csete/gqrx")
+             (url "https://github.com/gqrx-sdr/gqrx")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0m4ncydihz4n4i80c252vk3c5v672yab1jv85n6ndn7a92xv3ilq"))))
+        (base32 "0r5pdj2l6zs2zvkc1bd7kg9vzx25pcgiw025n5yc841m8yg6n2c9"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("boost" ,boost)
-       ("fftwf" ,fftwf)
-       ("gmp" ,gmp)
-       ("gnuradio" ,gnuradio)
-       ("gr-iqbal" ,gr-iqbal)
-       ("gr-osmosdr" ,gr-osmosdr)
-       ("jack" ,jack-1)
-       ("libsndfile" ,libsndfile)
-       ("log4cpp" ,log4cpp)
-       ("portaudio" ,portaudio)
-       ("pulseaudio" ,pulseaudio)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("volk" ,volk)))
+     (list alsa-lib
+           boost
+           fftwf
+           gmp
+           gnuradio
+           gr-iqbal
+           gr-osmosdr
+           jack-1
+           libsndfile
+           log4cpp
+           portaudio
+           pulseaudio
+           qtbase-5
+           qtsvg
+           volk))
     (arguments
      `(#:tests? #f))                    ; no tests
     (synopsis "Software defined radio receiver")
@@ -890,24 +874,21 @@ using GNU Radio and the Qt GUI toolkit.")
         (base32 "0y43241s3p8qzn7x6x28v5v2bf934riznj14bb7m6k6vgd849qzl"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("gettext" ,gettext-minimal)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake gettext-minimal pkg-config))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("fltk" ,fltk)
-       ("eudev" ,eudev)
-       ("hamlib" ,hamlib)
-       ("libpng" ,libpng)
-       ("libsamplerate" ,libsamplerate)
-       ("libusb" ,libusb)
-       ("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxfixes" ,libxfixes)
-       ("libxft" ,libxft)
-       ("portaudio" ,portaudio)
-       ("pulseaudio" ,pulseaudio)))
+     (list alsa-lib
+           fltk
+           eudev
+           hamlib
+           libpng
+           libsamplerate
+           libusb
+           libx11
+           libxext
+           libxfixes
+           libxft
+           portaudio
+           pulseaudio))
     (synopsis "Software modem for amateur radio use")
     (description
      "Fldigi is a software modem for amateur radio use.  It is a sound card
@@ -932,15 +913,9 @@ hardware.")
         (base32 "0vxn1wy5b2zfq20k93rfgq34m1nd3mxd74h8l98f90d85fhcqggy"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config))
     (inputs
-     `(("fltk" ,fltk)
-       ("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxfixes" ,libxfixes)
-       ("libxft" ,libxft)))
+     (list fltk libx11 libxext libxfixes libxft))
     (synopsis "Radio transceiver control program")
     (description
      "Flrig is a transceiver control program for amateur radio use.
@@ -952,7 +927,7 @@ or USB connection.")
 (define-public flamp
   (package
     (name "flamp")
-    (version "2.2.05")
+    (version "2.2.07")
     (source
      (origin
        (method git-fetch)
@@ -961,18 +936,12 @@ or USB connection.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0ll2wbhyh1sb4iqsypwrd118mrgw3vbsdbz442qhk4r6l8kjzblq"))))
+        (base32 "0rygd5w04nspxdj8qj81gpb3mgijvlmii74s1f4mihqs5kb8nwh6"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config))
     (inputs
-     `(("fltk" ,fltk)
-       ("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxfixes" ,libxfixes)
-       ("libxft" ,libxft)))
+     (list fltk libx11 libxext libxfixes libxft))
     (synopsis "Tool for AMP file transfer")
     (description
      "FLAMP is a program for transferring files by radio waves using AMP
@@ -995,15 +964,9 @@ or USB connection.")
         (base32 "0xkhr82smfr7wpb9xl05wf7bz3vi2mr4xkcr2s8v6mblhgsdhqwg"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config))
     (inputs
-     `(("fltk" ,fltk)
-       ("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxfixes" ,libxfixes)
-       ("libxft" ,libxft)))
+     (list fltk libx11 libxext libxfixes libxft))
     (synopsis "File encapsulation program")
     (description
      "Flwrap is a software utility for amateur radio use.  Its purpose is to
@@ -1050,11 +1013,9 @@ for correctness.")
              #t)))
        #:tests? #f)) ; no test suite
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("fftw" ,fftw)
-       ("fftwf" ,fftwf)
-       ("libusb" ,libusb)))
+     (list fftw fftwf libusb))
     (home-page "https://greatscottgadgets.com/hackrf/")
     (synopsis "User-space library and utilities for HackRF SDR")
     (description
@@ -1068,7 +1029,7 @@ you must extend 'udev-service-type' with this package.  E.g.:
 (define-public hamlib
   (package
     (name "hamlib")
-    (version "4.2")
+    (version "4.3.1")
     (source
      (origin
        (method url-fetch)
@@ -1076,20 +1037,17 @@ you must extend 'udev-service-type' with this package.  E.g.:
              "https://github.com/Hamlib/Hamlib/releases/download/"
              version "/hamlib-" version ".tar.gz"))
        (sha256
-        (base32 "1m8gb20i8ga6ndnnw187ry1h4z8wx27v1hl7c610r6ky60pv4072"))))
+        (base32 "0c578m04zs8dllbd4cv6nxb44y0dn8kiapzkih84ycfjzmnkhdrl"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("lua" ,lua)
-       ("pkg-config" ,pkg-config)
-       ("python-wrapper" ,python-wrapper)
-       ("swig" ,swig)
-       ("tcl" ,tcl)))
+     (list doxygen
+           lua
+           pkg-config
+           python-wrapper
+           swig
+           tcl))
     (inputs
-     `(("gd" ,gd)
-       ("libusb" ,libusb)
-       ("libxml2" ,libxml2)
-       ("readline" ,readline)))
+     (list gd libusb libxml2 readline))
     (arguments
      `(#:configure-flags '("--disable-static"
                            "--with-lua-binding"
@@ -1110,7 +1068,7 @@ users.")
   (package
     (inherit hamlib)
     (name "wsjtx-hamlib")
-    (version "2.3.1")
+    (version "2.5.2")
     (source
      (origin
        (method git-fetch)
@@ -1119,7 +1077,7 @@ users.")
              (commit (string-append "wsjtx-" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0m4yzjcqs7a1w4lghyyckpkiy96jxdjijddxarqr3a37cl2rz23j"))))
+        (base32 "1bgf7bz2280739a7ip7lvpns0i7x6svryxfmsp32cff2dr146lz3"))))
     (native-inputs
      `(("autoconf" ,autoconf)
        ("automake" ,automake)
@@ -1153,17 +1111,14 @@ users.")
      '(#:configure-flags
        (list "--enable-fldigi-xmlrpc")))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake perl pkg-config))
     (inputs
-     `(("cmocka" ,cmocka)
-       ("glib" ,glib)
-       ("hamlib" ,hamlib)
-       ("libusb" ,libusb) ;`Requires.private: libusb-1.0` in hamlib pkg-config
-       ("ncurses" ,ncurses)
-       ("xmlrpc-c" ,xmlrpc-c)))
+     (list cmocka
+           glib
+           hamlib
+           libusb ;`Requires.private: libusb-1.0` in hamlib pkg-config
+           ncurses
+           xmlrpc-c))
     (home-page "https://tlf.github.io/")
     (synopsis "Amateur radio contest logging for the terminal")
     (description "TLF is a @acronym{Text User Interface, TUI} amateur radio
@@ -1195,7 +1150,7 @@ instances over the network, and general QSO and DXpedition logging.")
 (define-public wsjtx
   (package
     (name "wsjtx")
-    (version "2.3.1")
+    (version "2.5.2")
     (source
      (origin
        (method git-fetch)
@@ -1204,14 +1159,10 @@ instances over the network, and general QSO and DXpedition logging.")
              (commit (string-append "wsjtx-" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0mdr4l7zii08615yn7z91spnvnqm5i9390bra9lz3aqyxrsiim91"))))
+        (base32 "01346f2x3jc0gbzdi7ihzr9rxibnbzn31ix0879qfavrv8l31k1s"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("asciidoc" ,asciidoc)
-       ("gfortran" ,gfortran)
-       ("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)
-       ("ruby-asciidoctor" ,ruby-asciidoctor)))
+     (list asciidoc gfortran pkg-config qttools ruby-asciidoctor))
     (inputs
      `(("boost" ,boost)
        ("fftw" ,fftw)
@@ -1222,20 +1173,7 @@ instances over the network, and general QSO and DXpedition logging.")
        ("qtmultimedia" ,qtmultimedia)
        ("qtserialport" ,qtserialport)))
     (arguments
-     `(#:tests? #f ; No test suite
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'work-around-runtime-bug
-           (lambda _
-             ;; Some of the programs in this package fail to find symbols
-             ;; in libm at runtime. Adding libm manually at the end of the
-             ;; library lists when linking the programs seems to help.
-             ;; TODO: find exactly what is wrong in the way the programs
-             ;; are built.
-             (substitute* "CMakeLists.txt"
-               (("target_link_libraries \\((.*)\\)" all libs)
-                (string-append "target_link_libraries (" libs " m)")))
-             #t)))))
+     `(#:tests? #f)) ; No test suite
     (synopsis "Weak-signal ham radio communication program")
     (description
      "WSJT-X implements communication protocols or modes called FT4, FT8,
@@ -1266,11 +1204,7 @@ weak-signal conditions.")
            #t))))
     (build-system qt-build-system)
     (native-inputs
-     `(("asciidoc" ,asciidoc)
-       ("gfortran" ,gfortran)
-       ("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)
-       ("ruby-asciidoctor" ,ruby-asciidoctor)))
+     (list asciidoc gfortran pkg-config qttools ruby-asciidoctor))
     (inputs
      `(("boost" ,boost)
        ("fftw" ,fftw)
@@ -1290,19 +1224,7 @@ weak-signal conditions.")
                (("DESTINATION /usr/share")
                 (string-append "DESTINATION "
                                (assoc-ref outputs "out")
-                               "/share")))
-             #t))
-         (add-after 'fix-paths 'work-around-runtime-bug
-           (lambda _
-             ;; Some of the programs in this package fail to find symbols
-             ;; in libm at runtime. Adding libm manually at the end of the
-             ;; library lists when linking the programs seems to help.
-             ;; TODO: find exactly what is wrong in the way the programs
-             ;; are built.
-             (substitute* "CMakeLists.txt"
-               (("target_link_libraries \\((.*)\\)" all libs)
-                (string-append "target_link_libraries (" libs " m)")))
-             #t))
+                               "/share")))))
          (add-after 'unpack 'fix-hamlib
            (lambda _
              (substitute* "CMake/Modules/Findhamlib.cmake"
@@ -1312,8 +1234,7 @@ weak-signal conditions.")
   set (ENV{PKG_CONFIG_PATH} \"${__pc_path}\")"))
              (substitute* "HamlibTransceiver.hpp"
                (("#ifdef JS8_USE_LEGACY_HAMLIB")
-                "#if 1"))
-             #t)))))
+                "#if 1")))))))
     (synopsis "Weak-signal ham radio communication program")
     (description
      "JS8Call is a software using the JS8 digital mode (a derivative of the FT8
@@ -1325,42 +1246,19 @@ operators.")
 (define-public xnec2c
   (package
     (name "xnec2c")
-    (version "4.1.1")
+    (version "4.2")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "http://www.5b4az.org/pkg/nec2/xnec2c/xnec2c-"
                            version ".tar.bz2"))
        (sha256
-        (base32 "1myvlkfybb2ha8l0h96ca3iz206zzy9z5iizm0sbab2zzp78n1r9"))))
+        (base32 "0jprahww6jvwq616lkq80sac166ffy0fp83gr5kvjc9k4pcls00n"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("gtk+" ,gtk+)))
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-makefile
-           (lambda* (#:key outputs #:allow-other-keys)
-             (substitute* '("Makefile.am" "Makefile.in")
-               ;; The DESTDIR variable does not get replaced the prefix
-               ;; in the final Makefile, so let's do here.
-               (("\\$\\(DESTDIR\\)/usr")
-                (assoc-ref outputs "out")))
-             #t))
-         (add-after 'fix-makefile 'fix-paths
-           (lambda* (#:key outputs #:allow-other-keys)
-             ;; Increase the max length of the path to the glade file,
-             ;; so that the '/gnu/store/...' path can fit in.
-             (substitute* '("src/shared.c" "src/shared.h")
-               (("char xnec2c_glade\\[64\\];")
-                "char xnec2c_glade[256];"))
-             ;; Fix hard coded references to '/usr/...'.
-             (substitute* '("src/geom_edit.c" "src/main.c")
-               (("\"/usr")
-                (string-append "\"" (assoc-ref outputs "out"))))
-             #t)))))
+     (list gtk+))
     (synopsis "Antenna modeling software")
     (description
      "Xnec2c is a GTK3-based graphical version of nec2c, a translation to the
@@ -1374,7 +1272,7 @@ gain and standing wave ratio.")
 (define-public dump1090
   (package
     (name "dump1090")
-    (version "5.0")
+    (version "6.1")
     (source
      (origin
        (method git-fetch)
@@ -1383,15 +1281,12 @@ gain and standing wave ratio.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1fckfcgypmplzl1lidd04jxiabczlfx9mv21d6rbsfknghsjpn03"))))
+        (base32 "13ssp2c3s18rszpmm3rpvicqvgvfiirsjf294m6r1sf3ji7ygd9q"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("hackrf" ,hackrf)
-       ("libusb" ,libusb)
-       ("ncurses" ,ncurses)
-       ("rtl-sdr" ,rtl-sdr)))
+     (list hackrf libusb ncurses rtl-sdr))
     (arguments
      `(#:test-target "test"
        #:make-flags
@@ -1404,8 +1299,7 @@ gain and standing wave ratio.")
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((bin (string-append (assoc-ref outputs "out") "/bin/")))
                (install-file "dump1090" bin)
-               (install-file "view1090" bin)
-               #t))))))
+               (install-file "view1090" bin)))))))
     (synopsis "Mode S decoder for rtl-sdr devices")
     (description
      "Dump1090 is a Mode S decoder specifically designed for rtl-sdr devices.
@@ -1417,7 +1311,7 @@ their position, altitude, speed, etc.")
 (define-public rtl-433
   (package
     (name "rtl-433")
-    (version "21.05")
+    (version "21.12")
     (source
      (origin
        (method git-fetch)
@@ -1426,15 +1320,12 @@ their position, altitude, speed, etc.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1f60nvahsplv1yszacc49mlbcnacgs1nwhdf8y9srmzg08xrfnfk"))))
+        (base32 "0ygxs35zvgnamhqdwk1akcwagcirzpi4wndzgf9d23faiv4cm01a"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libusb" ,libusb)
-       ("openssl" ,openssl)
-       ("rtl-sdr" ,rtl-sdr)
-       ("soapysdr" ,soapysdr)))
+     (list libusb openssl rtl-sdr soapysdr))
     (synopsis "Decoder for radio transmissions in ISM bands")
     (description
      "This is a generic data receiver, mainly for decoding radio transmissions
@@ -1457,8 +1348,7 @@ from devices on the 433 MHz, 868 MHz, 315 MHz, 345 MHz and 915 MHz ISM bands.")
         (base32 "01716cfhxfzsab9zjply9giaa4nn4b7rm3p3vizrwi7n253yiwm2"))))
     (build-system cmake-build-system)
     (inputs
-     `(("libx11" ,libx11)
-       ("pulseaudio" ,pulseaudio)))
+     (list libx11 pulseaudio))
     (arguments
      '(#:tests? #f))                    ; no test suite
     (home-page "https://github.com/EliasOenal/multimon-ng")
@@ -1495,12 +1385,9 @@ modes:
         (base32 "1h5k402wjlj7xjniggwf0x7a5srlgglc2x4hy6lz6c30zwa7z8fm"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-cython" ,python-cython)))
+     (list python-cython))
     (inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-pyqt" ,python-pyqt)
-       ("python-pyserial" ,python-pyserial)
-       ("python-scipy" ,python-scipy)))
+     (list python-numpy python-pyqt python-pyserial python-scipy))
     (arguments
      '(#:tests? #f))
     (home-page "https://github.com/NanoVNA-Saver/nanovna-saver")
@@ -1513,40 +1400,34 @@ NanoVNA vector network analyzers.")
 (define-public qsstv
   (package
     (name "qsstv")
-    (version "9.4.4")
+    (version "9.5.8")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "http://users.telenet.be/on4qz/qsstv/downloads/"
                            "qsstv_" version ".tar.gz"))
        (sha256
-        (base32 "0f9hx6sy418cb23fadll298pqbc5l2lxsdivi4vgqbkvx7sw58zi"))))
+        (base32 "0s3sivc0xan6amibdiwfnknrl3248wzgy98w6gyxikl0qsjpygy0"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("fftw" ,fftw)
-       ("fftwf" ,fftwf)
-       ("hamlib" ,hamlib)
-       ("openjpeg" ,openjpeg)
-       ("pulseaudio" ,pulseaudio)
-       ("qtbase" ,qtbase-5)
-       ("v4l-utils" ,v4l-utils)))
+     (list alsa-lib
+           fftw
+           fftwf
+           hamlib
+           openjpeg
+           pulseaudio
+           qtbase-5
+           v4l-utils))
     (arguments
      `(#:tests? #f  ; No test suite.
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'fix-newer-hamlib-support
-           (lambda _
-             (substitute* "qsstv/rig/rigcontrol.cpp"
-               (("FILPATHLEN")
-                "HAMLIB_FILPATHLEN"))))
          (replace 'configure
            (lambda* (#:key outputs #:allow-other-keys)
              (invoke "qmake"
-                     (string-append "PREFIX=" (assoc-ref outputs "out")))
-             #t)))))
+                     (string-append "PREFIX=" (assoc-ref outputs "out"))))))))
     (home-page "http://users.telenet.be/on4qz/qsstv/")
     (synopsis "Program for receiving and transmitting SSTV and HAMDRM")
     (description
@@ -1570,8 +1451,7 @@ NanoVNA vector network analyzers.")
         (base32 "0xmz64m02knbrpasfij4rrq53ksxna5idxwgabcw4n2b1ig7pyx5"))))
     (build-system cmake-build-system)
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("hamlib" ,hamlib)))
+     (list alsa-lib hamlib))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1607,7 +1487,7 @@ It can perform as:
         (base32 "14lzgldqzbbzydsy1cai3wln3hpyj1yhj8ji3wygyzr616fq9f7i"))))
     (build-system gnu-build-system)
     (inputs
-     `(("ao" ,ao)))
+     (list ao))
     (home-page "https://www.nongnu.org/aldo/")
     (synopsis "Morse code tutor")
     (description
@@ -1635,12 +1515,9 @@ methods:
         (base32 "15wriwv91583kmmyijbzam3dpclzmg4qjyfzjv5f75x9b0gqabxm"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("ncurses" ,ncurses)
-       ("pulseaudio" ,pulseaudio)
-       ("qtbase" ,qtbase-5)))
+     (list alsa-lib ncurses pulseaudio qtbase-5))
     (arguments
      `(#:configure-flags '("--disable-static")
        #:phases
@@ -1655,8 +1532,7 @@ methods:
                 "-lncurses"))
              (substitute* "src/libcw/libcw_pa.c"
                (("libpulse-simple.so" all)
-                (string-append (assoc-ref inputs "pulseaudio")
-                               "/lib/" all))))))))
+                (search-input-file inputs "/lib/libpulse-simple.so"))))))))
     (home-page "http://unixcw.sourceforge.net/")
     (synopsis "Morse code library and programs")
     (description
@@ -1691,7 +1567,8 @@ intended for people who want to learn receiving and sending morse code.")
        ("osm-gps-map" ,osm-gps-map)
        ("pulseaudio" ,pulseaudio)))
     (arguments
-     `(#:tests? #f ; No test suite
+     `(#:configure-flags '("-DCMAKE_C_FLAGS=-fcommon")
+       #:tests? #f ; No test suite
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'fix-paths
@@ -1724,15 +1601,14 @@ Identification System) messages sent by ships and coast stations.")
      '(#:import-path "github.com/nonoo/kappanhang"
        #:install-source? #f))
     (inputs
-     `(("go-github-com-akosmarton-papipes",go-github-com-akosmarton-papipes)
-       ("go-github-com-fatih-color" ,go-github-com-fatih-color)
-       ("go-github-com-google-goterm" ,go-github-com-google-goterm)
-       ("go-github-com-mattn-go-isatty" ,go-github-com-mattn-go-isatty)
-       ("go-github-com-mesilliac-pulse-simple"
-        ,go-github-com-mesilliac-pulse-simple)
-       ("go-github-com-pborman-getopt" ,go-github-com-pborman-getopt)
-       ("go-go-uber-org-multierr" ,go-go-uber-org-multierr)
-       ("go-go-uber-org-zap" ,go-go-uber-org-zap)))
+     (list go-github-com-akosmarton-papipes
+           go-github-com-fatih-color
+           go-github-com-google-goterm
+           go-github-com-mattn-go-isatty
+           go-github-com-mesilliac-pulse-simple
+           go-github-com-pborman-getopt
+           go-go-uber-org-multierr
+           go-go-uber-org-zap))
     (home-page "https://github.com/nonoo/kappanhang")
     (synopsis "Client for Icom RS-BA1 server")
     (description
@@ -1751,30 +1627,30 @@ Compatible hardware/software:
 (define-public dream
   (package
     (name "dream")
-    (version "2.1.1")
+    (version "2.2")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://sourceforge/drm/dream/" version
-                           "/dream-" version "-svn808.tar.gz"))
+                           "/dream_" version ".orig.tar.gz"))
        (sha256
-        (base32 "01dv6gvljz64zrjbr08mybr9aicvpq2c6qskww46lngdjyhk8xs1"))))
+        (base32 "0mpg341b0vnm6ym0cag9zri9w6kw012rv68zdmmi2hlvq7iiw8gp"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("faad2" ,faad2)
-       ("fftw" ,fftw)
-       ("libsndfile" ,libsndfile)
-       ("libpcap" ,libpcap)
-       ("opus" ,opus)
-       ("pulseaudio" ,pulseaudio)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("qtwebkit" ,qtwebkit)
-       ("qwt" ,qwt)
-       ("speexdsp" ,speexdsp)
-       ("zlib" ,zlib)))
+     (list faad2
+           fftw
+           libsndfile
+           libpcap
+           opus
+           pulseaudio
+           qtbase-5
+           qtsvg
+           qtwebkit
+           qwt
+           speexdsp
+           zlib))
     (arguments
      `(#:tests? #f
        #:phases
@@ -1789,24 +1665,18 @@ Compatible hardware/software:
                 (string-append "documentation.path = "
                                (assoc-ref outputs "out")
                                "/share/man/man1"))
-               (("/usr/include/pulse/")
-                (string-append (assoc-ref inputs "pulseaudio")
-                               "/include/pulse/"))
+               (("/usr/include/pulse")
+                (search-input-directory inputs "/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/"))
+                (search-input-file inputs "/include/sndfile.h"))
+               (("/usr/include/opus")
+                (search-input-directory inputs "/include/opus"))
+               (("/usr/include/speex")
+                (search-input-directory inputs "/include/speex"))
+               (("/usr/include/qwt")
+                (search-input-directory inputs "/include/qwt"))
                (("\\$\\$OUT_PWD/include/neaacdec\\.h")
-                (string-append (assoc-ref inputs "faad2")
-                               "/include/neaacdec.h")))))
+                (search-input-file inputs "/include/neaacdec.h")))))
          (replace 'configure
            (lambda _
              (invoke "qmake"))))))
@@ -1832,22 +1702,22 @@ receiver.")
         (base32 "1xl1lanw0xgmgks67dbfb2h52jxnrd1i2zik56v0q8dwsr7f0daw"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("faad2" ,faad2)
-       ("fftwf" ,fftwf)
-       ("lame" ,lame)
-       ("libusb" ,libusb)
-       ("mpg123" ,mpg123)
-       ("rtl-sdr" ,rtl-sdr)
-       ("qtbase" ,qtbase-5)
-       ("qtcharts" ,qtcharts)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtgraphicaleffects" ,qtgraphicaleffects)
-       ("qtmultimedia" ,qtmultimedia)
-       ("qtquickcontrols2" ,qtquickcontrols2)
-       ("soapysdr" ,soapysdr)))
+     (list alsa-lib
+           faad2
+           fftwf
+           lame
+           libusb
+           mpg123
+           rtl-sdr
+           qtbase-5
+           qtcharts
+           qtdeclarative
+           qtgraphicaleffects
+           qtmultimedia
+           qtquickcontrols2
+           soapysdr))
     (arguments
      `(#:configure-flags '("-DRTLSDR=ON"
                            "-DSOAPYSDR=ON")
@@ -1877,7 +1747,7 @@ defined radio with support for rtl-sdr.")
           (base32 "0ic35130lf66lk3wawgc5bcg711l7chv9al1hzdc1xrmq9qf9hri"))))
       (build-system gnu-build-system)
       (inputs
-       `(("fftwf" ,fftwf)))
+       (list fftwf))
       (arguments
        `(#:make-flags
          (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
@@ -1985,9 +1855,7 @@ Codec.")
           (base32 "0j339kx3n2plgfw7ikpp7b81h5n68wmsgflwljbh2sy8j62faik9"))))
       (build-system cmake-build-system)
       (inputs
-       `(("faad2" ,faad2)
-         ("fftwf" ,fftwf)
-         ("zlib" ,zlib)))
+       (list faad2 fftwf zlib))
       (arguments
        `(#:tests? #f  ; No test suite.
          #:phases
@@ -2016,8 +1884,7 @@ Audio Broadcasting}.")
         (base32 "0jgzpv4d6ckd0sdq6438rjh3m6knj6gx63627fajch74hxrvclzj"))))
     (build-system cmake-build-system)
     (inputs
-     `(("mbelib" ,mbelib)
-       ("serialdv" ,serialdv)))
+     (list mbelib serialdv))
     (arguments
      `(#:tests? #f  ; No test suite.
        #:configure-flags
@@ -2044,7 +1911,7 @@ voice formats.")
 (define-public sdrangel
   (package
     (name "sdrangel")
-    (version "6.16.1")
+    (version "6.17.5")
     (source
      (origin
        (method git-fetch)
@@ -2053,60 +1920,68 @@ voice formats.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0g9h4cy8k9dqlwkfk4lkk2d2s003bckzskm3vra87ndmgq1nfbzv"))))
+        (base32 "1g9972q78nxl62hpyn029s85ny5jj9dxlmmfqyz3l9sd6kdv9kl6"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("graphviz" ,graphviz)
-       ("pkg-config" ,pkg-config)))
+     (list doxygen graphviz pkg-config))
     (inputs
-     `(("airspyhf" ,airspyhf)
-       ("alsa-lib" ,alsa-lib)
-       ("aptdec" ,aptdec)
-       ("boost" ,boost)
-       ("cm256cc" ,cm256cc)
-       ("codec2" ,codec2)
-       ("dsdcc" ,dsdcc)
-       ("faad2" ,faad2)
-       ("ffmpeg" ,ffmpeg)
-       ("fftwf" ,fftwf)
-       ("hackrf" ,hackrf)
-       ("libdab" ,libdab)
-       ("libusb" ,libusb)
-       ("mbelib" ,mbelib)
-       ("opencv" ,opencv)
-       ("opus" ,opus)
-       ("pulseaudio" ,pulseaudio)
-       ("qtbase" ,qtbase-5)
-       ("qtcharts" ,qtcharts)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtlocation" ,qtlocation)
-       ("qtmultimedia" ,qtmultimedia)
-       ("qtserialport" ,qtserialport)
-       ("qtspeech" ,qtspeech)
-       ("qtwebsockets" ,qtwebsockets)
-       ("rtl-sdr" ,rtl-sdr)
-       ("serialdv" ,serialdv)
-       ("soapysdr" ,soapysdr)
-       ("sgp4" ,sgp4)
-       ("zlib" ,zlib)))
+     (list airspyhf
+           alsa-lib
+           aptdec
+           boost
+           cm256cc
+           codec2
+           dsdcc
+           faad2
+           ffmpeg
+           fftwf
+           hackrf
+           libdab
+           libusb
+           mbelib
+           opencv
+           opus
+           pulseaudio
+           qtbase-5
+           qtcharts
+           qtdeclarative
+           qtlocation
+           qtmultimedia
+           qtquickcontrols2
+           qtserialport
+           qtspeech
+           qtwebsockets
+           rtl-sdr
+           serialdv
+           soapysdr
+           sgp4
+           zlib))
     (arguments
      `(#:tests? #f  ; No test suite.
        #:configure-flags
-       (list (string-append "-DAPT_DIR="
-                            (assoc-ref %build-inputs "aptdec"))
-             (string-append "-DDAB_DIR="
-                            (assoc-ref %build-inputs "libdab"))
-             (string-append "-DDSDCC_DIR="
-                            (assoc-ref %build-inputs "dsdcc"))
-             (string-append "-DMBE_DIR="
-                            (assoc-ref %build-inputs "mbelib"))
-             (string-append "-DSERIALDV_DIR="
-                            (assoc-ref %build-inputs "serialdv"))
-             (string-append "-DSGP4_DIR="
-                            (assoc-ref %build-inputs "sgp4"))
-             (string-append "-DSOAPYSDR_DIR="
-                            (assoc-ref %build-inputs "soapysdr")))))
+       ,#~(list (string-append "-DAPT_DIR="
+                               #$(this-package-input "aptdec"))
+                (string-append "-DDAB_DIR="
+                               #$(this-package-input "libdab"))
+                (string-append "-DDSDCC_DIR="
+                               #$(this-package-input "dsdcc"))
+                (string-append "-DMBE_DIR="
+                               #$(this-package-input "mbelib"))
+                (string-append "-DSERIALDV_DIR="
+                               #$(this-package-input "serialdv"))
+                (string-append "-DSGP4_DIR="
+                               #$(this-package-input "sgp4"))
+                (string-append "-DSOAPYSDR_DIR="
+                               #$(this-package-input "soapysdr")))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-boost-compatibility
+           (lambda _
+             (substitute*
+                 '("plugins/channelrx/noisefigure/noisefigure.cpp"
+                   "plugins/channelrx/noisefigure/noisefigureenrdialog.cpp")
+               (("boost::math::barycentric_rational<double>")
+                "boost::math::interpolators::barycentric_rational<double>")))))))
     (home-page "https://github.com/f4exb/sdrangel/wiki")
     (synopsis "Software defined radio")
     (description
@@ -2117,7 +1992,7 @@ various hardware.")
 (define-public sdr++
   (package
     (name "sdr++")
-    (version "1.0.3")
+    (version "1.0.4")
     (source
      (origin
        (method git-fetch)
@@ -2126,14 +2001,14 @@ various hardware.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1mplhys07l4bqv3q301ayh35468mg0hpxp5zgrps7gkjyf3v6idr"))))
+        (base32 "1xwbz6yyca6wmzad5ykxw6i0r8jzc7i3jbzq7mhp8caiymd6knw3"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("gcc" ,gcc-10) ; A GCC more recent than version 7 is required.
-       ("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("airspyhf" ,airspyhf)
        ("alsa-lib" ,alsa-lib)
+       ("codec2" ,codec2)
        ("fftwf" ,fftwf)
        ("glew" ,glew)
        ("glfw" ,glfw)
@@ -2148,7 +2023,8 @@ various hardware.")
     (arguments
      `(#:tests? #f ; No test suite.
        #:configure-flags '("-DOPT_BUILD_AIRSPY_SOURCE=OFF"
-                           "-DOPT_BUILD_PLUTOSDR_SOURCE=OFF")
+                           "-DOPT_BUILD_PLUTOSDR_SOURCE=OFF"
+                           "-DOPT_BUILD_M17_DECODER=ON")
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'fix-paths
@@ -2177,11 +2053,9 @@ various hardware.")
         (base32 "1x6nyn429pk0f7lqzskrgsbq09mq5787xd4piic95add6n1cc355"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("fftwf" ,fftwf)
-       ("liquid-dsp" ,liquid-dsp)
-       ("qtbase" ,qtbase-5)))
+     (list fftwf liquid-dsp qtbase-5))
     (home-page "https://github.com/miek/inspectrum")
     (synopsis "Radio signal analyser")
     (description
@@ -2192,22 +2066,19 @@ software-defined radio receivers.")
 (define-public wfview
   (package
     (name "wfview")
-    (version "1.0")
+    (version "1.2d")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
              (url "https://gitlab.com/eliggett/wfview")
-             (commit (string-append "v" version))))
+             (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "16a9afm0nkqx4pzwfxisspybimhqdyr3yjpr7ac7wgpp3520ikzi"))))
+        (base32 "1kpkwxhcacgmprbr8xz840rj9a22513vxrh2q7d3js5i1dva8j2z"))))
     (build-system qt-build-system)
     (inputs
-     `(("qcustomplot" ,qcustomplot)
-       ("qtbase" ,qtbase-5)
-       ("qtmultimedia" ,qtmultimedia)
-       ("qtserialport" ,qtserialport)))
+     (list opus qcustomplot qtbase-5 qtmultimedia qtserialport))
     (arguments
      `(#:tests? #f  ; No test suite.
        #:phases
@@ -2221,23 +2092,12 @@ software-defined radio receivers.")
                (("/usr/share")
                 (string-append (assoc-ref outputs "out") "/share")))))
          (replace 'configure
-           (lambda _
+           (lambda* (#:key outputs #:allow-other-keys)
              (mkdir-p "build")
              (chdir "build")
-             (invoke "qmake" "../wfview.pro")))
-         (replace 'install
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out")))
-               (install-file "wfview"
-                             (string-append out "/bin"))
-               (install-file "wfview.png"
-                             (string-append out "/share/pixmaps"))
-               (install-file "wfview.desktop"
-                             (string-append out "/share/applications"))
-               (let ((dir (string-append
-                           out "/share/wfview/stylesheets/qdarkstyle")))
-                 (mkdir-p dir)
-                 (copy-recursively "qdarkstyle" dir))))))))
+             (invoke "qmake"
+                     (string-append "PREFIX=" (assoc-ref outputs "out"))
+                     "../wfview.pro"))))))
     (home-page "https://wfview.org/")
     (synopsis "Software to control Icom radios")
     (description
@@ -2268,12 +2128,9 @@ spectrum waterfall.  It supports at least the following models:
         (base32 "13ipyh39l7p420j1j9kvwyskv2nqnimls1a3z1klsa1zivds9k7q"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("fftwf" ,fftwf)
-       ("libsndfile" ,libsndfile)
-       ("pulseaudio" ,pulseaudio)))
+     (list alsa-lib fftwf libsndfile pulseaudio))
     (home-page "http://www.whence.com/minimodem/")
     (synopsis "Software audio FSK modem")
     (description
@@ -2303,12 +2160,12 @@ Caller-ID.")
           (base32 "0dbc6n4pxsa73wzxny773khc73r1dn3ma5hi7xv76vcykjvzkdi3"))))
       (build-system python-build-system)
       (inputs
-       `(("python-future" ,python-future)
-         ("python-ipython" ,python-ipython)
-         ("python-numpy" ,python-numpy)
-         ("python-pyserial" ,python-pyserial)
-         ("python-pyside-2" ,python-pyside-2)
-         ("python-pyusb" ,python-pyusb)))
+       (list python-future
+             python-ipython
+             python-numpy
+             python-pyserial
+             python-pyside-2
+             python-pyusb))
       (arguments
        `(#:tests? #f  ; Tests want to use a serial port
          #:phases
@@ -2358,7 +2215,7 @@ this package.  E.g.: @code{(udev-rules-service 'rfcat rfcat)}")
           (base32 "0qr8q00cv6q0ikjrph0qh07mlbvgk4yimccpkn3ir8ib5ma0r9sr"))))
       (build-system cmake-build-system)
       (inputs
-       `(("soapysdr" ,soapysdr)))
+       (list soapysdr))
       (arguments
        `(#:tests? #f)) ; No test suite.
       (home-page "https://github.com/rxseger/rx_tools")
@@ -2374,7 +2231,7 @@ of devices than RTL-SDR.")
 (define-public gnss-sdr
   (package
     (name "gnss-sdr")
-    (version "0.0.14")
+    (version "0.0.15")
     (source
      (origin
        (method git-fetch)
@@ -2383,7 +2240,7 @@ of devices than RTL-SDR.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1kjh9bnf6h9q71bnn8nrwlc80wcnkib97ylzvb102acii4p0fm08"))))
+        (base32 "1m41rnlfr1nrzbg382jfsk5x0by2ym48v3innd2rbc6phd85q223"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("gfortran" ,gfortran)
@@ -2393,22 +2250,22 @@ of devices than RTL-SDR.")
        ("python" ,python)
        ("python-mako" ,python-mako)))
     (inputs
-     `(("armadillo" ,armadillo)
-       ("boost" ,boost)
-       ("gflags" ,gflags)
-       ("glog" ,glog)
-       ("gmp" ,gmp)
-       ("gnuradio" ,gnuradio)
-       ("gr-osmosdr" ,gr-osmosdr)
-       ("lapack" ,lapack)
-       ("libpcap" ,libpcap)
-       ("log4cpp" ,log4cpp)
-       ("matio" ,matio)
-       ("openblas" ,openblas)
-       ("openssl" ,openssl)
-       ("protobuf" ,protobuf)
-       ("pugixml" ,pugixml)
-       ("volk" ,volk)))
+     (list armadillo
+           boost
+           gflags
+           glog
+           gmp
+           gnuradio
+           gr-osmosdr
+           lapack
+           libpcap
+           log4cpp
+           matio
+           openblas
+           openssl
+           protobuf
+           pugixml
+           volk))
     (arguments
      `(#:configure-flags
        (list "-DENABLE_GENERIC_ARCH=ON"
@@ -2421,14 +2278,6 @@ of devices than RTL-SDR.")
                             (assoc-ref %build-inputs "googletest-source")))
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'fix-tests
-           (lambda _
-             ;; Some tests fail to compile when the FILESYSTEM package is
-             ;; available, so we disable it (and the tests will use Boost
-             ;; Filesystem instead).
-             (substitute* "CMakeLists.txt"
-               (("find_package\\(FILESYSTEM COMPONENTS Final Experimental\\)")
-                ""))))
          (add-before 'check 'set-home
            (lambda _
              (setenv "HOME" "/tmp"))))))
diff --git a/gnu/packages/ragel.scm b/gnu/packages/ragel.scm
index 1d9b67a6e0..d4016ed5ba 100644
--- a/gnu/packages/ragel.scm
+++ b/gnu/packages/ragel.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2019 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2021 Simon South <simon@simonsouth.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -22,7 +23,9 @@
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix build-system gnu)
-  #:use-module (gnu packages))
+  #:use-module (guix utils)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages base))
 
 (define-public ragel
   (package
@@ -36,6 +39,30 @@
                (base32
                 "0gvcsl62gh6sg73nwaxav4a5ja23zcnyxncdcdnqa2yjcpdnw5az"))))
     (build-system gnu-build-system)
+    (arguments
+     (if (target-aarch64?)
+         '(#:phases
+           (modify-phases %standard-phases
+             (add-after 'unpack 'apply-char-signedness-fix
+               ;; Apply a backported fix for aarch64-linux, where the C/C++
+               ;; "char" type is unsigned by default.
+               ;;
+               ;; The patch is applied in this custom phase and not via the
+               ;; "origin" object above to avoid rebuilding a large number of
+               ;; packages on other platforms.
+               (lambda _
+                 (let ((patch
+                        (search-input-file %build-inputs "/bin/patch"))
+                       (char-signedness-patch
+                        (assoc-ref %build-inputs "char-signedness-patch")))
+                   (invoke patch "-p1" "-i" char-signedness-patch))))))
+         '()))
+    (native-inputs
+     (if (target-aarch64?)
+         `(("char-signedness-patch"
+            ,(search-patch "ragel-char-signedness.patch"))
+           ("patch" ,patch))
+         '()))
     (home-page "https://www.colm.net/open-source/ragel/")
     (synopsis "State machine compiler")
     (description
diff --git a/gnu/packages/rails.scm b/gnu/packages/rails.scm
index 76ed4df6e4..45fa5d8606 100644
--- a/gnu/packages/rails.scm
+++ b/gnu/packages/rails.scm
@@ -56,8 +56,7 @@
                (("require \\\"bump/tasks\\\"") ""))
              #t)))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-activesupport" ,ruby-activesupport)))
+     (list bundler ruby-activesupport))
     (synopsis "Ruby on Rails application preloader")
     (description
      "Spring is a Ruby on Rails application preloader.  It speeds up
@@ -82,11 +81,8 @@ migration.")
     (arguments
      '(#:tests? #f)) ; No included tests
     (propagated-inputs
-     `(("ruby-railties" ,ruby-railties)
-       ("ruby-sass" ,ruby-sass)
-       ("ruby-sprockets" ,ruby-sprockets)
-       ("ruby-sprockets-rails" ,ruby-sprockets-rails)
-       ("ruby-tilt" ,ruby-tilt)))
+     (list ruby-railties ruby-sass ruby-sprockets ruby-sprockets-rails
+           ruby-tilt))
     (synopsis "Sass adapter for the Rails asset pipeline")
     (description
      "This library integrates the SASS stylesheet language into Ruby on
@@ -160,15 +156,15 @@ API.")
                (("gemspec") "gemspec\ngem 'tzinfo-data'\ngem 'sass'"))
              #t)))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rails" ,ruby-rails)
-       ("ruby-rspec-rails" ,ruby-rspec-rails)
-       ;; This is needed for a test, but I'm unsure why
-       ("ruby-sass" ,ruby-sass)
-       ;; This is used as the ruby-execjs runtime
-       ("node" ,node)))
+     (list bundler
+           ruby-rails
+           ruby-rspec-rails
+           ;; This is needed for a test, but I'm unsure why
+           ruby-sass
+           ;; This is used as the ruby-execjs runtime
+           node))
     (propagated-inputs
-     `(("ruby-execjs" ,ruby-execjs)))
+     (list ruby-execjs))
     (synopsis "Parse CSS and add vendor prefixes to CSS rules")
     (description
      "This gem provides Ruby and Ruby on Rails integration with Autoprefixer,
@@ -193,7 +189,7 @@ Can I Use website.")
     '(;; No included tests
       #:tests? #f))
    (propagated-inputs
-    `(("ruby-activesupport" ,ruby-activesupport)))
+    (list ruby-activesupport))
    (synopsis "Toolkit for building modeling frameworks like Active Record")
    (description
     "This package provides a toolkit for building modeling frameworks like
@@ -218,9 +214,7 @@ serialization, internationalization, and testing.")
     '(;; No included tests
       #:tests? #f))
    (propagated-inputs
-    `(("ruby-activemodel" ,ruby-activemodel)
-      ("ruby-activesupport" ,ruby-activesupport)
-      ("ruby-arel" ,ruby-arel)))
+    (list ruby-activemodel ruby-activesupport ruby-arel))
    (synopsis "Ruby library to connect to relational databases")
    (description
     "Active Record connects classes to relational database table to establish
@@ -243,13 +237,13 @@ an almost zero-configuration persistence layer for applications.")
     (arguments
      '(#:tests? #f)) ; No included tests
     (propagated-inputs
-     `(("ruby-actionpack" ,ruby-actionpack)
-       ("ruby-activesupport" ,ruby-activesupport)
-       ("ruby-railties" ,ruby-railties)
-       ("ruby-rspec-core" ,ruby-rspec-core)
-       ("ruby-rspec-expectations" ,ruby-rspec-expectations)
-       ("ruby-rspec-mocks" ,ruby-rspec-mocks)
-       ("ruby-rspec-support" ,ruby-rspec-support)))
+     (list ruby-actionpack
+           ruby-activesupport
+           ruby-railties
+           ruby-rspec-core
+           ruby-rspec-expectations
+           ruby-rspec-mocks
+           ruby-rspec-support))
     (synopsis "Use RSpec to test Ruby on Rails applications")
     (description
      "This package provides support for using RSpec to test Ruby on Rails
@@ -273,7 +267,7 @@ applications, in pace of the default Minitest testing library.")
      '(;; No included tests
        #:tests? #f))
     (propagated-inputs
-     `(("ruby-loofah" ,ruby-loofah)))
+     (list ruby-loofah))
     (synopsis "HTML sanitization for Rails applications")
     (description
      "This gem is used to handle HTML sanitization in Rails applications.  If
@@ -298,10 +292,9 @@ directly.")
         "17vdh273cmmfpzy5m546dd13zqmimv54jjx0f7sl0zi5lwz0gnck"))))
    (build-system ruby-build-system)
    (native-inputs
-    `(("bundler" ,bundler)))
+    (list bundler))
    (propagated-inputs
-    `(("ruby-activesupport" ,ruby-activesupport)
-      ("ruby-nokogiri" ,ruby-nokogiri)))
+    (list ruby-activesupport ruby-nokogiri))
    (synopsis "Compare HTML DOMs and assert certain elements exists")
    (description
     "This gem can compare HTML and assert certain elements exists.  This is
@@ -325,11 +318,8 @@ useful when writing tests.")
     '(;; No included tests
       #:tests? #f))
     (propagated-inputs
-     `(("ruby-actionpack" ,ruby-actionpack)
-       ("ruby-activerecord" ,ruby-activerecord)
-       ("ruby-activestorage" ,ruby-activestorage)
-       ("ruby-activesupport" ,ruby-activesupport)
-       ("ruby-nokogiri" ,ruby-nokogiri)))
+     (list ruby-actionpack ruby-activerecord ruby-activestorage
+           ruby-activesupport ruby-nokogiri))
     (synopsis "Edit and display rich text in Rails applications")
     (description
      "ActionText edits and displays rich text in Rails applications.")
@@ -352,11 +342,8 @@ useful when writing tests.")
     '(;; No included tests
       #:tests? #f))
    (propagated-inputs
-    `(("ruby-activesupport" ,ruby-activesupport)
-      ("ruby-builder" ,ruby-builder)
-      ("ruby-erubi" ,ruby-erubi)
-      ("ruby-rails-dom-testing" ,ruby-rails-dom-testing)
-      ("ruby-rails-html-sanitizer" ,ruby-rails-html-sanitizer)))
+    (list ruby-activesupport ruby-builder ruby-erubi
+          ruby-rails-dom-testing ruby-rails-html-sanitizer))
    (synopsis "Conventions and helpers for building web pages")
    (description
     "ActionView provides conventions and helpers for building web pages in
@@ -380,12 +367,12 @@ Ruby.")
     '(;; No included tests
       #:tests? #f))
    (propagated-inputs
-    `(("ruby-actionview" ,ruby-actionview)
-      ("ruby-activesupport" ,ruby-activesupport)
-      ("ruby-rack" ,ruby-rack)
-      ("ruby-rack-test" ,ruby-rack-test)
-      ("ruby-rails-dom-testing" ,ruby-rails-dom-testing)
-      ("ruby-rails-html-sanitizer" ,ruby-rails-html-sanitizer)))
+    (list ruby-actionview
+          ruby-activesupport
+          ruby-rack
+          ruby-rack-test
+          ruby-rails-dom-testing
+          ruby-rails-html-sanitizer))
    (synopsis "Conventions for building and testing MVC web applications")
    (description
     "ActionPack provides conventions for building and testing MVC web
@@ -409,10 +396,8 @@ applications.  These work with any Rack-compatible server.")
     '(;; No included tests
       #:tests? #f))
    (propagated-inputs
-    `(("ruby-actionpack" ,ruby-actionpack)
-      ("ruby-activesupport" ,ruby-activesupport)
-      ("ruby-nio4r" ,ruby-nio4r)
-      ("ruby-websocket-driver" ,ruby-websocket-driver)))
+    (list ruby-actionpack ruby-activesupport ruby-nio4r
+          ruby-websocket-driver))
    (synopsis "Integrate integrates WebSockets with Rails applications")
    (description
     "Action Cable integrates WebSockets with Rails applications.  Through
@@ -436,8 +421,7 @@ WebSockets it allows for real-time features in web applications.")
     '(;; No included tests
       #:tests? #f))
    (propagated-inputs
-    `(("ruby-activesupport" ,ruby-activesupport)
-      ("ruby-globalid" ,ruby-globalid)))
+    (list ruby-activesupport ruby-globalid))
    (synopsis "Declare job classes for multiple backends")
    (description
     "ActiveJob allows declaring job classes in a common way across Rails
@@ -461,12 +445,12 @@ applications.")
      '(;; No included tests
        #:tests? #f))
     (propagated-inputs
-     `(("ruby-actionpack" ,ruby-actionpack)
-       ("ruby-activejob" ,ruby-activejob)
-       ("ruby-activerecord" ,ruby-activerecord)
-       ("ruby-activesupport" ,ruby-activesupport)
-       ("ruby-marcel" ,ruby-marcel)
-       ("ruby-mimemagic" ,ruby-mimemagic)))
+     (list ruby-actionpack
+           ruby-activejob
+           ruby-activerecord
+           ruby-activesupport
+           ruby-marcel
+           ruby-mimemagic))
     (synopsis "Integrate file storage services in to Rails applications")
     (description
      "ActiveStorage integrates file storage services with Rails applications,
@@ -490,12 +474,12 @@ allowing files to be attached to ActiveRecord models.")
     '(;; No included tests
       #:tests? #f))
     (propagated-inputs
-     `(("ruby-actionpack" ,ruby-actionpack)
-       ("ruby-activejob" ,ruby-activejob)
-       ("ruby-activerecord" ,ruby-activerecord)
-       ("ruby-activestorage" ,ruby-activestorage)
-       ("ruby-activesupport" ,ruby-activesupport)
-       ("ruby-mail" ,ruby-mail)))
+     (list ruby-actionpack
+           ruby-activejob
+           ruby-activerecord
+           ruby-activestorage
+           ruby-activesupport
+           ruby-mail))
     (synopsis "Receive and process incoming emails in Rails applications")
     (description
      "ActionMailbox receives and processes incoming emails in Rails applications.")
@@ -518,12 +502,12 @@ allowing files to be attached to ActiveRecord models.")
     '(;; No included tests
       #:tests? #f))
    (propagated-inputs
-    `(("ruby-actionpack" ,ruby-actionpack)
-      ("ruby-actionview" ,ruby-actionview)
-      ("ruby-activejob" ,ruby-activejob)
-      ("ruby-activesupport" ,ruby-activesupport)
-      ("ruby-mail" ,ruby-mail)
-      ("ruby-rails-dom-testing" ,ruby-rails-dom-testing)))
+    (list ruby-actionpack
+          ruby-actionview
+          ruby-activejob
+          ruby-activesupport
+          ruby-mail
+          ruby-rails-dom-testing))
    (synopsis "Work with emails using the controller/view pattern")
    (description
     "Compose, deliver, receive, and test emails using the controller/view
@@ -547,11 +531,8 @@ pattern.  Including support for multipart email and attachments.")
     '(;; No included tests
       #:tests? #f))
    (propagated-inputs
-    `(("ruby-actionpack" ,ruby-actionpack)
-      ("ruby-activesupport" ,ruby-activesupport)
-      ("ruby-method-source" ,ruby-method-source)
-      ("ruby-rake" ,ruby-rake)
-      ("ruby-thor" ,ruby-thor)))
+    (list ruby-actionpack ruby-activesupport ruby-method-source ruby-rake
+          ruby-thor))
    (synopsis "Rails internals, including application bootup and generators")
    (description
     "@code{railties} provides the core Rails internals including handling
@@ -575,9 +556,7 @@ application bootup, plugins, generators, and Rake tasks.")
     '(;; No included tests
       #:tests? #f))
    (propagated-inputs
-    `(("ruby-actionpack" ,ruby-actionpack)
-      ("ruby-activesupport" ,ruby-activesupport)
-      ("ruby-sprockets" ,ruby-sprockets)))
+    (list ruby-actionpack ruby-activesupport ruby-sprockets))
    (synopsis "Sprockets Rails integration")
    (description
     "Provides Sprockets implementation for the Rails Asset Pipeline.")
@@ -618,15 +597,9 @@ application bootup, plugins, generators, and Rake tasks.")
                (("group :test do") "group :test do\n  gem 'tzinfo-data'"))
              #t)))))
     (propagated-inputs
-     `(("ruby-actionview" ,ruby-actionview)
-       ("ruby-activemodel" ,ruby-activemodel)
-       ("ruby-bindex" ,ruby-bindex)
-       ("ruby-railties" ,ruby-railties)))
+     (list ruby-actionview ruby-activemodel ruby-bindex ruby-railties))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rails" ,ruby-rails)
-       ("ruby-mocha" ,ruby-mocha)
-       ("ruby-simplecov" ,ruby-simplecov)))
+     (list bundler ruby-rails ruby-mocha ruby-simplecov))
     (synopsis "Debugging tool for your Ruby on Rails applications")
     (description
      "This package allows you to create an interactive Ruby session in your
@@ -650,11 +623,9 @@ can also be launched manually in any page.")
     (arguments
      '(#:tests? #f)) ; TODO Tests require a running MySQL service
     (propagated-inputs
-     `(("ruby-activerecord" ,ruby-activerecord)))
+     (list ruby-activerecord))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-yard" ,ruby-yard)
-       ("ruby-mysql2" ,ruby-mysql2)))
+     (list bundler ruby-yard ruby-mysql2))
     (synopsis "Advisory locking for ActiveRecord")
     (description
      "The With advisory lock gem adds advisory locking to ActiveRecord for
@@ -696,20 +667,20 @@ for locks.")
               (invoke "ruby" "-e" "gem 'rails'"))
             #t)))))
    (propagated-inputs
-    `(("ruby-actioncable" ,ruby-actioncable)
-      ("ruby-actionmailbox" ,ruby-actionmailbox)
-      ("ruby-actionmailer" ,ruby-actionmailer)
-      ("ruby-actionpack" ,ruby-actionpack)
-      ("ruby-actiontext" ,ruby-actiontext)
-      ("ruby-actionview" ,ruby-actionview)
-      ("ruby-activejob" ,ruby-activejob)
-      ("ruby-activemodel" ,ruby-activemodel)
-      ("ruby-activerecord" ,ruby-activerecord)
-      ("ruby-activestorage" ,ruby-activestorage)
-      ("ruby-activesupport" ,ruby-activesupport)
-      ("bundler" ,bundler)
-      ("ruby-railties" ,ruby-railties)
-      ("ruby-sprockets-rails" ,ruby-sprockets-rails)))
+    (list ruby-actioncable
+          ruby-actionmailbox
+          ruby-actionmailer
+          ruby-actionpack
+          ruby-actiontext
+          ruby-actionview
+          ruby-activejob
+          ruby-activemodel
+          ruby-activerecord
+          ruby-activestorage
+          ruby-activesupport
+          bundler
+          ruby-railties
+          ruby-sprockets-rails))
    (synopsis "Full-stack web framework optimized for programmer happiness")
    (description
     "Ruby on Rails is a full-stack web framework optimized for programmer
diff --git a/gnu/packages/ratpoison.scm b/gnu/packages/ratpoison.scm
index 42e17b63d9..0c0687032d 100644
--- a/gnu/packages/ratpoison.scm
+++ b/gnu/packages/ratpoison.scm
@@ -79,8 +79,7 @@
        ("readline" ,readline)
        ("xorgproto" ,xorgproto)))
     (native-inputs
-     `(("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list perl pkg-config))
     (home-page "https://www.nongnu.org/ratpoison/")
     (synopsis "Simple mouse-free tiling window manager")
     (description
diff --git a/gnu/packages/rcm.scm b/gnu/packages/rcm.scm
index f8c7ba4200..5fab6250fd 100644
--- a/gnu/packages/rcm.scm
+++ b/gnu/packages/rcm.scm
@@ -48,8 +48,7 @@
                          (("/usr/bin/env") (which "env")))
                        #t)))
                   #:parallel-tests? #f))
-    (native-inputs `(("perl" ,perl)
-                     ("python-cram" ,python-cram)))
+    (native-inputs (list perl python-cram))
     (synopsis "Management suite for dotfiles")
     (description "The rcm suite of tools is for managing dotfiles directories.  This is
 a directory containing all the @code{.*rc} files in your home directory
diff --git a/gnu/packages/rdesktop.scm b/gnu/packages/rdesktop.scm
index adfbe7de06..12a1d3e9eb 100644
--- a/gnu/packages/rdesktop.scm
+++ b/gnu/packages/rdesktop.scm
@@ -65,12 +65,9 @@
                                "--disable-smartcard")
        #:tests? #f))                    ; No 'check' target
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("gnutls" ,gnutls)
-       ("libx11" ,libx11)
-       ("libxcursor" ,libxcursor)
-       ("nettle" ,nettle)))
+     (list gnutls libx11 libxcursor nettle))
     (home-page "https://www.rdesktop.org/")
     (synopsis "Client for Windows Terminal Services")
     (description
@@ -94,13 +91,13 @@ to remotely control a user's Windows desktop.")
         (base32 "02zlg5r704zbryx09a5rjjf7q137kj16i9qh25dw9q1y69ri619n"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("docbook-xml" ,docbook-xml)
-       ("docbook-xsl" ,docbook-xsl)
-       ("glib" ,glib)
-       ("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)
-       ("pkg-config" ,pkg-config)
-       ("xmlto" ,xmlto)))
+     (list docbook-xml
+           docbook-xsl
+           glib
+           libxml2
+           libxslt
+           pkg-config
+           xmlto))
     (inputs
      `(("alsa-lib" ,alsa-lib)
        ("cups" ,cups)
@@ -120,9 +117,7 @@ to remotely control a user's Windows desktop.")
        ("pulseaudio" ,pulseaudio)
        ("zlib" ,zlib)))
     (propagated-inputs
-     `(("libxkbcommon" ,libxkbcommon)
-       ("openssl" ,openssl)
-       ("wayland" ,wayland)))
+     (list libxkbcommon openssl wayland))
     (arguments
      `(#:build-type "RELEASE"
        #:configure-flags
diff --git a/gnu/packages/rdf.scm b/gnu/packages/rdf.scm
index fb84d8053d..e3a26cf734 100644
--- a/gnu/packages/rdf.scm
+++ b/gnu/packages/rdf.scm
@@ -7,6 +7,7 @@
 ;;; Copyright © 2020 Pjotr Prins <pjotr.guix@thebird.nl>
 ;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2020 pukkamustard <pukkamustard@posteo.net>
+;;; Copyright © 2022 Marius Bakke <marius@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -24,6 +25,7 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages rdf)
+  #:use-module (guix gexp)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix git-download)
@@ -48,6 +50,7 @@
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
@@ -70,10 +73,7 @@
                "1vc02im4mpc28zxzgli68k6j0dakh0k3s389bm436yvqajxg19xd"))))
     (build-system gnu-build-system)
     (inputs
-     `(("curl" ,curl)
-       ("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)
-       ("zlib" ,zlib)))
+     (list curl libxml2 libxslt zlib))
     (arguments
      `(#:parallel-tests? #f))
     (home-page "https://librdf.org/raptor/")
@@ -105,8 +105,8 @@ HTML and JSON.")
                                       "clucene-contribs-lib.patch"))))
     (build-system cmake-build-system)
     (inputs
-     `(("boost" ,boost) ; could also use bundled copy
-       ("zlib" ,zlib)))
+     (list boost ; could also use bundled copy
+           zlib))
     (arguments
      `(#:test-target "cl_test"
        #:configure-flags '("-DBUILD_CONTRIBS_LIB=ON")
@@ -126,7 +126,7 @@ Java Lucene text search engine API to C++.")
 (define-public lucene++
   (package
     (name "lucene++")
-    (version "3.0.7")
+    (version "3.0.8")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -135,19 +135,35 @@ Java Lucene text search engine API to C++.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "06b37fly6l27zc6kbm93f6khfsv61w792j8xihfagpcm9cfz2zi1"))))
+                "12v7r62f7pqh5h210pb74sfx6h70lj4pgfpva8ya2d55fn0qxrr2"))
+              (modules '((guix build utils)))
+              (snippet
+               #~(begin
+                   (substitute* (list "src/config/core/CMakeLists.txt"
+                                      "src/config/contrib/CMakeLists.txt")
+                     (("include/pkgconfig")
+                      "lib/pkgconfig")
+                     (("include/cmake")
+                      "share/cmake/lucene++"))))))
     (build-system cmake-build-system)
     (arguments
-     `(#:configure-flags
-       ;; CXX_FLAGS suggested in a closed issue on github:
-       ;; https://github.com/luceneplusplus/LucenePlusPlus/issues/100
-       (list "-Wno-dev" "-DCMAKE_CXX_FLAGS=-DBOOST_VARIANT_USE_RELAXED_GET_BY_DEFAULT"
-             ;; Install in lib64 break rpath
-             "-DCMAKE_INSTALL_LIBDIR:PATH=lib")))
+     (list #:configure-flags
+           #~(list (string-append "-DLIB_DESTINATION:PATH="
+                                  #$output "/lib")
+                   "-DINSTALL_GTEST:BOOL=OFF")
+           #:phases
+           #~(modify-phases %standard-phases
+               (replace 'check
+                 ;; XXX Tests are built unconditionally during the 'build phase.
+                 ;; There's no ‘test’ target.  README.md suggests running this.
+                 (lambda* (#:key tests? #:allow-other-keys)
+                   (when tests?
+                     (invoke "src/test/lucene++-tester"
+                             "--test_dir=../source/src/test/testfiles")))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("boost" ,boost)))
+     (list boost zlib))
     (home-page "https://github.com/luceneplusplus/LucenePlusPlus")
     (synopsis "Text search engine")
     (description "Lucene++ is an up to date C++ port of the popular Java
@@ -186,10 +202,7 @@ Lucene library, a high-performance, full-featured text search engine.")
        ("cyrus-sasl" ,cyrus-sasl)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (home-page "https://github.com/swh/LRDF")
     (synopsis "Lightweight RDF library for accessing LADSPA plugin metadata")
     (description
@@ -212,17 +225,13 @@ taxonomic inference capability.")
                "0z6rrwn4jsagvarg8d5zf0j352kjgi33py39jqd29gbhcnncj939"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("perl" ,perl)
-       ("perl-xml-dom" ,perl-xml-dom) ; for the tests
-       ("pkg-config" ,pkg-config)))
+     (list perl perl-xml-dom ; for the tests
+           pkg-config))
     (inputs
-     `(("libgcrypt" ,libgcrypt)
-       ("libxml2" ,libxml2)
-       ("mpfr" ,mpfr)
-       ("pcre" ,pcre)
-       ("util-linux" ,util-linux "lib")))
+     (list libgcrypt libxml2 mpfr pcre
+           `(,util-linux "lib")))
     (propagated-inputs
-     `(("raptor2" ,raptor2))) ; stipulated by rasqal.pc
+     (list raptor2)) ; stipulated by rasqal.pc
     (arguments
      `(#:parallel-tests? #f
        ; test failure reported upstream, see
@@ -253,12 +262,12 @@ Turtle/N3 and read them in SPARQL XML, RDF/XML and Turtle/N3.")
                "109n0kp39p966dpiasad2bb7q66rwbcb9avjvimw28chnpvlf66y"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("perl" ,perl) ; needed for installation
-       ("pkg-config" ,pkg-config)))
+     (list perl ; needed for installation
+           pkg-config))
     (propagated-inputs
-     `(("rasqal" ,rasqal))) ; in Requires.private field of .pc
+     (list rasqal)) ; in Requires.private field of .pc
     (inputs
-     `(("bdb" ,bdb)))
+     (list bdb))
     (home-page "http://librdf.org/")
     (synopsis "RDF library")
     (description "The Redland RDF Library (librdf) provides the RDF API
@@ -323,11 +332,11 @@ ideal (e.g. in LV2 implementations or embedded applications).")
                                    (assoc-ref outputs "out") "/lib"))
             #t)))))
     (inputs
-     `(("pcre" ,pcre)))
+     (list pcre))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (propagated-inputs
-     `(("serd" ,serd)))                 ; required by sord-0.pc
+     (list serd))                 ; required by sord-0.pc
     (home-page "https://drobilla.net/software/sord/")
     (synopsis "C library for storing RDF data in memory")
     (description
@@ -337,31 +346,35 @@ ideal (e.g. in LV2 implementations or embedded applications).")
 (define-public python-rdflib
   (package
     (name "python-rdflib")
-    (version "4.2.2")
+    (version "6.1.1")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "rdflib" version))
         (sha256
          (base32
-          "0398c714znnhaa2x7v51b269hk20iz073knq2mvmqp2ma92z27fs"))))
+          "0m7pyq771vl4zf9xd3pxjbg7x6ac97b3djfbv9qq9fch56ps1gwd"))))
     (build-system python-build-system)
     (arguments
-     '(;; FIXME: Three test failures. Should be fixed next release.
-       #:tests? #f))
-       ;; #:phases
-       ;; (modify-phases %standard-phases
-       ;;   (replace 'check
-       ;;     (lambda _
-       ;;       ;; Run tests from the build directory so python3 only
-       ;;       ;; sees the installed 2to3 version.
-       ;;       (invoke "nosetests" "--where=./build/src"))))))
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'adjust-tests
+           (lambda _
+             (for-each delete-file
+                       '(;; This test needs a font that is not shipped.
+                         "test/test_so_69984830.py"
+                         ;; These tests need internet access.
+                         "test/jsonld/test_onedotone.py"
+                         "test/test_sparql_service.py"
+                         "test/test_graph.py"))))
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "pytest" "-vv" "test/")))))))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-pytest))
     (propagated-inputs
-      `(("python-html5lib" ,python-html5lib)
-        ("python-isodate" ,python-isodate)
-        ("python-pyparsing" ,python-pyparsing)))
+      (list python-html5lib python-isodate python-pyparsing))
     (home-page "https://github.com/RDFLib/rdflib")
     (synopsis "Python RDF library")
     (description
@@ -370,25 +383,42 @@ powerful language for representing information.")
     (license (license:non-copyleft "file://LICENSE"
                                    "See LICENSE in the distribution."))))
 
+(define-public python-rdflib-5
+  (package
+    (inherit python-rdflib)
+    (version "5.0.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "rdflib" version))
+        (sha256
+         (base32
+          "0mdi7xh4zcr3ngqwlgqdqf0i5bxghwfddyxdng1zwpiqkpa9s53q"))))
+    ;; XXX: Lazily disable tests because they require a lot of work
+    ;; and this package is only transitional.
+    (arguments '(#:tests? #f))))
+
 (define-public python2-rdflib
-  (package-with-python2 python-rdflib))
+  (package-with-python2 python-rdflib-5))
 
+;; Note: This package is only needed for rdflib < 6.0; supersede when
+;; the above are removed.
 (define-public python-rdflib-jsonld
   (package
     (name "python-rdflib-jsonld")
-    (version "0.5.0")
+    (version "0.6.2")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "rdflib-jsonld" version))
         (sha256
          (base32
-          "1v85f4hdlrrk0l1najmqmm79ijrvcj259kwsrrxiq1q5chr5azag"))))
+          "0qrshlqzv5g5bign7kjja3xf7hyk7xgayr3yd0qlqda1kl0x6z0h"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (propagated-inputs
-     `(("python-rdflib" ,python-rdflib)))
+     (list python-rdflib))
     (home-page "https://github.com/RDFLib/rdflib-jsonld")
     (synopsis "rdflib extension adding JSON-LD parser and serializer")
     (description "This package provides an rdflib extension adding JSON-LD
@@ -408,7 +438,7 @@ parser and serializer.")
           "0x7yz0lvqb6mkhl5fbml27sppmscgpf8v2ism9jzzf0h982ffzxm"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-rdflib" ,python-rdflib)))
+     (list python-rdflib))
     (home-page "https://github.com/hsolbrig/CFGraph")
     (synopsis "RDF Collections flattener for rdflib")
     (description
@@ -430,13 +460,9 @@ parser and serializer.")
                 "1vsq80jnix6cy78ayag7v8ajyw7h8dqyad1q6xkf2hzz3skvr34z"))))
     (build-system gnu-build-system)
     (inputs
-     `(("serd" ,serd)
-       ("zlib" ,zlib)))
+     (list serd zlib))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (home-page "https://github.com/rdfhdt/hdt-cpp")
     (synopsis "C++ implementation of the HDT compression format")
     (description "Header Dictionary Triples (HDT) is a compression format for
@@ -461,9 +487,10 @@ C++ library as well as various command-line tools to to work with HDT.")
     (arguments
      '(#:tests? #f)) ; The test suite simply queries external HTTP endpoints.
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     ;; Build with setuptools <58 to get lib2to3 support.
+     (list python-nose python-setuptools))
     (propagated-inputs
-     `(("python-rdflib" ,python-rdflib)))
+     (list python-rdflib))
     (home-page "https://rdflib.dev/sparqlwrapper/")
     (synopsis "SPARQL Endpoint interface to Python")
     (description "Python wrapper around a SPARQL service.  It helps in creating
diff --git a/gnu/packages/re2c.scm b/gnu/packages/re2c.scm
index ba96727d56..eb9daf4622 100644
--- a/gnu/packages/re2c.scm
+++ b/gnu/packages/re2c.scm
@@ -40,7 +40,7 @@
     (build-system gnu-build-system)
     (home-page "https://re2c.org/")
     (native-inputs
-     `(("python" ,python)))             ; for the test driver
+     (list python))             ; for the test driver
     (synopsis "Lexer generator for C/C++")
     (description
      "@code{re2c} generates minimalistic hard-coded state machine (as opposed
diff --git a/gnu/packages/readline.scm b/gnu/packages/readline.scm
index c7db9e611d..5920f1c8e1 100644
--- a/gnu/packages/readline.scm
+++ b/gnu/packages/readline.scm
@@ -3,7 +3,7 @@
 ;;; Copyright © 2016, 2019 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2018, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2019 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2019, 2020 Marius Bakke <marius@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -48,13 +48,10 @@
   (list (readline-patch version seqno (base32 hash))
         ...))
 
-(define %patch-series-8.0
+(define %patch-series-8.1
   (patch-series
-   "8.0"
-   (1 "0sfh7wn0pr743xspnb1zndxndlv9rc0hcg14cbw5cmyg6f4ykrfq")
-   (2 "1xy8mv8xm8hsfixwp3ci9kfx3dii3y92cq27wwd0jq75y6zzxc1n")
-   (3 "1vza7sxjcsr2z295ij12nzgncdil1vb6as3mqy4m7svi1chv5pcl")
-   (4 "0k1rfx9w32lglxg564yvp0mw6jg6883p8ac2f2lxxqpf80m3vami")))
+   "8.1"
+   (1 "0i4ikdqgcjnb40y2ss3lm09rq56zih5rzma3bib50dk3d1d4cak8")))
 
 (define %patch-series-7.0
   (patch-series
@@ -68,20 +65,20 @@
 (define-public readline
   (package
     (name "readline")
-    (version (string-append "8.0."
-                            (number->string (length %patch-series-8.0))))
+    (version (string-append "8.1."
+                            (number->string (length %patch-series-8.1))))
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnu/readline/readline-"
                                   (version-major+minor version) ".tar.gz"))
               (sha256
                (base32
-                "0qg4924hf4hg0r0wbx2chswsr08734536fh5iagkd3a7f4czafg3"))
-              (patches (append %patch-series-8.0
+                "00ibp0n9crbwx15k9vvckq5wsipw98b1px8pd8i34chy2gpb9kpq"))
+              (patches (append %patch-series-8.1
                                (search-patches "readline-link-ncurses.patch")))
               (patch-flags '("-p0"))))
     (build-system gnu-build-system)
-    (propagated-inputs `(("ncurses" ,ncurses)))
+    (propagated-inputs (list ncurses))
     (arguments `(#:configure-flags
                  (list (string-append "LDFLAGS=-Wl,-rpath -Wl,"
                                       (assoc-ref %build-inputs "ncurses")
@@ -158,11 +155,9 @@ comfortable for anyone.")
         (base32 "1irlcdvj1ddxkfzwa7l2djxgp5xbqch9vaajk2s32x1h5cxl1f5r"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("perl" ,perl)))
+     (list autoconf automake perl))
     (inputs
-     `(("readline" ,readline)))
+     (list readline))
     (synopsis "Wrapper to allow the editing of keyboard commands")
     (description
      "Rlwrap is a 'readline wrapper', a small utility that uses the GNU
diff --git a/gnu/packages/rednotebook.scm b/gnu/packages/rednotebook.scm
index 0c7e5994cd..f63104ad32 100644
--- a/gnu/packages/rednotebook.scm
+++ b/gnu/packages/rednotebook.scm
@@ -71,11 +71,7 @@
                  `("LD_LIBRARY_PATH" ":" prefix (,webkitgtk-path)))
                #t))))))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("gtksourceview" ,gtksourceview-3)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-pygobject" ,python-pygobject)
-       ("webkitgtk" ,webkitgtk)))
+     (list gtk+ gtksourceview-3 python-pyyaml python-pygobject webkitgtk))
     ;; TODO: package the following for python3 (if possible), add them as
     ;; dependencies, and remove them from rednotebook source:
     ;; pygtkspellcheck, elib.intl, msgfmt, txt2tags
diff --git a/gnu/packages/robotics.scm b/gnu/packages/robotics.scm
index 87dcc6f890..a110d0e6bd 100644
--- a/gnu/packages/robotics.scm
+++ b/gnu/packages/robotics.scm
@@ -51,14 +51,14 @@
       (build-system cmake-build-system)
       (arguments
        '(#:configure-flags '("-DBUILD_SHARED_LIBS=ON")))
-      (native-inputs `(("pkg-config" ,pkg-config)))
+      (native-inputs (list pkg-config))
       (inputs
        ;; Optionally, add Python + Boost for Python bindings.
-       `(("sdl2" ,sdl2)))
+       (list sdl2))
       (propagated-inputs
        ;; 'Viewer.h' includes 'QGLWidget'.
-       `(("qtbase" ,qtbase-5)                ;the viewer module needs Qt5 + MESA
-         ("mesa" ,mesa)))
+       (list qtbase-5 ;the viewer module needs Qt5 + MESA
+             mesa))
       (synopsis "Robot simulator")
       (description
        "Enki is a robot simulator written in C++.  It provides collision and
@@ -101,21 +101,20 @@ hundred times faster than real-time.")
       (arguments
        '(#:configure-flags '("-DBUILD_SHARED_LIBS=ON")))
       (native-inputs
-       `(("pkg-config" ,pkg-config)
-         ("valgrind" ,valgrind)))                 ;for tests
+       (list pkg-config valgrind))                 ;for tests
       (inputs
-       `(("dashel" ,dashel)
-         ("enki" ,enki)
-         ("protobuf" ,protobuf-3.5)               ;for logging
-         ("qtbase" ,qtbase-5)
-         ("qtsvg" ,qtsvg)
-         ("qttools" ,qttools)              ;for libQt5Help, needed by "studio"
-         ("qtwebkit" ,qtwebkit)
-         ("qtx11extras" ,qtx11extras)
-         ("eudev" ,eudev)
-         ("libxml2" ,libxml2)
-         ("sdl2" ,sdl2)
-         ("avahi" ,avahi)))            ;XXX: we need the libdnssd compat layer
+       (list dashel
+             enki
+             protobuf-3.5 ;for logging
+             qtbase-5
+             qtsvg
+             qttools ;for libQt5Help, needed by "studio"
+             qtwebkit
+             qtx11extras
+             eudev
+             libxml2
+             sdl2
+             avahi))            ;XXX: we need the libdnssd compat layer
       (synopsis "Event-based robot programming tools")
       (description
        "Aseba means @dfn{actuator and sensor event-based architecture}.
diff --git a/gnu/packages/rocm.scm b/gnu/packages/rocm.scm
index 9a015d2490..2ccc6d3251 100644
--- a/gnu/packages/rocm.scm
+++ b/gnu/packages/rocm.scm
@@ -49,7 +49,7 @@
                 "0sic2zxmzl2pb2865vvq55mbpcr8pby8v19pjdlm08pypqw5h6h6"))))
     (build-system cmake-build-system)
     (arguments `(#:tests? #f)) ; Tests try to use git commit
-    (native-inputs `(("git" ,git)))
+    (native-inputs (list git))
     (home-page "https://github.com/RadeonOpenCompute/rocm-cmake")
     (synopsis "ROCm cmake modules")
     (description "ROCm cmake modules provides cmake modules for common build
@@ -128,7 +128,7 @@ AMDGPU code objects.")
                 "0ffqhrrscmcydfqf61dk58d7nnxk6n2k68jhqfj7a4hvhlphb74f"))))
     (build-system cmake-build-system)
     (arguments `(#:tests? #f)) ; Not sure how to run tests.
-    (inputs `(("numactl" ,numactl)))
+    (inputs (list numactl))
     (home-page "https://github.com/RadeonOpenCompute/ROCT-Thunk-Interface")
     (synopsis "Radeon Open Compute Thunk Interface")
     (description "User-mode API interfaces used to interact with the ROCk
@@ -167,7 +167,7 @@ driver.")
        ("llvm" ,llvm-for-rocm)
        ("roct-thunk-interface" ,roct-thunk-interface)
        ("rocm-device-libs" ,rocm-device-libs))) ; For bitcode.
-    (native-inputs `(("xxd" ,xxd)))
+    (native-inputs (list xxd))
     (home-page "https://github.com/RadeonOpenCompute/ROCR-Runtime")
     (synopsis "ROCm Platform Runtime")
     (description "User-mode API interfaces and libraries necessary for host
@@ -258,12 +258,12 @@ allows runtimes to work on Windows as well as on Linux without much effort.")
                (with-output-to-file (string-append vendors "/amdocl64.icd")
                  (lambda _ (display sopath)))))))))
     (inputs
-     `(("mesa" ,mesa)
-       ("rocm-comgr" ,rocm-comgr)
-       ("rocr-runtime" ,rocr-runtime)
-       ("rocclr" ,rocclr)
-       ("opencl-icd-loader" ,opencl-icd-loader)
-       ("glew" ,glew)))
+     (list mesa
+           rocm-comgr
+           rocr-runtime
+           rocclr
+           opencl-icd-loader
+           glew))
     (native-inputs `())
     (synopsis "ROCm OpenCL Runtime")
     (description "OpenCL 2.0 compatible language runtime, supporting offline
@@ -295,8 +295,7 @@ and in-process/in-memory compilation.")
                 (string-append (assoc-ref inputs "kmod") "/bin/lsmod"))
                (("grep") (which "grep"))))))))
     (inputs
-     `(("rocr-runtime" ,rocr-runtime)
-       ("kmod" ,kmod)))
+     (list rocr-runtime kmod))
     (home-page "https://github.com/RadeonOpenCompute/rocminfo")
     (synopsis "ROCm Application for Reporting System Info")
     (description "List @acronym{HSA,Heterogeneous System Architecture} Agents
@@ -318,7 +317,7 @@ available to ROCm and show their properties.")
                 "0a14kwkjpiyljgzxblh031qibn6xgbxp6m12zdy1pmwb2c44jjmm"))))
     (build-system cmake-build-system)
     (arguments `(#:tests? #f)) ; No tests.
-    (inputs `(("rocr-runtime" ,rocr-runtime)))
+    (inputs (list rocr-runtime))
     (home-page "https://github.com/RadeonOpenCompute/rocm_bandwidth_test")
     (synopsis "Bandwidth test for ROCm")
     (description "RocBandwidthTest is designed to capture the performance
diff --git a/gnu/packages/rpc.scm b/gnu/packages/rpc.scm
index 0ff8363047..b4f4af9446 100644
--- a/gnu/packages/rpc.scm
+++ b/gnu/packages/rpc.scm
@@ -105,11 +105,7 @@
                    (find-files "." "\\.a$"))))
              #t)))))
     (inputs
-     `(("abseil-cpp" ,abseil-cpp)
-       ("c-ares" ,c-ares/cmake)
-       ("openssl" ,openssl)
-       ("re2" ,re2)
-       ("zlib" ,zlib)))
+     (list abseil-cpp c-ares/cmake openssl re2 zlib))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("protobuf" ,protobuf)
@@ -154,11 +150,9 @@ browsers to backend services.")
                  (("gettid\\(")
                   "sys_gettid("))))))))
     (native-inputs
-     `(("abseil-cpp" ,abseil-cpp-20200923.3)
-       ("protobuf" ,protobuf-3.6)
-       ,@(fold alist-delete (package-native-inputs grpc)
-               '("abseil-cpp"
-                 "protobuf"))))))
+     (modify-inputs (package-native-inputs grpc)
+       (delete "abseil-cpp" "protobuf")
+       (prepend abseil-cpp-20200923.3 protobuf-3.6)))))
 
 (define-public python-grpcio
   (package
@@ -201,11 +195,9 @@ browsers to backend services.")
                         (("'cc'") "'gcc'"))
                       #t)))))
     (inputs
-     `(("c-ares" ,c-ares)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list c-ares openssl zlib))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://grpc.io")
     (synopsis "HTTP/2-based RPC framework")
     (description "This package provides a Python library for communicating
@@ -232,15 +224,14 @@ with the HTTP/2-based RPC framework gRPC.")
        (list (string-append "--with-boost="
                             (assoc-ref %build-inputs "boost")))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)
-       ("flex" ,flex)
-       ("bison" ,bison)))
+     (list autoconf
+           automake
+           libtool
+           pkg-config
+           flex
+           bison))
     (inputs
-     `(("boost" ,boost)
-       ("libressl" ,libressl)))
+     (list boost libressl))
     (outputs '("out" "lib" "include"))
     (home-page "https://thrift.apache.org/")
     (synopsis
diff --git a/gnu/packages/rpm.scm b/gnu/packages/rpm.scm
index 008ddd6fe7..96c6776d1a 100644
--- a/gnu/packages/rpm.scm
+++ b/gnu/packages/rpm.scm
@@ -55,17 +55,16 @@
                 "0m269nl8s31yjyz7kknv4jl9mx12xjpx2ly6wf66zs5613m4rj1z"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("cmocka" ,cmocka)
-       ("pkg-config" ,pkg-config)))
+     (list cmocka pkg-config))
     (inputs
-     `(("bzip2" ,bzip2)
-       ("lzlib" ,lzlib)
-       ("openssl" ,openssl)
-       ("popt" ,popt)
-       ("rpm" ,rpm)
-       ("xz" ,xz)
-       ("zlib" ,zlib)
-       ("zstd" ,zstd "lib")))
+     (list bzip2
+           lzlib
+           openssl
+           popt
+           rpm
+           xz
+           zlib
+           `(,zstd "lib")))
     (home-page "https://github.com/rpm-software-management/drpm")
     (synopsis "Delta RPM library")
     (description "This package provides a library for making, reading and
@@ -135,10 +134,9 @@ applying deltarpms, compatible with the original deltarpm packages.")
        ("python-pygobject" ,python-pygobject)))
     (propagated-inputs
      ;; glib and gobject are listed as 'Requires' in modulemd-2.0.pc.
-     `(("glib" ,glib)
-       ;; yaml and rpm are listed as 'Requires.private' in modulemd-2.0.pc.
-       ("libyaml" ,libyaml)
-       ("rpm" ,rpm)))
+     (list glib
+           ;; yaml and rpm are listed as 'Requires.private' in modulemd-2.0.pc.
+           libyaml rpm))
     (home-page "https://github.com/fedora-modularity/libmodulemd")
     (synopsis "C library for manipulating module metadata files")
     (description "The libmodulemd API provides a number of convenience tools
@@ -149,7 +147,7 @@ information on multiple streams, default data and translations).")
 (define-public createrepo-c
   (package
     (name "createrepo-c")
-    (version "0.17.4")
+    (version "0.17.6")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -158,7 +156,7 @@ information on multiple streams, default data and translations).")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1fgf71mkhghgbp0pf2pazc7hyaix5igb5nl4fqsisjksfvzdfm5k"))))
+                "175na06mjyr8ws5pkknaicpziayj6p0xaanv62d54c6zxl4w484w"))))
     (build-system cmake-build-system)
     (arguments
      `(#:imported-modules (,@%cmake-build-system-modules
@@ -181,18 +179,16 @@ information on multiple streams, default data and translations).")
                 (format #f "set (BASHCOMP_DIR ~a\
 /share/bash-completion/completions)~%" (assoc-ref outputs "out")))))))))
     (native-inputs
-     `(("bash-completion" ,bash-completion)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python)))
+     (list bash-completion pkg-config python))
     (inputs
-     `(("bzip2" ,bzip2)
-       ("curl" ,curl)
-       ("drpm" ,drpm)
-       ("libmodulemd" ,libmodulemd)
-       ("libxml2" ,libxml2)
-       ("openssl" ,openssl)
-       ("sqlite" ,sqlite)
-       ("zchunk" ,zchunk)))
+     (list bzip2
+           curl
+           drpm
+           libmodulemd
+           libxml2
+           openssl
+           sqlite
+           zchunk))
     (home-page "https://rpm-software-management.github.io/createrepo_c/")
     (synopsis "C implementation of the createrepo tool")
     (description "This package provides the @command{createrepo} command,
diff --git a/gnu/packages/rrdtool.scm b/gnu/packages/rrdtool.scm
index 13419e4d37..1fb642216d 100644
--- a/gnu/packages/rrdtool.scm
+++ b/gnu/packages/rrdtool.scm
@@ -53,17 +53,17 @@
        ("gtk" ,gtk+-2)
        ("libxml2" ,libxml2)
        ("pango" ,pango)
-       ("python" ,python-2)))
+       ("python" ,python)))
     (native-inputs
-     `(("groff" ,groff)
-       ("pkg-config" ,pkg-config)
-
-       ;; For tests.
-       ("bc" ,bc)
-       ("perl" ,perl)                   ; will also build Perl bindings
-       ("tzdata" ,tzdata-for-tests)))
+     (list groff
+           pkg-config
+           ;; For tests.
+           bc
+           perl ; will also build Perl bindings
+           tzdata-for-tests))
     (arguments
-     '(#:phases
+     `(#:disallowed-references (,tzdata-for-tests)
+       #:phases
        (modify-phases %standard-phases
          (add-before 'configure 'pre-configure
            (lambda _
@@ -73,9 +73,7 @@
          (add-before 'check 'prepare-test-environment
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "TZDIR"
-                     (string-append (assoc-ref inputs "tzdata")
-                                    "/share/zoneinfo"))
-             #t))
+                     (search-input-directory inputs "share/zoneinfo"))))
          (add-after 'install 'remove-native-input-references
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
diff --git a/gnu/packages/rsync.scm b/gnu/packages/rsync.scm
index 956c942770..13717f0249 100644
--- a/gnu/packages/rsync.scm
+++ b/gnu/packages/rsync.scm
@@ -39,39 +39,6 @@
 (define-public rsync
   (package
    (name "rsync")
-   (version "3.1.3")
-   (source (origin
-            (method url-fetch)
-            (uri (string-append "https://rsync.samba.org/ftp/rsync/src/rsync-"
-                                version ".tar.gz"))
-            (sha256
-             (base32
-              "1h0011dj6jgqpgribir4anljjv7bbrdcs8g91pbsmzf5zr75bk2m"))))
-   (build-system gnu-build-system)
-   (arguments
-    `(#:configure-flags
-      ;; The bundled copies are preferred by default.
-      (list "--without-included-zlib"
-            "--without-included-popt")))
-   (native-inputs
-    `(("perl" ,perl)))
-   (inputs
-    `(("acl" ,acl)
-      ("popt" ,popt)
-      ("zlib" ,zlib)))
-   (synopsis "Remote (and local) file copying tool")
-   (description
-    "Rsync is a fast and versatile file copying tool.  It can copy locally,
-to/from another host over any remote shell, or to/from a remote rsync daemon.
-Its delta-transfer algorithm reduces the amount of data sent over the network
-by sending only the differences between the source files and the existing
-files in the destination.")
-   (license license:gpl3+)
-   (home-page "https://rsync.samba.org/")))
-
-(define-public rsync-next
-  (package
-   (name "rsync")
    (version "3.2.3")
    (source (origin
             (method url-fetch)
@@ -89,14 +56,14 @@ files in the destination.")
             ;; Avoid these dependencies for now.
             "--disable-openssl")))
    (native-inputs
-    `(("perl" ,perl)))
+    (list perl))
    (inputs
-    `(("acl" ,acl)
-      ("lz4" ,lz4)
-      ("popt" ,popt)
-      ("xxhash" ,xxhash)
-      ("zlib" ,zlib)
-      ("zstd:lib" ,zstd "lib")))
+    (list acl
+          lz4
+          popt
+          xxhash
+          zlib
+          `(,zstd "lib")))
    (synopsis "Remote (and local) file copying tool")
    (description
     "Rsync is a fast and versatile file copying tool.  It can copy locally,
@@ -122,10 +89,9 @@ files in the destination.")
               "0bn29npmbw26akc6y54661irpdh6qcivcs6q48cgp3llklhhxp0q"))))
    (build-system cmake-build-system)
    (inputs
-    `(("popt" ,popt)))
+    (list popt))
    (native-inputs
-    `(("which" ,which)
-      ("perl" ,perl)))
+    (list which perl))
    (home-page "http://librsync.sourceforge.net/")
    (synopsis "Implementation of the rsync remote-delta algorithm")
    (description
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index 8db5bd9158..9d1a414914 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -1,12 +1,12 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014, 2015 Pjotr Prins <pjotr.guix@thebird.nl>
-;;; Copyright © 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015, 2016, 2017, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2014, 2015 David Thompson <davet@gnu.org>
 ;;; Copyright © 2015, 2019 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015, 2016, 2017 Ben Woodcroft <donttrustben@gmail.com>
 ;;; Copyright © 2017 Nikita <nikita@n0.is>
-;;; Copyright © 2017, 2019, 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2017, 2019, 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2017, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017, 2018, 2020, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
@@ -95,7 +95,7 @@
         license:gpl2+
         license:gpl3+))
 
-(define-public ruby
+(define-public ruby-2.6
   (package
     (name "ruby")
     (version "2.6.5")
@@ -135,12 +135,9 @@
                (("/bin/sh") (which "sh")))
              #t)))))
     (inputs
-     `(("readline" ,readline)
-       ("openssl" ,openssl)
-       ("libffi" ,libffi)
-       ("gdbm" ,gdbm)))
+     (list readline openssl libffi gdbm))
     (propagated-inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (native-search-paths
      (list (search-path-specification
             (variable "GEM_PATH")
@@ -153,11 +150,11 @@ a focus on simplicity and productivity.")
 
 (define-public ruby-2.7
   (package
-    (inherit ruby)
+    (inherit ruby-2.6)
     (version "2.7.4")
     (source
      (origin
-       (inherit (package-source ruby))
+       (inherit (package-source ruby-2.6))
        (uri (string-append "https://cache.ruby-lang.org/pub/ruby/"
                            (version-major+minor version)
                            "/ruby-" version ".tar.gz"))
@@ -187,7 +184,7 @@ a focus on simplicity and productivity.")
                (("/bin/sh") (which "sh")))
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)))))
+     (list autoconf))))
 
 (define-public ruby-3.0
   (package
@@ -205,7 +202,7 @@ a focus on simplicity and productivity.")
 
 (define-public ruby-2.5
   (package
-    (inherit ruby)
+    (inherit ruby-2.6)
     (version "2.5.9")
     (source
      (origin
@@ -219,7 +216,7 @@ a focus on simplicity and productivity.")
 
 (define-public ruby-2.4
   (package
-    (inherit ruby)
+    (inherit ruby-2.6)
     (version "2.4.10")
     (source
      (origin
@@ -236,6 +233,8 @@ a focus on simplicity and productivity.")
                    (delete-file-recursively "ext/fiddle/libffi-3.2.1")
                    #t))))))
 
+(define-public ruby ruby-2.7)
+
 (define-public mruby
   (package
     (name "mruby")
@@ -287,8 +286,7 @@ a focus on simplicity and productivity.")
                (copy-recursively "build/host/lib" lib))
              #t)))))
     (native-inputs
-     `(("ruby" ,ruby)
-       ("bison" ,bison)))
+     (list ruby bison))
     (home-page "https://github.com/mruby/mruby")
     (synopsis "Lightweight Ruby")
     (description "mruby is the lightweight implementation of the Ruby
@@ -321,13 +319,10 @@ embedded within your application.")
                ((".*RuboCop.*") ""))
              #t)))))
     (propagated-inputs
-     `(("ruby-highline" ,ruby-highline)))
+     (list ruby-highline))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec-core" ,ruby-rspec-core)
-       ("ruby-rspec-expectations" ,ruby-rspec-expectations)
-       ("ruby-rspec-mocks" ,ruby-rspec-mocks)
-       ("ruby-simplecov" ,ruby-simplecov)))
+     (list bundler ruby-rspec-core ruby-rspec-expectations
+           ruby-rspec-mocks ruby-simplecov))
     (home-page "https://github.com/commander-rb/commander")
     (synopsis "Library for building Ruby command-line executables")
     (description
@@ -352,8 +347,7 @@ elegant API.")
     (arguments
      `(#:tests? #f)) ;; TODO: NameError: uninitialized constant SPEC
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-code-statistics" ,ruby-code-statistics)))
+     (list bundler ruby-code-statistics))
     (synopsis
      "HighLine helps you build command-line interfaces")
     (description
@@ -444,11 +438,8 @@ packaging native C and Java extensions in Ruby.")
                (("Coveralls.wear!") ""))
              #t)))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("rsync" ,rsync)
-       ("ruby-rspec-core" ,ruby-rspec-core)
-       ("ruby-rspec-expectations" ,ruby-rspec-expectations)
-       ("ruby-rspec-mocks" ,ruby-rspec-mocks)))
+     (list bundler rsync ruby-rspec-core ruby-rspec-expectations
+           ruby-rspec-mocks))
     (home-page "https://github.com/jbussdieker/ruby-rsync")
     (synopsis "Ruby wrapper around rsync")
     (description
@@ -520,15 +511,15 @@ an extensible architecture with a swappable backend.")
                  "/bin/")))
              #t)))))
     (inputs
-     `(("python-ipython" ,python-ipython)))
-    (propagated-inputs
-     `(("ruby-bond" ,ruby-bond)
-       ("ruby-data_uri" ,ruby-data_uri)
-       ("ruby-mimemagic" ,ruby-mimemagic)
-       ("ruby-multi-json" ,ruby-multi-json)
-       ("ruby-cztop" ,ruby-cztop)
-       ;; Optional inputs
-       ("ruby-pry" ,ruby-pry)))
+     (list python-ipython))
+    (propagated-inputs
+     (list ruby-bond
+           ruby-data_uri
+           ruby-mimemagic
+           ruby-multi-json
+           ruby-cztop
+           ;; Optional inputs
+           ruby-pry))
     (synopsis "Ruby kernel for Jupyter/IPython")
     (description
      "This package provides a Ruby kernel for Jupyter/IPython frontends (e.g.
@@ -571,7 +562,7 @@ notebook).")
     (arguments
      '(#:tests? #f)) ; avoid dependency cycles
     (propagated-inputs
-     `(("ruby-rspec-support" ,ruby-rspec-support)))
+     (list ruby-rspec-support))
     (synopsis "RSpec core library")
     (description "Rspec-core provides the RSpec test runner and example
 groups.")
@@ -624,8 +615,7 @@ standard diff-like tool.")
     (arguments
      '(#:tests? #f)) ; avoid dependency cycles
     (propagated-inputs
-     `(("ruby-rspec-support" ,ruby-rspec-support)
-       ("ruby-diff-lcs" ,ruby-diff-lcs)))
+     (list ruby-rspec-support ruby-diff-lcs))
     (synopsis "RSpec expectations library")
     (description "Rspec-expectations provides a simple API to express expected
 outcomes of a code example.")
@@ -642,7 +632,7 @@ outcomes of a code example.")
                (base32
                 "1ni8kw8kjv76jvwjzi4jba00k3qzj9f8wd94vm6inz0jz3gwjqf9"))))
     (propagated-inputs
-     `(("ruby-diff-lcs" ,ruby-diff-lcs)))))
+     (list ruby-diff-lcs))))
 
 (define-public ruby-sorcerer
   (package
@@ -678,7 +668,7 @@ re-sourced, but they will be rendered in a single-line format.")
     (build-system ruby-build-system)
     (arguments '(#:tests? #f))          ;no test suite for the core package
     (propagated-inputs
-     `(("ruby-sorcerer" ,ruby-sorcerer)))
+     (list ruby-sorcerer))
     (synopsis "Core abstractions used by rspec-given and minitest-given")
     (description "Given_core is the basic functionality behind rspec-given and
 minitest-given, extensions that allow the use of Given/When/Then terminology
@@ -723,11 +713,9 @@ when defining specifications.")
              (delete-file "examples/integration/failing_messages_spec.rb")
              #t)))))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)
-       ("ruby-minitest" ,ruby-minitest)))
+     (list ruby-rspec ruby-minitest))
     (propagated-inputs
-     `(("ruby-given-core" ,ruby-given-core)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list ruby-given-core ruby-rspec))
     (synopsis "Given/When/Then for RSpec and Minitest")
     (description "Given is an RSpec extension that allows the use of
 Given/When/Then terminology when defining specifications, in a way similar to
@@ -777,13 +765,9 @@ the Cucumber Gherkin language.")
                (("\"aruba.*") "'aruba'\n"))
              #t)))))
     (propagated-inputs
-     `(("ruby-rspec-core" ,ruby-rspec-core)
-       ("ruby-rspec-expectations" ,ruby-rspec-expectations)))
+     (list ruby-rspec-core ruby-rspec-expectations))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-cucumber" ,ruby-cucumber)
-       ("ruby-ffi" ,ruby-ffi)
-       ("ruby-aruba" ,ruby-aruba)))
+     (list bundler ruby-cucumber ruby-ffi ruby-aruba))
     (synopsis "RSpec extension that provides the @code{its} method")
     (description
      "RSpec::Its provides the its method as a short-hand to specify the expected
@@ -816,8 +800,7 @@ eq(1)\\}}.")
     (arguments
      '(#:tests? #f)) ; avoid dependency cycles
     (propagated-inputs
-     `(("ruby-rspec-support" ,ruby-rspec-support)
-       ("ruby-diff-lcs" ,ruby-diff-lcs)))
+     (list ruby-rspec-support ruby-diff-lcs))
     (synopsis "RSpec stubbing and mocking library")
     (description "Rspec-mocks provides RSpec's \"test double\" framework, with
 support for stubbing and mocking.")
@@ -834,7 +817,7 @@ support for stubbing and mocking.")
                (base32
                 "1fwsmijd6w6cmqyh4ky2nq89jrpzh56hzmndx9wgkmdgfhfakv30"))))
     (propagated-inputs
-     `(("ruby-diff-lcs" ,ruby-diff-lcs)))))
+     (list ruby-diff-lcs))))
 
 (define-public ruby-rspec-rerun
   (package
@@ -851,7 +834,7 @@ support for stubbing and mocking.")
     (arguments
      '(;; No included tests
        #:tests? #f))
-    (propagated-inputs `(("ruby-rspec" ,ruby-rspec)))
+    (propagated-inputs (list ruby-rspec))
     (synopsis "Track failed RSpec tests to re-run them")
     (description
      "This package provides an automated way to track, and then re-run failed
@@ -878,9 +861,9 @@ RSpec tests.")
            (lambda _
              (invoke "rake" "spec"))))))
     (native-inputs
-     `(("bundler" ,bundler)))
+     (list bundler))
     (propagated-inputs
-     `(("ruby-rspec" ,ruby-rspec)))
+     (list ruby-rspec))
     (home-page "https://github.com/laserlemon/rspec-wait")
     (synopsis "Wait for conditions in RSpec")
     (description
@@ -902,9 +885,7 @@ interactions.")
     (arguments
      '(#:tests? #f)) ; avoid dependency cycles
     (propagated-inputs
-     `(("ruby-rspec-core" ,ruby-rspec-core)
-       ("ruby-rspec-mocks" ,ruby-rspec-mocks)
-       ("ruby-rspec-expectations" ,ruby-rspec-expectations)))
+     (list ruby-rspec-core ruby-rspec-mocks ruby-rspec-expectations))
     (synopsis "Behavior-driven development framework for Ruby")
     (description "RSpec is a behavior-driven development (BDD) framework for
 Ruby.  This meta-package includes the RSpec test runner, along with the
@@ -922,9 +903,7 @@ expectations and mocks frameworks.")
                (base32
                 "134y4wzk1prninb5a0bhxgm30kqfzl8dg06af4js5ylnhv2wd7sg"))))
     (propagated-inputs
-     `(("ruby-rspec-core" ,ruby-rspec-core-2)
-       ("ruby-rspec-mocks" ,ruby-rspec-mocks-2)
-       ("ruby-rspec-expectations" ,ruby-rspec-expectations-2)))))
+     (list ruby-rspec-core-2 ruby-rspec-mocks-2 ruby-rspec-expectations-2))))
 
 ;; Bundler is yet another source of circular dependencies, so we must disable
 ;; its test suite as well.
@@ -1060,9 +1039,9 @@ configuration, and more.")
     ;; Test data required for most of the tests are not included.
     (arguments `(#:tests? #f))
     (native-inputs
-     `(("ruby-hoe" ,ruby-hoe)))
+     (list ruby-hoe))
     (inputs
-     `(("ruby-rjb" ,ruby-rjb)))
+     (list ruby-rjb))
     (synopsis "Ruby wrapper for the Ant build tool")
     (description "Antwrap is a Ruby module that wraps the Apache Ant build
 tool.  Antwrap can be used to invoke Ant tasks from a Ruby or a JRuby
@@ -1123,9 +1102,7 @@ line of code.")
                          "spec/objects_spec.rb"))
              (invoke "rspec" "-c" "spec"))))))
     (native-inputs
-     `(("ruby-nokogiri" ,ruby-nokogiri)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-simplecov" ,ruby-simplecov)))
+     (list ruby-nokogiri ruby-rspec ruby-simplecov))
     (synopsis "Pretty print Ruby objects to visualize their structure")
     (description
      "Ruby dubugging companion: pretty print Ruby objects to visualize their
@@ -1149,22 +1126,13 @@ structure.  Supports custom object formatting via plugins.")
          "03a11clhycyn0jhc7g9davpqd83sn60jqwjy1y145ag9sq6sp935"))))
     (build-system ruby-build-system)
     (arguments
-     `(#:phases
+     `(#:tests? #f ; Disable tests since they depend on pandoc behavior
+                   ; and there are no upstream releases.
+       #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'disable-failing-tests
-           ;; TODO: Remove this phase after ghc-pandoc gets upgraded to 2.9.2+
-           ;; (see: https://github.com/xwmx/pandoc-ruby/issues/39).
-           (lambda _
-             (substitute* "test/test_conversions.rb"
-               (("next if from == to.*" all)
-                (string-append
-                 all
-                 "      next if ['plain', 'beamer'].include? to\n")))
-             #t))
          (add-after 'unpack 'patch-pandoc-path
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((pandoc (string-append (assoc-ref inputs "pandoc")
-                                          "/bin/pandoc")))
+             (let ((pandoc (search-input-file inputs "/bin/pandoc")))
                (substitute* "lib/pandoc-ruby.rb"
                  (("@@pandoc_path = 'pandoc'")
                   (format #f "@@pandoc_path = '~a'" pandoc)))
@@ -1172,18 +1140,22 @@ structure.  Supports custom object formatting via plugins.")
                  (("('|\")pandoc" _ quote)
                   (string-append quote pandoc))
                  (("\\^pandoc")
-                  ".*pandoc"))
-               #t)))
+                  ".*pandoc")))))
+         (add-after 'unpack 'adjust-tests
+           ;; The tests expect filenames with spaces.  Because they don't have
+           ;; spaces the quotes around the output are dropped automatically.
+           (lambda _
+             (substitute* "test/test_pandoc_ruby.rb"
+               (("\\\\\"#\\{file\\.path\\}\\\\\"") "#{file.path}"))))
          (add-after 'extract-gemspec 'remove-Gemfile.lock
            (lambda _
              (delete-file "Gemfile.lock")
              (substitute* "pandoc-ruby.gemspec"
-               (("Gemfile\\.lock") ""))
-             #t)))))
+               (("Gemfile\\.lock") "")))))))
     (native-inputs
-     `(("ruby-mocha" ,ruby-mocha)))
+     (list ruby-mocha))
     (inputs
-     `(("pandoc" ,pandoc)))
+     (list pandoc))
     (synopsis "Ruby wrapper for Pandoc")
     (description "PandocRuby is a wrapper for Pandoc, a Haskell library with
 command line tools for converting one markup format to another.  Pandoc can
@@ -1209,7 +1181,7 @@ more.")
          "0523gddx88zql2mq6655k60gy2ac8vybpzkcf90lmd9nx7wl3fi9"))))
     (build-system ruby-build-system)
     (inputs
-     `(("curl" ,curl)))
+     (list curl))
     (arguments
      `(#:tests? #f))                    ; no included tests
     (synopsis "Ruby HTTP client library based on @code{libcurl}")
@@ -1256,11 +1228,9 @@ under the hood.")
                (("Bundler::GemHelper\\.install_tasks") "nil"))
              #t)))))
     (native-inputs
-     `(("ruby-rack-test" ,ruby-rack-test)
-       ("ruby-sinatra" ,ruby-sinatra)))
+     (list ruby-rack-test ruby-sinatra))
     (propagated-inputs
-     `(("ruby-temple" ,ruby-temple)
-       ("ruby-tilt" ,ruby-tilt)))
+     (list ruby-temple ruby-tilt))
     (synopsis "Minimalist template language for Ruby")
     (description "Slim is a template language for Ruby that aims to reduce the
 syntax to the minimum while remaining clear.")
@@ -1270,7 +1240,7 @@ syntax to the minimum while remaining clear.")
 (define-public ruby-asciidoctor
   (package
     (name "ruby-asciidoctor")
-    (version "2.0.10")
+    (version "2.0.16")
     (source
      (origin
        (method git-fetch)               ;the gem release lacks a Rakefile
@@ -1280,20 +1250,12 @@ syntax to the minimum while remaining clear.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0jaxpnsdnx3qyjw5p2lsx1swny12q1i2vxw2kgdp4vlsyjv95z95"))))
+         "086i17v9rxx0sxac26xp8c5v75jqba6rqjlk57x94qjvrh8vzyw2"))))
     (build-system ruby-build-system)
     (arguments
      `(#:test-target "test:all"
        #:phases
        (modify-phases %standard-phases
-         (replace 'replace-git-ls-files
-           (lambda _
-             ;; TODO: Remove after the fix of using 'cut' to better mimic the
-             ;; git ls-files output is merged in ruby-build-system.
-             (substitute* "asciidoctor.gemspec"
-               (("`git ls-files -z`")
-                "`find . -type f -print0 |sort -z|cut -zc3-`"))
-             #t))
          (add-after 'extract-gemspec 'strip-version-requirements
            (lambda _
              (delete-file "Gemfile")
@@ -1302,18 +1264,19 @@ syntax to the minimum while remaining clear.")
                 (string-append stripped "\n")))
              #t)))))
     (native-inputs
-     `(("ruby-erubis" ,ruby-erubis)
-       ("ruby-minitest" ,ruby-minitest)
-       ("ruby-nokogiri" ,ruby-nokogiri)
-       ("ruby-asciimath" ,ruby-asciimath)
-       ("ruby-coderay" ,ruby-coderay)
-       ("ruby-cucumber" ,ruby-cucumber)
-       ("ruby-haml" ,ruby-haml)
-       ("ruby-rouge" ,ruby-rouge)
-       ("ruby-rspec-expectations" ,ruby-rspec-expectations)
-       ("ruby-simplecov" ,ruby-simplecov)
-       ("ruby-slim" ,ruby-slim)
-       ("ruby-tilt" ,ruby-tilt)))
+     (list ruby-erubi
+           ruby-erubis
+           ruby-minitest
+           ruby-nokogiri
+           ruby-asciimath
+           ruby-coderay
+           ruby-cucumber
+           ruby-haml
+           ruby-rouge
+           ruby-rspec-expectations
+           ruby-simplecov
+           ruby-slim
+           ruby-tilt))
     (synopsis "Converter from AsciiDoc content to other formats")
     (description "Asciidoctor is a text processor and publishing toolchain for
 converting AsciiDoc content to HTML5, DocBook 5 (or 4.5), PDF, and other
@@ -1344,12 +1307,9 @@ formats.")
                         (("^RuboCop.*") ""))
                       #t)))))
     (native-inputs
-     `(("ruby-pdf-inspector" ,ruby-pdf-inspector)
-       ("ruby-pdf-reader" ,ruby-pdf-reader)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-simplecov" ,ruby-simplecov)))
+     (list ruby-pdf-inspector ruby-pdf-reader ruby-rspec ruby-simplecov))
     (propagated-inputs
-     `(("ruby-prawn" ,ruby-prawn)))
+     (list ruby-prawn))
     (synopsis "Icon fonts for use with the Prawn PDF toolkit")
     (description "@code{Prawn::Icon} provides various icon fonts including
 FontAwesome, PaymentFont and Foundation Icons for use with the Prawn PDF
@@ -1371,7 +1331,7 @@ toolkit.")
     (build-system ruby-build-system)
     (arguments `(#:tests? #f))          ;gem doesn't ship with test suite
     (propagated-inputs
-     `(("ruby-addressable" ,ruby-addressable)))
+     (list ruby-addressable))
     (synopsis "Ruby Cascading Style Sheets (CSS) parser")
     (description "This package allows loading, parsing and cascading Cascading
 Style Sheets (CSS) rule sets in Ruby.")
@@ -1403,10 +1363,9 @@ Style Sheets (CSS) rule sets in Ruby.")
                         (invoke "rspec" "-Ilib" "-rprawn-svg"))
                       #t)))))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)))
+     (list ruby-rspec))
     (propagated-inputs
-     `(("ruby-css-parser" ,ruby-css-parser)
-       ("ruby-prawn" ,ruby-prawn)))
+     (list ruby-css-parser ruby-prawn))
     (synopsis "SVG renderer for the Prawn PDF library")
     (description "This library allows rendering Scalable Vector Graphics (SVG)
 graphics directly into a Portable Document Format (PDF) document using the
@@ -1442,11 +1401,9 @@ Prawn module.")
                         (invoke "rspec"))
                       #t)))))
     (native-inputs
-     `(("ruby-pdf-inspector" ,ruby-pdf-inspector)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list ruby-pdf-inspector ruby-rspec))
     (propagated-inputs
-     `(("ruby-pdf-reader" ,ruby-pdf-reader)
-       ("ruby-prawn" ,ruby-prawn)))
+     (list ruby-pdf-reader ruby-prawn))
     (synopsis "Prawn extension to include or combine PDF documents")
     (description "This @strong{unmaintained} package provides a Prawn
 extension that allows including other Portable Document Format (PDF) documents
@@ -1492,23 +1449,11 @@ loader for the file type associated with a filename extension, and it augments
          "1dmk94z6ivhrz5hsq68vl5vgydhkz89n394rha1ymddw3rymbfcv"))))
     (build-system ruby-build-system)
     (arguments
-     `(#:test-target "spec"
-       #:phases
-       (modify-phases %standard-phases
-         (replace 'replace-git-ls-files
-           (lambda _
-             ;; TODO: Remove after the fix of using 'cut' to better mimic the
-             ;; git ls-files output is merged in ruby-build-system.
-             (substitute* "treetop.gemspec"
-               (("`git ls-files -z`")
-                "`find . -type f -print0 |sort -z|cut -zc3-`"))
-             #t)))))
+     `(#:test-target "spec"))
     (native-inputs
-     `(("ruby-activesupport" ,ruby-activesupport)
-       ("ruby-rr" ,ruby-rr)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list ruby-activesupport ruby-rr ruby-rspec))
     (propagated-inputs
-     `(("ruby-polyglot" ,ruby-polyglot)))
+     (list ruby-polyglot))
     (synopsis "Ruby-based parsing DSL based on parsing expression grammars")
     (description "This package provides a Ruby-based Parsing Expression
 Grammar (PEG) parser generator Domain Specific Language (DSL).")
@@ -1530,7 +1475,7 @@ Grammar (PEG) parser generator Domain Specific Language (DSL).")
     (arguments
      `(#:tests? #f))                    ; no included tests
     (propagated-inputs
-     `(("ruby-ethon" ,ruby-ethon)))
+     (list ruby-ethon))
     (synopsis "@code{libcurl} wrapper in Ruby")
     (description
      "Like a modern code version of the mythical beast with 100 serpent heads,
@@ -1563,14 +1508,10 @@ logic.")
              (setenv "HOME" "/tmp")
              #t)))))
     (propagated-inputs
-     `(("ruby-rubocop" ,ruby-rubocop)
-       ("ruby-rubocop-ast" ,ruby-rubocop-ast)))
+     (list ruby-rubocop ruby-rubocop-ast))
     (native-inputs
-     `(("ruby-rack" ,ruby-rack)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-rubocop-performance" ,ruby-rubocop-performance)
-       ("ruby-simplecov" ,ruby-simplecov)
-       ("ruby-yard" ,ruby-yard)))
+     (list ruby-rack ruby-rspec ruby-rubocop-performance ruby-simplecov
+           ruby-yard))
     (synopsis "Code style checking for RSpec files")
     (description "This package provides a plugin for the RuboCop code style
 enforcing & linting tool.")
@@ -1617,11 +1558,9 @@ enforcing & linting tool.")
              (setenv "HOME" "/tmp")
              #t)))))
     (propagated-inputs
-     `(("ruby-rubocop" ,ruby-rubocop)
-       ("ruby-rubocop-ast" ,ruby-rubocop-ast)))
+     (list ruby-rubocop ruby-rubocop-ast))
     (native-inputs
-     `(("ruby-bump" ,ruby-bump)
-       ("ruby-yard" ,ruby-yard)))
+     (list ruby-bump ruby-yard))
     (synopsis "Performance optimizations checkers for Ruby code")
     (description "This package provides a collection of RuboCop cops to check
 for performance optimizations in Ruby code.")
@@ -1656,11 +1595,8 @@ for performance optimizations in Ruby code.")
            "0hrd32ygvf3i7h47ak8f623cz8ns9q7g60nnnvvlnywbggjaz3h6"))))
       (build-system ruby-build-system)
       (native-inputs
-       `(("ruby-coveralls" ,ruby-coveralls)
-         ("ruby-cucumber" ,ruby-cucumber)
-         ("ruby-pry" ,ruby-pry)
-         ("ruby-simplecov" ,ruby-simplecov)
-         ("ruby-rspec-given" ,ruby-rspec-given)))
+       (list ruby-coveralls ruby-cucumber ruby-pry ruby-simplecov
+             ruby-rspec-given))
       (arguments
        `(;; The cucumber task fails with error: "index 3 out of matches
          ;; (IndexError)", apparently due to our newer Cucumber version.
@@ -1725,23 +1661,11 @@ only what they care about.")
            (lambda _
              (delete-file "Gemfile")
              (delete-file "Gemfile.lock")
-             #t))
-         (replace 'replace-git-ls-files
-           (lambda _
-             ;; TODO: Remove after the fix of using 'cut' to better mimic the
-             ;; git ls-files output is merged in ruby-build-system.
-             (substitute* "standard.gemspec"
-               (("`git ls-files -z`")
-                "`find . -type f -not -regex '.*\\.gem$' -print0 \
-|sort -z|cut -zc3-`"))
              #t)))))
     (native-inputs
-     `(("ruby-gimme" ,ruby-gimme)
-       ("ruby-pry" ,ruby-pry)
-       ("ruby-simplecov" ,ruby-simplecov)))
+     (list ruby-gimme ruby-pry ruby-simplecov))
     (propagated-inputs
-     `(("ruby-rubocop" ,ruby-rubocop)
-       ("ruby-rubocop-performance" ,ruby-rubocop-performance)))
+     (list ruby-rubocop ruby-rubocop-performance))
     (synopsis "Ruby Style Guide, with linter & automatic code fixer")
     (description "Standard is a port of StandardJS.  Like StandardJS, it aims
 to save time in the following ways:
@@ -1775,20 +1699,9 @@ to save time in the following ways:
            (lambda _
              (substitute* (find-files "." "\\.rb$")
                (("require.*bundler/setup.*") ""))
-             #t))
-         (replace 'replace-git-ls-files
-           (lambda _
-             ;; TODO: Remove after the fix of using 'cut' to better mimic the
-             ;; git ls-files output is merged in ruby-build-system.
-             (substitute* "chunky_png.gemspec"
-               (("`git ls-files`")
-                "`find . -type f -not -regex '.*\\.gem$' |sort |cut -c3-`"))
              #t)))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-standard" ,ruby-standard)
-       ("ruby-yard" ,ruby-yard)))
+     (list bundler ruby-rspec ruby-standard ruby-yard))
     (synopsis "Ruby library to handle PNG images")
     (description "ChunkyPNG is a pure Ruby library that can read and write
 Portable Network Graphics (PNG) images without depending on an external image
@@ -1834,7 +1747,7 @@ or a background processing library.")
             "1gj4awvs9ryf960m0iawg43jyjmfwcqgfwrbcfp890a57b9ag7q1"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-hoe" ,ruby-hoe)))
+     (list ruby-hoe))
     (synopsis "Ruby library to hyphenate words in various languages")
     (description "Text::Hyphen is a Ruby library to hyphenate words in various
 languages using Ruby-fied versions of TeX hyphenation patterns.  It will
@@ -1868,85 +1781,66 @@ web pages.")
     (license license:expat)))
 
 (define-public ruby-asciidoctor-pdf
-  ;; Use the latest commit, as the last tag doesn't build with the
-  ;; latest Ruby dependencies in Guix.
-  (let ((revision "1")
-        (commit "d257440df895d1595a3825ef58b32e4b290ba1c3"))
-    (package
-      (name "ruby-asciidoctor-pdf")
-      (version (git-version "1.5.3" revision commit))
-      (source
-       (origin
-         (method git-fetch)      ;no test suite in the distributed gem
-         (uri (git-reference
-               (url "https://github.com/asciidoctor/asciidoctor-pdf")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32
-           "1563d11ghzsrsg4inwfwj6b9hb5sk5b429f49fwq5qg3sq76kgjj"))))
-      (build-system ruby-build-system)
-      (arguments
-       `(#:test-target "spec"
-         #:phases
-         (modify-phases %standard-phases
-           (add-after 'unpack 'remove-failing-tests
-             ;; Two tests module fail for unknown reasons, *only* when
-             ;; ran in the build container (see:
-             ;; https://github.com/asciidoctor/asciidoctor-pdf/issues/1725#issuecomment-658777965).
-             (lambda _
-               (delete-file "spec/audio_spec.rb")
-               (delete-file "spec/video_spec.rb")
-               #t))
-           (add-after 'extract-gemspec 'strip-version-requirements
-             (lambda _
-               (substitute* "asciidoctor-pdf.gemspec"
-                 (("(.*add_.*dependency '[_A-Za-z0-9-]+').*" _ stripped)
-                  (string-append stripped "\n")))
-               #t))
-           (replace 'replace-git-ls-files
-             ;; TODO: Remove after the fix of using 'cut' to better mimic the
-             ;; git ls-files output is merged in ruby-build-system.
-             (lambda _
-               (substitute* "asciidoctor-pdf.gemspec"
-                 (("`git ls-files -z`")
-                  "`find . -type f -not -regex '.*\\.gem$' -print0 \
-|sort -z|cut -zc3-`"))
-               #t))
-           ;; The tests rely on the Gem being installed, so move the check phase
-           ;; after the install phase.
-           (delete 'check)
-           (add-after 'install 'check
-             (lambda* (#:key outputs tests? #:allow-other-keys)
-               (let ((new-gem (string-append (assoc-ref outputs "out")
-                                             "/lib/ruby/vendor_ruby")))
-                 (setenv "GEM_PATH"
-                         (string-append (getenv "GEM_PATH") ":" new-gem))
-                 (when tests?
-                   (invoke "rspec" "-t" "~visual" "-t" "~cli" "-t" "~network"))
-                 #t))))))
-      (native-inputs
-       `(("ruby-chunky-png" ,ruby-chunky-png)
-         ("ruby-coderay" ,ruby-coderay)
-         ("ruby-pdf-inspector" ,ruby-pdf-inspector)
-         ("ruby-rouge" ,ruby-rouge)
-         ("ruby-rspec" ,ruby-rspec)))
-      (propagated-inputs
-       `(("ruby-asciidoctor" ,ruby-asciidoctor)
-         ("ruby-concurrent-ruby" ,ruby-concurrent)
-         ("ruby-open-uri-cached" ,ruby-open-uri-cached)
-         ("ruby-prawn" ,ruby-prawn)
-         ("ruby-prawn-icon" ,ruby-prawn-icon)
-         ("ruby-prawn-svg" ,ruby-prawn-svg)
-         ("ruby-prawn-table" ,ruby-prawn-table)
-         ("ruby-prawn-templates" ,ruby-prawn-templates)
-         ("ruby-safe-yaml" ,ruby-safe-yaml)
-         ("ruby-text-hyphen" ,ruby-text-hyphen)
-         ("ruby-thread-safe" ,ruby-thread-safe)
-         ("ruby-treetop" ,ruby-treetop)
-         ("ruby-ttfunk" ,ruby-ttfunk)))
-      (synopsis"AsciiDoc to Portable Document Format (PDF)} converter")
-      (description "Asciidoctor PDF is an extension for Asciidoctor that
+  (package
+    (name "ruby-asciidoctor-pdf")
+    (version "1.6.1")
+    (source
+     (origin
+       (method git-fetch)               ;no test suite in the distributed gem
+       (uri (git-reference
+             (url "https://github.com/asciidoctor/asciidoctor-pdf")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1iyfy6n9d3rkyrfjmnnfb44c76mq1larmkv1x8n6p5nbm33wb9sf"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:test-target "spec"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'remove-failing-tests
+           ;; Two tests module fail for unknown reasons, *only* when
+           ;; ran in the build container (see:
+           ;; https://github.com/asciidoctor/asciidoctor-pdf/issues/1725#issuecomment-658777965).
+           (lambda _
+             (delete-file "spec/audio_spec.rb")
+             (delete-file "spec/video_spec.rb")))
+         (add-after 'extract-gemspec 'strip-version-requirements
+           (lambda _
+             (substitute* "asciidoctor-pdf.gemspec"
+               (("(.*add_.*dependency '[_A-Za-z0-9-]+').*" _ stripped)
+                (string-append stripped "\n")))))
+         ;; The tests rely on the Gem being installed, so move the check phase
+         ;; after the install phase.
+         (delete 'check)
+         (add-after 'install 'check
+           (lambda* (#:key outputs tests? #:allow-other-keys)
+             (let ((new-gem (string-append (assoc-ref outputs "out")
+                                           "/lib/ruby/vendor_ruby")))
+               (setenv "GEM_PATH"
+                       (string-append (getenv "GEM_PATH") ":" new-gem))
+               (when tests?
+                 (invoke "rspec" "-t" "~visual" "-t" "~cli" "-t" "~network"))))))))
+    (native-inputs
+     (list ruby-chunky-png ruby-coderay ruby-pdf-inspector ruby-rouge
+           ruby-rspec))
+    (propagated-inputs
+     `(("ruby-asciidoctor" ,ruby-asciidoctor)
+       ("ruby-concurrent-ruby" ,ruby-concurrent)
+       ("ruby-open-uri-cached" ,ruby-open-uri-cached)
+       ("ruby-prawn" ,ruby-prawn)
+       ("ruby-prawn-icon" ,ruby-prawn-icon)
+       ("ruby-prawn-svg" ,ruby-prawn-svg)
+       ("ruby-prawn-table" ,ruby-prawn-table)
+       ("ruby-prawn-templates" ,ruby-prawn-templates)
+       ("ruby-safe-yaml" ,ruby-safe-yaml)
+       ("ruby-text-hyphen" ,ruby-text-hyphen)
+       ("ruby-thread-safe" ,ruby-thread-safe)
+       ("ruby-treetop" ,ruby-treetop)
+       ("ruby-ttfunk" ,ruby-ttfunk)))
+    (synopsis"AsciiDoc to Portable Document Format (PDF)} converter")
+    (description "Asciidoctor PDF is an extension for Asciidoctor that
 converts AsciiDoc documents to Portable Document Format (PDF) using the Prawn
 PDF library.  It has features such as:
 @itemize
@@ -1969,13 +1863,13 @@ PDF library.  It has features such as:
 @item Custom TrueType (TTF) fonts
 @item Double-sided printing mode (margins alternate on recto and verso pages)
 @end itemize")
-      (home-page "https://asciidoctor.org/docs/asciidoctor-pdf")
-      (license license:expat))))
+    (home-page "https://asciidoctor.org/docs/asciidoctor-pdf")
+    (license license:expat)))
 
 (define-public ruby-ast
   (package
     (name "ruby-ast")
-    (version "2.4.1")
+    (version "2.4.2")
     (source
      (origin
        (method git-fetch)               ;no test included in gem from v2.4.1
@@ -1985,7 +1879,7 @@ PDF library.  It has features such as:
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0k8vya256chimy473g818gim06m5rjgh6mz5sc5g8xz3csh3rysi"))))
+         "0vm94yml8rknr7z034vg6s3fpx6lml2prz9fn3hr67cx0143bb4h"))))
     (build-system ruby-build-system)
     (arguments
      '(#:phases
@@ -1997,24 +1891,25 @@ PDF library.  It has features such as:
                (("Coveralls::SimpleCov::Formatter") ""))
              #t))
          (add-after 'extract-gemspec 'remove-unnecessary-requirements
-           (lambda _
+           (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "ast.gemspec"
                ((".*coveralls.*") "\n")
                (("%q<rest-client>.*") "%q<rest-client>.freeze, [\">= 0\"])\n")
                (("%q<mime-types>.*") "%q<mime-types>.freeze, [\">= 0\"])\n")
-               (("%q<rake>.*") "%q<rake>.freeze, [\">= 0\"])\n"))
+               (("%q<rake>.*") "%q<rake>.freeze, [\">= 0\"])\n")
+               (("12\\.3") "13.0"))
              #t)))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-simplecov" ,ruby-simplecov)
-       ("ruby-json-pure" ,ruby-json-pure)
-       ("ruby-mime-times" ,ruby-mime-types)
-       ("ruby-yard" ,ruby-yard)
-       ("ruby-kramdown" ,ruby-kramdown)
-       ("ruby-rest-client" ,ruby-rest-client)
-       ("ruby-bacon" ,ruby-bacon)
-       ("ruby-bacon-colored-output" ,ruby-bacon-colored-output)
-       ("ruby-racc" ,ruby-racc)))
+     (list bundler
+           ruby-bacon
+           ruby-bacon-colored-output
+           ruby-json-pure
+           ruby-kramdown
+           ruby-mime-types
+           ruby-racc
+           ruby-rest-client
+           ruby-simplecov
+           ruby-yard))
     (synopsis "Library for working with Abstract Syntax Trees")
     (description
      "@code{ast} is a Ruby library for working with Abstract Syntax Trees.
@@ -2044,7 +1939,7 @@ It does this through immutable data structures.")
        ;; Tests currently fail so disable them.
        ;; https://github.com/sporkmonger/rack-mount/pull/1
        `(#:tests? #f))
-      (propagated-inputs `(("ruby-rack" ,ruby-rack)))
+      (propagated-inputs (list ruby-rack))
       (synopsis "Stackable dynamic tree based Rack router")
       (description
        "@code{Rack::Mount} supports Rack's @code{X-Cascade} convention to
@@ -2067,10 +1962,9 @@ routes to be nested or stacked on top of each other.")
     (arguments
      `(#:test-target "rspec"))
     (propagated-inputs
-     `(("ruby-builder" ,ruby-builder)))
+     (list ruby-builder))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list bundler ruby-rspec))
     (synopsis "Generate XML reports of runs test")
     (description
      "@code{CI::Reporter} is an add-on to Ruby testing frameworks that allows
@@ -2105,7 +1999,7 @@ format.")
               ((".*RuboCop.*") ""))
             #t)))))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)))
+     (list ruby-rspec))
     (synopsis "Method contracts for Ruby")
     (description
      "This library provides contracts for Ruby.  A contract describes the
@@ -2137,8 +2031,6 @@ value is found.")
                            (invoke "ruby" "-Ilib" "-Itest" "-rrubygems" file))
                          (find-files "test" ".*rb$")))
              #t)))))
-    (propagated-inputs
-     `(("ruby-rexml" ,ruby-rexml)))
     (synopsis "Simple JSON and XML parsing for Ruby")
     (description
      "@code{crack} provides really simple JSON and XML parsing, extracted from
@@ -2171,8 +2063,7 @@ code in Merb and Rails.")
                (invoke "rspec"))
              #t)))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec-2)))
+     (list bundler ruby-rspec-2))
     (synopsis "Assertions for command-line dependencies in Ruby")
     (description
      "@code{cliver} provides a way to detect missing command-line
@@ -2209,9 +2100,8 @@ dependencies, including versions.")
                                (assoc-ref inputs "zeromq") "/lib"
                                "']"))))))))
     (inputs
-     `(("zeromq" ,zeromq)
-       ("czmq" ,czmq)))
-    (propagated-inputs `(("ruby-ffi" ,ruby-ffi)))
+     (list zeromq czmq))
+    (propagated-inputs (list ruby-ffi))
     (synopsis "Low-level Ruby bindings for CZMQ (generated using zproject)")
     (description
      "These Ruby bindings are not intended to be directly used, but rather
@@ -2244,12 +2134,11 @@ used by higher level bindings like those provided by CZTop.")
                                (assoc-ref inputs "zeromq") "/lib"
                                "']"))))))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list bundler ruby-rspec))
     (inputs
-     `(("zeromq" ,zeromq)))
+     (list zeromq))
     (propagated-inputs
-     `(("ruby-czmq-ffi-gen" ,ruby-czmq-ffi-gen)))
+     (list ruby-czmq-ffi-gen))
     (synopsis "CZMQ Ruby bindings")
     (description
      "CZMQ Ruby bindings, based on the generated low-level FFI bindings of
@@ -2274,8 +2163,7 @@ support for security mechanisms.")
     ;; of the involved libraries.
     (arguments `(#:tests? #f))
     (propagated-inputs
-     `(("ruby-json-pure" ,ruby-json-pure)
-       ("ruby-atoulme-saikuro" ,ruby-atoulme-saikuro)))
+     (list ruby-json-pure ruby-atoulme-saikuro))
     (synopsis "Generate complexity treemap based on saikuro analysis")
     (description
      "This gem generates a treemap showing the complexity of Ruby code on
@@ -2298,11 +2186,8 @@ complexity.")
     (arguments
      '(#:tests? #f))                    ; no included tests
     (propagated-inputs
-     `(("ruby-faraday" ,ruby-faraday)
-       ("ruby-jwt" ,ruby-jwt)
-       ("ruby-multi-json" ,ruby-multi-json)
-       ("ruby-multi-xml" ,ruby-multi-xml)
-       ("ruby-rack" ,ruby-rack)))
+     (list ruby-faraday ruby-jwt ruby-multi-json ruby-multi-xml
+           ruby-rack))
     (synopsis "Ruby wrapper for the OAuth 2.0")
     (description
      "This package provides a Ruby wrapper for the OAuth 2.0 protocol built
@@ -2322,11 +2207,9 @@ with a similar style to the original OAuth spec.")
         (base32 "105mzgvmn2kjaacxw01h4wqv33r7hfn5z8fxlkk3jcjar14j71bh"))))
     (build-system ruby-build-system)
     (propagated-inputs
-     `(("ruby-hashie" ,ruby-hashie)
-       ("ruby-rack" ,ruby-rack)
-       ("ruby-rack-protection" ,ruby-rack-protection)))
+     (list ruby-hashie ruby-rack ruby-rack-protection))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)))
+     (list ruby-rspec))
     (synopsis "Generalized Rack framework for multiple-provider authentication")
     (description
      "This package provides a generalized Rack framework for multiple-provider
@@ -2360,14 +2243,9 @@ authentication.")
                (("Coveralls::SimpleCov::Formatter") ""))
              #t)))))
     (propagated-inputs
-     `(("ruby-oauth2" ,ruby-oauth2)
-       ("ruby-omniauth" ,ruby-omniauth)))
+     (list ruby-oauth2 ruby-omniauth))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-simplecov" ,ruby-simplecov)
-       ("ruby-rack-test" ,ruby-rack-test)
-       ("ruby-webmock" ,ruby-webmock)))
+     (list bundler ruby-rspec ruby-simplecov ruby-rack-test ruby-webmock))
     (synopsis "Abstract OAuth2 strategy for OmniAuth")
     (description
      "This library provides a generic OAuth2 strategy for OmniAuth.  It
@@ -2496,9 +2374,9 @@ support.")
     (arguments
      `(#:tests? #f))                    ; no included tests
     (inputs
-     `(("curl" ,curl)))
+     (list curl))
     (propagated-inputs
-     `(("ruby-ffi" ,ruby-ffi)))
+     (list ruby-ffi))
     (synopsis "Very lightweight @code{libcurl} wrapper")
     (description
      "Ethon is a very basic @code{libcurl} wrapper using ffi.")
@@ -2522,14 +2400,14 @@ support.")
          "0c0vd2mmqq3ar4plbwi2wsbr31vn4h45i19r5km66skydnnbp1y6"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("bundler" ,bundler)
-       ;; The test suite tests all the available backends. Currenly, this just
-       ;; means the node backend.
-       ;;
-       ;; PASSED: test:node
-       ;; SKIPPED: test:duktape, ;; test:javascriptcore, test:jscript,
-       ;; test:miniracer, test:rubyracer, ;; test:rubyrhino, test:v8
-       ("node" ,node)))
+     (list bundler
+           ;; The test suite tests all the available backends. Currenly, this just
+           ;; means the node backend.
+           ;;
+           ;; PASSED: test:node
+           ;; SKIPPED: test:duktape, ;; test:javascriptcore, test:jscript,
+           ;; test:miniracer, test:rubyracer, ;; test:rubyrhino, test:v8
+           node))
     (synopsis "Run JavaScript code from Ruby")
     (description
      "ExecJS lets you run JavaScript code from Ruby.  It automatically picks a
@@ -2570,10 +2448,7 @@ a Ruby object.")
                          (string-append dep "\n")))
                       #t)))))
     (native-inputs
-     `(("ruby-bump" ,ruby-bump)
-       ("ruby-maxitest" ,ruby-maxitest)
-       ("ruby-rubocop" ,ruby-rubocop)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list ruby-bump ruby-maxitest ruby-rubocop ruby-rspec))
     (synopsis "Fake file system for Ruby")
     (description
      "This package provides a fake file system for use in test suites.  It
@@ -2614,8 +2489,7 @@ extensions.")
          "0xy8wmjwjcnv36zi042678ncjzpxvy351ccbv7mzkns2n3kxfp54"))))
     (build-system ruby-build-system)
     (inputs
-     `(("zlib" ,zlib)
-       ("libxml2" ,libxml2)))
+     (list zlib libxml2))
     (arguments
      '(#:tests? #f ; test suite hangs for unknown reason
        #:gem-flags
@@ -2646,8 +2520,7 @@ the GNOME Libxml2 XML toolkit.")
     (arguments
      '(#:tests? #f)) ; No included tests
     (propagated-inputs
-     `(("ruby-hamster" ,ruby-hamster)
-       ("ruby-open4" ,ruby-open4)))
+     (list ruby-hamster ruby-open4))
     (synopsis "Build and execute commands in Ruby")
     (description
      "@code{Lino} provides an interface to run external commands.  It provides
@@ -2740,8 +2613,7 @@ Ruby.")
                     (lambda _
                       (invoke "rspec" "spec"))))))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)
-       ("ruby-simplecov" ,ruby-simplecov)))
+     (list ruby-rspec ruby-simplecov))
     (synopsis "Ruby toolkit for building command-line interfaces")
     (description "Thor is a toolkit for building powerful command-line
 interfaces.")
@@ -2760,8 +2632,7 @@ interfaces.")
                 "06im7gcg42x77yhz2w5da2ly9xz0n0c36y5ks7xs53v0l9g0vf5n"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)
-       ("ruby-timecop" ,ruby-timecop)))
+     (list ruby-rspec ruby-timecop))
     (synopsis "Logging utility library for Ruby")
     (description "Lumberjack is a simple logging utility that can be a drop in
 replacement for Logger or ActiveSupport::BufferedLogger.  It provides support
@@ -2813,12 +2684,11 @@ same log file.")
                (invoke "rspec"))
              #t)))))
     (propagated-inputs
-     `(("ruby-ffi" ,ruby-ffi)))
+     (list ruby-ffi))
     (inputs
-     `(("libsodium" ,libsodium)))
+     (list libsodium))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list bundler ruby-rspec))
     (synopsis "Ruby FFI binding to libsodium")
     (description
      "This package provides Ruby FFI bindings to the Networking and
@@ -2845,7 +2715,7 @@ high-level toolkit for building cryptographic systems and protocols.")
     (arguments
      `(#:test-target "default"))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)))
+     (list ruby-rspec))
     (synopsis "HMAC-based Key Derivation Function")
     (description
      "This package provides a Ruby implementation of RFC5869: @acronym{HKDF,
@@ -2868,8 +2738,7 @@ take some source key material and generate suitable cryptographic keys from it."
     (arguments
      `(#:tests? #f)) ; no tests included
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)
-       ("bundler" ,bundler)))
+     (list ruby-rspec bundler))
     (synopsis "Ruby interface for modifying the environment")
     (description "Nenv provides a convenient wrapper for Ruby's ENV to modify
 and inspect the environment.")
@@ -2962,9 +2831,7 @@ operations with permutations of sequences, such as strings and arrays.")
               (("^RSpec") "require \"shellany\"\nRSpec"))
             #t)))))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)
-       ("ruby-nenv" ,ruby-nenv)
-       ("bundler" ,bundler)))
+     (list ruby-rspec ruby-nenv bundler))
     (synopsis "Capture command output")
     (description "Shellany is a Ruby library providing functions to capture
 the output produced by running shell commands.")
@@ -2985,10 +2852,9 @@ the output produced by running shell commands.")
     ;; Tests are not included in the gem.
     (arguments `(#:tests? #f))
     (propagated-inputs
-     `(("ruby-shellany" ,ruby-shellany)
-       ("ruby-nenv" ,ruby-nenv)))
+     (list ruby-shellany ruby-nenv))
     (native-inputs
-     `(("bundler" ,bundler)))
+     (list bundler))
     (synopsis "Wrapper library for notification libraries")
     (description "Notiffany is a Ruby wrapper library for notification
 libraries such as Libnotify.")
@@ -3033,13 +2899,9 @@ libraries such as Libnotify.")
                       (setenv "HOME" "/tmp")
                       #t)))))
     (native-inputs
-     `(("ruby-activerecord" ,ruby-activerecord)
-       ("ruby-bump" ,ruby-bump)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-sqlite3" ,ruby-sqlite3)
-       ("ruby-wwtd" ,ruby-wwtd)))
+     (list ruby-activerecord ruby-bump ruby-rspec ruby-sqlite3 ruby-wwtd))
     (propagated-inputs
-     `(("ruby-parallel-tests" ,ruby-parallel-tests)))
+     (list ruby-parallel-tests))
     (synopsis "Run every test in a fork")
     (description
      "This package is a wrapper around @code{parallel_tests} that runs every
@@ -3102,10 +2964,9 @@ standard output stream.")
                (invoke "rspec"))
              #t)))))
     (native-inputs
-     `(("bundler" ,bundler)))
+     (list bundler))
     (propagated-inputs
-     `(("ruby-rspec-core" ,ruby-rspec-core)
-       ("ruby-progressbar" ,ruby-progressbar)))
+     (list ruby-rspec-core ruby-progressbar))
     (synopsis "Fuubar is an RSpec formatter that uses a progress bar")
     (description
      "Fuubar is an RSpec formatter that uses a progress bar instead of a
@@ -3129,8 +2990,7 @@ failure.")
     (arguments
      '(#:tests? #f)) ; No included tests
     (propagated-inputs
-     `(("ruby-tilt" ,ruby-tilt)
-       ("ruby-temple" ,ruby-temple)))
+     (list ruby-tilt ruby-temple))
     (synopsis "Haml is a Ruby library to generate HTML documents")
     (description
      "@acronym{Haml, HTML Abstraction Markup Language} is a layer on top of
@@ -3176,9 +3036,9 @@ engine.")
              (invoke "rspec"))
            #t)))))
   (propagated-inputs
-   `(("ruby-concurrent" ,ruby-concurrent)))
+   (list ruby-concurrent))
   (native-inputs
-   `(("ruby-rspec" ,ruby-rspec)))
+   (list ruby-rspec))
   (synopsis "Efficient, immutable, thread-safe collection classes for Ruby")
   (description
     "Hamster provides 6 persistent data structures: @code{Hash}, @code{Vector},
@@ -3209,8 +3069,7 @@ immutable queue or stack).")
                (invoke "rspec"))
              #t)))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec-2)))
+     (list bundler ruby-rspec-2))
     (synopsis "HashDiff computes the smallest difference between two hashes")
     (description
      "HashDiff is a Ruby library to compute the smallest difference between
@@ -3244,9 +3103,9 @@ two hashes.")
                       (lambda _
                         (invoke "rspec"))))))
       (native-inputs
-       `(("ruby-rspec" ,ruby-rspec)))
+       (list ruby-rspec))
       (propagated-inputs
-       `(("ruby-byebug" ,ruby-byebug)))
+       (list ruby-byebug))
       (synopsis "Ruby hyphenation patterns")
       (description
        "ruby-hydra is a Ruby library for working with hyphenation patterns.")
@@ -3278,7 +3137,7 @@ two hashes.")
                ((" -rubygems") ""))
              #t)))))
     (propagated-inputs
-     `(("ruby-formatador" ,ruby-formatador)))
+     (list ruby-formatador))
     (synopsis "Simple depth first Ruby testing")
     (description "Shindo is a simple depth first testing library for Ruby.")
     (home-page "https://github.com/geemus/shindo")
@@ -3298,8 +3157,7 @@ two hashes.")
     ;; Tests need Internet access.
     (arguments `(#:tests? #f))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)
-       ("ruby-yard" ,ruby-yard)))
+     (list ruby-rspec ruby-yard))
     (synopsis "Rake tasks for managing and releasing Ruby Gems")
     (description "Rubygems-task provides Rake tasks for managing and releasing
 Ruby Gems.")
@@ -3331,10 +3189,7 @@ Ruby Gems.")
              (("/usr/bin/env ruby") (which "ruby")))
            #t)))))
   (native-inputs
-   `(("bundler" ,bundler)
-     ("ruby-simplecov" ,ruby-simplecov)
-     ("zip" ,zip)
-     ("unzip" ,unzip)))
+   (list bundler ruby-simplecov zip unzip))
   (synopsis "Ruby module is for reading and writing zip files")
   (description
     "The rubyzip module provides ways to read from and create zip files.")
@@ -3354,7 +3209,7 @@ Ruby Gems.")
     (build-system ruby-build-system)
     (arguments `(#:tests? #f)) ; there are no tests
     (native-inputs
-     `(("bundler" ,bundler)))
+     (list bundler))
     (synopsis "Default HTML formatter for SimpleCov code coverage tool")
     (description "This package provides the default HTML formatter for
 the SimpleCov code coverage tool for Ruby version 1.9 and above.")
@@ -3376,11 +3231,9 @@ the SimpleCov code coverage tool for Ruby version 1.9 and above.")
     ;; Rubocop needs simplecov at build time.
     (arguments `(#:tests? #f))
     (propagated-inputs
-     `(("ruby-json" ,ruby-json)
-       ("ruby-docile" ,ruby-docile)
-       ("ruby-simplecov-html" ,ruby-simplecov-html)))
+     (list ruby-json ruby-docile ruby-simplecov-html))
     (native-inputs
-     `(("bundler" ,bundler)))
+     (list bundler))
     (synopsis "Code coverage framework for Ruby")
     (description "SimpleCov is a code coverage framework for Ruby with a
 powerful configuration library and automatic merging of coverage across test
@@ -3423,8 +3276,7 @@ User Agents.")
    '(;; TODO: This should be default, but there is one test failure
      #:test-target "all_spec"))
   (native-inputs
-   `(("ruby-mspec" ,ruby-mspec)
-     ("ruby-activesupport" ,ruby-activesupport)))
+   (list ruby-mspec ruby-activesupport))
   (synopsis "Backports of the features in newer Ruby versions")
   (description
     "Backports enables more compatibility across Ruby versions by providing
@@ -3464,7 +3316,7 @@ features.")
     (arguments
      ;; No tests
      '(#:tests? #f))
-    (propagated-inputs `(("ruby-bacon" ,ruby-bacon)))
+    (propagated-inputs (list ruby-bacon))
     (synopsis "Extensions to Bacon, for disabling tests, before and after
 blocks and more")
     (description
@@ -3489,7 +3341,7 @@ disable tests, have before and after blocks that run once and more.")
      '(;; No included tests
        #:tests? #f))
     (propagated-inputs
-     `(("ruby-bacon" ,ruby-bacon)))
+     (list ruby-bacon))
     (synopsis "Colored output for Bacon test framework")
     (description
      "This package adds color through ANSI escape codes to Bacon test
@@ -3509,7 +3361,7 @@ output.")
                 "0lflx29mlznf1hn0nihkgllzbj8xp5qasn8j7h838465pi399k68"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("bundler" ,bundler)))
+     (list bundler))
     (synopsis "Generic connection pool for Ruby")
     (description "Connection_pool provides a generic connection pooling
 interface for Ruby programs.")
@@ -3557,17 +3409,17 @@ interface for Ruby programs.")
                          "ActiveRecord::VERSION::MAJOR >= 4"))
                       #t)))))
     (native-inputs
-     `(;; For tests.
-       ("ruby-activerecord" ,ruby-activerecord)
-       ("ruby-activesupport" ,ruby-activesupport)
-       ("ruby-bump" ,ruby-bump)
-       ("ruby-forking-test-runner" ,ruby-forking-test-runner)
-       ("ruby-i18n" ,ruby-i18n)
-       ("ruby-rubocop" ,ruby-rubocop)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-single-cov" ,ruby-single-cov)
-       ("ruby-sqlite3" ,ruby-sqlite3)
-       ("ruby-wwtd" ,ruby-wwtd)))
+     (list ;; For tests.
+           ruby-activerecord
+           ruby-activesupport
+           ruby-bump
+           ruby-forking-test-runner
+           ruby-i18n
+           ruby-rubocop
+           ruby-rspec
+           ruby-single-cov
+           ruby-sqlite3
+           ruby-wwtd))
     (synopsis "Fast implementation of @code{GetText}")
     (description
      "This package provides an alternative implementation of the Ruby
@@ -3587,8 +3439,7 @@ interface for Ruby programs.")
                 "156rv95bgxfz6qw5y1r7c7bswr77918hygl8dyl14qzbqc5vyp18"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-connection-pool" ,ruby-connection-pool)
-       ("ruby-hoe" ,ruby-hoe)))
+     (list ruby-connection-pool ruby-hoe))
     (synopsis "Persistent HTTP connection manager")
     (description "Net::HTTP::Persistent manages persistent HTTP connections
 using Net::HTTP, supporting reconnection and retry according to RFC 2616.")
@@ -3609,7 +3460,7 @@ using Net::HTTP, supporting reconnection and retry according to RFC 2616.")
     (arguments
      '(#:tests? #f))                    ; No included tests
     (native-inputs
-     `(("bundler" ,bundler)))
+     (list bundler))
     (synopsis "Assert library with descriptive assertion messages")
     (description "Power-assert is an assertion library providing descriptive
 assertion messages for tests.")
@@ -3631,9 +3482,7 @@ assertion messages for tests.")
     (arguments
      '(#:test-target "spec"))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-yard" ,ruby-yard)))
+     (list bundler ruby-rspec ruby-yard))
     (synopsis "Useful extensions to core Ruby classes")
     (description
      "This package provides a few useful extensions to core Ruby classes,
@@ -3658,8 +3507,7 @@ including @code{Array}, @code{Enumerable}, @code{Hash}, @code{Numeric}, and
     ;; dependency cycle we disable tests.
     (arguments `(#:tests? #f))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-yard" ,ruby-yard)))
+     (list bundler ruby-yard))
     (synopsis "Ruby library providing basic localization APIs")
     (description
      "Ruby-Locale is the pure ruby library which provides basic APIs for
@@ -3680,9 +3528,7 @@ localization.")
          "060zzj7c2kicdfk6cpnn40n9yjnhfrr13d0rsbdhdij68chp2861"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-tilt" ,ruby-tilt)
-       ("ruby-bacon" ,ruby-bacon)
-       ("ruby-erubis" ,ruby-erubis)))
+     (list ruby-tilt ruby-bacon ruby-erubis))
     (synopsis "Template compilation framework in Ruby")
     (description
      "Temple is an abstraction and framework for compiling templates to pure
@@ -3724,11 +3570,9 @@ Soundex, Metaphone, Double Metaphone, Porter Stemming.")
     ;; tests.
     (arguments `(#:tests? #f))
     (propagated-inputs
-     `(("ruby-locale" ,ruby-locale)
-       ("ruby-text" ,ruby-text)))
+     (list ruby-locale ruby-text))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-yard" ,ruby-yard)))
+     (list bundler ruby-yard))
     (synopsis "GNU gettext-like program for Ruby")
     (description
      "Gettext is a GNU gettext-like program for Ruby.  The catalog
@@ -3752,10 +3596,9 @@ use GNU gettext tools for maintenance.")
     ;; To break the dependency cycle we disable tests.
     (arguments `(#:tests? #f))
     (propagated-inputs
-     `(("ruby-gettext" ,ruby-gettext)
-       ("ruby-yard" ,ruby-yard)))
+     (list ruby-gettext ruby-yard))
     (native-inputs
-     `(("bundler" ,bundler)))
+     (list bundler))
     (synopsis "Utility library to package internationalized libraries")
     (description
      "Packnga is a library to translate to many languages using YARD.")
@@ -3775,9 +3618,7 @@ use GNU gettext tools for maintenance.")
          "1a2ym3l068d0pxzzr95kvqx87zpdsarxslz9ygd4qfm9frrz0kgj"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-mocha" ,ruby-mocha)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list bundler ruby-mocha ruby-rspec))
     (synopsis "Creates temporary files and directories for testing")
     (description
      "TestConstruct is a @acronym{DSL, Domain Specific Language} for creating
@@ -3788,20 +3629,18 @@ temporary files and directories during tests.")
 (define-public ruby-test-unit
   (package
     (name "ruby-test-unit")
-    (version "3.2.5")
+    (version "3.4.4")
     (source (origin
               (method url-fetch)
               (uri (rubygems-uri "test-unit" version))
               (sha256
                (base32
-                "05bx36fw01iqz0xqhvjfrwjgnj1zx3b2vn6w1fzp19rchd7zqc52"))))
+                "15isy7vhppbfd0032klirj9gxp65ygkzjdwrmm28xpirlcsk6qpd"))))
     (build-system ruby-build-system)
     (propagated-inputs
-     `(("ruby-power-assert" ,ruby-power-assert)))
+     (list ruby-power-assert))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-packnga" ,ruby-packnga)
-       ("ruby-yard" ,ruby-yard)))
+     (list bundler ruby-packnga ruby-yard))
     (synopsis "Unit testing framework for Ruby")
     (description "@code{Test::Unit} is unit testing framework for Ruby, based
 on xUnit principles.  These were originally designed by Kent Beck, creator of
@@ -3835,10 +3674,9 @@ It allows writing tests, checking results and automated testing in Ruby.")
                (invoke "rspec"))
              #t)))))
     (propagated-inputs
-     `(("ruby-builder" ,ruby-builder)))
+     (list ruby-builder))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec-2)))
+     (list bundler ruby-rspec-2))
     (synopsis "Write HTML pages in pure Ruby")
     (description
      "Markaby allows writing HTML packages in pure Ruby.  This is similar to
@@ -3870,9 +3708,7 @@ mixture of HTML and additional ERB syntax.")
                (invoke "rspec"))
              #t)))))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)
-       ("ruby-simplecov" ,ruby-simplecov)
-       ("ruby-nokogiri-diff" ,ruby-nokogiri-diff)))
+     (list ruby-rspec ruby-simplecov ruby-nokogiri-diff))
     (synopsis "Markdown interpreter in Ruby")
     (description
      "Maruku is a Markdown interpreter in Ruby.  It can export Markdown to
@@ -3906,8 +3742,7 @@ HTML, and PDF through LaTeX.")
                                  "/lib\""))))
              #t)))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-test-unit" ,ruby-test-unit)))
+     (list bundler ruby-test-unit))
     (synopsis "Ruby library adding metaclass method to all objects")
     (description
      "Metaclass is a Ruby library adding a @code{metaclass} method to all Ruby
@@ -3927,7 +3762,7 @@ objects.")
                 "0br9k6zijj1zc25n8p7f2j1mwl58nfgdknf3q13h9k156jvrir06"))))
     (build-system ruby-build-system)
     (propagated-inputs
-     `(("ruby-ptools" ,ruby-ptools)))
+     (list ruby-ptools))
     (synopsis "Lightweight alternative to @code{mkmf}")
     (description
      "@code{mkmf-lite} is a light version of Ruby's @code{mkmf.rb} designed
@@ -3969,9 +3804,7 @@ to check for the presence of header files, constants, and so on.")
                (invoke "rspec" "spec"))
              #t)))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rake" ,ruby-rake)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list bundler ruby-rake ruby-rspec))
     (synopsis "MSpec is a specialized framework for RubySpec")
     (description
      "MSpec is a specialized framework that is syntax-compatible with RSpec 2
@@ -4029,8 +3862,7 @@ specs for Ruby implementations in ruby/spec.")
      `(("mariadb-dev" ,mariadb "dev")
        ("zlib" ,zlib)))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)
-       ("ruby-rake-compiler" ,ruby-rake-compiler)))
+     (list ruby-rspec ruby-rake-compiler))
     (synopsis "MySQL library for Ruby, binding to libmysql")
     (description
      "This package provides a simple, fast MySQL library for Ruby, binding to
@@ -4055,8 +3887,7 @@ libmysql.")
          (replace 'check
           (lambda _ (invoke "rspec" "spec/"))))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list bundler ruby-rspec))
     (synopsis "Abstract base class with no predefined methods")
     (description
      "BlankSlate provides an abstract base class with no predefined
@@ -4083,9 +3914,7 @@ as a base class when writing classes that depend upon
      ;; https://github.com/cldwalker/bond/issues/46).
      `(#:tests? #f))
     (native-inputs
-     `(("ruby-bacon" ,ruby-bacon)
-       ("ruby-bacon-bits" ,ruby-bacon-bits)
-       ("ruby-mocha-on-bacon" ,ruby-mocha-on-bacon)))
+     (list ruby-bacon ruby-bacon-bits ruby-mocha-on-bacon))
     (synopsis "Bond can provide custom autocompletion for arguments, methods
 and more")
     (description
@@ -4129,7 +3958,7 @@ irb's last-word approach.")
                         (find-files "./test" ".*\\.rb"))))
              #t)))))
     (inputs
-     `(("libidn" ,libidn)))
+     (list libidn))
     (synopsis "Ruby Bindings for the GNU LibIDN library")
     (description
      "Ruby Bindings for the GNU LibIDN library, an implementation of the
@@ -4170,10 +3999,9 @@ encoded form.")
                                  "/lib\""))))
              #t)))))
     (propagated-inputs
-     `(("ruby-blankslate" ,ruby-blankslate)))
+     (list ruby-blankslate))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-test-unit" ,ruby-test-unit)))
+     (list bundler ruby-test-unit))
     (synopsis "Instantiate an arbitrary Ruby class")
     (description
      "Instantiator lets you instantiate an arbitrary Ruby class without
@@ -4207,12 +4035,9 @@ knowing anything about the constructor.")
                                 "/lib\""))))
             #t)))))
     (propagated-inputs
-     `(("ruby-instantiator" ,ruby-instantiator)
-       ("ruby-metaclass" ,ruby-metaclass)))
+     (list ruby-instantiator ruby-metaclass))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-blankslate" ,ruby-blankslate)
-       ("ruby-test-unit" ,ruby-test-unit)))
+     (list bundler ruby-blankslate ruby-test-unit))
     (synopsis "Dynamic inspection of the method hierarchy on a Ruby object")
     (description
      "Introspection provides tools to inspect the hierarchy of method
@@ -4242,9 +4067,7 @@ definitions on a Ruby object.")
                "task :test => %w[test:unit]"))
             #t)))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-test-unit" ,ruby-test-unit)
-       ("ruby-rake-compiler" ,ruby-rake-compiler)))
+     (list bundler ruby-test-unit ruby-rake-compiler))
     (synopsis "Extensible Markdown to (X)HTML converter")
     (description
      "Redcarpet is an extensible Ruby library for Markdown processing and
@@ -4267,7 +4090,7 @@ conversion to (X)HTML.")
   (arguments
    '(#:tests? #f)) ; No included tests
   (propagated-inputs
-   `(("ruby-listen" ,ruby-listen)))
+   (list ruby-listen))
   (synopsis "Run a process, and restart when some monitored files change")
   (description
     "Rerun is a tool to launch programs, then monitor the file system, and
@@ -4321,7 +4144,7 @@ Ruby, but can be used for all programs.")
        ("ruby-rspec" ,ruby-rspec)
        ("ruby-wwtd" ,ruby-wwtd)))
     (propagated-inputs
-     `(("ruby-minitest" ,ruby-minitest)))
+     (list ruby-minitest))
     (synopsis "Minitest with extra features")
     (description
      "Maxitest is a wrapper around Minitest with extra functionality such
@@ -4332,13 +4155,13 @@ number, support for interrupted tests, better backtraces, and more.")
 (define-public ruby-mocha
   (package
     (name "ruby-mocha")
-    (version "1.11.2")
+    (version "1.13.0")
     (source (origin
               (method url-fetch)
               (uri (rubygems-uri "mocha" version))
               (sha256
                (base32
-                "0hxmkm8qxd04vwj8mqnpyrf2dwy7g1k9zipdfhl4y71cw7ijm9n4"))))
+                "15s53ggsykk69kxqvs4416s8yxdhz6caggva55n8sjgy4ixzwp10"))))
     (build-system ruby-build-system)
     (arguments
      `(#:phases
@@ -4352,12 +4175,12 @@ number, support for interrupted tests, better backtraces, and more.")
                 "true\n"))
              #t)))))
     (native-inputs
-     `(("ruby-introspection" ,ruby-introspection)))
+     (list ruby-introspection))
     (synopsis "Mocking and stubbing library for Ruby")
     (description
      "Mocha is a mocking and stubbing library with JMock/SchMock syntax, which
 allows mocking and stubbing of methods on real (non-mock) classes.")
-    (home-page "http://gofreerange.com/mocha/docs")
+    (home-page "https://mocha.jamesmead.org/")
     ;; Mocha can be used with either license at the users choice.
     (license (list license:expat license:ruby))))
 
@@ -4376,7 +4199,7 @@ allows mocking and stubbing of methods on real (non-mock) classes.")
     (arguments
      ;; rubygems.org release missing tests
      '(#:tests? #f))
-    (propagated-inputs `(("ruby-mocha" ,ruby-mocha)))
+    (propagated-inputs (list ruby-mocha))
     (synopsis "Mocha adapter for Bacon")
     (description
      "This package provides a Mocha adapter for Bacon, allowing you to use the
@@ -4397,9 +4220,7 @@ Mocha stubbing and mocking library with Bacon, a small RSpec clone.")
                 "07c4v97zl1daabmri9zlbzs6yvkl56z1q14bw74d53jdj0c17nhx"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-mocha" ,ruby-mocha)
-       ("ruby-test-unit" ,ruby-test-unit)))
+     (list bundler ruby-mocha ruby-test-unit))
     (synopsis "Ruby implementation of the SSH2 client protocol")
     (description "@code{Net::SSH} is a pure-Ruby implementation of the SSH2
 client protocol.  It allows you to write programs that invoke and interact
@@ -4423,11 +4244,9 @@ with processes on remote servers, via SSH2.")
         (base32 "1nyn17sy71fn7zs3y6wbgcn35318c10flqgc0582409095x4h0sx"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-test-unit" ,ruby-test-unit)
-       ("ruby-mocha" ,ruby-mocha)))
+     (list bundler ruby-test-unit ruby-mocha))
     (propagated-inputs
-     `(("ruby-net-ssh" ,ruby-net-ssh)))
+     (list ruby-net-ssh))
     (synopsis "Pure-Ruby SCP client library")
     (description "@code{Net::SCP} is a pure-Ruby implementation of the SCP
 client protocol.")
@@ -4437,16 +4256,16 @@ client protocol.")
 (define-public ruby-minitest
   (package
     (name "ruby-minitest")
-    (version "5.12.2")
+    (version "5.14.4")
     (source (origin
               (method url-fetch)
               (uri (rubygems-uri "minitest" version))
               (sha256
                (base32
-                "0zjm24aiz42i9n37mcw8lydd7n0y7wfk27by06jx77ypcld3qvkw"))))
+                "19z7wkhg59y8abginfrm2wzplz7py3va8fyngiigngqvsws6cwgl"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-hoe" ,ruby-hoe)))
+     (list ruby-hoe))
     (synopsis "Small test suite library for Ruby")
     (description "Minitest provides a complete suite of Ruby testing
 facilities supporting TDD, BDD, mocking, and benchmarking.")
@@ -4499,12 +4318,9 @@ facilities supporting TDD, BDD, mocking, and benchmarking.")
                (("%q<cucumber>.*") "%q<cucumber>, [\">= 0\"])\n"))
              #t)))))
     (propagated-inputs
-     `(("ruby-minitest" ,ruby-minitest)))
+     (list ruby-minitest))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-cucumber" ,ruby-cucumber)
-       ("ruby-bump" ,ruby-bump)
-       ("ruby-test-construct" ,ruby-test-construct)))
+     (list bundler ruby-cucumber ruby-bump ruby-test-construct))
     (synopsis "Run code around tests in Minitest")
     (description
      "This library provides a way to run code around tests in Minitest,
@@ -4524,8 +4340,7 @@ written using either the unit test or spec style.")
                 "179d6pj56l9xzm46fqsqj10mzjkr1f9fv4cxa8wvchs97hqz33w1"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-hoe" ,ruby-hoe)
-       ("ruby-minitest" ,ruby-minitest)))
+     (list ruby-hoe ruby-minitest))
     (synopsis "Fast test suite runner for minitest")
     (description "Minitest-sprint is a test runner for minitest that makes it
 easier to re-run individual failing tests.")
@@ -4544,9 +4359,9 @@ easier to re-run individual failing tests.")
                 "0zhdwcl6bgha61qiyfvr7zs7ywaxc33wmj9xhxl8jdmpdvifvfaj"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-hoe" ,ruby-hoe)))
+     (list ruby-hoe))
     (inputs
-     `(("ruby-minitest" ,ruby-minitest)))
+     (list ruby-minitest))
     (synopsis "Bacon compatibility library for minitest")
     (description "Minitest-bacon extends minitest with bacon-like
 functionality, making it easier to migrate test suites from bacon to minitest.")
@@ -4566,9 +4381,9 @@ functionality, making it easier to migrate test suites from bacon to minitest.")
          "1zgjslp6d7dzcn8smj595idymgd5j603p9g2jqkfgi28sqbhz6m0"))))
     (build-system ruby-build-system)
     (propagated-inputs
-     `(("ruby-minitest" ,ruby-minitest)))
+     (list ruby-minitest))
     (native-inputs
-     `(("ruby-hoe" ,ruby-hoe)))
+     (list ruby-hoe))
     (synopsis "Allows a few specific tests to be focused on")
     (description
      "@code{minitest-focus} gives the ability focus on a few tests with ease
@@ -4602,8 +4417,7 @@ is to be run.")
              (lambda _
                (invoke "script/test"))))))
       (native-inputs
-       `(("bundler" ,bundler)
-         ("ruby-turn" ,ruby-turn)))
+       (list bundler ruby-turn))
       (synopsis "Pretty-print hashes and arrays in MiniTest")
       (description
        "@code{minitest-pretty_diff} monkey-patches
@@ -4639,8 +4453,7 @@ structures when tests fail.")
                (("require 'byebug'") ""))
              #t)))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-minitest" ,ruby-minitest)))
+     (list bundler ruby-minitest))
     (synopsis "Extra features and changes to MiniTest")
     (description "@code{MiniTest Moar} add some additional features and
 changes some default behaviours in MiniTest.  For instance, Moar replaces the
@@ -4661,7 +4474,8 @@ MiniTest @code{Object#stub} with a global @code{stub} method.")
          "1hbq9jk904xkz868yha1bqcm6azm7kmjsll2k4pn2nrcib508h2a"))))
     (build-system ruby-build-system)
     (arguments
-     `(#:phases
+     `(#:tests? #f          ; Test suite has bitrotted.
+       #:phases
        (modify-phases %standard-phases
          (add-before 'check 'clean-dependencies
            (lambda _
@@ -4671,10 +4485,8 @@ MiniTest @code{Object#stub} with a global @code{stub} method.")
                (("require 'minitest/bisect'") ""))
              #t)))))
     (native-inputs
-     `(("ruby-hoe" ,ruby-hoe)
-       ("ruby-minitest-pretty-diff" ,ruby-minitest-pretty-diff)
-       ("ruby-minitest-focus" ,ruby-minitest-focus)
-       ("ruby-minitest-moar" ,ruby-minitest-moar)))
+     (list ruby-hoe ruby-minitest-pretty-diff ruby-minitest-focus
+           ruby-minitest-moar))
     (synopsis "Bonus assertions for @code{Minitest}")
     (description
      "Minitest bonus assertions provides extra MiniTest assertions.  For
@@ -4712,13 +4524,9 @@ instance, it provides @code{assert_true}, @code{assert_false} and
                ((".*%q<rubocop>.*") "\n"))
              #t)))))
     (propagated-inputs
-     `(("ruby-ansi" ,ruby-ansi)
-       ("ruby-builder" ,ruby-builder)
-       ("ruby-minitest" ,ruby-minitest)
-       ("ruby-progressbar" ,ruby-progressbar)))
+     (list ruby-ansi ruby-builder ruby-minitest ruby-progressbar))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-maruku" ,ruby-maruku)))
+     (list bundler ruby-maruku))
     (synopsis "Enhanced reporting for Minitest tests")
     (description
      "@code{minitest/reporters} provides a custom Minitest runner to improve
@@ -4746,7 +4554,7 @@ reporter.")
      ;; https://github.com/blowmage/minitest-rg/pull/13
      `(#:tests? #f))
     (propagated-inputs
-     `(("ruby-minitest" ,ruby-minitest)))
+     (list ruby-minitest))
     (synopsis "Coloured output for Minitest")
     (description
      "@code{minitest-rg} changes the colour of the output from Minitest.")
@@ -4767,7 +4575,7 @@ reporter.")
          "1pp3k2608spj4kvqy2y16hs18an917g6vwgvphrfhjviac83090x"))))
     (build-system ruby-build-system)
     (propagated-inputs
-     `(("ruby-minitest" ,ruby-minitest)))
+     (list ruby-minitest))
     (synopsis "Adjust minitest behaviour for calling expectation methods")
     (description
      "Minitest-global_expectations allows continued use of expectation methods
@@ -4779,20 +4587,22 @@ minitest 5.12, and is planned to be removed from minitest 6.")
 (define-public ruby-minitest-hooks
   (package
     (name "ruby-minitest-hooks")
-    (version "1.4.2")
+    (version "1.5.0")
     (source
      (origin
        (method url-fetch)
        (uri (rubygems-uri "minitest-hooks" version))
        (sha256
         (base32
-         "0lnpvzijbjrvxjc43d155jnbk2mkfshrz22an711wh004scavlzc"))))
+         "05z8r6sw3fz4s44fs1150ndlcmcy82vlxmhps5nncg8vk59k3gmf"))))
     (build-system ruby-build-system)
     (arguments
-     '(#:test-target "spec"))
+     '(#:test-target "spec"
+       ;; Test suite is incompatible with ruby-2.7.
+       ;; https://github.com/jeremyevans/minitest-hooks/issues/19
+       #:tests? #f))
     (native-inputs
-     `(("ruby-sequel" ,ruby-sequel)
-       ("ruby-sqlite3" ,ruby-sqlite3)))
+     (list ruby-sequel ruby-sqlite3))
     (synopsis "Hooks for the minitest framework")
     (description
      "Minitest-hooks adds @code{around}, @code{before_all}, @code{after_all},
@@ -4857,7 +4667,7 @@ URIs using the normal URI.parse method.")
                 "0c9rk23ilhc0n4489y6lda2wzphpzh6ish6fahlbpjhxn82wb931"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-minitest" ,ruby-minitest)))
+     (list ruby-minitest))
     (synopsis "Recursively merge hashes")
     (description
      "Deep Merge is a set of utility functions for @code{Hash}.  It permits
@@ -4882,8 +4692,7 @@ you to merge elements inside a hash together recursively.")
                     (lambda* (#:key inputs outputs #:allow-other-keys)
                       ;; Make the default git binary an absolute path to the
                       ;; store.
-                      (let ((git    (string-append (assoc-ref inputs "git")
-                                                   "/bin/git"))
+                      (let ((git    (search-input-file inputs "/bin/git"))
                             (config (string-append
                                      (assoc-ref outputs "out")
                                      "/lib/ruby/vendor_ruby/gems/git-"
@@ -4893,7 +4702,7 @@ you to merge elements inside a hash together recursively.")
                            (string-append "'" git "'")))
                         #t))))))
     (inputs
-     `(("git" ,git)))
+     (list git))
     (synopsis "Ruby wrappers for Git")
     (description "Ruby/Git is a Ruby library that can be used to create, read
 and manipulate Git repositories by wrapping system calls to the git binary.")
@@ -4922,8 +4731,7 @@ and manipulate Git repositories by wrapping system calls to the git binary.")
                           (format #t "test suite not run~%"))
                       #t)))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list bundler ruby-rspec))
     (synopsis "HOCON config library")
     (description
      "This package provides Ruby support for the @acronym{HOCON,
@@ -4944,7 +4752,7 @@ objects back to a @code{String}.")
                 "0bfm8535g0rkn9cbjndkckf0f7a3wj0rg4rqhrpsgxnbfdf2lm0p"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-minitest" ,ruby-minitest)))
+     (list ruby-minitest))
     (synopsis "Ruby command line option parser")
     (description "Slop provides a Ruby domain specific language for gathering
 options and parsing command line flags.")
@@ -4994,7 +4802,7 @@ Nokogiri, Ox, or REXML.")
                 "09k0b3cybqilk1gwrwwain95rdypixb2q9w65gd44gfzsd84xi1x"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("bundler" ,bundler)))
+     (list bundler))
     (synopsis "Multipart POST library for Ruby")
     (description "Multipart-Post Adds multipart POST capability to Ruby's
 net/http library.")
@@ -5004,7 +4812,7 @@ net/http library.")
 (define-public ruby-multi-json
   (package
     (name "ruby-multi-json")
-    (version "1.13.1")
+    (version "1.15.0")
     (source
      (origin
        (method git-fetch)
@@ -5016,23 +4824,17 @@ net/http library.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "18wpb6p01rrkl4v33byh70vxj2a5jxkfxzv3pz8z6pssy4ymwkm4"))))
+         "0mkdvy6i00yyksjvnv6znh7wf89j9506qzzjq6bsbmbkyqrszp4d"))))
     (build-system ruby-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'remove-signing-key-reference
+         (add-before 'check 'pre-check
            (lambda _
-             (substitute* "multi_json.gemspec"
-               ((".*spec.signing_key.*") ""))
-             #t)))))
+             ;; As seen in the .travis.yml file.
+             (setenv "SKIP_ADAPTERS" "gson,jr_jackson,nsjsonserialization"))))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-yard" ,ruby-yard)
-       ("ruby-json-pure" ,ruby-json-pure)
-       ("ruby-oj" ,ruby-oj)
-       ("ruby-yajl-ruby" ,ruby-yajl-ruby)))
+     (list ruby-rspec ruby-json-pure ruby-oj ruby-yajl-ruby))
     (synopsis "Common interface to multiple JSON libraries for Ruby")
     (description
      "This package provides a common interface to multiple JSON libraries,
@@ -5102,7 +4904,7 @@ various relational database implementations.")
      '(;; No included tests
        #:tests? #f))
     (propagated-inputs
-     `(("ruby-mimemagic" ,ruby-mimemagic)))
+     (list ruby-mimemagic))
     (synopsis "MIME type detection using magic numbers, filenames and extensions")
     (description
      "@code{marcel} provides @acronym{MIME, Multipurpose Internet Mail
@@ -5168,7 +4970,10 @@ to reproduce user environments.")
                (base32
                 "15zplpfw3knqifj9bpf604rb3wc1vhq6363pd6lvhayng8wql5vy"))))))
 
-(define-public ruby-nokogiri
+;; TODO: In the next rebuild cycle, provide texlive a version of ruby-hydra
+;; that does not depend on byebug and rspec, so that their dependencies can
+;; be updated more freely.  For now pin this version to avoid rebuilds.
+(define-public ruby-nokogiri-1.10
   (package
     (name "ruby-nokogiri")
     (version "1.10.9")
@@ -5203,20 +5008,49 @@ to reproduce user environments.")
                                  "/lib'\n"))))
              #t)))))
     (native-inputs
-     `(("ruby-hoe" ,ruby-hoe)))
+     (list ruby-hoe))
     (inputs
-     `(("zlib" ,zlib)
-       ("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)))
+     (list zlib libxml2 libxslt))
     (propagated-inputs
-     `(("ruby-mini-portile" ,ruby-mini-portile-2)
-       ("ruby-pkg-config" ,ruby-pkg-config)))
+     (list ruby-mini-portile-2 ruby-pkg-config))
     (synopsis "HTML, XML, SAX, and Reader parser for Ruby")
     (description "Nokogiri (鋸) parses and searches XML/HTML, and features
 both CSS3 selector and XPath 1.0 support.")
     (home-page "http://www.nokogiri.org/")
     (license license:expat)))
 
+;; nokogiri requires this version exactly.
+(define-public ruby-mini-portile-2.6.1
+  (package
+    (inherit ruby-mini-portile)
+    (version "2.6.1")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "mini_portile2" version))
+              (sha256
+               (base32
+                "1lvxm91hi0pabnkkg47wh1siv56s6slm2mdq1idfm86dyfidfprq"))))))
+
+(define-public ruby-nokogiri
+  (package
+    (inherit ruby-nokogiri-1.10)
+    (version "1.12.5")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "nokogiri" version))
+              (sha256
+               (base32
+                "1v02g7k7cxiwdcahvlxrmizn3avj2q6nsjccgilq1idc89cr081b"))))
+    (arguments
+     '(#:tests? #f                      ;XXX: no tests in rubygem
+       #:gem-flags (list "--" "--use-system-libraries"
+                         (string-append "--with-xml2-include="
+                                        (assoc-ref %build-inputs "libxml2")
+                                        "/include/libxml2"))))
+    (propagated-inputs
+     (modify-inputs (package-propagated-inputs ruby-nokogiri-1.10)
+       (replace "ruby-mini-portile" ruby-mini-portile-2.6.1)))))
+
 (define-public ruby-method-source
   (package
     (name "ruby-method-source")
@@ -5239,7 +5073,7 @@ both CSS3 selector and XPath 1.0 support.")
                (("git ls-files") "find . -type f"))
              #t)))))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)))
+     (list ruby-rspec))
     (synopsis "Retrieve the source code for Ruby methods")
     (description "Method_source retrieves the source code for Ruby methods.
 Additionally, it can extract source code from Proc and Lambda objects or just
@@ -5281,7 +5115,7 @@ for select languages.")
     (build-system ruby-build-system)
     (arguments `(#:tests? #f))          ;no test suite in gem
     (propagated-inputs
-     `(("ruby-gherkin" ,ruby-gherkin)))
+     (list ruby-gherkin))
     (synopsis "Gherkin test suite analysis tool")
     (description "CukeModeler facilitates modeling a test suite that is
 written in Gherkin (e.g.  Cucumber, SpecFlow, Lettuce, etc.).  It does this by
@@ -5342,15 +5176,15 @@ then be analyzed or manipulated more easily than the underlying AST layer.")
                       (setenv "HOME" "/tmp")
                       #t)))))
     (native-inputs
-     `(("ruby-bump" ,ruby-bump)
-       ("ruby-cucumber" ,ruby-cucumber)
-       ("ruby-cuke-modeler" ,ruby-cuke-modeler)
-       ("ruby-minitest" ,ruby-minitest)
-       ("ruby-rake" ,ruby-rake)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-spinach" ,ruby-spinach)))
+     (list ruby-bump
+           ruby-cucumber
+           ruby-cuke-modeler
+           ruby-minitest
+           ruby-rake
+           ruby-rspec
+           ruby-spinach))
     (propagated-inputs
-     `(("ruby-parallel" ,ruby-parallel)))
+     (list ruby-parallel))
     (synopsis "Run tests in parallel")
     (description
      "This package can speed up @code{Test::Unit}, @code{RSpec},
@@ -5373,14 +5207,11 @@ across multiple CPU cores.")
     (arguments
      '(#:tests? #f)) ; tests not included in gem
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-cliver" ,ruby-cliver)
-       ("ruby-simplecov" ,ruby-simplecov)
-       ("ruby-racc" ,ruby-racc)))
+     (list bundler ruby-cliver ruby-simplecov ruby-racc))
     (inputs
-     `(("ragel" ,ragel)))
+     (list ragel))
     (propagated-inputs
-     `(("ruby-ast" ,ruby-ast)))
+     (list ruby-ast))
     (synopsis "Ruby parser written in pure Ruby")
     (description
      "This package provides a Ruby parser written in pure Ruby.")
@@ -5401,7 +5232,7 @@ across multiple CPU cores.")
     (build-system ruby-build-system)
     (native-inputs
      ;; TODO: Add ruby-minitest-proveit once available.
-     `(("hoe" ,ruby-hoe)))
+     (list ruby-hoe))
     (synopsis "ParseTree fork which includes generic S-exp processing tools")
     (description "The sexp_processor package is derived from ParseTree, but
 contrary to ParseTree, it includes all the generic S-exp processing tools.
@@ -5423,11 +5254,9 @@ Amongst the included tools are @code{Sexp}, @code{SexpProcessor} and
          "09qcdyjjw3p7g6cjm5m9swkms1xnv35ndiy7yw24cas16qrhha6c"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("hoe" ,ruby-hoe)
-       ("racc" ,ruby-racc)
-       ("unifdef" ,unifdef)))
+     (list ruby-hoe ruby-racc unifdef))
     (propagated-inputs
-     `(("ruby-sexp-processor" ,ruby-sexp-processor)))
+     (list ruby-sexp-processor))
     (home-page "https://github.com/seattlerb/ruby_parser/")
     (synopsis "Ruby parser written in pure Ruby")
     (description "The ruby_parser (RP) package provides a Ruby parser written
@@ -5456,7 +5285,7 @@ back to Ruby via the @code{ruby2ruby} library.")
                ;; Loosen the requirement for pdf-inspector
                (("~> 1\\.0\\.7") ">= 0")))))))
     (propagated-inputs
-     `(("ruby-coderay" ,ruby-coderay)))
+     (list ruby-coderay))
     (synopsis "Tool for writing manuals for Prawn and Prawn accessories")
     (description
      "This package provides a tool for writing manuals for Prawn and Prawn
@@ -5479,12 +5308,9 @@ accessories")
     (arguments
      '(#:test-target "spec"))
     (propagated-inputs
-     `(("ruby-highline" ,ruby-highline)
-       ("ruby-options" ,ruby-options)))
+     (list ruby-highline ruby-options))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-timecop" ,ruby-timecop)))
+     (list bundler ruby-rspec ruby-timecop))
     (synopsis
      "Ruby library for displaying progress bars")
     (description
@@ -5552,8 +5378,7 @@ The output can be customized with a formatting system.")
     (arguments
      '(#:tests? #f)) ; no tests
     (propagated-inputs
-     `(("ruby-coderay" ,ruby-coderay)
-       ("ruby-method-source" ,ruby-method-source)))
+     (list ruby-coderay ruby-method-source))
     (synopsis "Ruby REPL")
     (description "Pry is an IRB alternative and runtime developer console for
 Ruby.  It features syntax highlighting, a plugin architecture, runtime
@@ -5605,10 +5430,7 @@ invocation, and source and documentation browsing.")
                          "xit \"complains when coverage is bad\""))
                       #t)))))
     (native-inputs
-     `(("ruby-bump" ,ruby-bump)
-       ("ruby-minitest" ,ruby-minitest)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-simplecov" ,ruby-simplecov)))
+     (list ruby-bump ruby-minitest ruby-rspec ruby-simplecov))
     (synopsis "Code coverage reporting tool")
     (description
      "This package provides actionable code coverage reports for Ruby
@@ -5629,7 +5451,7 @@ development tools to catch coverage problems early.")
           "1v1rk78khwq87ar300lwll570zxpkq9rjnpgc9mgsyd6mm9qjz4w"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-hoe" ,ruby-hoe)))
+     (list ruby-hoe))
     (synopsis "Ruby lexer")
     (description
      "Oedipus Lex is a lexer generator in the same family as Rexical and Rex.
@@ -5669,17 +5491,16 @@ Oedipus matches on the first match, not the longest.")
           (lambda _
             (invoke "gem" "build" "guard.gemspec"))))))
     (propagated-inputs
-     `(("ruby-formatador" ,ruby-formatador)
-       ("ruby-listen" ,ruby-listen)
-       ("ruby-lumberjack" ,ruby-lumberjack)
-       ("ruby-nenv" ,ruby-nenv)
-       ("ruby-notiffany" ,ruby-notiffany)
-       ("ruby-pry" ,ruby-pry)
-       ("ruby-shellany" ,ruby-shellany)
-       ("ruby-thor" ,ruby-thor)))
+     (list ruby-formatador
+           ruby-listen
+           ruby-lumberjack
+           ruby-nenv
+           ruby-notiffany
+           ruby-pry
+           ruby-shellany
+           ruby-thor))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list bundler ruby-rspec))
     (synopsis "Tool to handle events on file system modifications")
     (description
      "Guard is a command line tool to easily handle events on file system
@@ -5706,9 +5527,7 @@ file or directories are modified.")
        ;; capybara is available.
        '(#:tests? #f))
     (propagated-inputs
-     `(("ruby-colorize" ,ruby-colorize)
-       ("ruby-gherkin-ruby" ,ruby-gherkin-ruby)
-       ("ruby-json" ,ruby-json)))
+     (list ruby-colorize ruby-gherkin-ruby ruby-json))
     (synopsis "Gherkin-based BDD framework")
     (description
      "Spinach is a high-level @acronym{BDD, Behavior-driven development}
@@ -5752,14 +5571,9 @@ define executable specifications of your code.")
                (("group :secondary") "[].each"))
              #t)))))
     (propagated-inputs
-     `(("ruby-pandoc-ruby" ,ruby-pandoc-ruby)
-       ("ruby-sassc" ,ruby-sassc)))
+     (list ruby-pandoc-ruby ruby-sassc))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-yard" ,ruby-yard)
-       ("ruby-builder" ,ruby-builder)
-       ("ruby-erubis" ,ruby-erubis)
-       ("ruby-markaby" ,ruby-markaby)))
+     (list bundler ruby-yard ruby-builder ruby-erubis ruby-markaby))
     (synopsis "Generic interface to multiple Ruby template engines")
     (description
      "Tilt is a thin interface over a number of different Ruby template
@@ -5827,7 +5641,7 @@ utilities for Ruby.")
     (propagated-inputs
      `(("ruby-concurrent-ruby" ,ruby-concurrent)))
     (native-inputs
-     `(("ruby-simplecov" ,ruby-simplecov)))
+     (list ruby-simplecov))
     (synopsis "Time zone library for Ruby")
     (description "TZInfo is a Ruby library that provides daylight savings
 aware transformations between times in different time zones.")
@@ -5872,7 +5686,7 @@ aware transformations between times in different time zones.")
                (setenv "cc" ,(cc-for-target))
              #t)))))
     (propagated-inputs
-     `(("ruby-tzinfo" ,ruby-tzinfo)))
+     (list ruby-tzinfo))
     (native-inputs
      `(("tzdata"
         ,(file-union "tzdata-for-ruby-tzdata-info"
@@ -5935,9 +5749,9 @@ IANA Time Zone database packaged as Ruby modules for use with @code{TZInfo}.")
           (lambda _
             (invoke "gem" "build" "rb-inotify.gemspec"))))))
     (propagated-inputs
-     `(("ruby-ffi" ,ruby-ffi)))
+     (list ruby-ffi))
     (native-inputs
-     `(("ruby-yard" ,ruby-yard)))
+     (list ruby-yard))
     (synopsis "Ruby wrapper for Linux's inotify")
     (description "rb-inotify is a simple wrapper over the @code{inotify} Linux
 kernel subsystem for monitoring changes to files and directories.")
@@ -5957,7 +5771,7 @@ kernel subsystem for monitoring changes to files and directories.")
     (build-system ruby-build-system)
     (arguments `(#:tests? #f)) ; no tests included
     (native-inputs
-     `(("bundler" ,bundler)))
+     (list bundler))
     (synopsis "Open the current REPL line in an editor")
     (description
      "This gem provides a plugin for the Ruby REPL to enable opening the
@@ -5990,11 +5804,9 @@ current line in an external editor.")
                "gem 'rake'\ngem 'rdoc'\ngem 'json'\n"))
             #t)))))
     (propagated-inputs
-     `(("ruby-json" ,ruby-json)))
+     (list ruby-json))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-minitest" ,ruby-minitest)
-       ("ruby-hoe" ,ruby-hoe)))
+     (list bundler ruby-minitest ruby-hoe))
     (synopsis "Generate searchable RDoc documentation")
     (description
      "SDoc is an RDoc documentation generator to build searchable HTML
@@ -6005,13 +5817,13 @@ documentation for Ruby code.")
 (define-public ruby-tins
   (package
     (name "ruby-tins")
-    (version "1.15.0")
+    (version "1.29.1")
     (source (origin
               (method url-fetch)
               (uri (rubygems-uri "tins" version))
               (sha256
                (base32
-                "09whix5a7ics6787zrkwjmp16kqyh6560p9f317syks785805f7s"))))
+                "0nzp88y19rqlcizp1nw8m44fvfxs9g3bhjpscz44dwfawfrmr0cb"))))
     (build-system ruby-build-system)
     ;; This gem needs gem-hadar at development time, but gem-hadar needs tins
     ;; at runtime.  To avoid the dependency on gem-hadar we disable rebuilding
@@ -6027,6 +5839,8 @@ documentation for Ruby code.")
             (substitute* "tins.gemspec"
               (("\"lib/spruz\", ") ""))
             (invoke "gem" "build" "tins.gemspec"))))))
+    (propagated-inputs
+     (list ruby-sync))
     (synopsis "Assorted tools for Ruby")
     (description "Tins is a Ruby library providing assorted tools.")
     (home-page "https://github.com/flori/tins")
@@ -6053,9 +5867,7 @@ documentation for Ruby code.")
           (lambda _
             (invoke "gem" "build" "gem_hadar.gemspec"))))))
     (propagated-inputs
-     `(("git" ,git)
-       ("ruby-tins" ,ruby-tins)
-       ("ruby-yard" ,ruby-yard)))
+     (list git ruby-tins ruby-yard))
     (synopsis "Library for the development of Ruby gems")
     (description
      "This library contains some useful functionality to support the
@@ -6102,7 +5914,7 @@ development of Ruby gems.")
     (propagated-inputs
      `(("ruby-minitest-4" ,ruby-minitest-4)))
     (native-inputs
-     `(("ruby-hoe" ,ruby-hoe)))
+     (list ruby-hoe))
     (synopsis "Adapter library between minitest and test/unit")
     (description
      "This library bridges the gap between the small and fast minitest and
@@ -6135,10 +5947,9 @@ Ruby's large and slower test/unit.")
           (lambda _
             (invoke "gem" "build" "term-ansicolor.gemspec"))))))
     (propagated-inputs
-     `(("ruby-tins" ,ruby-tins)))
+     (list ruby-tins))
     (native-inputs
-     `(("ruby-gem-hadar" ,ruby-gem-hadar)
-       ("ruby-minitest-tu-shim" ,ruby-minitest-tu-shim)))
+     (list ruby-gem-hadar ruby-minitest-tu-shim))
     (synopsis "Ruby library to control the attributes of terminal output")
     (description
      "This Ruby library uses ANSI escape sequences to control the attributes
@@ -6162,7 +5973,7 @@ of terminal output.")
   (arguments
    '(#:tests? #f)) ; No included tests
   (propagated-inputs
-   `(("ruby-lino" ,ruby-lino)))
+   (list ruby-lino))
   (synopsis "Ruby wrapper around the Terraform command line interface")
   (description
    "This package provides a Ruby wrapper around the Terraform command line
@@ -6182,8 +5993,7 @@ interface so that Terraform can be more easily invoked from Ruby code.")
                 "0ld3ng37y92kv9vqnachw1l3n07hsc8hrnjs9d840liw0mysf1vp"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-gem-hadar" ,ruby-gem-hadar)
-       ("bundler" ,bundler)))
+     (list ruby-gem-hadar bundler))
     (synopsis "Create a process tree data structure")
     (description
      "This library uses the output of the @code{ps} command to create a
@@ -6204,13 +6014,9 @@ process tree data structure for the current host.")
                 "196zhgcygrnx09bb9mh22qas03rl9avzx8qs0wnxznpin4pffwcl"))))
     (build-system ruby-build-system)
     (propagated-inputs
-     `(("ruby-tins" ,ruby-tins)
-       ("ruby-term-ansicolor" ,ruby-term-ansicolor)
-       ("ruby-pstree" ,ruby-pstree)
-       ("ruby-pry-editline" ,ruby-pry-editline)))
+     (list ruby-tins ruby-term-ansicolor ruby-pstree ruby-pry-editline))
     (native-inputs
-     `(("ruby-gem-hadar" ,ruby-gem-hadar)
-       ("bundler" ,bundler)))
+     (list ruby-gem-hadar bundler))
     (synopsis "Command line tools for working with Ruby")
     (description
      "This package provides assorted command line tools that may be useful
@@ -6262,13 +6068,13 @@ a native C extension.")
 (define-public ruby-json-pure
   (package
     (name "ruby-json-pure")
-    (version "2.2.0")
+    (version "2.3.1")
     (source (origin
               (method url-fetch)
               (uri (rubygems-uri "json_pure" version))
               (sha256
                (base32
-                "0m0j1mfwv0mvw72kzqisb26xjl236ivqypw1741dkis7s63b8439"))))
+                "00pziwkfqwk8vj19s65sdki31q1wvmf5v9b3sfglxm94qfvas1lx"))))
     (build-system ruby-build-system)
     (arguments
      `(#:phases
@@ -6277,28 +6083,9 @@ a native C extension.")
            (lambda _
              (substitute* "Rakefile"
                ;; Since this is not a git repository, do not call 'git'.
-               (("`git ls-files`") "`find . -type f |sort`")
-               ;; Loosen dependency constraint.
-               (("'test-unit', '~> 2.0'") "'test-unit', '>= 2.0'"))
-             #t))
-         (add-after 'replace-git-ls-files 'regenerate-gemspec
-           (lambda _
-             ;; Regenerate gemspec so loosened dependency constraints are
-             ;; propagated.
-             (invoke "rake" "gemspec")))
-         (add-after 'regenerate-gemspec 'fix-json-java.gemspec
-           (lambda _
-             ;; This gemspec doesn't look to be generated by the above
-             ;; command, so patch it separately.
-             (substitute* "json-java.gemspec"
-               (("%q<test-unit>\\.freeze, \\[\"~> 2\\.0\"\\]")
-                "%q<test-unit>.freeze, [\">= 2.0\"]"))
-             #t)))))
+               (("`git ls-files`") "`find . -type f |sort`")))))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ragel" ,ragel)
-       ("ruby-simplecov" ,ruby-simplecov)
-       ("ruby-test-unit" ,ruby-test-unit)))
+     (list bundler ragel ruby-simplecov ruby-test-unit which))
     (synopsis "JSON implementation in pure Ruby")
     (description
      "This package provides a JSON implementation written in pure Ruby.")
@@ -6333,9 +6120,7 @@ a native C extension.")
                (("Codacy::Reporter\\.start") ""))
              #t)))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-rbnacl" ,ruby-rbnacl)))
+     (list bundler ruby-rspec ruby-rbnacl))
     (synopsis "Ruby implementation of the JSON Web Token standard")
     (description
      "This package provides a pure Ruby implementation of the RFC 7519 OAuth
@@ -6399,16 +6184,13 @@ a native C extension.")
                ((".*rubocop.*") ""))
              #t)))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list bundler ruby-rspec))
     (inputs
-     `(;; ruby-thor is used for the command line interface, and is referenced
-       ;; in the wrapper, and therefore just needs to be an input.
-       ("ruby-thor" ,ruby-thor)))
+     (list ;; ruby-thor is used for the command line interface, and is referenced
+           ;; in the wrapper, and therefore just needs to be an input.
+           ruby-thor))
     (propagated-inputs
-     `(("ruby-rb-fsevent" ,ruby-rb-fsevent)
-       ("ruby-rb-inotify" ,ruby-rb-inotify)
-       ("ruby-dep" ,ruby-dep)))
+     (list ruby-rb-fsevent ruby-rb-inotify ruby-dep))
     (synopsis "Listen to file modifications")
     (description "The Listen gem listens to file modifications and notifies
 you about the changes.")
@@ -6418,37 +6200,27 @@ you about the changes.")
 (define-public ruby-loofah
   (package
     (name "ruby-loofah")
-    (version "2.3.1")
+    (version "2.13.0")
+    (home-page "https://github.com/flavorjones/loofah")
     (source
      (origin
-       (method url-fetch)
-       (uri (rubygems-uri "loofah" version))
+       ;; Build from git because the gem lacks tests.
+       (method git-fetch)
+       (uri (git-reference (url home-page)
+                           (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
        (sha256
         (base32
-         "0npqav026zd7r4qdidq9x5nxcp2dzg71bnp421xxx7sngbxf2xbd"))))
+         "0rmsm7mckiq0gslfqdl02yvn500n42v84gq28qjqn4yq9jwfs9ga"))))
     (build-system ruby-build-system)
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'remove-unnecessary-dependencies
-           (lambda _
-             ;; concourse is a development tool which is unused, so remove it
-             ;; so it's not required.
-             (substitute* "Rakefile"
-               (("require \"concourse\"") "")
-               (("Concourse\\.new.*") "task :concourse do\n"))
-             #t)))))
     (native-inputs
-     `(("ruby-hoe" ,ruby-hoe)
-       ("ruby-rr" ,ruby-rr)))
+     (list ruby-hoe ruby-hoe-markdown ruby-rr))
     (propagated-inputs
-     `(("ruby-nokogiri" ,ruby-nokogiri)
-       ("ruby-crass" ,ruby-crass)))
+     (list ruby-nokogiri ruby-crass))
     (synopsis "Ruby library for manipulating and transforming HTML/XML")
     (description
      "Loofah is a general library for manipulating and transforming HTML/XML
 documents and fragments.  It's built on top of Nokogiri and libxml2.")
-    (home-page "https://github.com/flavorjones/loofah")
     (license license:expat)))
 
 (define-public ruby-activesupport
@@ -6471,12 +6243,12 @@ documents and fragments.  It's built on top of Nokogiri and libxml2.")
              ;; There are no tests, instead attempt to load the library.
              (invoke "ruby" "-Ilib" "-r" "active_support"))))))
     (propagated-inputs
-     `(("ruby-concurrent" ,ruby-concurrent)
-       ("ruby-i18n" ,ruby-i18n)
-       ("ruby-minitest" ,ruby-minitest)
-       ("ruby-tzinfo" ,ruby-tzinfo)
-       ("ruby-tzinfo-data" ,ruby-tzinfo-data)
-       ("ruby-zeitwerk" ,ruby-zeitwerk)))
+     (list ruby-concurrent
+           ruby-i18n
+           ruby-minitest
+           ruby-tzinfo
+           ruby-tzinfo-data
+           ruby-zeitwerk))
     (synopsis "Ruby on Rails utility library")
     (description "ActiveSupport is a toolkit of support libraries and Ruby
 core extensions extracted from the Rails framework.  It includes support for
@@ -6522,11 +6294,11 @@ multibyte strings, internationalization, time zones, and testing.")
                 "1qg0iyw450lw6d0j1ghzg79a6l60nm1m4qmrzwzybi585861jxcx"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-rake-compiler" ,ruby-rake-compiler)))
+     (list ruby-rake-compiler))
     (inputs
-     `(("gumbo-parser" ,gumbo-parser)))
+     (list gumbo-parser))
     (propagated-inputs
-     `(("ruby-nokogiri" ,ruby-nokogiri)))
+     (list ruby-nokogiri))
     (synopsis "Ruby bindings to the Gumbo HTML5 parser")
     (description
      "Nokogumbo allows a Ruby program to invoke the Gumbo HTML5 parser and
@@ -6553,11 +6325,9 @@ access the result as a Nokogiri parsed document.")
                 "0lj0q9yhjp0q0in5majkshnki07mw8m2vxgndx4m5na6232aszl0"))))
     (build-system ruby-build-system)
     (propagated-inputs
-     `(("ruby-crass" ,ruby-crass)
-       ("ruby-nokogiri" ,ruby-nokogiri)
-       ("ruby-nokogumbo" ,ruby-nokogumbo)))
+     (list ruby-crass ruby-nokogiri ruby-nokogumbo))
     (native-inputs
-     `(("ruby-minitest" ,ruby-minitest)))
+     (list ruby-minitest))
     (synopsis "Whitelist-based HTML and CSS sanitizer")
     (description
      "Sanitize is a whitelist-based HTML and CSS sanitizer.  Given a list of
@@ -6565,10 +6335,28 @@ acceptable elements, attributes, and CSS properties, Sanitize will remove all
 unacceptable HTML and/or CSS from a string.")
     (license license:expat)))
 
+(define-public ruby-sync
+  (package
+    (name "ruby-sync")
+    (version "0.5.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (rubygems-uri "sync" version))
+        (sha256
+         (base32
+          "1z9qlq4icyiv3hz1znvsq1wz2ccqjb1zwd6gkvnwg6n50z65d0v6"))))
+    (build-system ruby-build-system)
+    (synopsis "Ruby module with a two-phase lock and counter")
+    (description "This package provides a Ruby module that provides a two-phase
+lock with a counter.")
+    (home-page "https://github.com/ruby/sync")
+    (license license:bsd-2)))
+
 (define-public ruby-oj
   (package
     (name "ruby-oj")
-    (version "3.10.1")
+    (version "3.13.9")
     (source
      (origin
        (method git-fetch)
@@ -6580,7 +6368,7 @@ unacceptable HTML and/or CSS from a string.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0i5xjx4sh816zx2c1a4d1q67k7vllg5jnnc4jy6zhbmwi1dvp5vw"))))
+         "0a24zd28y58nyhjxgrpn2k9p72vzj3zbmdrcsbhwbdycj7nn9fpd"))))
     (build-system ruby-build-system)
     (arguments
      '(#:test-target "test_all"
@@ -6592,9 +6380,7 @@ unacceptable HTML and/or CSS from a string.")
                (("Bundler\\.with_clean_env") "1.times")
                (("bundle exec ") "")))))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-rake-compiler" ,ruby-rake-compiler)))
+     (list bundler ruby-rspec ruby-rake-compiler))
     (synopsis "JSON parser for Ruby optimized for speed")
     (description
      "Oj is a JSON parser and generator for Ruby, where the encoding and
@@ -6622,7 +6408,7 @@ decoding of JSON is implemented as a C extension to Ruby.")
      "Optimized XML (Ox) is a fast XML parser and object serializer for Ruby
 written as a native C extension.  It was designed to be an alternative to
 Nokogiri and other Ruby XML parsers for generic XML parsing and as an
-alternative to Marshal for Object serialization. ")
+alternative to Marshal for Object serialization.")
     (home-page "http://www.ohler.com/ox")
     (license license:expat)))
 
@@ -6672,11 +6458,9 @@ alternative to Marshal for Object serialization. ")
     (arguments
      '(#:test-target "spec"))
     (native-inputs
-     `(("ruby-rake-compiler" ,ruby-rake-compiler)
-       ("ruby-hoe" ,ruby-hoe)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list ruby-rake-compiler ruby-hoe ruby-rspec))
     (inputs
-     `(("postgresql" ,postgresql)))
+     (list postgresql))
     (synopsis "Ruby interface to PostgreSQL")
     (description "Pg is the Ruby interface to the PostgreSQL RDBMS.  It works
 with PostgreSQL 9.0 and later.")
@@ -6686,31 +6470,6 @@ with PostgreSQL 9.0 and later.")
 (define-public ruby-byebug
   (package
     (name "ruby-byebug")
-    (version "9.0.6")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "byebug" version))
-       (sha256
-        (base32
-         "1kbfcn65rgdhi72n8x9l393b89rvi5z542459k7d1ggchpb0idb0"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:tests? #f)) ; no tests
-    (synopsis "Debugger for Ruby 2")
-    (description "Byebug is a Ruby 2 debugger implemented using the Ruby 2
-TracePoint C API for execution control and the Debug Inspector C API for call
-stack navigation.  The core component provides support that front-ends can
-build on.  It provides breakpoint handling and bindings for stack frames among
-other things and it comes with a command line interface.")
-    (home-page "https://github.com/deivid-rodriguez/byebug")
-    (license license:bsd-2)))
-
-;;; TODO: Make it the default byebug in core-updates.
-(define-public ruby-byebug-11
-  (package
-    (inherit ruby-byebug)
-    (name "ruby-byebug")
     (version "11.1.3")
     (source
      (origin
@@ -6734,9 +6493,9 @@ other things and it comes with a command line interface.")
                (("load File\\.expand_path\\(\"bundle\".*") "")
                (("require \"bundler/setup\".*") "")))
            #t))))
+    (build-system ruby-build-system)
     (arguments
-     `(#:tests? #t
-       #:phases
+     `(#:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'skip-tmp-path-sensitive-test
            (lambda _
@@ -6747,18 +6506,32 @@ other things and it comes with a command line interface.")
          (add-before 'build 'compile
            (lambda _
              (invoke "rake" "compile")))
+         (add-before 'check 'disable-misbehaving-test
+           ;; Expects 5, gets 162. From a file containing ~10 lines.
+           (lambda _
+             (substitute* "test/commands/finish_test.rb"
+               (("test_finish_inside_autoloaded_files")
+                "finish_inside_autoloaded_files"))))
          (add-before 'check 'set-home
            (lambda _
              (setenv "HOME" (getcwd))
              #t)))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-chandler" ,ruby-chandler)
-       ("ruby-minitest" ,ruby-minitest)
-       ("ruby-pry" ,ruby-pry)
-       ("ruby-rake-compiler" ,ruby-rake-compiler)
-       ("ruby-rubocop" ,ruby-rubocop)
-       ("ruby-yard" ,ruby-yard)))))
+     (list bundler
+           ruby-chandler
+           ruby-minitest
+           ruby-pry
+           ruby-rake-compiler
+           ruby-rubocop
+           ruby-yard))
+    (synopsis "Debugger for Ruby 2")
+    (description "Byebug is a Ruby 2 debugger implemented using the Ruby 2
+TracePoint C API for execution control and the Debug Inspector C API for call
+stack navigation.  The core component provides support that front-ends can
+build on.  It provides breakpoint handling and bindings for stack frames among
+other things and it comes with a command line interface.")
+    (home-page "https://github.com/deivid-rodriguez/byebug")
+    (license license:bsd-2)))
 
 (define-public ruby-netrc
   (package
@@ -6780,10 +6553,13 @@ other things and it comes with a command line interface.")
            (lambda _
              (for-each (lambda (file)
                          (invoke "ruby" "-Itest" file))
-                       (find-files "./test" "test_.*\\.rb"))
-             #t)))))
+                       (find-files "./test" "test_.*\\.rb"))))
+         (add-before 'check 'patch-tests-for-newer-ruby
+           (lambda _
+             (substitute* "test/test_netrc.rb"
+               (("Dir.pwd, '.netrc'") "Netrc.home_path, '.netrc'")))))))
     (native-inputs
-     `(("ruby-minitest" ,ruby-minitest)))
+     (list ruby-minitest))
     (synopsis "Library to read and update netrc files")
     (description
      "This library can read and update netrc files, preserving formatting
@@ -6815,9 +6591,7 @@ including comments and whitespace.")
                ((".*rake-compiler-dock.*") ""))
              #t)))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rake-compiler" ,ruby-rake-compiler)
-       ("ruby-test-unit" ,ruby-test-unit)))
+     (list bundler ruby-rake-compiler ruby-test-unit))
     (synopsis "Unicode normalization form support library")
     (description
      "This package provides unicode normalization form support for Ruby.")
@@ -6841,9 +6615,7 @@ including comments and whitespace.")
                   "0n3gq8rx49f7ln6zqlshqfg2mgqyy30rsdjlnki5mv307ykc7ad4"))))
       (build-system ruby-build-system)
       (native-inputs
-       `(("ruby-rspec" ,ruby-rspec)
-         ("ruby-yard" ,ruby-yard)
-         ("ruby-rubygems-tasks" ,ruby-rubygems-tasks)))
+       (list ruby-rspec ruby-yard ruby-rubygems-tasks))
       (synopsis "Calculate the differences between two tree-like structures")
       (description
        "This library provides functions to calculate the differences between two
@@ -6868,12 +6640,11 @@ tree-like structures.  It is similar to Ruby's built-in @code{TSort} module.")
                   "1ah2sfjh9n1p0ln2wkqzfl448ml7j4zfy6dhp1qgzq2m41php6rf"))))
       (build-system ruby-build-system)
       (propagated-inputs
-       `(("ruby-tdiff" ,ruby-tdiff)
-         ("ruby-nokogiri" ,ruby-nokogiri)))
+       (list ruby-tdiff
+             ;; Use a fixed version to prevent rebuilds; see ruby-nokogiri TODO.
+             ruby-nokogiri-1.10))
       (native-inputs
-       `(("ruby-rspec" ,ruby-rspec)
-         ("ruby-yard" ,ruby-yard)
-         ("ruby-rubygems-tasks" ,ruby-rubygems-tasks)))
+       (list ruby-rspec ruby-yard ruby-rubygems-tasks))
       (synopsis "Calculate the differences between two XML/HTML documents")
       (description
        "@code{Nokogiri::Diff} adds the ability to calculate the
@@ -6884,18 +6655,19 @@ differences (added or removed nodes) between two XML/HTML documents.")
 (define-public ruby-racc
   (package
     (name "ruby-racc")
-    (version "1.4.14")
+    (version "1.5.2")
     (source
      (origin
        (method url-fetch)
        (uri (rubygems-uri "racc" version))
        (sha256
         (base32
-         "00yhs2ag7yy5v83mqvkbnhk9bvsh6mx3808k53n61ddzx446v1zl"))))
+         "178k7r0xn689spviqzhvazzvxfq6fyjldxb3ywjbgipbfi4s8j1g"))))
     (build-system ruby-build-system)
+    (arguments
+     `(#:tests? #f))            ; Fails while parsing test instructions.
     (native-inputs
-     `(("ruby-hoe" ,ruby-hoe)
-       ("ruby-rake-compiler" ,ruby-rake-compiler)))
+     (list ruby-hoe ruby-rake-compiler))
     (synopsis "LALR(1) parser generator for Ruby")
     (description
      "Racc is a LALR(1) parser generator.  It is written in Ruby itself, and
@@ -6953,8 +6725,7 @@ generates Ruby program.")
                                  (number->string (+ 33 size-diff))))))
              #t)))))
     (native-inputs
-     `(("ruby-minitest" ,ruby-minitest)
-       ("ruby-minitest-global-expectations" ,ruby-minitest-global-expectations)))
+     (list ruby-minitest ruby-minitest-global-expectations))
     (synopsis "Unified web application interface for Ruby")
     (description "Rack provides a minimal, modular and adaptable interface for
 developing web applications in Ruby.  By wrapping HTTP requests and responses,
@@ -6985,7 +6756,7 @@ into a single method call.")
            (lambda _
              (invoke "ruby" "-Ilib" "-r" "rack/test"))))))
     (propagated-inputs
-     `(("ruby-rack" ,ruby-rack)))
+     (list ruby-rack))
     (synopsis "Testing API for Rack applications")
     (description
      "Rack::Test is a small, simple testing API for Rack applications.  It can
@@ -7010,11 +6781,9 @@ testing libraries to build on.")
      '(;; Tests missing from the gem.
        #:tests? #f))
     (propagated-inputs
-     `(("ruby-rack" ,ruby-rack)))
+     (list ruby-rack))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec-2)
-       ("ruby-rack-test" ,ruby-rack-test)))
+     (list bundler ruby-rspec-2 ruby-rack-test))
     (synopsis "Rack middleware that protects against typical web attacks")
     (description "Rack middleware that can be used to protect against typical
 web attacks.  It can protect all Rack apps, including Rails.  For instance, it
@@ -7046,8 +6815,7 @@ clickjacking, directory traversal, session hijacking and IP spoofing.")
                (invoke "rspec"))
              #t)))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list bundler ruby-rspec))
     (synopsis "Colorize printed text on ANSI terminals")
     (description
      "@code{rainbow} provides a string presenter object to colorize strings by
@@ -7070,8 +6838,7 @@ wrapping them in ANSI escape codes.")
     (arguments
      '(#:tests? #f)) ; test files not included
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list bundler ruby-rspec))
     (synopsis "Ruby test double framework")
     (description
      "RR is a test double framework that features a rich selection of double
@@ -7112,13 +6879,9 @@ techniques and a terse syntax.")
              (delete-file "spec/integration/httpbin_spec.rb")
              #t)))))
     (propagated-inputs
-     `(("ruby-http-cookie" ,ruby-http-cookie)
-       ("ruby-mime-types" ,ruby-mime-types)
-       ("ruby-netrc" ,ruby-netrc)))
+     (list ruby-http-cookie ruby-mime-types ruby-netrc))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-webmock" ,ruby-webmock-2)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list bundler ruby-webmock-2 ruby-rspec))
     (synopsis "Simple HTTP and REST client for Ruby")
     (description
      "@code{rest-client} provides a simple HTTP and REST client for Ruby,
@@ -7156,15 +6919,15 @@ inspired by the Sinatra microframework style of specifying actions:
                          (format #f "`find ~a -type f| sort`" files)))
                       #t)))))
     (native-inputs
-     `(("ruby-bump" ,ruby-bump)
-       ("ruby-oedipus-lex" ,ruby-oedipus-lex)
-       ("ruby-pry" ,ruby-pry)
-       ("ruby-racc" ,ruby-racc)
-       ("ruby-rake" ,ruby-rake)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-simplecov" ,ruby-simplecov)))
+     (list ruby-bump
+           ruby-oedipus-lex
+           ruby-pry
+           ruby-racc
+           ruby-rake
+           ruby-rspec
+           ruby-simplecov))
     (propagated-inputs
-     `(("ruby-parser" ,ruby-parser)))
+     (list ruby-parser))
     (synopsis "RuboCop's AST extensions and NodePattern functionality")
     (description "Rubocop::AST extends @code{ruby-parser} with classes used
 by RuboCop to deal with Ruby's Abstract Syntax Tree (AST), in particular:
@@ -7250,7 +7013,7 @@ better performance than @code{Regexp} and @code{String} methods from the
                          (string-append stripped "\n")))
                       #t)))))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)))
+     (list ruby-rspec))
     (synopsis "Simple arrays of objects to arrays of ranges compressor")
     (description "RangeCompresses is a tiny library that allows compressing
 arrays of objects into arrays of ranges.  For example, it can turn the
@@ -7259,35 +7022,35 @@ following: @code{[1, 2, 3, 4, 6, 8, 9, 10]} into @code{[1..4, 6..6, 8..10]}.")
     (license license:expat)))
 
 (define-public ruby-regexp-property-values
-  (package
-    (name "ruby-regexp-property-values")
-    (version "1.0.0")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference              ;no test suite in distributed gem
-             (url "https://github.com/jaynetics/regexp_property_values")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "0l3fjmscg1wxn7kc6bl022cc6k5d91pwb7daq1b5w36kvsx52w1j"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:test-target "default"))
-    (native-inputs
-     `(("ruby-character-set" ,ruby-character-set)
-       ("ruby-rake-compiler" ,ruby-rake-compiler)
-       ("ruby-range-compressor" ,ruby-range-compressor)
-       ("ruby-rspec" ,ruby-rspec)))
-    (synopsis "Inspect Ruby's regex engine property values")
-    (description "This small library lets you see which property values are
+  (let ((commit "03007a66c912949a7130b973cc0eca109c20811f")
+        (revision "1"))
+    (package
+      (name "ruby-regexp-property-values")
+      (version (git-version "1.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference              ;no test suite in distributed gem
+               (url "https://github.com/jaynetics/regexp_property_values")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "1zsax784p16zdkf60lyq9z924zvsafhx9ckxx9srsgkyiqrifi1s"))))
+      (build-system ruby-build-system)
+      (arguments
+       '(#:test-target "default"))
+      (native-inputs
+       (list ruby-character-set ruby-rake ruby-rake-compiler
+             ruby-range-compressor ruby-rspec))
+      (synopsis "Inspect Ruby's regex engine property values")
+      (description "This small library lets you see which property values are
 supported by the regular expression engine of the Ruby version you are running
 and can directly read out their code point ranges.  In other words, it
 determines all supported values for @code{\\p{value}} expressions and what
 they match.")
-    (home-page "https://github.com/jaynetics/regexp_property_values")
-    (license license:expat)))
+      (home-page "https://github.com/jaynetics/regexp_property_values")
+      (license license:expat))))
 
 (define-public ruby-regexp-parser
   (package
@@ -7316,10 +7079,8 @@ they match.")
                       (delete-file-recursively "pkg")
                       #t)))))
     (native-inputs
-     `(("ragel" ,ragel)
-       ("ruby-regexp-property-values" ,ruby-regexp-property-values)
-       ("ruby-rspec" ,ruby-rspec)))
-    (synopsis "A regular expression parser library for Ruby ")
+     (list ragel ruby-regexp-property-values ruby-rspec))
+    (synopsis "Regular expression parser library for Ruby")
     (description "A Ruby gem for tokenizing, parsing, and transforming regular
 expressions.  It comprises the following components:
 @itemize
@@ -7351,7 +7112,7 @@ expressions.  It comprises the following components:
                (invoke "rspec"))
              #t)))))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)))
+     (list ruby-rspec))
     (synopsis "Minitest/RSpec parallel test runner for CI environments")
     (description "The test-queue module is a parallel test runner,
 built using a centralized queue to ensure optimal distribution of
@@ -7414,14 +7175,13 @@ run.")
        ("ruby-webmock" ,ruby-webmock)
        ("ruby-yard" ,ruby-yard)))
     (propagated-inputs
-     `(("ruby-parallel" ,ruby-parallel)
-       ("ruby-parser" ,ruby-parser)
-       ("ruby-rainbow" ,ruby-rainbow)
-       ("ruby-regexp-parser" ,ruby-regexp-parser)
-       ("ruby-rexml" ,ruby-rexml)
-       ("ruby-rubocop-ast" ,ruby-rubocop-ast)
-       ("ruby-progressbar" ,ruby-progressbar)
-       ("ruby-unicode-display-width" ,ruby-unicode-display-width)))
+     (list ruby-parallel
+           ruby-parser
+           ruby-rainbow
+           ruby-regexp-parser
+           ruby-rubocop-ast
+           ruby-progressbar
+           ruby-unicode-display-width))
     (synopsis "Ruby code style checking tool")
     (description
      "@code{rubocop} is a Ruby code style checking tool.  It aims to enforce
@@ -7471,7 +7231,7 @@ contexts without performance penalties.")
          "00rcscz16idp6dx0dk5yi5i0fz593i3r6anbn5bg2q07v3i025wm"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-bacon" ,ruby-bacon)))
+     (list ruby-bacon))
     (synopsis "Creole markup language converter")
     (description
      "Creole is a lightweight markup language and this library for converting
@@ -7532,7 +7292,7 @@ abstraction for Ruby.")
          "1n9397j7kh4vvikfann1467qgksc679imlr50hax3lk1q3af8kdw"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-hoe" ,ruby-hoe)))
+     (list ruby-hoe))
     (synopsis "Iterations per second enhancement for the Ruby Benchmark module")
     (description "Benchmark-ips enhances the Ruby Benchmark module with the
 iterations per second count.  For short snippets of code, it can automatically
@@ -7566,10 +7326,10 @@ figure out how many times to run the code to get interesting data.")
                     (lambda _
                       (invoke "rspec"))))))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)))
+     (list ruby-rspec))
     (inputs
-     `(("zeromq" ,zeromq)))
-    (propagated-inputs `(("ruby-ffi" ,ruby-ffi)))
+     (list zeromq))
+    (propagated-inputs (list ruby-ffi))
     (synopsis "Low-level Ruby FFI wrapper for the ZeroMQ networking library")
     (description "This library only provides the FFI wrapper for the ZeroMQ
 networking library.  It can be used to implement a Ruby API for the ZeroMQ
@@ -7595,9 +7355,9 @@ library.")
                               (lambda _
                                 (invoke "rspec"))))))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)))
+     (list ruby-rspec))
     (propagated-inputs
-     `(("ruby-ffi-rzmq-core" ,ruby-ffi-rzmq-core)))
+     (list ruby-ffi-rzmq-core))
     (synopsis "High-level Ruby wrapper for the ZeroMQ networking library")
     (description "This library provides a high-level API that wraps the ZeroMQ
 networking library using the Ruby foreign function interface (FFI).  It is a
@@ -7619,8 +7379,7 @@ for FFI.")
          "0yrdchs3psh583rjapkv33mljdivggqn99wkydkjdckcjn43j3cz"))))
     (build-system ruby-build-system)
     (propagated-inputs
-     `(("ruby-addressable" ,ruby-addressable)
-       ("ruby-faraday" ,ruby-faraday)))
+     (list ruby-addressable ruby-faraday))
     (synopsis "Experimental hypermedia agent for Ruby")
     (description "Sawyer is an experimental hypermedia agent for Ruby built on
 top of Faraday.")
@@ -7641,8 +7400,7 @@ top of Faraday.")
     (build-system ruby-build-system)
     (arguments '(#:tests? #f))          ;no test suite in the gem release
     (propagated-inputs
-     `(("ruby-faraday" ,ruby-faraday)
-       ("ruby-sawyer" ,ruby-sawyer)))
+     (list ruby-faraday ruby-sawyer))
     (synopsis "Ruby toolkit for the GitHub API")
     (description "Octokit wraps the GitHub API in a flat API client that
 follows Ruby conventions and requires little knowledge of REST.")
@@ -7662,10 +7420,9 @@ follows Ruby conventions and requires little knowledge of REST.")
          "1n8a4mr2jkcz5vaaps45g2rxa2pzy1wb7cylgw85xmmyyp14lnrr"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-rubocop" ,ruby-rubocop)))
+     (list ruby-rubocop))
     (propagated-inputs
-     `(("ruby-netrc" ,ruby-netrc)
-       ("ruby-octokit" ,ruby-octokit)))
+     (list ruby-netrc ruby-octokit))
     (synopsis "Sync CHANGELOG entries to GitHub's release notes")
     (description "Chandler syncs a project's CHANGELOG file entries to
 GitHub's release notes to remove the need of manually entering release
@@ -7695,12 +7452,9 @@ notes.")
                       (setenv "HOME" (getcwd))
                       #t)))))
     (native-inputs
-     `(("ruby-chandler" ,ruby-chandler)
-       ("ruby-rubocop" ,ruby-rubocop)
-       ("ruby-simplecov" ,ruby-simplecov)))
+     (list ruby-chandler ruby-rubocop ruby-simplecov))
     (propagated-inputs
-     `(("ruby-byebug" ,ruby-byebug-11)
-       ("ruby-pry" ,ruby-pry)))
+     (list ruby-byebug ruby-pry))
     (synopsis "Step-by-step debugging and stack navigation in Pry")
     (description "This package adds step-by-step debugging and stack
 navigation capabilities to @code{pry}, using @code{byebug}.")
@@ -7731,8 +7485,7 @@ navigation capabilities to @code{pry}, using @code{byebug}.")
            (lambda _
              (invoke "rake" "compile"))))))
     (native-inputs
-     `(("ruby-mocha" ,ruby-mocha)
-       ("ruby-rake-compiler" ,ruby-rake-compiler)))
+     (list ruby-mocha ruby-rake-compiler))
     (synopsis "Sampling profiler for Ruby code")
     (description
      "@code{stackprof} is a fast sampling profiler for Ruby code, with cpu,
@@ -7756,7 +7509,7 @@ wallclock and object allocation samplers.")
     ;; (see: https://github.com/banister/binding_of_caller/issues/76).
     (arguments '(#:tests? #f))
     (propagated-inputs
-     `(("ruby-debug-inspector" ,ruby-debug-inspector)))
+     (list ruby-debug-inspector))
     (synopsis "Retrieve the binding of a method's caller")
     (description "The @code{binding_of_caller} module provides the
 @code{Binding#of_caller} method.  It allows accessing bindings from upper
@@ -7778,8 +7531,7 @@ frames in the call stack and can evaluate code in that context.")
     (build-system ruby-build-system)
     (arguments '(#:tests? #f))          ;no test suite in gem release
     (propagated-inputs
-     `(("ruby-binding-of-caller" ,ruby-binding-of-caller)
-       ("ruby-pry" ,ruby-pry)))
+     (list ruby-binding-of-caller ruby-pry))
     (synopsis "Call-stack navigation plugin for the Pry REPL")
     (description "@code{pry-stack_explorer} is a plugin for the Pry REPL that
 add support to navigate the call-stack.")
@@ -7808,14 +7560,14 @@ variable length integers (varint) in Ruby Protocol Buffers.")
 (define-public ruby-ruby-prof
   (package
     (name "ruby-ruby-prof")
-    (version "1.4.1")
+    (version "1.4.3")
     (source
      (origin
        (method url-fetch)
        (uri (rubygems-uri "ruby-prof" version))
        (sha256
         (base32
-         "12cd91m08ih0imfpy4k87618hd4mhyz291a6bx2hcskza4nf6d27"))))
+         "1r3xalp91l07m0cwllcxjzg6nkviiqnxkcbgg5qnzsdji6rgy65m"))))
     (build-system ruby-build-system)
     (arguments
      `(#:phases
@@ -7841,10 +7593,7 @@ variable length integers (varint) in Ruby Protocol Buffers.")
           (lambda _
             (invoke "rake" "compile"))))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-minitest" ,ruby-minitest)
-       ("ruby-rake-compiler" ,ruby-rake-compiler)
-       ("ruby-rdoc" ,ruby-rdoc)))
+     (list bundler ruby-minitest ruby-rake-compiler ruby-rdoc))
     (synopsis "Fast code profiler for Ruby")
     (description "RubyProf is a fast code profiler for Ruby.  Its features
 include:
@@ -7918,7 +7667,7 @@ Profiling multiple threads simultaneously is supported.
     (propagated-inputs
      `(("ruby-protobuf" ,ruby-protobuf-cucumber)))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)))
+     (list ruby-rspec))
     (home-page "https://github.com/cucumber/messages-ruby")
     (synopsis "Cucumber Messages for Ruby (Protocol Buffers)")
     (description "Cucumber Messages for Ruby is a library which allows
@@ -7941,8 +7690,7 @@ Cucumber.")
                 "1dwa8632nc6kijv8p257jl64rsjmc0fimlaqvxlkdi2h9n1nympb"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-cucumber-messages" ,ruby-cucumber-messages)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list ruby-cucumber-messages ruby-rspec))
     (arguments
      `(#:test-target "spec"))
     (synopsis "Gherkin parser for Ruby")
@@ -8021,18 +7769,15 @@ It is intended be used by all Cucumber implementations to parse
          (add-before 'check 'set-home
            (lambda _ (setenv "HOME" "/tmp") #t)))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-fuubar" ,ruby-fuubar)
-       ("ruby-simplecov" ,ruby-simplecov)))
-    (propagated-inputs
-     `(("ruby-childprocess" ,ruby-childprocess)
-       ("ruby-contracts" ,ruby-contracts)
-       ("ruby-cucumber" ,ruby-cucumber)
-       ("ruby-ffi" ,ruby-ffi)
-       ("ruby-rspec-expectations" ,ruby-rspec-expectations)
-       ("ruby-thor" ,ruby-thor)
-       ("ruby-yard" ,ruby-yard)))
+     (list bundler ruby-rspec ruby-fuubar ruby-simplecov))
+    (propagated-inputs
+     (list ruby-childprocess
+           ruby-contracts
+           ruby-cucumber
+           ruby-ffi
+           ruby-rspec-expectations
+           ruby-thor
+           ruby-yard))
     (synopsis "Test command-line applications with Cucumber, RSpec or Minitest")
     (description
      "Aruba is an extension for Cucumber, RSpec and Minitest for testing
@@ -8067,8 +7812,8 @@ language.")
   (build-system ruby-build-system)
   (arguments
    `(#:test-target "spec"))
-  (propagated-inputs `(("ruby-ffi" ,ruby-ffi)))
-  (native-inputs `(("ruby-rspec" ,ruby-rspec)))
+  (propagated-inputs (list ruby-ffi))
+  (native-inputs (list ruby-rspec))
   (synopsis "Ruby interface for gathering system information")
   (description "The sys-uname library provides an interface for gathering
 information about your current platform.  It allows retrieving information
@@ -8100,10 +7845,9 @@ such as the OS name, OS version, system name, etc.")
                     (lambda _
                       (invoke "rspec"))))))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)))
+     (list ruby-rspec))
     (propagated-inputs
-     `(("ruby-cucumber-messages" ,ruby-cucumber-messages)
-       ("ruby-sys-uname" ,ruby-sys-uname)))
+     (list ruby-cucumber-messages ruby-sys-uname))
     (synopsis "Function to create @code{Meta} messages for Cucumber Ruby")
     (description "The @code{createMeta} utility function allows generating
 system-specific @code{Meta} messages for Cucumber Ruby.")
@@ -8128,9 +7872,9 @@ system-specific @code{Meta} messages for Cucumber Ruby.")
                     (lambda _
                       (invoke "rspec"))))))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)))
+     (list ruby-rspec))
     (propagated-inputs
-     `(("ruby-cucumber-messages" ,ruby-cucumber-messages)))
+     (list ruby-cucumber-messages))
     (synopsis "HTML formatter for Cucumber")
     (description "Cucumber HTML Formatter produces a HTML report for Cucumber
 runs.  It is built on top of cucumber-react and works with any Cucumber
@@ -8178,24 +7922,24 @@ master/html-formatter/ruby")
              (setenv "HOME" (getcwd))
              #t)))))
     (propagated-inputs
-     `(("ruby-builder" ,ruby-builder)
-       ("ruby-cucumber-core" ,ruby-cucumber-core)
-       ("ruby-cucumber-create-meta" ,ruby-cucumber-create-meta)
-       ("ruby-cucumber-html-formatter" ,ruby-cucumber-html-formatter)
-       ("ruby-cucumber-messages" ,ruby-cucumber-messages)
-       ("ruby-cucumber-wire" ,ruby-cucumber-wire)
-       ("ruby-diff-lcs" ,ruby-diff-lcs)
-       ("ruby-gherkin" ,ruby-gherkin)
-       ("ruby-multi-json" ,ruby-multi-json)
-       ("ruby-multi-test" ,ruby-multi-test)))
-    (native-inputs
-     `(;; Use a untested version of aruba, to avoid a circular dependency, as
-       ;; ruby-aruba depends on ruby-cucumber.
-       ("ruby-aruba" ,ruby-aruba-without-tests)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-pry" ,ruby-pry)
-       ("ruby-nokogiri" ,ruby-nokogiri)
-       ("ruby-rubocop" ,ruby-rubocop)))
+     (list ruby-builder
+           ruby-cucumber-core
+           ruby-cucumber-create-meta
+           ruby-cucumber-html-formatter
+           ruby-cucumber-messages
+           ruby-cucumber-wire
+           ruby-diff-lcs
+           ruby-gherkin
+           ruby-multi-json
+           ruby-multi-test))
+    (native-inputs
+     (list ;; Use a untested version of aruba, to avoid a circular dependency, as
+           ;; ruby-aruba depends on ruby-cucumber.
+           ruby-aruba-without-tests
+           ruby-rspec
+           ruby-pry
+           ruby-nokogiri
+           ruby-rubocop))
     (synopsis "Describe automated tests in plain language")
     (description "Cucumber is a tool for running automated tests written in
 plain language.  It's designed to support a Behaviour Driven Development (BDD)
@@ -8238,10 +7982,7 @@ software development workflow.")
                          (string-append stripped ")\n")))
                       #t)))))
     (propagated-inputs
-     `(("ruby-json" ,ruby-json)
-       ("ruby-term-ansicolor" ,ruby-term-ansicolor)
-       ("ruby-thor" ,ruby-thor)
-       ("ruby-tins" ,ruby-tins)))
+     (list ruby-json ruby-term-ansicolor ruby-thor ruby-tins))
     (synopsis "Ruby implementation of the Coveralls API")
     (description "This package provides a Ruby implementation of the Coveralls
 API.")
@@ -8293,15 +8034,11 @@ in already-indented code.")
                  "'cucumber-tag-expressions', '>=2.0.0'\n"))
              #t)))))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)
-       ("ruby-coveralls" ,ruby-coveralls)
-       ("ruby-rubocop" ,ruby-rubocop)
-       ("ruby-simplecov" ,ruby-simplecov)
-       ("ruby-unindent" ,ruby-unindent)))
+     (list ruby-rspec ruby-coveralls ruby-rubocop ruby-simplecov
+           ruby-unindent))
     (propagated-inputs
-     `(("ruby-cucumber-messages" ,ruby-cucumber-messages)
-       ("ruby-gherkin" ,ruby-gherkin)
-       ("ruby-cucumber-tag-expressions" ,ruby-cucumber-tag-expressions)))
+     (list ruby-cucumber-messages ruby-gherkin
+           ruby-cucumber-tag-expressions))
     (synopsis "Core library for the Cucumber BDD app")
     (description "Cucumber is a tool for running automated tests
 written in plain language.  Because they're written in plain language,
@@ -8329,8 +8066,7 @@ and trust on your team.")
     (arguments
      '(#:test-target "spec"))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)
-       ("ruby-simplecov" ,ruby-simplecov)))
+     (list ruby-rspec ruby-simplecov))
     (synopsis "Simpler alternative to Regular Expressions")
     (description "Cucumber Expressions offer similar functionality to Regular
 Expressions, with a syntax that is easier to read and write.  Cucumber
@@ -8360,9 +8096,8 @@ Expressions are extensible with parameter types.")
                ((" 10\\.1") " 10.2"))
              #t)))))
     (propagated-inputs
-     `(("ruby-cucumber-core" ,ruby-cucumber-core)
-       ("ruby-cucumber-expressions" ,ruby-cucumber-expressions)
-       ("ruby-cucumber-messages" ,ruby-cucumber-messages)))
+     (list ruby-cucumber-core ruby-cucumber-expressions
+           ruby-cucumber-messages))
     (synopsis "Cucumber wire protocol plugin")
     (description "Cucumber's wire protocol allows step definitions to be
 implemented and invoked on any platform.")
@@ -8387,7 +8122,7 @@ implemented and invoked on any platform.")
     (arguments
      `(#:test-target "spec"))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)))
+     (list ruby-rspec))
     (synopsis "Cucumber tag expressions for Ruby")
     (description "Cucumber tag expression parser for Ruby.  A tag expression
 is an infix boolean expression used by Cucumber.")
@@ -8409,8 +8144,7 @@ is an infix boolean expression used by Cucumber.")
     (arguments
      '(#:test-target "default"))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rake-compiler" ,ruby-rake-compiler)))
+     (list bundler ruby-rake-compiler))
     (synopsis "Provides access for bindings relating to Ruby exceptions")
     (description
      "@code{bindex} provides a way to access the bindings that relate to
@@ -8434,7 +8168,7 @@ exception occurred.")
     (arguments
      `(#:tests? #f)) ; rake errors, missing shoulda
     (propagated-inputs
-     `(("ruby-log4r" ,ruby-log4r)))
+     (list ruby-log4r))
     (synopsis "Log4r wrapper for Ruby")
     (description "Bio-logger is a wrapper around Log4r adding extra logging
 features such as filtering and fine grained logging.")
@@ -8464,8 +8198,7 @@ features such as filtering and fine grained logging.")
                 "$LOAD_PATH << 'lib'; require 'yajl'"))
              #t)))))
      (native-inputs
-      `(("ruby-rake-compiler" ,ruby-rake-compiler)
-        ("ruby-rspec" ,ruby-rspec)))
+      (list ruby-rake-compiler ruby-rspec))
      (synopsis "Streaming JSON parsing and encoding library for Ruby")
      (description
       "Ruby C bindings to the Yajl JSON stream-based parser library.  The API
@@ -8572,10 +8305,9 @@ Test.run :default do |run|
 end")))
              (invoke "ruby" "-Ilib" "-rrubytest" ".test"))))))
     (native-inputs
-     `(("ruby-ae" ,ruby-ae)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list ruby-ae ruby-rspec))
     (propagated-inputs
-     `(("ruby-rubytest" ,ruby-rubytest)))
+     (list ruby-rubytest))
     (synopsis "Behavior-Driven Development (BDD) framework built on RubyTest")
     (description "Spectroscope is a Behavior-Driven Development (BDD)
 framework built on RubyTest, designed to emulate RSpec in most respects.  It
@@ -8625,12 +8357,9 @@ TomDoc format.")
                     (lambda _
                       (invoke "rubytest" "-Ilib" "-Itest" "test/"))))))
     (native-inputs
-     `(("ruby-rubytest-cli" ,ruby-rubytest-cli)
-       ("ruby-spectroscope" ,ruby-spectroscope)
-       ("ruby-ae" ,ruby-ae)))
+     (list ruby-rubytest-cli ruby-spectroscope ruby-ae))
     (propagated-inputs
-     `(("ruby-tomparse" ,ruby-tomparse)
-       ("ruby-yard" ,ruby-yard)))
+     (list ruby-tomparse ruby-yard))
     (synopsis "TomDoc syntax for YARD")
     (description "This module adds support for the TomDoc documentation format
 to YARD, a documentation generation tool for Ruby.")
@@ -8669,7 +8398,7 @@ simple case of executing code based on the flags or parameters passed.")
                 "1mldhjn62g53vx4gq2qdqg2lgjvyrqxa8d0khf8347bbfgi16d32"))))
     (build-system ruby-build-system)
     (propagated-inputs
-     `(("ruby-clap" ,ruby-clap)))
+     (list ruby-clap))
     (synopsis "Run tests in separate processes")
     (description
      "Cutest runs tests in separate processes to avoid shared state.")
@@ -8707,8 +8436,7 @@ simple case of executing code based on the flags or parameters passed.")
     (inputs
      `(("pygments" ,python-pygments)))
     (native-inputs
-     `(("ruby-cutest" ,ruby-cutest)
-       ("ruby-nokogiri" ,ruby-nokogiri)))
+     (list ruby-cutest ruby-nokogiri))
     (synopsis "Thin Ruby wrapper around pygmentize")
     (description
      "Pygmentize provides a simple way to call pygmentize from within a Ruby
@@ -8730,8 +8458,10 @@ application.")
     (build-system ruby-build-system)
     (arguments
      '(#:tests? #f))               ; test suite tries to connect to google.com
+    (inputs
+     (list openssl))
     (native-inputs
-     `(("ruby-rake-compiler" ,ruby-rake-compiler)))
+     (list ruby-rake-compiler))
     (synopsis "Single-threaded network event framework for Ruby")
     (description
      "EventMachine implements a single-threaded engine for arbitrary network
@@ -8781,9 +8511,7 @@ used to create both network servers and clients.")
              (delete-file-recursively "pkg")
              #t)))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rake" ,ruby-rake)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list bundler ruby-rake ruby-rspec))
     (synopsis "Simplifies checking for Ruby implementation")
     (description
      "@code{ruby_engine} provides an RubyEngine class that can be used to
@@ -8814,8 +8542,7 @@ name and provides query methods such as @{RubyEngine.mri?}.")
            (lambda _
              (invoke "ruby" "-Ilib" "bin/turn" "-h"))))))
     (propagated-inputs
-     `(("ruby-ansi" ,ruby-ansi)
-       ("ruby-minitest" ,ruby-minitest-4)))
+     (list ruby-ansi ruby-minitest-4))
     (synopsis "Alternate set of alternative runners for MiniTest")
     (description
      "TURN provides a set of alternative runners for MiniTest which are both
@@ -8842,7 +8569,7 @@ that TURN is no longer being maintained.")
          ;; This phase breaks the tests, as it patches some of the test data.
          (delete 'patch-source-shebangs))))
     (native-inputs
-     `(("ruby-bacon" ,ruby-bacon)))
+     (list ruby-bacon))
     (synopsis "Ruby library for MIME detection by extension or content")
     (description
      "@acronym{MIME, Multipurpose Internet Mail Extensions} detection by
@@ -8864,7 +8591,7 @@ database.")
          "04my3746hwa4yvbx1ranhfaqkgf6vavi1kyijjnw8w3dy37vqhkm"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-hoe" ,ruby-hoe)))
+     (list ruby-hoe))
     (synopsis "Registry for information about MIME media type definitions")
     (description
      "@code{mime-types-data} provides a registry for information about
@@ -8888,14 +8615,14 @@ look up the likely MIME type definitions.")
          "0087z9kbnlqhci7fxh9f6il63hj1k02icq2rs0c6cppmqchr753m"))))
     (build-system ruby-build-system)
     (propagated-inputs
-     `(("ruby-mime-types-data" ,ruby-mime-types-data)))
+     (list ruby-mime-types-data))
     (native-inputs
-     `(("ruby-hoe" ,ruby-hoe)
-       ("ruby-fivemat" ,ruby-fivemat)
-       ("ruby-minitest-focus" ,ruby-minitest-focus)
-       ("ruby-minitest-rg" ,ruby-minitest-rg)
-       ("ruby-minitest-bonus-assertions" ,ruby-minitest-bonus-assertions)
-       ("ruby-minitest-hooks" ,ruby-minitest-hooks)))
+     (list ruby-hoe
+           ruby-fivemat
+           ruby-minitest-focus
+           ruby-minitest-rg
+           ruby-minitest-bonus-assertions
+           ruby-minitest-hooks))
     (synopsis "Library and registry for MIME content type definitions")
     (description "The mime-types library provides a library and registry for
 information about Multipurpose Internet Mail Extensions (MIME) content type
@@ -8963,11 +8690,9 @@ neither too verbose nor too minimal.")
            ;; This file exists in the repository but is not distributed.
            (lambda _ (invoke "touch" ".gemtest"))))))
     (inputs
-     `(("sqlite" ,sqlite)))
+     (list sqlite))
     (native-inputs
-     `(("ruby-hoe" ,ruby-hoe)
-       ("ruby-rake-compiler" ,ruby-rake-compiler)
-       ("ruby-mini-portile" ,ruby-mini-portile)))
+     (list ruby-hoe ruby-rake-compiler ruby-mini-portile))
     (synopsis "Interface with SQLite3 databases")
     (description
      "This module allows Ruby programs to interface with the SQLite3 database
@@ -9026,7 +8751,7 @@ names.")
              ;; just import the library to test.
              (invoke "ruby" "-Ilib" "-r" "shoulda-matchers"))))))
     (propagated-inputs
-     `(("ruby-activesupport" ,ruby-activesupport)))
+     (list ruby-activesupport))
     (synopsis "Collection of testing matchers extracted from Shoulda")
     (description
      "Shoulda Matchers provides RSpec- and Minitest-compatible one-liners that
@@ -9066,8 +8791,7 @@ more complex, and error-prone.")
            ;; just import the library to test.
            (lambda _ (invoke "ruby" "-Ilib" "-r" "shoulda"))))))
     (propagated-inputs
-     `(("ruby-shoulda-context" ,ruby-shoulda-context)
-       ("ruby-shoulda-matchers" ,ruby-shoulda-matchers-2)))
+     (list ruby-shoulda-context ruby-shoulda-matchers-2))
     (synopsis "Context framework and matchers for testing")
     (description
      "@code{shoulda} is a meta-package combining @code{shoulda-context} and
@@ -9099,11 +8823,9 @@ more complex, and error-prone.")
                (("^gemspec") "gem 'test-unit'\ngemspec"))
              #t)))))
     (propagated-inputs
-     `(("ruby-unf-ext" ,ruby-unf-ext)))
+     (list ruby-unf-ext))
     (native-inputs
-     `(("ruby-shoulda" ,ruby-shoulda)
-       ("bundler" ,bundler)
-       ("ruby-test-unit" ,ruby-test-unit)))
+     (list ruby-shoulda bundler ruby-test-unit))
     (synopsis "Unicode Normalization Form support to Ruby and JRuby")
     (description
      "@code{ruby-unf} is a wrapper library to bring Unicode Normalization Form
@@ -9127,7 +8849,7 @@ support to both Ruby and JRuby.  It uses @code{unf_ext} on CRuby and
     (arguments
      '(#:tests? #f)) ; No included tests
     (propagated-inputs
-     `(("ruby-rack" ,ruby-rack)))
+     (list ruby-rack))
     (synopsis "Rack middleware providing authentication")
     (description
      "Warden is a Rack-based middleware that provides a mechanism for
@@ -9171,11 +8893,9 @@ authentication in Ruby web applications.")
                (invoke "bundle" "exec" "rspec"))
              #t)))))
     (propagated-inputs
-     `(("ruby-warden" ,ruby-warden)))
+     (list ruby-warden))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec-2)
-       ("ruby-rack-test" ,ruby-rack-test)))
+     (list bundler ruby-rspec-2 ruby-rack-test))
     (synopsis "OAuth 2.0 strategies for Warden")
     (description
      "This library extends Warden to support OAuth 2.0 authorized API
@@ -9196,12 +8916,9 @@ requests.")
          "1hdlbvfw316lkz251qnfk79drmaay7l51kidvicz41nhvw12xz8v"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list bundler ruby-rspec))
     (propagated-inputs
-     `(("ruby-addressable" ,ruby-addressable)
-       ("ruby-crack" ,ruby-crack)
-       ("ruby-hashdiff" ,ruby-hashdiff)))
+     (list ruby-addressable ruby-crack ruby-hashdiff))
     (synopsis "Allows stubbing and setting expectations on HTTP requests")
     (description
      "WebMock allows stubbing HTTP requests and setting expectations on HTTP
@@ -9278,9 +8995,7 @@ display width of strings in Ruby.")
                (("Bundler\\.setup.*") "nil\n"))
              #t)))))
     (native-inputs
-     `(("ruby-rdoc" ,ruby-rdoc)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-rubygems-tasks" ,ruby-rubygems-tasks)))
+     (list ruby-rdoc ruby-rspec ruby-rubygems-tasks))
     (synopsis "Ruby library to help check the Ruby version")
     (description "@code{ruby_version} provides a @code{RubyVersion} module to simplify
 checking for the right Ruby version in software.")
@@ -9301,7 +9016,7 @@ checking for the right Ruby version in software.")
    (arguments
     '(#:tests? #f))                     ; no included tests
    (propagated-inputs
-    `(("ruby-websocket-extensions" ,ruby-websocket-extensions)))
+    (list ruby-websocket-extensions))
    (synopsis "WebSocket protocol handler with pluggable I/O")
    (description
     "@code{websocket-driver} provides a complete implementation of the
@@ -9356,11 +9071,9 @@ extension plugins.")
                (("<test-unit>.freeze, \\[\\\"~> 2.5.5") "<test-unit>, [\">0"))
              #t)))))
     (propagated-inputs
-     `(("ruby-unf" ,ruby-unf)))
+     (list ruby-unf))
     (native-inputs
-     `(("ruby-shoulda" ,ruby-shoulda)
-       ("bundler" ,bundler)
-       ("ruby-test-unit" ,ruby-test-unit)))
+     (list ruby-shoulda bundler ruby-test-unit))
     (synopsis "Domain name manipulation library")
     (description
      "@code{domain_name} is a Domain name manipulation library.  It parses a
@@ -9393,7 +9106,7 @@ Suffix List.")
                 "Bundler::GemHelper.gemspec.version"))
              #t)))))
     (propagated-inputs
-     `(("ruby-domain-name" ,ruby-domain-name)))
+     (list ruby-domain-name))
     (native-inputs
      `(("rubysimplecov" ,ruby-simplecov)
        ("bundler" ,bundler)
@@ -9440,7 +9153,7 @@ It has built-in support for the legacy @code{cookies.txt} and
                          "test/runner.rb")
                  #t))))))
     (native-inputs
-     `(("ruby-rack" ,ruby-rack)))
+     (list ruby-rack))
     (synopsis
      "Make HTTP requests with support for HTTPS, Cookies, authentication and more")
     (description
@@ -9550,11 +9263,9 @@ subprocess.")
            (lambda _
              (invoke "rspec" "spec/bio-commandeer_spec.rb"))))))
     (propagated-inputs
-     `(("ruby-bio-logger" ,ruby-bio-logger)
-       ("ruby-systemu" ,ruby-systemu)))
+     (list ruby-bio-logger ruby-systemu))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list bundler ruby-rspec))
     (synopsis "Simplified running of shell commands from within Ruby")
     (description
      "Bio-commandeer provides an opinionated method of running shell commands
@@ -9587,7 +9298,7 @@ detail to ease debugging.")
            (lambda _
              (invoke "ruby" "-Ilib" "-r" "rubytest"))))))
     (propagated-inputs
-     `(("ruby-ansi" ,ruby-ansi)))
+     (list ruby-ansi))
     (synopsis "Universal test harness for Ruby")
     (description
      "Rubytest is a testing meta-framework for Ruby.  It can handle any
@@ -9645,8 +9356,7 @@ make use of.")
            (lambda _
              (invoke "ruby" "-Ilib" "bin/qed" "--copyright"))))))
     (propagated-inputs
-     `(("ruby-ansi" ,ruby-ansi)
-       ("ruby-brass" ,ruby-brass)))
+     (list ruby-ansi ruby-brass))
     (synopsis "Test framework utilizing literate programming techniques")
     (description
      "@dfn{Quality Ensured Demonstrations} (QED) is a test framework for
@@ -9711,9 +9421,9 @@ and locking between worker processes.")
                (symlink "../.index" file)
                #t))))))
     (propagated-inputs
-     `(("ruby-ansi" ,ruby-ansi)))
+     (list ruby-ansi))
     (native-inputs
-     `(("ruby-qed" ,ruby-qed)))
+     (list ruby-qed))
     (synopsis "Assertions library")
     (description
      "Assertive Expressive (AE) is an assertions library specifically designed
@@ -9738,11 +9448,9 @@ for reuse by other test frameworks.")
        (modify-phases %standard-phases
          (replace 'check (lambda _ (invoke "qed"))))))
     (propagated-inputs
-     `(("ruby-ae" ,ruby-ae)
-       ("ruby-ansi" ,ruby-ansi)
-       ("ruby-rubytest" ,ruby-rubytest)))
+     (list ruby-ae ruby-ansi ruby-rubytest))
     (native-inputs
-     `(("ruby-qed" ,ruby-qed)))
+     (list ruby-qed))
     (synopsis "Test framework correlating code structure and test unit")
     (description
      "Lemon is a unit testing framework that enforces highly formal
@@ -9766,8 +9474,7 @@ focus concern on individual units of behavior.")
     (arguments
      `(#:tests? #f)) ; no tests
     (propagated-inputs
-     `(("ruby-ansi" ,ruby-ansi)
-       ("ruby-rubytest" ,ruby-rubytest)))
+     (list ruby-ansi ruby-rubytest))
     (synopsis "Command-line interface for rubytest")
     (description
      "Rubytest CLI is a command-line interface for running tests for
@@ -9795,9 +9502,7 @@ Rubytest-based test frameworks.  It provides the @code{rubytest} executable.")
              (invoke "qed")
              (invoke "rubytest" "-Ilib" "-Itest" "test/"))))))
     (native-inputs
-     `(("ruby-rubytest-cli" ,ruby-rubytest-cli)
-       ("ruby-qed" ,ruby-qed)
-       ("ruby-lemon" ,ruby-lemon)))
+     (list ruby-rubytest-cli ruby-qed ruby-lemon))
     (synopsis "Hash-like classes with extra features")
     (description
      "The Hashery is a tight collection of @code{Hash}-like classes.
@@ -9829,7 +9534,7 @@ specific use case.")
            (lambda _
              (invoke "rspec" "spec/rc4_spec.rb"))))))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec-2)))
+     (list ruby-rspec-2))
     (synopsis "Implementation of the RC4 algorithm")
     (description
      "RubyRC4 is a pure Ruby implementation of the RC4 algorithm.")
@@ -9849,7 +9554,7 @@ specific use case.")
          "06kj9hgd0z8pj27bxp2diwqh6fv7qhwwm17z64rhdc4sfn76jgn8"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("bundler" ,bundler)))
+     (list bundler))
     (synopsis "Read Adobe Font Metrics (afm) files")
     (description
      "This library provides methods to read @dfn{Adobe Font Metrics} (afm)
@@ -9870,7 +9575,7 @@ files and use the data therein.")
          "0658m37jjjn6drzqg1gk4p6c205mgp7g1jh2d00n4ngghgmz5qvs"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("bundler" ,bundler)))
+     (list bundler))
     (synopsis "Encode and decode Ascii85 binary-to-text encoding")
     (description
      "This library provides methods to encode and decode Ascii85
@@ -9915,9 +9620,7 @@ binary-to-text encoding.  The main modern use of Ascii85 is in PostScript and
                (("RuboCop::RakeTask.new") ""))
              #t)))))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)
-       ("ruby-yard" ,ruby-yard)
-       ("bundler" ,bundler)))
+     (list ruby-rspec ruby-yard bundler))
     (synopsis "Font metrics parser for the Prawn PDF generator")
     (description
      "TTFunk is a TrueType font parser written in pure Ruby.  It is used as
@@ -9975,7 +9678,7 @@ or JRuby.")
          "10jmmbjm0lkglwxbn4rpqghgg1ipjxrswm117n50adhmy8yij650"))))
     (build-system ruby-build-system)
     (propagated-inputs
-     `(("ruby-hoe" ,ruby-hoe)))
+     (list ruby-hoe))
     (synopsis "Hoe plugins for tighter Git integration")
     (description
      "This package provides a set of Hoe plugins for tighter Git integration.
@@ -9984,17 +9687,50 @@ generation.")
     (home-page "https://github.com/jbarnette/hoe-git")
     (license license:expat)))
 
+(define-public ruby-hoe-markdown
+  (package
+    (name "ruby-hoe-markdown")
+    (version "1.4.0")
+    (home-page "https://github.com/flavorjones/hoe-markdown")
+    (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 "0wb0yjdx9gx9r0cahpx42pblvglgh1i9pdfxjavq7f40nan2g076"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:test-target "spec"
+       #:phases (modify-phases %standard-phases
+                  (add-before 'check 'disable-bundler-dependency
+                    (lambda _
+                      (substitute* "spec/spec_helper.rb"
+                        (("require.*bundler/setup.*")
+                         "")))))))
+    (native-inputs
+     (list ruby-rspec))
+    (propagated-inputs
+     (list ruby-rake))
+    (synopsis "Hoe plugin with Markdown helpers")
+    (description
+     "This package provides a Hoe plugin with various Markdown helpers, which
+can be used to e.g. hyperlink Markdown documentation between project files.")
+    (license license:expat)))
+
 (define-public ruby-sequel
   (package
     (name "ruby-sequel")
-    (version "4.49.0")
+    (version "5.47.0")
     (source
      (origin
        (method url-fetch)
        (uri (rubygems-uri "sequel" version))
        (sha256
         (base32
-         "010p4a60npppvgbyw7pq5xia8aydpgxdlhh3qjm2615kwjsw3fl8"))))
+         "03pmhj4kc3ga75wy397l57bvd18jxxmrk3qsznjw93b993qgvj3z"))))
     (build-system ruby-build-system)
     (arguments
      '(#:tests? #f)) ; Avoid dependency loop with ruby-minitest-hooks.
@@ -10027,10 +9763,7 @@ associated records.")
              (setenv "RUBYLIB" "lib")
              #t)))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-minitest-rg" ,ruby-minitest-rg)
-       ("ruby-mocha" ,ruby-mocha)
-       ("ruby-activesupport" ,ruby-activesupport)))
+     (list bundler ruby-minitest-rg ruby-mocha ruby-activesupport))
     (synopsis "Test mocks for time-dependent functions")
     (description
      "Timecop provides \"time travel\" and \"time freezing\" capabilities,
@@ -10101,8 +9834,7 @@ call.")
              (delete-file "spec/concurrent/scheduled_task_spec.rb")
              #t)))))
     (native-inputs
-     `(("ruby-rake-compiler" ,ruby-rake-compiler)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list ruby-rake-compiler ruby-rspec))
     (synopsis "Concurrency tools for Ruby")
     (description
      "This library provides modern concurrency tools including agents,
@@ -10147,7 +9879,7 @@ libraries for compiling Ruby native extensions.")
          "1nq859b0gh2vjhvl1qh1zrk09pc7p54r9i6nnn6sb06iv07db2jb"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-hoe" ,ruby-hoe)))
+     (list ruby-hoe))
     (synopsis "RFC 2617 HTTP digest authentication library")
     (description
      "This library implements HTTP's digest authentication scheme based on
@@ -10169,7 +9901,7 @@ of the more insecure basic authentication scheme.")
          "00wwz6ys0502dpk8xprwcqfwyf3hmnx6lgxaiq6vj43mkx43sapc"))))
     (build-system ruby-build-system)
     (propagated-inputs
-     `(("ruby-mini-mime" ,ruby-mini-mime)))
+     (list ruby-mini-mime))
     (arguments
      '(#:tests? #f)) ; no rakefile
     (synopsis "Mail library for Ruby")
@@ -10217,8 +9949,7 @@ from plain text email.")
          "1wn812llln9jzgybz2d7536q39z3gi99i6fi0j1dapcpzvhgrr0p"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rake-compiler" ,ruby-rake-compiler)))
+     (list bundler ruby-rake-compiler))
     (synopsis "Extends math operations for increased precision")
     (description
      "This gem makes mathematical operations more precise in Ruby and
@@ -10284,7 +10015,7 @@ smart typographic punctuation HTML entities.")
     (arguments
      '(#:tests? #f)) ; no rakefile
     (propagated-inputs
-     `(("ruby-rubypants" ,ruby-rubypants)))
+     (list ruby-rubypants))
     (synopsis "Org-mode parser written in Ruby")
     (description
      "Org-ruby is an org-mode parser written in Ruby.  The most significant
@@ -10306,7 +10037,7 @@ Markdown.")
          "0w6qza25bq1s825faaglkx1k6d59aiyjjk3yw3ip5sb463mhhai9"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("bundler" ,bundler)))
+     (list bundler))
     (synopsis "Rake is a Make-like program implemented in Ruby")
     (description
      "Rake is a Make-like program where tasks and dependencies are specified
@@ -10329,10 +10060,9 @@ in standard Ruby syntax.")
     (arguments
      `(#:tests? #f))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list bundler ruby-rspec))
     (propagated-inputs
-     `(("ruby-ffi" ,ruby-ffi)))
+     (list ruby-ffi))
     (synopsis "Control external programs running in the background, in Ruby")
     (description "@code{childprocess} provides a gem to control external
 programs running in the background, in Ruby.")
@@ -10362,10 +10092,7 @@ programs running in the background, in Ruby.")
                (("RuboCop::RakeTask\\.new") ""))
              #t)))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-yard" ,ruby-yard)
-       ("ruby-mocha" ,ruby-mocha)
-       ("ruby-minitest-reporters" ,ruby-minitest-reporters)))
+     (list bundler ruby-yard ruby-mocha ruby-minitest-reporters))
     (home-page "https://simonecarletti.com/code/publicsuffix-ruby/")
     (synopsis "Domain name parser")
     (description "The gem @code{public_suffix} is a domain name parser,
@@ -10404,15 +10131,15 @@ all known public suffixes.")
              (delete-file "spec/addressable/net_http_compat_spec.rb")
              #t)))))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)
-       ("bundler" ,bundler)
-       ("ruby-idn-ruby" ,ruby-idn-ruby)
-       ("ruby-sporkmonger-rack-mount" ,ruby-sporkmonger-rack-mount)
-       ("ruby-rspec-its" ,ruby-rspec-its-minimal)
-       ("ruby-yard" ,ruby-yard)
-       ("ruby-simplecov" ,ruby-simplecov)))
+     (list ruby-rspec
+           bundler
+           ruby-idn-ruby
+           ruby-sporkmonger-rack-mount
+           ruby-rspec-its-minimal
+           ruby-yard
+           ruby-simplecov))
     (propagated-inputs
-     `(("ruby-public-suffix" ,ruby-public-suffix)))
+     (list ruby-public-suffix))
     (home-page "https://github.com/sporkmonger/addressable")
     (synopsis "Alternative URI implementation")
     (description "Addressable is a replacement for the URI implementation that
@@ -10494,7 +10221,7 @@ for the terminal.")
                ;; colorator version
                (("= 1.2") "= 1.1"))
              #t)))))
-    (propagated-inputs `(("ruby-colorator" ,ruby-colorator)))
+    (propagated-inputs (list ruby-colorator))
     (home-page "https://github.com/wbailey/command_line_reporter")
     (synopsis "Report production while executing Ruby scripts")
     (description "This gem provides a DSL that makes it easy to write reports
@@ -10527,7 +10254,7 @@ your application.")
           "0x2kpfrcagj931masm5y1kwbnc6nxl60cqdcd3lyd1d2hz7kzlia"))))
   (build-system ruby-build-system)
   (native-inputs
-   `(("ruby-hoe" ,ruby-hoe)))
+   (list ruby-hoe))
   (synopsis "PEG library for Ruby")
   (description "KPeg is a simple PEG library for Ruby.  It provides an API as
 well as native grammar to build the grammar.  KPeg supports direct left
@@ -10568,10 +10295,7 @@ jquery\\.js\", ") ""))
            (lambda _
              (invoke "rake" "generate"))))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-kpeg" ,ruby-kpeg)
-       ("ruby-racc" ,ruby-racc)
-       ("ruby-rubocop" ,ruby-rubocop)))
+     (list bundler ruby-kpeg ruby-racc ruby-rubocop))
     (home-page "https://ruby.github.io/rdoc/")
     (synopsis "HTML and command-line documentation utility")
     (description "RDoc produces HTML and command-line documentation for Ruby
@@ -10594,8 +10318,7 @@ documentation from the command-line.")
      ;; No test target
      `(#:tests? #f))
     (propagated-inputs
-     `(("ruby-rb-fsevent" ,ruby-rb-fsevent)
-       ("ruby-rb-inotify" ,ruby-rb-inotify)))
+     (list ruby-rb-fsevent ruby-rb-inotify))
     (home-page "https://github.com/sass/listen")
     (synopsis "File modification notification library")
     (description "The Listen gem listens to file modifications and notifies you
@@ -10620,10 +10343,9 @@ about the changes.")
        ;; work with current software.
        #:tests? #f))
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (native-inputs
-     `(("ruby-rubygems-tasks" ,ruby-rubygems-tasks)
-       ("ruby-rdoc" ,ruby-rdoc)))
+     (list ruby-rubygems-tasks ruby-rdoc))
     (home-page "http://www.a-k-r.org/ruby-terminfo/")
     (synopsis "Terminfo binding for Ruby")
     (description "Ruby-terminfo provides terminfo binding for Ruby.")
@@ -10645,7 +10367,7 @@ about the changes.")
      ;; No tests
      `(#:tests? #f))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)))
+     (list ruby-rspec))
     (home-page "https://github.com/samg/diffy")
     (synopsis "Convenient diffing in ruby")
     (description "Diffy provides a convenient way to generate a diff from two
@@ -10699,10 +10421,9 @@ the @file{spec} directory.")
                 "18c6prbw9wl8bqhb2435pd9s0lzarl3g7xf8pmyla28zblvwxmyh"))))
     (build-system ruby-build-system)
     (propagated-inputs
-     `(("ruby-sass-listen" ,ruby-sass-listen)))
+     (list ruby-sass-listen))
     (native-inputs
-     `(("ruby-sass-spec" ,ruby-sass-spec)
-       ("ruby-mathn" ,ruby-mathn)))
+     (list ruby-sass-spec ruby-mathn ruby-cmath))
     (home-page "https://sass-lang.com/")
     (synopsis "CSS extension language")
     (description "Sass is a CSS extension language.  It extends CSS with
@@ -10778,15 +10499,12 @@ features that don't exist yet like variables, nesting, mixins and inheritance.")
          ;; one in the gem.
          (delete 'extract-gemspec))))
     (propagated-inputs
-     `(("ruby-ffi" ,ruby-ffi)
-       ("ruby-rake" ,ruby-rake)))
+     (list ruby-ffi ruby-rake))
     (inputs
-     `(("libsass" ,libsass)))
+     (list libsass))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rake-compiler" ,ruby-rake-compiler)
-       ("ruby-minitest-around" ,ruby-minitest-around)
-       ("ruby-test-construct" ,ruby-test-construct)))
+     (list bundler ruby-rake-compiler ruby-minitest-around
+           ruby-test-construct))
     (synopsis "Use libsss from Ruby")
     (description
      "This library provides Ruby q@acronym{FFI, Foreign Function Interface}
@@ -10807,7 +10525,7 @@ bindings to the libsass library.  This enables rendering
                 "04ncr44wrilz26ayqwlg7379yjnkb29mvx4j04i62b7czmdrc9dv"))))
     (build-system ruby-build-system)
     (propagated-inputs
-     `(("ruby-sass" ,ruby-sass)))
+     (list ruby-sass))
     (arguments
      ;; No rakefile
      `(#:tests? #f))
@@ -10829,7 +10547,7 @@ in Jekyll.")
                 "1s9ly83sp8albvgdff12xy2h4xd8lm6z2fah4lzmk2yvp85jzdzv"))))
     (build-system ruby-build-system)
     (propagated-inputs
-     `(("ruby-listen" ,ruby-listen)))
+     (list ruby-listen))
     (arguments
      ;; No rakefile
      `(#:tests? #f))
@@ -10842,7 +10560,7 @@ interface.  It allows Jekyll to rebuild your site when a file changes.")
 (define-public ruby-parallel
   (package
     (name "ruby-parallel")
-    (version "1.13.0")
+    (version "1.21.0")
     (source
      (origin
        (method git-fetch)
@@ -10852,7 +10570,7 @@ interface.  It allows Jekyll to rebuild your site when a file changes.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1isqzbqxz2ndad4i5z3lb9ldrhaijfncj8bmffv04sq44sv87ikv"))))
+         "1xqjcvl3gq3shvrqp8wc3fbqibzh4mf1yczq6np9gd79558dwj3w"))))
     (build-system ruby-build-system)
     (arguments
      `(;; TODO 3 test failures
@@ -10883,17 +10601,17 @@ interface.  It allows Jekyll to rebuild your site when a file changes.")
                (("git ls-files") "find"))
              #t)))))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)
-       ("ruby-rspec-rerun" ,ruby-rspec-rerun)
-       ("bundler" ,bundler)
-       ("ruby-activerecord" ,ruby-activerecord)
-       ("ruby-progressbar" ,ruby-progressbar)
-       ("ruby-bump" ,ruby-bump)
-       ("procps" ,procps)
-       ("lsof" ,lsof)
-       ("ruby-mysql2" ,ruby-mysql2)
-       ("ruby-sqlite3" ,ruby-sqlite3)
-       ("ruby-i18n" ,ruby-i18n)))
+     (list ruby-rspec
+           ruby-rspec-rerun
+           bundler
+           ruby-activerecord
+           ruby-progressbar
+           ruby-bump
+           procps
+           lsof
+           ruby-mysql2
+           ruby-sqlite3
+           ruby-i18n))
     (home-page "https://github.com/grosser/parallel")
     (synopsis "Parallel processing in Ruby")
     (description "Parallel allows you to run any code in parallel Processes
@@ -10915,7 +10633,7 @@ suited for map-reduce or e.g. parallel downloads/uploads.")
     (arguments `(#:tests? #f)); No rakefile
     (home-page "https://github.com/square/cane")
     (propagated-inputs
-     `(("ruby-parallel" ,ruby-parallel)))
+     (list ruby-parallel))
     (synopsis "Code quality threshold checking")
     (description "Cane fails your build if code quality thresholds are not met.")
     (license license:asl2.0)))
@@ -10934,7 +10652,7 @@ suited for map-reduce or e.g. parallel downloads/uploads.")
     (home-page "https://github.com/yob/morecane")
     (arguments `(#:tests? #f)); No rakefile
     (propagated-inputs
-     `(("ruby-parallel" ,ruby-parallel)))
+     (list ruby-parallel))
     (synopsis "Extra checks for cane")
     (description "The cane gem provides a great framework for running quality
 checks over your ruby project as part of continuous integration build.  It
@@ -10964,15 +10682,9 @@ custom checks.  This gem provides a set of additional checks.")
                                   ((".*[Bb]undler.*") ""))
                                 #t)))))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)
-       ("ruby-cane" ,ruby-cane)
-       ("ruby-morecane" ,ruby-morecane)))
+     (list ruby-rspec ruby-cane ruby-morecane))
     (propagated-inputs
-     `(("ruby-afm" ,ruby-afm)
-       ("ruby-ascii85" ,ruby-ascii85)
-       ("ruby-hashery" ,ruby-hashery)
-       ("ruby-rc4" ,ruby-rc4)
-       ("ruby-ttfunk" ,ruby-ttfunk)))
+     (list ruby-afm ruby-ascii85 ruby-hashery ruby-rc4 ruby-ttfunk))
     (home-page "https://github.com/yob/pdf-reader")
     (synopsis "PDF parser in Ruby")
     (description "The PDF::Reader library implements a PDF parser conforming as
@@ -11012,9 +10724,9 @@ access to the contents of a PDF file with a high degree of flexibility.")
                           ((".*yard.*") ""))
                         (invoke "rspec"))))))
       (native-inputs
-       `(("ruby-rspec" ,ruby-rspec)))
+       (list ruby-rspec))
       (propagated-inputs
-       `(("ruby-pdf-reader" ,ruby-pdf-reader)))
+       (list ruby-pdf-reader))
       (home-page "https://github.com/prawnpdf/pdf-inspector")
       (synopsis "Analysis classes for inspecting PDF output")
       (description "This library provides a number of PDF::Reader based tools for
@@ -11077,14 +10789,10 @@ functionality from Prawn.")
                  (invoke "rspec" "--exclude-pattern" "prawn_manual_spec.rb"))
                #t)))))
       (propagated-inputs
-       `(("ruby-pdf-core" ,ruby-pdf-core)
-         ("ruby-ttfunk" ,ruby-ttfunk)))
+       (list ruby-pdf-core ruby-ttfunk))
       (native-inputs
-       `(("ruby-pdf-inspector" ,ruby-pdf-inspector)
-         ("ruby-prawn-manual-builder" ,ruby-prawn-manual-builder)
-         ("ruby-rspec" ,ruby-rspec)
-         ("ruby-simplecov" ,ruby-simplecov)
-         ("ruby-yard" ,ruby-yard)))
+       (list ruby-pdf-inspector ruby-prawn-manual-builder ruby-rspec
+             ruby-simplecov ruby-yard))
       (home-page "https://prawnpdf.org/api-docs/2.0/")
       (synopsis "PDF generation for Ruby")
       (description "Prawn is a pure Ruby PDF generation library.")
@@ -11102,8 +10810,7 @@ functionality from Prawn.")
                 "1nxd6qmxqwl850icp18wjh5k0s3amxcajdrkjyzpfgq0kvilcv9k"))))
     (build-system ruby-build-system)
     (propagated-inputs
-     `(("ruby-prawn" ,ruby-prawn)
-       ("ruby-pdf-inspector" ,ruby-pdf-inspector)))
+     (list ruby-prawn ruby-pdf-inspector))
     (native-inputs
      `(("bundler" ,bundler)
        ("ruby-yard" ,ruby-yard)
@@ -11153,8 +10860,7 @@ functionality from Prawn.")
     (build-system ruby-build-system)
     (arguments `(#:tests? #f)); FIXME: some test failures
     (native-inputs
-     `(("ruby-prawn" ,ruby-prawn)
-       ("ruby-prawn-table" ,ruby-prawn-table)))
+     (list ruby-prawn ruby-prawn-table))
     (home-page "https://kramdown.gettalong.org/")
     (synopsis "Markdown parsing and converting library")
     (description "Kramdown is a library for parsing and converting a superset
@@ -11177,7 +10883,7 @@ popular by the PHP @code{Markdown Extra} package and @code{Maruku}.")
     (arguments
      `(#:tests? #f))                    ;no rakefile
     (propagated-inputs
-     `(("ruby-kramdown" ,ruby-kramdown)))
+     (list ruby-kramdown))
     (synopsis "Kramdown parser for the GFM dialect of Markdown")
     (description
      "This is a parser for kramdown that converts Markdown documents in the
@@ -11201,8 +10907,7 @@ GFM dialect to HTML.")
      ;; No tests
      `(#:tests? #f))
     (native-inputs
-     `(("ruby-rake-compiler" ,ruby-rake-compiler)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list ruby-rake-compiler ruby-rspec))
     (home-page "https://github.com/tmm1/http_parser.rb")
     (synopsis "HTTP parser un Ruby")
     (description "This gem is a simple callback-based HTTP request/response
@@ -11225,11 +10930,9 @@ parser for writing http servers, clients and proxies.")
      ;; No tests
      `(#:tests? #f))
     (propagated-inputs
-      `(("ruby-eventmachine" ,ruby-eventmachine)
-        ("ruby-http-parser.rb" ,ruby-http-parser.rb)))
+      (list ruby-eventmachine ruby-http-parser.rb))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list bundler ruby-rspec))
     (home-page "https://github.com/igrigorik/em-websocket")
     (synopsis "EventMachine based WebSocket server")
     (description "Em-websocket is an EventMachine based WebSocket server
@@ -11239,13 +10942,13 @@ implementation.")
 (define-public ruby-rouge
   (package
     (name "ruby-rouge")
-    (version "3.21.0")
+    (version "3.26.1")
     (source (origin
               (method url-fetch)
               (uri (rubygems-uri "rouge" version))
               (sha256
                (base32
-                "1agrrmj88k9jkk36ra1ml2c1jffpp595pkxmcla74ac9ia09vn3s"))))
+                "197k0vskf72wxx0gzwld2jzg27bb7982xlvnzy9adlvkzp7nh8vf"))))
     (build-system ruby-build-system)
     (arguments `(#:tests? #f)); No rakefile
     (home-page "http://rouge.jneen.net/")
@@ -11271,7 +10974,7 @@ is compatible with stylesheets designed for pygments.")
                 "13bdzfp25c8k51ayzxqkbzag3wj5gc1jd8h7d985nsq6pn57g5xh"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("bundler" ,bundler)))
+     (list bundler))
     (arguments `(#:tests? #f)); FIXME: Could not locate Gemfile or .bundle/ directory
     (home-page "https://github.com/intridea/hashie")
     (synopsis "Extensions to Ruby Hashes")
@@ -11291,7 +10994,7 @@ hashes more powerful.")
                 "14ijr2fsjwhrkjkcaz81d5xnfa4vvgvcflrff83avqw9klm011yw"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-hoe" ,ruby-hoe)))
+     (list ruby-hoe))
     (home-page "https://github.com/adrianomitre/heredoc_unindent")
     (synopsis "Heredoc indentation cleaner")
     (description "This gem removes common margin from indented strings, such
@@ -11321,9 +11024,7 @@ indentation will probably be an issue and hence this gem.")
          "1a0wh7y3va2m7bjza95na2snw0vrdh9syz40mpjvjphbc4ph3pzg"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)
-       ("ruby-hashie" ,ruby-hashie)
-       ("ruby-heredoc-unindent" ,ruby-heredoc-unindent)))
+     (list ruby-rspec ruby-hashie ruby-heredoc-unindent))
     (arguments
      '(#:test-target "spec"
        #:phases
@@ -11366,9 +11067,7 @@ YAML.load suitable for accepting user input in Ruby applications.")
                (invoke "rspec"))
              #t)))))
     (native-inputs
-     `(("ruby-coveralls" ,ruby-coveralls)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-simplecov" ,ruby-simplecov)))
+     (list ruby-coveralls ruby-rspec ruby-simplecov))
     (synopsis "Simple YAML check tool")
     (description
      "@code{yaml-lint} will simply try to load the YAML file with the built-in
@@ -11389,7 +11088,7 @@ Ruby yaml library.")
     (build-system ruby-build-system)
     (arguments `(#:test-target "spec"))
     (native-inputs
-     `(("bundler" ,bundler)))
+     (list bundler))
     (home-page "https://github.com/jekyll/mercenary")
     (synopsis "Command-line apps library in Ruby")
     (description "Mercenary is a lightweight and flexible library for writing
@@ -11444,10 +11143,9 @@ methods for your source as @code{Forwardable::Extended}.")
                 "12fm93ljw9fbxmv2krki5k5wkvr7560qy8p4spvb9jiiaqv78fz4"))))
     (build-system ruby-build-system)
     (propagated-inputs
-     `(("ruby-forwardable-extended" ,ruby-forwardable-extended)))
+     (list ruby-forwardable-extended))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list bundler ruby-rspec))
     ;; Fails with: cannot load such file --
     ;; /tmp/guix-build-ruby-pathutil-0.16.0.drv-0/gem/benchmark/support/task
     (arguments `(#:tests? #f))
@@ -11487,9 +11185,9 @@ Pathname.")
                (invoke "rspec")))))))
     (build-system ruby-build-system)
     (propagated-inputs
-     `(("ruby-unicode-display-width" ,ruby-unicode-display-width)))
+     (list ruby-unicode-display-width))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)))
+     (list ruby-rspec))
     (home-page "https://github.com/tj/terminal-table")
     (synopsis "Simple, feature rich ASCII table generation library")
     (description
@@ -11552,7 +11250,7 @@ Unicode formatted tables.")
                 "1qzlqhpiqz28624fp0ak76hfy7908w6kpx62v7z43aiwjv0yc6q0"))))
     (build-system ruby-build-system)
     (propagated-inputs
-     `(("jekyll" ,jekyll)))
+     (list jekyll))
     (home-page "https://github.com/sverrirs/jekyll-paginate-v2")
     (synopsis "Pagination Generator for Jekyll 3")
     (description "The Pagination Generator forms the core of the pagination
@@ -11574,7 +11272,7 @@ logic in Jekyll.  It calculates and generates the pagination pages.")
     (arguments
      '(#:tests? #f))
     (propagated-inputs
-     `(("ruby-multipart-post" ,ruby-multipart-post)))
+     (list ruby-multipart-post))
     (synopsis "Ruby HTTP/REST API client library")
     (description
      "Faraday is a HTTP/REST API client library which provides a common
@@ -11620,10 +11318,7 @@ interface over different adapters.")
               (invoke "rspec"))
             #t)))))
    (native-inputs
-    `(("bundler" ,bundler)
-      ("ruby-rake-compiler" ,ruby-rake-compiler)
-      ("ruby-rspec" ,ruby-rspec)
-      ("ruby-rubocop" ,ruby-rubocop)))
+    (list bundler ruby-rake-compiler ruby-rspec ruby-rubocop))
    (synopsis "New I/O for Ruby")
    (description
     "@code{nio} provides cross-platform asynchronous I/O primitives in Ruby
@@ -11647,7 +11342,7 @@ for scalable network clients and servers.")
     '(;; No included tests
       #:tests? #f))
    (propagated-inputs
-    `(("ruby-activesupport" ,ruby-activesupport)))
+    (list ruby-activesupport))
    (synopsis "Generate URIs idenfitying model instances in Ruby")
    (description
     "@code{GlobalID} provides a way to generate URIs from a model in Ruby that
@@ -11671,8 +11366,7 @@ uniquely identify it.")
      '(;; No included tests
        #:tests? #f))
     (propagated-inputs
-     `(("ruby-concurrent" ,ruby-concurrent)
-       ("ruby-rack" ,ruby-rack)))
+     (list ruby-concurrent ruby-rack))
     (synopsis "Sprockets is a Rack-based asset packaging system")
     (description
      "Sprockets is a Rack-based asset packaging system that concatenates and
@@ -11692,7 +11386,7 @@ serves JavaScript, CoffeeScript, CSS, LESS, Sass, and SCSS.")
         (base32 "1l0p4wx15mi3wnamfv92ipkia4nsx8qi132c6g51jfdma3fiz2ch"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-simplecov" ,ruby-simplecov)))
+     (list ruby-simplecov))
     (synopsis "framework-agnostic way to render logic-free views")
     (description
      "Mustache is a framework-agnostic way to render logic-free views.
@@ -11744,20 +11438,20 @@ characteristics.")
      `(;; FIXME: Tests depend on rubocop-standard.
        #:tests? #f))
     (native-inputs
-     `(("ruby-awesome-print" ,ruby-awesome-print)
-       ("ruby-redcarpet" ,ruby-redcarpet)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-rubocop" ,ruby-rubocop)
-       ("ruby-rubocop-performance" ,ruby-rubocop-performance)
-       ("ruby-pry-byebug" ,ruby-pry-byebug)))
-    (propagated-inputs
-     `(("ruby-addressable" ,ruby-addressable)
-       ("ruby-mercenary" ,ruby-mercenary)
-       ("ruby-nokogumbo" ,ruby-nokogumbo)
-       ("ruby-parallel" ,ruby-parallel)
-       ("ruby-rainbow" ,ruby-rainbow)
-       ("ruby-typhoeus" ,ruby-typhoeus)
-       ("ruby-yell" ,ruby-yell)))
+     (list ruby-awesome-print
+           ruby-redcarpet
+           ruby-rspec
+           ruby-rubocop
+           ruby-rubocop-performance
+           ruby-pry-byebug))
+    (propagated-inputs
+     (list ruby-addressable
+           ruby-mercenary
+           ruby-nokogumbo
+           ruby-parallel
+           ruby-rainbow
+           ruby-typhoeus
+           ruby-yell))
     (synopsis "Test your rendered HTML files to make sure they're accurate")
     (description
      "HTMLProofer is a set of tests to validate your HTML output.  These
@@ -11817,10 +11511,7 @@ entities.")
                 (string-append all " \"--exclude=.*\\.md\".freeze,")))
              #t)))))
     (propagated-inputs
-     `(("ruby-mustermann" ,ruby-mustermann)
-       ("ruby-rack" ,ruby-rack)
-       ("ruby-rack-protection" ,ruby-rack-protection)
-       ("ruby-tilt" ,ruby-tilt)))
+     (list ruby-mustermann ruby-rack ruby-rack-protection ruby-tilt))
     (synopsis "DSL for quick web applications creation in Ruby")
     (description
      "Sinatra is a DSL for quickly creating web applications in Ruby with
@@ -11844,9 +11535,7 @@ minimal effort.")
      ;; No tests.
      '(#:tests? #f))
     (propagated-inputs
-     `(("ruby-daemons" ,ruby-daemons)
-       ("ruby-eventmachine" ,ruby-eventmachine)
-       ("ruby-rack" ,ruby-rack)))
+     (list ruby-daemons ruby-eventmachine ruby-rack))
     (synopsis "Thin and fast web server for Ruby")
     (description "Thin is a Ruby web server that glues together 3 Ruby libraries:
 @itemize
@@ -11882,8 +11571,7 @@ and stability,
                (("<thin>.freeze, \\[\\\"< 1.7\", ") "<thin>, ["))
              #t)))))
     (propagated-inputs
-     `(("ruby-eventmachine" ,ruby-eventmachine)
-       ("ruby-thin" ,ruby-thin)))
+     (list ruby-eventmachine ruby-thin))
     (synopsis "Simple, upgradable WebSockets for Ruby Thin")
     (description "Skinny is a simple, upgradable WebSockets for Ruby, using
 the Thin library.")
@@ -11909,9 +11597,9 @@ the Thin library.")
                       (setenv "HOME" "/tmp")
                       #t)))))
     (propagated-inputs
-     `(("ruby-ffi" ,ruby-ffi)))
+     (list ruby-ffi))
     (native-inputs
-     `(("ruby-mkmf-lite" ,ruby-mkmf-lite)))
+     (list ruby-mkmf-lite))
     (synopsis "Gather file system information")
     (description
      "The @code{sys-filesystem} library provides a cross-platform interface
@@ -11956,13 +11644,13 @@ for gathering file system information, such as disk space and mount points.")
                  (("\"sinatra\", \"~> 1.2\"") "\"sinatra\", \">= 1.2\""))
                #t)))))
     (inputs
-     `(("ruby-eventmachine" ,ruby-eventmachine)
-       ("ruby-mail" ,ruby-mail)
-       ("ruby-rack" ,ruby-rack)
-       ("ruby-sinatra" ,ruby-sinatra)
-       ("ruby-skinny" ,ruby-skinny)
-       ("ruby-sqlite3" ,ruby-sqlite3)
-       ("ruby-thin" ,ruby-thin)))
+     (list ruby-eventmachine
+           ruby-mail
+           ruby-rack
+           ruby-sinatra
+           ruby-skinny
+           ruby-sqlite3
+           ruby-thin))
     (synopsis "SMTP server which catches messages to display them a browser")
     (description
      "MailCatcher runs a super simple SMTP server which catches any message
@@ -11990,10 +11678,9 @@ then check out http://127.0.0.1:1080 to see the mail.")
     (arguments
      `(#:test-target "spec"))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list bundler ruby-rspec))
     (inputs
-     `(("ruby-simplecov" ,ruby-simplecov)))
+     (list ruby-simplecov))
     (synopsis "Pure Ruby library for event-driven IO")
     (description
      "This package provides a pure Ruby library for event-driven IO.")
@@ -12020,7 +11707,7 @@ then check out http://127.0.0.1:1080 to see the mail.")
            (lambda _
              (invoke "gem" "build" ".gemspec"))))))
     (propagated-inputs
-     `(("ruby-addressable" ,ruby-addressable)))
+     (list ruby-addressable))
     (synopsis "Ruby JSON Schema Validator")
     (description "This library provides Ruby with an interface for validating
 JSON objects against a JSON schema conforming to JSON Schema Draft 4.  Legacy
@@ -12054,11 +11741,9 @@ is also included.")
                ((".*RuboCop.*") ""))
              #t)))))
     (propagated-inputs
-     `(("ruby-json-schema" ,ruby-json-schema)))
+     (list ruby-json-schema))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec-core" ,ruby-rspec-core)
-       ("ruby-rspec-expectations" ,ruby-rspec-expectations)))
+     (list bundler ruby-rspec-core ruby-rspec-expectations))
     (synopsis
      "Compare Open API Initiative specification files")
     (description
@@ -12082,12 +11767,9 @@ backwards-compatible with an older API specification.")
          "0w7y5n74daajvl9gixr91nh8670d7mkgspkk3ql71m8azq3nffbg"))))
     (build-system ruby-build-system)
     (propagated-inputs
-     `(("ruby-nokogiri" ,ruby-nokogiri)))
+     (list ruby-nokogiri))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-kramdown" ,ruby-kramdown)
-       ("ruby-simplecov" ,ruby-simplecov)))
+     (list bundler ruby-rspec ruby-kramdown ruby-simplecov))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -12117,26 +11799,23 @@ application.")
          "1gf049rm0yvw4r8r5yyi890idbfg8qh0dikqx5prvkh11srl73bz"))))
     (build-system ruby-build-system)
     (propagated-inputs
-     `(("ruby-backport" ,ruby-backport)
-       ("bundler" ,bundler)
-       ("ruby-benchmark" ,ruby-benchmark)
-       ("ruby-e2mmap" ,ruby-e2mmap)
-       ("ruby-jaro-winkler" ,ruby-jaro-winkler)
-       ("ruby-kramdown" ,ruby-kramdown)
-       ("ruby-kramdown-parser-gfm" ,ruby-kramdown-parser-gfm)
-       ("ruby-maruku" ,ruby-maruku)
-       ("ruby-nokogiri" ,ruby-nokogiri)
-       ("ruby-parser" ,ruby-parser)
-       ("ruby-reverse-markdown" ,ruby-reverse-markdown)
-       ("ruby-rubocop" ,ruby-rubocop)
-       ("ruby-thor" ,ruby-thor)
-       ("ruby-tilt" ,ruby-tilt)
-       ("ruby-yard" ,ruby-yard)))
-    (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)
-       ("ruby-pry" ,ruby-pry)
-       ("ruby-simplecov" ,ruby-simplecov)
-       ("ruby-webmock" ,ruby-webmock)))
+     (list ruby-backport
+           bundler
+           ruby-benchmark
+           ruby-e2mmap
+           ruby-jaro-winkler
+           ruby-kramdown
+           ruby-kramdown-parser-gfm
+           ruby-maruku
+           ruby-nokogiri
+           ruby-parser
+           ruby-reverse-markdown
+           ruby-rubocop
+           ruby-thor
+           ruby-tilt
+           ruby-yard))
+    (native-inputs
+     (list ruby-rspec ruby-pry ruby-simplecov ruby-webmock))
     ;; FIXME: can't figure out how to run the tests properly:
 
     ;; An error occurred while loading spec_helper.
@@ -12204,9 +11883,7 @@ which snapshots to consider and what files to include.")
           "119fgdyb57gmss2yvfwfr47wcy8nny38sai72446krpihyavpizw"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-minitest" ,ruby-minitest)
-       ("ruby-minitest-focus" ,ruby-minitest-focus)
-       ("ruby-minitest-reporters" ,ruby-minitest-reporters)))
+     (list ruby-minitest ruby-minitest-focus ruby-minitest-reporters))
     (synopsis "Efficient and thread-safe code loader for Ruby")
     (description
      "Zeitwerk implements constant autoloading with Ruby semantics.  Each gem
@@ -12259,8 +11936,7 @@ eager loading.")
                           (format #t "test suite not run~%"))
                       #t)))))
     (native-inputs
-     `(("ruby-bump" ,ruby-bump)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list ruby-bump ruby-rspec))
     (synopsis "Run @file{.travis.yml} files locally")
     (description
      "WWTD is a @dfn{Travis Simulator} that lets you run test matrices
@@ -12284,11 +11960,9 @@ defined in @file{.travis.yml} on your local machine, using @code{rvm},
      `(#:tests? #f
        #:gem-flags (list  "--" "--use-system-libraries")))
     (inputs
-     `(("libgit2" ,libgit2)))
+     (list libgit2))
     (native-inputs
-     `(("ruby-minitest" ,ruby-minitest)
-       ("ruby-pry" ,ruby-pry)
-       ("ruby-rake-compiler" ,ruby-rake-compiler)))
+     (list ruby-minitest ruby-pry ruby-rake-compiler))
     (synopsis "Ruby bindings to the libgit2 linkable C Git library")
     (description "Rugged is a library for accessing libgit2 in Ruby.  It gives
 you the speed and portability of libgit2 with the beauty of the Ruby
@@ -12377,7 +12051,7 @@ giving detailed reports on the time taken for each task.")
     (arguments
      `(#:tests? #false))     ;there are none
     (propagated-inputs
-      `(("jekyll" ,jekyll)))
+      (list jekyll))
     (synopsis
       "Jekyll plugin to generate an Atom feed of your Jekyll posts")
     (description
@@ -12402,7 +12076,7 @@ of your Jekyll posts.")
     (arguments
      `(#:tests? #false))     ;there are none
     (propagated-inputs
-      `(("jekyll" ,jekyll)))
+      (list jekyll))
     (synopsis
       "Automatically generate a sitemap.xml for your Jekyll site")
     (description
@@ -12427,7 +12101,7 @@ a sitemaps.org compliant sitemap for your Jekyll site.")
    (arguments
     `(#:tests? #false))
    (propagated-inputs
-    `(("jekyll" ,jekyll)))
+    (list jekyll))
    (synopsis
     "Jekyll plugin to add metadata tags for search engines and social networks")
    (description
@@ -12449,10 +12123,9 @@ and social networks to better index and display your site's content.")
         (base32
          "1jrsajzhzpnfa8hj6lbf7adn8hls56dz3yw1gvzgz9y4zkka3k9v"))))
     (build-system ruby-build-system)
-    (native-inputs `(("tzdata" ,tzdata-for-tests)))
+    (native-inputs (list tzdata-for-tests))
     (propagated-inputs
-     `(("ruby-mail" ,ruby-mail)
-       ("ruby-term-ansicolor" ,ruby-term-ansicolor)))
+     (list ruby-mail ruby-term-ansicolor))
     (arguments
      '(#:phases (modify-phases %standard-phases
                   (replace 'replace-git-ls-files
@@ -12488,3 +12161,27 @@ resource assignment, cost and revenue planning, risk and communication
 management, status tracking and reporting.")
     (home-page "https://taskjuggler.org")
     (license license:gpl2)))
+
+(define-public ruby-cmath
+  (package
+    (name "ruby-cmath")
+    (version "1.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "cmath" version))
+       (sha256
+        (base32
+         "1xkz6xyhpkjbdvpdib8450w62rls1mjryz0gzbbnadxkxn82nb8m"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:tests? #false))
+    (native-inputs
+     (list bundler ruby-rake-compiler))
+    (synopsis "Trigonometric functions for complex numbers")
+    (description
+     "This gem is a library that provides trigonometric and transcendental
+functions for complex numbers.  The functions in this module accept integers,
+floating-point numbers or complex numbers as arguments.")
+    (home-page "https://github.com/ruby/cmath")
+    (license license:bsd-2)))
diff --git a/gnu/packages/rush.scm b/gnu/packages/rush.scm
index f46bb50f57..fac00ee760 100644
--- a/gnu/packages/rush.scm
+++ b/gnu/packages/rush.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013, 2016 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2022 Efraim Flashner <efraim@flashner.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -26,14 +27,14 @@
 (define-public rush
   (package
     (name "rush")
-    (version "2.1")
+    (version "2.2")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnu/rush/rush-"
                                  version ".tar.gz"))
              (sha256
               (base32
-               "17i4mggr3rnfz0xbhqvd86jqva40c535fhlwkb2l4hjcbpg8blcf"))))
+               "1kcqilbcvxsh89196ryh3p9zh4b266517q9681mjmckvj5v57plm"))))
     (build-system gnu-build-system)
     (home-page "https://www.gnu.org/software/rush/")
     (synopsis "Restricted user (login) shell")
diff --git a/gnu/packages/rust-apps.scm b/gnu/packages/rust-apps.scm
index be041531ce..d2cc949667 100644
--- a/gnu/packages/rust-apps.scm
+++ b/gnu/packages/rust-apps.scm
@@ -6,12 +6,16 @@
 ;;; Copyright © 2020 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2020 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2020 Gabriel Arazas <foo.dogsquared@gmail.com>
-;;; Copyright © 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2020–2022 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2021 Sharlatan Hellseher <sharlatanus@gmail.ccom>
-;;; Copyright © 2021 Zheng Junjie <873216071@qq.com>
+;;; Copyright © 2021, 2022 Zheng Junjie <873216071@qq.com>
 ;;; Copyright © 2021 Alexandru-Sergiu Marton <brown121407@posteo.ro>
 ;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021 Petr Hodina <phodina@protonmail.com>
+;;; Copyright © 2021 jgart <jgart@dismail.de>
+;;; Copyright © 2021 Nicolas Graves <ngraves@ngraves.fr>
+;;; Copyright © 2022 Aleksandr Vityazev <avityazev@posteo.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -34,23 +38,35 @@
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix packages)
+  #:use-module (guix utils)
+  #:use-module (gnu packages)
   #:use-module (gnu packages admin)
+  #:use-module (gnu packages base)
+  #:use-module (gnu packages bash)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages crates-io)
   #:use-module (gnu packages crates-graphics)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages fontutils)
+  #:use-module (gnu packages freedesktop)
+  #:use-module (gnu packages glib)
   #:use-module (gnu packages gtk)
+  #:use-module (gnu packages ibus)
   #:use-module (gnu packages jemalloc)
+  #:use-module (gnu packages kde)
   #:use-module (gnu packages linux)
+  #:use-module (gnu packages networking)
   #:use-module (gnu packages ssh)
   #:use-module (gnu packages pcre)
   #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages pulseaudio)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages rust)
   #:use-module (gnu packages tls)
-  #:use-module (gnu packages version-control))
+  #:use-module (gnu packages version-control)
+  #:use-module (gnu packages webkit)
+  #:use-module (gnu packages xorg))
 
 (define-public agate
   (package
@@ -87,55 +103,141 @@ files.  It uses async I/O, and should be quite efficient even when running on
 low-end hardware and serving many concurrent requests.")
     (license (list license:expat license:asl2.0))))
 
+(define-public alfis
+  (package
+    (name "alfis")
+    (version "0.6.10")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/Revertron/Alfis")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1kgzz92mkyzn7mbsdpik1q21kl38i4almn01k99nww3p0vgx9514"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-test-flags
+       '("--release" "--"
+         "--skip=dns::client::tests::test_tcp_client"
+         "--skip=dns::client::tests::test_udp_client")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'configure 'relax-requirements
+           (lambda _
+             (substitute*
+                 "guix-vendor/rust-x25519-dalek-1.2.0.tar.gz/Cargo.toml"
+               (("version = \"=1.3\"") "version = \"^1.3\"")))))
+       #:cargo-inputs
+       (("rust-getopts" ,rust-getopts-0.2)
+        ("rust-log" ,rust-log-0.4)
+        ("rust-simplelog" ,rust-simplelog-0.11)
+        ("rust-toml" ,rust-toml-0.5)
+        ("rust-digest" ,rust-digest-0.10)
+        ("rust-sha2" ,rust-sha2-0.10)
+        ("rust-ed25519-dalek" ,rust-ed25519-dalek-1)
+        ("rust-x25519-dalek" ,rust-x25519-dalek-1)
+        ("rust-ecies-ed25519" ,rust-ecies-ed25519-0.5)
+        ("rust-chacha20poly1305" ,rust-chacha20poly1305-0.9)
+        ("rust-signature" ,rust-signature-1)
+        ("rust-blakeout" ,rust-blakeout-0.3)
+        ("rust-num-cpus" ,rust-num-cpus-1)
+        ("rust-byteorder" ,rust-byteorder-1)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-json" ,rust-serde-json-1)
+        ("rust-bincode" ,rust-bincode-1)
+        ("rust-serde-cbor" ,rust-serde-cbor-0.11)
+        ("rust-base64" ,rust-base64-0.13)
+        ("rust-num-bigint" ,rust-num-bigint-0.4)
+        ("rust-num-traits" ,rust-num-traits-0.2)
+        ("rust-chrono" ,rust-chrono-0.4)
+        ("rust-rand" ,rust-rand-0.8)
+        ("rust-rand-0.7" ,rust-rand-0.7) ;For ed25519-dalek
+        ("rust-sqlite" ,rust-sqlite-0.26)
+        ("rust-uuid" ,rust-uuid-0.8)
+        ("rust-mio" ,rust-mio-0.8)
+        ("rust-ureq" ,rust-ureq-2)
+        ("rust-lru" ,rust-lru-0.7)
+        ("rust-derive-more" ,rust-derive-more-0.99)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-tinyfiledialogs" ,rust-tinyfiledialogs-3)
+        ("rust-web-view" ,rust-web-view-0.7)
+        ("rust-open" ,rust-open-2)
+        ("rust-thread-priority" ,rust-thread-priority-0.4)
+        ("rust-winres" ,rust-winres-0.1))
+       #:cargo-development-inputs
+       (("rust-serde-bytes" ,rust-serde-bytes-0.11)
+        ("rust-serde-derive" ,rust-serde-derive-1))))
+    (native-inputs
+     (list pkg-config))
+    (inputs
+     (list atk
+           gtk
+           glib
+           pango
+           webkitgtk-with-libsoup2))
+    (home-page "https://github.com/Revertron/Alfis")
+    (synopsis "Alternative Free Identity System")
+    (description
+     "This project represents a minimal blockchain without cryptocurrency,
+capable of sustaining any number of domain names in a bunch of original
+alternative zones.")
+    (license license:agpl3+)))
+
 (define-public bat
   (package
     (name "bat")
-    (version "0.18.3")
+    (version "0.19.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "bat" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0qlk032dd6zxda1v7clah33nafxygaw3x7f73ajwlvk956nrn1js"))))
+        (base32 "0bvlgh2yf6f1ski86hd13lda4cr51wyyg1ycsxwjpn0dbb0a8wqq"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-ansi-colours" ,rust-ansi-colours-1)
         ("rust-ansi-term" ,rust-ansi-term-0.12)
         ("rust-atty" ,rust-atty-0.2)
+        ("rust-bincode" ,rust-bincode-1)
         ("rust-bugreport" ,rust-bugreport-0.4)
         ("rust-clap" ,rust-clap-2)
+        ("rust-clap" ,rust-clap-2)
         ("rust-clircle" ,rust-clircle-0.3)
-        ("rust-console" ,rust-console-0.14)
+        ("rust-console" ,rust-console-0.15)
         ("rust-content-inspector" ,rust-content-inspector-0.2)
         ("rust-dirs-next" ,rust-dirs-next-2)
         ("rust-encoding" ,rust-encoding-0.2)
-        ("rust-error-chain" ,rust-error-chain-0.12)
+        ("rust-flate2" ,rust-flate2-1)
         ("rust-git2" ,rust-git2-0.13)
         ("rust-globset" ,rust-globset-0.4)
         ("rust-grep-cli" ,rust-grep-cli-0.1)
-        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-once-cell" ,rust-once-cell-1)
         ("rust-path-abs" ,rust-path-abs-0.5)
-        ("rust-semver" ,rust-semver-0.11)
+        ("rust-regex" ,rust-regex-1)
+        ("rust-semver" ,rust-semver-1)
         ("rust-serde" ,rust-serde-1)
         ("rust-serde-yaml" ,rust-serde-yaml-0.8)
         ("rust-shell-words" ,rust-shell-words-1)
         ("rust-syntect" ,rust-syntect-4)
+        ("rust-thiserror" ,rust-thiserror-1)
         ("rust-unicode-width" ,rust-unicode-width-0.1)
+        ("rust-walkdir" ,rust-walkdir-2)
         ("rust-wild" ,rust-wild-2))
        #:cargo-development-inputs
-       (("rust-assert-cmd" ,rust-assert-cmd-1)
-        ("rust-nix" ,rust-nix-0.21)
-        ("rust-predicates" ,rust-predicates-1)
+       (("rust-assert-cmd" ,rust-assert-cmd-2)
+        ("rust-nix" ,rust-nix-0.23)
+        ("rust-predicates" ,rust-predicates-2)
         ("rust-serial-test" ,rust-serial-test-0.5)
         ("rust-tempfile" ,rust-tempfile-3)
         ("rust-wait-timeout" ,rust-wait-timeout-0.2))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libgit2" ,libgit2)
-       ("zlib" ,zlib)))
+     (list libgit2 zlib))
     (home-page "https://github.com/sharkdp/bat")
     (synopsis "@command{cat} clone with syntax highlighting and git integration")
     (description
@@ -144,6 +246,46 @@ highlighting for a large number of languages, git integration, and automatic
 paging.")
     (license (list license:expat license:asl2.0))))
 
+(define-public diffr
+  (package
+    (name "diffr")
+    (version "0.1.4")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "diffr" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32 "1b0mz1ki2ksxni6g49x5l5j9ijpyhc11mywvxr9i9h3nr098nc5l"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:install-source? #f
+       ;; https://github.com/mookid/diffr/issues/79
+       #:cargo-test-flags
+       '("--release" "--"
+         "--skip=tests::success"
+         "--skip=test_cli::color_invalid_attribute_name"
+         "--skip=test_cli::color_invalid_color_not_done"
+         "--skip=test_cli::color_invalid_color_value_ansi"
+         "--skip=test_cli::color_invalid_color_value_name"
+         "--skip=test_cli::color_invalid_color_value_rgb"
+         "--skip=test_cli::color_invalid_face_name"
+         "--skip=test_cli::color_ok"
+         "--skip=test_cli::color_ok_multiple"
+         "--skip=test_cli::color_only_face_name"
+         "--skip=test_cli::debug_flag")
+       #:cargo-inputs
+       (("rust-atty" ,rust-atty-0.2)
+        ("rust-clap" ,rust-clap-2)
+        ("rust-diffr-lib" ,rust-diffr-lib-0.1)
+        ("rust-termcolor" ,rust-termcolor-1))))
+    (home-page "https://github.com/mookid/diffr")
+    (synopsis "Longest Common Sequence based diff highlighting tool")
+    (description
+     "This package provides an @acronym{LCS, longest common sequence} based diff
+highlighting tool to ease code review from your terminal.")
+    (license license:expat)))
+
 (define-public drill
   (package
     (name "drill")
@@ -175,9 +317,9 @@ paging.")
          ("rust-url" ,rust-url-2)
          ("rust-yaml-rust" ,rust-yaml-rust-0.4))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (home-page "https://github.com/fcsonline/drill")
     (synopsis "HTTP load testing application")
     (description
@@ -185,6 +327,42 @@ paging.")
 Ansible syntax.  Benchmark files can be written in YAML.")
     (license license:gpl3)))
 
+(define-public dutree
+  (package
+    (name "dutree")
+    (version "0.2.18")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "dutree" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32 "1611h27i8fm3jndscd6w65z8z7w09nnrm61vdgs9kb8ln57gqm8x"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:install-source? #f
+       #:cargo-inputs
+       (("rust-getopts" ,rust-getopts-0.2)
+        ("rust-regex" ,rust-regex-1)
+        ("rust-signal-hook" ,rust-signal-hook-0.1)
+        ("rust-terminal-size" ,rust-terminal-size-0.1)
+        ("rust-unicode-segmentation" ,rust-unicode-segmentation-1)
+        ("rust-unicode-width" ,rust-unicode-width-0.1))))
+    (home-page "https://ownyourbits.com/2018/03/25/analyze-disk-usage-with-dutree/")
+    (synopsis "Command line tool to analyze disk usage")
+    (description
+     "@command{dutree} is command line tool to analyze disk usage.
+Features include:
+@enumerate
+@item coloured output, according to the @code{LS_COLORS} environment variable.
+@item display the file system tree.
+@item ability to aggregate small files.
+@item ability to exclude files or directories.
+@item ability to compare different directories.
+@item fast, written in Rust.
+@end enumerate\n")
+    (license license:gpl3)))
+
 (define-public exa
   (package
     (name "exa")
@@ -267,10 +445,9 @@ Ansible syntax.  Benchmark files can be written in YAML.")
                           (string-append share "/zsh/site-functions/_exa"))
                #t))))))
     (inputs
-     `(("libgit2" ,libgit2)
-       ("zlib" ,zlib)))
+     (list libgit2 zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://the.exa.website/")
     (synopsis "Modern replacement for ls")
     (description "@code{exa} is a modern replacement for the command-line
@@ -342,7 +519,7 @@ also knows about symlinks, extended attributes, and Git.")
                (rename-file (string-append out "/etc/bash_completion.d/fd.bash")
                             (string-append out "/etc/bash_completion.d/fd"))
                #t))))))
-    (inputs `(("jemalloc" ,jemalloc)))
+    (inputs (list jemalloc))
     (home-page "https://github.com/sharkdp/fd")
     (synopsis "Simple, fast and user-friendly alternative to find")
     (description
@@ -394,8 +571,7 @@ characters, ASCII whitespace characters, other ASCII characters and non-ASCII.")
           "0m5lrvx6wwkxqdc5digm1k4diiaqcg5j4pia77s5nw1aam7k51hy"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:rust ,rust-1.46
-       #:modules ((guix build cargo-build-system)
+     `(#:modules ((guix build cargo-build-system)
                   (guix build utils)
                   (srfi srfi-26))
        #:cargo-inputs
@@ -440,6 +616,103 @@ characters, ASCII whitespace characters, other ASCII characters and non-ASCII.")
      "This package provides a command-line benchmarking tool.")
     (license (list license:expat license:asl2.0))))
 
+(define-public i3status-rust
+  (package
+    (name "i3status-rust")
+    (version "0.20.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/greshake/i3status-rust")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (patches (search-patches "i3status-rust-enable-unstable-features.patch"))
+       (sha256
+        (base32 "00gzm3g297s9bfp13vnb623p7dfac3g6cdhz2b3lc6l0kmnnqs1s"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:features '("pulseaudio" "libpulse-binding")
+       #:install-source? #f
+       #:cargo-inputs
+       (("rust-chrono" ,rust-chrono-0.4)
+        ("rust-chrono-tz" ,rust-chrono-tz-0.5)
+        ("rust-crossbeam-channel" ,rust-crossbeam-channel-0.5)
+        ("rust-curl" ,rust-curl-0.4)
+        ("rust-dbus" ,rust-dbus-0.9)
+        ("rust-dbus-tree" ,rust-dbus-tree-0.9)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-nix" ,rust-nix-0.20)
+        ("rust-nl80211" ,rust-nl80211-0.0.2)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-derive" ,rust-serde-derive-1)
+        ("rust-serde-json" ,rust-serde-json-1)
+        ("rust-signal-hook" ,rust-signal-hook-0.3)
+        ("rust-swayipc" ,rust-swayipc-2)
+        ("rust-toml" ,rust-toml-0.5)
+        ("rust-cpuprofiler" ,rust-cpuprofiler-0.0)
+        ("rust-inotify" ,rust-inotify-0.9)
+        ("rust-libpulse-binding" ,rust-libpulse-binding-2)
+        ("rust-maildir" ,rust-maildir-0.5)
+        ("rust-notmuch" ,rust-notmuch-0.6)
+        ("rust-progress" ,rust-progress-0.2))
+       #:cargo-development-inputs
+       (("rust-assert-fs" ,rust-assert-fs-1))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'enable-unstable-features
+           (lambda _
+             (setenv "RUSTC_BOOTSTRAP" "1")))
+         (add-after 'unpack 'fix-resources-path
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (share (string-append out "/share")))
+               (substitute* "src/util.rs"
+                 (("/usr/share/i3status-rust") share)))))
+         (add-after 'install 'install-resources
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (copy-recursively "files" (string-append out "/share")))))
+         (add-after 'install 'wrap-i3status
+           (lambda* (#:key outputs inputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out"))
+                   (paths (map
+                           (lambda (input)
+                             (string-append (assoc-ref inputs input) "/bin"))
+                           '("alsa-utils" "coreutils" "curl" "dbus" "ibus" "iproute"
+                             "kdeconnect" "lm-sensors" "pulseaudio"
+                             "openssl"
+                             "setxkbmap" "speedtest-cli" "xdg-utils" "xrandr"
+                             "zlib"))))
+               (wrap-program (string-append out "/bin/i3status-rs")
+                 `("PATH" prefix ,paths))))))))
+    (native-inputs
+     (list pkg-config))
+    (inputs
+     `(("alsa-utils" ,alsa-utils)
+       ("bash-minimal" ,bash-minimal)
+       ("coreutils" ,coreutils)
+       ("curl" ,curl)
+       ("dbus" ,dbus)
+       ("ibus" ,ibus)
+       ("iproute" ,iproute)
+       ("kdeconnect" ,kdeconnect)
+       ("lm-sensors" ,lm-sensors)
+       ("pulseaudio" ,pulseaudio)
+       ("openssl" ,openssl)
+       ("setxkbmap" ,setxkbmap)
+       ("speedtest-cli" ,speedtest-cli)
+       ("xdg-utils" ,xdg-utils)
+       ("xrandr" ,xrandr)
+       ("zlib" ,zlib)))
+    (home-page "https://github.com/greshake/i3status-rust")
+    (synopsis "i3status, written in pure Rust")
+    (description "@code{i3status-rs} is a feature-rich and resource-friendly
+replacement for i3status, written in pure Rust.  It provides a way to display
+@code{blocks} of system information (time, battery status, volume, etc) on the i3
+bar.  It is also compatible with sway.")
+    (license license:gpl3)))
+
 (define-public ripgrep
   (package
     (name "ripgrep")
@@ -488,9 +761,7 @@ characters, ASCII whitespace characters, other ASCII characters and non-ASCII.")
              #t)))
        #:features '("pcre2")))
     (native-inputs
-     `(("asciidoc" ,asciidoc)
-       ("pcre2" ,pcre2)
-       ("pkg-config" ,pkg-config)))
+     (list asciidoc pcre2 pkg-config))
     (home-page "https://github.com/BurntSushi/ripgrep")
     (synopsis "Line-oriented search tool")
     (description
@@ -499,6 +770,51 @@ your current directory for a regex pattern while respecting your
 gitignore rules.")
     (license (list license:unlicense license:expat))))
 
+(define-public git-interactive-rebase-tool
+  (package
+    (name "git-interactive-rebase-tool")
+    (version "2.1.0")
+    (source
+     (origin
+       ;; crates.io does not provide the test data.
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/mitmaro/git-interactive-rebase-tool")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "173spqqpyc00kvfmldjmjfqizh9b4spq4xw4bskd4dny8qcpz28d"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-test-flags
+       ;; https://github.com/MitMaro/git-interactive-rebase-tool/issues/586
+       '("--release" "--" "--skip=tests::success")
+       #:cargo-inputs
+       (("rust-anyhow" ,rust-anyhow-1)
+        ("rust-chrono" ,rust-chrono-0.4)
+        ("rust-clap" ,rust-clap-2)
+        ("rust-crossterm" ,rust-crossterm-0.19)
+        ("rust-git2" ,rust-git2-0.13)
+        ("rust-num-format" ,rust-num-format-0.4)
+        ("rust-unicode-segmentation" ,rust-unicode-segmentation-1)
+        ("rust-unicode-width" ,rust-unicode-width-0.1)
+        ("rust-xi-unicode" ,rust-xi-unicode-0.3))
+       #:cargo-development-inputs
+       (("rust-concat-idents" ,rust-concat-idents-1)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-rstest" ,rust-rstest-0.6)
+        ("rust-serial-test" ,rust-serial-test-0.5)
+        ("rust-tempfile" ,rust-tempfile-3))))
+    (inputs
+     (list zlib))
+    (home-page "https://gitrebasetool.mitmaro.ca/")
+    (synopsis "Terminal based sequence editor for git interactive rebase")
+    (description
+     "This application is a terminal-based sequence editor for git interactive
+rebase.")
+    (license license:gpl3+)))
+
 (define-public rust-cbindgen
   (package
     (name "rust-cbindgen")
@@ -507,7 +823,7 @@ gitignore rules.")
       (origin
         (method url-fetch)
         (uri (crate-uri "cbindgen" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.xz"))
         (sha256
          (base32
           "0673pq96hs7waavkv58v2pakpxpsfyjvbraa5kyl2b44phgdzcid"))))
@@ -559,7 +875,7 @@ gitignore rules.")
        #:cargo-development-inputs
        (("rust-serial-test" ,rust-serial-test-0.5))))
     (native-inputs
-     `(("python-cython" ,python-cython)))))
+     (list python-cython))))
 
 (define-public rust-cbindgen-0.16
   (package
@@ -691,8 +1007,7 @@ gitignore rules.")
        #:cargo-development-inputs
        (("rust-boxxy" ,rust-boxxy-0.11))))
     (inputs
-     `(("libpcap" ,libpcap)
-       ("libseccomp" ,libseccomp)))
+     (list libpcap libseccomp))
     (home-page "https://github.com/kpcyrd/sniffglue")
     (synopsis "Secure multithreaded packet sniffer")
     (description
@@ -701,21 +1016,55 @@ are parsed concurrently using a thread pool to utilize all cpu cores.  A goal
 of the project is to be runnable on untrusted networks without crashing.")
     (license license:gpl3)))
 
+(define-public spotify-tui-0.25
+  (package
+    (name "spotify-tui")
+    (version "0.25.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "spotify-tui" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32 "08bpihkdv3rmcksnxp4cz04kawjs6spmwa3wr2k27b30x3q9cd4r"))))
+    (build-system cargo-build-system)
+    (arguments
+      `(#:cargo-inputs
+        (("rust-anyhow" ,rust-anyhow-1)
+         ("rust-arboard" ,rust-arboard-1)
+         ("rust-backtrace" ,rust-backtrace-0.3)
+         ("rust-clap" ,rust-clap-2)
+         ("rust-crossterm" ,rust-crossterm-0.20)
+         ("rust-dirs" ,rust-dirs-3)
+         ("rust-rand" ,rust-rand-0.8)
+         ("rust-rspotify" ,rust-rspotify-0.10)
+         ("rust-serde" ,rust-serde-1)
+         ("rust-serde-json" ,rust-serde-json-1)
+         ("rust-serde-yaml" ,rust-serde-yaml-0.8)
+         ("rust-tokio" ,rust-tokio-0.2)
+         ("rust-tui" ,rust-tui-0.16)
+         ("rust-unicode-width" ,rust-unicode-width-0.1))))
+    (native-inputs (list pkg-config))
+    (inputs (list openssl))
+    (home-page "https://github.com/Rigellute/spotify-tui")
+    (synopsis "Terminal user interface for Spotify")
+    (description "This package provides a terminal user interface for Spotify")
+    (license (list license:expat license:asl2.0))))
+
 (define-public tectonic
   (package
     (name "tectonic")
-    (version "0.7.1")
+    (version "0.8.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "tectonic" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0rjkfmbam81anpdqs2qafcmd5bf7y898c8a7iqqqwkbl1hfw4sqs"))))
+        (base32 "0hzyqpjxya6g1ifb3hvjvj0zl2aigx898pz7h5pl46z50jp2pdc8"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:rust ,rust-1.52
-       #:cargo-build-flags '("--release" "--features" "external-harfbuzz")
+     `(#:cargo-build-flags '("--release" "--features" "external-harfbuzz")
        #:cargo-inputs
        (("rust-atty" ,rust-atty-0.2)
         ("rust-byte-unit" ,rust-byte-unit-4)
@@ -731,14 +1080,14 @@ of the project is to be runnable on untrusted networks without crashing.")
         ("rust-serde" ,rust-serde-1)
         ("rust-sha2" ,rust-sha2-0.9)
         ("rust-structopt" ,rust-structopt-0.3)
-        ("rust-tectonic-bridge-core" ,rust-tectonic-bridge-core-0.2)
-        ("rust-tectonic-bundles" ,rust-tectonic-bundles-0.1)
+        ("rust-tectonic-bridge-core" ,rust-tectonic-bridge-core-0.3)
+        ("rust-tectonic-bundles" ,rust-tectonic-bundles-0.2)
         ("rust-tectonic-docmodel" ,rust-tectonic-docmodel-0.1)
         ("rust-tectonic-engine-bibtex" ,rust-tectonic-engine-bibtex-0.1)
         ("rust-tectonic-engine-xdvipdfmx" ,rust-tectonic-engine-xdvipdfmx-0.1)
         ("rust-tectonic-engine-xetex" ,rust-tectonic-engine-xetex-0.1)
         ("rust-tectonic-errors" ,rust-tectonic-errors-0.2)
-        ("rust-tectonic-geturl" ,rust-tectonic-geturl-0.2)
+        ("rust-tectonic-geturl" ,rust-tectonic-geturl-0.3)
         ("rust-tectonic-io-base" ,rust-tectonic-io-base-0.3)
         ("rust-tectonic-status-base" ,rust-tectonic-status-base-0.2)
         ("rust-tectonic-xdv" ,rust-tectonic-xdv-0.1)
@@ -764,7 +1113,7 @@ of the project is to be runnable on untrusted networks without crashing.")
                     (doc (string-append out "/share/doc/" ,name "-" ,version)))
                (copy-recursively "docs/src" doc)))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("fontconfig" ,fontconfig)
        ("harfbuzz" ,harfbuzz)
@@ -779,6 +1128,36 @@ classic Web2C implementation of TeX and uses the TeXLive distribution
 of support files.")
     (license license:expat)))
 
+(define-public hex
+  (package
+    (name "hex")
+    (version "0.4.2")
+    (source
+     (origin
+       ;; crates.io does not provide the test data.
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/sitkevij/hex")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "03x27nixdlnkkrh85gy4152arp02kpjwq0i9dn9p73lyr24s64lv"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-ansi-term" ,rust-ansi-term-0.12)
+        ("rust-atty" ,rust-atty-0.2)
+        ("rust-clap" ,rust-clap-2)
+        ("rust-no-color" ,rust-no-color-0.1))
+       #:cargo-development-inputs
+       (("rust-assert-cmd" ,rust-assert-cmd-1))))
+    (home-page "https://github.com/sitkevij/hex")
+    (synopsis "Hexadecimal colorized view of a file")
+    (description
+     "@command{hx} accepts a file path as input and outputs a hexadecimal
+colorized view to stdout.")
+    (license license:expat)))
+
 (define-public tokei
   (package
     (name "tokei")
@@ -821,11 +1200,9 @@ of support files.")
         ("rust-regex" ,rust-regex-1)
         ("rust-tempfile" ,rust-tempfile-3))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libgit2" ,libgit2)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list libgit2 openssl zlib))
     (home-page "https://tokei.rs")
     (synopsis "Count code, quickly")
     (description
@@ -834,6 +1211,41 @@ show number of files, total lines within those files and code, comments, and
 blanks grouped by language.")
     (license (list license:expat license:asl2.0))))
 
+(define-public vivid
+  (package
+    (name "vivid")
+    (version "0.7.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "vivid" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "01fds6dm19bqgqydaa6n051v9l4wh9rb5d6sr9akwp2cc0fs43b7"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-ansi-colours" ,rust-ansi-colours-1)
+        ("rust-clap" ,rust-clap-2)
+        ("rust-dirs" ,rust-dirs-3)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-rust-embed" ,rust-rust-embed-5)
+        ("rust-yaml-rust" ,rust-yaml-rust-0.4))))
+    (home-page "https://github.com/sharkdp/vivid")
+    (synopsis "LS_COLORS environment variable manager")
+    (description
+     "vivid is a generator for the @code{LS_COLORS} environment variable that
+controls the colorized output of ls, tree, fd, bfs, dust and many other tools.
+
+It uses a YAML configuration format for the filetype-database and the color
+themes.  In contrast to @command{dircolors}, the database and the themes are
+organized in different files.  This allows users to choose and customize color
+themes independent from the collection of file extensions.  Instead of using
+cryptic ANSI escape codes, colors can be specified in the RRGGBB format and
+will be translated to either truecolor (24-bit) ANSI codes or 8-bit codes for
+older terminal emulators.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public watchexec
   (package
     (name "watchexec")
@@ -876,10 +1288,82 @@ blanks grouped by language.")
 runs a command whenever it detects modifications.")
     (license license:asl2.0)))
 
+(define-public rbw
+  (package
+    (name "rbw")
+    (version "1.4.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "rbw" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0zszp9hvilpikbd66b5zbvspks0spv8dh0yry0sxnc5yqvl2ixnf"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'configure 'relax-requirements
+           (lambda _
+             (substitute*
+                 "guix-vendor/rust-password-hash-0.3.2.tar.gz/Cargo.toml"
+               (("version = \">=1, <1.1.0\"") "version = \">=1\"")))))
+       #:cargo-inputs
+       (("rust-aes" ,rust-aes-0.7)
+        ("rust-anyhow" ,rust-anyhow-1)
+        ("rust-arrayvec" ,rust-arrayvec-0.7)
+        ("rust-async-trait" ,rust-async-trait-0.1)
+        ("rust-base32" ,rust-base32-0.4)
+        ("rust-base64" ,rust-base64-0.13)
+        ("rust-block-modes" ,rust-block-modes-0.8)
+        ("rust-block-padding" ,rust-block-padding-0.2)
+        ("rust-daemonize" ,rust-daemonize-0.4)
+        ("rust-directories" ,rust-directories-4)
+        ("rust-env-logger" ,rust-env-logger-0.9)
+        ("rust-hkdf" ,rust-hkdf-0.11)
+        ("rust-hmac" ,rust-hmac-0.11)
+        ("rust-humantime" ,rust-humantime-2)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-log" ,rust-log-0.4)
+        ("rust-nix" ,rust-nix-0.23)
+        ("rust-paw" ,rust-paw-1)
+        ("rust-pbkdf2" ,rust-pbkdf2-0.9)
+        ("rust-percent-encoding" ,rust-percent-encoding-2)
+        ("rust-rand" ,rust-rand-0.8)
+        ("rust-region" ,rust-region-3)
+        ("rust-reqwest" ,rust-reqwest-0.11)
+        ("rust-rsa" ,rust-rsa-0.5)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-json" ,rust-serde-json-1)
+        ("rust-serde-path-to-error" ,rust-serde-path-to-error-0.1)
+        ("rust-serde-repr" ,rust-serde-repr-0.1)
+        ("rust-sha-1" ,rust-sha-1-0.9)
+        ("rust-sha2" ,rust-sha2-0.9)
+        ("rust-structopt" ,rust-structopt-0.3)
+        ("rust-tempfile" ,rust-tempfile-3)
+        ("rust-term-size" ,rust-term-size-0.3)
+        ("rust-textwrap" ,rust-textwrap-0.11)
+        ("rust-thiserror" ,rust-thiserror-1)
+        ("rust-tokio" ,rust-tokio-1)
+        ("rust-totp-lite" ,rust-totp-lite-1)
+        ("rust-url" ,rust-url-2)
+        ("rust-uuid" ,rust-uuid-0.8)
+        ("rust-zeroize" ,rust-zeroize-1))))
+    (home-page "https://git.tozt.net/rbw")
+    (synopsis "Unofficial Bitwarden CLI")
+    (description "This package is an unofficial command line client for
+Bitwarden. Although it does come with its own command line client, this client
+is limited by being stateless, which makes it very difficult to use.  This
+client avoids this problem by maintaining a background process which is able
+to hold the keys in memory, similar to the way that ssh-agent or gpg-agent
+work.  This allows the client to be used in a much simpler way, with the
+background agent taking care of maintaining the necessary state.")
+    (license license:expat)))
+
 (define-public rust-analyzer
   (package
     (name "rust-analyzer")
-    (version "2021-06-07")
+    (version "2022-01-10")
     (source
      (origin
        ;; The crate at "crates.io" is empty.
@@ -890,36 +1374,52 @@ runs a command whenever it detects modifications.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "06bc3s5kjwpyr2cq79p0306a9bqp3xp928d750ybby9npq2dvj3z"))))
+         "1ci85bp8xwqrk8nqr8sh6yj8njgd98nhgnhaks2g00c77wwyra41"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:rust ,rust-1.52
-       #:install-source? #f             ; virtual manifest
+     `(#:install-source? #f             ; virtual manifest
        #:cargo-test-flags
        '("--release" "--"
-         "--skip=tests::test_version_check"         ;; It need rustc's version
-         ;; FIXME: Guix's rust not install source in %out/lib/rustlib/src/rust
-         ;; so "can't load standard library from sysroot"
+         "--skip=tests::test_version_check" ;it need rustc's version
+         ;; FIXME: Guix's rust does not install source in
+         ;; %out/lib/rustlib/src/rust so "can't load standard library from
+         ;; sysroot"
          "--skip=tests::test_loading_rust_analyzer"
-         "--skip=tidy::cargo_files_are_tidy"        ;; Not need
-         "--skip=tidy::check_licenses"              ;; It run cargo metadata.
-         "--skip=tidy::check_merge_commits"         ;; It run git rev-list.
-         "--skip=tidy::check_code_formatting"       ;; Need rustfmt as cargo fmt
-         "--skip=tidy::generate_grammar"            ;; Same
-         "--skip=tidy::generate_assists_tests")     ;; Same
+         ;; Failed to run rustfmt from toolchain 'stable'.  Please run `rustup
+         ;; component add rustfmt --toolchain stable` to install it
+         "--skip=tests::sourcegen::sourcegen_assists_docs" ;need rustfmt
+         "--skip=tests::sourcegen_ast::sourcegen_ast"      ;same
+
+         "--skip=tidy::cargo_files_are_tidy"    ;not needed
+         "--skip=tidy::check_licenses"          ;it runs cargo metadata
+         "--skip=tidy::check_merge_commits"     ;it runs git rev-list
+         "--skip=tidy::check_code_formatting"   ;need rustfmt as cargo fmt
+         "--skip=tidy::generate_grammar"        ;same
+         "--skip=tidy::generate_assists_tests") ;same
+       #:cargo-development-inputs
+       (("rust-arbitrary" ,rust-arbitrary-1)
+        ("rust-derive-arbitrary" ,rust-derive-arbitrary-1)
+        ("rust-expect-test" ,rust-expect-test-1)
+        ("rust-oorandom" ,rust-oorandom-11.1)
+        ("rust-quote" ,rust-quote-1)
+        ("rust-rayon" ,rust-rayon-1)
+        ("rust-tracing" ,rust-tracing-0.1)
+        ("rust-tracing-subscriber" ,rust-tracing-subscriber-0.3)
+        ("rust-tracing-tree" ,rust-tracing-tree-0.2)
+        ("rust-ungrammar" ,rust-ungrammar-1))
        #:cargo-inputs
        (("rust-always-assert" ,rust-always-assert-0.1)
         ("rust-anyhow" ,rust-anyhow-1)
         ("rust-anymap" ,rust-anymap-0.12)
         ("rust-arrayvec" ,rust-arrayvec-0.7)
         ("rust-backtrace" ,rust-backtrace-0.3)
-        ("rust-cargo-metadata" ,rust-cargo-metadata-0.13)
+        ("rust-cargo-metadata" ,rust-cargo-metadata-0.14)
         ("rust-cfg-if" ,rust-cfg-if-1)
-        ("rust-chalk-ir" ,rust-chalk-ir-0.68)
-        ("rust-chalk-recursive" ,rust-chalk-recursive-0.68)
-        ("rust-chalk-solve" ,rust-chalk-solve-0.68)
-        ("rust-countme" ,rust-countme-2)
-        ("rust-cov-mark" ,rust-cov-mark-1)
+        ("rust-chalk-ir" ,rust-chalk-ir-0.75)
+        ("rust-chalk-recursive" ,rust-chalk-recursive-0.75)
+        ("rust-chalk-solve" ,rust-chalk-solve-0.75)
+        ("rust-countme" ,rust-countme-3)
+        ("rust-cov-mark" ,rust-cov-mark-2)
         ("rust-crossbeam-channel" ,rust-crossbeam-channel-0.5)
         ("rust-dashmap" ,rust-dashmap-4)
         ("rust-dissimilar" ,rust-dissimilar-1)
@@ -928,7 +1428,6 @@ runs a command whenever it detects modifications.")
         ("rust-either" ,rust-either-1)
         ("rust-ena" ,rust-ena-0.14)
         ("rust-env-logger" ,rust-env-logger-0.8)
-        ("rust-expect-test" ,rust-expect-test-1)
         ("rust-flate2" ,rust-flate2-1)
         ("rust-fst" ,rust-fst-0.4)
         ("rust-home" ,rust-home-0.5)
@@ -939,29 +1438,27 @@ runs a command whenever it detects modifications.")
         ("rust-libloading" ,rust-libloading-0.7)
         ("rust-log" ,rust-log-0.4)
         ("rust-lsp-server" ,rust-lsp-server-0.5)
-        ("rust-lsp-types" ,rust-lsp-types-0.89)
-        ("rust-memmap2" ,rust-memmap2-0.2)
+        ("rust-lsp-types" ,rust-lsp-types-0.91)
+        ("rust-memmap2" ,rust-memmap2-0.5)
         ("rust-mimalloc" ,rust-mimalloc-0.1)
-        ("rust-miow" ,rust-miow-0.3)
+        ("rust-miow" ,rust-miow-0.4)
         ("rust-notify" ,rust-notify-5)
-        ("rust-object" ,rust-object-0.24)
+        ("rust-object" ,rust-object-0.28)
         ("rust-once-cell" ,rust-once-cell-1)
-        ("rust-oorandom" ,rust-oorandom-11.1)
         ("rust-parking-lot" ,rust-parking-lot-0.11)
         ("rust-perf-event" ,rust-perf-event-0.4)
         ("rust-proc-macro2" ,rust-proc-macro2-1)
         ("rust-pulldown-cmark" ,rust-pulldown-cmark-0.8)
-        ("rust-pulldown-cmark-to-cmark" ,rust-pulldown-cmark-to-cmark-6)
-        ("rust-quote" ,rust-quote-1)
-        ("rust-rayon" ,rust-rayon-1)
-        ("rust-rowan" ,rust-rowan-0.13)
-        ("rust-rustc-ap-rustc-lexer" ,rust-rustc-ap-rustc-lexer-721)
+        ("rust-pulldown-cmark-to-cmark" ,rust-pulldown-cmark-to-cmark-7)
+        ("rust-rowan" ,rust-rowan-0.15)
+        ("rust-rustc-ap-rustc-lexer" ,rust-rustc-ap-rustc-lexer-725)
         ("rust-rustc-hash" ,rust-rustc-hash-1)
         ("rust-salsa" ,rust-salsa-0.17)
         ("rust-scoped-tls" ,rust-scoped-tls-1)
         ("rust-serde" ,rust-serde-1)
         ("rust-serde-json" ,rust-serde-json-1)
         ("rust-serde-path-to-error" ,rust-serde-path-to-error-0.1)
+        ("rust-typed-arena" ,rust-typed-arena-2)
         ("rust-smallvec" ,rust-smallvec-1)
         ("rust-smol-str" ,rust-smol-str-0.1)
         ("rust-snap" ,rust-snap-1)
@@ -969,10 +1466,6 @@ runs a command whenever it detects modifications.")
         ("rust-threadpool" ,rust-threadpool-1)
         ("rust-tikv-jemalloc-ctl" ,rust-tikv-jemalloc-ctl-0.4)
         ("rust-tikv-jemallocator" ,rust-tikv-jemallocator-0.4)
-        ("rust-tracing" ,rust-tracing-0.1)
-        ("rust-tracing-subscriber" ,rust-tracing-subscriber-0.2)
-        ("rust-tracing-tree" ,rust-tracing-tree-0.1)
-        ("rust-ungrammar" ,rust-ungrammar-1)
         ("rust-url" ,rust-url-2)
         ("rust-walkdir" ,rust-walkdir-2)
         ("rust-winapi" ,rust-winapi-0.3)
@@ -981,24 +1474,57 @@ runs a command whenever it detects modifications.")
         ("rust-xshell" ,rust-xshell-0.1))
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'patch-build-failures
-           (lambda _
-             (chmod ".cargo/config" 420)
-             #t))
          (add-before 'check 'fix-tests
-           (lambda* (#:key inputs #:allow-other-keys)
+           (lambda _
              (let ((bash (string-append "#!" (which "bash"))))
-               (with-directory-excursion "crates/syntax/test_data/lexer/ok"
-                 (substitute* "0010_single_line_comments.txt"
+               (with-directory-excursion "crates/parser/test_data/lexer/ok"
+                 (substitute* "single_line_comments.txt"
                    (("SHEBANG 19")
                     (string-append "SHEBANG "
                                    (number->string (string-length bash))))
                    (("#!/usr/bin/env bash") bash))))))
-         (replace 'install
+         (add-before 'install 'install-doc
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (doc (string-append out "/share/doc/rust-analyzer-"
+                                        ,version)))
+               (copy-recursively "docs" doc))))
+         (add-before 'install 'chdir
+           (lambda _
+             (chdir "crates/rust-analyzer")))
+         (add-after 'install 'wrap-program
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin"))
+                    (rust-src-path (search-input-directory
+                                    inputs "/lib/rustlib/src/rust/library")))
+               ;; if environment variable RUST_SRC_PATH is not set, set it,
+               ;; make rust-analyzer work out of box.
+               (with-directory-excursion bin
+                 (let* ((prog "rust-analyzer")
+                        (wrapped-file (string-append (dirname prog)
+                                                     "/." (basename prog) "-real"))
+                        (prog-tmp (string-append wrapped-file "-tmp")))
+                   (link prog wrapped-file)
+                   (call-with-output-file prog-tmp
+                     (lambda (port)
+                       (format port "#!~a
+if test -z \"${RUST_SRC_PATH}\";then export RUST_SRC_PATH=~S;fi;
+exec -a \"$0\" \"~a\" \"$@\""
+                               (which "bash")
+                               rust-src-path
+                               (canonicalize-path wrapped-file))))
+                   (chmod prog-tmp #o755)
+                   (rename-file prog-tmp prog))))))
+         (replace 'install-license-files
            (lambda* (#:key outputs #:allow-other-keys)
-             (install-file "target/release/rust-analyzer"
-                           (string-append (assoc-ref outputs "out")
-                                          "/bin")))))))
+             (let* ((out (assoc-ref outputs "out"))
+                    (doc (string-append out "/share/doc/rust-analyzer-"
+                                        ,version)))
+               (chdir "../..")
+               (install-file "LICENSE-MIT" doc)
+               (install-file "LICENSE-APACHE" doc)))))))
+    (native-inputs (list rust-src))
     (home-page "https://rust-analyzer.github.io/")
     (synopsis "Experimental Rust compiler front-end for IDEs")
     (description "Rust-analyzer is a modular compiler frontend for the Rust
@@ -1021,8 +1547,7 @@ support for Rust.")
           "0fwdxhdj2963xr6xfqr56i7hikhsdv562vgxq2dj3h2mi3dil1k6"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:rust ,rust-1.52                ;inherited from rust-cargo
-       #:cargo-inputs
+     `(#:cargo-inputs
        (("rust-cbindgen" ,rust-cbindgen-0.19)
         ("rust-cargo" ,rust-cargo-0.53) ;
         ("rust-anyhow" ,rust-anyhow-1)
@@ -1037,12 +1562,9 @@ support for Rust.")
         ("rust-serde-json" ,rust-serde-json-1)
         ("rust-regex" ,rust-regex-1))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("curl" ,curl)
-       ("libssh2" ,libssh2)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list curl libssh2 openssl zlib))
     (home-page "https://github.com/lu-zero/cargo-c")
     (synopsis "Build and install C-compatible libraries")
     (description
@@ -1051,6 +1573,31 @@ library and a dynamic library, and a C header to be used by any C (and
 C-compatible) software.")
     (license license:expat)))
 
+(define-public swayhide
+  (package
+    (name "swayhide")
+    (version "0.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "swayhide" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0x172ffj0lfmbv5nix708l1mfsizxzy74gpxp5amvx0bbaq0p78s"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-exitcode" ,rust-exitcode-1)
+        ("rust-swayipc" ,rust-swayipc-2))))
+    (home-page "https://github.com/NomisIV/swayhide/")
+    (synopsis "Swallow windows on swaywm")
+    (description "swayhide hides the currently active terminal (by moving it
+to the scratchpad), then it executes the supplied command.  When the child
+process has finished, the terminal is moved back.  This is useful if your
+workflow includes opening graphical programs from the terminal, as the locked
+terminal won't have to take up any space.")
+    (license license:gpl3+)))
+
 (define-public tealdeer
   (package
     (name "tealdeer")
@@ -1117,9 +1664,9 @@ C-compatible) software.")
         ("rust-remove-dir-all" ,rust-remove-dir-all-0.5.2)
         ("rust-tempfile" ,rust-tempfile-3))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (home-page "https://github.com/dbrgn/tealdeer/")
     (synopsis "Fetch and show tldr help pages for many CLI commands")
     (description
@@ -1127,6 +1674,57 @@ C-compatible) software.")
 Full featured offline client with caching support.")
     (license (list license:expat license:asl2.0))))
 
+(define-public git-absorb
+  (package
+    (name "git-absorb")
+    (version "0.6.6")
+    (source
+     (origin
+       ;; crates.io does not include the manual page.
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/tummychow/git-absorb")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "04v10bn24acify34vh5ayymsr1flcyb05f3az9k1s2m6nlxy5gb9"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-anyhow" ,rust-anyhow-1)
+        ("rust-clap" ,rust-clap-2)
+        ("rust-git2" ,rust-git2-0.13)
+        ("rust-memchr" ,rust-memchr-2)
+        ("rust-slog" ,rust-slog-2)
+        ("rust-slog-async" ,rust-slog-async-2)
+        ("rust-slog-term" ,rust-slog-term-2))
+       #:cargo-development-inputs
+       (("rust-tempfile" ,rust-tempfile-3))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'relax-version-requirements
+           (lambda _
+             (substitute* "Cargo.toml"
+               (("2.5") "2")
+               (("~2.3\"") "2\"")
+               (("~2.33\"") "2\"")      ; clap
+               (("3.1") "3"))))
+         (add-after 'install 'install-manual-page
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out   (assoc-ref outputs "out"))
+                    (man   (string-append out "/share/man/man1")))
+               (install-file "Documentation/git-absorb.1" man)))))))
+    (inputs
+     (list zlib))
+    (home-page "https://github.com/tummychow/git-absorb")
+    (synopsis "Git tool for making automatic fixup commits")
+    (description
+     "@code{git absorb} automatically absorbs staged changes into their
+current branch.  @code{git absorb} will automatically identify which commits
+are safe to modify, and which staged changes belong to each of those commits.
+It will then write @code{fixup!} commits for each of those changes.")
+    (license license:bsd-3)))
+
 (define-public zoxide
   (package
     (name "zoxide")
diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scm
index b181a31915..5a6d4a5c30 100644
--- a/gnu/packages/rust.scm
+++ b/gnu/packages/rust.scm
@@ -4,13 +4,16 @@
 ;;; Copyright © 2016 Nikita <nikita@n0.is>
 ;;; Copyright © 2017 Ben Woodcroft <donttrustben@gmail.com>
 ;;; Copyright © 2017, 2018 Nikolai Merinov <nikolai.merinov@member.fsf.org>
-;;; Copyright © 2017, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2017, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Danny Milosavljevic <dannym+a@scratchpost.org>
 ;;; Copyright © 2019 Ivan Petkov <ivanppetkov@gmail.com>
 ;;; Copyright © 2020, 2021 Jakub Kądziołka <kuba@kadziolka.net>
 ;;; Copyright © 2020 Pierre Langlois <pierre.langlois@gmx.com>
 ;;; Copyright © 2020 Matthew James Kraai <kraai@ftbfs.org>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021 (unmatched parenthesis <paren@disroot.org>
+;;; Copyright © 2022 Zheng Junjie <873216071@qq.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -47,6 +50,7 @@
   #:use-module (gnu packages tls)
   #:use-module (gnu packages)
   #:use-module (guix build-system cargo)
+  #:use-module (guix build-system copy)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system trivial)
   #:use-module (guix download)
@@ -107,1372 +111,699 @@
     (inherit base-rust)
     (version version)
     (source
-      (origin
-        (inherit (package-source base-rust))
-        (uri (rust-uri version))
-        (sha256 (base32 checksum))))
+     (origin
+       (inherit (package-source base-rust))
+       (uri (rust-uri version))
+       (sha256 (base32 checksum))))
     (native-inputs
      (alist-replace "cargo-bootstrap" (list base-rust "cargo")
                     (alist-replace "rustc-bootstrap" (list base-rust)
                                    (package-native-inputs base-rust))))))
 
-(define-public mrustc
-  (let ((rustc-version "1.19.0"))
-    (package
-      (name "mrustc")
-      (version "0.9")
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://github.com/thepowersgang/mrustc")
-                      (commit (string-append "v" version))))
-                (file-name (git-file-name name version))
-                (sha256
-                 (base32
-                  "194ny7vsks5ygiw7d8yxjmp1qwigd71ilchis6xjl6bb2sj97rd2"))))
-      (outputs '("out" "cargo"))
-      (build-system gnu-build-system)
-      (inputs
-       `(("zlib" ,zlib)))
-      (native-inputs
-       `(("bison" ,bison)
-         ("flex" ,flex)
-         ;; Required for the libstd sources.
-         ("rustc" ,(package-source rust-1.19))))
-      (arguments
-       `(#:test-target "test"
-         #:make-flags
-         (list ,(string-append "RUSTC_TARGET="
-                               (or (%current-target-system)
-                                   (nix-system->gnu-triplet-for-rust))))
-         #:phases
-         (modify-phases %standard-phases
-          (add-after 'unpack 'patch-date
-            (lambda _
-              (substitute* "Makefile"
-               (("shell date") "shell date -d @1"))
-              (substitute* "run_rustc/Makefile"
-               (("[$]Vtime ") "$V "))
-              #t))
-           (add-after 'patch-date 'unpack-target-compiler
-             (lambda* (#:key inputs outputs #:allow-other-keys)
-               (invoke "tar" "xf" (assoc-ref inputs "rustc"))
-               (chdir ,(string-append "rustc-" rustc-version "-src"))
-               (invoke "patch" "-p0" ,(string-append "../rustc-" rustc-version
-                                                     "-src.patch"))
-               (chdir "..")
-               (setenv "RUSTC_VERSION" ,rustc-version)
-               (setenv "MRUSTC_TARGET_VER"
-                ,(version-major+minor rustc-version))
-               (setenv "OUTDIR_SUF" "")
-               #t))
-           (replace 'configure
-             (lambda* (#:key inputs #:allow-other-keys)
-               (setenv "CC" (string-append (assoc-ref inputs "gcc")
-                                           "/bin/gcc"))
-               (setenv "CXX" (string-append (assoc-ref inputs "gcc")
-                                            "/bin/g++"))
-               #t))
-           (add-after 'build 'build-minicargo
-             (lambda* (#:key make-flags #:allow-other-keys)
-               ;; TODO: minicargo.mk: RUSTC_VERSION=$(RUSTC_VERSION) RUSTC_CHANNEL=$(RUSTC_SRC_TY) OUTDIR_SUF=$(OUTDIR_SUF)
-               (apply invoke "make" "-f" "minicargo.mk" "LIBS" make-flags)
-               (apply invoke "make" "-C" "tools/minicargo" make-flags)))
-           ;(add-after 'check 'check-locally
-           ;  (lambda* (#:key make-flags #:allow-other-keys)
-           ;    ;; The enum test wouldn't work otherwise.
-           ;    ;; See <https://github.com/thepowersgang/mrustc/issues/137>.
-           ;    (setenv "MRUSTC_TARGET_VER" ,(version-major+minor rustc-version))
-           ;    (apply invoke "make" "local_tests" make-flags)))
-           (replace 'install
-             (lambda* (#:key inputs outputs #:allow-other-keys)
-               (let* ((out (assoc-ref outputs "out"))
-                      (bin (string-append out "/bin"))
-                      (tools-bin (string-append out "/tools/bin"))
-                      (cargo-out (assoc-ref outputs "cargo"))
-                      (cargo-bin (string-append cargo-out "/bin"))
-                      (lib (string-append out "/lib"))
-                      (lib/rust (string-append lib "/mrust"))
-                      (gcc (assoc-ref inputs "gcc"))
-                      (run_rustc (string-append out
-                                                "/share/mrustc/run_rustc")))
-                 ;; These files are not reproducible.
-                 (for-each delete-file (find-files "output" "\\.txt$"))
-                 ;(delete-file-recursively "output/local_tests")
-                 (mkdir-p (dirname lib/rust))
-                 (copy-recursively "output" lib/rust)
-                 (mkdir-p bin)
-                 (mkdir-p tools-bin)
-                 (install-file "bin/mrustc" bin)
-                 ;; minicargo uses relative paths to resolve mrustc.
-                 (install-file "tools/bin/minicargo" tools-bin)
-                 (install-file "tools/bin/minicargo" cargo-bin)
-                 (mkdir-p run_rustc)
-                 (copy-file "run_rustc/Makefile"
-                            (string-append run_rustc "/Makefile"))
-                 #t))))))
-      (synopsis "Compiler for the Rust programming language")
-      (description "Rust is a systems programming language that provides memory
-safety and thread safety guarantees.")
-      (home-page "https://github.com/thepowersgang/mrustc")
-      ;; Dual licensed.
-      (license (list license:asl2.0 license:expat)))))
-
-(define rust-1.19
+;;; Note: mrustc's only purpose is to be able to bootstap Rust; it's designed
+;;; to be used in source form.  The latest support for bootstrapping from
+;;; 1.39.0 is not yet released so use the latest commit (see:
+;;; https://github.com/thepowersgang/mrustc/issues/185).
+(define %mrustc-commit "c7066542f8e93d320323749216bf3c82aecb67c2")
+(define %mrustc-source
+  (let* ((version "0.9")
+         (commit %mrustc-commit)
+         (revision "1")
+         (name "mrustc"))
+    (origin
+      (method git-fetch)
+      (uri (git-reference
+            (url "https://github.com/thepowersgang/mrustc")
+            (commit commit)))
+      (file-name (git-file-name name (git-version version revision commit)))
+      (sha256
+       (base32
+        "0zv1x6601s5fnnkcdlqkc4bknisqz569qb0iyb9rjsmaf1kh0na3")))))
+
+;;; Rust 1.39 is special in that it is built with mrustc, which shortens the
+;;; bootstrap path.
+(define rust-1.39
   (package
     (name "rust")
-    (version "1.19.0")
+    (version "1.39.0")
     (source
-      (origin
-        (method url-fetch)
-        (uri (rust-uri "1.19.0"))
-        (sha256 (base32 "0l8c14qsf42rmkqy92ahij4vf356dbyspxcips1aswpvad81y8qm"))
-        (modules '((guix build utils)))
-        (snippet '(begin (delete-file-recursively "src/llvm") #t))
-        (patches (search-patches "rust-1.19-mrustc.patch"))))
+     (origin
+       (method url-fetch)
+       (uri (rust-uri version))
+       (sha256 (base32 "0mwkc1bnil2cfyf6nglpvbn2y0zfbv44zfhsd5qg4c9rm6vgd8dl"))
+       (modules '((guix build utils)))
+       (snippet '(for-each delete-file-recursively
+                           '("src/llvm-emscripten"
+                             "src/llvm-project"
+                             "vendor/jemalloc-sys/jemalloc")))
+       (patches (search-patches "rustc-1.39.0-src.patch"))
+       (patch-flags '("-p0"))))         ;default is -p1
     (outputs '("out" "cargo"))
-    (properties '((timeout . 72000)               ;20 hours
-                  (max-silent-time . 18000)))     ;5 hours (for armel)
+    (properties '((timeout . 72000)           ;20 hours
+                  (max-silent-time . 18000))) ;5 hours (for armel)
+    (build-system gnu-build-system)
+    (inputs
+     `(("libcurl" ,curl)
+       ("libssh2" ,libssh2)
+       ("llvm" ,llvm)
+       ("openssl" ,openssl)
+       ("zlib" ,zlib)))
+    (native-inputs
+     `(("bison" ,bison)
+       ("flex" ,flex)
+       ("pkg-config" ,pkg-config)
+       ;; Required for the libstd sources.
+       ("mrustc-source" ,%mrustc-source)))
     (arguments
      `(#:imported-modules ,%cargo-utils-modules ;for `generate-all-checksums'
-       #:modules ((guix build utils) (ice-9 match) (guix build gnu-build-system))
+       #:modules ((guix build cargo-utils)
+                  (guix build utils)
+                  (guix build gnu-build-system))
+       #:test-target "test"
+       ;; Rust's own .so library files are not found in any RUNPATH, but
+       ;; that doesn't seem to cause issues.
+       #:validate-runpath? #f
+       #:make-flags
+       (list ,(string-append "RUSTC_TARGET="
+                             (or (%current-target-system)
+                                 (nix-system->gnu-triplet-for-rust)))
+             ,(string-append "RUSTC_VERSION=" version)
+             ,(string-append "MRUSTC_TARGET_VER="
+                             (version-major+minor version))
+             "OUTDIR_SUF=")           ;do not add version suffix to output dir
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'set-env
+         (add-after 'unpack 'patch-reference-to-cc
+           ;; This prevents errors like 'error: linker `cc` not found' when
+           ;; "cc" is not found on PATH.
            (lambda* (#:key inputs #:allow-other-keys)
-             ;; Disable test for cross compilation support.
-             (setenv "CFG_DISABLE_CROSS_TESTS" "1")
-             (setenv "SHELL" (which "sh"))
-             (setenv "CONFIG_SHELL" (which "sh"))
-             (setenv "CC" (string-append (assoc-ref inputs "gcc") "/bin/gcc"))
-             ;; guix llvm-3.9.1 package installs only shared libraries
-             (setenv "LLVM_LINK_SHARED" "1")
-             #t))
-         (add-after 'unpack 'patch-cargo-tomls
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (substitute* "src/librustc_errors/Cargo.toml"
-               (("[[]dependencies[]]") "
-[dependencies]
-term = \"0.4.4\"
-"))
-             (substitute* "src/librustc/Cargo.toml"
-               (("[[]dependencies[]]") "
-[dependencies]
-getopts = { path = \"../libgetopts\" }
-"))
-             (substitute* "src/librustdoc/Cargo.toml"
-               (("[[]dependencies[]]") "
-[dependencies]
-test = { path = \"../libtest\" }
-"))
-             #t))
-         (add-after 'unpack 'patch-tests
+             (let ((gcc (assoc-ref inputs "gcc")))
+               (substitute* (find-files "." "^link.rs$")
+                 (("\"cc\".as_ref")
+                  (format #f "~s.as_ref" (string-append gcc "/bin/gcc")))))))
+         (add-after 'unpack 'setup-mrustc-sources
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((bash (assoc-ref inputs "bash")))
-               (substitute* "src/libstd/process.rs"
-                 ;; The newline is intentional.
-                 ;; There's a line length "tidy" check in Rust which would
-                 ;; fail otherwise.
-                 (("\"/bin/sh\"") (string-append "\n\"" bash "/bin/sh\"")))
-               (substitute* "src/libstd/net/tcp.rs"
-                 ;; There is no network in build environment
-                 (("fn connect_timeout_unroutable")
-                  "#[ignore]\nfn connect_timeout_unroutable"))
-               ;; <https://lists.gnu.org/archive/html/guix-devel/2017-06/msg00222.html>
-               (substitute* "src/libstd/sys/unix/process/process_common.rs"
-                (("fn test_process_mask") "#[allow(unused_attributes)]
-    #[ignore]
-    fn test_process_mask"))
-               #t)))
-         (add-after 'patch-tests 'patch-aarch64-test
-           (lambda* _
-             (substitute* "src/librustc_back/dynamic_lib.rs"
-               ;; This test is known to fail on aarch64 and powerpc64le:
-               ;; https://github.com/rust-lang/rust/issues/45410
-               (("fn test_loading_cosine") "#[ignore]\nfn test_loading_cosine"))
-             #t))
-         (add-after 'patch-tests 'use-readelf-for-tests
+             (copy-recursively (assoc-ref inputs "mrustc-source") "../mrustc")
+             ;; The Makefile of mrustc expects the sources directory of rustc
+             ;; to be at this location, and it simplifies things to make it
+             ;; so.
+             (symlink (getcwd)
+                      (string-append "../mrustc/rustc-" ,version "-src"))))
+         (add-after 'setup-mrustc-sources 'patch-makefiles
+           ;; This disables building the (unbundled) LLVM.
+           (lambda* (#:key inputs parallel-build? #:allow-other-keys)
+             (let ((llvm (assoc-ref inputs "llvm"))
+                   (job-spec (format #f "-j~a"
+                                     (if parallel-build?
+                                         (number->string (parallel-job-count))
+                                         "1"))))
+               (with-directory-excursion "../mrustc"
+                 (substitute* '("minicargo.mk"
+                                "run_rustc/Makefile")
+                   ;; Use the system-provided LLVM.
+                   (("LLVM_CONFIG := .*")
+                    (string-append "LLVM_CONFIG := " llvm "/bin/llvm-config\n"))
+                   (("\\$\\(LLVM_CONFIG\\): .*")
+                    "$(LLVM_CONFIG):\n")
+                   (("\\$Vcd \\$\\(RUSTCSRC\\)build && \\$\\(MAKE\\).*")
+                    "true\n"))
+                 (substitute* "Makefile"
+                   ;; Patch date and git obtained version information.
+                   ((" -D VERSION_GIT_FULLHASH=.*")
+                    (string-append
+                     " -D VERSION_GIT_FULLHASH=\\\"" ,%mrustc-commit "\\\""
+                     " -D VERSION_GIT_BRANCH=\\\"master\\\""
+                     " -D VERSION_GIT_SHORTHASH=\\\""
+                     ,(string-take %mrustc-commit 7) "\\\""
+                     " -D VERSION_BUILDTIME="
+                     "\"\\\"Thu, 01 Jan 1970 00:00:01 +0000\\\"\""
+                     " -D VERSION_GIT_ISDIRTY=0\n"))
+                   ;; Do not try to fetch sources from the Internet.
+                   ((": \\$\\(RUSTC_SRC_DL\\)")
+                    ":"))
+                 (substitute* "run_rustc/Makefile"
+                   (("[$]Vtime ")
+                    "$V ")
+                   ;; Unlock the number of parallel jobs for cargo.
+                   (("-j [[:digit:]]+ ")
+                    "")
+                   ;; Patch the shebang of a generated wrapper for rustc
+                   (("#!/bin/sh")
+                    (string-append "#!" (which "sh"))))))))
+         (add-after 'patch-generated-file-shebangs 'patch-cargo-checksums
            (lambda* _
-             ;; nm doesn't recognize the file format because of the
-             ;; nonstandard sections used by the Rust compiler, but readelf
-             ;; ignores them.
-             (substitute* "src/test/run-make/atomic-lock-free/Makefile"
-               (("\tnm ")
-                "\treadelf -c "))
-             #t))
-         (add-after 'patch-tests 'remove-unsupported-tests
-           (lambda* _
-             ;; Our ld-wrapper cannot process non-UTF8 bytes in LIBRARY_PATH.
-             ;; <https://lists.gnu.org/archive/html/guix-devel/2017-06/msg00193.html>
-             (delete-file-recursively "src/test/run-make/linker-output-non-utf8")
-             #t))
-         (add-after 'patch-source-shebangs 'patch-cargo-checksums
-           (lambda* _
-             (use-modules (guix build cargo-utils))
-             (substitute* "src/Cargo.lock"
-               (("(\"checksum .* = )\".*\"" all name)
+             (substitute* "Cargo.lock"
+               (("(checksum = )\".*\"" all name)
                 (string-append name "\"" ,%cargo-reference-hash "\"")))
-             (generate-all-checksums "src/vendor")
-             #t))
-         ;; This phase is overridden by newer versions.
+             (generate-all-checksums "vendor")))
+         (add-before 'configure 'configure-cargo-home
+           (lambda _
+             (let ((cargo-home (string-append (getcwd) "/.cargo")))
+               (mkdir-p cargo-home)
+               (setenv "CARGO_HOME" cargo-home))))
          (replace 'configure
-           (const #t))
-         ;; This phase is overridden by newer versions.
+           (lambda _
+             (setenv "CC" "gcc")
+             (setenv "CXX" "g++")
+             ;; The Guix LLVM package installs only shared libraries.
+             (setenv "LLVM_LINK_SHARED" "1")
+             ;; This is a workaround for
+             ;; https://github.com/thepowersgang/mrustc/issues/138.
+             (setenv "LIBSSH2_SYS_USE_PKG_CONFIG" "yes")
+             ;; rustc still insists on having 'cc' on PATH in some places
+             ;; (e.g. when building the 'test' library crate).
+             (mkdir-p "/tmp/bin")
+             (symlink (which "gcc") "/tmp/bin/cc")
+             (setenv "PATH" (string-append "/tmp/bin:" (getenv "PATH")))))
+         (delete 'patch-generated-file-shebangs)
          (replace 'build
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let ((rustc-bootstrap (assoc-ref inputs "rustc-bootstrap")))
-               (setenv "CFG_COMPILER_HOST_TRIPLE"
-                ,(nix-system->gnu-triplet (%current-system)))
-               (setenv "CFG_RELEASE" "")
-               (setenv "CFG_RELEASE_CHANNEL" "stable")
-               (setenv "CFG_LIBDIR_RELATIVE" "lib")
-               (setenv "CFG_VERSION" "1.19.0-stable-mrustc")
-               (setenv "MRUSTC_TARGET_VER" ,(version-major+minor version))
-               ; bad: (setenv "CFG_PREFIX" "mrustc") ; FIXME output path.
-               (mkdir-p "output")
-               ;; mrustc 0.9 doesn't check the search paths for crates anymore.
-               (copy-recursively (string-append rustc-bootstrap "/lib/mrust")
-                                 "output")
-               (invoke (string-append rustc-bootstrap "/tools/bin/minicargo")
-                       "src/rustc" "--vendor-dir" "src/vendor"
-                       "--output-dir" "output/rustc-build"
-                       "-L" (string-append rustc-bootstrap "/lib/mrust")
-                       "-j" "1")
-               (setenv "CFG_COMPILER_HOST_TRIPLE" #f)
-               (setenv "CFG_RELEASE" #f)
-               (setenv "CFG_RELEASE_CHANNEL" #f)
-               (setenv "CFG_VERSION" #f)
-               (setenv "CFG_PREFIX" #f)
-               (setenv "CFG_LIBDIR_RELATIVE" #f)
-               (invoke (string-append rustc-bootstrap "/tools/bin/minicargo")
-                       "src/tools/cargo" "--vendor-dir" "src/vendor"
-                       "--output-dir" "output/cargo-build"
-                       "-L" "output/"
-                       "-L" (string-append rustc-bootstrap "/lib/mrust")
-                       "-j" "1")
-               ;; Now use the newly-built rustc to build the libraries.
-               ;; One day that could be replaced by:
-               ;; (invoke "output/cargo-build/cargo" "build"
-               ;;         "--manifest-path" "src/bootstrap/Cargo.toml"
-               ;;         "--verbose") ; "--locked" "--frozen"
-               ;; but right now, Cargo has problems with libstd's circular
-               ;; dependencies.
-               (mkdir-p "output/target-libs")
-               (for-each (match-lambda
-                          ((name . flags)
-                            (write name)
-                            (newline)
-                            (apply invoke
-                                   "output/rustc-build/rustc"
-                                   "-C" (string-append "linker="
-                                                       (getenv "CC"))
-                                   ;; Required for libterm.
-                                   "-Z" "force-unstable-if-unmarked"
-                                   "-L" "output/target-libs"
-                                   (string-append "src/" name "/lib.rs")
-                                   "-o"
-                                   (string-append "output/target-libs/"
-                                                  (car (string-split name #\/))
-                                                  ".rlib")
-                                   flags)))
-                         '(("libcore")
-                           ("libstd_unicode")
-                           ("liballoc")
-                           ("libcollections")
-                           ("librand")
-                           ("liblibc/src" "--cfg" "stdbuild")
-                           ("libunwind" "-l" "gcc_s")
-                           ("libcompiler_builtins")
-                           ("liballoc_system")
-                           ("libpanic_unwind")
-                           ;; Uses "cc" to link.
-                           ("libstd" "-l" "dl" "-l" "rt" "-l" "pthread")
-                           ("libarena")
-
-                           ;; Test dependencies:
-
-                           ("libgetopts")
-                           ("libterm")
-                           ("libtest")))
-               #t)))
-         ;; This phase is overridden by newer versions.
-         (replace 'check
-           (const #t))
-         ;; This phase is overridden by newer versions.
+           (lambda* (#:key make-flags parallel-build? #:allow-other-keys)
+             (let* ((src-root (getcwd))
+                    (job-count (if parallel-build?
+                                   (parallel-job-count)
+                                   1))
+                    (job-spec (string-append "-j" (number->string job-count))))
+               ;; Adapted from:
+               ;; https://github.com/dtolnay/bootstrap/blob/master/build.sh.
+               (chdir "../mrustc")
+               (setenv "MINICARGO_FLAGS" job-spec)
+               (setenv "CARGO_BUILD_JOBS" (number->string job-count))
+               (display "Building rustc...\n")
+               (apply invoke "make" "-f" "minicargo.mk" "output/rustc"
+                      job-spec make-flags)
+               (display "Building cargo...\n")
+               (apply invoke "make" "-f" "minicargo.mk" "output/cargo"
+                      job-spec make-flags)
+               (display "Rebuilding stdlib with rustc...\n")
+               ;; Note: invoking make with -j would cause a compiler error
+               ;; (unexpected panic).
+               (apply invoke "make" "-C" "run_rustc" make-flags))))
          (replace 'install
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
-                    (target-system ,(or (%current-target-system)
-                                        (nix-system->gnu-triplet
-                                         (%current-system))))
-                    (out-libs (string-append out "/lib/rustlib/"
-                                             target-system "/lib")))
-                                        ;(setenv "CFG_PREFIX" out)
-               (mkdir-p out-libs)
-               (copy-recursively "output/target-libs" out-libs)
-               (install-file "output/rustc-build/rustc"
-                             (string-append out "/bin"))
-               (install-file "output/rustc-build/rustdoc"
-                             (string-append out "/bin"))
-               (install-file "output/cargo-build/cargo"
-                             (string-append (assoc-ref outputs "cargo")
-                                            "/bin")))
-             #t)))))
-    (build-system gnu-build-system)
-    (native-inputs
-     `(("bison" ,bison) ; For the tests
-       ("cmake" ,cmake-minimal)
-       ("flex" ,flex) ; For the tests
-       ;; FIXME: Rust 1.27 and some later versions require GDB 8.2 specifically.
-       ;; See <https://bugs.gnu.org/37810>.  Use it on all Rusts for simplicity.
-       ("gdb" ,gdb-8.2) ; For the tests
-       ("procps" ,procps) ; For the tests
-       ("python-2" ,python-2)
-       ("rustc-bootstrap" ,mrustc)
-       ("cargo-bootstrap" ,mrustc "cargo")
-       ("pkg-config" ,pkg-config) ; For "cargo"
-       ("which" ,which)))
-    (inputs
-     `(("jemalloc" ,jemalloc-4.5.0)
-       ("llvm" ,llvm-3.9.1)
-       ("openssl" ,openssl-1.0)
-       ("libssh2" ,libssh2) ; For "cargo"
-       ("libcurl" ,curl)))  ; For "cargo"
-
-    ;; rustc invokes gcc, so we need to set its search paths accordingly.
-    ;; Note: duplicate its value here to cope with circular dependencies among
-    ;; modules (see <https://bugs.gnu.org/31392>).
-    (native-search-paths
-     (list (search-path-specification
-            (variable "C_INCLUDE_PATH")
-            (files '("include")))
-           (search-path-specification
-            (variable "CPLUS_INCLUDE_PATH")
-            (files '("include/c++" "include")))
-           (search-path-specification
-            (variable "LIBRARY_PATH")
-            (files '("lib" "lib64")))))
-
-    (supported-systems
-     (delete "i686-linux"               ; fails to build, see #35519
-             %supported-systems))
+                    (cargo (assoc-ref outputs "cargo"))
+                    (bin (string-append out "/bin"))
+                    (rustc (string-append bin "/rustc"))
+                    (cargo-bin (string-append cargo "/bin"))
+                    (lib (string-append out "/lib"))
+                    (gnu-triplet ,(or (%current-target-system)
+                                      (nix-system->gnu-triplet-for-rust)))
+                    (system-lib-prefix (string-append lib "/rustlib/"
+                                                      gnu-triplet "/lib")))
+               (mkdir-p (dirname rustc))
+               (copy-file "run_rustc/output/prefix/bin/rustc_binary" rustc)
+               (wrap-program rustc
+                 `("LD_LIBRARY_PATH" = (,system-lib-prefix)))
+               (mkdir-p lib)
+               (copy-recursively "run_rustc/output/prefix/lib" lib)
+               (install-file "run_rustc/output/prefix/bin/cargo" cargo-bin)))))))
     (synopsis "Compiler for the Rust programming language")
     (description "Rust is a systems programming language that provides memory
 safety and thread safety guarantees.")
-    (home-page "https://www.rust-lang.org")
+    (home-page "https://github.com/thepowersgang/mrustc")
+
+    ;; So far mrustc is x86_64-only.  It may support i686 soon:
+    ;; <https://github.com/thepowersgang/mrustc/issues/78>.
+    (supported-systems '("x86_64-linux"))
+
     ;; Dual licensed.
     (license (list license:asl2.0 license:expat))))
 
-(define-public rust-1.20
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.19 "1.20.0"
-          "0542y4rnzlsrricai130mqyxl8r6rd991frb4qsnwb27yigqg91a")))
-    (package
-      (inherit base-rust)
-      (source
-        (origin
-          (inherit (package-source base-rust))
-          (snippet '(begin
-                      (delete-file-recursively "src/jemalloc")
-                      (delete-file-recursively "src/llvm")
-                      #t))
-          (patches '())))
-      (native-inputs
-       `(;; The tests fail with newer versions of GNU Make.
-         ("make" ,gnu-make-4.2)
-         ,@(package-native-inputs base-rust)))
-      (outputs '("out" "doc" "cargo"))
-      ;; Since rust-1.19 is local, it's quite probable that Hydra
-      ;; will build rust-1.19 only as a dependency of rust-1.20.
-      ;; But then Hydra will use the wrong properties, the ones here,
-      ;; for rust-1.19.  Therefore, we copied the properties of
-      ;; rust-1.19 here.
-      (properties '((timeout . 72000)               ;20 hours
-                    (max-silent-time . 18000)))     ;5 hours (for armel)
-      (arguments
-       (substitute-keyword-arguments (package-arguments rust-1.19)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             (add-after 'patch-tests 'patch-cargo-tests
-               (lambda _
-                 (substitute* "src/tools/cargo/tests/build.rs"
-                  (("/usr/bin/env") (which "env"))
-                  ;; Guix llvm is compiled without asmjs-unknown-emscripten.
-                  (("fn wasm32_final_outputs") "#[ignore]\nfn wasm32_final_outputs"))
-                 (substitute* "src/tools/cargo/tests/death.rs"
-                  ;; This is stuck when built in container.
-                  (("fn ctrl_c_kills_everyone") "#[ignore]\nfn ctrl_c_kills_everyone"))
-                 ;; Prints test output in the wrong order when built on
-                 ;; i686-linux.
-                 (substitute* "src/tools/cargo/tests/test.rs"
-                   (("fn cargo_test_env") "#[ignore]\nfn cargo_test_env"))
-
-                 ;; These tests pull in a dependency on "git", which changes
-                 ;; too frequently take part in the Rust toolchain.
-                 (substitute* "src/tools/cargo/tests/new.rs"
-                   (("fn author_prefers_cargo") "#[ignore]\nfn author_prefers_cargo")
-                   (("fn finds_author_git") "#[ignore]\nfn finds_author_git")
-                   (("fn finds_local_author_git") "#[ignore]\nfn finds_local_author_git"))
-                 #t))
-             (add-after 'patch-cargo-tests 'ignore-glibc-2.27-incompatible-test
-               ;; https://github.com/rust-lang/rust/issues/47863
-               (lambda _
-                 (substitute* "src/test/run-pass/out-of-stack.rs"
-                   (("// ignore-android") "// ignore-test\n// ignore-android"))
-                 #t))
-             (replace 'configure
-               (lambda* (#:key inputs outputs #:allow-other-keys)
-                 (let* ((out (assoc-ref outputs "out"))
-                        (doc (assoc-ref outputs "doc"))
-                        (gcc (assoc-ref inputs "gcc"))
-                        (gdb (assoc-ref inputs "gdb"))
-                        (binutils (assoc-ref inputs "binutils"))
-                        (python (assoc-ref inputs "python-2"))
-                        (rustc (assoc-ref inputs "rustc-bootstrap"))
-                        (cargo (assoc-ref inputs "cargo-bootstrap"))
-                        (llvm (assoc-ref inputs "llvm"))
-                        (jemalloc (assoc-ref inputs "jemalloc")))
-                   (call-with-output-file "config.toml"
-                     (lambda (port)
-                       (display (string-append "
+(define rust-1.40
+  (package
+    (name "rust")
+    (version "1.40.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rust-uri version))
+       (sha256 (base32 "1ba9llwhqm49w7sz3z0gqscj039m53ky9wxzhaj11z6yg1ah15yx"))
+       (modules '((guix build utils)))
+       ;; llvm-emscripten is no longer bundled, as that codegen backend got
+       ;; removed.
+       (snippet '(for-each delete-file-recursively
+                           '("src/llvm-project"
+                             "vendor/jemalloc-sys/jemalloc")))))
+    (outputs '("out" "cargo"))
+    (properties '((timeout . 72000)           ;20 hours
+                  (max-silent-time . 18000))) ;5 hours (for armel)
+    (build-system gnu-build-system)
+    ;; Rust 1.40 does not ship rustc-internal libraries by default (see
+    ;; rustc-dev-split). This means that librustc_driver.so is no longer
+    ;; available in lib/rustlib/$target/lib, which is the directory
+    ;; included in the runpath of librustc_codegen_llvm-llvm.so.  This is
+    ;; detected by our validate-runpath phase as an error, but it is
+    ;; harmless as the codegen backend is loaded by librustc_driver.so
+    ;; itself, which must at that point have been already loaded.  As such,
+    ;; we skip validating the runpath for Rust 1.40.  Rust 1.41 stopped
+    ;; putting the codegen backend in a separate library, which makes this
+    ;; workaround only necessary for this release.
+    (arguments
+     `(#:validate-runpath? #f
+       ;; Only the final Rust is tested, not the intermediate bootstrap ones,
+       ;; for performance and simplicity.
+       #:tests? #f
+       #:imported-modules ,%cargo-utils-modules ;for `generate-all-checksums'
+       #:modules ((guix build cargo-utils)
+                  (guix build utils)
+                  (guix build gnu-build-system)
+                  (ice-9 match)
+                  (srfi srfi-1))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'set-env
+           (lambda* (#:key inputs #:allow-other-keys)
+             (setenv "SHELL" (which "sh"))
+             (setenv "CONFIG_SHELL" (which "sh"))
+             (setenv "CC" (search-input-file inputs "/bin/gcc"))
+             ;; The Guix LLVM package installs only shared libraries.
+             (setenv "LLVM_LINK_SHARED" "1")))
+         (add-after 'unpack 'add-cc-shim-to-path
+           (lambda _
+             (mkdir-p "/tmp/bin")
+             (symlink (which "gcc") "/tmp/bin/cc")
+             (setenv "PATH" (string-append "/tmp/bin:" (getenv "PATH")))))
+         (add-after 'unpack 'neuter-tidy
+           ;; We often need to patch tests with various Guix-specific paths.
+           ;; This often increases the line length and makes tidy, rustc's
+           ;; style checker, complain.  We could insert additional newlines or
+           ;; add an "// ignore-tidy-linelength" comment, but as an ignore
+           ;; comment must be used, both approaches are fragile due to
+           ;; upstream formatting changes.  As such, disable running the
+           ;; linter during tests, since it's intended for rustc developers
+           ;; anyway.
+           (lambda _
+             (substitute* "src/bootstrap/builder.rs"
+               ((".*::Tidy,.*")
+                ""))))
+         (replace 'configure
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (gcc (assoc-ref inputs "gcc"))
+                    (python (assoc-ref inputs "python"))
+                    (binutils (assoc-ref inputs "binutils"))
+                    (rustc (assoc-ref inputs "rustc-bootstrap"))
+                    (cargo (assoc-ref inputs "cargo-bootstrap"))
+                    (llvm (assoc-ref inputs "llvm"))
+                    (jemalloc (assoc-ref inputs "jemalloc")))
+               ;; The compiler is no longer directly built against jemalloc, but
+               ;; rather via the jemalloc-sys crate (which vendors the jemalloc
+               ;; source). To use jemalloc we must enable linking to it (otherwise
+               ;; it would use the system allocator), and set an environment
+               ;; variable pointing to the compiled jemalloc.
+               (setenv "JEMALLOC_OVERRIDE"
+                       (search-input-file inputs
+                                          "/lib/libjemalloc_pic.a"))
+               (call-with-output-file "config.toml"
+                 (lambda (port)
+                   (display (string-append "
 [llvm]
 [build]
 cargo = \"" cargo "/bin/cargo" "\"
 rustc = \"" rustc "/bin/rustc" "\"
-docs = true
-python = \"" python "/bin/python2" "\"
-gdb = \"" gdb "/bin/gdb" "\"
+docs = false
+python = \"" python "/bin/python" "\"
 vendor = true
 submodules = false
 [install]
 prefix = \"" out "\"
-docdir = \"" doc "/share/doc/rust" "\"
 sysconfdir = \"etc\"
 [rust]
+jemalloc=true
 default-linker = \"" gcc "/bin/gcc" "\"
 channel = \"stable\"
 rpath = true
-" ;; There are 2 failed codegen tests:
-;; codegen/mainsubprogram.rs and codegen/mainsubprogramstart.rs
-;; These tests require a patched LLVM
-"codegen-tests = false
 [target." ,(nix-system->gnu-triplet-for-rust) "]
 llvm-config = \"" llvm "/bin/llvm-config" "\"
 cc = \"" gcc "/bin/gcc" "\"
 cxx = \"" gcc "/bin/g++" "\"
 ar = \"" binutils "/bin/ar" "\"
-jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\"
 [dist]
-") port)))
-                   #t)))
-             (add-after 'configure 'provide-cc
-               (lambda* (#:key inputs #:allow-other-keys)
-                 (symlink (string-append (assoc-ref inputs "gcc") "/bin/gcc")
-                          "/tmp/cc")
-                 (setenv "PATH" (string-append "/tmp:" (getenv "PATH")))
-                 #t))
-             (add-after 'provide-cc 'configure-archiver
-               (lambda* (#:key inputs #:allow-other-keys)
-                 (substitute* "src/build_helper/lib.rs"
-                  ;; Make sure "ar" is always used as the archiver.
-                  (("\"musl\"") "\"\"")
-                  ;; Then substitute "ar" by our name.
-                  (("\"ar\"") (string-append "\""
-                               (assoc-ref inputs "binutils")
-                               "/bin/ar\"")))
-                 #t))
-             (delete 'patch-cargo-tomls)
-             (add-before 'build 'reset-timestamps-after-changes
-               (lambda* _
-                 (for-each
-                  (lambda (filename)
-                    ;; Rust 1.20.0 treats timestamp 0 as "file doesn't exist".
-                    ;; Therefore, use timestamp 1.
-                    (utime filename 1 1 1 1))
-                  (find-files "." #:directories? #t))
-                 #t))
-             (replace 'build
-               (lambda* _
-                 (invoke "./x.py" "build")
-                 (invoke "./x.py" "build" "src/tools/cargo")))
-             (replace 'check
-               (lambda* _
-                 ;; Disable parallel execution to prevent EAGAIN errors when
-                 ;; running tests.
-                 (invoke "./x.py" "-j1" "test" "-vv")
-                 (invoke "./x.py" "-j1" "test" "src/tools/cargo")
-                 #t))
-             (replace 'install
-               (lambda* (#:key outputs #:allow-other-keys)
-                 (invoke "./x.py" "install")
-                 (substitute* "config.toml"
-                   ;; replace prefix to specific output
-                   (("prefix = \"[^\"]*\"")
-                    (string-append "prefix = \"" (assoc-ref outputs "cargo") "\"")))
-                 (invoke "./x.py" "install" "cargo")))
-             (add-after 'install 'delete-install-logs
-               (lambda* (#:key outputs #:allow-other-keys)
-                 (define (delete-manifest-file out-path file)
-                   (delete-file (string-append out-path "/lib/rustlib/" file)))
-
-                 (let ((out (assoc-ref outputs "out"))
-                       (cargo-out (assoc-ref outputs "cargo")))
-                   (for-each
-                     (lambda (file) (delete-manifest-file out file))
-                     '("install.log"
-                       "manifest-rust-docs"
-                       ,(string-append "manifest-rust-std-"
-                                       (nix-system->gnu-triplet-for-rust))
-                       "manifest-rustc"))
-                   (for-each
-                     (lambda (file) (delete-manifest-file cargo-out file))
-                     '("install.log"
-                       "manifest-cargo"))
-                   #t)))
-             (add-after 'install 'wrap-rustc
-               (lambda* (#:key inputs outputs #:allow-other-keys)
-                 (let ((out (assoc-ref outputs "out"))
-                       (libc (assoc-ref inputs "libc"))
-                       (ld-wrapper (assoc-ref inputs "ld-wrapper")))
-                   ;; Let gcc find ld and libc startup files.
-                   (wrap-program (string-append out "/bin/rustc")
-                     `("PATH" ":" prefix (,(string-append ld-wrapper "/bin")))
-                     `("LIBRARY_PATH" ":" suffix (,(string-append libc "/lib"))))
-                   #t))))))))))
-
-(define-public rust-1.21
-  (let ((base-rust (rust-bootstrapped-package rust-1.20 "1.21.0"
-                    "1yj8lnxybjrybp00fqhxw8fpr641dh8wcn9mk44xjnsb4i1c21qp")))
-    (package
-      (inherit base-rust)
-      (arguments
-       (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             (add-after 'configure 'remove-ar
-               (lambda* (#:key inputs #:allow-other-keys)
-                 ;; Remove because toml complains about "unknown field".
-                 (substitute* "config.toml"
-                  (("^ar =.*") "\n"))
-                 #t)))))))))
-
-(define-public rust-1.22
-  (let ((base-rust (rust-bootstrapped-package rust-1.21 "1.22.1"
-                    "1lrzzp0nh7s61wgfs2h6ilaqi6iq89f1pd1yaf65l87bssyl4ylb")))
-    (package
-      (inherit base-rust)
-      (arguments
-       (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             (add-after 'unpack 'remove-flaky-test
-               (lambda _
-                 ;; See <https://github.com/rust-lang/rust/issues/43402>.
-                 (when (file-exists? "src/test/run-make/issue-26092")
-                   (delete-file-recursively "src/test/run-make/issue-26092"))
-                 #t)))))))))
-
-(define-public rust-1.23
-  (let ((base-rust (rust-bootstrapped-package rust-1.22 "1.23.0"
-                    "14fb8vhjzsxlbi6yrn1r6fl5dlbdd1m92dn5zj5gmzfwf4w9ar3l")))
-    (package
-      (inherit base-rust)
-      (arguments
-       (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             (delete 'configure-archiver)
-             (delete 'remove-ar)
-             (add-after 'unpack 'dont-build-native
-               (lambda _
-                 ;; XXX: Revisit this when we use gcc 6.
-                 (substitute* "src/binaryen/CMakeLists.txt"
-                  (("ADD_COMPILE_FLAG\\(\\\"-march=native\\\"\\)") ""))
-                 #t)))))))))
+") port))))))
+         (replace 'build
+           (lambda* (#:key parallel-build? #:allow-other-keys)
+             (let ((job-spec (string-append
+                              "-j" (if parallel-build?
+                                       (number->string (parallel-job-count))
+                                       "1"))))
+               (invoke "./x.py" job-spec "build" "--stage=1"
+                       "src/libstd"
+                       "src/tools/cargo"))))
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (cargo-out (assoc-ref outputs "cargo"))
+                    (gnu-triplet ,(or (%current-target-system)
+                                      (nix-system->gnu-triplet-for-rust)))
+                    (build (string-append "build/" gnu-triplet)))
+               ;; Manually do the installation instead of calling './x.py
+               ;; install', as that is slow and needlessly rebuilds some
+               ;; things.
+               (install-file (string-append build "/stage1/bin/rustc")
+                             (string-append out "/bin"))
+               (copy-recursively (string-append build "/stage1/lib")
+                                 (string-append out "/lib"))
+               (install-file (string-append build "/stage1-tools-bin/cargo")
+                             (string-append cargo-out "/bin")))))
+         (add-after 'install 'delete-install-logs
+           (lambda* (#:key outputs #:allow-other-keys)
+             (for-each (lambda (f)
+                         (false-if-exception (delete-file f)))
+                       (append-map (lambda (output)
+                                     (find-files (string-append
+                                                  output "/lib/rustlib")
+                                                 "(^install.log$|^manifest-)"))
+                                   (map cdr outputs)))))
+         (add-after 'install 'wrap-rustc
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out"))
+                   (libc (assoc-ref inputs "libc"))
+                   (ld-wrapper (assoc-ref inputs "ld-wrapper")))
+               ;; Let gcc find ld and libc startup files.
+               (wrap-program (string-append out "/bin/rustc")
+                 `("PATH" ":" prefix (,(string-append ld-wrapper "/bin")))
+                 `("LIBRARY_PATH" ":"
+                   suffix (,(string-append libc "/lib"))))))))))
+    (native-inputs
+     `(("cmake" ,cmake-minimal)
+       ("pkg-config" ,pkg-config)       ; For "cargo"
+       ("python" ,python-wrapper)
+       ("rustc-bootstrap" ,rust-1.39)
+       ("cargo-bootstrap" ,rust-1.39 "cargo")
+       ("which" ,which)))
+    (inputs
+     `(("jemalloc" ,jemalloc)
+       ("llvm" ,llvm)
+       ("openssl" ,openssl)
+       ("libssh2" ,libssh2)             ; For "cargo"
+       ("libcurl" ,curl)))              ; For "cargo"
+    ;; rustc invokes gcc, so we need to set its search paths accordingly.
+    ;; Note: duplicate its value here to cope with circular dependencies among
+    ;; modules (see <https://bugs.gnu.org/31392>).
+    (native-search-paths
+     (list (search-path-specification
+            (variable "C_INCLUDE_PATH")
+            (files '("include")))
+           (search-path-specification
+            (variable "CPLUS_INCLUDE_PATH")
+            (files '("include/c++" "include")))
+           (search-path-specification
+            (variable "LIBRARY_PATH")
+            (files '("lib" "lib64")))))
+    (synopsis "Compiler for the Rust programming language")
+    (description "Rust is a systems programming language that provides memory
+safety and thread safety guarantees.")
+    (home-page "https://www.rust-lang.org")
+    ;; Dual licensed.
+    (license (list license:asl2.0 license:expat))))
 
-(define-public rust-1.24
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.23 "1.24.1"
-          "1vv10x2h9kq7fxh2v01damdq8pvlp5acyh1kzcda9sfjx12kv99y")))
+(define rust-1.41
+  (let ((base-rust (rust-bootstrapped-package
+                    rust-1.40 "1.41.1"
+                    "0ws5x0fxv57fyllsa6025h3q6j9v3m8nb3syl4x0hgkddq0kvj9q")))
     (package
       (inherit base-rust)
       (arguments
        (substitute-keyword-arguments (package-arguments base-rust)
+         ((#:validate-runpath? _ #t)
+          #t)
          ((#:phases phases)
           `(modify-phases ,phases
-             (delete 'use-readelf-for-tests)
-             (replace 'patch-aarch64-test
+             (delete 'add-cc-shim-to-path)
+             (add-after 'patch-generated-file-shebangs 'patch-cargo-checksums
                (lambda* _
-                 (substitute* "src/librustc_metadata/dynamic_lib.rs"
-                   ;; This test is known to fail on aarch64 and powerpc64le:
-                   ;; https://github.com/rust-lang/rust/issues/45410
-                   (("fn test_loading_cosine") "#[ignore]\nfn test_loading_cosine"))
-                 #t)))))))))
-
-;;; Rust 1.25 release support work with llvm 6--but build with llvm 6 is
-;;; not determenistic due to <https://github.com/rust-lang/rust/issues/50556>.
-;;; Keep using llvm 3.9.1 until builds become determenistic
-(define-public rust-1.25
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.24 "1.25.0"
-          "0baxjr99311lvwdq0s38bipbnj72pn6fgbk6lcq7j555xq53mxpf")))
+                 (substitute* "Cargo.lock"
+                   (("(checksum = )\".*\"" all name)
+                    (string-append name "\"" ,%cargo-reference-hash "\"")))
+                 (generate-all-checksums "vendor"))))))))))
+
+(define rust-1.42
+  (rust-bootstrapped-package
+   rust-1.41 "1.42.0" "0x9lxs82may6c0iln0b908cxyn1cv7h03n5cmbx3j1bas4qzks6j"))
+
+(define rust-1.43
+  (rust-bootstrapped-package
+   rust-1.42 "1.43.0" "18akhk0wz1my6y9vhardriy2ysc482z0fnjdcgs9gy59kmnarxkm"))
+
+;; This version requires llvm <= 11.
+(define rust-1.44
+  (rust-bootstrapped-package
+   rust-1.43 "1.44.1"
+   "0ww4z2v3gxgn3zddqzwqya1gln04p91ykbrflnpdbmcd575n8bky"))
+
+(define rust-1.45
+  (let ((base-rust (rust-bootstrapped-package
+                    rust-1.44 "1.45.2"
+                    "0273a1g3f59plyi1n0azf21qjzwml1yqdnj5z472crz37qggr8xp")))
     (package
       (inherit base-rust)
-      (source
-        (origin
-          (inherit (package-source base-rust))
-          (snippet '(begin
-                      (delete-file-recursively "src/jemalloc")
-                      (delete-file-recursively "src/llvm")
-                      (delete-file-recursively "src/llvm-emscripten")
-                      #t))
-          (patches (search-patches
-                     "rust-1.25-accept-more-detailed-gdb-lines.patch"))))
       (arguments
        (substitute-keyword-arguments (package-arguments base-rust)
          ((#:phases phases)
           `(modify-phases ,phases
-             (add-after 'patch-cargo-tests 'patch-cargo-index-update
+             (add-after 'unpack 'set-linker-locale-to-utf8
                (lambda _
-                 (substitute* "src/tools/cargo/tests/generate-lockfile.rs"
-                   ;; This test wants to update the crate index.
-                   (("fn no_index_update") "#[ignore]\nfn no_index_update"))
-                 #t))
-             (replace 'patch-aarch64-test
-               (lambda _
-                 (substitute* "src/librustc_metadata/dynamic_lib.rs"
-                   ;; This test is known to fail on aarch64 and powerpc64le:
-                   ;; https://github.com/rust-lang/rust/issues/45410
-                   (("fn test_loading_cosine") "#[ignore]\nfn test_loading_cosine"))
-                 ;; This test fails on aarch64 with llvm@6.0:
-                 ;; https://github.com/rust-lang/rust/issues/49807
-                 ;; other possible solution:
-                 ;; https://github.com/rust-lang/rust/pull/47688
-                 (delete-file "src/test/debuginfo/by-value-self-argument-in-trait-impl.rs")
-                 #t))
-             (delete 'ignore-glibc-2.27-incompatible-test))))))))
-
-(define-public rust-1.26
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.25 "1.26.2"
-          "0047ais0fvmqvngqkdsxgrzhb0kljg8wy85b01kbbjc88hqcz7pv")))
-    (package
-      (inherit base-rust)
-      (source
-        (origin
-          (inherit (package-source base-rust))
-          (patches (search-patches
-                     "rust-coresimd-doctest.patch"
-                     "rust-1.25-accept-more-detailed-gdb-lines.patch"))))
-      (inputs
-       (alist-replace "openssl" (list openssl)
-                      (package-inputs base-rust)))
+                 (substitute* (find-files "." "^linker.rs$")
+                   (("linker.env\\(\"LC_ALL\", \"C\"\\);")
+                    "linker.env(\"LC_ALL\", \"en_US.UTF-8\");")))))))))))
+
+(define rust-1.46
+  (rust-bootstrapped-package
+   rust-1.45 "1.46.0" "0a17jby2pd050s24cy4dfc0gzvgcl585v3vvyfilniyvjrqknsid"))
+
+(define rust-1.47
+  (let ((base-rust (rust-bootstrapped-package
+                    rust-1.46 "1.47.0"
+                    "07fqd2vp7cf1ka3hr207dnnz93ymxml4935vp74g4is79h3dz19i")))
+    (package/inherit base-rust
       (arguments
        (substitute-keyword-arguments (package-arguments base-rust)
          ((#:phases phases)
           `(modify-phases ,phases
-             ;; binaryen was replaced with LLD project from LLVM
-             (delete 'dont-build-native)
-             (replace 'check
-               (lambda* _
-                 ;; Enable parallel execution.
-                 (let ((parallel-job-spec
-                        (string-append "-j" (number->string
-                                             (min 4
-                                                  (parallel-job-count))))))
-                   (invoke "./x.py" parallel-job-spec "test" "-vv")
-                   (invoke "./x.py" parallel-job-spec "test"
-                           "src/tools/cargo"))))
-             (replace 'remove-unsupported-tests
-               (lambda* _
-                 ;; Our ld-wrapper cannot process non-UTF8 bytes in LIBRARY_PATH.
-                 ;; <https://lists.gnu.org/archive/html/guix-devel/2017-06/msg00193.html>
-                 (delete-file-recursively "src/test/run-make-fulldeps/linker-output-non-utf8")
-                 #t))
-             (replace 'patch-cargo-tests
-               (lambda* _
-                 (substitute* "src/tools/cargo/tests/testsuite/build.rs"
-                   (("/usr/bin/env") (which "env"))
-                   ;; Guix llvm is compiled without asmjs-unknown-emscripten.
-                   (("fn wasm32_final_outputs") "#[ignore]\nfn wasm32_final_outputs"))
-                 (substitute* "src/tools/cargo/tests/testsuite/death.rs"
-                   ;; This is stuck when built in container.
-                   (("fn ctrl_c_kills_everyone") "#[ignore]\nfn ctrl_c_kills_everyone"))
-                 ;; Prints test output in the wrong order when built on
-                 ;; i686-linux.
-                 (substitute* "src/tools/cargo/tests/testsuite/test.rs"
-                   (("fn cargo_test_env") "#[ignore]\nfn cargo_test_env"))
-
-                 ;; Avoid dependency on "git".
-                 (substitute* "src/tools/cargo/tests/testsuite/new.rs"
-                   (("fn author_prefers_cargo") "#[ignore]\nfn author_prefers_cargo")
-                   (("fn finds_author_git") "#[ignore]\nfn finds_author_git")
-                   (("fn finds_local_author_git") "#[ignore]\nfn finds_local_author_git"))
-                 #t))
-             (add-after 'patch-cargo-tests 'disable-cargo-test-for-nightly-channel
-               (lambda* _
-                 ;; This test failed to work on "nightly" channel builds
-                 ;; https://github.com/rust-lang/cargo/issues/5648
-                 (substitute* "src/tools/cargo/tests/testsuite/resolve.rs"
-                   (("fn test_resolving_minimum_version_with_transitive_deps")
-                    "#[ignore]\nfn test_resolving_minimum_version_with_transitive_deps"))
-                 #t))
-             (replace 'patch-cargo-index-update
-               (lambda* _
-                 (substitute* "src/tools/cargo/tests/testsuite/generate_lockfile.rs"
-                   ;; This test wants to update the crate index.
-                   (("fn no_index_update") "#[ignore]\nfn no_index_update"))
-                 #t))))))
-      (supported-systems
-       (delete "aarch64-linux"          ; fails to build, see #47019
-               (package-supported-systems base-rust))))))
-
-(define-public rust-1.27
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.26 "1.27.2"
-          "0pg1s37bhx9zqbynxyydq5j6q7kij9vxkcv8maz0m25prm88r0cs")))
+             (replace 'build
+               ;; The standard library source location moved in this release.
+               (lambda* (#:key parallel-build? #:allow-other-keys)
+                 (let ((job-spec (string-append
+                                  "-j" (if parallel-build?
+                                           (number->string (parallel-job-count))
+                                           "1"))))
+                   (invoke "./x.py" job-spec "build" "--stage=1"
+                           "library/std"
+                           "src/tools/cargo")))))))))))
+
+(define rust-1.48
+  (rust-bootstrapped-package
+   rust-1.47 "1.48.0" "0fz4gbb5hp5qalrl9lcl8yw4kk7ai7wx511jb28nypbxninkwxhf"))
+
+(define rust-1.49
+  (rust-bootstrapped-package
+   rust-1.48 "1.49.0" "0yf7kll517398dgqsr7m3gldzj0iwsp3ggzxrayckpqzvylfy2mm"))
+
+(define rust-1.50
+  (rust-bootstrapped-package
+   rust-1.49 "1.50.0" "0pjs7j62maiyvkmhp9zrxl528g2n0fphp4rq6ap7aqdv0a6qz5wm"))
+
+(define rust-1.51
+  (rust-bootstrapped-package
+   rust-1.50 "1.51.0" "0ixqkqglv3isxbvl4ldr4byrkx692wghsz3fasy1pn5kr2prnsvs"))
+
+;;; The LLVM requiriment has been bumped to version 10 in Rust 1.52.  Use the
+;;; latest available.
+(define rust-1.52
+  (let ((base-rust (rust-bootstrapped-package
+                    rust-1.51 "1.52.1"
+                    "165zs3xzp9dravybwslqs1qhn35agp6wacmzpymqg3qfdni26vrs")))
     (package
       (inherit base-rust)
-      (source
-        (origin
-          (inherit (package-source base-rust))
-          (patches (search-patches "rust-coresimd-doctest.patch"
-                                   "rust-bootstrap-stage0-test.patch"
-                                   "rust-1.25-accept-more-detailed-gdb-lines.patch"
-                                   "rust-reproducible-builds.patch"))))
-      (arguments
-       (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             (add-before 'install 'mkdir-prefix-paths
-               (lambda* (#:key outputs #:allow-other-keys)
-                 ;; As result of https://github.com/rust-lang/rust/issues/36989
-                 ;; `prefix' directory should exist before `install' call
-                 (mkdir-p (assoc-ref outputs "out"))
-                 (mkdir-p (assoc-ref outputs "cargo"))
-                 #t))
-             (add-after 'patch-cargo-tests 'disable-thinlto-test
-               (lambda* _
-                 ;; thinlto required llvm 6.0 for work
-                 (substitute* "src/tools/cargo/tests/testsuite/path.rs"
-                   (("fn thin_lto_works") "#[ignore]\nfn thin_lto_works"))
-                 #t)))))))))
+      (inputs (alist-replace "llvm" (list llvm-12)
+                             (package-inputs base-rust))))))
 
-(define-public rust-1.28
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.27 "1.28.0"
-          "11k4rn77bca2rikykkk9fmprrgjswd4x4kaq7fia08vgkir82nhx")))
-    (package
-      (inherit base-rust)
-      (source
-        (origin
-          (inherit (package-source base-rust))
-          (patches (search-patches "rust-coresimd-doctest.patch"
-                                   "rust-bootstrap-stage0-test.patch"
-                                   "rust-1.25-accept-more-detailed-gdb-lines.patch"
-                                   "rust-reproducible-builds.patch"))))
-      (inputs
-       ;; Use LLVM 6.0
-       (alist-replace "llvm" (list llvm-6)
-                      (package-inputs base-rust)))
-      (arguments
-       (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             (add-after 'configure 'enable-codegen-tests
-               ;; Codegen tests should pass with llvm 6, so enable them.
-               (lambda* _
-                 (substitute* "config.toml"
-                   (("codegen-tests = false") ""))
-                 #t))
-             (add-after 'patch-tests 'disable-amd64-avx-test
-               ;; That test would fail on x86_64 machines without avx.
-               (lambda* _
-                 (substitute* "src/test/run-pass/issue-44056.rs"
-                   (("only-x86_64") "ignore-test"))
-                 #t))
-             ;; This is no longer needed as of 1.28
-             (delete 'disable-cargo-test-for-nightly-channel)
-             ;; The thinlto test should pass with llvm 6.
-             (delete 'disable-thinlto-test))))))))
+(define rust-1.53
+  (rust-bootstrapped-package
+   rust-1.52 "1.53.0" "1f95p259dfp5ca118bg107rj3rqwlswy65dxn3hg8sqgl4wwmxsw"))
 
-(define-public rust-1.29
+(define rust-1.54
   (let ((base-rust
-         (rust-bootstrapped-package rust-1.28 "1.29.2"
-          "1jb787080z754caa2w3w1amsygs4qlzj9rs1vy64firfmabfg22h")))
-    (package
-      (inherit base-rust)
+         (rust-bootstrapped-package
+          rust-1.53
+          "1.54.0" "0xk9dhfff16caambmwij67zgshd8v9djw6ha0fnnanlv7rii31dc")))
+    (package/inherit base-rust
       (source
-        (origin
-          (inherit (package-source base-rust))
-          (patches (search-patches "rust-1.25-accept-more-detailed-gdb-lines.patch"
-                                   "rust-reproducible-builds.patch")))))))
+       (origin
+         (inherit (package-source base-rust))
+         (snippet '(delete-file-recursively "src/llvm-project")))))))
 
-(define-public rust-1.30
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.29 "1.30.1"
-          "0aavdc1lqv0cjzbqwl5n59yd0bqdlhn0zas61ljf38yrvc18k8rn")))
-    (package
-      (inherit base-rust)
-      (source
-        (origin
-          (inherit (package-source base-rust))
-          (snippet '(begin
-                      (delete-file-recursively "src/jemalloc")
-                      (delete-file-recursively "src/llvm")
-                      (delete-file-recursively "src/llvm-emscripten")
-                      (delete-file-recursively "src/tools/clang")
-                      (delete-file-recursively "src/tools/lldb")
-                      #t))))
-      (arguments
-       (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             (add-after 'patch-cargo-tests 'patch-cargo-env-shebang
-               (lambda* (#:key inputs #:allow-other-keys)
-                 (let ((coreutils (assoc-ref inputs "coreutils")))
-                   (substitute* "src/tools/cargo/tests/testsuite/fix.rs"
-                     ;; Cargo has a test which explicitly sets a
-                     ;; RUSTC_WRAPPER environment variable which points
-                     ;; to /usr/bin/env. Since it's not a shebang, it
-                     ;; needs to be manually patched
-                     (("\"/usr/bin/env\"")
-                      (string-append "\"" coreutils "/bin/env\"")))
-                   #t)))
-             (add-after 'patch-cargo-env-shebang 'ignore-cargo-package-tests
-               (lambda* _
-                 (substitute* "src/tools/cargo/tests/testsuite/package.rs"
-                   ;; These tests largely check that cargo outputs warning/error
-                   ;; messages as expected. It seems that cargo outputs an
-                   ;; absolute path to something in the store instead of the
-                   ;; expected relative path (e.g. `[..]`) so we'll ignore
-                   ;; these for now
-                   (("fn include") "#[ignore]\nfn include")
-                   (("fn exclude") "#[ignore]\nfn exclude"))
-                   #t))
-             ;; The test has been moved elsewhere.
-             (replace 'disable-amd64-avx-test
-               (lambda _
-                 (substitute* "src/test/ui/run-pass/issues/issue-44056.rs"
-                  (("only-x86_64") "ignore-test"))
-                  #t)))))))))
+(define rust-1.55
+  (rust-bootstrapped-package
+   rust-1.54 "1.55.0" "07l28f7grdmi65naq71pbmvdd61hwcpi40ry7kp7dy7m233rldxj"))
 
-(define (patch-command-exec-tests-phase test-path)
-  "The command-exec.rs test moves around between releases.  We need to apply
-a Guix-specific patch to it for each release.  This function generates the phase
-that applies said patch, parametrized by the test-path.  This is done this way
-because the phase is more complex than the equivalents for other tests that
-move around."
- `(lambda* (#:key inputs #:allow-other-keys)
-    (let ((coreutils (assoc-ref inputs "coreutils")))
-      (substitute* ,test-path
-        ;; This test suite includes some tests that the stdlib's
-        ;; `Command` execution properly handles situations where
-        ;; the environment or PATH variable are empty, but this
-        ;; fails since we don't have `echo` available in the usual
-        ;; Linux directories.
-        ;; NB: the leading space is so we don't fail a tidy check
-        ;; for trailing whitespace, and the newlines are to ensure
-        ;; we don't exceed the 100 chars tidy check as well
-        ((" Command::new\\(\"echo\"\\)")
-         (string-append "\nCommand::new(\"" coreutils "/bin/echo\")\n")))
-      #t)))
+(define rust-1.56
+  (rust-bootstrapped-package
+   rust-1.55 "1.56.1" "04cmqx7nn63hzz7z27b2b0dj2qx18rck9ifvip43s6dampx8v2f3"))
 
-(define-public rust-1.31
+(define rust-1.57
   (let ((base-rust
-         (rust-bootstrapped-package rust-1.30 "1.31.1"
-          "0sk84ff0cklybcp0jbbxcw7lk7mrm6kb6km5nzd6m64dy0igrlli")))
+         (rust-bootstrapped-package
+          rust-1.56 "1.57.0"
+          "06jw8ka2p3kls8p0gd4p0chhhb1ia1mlvj96zn78n7qvp71zjiim")))
     (package
       (inherit base-rust)
+      (outputs (cons "rustfmt" (package-outputs base-rust)))
       (arguments
        (substitute-keyword-arguments (package-arguments base-rust)
+         ((#:tests? _ #f)
+          #t)
          ((#:phases phases)
           `(modify-phases ,phases
-             (add-after 'patch-tests 'patch-command-exec-tests
-               ,(patch-command-exec-tests-phase
-                  "src/test/run-pass/command-exec.rs"))
-             ;; The test has been moved elsewhere.
-             (replace 'disable-amd64-avx-test
+             (add-after 'unpack 'relax-gdb-auto-load-safe-path
+               ;; Allow GDB to load binaries from any location, otherwise the
+               ;; gdbinfo tests fail.  This is only useful when testing with a
+               ;; GDB version newer than 8.2.
                (lambda _
-                 (substitute* "src/test/ui/issues/issue-44056.rs"
-                  (("only-x86_64") "ignore-test"))
-                 #t))
-             (add-after 'patch-tests 'patch-process-docs-rev-cmd
-               (lambda* _
-                 ;; Disable some doc tests which depend on the "rev" command
-                 ;; https://github.com/rust-lang/rust/pull/58746
-                 (substitute* "src/libstd/process.rs"
-                   (("```rust") "```rust,no_run"))
-                 #t)))))))))
-
-(define-public rust-1.32
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.31 "1.32.0"
-          "0ji2l9xv53y27xy72qagggvq47gayr5lcv2jwvmfirx029vlqnac")))
-    (package
-      (inherit base-rust)
-      (source
-        (origin
-          (inherit (package-source base-rust))
-          (snippet '(begin (delete-file-recursively "src/llvm")
-                           (delete-file-recursively "src/llvm-emscripten")
-                           (delete-file-recursively "src/tools/clang")
-                           (delete-file-recursively "src/tools/lldb")
-                           (delete-file-recursively "vendor/jemalloc-sys/jemalloc")
-                           #t))
-          (patches (search-patches "rust-reproducible-builds.patch"))
-          ;; the vendor directory has moved to the root of
-          ;; the tarball, so we have to strip an extra prefix
-          (patch-flags '("-p2"))))
-      (inputs
-       ;; Downgrade to LLVM 6, all LTO tests appear to fail with LLVM 7.0.1
-       (alist-replace "llvm" (list llvm-6)
-                      (package-inputs base-rust)))
-      (arguments
-       (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             ;; Cargo.lock and the vendor/ directory have been moved to the
-             ;; root of the rust tarball
-             (replace 'patch-cargo-checksums
-               (lambda* _
-                 (use-modules (guix build cargo-utils))
-                 (substitute* "Cargo.lock"
-                   (("(\"checksum .* = )\".*\"" all name)
-                    (string-append name "\"" ,%cargo-reference-hash "\"")))
-                 (generate-all-checksums "vendor")
-                 #t))
-             (add-after 'enable-codegen-tests 'override-jemalloc
-               (lambda* (#:key inputs #:allow-other-keys)
-                 ;; The compiler is no longer directly built against jemalloc,
-                 ;; but rather via the jemalloc-sys crate (which vendors the
-                 ;; jemalloc source). To use jemalloc we must enable linking to
-                 ;; it (otherwise it would use the system allocator), and set
-                 ;; an environment variable pointing to the compiled jemalloc.
-                 (substitute* "config.toml"
-                   (("^jemalloc =.*$") "")
-                   (("[[]rust[]]") "\n[rust]\njemalloc=true\n"))
-                 (setenv "JEMALLOC_OVERRIDE" (string-append (assoc-ref inputs "jemalloc")
-                                                            "/lib/libjemalloc_pic.a"))
-                 #t))
-             ;; Remove no longer relevant steps
-             (delete 'remove-flaky-test)
-             (delete 'patch-aarch64-test))))))))
-
-(define-public rust-1.33
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.32 "1.33.0"
-           "152x91mg7bz4ygligwjb05fgm1blwy2i70s2j03zc9jiwvbsh0as")))
-    (package
-      (inherit base-rust)
-      (source
-        (origin
-          (inherit (package-source base-rust))
-          (patches '())
-          (patch-flags '("-p1"))))
-      (inputs
-       ;; Upgrade to jemalloc@5.1.0
-       (alist-replace "jemalloc" (list jemalloc)
-                      (package-inputs base-rust)))
-      (arguments
-       (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             (delete 'ignore-cargo-package-tests)
-             (add-after 'configure 'configure-test-threads
-               ;; Several rustc and cargo tests will fail if run on one core
-               ;; https://github.com/rust-lang/rust/issues/59122
-               ;; https://github.com/rust-lang/cargo/issues/6746
-               ;; https://github.com/rust-lang/rust/issues/58907
-               (lambda* (#:key inputs #:allow-other-keys)
-                 (setenv "RUST_TEST_THREADS" "2")
-                 #t)))))))))
-
-(define-public rust-1.34
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.33 "1.34.1"
-           "19s09k7y5j6g3y4d2rk6kg9pvq6ml94c49w6b72dmq8p9lk8bixh")))
-    (package
-      (inherit base-rust)
-      (source
-        (origin
-          (inherit (package-source base-rust))
-          (snippet '(begin
-                      (delete-file-recursively "src/llvm-emscripten")
-                      (delete-file-recursively "src/llvm-project")
-                      (delete-file-recursively "vendor/jemalloc-sys/jemalloc")
-                      #t)))))))
-
-(define-public rust-1.35
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.34 "1.35.0"
-           "0bbizy6b7002v1rdhrxrf5gijclbyizdhkglhp81ib3bf5x66kas")))
-    (package
-      (inherit base-rust)
-      (inputs
-       (alist-replace "llvm" (list llvm-8)
-                      (package-inputs base-rust)))
-      (arguments
-       (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             ;; The tidy test includes a pass which ensures large binaries
-             ;; don't accidentally get checked into the rust git repo.
-             ;; Unfortunately the test assumes that git is always available,
-             ;; so we'll comment out the invocation of this pass.
-             (add-after 'configure 'disable-tidy-bins-check
-               (lambda* _
-                 (substitute* "src/tools/tidy/src/main.rs"
-                   (("bins::check") "//bins::check"))
-                 #t)))))))))
-
-(define-public rust-1.36
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.35 "1.36.0"
-           "06xv2p6zq03lidr0yaf029ii8wnjjqa894nkmrm6s0rx47by9i04")))
-    (package
-      (inherit base-rust)
-      (arguments
-       (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             (delete 'patch-process-docs-rev-cmd))))))))
-
-(define-public rust-1.37
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.36 "1.37.0"
-           "1hrqprybhkhs6d9b5pjskfnc5z9v2l2gync7nb39qjb5s0h703hj")))
-    (package
-      (inherit base-rust)
-      (arguments
-       (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             (add-before 'configure 'configure-cargo-home
+                 (setenv "HOME" (getcwd))
+                 (with-output-to-file (string-append (getenv "HOME") "/.gdbinit")
+                   (lambda _
+                     (format #t "set auto-load safe-path /~%")))
+                 ;; Do not launch gdb with '-nx' which causes it to not execute
+                 ;; any init file.
+                 (substitute* "src/tools/compiletest/src/runtest.rs"
+                   (("\"-nx\".as_ref\\(\\), ")
+                    ""))))
+             (add-after 'unpack 'patch-cargo-env-shebang
                (lambda _
-                 (let ((cargo-home (string-append (getcwd) "/.cargo")))
-                   (mkdir-p cargo-home)
-                   (setenv "CARGO_HOME" cargo-home)
-                   #t))))))))))
-
-(define-public rust-1.38
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.37 "1.38.0"
-           "101dlpsfkq67p0hbwx4acqq6n90dj4bbprndizpgh1kigk566hk4")))
-    (package
-      (inherit base-rust)
-      (inputs
-        (alist-replace "llvm" (list llvm-9)
-                       (package-inputs base-rust)))
-      (arguments
-       (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             (replace 'patch-command-exec-tests
-               ,(patch-command-exec-tests-phase
-                  "src/test/ui/command-exec.rs"))
-             (add-after 'patch-tests 'patch-command-uid-gid-test
+                 (substitute* '("src/tools/cargo/tests/testsuite/build.rs"
+                                "src/tools/cargo/tests/testsuite/fix.rs")
+                   ;; The cargo *_wrapper tests set RUSTC.*WRAPPER environment
+                   ;; variable which points to /usr/bin/env.  Since it's not a
+                   ;; shebang, it needs to be manually patched.
+                   (("/usr/bin/env")
+                    (which "env")))))
+             (add-after 'unpack 'disable-tests-requiring-git
                (lambda _
-                 (substitute* "src/test/ui/command-uid-gid.rs"
-                   (("/bin/sh") (which "sh"))
-                   (("ignore-sgx") "ignore-sgx\n// ignore-tidy-linelength"))
-                 #t)))))))))
-
-(define-public rust-1.39
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.38 "1.39.0"
-           "0mwkc1bnil2cfyf6nglpvbn2y0zfbv44zfhsd5qg4c9rm6vgd8dl")))
-    (package
-      (inherit base-rust)
-      (arguments
-       (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             (replace 'patch-cargo-checksums
-               ;; The Cargo.lock format changed.
-               (lambda* _
-                 (use-modules (guix build cargo-utils))
-                 (substitute* "Cargo.lock"
-                   (("(checksum = )\".*\"" all name)
-                    (string-append name "\"" ,%cargo-reference-hash "\"")))
-                 (generate-all-checksums "vendor")
-                 #t)))))))))
-
-(define-public rust-1.40
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.39 "1.40.0"
-           "1ba9llwhqm49w7sz3z0gqscj039m53ky9wxzhaj11z6yg1ah15yx")))
-    (package
-      (inherit base-rust)
-      (source
-        (origin
-          (inherit (package-source base-rust))
-          ;; llvm-emscripten is no longer bundled, as that codegen backend
-          ;; got removed.
-          (snippet '(begin
-                      (delete-file-recursively "src/llvm-project")
-                      (delete-file-recursively "vendor/jemalloc-sys/jemalloc")
-                      #t))))
-      (arguments
-       ;; Rust 1.40 does not ship rustc-internal libraries by default
-       ;; (see rustc-dev-split). This means that librustc_driver.so is no
-       ;; longer available in lib/rustlib/$target/lib, which is the directory
-       ;; included in the runpath of librustc_codegen_llvm-llvm.so.
-       ;; This is detected by our validate-runpath phase as an error, but it
-       ;; is harmless as the codegen backend is loaded by librustc_driver.so
-       ;; itself, which must at that point have been already loaded.
-       ;; As such, we skip validating the runpath for Rust 1.40.
-       ;; Rust 1.41 stopped putting the codegen backend in a separate library,
-       ;; which makes this workaround only necessary for this release.
-       (cons* #:validate-runpath? #f
-         (substitute-keyword-arguments (package-arguments base-rust)
-           ((#:phases phases)
-            `(modify-phases ,phases
-               ;; We often need to patch tests with various Guix-specific paths.
-               ;; This often increases the line length and makes tidy, rustc's
-               ;; style checker, complain. We could insert additional newlines
-               ;; or add an "// ignore-tidy-linelength" comment, but as an
-               ;; ignore comment must be used, both approaches are fragile due
-               ;; to upstream formatting changes. As such, disable running the
-               ;; linter during tests, since it's intended for rustc developers
-               ;; anyway.
-               ;;
-               ;; TODO(rebuild-rust): This phase could be added earlier to
-               ;; simplify a significant amount of code, but it would require
-               ;; rebuilding the entire rusty universe.
-               (add-after 'patch-tests 'neuter-tidy
-                 (lambda _
-                   (substitute* "src/bootstrap/builder.rs"
-                     (("^.*::Tidy,") ""))
-                   #t))
-               ;; TODO(rebuild-rust): Adapt the find-files approach for
-               ;; earlier testsuite patches.
-               (replace 'patch-command-uid-gid-test
-                 (lambda _
-                   (match (find-files "src/test" "command-uid-gid\\.rs")
-                     ((file)
-                      (substitute* file
-                        (("/bin/sh") (which "sh")))))
-                   #t))
-               (replace 'patch-command-exec-tests
-                 ,(patch-command-exec-tests-phase
-                    '(match (find-files "src/test" "command-exec\\.rs")
-                       ((file) file))))
-               ;; The test got removed in commit 000fe63b6fc57b09828930cacbab20c2ee6e6d15
-               ;; "Remove painful test that is not pulling its weight"
-               (delete 'remove-unsupported-tests)))))))))
-
-(define-public rust-1.41
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.40 "1.41.1"
-           "0ws5x0fxv57fyllsa6025h3q6j9v3m8nb3syl4x0hgkddq0kvj9q")))
-    (package
-      (inherit base-rust)
-      (arguments
-       (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:validate-runpath? _) #t))))))
-
-(define-public rust-1.42
-  (rust-bootstrapped-package rust-1.41 "1.42.0"
-    "0x9lxs82may6c0iln0b908cxyn1cv7h03n5cmbx3j1bas4qzks6j"))
-
-(define-public rust-1.43
-  (rust-bootstrapped-package rust-1.42 "1.43.0"
-    "18akhk0wz1my6y9vhardriy2ysc482z0fnjdcgs9gy59kmnarxkm"))
-
-(define-public rust-1.44
-  (rust-bootstrapped-package rust-1.43 "1.44.1"
-    "0ww4z2v3gxgn3zddqzwqya1gln04p91ykbrflnpdbmcd575n8bky"))
-
-(define-public rust-1.45
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.44 "1.45.2"
-           "0273a1g3f59plyi1n0azf21qjzwml1yqdnj5z472crz37qggr8xp")))
-    (package
-      (inherit base-rust)
-      (source
-        (origin
-          (inherit (package-source base-rust))
-          (patches (search-patches "rust-1.45-linker-locale.patch"))))
-      (inputs
-        (alist-replace "llvm" (list llvm-10)
-                       (package-inputs base-rust)))
-      (arguments
-        (substitute-keyword-arguments (package-arguments base-rust)
-          ((#:phases phases)
-           `(modify-phases ,phases
-              ;; These tests make sure that the parser behaves properly when
-              ;; a source file starts with a shebang. Unfortunately,
-              ;; the patch-shebangs phase changes the meaning of these edge-cases.
-              ;; We skip the test since it's drastically unlikely Guix's packaging
-              ;; will introduce a bug here.
-              (add-after 'patch-tests 'skip-shebang-tests
-                (lambda _
-                  (with-directory-excursion "src/test/ui/parser/shebang"
-                    (delete-file "shebang-doc-comment.rs")
-                    (delete-file "sneaky-attrib.rs")
-                    #t)))
-              ;; This test case synchronizes itself by starting a localhost TCP
-              ;; server. This doesn't work as networking is not available.
-              (add-after 'patch-tests 'skip-networking-test
-                (lambda _
-                  (substitute* "src/tools/cargo/tests/testsuite/freshness.rs"
-                    (("fn linking_interrupted" all)
-                     (string-append "#[ignore] " all)))
-                 #t)))))))))
-
-(define-public rust-1.46
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.45 "1.46.0"
-           "0a17jby2pd050s24cy4dfc0gzvgcl585v3vvyfilniyvjrqknsid")))
-    (package
-      (inherit base-rust)
-      (outputs (cons "rustfmt" (package-outputs base-rust)))
-      (arguments
-       (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:phases phases)
-          `(modify-phases ,phases
+                 (substitute* "src/tools/cargo/tests/testsuite/new.rs"
+                   (("fn author_prefers_cargo")
+                    "#[ignore]\nfn author_prefers_cargo")
+                   (("fn finds_author_git")
+                    "#[ignore]\nfn finds_author_git")
+                   (("fn finds_local_author_git")
+                    "#[ignore]\nfn finds_local_author_git"))))
+             (add-after 'unpack 'patch-command-exec-tests
+               ;; This test suite includes some tests that the stdlib's
+               ;; `Command` execution properly handles in situations where
+               ;; the environment or PATH variable are empty, but this fails
+               ;; since we don't have `echo` available at its usual FHS
+               ;; location.
+               (lambda _
+                 (substitute* (match (find-files "." "^command-exec.rs$")
+                                ((file) file))
+                   (("Command::new\\(\"echo\"\\)")
+                    (format #f "Command::new(~s)" (which "echo"))))))
+             (add-after 'unpack 'patch-command-uid-gid-test
+               (lambda _
+                 (substitute* (match (find-files "." "^command-uid-gid.rs$")
+                                ((file) file))
+                   (("/bin/sh")
+                    (which "sh")))))
+             (add-after 'unpack 'skip-shebang-tests
+               ;; This test make sure that the parser behaves properly when a
+               ;; source file starts with a shebang. Unfortunately, the
+               ;; patch-shebangs phase changes the meaning of these edge-cases.
+               ;; We skip the test since it's drastically unlikely Guix's
+               ;; packaging will introduce a bug here.
+               (lambda _
+                 (delete-file "src/test/ui/parser/shebang/sneaky-attrib.rs")))
+             (add-after 'unpack 'patch-process-tests
+               (lambda* (#:key inputs #:allow-other-keys)
+                 (let ((bash (assoc-ref inputs "bash")))
+                   (substitute* "library/std/src/process/tests.rs"
+                     (("\"/bin/sh\"")
+                      (string-append "\"" bash "/bin/sh\"")))
+                   (substitute* "library/std/src/sys/unix/process/process_common/tests.rs"
+                     (("fn test_process_mask")
+                      "#[allow(unused_attributes)]
+    #[ignore]
+    fn test_process_mask")))))
+             (add-after 'unpack 'disable-interrupt-tests
+               (lambda _
+                 ;; This test hangs in the build container; disable it.
+                 (substitute* (match (find-files "." "^freshness.rs$")
+                                ((file) file))
+                   (("fn linking_interrupted")
+                    "#[ignore]\nfn linking_interrupted"))
+                 ;; Likewise for the ctrl_c_kills_everyone test.
+                 (substitute* (match (find-files "." "^death.rs$")
+                                ((file) file))
+                   (("fn ctrl_c_kills_everyone")
+                    "#[ignore]\nfn ctrl_c_kills_everyone"))))
+             (add-after 'configure 'add-gdb-to-config
+               (lambda* (#:key inputs #:allow-other-keys)
+                 (let ((gdb (assoc-ref inputs "gdb")))
+                   (substitute* "config.toml"
+                     (("^python =.*" all)
+                      (string-append all
+                                     "gdb = \"" gdb "/bin/gdb\"\n"))))))
              (replace 'build
-               (lambda* _
-                 (invoke "./x.py" "build")
-                 (invoke "./x.py" "build" "src/tools/cargo")
-                 (invoke "./x.py" "build" "src/tools/rustfmt")))
-             (replace 'check
-               (lambda* _
-                 ;; Test rustfmt.
-                 (let ((parallel-job-spec
-                        (string-append "-j" (number->string
-                                             (min 4
-                                                  (parallel-job-count))))))
-                   (invoke "./x.py" parallel-job-spec "test" "-vv")
-                   (invoke "./x.py" parallel-job-spec "test"
-                           "src/tools/cargo")
-                   (invoke "./x.py" parallel-job-spec "test"
+               ;; Phase overridden to also build rustfmt.
+               (lambda* (#:key parallel-build? #:allow-other-keys)
+                 (let ((job-spec (string-append
+                                  "-j" (if parallel-build?
+                                           (number->string (parallel-job-count))
+                                           "1"))))
+                   (invoke "./x.py" job-spec "build"
+                           "library/std" ;rustc
+                           "src/tools/cargo"
                            "src/tools/rustfmt"))))
+             (replace 'check
+               ;; Phase overridden to also test rustfmt.
+               (lambda* (#:key tests? parallel-build? #:allow-other-keys)
+                 (when tests?
+                   (let ((job-spec (string-append
+                                    "-j" (if parallel-build?
+                                             (number->string (parallel-job-count))
+                                             "1"))))
+                     (invoke "./x.py" job-spec "test" "-vv"
+                             "library/std"
+                             "src/tools/cargo"
+                             "src/tools/rustfmt")))))
              (replace 'install
+               ;; Phase overridden to also install rustfmt.
                (lambda* (#:key outputs #:allow-other-keys)
                  (invoke "./x.py" "install")
                  (substitute* "config.toml"
-                   ;; replace prefix to specific output
+                   ;; Adjust the prefix to the 'cargo' output.
                    (("prefix = \"[^\"]*\"")
-                    (string-append "prefix = \"" (assoc-ref outputs "cargo") "\"")))
+                    (format #f "prefix = ~s" (assoc-ref outputs "cargo"))))
                  (invoke "./x.py" "install" "cargo")
                  (substitute* "config.toml"
-                   ;; replace prefix to specific output
+                   ;; Adjust the prefix to the 'rustfmt' output.
                    (("prefix = \"[^\"]*\"")
-                    (string-append "prefix = \"" (assoc-ref outputs "rustfmt") "\"")))
-                 (invoke "./x.py" "install" "rustfmt")))
-             (replace 'delete-install-logs
-               (lambda* (#:key outputs #:allow-other-keys)
-                 (define (delete-manifest-file out-path file)
-                   (delete-file (string-append out-path "/lib/rustlib/" file)))
-
-                 (let ((out (assoc-ref outputs "out"))
-                       (cargo-out (assoc-ref outputs "cargo"))
-                       (rustfmt-out (assoc-ref outputs "rustfmt")))
-                   (for-each
-                     (lambda (file) (delete-manifest-file out file))
-                     '("install.log"
-                       "manifest-rust-docs"
-                       ,(string-append "manifest-rust-std-"
-                                       (nix-system->gnu-triplet-for-rust))
-                       "manifest-rustc"))
-                   (for-each
-                     (lambda (file) (delete-manifest-file cargo-out file))
-                     '("install.log"
-                       "manifest-cargo"))
-                   (for-each
-                     (lambda (file) (delete-manifest-file rustfmt-out file))
-                     '("install.log"
-                       "manifest-rustfmt-preview"))
-                   #t))))))))))
-
-(define-public rust-1.47
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.46 "1.47.0"
-          "07fqd2vp7cf1ka3hr207dnnz93ymxml4935vp74g4is79h3dz19i")))
-    (package
-      (inherit base-rust)
-      (inputs
-        (alist-replace "llvm" (list llvm-11)
-                       (package-inputs base-rust)))
-      (arguments
-       (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             ;; The source code got rearranged: libstd is now in the newly created library folder.
-             (replace 'patch-tests
-               (lambda* (#:key inputs #:allow-other-keys)
-                 (let ((bash (assoc-ref inputs "bash")))
-                   (substitute* "library/std/src/process.rs"
-                     (("\"/bin/sh\"") (string-append "\"" bash "/bin/sh\"")))
-                   ;; <https://lists.gnu.org/archive/html/guix-devel/2017-06/msg00222.html>
-                   (substitute* "library/std/src/sys/unix/process/process_common.rs"
-                     (("fn test_process_mask") "#[allow(unused_attributes)]
-    #[ignore]
-    fn test_process_mask"))
-                   #t)))
-             (delete 'patch-cargo-checksums)
-             (add-after 'patch-generated-file-shebangs 'patch-cargo-checksums
-               ;; Generate checksums after patching generated files (in
-               ;; particular, vendor/jemalloc/rep/Makefile).
-               (lambda* _
-                 (use-modules (guix build cargo-utils))
-                 (substitute* "Cargo.lock"
-                   (("(checksum = )\".*\"" all name)
-                    (string-append name "\"" ,%cargo-reference-hash "\"")))
-                 (generate-all-checksums "vendor")
-                 #t)))))))))
-
-(define-public rust-1.48
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.47 "1.48.0"
-           "0fz4gbb5hp5qalrl9lcl8yw4kk7ai7wx511jb28nypbxninkwxhf")))
-    (package
-      (inherit base-rust)
-      (source
-        (origin
-          (inherit (package-source base-rust))
-          ;; New patch required due to the second part of the source code rearrangement:
-          ;; the relevant source code is now in the compiler directory.
-          (patches (search-patches "rust-1.48-linker-locale.patch"))))
-      (arguments
-       (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             ;; Some tests got split out into separate files.
-             (replace 'patch-tests
-               (lambda* (#:key inputs #:allow-other-keys)
-                 (let ((bash (assoc-ref inputs "bash")))
-                   (substitute* "library/std/src/process/tests.rs"
-                     (("\"/bin/sh\"") (string-append "\"" bash "/bin/sh\"")))
-                   (substitute* "library/std/src/sys/unix/process/process_common/tests.rs"
-                     (("fn test_process_mask") "#[allow(unused_attributes)]
-    #[ignore]
-    fn test_process_mask"))
-                   #t))))))))))
-
-(define-public rust-1.49
-  (rust-bootstrapped-package rust-1.48 "1.49.0"
-    "0yf7kll517398dgqsr7m3gldzj0iwsp3ggzxrayckpqzvylfy2mm"))
-
-(define-public rust-1.50
-  (rust-bootstrapped-package rust-1.49 "1.50.0"
-    "0pjs7j62maiyvkmhp9zrxl528g2n0fphp4rq6ap7aqdv0a6qz5wm"))
-
-(define-public rust-1.51
-  (rust-bootstrapped-package rust-1.50 "1.51.0"
-    "0ixqkqglv3isxbvl4ldr4byrkx692wghsz3fasy1pn5kr2prnsvs"))
-
-(define-public rust-1.52
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.51 "1.52.1"
-           "165zs3xzp9dravybwslqs1qhn35agp6wacmzpymqg3qfdni26vrs")))
-    (package
-      (inherit base-rust)
-      (inputs
-        (alist-replace "llvm" (list llvm-12)
-                       (package-inputs base-rust))))))
-
-;; TODO(staging): Bump this variable to the latest packaged rust.
-(define-public rust rust-1.50)
+                    (format #f "prefix = ~s" (assoc-ref outputs "rustfmt"))))
+                 (invoke "./x.py" "install" "rustfmt")))))))
+      ;; Add test inputs.
+      (native-inputs (cons* `("gdb" ,gdb)
+                            `("procps" ,procps)
+                            (package-native-inputs base-rust))))))
+
+;;; Note: Only the latest versions of Rust are supported and tested.  The
+;;; intermediate rusts are built for bootstrapping purposes and should not
+;;; be relied upon.  This is to ease maintenance and reduce the time
+;;; required to build the full Rust bootstrap chain.
+(define-public rust rust-1.57)
+
+(define-public rust-src
+  (hidden-package
+   (package
+     (inherit rust)
+     (name "rust-src")
+     (build-system copy-build-system)
+     (native-inputs '())
+     (inputs '())
+     (native-search-paths '())
+     (outputs '("out"))
+     (arguments
+      `(#:install-plan
+        '(("library" "lib/rustlib/src/rust/library")
+          ("src" "lib/rustlib/src/rust/src"))))
+     (synopsis "Source code for the Rust standard library")
+     (description "This package provide source code for the Rust standard
+library, only use by rust-analyzer, make rust-analyzer out of the box."))))
diff --git a/gnu/packages/sagemath.scm b/gnu/packages/sagemath.scm
index 7f060155ed..b603a2f151 100644
--- a/gnu/packages/sagemath.scm
+++ b/gnu/packages/sagemath.scm
@@ -55,12 +55,11 @@
          "0ymc4i9y60aazscc1blivirkr1rflzz6akkmvfzyn5l7mgnlbk83"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-cython" ,python-cython)))
+     (list python-cython))
     (propagated-inputs
-     `(("python-cysignals" ,python-cysignals)))
+     (list python-cysignals))
     (inputs
-     `(("gmp" ,gmp)
-       ("pari-gp" ,pari-gp)))
+     (list gmp pari-gp))
     (home-page "https://cypari2.readthedocs.io/")
     (synopsis
      "Python interface to the number theory library libpari")
@@ -91,11 +90,9 @@ but it can be used independently.")
                 "0ljvnmhxqdfsp0yy4c2hynhk5sggm63kkqsq4iwq4k9vsnx2xm97"))))
     (build-system python-build-system)
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (inputs
-     `(("gmp" ,gmp)
-       ("mpfr" ,mpfr)
-       ("mpc" ,mpc)))
+     (list gmp mpfr mpc))
     (home-page "https://github.com/aleaxit/gmpy")
     (synopsis
      "GMP/MPIR, MPFR, and MPC interface to Python 2.6+ and 3.x")
@@ -150,9 +147,7 @@ function for every found clique.")
          "0l68rikfr7k2l547gb3pp3g8cj5zzxwipm79xrb5r8ffj466ydxg"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (synopsis "Computations with braid groups")
     (description "libbraiding performs computations with braid groups,
 in particular it computes normal forms of group elements.")
@@ -176,11 +171,9 @@ in particular it computes normal forms of group elements.")
          "0sv3cwrf9v9sb5a8wbhjmarxvya13ma3j8y8592f9ymxlk5y0ldk"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (inputs
-     `(("libgc" ,libgc)))
+     (list libgc))
     (synopsis "Computation of homfly polynomials of links")
     (description "libhomfly computes homfly polynomials of links,
 represented as strings.")
@@ -223,15 +216,9 @@ represented as strings.")
         (base32 "09d2p74x1arkydlxy6pw4p4byi7r8q7f29w373h4d8a215kadc6d"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
-     `(("flint" ,flint)
-       ("gmp" ,gmp)
-       ("python" ,python)
-       ("singular" ,singular)))
+     (list flint gmp python singular))
     (synopsis "Sage fork of GiNaC")
     (description "Pynac is a derivative of the C++ library GiNaC, which
 allows manipulation of symbolic expressions.  It currently provides the
@@ -260,7 +247,7 @@ on numerical types, while GiNaC depends on CLN for this purpose.")
     (native-inputs
      `(("python" ,python-2)))
     (inputs
-     `(("gmp" ,gmp)))
+     (list gmp))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -313,14 +300,9 @@ coefficients of which are modular integers.")
        (base32 "0qhgckd4fvbs40jw14mvw89rccv94d3df27kipd27hxd4cx7y80y"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
-     `(("boost" ,boost)
-       ("libpng" ,libpng)
-       ("m4ri" ,m4ri)))
+     (list boost libpng m4ri))
     (arguments
     ;; We are missing the boost unit test framework.
      `(#:tests? #f
@@ -426,7 +408,7 @@ zeta function and its twists by quadratic characters.")
                            '("bin" "include" "lib"))))
              #t)))))
     (inputs
-     `(("gmp" ,gmp)))
+     (list gmp))
     (home-page "http://www.mathe2.uni-bayreuth.de/stoll/programs/")
     (synopsis "Find rational points on hyperelliptic curves")
     (description "Ratpoints tries to find all rational points within
diff --git a/gnu/packages/samba.scm b/gnu/packages/samba.scm
index 359a345029..4330b1b9af 100644
--- a/gnu/packages/samba.scm
+++ b/gnu/packages/samba.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2015, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2015, 2017, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016, 2017, 2019, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Adonay "adfeno" Felipe Nogueira <https://libreplanet.org/wiki/User:Adfeno> <adfeno@openmailbox.org>
@@ -9,7 +9,7 @@
 ;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2019 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2020 Pierre Langlois <pierre.langlois@gmx.com>
-;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -27,6 +27,7 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages samba)
+  #:use-module (guix gexp)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
@@ -55,6 +56,8 @@
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages popt)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-crypto)
+  #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages time)
   #:use-module (gnu packages tls)
@@ -64,19 +67,19 @@
 (define-public cifs-utils
   (package
     (name "cifs-utils")
-    (version "6.13")
+    (version "6.14")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://download.samba.org/pub/linux-cifs/"
                            "cifs-utils/cifs-utils-" version ".tar.bz2"))
        (sha256 (base32
-                "0mnhcc4ayj2vn2azhk45fnal1hibsv0q2c4ihkxcrjhkhrn7in23"))))
+                "1f2n0yzqsy5v5qv83731bi0mi86rrh11z8qjy1gjj8al9c3yh2b6"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config
+           ;; To generate the manpages.
+           python-docutils)) ; rst2man
     (inputs
      `(("keytuils" ,keyutils)
        ("linux-pam" ,linux-pam)
@@ -85,23 +88,31 @@
        ("samba" ,samba)
        ("talloc" ,talloc)))
     (arguments
-     `(#:phases
+     `(#:configure-flags
+       (list "--enable-man")
+       #:phases
        (modify-phases %standard-phases
+         (add-before 'bootstrap 'trigger-bootstrap
+           ;; The shipped configure script is buggy, e.g., it contains a
+           ;; unexpanded literal ‘LIBCAP_NG_PATH’ line).
+           (lambda _
+             (delete-file "configure")))
          (add-before 'configure 'set-root-sbin
            (lambda* (#:key outputs #:allow-other-keys)
              ;; Don't try to install into "/sbin".
              (setenv "ROOTSBINDIR"
-                     (string-append (assoc-ref outputs "out") "/sbin"))
-             #t))
-         (add-before 'install 'create-man8dir
+                     (string-append (assoc-ref outputs "out") "/sbin"))))
+         (add-before 'install 'install-man-pages
            ;; Create a directory that isn't created since version 6.10.
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out")))
-               (mkdir-p (string-append out "/share/man/man8"))
-               #t))))))
+           (lambda* (#:key make-flags parallel-build? #:allow-other-keys)
+             (apply invoke "make" "install-man"
+                    `(,@(if parallel-build?
+                            `("-j" ,(number->string (parallel-job-count)))
+                            '())
+                      ,@make-flags)))))))
     (synopsis "User-space utilities for Linux CIFS (Samba) mounts")
     (description "@code{cifs-utils} is a set of user-space utilities for
-mounting and managing @dfn{Common Internet File System} (CIFS) shares using
+mounting and managing @acronym{CIFS, Common Internet File System} shares using
 the Linux kernel CIFS client.")
     (home-page "https://wiki.samba.org/index.php/LinuxCIFS_utils")
     ;; cifs-utils is licensed as GPL3 or later, but 3 files contain LGPL code.
@@ -172,99 +183,95 @@ external dependencies.")
 (define-public samba
   (package
     (name "samba")
-    (version "4.13.10")
+    (version "4.15.3")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://download.samba.org/pub/samba/stable/"
                            "samba-" version ".tar.gz"))
        (sha256
-        (base32 "00q5hf2r71dyma785dckcyksv3082mqfgyy9q6k6rc6kqjwkirzh"))
-       (modules '((guix build utils)))
-       (snippet
-        '(begin
-           ;; XXX: Some bundled libraries (e.g, popt, cmocka) are used from
-           ;; the system, but their bundled sources must be kept as they
-           ;; include the WAF scripts used for detecting them.
-           (delete-file-recursively "third_party/pyiso8601")
-           #t))))
+        (base32 "1nrp85aya0pbbqdqjaqcw82cnzzys16yls37hi2h6mci8d09k4si"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:make-flags '("TEST_OPTIONS=--quick") ;some tests are very long
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'setup-docbook-stylesheets
-           (lambda* (#:key inputs #:allow-other-keys)
-             ;; Append Samba's own DTDs to XML_CATALOG_FILES
-             ;; (c.f. docs-xml/build/README).
-             (copy-file "docs-xml/build/catalog.xml.in"
-                        "docs-xml/build/catalog.xml")
-             (substitute* "docs-xml/build/catalog.xml"
-               (("/@abs_top_srcdir@")
-                (string-append (getcwd) "/docs-xml")))
-             ;; Honor XML_CATALOG_FILES.
-             (substitute* "buildtools/wafsamba/wafsamba.py"
-               (("XML_CATALOG_FILES=\"\\$\\{SAMBA_CATALOGS\\}" all)
-                (string-append all " $XML_CATALOG_FILES")))
-             #t))
-         (replace 'configure
-           ;; Samba uses a custom configuration script that runs WAF.
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out    (assoc-ref outputs "out"))
-                    (libdir (string-append out "/lib")))
-               (invoke "./configure"
-                       "--enable-selftest"
-                       "--enable-fhs"
-                       (string-append "--prefix=" out)
-                       "--sysconfdir=/etc"
-                       "--localstatedir=/var"
-                       ;; Install public and private libraries into
-                       ;; a single directory to avoid RPATH issues.
-                       (string-append "--libdir=" libdir)
-                       (string-append "--with-privatelibdir=" libdir)))))
-         (add-before 'install 'disable-etc,var-samba-directories-setup
-           (lambda _
-             (substitute* "dynconfig/wscript"
-               (("bld\\.INSTALL_DIR.*") ""))
-             #t)))
-       ;; FIXME: The test suite seemingly hangs after failing to provision the
-       ;; test environment.
-       #:tests? #f))
+     (list
+      #:make-flags #~(list "TEST_OPTIONS=--quick") ;some tests are very long
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-before 'configure 'setup-docbook-stylesheets
+            (lambda* (#:key inputs #:allow-other-keys)
+              ;; Append Samba's own DTDs to XML_CATALOG_FILES
+              ;; (c.f. docs-xml/build/README).
+              (copy-file "docs-xml/build/catalog.xml.in"
+                         "docs-xml/build/catalog.xml")
+              (substitute* "docs-xml/build/catalog.xml"
+                (("/@abs_top_srcdir@")
+                 (string-append (getcwd) "/docs-xml")))
+              ;; Honor XML_CATALOG_FILES.
+              (substitute* "buildtools/wafsamba/wafsamba.py"
+                (("XML_CATALOG_FILES=\"\\$\\{SAMBA_CATALOGS\\}" all)
+                 (string-append all " $XML_CATALOG_FILES")))))
+          (replace 'configure
+            ;; Samba uses a custom configuration script that runs WAF.
+            (lambda* (#:key inputs #:allow-other-keys)
+              (let* ((libdir (string-append #$output "/lib")))
+                (invoke "./configure"
+                        "--enable-selftest"
+                        "--enable-fhs"
+                        (string-append "--prefix=" #$output)
+                        "--sysconfdir=/etc"
+                        "--localstatedir=/var"
+                        ;; Install public and private libraries into
+                        ;; a single directory to avoid RPATH issues.
+                        (string-append "--libdir=" libdir)
+                        (string-append "--with-privatelibdir=" libdir)
+                        "--with-system-mitkrb5" ;#$(this-package-input "mit-krb5")
+                        (string-append "--with-system-mitkdc="
+                                       (search-input-file inputs "sbin/krb5kdc"))
+                        "--with-experimental-mit-ad-dc"))))
+          (add-before 'install 'disable-etc,var-samba-directories-setup
+            (lambda _
+              (substitute* "dynconfig/wscript"
+                (("bld\\.INSTALL_DIR.*") "")))))
+      ;; FIXME: The test suite seemingly hangs after failing to provision the
+      ;; test environment.
+      #:tests? #f))
     (inputs
-     `(("acl" ,acl)
-       ("cmocka" ,cmocka)
-       ("cups" ,cups)
-       ("gamin" ,gamin)
-       ("dbus" ,dbus)
-       ("gpgme" ,gpgme)
-       ("gnutls" ,gnutls)
-       ("heimdal" ,heimdal)
-       ("jansson" ,jansson)
-       ("libarchive" ,libarchive)
-       ("libtirpc" ,libtirpc)
-       ("linux-pam" ,linux-pam)
-       ("lmdb" ,lmdb)
-       ("openldap" ,openldap)
-       ("perl" ,perl)
-       ("python" ,python)
-       ("popt" ,popt)
-       ("readline" ,readline)
-       ("tdb" ,tdb)))
+     (list acl
+           cmocka
+           cups
+           gamin
+           dbus
+           gpgme
+           gnutls
+           jansson
+           libarchive
+           libtirpc
+           linux-pam
+           lmdb
+           mit-krb5
+           openldap
+           perl
+           python
+           popt
+           readline
+           tdb))
     (propagated-inputs
      ;; In Requires or Requires.private of pkg-config files.
-     `(("ldb" ,ldb)
-       ("talloc" ,talloc)
-       ("tevent" ,tevent)))
+     (list ldb talloc tevent))
     (native-inputs
-     `(("perl-parse-yapp" ,perl-parse-yapp)
-       ("pkg-config" ,pkg-config)
-       ("python-iso8601" ,python-iso8601)
-       ("rpcsvc-proto" ,rpcsvc-proto)   ; for 'rpcgen'
-       ;; For generating man pages.
-       ("docbook-xml" ,docbook-xml-4.2)
-       ("docbook-xsl" ,docbook-xsl)
-       ("xsltproc" ,libxslt)
-       ("libxml2" ,libxml2)))           ;for XML_CATALOG_FILES
+     (list perl-parse-yapp
+           pkg-config
+           python-cryptography          ;for krb5 tests
+           python-dnspython
+           python-iso8601
+           python-markdown
+           rpcsvc-proto                 ;for 'rpcgen'
+           python-pyasn1                ;for krb5 tests
+           ;; For generating man pages.
+           docbook-xml-4.2
+           docbook-xsl
+           libxslt
+           libxml2))                    ;for XML_CATALOG_FILES
     (home-page "https://www.samba.org/")
     (synopsis
      "The standard Windows interoperability suite of programs for GNU and Unix")
@@ -277,6 +284,19 @@ Samba is an important component to seamlessly integrate Linux/Unix Servers and
 Desktops into Active Directory environments using the winbind daemon.")
     (license gpl3+)))
 
+(define-public samba/fixed
+  ;; Version that rarely changes, depended on by libsoup.
+  (hidden-package
+   (package/inherit samba
+     (version "4.15.3")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (string-append "https://download.samba.org/pub/samba/stable/"
+                            "samba-" version ".tar.gz"))
+        (sha256
+         (base32 "1nrp85aya0pbbqdqjaqcw82cnzzys16yls37hi2h6mci8d09k4si")))))))
+
 (define-public talloc
   (package
     (name "talloc")
@@ -301,9 +321,9 @@ Desktops into Active Directory environments using the winbind daemon.")
                (invoke "./configure"
                        (string-append "--prefix=" out))))))))
     (native-inputs
-     `(("which" ,which)))
+     (list which))
     (inputs
-     `(("python" ,python)))
+     (list python))
     (home-page "https://talloc.samba.org")
     (synopsis "Hierarchical, reference counted memory pool system")
     (description
@@ -367,12 +387,9 @@ destructors.  It is the core memory allocator used in Samba.")
                        (string-append "--prefix=" out)
                        "--bundled-libraries=NONE")))))))
     (native-inputs
-     `(("cmocka" ,cmocka)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python)
-       ("which" ,which)))
+     (list cmocka pkg-config python which))
     (propagated-inputs
-     `(("talloc" ,talloc))) ; required by tevent.pc
+     (list talloc)) ; required by tevent.pc
     (synopsis "Event system library")
     (home-page "https://tevent.samba.org/")
     (description
@@ -384,14 +401,14 @@ many event types, including timers, signals, and the classic file descriptor eve
 (define-public ldb
   (package
     (name "ldb")
-    (version "2.4.0")
+    (version "2.4.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://www.samba.org/ftp/ldb/ldb-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "10rd1z2llqz8xdx6m7yyxb9a118gx2xxwri18bhkkab9n1w55rvn"))
+                "13yd7lavbx8bxwnmzl0j7xnl2gl4wmnn0q9g7n3y7bvbnhm07hb9"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -400,8 +417,7 @@ many event types, including timers, signals, and the classic file descriptor eve
                               (unless (or (string-prefix? "third_party/waf" file)
                                           (string-suffix? "wscript" file))
                                 (delete-file file)))
-                            (find-files "third_party"))
-                  #t))))
+                            (find-files "third_party"))))))
     (build-system gnu-build-system)
     (arguments
      '(;; LMDB is only supported on 64-bit systems, yet the test suite
@@ -419,14 +435,10 @@ many event types, including timers, signals, and the classic file descriptor eve
                                       "/lib/ldb/modules")
                        "--bundled-libraries=NONE")))))))
     (native-inputs
-     `(("cmocka" ,cmocka)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python)
-       ("which" ,which)))
+     (list cmocka pkg-config python which))
     (propagated-inputs
      ;; ldb.pc refers to all these.
-     `(("talloc" ,talloc)
-       ("tdb" ,tdb)))
+     (list talloc tdb))
     (inputs
      `(,@(if (target-64bit?)
              `(("lmdb" ,lmdb))
@@ -475,8 +487,8 @@ key-value pair databases and a real LDAP database.")
                   (string-append libpcap "/include/pcap-bpf.h")))
                #t))))))
     (inputs
-     `(("libpcap" ,libpcap)
-       ("openssl" ,(@ (gnu packages tls) openssl))))
+     (list libpcap
+           (@ (gnu packages tls) openssl)))
     (synopsis "Implementation of the Point-to-Point Protocol")
     (home-page "https://ppp.samba.org/")
     (description
diff --git a/gnu/packages/sawfish.scm b/gnu/packages/sawfish.scm
index 4162fe43cd..ab715b4a7d 100644
--- a/gnu/packages/sawfish.scm
+++ b/gnu/packages/sawfish.scm
@@ -50,17 +50,9 @@
                 "1bmcjl1x1rdh514q9z3hzyjmjmwwwkziipjpjsl301bwmiwrd8a8"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("makeinfo"   ,texinfo)
-       ("pkg-config" ,pkg-config)
-
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool"  ,libtool)))
+     (list texinfo pkg-config autoconf automake libtool))
     (inputs
-     `(("gdbm"     ,gdbm)
-       ("gmp"      ,gmp)
-       ("libffi"   ,libffi)
-       ("readline" ,readline)))
+     (list gdbm gmp libffi readline))
     (native-search-paths
      (list (search-path-specification
             (variable "REP_DL_LOAD_PATH")
@@ -107,14 +99,10 @@ implementing both small and large scale systems.")
              (delete-file "autogen.sh")
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (propagated-inputs
      ;; required by rep-gtk.pc.
-     `(("gtk+"   ,gtk+-2)
-       ("librep" ,librep)))
+     (list gtk+-2 librep))
     (home-page "https://sawfish.fandom.com/wiki/Rep-GTK")
     (synopsis "GTK+ binding for librep")
     (description
@@ -180,12 +168,12 @@ backend of Sawfish.")
        ("pkg-config"  ,pkg-config)
        ("which"       ,which)))
     (inputs
-     `(("libsm"       ,libsm)
-       ("libxft"      ,libxft)
-       ("libxinerama" ,libxinerama)
-       ("libxrandr"   ,libxrandr)
-       ("libxtst"     ,libxtst)
-       ("rep-gtk"     ,rep-gtk)))
+     (list libsm
+           libxft
+           libxinerama
+           libxrandr
+           libxtst
+           rep-gtk))
     (home-page "https://sawfish.tuxfamily.org")
     (synopsis "Configurable window manager")
     (description
diff --git a/gnu/packages/scanner.scm b/gnu/packages/scanner.scm
index 00d094cc4b..e7a5a2b210 100644
--- a/gnu/packages/scanner.scm
+++ b/gnu/packages/scanner.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2014 John Darrington <jmd@gnu.org>
 ;;; Copyright © 2015 Andy Wingo <wingo@igalia.com>
 ;;; Copyright © 2016 Andy Patterson <ajpatter@uwaterloo.ca>
-;;; Copyright © 2017, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2017, 2019, 2020, 2022 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -23,6 +23,7 @@
 (define-module (gnu packages scanner)
   #:use-module (gnu packages)
   #:use-module (gnu packages autotools)
+  #:use-module (gnu packages avahi)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages gettext)
@@ -35,15 +36,70 @@
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
   #:use-module (gnu packages textutils)
+  #:use-module (gnu packages tls)
   #:use-module (gnu packages xml)
   #:use-module (guix build-system gnu)
   #:use-module (guix download)
   #:use-module (guix git-download)
+  #:use-module (guix gexp)
   #:use-module ((guix licenses)
                 #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix utils))
 
+(define-public sane-airscan
+  (package
+    (name "sane-airscan")
+    (version "0.99.27")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/alexpevzner/sane-airscan")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1syxsih1kdnz9slsg5a92bqnllagm4cybqk4n2y6mbkqn6h0zlnv"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list #:make-flags
+           #~(list (string-append "prefix=" #$output)
+                   (string-append "libdir=$(prefix)/lib"))
+           #:phases
+           #~(modify-phases %standard-phases
+               (delete 'configure ))))  ; no configure script
+    (native-inputs
+     (list pkg-config))
+    (inputs
+     (list avahi
+           gnutls
+           libjpeg-turbo
+           libpng
+           libxml2
+           sane-backends))
+    (home-page "https://github.com/alexpevzner/sane-airscan")
+    (synopsis "SANE backend for eSCL (AirScan) and WSD document scanners")
+    (description ; no @acronym{eSCL} because the meaning isn't officially known
+     "This SANE backend lets you scan documents and images from scanners and
+multi-function printers that speak eSCL (marketed as ``AirScan'') or
+@acronym{WSD, Web Services for Devices} (or ``WS-Scan'').
+
+Both are vendor-neutral protocols that allow ``driverless'' scanning over IPv4
+and IPv6 networks without the vendor-specific drivers that make up most of the
+sane-backends collection.  This is similar to how most contemporary printers
+speak the universal @acronym{IPP, Internet Printing Protocol}.
+
+Only scanners that support eSCL will also work over USB.  This requires a
+suitable IPP-over-USB daemon like ipp-usb to be installed and configured.
+
+Any eSCL or WSD-capable scanner should just work.  sane-airscan automatically
+discovers and configures devices, including which protocol to use.  It was
+successfully tested with many devices from Brother, Canon, Dell, Kyocera,
+Lexmark, Epson, HP, OKI, Panasonic, Pantum, Ricoh, Samsung, and Xerox, with both
+WSD and eSCL.")
+    (license (list license:gpl2+        ; the combined work
+                   license:expat))))    ; http_parser.[ch]
+
 (define-public sane-backends-minimal
   (package
     (name "sane-backends-minimal")
@@ -75,7 +131,7 @@
        ;; For scripts/pixma_gen_options.py.
        ("python" ,python-wrapper)))
     (inputs
-     `(("libusb" ,libusb)))
+     (list libusb))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -207,31 +263,31 @@ package contains the library and drivers.")))
         (base32 "0pvy4qirfjdfm8aj6x5rkbgl7hk3jfa2s21qkk8ic5dqfjjab75n"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:configure-flags
-       (list "--disable-debug"
-             "--sysconfdir=/etc")
-       #:phases
-       (modify-phases %standard-phases
-         (replace 'install
-           (lambda* (#:key make-flags outputs #:allow-other-keys)
-             (let* ((out  (assoc-ref outputs "out"))
-                    (conf (string-append out "/etc/scanbd")))
-               (apply invoke "make" "install"
-                      ;; Install example configuration to the store, not /etc.
-                      ;; These don't inherit from each other, so we need both.
-                      (string-append "scanbdconfdir="  conf)
-                      (string-append "scannerconfdir=" conf "/scanner.d")
-                      make-flags))))
-         (add-after 'install 'install-extra-documentation
-           ;; The README provides more detailed set-up instructions than the
-           ;; man page.
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (doc (string-append out "/share/doc/"
-                                        ,name "-" ,version)))
-               (install-file "doc/README.txt" doc)))))))
+     (list #:configure-flags
+           #~(list "--disable-debug"
+                   "--sysconfdir=/etc"
+                   "CFLAGS=-Wno-error") ; warnings should never be fatal
+           #:phases
+           #~(modify-phases %standard-phases
+               (replace 'install
+                 (lambda* (#:key make-flags #:allow-other-keys)
+                   (let ((conf (string-append #$output "/etc/scanbd")))
+                     (apply invoke "make" "install"
+                            ;; Install example configuration to the store, not
+                            ;; /etc.  These don't inherit from each other, so
+                            ;; we need both.
+                            (string-append "scanbdconfdir="  conf)
+                            (string-append "scannerconfdir=" conf "/scanner.d")
+                            make-flags))))
+               (add-after 'install 'install-extra-documentation
+                 ;; The README provides more detailed set-up instructions than
+                 ;; the man page.
+                 (lambda _
+                   (let ((doc (string-append #$output "/share/doc/"
+                                             #$name "-" #$version)))
+                     (install-file "doc/README.txt" doc)))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("dbus" ,dbus)
        ("libconfuse" ,libconfuse)
@@ -240,7 +296,7 @@ package contains the library and drivers.")))
        ("zlib" ,zlib)))
     (home-page "https://scanbd.sourceforge.io")
     (synopsis "Configurable scanner button monitor")
-    (description "Scanbd stands for scanner button daemon.  It regulary polls
+    (description "Scanbd stands for scanner button daemon.  It regularly polls
 scanners for pressed buttons, function knob changes, or other events such
 as (un)plugging the scanner or inserting and removing paper.  Then it performs
 the desired action(s) such as saving, copying, or e-mailing the image.
@@ -315,7 +371,7 @@ provided the driver also exposes the buttons.")
                (rmdir (string-append out "/sbin"))
                #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("gtk+" ,gtk+-2)
        ("lcms" ,lcms)
diff --git a/gnu/packages/scheme.scm b/gnu/packages/scheme.scm
index c43d17219e..378a5b4959 100644
--- a/gnu/packages/scheme.scm
+++ b/gnu/packages/scheme.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015, 2016, 2018, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2016, 2018, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
 ;;; Copyright © 2015, 2016 Federico Beffa <beffa@fbengineering.ch>
 ;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net>
@@ -16,6 +16,8 @@
 ;;; Copyright © 2020 Edouard Klein <edk@beaver-labs.com>
 ;;; Copyright © 2021 Philip McGrath <philip@philipmcgrath.com>
 ;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2021 Foo Chuan Wei <chuanwei.foo@hotmail.com>
+;;; Copyright © 2022 Morgan Smith <Morgan.J.Smith@outlook.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -36,7 +38,7 @@
   #:use-module (gnu packages)
   #:use-module ((guix licenses)
                 #:select (gpl2+ lgpl2.0+ lgpl2.1 lgpl2.1+ lgpl3+ asl2.0 bsd-3
-                          cc-by-sa4.0 non-copyleft expat))
+                          cc-by-sa4.0 non-copyleft expat public-domain))
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
@@ -126,10 +128,6 @@
                (("\\./configure")
                 (string-append (which "sh") " configure")))
              #t))
-         ;; FIXME: the texlive-union insists on regenerating fonts.  It stores
-         ;; them in HOME, so it needs to be writeable.
-         (add-before 'build 'set-HOME
-           (lambda _ (setenv "HOME" "/tmp") #t))
          (replace 'build
            (lambda* (#:key system outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
@@ -177,8 +175,8 @@
        ("autoconf" ,autoconf)
        ("automake" ,automake)
        ("libtool" ,libtool)
-       ("texlive" ,(texlive-union (list texlive-tex-texinfo
-                                        texlive-epsf)))
+       ("texlive" ,(texlive-updmap.cfg (list texlive-tex-texinfo
+                                             texlive-epsf)))
        ("texinfo" ,texinfo)
        ("ghostscript" ,ghostscript)
        ("m4" ,m4)))
@@ -223,7 +221,7 @@
     (supported-systems '("x86_64-linux" "i686-linux"))
 
     (home-page "https://www.gnu.org/software/mit-scheme/")
-    (synopsis "A Scheme implementation with integrated editor and debugger")
+    (synopsis "Scheme implementation with integrated editor and debugger")
     (description
      "GNU/MIT Scheme is an implementation of the Scheme programming
 language.  It provides an interpreter, a compiler and a debugger.  It also
@@ -307,21 +305,20 @@ features an integrated Emacs-like editor and a large runtime library.")
                          (string-append "EMACSBRAND=emacs25")
                          (string-append "EMACSDIR=" dir))))))))
       (inputs
-       `(("emacs" ,emacs)                     ;UDE needs the X version of Emacs
-         ("libgc" ,libgc)
-         ("libunistring" ,libunistring)
-         ("libuv" ,libuv)
-         ("openssl" ,openssl)
-         ("sqlite" ,sqlite)
-
-         ;; Optional APIs for which Bigloo has bindings.
-         ("avahi" ,avahi)
-         ("libphidget" ,libphidget)
-         ("pcre" ,pcre)))
+       (list emacs ;UDE needs the X version of Emacs
+             libgc
+             libunistring
+             libuv
+             openssl
+             sqlite
+             ;; Optional APIs for which Bigloo has bindings.
+             avahi
+             libphidget
+             pcre))
       (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
       (propagated-inputs
-       `(("gmp" ,gmp)))                            ; bigloo.h refers to gmp.h
+       (list gmp))                            ; bigloo.h refers to gmp.h
       (home-page "https://www-sop.inria.fr/indes/fp/Bigloo/")
       (synopsis "Efficient Scheme compiler")
       (description
@@ -367,14 +364,14 @@ and between Scheme and Java programs.")
                                       "-copt \\$(CPICFLAGS) "
                                       "-L \\$(BUILDLIBDIR) "
                                       "-ldopt -Wl,-rpath," out "/lib"))))))))
-    (inputs `(("avahi" ,avahi)
-              ("bigloo" ,bigloo)
-              ("libgc" ,libgc)
-              ("libunistring" ,libunistring)
-              ("libuv" ,libuv)
-              ("pcre" ,pcre)
-              ("sqlite" ,sqlite)
-              ("which" ,which)))
+    (inputs (list avahi
+                  bigloo
+                  libgc
+                  libunistring
+                  libuv
+                  pcre
+                  sqlite
+                  which))
     (home-page "http://hop.inria.fr/")
     (synopsis "Multi-tier programming language for the Web 2.0")
     (description
@@ -444,7 +441,7 @@ mixed.")
 (define-public chibi-scheme
   (package
     (name "chibi-scheme")
-    (version "0.9")
+    (version "0.10")
     (home-page "https://github.com/ashinn/chibi-scheme")
     (source
      (origin
@@ -452,17 +449,15 @@ mixed.")
        (uri (git-reference (url home-page) (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32
-         "1lnap41gl9vg82h557f4rlr69jgmd2gh0iqs6cxm77d39kv1scb8"))))
+        (base32 "0yhmj0lws3r3bl4ivs31dhlzxqc7f0dinixi904mraz1fmrg3w7f"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:phases (modify-phases %standard-phases
-                  (delete 'configure)
-                  (add-before 'build 'set-cc
-                    (lambda _
-                      (setenv "CC" "gcc"))))
+     `(#:phases
+       (modify-phases %standard-phases
+         (delete 'configure))           ; no configure script
        #:make-flags (let ((out (assoc-ref %outputs "out")))
                       (list (string-append "PREFIX=" out)
+                            (string-append "CC=" ,(cc-for-target))
                             (string-append "LDFLAGS=-Wl,-rpath=" out "/lib")))
        #:test-target "test"))
     (synopsis "Small embeddable Scheme implementation")
@@ -566,14 +561,14 @@ regular-expression notation.")
 (define-public slib
   (package
     (name "slib")
-    (version "3b5")
+    (version "3b6")
     (source (origin
              (method url-fetch)
              (uri (string-append "http://groups.csail.mit.edu/mac/ftpdir/scm/slib-"
                                  version ".zip"))
              (sha256
               (base32
-               "0q0p2d53p8qw2592yknzgy2y1p5a9k7ppjx0cfrbvk6242c4mdpq"))))
+               "137dn2wwwwg0qbifgxfckjhzj4m4820crpg9kziv402l7f2b931f"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ; There is no check target.
@@ -589,8 +584,7 @@ regular-expression notation.")
                     (invoke "./configure"
                             (string-append "--prefix="
                                            (assoc-ref outputs "out"))))))))
-    (native-inputs `(("unzip" ,unzip)
-                     ("texinfo" ,texinfo)))
+    (native-inputs (list unzip texinfo))
     (home-page "https://people.csail.mit.edu/jaffer/SLIB.html")
     (synopsis "Compatibility and utility library for Scheme")
     (description "SLIB is a portable Scheme library providing compatibility and
@@ -628,8 +622,7 @@ utility functions for all standard Scheme implementations.")
          (replace 'build
                   (lambda* (#:key inputs outputs #:allow-other-keys)
                     (setenv "SCHEME_LIBRARY_PATH"
-                            (string-append (assoc-ref inputs "slib")
-                                           "/lib/slib/"))
+                            (search-input-directory inputs "lib/slib/"))
                     (invoke "make" "scmlit" "CC=gcc")
                     (invoke "make" "all")))
          (add-after 'install 'post-install
@@ -639,15 +632,13 @@ utility functions for all standard Scheme implementations.")
                         (delete-file req)
                         (format (open req (logior O_WRONLY O_CREAT))
                                 "(define (library-vicinity) ~s)\n"
-                                (string-append (assoc-ref inputs "slib")
-                                               "/lib/slib/"))
+                                (search-input-directory inputs "lib/slib/"))
 
                         ;; We must generate the slibcat file.
                         (invoke (string-append out "/bin/scm")
                                 "-br" "new-catalog")))))))
-    (inputs `(("slib" ,slib)))
-    (native-inputs `(("unzip" ,unzip)
-                     ("texinfo" ,texinfo)))
+    (inputs (list slib))
+    (native-inputs (list unzip texinfo))
     (home-page "https://people.csail.mit.edu/jaffer/SCM")
     (synopsis "Scheme implementation conforming to R5RS and IEEE P1178")
     (description "GNU SCM is an implementation of Scheme.  This
@@ -669,7 +660,7 @@ linked with a SCM executable.")
                 "0rik3qnxqd8wjlazx8rw996pfzkjjg60v6hcbpcqzi7rgml8q4n8"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -783,9 +774,9 @@ small program, it is easy to comprehend, get to grips with, and use.")
                                (string-append out "/bin"))
                  #t))))))
       (inputs
-       `(("libx11" ,libx11)))
+       (list libx11))
       (propagated-inputs
-       `(("libgc" ,libgc)))
+       (list libgc))
       (supported-systems '("x86_64-linux"))
       (home-page "https://engineering.purdue.edu/~qobi/papers/fdlcc.pdf")
       (synopsis "Brutally efficient Scheme compiler")
@@ -800,6 +791,45 @@ program-point-specific low-level representation selection and code
 generation.")
       (license gpl2+))))
 
+(define-public s9fes
+  (package
+    (name "s9fes")
+    (version "20181205")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://www.t3x.org/s9fes/s9fes-" version ".tgz"))
+       (sha256
+        (base32 "0ynpl707bc9drwkdpdgvw14bz9zmwd3wffl1k02sxppjl28xm7rf"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:make-flags
+       (list (string-append "CC=" ,(cc-for-target))
+             (string-append "PREFIX=" %output))
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'install
+           (lambda* (#:key make-flags #:allow-other-keys)
+             (apply invoke "make" "install-all" make-flags))))
+       #:tests? #f))  ; No check target.
+    (inputs
+     (list ncurses))
+    (home-page "https://www.t3x.org/s9fes/")
+    (synopsis "Interpreter for R4RS Scheme")
+    (description
+     "Scheme 9 from Empty Space (S9fES) is a mature, portable, and
+comprehensible public-domain interpreter for R4RS Scheme offering:
+@itemize
+@item bignum arithmetics
+@item decimal-based real number arithmetics
+@item support for low-level Unix programming
+@item cursor addressing with Curses
+@item basic networking procedures
+@item an integrated online help system
+@item loads of useful library functions
+@end itemize")
+    (license public-domain)))
+
 (define-public femtolisp
   (let ((commit "ec7601076a976f845bc05ad6bd3ed5b8cde58a97")
         (revision "2"))
@@ -871,13 +901,10 @@ The core is 12 builtin special forms and 33 builtin functions.")
                    #t))))
     (build-system gnu-build-system)
     (inputs
-     `(("libatomic-ops" ,libatomic-ops)
-       ("slib" ,slib)
-       ("zlib" ,zlib)))
+     (list libatomic-ops slib zlib))
     (native-inputs
-     `(("texinfo" ,texinfo)
-       ("openssl" ,openssl)            ; needed for tests
-       ("pkg-config" ,pkg-config)))    ; needed to find external libatomic-ops
+     (list texinfo openssl ; needed for tests
+           pkg-config))    ; needed to find external libatomic-ops
     (arguments
      `(#:configure-flags
        (list (string-append "--with-slib="
@@ -1004,13 +1031,9 @@ and list gauche extension packages.")
                (copy-recursively "../bin" bin)
                (copy-recursively "../lib" lib)))))))
     (native-inputs
-     `(("coreutils" ,coreutils)
-       ("util-linux" ,util-linux)))
+     (list coreutils util-linux))
     (propagated-inputs
-     `(("gambit-c" ,gambit-c)
-       ("zlib" ,zlib)
-       ("openssl" ,openssl)
-       ("sqlite" ,sqlite)))
+     (list gambit-c zlib openssl sqlite))
     (build-system gnu-build-system)
     (synopsis "Meta-dialect of Scheme with post-modern features")
     (description "Gerbil is an opinionated dialect of Scheme designed for Systems
diff --git a/gnu/packages/screen.scm b/gnu/packages/screen.scm
index 4426d9d562..d244ed1434 100644
--- a/gnu/packages/screen.scm
+++ b/gnu/packages/screen.scm
@@ -52,8 +52,7 @@
     (native-inputs
      `(("makeinfo" ,texinfo)))
     (inputs
-     `(("ncurses" ,ncurses)
-       ("perl" ,perl)))
+     (list ncurses perl))
     (arguments
      `(#:configure-flags
        ;; By default, screen supports 16 colors, but we want 256 when
@@ -132,14 +131,13 @@ controlling terminal and attach to it later.")
          (add-after
           'install 'wrap-python-scripts
           (lambda* (#:key inputs outputs #:allow-other-keys)
-            (let* ((python (string-append (assoc-ref inputs "python")
-                                          "/bin/python"))
+            (let* ((python (search-input-file inputs "/bin/python"))
                    (out    (assoc-ref outputs "out"))
                    (config (string-append out "/bin/byobu-config"))
                    (select (string-append out "/bin/byobu-select-session")))
               (wrap-program config
                 `("BYOBU_PYTHON" = (,python))
-                `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH"))))
+                `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH"))))
               (wrap-program select
                 `("BYOBU_PYTHON" = (,python)))
               #t))))))
diff --git a/gnu/packages/scribus.scm b/gnu/packages/scribus.scm
index a9372735bf..8669ed0db5 100644
--- a/gnu/packages/scribus.scm
+++ b/gnu/packages/scribus.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015, 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
-;;; Copyright © 2017, 2018, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2017, 2018, 2021, 2022 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2019 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2020, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
@@ -49,51 +49,49 @@
 (define-public scribus
   (package
     (name "scribus")
-    (version "1.5.7")
+    (version "1.5.8")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://sourceforge/scribus/scribus-devel/"
                            version "/scribus-" version ".tar.xz"))
        (sha256
-        (base32 "1kpq4vc95hj3w8l205kh0pmdlisi4v1gilz0sf8n39y7ryr1d0ri"))))
+        (base32 "0x3bw58v920akca8jxvsfwf468pzjyglk93ay67ph1bdry7nx0a7"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f                      ;no test target
        #:configure-flags
        '("-DWANT_GRAPHICSMAGICK=1")))
     (inputs
-     `(("boost" ,boost)
-       ("cairo" ,cairo)
-       ("cups" ,cups)
-       ("fontconfig" ,fontconfig)
-       ("freetype" ,freetype)
-       ("graphicsmagick" ,graphicsmagick)
-       ("harfbuzz" ,harfbuzz)
-       ("hunspell" ,hunspell)
-       ("icu4c" ,icu4c)
-       ("lcms" ,lcms)
-       ("libcdr" ,libcdr)
-       ("libfreehand" ,libfreehand)
-       ("libjpeg" ,libjpeg-turbo)
-       ("libmspub" ,libmspub)
-       ("libpagemaker" ,libpagemaker)
-       ("librevenge" ,librevenge)
-       ("libtiff" ,libtiff)
-       ("libvisio" ,libvisio)
-       ("libxml2" ,libxml2)
-       ("libzmf" ,libzmf)
-       ("openssl" ,openssl)
-       ("podofo" ,podofo)
-       ("poppler" ,poppler)
-       ("python" ,python)               ; need Python library
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("zlib" ,zlib)))
+     (list boost
+           cairo
+           cups
+           fontconfig
+           freetype
+           graphicsmagick
+           harfbuzz
+           hunspell
+           icu4c
+           lcms
+           libcdr
+           libfreehand
+           libjpeg-turbo
+           libmspub
+           libpagemaker
+           librevenge
+           libtiff
+           libvisio
+           libxml2
+           libzmf
+           openssl
+           podofo
+           poppler
+           python                       ;need Python library
+           qtbase-5
+           qtdeclarative
+           zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)
-       ("util-linux" ,util-linux)))
+     (list pkg-config qttools util-linux))
     (home-page "https://www.scribus.net")
     (synopsis "Desktop publishing and page layout program")
     (description
diff --git a/gnu/packages/scsi.scm b/gnu/packages/scsi.scm
index 4c3bfd7e33..12a623776e 100644
--- a/gnu/packages/scsi.scm
+++ b/gnu/packages/scsi.scm
@@ -27,15 +27,18 @@
 (define-public sg3-utils
   (package
     (name "sg3-utils")
-    (version "1.46")
+    (version "1.47")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://sg.danny.cz/sg/p/sg3_utils-"
                                   version ".tar.xz"))
               (sha256
                (base32
-                "185rlxppnsmi6q7garfhglmw31gji2ff24xg2yjk3klk1fqnihjr"))))
+                "1ckj2kjcs23lbjfyl5mz2rb0aylnyq13yghg0bdv1n7dbywcmc6x"))))
     (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags
+       (list "--disable-static")))
     (home-page "http://sg.danny.cz/sg/sg3_utils.html")
     (synopsis "SCSI device utilities")
     (description
diff --git a/gnu/packages/sdl.scm b/gnu/packages/sdl.scm
index f2afe763c5..4c38e2f055 100644
--- a/gnu/packages/sdl.scm
+++ b/gnu/packages/sdl.scm
@@ -3,7 +3,7 @@
 ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015, 2017 Sou Bunnbu <iyzsong@member.fsf.org>
 ;;; Copyright © 2015 Alex Kost <alezost@gmail.com>
-;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017, 2018, 2019 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018, 2019, 2020 Ricardo Wurmus <rekado@elephly.net>
@@ -34,7 +34,7 @@
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-26)
   #:use-module (gnu packages)
-  #:use-module ((guix licenses) #:hide (freetype))
+  #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
@@ -43,6 +43,7 @@
   #:use-module (guix build-system trivial)
   #:use-module (gnu packages audio)
   #:use-module (gnu packages autotools)
+  #:use-module (gnu packages compression)
   #:use-module (gnu packages fcitx)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages freedesktop)
@@ -93,24 +94,21 @@
        #:tests? #f)) ; no check target
     (propagated-inputs
      ;; SDL headers include X11 headers.
-     `(("libx11" ,libx11)
-       ("libcap" ,libcap) ; 'libSDL.la' contain `-lcap'.
-       ;; TODO: Since building Mesa with Meson it is now necessary that Mesa is
-       ;; a propogated input. We still need to figure out why, possibly due to a
-       ;; change in pkg-config.
-       ("mesa" ,mesa)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("libxrandr" ,libxrandr)
-              ("glu" ,glu)
-              ("alsa-lib" ,alsa-lib)
-              ("pulseaudio" ,pulseaudio)))
+     (list libx11
+           libcap ; 'libSDL.la' contain `-lcap'.
+           ;; TODO: Since building Mesa with Meson it is now necessary that Mesa is
+           ;; a propogated input. We still need to figure out why, possibly due to a
+           ;; change in pkg-config.
+           mesa))
+    (native-inputs (list pkg-config))
+    (inputs (list libxrandr glu alsa-lib pulseaudio))
     (outputs '("out" "debug"))
     (synopsis "Cross platform game development library")
     (description "Simple DirectMedia Layer is a cross-platform development
 library designed to provide low level access to audio, keyboard, mouse,
 joystick, and graphics hardware.")
     (home-page "https://libsdl.org/")
-    (license lgpl2.1)))
+    (license license:lgpl2.1)))
 
 (define-public sdl2
   (package (inherit sdl)
@@ -153,7 +151,7 @@ joystick, and graphics hardware.")
                ("wayland" ,wayland)
                ("wayland-protocols" ,wayland-protocols))
              (package-inputs sdl)))
-    (license bsd-3)))
+    (license license:bsd-3)))
 
 (define-public libmikmod
   (package
@@ -182,7 +180,7 @@ joystick, and graphics hardware.")
      "MikMod is able to play a wide range of module formats, as well as
 digital sound files.  It can take advantage of particular features of your
 system, such as sound redirection over the network.")
-    (license lgpl2.1)
+    (license license:lgpl2.1)
     (home-page "http://mikmod.sourceforge.net/")))
 
 (define-public sdl-gfx
@@ -206,12 +204,12 @@ system, such as sound redirection over the network.")
         ;; mmx is supported only on Intel processors.
         '()
         '(#:configure-flags '("--disable-mmx")))))
-    (propagated-inputs `(("sdl" ,sdl)))
+    (propagated-inputs (list sdl))
     (synopsis "SDL graphics primitives library")
     (description "SDL_gfx provides graphics drawing primitives, rotozoom and
 other supporting functions for SDL.")
     (home-page "http://www.ferzkopp.net/joomla/software-mainmenu-14/4-ferzkopps-linux-software/19-sdlgfx")
-    (license zlib)))
+    (license license:zlib)))
 
 (define-public sdl-image
   (package
@@ -233,7 +231,7 @@ other supporting functions for SDL.")
                            "--disable-png-shared"
                            "--disable-tif-shared"
                            "--disable-webp-shared")))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     ;; libjpeg, libpng, and libtiff are propagated inputs because the
     ;; SDL_image headers include the headers of these libraries.  SDL is a
     ;; propagated input because the pkg-config file refers to SDL's pkg-config
@@ -248,7 +246,7 @@ other supporting functions for SDL.")
 supports the following formats: BMP, GIF, JPEG, LBM, PCX, PNG, PNM, TGA, TIFF,
 WEBP, XCF, XPM, and XV.")
     (home-page "https://www.libsdl.org/projects/SDL_image/")
-    (license zlib)))
+    (license license:zlib)))
 
 (define-public sdl-mixer
   (package
@@ -290,7 +288,7 @@ WEBP, XCF, XPM, and XV.")
        ("libmad" ,libmad)
        ("libmikmod" ,libmikmod)
        ("libvorbis" ,libvorbis)))
-    (propagated-inputs `(("sdl" ,sdl)))
+    (propagated-inputs (list sdl))
     (synopsis "SDL multi-channel audio mixer library")
     (description "SDL_mixer is a multi-channel audio mixer library for SDL.
 It supports any number of simultaneously playing channels of 16 bit stereo
@@ -303,7 +301,7 @@ and specify it using the @code{SDL_SOUNDFONTS} environment variable.  For the
 legacy @code{timidity} backend, install a patch set such as @code{freepats}
 and set the path to the configuration file with @code{TIMIDITY_CFG}.")
     (home-page "https://www.libsdl.org/projects/SDL_mixer/")
-    (license zlib)))
+    (license license:zlib)))
 
 (define-public sdl-net
   (package
@@ -318,14 +316,14 @@ and set the path to the configuration file with @code{TIMIDITY_CFG}.")
                (base32
                 "1d5c9xqlf4s1c01gzv6cxmg0r621pq9kfgxcg3197xw4p25pljjz"))))
     (build-system gnu-build-system)
-    (propagated-inputs `(("sdl" ,sdl)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (propagated-inputs (list sdl))
+    (native-inputs (list pkg-config))
     (outputs '("out" "debug"))
     (synopsis "SDL networking library")
     (description "SDL_net is a small, cross-platform networking library for
 SDL.")
     (home-page "https://www.libsdl.org/projects/SDL_net/")
-    (license zlib)))
+    (license license:zlib)))
 
 (define-public sdl-pango
   (package
@@ -355,10 +353,7 @@ SDL.")
            ;; generates linking errors.
            (lambda _ (invoke "autoreconf" "-vif"))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
      `(("fontconfig" ,fontconfig)
        ("freetype" ,freetype)
@@ -371,30 +366,35 @@ SDL.")
     (description "This library is a wrapper around the Pango library.
 It allows you to use TrueType fonts to render internationalized and
 tagged text in SDL applications.")
-    (license lgpl2.1)))
+    (license license:lgpl2.1)))
 
 (define-public sdl-ttf
   (package
     (name "sdl-ttf")
-    (version "2.0.11")
+    (version "2.0.11.1")
+    ;; No release tarball for 2.0.11.1, changes:
+    ;; <https://github.com/libsdl-org/SDL_ttf/commit/e31d11a692>
     (source (origin
-             (method url-fetch)
-             (uri
-              (string-append "https://www.libsdl.org/projects/SDL_ttf/release/SDL_ttf-"
-                             version ".tar.gz"))
-             (sha256
-              (base32
-               "1dydxd4f5kb1288i5n5568kdk2q7f8mqjr7i7sd33nplxjaxhk3j"))))
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/libsdl-org/SDL_ttf")
+                    (commit "e31d11a692e5b55e8e624ad766e4e44d655422c8")))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1id1cdign615wd5rq0g4ppzwclvhkwd61yb5rwvvvakkpplp3lvd"))
+              ;; Remove bundled libraries.
+              (modules '((guix build utils)))
+              (snippet '(delete-file-recursively "external"))))
     (build-system gnu-build-system)
-    (propagated-inputs `(("sdl" ,sdl)))
-    (inputs `(("freetype" ,freetype)
-              ("mesa" ,mesa)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (propagated-inputs (list sdl))
+    (inputs (list freetype mesa))
+    (native-inputs (list pkg-config))
     (outputs '("out" "debug"))
     (synopsis "SDL TrueType font library")
     (description "SDL_ttf is a TrueType font rendering library for SDL.")
     (home-page "https://www.libsdl.org/projects/SDL_ttf/")
-    (license zlib)))
+    (license license:zlib)))
 
 (define* (sdl-union #:optional (packages (list sdl sdl-gfx sdl-net sdl-ttf
                                                sdl-image sdl-mixer)))
@@ -492,10 +492,11 @@ directory.")
             "--disable-music-midi-fluidsynth-shared"
             ,flags))))
     (inputs
-     `(("opusfile" ,opusfile)
-       ;; The default MOD library changed in SDL2 mixer.
-       ("libmodplug" ,libmodplug)
-       ,@(alist-delete "libmikmod" (package-inputs sdl-mixer))))
+     (modify-inputs (package-inputs sdl-mixer)
+       (delete "libmikmod")
+       (prepend opusfile
+                ;; The default MOD library changed in SDL2 mixer.
+                libmodplug)))
     (native-inputs
      `(("pkgconfig" ,pkg-config))) ; Needed to find the opus library.
     (propagated-inputs
@@ -540,24 +541,25 @@ directory.")
 (define-public guile-sdl
   (package
     (name "guile-sdl")
-    (version "0.5.2")
+    (version "0.5.3")
     (source (origin
               (method url-fetch)
               (uri
                (string-append "mirror://gnu/guile-sdl/guile-sdl-"
-                              version ".tar.xz"))
+                              version ".tar.lz"))
               (sha256
                (base32
-                "0cjgs012a9922hn6xqwj66w6qmfs3nycnm56hyykx5n3g5p7ag01"))))
+                "040gyk3n3yp8i30ngdg97n3083g8b6laky2nlh10jqcyjdd550d6"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
+     `(("lzip" ,lzip)
+       ("pkg-config" ,pkg-config)
        ;; Required by test suite.
-       ("xorg-server" ,xorg-server)
-       ("libjpeg" ,libjpeg-turbo)))
+       ("libjpeg" ,libjpeg-turbo)
+       ("xorg-server" ,xorg-server)))
     (inputs
-     `(("guile" ,guile-2.2)
-       ("sdl-union" ,(sdl-union))))
+     (list guile-2.2
+           (sdl-union)))
     (arguments
      '(#:configure-flags
        (list (string-append "--with-sdl-prefix="
@@ -615,45 +617,44 @@ directory.")
 Layer (SDL).  With them, Guile programmers can have easy access to graphics,
 sound and device input (keyboards, joysticks, mice, etc.).")
     (home-page "https://www.gnu.org/software/guile-sdl/")
-    (license gpl3+)))
+    (license license:gpl3+)))
 
 (define-public guile-sdl2
   (package
     (name "guile-sdl2")
-    (version "0.6.0")
+    (version "0.7.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://files.dthompson.us/guile-sdl2/"
                                   "guile-sdl2-" version ".tar.gz"))
               (sha256
                (base32
-                "06vrknn4iz0ag932rb4almyhi9cvdkn081shvsi0h4skd6ry8bdl"))))
+                "197dzkxw8nv92da56iv2r8ih5r3pr4pd5c5j2q83aqb78h4jqjl7"))))
     (build-system gnu-build-system)
     (arguments
      '(#:make-flags '("GUILE_AUTO_COMPILE=0")))
     (native-inputs
-     `(("guile" ,guile-2.2)
-       ("pkg-config" ,pkg-config)))
+     (list guile-3.0 pkg-config))
     (inputs
-     `(("sdl2" ,sdl2)
-       ("sdl2-image" ,sdl2-image)
-       ("sdl2-mixer" ,sdl2-mixer)
-       ("sdl2-ttf" ,sdl2-ttf)))
+     (list sdl2 sdl2-image sdl2-mixer sdl2-ttf))
     (synopsis "Guile bindings for SDL2")
     (home-page "https://dthompson.us/projects/guile-sdl2.html")
     (description
      "Guile-SDL2 provides Guile Scheme bindings for the SDL2 C shared library.
 The bindings are written in pure Scheme using Guile's foreign function
 interface.")
-    (license lgpl3+)))
+    (license license:lgpl3+)))
 
-(define-public guile3.0-sdl2
+(define-public guile2.2-sdl2
   (package/inherit guile-sdl2
-    (name "guile3.0-sdl2")
+    (name "guile2.2-sdl2")
     (native-inputs
-     `(("guile" ,guile-3.0)
+     `(("guile" ,guile-2.2)
        ("pkg-config" ,pkg-config)))))
 
+(define-public guile3.0-sdl2
+  (deprecated-package "guile3.0-sdl2" guile-sdl2))
+
 (define-public sdl2-cs
   (let ((commit "1a3556441e1394eb0b5d46aeb514b8d1090b93f8"))
     (package
@@ -683,16 +684,13 @@ interface.")
                  (install-file "bin/Release/SDL2-CS.dll" (string-append out "/lib"))
                  #t))))))
       (native-inputs
-       `(("mono" ,mono)))
+       (list mono))
       (inputs
-       `(("sdl2" ,sdl2)
-         ("sdl2-image" ,sdl2-image)
-         ("sdl2-mixer" ,sdl2-mixer)
-         ("sdl2-ttf" ,sdl2-ttf)))
+       (list sdl2 sdl2-image sdl2-mixer sdl2-ttf))
       (home-page "https://dthompson.us/projects/guile-sdl2.html")
       (synopsis "C# wrapper for SDL2")
       (description
        "SDL2-CS provides C# bindings for the SDL2 C shared library.
 The C# wrapper was written to be used for FNA's platform support.  However, this
 is written in a way that can be used for any general C# application.")
-      (license zlib))))
+      (license license:zlib))))
diff --git a/gnu/packages/search.scm b/gnu/packages/search.scm
index 44d5b631ca..ea1c555201 100644
--- a/gnu/packages/search.scm
+++ b/gnu/packages/search.scm
@@ -2,11 +2,13 @@
 ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015, 2016 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be>
-;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2017, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2018, 2020, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Adam Massmann <massmannak@gmail.com>
 ;;; Copyright © 2020 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;; Copyright © 2021 Vinicius Monego <monego@posteo.net>
+;;; Copyright © 2021 Alexandr Vityazev <avityazev@posteo.org>
+;;; Copyright © 2021, 2022 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -33,25 +35,39 @@
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system perl)
   #:use-module (guix build-system python)
+  #:use-module (guix build-system meson)
   #:use-module (gnu packages)
+  #:use-module (gnu packages aspell)
+  #:use-module (gnu packages autotools)
+  #:use-module (gnu packages base)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages check)
   #:use-module (gnu packages databases)
+  #:use-module (gnu packages ebook)
   #:use-module (gnu packages freedesktop)
+  #:use-module (gnu packages gawk)
+  #:use-module (gnu packages gettext)
+  #:use-module (gnu packages glib)
+  #:use-module (gnu packages groff)
+  #:use-module (gnu packages gtk)
+  #:use-module (gnu packages icu4c)
   #:use-module (gnu packages less)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages pcre)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pdf)
+  #:use-module (gnu packages photo)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-crypto)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
+  #:use-module (gnu packages qt)
   #:use-module (gnu packages sphinx)
   #:use-module (gnu packages time)
   #:use-module (gnu packages web)
   #:use-module (gnu packages xdisorg)
-  #:use-module (gnu packages xml))
+  #:use-module (gnu packages xml)
+  #:use-module (gnu packages pkg-config))
 
 (define-public xapian
   (package
@@ -65,8 +81,8 @@
               (sha256
                (base32 "0xsb4ihf3p767f0zx9p4janwni6r9sg5j6lry0002i8hmnsdnv8r"))))
     (build-system gnu-build-system)
-    (inputs `(("zlib" ,zlib)
-              ("util-linux" ,util-linux "lib")))
+    (inputs (list zlib
+                  `(,util-linux "lib")))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -112,11 +128,9 @@ rich set of boolean query operators.")
                                             (package-version python))
                             "/site-packages/xapian"))))
     (native-inputs
-     `(("python-sphinx" ,python-sphinx))) ;for documentation
+     (list python-sphinx)) ;for documentation
     (inputs
-     `(("python" ,python)
-       ("xapian" ,xapian)
-       ("zlib" ,zlib)))
+     (list python xapian zlib))
     (synopsis "Python bindings for the Xapian search engine library")
     (license gpl2+)))
 
@@ -133,9 +147,9 @@ rich set of boolean query operators.")
         (base32 "1pbl8pbgmbs3i8yik4p63g4pd9bhn0dp3d7l667dkvw0kccl66c7"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-devel-leak" ,perl-devel-leak)))
+     (list perl-devel-leak))
     (inputs
-     `(("xapian" ,xapian)))
+     (list xapian))
     (home-page "https://metacpan.org/release/Search-Xapian")
     (synopsis "Perl XS frontend to the Xapian C++ search library")
     (description
@@ -157,8 +171,8 @@ simplified, more 'perlish' interface to some common operations.")
         (base32
          "1kd2jd74m8ksc8s7hh0haz0q0c3n0mr39bbky262kk4l58f1g068"))))
     (build-system gnu-build-system)
-    (native-inputs `(("catch" ,catch-framework)))
-    (inputs `(("unqlite" ,unqlite)))
+    (native-inputs (list catch-framework))
+    (inputs (list unqlite))
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (add-before 'configure 'chdir-source
@@ -195,8 +209,7 @@ files and directories.")
     (source (package-source libtocc))
     (build-system gnu-build-system)
     (inputs
-     `(("libtocc" ,libtocc)
-       ("unqlite" ,unqlite)))
+     (list libtocc unqlite))
     (arguments
      `(#:tests? #f                      ;No tests
        #:phases (modify-phases %standard-phases
@@ -241,18 +254,18 @@ command line tool for interacting with libtocc.")
                (("requests\\[socks\\]==2.25.1") "requests>=2.25")
                (("==") ">=")))))))
     (propagated-inputs
-     `(("python-babel" ,python-babel)
-       ("python-certifi" ,python-certifi)
-       ("python-dateutil" ,python-dateutil)
-       ("python-flask" ,python-flask)
-       ("python-flask-babel" ,python-flask-babel)
-       ("python-idna" ,python-idna)
-       ("python-jinja2" ,python-jinja2)
-       ("python-langdetect" ,python-langdetect)
-       ("python-lxml" ,python-lxml)
-       ("python-pygments" ,python-pygments)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-requests" ,python-requests)))
+     (list python-babel
+           python-certifi
+           python-dateutil
+           python-flask
+           python-flask-babel
+           python-idna
+           python-jinja2
+           python-langdetect
+           python-lxml
+           python-pygments
+           python-pyyaml
+           python-requests))
     (home-page "https://searx.github.io/searx/")
     (synopsis "Privacy-respecting metasearch engine")
     (description "Searx is a privacy-respecting, hackable metasearch engine.")
@@ -283,6 +296,133 @@ accounting for new lines and paragraph changes.  It also has robust support
 for parsing HTML files.")
     (license gpl3+)))
 
+(define-public fsearch
+  (package
+    (name "fsearch")
+    (version "0.1.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/cboxdoerfer/fsearch")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0vfwnx83zs0jymmzjww1k597sj3wvc9xq0nbslwci58rjpk3d0lg"))))
+    (build-system meson-build-system)
+    (native-inputs
+     (list autoconf
+           automake
+           gettext-minimal
+           `(,glib "bin")               ;for glib-compile-resources
+           intltool
+           libtool
+           pkg-config))
+    (inputs
+     (list gtk+ icu4c pcre))
+    (home-page "https://github.com/cboxdoerfer/fsearch")
+    (synopsis "Fast file search utility")
+    (description
+     "FSearch is a fast file search utility, inspired by Everything
+Search Engine.  It is written in C and based on GTK3.")
+    (license gpl2+)))
+
+(define-public recoll
+  (package
+    (name "recoll")
+    (version "1.31.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://www.lesbonscomptes.com/recoll/"
+                           "recoll-" version ".tar.gz"))
+       (sha256
+        (base32 "0m1w5hf2n09lbzmzvlrm2lks4lci9vvjxy2mcmgb2avgly7v5vfk"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags
+       (list "--disable-webkit"
+             "--disable-python-module"
+             "--without-systemd"
+             (string-append "QMAKEPATH=" (assoc-ref %build-inputs "qtbase")
+                            "/bin/qmake"))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-default-data-dir
+           (lambda* (#:key outputs #:allow-other-keys)
+             (substitute* "python/recoll/recoll/rclconfig.py"
+               (("/opt/local")
+                (assoc-ref outputs "out")))))
+         (add-after 'install 'wrap-filters
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (mapping
+                     '(("rclps"
+                        "poppler")
+                       ("rclpdf.py"
+                        "poppler")
+                       ("rclpurple"
+                        "gawk")
+                       ("rcllyx"
+                        "libiconv")
+                       ("rcltex"
+                        "libiconv")
+                       ("rclkwd"
+                        "unzip" "gzip" "tar" "libxslt")
+                       ("rclman"
+                        "groff")
+                       ("rclgaim"
+                        "gawk" "libiconv")
+                       ("rclaptosidman"
+                        "sed")
+                       ("rclscribus"
+                        "grep" "gawk" "sed"))))
+               (for-each
+                (lambda (program packages)
+                  (wrap-program (string-append out "/share/recoll/filters/" program)
+                    `("PATH" ":" prefix
+                      ,(map (lambda (i)
+                              (string-append (assoc-ref inputs i) "/bin"))
+                            packages))))
+                (map car mapping)
+                (map cdr mapping))
+
+               (wrap-program (string-append out "/share/recoll/filters/rclimg")
+                 `("PERL5LIB" ":" prefix
+                   (,(getenv "PERL5LIB"))))))))))
+    (inputs
+     (list aspell
+           chmlib
+           inotify-tools
+           libxslt
+           libxml2
+           python
+           qtbase-5
+           unzip
+           xapian
+           zlib
+           ;; For filters
+           gawk
+           grep
+           groff
+           gzip
+           libiconv
+           perl
+           perl-image-exiftool
+           poppler
+           sed
+           tar))
+    (native-inputs
+     (list pkg-config which))
+    (home-page "https://www.lesbonscomptes.com/recoll/")
+    (synopsis "Find documents based on their contents or file names")
+    (description "Recoll finds documents based on their contents as well as
+their file names.  It can search most document formats, but you may need
+external applications for text extraction.  It can reach any storage place:
+files, archive members, email attachments, transparently handling
+decompression.")
+    (license gpl2+)))
+
 (define-public hyperestraier
   (package
     (name "hyperestraier")
@@ -296,8 +436,7 @@ for parsing HTML files.")
          (base32
           "1qk3pxgzyrpcz5qfyd5xs2hw9q1cbb7j5zd4kp1diq501wcj2vs9"))))
     (inputs
-     `(("qdbm" ,qdbm)
-       ("zlib" ,zlib)))
+     (list qdbm zlib))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags (list (string-append "LDFLAGS=-Wl,-rpath="
@@ -333,6 +472,35 @@ with slocate, and attempts to be compatible to GNU locate when it does not
 conflict with slocate compatibility.")
     (license gpl2)))
 
+(define-public plocate
+  (package
+    (name "plocate")
+    (version "1.1.13")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://plocate.sesse.net/download/"
+                           "plocate-" version ".tar.gz"))
+       (sha256
+        (base32 "16lpiirjmj4mrdj5kkjv7rikkgjx3i64ac0sl3lz1rshflhxgqww"))))
+    (build-system meson-build-system)
+    (arguments
+     `(#:configure-flags
+       (list
+        (string-append
+         "--sharedstatedir=" (assoc-ref %outputs "out") "/var"))))
+    (inputs
+     (list liburing
+           `(,zstd "lib")))
+    (native-inputs
+     (list pkg-config))
+    (home-page "https://plocate.sesse.net/")
+    (synopsis "Faster locate")
+    (description "Plocate is a @code{locate} based on posting lists,
+completely replacing @command{mlocate} with a faster and smaller index.  It is
+suitable as a default locate on your system.")
+    (license gpl2)))
+
 (define-public swish-e
   (package
     (name "swish-e")
@@ -358,11 +526,8 @@ conflict with slocate compatibility.")
     ;; building: xpdf, catdoc, MP3::Tag, Spreadsheet::ParseExcel,
     ;; HTML::Entities.
     (inputs
-     `(("perl" ,perl)
-       ("perl-uri" ,perl-uri)
-       ("perl-html-parser" ,perl-html-parser)
-       ("perl-html-tagset" ,perl-html-tagset)
-       ("perl-mime-types" ,perl-mime-types)))
+     (list perl perl-uri perl-html-parser perl-html-tagset
+           perl-mime-types))
     (arguments
      `(;; XXX: This fails to build with zlib (API mismatch) and tests fail
        ;; with libxml2, so disable both.
@@ -412,17 +577,14 @@ search the generated indexes.")
          "0ykz6hn3qj46w3c99d6q0pi5ncq2894simcl7vapv047zm3cylmd"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("poppler" ,poppler)
-       ("python-urwid" ,python-urwid)
-       ("xclip" ,xclip)
-       ("xdg-utils" ,xdg-utils)))
+     (list poppler python-urwid xclip xdg-utils))
     (inputs
-     `(("python-latexcodec" ,python-latexcodec)
-       ("python-pybtex" ,python-pybtex)
-       ("python-pycurl" ,python-pycurl)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-six" ,python-six)
-       ("python-xapian-bindings" ,python-xapian-bindings)))
+     (list python-latexcodec
+           python-pybtex
+           python-pycurl
+           python-pyyaml
+           python-six
+           python-xapian-bindings))
     (arguments
      `(#:modules ((ice-9 rdelim)
                   (guix build python-build-system)
@@ -490,12 +652,12 @@ bibliographic data and simple document and bibtex retrieval.")
                   #t))))
     (build-system gnu-build-system)
     (inputs
-     `(("bzip2" ,bzip2)
-       ("less" ,less)
-       ("lz4" ,lz4)
-       ("lzip" ,lzip)  ;; lzma
-       ("pcre2" ,pcre2)
-       ("zlib" ,zlib)))
+     (list bzip2
+           less
+           lz4
+           lzip ;; lzma
+           pcre2
+           zlib))
     (arguments
      `(#:tests? #f                  ; no way to rebuild the binary input files
        #:test-target "test"
diff --git a/gnu/packages/security-token.scm b/gnu/packages/security-token.scm
index 1f60e25458..8190e1e1e2 100644
--- a/gnu/packages/security-token.scm
+++ b/gnu/packages/security-token.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2014, 2021 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2016, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Mike Gerwitz <mtg@gnu.org>
 ;;; Copyright © 2016 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be>
@@ -10,8 +10,11 @@
 ;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2020 Raphaël Mélotte <raphael.melotte@mind.be>
 ;;; Copyright © 2021 Antero Mejr <antero@kodmin.com>
+;;; Copyright © 2021 Brice Waegeneire <brice@waegenei.re>
 ;;; Copyright © 2021 Sergey Trofimov <sarg@sarg.org.ru>
 ;;; Copyright © 2021 Dhruvin Gandhi <contact@dhruvin.dev>
+;;; Copyright © 2021 Ahmad Jarara <git@ajarara.io>
+;;; Copyright © 2022 John Kehayias <john.kehayias@protonmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -44,14 +47,17 @@
   #:use-module (gnu packages base)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages check)
+  #:use-module (gnu packages compression)
   #:use-module (gnu packages crates-io)
   #:use-module (gnu packages docbook)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages dns)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages graphviz)
+  #:use-module (gnu packages gnome)
   #:use-module (gnu packages gnupg)
   #:use-module (gnu packages gtk)
+  #:use-module (gnu packages libbsd)
   #:use-module (gnu packages libusb)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages man)
@@ -68,20 +74,22 @@
   #:use-module (gnu packages python-crypto)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages swig)
+  #:use-module (gnu packages suckless)
   #:use-module (gnu packages web)
+  #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xml))
 
 (define-public ccid
   (package
     (name "ccid")
-    (version "1.4.34")
+    (version "1.4.36")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://ccid.apdu.fr/files/ccid-"
                                   version ".tar.bz2"))
               (sha256
                (base32
-                "02mlbpnsvy6jgwpz0jk5lh27y3cn2bsyz9xini7898m9b5dn9xz6"))))
+                "1ha9cwxkadx4rs4jj114qzh42qj02x6r8y1mvhcvijhvby4aqwrb"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags (list (string-append "--enable-usbdropdir=" %output
@@ -94,11 +102,9 @@
                (("/bin/echo") (which "echo")))
              #t)))))
     (native-inputs
-     `(("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list perl pkg-config))
     (inputs
-     `(("libusb" ,libusb)
-       ("pcsc-lite" ,pcsc-lite)))
+     (list libusb pcsc-lite))
     (home-page "https://ccid.apdu.fr/")
     (synopsis "PC/SC driver for USB smart card devices")
     (description
@@ -111,7 +117,8 @@ readers and is needed to communicate with such devices through the
 (define-public eid-mw
   (package
     (name "eid-mw")
-    (version "5.0.14")
+    ;; When updating, remove the short-lived libbsd input and module import!
+    (version "5.0.28")
     (source
      (origin
        (method git-fetch)
@@ -120,7 +127,7 @@ readers and is needed to communicate with such devices through the
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1hyxsbxjjn9hh5p7jlcfb5yplf3n8dg49dfgi8fjp95phis3gbd4"))))
+        (base32 "0fmpdx09a60ndbsvy3m6w77naqy3j6k2ydq6jdcmdvxnr31z7fmf"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
      `(("autoconf" ,autoconf)
@@ -132,17 +139,23 @@ readers and is needed to communicate with such devices through the
        ("pkg-config" ,pkg-config)
        ("perl" ,perl)))
     (inputs
-     `(("curl" ,curl)
-       ("openssl" ,openssl)
-       ("gtk+" ,gtk+)
-       ("pcsc-lite" ,pcsc-lite)
-       ("p11-kit" ,p11-kit)
-       ("libproxy" ,libproxy)
-       ("libxml2" ,libxml2)
-       ("cyrus-sasl" ,cyrus-sasl)))
+     (list curl
+           libbsd
+           openssl
+           gtk+
+           pcsc-lite
+           p11-kit
+           libproxy
+           libxml2
+           cyrus-sasl))
     (arguments
      `(#:configure-flags
-       (list "--disable-static")
+       (list "--disable-static"
+
+             ;; With the (prettier) pinentry enabled, eid-viewer will skip
+             ;; crucial dialogue when used with card readers with built-in
+             ;; keypads such as the Digipass 870, and possibly others too.
+             "--disable-pinentry")
        #:phases
        (modify-phases %standard-phases
          (replace 'bootstrap
@@ -152,25 +165,12 @@ readers and is needed to communicate with such devices through the
              (substitute* "scripts/build-aux/genver.sh"
                (("/bin/sh") (which "sh"))
                (("^(GITDESC=).*" _ match) (string-append match ,version "\n")))
-             (invoke "sh" "./bootstrap.sh")))
-         (add-after 'unpack 'make-reproducible
-           (lambda _
-             (substitute* "scripts/mac/create-vers.sh"
-               (("NOW=.*")
-                "NOW=1970-01-01\n"))
-             #t))
-         ;; Remove failing test that was removed upstream after version 5.0.8.
-         ;; See: https://github.com/Fedict/eid-mw/commit/3d1187b1b61118b9ae97607903d3d2fc0bad7518
-         (add-before 'check 'remove-failing-test
-           (lambda _
-             (substitute* "tests/unit/Makefile.am"
-               (("sign_state ordering cardcom_common")
-                "sign_state ordering #cardcom_common"))
-             #t))
-         )))
-    (synopsis "Belgian eID Middleware")
-    (description "The Belgian eID Middleware is required to authenticate with
-online services using the Belgian electronic identity card.")
+             (invoke "sh" "./bootstrap.sh"))))))
+    (synopsis "Belgian electronic identity card (eID) middleware")
+    (description "The Belgian eID middleware is required to authenticate with
+online services and sign digital documents with Belgian identity cards.
+
+It requires a running pcscd service and a compatible card reader.")
     (home-page "https://github.com/Fedict/eid-mw")
     (license license:lgpl3)))
 
@@ -211,10 +211,9 @@ the low-level development kit for the Yubico YubiKey authentication device.")
      '(#:configure-flags '("--disable-gost"))) ; TODO Missing the OpenSSL
                                                ; engine for GOST
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("cppunit" ,cppunit)))
+     (list pkg-config cppunit))
     (synopsis "Software implementation of a generic cryptographic device")
     (description
      "SoftHSM 2 is a software implementation of a generic cryptographic device
@@ -225,21 +224,21 @@ with a PKCS #11 Cryptographic Token Interface.")
 (define-public pcsc-lite
   (package
     (name "pcsc-lite")
-    (version "1.9.0")
+    (version "1.9.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://pcsclite.apdu.fr/files/"
                                   "pcsc-lite-" version ".tar.bz2"))
               (sha256
                (base32
-                "1y9f9zipnrmgiw0mxrvcgky8vfrcmg6zh40gbln5a93i2c1x8j01"))))
+                "0n9y9m1wr5bwanpnylpdza3sf7lawi63jjizrl1aj5yxf4y46mk9"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags '("--enable-usbdropdir=/var/lib/pcsc/drivers"
                            "--disable-libsystemd")))
     (native-inputs
-     `(("perl" ,perl)                   ; for pod2man
-       ("pkg-config" ,pkg-config)))
+     (list perl ; for pod2man
+           pkg-config))
     (inputs
      `(("libudev" ,eudev)))
     (home-page "https://pcsclite.apdu.fr/")
@@ -270,9 +269,8 @@ from a client application and provide access to the desired reader.")
     ;; yubico.com, so skip it.
     (arguments '(#:tests? #f))
 
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("help2man" ,help2man)))
-    (inputs `(("curl" ,curl)))
+    (native-inputs (list pkg-config help2man))
+    (inputs (list curl))
     (synopsis "C library to validate one-time-password YubiKeys")
     (description
      "YubiKey C Client Library (libykclient) is a C library used to validate a
@@ -284,7 +282,7 @@ website for more information about Yubico and the YubiKey.")
 (define-public opensc
   (package
     (name "opensc")
-    (version "0.21.0")
+    (version "0.22.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -292,7 +290,7 @@ website for more information about Yubico and the YubiKey.")
                     version "/opensc-" version ".tar.gz"))
               (sha256
                (base32
-                "0pijycjwpll9zn83dazgsh8n9ywq0z1ragjsd1sqv3abrcfvpyrb"))))
+                "11ki9j2b07w5gi2b1r39d71320s7rhfzcpaqpqra7gjy353m6kld"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -303,22 +301,16 @@ website for more information about Yubico and the YubiKey.")
          ;; configuration file at runtime.
          (add-after 'unpack 'set-default-libpcsclite.so.1-path
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((libpcsclite (string-append (assoc-ref inputs "pcsc-lite")
-                                               "/lib/libpcsclite.so.1")))
+             (let ((libpcsclite (search-input-file inputs
+                                                   "/lib/libpcsclite.so.1")))
                (substitute* "configure"
                  (("DEFAULT_PCSC_PROVIDER=\"libpcsclite\\.so\\.1\"")
                   (string-append
-                   "DEFAULT_PCSC_PROVIDER=\"" libpcsclite "\"")))
-               #t))))))
+                   "DEFAULT_PCSC_PROVIDER=\"" libpcsclite "\"")))))))))
     (inputs
-     `(("readline" ,readline)
-       ("openssl" ,openssl)
-       ("pcsc-lite" ,pcsc-lite)
-       ("ccid" ,ccid)))
+     (list readline openssl pcsc-lite ccid))
     (native-inputs
-     `(("libxslt" ,libxslt)
-       ("docbook-xsl" ,docbook-xsl)
-       ("pkg-config" ,pkg-config)))
+     (list libxslt docbook-xsl pkg-config))
     (home-page "https://github.com/OpenSC/OpenSC/wiki")
     (synopsis "Tools and libraries related to smart cards")
     (description
@@ -343,17 +335,14 @@ authentication, encryption and digital signatures.  OpenSC implements the PKCS
                 "10xgdc51xvszkxmsvqnbjs8ixxz7rfnfahh3wn8glllynmszbhwi"))))
     (build-system gnu-build-system)
     (inputs
-     `(("gengetopt" ,gengetopt)
-       ("perl" ,perl)
-       ("pcsc-lite" ,pcsc-lite)
-       ("openssl" ,openssl)))
+     (list gengetopt perl pcsc-lite openssl))
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("graphviz" ,graphviz)
-       ("help2man" ,help2man)
-       ("check" ,check)
-       ("texlive-bin" ,texlive-bin)
-       ("pkg-config" ,pkg-config)))
+     (list doxygen
+           graphviz
+           help2man
+           check
+           texlive-bin
+           pkg-config))
     (home-page "https://developers.yubico.com/yubico-piv-tool/")
     (synopsis "Interact with the PIV application on a YubiKey")
     (description
@@ -391,13 +380,11 @@ and other operations.  It includes a library and a command-line tool.")
                                               (assoc-ref %outputs "out")
                                               "/lib/udev/rules.d"))))
     (inputs
-     `(("json-c" ,json-c-0.13)
-       ("libusb" ,libusb)
-       ;; The library "libyubikey" is also known as "yubico-c".
-       ("libyubikey" ,libyubikey)))
+     (list json-c-0.13 libusb
+           ;; The library "libyubikey" is also known as "yubico-c".
+           libyubikey))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("eudev" ,eudev)))
+     (list pkg-config eudev))
     (home-page "https://developers.yubico.com/yubikey-personalization/")
     (synopsis "Library and tools to personalize YubiKeys")
     (description
@@ -442,13 +429,13 @@ retrieve a YubiKey's serial number, and so forth.")
                (("lib = \"libpcsclite\\.so\\.1\";")
                 (simple-format #f
                                "lib = \"~a\";"
-                               (string-append (assoc-ref inputs "pcsc-lite")
-                                              "/lib/libpcsclite.so.1"))))
+                               (search-input-file inputs
+                                                  "/lib/libpcsclite.so.1"))))
              #t)))))
     (inputs
-     `(("pcsc-lite" ,pcsc-lite)))
+     (list pcsc-lite))
     (native-inputs
-     `(("swig" ,swig)))
+     (list swig))
     (home-page "https://github.com/LudovicRousseau/pyscard")
     (synopsis "Smart card library for Python")
     (description
@@ -460,6 +447,65 @@ PCSC API Python wrapper module.")
 (define-public python2-pyscard
   (package-with-python2 python-pyscard))
 
+(define-public yubikey-oath-dmenu
+  (package
+    (name "yubikey-oath-dmenu")
+    (version "0.13.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/emlun/yubikey-oath-dmenu")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1h6dr4l0gzgdg8zn2c39kx9cx1bgvwqxkz3z95qz9r70xfsghgwk"))))
+    (build-system python-build-system)
+    (arguments
+     (list
+      #:tests? #f ; there are no tests
+      #:phases
+      #~(modify-phases %standard-phases
+          (delete 'configure) ; no configure script
+          (delete 'build)     ; or build
+          (add-after 'unpack 'fix-paths
+            (lambda* (#:key inputs #:allow-other-keys)
+              (substitute* "yubikey-oath-dmenu.py"
+                (("'(dmenu|notify-send|wl-copy|xclip|xdotool)" _ tool)
+                 (string-append
+                  "'"
+                  (search-input-file inputs
+                                     (string-append "/bin/" tool)))))))
+          (replace 'install
+            (lambda _
+              (invoke "make" "install"
+                      (string-append "PREFIX=" #$output)))))))
+    (inputs
+     (list dmenu
+           libnotify
+           python-click
+           python-yubikey-manager
+           ;; TODO add wtype, once packaged, for type support for Wayland
+           wl-clipboard ; optional clipboard support for Wayland
+           xclip        ; optional clipboard support for X11
+           xdotool))    ; optional type support for X11
+    (home-page
+     "https://github.com/emlun/yubikey-oath-dmenu/")
+    (synopsis "Interface for getting OATH codes from a YubiKey using dmenu")
+    (description
+     "Yubikey-oath-demenu lets you pick an OATH credential from your YubiKey using
+dmenu, and copies the corresponding OTP to the clipboard.  Alternatively, it
+can \"type\" the OTP using @code{xdotool} on X11.
+
+Notable features:
+
+@itemize
+@item Pick between all credentials on all connected YubiKeys
+@item No mouse interaction required
+@end itemize\n")
+    (license license:gpl3+)))
+
 (define-public libu2f-host
   (package
     (name "libu2f-host")
@@ -491,15 +537,14 @@ PCSC API Python wrapper module.")
                                "/xml/dtd/docbook/docbookx.dtd")))
              #t)))))
     (inputs
-     `(("json-c" ,json-c-0.13)
-       ("hidapi" ,hidapi)))
+     (list json-c-0.13 hidapi))
     (native-inputs
-     `(("help2man" ,help2man)
-       ("gengetopt" ,gengetopt)
-       ("pkg-config" ,pkg-config)
-       ("gtk-doc" ,gtk-doc)
-       ("docbook-xml" ,docbook-xml-4.3)
-       ("eudev" ,eudev)))
+     (list help2man
+           gengetopt
+           pkg-config
+           gtk-doc
+           docbook-xml-4.3
+           eudev))
     (home-page "https://developers.yubico.com/libu2f-host/")
     ;; TRANSLATORS: The U2F protocol has a "server side" and a "host side".
     (synopsis "U2F host-side C library and tool")
@@ -531,18 +576,17 @@ operations.")
        (list "--enable-gtk-doc"
              "--enable-tests")))
     (inputs
-     `(("json-c" ,json-c-0.13)
-       ("libressl" ,libressl)))
+     (list json-c-0.13 libressl))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("check" ,check)
-       ("gengetopt" ,gengetopt)
-       ("help2man" ,help2man)
-       ("pkg-config" ,pkg-config)
-       ("gtk-doc" ,gtk-doc)
-       ("which" ,which)))
+     (list autoconf
+           automake
+           libtool
+           check
+           gengetopt
+           help2man
+           pkg-config
+           gtk-doc
+           which))
     (home-page "https://developers.yubico.com/libu2f-server/")
     ;; TRANSLATORS: The U2F protocol has a "server side" and a "host side".
     (synopsis "U2F server-side C library")
@@ -574,15 +618,9 @@ verifying the cryptographic operations.")
        (list (string-append "--with-pam-dir="
                             (assoc-ref %outputs "out") "/lib/security"))))
     (inputs
-     `(("libu2f-host" ,libu2f-host)
-       ("libu2f-server" ,libu2f-server)
-       ("linux-pam" ,linux-pam)))
+     (list libu2f-host libu2f-server linux-pam))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("asciidoc" ,asciidoc)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool asciidoc pkg-config))
     (home-page "https://developers.yubico.com/pam-u2f/")
     (synopsis "PAM module for U2F authentication")
     (description
@@ -594,7 +632,7 @@ your existing infrastructure.")
 (define-public python-fido2
   (package
     (name "python-fido2")
-    (version "0.5.0")
+    (version "0.9.3")
     (source (origin
               (method url-fetch)
               (uri
@@ -603,30 +641,31 @@ your existing infrastructure.")
                 version "/fido2-" version ".tar.gz"))
               (sha256
                (base32
-                "1pl8d2pr6jzqj4y9qiaddhjgnl92kikjxy0bgzm2jshkzzic8mp3"))
+                "1v366h449f8q74jkmy1291ffj2345nm7cdsipgqvgz4w22k8jpml"))
               (snippet
                ;; Remove bundled dependency.
-               #~(delete-file "fido2/public_suffix_list.dat"))))
+               '(delete-file "fido2/public_suffix_list.dat"))))
     (build-system python-build-system)
     (arguments
-     `(#:phases
+     `(;; This attempts to access
+       ;; /System/Library/Frameworks/IOKit.framework/IOKit
+       ;; The recommendation is to use tox for testing.
+       #:tests? #false
+       #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'install-public-suffix-list
            (lambda* (#:key inputs #:allow-other-keys)
              (copy-file
-              (string-append (assoc-ref inputs "public-suffix-list")
-                             "/share/public-suffix-list-"
-                             ,(package-version public-suffix-list)
-                             "/public_suffix_list.dat")
-              "fido2/public_suffix_list.dat")
-             #t)))))
+              (search-input-file inputs
+                                 (string-append
+                                  "/share/public-suffix-list-"
+                                  ,(package-version public-suffix-list)
+                                  "/public_suffix_list.dat"))
+              "fido2/public_suffix_list.dat"))))))
     (propagated-inputs
-     `(("python-cryptography" ,python-cryptography)
-       ("python-six" ,python-six)))
+     (list python-cryptography python-six))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pyfakefs" ,python-pyfakefs)
-       ("public-suffix-list" ,public-suffix-list)))
+     (list python-mock python-pyfakefs public-suffix-list))
     (home-page "https://github.com/Yubico/python-fido2")
     (synopsis "Python library for communicating with FIDO devices over USB")
     (description
@@ -648,7 +687,7 @@ implementing a Relying Party.")
 (define-public python-yubikey-manager
   (package
     (name "python-yubikey-manager")
-    (version "2.1.0")
+    (version "4.0.7")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -656,40 +695,25 @@ implementing a Relying Party.")
                     "/yubikey-manager-" version ".tar.gz"))
               (sha256
                (base32
-                "11rsmcaj60k3y5m5gdhr2nbbz0w5dm3m04klyxz0fh5hnpcmr7fm"))))
+                "0kzwal7i4kyywm4f5zh8b823mh0ih2nsh5c0c4dfn4vw3j5dnwlr"))))
     (build-system python-build-system)
     (arguments
-     '(#:modules ((srfi srfi-1)
-                  (guix build utils)
-                  (guix build python-build-system))
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-libykpers-reference
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "ykman/driver_otp.py"
-               (("Ykpers\\('ykpers-1', '1'\\)")
-                (string-append
-                 "Ykpers('"
-                 (find (negate symbolic-link?)
-                       (find-files (assoc-ref inputs "yubikey-personalization")
-                                   "^libykpers-.*\\.so\\..*"))
-                 "')")))
-             #t)))))
+     '(;; This attempts to access
+       ;; /System/Library/Frameworks/IOKit.framework/IOKit
+       ;; The recommendation is to use tox for testing.
+       #:tests? #false))
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-pyscard" ,python-pyscard)
-       ("python-pyusb" ,python-pyusb)
-       ("python-click" ,python-click)
-       ("python-cryptography" ,python-cryptography)
-       ("python-pyopenssl" ,python-pyopenssl)
-       ("python-fido2" ,python-fido2)))
+     (list python-six
+           python-pyscard
+           python-pyusb
+           python-click
+           python-cryptography
+           python-pyopenssl
+           python-fido2))
     (inputs
-     `(("yubikey-personalization" ,yubikey-personalization)
-       ("pcsc-lite" ,pcsc-lite)
-       ("libusb" ,libusb)))
+     (list pcsc-lite))
     (native-inputs
-     `(("swig" ,swig)
-       ("python-mock" ,python-mock)))
+     (list swig python-mock))
     (home-page "https://developers.yubico.com/yubikey-manager/")
     (synopsis "Command line tool and library for configuring a YubiKey")
     (description
@@ -732,8 +756,7 @@ an unprivileged user.")
         ("rust-regex" ,rust-regex-1)
         ("rust-tempfile" ,rust-tempfile-3))))
     (inputs
-     `(("hidapi" ,hidapi)
-       ("gnupg" ,gnupg)))
+     (list hidapi gnupg))
     (home-page "https://github.com/d-e-s-o/nitrocli")
     (synopsis "Command line tool for Nitrokey devices")
     (description
@@ -756,17 +779,16 @@ devices.")
 
     (build-system cmake-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list pkg-config qttools))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtwebsockets" ,qtwebsockets)
-       ("qtgraphicaleffects" ,qtgraphicaleffects)
-       ("qtquickcontrols2" ,qtquickcontrols2)
-       ("pcsc-lite" ,pcsc-lite)
-       ("openssl" ,openssl)))
+     (list qtbase-5
+           qtsvg
+           qtdeclarative
+           qtwebsockets
+           qtgraphicaleffects
+           qtquickcontrols2
+           pcsc-lite
+           openssl))
     (arguments
      `(#:modules ((guix build cmake-build-system)
                   (guix build qt-utils)
@@ -788,3 +810,36 @@ used for online authentication with electronic German ID cards and residence
 titles.  To use this app, a supported RFID card reader or NFC-enabled smart
 phone is required.")
     (license license:eupl1.2)))
+
+(define-public libfido2
+  (package
+    (name "libfido2")
+    (version "1.9.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "git://github.com/Yubico/libfido2")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256 (base32 "12zy4cnlcffcb64lsx8198y09j1dwi0bcn9rr82q6i1k950yzd3p"))))
+    (native-inputs (list pkg-config))
+    (inputs
+     `(("zlib" ,zlib)
+       ("udev" ,eudev)
+       ("libcbor" ,libcbor)
+       ("openssl" ,openssl)))
+    (build-system cmake-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         ;; regress tests enabled only for debug builds
+         (delete 'check))))
+    (synopsis "Library functionality and command-line tools for FIDO devices")
+    (description "libfido2 provides library functionality and command-line
+tools to communicate with a FIDO device over USB, and to verify attestation
+and assertion signatures.
+
+libfido2 supports the FIDO U2F (CTAP 1) and FIDO 2.0 (CTAP 2) protocols.")
+    (license license:bsd-2)
+    (home-page "https://github.com/Yubico/libfido2")))
diff --git a/gnu/packages/selinux.scm b/gnu/packages/selinux.scm
index 4c2228871f..0000bc7bc9 100644
--- a/gnu/packages/selinux.scm
+++ b/gnu/packages/selinux.scm
@@ -2,6 +2,8 @@
 ;;; Copyright © 2016, 2017, 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019, 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2021 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -47,49 +49,43 @@
 (define-public libsepol
   (package
     (name "libsepol")
-    (version "3.0")
-    (source (let ((release "20191204"))
-              (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://github.com/SELinuxProject/selinux")
-                      (commit release)))
-                (file-name (string-append "selinux-" release "-checkout"))
-                (sha256
-                 (base32
-                  "05rpzm72cgprd0ccr6lvx9hm8j8b5nkqi4avshlsyg7s3sdlcxjs")))))
+    (version "3.2")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                     (url "https://github.com/SELinuxProject/selinux")
+                     (commit version)))
+              (file-name (git-file-name "selinux" version))
+              (sha256
+               (base32
+                "03p3lmvrvkcvsmiczsjzhyfgxlxdkdyq0p8igv3s3hdak5n92jjn"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ; tests require checkpolicy, which requires libsepol
        #:test-target "test"
        #:make-flags
-       (let ((out (assoc-ref %outputs "out"))
-             (target ,(%current-target-system)))
+       (let ((out (assoc-ref %outputs "out")))
          (list (string-append "PREFIX=" out)
                (string-append "SHLIBDIR=" out "/lib")
                (string-append "MAN3DIR=" out "/share/man/man3")
                (string-append "MAN5DIR=" out "/share/man/man5")
                (string-append "MAN8DIR=" out "/share/man/man8")
+               (string-append "CFLAGS=-Wno-error")
                (string-append "LDFLAGS=-Wl,-rpath=" out "/lib")
-               (string-append "CC="
-                              (if target
-                                  (string-append (assoc-ref %build-inputs "cross-gcc")
-                                                 "/bin/" target "-gcc")
-                                  "gcc"))))
+               (string-append "CC=" ,(cc-for-target))))
        #:phases
        (modify-phases %standard-phases
          (delete 'configure)
          (add-after 'unpack 'enter-dir
-           (lambda _ (chdir ,name) #t))
+           (lambda _ (chdir ,name)))
          (add-after 'enter-dir 'portability
            (lambda _
              (substitute* "src/ibpkeys.c"
                (("#include \"ibpkey_internal.h\"" line)
                 (string-append line "\n#include <inttypes.h>\n"))
-               (("%#lx") "%#\" PRIx64 \""))
-             #t)))))
+               (("%#lx") "%#\" PRIx64 \"")))))))
     (native-inputs
-     `(("flex" ,flex)))
+     (list flex))
     (home-page "https://selinuxproject.org/")
     (synopsis "Library for manipulating SELinux policies")
     (description
@@ -106,23 +102,18 @@ boolean settings).")
     (arguments
      `(#:tests? #f ; there is no check target
        #:make-flags
-       (let ((out (assoc-ref %outputs "out"))
-             (target ,(%current-target-system)))
+       (let ((out (assoc-ref %outputs "out")))
          (list (string-append "PREFIX=" out)
                (string-append "LIBSEPOLA="
                               (assoc-ref %build-inputs "libsepol")
                               "/lib/libsepol.a")
-               (string-append "CC="
-                              (if target
-                                  (string-append (assoc-ref %build-inputs "cross-gcc")
-                                                 "/bin/" target "-gcc")
-                                  "gcc"))))
+               (string-append "CC=" ,(cc-for-target))))
        #:phases
        (modify-phases %standard-phases
          (delete 'configure)
          (delete 'portability)
          (add-after 'unpack 'enter-dir
-           (lambda _ (chdir ,name) #t)))))
+           (lambda _ (chdir ,name))))))
     (inputs
      `(("libsepol" ,libsepol)))
     (native-inputs
@@ -159,7 +150,7 @@ module into a binary representation.")
         `(modify-phases ,phases
            (delete 'portability)
            (replace 'enter-dir
-             (lambda _ (chdir ,name) #t))
+             (lambda _ (chdir ,name)))
            (add-after 'build 'pywrap
              (lambda* (#:key make-flags #:allow-other-keys)
                (apply invoke "make" "pywrap" make-flags)))
@@ -209,13 +200,12 @@ the core SELinux management utilities.")
         `(modify-phases ,phases
            (delete 'portability)
            (replace 'enter-dir
-             (lambda _ (chdir ,name) #t))
+             (lambda _ (chdir ,name)))
            (add-before 'install 'adjust-semanage-conf-location
              (lambda _
                (substitute* "src/Makefile"
                  (("DEFAULT_SEMANAGE_CONF_LOCATION=/etc")
-                  "DEFAULT_SEMANAGE_CONF_LOCATION=$(PREFIX)/etc"))
-               #t))
+                  "DEFAULT_SEMANAGE_CONF_LOCATION=$(PREFIX)/etc"))))
            (add-after 'build 'pywrap
              (lambda* (#:key make-flags #:allow-other-keys)
                (apply invoke "make" "pywrap" make-flags)))
@@ -256,7 +246,7 @@ binary policies.")
         `(modify-phases ,phases
            (delete 'portability)
            (replace 'enter-dir
-             (lambda _ (chdir ,name) #t))))))
+             (lambda _ (chdir ,name)))))))
     (inputs
      `(("libsepol" ,libsepol)))
     (native-inputs
@@ -279,7 +269,7 @@ binary policies.")
             `(modify-phases ,phases
                (delete 'portability)
                (replace 'enter-dir
-                 (lambda _ (chdir "python/sepolgen") #t))
+                 (lambda _ (chdir "python/sepolgen")))
                ;; By default all Python files would be installed to
                ;; $out/gnu/store/...-python-.../, so we override the
                ;; PACKAGEDIR to fix this.
@@ -301,8 +291,7 @@ binary policies.")
                                         (assoc-ref inputs "python"))
                                        "/site-packages/sepolgen")))
                      (substitute* "src/share/Makefile"
-                       (("\\$\\(DESTDIR\\)") (assoc-ref outputs "out"))))
-                   #t)))))))
+                       (("\\$\\(DESTDIR\\)") (assoc-ref outputs "out")))))))))))
     (inputs
      `(("python" ,python-wrapper)))
     (native-inputs '())
@@ -342,8 +331,7 @@ based on required access.")
          (add-after 'unpack 'set-SEPOL-variable
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "SEPOL"
-                     (string-append (assoc-ref inputs "libsepol")
-                                    "/lib/libsepol.a"))))
+                     (search-input-file inputs "/lib/libsepol.a"))))
          (add-after 'unpack 'remove-Werror
            (lambda _
              (substitute* "setup.py"
@@ -356,14 +344,11 @@ based on required access.")
                 (string-append "join(\"" (assoc-ref outputs "out") "/\"")))
              #t)))))
     (propagated-inputs
-     `(("python-networkx" ,python-networkx)))
+     (list python-networkx))
     (inputs
-     `(("libsepol" ,libsepol)
-       ("libselinux" ,libselinux)))
+     (list libsepol libselinux))
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)
-       ("swig" ,swig)))
+     (list bison flex swig))
     (home-page "https://github.com/TresysTechnology/setools")
     (synopsis "Tools for SELinux policy analysis")
     (description "SETools is a collection of graphical tools, command-line
@@ -379,7 +364,7 @@ tools, and libraries designed to facilitate SELinux policy analysis.")
      `(#:test-target "test"
        #:make-flags
        (let ((out (assoc-ref %outputs "out")))
-         (list "CC=gcc"
+         (list (string-append "CC=" ,(cc-for-target))
                (string-append "PREFIX=" out)
                (string-append "LOCALEDIR=" out "/share/locale")
                (string-append "BASHCOMPLETIONDIR=" out
@@ -401,9 +386,8 @@ tools, and libraries designed to facilitate SELinux policy analysis.")
        #:phases
        (modify-phases %standard-phases
          (delete 'configure)
-         (delete 'portability)
          (add-after 'unpack 'enter-dir
-           (lambda _ (chdir ,name) #t))
+           (lambda _ (chdir ,name)))
          (add-after 'enter-dir 'ignore-/usr-tests
            (lambda* (#:key inputs #:allow-other-keys)
              ;; Rewrite lookup paths for header files.
@@ -411,10 +395,9 @@ tools, and libraries designed to facilitate SELinux policy analysis.")
                             "setfiles/Makefile"
                             "run_init/Makefile")
                (("/usr(/include/security/pam_appl.h)" _ file)
-                (string-append (assoc-ref inputs "pam") file))
+                (search-input-file inputs file))
                (("/usr(/include/libaudit.h)" _ file)
-                (string-append (assoc-ref inputs "audit") file)))
-             #t)))))
+                (search-input-file inputs file))))))))
     (inputs
      `(("audit" ,audit)
        ("pam" ,linux-pam)
diff --git a/gnu/packages/sequoia.scm b/gnu/packages/sequoia.scm
index 2c68f43e36..a8d21ac1a4 100644
--- a/gnu/packages/sequoia.scm
+++ b/gnu/packages/sequoia.scm
@@ -19,12 +19,15 @@
 
 (define-module (gnu packages sequoia)
   #:use-module (guix build-system cargo)
+  #:use-module (guix build-system trivial)
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
+  #:use-module (guix gexp)
   #:use-module (guix utils)
   #:use-module (gnu packages)
+  #:use-module (gnu packages base)  ; glibc
   #:use-module (gnu packages check) ;; python-pytest
   #:use-module (gnu packages crates-io)
   #:use-module (gnu packages libffi) ;; python-cffi
@@ -35,186 +38,518 @@
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-xyz) ;; python-setuptools
   #:use-module (gnu packages rust)
-  #:use-module (gnu packages serialization)
-  #:use-module (gnu packages sqlite)
   #:use-module (gnu packages tls))
 
-(define-public sequoia
+(define-public rust-sequoia-autocrypt-0.23
   (package
-    (name "sequoia")
-    (version "1.1.0")
+    (name "rust-sequoia-autocrypt")
+    (version "0.23.1")
     (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://gitlab.com/sequoia-pgp/sequoia.git")
-             (commit (string-append "openpgp/v" version))))
-       (sha256
-        (base32 "0knkm0nw1h4ww51vks4jnnp1yc45llfi7j0i70f6vf2bcknnbmci"))
-       (file-name (git-file-name name version))))
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "sequoia-autocrypt" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32 "0skj0dv15341v470g6w5pggsl0iy27qb8h24rr8k6rq7vxdjxl7g"))))
+    (build-system cargo-build-system)
+    (arguments
+      `(#:skip-build? #t
+        #:cargo-inputs
+        (("rust-base64" ,rust-base64-0.13)
+         ("rust-sequoia-openpgp" ,rust-sequoia-openpgp-1))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'remove-other-crypto-features
+           (lambda _
+             (substitute* "Cargo.toml"
+               (("^crypto-cng =" line) (string-append "# " line))
+               (("^crypto-rust =" line) (string-append "# " line))))))))
+    (home-page "https://sequoia-pgp.org/")
+    (synopsis "Deal with Autocrypt encoded data")
+    (description "This crate implements low-level functionality like encoding
+and decoding of Autocrypt headers and setup messages.  Note: Autocrypt is more
+than just headers; it requires tight integration with the MUA.")
+    (license license:lgpl2.0+)))
+
+(define-public rust-sequoia-ipc-0.26
+  (package
+    (name "rust-sequoia-ipc")
+    (version "0.26.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "sequoia-ipc" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32 "0xyhz55g1igzjw46f667kqmbbk7pgqy2zf5p13zspr6bwv39s1yk"))))
+    (build-system cargo-build-system)
+    (arguments
+      `(#:skip-build? #t
+        #:cargo-inputs
+        (("rust-anyhow" ,rust-anyhow-1)
+         ("rust-buffered-reader" ,rust-buffered-reader-1)
+         ("rust-capnp-rpc" ,rust-capnp-rpc-0.13)
+         ("rust-ctor" ,rust-ctor-0.1)
+         ("rust-dirs" ,rust-dirs-2)
+         ("rust-fs2" ,rust-fs2-0.4)
+         ("rust-futures" ,rust-futures-0.3)
+         ("rust-lalrpop" ,rust-lalrpop-0.19)
+         ("rust-lalrpop-util" ,rust-lalrpop-util-0.19)
+         ("rust-lazy-static" ,rust-lazy-static-1)
+         ("rust-libc" ,rust-libc-0.2)
+         ("rust-memsec" ,rust-memsec-0.6)
+         ("rust-rand" ,rust-rand-0.7)
+         ("rust-sequoia-openpgp" ,rust-sequoia-openpgp-1)
+         ("rust-socket2" ,rust-socket2-0.3)
+         ("rust-tempfile" ,rust-tempfile-3)
+         ("rust-thiserror" ,rust-thiserror-1)
+         ("rust-tokio" ,rust-tokio-0.2)
+         ("rust-tokio-util" ,rust-tokio-util-0.3)
+         ("rust-winapi" ,rust-winapi-0.3))
+        #:cargo-development-inputs
+        (("rust-clap" ,rust-clap-2)
+         ("rust-quickcheck" ,rust-quickcheck-0.9))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'remove-other-crypto-features
+           (lambda _
+             (substitute* "Cargo.toml"
+               (("^crypto-cng =" line) (string-append "# " line))
+               (("^crypto-rust =" line) (string-append "# " line))))))))
+    (home-page "https://sequoia-pgp.org/")
+    (synopsis "Interprocess communication infrastructure for Sequoia")
+    (description "Interprocess communication infrastructure for Sequoia")
+    (license license:lgpl2.0+)))
+
+(define-public rust-sequoia-net-0.23
+  (package
+    (name "rust-sequoia-net")
+    (version "0.23.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "sequoia-net" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32 "05gv053zqnb00mrai5hva3i4909hn77bnh4z1g4b29cw5qb52cbl"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-anyhow" ,rust-anyhow-1)
+        ("rust-futures-util" ,rust-futures-util-0.3)
+        ("rust-http" ,rust-http-0.2)
+        ("rust-hyper" ,rust-hyper-0.13)
+        ("rust-hyper-tls" ,rust-hyper-tls-0.4)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-native-tls" ,rust-native-tls-0.2)
+        ("rust-percent-encoding" ,rust-percent-encoding-2)
+        ("rust-sequoia-openpgp" ,rust-sequoia-openpgp-1)
+        ("rust-tempfile" ,rust-tempfile-3)
+        ("rust-thiserror" ,rust-thiserror-1)
+        ("rust-url" ,rust-url-2)
+        ("rust-zbase32" ,rust-zbase32-0.1))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'remove-other-crypto-features
+           (lambda _
+             (substitute* "Cargo.toml"
+               (("^crypto-cng =" line) (string-append "# " line))
+               (("^crypto-rust =" line) (string-append "# " line))))))))
+    (home-page "https://sequoia-pgp.org/")
+    (synopsis "Discover and publish OpenPGP certificates over the network")
+    (description "This package provides a crate to access keyservers using the
+HKP protocol, and searching and publishing Web Key Directories.")
+    (license license:lgpl2.0+)))
+
+(define-public rust-sequoia-openpgp-1
+  (package
+    (name "rust-sequoia-openpgp")
+    (version "1.6.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "sequoia-openpgp" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32 "1mdprsijszkg2j6jk1iq7q1z9yikq598y12m5zbv94fs37xlx3qm"))
+        (modules '((guix build utils)))
+        (snippet
+         ;; Remove dependencies on rust-crypto and win32-cng
+         '(let* ((other-crypto-pkgs
+                  (list ;; rust-crypto
+                   "aes" "block-modes" "block-padding" "blowfish" "cast5"
+                   "cipher" "des" "digest" "eax" "ed25519-dalek"
+                   "generic-array" "idea" "md-5" "num-bigint-dig" "rand"
+                   "ripemd160" "rsa" "sha-1" "sha2" "twofish" "typenum"
+                   "x25519-dalek" "p256" "rand_core" "rand_core" "ecdsa"
+                   ;; win32-cng
+                   "eax" "winapi" "win-crypto-ng" "ed25519-dalek"
+                   "num-bigint-dig"))
+                 (pkgs-pattern (pk (string-join
+                                    (list "^\\[dependencies\\.("
+                                          (string-join other-crypto-pkgs "|")
+                                          ")\\]")
+                                    ""))))
+            (substitute* "Cargo.toml"
+              ((pkgs-pattern line name) (string-append "[off." name "]"))
+              (("^crypto-cng =" line) (string-append "# " line))
+              (("^crypto-rust =" line) (string-append "# " line))
+              (("^\\[(target\\.\"cfg\\(windows\\))" line name)
+               (string-append "[off." name)))))))
     (build-system cargo-build-system)
-    (outputs '("out" "python"))
     (native-inputs
-     `(("clang" ,clang)
-       ("pkg-config" ,pkg-config)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)
-       ("python-wrapper" ,python-wrapper)))
+     (list clang pkg-config))
     (inputs
-     `(("capnproto" ,capnproto)
-       ("gmp" ,gmp)
-       ("nettle" ,nettle)
-       ("openssl" ,openssl)
-       ("python" ,python)
-       ("python-cffi" ,python-cffi)
-       ("sqlite" ,sqlite)))
+     (list gmp nettle))
     (arguments
-     `(#:tests? #f ;; building the tests requires 9.7GB total
-       #:rust ,rust-1.46
+     `(#:skip-build? #t
        #:cargo-inputs
        (("rust-anyhow" ,rust-anyhow-1)
         ("rust-backtrace" ,rust-backtrace-0.3)
         ("rust-base64" ,rust-base64-0.13)
-        ;;("rust-buffered-reader" included
+        ("rust-buffered-reader" ,rust-buffered-reader-1)
         ("rust-bzip2" ,rust-bzip2-0.4)
-        ("rust-capnp" ,rust-capnp-0.13)
-        ("rust-capnp-rpc" ,rust-capnp-rpc-0.13)
-        ("rust-capnpc" ,rust-capnpc-0.13)
-        ("rust-chrono" ,rust-chrono-0.4)  ;; for sqv, sop
-        ("rust-clap" ,rust-clap-2)        ;; for sqv
-        ("rust-colored" ,rust-colored-1.9.1)
-        ("rust-crossterm" ,rust-crossterm-0.13)
-        ("rust-ctor" ,rust-ctor-0.1)
-        ("rust-dirs" ,rust-dirs-2)
+        ("rust-chrono" ,rust-chrono-0.4)
         ("rust-dyn-clone" ,rust-dyn-clone-1)
-        ("rust-ed25519-dalek" ,rust-ed25519-dalek-1)
-        ("rust-eax" ,rust-eax-0.3)
-        ;;("rust-failure" included
-        ("rust-filetime" ,rust-filetime-0.2)
         ("rust-flate2" ,rust-flate2-1)
-        ("rust-fs2" ,rust-fs2-0.4)
-        ("rust-futures" ,rust-futures-0.3)
-        ("rust-futures-util" ,rust-futures-util-0.3)
-        ("rust-http" ,rust-http-0.2)
-        ("rust-hyper" ,rust-hyper-0.13)
-        ("rust-hyper-tls" ,rust-hyper-tls-0.4)
         ("rust-idna" ,rust-idna-0.2)
-        ("rust-itertools" ,rust-itertools-0.9) ;; for sq
+        ("rust-itertools" ,rust-itertools-0.10)
         ("rust-lalrpop" ,rust-lalrpop-0.19)
         ("rust-lalrpop-util" ,rust-lalrpop-util-0.19)
-        ("rust-lazy-static" ,rust-lazy-static-1)
-        ("rust-libc" ,rust-libc-0.2)
+        ("rust-lazy-static" ,rust-lazy-static-1)  ;; 1.4.0
+        ("rust-libc" ,rust-libc-0.2)  ;; 0.2.66
         ("rust-memsec" ,rust-memsec-0.6)
-        ("rust-native-tls" ,rust-native-tls-0.2)
         ("rust-nettle" ,rust-nettle-7)
-        ("rust-num-bigint-dig" ,rust-num-bigint-dig-0.6)
-        ("rust-parity-tokio-ipc" ,rust-parity-tokio-ipc-0.4)
-        ("rust-percent-encoding" ,rust-percent-encoding-2)
-        ("rust-prettytable-rs" ,rust-prettytable-rs-0.8)  ;; for sq
-        ("rust-proc-macro2" ,rust-proc-macro2-1)
-        ("rust-quickcheck" ,rust-quickcheck-0.9)
-        ("rust-rand" ,rust-rand-0.7)
+        ("rust-plotters" ,rust-plotters-0.3)
         ("rust-regex" ,rust-regex-1)
-        ("rust-rusqlite" ,rust-rusqlite-0.24)
+        ("rust-regex-syntax" ,rust-regex-syntax-0.6)
         ("rust-sha1collisiondetection" ,rust-sha1collisiondetection-0.2)
-        ("rust-socket2", rust-socket2-0.3)
-        ("rust-structopt" ,rust-structopt-0.3) ;; for sop
-        ("rust-tempfile" ,rust-tempfile-3) ;; for sq
         ("rust-thiserror" ,rust-thiserror-1)
-        ("rust-tokio" ,rust-tokio-0.2)
-        ("rust-tokio-core" ,rust-tokio-core-0.1)
         ("rust-unicode-normalization" ,rust-unicode-normalization-0.1)
-        ("rust-url" ,rust-url-2)
-        ("rust-win-crypto-ng" ,rust-win-crypto-ng-0.4)
-        ("rust-winapi" ,rust-winapi-0.3)
-        ("rust-zbase32" ,rust-zbase32-0.1))
+        ("rust-xxhash-rust" ,rust-xxhash-rust-0.8))
        #:cargo-development-inputs
-       (("rust-assert-cli" ,rust-assert-cli-0.6) ;; dev-dep for for sq, sqv
-        ("rust-bindgen" ,rust-bindgen-0.51) ;; FIXME for nettle-sys and rusqlite
-        ;;("rust-lalrpop" ,rust-lalrpop-0.19)
+       ;; keep the development-inputs to allow running tests easily
+       (("rust-criterion" ,rust-criterion-0.3)
         ("rust-quickcheck" ,rust-quickcheck-0.9)
         ("rust-rand" ,rust-rand-0.7)
-        ("rust-rpassword" ,rust-rpassword-5))
+        ("rust-rpassword" ,rust-rpassword-5))))
+    (home-page "https://sequoia-pgp.org/")
+    (synopsis "OpenPGP data types and associated machinery")
+    (description "This crate aims to provide a complete implementation of
+OpenPGP as defined by RFC 4880 as well as some extensions (e.g., RFC 6637,
+which describes ECC cryptography) for OpenPGP.  This includes support for
+unbuffered message processing.
+
+A few features that the OpenPGP community considers to be deprecated (e.g.,
+version 3 compatibility) have been left out.  The developers have also updated
+some OpenPGP defaults to avoid foot guns (e.g., they selected modern algorithm
+defaults).
+
+This Guix package is built to use the nettle cryptographic library.")
+    (license license:lgpl2.0+)))
+
+(define-public rust-sequoia-openpgp-0.9
+  (package
+    (inherit rust-sequoia-openpgp-1)
+    (name "rust-sequoia-openpgp")
+    (version "0.9.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "sequoia-openpgp" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "007h2pi7lcph5jf5bxjydm7hjwjai33yk6dic3cxknki22lxlkfw"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-base64" ,rust-base64-0.9)
+        ("rust-buffered-reader" ,rust-buffered-reader-0.9)
+        ("rust-bzip2" ,rust-bzip2-0.3)
+        ("rust-failure" ,rust-failure-0.1)
+        ("rust-flate2" ,rust-flate2-1)
+        ("rust-idna" ,rust-idna-0.1)
+        ("rust-lalrpop" ,rust-lalrpop-0.17)
+        ("rust-lalrpop-util" ,rust-lalrpop-util-0.17)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-memsec" ,rust-memsec-0.5)
+        ("rust-nettle" ,rust-nettle-5)
+        ("rust-quickcheck" ,rust-quickcheck-0.8)
+        ("rust-rand" ,rust-rand-0.6)
+        ("rust-sequoia-rfc2822" ,rust-sequoia-rfc2822-0.9)
+        ("rust-time" ,rust-time-0.1))))))
+
+(define-public rust-sequoia-rfc2822-0.9
+  (package
+    (name "rust-sequoia-rfc2822")
+    (version "0.9.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "sequoia-rfc2822" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1aj34i6862718m162rqfv69fkmvdw063s6ws7hbp42n73gb08p5c"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-failure" ,rust-failure-0.1)
+        ("rust-lalrpop" ,rust-lalrpop-0.17)
+        ("rust-lalrpop-util" ,rust-lalrpop-util-0.17))))
+    (home-page "https://sequoia-pgp.org/")
+    (synopsis "RFC 2822 name-addr parser")
+    (description "Currently, this crate only recognizes the RFC 2822 name-addr
+and addr-spec productions, i.e., things of the form: @code{Name (Comment)
+<email@@example.org>} and @code{email@@example.org}
+
+Although the above appear simple to parse, RFC 2822's whitespace and comment
+rules are rather complex.  This crate implements the whole grammar." )
+    (license license:gpl3)))
+
+(define-public sequoia-sq
+  (package
+    (name "sequoia-sq")
+    (version "0.25.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "sequoia-sq" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32 "0j26vpp98i7zwwhqsvwj0zknj4s0s0ilfqpynj1vgd5laanhyr0d"))))
+    (build-system cargo-build-system)
+    (inputs
+     (list nettle openssl))
+    (native-inputs
+     (list clang pkg-config))
+    (arguments
+     `(#:tests? #f  ;; tests require data-files not provided in the package
+       #:install-source? #f
+       #:cargo-inputs
+       (("rust-anyhow" ,rust-anyhow-1)
+        ("rust-buffered-reader" ,rust-buffered-reader-1)
+        ("rust-chrono" ,rust-chrono-0.4)
+        ("rust-clap" ,rust-clap-2)
+        ("rust-clap" ,rust-clap-2)
+        ("rust-itertools" ,rust-itertools-0.9)
+        ("rust-rpassword" ,rust-rpassword-5)
+        ("rust-sequoia-autocrypt" ,rust-sequoia-autocrypt-0.23)
+        ("rust-sequoia-net" ,rust-sequoia-net-0.23)
+        ("rust-sequoia-openpgp" ,rust-sequoia-openpgp-1)
+        ("rust-tempfile" ,rust-tempfile-3)
+        ("rust-term-size" ,rust-term-size-0.3)
+        ("rust-tokio" ,rust-tokio-0.2))
+       #:cargo-development-inputs
+       (("rust-assert-cli" ,rust-assert-cli-0.6))
        #:phases
        (modify-phases %standard-phases
-         ;; Run make instead of using the rust build system, as
-         ;; suggested by the installation instructions
-         (replace 'build (lambda _ (invoke "make" "build-release") #t))
-         (delete 'package)  ;; cargo can't package a multi-crate workspace
-         (replace 'check
-           (lambda* (#:key tests?  #:allow-other-keys)
-             (if tests?
-                 (invoke "make" "check")
-                 #t)))
-         (replace 'install (lambda _ (invoke "make" "install") #t))
-         (add-after 'unpack 'fix-rand-dependency
-           (lambda _
-             (substitute* "ipc/Cargo.toml"
-               ;; required: enable rand::rngs::OsRng in rand >= 0.8
-               (("(^rand =.*,) default-features = false(.*)" _ a b)
-                (string-append a " features = [\"getrandom\"]" b)))
-             #t))
-         (add-after 'unpack 'fix-permissions
+         (add-after 'unpack 'remove-other-crypto-features
            (lambda _
-             (chmod "sq/src/sq-usage.rs" #o644)
-             (chmod "sqv/src/sqv-usage.rs" #o644)
-             #t))
-         (add-after 'unpack 'fix-environment
-           (lambda* (#:key outputs #:allow-other-keys)
-             ;; adjust prefix
-             (setenv "PREFIX" (assoc-ref outputs "out"))
-             ;; fix install script detection
-             (setenv "INSTALL" "install")
-             #t))
-         (add-after 'unpack 'fix-fo-python-output
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out"))
-                   (pyout (assoc-ref outputs "python")))
-               (substitute* "ffi/lang/python/Makefile"
-                 ;; adjust prefix for python package
-                 (("PREFIX\\s*\\??=.*")
-                  (string-append "PREFIX = " pyout "\n"))
-                 ;; fix rpath to include the main package
-                 (("\\WLDFLAGS=" text)
-                  (string-append text "'-Wl,-rpath=" out "/lib '"))
-                 ;; make setuptools install into the prefix, see
-                 ;; guix/build/python-build-system.scm for explanation
-                 (("\\ssetup.py\\s+install\\s")
-                  " setup.py install --root=/ --single-version-externally-managed "))
-               #t)))
-         (add-after 'unpack 'fix-pkgconfig-file-substitutes
-           ;; preempt Makefiles replacing PREFIX by pwd
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out")))
-               (substitute* "ffi/sequoia.pc.in"
-                 (("PREFIX") out))
-               (substitute* "openpgp-ffi/sequoia-openpgp.pc.in"
-                 (("PREFIX") out))
-               #t)))
-         (add-after 'unpack 'keep-SOURCE_DATE_EPOCH
+             (substitute* "Cargo.toml"
+               (("^crypto-cng =" line) (string-append "# " line))
+               (("^crypto-rust =" line) (string-append "# " line))))))))
+    (home-page "https://sequoia-pgp.org/")
+    (synopsis "Command-line frontend for Sequoia OpenPGP")
+    (description "This package provides the command-line frontend for Sequoia
+OpenPGP.
+
+This Guix package is built to use the nettle cryptographic library.")
+    (license license:lgpl2.0+)))
+
+(define-public sequoia-sqv
+  (package
+    (name "sequoia-sqv")
+    (version "1.0.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "sequoia-sqv" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32 "0nrfjn64fm038x5dssipf7jxi27z741m5n5a7zsa9768zab1hr9d"))))
+    (build-system cargo-build-system)
+    (inputs
+     (list nettle openssl))
+    (native-inputs
+     (list clang pkg-config))
+    (arguments
+     `(#:tests? #f  ;; tests require data-files not provided in the package
+       #:install-source? #f
+       #:cargo-inputs
+       (("rust-anyhow" ,rust-anyhow-1)
+        ("rust-chrono" ,rust-chrono-0.4)
+        ("rust-clap" ,rust-clap-2)
+        ("rust-clap" ,rust-clap-2)
+        ("rust-sequoia-openpgp" ,rust-sequoia-openpgp-1))
+       #:cargo-development-inputs
+       (("rust-assert-cli" ,rust-assert-cli-0.6))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'remove-other-crypto-features
            (lambda _
-               ;; preempt Makefiles replacing SOURCE_DATE_EPOCH
-               (substitute* "Makefile"
-                 (("SOURCE_DATE_EPOCH\\s=" line)
-                  (string-append "#" line)))
-             #t))
-         (add-after 'unpack 'set-missing-env-vars
-           (lambda* (#:key inputs #:allow-other-keys)
-             ;; FIXME: why do we need to set this here?
-             (setenv "LIBCLANG_PATH"
-                     (string-append (assoc-ref inputs "clang") "/lib"))
-             #t))
-         (add-after 'unpack 'unpin-deps
+             (substitute* "Cargo.toml"
+               (("^crypto-cng =" line) (string-append "# " line))
+               (("^crypto-rust =" line) (string-append "# " line))))))))
+    (home-page "https://sequoia-pgp.org/")
+    (synopsis "Simple OpenPGP signature verification program")
+    (description "@code{sqv} verifies detached OpenPGP signatures.  It is a
+replacement for @code{gpgv}.  Unlike @code{gpgv}, it can take additional
+constraints on the signature into account.
+
+This Guix package is built to use the nettle cryptographic library.")
+    (license license:lgpl2.0+)))
+
+(define (sequoia-package-origin version)
+  (origin
+    (method git-fetch)
+    (uri (git-reference
+          (url "https://gitlab.com/sequoia-pgp/sequoia.git")
+          (commit (string-append "openpgp/v" version))))
+    (sha256
+     (base32 "1cq1xgvllbpii5hfl3wlia2ayznpvhv8lq8g8ygwxga86ijg98lq"))
+    (file-name (git-file-name "sequoia" version))
+    (patches (search-patches "libsequoia-remove-store.patch"
+                             "libsequoia-fix-ffi-Makefile.patch"))))
+
+(define-public libsequoia
+  (package
+    (name "libsequoia")
+    (version "0.22.0")
+    (source (sequoia-package-origin "1.6.0"))
+    (build-system cargo-build-system)
+    (outputs '("out" "python"))
+    (native-inputs
+     (list clang pkg-config python-pytest python-pytest-runner
+           python-wrapper))
+    (inputs
+     (list gmp nettle openssl python python-cffi))
+    (arguments
+     (list
+      #:tests? #f ;; TODO make python tests find the shared object file
+      #:cargo-inputs
+      `(("rust-anyhow" ,rust-anyhow-1)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-memsec" ,rust-memsec-0.6)
+        ("rust-native-tls" ,rust-native-tls-0.2)
+        ("rust-proc-macro2" ,rust-proc-macro2-1)  ;; for ffi-macros
+        ("rust-quote" ,rust-quote-1)  ;; for ffi-macros
+        ("rust-sequoia-ipc" ,rust-sequoia-ipc-0.26)
+        ("rust-sequoia-net" ,rust-sequoia-net-0.23)
+        ("rust-sequoia-openpgp" ,rust-sequoia-openpgp-1)
+        ("rust-sha2" ,rust-sha2-0.8)  ;; for ffi-macros
+        ("rust-tokio" ,rust-tokio-1.8))
+      #:cargo-development-inputs
+      `(("rust-filetime" ,rust-filetime-0.2))
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'configure 'set-PREFIX
+            (lambda _
+              (setenv "PREFIX" #$output)))
+          (replace 'build
+            (lambda _
+              (invoke "make" "-C" "openpgp-ffi" "build-release")
+              (invoke "make" "-C" "ffi" "build-release")))
+          (delete 'package)  ;; cargo can't package a multi-crate workspace
+          (replace 'check
+            (lambda* (#:key tests?  #:allow-other-keys)
+              (when tests?
+                (begin
+                  (invoke "make" "-C" "openpgp-ffi" "check")
+                  (invoke "make" "-C" "ffi" "check")))))
+          (replace 'install
+            (lambda _
+              (invoke "make" "-C" "openpgp-ffi" "install")
+              (invoke "make" "-C" "ffi" "install")))
+          (add-after 'configure 'fix-build-environment
+            (lambda _
+              (delete-file "Cargo.toml")
+              (symlink "../.cargo" "openpgp-ffi/.cargo")
+              (symlink "../.cargo" "ffi/.cargo")
+              (for-each delete-file-recursively
+                       (find-files "guix-vendor" "^sequoia-[0-9]+\\.*"
+                                   #:directories? #t))))
+          (add-after 'unpack 'fix-for-python-output
+            (lambda _
+              (substitute* "ffi/lang/python/Makefile"
+                ;; adjust prefix for python package
+                (("PREFIX\\s*\\??=.*")
+                (string-append "PREFIX = " (pk #$output:python) "\n"))
+                ;; fix rpath to include the main package
+                (("\\WLDFLAGS=" text)
+                 (string-append text "'-Wl,-rpath=" #$output "/lib '"))
+                ;; make setuptools install into the prefix, see
+                ;; guix/build/python-build-system.scm for explanation
+               (("\\ssetup.py\\s+install\\s")
+                " setup.py install --root=/ --single-version-externally-managed "))))
+          (add-after 'unpack 'fix-Makefiles
+            (lambda _
+              (substitute* '("openpgp-ffi/Makefile")
+                (("^check-headers: force-build") "check-headers:"))))
+          (add-after 'unpack 'remove-other-crypto-features
            (lambda _
-             ;; As the comment in that file explains, upstream encourages
-             ;; unpinning, as the pinned version is only to make sure the crate
-             ;; compiles on older versions of rustc
-             (substitute* '("openpgp/Cargo.toml" "sq/Cargo.toml")
-               (("= \"=") "= \""))
-             #t)))))
+             (substitute* '("openpgp-ffi/Cargo.toml" "ffi/Cargo.toml")
+               (("^crypto-cng =" line) (string-append "# " line))
+               (("^crypto-rust =" line) (string-append "# " line)))))
+          (add-after 'unpack 'fix-missing-feature
+            (lambda _
+              (substitute* '("ffi/Cargo.toml")
+               (("^(tokio = .* features = \\[)" line)
+                (string-append line "\"net\", ")))))
+          (add-after 'unpack 'unbundle-crates
+            (lambda _
+              (substitute* '("openpgp-ffi/Cargo.toml" "ffi/Cargo.toml")
+                (("path = \"\\.\\./(openpgp|store|net|ipc)\",") "")))))))
+    (home-page "https://sequoia-pgp.org")
+    (synopsis "C/FFI interfaces for Sequoia-PGP")
+    (description "This package provides a C and FFI interface to both the
+low-level and a high-level API of Sequoia-PGP.
+
+Use with caution: This is an \"unofficial\" package, which are not officially
+released, but part of the Sequoia-PGP v1.6.0 archive.  So this package might
+even go away.")
+    (license license:lgpl2.0+)))
+
+(define-public sequoia
+  (package
+    (name "sequoia")
+    (version "1.6.0")
+    (source #f)
+    (build-system trivial-build-system)
+    (outputs '("out" "python"))
+    (inputs
+     (list glibc ;; for ldconfig in make-dynamic-linker-cache
+           libsequoia
+           `(,libsequoia "python")
+           sequoia-sq
+           sequoia-sqv))
+    (arguments
+     (list
+      #:modules '((guix build utils) (guix build gnu-build-system)
+                  (guix build gremlin) (guix elf))
+      #:builder
+      #~(begin
+          (use-modules (guix build utils) (guix build gnu-build-system))
+          (let ((make-dynamic-linker-cache
+                 (assoc-ref %standard-phases 'make-dynamic-linker-cache))
+                (ld.so.cache
+                 (string-append #$output "/etc/ld.so.cache")))
+            (copy-recursively #$libsequoia #$output)
+            (copy-recursively #$sequoia-sq #$output)
+            (delete-file ld.so.cache)
+            (copy-recursively #$sequoia-sqv #$output)
+            (delete-file ld.so.cache)
+            (copy-recursively #$libsequoia:python #$output:python)
+           (setenv "PATH"
+                   (string-append (getenv "PATH") ":" #$glibc "/sbin"))
+           (make-dynamic-linker-cache #:outputs %outputs)))))
     (home-page "https://sequoia-pgp.org")
-    (synopsis "New OpenPGP implementation")
-    (description "Sequoia is a new OpenPGP implementation.  It consists of
-several crates, providing both a low-level and a high-level API for dealing
-with OpenPGP data.")
-    (license license:gpl2+)))
+    (synopsis "New OpenPGP implementation (meta-package)")
+    (description "Sequoia is a new OpenPGP implementation, written in Rust,
+consisting of several Rust crates/packages.  This Guix meta-package combines
+these packages into a single one for convenience.  Anyhow, you should not
+depend other packages on this one avoid excessive compile-times for users.")
+    (license license:lgpl2.0+)))
diff --git a/gnu/packages/serialization.scm b/gnu/packages/serialization.scm
index 196141ace8..5cf39ac7f4 100644
--- a/gnu/packages/serialization.scm
+++ b/gnu/packages/serialization.scm
@@ -3,13 +3,14 @@
 ;;; Copyright © 2016 Lukas Gradl <lgradl@openmailbox.org>
 ;;; Copyright © 2016 David Craven <david@craven.ch>
 ;;; Copyright © 2016, 2019, 2020 Marius Bakke <mbakke@fastmail.com>
-;;; Copyright © 2016, 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2018, 2019, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Corentin Bocquillon <corentin@nybble.fr>
 ;;; Copyright © 2017 Gregor Giesen <giesen@zaehlwerk.net>
 ;;; Copyright © 2017 Frederick M. Muriithi <fredmanglis@gmail.com>
 ;;; Copyright © 2017 Nikita <nikita@n0.is>
 ;;; Copyright © 2017, 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Joshua Sierles, Nextjournal <joshua@nextjournal.com>
+;;; Copyright © 2020 Martin Becze <mjbecze@riseup.net>
 ;;; Copyright © 2020 Alexandros Theodotou <alex@zrythm.org>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -31,13 +32,17 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix hg-download)
   #:use-module (guix git-download)
   #:use-module (guix utils)
   #:use-module (guix build-system cmake)
+  #:use-module (guix build-system copy)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system python)
   #:use-module (gnu packages)
   #:use-module (gnu packages autotools)
+  #:use-module (gnu packages base)
+  #:use-module (gnu packages bash)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
@@ -72,8 +77,7 @@
          (add-after 'unpack 'chdir
            (lambda _ (chdir "lang/c++"))))))
     (inputs
-     `(("boost" ,boost)
-       ("snappy" ,snappy)))
+     (list boost snappy))
     (home-page "https://avro.apache.org/")
     (synopsis "Data serialization system")
     (description "Apache Avro is a data serialization system.  Avro provides:
@@ -107,8 +111,7 @@ implement RPC protocols.")
              (let ((gcc (assoc-ref inputs  "gcc")))
                (setenv "CPLUS_INCLUDE_PATH"
                        (string-join
-                        (cons* (string-append (assoc-ref inputs "libcxx+libcxxabi")
-                                              "/include/c++/v1")
+                        (cons* (search-input-directory inputs "include/c++/v1")
                                ;; Hide GCC's C++ headers so that they do not interfere with
                                ;; the Clang headers.
                                (delete (string-append gcc "/include/c++")
@@ -156,7 +159,7 @@ implement RPC protocols.")
                (mkdir-p doc)
                (copy-recursively "doc/html" doc)))))))
     (native-inputs
-     `(("doxygen" ,doxygen)))
+     (list doxygen))
     (home-page "https://uscilab.github.io/cereal/")
     (synopsis "C++11 library for serialization")
     (description
@@ -186,10 +189,9 @@ such as compact binary encodings, XML, or JSON.")
         (base32 "0yzhq50ijvwrfkr97knhvn54lj3f4hr3zy39yq8wpf6xll94s4bf"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("googletest" ,googletest-1.8)
-       ("pkg-config" ,pkg-config)))
+     (list googletest-1.8 pkg-config))
     (propagated-inputs
-     `(("zlib" ,zlib))) ;; Msgpack installs two headers (zbuffer.h,
+     (list zlib)) ;; Msgpack installs two headers (zbuffer.h,
     ;; zbuffer.hpp) which #include <zlib.h>.  However, 'guix gc --references'
     ;; does not detect a store reference to zlib since these headers are not
     ;; compiled.
@@ -222,7 +224,7 @@ serialization.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
-     `(("libtool" ,libtool)))
+     (list libtool))
     (home-page "https://github.com/tarruda/libmpack")
     (synopsis "Small binary serialization library")
     (description "Libmpack is a small binary serialization and RPC library
@@ -274,7 +276,7 @@ that implements both the msgpack and msgpack-rpc specifications.")
                                "mpack-src")
              #t)))))
     (inputs
-     `(("lua" ,lua)))
+     (list lua))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("libmpack" ,(package-source libmpack))))
@@ -376,9 +378,9 @@ that implements both the msgpack and msgpack-rpc specifications.")
              (setenv "CC" "gcc")
              (invoke "make" "test"))))))
     (inputs
-     `(("libyaml" ,libyaml)))
+     (list libyaml))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "C library for reading and writing YAML")
     (description
      "LibCYAML is a C library written in ISO C11 for reading and writing
@@ -406,7 +408,7 @@ in which the loaded data is arranged in memory.")
     (arguments
      '(#:configure-flags '("-DYAML_BUILD_SHARED_LIBS=ON")))
     (native-inputs
-     `(("python" ,python)))
+     (list python))
     (home-page "https://github.com/jbeder/yaml-cpp")
     (synopsis "YAML parser and emitter in C++")
     (description "YAML parser and emitter in C++ matching the YAML 1.2 spec.")
@@ -415,16 +417,17 @@ in which the loaded data is arranged in memory.")
 (define-public jsoncpp
   (package
     (name "jsoncpp")
-    (version "1.9.2")
+    (version "1.9.4")
     (home-page "https://github.com/open-source-parsers/jsoncpp")
     (source (origin
               (method git-fetch)
               (uri (git-reference (url home-page) (commit version)))
               (file-name (git-file-name name version))
-              (patches (search-patches "jsoncpp-fix-inverted-case.patch"))
+              (patches
+               (search-patches "jsoncpp-pkg-config-version.patch"))
               (sha256
                (base32
-                "037d1b1qdmn3rksmn1j71j26bv4hkjv7sn7da261k853xb5899sg"))))
+                "0qnx5y6c90fphl9mj9d20j2dfgy6s5yr5l0xnzid0vh71zrp6jwv"))))
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags '("-DBUILD_SHARED_LIBS:BOOL=YES"
@@ -458,6 +461,51 @@ it a convenient format to store user input files.")
                (base32
                 "1180ln8blrb0mwzpcf78k49hlki6di65q77rsvglf83kfcyh4d7z"))))))
 
+(define-public json.sh
+  (let ((commit "0d5e5c77365f63809bf6e77ef44a1f34b0e05840") ;no releases
+        (revision "1"))
+    (package
+      (name "json.sh")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/dominictarr/JSON.sh")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "14lxvp5xbdk0dcwkjbdp098z1108j8z48zaibndh4i731kkcz43i"))))
+      (build-system copy-build-system)
+      (arguments
+       `(#:install-plan '(("JSON.sh" "bin/"))
+         #:phases
+         (modify-phases %standard-phases
+           (add-before 'install 'check
+             (lambda* (#:key tests? #:allow-other-keys)
+               (when tests? (invoke "./all-tests.sh"))
+               #t))
+           (add-after 'install 'wrap-program
+             (lambda* (#:key inputs outputs #:allow-other-keys)
+               (wrap-program (string-append (assoc-ref outputs "out") "/bin/JSON.sh")
+                 `("PATH" ":" prefix
+                   (,(string-join
+                     (map (lambda (in) (string-append (assoc-ref inputs in) "/bin"))
+                          '("grep" "sed"))
+                      ":"))))
+                #t)))))
+      (inputs
+       (list bash-minimal grep sed))
+      (synopsis "Pipeable JSON parser written in shell")
+      (description
+        "This package provides a JSON parser written in shell, compatible with
+ash, Bash, Dash and Zsh.  Pipe JSON to it, and it traverses the JSON objects
+and prints out the path to the current object (as a JSON array) and then the
+object, without whitespace.")
+      (home-page "https://github.com/dominictarr/JSON.sh")
+      (license (list license:expat license:asl2.0))))) ;dual-licensed
+
 (define-public capnproto
   (package
     (name "capnproto")
@@ -508,7 +556,7 @@ RPC system.  Think JSON, except binary.  Or think Protocol Buffers, except faste
          (base32
           "1fj4554msq0rrz14snbj908dzqj46gh7jg9w9j0akn2b7q911m5a"))))
     (build-system gnu-build-system)
-    (native-inputs `(("perl" ,perl)))
+    (native-inputs (list perl))
     (home-page "http://mongoc.org/libbson/current/index.html")
     (synopsis "C BSON library")
     (description "Libbson can create and parse BSON documents.  It can also
@@ -519,21 +567,23 @@ it is comparable to protobuf.")
 (define-public python-ruamel.yaml
   (package
     (name "python-ruamel.yaml")
-    (version "0.15.83")
+    (version "0.16.13")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "ruamel.yaml" version))
        (sha256
         (base32
-         "0p4i8ad28cbbbjja8b9274irkhnphhvhap3aym6yb8xfp1d72kpw"))))
+         "0hm9yg785f46bkrgqknd6fdvmkby9dpzjnm0b63qf0i748acaj5v"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
+    (propagated-inputs
+     (list python-ruamel.yaml.clib))
     (arguments
      `(;; TODO: Tests require packaging "ruamel.std.pathlib".
        #:tests? #f))
-    (home-page "https://bitbucket.org/ruamel/yaml")
+    (home-page "https://sourceforge.net/projects/ruamel-yaml/")
     (synopsis "YAML 1.2 parser/emitter")
     (description
      "This package provides YAML parser/emitter that supports roundtrip
@@ -543,8 +593,43 @@ and has round-trip loaders and dumpers.  It supports comments.  Block
 style and key ordering are kept, so you can diff the source.")
     (license license:expat)))
 
-(define-public python2-ruamel.yaml
-  (package-with-python2 python-ruamel.yaml))
+(define-public python-ruamel.yaml.clib
+  (package
+    (name "python-ruamel.yaml.clib")
+    (version "0.2.6")
+    (source
+      (origin
+        ;; pypi release code has cythonized code without corresponding source.
+        (method hg-fetch)
+        (uri (hg-reference
+               (url "http://hg.code.sf.net/p/ruamel-yaml-clib/code")
+               (changeset version)))
+        (file-name (string-append name "-" version "-checkout"))
+        (sha256
+         (base32
+          "05m3y7pjfbaarqbbgw1k6gs6cnnmxnwadjipxvw1aaaqk3s236cs"))
+        (modules '((guix build utils)))
+        (snippet
+         '(begin
+            (delete-file "_ruamel_yaml.c")))))
+    (build-system python-build-system)
+    (arguments
+     `(#:tests? #f  ; This package is split from python-ruamel.yaml and
+                    ; depends on modules from it for the test suite.
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'sanity-check) ; Depends on python-ruamel.yaml
+         (add-after 'unpack 'cythonize-code
+           (lambda _
+             (invoke "cython" "_ruamel_yaml.pyx"))))))
+    (native-inputs
+     (list python-cython))
+    (home-page "https://sourceforge.net/p/ruamel-yaml-clib/code/ci/default/tree")
+    (synopsis "C version of reader, parser and emitter for ruamel.yaml")
+    (description
+     "This package provides a C version of the reader, parser and emitter for
+@code{ruamel.yaml} derived from libyaml.")
+    (license license:expat)))
 
 (define-public python-cbor
   (package
@@ -613,8 +698,7 @@ game development and other performance-critical applications.")
           "00w9hwz7sj3fkdjc378r066vdy6lpxmn6vfac3qx956k8lvpxxj5"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pandas" ,python-pandas)
-       ("python-pyarrow" ,python-pyarrow)))
+     (list python-pandas python-pyarrow))
     (home-page "https://github.com/wesm/feather")
     (synopsis "Python wrapper to the Feather file format")
     (description "This package provides a Python wrapper library to the
diff --git a/gnu/packages/serveez.scm b/gnu/packages/serveez.scm
index 871fb00d3b..b19d0ca596 100644
--- a/gnu/packages/serveez.scm
+++ b/gnu/packages/serveez.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013 Eric Bavier <bavier@member.fsf.org>
+;;; Copyright © 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -22,22 +23,22 @@
   #:use-module (guix download)
   #:use-module (guix build-system gnu)
   #:use-module (gnu packages)
+  #:use-module (gnu packages compression)
   #:use-module (gnu packages guile))
 
 (define-public serveez
   (package
     (name "serveez")
-    (version "0.2.2")
+    (version "0.3.0")
     (source
      (origin
       (method url-fetch)
       (uri (string-append "mirror://gnu/serveez/serveez-"
-                          version ".tar.xz"))
+                          version ".tar.lz"))
       (sha256
        (base32
-        "09a5jh762ps71ivlg7vdlzp3y29ncl3nsad7qbcni78bq2mzwxsc"))))
+        "0capm8i6fyjvh5rflxkfd07llfaa0kk4i3y836qpld9vzy49q6ky"))))
     (build-system gnu-build-system)
-    (inputs `(("guile" ,guile-2.0)))
     (arguments
      `(#:configure-flags '("--enable-libserveez-install")
        #:phases
@@ -48,6 +49,10 @@
                  (find-files "test" "^t[0-9]{3}$")
                (("/bin/sh") (which "sh")))
              #t)))))
+    (native-inputs
+     (list lzip))
+    (inputs
+     (list guile-2.2))
     (home-page "https://www.gnu.org/software/serveez/")
     (synopsis "Framework for implementing IP-based servers")
     (description
diff --git a/gnu/packages/shells.scm b/gnu/packages/shells.scm
index 62862516c3..1652848705 100644
--- a/gnu/packages/shells.scm
+++ b/gnu/packages/shells.scm
@@ -16,7 +16,8 @@
 ;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
 ;;; Copyright © 2020 Ryan Prior <rprior@protonmail.com>
 ;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
-;;; Copyright © 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2020 Marius Bakke <marius@gnu.org>
+;;; Copyright © 2021, 2022 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -71,6 +72,7 @@
   #:use-module (guix build-system trivial)
   #:use-module (guix download)
   #:use-module (guix git-download)
+  #:use-module (guix gexp)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix utils))
@@ -97,7 +99,7 @@
            #t))))
     (build-system gnu-build-system)
     (inputs
-     `(("libedit" ,libedit)))
+     (list libedit))
     (arguments
      '(#:configure-flags '("--with-libedit")))
     (home-page "http://gondor.apana.org.au/~herbert/dash")
@@ -129,14 +131,11 @@ direct descendant of NetBSD's Almquist Shell (@command{ash}).")
            (delete-file-recursively "pcre2")))))
     (build-system cmake-build-system)
     (inputs
-     `(("fish-foreign-env" ,fish-foreign-env)
-       ("ncurses" ,ncurses)
-       ("pcre2" ,pcre2)      ; don't use the bundled PCRE2
-       ("python" ,python)))  ; for fish_config and manpage completions
+     (list fish-foreign-env ncurses pcre2 ; don't use the bundled PCRE2
+           python))  ; for fish_config and manpage completions
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("groff" ,groff)                 ; for 'fish --help'
-       ("procps" ,procps)))             ; for the test suite
+     (list doxygen groff ; for 'fish --help'
+           procps))             ; for the test suite
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -296,16 +295,15 @@ and syntax highlighting.")
                           ,(string-append func-path "/fenv.apply.fish")
                           ,(string-append func-path "/fenv.main.fish"))
              (("bash")
-              (string-append (assoc-ref %build-inputs "bash") "/bin/bash"))
+              (search-input-file %build-inputs "/bin/bash"))
              (("sed")
-              (string-append (assoc-ref %build-inputs "sed") "/bin/sed"))
+              (search-input-file %build-inputs "/bin/sed"))
              ((" tr ")
-              (string-append " " (assoc-ref %build-inputs "coreutils")
-                             "/bin/tr ")))))))
+              (string-append " "
+                             (search-input-file %build-inputs "/bin/tr")
+                             " ")))))))
     (inputs
-     `(("bash" ,bash)
-       ("coreutils" ,coreutils)
-       ("sed" ,sed)))
+     (list bash coreutils sed))
     (home-page "https://github.com/oh-my-fish/plugin-foreign-env")
     (synopsis "Foreign environment interface for fish shell")
     (description "@code{fish-foreign-env} wraps bash script execution in a way
@@ -340,12 +338,8 @@ into fish.")
               (("/bin/rm")  (which "rm"))
               (("/bin\\)")  (string-append (dirname (which "rm")) ")")))
             #t)))))
-    (inputs `(("readline" ,readline)
-              ("perl" ,perl)))
-    (native-inputs `(("autoconf" ,autoconf)
-                     ("automake" ,automake)
-                     ("libtool" ,libtool)
-                     ("pkg-config" ,pkg-config)))
+    (inputs (list readline perl))
+    (native-inputs (list autoconf automake libtool pkg-config))
     (synopsis "Alternative implementation of the rc shell by Byron Rakitzis")
     (description
      "This is a reimplementation by Byron Rakitzis of the Plan 9 shell.  It
@@ -376,9 +370,9 @@ has a small feature set similar to a traditional Bourne shell.")
            (lambda _
              (chdir ".."))))))
     (inputs
-     `(("readline" ,readline)))
+     (list readline))
     (native-inputs
-     `(("bison" ,bison)))
+     (list bison))
     (synopsis "Extensible shell with higher-order functions")
     (description
      "Es is an extensible shell.  The language was derived from the Plan 9
@@ -392,7 +386,7 @@ written by Paul Haahr and Byron Rakitzis.")
 (define-public tcsh
   (package
     (name "tcsh")
-    (version "6.22.02")
+    (version "6.22.03")
     (source (origin
               (method url-fetch)
               ;; Old tarballs are moved to old/.
@@ -402,15 +396,14 @@ written by Paul Haahr and Byron Rakitzis.")
                                         "old/tcsh-" version ".tar.gz")))
               (sha256
                (base32
-                "0nw8prz1n0lmr82wnpyhrzmki630afn7p9cfgr3vl00vr9c72a7d"))
+                "1dv24bsp6faayinvwds092ylk9sb6894rl9ddm87y31a7mjzsb5y"))
               (patches (search-patches "tcsh-fix-autotest.patch"))
               (patch-flags '("-p0"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("perl" ,perl)))
+     (list autoconf perl))
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (arguments
      `(#:phases
         (modify-phases %standard-phases
@@ -427,6 +420,16 @@ written by Paul Haahr and Byron Rakitzis.")
               ;; Take care of pwd
               (substitute* '("tests/commands.at" "tests/variables.at")
                 (("/bin/pwd") (which "pwd")))
+              (substitute* "Makefile"
+                ;; Likewise for /usr/bin/env.
+                (("/usr/bin/env") "env")
+                ;; Don't reset the environment (PATH, etc).
+                (("\\$\\(ENVCMD\\) -") "$(ENVCMD)"))
+              ;; This test does not expect the home directory from
+              ;; /etc/passwd to be '/'.
+              (substitute* "tests/subst.at"
+                (("\\$\\(id -un\\)/foo")
+                 "$(id -un)//foo"))
               ;; The .at files create shell scripts without shebangs. Erk.
               (substitute* "tests/commands.at"
                 (("./output.sh") "/bin/sh output.sh"))
@@ -514,10 +517,8 @@ history mechanism, job control and a C-like syntax.")
                          (("command -p") "command ")
                          (("'command' -p") "'command' "))
                        #t)))))
-    (native-inputs `(("autoconf" ,autoconf)))
-    (inputs `(("ncurses" ,ncurses)
-              ("pcre" ,pcre)
-              ("perl" ,perl)))
+    (native-inputs (list autoconf))
+    (inputs (list ncurses pcre perl))
     (synopsis "Powerful shell for interactive use and scripting")
     (description "The Z shell (zsh) is a Unix shell that can be used
 as an interactive login shell and as a powerful command interpreter
@@ -565,7 +566,7 @@ ksh, and tcsh.")
        ;; information.
        #:tests? #f))
     (inputs
-     `(("python-ply" ,python-ply)))
+     (list python-ply))
     (home-page "https://xon.sh/")
     (synopsis "Python-ish shell")
     (description
@@ -607,11 +608,9 @@ use of experts and novices alike.")
                  (symlink rxpath "rx"))
                #t)))))
       (inputs
-       `(("scheme48" ,scheme48)
-         ("scheme48-rx" ,scheme48-rx)))
+       (list scheme48 scheme48-rx))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)))
+       (list autoconf automake))
       (home-page "https://github.com/scheme/scsh")
       (synopsis "Unix shell embedded in Scheme")
       (description
@@ -687,7 +686,7 @@ Its features include:
            "0qiny71ww5nhzy4mnc8652hn0mlxyb67h333gbdxp4j4qxsi13q4"))))
       (build-system gnu-build-system)
       (inputs
-       `(("linenoise" ,linenoise)))
+       (list linenoise))
       (arguments
        `(#:tests? #f
          #:make-flags (list "CC=gcc"
@@ -774,9 +773,9 @@ The OpenBSD Korn Shell is a cleaned up and enhanced ksh.")
         (base32 "0x33plxqhh5202hgqidgccz5hpg8d2q71ylgnm437g60mfi9z0px"))))
     (build-system meson-build-system)
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
      `(#:tests? #f))                    ; no tests included
     (home-page "https://github.com/dimkr/loksh")
@@ -791,14 +790,14 @@ interactive POSIX shell targeted at resource-constrained systems.")
 (define-public mksh
   (package
     (name "mksh")
-    (version "58")
+    (version "59c")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://www.mirbsd.org/MirOS/dist/mir/mksh/mksh-R"
                            version ".tgz"))
        (sha256
-        (base32 "1337zjvzh14yncg9igdry904a3ns52l8rnm1kcq262w7f5xyp2v0"))))
+        (base32 "01n5ggw33bw4jv4d3148wlw9n4aj7vdn3ffnc66c9w9pldjidbkp"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ; tests require access to /dev/tty
@@ -817,8 +816,7 @@ interactive POSIX shell targeted at resource-constrained systems.")
                (install-file "mksh" bin)
                (with-directory-excursion bin
                  (symlink "mksh" "ksh"))
-               (install-file "mksh.1" man)
-               #t))))))
+               (install-file "mksh.1" man)))))))
     (home-page "https://www.mirbsd.org/mksh.htm")
     (synopsis "Korn Shell from MirBSD")
     (description "mksh is an actively developed free implementation of the
@@ -830,38 +828,37 @@ Shell (pdksh).")
 (define-public oil
   (package
     (name "oil")
-    (version "0.9.2")
+    (version "0.9.6")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://www.oilshell.org/download/oil-"
                            version ".tar.gz"))
        (sha256
-        (base32 "0mqf2wmc1p6xr2l54pxv97d0s23wqm1mwwgyzn06aafr93dy3vkg"))))
+        (base32 "01lmj4diqpla1gwwb1gh1shf4y74qhanpkzcsnb28458rxm1sq32"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:strip-binaries? #f             ; strip breaks the binary
-       #:phases
-       (modify-phases %standard-phases
-         (replace 'configure
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out")))
-               (setenv "CC" ,(cc-for-target))
-               (substitute* "configure"
-                 ((" cc ") " $CC "))
-               (invoke "./configure" (string-append "--prefix=" out)
-                       "--with-readline"))))
-         (replace 'check
-           ;; The tests are not distributed in the tarballs but upstream
-           ;; recommends running this smoke test.
-           ;; https://github.com/oilshell/oil/blob/release/0.8.0/INSTALL.txt#L38-L48
-           (lambda* (#:key tests? #:allow-other-keys)
-             (when tests?
-               (let* ((oil "_bin/oil.ovm"))
-                 (invoke/quiet oil "osh" "-c" "echo hi")
-                 (invoke/quiet oil "osh" "-n" "configure"))))))))
+     (list #:strip-binaries? #f         ; strip breaks the binary
+           #:phases
+           #~(modify-phases %standard-phases
+               (replace 'configure
+                 (lambda _
+                   (setenv "CC" #$(cc-for-target))
+                   (substitute* "configure"
+                     ((" cc ") " $CC "))
+                   (invoke "./configure" (string-append "--prefix=" #$output)
+                           "--with-readline")))
+               (replace 'check
+                 ;; The tests are not distributed in the tarballs but upstream
+                 ;; recommends running this smoke test.
+                 ;; https://github.com/oilshell/oil/blob/release/0.8.0/INSTALL.txt#L38-L48
+                 (lambda* (#:key tests? #:allow-other-keys)
+                   (when tests?
+                     (let* ((oil "_bin/oil.ovm"))
+                       (invoke/quiet oil "osh" "-c" "echo hi")
+                       (invoke/quiet oil "osh" "-n" "configure"))))))))
     (inputs
-     `(("readline" ,readline)))
+     (list readline))
     (home-page "https://www.oilshell.org")
     (synopsis "Programming language and Bash-compatible Unix shell")
     (description "Oil is a programming language with automatic translation for
@@ -870,9 +867,6 @@ scripts.")
     (license (list license:psfl                 ; tarball includes python2.7
                    license:asl2.0))))
 
-(define-public oil-shell
-  (deprecated-package "oil-shell" oil))
-
 (define-public gash
   (package
     (name "gash")
@@ -894,9 +888,9 @@ scripts.")
                  #t))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (arguments
      '(#:make-flags '("XFAIL_TESTS=tests/redirects.org")))
     (home-page "https://savannah.nongnu.org/projects/gash/")
@@ -929,10 +923,9 @@ as part of the Guix bootstrap process.")
                   #t))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("guile" ,guile-3.0)
-       ("gash" ,gash)))
+     (list guile-3.0 gash))
     (home-page "https://savannah.nongnu.org/projects/gash/")
     (synopsis "Core POSIX utilities written in Guile Scheme")
     (description "Gash-Utils provides Scheme implementations of many
@@ -946,7 +939,7 @@ files and text.")
 (define-public nushell
   (package
     (name "nushell")
-    (version "0.36.0")
+    (version "0.43.0")
     (source
      (origin
        (method git-fetch)
@@ -955,78 +948,57 @@ files and text.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1db521jrs0yxwmvkkl8wssa8qyi0m62n69l7xxl2gpyz1v8nvw76"))))
+        (base32 "0d9nzfrmdal6vd1k35xmkj7hq1gwl3q0ivm31xks8p7641srs8id"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:rust ,rust-1.52
-       #:tests? #false                  ;missing files
+     `(#:tests? #false                  ;missing files
        #:features '("extra")
        #:cargo-inputs
        (("rust-ctrlc" ,rust-ctrlc-3)
         ("rust-futures" ,rust-futures-0.3)
         ("rust-itertools" ,rust-itertools-0.10)
-        ("rust-mp4" ,rust-mp4-0.8)
-        ("rust-nu-cli" ,rust-nu-cli-0.36)
-        ("rust-nu-command" ,rust-nu-command-0.36)
-        ("rust-nu-completion" ,rust-nu-completion-0.36)
-        ("rust-nu-data" ,rust-nu-data-0.36)
-        ("rust-nu-engine" ,rust-nu-engine-0.36)
-        ("rust-nu-errors" ,rust-nu-errors-0.36)
-        ("rust-nu-parser" ,rust-nu-parser-0.36)
-        ("rust-nu-path" ,rust-nu-path-0.36)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.36)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.36)
-        ("rust-nu-source" ,rust-nu-source-0.36)
-        ("rust-nu-value-ext" ,rust-nu-value-ext-0.36)
-        ("rust-nu-plugin-binaryview"
-         ,rust-nu-plugin-binaryview-0.36)
-        ("rust-nu-plugin-chart"
-         ,rust-nu-plugin-chart-0.36)
-        ("rust-nu-plugin-fetch"
-         ,rust-nu-plugin-fetch-0.36)
-        ("rust-nu-plugin-from-bson"
-         ,rust-nu-plugin-from-bson-0.36)
-        ("rust-nu-plugin-from-sqlite"
-         ,rust-nu-plugin-from-sqlite-0.36)
-        ("rust-nu-plugin-inc" ,rust-nu-plugin-inc-0.36)
-        ("rust-nu-plugin-match"
-         ,rust-nu-plugin-match-0.36)
-        ("rust-nu-plugin-post" ,rust-nu-plugin-post-0.36)
-        ("rust-nu-plugin-ps" ,rust-nu-plugin-ps-0.36)
-        ("rust-nu-plugin-query-json"
-         ,rust-nu-plugin-query-json-0.36)
-        ("rust-nu-plugin-s3" ,rust-nu-plugin-s3-0.36)
-        ("rust-nu-plugin-selector"
-         ,rust-nu-plugin-selector-0.36)
-        ("rust-nu-plugin-start"
-         ,rust-nu-plugin-start-0.36)
-        ("rust-nu-plugin-sys" ,rust-nu-plugin-sys-0.36)
-        ("rust-nu-plugin-textview"
-         ,rust-nu-plugin-textview-0.36)
-        ("rust-nu-plugin-to-bson"
-         ,rust-nu-plugin-to-bson-0.36)
-        ("rust-nu-plugin-to-sqlite"
-         ,rust-nu-plugin-to-sqlite-0.36)
-        ("rust-nu-plugin-tree" ,rust-nu-plugin-tree-0.36)
-        ("rust-nu-plugin-xpath"
-         ,rust-nu-plugin-xpath-0.36))
+        ("rust-mp4" ,rust-mp4-0.9)
+        ("rust-nu-cli" ,rust-nu-cli-0.43)
+        ("rust-nu-command" ,rust-nu-command-0.43)
+        ("rust-nu-completion" ,rust-nu-completion-0.43)
+        ("rust-nu-data" ,rust-nu-data-0.43)
+        ("rust-nu-engine" ,rust-nu-engine-0.43)
+        ("rust-nu-errors" ,rust-nu-errors-0.43)
+        ("rust-nu-parser" ,rust-nu-parser-0.43)
+        ("rust-nu-path" ,rust-nu-path-0.43)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.43)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.43)
+        ("rust-nu-source" ,rust-nu-source-0.43)
+        ("rust-nu-value-ext" ,rust-nu-value-ext-0.43)
+        ("rust-nu-plugin-binaryview" ,rust-nu-plugin-binaryview-0.43)
+        ("rust-nu-plugin-chart" ,rust-nu-plugin-chart-0.43)
+        ("rust-nu-plugin-from-bson" ,rust-nu-plugin-from-bson-0.43)
+        ("rust-nu-plugin-from-sqlite" ,rust-nu-plugin-from-sqlite-0.43)
+        ("rust-nu-plugin-inc" ,rust-nu-plugin-inc-0.43)
+        ("rust-nu-plugin-match" ,rust-nu-plugin-match-0.43)
+        ("rust-nu-plugin-query-json" ,rust-nu-plugin-query-json-0.43)
+        ("rust-nu-plugin-s3" ,rust-nu-plugin-s3-0.43)
+        ("rust-nu-plugin-selector" ,rust-nu-plugin-selector-0.43)
+        ("rust-nu-plugin-start" ,rust-nu-plugin-start-0.43)
+        ("rust-nu-plugin-textview" ,rust-nu-plugin-textview-0.43)
+        ("rust-nu-plugin-to-bson" ,rust-nu-plugin-to-bson-0.43)
+        ("rust-nu-plugin-to-sqlite" ,rust-nu-plugin-to-sqlite-0.43)
+        ("rust-nu-plugin-tree" ,rust-nu-plugin-tree-0.43)
+        ("rust-nu-plugin-xpath" ,rust-nu-plugin-xpath-0.43))
        #:cargo-development-inputs
-       (("rust-dunce" ,rust-dunce-1)
-        ("rust-hamcrest2" ,rust-hamcrest2-0.3)
-        ("rust-nu-test-support"
-         ,rust-nu-test-support-0.36)
+       (("rust-hamcrest2" ,rust-hamcrest2-0.3)
+        ("rust-nu-test-support" ,rust-nu-test-support-0.43)
         ("rust-rstest" ,rust-rstest-0.10)
         ("rust-serial-test" ,rust-serial-test-0.5))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python" ,python)))
+     (list pkg-config python))
     (inputs
-     `(("curl" ,curl)
-       ("libgit2" ,libgit2)
-       ("libx11" ,libx11)
-       ("libxcb" ,libxcb)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list curl
+           libgit2
+           libx11
+           libxcb
+           openssl
+           zlib))
     (home-page "https://www.nushell.sh")
     (synopsis "Shell that understands the structure of the data")
     (description
@@ -1039,22 +1011,22 @@ 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.36
+(define-public rust-nu-ansi-term-0.43
   (package
     (name "rust-nu-ansi-term")
-    (version "0.36.0")
+    (version "0.43.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu-ansi-term" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0p68s0djx4xr93vn7lh8774srazjw4dxsi3px8c8mbv0a4ixg5wr"))))
+        (base32 "08qrpysv98cn9hmqmvkzh9bax4220jnix17a6d5gn70ndrli6v53"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-itertools" ,rust-itertools-0.10)
+       (("rust-doc-comment" ,rust-doc-comment-0.3)
         ("rust-overload" ,rust-overload-0.1)
         ("rust-serde" ,rust-serde-1)
         ("rust-winapi" ,rust-winapi-0.3))))
@@ -1065,17 +1037,17 @@ of commands called a ``pipeline''.")
 underline).")
     (license license:expat)))
 
-(define-public rust-nu-cli-0.36
+(define-public rust-nu-cli-0.43
   (package
     (name "rust-nu-cli")
-    (version "0.36.0")
+    (version "0.43.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu-cli" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1zb6x6knn1hrpkyryniq73vkrgg9arqnxy50klm8963dnq49082v"))))
+        (base32 "10mfq3vd4bp286j2p3j0iqv4j9lfq3zj2jpab3bg2qwv9kislcv0"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -1084,141 +1056,118 @@ underline).")
         ("rust-indexmap" ,rust-indexmap-1)
         ("rust-lazy-static" ,rust-lazy-static-1)
         ("rust-log" ,rust-log-0.4)
-        ("rust-nu-ansi-term" ,rust-nu-ansi-term-0.36)
-        ("rust-nu-command" ,rust-nu-command-0.36)
-        ("rust-nu-completion" ,rust-nu-completion-0.36)
-        ("rust-nu-data" ,rust-nu-data-0.36)
-        ("rust-nu-engine" ,rust-nu-engine-0.36)
-        ("rust-nu-errors" ,rust-nu-errors-0.36)
-        ("rust-nu-parser" ,rust-nu-parser-0.36)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.36)
-        ("rust-nu-source" ,rust-nu-source-0.36)
-        ("rust-nu-stream" ,rust-nu-stream-0.36)
-        ("rust-pretty-env-logger"
-         ,rust-pretty-env-logger-0.4)
+        ("rust-nu-ansi-term" ,rust-nu-ansi-term-0.43)
+        ("rust-nu-command" ,rust-nu-command-0.43)
+        ("rust-nu-completion" ,rust-nu-completion-0.43)
+        ("rust-nu-data" ,rust-nu-data-0.43)
+        ("rust-nu-engine" ,rust-nu-engine-0.43)
+        ("rust-nu-errors" ,rust-nu-errors-0.43)
+        ("rust-nu-parser" ,rust-nu-parser-0.43)
+        ("rust-nu-path" ,rust-nu-path-0.43)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.43)
+        ("rust-nu-source" ,rust-nu-source-0.43)
+        ("rust-nu-stream" ,rust-nu-stream-0.43)
+        ("rust-pretty-env-logger" ,rust-pretty-env-logger-0.4)
         ("rust-rustyline" ,rust-rustyline-9)
         ("rust-serde" ,rust-serde-1)
         ("rust-serde-yaml" ,rust-serde-yaml-0.8)
-        ("rust-shadow-rs" ,rust-shadow-rs-0.6)
-        ("rust-shadow-rs" ,rust-shadow-rs-0.6)
-        ("rust-strip-ansi-escapes"
-         ,rust-strip-ansi-escapes-0.1))))
+        ("rust-shadow-rs" ,rust-shadow-rs-0.8)
+        ("rust-shadow-rs" ,rust-shadow-rs-0.8)
+        ("rust-strip-ansi-escapes" ,rust-strip-ansi-escapes-0.1))))
     (home-page "https://www.nushell.sh")
     (synopsis "CLI for nushell")
     (description "CLI for nushell")
     (license license:expat)))
 
-(define-public rust-nu-command-0.36
+(define-public rust-nu-command-0.43
   (package
     (name "rust-nu-command")
-    (version "0.36.0")
+    (version "0.43.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu-command" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0690iw3wn0jas04471dyvsqswbwxpab2qp2r3r5ma0za98s4p3ry"))))
+        (base32 "0zg9qgip9r831sj4y63p8js2pdl3cn1i1wly0kvad1wyn3wm67rr"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-arboard" ,rust-arboard-1)
-        ("rust-base64" ,rust-base64-0.13)
-        ("rust-bigdecimal-rs" ,rust-bigdecimal-rs-0.2)
-        ("rust-byte-unit" ,rust-byte-unit-4)
-        ("rust-bytes" ,rust-bytes-1)
+       (("rust-base64" ,rust-base64-0.13)
+        ("rust-bigdecimal" ,rust-bigdecimal-0.3)
         ("rust-calamine" ,rust-calamine-0.18)
         ("rust-chrono" ,rust-chrono-0.4)
         ("rust-chrono-tz" ,rust-chrono-tz-0.5)
-        ("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-digest" ,rust-digest-0.9)
-        ("rust-directories-next"
-         ,rust-directories-next-2)
         ("rust-dirs-next" ,rust-dirs-next-2)
         ("rust-dtparse" ,rust-dtparse-1)
-        ("rust-dunce" ,rust-dunce-1)
         ("rust-eml-parser" ,rust-eml-parser-0.1)
         ("rust-encoding-rs" ,rust-encoding-rs-0.8)
         ("rust-filesize" ,rust-filesize-0.2)
-        ("rust-fs-extra" ,rust-fs-extra-1)
         ("rust-futures" ,rust-futures-0.3)
-        ("rust-getset" ,rust-getset-0.1)
         ("rust-glob" ,rust-glob-0.3)
+        ("rust-heck" ,rust-heck-0.4)
         ("rust-htmlescape" ,rust-htmlescape-0.3)
         ("rust-ical" ,rust-ical-0.7)
         ("rust-indexmap" ,rust-indexmap-1)
-        ("rust-inflector" ,rust-inflector-0.11)
         ("rust-itertools" ,rust-itertools-0.10)
         ("rust-lazy-static" ,rust-lazy-static-1)
         ("rust-log" ,rust-log-0.4)
         ("rust-md-5" ,rust-md-5-0.9)
         ("rust-meval" ,rust-meval-0.2)
-        ("rust-minus" ,rust-minus-3)
-        ("rust-nu-ansi-term" ,rust-nu-ansi-term-0.36)
-        ("rust-nu-data" ,rust-nu-data-0.36)
-        ("rust-nu-engine" ,rust-nu-engine-0.36)
-        ("rust-nu-errors" ,rust-nu-errors-0.36)
-        ("rust-nu-json" ,rust-nu-json-0.36)
-        ("rust-nu-parser" ,rust-nu-parser-0.36)
-        ("rust-nu-path" ,rust-nu-path-0.36)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.36)
-        ("rust-nu-pretty-hex" ,rust-nu-pretty-hex-0.36)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.36)
-        ("rust-nu-serde" ,rust-nu-serde-0.36)
-        ("rust-nu-source" ,rust-nu-source-0.36)
-        ("rust-nu-stream" ,rust-nu-stream-0.36)
-        ("rust-nu-table" ,rust-nu-table-0.36)
-        ("rust-nu-test-support"
-         ,rust-nu-test-support-0.36)
-        ("rust-nu-value-ext" ,rust-nu-value-ext-0.36)
-        ("rust-num-bigint" ,rust-num-bigint-0.3)
+        ("rust-mime" ,rust-mime-0.3)
+        ("rust-nu-ansi-term" ,rust-nu-ansi-term-0.43)
+        ("rust-nu-data" ,rust-nu-data-0.43)
+        ("rust-nu-engine" ,rust-nu-engine-0.43)
+        ("rust-nu-errors" ,rust-nu-errors-0.43)
+        ("rust-nu-json" ,rust-nu-json-0.43)
+        ("rust-nu-parser" ,rust-nu-parser-0.43)
+        ("rust-nu-path" ,rust-nu-path-0.43)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.43)
+        ("rust-nu-pretty-hex" ,rust-nu-pretty-hex-0.43)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.43)
+        ("rust-nu-serde" ,rust-nu-serde-0.43)
+        ("rust-nu-source" ,rust-nu-source-0.43)
+        ("rust-nu-stream" ,rust-nu-stream-0.43)
+        ("rust-nu-table" ,rust-nu-table-0.43)
+        ("rust-nu-test-support" ,rust-nu-test-support-0.43)
+        ("rust-nu-value-ext" ,rust-nu-value-ext-0.43)
+        ("rust-num-bigint" ,rust-num-bigint-0.4)
         ("rust-num-format" ,rust-num-format-0.4)
         ("rust-num-traits" ,rust-num-traits-0.2)
         ("rust-parking-lot" ,rust-parking-lot-0.11)
-        ("rust-pin-utils" ,rust-pin-utils-0.1)
-        ("rust-polars" ,rust-polars-0.15)
-        ("rust-query-interface"
-         ,rust-query-interface-0.3)
+        ("rust-polars" ,rust-polars-0.17)
         ("rust-quick-xml" ,rust-quick-xml-0.22)
-        ("rust-quickcheck-macros"
-         ,rust-quickcheck-macros-1)
+        ("rust-quickcheck-macros" ,rust-quickcheck-macros-1)
         ("rust-rand" ,rust-rand-0.8)
-        ("rust-rayon" ,rust-rayon-1)
         ("rust-regex" ,rust-regex-1)
+        ("rust-reqwest" ,rust-reqwest-0.11)
         ("rust-roxmltree" ,rust-roxmltree-0.14)
-        ("rust-rusqlite" ,rust-rusqlite-0.25)
         ("rust-rust-embed" ,rust-rust-embed-5)
         ("rust-rustyline" ,rust-rustyline-9)
         ("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.6)
-        ("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)
+        ("rust-shadow-rs" ,rust-shadow-rs-0.8)
+        ("rust-strip-ansi-escapes" ,rust-strip-ansi-escapes-0.1)
+        ("rust-sysinfo" ,rust-sysinfo-0.23)
         ("rust-term" ,rust-term-0.7)
         ("rust-term-size" ,rust-term-size-0.3)
-        ("rust-termcolor" ,rust-termcolor-1)
         ("rust-thiserror" ,rust-thiserror-1)
         ("rust-titlecase" ,rust-titlecase-1)
+        ("rust-tokio" ,rust-tokio-1)
         ("rust-toml" ,rust-toml-0.5)
-        ("rust-trash" ,rust-trash-1)
+        ("rust-trash" ,rust-trash-2)
         ("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)
@@ -1229,10 +1178,10 @@ underline).")
     (description "CLI for nushell")
     (license license:expat)))
 
-(define-public rust-nu-completion-0.36
+(define-public rust-nu-completion-0.43
   (package
     (name "rust-nu-completion")
-    (version "0.36.0")
+    (version "0.43.0")
     (source
      (origin
        (method url-fetch)
@@ -1241,132 +1190,111 @@ underline).")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1kmn80cwpi8dd25vxm4r7ap35igfy4mqax20z31c51qwj2a8r6cx"))))
+         "1w04z9973zfv33lpbdjy3qn3nxkxc0a6y0zby6cwvg3vs0mkprdn"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-dirs-next" ,rust-dirs-next-2)
-        ("rust-indexmap" ,rust-indexmap-1)
+       (("rust-indexmap" ,rust-indexmap-1)
         ("rust-is-executable" ,rust-is-executable-1)
-        ("rust-nu-data" ,rust-nu-data-0.36)
-        ("rust-nu-engine" ,rust-nu-engine-0.36)
-        ("rust-nu-errors" ,rust-nu-errors-0.36)
-        ("rust-nu-parser" ,rust-nu-parser-0.36)
-        ("rust-nu-path" ,rust-nu-path-0.36)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.36)
-        ("rust-nu-source" ,rust-nu-source-0.36)
-        ("rust-nu-test-support"
-         ,rust-nu-test-support-0.36))))
+        ("rust-nu-data" ,rust-nu-data-0.43)
+        ("rust-nu-engine" ,rust-nu-engine-0.43)
+        ("rust-nu-parser" ,rust-nu-parser-0.43)
+        ("rust-nu-path" ,rust-nu-path-0.43)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.43)
+        ("rust-nu-source" ,rust-nu-source-0.43)
+        ("rust-nu-test-support" ,rust-nu-test-support-0.43))))
     (home-page "https://www.nushell.sh")
     (synopsis "Completions for nushell")
     (description "Completions for nushell")
     (license license:expat)))
 
-(define-public rust-nu-data-0.36
+(define-public rust-nu-data-0.43
   (package
     (name "rust-nu-data")
-    (version "0.36.0")
+    (version "0.43.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu-data" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "02m4zyrgaxkpvvbknqang9cqbzqmbp8bvmvisxp5yijwadzjr66y"))))
+        (base32 "0fv4z61kp54jn03zkpv461im9cqdmd8xcl1j8pdpsglhbl1h6203"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-bigdecimal-rs" ,rust-bigdecimal-rs-0.2)
+       (("rust-bigdecimal" ,rust-bigdecimal-0.3)
         ("rust-byte-unit" ,rust-byte-unit-4)
         ("rust-chrono" ,rust-chrono-0.4)
         ("rust-common-path" ,rust-common-path-1)
         ("rust-derive-new" ,rust-derive-new-0.5)
-        ("rust-directories-next"
-         ,rust-directories-next-2)
-        ("rust-dirs-next" ,rust-dirs-next-2)
+        ("rust-directories-next" ,rust-directories-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.36)
-        ("rust-nu-errors" ,rust-nu-errors-0.36)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.36)
-        ("rust-nu-source" ,rust-nu-source-0.36)
-        ("rust-nu-table" ,rust-nu-table-0.36)
-        ("rust-nu-test-support"
-         ,rust-nu-test-support-0.36)
-        ("rust-nu-value-ext" ,rust-nu-value-ext-0.36)
-        ("rust-num-bigint" ,rust-num-bigint-0.3)
+        ("rust-nu-ansi-term" ,rust-nu-ansi-term-0.43)
+        ("rust-nu-errors" ,rust-nu-errors-0.43)
+        ("rust-nu-path" ,rust-nu-path-0.43)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.43)
+        ("rust-nu-source" ,rust-nu-source-0.43)
+        ("rust-nu-table" ,rust-nu-table-0.43)
+        ("rust-nu-test-support" ,rust-nu-test-support-0.43)
+        ("rust-nu-value-ext" ,rust-nu-value-ext-0.43)
+        ("rust-num-bigint" ,rust-num-bigint-0.4)
         ("rust-num-format" ,rust-num-format-0.4)
         ("rust-num-traits" ,rust-num-traits-0.2)
-        ("rust-query-interface"
-         ,rust-query-interface-0.3)
         ("rust-serde" ,rust-serde-1)
         ("rust-sha2" ,rust-sha2-0.9)
         ("rust-sys-locale" ,rust-sys-locale-0.1)
-        ("rust-toml" ,rust-toml-0.5)
-        ("rust-users" ,rust-users-0.11))))
+        ("rust-toml" ,rust-toml-0.5))))
     (home-page "https://www.nushell.sh")
     (synopsis "CLI for nushell")
     (description "CLI for nushell")
     (license license:expat)))
 
-(define-public rust-nu-engine-0.36
+(define-public rust-nu-engine-0.43
   (package
     (name "rust-nu-engine")
-    (version "0.36.0")
+    (version "0.43.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu-engine" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "03nngv2pcn10ydc1wq3chvd31rzgh4j7jrvkgmgps4ml1avn6yfr"))))
+        (base32 "0z2c06bmac992qyzrfa2b25z3zyg8laj9pxqfa51c6kqsyy41y28"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-ansi-term" ,rust-ansi-term-0.12)
-        ("rust-async-recursion"
-         ,rust-async-recursion-0.3)
-        ("rust-async-trait" ,rust-async-trait-0.1)
-        ("rust-bigdecimal-rs" ,rust-bigdecimal-rs-0.2)
-        ("rust-bytes" ,rust-bytes-0.5)
+       (("rust-bigdecimal" ,rust-bigdecimal-0.3)
+        ("rust-bytes" ,rust-bytes-1)
         ("rust-chrono" ,rust-chrono-0.4)
-        ("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-dirs-next" ,rust-dirs-next-2)
-        ("rust-dunce" ,rust-dunce-1)
-        ("rust-dyn-clone" ,rust-dyn-clone-1)
         ("rust-encoding-rs" ,rust-encoding-rs-0.8)
         ("rust-filesize" ,rust-filesize-0.2)
         ("rust-fs-extra" ,rust-fs-extra-1)
-        ("rust-futures" ,rust-futures-0.3)
-        ("rust-futures-util" ,rust-futures-util-0.3)
-        ("rust-futures-codec" ,rust-futures-codec-0.4)
         ("rust-getset" ,rust-getset-0.1)
         ("rust-glob" ,rust-glob-0.3)
         ("rust-indexmap" ,rust-indexmap-1)
         ("rust-itertools" ,rust-itertools-0.10)
         ("rust-lazy-static" ,rust-lazy-static-1)
         ("rust-log" ,rust-log-0.4)
-        ("rust-nu-ansi-term" ,rust-nu-ansi-term-0.36)
-        ("rust-nu-data" ,rust-nu-data-0.36)
-        ("rust-nu-errors" ,rust-nu-errors-0.36)
-        ("rust-nu-parser" ,rust-nu-parser-0.36)
-        ("rust-nu-path" ,rust-nu-path-0.36)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.36)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.36)
-        ("rust-nu-source" ,rust-nu-source-0.36)
-        ("rust-nu-stream" ,rust-nu-stream-0.36)
-        ("rust-nu-test-support"
-         ,rust-nu-test-support-0.36)
-        ("rust-nu-value-ext" ,rust-nu-value-ext-0.36)
-        ("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-nu-ansi-term" ,rust-nu-ansi-term-0.43)
+        ("rust-nu-data" ,rust-nu-data-0.43)
+        ("rust-nu-errors" ,rust-nu-errors-0.43)
+        ("rust-nu-parser" ,rust-nu-parser-0.43)
+        ("rust-nu-path" ,rust-nu-path-0.43)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.43)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.43)
+        ("rust-nu-source" ,rust-nu-source-0.43)
+        ("rust-nu-stream" ,rust-nu-stream-0.43)
+        ("rust-nu-test-support" ,rust-nu-test-support-0.43)
+        ("rust-nu-value-ext" ,rust-nu-value-ext-0.43)
+        ("rust-num-bigint" ,rust-num-bigint-0.4)
         ("rust-parking-lot" ,rust-parking-lot-0.11)
         ("rust-rayon" ,rust-rayon-1)
         ("rust-serde" ,rust-serde-1)
@@ -1374,7 +1302,7 @@ underline).")
         ("rust-tempfile" ,rust-tempfile-3)
         ("rust-term-size" ,rust-term-size-0.3)
         ("rust-termcolor" ,rust-termcolor-1)
-        ("rust-trash" ,rust-trash-1)
+        ("rust-trash" ,rust-trash-2)
         ("rust-umask" ,rust-umask-1)
         ("rust-users" ,rust-users-0.11)
         ("rust-which" ,rust-which-4))))
@@ -1383,30 +1311,29 @@ underline).")
     (description "Core commands for nushell")
     (license license:expat)))
 
-(define-public rust-nu-errors-0.36
+(define-public rust-nu-errors-0.43
   (package
     (name "rust-nu-errors")
-    (version "0.36.0")
+    (version "0.43.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu-errors" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0k5xpfl9igz99sf4czhc9zrgkzfza915a9isvkm0kda2zyy1fnwf"))))
+        (base32 "1a5wn3vimqi7j015by93s2i1jifdi2p45n5pp1gnvkp0kfs4kvlb"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-bigdecimal-rs" ,rust-bigdecimal-rs-0.2)
-        ("rust-codespan-reporting"
-         ,rust-codespan-reporting-0.11)
+       (("rust-bigdecimal" ,rust-bigdecimal-0.3)
+        ("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.36)
-        ("rust-nu-source" ,rust-nu-source-0.36)
-        ("rust-num-bigint" ,rust-num-bigint-0.3)
+        ("rust-nu-ansi-term" ,rust-nu-ansi-term-0.43)
+        ("rust-nu-source" ,rust-nu-source-0.43)
+        ("rust-num-bigint" ,rust-num-bigint-0.4)
         ("rust-num-traits" ,rust-num-traits-0.2)
         ("rust-serde" ,rust-serde-1)
         ("rust-serde-json" ,rust-serde-json-1)
@@ -1417,24 +1344,23 @@ underline).")
     (description "Core error subsystem for Nushell")
     (license license:expat)))
 
-(define-public rust-nu-json-0.36
+(define-public rust-nu-json-0.43
   (package
     (name "rust-nu-json")
-    (version "0.36.0")
+    (version "0.43.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu-json" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "145h7npb8j24x7a8mggqbvafssc0qmfh53azvp88a3svv4n5q16x"))))
+        (base32 "1kj331q3bmdhzl19x7x1c7rxcmawjyy77p0j7mc9x01idqwc2mvs"))))
     (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))))
@@ -1443,72 +1369,64 @@ underline).")
     (description "This package is a fork of @code{serde-hjson}.")
     (license license:expat)))
 
-(define-public rust-nu-parser-0.36
+(define-public rust-nu-parser-0.43
   (package
     (name "rust-nu-parser")
-    (version "0.36.0")
+    (version "0.43.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu-parser" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1i3wyvpvv7xsdjlvl7c6hpic4dcsqbvvfppdb8z298wkk8v65hd4"))))
+        (base32 "0qdf76br7fn1ivhvdnxqd2jzarppkk94hz0frd08vlf4z2a257xv"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-bigdecimal-rs" ,rust-bigdecimal-rs-0.2)
-        ("rust-codespan-reporting"
-         ,rust-codespan-reporting-0.11)
+       (("rust-bigdecimal" ,rust-bigdecimal-0.3)
         ("rust-derive-new" ,rust-derive-new-0.5)
-        ("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.36)
-        ("rust-nu-path" ,rust-nu-path-0.36)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.36)
-        ("rust-nu-source" ,rust-nu-source-0.36)
-        ("rust-nu-test-support"
-         ,rust-nu-test-support-0.36)
-        ("rust-num-bigint" ,rust-num-bigint-0.3)
-        ("rust-num-traits" ,rust-num-traits-0.2)
-        ("rust-serde" ,rust-serde-1)
+        ("rust-nu-data" ,rust-nu-data-0.43)
+        ("rust-nu-errors" ,rust-nu-errors-0.43)
+        ("rust-nu-path" ,rust-nu-path-0.43)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.43)
+        ("rust-nu-source" ,rust-nu-source-0.43)
+        ("rust-nu-test-support" ,rust-nu-test-support-0.43)
+        ("rust-num-bigint" ,rust-num-bigint-0.4)
         ("rust-smart-default" ,rust-smart-default-0.6))))
     (home-page "https://www.nushell.sh")
     (synopsis "Nushell parser")
     (description "Nushell parser")
     (license license:expat)))
 
-(define-public rust-nu-path-0.36
+(define-public rust-nu-path-0.43
   (package
     (name "rust-nu-path")
-    (version "0.36.0")
+    (version "0.43.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu-path" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1pjx76zblqmpllkv3p6hrf5my85xf9jwds0v067a9d3nfpm2c46g"))))
+        (base32 "0girfz9yihrkps3zpzc1jgnwmfxqbnxpq0i6vxqrwyj7ipglc8z7"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-dirs-next" ,rust-dirs-next-2)
-        ("rust-dunce" ,rust-dunce-1))))
+       (("rust-dirs-next" ,rust-dirs-next-2) ("rust-dunce" ,rust-dunce-1))))
     (home-page "https://www.nushell.sh")
     (synopsis "Nushell parser")
     (description "Nushell parser")
     (license license:expat)))
 
-(define-public rust-nu-plugin-0.36
+(define-public rust-nu-plugin-0.43
   (package
     (name "rust-nu-plugin")
-    (version "0.36.0")
+    (version "0.43.0")
     (source
      (origin
        (method url-fetch)
@@ -1516,20 +1434,17 @@ underline).")
        (file-name
         (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "08qll1q26igfjkp6xc2gd6rkpw379x828wan4xsh1dmaspikvqh9"))))
+        (base32 "14l1g2pzf2cgk0y8walalzcsq6jp9817hip9m41bhfpiirs6vxgg"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-bigdecimal-rs" ,rust-bigdecimal-rs-0.2)
-        ("rust-indexmap" ,rust-indexmap-1)
-        ("rust-nu-errors" ,rust-nu-errors-0.36)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.36)
-        ("rust-nu-source" ,rust-nu-source-0.36)
-        ("rust-nu-test-support"
-         ,rust-nu-test-support-0.36)
-        ("rust-nu-value-ext" ,rust-nu-value-ext-0.36)
-        ("rust-num-bigint" ,rust-num-bigint-0.3)
+       (("rust-indexmap" ,rust-indexmap-1)
+        ("rust-nu-errors" ,rust-nu-errors-0.43)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.43)
+        ("rust-nu-source" ,rust-nu-source-0.43)
+        ("rust-nu-test-support" ,rust-nu-test-support-0.43)
+        ("rust-nu-value-ext" ,rust-nu-value-ext-0.43)
         ("rust-serde" ,rust-serde-1)
         ("rust-serde-json" ,rust-serde-json-1))))
     (home-page "https://www.nushell.sh")
@@ -1537,30 +1452,30 @@ underline).")
     (description "Nushell Plugin")
     (license license:expat)))
 
-(define-public rust-nu-plugin-binaryview-0.36
+(define-public rust-nu-plugin-binaryview-0.43
   (package
     (name "rust-nu-plugin-binaryview")
-    (version "0.36.0")
+    (version "0.43.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_binaryview" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1ma52kw575bq5552x6pz5dzfwj1n33c1z27p9md0iw1zl1zc79zm"))))
+        (base32 "0kdsw7xkmd2gxrnga4q1xc80mw9z0birpm049xw2ivs3n0aqza6x"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-crossterm" ,rust-crossterm-0.19)
-        ("rust-image" ,rust-image-0.22)
+        ("rust-image" ,rust-image-0.23)
         ("rust-neso" ,rust-neso-0.5)
-        ("rust-nu-ansi-term" ,rust-nu-ansi-term-0.36)
-        ("rust-nu-errors" ,rust-nu-errors-0.36)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.36)
-        ("rust-nu-pretty-hex" ,rust-nu-pretty-hex-0.36)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.36)
-        ("rust-nu-source" ,rust-nu-source-0.36)
+        ("rust-nu-ansi-term" ,rust-nu-ansi-term-0.43)
+        ("rust-nu-errors" ,rust-nu-errors-0.43)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.43)
+        ("rust-nu-pretty-hex" ,rust-nu-pretty-hex-0.43)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.43)
+        ("rust-nu-source" ,rust-nu-source-0.43)
         ("rust-rawkey" ,rust-rawkey-0.1))))
     (home-page "https://www.nushell.sh")
     (synopsis "Binary viewer plugin for Nushell")
@@ -1568,28 +1483,28 @@ underline).")
      "This package provides a binary viewer plugin for Nushell.")
     (license license:expat)))
 
-(define-public rust-nu-plugin-chart-0.36
+(define-public rust-nu-plugin-chart-0.43
   (package
     (name "rust-nu-plugin-chart")
-    (version "0.36.0")
+    (version "0.43.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_chart" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0m8mvvnxipzxyigzfzb0xp4d8zb71lbxrs62k8jqkrb79j82rlfr"))))
+        (base32 "0lknhw3nc3nbqwyah161d2ksspbqfph2xaarxqiblzzlryg0kwvj"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-crossterm" ,rust-crossterm-0.19)
-        ("rust-nu-data" ,rust-nu-data-0.36)
-        ("rust-nu-errors" ,rust-nu-errors-0.36)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.36)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.36)
-        ("rust-nu-source" ,rust-nu-source-0.36)
-        ("rust-nu-value-ext" ,rust-nu-value-ext-0.36)
+        ("rust-nu-data" ,rust-nu-data-0.43)
+        ("rust-nu-errors" ,rust-nu-errors-0.43)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.43)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.43)
+        ("rust-nu-source" ,rust-nu-source-0.43)
+        ("rust-nu-value-ext" ,rust-nu-value-ext-0.43)
         ("rust-tui" ,rust-tui-0.15))))
     (home-page "https://www.nushell.sh")
     (synopsis "Plugin to display charts")
@@ -1597,58 +1512,27 @@ underline).")
      "This package provides a plugin to display charts in Nushell.")
     (license license:expat)))
 
-(define-public rust-nu-plugin-fetch-0.36
-  (package
-    (name "rust-nu-plugin-fetch")
-    (version "0.36.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (crate-uri "nu_plugin_fetch" version))
-       (file-name (string-append name "-" version ".tar.gz"))
-       (sha256
-        (base32 "1zi86kcsj7ys103w9q9f59p7nmjpssbdrkmj6dh60n2nbwcc9i49"))))
-    (build-system cargo-build-system)
-    (arguments
-     `(#:skip-build? #t
-       #:cargo-inputs
-       (("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.36)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.36)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.36)
-        ("rust-nu-source" ,rust-nu-source-0.36)
-        ("rust-surf" ,rust-surf-2)
-        ("rust-url" ,rust-url-2))))
-    (home-page "https://www.nushell.sh")
-    (synopsis "URL fetch plugin for Nushell")
-    (description "This package provides a URL fetch plugin for Nushell.")
-    (license license:expat)))
-
-(define-public rust-nu-plugin-from-bson-0.36
+(define-public rust-nu-plugin-from-bson-0.43
   (package
     (name "rust-nu-plugin-from-bson")
-    (version "0.36.0")
+    (version "0.43.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_from_bson" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "08pk0hcpkyg5i6z6k7bknwrn490sj9i7wn3cxpj53mxyb0lvjs06"))))
+        (base32 "1rdd5s82jdw1wr23s3020cm2gqm89zzbfb863bsysj88xa6mxr1s"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-bigdecimal-rs" ,rust-bigdecimal-rs-0.2)
-        ("rust-bson" ,rust-bson-0.14)
-        ("rust-nu-errors" ,rust-nu-errors-0.36)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.36)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.36)
-        ("rust-nu-source" ,rust-nu-source-0.36)
-        ("rust-nu-value-ext" ,rust-nu-value-ext-0.36)
-        ("rust-num-traits" ,rust-num-traits-0.2))))
+       (("rust-bigdecimal" ,rust-bigdecimal-0.3)
+        ("rust-bson" ,rust-bson-2)
+        ("rust-nu-errors" ,rust-nu-errors-0.43)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.43)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.43)
+        ("rust-nu-source" ,rust-nu-source-0.43))))
     (home-page "https://www.nushell.sh")
     (synopsis "Converter plugin to the bson format for Nushell")
     (description
@@ -1656,29 +1540,27 @@ underline).")
 Nushell.")
     (license license:expat)))
 
-(define-public rust-nu-plugin-from-sqlite-0.36
+(define-public rust-nu-plugin-from-sqlite-0.43
   (package
     (name "rust-nu-plugin-from-sqlite")
-    (version "0.36.0")
+    (version "0.43.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_from_sqlite" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1asbwimvj5fk9vafq67rfr13pg3sw53f97a56snspnlgx31v5zwn"))))
+        (base32 "0xfh4db0aap34aq9784zrprdk4cqqkf22v0z7mcw4a2jbranbz8z"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-bigdecimal-rs" ,rust-bigdecimal-rs-0.2)
-        ("rust-nu-errors" ,rust-nu-errors-0.36)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.36)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.36)
-        ("rust-nu-source" ,rust-nu-source-0.36)
-        ("rust-nu-value-ext" ,rust-nu-value-ext-0.36)
-        ("rust-num-traits" ,rust-num-traits-0.2)
-        ("rust-rusqlite" ,rust-rusqlite-0.25)
+       (("rust-bigdecimal" ,rust-bigdecimal-0.3)
+        ("rust-nu-errors" ,rust-nu-errors-0.43)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.43)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.43)
+        ("rust-nu-source" ,rust-nu-source-0.43)
+        ("rust-rusqlite" ,rust-rusqlite-0.26)
         ("rust-tempfile" ,rust-tempfile-3))))
     (home-page "https://www.nushell.sh")
     (synopsis "Converter plugin to the bson format for Nushell")
@@ -1687,28 +1569,27 @@ Nushell.")
 Nushell.")
     (license license:expat)))
 
-(define-public rust-nu-plugin-inc-0.36
+(define-public rust-nu-plugin-inc-0.43
   (package
     (name "rust-nu-plugin-inc")
-    (version "0.36.0")
+    (version "0.43.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_inc" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1vrvrdyhb9rvrbdaq25b1b9ibpwr52hz3p60kl3xn0zs437vqhzs"))))
+        (base32 "12d2rrw3z0791vg44h87xprkcxksqrhjk6jx23f8hpxfh3mg4llg"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-nu-errors" ,rust-nu-errors-0.36)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.36)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.36)
-        ("rust-nu-source" ,rust-nu-source-0.36)
-        ("rust-nu-test-support"
-         ,rust-nu-test-support-0.36)
-        ("rust-nu-value-ext" ,rust-nu-value-ext-0.36)
+       (("rust-nu-errors" ,rust-nu-errors-0.43)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.43)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.43)
+        ("rust-nu-source" ,rust-nu-source-0.43)
+        ("rust-nu-test-support" ,rust-nu-test-support-0.43)
+        ("rust-nu-value-ext" ,rust-nu-value-ext-0.43)
         ("rust-semver" ,rust-semver-0.11))))
     (home-page "https://www.nushell.sh")
     (synopsis "Version incrementer plugin for Nushell")
@@ -1717,25 +1598,24 @@ Nushell.")
 Nushell.")
     (license license:expat)))
 
-(define-public rust-nu-plugin-match-0.36
+(define-public rust-nu-plugin-match-0.43
   (package
     (name "rust-nu-plugin-match")
-    (version "0.36.0")
+    (version "0.43.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_match" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1lvmg155kriqgddhnmx2b7c2qsfsv75hdlb3wnrwlg8yqbl5kl9a"))))
+        (base32 "14ay1lwk1465dczpxk27silllv068l0gdyljwcbngz4y65ykh02y"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-nu-errors" ,rust-nu-errors-0.36)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.36)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.36)
-        ("rust-nu-source" ,rust-nu-source-0.36)
+       (("rust-nu-errors" ,rust-nu-errors-0.43)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.43)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.43)
         ("rust-regex" ,rust-regex-1))))
     (home-page "https://www.nushell.sh")
     (synopsis "Regex match plugin for Nushell")
@@ -1743,165 +1623,105 @@ Nushell.")
      "This package provides a regex match plugin for Nushell.")
     (license license:expat)))
 
-(define-public rust-nu-plugin-post-0.36
-  (package
-    (name "rust-nu-plugin-post")
-    (version "0.36.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (crate-uri "nu_plugin_post" version))
-       (file-name (string-append name "-" version ".tar.gz"))
-       (sha256
-        (base32 "0f1nh4227a5if3sg9214nqkd0ry6x79xvz2pgwqnbcwmps98nc26"))))
-    (build-system cargo-build-system)
-    (arguments
-     `(#:skip-build? #t
-       #:cargo-inputs
-       (("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.36)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.36)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.36)
-        ("rust-nu-source" ,rust-nu-source-0.36)
-        ("rust-num-traits" ,rust-num-traits-0.2)
-        ("rust-serde-json" ,rust-serde-json-1)
-        ("rust-surf" ,rust-surf-2)
-        ("rust-url" ,rust-url-2))))
-    (home-page "https://www.nushell.sh")
-    (synopsis "HTTP POST plugin for Nushell")
-    (description "This package is an HTTP POST plugin for Nushell.")
-    (license license:expat)))
-
-(define-public rust-nu-plugin-ps-0.36
-  (package
-    (name "rust-nu-plugin-ps")
-    (version "0.36.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (crate-uri "nu_plugin_ps" version))
-       (file-name (string-append name "-" version ".tar.gz"))
-       (sha256
-        (base32 "1hw6adsvsl1hpxyw06r0g9x1n14nkfin44ckxpr5605wbv89yrbx"))))
-    (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.36)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.36)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.36)
-        ("rust-nu-source" ,rust-nu-source-0.36)
-        ("rust-num-bigint" ,rust-num-bigint-0.3)
-        ("rust-sysinfo" ,rust-sysinfo-0.16))))
-    (home-page "https://www.nushell.sh")
-    (synopsis "Process list plugin for Nushell")
-    (description
-     "This package provides a process list plugin for Nushell.")
-    (license license:expat)))
-
-(define-public rust-nu-plugin-query-json-0.36
+(define-public rust-nu-plugin-query-json-0.43
   (package
     (name "rust-nu-plugin-query-json")
-    (version "0.36.0")
+    (version "0.43.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_query_json" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0ij135vx94gyaypryn24imgkq6r68j66d2nfymg98acn85ynv31q"))))
+        (base32 "0n30zp85kmy6diab79c6is1jvjw8y5g5bljh3fgq2nz42fvwng9y"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-gjson" ,rust-gjson-0.7)
-        ("rust-nu-errors" ,rust-nu-errors-0.36)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.36)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.36)
-        ("rust-nu-source" ,rust-nu-source-0.36))))
+       (("rust-gjson" ,rust-gjson-0.8)
+        ("rust-nu-errors" ,rust-nu-errors-0.43)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.43)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.43)
+        ("rust-nu-source" ,rust-nu-source-0.43))))
     (home-page "https://www.nushell.sh")
     (synopsis "Query JSON files with Gjson")
     (description "query json files with gjson")
     (license license:expat)))
 
-(define-public rust-nu-plugin-s3-0.36
+(define-public rust-nu-plugin-s3-0.43
   (package
     (name "rust-nu-plugin-s3")
-    (version "0.36.0")
+    (version "0.43.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_s3" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0yl1jkmr88ri22fzi78q5wqwv9j6589k0rsqydv5711dllkdgcp5"))))
+        (base32 "03ysj4zphwnyi537yia9ba706xn2ysv2jfm3z2w28flqb402jv0d"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-futures" ,rust-futures-0.3)
-        ("rust-nu-errors" ,rust-nu-errors-0.36)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.36)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.36)
-        ("rust-nu-source" ,rust-nu-source-0.36)
+        ("rust-nu-errors" ,rust-nu-errors-0.43)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.43)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.43)
+        ("rust-nu-source" ,rust-nu-source-0.43)
         ("rust-s3handler" ,rust-s3handler-0.7))))
     (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.36
+(define-public rust-nu-plugin-selector-0.43
   (package
     (name "rust-nu-plugin-selector")
-    (version "0.36.0")
+    (version "0.43.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_selector" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "02sx6mdwgnaixfrkglin2l5svly1mn58swp0c9zqvhqyp0k8f09r"))))
+        (base32 "1w886dcb5k96jryy64xmmsyay85nz2mshz4v3glpwvvqcrp2df1v"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-nipper" ,rust-nipper-0.1)
-        ("rust-nu-errors" ,rust-nu-errors-0.36)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.36)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.36)
-        ("rust-nu-source" ,rust-nu-source-0.36))))
+       (("rust-nu-errors" ,rust-nu-errors-0.43)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.43)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.43)
+        ("rust-nu-source" ,rust-nu-source-0.43)
+        ("rust-scraper" ,rust-scraper-0.12))))
     (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.36
+(define-public rust-nu-plugin-start-0.43
   (package
     (name "rust-nu-plugin-start")
-    (version "0.36.0")
+    (version "0.43.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_start" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0qk32snivd4r4jbmbmvx457qfvb2cycsl8l2bnghashh0x6jyc8b"))))
+        (base32 "060mw4r5dr8wd4cpmh0by953yc2zgxqfbzras1gv67p9cxwmjpjz"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-glob" ,rust-glob-0.3)
-        ("rust-nu-errors" ,rust-nu-errors-0.36)
-        ("rust-nu-errors" ,rust-nu-errors-0.36)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.36)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.36)
-        ("rust-nu-source" ,rust-nu-source-0.36)
-        ("rust-nu-source" ,rust-nu-source-0.36)
+        ("rust-nu-errors" ,rust-nu-errors-0.43)
+        ("rust-nu-errors" ,rust-nu-errors-0.43)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.43)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.43)
+        ("rust-nu-source" ,rust-nu-source-0.43)
+        ("rust-nu-source" ,rust-nu-source-0.43)
         ("rust-open" ,rust-open-1)
         ("rust-url" ,rust-url-2)
         ("rust-webbrowser" ,rust-webbrowser-0.5))))
@@ -1912,57 +1732,27 @@ Nushell.")
 Nushell.")
     (license license:expat)))
 
-(define-public rust-nu-plugin-sys-0.36
-  (package
-    (name "rust-nu-plugin-sys")
-    (version "0.36.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (crate-uri "nu_plugin_sys" version))
-       (file-name
-        (string-append name "-" version ".tar.gz"))
-       (sha256
-        (base32 "07jsg3a8s5aa9ykvfama7i3pkz947md7ryfvffpbrd66r0szxrag"))))
-    (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.36)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.36)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.36)
-        ("rust-nu-source" ,rust-nu-source-0.36)
-        ("rust-num-bigint" ,rust-num-bigint-0.3)
-        ("rust-sysinfo" ,rust-sysinfo-0.18))))
-    (home-page "https://www.nushell.sh")
-    (synopsis "System info plugin for Nushell")
-    (description "This package provides a system info plugin for Nushell.")
-    (license license:expat)))
-
-(define-public rust-nu-plugin-textview-0.36
+(define-public rust-nu-plugin-textview-0.43
   (package
     (name "rust-nu-plugin-textview")
-    (version "0.36.0")
+    (version "0.43.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_textview" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0bz6khgjvr8qbybg8hd8m26w5xd3g3xk9m2xpjmmgw5a5mvfdrck"))))
+        (base32 "1qhfyvrakqzngx824yrl94k71vzp6261z1ifp1nm8xmc09d63g1n"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("bat" ,bat)
-        ("rust-nu-ansi-term" ,rust-nu-ansi-term-0.36)
-        ("rust-nu-data" ,rust-nu-data-0.36)
-        ("rust-nu-errors" ,rust-nu-errors-0.36)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.36)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.36)
-        ("rust-nu-source" ,rust-nu-source-0.36)
+       (("rust-bat" ,rust-bat-0.18)
+        ("rust-nu-data" ,rust-nu-data-0.43)
+        ("rust-nu-errors" ,rust-nu-errors-0.43)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.43)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.43)
+        ("rust-nu-source" ,rust-nu-source-0.43)
         ("rust-term-size" ,rust-term-size-0.3)
         ("rust-url" ,rust-url-2))))
     (home-page "https://www.nushell.sh")
@@ -1971,27 +1761,26 @@ Nushell.")
 Nushell.")
     (license license:expat)))
 
-(define-public rust-nu-plugin-to-bson-0.36
+(define-public rust-nu-plugin-to-bson-0.43
   (package
     (name "rust-nu-plugin-to-bson")
-    (version "0.36.0")
+    (version "0.43.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_to_bson" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1kardsbic0wv8704m81cnbzlhs6qrb93130x30wfs89z400xfn43"))))
+        (base32 "04rlb6vajbhykx4wklfyffd0gfrpkdm0f59bz7vgnyw1wv7dgwln"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-bson" ,rust-bson-0.14)
-        ("rust-nu-errors" ,rust-nu-errors-0.36)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.36)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.36)
-        ("rust-nu-source" ,rust-nu-source-0.36)
-        ("rust-nu-value-ext" ,rust-nu-value-ext-0.36)
+       (("rust-bson" ,rust-bson-2)
+        ("rust-nu-errors" ,rust-nu-errors-0.43)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.43)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.43)
+        ("rust-nu-source" ,rust-nu-source-0.43)
         ("rust-num-traits" ,rust-num-traits-0.2))))
     (home-page "https://www.nushell.sh")
     (synopsis "Converter plugin to the bson format for Nushell")
@@ -2000,29 +1789,27 @@ Nushell.")
 Nushell.")
     (license license:expat)))
 
-(define-public rust-nu-plugin-to-sqlite-0.36
+(define-public rust-nu-plugin-to-sqlite-0.43
   (package
     (name "rust-nu-plugin-to-sqlite")
-    (version "0.36.0")
+    (version "0.43.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_to_sqlite" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "193prp16msshw3n2nfmlckphhkm7bzwrc3qza2g7s4mnyh7d88x5"))))
+        (base32 "08zdydpqk9xidq9qkrhk76dy05h65m8jz1ynk60g9k8fqn872bda"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-hex" ,rust-hex-0.4)
-        ("rust-nu-errors" ,rust-nu-errors-0.36)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.36)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.36)
-        ("rust-nu-source" ,rust-nu-source-0.36)
-        ("rust-nu-value-ext" ,rust-nu-value-ext-0.36)
-        ("rust-num-traits" ,rust-num-traits-0.2)
-        ("rust-rusqlite" ,rust-rusqlite-0.25)
+        ("rust-nu-errors" ,rust-nu-errors-0.43)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.43)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.43)
+        ("rust-nu-source" ,rust-nu-source-0.43)
+        ("rust-rusqlite" ,rust-rusqlite-0.26)
         ("rust-tempfile" ,rust-tempfile-3))))
     (home-page "https://www.nushell.sh")
     (synopsis "Converter plugin to the bson format for Nushell")
@@ -2031,54 +1818,53 @@ Nushell.")
 Nushell.")
     (license license:expat)))
 
-(define-public rust-nu-plugin-tree-0.36
+(define-public rust-nu-plugin-tree-0.43
   (package
     (name "rust-nu-plugin-tree")
-    (version "0.36.0")
+    (version "0.43.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_tree" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0vz8ncglzhq4nvbr3xi9zv3nqpgyf8vyxjnhjd9kjy91d0inj869"))))
+        (base32 "1mhk4vwrs0f70zya1dczkr1d366w32gj8y6byjrx0dpmqljm77w8"))))
     (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.36)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.36)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.36)
-        ("rust-nu-source" ,rust-nu-source-0.36)
-        ("rust-ptree" ,rust-ptree-0.3))))
+        ("rust-nu-errors" ,rust-nu-errors-0.43)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.43)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.43)
+        ("rust-ptree" ,rust-ptree-0.4))))
     (home-page "https://www.nushell.sh")
     (synopsis "Tree viewer plugin for Nushell")
     (description "This package provides a tree viewer plugin for
 Nushell.")
     (license license:expat)))
 
-(define-public rust-nu-plugin-xpath-0.36
+(define-public rust-nu-plugin-xpath-0.43
   (package
     (name "rust-nu-plugin-xpath")
-    (version "0.36.0")
+    (version "0.43.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_xpath" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "19dqw28y5qfpd8a432qkjjf1hmjh7ghsyr1dpb7jr8b0dv68h4lb"))))
+        (base32 "0b84idjp4hp60x4i5x605i6jryqjdmw4sxz6ddapf2rciyxvh0wg"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-bigdecimal-rs" ,rust-bigdecimal-rs-0.2)
+       (("rust-bigdecimal" ,rust-bigdecimal-0.3)
         ("rust-indexmap" ,rust-indexmap-1)
-        ("rust-nu-errors" ,rust-nu-errors-0.36)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.36)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.36)
-        ("rust-nu-source" ,rust-nu-source-0.36)
+        ("rust-nu-errors" ,rust-nu-errors-0.43)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.43)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.43)
+        ("rust-nu-source" ,rust-nu-source-0.43)
         ("rust-sxd-document" ,rust-sxd-document-0.3)
         ("rust-sxd-xpath" ,rust-sxd-xpath-0.4))))
     (home-page "https://www.nushell.sh")
@@ -2086,23 +1872,23 @@ Nushell.")
     (description "Traverses XML")
     (license license:expat)))
 
-(define-public rust-nu-pretty-hex-0.36
+(define-public rust-nu-pretty-hex-0.43
   (package
     (name "rust-nu-pretty-hex")
-    (version "0.36.0")
+    (version "0.43.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu-pretty-hex" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1d4qvry8xknlsqr1dmqjsfwz3l2avxwwa5jg9p3rrbwcqxppvsq1"))))
+        (base32 "04zqqpadx55782s85xh32cb9iss0q8q3alk5n17ic49pxlk7c3jz"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-heapless" ,rust-heapless-0.6)
-        ("rust-nu-ansi-term" ,rust-nu-ansi-term-0.36)
+       (("rust-heapless" ,rust-heapless-0.7)
+        ("rust-nu-ansi-term" ,rust-nu-ansi-term-0.43)
         ("rust-rand" ,rust-rand-0.8))))
     (home-page "https://www.nushell.sh")
     (synopsis "Pretty hex dump of bytes slice in the common style")
@@ -2111,65 +1897,61 @@ Nushell.")
 style.")
     (license license:expat)))
 
-(define-public rust-nu-protocol-0.36
+(define-public rust-nu-protocol-0.43
   (package
     (name "rust-nu-protocol")
-    (version "0.36.0")
+    (version "0.43.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu-protocol" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1r50ybwipk63ryq6zjkjym2dph84y7x26bmn679p9vcglys7rhn7"))))
+        (base32 "1z8kddg517ky85b22h1zm9wpka0p4838yn8s63iljpy67jyf4g04"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-bigdecimal-rs" ,rust-bigdecimal-rs-0.2)
+       (("rust-bigdecimal" ,rust-bigdecimal-0.3)
         ("rust-byte-unit" ,rust-byte-unit-4)
         ("rust-chrono" ,rust-chrono-0.4)
-        ("rust-chrono-humanize"
-         ,rust-chrono-humanize-0.2)
+        ("rust-chrono-humanize" ,rust-chrono-humanize-0.2)
         ("rust-derive-new" ,rust-derive-new-0.5)
         ("rust-getset" ,rust-getset-0.1)
         ("rust-indexmap" ,rust-indexmap-1)
         ("rust-log" ,rust-log-0.4)
-        ("rust-nu-errors" ,rust-nu-errors-0.36)
-        ("rust-nu-source" ,rust-nu-source-0.36)
-        ("rust-num-bigint" ,rust-num-bigint-0.3)
+        ("rust-nu-errors" ,rust-nu-errors-0.43)
+        ("rust-nu-source" ,rust-nu-source-0.43)
+        ("rust-num-bigint" ,rust-num-bigint-0.4)
         ("rust-num-integer" ,rust-num-integer-0.1)
         ("rust-num-traits" ,rust-num-traits-0.2)
-        ("rust-polars" ,rust-polars-0.15)
+        ("rust-polars" ,rust-polars-0.17)
         ("rust-serde" ,rust-serde-1)
-        ("rust-serde-bytes" ,rust-serde-bytes-0.11)
-        ("rust-serde-json" ,rust-serde-json-1)
-        ("rust-serde-yaml" ,rust-serde-yaml-0.8)
-        ("rust-toml" ,rust-toml-0.5))))
+        ("rust-serde-bytes" ,rust-serde-bytes-0.11))))
     (home-page "https://www.nushell.sh")
     (synopsis "Core values and protocols for Nushell")
     (description "Core values and protocols for Nushell")
     (license license:expat)))
 
-(define-public rust-nu-serde-0.36
+(define-public rust-nu-serde-0.43
   (package
     (name "rust-nu-serde")
-    (version "0.36.0")
+    (version "0.43.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu-serde" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1271qkyphjd3w5as0kwkdzmhcv0fx5j2nak07mm476qf63naprhz"))))
+        (base32 "0iwwqyi4zq7m6v15kfdk7ywi816i4w400jm97a9w53jriyl4finl"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-bigdecimal-rs" ,rust-bigdecimal-rs-0.2)
+       (("rust-bigdecimal" ,rust-bigdecimal-0.3)
         ("rust-insta" ,rust-insta-1)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.36)
-        ("rust-nu-source" ,rust-nu-source-0.36)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.43)
+        ("rust-nu-source" ,rust-nu-source-0.43)
         ("rust-serde" ,rust-serde-1)
         ("rust-thiserror" ,rust-thiserror-1))))
     (home-page "https://www.nushell.sh")
@@ -2179,17 +1961,17 @@ style.")
 Serde.")
     (license license:expat)))
 
-(define-public rust-nu-source-0.36
+(define-public rust-nu-source-0.43
   (package
     (name "rust-nu-source")
-    (version "0.36.0")
+    (version "0.43.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu-source" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0vs05k2ld5big5byf083wnb2i0pvz0lpmgp34vmw8x5ca4aw4hij"))))
+        (base32 "1h5lwck4yfi3c0f4p94yl30qzhbii10flcksj5g1vrra6vlasaq2"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -2206,80 +1988,80 @@ Serde.")
 Nushell.")
     (license license:expat)))
 
-(define-public rust-nu-stream-0.36
+(define-public rust-nu-stream-0.43
   (package
     (name "rust-nu-stream")
-    (version "0.36.0")
+    (version "0.43.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu-stream" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0siqhyxdbl9zpyxkdlysrd1369lrvikp72awx7pii5dzvgv2aaaj"))))
+        (base32 "11v103gnwp4jxvwmk6dj93yrr6dqxl3r3yhfzlb0q416ai0x4h3k"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-futures" ,rust-futures-0.3)
-        ("rust-nu-errors" ,rust-nu-errors-0.36)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.36)
-        ("rust-nu-source" ,rust-nu-source-0.36))))
+       (("rust-nu-errors" ,rust-nu-errors-0.43)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.43)
+        ("rust-nu-source" ,rust-nu-source-0.43))))
     (home-page "https://www.nushell.sh")
     (synopsis "Nushell stream")
     (description "This package provides Nushell stream.")
     (license license:expat)))
 
-(define-public rust-nu-table-0.36
+(define-public rust-nu-table-0.43
   (package
     (name "rust-nu-table")
-    (version "0.36.0")
+    (version "0.43.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu-table" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1akxq806gix38b6663ijs02ma0zbzq9yvyvr39bgjyikyqahwkpw"))))
+        (base32 "1h2lh6px63bwxi5b9db5b7mgjdqdaj2yp1p0zrzdqj4i80h3dvww"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-nu-ansi-term" ,rust-nu-ansi-term-0.36)
+       (("rust-atty" ,rust-atty-0.2)
+        ("rust-nu-ansi-term" ,rust-nu-ansi-term-0.43)
         ("rust-regex" ,rust-regex-1)
+        ("rust-strip-ansi-escapes" ,rust-strip-ansi-escapes-0.1)
         ("rust-unicode-width" ,rust-unicode-width-0.1))))
     (home-page "https://www.nushell.sh")
     (synopsis "Nushell table printing")
     (description "Nushell table printing")
     (license license:expat)))
 
-(define-public rust-nu-test-support-0.36
+(define-public rust-nu-test-support-0.43
   (package
     (name "rust-nu-test-support")
-    (version "0.36.0")
+    (version "0.43.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu-test-support" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0ip2fm8r26s5y0qbfn8r7yhacg82aa998kyic70y60j9kmnwk4q1"))))
+        (base32 "10c4jwlvc2804afjdmpr30ml2h9f40g20gllz31lk1vz8ssr426m"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-bigdecimal-rs" ,rust-bigdecimal-rs-0.2)
+       (("rust-bigdecimal" ,rust-bigdecimal-0.3)
         ("rust-chrono" ,rust-chrono-0.4)
-        ("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.36)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.36)
-        ("rust-nu-source" ,rust-nu-source-0.36)
-        ("rust-nu-value-ext" ,rust-nu-value-ext-0.36)
-        ("rust-num-bigint" ,rust-num-bigint-0.3)
+        ("rust-nu-errors" ,rust-nu-errors-0.43)
+        ("rust-nu-path" ,rust-nu-path-0.43)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.43)
+        ("rust-nu-source" ,rust-nu-source-0.43)
+        ("rust-num-bigint" ,rust-num-bigint-0.4)
         ("rust-tempfile" ,rust-tempfile-3))))
     (home-page "https://www.nushell.sh")
     (synopsis "Support for writing Nushell tests")
@@ -2287,10 +2069,10 @@ Nushell.")
 tests.")
     (license license:expat)))
 
-(define-public rust-nu-value-ext-0.36
+(define-public rust-nu-value-ext-0.43
   (package
     (name "rust-nu-value-ext")
-    (version "0.36.0")
+    (version "0.43.0")
     (source
      (origin
        (method url-fetch)
@@ -2298,16 +2080,16 @@ tests.")
        (file-name
         (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1cd09378h4lfb58s0dl87mgiwldfk60h9z1a0vi4v7k10v9xhsis"))))
+        (base32 "03ix958321smsf5j57y36qv9k47isfwvh2aam9ar5qfy6sb1h5k9"))))
     (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.36)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.36)
-        ("rust-nu-source" ,rust-nu-source-0.36)
+        ("rust-nu-errors" ,rust-nu-errors-0.43)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.43)
+        ("rust-nu-source" ,rust-nu-source-0.43)
         ("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/shellutils.scm b/gnu/packages/shellutils.scm
index 94b5536df7..3f9f8a27f4 100644
--- a/gnu/packages/shellutils.scm
+++ b/gnu/packages/shellutils.scm
@@ -10,6 +10,10 @@
 ;;; Copyright © 2020 aecepoglu <aecepoglu@fastmail.fm>
 ;;; Copyright © 2020 Dion Mendel <guix@dm9.info>
 ;;; Copyright © 2021 Brice Waegeneire <brice@waegenei.re>
+;;; Copyright © 2021 Alexandr Vityazev <avityazev@posteo.org>
+;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
+;;; Copyright © 2021 Foo Chuan Wei <chuanwei.foo@hotmail.com>
+;;; Copyright © 2021 Wiktor Żelazny <wzelazny@vurv.cz>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -28,6 +32,7 @@
 
 (define-module (gnu packages shellutils)
   #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix gexp)
   #:use-module (guix utils)
   #:use-module (guix packages)
   #:use-module (guix download)
@@ -38,20 +43,63 @@
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
   #:use-module (gnu packages bison)
+  #:use-module (gnu packages check)
   #:use-module (gnu packages flex)
   #:use-module (gnu packages golang)
+  #:use-module (gnu packages libunistring)
   #:use-module (gnu packages ncurses)
+  #:use-module (gnu packages pcre)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages ruby)
   #:use-module (gnu packages shells)
-  #:use-module (gnu packages tmux))
+  #:use-module (gnu packages tmux)
+  #:use-module (gnu packages vim))
+
+(define-public ascii
+  (package
+    (name "ascii")
+    (version "3.18")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://www.catb.org/~esr/ascii/"
+                                  "ascii-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0b87vy06s8s3a8q70pqavsbk4m4ff034sdml2xxa6qfsykaj513j"))))
+    (build-system gnu-build-system)
+    (arguments `(#:make-flags
+                 (list (string-append "CC=" ,(cc-for-target))
+                       (string-append "PREFIX=" %output))
+                 #:phases
+                 (modify-phases %standard-phases
+                   (delete 'configure)
+                   (add-before 'install 'create-directories
+                     (lambda* (#:key outputs #:allow-other-keys)
+                       (let* ((out (assoc-ref outputs "out"))
+                              (bin (string-append out "/bin"))
+                              (man1 (string-append out "/share/man/man1")))
+                         (mkdir-p bin)
+                         (mkdir-p man1)))))
+                 #:tests? #f))
+    (home-page "http://www.catb.org/~esr/ascii/")
+    (synopsis "ASCII name and synonym chart")
+    (description
+      "The @code{ascii} utility provides easy conversion between various byte
+representations and the American Standard Code for Information Interchange
+(ASCII) character table.  It knows about a wide variety of hex, binary, octal,
+Teletype mnemonic, ISO/ECMA code point, slang names, XML entity names, and
+other representations.  Given any one on the command line, it will try to
+display all others.  Called with no arguments it displays a handy small ASCII
+chart.")
+    (license license:bsd-2)))
 
 (define-public boxes
   (package
     (name "boxes")
-    (version "1.3")
+    (version "2.1.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -60,32 +108,40 @@
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0b12rsynrmkldlwcb62drk33kk0aqwbj10mq5y5x3hjf626gjwsi"))))
+                "1bf5rnfiw04ffs1l17zhbg4wvq2vfn2qbz1xmd250xqj15lysw88"))))
     (build-system gnu-build-system)
     (arguments
      `(#:test-target "test"
        #:make-flags (list (string-append "GLOBALCONF="
                                          (assoc-ref %outputs "out")
                                          "/etc/boxes-config"))
+       #:modules
+       ((ice-9 match)
+        ,@%gnu-build-system-modules)
        #:phases
        (modify-phases %standard-phases
          (delete 'configure)
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
-             (let ((dest (assoc-ref outputs "out")))
-               (for-each (lambda (x)
-                           (install-file (car x)
-                                         (string-append dest "/" (cdr x))))
-                         '(("src/boxes" . "bin")
-                           ("doc/boxes.1" . "share/man/man1")
-                           ("boxes-config" . "etc/")))
-               #t))))))
-    (native-inputs `(("flex" ,flex) ("bison" ,bison)))
+             (let ((out (assoc-ref outputs "out")))
+               (for-each (match-lambda
+                           ((source target)
+                            (install-file source
+                                          (string-append out "/" target))))
+                         '(("out/boxes"    "bin/")
+                           ("doc/boxes.1"  "share/man/man1/")
+                           ("boxes-config" "etc/")))))))))
+    (native-inputs
+     (list bison flex
+           ;; For the tests.
+           xxd))
+    (inputs
+     (list libunistring pcre2))
+    (home-page "https://boxes.thomasjensen.com")
     (synopsis "Command line ASCII boxes")
     (description
      "This command-line filter program draws ASCII-art boxes around your input
 text.")
-    (home-page "https://boxes.thomasjensen.com/build.html")
     (license license:gpl2)))
 
 (define-public zsh-autosuggestions
@@ -103,13 +159,13 @@ text.")
                 "1g3pij5qn2j7v7jjac2a63lxd97mcsgw6xq6k5p7835q9fjiid98"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("ruby" ,ruby)
-       ("ruby-byebug" ,ruby-byebug)
-       ("ruby-pry" ,ruby-pry)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-rspec-wait" ,ruby-rspec-wait)
-       ("tmux" ,tmux)
-       ("zsh" ,zsh)))
+     (list ruby
+           ruby-byebug
+           ruby-pry
+           ruby-rspec
+           ruby-rspec-wait
+           tmux
+           zsh))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -138,6 +194,57 @@ text.")
 as you type.")
     (license license:expat)))
 
+(define-public zsh-syntax-highlighting
+  (package
+    (name "zsh-syntax-highlighting")
+    (version "0.7.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/zsh-users/zsh-syntax-highlighting")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "039g3n59drk818ylcyvkciv8k9mf739cv6v4vis1h9fv9whbcmwl"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     (list zsh))
+    (arguments
+     ;; FIXME: Tests fail when running test regexp
+     ;; there is no pcre module in the Guix zsh package
+     `(#:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (add-after 'unpack 'patch-paths
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (substitute* "Makefile"
+                 (("/usr/local") out)
+                 (("share/\\$\\(NAME\\)") "share/zsh/plugins/$(NAME)")))))
+         (add-after 'patch-paths 'make-writable
+           (lambda _
+             (for-each make-file-writable
+                       '("docs/highlighters.md"
+                         "README.md"))))
+         (add-before 'build 'add-all-md
+           (lambda _
+             (invoke "make" "all")))
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "make" "test")
+               (invoke "make" "perf")))))))
+    (home-page "https://github.com/zsh-users/zsh-syntax-highlighting")
+    (synopsis "Fish shell-like syntax highlighting for Zsh")
+    (description
+     "This package provides syntax highlighting for Zsh.  It enables
+highlighting of commands whilst they are typed at a Zsh prompt into an
+interactive terminal.  This helps in reviewing commands before running them,
+particularly in catching syntax errors.")
+    (license license:bsd-3)))
+
 (define-public sh-z
   (package
     (name "sh-z")
@@ -203,19 +310,20 @@ between various shells or commands.")
 (define-public trash-cli
   (package
     (name "trash-cli")
-    (version "0.17.1.14")
+    (version "0.21.10.24")
     (source
      (origin
-       (method url-fetch)
-       (uri (pypi-uri "trash-cli" version))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/andreafrancia/trash-cli")
+             (commit version)))
+       (file-name (git-file-name name version))
        (sha256
         (base32
-         "01q0cl04ljf214z6s3g256gsxx3pqsgaf6ac1zh0vrq5bnhnr85h"))))
+         "01is32lk6prwhajvlmgn3xs4fcpmiqivizcqkj9k80jx6mqjifzs"))))
     (build-system python-build-system)
     (arguments
-     `(#:python ,python-2
-       #:tests? #f ; no tests
-       #:phases
+     `(#:phases
        (modify-phases %standard-phases
          (add-before 'build 'patch-path-constants
            (lambda* (#:key inputs #:allow-other-keys)
@@ -225,8 +333,22 @@ between various shells or commands.")
                  (("\"/lib/libc.so.6\".*")
                   (string-append "\"" libc "/lib/libc.so.6\"\n"))
                  (("\"df\"")
-                  (string-append "\"" coreutils "/bin/df\"")))))))))
-    (inputs `(("coreutils" ,coreutils)))
+                  (string-append "\"" coreutils "/bin/df\""))))))
+         (add-before 'build 'fix-setup.py
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin")))
+               (mkdir-p bin)
+               (substitute* "setup.py"
+                 (("add_script\\('")
+                  (string-append "add_script('" bin "/" )))))))))
+    (native-inputs
+     (list python-pytest
+           python-mock
+           python-six))
+    (inputs (list coreutils))
+    (propagated-inputs
+     (list python-psutil))
     (home-page "https://github.com/andreafrancia/trash-cli")
     (synopsis "Trash can management tool")
     (description
@@ -239,7 +361,7 @@ are already there.")
 (define-public direnv
   (package
     (name "direnv")
-    (version "2.15.2")
+    (version "2.28.0")
     (source
      (origin (method git-fetch)
              (uri (git-reference
@@ -248,18 +370,12 @@ are already there.")
              (file-name (git-file-name name version))
              (sha256
               (base32
-               "1y18619pmhfl0vrf4w0h75ybkkwgi9wcb7d9kv4n8drg1xp4aw4w"))))
+               "0yk53jn7wafklixclka17wyjjs2g5giigjr2bd0xzy10nrzwp7c9"))))
     (build-system go-build-system)
     (arguments
      '(#:import-path "github.com/direnv/direnv"
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'delete-vendor
-           (lambda _
-             ;; Using a snippet causes issues with the name of the directory,
-             ;; so delete the extra source code here.
-             (delete-file-recursively "src/github.com/direnv/direnv/vendor")
-             #t))
          (add-after 'install 'install-manpages
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -277,15 +393,16 @@ are already there.")
                  ;; The following file needs to be writable so it can be
                  ;; modified by the testsuite.
                  (make-file-writable "test/scenarios/base/.envrc")
-                 (invoke "make" "test")
+                 ;; We need to manually run test because make test
+                 ;; tries to use go modules
+                 (invoke "go" "test" "./...")
                  ;; Clean up from the tests, especially so that the extra
                  ;; direnv executable that's generated is removed.
                  (invoke "make" "clean")))
              #t)))))
     (native-inputs
-     `(("go-github-com-burntsushi-toml" ,go-github-com-burntsushi-toml)
-       ("go-github-com-direnv-go-dotenv" ,go-github-com-direnv-go-dotenv)
-       ("which" ,which)))
+     (list go-github-com-burntsushi-toml go-github-com-direnv-go-dotenv
+           go-github-com-mattn-go-isatty go-golang-org-x-mod which))
     (home-page "https://direnv.net/")
     (synopsis "Environment switcher for the shell")
     (description
@@ -336,7 +453,7 @@ below the current cursor position, scrolling the screen if necessary.")
 (define-public hstr
   (package
     (name "hstr")
-    (version "2.3")
+    (version "2.5")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -345,7 +462,7 @@ below the current cursor position, scrolling the screen if necessary.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1chmfdi1dwg3sarzd01nqa82g65q7wdr6hrnj96l75vikwsg986y"))))
+                "0xg10jyiq12bcygi6aa9qq9pki7bipdsvsza037p2iqix19jg0x8"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -359,12 +476,9 @@ below the current cursor position, scrolling the screen if necessary.")
                  (("ncursesw\\/curses.h") "ncurses.h")))
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config))
     (inputs
-     `(("ncurses" ,ncurses)
-       ("readline" ,readline)))
+     (list ncurses readline))
     (synopsis "Navigate and search command history with shell history suggest box")
     (description "HSTR (HiSToRy) is a command-line utility that brings
 improved Bash and Zsh command completion from the history.  It aims to make
@@ -398,3 +512,161 @@ the UNIX philosophy, these commands are designed to be composed via pipes. A
 large collection of functions such as basename, replace, contains or is_dir
 are provided as arguments to these commands.")
     (license license:expat)))
+
+(define-public rig
+  (package
+    (name "rig")
+    (version "1.11")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://sourceforge/rig/rig/"
+                                  version "/rig-"
+                                  version ".tar.gz"))
+              (sha256
+                (base32
+                  "1f3snysjqqlpk2kgvm5p2icrj4lsdymccmn3igkc2f60smqckgq0"))))
+    (build-system gnu-build-system)
+    (arguments `(#:make-flags
+                 (list (string-append "CXX=" ,(cxx-for-target))
+                       (string-append "PREFIX=" %output))
+                 #:phases
+                 (modify-phases %standard-phases
+                   (delete 'configure)
+                   (add-after 'unpack 'fix-build
+                     (lambda _
+                       (substitute* "rig.cc"
+                         (("^#include <string>")
+                          "#include <cstring>"))
+                       (substitute* "Makefile"
+                         (("g\\+\\+")
+                          "${CXX} -O2")
+                         (("install -g 0 -m 755 -o 0 -s rig \\$\\(BINDIR\\)")
+                          "install -m 755 -d $(DESTDIR)$(BINDIR)\n\t\
+install -m 755 rig $(DESTDIR)$(BINDIR)/rig")
+                         (("install -g 0 -m 644 -o 0 rig.6 \\$\\(MANDIR\\)/man6/rig.6")
+                          "install -m 755 -d $(DESTDIR)$(MANDIR)/man6/\n\t\
+install -m 644 rig.6 $(DESTDIR)$(MANDIR)/man6/rig.6")
+                         (("install -g 0 -m 755 -o 0 -d \\$\\(DATADIR\\)")
+                          "install -m 755 -d $(DESTDIR)$(DATADIR)")
+                         (("install -g 0 -m 644 -o 0 data/\\*.idx \\$\\(DATADIR\\)")
+                          "install -m 644 data/*.idx $(DESTDIR)$(DATADIR)")))))
+                 #:tests? #f))
+    (home-page "http://rig.sourceforge.net")
+    (synopsis "Random identity generator")
+    (description
+      "RIG (Random Identity Generator) generates random, yet real-looking,
+personal data.  It is useful if you need to feed a name to a Web site, BBS, or
+real person, and are too lazy to think of one yourself.  Also, if the Web
+site/BBS/person you are giving the information to tries to cross-check the
+city, state, zip, or area code, it will check out.")
+    (license license:gpl2+)))
+
+(define-public conflict
+  (package
+    (name "conflict")
+    (version "20210108")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://invisible-mirror.net/archives/conflict/conflict-"
+                    version ".tgz"))
+              (sha256
+               (base32
+                "0mls4climvp7v9hnc3zh01mh270kqcj797ng0xslwb027lipis4h"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-paths
+           (lambda _
+             (substitute* "run_test.sh"
+               (("PATH=\".:\\$BIN:/bin\"")
+                "PATH=\".:$BIN:$PATH\"")))))))
+    (home-page "https://invisible-island.net/conflict/conflict.html")
+    (synopsis "Displays conflicting filenames in your execution path")
+    (description
+     "@code{conflict} examines the user-specifiable list of programs, looking
+for instances in the user's path which conflict (i.e., the name appears in
+more than one point in the path).")
+    (license (license:x11-style "file://COPYING"))))
+
+(define-public renameutils
+  (package
+    (name "renameutils")
+    (version "0.12.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://savannah/renameutils/"
+                           "renameutils-" version ".tar.gz"))
+       (sha256
+        (base32
+         "18xlkr56jdyajjihcmfqlyyanzyiqqlzbhrm6695mkvw081g1lnb"))
+       (modules '((guix build utils)))
+       (snippet '(begin
+                   (substitute* "src/Makefile.in"
+                     (("\\(\\$bindir\\)") "$(bindir)"))
+                   #t))))
+    (build-system gnu-build-system)
+    (inputs
+     (list readline))
+    (home-page "https://www.nongnu.org/renameutils/")
+    (synopsis "File renaming utilities")
+    (description "The file renaming utilities (renameutils for short) are a
+set of programs designed to make renaming of files faster and less cumbersome.
+The file renaming utilities consists of five programs: @command{qmv},
+@command{qcp}, @command{imv}, @command{icp}, and @command{deurlname}.")
+    (license license:gpl3+)))
+
+(define-public grc
+  (package
+    (name "grc")
+    (version "1.13")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/garabik/grc")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1h0h88h484a9796hai0wasi1xmjxxhpyxgixn6fgdyc5h69gv8nl"))))
+    (build-system gnu-build-system)
+    (inputs
+     (list python))
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (delete 'configure)
+          (replace 'build
+            (lambda _
+              (substitute* "grc"
+                (("conffilenames = \\[.*\\]")
+                 (string-append
+                  "conffilenames = ["
+                  "os.environ.get('GUIX_ENVIRONMENT', '" #$output "') "
+                  "+ '/etc/grc.conf']")))
+              (substitute* "grcat"
+                (("conffilepath \\+= \\['/usr/.*\\]")
+                 (string-append
+                  "conffilepath += ["
+                  "os.environ.get('GUIX_ENVIRONMENT', '" #$output "') "
+                  "+ '/share/grc/']"))))) ;; trailing slash!
+          (delete 'check)
+          (replace 'install
+            (lambda _
+              (invoke "sh" "install.sh" #$output #$output))))))
+    (home-page "http://kassiopeia.juls.savba.sk/~garabik/software/grc.html")
+    (synopsis "Generic colouriser for everything")
+    (description "@code{grc} can be used to colourise logfiles, output of
+shell commands, arbitrary text, etc.  Many shell commands are supported out of
+the box.
+
+You might want to add these lines you your @code{~/.bashrc}:
+@example
+GRC_ALIASES=true
+source ${GUIX_ENVIRONMENT:-$HOME/.guix-profile}/etc/profile.d/grc.sh
+@end example
+")
+    (license license:gpl2)))
diff --git a/gnu/packages/simh.scm b/gnu/packages/simh.scm
index b911b30b00..81d26bbde0 100644
--- a/gnu/packages/simh.scm
+++ b/gnu/packages/simh.scm
@@ -40,7 +40,7 @@
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (inputs
-     `(("libpcap" ,libpcap)))
+     (list libpcap))
     (arguments
      '(#:tests? #f
        #:make-flags (list
diff --git a/gnu/packages/simulation.scm b/gnu/packages/simulation.scm
index 23580322bb..240549be47 100644
--- a/gnu/packages/simulation.scm
+++ b/gnu/packages/simulation.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017, 2018, 2019, 2020, 2021 Paul Garlick <pgarlick@tourbillion-technology.com>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -100,11 +101,9 @@
        ("scotch" ,pt-scotch32)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("bison" ,bison)))
+     (list bison))
     (propagated-inputs
-     `(("gzip" ,gzip)
-       ("gnuplot" ,gnuplot)
-       ("openmpi" ,openmpi)))
+     (list gzip gnuplot openmpi))
     (outputs '("debug"                  ;~60MB
                "out"))
     (arguments
@@ -256,12 +255,11 @@ problems for efficient solution on parallel systems.")
             "0lhqsq8ypdak0ahr2jnyvg07yrqp6wicjxi6k56zx24wp3qg60sc"))))
     (build-system python-build-system)
     (inputs
-     `(("openmpi" ,openmpi)
-       ("python-numpy" ,python-numpy)))
+     (list openmpi python-numpy))
     (native-inputs
-     `(("python-pytest-cov" ,python-pytest-cov)))
+     (list python-pytest-cov))
     (propagated-inputs
-     `(("python-mpi4py" ,python-mpi4py)))
+     (list python-mpi4py))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -270,16 +268,13 @@ problems for efficient solution on parallel systems.")
          (replace 'check
            (lambda _
              (setenv "HOME" "/tmp")
-             (setenv "PYTHONPATH"
-                     (string-append (getcwd) ":" (getenv "PYTHONPATH")))
              (with-directory-excursion "test"
                ;; Disable parallel tests to avoid race condition.  See
                ;; https://github.com/pytest-dev/pytest-cov/issues/237.
                (substitute* "runtests.sh"
                  (("for p in 1 4 8 16; do")
                   "for p in 1; do"))
-               (invoke "./runtests.sh"))
-             #t)))))
+               (invoke "./runtests.sh")))))))
     (home-page "https://bitbucket.org/fenics-project/dijitso/")
     (synopsis "Distributed just-in-time building of shared libraries")
     (description
@@ -307,19 +302,15 @@ the complexity of that interface.  Parallel support depends on the
             "10dz8x3lm68x2w3kkqcjask38h0zkhhak26jdbkppr8g9y8wny7p"))))
     (build-system python-build-system)
     (inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (setenv "PYTHONPATH"
-                     (string-append (getcwd) ":" (getenv "PYTHONPATH")))
-             (with-directory-excursion "test"
-               (invoke "py.test"))
-             #t)))))
+             (invoke "py.test" "test"))))))
     (home-page "https://bitbucket.org/fenics-project/ufl/")
     (synopsis "Unified language for form-compilers")
     (description "The Unified Form Language (UFL) is a domain specific
@@ -344,17 +335,14 @@ UFL is part of the FEniCS Project.")
             "13sc7lma3d2mh43an7i4kkdbbk4cmvxjk45wi43xnjd7qc38zg4b"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-sympy" ,python-sympy)))
+     (list python-numpy python-sympy))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (setenv "PYTHONPATH"
-                     (string-append (getcwd) ":" (getenv "PYTHONPATH")))
              (with-directory-excursion "test"
                ;; FIXME: three FIAT test modules are known to fail
                ;; with recent versions of pytest (>= 4).  These are
@@ -364,8 +352,7 @@ UFL is part of the FEniCS Project.")
                (invoke "py.test" "unit/"
                        "--ignore=unit/test_fiat.py"
                        "--ignore=unit/test_quadrature.py"
-                       "--ignore=unit/test_reference_element.py"))
-             #t)))))
+                       "--ignore=unit/test_reference_element.py")))))))
     (home-page "https://bitbucket.org/fenics-project/fiat/")
     (synopsis "Tabulation of finite element function spaces")
     (description
@@ -394,19 +381,15 @@ FIAT is part of the FEniCS Project.")
             "1f2a44ha65fg3a1prrbrsz4dgvibsv0j5c3pi2m52zi93bhwwgg9"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (propagated-inputs
-     `(("python-fenics-dijitso" ,python-fenics-dijitso)
-       ("python-fenics-fiat" ,python-fenics-fiat)
-       ("python-fenics-ufl" ,python-fenics-ufl)))
+     (list python-fenics-dijitso python-fenics-fiat python-fenics-ufl))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
              (setenv "HOME" (getcwd))
-             (setenv "PYTHONPATH"
-                     (string-append (getcwd) ":" (getenv "PYTHONPATH")))
              (with-directory-excursion "test"
                ;; FIXME: the tests in subdirectory
                ;; 'unit/ufc/finite_element' require the ffc_factory
@@ -631,8 +614,7 @@ user interface to the FEniCS core components and external libraries.")
              ;; Define paths to store locations.
              (setenv "PYBIND11_DIR" (assoc-ref %build-inputs "pybind11"))
              ;; Move to python sub-directory.
-             (chdir "python")
-             #t))
+             (chdir "python")))
          (add-after 'build 'mpi-setup
            ,%openmpi-setup)
          (add-before 'check 'pre-check
@@ -674,14 +656,8 @@ user interface to the FEniCS core components and external libraries.")
                  "d for d in demos if d[0].stem not in "
                  "excludeList]\n")))
              (setenv "HOME" (getcwd))
-             (setenv "PYTHONPATH"
-                     (string-append
-                      (getcwd) "/build/lib.linux-x86_64-"
-                      ,(version-major+minor (package-version python)) ":"
-                      (getenv "PYTHONPATH")))
              ;; Restrict OpenBLAS to MPI-only in preference to MPI+OpenMP.
-             (setenv "OPENBLAS_NUM_THREADS" "1")
-             #t))
+             (setenv "OPENBLAS_NUM_THREADS" "1")))
          (replace 'check
            (lambda _
              (with-directory-excursion "test"
@@ -693,8 +669,7 @@ user interface to the FEniCS core components and external libraries.")
                                        (min 3 (parallel-job-count)))
                        "python" "-B" "-m"
                        "pytest" "unit" "--ignore"
-                       "unit/nls/test_PETScSNES_solver.py"))
-             #t))
+                       "unit/nls/test_PETScSNES_solver.py"))))
          (add-after 'install 'install-demo-files
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((demos (string-append
@@ -708,8 +683,7 @@ user interface to the FEniCS core components and external libraries.")
                                (unless (equal? "." dir)
                                  (mkdir-p tgt-dir)
                                  (install-file file tgt-dir))))
-                           (find-files "." ".*\\.(py|gz|xdmf)$"))))
-             #t)))))
+                           (find-files "." ".*\\.(py|gz|xdmf)$")))))))))
     (home-page "https://fenicsproject.org/")
     (synopsis "High-level environment for solving differential equations")
     (description
@@ -745,7 +719,7 @@ FEniCS core components and external libraries.")
                  "16v08dx7h7n4wyddzbwimazwyj74ynis12mpjfkay4243npy44b8"))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("inetutils" ,inetutils))) ; for 'hostname', used in the check phase
+       (list inetutils)) ; for 'hostname', used in the check phase
       (arguments
        `(#:phases
          (modify-phases %standard-phases
@@ -925,16 +899,14 @@ command-line utility for mesh optimisation.")
             #t))))
     (build-system python-build-system)
     (inputs
-     `(("fenics" ,fenics)
-       ("openmpi" ,openmpi)
-       ("pybind11" ,pybind11)))
+     (list fenics openmpi pybind11))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python-coverage" ,python-coverage)
-       ("python-decorator" ,python-decorator)
-       ("python-flake8" ,python-flake8)
-       ("python-pkgconfig" ,python-pkgconfig)
-       ("python-pytest" ,python-pytest)))
+     (list pkg-config
+           python-coverage
+           python-decorator
+           python-flake8
+           python-pkgconfig
+           python-pytest))
     (propagated-inputs
      `(("scipy" ,python-scipy)))
     (arguments
diff --git a/gnu/packages/skarnet.scm b/gnu/packages/skarnet.scm
index b38d3f418f..31349e858b 100644
--- a/gnu/packages/skarnet.scm
+++ b/gnu/packages/skarnet.scm
@@ -30,14 +30,14 @@
 (define-public skalibs
   (package
     (name "skalibs")
-    (version "2.10.0.3")
+    (version "2.11.0.0")
     (source
      (origin
       (method url-fetch)
       (uri (string-append "https://skarnet.org/software/skalibs/skalibs-"
                           version ".tar.gz"))
       (sha256
-       (base32 "0ka6n5rnxd5sn5lycarf596d5wlak5s535zqqlz0rnhdcnpb105p"))))
+       (base32 "1n9l7mb54dlb0iijjaf446jba6nmq1ql9n39s095ngrk5ahcipwq"))))
     (build-system gnu-build-system)
     (arguments
      '(#:tests? #f                      ; no tests exist
@@ -48,8 +48,7 @@
                       ;; and *.so files are reproducible.
                       (substitute* "Makefile"
                         (("\\$\\(wildcard src/lib\\*/\\*.c\\)")
-                         "$(sort $(wildcard src/lib*/*.c))"))
-                      #t)))))
+                         "$(sort $(wildcard src/lib*/*.c))")))))))
     (home-page "https://skarnet.org/software/skalibs/")
     (synopsis "Platform abstraction libraries for skarnet.org software")
     (description
@@ -62,16 +61,16 @@ and file system operations.  It is used by all skarnet.org software.")
 (define-public execline
   (package
     (name "execline")
-    (version "2.8.0.1")
+    (version "2.8.1.0")
     (source
      (origin
       (method url-fetch)
       (uri (string-append "https://skarnet.org/software/execline/execline-"
                           version ".tar.gz"))
       (sha256
-       (base32 "1v9swmhw2rcrr9fmkmd7qh8qq0kslhmvxwz2a3bhan9ksabz8wx3"))))
+       (base32 "0msmzf5zwjcsgjlvvq28rd2i0fkdb2skmv8ii0ix8dhyckwwjmav"))))
     (build-system gnu-build-system)
-    (inputs `(("skalibs" ,skalibs)))
+    (inputs (list skalibs))
     (arguments
      '(#:configure-flags (list
                           (string-append "--with-lib="
@@ -104,17 +103,16 @@ complexity.")))
 (define-public s6
   (package
    (name "s6")
-   (version "2.10.0.3")
+   (version "2.11.0.0")
    (source
     (origin
      (method url-fetch)
      (uri (string-append "https://skarnet.org/software/s6/s6-"
                          version ".tar.gz"))
      (sha256
-      (base32 "0mw7blp8dwr09z58m9mrxwmmvvpnjzq9klcf1vgm0hbha4qkf88x"))))
+      (base32 "1a3lj0xfhn1w3a4ygqsxy8q4dr3n48hnwml4xzdpz3nrikhy8if5"))))
    (build-system gnu-build-system)
-   (inputs `(("skalibs" ,skalibs)
-             ("execline" ,execline)))
+   (inputs (list skalibs execline))
    (arguments
     `(#:configure-flags (list
                         (string-append "--with-lib="
@@ -133,8 +131,7 @@ complexity.")))
           (lambda* (#:key outputs #:allow-other-keys)
             (let* ((out (assoc-ref outputs "out"))
                    (doc (string-append out "/share/doc/s6-" ,version)))
-              (copy-recursively "doc" doc)
-              #t))))))
+              (copy-recursively "doc" doc)))))))
    (home-page "https://skarnet.org/software/s6")
    (license isc)
    (synopsis "Small suite of programs for process supervision")
@@ -150,16 +147,16 @@ functionality with a very small amount of code.")))
 (define-public s6-dns
   (package
    (name "s6-dns")
-   (version "2.3.5.1")
+   (version "2.3.5.2")
    (source
     (origin
      (method url-fetch)
      (uri (string-append "https://skarnet.org/software/s6-dns/s6-dns-"
                          version ".tar.gz"))
      (sha256
-      (base32 "0qsgqwdr5ms337fc9f2b4aa5cr7myvbzndvgkgswnrdwszjm078c"))))
+      (base32 "0nczzjprvp6wirzycgf5h32dlgx4r8grzkqhif27n3ii6f5g78yw"))))
     (build-system gnu-build-system)
-    (inputs `(("skalibs" ,skalibs)))
+    (inputs (list skalibs))
     (arguments
      '(#:configure-flags (list
                           (string-append "--with-lib="
@@ -179,19 +176,16 @@ as an alternative to the BIND, djbdns or other DNS clients.")))
 (define-public s6-networking
   (package
    (name "s6-networking")
-   (version "2.4.1.1")
+   (version "2.5.0.0")
    (source
     (origin
      (method url-fetch)
      (uri (string-append "https://skarnet.org/software/s6-networking/"
                          "s6-networking-" version ".tar.gz"))
      (sha256
-      (base32 "0m55ibx7k2wgrqbpci1n667ij0h925ajzggxalq2pj65kmwcmyx3"))))
+      (base32 "1fn3g9gkwgmnxallhk82f5rly81pnkilj7n49g5fbfmaalsq96mh"))))
     (build-system gnu-build-system)
-    (inputs `(("skalibs" ,skalibs)
-              ("execline" ,execline)
-              ("s6" ,s6)
-              ("s6-dns" ,s6-dns)))
+    (inputs (list skalibs execline s6 s6-dns))
     (arguments
      '(#:configure-flags (list
                           (string-append "--with-lib="
@@ -222,18 +216,16 @@ clock synchronization.")))
 (define-public s6-rc
   (package
    (name "s6-rc")
-   (version "0.5.2.2")
+   (version "0.5.2.3")
    (source
     (origin
      (method url-fetch)
      (uri (string-append "https://skarnet.org/software/s6-rc/s6-rc-"
                          version ".tar.gz"))
      (sha256
-      (base32 "12bzc483jpd16xmhfsfrib84daj1k3kwy5s5nc18ap60apa1r39a"))))
+      (base32 "1xyaplwzvqnb53mg59a7jklakzwsiqivp6qggsry3sbaw4hf3d5j"))))
     (build-system gnu-build-system)
-    (inputs `(("skalibs" ,skalibs)
-              ("execline" ,execline)
-              ("s6" ,s6)))
+    (inputs (list skalibs execline s6))
     (arguments
      '(#:configure-flags (list
                           (string-append "--with-lib="
@@ -263,7 +255,7 @@ environment.")))
 (define-public s6-portable-utils
   (package
    (name "s6-portable-utils")
-   (version "2.2.3.2")
+   (version "2.2.3.3")
    (source
     (origin
      (method url-fetch)
@@ -271,9 +263,9 @@ environment.")))
            "https://skarnet.org/software/s6-portable-utils/s6-portable-utils-"
            version ".tar.gz"))
      (sha256
-      (base32 "173nmygkp7ky3093dg4rx3ahvyl7ll86z8qj6pl3jd96xb9s49v6"))))
+      (base32 "132jj5qk8x40kw6lrrn7jiqhvqj9d2h6g6mhl8zma1sp37bg0i84"))))
     (build-system gnu-build-system)
-    (inputs `(("skalibs" ,skalibs)))
+    (inputs (list skalibs))
     (arguments
      '(#:configure-flags (list
                           (string-append "--with-lib="
@@ -295,7 +287,7 @@ systems and other constrained environments, but they work everywhere.")))
 (define-public s6-linux-init
   (package
    (name "s6-linux-init")
-   (version "1.0.6.3")
+   (version "1.0.6.4")
    (source
     (origin
      (method url-fetch)
@@ -303,12 +295,10 @@ systems and other constrained environments, but they work everywhere.")))
            "https://skarnet.org/software/s6-linux-init/s6-linux-init-"
            version ".tar.gz"))
      (sha256
-      (base32 "1idqjcxhl5wgff8yrsvx2812wahjri2hcs7qs6k62g0sdd8niqr9"))))
+      (base32 "0grqk111d6aqym1c4l9j26fdqcgra1hvwb9vdgylrfbvn1c3hlpb"))))
     (build-system gnu-build-system)
     (inputs
-     `(("execline" ,execline)
-       ("s6" ,s6)
-       ("skalibs" ,skalibs)))
+     (list execline s6 skalibs))
     (arguments
      '(#:configure-flags
        (list
@@ -341,7 +331,7 @@ all the details.")))
 (define-public s6-linux-utils
   (package
    (name "s6-linux-utils")
-   (version "2.5.1.5")
+   (version "2.5.1.6")
    (source
     (origin
      (method url-fetch)
@@ -349,9 +339,9 @@ all the details.")))
            "https://skarnet.org/software/s6-linux-utils/s6-linux-utils-"
            version ".tar.gz"))
      (sha256
-      (base32 "1fj5ldlrc6bx40pphg29rp3byd6fal6869v85kw86c2kdgrxn063"))))
+      (base32 "0hr49nl0d7a6i5w8cfg43xzvzayb8kpqij9xg7bmw2fyvc2z338z"))))
     (build-system gnu-build-system)
-    (inputs `(("skalibs" ,skalibs)))
+    (inputs (list skalibs))
     (arguments
      '(#:configure-flags (list
                           (string-append "--with-lib="
diff --git a/gnu/packages/skribilo.scm b/gnu/packages/skribilo.scm
index e5d764ae28..1b000e0688 100644
--- a/gnu/packages/skribilo.scm
+++ b/gnu/packages/skribilo.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -65,20 +65,24 @@
                                  " -c"))))
              #t)))
 
-       #:parallel-build? #f))
+       #:parallel-build? #f
 
-    (native-inputs `(("pkg-config" ,pkg-config)))
+       ;; XXX: Temporarily disable tests because they rely on
+       ;; 'test-runner-current' *not* returning #f after 'test-end', which is
+       ;; no longer the case in Guile >= 3.0.6.  This is fixed upstream.
+       #:tests? #f))
 
-    (inputs `(("guile" ,guile-3.0)
-              ("imagemagick" ,imagemagick)
-              ("ghostscript" ,ghostscript)        ; for 'convert'
-              ("ploticus" ,ploticus)
-              ("lout" ,lout)))
+    (native-inputs (list pkg-config))
+
+    (inputs (list guile-3.0
+                  imagemagick
+                  ghostscript ; for 'convert'
+                  ploticus
+                  lout))
 
     ;; The 'skribilo' command needs them, and for people using Skribilo as a
     ;; library, these inputs are needed as well.
-    (propagated-inputs `(("guile-reader" ,guile-reader)
-                         ("guile-lib" ,guile-lib)))
+    (propagated-inputs (list guile-reader guile-lib))
 
     (home-page "https://www.nongnu.org/skribilo/")
     (synopsis "Document production tool written in Guile Scheme")
diff --git a/gnu/packages/slang.scm b/gnu/packages/slang.scm
index 404a4535ca..c8de04667f 100644
--- a/gnu/packages/slang.scm
+++ b/gnu/packages/slang.scm
@@ -57,20 +57,23 @@
        #:parallel-build? #f  ; there's at least one race
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'reduce-array-test-size
+           ;; Reduce the size of the array, otherwise the array.sl/array.slc
+           ;; tests fails with "Unable to create a multi-dimensional array of
+           ;; the desired size" on 32 bit systems.
+           (lambda _
+             (substitute* "src/test/array.sl"
+               (("10000,10000,10000,10000,10000,10000")
+                "10,10,10,10,10,10"))))
          (add-before 'configure 'substitute-before-config
            (lambda* (#:key inputs #:allow-other-keys)
              (let ((ncurses (assoc-ref inputs "ncurses")))
                (substitute* "configure"
                  (("MISC_TERMINFO_DIRS=\"\"")
                   (string-append "MISC_TERMINFO_DIRS="
-                                 "\"" ncurses "/share/terminfo" "\"")))
-               #t))))))
+                                 "\"" ncurses "/share/terminfo" "\"")))))))))
     (inputs
-     `(("readline" ,readline)
-       ("zlib" ,zlib)
-       ("libpng" ,libpng)
-       ("pcre" ,pcre)
-       ("ncurses" ,ncurses)))
+     (list readline zlib libpng pcre ncurses))
     (home-page "https://www.jedsoft.org/slang/")
     (synopsis "Library for interactive applications and extensibility")
     (description
@@ -98,10 +101,7 @@ slsh, which is part of the S-Lang distribution.")
     (build-system gnu-build-system)
     (outputs '("out" "python"))
     (inputs
-     `(("slang" ,slang)
-       ("popt" ,popt)
-       ("python" ,python)
-       ("fribidi" ,fribidi)))
+     (list slang popt python fribidi))
     (arguments
      `(#:tests? #f    ; no test suite
        #:configure-flags
diff --git a/gnu/packages/smalltalk.scm b/gnu/packages/smalltalk.scm
index 26f7ab2c76..c89e95316a 100644
--- a/gnu/packages/smalltalk.scm
+++ b/gnu/packages/smalltalk.scm
@@ -61,12 +61,12 @@
       (patches (search-patches "smalltalk-multiplication-overflow.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ;; XXX: To be removed with the next release of Smalltalk.
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("zip" ,zip)))
+     (list pkg-config
+           ;; XXX: To be removed with the next release of Smalltalk.
+           autoconf
+           automake
+           libtool
+           zip))
     ;; TODO: These optional dependencies raise the closure size to ~1 GiB
     ;; from the current ~100 MiB, although some of them might be very
     ;; useful for end users:
@@ -79,11 +79,7 @@
     ;;  - sqlite
     ;;  - zlib
     (inputs
-     `(("gmp" ,gmp)
-       ("libffi" ,libffi)
-       ("libltdl" ,libltdl)
-       ("libsigsegv" ,libsigsegv)
-       ("lightning" ,lightning)))
+     (list gmp libffi libltdl libsigsegv lightning))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -146,15 +142,15 @@ such as ones for networking and GUI programming.")
               "(VM_BUILD_STRING \\\"Built with GNU Guix\\\")"))
            #t))))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("dbus" ,dbus)
-       ("freetype" ,freetype)
-       ("libffi" ,libffi)
-       ("libxrender" ,libxrender)
-       ("mesa" ,mesa)
-       ("pulseaudio" ,pulseaudio)))
+     (list alsa-lib
+           dbus
+           freetype
+           libffi
+           libxrender
+           mesa
+           pulseaudio))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f                      ;no check target
diff --git a/gnu/packages/sml.scm b/gnu/packages/sml.scm
index b7e96f028c..1d1ccf6d8c 100644
--- a/gnu/packages/sml.scm
+++ b/gnu/packages/sml.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2017, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2019, 2020 Brett Gilio <brettg@gnu.org>
+;;; Copyright © 2021 Foo Chuan Wei <chuanwei.foo@hotmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -28,7 +29,8 @@
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module ((guix licenses) #:prefix license:)
-  #:use-module (guix packages))
+  #:use-module (guix packages)
+  #:use-module (guix utils))
 
 (define-public polyml
   (package
@@ -45,11 +47,7 @@
                 "1y3i919kzylvhwfsi6adnc0ah0xahl6ncna0g5bcjyhxsq2416rn"))))
     (build-system gnu-build-system)
     (inputs
-     `(("gmp" ,gmp)
-       ("lesstif" ,lesstif)
-       ("libffi" ,libffi)
-       ("libx11" ,libx11)
-       ("libxt" ,libxt)))
+     (list gmp lesstif libffi libx11 libxt))
     (arguments
      '(#:configure-flags
        (list "--with-system-libffi=yes"
@@ -75,3 +73,260 @@ function interface, and a symbolic debugger.")
     (license
      (list license:lgpl2.1
            license:lgpl2.1+))))
+
+(define (smlnj-file version filename hash)
+  (origin
+    (method url-fetch)
+    (uri (string-append "http://smlnj.cs.uchicago.edu/dist/working/"
+                        version "/" filename))
+    (sha256 (base32 hash))))
+
+(define-public smlnj
+  (package
+    (name "smlnj")
+    (version "110.99.2")
+    (source #f)  ; Sources are passed as native-inputs.
+    (supported-systems '("x86_64-linux" "i686-linux"))
+    (build-system gnu-build-system)
+    (outputs '("out" "doc"))
+    (arguments
+     `(#:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'unpack
+           (lambda* (#:key inputs #:allow-other-keys)
+             (for-each
+               (lambda (file)
+                 (invoke "tar" "xvf" (assoc-ref inputs file)))
+               (list (if (string=? "i686-linux" ,(%current-system))
+                       "boot.x86-unix"
+                       "boot.amd64-unix")
+                     "config"
+                     "cm"
+                     "compiler"
+                     "runtime"
+                     "system"
+                     "MLRISC"
+                     "smlnj-lib"
+                     "old-basis"
+                     "ckit"
+                     "nlffi"
+                     "cml"
+                     "eXene"
+                     "ml-lpt"
+                     "ml-lex"
+                     "ml-yacc"
+                     "ml-burg"
+                     "pgraph"
+                     "trace-debug-profile"
+                     "heap2asm"
+                     "smlnj-c"
+                     "doc"
+                     "asdl"))
+             ;; Same directory structure as what the config/unpack script
+             ;; would produce.
+             (mkdir "base")
+             (rename-file "runtime" "base/runtime")
+             (rename-file "compiler" "base/compiler")
+             (rename-file "cm" "base/cm")
+             (rename-file "old-basis" "base/old-basis")
+             (rename-file "system" "base/system")
+             #t))
+         (delete 'configure)
+         (replace 'patch-source-shebangs
+           (lambda _
+             ;; Fix paths to /bin/sh.
+             (substitute* (list "config/install.sh"
+                                (if (string=? "i686-linux" ,(%current-system))
+                                  "base/runtime/objs/mk.x86-linux"
+                                  "base/runtime/objs/mk.amd64-linux")
+                                "asdl/configure"
+                                "asdl/src/asdlgen/Makefile.in")
+               (("^SHELL[[:space:]]*=[[:space:]]*/bin/sh")
+                (string-append "SHELL=" (which "sh"))))
+             (substitute* "asdl/configure"
+               (("^SHELL=\\$\\{CONFIG_SHELL-/bin/sh\\}")
+                (string-append "SHELL=" (which "sh"))))
+             (substitute* (list "asdl/src/gen/fragments/mkfrags_sh.in"
+                                "asdl/src/gen/fragments/mkmk_sh.in")
+               (("^#!/bin/sh")
+                (string-append "#!" (which "sh"))))
+             #t))
+         (replace 'build
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (substitute* "config/chk-global-names.sh"
+               (("^CC=.*")
+                (string-append "CC=" ,(cc-for-target))))
+
+             ;; /bin and /usr/bin do not exist in the build environment.
+             (substitute* "config/_arch-n-opsys"
+               (("^export PATH") "")
+               (("^PATH=\"/bin:/usr/bin\"") "")
+               (("uname") (which "uname")))
+             (substitute* "base/runtime/config/gen-posix-names.sh"
+               (("^PATH=/bin:/usr/bin") ""))
+
+             ;; The build process uses an SML Basis Library function
+             ;; `OS.Process.system`, which uses "/bin/sh" (this is hardcoded).
+             ;; However, /bin/sh does not exist in the Guix build environment.
+             ;; Solution: binary patch — replace "/bin/sh" with "/tmp/sh".
+             (symlink (which "sh") "/tmp/sh")
+             (invoke "sed" "-i" "s,/bin/sh,/tmp/sh,"
+                     (if (string=? "i686-linux" ,(%current-system))
+                       "sml.boot.x86-unix/SMLNJ-BASIS/.cm/x86-unix/basis-common.cm"
+                       "sml.boot.amd64-unix/SMLNJ-BASIS/.cm/amd64-unix/basis-common.cm"))
+
+             ;; Build.
+             (invoke "./config/install.sh" "-default"
+                     (if (string=? "i686-linux" ,(%current-system))
+                       "32"
+                       "64"))
+
+             ;; Undo the binary patch.
+             (for-each
+               (lambda (file)
+                 (invoke "sed" "-i" "s,/tmp/sh,/bin/sh," file))
+               (if (string=? "i686-linux" ,(%current-system))
+                 '("bin/.heap/sml.x86-linux"
+                   "lib/SMLNJ-BASIS/.cm/x86-unix/basis-common.cm")
+                 '("bin/.heap/sml.amd64-linux"
+                   "lib/SMLNJ-BASIS/.cm/amd64-unix/basis-common.cm")))
+
+             ;; Set SMLNJ_HOME in the bin/ files, so that `sml` is able to find
+             ;; the SML/NJ Library.
+             (let ((out (assoc-ref outputs "out")))
+               (for-each
+                 (lambda (file)
+                   (invoke "sed" "-i"
+                           (string-append "2iSMLNJ_HOME=${SMLNJ_HOME:-" out "}")
+                           file))
+                 '("bin/.link-sml"
+                   "bin/.run-sml"
+                   "bin/ml-build"
+                   "bin/ml-makedepend")))))
+        (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (out-bin (string-append out "/bin/"))
+                    (out-lib (string-append out "/lib/"))
+                    (out-man (string-append out "/share/man/")))
+               (copy-recursively "bin" out-bin)
+               (copy-recursively "lib" out-lib)
+               (copy-recursively "doc/man" out-man))
+             #t))
+        (add-after 'install 'install-doc
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((doc (string-append (assoc-ref outputs "doc")
+                                       "/share/doc/smlnj")))
+               (mkdir-p doc)
+               (copy-recursively "doc" doc))
+             #t)))))
+    (native-inputs
+     `(,(if (string=? "i686-linux" (%current-system))
+          `("boot.x86-unix"
+            ,(smlnj-file version
+                         "boot.x86-unix.tgz"
+                         "117dq1g387vcy1105dlpw770gzrg423jng89ynraiy6kiaalvbcq"))
+          `("boot.amd64-unix"
+            ,(smlnj-file version
+                         "boot.amd64-unix.tgz"
+                         "0cbaz8sxp30y2a4blm0pzk9aa1g9jj65d6d7kydvn0w7m22rjjff")))
+       ("config"
+        ,(smlnj-file version
+                     "config.tgz"
+                     "1sq60frd66kv807bahsyxda355qq67zvvb4sr1d72cv6capv5nsg"))
+       ("cm"
+        ,(smlnj-file version
+                     "cm.tgz"
+                     "087yy9k9vyyvhb24rni6js7s8iqbs8vjm9kjd9s311swjd66qhjc"))
+       ("compiler"
+        ,(smlnj-file version
+                     "compiler.tgz"
+                     "149vrmiba0dqggr15axqqzzfmd0kx7kchlr49gii6hw5dal6vqnn"))
+       ("runtime"
+        ,(smlnj-file version
+                     "runtime.tgz"
+                     "0c3q7qr2i3r91sx9p3z1ar7gvyk6qsm5gcbpbyj6l67qzn192yc3"))
+       ("system"
+        ,(smlnj-file version
+                     "system.tgz"
+                     "0aflnqh9zi9f8vs9pjlxysxplrwl98aiaxx4n41sba4m1r30n0za"))
+       ("MLRISC"
+        ,(smlnj-file version
+                     "MLRISC.tgz"
+                     "1kkga7r7qnw09s8yhqbhrq8gxf6c8x0fiwsbwkr8ls6xwv48sp74"))
+       ("smlnj-lib"
+        ,(smlnj-file version
+                     "smlnj-lib.tgz"
+                     "14fvqgn580k3ylvfhbkwv4cw87ipggq548r7jzp8fzfn2h6wdl01"))
+       ("old-basis"
+        ,(smlnj-file version
+                     "old-basis.tgz"
+                     "11j7a0sxyd1kwxjvxnarab5vc3x43gl90m07wxm37fd4jbfd1fn1"))
+       ("ckit"
+        ,(smlnj-file version
+                     "ckit.tgz"
+                     "1fbfjb2fhr6zkcz5jhqh3888zska6vffndyqwvk6rpbcl7an8niq"))
+       ("nlffi"
+        ,(smlnj-file version
+                     "nlffi.tgz"
+                     "0p5z77x295xfh71481kbd5pwis52kv03vxpad4pzkpk0l6smcgmj"))
+       ("cml"
+        ,(smlnj-file version
+                     "cml.tgz"
+                     "13xchaamwanxhwklsgkn1rmkr044h9qsj0rbr9c7pm903yivdwcn"))
+       ("eXene"
+        ,(smlnj-file version
+                     "eXene.tgz"
+                     "0p4snql0a1a952h98ma9ybmp7z1q305mz859b0mxhsg3jdrzl9wb"))
+       ("ml-lpt"
+        ,(smlnj-file version
+                     "ml-lpt.tgz"
+                     "0m00vglg95apdpzsy6qv88izj5ai4ibylxni01an75xpnxyy5qbg"))
+       ("ml-lex"
+        ,(smlnj-file version
+                     "ml-lex.tgz"
+                     "1pmi5qwjcf1h5nfi7d4vvm7cf90g6dlk2mqikj0y9c464ia1l2jc"))
+       ("ml-yacc"
+        ,(smlnj-file version
+                     "ml-yacc.tgz"
+                     "1zla2m1rn8r8k85ps9r2mw38xkh276j7aqv9f69v55102hchx13p"))
+       ("ml-burg"
+        ,(smlnj-file version
+                     "ml-burg.tgz"
+                     "14cqasasa273x09phykzjgk1wl6vrkdcwrdi39hnacp443cilz7x"))
+       ("pgraph"
+        ,(smlnj-file version
+                     "pgraph.tgz"
+                     "183fv61xlac5kpxn5m4iqgdvc2xb1chlxy5ip4i25x589bh4b5k9"))
+       ("trace-debug-profile"
+        ,(smlnj-file version
+                     "trace-debug-profile.tgz"
+                     "1k0w581kr43mpjzm7778xgx1rpz45aq1h80jdr6jls5vz3k8ia18"))
+       ("heap2asm"
+        ,(smlnj-file version
+                     "heap2asm.tgz"
+                     "0p9s42acngxh0401wm6fqs3im3rzzw9sh448x38zhdi47h8h1m9n"))
+       ("smlnj-c"
+        ,(smlnj-file version
+                     "smlnj-c.tgz"
+                     "054b1nhg5yk2jj01p11k08qzq8zc9jzg4mbgkcmcqaq7axp1rnxm"))
+       ("doc"
+        ,(smlnj-file version
+                     "doc.tgz"
+                     "0s35zrxdj76wzdz7c1i8ij00n6lfll4vjnypsy2j17q1maw7fq8j"))
+       ("asdl"
+        ,(smlnj-file version
+                     "asdl.tgz"
+                     "0mad2df5pmkdsb69gflxma6m6i3gla6hdmjjnkzk76pagpr8zb0m"))))
+    (home-page "http://www.smlnj.org")
+    (synopsis "Standard ML of New Jersey interactive compiler")
+    (description
+      "SML/NJ is an implementation of the Standard ML programming language.
+Standard ML has many features, including type safety, polymorphism, algebraic
+data types with pattern matching, higher-order functions, and a sophisticated
+module system.  It is especially well-suited for writing compilers and other
+language processors.")
+    (license (license:fsf-free
+               "https://www.smlnj.org/license.html"
+               "https://www.gnu.org/licenses/license-list#StandardMLofNJ"))))
diff --git a/gnu/packages/solidity.scm b/gnu/packages/solidity.scm
new file mode 100644
index 0000000000..a5b5002ce8
--- /dev/null
+++ b/gnu/packages/solidity.scm
@@ -0,0 +1,90 @@
+;;; Copyright © 2020 Martin Becze <mjbecze@riseup.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 packages solidity)
+  #:use-module (gnu packages base)
+  #:use-module (gnu packages boost)
+  #:use-module (gnu packages maths)
+  #:use-module (gnu packages serialization)
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages ncurses)
+  #:use-module (guix packages)
+  #:use-module (guix git-download)
+  #:use-module (guix build-system cmake)
+  #:use-module ((guix licenses) #:prefix license:))
+
+(define-public solidity
+  (let ((commit "3f05b770bdbf60eca866382049ea191dd701409a"))
+    (package
+      (name "solidity")
+      (version "0.7.4")
+      (source
+       (origin
+         (method git-fetch)
+         (uri
+          (git-reference
+           (url "https://github.com/ethereum/solidity")
+           (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "1mswhjymiwnd3n7h3sjvjx5x8223yih0yvfcr0zpqr4aizpfx5z8"))))
+      (build-system cmake-build-system)
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'create-commit_hash.txt
+             (lambda _
+               (with-output-to-file "commit_hash.txt"
+                 (lambda _
+                   (display
+                    (substring ,commit 0 8))))))
+           (delete 'configure)
+           (delete 'install)
+           (replace 'build
+             (lambda* (#:key outputs #:allow-other-keys)
+               ;; Unbundle jsoncpp
+               (delete-file "./cmake/jsoncpp.cmake")
+               (substitute* "CMakeLists.txt"
+                 (("include\\(jsoncpp\\)") ""))
+               ;; Bug list is always sorted since we only build releases
+               (substitute* "./test/cmdlineTests.sh"
+                 (("\"\\$REPO_ROOT\"/scripts/update_bugs_by_version\\.py") ""))
+               (substitute* "./scripts/build.sh"
+                 (("sudo\\ make\\ install") "make install")
+                 (("cmake\\ ..")
+                  (string-append "cmake .. -DCMAKE_INSTALL_PREFIX="
+                                 (assoc-ref outputs "out"))))
+               (setenv "CIRCLECI" "1")
+               (invoke "./scripts/build.sh")
+               #t))
+           (replace 'check
+             (lambda _
+               (invoke "./scripts/tests.sh")
+               #t)))))
+      (inputs
+       (list boost-static jsoncpp z3))
+      (native-inputs
+       `(("python" ,python)
+         ("tput" ,ncurses)
+         ("xargs" ,findutils)))
+      (home-page "https://solidity.readthedocs.io")
+      (synopsis "Contract-Oriented Programming Language")
+      (description
+       "Solidity is a statically-typed curly-braces programming language
+designed for developing smart contracts that run on the Ethereum Virtual
+Machine.")
+      (license license:gpl3+))))
diff --git a/gnu/packages/speech.scm b/gnu/packages/speech.scm
index cbc46b32b4..f6ca6099de 100644
--- a/gnu/packages/speech.scm
+++ b/gnu/packages/speech.scm
@@ -4,7 +4,7 @@
 ;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
 ;;; 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 © 2019, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2021 qblade <qblade@protonmail.com>
@@ -110,7 +110,7 @@
                          (find-files out "\\.a$"))
                #t))))))
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (inputs
      `(("alsa" ,alsa-lib)))
     (synopsis "Speech synthesis system")
@@ -165,9 +165,8 @@ building tools.")
                (("/bin/ln") "ln"))
              #t)))))
        (inputs
-        `(("portaudio" ,portaudio)
-          ("pulseaudio" ,pulseaudio)))
-       (native-inputs `(("unzip" ,unzip)))
+        (list portaudio pulseaudio))
+       (native-inputs (list unzip))
        (home-page "http://espeak.sourceforge.net/")
        (synopsis "Software speech synthesizer")
        (description "eSpeak is a software speech synthesizer for English and
@@ -200,13 +199,9 @@ based on human speech recordings.")
        ;; XXX: Some tests require an audio device.
        #:tests? #f))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("which" ,which)))
+     (list autoconf automake libtool which))
     (inputs
-     `(("libcap" ,libcap)
-       ("pcaudiolib" ,pcaudiolib)))
+     (list libcap pcaudiolib))
     (synopsis "Software speech synthesizer")
     (description
      "eSpeak NG is a software speech synthesizer for more than 100 languages.
@@ -228,7 +223,7 @@ synthesis, and the ability to use MBROLA voices.")
                 "09fv4fcpmw9g1j0zml0k5kk1lgjw2spr8gn51llbkaaph6v8d62a"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (synopsis "The MIT Language Modeling toolkit")
     (description "The MIT Language Modeling (MITLM) toolkit is a set of
 tools designed for the efficient estimation of statistical n-gram language
@@ -240,7 +235,7 @@ efficiency through the use of a compact vector representation of n-grams.")
 (define-public speech-dispatcher
   (package
     (name "speech-dispatcher")
-    (version "0.10.2")
+    (version "0.11.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/brailcom/speechd/releases"
@@ -248,7 +243,7 @@ efficiency through the use of a compact vector representation of n-grams.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "1p72x9vsqvmhz1ym2bcpiqscn063rxdsylv65735cpp107r1jqxh"))))
+                "1inxqabbml2vhp0lvx4khhda4g1dp8wyr8mnk4vz315c7pni5nni"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags '("--disable-static"
@@ -257,17 +252,15 @@ efficiency through the use of a compact vector representation of n-grams.")
                            "--with-voxin=no" "--with-ibmtts=no"
                            "--with-kali=no" "--with-baratinoo=no")))
     (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("pkg-config" ,pkg-config)
-       ("texinfo" ,texinfo)))
+     (list gettext-minimal pkg-config texinfo))
     (inputs
-     `(("dotconf" ,dotconf)
-       ("espeak" ,espeak-ng)
-       ("glib" ,glib)
-       ("libltdl" ,libltdl)
-       ("libsndfile" ,libsndfile)
-       ("pulseaudio" ,pulseaudio)
-       ("python" ,python)))
+     (list dotconf
+           espeak-ng
+           glib
+           libltdl
+           libsndfile
+           pulseaudio
+           python))
     (synopsis "Common interface to speech synthesizers")
     (description "The Speech Dispatcher project provides a high-level
 device independent layer for access to speech synthesis through a simple,
@@ -347,7 +340,8 @@ be used by the sighted.")
                             "/bin/rm")
              (string-append "ECHO_N="
                             (assoc-ref %build-inputs "coreutils")
-                            "/bin/printf \"%s\""))
+                            "/bin/printf \"%s\"")
+             "LINUXAUDIO=alsa")
        #:parallel-build? #f ; not supported
        #:modules ((guix build gnu-build-system)
                   (guix build utils)
@@ -366,6 +360,11 @@ be used by the sighted.")
                               "config/make_system.mak")
                  (("/bin/sh") (which "sh"))))
              #t))
+         (add-after 'unpack-and-patch-speech-tools 'set-fcommon
+           (lambda _
+             (substitute* "../speech_tools/config/rules/defaults.mak"
+               (("\\(CFLAGS\\)") "(CFLAGS) -fcommon")
+               (("\\(CXXFLAGS\\)") "(CXXFLAGS) -fcommon"))))
          (add-after 'unpack 'patch-/bin/sh
            (lambda _
              (substitute* '("config/test_make_rules"
@@ -505,7 +504,8 @@ be used by the sighted.")
          (add-before 'configure 'bootstrap
            (lambda _ (invoke "autoreconf" "-vif"))))))
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list alsa-lib
+           ncurses))
     (native-inputs
      `(("autoconf" ,autoconf)
        ("automake" ,automake)
@@ -572,12 +572,9 @@ control.")
        (sha256
         (base32 "1v476kpw09ljj8mavasj4hya2w11jwlx7q22rh1lsn9jkkam5i2a"))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("espeak-ng" ,espeak-ng)
-       ("libsndfile" ,libsndfile)
-       ("pulseaudio" ,pulseaudio)))
+     (list alsa-lib espeak-ng libsndfile pulseaudio))
     (build-system gnu-build-system)
     (native-search-paths
      (list (search-path-specification
@@ -610,13 +607,13 @@ It can also speak English through eSpeak or Festival.")
     (arguments
      `(#:parallel-tests? #f))           ;tests fail otherwise
     (native-inputs
-     `(("bison" ,bison)
-       ("doxygen" ,doxygen)
-       ("perl" ,perl)                   ;for tests
-       ("python" ,python)
-       ("swig" ,swig)))
+     (list bison
+           doxygen
+           perl ;for tests
+           python
+           swig))
     (inputs
-     `(("pulseaudio" ,pulseaudio)))
+     (list pulseaudio))
     (home-page "https://cmusphinx.github.io/")
     (synopsis "Support library required by Pocketsphinx and Sphinxtrain")
     (description "This package contains the basic libraries shared by
@@ -639,15 +636,10 @@ manipulating acoustic feature and audio files.")
         (base32 "1n9yazzdgvpqgnfzsbl96ch9cirayh74jmpjf7svs4i7grabanzg"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("perl" ,perl)                   ;for tests
-       ("python" ,python)
-       ("swig" ,swig)))
+     (list pkg-config perl ;for tests
+           python swig))
     (inputs
-     `(("gstreamer" ,gstreamer)
-       ("libcap" ,libcap)
-       ("pulseaudio" ,pulseaudio)
-       ("sphinxbase" ,sphinxbase)))
+     (list gstreamer libcap pulseaudio sphinxbase))
     (home-page "https://cmusphinx.github.io/")
     (synopsis "Recognizer library written in C")
     (description "PocketSphinx is one of Carnegie Mellon University's
diff --git a/gnu/packages/sphinx.scm b/gnu/packages/sphinx.scm
index 5fd63a617c..dfbc3194ea 100644
--- a/gnu/packages/sphinx.scm
+++ b/gnu/packages/sphinx.scm
@@ -9,13 +9,13 @@
 ;;; Copyright © 2017 Frederick M. Muriithi <fredmanglis@gmail.com>
 ;;; Copyright © 2017 Christine Lemmer-Webber <cwebber@dustycloud.org>
 ;;; Copyright © 2017 Julien Lepiller <julien@lepiller.eu>
-;;; Copyright © 2019 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2019, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2019, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2019 Alexandros Theodotou <alex@zrythm.org>
 ;;; Copyright © 2019 Brett Gilio <brettg@gnu.org>
 ;;; Copyright © 2020 Giacomo Leidi <goodoldpaul@autistici.org>
 ;;; Copyright © 2021 Eric Bavier <bavier@posteo.net>
-;;; Copyright © 2021 Vinicius Monego <monego@posteo.net>
+;;; Copyright © 2021, 2022 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2021 Hugo Lecomte <hugo.lecomte@inria.fr>
 ;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
@@ -46,6 +46,7 @@
   #:use-module (gnu packages graphviz)
   #:use-module (gnu packages image)
   #:use-module (gnu packages imagemagick)
+  #:use-module (gnu packages python)
   #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-crypto)
   #:use-module (gnu packages python-web)
@@ -79,30 +80,28 @@
                   "@pytest.mark.skip()"))
                (invoke "make" "test")))))))
     (propagated-inputs
-     `(("python-babel" ,python-babel)
-       ("python-docutils" ,python-docutils)
-       ("python-jinja2" ,python-jinja2)
-       ("python-imagesize" ,python-imagesize)
-       ("python-packaging" ,python-packaging)
-       ("python-pygments" ,python-pygments)
-       ("python-requests" ,python-requests)
-       ("python-snowballstemmer" ,python-snowballstemmer)
-       ("python-sphinx-alabaster-theme"
-        ,python-sphinx-alabaster-theme)
-       ("python-sphinxcontrib-applehelp" ,python-sphinxcontrib-applehelp)
-       ("python-sphinxcontrib-devhelp" ,python-sphinxcontrib-devhelp)
-       ("python-sphinxcontrib-htmlhelp" ,python-sphinxcontrib-htmlhelp)
-       ("python-sphinxcontrib-jsmath" ,python-sphinxcontrib-jsmath)
-       ("python-sphinxcontrib-qthelp" ,python-sphinxcontrib-qthelp)
-       ("python-sphinxcontrib-serializinghtml"
-        ,python-sphinxcontrib-serializinghtml)))
+     (list python-babel
+           python-docutils
+           python-jinja2
+           python-imagesize
+           python-packaging
+           python-pygments
+           python-requests
+           python-snowballstemmer
+           python-sphinx-alabaster-theme
+           python-sphinxcontrib-applehelp
+           python-sphinxcontrib-devhelp
+           python-sphinxcontrib-htmlhelp
+           python-sphinxcontrib-jsmath
+           python-sphinxcontrib-qthelp
+           python-sphinxcontrib-serializinghtml))
     (native-inputs
-     `(("graphviz" ,graphviz)
-       ("imagemagick" ,imagemagick)                    ;for "convert"
-       ("python-html5lib" ,python-html5lib)
-       ("python-mock" ,python-mock)
-       ("python-nose" ,python-nose)
-       ("python-pytest" ,python-pytest)))
+     (list graphviz
+           imagemagick ;for "convert"
+           python-html5lib
+           python-mock
+           python-nose
+           python-pytest))
     (home-page "https://www.sphinx-doc.org")
     (synopsis "Python documentation generator")
     (description "Sphinx is a tool that makes it easy to create documentation
@@ -134,27 +133,54 @@ sources.")
                            ;; <https://github.com/sphinx-doc/sphinx/issues/4710>.
                            '("tests/test_api_translator.py"
                              "tests/test_setup_command.py"
+                             ;; Websupport is provided by a separate package
+                             "tests/test_websupport.py"
                              ;; This one fails for unknown reasons.
                              "tests/test_correct_year.py"))))))))
-      (native-inputs `(("python2-mock" ,python2-mock)
-                       ("python2-enum34" ,python2-enum34)
-                       ,@(package-native-inputs base)))
+      (native-inputs (modify-inputs (package-native-inputs base)
+                       (prepend python2-mock python2-enum34)))
       ;; Sphinx 2 has some dependencies that do not support Python 2, so
       ;; we keep our own propagated-inputs here instead of inheriting.
       (propagated-inputs
-       `(("python2-pytz" ,python2-pytz)
-         ("python2-typing" ,python2-typing)
-         ("python2-imagesize" ,python2-imagesize)
-         ("python2-sphinx-alabaster-theme" ,python2-sphinx-alabaster-theme)
-         ("python2-babel" ,python2-babel)
-         ("python2-snowballstemmer" ,python2-snowballstemmer)
-         ("python2-docutils" ,python2-docutils-0.14)
-         ("python2-jinja2" ,python2-jinja2)
-         ("python2-packaging" ,python2-packaging)
-         ("python2-pygments" ,python2-pygments)
-         ("python2-requests" ,python2-requests)
-         ("python2-six" ,python2-six)
-         ("python2-sphinxcontrib-websupport" ,python2-sphinxcontrib-websupport))))))
+       (list python2-pytz
+             python2-typing
+             python2-imagesize
+             python2-sphinx-alabaster-theme
+             python2-babel
+             python2-snowballstemmer
+             python2-docutils-0.14
+             python2-jinja2
+             python2-packaging
+             python2-pygments
+             python2-requests
+             python2-six
+             python2-sphinxcontrib-websupport)))))
+
+(define-public python-sphinxcontrib-apidoc
+  (package
+    (name "python-sphinxcontrib-apidoc")
+    (version "0.3.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "sphinxcontrib-apidoc" version))
+       (sha256
+        (base32
+         "1f9zfzggs8a596jw51fpfmr149n05mrlyy859iydazbvry9gb6vj"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:tests? #f))                    ;requires python-pytest<4.0
+    (native-inputs
+     (list python-pbr
+           python-pre-commit
+           python-pytest
+           python-sphinx
+           python-testrepository))
+    (home-page "https://github.com/sphinx-contrib/apidoc")
+    (synopsis "Sphinx extension for running @code{sphinx-apidoc}")
+    (description "This package provides Sphinx extension for running
+@code{sphinx-apidoc} on each build.")
+    (license license:bsd-2)))
 
 (define-public python-sphinxcontrib-applehelp
   (package
@@ -176,6 +202,32 @@ sources.")
 Apple help books.")
     (license license:bsd-2)))
 
+(define-public python-sphinx-click
+  (package
+    (name "python-sphinx-click")
+    (version "3.0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "sphinx-click" version))
+       (sha256
+        (base32
+         "118ppsymp1p2gn8v7mifika817qx6v07mja7kxizq9cg7dpw894v"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:tests? #f))                    ;requires python-coverage<5.0
+    (native-inputs
+     (list python-click
+           python-coverage
+           python-docutils
+           python-pbr
+           python-sphinx))
+    (home-page "https://github.com/click-contrib/sphinx-click")
+    (synopsis "Sphinx extension that documents click applications")
+    (description "This package provide sphinx extension that automatically
+documents click applications.")
+    (license license:expat)))
+
 (define-public python-sphinx-copybutton
   (package
     (name "python-sphinx-copybutton")
@@ -191,10 +243,7 @@ Apple help books.")
     (arguments
      `(#:tests? #f)) ; XXX: Check requires network access.
     (propagated-inputs
-     `(("python-flit" ,python-flit)
-       ("python-setuptools" ,python-setuptools)
-       ("python-sphinx" ,python-sphinx)
-       ("python-wheel" ,python-wheel)))
+     (list python-flit python-setuptools python-sphinx python-wheel))
     (home-page "https://github.com/choldgraf/sphinx-copybutton")
     (synopsis "Sphinx extension to add \"copy\" buttons to code blocks")
     (description
@@ -235,8 +284,7 @@ to code blocks.")
          "1x9af78vamjjcdrrhiah3wg613jv7gm8yh9vvqfrmf4vam6mimyg"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-docutils" ,python-docutils)
-       ("python-sphinx" ,python-sphinx)))
+     (list python-docutils python-sphinx))
     (home-page "https://github.com/jupyter/sphinxcontrib_github_alt")
     (synopsis "Link to GitHub pages from Sphinx docs")
     (description
@@ -297,13 +345,45 @@ math in HTML via JavaScript.")
     (arguments '(#:tests? #f)) ; No tests.
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-sphinx" ,python-sphinx)))
+     (list python-sphinx))
     (synopsis "News Feed extension for Sphinx")
     (description "Sphinxcontrib-newsfeed is an extension for adding a simple
 Blog, News or Announcements section to a Sphinx website.")
     (home-page "https://bitbucket.org/prometheus/sphinxcontrib-newsfeed")
     (license license:bsd-2)))
 
+(define-public python-sphinx-panels
+  (package
+    (name "python-sphinx-panels")
+    (version "0.6.0")
+    (source
+      (origin
+        ;; Tests not included in the pypi release.
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/executablebooks/sphinx-panels")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "1ivqz6yv96a2jp59kylg1gbkrmzq6zwilppz3ij0zrkjn25zb97k"))))
+    (build-system python-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "pytest")))))))
+    (propagated-inputs (list python-docutils python-sphinx))
+    (native-inputs
+     (list python-pytest
+           python-pytest-regressions))
+    (home-page "https://github.com/executablebooks/sphinx-panels")
+    (synopsis "Sphinx extension for creating panels in a grid layout")
+    (description
+     "This package provides a sphinx extension for creating panels in a grid layout.")
+    (license license:expat)))
+
 (define-public python-sphinxcontrib-programoutput
   (package
     (name "python-sphinxcontrib-programoutput")
@@ -319,16 +399,13 @@ Blog, News or Announcements section to a Sphinx website.")
      ;; FIXME: Many tests are failing.
      '(#:tests? #f))
     (propagated-inputs
-     `(("python-sphinx" ,python-sphinx)))
+     (list python-sphinx))
     (synopsis "Sphinx extension to include program output")
     (description "A Sphinx extension to literally insert the output of arbitrary
 commands into documents, helping you to keep your command examples up to date.")
     (home-page "https://github.com/NextThought/sphinxcontrib-programoutput")
     (license license:bsd-2)))
 
-(define-public python2-sphinxcontrib-programoutput
-  (package-with-python2 python-sphinxcontrib-programoutput))
-
 (define-public python-sphinxcontrib-qthelp
   (package
     (name "python-sphinxcontrib-qthelp")
@@ -372,17 +449,19 @@ documents.")
 (define-public python-sphinxcontrib-svg2pdfconverter
   (package
     (name "python-sphinxcontrib-svg2pdfconverter")
-    (version "1.0.1")
+    (version "1.2.0")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "sphinxcontrib-svg2pdfconverter" version))
               (sha256
                (base32
-                "1hhaxmqc7wh8gnyw5jaqckliknvk0p21y12wk3bdmncgkaf9ar8f"))))
+                "07c5nmkyx2y0gwfjq66fhy68c24mclvs2qqv1z9ilvvypii4blb0"))))
     (build-system python-build-system)
+    (arguments '(#:tests? #f))         ;no tests
     (propagated-inputs
-     `(("python-sphinx" ,python-sphinx)))
-    (home-page "https://github.com/missinglinkelectronics/sphinxcontrib-svg2pdfconverter")
+     (list python-sphinx))
+    (home-page
+     "https://github.com/missinglinkelectronics/sphinxcontrib-svg2pdfconverter")
     (synopsis "Sphinx SVG to PDF converter extension")
     (description "A Sphinx extension to convert SVG images to PDF in case the
 builder does not support SVG images natively (e.g. LaTeX).")
@@ -407,21 +486,40 @@ builder does not support SVG images natively (e.g. LaTeX).")
     (description "This package provides a Python API to easily integrate
 Sphinx documentation into your web application.  It provides tools to
 integrate Sphinx documents in web templates and to handle searches.")
-    (license license:bsd-3)))
+    (license license:bsd-3)
+    (properties `((python2-variant . ,(delay python2-sphinxcontrib-websupport))))))
 
+;; 1.1.2 is the last version to support Python 2.
 (define-public python2-sphinxcontrib-websupport
-  (package-with-python2 python-sphinxcontrib-websupport))
+  (package
+    (inherit (package-with-python2
+              (strip-python2-variant python-sphinxcontrib-websupport)))
+    (version "1.1.2")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "sphinxcontrib-websupport" version))
+              (sha256
+               (base32
+                "1z7fqra0xm1cdp8vvp80fcvnjlywym7bzz80m0liq7fz1zxvw08m"))))
+    (arguments
+     `(#:tests? #f
+       #:python ,python-2
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'sanity-check))))
+    (propagated-inputs
+     (list python2-six))))
 
 (define-public python-sphinx-gallery
   (package
     (name "python-sphinx-gallery")
-    (version "0.9.0")
+    (version "0.10.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "sphinx-gallery" version))
        (sha256
-        (base32 "14zyhr7m92nafhhnzfvnbgkf5m91krd9mjyi24zn59bjq6zyr8hl"))))
+        (base32 "1r07sa34511fbnwi2s32q00qdyv5d23d05imyfgnh2ivhfq34gwm"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -441,13 +539,13 @@ integrate Sphinx documents in web templates and to handle searches.")
                         ;; AssertionError.
                         " and not test_embed_links_and_styles"))))))))
     (native-inputs
-     `(("python-joblib" ,python-joblib)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-numpy" ,python-numpy)
-       ("python-pillow" ,python-pillow)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-sphinx" ,python-sphinx)))
+     (list python-joblib
+           python-matplotlib
+           python-numpy
+           python-pillow
+           python-pytest
+           python-pytest-cov
+           python-sphinx))
     (home-page "https://sphinx-gallery.github.io/stable/index.html")
     (synopsis "Generate an examples gallery automatically")
     (description
@@ -476,9 +574,6 @@ meta data such as the project name, author and version from your project for
 use in your Sphinx docs.")
     (license license:bsd-2)))
 
-(define-public python2-sphinx-me
-  (package-with-python2 python-sphinx-me))
-
 (define-public python-sphinx-repoze-autointerface
   (package
     (name "python-sphinx-repoze-autointerface")
@@ -492,8 +587,7 @@ use in your Sphinx docs.")
     (build-system python-build-system)
     (arguments '(#:tests? #f)) ; No tests.
     (propagated-inputs
-     `(("python-sphinx" ,python-sphinx)
-       ("python-zope-interface" ,python-zope-interface)))
+     (list python-sphinx python-zope-interface))
     (synopsis "Auto-generate Sphinx API docs from Zope interfaces")
     (description "This package defines an extension for the Sphinx documentation
 system.  The extension allows generation of API documentation by
@@ -501,8 +595,35 @@ introspection of @code{zope.interface} instances in code.")
     (home-page "https://github.com/repoze/repoze.sphinx.autointerface")
     (license license:repoze)))
 
-(define-public python2-sphinx-repoze-autointerface
-  (package-with-python2 python-sphinx-repoze-autointerface))
+(define-public python-sphinx-prompt
+  (package
+    (name "python-sphinx-prompt")
+    (version "1.5.0")
+    (source
+     (origin
+       (method git-fetch)               ; no source release in PyPI
+       (uri (git-reference
+             (url "https://github.com/sbrunner/sphinx-prompt")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0x9wmgf04rzivbzp7jv1b7fkhkpi02lpk5w1qf4i7bcgih00ym8a"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "python" "-m" "pytest")))))))
+    (native-inputs
+     (list python-pytest python-sphinx))
+    (home-page "https://github.com/sbrunner/sphinx-prompt")
+    (synopsis "Sphinx directive to add unselectable prompt")
+    (description
+     "This package provides a Sphinx directive to add unselectable prompt.")
+    (license license:bsd-3)))
 
 (define-public python-sphinx-alabaster-theme
   (package
@@ -516,7 +637,7 @@ introspection of @code{zope.interface} instances in code.")
                 "00nwwjj2d2ym4s2kk217x7jkx1hnczc3fvm8yxbqmsp6b0nxfqd6"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pygments" ,python-pygments)))
+     (list python-pygments))
     (home-page "https://alabaster.readthedocs.io/")
     (synopsis "Configurable sidebar-enabled Sphinx theme")
     (description "Alabaster is a visually (c)lean, responsive, configurable
@@ -538,11 +659,9 @@ theme for the Sphinx documentation system.  It's the default theme of Sphinx.")
         (base32 "05wc8f5hb3jsg2vh2jf7jsyan8d4i09ifrz2c8fp6f7x1zw9iav0"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-sphinx" ,python-sphinx)))
+     (list python-sphinx))
     (native-inputs
-     `(("python-commonmark" ,python-commonmark)
-       ("python-pytest" ,python-pytest)
-       ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)))
+     (list python-commonmark python-pytest python-sphinx-rtd-theme))
     (home-page "https://github.com/ribozz/sphinx-argparse")
     (synopsis "Sphinx extension for documenting argparse commands and options")
     (description
@@ -564,16 +683,13 @@ argparse commands and options")
     ;; FIXME: The 'pypi' release archive does not contain tests.
     (arguments '(#:tests? #f))
     (native-inputs
-     `(("python-sphinx" ,python-sphinx)))
+     (list python-sphinx))
     (home-page "https://bitbucket.org/ecollins/cloud_sptheme")
     (synopsis "'Cloud' theme for Sphinx documenter")
     (description "This package contains the \"Cloud\" theme for Sphinx and some
 related extensions.")
     (license license:bsd-3)))
 
-(define-public python2-sphinx-cloud-sptheme
-  (package-with-python2 python-sphinx-cloud-sptheme))
-
 (define-public python-guzzle-sphinx-theme
   (package
     (name "python-guzzle-sphinx-theme")
@@ -587,7 +703,7 @@ related extensions.")
           "1rnkzrrsbnifn3vsb4pfaia3nlvgvw6ndpxp7lzjrh23qcwid34v"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-sphinx" ,python-sphinx)))
+     (list python-sphinx))
     (home-page "https://github.com/guzzle/guzzle_sphinx_theme")
     (synopsis "Sphinx theme used by Guzzle")
     (description "This package provides guzzle_sphinx_theme, a theme for the
@@ -595,9 +711,6 @@ Sphinx documentation system, used by @uref{http://docs.guzzlephp.org, Guzzle}
 and several other projects.")
     (license license:expat)))
 
-(define-public python2-guzzle-sphinx-theme
-  (package-with-python2 python-guzzle-sphinx-theme))
-
 (define-public python-sphinx-rtd-theme
   (package
     (name "python-sphinx-rtd-theme")
@@ -612,15 +725,12 @@ and several other projects.")
     (build-system python-build-system)
     (arguments '(#:tests? #f)) ; No tests.
     (propagated-inputs
-     `(("python-sphinx" ,python-sphinx)))
+     (list python-sphinx))
     (home-page "https://github.com/snide/sphinx_rtd_theme/")
     (synopsis "ReadTheDocs.org theme for Sphinx")
     (description "A theme for Sphinx used by ReadTheDocs.org.")
     (license license:expat)))
 
-(define-public python2-sphinx-rtd-theme
-  (package-with-python2 python-sphinx-rtd-theme))
-
 (define-public python-breathe
   (package
     (name "python-breathe")
@@ -634,8 +744,7 @@ and several other projects.")
          "055h95fkdld7s49878fqjx1nri1drj1czc184vrb7i60mf2yqg9n"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-docutils" ,python-docutils)
-       ("python-sphinx" ,python-sphinx)))
+     (list python-docutils python-sphinx))
     (home-page "https://github.com/michaeljones/breathe")
     (synopsis "ReStructuredText and Sphinx bridge to Doxygen")
     (description "This package is an extension to reStructuredText and Sphinx
@@ -654,8 +763,7 @@ to be able to read and render the Doxygen xml output.")
         (base32 "1d1q0sanjp4nkfvhsxi75zf3xjyyi8nzxvl3v7l0jy9ld70nwnmj"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-sphinx" ,python-sphinx)
-       ("python-click" ,python-click)))
+     (list python-sphinx python-click))
     (home-page "https://github.com/sphinx-doc/sphinx-intl")
     (synopsis
      "Sphinx utility that makes it easy to translate and to apply translation")
@@ -664,44 +772,59 @@ to be able to read and render the Doxygen xml output.")
 translate and to apply translation to Sphinx generated document.")
     (license license:bsd-2)))
 
+(define-public python-sphinxext-opengraph
+  (package
+    (name "python-sphinxext-opengraph")
+    (version "0.4.2")
+    (source
+     (origin
+       (method git-fetch)               ; no tests in PyPI release
+       (uri (git-reference
+             (url "https://github.com/wpilibsuite/sphinxext-opengraph")
+             (commit (string-append "v"  version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0dka44wri7agcr1jd641hq6j7qlbycligp80ngf32l5asqz1mgzp"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "python" "-m" "pytest")))))))
+    (native-inputs
+     (list python-beautifulsoup4 python-pytest python-sphinx))
+    (home-page "https://github.com/wpilibsuite/sphinxext-opengraph")
+    (synopsis "Sphinx Extension to enable OpenGraph support")
+    (description
+     "This package provides a Sphinx Extension to generate OG metadata.")
+    (license license:bsd-3)))
+
 (define-public python-sphinx-autobuild
   (package
     (name "python-sphinx-autobuild")
-    (version "0.7.1")
+    (version "2021.3.14")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "sphinx-autobuild" version))
        (sha256
         (base32
-         "0kn753dyh3b1s0h77lbk704niyqc7bamvq6v3s1f6rj6i20qyf36"))))
+         "019z8kvnaw11r41b6pfdy9iz4iwyr0s51hs0a5djn797dsva676y"))))
     (build-system python-build-system)
     (arguments
-     `(#:phases
+     '(#:phases
        (modify-phases %standard-phases
-         ;; See https://github.com/GaretJax/sphinx-autobuild/pull/72
-         (add-after 'unpack 'use-later-port-for
-           (lambda _
-             (substitute* "requirements.txt"
-               (("port_for==.*") "port_for\n"))
-             #t))
-         (delete 'check)
-         (add-after 'install 'check
-           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
              (when tests?
-               (add-installed-pythonpath inputs outputs)
-               (invoke "pytest" "-v"))
-             #t)))))
+               (invoke "pytest" "-vv")))))))
     (propagated-inputs
-     `(("python-argh" ,python-argh)
-       ("python-livereload" ,python-livereload)
-       ("python-pathtools" ,python-pathtools)
-       ("python-port-for" ,python-port-for)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-tornado" ,python-tornado)
-       ("python-watchdog" ,python-watchdog)))
+     (list python-colorama python-livereload python-sphinx))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/GaretJax/sphinx-autobuild")
     (synopsis "Rebuild Sphinx documentation when a change is detected")
     (description
@@ -723,14 +846,10 @@ enabled web server.")
          "086v9mg21pvfx0lfqjx2xf36hnzrsripfg345xi59f7xwb9scjr4"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-sphinx" ,python-sphinx)))
+     (list python-setuptools-scm python-sphinx))
     (native-inputs
-     `(("python-dataclasses" ,python-dataclasses)
-       ("python-pytest" ,python-pytest)
-       ("python-sphinx" ,python-sphinx)
-       ("python-sphobjinv" ,python-sphobjinv)
-       ("python-typing-extensions" ,python-typing-extensions)))
+     (list python-dataclasses python-pytest python-sphinx
+           python-sphobjinv python-typing-extensions))
     (home-page "https://pypi.org/project/sphinx-autodoc-typehints/")
     (synopsis "Type hints for the Sphinx autodoc extension")
     (description "This extension allows you to use Python 3 annotations for
@@ -740,22 +859,22 @@ documenting acceptable argument types and return value types of functions.")
 (define-public python-nbsphinx
   (package
     (name "python-nbsphinx")
-    (version "0.7.1")
+    (version "0.8.8")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "nbsphinx" version))
         (sha256
           (base32
-            "0j56bxdj08vn3q1804qwb1ywhga1mdg1awgm7i64wfpfwi8df2zm"))))
+            "1v1lzkfx2lslhslqb110zxmm4dmdg6hs2rahf713c2rk9f10q2dm"))))
     (build-system python-build-system)
     (propagated-inputs
-      `(("python-docutils" ,python-docutils)
-        ("python-jinja2" ,python-jinja2)
-        ("python-nbconvert" ,python-nbconvert)
-        ("python-nbformat" ,python-nbformat)
-        ("python-sphinx" ,python-sphinx)
-        ("python-traitlets" ,python-traitlets)))
+      (list python-docutils
+            python-jinja2
+            python-nbconvert
+            python-nbformat
+            python-sphinx
+            python-traitlets))
     (home-page "https://nbsphinx.readthedocs.io/")
     (synopsis "Jupyter Notebook Tools for Sphinx")
     (description "@code{python-nbsphinx} is a Sphinx extension that
@@ -779,11 +898,8 @@ executed during the Sphinx build process.")
          "126lgm54c94ay3fci512ap4l607gak90pbz0fk98syxvj5izrrzx"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-attrs" ,python-attrs)
-       ("python-certifi" ,python-certifi)
-       ("python-fuzzywuzzy" ,python-fuzzywuzzy)
-       ("python-jsonschema" ,python-jsonschema)
-       ("python-levenshtein" ,python-levenshtein)))
+     (list python-attrs python-certifi python-fuzzywuzzy
+           python-jsonschema python-levenshtein))
     (home-page "https://github.com/bskinn/sphobjinv")
     (synopsis "Sphinx cross-reference tool")
     (description "Sphinx objects.inv inspection/manipulation tool.")
@@ -802,12 +918,10 @@ executed during the Sphinx build process.")
          "1wma60787m2451nn4bc4jw7bzqksplplb84wqxm34iaw70499z1p"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-ipython" ,python-ipython)
-       ("python-ipywidgets" ,python-ipywidgets)
-       ("python-nbconvert" ,python-nbconvert)
-       ("python-nbformat" ,python-nbformat)))
+     (list python-ipython python-ipywidgets python-nbconvert
+           python-nbformat))
     (native-inputs
-     `(("python-sphinx" ,python-sphinx)))
+     (list python-sphinx))
     (home-page "https://github.com/jupyter/jupyter-sphinx/")
     (synopsis "Jupyter Sphinx Extensions")
     (description
@@ -830,9 +944,9 @@ widgets, and supports thebelab for live code execution with minimal effort.")
          "06hzim0d3fd72kf30fyjbbm5n8ibyybic0kf62gm79qp50zjwr5w"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (native-inputs
-     `(("python-sphinx" ,python-sphinx)))
+     (list python-sphinx))
     (home-page "https://github.com/sphinx-contrib/autoprogram")
     (synopsis "Documenting CLI programs")
     (description
@@ -855,23 +969,19 @@ automated way to document command-line programs.  It scans
          "055bh3hyh72pafiylvgpsjlk18wm15gg4azc5rjlsww5z475iq1j"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-beautifulsoup4" ,python-beautifulsoup4)))
+     (list python-beautifulsoup4))
     (native-inputs
-     `(("python-beautifulsoup4" ,python-beautifulsoup4)
-       ("python-docutils" ,python-docutils)
-       ("python-jupyter-sphinx" ,python-jupyter-sphinx)
-       ("python-numpy" ,python-numpy)
-       ("python-numpydoc" ,python-numpydoc)
-       ("python-pandas" ,python-pandas)
-       ("python-plotly" ,python-plotly)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-regressions"
-        ,python-pytest-regressions)
-       ("python-recommonmark" ,python-recommonmark)
-       ("python-sphinx" ,python-sphinx)
-       ("python-xarray" ,python-xarray)
-       ("python-docutils" ,python-docutils)
-       ("python-sphinx" ,python-sphinx)))
+     (list python-beautifulsoup4
+           python-docutils-0.15
+           python-jupyter-sphinx
+           python-numpy
+           python-numpydoc
+           python-pandas
+           python-pytest
+           python-pytest-regressions
+           python-recommonmark
+           python-sphinx
+           python-xarray))
     (home-page "https://github.com/pydata/pydata-sphinx-theme")
     (synopsis "Bootstrap-based Sphinx theme")
     (description
diff --git a/gnu/packages/spice.scm b/gnu/packages/spice.scm
index d9daac1185..b0bf2bc939 100644
--- a/gnu/packages/spice.scm
+++ b/gnu/packages/spice.scm
@@ -64,12 +64,9 @@
                 "19jnpzlanq0a1m5lmlcsp50wxf7icxvpvclx7hnf0zxw8azngqd3"))))
     (build-system gnu-build-system)
     (propagated-inputs
-     `(("libusb" ,libusb)))
+     (list libusb))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (synopsis "Tools for sending USB device traffic over a network")
     (description
      "Usbredir is a network protocol for sending USB device traffic over a
@@ -92,11 +89,9 @@ different (virtual) machine than the one to which the USB device is attached.")
                 "06kf0q4l52gzx5p63l8850hff8pmhp7xv1hk8zgx2apbw18y6jd5"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libepoxy" ,libepoxy)
-        ("mesa" ,mesa)
-        ("udev" ,eudev)))
+      (list libepoxy mesa eudev))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (synopsis "Virtual 3D GPU library")
     (description "A virtual 3D GPU library that enables a virtualized operating
 system to use the host GPU to accelerate 3D rendering.")
@@ -147,15 +142,14 @@ which allows users to view a desktop computing environment.")
                 "1drvj8y35gnxbnrxsipwi15yh0vs9ixzv4wslz6r3lra8w3bfa0z"))))
     (build-system gnu-build-system)
     (propagated-inputs
-      `(("gstreamer" ,gstreamer)
-        ("gst-plugins-base" ,gst-plugins-base)
-        ("gst-plugins-good" ,gst-plugins-good)
-        ("spice-protocol" ,spice-protocol)
-
-        ;; These are required by the pkg-config files.
-        ("gtk+" ,gtk+)
-        ("pixman" ,pixman)
-        ("openssl" ,openssl)))
+      (list gstreamer
+            gst-plugins-base
+            gst-plugins-good
+            spice-protocol
+            ;; These are required by the pkg-config files.
+            gtk+
+            pixman
+            openssl))
     (inputs
       `(("glib-networking" ,glib-networking)
         ("gobject-introspection" ,gobject-introspection)
@@ -227,31 +221,36 @@ which allows users to view a desktop computing environment.")
                 "1xd0xffw0g5vvwbq4ksmm3jjfq45f9dw20xpmi82g1fj9f7wy85k"))))
     (build-system gnu-build-system)
     (propagated-inputs
-      `(("openssl" ,openssl)
-        ("pixman" ,pixman)
-        ("spice-protocol" ,spice-protocol)))
+      (list openssl pixman spice-protocol))
     (inputs
-      `(("cyrus-sasl" ,cyrus-sasl)
-        ("glib" ,glib)
-        ("libjpeg-turbo" ,libjpeg-turbo)
-        ("libcacard" ,libcacard)        ; smartcard support
-        ("lz4" ,lz4)
-        ("opus" ,opus)
-        ("orc" ,orc)
-        ("zlib" ,zlib)))
+      (list cyrus-sasl
+            glib
+            libjpeg-turbo
+            libcacard ; smartcard support
+            lz4
+            opus
+            orc
+            zlib))
     (native-inputs
-      `(("pkg-config" ,pkg-config)
-        ("python" ,python)
-        ("spice-gtk" ,spice-gtk)
-
-        ;; These are needed for the server listen tests.
-        ("glib-networking" ,glib-networking)
-        ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)))
+      (list pkg-config
+            python
+            spice-gtk
+            ;; These are needed for the server listen tests.
+            glib-networking
+            gsettings-desktop-schemas))
     (arguments
       `(#:configure-flags
         '("--enable-lz4"
           "--enable-automated-tests")
 
+        #:phases
+        (modify-phases %standard-phases
+          ;; XXX: Otherwise the server listen tests fails with
+          ;;   Failed to create /homeless-shelter/.config/glib-2.0/settings
+          (add-before 'check 'set-XDG_CONFIG_HOME
+            (lambda _
+              (setenv "XDG_CONFIG_HOME" "/tmp"))))
+
         ;; Several tests appear to be opening the same sockets concurrently.
         #:parallel-tests? #f))
     (synopsis "Server implementation of the SPICE protocol")
@@ -273,7 +272,9 @@ Internet and from a wide variety of machine architectures.")
                 "spice-vdagent-" version ".tar.bz2"))
               (sha256
                (base32
-                "0n8jlc1pv6mkry161y656b1nk9hhhminjq6nymzmmyjl7k95ymzx"))))
+                "0n8jlc1pv6mkry161y656b1nk9hhhminjq6nymzmmyjl7k95ymzx"))
+              (patches
+               (search-patches "spice-vdagent-glib-2.68.patch"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
@@ -305,21 +306,20 @@ Internet and from a wide variety of machine architectures.")
                (("ps -ef")
                 "ps -efww")))))))
     (inputs
-      `(("alsa-lib" ,alsa-lib)
-        ("dbus" ,dbus)
-        ("glib" ,glib)
-        ("gtk+" ,gtk+)
-        ("libdrm" ,libdrm)
-        ("libpciaccess" ,libpciaccess)
-        ("libx11" ,libx11)
-        ("libxext" ,libxext)
-        ("libxfixes" ,libxfixes)
-        ("libxinerama" ,libxinerama)
-        ("libxrandr" ,libxrandr)
-        ("spice-protocol" ,spice-protocol)))
+      (list alsa-lib
+            dbus
+            glib
+            gtk+
+            libdrm
+            libpciaccess
+            libx11
+            libxext
+            libxfixes
+            libxinerama
+            libxrandr
+            spice-protocol))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("procps" ,procps)))             ;tests use 'ps'
+     (list pkg-config procps))             ;tests use 'ps'
     (synopsis "Spice agent for Linux")
     (description "Spice-vdagent enables sharing the clipboard and guest display
 resolution scaling on graphical console window resize.")
@@ -329,41 +329,28 @@ resolution scaling on graphical console window resize.")
 (define-public libcacard
   (package
     (name "libcacard")
-    (version "2.8.0")
+    (version "2.8.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
                     "https://gitlab.freedesktop.org/spice/libcacard/uploads/"
-                    "9d8f24b131bcbbd7846727ea92952cb5"
+                    "13b249e695a0d9aa7cb501b1a85ebab1"
                     "/libcacard-" version ".tar.xz"))
-              (patches (search-patches "libcacard-unknown-variable.patch"))
               (sha256
                (base32
-                "0azj3rqr2smg0lai24xrn3zr628xmjfrzcggay877zrr64ybj1c0"))))
+                "1rrjlclm6ad63gah1fa4yfwrz4z6vgq2yrybbvzvvdbxrgl4vgzv"))))
     (build-system meson-build-system)
-    (arguments
-     '(#:tests? #f                      ; TODO Tests require gnutls built with
-                                        ; p11-kit
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'patch-tests
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "tests/setup-softhsm2.sh"
-               (("\\/usr\\/lib64\\/pkcs11\\/libsofthsm2\\.so")
-                (string-append (assoc-ref inputs "softhsm")
-                               "/lib/softhsm/libsofthsm2.so"))))))))
     (propagated-inputs
-     `(("glib" ,glib)                   ; Requires: in the pkg-config file
-       ("nss" ,nss)                     ; Requires.private: in the pkg-config
-       ("pcsc-lite" ,pcsc-lite)))       ; file
+     (list glib ; Requires: in the pkg-config file
+           nss ; Requires.private: in the pkg-config
+           pcsc-lite))       ; file
     (native-inputs
-     `(("openssl" ,openssl)
-       ("nss" ,nss "bin")
-       ("opensc" ,opensc)
-       ("softhsm" ,softhsm)
-       ("gnutls" ,gnutls)
-       ("pkg-config" ,pkg-config)
-       ("which" ,which)))
+     (list openssl
+           `(,nss "bin")
+           opensc
+           gnutls
+           pkg-config
+           which))
     (synopsis "Emulate and share smart cards with virtual machines")
     (description
      "The @acronym{CAC,Common Access Card} library can be used to emulate and
@@ -385,11 +372,7 @@ share smart cards from client system to local or remote virtual machines.")
                 "00y9vi69sja4pkrfnvrkwsscm41bqrjzvp8aijb20pvg6ymczhj7"))))
     (build-system gnu-build-system)
     (inputs
-      `(("gtk+" ,gtk+)
-        ("gtk-vnc" ,gtk-vnc)
-        ("libcap" ,libcap)
-        ("libxml2" ,libxml2)
-        ("spice-gtk" ,spice-gtk)))
+      (list gtk+ gtk-vnc libcap libxml2 spice-gtk))
     (native-inputs
       `(("glib:bin" ,glib "bin")
         ("intltool" ,intltool)
diff --git a/gnu/packages/spreadsheet.scm b/gnu/packages/spreadsheet.scm
new file mode 100644
index 0000000000..0016f38aff
--- /dev/null
+++ b/gnu/packages/spreadsheet.scm
@@ -0,0 +1,119 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2020, 2021 Ryan Prior <rprior@protonmail.com>
+;;; Copyright © 2020 Ekaitz Zarraga <ekaitz@elenq.tech>
+;;; Copyright © 2021 Jorge Gomez <jgart@dismail.de>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages spreadsheet)
+  #:use-module (guix packages)
+  #:use-module (guix git-download)
+  #:use-module (guix download)
+  #:use-module (guix utils)
+  #:use-module (guix build-system gnu)
+  #:use-module (guix build-system python)
+  #:use-module (guix licenses)
+  #:use-module (gnu packages base)
+  #:use-module (gnu packages bison)
+  #:use-module (gnu packages check)
+  #:use-module (gnu packages compression)
+  #:use-module (gnu packages maths)
+  #:use-module (gnu packages ncurses)
+  #:use-module (gnu packages time)
+  #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages python-web)
+  #:use-module (gnu packages python-xyz)
+  #:use-module (gnu packages statistics)
+  #:use-module (gnu packages xml))
+
+(define-public sc-im
+    (package
+      (name "sc-im")
+      (version "0.8.2")
+      (home-page "https://github.com/andmarti1424/sc-im")
+      (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
+                    "1nrjnw8sg75i0hkcbvjv7gydjddxjm27d5m1qczpg29fk9991q8z"))))
+      (build-system gnu-build-system)
+      (arguments
+        ;; There are no tests at the moment.
+        ;; https://github.com/andmarti1424/sc-im/issues/537
+        ;; https://github.com/andmarti1424/sc-im/pull/385
+        `(#:tests? #f
+          #:make-flags (list "-C" "src"
+                          (string-append "CC=" ,(cc-for-target))
+                          (string-append "prefix=" %output))
+          #:phases
+            (modify-phases
+               %standard-phases
+                 (delete 'configure))))
+      (inputs
+        (list gnuplot
+              libxls
+              libxlsxwriter
+              libxml2
+              libzip
+              ncurses))
+      (native-inputs
+        (list pkg-config which bison))
+      (synopsis "Spreadsheet program with vim-like keybindings")
+      (description
+ "@code{sc-im} is a highly configurable spreadsheet program
+ providing a vim-like experience.  @code{sc-im} supports @{gnuplot} interaction,
+ functions for sorting and filtering, 256 color support, and much more.")
+      (license bsd-4)))
+
+(define-public visidata
+  (package
+    (name "visidata")
+    (version "2.8")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "visidata" version))
+       (sha256
+        (base32
+         "1jfhrk0xvzzqfzs0khbig2dc94718qki8zys1f1a9553vjncvmi6"))))
+    (build-system python-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests? (invoke "pytest"))
+             #t)))))
+    (inputs
+     (list python-dateutil
+           python-requests
+           python-lxml
+           python-openpyxl
+           python-xlrd))
+    (native-inputs
+     (list python-pytest))
+    (synopsis "Terminal spreadsheet multitool for discovering and arranging data")
+    (description
+     "VisiData is an interactive multitool for tabular data.  It combines the
+clarity of a spreadsheet, the efficiency of the terminal, and the power of
+Python, into a lightweight utility which can handle millions of rows.")
+    (home-page "https://www.visidata.org/")
+    (license gpl3)))
diff --git a/gnu/packages/sqlite.scm b/gnu/packages/sqlite.scm
index a48d724488..c894f563a8 100644
--- a/gnu/packages/sqlite.scm
+++ b/gnu/packages/sqlite.scm
@@ -1,12 +1,12 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2015, 2018 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2015, 2018, 2020 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014, 2015, 2016, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2014 Sree Harsha Totakura <sreeharsha@totakura.in>
 ;;; Copyright © 2015, 2016 Sou Bunnbu <iyzsong@gmail.com>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Ben Woodcroft <donttrustben@gmail.com>
 ;;; Copyright © 2016 David Craven <david@craven.ch>
-;;; Copyright © 2016, 2017, 2018, 2019, 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017 Jelle Licht <jlicht@fsfe.org>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
@@ -45,34 +45,32 @@
 ;;; This module has been separated from (gnu packages databases) to reduce the
 ;;; number of module references for core packages.
 
+(define (sqlite-uri version year)
+  (let ((numeric-version
+         (match (string-split version #\.)
+           ((first-digit other-digits ...)
+            (string-append first-digit
+                           (string-pad-right
+                            (string-concatenate
+                             (map (cut string-pad <> 2 #\0)
+                                  other-digits))
+                            6 #\0))))))
+    (string-append "https://sqlite.org/" (number->string year)
+                   "/sqlite-autoconf-" numeric-version ".tar.gz")))
+
 (define-public sqlite
   (package
    (name "sqlite")
-   (version "3.31.1")
+   (version "3.36.0")
    (source (origin
             (method url-fetch)
-            (uri (let ((numeric-version
-                        (match (string-split version #\.)
-                          ((first-digit other-digits ...)
-                           (string-append first-digit
-                                          (string-pad-right
-                                           (string-concatenate
-                                            (map (cut string-pad <> 2 #\0)
-                                                 other-digits))
-                                           6 #\0))))))
-                   (string-append "https://sqlite.org/2020/sqlite-autoconf-"
-                                  numeric-version ".tar.gz")))
+            (uri (sqlite-uri version 2021))
+            (patches (search-patches "sqlite-hurd.patch"))
             (sha256
              (base32
-              "1bj936svd8i5g25xd1bj52hj4zca01fgl3sqkj86z9q5pkz4wa32"))))
-   (replacement sqlite/fixed)
+              "1qxwkfvd185dfcqbakrzikrsw6ffr5jp1gl3dch9dsdyjvmw745x"))))
    (build-system gnu-build-system)
-   (inputs `(("readline" ,readline)))
-   (native-inputs (if (hurd-target?)
-                      ;; TODO move into origin on the next rebuild cycle.
-                      `(("hurd-locking-mode.patch"
-                         ,@(search-patches "sqlite-hurd.patch")))
-                      '()))
+   (inputs (list readline))
    (outputs '("out" "static"))
    (arguments
     `(#:configure-flags
@@ -80,25 +78,13 @@
       ;; -DSQLITE_ENABLE_UNLOCK_NOTIFY and -DSQLITE_ENABLE_DBSTAT_VTAB
       ;; to CFLAGS.  GNU Icecat will refuse to use the system SQLite
       ;; unless these options are enabled.
-      (list (string-append "CFLAGS=-O2 -DSQLITE_SECURE_DELETE "
+      (list (string-append "CFLAGS=-O2 -g -DSQLITE_SECURE_DELETE "
                            "-DSQLITE_ENABLE_FTS3 "
                            "-DSQLITE_ENABLE_UNLOCK_NOTIFY "
                            "-DSQLITE_ENABLE_DBSTAT_VTAB "
                            ;; Column metadata is required by GNU Jami and Qt, et.al.
                            "-DSQLITE_ENABLE_COLUMN_METADATA"))
       #:phases (modify-phases %standard-phases
-                 ;; TODO: remove in the next rebuild cycle
-                 ,@(if (hurd-target?)
-                       `((add-after 'unpack 'patch-sqlite/hurd
-                           (lambda* (#:key inputs native-inputs
-                                     #:allow-other-keys)
-                             (let ((patch (assoc-ref
-                                           (if ,(%current-target-system)
-                                               native-inputs
-                                               inputs)
-                                           "hurd-locking-mode.patch")))
-                               (invoke "patch" "-p1" "--force" "-i" patch)))))
-                       '())
                  (add-after 'install 'move-static-library
                    (lambda* (#:key outputs #:allow-other-keys)
                      (let* ((out    (assoc-ref outputs "out"))
@@ -123,28 +109,14 @@ widely deployed SQL database engine in the world.  The source code for SQLite
 is in the public domain.")
    (license license:public-domain)))
 
-(define-public sqlite/fixed
+;; Newer version required for e.g. fossil.
+(define-public sqlite-next
   (package
     (inherit sqlite)
-    (version "3.32.3")
+    (version "3.37.0")
     (source (origin
               (method url-fetch)
-              (uri (let ((numeric-version
-                          (match (string-split version #\.)
-                            ((first-digit other-digits ...)
-                             (string-append first-digit
-                                            (string-pad-right
-                                             (string-concatenate
-                                              (map (cut string-pad <> 2 #\0)
-                                                   other-digits))
-                                             6 #\0))))))
-                     (string-append "https://sqlite.org/2020/sqlite-autoconf-"
-                                    numeric-version ".tar.gz")))
+              (uri (sqlite-uri version 2021))
               (sha256
                (base32
-                "0rlbaq177gcgk5dswd3akbhv2nvvzljrbhgy18hklbhw7h90f5d3"))))))
-
-;; Column metadata support was added to the regular 'sqlite' package with
-;; commit fad5b1a6d8d9c36bea5785ae4fbc1beb37e644d7.
-(define-public sqlite-with-column-metadata
-  (deprecated-package "sqlite-with-column-metadata" sqlite))
+                "1xvrfh2r5x5pljlvakym3zrhml2dvsr8dd8xsb3nzcylsi8lc6kk"))))))
diff --git a/gnu/packages/ssh.scm b/gnu/packages/ssh.scm
index 0a6d97e46c..4dd8bb6d96 100644
--- a/gnu/packages/ssh.scm
+++ b/gnu/packages/ssh.scm
@@ -1,8 +1,8 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012-2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013, 2014 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2014, 2015, 2016 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2015, 2016, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2015, 2016, 2018, 2019, 2020, 2021, 2022 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2019 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2016, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2016 Christine Lemmer-Webber <cwebber@dustycloud.org>
@@ -15,7 +15,7 @@
 ;;; Copyright © 2019, 2020 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2020 Oleg Pykhalov <go.wigust@gmail.com>
-;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Brice Waegeneire <brice@waegenei.re>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -63,6 +63,7 @@
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages readline)
+  #:use-module (gnu packages security-token)
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages xorg)
@@ -90,7 +91,7 @@
                (base32
                 "1rpysj65j9ls30bf2c5k5hykzzjfknrihs58imp178bx1wqzw4jl"))))
     (inputs
-     `(("readline" ,readline)))
+     (list readline))
     (arguments
      `(#:make-flags
        (list ,(string-append "CC=" (cc-for-target))
@@ -143,9 +144,7 @@ file names.
 
        ;; TODO: Add 'CMockery' and '-DWITH_TESTING=ON' for the test suite.
        #:tests? #f))
-    (inputs `(("zlib" ,zlib)
-              ("libgcrypt" ,libgcrypt)
-              ("mit-krb5" ,mit-krb5)))
+    (inputs (list zlib libgcrypt mit-krb5))
     (synopsis "SSH client library")
     (description
      "libssh is a C library implementing the SSHv2 and SSHv1 protocol for client
@@ -171,8 +170,7 @@ applications.")
    (build-system gnu-build-system)
    ;; The installed libssh2.pc file does not include paths to libgcrypt and
    ;; zlib libraries, so we need to propagate the inputs.
-   (propagated-inputs `(("libgcrypt" ,libgcrypt)
-                        ("zlib" ,zlib)))
+   (propagated-inputs (list libgcrypt zlib))
    (arguments `(#:configure-flags `("--with-libgcrypt")))
    (synopsis "Client-side C library implementing the SSH2 protocol")
    (description
@@ -186,7 +184,7 @@ a server that supports the SSH-2 protocol.")
 (define-public openssh
   (package
    (name "openssh")
-   (version "8.7p1")
+   (version "8.8p1")
    (source (origin
              (method url-fetch)
              (uri (string-append "mirror://openbsd/OpenSSH/portable/"
@@ -194,15 +192,15 @@ a server that supports the SSH-2 protocol.")
              (patches (search-patches "openssh-hurd.patch"))
              (sha256
               (base32
-               "090yxpi03pxxzb4ppx8g8hdpw7c4nf8p0avr6c7ybsaana5lp8vw"))))
+               "1s8z6f7mi1pwsl79cqai8cr350m5lf2ifcxff57wx6mvm478k425"))))
    (build-system gnu-build-system)
-   (native-inputs `(("groff" ,groff)
-                    ("pkg-config" ,pkg-config)))
+   (native-inputs (list groff pkg-config))
    (inputs `(("libedit" ,libedit)
              ("openssl" ,openssl)
              ,@(if (hurd-target?)
-                 '()
-                 `(("pam" ,linux-pam)))
+                   '()
+                   `(("pam" ,linux-pam)
+                     ("libfido2" ,libfido2)))     ;fails to build on GNU/Hurd
              ("mit-krb5" ,mit-krb5)
              ("zlib" ,zlib)
              ("xauth" ,xauth)))        ; for 'ssh -X' and 'ssh -Y'
@@ -227,7 +225,13 @@ a server that supports the SSH-2 protocol.")
                           ;; Enable PAM support in sshd.
                           ,,@(if (hurd-target?)
                                '()
-                               '("--with-pam"))
+                               '("--with-pam"
+
+                                 ;; Support creation and use of ecdsa-sk,
+                                 ;; ed25519-sk keys.
+                                 "--with-security-key-builtin"))
+
+
 
                           ;; "make install" runs "install -s" by default,
                           ;; which doesn't work for cross-compiled binaries
@@ -244,8 +248,7 @@ a server that supports the SSH-2 protocol.")
            (let ((out (assoc-ref outputs "out")))
              (substitute* "Makefile"
                (("PRIVSEP_PATH=/var/empty")
-                (string-append "PRIVSEP_PATH=" out "/var/empty")))
-             #t)))
+                (string-append "PRIVSEP_PATH=" out "/var/empty"))))))
         (add-before 'check 'patch-tests
          (lambda _
            (substitute* "regress/test-exec.sh"
@@ -255,21 +258,20 @@ a server that supports the SSH-2 protocol.")
            (substitute* (list "Makefile"
                               "regress/Makefile")
              (("^(tests:.*) t-exec(.*)" all pre post)
-              (string-append pre post)))
-           #t))
+              (string-append pre post)))))
         (replace 'install
-         (lambda* (#:key outputs (make-flags '()) #:allow-other-keys)
-           ;; Install without host keys and system configuration files.
-           (apply invoke "make" "install-nosysconf" make-flags)
-           (install-file "contrib/ssh-copy-id"
-                         (string-append (assoc-ref outputs "out")
-                                        "/bin/"))
-           (chmod (string-append (assoc-ref outputs "out")
-                                 "/bin/ssh-copy-id") #o555)
-           (install-file "contrib/ssh-copy-id.1"
-                         (string-append (assoc-ref outputs "out")
-                                        "/share/man/man1/"))
-           #t)))))
+          (lambda* (#:key outputs (make-flags '()) #:allow-other-keys)
+            (let ((out (assoc-ref outputs "out")))
+              ;; Install without host keys and system configuration files.
+              ;; This will install /var/empty to the store, which is needed
+              ;; by the system openssh-service-type.
+              (apply invoke "make" "install-nosysconf" make-flags)
+              (with-directory-excursion "contrib"
+                (chmod "ssh-copy-id" #o555)
+                (install-file "ssh-copy-id"
+                              (string-append out "/bin/"))
+                (install-file "ssh-copy-id.1"
+                              (string-append out "/share/man/man1/")))))))))
    (synopsis "Client and server for the secure shell (ssh) protocol")
    (description
     "The SSH2 protocol implemented in OpenSSH is standardised by the
@@ -292,6 +294,8 @@ TCP-forwarding.  It provides a flow control service for these channels.
 Additionally, various channel-specific options can be negotiated.")
    (license (license:non-copyleft "file://LICENSE"
                                "See LICENSE in the distribution."))
+   (properties
+    '((release-monitoring-url . "https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/")))
    (home-page "https://www.openssh.com/")))
 
 ;; OpenSSH without X support. This allows to use OpenSSH without dragging X
@@ -313,11 +317,12 @@ Additionally, various channel-specific options can be negotiated.")
               (uri (git-reference
                     (url home-page)
                     (commit (string-append "v" version))))
-              (file-name (string-append name "-" version ".tar.gz"))
+              (file-name (git-file-name name version))
               (sha256
                (base32
                 "1xpxkvgj7wgcl450djkcrmrf957mcy2f36hfs5g6kpla1gax2d1g"))
-              (modules '((guix build utils)))))
+              (patches (search-patches "guile-ssh-fix-test-suite.patch"
+                                       "guile-ssh-read-error.patch"))))
     (build-system gnu-build-system)
     (outputs '("out" "debug"))
     (arguments
@@ -362,16 +367,14 @@ Additionally, various channel-specific options can be negotiated.")
                                      (string-append examples "/sssh.scm"))
                         (delete-file-recursively bin)
                         #t))))))
-    (native-inputs `(("autoconf" ,autoconf)
-                     ("automake" ,automake)
-                     ("libtool" ,libtool)
-                     ("texinfo" ,texinfo)
-                     ("pkg-config" ,pkg-config)
-                     ("which" ,which)
-                     ("guile" ,guile-3.0))) ;needed when cross-compiling.
-    (inputs `(("guile" ,guile-3.0)
-              ("libssh" ,libssh)
-              ("libgcrypt" ,libgcrypt)))
+    (native-inputs (list autoconf
+                         automake
+                         libtool
+                         texinfo
+                         pkg-config
+                         which
+                         guile-3.0)) ;needed when cross-compiling.
+    (inputs (list guile-3.0 libssh libgcrypt))
     (synopsis "Guile bindings to libssh")
     (description
      "Guile-SSH is a library that provides access to the SSH protocol for
@@ -383,24 +386,31 @@ libssh library.")
   (package
     (inherit guile-ssh)
     (name "guile2.0-ssh")
+    (source (origin
+              (inherit (package-source guile-ssh))
+              (patches (search-patches "guile-ssh-fix-test-suite.patch"))))
     (native-inputs
-     `(("guile" ,guile-2.0) ;needed when cross-compiling.
-       ,@(alist-delete "guile" (package-native-inputs guile-ssh))))
-    (inputs `(("guile" ,guile-2.0)
-              ,@(alist-delete "guile" (package-inputs guile-ssh))))))
+     (modify-inputs (package-native-inputs guile-ssh)
+       (delete "guile")
+       (prepend guile-2.0 ;needed when cross-compiling.
+                )))
+    (inputs (modify-inputs (package-inputs guile-ssh)
+              (replace "guile" guile-2.0)))))
 
 (define-public guile2.2-ssh
   (package
     (inherit guile-ssh)
     (name "guile2.2-ssh")
+    (source (origin
+              (inherit (package-source guile-ssh))
+              (patches (search-patches "guile-ssh-fix-test-suite.patch"))))
     (native-inputs
-     `(("guile" ,guile-2.2) ;needed when cross-compiling.
-       ,@(alist-delete "guile" (package-native-inputs guile-ssh))))
-    (inputs `(("guile" ,guile-2.2)
-              ,@(alist-delete "guile" (package-inputs guile-ssh))))))
-
-(define-public guile3.0-ssh
-  (deprecated-package "guile3.0-ssh" guile-ssh))
+     (modify-inputs (package-native-inputs guile-ssh)
+       (delete "guile")
+       (prepend guile-2.2 ;needed when cross-compiling.
+                )))
+    (inputs (modify-inputs (package-inputs guile-ssh)
+              (replace "guile" guile-2.2)))))
 
 (define-public corkscrew
   ;; The last 2.0 release hails from 2009.  Use a fork (submitted upstream as
@@ -442,11 +452,9 @@ libssh library.")
                  (install-file "README.md" doc)
                  #t))))))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("pkg-config" ,pkg-config)))
+       (list autoconf automake pkg-config))
       (inputs
-       `(("openssl" ,openssl)))
+       (list openssl))
       (home-page "https://github.com/patpadgett/corkscrew")
       (synopsis "SSH tunneling through HTTP(S) proxies")
       (description
@@ -484,7 +492,7 @@ with optional @acronym{TLS, Transport-Level Security} to protect credentials.")
                (wrap-program (string-append bin "/mosh")
                              `("PATH" ":" prefix (,bin)))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("openssl" ,openssl)
        ("perl" ,perl)
@@ -527,9 +535,7 @@ responsive, especially over Wi-Fi, cellular, and long-distance links.")
      `(#:configure-flags '("--disable-bundled-libtom")
        #:tests? #f))    ; there is no "make check" or anything similar
     (inputs
-     `(("libtomcrypt" ,libtomcrypt)
-       ("libtommath" ,libtommath)
-       ("zlib" ,zlib)))
+     (list libtomcrypt libtommath zlib))
     (synopsis "Small SSH server and client")
     (description "Dropbear is a relatively small SSH server and
 client.  It runs on a variety of POSIX-based platforms.  Dropbear is
@@ -593,28 +599,25 @@ basis for almost any application.")
               (patches (search-patches "lsh-fix-x11-forwarding.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("m4" ,m4)
-       ("guile" ,guile-2.0)
-       ("gperf" ,gperf)
-       ("psmisc" ,psmisc)))                       ; for `killall'
+     (list autoconf
+           automake
+           m4
+           guile-2.0
+           gperf
+           psmisc))                       ; for `killall'
     (inputs
-     `(("nettle" ,nettle-2)
-       ("linux-pam" ,linux-pam)
-
-       ;; 'rl.c' uses the 'CPPFunction' type, which is no longer in
-       ;; Readline 6.3.
-       ("readline" ,readline-6.2)
-
-       ("liboop" ,liboop)
-       ("zlib" ,zlib)
-       ("gmp" ,gmp)
-
-       ;; The server (lshd) invokes xauth when X11 forwarding is requested.
-       ;; This adds 24 MiB (or 27%) to the closure of lsh.
-       ("xauth" ,xauth)
-       ("libxau" ,libxau)))             ;also required for x11-forwarding
+     (list nettle-2
+           linux-pam
+           ;; 'rl.c' uses the 'CPPFunction' type, which is no longer in
+           ;; Readline 6.3.
+           readline-6.2
+           liboop
+           zlib
+           gmp
+           ;; The server (lshd) invokes xauth when X11 forwarding is requested.
+           ;; This adds 24 MiB (or 27%) to the closure of lsh.
+           xauth
+           libxau))             ;also required for x11-forwarding
     (arguments
      '(;; Skip the `configure' test that checks whether /dev/ptmx &
        ;; co. work as expected, because it relies on impurities (for
@@ -719,7 +722,7 @@ authentication}.")
         (base32 "0xqjw8df68f4kzkns5gcah61s5wk0m44qdk2z1d6388w6viwxhsz"))))
     (build-system gnu-build-system)
     (arguments `(#:tests? #f)) ; There is no "make check" or anything similar
-    (inputs `(("openssh" ,openssh)))
+    (inputs (list openssh))
     (synopsis "Automatically restart SSH sessions and tunnels")
     (description "autossh is a program to start a copy of @command{ssh} and
 monitor it, restarting it as necessary should it die or stop passing traffic.")
@@ -774,11 +777,9 @@ monitor it, restarting it as necessary should it die or stop passing traffic.")
                (("which") (which "which")))
              #t)))))
     (inputs
-     `(("openssh" ,openssh)
-       ("mit-krb5" ,mit-krb5)
-       ("perl" ,perl)))
+     (list openssh mit-krb5 perl))
     (native-inputs
-     `(("which" ,which)))
+     (list which))
     (home-page "https://github.com/chaos/pdsh")
     (synopsis "Parallel distributed shell")
     (description "Pdsh is a an efficient, multithreaded remote shell client
@@ -800,13 +801,10 @@ shell services and remote host selection.")
          "0lnhh2h1mj79j66ni883s9f3xldnbjb10vh80g24b7m003mm524c"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-cryptography" ,python-cryptography)
-       ("python-pyopenssl" ,python-pyopenssl)
-       ("python-gssapi" ,python-gssapi)
-       ("python-bcrypt" ,python-bcrypt)))
+     (list python-cryptography python-pyopenssl python-gssapi
+           python-bcrypt))
     (native-inputs
-     `(("openssh" ,openssh)
-       ("openssl" ,openssl)))
+     (list openssh openssl))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -829,18 +827,19 @@ framework.")
 (define-public clustershell
   (package
     (name "clustershell")
-    (version "1.8.3")
+    (version "1.8.4")
     (source
      (origin
-       (method url-fetch)
-       (uri (string-append "https://github.com/cea-hpc/clustershell/releases"
-                           "/download/v" version
-                           "/ClusterShell-" version ".tar.gz"))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/cea-hpc/clustershell")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
        (sha256
-        (base32 "1qdcgh733szwj9r1gambrgfkizvbjci0bnnkds9a8mnyb3sasnan"))))
+        (base32 "11b87vyamcw4rvgxz74jxwkr9ly0h9ldp2wqsi5wc19p0r06la5j"))))
     (build-system python-build-system)
-    (inputs `(("openssh" ,openssh)))
-    (propagated-inputs `(("python-pyyaml" ,python-pyyaml)))
+    (inputs (list openssh))
+    (propagated-inputs (list python-pyyaml))
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (add-before 'build 'record-openssh-file-name
@@ -849,8 +848,7 @@ framework.")
                         (substitute* "lib/ClusterShell/Worker/Ssh.py"
                           (("info\\(\"ssh_path\"\\) or \"ssh\"")
                            (string-append "info(\"ssh_path\") or \""
-                                          ssh "/bin/ssh\"")))
-                        #t))))))
+                                          ssh "/bin/ssh\"")))))))))
     (home-page "https://cea-hpc.github.io/clustershell/")
     (synopsis "Scalable event-driven Python framework for cluster administration")
     (description
@@ -913,8 +911,7 @@ clients at a time.")
                 "1bcy9flrzbvams5p77swwiygv54ac58ia7hpic1bvg30b3wpvv7b"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-paramiko" ,python-paramiko)
-       ("python-tornado" ,python-tornado)))
+     (list python-paramiko python-tornado))
     (home-page "https://webssh.huashengdun.org/")
     (synopsis "Web application to be used as an SSH client")
     (description "This package provides a web application to be used as an SSH
diff --git a/gnu/packages/sssd.scm b/gnu/packages/sssd.scm
index b2b5da96f8..5457991952 100644
--- a/gnu/packages/sssd.scm
+++ b/gnu/packages/sssd.scm
@@ -2,6 +2,8 @@
 ;;; Copyright © 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2021 Timotej Lazar <timotej.lazar@araneo.si>
+;;; Copyright © 2021, 2022 Remco van 't Veer <remco@remworks.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -22,12 +24,14 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix git-download)
   #:use-module (guix utils)
   #:use-module (guix build-system gnu)
   #:use-module (gnu packages)
   #:use-module (gnu packages)
   #:use-module (gnu packages adns)
   #:use-module (gnu packages augeas)
+  #:use-module (gnu packages autotools)
   #:use-module (gnu packages check)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages cyrus-sasl)
@@ -50,6 +54,62 @@
   #:use-module (gnu packages web)
   #:use-module (gnu packages xml))
 
+(define-public adcli
+  (package
+    (name "adcli")
+    (version "0.9.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://gitlab.freedesktop.org/realmd/adcli.git")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1mwzd5vakdsssdvs6vljqpp8pw8i97n5lhxvmn9dn9720am7hfv7"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags
+       ;; The net tool is used to update the stored machine key for samba.
+       (list (string-append "--with-samba-data-tool="
+                            (assoc-ref %build-inputs "samba") "/bin/net"))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'use-local-docbook
+           ;; Patch Makefile and docs to use local docbook resources.
+           (lambda _
+             (let* ((docbook-xml (assoc-ref %build-inputs "docbook-xml"))
+                    (docbook-xsl (assoc-ref %build-inputs "docbook-xsl"))
+                    (xsldir (string-append docbook-xsl "/xml/xsl/docbook-xsl-"
+                                           ,(package-version docbook-xsl))))
+                    (with-directory-excursion "doc"
+                      (substitute*
+                          '("Makefile.am" "adcli.xml" "adcli-devel.xml" "adcli-docs.xml")
+                        (("http://docbook.sourceforge.net/release/xsl/current(/[^\"]*)" _ path)
+                         (string-append xsldir path))
+                        (("http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd")
+                         (string-append docbook-xml "/xml/dtd/docbook/docbookx.dtd")))
+                      (substitute* "Makefile.am"
+                        (("\\$\\(XMLTO\\)" xmlto)
+                         (string-append xmlto " --searchpath " xsldir "/html"))))))))))
+    (native-inputs
+     (list autoconf
+           automake
+           docbook-xml
+           docbook-xsl
+           libtool
+           libxslt
+           util-linux ; For `rev` command used in tests.
+           xmlto))
+    (inputs
+     (list cyrus-sasl mit-krb5 samba openldap))
+    (home-page "https://gitlab.freedesktop.org/realmd/adcli/")
+    (synopsis "Helper library and tools for Active Directory client operations")
+    (description "@command{adcli} is a command‐line tool to join a computer to
+an Active Directory domain.  It can also update the machine password and
+manage user, group and computer accounts for a domain.")
+    (license license:lgpl2.1+)))
+
 (define-public ding-libs
   (package
     (name "ding-libs")
@@ -91,7 +151,9 @@ fundamental object types for C.")
                (base32
                 "1h6hwibaf3xa2w6qpzjiiywmfj6zkgbz4r2isf3gd0xm6vq7n6if"))
               (patches (search-patches "sssd-fix-samba.patch"
-                                       "sssd-system-directories.patch"))))
+                                       "sssd-system-directories.patch"
+                                       "sssd-collision-with-external-nss-symbol.patch"
+                                       "sssd-fix-samba-4.15.3.patch"))))
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags
@@ -135,42 +197,55 @@ fundamental object types for C.")
            (lambda _
              (substitute* "src/tests/responder_socket_access-tests.c"
                (("tcase_add_test\\(tc_utils, resp_str_to_array_test\\);") ""))
-             #t)))))
+             #t))
+         (add-after 'unpack 'add-config-in
+           (lambda _
+             (let ((config.h (open-file "config.h.in" "a")))
+               (display (string-append "
+/* Missing in commits on original repo, dunno why but won't work without. */
+#undef SMB_HAS_NEW_NDR_PULL_STEAL_SWITCH
+")
+                        config.h)
+               (close config.h))))
+         (add-before 'configure 'autoconf
+           (lambda _
+             (invoke "autoconf"))))))
     (inputs
-     `(("augeas" ,augeas)
-       ("bind" ,isc-bind "utils")
-       ("c-ares" ,c-ares)
-       ("curl" ,curl)
-       ("cyrus-sasl" ,cyrus-sasl)
-       ("dbus" ,dbus)
-       ("ding-libs" ,ding-libs)
-       ("glib" ,glib)
-       ("gnutls" ,gnutls)
-       ("http-parser" ,http-parser)
-       ("jansson" ,jansson)
-       ("ldb" ,ldb)
-       ("libselinux" ,libselinux)
-       ("libsemanage" ,libsemanage)
-       ("libunistring" ,libunistring)
-       ("linux-pam" ,linux-pam)
-       ("mit-krb5" ,mit-krb5)
-       ("nss" ,nss)
-       ("openldap" ,openldap)
-       ("openssl" ,openssl)
-       ("pcre" ,pcre)
-       ("popt" ,popt)
-       ("samba" ,samba)
-       ("talloc" ,talloc)
-       ("tdb" ,tdb)
-       ("tevent" ,tevent)))
+     (list augeas
+           `(,isc-bind "utils")
+           c-ares
+           curl
+           cyrus-sasl
+           dbus
+           ding-libs
+           glib
+           gnutls
+           http-parser
+           jansson
+           ldb
+           libselinux
+           libsemanage
+           libunistring
+           linux-pam
+           mit-krb5
+           nss
+           openldap
+           openssl
+           pcre
+           popt
+           samba
+           talloc
+           tdb
+           tevent))
     (native-inputs
-     `(("check" ,check-0.14)
-       ("docbook-xsl" ,docbook-xsl)
-       ("docbook-xml" ,docbook-xml)
-       ("libxml2" ,libxml2)             ; for xmllint
-       ("libxslt" ,libxslt)
-       ("pkg-config" ,pkg-config)
-       ("util-linux" ,util-linux "lib"))) ;for uuid.h, reqired for KCM
+     (list autoconf-2.69
+           check-0.14
+           docbook-xsl
+           docbook-xml
+           libxml2 ; for xmllint
+           libxslt
+           pkg-config
+           `(,util-linux "lib"))) ;for uuid.h, reqired for KCM
     (home-page "https://pagure.io/SSSD/sssd/")
     (synopsis "System security services daemon")
     (description "SSSD is a system daemon.  Its primary function is to provide
diff --git a/gnu/packages/stalonetray.scm b/gnu/packages/stalonetray.scm
index c803fb06f6..57cdc5e2d8 100644
--- a/gnu/packages/stalonetray.scm
+++ b/gnu/packages/stalonetray.scm
@@ -37,7 +37,7 @@
        (sha256
         (base32
          "0k7xnpdb6dvx25d67v0crlr32cdnzykdsi9j889njiididc8lm1n"))))
-    (inputs `(("libx11" ,libx11)))
+    (inputs (list libx11))
     (build-system gnu-build-system)
     (home-page "http://stalonetray.sourceforge.net")
     (synopsis "Standalone freedesktop.org and KDE systray implementation")
diff --git a/gnu/packages/statistics.scm b/gnu/packages/statistics.scm
index d0166cae1d..7fa31c59b4 100644
--- a/gnu/packages/statistics.scm
+++ b/gnu/packages/statistics.scm
@@ -1,8 +1,8 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015 Vicente Vera Parra <vicentemvp@gmail.com>
 ;;; Copyright © 2016 Andreas Enge <andreas@enge.fr>
-;;; Copyright © 2016, 2017, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Pjotr Prins <pjotr.guix@thebird.nl>
 ;;; Copyright © 2016 Roel Janssen <roel@gnu.org>
 ;;; Copyright © 2016 Ben Woodcroft <donttrustben@gmail.com>
@@ -12,8 +12,11 @@
 ;;; Copyright © 2017 Alex Kost <alezost@gmail.com>
 ;;; Copyright © 2018 Alex Branham <alex.branham@gmail.com>
 ;;; Copyright © 2020 Tim Howes <timhowes@lavabit.com>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Bonface Munyoki Kilyungi <me@bonfacemunyoki.com>
 ;;; Copyright © 2021 Lars-Dominik Braun <lars@6xq.net>
+;;; Copyright © 2021 Frank Pursel <frank.pursel@gmail.com>
+;;; Copyright © 2022 Simon Tournier <zimon.toutoune@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -67,6 +70,7 @@
   #:use-module (gnu packages machine-learning)
   #:use-module (gnu packages maths)
   #:use-module (gnu packages multiprecision)
+  #:use-module (gnu packages ncurses)
   #:use-module (gnu packages pcre)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
@@ -74,6 +78,7 @@
   #:use-module (gnu packages python-science)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages readline)
+  #:use-module (gnu packages shells)
   #:use-module (gnu packages sphinx)
   #:use-module (gnu packages ssh)
   #:use-module (gnu packages tcl)
@@ -105,23 +110,23 @@
         "0lqrash677b09zxdlxp89z6k02y4i23mbqg83956dwl69wc53dan"))))
     (build-system gnu-build-system)
     (inputs
-     `(("cairo" ,cairo)
-       ("gettext" ,gettext-minimal)
-       ("gsl" ,gsl)
-       ("libxml2" ,libxml2)
-       ("pango" ,pango)
-       ("readline" ,readline)
-       ("gtk" ,gtk+)
-       ("gtksourceview" ,gtksourceview-3)
-       ("spread-sheet-widget" ,spread-sheet-widget)
-       ("zlib" ,zlib)))
+     (list cairo
+           gettext-minimal
+           gsl
+           libxml2
+           pango
+           readline
+           gtk+
+           gtksourceview-3
+           spread-sheet-widget
+           zlib))
     (native-inputs
-     `(("autoconf" ,autoconf)           ;for tests
-       ("glib" ,glib "bin")             ;for glib-genmarshal
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python-2)             ;for tests
-       ("texinfo" ,texinfo)))
+     (list autoconf ;for tests
+           `(,glib "bin") ;for glib-genmarshal
+           perl
+           pkg-config
+           python-2 ;for tests
+           texinfo))
     (home-page "https://www.gnu.org/software/pspp/")
     (synopsis "Statistical analysis")
     (description
@@ -148,8 +153,7 @@ be output in text, PostScript, PDF or HTML.")
     (build-system gnu-build-system)
     (home-page "http://mcmc-jags.sourceforge.net/")
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("lapack" ,lapack)))
+     (list gfortran lapack))
     (synopsis "Gibbs sampler")
     (description "JAGS is Just Another Gibbs Sampler.  It is a program for
 analysis of Bayesian hierarchical models using Markov Chain Monte Carlo (MCMC)
@@ -190,7 +194,7 @@ This package also provides @command{xls2csv} to export Excel files to CSV.")
 (define r-with-tests
   (package
     (name "r-with-tests")
-    (version "4.1.1")
+    (version "4.1.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://cran/src/base/R-"
@@ -198,7 +202,7 @@ This package also provides @command{xls2csv} to export Excel files to CSV.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0r6kpnxjbvb7gdfg4m1z8zc6xd225vw81wrnf05ps9ajawk06pji"))))
+                "1brqmc7mmb0z94kcs4crgl6v9a6sxhm9fm3y177d81vjkxg24di0"))))
     (build-system gnu-build-system)
     (arguments
      `(#:disallowed-references (,tzdata-for-tests)
@@ -215,18 +219,15 @@ This package also provides @command{xls2csv} to export Excel files to CSV.")
              ;; This ensures that Guix can detect embedded store references;
              ;; see bug #28157 for details.
              (substitute* "src/library/base/makebasedb.R"
-               (("compress = TRUE") "compress = FALSE"))
-             #t))
+               (("compress = TRUE") "compress = FALSE"))))
          (add-before 'configure 'patch-coreutils-paths
            (lambda* (#:key inputs #:allow-other-keys)
-             (let* ((coreutils (assoc-ref inputs "coreutils"))
-                   (uname-bin (string-append coreutils "/bin/uname"))
-                   (rm-bin (string-append coreutils "/bin/rm")))
+             (let ((uname-bin (search-input-file inputs "/bin/uname"))
+                   (rm-bin (search-input-file inputs "/bin/rm")))
                (substitute* "src/scripts/R.sh.in"
                  (("uname") uname-bin))
                (substitute* "src/unix/sys-std.c"
-                 (("rm -Rf ") (string-append rm-bin " -Rf "))))
-             #t))
+                 (("rm -Rf ") (string-append rm-bin " -Rf "))))))
          (add-after 'unpack 'build-reproducibly
            (lambda _
              ;; The documentation contains time stamps to demonstrate
@@ -285,17 +286,17 @@ as.POSIXct(if (\"\" != Sys.getenv(\"SOURCE_DATE_EPOCH\")) {\
              ;; that is suspected to be the culprit.
              (substitute* "src/library/methods/DESCRIPTION.in"
                (("\\(2008\\)\n") "(2008) ")
-               (("  ``Software") "``Software"))
-             #t))
+               (("  ``Software") "``Software")
+               (("Data Analysis:.") "Data Analysis:\n")
+               (("Programming with R") "  Programming with R"))))
          (add-before 'build 'set-locales
            (lambda _
              (setlocale LC_ALL "C")
-             (setenv "LC_ALL" "C")
-             #t))
+             (setenv "LC_ALL" "C")))
          (add-before 'configure 'set-default-pager
           ;; Set default pager to "cat", because otherwise it is "false",
           ;; making "help()" print nothing at all.
-          (lambda _ (setenv "PAGER" "cat") #t))
+          (lambda _ (setenv "PAGER" "cat")))
          (add-before 'check 'set-timezone
            ;; Some tests require the timezone to be set.  However, the
            ;; timezone may not just be "UTC", or else a brittle regression
@@ -303,9 +304,8 @@ as.POSIXct(if (\"\" != Sys.getenv(\"SOURCE_DATE_EPOCH\")) {\
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "TZ" "UTC+1")
              (setenv "TZDIR"
-                     (string-append (assoc-ref inputs "tzdata")
-                                    "/share/zoneinfo"))
-             #t))
+                     (search-input-directory inputs
+                                             "share/zoneinfo"))))
          (add-after 'build 'make-info
           (lambda _ (invoke "make" "info")))
          (add-after 'build 'install-info
@@ -345,18 +345,19 @@ as.POSIXct(if (\"\" != Sys.getenv(\"SOURCE_DATE_EPOCH\")) {\
        ("perl" ,perl)
        ("pkg-config" ,pkg-config)
        ("texinfo" ,texinfo) ; for building HTML manuals
-       ("texlive" ,(texlive-union (list texlive-ae
+       ("texlive" ,(texlive-updmap.cfg (list texlive-ae
                                         texlive-inconsolata
                                         texlive-fonts-ec
-                                        texlive-amsfonts/patched
+                                        texlive-grfext
+                                        texlive-amsfonts
                                         texlive-latex-base
                                         texlive-latex-fancyvrb
                                         texlive-latex-graphics
-                                        texlive-latex-hyperref
-                                        texlive-latex-oberdiek
+                                        texlive-hyperref
+                                        texlive-oberdiek
                                         texlive-latex-tools
                                         texlive-latex-upquote
-                                        texlive-latex-url
+                                        texlive-url
                                         texlive-latex-xkeyval)))
        ("tzdata" ,tzdata-for-tests)
        ("xz" ,xz)))
@@ -403,12 +404,49 @@ available, greatly increasing its breadth and scope.")
     (arguments
      `(#:tests? #f
        ,@(substitute-keyword-arguments (package-arguments r-with-tests)
+           ((#:disallowed-references refs '())
+            (cons perl refs))
            ((#:configure-flags flags)
             ;; Do not build the recommended packages.  The build system creates
             ;; random temporary directories and embeds their names in some
             ;; package files.  We build these packages with the r-build-system
             ;; instead.
-            `(cons "--without-recommended-packages" ,flags)))))))
+            `(cons "--without-recommended-packages" ,flags))
+           ((#:phases phases '%standard-phases)
+            `(modify-phases ,phases
+               (add-after 'install 'remove-extraneous-references
+                 (lambda* (#:key inputs outputs #:allow-other-keys)
+                   (let ((out (assoc-ref outputs "out")))
+                     (substitute* (string-append out "/lib/R/etc/Makeconf")
+                       (("^# configure.*")
+                        "# Removed to avoid extraneous references\n"))
+                     (substitute* (string-append out "/lib/R/bin/libtool")
+                       (((string-append
+                          "(-L)?("
+                          (assoc-ref inputs "bzip2")
+                          "|"
+                          (assoc-ref inputs "perl")
+                          "|"
+                          (assoc-ref inputs "texlive")
+                          "|"
+                          (assoc-ref inputs "texlive-bin")
+                          "|"
+                          (assoc-ref inputs "texinfo")
+                          "|"
+                          (assoc-ref inputs "xz")
+                          "|"
+                          (format #false
+                                  "/gnu/store/[^-]+-(~{~a~^|~})-[^/]+"
+                                  '("glibc-utf8-locales"
+                                    "libselinux"
+                                    "libsepol"
+                                    "file"
+                                    "texlive-bin"
+                                    "util-macros"
+                                    "graphite2"))
+                          "|"
+                          "/gnu/store/[^-]+-glibc-[^-]+-static"
+                          ")/lib")) ""))))))))))))
 
 (define-public rmath-standalone
   (package (inherit r-minimal)
@@ -446,14 +484,14 @@ D.V. Hinkley (1997, CUP), originally written by Angelo Canty for S.")
 (define-public r-mass
   (package
     (name "r-mass")
-    (version "7.3-54")
+    (version "7.3-55")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "MASS" version))
        (sha256
         (base32
-         "08g8ashbcas3ac98kxvchbwc8da9dq9anpngb4arnw62npawq05q"))))
+         "191i1iylvh2w2hi99fnm06731lma7z5snpjknfff1m9ziyy9qab5"))))
     (properties `((upstream-name . "MASS")))
     (build-system r-build-system)
     (home-page "http://www.stats.ox.ac.uk/pub/MASS4/")
@@ -467,17 +505,17 @@ Applied Statistics with S\" (4th edition, 2002) by Venables and Ripley.")
 (define-public r-class
   (package
     (name "r-class")
-    (version "7.3-19")
+    (version "7.3-20")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "class" version))
        (sha256
         (base32
-         "0dxyxk59fs90713qisanlvk4p0d3l8n8n7zdd4d5c290naaaw83q"))))
+         "10slys2jny4k2j8l8k97hwrwd6ryzajfnzywqpq2yc9bqxmh8nz6"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mass" ,r-mass)))
+     (list r-mass))
     (home-page "http://www.stats.ox.ac.uk/pub/MASS4/")
     (synopsis "R functions for classification")
     (description
@@ -499,7 +537,7 @@ k-nearest neighbour, Learning Vector Quantization and Self-Organizing Maps.")
          "168l653ygkg21fwrqrf7lsqi5p6jzhgmcvhrwv7lznkdzdhag2jw"))))
     (build-system r-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/cluster")
     (synopsis "Methods for cluster analysis")
     (description
@@ -530,14 +568,14 @@ code for possible problems.")
 (define-public r-foreign
   (package
     (name "r-foreign")
-    (version "0.8-81")
+    (version "0.8-82")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "foreign" version))
        (sha256
         (base32
-         "0b4rca1bl8xxna05057hchbwfmgjgx0n140szabpc0raizqzks0s"))))
+         "1yw07yqzfm4w1h92ijyamrmf7rmkqxgamqfd74x7zv4vsn20dvgq"))))
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/web/packages/foreign")
     (synopsis "Read data stored by other statistics software")
@@ -561,7 +599,7 @@ for reading and writing some dBase files.")
     (properties `((upstream-name . "KernSmooth")))
     (build-system r-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/KernSmooth")
     (synopsis "Functions for kernel smoothing")
     (description
@@ -594,18 +632,18 @@ also flexible enough to handle most nonstandard requirements.")
 (define-public r-matrix
   (package
     (name "r-matrix")
-    (version "1.3-4")
+    (version "1.4-0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "Matrix" version))
        (sha256
         (base32
-         "0fbcbysp3vaivmp1yasmp8mdsldhr826vfs4vyxrjpjl8jfifhmb"))))
+         "1xh62bwcly1blpvnagbhjym1qgw87yir3c72ylhvcla05rq67d62"))))
     (properties `((upstream-name . "Matrix")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lattice" ,r-lattice)))
+     (list r-lattice))
     (home-page "http://Matrix.R-forge.R-project.org/")
     (synopsis "Sparse and dense matrix classes and methods")
     (description
@@ -616,18 +654,18 @@ and operations on them using LAPACK and SuiteSparse.")
 (define-public r-nlme
   (package
     (name "r-nlme")
-    (version "3.1-153")
+    (version "3.1-155")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "nlme" version))
        (sha256
-        (base32 "1qw0sq64iybyidj0s8m76z4i1gxb1fn27s29i63fw5hvvy7aj9rx"))))
+        (base32 "0kzzpl63l298yy18x62ypgbhdw61fgm30lc4nlhjjhjj5220yfcz"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lattice" ,r-lattice)))
+     (list r-lattice))
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/nlme")
     (synopsis "Linear and nonlinear mixed effects models")
     (description
@@ -638,17 +676,16 @@ nonlinear mixed-effects models.")
 (define-public r-mgcv
   (package
    (name "r-mgcv")
-   (version "1.8-37")
+   (version "1.8-38")
    (source
     (origin
      (method url-fetch)
      (uri (cran-uri "mgcv" version))
      (sha256
-      (base32 "14gw714xcyvgrbajijmyd4v8zs84i701g7gyld6z8p7677dgc8w8"))))
+      (base32 "1fyx8b0xjyx75mp90v314gayzydkca5y90p76jnwxzfnhxbys4nd"))))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-matrix" ,r-matrix)
-      ("r-nlme" ,r-nlme)))
+    (list r-matrix r-nlme))
    (home-page "https://cran.r-project.org/web/packages/mgcv")
    (synopsis "Mixed generalised additive model computation")
    (description
@@ -661,14 +698,14 @@ distributions beyond the exponential family.")
 (define-public r-nnet
   (package
     (name "r-nnet")
-    (version "7.3-16")
+    (version "7.3-17")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "nnet" version))
        (sha256
         (base32
-         "0smmyx4vhlz99vy4w238y913gq74845v0l1p0g1kgydsp9lijlcr"))))
+         "0rws3rkd7dz1maz2mkld29jfrixjgacay8rqz7nmi82a2sw0nxgf"))))
     (build-system r-build-system)
     (home-page "http://www.stats.ox.ac.uk/pub/MASS4/")
     (synopsis "Feed-forward neural networks and multinomial log-linear models")
@@ -699,14 +736,14 @@ classification, regression and survival trees.")
 (define-public r-spatial
   (package
     (name "r-spatial")
-    (version "7.3-14")
+    (version "7.3-15")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "spatial" version))
        (sha256
         (base32
-         "0dlafq744mahxpb13llmsrg54fzww8ld1nbxmr7m851gff11kk2j"))))
+         "1vwc7ingskdj1k4nq418x9yl3cw699pckb9xh5a1yp3g9plknqg5"))))
     (build-system r-build-system)
     (home-page "http://www.stats.ox.ac.uk/pub/MASS4/")
     (synopsis "Functions for kriging and point pattern analysis")
@@ -729,7 +766,7 @@ analysis.")
          "0zrikancm9shixvgng89f1610sphlwljczi0fnjbdqn4l85rrarz"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-matrix" ,r-matrix)))
+     (list r-matrix))
     (home-page "https://github.com/therneau/survival")
     (synopsis "Survival analysis")
     (description
@@ -745,22 +782,22 @@ curves, Cox models, and parametric accelerated failure time models.")
     (build-system trivial-build-system)
     (arguments '(#:builder (begin (mkdir %output) #t)))
     (propagated-inputs
-     `(("r-minimal" ,r-minimal)
-       ("r-boot" ,r-boot)
-       ("r-class" ,r-class)
-       ("r-cluster" ,r-cluster)
-       ("r-codetools" ,r-codetools)
-       ("r-foreign" ,r-foreign)
-       ("r-kernsmooth" ,r-kernsmooth)
-       ("r-lattice" ,r-lattice)
-       ("r-mass" ,r-mass)
-       ("r-matrix" ,r-matrix)
-       ("r-mgcv" ,r-mgcv)
-       ("r-nlme" ,r-nlme)
-       ("r-nnet" ,r-nnet)
-       ("r-rpart" ,r-rpart)
-       ("r-spatial" ,r-spatial)
-       ("r-survival" ,r-survival)))))
+     (list r-minimal
+           r-boot
+           r-class
+           r-cluster
+           r-codetools
+           r-foreign
+           r-kernsmooth
+           r-lattice
+           r-mass
+           r-matrix
+           r-mgcv
+           r-nlme
+           r-nnet
+           r-rpart
+           r-spatial
+           r-survival))))
 
 (define-public r-bit
   (package
@@ -775,7 +812,7 @@ curves, Cox models, and parametric accelerated failure time models.")
          "0s7isadibxp2wr62r5cpbyh9z31sczzfz4j3rm7gxgjfpqgq8174"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "http://ff.r-forge.r-project.org")
     (synopsis "Class for vectors of 1-bit booleans")
     (description
@@ -798,7 +835,7 @@ binary booleans, @code{TRUE} and @code{FALSE} can be stored with 1 bit only.")
          "0y0m7q1rwam1g88cjx7zyi07mj5dipxd9jkl90f294syx8k6ipr5"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bit" ,r-bit)))
+     (list r-bit))
     (home-page "http://ff.r-forge.r-project.org/")
     (synopsis "S3 class for vectors of 64 bit integers")
     (description
@@ -811,6 +848,58 @@ interactive data exploration and manipulation and optionally leverage
 caching.")
     (license license:gpl2)))
 
+(define-public r-chorddiag
+  (package
+    (name "r-chorddiag")
+    (version "0.1.3")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/mattflor/chorddiag")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1bpy9q861l1hyyiqbx2f7qzp7j7im8bkcfdwgxzk5fm0250p359a"))
+       ;; Delete minified JavaScript file
+       (snippet
+        '(delete-file "inst/htmlwidgets/lib/d3/d3.min.js"))))
+    (build-system r-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'process-javascript
+           (lambda* (#:key inputs #:allow-other-keys)
+             (with-directory-excursion "inst/htmlwidgets/lib/d3"
+               (let ((source (assoc-ref inputs "d3.v4.js"))
+                     (target "d3.min.js"))
+                 (format #true "Processing ~a --> ~a~%"
+                         source target)
+                 (invoke "esbuild" source "--minify"
+                         (string-append "--outfile=" target)))))))))
+    (propagated-inputs
+     (list r-htmlwidgets r-rcolorbrewer))
+    (native-inputs
+     `(("esbuild" ,esbuild)
+       ("r-knitr" ,r-knitr)
+       ("d3.v4.js"
+        ,(origin
+           (method url-fetch)
+           (uri "https://d3js.org/d3.v4.js")
+           (sha256
+            (base32
+             "0y7byf6kcinfz9ac59jxc4v6kppdazmnyqfav0dm4h550fzfqqlg"))))))
+    (home-page "https://github.com/mattflor/chorddiag")
+    (synopsis "Create D3 chord diagram")
+    (description
+     "This package provides tools to create interactive chords diagrams via
+the D3 Javascript library.  Chord diagrams show directed relationships among a
+group of entities.  This package is based on
+@url{http://bl.ocks.org/mbostock/4062006} with some modifications (fading) and
+additions (tooltips, bipartite diagram type).")
+    (license license:gpl3+)))
+
 (define-public r-dichromat
   (package
     (name "r-dichromat")
@@ -832,13 +921,13 @@ effects of different types of color-blindness.")
 (define-public r-digest
   (package
     (name "r-digest")
-    (version "0.6.28")
+    (version "0.6.29")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "digest" version))
        (sha256
-        (base32 "006vqwfrry84xn51lxlfalzn9yqr1k81s39r0zy251azx5sqqcja"))))
+        (base32 "1ncwc5fwsylwlcp9vhkhszw8m5sifg74apig2m2pf168lha1yb3r"))))
     (build-system r-build-system)
     ;; Vignettes require r-knitr, which requires r-digest, so we have to
     ;; disable them and the tests.
@@ -910,7 +999,7 @@ algorithms.")
     (native-inputs
      `(("r-knitr" ,r-knitr)))
     (home-page "https://cran.r-project.org/web/packages/magrittr/index.html")
-    (synopsis "A forward-pipe operator for R")
+    (synopsis "Forward-pipe operator for R")
     (description
      "Magrittr provides a mechanism for chaining commands with a new
 forward-pipe operator, %>%.  This operator will forward a value, or the result
@@ -931,7 +1020,7 @@ see package vignette.  To quote Rene Magritte, \"Ceci n'est pas un pipe.\"")
         (base32 "16g1fzisbpqb15yh3pqf3iia4csppva5dnv1z88x9dg263xskwyh"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-colorspace" ,r-colorspace)))
+     (list r-colorspace))
     (home-page "https://cran.r-project.org/web/packages/munsell")
     (synopsis "Munsell colour system")
     (description
@@ -973,7 +1062,7 @@ in which the whole-plots or split-plots or both can be freely exchangeable.")
        (sha256
         (base32 "11sjjdn146w95s1vsfmmgdls082cbnm1slv98xvyjhsl2mpx4mga"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-rcpp" ,r-rcpp)))
+    (propagated-inputs (list r-rcpp))
     (home-page "http://had.co.nz/plyr")
     (synopsis "Tools for Splitting, Applying and Combining Data")
     (description
@@ -1035,7 +1124,7 @@ designed by Cynthia Brewer as described at http://colorbrewer2.org")
     (properties `((upstream-name . "sendmailR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-base64enc" ,r-base64enc)))
+     (list r-base64enc))
     (home-page
      "https://cran.r-project.org/web/packages/sendmailR")
     (synopsis "Send email using R")
@@ -1047,17 +1136,17 @@ solution for sending email, including attachments, from within R.")
 (define-public r-stringi
   (package
     (name "r-stringi")
-    (version "1.7.4")
+    (version "1.7.6")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "stringi" version))
        (sha256
         (base32
-         "1mda4612sc573zabsvygnla3vpnf3mql58fc9j450540h6hlwfv2"))))
+         "1v0rj5svgvn1mlf69yzm6jm00fxmrsxazs9xymzrf0apxjpxb8qf"))))
     (build-system r-build-system)
-    (inputs `(("icu4c" ,icu4c)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list icu4c))
+    (native-inputs (list pkg-config))
     (home-page "http://stringi.rexamine.com/")
     (synopsis "Character string processing facilities")
     (description
@@ -1082,9 +1171,7 @@ transliteration, concatenation, date-time formatting and parsing, etc.")
         (base32 "1p9ip7p87gbbg4s6d3d392svvzz2b5dqdq2c8ilgvn4s78nlsq47"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-glue" ,r-glue)
-       ("r-magrittr" ,r-magrittr)
-       ("r-stringi" ,r-stringi)))
+     (list r-glue r-magrittr r-stringi))
     (home-page "https://github.com/hadley/stringr")
     (synopsis "Simple, consistent wrappers for common string operations")
     (description
@@ -1107,9 +1194,7 @@ the input of another.")
         (base32 "1n0jrajpvc8hjkh9z4g8bwq63qy5vy5cgl2pzjardyih4ngcz3fq"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-plyr" ,r-plyr)
-       ("r-rcpp" ,r-rcpp)
-       ("r-stringr" ,r-stringr)))
+     (list r-plyr r-rcpp r-stringr))
     (home-page "https://github.com/hadley/reshape")
     (synopsis "Flexibly reshape data: a reboot of the \"reshape\" package")
     (description
@@ -1129,21 +1214,21 @@ using just two functions: melt and dcast (or acast).")
         (base32 "1si46bf9p09qzs208hqffwcb40305p361whmwhc1pwrsmx7jjxdh"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-digest" ,r-digest)
-       ("r-glue" ,r-glue)
-       ("r-gtable" ,r-gtable)
-       ("r-isoband" ,r-isoband)
-       ("r-mass" ,r-mass)
-       ("r-mgcv" ,r-mgcv)
-       ("r-tibble" ,r-tibble)
-       ("r-rlang" ,r-rlang)
-       ("r-scales" ,r-scales)
-       ("r-svglite" ,r-svglite) ; Needed for 'ggsave'
-       ("r-withr" ,r-withr)))
+     (list r-digest
+           r-glue
+           r-gtable
+           r-isoband
+           r-mass
+           r-mgcv
+           r-tibble
+           r-rlang
+           r-scales
+           r-svglite ; Needed for 'ggsave'
+           r-withr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://ggplot2.tidyverse.org")
-    (synopsis "An implementation of the grammar of graphics")
+    (synopsis "Implementation of the grammar of graphics")
     (description
      "Ggplot2 is an implementation of the grammar of graphics in R.  It
 combines the advantages of both base and lattice graphics: conditioning and
@@ -1165,10 +1250,9 @@ aesthetic attributes.")
                 "0skbj487b6f6pj2iz4yq2b9gbgb39cv5dyzhdl3w7ay1k0s5z9ph"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-mass" ,r-mass)))
+     (list r-ggplot2 r-mass))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/andrie/ggdendro")
     (synopsis "Create Dendrograms and Tree Diagrams Using ggplot2")
     (description "This is a set of tools for dendrograms and tree plots using
@@ -1193,14 +1277,11 @@ agnes cluster diagrams.")
          "1p3ip0qwpg8f63jfx0b8vbac6l20ddid8xvxzkfi6i858pybnawp"))))
     (build-system r-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("cairo" ,cairo)
-       ("freetype2" ,freetype)
-       ("zlib" ,zlib)))
+     (list cairo freetype zlib))
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)
-       ("r-systemfonts" ,r-systemfonts)))
+     (list r-rcpp r-systemfonts))
     (home-page "https://cran.r-project.org/web/packages/gdtools")
     (synopsis "Utilities for graphical rendering")
     (description
@@ -1221,13 +1302,11 @@ and to generate base64 encoded string from raster matrix.")
          "19ggknw5322yw7r1bzhw0bqggcrpn0qxddk7kblpqnra2zz2brkn"))))
     (build-system r-build-system)
     (inputs
-     `(("libpng" ,libpng)
-       ("zlib" ,zlib)))
+     (list libpng zlib))
     (propagated-inputs
-     `(("r-cpp11" ,r-cpp11)
-       ("r-systemfonts" ,r-systemfonts)))
+     (list r-cpp11 r-systemfonts))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/hadley/svglite")
     (synopsis "SVG graphics device")
     (description
@@ -1278,16 +1357,16 @@ evaluation (NSE) in R.")
 (define-public r-dbi
   (package
     (name "r-dbi")
-    (version "1.1.1")
+    (version "1.1.2")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "DBI" version))
               (sha256
                (base32
-                "0i0kfyg43nryyka2bjlgz4x75w965224qp36wz1hl7a2lswb6ajp"))))
+                "0n2gf5flmcrkad7p0pzsnsgwjl5006yi7lyz9lisqxhw8xykgv2n"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/rstats-db/DBI")
     (synopsis "R database interface")
     (description
@@ -1300,13 +1379,13 @@ R/DBMS implementations.")
 (define-public r-bh
   (package
     (name "r-bh")
-    (version "1.75.0-0")
+    (version "1.78.0-0")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "BH" version))
               (sha256
                (base32
-                "0nkgvl5qjs2a7jv0ncsrl4fqaw2pdaj7a1pncdv6kp874sci0k5f"))))
+                "1cwc1q8w9d6i81nclgi7lycsnpj0dcbxlv9rdb0f04r0d03rv7iv"))))
     (build-system r-build-system)
     (home-page "https://github.com/eddelbuettel/bh")
     (synopsis "R package providing subset of Boost headers")
@@ -1347,7 +1426,7 @@ adapted for other output formats, such as HTML or LaTeX.")
                 "0353aj975mj0yjc91z76bbfy86y7d5cvlqqyfr93cdng14nnd0dx"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://yihui.org/formatr/")
     (synopsis "Format R code automatically")
     (description
@@ -1369,7 +1448,7 @@ There is also a Shiny app as a user interface in this package.")
                 "0kgdv2vf1lz3b5kbal9s83gg6812nw7fvrq0rkyr0v4k1lwi3zxy"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-xfun" ,r-xfun)))
+     (list r-xfun))
     ;; We cannot add knitr to the inputs, because highr depends on xfun, which
     ;; is an input to knitr.
     #;
@@ -1386,13 +1465,13 @@ supported via Andre Simon's highlight package.")
 (define-public r-mime
   (package
     (name "r-mime")
-    (version "0.11")
+    (version "0.12")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "mime" version))
               (sha256
                (base32
-                "1h7fz0rqnp970r9q0d95qcxpxm9mb98rqhcdncx0w2qdkyj2fm11"))))
+                "0j9qbq9jfsp61h2d0xmb87pa2wi8nhb1h2wih7l5drf1sr8i0059"))))
     (build-system r-build-system)
     (home-page "https://github.com/yihui/mime")
     (synopsis "R package to map filenames to MIME types")
@@ -1418,8 +1497,7 @@ data derived from /etc/mime.types in UNIX-type systems.")
     ;; package.
     (arguments `(#:tests? #f))
     (propagated-inputs
-     `(("r-mime" ,r-mime)
-       ("r-xfun" ,r-xfun)))
+     (list r-mime r-xfun))
     (home-page "https://github.com/rstudio/markdown")
     (synopsis "Markdown rendering for R")
     (description
@@ -1449,20 +1527,16 @@ emitter (http://pyyaml.org/wiki/LibYAML) for R.")
 (define-public r-knitr
   (package
     (name "r-knitr")
-    (version "1.34")
+    (version "1.37")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "knitr" version))
               (sha256
                (base32
-                "0p6jdicyqknrqilcjm2h4r6vza5lpzccnsdirj92jb3ljg10b0by"))))
+                "0qyp78v3hz4qimlc3w4hj5dzp44n2w085ay0l1zvxsxs9142mk9r"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-evaluate" ,r-evaluate)
-       ("r-highr" ,r-highr)
-       ("r-stringr" ,r-stringr)
-       ("r-xfun" ,r-xfun)
-       ("r-yaml" ,r-yaml)))
+     (list r-evaluate r-highr r-stringr r-xfun r-yaml))
     (home-page "https://yihui.org/knitr/")
     (synopsis "General-purpose package for dynamic report generation in R")
     (description
@@ -1487,9 +1561,7 @@ generation in R using Literate Programming techniques.")
     (properties `((upstream-name . "knitrBootstrap")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-knitr" ,r-knitr)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("r-markdown" ,r-markdown)))
+     (list r-knitr r-rmarkdown r-markdown))
     (home-page "https://github.com/jimhester/knitrBootstrap")
     (synopsis "Knitr bootstrap framework")
     (description
@@ -1500,13 +1572,13 @@ from knitr Rmarkdown.")
 (define-public r-microbenchmark
   (package
     (name "r-microbenchmark")
-    (version "1.4-7")
+    (version "1.4.9")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "microbenchmark" version))
               (sha256
                (base32
-                "1xl4m4yl4h2zcjiz8wsa7f3sh55qg2xr3sgpvz18rlix6b3173r6"))))
+                "1lpzpffnjiwnxxl0jhrvyj88fvxqksnpccbpq953xwqf6ypjqga4"))))
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/web/packages/microbenchmark/")
     (synopsis "Accurate timing functions for R")
@@ -1527,10 +1599,7 @@ the execution time of R expressions.")
                 "02vp1y7zhv22id43j5c0gdcgn9171dyypqp8rqrlc3w5a7n565kv"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-codetools" ,r-codetools)
-       ("r-lobstr" ,r-lobstr)
-       ("r-rcpp" ,r-rcpp)
-       ("r-stringr" ,r-stringr)))
+     (list r-codetools r-lobstr r-rcpp r-stringr))
     (home-page "https://github.com/hadley/pryr")
     (synopsis "Tools for computing on the R language")
     (description
@@ -1541,17 +1610,16 @@ understand the language at a deeper level.")
 (define-public r-memoise
   (package
     (name "r-memoise")
-    (version "2.0.0")
+    (version "2.0.1")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "memoise" version))
               (sha256
                (base32
-                "1bzcv7pmls3bx2w5ccv1pm20wycbfqba1v76k0fjgmjsm6hy76pz"))))
+                "1srdzv2bp0splislrabmf1sfbqfi3hn189nq7kxhgjn8k3p38l7q"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cachem" ,r-cachem)
-       ("r-rlang" ,r-rlang)))
+     (list r-cachem r-rlang))
     (home-page "https://github.com/hadley/memoise")
     (synopsis "Memoise functions for R")
     (description
@@ -1562,13 +1630,13 @@ you call it again with the same arguments it returns the pre-computed value.")
 (define-public r-crayon
   (package
     (name "r-crayon")
-    (version "1.4.1")
+    (version "1.4.2")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "crayon" version))
               (sha256
                (base32
-                "1ir963s6zk9l32fw257y54p7898cd7z7yazkn9h6j2cdfhpf9dh8"))))
+                "0mxq87qsvz5znfncrb6yjchzv6iwpn9lr386i02y6xiycizkjd7f"))))
     (build-system r-build-system)
     (home-page "https://github.com/gaborcsardi/crayon")
     (synopsis "Colored terminal output for R")
@@ -1602,36 +1670,36 @@ R packages that praise their users.")
 (define-public r-testthat
   (package
     (name "r-testthat")
-    (version "3.0.4")
+    (version "3.1.2")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "testthat" version))
               (sha256
                (base32
-                "0iqizv2gpv9fg766qv8hbkmc6c5i9xcfrmq9k5m2550p28zff2w3"))))
+                "0ndnmv3gbhlsyqya382wqfkkhlrgpdjmh7mymsv6ja52ihbachgd"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-brio" ,r-brio)
-       ("r-callr" ,r-callr)
-       ("r-cli" ,r-cli)
-       ("r-crayon" ,r-crayon)
-       ("r-desc" ,r-desc)
-       ("r-digest" ,r-digest)
-       ("r-ellipsis" ,r-ellipsis)
-       ("r-evaluate" ,r-evaluate)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-magrittr" ,r-magrittr)
-       ("r-pkgload" ,r-pkgload)
-       ("r-praise" ,r-praise)
-       ("r-processx" ,r-processx)
-       ("r-ps" ,r-ps)
-       ("r-r6" ,r-r6)
-       ("r-rlang" ,r-rlang)
-       ("r-waldo" ,r-waldo)
-       ("r-withr" ,r-withr)))
+     (list r-brio
+           r-callr
+           r-cli
+           r-crayon
+           r-desc
+           r-digest
+           r-ellipsis
+           r-evaluate
+           r-jsonlite
+           r-lifecycle
+           r-magrittr
+           r-pkgload
+           r-praise
+           r-processx
+           r-ps
+           r-r6
+           r-rlang
+           r-waldo
+           r-withr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/hadley/testthat")
     (synopsis "Unit testing for R")
     (description
@@ -1664,13 +1732,13 @@ defined in different packages.")
 (define-public r-rlang
   (package
     (name "r-rlang")
-    (version "0.4.11")
+    (version "0.4.12")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "rlang" version))
               (sha256
                (base32
-                "1pfm24jjkxzdb5qcbc05dcjxyk69zpfr5jv4xakqh1xh41mr43kl"))))
+                "05cr08smr8dlk10m810rw4qi1yhgnny83rwkxib0l4my71br29ia"))))
     (build-system r-build-system)
     (home-page "http://rlang.tidyverse.org")
     (synopsis "Functions for base types, core R and Tidyverse features")
@@ -1682,26 +1750,26 @@ like tidy evaluation.")
 (define-public r-tibble
   (package
     (name "r-tibble")
-    (version "3.1.4")
+    (version "3.1.6")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "tibble" version))
        (sha256
         (base32
-         "0zqpg2haph0qi1x5r6wr083xckab9gw21jbr9spcr8xdf43hx1vk"))))
+         "14l2i6ri3v5y0h8g0ahc4kz0pdqsp5yabxk2w8wavss6y44xjcsv"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ellipsis" ,r-ellipsis)
-       ("r-fansi" ,r-fansi)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-magrittr" ,r-magrittr)
-       ("r-pkgconfig" ,r-pkgconfig)
-       ("r-pillar" ,r-pillar)
-       ("r-rlang" ,r-rlang)
-       ("r-vctrs" ,r-vctrs)))
+     (list r-ellipsis
+           r-fansi
+           r-lifecycle
+           r-magrittr
+           r-pkgconfig
+           r-pillar
+           r-rlang
+           r-vctrs))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/hadley/tibble")
     (synopsis "Simple data frames")
     (description
@@ -1721,23 +1789,23 @@ and printing capabilities than traditional data frames.")
                 "0g8jsxclj9cgm7a2lyazy78sj62rbzw812lsw3fdsbz0pknkmznj"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ellipsis" ,r-ellipsis)
-       ("r-generics" ,r-generics)
-       ("r-glue" ,r-glue)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-magrittr" ,r-magrittr)
-       ("r-pillar" ,r-pillar)
-       ("r-r6" ,r-r6)
-       ("r-rlang" ,r-rlang)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyselect" ,r-tidyselect)
-       ("r-vctrs" ,r-vctrs)))
+     (list r-ellipsis
+           r-generics
+           r-glue
+           r-lifecycle
+           r-magrittr
+           r-pillar
+           r-r6
+           r-rlang
+           r-tibble
+           r-tidyselect
+           r-vctrs))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/hadley/dplyr")
     (synopsis "Tools for working with data frames in R")
     (description
-     "dplyr is the next iteration of plyr.  It is focussed on tools for
+     "dplyr is the next iteration of plyr.  It is focused on tools for
 working with data frames.  It has three main goals: 1) identify the most
 important data manipulation tools needed for data analysis and make them easy
 to use in R; 2) provide fast performance for in-memory data by writing key
@@ -1759,23 +1827,23 @@ database.")
          "025wqpmxdhzblb0pf58m3qh5h6bf5x8qvkf47vyl1cjsp13wz95b"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertthat" ,r-assertthat)
-       ("r-blob" ,r-blob)
-       ("r-dbi" ,r-dbi)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ellipsis" ,r-ellipsis)
-       ("r-glue" ,r-glue)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-magrittr" ,r-magrittr)
-       ("r-purrr" ,r-purrr)
-       ("r-r6" ,r-r6)
-       ("r-rlang" ,r-rlang)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyselect" ,r-tidyselect)
-       ("r-vctrs" ,r-vctrs)
-       ("r-withr" ,r-withr)))
+     (list r-assertthat
+           r-blob
+           r-dbi
+           r-dplyr
+           r-ellipsis
+           r-glue
+           r-lifecycle
+           r-magrittr
+           r-purrr
+           r-r6
+           r-rlang
+           r-tibble
+           r-tidyselect
+           r-vctrs
+           r-withr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/tidyverse/dbplyr")
     (synopsis "Dplyr back end for databases")
     (description
@@ -1798,7 +1866,7 @@ features require SQL translation to be provided by the package author.")
          "1f98rpfjmhd92rdc3j004plyfpjailz6j0ycysbac0kgj83haxc2"))))
     (build-system r-build-system)
     (inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/acepack")
     (synopsis "Functions for regression transformations")
     (description
@@ -1841,7 +1909,7 @@ side.")
          "1vcw16qww4v4547w0gfvhqg60l051bsdlxa6zfcgcj9xbxf6dlyr"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lattice" ,r-lattice)))
+     (list r-lattice))
     (home-page "https://cran.r-project.org/web/packages/locfit")
     (synopsis "Local regression, likelihood and density estimation")
     (description
@@ -1870,19 +1938,18 @@ times.")
 (define-public r-data-table
   (package
     (name "r-data-table")
-    (version "1.14.0")
+    (version "1.14.2")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "data.table" version))
               (sha256
                (base32
-                "0kgbvap5v2spnkz3dwfm4jh4qcpvbzdn9s8bzfnhzabz9qjdxw8k"))))
+                "0arx5wna0sh0vf5q8rjhh8nqdmnvg2pdpbhljl9l0x4kwm8vjhgp"))))
     (build-system r-build-system)
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("r-knitr" ,r-knitr)))
+     (list pkg-config r-knitr))
     (home-page "https://github.com/Rdatatable/data.table/wiki")
     (synopsis "Enhanced version of data.frame R object")
     (description
@@ -1905,7 +1972,7 @@ and fast file reading.")
          "077xfm0gphvhsay75amd9v90zk57kjgrrlgih04fyrbqqblc1gjs"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr))) ; for vignettes
+     (list r-knitr)) ; for vignettes
     (home-page "http://xtable.r-forge.r-project.org/")
     (synopsis "Export R tables to LaTeX or HTML")
     (description
@@ -1915,25 +1982,24 @@ and fast file reading.")
 (define-public python-patsy
   (package
     (name "python-patsy")
-    (version "0.5.1")
+    (version "0.5.2")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "patsy" version))
               (sha256
                (base32
-                "149rbrdzwns0ay88caf1zsm1r53v1q5np1mrb36na50y432cw5gi"))))
+                "17dn72519gvwifw3i8mzwlslxmxkl8ihzfrxg1iblsk70iwdwlsh"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda _ (invoke "nosetests" "-v"))))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests? (invoke "pytest" "-vv")))))))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-scipy" ,python-scipy)
-       ("python-six" ,python-six)))
+     (list python-numpy python-scipy python-six))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-pytest))
     (home-page "https://github.com/pydata/patsy")
     (synopsis "Describe statistical models and build design matrices")
     (description
@@ -1950,14 +2016,17 @@ building design matrices.")
 (define-public python-statsmodels
   (package
     (name "python-statsmodels")
-    (version "0.11.1")
+    (version "0.13.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "statsmodels" version))
        (sha256
-        (base32
-         "1w6mf8b86vizi2895j11szqryr2v1ckjig3wp9fv94aslfh3zpjv"))))
+        (base32 "0sbsyxgpzhys5padhkhrj71z4i1q41sm938pz0x8ff6jjvcchvh0"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           (for-each delete-file (find-files "." "\\.c$"))))))
     (build-system python-build-system)
     (arguments
      `(;; The test suite is very large and rather brittle.  Tests often fail
@@ -1978,15 +2047,10 @@ building design matrices.")
                               line)))
             #t)))))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-scipy" ,python-scipy)
-       ("python-pandas" ,python-pandas)
-       ("python-patsy" ,python-patsy)
-       ("python-matplotlib" ,python-matplotlib)))
+     (list python-numpy python-scipy python-pandas python-patsy
+           python-matplotlib))
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-nose" ,python-nose)
-       ("python-sphinx" ,python-sphinx)))
+     (list python-cython python-nose python-sphinx))
     (home-page "http://statsmodels.sourceforge.net/")
     (synopsis "Statistical modeling and econometrics in Python")
     (description
@@ -1998,6 +2062,16 @@ inference for statistical models.")
 (define-public python2-statsmodels
   (let ((stats (package-with-python2 python-statsmodels)))
     (package/inherit stats
+      ;; Version 0.11.1 and later does not work with Python 2.  It may build
+      ;; fine but loading modules fails.
+      (version "0.9.0")
+      (source
+       (origin
+         (method url-fetch)
+         (uri (pypi-uri "statsmodels" version))
+         (sha256
+          (base32
+           "0fxs8a7sp4d7jvqlm36yi45i2d28kjfvraf9q8i9jr1chhxgjqb4"))))
       (propagated-inputs
        `(("python2-pytz" ,python2-pytz)
          ("python2-numpy" ,python2-numpy)
@@ -2018,7 +2092,7 @@ inference for statistical models.")
                 "13z5dwfpnyyhpsbpg4xr9g5c1685jhqj90f4x4qkcykr6kykqba2"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lattice" ,r-lattice)))
+     (list r-lattice))
     (home-page "https://cran.r-project.org/web/packages/coda")
     (synopsis "This is a package for Output Analysis and Diagnostics for MCMC")
     (description "This package provides functions for summarizing and plotting
@@ -2040,9 +2114,7 @@ chain.")
             "09f5kh2mwygqpnvf53k0r54k0cvaafxm9x4nm819gwv05k2g9dpc"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mass" ,r-mass)
-       ("r-pixmap" ,r-pixmap)
-       ("r-sp" ,r-sp)))
+     (list r-mass r-pixmap r-sp))
     (home-page "http://pbil.univ-lyon1.fr/ADE-4")
     (synopsis "Multivariate data analysis and graphical display")
     (description
@@ -2053,21 +2125,19 @@ and environmental data in the framework of Euclidean exploratory methods.")
 (define-public r-xml2
   (package
     (name "r-xml2")
-    (version "1.3.2")
+    (version "1.3.3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "xml2" version))
        (sha256
         (base32
-         "1kx400v62xkd5xal7rzz7jcarz94ac8g1sh4i2dqr78qwgkzj8nz"))))
+         "138w7hb487al9cbahmnk5rhi23k8a9g7nk7s5dyxd3k1646rqknb"))))
     (build-system r-build-system)
     (inputs
-     `(("libxml2" ,libxml2)
-       ("zlib" ,zlib)))
+     (list libxml2 zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("r-knitr" ,r-knitr)))
+     (list pkg-config r-knitr))
     (home-page "https://github.com/hadley/xml2")
     (synopsis "Parse XML with R")
     (description
@@ -2088,7 +2158,7 @@ files in R.  It is built on top of the libxml2 C library.")
          "1gm3wr8xqpqiby7q1dr3zxim77v0bvvrqi0hlazf5g3gnkrp2zc3"))))
     (build-system r-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://github.com/wesleyburr/multitaper/")
     (synopsis "Multitaper spectral analysis tools")
     (description
@@ -2113,8 +2183,7 @@ jackknifed confidence intervals are available for most estimates.")
                 "1cbwwbz8lqx2n33xr4q904whvld22s63rpyy1nn93395l7ssrakr"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-curl" ,r-curl)
-       ("r-xml2" ,r-xml2)))
+     (list r-curl r-xml2))
     (home-page "https://github.com/metacran/rversions")
     (synopsis "Query R versions, including 'r-release' and 'r-oldrel'")
     (description
@@ -2144,14 +2213,14 @@ limited to R.")
 (define-public r-backports
   (package
     (name "r-backports")
-    (version "1.2.1")
+    (version "1.4.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "backports" version))
        (sha256
         (base32
-         "1mf2nz78l97lbxyagv55bcxrny51ds8g28h307cfa1g3ayylp0x2"))))
+         "0x144hij0rzhrxdq3k5ph8fk7pdgl1avjca25j4mlpmhzdckqp44"))))
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/web/packages/backports")
     (synopsis "Reimplementations of functions introduced since R 3.0.0")
@@ -2177,7 +2246,7 @@ R version.")
          "193gkifr9spp0x0rwnjq1spdhjkfkh4mv27iklskcj604075phhd"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-backports" ,r-backports)))
+     (list r-backports))
     (home-page "https://github.com/mllg/checkmate")
     (synopsis "Fast and versatile argument checks")
     (description
@@ -2200,7 +2269,7 @@ worries about execution time overhead.")
     (properties `((upstream-name . "BBmisc")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-checkmate" ,r-checkmate)))
+     (list r-checkmate))
     (home-page "https://github.com/berndbischl/BBmisc")
     (synopsis "Miscellaneous functions for R package development")
     (description
@@ -2221,8 +2290,7 @@ of R packages.")
          "0vfm6kmpmgsamda5p0sl771kbnsscan31l2chzssyw93kwmams7d"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bbmisc" ,r-bbmisc)
-       ("r-checkmate" ,r-checkmate)))
+     (list r-bbmisc r-checkmate))
     (home-page "https://github.com/mllg/fail")
     (synopsis "File abstraction interface layer (FAIL)")
     (description
@@ -2244,16 +2312,16 @@ or source files in a key-value fashion.")
     (properties `((upstream-name . "BatchJobs")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-backports" ,r-backports)
-       ("r-bbmisc" ,r-bbmisc)
-       ("r-brew" ,r-brew)
-       ("r-checkmate" ,r-checkmate)
-       ("r-data-table" ,r-data-table)
-       ("r-dbi" ,r-dbi)
-       ("r-digest" ,r-digest)
-       ("r-rsqlite" ,r-rsqlite)
-       ("r-sendmailr" ,r-sendmailr)
-       ("r-stringi" ,r-stringi)))
+     (list r-backports
+           r-bbmisc
+           r-brew
+           r-checkmate
+           r-data-table
+           r-dbi
+           r-digest
+           r-rsqlite
+           r-sendmailr
+           r-stringi))
     (home-page "https://github.com/tudo-r/BatchJobs")
     (synopsis "Batch computing with R")
     (description
@@ -2284,19 +2352,17 @@ module, Java Server Pages, and Python's psp module.")
 (define-public r-desc
   (package
     (name "r-desc")
-    (version "1.3.0")
+    (version "1.4.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "desc" version))
        (sha256
         (base32
-         "1sw4vya3l971gpccq4gnjywgbl73bgx8la18l0wy617qv94f905y"))))
+         "0jfnwn1kpiill8v4hmzdk90yz4gk2ha0prr2p0hq36s40v3y8842"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-crayon" ,r-crayon)
-       ("r-r6" ,r-r6)
-       ("r-rprojroot" ,r-rprojroot)))
+     (list r-crayon r-r6 r-rprojroot))
     (home-page "https://github.com/r-pkgs/desc")
     (synopsis "Manipulate DESCRIPTION Files")
     (description
@@ -2340,21 +2406,21 @@ tables, autolinks and strikethrough text.")
                 "1zf55wywlpy7mk7zfyi3s9fhhg1m9kvafzj46iqw5cbvnlg3ssdk"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-brew" ,r-brew)
-       ("r-commonmark" ,r-commonmark)
-       ("r-cpp11" ,r-cpp11)
-       ("r-desc" ,r-desc)
-       ("r-digest" ,r-digest)
-       ("r-knitr" ,r-knitr)
-       ("r-pkgload" ,r-pkgload)
-       ("r-purrr" ,r-purrr)
-       ("r-r6" ,r-r6)
-       ("r-rlang" ,r-rlang)
-       ("r-stringi" ,r-stringi)
-       ("r-stringr" ,r-stringr)
-       ("r-xml2" ,r-xml2)))
+     (list r-brew
+           r-commonmark
+           r-cpp11
+           r-desc
+           r-digest
+           r-knitr
+           r-pkgload
+           r-purrr
+           r-r6
+           r-rlang
+           r-stringi
+           r-stringr
+           r-xml2))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/klutometis/roxygen")
     (synopsis "In-source documentation system for R")
     (description
@@ -2365,22 +2431,30 @@ collation, and NAMESPACE files.")
 (define-public r-openssl
   (package
     (name "r-openssl")
-    (version "1.4.5")
+    (version "1.4.6")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "openssl" version))
        (sha256
         (base32
-         "1xy1w0rljzsgvsg91fh9hs6h9rx58mza1vg6rig9ykp9m2ml3hag"))))
+         "0na3yficxg0hjql9pvz96f66yh4g5k2hfwcricb705z7f2pk5f23"))))
     (build-system r-build-system)
+    (arguments
+     (list
+      #:phases
+      '(modify-phases %standard-phases
+         (add-after 'unpack 'do-not-use-versioned-linking
+           (lambda _
+             (substitute* "configure"
+               (("PKG_LIBS=\"\\$\\{PKG_LIBS_VERSIONED\\}\"")
+                "PKG_LIBS=\"${PKG_LIBS}\"")))))))
     (inputs
-     `(("libressl" ,libressl)))
+     (list openssl))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("r-knitr" ,r-knitr)))
+     (list pkg-config r-knitr))
     (propagated-inputs
-     `(("r-askpass" ,r-askpass)))
+     (list r-askpass))
     (home-page "https://github.com/jeroenooms/openssl")
     (synopsis "Toolkit for encryption, signatures and certificates")
     (description
@@ -2408,13 +2482,9 @@ integers.")
                 "1y8y1g1dkgv9jafrk1kj6pzxpw95c0rr9lplblfq2byrs1pfsas6"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-curl" ,r-curl)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-openssl" ,r-openssl)
-       ("r-mime" ,r-mime)
-       ("r-r6" ,r-r6)))
+     (list r-curl r-jsonlite r-openssl r-mime r-r6))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/hadley/httr")
     (synopsis "Tools for working with URLs and HTTP")
     (description
@@ -2427,19 +2497,18 @@ functions make it easy to control additional request components.")
 (define-public r-git2r
   (package
     (name "r-git2r")
-    (version "0.28.0")
+    (version "0.29.0")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "git2r" version))
               (sha256
                (base32
-                "1wjmbs9cmm16pm3g0rmqp7cxxyh95m5lgx4fx5bpgj6j466i8vff"))))
+                "13nlrhma6kavvhranb43w3003vadfkyrn2f4l3r63iqavj0s3xzq"))))
     (build-system r-build-system)
     (inputs
-     `(("libgit2" ,libgit2)
-       ("zlib" ,zlib)))
+     (list libgit2 zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/ropensci/git2r")
     (synopsis "Access Git repositories with R")
     (description
@@ -2460,7 +2529,7 @@ pure C implementation of the Git core methods.")
                 "12vdfzzjc6mv4h105l8cp108j3hjk0mqmg23m6mqr3jarfymphxa"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/rstudioapi")
     (synopsis "Safely access the RStudio API")
     (description
@@ -2471,37 +2540,37 @@ informative error messages when it's not available.")
 (define-public r-devtools
   (package
     (name "r-devtools")
-    (version "2.4.2")
+    (version "2.4.3")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "devtools" version))
               (sha256
                (base32
-                "01cg2ykg0av6z7bgl41njcxcii8vjj8ipch26xazp4yjai8abw3i"))))
+                "0kvbw218jp8pd2lgdjyn94v2iji75s385hkn1qbikcm0pjlmj8g4"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-callr" ,r-callr)
-       ("r-cli" ,r-cli)
-       ("r-desc" ,r-desc)
-       ("r-ellipsis" ,r-ellipsis)
-       ("r-fs" ,r-fs)
-       ("r-httr" ,r-httr)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-memoise" ,r-memoise)
-       ("r-pkgbuild" ,r-pkgbuild)
-       ("r-pkgload" ,r-pkgload)
-       ("r-rcmdcheck" ,r-rcmdcheck)
-       ("r-remotes" ,r-remotes)
-       ("r-rlang" ,r-rlang)
-       ("r-roxygen2" ,r-roxygen2)
-       ("r-rstudioapi" ,r-rstudioapi)
-       ("r-rversions" ,r-rversions)
-       ("r-sessioninfo" ,r-sessioninfo)
-       ("r-testthat" ,r-testthat)
-       ("r-usethis" ,r-usethis)
-       ("r-withr" ,r-withr)))
+     (list r-callr
+           r-cli
+           r-desc
+           r-ellipsis
+           r-fs
+           r-httr
+           r-lifecycle
+           r-memoise
+           r-pkgbuild
+           r-pkgload
+           r-rcmdcheck
+           r-remotes
+           r-rlang
+           r-roxygen2
+           r-rstudioapi
+           r-rversions
+           r-sessioninfo
+           r-testthat
+           r-usethis
+           r-withr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/hadley/devtools")
     (synopsis "Tools to make developing R packages easier")
     (description "The devtools package is a collection of package development
@@ -2511,16 +2580,16 @@ tools to simplify the devolpment of R packages.")
 (define-public r-withr
   (package
     (name "r-withr")
-    (version "2.4.2")
+    (version "2.4.3")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "withr" version))
               (sha256
                (base32
-                "1j5srffi748yxphwli56lkbh4cga0kmz38dyzganzkw0nx66mya8"))))
+                "0k4x2bd9wb24n3dyg7rdjicdjs5ay2kk5lfgkrcjsv6cki2wgnlv"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/jimhester/withr")
     (synopsis "Run code with temporarily modified global state")
     (description
@@ -2542,11 +2611,7 @@ were originally a part of the r-devtools package.")
          "0qlh4s1g9rbm6c3s906dhw3xsz28m8fg6cyynlkhvis533dk0pvb"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ellipsis" ,r-ellipsis)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-pkgconfig" ,r-pkgconfig)
-       ("r-rlang" ,r-rlang)
-       ("r-vctrs" ,r-vctrs)))
+     (list r-ellipsis r-lifecycle r-pkgconfig r-rlang r-vctrs))
     (home-page "https://github.com/rstats-db/hms")
     (synopsis "Pretty time of day")
     (description
@@ -2557,28 +2622,28 @@ time-of-day values, based on the @code{difftime} class.")
 (define-public r-readr
   (package
     (name "r-readr")
-    (version "2.0.1")
+    (version "2.1.1")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "readr" version))
               (sha256
                (base32
-                "0cj5k3ykkhixgdsqm1gnmpc0d8z04l3fhvm2dr5xp7cpmhgsrpfr"))))
+                "115w3hgp1w6hr0h2nz840i6mm1pnqzwfbxcmf9ca3qs7llc7k4q3"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cli" ,r-cli)
-       ("r-clipr" ,r-clipr)
-       ("r-cpp11" ,r-cpp11)
-       ("r-crayon" ,r-crayon)
-       ("r-hms" ,r-hms)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-tibble" ,r-tibble)
-       ("r-r6" ,r-r6)
-       ("r-rlang" ,r-rlang)
-       ("r-tzdb" ,r-tzdb)
-       ("r-vroom" ,r-vroom)))
+     (list r-cli
+           r-clipr
+           r-cpp11
+           r-crayon
+           r-hms
+           r-lifecycle
+           r-tibble
+           r-r6
+           r-rlang
+           r-tzdb
+           r-vroom))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/hadley/readr")
     (synopsis "Read tabular data")
     (description
@@ -2635,10 +2700,7 @@ scaling functions for R.")
     (properties `((upstream-name . "latticeExtra")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-jpeg" ,r-jpeg)
-       ("r-lattice" ,r-lattice)
-       ("r-png" ,r-png)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)))
+     (list r-jpeg r-lattice r-png r-rcolorbrewer))
     (home-page "http://latticeextra.r-forge.r-project.org/")
     (synopsis "Extra graphical utilities based on lattice")
     (description
@@ -2650,17 +2712,17 @@ well as additional utilities such as panel and axis annotation functions.")
 (define-public r-rcpparmadillo
   (package
     (name "r-rcpparmadillo")
-    (version "0.10.6.0.0")
+    (version "0.10.7.5.0")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "RcppArmadillo" version))
               (sha256
                (base32
-                "1bcx8fk5l5mmwb6cw36ndvld9v3amkz6vyc19059dw0xp7mxx04v"))))
+                "0516j6n657kxm8sdbxf3jd9z40px9mv7zza4fz8nih63f5iiw1kw"))))
     (properties `((upstream-name . "RcppArmadillo")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)))
+     (list r-rcpp))
     (home-page "https://github.com/RcppCore/RcppArmadillo")
     (synopsis "Rcpp integration for the Armadillo linear algebra library")
     (description
@@ -2706,7 +2768,7 @@ vectors.")
     (properties `((upstream-name . "caTools")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bitops" ,r-bitops)))
+     (list r-bitops))
     (home-page "https://cran.r-project.org/web/packages/caTools")
     (synopsis "Various tools including functions for moving window statistics")
     (description
@@ -2729,7 +2791,7 @@ encoder/decoder, round-off-error-free sum and cumsum, etc.")
          "07wy07yhms8zln9qb0iwx69dq08h4lrdi8kavjcplfxcskq638az"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/krlmlr/rprojroot")
     (synopsis "Finding files in project subdirectories")
     (description
@@ -2752,19 +2814,18 @@ certain criterion, e.g., it contains a certain regular file.")
     (properties `((upstream-name . "rmarkdown")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-evaluate" ,r-evaluate)
-       ("r-htmltools" ,r-htmltools)
-       ("r-jquerylib" ,r-jquerylib)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-knitr" ,r-knitr)
-       ("r-stringr" ,r-stringr)
-       ("r-tinytex" ,r-tinytex)
-       ("r-xfun" ,r-xfun)
-       ("r-yaml" ,r-yaml)
-       ("pandoc" ,pandoc)
-       ("pandoc-citeproc" ,pandoc-citeproc)))
+     (list r-evaluate
+           r-htmltools
+           r-jquerylib
+           r-jsonlite
+           r-knitr
+           r-stringr
+           r-tinytex
+           r-xfun
+           r-yaml
+           pandoc))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://rmarkdown.rstudio.com")
     (synopsis "Convert R Markdown documents into a variety of formats")
     (description
@@ -2804,9 +2865,9 @@ variety of formats.")
     (properties `((upstream-name . "gridExtra")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-gtable" ,r-gtable)))
+     (list r-gtable))
     (native-inputs
-     `(("r-knitr" ,r-knitr))) ;for building vignettes
+     (list r-knitr)) ;for building vignettes
     (home-page "https://github.com/baptiste/gridextra")
     (synopsis "Miscellaneous functions for \"Grid\" graphics")
     (description
@@ -2845,8 +2906,7 @@ that package, other packages are unaffected.")
                 "1yn7f13icaix0apxp4drnciwdn8bx8xmbd129jd7ck4rcly0axj9"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rlang" ,r-rlang)
-       ("r-vctrs" ,r-vctrs)))
+     (list r-rlang r-vctrs))
     (home-page "https://github.com/hadley/blob")
     (synopsis "Simple S3 Class for representing vectors of binary data")
     (description "Raw vectors in R are useful for storing a single binary
@@ -2858,25 +2918,25 @@ a column in data frame.")
 (define-public r-rsqlite
   (package
     (name "r-rsqlite")
-    (version "2.2.8")
+    (version "2.2.9")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "RSQLite" version))
               (sha256
                (base32
-                "1hscgi11px9hq0sx78c2lkfzq121rlvmhxmqf305xg6lgqdxr2hv"))))
+                "075vsnbkcwpwnn87b06mhbg2fflqhjvbylhbkg0d3v3rl7zg28s4"))))
     (properties `((upstream-name . "RSQLite")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dbi" ,r-dbi)
-       ("r-memoise" ,r-memoise)
-       ("r-plogr" ,r-plogr)
-       ("r-rcpp" ,r-rcpp)
-       ("r-bit64" ,r-bit64)
-       ("r-blob" ,r-blob)
-       ("r-pkgconfig" ,r-pkgconfig)))
+     (list r-dbi
+           r-memoise
+           r-plogr
+           r-rcpp
+           r-bit64
+           r-blob
+           r-pkgconfig))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/rstats-db/RSQLite")
     (synopsis "SQLite interface for R")
     (description
@@ -2914,7 +2974,7 @@ if (certs != \"\") { .opts = merge.list(.opts, list(cainfo=certs)) }
     (inputs
      `(("libcurl" ,curl)))
     (propagated-inputs
-     `(("r-bitops" ,r-bitops)))
+     (list r-bitops))
     (home-page "http://www.omegahat.net/RCurl")
     (synopsis "General network client interface for R")
     (description
@@ -2942,10 +3002,9 @@ ldap, and also supports cookies, redirects, authentication, etc.")
      `((upstream-name . "XML")))
     (build-system r-build-system)
     (inputs
-     `(("libxml2" ,libxml2)
-       ("zlib" ,zlib)))
+     (list libxml2 zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://www.omegahat.net/RSXML")
     (synopsis "Tools for parsing and generating XML within R")
     (description
@@ -2995,7 +3054,7 @@ plotted and compared with the asymptotic curve.")
     (properties `((upstream-name . "lambda.r")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-formatr" ,r-formatr)))
+     (list r-formatr))
     (home-page "https://cran.r-project.org/web/packages/lambda.r")
     (synopsis "Functional programming extension for R")
     (description
@@ -3040,8 +3099,7 @@ options defined in other packages.")
     (properties `((upstream-name . "futile.logger")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-futile-options" ,r-futile-options)
-       ("r-lambda-r" ,r-lambda-r)))
+     (list r-futile-options r-lambda-r))
     (home-page "https://cran.r-project.org/web/packages/futile.logger")
     (synopsis "Logging utility for R")
     (description
@@ -3074,13 +3132,13 @@ multiple breakpoints are allowed.")
 (define-public r-snow
   (package
     (name "r-snow")
-    (version "0.4-3")
+    (version "0.4-4")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "snow" version))
               (sha256
                (base32
-                "1n3n8pva9s34fvlw32yng0x416lmbv7q1fsd0ywa4kikmxym64l5"))))
+                "1j8kvf3imxijsqkdjz4i9s7qggfxqrpas46y5wz6za92y937yn44"))))
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/web/packages/snow")
     (synopsis "Support for simple parallel computing in R")
@@ -3105,7 +3163,7 @@ worker processes and collect and return the results on the master.")
     (properties
      `((upstream-name . "SparseM")))
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (build-system r-build-system)
     (home-page "http://www.econ.uiuc.edu/~roger/research/sparse/sparse.html")
     (synopsis "Sparse linear algebra")
@@ -3148,10 +3206,9 @@ data.")
          "1qb83b1jvpmk8d6kfibkm5q2hiki0x5gipy758mwa62n56gdcnpv"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-codetools" ,r-codetools)
-       ("r-iterators" ,r-iterators)))
+     (list r-codetools r-iterators))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/foreach")
     (synopsis "Foreach looping construct for R")
     (description
@@ -3179,8 +3236,7 @@ parallel.")
     (properties `((upstream-name . "doParallel")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-foreach" ,r-foreach)
-       ("r-iterators" ,r-iterators)))
+     (list r-foreach r-iterators))
     (home-page "https://cran.r-project.org/web/packages/doParallel")
     (synopsis "Foreach parallel adaptor for the 'parallel' package")
     (description
@@ -3202,8 +3258,7 @@ using the parallel package.")
     (properties `((upstream-name . "doMC")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-foreach" ,r-foreach)
-       ("r-iterators" ,r-iterators)))
+     (list r-foreach r-iterators))
     (home-page "https://cran.r-project.org/web/packages/doMC")
     (synopsis "Foreach parallel adaptor for the 'parallel' package")
     (description
@@ -3231,7 +3286,7 @@ using the multicore functionality of the parallel package.")
            ("https://cdn.datatables.net/1.10.20/js/dataTables.semanticui.js"
             "1477f49xyxs4phias789mbspv23w8alxchhl5b5iy0aw6vd35c43"
             "datatables")
-           
+
            ("https://cdn.datatables.net/autofill/2.3.4/js/dataTables.autoFill.js"
             "04i6n7r3512gzfihl5wnhrvm0klnjp41g1z6cny3j803hvmnp8zk"
             "datatables-extensions/AutoFill")
@@ -3310,7 +3365,7 @@ using the multicore functionality of the parallel package.")
            ("https://cdn.datatables.net/colreorder/1.5.2/js/colReorder.jqueryui.js"
             "1rd8hijz3prg2y36fvqczrpdzixibjy2dxgs2fmgr8wrm8k01rrm"
             "datatables-extensions/ColReorder")
-           
+
            ("https://cdn.datatables.net/fixedcolumns/3.3.0/js/dataTables.fixedColumns.js"
             "0vsqk2fv59n351bdfcbvhmvpq38qwf41j1cn810xz1l1i07cg4hg"
             "datatables-extensions/FixedColumns")
@@ -3329,7 +3384,7 @@ using the multicore functionality of the parallel package.")
            ("https://cdn.datatables.net/fixedcolumns/3.3.0/js/fixedColumns.semanticui.js"
             "1kqsap9y0d25a7m5zjakipifl5qi2qr72kfj4ap3zxavd8md2wyn"
             "datatables-extensions/FixedColumns")
-           
+
            ("https://cdn.datatables.net/fixedheader/3.1.6/js/dataTables.fixedHeader.js"
             "1ml5ilnm8nirr6rsgmzn75l1k0hcjz3sqk6h1y1gy8cpwpklvqri"
             "datatables-extensions/FixedHeader")
@@ -3348,7 +3403,7 @@ using the multicore functionality of the parallel package.")
            ("https://cdn.datatables.net/fixedheader/3.1.6/js/fixedHeader.semanticui.js"
             "1v0i6dc68h8l8673fb5970igzkl7as36riv504iyg82glfi7n877"
             "datatables-extensions/FixedHeader")
-           
+
            ("https://cdn.datatables.net/keytable/2.5.1/js/dataTables.keyTable.js"
             "16iib2icxsjh93x5hd42gpsl7bzpcsqb7zjgj0m1s02ls45bdlv5"
             "datatables-extensions/KeyTable")
@@ -3386,7 +3441,7 @@ using the multicore functionality of the parallel package.")
            ("https://cdn.datatables.net/responsive/2.2.3/js/responsive.bootstrap4.js"
             "1zjh15p7n1038sggaxv1xvcwbkhw2nk1ndx745s6cxiqb69y3i0h"
             "datatables-extensions/Responsive")
-           
+
            ("https://cdn.datatables.net/rowgroup/1.1.1/js/dataTables.rowGroup.js"
             "0s4q7ir2d6q36g29nn9mqk7vrqrdig2mm5zbcv0sn2lixqi29pkj"
             "datatables-extensions/RowGroup")
@@ -3424,7 +3479,7 @@ using the multicore functionality of the parallel package.")
            ("https://cdn.datatables.net/rowreorder/1.2.6/js/rowReorder.semanticui.js"
             "1zjrx2rlgw3qannsqa88pcp3i4pc87pwv7rmgfw1dar8namkr9kk"
             "datatables-extensions/RowReorder")
-           
+
            ("https://cdn.datatables.net/scroller/2.0.1/js/dataTables.scroller.js"
             "0zfjjdvwwlsnps24i9l4c97hmway2qs6addks1is5bxl4k1r6d16"
             "datatables-extensions/Scroller")
@@ -3443,7 +3498,7 @@ using the multicore functionality of the parallel package.")
            ("https://cdn.datatables.net/scroller/2.0.1/js/scroller.semanticui.js"
             "1dfbblbzbryjgiv31qfdjnijz19lmyijg12win3y8gsgfd4fp9zz"
             "datatables-extensions/Scroller")
-           
+
            ("https://cdn.datatables.net/searchbuilder/1.0.0/js/dataTables.searchBuilder.js"
             "0n5g0j0yfzqvdpsmwb27bj1rd8zx864fsx2k7b2kpv6mqqavzpqc"
             "datatables-extensions/SearchBuilder")
@@ -3478,7 +3533,7 @@ using the multicore functionality of the parallel package.")
            ("https://cdn.datatables.net/searchpanes/1.1.1/js/searchPanes.semanticui.js"
             "1781d0xmx7xz0jly0wsw2zbrdmfc1crahmcdbsfbj5s66kdsnd7c"
             "datatables-extensions/SearchPanes")
-           
+
            ("https://cdn.datatables.net/select/1.3.1/js/dataTables.select.js"
             "0a7bkbz1cizhiq4h417b4rcdr7998pn8q4dlyzx8449xdp0h0n0v"
             "datatables-extensions/Select")
@@ -3499,13 +3554,13 @@ using the multicore functionality of the parallel package.")
             "datatables-extensions/Select"))))
     (package
       (name "r-dt")
-      (version "0.19")
+      (version "0.20")
       (source (origin
                 (method url-fetch)
                 (uri (cran-uri "DT" version))
                 (sha256
                  (base32
-                  "04rv1rprqlc56hycxpqkbmwmq4wjvmanq2lwxrflmf2s46pbv9ms"))
+                  "17xs18i439p15agyk7z2xyyrwgrpn5pw09kd3jwxn7qhxi4pyvf6"))
                 (modules '((guix build utils)))
                 (snippet
                  '(for-each delete-file
@@ -3531,7 +3586,7 @@ using the multicore functionality of the parallel package.")
                              ((url hash dir)
                               (let* ((input (string-append "js:" (basename url)))
                                      (source (assoc-ref inputs input))
-                                     (target (string-append dir "/"
+                                     (target (string-append dir "/js/"
                                                             (basename url ".js")
                                                             ".min.js")))
                                 (mkdir-p dir)
@@ -3553,15 +3608,15 @@ using the multicore functionality of the parallel package.")
                                  (string-append (assoc-ref inputs "js-selectize")
                                                 "/share/javascript/selectize.min.js")))))))))
       (propagated-inputs
-       `(("r-crosstalk" ,r-crosstalk)
-         ("r-htmltools" ,r-htmltools)
-         ("r-htmlwidgets" ,r-htmlwidgets)
-         ("r-jquerylib" ,r-jquerylib)
-         ("r-jsonlite" ,r-jsonlite)
-         ("r-magrittr" ,r-magrittr)
-         ("r-promises" ,r-promises)))
+       (list r-crosstalk
+             r-htmltools
+             r-htmlwidgets
+             r-jquerylib
+             r-jsonlite
+             r-magrittr
+             r-promises))
       (inputs
-       `(("js-selectize" ,js-selectize)))
+       (list js-selectize))
       (native-inputs
        `(("r-knitr" ,r-knitr)
          ("uglifyjs" ,node-uglify-js)
@@ -3628,17 +3683,17 @@ flexible than the orphaned \"base64\" package.")
 (define-public r-irlba
   (package
     (name "r-irlba")
-    (version "2.3.3")
+    (version "2.3.5")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "irlba" version))
        (sha256
         (base32
-         "1h7mzrqdjc41814cf6c93sbyl7nxwvsf3x8apl9rhmydgdlk7qkf"))))
+         "1fcv4vazg2sbsda8qqjjsjn2wagcp2bsahvznwm443j66q6qrz16"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-matrix" ,r-matrix)))
+     (list r-matrix))
     (home-page "https://cran.r-project.org/web/packages/irlba")
     (synopsis "Methods for eigendecomposition of large matrices")
     (description
@@ -3650,22 +3705,23 @@ analysis of large sparse or dense matrices.")
 (define-public r-glmnet
   (package
    (name "r-glmnet")
-   (version "4.1-2")
+   (version "4.1-3")
    (source
     (origin
      (method url-fetch)
      (uri (cran-uri "glmnet" version))
      (sha256
-      (base32 "1kfd8kfhapx2cxw6qnkbs502c3kya4pd9qmf0mk76cdlq1c2paq6"))))
+      (base32 "0nij8v44b5dvp1vc843sfkl9ds83n6g687m2p37q1rdn82m3bg34"))))
    (build-system r-build-system)
    (native-inputs
-    `(("gfortran" ,gfortran)
-      ("r-knitr" ,r-knitr)))
+    (list gfortran r-knitr))
    (propagated-inputs
-    `(("r-foreach" ,r-foreach)
-      ("r-matrix" ,r-matrix)
-      ("r-shape" ,r-shape)
-      ("r-survival" ,r-survival)))
+    (list r-foreach
+          r-matrix
+          r-rcpp
+          r-rcppeigen
+          r-shape
+          r-survival))
    (home-page "https://www.jstatsoft.org/article/view/v033i01")
    (synopsis "Lasso and elastic-net regularized generalized linear models")
    (description
@@ -3689,13 +3745,13 @@ path-wise fashion.")
          "14ggsd24n5g5rvn0wl4w90ipxzmywqikh28llj89q6kpxwnv4iff"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertthat" ,r-assertthat)
-       ("r-codetools" ,r-codetools)
-       ("r-digest" ,r-digest)
-       ("r-registry" ,r-registry)
-       ("r-stringr" ,r-stringr)
-       ("r-withr" ,r-withr)
-       ("r-xtable" ,r-xtable)))
+     (list r-assertthat
+           r-codetools
+           r-digest
+           r-registry
+           r-stringr
+           r-withr
+           r-xtable))
     (home-page "https://renozao.github.io/pkgmaker")
     (synopsis "Package development utilities")
     (description
@@ -3736,7 +3792,7 @@ package registries.")
          "0kd7x214cqw7hzpmk1iqy1bn7j6x0ady0yz2hsdbclbq9k57d33z"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-digest" ,r-digest)))
+     (list r-digest))
     (home-page "https://renozao.github.io/rngtools")
     (synopsis "Utility functions for working with random number generators")
     (description
@@ -3761,7 +3817,7 @@ the way current RNG settings can be changed.")
     (properties `((upstream-name . "Rtsne")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)))
+     (list r-rcpp))
     (home-page "https://github.com/jkrijthe/Rtsne")
     (synopsis "T-distributed stochastic neighbor embedding")
     (description
@@ -3784,8 +3840,7 @@ Stochastic Neighbor Embedding using a Barnes-Hut implementation.")
          "09i2hmyf1bxansqp24p9n9djlzzarclqs173gjjv3fg0giga3ycv"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-class" ,r-class)
-       ("r-proxy" ,r-proxy)))
+     (list r-class r-proxy))
     (home-page "https://cran.r-project.org/web/packages/e1071")
     (synopsis "Miscellaneous functions for probability theory")
     (description
@@ -3827,10 +3882,7 @@ bigmemory and synchronicity packages.")
          "1kgsk64aifjm3mfj102y3va7x1abypq2zi0cqbnjhl8fqyzp69hx"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bh" ,r-bh)
-       ("r-bigmemory-sri" ,r-bigmemory-sri)
-       ("r-rcpp" ,r-rcpp)
-       ("r-uuid" ,r-uuid)))
+     (list r-bh r-bigmemory-sri r-rcpp r-uuid))
     (home-page "http://www.bigmemory.org")
     (synopsis "Boost mutex functionality in R")
     (description "This package provides support for synchronization
@@ -3852,9 +3904,7 @@ message passing.")
          "03pg8mxdc7q0249visjmc8bc3xmwxsfg3i2n6higicj4cfz7zihq"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bh" ,r-bh)
-       ("r-rcpp" ,r-rcpp)
-       ("r-bigmemory-sri" ,r-bigmemory-sri)))
+     (list r-bh r-rcpp r-bigmemory-sri))
     (home-page "http://www.bigmemory.org")
     (synopsis "Manage large matrices with shared memory or memory-mapped files")
     (description "This package provides methods to create, store, access, and
@@ -3900,7 +3950,7 @@ want to migrate to S4.")
     (properties `((upstream-name . "R.oo")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-r-methodss3" ,r-r-methodss3)))
+     (list r-r-methodss3))
     (home-page "https://github.com/HenrikBengtsson/R.oo")
     (synopsis "R object-oriented programming with or without references")
     (description
@@ -3923,8 +3973,7 @@ maintenance for package developers.")
     (properties `((upstream-name . "R.utils")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-r-methodss3" ,r-r-methodss3)
-       ("r-r-oo" ,r-r-oo)))
+     (list r-r-methodss3 r-r-oo))
     (home-page "https://github.com/HenrikBengtsson/R.utils")
     (synopsis "Various programming utilities")
     (description
@@ -3950,10 +3999,7 @@ developing R packages.")
          (add-after 'unpack 'set-HOME
            (lambda _ (setenv "HOME" "/tmp"))))))
     (propagated-inputs
-     `(("r-digest" ,r-digest)
-       ("r-r-methodss3" ,r-r-methodss3)
-       ("r-r-oo" ,r-r-oo)
-       ("r-r-utils" ,r-r-utils)))
+     (list r-digest r-r-methodss3 r-r-oo r-r-utils))
     (home-page "https://github.com/HenrikBengtsson/R.cache")
     (synopsis "Light-weight caching of objects and results")
     (description
@@ -3981,11 +4027,7 @@ persistent (on the file system).")
          (add-after 'unpack 'set-HOME
            (lambda _ (setenv "HOME" "/tmp"))))))
     (propagated-inputs
-     `(("r-digest" ,r-digest)
-       ("r-r-cache" ,r-r-cache)
-       ("r-r-methodss3" ,r-r-methodss3)
-       ("r-r-oo" ,r-r-oo)
-       ("r-r-utils" ,r-r-utils)))
+     (list r-digest r-r-cache r-r-methodss3 r-r-oo r-r-utils))
     (home-page "https://github.com/HenrikBengtsson/R.rsp")
     (synopsis "Dynamic generation of scientific reports")
     (description
@@ -4003,16 +4045,16 @@ vignettes.")
 (define-public r-mvtnorm
   (package
     (name "r-mvtnorm")
-    (version "1.1-2")
+    (version "1.1-3")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "mvtnorm" version))
               (sha256
                (base32
-                "05wh7mprf2sim2kxh3d72pdcmml6vbikzxavws1dq6mxwlsy2p7j"))))
+                "0j14q2bkc14v35s5k03sw44zsssrd2qjljlwzj014qxs74hk0kpz"))))
     (build-system r-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "http://mvtnorm.R-forge.R-project.org")
     (synopsis "Package for multivariate normal and t-distributions")
     (description "This package can compute multivariate normal and
@@ -4037,7 +4079,7 @@ t-probabilities, quantiles, random deviates and densities.")
          (add-after 'unpack 'set-HOME
            (lambda _ (setenv "HOME" "/tmp"))))))
     (native-inputs
-     `(("r-r-rsp" ,r-r-rsp))) ;used to build vignettes
+     (list r-r-rsp)) ;used to build vignettes
     (home-page "https://github.com/HenrikBengtsson/matrixStats")
     (synopsis "Methods applying to vectors and matrix rows and columns")
     (description
@@ -4051,20 +4093,18 @@ memory usage.")
 (define-public r-viridis
   (package
     (name "r-viridis")
-    (version "0.6.1")
+    (version "0.6.2")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "viridis" version))
               (sha256
                (base32
-                "1fyax36ycjiypcnxhrv58pq67qv03vfg4lx822d38jpjly54q128"))))
+                "048kwhbhd49g86cq11fl7vm0whwhjl5gs9xjn040lwcjv78qrdb9"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-viridislite" ,r-viridislite)))
+     (list r-ggplot2 r-gridextra r-viridislite))
     (native-inputs
-     `(("r-knitr" ,r-knitr))) ; for vignettes
+     (list r-knitr)) ; for vignettes
     (home-page "https://github.com/sjmgarnier/viridis")
     (synopsis "Matplotlib default color map")
     (description
@@ -4116,13 +4156,9 @@ more complete @code{viridis} package.")
          "0ss8mq05mwif64cj8zmrfx0ljgy3n0fvyv7f37782shr8rknmsqq"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ellipsis" ,r-ellipsis)
-       ("r-glue" ,r-glue)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-vctrs" ,r-vctrs)))
+     (list r-ellipsis r-glue r-purrr r-rlang r-vctrs))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/tidyselect")
     (synopsis "Select from a set of strings")
     (description
@@ -4135,29 +4171,29 @@ selection.")
 (define-public r-tidyr
   (package
     (name "r-tidyr")
-    (version "1.1.3")
+    (version "1.1.4")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "tidyr" version))
        (sha256
         (base32
-         "0cpbrvr759z8p7r9lpkjhj2dcdymsbnaib0rma9b4jb7i3qzmh2a"))))
+         "0h8jfsmn4r7zgfyjmg2qkjd54n0sncq07xjh4mdf2cx4k2z9h30b"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cpp11" ,r-cpp11)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ellipsis" ,r-ellipsis)
-       ("r-magrittr" ,r-magrittr)
-       ("r-glue" ,r-glue)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-tidyselect" ,r-tidyselect)
-       ("r-tibble" ,r-tibble)
-       ("r-vctrs" ,r-vctrs)))
+     (list r-cpp11
+           r-dplyr
+           r-ellipsis
+           r-magrittr
+           r-glue
+           r-lifecycle
+           r-purrr
+           r-rlang
+           r-tidyselect
+           r-tibble
+           r-vctrs))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/hadley/tidyr")
     (synopsis "Tidy data with `spread()` and `gather()` functions")
     (description
@@ -4182,10 +4218,9 @@ and tidyr provides no margins or aggregation.")
          "0bbhs5pwxh474w62sq6gqvih7habancxng9wd4f2rgn6lv9zhhb2"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lattice" ,r-lattice)))
+     (list r-lattice))
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("r-knitr" ,r-knitr))) ; for vignettes
+     (list gfortran r-knitr)) ; for vignettes
     (home-page "https://github.com/edzer/hexbin")
     (synopsis "Hexagonal binning routines")
     (description
@@ -4206,10 +4241,9 @@ It uses and relies on grid graphics and formal (S4) classes and methods.")
          "1cj091rsjdj2xz16qhynyw72gh5cyhznifcfbrbygndfr4xwksr3"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-magrittr" ,r-magrittr)
-       ("r-rlang" ,r-rlang)))
+     (list r-magrittr r-rlang))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/hadley/purrr")
     (synopsis "Functional programming tools")
     (description
@@ -4220,36 +4254,36 @@ features present in other programming languages.")
 (define-public r-plotly
   (package
     (name "r-plotly")
-    (version "4.9.4.1")
+    (version "4.10.0")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "plotly" version))
               (sha256
                (base32
-                "1q711c0lg0jmzrmcc2fhjy70ms49as7cakdbgbh2ij9s149fa7iq"))))
+                "16iqj7sv49mva6siibsci7iijsbnk7pqvfns9al0k35w9mjmr6dx"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-base64enc" ,r-base64enc)
-       ("r-crosstalk" ,r-crosstalk)
-       ("r-digest" ,r-digest)
-       ("r-data-table" ,r-data-table)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-htmltools" ,r-htmltools)
-       ("r-htmlwidgets" ,r-htmlwidgets)
-       ("r-httr" ,r-httr)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-lazyeval" ,r-lazyeval)
-       ("r-magrittr" ,r-magrittr)
-       ("r-promises" ,r-promises)
-       ("r-purrr" ,r-purrr)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rlang" ,r-rlang)
-       ("r-scales" ,r-scales)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)
-       ("r-vctrs" ,r-vctrs)
-       ("r-viridislite" ,r-viridislite)))
+     (list r-base64enc
+           r-crosstalk
+           r-digest
+           r-data-table
+           r-dplyr
+           r-ggplot2
+           r-htmltools
+           r-htmlwidgets
+           r-httr
+           r-jsonlite
+           r-lazyeval
+           r-magrittr
+           r-promises
+           r-purrr
+           r-rcolorbrewer
+           r-rlang
+           r-scales
+           r-tibble
+           r-tidyr
+           r-vctrs
+           r-viridislite))
     (home-page "https://plot.ly/r")
     (synopsis "Create interactive web graphics")
     (description
@@ -4315,8 +4349,7 @@ character vector.")
          "16fgi3annn34c3cxi0pxf62mmmmxi21hp0zzlv7bkfsjqy4g4f2x"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rematch" ,r-rematch)
-       ("r-tibble" ,r-tibble)))
+     (list r-rematch r-tibble))
     (home-page "https://github.com/rsheets/cellranger")
     (synopsis "Translate spreadsheet cell ranges to rows and columns")
     (description
@@ -4337,16 +4370,16 @@ character vector.")
          "11q07nxys72wkxx9mawmjyf20gvwvrb7h3gpa73h6lgh2vgrwnv8"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cellranger" ,r-cellranger)
-       ("r-dplyr" ,r-dplyr)
-       ("r-httr" ,r-httr)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-purrr" ,r-purrr)
-       ("r-readr" ,r-readr)
-       ("r-stringr" ,r-stringr)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)
-       ("r-xml2" ,r-xml2)))
+     (list r-cellranger
+           r-dplyr
+           r-httr
+           r-jsonlite
+           r-purrr
+           r-readr
+           r-stringr
+           r-tibble
+           r-tidyr
+           r-xml2))
     (home-page "https://github.com/jennybc/googlesheets")
     (synopsis "Manage Google spreadsheets from R")
     (description "This package provides tools to interact with Google Sheets
@@ -4379,8 +4412,7 @@ from within R.")
                (("-mtune=native") ""))
              #t)))))
     (propagated-inputs
-     `(("r-lattice" ,r-lattice)
-       ("r-matrix" ,r-matrix)))
+     (list r-lattice r-matrix))
     (home-page "https://spams-devel.gforge.inria.fr")
     (synopsis "Toolbox for solving sparse estimation problems")
     (description "SPAMS (SPArse Modeling Software) is an optimization toolbox
@@ -4411,7 +4443,7 @@ following problems:
          "1labh0ycdm2xcjssj8bhnyjvbk44mcdsi0rb2p8rfqa428mrq9cf"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-openssl" ,r-openssl)))
+     (list r-openssl))
     (home-page "https://cran.r-project.org/web/packages/base64")
     (synopsis "Base64 encoder and decoder")
     (description
@@ -4423,34 +4455,34 @@ package instead.")
 (define-public r-hmisc
   (package
     (name "r-hmisc")
-    (version "4.5-0")
+    (version "4.6-0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "Hmisc" version))
        (sha256
-        (base32 "11qj73zj16p113jpwn2vv06l99kqlcxcmrldbpyi5s7pwing9jnx"))))
+        (base32 "1bd1c8sichyijprfpnqj5g72nmgs9jvi0zyw8v4nsg1kn83fj71c"))))
     (properties `((upstream-name . "Hmisc")))
     (build-system r-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (propagated-inputs
-     `(("r-base64enc" ,r-base64enc)
-       ("r-cluster" ,r-cluster)
-       ("r-data-table" ,r-data-table)
-       ("r-foreign" ,r-foreign)
-       ("r-formula" ,r-formula)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-gtable" ,r-gtable)
-       ("r-lattice" ,r-lattice)
-       ("r-latticeextra" ,r-latticeextra)
-       ("r-htmltable" ,r-htmltable)
-       ("r-htmltools" ,r-htmltools)
-       ("r-nnet" ,r-nnet)
-       ("r-rpart" ,r-rpart)
-       ("r-survival" ,r-survival)
-       ("r-viridis" ,r-viridis)))
+     (list r-base64enc
+           r-cluster
+           r-data-table
+           r-foreign
+           r-formula
+           r-ggplot2
+           r-gridextra
+           r-gtable
+           r-lattice
+           r-latticeextra
+           r-htmltable
+           r-htmltools
+           r-nnet
+           r-rpart
+           r-survival
+           r-viridis))
     (home-page "http://biostat.mc.vanderbilt.edu/Hmisc")
     (synopsis "Miscellaneous data analysis and graphics functions")
     (description
@@ -4581,9 +4613,9 @@ tests for whether a value is missing, empty or contains only @code{NA} and
          "0zwdj7lscgxr8r62ii8hbdh4mb7sa9w4f5nv32zzrxdvymcpya2b"))))
     (build-system r-build-system)
     (inputs
-     `(("perl" ,perl)))
+     (list perl))
     (propagated-inputs
-     `(("r-gtools" ,r-gtools)))
+     (list r-gtools))
     (home-page "https://cran.r-project.org/web/packages/gdata")
     (synopsis "Various R programming tools for data manipulation")
     (description
@@ -4621,11 +4653,9 @@ including:
          "0f8khaymz383w2ksnk80d4kpnvgmdk37pbycpsnl2vabaz11kbpr"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-catools" ,r-catools)
-       ("r-gtools" ,r-gtools)
-       ("r-kernsmooth" ,r-kernsmooth)))
+     (list r-catools r-gtools r-kernsmooth))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/gplots")
     (synopsis "Various R programming tools for plotting data")
     (description
@@ -4663,9 +4693,9 @@ including:
     (properties `((upstream-name . "ROCR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-gplots" ,r-gplots)))
+     (list r-gplots))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://rocr.bioinf.mpi-sb.mpg.de/")
     (synopsis "Visualizing the performance of scoring classifiers")
     (description
@@ -4684,24 +4714,24 @@ mechanism.")
 (define-public r-ztable
   (package
     (name "r-ztable")
-    (version "0.2.2")
+    (version "0.2.3")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "ztable" version))
               (sha256
                (base32
-                "0wxcdb7yp2r6w5iznz1k49npp5sn4jiybfcj30s3198hkcnv0r8y"))))
+                "1ps7ix0hc84s0p0ra6bkjxky3cffs1rvdcagqzj78lbdq22dk5j8"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-flextable" ,r-flextable)
-       ("r-magrittr" ,r-magrittr)
-       ("r-officer" ,r-officer)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rstudioapi" ,r-rstudioapi)
-       ("r-scales" ,r-scales)
-       ("r-stringr" ,r-stringr)))
+     (list r-flextable
+           r-magrittr
+           r-officer
+           r-rcolorbrewer
+           r-rstudioapi
+           r-scales
+           r-stringr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/ztable")
     (synopsis "Zebra-striped tables in LaTeX and HTML formats for R")
     (description
@@ -4782,9 +4812,7 @@ representation of R code.")
                 "0crk29p5vi1r3a988kms4y7r0iqwgwzsikgvh18r9wbzyr98bb5v"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-beeswarm" ,r-beeswarm)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-vipor" ,r-vipor)))
+     (list r-beeswarm r-ggplot2 r-vipor))
     (home-page "https://github.com/eclarke/ggbeeswarm")
     (synopsis "Categorical scatter (violin point) plots")
     (description
@@ -4805,11 +4833,7 @@ data at that region, and avoids over-plotting.")
                 "0rw5f6axyz1pqn6qx9jwm38hjzn8bqs1nfjkvm96z3xnyn61cdbv"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-purrr" ,r-purrr)
-       ("r-scales" ,r-scales)
-       ("r-stringr" ,r-stringr)
-       ("r-tibble" ,r-tibble)))
+     (list r-ggplot2 r-purrr r-scales r-stringr r-tibble))
     (home-page "https://cran.rstudio.com/web/packages/ggthemes")
     (synopsis "Extra themes, scales and geoms for @code{ggplot2}")
     (description "This package provides extra themes and scales for
@@ -4832,7 +4856,7 @@ Wall Street Journal, among others.  This package also provides
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/web/packages/statmod")
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (synopsis "Statistical modeling")
     (description
      "This package provides a collection of algorithms and functions to aid
@@ -4880,13 +4904,13 @@ approximate, exact searches, fixed radius searches, bd and kb trees.")
          "0fcc8rq745nsghp27dk0lgih90y4zx8hrzcvsn6ih786yv7qxhvl"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-knitr" ,r-knitr)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("r-dplyr" ,r-dplyr)
-       ("r-readr" ,r-readr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-magrittr" ,r-magrittr)
-       ("r-stringr" ,r-stringr)))
+     (list r-knitr
+           r-rmarkdown
+           r-dplyr
+           r-readr
+           r-ggplot2
+           r-magrittr
+           r-stringr))
     (home-page "https://mran.microsoft.com/package/fivethirtyeight/")
     (synopsis "Data and code behind the stories at FiveThirtyEight")
     (description "This R package provides access to the code and data sets
@@ -4927,12 +4951,9 @@ Farebrother's algorithm or Liu et al.'s algorithm.")
          "0j7d5vhzdxn1blrsfafx5z8lhq122rp8230hp9czrpsnnhjydp67"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-gtable" ,r-gtable)
-       ("r-rlang" ,r-rlang)
-       ("r-scales" ,r-scales)))
+     (list r-ggplot2 r-gtable r-rlang r-scales))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/wilkelab/cowplot")
     (synopsis "Streamlined plot theme and plot annotations for ggplot2")
     (description
@@ -4954,10 +4975,7 @@ letters, as is often required for scientific publications.")
          "08whic8hmmzi55b7azwj11l2x5r9s5qbyrv7s9jr08156vqkw0zg"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mass" ,r-mass)
-       ("r-kernlab" ,r-kernlab)
-       ("r-segmented" ,r-segmented)
-       ("r-survival" ,r-survival)))
+     (list r-mass r-kernlab r-segmented r-survival))
     (home-page "https://cran.r-project.org/web/packages/mixtools")
     (synopsis "Tools for analyzing finite mixture models")
     (description
@@ -4978,7 +4996,7 @@ mixture models.")
          "0blj44wqrx6lmym1m9v6wkz8zxzbjax2zl6swgdczci0ixb5nx34"))))
     (build-system r-build-system)
     (inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://web.stanford.edu/~hastie/Papers/LARS/")
     (synopsis "Least angle regression software")
     (description
@@ -5027,7 +5045,7 @@ perform @dfn{independent component analysis} (ICA) and projection pursuit.")
     (build-system r-build-system)
     (home-page "https://www.stat.berkeley.edu/~breiman/RandomForests/")
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (synopsis "Breiman and Cutler's random forests for classification and regression")
     (description
 "This package provides the Breiman and Cutler's random forests algorithm, based on a
@@ -5087,9 +5105,7 @@ to change in the future.")
          "0jangf89174p0idh9afbicfiln2sz8jxc3bjc6n0j9036dw9n09n"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lattice" ,r-lattice)
-       ("r-modeltools" ,r-modeltools)
-       ("r-nnet" ,r-nnet)))
+     (list r-lattice r-modeltools r-nnet))
     (home-page "https://cran.r-project.org/web/packages/flexmix")
     (synopsis "Flexible mixture modeling")
     (description
@@ -5103,18 +5119,17 @@ models, generalized linear models and model-based clustering.")
 (define-public r-mclust
   (package
     (name "r-mclust")
-    (version "5.4.7")
+    (version "5.4.9")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "mclust" version))
        (sha256
         (base32
-         "08scl72llpinfijiyx14yqvmx8lma9jvh8h92v9ynnzfr9kadxa5"))))
+         "0s4mva0n04f3pl41msmzhlh7pnk0zbmf06n826smxkw6mz327wb5"))))
     (build-system r-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("r-knitr" ,r-knitr)))
+     (list gfortran r-knitr))
     (home-page "https://www.stat.washington.edu/mclust/")
     (synopsis "Gaussian mixture modelling for model-based clustering etc.")
     (description
@@ -5137,8 +5152,7 @@ and resampling-based inference.")
          "0hg4d7y1w18jpgvw10z8833bbbcnlkwiasx0wh6iwa2pnnybq8gl"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mass" ,r-mass)
-       ("r-mclust" ,r-mclust)))
+     (list r-mass r-mclust))
     (home-page "https://cran.r-project.org/web/packages/prabclus")
     (synopsis "Parametric bootstrap tests for spatial neighborhood clustering")
     (description
@@ -5151,14 +5165,14 @@ data for species delimitation, nearest neighbor based noise detection.")
 (define-public r-deoptimr
   (package
     (name "r-deoptimr")
-    (version "1.0-9")
+    (version "1.0-10")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "DEoptimR" version))
        (sha256
         (base32
-         "04k5gi0a5hbm6znzvjaipbmkacp694krkqs38dkbxx1gymsallb1"))))
+         "1m9ag073i7pbxsy74vkj0n4hjn6vmyc4n0k78nmslwwwmjh7nkvp"))))
     (properties `((upstream-name . "DEoptimR")))
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/web/packages/DEoptimR")
@@ -5174,19 +5188,19 @@ can be efficiently implemented directly in the R language.")
 (define-public r-robustbase
   (package
     (name "r-robustbase")
-    (version "0.93-8")
+    (version "0.93-9")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "robustbase" version))
        (sha256
         (base32
-         "16fmnk3p32mi70rkx89l1v4pry3gnrpy9jicnlfnk6lg1pwz5j8w"))))
+         "0i9wf4aq8zpn2np6z2rjja21ks9n740dgkiv0qfwdzk3ah3vapyp"))))
     (build-system r-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (propagated-inputs
-     `(("r-deoptimr" ,r-deoptimr)))
+     (list r-deoptimr))
     (home-page "http://robustbase.r-forge.r-project.org/")
     (synopsis "Basic robust statistics")
     (description
@@ -5208,7 +5222,7 @@ regression methodology including model selections and multivariate statistics.")
     (properties `((upstream-name . "pcaPP")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mvtnorm" ,r-mvtnorm)))
+     (list r-mvtnorm))
     (home-page "https://cran.r-project.org/web/packages/pcaPP")
     (synopsis "Robust PCA by projection pursuit")
     (description
@@ -5229,12 +5243,9 @@ analysis} (PCA) by projection pursuit.")
          "0i69gv55c86gkclwhch0jzdfyb20l20mx1nx1xp9qz71nd4klpvr"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lattice" ,r-lattice)
-       ("r-mvtnorm" ,r-mvtnorm)
-       ("r-pcapp" ,r-pcapp)
-       ("r-robustbase" ,r-robustbase)))
+     (list r-lattice r-mvtnorm r-pcapp r-robustbase))
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/rrcov")
     (synopsis "Scalable robust estimators with high breakdown Point")
     (description
@@ -5256,7 +5267,7 @@ estimation and robust multivariate analysis with high breakdown point.")
     (properties `((upstream-name . "fit.models")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lattice" ,r-lattice)))
+     (list r-lattice))
     (home-page "https://cran.r-project.org/web/packages/fit.models")
     (synopsis "Compare fitted models")
     (description
@@ -5273,23 +5284,19 @@ generally.")
 (define-public r-robust
   (package
     (name "r-robust")
-    (version "0.5-0.0")
+    (version "0.6-1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "robust" version))
        (sha256
         (base32
-         "1ks5scp8bnicl9j1r8yrmz668fjs6ifdmi540zw6d2ck500bbw42"))))
+         "0z8i0qqlsa6vpl457qir3dlsynhjfn2g22436d776vxwyqjx4vs9"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-fit-models" ,r-fit-models)
-       ("r-lattice" ,r-lattice)
-       ("r-mass" ,r-mass)
-       ("r-robustbase" ,r-robustbase)
-       ("r-rrcov" ,r-rrcov)))
+     (list r-fit-models r-lattice r-mass r-robustbase r-rrcov))
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/robust")
     (synopsis "Port of the S+ \"Robust Library\"")
     (description
@@ -5332,15 +5339,15 @@ of the points.")
          "0f7sfmpcycr9y7cy5gasyjm2ardxa62kglqms92mcr68jrp01c19"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-class" ,r-class)
-       ("r-cluster" ,r-cluster)
-       ("r-diptest" ,r-diptest)
-       ("r-flexmix" ,r-flexmix)
-       ("r-kernlab" ,r-kernlab)
-       ("r-mass" ,r-mass)
-       ("r-mclust" ,r-mclust)
-       ("r-prabclus" ,r-prabclus)
-       ("r-robustbase" ,r-robustbase)))
+     (list r-class
+           r-cluster
+           r-diptest
+           r-flexmix
+           r-kernlab
+           r-mass
+           r-mclust
+           r-prabclus
+           r-robustbase))
     (home-page "https://cran.r-project.org/web/packages/fpc")
     (synopsis "Flexible procedures for clustering")
     (description
@@ -5364,7 +5371,7 @@ groupings.")
     (properties `((upstream-name . "VGAM")))
     (build-system r-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://www.stat.auckland.ac.nz/~yee/VGAM")
     (synopsis "Vector generalized linear and additive models")
     (description
@@ -5408,9 +5415,9 @@ showing the progress is useful e.g. bootstrap.")
          "036drja6xz7awja9iwb76x91415p26fb0jmg7y7v0p65m6j978fg"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)))
+     (list r-rcpp))
     (inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "http://optimizer.r-forge.r-project.org")
     (synopsis "Derivative-free optimization algorithms by quadratic approximation")
     (description
@@ -5432,8 +5439,7 @@ based on an interface to Fortran implementations by M. J. D. Powell.")
     (properties `((upstream-name . "RcppEigen")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)
-       ("r-matrix" ,r-matrix)))
+     (list r-rcpp r-matrix))
     (home-page "http://eigen.tuxfamily.org")
     (synopsis "Rcpp integration for the Eigen templated linear algebra library")
     (description
@@ -5457,8 +5463,7 @@ decompositions of such matrices, and solutions of linear systems.")
     (properties `((upstream-name . "ModelMetrics")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)
-       ("r-data-table" ,r-data-table)))
+     (list r-rcpp r-data-table))
     (home-page "https://cran.r-project.org/web/packages/ModelMetrics")
     (synopsis "Rapid calculation of model metrics")
     (description
@@ -5480,7 +5485,7 @@ metrics for evaluating models.")
     (properties `((upstream-name . "MatrixModels")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-matrix" ,r-matrix)))
+     (list r-matrix))
     (home-page "https://cran.r-project.org/web/packages/MatrixModels")
     (synopsis "Modelling with sparse and dense matrices")
     (description
@@ -5500,12 +5505,9 @@ using modular prediction and response module classes.")
         (base32 "01fnp6ndh7npxj76xlynndacsgmcfr9kgh2waw0clx3mmwlwilbi"))))
     (build-system r-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (propagated-inputs
-     `(("r-conquer" ,r-conquer)
-       ("r-matrix" ,r-matrix)
-       ("r-matrixmodels" ,r-matrixmodels)
-       ("r-sparsem" ,r-sparsem)))
+     (list r-conquer r-matrix r-matrixmodels r-sparsem))
     (home-page "https://www.r-project.org")
     (synopsis "Quantile regression")
     (description
@@ -5519,21 +5521,20 @@ expected shortfall risk are also included.")
 (define-public r-nloptr
   (package
     (name "r-nloptr")
-    (version "1.2.2.2")
+    (version "1.2.2.3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "nloptr" version))
        (sha256
         (base32
-         "0whkilb85k4wixvr3k7rygfw1rcs1fs9h8c18kz4p3y1k9hsj3p8"))))
+         "1zznk9f2w2g02zqzay21k8xqzfvc6icxfzp6bx2wpd77sm7vf25g"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr) ; for building vignettes
-       ("pkg-config" ,pkg-config)
-       ("gfortran" ,gfortran)))
+     (list r-knitr ; for building vignettes
+           pkg-config gfortran))
     (inputs
-     `(("nlopt" ,nlopt)))
+     (list nlopt))
     (home-page "https://cran.r-project.org/web/packages/nloptr")
     (synopsis "R interface to NLopt")
     (description
@@ -5557,17 +5558,17 @@ algorithms.")
          "1i9f8kl2qj48j75dbn1vmwxz1xlbikdr7v2yq542w6dq74z8gyi5"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-boot" ,r-boot)
-       ("r-lattice" ,r-lattice)
-       ("r-mass" ,r-mass)
-       ("r-matrix" ,r-matrix)
-       ("r-minqa" ,r-minqa)
-       ("r-nloptr" ,r-nloptr)
-       ("r-nlme" ,r-nlme)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcppeigen" ,r-rcppeigen)))
+     (list r-boot
+           r-lattice
+           r-mass
+           r-matrix
+           r-minqa
+           r-nloptr
+           r-nlme
+           r-rcpp
+           r-rcppeigen))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/lme4")
     (synopsis "Linear mixed-effects models using eigen and S4")
     (description
@@ -5590,15 +5591,15 @@ C++ library for numerical linear algebra and RcppEigen glue.")
          "1if7msv9i7jhg1as1f7m81a95dnwhwj3yfs24bqr0f6r0ch4b8xj"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-broom" ,r-broom)
-       ("r-dplyr" ,r-dplyr)
-       ("r-lme4" ,r-lme4)
-       ("r-magrittr" ,r-magrittr)
-       ("r-mass" ,r-mass)
-       ("r-matrix" ,r-matrix)
-       ("r-numderiv" ,r-numderiv)))
+     (list r-broom
+           r-dplyr
+           r-lme4
+           r-magrittr
+           r-mass
+           r-matrix
+           r-numderiv))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://people.math.aau.dk/~sorenh/software/pbkrtest/")
     (synopsis "Methods for linear mixed model comparison")
     (description
@@ -5610,13 +5611,13 @@ bootstrap test for generalized linear mixed models.")
 (define-public r-cardata
   (package
     (name "r-cardata")
-    (version "3.0-4")
+    (version "3.0-5")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "carData" version))
        (sha256
-        (base32 "09270j39n4jpswxqps20b12zaj8dz4rrqpk2l2j5bnf1xzizb9nd"))))
+        (base32 "06j52rpbqi6fj7chfjwjbwbr6slrbb7i3aygv66gnfiyndcp3rq2"))))
     (properties `((upstream-name . "carData")))
     (build-system r-build-system)
     (home-page "https://r-forge.r-project.org/projects/car/")
@@ -5629,28 +5630,27 @@ Companion to Applied Regression, Third Edition, Sage.")
 (define-public r-car
   (package
     (name "r-car")
-    (version "3.0-11")
+    (version "3.0-12")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "car" version))
        (sha256
-        (base32 "0b2l35656bi75hfvnjhzhlnrnbpjn0vv7nvny8gn65gm0rr94b5k"))))
+        (base32 "00kk8l71508f73kyn21is1mx6kjbrzdq3ls94c5ajhiqmvpsd6dq"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-abind" ,r-abind)
-       ("r-cardata" ,r-cardata)
-       ("r-lme4" ,r-lme4)
-       ("r-maptools" ,r-maptools)
-       ("r-mass" ,r-mass)
-       ("r-mgcv" ,r-mgcv)
-       ("r-nlme" ,r-nlme)
-       ("r-nnet" ,r-nnet)
-       ("r-pbkrtest" ,r-pbkrtest)
-       ("r-quantreg" ,r-quantreg)
-       ("r-rio" ,r-rio)))
+     (list r-abind
+           r-cardata
+           r-lme4
+           r-maptools
+           r-mass
+           r-mgcv
+           r-nlme
+           r-nnet
+           r-pbkrtest
+           r-quantreg))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://r-forge.r-project.org/projects/car/")
     (synopsis "Companion to applied regression")
     (description
@@ -5692,7 +5692,7 @@ even in multithreaded code, typically using OpenMP.")
          "03xsvsg9bqvgl98ywid3h91mmlhax5s6wvmypp3hq91vmc5kvxlp"))))
     (properties `((upstream-name . "tmvnsim")))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "https://www.r-project.org")
     (synopsis "Truncated multivariate normal simulation")
     (description
@@ -5721,9 +5721,9 @@ normals.")
            "0d7ka4l4fl1wi77r2r81dc91n6cbj2xrb3lsizz5y0ziscva0sjw"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-tmvnsim" ,r-tmvnsim)))
+     (list r-tmvnsim))
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "http://azzalini.stat.unipd.it/SW/Pkg-mnormt")
     (synopsis "Multivariate normal and \"t\" distributions")
     (description
@@ -5756,19 +5756,17 @@ first and second order derivatives.")
 (define-public r-sn
   (package
     (name "r-sn")
-    (version "2.0.0")
+    (version "2.0.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "sn" version))
        (sha256
         (base32
-         "0sl8qzy9isy5fq8qxh1fg5285jzgy895nbgz8gdq5d0r6zdwrmmb"))))
+         "1z58kwvq8igjm3biyyjdlhs2qq8hfjq5d9x0lzy80yk5hw08kcw6"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mnormt" ,r-mnormt)
-       ("r-numderiv" ,r-numderiv)
-       ("r-quantreg" ,r-quantreg)))
+     (list r-mnormt r-numderiv r-quantreg))
     (home-page "http://azzalini.stat.unipd.it/SN")
     (synopsis "The skew-normal and skew-t distributions")
     (description
@@ -5793,10 +5791,7 @@ multivariate case.")
     (build-system r-build-system)
     ;; These are all suggested packages, not build dependencies.
     (propagated-inputs
-     `(("r-cluster" ,r-cluster)
-       ("r-mclust" ,r-mclust)
-       ("r-mvtnorm" ,r-mvtnorm)
-       ("r-sn" ,r-sn)))
+     (list r-cluster r-mclust r-mvtnorm r-sn))
     (home-page "https://cran.r-project.org/web/packages/tclust")
     (synopsis "Robust trimmed clustering")
     (description
@@ -5818,9 +5813,7 @@ diagnostic tools (@code{ctlcurves} and @code{DiscrFact}).")
          "02idcc6zbdz4wsi1mcwh7qyhmlbwvnzxwkdvvppxw7n2rh54z4v0"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)
-       ("r-matrix" ,r-matrix)
-       ("r-rcppeigen" ,r-rcppeigen)))
+     (list r-rcpp r-matrix r-rcppeigen))
     (home-page "https://github.com/imbs-hl/ranger")
     (synopsis "Fast implementation of random forests")
     (description
@@ -5851,22 +5844,20 @@ genome-wide association studies can be analyzed efficiently.")
 (define-public r-cairo
   (package
     (name "r-cairo")
-    (version "1.5-12.2")
+    (version "1.5-14")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "Cairo" version))
        (sha256
         (base32
-         "14hgz5wmnhlbqkd1g662n1agmjnlj3pq69gfng1vb0ivr02l2lnx"))))
+         "0ysc40smkjwk8fmp5dk0q3nbp9xkxzz9pd4z5zkp2mrvrvx52xq6"))))
     (properties `((upstream-name . "Cairo")))
     (build-system r-build-system)
     (inputs
-     `(("cairo" ,cairo)
-       ("libxt" ,libxt)
-       ("zlib" ,zlib)))
+     (list cairo libxt zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.rforge.net/Cairo/")
     (synopsis "R graphics device using Cairo graphics library")
     (description
@@ -5887,20 +5878,19 @@ is supported.")
 (define-public r-lubridate
   (package
     (name "r-lubridate")
-    (version "1.7.10")
+    (version "1.8.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "lubridate" version))
        (sha256
         (base32
-         "1s653d6rnpf9bkynxmbq4fdjdcz7r9ma19aph8f5y9ck70his4hm"))))
+         "199b00cql07gf3rf4hh5ba34amnk0ai40zhx73dq1mpkn7ynxml7"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-generics" ,r-generics)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-generics r-cpp11))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/lubridate/")
     (synopsis "Make dealing with dates a little easier")
     (description
@@ -5915,14 +5905,14 @@ easy and fun.")
 (define-public r-fdrtool
   (package
     (name "r-fdrtool")
-    (version "1.2.16")
+    (version "1.2.17")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "fdrtool" version))
        (sha256
         (base32
-         "1aap4k1l3a9m43374xq688mqnzkgqx8l021li262r3h1xr4adpp7"))))
+         "1pf554vb902vavgqc4c0kgghywbgcvr3lkkr414bxngavcd60lil"))))
     (build-system r-build-system)
     (home-page "http://strimmerlab.org/software/fdrtool/")
     (synopsis "Estimation of false discovery rates and higher criticism")
@@ -5953,12 +5943,9 @@ and the corresponding decision threshold.")
          "12d2nv2w15085jscgidmjdnr1ryymciflcmal6ldmgp2fkl9dyy4"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ellipsis" ,r-ellipsis)
-       ("r-magrittr" ,r-magrittr)
-       ("r-tibble" ,r-tibble)
-       ("r-rlang" ,r-rlang)))
+     (list r-ellipsis r-magrittr r-tibble r-rlang))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://forcats.tidyverse.org")
     (synopsis "Tools for working with factors")
     (description "This package provides helpers for reordering factor
@@ -5995,7 +5982,7 @@ manually \"recoding\").")
                   "#define isnan std::isnan"))
                #t)))))
       (propagated-inputs
-       `(("r-rcpp" ,r-rcpp)))
+       (list r-rcpp))
       (home-page "https://bitbucket.org/tanaylab/tgstat/")
       (synopsis "Tanay's group statistical utilities")
       (description
@@ -6021,7 +6008,7 @@ tools.")
            "0xy6c7s7mn1yx191154bwbv1bl424bnvc80syqpl1vdl28ba46rj"))))
       (build-system r-build-system)
       (propagated-inputs
-       `(("r-yaml" ,r-yaml)))
+       (list r-yaml))
       (home-page "https://bitbucket.org/tanaylab/tgconfig/")
       (synopsis "Infrastructure for managing package parameters")
       (description
@@ -6046,7 +6033,7 @@ parameters.")
                   "0qa8liylffpxgdg8xcgjar5dsvczqhn3akd4w35113hnyg1m4xyg"))))
       (build-system r-build-system)
       (propagated-inputs
-       `(("r-png" ,r-png)))
+       (list r-png))
       (home-page "https://github.com/Gibbsdavidl/CatterPlots")
       (synopsis "Scatter plots with cat shaped points")
       (description "Did you ever wish you could make scatter plots with cat
@@ -6098,48 +6085,37 @@ to any arbitrary string.  In this case, it is up to you to set valid values.")
           "1cysswxr5glrdblyl2zsmywcj7xhxn3wmyihxinrz9gm8gmaacax"))))
     (build-system python-build-system)
     (arguments
-     '(#:modules ((ice-9 ftw)
-                  (srfi srfi-1)
-                  (srfi srfi-26)
-                  (guix build utils)
-                  (guix build python-build-system))
-       #:phases
+     '(#:phases
        (modify-phases %standard-phases
          (replace 'check
            (lambda* (#:key outputs inputs #:allow-other-keys)
              (let ((cwd (getcwd)))
-               (setenv "TZ" "UTC")
-               (setenv "PYTHONPATH"
-                       (string-append cwd "/build/"
-                                      (find (cut string-prefix? "lib" <>)
-                                            (scandir (string-append cwd "/build")))
-                                      ":"
-                                      (getenv "PYTHONPATH"))))
+               (setenv "TZ" "UTC"))
              ;; test_vector_complex has issues when run in our environment.
-             (invoke "pytest" "-v" "rpy2/tests/" "-k" "not test_vector_complex"))))))
+             (invoke "pytest" "-v" "rpy2/tests/"
+                     "-k" "not test_vector_complex"))))))
     (propagated-inputs
-     `(("python-cffi" ,python-cffi)
-       ("python-six" ,python-six)
-       ("python-jinja2" ,python-jinja2)
-       ("python-numpy" ,python-numpy)
-       ("python-pandas" ,python-pandas)
-       ("python-pytz" ,python-pytz)
-       ("python-ipython" ,python-ipython)
-       ("python-tzlocal" ,python-tzlocal)))
+     (list python-cffi
+           python-six
+           python-jinja2
+           python-numpy
+           python-pandas
+           python-pytz
+           python-ipython
+           python-tzlocal))
     (inputs
-     `(("readline" ,readline)
-       ("icu4c" ,icu4c)
-       ("pcre" ,pcre)
-       ("r-minimal" ,r-minimal)
-       ("r-survival" ,r-survival)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-rsqlite" ,r-rsqlite)
-       ("r-dplyr" ,r-dplyr)
-       ("r-dbplyr" ,r-dbplyr)
-       ("python-numpy" ,python-numpy)))
+     (list readline
+           icu4c
+           pcre
+           r-minimal
+           r-survival
+           r-ggplot2
+           r-rsqlite
+           r-dplyr
+           r-dbplyr
+           python-numpy))
     (native-inputs
-     `(("zlib" ,zlib)
-       ("python-pytest" ,python-pytest)))
+     (list zlib python-pytest))
     (home-page "https://rpy2.github.io")
     (synopsis "Python interface to the R language")
     (description "rpy2 is a redesign and rewrite of rpy.  It is providing a
@@ -6176,9 +6152,9 @@ functions.")
                  (("Scheff.+-Tukey") "Scheffe-Tukey")))
              #t)))))
     (propagated-inputs
-     `(("java-jtransforms" ,java-jtransforms)))
+     (list java-jtransforms))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "http://jdistlib.sourceforge.net/")
     (synopsis "Java library of statistical distributions")
     (description "JDistlib is the Java Statistical Distribution Library, a
@@ -6252,14 +6228,12 @@ Java package that provides routines for various statistical distributions.")
              (replace 'check
                (lambda _ (invoke "make" "test")))))))
       (native-inputs
-       `(("perl" ,perl)
-         ("r-roxygen2" ,r-roxygen2)
-         ("texinfo" ,texinfo)))
+       (list perl r-roxygen2 texinfo))
       (inputs
        `(("emacs" ,emacs-minimal)
          ("r-minimal" ,r-minimal)))
       (propagated-inputs
-       `(("emacs-julia-mode" ,emacs-julia-mode)))
+       (list emacs-julia-mode))
       (home-page "https://ess.r-project.org/")
       (synopsis "Emacs mode for statistical analysis programs")
       (description
@@ -6283,10 +6257,8 @@ statistical analysis programs such as R, Julia, and JAGS.")
         (base32 "0a4wx73jkngw5nbq1fa4jfhba6bsmyn6vnsf887x3xhb5v3ykhsg"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-ess" ,emacs-ess)
-       ("emacs-poly-noweb" ,emacs-poly-noweb)
-       ("emacs-polymode-markdown" ,emacs-polymode-markdown)
-       ("emacs-polymode" ,emacs-polymode)))
+     (list emacs-ess emacs-poly-noweb emacs-polymode-markdown
+           emacs-polymode))
     (properties '((upstream-name . "poly-R")))
     (home-page "https://github.com/polymode/poly-markdown")
     (synopsis "Polymodes for the R language")
@@ -6310,12 +6282,9 @@ files, including Rmarkdown files.")
         (base32 "00sdmaq0qzp6kyv53fpfi6jf3iv4pd0ap0gmw3mbfip52bbnl55w"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("gettext" ,gnu-gettext)
-       ("libtool" ,libtool)))
+     (list autoconf automake gnu-gettext libtool))
     (inputs
-     `(("zlib" ,zlib)))                 ; libz
+     (list zlib))                 ; libz
     (synopsis "Convert SAS, Stata, and SPSS files")
     (description "Command-line tool and C library for reading files from
 popular stats packages like SAS, Stata and SPSS.")
@@ -6336,7 +6305,7 @@ popular stats packages like SAS, Stata and SPSS.")
     (properties `((upstream-name . "QuantPsyc")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-boot" ,r-boot) ("r-mass" ,r-mass)))
+      (list r-boot r-mass))
     (home-page "https://cran.r-project.org/web/packages/QuantPsyc/")
     (synopsis "Quantitative Psychology Tools")
     (description
@@ -6347,19 +6316,19 @@ mediation and estimating power.")
 (define-public r-clubsandwich
   (package
     (name "r-clubsandwich")
-    (version "0.5.3")
+    (version "0.5.5")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "clubSandwich" version))
        (sha256
         (base32
-         "0jazgka18bb5n58d5sn94q7rc9sac82qrpl2i5b4rkx9q2pb39cn"))))
+         "1ifnc2rg5agf7lpilmm27iq0af7ghfhkvwykajhvykgf6h4clvhf"))))
     (properties `((upstream-name . "clubSandwich")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-sandwich" ,r-sandwich)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-sandwich))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/jepusto/clubSandwich")
     (synopsis "Cluster-Robust (Sandwich) Variance Estimators with Small-Sample
 Corrections")
@@ -6396,10 +6365,7 @@ Methods are provided for a variety of fitted models, including @code{lm()} and
     (properties `((upstream-name . "puniform")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-adgoftest" ,r-adgoftest)
-       ("r-metafor" ,r-metafor)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)))
+     (list r-adgoftest r-metafor r-rcpp r-rcpparmadillo))
     (home-page
      "https://github.com/RobbievanAert/puniform")
     (synopsis
@@ -6489,7 +6455,7 @@ or eta squared effect size.")
     (properties `((upstream-name . "kknn")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-igraph" ,r-igraph) ("r-matrix" ,r-matrix)))
+      (list r-igraph r-matrix))
     (home-page "https://github.com/KlausVigo/kknn")
     (synopsis "Weighted k-Nearest Neighbors")
     (description
@@ -6509,7 +6475,7 @@ or eta squared effect size.")
             "12hkdi77vkic05p2vhap025xdcg1n53ywm239v18713pihdlj63l"))))
     (properties `((upstream-name . "logspline")))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page
       "https://cran.r-project.org/web/packages/logspline/")
     (synopsis
@@ -6525,28 +6491,27 @@ interface).  The recommended routine @code{logspline()} uses an algorithm from
 (define-public r-effects
   (package
     (name "r-effects")
-    (version "4.2-0")
+    (version "4.2-1")
     (source
       (origin
         (method url-fetch)
         (uri (cran-uri "effects" version))
         (sha256
           (base32
-            "0iks79rd4knrd81x4kvcpgpclr69l0m0v6sfla8k3wzkcnydycv8"))))
+            "0h3n2kd43fddy29hlv1nckw3wglykwrgk1hp8khb0pnm2i12b5sk"))))
     (properties `((upstream-name . "effects")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-cardata" ,r-cardata)
-        ("r-colorspace" ,r-colorspace)
-        ("r-estimability" ,r-estimability)
-        ("r-insight" ,r-insight)
-        ("r-lattice" ,r-lattice)
-        ("r-lme4" ,r-lme4)
-        ("r-nnet" ,r-nnet)
-        ("r-survey" ,r-survey)))
+      (list r-cardata
+            r-colorspace
+            r-estimability
+            r-insight
+            r-lattice
+            r-lme4
+            r-nnet
+            r-survey))
     (native-inputs
-      `(("r-knitr" ,r-knitr)
-        ("r-car", r-car)))
+      (list r-knitr r-car))
     (home-page "https://www.r-project.org")
     (synopsis
       "Effect Displays for Linear, Generalized Linear, and Other Models")
@@ -6558,28 +6523,28 @@ various statistical models with linear predictors.")
 (define-public r-bayesfactor
   (package
     (name "r-bayesfactor")
-    (version "0.9.12-4.2")
+    (version "0.9.12-4.3")
     (source
       (origin
         (method url-fetch)
         (uri (cran-uri "BayesFactor" version))
         (sha256
           (base32
-            "1z083v7is21gm0a458jm5ph3xfdm7mh29a6sg2r1njq82f8x3s3g"))))
+            "171hbr445v8mq4hqi1k8q3h8zqsccwjv0a2mj98h9b77667ziyfw"))))
     (properties `((upstream-name . "BayesFactor")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-coda" ,r-coda)
-        ("r-gtools" ,r-gtools)
-        ("r-hypergeo" ,r-hypergeo)
-        ("r-matrix" ,r-matrix)
-        ("r-matrixmodels" ,r-matrixmodels)
-        ("r-mvtnorm" ,r-mvtnorm)
-        ("r-pbapply" ,r-pbapply)
-        ("r-rcpp" ,r-rcpp)
-        ("r-rcppeigen" ,r-rcppeigen)
-        ("r-stringr" ,r-stringr)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+      (list r-coda
+            r-gtools
+            r-hypergeo
+            r-matrix
+            r-matrixmodels
+            r-mvtnorm
+            r-pbapply
+            r-rcpp
+            r-rcppeigen
+            r-stringr))
+    (native-inputs (list r-knitr))
     (home-page
       "https://richarddmorey.github.io/BayesFactor/")
     (synopsis
@@ -6602,7 +6567,7 @@ designs, one-way designs, general ANOVA designs, and linear regression.")
                 "01j1h412yfjx5r4dd0w8rhlf55997spgb6zd6pawy19rgw0byp1h"))))
     (build-system r-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/norm/")
     (synopsis "Analysis of multivariate normal datasets with missing values")
     (description "Multiple imputation of multivariate continuous data under a
@@ -6622,21 +6587,21 @@ normal model.")
                 "0l3l2x85v3srilww483kpgp4zlwixyml257b0cqly8kcpwawlinm"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-norm" ,r-norm)
-       ("r-forcats" ,r-forcats)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-glue" ,r-glue)
-       ("r-magrittr" ,r-magrittr)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)
-       ("r-upsetr" ,r-upsetr)
-       ("r-viridis" ,r-viridis)
-       ("r-visdat" ,r-visdat)))
+     (list r-dplyr
+           r-norm
+           r-forcats
+           r-ggplot2
+           r-glue
+           r-magrittr
+           r-purrr
+           r-rlang
+           r-tibble
+           r-tidyr
+           r-upsetr
+           r-viridis
+           r-visdat))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/njtierney/naniar")
     (synopsis
      "Data structures, summaries, and visualisations for missing data")
@@ -6685,7 +6650,7 @@ Michael Lim & Trevor Hastie (2015)")
             "1w1yhwwrmh95bklacz44wjwynxd8cj3z8b9zvsnzmk18m5a4k0fl"))))
     (properties `((upstream-name . "datasauRus")))
     (build-system r-build-system)
-    (native-inputs `(("r-knitr" ,r-knitr)))
+    (native-inputs (list r-knitr))
     (home-page
       "https://github.com/lockedata/datasauRus")
     (synopsis "Datasets from the Datasaurus Dozen")
@@ -6703,3 +6668,186 @@ original Datasaurus is detailed in \"Same Stats, Different Graphs: Generating
 Datasets with Varied Appearance and Identical Statistics through Simulated
 Annealing\" @url{doi:10.1145/3025453.3025912}.")
     (license license:expat)))
+
+(define-public r-lmom
+  (package
+    (name "r-lmom")
+    (version "2.8")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (cran-uri "lmom" version))
+        (sha256
+          (base32 "1lnj41gynaar5isyijg5nbll64qdxa12dnqvz7lxhaclqcjskqna"))))
+    (properties `((upstream-name . "lmom")))
+    (build-system r-build-system)
+    (native-inputs (list gfortran))
+    (home-page "https://cran.r-project.org/package=lmom")
+    (synopsis "L-Moments for R")
+    (description
+      "This package provides functions related to L-moments: computation
+of L-moments and trimmed L-moments of distributions and data samples;
+parameter estimation; L-moment ratio diagram; plot vs.  quantiles of an
+extreme-value distribution.")
+    (license license:cpl1.0)))
+
+(define-public r-gld
+  (package
+    (name "r-gld")
+    (version "2.6.4")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (cran-uri "gld" version))
+        (sha256
+          (base32 "08rkv7g6ci969vh9fbyg3lrpfmjhbiwzdhcjs9j6s9bf3gpdmdhd"))))
+    (properties `((upstream-name . "gld")))
+    (build-system r-build-system)
+    (propagated-inputs (list r-e1071 r-lmom))
+    (home-page
+      "https://cran.r-project.org/package=gld")
+    (synopsis
+      "Estimation and Use of the Generalised (Tukey) Lambda Distribution")
+    (description
+      "The generalised lambda distribution, or Tukey lambda distribution,
+provides a wide variety of shapes with one functional form.  This package
+provides random numbers, quantiles, probabilities, densities and
+density quantiles for four different types of the distribution, the FKML
+(Freimer et al 1988), RS (Ramberg and Schmeiser 1974), GPD (van Staden
+and Loots 2009) and FM5 - see documentation for details.  It provides the
+density function, distribution function, and Quantile-Quantile plots.
+It implements a variety of estimation methods for the distribution,
+including diagnostic plots.  Estimation methods include the starship (all
+4 types), method of L-Moments for the GPD and FKML types, and a number
+of methods for only the FKML type.  These include maximum likelihood,
+maximum product of spacings, Titterington's method, Moments, Trimmed
+L-Moments and Distributional Least Absolutes.")
+    (license license:gpl2+)))
+
+(define-public r-exact
+  (package
+    (name "r-exact")
+    (version "3.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (cran-uri "Exact" version))
+        (sha256
+          (base32 "1kz3hw11sl142mai4ly2r85rwdbjz8q7b38ybmjym6r0n5qmqzyn"))))
+    (properties `((upstream-name . "Exact")))
+    (build-system r-build-system)
+    (propagated-inputs (list r-rootsolve))
+    (home-page "https://cran.r-project.org/package=Exact")
+    (synopsis "Unconditional Exact Test")
+    (description
+      "Performs unconditional exact tests and power calculations for 2x2
+contingency tables.  For comparing two independent proportions, performs
+@url{doi:10.1038/156177a0, Barnard's test (1945)} using the original CSM
+test (@url{doi:10.1093/biomet/34.1-2.123, Barnard (1947)}), using Fisher's
+p-value referred to as @url{doi:10.1111/j.1467-9574.1970.tb00104.x,
+Boschloo's test (1970)}, or using a Z-statistic (@url{doi:10.2307/2981892,
+Suissa and Shuster (1985)}).  For comparing two binary proportions,
+performs unconditional exact test using McNemar's Z-statistic
+(@url{doi:10.1191/0962280203sm312ra, Berger and Sidik (2003)}), using
+McNemar's Z-statistic with continuity correction, or using CSM test.
+Calculates confidence intervals for the difference in proportion.")
+    (license license:gpl2)))
+
+(define-public r-desctools
+  (package
+    (name "r-desctools")
+    (version "0.99.44")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (cran-uri "DescTools" version))
+        (sha256
+          (base32 "04wp3sp6sahgq167465y38y13h1ia5a4zqazysacpjxd1if0578j"))))
+    (properties `((upstream-name . "DescTools")))
+    (build-system r-build-system)
+    (propagated-inputs
+      (list r-bh
+            r-boot
+            r-data-table
+            r-exact
+            r-expm
+            r-gld
+            r-mass
+            r-mvtnorm
+            r-rcpp
+            r-rstudioapi))
+    (native-inputs (list gfortran))
+    (home-page "https://andrisignorell.github.io/DescTools/")
+    (synopsis "Tools for Descriptive Statistics")
+    (description
+      "This package provides a collection of miscellaneous basic statistic
+functions and convenience wrappers for efficiently describing data.
+The author's intention was to create a toolbox, which facilitates the
+(notoriously time consuming) first descriptive tasks in data analysis,
+consisting of calculating descriptive statistics, drawing graphical
+summaries and reporting the results.  The package contains furthermore
+functions to produce documents using MS Word (or PowerPoint) and functions
+to import data from Excel.  Many of the included functions can be found
+scattered in other packages and other sources written partly by Titans
+of R.  The reason for collecting them here, was primarily to have them
+consolidated in ONE instead of dozens of packages (which themselves might
+depend on other packages which are not needed at all), and to provide a
+common and consistent interface as far as function and arguments naming,
+NA handling, recycling rules etc.  are concerned.  Google style guides
+were used as naming rules (in absence of convincing alternatives).
+The BigCamelCase style was consequently applied to functions borrowed
+from contributed R packages as well.")
+    (license license:gpl2+)))
+
+(define-public xlispstat
+  (let ((commit "f1bea6053df658ee48612bf1f63c35de99e2c649")
+        (revision "0"))
+    (package
+      (name "xlispstat")
+      (version (git-version "3.52.23" revision commit))
+      (source (origin
+	        (method git-fetch)
+	        (uri (git-reference
+		      (url "https://github.com/jhbadger/xlispstat.git")
+		      (commit commit)))
+                (file-name (git-file-name name version))
+	        (sha256
+	         (base32
+	          "1p0cmgy19kbkxia139cb5w9dnkp2cdqp5n3baag6cq3prn3n71mf"))))
+      (build-system gnu-build-system)
+      (arguments
+       `(#:parallel-build? #f   ; Parallel builds are not supported
+         #:configure-flags (list "--with-gcc")
+         #:phases
+         (modify-phases %standard-phases
+           (replace 'check
+             (lambda* (#:key tests? #:allow-other-keys)
+               (when tests?
+                 (with-output-to-file "exit.lsp"
+                   (lambda () (display "(exit)")))
+                 (invoke "./xlisp" "tests/test" "exit")))))))
+      (inputs (list tcsh
+                    libx11
+                    libxmu
+                    libxext
+                    libxpm
+                    libxaw
+                    ncurses
+                    gnuplot))
+      (native-inputs (list pkg-config))
+      (synopsis "Statistical analysis environment with interactive graphics")
+      (description "XLISP-STAT is a statistical environment based on a Lisp
+dialect called XLISP.  To facilitate statistical computations, standard
+functions for addition, logarithms, etc., have been modified to operate on
+lists and arrays of numbers, and a number of basic statistical functions have
+been added.  Many of these functions have been written in Lisp, and additional
+functions can be added easily by a user.  Several basic forms of plots,
+including histograms, scatterplots, rotatable plots and scatterplot matrices
+are provided.  These plots support various forms of interactive highlighting
+operations and can be linked so points highlighted in one plot will be
+highlighted in all linked plots.  Interactions with the plots are controlled
+by the mouse, menus and dialog boxes.  An object-oriented programming system
+is used to allow menus, dialogs, and the response to mouse actions to be
+ customized.")
+      (home-page "http://homepage.divms.uiowa.edu/~luke/xls/xlsinfo/")
+      (license license:expat))))
diff --git a/gnu/packages/stb.scm b/gnu/packages/stb.scm
index 094ece536d..4ee1b4ebd2 100644
--- a/gnu/packages/stb.scm
+++ b/gnu/packages/stb.scm
@@ -75,7 +75,7 @@ the C programming language.")
     (name name)
     (version version)
     (source #f)
-    (inputs `(("stb" ,stb)))
+    (inputs (list stb))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
diff --git a/gnu/packages/stenography.scm b/gnu/packages/stenography.scm
index 979b2c29ef..969395cbcf 100644
--- a/gnu/packages/stenography.scm
+++ b/gnu/packages/stenography.scm
@@ -45,18 +45,16 @@
         (base32 "1b2ys77bkjsdmyg97i7lq3lj45q56bycvsm06d4rs656kxhvc0a3"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-mock python-pytest python-setuptools-scm))
     (inputs
-     `(("python-appdirs" ,python-appdirs)
-       ("python-pyqt" ,python-pyqt)
-       ("python-babel" ,python-babel)
-       ("python-dbus" ,python-dbus)
-       ("python-hidapi" ,python-hidapi)
-       ("python-pyserial" ,python-pyserial)
-       ("python-wxpython" ,python-wxpython)
-       ("python-xlib" ,python-xlib)))
+     (list python-appdirs
+           python-pyqt
+           python-babel
+           python-dbus
+           python-hidapi
+           python-pyserial
+           python-wxpython
+           python-xlib))
     (home-page "https://www.openstenoproject.org/plover/")
     (synopsis "Stenography engine")
     (description
diff --git a/gnu/packages/storage.scm b/gnu/packages/storage.scm
index d53327df75..d29486bd4b 100644
--- a/gnu/packages/storage.scm
+++ b/gnu/packages/storage.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2017, 2018, 2019, 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2020 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2021 Greg Hogan <code@greghogan.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -38,6 +39,7 @@
   #:use-module (gnu packages disk)
   #:use-module (gnu packages gperf)
   #:use-module (gnu packages jemalloc)
+  #:use-module (gnu packages icu4c)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages lua)
   #:use-module (gnu packages ncurses)
@@ -45,9 +47,11 @@
   #:use-module (gnu packages nss)
   #:use-module (gnu packages openldap)
   #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages pretty-print)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages sphinx)
+  #:use-module (gnu packages sqlite)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages web)
   #:use-module (gnu packages xml))
@@ -55,35 +59,35 @@
 (define-public ceph
   (package
     (name "ceph")
-    (version "14.2.16")
+    (version "16.2.7")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://download.ceph.com/tarballs/ceph-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0lmdri415hqczc9565s5m5568pnj97ipqxgnw6085kps0flwq5zh"))
+                "0n7vpdcxji49bqaa5b7zxif1r80rrkbh0dfacbibvf20kzzbn2fz"))
               (patches
-               (search-patches "ceph-disable-cpu-optimizations.patch"))
+               (search-patches
+                "ceph-disable-cpu-optimizations.patch"
+                "ceph-boost-compat.patch"
+                "ceph-rocksdb-compat.patch"))
               (modules '((guix build utils)))
               (snippet
-               '(begin
-                  (for-each delete-file-recursively
-                            '(;; TODO: Unbundle these:
-                              ;"src/isa-l"
-                              ;"src/lua"
-                              ;"src/xxHash"
-                              ;"src/zstd"
-                              ;"src/civetweb"
-                              ;"src/seastar/fmt"
-                              "src/test/downloads"
-                              "src/c-ares"
-                              "src/googletest"
-                              "src/rapidjson"
-                              "src/spdk"
-                              "src/rocksdb"
-                              "src/boost"))
-                  #t))))
+               '(for-each delete-file-recursively
+                          '(;; TODO: Unbundle these:
+                            ;;"src/isa-l"
+                            ;;"src/lua"
+                            ;;"src/xxHash"
+                            ;;"src/zstd"
+                            ;;"src/civetweb"
+                            "src/c-ares"
+                            "src/fmt"
+                            "src/googletest"
+                            "src/rapidjson"
+                            "src/spdk"
+                            "src/rocksdb"
+                            "src/boost")))))
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags
@@ -110,7 +114,7 @@
                "-DBUILD_SHARED_LIBS=ON"
                "-DWITH_SYSTEM_ROCKSDB=ON"
                "-DWITH_SYSTEM_BOOST=ON"
-               "-DWITH_PYTHON3=ON"
+
                ;; TODO: Enable these when available in Guix.
                "-DWITH_MGR_DASHBOARD_FRONTEND=OFF"       ;requires node + nodeenv
                "-DWITH_BABELTRACE=OFF"
@@ -121,6 +125,9 @@
                ;; Use jemalloc instead of tcmalloc.
                "-DALLOCATOR=jemalloc"
 
+               ;; Don't install systemd unit files.
+               "-DWITH_SYSTEMD=OFF"
+
                ;; Do not bother building the tests; we are not currently running
                ;; them, and they do not build with system googletest as of 14.2.5.
                "-DWITH_TESTS=OFF"))
@@ -138,15 +145,12 @@
                (substitute* "cmake/modules/Distutils.cmake"
                  ;; Prevent creation of Python eggs.
                  (("setup.py install")
-                  "setup.py install --single-version-externally-managed --root=/"))
-
-               (substitute* (find-files "src/pybind" "^setup\\.py$")
-                 ;; Here we inject an extra line to the `setup.py' of the
+                  "setup.py install --single-version-externally-managed --root=/")
+                 ;; Inject the -rpath linker argument when linking
                  ;; Python C libraries so RUNPATH gets set up correctly.
-                 (("^([[:blank:]]+)extra_compile_args=(.*)$" _ indent args)
-                  (string-append indent "extra_compile_args=" args
-                                 indent "extra_link_args=['-Wl,-rpath="
-                                 lib "/lib'],\n")))
+                 (("LDFLAGS=(.*)\n" _ flags)
+                  (string-append "LDFLAGS=\\\"" flags
+                                 " -Wl,-rpath=" lib "/lib\\\"\n")))
 
                ;; Statically link libcrc32 because it does not get installed,
                ;; yet several libraries end up referring to it.
@@ -156,8 +160,7 @@
 
                (substitute* "udev/50-rbd.rules"
                  (("/usr/bin/ceph-rbdnamer")
-                  (string-append out "/bin/ceph-rbdnamer")))
-               #t)))
+                  (string-append out "/bin/ceph-rbdnamer"))))))
          (add-before 'install 'set-install-environment
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -168,46 +171,39 @@
                                     "/site-packages")))
                ;; The Python install scripts refuses to function if
                ;; the install directory is not on PYTHONPATH.
-               (setenv "PYTHONPATH"
-                       (string-append py3sitedir ":"
-                                      (getenv "PYTHONPATH")))
-               #t)))
+               (setenv "PYTHONPATH" py3sitedir))))
          (add-after 'install 'wrap-python-scripts
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
-                    (scripts '("ceph" "ceph-mgr" "ceph-volume"))
-                    (prettytable (assoc-ref inputs "python-prettytable"))
-                    (six (assoc-ref inputs "python-six"))
+                    (scripts '("bin/ceph" "bin/cephfs-top" "sbin/ceph-volume"))
+                    (dependencies (map (lambda (input)
+                                         (assoc-ref inputs input))
+                                       '("python-prettytable" "python-pyyaml")))
                     (sitedir (lambda (package)
                                (string-append package
                                               "/lib/python"
                                               ,(version-major+minor
                                                 (package-version python))
                                               "/site-packages")))
-                    (PYTHONPATH (string-append
-                                 (sitedir out) ":"
-                                 (sitedir six) ":"
-                                 (sitedir prettytable))))
+                    (PYTHONPATH (string-join (map sitedir (cons out dependencies))
+                                             ":")))
                (for-each (lambda (executable)
-                           (wrap-program (string-append out "/bin/" executable)
-                             `("PYTHONPATH" ":" prefix (,PYTHONPATH))))
-                         scripts)
-               #t))))))
+                           (wrap-program (string-append out "/" executable)
+                             `("GUIX_PYTHONPATH" ":" prefix (,PYTHONPATH))))
+                         scripts)))))))
     (outputs
      '("out" "lib"))
     (native-inputs
-     `(("gperf" ,gperf)
-       ("pkg-config" ,pkg-config)
-       ("python-cython" ,python-cython)
-       ("python-sphinx" ,python-sphinx)
-       ("yasm" ,yasm)))
+     (list gperf pkg-config python-cython python-sphinx yasm))
     (inputs
      `(("boost" ,boost)
        ("curl" ,curl)
        ("cryptsetup" ,cryptsetup)
        ("expat" ,expat)
        ("fcgi" ,fcgi)
+       ("fmt" ,fmt)
        ("fuse" ,fuse)
+       ("icu4c" ,icu4c)
        ("jemalloc" ,jemalloc)
        ("keyutils" ,keyutils)
        ("leveldb" ,leveldb)
@@ -224,12 +220,13 @@
        ("ncurses" ,ncurses)
        ("nss" ,nss)
        ("python-prettytable" ,python-prettytable) ;used by ceph_daemon.py
-       ("python-six" ,python-six)                 ;for ceph-mgr + plugins
-       ("python" ,python-wrapper)
+       ("python-pyyaml" ,python-pyyaml)           ;from python-common/setup.py
+       ("python" ,python)
        ("rapidjson" ,rapidjson)
        ("rdma-core" ,rdma-core)
        ("rocksdb" ,rocksdb)
        ("snappy" ,snappy)
+       ("sqlite" ,sqlite)
        ("udev" ,eudev)
        ("util-linux" ,util-linux)
        ("util-linux:lib" ,util-linux "lib")
diff --git a/gnu/packages/suckless.scm b/gnu/packages/suckless.scm
index b24eced379..cfeb17e533 100644
--- a/gnu/packages/suckless.scm
+++ b/gnu/packages/suckless.scm
@@ -9,6 +9,8 @@
 ;;; Copyright © 2017 Alex Griffin <a@ajgrf.com>
 ;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2021 Raghav Gururajan <rg@raghavgururajan.name>
+;;; Copyright © 2021 Alexandru-Sergiu Marton <brown121407@posteo.ro>
+;;; Copyright © 2021 Nikolay Korotkiy <sikmir@disroot.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -34,6 +36,7 @@
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages gawk)
   #:use-module (gnu packages gnome)
+  #:use-module (gnu packages gtk)
   #:use-module (gnu packages image)
   #:use-module (gnu packages libbsd)
   #:use-module (gnu packages linux)
@@ -45,6 +48,7 @@
   #:use-module (guix build-system glib-or-gtk)
   #:use-module (guix build-system gnu)
   #:use-module (guix download)
+  #:use-module (guix gexp)
   #:use-module (guix git-download)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix utils)
@@ -257,10 +261,7 @@ a custom raw video format with a simple container.")
                     output)))
               #t))))))
     (inputs
-     `(("freetype" ,freetype)
-       ("libx11" ,libx11)
-       ("libxft" ,libxft)
-       ("libxinerama" ,libxinerama)))
+     (list freetype libx11 libxft libxinerama))
     (home-page "https://dwm.suckless.org/")
     (synopsis "Dynamic window manager")
     (description
@@ -292,10 +293,7 @@ optimising the environment for the application in use and the task performed.")
        #:phases
        (modify-phases %standard-phases (delete 'configure))))
     (inputs
-     `(("freetype" ,freetype)
-       ("libxft" ,libxft)
-       ("libx11" ,libx11)
-       ("libxinerama" ,libxinerama)))
+     (list freetype libxft libx11 libxinerama))
     (home-page "https://tools.suckless.org/dmenu/")
     (synopsis "Dynamic menu")
     (description
@@ -322,10 +320,8 @@ numbers of user-defined menu items efficiently.")
        (list (string-append "CC=" ,(cc-for-target))
              (string-append "PREFIX=" %output))))
     (inputs
-     `(("libx11" ,libx11)
-       ("libxkbfile" ,libxkbfile)
-       ("alsa-lib" ,alsa-lib)           ; tinyalsa (unpackaged) would suffice
-       ("libmpdclient" ,libmpdclient)))
+     (list libx11 libxkbfile alsa-lib ; tinyalsa (unpackaged) would suffice
+           libmpdclient))
     (home-page "https://git.2f30.org/spoon/")
     (synopsis "Set dwm status")
     (description
@@ -351,10 +347,7 @@ numbers of user-defined menu items efficiently.")
              (string-append "PREFIX=" %output))
        #:phases (modify-phases %standard-phases (delete 'configure))))
     (inputs
-     `(("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxinerama" ,libxinerama)
-       ("libxrandr" ,libxrandr)))
+     (list libx11 libxext libxinerama libxrandr))
     (home-page "https://tools.suckless.org/slock/")
     (synopsis "Simple X session lock")
     (description
@@ -377,22 +370,21 @@ numbers of user-defined menu items efficiently.")
      `(#:tests? #f                      ; no tests
        #:make-flags
        (list (string-append "CC=" ,(cc-for-target))
+             (string-append "TERMINFO="
+                            (assoc-ref %outputs "out")
+                            "/share/terminfo")
              (string-append "PREFIX=" %output))
        #:phases
        (modify-phases %standard-phases
-         (delete 'configure)
-         (add-after 'unpack 'inhibit-terminfo-install
-           (lambda _
-             (substitute* "Makefile"
-               (("\ttic .*") ""))
-             #t)))))
+         (delete 'configure))))
     (inputs
      `(("libx11" ,libx11)
        ("libxft" ,libxft)
        ("fontconfig" ,fontconfig)
        ("freetype" ,freetype)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list ncurses ;provides tic program
+           pkg-config))
     (home-page "https://st.suckless.org/")
     (synopsis "Simple terminal emulator")
     (description
@@ -402,6 +394,71 @@ antialiased fonts (using fontconfig), fallback fonts, resizing, and line
 drawing.")
     (license license:x11)))
 
+(define-public xst
+  (package
+    (inherit st)
+    (name "xst")
+    (version "0.8.4.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/gnotclub/xst")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1q64x7czpbcg0v509qchn5v96zdnx7jmvy0zxhjmkk3d10x5rqlw"))))
+    (home-page "https://github.com/gnotclub/xst")
+    (synopsis "Fork of st that uses Xresources")
+    (description
+     "@command{xst} uses Xresources and applies the following patches to
+@command{st}:
+@itemize
+@item @uref{https://st.suckless.org/patches/alpha/, alpha}
+@item @uref{https://st.suckless.org/patches/boxdraw/, boxdraw}
+@item @uref{https://st.suckless.org/patches/clipboard/, clipboard}
+@item @uref{https://st.suckless.org/patches/disable_bold_italic_fonts/, disable_bold_italic_fonts}
+@item @uref{https://st.suckless.org/patches/externalpipe/, externalpipe}
+@item @uref{https://st.suckless.org/patches/scrollback/, scrollback}
+@item @uref{https://st.suckless.org/patches/spoiler/, spoiler}
+@item @uref{https://st.suckless.org/patches/vertcenter/, vertcenter}
+@end itemize")
+    (license license:expat)))
+
+(define-public lukesmithxyz-st
+  (let ((commit "e053bd6036331cc7d14f155614aebc20f5371d3a")
+        (revision "0"))
+    (package
+      (inherit st)
+      (name "lukesmithxyz-st")
+      (version "0.8.4")
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/LukeSmithxyz/st")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "12avzzapkkj4mvd00zh8b6gynk6jysh84jcwlkliyyd82lvyw22v"))))
+      (arguments
+       (substitute-keyword-arguments (package-arguments st)
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'remove-calls-to-git
+               (lambda _
+                 (substitute* "Makefile"
+                   (("git submodule init") "")
+                   (("git submodule update") ""))))))))
+      (inputs (modify-inputs (package-inputs st)
+                (prepend libxext harfbuzz)))
+      (home-page "https://github.com/LukeSmithxyz/st")
+      (synopsis "Luke Smith's fork of st")
+      (description
+       "This package is Luke's fork of the suckless simple terminal (st) with
+Vim bindings and Xresource compatibility.")
+      (license license:expat))))
+
 (define-public surf
   (package
     (name "surf")
@@ -426,18 +483,18 @@ drawing.")
          (add-before 'build 'set-dmenu-and-xprop-file-name
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "config.def.h"
-               (("dmenu") (string-append (assoc-ref inputs "dmenu") "/bin/dmenu"))
-               (("xprop") (string-append (assoc-ref inputs "xprop") "/bin/xprop")))
+               (("dmenu") (search-input-file inputs "/bin/dmenu"))
+               (("xprop") (search-input-file inputs "/bin/xprop")))
              #t)))))
     (inputs
      `(("dmenu" ,dmenu)
        ("gcr" ,gcr)
        ("glib-networking" ,glib-networking)
        ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("webkitgtk" ,webkitgtk)
+       ("webkitgtk" ,webkitgtk-with-libsoup2)
        ("xprop" ,xprop)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://surf.suckless.org/")
     (synopsis "Simple web browser")
     (description
@@ -473,7 +530,7 @@ point surf to another URI by setting its XProperties.")
                (string-append "INCS=-I. " (pkg-config "--cflags"))
                (string-append "LIBS=" (pkg-config "--libs") " -lm")))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("libpng" ,libpng)
        ("libx11" ,libx11)
@@ -488,6 +545,36 @@ few minutes.")
     (home-page "https://tools.suckless.org/sent")
     (license license:x11)))
 
+(define-public wmname
+  (package
+    (name "wmname")
+    (version "0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://dl.suckless.org/tools/wmname-"
+                           version ".tar.gz"))
+       (sha256
+        (base32 "1i82ilhbk36hspc2j0fbpg27wjj7xnvzpv1ppgf6fccina4d36jm"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f ; no tests
+       #:make-flags
+       (list (string-append "CC=" ,(cc-for-target))
+             (string-append "PREFIX=" %output))
+       #:phases                         ; no tests
+       (modify-phases %standard-phases
+         (delete 'configure))))         ; no configure script
+    (inputs
+     (list libx11))
+    (home-page "https://tools.suckless.org/x/wmname/")
+    (synopsis "Print or set the window manager name")
+    (description "@command{wmname} prints/sets the window manager name
+property of the root window similar to how @command{hostname} behaves.  It is
+useful for fixing problems with JDK versions and other broken programs
+assuming a reparenting window manager for instance.")
+    (license license:expat)))
+
 (define-public xbattmon
   (package
     (name "xbattmon")
@@ -507,7 +594,7 @@ few minutes.")
        (list (string-append "CC=" ,(cc-for-target))
              (string-append "PREFIX=" %output))))
     (inputs
-     `(("libx11" ,libx11)))
+     (list libx11))
     (home-page "https://git.2f30.org/xbattmon/")
     (synopsis "Simple battery monitor for X")
     (description
@@ -625,8 +712,7 @@ left.")
        (modify-phases %standard-phases
          (delete 'configure))))         ; no configure script
     (inputs
-     `(("cups-minimal" ,cups-minimal)
-       ("zlib" ,zlib)))
+     (list cups-minimal zlib))
     (home-page "https://git.2f30.org/prout/")
     (synopsis "Smaller lp command")
     (description
@@ -662,7 +748,7 @@ cups server to be installed.")
              (substitute* "Makefile"
                (("lcurses") "lncurses")))))))
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (home-page "https://git.2f30.org/noice/")
     (synopsis "Small file browser")
     (description
@@ -765,7 +851,7 @@ initially intended to be used on musl-based Linux distributions.
        (modify-phases %standard-phases
          (delete 'configure))))         ; no configure script
     (inputs
-     `(("libpng" ,libpng)))
+     (list libpng))
     (home-page "https://git.2f30.org/colors/")
     (synopsis "Extract colors from pictures")
     (description
@@ -803,7 +889,7 @@ colormap to stdout.")
          (modify-phases %standard-phases
            (delete 'configure))))       ; no configure script
       (inputs
-       `(("gawk" ,gawk)))
+       (list gawk))
       (home-page "https://github.com/cls/libutf")
       (synopsis "Plan 9 compatible UTF-8 library")
       (description
@@ -861,10 +947,7 @@ as -1, to be used instead of U+FFFD.
                  (install-file "lchat.1" man1)
                  #t))))))
       (inputs
-       `(("grep" ,grep)
-         ("ncurses" ,ncurses)
-         ("libutf" ,libutf)
-         ("libbsd" ,libbsd)))
+       (list grep ncurses libutf libbsd))
       (home-page "https://github.com/younix/lchat")
       (synopsis "Line chat is a frontend for the irc client ii from suckless")
       (description
@@ -873,6 +956,38 @@ It is a front end for ii-like chat programs.  It uses @code{tail -f} to get the
 chat output in the background.")
       (license license:isc))))
 
+(define-public snooze
+  (package
+    (name "snooze")
+    (version "0.5")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url "https://github.com/leahneukirchen/snooze")
+         (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "02ng3r1gzgpyjia4b60i11dj5bhn3xjsdcbwmxaam6dzb33dmgib"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f ; There are no tests.
+       #:make-flags
+       (list (string-append "CC=" ,(cc-for-target))
+             ;; Set prefix path to root of package path in store instead
+             ;; of /usr/local.
+             (string-append "PREFIX=" %output))
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure))))
+    (home-page "https://github.com/leahneukirchen/snooze")
+    (synopsis "Run a command at a particular time")
+    (description
+"@command{snooze} is a tool for waiting until a particular time and then
+running a command.")
+    (license license:cc0)))
+
 (define-public scron
   (package
     (name "scron")
@@ -901,3 +1016,70 @@ chat output in the background.")
 Single daemon and configuration file.  Log to stdout or syslog.  No mail
 support.")
     (license license:expat)))
+
+(define-public sfm
+  (package
+    (name "sfm")
+    (version "0.4")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url "git://git.afify.dev/sfm.git")
+         (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0g6k884mggryld0k054sjcj6kpkbca9cvr50w98klszym73yw0sp"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f                      ;no check target
+       #:make-flags
+       (list (string-append "CC=" ,(cc-for-target))
+             (string-append "PREFIX=" %output))
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure))))         ;no configure script
+    (home-page "https://github.com/afify/sfm")
+    (synopsis "Simple file manager")
+    (description "sfm is a simple file manager.")
+    (license license:isc)))
+
+(define-public sfeed
+  (package
+    (name "sfeed")
+    (version "1.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url "git://git.codemadness.org/sfeed")
+         (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1b0l6f9aymk54ncc2kxavhg4flcqv7d4mpkpw8ljx7mzg0g4ygyk"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list
+      #:tests? #f                       ;no check target
+      #:make-flags
+      #~(list (string-append "CC=" #$(cc-for-target))
+              (string-append "PREFIX=" #$output))
+      #:phases
+      '(modify-phases %standard-phases
+         (add-after 'unpack 'fix-ncurses
+           (lambda _
+             (substitute* "Makefile"
+               (("-lcurses") "-lncurses"))))
+         (delete 'configure))))         ;no configure script
+    (inputs
+     (list ncurses))
+    (home-page "https://git.codemadness.org/sfeed")
+    (synopsis "RSS and Atom parser")
+    (description
+     "@code{sfeed} converts RSS or Atom feeds from XML to a TAB-separated file.
+There are formatting programs included to convert this TAB-separated format to
+various other formats.  There are also some programs and scripts included to
+import and export OPML and to fetch, filter, merge and order feed items.")
+    (license license:isc)))
diff --git a/gnu/packages/swig.scm b/gnu/packages/swig.scm
index 86c1407da9..1f4bd0922a 100644
--- a/gnu/packages/swig.scm
+++ b/gnu/packages/swig.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2018 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2018, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2019 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2020 Arun Isaac <arunisaac@systemreboot.net>
 ;;;
@@ -35,7 +35,7 @@
 (define-public swig
   (package
     (name "swig")
-    (version "4.0.1")
+    (version "4.0.2")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://sourceforge/" name "/" name "/"
@@ -43,25 +43,15 @@
                                  name "-" version ".tar.gz"))
              (sha256
               (base32
-               "1ac7g0gd8ndwv3ybqn5vjgqxa7090bby4db164a7mn9ssp8b803s"))))
+               "1z06m5zv87mha6hvys1iay810ghc1jngilfby1ms2n4d1mryjfym"))))
     (build-system gnu-build-system)
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'workaround-gcc-bug
-           (lambda _
-             ;; XXX: Don't add the -isystem flag, or GCCs #include_next
-             ;; won't be able to find <stdlib.h>.
-             (substitute* "configure"
-               (("-isystem ") "-I"))
-             #t)))))
-    (native-inputs `(("boost" ,boost)
-                     ("pcre" ,pcre "bin")       ;for 'pcre-config'
-                     ;; The following are for tests and examples:
-                     ("guile" ,guile-3.0)
-                     ("perl" ,perl)))
+    (native-inputs (list boost
+                         `(,pcre "bin") ;for 'pcre-config'
+                         ;; The following are for tests and examples:
+                         guile-3.0
+                         perl))
                      ;;("python" ,python-wrapper)
-    (inputs `(("pcre" ,pcre)))
+    (inputs (list pcre))
     (home-page "http://swig.org/")
     (synopsis
      "Interface compiler that connects C/C++ code to higher-level languages")
diff --git a/gnu/packages/sync.scm b/gnu/packages/sync.scm
index c85b4f801c..165be17e4c 100644
--- a/gnu/packages/sync.scm
+++ b/gnu/packages/sync.scm
@@ -71,7 +71,7 @@
 (define-public nextcloud-client
   (package
     (name "nextcloud-client")
-    (version "3.1.3")
+    (version "3.2.0")
     (source
      (origin
        (method git-fetch)
@@ -82,7 +82,7 @@
        (file-name
         (git-file-name name version))
        (sha256
-        (base32 "15ymk3gvfmgwzmqbhlw7jjy9y65ib3391h1dlmpll65iaj2miajk"))
+        (base32 "137h65sn4ixspbblvn0r2ngg8234yk582bppkkr87c3krfp21gx4"))
        (modules '((guix build utils)
                   (ice-9 ftw)
                   (srfi srfi-1)))
@@ -156,9 +156,8 @@
                (("ON CACHE") "OFF CACHE"))
              (substitute* "src/gui/CMakeLists.txt"
                (("@kwidgetsaddons@")
-                (string-append (assoc-ref inputs "kwidgetsaddons")
-                               "/include/KF5/KWidgetsAddons/")))
-             #t))
+                (search-input-directory inputs
+                                        "/include/KF5/KWidgetsAddons/")))))
          (add-before 'check 'pre-check
            (lambda _
              ;; Tests write to $HOME.
@@ -180,33 +179,32 @@
        ("qttools" ,qttools)
        ("ruby" ,ruby)))
     (inputs
-     `(("appstream" ,appstream)
-       ("desktop-file-utils" ,desktop-file-utils)
-       ("glib" ,glib)
-       ("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kio" ,kio)
-       ("kjs" ,kjs)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("libcloudproviders" ,libcloudproviders)
-       ("libzip" ,libzip)
-       ("openssl" ,openssl)
-       ("python-nautilus" ,python-nautilus)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtgraphicaleffects" ,qtgraphicaleffects)
-       ("qtkeychain" ,qtkeychain)
-       ("qtquickcontrols2" ,qtquickcontrols2)
-       ("qtsolutions" ,qtsolutions)
-       ("qtsvg" ,qtsvg)
-       ("qtwebchannel" ,qtwebchannel)
-       ("qtwebsockets" ,qtwebsockets)
-       ("qtwebkit" ,qtwebkit)
-       ("sqlite" ,sqlite)
-       ("xdg-utils" ,xdg-utils)
-       ("zlib" ,zlib)))
+     (list appstream
+           desktop-file-utils
+           glib
+           kconfig
+           kcoreaddons
+           kio
+           kjs
+           kwidgetsaddons
+           libcloudproviders
+           libzip
+           openssl
+           qtbase-5
+           qtdeclarative
+           qtgraphicaleffects
+           qtkeychain
+           qtquickcontrols2
+           qtsolutions
+           qtsvg
+           qtwebchannel
+           qtwebsockets
+           qtwebkit
+           sqlite
+           xdg-utils
+           zlib))
     (propagated-inputs
-     `(("qtwebengine" ,qtwebengine)))
+     (list qtwebengine))
     (synopsis "Desktop sync client for Nextcloud")
     (description "Nextcloud-Desktop is a tool to synchronize files from
 Nextcloud Server with your computer.")
@@ -237,9 +235,7 @@ Nextcloud Server with your computer.")
      `(#:tests? #f
        #:configure-flags '("--with-pcre")))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (inputs
      `(("c-ares" ,c-ares)
        ("crypto++" ,crypto++)
@@ -287,13 +283,11 @@ distributions.")
                                           "/etc/bash_completion.d"))
              #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ;; For documentation
-       ("asciidoc" ,asciidoc)))
+     (list pkg-config
+           ;; For documentation
+           asciidoc))
     (inputs
-     `(("curl" ,curl)
-       ("glib" ,glib)
-       ("openssl" ,openssl)))
+     (list curl glib openssl))
     (home-page "https://megatools.megous.com/")
     (synopsis "Command line client application for mega.nz")
     (description "Megatools is a collection of programs for accessing the mega.nz service
@@ -312,14 +306,14 @@ See also: megacmd, the official tool set by MEGA.")
 (define-public owncloud-client
   (package
     (name "owncloud-client")
-    (version "2.7.6.3261")
+    (version "2.9.0.5150")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://download.owncloud.com/desktop/ownCloud/stable/"
                            version "/source/ownCloud-" version ".tar.xz"))
        (sha256
-        (base32 "19jjlhbzhy4v5h1wj5a87ismxq2p7avb2bb4lfbh2rvl01r432vy"))
+        (base32 "0nf68x840p30yng4fh1nlyiqg40z0rkcv0lskpz8dd4pj1iw5jjs"))
        (patches (search-patches "owncloud-disable-updatecheck.patch"))))
     ;; TODO: unbundle qprogessindicator, qlockedfile, qtokenizer and
     ;; qtsingleapplication which have not yet been packaged, but all are
@@ -341,10 +335,16 @@ See also: megacmd, the official tool set by MEGA.")
                (("QCoreApplication::applicationFilePath\\()") "\"owncloud\""))
              #t))
          (delete 'patch-dot-desktop-files))
-       #:configure-flags '("-DUNIT_TESTING=ON"
+       #:configure-flags `("-DUNIT_TESTING=ON"
                            ;; build without qtwebkit, which causes the
                            ;; package to FTBFS while looking for QWebView.
-                           "-DNO_SHIBBOLETH=1")))
+                           "-DNO_SHIBBOLETH=1"
+                           ;; Fix sync-exclude.list problem, see
+                           ;; <https://github.com/owncloud/client/issues/8373>
+                           ;; <https://issues.guix.gnu.org/47672>
+                           ,(string-append "-DSYSCONF_INSTALL_DIR="
+                                           (assoc-ref %outputs "out")
+                                           "/etc"))))
     (native-inputs
      `(("cmocka" ,cmocka)
        ("extra-cmake-modules" ,extra-cmake-modules)
@@ -352,10 +352,7 @@ See also: megacmd, the official tool set by MEGA.")
        ("pkg-config" ,pkg-config)
        ("qtlinguist" ,qttools)))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtkeychain" ,qtkeychain)
-       ("sqlite" ,sqlite)
-       ("zlib" ,zlib)))
+     (list qtbase-5 qtkeychain sqlite zlib))
     (home-page "https://owncloud.org")
     (synopsis "Folder synchronization with an ownCloud server")
     (description "The ownCloudSync system lets you always have your latest
@@ -397,8 +394,7 @@ silently and reliably flow across to every other.")
                #t))))
        #:tests? #f)) ; no test target
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtwebkit" ,qtwebkit)))
+     (list qtbase-5 qtwebkit))
     (home-page "https://github.com/sieren/QSyncthingTray")
     (synopsis "Traybar Application for Syncthing")
     (description
@@ -461,7 +457,7 @@ their folder.
                (install-file "../source/doc/manpage/lsyncd.1" man)
                #t))))))
     (native-inputs
-     `(("lua" ,lua-5.2)))
+     (list lua-5.2))
     (home-page "https://github.com/axkibe/lsyncd")
     (synopsis "Synchronize local directories with remote targets")
     (description "Lsyncd watches a local directory trees event monitor
@@ -490,10 +486,9 @@ and does not hamper local file system performance.")
           (base32 "16i1q8f0jmfd43rb8d70l2b383vr5ib4kh7iq3yd345q7xjz9c2j"))))
       (build-system copy-build-system)
       (inputs
-       `(("scsh" ,scsh)))
+       (list scsh))
       (propagated-inputs
-       `(("rsync" ,rsync)
-         ("unison" ,unison)))
+       (list rsync unison))
       (arguments
        `(#:install-plan '(("usync" "bin/usync"))
          #:phases (modify-phases %standard-phases
@@ -527,18 +522,16 @@ written in @command{scsh}.  It makes use of @command{unison} and
               (patches (search-patches "casync-renameat2-declaration.patch"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python-sphinx" ,python-sphinx)
-       ("rsync" ,rsync)))                         ;for tests
+     (list pkg-config python-sphinx rsync))                         ;for tests
     (inputs
-     `(("xz" ,xz)                                 ;for liblzma
-       ("zstd" ,zstd "lib")
-       ("curl" ,curl)
-       ("acl" ,acl)
-       ("libselinux" ,libselinux)
-       ("fuse" ,fuse)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list xz ;for liblzma
+           `(,zstd "lib")
+           curl
+           acl
+           libselinux
+           fuse
+           openssl
+           zlib))
     (synopsis "File synchronization and backup system")
     (description
      "casync is a @dfn{content-addressable data synchronizer} that can be used
diff --git a/gnu/packages/syncthing.scm b/gnu/packages/syncthing.scm
index 4deb60bee2..c19cc97862 100644
--- a/gnu/packages/syncthing.scm
+++ b/gnu/packages/syncthing.scm
@@ -6,6 +6,7 @@
 ;;; Copyright © 2020 Giacomo Leidi <goodoldpaul@autistici.org>
 ;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Arun Isaac <arunisaac@systemreboot.net>
+;;; Copyright © 2022 John Kehayias <john.kehayias@protonmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -45,7 +46,7 @@
 (define-public syncthing
   (package
     (name "syncthing")
-    (version "1.16.1")
+    (version "1.18.6")
     ; XXX After the go-build-system can use "Go modules", stop using bundled
     ; dependencies for Syncthing.
     (source (origin
@@ -55,7 +56,7 @@
                                   "/syncthing-source-v" version ".tar.gz"))
               (sha256
                (base32
-                "0m5k37sp3px8acs3y9an5wzy1wbcbdvqq74jy0pwzfk4bjbr999j"))))
+                "0hlyk2nvsnf4am1vqc4zl91acf2rhpr1gy4gppk2aa5x85h9qisc"))))
     (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
@@ -171,6 +172,14 @@ Protocol.")
                  (substitute* "syncthing_gtk/configuration.py"
                    (("/usr/bin/syncthing") (string-append syncthing
                                                           "/bin/syncthing"))))))
+           (add-after 'unpack 'fix-autostart-path
+             ;; Change the autostart .desktop file 'Exec' command so it finds
+             ;; the Python wrapper of 'syncthing-gtk', rather than the unwrapped
+             ;; '.syncthing-gtk-real'.
+             (lambda _
+               (substitute* "syncthing_gtk/tools.py"
+                 (("return executable")
+                   "return \"syncthing-gtk\""))))
            (add-after 'unpack 'remove-windows.py
              (lambda _
                ;; A Windows-specific module that fails to load with
@@ -183,17 +192,15 @@ Protocol.")
                    `("GI_TYPELIB_PATH" ":" prefix
                      (,(getenv "GI_TYPELIB_PATH"))))))))))
       (inputs
-       `(("gtk+" ,gtk+)
-         ("libappindicator" ,libappindicator)
-         ("libnotify" ,libnotify)
-         ("librsvg" ,librsvg)
-         ("python-bcrypt" ,python-bcrypt)
-         ("python-dateutil" ,python-dateutil)
-         ("python-pycairo" ,python-pycairo)
-         ("python-pygobject" ,python-pygobject)
-         ("python-nautilus" ,python-nautilus)
-         ("psmisc" ,psmisc)
-         ("syncthing" ,syncthing)))
+       (list gtk+
+             libappindicator
+             libnotify
+             python-bcrypt
+             python-dateutil
+             python-pycairo
+             python-pygobject
+             psmisc
+             syncthing))
       ;; (native-inputs
       ;;  `(("python2-setuptools" ,python2-setuptools)))
       (home-page "https://github.com/syncthing/syncthing-gtk")
@@ -248,8 +255,7 @@ firewall.")
                 "1m1xna1kb78pkmr1lfmvvnpk9j7c4x71j3a7c6vj7zpzc4srpsmf"))))
     (build-system go-build-system)
     (inputs
-     `(("go-github-com-pkg-errors" ,go-github-com-pkg-errors)
-       ("go-github-com-urfave-cli" ,go-github-com-urfave-cli)))
+     (list go-github-com-pkg-errors go-github-com-urfave-cli))
     (arguments
      `(#:import-path "github.com/AudriusButkevicius/recli"))
     (synopsis "Reflection-based CLI generator")
@@ -412,7 +418,8 @@ processes.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "004cw699yz3pdpawhjhpa0y94c4w479nw1rf39zj6h6027kpwv2j"))))
+                "004cw699yz3pdpawhjhpa0y94c4w479nw1rf39zj6h6027kpwv2j"))
+              (patches (search-patches "go-github-com-golang-snappy-32bit-test.patch"))))
     (build-system go-build-system)
     (arguments
      `(#:import-path "github.com/golang/snappy"))
@@ -484,9 +491,7 @@ database/sql package.")
                 "1jj4rbdpy87rbl79czg5hs5dyn6xlbnk0bnvyzi71dsxan57nixw"))))
     (build-system go-build-system)
     (propagated-inputs
-     `(("go-github-com-oschwald-maxminddb-golang"
-        ,go-github-com-oschwald-maxminddb-golang)
-       ("go-golang-org-x-sys" ,go-golang-org-x-sys)))
+     (list go-github-com-oschwald-maxminddb-golang go-golang-org-x-sys))
     (arguments
      `(#:import-path "github.com/oschwald/geoip2-golang"
        #:tests? #f)) ; Requires some unpackaged software and test data
@@ -511,7 +516,7 @@ GeoLite2 and GeoIP2 databases in Go.")
                 "100wd5qv00pkcm6cb8c4x5gavc9jnn7drh6xrqh85hzci4rils66"))))
     (build-system go-build-system)
     (propagated-inputs
-     `(("go-golang-org-x-sys" ,go-golang-org-x-sys)))
+     (list go-golang-org-x-sys))
     (arguments
      `(#:import-path "github.com/oschwald/maxminddb-golang"
        #:tests? #f)) ; Requires some unpackaged software and test data
@@ -568,7 +573,7 @@ higher-level API for doing so.")
                                                       (%current-system))))
          #:import-path "github.com/rcrowley/go-metrics"))
       (propagated-inputs
-       `(("go-github-com-stathat-go" ,go-github-com-stathat-go)))
+       (list go-github-com-stathat-go))
       (synopsis "Go port of Coda Hale's Metrics library")
       (description "This package provides a Go implementation of Coda Hale's
 Metrics library.")
@@ -592,7 +597,7 @@ Metrics library.")
     (arguments
      `(#:import-path "github.com/sasha-s/go-deadlock"))
     (propagated-inputs
-     `(("go-github-com-petermattis-goid" ,go-github-com-petermattis-goid)))
+     (list go-github-com-petermattis-goid))
     (synopsis "Deadlock detection in go")
     (description "This package provides tools for detecting deadlocks at
 run-time in Go.")
@@ -616,7 +621,7 @@ run-time in Go.")
                   "0mnkzrz4di13g6ggd54my7bkb9nwk8f5k672dyasn467wsg7bf8f"))))
       (build-system go-build-system)
       (propagated-inputs
-       `(("go-github-com-golang-snappy" ,go-github-com-golang-snappy)))
+       (list go-github-com-golang-snappy))
       (arguments
        `(#:import-path "github.com/syndtr/goleveldb/leveldb"
          #:unpack-path "github.com/syndtr/goleveldb"
@@ -776,7 +781,7 @@ using sh's word-splitting rules.")
       (arguments
        '(#:import-path "github.com/syncthing/notify"))
       (propagated-inputs
-       `(("go-golang-org-x-sys" ,go-golang-org-x-sys)))
+       (list go-golang-org-x-sys))
       (synopsis "File system event notification library")
       (description "This package provides @code{notify}, a file system event
 notification library in Go.")
@@ -833,8 +838,7 @@ bounds.")
            ;; Source-only package
            (delete 'build))))
       (propagated-inputs
-       `(("go-github-com-golang-protobuf-proto"
-          ,go-github-com-golang-protobuf-proto)))
+       (list go-github-com-golang-protobuf-proto))
       (synopsis "Data model artifacts for Prometheus")
       (description "This package provides data model artifacts for Prometheus.")
       (home-page "https://github.com/prometheus/client_model")
@@ -862,8 +866,7 @@ bounds.")
        '(#:import-path "github.com/matttproud/golang_protobuf_extensions/pbutil"
          #:unpack-path "github.com/matttproud/golang_protobuf_extensions"))
       (propagated-inputs
-       `(("go-github-com-golang-protobuf-proto"
-          ,go-github-com-golang-protobuf-proto)))
+       (list go-github-com-golang-protobuf-proto))
       (synopsis "Streaming Protocol Buffers in Go")
       (description "This package provides various Protocol Buffer
 extensions for the Go language, namely support for record length-delimited
@@ -890,24 +893,12 @@ message streaming.")
          #:tests? #f
          #:phases
          (modify-phases %standard-phases
-           (add-before 'reset-gzip-timestamps 'make-gzip-archive-writable
-             (lambda* (#:key outputs #:allow-other-keys)
-               (map (lambda (file)
-                      (make-file-writable file))
-                    (find-files
-                      (string-append (assoc-ref outputs "out")
-                                     "/src/github.com/prometheus/common/expfmt/testdata/")
-                      ".*\\.gz$"))
-               #t))
            ;; Source-only package
            (delete 'build))))
       (propagated-inputs
-       `(("go-github-com-golang-protobuf-proto"
-          ,go-github-com-golang-protobuf-proto)
-         ("go-github-com-matttproud-golang-protobuf-extensions-pbutil"
-          ,go-github-com-matttproud-golang-protobuf-extensions-pbutil)
-         ("go-github-com-prometheus-client-model"
-          ,go-github-com-prometheus-client-model)))
+       (list go-github-com-golang-protobuf-proto
+             go-github-com-matttproud-golang-protobuf-extensions-pbutil
+             go-github-com-prometheus-client-model))
       (synopsis "Prometheus metrics")
       (description "This package provides tools for reading and writing
 Prometheus metrics.")
@@ -961,16 +952,12 @@ system, kernel, and process metrics from the @file{/proc} pseudo file system.")
            ;; Source-only package
            (delete 'build))))
       (propagated-inputs
-       `(("go-github-com-beorn7-perks-quantile"
-          ,go-github-com-beorn7-perks-quantile)
-         ("go-github-com-golang-protobuf-proto"
-          ,go-github-com-golang-protobuf-proto)
-         ("go-github-com-prometheus-client-model"
-          ,go-github-com-prometheus-client-model)
-         ("go-github-com-prometheus-common"
-          ,go-github-com-prometheus-common)
-         ("go-github-com-prometheus-procfs" ,go-github-com-prometheus-procfs)
-         ("go-github-com-cespare-xxhash" ,go-github-com-cespare-xxhash)))
+       (list go-github-com-beorn7-perks-quantile
+             go-github-com-golang-protobuf-proto
+             go-github-com-prometheus-client-model
+             go-github-com-prometheus-common
+             go-github-com-prometheus-procfs
+             go-github-com-cespare-xxhash))
       (synopsis "HTTP server and client tools for Prometheus")
       (description "This package @code{promhttp} provides HTTP client and
 server tools for Prometheus metrics.")
@@ -980,7 +967,7 @@ server tools for Prometheus metrics.")
 (define-public go-github-com-go-asn1-ber-asn1-ber
   (package
     (name "go-github-com-go-asn1-ber-asn1-ber")
-    (version "1.3.1")
+    (version "1.5.3")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -989,7 +976,7 @@ server tools for Prometheus metrics.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0dxfmgk84fn0p6pz3i0cspynh6rly5pfk9wghm1q07mx99npln02"))))
+                "15ygmfmdwwjda9xdq58rx6gnmsfc14m1qqhcj7cn7rm0mx4wk2vb"))))
     (build-system go-build-system)
     (arguments
      '(#:import-path "github.com/go-asn1-ber/asn1-ber"))
@@ -1002,7 +989,7 @@ Go language.")
 (define-public go-github-com-go-ldap-ldap
   (package
     (name "go-github-com-go-ldap-ldap")
-    (version "3.1.7")
+    (version "3.4.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1010,20 +997,43 @@ Go language.")
                      (commit (string-append "v" version))))
               (file-name (git-file-name name version))
               (sha256
-               (base32
-                "1z6wxia7a1jkmasa9mm6g4n8f0qqbp5rw6vk0zyh4vzk7azklnj2"))))
+               (base32 "1xf2jrwhgr06jy4liba48hrz4b7j27r7m9dnl7fj95vazsx2n5br"))))
     (build-system go-build-system)
     (arguments
      '(#:import-path "github.com/go-ldap/ldap/v3"
        #:tests? #f)) ; test suite requires internet access
     (propagated-inputs
-     `(("go-github-com-go-asn1-ber-asn1-ber" ,go-github-com-go-asn1-ber-asn1-ber)))
+     (list go-github-com-go-asn1-ber-asn1-ber
+           go-github-com-azure-go-ntlmssp))
     (home-page "https://github.com/go-ldap/ldap")
     (synopsis "LDAP v3 functionality for Go")
     (description "This package provides basic LDAP v3 functionality in the Go
 language.")
     (license expat)))
 
+(define-public go-github-com-azure-go-ntlmssp
+  (package
+    (name "go-github-com-azure-go-ntlmssp")
+    (version "0.0.0-20211209120228-48547f28849e")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/Azure/go-ntlmssp")
+               (commit (go-version->git-ref version))))
+        (file-name (git-file-name name version))
+        (sha256
+          (base32 "0im28kp9p6ncdmh7qq5qwl85nmiwmp8jka2qgrjiqzc5n36q56np"))))
+    (build-system go-build-system)
+    (arguments '(#:import-path "github.com/Azure/go-ntlmssp"))
+    (propagated-inputs
+     (list go-golang-org-x-crypto))
+    (home-page "https://github.com/Azure/go-ntlmssp")
+    (synopsis "NTLM negotiation in Go")
+    (description
+     "This package provides NTLM/Negotiate authentication over HTTP.")
+    (license expat)))
+
 (define-public go-github-com-flynn-archive-go-shlex
   (let ((commit "3f9db97f856818214da2e1057f8ad84803971cff")
         (revision "0"))
diff --git a/gnu/packages/syndication.scm b/gnu/packages/syndication.scm
index 2f3f191a47..421751bed2 100644
--- a/gnu/packages/syndication.scm
+++ b/gnu/packages/syndication.scm
@@ -1,7 +1,8 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2016, 2017, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
-;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2016, 2017, 2019, 2020, 2021, 2022 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2018, 2019, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020 Vinicius Monego <monego@posteo.net>
+;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -66,7 +67,7 @@
 (define-public cawbird
   (package
     (name "cawbird")
-    (version "1.4.1")
+    (version "1.4.2")
     (source
      (origin
        (method git-fetch)
@@ -75,7 +76,7 @@
              (commit (string-append "v"version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0lmrgcj1ky1vhzynl36k6ba3ws089x4qdrnkjk3lbr334kicx9na"))))
+        (base32 "17575cp5qcgsqf37y3xqg3vr6l2j8bbbkmy2c1l185rxghfacida"))))
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
@@ -109,8 +110,7 @@
                (setenv "XDG_DATA_DIRS"
                        (string-append (getenv "XDG_DATA_DIRS")
                                       ":" (assoc-ref outputs "out") "/share"))
-               (invoke "meson" "test"))
-             #t))
+               (invoke "meson" "test"))))
          (add-after 'glib-or-gtk-wrap 'wrap-paths
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -119,8 +119,7 @@
                     (gi-typelib-path (getenv "GI_TYPELIB_PATH")))
                (wrap-program (string-append bin "cawbird")
                  `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path))
-                 `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))))
-             #t)))))
+                 `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path)))))))))
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("glib:bin" ,glib "bin")
@@ -147,7 +146,7 @@
        ("sqlite" ,sqlite)
        ("x11" ,libx11)))
     (propagated-inputs
-     `(("dconf" ,dconf)))
+     (list dconf))
     (synopsis "Client for Twitter")
     (description "Cawbird is a Twitter client built with GTK and Vala.
 It supports all features except non-mention notifications, polls, threads and
@@ -184,9 +183,8 @@ cards.")
                                           (package-version python))
                                         "/site-packages")))
                (wrap-program (string-append bin "giara")
-                 `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH") ,lib))
-                 `("GI_TYPELIB_PATH" ":" prefix (,(getenv "GI_TYPELIB_PATH")))))
-             #t)))))
+                 `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH") ,lib))
+                 `("GI_TYPELIB_PATH" ":" prefix (,(getenv "GI_TYPELIB_PATH"))))))))))
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("glib:bin" ,glib "bin")
@@ -208,9 +206,9 @@ cards.")
        ("python-pycairo" ,python-pycairo)
        ("python-pygobject" ,python-pygobject)
        ("python-requests" ,python-requests)
-       ("webkitgtk" ,webkitgtk)))
+       ("webkitgtk" ,webkitgtk-with-libsoup2)))
     (propagated-inputs
-     `(("dconf" ,dconf)))
+     (list dconf))
     (synopsis "Client for Reddit")
     (description "Giara is a reddit app, built with Python, GTK and Handy.")
     (home-page "https://giara.gabmus.org/")
@@ -219,14 +217,14 @@ cards.")
 (define-public newsboat
   (package
     (name "newsboat")
-    (version "2.24")
+    (version "2.26")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://newsboat.org/releases/" version
                            "/newsboat-" version ".tar.xz"))
        (sha256
-        (base32 "1yvggkb29qykxlvrysb6yyf5piwsvzv0zla8jn2ihmm2rj40chk2"))))
+        (base32 "061w86jffyi49m4d9n974a3pd1svbw3azmh0qx8h2v7h0178791l"))))
     (build-system cargo-build-system)
     (native-inputs
      `(("gettext" ,gettext-minimal)
@@ -235,40 +233,40 @@ cards.")
        ;; For building documentation.
        ("asciidoctor" ,ruby-asciidoctor)))
     (inputs
-     `(("curl" ,curl)
-       ("json-c" ,json-c)
-       ("libxml2" ,libxml2)
-       ("ncurses" ,ncurses)
-       ("stfl" ,stfl)
-       ("sqlite" ,sqlite)))
+     (list curl
+           json-c
+           libxml2
+           ncurses
+           stfl
+           sqlite))
     (arguments
      `(#:modules ((guix build cargo-build-system)
                   (guix build utils)
                   ((guix build gnu-build-system) #:prefix gnu:))
        #:vendor-dir "vendor"
-       #:rust ,rust-1.48    ; or newer
        #:install-source? #f
        #:cargo-inputs
        (("rust-backtrace" ,rust-backtrace-0.3)
         ("rust-bitflags" ,rust-bitflags-1)
         ("rust-chrono" ,rust-chrono-0.4)
-        ("rust-clap" ,rust-clap-2)
         ("rust-curl-sys" ,rust-curl-sys-0.4)
         ("rust-cxx" ,rust-cxx-1)
+        ("rust-fastrand" ,rust-fastrand-1)
         ("rust-gettext-rs" ,rust-gettext-rs-0.7)
+        ("rust-lexopt" ,rust-lexopt-0.2)
         ("rust-libc" ,rust-libc-0.2)
+        ("rust-md5" ,rust-md5-0.7)
         ("rust-natord" ,rust-natord-1)
-        ("rust-nom" ,rust-nom-6)
+        ("rust-nom" ,rust-nom-7)
         ("rust-once-cell" ,rust-once-cell-1)
         ("rust-percent-encoding" ,rust-percent-encoding-2)
-        ("rust-rand" ,rust-rand-0.8)
         ("rust-url" ,rust-url-2)
         ("rust-unicode-width" ,rust-unicode-width-0.1)
         ("rust-xdg" ,rust-xdg-2))
        #:cargo-development-inputs
        (("rust-cxx-build" ,rust-cxx-build-1)
         ("rust-tempfile" ,rust-tempfile-3)
-        ("rust-proptest" ,rust-proptest-0.9)
+        ("rust-proptest" ,rust-proptest-1)
         ("rust-section-testing" ,rust-section-testing-0.0))
        #:phases
        (modify-phases %standard-phases
@@ -276,29 +274,21 @@ cards.")
            (lambda* (#:key vendor-dir #:allow-other-keys)
              ;; Don't keep the whole tarball in the vendor directory
              (delete-file-recursively
-               (string-append vendor-dir "/" ,name "-" ,version ".tar.xz"))
-             #t))
+               (string-append vendor-dir "/" ,name "-" ,version ".tar.xz"))))
          (add-after 'unpack 'patch-source
-           (lambda _
+           (lambda* (#:key outputs #:allow-other-keys)
              (substitute* "Makefile"
-               (("Cargo.lock") ""))
-             #t))
+               (("Cargo.lock") "")
+               ;; Replace the prefix in the Makefile.
+               (("/usr/local") (assoc-ref outputs "out")))))
          (replace 'build
-           (lambda* args
-             ((assoc-ref gnu:%standard-phases 'build)
-              #:make-flags
-              (list (string-append "prefix=" (assoc-ref %outputs "out"))))))
+           (assoc-ref gnu:%standard-phases 'build))
          (replace 'check
-           (lambda* args
+           (lambda args
              ((assoc-ref gnu:%standard-phases 'check)
-              #:test-target "test"
-              #:make-flags
-              (list (string-append "prefix=" (assoc-ref %outputs "out"))))))
+              #:test-target "test")))
          (replace 'install
-           (lambda* args
-             ((assoc-ref gnu:%standard-phases 'install)
-              #:make-flags
-              (list (string-append "prefix=" (assoc-ref %outputs "out")))))))))
+           (assoc-ref gnu:%standard-phases 'install)))))
     (native-search-paths
      ;; Newsboat respects CURL_CA_BUNDLE.
      (package-native-search-paths curl))
@@ -312,6 +302,7 @@ interface that might look familiar to @command{mutt} or @command{slrn} users.
 Newsboat supports OPML import/exports, HTML rendering, podcasts (with
 @command{podboat}), off-line reading, searching and storing articles to your
 file system, and many more features.")
+    (properties '((release-monitoring-url . "https://newsboat.org/news.atom")))
     (license (list license:gpl2+        ; filter/*
                    license:expat))))    ; everything else
 
@@ -334,8 +325,8 @@ file system, and many more features.")
        ;; For building documentation.
        ("asciidoc" ,asciidoc)))
     (inputs
-     `(("json-c" ,json-c-0.13)
-       ,@(alist-delete "json-c" (package-inputs newsboat))))
+     (modify-inputs (package-inputs newsboat)
+       (replace "json-c" json-c-0.13)))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -375,40 +366,40 @@ file system, and many more features.")
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((out               (assoc-ref outputs "out"))
                    (gi-typelib-path   (getenv "GI_TYPELIB_PATH"))
-                   (python-path       (getenv "PYTHONPATH")))
+                   (python-path       (getenv "GUIX_PYTHONPATH")))
                (wrap-program (string-append out "/bin/liferea")
                  `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))
-                 `("PYTHONPATH" ":" prefix (,python-path))))
+                 `("GUIX_PYTHONPATH" ":" prefix (,python-path))))
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("gettext" ,gettext-minimal)
-       ("glib:bin" ,glib "bin")
-       ("gobject-introspection" ,gobject-introspection)
-       ("intltool" ,intltool)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)
-       ("which" ,which)))
+     (list autoconf
+           automake
+           gettext-minimal
+           `(,glib "bin")
+           gobject-introspection
+           intltool
+           libtool
+           pkg-config
+           which))
     (inputs
-     `(("glib" ,glib)
-       ("glib-networking" ,glib-networking)
-       ("gnome-keyring" ,gnome-keyring)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gstreamer" ,gstreamer)
-       ("json-glib" ,json-glib)
-       ("libnotify" ,libnotify)
-       ("libpeas" ,libpeas)
-       ("libsecret" ,libsecret)
-       ("libsoup" ,libsoup)
-       ("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)
-       ("pango" ,pango)
-       ("python" ,python)
-       ("python-pycairo" ,python-pycairo)
-       ("python-pygobject" ,python-pygobject)
-       ("sqlite" ,sqlite)
-       ("webkitgtk" ,webkitgtk)))
+     (list glib
+           glib-networking
+           gnome-keyring
+           gsettings-desktop-schemas
+           gstreamer
+           json-glib
+           libnotify
+           libpeas
+           libsecret
+           libsoup-minimal-2
+           libxml2
+           libxslt
+           pango
+           python
+           python-pycairo
+           python-pygobject
+           sqlite
+           webkitgtk-with-libsoup2))
     (home-page "https://lzone.de/liferea/")
     (synopsis "News reader for GTK/GNOME")
     (description "Liferea is a desktop feed reader/news aggregator that
@@ -434,24 +425,22 @@ a simple interface that makes it easy to organize and browse feeds.")
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "HOME" (getcwd))
              (setenv "TERM" "linux")
-             (setenv "TERMINFO" (string-append (assoc-ref inputs "ncurses")
-                                               "/share/terminfo"))
-             #t)))
+             (setenv "TERMINFO"
+                     (search-input-directory inputs "share/terminfo"))))
+         ;; Loading this as a library requires a controlling terminal, etc.
+         (delete 'sanity-check))
        #:tests? #f)) ; tests fail: _curses.error: nocbreak() returned ERR
     (propagated-inputs
-     `(("python-beautifulsoup4" ,python-beautifulsoup4)
-       ("python-decorator" ,python-decorator)
-       ("python-kitchen" ,python-kitchen)
-       ("python-requests" ,python-requests)
-       ("python-six" ,python-six)))
+     (list python-beautifulsoup4 python-decorator python-kitchen
+           python-requests python-six))
     (native-inputs
-     `(("ncurses" ,ncurses)
-       ("python-coveralls" ,python-coveralls)
-       ("python-coverage" ,python-coverage)
-       ("python-mock" ,python-mock)
-       ("python-pylint" ,python-pylint)
-       ("python-pytest" ,python-pytest)
-       ("python-vcrpy" ,python-vcrpy)))
+     (list ncurses
+           python-coveralls
+           python-coverage
+           python-mock
+           python-pylint
+           python-pytest
+           python-vcrpy))
     (home-page "https://github.com/michael-lazar/rtv")
     (synopsis "Terminal viewer for Reddit (Reddit Terminal Viewer)")
     (description
@@ -474,24 +463,22 @@ a simple interface that makes it easy to organize and browse feeds.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
+         (delete 'sanity-check)         ; Tries to read environment variables.
          (replace 'check
            (lambda* (#:key tests? inputs outputs #:allow-other-keys)
              (add-installed-pythonpath inputs outputs)
              (when tests?
                (invoke "pytest")))))))
     (inputs
-     `(("python-beautifulsoup4" ,python-beautifulsoup4)
-       ("python-decorator" ,python-decorator)
-       ("python-kitchen" ,python-kitchen)
-       ("python-requests" ,python-requests)
-       ("python-six" ,python-six)))
+     (list python-beautifulsoup4 python-decorator python-kitchen
+           python-requests python-six))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-coveralls" ,python-coveralls)
-       ("python-mock" ,python-mock)
-       ("python-pylint" ,python-pylint)
-       ("python-pytest" ,python-pytest)
-       ("python-vcrpy" ,python-vcrpy)))
+     (list python-coverage
+           python-coveralls
+           python-mock
+           python-pylint
+           python-pytest
+           python-vcrpy))
     (home-page "https://gitlab.com/ajak/tuir")
     (synopsis "Terminal viewer for Reddit (Terminal UI for Reddit)")
     (description
@@ -515,8 +502,7 @@ a simple interface that makes it easy to organize and browse feeds.")
     (arguments
      `(#:python ,python-2.7))
     (inputs
-     `(("python2-feedparser" ,python2-feedparser)
-       ("python2-pytidylib" ,python2-pytidylib)))
+     (list python2-feedparser python2-pytidylib))
     (home-page "https://offog.org/code/rawdog/")
     (synopsis "RSS Aggregator Without Delusions Of Grandeur")
     (description
@@ -566,14 +552,9 @@ formats, including all versions of RSS and Atom.")
                                     (assoc-ref inputs "qttools")
                                     "/bin/lrelease")))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list pkg-config qttools))
     (inputs
-     `(("qtwebkit" ,qtwebkit)
-       ("qtbase" ,qtbase-5)
-       ("qtmultimedia" ,qtmultimedia)
-       ("phonon" ,phonon)
-       ("sqlite" ,sqlite)))
+     (list qtwebkit qtbase-5 qtmultimedia phonon sqlite))
     (home-page "https://quiterss.org/")
     (synopsis "RSS/Atom news feeds reader written on Qt/C++")
     (description "QuiteRSS is an RSS/Atom news feeds reader written on Qt/C++
@@ -600,13 +581,13 @@ that aims to be quite fast and comfortable to its user.")
          (add-after 'unpack 'patch-mpv-path
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "gfeeds/confManager.py"
-               (("mpv") (string-append (assoc-ref inputs "mpv") "/bin/mpv")))
+               (("mpv") (search-input-file inputs "/bin/mpv")))
              #t))
          (add-after 'install 'wrap-gfeeds
            (lambda* (#:key outputs #:allow-other-keys)
              (wrap-program (string-append
                             (assoc-ref outputs "out") "/bin/gfeeds")
-               `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH")))
+               `("PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH")))
                `("GI_TYPELIB_PATH" ":" prefix (,(getenv "GI_TYPELIB_PATH")))
                `("XDG_DATA_DIRS" ":" prefix (,(getenv "XDG_DATA_DIRS"))))
              #t)))))
@@ -616,26 +597,26 @@ that aims to be quite fast and comfortable to its user.")
        ("gtk+:bin" ,gtk+ "bin")
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("glib" ,glib)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gtk+" ,gtk+)
-       ("hicolor-icon-theme" ,hicolor-icon-theme)
-       ("libhandy" ,libhandy)
-       ("mpv" ,mpv)
-       ("python" ,python)
-       ("python-beautifulsoup4" ,python-beautifulsoup4)
-       ("python-dateutil" ,python-dateutil)
-       ("python-feedparser" ,python-feedparser)
-       ("python-html5lib" ,python-html5lib)
-       ("python-listparser" ,python-listparser)
-       ("python-lxml" ,python-lxml)
-       ("python-pillow" ,python-pillow)
-       ("python-pygments" ,python-pygments)
-       ("python-pytz" ,python-pytz)
-       ("python-readability" ,python-readability)
-       ("python-requests" ,python-requests)
-       ("webkitgtk" ,webkitgtk)
-       ("python-pygobject" ,python-pygobject)))
+     (list glib
+           gsettings-desktop-schemas
+           gtk+
+           hicolor-icon-theme
+           libhandy
+           mpv
+           python
+           python-beautifulsoup4
+           python-dateutil
+           python-feedparser
+           python-html5lib
+           python-listparser
+           python-lxml
+           python-pillow
+           python-pygments
+           python-pytz
+           python-readability
+           python-requests
+           webkitgtk
+           python-pygobject))
     (home-page "https://gfeeds.gabmus.org/")
     (synopsis "Easy-to-use GTK+ RSS/Atom feed reader")
     (description "Feeds is an RSS/Atom feed reader made with GTK+
diff --git a/gnu/packages/synergy.scm b/gnu/packages/synergy.scm
index b241d29f6a..df109e862b 100644
--- a/gnu/packages/synergy.scm
+++ b/gnu/packages/synergy.scm
@@ -73,7 +73,7 @@
                  (("/usr") out))
                #t))))))
     (native-inputs
-     `(("qttools" ,qttools)))           ; for Qt5LinguistTools
+     (list qttools))           ; for Qt5LinguistTools
     (inputs
      `(("avahi" ,avahi)
        ("python"  ,python-wrapper)
diff --git a/gnu/packages/task-management.scm b/gnu/packages/task-management.scm
index f7d9de0a52..c349081f01 100644
--- a/gnu/packages/task-management.scm
+++ b/gnu/packages/task-management.scm
@@ -35,6 +35,7 @@
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-xyz)
+  #:use-module (gnu packages time)
   #:use-module (gnu packages tls)
   #:use-module (guix download)
   #:use-module (guix git-download)
@@ -104,7 +105,7 @@ following the Japanese kanban (boarding) style.")
           (base32 "0c8zn7l0xq65wp07h7mxnb5ww56d1443l2vkjvx5sj6wpcchfn0s"))))
       (build-system python-build-system)
       (native-inputs
-       `(("python-cram" ,python-cram)))
+       (list python-cram))
       (synopsis "Command-line todo list manager")
       (description
        "@command{t} is a command-line todo list manager for people that want
@@ -115,18 +116,18 @@ to finish tasks, not organize them.")
 (define-public taskwarrior
   (package
     (name "taskwarrior")
-    (version "2.5.3")
+    (version "2.6.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
              "http://taskwarrior.org/download/task-" version ".tar.gz"))
        (sha256 (base32
-                "0fwnxshhlha21hlgg5z1ad01w13zm1hlmncs274y5n8i15gdfhvj"))))
+                "0kq8n2y4srax48yp7shz7ngac0q75dnvdbr9z9f9ldyqncr61ah0"))))
     (build-system cmake-build-system)
     (inputs
-     `(("gnutls" ,gnutls)
-       ("util-linux" ,util-linux "lib")))
+     (list gnutls
+           `(,util-linux "lib")))
     (arguments
      `(#:tests? #f ; No tests implemented.
        #:phases
@@ -143,7 +144,7 @@ and querying data, exposing task data in multiple formats to other tools.")
 (define-public dstask
   (package
     (name "dstask")
-    (version "0.24.1")
+    (version "0.25")
     (source
      (origin
        (method git-fetch)
@@ -152,7 +153,7 @@ and querying data, exposing task data in multiple formats to other tools.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "03rl2wh58xd6a80ji43c7ak3h0ysi3ddg570pn8ry24s7s45zsz2"))))
+        (base32 "1m83zc2zqvpcbjng92jvlnk0biw4krv12wjvjas66jbbk3sjghcy"))))
     (build-system go-build-system)
     (arguments
      `(#:import-path "github.com/naggie/dstask"
@@ -178,8 +179,7 @@ and querying data, exposing task data in multiple formats to other tools.")
                  (install-file "dstask" bindir)
                  (install-file "dstask-import" bindir)
                  (install-file ".dstask-bash-completions.sh" bash-completion)
-                 (install-file ".dstask-zsh-completions.sh" zsh-completion)))
-             #t)))))
+                 (install-file ".dstask-zsh-completions.sh" zsh-completion))))))))
     (synopsis "CLI-based TODO manager with git-based sync + markdown notes per task")
     (description "dstask is a personal task tracker that uses git for
 synchronization.  It offers a note command to attach a Markdown based note to
@@ -190,7 +190,7 @@ a task.")
 (define-public blanket
   (package
     (name "blanket")
-    (version "0.4.1")
+    (version "0.5.0")
     (source
      (origin
        (method git-fetch)
@@ -199,7 +199,7 @@ a task.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1rk9xxiflj8rf75q56s907xp3jzxc7r88njlmxg07gl6i35mmcmi"))))
+        (base32 "00i821zqfbigxmc709322r16z75qsw4rg23yhv35gza9sl65bzkg"))))
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
@@ -211,11 +211,11 @@ a task.")
              (let* ((out               (assoc-ref outputs "out"))
                     (gi-typelib-path   (getenv "GI_TYPELIB_PATH"))
                     (gst-plugin-path   (getenv "GST_PLUGIN_SYSTEM_PATH"))
-                    (python-path       (getenv "PYTHONPATH")))
+                    (python-path       (getenv "GUIX_PYTHONPATH")))
                (wrap-program (string-append out "/bin/blanket")
                  `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))
                  `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path))
-                 `("PYTHONPATH" ":" prefix (,python-path))))
+                 `("GUIX_PYTHONPATH" ":" prefix (,python-path))))
              #t)))))
     (native-inputs
      `(("desktop-file-utils" ,desktop-file-utils)
@@ -225,14 +225,15 @@ a task.")
        ("gtk+:bin" ,gtk+ "bin")
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("appstream-glib" ,appstream-glib)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gst-plugins-bad" ,gst-plugins-bad)
-       ("gst-plugins-good" ,gst-plugins-good) ;for ScaleTempo plugin
-       ("gtk+" ,gtk+)
-       ("libhandy" ,libhandy)
-       ("python-gst" ,python-gst)
-       ("python-pygobject" ,python-pygobject)))
+     (list appstream-glib
+           gsettings-desktop-schemas
+           gst-plugins-bad
+           gst-plugins-good ;for ScaleTempo plugin
+           gtk+
+           libhandy
+           python
+           python-gst
+           python-pygobject))
     (home-page "https://github.com/rafaelmardojai/blanket")
     (synopsis "Ambient sound and noise player")
     (description
@@ -240,3 +241,53 @@ a task.")
 to with the goal of improving your focus and enhancing your productivity.
 You can also use it to fall asleep in a noisy environment.")
     (license license:gpl3+)))
+
+(define-public todoman
+  (package
+    (name "todoman")
+    (version "4.1.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "todoman" version))
+        (sha256
+          (base32 "1j2h5cv8wnmw41fpz1ggsgi599qhk184cas9kgd92glj3m4alg6f"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-tests
+           (lambda _
+             (substitute* '("tests/test_cli.py" "tests/test_formatter.py")
+               (("tests\\.helpers") "helpers"))))
+         (replace 'check
+           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+             (when tests?
+               (invoke "pytest" "-vv" "tests" "-k"
+                       (string-append
+                        ;; Test expects wrong output string.
+                        "not test_bad_start_date "
+                        ;; Unknown failure
+                        "and not test_default_command_args"))))))))
+    (native-inputs
+      (list python-setuptools-scm
+            python-pytest
+            python-pytest-cov
+            python-freezegun))
+    (propagated-inputs
+      (list python-atomicwrites
+            python-click
+            python-click-log
+            python-dateutil
+            python-humanize
+            python-icalendar
+            python-parsedatetime
+            python-pyxdg
+            python-urwid))
+    (home-page "https://todoman.readthedocs.io/")
+    (synopsis "CalDav-based todo manager")
+    (description "Todoman is a simple, standards-based, cli todo (aka: task)
+manager.  Todos are stored into icalendar files, which means you can sync
+them via CalDAV using, for example, @code{vdirsyncer}.")
+    (license license:isc)))
+
diff --git a/gnu/packages/task-runners.scm b/gnu/packages/task-runners.scm
index 1c1fa69894..60a393267b 100644
--- a/gnu/packages/task-runners.scm
+++ b/gnu/packages/task-runners.scm
@@ -45,7 +45,7 @@
         (base32 "17n11lqhywq4z62w2rakdq80v7mxf83rgln19vj4v4nxpwd2hjjw"))))
     (build-system go-build-system)
     (propagated-inputs
-     `(("go-github-com-tekwizely-go-parsing" ,go-github-com-tekwizely-go-parsing)))
+     (list go-github-com-tekwizely-go-parsing))
     (arguments
      `(#:import-path "github.com/tekwizely/run"))
     (synopsis "Easily manage and invoke small scripts and wrappers")
diff --git a/gnu/packages/tbb.scm b/gnu/packages/tbb.scm
index 5f1438667d..e5d8394f5f 100644
--- a/gnu/packages/tbb.scm
+++ b/gnu/packages/tbb.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2015, 2016 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016 Nikita <nikita@n0.is>
 ;;; Copyright © 2019 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -23,12 +24,39 @@
   #:use-module (guix licenses)
   #:use-module (guix git-download)
   #:use-module (guix utils)
+  #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
   #:use-module (gnu packages))
 
 (define-public tbb
   (package
     (name "tbb")
+    (version "2021.4.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/oneapi-src/oneTBB")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0ih727g802j9lvwkqhw021bk1wb7xlvfgd0vl1i6jng4am1wv7vq"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:configure-flags '("-DTBB_STRICT=OFF"))) ;; Don't fail on warnings
+    (home-page "https://www.threadingbuildingblocks.org")
+    (synopsis "C++ library for parallel programming")
+    (description
+     "Threading Building Blocks (TBB) is a C++ runtime library that abstracts
+the low-level threading details necessary for optimal multi-core performance.
+It uses common C++ templates and coding style to eliminate tedious threading
+implementation work.  It provides parallel loop constructs, asynchronous
+tasks, synchronization primitives, atomic operations, and more.")
+    (license asl2.0)))
+
+(define-public tbb-2020
+  (package
+    (name "tbb")
     (version "2020.3")
     (source (origin
               (method git-fetch)
@@ -55,21 +83,20 @@
                     (("os_kernel_version:=.*")
                      "os_kernel_version:=5\n")
                     (("os_version:=.*")
-                     "os_version:=1\n"))
-                  #t))))
+                     "os_version:=1\n"))))))
     (outputs '("out" "doc"))
     (build-system gnu-build-system)
     (arguments
      `(#:test-target "test"
        #:make-flags (list (string-append "LDFLAGS=-Wl,-rpath="
-                                         (assoc-ref %outputs "out") "/lib"))
+                                         (assoc-ref %outputs "out") "/lib")
+                          "CFLAGS=-fuse-ld=gold")
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'fail-on-test-errors
            (lambda _
              (substitute* "Makefile"
-               (("-\\$\\(MAKE") "$(MAKE"))
-             #t))
+               (("-\\$\\(MAKE") "$(MAKE"))))
          (replace 'configure
            (lambda* (#:key outputs #:allow-other-keys)
              (substitute* "build/linux.gcc.inc"
@@ -94,8 +121,14 @@
                 (find-files "build/guix_release" "\\.so"))
                (copy-recursively "doc" doc)
                (copy-recursively "examples" examples)
-               (copy-recursively "include" include)
-               #t))))))
+               (copy-recursively "include" include)))))))
+    (native-inputs
+     ;; XXX: For some reason, since commit "gnu: binutils: Absorb
+     ;; binutils-next", the build of just this version of TBB crashes during
+     ;; tests.  Workaround it by linking the binaries with ld.gold.
+     (list (module-ref (resolve-interface
+                        '(gnu packages commencement))
+                       'ld-gold-wrapper)))
     (home-page "https://www.threadingbuildingblocks.org")
     (synopsis "C++ library for parallel programming")
     (description
diff --git a/gnu/packages/tcl.scm b/gnu/packages/tcl.scm
index 55a95792cb..810095282e 100644
--- a/gnu/packages/tcl.scm
+++ b/gnu/packages/tcl.scm
@@ -5,7 +5,7 @@
 ;;; Copyright © 2016, 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2017 Kei Kebreau <kkebreau@posteo.net>
-;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018, 2022 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;;
@@ -25,6 +25,7 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages tcl)
+  #:use-module (guix gexp)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
@@ -44,20 +45,19 @@
 (define-public tcl
   (package
     (name "tcl")
-    (version "8.6.10")
+    (version "8.6.11")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/tcl/Tcl/"
                                   version "/tcl" version "-src.tar.gz"))
               (sha256
                (base32
-                "1vc7imilx6kcb5319r7hnrp4jn5pqb41an3vr3azhgcfcgvdp5ji"))
-              (patches (search-patches "tcl-fix-cross-compilation.patch"))))
+                "0n4211j80mxr6ql0xx52rig8r885rcbminfpjdb2qrw6hmk8c14c"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (add-before 'configure 'pre-configure
-                    (lambda _ (chdir "unix") #t))
+                    (lambda _ (chdir "unix")))
                  (add-after 'install 'install-private-headers
                    (lambda* (#:key outputs #:allow-other-keys)
                      ;; Private headers are needed by Expect.
@@ -68,8 +68,7 @@
                        ;; Programs such as Ghostscript rely on it.
                        (with-directory-excursion bin
                          (symlink (car (find-files "." "tclsh"))
-                                  "tclsh"))
-                       #t))))
+                                  "tclsh"))))))
 
        ;; By default, man pages are put in PREFIX/man, but we want them in
        ;; PREFIX/share/man.  The 'validate-documentation-location' phase is
@@ -98,7 +97,7 @@
 (define-public itcl
   (package
     (name "itcl")
-    (version "4.2.0")
+    (version "4.2.2")
     (source
      (origin
        (method url-fetch)
@@ -107,37 +106,33 @@
              version "/itcl" version ".tar.gz"))
        (file-name (string-append "incrtcl-" version ".tar.gz"))
        (sha256
-        (base32 "0w28v0zaraxcq1s9pa6cihqqwqvvwfgz275lks7w4gl7hxjxmasw"))))
+        (base32 "0v0m1s3rlsbg7p366i6m5zcvnmixnch87jmczidjanqvmw76fk5c"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:configure-flags
-       (list
-        (string-append
-         "--exec-prefix=" (assoc-ref %outputs "out"))
-        (string-append
-         "--with-tclinclude=" (assoc-ref %build-inputs "tcl") "/include")
-        (string-append
-         "--with-tcl=" (assoc-ref %build-inputs "tcl") "/lib"))
-       #:test-target "test"
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'install 'cleanup-bin-and-lib
-           (lambda* (#:key outputs #:allow-other-keys)
-             ;; NOTE: (Sharlatan-20210213T204336+0000): libraries appearer in
-             ;; "out/lib/itcl{{version}}" and there are no binaries, some extra
-             ;; rename and remove spells are to be applied.
-             (let ((out (assoc-ref outputs "out")))
-               (rmdir
-                (string-append out "/bin"))
-               (rename-file
-                (string-append out "/lib/itcl" ,version) (string-append out "/libtmp"))
-               (rename-file
-                (string-append out "/libtmp") (string-append out "/lib")))
-             #t)))))
+     (list #:configure-flags
+           #~(list
+              (string-append "--exec-prefix=" #$output)
+              (string-append "--with-tclinclude="
+                             (assoc-ref %build-inputs "tcl") "/include")
+              (string-append "--with-tcl="
+                             (assoc-ref %build-inputs "tcl") "/lib"))
+           #:test-target "test"
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'install 'clean-up-bin-and-lib
+                 (lambda _
+                   ;; NOTE: (Sharlatan-20210213T204336+0000): libraries appearer in
+                   ;; "out/lib/itcl{{version}}" and there are no binaries, some extra
+                   ;; rename and remove spells are to be applied.
+                   (rmdir (string-append #$output "/bin"))
+                   (rename-file (string-append #$output "/lib/itcl" #$version)
+                                (string-append #$output "/libtmp"))
+                   (rename-file (string-append #$output "/libtmp")
+                                (string-append #$output "/lib")))))))
     (native-inputs
-     `(("tcl" ,tcl)))
+     (list tcl))
     (inputs
-     `(("tcllib" ,tcllib)))
+     (list tcllib))
     (home-page "http://incrtcl.sourceforge.net/")
     (synopsis "Object Oriented programming (OOP) extension for Tcl")
     (description
@@ -160,11 +155,11 @@ multiple inheritance and public and private classes and variables.")
         "0d1cp5hggjl93xwc8h1y6adbnrvpkk0ywkd00inz9ndxn21xm9s9"))))
     (build-system gnu-build-system)
     (inputs
-     `(;; TODO: Add these optional dependencies.
-       ;; ("libX11" ,libX11)
-       ;; ("xorgproto" ,xorgproto)
-       ;; ("tk" ,tk)
-       ("tcl" ,tcl)))
+     (list ;; TODO: Add these optional dependencies.
+           ;; ("libX11" ,libX11)
+           ;; ("xorgproto" ,xorgproto)
+           ;; ("tk" ,tk)
+           tcl))
     (arguments
      '(#:configure-flags
        (let ((out (assoc-ref %outputs "out"))
@@ -197,7 +192,7 @@ X11 GUIs.")
 (define-public tk
   (package
     (name "tk")
-    (version "8.6.10")
+    (version "8.6.11.1")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://sourceforge/tcl/Tcl/"
@@ -205,38 +200,31 @@ X11 GUIs.")
                                  version "-src.tar.gz"))
              (sha256
               (base32
-               "11p3ycqbr5116vpaxv6fl6md6gcav1ffspgr8wrlc2lxhn543pv3"))
+               "1gh9k7l76qg9l0sb78ijw9xz4xl1af47aqbdifb6mjpf3cbsnv00"))
              (patches (search-patches "tk-find-library.patch"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
-                  (add-before
-                   'configure 'pre-configure
-                   (lambda _
-                     (chdir "unix")
-                     #t))
-                  (add-after
-                   'install 'create-wish-symlink
-                   (lambda* (#:key outputs #:allow-other-keys)
-                     (let ((out (assoc-ref outputs "out")))
-                       (symlink (string-append out "/bin/wish"
-                                               ,(version-major+minor
+                  (add-before 'configure 'pre-configure
+                    (lambda _ (chdir "unix")))
+                  (add-after 'install 'create-wish-symlink
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      (let ((out (assoc-ref outputs "out")))
+                        (symlink (string-append out "/bin/wish"
+                                                ,(version-major+minor
                                                   (package-version tk)))
-                                (string-append out "/bin/wish")))
-                     #t))
-                  (add-after
-                   'install 'add-fontconfig-flag
-                   (lambda* (#:key inputs outputs #:allow-other-keys)
-                     ;; Add the missing -L flag for Fontconfig in 'tk.pc' and
-                     ;; 'tkConfig.sh'.
-                     (let ((out        (assoc-ref outputs "out"))
-                           (fontconfig (assoc-ref inputs "fontconfig")))
-                       (substitute* (find-files out
-                                                "^(tkConfig\\.sh|tk\\.pc)$")
-                         (("-lfontconfig")
-                          (string-append "-L" fontconfig
-                                         "/lib -lfontconfig")))
-                       #t))))
+                                 (string-append out "/bin/wish")))))
+                  (add-after 'install 'add-fontconfig-flag
+                    (lambda* (#:key inputs outputs #:allow-other-keys)
+                      ;; Add the missing -L flag for Fontconfig in 'tk.pc' and
+                      ;; 'tkConfig.sh'.
+                      (let ((out        (assoc-ref outputs "out"))
+                            (fontconfig (assoc-ref inputs "fontconfig")))
+                        (substitute* (find-files out
+                                                 "^(tkConfig\\.sh|tk\\.pc)$")
+                          (("-lfontconfig")
+                           (string-append "-L" fontconfig
+                                          "/lib -lfontconfig")))))))
 
        #:configure-flags
        (list (string-append "--with-tcl="
@@ -251,13 +239,12 @@ X11 GUIs.")
 
        ;; The tests require a running X server, so we just skip them.
        #:tests? #f))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (inputs `(("libxft" ,libxft)
               ("fontconfig" ,fontconfig)
               ("tcl" ,tcl)))
     ;; tk.h refers to X11 headers, hence the propagation.
-    (propagated-inputs `(("libx11" ,libx11)
-                         ("libxext" ,libxext)))
+    (propagated-inputs (list libx11 libxext))
 
     (home-page "https://www.tcl.tk/")
     (synopsis "Graphical user interface toolkit for Tcl")
@@ -269,7 +256,7 @@ interfaces (GUIs) in the Tcl language.")
 (define-public perl-tk
   (package
     (name "perl-tk")
-    (version "804.034")
+    (version "804.036")
     (source (origin
              (method url-fetch)
              (uri (string-append
@@ -277,9 +264,9 @@ interfaces (GUIs) in the Tcl language.")
                    version ".tar.gz"))
              (sha256
               (base32
-               "1qiz55dmw7hm1wgpjdzf2jffwcj0hisr3kf80qi8lli3qx2b39py"))))
+               "0pha40m97fzafjnq8vwkbi5sml6xv8jki6qi60rxrzmxlrqp5aij"))))
     (build-system perl-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (inputs `(("libx11" ,libx11)
               ("libpng" ,libpng)
               ("libjpeg" ,libjpeg-turbo)))
@@ -314,7 +301,7 @@ interfaces (GUIs) in the Tcl language.")
                 "173abxaazdmf210v651708ab6h7xhskvd52krxk6ifam337qgzh1"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("tcl" ,tcl)))
+     (list tcl))
     (native-search-paths
      (list (search-path-specification
             (variable "TCLLIBPATH")
@@ -339,10 +326,9 @@ utility functions and modules all written in high-level Tcl.")
                 "03y0bzgwbh7nnyqkh8n00bbkq2fyblq39s3bdb6mawna0bbn0wwg"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("tcl" ,tcl)))
+     (list tcl))
     (propagated-inputs
-     `(("tcllib" ,tcllib)
-       ("tk" ,tk))) ; for "wish"
+     (list tcllib tk)) ; for "wish"
     (native-search-paths
      (list (search-path-specification
             (variable "TCLLIBPATH")
@@ -385,11 +371,9 @@ modules for Tk, all written in high-level Tcl.  Examples of provided widgets:
               (patches (search-patches "tclxml-3.2-install.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("tcl" ,tcl)
-       ("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)))
+     (list tcl libxml2 libxslt))
     (propagated-inputs
-     `(("tcllib" ,tcllib))) ; uri
+     (list tcllib)) ; uri
     (native-search-paths
      (list (search-path-specification
             (variable "TCLLIBPATH")
@@ -438,8 +422,7 @@ callback is evaluated.")
                                               (assoc-ref %outputs "out")
                                               "/lib"))))
     (inputs
-     `(("tcl" ,tcl)
-       ("tk" ,tk)))
+     (list tcl tk))
     (home-page "http://tclx.sourceforge.net/")
     (synopsis "System programming extensions for Tcl")
     (description
@@ -468,8 +451,7 @@ debugging tools.")
     (arguments
      `(#:import-path "github.com/nsf/gothic"))
     (propagated-inputs
-     `(("tk" ,tk)
-       ("tcl" ,tcl)))
+     (list tk tcl))
     (home-page "https://github.com/nsf/gothic")
     (synopsis "Tcl/Tk Go bindings")
     (description "Gothic contains Go bindings for Tcl/Tk.  The package contains
diff --git a/gnu/packages/telegram.scm b/gnu/packages/telegram.scm
index a1822b3892..5b036f4767 100644
--- a/gnu/packages/telegram.scm
+++ b/gnu/packages/telegram.scm
@@ -31,12 +31,12 @@
   #:use-module (gnu packages digest)
   #:use-module (gnu packages fcitx)
   #:use-module (gnu packages fcitx5)
-  #:use-module (gnu packages gcc)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages gnupg)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages image)
+  #:use-module (gnu packages jemalloc)
   #:use-module (gnu packages kde-frameworks)
   #:use-module (gnu packages language)
   #:use-module (gnu packages libevent)
@@ -73,8 +73,8 @@
   #:use-module (guix build-system qt))
 
 (define-public webrtc-for-telegram-desktop
-  (let ((commit "a19877363082da634a3c851a4698376504d2eaee")
-        (revision "83"))
+  (let ((commit "91d836dc84a16584c6ac52b36c04c0de504d9c34")
+        (revision "166"))
     (hidden-package
      (package
        (name "webrtc-for-telegram-desktop")
@@ -90,7 +90,7 @@
           (file-name
            (git-file-name name version))
           (sha256
-           (base32 "0961zm1m1mc2kh54dx5ax95q8sw13impvpjvg9jv12bmfkgm17wr"))
+           (base32 "0plwdp6xgxi27hif5j7kpq425cidxyxbbga3z2f64dsninwy5p1x"))
           (modules '((guix build utils)
                      (ice-9 ftw)
                      (srfi srfi-1)))
@@ -130,8 +130,7 @@
                   (copy-recursively libyuv-from libyuv-to))
                 #t)))))
        (native-inputs
-        `(("gcc" ,gcc-9) ; keep in line with telegram-desktop
-          ("perl" ,perl)
+        `(("perl" ,perl)
           ("pkg-config" ,pkg-config)
           ("python" ,python-wrapper)
           ("yasm" ,yasm)))
@@ -139,6 +138,7 @@
         `(("alsa" ,alsa-lib)
           ("ffmpeg" ,ffmpeg)
           ("libjpeg" ,libjpeg-turbo)
+          ("glib" ,glib)
           ("libvpx"
            ,(origin
               (method git-fetch)
@@ -161,8 +161,13 @@
                (git-file-name "libyuv-for-webrtc-for-telegram-desktop" version))
               (sha256
                (base32 "01knnk4h247rq536097n9n3s3brxlbby3nv3ppdgsqfda3k159ll"))))
+          ("libxcomposite" ,libxcomposite)
+          ("libxdamage" ,libxdamage)
+          ("libxrender" ,libxrender)
+          ("libxrandr" ,libxrandr)
           ("openssl" ,openssl)
           ("opus" ,opus)
+          ("pipewire" ,pipewire)
           ("protobuf" ,protobuf)
           ("pulseaudio" ,pulseaudio)
           ("x11" ,libx11)
@@ -260,15 +265,12 @@ Telegram project, for its use in telegram desktop client.")
                    "libcrypto opus alsa libpulse"))
                 #t)))))
        (native-inputs
-        `(("autoconf" ,autoconf)
-          ("automake" ,automake)
-          ("libtool" ,libtool)
-          ("pkg-config" ,pkg-config)))))))
+        (list autoconf automake libtool pkg-config))))))
 
 (define-public telegram-desktop
   (package
     (name "telegram-desktop")
-    (version "2.5.9")
+    (version "2.9.3")
     (source
      (origin
        (method git-fetch)
@@ -280,7 +282,7 @@ Telegram project, for its use in telegram desktop client.")
        (file-name
         (git-file-name name version))
        (sha256
-        (base32 "1lqs06scqvzg37a2py8jk7nnlvk42jjifcpnhdd5rgd5biw70nyx"))
+        (base32 "0dzf1y3xhqvizg29bd1kya48cjbkq073d2x10ynwcmmx396l4nd8"))
        (modules '((guix build utils)
                   (ice-9 ftw)
                   (srfi srfi-1)))
@@ -315,6 +317,8 @@ Telegram project, for its use in telegram desktop client.")
         ;;   Raghav Gururajan <rg@raghavgururajan.name>
         "-DTDESKTOP_API_ID=2791056"
         "-DTDESKTOP_API_HASH=582d6d0b44f7a2de949e99271fd8b3f2"
+        ;; Disable WebkitGTK support as it fails to link
+        "-DDESKTOP_APP_DISABLE_WEBKITGTK=ON"
         ;; Use bundled fonts as fallback.
         "-DDESKTOP_APP_USE_PACKAGED_FONTS=OFF")
        #:phases
@@ -346,7 +350,9 @@ Telegram project, for its use in telegram desktop client.")
                  ,(assoc-ref inputs "lib-storage-source"))
                 ("Telegram/lib_tl" ,(assoc-ref inputs "lib-tl-source"))
                 ("Telegram/lib_ui" ,(assoc-ref inputs "lib-ui-source"))
+                ("Telegram/lib_waylandshells" ,(assoc-ref inputs "lib-waylandshells-source"))
                 ("Telegram/lib_webrtc" ,(assoc-ref inputs "lib-webrtc-source"))
+                ("Telegram/lib_webview" ,(assoc-ref inputs "lib-webview-source"))
                 ("Telegram/ThirdParty/tgcalls"
                  ,(assoc-ref inputs "tgcalls-source"))))
              #t))
@@ -366,14 +372,13 @@ Telegram project, for its use in telegram desktop client.")
            (uri
             (git-reference
              (url "https://github.com/desktop-app/cmake_helpers.git")
-             (commit "695fabda6830b58bdc02d09db70531d5dececcd0")))
+             (commit "4d44d822e01b3b5fbec3ce824e01f56aa35d7f72")))
            (file-name
             (git-file-name "cmake-helpers-for-telegram-desktop" version))
            (sha256
-            (base32 "1j3ppgfmihcjl22w5jk8jhwif10i9wbycq5zqnssn6pnhnj7di5i"))))
+            (base32 "0h6cjiqy014h2mz90h1z5a7plb3ihbnds4bja8994ybr1dy3m7m5"))))
        ("cmake-shared" ,cmake-shared)
        ("extra-cmake-modules" ,extra-cmake-modules)
-       ("gcc" ,gcc-9)
        ("glib:bin" ,glib "bin")
        ("gobject-introspection" ,gobject-introspection)
        ("gtk+:bin" ,gtk+ "bin")
@@ -390,20 +395,22 @@ Telegram project, for its use in telegram desktop client.")
            (uri
             (git-reference
              (url "https://github.com/desktop-app/codegen.git")
-             (commit "127968de8129e8ccfa6ac50721c70415a5a087c3")))
+             (commit "248614b49cd7d5aff69d75a737f2e35b79fbb119")))
            (file-name
             (git-file-name "codegen" version))
            (sha256
-            (base32 "036hzjrsk134ky62192nra43rsln5kh5gz20q1920s922661zky2"))))
+            (base32 "00f7g2z6xmkbkrmi3q27hscjl44mg66wf9q0mz3rhy3jaa6cfdrk"))))
        ("expected" ,libexpected)
        ("fcitx-qt5" ,fcitx-qt5)
        ("fcitx5-qt" ,fcitx5-qt)
        ("ffmpeg" ,ffmpeg)
        ("glib" ,glib)
+       ("glibmm" ,glibmm-2.64)
        ("gtk+" ,gtk+)
        ("hime" ,hime)
        ("hunspell" ,hunspell)
        ("iconv" ,libiconv)
+       ("jemalloc" ,jemalloc)
        ("kwayland" ,kwayland)
        ("lib-base-source"
         ,(origin
@@ -411,44 +418,44 @@ Telegram project, for its use in telegram desktop client.")
            (uri
             (git-reference
              (url "https://github.com/desktop-app/lib_base.git")
-             (commit "f1e4168081428fa451d2f50eee7b1c448268c43a")))
+             (commit "a23c05c44e4f01dc4428f4d75d4db98c59d313a6")))
            (file-name
             (git-file-name "lib-base-for-telegram-desktop" version))
            (sha256
-            (base32 "0piqp7llwi7sfy4c15g0p8ihr90rz1qps6q5fkl1iasrf5ysw8qc"))))
+            (base32 "0vh5zgxwalmbnvz8lzlnba87ch8vnpmcz6nvf56w09f3nlxvvq78"))))
        ("lib-crl-source"
         ,(origin
            (method git-fetch)
            (uri
             (git-reference
              (url "https://github.com/desktop-app/lib_crl.git")
-             (commit "16150bf71d79382738114b913f137ec1a1a7630c")))
+             (commit "3ccf2ed5095442e5874bba8852cb7dc4efeae29f")))
            (file-name
             (git-file-name "lib-crl-for-telegram-desktop" version))
            (sha256
-            (base32 "0qhagdr26aqb9w7wnchcmk1j7ln28x3wbkkkm06b8h0mybksbj7q"))))
+            (base32 "11my7q54m4lvvlgma6pbdyjxi1cv1adk1gph2j50mh18sqlm8myz"))))
        ("lib-lottie-source"
         ,(origin
            (method git-fetch)
            (uri
             (git-reference
              (url "https://github.com/desktop-app/lib_lottie.git")
-             (commit "fb40f379d82ffa1fc7506e9a8dddcf48847715ae")))
+             (commit "0770df009db7928df1d0cad0900dc5110106d229")))
            (file-name
             (git-file-name "lib-lottie-for-telegram-desktop" version))
            (sha256
-            (base32 "1vq0mqxcrrv7akcqk9cl4mm61zw6dcfmy8adl0pcp49kynm64saw"))))
+            (base32 "1gj56ymlbk5dnk82jw674808m511lv9dky8891a5wm4gp3pph5jb"))))
        ("lib-qr-source"
         ,(origin
            (method git-fetch)
            (uri
             (git-reference
              (url "https://github.com/desktop-app/lib_qr.git")
-             (commit "92ce41a690a463eb462089a4eb1e51e019308018")))
+             (commit "2b08c71c6edcfc3e31f7d7f518cc963493b6e189")))
            (file-name
             (git-file-name "lib-qr-for-telegram-desktop" version))
            (sha256
-            (base32 "182939nv7xs9b3bgah3gl5y9hx5r59mabd2jw3z6717vc96qi2pj"))))
+            (base32 "05hrkmwgrczyjv87r507i2r7m1zr6k2i43mq3my0s6j4szr1rjq0"))))
        ("lib-rlottie-source"
         ,(origin
            (method git-fetch)
@@ -466,66 +473,88 @@ Telegram project, for its use in telegram desktop client.")
            (uri
             (git-reference
              (url "https://github.com/desktop-app/lib_rpl.git")
-             (commit "e1b96399d9031c4ef0354631e6bb375029d29d9f")))
+             (commit "df721be3fa14a27dfc230d2e3c42bb1a7c9d0617")))
            (file-name
             (git-file-name "lib-rpl-for-telegram-desktop" version))
            (sha256
-            (base32 "1wvqazljd2kq1fxlj250jhjrig529499bym9p81dx33kh1l9dgss"))))
+            (base32 "15fnv3ssn7rn5d0j52gggdvyqc2wm464678dj7v2x9h8lka2jjxn"))))
        ("lib-spellcheck-source"
         ,(origin
            (method git-fetch)
            (uri
             (git-reference
              (url "https://github.com/desktop-app/lib_spellcheck.git")
-             (commit "1b540b38ed78e9a3cba93e9ba4ce4525ab692277")))
+             (commit "68c9b788958904aea7de79f986a0f82ec8c5b094")))
            (file-name
             (git-file-name "lib-spellcheck-for-telegram-desktop" version))
            (sha256
-            (base32 "0a7042h5zrdvgs7v153ral2dh1zj84di5yjcmgcry5k4s1im9di7"))))
+            (base32 "0d8s4wwk6fxf536mhzq2vb9qw3j0m8nqia7ylvvpsbc4kh09dadn"))))
        ("lib-storage-source"
         ,(origin
            (method git-fetch)
            (uri
             (git-reference
              (url "https://github.com/desktop-app/lib_storage.git")
-             (commit "cbe51722b73cfa9ff27bd59294b08aa5ee33c936")))
+             (commit "403df6c4a29562bd417c92d410e49819f5a48cc1")))
            (file-name
             (git-file-name "lib-storage-for-telegram-desktop" version))
            (sha256
-            (base32 "045l5xsyagyz17gbhmmvl2miss4nb92p0dmza7yfs9pkg9gs0f87"))))
+            (base32 "1zxvzfrxbj4d395fzyb5pm9wn3n8jyimxx88cyqjcdd46sx4h7r5"))))
        ("lib-tl-source"
         ,(origin
            (method git-fetch)
            (uri
             (git-reference
              (url "https://github.com/desktop-app/lib_tl.git")
-             (commit "404c83d77e5edb8a39f8e9f56a6340960fe5070e")))
+             (commit "45faed44e7f4d11fec79b7a70e4a35dc91ef3fdb")))
            (file-name
             (git-file-name "lib-tl-for-telegram-desktop" version))
            (sha256
-            (base32 "1k34nkvvcjqw5q81n1qmklid60cvzjk4lmn9qjimk437m6wbii7f"))))
+            (base32 "0h43xvzklda02494d466jp52hl8c1kmav9f12dyld10dpf1w6c7m"))))
        ("lib-ui-source"
         ,(origin
            (method git-fetch)
            (uri
             (git-reference
              (url "https://github.com/desktop-app/lib_ui.git")
-             (commit "e14bc4681d69c1b538b8c5af51501077ae5a8a86")))
+             (commit "1b590f9e16eb9571a039f072d6fea66c607e419f")))
            (file-name
             (git-file-name "lib-ui-for-telegram-desktop" version))
            (sha256
-            (base32 "04b1x4bswk3bxqrwpv5g7w4frkprrwf0px6aibh6z4drinv08wsv"))))
+            (base32 "0ighyhfp29h9h8c7vr70pnhcv2xnsr9ln084pssn8hb5z4pmb62f"))))
+       ("lib-waylandshells-source"
+        ,(origin
+           (method git-fetch)
+           (uri
+            (git-reference
+             (url "https://github.com/desktop-app/lib_waylandshells.git")
+             (commit "59b0ee55a68976d27f1bf7cec0e11d5939e185e7")))
+           (file-name
+            (git-file-name "lib-waylandshells-for-telegram-desktop" version))
+           (sha256
+            (base32 "0l2xrpc5mvvdlsj333pmkgfvn9wi1ijfdaaz8skfnw9icw52faaf"))))
        ("lib-webrtc-source"
         ,(origin
            (method git-fetch)
            (uri
             (git-reference
              (url "https://github.com/desktop-app/lib_webrtc.git")
-             (commit "60d5c43daf882a6c03944a3e6198b5f35b654a0e")))
+             (commit "ef49f953f12b112008a094a719f40939aaf39db4")))
            (file-name
             (git-file-name "lib-webrtc-for-telegram-desktop" version))
            (sha256
-            (base32 "0mxmbw8i37axllg9h976p6np2gcfyci6xwwl9hc9mhs49vwwsw5s"))))
+            (base32 "15k4xs3462p3ddp5cn9im3nvdiaijmxir8wxsf5yrj70ghy26ibw"))))
+       ("lib-webview-source"
+        ,(origin
+           (method git-fetch)
+           (uri
+            (git-reference
+             (url "https://github.com/desktop-app/lib_webview.git")
+             (commit "e06427c624515485774e2e2181d4afeb05ad5a67")))
+           (file-name
+            (git-file-name "lib-webview-for-telegram-desktop" version))
+           (sha256
+            (base32 "148z7xzfscynwwwqssdsd97npax6yn8zrd64xw8qzbwff2g2r7k4"))))
        ("libdbusmenu-qt" ,libdbusmenu-qt)
        ("libjpeg" ,libjpeg-turbo)
        ("libtgvoip" ,libtgvoip-for-telegram-desktop)
@@ -539,22 +568,24 @@ Telegram project, for its use in telegram desktop client.")
        ("pulseaudio" ,pulseaudio)
        ("qrcodegen" ,qrcodegen-cpp)
        ("qt" ,qtbase-5)
+       ("qtsvg" ,qtsvg)
        ("qt5ct" ,qt5ct)
        ("qtimageformats" ,qtimageformats)
        ("qtwayland" ,qtwayland)
        ("range-v3" ,range-v3)
        ("rlottie" ,rlottie-for-telegram-desktop)
+       ("rnnoise" ,xiph-rnnoise)
        ("tgcalls-source"
         ,(origin
            (method git-fetch)
            (uri
             (git-reference
              (url "https://github.com/TelegramMessenger/tgcalls.git")
-             (commit "71addf5b41cb6bb6844f75e977edae0020938930")))
+             (commit "81e97fa52e25b7775b62ce07bb653533d81e91b3")))
            (file-name
             (git-file-name "tgcalls-for-telegram-desktop" version))
            (sha256
-            (base32 "1zrjxf03n3ad8b95gwjarmq4gj5i5cwhlg93qcjv2232kksh29iy"))))
+            (base32 "0fvad87hyxli83xn19mgf8jjrrh6y6iaig14pckpbkg33vf4wqkj"))))
        ("webrtc" ,webrtc-for-telegram-desktop)
        ("x11" ,libx11)
        ("xcb" ,libxcb)
@@ -562,7 +593,7 @@ Telegram project, for its use in telegram desktop client.")
        ("xxhash" ,xxhash)
        ("zlib" ,zlib)))
     (propagated-inputs
-     `(("dconf" ,dconf)))
+     (list dconf))
     (synopsis "Telegram Desktop")
     (description "Telegram desktop is the official desktop version of the
 Telegram instant messenger.")
@@ -682,15 +713,9 @@ formerly a part of telegram-cli, but now being maintained separately.")
                         ("libs" "lib/tgl"))
                       args))))))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("libtool" ,libtool)
-         ("pkg-config" ,pkg-config)))
+       (list autoconf automake libtool pkg-config))
       (inputs
-       `(("libevent" ,libevent)
-         ("libgcrypt" ,libgcrypt)
-         ("tl-parser" ,tl-parser)
-         ("zlib" ,zlib)))
+       (list libevent libgcrypt tl-parser zlib))
       (synopsis "Telegram Library")
       (description "TGL is the telegram library for telegram-cli.")
       (home-page "https://github.com/vysheng/tgl")
@@ -766,23 +791,20 @@ formerly a part of telegram-cli, but now being maintained separately.")
                          #:exclude ("tg-server.pub")))
                       args))))))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("libtool" ,libtool)
-         ("pkg-config" ,pkg-config)))
+       (list autoconf automake libtool pkg-config))
       (inputs
-       `(("jansson" ,jansson)
-         ("libconfig" ,libconfig)
-         ("libevent" ,libevent)
-         ("libgcrypt" ,libgcrypt)
-         ("lua" ,lua)
-         ("openssl" ,openssl)
-         ("perl" ,perl)
-         ("python" ,python)
-         ("readline" ,readline)
-         ("tgl" ,tgl)
-         ("tl-parser" ,tl-parser)
-         ("zlib" ,zlib)))
+       (list jansson
+             libconfig
+             libevent
+             libgcrypt
+             lua
+             openssl
+             perl
+             python
+             readline
+             tgl
+             tl-parser
+             zlib))
       (synopsis "Telegram Messenger CLI")
       (description "TG is the command-line interface for Telegram Messenger.")
       (home-page "https://github.com/vysheng/tg")
diff --git a/gnu/packages/telephony.scm b/gnu/packages/telephony.scm
index 48bbe12920..b4b2585935 100644
--- a/gnu/packages/telephony.scm
+++ b/gnu/packages/telephony.scm
@@ -20,6 +20,8 @@
 ;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
 ;;; Copyright © 2021 LibreMiami <packaging-guix@libremiami.org>
+;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
+;;; Copyright © 2021 Demis Balbach <db@minikn.xyz>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -87,6 +89,7 @@
   #:use-module (gnu packages bison)
   #:use-module (gnu packages flex)
   #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix utils)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
@@ -94,6 +97,36 @@
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system qt))
 
+(define-public phonesim
+  (package
+    (name "phonesim")
+    (version "1.21")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://git.kernel.org/pub/scm/network/ofono/phonesim")
+             (commit "a7c844d45b047b2dae5b0877816c346fce4c47b9")))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0rc1c2vr03dmi1dr3skj57v77ga9c22g29xs1qiphqms4isby9cq"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags
+       (list "--enable-maintainer-mode"
+             "CC=" ,(cc-for-target))))
+    (native-inputs
+     (list automake autoconf pkg-config))
+    (inputs
+     (list qtbase-5 qtdeclarative))
+    (synopsis "Phone Simulator for modem testing")
+    (description
+     "Phonesim is a modem emulator that oFono uses for development and
+testing.  This allows oFono to be used by any host without requiring special
+GSM (or other) hardware.")
+    (home-page "https://git.kernel.org/pub/scm/network/ofono/phonesim")
+    (license license:gpl2+)))
+
 (define-public libilbc
   (package
     (name "libilbc")
@@ -115,7 +148,7 @@
     (arguments
      `(#:tests? #f))                    ; No target
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "Libre iLBC codec")
     (description "LibiLBC is a packaging friendly copy of the iLBC codec from
 the WebRTC project.  It provides a base for distribution packages and can be
@@ -256,7 +289,7 @@ reimplementation.")
             (sha256 (base32
                      "1mv080rvrhyxyhgqiqr8r9jdqhg3xhfawjvfj5zgj47h59nggjba"))))
    (build-system gnu-build-system)
-   (inputs `(("gnutls" ,gnutls)))
+   (inputs (list gnutls))
    (synopsis "Common C++ framework for threaded applications")
    (description "GNU uCommon C++ is meant as a very light-weight C++ library
 to facilitate using C++ design patterns even for very deeply embedded
@@ -277,9 +310,8 @@ support.")
             (sha256 (base32
                      "17ili8l7zqbbkzr1rcy4hlnazkf50mds41wg6n7bfdsx3c7cldgh"))))
    (build-system gnu-build-system)
-   (inputs `(("ucommon" ,ucommon)
-             ("libgcrypt" ,libgcrypt)))
-   (native-inputs `(("pkg-config" ,pkg-config)))
+   (inputs (list ucommon libgcrypt))
+   (native-inputs (list pkg-config))
    (synopsis "Implementation of RTP (real-time transport protocol)")
    (description  "GNU ccRTP is an implementation of RTP, the real-time transport
 protocol from the IETF.  It is suitable both for high capacity servers and
@@ -310,10 +342,9 @@ packet-manipulation library.")
     (arguments
      `(#:tests? #f))                    ; No target
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("ccrtp" ,ccrtp)
-       ("ucommon" ,ucommon)))
+     (list ccrtp ucommon))
     (synopsis "C++ Implementation of ZRTP protocol")
     (description  "GNU ZRTP C++ provides a library that adds ZRTP support to the
 GNU ccRTP stack and serves as library for other RTP stacks
@@ -355,7 +386,7 @@ to initiate and control SIP sessions.")
             (sha256 (base32
                      "17cna8kpc8nk1si419vgr6r42k2lda0rdk50vlxrw8rzg0xp2xrw"))))
    (build-system gnu-build-system)
-   (inputs `(("osip" ,osip)))
+   (inputs (list osip))
    (synopsis "Sip abstraction library")
    (description "EXosip is a library that hides the complexity of using the
 SIP protocol for multimedia session establishment.  This protocol is mainly to
@@ -397,9 +428,7 @@ multiplayer games.")
                   ,(string-append "EXOSIP2_CFLAGS=-I"
                                   (assoc-ref %build-inputs "exosip")
                                   "/include"))))
-   (inputs `(("ucommon" ,ucommon)
-             ("exosip" ,exosip)
-             ("osip" ,osip)))
+   (inputs (list ucommon exosip osip))
    (synopsis "Secure peer-to-peer VoIP server for the SIP protocol")
    (description "GNU SIP Witch is a peer-to-peer Voice-over-IP server that
 uses the SIP protocol.  Calls can be made from behind NAT firewalls and
@@ -413,7 +442,7 @@ internet.")
 (define-public libsrtp
   (package
     (name "libsrtp")
-    (version "2.3.0")
+    (version "2.4.2")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -422,10 +451,10 @@ internet.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1f7i3jdh1wzdv7zjlz7gs3xw5jqig9zw8z9awsqqcp54f94xdpvd"))))
+                "1gswpjm4jacfxmgglbf8hxi3yzsag4drk4q943p0wkmv21zj8l78"))))
     (native-inputs
-     `(("psmisc" ,psmisc)               ;some tests require 'killall'
-       ("procps" ,procps)))
+     (list psmisc ;some tests require 'killall'
+           procps))
     (build-system gnu-build-system)
     (arguments
      '(#:test-target "runtest"
@@ -467,9 +496,7 @@ supporting cryptographic kernel.")
            "0d269474kk1933c55hx4azw3sak5ycfrxkw6ida0sb2cm00kfich"))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("libtool" ,libtool)))
+       (list autoconf automake libtool))
       (home-page "https://gitlab.savoirfairelinux.com/sflphone/libiax2")
       (synopsis "Inter-Asterisk-Protocol library")
       (description "LibIAX2 implements the Inter-Asterisk-Protocol for relaying
@@ -498,11 +525,7 @@ Voice-over-IP (VoIP) communications.")
     (build-system gnu-build-system)
     (arguments '(#:tests? #f))  ; no "check" target
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("gmp" ,gmp)
-       ("libogg" ,libogg)
-       ("ncurses" ,ncurses)
-       ("opus" ,opus)))
+     (list alsa-lib gmp libogg ncurses opus))
     (synopsis "Simple VoIP program to create conferences from the terminal")
     (description
      "Seren is a simple VoIP program based on the Opus codec that allows you
@@ -556,8 +579,8 @@ address of one of the participants.")
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (invoke "qmake" "main.pro" "QMAKE_LRELEASE=lrelease"
                      (string-append "MUMBLE_PYTHON="
-                                    (string-append (assoc-ref inputs "python")
-                                                   "/bin/python3"))
+                                    (search-input-file inputs
+                                                       "/bin/python3"))
                      (string-append "CONFIG+="
                                     (string-join
                                      ;; Options used are listed in the same order
@@ -634,24 +657,22 @@ address of one of the participants.")
                          (find-files "release/plugins" "\\.so$"))
                #t))))))
     (inputs
-     `(("avahi" ,avahi)
-       ("boost" ,boost)
-       ("libsndfile" ,libsndfile/fixed)
-       ("libxi" ,libxi)
-       ("mesa" ,mesa) ; avoid bundled
-       ("openssl" ,openssl)
-       ("opus" ,opus) ; avoid bundled
-       ("protobuf" ,protobuf)
-       ("pulseaudio" ,pulseaudio)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("speech-dispatcher" ,speech-dispatcher)
-       ("speex" ,speex) ; avoid bundled
-       ("speexdsp" ,speexdsp))) ; avoid bundled
+     (list avahi
+           boost
+           libsndfile
+           libxi
+           mesa ; avoid bundled
+           openssl
+           opus ; avoid bundled
+           protobuf
+           pulseaudio
+           qtbase-5
+           qtsvg
+           speech-dispatcher
+           speex ; avoid bundled
+           speexdsp)) ; avoid bundled
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python" ,python)
-       ("qttools" ,qttools)))
+     (list pkg-config python qttools))
     (synopsis "Low-latency, high quality voice chat software")
     (description
      "Mumble is an low-latency, high quality voice chat
@@ -693,25 +714,23 @@ Mumble consists of two applications for separate usage:
         "-DWITH_G729=On"                ; For G729 Codec Support
         "-DWITH_SPEEX=On")))            ; For Speex Codec Support
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)
-       ("qttools" ,qttools)))
+     (list bison flex qttools))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("bcg729" ,bcg729)
-       ("zrtpcpp" ,zrtpcpp)
-       ("ccrtp" ,ccrtp)
-       ("file" ,file)
-       ("libilbc" ,libilbc)
-       ("libsndfile" ,libsndfile)
-       ("libxml2" ,libxml2)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtquickcontrols" ,qtquickcontrols)
-       ("readline" ,readline)
-       ("speex" ,speex)
-       ("speexdsp" ,speexdsp)
-       ("ucommon" ,ucommon)))
+     (list alsa-lib
+           bcg729
+           zrtpcpp
+           ccrtp
+           file
+           libilbc
+           libsndfile
+           libxml2
+           qtbase-5
+           qtdeclarative
+           qtquickcontrols
+           readline
+           speex
+           speexdsp
+           ucommon))
     (synopsis "Softphone for voice over IP and instant messaging")
     (description "Twinkle is a softphone for your voice over IP and instant
 messaging communcations using the SIP protocol.  You can use it for direct
@@ -723,7 +742,7 @@ your calls and messages.")
 (define-public pjproject
   (package
     (name "pjproject")
-    (version "2.11")
+    (version "2.11.1")
     (source
      (origin
        (method git-fetch)
@@ -733,7 +752,7 @@ your calls and messages.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1kn9g1x1vmh4130ghph8mldz5m89gsjs4vpdzlzm98m3808gk5an"))
+         "04s4bgr2d22ym2ajjk6q507hyqss1p59yp8avyyyf5f8032nbaws"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -742,12 +761,12 @@ your calls and messages.")
            (substitute* "aconfigure.ac"
              (("third_party/build/os-auto.mak") ""))
            (substitute* "Makefile"
-             (("third_party/build") ""))))))
+             (("third_party/build") ""))))
+       (patches (search-patches "pjproject-install-libpjsua2.patch"))))
     (build-system gnu-build-system)
     (outputs '("out" "debug" "static"))
     (arguments
-     `(#:tests? #t
-       #:test-target "selftest"
+     `(#:test-target "selftest"
        #:configure-flags
        (list "--enable-shared"
              "--with-external-speex"
@@ -776,11 +795,6 @@ your calls and messages.")
                             "/lib"))
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'make-source-files-writable
-           ;; Make all the files writable to prevent the following error:
-           ;; "autom4te: cannot open aconfigure: Permission denied".
-           (lambda _
-             (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
@@ -839,20 +853,17 @@ your calls and messages.")
                (("pjnath-test pjmedia-test pjsip-test pjsua-test")
                 "pjmedia-test pjsip-test")))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
-     `(("bcg729" ,bcg729)
-       ("gnutls" ,gnutls)
-       ("gsm" ,gsm)
-       ("libsamplerate" ,libsamplerate)
-       ("libsrtp" ,libsrtp)
-       ("opus" ,opus)
-       ("portaudio" ,portaudio)
-       ("speex" ,speex)
-       ("speexdsp" ,speexdsp)))
+     (list bcg729
+           gnutls
+           gsm
+           libsamplerate
+           libsrtp
+           opus
+           portaudio
+           speex
+           speexdsp))
     (home-page "https://www.pjsip.org")
     (synopsis "Session Initiation Protocol (SIP) stack")
     (description "PJProject provides an implementation of the Session
@@ -881,10 +892,7 @@ Initiation Protocol (SIP) and a multimedia framework.")
          "122kn3jx6v0kkldlzlpzvlwqxgp6pmzxsjhrhcxw12bx9c08sar5"))))
     (build-system gnu-build-system)
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("openssl" ,openssl)
-       ("opus" ,opus)
-       ("pulseaudio" ,pulseaudio)))
+     (list alsa-lib openssl opus pulseaudio))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -894,14 +902,11 @@ Initiation Protocol (SIP) and a multimedia framework.")
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "os/linux/AudioPulse.cpp"
                (("libpulse\\.so")
-                (string-append (assoc-ref inputs "pulseaudio")
-                              "/lib/libpulse.so")))
+                (search-input-file inputs "/lib/libpulse.so")))
              (substitute* '("os/linux/AudioInputALSA.cpp"
                             "os/linux/AudioOutputALSA.cpp")
                (("libasound\\.so")
-                (string-append (assoc-ref inputs "alsa-lib")
-                               "/lib/libasound.so")))
-             #t)))))
+                (search-input-file inputs "/lib/libasound.so"))))))))
     (synopsis "VoIP library for Telegram clients")
     (description "A collection of libraries and header files for implementing
 telephony functionality into custom Telegram clients.")
diff --git a/gnu/packages/terminals.scm b/gnu/packages/terminals.scm
index 85bca58bca..88923d5058 100644
--- a/gnu/packages/terminals.scm
+++ b/gnu/packages/terminals.scm
@@ -13,7 +13,7 @@
 ;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2018 Gabriel Hondet <gabrielhondet@gmail.com>
 ;;; Copyright © 2019 Rutger Helling <rhelling@mykolab.com>
-;;; Copyright © 2018, 2019 Eric Bavier <bavier@member.fsf.org>
+;;; Copyright © 2018, 2019, 2021 Eric Bavier <bavier@posteo.net>
 ;;; Copyright © 2019 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2019, 2021 Pierre Langlois <pierre.langlois@gmx.com>
 ;;; Copyright © 2019, 2020 Brett Gilio <brettg@gnu.org>
@@ -23,11 +23,13 @@
 ;;; Copyright © 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2020 Leo Famulari <leo@famulari.name>
+;;; Copyright @ 2020 luhux <luhux@outlook.com>
 ;;; Copyright © 2021 Ekaitz Zarraga <ekaitz@elenq.tech>
 ;;; Copyright © 2021 Raphaël Mélotte <raphael.melotte@mind.be>
 ;;; Copyright © 2021 ikasero <ahmed@ikasero.com>
 ;;; Copyright © 2021 Brice Waegeneire <brice@waegenei.re>
 ;;; Copyright © 2021 Solene Rapenne <solene@perso.pw>
+;;; Copyright © 2021 Petr Hodina <phodina@protonmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -59,7 +61,7 @@
   #:use-module (guix utils)
   #:use-module (gnu packages)
   #:use-module (gnu packages autotools)
-  #:use-module (gnu packages build-tools)   ;for meson-0.55
+  #:use-module (gnu packages base)
   #:use-module (gnu packages check)
   #:use-module (gnu packages cmake)
   #:use-module (gnu packages compression)
@@ -101,6 +103,40 @@
   #:use-module (gnu packages xorg)
   #:use-module (srfi srfi-26))
 
+(define-public libptytty
+  (package
+    (name "libptytty")
+    (version "2.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/yusiwen/libptytty")
+             (commit "b9694ea18e0dbd78213f55233a430325c13ad63e")))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1g8by1m6ya4r47p137mw4ddml40js0zh6mdb9n6ib49ayngv8ak3"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:tests? #f))                    ; no test suite
+    (home-page "https://github.com/yusiwen/libptytty")
+    (synopsis
+     "Portable, secure PTY/TTY and @file{utmp}/@file{wtmp}/@file{lastlog} handling")
+    (description
+     "Libptytty is a small C/C++ library to manage pseudo-ttys in a uniform way,
+created out of frustration over the many differences of PTY/TTY handling in
+different operating systems.
+
+In addition to mere PTY/TTY management, it supports updating the session
+database at @file{utmp}, and @file{wtmp}/@file{lastlog} for login shells.
+
+It also supports @code{fork}ing after start-up and dropping privileges in the
+calling process.  This reduces the potential attack surface: if the calling
+process were to be compromised by the user starting the program, there would be
+less to gain, as only the helper process is running with privileges (e.g.,
+@code{setuid}/@code{setgid}).")
+    (license license:gpl2+)))
+
 (define-public tilda
   (package
     (name "tilda")
@@ -128,8 +164,7 @@
        ("gettext" ,gettext-minimal)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("libconfuse" ,libconfuse)
-       ("vte" ,vte)))
+     (list libconfuse vte))
     (synopsis "GTK+-based drop-down terminal")
     (description "Tilda is a terminal emulator similar to normal terminals like
 gnome-terminal (GNOME) or Konsole (KDE), with the difference that it drops down
@@ -179,7 +214,7 @@ configurable through a graphical wizard.")
        ("xdg-utils" ,xdg-utils)
        ("ncurses" ,ncurses)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
 
     ;; FIXME: This should only be located in 'ncurses'.  Nonetheless it is
     ;; provided for usability reasons.  See <https://bugs.gnu.org/22138>.
@@ -189,9 +224,12 @@ configurable through a graphical wizard.")
               (files '("share/terminfo")))))
     (home-page "https://github.com/thestinger/termite/")
     (synopsis "Keyboard-centric, VTE-based terminal")
-    (description "Termite is a minimal terminal emulator designed for use with
-tiling window managers.  It is a modal application, similar to Vim, with an
-insert mode and command mode where keybindings have different functions.")
+    (description "Termite is a minimal terminal emulator.  It is no longer
+maintained as the author considers it obsoleted by Alacritty.
+
+It was designed for use with tiling window managers.  It is a modal
+application, similar to Vim, with an insert mode and command mode where
+keybindings have different functions.")
 
     ;; Files under util/ are under the Expat license; the rest is LGPLv2+.
     (license license:lgpl2.0+)))
@@ -199,7 +237,7 @@ insert mode and command mode where keybindings have different functions.")
 (define-public asciinema
   (package
     (name "asciinema")
-    (version "2.0.2")
+    (version "2.1.0")
     (source
      (origin
        (method git-fetch)
@@ -208,25 +246,16 @@ insert mode and command mode where keybindings have different functions.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32
-         "1a2pysxnp6icyd08mgf66xr6f6j0irnfxdpf3fmzcz31ix7l9kc4"))))
+        (base32 "1alcz018jrrpasrmgs8nw775a6pf62xq2xgs54c4mb396prdqy4x"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-before 'build 'patch-exec-paths
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let ((ncurses (assoc-ref inputs "ncurses")))
-               (substitute* "asciinema/term.py"
-                 (("'tput'")
-                  (string-append "'" ncurses "/bin/tput'"))))
-             #t))
          (replace 'check
            (lambda _ (invoke "nosetests" "-v"))))))
-    (inputs `(("ncurses" ,ncurses)))
     (native-inputs
      ;; For tests.
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (home-page "https://asciinema.org")
     (synopsis "Terminal session recorder")
     (description
@@ -261,9 +290,8 @@ text-based approach to terminal recording.")
       (arguments
        `(#:configure-flags '("-DBUILD_TESTING=ON")))
       (native-inputs
-       `(("check" ,check)
-         ("libxkbcommon" ,libxkbcommon) ; for xkbcommon-keysyms.h
-         ("pkg-config" ,pkg-config)))
+       (list check libxkbcommon ; for xkbcommon-keysyms.h
+             pkg-config))
       (synopsis "Xterm state machine library")
       (description "TSM is a state machine for DEC VT100-VT520 compatible
 terminal emulators.  It tries to support all common standards while keeping
@@ -317,13 +345,13 @@ compatibility to existing emulators like xterm, gnome-terminal, konsole, etc.")
                           (("sd_booted\\(\\)")
                            "1")))))))
       (native-inputs
-       `(("pkg-config" ,pkg-config)
-         ("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("libtool" ,libtool)
-         ("libxslt" ,libxslt)                       ;to build the man page
-         ("libxml2" ,libxml2)                       ;for XML_CATALOG_FILES
-         ("docbook-xsl" ,docbook-xsl)))
+       (list pkg-config
+             autoconf
+             automake
+             libtool
+             libxslt ;to build the man page
+             libxml2 ;for XML_CATALOG_FILES
+             docbook-xsl))
       (inputs
        `(("libdrm" ,libdrm)
          ("libtsm" ,libtsm)
@@ -381,10 +409,8 @@ multi-seat support, a replacement for @command{mingetty}, and more.")
              (substitute* "t/40ti-override.c"
                (("vt750") "vt100")))))
        #:test-target "test"))
-    (inputs `(("ncurses" ,ncurses)))
-    (native-inputs `(("libtool" ,libtool)
-                     ("perl-test-harness" ,perl-test-harness)
-                     ("pkg-config" ,pkg-config)))
+    (inputs (list ncurses))
+    (native-inputs (list libtool perl-test-harness pkg-config))
     (synopsis "Keyboard entry processing library for terminal-based programs")
     (description
      "Libtermkey handles all the necessary logic to recognise special keys, UTF-8
@@ -433,6 +459,64 @@ character sets and encodings from around the world.  It can display double-width
 Vietnamese, and bi-directional scripts like Arabic and Hebrew.")
     (license license:bsd-3)))
 
+(define-public mtm
+  (package
+    (name "mtm")
+    (version "1.2.1")
+    (source
+     (origin
+       (uri (git-reference
+             (url "https://github.com/deadpixi/mtm")
+             (commit version)))
+       (method git-fetch)
+       (sha256
+        (base32 "0gibrvah059z37jvn1qs4b6kvd4ivk2mfihmcpgx1vz6yg70zghv"))
+       (file-name (git-file-name name version))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f                      ; no tests
+       #:make-flags
+       (list (string-append "CC=" ,(cc-for-target))
+             (string-append "DESTDIR=" (assoc-ref %outputs "out")))
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)            ;no configure script
+         (add-before 'build 'fix-headers
+           (lambda _
+             (substitute* "config.def.h"
+               (("ncursesw/curses.h") "curses.h"))))
+         (replace 'install
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out")))
+               ;; install binary
+               (mkdir-p (string-append out "bin/"))
+               (install-file "mtm" (string-append out "/bin"))
+               ;; install manpage
+               (mkdir-p (string-append out "share/man/man1"))
+               (install-file "mtm.1" (string-append out "/share/man/man1"))
+               ;; install terminfo
+               (mkdir-p (string-append out "share/terminfo"))
+               (invoke (string-append (assoc-ref inputs "ncurses") "/bin/tic")
+                       "-x" "-s" "-o"
+                       (string-append
+                        out "/share/terminfo")
+                       "mtm.ti")))))))
+    (inputs
+     (list ncurses))
+    ;; FIXME: This should only be located in 'ncurses'.  Nonetheless it is
+    ;; provided for usability reasons.  See <https://bugs.gnu.org/22138>.
+    (native-search-paths
+     (list (search-path-specification
+            (variable "TERMINFO_DIRS")
+            (files '("share/terminfo")))))
+    (home-page "https://github.com/deadpixi/mtm")
+    (synopsis "Micro Terminal Multiplexer")
+    (description
+     "This package provides multiplexer for the terminal focused on simplicity,
+compatibility, size and stability.")
+    (license (list license:gpl3+
+                   license:bsd-3))))    ;vtparser.c
+
 (define-public picocom
   (package
     (name "picocom")
@@ -473,7 +557,7 @@ to all types of devices that provide serial consoles.")
 (define-public beep
   (package
     (name "beep")
-    (version "1.4.9")
+    (version "1.4.10")
     (source
      (origin
        (method git-fetch)
@@ -486,16 +570,24 @@ to all types of devices that provide serial consoles.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0jmvqk6g5n0wzj9znw42njxq3mzw1769f4db99b83927hf4aidi4"))))
+        (base32 "05c2gxfqc12rgp88c65q7f5ha9gzh222vdh0qpdq1zmyhqj43pq1"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:tests? #f                      ; no tests
-       #:make-flags
+     `(#:make-flags
        (list (string-append "prefix=" (assoc-ref %outputs "out"))
              (string-append "pkgdocdir=$(docdir)/" ,name "-" ,version))
        #:phases
        (modify-phases %standard-phases
-         (delete 'configure))))         ; no configure script
+         (delete 'configure)            ; no configure script
+         (add-before 'check 'patch-tests
+           (lambda _
+             (substitute* "GNUmakefile"
+               (("/bin/bash")
+                (which "bash")))
+             (substitute* (find-files "tests" "\\.expected")
+               ;; The build environment lacks /dev/{console,tty*}.
+               ((": Permission denied")
+                ": No such file or directory")))))))
     (synopsis "Linux command-line utility to control the PC speaker")
     (description "beep allows the user to control the PC speaker with precision,
 allowing different sounds to indicate different events.  While it can be run
@@ -531,8 +623,7 @@ has no notion of what's interesting, but it's very good at that notifying part."
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
-     `(("libtool" ,libtool)
-       ("perl" ,perl)))
+     (list libtool perl))
     (home-page "https://github.com/mauke/unibilium")
     (synopsis "Terminfo parsing library")
     (description "Unibilium is a basic C terminfo library.  It doesn't depend
@@ -562,8 +653,7 @@ should be thread-safe.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
-     `(("libtool" ,libtool)
-       ("perl" ,perl)))
+     (list libtool perl))
     (home-page "http://www.leonerd.org.uk/code/libvterm/")
     (synopsis "VT220/xterm/ECMA-48 terminal emulator library")
     (description "Libvterm is an abstract C99 library which implements a VT220
@@ -594,6 +684,7 @@ embedded kernel situations.")
                            (srfi srfi-26)
                            (ice-9 rdelim)
                            (ice-9 regex)))
+                (patches (search-patches "cool-retro-term-wctype.patch"))
                 (snippet
                  '(let* ((fonts '(;"1971-ibm-3278"     ; BSD 3-clause
                                   "1977-apple2"        ; Non-Free
@@ -690,10 +781,7 @@ embedded kernel situations.")
                     #t))))
       (build-system gnu-build-system)
       (inputs
-       `(("qtbase" ,qtbase-5)
-         ("qtdeclarative" ,qtdeclarative)
-         ("qtgraphicaleffects" ,qtgraphicaleffects)
-         ("qtquickcontrols" ,qtquickcontrols)))
+       (list qtbase-5 qtdeclarative qtgraphicaleffects qtquickcontrols))
       (arguments
        `(#:phases
          (modify-phases %standard-phases
@@ -748,7 +836,7 @@ eye-candy, customizable, and reasonably lightweight.")
 (define-public foot
   (package
     (name "foot")
-    (version "1.6.3")
+    (version "1.10.3")
     (home-page "https://codeberg.org/dnkl/foot")
     (source (origin
               (method git-fetch)
@@ -756,24 +844,19 @@ eye-candy, customizable, and reasonably lightweight.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0rm7w29wf3gipf69qf7s42qw8857z74gsigrpz9g6vvd1x58f03m"))))
+                "13v6xqaw3xn1x84dn4gnkiimcsllb19mrbvcdj2fnm8klnrys3gs"))))
     (build-system meson-build-system)
     (arguments
-     `(#:meson ,meson-0.55
-       ;; Using a "release" build is recommended both for performance, and
+     `(;; Using a "release" build is recommended both for performance, and
        ;; also to address a GCC 10 issue when doing PGO builds.
        #:build-type "release"
        ;; Enable LTO as recommended by INSTALL.md.
        #:configure-flags '("-Db_lto=true")))
     (native-inputs
-     `(("ncurses" ,ncurses)             ;for 'tic'
-       ("pkg-config" ,pkg-config)
-       ("scdoc" ,scdoc)
-       ("wayland-protocols" ,wayland-protocols)))
+     (list ncurses ;for 'tic'
+           pkg-config scdoc wayland-protocols))
     (inputs
-     `(("fcft" ,fcft)
-       ("libxkbcommon" ,libxkbcommon)
-       ("wayland" ,wayland)))
+     (list fcft libxkbcommon wayland))
     (synopsis "Wayland-native terminal emulator")
     (description
      "@command{foot} is a terminal emulator for systems using the Wayland
@@ -785,7 +868,7 @@ a server/client mode.")
 (define-public sakura
   (package
     (name "sakura")
-    (version "3.8.3")
+    (version "3.8.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://launchpad.net/sakura/trunk/"
@@ -793,7 +876,7 @@ a server/client mode.")
                                   ".tar.bz2"))
               (sha256
                (base32
-                "1r2kpvxx21r407s07m5p5x0dam6x863991nmcv6k5ap873fxqh2h"))))
+                "1d8n32xnj21q2xx13xs2r9cfjaq31mxiyhx6d57x9cwnhwb11xn3"))))
     (build-system cmake-build-system)
     (arguments
      '(#:tests? #f))                    ; no check phase
@@ -802,10 +885,9 @@ a server/client mode.")
        ("perl" ,perl)                   ; for pod2man
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("libxft" ,libxft)
-       ("vte" ,vte)))
+     (list libxft vte))
     (home-page "https://launchpad.net/sakura")
-    (synopsis "A simple but powerful libvte-based terminal emulator")
+    (synopsis "Simple but powerful libvte-based terminal emulator")
     (description "@code{Sakura} is a terminal emulator based on GTK+ and VTE.
 It's a terminal emulator with few dependencies, so you don't need a full GNOME
 desktop installed to have a decent terminal emulator.")
@@ -830,8 +912,7 @@ desktop installed to have a decent terminal emulator.")
       (arguments
        '(#:import-path "github.com/nsf/termbox-go"))
       (propagated-inputs
-       `(("go-github.com-mattn-go-runewidth"
-          ,go-github.com-mattn-go-runewidth)))
+       (list go-github.com-mattn-go-runewidth))
       (synopsis "@code{termbox} provides a minimal API for text-based user
 interfaces")
       (description
@@ -858,13 +939,13 @@ programmer to write text-based user interfaces.")
     (arguments
      `(#:import-path "github.com/junegunn/fzf"))
     (inputs
-     `(("go-github.com-mattn-go-runewidth" ,go-github.com-mattn-go-runewidth)
-       ("go-github-com-mattn-go-shellwords" ,go-github-com-mattn-go-shellwords)
-       ("go-github-com-mattn-go-isatty" ,go-github-com-mattn-go-isatty)
-       ("go-github-com-gdamore-tcell" ,go-github-com-gdamore-tcell)
-       ("go-github-com-saracen-walker" ,go-github-com-saracen-walker)
-       ("go-golang.org-x-sync-errgroup" ,go-golang.org-x-sync-errgroup)
-       ("go-golang-org-x-crypto" ,go-golang-org-x-crypto)))
+     (list go-github.com-mattn-go-runewidth
+           go-github-com-mattn-go-shellwords
+           go-github-com-mattn-go-isatty
+           go-github-com-gdamore-tcell
+           go-github-com-saracen-walker
+           go-golang.org-x-sync-errgroup
+           go-golang-org-x-crypto))
     (home-page "https://github.com/junegunn/fzf")
     (synopsis "Command-line fuzzy-finder")
     (description "This package provides an interactive command-line filter
@@ -889,29 +970,34 @@ usable with any list--including files, command history, processes and more.")
                                 (string-append out "/bin"))))))
           (add-after 'copy-binaries 'wrap-programs
             (lambda* (#:key outputs inputs #:allow-other-keys)
-              (let ((out (assoc-ref outputs "out"))
-                    (ncurses (assoc-ref inputs "ncurses")))
-                (wrap-program (string-append out "/bin/fzf-tmux")
+              (let* ((out (assoc-ref outputs "out"))
+                     (bin (string-append out "/bin"))
+                     (findutils (assoc-ref inputs "findutils"))
+                     (ncurses (assoc-ref inputs "ncurses")))
+                (wrap-program (string-append bin "/fzf")
+                  `("PATH" ":" prefix (,(string-append findutils "/bin"))))
+                (wrap-program (string-append bin "/fzf-tmux")
                   `("PATH" ":" prefix (,(string-append ncurses "/bin")))))))
           (add-after 'install 'install-completions
             (lambda* (#:key outputs #:allow-other-keys)
               (let* ((out (assoc-ref outputs "out"))
                      (bash-completion (string-append out "/etc/bash_completion.d"))
-                     (fish-completion
-                       (string-append out "/share/fish/vendor_completions.d"))
+                     (fish-functions
+                       (string-append out "/share/fish/vendor_functions.d"))
                      (zsh-completion (string-append out "/share/zsh/site-functions")))
                 (with-directory-excursion "src/github.com/junegunn/fzf"
                   (mkdir-p bash-completion)
                   (copy-file "shell/completion.bash"
                              (string-append bash-completion "/fzf"))
-                  (mkdir-p fish-completion)
+                  (mkdir-p fish-functions)
                   (copy-file "shell/key-bindings.fish"
-                             (string-append fish-completion "/fzf.fish"))
+                             (string-append fish-functions "/fzf_key_bindings.fish"))
                   (mkdir-p zsh-completion)
                   (copy-file "shell/completion.zsh"
                              (string-append zsh-completion "/_fzf"))))))))))
     (inputs
      `(,@(package-inputs go-github-com-junegunn-fzf)
+       ("findutils" ,findutils)
        ("ncurses" ,ncurses)))))
 
 (define-public go-github.com-howeyc-gopass
@@ -933,8 +1019,7 @@ usable with any list--including files, command history, processes and more.")
       (arguments
        '(#:import-path "github.com/howeyc/gopass"))
       (propagated-inputs
-       `(("go-golang-org-x-crypto"
-          ,go-golang-org-x-crypto)))
+       (list go-golang-org-x-crypto))
       (synopsis "Retrieve password from a terminal or piped input in Go")
       (description
        "@code{gopass} is a Go package for retrieving a password from user
@@ -964,10 +1049,9 @@ terminal or piped input.")
              (delete-file "tests/test_input_output.py")
              #t)))))
     (propagated-inputs
-     `(("python-wcwidth" ,python-wcwidth)))
+     (list python-wcwidth))
     (native-inputs
-     `(("python-pytest-runner" ,python-pytest-runner)
-       ("python-pytest" ,python-pytest)))
+     (list python-pytest-runner python-pytest))
     (home-page "https://pyte.readthedocs.io/")
     (synopsis "Simple VTXXX-compatible terminal emulator")
     (description "@code{pyte} is an in-memory VTxxx-compatible terminal
@@ -999,8 +1083,7 @@ of VT100 terminal.")
      ;; FIXME: Test suite is unable to detect TTY conditions.
      `(#:tests? #f))
     (native-inputs
-     `(("python-nose" ,python-nose)
-       ("python-six" ,python-six)))
+     (list python-nose python-six))
     (home-page "https://github.com/erikrose/blessings")
     (synopsis "Python module to manage terminal color, styling, and
 positioning")
@@ -1018,14 +1101,14 @@ than a terminal.")
 (define-public python-curtsies
   (package
     (name "python-curtsies")
-    (version "0.3.4")
+    (version "0.3.5")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "curtsies" version))
        (sha256
         (base32
-         "019bpf5wmng4f6ic2ykg893ypfihpfvzi6dhblcagfwbincl79ac"))))
+         "1g8dwafx4vx06isjkn28r3cwb0hw1bv67lgygaz34yk66lrzz1x5"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -1034,12 +1117,9 @@ than a terminal.")
            (lambda _
              (invoke "nosetests" "-v"))))))
     (propagated-inputs
-     `(("python-blessings" ,python-blessings)
-       ("python-wcwidth" ,python-wcwidth)))
+     (list python-blessings python-cwcwidth))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pyte" ,python-pyte)
-       ("python-nose" ,python-nose)))
+     (list python-mock python-pyte python-nose))
     (home-page "https://github.com/bpython/curtsies")
     (synopsis "Library for curses-like terminal interaction with colored
 strings")
@@ -1064,14 +1144,9 @@ per-line fullscreen terminal rendering, and keyboard input event reporting.")
          "0x5c31yq7ansmiy20a0qf59wagba9v3pq97mlkxrqxn4n1gcc6vi"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libevent" ,libevent)
-       ("libssh" ,libssh)
-       ("msgpack" ,msgpack)
-       ("ncurses" ,ncurses)))
+     (list libevent libssh msgpack ncurses))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config))
     (home-page "https://tmate.io/")
     (synopsis "Terminal sharing application")
     (description "tmate is a terminal sharing application that allows you to
@@ -1218,9 +1293,7 @@ comfortably in a pager or editor.
                (copy-recursively tests "external/googletest"))
              #t)))))
     (inputs
-     `(("gflags" ,gflags)
-       ("libsodium" ,libsodium)
-       ("protobuf" ,protobuf)))
+     (list gflags libsodium protobuf))
     (native-inputs
      `(("googletest" ,(package-source googletest))))
     (home-page "https://mistertea.github.io/EternalTerminal/")
@@ -1234,9 +1307,6 @@ while also supporting native scrolling and @command{tmux} control mode
 (@code{tmux -CC}).")
     (license license:asl2.0)))
 
-(define-public et
-  (deprecated-package "et" eternalterminal))
-
 (define-public wterm
   (package
     (name "wterm")
@@ -1253,7 +1323,7 @@ while also supporting native scrolling and @command{tmux} control mode
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("fontconfig" ,fontconfig)
        ("freetype" ,freetype)
@@ -1360,6 +1430,10 @@ basic input/output.")
         ("rust-xdg" ,rust-xdg-2))
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'use-new-nix
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (substitute* "alacritty_terminal/Cargo.toml"
+               (("0.22.0") "^0.23.0"))))
          (add-after 'configure 'add-absolute-library-references
            (lambda* (#:key inputs cargo-inputs vendor-dir #:allow-other-keys)
              (let* ((glutin-name ,(package-name rust-glutin-0.26))
@@ -1402,7 +1476,7 @@ basic input/output.")
                     (bin   (string-append out "/bin"))
                     (share (string-append out "/share"))
                     (icons (string-append share "/icons/hicolor/scalable/apps"))
-                    (tic   (string-append (assoc-ref inputs "ncurses") "/bin/tic"))
+                    (tic   (search-input-file inputs "/bin/tic"))
                     (man   (string-append share "/man/man1"))
                     (alacritty-bin "target/release/alacritty"))
                ;; Install the executable.
diff --git a/gnu/packages/tex.scm b/gnu/packages/tex.scm
index bc077b954f..89f60f89d5 100644
--- a/gnu/packages/tex.scm
+++ b/gnu/packages/tex.scm
@@ -6,9 +6,9 @@
 ;;; Copyright © 2016, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Federico Beffa <beffa@fbengineering.ch>
 ;;; Copyright © 2016 Thomas Danckaert <post@thomasdanckaert.be>
-;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021, 2022 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
-;;; Copyright © 2017, 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2017, 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Danny Milosavljevic <dannym+a@scratchpost.org>
 ;;; Copyright © 2018, 2020 Arun Isaac <arunisaac@systemreboot.net>
@@ -19,6 +19,7 @@
 ;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
 ;;; Copyright © 2021 Ivan Gankevich <i.gankevich@spbu.ru>
 ;;; Copyright © 2021 Julien Lepiller <julien@lepiller.eu>
+;;; Copyright © 2021 Thiago Jung Bauermann <bauermann@kolabnow.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -37,8 +38,10 @@
 
 (define-module (gnu packages tex)
   #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix gexp)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix build-system copy)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system perl)
   #:use-module (guix build-system python)
@@ -46,6 +49,7 @@
   #:use-module (guix build-system trivial)
   #:use-module (guix build-system texlive)
   #:use-module (guix utils)
+  #:use-module (guix deprecation)
   #:use-module (guix git-download)
   #:use-module (guix svn-download)
   #:use-module (gnu packages)
@@ -122,7 +126,7 @@ copied to their outputs; otherwise the TEXLIVE-BUILD-SYSTEM is used."
                           (string-append doc "/doc")))
                        '())
                  (mkdir-p out)
-                 (copy-recursively (assoc-ref inputs "source") out)
+                 (copy-recursively "." out)
                  ,@(if with-documentation?
                        '((delete-file-recursively (string-append out "/doc")))
                        '())
@@ -151,7 +155,7 @@ copied to their outputs; otherwise the TEXLIVE-BUILD-SYSTEM is used."
                               "-checkout"))
     (sha256
      (base32
-      "0lk7shx768sxvgr85y8bnmmnj8x4bbkgpxrz3z8jp8avi33prw83"))))
+      "04xzf5gr3ylyh3ls09imrx4mwq3qp1k97r9njzlan6hlff875rx2"))))
 
 (define (texlive-hyphen-package name code locations hash)
   "Return a TeX Live hyphenation package with the given NAME, using source
@@ -224,111 +228,99 @@ files from LOCATIONS with expected checksum HASH.  CODE is not currently in use.
 (define texlive-extra-src
   (origin
     (method url-fetch)
-    (uri "ftp://tug.org/historic/systems/texlive/2019/texlive-20190410-extra.tar.xz")
+    (uri "ftp://tug.org/historic/systems/texlive/2021/texlive-20210325-extra.tar.xz")
     (sha256 (base32
-             "13ncf2an4nlqv18lki6y2p6pcsgs1i54zqkhfwprax5j53bk70j8"))))
+             "171kg1n9zapw3d2g47d8l0cywa99bl9m54xkqvp9625ks22z78s6"))))
 
 (define texlive-texmf-src
   (origin
     (method url-fetch)
-    (uri "ftp://tug.org/historic/systems/texlive/2019/texlive-20190410-texmf.tar.xz")
+    (uri "ftp://tug.org/historic/systems/texlive/2021/texlive-20210325-texmf.tar.xz")
     (sha256 (base32
-             "00n4qh9fj8v9zzy3y488hpfq1g3dnnh72y4yjsaikfcqpi59gv62"))))
+             "070gczcm1h9rx29w2f02xd3nhd84c4k28nfmm8qgp69yq8vd84pz"))))
 
 (define-public texlive-bin
   (package
-   (name "texlive-bin")
-   (version "20190410")
-   (source
-    (origin
-      (method url-fetch)
-      (uri (string-append "ftp://tug.org/historic/systems/texlive/2019/"
-                          "texlive-" version "-source.tar.xz"))
-      (sha256
-       (base32
-        "1dfps39q6bdr1zsbp9p74mvalmy3bycihv19sb9c6kg30kprz8nj"))
-      (patches
-       (let ((arch-patch
-              (lambda (name revision hash)
-                (origin
-                  (method url-fetch)
-                  (uri (string-append "https://raw.githubusercontent.com"
-                                      "/archlinux/svntogit-packages/" revision
-                                      "/repos/extra-x86_64/" name))
-                  (file-name (string-append "texlive-bin-" name))
-                  (sha256 (base32 hash)))))
-             (arch-revision "49d7fe25e5ea63f136ebc20270c1d8fc9b00041c"))
-         (list
-          (arch-patch "pdftex-poppler0.76.patch" arch-revision
-                      "03vc88dz37mjjyaspzv0fik2fp5gp8qv82114869akd1dhszbaax")
-          (search-patch "texlive-bin-poppler-0.83.patch")
-          (arch-patch "texlive-poppler-0.84.patch" arch-revision
-                      "1ia6cr99krk4ipx4hdi2qdb98bh2h26mckjlpxdzrjnfhlnghksa")
-          (search-patch "texlive-bin-poppler-0.86.patch"))))
-      (modules '((guix build utils)
-                 (ice-9 ftw)))
-      (snippet
-       '(begin
-          (with-directory-excursion "libs"
-            (let ((preserved-directories '("." ".." "lua53" "luajit")))
-              ;; Delete bundled software, except Lua which cannot easily be
-              ;; used as an external dependency.
-              (for-each delete-file-recursively
-                        (scandir "."
-                                 (lambda (file)
-                                   (and (not (member file preserved-directories))
-                                        (eq? 'directory (stat:type (stat file)))))))))
-          ;; TODO: Unbundle stuff in texk/dvisvgm/dvisvgm-src/libs too.
-          #t))))
-   (build-system gnu-build-system)
-   (inputs
-    `(("texlive-extra-src" ,texlive-extra-src)
-      ("texlive-scripts"
-       ,(origin
-          (method svn-fetch)
-          (uri (svn-reference
-                (url (string-append "svn://www.tug.org/texlive/tags/"
-                                    %texlive-tag "/Master/texmf-dist/"
-                                    "/scripts/texlive"))
-                (revision %texlive-revision)))
-          (file-name (string-append "texlive-scripts-"
-                                    (number->string %texlive-revision)
-                                    "-checkout"))
-          (sha256
-           (base32
-            "1cj04svl8bpfwjr4gqfcc04rmklz3aggrxvgj7q5bxrh7c7g18xh"))))
-      ("cairo" ,cairo)
-      ("fontconfig" ,fontconfig)
-      ("fontforge" ,fontforge)
-      ("freetype" ,freetype)
-      ("gd" ,gd)
-      ("gmp" ,gmp)
-      ("ghostscript" ,ghostscript)
-      ("graphite2" ,graphite2)
-      ("harfbuzz" ,harfbuzz)
-      ("icu4c" ,icu4c)
-      ("libpaper" ,libpaper)
-      ("libpng" ,libpng)
-      ("libxaw" ,libxaw)
-      ("libxt" ,libxt)
-      ("mpfr" ,mpfr)
-      ("perl" ,perl)
-      ("pixman" ,pixman)
-      ("poppler" ,poppler)
-      ("potrace" ,potrace)
-      ("python" ,python-2) ; incompatible with Python 3 (print syntax)
-      ("ruby" ,ruby)
-      ("tcsh" ,tcsh)
-      ("teckit" ,teckit)
-      ("zlib" ,zlib)
-      ("zziplib" ,zziplib)))
-   (native-inputs
-    `(("pkg-config" ,pkg-config)))
-   (arguments
-    `(#:out-of-source? #t
-      #:configure-flags
+    (name "texlive-bin")
+    (version "20210325")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "ftp://tug.org/historic/systems/texlive/2021/"
+                           "texlive-" version "-source.tar.xz"))
+       (sha256
+        (base32
+         "0jsq1p66l46k2qq0gbqmx25flj2nprsz4wrd1ybn286p11kdkvvs"))
+       (modules '((guix build utils)
+                  (ice-9 ftw)))
+       (snippet
+        ;; TODO: Unbundle stuff in texk/dvisvgm/dvisvgm-src/libs too.
+        '(with-directory-excursion "libs"
+           (let ((preserved-directories '("." ".." "lua53" "luajit" "pplib" "xpdf")))
+             ;; Delete bundled software, except Lua which cannot easily be
+             ;; used as an external dependency, pplib and xpdf which aren't
+             ;; supported as system libraries (see m4/kpse-xpdf-flags.m4).
+             (for-each delete-file-recursively
+                       (scandir "."
+                                (lambda (file)
+                                  (and (not (member file preserved-directories))
+                                       (eq? 'directory (stat:type (stat file))))))))))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("texlive-extra-src" ,texlive-extra-src)
+       ("config" ,config)
+       ("texlive-scripts"
+        ,(origin
+           (method svn-fetch)
+           (uri (svn-reference
+                 (url (string-append "svn://www.tug.org/texlive/tags/"
+                                     %texlive-tag "/Master/texmf-dist/"
+                                     "/scripts/texlive"))
+                 (revision %texlive-revision)))
+           (file-name (string-append "texlive-scripts-"
+                                     (number->string %texlive-revision)
+                                     "-checkout"))
+           (sha256
+            (base32
+             "10xpa4nnz1biap7qfv7fb0zk6132ki5g1j8w0bqwkggfncdfl07d"))))
+       ("cairo" ,cairo)
+       ("fontconfig" ,fontconfig)
+       ("fontforge" ,fontforge)
+       ("freetype" ,freetype)
+       ("gd" ,gd)
+       ("gmp" ,gmp)
+       ("ghostscript" ,ghostscript)
+       ("graphite2" ,graphite2)
+       ("harfbuzz" ,harfbuzz)
+       ("icu4c" ,icu4c)
+       ("libpaper" ,libpaper)
+       ("libpng" ,libpng)
+       ("libxaw" ,libxaw)
+       ("libxt" ,libxt)
+       ("mpfr" ,mpfr)
+       ("perl" ,perl)
+       ("pixman" ,pixman)
+       ("potrace" ,potrace)
+       ("python" ,python)
+       ("ruby" ,ruby)
+       ("tcsh" ,tcsh)
+       ("teckit" ,teckit)
+       ("zlib" ,zlib)
+       ("zziplib" ,zziplib)))
+    (native-inputs
+     (list pkg-config))
+    (arguments
+     `(#:modules ((guix build gnu-build-system)
+                  (guix build utils)
+                  (ice-9 ftw)
+                  (srfi srfi-1)
+                  (srfi srfi-26))
+       #:out-of-source? #t
+       #:configure-flags
        '("--disable-static"
          "--disable-native-texlive-build"
+         "--enable-shared"
+         "--with-banner-add=/GNU Guix"
          "--with-system-cairo"
          "--with-system-freetype2"
          "--with-system-gd"
@@ -341,16 +333,15 @@ files from LOCATIONS with expected checksum HASH.  CODE is not currently in use.
          "--with-system-libpng"
          "--with-system-mpfr"
          "--with-system-pixman"
-         "--with-system-poppler"
          "--with-system-potrace"
          "--with-system-teckit"
-         "--with-system-xpdf"
          "--with-system-zlib"
          "--with-system-zziplib"
          ;; LuaJIT is not ported to powerpc64le* yet.
          ,@(if (string-prefix? "powerpc64le" (or (%current-target-system)
                                                  (%current-system)))
                '("--disable-luajittex"
+                 "--disable-luajithbtex"
                  "--disable-mfluajit")
                '()))
 
@@ -363,102 +354,199 @@ files from LOCATIONS with expected checksum HASH.  CODE is not currently in use.
                            (string-prefix? "mips64" s)
                            (string-prefix? "powerpc64le" s))))
 
-      #:phases
-      (modify-phases %standard-phases
-        (add-after 'unpack 'configure-ghostscript-executable
-          ;; ps2eps.pl uses the "gswin32c" ghostscript executable on Windows,
-          ;; and the "gs" ghostscript executable on Unix. It detects Unix by
-          ;; checking for the existence of the /usr/bin directory. Since
-          ;; Guix System does not have /usr/bin, it is also detected as Windows.
-          (lambda* (#:key inputs #:allow-other-keys)
-            (substitute* "utils/ps2eps/ps2eps-src/bin/ps2eps.pl"
-              (("gswin32c") "gs"))
-            (substitute* "texk/texlive/linked_scripts/epstopdf/epstopdf.pl"
-              (("\"gs\"")
-               (string-append "\"" (assoc-ref inputs "ghostscript") "/bin/gs\"")))
-            #t))
-        (add-after 'unpack 'use-code-for-new-poppler
-          (lambda _
-            (copy-file "texk/web2c/pdftexdir/pdftoepdf-poppler0.76.0.cc"
-                       "texk/web2c/pdftexdir/pdftoepdf.cc")
-            (copy-file "texk/web2c/pdftexdir/pdftosrc-poppler0.76.0.cc"
-                       "texk/web2c/pdftexdir/pdftosrc.cc")
-            #t))
-        (add-after 'unpack 'patch-dvisvgm-build-files
-          (lambda _
-            ;; XXX: Ghostscript is detected, but HAVE_LIBGS is never set, so
-            ;; the appropriate linker flags are not added.
-            (substitute* "texk/dvisvgm/configure"
-              (("^have_libgs=yes" all)
-               (string-append all "\nHAVE_LIBGS=1")))
-            #t))
-        (add-after 'unpack 'disable-failing-test
-          (lambda _
-            ;; FIXME: This test fails on 32-bit architectures since Glibc 2.28:
-            ;; <https://bugzilla.redhat.com/show_bug.cgi?id=1631847>.
-            (substitute* "texk/web2c/omegafonts/check.test"
-              (("^\\./omfonts -ofm2opl \\$srcdir/tests/check tests/xcheck \\|\\| exit 1")
-               "./omfonts -ofm2opl $srcdir/tests/check tests/xcheck || exit 77"))
-            #t))
-        (add-after 'install 'postint
-          (lambda* (#:key inputs outputs #:allow-other-keys #:rest args)
-            (let* ((out (assoc-ref outputs "out"))
-                   (share (string-append out "/share"))
-                   (texlive-extra (assoc-ref inputs "texlive-extra-src"))
-                   (unpack (assoc-ref %standard-phases 'unpack))
-                   (patch-source-shebangs
-                    (assoc-ref %standard-phases 'patch-source-shebangs)))
-              (substitute* (string-append share "/texmf-dist/web2c/texmf.cnf")
-                ;; Don't truncate lines.
-                (("^error_line = .*$") "error_line = 254\n")
-                (("^half_error_line = .*$") "half_error_line = 238\n")
-                (("^max_print_line = .*$") "max_print_line = 1000\n"))
-              ;; Create symbolic links for the latex variants and their
-              ;; man pages.
-              (with-directory-excursion (string-append out "/bin/")
-                (for-each symlink
-                          '("pdftex" "pdftex"   "xetex"   "luatex")
-                          '("latex"  "pdflatex" "xelatex" "lualatex")))
-              (with-directory-excursion (string-append share "/man/man1/")
-                (symlink "luatex.1" "lualatex.1"))
-              ;; Unpack texlive-extra and install tlpkg.
-              (mkdir "texlive-extra")
-              (with-directory-excursion "texlive-extra"
-                (apply unpack (list #:source texlive-extra))
-                (apply patch-source-shebangs (list #:source texlive-extra))
-                (invoke "mv" "tlpkg" share))
-              (let ((scripts (string-append share "/texmf-dist/scripts/texlive/")))
-                (mkdir-p scripts)
-                (copy-recursively (assoc-ref inputs "texlive-scripts") scripts)
-                ;; Make sure that fmtutil can find its Perl modules.
-                (substitute* (string-append scripts "fmtutil.pl")
-                  (("\\$TEXMFROOT/") (string-append share "/"))))
-
-              ;; texlua shebangs are not patched by the patch-source-shebangs
-              ;; phase because the texlua executable does not exist at that
-              ;; time.
-              (setenv "PATH" (string-append (getenv "PATH") ":" out "/bin"))
-              (with-directory-excursion out
-                (patch-source-shebangs))))))))
-   (native-search-paths
-    (list (search-path-specification
-           (variable "TEXMF")
-           (files '("share/texmf-dist"))
-           (separator #f))
-          (search-path-specification
-           (variable "TEXMFCNF")
-           (files '("share/texmf-dist/web2c"))
-           (separator #f))))
-   (synopsis "TeX Live, a package of the TeX typesetting system")
-   (description
-    "TeX Live provides a comprehensive TeX document production system.
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'configure-ghostscript-executable
+           ;; ps2eps.pl uses the "gswin32c" ghostscript executable on Windows,
+           ;; and the "gs" ghostscript executable on Unix. It detects Unix by
+           ;; checking for the existence of the /usr/bin directory. Since
+           ;; Guix System does not have /usr/bin, it is also detected as Windows.
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "utils/ps2eps/ps2eps-src/bin/ps2eps.pl"
+               (("gswin32c") "gs"))
+             (substitute* "texk/texlive/linked_scripts/epstopdf/epstopdf.pl"
+               (("\"gs\"")
+                (string-append "\"" (assoc-ref inputs "ghostscript") "/bin/gs\"")))))
+         (add-after 'unpack 'patch-dvisvgm-build-files
+           (lambda _
+             ;; XXX: Ghostscript is detected, but HAVE_LIBGS is never set, so
+             ;; the appropriate linker flags are not added.
+             (substitute* "texk/dvisvgm/configure"
+               (("^have_libgs=yes" all)
+                (string-append all "\nHAVE_LIBGS=1")))))
+         (add-after 'unpack 'disable-failing-test
+           (lambda _
+             ;; FIXME: This test fails on 32-bit architectures since Glibc 2.28:
+             ;; <https://bugzilla.redhat.com/show_bug.cgi?id=1631847>.
+             (substitute* "texk/web2c/omegafonts/check.test"
+               (("^\\./omfonts -ofm2opl \\$srcdir/tests/check tests/xcheck \\|\\| exit 1")
+                "./omfonts -ofm2opl $srcdir/tests/check tests/xcheck || exit 77"))))
+         ,@(if (target-ppc32?)
+             ;; Some mendex tests fail on some architectures.
+             `((add-after 'unpack 'skip-mendex-tests
+                 (lambda _
+                   (substitute* '("texk/mendexk/tests/mendex.test"
+                                  "texk/upmendex/tests/upmendex.test")
+                     (("srcdir/tests/pprecA-0.ind pprecA-0.ind1 \\|\\| exit 1")
+                      "srcdir/tests/pprecA-0.ind pprecA-0.ind1 || exit 77")))))
+             '())
+         (add-after 'unpack 'unpack-texlive-extra
+           (lambda* (#:key inputs #:allow-other-keys)
+             (mkdir "texlive-extra")
+             (with-directory-excursion "texlive-extra"
+               (apply (assoc-ref %standard-phases 'unpack)
+                      (list #:source (assoc-ref inputs "texlive-extra-src"))))))
+         (add-after 'unpack-texlive-extra 'unpack-texlive-scripts
+           (lambda* (#:key inputs #:allow-other-keys)
+             (mkdir "texlive-scripts")
+             (with-directory-excursion "texlive-scripts"
+               (apply (assoc-ref %standard-phases 'unpack)
+                      (list #:source (assoc-ref inputs "texlive-scripts"))))))
+         (add-after 'unpack-texlive-scripts 'patch-scripts
+           (lambda _
+             (let* ((scripts (append (find-files "texk/kpathsea" "^mktex")
+                                     (find-files "texk/texlive/linked_scripts"
+                                                 "\\.sh$")
+                                     (find-files "texlive-scripts" "\\.sh$")))
+                    (commands '("awk" "basename" "cat" "grep" "mkdir" "rm"
+                                "sed" "sort" "uname"))
+                    (command-regexp (format #f "\\b(~a)\\b"
+                                            (string-join commands "|")))
+                    (iso-8859-1-encoded-scripts
+                     '("texk/texlive/linked_scripts/texlive-extra/rubibtex.sh"
+                       "texk/texlive/linked_scripts/texlive-extra/rumakeindex.sh")))
+
+               (define (substitute-commands scripts)
+                 (substitute* scripts
+                   ((command-regexp dummy command)
+                    (which command))))
+
+               (substitute-commands (lset-difference string= scripts
+                                                     iso-8859-1-encoded-scripts))
+
+               (with-fluids ((%default-port-encoding "ISO-8859-1"))
+                 (substitute-commands iso-8859-1-encoded-scripts)))))
+         ;; When ST_NLINK_TRICK is set, kpathsea attempts to avoid work when
+         ;; searching files by assuming that a directory with exactly two
+         ;; links has no subdirectories.  This assumption does not hold in our
+         ;; case, so some directories with symlinked subdirectories would not
+         ;; be traversed.
+         (add-after 'patch-scripts 'patch-directory-traversal
+           (lambda _
+             (substitute* "texk/kpathsea/config.h"
+               (("#define ST_NLINK_TRICK") ""))))
+         (add-after 'check 'customize-texmf.cnf
+           ;; The default texmf.cnf is provided by this package, texlive-bin.
+           ;; Every variable of interest is set relatively to the GUIX_TEXMF
+           ;; environment variable defined via a search path specification
+           ;; further below.  The configuration file is patched after the test
+           ;; suite has run, as it relies on the default configuration to find
+           ;; its paths (and the GUIX_TEXMF variable isn't set yet).
+           (lambda _
+             ;; The current directory is build/ because of the out-of-tree
+             ;; build.
+             (let* ((source    (first (scandir ".." (cut string-suffix?
+                                                         "source" <>))))
+                    (texmf.cnf (string-append "../" source
+                                              "/texk/kpathsea/texmf.cnf")))
+               (substitute* texmf.cnf
+                 (("^TEXMFROOT = .*")
+                  "TEXMFROOT = {$GUIX_TEXMF}/..\n")
+                 (("^TEXMF = .*")
+                  "TEXMF = {$GUIX_TEXMF}\n")
+                 (("^%TEXMFCNF = .*")
+                  "TEXMFCNF = {$GUIX_TEXMF}/web2c\n")
+                 ;; Don't truncate lines.
+                 (("^error_line = .*$") "error_line = 254\n")
+                 (("^half_error_line = .*$") "half_error_line = 238\n")
+                 (("^max_print_line = .*$") "max_print_line = 1000\n")))))
+         (add-after 'install 'post-install
+           (lambda* (#:key inputs outputs #:allow-other-keys #:rest args)
+             (let* ((out (assoc-ref outputs "out"))
+                    (patch-source-shebangs (assoc-ref %standard-phases
+                                                      'patch-source-shebangs))
+                    (share (string-append out "/share"))
+                    (scripts (string-append share
+                                            "/texmf-dist/scripts/texlive"))
+                    (source (string-append
+                             "../" (first (scandir ".." (cut string-suffix?
+                                                             "source" <>)))))
+                    (tl-extra-root (string-append source "/texlive-extra"))
+                    (tl-extra-dir (first
+                                   (scandir tl-extra-root
+                                            (negate
+                                             (cut member <> '("." ".."))))))
+                    (tlpkg-src (string-append tl-extra-root "/" tl-extra-dir
+                                              "/tlpkg"))
+                    (config.guess (search-input-file inputs
+                                                     "/bin/config.guess")))
+
+               ;; Create symbolic links for the latex variants and their man
+               ;; pages.  We link lualatex to luahbtex; see issue #51252 for
+               ;; details.
+               (with-directory-excursion (string-append out "/bin/")
+                 (for-each symlink
+                           '("pdftex" "pdftex"   "xetex"   "luahbtex")
+                           '("latex"  "pdflatex" "xelatex" "lualatex")))
+               (with-directory-excursion (string-append share "/man/man1/")
+                 (symlink "luatex.1" "lualatex.1"))
+
+               ;; Install tlpkg.
+               (copy-recursively tlpkg-src (string-append share "/tlpkg"))
+
+               ;; Install texlive-scripts.
+               (copy-recursively (string-append
+                                  source "/texlive-scripts/source/")
+                                 scripts)
+
+               ;; Patch them.
+               (let ((dirs (map dirname (list (which "sed") (which "awk")))))
+                 (with-directory-excursion scripts
+                   (substitute* '("mktexpk" "mktexmf" "mktexlsr")
+                     (("^version=" m)
+                      (format #false "PATH=\"~{~a:~}$PATH\"; export PATH~%~a"
+                              dirs m)))))
+
+               ;; Make sure that fmtutil can find its Perl modules.
+               (substitute* (string-append scripts "/fmtutil.pl")
+                 (("\\$TEXMFROOT/")
+                  (string-append share "/")))
+
+               ;; Likewise for updmap.pl.
+               (substitute* (string-append scripts "/updmap.pl")
+                 (("\\$TEXMFROOT/tlpkg")
+                  (string-append share "/tlpkg")))
+
+               ;; Likewise for the tlmgr.
+               (substitute* (string-append scripts "/tlmgr.pl")
+                 ((".*\\$::installerdir = \\$Master.*" all)
+                  (format #f "  $Master = ~s;~%~a" share all)))
+
+               ;; Install the config.guess script, required by tlmgr.
+               (with-directory-excursion share
+                 (mkdir-p "tlpkg/installer/")
+                 (symlink config.guess "tlpkg/installer/config.guess"))
+
+               ;; texlua shebangs are not patched by the patch-source-shebangs
+               ;; phase because the texlua executable does not exist at that
+               ;; time.
+               (setenv "PATH" (string-append (getenv "PATH") ":" out "/bin"))
+               (with-directory-excursion out
+                 (patch-source-shebangs))))))))
+    (native-search-paths
+     (list (search-path-specification
+            (variable "GUIX_TEXMF")
+            (files '("share/texmf-dist")))))
+    (synopsis "TeX Live, a package of the TeX typesetting system")
+    (description
+     "TeX Live provides a comprehensive TeX document production system.
 It includes all the major TeX-related programs, macro packages, and fonts
 that are free software, including support for many languages around the
 world.
 
 This package contains the binaries.")
-   (license (license:fsf-free "https://www.tug.org/texlive/copying.html"))
-   (home-page "https://www.tug.org/texlive/")))
+    (license (license:fsf-free "https://www.tug.org/texlive/copying.html"))
+    (home-page "https://www.tug.org/texlive/")))
 
 (define-public texlive-libkpathsea
   (package/inherit texlive-bin
@@ -493,6 +581,12 @@ This package contains the binaries.")
     (description "kpathsea is a library, whose purpose is to return a filename
 from a list of user-specified directories similar to how shells look up
 executables.  It is maintained as a part of TeX Live.")))
+
+(define-syntax-rule (define-deprecated-package old-name name)
+  "Define OLD-NAME as a deprecated package alias for NAME."
+  (define-deprecated/public old-name name
+    (deprecated-package (symbol->string 'old-name) name)))
+
 
 (define texlive-docstrip
   (package
@@ -500,10 +594,10 @@ executables.  It is maintained as a part of TeX Live.")))
               "texlive-docstrip"
               (list "/tex/latex/base/docstrip.tex")
               (base32
-               "1f9sx1lp7v34zwm186msf03q2h28rrg0lh65z59zc0cvqffs6dvb")
+               "1pxbqbia0727vg01xv8451szm55z2w8sb0vv3kf4iqx5ibb6m0d2")
               #:trivial? #t))
     (home-page "https://www.ctan.org/texlive")
-    (synopsis "Utility to strip documentation from TeX files.")
+    (synopsis "Utility to strip documentation from TeX files")
     (description "This package provides the docstrip utility to strip
 documentation from TeX files.  It is part of the LaTeX base.")
     (license license:lppl1.3+)))
@@ -515,7 +609,7 @@ documentation from TeX files.  It is part of the LaTeX base.")
               (list "/tex/generic/unicode-data/"
                     "/doc/generic/unicode-data/")
               (base32
-               "0zy4v9y667cka5fi4dnc6x500907812y7pcaf63s5qxi8l7khxxy")
+               "1d41zvjsig7sqf2j2m89dnbv3gicpb16r04b4ikps4gabhbky83k")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/unicode-data")
     (synopsis "Unicode data and loaders for TeX")
@@ -527,11 +621,10 @@ Database.  Accompanying these source data are generic TeX loader files
 allowing this data to be used as part of TeX runs, in particular in building
 format files.  Currently there are two loader files: one for general character
 set up and one for initializing XeTeX character classes as has been carried
-out to date by @code{unicode-letters.tex}. ")
+out to date by @code{unicode-letters.tex}.")
     (license license:lppl1.3c+)))
 
-(define-public texlive-generic-unicode-data
-  (deprecated-package "texlive-generic-unicode-data" texlive-unicode-data))
+(define-deprecated-package texlive-generic-unicode-data texlive-unicode-data)
 
 (define-public texlive-hyphen-base
   (package
@@ -548,7 +641,7 @@ out to date by @code{unicode-letters.tex}. ")
                     "/tex/generic/hyphen/hypht1.tex"
                     "/tex/generic/hyphen/zerohyph.tex")
               (base32
-               "0f19nml4hdx9lh7accqdk1b9ismwfm2523l5zsc4kb4arysgcakz")
+               "1sagn9aybs34m1s6m3zwya5g5kbiwfnw8ifcgxssygmzzs88dgjp")
               #:trivial? #t))
     (home-page "https://tug.org/texlive/")
     (synopsis "Core hyphenation support files")
@@ -569,7 +662,7 @@ default versions of those), etc.")
                     "/fonts/enc/dvips/base/"
                     "/tex/generic/dvips/")
               (base32
-               "1qr7h0ahycmz5wmpv54glfss9jqdmmyymj6kim626d1c8v9bmg86")
+               "0rns1hpjy4fmsskmkwx197j8qbgdmyj0j9214sq9vhpa6nv7czm3")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/dvips")
     (synopsis "DVI to PostScript drivers")
@@ -594,24 +687,24 @@ allow existing format source files to be used with newer engines, for example
 to adapt the plain e-TeX source file to work with XeTeX and LuaTeX.")
     (license license:public-domain)))
 
-(define-public texlive-generic-tex-ini-files
-  (deprecated-package "texlive-generic-tex-ini-files" texlive-tex-ini-files))
+(define-deprecated-package texlive-generic-tex-ini-files texlive-tex-ini-files)
 
-(define-public texlive-metafont-base
+(define-public texlive-metafont
   (package
-    (name "texlive-metafont-base")
+    (name "texlive-metafont")
     (version (number->string %texlive-revision))
     (source (origin
-              (method svn-fetch)
-              (uri (svn-reference
+              (method svn-multi-fetch)
+              (uri (svn-multi-reference
                     (url (string-append "svn://www.tug.org/texlive/tags/"
-                                        %texlive-tag "/Master/texmf-dist/"
-                                        "/metafont"))
+                                        %texlive-tag "/Master/texmf-dist"))
+                    (locations '("/metafont/"
+                                 "/fonts/source/public/modes/"))
                     (revision %texlive-revision)))
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1yl4n8cn5xqk2nc22zgzq6ymd7bhm6xx1mz3azip7i3ki4bhb5q5"))))
+                "17y72xmz5a36vdsq7pfrwj0j4c7llrm9j5kcq349cpaas7r32lmb"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ; no test target
@@ -620,14 +713,17 @@ to adapt the plain e-TeX source file to work with XeTeX and LuaTeX.")
          (delete 'configure)
          (replace 'build
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((cwd (getcwd)))
+             (let* ((cwd (getcwd))
+                    (mf (string-append cwd "/metafont"))
+                    (modes (string-append cwd "/fonts/source/public/modes")))
                (setenv "MFINPUTS"
-                       (string-append cwd "/base:"
-                                      cwd "/misc:"
-                                      cwd "/roex:"
-                                      cwd "/feynmf:"
-                                      cwd "/mfpic:"
-                                      cwd "/config")))
+                       (string-append modes ":"
+                                      mf "/base:"
+                                      mf "/misc:"
+                                      mf "/roex:"
+                                      mf "/feynmf:"
+                                      mf "/mfpic:"
+                                      mf "/config")))
              (mkdir "build")
              (with-directory-excursion "build"
                (invoke "inimf" "mf.mf"))))
@@ -635,20 +731,24 @@ to adapt the plain e-TeX source file to work with XeTeX and LuaTeX.")
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out  (assoc-ref outputs "out"))
                     (base (string-append out "/share/texmf-dist/web2c"))
-                    (mf   (string-append out "/share/texmf-dist/metafont/base")))
+                    (mf   (string-append out "/share/texmf-dist/metafont/")))
                (mkdir-p base)
                (mkdir-p mf)
                (install-file "build/mf.base" base)
-               (copy-recursively "base" mf)
-               #t))))))
+               (with-directory-excursion "metafont"
+                 (for-each (lambda (where)
+                             (copy-recursively where (string-append mf where)))
+                           (list "base" "misc" "config")))))))))
     (native-inputs
-     `(("texlive-bin" ,texlive-bin)))
+     (list texlive-bin))
     (home-page "https://www.ctan.org/pkg/metafont")
     (synopsis "Metafont base files")
     (description "This package provides the Metafont base files needed to
 build fonts using the Metafont system.")
     (license license:knuth)))
 
+(define-deprecated-package texlive-metafont-base texlive-metafont)
+
 (define-public texlive-fontinst
   (let ((template (simple-texlive-package
                    "texlive-fontinst"
@@ -673,11 +773,9 @@ build fonts using the Metafont system.")
                          "/tex/fontinst/latinetx/"
                          "/tex/fontinst/latinmtx/"
                          "/tex/fontinst/mathmtx/"
-                         "/tex/fontinst/smblmtx/"
-
-                         "/scripts/texlive/fontinst.sh")
+                         "/tex/fontinst/smblmtx/")
                    (base32
-                    "0lprwib7n2ygfxvrw675vhif7ghyip2x6k70kqs9syp8lqxiizf8")
+                    "195jsijrpv828pqy99gm13j31nsc8bsa58zlbln2r0h5j9l44b5g")
                    #:trivial? #t)))
     (package
       (inherit template)
@@ -727,8 +825,7 @@ build fonts using the Metafont system.")
                                 "fontdoc.sty")))
                    #t)))))))
       (native-inputs
-       `(("texlive-bin" ,texlive-bin)
-         ("texlive-docstrip" ,texlive-docstrip)))
+       (list texlive-bin texlive-docstrip))
       (home-page "https://www.ctan.org/pkg/fontinst")
       (synopsis "Tools for converting and installing fonts for TeX and LaTeX")
       (description "This package provides TeX macros for converting Adobe Font
@@ -739,8 +836,7 @@ metrics (and related information) for a font family that TeX needs to do any
 typesetting in these fonts.")
       (license license:lppl1.1+))))
 
-(define-public texlive-tex-fontinst-base
-  (deprecated-package "texlive-tex-fontinst-base" texlive-fontinst))
+(define-deprecated-package texlive-tex-fontinst-base texlive-fontinst)
 
 (define-public texlive-fontname
   (package
@@ -749,7 +845,7 @@ typesetting in these fonts.")
               (list "/doc/fonts/fontname/fontname.texi"
                     "/fonts/map/fontname/")
               (base32
-               "0h5im5rnhycrrkd6z10f17m2caa8lv594wf482b68qjmnxfrqnxj")
+               "009qvjpw48lajp0gxpvdk10n5qw3q41cpq05ycns67mxwkcaywq6")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/fontname")
     (synopsis "Scheme for naming fonts in TeX")
@@ -766,7 +862,7 @@ documents.")
                          "/fonts/map/dvips/cm/cmtext-bsr-interpolated.map"
                          "/doc/fonts/cm/")
                    (base32
-                    "09mvl94qrwlb9b4pkigi151l256v3djhwl4m5lgvk6yhn5y75zrp")
+                    "1ky4gvcn8qn3d61bvb39512b8r92igv6il7vh02hw04223yj6q8i")
                    #:trivial? #t)))
     (package
       (inherit template)
@@ -780,7 +876,7 @@ documents.")
           `(modify-phases ,phases
              (replace 'build
                (lambda* (#:key inputs #:allow-other-keys)
-                 (let ((mf (assoc-ref inputs "texlive-metafont-base")))
+                 (let ((mf (assoc-ref inputs "texlive-metafont")))
                    ;; Tell mf where to find mf.base
                    (setenv "MFBASES" (string-append mf "/share/texmf-dist/web2c"))
                    ;; Tell mf where to look for source files
@@ -823,8 +919,7 @@ documents.")
                    (copy-recursively "pk" pk)
                    #t)))))))
       (native-inputs
-       `(("texlive-bin" ,texlive-bin)
-         ("texlive-metafont-base" ,texlive-metafont-base)))
+       (list texlive-bin texlive-metafont))
       (home-page "https://www.ctan.org/pkg/cm")
       (synopsis "Computer Modern fonts for TeX")
       (description "This package provides the Computer Modern fonts by Donald
@@ -833,8 +928,7 @@ display, and mathematical fonts in a range of styles, based on Monotype Modern
 8A.")
       (license license:knuth))))
 
-(define-public texlive-fonts-cm
-  (deprecated-package "texlive-fonts-cm" texlive-cm))
+(define-deprecated-package texlive-fonts-cm texlive-cm)
 
 (define-public texlive-cm-super
   (let ((template (simple-texlive-package
@@ -868,8 +962,7 @@ originals.")
       ;; With font exception
       (license license:gpl2+))))
 
-(define-public texlive-fonts-cm-super
-  (deprecated-package "texlive-fonts-cm-super" texlive-cm-super))
+(define-deprecated-package texlive-fonts-cm-super texlive-cm-super)
 
 (define-public texlive-courier
   (package
@@ -889,7 +982,7 @@ originals.")
                     "/tex4ht/ht-fonts/alias/adobe/courier/"
                     "/tex4ht/ht-fonts/unicode/adobe/courier/")
               (base32
-               "1hfgisdi7mjf5156ax6d6zsbiq42zkmp1x5lg17rgzf61k6d6z1y")
+               "05lglavi073glj26k9966351hka5ac22g4vim61dkfy001vz4i7r")
               #:trivial? #t))
     (home-page "https://ctan.org/pkg/urw-base35")
     (synopsis "URW Base 35 font pack for LaTeX")
@@ -898,6 +991,45 @@ font from Adobe's basic set.")
     ;; No license version specified.
     (license license:gpl3+)))
 
+(define-public texlive-tex-gyre
+  (package
+    (inherit (simple-texlive-package
+              "texlive-tex-gyre"
+              '("/doc/fonts/tex-gyre/GUST-FONT-LICENSE.txt"
+                "/fonts/afm/public/tex-gyre/"
+                "/fonts/enc/dvips/tex-gyre/"
+                "/fonts/map/dvips/tex-gyre/"
+                "/fonts/opentype/public/tex-gyre/"
+                "/fonts/tfm/public/tex-gyre/"
+                "/fonts/type1/public/tex-gyre/"
+                "/tex/latex/tex-gyre/")
+              (base32
+               "1ldnlmclghm3gnyv02r8a6cqybygz2ifq07mhykhf43h1pw3aq7k")
+              #:trivial? #t))
+    (home-page "https://ctan.org/pkg/tex-gyre")
+    (synopsis "TeX fonts extending URW fonts")
+    (description
+     "The TeX-GYRE bundle consist of multiple font families:
+@itemize @bullet
+@item Adventor, based on the URW Gothic L family of fonts;
+@item Bonum, based on the URW Bookman L family;
+@item Chorus, based on URW Chancery L Medium Italic;
+@item Cursor, based on URW Nimbus Mono L;
+@item Heros, based on URW Nimbus Sans L;
+@item Pagella, based on URW Palladio L;
+@item Schola, based on the URW Century Schoolbook L family;
+@item Termes, based on the URW Nimbus Roman No9 L family of fonts.
+@end itemize
+
+The constituent standard faces of each family have been greatly extended
+(though Chorus omits Greek support and has no small-caps family).  Each
+family is available in Adobe Type 1 and Open Type formats, and LaTeX
+support (for use with a variety of encodings) is provided.")
+    ;; The GUST font license (GFL) is legally identical to the LaTeX Project
+    ;; Public License (LPPL), version 1.3c or later, but comes with an
+    ;; additional but not legally binding clause.
+    (license license:lppl1.3c+)))
+
 (define-public texlive-lm
   (package
     (inherit (simple-texlive-package
@@ -912,7 +1044,7 @@ font from Adobe's basic set.")
                     "/fonts/type1/public/lm/"
                     "/tex/latex/lm/")
               (base32
-               "0i1hwr8rp0jqyvs4qyplrirscd4w7lsgwsncyv3yzy80bsa56jq5")
+               "0yyk0dr4yms82mwy4dc03zf5igyhgcb65icdah042rk23rlpxygv")
               #:trivial? #t))
     (home-page "http://www.gust.org.pl/projects/e-foundry/latin-modern/")
     (synopsis "Latin Modern family of fonts")
@@ -924,76 +1056,69 @@ Computers & Typesetting series.")
     ;; additional but not legally binding clause.
     (license license:lppl1.3c+)))
 
-(define-public texlive-fonts-lm
-  (deprecated-package "texlive-fonts-lm" texlive-lm))
+(define-deprecated-package texlive-fonts-lm texlive-lm)
 
-(define-public texlive-fonts-knuth-lib
-  (package
-    (name "texlive-fonts-knuth-lib")
-    (version (number->string %texlive-revision))
-    (source (origin
-              (method svn-fetch)
-              (uri (svn-reference
-                    (url (string-append "svn://www.tug.org/texlive/tags/"
-                                        %texlive-tag "/Master/texmf-dist/"
-                                        "/fonts/source/public/knuth-lib"))
-                    (revision %texlive-revision)))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "0in9aqyi8jkyf9d16z0li50z5fpwj1iwgwm83gmvwqcf7chfs04y"))))
-    (build-system gnu-build-system)
-    (arguments
-     `(#:modules ((guix build gnu-build-system)
-                  (guix build utils)
-                  (srfi srfi-26))
-       #:tests? #f ; no tests
-       #:phases
-       (modify-phases %standard-phases
-         (delete 'configure)
-         (replace 'build
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let ((mf (assoc-ref inputs "texlive-metafont-base")))
-               ;; Tell mf where to find mf.base
-               (setenv "MFBASES"
-                       (string-append mf "/share/texmf-dist/web2c"))
-               ;; Tell mf where to look for source files
-               (setenv "MFINPUTS"
-                       (string-append (getcwd) ":"
-                                      mf "/share/texmf-dist/metafont/base")))
-             (mkdir "build")
-             (for-each (lambda (font)
-                         (format #t "building font ~a\n" font)
-                         (invoke "mf" "-progname=mf"
-                                 "-output-directory=build"
-                                 (string-append "\\"
-                                                "mode:=ljfour; "
-                                                "mag:=1; "
-                                                "batchmode; "
-                                                "input " font)))
-                       (find-files "." "(manfnt|logo.+)\\.mf$"))
-             #t))
-         (replace 'install
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (tfm (string-append
-                          out "/share/texmf-dist/fonts/tfm/public/knuth-lib"))
-                    (mf  (string-append
-                          out "/share/texmf-dist/fonts/source/public/knuth-lib")))
-               (for-each (cut install-file <> tfm)
-                         (find-files "build" "\\.*"))
-               (for-each (cut install-file <> mf)
-                         (find-files "." "\\.mf"))
-               #t))))))
-    (native-inputs
-     `(("texlive-bin" ,texlive-bin)
-       ("texlive-metafont-base" ,texlive-metafont-base)))
-    (home-page "https://www.ctan.org/pkg/knuth-lib")
-    (synopsis "Small library of METAFONT sources")
-    (description "This is a collection of core TeX and METAFONT macro files
+(define-public texlive-knuth-lib
+  (let ((template (simple-texlive-package
+                   "texlive-knuth-lib"
+                   (list "/fonts/source/public/knuth-lib/"
+                         "/tex/generic/knuth-lib/"
+                         "/tex/plain/knuth-lib/")
+                   (base32
+                    "1cxyqqprp8sj2j4zp9l0wry8cq2awpz3a8i5alzpc4ndg7a6pgdf")
+                   #:trivial? #t)))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:modules _ '())
+          '((guix build gnu-build-system)
+            (guix build utils)
+            (srfi srfi-26)))
+         ((#:phases phases '())
+          `(modify-phases ,phases
+             (replace 'build
+               (lambda* (#:key inputs #:allow-other-keys)
+                 (with-directory-excursion "fonts/source/public/knuth-lib"
+                   (let ((mf (assoc-ref inputs "texlive-metafont")))
+                     ;; Tell mf where to find mf.base
+                     (setenv "MFBASES"
+                             (string-append mf "/share/texmf-dist/web2c"))
+                     ;; Tell mf where to look for source files
+                     (setenv "MFINPUTS"
+                             (string-append (getcwd) ":"
+                                            mf "/share/texmf-dist/metafont/base")))
+                   (mkdir "build")
+                   (for-each (lambda (font)
+                               (format #t "building font ~a\n" font)
+                               (invoke "mf" "-progname=mf"
+                                       "-output-directory=build"
+                                       (string-append "\\"
+                                                      "mode:=ljfour; "
+                                                      "mag:=1; "
+                                                      "batchmode; "
+                                                      "input " font)))
+                             (find-files "." "(manfnt|logo.+)\\.mf$")))
+                 #t))
+             (add-after 'install 'install-fonts
+               (lambda* (#:key outputs #:allow-other-keys)
+                 (with-directory-excursion "fonts/source/public/knuth-lib"
+                   (let* ((out (assoc-ref outputs "out"))
+                          (tfm (string-append
+                                out "/share/texmf-dist/fonts/tfm/public/knuth-lib")))
+                     (for-each (cut install-file <> tfm)
+                               (find-files "build" "\\.tfm"))
+                     #t))))))))
+      (native-inputs
+       (list texlive-bin texlive-metafont))
+      (home-page "https://www.ctan.org/pkg/knuth-lib")
+      (synopsis "Small library of METAFONT sources")
+      (description "This is a collection of core TeX and METAFONT macro files
 from Donald Knuth, including the plain format, plain base, and the MF logo
 fonts.")
-    (license license:knuth)))
+      (license license:knuth))))
+
+(define-deprecated-package texlive-fonts-knuth-lib texlive-knuth-lib)
 
 (define-public texlive-fonts-latex
   (package
@@ -1022,7 +1147,7 @@ fonts.")
          (delete 'configure)
          (replace 'build
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((mf (assoc-ref inputs "texlive-metafont-base")))
+             (let ((mf (assoc-ref inputs "texlive-metafont")))
                ;; Tell mf where to find mf.base
                (setenv "MFBASES" (string-append mf "/share/texmf-dist/web2c"))
                ;; Tell mf where to look for source files
@@ -1060,9 +1185,7 @@ fonts.")
                          (find-files "." "\\.mf"))
                #t))))))
     (native-inputs
-     `(("texlive-bin" ,texlive-bin)
-       ("texlive-metafont-base" ,texlive-metafont-base)
-       ("texlive-cm" ,texlive-cm)))
+     (list texlive-bin texlive-metafont texlive-cm))
     (home-page "https://www.ctan.org/pkg/latex-fonts")
     (synopsis "Collection of fonts used in LaTeX distributions")
     (description "This is a collection of fonts for use with standard LaTeX
@@ -1071,27 +1194,78 @@ class), line and circle fonts (for use in the picture environment) and LaTeX
 symbol fonts.")
     (license license:lppl1.2+)))
 
-(define-public texlive-latex-mflogo
-  (package
-    (name "texlive-latex-mflogo")
-    (version (number->string %texlive-revision))
-    (source
-     (origin
-       (method svn-fetch)
-       (uri (texlive-ref "latex" "mflogo"))
-       (file-name (string-append name "-" version "-checkout"))
-       (sha256
-        (base32
-         "15i2ib6nvhf31g1b92c6njf7n0g29znlq7hbfp9ii7qabhcwwvrj"))))
-    (build-system texlive-build-system)
-    (arguments '(#:tex-directory "latex/mflogo"))
-    (home-page "http://www.ctan.org/pkg/mflogo")
-    (synopsis "LaTeX support for Metafont logo fonts")
-    (description
-     "This package provides LaTeX and font definition files to access the
+(define-public texlive-mflogo
+  (let ((template (simple-texlive-package
+                   "texlive-mflogo"
+                   (list "/doc/latex/mflogo/"
+                         "/source/latex/mflogo/"
+                         "/fonts/source/public/mflogo/logosl8.mf")
+                   (base32
+                    "1vb4mg7fh4k54g7nqwiw3qm4iir8whpfnspis76l4sddzar1amh7"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:modules _ '())
+          '((guix build texlive-build-system)
+            (guix build utils)
+            (srfi srfi-1)
+            (srfi srfi-26)))
+         ((#:tex-directory _ #t)
+          "latex/mflogo")
+         ((#:phases phases '())
+          `(modify-phases ,phases
+             (add-after 'unpack 'chdir
+               (lambda _
+                 (chdir "source/latex/mflogo") #t))
+             (add-after 'build 'build-font-metrics
+               (lambda* (#:key inputs #:allow-other-keys)
+                 (let ((root "../../..")
+                       (mf (assoc-ref inputs "texlive-metafont"))
+                       (kl (assoc-ref inputs "texlive-knuth-lib")))
+                   ;; Tell mf where to find mf.base
+                   (setenv "MFBASES"
+                           (string-append mf "/share/texmf-dist/web2c"))
+                   ;; Tell mf where to look for source files
+                   (setenv "MFINPUTS"
+                           (string-append root ":"
+                                          mf "/share/texmf-dist/metafont/base:"
+                                          kl "/share/texmf-dist/fonts/source/public/knuth-lib:"
+                                          root "/fonts/source/public/mflogo/"))
+                   (for-each (lambda (font)
+                               (format #t "building font ~a\n" font)
+                               (invoke "mf" "-progname=mf"
+                                       "-output-directory=build"
+                                       (string-append "\\"
+                                                      "mode:=ljfour; "
+                                                      "mag:=1; "
+                                                      "scrollmode; "
+                                                      "input " (basename font))))
+                             (find-files (string-append root
+                                                        "/fonts/source/public/mflogo/")
+                                         "\\.mf$")))
+                 #t))
+             (add-before 'install 'install-fonts
+               (lambda* (#:key outputs #:allow-other-keys)
+                 (let* ((out (assoc-ref outputs "out"))
+                        (tfm (string-append
+                              out "/share/texmf-dist/fonts/tfm/public/mflogo")))
+                   (for-each (lambda (file)
+                               (install-file file tfm)
+                               (delete-file file))
+                             (find-files "build" "\\.tfm"))
+                   #t)))))))
+      (native-inputs
+       (list texlive-bin texlive-metafont texlive-knuth-lib))
+      (home-page "http://www.ctan.org/pkg/mflogo")
+      (synopsis "LaTeX support for Metafont logo fonts")
+      (description
+       "This package provides LaTeX and font definition files to access the
 Knuthian mflogo fonts described in The Metafontbook and to typeset Metafont
 logos in LaTeX documents.")
-    (license license:lppl)))
+      (license license:lppl))))
+
+(define-deprecated-package texlive-latex-mflogo texlive-mflogo)
 
 (define-public texlive-mflogo-font
   (package
@@ -1114,8 +1288,7 @@ source; they have since been autotraced and reissued in Adobe Type 1 format by
 Taco Hoekwater.")
     (license license:knuth)))
 
-(define-public texlive-fonts-mflogo-font
-  (deprecated-package "texlive-fonts-mflogo-font" texlive-mflogo-font))
+(define-deprecated-package texlive-fonts-mflogo-font texlive-mflogo-font)
 
 (define-public texlive-amsfonts
   (let ((template (simple-texlive-package
@@ -1131,6 +1304,8 @@ Taco Hoekwater.")
                     "15q70nkjf8wqzbd5ivcdx3i2sdgqxjb38q0qn9a2qw9i0qcnx6zw"))))
     (package
       (inherit template)
+      ;; TODO: This package is missing files.
+      (replacement texlive-amsfonts/fixed)
       (arguments
        (substitute-keyword-arguments (package-arguments template)
          ((#:build-targets _ #t)
@@ -1147,22 +1322,11 @@ Taco Hoekwater.")
           `(modify-phases ,phases
              (add-before 'build 'build-fonts
                (lambda* (#:key inputs #:allow-other-keys)
-                 (let ((mf  (assoc-ref inputs "texlive-union"))
-                       (src (string-append (getcwd) "/fonts/source/public/amsfonts/")))
-                   ;; Make METAFONT reproducible
-                   (setenv "SOURCE_DATE_EPOCH" "1")
-                   ;; Tell mf where to find mf.base
-                   (setenv "MFBASES" (string-append mf "/share/texmf-dist/web2c"))
-                   ;; Tell mf where to look for source files
-                   (setenv "MFINPUTS"
-                           (string-append src ":"
-                                          src "/cmextra:"
-                                          src "/cyrillic:"
-                                          src "/dummy:"
-                                          src "/symbols:"
-                                          mf "/share/texmf-dist/metafont/base:"
-                                          (assoc-ref inputs "texlive-cm")
-                                          "/share/texmf-dist/fonts/source/public/cm")))
+                 ;; Allow self fonts sources and other resources to be
+                 ;; discovered.
+                 (setenv "GUIX_TEXMF" (string-append (getenv "GUIX_TEXMF")
+                                                     ":" (getcwd)))
+
                  (let ((build (string-append (getcwd) "/build-fonts")))
                    (mkdir-p build)
                    (with-directory-excursion "fonts/source/public/amsfonts"
@@ -1184,23 +1348,23 @@ Taco Hoekwater.")
                  ;; convert the afm files instead.
                  (let ((build (string-append (getcwd) "/build-fonts/euler")))
                    (mkdir build)
-                   (with-directory-excursion "fonts/afm/public/amsfonts/"
+                   (with-directory-excursion "fonts/afm/public/amsfonts/euler"
                      (for-each (lambda (font)
                                  (format #t "converting afm font ~a\n" (basename font ".afm"))
                                  (invoke "afm2tfm" font
                                          (string-append build "/"
                                                         (basename font ".tfm"))))
-                               (find-files "." "\\.afm$")))
+                               (find-files "(cmextra|cyrillic|dummy|euler|symbols)"
+                                           "\\.afm$")))
 
                    ;; Frustratingly, not all fonts can be created this way.  To
                    ;; generate eufm8.tfm, for example, we first scale down
                    ;; eufm10.afm to eufm8.pl, and then generate the tfm file from
                    ;; the pl file.
                    (setenv "TEXINPUTS"
-                           (string-append build "//:"
+                           (string-append ":" build "//:"
                                           (getcwd) "/fonts/afm/public/amsfonts//:"
-                                          (getcwd) "/source/latex/amsfonts//:"
-                                          (assoc-ref inputs "texlive-union") "//"))
+                                          (getcwd) "/source/latex/amsfonts//:"))
                    (with-directory-excursion build
                      (for-each (match-lambda
                                  (((target-base target-size)
@@ -1235,19 +1399,15 @@ Taco Hoekwater.")
 
                                  (("eurm6" 6) ("eurm7" 7))
                                  (("eurm8" 8) ("eurm10" 10))
-                                 (("eurm9" 9) ("eurm10" 10))))))
-                 #t))
+                                 (("eurm9" 9) ("eurm10" 10))))))))
              (add-after 'install 'install-generated-fonts
                (lambda* (#:key inputs outputs #:allow-other-keys)
                  (copy-recursively "build-fonts"
                                    (string-append
                                     (assoc-ref outputs "out")
-                                    "/share/texmf-dist/fonts/tfm/public/amsfonts"))
-                 #t))))))
+                                    "/share/texmf-dist/fonts/tfm/public/amsfonts"))))))))
       (native-inputs
-       `(("texlive-union" ,(texlive-union (list texlive-tex-fontinst-base
-                                                texlive-cm
-                                                texlive-metafont-base)))))
+       (list (texlive-updmap.cfg (list texlive-fontinst))))
       (home-page "https://www.ctan.org/pkg/amsfonts")
       (synopsis "TeX fonts from the American Mathematical Society")
       (description
@@ -1263,12 +1423,9 @@ Modern family of fonts.  The Euler fonts are supported by separate packages;
 details can be found in the documentation.")
       (license license:silofl1.1))))
 
-;; XXX: we can only change texlive-amsfonts on the core-updates branch.  This
-;; patched version generates only tfm files for fonts provided by the source
-;; files of this package, not variants of the fonts provided by texlive-cm.
-(define-public texlive-amsfonts/patched
+(define-public texlive-amsfonts/fixed
   (let ((template (simple-texlive-package
-                   "texlive-amsfonts"
+                   "texlive-amsfonts-fixed"
                    (list "/source/latex/amsfonts/"
                          "/fonts/source/public/amsfonts/"
                          "/fonts/type1/public/amsfonts/"
@@ -1296,62 +1453,60 @@ details can be found in the documentation.")
           `(modify-phases ,phases
              (add-before 'build 'build-fonts
                (lambda* (#:key inputs #:allow-other-keys)
-                 (let ((mf  (assoc-ref inputs "texlive-union"))
-                       (src (string-append (getcwd) "/fonts/source/public/amsfonts/")))
-                   ;; Make METAFONT reproducible
-                   (setenv "SOURCE_DATE_EPOCH" "1")
-                   ;; Tell mf where to find mf.base
-                   (setenv "MFBASES" (string-append mf "/share/texmf-dist/web2c"))
-                   ;; Tell mf where to look for source files
-                   (setenv "MFINPUTS"
-                           (string-append src ":"
-                                          src "/cmextra:"
-                                          src "/cyrillic:"
-                                          src "/dummy:"
-                                          src "/symbols:"
-                                          mf "/share/texmf-dist/metafont/base:"
-                                          (assoc-ref inputs "texlive-cm")
-                                          "/share/texmf-dist/fonts/source/public/cm")))
-                 (let ((build (string-append (getcwd) "/build-fonts")))
+                 ;; Allow self fonts sources and other resources to be
+                 ;; discovered.
+                 (setenv "GUIX_TEXMF" (string-append (getenv "GUIX_TEXMF")
+                                                     ":" (getcwd)))
+
+                 (let ((build "/tmp/build-fonts"))
                    (mkdir-p build)
                    (with-directory-excursion "fonts/source/public/amsfonts"
                      (for-each (lambda (font)
                                  (format #t "building font ~a\n" (basename font ".mf"))
                                  (with-directory-excursion (dirname font)
-                                   (invoke "mf" "-progname=mf"
-                                           (string-append "-output-directory=" build)
-                                           (string-append "\\"
-                                                          "mode:=ljfour; "
-                                                          "mag:=1; "
-                                                          "nonstopmode; "
-                                                          "input "
-                                                          (getcwd) "/"
-                                                          (basename font ".mf")))))
-                               (find-files "." "[0-9]+\\.mf$"))))
+                                   (let ((outdir (string-append build "/" (dirname font))))
+                                     (mkdir-p outdir)
+                                     (invoke "mf" "-progname=mf"
+                                             (string-append "-output-directory=" outdir)
+                                             (string-append "\\"
+                                                            "mode:=ljfour; "
+                                                            "mag:=1; "
+                                                            "nonstopmode; "
+                                                            "input "
+                                                            (getcwd) "/"
+                                                            (basename font ".mf"))))))
+                               (find-files "." "([0-9]+|dummy)\\.mf$"))))
 
                  ;; There are no metafont sources for the Euler fonts, so we
                  ;; convert the afm files instead.
-                 (let ((build (string-append (getcwd) "/build-fonts/euler")))
-                   (mkdir build)
+                 (let ((build "/tmp/build-fonts"))
+                   (mkdir-p build)
                    (with-directory-excursion "fonts/afm/public/amsfonts/"
+                     ;; These files have bogus values for the Descender field,
+                     ;; so we can't process them.
+                     (substitute* (find-files "." "eus(b|m).*\\.afm$")
+                       (("^Descender -2147483648") ""))
+
                      (for-each (lambda (font)
-                                 (format #t "converting afm font ~a\n" (basename font ".afm"))
-                                 (invoke "afm2tfm" font
-                                         (string-append build "/"
-                                                        (basename font ".tfm"))))
-                               (find-files "(cmextra|cyrillic|dummy|euler|symbols)"
-                                           "\\.afm$")))
+                                 (let ((directory (string-append build "/" (dirname font))))
+                                   (mkdir-p directory)
+                                   (format #t "converting afm font ~a\n" (basename font ".afm"))
+                                   (invoke "afm2tfm" font
+                                           (string-append directory "/"
+                                                          (basename font ".afm")
+                                                          ".tfm"))))
+                               (find-files "." "\\.afm$")))
 
                    ;; Frustratingly, not all fonts can be created this way.  To
                    ;; generate eufm8.tfm, for example, we first scale down
                    ;; eufm10.afm to eufm8.pl, and then generate the tfm file from
                    ;; the pl file.
                    (setenv "TEXINPUTS"
-                           (string-append build "//:"
+                           (string-append ":" build "//:"
                                           (getcwd) "/fonts/afm/public/amsfonts//:"
-                                          (getcwd) "/source/latex/amsfonts//:"
-                                          (assoc-ref inputs "texlive-union") "//"))
-                   (with-directory-excursion build
+                                          (getcwd) "/source/latex/amsfonts//:"))
+
+                   (with-directory-excursion (string-append build "/euler")
                      (for-each (match-lambda
                                  (((target-base target-size)
                                    (source-base source-size))
@@ -1370,14 +1525,13 @@ details can be found in the documentation.")
                                           (string-append target-base ".tfm"))
                                   (delete-file (string-append target-base ".pl"))))
 
-                               '((("eufm8" 8) ("eufm10" 10))
-
-                                 (("eufb6" 6) ("eufb7" 7))
+                               '((("eufb6" 6) ("eufb7" 7))
                                  (("eufb8" 8) ("eufb10" 10))
                                  (("eufb9" 9) ("eufb10" 10))
 
-                                 (("eufm6" 6) ("eufb7" 7))
-                                 (("eufm9" 9) ("eufb10" 10))
+                                 (("eufm6" 6) ("eufm7" 7))
+                                 (("eufm8" 8) ("eufm10" 10))
+                                 (("eufm9" 9) ("eufm10" 10))
 
                                  (("eurb6" 6) ("eurb7" 7))
                                  (("eurb8" 8) ("eurb10" 10))
@@ -1385,19 +1539,39 @@ details can be found in the documentation.")
 
                                  (("eurm6" 6) ("eurm7" 7))
                                  (("eurm8" 8) ("eurm10" 10))
-                                 (("eurm9" 9) ("eurm10" 10))))))
-                 #t))
+                                 (("eurm9" 9) ("eurm10" 10))
+
+                                 (("eusb6" 6) ("eusb7" 7))
+                                 (("eusb8" 8) ("eusb10" 10))
+                                 (("eusb9" 9) ("eusb10" 10))
+
+                                 (("eusm6" 6) ("eusm7" 7))
+                                 (("eusm8" 8) ("eusm10" 10))
+                                 (("eusm9" 9) ("eusm10" 10))))))))
              (add-after 'install 'install-generated-fonts
                (lambda* (#:key inputs outputs #:allow-other-keys)
-                 (copy-recursively "build-fonts"
+                 (copy-recursively "/tmp/build-fonts"
                                    (string-append
                                     (assoc-ref outputs "out")
-                                    "/share/texmf-dist/fonts/tfm/public/amsfonts"))
-                 #t))))))
+                                    "/share/texmf-dist/fonts/tfm/public/amsfonts"))))
+             (add-after 'copy-files 'remove-extra-files
+               (lambda* (#:key inputs outputs #:allow-other-keys)
+                 (let ((prefix (string-append
+                                (assoc-ref outputs "out")
+                                "/share/texmf-dist/fonts/")))
+                   (for-each delete-file
+                             (find-files (string-append prefix
+                                                        "tfm/public/amsfonts/")
+                                         "\\.(mtx|pl|log|600gf)"))
+                   (for-each delete-file-recursively
+                             (list (string-append (assoc-ref outputs "out")
+                                                  "/share/texmf-dist/build/")
+                                   (string-append prefix
+                                                  "tfm/public/amsfonts/cm/")
+                                   (string-append prefix
+                                                  "tfm/public/amsfonts/latxfont/"))))))))))
       (native-inputs
-       `(("texlive-union" ,(texlive-union (list texlive-tex-fontinst-base
-                                                texlive-cm
-                                                texlive-metafont-base)))))
+       (list (texlive-updmap.cfg (list texlive-fontinst))))
       (home-page "https://www.ctan.org/pkg/amsfonts")
       (synopsis "TeX fonts from the American Mathematical Society")
       (description
@@ -1413,11 +1587,9 @@ Modern family of fonts.  The Euler fonts are supported by separate packages;
 details can be found in the documentation.")
       (license license:silofl1.1))))
 
-(define-public texlive-fonts-amsfonts
-  (deprecated-package "texlive-fonts-amsfonts" texlive-amsfonts))
+(define-deprecated-package texlive-fonts-amsfonts texlive-amsfonts)
 
-(define-public texlive-latex-amsfonts
-  (deprecated-package "texlive-latex-amsfonts" texlive-amsfonts))
+(define-deprecated-package texlive-latex-amsfonts texlive-amsfonts)
 
 (define-public texlive-mkpattern
   (package
@@ -1461,7 +1633,7 @@ output encodings, and features generation of clean UTF-8 patterns.")
              ;; Build tfm font.
              (replace 'build
                (lambda* (#:key inputs #:allow-other-keys)
-                 (let ((mf (assoc-ref inputs "texlive-metafont-base")))
+                 (let ((mf (assoc-ref inputs "texlive-metafont")))
                    ;; Tell mf where to find mf.base
                    (setenv "MFBASES" (string-append mf "/share/texmf-dist/web2c"))
                    ;; Tell mf where to look for source files
@@ -1486,9 +1658,7 @@ output encodings, and features generation of clean UTF-8 patterns.")
                                  "/share/texmf-dist/fonts/tfm/public/etex/"))
                  #t))))))
       (native-inputs
-       `(("texlive-bin" ,texlive-bin)
-         ("texlive-metafont-base" ,texlive-metafont-base)
-         ("texlive-cm" ,texlive-cm)))
+       (list texlive-bin texlive-metafont texlive-cm))
       (home-page "https://www.ctan.org/pkg/etex")
       (synopsis "Extended version of TeX")
       (description
@@ -1505,7 +1675,7 @@ incorporates the e-TeX extensions.")
               "texlive-tex-plain"
               (list "/tex/plain/")
               (base32
-               "1m4qpaszwfv7j8a85rlwl7rs4iv5nlj67c1vvn6ysly72h9gjydb")
+               "0gwygkm8i2jmpf7bfg6fb6824rl7fq4a2s0wni73v0fz6s4chr1n")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/plain")
     (synopsis "Plain TeX format and supporting files")
@@ -1612,11 +1782,9 @@ language.")
   (package
     (inherit (texlive-hyphen-package
               "texlive-hyphen-bulgarian" "bg"
-              (list "/doc/generic/hyph-utf8/bg/azbukaExtended.pdf"
-                    "/doc/generic/hyph-utf8/bg/azbukaExtended.tex"
-                    "/tex/generic/hyph-utf8/patterns/tex/hyph-bg.tex")
+              '("/tex/generic/hyph-utf8/patterns/tex/hyph-bg.tex")
               (base32
-               "0ngrgw2rmipxss76rgfk62x9nnsgwmaxxna2jqxxhybai3q39mx5")))
+               "0m254y71j3qrb71klvfalfmic3kjy31l85b9cgpdm5yznlsq3i8d")))
     (synopsis "Hyphenation patterns for Bulgarian")
     (description "The package provides hyphenation patterns for the Bulgarian
 language in T2A and UTF-8 encodings.")
@@ -1640,9 +1808,10 @@ T1/EC and UTF-8 encodings.")
   (package
     (inherit (texlive-hyphen-package
               "texlive-hyphen-chinese" "zh-latn-pinyin"
-              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-zh-latn-pinyin.tex")
+              '("/tex/generic/hyph-utf8/patterns/ptex/hyph-zh-latn-pinyin.ec.tex"
+                "/tex/generic/hyph-utf8/patterns/tex/hyph-zh-latn-pinyin.tex")
               (base32
-               "1j68mry2zy91m1kbzwhin5q2jajf6xh48npdds8wvp1sqmzih2a3")))
+               "1hhh30hcjymm2igpllly04cavsfmd6xrjkd9zax6b2wdxn3ka4pm")))
     (synopsis "Hyphenation patterns for unaccented Chinese pinyin")
     (description "The package provides hyphenation patterns for unaccented
 Chinese pinyin T1/EC and UTF-8 encodings.")
@@ -1784,12 +1953,24 @@ be replaced by files tailored to individual languages.")
               "texlive-hyphen-finnish" "fi"
               (list "/tex/generic/hyph-utf8/patterns/tex/hyph-fi.tex")
               (base32
-               "1f72b4ydb4zddvw2i004948khmwzigxkdkwfym5v1kkq0183sfpj")))
+               "1pa8sjs9zvnv1y6dma4s60sf9cr4zrvhxwm6i8cnshm84q16w4bc")))
     (synopsis "Hyphenation patterns for Finnish")
     (description "The package provides hyphenation patterns for Finnish in
 T1/EC and UTF-8 encodings.")
     (license license:public-domain)))
 
+(define-public texlive-hyphen-schoolfinnish
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-schoolfinnish" "fi-x-school"
+              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-fi-x-school.tex")
+              (base32
+               "1w5n6gaclgifbbnafg32vz3mfaibyldvh4yh1ya3sq9fwfmv035c")))
+    (synopsis "Hyphenation patterns for Finnish for school")
+    (description "The package provides hyphenation patterns for Finnish for
+school in T1/EC and UTF-8 encodings.")
+    (license license:public-domain)))
+
 (define-public texlive-hyphen-french
   (package
     (inherit (texlive-hyphen-package
@@ -1851,7 +2032,7 @@ T8M, T8K, and UTF-8 encodings.")
                     "/tex/generic/dehyph/dehyphtex.tex"
                     "/tex/generic/dehyph/README")
               (base32
-               "0wp5by5kkf4ac6li5mbppqzw11500wa7f22p5vpz3m1kwd15zavw")))
+               "17cc5hd0fr3ykpgly9nxaiz4sik3kmfn2wyxz1fkdnqqhl3i41a0")))
     (synopsis "Hyphenation patterns for German")
     (description "This package provides hyphenation patterns for German in
 T1/EC and UTF-8 encodings, for traditional and reformed spelling, including
@@ -1881,10 +2062,10 @@ in monotonic and polytonic spelling in LGR and UTF-8 encodings.")
     (inherit (texlive-hyphen-package
               "texlive-hyphen-hungarian" "hu"
               (list "/doc/generic/huhyphen/"
-                    "/doc/generic/hyph-utf8/hu/"
+                    "/doc/generic/hyph-utf8/languages/hu/"
                     "/tex/generic/hyph-utf8/patterns/tex/hyph-hu.tex")
               (base32
-               "1j1b8kksg9r8nmjyjvvz8fr3hgcrjj6jlybf9p06nwrrwm2r8j8f")))
+               "006d2290lcsqzh9ljansbaj9k52s17zgkw0kpsspn5l7a8n00zcl")))
     (synopsis "Hyphenation patterns for Hungarian")
     (description "This package provides hyphenation patterns for Hungarian in
 T1/EC and UTF-8 encodings.")
@@ -1996,11 +2177,12 @@ Europe, in T1/EC and UTF-8 encodings.")
   (package
     (inherit (texlive-hyphen-package
               "texlive-hyphen-latin" '("la-x-classic" "la-x-liturgic" "la")
-              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-la-x-classic.tex"
-                    "/tex/generic/hyph-utf8/patterns/tex/hyph-la-x-liturgic.tex"
-                    "/tex/generic/hyph-utf8/patterns/tex/hyph-la.tex")
+              '("/tex/generic/hyph-utf8/patterns/tex/hyph-la-x-classic.tex"
+                "/tex/generic/hyph-utf8/patterns/tex/hyph-la-x-liturgic.tex"
+                "/tex/generic/hyph-utf8/patterns/tex/hyph-la.tex"
+                "/tex/generic/hyph-utf8/patterns/tex-8bit/hyph-la-x-classic.ec.tex")
               (base32
-               "0rxg8a4s5cpj8vlkz5a74a036axda5jqgvr3f9aj2cc2x9f2f3w9")))
+               "119rf6sk1f639ky6zr9njn21nsxzgfmjci94y26745qs8w08ilkl")))
     (synopsis "Liturgical Latin hyphenation patterns")
     (description "This package provides hyphenation patterns for Latin in
 T1/EC and UTF-8 encodings, mainly in modern spelling (u when u is needed and v
@@ -2042,6 +2224,19 @@ L7X and UTF-8 encodings.")
     ;; the hyph-utf8 package we choose the LPPL license.
     (license license:lppl)))
 
+(define-public texlive-hyphen-macedonian
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-macedonian" "mk"
+              '("/tex/generic/hyph-utf8/patterns/tex/hyph-mk.tex"
+                "/tex/generic/hyph-utf8/patterns/tex-8bit/hyph-mk.macedonian.tex")
+              (base32
+               "1fv6y8gpic5ciw8cclfxc8h3wr5xir1j0a7shixja1pmdyz7db2b")))
+    (synopsis "Macedonian hyphenation patterns")
+    (description "This package provides hyphenation patterns for Macedonian.")
+    ;; XXX: License just says 'GPL'.  Assume GPL2 since the file predates GPL3.
+    (license license:gpl2+)))
+
 (define-public texlive-hyphen-mongolian
   (package
     (inherit (texlive-hyphen-package
@@ -2180,10 +2375,10 @@ T2A and UTF-8 encodings.")
   (package
     (inherit (texlive-hyphen-package
               "texlive-hyphen-sanskrit" "sa"
-              (list "/doc/generic/hyph-utf8/sa/hyphenmin.txt"
+              (list "/doc/generic/hyph-utf8/languages/sa/hyphenmin.txt"
                     "/tex/generic/hyph-utf8/patterns/tex/hyph-sa.tex")
               (base32
-               "0gi2qk0wf388h9n25gzhv0cdz67ph83wal8h3iz2sqnpdjsw8kpc")))
+               "1bkzj8swj4lbswf1vr4pb1jg6dixzs7p8h8zm8s8as52h442aida")))
     (synopsis "Sanskrit hyphenation patterns")
     (description "This package provides hyphenation patterns for Sanskrit and
 Prakrit in longdesc transliteration, and in Devanagari, Bengali, Kannada,
@@ -2241,7 +2436,7 @@ T1/EC and UTF-8 encodings.")
               "texlive-hyphen-spanish" "es"
               (list "/tex/generic/hyph-utf8/patterns/tex/hyph-es.tex")
               (base32
-               "1h3yg9vcq0lf7hxv0ahkqmyg269dxjs8m2mz8sgz5l1fxmvahvaj")))
+               "05lbvjkj304xxghyihk8js0kmg97ddlgijld3bp81bc28h4cav0v")))
     (synopsis "Hyphenation patterns for Spanish")
     (description "The package provides hyphenation patterns for Spanish in
 T1/EC and UTF-8 encodings.")
@@ -2361,7 +2556,7 @@ T1/EC and UTF-8 encodings.")
                     "/doc/generic/hyph-utf8/img/miktex-languages.png"
                     "/doc/generic/hyph-utf8/img/texlive-collection.png")
               (base32
-               "1bar5mc808ch20anhqrdxcwiych359qsvr7mggxpg2l2kq5xdyq0")))
+               "0rgp0zn36gwzqwpmjb9h01ns3m19v3r7lpw1h0pc9bx115w6c9jx")))
     (outputs '("out" "doc"))
     (build-system gnu-build-system)
     (arguments
@@ -2397,7 +2592,7 @@ T1/EC and UTF-8 encodings.")
              (setenv "TFMFONTS"
                      (string-append (assoc-ref inputs "texlive-cm")
                                     "/share/texmf-dist/fonts/tfm/public/cm:"
-                                    (assoc-ref inputs "texlive-fonts-knuth-lib")
+                                    (assoc-ref inputs "texlive-knuth-lib")
                                     "/share/texmf-dist/fonts/tfm/public/knuth-lib"))
              ;; ...and find all tex files in this environment.
              (setenv "TEXINPUTS"
@@ -2445,14 +2640,14 @@ T1/EC and UTF-8 encodings.")
                 (string-append out "/share/texmf-dist/tex/luatex/hyph-utf8/")))
              #t)))))
     (native-inputs
-     `(("ruby" ,ruby)
-       ("texlive-bin" ,texlive-bin)
-       ;; The following packages are needed for build "tex.fmt", which we need
-       ;; for a working "tex".
-       ("texlive-tex-plain" ,texlive-tex-plain)
-       ("texlive-cm" ,texlive-cm)
-       ("texlive-fonts-knuth-lib" ,texlive-fonts-knuth-lib)
-       ("texlive-hyphen-base" ,texlive-hyphen-base)))
+     (list ruby
+           texlive-bin
+           ;; The following packages are needed for build "tex.fmt", which we need
+           ;; for a working "tex".
+           texlive-tex-plain
+           texlive-cm
+           texlive-knuth-lib
+           texlive-hyphen-base))
     (home-page "https://ctan.org/pkg/hyph-utf8")
     (synopsis "Hyphenation patterns expressed in UTF-8")
     (description "Modern native UTF-8 engines such as XeTeX and LuaTeX need
@@ -2484,8 +2679,7 @@ converters, will completely supplant the older patterns.")
                    license:public-domain
                    license:wtfpl2))))
 
-(define-public texlive-generic-hyph-utf8
-  (deprecated-package "texlive-generic-hyph-utf8" texlive-hyph-utf8))
+(define-deprecated-package texlive-generic-hyph-utf8 texlive-hyph-utf8)
 
 (define-public texlive-dehyph-exptl
   (package
@@ -2494,11 +2688,10 @@ converters, will completely supplant the older patterns.")
               (list "/tex/generic/dehyph-exptl/"
                     "/doc/generic/dehyph-exptl/")
               (base32
-               "1fnqc63gz8gvdyfz45bx8dxn1r1rwrypahs3bqd2vlc8ff76xp86")
+               "0l57a0r4gycp94kz6lrxqvh9m57j2shmbr2laf5zjb0qnrisq46d")
               #:trivial? #t))
     (propagated-inputs
-     `(("texlive-hyphen-base" ,texlive-hyphen-base)
-       ("texlive-hyph-utf8" ,texlive-hyph-utf8)))
+     (list texlive-hyphen-base texlive-hyph-utf8))
     (home-page "http://projekte.dante.de/Trennmuster/WebHome")
     (synopsis "Hyphenation patterns for German")
     (description "The package provides experimental hyphenation patterns for
@@ -2509,8 +2702,7 @@ bundle.")
     ;; under LPPL.
     (license (list license:expat license:lppl))))
 
-(define-public texlive-generic-dehyph-exptl
-  (deprecated-package "texlive-generic-dehyph-exptl" texlive-dehyph-exptl))
+(define-deprecated-package texlive-generic-dehyph-exptl texlive-dehyph-exptl)
 
 (define-public texlive-ukrhyph
   (package
@@ -2555,11 +2747,7 @@ T2A.")
                      (invoke "make" "-f"
                              (string-append cwd "/source/generic/ruhyphen/Makefile"))))))))))
       (native-inputs
-       `(("coreutils" ,coreutils)
-         ("gawk" ,gawk)
-         ("sed" ,sed)
-         ("grep" ,grep)
-         ("perl" ,perl)))
+       (list coreutils gawk sed grep perl))
       (home-page "https://www.ctan.org/pkg/ruhyphen")
       (synopsis "Hyphenation patterns for Russian")
       (description "The package provides a collection of Russian hyphenation
@@ -2568,48 +2756,65 @@ UCY (Omega Unicode Cyrillic), LCY, LWN (OT2), and koi8-r.")
       (license license:lppl))))
 
 (define-public texlive-kpathsea
-  (package
-    (inherit (simple-texlive-package
-              "texlive-kpathsea"
-              (list "/web2c/amiga-pl.tcx"
-                    "/web2c/cp1250cs.tcx"
-                    "/web2c/cp1250pl.tcx"
-                    "/web2c/cp1250t1.tcx"
-                    "/web2c/cp227.tcx"
-                    "/web2c/cp852-cs.tcx"
-                    "/web2c/cp852-pl.tcx"
-                    "/web2c/cp8bit.tcx"
-                    "/web2c/empty.tcx"
-                    "/web2c/fmtutil.cnf"
-                    "/web2c/il1-t1.tcx"
-                    "/web2c/il2-cs.tcx"
-                    "/web2c/il2-pl.tcx"
-                    "/web2c/il2-t1.tcx"
-                    "/web2c/kam-cs.tcx"
-                    "/web2c/kam-t1.tcx"
-                    "/web2c/macce-pl.tcx"
-                    "/web2c/macce-t1.tcx"
-                    "/web2c/maz-pl.tcx"
-                    "/web2c/mktex.cnf"
-                    "/web2c/mktex.opt"
-                    "/web2c/mktexdir"
-                    "/web2c/mktexdir.opt"
-                    "/web2c/mktexnam"
-                    "/web2c/mktexnam.opt"
-                    "/web2c/mktexupd"
-                    "/web2c/natural.tcx"
-                    "/web2c/tcvn-t5.tcx"
-                    "/web2c/viscii-t5.tcx")
-              (base32
-               "191i8n3g46p53bb9dkx2ggwpzy7skgg0pbklsrpx8x4ayd86wcaf")
-              #:trivial? #t))
-    (home-page "https://www.tug.org/texlive/")
-    (synopsis "Files related to the path searching library for TeX")
-    (description "Kpathsea is a library and utility programs which provide
+  (let ((template (simple-texlive-package
+                   "texlive-kpathsea"
+                   (list "/web2c/amiga-pl.tcx"
+                         "/web2c/cp1250cs.tcx"
+                         "/web2c/cp1250pl.tcx"
+                         "/web2c/cp1250t1.tcx"
+                         "/web2c/cp227.tcx"
+                         "/web2c/cp852-cs.tcx"
+                         "/web2c/cp852-pl.tcx"
+                         "/web2c/cp8bit.tcx"
+                         "/web2c/empty.tcx"
+                         "/web2c/fmtutil.cnf"
+                         "/web2c/il1-t1.tcx"
+                         "/web2c/il2-cs.tcx"
+                         "/web2c/il2-pl.tcx"
+                         "/web2c/il2-t1.tcx"
+                         "/web2c/kam-cs.tcx"
+                         "/web2c/kam-t1.tcx"
+                         "/web2c/macce-pl.tcx"
+                         "/web2c/macce-t1.tcx"
+                         "/web2c/maz-pl.tcx"
+                         "/web2c/mktex.cnf"
+                         "/web2c/mktex.opt"
+                         "/web2c/mktexdir"
+                         "/web2c/mktexdir.opt"
+                         "/web2c/mktexnam"
+                         "/web2c/mktexnam.opt"
+                         "/web2c/mktexupd"
+                         "/web2c/natural.tcx"
+                         "/web2c/tcvn-t5.tcx"
+                         "/web2c/viscii-t5.tcx")
+                   (base32
+                    "00q2nny7lw7jxyln6ch4h0alygbrzk8yynliyc291m53kds1h0mr")
+                   #:trivial? #t)))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:phases phases '%standard-phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'patch-references
+               (lambda* (#:key inputs #:allow-other-keys)
+                 (let ((dirs (map dirname (list (which "sed")
+                                                (which "awk")))))
+                   (substitute* '("web2c/mktexdir"
+                                  "web2c/mktexnam"
+                                  "web2c/mktexupd")
+                     (("^version=" m)
+                      (format #false "PATH=\"~{~a:~}$PATH\"; export PATH~%~a"
+                              dirs m))))))))))
+      (inputs
+       (list sed gawk))
+      (home-page "https://www.tug.org/texlive/")
+      (synopsis "Files related to the path searching library for TeX")
+      (description "Kpathsea is a library and utility programs which provide
 path searching facilities for TeX file types, including the self-locating
 feature required for movable installations, layered on top of a general search
 mechanism.  This package provides supporting files.")
-    (license license:lgpl3+)))
+      (license license:lgpl3+))))
 
 (define-public texlive-latexconfig
   (package
@@ -2617,7 +2822,7 @@ mechanism.  This package provides supporting files.")
               "texlive-latexconfig"
               (list "/tex/latex/latexconfig/")
               (base32
-               "1wa7yhdpnz1nyidwgli68fyr33jn951bnniqrih5lj98k09rqc3h")
+               "10ynmd8b9b9l1wl1mva23yz4zir53p6r5z31s39wmxz19pj12qvx")
               #:trivial? #t))
     (home-page "https://www.tug.org/")
     (synopsis "Configuration files for LaTeX-related formats")
@@ -2643,7 +2848,7 @@ formats.")
                          "/tex/latex/base/testpage.tex"
                          "/tex/latex/base/texsys.cfg")
                    (base32
-                    "0m0gjb4hbsf2iqkkx3px4f28r2scjvsjv4zb2whkbnb44apyw1f0")
+                    "0msyjz0937rc7hs77v6la152sdiwd73qj41z1mlyh0m3dns9qz4g")
                    #:trivial? #t)))
     (package
       (inherit template)
@@ -2661,8 +2866,7 @@ formats.")
              (add-after 'unpack 'fix-lua-sources
                (lambda _
                  (substitute* "source/latex/base/ltluatex.dtx"
-                   (("	") "  "))
-                 #t))
+                   (("	") "  "))))
              (replace 'build
                (lambda* (#:key inputs #:allow-other-keys)
                  ;; Find required fonts
@@ -2677,7 +2881,7 @@ formats.")
                                '(("texlive-etex" . "/etex")
                                  ("texlive-cm" . "/cm")
                                  ("texlive-fonts-latex" . "/latex-fonts")
-                                 ("texlive-fonts-knuth-lib" . "/knuth-lib")))
+                                 ("texlive-knuth-lib" . "/knuth-lib")))
                           ":"))
                  (let ((cwd (getcwd)))
                    (setenv "TEXINPUTS"
@@ -2687,7 +2891,8 @@ formats.")
                             cwd "/build:"
                             (string-join
                              (map (match-lambda ((_ . dir) dir)) inputs)
-                             "//:"))))
+                             "//:")))
+                   (setenv "LUAINPUTS" (string-append cwd "/build:")))
 
                  ;; This is the actual build step.
                  (mkdir "build")
@@ -2704,12 +2909,13 @@ formats.")
                  (let ((disabled-formats
                         '("aleph aleph" "lamed aleph" "uptex uptex" "euptex euptex"
                           "eptex eptex" "ptex ptex" "pdfxmltex pdftex" "platex eptex"
+                          "platex-dev eptex" "uplatex-dev euptex"
                           "csplain pdftex" "mf mf-nowin" "mex pdftex" "pdfmex pdftex"
-                          "luacsplain luatex"
-                          ,@(if (string-prefix? "powerpc64le"
-                                                (or (%current-target-system)
-                                                    (%current-system)))
-                              '("luajittex") '())
+                          "luacsplain luatex" "optex luatex"
+                          ;; LuaJIT is not ported to powerpc64le* yet and
+                          ;; building these fail on powerpc.
+                          ,@(if (target-powerpc?)
+                              '("luajittex" "luajithbtex" "mfluajit") '())
                           "cont-en xetex" "cont-en pdftex" "pdfcsplain xetex"
                           "pdfcsplain pdftex" "pdfcsplain luatex" "cslatex pdftex"
                           "mptopdf pdftex" "uplatex euptex" "jadetex pdftex"
@@ -2724,13 +2930,15 @@ formats.")
                    (make-file-writable "web2c/fmtutil.cnf")
                    (substitute* "web2c/fmtutil.cnf"
                      (((string-append "^(" (string-join disabled-formats "|") ")") m)
-                      (string-append "#! " m))))
+                      (string-append "#! " m))
+                     (("translate-file=cp227")
+                      (format #f "translate-file=~a/share/texmf-dist/web2c/cp227"
+                              (assoc-ref inputs "texlive-kpathsea")))))
                  (invoke "fmtutil-sys" "--all"
                          "--fmtdir=web2c"
                          (string-append "--cnffile=web2c/fmtutil.cnf"))
                  ;; We don't actually want to install it.
-                 (delete-file "web2c/fmtutil.cnf")
-                 #t))
+                 (delete-file "web2c/fmtutil.cnf")))
              (add-after 'install 'install-more
                (lambda* (#:key inputs outputs #:allow-other-keys)
                  (let* ((out (assoc-ref outputs "out"))
@@ -2751,8 +2959,7 @@ formats.")
                    (for-each (cut install-file <> target)
                              (find-files "build" ".*"))
                    (for-each (cut install-file <> web2c)
-                             (find-files "web2c" ".*"))
-                   #t)))))))
+                             (find-files "web2c" ".*")))))))))
       (native-inputs
        `(("texlive-bin" ,texlive-bin)
          ("texlive-tex-ini-files" ,texlive-tex-ini-files)
@@ -2760,7 +2967,7 @@ formats.")
          ("texlive-kpathsea" ,texlive-kpathsea)
          ("texlive-cm" ,texlive-cm)
          ("texlive-fonts-latex" ,texlive-fonts-latex)
-         ("texlive-fonts-knuth-lib" ,texlive-fonts-knuth-lib)
+         ("texlive-knuth-lib" ,texlive-knuth-lib)
          ("texlive-luatexconfig"
           ,(texlive-origin
             "texlive-luatexconfig" (number->string %texlive-revision)
@@ -2768,74 +2975,82 @@ formats.")
                   "/tex/generic/config/luatexiniconfig.tex"
                   "/web2c/texmfcnf.lua")
             (base32
-             "1gi87wy12r8w8fhx9ajcid382dmqzf6b9070b5nndvbbjrvhwf23")))))
+             "0yjx7nw9mgfgnq1givkzbxh7z7ncw1liaddjgm7n2nwn0aw6xfdg")))))
       (propagated-inputs
-       `(("texlive-dehyph-exptl" ,texlive-dehyph-exptl)
-         ("texlive-etex" ,texlive-etex)
-         ("texlive-hyph-utf8" ,texlive-hyph-utf8)
-         ("texlive-hyphen-base" ,texlive-hyphen-base)
-         ("texlive-hyphen-afrikaans" ,texlive-hyphen-afrikaans)
-         ("texlive-hyphen-ancientgreek" ,texlive-hyphen-ancientgreek)
-         ("texlive-hyphen-armenian" ,texlive-hyphen-armenian)
-         ("texlive-hyphen-basque" ,texlive-hyphen-basque)
-         ("texlive-hyphen-belarusian" ,texlive-hyphen-belarusian)
-         ("texlive-hyphen-bulgarian" ,texlive-hyphen-bulgarian)
-         ("texlive-hyphen-catalan" ,texlive-hyphen-catalan)
-         ("texlive-hyphen-chinese" ,texlive-hyphen-chinese)
-         ("texlive-hyphen-churchslavonic" ,texlive-hyphen-churchslavonic)
-         ("texlive-hyphen-coptic" ,texlive-hyphen-coptic)
-         ("texlive-hyphen-croatian" ,texlive-hyphen-croatian)
-         ("texlive-hyphen-czech" ,texlive-hyphen-czech)
-         ("texlive-hyphen-danish" ,texlive-hyphen-danish)
-         ("texlive-hyphen-dutch" ,texlive-hyphen-dutch)
-         ("texlive-hyphen-english" ,texlive-hyphen-english)
-         ("texlive-hyphen-esperanto" ,texlive-hyphen-esperanto)
-         ("texlive-hyphen-estonian" ,texlive-hyphen-estonian)
-         ("texlive-hyphen-ethiopic" ,texlive-hyphen-ethiopic)
-         ("texlive-hyphen-finnish" ,texlive-hyphen-finnish)
-         ("texlive-hyphen-french" ,texlive-hyphen-french)
-         ("texlive-hyphen-friulan" ,texlive-hyphen-friulan)
-         ("texlive-hyphen-galician" ,texlive-hyphen-galician)
-         ("texlive-hyphen-georgian" ,texlive-hyphen-georgian)
-         ("texlive-hyphen-german" ,texlive-hyphen-german)
-         ("texlive-hyphen-greek" ,texlive-hyphen-greek)
-         ("texlive-hyphen-hungarian" ,texlive-hyphen-hungarian)
-         ("texlive-hyphen-icelandic" ,texlive-hyphen-icelandic)
-         ("texlive-hyphen-indic" ,texlive-hyphen-indic)
-         ("texlive-hyphen-indonesian" ,texlive-hyphen-indonesian)
-         ("texlive-hyphen-interlingua" ,texlive-hyphen-interlingua)
-         ("texlive-hyphen-irish" ,texlive-hyphen-irish)
-         ("texlive-hyphen-italian" ,texlive-hyphen-italian)
-         ("texlive-hyphen-kurmanji" ,texlive-hyphen-kurmanji)
-         ("texlive-hyphen-latin" ,texlive-hyphen-latin)
-         ("texlive-hyphen-latvian" ,texlive-hyphen-latvian)
-         ("texlive-hyphen-lithuanian" ,texlive-hyphen-lithuanian)
-         ("texlive-hyphen-mongolian" ,texlive-hyphen-mongolian)
-         ("texlive-hyphen-norwegian" ,texlive-hyphen-norwegian)
-         ("texlive-hyphen-occitan" ,texlive-hyphen-occitan)
-         ("texlive-hyphen-pali" ,texlive-hyphen-pali)
-         ("texlive-hyphen-piedmontese" ,texlive-hyphen-piedmontese)
-         ("texlive-hyphen-polish" ,texlive-hyphen-polish)
-         ("texlive-hyphen-portuguese" ,texlive-hyphen-portuguese)
-         ("texlive-hyphen-romanian" ,texlive-hyphen-romanian)
-         ("texlive-hyphen-romansh" ,texlive-hyphen-romansh)
-         ("texlive-hyphen-russian" ,texlive-hyphen-russian)
-         ("texlive-hyphen-sanskrit" ,texlive-hyphen-sanskrit)
-         ("texlive-hyphen-serbian" ,texlive-hyphen-serbian)
-         ("texlive-hyphen-slovak" ,texlive-hyphen-slovak)
-         ("texlive-hyphen-slovenian" ,texlive-hyphen-slovenian)
-         ("texlive-hyphen-spanish" ,texlive-hyphen-spanish)
-         ("texlive-hyphen-swedish" ,texlive-hyphen-swedish)
-         ("texlive-hyphen-thai" ,texlive-hyphen-thai)
-         ("texlive-hyphen-turkish" ,texlive-hyphen-turkish)
-         ("texlive-hyphen-turkmen" ,texlive-hyphen-turkmen)
-         ("texlive-hyphen-ukrainian" ,texlive-hyphen-ukrainian)
-         ("texlive-hyphen-uppersorbian" ,texlive-hyphen-uppersorbian)
-         ("texlive-hyphen-welsh" ,texlive-hyphen-welsh)
-         ("texlive-unicode-data" ,texlive-unicode-data)
-         ("texlive-ukrhyph" ,texlive-ukrhyph)
-         ("texlive-ruhyphen" ,texlive-ruhyphen)
-         ("texlive-latexconfig" ,texlive-latexconfig)))
+       (list texlive-dehyph-exptl
+             texlive-etex
+             texlive-hyph-utf8
+             texlive-hyphen-base
+             texlive-hyphen-afrikaans
+             texlive-hyphen-ancientgreek
+             texlive-hyphen-armenian
+             texlive-hyphen-basque
+             texlive-hyphen-belarusian
+             texlive-hyphen-bulgarian
+             texlive-hyphen-catalan
+             texlive-hyphen-chinese
+             texlive-hyphen-churchslavonic
+             texlive-hyphen-coptic
+             texlive-hyphen-croatian
+             texlive-hyphen-czech
+             texlive-hyphen-danish
+             texlive-hyphen-dutch
+             texlive-hyphen-english
+             texlive-hyphen-esperanto
+             texlive-hyphen-estonian
+             texlive-hyphen-ethiopic
+             texlive-hyphen-finnish
+             texlive-hyphen-schoolfinnish
+             texlive-hyphen-french
+             texlive-hyphen-friulan
+             texlive-hyphen-galician
+             texlive-hyphen-georgian
+             texlive-hyphen-german
+             texlive-hyphen-greek
+             texlive-hyphen-hungarian
+             texlive-hyphen-icelandic
+             texlive-hyphen-indic
+             texlive-hyphen-indonesian
+             texlive-hyphen-interlingua
+             texlive-hyphen-irish
+             texlive-hyphen-italian
+             texlive-hyphen-kurmanji
+             texlive-hyphen-latin
+             texlive-hyphen-latvian
+             texlive-hyphen-lithuanian
+             texlive-hyphen-macedonian
+             texlive-hyphen-mongolian
+             texlive-hyphen-norwegian
+             texlive-hyphen-occitan
+             texlive-hyphen-pali
+             texlive-hyphen-piedmontese
+             texlive-hyphen-polish
+             texlive-hyphen-portuguese
+             texlive-hyphen-romanian
+             texlive-hyphen-romansh
+             texlive-hyphen-russian
+             texlive-hyphen-sanskrit
+             texlive-hyphen-serbian
+             texlive-hyphen-slovak
+             texlive-hyphen-slovenian
+             texlive-hyphen-spanish
+             texlive-hyphen-swedish
+             texlive-hyphen-thai
+             texlive-hyphen-turkish
+             texlive-hyphen-turkmen
+             texlive-hyphen-ukrainian
+             texlive-hyphen-uppersorbian
+             texlive-hyphen-welsh
+             texlive-unicode-data
+             texlive-ukrhyph
+             texlive-ruhyphen
+             texlive-latex-l3kernel
+             texlive-latex-l3backend
+             ;; TODO: This dependency isn't needed for LaTeX version 2021-06-01
+             ;; and later. See:
+             ;; https://tug.org/pipermail/tex-live/2021-June/047180.html
+             texlive-latex-l3packages
+             texlive-latexconfig))
       (home-page "https://www.ctan.org/pkg/latex-base")
       (synopsis "Base sources of LaTeX")
       (description
@@ -2845,6 +3060,60 @@ with the required packages, constitutes what every LaTeX distribution should
 contain.")
       (license license:lppl1.3c+))))
 
+(define-public texlive-latex-atveryend
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-atveryend"
+              '("/doc/latex/atveryend/README.md"
+                "/tex/latex/atveryend/")
+              (base32
+               "1gz5ssxjlqa53a8blsmdk2qjahzc910ldh26xjxfxgqnqb03rqx7")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/atveryend")
+    (synopsis "Hooks at the very end of a document")
+    (description
+     "This LaTeX packages provides two hooks for @code{\\end@{document@}}
+that are executed after the hook of @code{\\AtEndDocument}:
+@code{\\AfterLastShipout} can be used for code that is to be executed right
+after the last @code{\\clearpage} before the @file{.aux} file is closed.
+@code{\\AtVeryEndDocument} is used for code after closing and final reading
+of the @file{.aux} file.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-latex-auxhook
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-auxhook"
+              '("/doc/latex/auxhook/README.md"
+                "/tex/latex/auxhook/")
+              (base32
+               "1xh445shr00rh43nnz03xh8k2mdrxgsr03lllqpgvwhm6yzsydkf")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/auxhook")
+    (synopsis "Hooks for auxiliary files")
+    (description
+     "This package provides hooks for adding code at the beginning of
+@file{.aux} files.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-latex-epstopdf-pkg
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-epstopdf-pkg"
+              '("/doc/latex/epstopdf-pkg/"
+                "/tex/latex/epstopdf-pkg/")
+              (base32
+               "0zl6jiyp2cvvyqx3lwxdkcvvnkqgbwj4issq07cagf61gljq6fns")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/epstopdf-pkg")
+    (synopsis "Call @command{epstopdf} \"on the fly\"")
+    (description
+     "The package adds support for EPS files in the @code{graphicx} package
+when running under pdfTeX.  If an EPS graphic is detected, the package
+spawns a process to convert the EPS to PDF, using the script
+@command{epstopdf}.")
+    (license license:lppl1.3c+)))
+
 (define-public texlive-latex-filecontents
   (package
     (name "texlive-latex-filecontents")
@@ -2855,7 +3124,7 @@ contain.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1h78zw0vhldx478zs4v86ajg7vpkysd1kg3npc480qqls3q6ba40"))))
+                "1cmfigg5jx3hmdyh4gv8kwxi7dg076ldkxmr46s05xvhzjig1z9x"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/filecontents"))
     (home-page "https://www.ctan.org/pkg/filecontents")
@@ -2870,31 +3139,6 @@ overwrite existing files and letting you use @code{filecontents} /
 @code{filecontents*} anywhere.")
     (license license:lppl1.3c+)))
 
-(define-public texlive-generic-ifxetex
-  (package
-    (name "texlive-generic-ifxetex")
-    (version (number->string %texlive-revision))
-    (source (origin
-              (method svn-fetch)
-              (uri (texlive-ref "generic" "ifxetex"))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "0w2xj7n0szavj329kds09q626szkc378p3w0sk022q0ln4ksz86d"))))
-    (build-system texlive-build-system)
-    (arguments
-     '(#:tex-directory "generic/ifxetex"
-       #:tex-format "xelatex"))
-    (inputs
-     `(("texlive-latex-filecontents" ,texlive-latex-filecontents)))
-    (home-page "https://www.ctan.org/pkg/ifxetex")
-    (synopsis "Am I running under XeTeX?")
-    (description
-     "This is a simple package which provides an @code{\\ifxetex} conditional,
-so that other code can determine that it is running under XeTeX.  The package
-requires the e-TeX extensions to the TeX primitive set.")
-    (license license:lppl1.3c+)))
-
 (define-public texlive-epsf
   (package
     (inherit (simple-texlive-package
@@ -2915,8 +3159,7 @@ bundle of packages.  (The latex-graphics bundle is also available to Plain TeX
 users, via its Plain TeX version.)")
     (license license:public-domain)))
 
-(define-public texlive-generic-epsf
-  (deprecated-package "texlive-generic-epsf" texlive-epsf))
+(define-deprecated-package texlive-generic-epsf texlive-epsf)
 
 (define-public texlive-latex-fancyvrb
   (package
@@ -2925,7 +3168,7 @@ users, via its Plain TeX version.)")
               (list "/doc/latex/fancyvrb/README"
                     "/tex/latex/fancyvrb/")
               (base32
-               "1dwkcradz9nwpjwmv1sjzn77lvw25ypr0rrgmf1kd8pd2mw7dxcn")
+               "0pdilgpw4zc0ipp4z9kdi61nymifyjy2mfpk74xk2cw9vhynkk3w")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/fancyvrb")
     (synopsis "Sophisticated verbatim text")
@@ -2945,8 +3188,10 @@ verbatim source).")
               (list "/doc/latex/graphics-def/README.md"
                     "/tex/latex/graphics-def/")
               (base32
-               "0zrbn9cwfnnrrl3b2zsd74ldksp9jwpvjh7z93ild1m75crpb39a")
+               "0b66fy06safyrd717rfr476g1gz6nqfv1vqvam7ac2yy0g0djb17")
               #:trivial? #t))
+    (propagated-inputs
+     (list texlive-latex-epstopdf-pkg))
     (home-page "https://www.ctan.org/pkg/latex-graphics")
     (synopsis "Color and graphics option files")
     (description
@@ -2982,12 +3227,11 @@ set default \"driver\" options for the color and graphics packages.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0nlfhn55ax89rcvpkrl9570671b62kcr4c9l5ch3w5zw9vmi00dz"))))
+                "0fgjl58f25zvagssz4dwmmsclzw8cr7mx00kdrbx2kcnamcb7h8d"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/graphics"))
     (propagated-inputs
-     `(("texlive-graphics-cfg" ,texlive-graphics-cfg)
-       ("texlive-graphics-def" ,texlive-graphics-def)))
+     (list texlive-graphics-cfg texlive-graphics-def))
     (home-page "https://www.ctan.org/pkg/latex-graphics")
     (synopsis "LaTeX standard graphics bundle")
     (description
@@ -2997,6 +3241,22 @@ documents.  It comprises the packages color, graphics, graphicx, trig, epsfig,
 keyval, and lscape.")
     (license license:lppl1.3c+)))
 
+(define-public texlive-latex-hycolor
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-hycolor"
+              (list "/doc/latex/hycolor/README.md"
+                    "/tex/latex/hycolor/")
+              (base32
+               "026lfb4l7b3q8g6zc68siqandhb1x98cbycn7njknqva6s99aiqn")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/latex-graphics")
+    (synopsis "Color for hyperref and bookmark")
+    (description
+     "This package provides the code for the @code{color} option that is
+used by @code{hyperref} and @code{bookmark}.")
+    (license license:lppl1.3c+)))
+
 (define-public texlive-xcolor
   (let ((template (simple-texlive-package
                    "texlive-xcolor"
@@ -3034,32 +3294,122 @@ row colors plus repeated non-aligned material (like horizontal lines) in
 tables.")
       (license license:lppl1.2+))))
 
-(define-public texlive-latex-xcolor
-  (deprecated-package "texlive-latex-xcolor" texlive-xcolor))
+(define-deprecated-package texlive-latex-xcolor texlive-xcolor)
 
-(define-public texlive-latex-hyperref
-  (package
-    (name "texlive-latex-hyperref")
-    (version "6.84a2")
-    ;; The sources in the TeX Live SVN repository do not contain hluatex.dtx,
-    ;; so we fetch the release from GitHub.
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://github.com/ho-tex/hyperref/"
-                                  "archive/release-" version ".tar.gz"))
-              (file-name (string-append name "-" version ".tar.gz"))
-              (sha256
-               (base32
-                "1d3rmjgzh0025a1dza55zb6nzzlgd1y9snwx45wq1c1vf42m79h2"))))
-    (build-system texlive-build-system)
-    (arguments '(#:tex-directory "latex/hyperref"))
-    (propagated-inputs
-     `(("texlive-latex-oberdiek" ,texlive-latex-oberdiek) ; for ltxcmds.sty
-       ("texlive-latex-url" ,texlive-latex-url)))
-    (home-page "https://www.ctan.org/pkg/hyperref")
-    (synopsis "Extensive support for hypertext in LaTeX")
-    (description
-     "The @code{hyperref} package is used to handle cross-referencing commands
+(define-public texlive-xmltex
+  (let ((template (simple-texlive-package
+                   "texlive-xmltex"
+                   (list
+                    "/doc/otherformats/xmltex/"
+                    "/tex/xmltex/")
+                   (base32
+                    "023gv9axq05vwqz50fnkig24dzahwlc4raks2s8xc4pzrv2dv1zy"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ #t)
+          "tex/xmltex/base")
+         ((#:phases phases '%standard-phases)
+          `(modify-phases ,phases
+             (add-before 'install 'generate-formats
+               (lambda* (#:key inputs #:allow-other-keys)
+                 (mkdir "web2c")
+                 (for-each (lambda (f)
+                             (copy-file f (basename f)))
+                           (find-files "tex" "\\.(ini|tex)$"))
+                 (invoke "fmtutil-sys" "--byfmt" "xmltex"
+                         "--fmtdir=web2c")
+                 (invoke "fmtutil-sys" "--byfmt" "pdfxmltex"
+                         "--fmtdir=web2c")))
+             (add-after 'install 'install-formats-and-wrappers
+               (lambda* (#:key inputs outputs #:allow-other-keys)
+                 (let* ((out (assoc-ref outputs "out"))
+                        (texlive-bin (assoc-ref inputs "texlive-bin"))
+                        (pdftex (string-append texlive-bin "/bin/pdftex"))
+                        (web2c (string-append out "/share/texmf-dist/web2c")))
+                   (mkdir-p web2c)
+                   (copy-recursively "web2c" web2c)
+                   ;; Create convenience command wrappers.
+                   (mkdir-p (string-append out "/bin"))
+                   (symlink pdftex (string-append out "/bin/xmltex"))
+                   (symlink pdftex (string-append out "/bin/pdfxmltex"))
+                   #t)))))))
+      (propagated-inputs
+       ;; The following fonts are propagated as a texlive-updmap.cfg as the font
+       ;; maps need to be recreated for the fonts to be usable.  They are
+       ;; required by xmltex through mlnames.sty and unicode.sty.
+       `(("texlive" ,(texlive-updmap.cfg
+                      (list
+                       texlive-amsfonts
+                       texlive-babel
+                       texlive-courier
+                       texlive-helvetic
+                       texlive-hyperref
+                       texlive-symbol
+                       texlive-tipa
+                       texlive-times
+                       texlive-zapfding
+                       ;; The following fonts, while not required, are used if
+                       ;; available:
+                       texlive-stmaryrd
+                       texlive-wasy)))))
+      (native-inputs
+       (list texlive-tex-ini-files))
+      (home-page "https://www.ctan.org/pkg/xmltex/")
+      (synopsis "Support for parsing XML documents")
+      (description "The package provides an implementation of a parser for
+documents matching the XML 1.0 and XML Namespace Recommendations.  Element and
+attribute names, as well as character data, may use any characters allowed in
+XML, using UTF-8 or a suitable 8-bit encoding.")
+      (license license:lppl1.0+))))        ;per xmltex/base/readme.txt
+
+(define-public texlive-hyperref
+  (let ((template (simple-texlive-package
+                   "texlive-hyperref"
+                   (list "/doc/latex/hyperref/"
+                         "/source/latex/hyperref/"
+                         ;; These files are not generated from the sources
+                         "/tex/latex/hyperref/minitoc-hyper.sty"
+                         "/tex/latex/hyperref/ntheorem-hyper.sty"
+                         "/tex/latex/hyperref/xr-hyper.sty")
+                   (base32
+                    "0nmbxaq676m2y9fgdji0bxqchmrli4hwhspijaszx51b3ki6bj2h"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ #t)
+          "latex/hyperref")
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'chdir
+               (lambda _ (chdir "source/latex/hyperref") #t))))))
+      (propagated-inputs
+       (list texlive-generic-atbegshi
+             texlive-generic-bitset
+             texlive-generic-etexcmds
+             texlive-generic-gettitlestring
+             texlive-generic-iftex
+             texlive-generic-infwarerr
+             texlive-generic-intcalc
+             texlive-generic-kvdefinekeys
+             texlive-generic-kvsetkeys
+             texlive-generic-ltxcmds
+             texlive-generic-pdfescape
+             texlive-latex-auxhook
+             texlive-latex-atveryend
+             texlive-latex-hycolor
+             texlive-latex-kvoptions
+             texlive-latex-letltxmacro
+             texlive-latex-pdftexcmds
+             texlive-latex-refcount
+             texlive-latex-rerunfilecheck
+             texlive-url))
+      (home-page "https://www.ctan.org/pkg/hyperref")
+      (synopsis "Extensive support for hypertext in LaTeX")
+      (description
+       "The @code{hyperref} package is used to handle cross-referencing commands
 in LaTeX to produce hypertext links in the document.  The package provides
 backends for the @code{\\special} set defined for HyperTeX DVI processors; for
 embedded @code{pdfmark} commands for processing by Acrobat
@@ -3067,11 +3417,13 @@ Distiller (@code{dvips} and Y&Y's @code{dvipsone}); for Y&Y's @code{dviwindo};
 for PDF control within pdfTeX and @code{dvipdfm}; for TeX4ht; and for VTeX's
 pdf and HTML backends.  The package is distributed with the @code{backref} and
 @code{nameref} packages, which make use of the facilities of @code{hyperref}.")
-    (license license:lppl1.3+)))
+      (license license:lppl1.3+))))
 
-(define-public texlive-latex-oberdiek
+(define-deprecated-package texlive-latex-hyperref texlive-hyperref)
+
+(define-public texlive-oberdiek
   (package
-    (name "texlive-latex-oberdiek")
+    (name "texlive-oberdiek")
     (version (number->string %texlive-revision))
     (source (origin
               (method svn-fetch)
@@ -3079,7 +3431,7 @@ pdf and HTML backends.  The package is distributed with the @code{backref} and
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0pi2d6gsddcs9wprdbar46s91kdc5fxl1m79g7xrbccsx8s9xbml"))))
+                "1cadrkpdqs65gxsaszfgfd8wqp8pvpik2sjmlyq3hz5p9yna3p9m"))))
     (build-system texlive-build-system)
     (arguments
      '(#:tex-directory "latex/oberdiek"
@@ -3093,7 +3445,7 @@ pdf and HTML backends.  The package is distributed with the @code{backref} and
                (("ifpdf.ins") "ifpdf.dtx"))
              #t)))))
     (propagated-inputs
-     `(("texlive-generic-ifxetex" ,texlive-generic-ifxetex)))
+     (list texlive-generic-iftex))
     (home-page "https://www.ctan.org/pkg/oberdiek")
     (synopsis "Bundle of packages submitted by Heiko Oberdiek")
     (description
@@ -3102,6 +3454,28 @@ better accessibility support for PDF files; extensible chemists reaction
 arrows; record information about document class(es) used; and many more.")
     (license license:lppl1.3+)))
 
+(define-deprecated-package texlive-latex-oberdiek texlive-oberdiek)
+
+(define-public texlive-latex-rerunfilecheck
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-rerunfilecheck"
+              '("/doc/latex/rerunfilecheck/"
+                "/tex/latex/rerunfilecheck/")
+              (base32
+               "1myz0d5bxhxvl4220ikywh921qld8n324kk9kscqbc5iw4063g56")
+              #:trivial? #t))
+    (propagated-inputs
+     (list texlive-generic-infwarerr texlive-generic-uniquecounter
+           texlive-latex-atveryend texlive-latex-kvoptions
+           texlive-latex-pdftexcmds))
+    (home-page "https://www.ctan.org/pkg/rerunfilecheck")
+    (synopsis "Checksum based rerun checks on auxiliary files")
+    (description
+     "This package provides additional rerun warnings if some auxiliary
+files have changed.  It is based on MD5 checksum, provided by pdfTeX.")
+    (license license:lppl1.3c+)))
+
 (define-public texlive-latex-tools
   (package
     (name "texlive-latex-tools")
@@ -3112,11 +3486,23 @@ arrows; record information about document class(es) used; and many more.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1wqvn4z0s92h5iqzrvxw7hinzp95avjk9v8lnqbqr4kz6nv4xb9l"))))
+                "1vm5wfyd0vbmv31a29fc7k8y14xiw00msvdx9n7dzsn9zpfjflqs"))))
     (build-system texlive-build-system)
     (arguments
      '(#:tex-directory "latex/tools"
-       #:build-targets '("tools.ins")))
+       #:build-targets '("tools.ins")
+       #:phases (modify-phases %standard-phases
+                  (add-after 'install 'provide-array-2016-10-06.sty
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      ;; XXX: array.sty does:
+                      ;;  "DeclareRelease{}{2016-10-06}{array-2016-10-06.sty}"
+                      ;; ...which causes some users (hypre) to look for that
+                      ;; file specifically.  Provide it.
+                      (with-directory-excursion (string-append
+                                                 (assoc-ref outputs "out")
+                                                 "/share/texmf-dist/tex"
+                                                 "/latex/tools")
+                        (symlink "array.sty" "array-2016-10-06.sty")))))))
     (home-page "https://www.ctan.org/pkg/latex-tools")
     (synopsis "LaTeX standard tools bundle")
     (description
@@ -3151,8 +3537,7 @@ of file names.")
     ;; the latest version is 1.3c.
     (license license:lppl1.3c+)))
 
-(define-public texlive-latex-url
-  (deprecated-package "texlive-latex-url" texlive-url))
+(define-deprecated-package texlive-latex-url texlive-url)
 
 (define-public texlive-tetex
   (package
@@ -3181,10 +3566,15 @@ Live distribution.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0s77z2cbv841l45qrpf0s8qhzfa4wi689lg7zkw88qg18nzvy0ly"))))
+                "068xkinrkl6qjf8r6a9i0msvnzp4y7a3gnd2h12ws0km1dv19r20"))))
     (build-system texlive-build-system)
     (arguments
-     '(#:tex-directory "latex/l3kernel"))
+     '(#:tex-directory "latex/l3kernel"
+       #:tex-engine "tex"
+       #:tex-format #f
+       #:texlive-latex-base #f))
+    (native-inputs
+     (list texlive-docstrip))
     (home-page "https://www.ctan.org/pkg/l3kernel")
     (synopsis "LaTeX3 programmers’ interface")
     (description
@@ -3195,20 +3585,59 @@ code are built: it is an API for TeX programmers.  The packages are set up so
 that the LaTeX3 conventions can be used with regular LaTeX 2e packages.")
     (license license:lppl1.3c+)))
 
-(define-public texlive-latex-l3packages
+(define-public texlive-latex-l3backend
   (package
-    (name "texlive-latex-l3packages")
+    (name "texlive-latex-l3backend")
     (version (number->string %texlive-revision))
     (source (origin
               (method svn-fetch)
-              (uri (texlive-ref "latex" "l3packages"))
+              (uri (texlive-ref "latex" "l3backend"))
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1cv4fk9pabh7mkxhfsdmh4k8xpmzg1psgcsvd11c869m7n3a629h"))))
+                "0mlwyzssqn6wkyv9hzp24d40p8f20zrjqgvqyqs1rd7q7awan42a"))))
+    (build-system texlive-build-system)
+    (arguments
+     '(#:tex-directory "latex/l3backend"
+       #:tex-engine "tex"
+       #:tex-format #f
+       #:texlive-latex-base #f))
+    (native-inputs
+     (list texlive-docstrip))
+    (home-page "https://www.ctan.org/pkg/l3backend")
+    (synopsis "LaTeX3 backend drivers")
+    (description
+     "This package forms parts of expl3, and contains the code used to
+interface with backends (drivers) across the expl3 codebase. The functions
+here are defined differently depending on the engine in use. As such, these
+are distributed separately from l3kernel to allow this code to be updated on
+an independent schedule.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-latex-l3packages
+  (package
+    (name "texlive-latex-l3packages")
+    (version (number->string %texlive-revision))
+    (source (texlive-origin name version
+                            '("/source/latex/l3packages/"
+                              ;; These files have been generated with a
+                              ;; bespoke source tree and then modified by
+                              ;; hand. It's unfeasible to recreate them. See:
+                              ;; https://tug.org/pipermail/tex-live/2021-June/047188.html
+                              "/tex/latex/l3packages/xparse/xparse-2018-04-12.sty"
+                              "/tex/latex/l3packages/xparse/xparse-2020-10-01.sty"
+
+                              ;; TODO: This file can be removed when using
+                              ;; LaTeX version 2021-06-01 or newer. See:
+                              ;; https://tug.org/pipermail/tex-live/2021-June/047180.html
+                              "/tex/latex/l3packages/xparse/xparse-generic.tex")
+                            (base32 "05rjxdqhhg7z1z2rmhmwj2qf09xygymayy3jzj9fdphk0pab3amm")))
     (build-system texlive-build-system)
     (arguments
      '(#:tex-directory "latex/l3packages"
+       #:tex-engine "tex"
+       #:tex-format #f
+       #:texlive-latex-base #f
        ;; build-targets must be specified manually since they are in
        ;; sub-directories.
        #:build-targets '("l3keys2e.ins" "xparse.ins" "xfrac.ins" "xfp.ins" "xtemplate.ins")
@@ -3220,18 +3649,25 @@ that the LaTeX3 conventions can be used with regular LaTeX 2e packages.")
            (lambda _
              (let ((cwd (getcwd)))
                (setenv "TEXINPUTS"
-                       (string-append cwd "/l3keys2e:"
-                                      cwd "/xparse:"
-                                      cwd "/xfrac:"
-                                      cwd "/xfp:"
-                                      cwd "/xtemplate"
+                       (string-append cwd "/source/latex/l3packages/l3keys2e:"
+                                      cwd "/source/latex/l3packages/xparse:"
+                                      cwd "/source/latex/l3packages/xfrac:"
+                                      cwd "/source/latex/l3packages/xfp:"
+                                      cwd "/source/latex/l3packages/xtemplate"
                                       ;; The terminating ":" is required to include the
                                       ;; l3kernel input as well.
                                       ":")))
-             #t)))
+             #t))
+         (add-after 'install 'copy-generated-files
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((dest (string-append (assoc-ref outputs "out")
+                                        "/share/texmf-dist/tex/latex/l3packages")))
+               (copy-recursively "tex/latex/l3packages/xparse" dest)))))
        ))
+    (native-inputs
+     (list texlive-docstrip))
     (propagated-inputs
-     `(("texlive-latex-l3kernel" ,texlive-latex-l3kernel)))
+     (list texlive-latex-l3kernel))
     (home-page "https://www.ctan.org/pkg/l3packages")
     (synopsis "High-level LaTeX3 concepts")
     (description
@@ -3250,90 +3686,182 @@ programming tools and kernel support.  Packages provided in this release are:
 @end enumerate\n")
     (license license:lppl1.3c+)))
 
-(define-public texlive-latex-fontspec
+(define-public texlive-dvips-l3backend
   (package
-    (name "texlive-latex-fontspec")
-    (version (number->string %texlive-revision))
-    (source (origin
-              (method svn-fetch)
-              (uri (texlive-ref "latex" "fontspec"))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "1223cw029n6zff7pqpwbsq1x8v3w63smczkmnybqxkw5h2za8gbz"))))
-    (build-system texlive-build-system)
-    (arguments
-     '(#:tex-directory "latex/fontspec"
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'install 'install-default-fontspec.cfg
-           (lambda* (#:key outputs #:allow-other-keys)
-             (with-output-to-file
-                 (string-append (assoc-ref outputs "out")
-                                "/share/texmf-dist/tex/latex/fontspec/fontspec.cfg")
-               (lambda _
-                 (display "\
-%%% FONTSPEC.CFG %%%
-%
-% This configuration file sets up TeX Ligatures by default for all fonts loaded
-% with `\\setmainfont` and `\\setsansfont`.
-%
-% In addition, `\\setmonofont` has default features to enforce \"monospace\"
-% settings with regard to space stretchability and shrinkability.
-
-\\defaultfontfeatures
- [\\rmfamily,\\sffamily]
- {Ligatures=TeX}
-
-\\defaultfontfeatures
- [\\ttfamily]
- {WordSpace={1,0,0},
-  HyphenChar=None,
-  PunctuationSpace=WordSpace}
-")))
-             #t)))))
-    (propagated-inputs
-     `(("texlive-latex-l3packages" ,texlive-latex-l3packages)))
-    (home-page "https://www.ctan.org/pkg/fontspec")
-    (synopsis "Advanced font selection in XeLaTeX and LuaLaTeX")
+    (inherit (simple-texlive-package
+              "texlive-dvips-l3backend"
+              (list
+               "/dvips/l3backend/")
+              (base32
+               "1hvj153h1pn93h6n76dv3mg9ai0mcz9q9mysfiqjfpqzijz9ikky")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/l3backend")
+    (synopsis "LaTeX3 backend drivers for dvips")
     (description
-     "Fontspec is a package for XeLaTeX and LuaLaTeX.  It provides an
+     "This package forms parts of expl3, and contains the code used to
+interface with backends (drivers) across the expl3 codebase.  The functions
+here are defined for the dvips engine only.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-fontspec
+  (let ((template (simple-texlive-package
+                   "texlive-fontspec"
+                   (list "/doc/latex/fontspec/"
+                         "/source/latex/fontspec/"
+                         "/tex/latex/fontspec/fontspec.cfg")
+                   (base32
+                    "06rms8dw1j67v3rgv6xmfykdmgbxi5rp78yxc782cy1sw07blgsg"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ #t)
+          "latex/fontspec")
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'chdir
+               (lambda _ (chdir "source/latex/fontspec/") #t))))))
+      (propagated-inputs
+       (list texlive-latex-l3packages))
+      (home-page "https://www.ctan.org/pkg/fontspec")
+      (synopsis "Advanced font selection in XeLaTeX and LuaLaTeX")
+      (description
+       "Fontspec is a package for XeLaTeX and LuaLaTeX.  It provides an
 automatic and unified interface to feature-rich AAT and OpenType fonts through
 the NFSS in LaTeX running on XeTeX or LuaTeX engines.  The package requires
 the l3kernel and xparse bundles from the LaTeX 3 development team.")
-    (license license:lppl1.3+)))
+      (license license:lppl1.3+))))
 
-;; The SVN directory contains little more than a dtx file that generates three
-;; of the many lua files that should be installed as part of this package.
-;; This is why we take the release from GitHub instead.
-(define-public texlive-luatex-lualibs
-  (package
-    (name "texlive-luatex-lualibs")
-    (version "2.5")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://github.com/lualatex/lualibs/"
-                                  "releases/download/v"
-                                  version "/lualibs.zip"))
-              (file-name (string-append name "-" version ".zip"))
-              (sha256
-               (base32
-                "1xx9blvrmx9hyhrl345lpai9m6xxnw997261a1ahn1bm5r2j5fqy"))))
-    (build-system gnu-build-system)
-    (arguments
-     `(#:make-flags
-       (list (string-append "DESTDIR="
-                            (assoc-ref %outputs "out")
-                            "/share/texmf-dist"))
-       #:phases
-       (modify-phases %standard-phases
-         (delete 'configure))))
-    (native-inputs
-     `(("texlive-bin" ,texlive-bin)
-       ("unzip" ,unzip)
-       ("zip" ,zip)))
-    (home-page "https://github.com/lualatex/lualibs")
-    (synopsis "Lua modules for general programming (in the (La)TeX world)")
+(define-deprecated-package texlive-latex-fontspec texlive-fontspec)
+
+(define-public texlive-grffile
+  (let ((template (simple-texlive-package
+                   "texlive-grffile"
+                   (list "/doc/latex/grffile/README.md"
+                         "/source/latex/grffile/grffile.dtx")
+                   (base32
+                    "1ib2n4d52faipvxdvdh4ar1p5j997h7cza26sfyd8z3qdf0naqgx"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ #t)
+          "latex/grffile")
+         ((#:build-targets _ #t)
+          '(list "grffile.dtx"))
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'chdir
+               (lambda _ (chdir "source/latex/grffile/")))))))
+      (home-page "https://www.ctan.org/pkg/grffile")
+      (synopsis "Extended file name support for graphics (legacy package)")
+      (description
+       "The original grffile package extended the file name processing of the
+@code{graphics} package to support a larger range of file names.  The base
+LaTeX code now supports multiple dots and spaces, and this package by default
+is a stub that just loads @code{graphicx}.")
+      (license license:lppl1.3c+))))
+
+(define-public texlive-stringenc
+  (let ((template (simple-texlive-package
+                   "texlive-stringenc"
+                   (list "/doc/latex/stringenc/README.md"
+                         "/source/latex/stringenc/stringenc.dtx")
+                   (base32
+                    "19sfi5jxldxmy79pxmapmgmn3iknf8wjczasvlrrwv0gyycxdzhw"))))
+    (package
+      (inherit template)
+      (outputs '("doc" "out"))
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ #t)
+          "generic/stringenc")
+         ((#:build-targets _ #t)
+          '(list "stringenc.dtx"))
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'chdir
+               (lambda _ (chdir "source/latex/stringenc/")))
+             (add-after 'copy-files 'clean-up
+               (lambda* (#:key inputs outputs #:allow-other-keys)
+                 (delete-file-recursively
+                  (string-append (assoc-ref outputs "out") "/share/texmf-dist/build"))
+                 (delete-file
+                  (string-append (assoc-ref outputs "out") "/share/texmf-dist/stringenc.dtx"))
+                 (install-file
+                  (string-append (assoc-ref inputs "source") "/source/latex/stringenc/stringenc.dtx")
+                  (string-append (assoc-ref outputs "out") "/share/texmf-dist/source/latex/stringenc/"))
+                 (install-file
+                  (string-append (assoc-ref inputs "source") "/doc/latex/stringenc/README.md")
+                  (string-append (assoc-ref outputs "doc") "/doc/latex/stringenc/"))))))))
+      (home-page "https://www.ctan.org/pkg/stringenc")
+      (synopsis "Converting a string between different encodings")
+      (description
+       "This package provides @code{\\StringEncodingConvert} for converting a
+string between different encodings.  Both LaTeX and plain-TeX are supported.")
+      (license license:lppl1.3c+))))
+
+(define-public texlive-l3build
+  (let ((template (simple-texlive-package
+                   "texlive-l3build"
+                   (list "/doc/latex/l3build/"
+                         "/doc/man/man1/l3build.1"
+                         "/scripts/l3build/"
+                         "/tex/latex/l3build/"
+                         ;; TODO: The dtx file builds only the documentation.
+                         ;; We avoid this for a simpler package definition,
+                         ;; but it may be possible to exclude
+                         ;; /doc/latex/l3build and the man page in the future.
+                         "/source/latex/l3build/")
+                   (base32
+                    "1fcay05jj53qgp2b98jpawi0id298fs5xc4y1r5krrfr4sp4hd59")
+                   #:trivial? #t)))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'install 'patch-shebangs-again
+               (lambda* (#:key inputs outputs #:allow-other-keys)
+                 ;; XXX: Since the 'patch-shebangs' phase cannot change the
+                 ;; original source files patch the shebangs again here.
+                 (let* ((coreutils (assoc-ref inputs "coreutils"))
+                        (texlive-bin (assoc-ref inputs "texlive-bin"))
+                        (path (list (string-append coreutils "/bin")
+                                    (string-append texlive-bin "/bin"))))
+                   (for-each (lambda (file)
+                               (format #t "~a~%" file)
+                               (patch-shebang file path))
+                             (find-files (assoc-ref outputs "out")))
+                   #t)))))))
+      (inputs
+       (list coreutils texlive-bin))
+      (home-page "https://github.com/latex3/luaotfload")
+      (synopsis "Testing and building system for LaTeX")
+      (description
+       "The l3build module is designed to support the development of
+high-quality LaTeX code by providing: a unit testing system, automated
+typesetting of code sources, and a reliable packaging system for CTAN
+releases.  The bundle consists of a Lua script to run the tasks and a
+@code{.tex} file which provides the testing environment.")
+      (license license:lppl1.3c+))))
+
+(define-public texlive-lualibs
+  (package
+    (inherit
+     (simple-texlive-package
+      "texlive-lualibs"
+      (list "doc/luatex/lualibs/"
+            "source/luatex/lualibs/"
+            "tex/luatex/lualibs/")
+      (base32 "0gf60vj9y75a7dlrmpbyqgsa00s1717r6if3lm5ldm41i9fm8ywz")
+      ;; The source dtx file only unpacks three files.  This is why we
+      ;; install all the files as they are, because there is no clear
+      ;; way to generate them all.
+      #:trivial? #true))
+    (home-page "https://ctan.org/macros/luatex/generic/lualibs")
+    (synopsis "Additional Lua functions for LuaTeX macro programmers")
     (description
      "Lualibs is a collection of Lua modules useful for general programming.
 The bundle is based on Lua modules shipped with ConTeXt, and made available in
@@ -3341,97 +3869,55 @@ this bundle for use independent of ConTeXt.")
     ;; GPL version 2 only
     (license license:gpl2)))
 
-(define-public texlive-luatex-luaotfload
-  (package
-    (name "texlive-luatex-luaotfload")
-    (version "2.8-fix-2")
-    ;; The release tarball does not contain all source files.
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/lualatex/luaotfload")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0l5l7iq3dxcxl65qaghcpjg27yd9iw1sxa8pnd7xlvlm09dhfdnf"))))
-    (build-system gnu-build-system)
-    (arguments
-     `(#:make-flags
-       (list (string-append "DESTDIR="
-                            (assoc-ref %outputs "out")
-                            "/share/texmf-dist")
-             "all")
-       #:parallel-build? #f ; not supported
-       #:phases
-       (modify-phases %standard-phases
-         (replace 'configure
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "doc/Makefile"
-               (("rst2man") "rst2man.py")
-               ;; Don't build the PDF.  This requires more of LaTeX.
-               (("\\$\\(DOCPDF\\)") ""))
-
-             (substitute* "Makefile"
-               ;; We don't build the PDF, so don't attempt to install it.
-               (("cp \\$\\(RESOURCES\\) \\$\\(DOCPDF\\)")
-                "cp $(RESOURCES)")
-               (("= \\$\\(DOCPDF\\)") "= ")
-               ;; Fix name of fontloader file
-               (("^LOADER.*= \\$\\(BUILDDIR\\)/fontloader-\\$\\(shell date \\+%F\\).lua")
-                "LOADER = $(BUILDDIR)/fontloader.lua"))
+(define-deprecated-package texlive-luatex-lualibs texlive-lualibs)
 
-             (mkdir "build")
-
-             ;; Don't download this file.
-             (copy-file (assoc-ref inputs "glyphlist")
-                        "build/glyphlist.txt")
-
-             ;; Don't use git
-             (let ((notes
-                    `((committer . "Philipp Gesang <phg@phi-gamma.net>")
-                      (description . ,version)
-                      (loader . "fontloader.lua")
-                      (revision . "ad480924393fffa2896156e1a32c22f5c61120dd")
-                      (timestamp . "2019-01-01 00:00:00 +0000"))))
-               (substitute* "scripts/mkstatus"
-                 (("local notes.*=.*")
-                  (string-append "local notes = {"
-                                 (string-join
-                                  (map (lambda (entry)
-                                         (format "[\"~a\"]=\"~a\","
-                                                 (symbol->string (car entry))
-                                                 (cdr entry)))
-                                       notes))
-                                 "}"))))
-             #t)))))
-    (native-inputs
-     `(("zip" ,zip)
-       ("unzip" ,unzip)
-       ("graphviz" ,graphviz)
-       ("lualatex" ,(texlive-union (list texlive-luatex-lualibs
-                                         texlive-context-base)))
-       ("python-docutils" ,python-docutils)
-       ("glyphlist"
-        ,(origin
-           (method url-fetch)
-           (uri (string-append "https://raw.githubusercontent.com/adobe-type-tools/"
-                               "agl-aglfn/b2a04cb906f9257cc06a2fe0ad4b3d663bc02136/"
-                               "glyphlist.txt"))
-           (sha256
-            (base32 "1s6svfw23rqzdvflv8frgd4xrwvrmsj8szwzqgcd39dp9rpjafjp"))))))
-    (propagated-inputs
-     `(("texlive-luatex-lualibs" ,texlive-luatex-lualibs)))
-    (home-page "https://github.com/lualatex/luaotfload")
-    (synopsis "OpenType font loader for LuaTeX")
+(define-public texlive-lua-alt-getopt
+  (package
+    (inherit
+     (simple-texlive-package
+      "texlive-lua-alt-getopt"
+      (list "doc/support/lua-alt-getopt/" "scripts/lua-alt-getopt/")
+      (base32 "0cizxzn33n3pn98xkqnxb8s6vdwkar3xrwhraqrs05pjfdn9d4wz")
+      #:trivial? #t))
+    (home-page "https://ctan.org/support/lualibs/lua-alt-getopt")
+    (synopsis "Process application arguments the same way as getopt_long")
     (description
-     "Luaotfload is an adaptation of the ConTeXt font loading system for the
+     "This package provides a Lua module for processing application arguments
+in the same way as BSD/GNU @code{getopt_long(3)} functions do.")
+    (license license:expat)))
+
+;; TODO: We should be able to build this from the sources on Github with
+;; texlive-l3build, but I haven't been able to get it to work.
+(define-public texlive-luaotfload
+  (let ((template (simple-texlive-package
+                   "texlive-luaotfload"
+                   (list "/doc/luatex/luaotfload/"
+                         "/doc/man/man1/luaotfload-tool.1"
+                         "/doc/man/man5/luaotfload.conf.5"
+                         "/source/luatex/luaotfload/fontloader-reference-load-order.lua"
+                         "/source/luatex/luaotfload/fontloader-reference-load-order.tex"
+                         "/scripts/luaotfload/luaotfload-tool.lua"
+                         "/tex/luatex/luaotfload/")
+                   (base32
+                    "10wznvxx3qsl88n560py5vyx5r3a3914anbqfhwcmhmwg097xxl4")
+                   #:trivial? #t)))
+    (package
+      (inherit template)
+      (propagated-inputs
+       (list texlive-lua-alt-getopt ;for luaotfload-tool
+             texlive-lualibs))
+      (home-page "https://github.com/lualatex/luaotfload")
+      (synopsis "OpenType font loader for LuaTeX")
+      (description
+       "Luaotfload is an adaptation of the ConTeXt font loading system for the
 Plain and LaTeX formats.  It allows OpenType fonts to be loaded with font
 features accessible using an extended font request syntax while providing
 compatibilitywith XeTeX.  By indexing metadata in a database it facilitates
 loading fonts by their proper names instead of file names.")
-    ;; GPL version 2 only
-    (license license:gpl2)))
+      ;; GPL version 2 only
+      (license license:gpl2))))
+
+(define-deprecated-package texlive-luatex-luaotfload texlive-luaotfload)
 
 (define-public texlive-latex-amsmath
   (package
@@ -3443,7 +3929,7 @@ loading fonts by their proper names instead of file names.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0qgk2332dacsxn1z95qzp35gbs7wrzl1ipjdhnmk1r897msm4sf5"))))
+                "172zybw7rp05jca8wl6x0mh6z6gncdyi1j9wdfyjnhbvqw0z4wi4"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/amsmath"))
     (home-page "https://www.ctan.org/pkg/amsmath")
@@ -3462,64 +3948,84 @@ mathematics, and @code{ntheoremntheorem}, for specifying theorem (and similar)
 definitions.")
     (license license:lppl1.3c+)))
 
-(define-public texlive-latex-amscls
-  (package
-    (name "texlive-latex-amscls")
-    (version (number->string %texlive-revision))
-    (source (origin
-              (method svn-fetch)
-              (uri (texlive-ref "latex" "amscls"))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "0c2j9xh4qpi0x1vvcxdjxq6say0zhyr569fryi5cmhp8bclh4kca"))))
-    (build-system texlive-build-system)
-    (arguments
-     `(#:tex-directory "latex/amscls"))
-    (home-page "https://www.ctan.org/pkg/amscls")
-    (synopsis "AMS document classes for LaTeX")
-    (description
-     "This bundle contains three AMS classes: @code{amsartamsart} (for writing
+(define-public texlive-amscls
+  (let ((template (simple-texlive-package
+                   "texlive-amscls"
+                   (list "/doc/latex/amscls/"
+                         "/source/latex/amscls/"
+                         "/bibtex/bst/amscls/")
+                   (base32
+                    "0vw0b815slvfqfd8qffyfzb3xfvyv6k77m12xp0l67hs8p08s5b7"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ #t)
+          "latex/amscls")
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'chdir
+               (lambda _ (chdir "source/latex/amscls/") #t))))))
+      (home-page "https://www.ctan.org/pkg/amscls")
+      (synopsis "AMS document classes for LaTeX")
+      (description
+       "This bundle contains three AMS classes: @code{amsartamsart} (for writing
 articles for the AMS), @code{amsbookamsbook} (for books) and
 @code{amsprocamsproc} (for proceedings), together with some supporting
 material.  The material is made available as part of the AMS-LaTeX
 distribution.")
-    (license license:lppl1.3c+)))
+      (license license:lppl1.3c+))))
 
-(define-public texlive-latex-babel
-  (package
-    (name "texlive-latex-babel")
-    (version (number->string %texlive-revision))
-    (source (origin
-              (method svn-fetch)
-              (uri (texlive-ref "latex" "babel"))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "1rwqq841i1rxywymzwkw0cw2yhgvxwjx5mgygfasvypwrwll6f6s"))))
-    (build-system texlive-build-system)
-    (arguments
-     '(#:tex-directory "generic/babel"
-       #:phases
-       (modify-phases %standard-phases
-         ;; This package tries to produce babel.aux twice but refuses to
-         ;; overwrite the first one.
-         (add-before 'build 'fix-ins
-           (lambda _
-             (substitute* "babel.ins"
-               (("askonceonly") "askforoverwritefalse"))
-             #t)))))
-    (home-page "https://www.ctan.org/pkg/babel")
-    (synopsis "Multilingual support for Plain TeX or LaTeX")
-    (description
-     "The package manages culturally-determined typographical (and other)
+(define-deprecated-package texlive-latex-amscls texlive-amscls)
+
+(define-public texlive-babel
+  (let ((template (simple-texlive-package
+                   "texlive-babel"
+                   (list "/doc/latex/babel/"
+                         "/source/latex/babel/"
+                         "/makeindex/babel/")
+                   (base32
+                    "0qr5vjp79g1c1l6k173qhfdfabgbky73wymzhm56pazx4a8r08wz"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ #t)
+          "generic/babel")
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'chdir
+               (lambda _ (chdir "source/latex/babel/") #t))
+             ;; This package tries to produce babel.aux twice but refuses to
+             ;; overwrite the first one.
+             (add-before 'build 'fix-ins
+               (lambda _
+                 (substitute* "babel.ins"
+                   (("askonceonly") "askforoverwritefalse"))
+                 #t))
+             (add-after 'install 'install-locales
+               (lambda* (#:key outputs #:allow-other-keys)
+                 (let ((locale-directory
+                        (string-append (assoc-ref outputs "out")
+                                       "/share/texmf-dist/tex/generic/babel/locale/")))
+                   (mkdir-p locale-directory)
+                   (invoke "unzip" "locale.zip" "-d"
+                           locale-directory))))))))
+      (native-inputs
+       (list unzip))
+      (home-page "https://www.ctan.org/pkg/babel")
+      (synopsis "Multilingual support for Plain TeX or LaTeX")
+      (description
+       "The package manages culturally-determined typographical (and other)
 rules, and hyphenation patterns for a wide range of languages.  A document may
 select a single language to be supported, or it may select several, in which
 case the document may switch from one language to another in a variety of
 ways.  Babel uses contributed configuration files that provide the detail of
 what has to be done for each language.  Users of XeTeX are advised to use the
 polyglossia package rather than Babel.")
-    (license license:lppl1.3+)))
+      (license license:lppl1.3+))))
+
+(define-deprecated-package texlive-latex-babel texlive-babel)
 
 (define-public texlive-generic-babel-english
   (package
@@ -3543,6 +4049,26 @@ for British English and Australian text, and default (\"american\") patterns
 for Canadian and USA text.")
     (license license:lppl1.3+)))
 
+(define-public texlive-generic-babel-french
+  (package
+    (name "texlive-generic-babel-french")
+    (version (number->string %texlive-revision))
+    (source
+     (origin
+       (method svn-fetch)
+       (uri (texlive-ref "generic" "babel-french"))
+       (file-name (string-append name "-" version "-checkout"))
+       (sha256
+        (base32 "0ww8bkbccacdyp2y3p2m1y49zxx5pyh7dyyyyfmlzfm6w9rz0g1g"))))
+    (build-system texlive-build-system)
+    (arguments '(#:tex-directory "generic/babel-french"))
+    (home-page "https://www.ctan.org/pkg/babel-french")
+    (synopsis "Babel support for French")
+    (description
+     "This package provides support for the French language for the
+babel multilingual system.")
+    (license license:lppl1.3+)))
+
 (define-public texlive-generic-babel-german
   (package
     (name "texlive-generic-babel-german")
@@ -3553,7 +4079,7 @@ for Canadian and USA text.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "129f9w41cb6yyrr6kpv3zz9ml6334hyq1wcz7j9jn47p0hlxqfk8"))))
+                "1x9hnr9gz5mqdb97cinivn9xjnfr4qi996aa4cnr2sm2dsbhqxnp"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "generic/babel-german"))
     (home-page "https://www.ctan.org/pkg/babel-german")
@@ -3571,7 +4097,7 @@ Swiss varieties of German.")
                    "texlive-babel-swedish"
                    (list "/source/generic/babel-swedish/")
                    (base32
-                    "0swdg2l5i7cbcvy4q4xgsnwwnbxiyvs6f5b72kiw7mjn24v27g8f"))))
+                    "03rp4n9wkqyckman765r8v8j2pg5fg9frbfxsnhq0i2mr0yhbr6v"))))
     (package
       (inherit template)
       (arguments
@@ -3614,67 +4140,133 @@ T2* and X2 encodings. These encodings cover (between them) pretty much every
 language that is written in a Cyrillic alphabet.")
     (license license:lppl1.3c+)))
 
-(define-public texlive-latex-psnfss
-  (package
-    (name "texlive-latex-psnfss")
-    (version (number->string %texlive-revision))
-    (source (origin
-              (method svn-fetch)
-              (uri (texlive-ref "latex" "psnfss"))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "1920dcq8613yzprasbg80fh4fcjcidvvl54wkx438nimyxcri7qz"))))
-    (build-system texlive-build-system)
-    (arguments '(#:tex-directory "latex/psnfss"))
-    (home-page "https://www.ctan.org/pkg/psnfss")
-    (synopsis "Font support for common PostScript fonts")
-    (description
-     "The PSNFSS collection includes a set of files that provide a complete
-working setup of the LaTeX font selection scheme (NFSS2) for use with common
-PostScript fonts.  It covers the so-called \"Base\" fonts (which are built
-into any Level 2 PostScript printing device and the Ghostscript interpreter)
-and a number of free fonts.  It provides font definition files, macros and
-font metrics.  The bundle as a whole is part of the LaTeX required set of
-packages.")
-    (license license:lppl1.2+)))
-
-;; TODO: this should supersede texlive-latex-psnfss, but we can't do this
-;; before the next rebuild cycle.
 (define-public texlive-psnfss
   (let ((template (simple-texlive-package
                    "texlive-psnfss"
                    (list "/doc/latex/psnfss/"
                          "/source/latex/psnfss/"
                          "/fonts/map/dvips/psnfss/"
-                         ;; Only the sty files are generated.  We need all the .fd
-                         ;; files.
-                         "/tex/latex/psnfss/")
+
+                         ;; Only the .sty files are generated from the sources.
+                         "/tex/latex/psnfss/8rbch.fd"
+                         "/tex/latex/psnfss/8rpag.fd"
+                         "/tex/latex/psnfss/8rpbk.fd"
+                         "/tex/latex/psnfss/8rpcr.fd"
+                         "/tex/latex/psnfss/8rphv.fd"
+                         "/tex/latex/psnfss/8rpnc.fd"
+                         "/tex/latex/psnfss/8rppl.fd"
+                         "/tex/latex/psnfss/8rptm.fd"
+                         "/tex/latex/psnfss/8rput.fd"
+                         "/tex/latex/psnfss/8rpzc.fd"
+                         "/tex/latex/psnfss/omlbch.fd"
+                         "/tex/latex/psnfss/omlpag.fd"
+                         "/tex/latex/psnfss/omlpbk.fd"
+                         "/tex/latex/psnfss/omlpcr.fd"
+                         "/tex/latex/psnfss/omlphv.fd"
+                         "/tex/latex/psnfss/omlpnc.fd"
+                         "/tex/latex/psnfss/omlppl.fd"
+                         "/tex/latex/psnfss/omlptm.fd"
+                         "/tex/latex/psnfss/omlptmcm.fd"
+                         "/tex/latex/psnfss/omlput.fd"
+                         "/tex/latex/psnfss/omlpzc.fd"
+                         "/tex/latex/psnfss/omlzplm.fd"
+                         "/tex/latex/psnfss/omlzpple.fd"
+                         "/tex/latex/psnfss/omlztmcm.fd"
+                         "/tex/latex/psnfss/omsbch.fd"
+                         "/tex/latex/psnfss/omspag.fd"
+                         "/tex/latex/psnfss/omspbk.fd"
+                         "/tex/latex/psnfss/omspcr.fd"
+                         "/tex/latex/psnfss/omsphv.fd"
+                         "/tex/latex/psnfss/omspnc.fd"
+                         "/tex/latex/psnfss/omsppl.fd"
+                         "/tex/latex/psnfss/omsptm.fd"
+                         "/tex/latex/psnfss/omsput.fd"
+                         "/tex/latex/psnfss/omspzc.fd"
+                         "/tex/latex/psnfss/omspzccm.fd"
+                         "/tex/latex/psnfss/omszplm.fd"
+                         "/tex/latex/psnfss/omszpple.fd"
+                         "/tex/latex/psnfss/omsztmcm.fd"
+                         "/tex/latex/psnfss/omxpsycm.fd"
+                         "/tex/latex/psnfss/omxzplm.fd"
+                         "/tex/latex/psnfss/omxzpple.fd"
+                         "/tex/latex/psnfss/omxztmcm.fd"
+                         "/tex/latex/psnfss/ot1bch.fd"
+                         "/tex/latex/psnfss/ot1pag.fd"
+                         "/tex/latex/psnfss/ot1pbk.fd"
+                         "/tex/latex/psnfss/ot1pcr.fd"
+                         "/tex/latex/psnfss/ot1phv.fd"
+                         "/tex/latex/psnfss/ot1pnc.fd"
+                         "/tex/latex/psnfss/ot1ppl.fd"
+                         "/tex/latex/psnfss/ot1pplj.fd"
+                         "/tex/latex/psnfss/ot1pplx.fd"
+                         "/tex/latex/psnfss/ot1ptm.fd"
+                         "/tex/latex/psnfss/ot1ptmcm.fd"
+                         "/tex/latex/psnfss/ot1put.fd"
+                         "/tex/latex/psnfss/ot1pzc.fd"
+                         "/tex/latex/psnfss/ot1zplm.fd"
+                         "/tex/latex/psnfss/ot1zpple.fd"
+                         "/tex/latex/psnfss/ot1ztmcm.fd"
+                         "/tex/latex/psnfss/t1bch.fd"
+                         "/tex/latex/psnfss/t1pag.fd"
+                         "/tex/latex/psnfss/t1pbk.fd"
+                         "/tex/latex/psnfss/t1pcr.fd"
+                         "/tex/latex/psnfss/t1phv.fd"
+                         "/tex/latex/psnfss/t1pnc.fd"
+                         "/tex/latex/psnfss/t1ppl.fd"
+                         "/tex/latex/psnfss/t1pplj.fd"
+                         "/tex/latex/psnfss/t1pplx.fd"
+                         "/tex/latex/psnfss/t1ptm.fd"
+                         "/tex/latex/psnfss/t1put.fd"
+                         "/tex/latex/psnfss/t1pzc.fd"
+                         "/tex/latex/psnfss/ts1bch.fd"
+                         "/tex/latex/psnfss/ts1pag.fd"
+                         "/tex/latex/psnfss/ts1pbk.fd"
+                         "/tex/latex/psnfss/ts1pcr.fd"
+                         "/tex/latex/psnfss/ts1phv.fd"
+                         "/tex/latex/psnfss/ts1pnc.fd"
+                         "/tex/latex/psnfss/ts1ppl.fd"
+                         "/tex/latex/psnfss/ts1pplj.fd"
+                         "/tex/latex/psnfss/ts1pplx.fd"
+                         "/tex/latex/psnfss/ts1ptm.fd"
+                         "/tex/latex/psnfss/ts1put.fd"
+                         "/tex/latex/psnfss/ts1pzc.fd"
+                         "/tex/latex/psnfss/ufplm.fd"
+                         "/tex/latex/psnfss/ufplmbb.fd"
+                         "/tex/latex/psnfss/upsy.fd"
+                         "/tex/latex/psnfss/upzd.fd")
                    (base32
-                    "04y7v4bghpzky6c3l6qadx7s47m69jh1y615g91rxcn8z3r190di")
-                   #:trivial? #false)))
+                    "11f14dzhwsy4pli21acccip43d36nf3pac33ihjffnps1i2mhqkd"))))
     (package
       (inherit template)
       (arguments
        (substitute-keyword-arguments (package-arguments template)
-         ((#:tex-directory _ '())
+         ((#:tex-directory _ #t)
           "latex/psnfss")
          ((#:phases phases)
           `(modify-phases ,phases
              (add-after 'unpack 'chdir
-               (lambda _ (chdir "source/latex/psnfss")))))))
+               (lambda _
+                 (chdir "source/latex/psnfss") #t))))))
+      (native-inputs
+       (list texlive-cm))
       (home-page "https://www.ctan.org/pkg/psnfss")
       (synopsis "Font support for common PostScript fonts")
       (description
        "The PSNFSS collection includes a set of files that provide a complete
 working setup of the LaTeX font selection scheme (NFSS2) for use with common
-PostScript fonts.  It covers the so-called \"Base\" fonts (which are built
-into any Level 2 PostScript printing device and the Ghostscript interpreter)
-and a number of free fonts.  It provides font definition files, macros and
-font metrics.  The bundle as a whole is part of the LaTeX required set of
-packages.")
+PostScript fonts.  The base set of text fonts covered by PSNFSS includes the
+AvantGarde, Bookman, Courier, Helvetica, New Century Schoolbook, Palatino,
+Symbol, Times Roman and Zapf Dingbats fonts.  In addition, the fonts Bitstream
+Charter and Adobe Utopia are covered.  Separate packages are provided to load
+each font for use as the main text font.  The package @code{helvet} allows
+Helvetica to be loaded with its size scaled to something more appropriate for
+use as a Sans-Serif font to match Times, while @code{pifont} provides the
+means to select single glyphs from symbol fonts.  The bundle as a whole is
+part of the LaTeX required set of packages.")
       (license license:lppl1.2+))))
 
+(define-deprecated-package texlive-latex-psnfss texlive-psnfss)
+
 ;; For user profiles
 (define-public texlive-base
   (let ((default-packages
@@ -3682,17 +4274,19 @@ packages.")
                 texlive-dvips
                 texlive-fontname
                 texlive-cm
+                texlive-cm-super ; to avoid bitmap fonts
                 texlive-fonts-latex
-                texlive-metafont-base
+                texlive-metafont
                 texlive-latex-base
+                texlive-kpathsea       ;for mktex.opt
                 ;; LaTeX packages from the "required" set.
                 texlive-latex-amsmath
-                texlive-latex-amscls
-                texlive-latex-babel
+                texlive-amscls
+                texlive-babel
                 texlive-generic-babel-english
                 texlive-latex-cyrillic
                 texlive-latex-graphics
-                texlive-latex-psnfss
+                texlive-psnfss
                 texlive-latex-tools
                 texlive-tetex)))
     (package
@@ -3720,144 +4314,86 @@ It includes little more than the required set of LaTeX packages.")
                      '()
                      default-packages)))))
 
-(define-public texlive-default-updmap.cfg
-  (origin
-    (method url-fetch)
-    (uri (string-append "https://tug.org/svn/texlive/tags/"
-                        %texlive-tag "/Master/texmf-dist/web2c/updmap.cfg"
-                        "?revision=" (number->string %texlive-revision)))
-    (file-name (string-append "updmap.cfg-"
-                              (number->string %texlive-revision)))
-    (sha256
-     (base32
-      "0faqknqxs80qp9ywk0by5k85s0yalg97c4lja4q56lsyblrr4j7i"))))
-
-;; For use in package definitions only
-(define-public texlive-union
+;;; TODO: Add a TeX Live profile hook computing fonts maps (and others?)
+;;; configuration from the packages in the profile, similar to what's done
+;;; below.
+(define-public texlive-updmap.cfg
   (lambda* (#:optional (packages '()))
-    "Return 'texlive-union' package which is a union of PACKAGES and the
-standard LaTeX packages."
+    "Return a 'texlive-updmap.cfg' package which contains the fonts map
+configuration of a base set of packages plus PACKAGES."
     (let ((default-packages (match (package-propagated-inputs texlive-base)
                               (((labels packages) ...) packages))))
-      (package (inherit texlive-base)
-        (name "texlive-union")
-        (build-system trivial-build-system)
+      (package
+        (version (number->string %texlive-revision))
+        (source (origin
+                  (method url-fetch)
+                  (uri (string-append "https://tug.org/svn/texlive/tags/"
+                                      %texlive-tag
+                                      "/Master/texmf-dist/web2c/updmap.cfg"
+                                      "?revision=" version))
+                  (file-name "updmap.cfg")
+                  (sha256
+                   (base32
+                    "0zhpyld702im6352fwp41f2hgfkpj2b4j1kfsjqbkijlcmvb6w2c"))))
+        (name "texlive-updmap.cfg")
+        (build-system copy-build-system)
         (arguments
-         '(#:modules ((guix build union)
+         '(#:modules ((guix build copy-build-system)
                       (guix build utils)
-                      (guix build texlive-build-system)
-                      (guix build gnu-build-system)
-                      (guix build gremlin)
-                      (guix elf))
-           #:builder
-           (begin
-             (use-modules (ice-9 match)
-                          (ice-9 popen)
-                          (srfi srfi-26)
-                          (guix build union)
-                          (guix build utils)
-                          (guix build texlive-build-system))
-             (let* ((out       (assoc-ref %outputs "out"))
-                    (texmf.cnf (string-append out "/share/texmf-dist/web2c/texmf.cnf")))
-               ;; Build a modifiable union of all inputs (but exclude bash and
-               ;; the updmap.cfg file)
-               (match (filter (match-lambda
-                                ((name . _)
-                                 (not (member name '("bash"
-                                                     "coreutils"
-                                                     "sed"
-                                                     "updmap.cfg")))))
-                              %build-inputs)
-                 (((names . directories) ...)
-                  (union-build (assoc-ref %outputs "out")
-                               directories
-                               #:create-all-directories? #t
-                               #:log-port (%make-void-port "w"))))
-
-               ;; The configuration file "texmf.cnf" is provided by the
-               ;; "texlive-bin" package.  We take it and override only the
-               ;; setting for TEXMFROOT and TEXMF.  This file won't be consulted
-               ;; by default, though, so we still need to set TEXMFCNF.
-               (substitute* texmf.cnf
-                 (("^TEXMFROOT = .*")
-                  (string-append "TEXMFROOT = " out "/share\n"))
-                 (("^TEXMF = .*")
-                  "TEXMF = $TEXMFROOT/share/texmf-dist\n"))
-               (setenv "PATH" (string-append
-                               (assoc-ref %build-inputs "bash") "/bin:"
-                               (assoc-ref %build-inputs "coreutils") "/bin:"
-                               (assoc-ref %build-inputs "sed") "/bin:"
-                               (string-append out "/bin")))
-               (for-each
-                (cut wrap-program <>
-                     `("TEXMFCNF" ":" suffix (,(dirname texmf.cnf)))
-                     `("TEXMF"    ":" suffix (,(string-append out "/share/texmf-dist"))))
-                (find-files (string-append out "/bin") ".*"))
-
-               ;; Remove invalid maps from config file.
-               (let ((web2c (string-append out "/share/texmf-config/web2c/"))
-                     (maproot (string-append out "/share/texmf-dist/fonts/map/")))
-                 (mkdir-p web2c)
-                 (copy-file
-                  (assoc-ref %build-inputs "updmap.cfg")
-                  (string-append web2c "updmap.cfg"))
-                 (make-file-writable (string-append web2c "updmap.cfg"))
+                      (ice-9 popen)
+                      (ice-9 textual-ports))
+           #:install-plan '(("updmap.cfg" "share/texmf-config/web2c/")
+                            ("map" "share/texmf-dist/fonts/map"))
+           #:phases
+           (modify-phases %standard-phases
+             (add-before 'install 'regenerate-updmap.cfg
+               (lambda _
+                 (make-file-writable "updmap.cfg")
 
+                 ;; Disable unavailable map files.
                  (let* ((port (open-pipe* OPEN_WRITE "updmap-sys"
                                           "--syncwithtrees"
                                           "--nohash"
-                                          (string-append "--cnffile=" web2c "updmap.cfg"))))
+                                          "--cnffile" "updmap.cfg")))
                    (display "Y\n" port)
                    (when (not (zero? (status:exit-val (close-pipe port))))
                      (error "failed to filter updmap.cfg")))
+
+                 ;; Set TEXMFSYSVAR to a sane and writable value; updmap fails
+                 ;; if it cannot create its log file there.
+                 (setenv "TEXMFSYSVAR" (getcwd))
+
                  ;; Generate maps.
                  (invoke "updmap-sys"
-                         (string-append "--cnffile=" web2c "updmap.cfg")
-                         (string-append "--dvipdfmxoutputdir="
-                                        maproot "dvipdfmx/updmap/")
-                         (string-append "--dvipsoutputdir="
-                                        maproot "dvips/updmap/")
-                         (string-append "--pdftexoutputdir="
-                                        maproot "pdftex/updmap/"))
-                 ;; Having this file breaks all file lookups later.
-                 (delete-file (string-append out "/share/texmf-dist/ls-R")))
-               #t))))
-        (inputs
-         `(("bash" ,bash)
-           ,@(map (lambda (package)
-                    (list (package-name package) package))
-                  (append default-packages packages))))
-        (native-inputs
-         `(("coreutils" ,coreutils)
-           ("sed" ,sed)
-           ("updmap.cfg"
-            ,(origin
-               (method url-fetch)
-               (uri (string-append "https://tug.org/svn/texlive/tags/"
-                                   %texlive-tag "/Master/texmf-dist/web2c/updmap.cfg"
-                                   "?revision=" (number->string %texlive-revision)))
-               (file-name (string-append "updmap.cfg-"
-                                         (number->string %texlive-revision)))
-               (sha256
-                (base32
-                 "0faqknqxs80qp9ywk0by5k85s0yalg97c4lja4q56lsyblrr4j7i"))))))
+                         "--cnffile"           "updmap.cfg"
+                         "--dvipdfmxoutputdir" "map/dvipdfmx/updmap/"
+                         "--dvipsoutputdir"    "map/dvips/updmap/"
+                         "--pdftexoutputdir"   "map/pdftex/updmap/"))))))
+        (propagated-inputs (map (lambda (package)
+                                  (list (package-name package) package))
+                                (append default-packages packages)))
         (home-page (package-home-page texlive-bin))
-        (synopsis "Union of TeX Live packages")
-        (description "This package provides a subset of the TeX Live
-distribution.")
-        (license (fold (lambda (package result)
-                         (match (package-license package)
-                           ((lst ...)
-                            (append lst result))
-                           ((? license:license? license)
-                            (cons license result))))
-                       '()
-                       (append default-packages packages)))))))
+        (synopsis "TeX Live fonts map configuration")
+        (description "This package contains the fonts map configuration file
+generated for the base TeX Live packages as well as, optionally, user-provided
+ones.")
+        (license (delete-duplicates
+                  (fold (lambda (package result)
+                          (match (package-license package)
+                            ((lst ...)
+                             (append lst result))
+                            ((? license:license? license)
+                             (cons license result))))
+                        '()
+                        (append default-packages packages))))))))
+
+(define-deprecated/alias texlive-union texlive-updmap.cfg)
+(export texlive-union)
 
 ;; For use in package definitions only
 (define-public texlive-tiny
   (package
-    (inherit (texlive-union))
+    (inherit (texlive-updmap.cfg))
     (name "texlive-tiny")
     (description "This is a very limited subset of the TeX Live distribution.
 It includes little more than the required set of LaTeX packages.")))
@@ -3874,7 +4410,7 @@ It includes little more than the required set of LaTeX packages.")))
                     "/fonts/type1/public/tipa/"
                     "/tex/latex/tipa/")
               (base32
-               "1h53dscv8z6fsa0ax5dys3x11b2f1g60l22hpdf7c88cvdhcs8sn")
+               "0cqzf8vb10b8jw99m9gflskxa4c3rpiznxglix6chl5lai5sgw44")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/tipa")
     (synopsis "Fonts and macros for IPA phonetics characters")
@@ -4017,7 +4553,7 @@ package.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1zyl2pcz2x529gzj5m93a1s4ipymdabf7qdjl3l1673pizd4hfyv"))))
+                "0rhn74ywv000b89w8qjf1i0qsk6kd1mjapfwis14jwjvbjqgvj95"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/draftwatermark"))
     (home-page "https://www.ctan.org/pkg/draftwatermark")
@@ -4081,6 +4617,37 @@ for a variety of alignment purposes, as is evidenced by the examples in
 also provided.")
     (license license:lppl1.3+)))
 
+(define-public texlive-latex-etoc
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-etoc"
+              '("/doc/latex/etoc/README.md"
+                "/doc/latex/etoc/etoc.pdf"
+                "/tex/latex/etoc/")
+              (base32
+               "0198cn75m1y8ggbfv1qlnif0d9275f6mxqsansyqw4np0rv6q9sv")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/etoc")
+    (synopsis "Completely customisable TOCs")
+    (description
+     "This package gives the user complete control of how the entries of
+the table of contents should be constituted from the name, number, and page
+number of each sectioning unit.  The layout is controlled by the definition
+of ‘line styles’ for each sectioning level used in the document.
+
+The package provides its own custom line styles (which may be used as
+examples), and continues to support the standard formatting inherited from
+the LaTeX document classes, but the package can also allow the user to
+delegate the details to packages dealing with list making environments (such
+as enumitem).  The package’s default global style typesets tables of contents
+in a multi-column format, with either a standard heading, or a ruled title
+(optionally with a frame around the table).
+
+The @code{\\tableofcontents} command may be used arbitrarily many times in
+the same document, while @code{\\localtableofcontents} provides a ‘local’
+table of contents.")
+    (license license:lppl1.3c+)))
+
 (define-public texlive-latex-expdlist
   (package
     (name "texlive-latex-expdlist")
@@ -4135,8 +4702,48 @@ mode.  The functionality is provided by purely expandable macros or by faster
 but non-expandable ones.")
     (license license:lppl1.3+)))
 
-(define-public texlive-latex-filemod
-  (deprecated-package "texlive-latex-filemod" texlive-filemod))
+(define-deprecated-package texlive-latex-filemod texlive-filemod)
+
+(define-public texlive-latex-hanging
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-hanging"
+              '("/tex/latex/hanging/")
+              (base32
+               "0s86yaxyfv9zxf4svwg9s13by9vrw38apfg0hsfchsimsdd6gsbb")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/hanging")
+    (synopsis "Typeset hanging paragraphs")
+    (description
+     "The @code{hanging} package facilitates the typesetting of hanging
+paragraphs.  The package also enables typesetting with hanging punctuation,
+by making punctuation characters active.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-fira
+  (package
+    (inherit (simple-texlive-package
+              "texlive-fira"
+              (list "doc/fonts/fira/"
+                    "tex/latex/fira/"
+                    "fonts/vf/public/fira/"
+                    "fonts/type1/public/fira/"
+                    "fonts/tfm/public/fira/"
+                    "fonts/opentype/public/fira/"
+                    "fonts/map/dvips/fira/"
+                    "fonts/enc/dvips/fira/")
+              (base32 "1v3688hziqz4jywfysiv19vsdzfkknrf83zfbi7lhiqpgkpsfsm2")
+              #:trivial? #t))
+    (build-system texlive-build-system)
+    (home-page "https://ctan.org/fonts/fira")
+    (synopsis "Fira fonts with LaTeX support")
+    (description
+     "This package provides LaTeX, pdfLaTeX, XeLaTeX and LuaLaTeX support for
+the Fira Sans family of fonts designed by Erik Spiekermann and Ralph du
+Carrois of Carrois Type Design.  Fira Sans is available in eleven weights with
+corresponding italics: light, regular, medium, bold, ...")
+    (license (list license:lppl
+                   license:silofl1.1))))
 
 (define-public texlive-latex-ifplatform
   (package
@@ -4187,6 +4794,41 @@ that are compatible with @code{natbib}: @code{plainnat}, @code{unsrtnat},
 designed from the start to be compatible with @code{natbib}.")
     (license license:lppl)))
 
+(define-public texlive-latex-newunicodechar
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-newunicodechar"
+              '("/doc/latex/newunicodechar/" "/tex/latex/newunicodechar/")
+              (base32
+               "0pwx3ylhvk5hxjnalas00grrbwla79j424i27hrm0zgflq7wsbrj")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/newunicodechar")
+    (synopsis "Definitions of the meaning of Unicode characters")
+    (description
+     "This package provides a friendly interface for defining the meaning of
+Unicode characters.  The document should be processed by (pdf)LaTeX with the
+Unicode option of @code{inputenc} or @code{inputenx}, or by XeLaTeX/LuaLaTeX.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-latex-pdftexcmds
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-pdftexcmds"
+              '("/doc/generic/pdftexcmds/"
+                "/tex/generic/pdftexcmds/")
+              (base32
+               "1hph0djbfc8hlwfc41rzlf8l3ccyyvc0n7a0qdrr9881jwd6iv1b")
+              #:trivial? #t))
+    (propagated-inputs
+     (list texlive-generic-iftex texlive-generic-infwarerr
+           texlive-generic-ltxcmds))
+    (home-page "https://www.ctan.org/pkg/pdftexcmds")
+    (synopsis "LuaTeX support for pdfTeX utility functions")
+    (description
+     "This package makes a number of utility functions from pdfTeX
+available for luaTeX by reimplementing them using Lua.")
+    (license license:lppl1.3c+)))
+
 (define-public texlive-latex-psfrag
   (package
     (name "texlive-latex-psfrag")
@@ -4222,16 +4864,16 @@ rotated.")
                "12clzcw2cl7g2chr2phgmmiwxw4859cln1gbx1wgp8bl9iw590nc")
               #:trivial? #t))
     (propagated-inputs
-     `(("texlive-latex-bigfoot" ,texlive-latex-bigfoot) ; for suffix
-       ("texlive-latex-filemod" ,texlive-latex-filemod)
-       ("texlive-latex-graphics" ,texlive-latex-graphics)
-       ("texlive-latex-ifplatform" ,texlive-latex-ifplatform)
-       ("texlive-latex-l3kernel" ,texlive-latex-l3kernel) ; for expl3
-       ("texlive-latex-oberdiek" ,texlive-latex-oberdiek)
-       ("texlive-latex-psfrag" ,texlive-latex-psfrag)
-       ("texlive-latex-tools" ,texlive-latex-tools) ; for shellesc
-       ("texlive-latex-trimspaces" ,texlive-latex-trimspaces)
-       ("texlive-latex-xkeyval" ,texlive-latex-xkeyval)))
+     (list texlive-latex-bigfoot ; for suffix
+           texlive-filemod
+           texlive-latex-graphics
+           texlive-latex-ifplatform
+           texlive-latex-l3kernel ; for expl3
+           texlive-oberdiek
+           texlive-latex-psfrag
+           texlive-latex-tools ; for shellesc
+           texlive-latex-trimspaces
+           texlive-latex-xkeyval))
     (home-page "https://www.ctan.org/pkg/pstool")
     (synopsis "Process PostScript graphics within pdfLaTeX documents")
     (description
@@ -4241,8 +4883,26 @@ drastically speeding up compilation time when only a single figure needs
 re-processing.")
     (license license:lppl)))
 
-(define-public texlive-latex-pstool
-  (deprecated-package "texlive-latex-pstool" texlive-pstool))
+(define-deprecated-package texlive-latex-pstool texlive-pstool)
+
+(define-public texlive-latex-refcount
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-refcount"
+              (list "/doc/latex/refcount/"
+                    "/tex/latex/refcount/")
+              (base32
+               "0pkmqj2qihndlv3ks33xzqw91q46jx79r3aygj68d8dflyddi583")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/refcount")
+    (synopsis "Counter operations with label references")
+    (description
+     "This package provides the @code{\\setcounterref} and
+@code{\\addtocounterref} commands which use the section (or other) number
+from the reference as the value to put into the counter.  It also provides
+@code{\\setcounterpageref} and @code{\\addtocounterpageref} that do the
+corresponding thing with the page reference of the label.")
+    (license license:lppl1.3c+)))
 
 (define-public texlive-seminar
   (package
@@ -4264,8 +4924,41 @@ recent classes such as powerdot or beamer, both of which are tuned to
 21st-century presentation styles.")
     (license license:lppl1.2+)))
 
-(define-public texlive-latex-seminar
-  (deprecated-package "texlive-latex-seminar" texlive-seminar))
+(define-deprecated-package texlive-latex-seminar texlive-seminar)
+
+(define-public texlive-latex-stackengine
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-stackengine"
+              (list "/doc/latex/stackengine/"
+                    "/tex/latex/stackengine/")
+              (base32
+               "1rbw3dmb6kl3wlnpxacr8cmp2ivac1kpnb33k7r5s3lp1q59ck38")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/stackengine")
+    (synopsis "Customised stacking of objects")
+    (description
+     "The package provides a versatile way to stack objects vertically in a
+variety of customizable ways.  A number of useful macros are provided, all
+of which make use of the @code{stackengine} core.")
+    (license license:lppl1.3+)))
+
+(define-public texlive-latex-tocloft
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-tocloft"
+              '("/doc/latex/tocloft/" "/tex/latex/tocloft/")
+              (base32
+               "0mg3hpzq7wpm6mnnvb0rp3wby56zyxkyai8d2h3f4vk93zrc6awk")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/tocloft")
+    (synopsis "Control table of contents")
+    (description
+     "This package provides control over the typography of the
+@dfn{Table of Contents}, @dfn{List of Figures} and @dfn{List of Tables},
+and the ability to create new ‘List of ...’. The ToC @code{\\parskip} may
+be changed.")
+    (license license:lppl1.3c+)))
 
 (define-public texlive-latex-trimspaces
   (package
@@ -4291,7 +4984,7 @@ recent classes such as powerdot or beamer, both of which are tuned to
                (("pstool.tex") "trimspaces.tex"))
              #t)))))
     (inputs
-     `(("texlive-latex-filecontents" ,texlive-latex-filecontents)))
+     (list texlive-latex-filecontents))
     (home-page "https://www.ctan.org/pkg/trimspaces")
     (synopsis "Trim spaces around an argument or within a macro")
     (description
@@ -4355,8 +5048,7 @@ hyperlink to the target of the DOI.")
     ;; Any version of the LPPL.
     (license license:lppl1.3+)))
 
-(define-public texlive-latex-doi
-  (deprecated-package "texlive-latex-doi" texlive-doi))
+(define-deprecated-package texlive-latex-doi texlive-doi)
 
 (define-public texlive-etoolbox
   (package
@@ -4365,7 +5057,7 @@ hyperlink to the target of the DOI.")
               (list "/doc/latex/etoolbox/"
                     "/tex/latex/etoolbox/")
               (base32
-               "1cc1vw1ach55g4ff4x30by8k1mg01w199ccxvn72f5khlnnxial0")
+               "070iaj540rglf0c80l0hjkwg6aa7qyskhh4iwyhf7n8vrg5cjjab")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/etoolbox")
     (synopsis "e-TeX tools for LaTeX")
@@ -4379,8 +5071,7 @@ some LaTeX kernel commands; nevertheless, the package will not modify any part
 of the LaTeX kernel.")
     (license license:lppl1.3+)))
 
-(define-public texlive-latex-etoolbox
-  (deprecated-package "texlive-latex-etoolbox" texlive-etoolbox))
+(define-deprecated-package texlive-latex-etoolbox texlive-etoolbox)
 
 (define-public texlive-latex-fncychap
   (package
@@ -4540,11 +5231,11 @@ BibLaTeX, and is considered experimental.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0a8f38c2ds1flxcr0apdpyaaz3k6fyalz6dkbrmcv9srjc40mh3n"))))
+                "0a9nrmiwksnpa6iaapirqid974ai56qgin2n4h9mggy9v8gp7r71"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/geometry"))
     (propagated-inputs
-     `(("texlive-latex-oberdiek" ,texlive-latex-oberdiek))) ;for ifpdf
+     (list texlive-oberdiek)) ;for ifpdf
     (home-page "https://www.ctan.org/pkg/geometry")
     (synopsis "Flexible and complete interface to document dimensions")
     (description
@@ -4591,7 +5282,7 @@ array environments; verbatim handling; and syntax diagrams.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0na7v4hsyx5s67cpjj2dbnq8j67k8lln6b19hmj631gfs27slss1"))))
+                "1ci6hr8hx4g2x359n6wqvw6w8fv42cjjpzxxxd3pn6av5nkaiav3"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/polyglossia"))
     (home-page "https://www.ctan.org/pkg/polyglossia")
@@ -4611,7 +5302,7 @@ and XeLaTeX; it relies on the @code{fontspec} package, version 2.0 at least.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "14b2bc7cqz4ckxxycim9sw6jkrr1pahivm1rdbpz5k6hl967w1s3"))))
+                "19fd0bqxjkzc16bza3w20pnsc90gbhbllm244b3h6sink4dlnn54"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/supertabular"))
     (home-page "https://www.ctan.org/pkg/supertabular")
@@ -4637,7 +5328,7 @@ situations where longtable has problems.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "16jy02m089m7n6v9vbfi4xjgngc1fnvsmmppk8axfwzbhdky3c9c"))))
+                "1qcmcsxdsibca0mad559vhz36xaxsbkivgv1hc98vdyd90fg4y31"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -4731,7 +5422,7 @@ considered obsolete; alternatives are the @code{typearea} package from the
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0rxfpr8vq3brwx5rc7qn91ixlp9zva4zrms8a579fqa1g5yva7vg"))))
+                "1gc2brr2rs495w7qi6spdva1xrza94x7a36dncjdkghnsq8r92h4"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/appendix"))
     (home-page "https://www.ctan.org/pkg/appendix")
@@ -4744,6 +5435,23 @@ environment is provided which can be used instead of the @code{\\appendix}
 command.")
     (license license:lppl)))
 
+(define-public texlive-latex-bookmark
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-bookmark"
+              (list "/doc/latex/bookmark/"
+                    "/tex/latex/bookmark/")
+              (base32
+               "0xwjdah0p4an0fknvgj9y5phl62sf522z6570pvy6c09hkz0j4h1")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/bookmark")
+    (synopsis "Bookmark (outline) organization for hyperref")
+    (description
+     "This package implements a new bookmark (outline) organization for the
+@code{hyperref} package.  Bookmark properties such as style and color.  Other
+action types are available (URI, GoToR, Named).")
+    (license license:lppl1.3c+)))
+
 (define-public texlive-latex-changebar
   (package
     (name "texlive-latex-changebar")
@@ -4781,7 +5489,7 @@ drivers, and VTeX and pdfTeX.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1s1rv6zgw105w2j6ffhnk914qrix87y1ndzri1q72g2kbr91zlbg"))))
+                "0m4r52gw9vwsi1pzwh0cy03jxhwizymi4a2fj3jfs5rrvh105r5y"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -4811,7 +5519,7 @@ copy-and-paste functions work properly.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "16vd99p01a0y30xr5yf1z2j5da9x8gy21vb30wk08jh31zffbaqj"))))
+                "1qa0mh0fy9hcvfsmprv6q50q0qzdjjfbxi3axap26z6zg3qj68bc"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/colortbl"))
     (home-page "https://www.ctan.org/pkg/colortbl")
@@ -4870,7 +5578,7 @@ floats, center, flushleft, and flushright, lists, and pages.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0hrwspqkqfahxyzzsnjyrxlgxj06zw1f3636gx76pvl4xhvdj1cj"))))
+                "1h2zv7cps0pknqhy2dyfclyi002lmsfshm0rn6ywfl9p4fnvh0bc"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -4938,6 +5646,24 @@ the same place.  The package also has a range of techniques for labelling
 footnotes with symbols rather than numbers.")
     (license license:lppl1.3+)))
 
+(define-public texlive-latex-letltxmacro
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-letltxmacro"
+              (list "/doc/latex/letltxmacro/"
+                    "/tex/latex/letltxmacro/")
+              (base32
+               "0yy1m1jiyxq2pssp0pidaa2swx6lyxw3zwpm2r8m0v2r3lvsyyxx")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/letltxmacro")
+    (synopsis "Let assignment for macros")
+    (description
+     "TeX’s @code{\\let} assignment does not work for LaTeX macros with
+optional arguments, or for macros that are defined as robust macros by
+@code{\\DeclareRobustCommand}.  This package defines @code{\\LetLtxMacro}
+that also takes care of the involved internal macros.")
+    (license license:lppl1.3c+)))
+
 (define-public texlive-latex-listings
   (package
     (name "texlive-latex-listings")
@@ -4948,7 +5674,7 @@ footnotes with symbols rather than numbers.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1fbrhqj22vzakn30j71fc41l8nliqbv1dmxm0zlwi2qjjbq6fwav"))))
+                "082zri3gp8s6p2difhk1pbix2vzmvsf6fmld2z78v35xwk3fiya0"))))
     (build-system texlive-build-system)
     (arguments
      '(#:tex-directory "latex/listings"
@@ -5001,6 +5727,24 @@ transliterate semitic languages; patches to make (La)TeX formulae embeddable
 in SGML; use maths minus in text as appropriate; simple Young tableaux.")
     (license license:gpl2)))
 
+(define-public texlive-latex-kvoptions
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-kvoptions"
+              (list "/doc/latex/kvoptions/"
+                    "/tex/latex/kvoptions/")
+              (base32
+               "02i4n2n3j4lg68d3nam08m63kb4irc99wfhyc2z51r02lm1wwmvw")
+              #:trivial? #t))
+    (propagated-inputs
+     (list texlive-generic-kvsetkeys texlive-generic-ltxcmds))
+    (home-page "https://www.ctan.org/pkg/kvoptions")
+    (synopsis "Key/value format for package options")
+    (description
+     "This package provides facilities for using key-value format in
+package options.")
+    (license license:lppl1.3c+)))
+
 (define-public texlive-fonts-ec
   (package
     (name "texlive-fonts-ec")
@@ -5028,7 +5772,7 @@ in SGML; use maths minus in text as appropriate; simple Young tableaux.")
          (delete 'configure)
          (replace 'build
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((mf (assoc-ref inputs "texlive-metafont-base")))
+             (let ((mf (assoc-ref inputs "texlive-metafont")))
                ;; Tell mf where to find mf.base
                (setenv "MFBASES" (string-append mf "/share/texmf-dist/web2c"))
                ;; Tell mf where to look for source files
@@ -5062,9 +5806,7 @@ in SGML; use maths minus in text as appropriate; simple Young tableaux.")
                          (find-files "." "\\.mf"))
                #t))))))
     (native-inputs
-     `(("texlive-bin" ,texlive-bin)
-       ("texlive-metafont-base" ,texlive-metafont-base)
-       ("texlive-cm" ,texlive-cm)))
+     (list texlive-bin texlive-metafont texlive-cm))
     (home-page "https://www.ctan.org/pkg/ec")
     (synopsis "Computer modern fonts in T1 and TS1 encodings")
     (description
@@ -5121,7 +5863,7 @@ via the CM-super, Latin Modern and (in a restricted way) CM-LGC font sets.")
                     "/fonts/type1/public/inconsolata/"
                     "/tex/latex/inconsolata/")
               (base32
-               "1a77w26m4c4j0202s1qkikz7ha6cxlv8zxhzi9s3l0x1l2pl7cr2")
+               "19lvma52vk7x8d7j4s9ymjwm3w2k08860fh6dkzn76scgpdm4wlb")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/inconsolata")
     (synopsis "Monospaced font with support files for use with TeX")
@@ -5160,8 +5902,7 @@ Adobe's basic set.")
     ;; No license version specified.
     (license license:gpl3+)))
 
-(define-public texlive-fonts-adobe-times
-  (deprecated-package "texlive-fonts-adobe-times" texlive-times))
+(define-deprecated-package texlive-fonts-adobe-times texlive-times)
 
 (define-public texlive-palatino
   (package
@@ -5189,8 +5930,7 @@ Adobe's basic set.")
     ;; No license version specified.
     (license license:gpl3+)))
 
-(define-public texlive-fonts-adobe-palatino
-  (deprecated-package "texlive-fonts-adobe-palatino" texlive-palatino))
+(define-deprecated-package texlive-fonts-adobe-palatino texlive-palatino)
 
 (define-public texlive-zapfding
   (package
@@ -5215,8 +5955,7 @@ Adobe's basic set.")
     ;; No license version specified.
     (license license:gpl3+)))
 
-(define-public texlive-fonts-adobe-zapfding
-  (deprecated-package "texlive-fonts-adobe-zapfding" texlive-zapfding))
+(define-deprecated-package texlive-fonts-adobe-zapfding texlive-zapfding)
 
 (define-public texlive-fonts-rsfs
   (package
@@ -5245,7 +5984,7 @@ Adobe's basic set.")
          (delete 'configure)
          (replace 'build
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((mf (assoc-ref inputs "texlive-metafont-base")))
+             (let ((mf (assoc-ref inputs "texlive-metafont")))
                ;; Tell mf where to find mf.base
                (setenv "MFBASES" (string-append mf "/share/texmf-dist/web2c"))
                ;; Tell mf where to look for source files
@@ -5279,9 +6018,7 @@ Adobe's basic set.")
                          (find-files "." "\\.mf"))
                #t))))))
     (native-inputs
-     `(("texlive-bin" ,texlive-bin)
-       ("texlive-metafont-base" ,texlive-metafont-base)
-       ("texlive-cm" ,texlive-cm)))
+     (list texlive-bin texlive-metafont texlive-cm))
     (home-page "https://www.ctan.org/pkg/rsfs")
     (synopsis "Ralph Smith's Formal Script font")
     (description
@@ -5303,7 +6040,7 @@ one of the packages @code{calrsfs} and @code{mathrsfs}.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0y2y08kr3w6asm9lblj9yywqmhaal36fq71zzcbfsc7cvwf641q7"))))
+                "12f7pbhiav4iz3rra5vq85v9f14h8j1ybi42kvnkzgjsay87p7gf"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/eso-pic"))
     (home-page "https://www.ctan.org/pkg/eso-pic")
@@ -5365,7 +6102,7 @@ splines, and filled circles and ellipses.  The package uses @code{tpic}
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1vm9xp67hzif0pqab4r3ialf0cyhi0fa4p8kxgp1ymcf85pqip14"))))
+                "1j8svflnx9w897mdavyf1f0n256wh4bbclrhv5vx7b501gmlbp7d"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -5397,7 +6134,7 @@ in the form @code{key=value} are available, for example:
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "07vbcp6avdwldr870cwf65av2s9lfyzcpp8gpld53yw6lcxgaipj"))))
+                "1kak9i6nwz6vc4xjj6lbvkb69s49pis6qynjzvsjraxbdw28y2dq"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/multirow"))
     (home-page "https://www.ctan.org/pkg/multirow")
@@ -5422,7 +6159,7 @@ entry at the \"natural\" width of its text.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1pr6ym3ad7x14ng7gmhsmywh3685d2cnm5qgyrqbigng2r6fcc1k"))))
+                "1ygsr0rsdabj61zask3346xrwiphz5i6f1nfb9k4d3234psh09kb"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -5458,7 +6195,7 @@ positions; a grid for orientation is available.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0j1fhm1m9k6rz80lmch3x44g20y9nm4abaaf8czb0q8hzwlx5aq5"))))
+                "1zll8jci8lsd7y44j567akf6y8fp2p7qq23rs527zhr0br9mn3sh"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -5488,7 +6225,7 @@ designed class) helps alleviate this untidiness.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0s4izcah7im67889qz4d26pcfpasmm35sj1rw4ragkkdk3rlbbbd"))))
+                "140kl8r7g2ak2frjn5pmwiwibfynyfwp897r9vk8pypmn390lzr2"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/pdfpages"))
     (home-page "https://www.ctan.org/pkg/pdfpages")
@@ -5502,38 +6239,47 @@ package supports pdfTeX (pdfLaTeX) and VTeX.  With VTeX it is even possible to
 use this package to insert PostScript files, in addition to PDF files.")
     (license license:lppl1.3+)))
 
-(define-public texlive-fonts-stmaryrd
-  (package
-    (name "texlive-fonts-stmaryrd")
-    (version (number->string %texlive-revision))
-    (source (origin
-              (method svn-fetch)
-              (uri (texlive-ref "fonts" "stmaryrd"))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "08pn4ca3vl6qm9l3wm5h5iyjsrg411kkm1yana329xwg2j14s9n6"))))
-    (build-system texlive-build-system)
-    (arguments
-     '(#:tex-directory "latex/stmaryrd"
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'configure 'patch-ins
-           (lambda _
-             (substitute* "stmaryrd.ins"
-               (("^%% LaTeX2e.*") "\\input docstrip\n")
-               (("fontdef\\}\\}" line)
-                (string-append line "\n\\endbatchfile")))
-             #t)))))
-    (home-page "https://www.ctan.org/pkg/stmaryrd")
-    (synopsis "St Mary Road symbols for theoretical computer science")
-    (description
-     "The fonts were originally distributed as Metafont sources only, but
+(define-public texlive-stmaryrd
+  (let ((template (simple-texlive-package
+                   "texlive-stmaryrd"
+                   (list "/fonts/afm/public/stmaryrd/"
+                         "/fonts/map/dvips/stmaryrd/"
+                         "/fonts/source/public/stmaryrd/"
+                         "/fonts/tfm/public/stmaryrd/"
+                         "/fonts/type1/public/stmaryrd/"
+                         "/source/fonts/stmaryrd/"
+                         "/doc/fonts/stmaryrd/")
+                   (base32
+                    "0yn0yl6x1z9ab5gb56lhvkqabd2agz3ggxifwxkiysrj5780j29z"))))
+    (package
+      (inherit template)
+      (arguments (substitute-keyword-arguments (package-arguments template)
+                   ((#:tex-directory _ #t)
+                    "latex/stmaryrd")
+                   ((#:phases phases)
+                    `(modify-phases ,phases
+                       (add-after 'unpack 'chdir
+                         (lambda _
+                           (chdir "source/fonts/stmaryrd")
+                           #t))
+                       (add-after 'chdir 'patch-ins
+                         (lambda _
+                           (substitute* "stmaryrd.ins"
+                             (("^%% LaTeX2e.*") "\\input docstrip\n")
+                             (("fontdef\\}\\}" line)
+                              (string-append line "\n\\endbatchfile")))
+                           #t))))))
+      (home-page "https://www.ctan.org/pkg/stmaryrd")
+      (synopsis "St Mary Road symbols for theoretical computer science")
+      (description
+       "The fonts were originally distributed as Metafont sources only, but
 Adobe Type 1 versions are also now available.  Macro support is provided for
 use under LaTeX; the package supports the @code{only} option (provided by the
 @code{somedefs} package) to restrict what is loaded, for those who don't need
 the whole font.")
-    (license license:lppl)))
+      (license license:lppl))))
+
+(define-deprecated-package texlive-fonts-stmaryrd texlive-stmaryrd)
 
 (define-public texlive-latex-subfigure
   (package
@@ -5658,8 +6404,7 @@ TeX metrics (VF and TFM files) and macros for use with LaTeX.")
     ;; Any version of the GPL with font exception.
     (license license:gpl3+)))
 
-(define-public texlive-fonts-txfonts
-  (deprecated-package "texlive-fonts-txfonts" texlive-txfonts))
+(define-deprecated-package texlive-fonts-txfonts texlive-txfonts)
 
 (define-public texlive-fonts-iwona
   (package
@@ -5684,14 +6429,13 @@ TeX metrics (VF and TFM files) and macros for use with LaTeX.")
          (use-modules (guix build utils))
          (let ((target (string-append (assoc-ref %outputs "out")
                                       "/share/texmf-dist/"))
-               (unzip  (string-append (assoc-ref %build-inputs "unzip")
-                                      "/bin/unzip")))
+               (unzip  (search-input-file %build-inputs "/bin/unzip")))
            (invoke unzip (assoc-ref %build-inputs "source"))
            (mkdir-p target)
            (copy-recursively "iwona" target)
            #t))))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "http://jmn.pl/en/kurier-i-iwona/")
     (synopsis "Sans-serif typeface for TeX")
     (description "Iwona is a two-element sans-serif typeface. It was created
@@ -5709,12 +6453,10 @@ of ink traps which typify the Kurier font.")
               "texlive-jknappen"
               (list "/fonts/source/jknappen/"
                     "/fonts/tfm/jknappen/"
-                    "/fonts/source/jknappen/"
-                    "/fonts/tfm/jknappen/"
                     "/tex4ht/ht-fonts/alias/jknappen/"
                     "/tex4ht/ht-fonts/unicode/jknappen/")
               (base32
-               "1v5wk5il41bddzr81h5636h3cjz0w1qann5g9garsb7qfch9fhws")
+               "0xvy3c845jc7iw1h9rcm1r2yvm1ni1sm9r9k9j2cfc82xy43rwij")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/jknappen")
     (synopsis "Miscellaneous packages by Jörg Knappen")
@@ -5753,6 +6495,89 @@ Simple Young tableaux.
 @end table")
     (license license:gpl2)))                    ;per the 00readme_txt file.
 
+(define-public texlive-jadetex
+  (let ((template (simple-texlive-package
+                   "texlive-jadetex"
+                   (list "/doc/man/man1/jadetex.1"
+                         "/doc/man/man1/jadetex.man1.pdf"
+                         "/doc/man/man1/pdfjadetex.1"
+                         "/doc/man/man1/pdfjadetex.man1.pdf"
+                         "/source/jadetex/base/"
+                         ;; The following files are not generated from
+                         ;; sources.
+                         "/tex/jadetex/base/jadetex.ini"
+                         "/tex/jadetex/base/pdfjadetex.ini"
+                         "/tex/jadetex/base/uentities.sty")
+                   (base32
+                    "03chyc3vjqgxcj985gy4k0bd0lf1n4a6sgbhc7k84jparjk3hx4i"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ #t)
+          "jadetex/base")
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'unify-source-directory
+               (lambda _
+                 (chdir "source/jadetex/base")
+                 (for-each (lambda (f)
+                             (copy-file f (basename f)))
+                           (find-files "../../../tex/jadetex/base"))
+                 #t))
+             (add-after 'build 'generate-formats
+               (lambda* (#:key inputs #:allow-other-keys)
+                 (mkdir "web2c")
+                 (for-each (lambda (f)
+                             (symlink f (basename f)))
+                           (find-files "build"))
+                 (invoke "fmtutil-sys" "--byfmt" "jadetex"
+                         "--fmtdir=web2c")
+                 (invoke "fmtutil-sys" "--byfmt" "pdfjadetex"
+                         "--fmtdir=web2c")))
+             (add-after 'install 'install-formats-and-wrappers
+               (lambda* (#:key inputs outputs #:allow-other-keys)
+                 (let* ((out (assoc-ref outputs "out"))
+                        (texlive-bin (assoc-ref inputs "texlive-bin"))
+                        (pdftex (string-append texlive-bin "/bin/pdftex"))
+                        (web2c (string-append out "/share/texmf-dist/web2c")))
+                   (mkdir-p web2c)
+                   (copy-recursively "web2c" web2c)
+                   ;; Create convenience command wrappers.
+                   (mkdir-p (string-append out "/bin"))
+                   (symlink pdftex (string-append out "/bin/jadetex"))
+                   (symlink pdftex (string-append out "/bin/pdfjadetex"))
+                   #t)))))))
+      (propagated-inputs
+       ;; Propagate the texlive-updmap.cfg input used by xmltex, which provides the
+       ;; required fonts for its use.
+       (list texlive-xmltex texlive-kpathsea)) ;for fmtutil.cnf template
+      (native-inputs
+       (list texlive-cm ;for cmex10 and others
+             texlive-fonts-latex ;for lasy6
+             ;; The t1cmr.fd file of texlive-latex-base refers to the ecrm font,
+             ;; provided by the jknappen package collection.
+             texlive-jknappen
+             texlive-generic-ulem
+             texlive-hyperref
+             texlive-latex-colortbl
+             texlive-latex-fancyhdr
+             texlive-latex-graphics ;for color.sty
+             texlive-latex-tools ;for array.sty
+             texlive-marvosym
+             texlive-tex-ini-files)) ;for pdftexconfig
+      (home-page "https://www.ctan.org/pkg/jadetex/")
+      (synopsis "TeX macros to produce TeX output using OpenJade")
+      (description "JadeTeX is a companion package to the OpenJade DSSSL
+processor.  OpenJade applies a DSSSL stylesheet to an SGML or XML document.
+The output of this process can be in a number of forms, including a set of
+high level LaTeX macros.  It is the task of the JadeTeX package to transform
+these macros into DVI/PostScript (using the @command{jadetex} command) or
+Portable Document Format (PDF) form (using the @command{pdfjadetex}
+command).")
+      ;; The license text is found at the header of the jadetex.dtx file.
+      (license license:expat))))
+
 (define-public texlive-libertine
   (package
     (inherit (simple-texlive-package
@@ -5768,7 +6593,7 @@ Simple Young tableaux.
 
                     "/tex/latex/libertine/")
               (base32
-               "1v2vimpfi0b08sd79dadrck7wkpa0bphiakwyvhjc3ygq9k5bp8k")
+               "1d5r80isyvs2v3i8pzlhsn7ns6bn8ldkbs82g25widraixlhg6yg")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/libertine")
     (synopsis "Use Linux Libertine and Biolinum fonts with LaTeX")
@@ -5826,7 +6651,7 @@ LGR.  The package doesn't (currently) support mathematics.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "04nmkhqx6jxcxx9a30zbcd5smxi5fd0cbp132bki7fnvhspnhg21"))))
+                "1kw7dvxvdfbf31zw0n8r0g5xak3vcdf25n33fqw93j59zpc5nvbl"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -5877,23 +6702,48 @@ now contains a package @code{fix-cm},f which performs the task of
 @code{ec} fonts.")
     (license license:lppl)))
 
-(define-public texlive-latex-lh
-  (package
-    (name "texlive-latex-lh")
-    (version (number->string %texlive-revision))
-    (source (origin
-              (method svn-fetch)
-              (uri (texlive-ref "latex" "lh"))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "00gdiwh3sfhh1iimjhpja7lm7k4vzqzql2irgwnpz94qvh25zwi5"))))
-    (build-system texlive-build-system)
-    (arguments '(#:tex-directory "latex/lh"))
-    (home-page "https://www.ctan.org/pkg/lh")
-    (synopsis "Cyrillic fonts that support LaTeX standard encodings")
-    (description
-     "The LH fonts address the problem of the wide variety of alphabets that
+(define-public texlive-lh
+  (let ((template (simple-texlive-package
+                   "texlive-lh"
+                   (list "/doc/fonts/lh/"
+                         "/source/fonts/lh/"
+                         "/source/latex/lh/"
+                         "/fonts/source/lh/"
+                         "/tex/plain/lh/")
+                   (base32
+                    "0vw75i52asi5sssp8k9r8dy4ihvqbvmbsl3dini3ls8cky15lz37"))))
+    (package
+      (inherit template)
+      (outputs '("out" "doc"))
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ #t)
+          "latex/lh")
+         ((#:build-targets _ '())
+          ''("nfssfox.ins" "lcyfonts.ins" "ot2fonts.ins" "t2ccfonts.ins"))
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'chdir
+               (lambda _ (chdir "source/latex/lh")))
+             (replace 'copy-files
+               (lambda* (#:key inputs outputs #:allow-other-keys)
+                 (let* ((source (assoc-ref inputs "source"))
+                        (doc (string-append (assoc-ref outputs "doc")
+                                           "/share/texmf-dist/doc"))
+                        (target (string-append (assoc-ref outputs "out")
+                                               "/share/texmf-dist"))
+                        (tex (string-append target "/tex/latex/lh/")))
+                   (copy-recursively "build/" tex)
+                   (copy-recursively (string-append source "/fonts/source/lh")
+                                     (string-append target "/fonts/source/lh"))
+                   (copy-recursively (string-append source "/tex/plain/lh")
+                                     (string-append target "/tex/plain/lh"))
+                   (copy-recursively (string-append source "/doc")
+                                     doc))))))))
+      (home-page "https://www.ctan.org/pkg/lh")
+      (synopsis "Cyrillic fonts that support LaTeX standard encodings")
+      (description
+       "The LH fonts address the problem of the wide variety of alphabets that
 are written with Cyrillic-style characters.  The fonts are the original basis
 of the set of T2* and X2 encodings that are now used when LaTeX users need to
 write in Cyrillic languages.  Macro support in standard LaTeX encodings is
@@ -5902,7 +6752,9 @@ offers support for other (more traditional) encodings.  The fonts, in the
 standard T2* and X2 encodings are available in Adobe Type 1 format, in the
 CM-Super family of fonts.  The package also offers its own LaTeX support for
 OT2 encoded fonts, CM bright shaped fonts and Concrete shaped fonts.")
-    (license license:lppl)))
+      (license license:lppl))))
+
+(define-deprecated-package texlive-latex-lh texlive-lh)
 
 (define-public texlive-marvosym
   (package
@@ -5944,7 +6796,7 @@ the derived Type 1 font, together with support files for TeX (LaTeX).")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1xyd57c8z1xi0kbqpbad61flcazz68i9ssxrag0gjvci3irxi8xh"))))
+                "140k9dz2g2vj5ypgyqx3px9c1y9a820y8kq139p96lw0yk6839aw"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -5973,7 +6825,7 @@ than the bitmaps Metafont creates.")
               (uri (texlive-ref "latex" "acmart"))
               (sha256
                (base32
-                "18rl67p2zhngskisnhv78mksv8q8q658l6igkswzswldixmkpphq"))
+                "12wxav9r6v7dlfja9myrwz7famgfpcfwd292qzmgg283xgngh9kd"))
               (file-name (string-append name "-" version "-checkout"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/acmart"))
@@ -6027,7 +6879,7 @@ get a narrower “natural” width.")
                     "/tex/plain/wasy/"
                     "/doc/fonts/wasy/")
               (base32
-               "10dxbqgv42niybj65hj6y47x8lsl83m48rgw2v2s50k05wbghwbm")
+               "1swzxgld3lndi5q0q6zkwbw06ndh13fvp04as7zpwyhh646s0hbx")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/wasy")
     (synopsis "Waldi symbol fonts")
@@ -6036,9 +6888,9 @@ in the Metafont and Adobe Type 1 formats.  Support under LaTeX is provided by
 the @code{wasysym} package.")
     (license license:public-domain)))
 
-(define-public texlive-latex-wasysym
+(define-public texlive-wasysym
   (package
-    (name "texlive-latex-wasysym")
+    (name "texlive-wasysym")
     (version (number->string %texlive-revision))
     (source (origin
               (method svn-fetch)
@@ -6046,7 +6898,7 @@ the @code{wasysym} package.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1sgwbfwjjf70g54hh93gsd9jp9nm67w6n74x9d72a56n07jbk5hv"))))
+                "0zxcf0pfqf439cfwl0r5dd93b0v4pbiih36n2pwshdlvnmy0nr50"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/wasysym"))
     (home-page "https://www.ctan.org/pkg/wasysym")
@@ -6058,6 +6910,8 @@ male and female symbols and astronomical symbols, as well as the complete
 implements an easy to use interface for these symbols.")
     (license license:lppl)))
 
+(define-deprecated-package texlive-latex-wasysym texlive-wasysym)
+
 (define-public texlive-latex-wrapfig
   (package
     (name "texlive-latex-wrapfig")
@@ -6142,7 +6996,7 @@ package of that name now exists.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1hpsk4yp08qvbl43kqiv0hhwxv3gcqqxcpahyv6ch2b38pbj4bh6"))))
+                "0hnf821yvki9bzfkz79ns9m1msjp3yvd4dhf3268wrpr1zjx6w8v"))))
     (build-system texlive-build-system)
     (arguments
      '(#:tex-directory "latex/preview"
@@ -6174,7 +7028,7 @@ files.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0jmasg40bk53zdd2jc8nc18jvdai3p2wmamy7hwli8gls4nf25qp"))))
+                "09pd4wynksg1y1ddxnqbhk2dc185zw5nyi794d86n3qx8l014ijy"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/acronym"))
     (home-page "https://www.ctan.org/pkg/acronym")
@@ -6202,18 +7056,18 @@ e-TeX.")
                     "/tex/generic/pdftex/glyphtounicode.tex"
                     "/tex/generic/pdftex/pdfcolor.tex")
               (base32
-               "0wsgbl0jrqc1qzgf23dla6b95lv2h8x6xvs5466d8jdrih6pwriq")
+               "1wx928rqsv0x1a8vc7aq49w3nglr4bmlhl822slqglymfxrmb91b")
               #:trivial? #t))
     ;; TODO: add this missing package:
     ;; dehyph
     (propagated-inputs
-     `(("texlive-cm" ,texlive-cm)
-       ("texlive-etex" ,texlive-etex)
-       ("texlive-fonts-knuth-lib" ,texlive-fonts-knuth-lib)
-       ("texlive-hyphen-base" ,texlive-hyphen-base)
-       ("texlive-kpathsea" ,texlive-kpathsea)
-       ("texlive-tex-ini-files" ,texlive-tex-ini-files)
-       ("texlive-tex-plain" ,texlive-tex-plain)))
+     (list texlive-cm
+           texlive-etex
+           texlive-knuth-lib
+           texlive-hyphen-base
+           texlive-kpathsea
+           texlive-tex-ini-files
+           texlive-tex-plain))
     (home-page "https://www.ctan.org/pkg/pdftex")
     (synopsis "TeX extension for direct creation of PDF")
     (description
@@ -6221,20 +7075,19 @@ e-TeX.")
 directly generate PDF documents instead of DVI.")
     (license license:gpl2+)))
 
-(define-public texlive-generic-pdftex
-  (deprecated-package "texlive-generic-pdftex" texlive-pdftex))
+(define-deprecated-package texlive-generic-pdftex texlive-pdftex)
 
 (define texlive-texmf
   (package
    (name "texlive-texmf")
-   (version "20190410")
+   (version "20210325")
    (source texlive-texmf-src)
    (build-system gnu-build-system)
    (inputs
     `(("texlive-bin" ,texlive-bin)
       ("lua" ,lua)
       ("perl" ,perl)
-      ("python" ,python-2) ; incompatible with Python 3 (print syntax)
+      ("python" ,python)
       ("ruby" ,ruby)
       ("tcsh" ,tcsh)))
    (arguments
@@ -6265,9 +7118,15 @@ directly generate PDF documents instead of DVI.")
                      (share (string-append out "/share"))
                      (texmfroot (string-append share "/texmf-dist/web2c"))
                      (texmfcnf (string-append texmfroot "/texmf.cnf"))
+                     (fmtutilcnf (string-append texmfroot "/fmtutil.cnf"))
                      (texlive-bin (assoc-ref inputs "texlive-bin"))
                      (texbin (string-append texlive-bin "/bin"))
                      (tlpkg (string-append texlive-bin "/share/tlpkg")))
+                ;; LuaJIT is not ported to powerpc64* yet.
+                (if ,(target-ppc64le?)
+                    (substitute* fmtutilcnf
+                      (("^(luajittex|luajithbtex|mfluajit)" m)
+                       (string-append "#! " m))))
                 ;; Register SHARE as TEXMFROOT in texmf.cnf.
                 (substitute* texmfcnf
                   (("TEXMFROOT = \\$SELFAUTOPARENT")
@@ -6304,10 +7163,10 @@ This package contains the complete tree of texmf-dist data.")
 (define-public texlive
   (package
    (name "texlive")
-   (version "20190410")
+   (version "20210325")
    (source #f)
    (build-system trivial-build-system)
-   (inputs `(("bash" ,bash) ; for wrap-program
+   (inputs `(("bash" ,bash-minimal)     ;for wrap-program
              ("texlive-bin" ,texlive-bin)
              ("texlive-texmf" ,texlive-texmf)))
    (native-search-paths
@@ -6367,7 +7226,7 @@ This package contains the complete TeX Live distribution.")
 (define-public perl-text-bibtex
   (package
     (name "perl-text-bibtex")
-    (version "0.85")
+    (version "0.88")
     (source
      (origin
        (method url-fetch)
@@ -6375,7 +7234,7 @@ This package contains the complete TeX Live distribution.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "036kxgbn1jf70pfm2lmjlzjwnhbkd888fp5lyvmkjpdd15gla18h"))))
+         "0b7lmjvfmypps1nw6nsdikgaakm0n0g4186glaqazg5xd1p5h55h"))))
     (build-system perl-build-system)
     (arguments
      `(#:phases
@@ -6393,10 +7252,8 @@ This package contains the complete TeX Live distribution.")
                (("lib64") "lib"))
              #t)))))
     (native-inputs
-     `(("perl-capture-tiny" ,perl-capture-tiny)
-       ("perl-config-autoconf" ,perl-config-autoconf)
-       ("perl-extutils-libbuilder" ,perl-extutils-libbuilder)
-       ("perl-module-build" ,perl-module-build)))
+     (list perl-capture-tiny perl-config-autoconf perl-extutils-libbuilder
+           perl-module-build))
     (home-page "https://metacpan.org/release/Text-BibTeX")
     (synopsis "Interface to read and parse BibTeX files")
     (description "@code{Text::BibTeX} is a Perl library for reading, parsing,
@@ -6412,20 +7269,16 @@ values (strings, macros, or numbers) pasted together.")
     ;; checking the Biber/BibLaTeX compatibility matrix in the BibLaTeX manual
     ;; at <https://ctan.org/pkg/biblatex>.
     (name "biber")
-    (version "2.12")
+    (version "2.16")
     (source (origin
               (method git-fetch)
               (uri (git-reference
                     (url "https://github.com/plk/biber/")
                     (commit (string-append "v" version))))
               (file-name (git-file-name name version))
-              ;; TODO: Patch awaiting inclusion upstream (see:
-              ;; https://github.com/plk/biber/issues/239).
-              (patches (search-patches "biber-fix-encoding-write.patch"
-                                       "biber-sortinithash.patch"))
               (sha256
                (base32
-                "1g1hi6zvf2hmrjly1sidjaxy5440gfqm4p7p3n7kayshnjsmlskx"))))
+                "0586q8y1f2k23mvb02ccm3qsb35cwskafksixsjaih7a7xcf5gxx"))))
     (build-system perl-build-system)
     (arguments
      `(#:phases
@@ -6440,46 +7293,45 @@ values (strings, macros, or numbers) pasted together.")
                                     "/lib/perl5/site_perl")))))
              #t)))))
     (inputs
-     `(("perl-autovivification" ,perl-autovivification)
-       ("perl-class-accessor" ,perl-class-accessor)
-       ("perl-data-dump" ,perl-data-dump)
-       ("perl-data-compare" ,perl-data-compare)
-       ("perl-data-uniqid" ,perl-data-uniqid)
-       ("perl-datetime-format-builder" ,perl-datetime-format-builder)
-       ("perl-datetime-calendar-julian" ,perl-datetime-calendar-julian)
-       ("perl-file-slurper" ,perl-file-slurper)
-       ("perl-ipc-cmd" ,perl-ipc-cmd)
-       ("perl-ipc-run3" ,perl-ipc-run3)
-       ("perl-list-allutils" ,perl-list-allutils)
-       ("perl-list-moreutils" ,perl-list-moreutils)
-       ("perl-mozilla-ca" ,perl-mozilla-ca)
-       ("perl-regexp-common" ,perl-regexp-common)
-       ("perl-log-log4perl" ,perl-log-log4perl)
-       ;; We cannot use perl-unicode-collate here, because otherwise the
-       ;; hardcoded hashes in the tests would differ.  See
-       ;; https://mail-archive.com/debian-bugs-dist@lists.debian.org/msg1469249.html
-       ;;("perl-unicode-collate" ,perl-unicode-collate)
-       ("perl-unicode-normalize" ,perl-unicode-normalize)
-       ("perl-unicode-linebreak" ,perl-unicode-linebreak)
-       ("perl-encode-eucjpascii" ,perl-encode-eucjpascii)
-       ("perl-encode-jis2k" ,perl-encode-jis2k)
-       ("perl-encode-hanextra" ,perl-encode-hanextra)
-       ("perl-xml-libxml" ,perl-xml-libxml)
-       ("perl-xml-libxml-simple" ,perl-xml-libxml-simple)
-       ("perl-xml-libxslt" ,perl-xml-libxslt)
-       ("perl-xml-writer" ,perl-xml-writer)
-       ("perl-sort-key" ,perl-sort-key)
-       ("perl-text-csv" ,perl-text-csv)
-       ("perl-text-csv-xs" ,perl-text-csv-xs)
-       ("perl-text-roman" ,perl-text-roman)
-       ("perl-uri" ,perl-uri)
-       ("perl-text-bibtex" ,perl-text-bibtex)
-       ("perl-libwww" ,perl-libwww)
-       ("perl-lwp-protocol-https" ,perl-lwp-protocol-https)
-       ("perl-business-isbn" ,perl-business-isbn)
-       ("perl-business-issn" ,perl-business-issn)
-       ("perl-business-ismn" ,perl-business-ismn)
-       ("perl-lingua-translit" ,perl-lingua-translit)))
+     (list perl-autovivification
+           perl-class-accessor
+           perl-data-dump
+           perl-data-compare
+           perl-data-uniqid
+           perl-datetime-format-builder
+           perl-datetime-calendar-julian
+           perl-file-slurper
+           perl-io-string
+           perl-ipc-cmd
+           perl-ipc-run3
+           perl-list-allutils
+           perl-list-moreutils
+           perl-mozilla-ca
+           perl-regexp-common
+           perl-log-log4perl
+           perl-parse-recdescent
+           perl-unicode-collate
+           perl-unicode-normalize
+           perl-unicode-linebreak
+           perl-encode-eucjpascii
+           perl-encode-jis2k
+           perl-encode-hanextra
+           perl-xml-libxml
+           perl-xml-libxml-simple
+           perl-xml-libxslt
+           perl-xml-writer
+           perl-sort-key
+           perl-text-csv
+           perl-text-csv-xs
+           perl-text-roman
+           perl-uri
+           perl-text-bibtex
+           perl-libwww
+           perl-lwp-protocol-https
+           perl-business-isbn
+           perl-business-issn
+           perl-business-ismn
+           perl-lingua-translit))
     (native-inputs
      `(("perl-config-autoconf" ,perl-config-autoconf)
        ("perl-extutils-libbuilder" ,perl-extutils-libbuilder)
@@ -6520,7 +7372,7 @@ other things it comes with full Unicode support.")
              ;; build it.
              (invoke "python" "setup.py" "build" "--pdf=False" "install"
                      (string-append "--prefix=" (assoc-ref outputs "out"))))))))
-    (native-inputs `(("texinfo" ,texinfo)))
+    (native-inputs (list texinfo))
     (home-page "https://launchpad.net/rubber")
     (synopsis "Wrapper for LaTeX and friends")
     (description
@@ -6558,13 +7410,9 @@ PDF documents.")
                        (string-append "METAINFODIR=" out "/share/metainfo")
                        "texmaker.pro")))))))
     (inputs
-     `(("poppler-qt5" ,poppler-qt5)
-       ("qtbase" ,qtbase-5)
-       ("qtscript" ,qtscript)
-       ("qtwebkit" ,qtwebkit)
-       ("zlib" ,zlib)))
+     (list poppler-qt5 qtbase-5 qtscript qtwebkit zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://www.xm1math.net/texmaker/")
     (synopsis "LaTeX editor")
     (description "Texmaker is a program that integrates many tools needed to
@@ -6599,11 +7447,11 @@ develop documents with LaTeX, in a single application.")
              (delete-file "book.pdf")
              #t)))))
     (native-inputs
-     `(("texlive" ,(texlive-union (list texlive-amsfonts
-                                        texlive-fonts-adobe-palatino
-                                        texlive-fonts-adobe-zapfding
-                                        texlive-fonts-knuth-lib
-                                        texlive-fonts-mflogo-font
+     `(("texlive" ,(texlive-updmap.cfg (list texlive-amsfonts
+                                        texlive-palatino
+                                        texlive-zapfding
+                                        texlive-knuth-lib
+                                        texlive-mflogo-font
                                         texlive-pdftex)))
        ("automake" ,automake)))
     (home-page "https://www.gnu.org/software/teximpatient/")
@@ -6632,47 +7480,44 @@ and Karl Berry.")
                   #t))))
     (build-system qt-build-system)
     (arguments
-     `(#:configure-flags `("-DLYX_USE_QT=QT5"
-                           "-DLYX_EXTERNAL_BOOST=1"
-                           "-DLYX_INSTALL=1"
-                           "-DLYX_RELEASE=1"
-                           "-DLYX_PROGRAM_SUFFIX=OFF"
-                           ,(string-append "-DLYX_INSTALL_PREFIX="
-                                           (assoc-ref %outputs "out")))
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'patch-python
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* '("lib/configure.py"
-                            "src/support/ForkedCalls.cpp"
-                            "src/support/Systemcall.cpp"
-                            "src/support/os.cpp"
-                            "src/support/filetools.cpp")
-               (("\"python ")
-                (string-append "\""
-                               (assoc-ref inputs "python")
-                               "/bin/python3 ")))
-             #t))
-         (add-after 'unpack 'add-missing-test-file
-           (lambda _
-             ;; Create missing file that would cause tests to fail.
-             (with-output-to-file "src/tests/check_layout.cmake"
-               (const #t))
-             #t)))))
+     (list #:configure-flags
+           #~(list "-DLYX_USE_QT=QT5"
+                   "-DLYX_EXTERNAL_BOOST=1"
+                   "-DLYX_INSTALL=1"
+                   "-DLYX_RELEASE=1"
+                   "-DLYX_PROGRAM_SUFFIX=OFF"
+                   (string-append "-DLYX_INSTALL_PREFIX=" #$output))
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'patch-python
+                 (lambda* (#:key inputs #:allow-other-keys)
+                   (substitute* '("lib/configure.py"
+                                  "src/support/ForkedCalls.cpp"
+                                  "src/support/Systemcall.cpp"
+                                  "src/support/os.cpp"
+                                  "src/support/filetools.cpp")
+                     (("\"python ")
+                      (string-append "\""
+                                     (assoc-ref inputs "python")
+                                     "/bin/python3 ")))))
+               (add-after 'unpack 'add-missing-test-file
+                 (lambda _
+                   ;; Create missing file that would cause tests to fail.
+                   (with-output-to-file "src/tests/check_layout.cmake"
+                     (const #t)))))))
     (inputs
-     `(("boost" ,boost)
-       ("hunspell" ,hunspell)           ; Note: Could also use aspell instead.
-       ("libx11" ,libx11)
-       ("mythes" ,mythes)
-       ("python" ,python)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("zlib" ,zlib)))
+     (list boost
+           hunspell ; Note: Could also use aspell instead.
+           libx11
+           mythes
+           python
+           qtbase-5
+           qtsvg
+           zlib))
     (propagated-inputs
-     `(("texlive" ,(texlive-union (list texlive-fonts-ec)))))
+     `(("texlive" ,(texlive-updmap.cfg (list texlive-fonts-ec)))))
     (native-inputs
-     `(("python" ,python)
-       ("pkg-config" ,pkg-config)))
+     (list python pkg-config))
     (home-page "https://www.lyx.org/")
     (synopsis "Document preparation system with GUI")
     (description "LyX is a document preparation system.  It excels at letting
@@ -6696,7 +7541,7 @@ required: automatic sectioning and pagination, spell checking and so forth.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0s86v2b6b1vky1svmmn8pn0l2gz3v280mvjbr2d9l2sjyarlgz9w"))))
+                "0a1v70k6231323y1lazfda1y9568w8hn7c8jhc7rblkhdfv3slw7"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -6736,7 +7581,7 @@ specification.  It replaces the now obsolete @code{movie15} package.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1yhp51w8yr10c10pc9196q7hlw80brzqinnqbjw81d0sf2p0llc5"))))
+                "1mrz1mj59m27bfya52vi4lm84ifisaf30pmf8id1biqwcq4jyynh"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -6777,7 +7622,7 @@ It also ensures compatibility with the @code{media9} and @code{animate} packages
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0m4wx3yjb5al1qsv995z8fii8xxy96mcfihbnlx43lpgayiwz35s"))))
+                "04ww5abfm7dx81d21yr2gwy9jswaalnfm2384xp4cyx7srd9spfv"))))
     (build-system texlive-build-system)
     (arguments
      '(#:tex-directory "latex/ms"
@@ -6797,6 +7642,41 @@ It also ensures compatibility with the @code{media9} and @code{animate} packages
 @end itemize\n")
     (license license:lppl1.3c+)))
 
+(define-public texlive-latex-numprint
+  (package
+    (name "texlive-latex-numprint")
+    (version (number->string %texlive-revision))
+    (source
+     (origin
+       (method svn-fetch)
+       (uri (texlive-ref "latex" "numprint"))
+       (file-name (string-append name "-" version "-checkout"))
+       (sha256
+        (base32 "00xyvdfvypfj2wj7wf2qrxpc34wwd0dkdv3bqvb86ydhlpn1jg76"))))
+    (build-system texlive-build-system)
+    (arguments '(#:tex-directory "latex/numprint"))
+    (home-page "https://www.ctan.org/pkg/numprint")
+    (synopsis "Print numbers with separators and exponent if necessary")
+    (description
+     "The package numprint prints numbers with a separator every three
+digits and converts numbers given as 12345.6e789 to 12\\,345,6\\cdot
+10^{789}.  Numbers are printed in the current mode (text or math) in
+order to use the correct font.
+
+Many things, including the decimal sign, the thousand separator, as
+well as the product sign can be changed by the user, e.g., to reach
+12,345.6\\times 10^{789}.
+
+If an optional argument is given it is printed upright as unit.
+Numbers can be rounded to a given number of digits.  The package
+supports an automatic, language-dependent change of the number format.
+
+Tabular alignment using the tabular, array, tabularx, and longtable
+environments (similar to the dcolumn and rccol packages) is supported
+using all features of numprint.  Additional text can be added before
+and after the formatted number.")
+    (license license:lppl)))
+
 (define-public texlive-latex-needspace
   (package
     (name "texlive-latex-needspace")
@@ -6813,7 +7693,7 @@ It also ensures compatibility with the @code{media9} and @code{animate} packages
      '(#:tex-directory "latex/needspace"
        #:tex-format "latex"))
     (inputs
-     `(("texlive-latex-filecontents" ,texlive-latex-filecontents)))
+     (list texlive-latex-filecontents))
     (home-page "https://www.ctan.org/pkg/needspace")
     (synopsis "Insert pagebreak if not enough space")
     (description
@@ -6839,7 +7719,7 @@ page, a new page will be started.")
      '(#:tex-directory "latex/changepage"
        #:tex-format "latex"))
     (inputs
-     `(("texlive-latex-filecontents" ,texlive-latex-filecontents)))
+     (list texlive-latex-filecontents))
     (home-page "https://www.ctan.org/pkg/changepage")
     (synopsis "Margin adjustment and detection of odd/even pages")
     (description
@@ -6900,7 +7780,7 @@ is preferred in many parts of the world, as distinct from that which is used in
        (file-name (string-append name "-" version "-checkout"))
        (sha256
         (base32
-         "1rzdniqq9zk39w8ch8ylx3ywh2mj87s4ivchrsk2b8nx06jyn797"))))
+         "161ka7sckiakcr1fgydxpc580sr16vp4sp3avjl2v9jn1pd2pwp0"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -6937,7 +7817,7 @@ striking out (line through words) and crossing out (/// over words).")
        (file-name (string-append name "-" version "-checkout"))
        (sha256
         (base32
-         "1dscrgwyr71vgx35mzb316xl669arzagfgq50fdv3nxga63959b3"))))
+         "1jk10rxz5f8vh46am11b40hxhhikk67h9jr3z877q5qc8kwppgza"))))
     (build-system trivial-build-system)
     (native-inputs
      `(("texlive-latex-pgf-generic"
@@ -6951,9 +7831,9 @@ striking out (line through words) and crossing out (/// over words).")
            (file-name (string-append "texlive-latex-pgf-generic" version "-checkout"))
            (sha256
             (base32
-             "0hk5x2j15n4pps279cmkbjl1dvhasq3mbhna5xdvp2qgh635ahks"))))))
+             "05zdq7y3am109m5534ahqqp9x5iar3ha68v1r4zkrdly2mijxz2j"))))))
     (propagated-inputs
-     `(("texlive-latex-xcolor" ,texlive-latex-xcolor)))
+     (list texlive-xcolor))
     (arguments
      `(#:modules ((guix build utils))
        #:builder
@@ -6995,7 +7875,7 @@ produce either PostScript or PDF output.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1vz9zg7s5w52xr323zgglzprfrvba2zvyzf6b8vrdf4wdghlpv4z"))))
+                "1m6i8162r6ka19q517llrf0lax80rrsq564qirwk1chv5dqsmnfi"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -7040,6 +7920,163 @@ refers to the version of scrbook, scrreprt, scrartcl, scrlttr2 and
 typearea (which are the main parts of the bundle).")
     (license license:lppl1.3+)))
 
+(define-public texlive-generic-atbegshi
+  (package
+    (inherit (simple-texlive-package
+              "texlive-generic-atbegshi"
+              '("/doc/latex/atbegshi/"
+                "/tex/generic/atbegshi/")
+              (base32
+               "184fr5kd3wl44ix63lwb3ll7dhiikkyw1czbnzrl4am4rx0zh4d8")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/atbegshi")
+    (synopsis "Execute commands at @code{\\shipout} time")
+    (description
+     "This package is a modern reimplementation of package @code{everyshi},
+providing various commands to be executed before a @code{\\shipout} command.
+It makes use of e-TeX’s facilities if they are available.  The package may
+be used either with LaTeX or with plain TeX.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-generic-bigintcalc
+  (package
+    (inherit (simple-texlive-package
+              "texlive-generic-bigintcalc"
+              '("/doc/latex/bigintcalc/README.md"
+                "/tex/generic/bigintcalc/")
+              (base32
+               "19grk4p1dh566hgpzhnjyjnrw57hpjijcpr7ci401n9jszcc1xkz")
+              #:trivial? #t))
+    (propagated-inputs
+     (list texlive-latex-pdftexcmds))
+    (home-page "https://www.ctan.org/pkg/bigintcalc")
+    (synopsis "Integer calculations on very large numbers")
+    (description
+     "This package provides expandable arithmetic operations with big
+integers that can exceed TeX's number limits.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-generic-bitset
+  (package
+    (inherit (simple-texlive-package
+              "texlive-generic-bitset"
+              '("/doc/latex/bitset/README.md"
+                "/tex/generic/bitset/")
+              (base32
+               "0inj6qpzizvsbxdfsaijnl4iq976kyrnchnm3gc1kc2w389zrn1l")
+              #:trivial? #t))
+    (propagated-inputs
+     (list texlive-generic-infwarerr texlive-generic-intcalc
+           texlive-generic-bigintcalc))
+    (home-page "https://www.ctan.org/pkg/bitset")
+    (synopsis "Handle bit-vector datatype")
+    (description
+     "This package defines and implements the data type bit set, a vector
+of bits.  The size of the vector may grow dynamically.  Individual bits
+can be manipulated.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-generic-etexcmds
+  (package
+    (inherit (simple-texlive-package
+              "texlive-generic-etexcmds"
+              '("/doc/latex/etexcmds/README.md"
+                "/tex/generic/etexcmds/")
+              (base32
+               "11y6pnlq13bp0ybi7c82g8ds8085zv1zaslgqv3dzhgi3dklpc0c")
+              #:trivial? #t))
+    (propagated-inputs
+     (list texlive-generic-infwarerr texlive-generic-iftex))
+    (home-page "https://www.ctan.org/pkg/etexcmds")
+    (synopsis "Avoid name clashes with e-TeX commands")
+    (description
+     "New primitive commands are introduced in e-TeX; sometimes the names
+collide with existing macros.  This package solves the name clashes by
+adding a prefix to e-TeX’s commands.  For example, ε-TeX’s
+@code{\\unexpanded} is provided as @code{\\etex@@unexpanded}.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-generic-gettitlestring
+  (package
+    (inherit (simple-texlive-package
+              "texlive-generic-gettitlestring"
+              '("/doc/latex/gettitlestring/"
+                "/tex/generic/gettitlestring/")
+              (base32
+               "1p4hg9mac03rzvj9dw0ws3zdh55fy1ns954f912algw9f2aq4xgp")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/gettitlestring")
+    (synopsis "Clean up title references")
+    (description
+     "This package provides commands for cleaning up the title string
+(such as removing @code{\\label} commands) for packages that typeset such
+strings.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-generic-infwarerr
+  (package
+    (inherit (simple-texlive-package
+              "texlive-generic-infwarerr"
+              '("/tex/generic/infwarerr/")
+              (base32
+               "19nlrbfmqbkjrrx9x75s9nd6crg1lzimb2fr3hfblaivj6lx8p4r")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/infwarerr")
+    (synopsis "Information/warning/error macros")
+    (description
+     "This package provides a complete set of macros for information,
+warning and error messages.  Under LaTeX, the commands are wrappers for
+the corresponding LaTeX commands; under Plain TeX they are available as
+complete implementations.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-generic-intcalc
+  (package
+    (inherit (simple-texlive-package
+              "texlive-generic-intcalc"
+              '("/tex/generic/intcalc/")
+              (base32
+               "0llrnayqwdqxi91yh7panbbiljina3bynv2hxhi6sssaw3pyd92l")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/intcalc")
+    (synopsis "Expandable arithmetic operations with integers")
+    (description
+     "This package provides expandable arithmetic operations with integers,
+using the e-TeX extension @code{\\numexpr} if it is available.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-generic-kvdefinekeys
+  (package
+    (inherit (simple-texlive-package
+              "texlive-generic-kvdefinekeys"
+              '("/tex/generic/kvdefinekeys/")
+              (base32
+               "12nn74skhwiszbdhawqds31caz6d59a5pjmwar0r8lmk4f1jr3xh")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/kvdefinekeys")
+    (synopsis "Define keys for use in the @code{kvsetkeys} package")
+    (description
+     "This package provides the @code{\\kv@@define@@key} (analogous to
+keyval’s @code{\\define@@key}, to define keys for use by @code{kvsetkeys}.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-generic-kvsetkeys
+  (package
+    (inherit (simple-texlive-package
+              "texlive-generic-kvsetkeys"
+              '("/tex/generic/kvsetkeys/")
+              (base32
+               "149vpmv4vms269dzq4sghlngg380sasvxnb3sx9rfs7d9j0finvi")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/kvsetkeys")
+    (synopsis "Key value parser with default handler support")
+    (description
+     "This package provides @code{\\kvsetkeys}, a variant of @code{\\setkeys}
+from the @code{keyval} package.  Users can specify a handler that deals with
+unknown options.  Active commas and equal signs may be used, and only one
+level of curly braces are removed from the values.")
+    (license license:lppl1.3c+)))
+
 (define-public texlive-generic-listofitems
   (package
     (name "texlive-generic-listofitems")
@@ -7054,7 +8091,7 @@ typearea (which are the main parts of the bundle).")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1x4wnpca97rnbvvg6wjmbkxxvnfva274q9ahzx746b435q93z3i1"))))
+                "1wnbnfrhi6hgqa78jsw6hljzi03i5x99mlr5n2419hgws52hk67y"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -7074,6 +8111,57 @@ the parsing character has been selected by the user, and to access any of
 these items with a simple syntax.")
     (license license:lppl1.3c+)))
 
+(define-public texlive-generic-ltxcmds
+  (package
+    (inherit (simple-texlive-package
+              "texlive-generic-ltxcmds"
+              '("/tex/generic/ltxcmds/")
+              (base32
+               "1lr77yai2qivlx26s5094czpfxmg96bhxps5wbm8xn7cpsw0zbd9")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/ltxcmds")
+    (synopsis "LaTeX kernel commands extracted for general use")
+    (description
+     "This package exports some utility macros from the LaTeX kernel into
+a separate namespace and also makes them available for other formats such
+as plain TeX.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-generic-pdfescape
+  (package
+    (inherit (simple-texlive-package
+              "texlive-generic-pdfescape"
+              '("/tex/generic/pdfescape/")
+              (base32
+               "1vbdjmm9bi9ngzz2z1b8jnf6nzf9xsaj5pvyswg13y4dr00mnz6n")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/pdfescape")
+    (synopsis "pdfTeX's escape features for plain TeX")
+    (description
+     "This package implements pdfTeX's escape features (@code{\\pdfescapehex},
+@code{\\pdfunescapehex}, @code{\\pdfescapename}, @code{\\pdfescapestring})
+using TeX or e-TeX.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-generic-uniquecounter
+  (package
+    (inherit (simple-texlive-package
+              "texlive-generic-uniquecounter"
+              '("/doc/latex/uniquecounter/"
+                "/tex/generic/uniquecounter/")
+              (base32
+               "1bjh8vwiqlkmjqndnh4xp116524x4m3hdcyq2s231jiqy8il8dcc")
+              #:trivial? #t))
+    (propagated-inputs
+     (list texlive-generic-bigintcalc texlive-generic-infwarerr))
+    (home-page "https://www.ctan.org/pkg/uniquecounter")
+    (synopsis "Unlimited unique counter")
+    (description
+     "This package provides a kind of counter that provides unique number
+values.  Several counters can be created with different names.  The numeric
+values are not limited.")
+    (license license:lppl1.3c+)))
+
 (define-public texlive-latex-readarray
   (package
     (name "texlive-latex-readarray")
@@ -7101,7 +8189,7 @@ these items with a simple syntax.")
            (copy-recursively (assoc-ref %build-inputs "source") target)
            #t))))
     (propagated-inputs
-     `(("texlive-generic-listofitems" ,texlive-generic-listofitems)))
+     (list texlive-generic-listofitems))
     (home-page "https://www.ctan.org/pkg/readarray")
     (synopsis "Read, store and recall array-formatted data")
     (description
@@ -7138,7 +8226,7 @@ formatted text.")
            (copy-recursively (assoc-ref %build-inputs "source") target)
            #t))))
     (propagated-inputs
-     `(("texlive-latex-readarray" ,texlive-latex-readarray)))
+     (list texlive-latex-readarray))
     (home-page "https://www.ctan.org/pkg/verbatimbox")
     (synopsis "Deposit verbatim text in a box")
     (description
@@ -7222,11 +8310,9 @@ AMS-LaTeX, AMS-TeX, and plain TeX).  The distribution includes Michael Barr's
 @code{diag} package, which was previously distributed stand-alone.")
       (license license:gpl3+))))
 
-(define-public texlive-fonts-xypic
-  (deprecated-package "texlive-fonts-xypic" texlive-xypic))
+(define-deprecated-package texlive-fonts-xypic texlive-xypic)
 
-(define-public texlive-generic-xypic
-  (deprecated-package "texblive-generic-xypic" texlive-xypic))
+(define-deprecated-package texlive-generic-xypic texlive-xypic)
 
 (define-public texlive-bibtex
   (package
@@ -7243,7 +8329,7 @@ AMS-LaTeX, AMS-TeX, and plain TeX).  The distribution includes Michael Barr's
        (file-name (string-append name "-" version "-checkout"))
        (sha256
         (base32
-         "1wijqq605cbhn2bdaryby3xpkwmnk9ixcrjn5zwlfrxbgfblzfmz"))))
+         "0fr0s3jhrvplddb42if570dxllz54fa0pf4d2am27h8m385nghbf"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -7278,18 +8364,17 @@ package, such as @command{natbib} as well).")
               #:trivial? #t))
     ;; This provides charter.map.
     (propagated-inputs
-     `(("texlive-psnfss" ,texlive-psnfss)))
+     (list texlive-psnfss))
     (home-page "https://www.ctan.org/pkg/charter")
     (synopsis "Charter fonts for TeX")
     (description "This package provides a copy of the Charter Type-1 fonts
 which Bitstream contributed to the X consortium, renamed for use with TeX.
 Support for use with LaTeX is available in @code{freenfss}, part of
-@command{psnfss}. ")
+@command{psnfss}.")
     (license (license:non-copyleft
               "http://mirrors.ctan.org/fonts/charter/readme.charter"))))
 
-(define-public texlive-fonts-charter
-  (deprecated-package "texlive-fonts-charter" texlive-charter))
+(define-deprecated-package texlive-fonts-charter texlive-charter)
 
 (define-public texlive-context
   (package
@@ -7332,7 +8417,6 @@ Support for use with LaTeX is available in @code{freenfss}, part of
                     "/doc/man/man1/mtx-watch.1"
                     "/doc/man/man1/mtx-youless.1"
 
-                    
                     "/bibtex/bst/context/"
                     "/context/"
 
@@ -7366,26 +8450,29 @@ Support for use with LaTeX is available in @code{freenfss}, part of
                     "/tex/generic/context/"
                     "/tex/latex/context/")
               (base32
-               "1npaw9jy41iv9qiilbmcljvc28rjzyjkan6mfcxizv2sbirymwp1")
+               "1rsw760f52rj62i7ms89xgxdi0qw6hag5fs5hb667nclr4kdkam8")
               #:trivial? #t))
     ;; TODO: add these missing packages:
     ;; xetex, luatex, lm-math, manfnt-font, and mptopdf
     (propagated-inputs
-     `(("texlive-amsfonts" ,texlive-amsfonts)
-       ("texlive-lm" ,texlive-lm)
-       ("texlive-pdftex" ,texlive-pdftex)
-       ("texlive-metapost" ,texlive-metapost)
-       ("texlive-fonts-stmaryrd" ,texlive-fonts-stmaryrd)
-       ("texlive-mflogo-font" ,texlive-mflogo-font)))
+     (list texlive-amsfonts
+           texlive-lm
+           texlive-pdftex
+           texlive-metapost
+           texlive-stmaryrd
+           texlive-mflogo-font))
     (home-page "https://www.ctan.org/pkg/context")
     (synopsis "Full featured, parameter driven macro package for TeX")
-    (description "A full featured, parameter driven macro package, which fully
-supports advanced interactive documents.  See the ConTeXt garden for a wealth
-of support information.")
-    (license license:gpl2+)))
+    (description "ConTeXt is a full featured, parameter driven macro package,
+which fully supports advanced interactive documents.  See the ConTeXt garden
+for a wealth of support information.")
+    ;; The GPL applies to all code; alternatively, the LaTeX license may be used.
+    ;; The CC-BY-SA license applies to all documentation.
+    (license (list license:lppl1.3c+
+                   license:gpl2+
+                   license:cc-by-sa4.0))))
 
-(define-public texlive-context-base
-  (deprecated-package "texlive-context-base" texlive-context))
+(define-deprecated-package texlive-context-base texlive-context)
 
 (define-public texlive-beamer
   (package
@@ -7394,13 +8481,11 @@ of support information.")
               (list "/doc/latex/beamer/"
                     "/tex/latex/beamer/")
               (base32
-               "1fqzbkmw2kfxihab8j4dadc3v68xap6v2ghpp2064fna47xlwy1c")
+               "091n27n4l3iac911bvmpp735ffryyzaq46mkclgn3q9jsvc4ngiv")
               #:trivial? #t))
     (propagated-inputs
-     `(("texlive-latex-hyperref" ,texlive-latex-hyperref)
-       ("texlive-latex-oberdiek" ,texlive-latex-oberdiek)
-       ("texlive-latex-etoolbox" ,texlive-latex-etoolbox)
-       ("texlive-latex-pgf" ,texlive-latex-pgf)))
+     (list texlive-hyperref texlive-oberdiek texlive-etoolbox
+           texlive-latex-pgf))
     (home-page "https://www.ctan.org/pkg/beamer")
     (synopsis "LaTeX class for producing presentations and slides")
     (description "The beamer LaTeX class can be used for producing slides.
@@ -7416,8 +8501,7 @@ effects, varying slide transitions and animations.")
     ;; dual-licensed under either FDLv1.3+ or LPPL1.3c+.
     (license (list license:lppl1.3c+ license:gpl2+ license:fdl1.3+))))
 
-(define-public texlive-latex-beamer
-  (deprecated-package "texlive-latex-beamer" texlive-beamer))
+(define-deprecated-package texlive-latex-beamer texlive-beamer)
 
 (define-public texlive-latex-xmpincl
   (package
@@ -7442,58 +8526,44 @@ the metadata is stored in an XML file, and this XML stream is then embedded in
 the file to which it applies.")
     (license license:gpl3+)))
 
-(define-public texlive-latex-pdfx
-  (package
-    (name "texlive-latex-pdfx")
-    (version (number->string %texlive-revision))
-    (source
-     (origin
-       (method svn-fetch)
-       (uri (texlive-ref "latex" "pdfx"))
-       (file-name (string-append name "-" version "-checkout"))
-       (sha256
-        (base32
-         "18294h0cr05fs424m3x6aq24z5hf5zmiflalkj4kvpmsyyqqsj74"))))
-    (build-system texlive-build-system)
-    (arguments
-     '(#:tex-directory "latex/pdfx"
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-encoding
-           (lambda _
-             (substitute* "pdfx.dtx"
-               (("    .+umaczy") "umaczy"))
-             #t))
-         (add-before 'install 'install-tex-files
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let ((target (string-append (assoc-ref outputs "out")
-                                          "/share/texmf-dist/tex/latex/pdfx")))
-               (mkdir-p target)
-               (copy-recursively (assoc-ref inputs "texlive-tex-pdfx") target)
-               ;; Install the generated version in the "install" phase.
-               (delete-file (string-append target "/pdfx.sty"))
-               #t))))))
-    (propagated-inputs
-     `(("texlive-pdftex" ,texlive-pdftex)))
-    (native-inputs
-     `(("texlive-tex-pdfx"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/tex/latex/pdfx"))
-                 (revision %texlive-revision)))
-           (file-name (string-append "texlive-tex-latex-pdfx-" version "-checkout"))
-           (sha256
-            (base32
-             "171ffvpkj2fab4ljcxv3l6l5c8ga8zavdhmhfq07id8zyyr619ip"))))))
-    (home-page "https://www.ctan.org/pkg/pdfx")
-    (synopsis "PDF/X and PDF/A support for pdfTeX, LuaTeX and XeTeX")
-    (description
-     "This package helps LaTeX users to create PDF/X, PDF/A and other
+(define-public texlive-pdfx
+  (let ((template (simple-texlive-package
+                   "texlive-pdfx"
+                   (list "/doc/latex/pdfx/"
+                         "/source/latex/pdfx/"
+                         "/tex/latex/pdfx/")
+                   (base32
+                    "1z4j4d92k2fjmf8jfap4zn7ij97d9rz2jcs9aslcac07ag4x5bdp"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ #t)
+          "latex/pdfx")
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'delete-generated-file
+               (lambda _
+                 ;; Generate this file from sources
+                 (delete-file "tex/latex/pdfx/pdfx.sty")
+                 #t))
+             (add-after 'delete-generated-file 'chdir
+               (lambda _ (chdir "source/latex/pdfx") #t))
+             (add-after 'chdir 'fix-encoding
+               (lambda _
+                 (substitute* "pdfx.dtx"
+                   (("    .+umaczy") "umaczy"))
+                 #t))))))
+      (propagated-inputs
+       (list texlive-pdftex))
+      (home-page "https://www.ctan.org/pkg/pdfx")
+      (synopsis "PDF/X and PDF/A support for pdfTeX, LuaTeX and XeTeX")
+      (description
+       "This package helps LaTeX users to create PDF/X, PDF/A and other
 standards-compliant PDF documents with pdfTeX, LuaTeX and XeTeX.")
-    (license license:lppl1.2+)))
+      (license license:lppl1.2+))))
+
+(define-deprecated-package texlive-latex-pdfx texlive-pdfx)
 
 (define-public texlive-ydoc
   (let ((template (simple-texlive-package
@@ -7517,21 +8587,11 @@ standards-compliant PDF documents with pdfTeX, LuaTeX and XeTeX.")
              (add-after 'unpack 'chdir
                (lambda _ (chdir "source/latex/ydoc") #t))
              (add-after 'copy-files 'move-files
-               (lambda* (#:key outputs #:allow-other-keys)
-                 (let* ((share (string-append (assoc-ref outputs "out")
-                                              "/share/texmf-dist"))
-                        (target (string-append share "/tex/generic/ydoc"))
-                        (doc (string-append (assoc-ref outputs "doc")
-                                            "/share/texmf-dist/doc") ))
-                   (mkdir-p target)
-                   (for-each
-                    (lambda (file)
-                      (rename-file (string-append share "/tex/latex/ydoc/" file)
-                                   (string-append target "/" file)))
-                    '("ydocincl.tex" "ydocstrip.tex"))
-                   (mkdir-p doc)
-                   (rename-file (string-append share "/doc") doc)
-                   #t)))))))
+               (lambda* (#:key inputs outputs #:allow-other-keys)
+                 (let ((source (assoc-ref inputs "source"))
+                       (doc (string-append (assoc-ref outputs "doc")
+                                           "/share/texmf-dist/doc")))
+                   (copy-recursively (string-append source "/doc")  doc))))))))
       (home-page "http://www.ctan.org/pkg/ydoc")
       (synopsis "Macros for documentation of LaTeX classes and packages")
       (description "The package provides macros and environments to document
@@ -7551,7 +8611,7 @@ change.")
                          "/tex/generic/pstricks/"
                          "/tex/latex/pstricks/")
                    (base32
-                    "0sdxdd0qi4sccw9il7d4s7jivs24pq99cdzfnrf0gkqjb1y8s7cl")
+                    "15c9iqfq2y9c8c78cvqb6vzd5a5rm7qq5x7m05jq1hb8sgqrqb0j")
                    #:trivial? #t)))
     (package
       (inherit template)
@@ -7584,7 +8644,7 @@ or shading the cells of tables.")
     (package
       (inherit template)
       (propagated-inputs
-       `(("texlive-pstricks" ,texlive-pstricks)))
+       (list texlive-pstricks))
       (home-page "http://www.ctan.org/pkg/pst-text")
       (synopsis "Text and character manipulation in PSTricks")
       (description "Pst-text is a PSTricks based package for plotting text along
@@ -7597,7 +8657,7 @@ of the old package @code{pst-char}.")
                    "texlive-marginnote"
                    (list "/source/latex/marginnote/marginnote.dtx")
                    (base32
-                    "1vj1k8xm11gjdfj60as42d8lsv3dbzrm5dlgqcfk89d9dzm3k39j"))))
+                    "152bwxhnssj40rr72r6cfirvqbnc0h7xnagfrbz58v2xck53qhg1"))))
     (package
       (inherit template)
       (home-page "http://www.ctan.org/pkg/marginnote")
@@ -7618,13 +8678,13 @@ may be used instead of @code{\\marginpar} at almost every place where
 frames made with the @code{framed} package.")
       (license license:lppl1.3c+))))
 
-(define-public texlive-iftex
+(define-public texlive-generic-iftex
   (let ((template (simple-texlive-package
-                   "texlive-iftex"
+                   "texlive-generic-iftex"
                    (list "/doc/generic/iftex/"
-                         "/tex/generic/iftex/iftex.sty")
+                         "/tex/generic/iftex/")
                    (base32
-                    "089zvw31gby150n1k0zdk2c0q97pgbqs46phxydaqil64b55nnl7")
+                    "147xa5kl4kjs05nj8v3kd7dpr5xkz3xp3gdvjih32ccd7527f5vp")
                    #:trivial? #t)))
     (package
       (inherit template)
@@ -7638,13 +8698,17 @@ package also provides the @code{\\RequirePDFTeX}, @code{\\RequireXeTeX}, and
 LuaTeX (respectively) is not the engine in use.")
       (license license:lppl1.3+))))
 
+(define-deprecated-package texlive-iftex texlive-generic-iftex)
+
+(define-deprecated-package texlive-generic-ifxetex texlive-generic-iftex)
+
 (define-public texlive-tools
   (let ((template (simple-texlive-package
                    "texlive-tools"
                    (list "/doc/latex/tools/"
                          "/source/latex/tools/")
                    (base32
-                    "1ivhij7171wvrgcjn4wah84wxwpd21d0chh3zxab4pj067c8d0mh"))))
+                    "1xas0b69r3d5x4zhcqysgybyqaikd9avv6r1bdckb947id3iaz58"))))
     (package
       (inherit template)
       (arguments
@@ -7679,7 +8743,7 @@ are part of the LaTeX required tools distribution, comprising the packages:
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0wancavix39j240pd8m9cgmwsijwx6jd6n54v8wg0x2rk5m44myp"))))
+                "0w4x82wmdvcmy8z3p55xvpz5q7jac1q1j591hi8mngfyqa8rda1c"))))
     (build-system texlive-build-system)
     (arguments
      '(#:tex-directory "latex/xkeyval"
@@ -7724,19 +8788,19 @@ are part of the LaTeX required tools distribution, comprising the packages:
                            "xkvutils.tex"))
                #t))))))
     (native-inputs
-     `(("texlive-latex-base" ,texlive-latex-base)
-       ("texlive-cm" ,texlive-cm)
-       ("texlive-lm" ,texlive-lm)
-       ("texlive-url" ,texlive-url)
-       ("texlive-graphics-def" ,texlive-graphics-def)
-       ("texlive-xcolor" ,texlive-xcolor)
-       ("texlive-latex-footmisc" ,texlive-latex-footmisc)
-       ("texlive-latex-listings" ,texlive-latex-listings)
-       ("texlive-iftex" ,texlive-iftex)
-       ("texlive-pstricks" ,texlive-pstricks)
-       ("texlive-pst-text" ,texlive-pst-text)
-       ("texlive-tools" ,texlive-tools)
-       ("texlive-latex-pgf" ,texlive-latex-pgf)))
+     (list texlive-latex-base
+           texlive-cm
+           texlive-lm
+           texlive-url
+           texlive-graphics-def
+           texlive-xcolor
+           texlive-latex-footmisc
+           texlive-latex-listings
+           texlive-generic-iftex
+           texlive-pstricks
+           texlive-pst-text
+           texlive-tools
+           texlive-latex-pgf))
     (home-page "http://www.ctan.org/pkg/xkeyval")
     (synopsis "Extension of the keyval package")
     (description
@@ -7763,9 +8827,9 @@ keys.")
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/standalone"))
     (propagated-inputs
-     `(("texlive-latex-xkeyval" ,texlive-latex-xkeyval)))
+     (list texlive-latex-xkeyval))
     (native-inputs
-     `(("texlive-ydoc" ,texlive-ydoc)))
+     (list texlive-ydoc))
     (home-page "http://www.ctan.org/pkg/standalone")
     (synopsis "Compile TeX pictures stand-alone or as part of a document")
     (description "A class and package is provided which allows TeX pictures or
@@ -7787,7 +8851,7 @@ The behaviour in standalone mode may adjusted using a configuration file
              (list "/source/latex/siunitx/siunitx.dtx"
                    "/doc/latex/siunitx/README.md")
              (base32
-              "11kf6znkgw7y5qmw75qk6px6pqf57bwr53q0673zaiyq20lif96c")))
+              "05kl7yid2npp2gbfshnv2xd08w81fkh5h2n5wd9xcpbhlqjzx9sj")))
     (build-system texlive-build-system)
     (arguments
      '(#:tex-directory "latex/siunitx"
@@ -7797,8 +8861,7 @@ The behaviour in standalone mode may adjusted using a configuration file
          (add-after 'unpack 'chdir
            (lambda _ (chdir "source/latex/siunitx") #t)))))
     (propagated-inputs
-     `(("texlive-latex-l3kernel" ,texlive-latex-l3kernel)
-       ("texlive-latex-l3packages" ,texlive-latex-l3packages)))
+     (list texlive-latex-l3kernel texlive-latex-l3packages))
     (home-page "http://www.ctan.org/pkg/siunitx")
     (synopsis "Comprehensive SI units package")
     (description
@@ -7827,7 +8890,7 @@ package to handle all of the possible unit-related needs of LaTeX users.")
        (file-name (string-append name "-" version "-checkout"))
        (sha256
         (base32
-         "1dqid48vgh25wmw8xzmx6x3pfgz1y9f0r8aza1yxq2mjny5yf68x"))))
+         "1mycxzl761p2zzmva8xsjbxbvrxx3vhi5p160mh9kiqwhrs5biz5"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/booktabs"))
     (home-page "http://www.ctan.org/pkg/booktabs")
@@ -7845,12 +8908,12 @@ to what constitutes a good table in this context.  The package offers
                    (list "/doc/latex/csquotes/"
                          "/tex/latex/csquotes/")
                    (base32
-                    "088gvi60d7sdl6fgg68fbz30fnpqc3yrpkx80sfw7vwgar3wm3av")
+                    "17y5mrmjmi7n0cgq4cnqr55f4bni6lx1pfdv5pzsmbrzha3mhbfg")
                    #:trivial? #t)))
     (package
       (inherit template)
       (propagated-inputs
-       `(("texlive-etoolbox" ,texlive-etoolbox)))
+       (list texlive-etoolbox))
       (home-page "https://www.ctan.org/pkg/csquotes")
       (synopsis "Context sensitive quotation facilities")
       (description "This package provides advanced facilities for inline and
@@ -7876,7 +8939,7 @@ styles as well as the optional active quotes are freely configurable.")
     (package
       (inherit template)
       (propagated-inputs
-       `(("texlive-etoolbox" ,texlive-etoolbox)))
+       (list texlive-etoolbox))
       (home-page "https://www.ctan.org/pkg/logreq")
       (synopsis "Support for automation of the LaTeX workflow")
       (description "The package helps to automate a typical LaTeX
@@ -7903,13 +8966,12 @@ XML file.
                    (list "/doc/latex/biblatex/"
                          "/tex/latex/biblatex/")
                    (base32
-                    "11kzvny50iklzkamr0rqd5x532q8rxny1xhmf96jl8mzj1d2zmay")
+                    "091cz2vrq22d1fr05wljd8vbllsz95q2hn2p8hhrwb2l2xrmxwn8")
                    #:trivial? #t)))
     (package
       (inherit template)
       (propagated-inputs
-       `(("texlive-logreq" ,texlive-logreq)
-         ("texlive-url" ,texlive-url)))
+       (list texlive-logreq texlive-url))
       (home-page "https://www.ctan.org/pkg/biblatex")
       (synopsis "Sophisticated bibliographies in LaTeX")
       (description "BibLaTeX is a complete reimplementation of the
@@ -7942,13 +9004,12 @@ section.
                    (list "/doc/latex/todonotes/"
                          "/tex/latex/todonotes/")
                    (base32
-                    "0lvxsskz4bdfxhd59hf77kiq8k4nh2spb66vc6hifdgi21z8r8wm")
+                    "1jqw8jy73488bdr971w0dnlggsvicagpnpx8ddqkma920ba8rabp")
                    #:trivial? #t)))
     (package
       (inherit template)
       (propagated-inputs
-       `(("texlive-latex-pgf" ,texlive-latex-pgf)
-         ("texlive-latex-xkeyval" ,texlive-latex-xkeyval)))
+       (list texlive-latex-pgf texlive-latex-xkeyval))
       (home-page "http://www.ctan.org/pkg/todonotes")
       (synopsis "Marking things to do in a LaTeX document")
       (description "The @code{todonotes} package lets the user mark
@@ -7981,7 +9042,7 @@ included in the @code{units} bundle.")
                    (list "/doc/latex/microtype/"
                          "/tex/latex/microtype/")
                    (base32
-                    "0xmjpzbj4nqmnl5m7xx1bshdk2c8n57rmbvn0j479ypj4wdlq9iy")
+                    "07861ixrjzxm0l24z82ivhaj4v6xm4ijbaabp66jxsf8s8h7dq9n")
                    #:trivial? #t)))
     (package
       (inherit template)
@@ -8006,7 +9067,7 @@ the bundle.")
                    (list "/doc/latex/caption/"
                          "/tex/latex/caption/")
                    (base32
-                    "09gmh8yjj9f5zak8r18g87w9p5jn7flnvmlhxmvdq6992mbdc6hg")
+                    "1isnn375d14xsx398j3m8rbb0pdk12kijw4xcgl82xici170klwq")
                    #:trivial? #t)))
     (package
       (inherit template)
@@ -8183,7 +9244,7 @@ a repackaging, for use with TeX, of the Bitstream Vera family.")
                     "/fonts/vf/public/fourier/"
                     "/tex/latex/fourier/")
               (base32
-               "1vs2xdx6f6hd01zlslx3y93g3dsa7k3yhqpnhgkizgjmz0r9ipz1")
+               "04d575nd4yvl58g9dfab9mrjxiv4792bdkz4bjvlkx6x257vlfzn")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/fourier")
     (synopsis "Utopia fonts for LaTeX documents")
@@ -8229,7 +9290,7 @@ matching maths fonts are provided by the @code{fourier} and
        (file-name (string-append name "-" version "-checkout"))
        (sha256
         (base32
-         "19mhp9l7cjw0sbq55c9lz0l2pffkyhyir3i63jqynifjmglbgkl7"))))
+         "0j3w1y66pkf3bjl9dh5xy3lfg33rg08s4wx37a3jcndvcji20j3f"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/fontaxes"))
     (home-page "http://www.ctan.org/pkg/fontaxes")
@@ -8272,7 +9333,7 @@ footnote style author/affiliation input in the @command{\\author} command,
               (list "/doc/latex/mweights/"
                     "/tex/latex/mweights/")
               (base32
-               "1k2xclk54q3xgn48hji23q52nivkzgwf0s30bmm6k83f7v57qv8h")
+               "12493g3yz06mhiybnphqbp49fjzy36clzw63b74mkfhsg1pq7h1b")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/mweights")
     (synopsis "Support for multiple-weight font packages")
@@ -8298,7 +9359,7 @@ or if it differs from the weight desired for another font family.  The
                     "/fonts/vf/impallari/cabin/"
                     "/tex/latex/cabin/")
               (base32
-               "0dfq9gqch80iyvp58spmpmqfc9h61sjvnddm81ba0af1p8ag8sfg")
+               "1gqqqbj7i18fs1ss5n3axd821hzq5kbv1dl7dqxp4gba619f1rli")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/cabin")
     (synopsis "Humanist Sans Serif font with LaTeX support")
@@ -8329,7 +9390,7 @@ use with [pdf]LaTeX.")
                     "/fonts/vf/public/newtx/"
                     "/tex/latex/newtx/")
               (base32
-               "0rqjj33m6xkhrjzjhf24kxdg61az5sqsbcl0m7xqkf4akqybn22d")
+               "0h0wm3cd0wxag5x7vy3vgr42jd8m6ffkl90pnkvqdxzbnfdjv3l6")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/newtx")
     (synopsis "Repackaging of the TX fonts with improved metrics")
@@ -8357,7 +9418,7 @@ mathematics package that matches Libertine text quite well.")
                     "/fonts/vf/public/xcharter/"
                     "/tex/latex/xcharter/")
               (base32
-               "0krm4h53lw7h9jbmv5nc89fm4x7i8l574aig1l4mw8w3ziknwmi7")
+               "0d8rvcmvxrlxqqxpirxqbhmiijpsz5y4vvldh1jnc018aannjlhm")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/xcharter")
     (synopsis "Extension of the Bitstream Charter fonts")
@@ -8416,7 +9477,7 @@ LY1 encoding.")
       (synopsis "Control sectional headers")
       (description "This is a LaTeX2ε package to help change the style of any or
 all of LaTeX's sectional headers in the article, book, or report classes.
-Examples include the addition of rules above or below a section title. ")
+Examples include the addition of rules above or below a section title.")
       (license license:lppl1.2+))))
 
 (define-public texlive-morefloats
@@ -8470,7 +9531,7 @@ floats merely delays the arrival of the inevitable error message.")
              (add-after 'unpack 'chdir
                (lambda _ (chdir "source/latex/ifmtarg")))))))
       (inputs
-       `(("texlive-latex-filecontents" ,texlive-latex-filecontents)))
+       (list texlive-latex-filecontents))
       (home-page "https://www.ctan.org/pkg/ifmtarg")
       (synopsis "If-then-else command for processing potentially empty arguments")
       (description "This package provides a command for the LaTeX programmer for
@@ -8497,7 +9558,7 @@ testing whether an argument is empty.")
              (add-after 'unpack 'chdir
                (lambda _ (chdir "source/latex/pagenote")))))))
       (propagated-inputs
-       `(("texlive-ifmtarg" ,texlive-ifmtarg)))
+       (list texlive-ifmtarg))
       (home-page "https://www.ctan.org/pkg/pagenote")
       (synopsis "Notes at end of document")
       (description "The pagenote package provides tagged notes on a separate
@@ -8525,7 +9586,7 @@ page (also known as ‘end notes’).")
              (add-after 'unpack 'chdir
                (lambda _ (chdir "source/latex/titling")))))))
       (native-inputs
-       `(("texlive-cm" ,texlive-cm)))
+       (list texlive-cm))
       (home-page "https://www.ctan.org/pkg/titling")
       (synopsis "Control typesetting of the \\maketitle command")
       (description "The @code{titling} package provides control over the
@@ -8555,7 +9616,7 @@ a physical page.")
              (add-after 'unpack 'chdir
                (lambda _ (chdir "source/latex/ifoddpage")))))))
       (native-inputs
-       `(("texlive-ydoc" ,texlive-ydoc)))
+       (list texlive-ydoc))
       (home-page "https://www.ctan.org/pkg/ifoddpage")
       (synopsis "Determine if the current page is odd or even")
       (description "This package provides an @code{\\ifoddpage} conditional to
@@ -8585,7 +9646,7 @@ the conditional @code{\\ifoddpageoronside} is provided which is also true in
              (add-after 'unpack 'chdir
                (lambda _ (chdir "source/latex/storebox")))))))
       (native-inputs
-       `(("texlive-ydoc" ,texlive-ydoc)))
+       (list texlive-ydoc))
       (home-page "https://www.ctan.org/pkg/storebox")
       (synopsis "Storing information for reuse")
       (description "The package provides \"store boxes\" whose user interface
@@ -8614,7 +9675,7 @@ DVI is output, store boxes behave the same as save boxes.")
              (add-after 'unpack 'chdir
                (lambda _ (chdir "source/latex/collectbox")))))))
       (native-inputs
-       `(("texlive-ydoc" ,texlive-ydoc)))
+       (list texlive-ydoc))
       (home-page "https://www.ctan.org/pkg/collectbox")
       (synopsis "Collect and process macro arguments as boxes")
       (description "The package provides macros to collect and process a macro
@@ -8628,13 +9689,38 @@ Arguments may contain verbatim material or other special use of characters.
 The macros were designed for use within other macros.")
       (license license:lppl1.3))))
 
+(define-public texlive-grfext
+  (let ((template (simple-texlive-package
+                   "texlive-grfext"
+                   (list "/doc/latex/grfext/README.md"
+                         "/source/latex/grfext/grfext.dtx")
+                   (base32
+                    "1cdvjp9gcnixxlbl8ibwz1yr799gwax5hm686hwmwsigdgafhzgq"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ '())
+          "latex/grfext")
+         ((#:build-targets _ '())
+          ''("grfext.dtx"))
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'chdir
+               (lambda _ (chdir "source/latex/grfext")))))))
+      (home-page "https://github.com/ho-tex/grfext")
+      (synopsis "Manipulate the graphics package's list of extensions")
+      (description "This package provides macros for adding to, and reordering
+the list of graphics file extensions recognised by package graphics.")
+      (license license:lppl1.3c+))))
+
 (define-public texlive-adjustbox
   (let ((template (simple-texlive-package
                    "texlive-adjustbox"
                    (list "/doc/latex/adjustbox/"
                          "/source/latex/adjustbox/")
                    (base32
-                    "14vd0yd50bky2pbbjkn59q1aglnqpdhh8vwjdyan0jkzljsr2ch8"))))
+                    "074nxbnl184b6iwhis5n85pilq3b2pld3bbrq0wc30hw462m898k"))))
     (package
       (inherit template)
       (arguments
@@ -8648,14 +9734,14 @@ The macros were designed for use within other macros.")
              (add-after 'unpack 'chdir
                (lambda _ (chdir "source/latex/adjustbox")))))))
       (native-inputs
-       `(("texlive-ydoc" ,texlive-ydoc)))
+       (list texlive-ydoc))
       (propagated-inputs
-       `(("texlive-latex-pgf" ,texlive-latex-pgf)
-         ("texlive-latex-varwidth" ,texlive-latex-varwidth)
-         ("texlive-latex-xkeyval" ,texlive-latex-xkeyval)
-         ("texlive-collectbox" ,texlive-collectbox)
-         ("texlive-ifoddpage" ,texlive-ifoddpage)
-         ("texlive-storebox" ,texlive-storebox)))
+       (list texlive-latex-pgf
+             texlive-latex-varwidth
+             texlive-latex-xkeyval
+             texlive-collectbox
+             texlive-ifoddpage
+             texlive-storebox))
       (home-page "https://www.ctan.org/pkg/adjustbox")
       (synopsis "Graphics package-alike macros for “general” boxes")
       (description "The package provides several macros to adjust boxed
@@ -8675,15 +9761,13 @@ provided box macros are @code{\\lapbox}, @code{\\marginbox},
                    (list "/doc/latex/tcolorbox/"
                          "/tex/latex/tcolorbox/")
                    (base32
-                    "172lcnk6964alsga5w6kcvjhpjjcw1g9df73k8pyhl5lf4fmxa29")
+                    "1qnsbblkadzdn1fx2k21xnlwcb35pg9xya24chkm66jmidi22qp0")
                    #:trivial? #true)))
     (package
       (inherit template)
       (propagated-inputs
-       `(("texlive-etoolbox" ,texlive-etoolbox)
-         ("texlive-latex-environ" ,texlive-latex-environ)
-         ("texlive-latex-pgf" ,texlive-latex-pgf)
-         ("texlive-latex-tools" ,texlive-latex-tools)))
+       (list texlive-etoolbox texlive-latex-environ texlive-latex-pgf
+             texlive-latex-tools))
       (home-page "https://www.ctan.org/pkg/tcolorbox")
       (synopsis "Colored boxes, for LaTeX examples and theorems, etc")
       (description "This package provides an environment for colored and
@@ -8712,7 +9796,7 @@ parts.")
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/ebproof"))
     (propagated-inputs
-     `(("texlive-latex-l3kernel" ,texlive-latex-l3kernel)))
+     (list texlive-latex-l3kernel))
     (home-page "http://www.ctan.org/pkg/ebproof")
     (synopsis
      "Formal proofs in the style of sequent calculus")
@@ -8724,6 +9808,32 @@ an arbitrary point.  Various options allow complete control over spacing,
 styles of inference rules, placement of labels, etc.")
     (license license:lppl1.3+)))
 
+(define-public texlive-latex-bussproofs
+  (let ((template (simple-texlive-package
+                   "texlive-latex-bussproofs"
+                   (list "/doc/latex/bussproofs/"
+                         "/tex/latex/bussproofs/")
+                   (base32
+                    "1gb8y9g89fqw1kix4d2vb7mj440vlb8hnpsa3jqpk9yicndwcyk6"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ '())
+          "latex/bussproofs")
+         ((#:build-targets _ '())
+          ''()) ; "bussproofs.sty"
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'chdir
+               (lambda _ (chdir "tex/latex/bussproofs")))))))
+      (home-page "https://www.math.ucsd.edu/~sbuss/ResearchWeb/bussproofs/index.html")
+      (synopsis "Formal proofs in the style of sequent calculus")
+      (description
+       "This package provides commands to typeset proof trees in the style of
+sequent calculus and related systems.")
+      (license license:lppl1.3+))))
+
 (define-public texlive-eurosym
   (let ((template (simple-texlive-package
                    "texlive-eurosym"
@@ -8778,6 +9888,71 @@ are valid as arguments for the macros.  The package may be used under
 LaTeX and plain TeX.")
     (license (license:fsf-free "file:/binhex.dtx"))))
 
+(define-public texlive-translator
+  (package
+    (inherit (simple-texlive-package
+              "texlive-translator"
+              (list "doc/latex/translator/"
+                    "tex/latex/translator/")
+              (base32 "13rxdqhvgwc5lz2wsw4jwsb92614wlxsa90rmzxyrc6xjz1jypnk")
+              #:trivial? #t))
+    (build-system texlive-build-system)
+    (home-page "https://ctan.org/macros/latex/contrib/translator")
+    (synopsis "Easy translation of strings in LaTeX")
+    (description
+     "This LaTeX package provides a flexible mechanism for translating
+individual words into different languages.  For example, it can be used to
+translate a word like \"figure\" into, say, the German word \"Abbildung\".
+Such a translation mechanism is useful when the author of some package would
+like to localize the package such that texts are correctly translated into the
+language preferred by the user.  This package is not intended to be used to
+automatically translate more than a few words.")
+    (license (list license:lppl license:gpl1+))))
+
+(define-public texlive-latex-textpos
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-textpos"
+              (list "doc/latex/textpos/"
+                    "tex/latex/textpos/")
+              (base32 "0sqm3pr9jyf9sf432qawscbf50glj58acwcfzyk58ijic2g01hzl")
+              #:trivial? #t))
+    (build-system texlive-build-system)
+    (home-page "https://ctan.org/pkg/textpos")
+    (synopsis "Absolute positioning of text on the LaTeX page")
+    (description
+     "This package facilitates placing boxes at absolute positions on the
+LaTeX page.  There are several reasons why this might be useful, but the main
+one (or at least my motivating one) is to help produce a large-format
+conference poster.
+
+This package provides a single environment, plus a starred variant, which
+contains the text (or graphics, or table, or whatever) which is to be placed
+on the page, and which specifies where it is to be placed.  The environment is
+accompanied by various configuration commands.")
+    (license license:lppl)))
+
+(define-public texlive-xifthen
+  (package
+    (inherit (simple-texlive-package
+              "texlive-xifthen"
+              (list "doc/latex/xifthen/"
+                    "tex/latex/xifthen/")
+              (base32
+               "0b33mlmnxsj5mi06v2w2zgamk51mgv1lxdr1cax8nkpn9g7n9axw")
+              #:trivial? #t))
+    (build-system texlive-build-system)
+    (home-page "https://ctan.org/pkg/xifthen")
+    (synopsis "Extended conditional commands")
+    (description
+     "This package extends the @code{ifthen} package by implementing new
+commands to go within the first argument of @code{\\\\ifthenelse}: to test
+whether a string is void or not, if a command is defined or equivalent to
+another.  The package also enables use of complex expressions as introduced by
+the package @code{calc}, together with the ability of defining new commands to
+handle complex tests.")
+    (license license:lppl)))
+
 (define-public bibtool
   (package
     (name "bibtool")
@@ -8799,7 +9974,7 @@ LaTeX and plain TeX.")
     (arguments
      `(#:test-target "test"))
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (home-page "http://www.gerd-neugebauer.de/software/TeX/BibTool/en")
     (synopsis "Tool for manipulating BibTeX databases")
     (description
diff --git a/gnu/packages/texinfo.scm b/gnu/packages/texinfo.scm
index a2fe989f1a..fc1dac9df9 100644
--- a/gnu/packages/texinfo.scm
+++ b/gnu/packages/texinfo.scm
@@ -5,9 +5,10 @@
 ;;; Copyright © 2017, 2019 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2019 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2019 Pierre-Moana Levesque <pierre.moana.levesque@gmail.com>
-;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
+;;; Copyright © 2019, 2020 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -59,26 +60,21 @@
      ;; with the native compiler, the environment is reset. This leads to
      ;; multiple environment variables missing. Do not reset the environment
      ;; to prevent that.
-     (if (%current-target-system)
-         '(#:phases
-           (modify-phases %standard-phases
-             (add-before 'configure 'fix-cross-configure
-               (lambda _
-                 (substitute* "configure"
-                   (("env -i")
-                    "env "))
-                 #t))))
-         '()))
-    (inputs `(("ncurses" ,ncurses)
-              ;; TODO: remove `if' in the next rebuild cycle.
-              ,@(if (%current-target-system)
-                    `(("perl" ,perl))
-                    '())))
+     `(#:phases
+       (if ,(%current-target-system)
+            (modify-phases %standard-phases
+              (add-before 'configure 'fix-cross-configure
+                (lambda _
+                  (substitute* "configure"
+                    (("env -i")
+                     "env "))
+                  #t)))
+            %standard-phases)))
+    (inputs (list ncurses perl))
     ;; When cross-compiling, texinfo will build some of its own binaries with
     ;; the native compiler. This means ncurses is needed both in both inputs
     ;; and native-inputs.
-    (native-inputs `(("perl" ,perl)
-                     ("ncurses" ,ncurses)))
+    (native-inputs (list perl ncurses))
 
     (native-search-paths
      ;; This is the variable used by the standalone Info reader.
@@ -121,11 +117,10 @@ is on expressing the content semantically, avoiding physical markup commands.")
               (sha256
                (base32
                 "1rf9ckpqwixj65bw469i634897xwlgkm5i9g2hv3avl6mv7b0a3d"))))
-    (inputs `(("ncurses" ,ncurses)
-              ("xz" ,xz)))
+    (inputs (list ncurses xz))
     (native-inputs
-      `(("automake" ,automake)
-        ,@(package-native-inputs texinfo)))
+      (modify-inputs (package-native-inputs texinfo)
+        (prepend automake)))
     (arguments
      (substitute-keyword-arguments (package-arguments texinfo)
        ((#:phases phases)
@@ -162,6 +157,17 @@ is on expressing the content semantically, avoiding physical markup commands.")
      `(,@(substitute-keyword-arguments (package-arguments texinfo)
            ((#:phases phases)
             `(modify-phases ,phases
+               ;; Make sure 'info-reader' can read compressed info files
+               ;; in a pure environment.  There are also a few other
+               ;; uncompressors listed in this file (lzip, unxz, bunzip2, ...)
+               ;; but let's not include them because info manuals in Guix
+               ;; are always compressed with 'gzip'.
+               ;; TODO(core-updates): maybe move to the 'texinfo' package.
+               (add-after 'unpack 'absolute-binary-path
+                 (lambda* (#:key inputs #:allow-other-keys)
+                   (substitute* "info/filesys.c"
+                     (("gunzip") (search-input-file inputs "/bin/gunzip"))
+                     (("gzip") (search-input-file inputs "/bin/gzip")))))
                (add-after 'install 'keep-only-info-reader
                  (lambda* (#:key outputs #:allow-other-keys)
                    ;; Remove everything but 'bin/info' and associated
@@ -185,7 +191,9 @@ is on expressing the content semantically, avoiding physical markup commands.")
                                            "perl")
        #:modules ((ice-9 ftw) (srfi srfi-1)
                   ,@%gnu-build-system-modules)))
-    (synopsis "Standalone Info documentation reader")))
+    (synopsis "Standalone Info documentation reader")
+    (inputs (modify-inputs (package-inputs texinfo)
+              (prepend gzip)))))
 
 (define-public texi2html
   (package
@@ -210,7 +218,7 @@ is on expressing the content semantically, avoiding physical markup commands.")
                   (utime "texi2html.pl" 0 0 0 0)
                   #t))))
     (build-system gnu-build-system)
-    (inputs `(("perl" ,perl)))
+    (inputs (list perl))
     (arguments
      ;; Tests fail because of warnings on stderr from Perl 5.22.  Adjusting
      ;; texi2html.pl to avoid the warnings seems non-trivial, so we simply
@@ -276,8 +284,7 @@ Texi2HTML.")
                 (string-append "\"" (which "clear") "\"")))
              #t)))))
     (inputs
-     `(("ncurses" ,ncurses)
-       ("readline" ,readline)))
+     (list ncurses readline))
     (native-inputs
      `(("autoconf" ,autoconf)
        ("automake" ,automake)
diff --git a/gnu/packages/text-editors.scm b/gnu/packages/text-editors.scm
index 29b159f1a7..2c5f5de719 100644
--- a/gnu/packages/text-editors.scm
+++ b/gnu/packages/text-editors.scm
@@ -9,7 +9,7 @@
 ;;; Copyright © 2019 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2019 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2019, 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
-;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2020 Tom Zander <tomz@freedommail.ch>
 ;;; Copyright © 2020 Mark Meyer <mark@ofosos.org>
 ;;; Copyright © 2020 Maxime Devos <maximedevos@telenet.be>
@@ -36,6 +36,7 @@
 (define-module (gnu packages text-editors)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix gexp)
   #:use-module (guix git-download)
   #:use-module (guix utils)
   #:use-module (guix build-system cargo)
@@ -55,12 +56,12 @@
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages freedesktop)
-  #:use-module (gnu packages gcc)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages guile)
   #:use-module (gnu packages haskell-xyz)
+  #:use-module (gnu packages image)
   #:use-module (gnu packages libbsd)
   #:use-module (gnu packages libreoffice)
   #:use-module (gnu packages llvm)
@@ -75,6 +76,7 @@
   #:use-module (gnu packages qt)
   #:use-module (gnu packages regex)
   #:use-module (gnu packages ruby)
+  #:use-module (gnu packages sqlite)
   #:use-module (gnu packages terminals)
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages version-control)
@@ -145,11 +147,7 @@
            (sha256
             (base32 "1jsvg2lg3xqfgi79x08kx94mc34mh62ivca10vsci6fqsk68jbd0"))
            (file-name (git-file-name "vis-test" version))))))
-    (inputs `(("lua" ,lua)
-              ("ncurses" ,ncurses)
-              ("libtermkey" ,libtermkey)
-              ("lua-lpeg" ,lua-lpeg)
-              ("tre" ,tre)))
+    (inputs (list lua ncurses libtermkey lua-lpeg tre))
     (synopsis "Vim-like text editor")
     (description
      "Vis aims to be a modern, legacy free, simple yet efficient vim-like text
@@ -195,10 +193,7 @@ based command language.")
          (add-before 'build 'chdir
            (lambda _ (chdir "src") #t)))))
     (native-inputs
-     `(("gcc", gcc-10) ; See https://github.com/mawww/kakoune/issues/4318
-       ("asciidoc" ,asciidoc)
-       ("pkg-config" ,pkg-config)
-       ("ruby" ,ruby)))
+     (list asciidoc pkg-config ruby))
     (synopsis "Vim-inspired code editor")
     (description
      "Kakoune is a code editor heavily inspired by Vim, as such most of its
@@ -278,7 +273,7 @@ Rust.")
         ("rust-unicode-segmentation" ,rust-unicode-segmentation-1)
         ("rust-unicode-width" ,rust-unicode-width-0.1))))
     (inputs
-     `(("clang" ,clang)))
+     (list clang))
     (home-page "https://github.com/justinbarclay/parinfer-rust")
     (synopsis "Infer parentheses for Clojure, Lisp and Scheme")
     (description
@@ -301,7 +296,7 @@ can load dynamic libraries.")
         (base32
          "1pmr598xxxm9j9dl93kq4dv36zyw0q2dh6d7x07hf134y9hhlnj9"))))
     (build-system gnu-build-system)
-    (inputs `(("ncurses" ,ncurses)))
+    (inputs (list ncurses))
     (home-page "http://joe-editor.sourceforge.net/")
     (synopsis "Console screen editor")
     (description
@@ -387,13 +382,12 @@ bindings and many of the powerful features of GNU Emacs.")
                                ":"))))
                         #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("xorg-server" ,xorg-server-for-tests)))
+     (list pkg-config xorg-server-for-tests))
     (inputs
      `(("aspell" ,aspell)
        ("boost" ,boost)
        ("ctags" ,universal-ctags)
-       ("gtkmm" ,gtkmm)
+       ("gtkmm" ,gtkmm-3)
        ("gtksourceviewmm" ,gtksourceviewmm)
        ("libclang" ,clang-11)     ;XXX: must be the same version as Mesas LLVM
        ("libgit2" ,libgit2)))
@@ -421,16 +415,15 @@ systems.")
                 "0b0az2wvqgvam7w0ns1j8xp2llslm1rx6h7zcsy06a7j0yp257cm"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("gtk+" ,gtk+-2)))
+     (list gtk+-2))
     (home-page "http://tarot.freeshell.org/leafpad/")
     (synopsis "GTK+ based text editor")
     (description "Leafpad is a GTK+ text editor that emphasizes simplicity.  As
 development focuses on keeping weight down to a minimum, only the most essential
 features are implemented in the editor.  Leafpad is simple to use, is easily
-compiled, requires few libraries, and starts up quickly. ")
+compiled, requires few libraries, and starts up quickly.")
     (license license:gpl2+)))
 
 (define-public l3afpad
@@ -450,12 +443,9 @@ compiled, requires few libraries, and starts up quickly. ")
                   "1alyghm2wpakzdfag0g4g8gb1h9l4wdg7mnhq8bk0iq5ryqia16a"))))
       (build-system glib-or-gtk-build-system)
       (native-inputs
-       `(("intltool" ,intltool)
-         ("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("pkg-config" ,pkg-config)))
+       (list intltool autoconf automake pkg-config))
       (inputs
-       `(("gtk+" ,gtk+)))
+       (list gtk+))
       (home-page "http://tarot.freeshell.org/leafpad/")
       (synopsis "GTK+ 3 based text editor")
       (description "L3afpad is a GTK+ 3 text editor that emphasizes simplicity.  As
@@ -490,7 +480,7 @@ compiled, requires few libraries, and starts up quickly. ")
        #:phases (modify-phases %standard-phases
                   (delete 'configure))))
     (native-inputs
-     `(("nasm" ,nasm)))
+     (list nasm))
     (home-page "https://sites.google.com/site/e3editor/")
     (synopsis "Tiny text editor written in assembly")
     (description
@@ -521,35 +511,31 @@ Wordstar-, EMACS-, Pico, Nedit or vi-like key bindings.  e3 can be used on
                           (substitute* "GNUmakefile"
                             (("/usr/bin/") ""))))))
     (build-system gnu-build-system)
-    (native-inputs
-     `(("pkg-config" ,pkg-config)))
-    (inputs
-     `(("diffutils" ,diffutils)
-       ("libbsd" ,libbsd)
-       ("ncurses" ,ncurses)))
+    (native-inputs (list pkg-config))
+    (inputs (list diffutils libbsd ncurses))
     (arguments
      ;; No test suite available.
-     `(#:tests? #f
-       #:make-flags (list (string-append "prefix=" %output)
-                          (string-append "CC=" ,(cc-for-target))
-                          (string-append "PKG_CONFIG=" ,(pkg-config-for-target)))
-       #:phases (modify-phases %standard-phases
-                  (delete 'configure)   ; no configure script
-                  (add-before 'build 'correct-location-of-diff
-                    (lambda* (#:key inputs #:allow-other-keys)
-                      (substitute* "buffer.c"
-                        (("/usr/bin/diff")
-                         (string-append (assoc-ref inputs "diffutils")
-                                        "/bin/diff")))))
-                  (add-before 'install 'patch-tutorial-location
-                    (lambda* (#:key outputs #:allow-other-keys)
-                      (substitute* "mg.1"
-                        (("/usr") (assoc-ref outputs "out")))))
-                  (add-after 'install 'install-tutorial
-                    (lambda* (#:key outputs #:allow-other-keys)
-                      (let* ((out (assoc-ref outputs "out"))
-                             (doc (string-append out "/share/doc/mg")))
-                        (install-file "tutorial" doc)))))))
+     (list #:tests? #f
+           #:make-flags
+           #~(list (string-append "prefix=" #$output)
+                   (string-append "CC=" #$(cc-for-target))
+                   (string-append "PKG_CONFIG=" #$(pkg-config-for-target)))
+           #:phases
+           #~(modify-phases %standard-phases
+               (delete 'configure)      ;no configure script
+               (add-before 'build 'correct-location-of-diff
+                 (lambda* (#:key inputs #:allow-other-keys)
+                   (substitute* "buffer.c"
+                     (("/usr/bin/diff")
+                      (search-input-file inputs "/bin/diff")))))
+               (add-before 'install 'patch-tutorial-location
+                 (lambda _
+                   (substitute* "mg.1"
+                     (("/usr") #$output))))
+               (add-after 'install 'install-tutorial
+                 (lambda _
+                   (let ((doc (string-append #$output "/share/doc/mg")))
+                     (install-file "tutorial" doc)))))))
     (home-page "https://homepage.boetes.org/software/mg/")
     (synopsis "Microscopic GNU Emacs clone")
     (description
@@ -611,11 +597,9 @@ OpenBSD team.")
                (install-file "config.eg" doc)
                #t))))))
     (native-inputs
-     `(("texinfo" ,texinfo)))
+     (list texinfo))
     (inputs
-     `(("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxv" ,libxv)))
+     (list libx11 libxext libxv))
     (home-page "https://bellard.org/qemacs/")
     (synopsis "Small but powerful text editor")
     (description "QEmacs (for Quick Emacs) is a very small but
@@ -681,18 +665,17 @@ scripts/input/X11/C/Shell/HTML/Dired): 49KB.
                 "19cf55b86yj2b5hdazbyw4iyp6xq155243aiyg4m0vhwh0h79nwh"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))           ; for lrelease
+     (list pkg-config qttools))           ; for lrelease
     (inputs
-     `(("hunspell" ,hunspell)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtmultimedia" ,qtmultimedia)
-       ("qtquickcontrols" ,qtquickcontrols)
-       ("qtsvg" ,qtsvg)
-       ("qtwebchannel" ,qtwebchannel)))
+     (list hunspell
+           qtbase-5
+           qtdeclarative
+           qtmultimedia
+           qtquickcontrols
+           qtsvg
+           qtwebchannel))
     (propagated-inputs                  ; To get native-search-path
-     `(("qtwebengine" ,qtwebengine)))
+     (list qtwebengine))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -725,7 +708,7 @@ environment with Markdown markup.")
 (define-public manuskript
   (package
     (name "manuskript")
-    (version "0.12.0")
+    (version "0.13.1")
     (source
      (origin
        (method git-fetch)
@@ -734,7 +717,7 @@ environment with Markdown markup.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0gfwwnpjslb0g8y3v9ha4sd8in6bpy6bhi4rn4hmfd2vmq2flpbd"))))
+        (base32 "1rj41wimmaq47lwaz0d1iq270klp96xv9dpfdsxi5a2xcdm80jac"))))
     (build-system python-build-system)
     (arguments
      `(#:tests? #f                      ;no test
@@ -765,7 +748,8 @@ environment with Markdown markup.")
                (let ((bin (string-append out "/bin"))
                      (executable (string-append share "/bin/manuskript")))
                  (wrap-program executable
-                   (list "PYTHONPATH" 'prefix (list (getenv "PYTHONPATH"))))
+                   (list "GUIX_PYTHONPATH" 'prefix
+                         (list (getenv "GUIX_PYTHONPATH"))))
                  (mkdir-p bin)
                  (with-directory-excursion bin
                    (symlink (string-append share "/bin/manuskript")
@@ -788,11 +772,7 @@ environment with Markdown markup.")
                    #:categories "Office;WordProcessor;"))
                #t))))))
     (inputs
-     `(("pandoc" ,pandoc)
-       ("python-lxml" ,python-lxml)
-       ("python-markdown" ,python-markdown)
-       ("python-pyqt" ,python-pyqt)
-       ("qtsvg" ,qtsvg)))
+     (list pandoc python-lxml python-markdown python-pyqt qtsvg))
     (home-page "http://www.theologeek.ch/manuskript/")
     (synopsis "Tool for writers")
     (description "Manuskript provides a rich environment to help
@@ -861,7 +841,7 @@ in plain text file format.")
            (sha256
             (base32 "1s29p4brmcsc3xsww3gk85dg45f1kk3iykh1air3ij0hymf5dyqy"))))))
     (inputs
-     `(("pcre2" ,pcre2)))
+     (list pcre2))
     (home-page "https://editorconfig.org/")
     (synopsis "EditorConfig core library written in C")
     (description "EditorConfig makes it easy to maintain the correct coding
@@ -874,25 +854,26 @@ editors.")
 (define-public texmacs
   (package
     (name "texmacs")
-    (version "2.1")
+    (version "2.1.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://www.texmacs.org/Download/ftp/tmftp/"
                            "source/TeXmacs-" version "-src.tar.gz"))
        (sha256
-        (base32 "1gl6k1bwrk1y7hjyl4xvlqvmk5crl4jvsk8wrfp7ynbdin6n2i48"))))
-    (build-system gnu-build-system)
+        (base32 "0c780vcwppzhb70d3d96md3hra7338d4fv3aj0sm7jx0mj2a334i"))))
+    (build-system cmake-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("xdg-utils" ,xdg-utils)))       ;for xdg-icon-resource
+     (list pkg-config xdg-utils))       ;for xdg-icon-resource
     (inputs
-     `(("freetype" ,freetype)
-       ("guile" ,guile-1.8)
-       ("perl" ,perl)
-       ("python" ,python-wrapper)
-       ("qt" ,qtbase-5)
-       ("qtsvg" ,qtsvg)))
+     (list freetype
+           guile-1.8
+           libjpeg-turbo
+           perl
+           python-wrapper
+           qtbase-5
+           qtsvg
+           sqlite))
     (arguments
      `(#:tests? #f                      ; no check target
        #:phases
@@ -903,13 +884,6 @@ editors.")
                (substitute* "packages/linux/icons.sh"
                  (("/usr/share")
                   (string-append out "/share"))))))
-         (add-after 'install 'install-desktop-file
-           (lambda* (#:key outputs #:allow-other-keys)
-             ;; Install desktop file.
-             (let* ((out (assoc-ref outputs "out"))
-                    (apps (string-append out "/share/applications"))
-                    (source "TeXmacs/misc/mime/texmacs.desktop"))
-               (install-file source apps))))
          (add-before 'configure 'gzip-flags
            (lambda _
              (substitute* "Makefile.in"
@@ -927,17 +901,19 @@ Octave.  TeXmacs is completely extensible via Guile.")
 (define-public scintilla
   (package
     (name "scintilla")
-    (version "5.1.1")
+    (version "5.1.5")
     (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 "1d0yjx2wlx4fj5bccxdgfmrr7nzazkw4m08i6h4c0a54sb484yif"))))
+        (base32 "0mwyhjvmvxyip9z169bgpkz4k9la802z438m8bb0f4gyqfbif999"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:make-flags (list "GTK3=1" "CC=gcc" "-Cgtk")
+     `(#:make-flags (list "GTK3=1"
+                          ,(string-append "CC=" (cc-for-target))
+                          "-Cgtk")
        #:tests? #f                      ;require un-packaged Pyside
        #:phases
        (modify-phases %standard-phases
@@ -953,11 +929,9 @@ Octave.  TeXmacs is completely extensible via Guile.")
                (for-each (lambda (f) (install-file f include))
                          (find-files "include/" "."))))))))
     (native-inputs
-     `(("gcc" ,gcc-9)                   ;Code has C++17 requirements
-       ("pkg-config" ,pkg-config)
-       ("python" ,python-wrapper)))
+     (list pkg-config python-wrapper))
     (inputs
-     `(("gtk+" ,gtk+)))
+     (list gtk+))
     (home-page "https://www.scintilla.org/")
     (synopsis "Code editor for GTK+")
     (description "Scintilla is a source code editing component for
@@ -973,30 +947,30 @@ and multiple fonts.")
 (define-public geany
   (package
     (name "geany")
-    (version "1.37.1")
+    (version "1.38")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://download.geany.org/"
                            "geany-" version ".tar.bz2"))
        (sha256
-        (base32 "060sachn33xpx3a609f09y97qq5ky17gvv686zbvrn618ij7bi8q"))))
+        (base32 "0inmmb9wra2w99pfv6p64d66s2zrhafc8drhwmga7gj89mp1gzxb"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("doxygen" ,doxygen)
-       ("glib" ,glib "bin")
-       ("intltool" ,intltool)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)
-       ("python-docutils" ,python-docutils))) ;for rst2html
+     (list autoconf
+           automake
+           doxygen
+           `(,glib "bin")
+           intltool
+           libtool
+           pkg-config
+           python-docutils)) ;for rst2html
     (inputs
-     `(("gtk+" ,gtk+)
-       ;; FIXME: Geany bundles a 3.X release of Scintilla.  It is not
-       ;; currently possible to replace it with our Scintilla package.
-       ;; ("scintilla" ,scintilla)
-       ))
+     (list gtk+
+           ;; FIXME: Geany bundles a 3.X release of Scintilla.  It is not
+           ;; currently possible to replace it with our Scintilla package.
+           ;; ("scintilla" ,scintilla)
+           ))
     (arguments
      `(#:imported-modules ((guix build glib-or-gtk-build-system)
                            ,@%gnu-build-system-modules)
@@ -1059,7 +1033,7 @@ The basic features of Geany are:
     (native-inputs
      `(("gettext" ,gettext-minimal)))
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (home-page "http://www.moria.de/~michael/fe/")
     (synopsis "Small folding editor")
     (description "Fe is a small folding editor.  It folds
@@ -1095,10 +1069,9 @@ card.  It offers:
                 "0sg2f6lxq6cjkpd3dvlxxns82hvq826rjnams5in97pssmknr77g"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("perl" ,perl)
-       ("texinfo" ,texinfo)))
+     (list perl texinfo))
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (arguments
      `(#:tests? #f
        #:make-flags
@@ -1149,7 +1122,7 @@ files.  It was originally developed on the Amiga 3000T.")
        (modify-phases %standard-phases
          (delete 'configure))))         ;no configure script
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (home-page "https://devel.ringlet.net/editors/hexer/")
     (synopsis "Multi buffer editor for binary files with vi-like interface")
     (description "Hexer is a multi-buffer editor for binary files for Unix-like
@@ -1184,11 +1157,8 @@ similar to vi/ex.")
                                (assoc-ref outputs "out")
                                "/share', *path_parts)"))))))))
     (inputs
-     `(("python2-lxml" ,python2-lxml)
-       ("python2-pygtk" ,python2-pygtk)
-       ("python2-simplejson" ,python2-simplejson)
-       ("python2-translate-toolkit" ,python2-translate-toolkit)
-       ("python2-pycurl" ,python2-pycurl)))
+     (list python2-lxml python2-pygtk python2-simplejson
+           python2-translate-toolkit python2-pycurl))
     (synopsis "Graphical translation tool")
     (description "Virtaal is a powerful yet simple translation tool with an
 uncluttered user interface.  It supports a multitude of translation formats
diff --git a/gnu/packages/textutils.scm b/gnu/packages/textutils.scm
index bbad8ce867..12e3d3b3c8 100644
--- a/gnu/packages/textutils.scm
+++ b/gnu/packages/textutils.scm
@@ -22,6 +22,8 @@
 ;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Jean-Baptiste Volatier <jbv@pm.me>
 ;;; Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
+;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
+;;; Copyright © 2021 Bonface Munyoki Kilyungi <me@bonfacemunyoki.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -42,6 +44,7 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix gexp)
   #:use-module (guix git-download)
   #:use-module (guix build-system ant)
   #:use-module (guix build-system gnu)
@@ -67,6 +70,7 @@
   #:use-module (gnu packages readline)
   #:use-module (gnu packages ruby)
   #:use-module (gnu packages slang)
+  #:use-module (gnu packages syncthing)
   #:use-module (gnu packages web))
 
 (define-public dos2unix
@@ -111,8 +115,7 @@ to DOS format and vice versa.")
         (base32 "0m59sd1ca0zw1aydpc3m8sw03nc885knmccqryg7byzmqs585ia6"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("python" ,python)
-       ("python-cython" ,python-cython)))
+     (list python python-cython))
     (home-page "https://github.com/rrthomas/recode")
     (synopsis "Text encoding converter")
     (description "The Recode library converts files between character sets and
@@ -417,7 +420,7 @@ input bits thoroughly but are not suitable for cryptography.")
         (base32 "0dc9fxcdmppbs9s06jvq61zbk552laxps0xyk098gj41697ihd96"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("gettext" ,gettext-minimal)))
+     (list gettext-minimal))
     (home-page "https://billposer.org/Software/a2b.html")
     (synopsis "Convert between ASCII, hexadecimal and binary representations")
     (description "The two programs are useful for generating test data, for
@@ -475,8 +478,7 @@ useful when it is desired to reformat numbers.
                  (("^iconv ") (string-append iconv "/bin/iconv ")))
              #t))))))
     (inputs
-     `(("ascii2binary" ,ascii2binary)
-       ("libiconv" ,libiconv)))
+     (list ascii2binary libiconv))
     (home-page "https://billposer.org/Software/unidesc.html")
     (synopsis "Find out what is in a Unicode file")
     (description "Useful tools when working with Unicode files when one
@@ -750,15 +752,9 @@ in a portable way.")
              (invoke "autoreconf" "-vif")
              #t)))))
     (inputs
-     `(("ncurses" ,ncurses)
-       ("perl" ,perl)
-       ("readline" ,readline)
-       ("slang" ,slang)))
+     (list ncurses perl readline slang))
     (native-inputs
-     `(("libtool" ,libtool)
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list libtool autoconf automake pkg-config))
     (home-page "https://www.lbreyer.com/dbacl.html")
     (synopsis "Bayesian text and email classifier")
     (description
@@ -794,9 +790,7 @@ categories.")
     (build-system gnu-build-system)
     (arguments `(#:tests? #f))  ; FIXME maketest.sh does not work.
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (home-page "https://github.com/williamh/dotconf")
     (synopsis "Configuration file parser library")
     (description
@@ -853,8 +847,8 @@ categories.")
                           (with-directory-excursion
                               (format #f "../drm_tools-~a" ,version)
                             (invoke "sh" "test_all.sh")))))))))
-    (native-inputs `(("which" ,which))) ;for tests
-    (inputs `(("pcre" ,pcre)))
+    (native-inputs (list which)) ;for tests
+    (inputs (list pcre))
     (home-page "http://drmtools.sourceforge.net/")
     (synopsis "Utilities to manipulate text and binary files")
     (description "The drm_tools package contains the following commands:
@@ -929,8 +923,7 @@ Filter, list, or split a tar file.
        #:tests? #f
        #:jar-name "rsyntaxtextarea.jar"))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (home-page "https://bobbylight.github.io/RSyntaxTextArea/")
     (synopsis "Syntax highlighting text component for Java Swing")
     (description "RSyntaxTextArea is a syntax highlighting, code folding text
@@ -969,7 +962,7 @@ source code.")
                  (delete-file "bycython.cpp")
                  (invoke "cython" "--cplus" "bycython.pyx")))))))
       (native-inputs
-       `(("python-cython" ,python-cython)))
+       (list python-cython))
       (home-page "https://www.github.com/aflc/editdistance")
       (synopsis "Fast implementation of the edit distance (Levenshtein distance)")
       (description
@@ -1019,8 +1012,7 @@ text.")
                 "06vdikjvpj6qdb41d8wzfnyj44jpnknmlgbhbr1w215420lpb5xj"))))
     (build-system gnu-build-system)
     (inputs
-     `(("unzip" ,unzip)
-       ("perl" ,perl)))
+     (list unzip perl))
     (arguments
      `(#:tests? #f                      ; No tests.
        #:make-flags (list (string-append "BINDIR="
@@ -1132,7 +1124,7 @@ documents into plain text.")
          ;; no configure script
          (delete 'configure))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "https://github.com/dstosberg/odt2txt/")
     (synopsis "Converter from OpenDocument Text to plain text")
     (description "odt2txt is a command-line tool which extracts the text out
@@ -1146,6 +1138,40 @@ useful to extract content from OpenDocument spreadsheets (*.ods) and
 OpenDocument presentations (*.odp).")
     (license license:gpl2)))
 
+(define-public bibutils
+  (package
+    (name "bibutils")
+    (version "7.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://sourceforge/bibutils/"
+                                  "bibutils_" version "_src.tgz"))
+
+              (sha256
+               (base32
+                "1hxmwjjzw48w6hdh2x7ybkrhi1xngd55i67hrrd3wswa3vpql0kf"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list #:configure-flags
+           #~(list "--install-dir" (string-append #$output "/bin")
+                   "--install-lib" (string-append #$output "/lib")
+                   "--dynamic")
+           #:make-flags
+           #~(list (string-append "CC=" #+(cc-for-target))
+                   (string-append "LDFLAGSIN=-Wl,-rpath=" #$output "/lib"))
+           #:test-target "test"
+           #:phases
+           '(modify-phases %standard-phases
+              (replace 'configure
+                (lambda* (#:key configure-flags #:allow-other-keys)
+                  ;; configure script is ill-formed, invoke it manually
+                  (apply invoke "sh" "./configure" configure-flags))))))
+    (home-page "https://bibutils.sourceforge.io/")
+    (synopsis "Convert between various bibliography formats")
+    (description "This package provides converters for various bibliography
+formats (e.g. Bibtex, RIS, ...) using a common XML intermediate.")
+    (license license:gpl2)))
+
 (define-public opencc
   (package
     (name "opencc")
@@ -1210,7 +1236,7 @@ OpenDocument presentations (*.odp).")
                (chdir "python")
                (mkdir-p dist)
                (setenv "PYTHONPATH"
-                       (string-append dist ":" (getenv "PYTHONPATH")))
+                       (string-append dist ":" (getenv "GUIX_PYTHONPATH")))
                (invoke "python" "setup.py" "install"
                        "--root=/" "--single-version-externally-managed"
                        (string-append "--prefix=" out))
@@ -1267,13 +1293,13 @@ such as ISO-2022-JP, Shift_JIS, EUC-JP, UTF-8, UTF-16 or UTF-32.")
 (define-public python-pandocfilters
   (package
     (name "python-pandocfilters")
-    (version "1.4.3")
+    (version "1.5.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pandocfilters" version))
        (sha256
-        (base32 "1sq675dg4barb5949xxz4d5gk2ly524hi1p1xgwb3d1l0nsznqxw"))))
+        (base32 "0f3sb8q85dbwliv46cc1yvpy4r00qp4by5x8751kn8vx6c1rarqb"))))
     (build-system python-build-system)
     (home-page "https://github.com/jgm/pandocfilters")
     (synopsis "Python module for writing Pandoc filters")
@@ -1347,3 +1373,83 @@ languages such as HTML, Markdown, Asciidoc, and reStructuredText.  The community
 around it also has a list of style guides implemented with Vale in
 @url{https://github.com/errata-ai/styles, their styles repo}.")
     (license license:expat)))
+
+(define-public utf-8-lineseparator
+  (package
+    (name "utf-8-lineseparator")
+    (version "cj3")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/pflanze/utf-8-lineseparator")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1xnbcanqn5jr965gw9195ij6hz04clfm77m5776dysn9nykn20w1"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:make-flags
+       (list
+         (string-append "CC=" ,(cc-for-target)))
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (replace 'install
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin")))
+               (install-file "utf-8-lineseparator" bin)))))))
+    (home-page "https://github.com/pflanze/utf-8-lineseparator")
+    (synopsis "Line ending detection library")
+    (description
+"@code{utf-8-lineseparator} provides a tool to efficiently check text
+files for valid UTF-8 use and to report which line endings they use.")
+    (license license:expat)))
+
+(define-public csvdiff
+  (package
+    (name "csvdiff")
+    (version "1.4.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/aswinkarthik/csvdiff")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0cd1ikxsypjqisfnmr7zix3g7x8p892w77086465chyd39gpk97b"))))
+    (build-system go-build-system)
+    (arguments
+     '(#:import-path "github.com/aswinkarthik/csvdiff"))
+    (propagated-inputs
+     (list go-golang-org-x-sys
+           go-github-com-stretchr-testify
+           go-github-com-spf13-cobra
+           go-github-com-spf13-afero
+           go-github-com-spaolacci-murmur3
+           go-github-com-mattn-go-colorable
+           go-github-com-fatih-color
+           go-github-com-cespare-xxhash
+           go-github-com-oneofone-xxhash))
+    (home-page "https://github.com/aswinkarthik/csvdiff")
+    (synopsis "Fast diff tool for comparing CSV files")
+    (description "@code{csvdiff} is a diff tool to compute changes between two
+CSV files.  It can compare CSV files with a million records in under 2
+seconds.  It is specifically suited for comparing CSV files dumped from
+database tables.  GNU Diff is orders of magnitude faster for comparing line by
+line.  @code{csvdiff} supports
+
+@itemize
+@item Selective comparison of fields in a row
+@item Specifying group of columns as primary-key to uniquely identify a row
+@item Ignoring columns
+@item Several output formats including colored git style output or
+JSON for post-processing
+@end itemize")
+    (license license:expat)))
+
+(define-public go-github-com-aswinkarthik-csvdiff
+  (deprecated-package "go-github-com-aswinkarthik-csvdiff" csvdiff))
diff --git a/gnu/packages/time.scm b/gnu/packages/time.scm
index df4b8ac6f5..9b57fe41fb 100644
--- a/gnu/packages/time.scm
+++ b/gnu/packages/time.scm
@@ -19,6 +19,8 @@
 ;;; Copyright © 2020 Lars-Dominik Braun <ldb@leibniz-psychology.org>
 ;;; Copyright © 2020 Tanguy Le Carrour <tanguy@bioneland.org>
 ;;; Copyright © 2021 Ryan Prior <rprior@protonmail.com>
+;;; Copyright © 2021 Foo Chuan Wei <chuanwei.foo@hotmail.com>
+;;; Copyright © 2022 Pradana AUMARS <paumars@courrier.dev>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -86,7 +88,7 @@ to a file.")
         (base32
          "02kaambsgpjx3zi42j6l11rwms2p35b9hsk4f3kdf979gd3kcqg8"))))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (build-system python-build-system)
     (home-page "https://github.com/wroberts/pytimeparse")
     (synopsis "Time expression parser")
@@ -110,7 +112,7 @@ expressions.")
     ;; repository lacks a setup.py!  How to build from git?
     (arguments '(#:tests? #f))
     (propagated-inputs
-     `(("python-cleo" ,python-cleo)))
+     (list python-cleo))
     (home-page "https://github.com/sdispater/pytzdata")
     (synopsis "Timezone database for Python")
     (description
@@ -157,10 +159,32 @@ saving time.  Almost all of the Olson timezones are supported.")
     (build-system python-build-system)
     ;; XXX: The PyPI distribution lacks tests, and the upstream repository
     ;; lacks a setup.py!
-    (arguments '(#:tests? #f))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         ;; Add setup.py to fix the build. Otherwise, the build will fail with
+         ;; "no setup.py found".
+         ;;
+         ;; Upstream uses Poetry to build python-pendulum, including parts
+         ;; written in C. Here, we simply add a setup.py file and do not build
+         ;; the parts written in C. This is possible because python-pendulum
+         ;; falls back on pure Python code when the C parts are not available
+         ;; (reference: build.py).
+         (add-after 'unpack 'add-setup.py
+           (lambda _
+             (call-with-output-file "setup.py"
+               (lambda (port)
+                 (format port
+                         "from setuptools import find_packages, setup
+setup(name='pendulum',
+      version='~a',
+      packages=find_packages())
+"
+                         ,version))))))
+       ;; XXX: The PyPI distribution lacks tests.
+       #:tests? #f))
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-pytzdata" ,python-pytzdata)))
+     (list python-dateutil python-pytzdata))
     (home-page "https://github.com/sdispater/pendulum")
     (synopsis "Alternate API for Python datetimes")
     (description "Pendulum is a drop-in replacement for the standard
@@ -172,14 +196,14 @@ Pendulum instances.")
 (define-public python-dateutil
   (package
     (name "python-dateutil")
-    (version "2.8.1")
+    (version "2.8.2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "python-dateutil" version))
        (sha256
         (base32
-         "0g42w7k5007iv9dam6gnja2ry8ydwirh99mgdll35s12pyfzxsvk"))))
+         "11iy7m4bp2lgfkcl0r6xzf34bvk7ppjmsyn2ygfikbi72v6cl8q1"))))
     (build-system python-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
@@ -195,11 +219,9 @@ Pendulum instances.")
 
                       (invoke "pytest" "-vv"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-pytest python-pytest-cov python-setuptools-scm))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://dateutil.readthedocs.io/en/stable/")
     (synopsis "Extensions to the standard datetime module")
     (description
@@ -216,22 +238,19 @@ datetime module, available in Python 2.3+.")
 (define-public python-parsedatetime
   (package
     (name "python-parsedatetime")
-    (version "2.4")
+    (version "2.6")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "parsedatetime" version))
        (sha256
         (base32
-         "0jxqkjks7z9dn222cqgvskp4wr6d92aglinxq7pd2w4mzdc7r09x"))))
+         "0mfl0ixshqkwx7z5siaib7ix5j2iahb1jqfpyhqp42wan7xnicsc"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-nose" ,python-nose)
-       ("python-pyicu" ,python-pyicu)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-nose python-pyicu python-pytest python-pytest-runner))
     (propagated-inputs
-     `(("python-future" ,python-future)))
+     (list python-future))
     (home-page "https://github.com/bear/parsedatetime/")
     (synopsis "Parse human-readable date/time text")
     (description
@@ -260,7 +279,7 @@ datetime module, available in Python 2.3+.")
     ;; Pytz should only be required for Python 2, but the test suite fails
     ;; without it.
     (native-inputs
-     `(("python-pytz" ,python-pytz)))
+     (list python-pytz))
     (home-page "https://github.com/closeio/ciso8601")
     (synopsis
      "Fast ISO8601 date time parser")
@@ -295,9 +314,9 @@ Python datetime objects.")
                (("def test_fail") "def _test_fail"))
              #t)))))
     (propagated-inputs
-     `(("python-pytz" ,python-pytz)))
+     (list python-pytz))
     (native-inputs
-     `(("python-mock" ,python-mock)))
+     (list python-mock))
     (home-page "https://github.com/regebro/tzlocal")
     (synopsis "Local timezone information for Python")
     (description
@@ -320,7 +339,7 @@ under several distributions that's hard or impossible to figure out.")
          "1n7jkz68kk5pwni540pr5zdh99bf6ywydk1p5pdrqisrawylldif"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://github.com/gweis/isodate/")
     (synopsis "Python date parser and formatter")
     (description
@@ -349,7 +368,7 @@ ISO 8601 dates, time and duration.")
                     (lambda _
                       (invoke "pytest" "-vv" "iso8601"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://bitbucket.org/micktwomey/pyiso8601")
     (synopsis "Module to parse ISO 8601 dates")
     (description
@@ -396,9 +415,9 @@ value (in fractional seconds) of a clock which never goes backwards.")
          "06jv7ar7lpvvk0dixzwdr3wgm0g1lipxs429s2z7knwwa7hwpf41"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pytz" ,python-pytz)))
+     (list python-pytz))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (home-page "https://github.com/kurtraschke/pyRFC3339")
     (synopsis "Python timestamp library")
     (description "Python library for generating and parsing RFC 3339-compliant
@@ -430,15 +449,15 @@ timestamps.")
                        ;; Remove when python-dateutil > 2.8.1.
                        "-k" "not test_parse_tz_name_zzz")))))))
     (native-inputs
-     `(;; For testing
-       ("python-chai" ,python-chai)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-mock" ,python-pytest-mock)
-       ("python-simplejson" ,python-simplejson)))
+     (list ;; For testing
+           python-chai
+           python-pytest
+           python-pytest-cov
+           python-pytest-mock
+           python-pytz
+           python-simplejson))
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-pytz" ,python-pytz)))
+     (list python-dateutil))
     (home-page "https://github.com/arrow-py/arrow")
     (synopsis "Dates and times for Python")
     (description
@@ -450,17 +469,15 @@ datetime type.")
 (define-public python-aniso8601
   (package
     (name "python-aniso8601")
-    (version "1.3.0")
+    (version "9.0.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "aniso8601" version))
        (sha256
         (base32
-         "1waj54iv3n3lw1fapbz8a93yjgrybgpc86wif5baxdh1arpj9df3"))))
+         "0wxry6riyqajl02mkad8g2q98sx5jr13zndj3fandpzfcxv13qvj"))))
     (build-system python-build-system)
-    (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)))
     (home-page "https://bitbucket.org/nielsenb/aniso8601")
     (synopsis "Python library for parsing ISO 8601 strings")
     (description
@@ -473,6 +490,8 @@ datetime type.")
 (define-public datefudge
   (package
     (name "datefudge")
+    ;; XXX When updating this package, make sure to do something about the
+    ;; archive.org backup URI.
     (version "1.23")
     (source (origin
               ;; Source code is available from
@@ -480,9 +499,17 @@ datetime type.")
               ;; for bootstrapping reasons, we do not rely on 'git-fetch' here
               ;; (since Git -> GnuTLS -> datefudge).
               (method url-fetch)
-              (uri (string-append
-                    "mirror://debian/pool/main/d/datefudge/datefudge_"
-                    version ".tar.xz"))
+              (uri (list
+                     ;; For some reason this tarball was removed from Debian's
+                     ;; servers. Remove this archive.org URL when updating
+                     ;; datefudge, or add the new tarball to archive.org and
+                     ;; update the URL.
+                     (string-append
+                       "https://archive.org/download/datefudge_" version
+                       ".tar_202112/" "datefudge_" version ".tar.xz")
+                     (string-append
+                      "mirror://debian/pool/main/d/datefudge/datefudge_"
+                      version ".tar.xz")))
               (sha256
                (base32
                 "0ifnlb0mc8qc2kb5042pbz0ns6rwcb7201di8wyrsphl0yhnhxiv"))
@@ -503,7 +530,7 @@ datetime type.")
              #t))
          (delete 'configure))))
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (home-page "https://salsa.debian.org/debian/datefudge")
     (synopsis "Pretend the system date is different")
     (description
@@ -512,6 +539,39 @@ modifies the @code{time}, @code{gettimeofday} and @code{clock_gettime} system
 calls.")
     (license gpl2)))
 
+(define-public tz
+  (package
+    (name "tz")
+    (version "0.6.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/oz/tz")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1nbl13xd95np89sbx8fn0jqrh1iy17hsy70kq31hmcvyns8dljhg"))))
+    (build-system go-build-system)
+    (arguments
+     `(#:go ,go-1.17
+       #:import-path "github.com/oz/tz"
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key import-path tests? #:allow-other-keys)
+             (when tests?
+               (invoke "go" "test" "-cover" import-path)))))))
+    (inputs
+     `(("github.com/charmbracelet/bubbletea" ,go-github-com-charmbracelet-bubbletea)
+       ("github.com/muesli/termenv" ,go-github-com-muesli-termenv)))
+    (home-page "https://github.com/oz/tz")
+    (synopsis "TUI time zone helper")
+    (description
+"@command{tz} helps you schedule things across time zones.  It is an interactive
+TUI program that displays time across a few time zones of your choosing.")
+    (license gpl3+)))
+
 (define-public countdown
   (package
     (name "countdown")
diff --git a/gnu/packages/tls.scm b/gnu/packages/tls.scm
index 5154f2b91f..b0950ec2e5 100644
--- a/gnu/packages/tls.scm
+++ b/gnu/packages/tls.scm
@@ -5,7 +5,7 @@
 ;;; Copyright © 2013, 2015 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2015 David Thompson <davet@gnu.org>
 ;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021 Leo Famulari <leo@famulari.name>
-;;; Copyright © 2016, 2017, 2019 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2019, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2017, 2018 Nikita <nikita@n0.is>
 ;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
@@ -15,9 +15,12 @@
 ;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Solene Rapenne <solene@perso.pw>
 ;;; Copyright © 2021 Brice Waegeneire <brice@waegenei.re>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;; Copyright © 2021 Matthew James Kraai <kraai@ftbfs.org>
+;;; Copyright © 2021 John Kehayias <john.kehayias@protonmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -40,6 +43,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 (guix build-system go)
   #:use-module (guix build-system perl)
@@ -54,6 +58,7 @@
   #:use-module (gnu packages curl)
   #:use-module (gnu packages dns)
   #:use-module (gnu packages gawk)
+  #:use-module (gnu packages gettext)
   #:use-module (gnu packages guile)
   #:use-module (gnu packages hurd)
   #:use-module (gnu packages libbsd)
@@ -62,6 +67,7 @@
   #:use-module (gnu packages linux)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages nettle)
+  #:use-module (gnu packages networking)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
@@ -77,7 +83,7 @@
 (define-public libtasn1
   (package
     (name "libtasn1")
-    (version "4.16.0")
+    (version "4.17.0")
     (source
      (origin
       (method url-fetch)
@@ -85,11 +91,11 @@
                           version ".tar.gz"))
       (sha256
        (base32
-        "179jskl7dmfp1rd2khkzmlibzgki4wi6hvmmwfv7q49r728b03qf"))))
+        "19a53i1ajs4dd8nnlr2i6gbzvla84ay71g3y1phvh8krx8f5brzc"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags '("--disable-static")))
-    (native-inputs `(("perl" ,perl)))
+    (native-inputs (list perl))
     (home-page "https://www.gnu.org/software/libtasn1/")
     (synopsis "ASN.1 library")
     (description
@@ -112,7 +118,7 @@ specifications.")
         "1fc64g45ykmv73kdndr4zdm4wxhimhrir4rxnygxvwkych5l81w0"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (home-page "https://lionet.info/asn1c")
     (synopsis "ASN.1 to C compiler")
     (description "The ASN.1 to C compiler takes ASN.1 module
@@ -139,13 +145,33 @@ in intelligent transportation networks.")
        (base32 "1dn6br4v033d3gp2max9lsr3y4q0nj6iyr1yq3kzi8ym7lal13wa"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     `(,@(if (hurd-target?)
+             `(("autoconf" ,autoconf)
+               ("automake" ,automake)
+               ("gettext" ,gettext-minimal) ;for autopoint
+               ("libtool" ,libtool))
+             '())
+       ("pkg-config" ,pkg-config)))
     (inputs
      `(("libffi" ,libffi)
+       ,@(if (hurd-target?)
+             `(("libbsd" ,libbsd)
+               ("hurd-patch" ,(search-patch "p11-kit-hurd.patch")))
+             '())
        ("libtasn1" ,libtasn1)))
     (arguments
      `(#:configure-flags '("--without-trust-paths")
        #:phases (modify-phases %standard-phases
+                  ,@(if (hurd-target?)
+                        '((add-after 'unpack 'apply-hurd-patch
+                            (lambda* (#:key inputs #:allow-other-keys)
+                              (let ((patch (assoc-ref inputs "hurd-patch")))
+                                (invoke "patch" "-p1" "--batch" "-i"
+                                        patch))))
+                          (replace 'bootstrap
+                            (lambda _
+                              (invoke "autoreconf" "-fiv"))))
+                        '())
                   (add-before 'check 'prepare-tests
                     (lambda _
                       ;; "test-runtime" expects XDG_RUNTIME_DIR to be set up
@@ -155,7 +181,7 @@ in intelligent transportation networks.")
                       (substitute* "Makefile"
                         (("test-runtime\\$\\(EXEEXT\\)") ""))
                       #t)))))
-    (home-page "https://p11-glue.freedesktop.org/p11-kit.html")
+    (home-page "https://p11-glue.github.io/p11-glue/p11-kit.html")
     (synopsis "PKCS#11 library")
     (description
      "p11-kit provides a way to load and enumerate PKCS#11 modules.  It
@@ -165,11 +191,28 @@ coordinating the use of PKCS#11 by different components or libraries
 living in the same process.")
     (license license:bsd-3)))
 
+(define-public p11-kit-next
+  (package
+    (inherit p11-kit)
+    (version "0.24.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/p11-glue/p11-kit/releases/"
+                           "download/" version "/p11-kit-" version ".tar.xz"))
+       (sha256
+        (base32 "11f6saclxsclc1f3lbavzw8kikws4cr3mfd1avly8dgnhh2i9rl1"))))
+    (arguments
+     ;; Use the default certificates so that users such as flatpak find them.
+     ;; See <https://issues.guix.gnu.org/49957>.
+     (substitute-keyword-arguments (package-arguments p11-kit)
+       ((#:configure-flags flags ''())
+        ''("--with-trust-paths=/etc/ssl/certs/ca-certificates.crt"))))))
+
 (define-public gnutls
   (package
     (name "gnutls")
-    (version "3.6.15")
-    (replacement gnutls-3.6.16)
+    (version "3.7.2")
     (source (origin
               (method url-fetch)
               ;; Note: Releases are no longer on ftp.gnu.org since the
@@ -179,19 +222,20 @@ living in the same process.")
                                   "/gnutls-" version ".tar.xz"))
               (patches (search-patches "gnutls-skip-trust-store-test.patch"
                                        "gnutls-cross.patch"
-                                       "gnutls-CVE-2021-20231.patch"
-                                       "gnutls-CVE-2021-20232.patch"))
+                                       "gnutls-guile-eintr-eagain.patch"))
               (sha256
                (base32
-                "0n0m93ymzd0q9hbknxc2ycanz49sqlkyyf73g9fk7n787llc7a0f"))))
+                "0li7mwjnm64mbxhacz0rpf6i9qd83f53fvbrx96alpqqk9d6qvk4"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? ,(not (or (%current-target-system)
                           (hurd-target?)))
-       ;; Ensure we don't keep a reference to net-tools.
-       #:disallowed-references ,(if (hurd-target?) '() (list net-tools))
+       ;; Ensure we don't keep a reference to the tools used for testing.
+       #:disallowed-references ,(if (hurd-target?)
+                                    '()
+                                    (list net-tools iproute socat))
        #:configure-flags
-       (list
+       (cons*
              ;; GnuTLS doesn't consult any environment variables to specify
              ;; the location of the system-wide trust store.  Instead it has a
              ;; configure-time option.  Unless specified, its configure script
@@ -212,13 +256,25 @@ living in the same process.")
              (string-append "--with-guile-extension-dir="
                             "$(libdir)/guile/$(GUILE_EFFECTIVE_VERSION)/extensions")
 
-             ;; FIXME: Temporarily disable p11-kit support since it is not
-             ;; working on mips64el.
-             "--without-p11-kit")
+             (let ((system ,(or (%current-target-system)
+                                (%current-system))))
+               (if (string-prefix? "mips64el" system)
+                   (list
+                    ;; FIXME: Temporarily disable p11-kit support since it is
+                    ;; not working on mips64el.
+                    "--without-p11-kit")
+                   '())))
 
        #:phases (modify-phases %standard-phases
-                  (add-after
-                   'install 'move-doc
+                  ;; fastopen.sh fails to connect to the server in the builder
+                  ;; environment (see:
+                  ;; https://gitlab.com/gnutls/gnutls/-/issues/1095).
+                  (add-after 'unpack 'disable-failing-tests
+                    (lambda _
+                      (substitute* "tests/fastopen.sh"
+                        (("^unset RETCODE")
+                         "exit 77\n")))) ;skip
+                  (add-after 'install 'move-doc
                    (lambda* (#:key outputs #:allow-other-keys)
                      ;; Copy the 4.1 MiB of section 3 man pages to "doc".
                      (let* ((out    (assoc-ref outputs "out"))
@@ -227,8 +283,7 @@ living in the same process.")
                             (oldman (string-append out "/share/man/man3")))
                        (mkdir-p mandir)
                        (copy-recursively oldman mandir)
-                       (delete-file-recursively oldman)
-                       #t))))))
+                       (delete-file-recursively oldman)))))))
     (outputs '("out"                              ;4.4 MiB
                "debug"
                "doc"))                            ;4.1 MiB of man pages
@@ -238,20 +293,29 @@ living in the same process.")
              '())
        ,@(if (hurd-target?)
              '()
-             `(("net-tools" ,net-tools)))
+             `(("net-tools" ,net-tools)
+               ("iproute" ,iproute)               ;for 'ss'
+               ("socat" ,socat)))                 ;several tests rely on it
        ("pkg-config" ,pkg-config)
+       ("texinfo" ,texinfo)
        ("which" ,which)
-       ,@(if (hurd-target?) '()
+       ,@(if (hurd-target?)
+             '()
              `(("datefudge" ,datefudge)))         ;tests rely on 'datefudge'
        ("util-linux" ,util-linux)))               ;one test needs 'setsid'
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (propagated-inputs
      ;; These are all in the 'Requires.private' field of gnutls.pc.
      `(("libtasn1" ,libtasn1)
        ("libidn2" ,libidn2)
        ("nettle" ,nettle)
-       ("zlib" ,zlib)))
+       ("zlib" ,zlib)
+       ,@(let ((system (or (%current-target-system)
+                           (%current-system))))
+           (if (string-prefix? "mips64el" system)
+               '()
+               `(("p11-kit" ,p11-kit))))))
     (home-page "https://www.gnu.org/software/gnutls/")
     (synopsis "Transport layer security library")
     (description
@@ -263,68 +327,6 @@ required structures.")
     (properties '((ftp-server . "ftp.gnutls.org")
                   (ftp-directory . "/gcrypt/gnutls")))))
 
-;; Replacement package to fix CVE-2021-20305.
-(define gnutls-3.6.16
-  (package
-    (inherit gnutls)
-    (version "3.6.16")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "mirror://gnupg/gnutls/v"
-                                  (version-major+minor version)
-                                  "/gnutls-" version ".tar.xz"))
-              (patches (search-patches "gnutls-skip-trust-store-test.patch"
-                                       "gnutls-cross.patch"))
-              (sha256
-               (base32
-                "1czk511pslz367shf32f2jvvkp7y1323bcv88c2qng98mj0v6y8v"))))
-    (arguments
-     (if (%current-target-system)
-         (substitute-keyword-arguments (package-arguments gnutls)
-           ((#:phases phases '%standard-phases)
-            `(modify-phases ,phases
-               (add-before 'configure 'build-eccdata-headers
-                 (lambda* (#:key configure-flags #:allow-other-keys)
-                   ;; Build the 'ecc/eccdata' program using the native
-                   ;; compiler, not the cross-compiler as happens by default,
-                   ;; and use it to build lib/nettle/ecc/ecc-*.h.  In GnuTLS
-                   ;; 3.6.15, this was not necessary because the tarball
-                   ;; contained pre-generated lib/nettle/ecc/ecc-*.h files as
-                   ;; well as 'ecc/eccdata.stamp'.
-                   (let ((jobs  (number->string (parallel-job-count)))
-                         (patch (assoc-ref %standard-phases
-                                           'patch-generated-file-shebangs)))
-                     (mkdir "+native-build")
-                     (with-directory-excursion "+native-build"
-                       ;; Build natively, with the native compiler, GMP, etc.
-                       (invoke "../configure"
-                               (string-append "SHELL=" (which "sh"))
-                               (string-append "CONFIG_SHELL=" (which "sh"))
-                               "NETTLE_CFLAGS=   " "NETTLE_LIBS=   "
-                               "HOGWEED_CFLAGS=   " "HOGWEED_LIBS=   "
-                               "LIBTASN1_CFLAGS=   " "LIBTASN1_LIBS=   "
-                               "ac_cv_func_nettle_rsa_sec_decrypt=yes"
-                               "--without-p11-kit" "--disable-guile")
-                       (patch)
-                       (invoke "make" "-C" "gl" "-j" jobs)
-                       (invoke "make" "-C" "lib/nettle" "V=1" "-j" jobs))
-
-                     ;; Copy the files we obtained during native build.
-                     (for-each (lambda (file)
-                                 (install-file file "lib/nettle/ecc"))
-                               (find-files
-                                "+native-build/lib/nettle/ecc"
-                                "^(eccdata\\.stamp|ecc-.*\\.h)$"))))))))
-         (package-arguments gnutls)))
-    (native-inputs
-     (if (%current-target-system)
-         `(("libtasn1" ,libtasn1)                 ;for 'ecc/eccdata'
-           ("libidn2" ,libidn2)
-           ("nettle" ,nettle)
-           ("zlib" ,zlib)
-           ,@(package-native-inputs gnutls))
-         (package-native-inputs gnutls)))))
-
 (define-public gnutls/guile-2.0
   ;; GnuTLS for Guile 2.0.
   (package/inherit gnutls
@@ -349,151 +351,37 @@ required structures.")
               ,@(alist-delete "guile"
                               (package-inputs gnutls))))))
 
-(define-public guile3.0-gnutls
-  (deprecated-package "guile3.0-gnutls" gnutls))
+(define (target->openssl-target target)
+  "Return the value to set CONFIGURE_TARGET_ARCH to when cross-compiling
+OpenSSL for TARGET."
+  ;; Keep this code outside the build code,
+  ;; such that new targets can be added
+  ;; without causing rebuilds for other targets.
+  (cond ((string-prefix? "i586" target)
+         "hurd-x86")
+        ((string-prefix? "i686" target)
+         "linux-x86")
+        ((string-prefix? "x86_64" target)
+         "linux-x86_64")
+        ((string-prefix? "mips64el" target)
+         "linux-mips64")
+        ((string-prefix? "arm" target)
+         "linux-armv4")
+        ((string-prefix? "aarch64" target)
+         "linux-aarch64")
+        ((string-prefix? "powerpc64le" target)
+         "linux-ppc64le")
+        ((string-prefix? "powerpc64" target)
+         "linux-ppc64")
+        ((string-prefix? "powerpc" target)
+         "linux-ppc")
+        ((string-prefix? "riscv64" target)
+         ;; linux64-riscv64 isn't recognized until 3.0.0.
+         "linux-generic64")))
 
 (define-public openssl
   (package
-   (name "openssl")
-   (version "1.1.1j")
-   (replacement openssl-1.1.1l)
-   (source (origin
-             (method url-fetch)
-             (uri (list (string-append "https://www.openssl.org/source/openssl-"
-                                       version ".tar.gz")
-                        (string-append "ftp://ftp.openssl.org/source/"
-                                       "openssl-" version ".tar.gz")
-                        (string-append "ftp://ftp.openssl.org/source/old/"
-                                       (string-trim-right version char-set:letter)
-                                       "/openssl-" version ".tar.gz")))
-             (patches (search-patches "openssl-1.1-c-rehash-in.patch"))
-             (sha256
-              (base32
-               "1gw17520vh13izy1xf5q0a2fqgcayymjjj5bk0dlkxndfnszrwma"))))
-   (build-system gnu-build-system)
-   (outputs '("out"
-              "doc"         ;6.8 MiB of man3 pages and full HTML documentation
-              "static"))    ;6.4 MiB of .a files
-   (native-inputs `(("perl" ,perl)))
-   (arguments
-    `(#:parallel-tests? #f
-      #:test-target "test"
-
-      ;; Changes to OpenSSL sometimes cause Perl to "sneak in" to the closure,
-      ;; so we explicitly disallow it here.
-      #:disallowed-references ,(list (canonical-package perl))
-      #:phases
-      (modify-phases %standard-phases
-       ,@(if (%current-target-system)
-           '((add-before
-               'configure 'set-cross-compile
-               (lambda* (#:key target outputs #:allow-other-keys)
-                 (setenv "CROSS_COMPILE" (string-append target "-"))
-                 (setenv "CONFIGURE_TARGET_ARCH"
-                         (cond
-                           ((string-prefix? "i586" target)
-                            "hurd-x86")
-                           ((string-prefix? "i686" target)
-                            "linux-x86")
-                           ((string-prefix? "x86_64" target)
-                            "linux-x86_64")
-                           ((string-prefix? "mips64el" target)
-                            "linux-mips64")
-                           ((string-prefix? "arm" target)
-                            "linux-armv4")
-                           ((string-prefix? "aarch64" target)
-                            "linux-aarch64")
-                           ((string-prefix? "powerpc64le" target)
-                            "linux-ppc64le")
-                           ((string-prefix? "powerpc64" target)
-                            "linux-ppc64")
-                           ((string-prefix? "powerpc" target)
-                            "linux-ppc")))
-                 #t)))
-           '())
-        (replace 'configure
-          (lambda* (#:key outputs #:allow-other-keys)
-            (let* ((out (assoc-ref outputs "out"))
-                   (lib (string-append out "/lib")))
-              ;; It's not a shebang so patch-source-shebangs misses it.
-              (substitute* "config"
-                (("/usr/bin/env")
-                 (string-append (assoc-ref %build-inputs "coreutils")
-                                "/bin/env")))
-              (invoke ,@(if (%current-target-system)
-                          '("./Configure")
-                          '("./config"))
-                      "shared"       ;build shared libraries
-                      "--libdir=lib"
-
-                      ;; The default for this catch-all directory is
-                      ;; PREFIX/ssl.  Change that to something more
-                      ;; conventional.
-                      (string-append "--openssldir=" out
-                                     "/share/openssl-"
-                                     ,(package-version this-package))
-
-                      (string-append "--prefix=" out)
-                      (string-append "-Wl,-rpath," lib)
-                      ,@(if (%current-target-system)
-                          '((getenv "CONFIGURE_TARGET_ARCH"))
-                          '())))))
-        (add-after 'install 'move-static-libraries
-          (lambda* (#:key outputs #:allow-other-keys)
-            ;; Move static libraries to the "static" output.
-            (let* ((out    (assoc-ref outputs "out"))
-                   (lib    (string-append out "/lib"))
-                   (static (assoc-ref outputs "static"))
-                   (slib   (string-append static "/lib")))
-              (for-each (lambda (file)
-                          (install-file file slib)
-                          (delete-file file))
-                        (find-files lib "\\.a$"))
-              #t)))
-        (add-after 'install 'move-extra-documentation
-          (lambda* (#:key outputs #:allow-other-keys)
-               ;; Move man3 pages and full HTML documentation to "doc".
-               (let* ((out    (assoc-ref outputs "out"))
-                      (man3   (string-append out "/share/man/man3"))
-                      (html (string-append out "/share/doc/openssl"))
-                      (doc    (assoc-ref outputs "doc"))
-                      (man-target (string-append doc "/share/man/man3"))
-                      (html-target (string-append doc "/share/doc/openssl")))
-                 (copy-recursively man3 man-target)
-                 (delete-file-recursively man3)
-                 (copy-recursively html html-target)
-                 (delete-file-recursively html)
-                 #t)))
-        (add-after
-         'install 'remove-miscellany
-         (lambda* (#:key outputs #:allow-other-keys)
-           ;; The 'misc' directory contains random undocumented shell and Perl
-           ;; scripts.  Remove them to avoid retaining a reference on Perl.
-           (let ((out (assoc-ref outputs "out")))
-             (delete-file-recursively (string-append out "/share/openssl-"
-                                                     ,(package-version this-package)
-                                                     "/misc"))
-             #t))))))
-   (native-search-paths
-    (list (search-path-specification
-           (variable "SSL_CERT_DIR")
-           (separator #f)                        ;single entry
-           (files '("etc/ssl/certs")))
-          (search-path-specification
-           (variable "SSL_CERT_FILE")
-           (file-type 'regular)
-           (separator #f)                        ;single entry
-           (files '("etc/ssl/certs/ca-certificates.crt")))))
-   (synopsis "SSL/TLS implementation")
-   (description
-    "OpenSSL is an implementation of SSL/TLS.")
-   (license license:openssl)
-   (home-page "https://www.openssl.org/")))
-
-;; Replacement package to fix multiple CVEs.
-(define openssl-1.1.1l
-  (package
-    (inherit openssl)
+    (name "openssl")
     (version "1.1.1l")
     (source (origin
               (method url-fetch)
@@ -507,7 +395,118 @@ required structures.")
               (patches (search-patches "openssl-1.1-c-rehash-in.patch"))
               (sha256
                (base32
-                "1lbblxps2fhmz7bqh058iywh5wxfignbfx1s1kz2fj63b5g3wyhb"))))))
+                "1lbblxps2fhmz7bqh058iywh5wxfignbfx1s1kz2fj63b5g3wyhb"))))
+    (build-system gnu-build-system)
+    (outputs '("out"
+               "doc"        ;6.8 MiB of man3 pages and full HTML documentation
+               "static"))   ;6.4 MiB of .a files
+    (native-inputs (list perl))
+    (arguments
+     `(#:parallel-tests? #f
+       #:test-target "test"
+
+       ;; Changes to OpenSSL sometimes cause Perl to "sneak in" to the closure,
+       ;; so we explicitly disallow it here.
+       #:disallowed-references ,(list (canonical-package perl))
+       #:phases
+       ,#~
+       (modify-phases %standard-phases
+         #$@(if (%current-target-system)
+                #~((add-before
+                       'configure 'set-cross-compile
+                     (lambda* (#:key target #:allow-other-keys)
+                       (setenv "CROSS_COMPILE" (string-append target "-"))
+                       (setenv "CONFIGURE_TARGET_ARCH"
+                               #$(target->openssl-target
+                                  (%current-target-system))))))
+                #~())
+         ;; This test seems to be dependant on kernel features.
+         ;; https://github.com/openssl/openssl/issues/12242
+         #$@(if (or (target-arm?)
+                    (target-riscv64?))
+                #~((replace 'check
+                     (lambda* (#:key tests? test-target #:allow-other-keys)
+                       (when tests?
+                         (invoke "make" "TESTS=-test_afalg" test-target)))))
+                #~())
+         (replace 'configure
+           (lambda* (#:key configure-flags #:allow-other-keys)
+             (let* ((out #$output)
+                    (lib (string-append out "/lib")))
+               ;; It's not a shebang so patch-source-shebangs misses it.
+               (substitute* "config"
+                 (("/usr/bin/env")
+                  (string-append (assoc-ref %build-inputs "coreutils")
+                                 "/bin/env")))
+               (apply
+                invoke #$@(if (%current-target-system)
+                              #~("./Configure")
+                              #~("./config"))
+                "shared"                ;build shared libraries
+                "--libdir=lib"
+
+                ;; The default for this catch-all directory is
+                ;; PREFIX/ssl.  Change that to something more
+                ;; conventional.
+                (string-append "--openssldir=" out
+                               "/share/openssl-"
+                               #$(package-version this-package))
+
+                (string-append "--prefix=" out)
+                (string-append "-Wl,-rpath," lib)
+                #$@(if (%current-target-system)
+                       #~((getenv "CONFIGURE_TARGET_ARCH"))
+                       #~())
+                configure-flags)
+               ;; Output the configure variables.
+               (invoke "perl" "configdata.pm" "--dump"))))
+         (add-after 'install 'move-static-libraries
+           (lambda _
+             ;; Move static libraries to the "static" output.
+             (let* ((out    #$output)
+                    (lib    (string-append out "/lib"))
+                    (static #$output:static)
+                    (slib   (string-append static "/lib")))
+               (for-each (lambda (file)
+                           (install-file file slib)
+                           (delete-file file))
+                         (find-files lib "\\.a$")))))
+         (add-after 'install 'move-extra-documentation
+           (lambda _
+             ;; Move man pages and full HTML documentation to "doc".
+             (let* ((out    #$output)
+                    (man    (string-append out "/share/man"))
+                    (html   (string-append out "/share/doc/openssl"))
+                    (doc    #$output:doc)
+                    (man-target (string-append doc "/share/man"))
+                    (html-target (string-append doc "/share/doc/openssl")))
+               (mkdir-p (dirname man-target))
+               (mkdir-p (dirname html-target))
+               (rename-file man man-target)
+               (rename-file html html-target))))
+         (add-after
+             'install 'remove-miscellany
+           (lambda _
+             ;; The 'misc' directory contains random undocumented shell and Perl
+             ;; scripts.  Remove them to avoid retaining a reference on Perl.
+             (delete-file-recursively (string-append #$output "/share/openssl-"
+                                                     #$(package-version this-package)
+                                                     "/misc")))))))
+    (native-search-paths
+     (list (search-path-specification
+            (variable "SSL_CERT_DIR")
+            (separator #f)              ;single entry
+            (files '("etc/ssl/certs")))
+           (search-path-specification
+            (variable "SSL_CERT_FILE")
+            (file-type 'regular)
+            (separator #f)              ;single entry
+            (files '("etc/ssl/certs/ca-certificates.crt")))))
+    (synopsis "SSL/TLS implementation")
+    (description
+     "OpenSSL is an implementation of SSL/TLS.")
+    (license license:openssl)
+    (home-page "https://www.openssl.org/")))
 
 ;; We will not add any new uses of this package. If you add new code that uses
 ;; this package, your change will be reverted!
@@ -551,7 +550,7 @@ required structures.")
          ;; Parallel build is not supported in 1.0.x.
          ((#:parallel-build? _ #f) #f)
          ((#:phases phases)
-          `(modify-phases ,phases
+          #~(modify-phases #$phases
              (add-before 'patch-source-shebangs 'patch-tests
                (lambda* (#:key inputs native-inputs #:allow-other-keys)
                  (let ((bash (assoc-ref (or native-inputs inputs) "bash")))
@@ -574,9 +573,9 @@ required structures.")
                ;; Override this phase because OpenSSL 1.0 does not understand -rpath.
                (lambda* (#:key outputs #:allow-other-keys)
                  (let ((out (assoc-ref outputs "out")))
-                   (invoke ,@(if (%current-target-system)
-                                 '("./Configure")
-                                 '("./config"))
+                   (invoke #$@(if (%current-target-system)
+                                  #~("./Configure")
+                                  #~("./config"))
                            "shared"                 ;build shared libraries
                            "--libdir=lib"
 
@@ -584,12 +583,12 @@ required structures.")
                            ;; PREFIX/ssl.  Change that to something more
                            ;; conventional.
                            (string-append "--openssldir=" out
-                                          "/share/openssl-" ,version)
+                                          "/share/openssl-" #$version)
 
                            (string-append "--prefix=" out)
-                           ,@(if (%current-target-system)
-                                 '((getenv "CONFIGURE_TARGET_ARCH"))
-                                 '())))))
+                           #$@(if (%current-target-system)
+                                  '((getenv "CONFIGURE_TARGET_ARCH"))
+                                  '())))))
              (delete 'move-extra-documentation)
              (add-after 'install 'move-man3-pages
                (lambda* (#:key outputs #:allow-other-keys)
@@ -614,9 +613,60 @@ required structures.")
                  ;; scripts.  Remove them to avoid retaining a reference on Perl.
                  (let ((out (assoc-ref outputs "out")))
                    (delete-file-recursively (string-append out "/share/openssl-"
-                                                           ,version "/misc"))
+                                                           #$version "/misc"))
                    #t))))))))))
 
+(define-public bearssl
+  (package
+    (name "bearssl")
+    (version "0.6")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://www.bearssl.org/"
+                                  "bearssl-" version ".tar.gz"))
+              (sha256
+               (base32
+                "057zhgy9w4y8z2996r0pq5k2k39lpvmmvz4df8db8qa9f6hvn1b7"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list
+      #:make-flags
+      #~(list #$(string-append "CC=" (cc-for-target))
+              #$(string-append "LD=" (cc-for-target))
+              #$(string-append "LDDLL=" (cc-for-target)))
+      #:phases
+      #~(modify-phases %standard-phases
+          (delete 'configure)           ;no configure script
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (with-directory-excursion "build"
+                  (invoke "./testcrypto" "all")
+                  (invoke "./testx509")))))
+          (replace 'install             ;no install rule
+            (lambda _
+              (let* ((out #$output)
+                     (bin (string-append out "/bin"))
+                     (doc (string-append out "/share/doc/" #$name "-" #$version))
+                     (lib (string-append out "/lib"))
+                     (include (string-append out "/include")))
+                (install-file "build/brssl" bin)
+                (for-each (lambda (f) (install-file f include))
+                          (find-files "inc" "\\.h$"))
+                (install-file "LICENSE.txt" doc)
+                (install-file "build/libbearssl.so" lib)))))))
+    (home-page "https://bearssl.org/")
+    (synopsis "Small SSL/TLS library")
+    (description "BearSSL is an implementation of the SSL/TLS
+protocol (RFC 5246) written in C.  It aims at being correct and
+secure.  In particular, insecure protocol versions and choices of
+algorithms are not supported, by design; cryptographic algorithm
+implementations are constant-time by default.  It should also be
+small, both in RAM and code footprint.  For instance, a minimal server
+implementation may fit in about 20 kilobytes of compiled code and 25
+kilobytes of RAM.")
+    (license license:expat)))
+
 (define-public libressl
   (package
     (name "libressl")
@@ -660,13 +710,13 @@ netcat implementation that supports TLS.")
   (package
     (name "python-acme")
     ;; Remember to update the hash of certbot when updating python-acme.
-    (version "1.17.0")
+    (version "1.18.0")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "acme" version))
               (sha256
                (base32
-                "03ij1wp7jwvppv70qbjkgdg7w824yh6j4gfb68jj20wicx08xx1a"))))
+                "1bv2swaqmzpcx2nq1nbhrc6b825d5sxkdv0al972sjfcpcqn1q4s"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -683,21 +733,21 @@ netcat implementation that supports TLS.")
                (install-file "docs/_build/man/acme-python.1" man)
                #t))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ;; For documentation
-       ("python-sphinx" ,python-sphinx)
-       ("python-sphinxcontrib-programoutput" ,python-sphinxcontrib-programoutput)
-       ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
-       ("texinfo" ,texinfo)))
+     (list python-pytest
+           ;; For documentation
+           python-sphinx
+           python-sphinxcontrib-programoutput
+           python-sphinx-rtd-theme
+           texinfo))
     (propagated-inputs
-     `(("python-josepy" ,python-josepy)
-       ("python-requests" ,python-requests)
-       ("python-requests-toolbelt" ,python-requests-toolbelt)
-       ("python-pytz" ,python-pytz)
-       ("python-pyrfc3339" ,python-pyrfc3339)
-       ("python-pyasn1" ,python-pyasn1)
-       ("python-cryptography" ,python-cryptography)
-       ("python-pyopenssl" ,python-pyopenssl)))
+     (list python-josepy
+           python-requests
+           python-requests-toolbelt
+           python-pytz
+           python-pyrfc3339
+           python-pyasn1
+           python-cryptography
+           python-pyopenssl))
     (home-page "https://github.com/certbot/certbot")
     (synopsis "ACME protocol implementation in Python")
     (description "ACME protocol implementation in Python")
@@ -714,7 +764,7 @@ netcat implementation that supports TLS.")
               (uri (pypi-uri "certbot" version))
               (sha256
                (base32
-                "0wyipx6q78fmvngf1i6g50s01qpjqh07qlk1b5vyxwgl3080lhgg"))))
+                "0yr8sxfg5zspal04l9lpd9xis6gp8il20bhka54xr9bb4hc6xrgk"))))
     (build-system python-build-system)
     (arguments
      `(,@(substitute-keyword-arguments (package-arguments python-acme)
@@ -731,28 +781,28 @@ netcat implementation that supports TLS.")
                     (install-file "docs/_build/man/certbot.7" man7)
                     #t))))))))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ;; For documentation
-       ("python-sphinx" ,python-sphinx)
-       ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
-       ("python-sphinx-repoze-autointerface" ,python-sphinx-repoze-autointerface)
-       ("python-sphinxcontrib-programoutput" ,python-sphinxcontrib-programoutput)
-       ("texinfo" ,texinfo)))
+     (list python-mock
+           python-pytest
+           ;; For documentation
+           python-sphinx
+           python-sphinx-rtd-theme
+           python-sphinx-repoze-autointerface
+           python-sphinxcontrib-programoutput
+           texinfo))
     (propagated-inputs
-     `(("python-acme" ,python-acme)
-       ("python-cryptography" ,python-cryptography)
-       ("python-zope-interface" ,python-zope-interface)
-       ("python-pyrfc3339" ,python-pyrfc3339)
-       ("python-pyopenssl" ,python-pyopenssl)
-       ("python-configobj" ,python-configobj)
-       ("python-configargparse" ,python-configargparse)
-       ("python-distro" ,python-distro)
-       ("python-zope-component" ,python-zope-component)
-       ("python-parsedatetime" ,python-parsedatetime)
-       ("python-psutil" ,python-psutil)
-       ("python-requests" ,python-requests)
-       ("python-pytz" ,python-pytz)))
+     (list python-acme
+           python-cryptography
+           python-zope-interface
+           python-pyrfc3339
+           python-pyopenssl
+           python-configobj
+           python-configargparse
+           python-distro
+           python-zope-component
+           python-parsedatetime
+           python-psutil
+           python-requests
+           python-pytz))
     (synopsis "Let's Encrypt client by the Electronic Frontier Foundation")
     (description "Certbot automatically receives and installs X.509 certificates
 to enable Transport Layer Security (TLS) on servers.  It interoperates with the
@@ -778,7 +828,7 @@ certificates for free.")
                (base32
                 "1pfgh4h3szcpvqlcimc60pjbk9zwls99x5863sva0wc47i4dl010"))))
     (build-system perl-build-system)
-    (inputs `(("openssl" ,openssl)))
+    (inputs (list openssl))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -813,11 +863,9 @@ servers or clients for more complicated applications.")
           "0djl5i6kibl7862b6ih29q8dhg5zpwzq77q9j8hp6xngshx40ws1"))))
   (build-system perl-build-system)
   (native-inputs
-   `(("perl-crypt-openssl-guess" ,perl-crypt-openssl-guess)))
+   (list perl-crypt-openssl-guess))
   (inputs
-    `(("perl-crypt-openssl-bignum" ,perl-crypt-openssl-bignum)
-      ("perl-crypt-openssl-random" ,perl-crypt-openssl-random)
-      ("openssl" ,openssl)))
+    (list perl-crypt-openssl-bignum perl-crypt-openssl-random openssl))
   (arguments perl-crypt-arguments)
   (home-page
     "https://metacpan.org/release/Crypt-OpenSSL-RSA")
@@ -852,7 +900,7 @@ OpenSSL libraries).")
         (base32
           "1p22znbajq91lbk2k3yg12ig7hy5b4vy8igxwqkmbm4nhgxp4ki3"))))
   (build-system perl-build-system)
-  (inputs `(("openssl" ,openssl)))
+  (inputs (list openssl))
   (arguments perl-crypt-arguments)
   (home-page
     "https://metacpan.org/release/Crypt-OpenSSL-Bignum")
@@ -900,9 +948,9 @@ correct OpenSSL include path.  It is intended for use in your
         (base32 "1x6ffps8q7mnawmcfq740llzy7i10g3319vap0wiw4d33fm6z1zh"))))
   (build-system perl-build-system)
   (native-inputs
-   `(("perl-crypt-openssl-guess" ,perl-crypt-openssl-guess)))
+   (list perl-crypt-openssl-guess))
   (inputs
-   `(("openssl" ,openssl)))
+   (list openssl))
   (arguments perl-crypt-arguments)
   (home-page
     "https://metacpan.org/release/Crypt-OpenSSL-Random")
@@ -934,17 +982,15 @@ number generator")
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-paths
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((pem (string-append (assoc-ref inputs "libressl")
-                                       "/etc/ssl/cert.pem")))
+             (let ((pem (search-input-file inputs "/etc/ssl/cert.pem")))
                (substitute* "http.c"
                  (("/etc/ssl/cert.pem") pem))
                #t)))
          (delete 'configure)))) ; no './configure' script
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libbsd" ,libbsd)
-       ("libressl" ,libressl)))
+     (list libbsd libressl))
     (synopsis "Let's Encrypt client by the OpenBSD project")
     (description "acme-client is a Let's Encrypt client implemented in C.  It
 uses a modular design, and attempts to secure itself by dropping privileges and
@@ -993,8 +1039,7 @@ then ported to the GNU / Linux environment.")
              (for-each make-file-writable (find-files "."))
              #t)))))
     (native-inputs
-     `(("perl" ,perl)
-       ("python" ,python)))
+     (list perl python))
     (synopsis "Small TLS library")
     (description
      "@code{mbed TLS}, formerly known as PolarSSL, makes it trivially easy
@@ -1090,17 +1135,16 @@ coding footprint.")
                               "sed"))))))
            #t))))
     (inputs
-     `(("bash" ,bash)
-       ("coreutils" ,coreutils)
-       ("curl" ,curl)
-       ("diffutils" ,diffutils)
-       ("gawk" ,gawk)
-       ("grep" ,grep)
-       ("openssl" ,openssl)
-       ("sed" ,sed)))
+     (list bash
+           coreutils
+           curl
+           diffutils
+           gawk
+           grep
+           openssl
+           sed))
     (native-inputs
-     `(("gzip" ,gzip)
-       ("tar" ,tar)))
+     (list gzip tar))
     ;; The following definition is copied from the cURL package to prevent a
     ;; cycle between the curl and tls modules.
     (native-search-paths
@@ -1143,22 +1187,21 @@ derived from Mozilla's collection.")
 (define-public s2n
   (package
     (name "s2n")
-    (version "1.0.10")
+    ; Update only when updating aws-crt-cpp.
+    (version "1.1.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
-                    (url (string-append "https://github.com/awslabs/" name))
+                    (url "https://github.com/aws/s2n-tls")
                     (commit (string-append "v" version))))
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0ampvh2n235hhd9nabgjjvja7d5r5kj45q56ass1k8g52a6xg0jq"))))
+                "14dhdddlph36nshdkh0v33718hxjx5vxqxmkw7707393q0qrgipw"))))
     (build-system cmake-build-system)
     (arguments
-     '(#:tests? #f                      ; tests fail to build for static library
-       #:configure-flags
-       '("-DBUILD_TESTING=OFF"
-         "-DBUILD_SHARED_LIBS=ON")))
+     '(#:configure-flags
+       '("-DBUILD_SHARED_LIBS=ON")))
     (propagated-inputs
      `(("openssl" ,openssl)
        ("openssl:static" ,openssl "static")))
@@ -1172,13 +1215,13 @@ As it can be difficult to keep track of which encryption algorithms and
 protocols are best to use, s2n-tls features a simple API to use the latest
 default set of preferences.  Remaining on a specific version for backwards
 compatibility is also supported.")
-    (home-page "https://github.com/awslabs/s2n")
+    (home-page "https://github.com/aws/s2n-tls")
     (license license:asl2.0)))
 
 (define-public wolfssl
   (package
     (name "wolfssl")
-    (version "4.8.0")
+    (version "4.8.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1187,15 +1230,13 @@ compatibility is also supported.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1w9gs9cq2yhj5s3diz3x1l15pgrc1pbm00jccizvcjyibmwyyf2h"))))
+                "0w5pd40j6h4j2f0b7c2n1n979y9qk8aln3ss2gb0jfsid1hrmx5k"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags
        '("--enable-reproducible-build")))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (synopsis "SSL/TLS implementation")
     (description "The wolfSSL embedded SSL library (formerly CyaSSL) is an
 SSL/TLS library written in ANSI C and targeted for embedded, RTOS, and
@@ -1205,3 +1246,30 @@ and DTLS 1.2, is up to 20 times smaller than OpenSSL, and offers progressive
 ciphers such as ChaCha20, Curve25519, NTRU, and Blake2b.")
     (home-page "https://www.wolfssl.com/")
     (license license:gpl2+))) ; Audit
+
+(define-public aws-lc
+  (let ((commit "d0a5455417d80e68581e197d95720c3fb25e3926")
+        (revision "0"))
+    (package
+      (name "aws-lc")
+      (version (git-version "0.0.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url (string-append "https://github.com/awslabs/" name))
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1ysj3x1f2lcdvwzyb9x3waykz1j7r21viv5z5vgc0ja9xv7znm9g"))))
+      (build-system cmake-build-system)
+      (arguments
+       '(#:tests? #f ; re-enable but with go and perl dependencies
+         #:configure-flags
+         '("-DBUILD_SHARED_LIBS=ON")))
+      (synopsis "General purpose cryptographic library")
+      (description "AWS libcrypto (aws-lc) contains portable C implementations
+of algorithms needed for TLS and common applications, and includes optimized
+assembly versions for x86 and ARM.")
+      (home-page "https://github.com/awslabs/aws-lc")
+      (license license:asl2.0))))
diff --git a/gnu/packages/tmux.scm b/gnu/packages/tmux.scm
index 682fa9737a..76f80a4da6 100644
--- a/gnu/packages/tmux.scm
+++ b/gnu/packages/tmux.scm
@@ -55,8 +55,7 @@
                "0pyhmipg6vxvxjk7mr410007qk98rh5q0mljvkdaisibz2j565am"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libevent" ,libevent)
-       ("ncurses" ,ncurses)))
+     (list libevent ncurses))
     (home-page "https://github.com/tmux/tmux/wiki")
     (synopsis "Terminal multiplexer")
     (description
@@ -162,19 +161,14 @@ windows.")
         (base32 "068vy92f2668vrjvd3laqvxd48cmna66f2msdmwk2hm9qxklgf51"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("procps" ,procps)))             ;tests need top
+     (list procps))             ;tests need top
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("tmux" ,tmux)))
+     (list python-pytest tmux))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             ;; Extend PYTHONPATH so the built package will be found.
-             (setenv "PYTHONPATH"
-                     (string-append (getcwd) "/build/lib:"
-                                    (getenv "PYTHONPATH")))
              ;; Fix <https://github.com/tmux-python/libtmux/issues/265>.
              (setenv "LANG" "en_US.utf8")
              ;; Skip tests that I suspect fail because of a change
@@ -216,11 +210,9 @@ with live tmux sessions.")
                       (invoke "tmux" "new-session" "-d")
                       (invoke "make" "test"))))))
     (propagated-inputs
-     `(("python-libtmux" ,python-libtmux)))
+     (list python-libtmux))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-sphinx" ,python-sphinx)
-       ("tmux" ,tmux)))
+     (list python-coverage python-sphinx tmux))
     (home-page "https://github.com/edouardklein/daemux")
     (synopsis "Start, stop, restart and check daemons via tmux")
     (description
@@ -244,7 +236,7 @@ them, etc., by attaching to the corresponding pane in tmux.")
                 "09fmnn1q76r1l4cv7clmfr3j9cjmd053kq238d0qj2i486948ivv"))))
     (build-system trivial-build-system)
     (inputs
-     `(("bash" ,bash)))
+     (list bash))
     (arguments
      `(#:modules ((guix build utils))
        #:builder
diff --git a/gnu/packages/tor.scm b/gnu/packages/tor.scm
index 972160fb8e..c1d5c1479b 100644
--- a/gnu/packages/tor.scm
+++ b/gnu/packages/tor.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016, 2017, 2018, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2017 Nikita <nikita@n0.is>
@@ -57,14 +57,15 @@
 (define-public tor
   (package
     (name "tor")
-    (version "0.4.6.7")
+    (version "0.4.6.9")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://dist.torproject.org/tor-"
                                  version ".tar.gz"))
              (sha256
               (base32
-               "16hga7195va8v0x062dc05nbz4sm3dscifcqpl8235dj47hmqrpz"))))
+               "1ad99k4wysxrnlaprv7brxr2nc0h5zdnrh0rma10pqlck2037sf7"))
+             (patches (search-patches "tor-sandbox-i686.patch"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
@@ -75,18 +76,28 @@
          (add-before 'check 'skip-practracker
            ;; This is a style linter.  It doesn't get to throw fatal errors.
            (lambda _
-             (setenv "TOR_DISABLE_PRACTRACKER" "set")
-             #t)))))
+             (setenv "TOR_DISABLE_PRACTRACKER" "set")))
+         ,@(if (or (target-aarch64?)
+                   (target-ppc32?))
+             ;; Work around upstream issue relating to sandboxing and glibc-2.33.
+             ;; This is similar to the issue the tor-sandbox-i686 patch fixes
+             ;; but for other architectures.
+             ;; https://gitlab.torproject.org/tpo/core/tor/-/issues/40381
+             ;; https://gitlab.torproject.org/tpo/core/tor/-/merge_requests/446
+             `((add-before 'check 'adjust-test-suite
+                 (lambda _
+                   (substitute* "src/test/test_include.sh"
+                     ((".*Sandbox 1.*") "")))))
+             '()))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python" ,python)))             ; for tests
+     (list pkg-config python))             ; for tests
     (inputs
-     `(("libevent" ,libevent)
-       ("libseccomp" ,libseccomp)
-       ("openssl" ,openssl)
-       ("xz" ,xz)
-       ("zlib" ,zlib)
-       ("zstd" ,zstd "lib")))
+     (list libevent
+           libseccomp
+           openssl
+           xz
+           zlib
+           `(,zstd "lib")))
     (home-page "https://www.torproject.org/")
     (synopsis "Anonymous network router to improve privacy on the Internet")
     (description
@@ -143,7 +154,7 @@ This package only provides a client to the Tor Network.")))
                 "08inrkap29gikb6sdmb58z43hw4abwrfw7ny40c4xzdkss0vkwdr"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libcap" ,libcap)))
+     (list libcap))
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (add-after 'build 'absolutize
@@ -165,7 +176,7 @@ rejects UDP traffic from the application you're using.")
 (define-public privoxy
   (package
     (name "privoxy")
-    (version "3.0.32")
+    (version "3.0.33")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://sourceforge/ijbswa/Sources/"
@@ -173,7 +184,7 @@ rejects UDP traffic from the application you're using.")
                                  version "-stable-src.tar.gz"))
              (sha256
               (base32
-               "1mzfxwnvnf1jkvfcrsivm6mjwdzjrc3h89qziz0mwi32ih0f87f6"))))
+               "1bhzi2ddv3g1z9h7lhxy7p0wibqg4m5nh46ikldmcqdc1pkh9c84"))))
     (build-system gnu-build-system)
     (arguments
      '(;; The default 'sysconfdir' is $out/etc; change that to
@@ -202,17 +213,11 @@ rejects UDP traffic from the application you're using.")
                ;; non-root users using it as is.
                (substitute* "config"
                  (("^logdir") "#logdir")
-                 (("^logfile") "#logfile")))
-             #t)))))
+                 (("^logfile") "#logfile"))))))))
     (inputs
-     `(("brotli" ,brotli)
-       ("openssl" ,openssl)
-       ("pcre" ,pcre)
-       ("w3m" ,w3m)
-       ("zlib" ,zlib)))
+     (list brotli openssl pcre w3m zlib))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (home-page "https://www.privoxy.org")
     (synopsis "Web proxy with advanced filtering capabilities for enhancing privacy")
     (description
@@ -227,7 +232,7 @@ networks.")
 (define-public onionshare-cli
   (package
     (name "onionshare-cli")
-    (version "2.3.2")
+    (version "2.4")
     (source
       (origin
         (method git-fetch)
@@ -236,26 +241,27 @@ networks.")
               (commit (string-append "v" version))))
         (file-name (git-file-name name version))
         (sha256
-         (base32 "1qk0zvbaws9md1lmi0al1jc8v86l65nf7n3w1s36iwsfzazc6clv"))))
+         (base32 "157ryxm4p1q7b3nj32v9fziw1li6s6s203b7ll80js14cbp6dj9d"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (inputs
      ;; TODO: obfs4proxy
-     `(("python-click" ,python-click)
-       ("python-colorama" ,python-colorama)
-       ("python-eventlet" ,python-eventlet)
-       ("python-flask" ,python-flask)
-       ("python-flask-httpauth" ,python-flask-httpauth)
-       ("python-flask-socketio" ,python-flask-socketio)
-       ("python-psutil" ,python-psutil)
-       ("python-pycryptodome" ,python-pycryptodome)
-       ("python-pysocks" ,python-pysocks)
-       ("python-requests" ,python-requests)
-       ("python-stem" ,python-stem)
-       ("python-unidecode" ,python-unidecode)
-       ("python-urllib3" ,python-urllib3)
-       ("tor" ,tor)))
+     (list python-click
+           python-colorama
+           python-eventlet
+           python-flask
+           python-flask-httpauth
+           python-flask-socketio
+           python-pynacl
+           python-psutil
+           python-pycryptodome
+           python-pysocks
+           python-requests
+           python-stem
+           python-unidecode
+           python-urllib3
+           tor))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -265,18 +271,21 @@ networks.")
                                 "desktop/src/onionshare/gui_common.py")
                (("shutil\\.which\\(\\\"tor\\\"\\)")
                 (string-append "\"" (which "tor") "\"")))
-             #t))
+             (substitute* "cli/tests/test_cli_common.py"
+               (("/usr/share/tor")
+                (string-append (assoc-ref inputs "tor") "/share/tor")))))
          (add-before 'build 'change-directory
-           (lambda _ (chdir "cli") #t))
+           (lambda _ (chdir "cli")))
          (replace 'check
-           (lambda _
-             (setenv "HOME" "/tmp")
-             ;; Greendns is not needed for testing, and if eventlet tries to
-             ;; load it, an OSError is thrown when getprotobyname is called.
-             ;; Thankfully there is an environment variable to disable the
-             ;; greendns import, so use it:
-             (setenv "EVENTLET_NO_GREENDNS" "yes")
-             (invoke "pytest" "-v" "./tests"))))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (setenv "HOME" "/tmp")
+               ;; Greendns is not needed for testing, and if eventlet tries to
+               ;; load it, an OSError is thrown when getprotobyname is called.
+               ;; Thankfully there is an environment variable to disable the
+               ;; greendns import, so use it:
+               (setenv "EVENTLET_NO_GREENDNS" "yes")
+               (invoke "pytest" "-v" "./tests")))))))
     (home-page "https://onionshare.org/")
     (synopsis "Securely and anonymously share files")
     (description "OnionShare lets you securely and anonymously share files,
@@ -295,7 +304,7 @@ OnionShare.")
       ((#:phases phases)
        `(modify-phases ,phases
          (replace 'change-directory
-           (lambda _ (chdir "desktop/src") #t))
+           (lambda _ (chdir "desktop/src")))
          (add-after 'unpack 'patch-tests
            (lambda _
              ;; Disable tests that require starting servers, which will hang
@@ -335,22 +344,19 @@ OnionShare.")
                              (display line out)
                              (loop))))))))))
          (replace 'check
-           (lambda _
-             ;; Some tests need a writable homedir:
-             (setenv "HOME" "/tmp")
-             ;; Ensure installed modules can be found:
-             (setenv "PYTHONPATH"
-                     (string-append %output "/lib/python"
-                                    ,(version-major+minor (package-version python))
-                                    "/site-packages:"
-                                    (getenv "PYTHONPATH")))
-             ;; Avoid `getprotobyname` issues:
-             (setenv "EVENTLET_NO_GREENDNS" "yes")
-             ;; Make Qt render "offscreen":
-             (setenv "QT_QPA_PLATFORM" "offscreen")
-             ;; Must be run from "desktop" dir:
-             (chdir "..")
-             (invoke "./tests/run.sh")))
+           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+             (when tests?
+               ;; Some tests need a writable homedir:
+               (setenv "HOME" "/tmp")
+               ;; Ensure installed modules can be found:
+               (add-installed-pythonpath inputs outputs)
+               ;; Avoid `getprotobyname` issues:
+               (setenv "EVENTLET_NO_GREENDNS" "yes")
+               ;; Make Qt render "offscreen":
+               (setenv "QT_QPA_PLATFORM" "offscreen")
+               ;; Must be run from "desktop" dir:
+               (with-directory-excursion ".."
+                 (invoke "./tests/run.sh")))))
          (add-after 'install 'install-data
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -358,21 +364,21 @@ OnionShare.")
                (install-file "org.onionshare.OnionShare.svg"
                              (string-append share "/icons/hicolor/scalable/apps"))
                (install-file "org.onionshare.OnionShare.desktop"
-                             (string-append share "/applications"))
-               #t)))))))
+                             (string-append share "/applications")))))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (inputs
      ;; TODO: obfs4proxy
-     `(("onionshare-cli" ,onionshare-cli)
-       ("python-shiboken-2" ,python-shiboken-2)
-       ("python-pyside-2" ,python-pyside-2)
-       ("python-qrcode" ,python-qrcode)
-       ;; The desktop client uses onionshare-cli like a python module.  But
-       ;; propagating onionshare-cli's inputs is not great, since a user would
-       ;; not expect to have those installed when using onionshare-cli as a
-       ;; standalone utility.  So add onionshare-cli's inputs here.
-       ,@(package-inputs onionshare-cli)))
+     (modify-inputs (package-inputs onionshare-cli)
+       (prepend onionshare-cli
+                python-shiboken-2
+                python-pyside-2
+                python-qrcode
+                ;; The desktop client uses onionshare-cli like a python module.  But
+                ;; propagating onionshare-cli's inputs is not great, since a user would
+                ;; not expect to have those installed when using onionshare-cli as a
+                ;; standalone utility.  So add onionshare-cli's inputs here.
+                )))
     (description "OnionShare lets you securely and anonymously share files,
 host websites, and chat with friends using the Tor network.")))
 
@@ -389,7 +395,7 @@ host websites, and chat with friends using the Tor network.")))
          "02rrlllz2ci6i6cs3iddyfns7ang9a54jrlygd2jw1f9s6418ll8"))))
     (build-system python-build-system)
     (inputs
-     `(("python-stem" ,python-stem)))
+     (list python-stem))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -447,12 +453,12 @@ Potential client and exit connections are scrubbed of sensitive information.")
     (native-inputs
      `(("glib:bin" ,glib "bin")))       ; for glib-compile-schemas.
     (inputs
-     `(("python-fire" ,python-fire)
-       ("python-psutil" ,python-psutil)
-       ("python-pygobject" ,python-pygobject)
-       ("python-requests" ,python-requests)
-       ("python-stem" ,python-stem)
-       ("python-termcolor" ,python-termcolor)))
+     (list python-fire
+           python-psutil
+           python-pygobject
+           python-requests
+           python-stem
+           python-termcolor))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
diff --git a/gnu/packages/toys.scm b/gnu/packages/toys.scm
index 52a4d0bb15..09426fe6fa 100644
--- a/gnu/packages/toys.scm
+++ b/gnu/packages/toys.scm
@@ -61,10 +61,9 @@
            #t))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("imake" ,imake)))
+     (list imake))
     (inputs
-     `(("libx11" ,libx11)
-       ("libxext" ,libxext)))
+     (list libx11 libxext))
     (arguments
      `(#:tests? #f ; no tests
        #:phases
@@ -113,7 +112,7 @@ mouse pointer around the screen while you work.")
         (base32 "1zrfd71zx2px2xpapg45s8xvi81xii63yl0h60q72j71zh4sif8b"))))
     (build-system gnu-build-system)
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -178,10 +177,9 @@ typing @command{sl} instead of @command{ls}.")
              #t)))
        #:tests? #f))                    ; no test suite
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)))
+     (list bison flex))
     (inputs
-     `(("perl" ,perl)))
+     (list perl))
     (home-page "https://joeyh.name/code/filters/")
     (synopsis "Various amusing text filters")
     (description
@@ -230,15 +228,15 @@ The GNU project hosts a similar collection of filters, the GNU talkfilters.")
 (define-public xsnow
   (package
     (name "xsnow")
-    (version "2.0.22")
+    (version "3.4.2")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
-             "https://www.ratrabbit.nl/ratrabbit/system/files/xsnow/xsnow-"
+             "https://www.ratrabbit.nl/downloads/xsnow/xsnow-"
              version ".tar.gz"))
        (sha256
-        (base32 "1880643fal6l7bskqbm4zfbr2s719698mkx4pchrxkjpb240sj0z"))))
+        (base32 "17pxc955jgkjan8ax0lw3b3sibw7aikc7p9qbxsp0w7g7jkxf666"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
@@ -251,14 +249,10 @@ The GNU project hosts a similar collection of filters, the GNU talkfilters.")
                 (string-append prefix "bin")))
              #t)))))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("libx11" ,libx11)
-       ("libxpm" ,libxpm)
-       ("libxt" ,libxt)
-       ("libxxml2" ,libxml2)))
+     (list gtk+ libx11 libxpm libxt libxml2))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
-    (home-page "https://www.ratrabbit.nl/ratrabbit/content/xsnow/introduction")
+     (list pkg-config))
+    (home-page "https://www.ratrabbit.nl/ratrabbit/xsnow/index.html")
     (synopsis "Let it snow on the desktop")
     (description "@code{Xsnow} animates snowfall and Santa with reindeer on
 the desktop background.  Additional customizable effects include wind, stars
@@ -329,10 +323,9 @@ of the Nyan Cat / Poptart Cat animation.")
                                         ,(package-version this-package))))
                (install-file "README.md" doc)))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("scdoc" ,scdoc)))
+     (list pkg-config scdoc))
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (home-page "https://gitlab.com/jallbrit/cbonsai")
     (synopsis "Grow bonsai trees in a terminal")
     (description "Cbonsai is a bonsai tree generator using ASCII art.  It
diff --git a/gnu/packages/tryton.scm b/gnu/packages/tryton.scm
index d5cfb63e1b..7cbcc8e518 100644
--- a/gnu/packages/tryton.scm
+++ b/gnu/packages/tryton.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2020 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;; Copyright © 2021 Hartmut Goebel <h.goebel@crazy-compilers.com>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -39,6 +40,19 @@
   #:use-module (guix utils)
   #:use-module (guix build-system python))
 
+(define (guix-trytonpath-search-path version)
+  "Generate a GUIX_TRYTOND_MODULES_PATH search path specification, using
+VERSION.
+
+Do not use PYTHHONPATH not avoid interfering with any different Python package
+installed in the same environments.  Collecting only paths actually containing
+/tryton/modules reduces the number of paths."
+  (search-path-specification (variable "GUIX_TRYTOND_MODULES_PATH")
+                             (files (list (string-append
+                                           "lib/python"
+                                           (version-major+minor version)
+                                           "/site-packages/trytond/modules")))))
+
 (define-public trytond
   (package
     (name "trytond")
@@ -48,23 +62,26 @@
        (method url-fetch)
        (uri (pypi-uri "trytond" version))
        (sha256
-        (base32 "1jp5cadqpwkcnml8r1hj6aak5kc8an2d5ai62p96x77nn0dp3ny4"))))
-    (build-system python-build-system)
-    (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-genshi" ,python-genshi)
-       ("python-lxml" ,python-lxml)
-       ("python-magic" ,python-magic)
-       ("python-passlib" ,python-passlib)
-       ("python-polib" ,python-polib)
-       ("python-psycopg2" ,python-psycopg2)
-       ("python-relatorio" ,python-relatorio)
-       ("python-sql" ,python-sql)
-       ("python-werkzeug" ,python-werkzeug)
-       ("python-wrapt" ,python-wrapt)))
+        (base32 "1jp5cadqpwkcnml8r1hj6aak5kc8an2d5ai62p96x77nn0dp3ny4"))
+       (patches (search-patches "trytond-add-egg-modules-to-path.patch"
+                                "trytond-add-guix_trytond_path.patch"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     (list python-dateutil
+           python-genshi
+           python-lxml
+           python-magic
+           python-passlib
+           python-polib
+           python-psycopg2
+           python-relatorio
+           python-sql
+           python-werkzeug-1.0 ;setup.py requires werkzeug<2
+           python-wrapt))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pillow" ,python-pillow)))
+     (list python-mock python-pillow))
+    (native-search-paths
+     (list (guix-trytonpath-search-path (package-version python))))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -113,12 +130,12 @@ and security.")
      `(("glib-compile-schemas" ,glib "bin")
        ("gobject-introspection" ,gobject-introspection)))
     (propagated-inputs
-     `(("gdk-pixbuf" ,gdk-pixbuf+svg)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gtk+" ,gtk+)
-       ("python-dateutil" ,python-dateutil)
-       ("python-pycairo" ,python-pycairo)
-       ("python-pygobject" ,python-pygobject)))
+     (list librsvg
+           gsettings-desktop-schemas
+           gtk+
+           python-dateutil
+           python-pycairo
+           python-pygobject))
     (home-page "https://www.tryton.org/")
     (synopsis "Tryton Client")
     (description
@@ -140,7 +157,7 @@ and security.")
     (arguments
      `(#:tests? #f))
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)))
+     (list python-dateutil))
     (home-page "http://www.tryton.org/")
     (synopsis "Library to access a Tryton server as a client")
     (description
@@ -172,7 +189,7 @@ the build system."
 ;;;  Tryton modules - please sort alphabetically
 ;;;
 
-(define %standard-trytond-native-inputs
+(define (%standard-trytond-native-inputs)
   ;; native-inputs required by most of the tryton module for running the test
   `(("python-dateutil" ,python-dateutil)
     ("python-genshi" ,python-genshi)
@@ -183,7 +200,7 @@ the build system."
     ("python-proteus" ,python-proteus)
     ("python-relatorio" ,python-relatorio)
     ("python-sql" ,python-sql)
-    ("python-werkzeug" ,python-werkzeug)
+    ("python-werkzeug" ,python-werkzeug-1.0)
     ("python-wrapt" ,python-wrapt)))
 
 (define-public trytond-account
@@ -198,13 +215,10 @@ the build system."
         (base32 "0j1mn8sd5n8rkwgfvcy9kf8s7s3qxvnilnc72i83ac573zj922xc"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("python-simpleeval" ,python-simpleeval)
-       ("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)
-       ("trytond-currency" ,trytond-currency)
-       ("trytond-party" ,trytond-party)))
+     (list python-simpleeval trytond trytond-company trytond-currency
+           trytond-party))
     (home-page "https://www.tryton.org/")
     (synopsis "Tryton module for accounting")
     (description
@@ -228,14 +242,11 @@ most of accounting needs.")
     (build-system python-build-system)
     (arguments (tryton-arguments "account_asset"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-purchase" ,trytond-purchase)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-account-product" ,trytond-account-product)
-       ("trytond-product" ,trytond-product)))
+     (list trytond trytond-account trytond-account-invoice
+           trytond-account-product trytond-product))
     (home-page "https://docs.tryton.org/projects/modules-account-asset")
     (synopsis "Tryton module for assets management")
     (description "The @emph{Account Asset} Tryton module adds the depreciation
@@ -254,11 +265,9 @@ of fixed assets.")
         (base32 "1l4zxsh9f3ndsgj3224xv23nr7gbg5kwrydwgv34nlkyxp5557dk"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_be"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-eu" ,trytond-account-eu)))
+     (list trytond trytond-account trytond-account-eu))
     (home-page "https://docs.tryton.org/projects/modules-account-be")
     (synopsis "Tryton module with Belgian chart of accounts")
     (description "The @emph{Account BE} Tryton module defines the standard
@@ -278,14 +287,12 @@ chart of account for Belgium.")
     (build-system python-build-system)
     (arguments (tryton-arguments "account_cash_rounding"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-account-invoice" ,trytond-account-invoice)
        ("trytond-purchase" ,trytond-purchase)
        ("trytond-sale" ,trytond-sale)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-currency" ,trytond-currency)))
+     (list trytond trytond-account trytond-currency))
     (home-page
      "https://docs.tryton.org/projects/modules-account-cash-rounding")
     (synopsis "Tryton module to round cash amount")
@@ -306,13 +313,10 @@ amounts to be rounded using the cash rounding factor of the currency.")
     (build-system python-build-system)
     (arguments (tryton-arguments "account_credit_limit"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-account-dunning" ,trytond-account-dunning)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-company" ,trytond-company)
-       ("trytond-party" ,trytond-party)))
+     (list trytond trytond-account trytond-company trytond-party))
     (home-page "https://docs.tryton.org/projects/modules-account-credit-limit")
     (synopsis "Tryton module for account credit limit")
     (description "The @emph{Account Credit Limit} Tryton module for manages
@@ -331,10 +335,9 @@ credit limit of parties.")
         (base32 "1dhgspabr2bm0y6qkzh5kz6badhf23arzkw7lra1zsn52r23j9dl"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_de_skr03"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)))
+     (list trytond trytond-account))
     (home-page "https://docs.tryton.org/projects/modules-account-de-skr03")
     (synopsis "Tryton module with German chart of accounts SKR03")
     (description "This package provides the German SKR03 chart of accounts for
@@ -353,20 +356,17 @@ Tryton.")
         (base32 "005yw868wxv8fhp7dlqd2z19hhjlmk4cgqa36axdfjmbwxvh1r6r"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_deposit"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-company" ,trytond-company)
-       ("trytond-party" ,trytond-party)))
+     (list trytond trytond-account trytond-account-invoice
+           trytond-company trytond-party))
     (home-page "https://docs.tryton.org/projects/modules-account-deposit")
     (synopsis "Tryton module for accounting deposit")
     (description "The @emph{Account Deposit} Tryton module adds support for
 deposit accounting.
 
 A deposit is an amount paid by the customer prior to the company providing it
-with services or goods.  A wizard on invoice allows to recall prior deposit of
+with services or goods.  A wizard on invoice allows recalling a prior deposit of
 the party.")
     (license license:gpl3+)))
 
@@ -382,12 +382,9 @@ the party.")
         (base32 "0d5wabn5g1gzmllihkdhzqix934184v303pp20927qxpzb2pm3qw"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_dunning"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-company" ,trytond-company)
-       ("trytond-party" ,trytond-party)))
+     (list trytond trytond-account trytond-company trytond-party))
     (home-page "https://docs.tryton.org/projects/modules-account-dunning")
     (synopsis "Tryton module for account dunning")
     (description "The @emph{Account Dunning} Tryton module adds dunning for
@@ -406,12 +403,10 @@ receivable move lines.")
         (base32 "0sbh2rnziw5fhlbaq4n8q9rwqcgz35rik77dbvhflyyjdxh51vfq"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_dunning_email"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account-dunning" ,trytond-account-dunning)
-       ("trytond-account-dunning-letter" ,trytond-account-dunning-letter)
-       ("trytond-party" ,trytond-party)))
+     (list trytond trytond-account-dunning trytond-account-dunning-letter
+           trytond-party))
     (home-page
      "https://docs.tryton.org/projects/modules-account-dunning-email")
     (synopsis "Tryton module for account dunning email")
@@ -432,12 +427,10 @@ emails.")
     (build-system python-build-system)
     (arguments (tryton-arguments "account_dunning_fee"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-account-dunning-letter" ,trytond-account-dunning-letter)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account-dunning" ,trytond-account-dunning)
-       ("trytond-account-product" ,trytond-account-product)))
+     (list trytond trytond-account-dunning trytond-account-product))
     (home-page "https://docs.tryton.org/projects/modules-account-dunning-fee")
     (synopsis "Tryton module for account dunning fee")
     (description "This package provides a Tryton module for generating
@@ -456,13 +449,10 @@ accounting moves as fees when processing dunning.")
         (base32 "0xb0mpf7n8jjgm8sb52q5sb2fjs1ap1gc0p33csdgz2lyh66lh3b"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_dunning_letter"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-dunning" ,trytond-account-dunning)
-       ("trytond-company" ,trytond-company)
-       ("trytond-party" ,trytond-party)))
+     (list trytond trytond-account trytond-account-dunning
+           trytond-company trytond-party))
     (home-page
      "https://docs.tryton.org/projects/modules-account-dunning-letter")
     (synopsis "Tryton module for account dunning letter")
@@ -483,15 +473,12 @@ letters.")
     (build-system python-build-system)
     (arguments (tryton-arguments "account_es"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-account-asset" ,trytond-account-asset)
        ("trytond-account-payment-sepa" ,trytond-account-payment-sepa)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-eu" ,trytond-account-eu)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-party" ,trytond-party)))
+     (list trytond trytond-account trytond-account-eu
+           trytond-account-invoice trytond-party))
     (home-page "https://docs.tryton.org/projects/modules-account-es")
     (synopsis "Tryton with Spanish chart of accounts")
     (description "This package provides the following Spanish charts of
@@ -501,7 +488,7 @@ accounts for Tryton:
 @item Plan Contable para PYMES 2008
 @end itemize
 
-A wizard allows to generate the following AEAT files:
+A wizard allows generating the following AEAT files:
 
 @itemize
 @item Modelo 111
@@ -522,14 +509,14 @@ A wizard allows to generate the following AEAT files:
         (base32 "1x3w7iijkckv20q8lpqb5fnfrvddm130f51mcpnh4hlyx14q1c5i"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_eu"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
-    (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-company" ,trytond-company)
-       ("trytond-currency" ,trytond-currency)
-       ("trytond-party" ,trytond-party)))
+    (native-inputs (%standard-trytond-native-inputs))
+    (propagated-inputs
+     (list trytond
+           trytond-account
+           trytond-account-invoice
+           trytond-company
+           trytond-currency
+           trytond-party))
     (home-page "https://docs.tryton.org/projects/modules-account-eu")
     (synopsis "Tryton module for european accounting")
     (description "This package provides a Tryton module implementing common
@@ -552,11 +539,9 @@ accounting requirements in Europe.  It includes:
         (base32 "1zpzdnd68gsjrz4as019amygdh8yad8wvwrm22dbccwmbbnyvqpg"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_fr"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-party-siret" ,trytond-party-siret)))
+     (list trytond trytond-account trytond-party-siret))
     (home-page "https://docs.tryton.org/projects/modules-account-fr")
     (synopsis "Tryton module with French chart of accounts")
     (description "This package provides the French standard chart of account
@@ -576,16 +561,16 @@ for Tryton.")
     (build-system python-build-system)
     (arguments (tryton-arguments "account_fr_chorus"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-edocument-uncefact" ,trytond-edocument-uncefact)))
     (propagated-inputs
-     `(("python-requests" ,python-requests)
-       ("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-company" ,trytond-company)
-       ("trytond-party" ,trytond-party)
-       ("trytond-party-siret" ,trytond-party-siret)))
+     (list python-requests
+           trytond
+           trytond-account
+           trytond-account-invoice
+           trytond-company
+           trytond-party
+           trytond-party-siret))
     (home-page "https://docs.tryton.org/projects/modules-account-fr-chorus")
     (synopsis "Tryton module to communicate with the French Chorus Pro
 portal")
@@ -609,15 +594,15 @@ using the credential from the accounting configuration.")
         (base32 "0r8zigb4qmv40kf835x8jd7049nnhk5g7g0aibvfd0y9p28lspnz"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_invoice"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
-    (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-product" ,trytond-account-product)
-       ("trytond-company" ,trytond-company)
-       ("trytond-currency" ,trytond-currency)
-       ("trytond-party" ,trytond-party)
-       ("trytond-product" ,trytond-product)))
+    (native-inputs (%standard-trytond-native-inputs))
+    (propagated-inputs
+     (list trytond
+           trytond-account
+           trytond-account-product
+           trytond-company
+           trytond-currency
+           trytond-party
+           trytond-product))
     (home-page "https://www.tryton.org/")
     (synopsis "Tryton module for invoicing")
     (description
@@ -640,10 +625,9 @@ term.")
         (base32 "152jxsl6v2wclk1wjhykbyvianh47cp2yg575hkx18dfynyp7nmw"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_invoice_correction"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account-invoice" ,trytond-account-invoice)))
+     (list trytond trytond-account-invoice))
     (home-page
      "https://docs.tryton.org/projects/modules-account-invoice-correction")
     (synopsis "Tryton module to correct invoice")
@@ -665,17 +649,15 @@ original quantity, once with the inverted quantity.")
         (base32 "1ay9cpf6z8j3gamwy52z88qg31s09wkp6k5flv20f9c00hvly452"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_invoice_defer"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-company" ,trytond-company)))
+     (list trytond trytond-account trytond-account-invoice
+           trytond-company))
     (home-page
      "https://docs.tryton.org/projects/modules-account-invoice-defer")
     (synopsis "Tryton module to defer expense and revenue")
-    (description "The @emph{Account Invoice Defer} Tryton module allows to
-defer the expense or the revenue of an invoice line over many periods.")
+    (description "The @emph{Account Invoice Defer} Tryton module allows
+deferring the expense or the revenue of an invoice line over many periods.")
     (license license:gpl3+)))
 
 (define-public trytond-account-invoice-history
@@ -690,11 +672,9 @@ defer the expense or the revenue of an invoice line over many periods.")
         (base32 "0pq1raj6v76vqsb2mk1bfv1vg1ngfk9iiai30rlzj2zcl53phcvj"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_invoice_history"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-party" ,trytond-party)))
+     (list trytond trytond-account-invoice trytond-party))
     (home-page
      "https://docs.tryton.org/projects/modules-account-invoice-history")
     (synopsis "Tryton module to historize invoices")
@@ -714,15 +694,14 @@ the historization of the invoice and its related fields.")
         (base32 "1affxhinyzz1lqfq621f76fixnx523fi7qrxwsqa4f1b6g31651a"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_invoice_line_standalone"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account-invoice" ,trytond-account-invoice)))
+     (list trytond trytond-account-invoice))
     (home-page
      "https://docs.tryton.org/projects/modules-account-invoice-line-standalone")
     (synopsis "Tryton module to have standalone invoice lines")
     (description "The @emph{Account Invoice Line Standalone} Tryton module
-allows to create invoice line not linked to an invoice.")
+allows creating an invoice line not linked to an invoice.")
     (license license:gpl3+)))
 
 (define-public trytond-account-invoice-secondary-unit
@@ -737,11 +716,9 @@ allows to create invoice line not linked to an invoice.")
         (base32 "0wam7v92ldajpx3529x2cfvczgwv8ayr6hi6bwj8fi736p9x2kbp"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_invoice_secondary_unit"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-product" ,trytond-product)))
+     (list trytond trytond-account-invoice trytond-product))
     (home-page
      "https://docs.tryton.org/projects/modules-account-invoice-secondary-unit")
     (synopsis "Tryton module to add a secondary unit on invoice line")
@@ -761,12 +738,9 @@ a secondary unit of measure on invoice line.")
         (base32 "1228n6vsx0rdjsy3idvpyssa3n21nhvz9gqaacwa46c0hp2251bp"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_invoice_stock"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-product" ,trytond-product)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-account-invoice trytond-product trytond-stock))
     (home-page "https://www.tryton.org/")
     (synopsis "Tryton module to link stock and invoice")
     (description
@@ -792,14 +766,11 @@ average price of the posted invoice lines that are linked to it.")
     (build-system python-build-system)
     (arguments (tryton-arguments "account_payment"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-account-invoice" ,trytond-account-invoice)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-company" ,trytond-company)
-       ("trytond-currency" ,trytond-currency)
-       ("trytond-party" ,trytond-party)))
+     (list trytond trytond-account trytond-company trytond-currency
+           trytond-party))
     (home-page "https://docs.tryton.org/projects/modules-account-payment")
     (synopsis "Tryton module for payment")
     (description "This package provides a Tryton module for generating grouped
@@ -818,13 +789,10 @@ payments for receivable or payable Account Move Lines.")
         (base32 "0dgw47q4m5l13bhfl1kdpajh0q94pazdrq9sqzf1vg9mggai2gvi"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_payment_braintree"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("python-braintree" ,python-braintree)
-       ("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-payment" ,trytond-account-payment)
-       ("trytond-party" ,trytond-party)))
+     (list python-braintree trytond trytond-account
+           trytond-account-payment trytond-party))
     (home-page
      "https://docs.tryton.org/projects/modules-account-payment-braintree")
     (synopsis "Tryton module for Braintree payment")
@@ -847,17 +815,16 @@ methods.")
     (build-system python-build-system)
     (arguments (tryton-arguments "account_payment_clearing"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-account-statement" ,trytond-account-statement)
        ("trytond-account-statement-rule" ,trytond-account-statement-rule)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account-payment" ,trytond-account-payment)))
+     (list trytond trytond-account-payment))
     (home-page
      "https://docs.tryton.org/projects/modules-account-payment-clearing")
     (synopsis "Tryton module for payment clearing")
-    (description "The @emph{Account Payment Clearing} Tryton module allows to
-generate account move when a payment is succeeded between the
+    (description "The @emph{Account Payment Clearing} Tryton module allows
+generating an account move when a payment succeeded between the
 receivable/payable account to a clearing account defined on the payment
 journal.")
     (license license:gpl3+)))
@@ -874,18 +841,18 @@ journal.")
         (base32 "0clnl2lql5q0gh48lad3vw47xajgd3cdj4kbmvdi72jh775p174w"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_payment_sepa"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
-    (propagated-inputs
-     `(("python-stdnum" ,python-stdnum)
-       ("trytond" ,trytond)
-       ("trytond-account-payment" ,trytond-account-payment)
-       ("trytond-bank" ,trytond-bank)
-       ("trytond-company" ,trytond-company)
-       ("trytond-party" ,trytond-party)))
+    (native-inputs (%standard-trytond-native-inputs))
+    (propagated-inputs
+     (list python-stdnum
+           trytond
+           trytond-account-payment
+           trytond-bank
+           trytond-company
+           trytond-party))
     (home-page "https://docs.tryton.org/projects/modules-account-payment-sepa")
     (synopsis "Tryton module for SEPA payment")
-    (description "The @emph{Account Payment SEPA} Tryton module allows to
-generate SEPA files for a Payment Group.")
+    (description "The @emph{Account Payment SEPA} Tryton module allows
+generating SEPA files for a Payment Group.")
     (license license:gpl3+)))
 
 (define-public trytond-account-payment-sepa-cfonb
@@ -900,14 +867,14 @@ generate SEPA files for a Payment Group.")
         (base32 "0ccn5s360w78wqnq86qfyci8wii4n1n3pd9wvwsnbrpmabj1byv1"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_payment_sepa_cfonb"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
-    (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account-payment" ,trytond-account-payment)
-       ("trytond-account-payment-sepa" ,trytond-account-payment-sepa)
-       ("trytond-bank" ,trytond-bank)
-       ("trytond-company" ,trytond-company)
-       ("trytond-party" ,trytond-party)))
+    (native-inputs (%standard-trytond-native-inputs))
+    (propagated-inputs
+     (list trytond
+           trytond-account-payment
+           trytond-account-payment-sepa
+           trytond-bank
+           trytond-company
+           trytond-party))
     (home-page
      "https://docs.tryton.org/projects/modules-account-payment-sepa-cfonb")
     (synopsis "Tryton module for CFONB SEPA payment")
@@ -927,13 +894,10 @@ CFONB flavors to SEPA messages.")
         (base32 "18hr2lrrx9asb0d3cjcpska4bv825yjln9cbqjzg0xbl36z6w3s2"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_payment_stripe"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("python-stripe" ,python-stripe)
-       ("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-payment" ,trytond-account-payment)
-       ("trytond-party" ,trytond-party)))
+     (list python-stripe trytond trytond-account trytond-account-payment
+           trytond-party))
     (home-page
      "https://docs.tryton.org/projects/modules-account-payment-stripe")
     (synopsis "Tryton module for Stripe payment")
@@ -954,13 +918,10 @@ checkout form to handle Setup Intent and Payment Intent by card.")
         (base32 "1z0dn1p22smzb4a9v451224wrpxcw94inl7jxkarc0q088gasn7d"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_product"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-analytic-account" ,trytond-analytic-account)
-       ("trytond-company" ,trytond-company)
-       ("trytond-product" ,trytond-product)))
+     (list trytond trytond-account trytond-analytic-account
+           trytond-company trytond-product))
     (home-page "https://www.tryton.org/")
     (synopsis "Tryton module to add accounting on product")
     (description
@@ -983,18 +944,18 @@ and category.")
         (base32 "0nlak4kv2ampb5v2zbsvabnirvdi53h6vr35kp2zmrv4alpjsla0"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_statement"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
-    (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-bank" ,trytond-bank)
-       ("trytond-company" ,trytond-company)
-       ("trytond-currency" ,trytond-currency)
-       ("trytond-party" ,trytond-party)))
+    (native-inputs (%standard-trytond-native-inputs))
+    (propagated-inputs
+     (list trytond
+           trytond-account
+           trytond-account-invoice
+           trytond-bank
+           trytond-company
+           trytond-currency
+           trytond-party))
     (home-page "https://docs.tryton.org/projects/modules-account-statement")
     (synopsis "Tryton module with account statements")
-    (description "The @emph{Account Statement} Tryton module allows to book
+    (description "The @emph{Account Statement} Tryton module allows booking
 statements.  Statement can be used for bank statement, cash daybook etc.")
     (license license:gpl3+)))
 
@@ -1010,13 +971,10 @@ statements.  Statement can be used for bank statement, cash daybook etc.")
         (base32 "09mkxb9m9167lpca8pb8k4rvnwhsng6b6pmhw9c21w2r4q0hppxv"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_statement_aeb43"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("python-csb43" ,python-csb43)
-       ("python-stdnum" ,python-stdnum)
-       ("trytond" ,trytond)
-       ("trytond-account-statement" ,trytond-account-statement)
-       ("trytond-bank" ,trytond-bank)))
+     (list python-csb43 python-stdnum trytond trytond-account-statement
+           trytond-bank))
     (home-page
      "https://docs.tryton.org/projects/trytond-account-statement-aeb43")
     (synopsis "Tryton module to import AEB43 statements")
@@ -1037,12 +995,10 @@ defined by the Spanish banking association.")
         (base32 "11gryxh2b2py0h6f89nj2y42cwb8rrxjn0r5jbhrcsfhb2kh1x3w"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_statement_coda"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("python-febelfin-coda" ,python-febelfin-coda)
-       ("trytond" ,trytond)
-       ("trytond-account-statement" ,trytond-account-statement)
-       ("trytond-bank" ,trytond-bank)))
+     (list python-febelfin-coda trytond trytond-account-statement
+           trytond-bank))
     (home-page
      "https://docs.tryton.org/projects/modules-account-statement-coda")
     (synopsis "Tryton module to import CODA statements")
@@ -1063,13 +1019,10 @@ defined by Belgian \"febelfin\".")
         (base32 "1n24lwp1lfw59xdd7mqaz6ncr5b0bldr2qniqdnkvyaav0h8h5px"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_statement_ofx"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("python-ofxparse" ,python-ofxparse)
-       ("trytond" ,trytond)
-       ("trytond-account-statement" ,trytond-account-statement)
-       ("trytond-bank" ,trytond-bank)
-       ("trytond-party" ,trytond-party)))
+     (list python-ofxparse trytond trytond-account-statement trytond-bank
+           trytond-party))
     (home-page
      "https://docs.tryton.org/projects/modules-account-statement-ofx")
     (synopsis "Tryton module to import OFX statements")
@@ -1089,14 +1042,14 @@ the import of the @emph{OFX} files as statement.")
         (base32 "0kg6lf2wa5scwxggr8p7r7j6jd3a34qv2dcs9w18ra1qvg6p4kmp"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_statement_rule"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
-    (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-account-statement" ,trytond-account-statement)
-       ("trytond-company" ,trytond-company)
-       ("trytond-party" ,trytond-party)))
+    (native-inputs (%standard-trytond-native-inputs))
+    (propagated-inputs
+     (list trytond
+           trytond-account
+           trytond-account-invoice
+           trytond-account-statement
+           trytond-company
+           trytond-party))
     (home-page
      "https://docs.tryton.org/projects/modules-account-statement-rule")
     (synopsis "Tryton module to automate statement import with rules")
@@ -1122,19 +1075,18 @@ linked to the origin.")
     (build-system python-build-system)
     (arguments (tryton-arguments "account_stock_anglo_saxon"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-purchase" ,trytond-purchase)
        ("trytond-sale" ,trytond-sale)
        ("trytond-sale-supply-drop-shipment"
         ,trytond-sale-supply-drop-shipment)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-account-invoice-stock" ,trytond-account-invoice-stock)
-       ("trytond-account-product" ,trytond-account-product)
-       ("trytond-account-stock-continental"
-        ,trytond-account-stock-continental)))
+     (list trytond
+           trytond-account
+           trytond-account-invoice
+           trytond-account-invoice-stock
+           trytond-account-product
+           trytond-account-stock-continental))
     (home-page
      "https://docs.tryton.org/projects/modules-account-stock-anglo-saxon")
     (synopsis "Tryton module for anglo-saxon real-time stock valuation")
@@ -1155,17 +1107,14 @@ anglo-saxon accounting model for stock valuation.")
     (build-system python-build-system)
     (arguments (tryton-arguments "account_stock_continental"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-account-invoice" ,trytond-account-invoice)
        ("trytond-purchase" ,trytond-purchase)
        ("trytond-sale" ,trytond-sale)
        ("trytond-sale-supply-drop-shipment"
         ,trytond-sale-supply-drop-shipment)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-product" ,trytond-account-product)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-account trytond-account-product trytond-stock))
     (home-page
      "https://docs.tryton.org/projects/modules-account-stock-continental")
     (synopsis "Tryton module for continental real-time stock valuation")
@@ -1185,18 +1134,15 @@ continental accounting model for stock valuation.")
         (base32 "1p5xgd76585i55zcwvsi2gqhl0br9gbw398ap7m0cvadxfa6nxch"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_stock_landed_cost"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-product" ,trytond-product)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-account trytond-account-invoice
+           trytond-product trytond-stock))
     (home-page
      "https://docs.tryton.org/projects/modules-account-stock-landed-cost")
     (synopsis "Tryton module for landed cost")
-    (description "The @emph{Account Stock Landed Cost} Tryton module allows to
-allocate landed cost on Supplier Shipments after their reception.")
+    (description "The @emph{Account Stock Landed Cost} Tryton module allows
+allocating landed cost on Supplier Shipments after their reception.")
     (license license:gpl3+)))
 
 (define-public trytond-account-stock-landed-cost-weight
@@ -1211,14 +1157,10 @@ allocate landed cost on Supplier Shipments after their reception.")
         (base32 "10i0ww3k2cgdg227lv6h8ag2j6rm07maylbh3n0grwxfy8dbq34m"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_stock_landed_cost_weight"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
-    (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account-stock-landed-cost" ,trytond-account-stock-landed-cost)
-       ("trytond-product" ,trytond-product)
-       ("trytond-product-measurements" ,trytond-product-measurements)
-       ("trytond-stock-shipment-measurements"
-        ,trytond-stock-shipment-measurements)))
+    (native-inputs (%standard-trytond-native-inputs))
+    (propagated-inputs
+     (list trytond trytond-account-stock-landed-cost trytond-product
+           trytond-product-measurements trytond-stock-shipment-measurements))
     (home-page
      "https://docs.tryton.org/projects/modules-account-stock-landed-cost-weight")
     (synopsis "Tryton module for landed cost per weight")
@@ -1239,15 +1181,12 @@ from the Product Measurements")
         (base32 "1di8brrj4jpx99i0553whyh2fddayvwq06dwdshb3iibgv4357cr"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_tax_cash"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-party" ,trytond-party)))
+     (list trytond trytond-account trytond-account-invoice trytond-party))
     (home-page "https://docs.tryton.org/projects/modules-account-tax-cash")
     (synopsis "Tryton module to support tax report on cash basis")
-    (description "The @emph{Account Tax Cash} Tryton module allows to make tax
+    (description "The @emph{Account Tax Cash} Tryton module allows making a tax
 report on cash basis.")
     (license license:gpl3+)))
 
@@ -1264,15 +1203,13 @@ report on cash basis.")
     (build-system python-build-system)
     (arguments (tryton-arguments "account_tax_rule_country"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-account-invoice" ,trytond-account-invoice)
        ("trytond-purchase" ,trytond-purchase)
        ("trytond-sale" ,trytond-sale)
        ("trytond-stock" ,trytond-stock)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-country" ,trytond-country)))
+     (list trytond trytond-account trytond-country))
     (home-page
      "https://docs.tryton.org/projects/modules-account-tax-rule-country")
     (synopsis "Tryton module to add countries on tax rules")
@@ -1293,13 +1230,10 @@ criteria.")
         (base32 "09j9xz41n5hk3j7w63xbw1asd3p00prqvl652qcm9x1nrlmqiw3r"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "analytic_account"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-company" ,trytond-company)
-       ("trytond-currency" ,trytond-currency)
-       ("trytond-party" ,trytond-party)))
+     (list trytond trytond-account trytond-company trytond-currency
+           trytond-party))
     (home-page "https://www.tryton.org/")
     (synopsis "Tryton module for analytic accounting")
     (description
@@ -1324,16 +1258,14 @@ required to analyse accounting using multiple different axes.")
     (build-system python-build-system)
     (arguments (tryton-arguments "analytic_invoice"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-account-asset" ,trytond-account-asset)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-analytic-account" ,trytond-analytic-account)))
+     (list trytond trytond-account-invoice trytond-analytic-account))
     (home-page "https://docs.tryton.org/projects/modules-analytic-invoice")
     (synopsis "Tryton module to add analytic accounting on invoice")
-    (description "The @emph{Analytic Invoice} Tryton module allows to set
-analytic accounts on invoice line.")
+    (description "The @emph{Analytic Invoice} Tryton module allows setting
+analytic accounts on an invoice line.")
     (license license:gpl3+)))
 
 (define-public trytond-analytic-purchase
@@ -1348,16 +1280,14 @@ analytic accounts on invoice line.")
         (base32 "1yx3w3p98y11qw99jy02kal9393y6jpxazsfcznsffgigw2vl3y6"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "analytic_purchase"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-analytic-account" ,trytond-analytic-account)
-       ("trytond-analytic-invoice" ,trytond-analytic-invoice)
-       ("trytond-purchase" ,trytond-purchase)))
+     (list trytond trytond-analytic-account trytond-analytic-invoice
+           trytond-purchase))
     (home-page "https://docs.tryton.org/projects/modules-analytic-purchase")
     (synopsis "Tryton module to add analytic accounting on purchase")
-    (description "The @emph{Analytic Purchase} Tryton module allows to set
-analytic accounts on purchase line.")
+    (description "The @emph{Analytic Purchase} Tryton module allows setting
+analytic accounts on a purchase line.")
     (license license:gpl3+)))
 
 (define-public trytond-analytic-sale
@@ -1372,16 +1302,14 @@ analytic accounts on purchase line.")
         (base32 "07l97jmg67468pihymfcjagqbbfdcmry3654f24zbmnljxy2qm1x"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "analytic_sale"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-analytic-account" ,trytond-analytic-account)
-       ("trytond-analytic-invoice" ,trytond-analytic-invoice)
-       ("trytond-sale" ,trytond-sale)))
+     (list trytond trytond-analytic-account trytond-analytic-invoice
+           trytond-sale))
     (home-page "https://docs.tryton.org/projects/modules-analytic-sale")
     (synopsis "Tryton module to add analytic accounting on sale")
-    (description "The @emph{Analytic Sale} Tryton module allows to set
-analytic accounts on sale line.")
+    (description "The @emph{Analytic Sale} Tryton module allows setting
+analytic accounts on a sale line.")
     (license license:gpl3+)))
 
 (define-public trytond-attendance
@@ -1397,11 +1325,10 @@ analytic accounts on sale line.")
     (build-system python-build-system)
     (arguments (tryton-arguments "attendance"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-timesheet" ,trytond-timesheet)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)))
+     (list trytond trytond-company))
     (home-page "https://docs.tryton.org/projects/modules-attendance")
     (synopsis "Tryton module for recording employee attendance")
     (description "The @emph{Attendance} Tryton module allows you to track the
@@ -1422,9 +1349,9 @@ detail of the time of entrance and exit")
         (base32 "1g46mimgjkz2lvh90p2ffmkfgwl7w03iqnvqlcghwpxk5vyxw3sj"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "authentication_sms"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)))
+     (list trytond))
     (home-page "https://docs.tryton.org/projects/modules-authentication-sms")
     (synopsis "Tryton module to authenticate users via SMS")
     (description "The @emph{Authentication SMS} Tryton module allows users to
@@ -1445,12 +1372,9 @@ configuration file.")
         (base32 "0qwgp2s88n4hcqqxg1g34lmmvq5spdlkm978gzn6s96kmmzang0c"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "bank"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("python-stdnum" ,python-stdnum)
-       ("trytond" ,trytond)
-       ("trytond-currency" ,trytond-currency)
-       ("trytond-party" ,trytond-party)))
+     (list python-stdnum trytond trytond-currency trytond-party))
     (home-page "https://docs.tryton.org/projects/modules-bank")
     (synopsis "Tryton module with banks")
     (description "The @emph{Bank} Tryton module defines the concept of bank
@@ -1469,12 +1393,9 @@ and account.")
         (base32 "0kp08jb5f86bzfyn99qs4k1047svdrkhz3jxv3jw46vrpc2s0c1y"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "carrier"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-country" ,trytond-country)
-       ("trytond-party" ,trytond-party)
-       ("trytond-product" ,trytond-product)))
+     (list trytond trytond-country trytond-party trytond-product))
     (home-page "https://docs.tryton.org/projects/modules-carrier")
     (synopsis "Tryton module with carriers")
     (description "The @emph{Carrier} Tryton module defines the concept
@@ -1494,13 +1415,11 @@ of carrier.")
     (build-system python-build-system)
     (arguments (tryton-arguments "carrier_percentage"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-purchase-shipment-cost" ,trytond-purchase-shipment-cost)
        ("trytond-sale-shipment-cost" ,trytond-sale-shipment-cost)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-carrier" ,trytond-carrier)
-       ("trytond-currency" ,trytond-currency)))
+     (list trytond trytond-carrier trytond-currency))
     (home-page "https://docs.tryton.org/projects/modules-carrier-percentage")
     (synopsis "Tryton module to add cost method based on percentage")
     (description "The @emph{Carrier Percentage} Tryton module adds a cost
@@ -1520,11 +1439,10 @@ method \"on percentage\" on carrier.")
     (build-system python-build-system)
     (arguments (tryton-arguments "carrier_subdivision"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-sale-shipment-cost" ,trytond-sale-shipment-cost)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-carrier" ,trytond-carrier)))
+     (list trytond trytond-carrier))
     (home-page "https://docs.tryton.org/projects/modules-carrier-subdivision")
     (synopsis "Tryton module that allows carriers selection to be restricted
 by subdivision")
@@ -1555,16 +1473,16 @@ or a specific postal code.")
     (build-system python-build-system)
     (arguments (tryton-arguments "carrier_weight"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-purchase-shipment-cost" ,trytond-purchase-shipment-cost)
        ("trytond-sale-shipment-cost" ,trytond-sale-shipment-cost)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-carrier" ,trytond-carrier)
-       ("trytond-company" ,trytond-company)
-       ("trytond-currency" ,trytond-currency)
-       ("trytond-product" ,trytond-product)
-       ("trytond-product-measurements" ,trytond-product-measurements)))
+     (list trytond
+           trytond-carrier
+           trytond-company
+           trytond-currency
+           trytond-product
+           trytond-product-measurements))
     (home-page "https://docs.tryton.org/projects/modules-carrier-weight")
     (synopsis "Tryton module to add cost method based on weight")
     (description "The @emph{Carrier Weight} Tryton module adds a cost method
@@ -1585,20 +1503,20 @@ the weight is greater or equal but smaller than the next line.")
     (build-system python-build-system)
     (arguments (tryton-arguments "commission"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-sale" ,trytond-sale)))
     (propagated-inputs
-     `(("python-simpleeval" ,python-simpleeval)
-       ("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-account-product" ,trytond-account-product)
-       ("trytond-party" ,trytond-party)
-       ("trytond-product" ,trytond-product)))
+     (list python-simpleeval
+           trytond
+           trytond-account
+           trytond-account-invoice
+           trytond-account-product
+           trytond-party
+           trytond-product))
     (home-page "https://docs.tryton.org/projects/modules-commission")
     (synopsis "Tryton module for commission")
-    (description "The @emph{Commission} Tryton module allows to manageq
-commission for sale's agents.  A commission move is created when posting the
+    (description "The @emph{Commission} Tryton module allows manageing a
+commission for sales agents.  A commission move is created when posting the
 invoice, following the agent's commission plan.")
     (license license:gpl3+)))
 
@@ -1614,16 +1532,14 @@ invoice, following the agent's commission plan.")
         (base32 "113wzwjip8virdh9bnh14vl29wb3w7a32skk5yibja819s19ycdn"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "commission_waiting"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-commission" ,trytond-commission)))
+     (list trytond trytond-account trytond-account-invoice
+           trytond-commission))
     (home-page "https://docs.tryton.org/projects/modules-commission-waiting")
     (synopsis "Tryton module for commission waiting")
-    (description "The @emph{Commission Waiting} Tryton module allows to
-generate account move for each commission between the expense/revenue account
+    (description "The @emph{Commission Waiting} Tryton module allows
+generating an account move for each commission between the expense/revenue account
 to a waiting account defined on the agent.")
     (license license:gpl3+)))
 
@@ -1639,11 +1555,9 @@ to a waiting account defined on the agent.")
         (base32 "1q4qdyg32dn00pn3pj2yjl3jhxaqpv7a1cv5s5c95cpy5p46p02n"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "company"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-currency" ,trytond-currency)
-       ("trytond-party" ,trytond-party)))
+     (list trytond trytond-currency trytond-party))
     (home-page "https://www.tryton.org/")
     (synopsis "Tryton module with companies and employees")
     (description
@@ -1666,10 +1580,9 @@ company and employee and extend the user model.")
         (base32 "0aasp12l66zcys9w3qc4ysi2krd5c9x3xxaxvr29j7zl7nz05bwx"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "company_work_time"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)))
+     (list trytond trytond-company))
     (home-page "https://docs.tryton.org/projects/modules-company-work-time")
     (synopsis "Tryton module to add work time on company")
     (description "The @emph{Company Work Time} Tryton module adds work time
@@ -1677,7 +1590,7 @@ management.
 
 The Company Work Time module adds 4 new fields (Hours per Work Day, Hours per
 Work Week, Hours per Work Month, Hours per Work Year) on the company form that
-allow to define how much hours are spent by an employee in a day, a week, a
+allows defining how many hours are spent by an employee in a day, a week, a
 month and a year of work.")
     (license license:gpl3+)))
 
@@ -1694,10 +1607,9 @@ month and a year of work.")
     (build-system python-build-system)
     ;; Doctest contains one test that requires internet access.
     (arguments (tryton-arguments "country" "--no-doctest"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("python-pycountry" ,python-pycountry)
-       ("trytond" ,trytond)))
+     (list python-pycountry trytond))
     (home-page "http://www.tryton.org/")
     (synopsis "Tryton module with countries")
     (description
@@ -1721,12 +1633,11 @@ month and a year of work.")
     ;; Doctest 'scenario_currency_rate_update.rst' fails.
     (arguments (tryton-arguments "currency" "--no-doctest"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("python-forex-python" ,python-forex-python)
        ("python-pycountry" ,python-pycountry)))
     (propagated-inputs
-     `(("python-sql" ,python-sql)
-       ("trytond" ,trytond)))
+     (list python-sql trytond))
     (home-page "https://www.tryton.org/")
     (synopsis "Tryton module with currencies")
     (description
@@ -1749,16 +1660,13 @@ currency and rate.")
         (base32 "1qilj1b9zr35z15313xbvgklf87dgxddvkcnymklwp9n7vs7hrz5"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "customs"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("python-simpleeval" ,python-simpleeval)
-       ("trytond" ,trytond)
-       ("trytond-country" ,trytond-country)
-       ("trytond-currency" ,trytond-currency)
-       ("trytond-product" ,trytond-product)))
+     (list python-simpleeval trytond trytond-country trytond-currency
+           trytond-product))
     (home-page "https://docs.tryton.org/projects/modules-customs")
     (synopsis "Tryton module for customs")
-    (description "The @emph{Customs} Tryton module allows to define customs
+    (description "The @emph{Customs} Tryton module allows defining customs
 duty based on the tariff code.")
     (license license:gpl3+)))
 
@@ -1774,9 +1682,9 @@ duty based on the tariff code.")
         (base32 "1drqiks8r7y58wz0skfa39v9yqx9fi5x0ymrrjd87wybw9q3kv46"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "dashboard"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)))
+     (list trytond))
     (home-page "https://docs.tryton.org/projects/modules-dashboard")
     (synopsis "Tryton module for dashboard")
     (description "The @emph{Dashboard} Tryton module allows users to
@@ -1796,12 +1704,11 @@ configure their dashboard.")
     (build-system python-build-system)
     (arguments (tryton-arguments "edocument_uncefact"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("python-lxml" ,python-lxml)
        ("trytond-account-invoice" ,trytond-account-invoice)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-edocument-unece" ,trytond-edocument-unece)))
+     (list trytond trytond-edocument-unece))
     (home-page "https://docs.tryton.org/projects/modules-edocument-uncefact")
     (synopsis "Tryton module for electronic document UN/CEFACT")
     (description "The @emph{Edocument UN/CEFACT} Tryton module implements
@@ -1824,11 +1731,9 @@ electronic document from UN/CEFACT.  Supported formats are:
         (base32 "1ri3gjvk0h0sljbgh7h2j0rbr3953p3k21l8x6rhrnh1q2rqgi70"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "edocument_unece"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-product" ,trytond-product)))
+     (list trytond trytond-account trytond-product))
     (home-page "https://docs.tryton.org/projects/modules-edocument-unece")
     (synopsis "Tryton module for electronic document UNECE codes")
     (description "The @emph{Edocument UNECE} Tryton module adds several codes
@@ -1855,7 +1760,7 @@ from the UNECE.  Supported formats are:
     (build-system python-build-system)
     (arguments (tryton-arguments "incoterm"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-account" ,trytond-account)
        ("trytond-account-invoice" ,trytond-account-invoice)
        ("trytond-account-invoice-stock" ,trytond-account-invoice-stock)
@@ -1869,9 +1774,7 @@ from the UNECE.  Supported formats are:
        ("trytond-sale-shipment-cost" ,trytond-sale-shipment-cost)
        ("trytond-stock" ,trytond-stock)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)
-       ("trytond-party" ,trytond-party)))
+     (list trytond trytond-company trytond-party))
     (home-page "https://docs.tryton.org/projects/modules-incoterm")
     (synopsis "Tryton module for incoterms")
     (description "The @emph{Incoterm} Tryton module is used to manage the
@@ -1891,14 +1794,13 @@ versions of 2010 and 2020.")
         (base32 "1iylbpp66qjff1mkp0w3a703pracpcv3bv25i2bafkmcjiv9b4jl"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "ldap_authentication"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("python-ldap3" ,python-ldap3)
-       ("trytond" ,trytond)))
+     (list python-ldap3 trytond))
     (home-page "https://docs.tryton.org/projects/modules-ldap-authentication")
     (synopsis "Tryton module to authenticate users through LDAP")
-    (description "The @emph{LDAP Authentication} Tryton module allows to
-authenticate users via a LDAP server.")
+    (description "The @emph{LDAP Authentication} Tryton module allows
+authenticating users via a LDAP server.")
     (license license:gpl3+)))
 
 (define-public trytond-marketing
@@ -1913,9 +1815,9 @@ authenticate users via a LDAP server.")
         (base32 "0mh85sx5xj06zjmf9fhcislkwlp7k54fz14k3ia1xxpw5f953y3c"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "marketing"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)))
+     (list trytond))
     (home-page "https://docs.tryton.org/projects/modules-marketing")
     (synopsis "Tryton module to group marketing features")
     (description "The @emph{Marketing} Tryton module defines the
@@ -1935,12 +1837,10 @@ fundamentals for marketing modules.")
     (build-system python-build-system)
     (arguments (tryton-arguments "marketing_automation"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-party" ,trytond-party)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-marketing" ,trytond-marketing)
-       ("trytond-web-shortener" ,trytond-web-shortener)))
+     (list trytond trytond-marketing trytond-web-shortener))
     (home-page "https://docs.tryton.org/projects/modules-marketing-automation")
     (synopsis "Tryton module to plan, coordinate and manage marketing
 campaigns")
@@ -1961,13 +1861,10 @@ that are executed on selected records.")
         (base32 "07zh1pni4kpm6bsgyizz0a5k64nyxc9laxxaih9py7d24p9pgvky"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "marketing_email"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-marketing" ,trytond-marketing)
-       ("trytond-party" ,trytond-party)
-       ("trytond-web-shortener" ,trytond-web-shortener)
-       ("trytond-web-user" ,trytond-web-user)))
+     (list trytond trytond-marketing trytond-party trytond-web-shortener
+           trytond-web-user))
     (home-page "https://docs.tryton.org/projects/modules-marketing-email")
     (synopsis "Tryton module to manage marketing mailing lists")
     (description "This package provides a Tryton module for managing marketing
@@ -1987,16 +1884,16 @@ mailing lists.")
     (build-system python-build-system)
     (arguments (tryton-arguments "notification_email"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-commission" ,trytond-commission)
        ("trytond-company" ,trytond-company)
        ("trytond-party" ,trytond-party)
        ("trytond-web-user" ,trytond-web-user)))
     (propagated-inputs
-     `(("trytond" ,trytond)))
+     (list trytond))
     (home-page "https://docs.tryton.org/projects/modules-notification-email")
     (synopsis "Tryton module for sending email notifications")
-    (description "The @emph{Notification Email} Tryton module allows to define
+    (description "The @emph{Notification Email} Tryton module allows defining
 email templates which will be sent to a list of recipients when a trigger is
 fired on a record event.  Extra reports from the same record can be attached
 to the email.")
@@ -2015,11 +1912,9 @@ to the email.")
     (build-system python-build-system)
     ;; Doctest 'scenario_party_phone_number.rst' fails.
     (arguments (tryton-arguments "party" "--no-doctest"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("python-stdnum" ,python-stdnum)
-       ("trytond" ,trytond)
-       ("trytond-country" ,trytond-country)))
+     (list python-stdnum trytond trytond-country))
     (home-page "https://www.tryton.org/")
     (synopsis "Tryton module for parties and addresses")
     (description
@@ -2043,11 +1938,10 @@ addresses.")
     (build-system python-build-system)
     (arguments (tryton-arguments "party_avatar"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-company" ,trytond-company)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-party" ,trytond-party)))
+     (list trytond trytond-party))
     (home-page "https://docs.tryton.org/projects/modules-party-avatar")
     (synopsis "Tryton module that adds avatars to parties")
     (description "The @emph{Party Avatar} Tryton module adds an avatar to each
@@ -2066,13 +1960,12 @@ party.")
         (base32 "03lkjmhinxm75schfn596vyg8459fx2spdyh372ikra3zdp8pg75"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "party_relationship"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-party" ,trytond-party)))
+     (list trytond trytond-party))
     (home-page "https://docs.tryton.org/projects/modules-party-relationship")
     (synopsis "Party Relationship module for Tryton")
-    (description "The @emph{Party Relationship} Tryton module allows to define
+    (description "The @emph{Party Relationship} Tryton module allows defining
 different types of relations between parties.")
     (license license:gpl3+)))
 
@@ -2088,10 +1981,9 @@ different types of relations between parties.")
         (base32 "1xmfjiqn7wzwja34abrxn3bj39z0799pdxd8bcz7l5dxrnqxwc38"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "party_siret"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-party" ,trytond-party)))
+     (list trytond trytond-party))
     (home-page "https://docs.tryton.org/projects/modules-party-siret")
     (synopsis "Tryton module to add SIRET/SIREN on parties")
     (description "The @emph{Party SIRET} Tryton module adds the French company
@@ -2110,11 +2002,9 @@ identification numbers SIREN and SIRET on party and address.")
         (base32 "1xvvqxkvzyqy6fn2sj5h3zj0g17igzwx6s18sxkdz72vqz6kpv0l"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "product"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("python-stdnum" ,python-stdnum)
-       ("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)))
+     (list python-stdnum trytond trytond-company))
     (home-page "https://www.tryton.org/")
     (synopsis "Tryton module with products")
     (description
@@ -2137,10 +2027,9 @@ Template and Product.")
         (base32 "0brvwvm3q2ik4vjb9cwd6jxddrmpp2vcafw8k675gy0xbbp1ddik"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "product_attribute"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-product" ,trytond-product)))
+     (list trytond trytond-product))
     (home-page "https://docs.tryton.org/projects/modules-product-attribute")
     (synopsis "Tryton module with product attributes")
     (description "The @emph{Product Attribute} Tryton module defines the
@@ -2159,10 +2048,9 @@ models `Attribute` and `Attribute Set` for products.")
         (base32 "1sq42siqq8w6dd8jnqnkzy3npaf9g2nrdzazkl6nw5dysvpsz8cr"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "product_classification"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-product" ,trytond-product)))
+     (list trytond trytond-product))
     (home-page
      "https://docs.tryton.org/projects/modules-product-classification")
     (synopsis "Tryton module to implement product classification")
@@ -2183,10 +2071,9 @@ reference field classification to the product template.")
         (base32 "1pkk0z4bl1pz2yxs46b18fj35zwa80dnbickjg1ad66n9yrmifk6"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "product_classification_taxonomic"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-product-classification" ,trytond-product-classification)))
+     (list trytond trytond-product-classification))
     (home-page
      "https://docs.tryton.org/projects/modules-product-classification-taxonomic")
     (synopsis "Tryton module to implement product classification taxonomic")
@@ -2206,11 +2093,9 @@ adds the taxonomic classification to the products.")
         (base32 "1zksnawvnbf1l2hkyxw4m85ysjy6i8kbx103sz4p9a9bgvjn3ai6"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "product_cost_fifo"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-product" ,trytond-product)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-product trytond-stock))
     (home-page "https://docs.tryton.org/projects/modules-product-cost-fifo")
     (synopsis "Tryton module to add FIFO cost method")
     (description "The @emph{Product Cost FIFO} Tryton module add a
@@ -2229,11 +2114,9 @@ first-in-first-out option in the `Cost Method` field of the product form.")
         (base32 "01cxx1lmcxwangk3q8lhbkd97w208qxpk96mqxv2hgds77xr42cj"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "product_cost_history"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-product" ,trytond-product)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-product trytond-stock))
     (home-page "https://docs.tryton.org/projects/modules-product-cost-history")
     (synopsis "Tryton module to historize product cost")
     (description "The @emph{Product Cost History} Tryton module adds a `Cost
@@ -2257,15 +2140,12 @@ and assets.")
     (build-system python-build-system)
     (arguments (tryton-arguments "product_cost_warehouse"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-account-stock-continental" ,trytond-account-stock-continental)
        ("trytond-product-cost-fifo" ,trytond-product-cost-fifo)
        ("trytond-product-cost-history" ,trytond-product-cost-history)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)
-       ("trytond-product" ,trytond-product)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-company trytond-product trytond-stock))
     (home-page
      "https://docs.tryton.org/projects/modules-product-cost-warehouse")
     (synopsis "Tryton module to compute product cost per warehouse")
@@ -2286,7 +2166,7 @@ cost price of products to be calculated separately for each warehouse.")
     (build-system python-build-system)
     (arguments (tryton-arguments "product_kit"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-account-invoice" ,trytond-account-invoice)
        ("trytond-account-invoice-stock" ,trytond-account-invoice-stock)
        ("trytond-company" ,trytond-company)
@@ -2294,8 +2174,7 @@ cost price of products to be calculated separately for each warehouse.")
        ("trytond-sale" ,trytond-sale)
        ("trytond-stock" ,trytond-stock)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-product" ,trytond-product)))
+     (list trytond trytond-product))
     (home-page "https://docs.tryton.org/projects/modules-product-kit")
     (synopsis "Tryton module to manage product kits and components")
     (description "The @emph{Product Kit} Tryton Module adds kits and
@@ -2315,10 +2194,9 @@ purchased using a single line.")
         (base32 "0za3p0wxh2kb6f49455pggnpmy0vfiwj95j5c3l63x8q5yp8vdjl"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "product_measurements"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-product" ,trytond-product)))
+     (list trytond trytond-product))
     (home-page "https://docs.tryton.org/projects/modules-product-measurements")
     (synopsis "Tryton module to add measurements to product")
     (description "The @emph{Product Measurements} Tryton module adds this
@@ -2337,12 +2215,9 @@ following measurements to Product:")
         (base32 "1csr2g7wx89kykhm76dyrjn0nicvjmc4razqfqpj9rhdpwppdgr6"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "product_price_list"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("python-simpleeval" ,python-simpleeval)
-       ("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)
-       ("trytond-product" ,trytond-product)))
+     (list python-simpleeval trytond trytond-company trytond-product))
     (home-page "https://docs.tryton.org/projects/modules-product-price-list")
     (synopsis "Tryton module with price list")
     (description "The @emph{Product Price List} Tryton module provides formula
@@ -2362,11 +2237,10 @@ to compute prices per product or category.")
     (build-system python-build-system)
     (arguments (tryton-arguments "product_price_list_dates"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-sale-price-list" ,trytond-sale-price-list)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-product-price-list" ,trytond-product-price-list)))
+     (list trytond trytond-product-price-list))
     (home-page
      "https://docs.tryton.org/projects/modules-product-price-list-dates")
     (synopsis "Tryton module to add dates on price list")
@@ -2386,10 +2260,9 @@ date and end date conditions to the price list lines.")
         (base32 "15jdw9qj2fffml9x4vdlzp3iz5gs2l597hpf5y5p887mmx9aa8cn"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "product_price_list_parent"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-product-price-list" ,trytond-product-price-list)))
+     (list trytond trytond-product-price-list))
     (home-page
      "https://docs.tryton.org/projects/modules-product-price-list-parent")
     (synopsis "Tryton module to use price from another price list")
@@ -2410,12 +2283,9 @@ which contains the unit price computed by the parent price list.")
         (base32 "0ys1wg52bs3i7yjrrkm9ycn07xz7fsb2pqc4a2bj44691pvrclpk"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "production"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)
-       ("trytond-product" ,trytond-product)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-company trytond-product trytond-stock))
     (home-page "https://docs.tryton.org/projects/modules-production")
     (synopsis "Tryton module for production")
     (description "The @emph{Production} Tryton module defines basics
@@ -2434,18 +2304,15 @@ for production management: Bill of material and production order.")
         (base32 "08pp80d4jfw7qmhvds60i63pb2nad489xwkf2ybbzdkrzhcgrrjk"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "production_outsourcing"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-product" ,trytond-product)
-       ("trytond-production" ,trytond-production)
-       ("trytond-production-routing" ,trytond-production-routing)
-       ("trytond-purchase" ,trytond-purchase)))
+     (list trytond trytond-product trytond-production
+           trytond-production-routing trytond-purchase))
     (home-page
      "https://docs.tryton.org/projects/modules-production-outsourcing")
     (synopsis "Tryton module to outsource production")
-    (description "The @emph{Production Outsourcing} Tryton module allows to
-outsource production order per routing.  When such outsourced production is
+    (description "The @emph{Production Outsourcing} Tryton module allows
+outsourcing production orders per routing.  When such outsourced production is
 set to @code{waiting}, a purchase order is created and its cost is added to
 the production.")
     (license license:gpl3+)))
@@ -2463,11 +2330,10 @@ the production.")
     (build-system python-build-system)
     (arguments (tryton-arguments "production_routing"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-stock-supply-production" ,trytond-stock-supply-production)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-production" ,trytond-production)))
+     (list trytond trytond-production))
     (home-page "https://docs.tryton.org/projects/modules-production-routing")
     (synopsis "Tryton module for production routing")
     (description "The @emph{Production Routing} Tryton module defines the
@@ -2486,14 +2352,13 @@ routings for production: Routing, Step and Operation.")
         (base32 "0jl2jnm0lwybwjw2w4nb7ih2s3z7lp00l6zm5vsx4phcvfvzcxgi"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "production_split"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-production" ,trytond-production)))
+     (list trytond trytond-production))
     (home-page "https://docs.tryton.org/projects/modules-production-split")
     (synopsis "Tryton module to split production")
     (description "The @emph{Production Split} Tryton module adds on the
-production a wizard that allows to split it.  The production is split into
+production a wizard that allows splitting it.  The production is split into
 productions of Quantity.  If a count is set, it will be split only this number
 of times.  On occasion there can be a production with the remaining
 quantity.")
@@ -2511,17 +2376,17 @@ quantity.")
         (base32 "01a09snawlr224s5aqhrdkal14qry4hlfsglnsk09yzbw6fx196b"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "production_work"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
-    (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)
-       ("trytond-product" ,trytond-product)
-       ("trytond-production" ,trytond-production)
-       ("trytond-production-routing" ,trytond-production-routing)
-       ("trytond-stock" ,trytond-stock)))
+    (native-inputs (%standard-trytond-native-inputs))
+    (propagated-inputs
+     (list trytond
+           trytond-company
+           trytond-product
+           trytond-production
+           trytond-production-routing
+           trytond-stock))
     (home-page "https://docs.tryton.org/projects/modules-production-work")
     (synopsis "Tryton module for production work")
-    (description "The @emph{Production Work} Tryton module allows to manage
+    (description "The @emph{Production Work} Tryton module allows managing a
 work order for each production.  It also adds in the production cost for the
 work cost.")
     (license license:gpl3+)))
@@ -2538,17 +2403,15 @@ work cost.")
         (base32 "1r7k25wddd381g0p5pj3m8jqvbg8g6ss0ifnhhjya3b6x0d41jz9"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "production_work_timesheet"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-production-routing" ,trytond-production-routing)
-       ("trytond-production-work" ,trytond-production-work)
-       ("trytond-timesheet" ,trytond-timesheet)))
+     (list trytond trytond-production-routing trytond-production-work
+           trytond-timesheet))
     (home-page
      "https://docs.tryton.org/projects/modules-production-work-timesheet")
     (synopsis "Tryton module for timesheet on production work")
-    (description "The @emph{Production Work Timesheet} Tryton module allows to
-enter timesheet for production works.")
+    (description "The @emph{Production Work Timesheet} Tryton module allows
+entering a timesheet for production works.")
     (license license:gpl3+)))
 
 (define-public trytond-project
@@ -2563,13 +2426,10 @@ enter timesheet for production works.")
         (base32 "1xlqzg07csr9a89jjgmk5n4d9dd2s3qahg2x8arf3vqqnrqw1g0f"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "project"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)
-       ("trytond-company-work-time" ,trytond-company-work-time)
-       ("trytond-party" ,trytond-party)
-       ("trytond-timesheet" ,trytond-timesheet)))
+     (list trytond trytond-company trytond-company-work-time
+           trytond-party trytond-timesheet))
     (home-page "https://docs.tryton.org/projects/modules-project")
     (synopsis "Tryton module with projects")
     (description "The @emph{Project} Tryton module provides the concepts of
@@ -2588,16 +2448,16 @@ project and task and the basis for simple project management.")
         (base32 "0wxgpsn5kwfz4f51icmc0p7r615lpr286ifwyz0xnd6rrh0glvmw"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "project_invoice"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
-    (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-account-product" ,trytond-account-product)
-       ("trytond-product" ,trytond-product)
-       ("trytond-project" ,trytond-project)
-       ("trytond-project-revenue" ,trytond-project-revenue)
-       ("trytond-timesheet" ,trytond-timesheet)))
+    (native-inputs (%standard-trytond-native-inputs))
+    (propagated-inputs
+     (list trytond
+           trytond-account
+           trytond-account-invoice
+           trytond-account-product
+           trytond-product
+           trytond-project
+           trytond-project-revenue
+           trytond-timesheet))
     (home-page "https://docs.tryton.org/projects/modules-project-invoice")
     (synopsis "Tryton module to invoice projects")
     (description "The @emph{Project Invoice} Tryton module adds invoice
@@ -2625,12 +2485,9 @@ methods on projects.  The methods are:
         (base32 "0yanvfmg4nmbc322h6w9m7asv4bm95y2wksi4rrvlbs84njgvhnq"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "project_plan"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)
-       ("trytond-project" ,trytond-project)
-       ("trytond-timesheet" ,trytond-timesheet)))
+     (list trytond trytond-company trytond-project trytond-timesheet))
     (home-page "https://docs.tryton.org/projects/modules-project-plan")
     (synopsis "Tryton module to add planning capabilities on projects")
     (description "The @emph{Project Plan} Tryton module adds planning features
@@ -2650,15 +2507,15 @@ on top of the Project module.")
     (build-system python-build-system)
     (arguments (tryton-arguments "project_revenue"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-purchase" ,trytond-purchase)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)
-       ("trytond-product" ,trytond-product)
-       ("trytond-project" ,trytond-project)
-       ("trytond-timesheet" ,trytond-timesheet)
-       ("trytond-timesheet-cost" ,trytond-timesheet-cost)))
+     (list trytond
+           trytond-company
+           trytond-product
+           trytond-project
+           trytond-timesheet
+           trytond-timesheet-cost))
     (home-page "https://docs.tryton.org/projects/modules-project-revenue")
     (synopsis "Tryton module to add revenue on project")
     (description "The @emph{Project Revenue} Tryton module computes revenue
@@ -2681,18 +2538,18 @@ the linked time sheets and the linked purchase lines.")
         (base32 "12drjw30ik3alckn6xrny4814vzi3ysh17wgiawiy9319yahsvay"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "purchase"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
-    (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-account-invoice-stock" ,trytond-account-invoice-stock)
-       ("trytond-account-product" ,trytond-account-product)
-       ("trytond-company" ,trytond-company)
-       ("trytond-currency" ,trytond-currency)
-       ("trytond-party" ,trytond-party)
-       ("trytond-product" ,trytond-product)
-       ("trytond-stock" ,trytond-stock)))
+    (native-inputs (%standard-trytond-native-inputs))
+    (propagated-inputs
+     (list trytond
+           trytond-account
+           trytond-account-invoice
+           trytond-account-invoice-stock
+           trytond-account-product
+           trytond-company
+           trytond-currency
+           trytond-party
+           trytond-product
+           trytond-stock))
     (home-page "https://www.tryton.org/")
     (synopsis "Tryton module for purchase")
     (description
@@ -2714,13 +2571,10 @@ the linked time sheets and the linked purchase lines.")
         (base32 "0bgk5ib7y1nzdrfx00g9qr2lxmjkascvh1caps21r12czz0iz5fx"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "purchase_amendment"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-purchase" ,trytond-purchase)
-       ("trytond-purchase-history" ,trytond-purchase-history)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-account-invoice trytond-purchase
+           trytond-purchase-history trytond-stock))
     (home-page "https://docs.tryton.org/projects/modules-purchase-amendment")
     (synopsis "Tryton module to amend purchases")
     (description "The @emph{Purchase Amendment} Tryton module allows you to
@@ -2750,10 +2604,9 @@ amendment is composed of action lines which can:
         (base32 "18mb1vqmf9c934jp2qjwj4mi0sx99m8005vxc42mjj1f5qkxxsgg"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "purchase_history"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-purchase" ,trytond-purchase)))
+     (list trytond trytond-purchase))
     (home-page "https://docs.tryton.org/projects/modules-purchase-history")
     (synopsis "Tryton module to historize purchases")
     (description "The @emph{Purchase History} Tryton module activates the
@@ -2773,12 +2626,10 @@ time the purchase is reset to draft.")
         (base32 "1qwa8a1vxalvb6r3d1w5wwpa9kx7w8c879x1zb4wwc9nqpdji8v0"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "purchase_invoice_line_standalone"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account-invoice-line-standalone"
-        ,trytond-account-invoice-line-standalone)
-       ("trytond-purchase" ,trytond-purchase)))
+     (list trytond trytond-account-invoice-line-standalone
+           trytond-purchase))
     (home-page
      "https://docs.tryton.org/projects/modules-purchase-invoice-line-standalone")
     (synopsis "Tryton module for standalone invoice line from purchase")
@@ -2798,14 +2649,14 @@ makes purchase to generate invoice lines instead of invoices.")
         (base32 "0y54b677dy1jpmclgxvbzs2zsypzkyvmdbx1i58j16hs24l8h0c8"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "purchase_price_list"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
-    (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-company" ,trytond-company)
-       ("trytond-party" ,trytond-party)
-       ("trytond-product-price-list" ,trytond-product-price-list)
-       ("trytond-purchase" ,trytond-purchase)))
+    (native-inputs (%standard-trytond-native-inputs))
+    (propagated-inputs
+     (list trytond
+           trytond-account
+           trytond-company
+           trytond-party
+           trytond-product-price-list
+           trytond-purchase))
     (home-page "https://docs.tryton.org/projects/modules-purchase-price-list")
     (synopsis "Tryton module to add price list on purchase")
     (description "The @emph{Purchase Price List} Tryton Module allows price
@@ -2825,11 +2676,9 @@ lists to be defined for suppliers.")
     (build-system python-build-system)
     ;; Doctest 'scenario_purchase_request.rst' fails.
     (arguments (tryton-arguments "purchase_request" "--no-doctest"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-product" ,trytond-product)
-       ("trytond-purchase" ,trytond-purchase)))
+     (list trytond trytond-product trytond-purchase))
     (home-page "https://www.tryton.org/")
     (synopsis "Tryton module for purchase requests")
     (description
@@ -2855,15 +2704,15 @@ generated by other process from Tryton.")
     (build-system python-build-system)
     (arguments (tryton-arguments "purchase_request_quotation"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-purchase-requisition" ,trytond-purchase-requisition)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)
-       ("trytond-currency" ,trytond-currency)
-       ("trytond-party" ,trytond-party)
-       ("trytond-product" ,trytond-product)
-       ("trytond-purchase-request" ,trytond-purchase-request)))
+     (list trytond
+           trytond-company
+           trytond-currency
+           trytond-party
+           trytond-product
+           trytond-purchase-request))
     (home-page
      "https://docs.tryton.org/projects/modules-purchase-request-quotation")
     (synopsis "Tryton module for purchase request quotation")
@@ -2885,15 +2734,15 @@ supplier.")
         (base32 "0hiz4q4cq7zz6xxl6bkk0vn71hc2wgasnhda5h41cmi69jphhzzk"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "purchase_requisition"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
-    (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)
-       ("trytond-currency" ,trytond-currency)
-       ("trytond-party" ,trytond-party)
-       ("trytond-product" ,trytond-product)
-       ("trytond-purchase" ,trytond-purchase)
-       ("trytond-purchase-request" ,trytond-purchase-request)))
+    (native-inputs (%standard-trytond-native-inputs))
+    (propagated-inputs
+     (list trytond
+           trytond-company
+           trytond-currency
+           trytond-party
+           trytond-product
+           trytond-purchase
+           trytond-purchase-request))
     (home-page "https://docs.tryton.org/projects/modules-purchase-requisition")
     (synopsis "Tryton module to enter requests for product
 supply (requisition)")
@@ -2917,16 +2766,13 @@ be created.")
     (build-system python-build-system)
     (arguments (tryton-arguments "purchase_secondary_unit"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-account-invoice-secondary-unit"
         ,trytond-account-invoice-secondary-unit)
        ("trytond-stock-secondary-unit" ,trytond-stock-secondary-unit)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-product" ,trytond-product)
-       ("trytond-purchase" ,trytond-purchase)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-account-invoice trytond-product
+           trytond-purchase trytond-stock))
     (home-page
      "https://docs.tryton.org/projects/modules-purchase-secondary-unit")
     (synopsis "Tryton module to add a secondary unit on purchase line")
@@ -2951,17 +2797,14 @@ the product with its factor against the purchase unit.")
     (build-system python-build-system)
     (arguments (tryton-arguments "purchase_shipment_cost"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-account-invoice-stock" ,trytond-account-invoice-stock)
        ("trytond-account-stock-anglo-saxon" ,trytond-account-stock-anglo-saxon)
        ("trytond-account-stock-continental" ,trytond-account-stock-continental)
        ("trytond-purchase" ,trytond-purchase)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-carrier" ,trytond-carrier)
-       ("trytond-currency" ,trytond-currency)
-       ("trytond-product" ,trytond-product)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-carrier trytond-currency trytond-product
+           trytond-stock))
     (home-page
      "https://docs.tryton.org/projects/modules-purchase-shipment-cost")
     (synopsis "Tryton module for purchase shipment costs")
@@ -2981,19 +2824,19 @@ shipment costs to Supplier Shipment.")
         (base32 "0wk5lhj74vl7zs4l3x176iwfqr3jnq37xhiksgnajsrjrl54bgfg"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "sale"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
-    (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-account-invoice-stock" ,trytond-account-invoice-stock)
-       ("trytond-account-product" ,trytond-account-product)
-       ("trytond-company" ,trytond-company)
-       ("trytond-country" ,trytond-country)
-       ("trytond-currency" ,trytond-currency)
-       ("trytond-party" ,trytond-party)
-       ("trytond-product" ,trytond-product)
-       ("trytond-stock" ,trytond-stock)))
+    (native-inputs (%standard-trytond-native-inputs))
+    (propagated-inputs
+     (list trytond
+           trytond-account
+           trytond-account-invoice
+           trytond-account-invoice-stock
+           trytond-account-product
+           trytond-company
+           trytond-country
+           trytond-currency
+           trytond-party
+           trytond-product
+           trytond-stock))
     (home-page "https://docs.tryton.org/projects/modules-sale")
     (synopsis "Tryton module for sale")
     (description "The @emph{Sale} Tryton module helps organise and manage
@@ -3016,14 +2859,11 @@ to be generated that contain aggregated sales figures.")
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_advance_payment"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-sale-supply" ,trytond-sale-supply)))
     (propagated-inputs
-     `(("python-simpleeval" ,python-simpleeval)
-       ("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-sale" ,trytond-sale)))
+     (list python-simpleeval trytond trytond-account
+           trytond-account-invoice trytond-sale))
     (home-page
      "https://docs.tryton.org/projects/modules-sale-advance-payment")
     (synopsis "Tryton module for sale advance payment")
@@ -3043,13 +2883,10 @@ for advance payment management on the sale.")
         (base32 "1vkcyfp30hng2vj1h1pvwrlvp9b59pkzzlmgnj6gvs867l8f2zva"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_amendment"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-sale" ,trytond-sale)
-       ("trytond-sale-history" ,trytond-sale-history)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-account-invoice trytond-sale
+           trytond-sale-history trytond-stock))
     (home-page "https://docs.tryton.org/projects/modules-sale-amendment")
     (synopsis "Tryton module to amend sales")
     (description "The @emph{Sale Amendment} Tryton module allows you to change
@@ -3069,13 +2906,10 @@ composed of action lines which can:")
         (base32 "0wbs7kawrzz39z0jw34ygdb85qja49xfb75ahbwgqd185wf3jvgz"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_complaint"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-company" ,trytond-company)
-       ("trytond-party" ,trytond-party)
-       ("trytond-sale" ,trytond-sale)))
+     (list trytond trytond-account-invoice trytond-company trytond-party
+           trytond-sale))
     (home-page "https://docs.tryton.org/projects/modules-sale-complaint")
     (synopsis "Tryton module for sale complaints")
     (description "The @emph{Sale Complaint} Tryton module defines the
@@ -3094,14 +2928,14 @@ composed of action lines which can:")
         (base32 "1qj4lg5gjsqg27sv6l5afb3rgw46y008ywy6742w9ab6misy57dh"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_credit_limit"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
-    (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account-credit-limit" ,trytond-account-credit-limit)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-company" ,trytond-company)
-       ("trytond-currency" ,trytond-currency)
-       ("trytond-sale" ,trytond-sale)))
+    (native-inputs (%standard-trytond-native-inputs))
+    (propagated-inputs
+     (list trytond
+           trytond-account-credit-limit
+           trytond-account-invoice
+           trytond-company
+           trytond-currency
+           trytond-sale))
     (home-page "https://docs.tryton.org/projects/modules-sale-credit-limit")
     (synopsis "Tryton module for sale credit limit")
     (description "The @emph{Sale Credit Limit} Tryton module adds confirmed
@@ -3121,11 +2955,9 @@ credit limit of the party when confirming a sale.")
         (base32 "0ss976dcx6k2z2gdbhcgdp6d561b2vwwgf83xdl2pc28q2d3rmh6"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_discount"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-product" ,trytond-product)
-       ("trytond-sale" ,trytond-sale)))
+     (list trytond trytond-product trytond-sale))
     (home-page "https://docs.tryton.org/projects/modules-sale-discount")
     (synopsis "Tryton module that manages discount on sale")
     (description "The @emph{Sale Discount} Tryton module adds discount on sale
@@ -3144,17 +2976,17 @@ line.")
         (base32 "0n6fxv573bszhfw1ik16y9754jfp6r2rrliprm6iv7v5ld3r1yqi"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_extra"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
-    (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)
-       ("trytond-product" ,trytond-product)
-       ("trytond-product-price-list" ,trytond-product-price-list)
-       ("trytond-sale" ,trytond-sale)
-       ("trytond-sale-price-list" ,trytond-sale-price-list)))
+    (native-inputs (%standard-trytond-native-inputs))
+    (propagated-inputs
+     (list trytond
+           trytond-company
+           trytond-product
+           trytond-product-price-list
+           trytond-sale
+           trytond-sale-price-list))
     (home-page "https://docs.tryton.org/projects/modules-sale-extra")
     (synopsis "Tryton module for sale extra")
-    (description "The @emph{Sale Extra} Tryton module allows to add extra line
+    (description "The @emph{Sale Extra} Tryton module allows adding an extra line
 on sale based on criteria.")
     (license license:gpl3+)))
 
@@ -3170,15 +3002,15 @@ on sale based on criteria.")
         (base32 "0bbcgm7xs5hmn3axz62jkarhl9v43nk9mk9zldlf9qrfqy89fd80"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_gift_card"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
-    (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-company" ,trytond-company)
-       ("trytond-product" ,trytond-product)
-       ("trytond-sale" ,trytond-sale)
-       ("trytond-stock" ,trytond-stock)))
+    (native-inputs (%standard-trytond-native-inputs))
+    (propagated-inputs
+     (list trytond
+           trytond-account
+           trytond-account-invoice
+           trytond-company
+           trytond-product
+           trytond-sale
+           trytond-stock))
     (home-page "https://docs.tryton.org/projects/modules-sale-gift-card")
     (synopsis "Tryton module to manage gift cards")
     (description "The @emph{Sale Gift Card} Tryton module manages the selling
@@ -3197,10 +3029,9 @@ and redeeming of gift cards.")
         (base32 "1pp5lmmpiqakcmwxv392v1miiisbb0yl55gjb618ngx6ayrd0vdv"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_history"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-sale" ,trytond-sale)))
+     (list trytond trytond-sale))
     (home-page "https://docs.tryton.org/projects/modules-sale-history")
     (synopsis "Tryton module to historize sales")
     (description "The @emph{Sale History} Tryton module activates the
@@ -3220,12 +3051,9 @@ time the sale is reset to draft.")
         (base32 "1h8lcm8dg3i6644c50d9y1lca9x7k8l6cvwzkabvzixm54mflqsx"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_invoice_grouping"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-party" ,trytond-party)
-       ("trytond-sale" ,trytond-sale)))
+     (list trytond trytond-account-invoice trytond-party trytond-sale))
     (home-page
      "https://docs.tryton.org/projects/modules-sale-invoice-grouping")
     (synopsis "Tryton module to group sale invoices")
@@ -3245,17 +3073,17 @@ option to define how invoice lines generated from sales will be grouped.")
         (base32 "0rvj73382h2ha6jqhini0fzpn40w190qij1r7k2fa0c9ls15rrp5"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_opportunity"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
-    (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-company" ,trytond-company)
-       ("trytond-currency" ,trytond-currency)
-       ("trytond-party" ,trytond-party)
-       ("trytond-product" ,trytond-product)
-       ("trytond-sale" ,trytond-sale)
-       ("trytond-stock" ,trytond-stock)))
+    (native-inputs (%standard-trytond-native-inputs))
+    (propagated-inputs
+     (list trytond
+           trytond-account
+           trytond-account-invoice
+           trytond-company
+           trytond-currency
+           trytond-party
+           trytond-product
+           trytond-sale
+           trytond-stock))
     (home-page "https://docs.tryton.org/projects/modules-sale-opportunity")
     (synopsis "Tryton module with leads and opportunities")
     (description "The @emph{Sale Opportunity} Tryton module defines the
@@ -3275,13 +3103,11 @@ lead/opportunity model.")
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_payment"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-account-payment-clearing" ,trytond-account-payment-clearing)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-account-payment" ,trytond-account-payment)
-       ("trytond-sale" ,trytond-sale)))
+     (list trytond trytond-account-invoice trytond-account-payment
+           trytond-sale))
     (home-page "https://docs.tryton.org/projects/modules-sale-payment")
     (synopsis "Tryton module that manage payments on sale")
     (description "The @emph{Sale Payment} Tryton module extends Sale to allow
@@ -3300,13 +3126,10 @@ payments prior to the creation of any invoice.")
         (base32 "0xg0i12a7billpdv13arvc3j5jsbn9gzis8snkl84315ayz3irq4"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_price_list"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)
-       ("trytond-party" ,trytond-party)
-       ("trytond-product-price-list" ,trytond-product-price-list)
-       ("trytond-sale" ,trytond-sale)))
+     (list trytond trytond-company trytond-party
+           trytond-product-price-list trytond-sale))
     (home-page "https://docs.tryton.org/projects/modules-sale-price-list")
     (synopsis "Tryton module to add price list on sale")
     (description "The @emph{Sale Price List} Tryton module adds support for
@@ -3326,12 +3149,10 @@ price list on sale.  A price list can be set per party or as default.")
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_product_customer"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-sale-amendment" ,trytond-sale-amendment)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-product" ,trytond-product)
-       ("trytond-sale" ,trytond-sale)))
+     (list trytond trytond-product trytond-sale))
     (home-page
      "https://docs.tryton.org/projects/modules-sale-product-customer")
     (synopsis "Tryton module to manage customer product on sale")
@@ -3351,19 +3172,19 @@ customer's names and codes for products or variants.")
         (base32 "1bvk14sjlqrlg2wakihrcbz8vl40hr6isbc3ijdsv5g1khl3j74i"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_promotion"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
-    (propagated-inputs
-     `(("python-simpleeval" ,python-simpleeval)
-       ("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)
-       ("trytond-product" ,trytond-product)
-       ("trytond-product-price-list" ,trytond-product-price-list)
-       ("trytond-sale" ,trytond-sale)
-       ("trytond-sale-price-list" ,trytond-sale-price-list)))
+    (native-inputs (%standard-trytond-native-inputs))
+    (propagated-inputs
+     (list python-simpleeval
+           trytond
+           trytond-company
+           trytond-product
+           trytond-product-price-list
+           trytond-sale
+           trytond-sale-price-list))
     (home-page "https://docs.tryton.org/projects/modules-sale-promotion")
     (synopsis "Tryton module for sale promotion")
-    (description "The @emph{Sale Promotion} module allows to apply promotions
-on sale based on criteria.")
+    (description "The @emph{Sale Promotion} module allows applying promotions
+on a sale based on criteria.")
     (license license:gpl3+)))
 
 (define-public trytond-sale-promotion-coupon
@@ -3378,11 +3199,9 @@ on sale based on criteria.")
         (base32 "1hkbsamsf6swx05ij2yh7b3nvmcnlvf9xbz9r7hfs6blx2jkxs3p"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_promotion_coupon"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-sale" ,trytond-sale)
-       ("trytond-sale-promotion" ,trytond-sale-promotion)))
+     (list trytond trytond-sale trytond-sale-promotion))
     (home-page
      "https://docs.tryton.org/projects/modules-sale-promotion-coupon")
     (synopsis "Tryton module for sale promotion coupon")
@@ -3403,17 +3222,14 @@ to the promotions.")
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_secondary_unit"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-account-invoice-secondary-unit"
         ,trytond-account-invoice-secondary-unit)
        ("trytond-sale-product-customer" ,trytond-sale-product-customer)
        ("trytond-stock-secondary-unit" ,trytond-stock-secondary-unit)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-product" ,trytond-product)
-       ("trytond-sale" ,trytond-sale)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-account-invoice trytond-product trytond-sale
+           trytond-stock))
     (home-page "https://docs.tryton.org/projects/modules-sale-secondary-unit")
     (synopsis "Tryton module to add a secondary unit on sale line")
     (description "The @emph{Sale Secondary Unit} Tryton module adds a
@@ -3435,17 +3251,17 @@ unit is defined on the product with its factor against the sale unit.")
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_shipment_cost"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-sale-promotion" ,trytond-sale-promotion)
        ("trytond-stock-shipment-cost" ,trytond-stock-shipment-cost)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-carrier" ,trytond-carrier)
-       ("trytond-currency" ,trytond-currency)
-       ("trytond-product" ,trytond-product)
-       ("trytond-sale" ,trytond-sale)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond
+           trytond-account-invoice
+           trytond-carrier
+           trytond-currency
+           trytond-product
+           trytond-sale
+           trytond-stock))
     (home-page "https://docs.tryton.org/projects/modules-sale-shipment-cost")
     (synopsis "Tryton module for sale shipment cost")
     (description "The @emph{Sale Shipment Cost} Tryton module adds shipment
@@ -3464,12 +3280,9 @@ cost for sale.")
         (base32 "0n1h50j6c4za7a16pgn916cqjxxrd2qs16hb2h42wsp5p2bkfww2"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_shipment_grouping"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-party" ,trytond-party)
-       ("trytond-sale" ,trytond-sale)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-party trytond-sale trytond-stock))
     (home-page
      "https://docs.tryton.org/projects/modules-sale-shipment-grouping")
     (synopsis "Tryton module to group sale stock moves")
@@ -3489,11 +3302,9 @@ define how stock moves generated from sales will be grouped.")
         (base32 "0zigl695hyw7zyk86y1ng6mnvd9v8dbk05c5n6q14yvh4gz3ri5l"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_shipment_tolerance"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-sale" ,trytond-sale)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-sale trytond-stock))
     (home-page
      "https://docs.tryton.org/projects/modules-sale-shipment-tolerance")
     (synopsis "Tryton module to define tolerance for sale shipment")
@@ -3518,13 +3329,10 @@ raised.")
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_stock_quantity"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-stock-supply" ,trytond-stock-supply)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-product" ,trytond-product)
-       ("trytond-sale" ,trytond-sale)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-product trytond-sale trytond-stock))
     (home-page "https://docs.tryton.org/projects/modules-sale-stock-quantity")
     (synopsis "Tryton module to add stock warning on sale")
     (description "The @emph{Sale Stock Quantity} Tryton module checks the
@@ -3546,15 +3354,15 @@ stock forecasts.")
         (base32 "092ljl0ywybwchp4qfki752nclqc6hkx2h99cd1h3g998jv3l72x"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_subscription"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
-    (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-company" ,trytond-company)
-       ("trytond-currency" ,trytond-currency)
-       ("trytond-product" ,trytond-product)
-       ("trytond-sale" ,trytond-sale)))
+    (native-inputs (%standard-trytond-native-inputs))
+    (propagated-inputs
+     (list trytond
+           trytond-account
+           trytond-account-invoice
+           trytond-company
+           trytond-currency
+           trytond-product
+           trytond-sale))
     (home-page "https://docs.tryton.org/projects/modules-sale-subscription")
     (synopsis "Tryton module for subscription")
     (description "The @emph{Sale Subscription} module defines subscription,
@@ -3573,11 +3381,9 @@ services and recurrence rule models.")
         (base32 "1j160sqfvzqv0ah85w2bsc4fixrxhzjq0lbin2bgasmdm3yqfqdj"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_subscription_asset"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-sale-subscription" ,trytond-sale-subscription)
-       ("trytond-stock-lot" ,trytond-stock-lot)))
+     (list trytond trytond-sale-subscription trytond-stock-lot))
     (home-page
      "https://docs.tryton.org/projects/modules-sale-subscription-asset")
     (synopsis "Tryton module to handle asset in the sale subscriptions")
@@ -3597,13 +3403,10 @@ notion of asset to the sale subscription module.")
         (base32 "0lk4pj2fr1q603wnia96i7fzym8pncpvy0hg41q4dkr380nm3qzs"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_supply"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-purchase" ,trytond-purchase)
-       ("trytond-purchase-request" ,trytond-purchase-request)
-       ("trytond-sale" ,trytond-sale)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-purchase trytond-purchase-request trytond-sale
+           trytond-stock))
     (home-page "https://docs.tryton.org/projects/modules-sale-supply")
     (synopsis "Tryton module for sale supply")
     (description "The @emph{Sale Supply} Tryton module adds a \"supply on sale
@@ -3626,16 +3429,16 @@ supply method.")
         (base32 "0gm2m5zm7vrm1vb34svqby7h91ka3mhln3367zmwr17yfyqf68dk"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_supply_drop_shipment"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
-    (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)
-       ("trytond-product" ,trytond-product)
-       ("trytond-purchase" ,trytond-purchase)
-       ("trytond-purchase-request" ,trytond-purchase-request)
-       ("trytond-sale" ,trytond-sale)
-       ("trytond-sale-supply" ,trytond-sale-supply)
-       ("trytond-stock" ,trytond-stock)))
+    (native-inputs (%standard-trytond-native-inputs))
+    (propagated-inputs
+     (list trytond
+           trytond-company
+           trytond-product
+           trytond-purchase
+           trytond-purchase-request
+           trytond-sale
+           trytond-sale-supply
+           trytond-stock))
     (home-page
      "https://docs.tryton.org/projects/modules-sale-supply-drop-shipment")
     (synopsis "Tryton module for sale supply drop shipment")
@@ -3658,11 +3461,9 @@ shipment is created and linked to both the purchase and the sale.")
         (base32 "03v702r4sfmql5yv6414gi2y72psvr3zq3xmx049w5nsywc2585v"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_supply_production"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-production" ,trytond-production)
-       ("trytond-sale-supply" ,trytond-sale-supply)))
+     (list trytond trytond-production trytond-sale-supply))
     (home-page
      "https://docs.tryton.org/projects/modules-sale-supply-production")
     (synopsis "Tryton module to supply sales from production")
@@ -3686,14 +3487,14 @@ back to the default supply method.")
         (base32 "1v6pvkwj6vhjqbz2zn0609kb7kx4g0dsn1xhvax4z2dqigh7ywpx"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "stock"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
-    (propagated-inputs
-     `(("python-simpleeval" ,python-simpleeval)
-       ("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)
-       ("trytond-currency" ,trytond-currency)
-       ("trytond-party" ,trytond-party)
-       ("trytond-product" ,trytond-product)))
+    (native-inputs (%standard-trytond-native-inputs))
+    (propagated-inputs
+     (list python-simpleeval
+           trytond
+           trytond-company
+           trytond-currency
+           trytond-party
+           trytond-product))
     (home-page "https://www.tryton.org/")
     (synopsis "Tryton module for stock and inventory")
     (description
@@ -3719,11 +3520,10 @@ inventory to control and update stock levels.")
     (build-system python-build-system)
     (arguments (tryton-arguments "stock_assign_manual"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-production" ,trytond-production)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-stock))
     (home-page "https://docs.tryton.org/projects/modules-stock-assign-manual")
     (synopsis "Tryton module to assign manually stock move")
     (description "The @emph{Stock Assign Manual} Tryton module adds a wizard
@@ -3744,21 +3544,20 @@ location to pick products.")
     (build-system python-build-system)
     (arguments (tryton-arguments "stock_consignment"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-stock-supply" ,trytond-stock-supply)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-account-invoice-line-standalone"
-        ,trytond-account-invoice-line-standalone)
-       ("trytond-account-invoice-stock" ,trytond-account-invoice-stock)
-       ("trytond-product" ,trytond-product)
-       ("trytond-purchase" ,trytond-purchase)
-       ("trytond-sale" ,trytond-sale)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond
+           trytond-account-invoice
+           trytond-account-invoice-line-standalone
+           trytond-account-invoice-stock
+           trytond-product
+           trytond-purchase
+           trytond-sale
+           trytond-stock))
     (home-page "https://docs.tryton.org/projects/modules-stock-consignment")
     (synopsis "Tryton module to manage consignment stock")
-    (description "The @emph{Stock Consignment} Tryton module allow to manage
+    (description "The @emph{Stock Consignment} Tryton module allows managing
 consignment stock from supplier or at customer warehouse.")
     (license license:gpl3+)))
 
@@ -3774,12 +3573,9 @@ consignment stock from supplier or at customer warehouse.")
         (base32 "1l3ks2jbz95qqbv9jsvakrxgazyq1kkk3fspwvrg1d10rv6xmb58"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "stock_forecast"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)
-       ("trytond-product" ,trytond-product)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-company trytond-product trytond-stock))
     (home-page "https://docs.tryton.org/projects/modules-stock-forecast")
     (synopsis "Tryton module with stock forecasts")
     (description "The @emph{Stock Forecast} Tryton module provide a simple way
@@ -3799,12 +3595,9 @@ other stock mechanisms to anticipate customer demand.")
         (base32 "0mvgday5qhmx89xikklr2ad2xa7zxkiysxa2bqsf76imvx4801q6"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "stock_inventory_location"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)
-       ("trytond-product" ,trytond-product)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-company trytond-product trytond-stock))
     (home-page
      "https://docs.tryton.org/projects/modules-stock-inventory-location")
     (synopsis "Tryton module to create inventories by locations")
@@ -3825,15 +3618,14 @@ wizard \"Create Inventories\" under the \"Inventories\" sub-menu.")
     (build-system python-build-system)
     (arguments (tryton-arguments "stock_location_move"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-stock-supply" ,trytond-stock-supply)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-stock))
     (home-page "https://docs.tryton.org/projects/modules-stock-location-move")
     (synopsis "Tryton module to move storage locations")
-    (description "The @emph{Stock Location} move Tryton module allows to
-define some Locations as movable
+    (description "The @emph{Stock Location} move Tryton module allows
+defining some Locations as movable
 (like palette).")
     (license license:gpl3+)))
 
@@ -3849,10 +3641,9 @@ define some Locations as movable
         (base32 "0lpvgk5s7v30c0hicqc2m6apv8gzd1d6229yv1lrp2g62yp9pa9f"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "stock_location_sequence"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-stock))
     (home-page
      "https://docs.tryton.org/projects/modules-stock-location-sequence")
     (synopsis "Tryton module to add sequence on location")
@@ -3872,11 +3663,9 @@ ordering to location.")
         (base32 "18cwrvnrzjk1wb765gr6hp3plpdpwz1a7cwimjhxi47iw7w5c84g"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "stock_lot"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-product" ,trytond-product)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-product trytond-stock))
     (home-page "https://www.tryton.org/")
     (synopsis "Tryton module for lot of products")
     (description
@@ -3898,12 +3687,9 @@ ordering to location.")
         (base32 "1x8sjhgbakqbgfhrrl7b1b0961riqibs6q6lmgmyrvjyrxx0hpig"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "stock_lot_sled"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-product" ,trytond-product)
-       ("trytond-stock" ,trytond-stock)
-       ("trytond-stock-lot" ,trytond-stock-lot)))
+     (list trytond trytond-product trytond-stock trytond-stock-lot))
     (home-page "https://docs.tryton.org/projects/modules-stock-lot-sled")
     (synopsis "Tryton module for shelf life expiration date of product lots")
     (description "The @emph{Stock Lot Sled} Tryton module adds the \"Shelf
@@ -3925,16 +3711,13 @@ it is no more used to compute the forecast quantity of the stock.")
     (build-system python-build-system)
     (arguments (tryton-arguments "stock_lot_unit"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-production" ,trytond-production)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-product" ,trytond-product)
-       ("trytond-stock" ,trytond-stock)
-       ("trytond-stock-lot" ,trytond-stock-lot)))
+     (list trytond trytond-product trytond-stock trytond-stock-lot))
     (home-page "https://docs.tryton.org/projects/modules-stock-lot-unit")
     (synopsis "Tryton module to define unit on stock lot")
-    (description "The @emph{Stock Lot Unit} Tryton module allows to define a
+    (description "The @emph{Stock Lot Unit} Tryton module allows defining a
 unit and quantity on stock lot.")
     (license license:gpl3+)))
 
@@ -3950,15 +3733,12 @@ unit and quantity on stock lot.")
         (base32 "1jbpl141wyc19v27bcyqsph8p2zf9yqprm55yl642mvwq55bshq8"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "stock_package"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)
-       ("trytond-product" ,trytond-product)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-company trytond-product trytond-stock))
     (home-page "https://docs.tryton.org/projects/modules-stock-package")
     (synopsis "Tryton module for stock packaging")
-    (description "The @emph{Stock Package} Tryton module allows to store
+    (description "The @emph{Stock Package} Tryton module allows storing
 packaging information about customer and supplier return shipments.")
     (license license:gpl3+)))
 
@@ -3974,17 +3754,16 @@ packaging information about customer and supplier return shipments.")
         (base32 "09j7v64wmpiw1bh9byjq4shsd5474rq0mfx7wwak8hn0v5ni7imn"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "stock_package_shipping"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
-    (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-carrier" ,trytond-carrier)
-       ("trytond-product" ,trytond-product)
-       ("trytond-product-measurements" ,trytond-product-measurements)
-       ("trytond-sale-shipment-cost" ,trytond-sale-shipment-cost)
-       ("trytond-stock" ,trytond-stock)
-       ("trytond-stock-package" ,trytond-stock-package)
-       ("trytond-stock-shipment-measurements"
-        ,trytond-stock-shipment-measurements)))
+    (native-inputs (%standard-trytond-native-inputs))
+    (propagated-inputs
+     (list trytond
+           trytond-carrier
+           trytond-product
+           trytond-product-measurements
+           trytond-sale-shipment-cost
+           trytond-stock
+           trytond-stock-package
+           trytond-stock-shipment-measurements))
     (home-page
      "https://docs.tryton.org/projects/modules-stock-package-shipping")
     (synopsis "Tryton base module for interacting with shipping services")
@@ -4004,17 +3783,16 @@ interact with shipping service providers.")
         (base32 "1dw6amd1kvpsldk14m656c0hpazf1ljzz2zri00nqq11d9x8xab5"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "stock_package_shipping_ups"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
-    (propagated-inputs
-     `(("python-requests" ,python-requests)
-       ("trytond" ,trytond)
-       ("trytond-party" ,trytond-party)
-       ("trytond-product" ,trytond-product)
-       ("trytond-stock" ,trytond-stock)
-       ("trytond-stock-package" ,trytond-stock-package)
-       ("trytond-stock-package-shipping" ,trytond-stock-package-shipping)
-       ("trytond-stock-shipment-measurements"
-        ,trytond-stock-shipment-measurements)))
+    (native-inputs (%standard-trytond-native-inputs))
+    (propagated-inputs
+     (list python-requests
+           trytond
+           trytond-party
+           trytond-product
+           trytond-stock
+           trytond-stock-package
+           trytond-stock-package-shipping
+           trytond-stock-shipment-measurements))
     (home-page
      "https://docs.tryton.org/projects/modules-stock-package-shipping-ups")
     (synopsis "UPS connector for the Tryton application plateform")
@@ -4035,12 +3813,10 @@ you to generate the UPS labels per package using the UPS webservices.")
     (build-system python-build-system)
     (arguments (tryton-arguments "stock_product_location"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-production" ,trytond-production)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-product" ,trytond-product)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-product trytond-stock))
     (home-page
      "https://docs.tryton.org/projects/modules-stock-product-location")
     (synopsis "Tryton module to add default location on product")
@@ -4064,12 +3840,10 @@ warehouse.")
     (build-system python-build-system)
     (arguments (tryton-arguments "stock_quantity_early_planning"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-production" ,trytond-production)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-company trytond-stock))
     (home-page
      "https://docs.tryton.org/projects/modules-stock-quantity-early-planning")
     (synopsis "Tryton module to plan earlier shipments and productions")
@@ -4090,13 +3864,10 @@ reducing stock level by proposing to consume earlier.")
     (build-system python-build-system)
     (arguments (tryton-arguments "stock_quantity_issue"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-production" ,trytond-production)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)
-       ("trytond-product" ,trytond-product)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-company trytond-product trytond-stock))
     (home-page "https://docs.tryton.org/projects/modules-stock-quantity-issue")
     (synopsis "Tryton module to manage quantity issue with stock")
     (description "The @emph{Stock Quantity Issue} Tryton module helps to solve
@@ -4115,11 +3886,9 @@ stock quantity issues.")
         (base32 "0s4nryiirdbndm2sz5aqpk2mzw9zxah92gmh6433sj5zyc6a22if"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "stock_secondary_unit"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-product" ,trytond-product)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-product trytond-stock))
     (home-page "https://docs.tryton.org/projects/modules-stock-secondary-unit")
     (synopsis "Tryton module to add a secondary unit on stock move")
     (description "The @emph{Stock Secondary Unit} Tryton module adds a
@@ -4138,11 +3907,9 @@ secondary unit of measure on the stock move.")
         (base32 "13c940pz5ivqj9qk6b5nbid2xfkjnnijjmbz1bn7ic7ydfpiqy8j"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "stock_shipment_cost"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-product" ,trytond-product)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-product trytond-stock))
     (home-page "https://docs.tryton.org/projects/modules-stock-shipment-cost")
     (synopsis "Tryton module for stock shipment cost")
     (description "The @emph{Stock Shipment Cost} Tryton Module adds a shipment
@@ -4163,13 +3930,11 @@ price.  This cost is added to the product margin reports.")
     (build-system python-build-system)
     (arguments (tryton-arguments "stock_shipment_measurements"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-stock-package" ,trytond-stock-package)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-product" ,trytond-product)
-       ("trytond-product-measurements" ,trytond-product-measurements)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-product trytond-product-measurements
+           trytond-stock))
     (home-page
      "https://docs.tryton.org/projects/modules-stock-shipment-measurements")
     (synopsis "Tryton module to add measurements to shipment")
@@ -4190,14 +3955,13 @@ measurement and the quantity of their moves.")
         (base32 "0ynvmmdxgzgg6mn8ckhl7jr9ircq4bpwsl0xpzk83r6mhlvlrxpm"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "stock_split"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-stock))
     (home-page "https://docs.tryton.org/projects/modules-stock-split")
     (synopsis "Tryton module to split stock move")
     (description "The @emph{Stock Split} Tryton module adds on the stock move
-a wizard that allows to split them.  The move is split into moves of Quantity.
+a wizard that allows splitting them.  The move is split into moves of Quantity.
 If Counts is set, it will be split only this number of times.  On occasion
 there can be a move with the remaining quantity.")
     (license license:gpl3+)))
@@ -4214,15 +3978,15 @@ there can be a move with the remaining quantity.")
         (base32 "1p5l3yjjy6l25kk9xnhbl691l3v8gfg9fhc87jc6qszhxlqxk730"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "stock_supply"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
-    (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-party" ,trytond-party)
-       ("trytond-product" ,trytond-product)
-       ("trytond-purchase" ,trytond-purchase)
-       ("trytond-purchase-request" ,trytond-purchase-request)
-       ("trytond-stock" ,trytond-stock)))
+    (native-inputs (%standard-trytond-native-inputs))
+    (propagated-inputs
+     (list trytond
+           trytond-account
+           trytond-party
+           trytond-product
+           trytond-purchase
+           trytond-purchase-request
+           trytond-stock))
     (home-page "https://www.tryton.org/")
     (synopsis "Tryton module for stock supply")
     (description
@@ -4245,14 +4009,13 @@ mechanisms and introduces the concepts of order point.")
         (base32 "1b6q2zk0qnsxdhlqgsnb49prgn6sgqlpr84vy31a2p83mwiz0fqr"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "stock_supply_day"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-purchase" ,trytond-purchase)))
+     (list trytond trytond-purchase))
     (home-page "https://docs.tryton.org/projects/modules-stock-supply-day")
     (synopsis "Tryton module to add supply weekdays")
     (description "The @emph{Stock Supply Day} Tryton module adds a Week Days
-list on the Product Supplier form.  This allow to restrict the supply week
+list on the Product Supplier form.  This allows restricting the supply week
 days for each supplier on each product.  If no days are defined for a supplier
 a supplying may happens at any day of the week.")
     (license license:gpl3+)))
@@ -4269,11 +4032,9 @@ a supplying may happens at any day of the week.")
         (base32 "0i5dc9ddd6mfx3zjlcq16isw52b8qy7igaj2lv8jqvkdrc19yfha"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "stock_supply_forecast"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-stock-forecast" ,trytond-stock-forecast)
-       ("trytond-stock-supply" ,trytond-stock-supply)))
+     (list trytond trytond-stock-forecast trytond-stock-supply))
     (home-page
      "https://docs.tryton.org/projects/modules-stock-supply-forecast")
     (synopsis "Tryton module to add forecast to supply computation")
@@ -4293,13 +4054,10 @@ forecast into account to compute purchase requests.")
         (base32 "1qyvj61hwn3xgjqagnr7d28qkiniw5fp0b5vmn9wii9grf7p4m8d"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "stock_supply_production"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-product" ,trytond-product)
-       ("trytond-production" ,trytond-production)
-       ("trytond-stock" ,trytond-stock)
-       ("trytond-stock-supply" ,trytond-stock-supply)))
+     (list trytond trytond-product trytond-production trytond-stock
+           trytond-stock-supply))
     (home-page
      "https://docs.tryton.org/projects/modules-stock-supply-production")
     (synopsis "Tryton module for stock supply of production")
@@ -4319,14 +4077,12 @@ supply mechanisms via production request.")
         (base32 "0airh5jvcdjbkb71p684dr5qgsnpam2hhmq6gswclgnx3nd1lz6a"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "timesheet"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)
-       ("trytond-company-work-time" ,trytond-company-work-time)))
+     (list trytond trytond-company trytond-company-work-time))
     (home-page "https://docs.tryton.org/projects/modules-timesheet")
     (synopsis "Tryton module with timesheets")
-    (description "The @emph{Timesheet} Tryton module allows to track the time
+    (description "The @emph{Timesheet} Tryton module allows tracking the time
 spent by employees on various works.  This module also comes with several
 reports that show the time spent by employees on works following various time
 periods.")
@@ -4344,12 +4100,9 @@ periods.")
         (base32 "0pjsdgad2plbx8k6mh6mpa6qbz6lp30nnpv7ydyz0gsgb6jz7li6"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "timesheet_cost"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)
-       ("trytond-party" ,trytond-party)
-       ("trytond-timesheet" ,trytond-timesheet)))
+     (list trytond trytond-company trytond-party trytond-timesheet))
     (home-page "https://docs.tryton.org/projects/modules-timesheet-cost")
     (synopsis "Tryton module to add cost on timesheet")
     (description "The @emph{Timesheet Cost} Tryton module adds cost price per
@@ -4368,9 +4121,9 @@ employee.")
         (base32 "11sjz46kagrpig5n05pp52yph4z0l1zm140q9wsagjcmzkx7s6gf"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "user_role"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)))
+     (list trytond))
     (home-page "https://docs.tryton.org/projects/modules-user-role")
     (synopsis "Tryton module to manage roles on users")
     (description "This package provides a Tryton module for assigning roles to
@@ -4392,17 +4145,17 @@ user for a period of time only.")
     (build-system python-build-system)
     (arguments (tryton-arguments "web_shop"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-product-attribute" ,trytond-product-attribute)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-company" ,trytond-company)
-       ("trytond-currency" ,trytond-currency)
-       ("trytond-product" ,trytond-product)
-       ("trytond-sale" ,trytond-sale)
-       ("trytond-stock" ,trytond-stock)
-       ("trytond-web-user" ,trytond-web-user)))
+     (list trytond
+           trytond-account
+           trytond-company
+           trytond-currency
+           trytond-product
+           trytond-sale
+           trytond-stock
+           trytond-web-user))
     (home-page "https://docs.tryton.org/projects/modules-web-shop")
     (synopsis "Tryton module that provides a common base for webshops")
     (description "The @emph{Web Shop} Tryton module facilitates storing
@@ -4422,20 +4175,20 @@ configuration of an online web shop.")
     (build-system python-build-system)
     (arguments (tryton-arguments "web_shop_vue_storefront"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-carrier" ,trytond-carrier)
        ("trytond-product-attribute" ,trytond-product-attribute)
        ("trytond-sale-promotion-coupon" ,trytond-sale-promotion-coupon)
        ("trytond-sale-shipment-cost" ,trytond-sale-shipment-cost)))
     (propagated-inputs
-     `(("python-elasticsearch" ,python-elasticsearch)
-       ("python-stdnum" ,python-stdnum)
-       ("trytond" ,trytond)
-       ("trytond-party" ,trytond-party)
-       ("trytond-product" ,trytond-product)
-       ("trytond-sale" ,trytond-sale)
-       ("trytond-web-shop" ,trytond-web-shop)
-       ("trytond-web-user" ,trytond-web-user)))
+     (list python-elasticsearch
+           python-stdnum
+           trytond
+           trytond-party
+           trytond-product
+           trytond-sale
+           trytond-web-shop
+           trytond-web-user))
     (home-page
      "https://docs.tryton.org/projects/modules-web-shop-vue-storefront")
     (synopsis "Tryton module to integrate with Vue Storefront")
@@ -4455,13 +4208,10 @@ Vue Storefront 1.x.")
         (base32 "0j4yv9q0f39bkyqlcn7kpnlqi9wc4qfjs8zic69za6xw2c86zgzm"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "web_shop_vue_storefront_stripe"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account-payment-stripe" ,trytond-account-payment-stripe)
-       ("trytond-sale-payment" ,trytond-sale-payment)
-       ("trytond-web-shop" ,trytond-web-shop)
-       ("trytond-web-shop-vue-storefront" ,trytond-web-shop-vue-storefront)))
+     (list trytond trytond-account-payment-stripe trytond-sale-payment
+           trytond-web-shop trytond-web-shop-vue-storefront))
     (home-page
      "https://docs.tryton.org/projects/modules-web-shop-vue-storefront-stripe")
     (synopsis "Tryton module to support Stripe payment with Vue Storefront")
@@ -4481,9 +4231,9 @@ provides support of Stripe payment for Vue Storefront integration.")
         (base32 "0vxwnsy7xzxawn7fmm6ykdrhih6ahrwwx6fzd6kz7qbwh4nmqcpk"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "web_shortener"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)))
+     (list trytond))
     (home-page "https://docs.tryton.org/projects/modules-web-shortener")
     (synopsis "Tryton module to plug a URL to an action")
     (description "The @emph{Web Shortener} Tryton module allows URLs to be
@@ -4503,10 +4253,9 @@ optionally triggers action.")
         (base32 "1k07d1kcfm2hwwqcyy8k5mjbhhgrnji0hadn487zsx1zp50r6rds"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "web_user"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-party" ,trytond-party)))
+     (list trytond trytond-party))
     (home-page "https://docs.tryton.org/projects/modules-web-user")
     (synopsis "Tryton module to manage Web users")
     (description "The @emph{Web User} Tryton module provides facilities to
diff --git a/gnu/packages/tv.scm b/gnu/packages/tv.scm
index 88df5c90bf..3927aca776 100644
--- a/gnu/packages/tv.scm
+++ b/gnu/packages/tv.scm
@@ -54,20 +54,20 @@
                 "<sys/stat.h>\n#include <sys/sysmacros.h>"))
              #t)))))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxt" ,libxt)
-       ("libxtst" ,libxtst)
-       ("libxinerama" ,libxinerama)
-       ("libxv" ,libxv)
-       ("libxxf86vm" ,libxxf86vm)
-       ("libpng" ,libpng)
-       ("libxml2" ,libxml2)
-       ("freetype" ,freetype)
-       ("zlib" ,zlib)))
+     (list alsa-lib
+           libx11
+           libxext
+           libxt
+           libxtst
+           libxinerama
+           libxv
+           libxxf86vm
+           libpng
+           libxml2
+           freetype
+           zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://tvtime.sourceforge.net")
     (synopsis "Television viewer")
     (description
diff --git a/gnu/packages/uglifyjs.scm b/gnu/packages/uglifyjs.scm
index 275553bb60..b65d52b8df 100644
--- a/gnu/packages/uglifyjs.scm
+++ b/gnu/packages/uglifyjs.scm
@@ -37,8 +37,7 @@
         (base32 "0q1f91xwwm829cl5v727d4qkxy4yh7wri3pgl89f0m3a4y1n7hi4"))))
     (build-system node-build-system)
     (native-inputs
-     `(("node-acorn" ,node-acorn)
-       ("node-semver" ,node-semver)))
+     (list node-acorn node-semver))
     (home-page "https://lisperator.net/uglifyjs/")
     (synopsis "JavaScript parser / mangler / compressor / beautifier toolkit")
     (description "UglifyJS is a JavaScript compressor/minifier written in
diff --git a/gnu/packages/uml.scm b/gnu/packages/uml.scm
index ad766beece..83f10a08a1 100644
--- a/gnu/packages/uml.scm
+++ b/gnu/packages/uml.scm
@@ -54,8 +54,7 @@
              #t))
          (add-after 'delete-extra-from-classpath 'patch-usr-bin-dot
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((dot (string-append (assoc-ref inputs "graphviz")
-                                       "/bin/dot")))
+             (let ((dot (search-input-file inputs "/bin/dot")))
                (substitute*
                    "src/net/sourceforge/plantuml/cucadiagram/dot/GraphvizLinux.java"
                  (("/usr/bin/dot") dot)))
diff --git a/gnu/packages/unicode.scm b/gnu/packages/unicode.scm
index ef68a27b2b..bda0de04cc 100644
--- a/gnu/packages/unicode.scm
+++ b/gnu/packages/unicode.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2020 Liliana Marie Prikler <liliana.prikler@gmail.com>
 ;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -18,13 +19,62 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages unicode)
+  #:use-module (gnu packages autotools)
+  #:use-module (guix git-download)
   #:use-module (guix licenses)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix utils)
   #:use-module (guix build-system copy)
+  #:use-module (guix build-system gnu)
   #:use-module (guix build-system trivial))
 
+(define-public libunibreak
+  (package
+    (name "libunibreak")
+    (version "5.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/adah1972/libunibreak")
+                    (commit (string-append "libunibreak_"
+                              (string-replace-substring version "." "_")))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0r5dndhwsiy65lmavz3vdgal9nl8g97hbmdjg6zyq3zh5hs87vwf"))))
+    (build-system gnu-build-system)
+    (native-inputs
+      (list autoconf-wrapper
+            automake
+            libtool
+            ucd-next ; required for tests
+            ))
+    (arguments
+     `(#:parallel-tests? #f  ; parallel tests cause non-deterministic
+                             ; build failures
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'pre-check
+           (lambda* (#:key inputs #:allow-other-keys)
+             (for-each (lambda (file)
+                         (copy-file
+                           (search-input-file inputs
+                             (string-append "/share/ucd/auxiliary/"
+                                            file))
+                           (string-append "src/" file)))
+                       '("LineBreakTest.txt"
+                         "WordBreakTest.txt"
+                         "GraphemeBreakTest.txt")))))))
+    (home-page "http://vimgadgets.sourceforge.net/libunibreak/")
+    (synopsis "Unicode line breaking and word breaking algorithms")
+    (description
+     "Libunibreak is an implementation of the line breaking and word
+breaking algorithms as described in Unicode Standard Annex 14 and
+Unicode Standard Annex 29.  It is designed to be used in a generic text
+renderer.")
+    (license zlib)))
+
 (define-public ucd
   (package
     (name "ucd")
@@ -48,6 +98,20 @@ files listing Unicode character properties and related data.  It also includes
 test data for conformance to several important Unicode algorithms.")
     (license unicode)))
 
+(define-public ucd-next
+  (package
+    (inherit ucd)
+    (name "ucd-next")
+    (version "14.0.0")
+    (source
+     (origin
+       (method url-fetch/zipbomb)
+       (uri (string-append "https://www.unicode.org/Public/zipped/" version
+                           "/UCD.zip"))
+       (sha256
+        (base32
+         "001nq9w52ijma0vps40xwy2q6ylpyf1393lzb128ibypnmv54fh3"))))))
+
 (define (unicode-emoji-file name version hash)
   (origin
     (method url-fetch)
diff --git a/gnu/packages/upnp.scm b/gnu/packages/upnp.scm
index cc20ca3e21..22d3f88cd0 100644
--- a/gnu/packages/upnp.scm
+++ b/gnu/packages/upnp.scm
@@ -63,7 +63,7 @@
      ;; the configure phase.
      `(#:make-flags
        (list
-        (string-append "SH=" (assoc-ref %build-inputs "bash") "/bin/sh")
+        (string-append "SH=" (search-input-file %build-inputs "/bin/sh"))
         (string-append "INSTALLPREFIX=" (assoc-ref %outputs "out"))
         ,(string-append "CC=" (cc-for-target))
 
@@ -96,16 +96,16 @@ over IRC, instant messaging, network games, and most server software.")
 (define-public libupnp
   (package
     (name "libupnp")
-    (version "1.14.7")
+    (version "1.14.12")
     (source
      (origin
       (method url-fetch)
       (uri (string-append "https://github.com/pupnp/pupnp/releases/download"
                           "/release-" version "/libupnp-" version".tar.bz2"))
       (sha256
-       (base32 "093wmhk7rdmg2ixyam4hpxa43g25555jgb3i4y7223mwhr5aqrkv"))))
+       (base32 "1b5mnn01cx840paggxrajg63gqzmw8mi4p14jhi9r4qyvam80709"))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (build-system gnu-build-system)
     (arguments
      ;; The tests require a network device capable of multicasting which is
diff --git a/gnu/packages/usb-modeswitch.scm b/gnu/packages/usb-modeswitch.scm
index 2ca4da5e3c..2092e4cdaf 100644
--- a/gnu/packages/usb-modeswitch.scm
+++ b/gnu/packages/usb-modeswitch.scm
@@ -44,8 +44,7 @@
                (base32
                 "1ygahl3r26r38ai8yyblq9nhf3v5i6n6r6672p5wf88wg5h9n0rz"))))
     (build-system trivial-build-system)
-    (native-inputs `(("tar" ,tar)
-                     ("bzip2" ,bzip2)))
+    (native-inputs (list tar bzip2))
     (arguments
      `(#:modules ((guix build utils))
        #:builder
@@ -87,10 +86,8 @@ file for use with USB_ModeSwitch.")
               (sha256
                (base32
                 "0d7s8p92r36danjd15y1zaznf6rbk17kxyg9367nabz56vhxk5ai"))))
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("libusb" ,libusb)
-              ("jimtcl" ,jimtcl)
-              ("usb-modeswitch-data" ,usb-modeswitch-data)))
+    (native-inputs (list pkg-config))
+    (inputs (list libusb jimtcl usb-modeswitch-data))
     (outputs '("out" "dispatcher"))
     (build-system gnu-build-system)
     (arguments
diff --git a/gnu/packages/uucp.scm b/gnu/packages/uucp.scm
index 120417dea1..e10de59aa2 100644
--- a/gnu/packages/uucp.scm
+++ b/gnu/packages/uucp.scm
@@ -142,19 +142,18 @@ between computers.")
          (add-after 'install 'remove-go-references
            (assoc-ref go:%standard-phases 'remove-go-references)))))
     (inputs
-     `(("go-github-com-davecgh-go-xdr" ,go-github-com-davecgh-go-xdr)
-       ("go-github-com-dustin-go-humanize" ,go-github-com-dustin-go-humanize)
-       ("go-github-com-flynn-noise" ,go-github-com-flynn-noise)
-       ("go-github-com-gorhill-cronexpr" ,go-github-com-gorhill-cronexpr)
-       ("go-github-com-hjson-hjson-go" ,go-github-com-hjson-hjson-go)
-       ("go-github-com-klauspost-compress" ,go-github-com-klauspost-compress)
-       ("go-golang-org-x-crypto" ,go-golang-org-x-crypto)
-       ("go-golang-org-x-net" ,go-golang-org-x-net)
-       ("go-golang-org-x-term" ,go-golang-org-x-term)
-       ("go-lukechampine-com-blake3" ,go-lukechampine-com-blake3)))
+     (list go-github-com-davecgh-go-xdr
+           go-github-com-dustin-go-humanize
+           go-github-com-flynn-noise
+           go-github-com-gorhill-cronexpr
+           go-github-com-hjson-hjson-go
+           go-github-com-klauspost-compress
+           go-golang-org-x-crypto
+           go-golang-org-x-net
+           go-golang-org-x-term
+           go-lukechampine-com-blake3))
     (native-inputs
-     `(("go" ,go)
-       ("texinfo" ,texinfo)))
+     (list go texinfo))
     (home-page "http://www.nncpgo.org/")
     (synopsis "Store and forward utilities")
     (description "NNCP (Node to Node copy) is a collection of utilities
diff --git a/gnu/packages/valgrind.scm b/gnu/packages/valgrind.scm
index 4036bd461b..e044541282 100644
--- a/gnu/packages/valgrind.scm
+++ b/gnu/packages/valgrind.scm
@@ -35,7 +35,7 @@
     (name "valgrind")
     ;; Note: check "guix refresh -l -e '(@ (gnu packages valgrind) valgrind)'"
     ;; when updating this package to find which branch it should go to.
-    (version "3.16.1")
+    (version "3.17.0")
     (source (origin
               (method url-fetch)
               (uri (list (string-append "https://sourceware.org/pub/valgrind"
@@ -44,7 +44,7 @@
                                         "/valgrind-" version ".tar.bz2")))
               (sha256
                (base32
-                "1jik19rcd34ip8a5c9nv5wfj8k8maqb8cyclr4xhznq2gcpkl7y9"))
+                "18l5jbk301j3462gipqn9bkfx44mdmwn0pwr73r40gl1irkfqfmd"))
               (patches (search-patches "valgrind-enable-arm.patch"))))
     (build-system gnu-build-system)
     (outputs '("doc"                              ;16 MB
@@ -74,7 +74,7 @@
                (rename-file orig dest)
                #t))))))
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (home-page "https://www.valgrind.org/")
     (synopsis "Debugging and profiling tool suite")
     (description
diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm
index 7d4e245969..95287c7c69 100644
--- a/gnu/packages/version-control.scm
+++ b/gnu/packages/version-control.scm
@@ -1,12 +1,12 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
 ;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com>
-;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013, 2014 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2015, 2016 Mathieu Lirzin <mthl@gnu.org>
 ;;; Copyright © 2014, 2015, 2016 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2014, 2016, 2019 Eric Bavier <bavier@member.fsf.org>
-;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2014, 2016, 2019, 2021 Eric Bavier <bavier@posteo.net>
+;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2015, 2018, 2020, 2021 Kyle Meyer <kyle@kyleam.com>
 ;;; Copyright © 2015, 2017, 2018, 2020 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016, 2017 Leo Famulari <leo@famulari.name>
@@ -40,6 +40,9 @@
 ;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
 ;;; Copyright © 2021 François J. <francois-oss@avalenn.eu>
 ;;; Copyright © 2021 Julien Lepiller <julien@lepiller.eu>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2021 jgart <jgart@dismail.de>
+;;; Copyright © 2021 Foo Chuan Wei <chuanwei.foo@hotmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -111,6 +114,7 @@
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-check)
+  #:use-module (gnu packages python-crypto)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages readline)
@@ -170,6 +174,43 @@ changes to project files over time.  It supports both a distributed workflow
 as well as the classic centralized workflow.")
     (license license:gpl2+)))
 
+(define-public breezy
+  (package
+    (name "breezy")
+    (version "3.2.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://launchpad.net/brz/"
+                           (version-major+minor version) "/" version
+                           "/+download/breezy-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0p6q545xpmxa6fgvkjglfpqpybg33817vhw0a82az8i83bmnicp0"))))
+    (build-system python-build-system)
+    ;; TODO: Maybe regenerate C files with Cython?
+    (inputs
+     `(("gettext" ,gettext-minimal)
+       ("python-configobj" ,python-configobj)
+       ("python-dulwich" ,python-dulwich)
+       ("python-fastimport" ,python-fastimport)
+       ("python-paramiko" ,python-paramiko)
+       ("python-patiencediff" ,python-patiencediff)
+       ("python-pycryptodome" ,python-pycryptodome)
+       ("python-pygpgme" ,python-pygpgme)))
+    (arguments
+     `(#:tests? #f))                    ; no tests in release tarball
+    (home-page "https://www.breezy-vcs.org/")
+    (synopsis "Decentralized revision control system")
+    (description
+     "Breezy (@command{brz}) is a decentralized revision control system.  By
+default, Breezy provides support for both the
+@uref{https://www.bazaar-vcs.org, Bazaar} and @uref{https://www.git-scm.com,
+Git} file formats.  Breezy is backwards compatible with Bazaar's disk format
+and protocols.  One of the key differences with Bazaar is that Breezy runs on
+Python 3.3 and later, rather than on Python 2.")
+    (license license:gpl2+)))
+
 (define git-cross-configure-flags
   '("ac_cv_fread_reads_directories=yes"
     "ac_cv_snprintf_returns_bogus=no"
@@ -611,11 +652,23 @@ everything from small to very large projects with speed and efficiency.")
        ("native-perl" ,perl)
        ("gettext" ,gettext-minimal)))
     (inputs
-     `(("curl" ,curl)                             ;for HTTP(S) access
-       ("expat" ,expat)                           ;for 'git push' over HTTP(S)
-       ("openssl" ,openssl)
-       ("perl" ,perl)
-       ("zlib" ,zlib)))))
+     (list curl ;for HTTP(S) access
+           expat ;for 'git push' over HTTP(S)
+           openssl
+           perl
+           zlib))))
+
+(define-public git-minimal/fixed
+  ;; Version that rarely changes, depended on by Graphene/GTK+.
+  (package/inherit git-minimal
+    (version "2.33.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://kernel.org/software/scm/git/git-"
+                                  version ".tar.xz"))
+              (sha256
+               (base32
+                "0bqz401dyp8wnjj3k5ahrniwk4dalndysqazzwdvv25hqbkacm70"))))))
 
 (define-public git2cl
   (let ((commit "1d74d4c0d933fc69ed5cec838c73502584dead05"))
@@ -633,7 +686,7 @@ everything from small to very large projects with speed and efficiency.")
                   "0wnnbm2sjvfj0qrksj89jlnl69miwl0vk3wrrvgvpclgys3na2g1"))))
       (build-system copy-build-system)
       (inputs
-       `(("perl" ,perl)))
+       (list perl))
       (arguments
        `(#:install-plan '(("git2cl" "bin/git2cl"))))
       (home-page "https://savannah.nongnu.org/projects/git2cl")
@@ -682,12 +735,12 @@ logs to GNU ChangeLog format.")
                    (git (assoc-ref inputs "git")))
                (wrap-program (string-append out "/bin/gl")
                  `("PATH" ":" prefix (,(string-append git "/bin")))
-                 `("PYTHONPATH" ":" =
+                 `("GUIX_PYTHONPATH" ":" =
                    (,(string-append out "/lib/python"
                                     ,(version-major+minor
                                       (package-version python))
                                     "/site-packages:")
-                    ,(getenv "PYTHONPATH"))))
+                    ,(getenv "GUIX_PYTHONPATH"))))
                #t))))))
     (native-inputs
      `(("git-for-tests" ,git-minimal)))
@@ -734,19 +787,20 @@ to GitHub contributions calendar.")
 (define-public libgit2
   (package
     (name "libgit2")
-    (version "1.1.0")
+    (version "1.3.0")
     (source (origin
-              (method url-fetch)
-              (uri (string-append "https://github.com/libgit2/libgit2/"
-                                  "releases/download/v" version
-                                  "/libgit2-" version ".tar.gz"))
+              ;; Since v1.1.1, release artifacts are no longer offered (see:
+              ;; https://github.com/libgit2/libgit2/discussions/5932#discussioncomment-1682729).
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/libgit2/libgit2")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
               (sha256
                (base32
-                "1fjdglkh04qv3b4alg621pxa689i0wlf8m7nf2755zawjr2zhwxd"))
-              (patches (search-patches "libgit2-mtime-0.patch"))
-              (snippet '(begin
-                          (delete-file-recursively "deps") #t))
-              (modules '((guix build utils)))))
+                "0vgpb2175a5dhqiy1iwywwppahgqhi340i8bsvafjpvkw284vazd"))
+              (modules '((guix build utils)))
+              (snippet '(delete-file-recursively "deps"))))
     (build-system cmake-build-system)
     (outputs '("out" "debug"))
     (arguments
@@ -757,8 +811,10 @@ to GitHub contributions calendar.")
              ,@(if (%current-target-system)
                    `((string-append
                       "-DPKG_CONFIG_EXECUTABLE="
-                      (assoc-ref %build-inputs "pkg-config")
-                      "/bin/" ,(%current-target-system) "-pkg-config"))
+                      (search-input-file
+                       %build-inputs
+                       (string-append "/bin/" ,(%current-target-system)
+                                      "-pkg-config"))))
                    '()))
        #:phases
        (modify-phases %standard-phases
@@ -768,8 +824,7 @@ to GitHub contributions calendar.")
                (("#!/bin/sh") (string-append "#!" (which "sh"))))
              (substitute* "tests/clar/fs.h"
                (("/bin/cp") (which "cp"))
-               (("/bin/rm") (which "rm")))
-             #t))
+               (("/bin/rm") (which "rm")))))
          ;; Run checks more verbosely, unless we are cross-compiling.
          (replace 'check
            (lambda* (#:key (tests? #t) #:allow-other-keys)
@@ -778,16 +833,12 @@ to GitHub contributions calendar.")
                  ;; Tests may be disabled if cross-compiling.
                  (format #t "Test suite not run.~%")))))))
     (inputs
-     `(("libssh2" ,libssh2)
-       ("http-parser" ,http-parser)))
+     (list libssh2 http-parser))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python" ,python)))
+     (list pkg-config python))
     (propagated-inputs
      ;; These libraries are in 'Requires.private' in libgit2.pc.
-     `(("openssl" ,openssl)
-       ("pcre2" ,pcre2)
-       ("zlib" ,zlib)))
+     (list openssl pcre2 zlib))
     (home-page "https://libgit2.org/")
     (synopsis "Library providing Git core methods")
     (description
@@ -797,23 +848,23 @@ write native speed custom Git applications in any language with bindings.")
     ;; GPLv2 with linking exception
     (license license:gpl2)))
 
-(define-public libgit2-0.28
+(define-public libgit2-1.1
   (package
     (inherit libgit2)
-    (version "0.28.5")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (string-append "https://github.com/libgit2/libgit2/releases/"
-                            "download/v" version
-                            "/libgit2-" version ".tar.gz"))
-        (sha256
-         (base32
-          "0hjgpqjjmkciw1i8jqkx9q2vhdc4fc99qajhrj2bq8ziwsp6hyrb"))
-        (patches (search-patches "libgit2-mtime-0.patch"))
-        (modules '((guix build utils)))
-        (snippet '(begin
-                    (delete-file-recursively "deps") #t))))))
+    (name "libgit2")
+    (version "1.1.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/libgit2/libgit2/"
+                                  "releases/download/v" version
+                                  "/libgit2-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1fjdglkh04qv3b4alg621pxa689i0wlf8m7nf2755zawjr2zhwxd"))
+              (patches (search-patches "libgit2-mtime-0.patch"))
+              (snippet '(begin
+                          (delete-file-recursively "deps") #t))
+              (modules '((guix build utils)))))))
 
 (define-public git-crypt
   (package
@@ -830,11 +881,9 @@ write native speed custom Git applications in any language with bindings.")
         (base32 "1ba5s0fvmd9hhnfhfsjrm40v0qpxfnwc8vmm55m0k4dryzkzx66q"))))
     (build-system gnu-build-system)
     (inputs
-     `(("git" ,git)
-       ("openssl" ,openssl)))
+     (list git openssl))
     (native-inputs
-     `(("docbook-xsl" ,docbook-xsl)
-       ("libxslt" ,libxslt)))
+     (list docbook-xsl libxslt))
     (arguments
      `(#:tests? #f ; No tests.
        #:phases
@@ -873,16 +922,16 @@ to lock down your entire repository.")
 (define-public git-remote-gcrypt
   (package
    (name "git-remote-gcrypt")
-   (version "1.3")
+   (version "1.4")
    (source (origin
              (method git-fetch)
              (uri (git-reference
                    (url "https://git.spwhitton.name/git-remote-gcrypt")
                    (commit version)))
-             (file-name (string-append name "-" version "-checkout"))
+             (file-name (git-file-name name version))
              (sha256
               (base32
-               "0n8fzvr6y0pxrbvkywlky2bd8jvi0ayp4n9hwi84l1ldmv4a40dh"))))
+               "1x5ca1fi0hyn5w5mnz230x27bqr8j78adnzmlc7cbhzr13q36y5q"))))
    (build-system trivial-build-system)
    (arguments
     `(#:modules ((guix build utils))
@@ -892,8 +941,7 @@ to lock down your entire repository.")
                          (output (assoc-ref %outputs "out"))
                          (bindir (string-append output "/bin")))
                     (install-file (string-append source "/git-remote-gcrypt")
-                                  bindir)
-                    #t))))
+                                  bindir)))))
    (home-page "https://spwhitton.name/tech/code/git-remote-gcrypt/")
    (synopsis "Whole remote repository encryption")
    (description "git-remote-gcrypt is a Git remote helper to push and pull from
@@ -988,16 +1036,13 @@ collaboration using typical untrusted file hosts or services.")
               (lambda (file)
                 (wrap-program (string-append (assoc-ref outputs "out")
                                              "/lib/cgit/filters/" file)
-                  `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH")))))
+                  `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH")))))
               '("syntax-highlighting.py"
                 "html-converters/md2html"))
              #t)))))
     (native-inputs
      ;; For building manpage.
-     `(("asciidoc" ,asciidoc)
-       ("gzip" ,gzip)
-       ("bzip2" ,bzip2)
-       ("xz" ,xz)))
+     (list asciidoc gzip bzip2 xz))
     (inputs
      `(;; Building cgit requires a Git source tree.
        ("git-source"
@@ -1045,12 +1090,10 @@ a built-in cache to decrease server I/O pressure.")
                                (assoc-ref inputs "git") "/bin/git"
                                "'"))
                (("/usr/sbin/sendmail")
-                (string-append (assoc-ref inputs "sendmail")
-                               "/sbin/sendmail")))
-             #t)))))
+                (search-input-file inputs
+                                   "/sbin/sendmail"))))))))
     (inputs
-     `(("git" ,git)
-       ("sendmail" ,sendmail)))
+     (list git sendmail))
     (home-page "https://github.com/git-multimail/git-multimail")
     (synopsis "Send notification emails for Git pushes")
     (description
@@ -1141,10 +1184,9 @@ default) of the repository.")
                       (setenv "TRAVIS" "1")
                       (invoke "nosetests" "-v"))))))
     (propagated-inputs
-     `(("python-smmap" ,python-smmap)))
+     (list python-smmap))
     (native-inputs
-     `(("git" ,git)
-       ("python-nose" ,python-nose)))
+     (list git python-nose))
     (home-page "https://github.com/gitpython-developers/gitdb")
     (synopsis "Python implementation of the Git object database")
     (description
@@ -1157,13 +1199,13 @@ allowing to handle large objects with a small memory footprint.")
 (define-public python-gitpython
   (package
     (name "python-gitpython")
-    (version "3.1.0")
+    (version "3.1.24")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "GitPython" version))
               (sha256
                (base32
-                "1jzllsy9lwc9yibccgv7h9naxisazx2n3zmpy21c8n5xhysw69p4"))))
+                "1rarp97cpjnhi106k2yhb7kygdyflmlgq0icxv3ggzl4wvszv0yz"))))
     (build-system python-build-system)
     (arguments
      `(#:tests? #f ;XXX: Tests can only be run within the GitPython repository.
@@ -1174,15 +1216,13 @@ allowing to handle large objects with a small memory footprint.")
                         (("git_exec_name = \"git\"")
                          (string-append "git_exec_name = \""
                                         (assoc-ref inputs "git")
-                                        "/bin/git\"")))
-                      #t)))))
+                                        "/bin/git\""))))))))
     (inputs
-     `(("git" ,git)))
+     (list git))
     (propagated-inputs
-     `(("python-gitdb" ,python-gitdb)))
+     (list python-gitdb python-typing-extensions))
     (native-inputs
-     `(("python-ddt" ,python-ddt)
-       ("python-nose" ,python-nose)))
+     (list python-ddt python-nose))
     (home-page "https://github.com/gitpython-developers/GitPython")
     (synopsis "Python library for interacting with Git repositories")
     (description
@@ -1249,7 +1289,7 @@ will work.")
                (base32
                 "13q4mnrxr03wz2dkhzy73j384g299m4d545cnhxcaznvdwfany4h"))))
     (build-system gnu-build-system)
-    (inputs `(("shflags" ,shflags)))
+    (inputs (list shflags))
     (arguments
      '(#:tests? #f                    ; no tests
        #:make-flags (list (string-append "prefix="
@@ -1292,9 +1332,9 @@ lot easier.")
         (base32 "1jp74qsgw3f9c8xgaaqvmhfh4ar3n1ns5ncm8glvqyywlxldxi0n"))))
     (build-system python-build-system)
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (inputs
-     `(("git" ,git)))
+     (list git))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1344,13 +1384,9 @@ manipulate them in various ways.")
         (base32 "1gx5nbqyprgy6picns5hxky3lyzkqfq3xhm614f0wcdi58xrsdh0"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("which" ,which)))
+     (list which))
     (inputs
-     `(("git" ,git)
-       ("perl" ,perl)
-       ("perl-test-harness" ,perl-test-harness)
-       ("perl-shell-command" ,perl-shell-command)
-       ("perl-test-most" ,perl-test-most)))
+     (list git perl perl-test-harness perl-shell-command perl-test-most))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -1434,8 +1470,7 @@ also walk each side of a merge and test those changes individually.")
                   (delete 'build)
                   (add-before 'install 'patch-scripts
                     (lambda* (#:key inputs #:allow-other-keys)
-                      (let ((perl (string-append (assoc-ref inputs "perl")
-                                                 "/bin/perl")))
+                      (let ((perl (search-input-file inputs "/bin/perl")))
                         ;; This seems to take care of every shell script that
                         ;; invokes Perl.
                         (substitute* (find-files "." ".*")
@@ -1472,8 +1507,7 @@ also walk each side of a merge and test those changes individually.")
                       (substitute* '("src/lib/Gitolite/Hooks/PostUpdate.pm"
                                      "src/lib/Gitolite/Hooks/Update.pm")
                         (("/usr/bin/perl")
-                         (string-append (assoc-ref inputs "perl")
-                                        "/bin/perl")))
+                         (search-input-file inputs "/bin/perl")))
 
                       (substitute* "src/lib/Gitolite/Common.pm"
                         (("\"ssh-keygen")
@@ -1511,15 +1545,11 @@ also walk each side of a merge and test those changes individually.")
                                   (list out coreutils findutils git))))
                         #t))))))
     (inputs
-     `(("perl" ,perl)
-       ("coreutils" ,coreutils)
-       ("findutils" ,findutils)
-       ("inetutils" ,inetutils)))
+     (list perl coreutils findutils inetutils))
     ;; git and openssh are propagated because trying to patch the source via
     ;; regexp matching is too brittle and prone to false positives.
     (propagated-inputs
-     `(("git" ,git)
-       ("openssh" ,openssh)))
+     (list git openssh))
     (home-page "https://gitolite.com")
     (synopsis "Git access control layer")
     (description
@@ -1578,18 +1608,15 @@ control to Git repositories.")
                  `("GUILE_LOAD_PATH" ":" prefix (,mods))
                  `("GUILE_LOAD_COMPILED_PATH" ":" prefix (,objs)))))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("guile" ,guile-3.0)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake guile-3.0 pkg-config))
     (inputs
-     `(("guile" ,guile-3.0)
-       ("guile-commonmark" ,guile-commonmark)
-       ("guile-fibers" ,guile-fibers)
-       ("guile-gcrypt" ,guile-gcrypt)
-       ("guile-git" ,guile-git)
-       ("guile-syntax-highlight" ,guile-syntax-highlight-for-gitile)
-       ("gnutls" ,gnutls)))
+     (list guile-3.0
+           guile-commonmark
+           guile-fibers
+           guile-gcrypt
+           guile-git
+           guile-syntax-highlight-for-gitile
+           gnutls))
     (home-page "https://git.lepiller.eu/gitile")
     (synopsis "Simple Git forge written in Guile")
     (description "Gitile is a Git forge written in Guile that lets you
@@ -1599,17 +1626,16 @@ visualize your public Git repositories on a web interface.")
 (define-public pre-commit
   (package
     (name "pre-commit")
-    (version "2.15.0")
+    (version "2.16.0")
     (source
      (origin
-       ;; No tests in the PyPI tarball.
-       (method git-fetch)
+       (method git-fetch)               ; no tests in PyPI release
        (uri (git-reference
              (url "https://github.com/pre-commit/pre-commit")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0hyynhg52qq8rd37cwk2gl1jjy7hpqh74zl2lg89kkdhhx0xfiaj"))))
+        (base32 "1sf9mqpiv3pgzi6aar7xfna9v7n63lgm7d7b24fhni0jxn56384b"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -1642,40 +1668,31 @@ visualize your public Git repositories on a web interface.")
                        ;; Ruby and Node tests require node and gem.
                        "--ignore=tests/languages/node_test.py"
                        "--ignore=tests/languages/ruby_test.py"
-                       ;; FIXME: Python tests fail because of distlib version
-                       ;; mismatch.  Even with python-distlib/next it is
-                       ;; pulling version 0.3.0, while 0.3.1 is required.
-                       "--ignore=tests/languages/python_test.py" "-k"
+                       "-k"
                        (string-append
                         ;; TODO: these tests fail with AssertionError.  It may
                         ;; be possible to fix them.
                         "not test_install_existing_hooks_no_overwrite"
                         " and not test_uninstall_restores_legacy_hooks"
-                        " and not test_installed_from_venv")))))
-         (add-before 'reset-gzip-timestamps 'make-gz-writable
-           (lambda* (#:key outputs #:allow-other-keys)
-             ;; Make sure .gz files are writable so that the
-             ;; 'reset-gzip-timestamps' phase can do its work.
-             (let ((out (assoc-ref outputs "out")))
-               (for-each make-file-writable
-                         (find-files out "\\.gz$"))))))))
+                        " and not test_installed_from_venv"
+                        " and not test_healthy_venv_creator"))))))))
     (native-inputs
      `(("git" ,git-minimal)
        ("python-covdefaults" ,python-covdefaults)
        ("python-coverage" ,python-coverage)
-       ("python-distlib" ,python-distlib/next)
+       ("python-distlib" ,python-distlib)
        ("python-pytest" ,python-pytest)
        ("python-pytest-env" ,python-pytest-env)
        ("python-re-assert" ,python-re-assert)
        ("which" ,which)))
     ;; Propagate because pre-commit is also used as a module.
     (propagated-inputs
-     `(("python-cfgv" ,python-cfgv)
-       ("python-identify" ,python-identify)
-       ("python-nodeenv" ,python-nodeenv)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-toml" ,python-toml)
-       ("python-virtualenv" ,python-virtualenv)))
+     (list python-cfgv
+           python-identify
+           python-nodeenv
+           python-pyyaml
+           python-toml
+           python-virtualenv))
     (home-page "https://pre-commit.com/")
     (synopsis "Framework for managing and maintaining pre-commit hooks")
     (description
@@ -1756,18 +1773,16 @@ execution of any hook written in any language before every commit.")
                          ;; output by default.  Prevent timeouts due to silence.
                          "-v"))))))))
     (native-inputs
-     `(("python-docutils", python-docutils)
-       ;; The following inputs are only needed to run the tests.
-       ("python-nose" ,python-nose)
-       ("unzip" ,unzip)
-       ("which" ,which)))
+     (list python-docutils
+           ;; The following inputs are only needed to run the tests.
+           python-nose unzip which))
     (inputs
-     `(("python" ,python)))
+     (list python))
     ;; Find third-party extensions.
     (native-search-paths
      (list (search-path-specification
             (variable "HGEXTENSIONPATH")
-            (files '("lib/python3.8/site-packages/hgext3rd")))))
+            (files '("lib/python3.9/site-packages/hgext3rd")))))
     (home-page "https://www.mercurial-scm.org/")
     (synopsis "Decentralized version control system")
     (description
@@ -1795,7 +1810,7 @@ interface.")
      ;; Tests need mercurial source code.
      '(#:tests? #f))
     (propagated-inputs
-      `(("mercurial" ,mercurial)))
+      (list mercurial))
     (home-page "https://www.mercurial-scm.org/doc/evolution/")
     (synopsis "Flexible evolution of Mercurial history")
     (description "Evolve is a Mercurial extension for faster and safer mutable
@@ -1838,10 +1853,8 @@ history.  It implements the changeset evolution concept for Mercurial.")
          (modify-phases %standard-phases
            (add-after 'unpack 'patch-paths
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((gpg (string-append (assoc-ref inputs "gnupg")
-                                       "/bin/gpg"))
-                   (openssl (string-append (assoc-ref inputs "openssl")
-                                           "/bin/openssl")))
+             (let ((gpg (search-input-file inputs "/bin/gpg"))
+                   (openssl (search-input-file inputs "/bin/openssl")))
                (substitute* "commitsigs.py"
                  (("b'gpg',") (string-append "b'" gpg "',"))
                  (("b'openssl',") (string-append "b'" openssl "',")))))))
@@ -1851,10 +1864,9 @@ history.  It implements the changeset evolution concept for Mercurial.")
                                              (assoc-ref %build-inputs "python"))
                                             "/site-packages/hgext3rd/commitsigs.py")))))
       (native-inputs
-       `(("python" ,python)))
+       (list python))
       (inputs
-       `(("gnupg" ,gnupg)
-         ("openssl" ,openssl)))
+       (list gnupg openssl))
       (home-page "https://foss.heptapod.net/mercurial/commitsigs")
       (synopsis "Automatic signing of changeset hashes")
       (description "This package provides a Mercurial extension for signing
@@ -1876,12 +1888,9 @@ can be used for signing.")
                "0y46dbhiblcvg8k41bdydr3fivghwk73z040ki5825d24ynf67ng"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list perl pkg-config))
     (inputs
-     `(("libxml2" ,libxml2)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list libxml2 openssl zlib))
     (arguments
      `(;; FIXME: Add tests once reverse address lookup is fixed in glibc, see
        ;; https://sourceware.org/bugzilla/show_bug.cgi?id=16475
@@ -1975,9 +1984,9 @@ following features:
                                         "-Wl,-rpath="
                                         out "/lib")))))))))
     (native-inputs
-      `(("pkg-config" ,pkg-config)
-        ;; For the Perl bindings.
-        ("swig" ,swig)))
+      (list pkg-config
+            ;; For the Perl bindings.
+            swig))
     (inputs
       `(("apr" ,apr)
         ("apr-util" ,apr-util)
@@ -2011,7 +2020,17 @@ projects, from individuals to large-scale enterprise operations.")
                "1if5pa4iip2p70gljm54nggfdnsfjxa4cqz8fpj07lvsijary39s"))
              (patches (search-patches "rcs-5.10.0-no-stdin.patch"))))
     (build-system gnu-build-system)
-    (native-inputs `(("ed" ,ed)))
+    (arguments `(#:phases
+                 (modify-phases %standard-phases
+                   (add-after 'install 'install-rcsfreeze
+                     (lambda* (#:key outputs #:allow-other-keys)
+                       (let* ((out (assoc-ref outputs "out"))
+                              (bin (string-append out "/bin"))
+                              (man1 (string-append out "/share/man/man1")))
+                         (chmod "src/rcsfreeze" #o755)
+                         (install-file "src/rcsfreeze" bin)
+                         (install-file "man/rcsfreeze.1" man1)))))))
+    (native-inputs (list ed))
     (home-page "https://www.gnu.org/software/rcs/")
     (synopsis "Per-file local revision control system")
     (description
@@ -2022,6 +2041,49 @@ administration files, for example, which are often inherently local to one
 machine.")
     (license license:gpl3+)))
 
+(define-public rcs-blame
+  (package
+    (name "rcs-blame")
+    (version "1.3.1-20210207")
+    (source (origin
+             (method url-fetch)
+             (uri (string-append
+                   "https://invisible-mirror.net/archives/rcs-blame/blame-"
+                   version ".tgz"))
+             (sha256
+              (base32
+               "1j0brsvdx3hlbwchddafh8r2xmxv5vg4ahpd68v4bb9xhcq6pcih"))))
+    (build-system gnu-build-system)
+    (home-page "https://invisible-island.net/rcs-blame/rcs-blame.html")
+    (synopsis "Display the last modification for each line in an RCS file")
+    (description
+     "@code{blame} outputs an annotated revision from each RCS file.  An
+annotated RCS file describes the revision and date in which each line was
+added to the file, and the author of each line.")
+    (license license:gpl2+)))
+
+(define-public rcshist
+  (package
+    (name "rcshist")
+    (version "1.04-20190106")
+    (source (origin
+             (method url-fetch)
+             (uri (string-append
+                   "https://invisible-mirror.net/archives/rcshist/rcshist-"
+                   version ".tgz"))
+             (sha256
+              (base32
+               "01ab3xwgm934lxr8bm758am3vxwx4hxx7cc9prbgqj5nh30vdg1n"))))
+    (build-system gnu-build-system)
+    (home-page "https://invisible-island.net/rcshist/rcshist.html")
+    (synopsis "Display RCS change history")
+    (description
+     "The @code{rcshist} utility displays the complete revision history of a
+set of RCS files including log messages and patches.  It can also display the
+patch associated with a particular revision of an RCS file.")
+    (license (list license:bsd-2
+                   license:bsd-3))))  ; bsd_queue.h
+
 (define-public cvs
   (package
     (name "cvs")
@@ -2040,8 +2102,7 @@ machine.")
      ;; XXX: The test suite looks flawed, and the package is obsolete anyway.
      '(#:tests? #f
        #:configure-flags (list "--with-external-zlib")))
-    (inputs `(("zlib" ,zlib)
-              ("nano" ,nano)))                    ; the default editor
+    (inputs (list zlib nano))                    ; the default editor
     (home-page "http://cvs.nongnu.org")
     (synopsis "Historical centralized version control system")
     (description
@@ -2074,10 +2135,9 @@ RCS, PRCS, and Aegis packages.")
      `(("git" ,git)
        ("python" ,python-wrapper)))
     (native-inputs
-     `(("asciidoc" ,asciidoc)
-       ;; These are needed for the tests.
-       ("cvs" ,cvs)
-       ("rcs" ,rcs)))
+     (list asciidoc
+           ;; These are needed for the tests.
+           cvs rcs))
     (home-page "http://www.catb.org/esr/cvs-fast-export/")
     (synopsis "Export an RCS or CVS history as a fast-import stream")
     (description "This program analyzes a collection of RCS files in a CVS
@@ -2103,10 +2163,10 @@ masters from remote CVS hosts.")
               (base32
                "0am6axxdvkm2vwgg0gjrd930yv4dlsdbf0rdv0zh5bhy1ir64rph"))))
     (build-system gnu-build-system)
-    (inputs `(("perl" ,perl)))
+    (inputs (list perl))
     (native-inputs
-     `(("emacs" ,emacs-minimal)     ; for `ctags'
-       ("inetutils" ,inetutils)))   ; for `hostname', used in the tests
+     (list emacs-minimal ; for `ctags'
+           inetutils))   ; for `hostname', used in the tests
     (home-page "https://www.gnu.org/software/vc-dwim/")
     (synopsis "Version-control-agnostic ChangeLog diff and commit tool")
     (description
@@ -2173,8 +2233,7 @@ reviewing large, complex patch files.")
                (substitute* "tests/Makefile"
                  (("test-delta ") ""))))))))
     ;; These are needed for the tests
-    (native-inputs `(("git" ,git)
-                     ("cvs" ,cvs)))
+    (native-inputs (list git cvs))
     (home-page "https://www.gnu.org/software/cssc/")
     (synopsis "File-based version control like SCCS")
     (description  "GNU CSSC provides a replacement for the legacy Unix source
@@ -2209,16 +2268,16 @@ accessed and migrated on modern systems.")
        ("zlib" ,zlib)
        ("gettext" ,gettext-minimal)))
     (native-inputs
-     `(("bison" ,bison)
-       ("groff" ,groff)
-       ("perl" ,perl)
-       ;; Various tests require the following:
-       ("cvs" ,cvs)
-       ("flex" ,flex)
-       ("cook" ,cook)
-       ("subversion" ,subversion)
-       ("rcs" ,rcs)
-       ("ed" ,ed)))
+     (list bison
+           groff
+           perl
+           ;; Various tests require the following:
+           cvs
+           flex
+           cook
+           subversion
+           rcs
+           ed))
     (arguments
      `(#:configure-flags (list "--with-no-aegis-configured"
                                "--sharedstatedir=/var/com/aegis"
@@ -2330,18 +2389,17 @@ any project with more than one developer, is one of Aegis's major functions.")
      `(("python" ,python-wrapper)
        ("tzdata" ,tzdata)))
     (native-inputs
-     `( ;; For building documentation.
-       ("asciidoc" ,asciidoc)
-       ("docbook-xml" ,docbook-xml)
-       ("docbook-xsl" ,docbook-xsl)
-       ("libxml2" ,libxml2)
-       ("xmlto" ,xmlto)
-
-       ;; For tests.
-       ("cvs" ,cvs)
-       ("git" ,git)
-       ("mercurial" ,mercurial)
-       ("subversion" ,subversion)))
+     (list ;; For building documentation.
+           asciidoc
+           docbook-xml
+           docbook-xsl
+           libxml2
+           xmlto
+           ;; For tests.
+           cvs
+           git
+           mercurial
+           subversion))
     (home-page "http://www.catb.org/~esr/reposurgeon/")
     (synopsis "Edit version-control repository history")
     (description "Reposurgeon enables risky operations that version-control
@@ -2358,7 +2416,7 @@ from Subversion to any supported Distributed Version Control System (DVCS).")
 (define-public tig
   (package
     (name "tig")
-    (version "2.5.4")
+    (version "2.5.5")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -2366,14 +2424,12 @@ from Subversion to any supported Distributed Version Control System (DVCS).")
                     version "/tig-" version ".tar.gz"))
               (sha256
                (base32
-                "19va4jn46s0vjv9f337g3ad6hy1f285ynl27i9gkd9l70b9q90n4"))))
+                "04skfsw5wkf6p47lis7x4xyfbpjik3id1km75q0fd2g8xa5jrfi4"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("asciidoc" ,asciidoc)
-       ("xmlto" ,xmlto)))
+     (list asciidoc xmlto))
     (inputs
-     `(("ncurses" ,ncurses)
-       ("readline" ,readline)))
+     (list ncurses readline))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -2404,8 +2460,7 @@ output of the @code{git} command.")
        (sha256
         (base32 "1x1cbn2b27h5r0ah5xc06fkalfdci2ngrgd4wibxjw0h88h0nvgq"))))
     (build-system gnu-build-system)
-    (native-inputs `(("autoconf" ,autoconf)
-                     ("automake" ,automake)))
+    (native-inputs (list autoconf automake))
     (home-page "https://github.com/0-wiz-0/findnewest/releases")
     (synopsis "Print the modification time of the latest file")
     (description
@@ -2445,14 +2500,14 @@ modification time.")
                            "perl-uri" "perl-try-tiny"))))
                #t))))))
     (inputs
-     `(("perl" ,perl)
-       ("perl-encode-locale" ,perl-encode-locale)
-       ("perl-html-parser" ,perl-html-parser)
-       ("perl-http-date" ,perl-http-date)
-       ("perl-http-message" ,perl-http-message)
-       ("perl-libwww" ,perl-libwww)
-       ("perl-try-tiny" ,perl-try-tiny)
-       ("perl-uri" ,perl-uri)))
+     (list perl
+           perl-encode-locale
+           perl-html-parser
+           perl-http-date
+           perl-http-message
+           perl-libwww
+           perl-try-tiny
+           perl-uri))
     (home-page "https://myrepos.branchable.com/")
     (synopsis "Multiple repository management tool")
     (description
@@ -2489,8 +2544,7 @@ Mercurial, Bazaar, Darcs, CVS, Fossil, and Veracity.")
                (for-each (lambda (file) (install-file file man))
                          (find-files "." "\\.1$"))))))))
     (propagated-inputs
-     `(("python-packaging" ,python-packaging)
-       ("python-requests" ,python-requests)))
+     (list python-packaging python-requests))
     (home-page
      "https://git.kernel.org/pub/scm/utils/grokmirror/grokmirror.git")
     (synopsis "Framework to smartly mirror git repositories")
@@ -2520,9 +2574,7 @@ based on a manifest file published by servers.")
     (build-system python-build-system)
     (arguments '(#:tests? #f))          ; No tests.
     (inputs
-     `(("python-dkimpy" ,python-dkimpy)
-       ("python-dnspython" ,python-dnspython)
-       ("python-requests" ,python-requests)))
+     (list python-dkimpy python-dnspython python-requests))
     (home-page "https://git.kernel.org/pub/scm/utils/b4/b4.git")
     (synopsis "Tool for working with patches in public-inbox archives")
     (description
@@ -2558,10 +2610,8 @@ Features include:
        #:builder
        (begin
          (use-modules (guix build utils))
-         (let ((bash (string-append (assoc-ref %build-inputs "bash")
-                                    "/bin/bash"))
-               (rclone (string-append (assoc-ref %build-inputs "rclone")
-                                      "/bin/rclone")))
+         (let ((bash (search-input-file %build-inputs "/bin/bash"))
+               (rclone (search-input-file %build-inputs "/bin/rclone")))
            (copy-file (string-append (assoc-ref %build-inputs "source")
                                      "/git-annex-remote-rclone")
                       "git-annex-remote-rclone")
@@ -2572,8 +2622,7 @@ Features include:
                          (string-append %output "/bin"))
            #t))))
     (inputs
-     `(("bash" ,bash)
-       ("rclone" ,rclone)))
+     (list bash rclone))
     (home-page "https://github.com/DanielDent/git-annex-remote-rclone")
     (synopsis "Use rclone-supported cloud storage providers with git-annex")
     (description "This wrapper around rclone makes any destination supported
@@ -2583,28 +2632,27 @@ by rclone usable with git-annex.")
 (define-public fossil
   (package
     (name "fossil")
-    (version "2.11")
+    (version "2.17")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
-              "https://www.fossil-scm.org/index.html/uv/"
-              "fossil-src-" version ".tar.gz"))
+             "https://www.fossil-scm.org/home/tarball/"
+             "f48180f2ff3169651a725396d4f7d667c99a92873b9c3df7eee2f144be7a0721"
+             "/fossil-src-" version ".tar.gz"))
        (sha256
-        (base32 "0c9nzx42wxfmym9vf1pnbdb1c7gp7a7zqky60izxsph7w2xh8nix"))
+        (base32 "1gvx6xzrw1a8snlq9qmr6099r44ifghg0h0fw4jazqmmyxriqzsw"))
        (modules '((guix build utils)))
        (snippet
         '(begin
            (delete-file-recursively "compat") #t))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("tcl" ,tcl)                     ;for configuration only
-       ("which" ,which)                 ;for tests only
-       ("ed" ,ed)))                     ;ditto
+     (list tcl                          ;for configuration only
+           which                        ;for tests only
+           ed))                         ;ditto
     (inputs
-     `(("openssl" ,openssl)
-       ("zlib" ,zlib)
-       ("sqlite" ,sqlite)))
+     (list openssl zlib sqlite-next))   ;SQLite 3.37 or later
     (arguments
      `(#:configure-flags (list "--with-openssl=auto"
                                "--disable-internal-sqlite")
@@ -2613,8 +2661,7 @@ by rclone usable with git-annex.")
                   (add-after 'patch-source-shebangs 'patch-sh
                     (lambda _
                       (substitute* '("auto.def")
-                        (("/bin/sh") (which "sh")))
-                      #t))
+                        (("/bin/sh") (which "sh")))))
                   (replace 'configure
                     (lambda* (#:key outputs (configure-flags '())
                               #:allow-other-keys)
@@ -2624,13 +2671,11 @@ by rclone usable with git-annex.")
                              "./configure"
                              (string-append "--prefix="
                                             (assoc-ref outputs "out"))
-                             configure-flags)
-                      #t))
+                             configure-flags)))
                   (add-before 'check 'test-setup
                     (lambda _
                       (setenv "USER" "guix")
-                      (setenv "TZ" "UTC")
-                      #t)))))
+                      (setenv "TZ" "UTC"))))))
     (home-page "https://fossil-scm.org")
     (synopsis "Software configuration management system")
     (description
@@ -2643,25 +2688,27 @@ a built-in wiki, built-in file browsing, built-in tickets system, etc.")
 (define-public stagit
   (package
     (name "stagit")
-    (version "0.7.2")
+    (version "1.0")
     (source (origin
-              (method url-fetch)
-              (uri (string-append "https://dl.2f30.org/releases/"
-                                  name "-" version ".tar.gz"))
+              (method git-fetch)
+              (uri (git-reference
+                     (url "git://git.codemadness.org/stagit")
+                     (commit version)))
+              (file-name (git-file-name name version))
               (sha256
                (base32
-                "1m3s9g1z9szbjrhm8sic91xh6f2bfpi56rskdkqd5wc4wdycpyi5"))))
+                "0j2242vx5pbwdv79gcjxdbrwii48qphr8gk1lk7szj2irxdql171"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ; No tests
-       #:make-flags (list "CC=gcc"
+       #:make-flags (list (string-append "CC=" ,(cc-for-target))
                           (string-append "PREFIX=" %output))
        #:phases
        (modify-phases %standard-phases
          (delete 'configure)))) ; No configure script
     (inputs
-     `(("libgit2" ,libgit2)))
-    (home-page "https://2f30.org/")
+     (list libgit2))
+    (home-page "https://git.codemadness.org/stagit/")
     (synopsis "Static git page generator")
     (description "Stagit creates static pages for git repositories, the results can
 be served with a HTTP file server of your choice.")
@@ -2686,17 +2733,17 @@ be served with a HTTP file server of your choice.")
                             (assoc-ref %build-inputs "boost")
                             "/lib"))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("boost"     ,boost)
-       ("ftgl"      ,ftgl)
-       ("glew"      ,glew)
-       ("glm"       ,glm)
-       ("glu"       ,glu)
-       ("libpng"    ,libpng)
-       ("mesa"      ,mesa)
-       ("pcre"      ,pcre)
-       ("sdl-union" ,(sdl-union (list sdl2 sdl2-image)))))
+     (list boost
+           ftgl
+           glew
+           glm
+           glu
+           libpng
+           mesa
+           pcre
+           (sdl-union (list sdl2 sdl2-image))))
     (home-page "https://gource.io/")
     (synopsis "3D visualisation tool for source control repositories")
     (description "@code{gource} provides a software version control
@@ -2740,8 +2787,7 @@ specific files and directories.")
              (invoke "./srctest"))))))
     (native-inputs
      ;; For testing.
-     `(("git" ,git)
-       ("perl" ,perl)))
+     (list git perl))
     (inputs
      `(("python" ,python-wrapper)
        ("rcs" ,rcs)))
@@ -2785,8 +2831,7 @@ directory full of HOWTOs.")
                #t))
            (add-before 'install 'patch-git
              (lambda* (#:key inputs #:allow-other-keys)
-               (let ((git (string-append (assoc-ref inputs "git")
-                                         "/bin/git")))
+               (let ((git (search-input-file inputs "/bin/git")))
                  (substitute* "bin/git-when-merged"
                    (("'git'") (string-append "'" git "'")))
                  #t)))
@@ -2794,7 +2839,7 @@ directory full of HOWTOs.")
              (lambda* (#:key outputs #:allow-other-keys)
                (wrap-program (string-append (assoc-ref outputs "out")
                                             "/bin/git-when-merged")
-                 `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH"))))
+                 `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH"))))
                #t)))))
       (inputs
        `(("git" ,git)
@@ -2830,8 +2875,7 @@ how information about the merge is displayed.")
          (delete 'configure)
          (add-before 'install 'patch-git
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((git (string-append (assoc-ref inputs "git")
-                                       "/bin/git")))
+             (let ((git (search-input-file inputs "/bin/git")))
                (substitute* "git-imerge"
                  (("'git'") (string-append "'" git "'")))
                #t)))
@@ -2839,7 +2883,7 @@ how information about the merge is displayed.")
            (lambda* (#:key outputs #:allow-other-keys)
              (wrap-program (string-append (assoc-ref outputs "out")
                                           "/bin/git-imerge")
-               `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH"))))
+               `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH"))))
              #t)))))
     (inputs
      `(("git" ,git)
@@ -2884,16 +2928,16 @@ interrupted, published, and collaborated on while in progress.")
                (invoke "make" "man"))
              #t))
          (add-after 'install 'install-man-pages
-           (lambda _
+           (lambda* (#:key outputs #:allow-other-keys)
              (with-directory-excursion "src/github.com/git-lfs/git-lfs/man"
-               (let ((out (assoc-ref %outputs "out")))
+               (let ((out (assoc-ref outputs "out")))
                  (for-each
                    (lambda (manpage)
                      (install-file manpage (string-append out "/share/man/man1")))
                    (find-files "." "^git-lfs.*\\.1$"))))
              #t)))))
     ;; make `ronn` available during build for man page generation
-    (native-inputs `(("ronn-ng" ,ronn-ng)))
+    (native-inputs (list ronn-ng))
     (home-page "https://git-lfs.github.com/")
     (synopsis "Git extension for versioning large files")
     (description
@@ -2917,7 +2961,7 @@ file contents on a remote server.")
         (base32 "11n46bngvca5wbdbfcxzjhjbfdbad7sgf7h9gf956cb1q8swsdm0"))))
     (build-system copy-build-system)
     (inputs
-     `(("xdg-utils" ,xdg-utils)))
+     (list xdg-utils))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -2983,7 +3027,7 @@ guessing the URL pattern from the @code{origin} remote.")
 
        #:test-target "test"))
     (native-inputs
-     `(("which" ,which)))
+     (list which))
     (synopsis "Historical distributed version-control system")
     (description
      "GNU Arch, aka. @code{tla}, was one of the first free distributed
@@ -2996,7 +3040,7 @@ for historians.")
 (define-public diff-so-fancy
   (package
     (name "diff-so-fancy")
-    (version "1.3.0")
+    (version "1.4.3")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -3005,10 +3049,9 @@ for historians.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0aavxahzha2mms4vdwysk79pa6wzswpfwgsq2hwaxnaf66maahfl"))))
+                "11vkq5njjlvjipic7db44ga875n61drszw1qrdzwxmmfmnz425zz"))))
     (inputs
-     `(("perl" ,perl)
-       ("ncurses" ,ncurses)))
+     (list perl ncurses))
     (build-system copy-build-system)
     (arguments
      '(#:phases
@@ -3018,8 +3061,7 @@ for historians.")
              (let ((lib (string-append (assoc-ref outputs "out") "/lib")))
                (substitute* "diff-so-fancy"
                  (("use lib.*$")
-                  (string-append "use lib '" lib "';\n")))
-               #t)))
+                  (string-append "use lib '" lib "';\n"))))))
          (add-after 'install 'symlink-executable
            (lambda* (#:key outputs inputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out"))
@@ -3027,8 +3069,7 @@ for historians.")
                    (perl (assoc-ref inputs "perl")))
                (wrap-program (string-append out "/bin/diff-so-fancy")
                  `("PATH" ":" prefix (,(string-append ncurses "/bin")
-                                      ,(string-append perl "/bin"))))
-               #t))))
+                                      ,(string-append perl "/bin"))))))))
        #:install-plan
        '(("lib" "lib")
          ("diff-so-fancy" "bin/"))))
@@ -3111,10 +3152,10 @@ defects faster.")
                   "1k03zgcbhl91cgyh4k7ywyjp00y63q4bqbimncqh5b3lni8l8j5l"))))
       (build-system python-build-system)
       (native-inputs
-       `(("git" ,git) ;for tests
-         ("python-pytest" ,python-pytest)))
+       (list git ;for tests
+             python-pytest))
       (propagated-inputs
-       `(("python-pyyaml" ,python-pyyaml)))
+       (list python-pyyaml))
       (arguments
        `(#:phases
          (modify-phases %standard-phases
@@ -3123,11 +3164,10 @@ defects faster.")
                (substitute* "tests/test_main.py"
                  (("'gita\\\\n'") "'source\\n'")
                  (("'gita'") "'source'"))
-               (invoke (string-append (assoc-ref inputs "git") "/bin/git")
+               (invoke (search-input-file inputs "/bin/git")
                        "init")
                (add-installed-pythonpath inputs outputs)
-               (invoke (string-append (assoc-ref inputs "python-pytest")
-                                      "/bin/pytest")
+               (invoke (search-input-file inputs "/bin/pytest")
                        "-vv" "tests")))
            (add-after 'install 'install-shell-completions
              (lambda* (#:key outputs #:allow-other-keys)
@@ -3206,6 +3246,52 @@ makes a directory under a specific root directory (by default @file{~/ghq})
 using the remote repository URL's host and path.")
     (license license:expat)))
 
+(define-public tkrev
+  (package
+    (name "tkrev")
+    (version "9.4.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://sourceforge/tkcvs/tkrev_" version ".tar.gz"))
+       (sha256
+        (base32 "0bpfbhkngzmwy476mfc69mkd94l0m2wxznrn0qzd81s450yxjw2q"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (delete 'build)
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin")))
+               (invoke "wish" "doinstall.tcl" "-nox" out)
+               (install-file "contrib/tkdirdiff" bin))))
+         (add-after 'install 'wrap-programs
+           (lambda* (#:key outputs #:allow-other-keys)
+             (for-each
+               (lambda (file)
+                 (wrap-program (string-append (assoc-ref outputs "out")
+                                              "/bin/" file)
+                   `("PATH" ":" prefix (,(dirname (which "wish"))))))
+               '("tkdiff"
+                 "tkdirdiff"
+                 "tkrev")))))
+       #:tests? #f))
+    (inputs
+     (list tk))
+    (home-page "https://tkcvs.sourceforge.io")
+    (synopsis "Graphical interface to CVS, Subversion, Git, and RCS")
+    (description
+     "TkRev (formerly TkCVS) is a Tcl/Tk-based graphical interface to the CVS,
+Subversion and Git configuration management systems.  It will also help with
+RCS.  It shows the status of the files in the current working directory, and
+has tools for tagging, merging, checking in/out, and other user operations.
+TkDiff is included for browsing and merging your changes.")
+    (license license:gpl2+)))
+
 (define-public git-filter-repo
   (package
     (name "git-filter-repo")
@@ -3228,7 +3314,7 @@ using the remote repository URL's host and path.")
        '(("git-filter-repo" "libexec/git-core/")
          ("Documentation/man1/" "share/man/man1")
          ("/" "" #:include ()))))
-    (inputs `(("python" ,python)))                ;for the shebang
+    (inputs (list python))                ;for the shebang
     (home-page "https://github.com/newren/git-filter-repo")
     (synopsis "Quickly rewrite Git repository history")
     (description
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index df10f3d5dc..5f2cd29255 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -3,9 +3,9 @@
 ;;; Copyright © 2014, 2015, 2016 David Thompson <davet@gnu.org>
 ;;; Copyright © 2014, 2015, 2016, 2018, 2020 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
-;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2015, 2016 Andy Patterson <ajpatter@uwaterloo.ca>
-;;; Copyright © 2015, 2018, 2019, 2020 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015, 2018, 2019, 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015, 2016, 2017, 2018, 2019 Alex Vong <alexvong1995@gmail.com>
 ;;; Copyright © 2016, 2017 Alex Griffin <a@ajgrf.com>
 ;;; Copyright © 2016 Kei Kebreau <kkebreau@posteo.net>
@@ -22,7 +22,7 @@
 ;;; Copyright © 2017 Gregor Giesen <giesen@zaehlwerk.net>
 ;;; Copyright © 2017, 2018, 2019 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2018 Roel Janssen <roel@gnu.org>
-;;; Copyright © 2018, 2019, 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2018, 2019, 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2018, 2019, 2020 Pierre Neidhardt <mail@ambrevar.xyz>
 ;;; Copyright © 2018, 2019, 2020 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2018 Brendan Tildesley <mail@brendan.scot>
@@ -36,12 +36,12 @@
 ;;; Copyright © 2019 Riku Viitanen <riku.viitanen@protonmail.com>
 ;;; Copyright © 2020, 2021 Oleg Pykhalov <go.wigust@gmail.com>
 ;;; Copyright © 2020 Josh Holland <josh@inv.alid.pw>
-;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
+;;; Copyright © 2020, 2021 Brice Waegeneire <brice@waegenei.re>
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
-;;; Copyright © 2020 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2020, 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;; Copyright © 2020 Alex McGrath <amk@amk.ie>
 ;;; Copyright © 2020, 2021 Michael Rohleder <mike@rohleder.de>
-;;; Copyright © 2020, 2021 Vinicius Monego <monego@posteo.net>
+;;; Copyright © 2020, 2021, 2022 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2020 Brett Gilio <brettg@gnu.org>
 ;;; Copyright © 2020 Alexandru-Sergiu Marton <brown121407@posteo.ro>
 ;;; Copyright © 2020 Ivan Kozlov <kanichos@yandex.ru>
@@ -50,9 +50,16 @@
 ;;; Copyright © 2021 Alexey Abramov <levenson@mmer.org>
 ;;; Copyright © 2021 Andrew Tropin <andrew@trop.in>
 ;;; Copyright © 2021 David Wilson <david@daviwil.com>
-;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021,2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2020 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;; Copyright © 2021 Raghav Gururajan <rg@raghavgururajan.name>
+;;; Copyright © 2021 Thiago Jung Bauermann <bauermann@kolabnow.com>
+;;; Copyright © 2021 Petr Hodina <phodina@protonmail.com>
+;;; Copyright © 2021 Robin Templeton <robin@terpri.org>
+;;; Copyright © 2021 Aleksandr Vityazev <avityazev@posteo.org>
+;;; Copyright © 2021 Pradana Aumars <paumars@courrier.dev>
+;;; Copyright © 2022 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
+;;; Copyright © 2022 Bird <birdsite@airmail.cc>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -77,6 +84,7 @@
   #:use-module (guix utils)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix gexp)
   #:use-module (guix git-download)
   #:use-module (guix svn-download)
   #:use-module (guix hg-download)
@@ -99,8 +107,10 @@
   #:use-module (gnu packages avahi)
   #:use-module (gnu packages backup)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages bash)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages boost)
+  #:use-module (gnu packages build-tools)
   #:use-module (gnu packages cdrom)
   #:use-module (gnu packages check)
   #:use-module (gnu packages cmake)
@@ -137,11 +147,13 @@
   #:use-module (gnu packages libreoffice)
   #:use-module (gnu packages libusb)
   #:use-module (gnu packages linux)
+  #:use-module (gnu packages llvm)
   #:use-module (gnu packages lua)
   #:use-module (gnu packages m4)
   #:use-module (gnu packages man)
   #:use-module (gnu packages markup)
   #:use-module (gnu packages maths)
+  #:use-module (gnu packages music)
   #:use-module (gnu packages mp3)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages networking)
@@ -205,10 +217,15 @@
     (arguments
      `(#:configure-flags
        (list
-        "--enable-libv4l2"
+        "CFLAGS=-O2 -g -fcommon"
+        ;; XXX: Broken API.
+        ;; Undeclared variables 'sys_nerr' and 'sys_errlist'.
+        ;; "--enable-libv4l2"
         "--enable-libmpeg2"
         "--enable-libmpeg2convert"
-        "--enable-v4l"
+        ;; XXX: Broken API.
+        ;; Undeclared variables 'sys_nerr' and 'sys_errlist'.
+        ;; "--enable-v4l"
         ;;; XXX: Not available.
         ;"--enable-bktr"
         ;"--enable-sunau"
@@ -270,7 +287,7 @@
        ("lzo" ,lzo)
        ("mjepgtools" ,mjpegtools)
        ("sdl" ,sdl)
-       ("v4l-utils" ,v4l-utils)
+       ;; ("v4l-utils" ,v4l-utils)
        ("x11" ,libx11)
        ("x264" ,libx264)
        ("xaw" ,libxaw)
@@ -281,7 +298,7 @@
        ("zlib" ,zlib)))
     (synopsis "Audio/Video Transcoder")
     (description "Transcode is a fast, versatile and command-line based
-audio/video everything to everything converter primarily focussed on producing
+audio/video everything to everything converter primarily focused on producing
 AVI video files with MP3 audio, but also including a program to read all the
 video and audio streams from a DVD.")
     (home-page
@@ -306,7 +323,7 @@ video and audio streams from a DVD.")
     (arguments
      `(#:tests? #f)) ; Test script is stand-alone
     (native-inputs
-     `(("yasm" ,yasm)))
+     (list yasm))
     (synopsis "SVT HEVC encoder")
     (description "Scalable Video Technology (SVT) is a software-based video
 coding technology that is highly optimized for Intel's Xeon processors.  Using
@@ -385,14 +402,12 @@ video decode, encode and filtering on Intel's Gen graphics hardware platforms.")
                 (string-append doc "/share/gtk-doc"))
                #t))))))
     (native-inputs
-     `(("dash" ,dash)
-       ("gtk-doc" ,gtk-doc/stable)
-       ("pkg-config" ,pkg-config)))
+     (list dash gtk-doc/stable pkg-config))
     (inputs
      `(("glew" ,glew)
        ("opengl" ,mesa)))
     (propagated-inputs
-     `(("orc" ,orc)))
+     (list orc))
     (synopsis "Dirac video codec")
     (description "Schroedinger is a project implementing the Dirac video codec in
 ANSI C code.  It is meant to be highly optimized and portable.  It is developed
@@ -423,49 +438,90 @@ as a joint effort between the BBC and Fluendo.")
         (search-patches "libquicktime-ffmpeg.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("doxygen" ,doxygen)
-       ("pkg-config" ,pkg-config)))
+     (list gettext-minimal doxygen pkg-config))
     (inputs
-     `(("alsa" ,alsa-lib)
-       ("ffmpeg" ,ffmpeg)
-       ("gtk+-2" ,gtk+-2)
-       ("lame" ,lame)
-       ("libdv" ,libdv)
-       ("libjpeg" ,libjpeg-turbo)
-       ("libpng" ,libpng)
-       ("libvorbis" ,libvorbis)
-       ("opengl" ,mesa)
-       ("schroedinger" ,schroedinger)
-       ("x11" ,libx11)
-       ("x264" ,libx264)
-       ("xaw" ,libxaw)
-       ("xv" ,libxv)))
+     (list alsa-lib
+           ffmpeg
+           gtk+-2
+           lame
+           libdv
+           libjpeg-turbo
+           libpng
+           libvorbis
+           mesa
+           schroedinger
+           libx11
+           libx264
+           libxaw
+           libxv))
     (synopsis "Quick Time Library")
     (description "The goal of this project is to enhance the quicktime4linux
 library.")
     (home-page "http://libquicktime.sourceforge.net/")
     (license license:lgpl2.1+)))
 
+(define-public mjpg-streamer
+  (package
+    (name "mjpg-streamer")
+    (version "1.0.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/jacksonliam/mjpg-streamer")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0w81pg228154blzbzr590xwhcll9baxyqxl6wxrgqsi9cd7pzq23"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  (with-directory-excursion "mjpg-streamer-experimental/www"
+                    (for-each delete-file-recursively
+                              '("cambozola.jar"
+                                "JQuerySpinBtn.css"
+                                "JQuerySpinBtn.js"
+                                "jquery.js"
+                                "jquery.rotate.js"
+                                "jquery.ui.core.min.js"
+                                "jquery.ui.custom.css"
+                                "jquery.ui.tabs.min.js"
+                                "jquery.ui.widget.min.js")))))))
+    (build-system cmake-build-system)
+    (arguments
+     '(#:tests? #f                                ; no test suite
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'chdir
+           (lambda* _
+             (chdir "mjpg-streamer-experimental"))))))
+    (inputs (list libjpeg-turbo))
+    (synopsis "Stream JPEG over IP network")
+    (description "Command line application that copies JPEG frames from one or
+more input plugins to multiple output plugins.  It can be used to stream JPEG
+files over an IP-based network from a webcam to various types of viewers such
+as Chrome, Firefox, Cambozola, VLC, mplayer, and other software capable of
+receiving MJPG streams.")
+    (home-page "https://github.com/jacksonliam/mjpg-streamer")
+    (license license:gpl2+)))
+
 (define-public mjpegtools
   (package
     (name "mjpegtools")
-    (version "2.1.0")
+    (version "2.2.1")
     (source
      (origin
        (method url-fetch)
        (uri
-        (string-append "https://sourceforge.net/projects/" name "/files/"
+        (string-append "https://sourceforge.net/projects/mjpeg/files/"
                        name "/" version "/" name "-" version ".tar.gz"))
        (sha256
-        (base32 "0kvhxr5hkabj9v7ah2rzkbirndfqdijd9hp8v52c1z6bxddf019w"))))
+        (base32 "16pl22ra3x2mkp8p3awslhlhj46b1nq9g89301gb0q4rgmnm705i"))))
     (build-system gnu-build-system)
     (inputs
-     `(("gtk+-2" ,gtk+-2)
-       ("libdv" ,libdv)
-       ("libpng" ,libpng)
-       ("libquicktime" ,libquicktime)
-       ("sdl" ,sdl)))
+     (list gtk+-2 libdv libjpeg-turbo libpng libquicktime sdl))
+    (native-inputs
+     (list pkg-config))
     (synopsis "Tools for handling MPEG")
     (description "Mjpeg tools is a suite of programs which support video capture,
 editing, playback, and compression to MPEG of MJPEG video.  Edit, play and
@@ -519,10 +575,7 @@ and mmsh protocols.")
                (("is != NULL") "is.good()"))
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
      `(("ffmpeg" ,ffmpeg-2.8)
        ("jpeg" ,libjpeg-turbo)
@@ -597,13 +650,9 @@ other software.")
        #:configure-flags
        (list "--with-sdl2")))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
-     `(("linux-headers" ,linux-libre-headers)
-       ("sdl2" ,sdl2)))
+     `(("sdl2" ,sdl2)))
     (synopsis "Touchscreen access library")
     (description "TSLib is a cross-platform library that provides access to
 touchscreen devices and the ability to apply filters to their input events.")
@@ -648,9 +697,9 @@ touchscreen devices and the ability to apply filters to their input events.")
              (mkdir-p (string-append out "/bin"))
              #t))))))
   (native-inputs
-   `(("nasm" ,nasm)))
+   (list nasm))
   (inputs
-   `(("liba52" ,liba52)))
+   (list liba52))
   (synopsis "Advanced MPEG editing and manipulation library")
   (description "Libmpeg3 decodes MP2, MP3, AC3, MPEG-1 video, MPEG-2 video,
 and DVD footage in a single library.  It supports many esoteric features like
@@ -672,12 +721,22 @@ stream decoding")
                 "1vkh19gb76agvh4h87ysbrgy82hrw88lnsvhynjf4vng629dmpgv"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("makeinfo" ,texinfo)))
+     `(("config" ,config)
+       ("makeinfo" ,texinfo)))
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'update-config-scripts
+           (lambda* (#:key inputs native-inputs #:allow-other-keys)
+             ;; Replace outdated config.guess and config.sub.
+             (for-each (lambda (file)
+                         (install-file
+                          (search-input-file
+                           (or native-inputs inputs)
+                           (string-append "/bin/" file)) "."))
+                       '("config.guess" "config.sub"))))
          (replace 'configure
                   (lambda* (#:key build inputs outputs #:allow-other-keys)
                     ;; This old `configure' script doesn't support
@@ -688,17 +747,6 @@ stream decoding")
                       (invoke "./configure"
                               (string-append "--prefix=" out)
                               (string-append "--build=" build)
-                              ;; The ancient config.guess is unable to
-                              ;; guess the host triplet on mips64el.
-                              ,@(if (string=? "mips64el-linux"
-                                              (%current-system))
-                                    '("--host=mips64el-unknown-linux-gnu")
-                                    '())
-                              ;; The same is also true with aarch64.
-                              ,@(if (string=? "aarch64-linux"
-                                              (%current-system))
-                                    '("--host=aarch64-unknown-linux-gnu")
-                                    '())
                               (string-append "--with-ncurses="
                                              ncurses))))))))
     (home-page "http://aa-project.sourceforge.net/aalib/")
@@ -712,7 +760,7 @@ old-fashioned output methods with powerful ascii-art renderer.")
 (define-public celluloid
   (package
     (name "celluloid")
-    (version "0.21")
+    (version "0.22")
     (source
      (origin
        (method url-fetch)
@@ -720,15 +768,12 @@ old-fashioned output methods with powerful ascii-art renderer.")
                            "/releases/download/v" version
                            "/celluloid-" version ".tar.xz"))
        (sha256
-        (base32 "1dvyf21iv9hrgv99szc24386vkacmhidm5b4d31hqqjs3b6di692"))))
+        (base32 "18g596ja8g0fy79pmxqdlzqzb0f9xq69ik4bah8g2ppipfvxbpjz"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("libepoxy" ,libepoxy)
-       ("mpv" ,mpv)))
+     (list gtk libepoxy mpv))
     (home-page "https://github.com/celluloid-player/celluloid")
     (synopsis "GTK+ frontend for the mpv media player")
     (description "Celluloid is a simple GTK+ frontend for the mpv media player.
@@ -757,9 +802,7 @@ mpv's powerful playback capabilities.")
     (build-system gnu-build-system)
     ;; XXX We need to run ./bootstrap because of the build system fixes above.
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (arguments `(#:configure-flags '("--enable-shared")
                  #:phases
                  (modify-phases %standard-phases
@@ -777,7 +820,7 @@ television and DVD.  It is also known as AC-3.")
 (define-public libaom
   (package
     (name "libaom")
-    (version "3.1.2")
+    (version "3.2.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -786,12 +829,10 @@ television and DVD.  It is also known as AC-3.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1c7yrhb56qj5c3lz54n1f9cbrvdr32g2yrrdiiy72sib8ycq9hz2"))))
+                "0fmnbzpl481i7kchx4hbvb507r5pfgyrzfrlrs7jk3bicycm75qv"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("perl" ,perl)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python))) ; to detect the version
+     (list perl pkg-config python)) ; to detect the version
     (arguments
      `(#:tests? #f                      ; downloads many video clips
        #:configure-flags
@@ -830,12 +871,12 @@ shared library and encoder and decoder command-line executables.")
                (base32
                 "1m3i322n2fwgrvbs1yck7g5md1dbg22bhq5xdqmjpz5m7j4jxqny"))))
     (inputs
-     `(("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxv" ,libxv)
-       ("libsm" ,libsm)
-       ("libice" ,libice)
-       ("sdl" ,sdl)))
+     (list libx11
+           libxext
+           libxv
+           libsm
+           libice
+           sdl))
     (build-system gnu-build-system)
     (home-page "http://libmpeg2.sourceforge.net/")
     (synopsis "MPEG1 and MPEG2 video decoder library")
@@ -863,8 +904,7 @@ shared library and encoder and decoder command-line executables.")
                   "1i6v9h3xx9pi0zmlj3anwwjxqa63sbhy9crrif8dphipwfn9hyg5"))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("pkg-config" ,pkg-config)
-         ("nasm" ,nasm)))
+       (list pkg-config nasm))
       ;; TODO: Add gpac input
       (arguments
        `(#:tests? #f                    ;no check target
@@ -923,24 +963,24 @@ H.264 (MPEG-4 AVC) video streams.")
     (build-system gnu-build-system)
     (outputs '("out" "gui")) ; "mkvtoolnix-gui" brings the closure size from ~300 MB to 1.5+ GB.
     (inputs
-     `(("boost" ,boost)
-       ("bzip2" ,bzip2)
-       ("cmark" ,cmark)
-       ("libebml" ,libebml)
-       ("file" ,file)
-       ("flac" ,flac)
-       ("fmt" ,fmt)
-       ("libdvdread" ,libdvdread)
-       ("libmatroska" ,libmatroska)
-       ("libogg" ,libogg)
-       ("libvorbis" ,libvorbis)
-       ("lzo" ,lzo)
-       ("pcre2" ,pcre2)
-       ("pugixml" ,pugixml)
-       ("qtbase" ,qtbase-5)
-       ("qtmultimedia" ,qtmultimedia)
-       ("utfcpp" ,utfcpp)
-       ("zlib" ,zlib)))
+     (list boost
+           bzip2
+           cmark
+           libebml
+           file
+           flac
+           fmt
+           libdvdread
+           libmatroska
+           libogg
+           libvorbis
+           lzo
+           pcre2
+           pugixml
+           qtbase-5
+           qtmultimedia
+           utfcpp
+           zlib))
     (native-inputs
      `(("docbook-xsl" ,docbook-xsl)
        ("gettext" ,gettext-minimal)
@@ -973,10 +1013,8 @@ H.264 (MPEG-4 AVC) video streams.")
              #t)))
          (add-before 'configure 'add-googletest
            (lambda* (#:key inputs #:allow-other-keys)
-             (symlink
-               (string-append (assoc-ref inputs "googletest")
-                              "/include/gtest") "lib/gtest")
-             #t))
+             (symlink (search-input-directory inputs "/include/gtest")
+                      "lib/gtest")))
          (replace 'build
            (lambda _
              (let ((-j (list "-j" (number->string (parallel-job-count)))))
@@ -1026,7 +1064,7 @@ H.264 (MPEG-4 AVC) video streams.")
 (define-public pipe-viewer
   (package
     (name "pipe-viewer")
-    (version "0.1.4")
+    (version "0.1.7")
     (source
      (origin
        (method git-fetch)
@@ -1036,7 +1074,7 @@ H.264 (MPEG-4 AVC) video streams.")
          (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0d8b3gcr9dndw8qlwfrm0wgp4vjmn8fwd151kmzz7kkw57f5jfch"))))
+        (base32 "1fh8b77vchpsar88dszsz5h1gzd4jz0v902igp2880vnpvacmfi9"))))
     (build-system perl-build-system)
     (arguments
      `(#:imported-modules
@@ -1058,7 +1096,10 @@ H.264 (MPEG-4 AVC) video streams.")
              (substitute* (find-files "lib" "\\.pm$")
                (("\"youtube-dl\"")
                 (format #f "\"~a/bin/youtube-dl\""
-                        (assoc-ref inputs "youtube-dl"))))
+                        (assoc-ref inputs "youtube-dl")))
+               (("\"yt-dlp\"")
+                (format #f "\"~a/bin/yt-dlp\""
+                        (assoc-ref inputs "yt-dlp"))))
              (substitute* (find-files "bin" ".*-viewer$")
                (("'ffmpeg'")
                 (format #f "'~a/bin/ffmpeg'"
@@ -1071,7 +1112,10 @@ H.264 (MPEG-4 AVC) video streams.")
                         (assoc-ref inputs "xdg-utils")))
                (("'youtube-dl'")
                 (format #f "'~a/bin/youtube-dl'"
-                        (assoc-ref inputs "youtube-dl"))))))
+                        (assoc-ref inputs "youtube-dl")))
+               (("'yt-dlp'")
+                (format #f "'~a/bin/yt-dlp'"
+                        (assoc-ref inputs "yt-dlp"))))))
          (add-after 'install 'install-xdg
            (lambda args
              (apply (assoc-ref copy:%standard-phases 'install)
@@ -1093,40 +1137,39 @@ H.264 (MPEG-4 AVC) video streams.")
                      `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib)))
                 (find-files bin-dir))))))))
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-simple" ,perl-test-simple)))
+     (list perl-module-build perl-test-pod perl-test-simple))
     (inputs
-     `(("perl-data-dump" ,perl-data-dump)
-       ("perl-digest-md5" ,perl-digest-md5)
-       ("perl-encode" ,perl-encode)
-       ("ffmpeg" ,ffmpeg)
-       ("perl-file-path" ,perl-file-path)
-       ("perl-file-sharedir" ,perl-file-sharedir)
-       ("perl-getopt-long" ,perl-getopt-long)
-       ("perl-gtk3" ,perl-gtk3)
-       ("perl-http-message" ,perl-http-message)
-       ("perl-json" ,perl-json)
-       ("perl-json-xs" ,perl-json-xs)
-       ("perl-libwww" ,perl-libwww)
-       ("perl-lwp-protocol-https" ,perl-lwp-protocol-https)
-       ("perl-lwp-useragent-cached" ,perl-lwp-useragent-cached)
-       ("perl-memoize" ,perl-memoize)
-       ("perl-mime-base64" ,perl-mime-base64)
-       ("perl-pathtools" ,perl-pathtools)
-       ("perl-scalar-list-utils" ,perl-scalar-list-utils)
-       ("perl-storable" ,perl-storable)
-       ("perl-term-ansicolor" ,perl-term-ansicolor)
-       ("perl-term-readline-gnu" ,perl-term-readline-gnu)
-       ("perl-text-parsewords" ,perl-text-parsewords)
-       ("perl-text-tabs+wrap" ,perl-text-tabs+wrap)
-       ("perl-unicode-linebreak" ,perl-unicode-linebreak)
-       ("perl-uri-escape" ,perl-uri-escape)
-       ("wget" ,wget)
-       ("xdg-utils" ,xdg-utils)
-       ("youtube-dl" ,youtube-dl)))
+     (list perl-data-dump
+           perl-digest-md5
+           perl-encode
+           ffmpeg
+           perl-file-path
+           perl-file-sharedir
+           perl-getopt-long
+           perl-gtk3
+           perl-http-message
+           perl-json
+           perl-json-xs
+           perl-libwww
+           perl-lwp-protocol-https
+           perl-lwp-useragent-cached
+           perl-memoize
+           perl-mime-base64
+           perl-pathtools
+           perl-scalar-list-utils
+           perl-storable
+           perl-term-ansicolor
+           perl-term-readline-gnu
+           perl-text-parsewords
+           perl-text-tabs+wrap
+           perl-unicode-linebreak
+           perl-uri-escape
+           wget
+           xdg-utils
+           youtube-dl
+           yt-dlp))
     (propagated-inputs
-     `(("dconf" ,dconf)))
+     (list dconf))
     (home-page "https://github.com/trizen/pipe-viewer")
     (synopsis "CLI+GUI YouTube Client")
     (description "Pipe-Viewer is a lightweight application for searching and
@@ -1253,8 +1296,7 @@ designed to encode video or images into an H.265 / HEVC encoded bitstream.")
     (arguments
      '(#:configure-flags '("--disable-static")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("nasm" ,nasm)))
+     (list pkg-config nasm))
     (propagated-inputs
      `(("freetype" ,freetype)
        ("fribidi" ,fribidi)
@@ -1282,15 +1324,15 @@ ASS/SSA (Advanced Substation Alpha/SubStation Alpha) subtitle format.")
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--disable-static")))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (inputs
-     `(("freeglut" ,freeglut)
-       ("ftgl" ,ftgl)
-       ("imlib2" ,imlib2)
-       ("libx11" ,libx11)
-       ("mesa" ,mesa)
-       ("ncurses" ,ncurses)
-       ("zlib" ,zlib)))
+     (list freeglut
+           ftgl
+           imlib2
+           libx11
+           mesa
+           ncurses
+           zlib))
     (home-page "http://caca.zoy.org/wiki/libcaca")
     (synopsis "Colour ASCII-art library")
     (description "libcaca is a graphics library that outputs text instead of
@@ -1313,9 +1355,7 @@ canvas operations.")
                 "0sjz0s0nrv7jcpvh1i432x3jza0y5yycmzw84cfncb2qby0i62rs"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (home-page "https://www.videolan.org/developers/libdca.html")
     (synopsis "DTS Coherent Acoustics decoder")
     (description "libdca is a library for decoding DTS Coherent Acoustics
@@ -1335,8 +1375,8 @@ streams.")
                (base32
                 "1fl96f2xh2slkv1i1ix7kqk576a0ak1d33cylm0mbhm96d0761d3"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("libxv" ,libxv)))
+    (native-inputs (list pkg-config))
+    (inputs (list libxv))
     (home-page "http://libdv.sourceforge.net/")
     (synopsis "DV video (IEC 61834 and SMPTE 314M) codec")
     (description "The Quasar DV codec (libdv) is a software codec for DV
@@ -1359,7 +1399,7 @@ SMPTE 314M.")
         (base32 "06h81sxyz2riic0gpzik6ffcnq32wrqphi8c6k55glcdymiimyfs"))))
     (build-system cmake-build-system)
     (inputs
-     `(("libebml" ,libebml)))
+     (list libebml))
     (arguments
      `(#:configure-flags
        (list "-DBUILD_SHARED_LIBS=YES")
@@ -1375,27 +1415,64 @@ support in old parsers.
 libebml is a C++ library to read and write EBML files.")
     (license license:lgpl2.1)))
 
+(define-public libplacebo
+  (package
+    (name "libplacebo")
+    (version "4.157.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://code.videolan.org/videolan/libplacebo")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "08kqsd29h8wm0vz7698wh2mdgpwv6anqc5n7d1spnnamwyfwc64h"))))
+    (build-system meson-build-system)
+    (arguments
+     `(#:configure-flags
+       `("-Dopengl=enabled"
+         ,(string-append "-Dvulkan-registry="
+                         (assoc-ref %build-inputs "vulkan-headers")
+                         "/share/vulkan/registry/vk.xml"))))
+    (native-inputs
+     (list python-mako pkg-config))
+    (inputs
+     (list lcms
+           libepoxy
+           mesa
+           shaderc
+           vulkan-headers
+           vulkan-loader))
+    (home-page "https://code.videolan.org/videolan/libplacebo")
+    (synopsis "GPU-accelerated image/video processing library")
+    (description "libplacebo is, in a nutshell, the core rendering algorithms
+and ideas of mpv rewritten as an independent library.  As of today, libplacebo
+contains a large assortment of video processing shaders, focusing on both
+quality and performance.")
+    (license license:lgpl2.1+)))
+
 (define-public libva
   (package
     (name "libva")
-    (version "2.10.0")
+    (version "2.13.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://github.com/intel/libva/releases/download/"
                            version "/libva-" version ".tar.bz2"))
        (sha256
-        (base32 "0dh2zjn6wi74ga75r6pbrrj8hjm213zyxvn9bv78z0fra1dy70gs"))))
+        (base32 "0q6l193x9whd80sjd5mx8cb7c0fcljb19nhfpla5h49nkzrq7lzs"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libdrm" ,libdrm)
-       ("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxfixes" ,libxfixes)
-       ("mesa" ,mesa)
-       ("wayland" ,wayland)))
+     (list libdrm
+           libx11
+           libxext
+           libxfixes
+           mesa
+           wayland))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1443,13 +1520,9 @@ standards (MPEG-2, MPEG-4 ASP/H.263, MPEG-4 AVC/H.264, and VC-1/VMW3).")
        (list "--enable-wayland"
              "--enable-x11")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libdrm" ,libdrm)
-       ("libva" ,libva)
-       ("libx11" ,libx11)
-       ("mesa" ,mesa)
-       ("wayland" ,wayland)))
+     (list libdrm libva libx11 mesa wayland))
     (home-page "https://01.org/linuxmedia/vaapi")
     (synopsis "Collection of testing utilities for VA-API")
     (description
@@ -1463,14 +1536,14 @@ operate properly.")
 (define-public ffmpeg
   (package
     (name "ffmpeg")
-    (version "4.4")
+    (version "4.4.1")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://ffmpeg.org/releases/ffmpeg-"
                                  version ".tar.xz"))
              (sha256
               (base32
-               "02fr8mvf2agwmyb9q2bmh9p09gpz3xxmpcbbbj8iydz57hc0mc86"))))
+               "00hfwd8ld6jnd26pl9f0wcd2mag4zacxxgqgabsja2xkkagavnza"))))
     (build-system gnu-build-system)
     (inputs
      `(("dav1d" ,dav1d)
@@ -1513,12 +1586,12 @@ operate properly.")
        ("xvid" ,xvid)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("bc" ,bc)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)
-       ("texinfo" ,texinfo)
-       ("speex" ,speex)
-       ("yasm" ,yasm)))
+     (list bc
+           perl
+           pkg-config
+           texinfo
+           speex
+           yasm))
     (arguments
      `(#:test-target "fate"
        #:configure-flags
@@ -1654,28 +1727,17 @@ convert and stream audio and video.  It includes the libavcodec
 audio/video codec library.")
     (license license:gpl2+)))
 
-(define-public ffmpeg-4.3
-  (package/inherit ffmpeg
-    (version "4.3.2")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://ffmpeg.org/releases/ffmpeg-"
-                                  version ".tar.xz"))
-              (sha256
-               (base32
-                "1nyd9jlcy0pqnwzi29a7sg50hq37vb0g3f9l16y3q8yh3m7ydr26"))))))
-
 (define-public ffmpeg-3.4
   (package
     (inherit ffmpeg)
-    (version "3.4.7")
+    (version "3.4.9")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://ffmpeg.org/releases/ffmpeg-"
                                  version ".tar.xz"))
              (sha256
               (base32
-               "1j7mdk9szrljgv4sdx69bm1pnbb3cldbdxbkr42jbdi9zn11gl7g"))))
+               "0d8nkd9c85rkjlgsq1hidmykkrksi883ygqzhhj6wh4nqflv8vs9"))))
     (arguments
      (substitute-keyword-arguments (package-arguments ffmpeg)
        ((#:modules modules %gnu-build-system-modules)
@@ -1688,21 +1750,20 @@ audio/video codec library.")
                  "--enable-libaom"
                  "--enable-librav1e"
                  "--enable-libsrt")))))
-    (inputs (fold alist-delete
-                  (package-inputs ffmpeg)
-                  '("dav1d" "libaom" "rav1e" "srt")))))
+    (inputs (modify-inputs (package-inputs ffmpeg)
+              (delete "dav1d" "libaom" "rav1e" "srt")))))
 
 (define-public ffmpeg-2.8
   (package
     (inherit ffmpeg)
-    (version "2.8.16")
+    (version "2.8.18")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://ffmpeg.org/releases/ffmpeg-"
                                   version ".tar.xz"))
               (sha256
                (base32
-                "14n0xg22yz1r4apif2idm91s3avcmkz4sl8gyj5763gcy415k2bb"))))
+                "0k6dq7b8rpjvdl5ncf1135qwc36x0x9va8v83aggvbfhy5d97vwn"))))
     (arguments
      `(#:tests? #f               ; XXX: Enable them later, if required
        #:configure-flags
@@ -1738,9 +1799,8 @@ audio/video codec library.")
                (format #t "setting LD_LIBRARY_PATH to ~s~%" path)
                (setenv "LD_LIBRARY_PATH" path)
                #t))))))
-    (inputs (fold alist-delete
-                  (package-inputs ffmpeg)
-                  '("dav1d" "libaom" "rav1e" "srt")))))
+    (inputs (modify-inputs (package-inputs ffmpeg)
+              (delete "dav1d" "libaom" "rav1e" "srt")))))
 
 (define-public ffmpeg-for-stepmania
   (hidden-package
@@ -1785,12 +1845,9 @@ audio/video codec library.")
                 "1bakbr714j7yxdal1f5iq0gcl4cxggbbgj227ihdh5kvygqlwich"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("ffmpeg" ,ffmpeg)
-       ("libjpeg-turbo" ,libjpeg-turbo)
-       ("libpng" ,libpng)
-       ("gvfs" ,gvfs)))
+     (list ffmpeg libjpeg-turbo libpng gvfs))
     (arguments
      `(#:configure-flags (list "-DENABLE_GIO=ON" "-DENABLE_THUMBNAILER=ON")))
     (home-page "https://github.com/dirkvdb/ffmpegthumbnailer")
@@ -1856,7 +1913,7 @@ videoformats depend on the configuration flags of ffmpeg.")
        ("libogg" ,libogg)
        ("libpng" ,libpng)
        ("libraw1394" ,libraw1394)
-       ("librsvg" ,librsvg)
+       ("librsvg" ,(librsvg-for-system))
        ("libsamplerate" ,libsamplerate)
        ("libsecret" ,libsecret)
        ("libssh2" ,libssh2)
@@ -1966,8 +2023,7 @@ streaming protocols.")
     (build-system gnu-build-system)
     ;; FIXME: Add additional inputs once available.
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("yasm" ,yasm)))
+     (list pkg-config yasm))
     (inputs
      `(("alsa-lib" ,alsa-lib)
        ("cdparanoia" ,cdparanoia)
@@ -2048,7 +2104,7 @@ SVCD, DVD, 3ivx, DivX 3/4/5, WMV and H.264 movies.")
 (define-public mpv
   (package
     (name "mpv")
-    (version "0.33.1")
+    (version "0.34.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -2056,13 +2112,11 @@ SVCD, DVD, 3ivx, DivX 3/4/5, WMV and H.264 movies.")
                     (commit (string-append "v" version))))
               (file-name (git-file-name name version))
               (sha256
-               (base32
-                "06rw1f55zcsj78ql8w70j9ljp2qb1pv594xj7q9cmq7i92a7hq45"))))
+               (base32 "12qxwm1ww5vhjddl8yvj1xa0n1fi9z3lmzwhaiday2v59ca0qgsk"))))
     (build-system waf-build-system)
     (native-inputs
-     `(("perl" ,perl) ; for zsh completion file
-       ("pkg-config" ,pkg-config)
-       ("python-docutils" ,python-docutils)))
+     (list perl ; for zsh completion file
+           pkg-config python-docutils))
     ;; Missing features: libguess, V4L2
     (inputs
      `(("alsa-lib" ,alsa-lib)
@@ -2101,19 +2155,17 @@ SVCD, DVD, 3ivx, DivX 3/4/5, WMV and H.264 movies.")
        ("wayland" ,wayland)
        ("wayland-protocols" ,wayland-protocols)
        ("libxkbcommon" ,libxkbcommon)
-       ("youtube-dl" ,youtube-dl)
+       ("yt-dlp" ,yt-dlp)
        ("zlib" ,zlib)))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
-         (add-after
-          'unpack 'patch-paths
-          (lambda* (#:key inputs #:allow-other-keys)
-            (let ((ytdl (assoc-ref inputs "youtube-dl")))
-              (substitute* "player/lua/ytdl_hook.lua"
-                (("\"youtube-dl\",")
-                 (string-append "\"" ytdl "/bin/youtube-dl\",")))
-              #t)))
+         (add-after 'unpack 'patch-paths
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((ytdl (assoc-ref inputs "yt-dlp")))
+               (substitute* "player/lua/ytdl_hook.lua"
+                 (("\"yt-dlp\",")
+                  (string-append "\"" ytdl "/bin/yt-dlp\","))))))
          (add-before 'configure 'build-reproducibly
            (lambda _
              ;; Somewhere in the build system library dependencies are enumerated
@@ -2142,13 +2194,89 @@ fork of mplayer2 and MPlayer.  It shares some features with the former
 projects while introducing many more.")
     (license license:gpl2+)))
 
+(define-public smplayer
+  (package
+    (name "smplayer")
+    (version "21.10.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://sourceforge/smplayer/SMPlayer/" version
+                    "/smplayer-" version ".tar.bz2"))
+              (sha256
+               (base32
+                "12nvcl0cfix1xay9hfi7856vg4lpv8y5b0a22212bsjbvl5g22rc"))))
+    (build-system qt-build-system)
+    (native-inputs
+     (list qttools))
+    (inputs
+     (list bash-minimal qtbase-5 zlib mpv))
+    (arguments
+     (list #:tests? #false              ; no tests
+           #:make-flags #~(list (string-append "PREFIX=" #$output)
+                                (string-append "CC=" #+(cc-for-target))
+                                ;; A KLUDGE to turn off invoking lrelease on the
+                                ;; project for now, because it fails consistently
+                                ;; with "WARNING: Could not find qmake spec
+                                ;; 'default'". See below.
+                                "LRELEASE=true")
+           #:phases
+           #~(modify-phases %standard-phases
+               (delete 'configure)
+               ;; Due to the above, we must run lrelease separately on each .ts file
+               ;; (as opposed to running `lrelease-pro smplayer.pro` for the entire
+               ;; project, as the Makefile does normally without the above kludge).
+               (add-after 'build 'compile-ts-files
+                 (lambda _
+                   (for-each (lambda (file)
+                               (invoke "lrelease" file))
+                             (find-files "./" "\\.ts$"))))
+               (add-after 'install 'wrap-executable
+                 (lambda* (#:key inputs outputs #:allow-other-keys)
+                   (let* ((out (assoc-ref outputs "out"))
+                          (mpv (assoc-ref inputs "mpv")))
+                     (wrap-program (string-append out "/bin/smplayer")
+                       `("PATH" ":" prefix
+                         ,(list (string-append mpv "/bin"))))))))))
+    (home-page "https://www.smplayer.info")
+    (synopsis "Complete front-end for MPlayer, a media player")
+    (description "SMPlayer is a graphical user interface (GUI) for
+MPlayer, which is capable of playing almost all known video and audio
+formats.  Apart from providing access for the most common and useful
+options of MPlayer, SMPlayer adds other interesting features like the
+possibility to play Youtube videos, download subtitles, remember
+the last played position, etc.")
+    (license license:gpl2+)))
+
+(define-public gallery-dl
+  (package
+    (name "gallery-dl")
+    (version "1.20.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/mikf/gallery-dl"
+                                  "/releases/download/v" version "/gallery_dl-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "0qkz8aznvybdqrjxsl6ir319ras05mi8l0sal4mgi18l70jndh51"))))
+    (build-system python-build-system)
+    (inputs (list python-requests ffmpeg))
+    (home-page "https://github.com/mikf/gallery-dl")
+    (synopsis "Command-line program to download images from several sites")
+    (description "Command-line program to download image galleries
+and collections from several image hosting sites
+While this package can use youtube-dl or yt-dlp packages to download videos,
+the focus is more on images and image hosting sites.")
+    (license license:gpl2)))
+
 (define-public gnome-mpv
   (deprecated-package "gnome-mpv" celluloid))
 
 (define-public mpv-mpris
   (package
     (name "mpv-mpris")
-    (version "0.5")
+    (version "0.6")
     (source
       (origin
         (method git-fetch)
@@ -2157,8 +2285,7 @@ projects while introducing many more.")
                (commit version)))
         (file-name (git-file-name name version))
         (sha256
-         (base32
-          "07p6li5z38pkfd40029ag2jqx917vyl3ng5p2i4v5a0af14slcnk"))))
+         (base32 "03gldk149i2108w3ylyfmci77kdq4whdzfavh7hjviwyj534101r"))))
     (build-system copy-build-system)
     (arguments
      '(#:install-plan
@@ -2170,10 +2297,9 @@ projects while introducing many more.")
              (setenv "CC" (which "gcc"))
              (invoke "make"))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("glib" ,glib)
-       ("mpv" ,mpv)))
+     (list glib mpv))
     (home-page "https://github.com/hoyon/mpv-mpris")
     (synopsis "MPRIS plugin for mpv")
     (description "This package provides an @dfn{MPRIS} (Media Player Remote
@@ -2189,7 +2315,7 @@ To load this plugin, specify the following option when starting mpv:
 (define-public libvpx
   (package
     (name "libvpx")
-    (version "1.10.0")
+    (version "1.11.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -2198,7 +2324,7 @@ To load this plugin, specify the following option when starting mpv:
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1p4v6j1505n3gnvx3iksciyi818ymxpazj9fmdrchzbl9pfzg4qi"))
+                "00f1jrclai2b6ys78dpsg6r1mvcyxlna93vxcz8zjyia24c2pjsb"))
               (patches (search-patches "libvpx-CVE-2016-2818.patch"))))
     (build-system gnu-build-system)
     (arguments
@@ -2222,8 +2348,7 @@ To load this plugin, specify the following option when starting mpv:
        ;; custom directory, but there seems to be no tarball with all files.
        #:tests? #f))
     (native-inputs
-     `(("perl" ,perl)
-       ("yasm" ,yasm)))
+     (list perl yasm))
     (synopsis "VP8/VP9 video codec")
     (description "libvpx is a codec for the VP8/VP9 video compression format.")
     (license license:bsd-3)
@@ -2232,14 +2357,14 @@ To load this plugin, specify the following option when starting mpv:
 (define-public youtube-dl
   (package
     (name "youtube-dl")
-    (version "2021.06.06")
+    (version "2021.12.17")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://youtube-dl.org/downloads/latest/"
                                   "youtube-dl-" version ".tar.gz"))
               (sha256
                (base32
-                "1hqan9h55x9gfdakw554vic68w9gpvhblchwxlw265zxp56hxjrw"))
+                "1prm84ci1n1kjzhikhrsbxbgziw6br822psjnijm2ibqnz49jfwz"))
               (snippet
                '(begin
                   ;; Delete the pre-generated files, except for the man page
@@ -2249,8 +2374,7 @@ To load this plugin, specify the following option when starting mpv:
                                           ;;"youtube-dl.1"
                                           "youtube-dl.bash-completion"
                                           "youtube-dl.fish"
-                                          "youtube-dl.zsh"))
-                  #t))))
+                                          "youtube-dl.zsh"))))))
     (build-system python-build-system)
     (arguments
      ;; The problem here is that the directory for the man page and completion
@@ -2269,8 +2393,7 @@ To load this plugin, specify the following option when starting mpv:
                       ;; Continue respecting the --ffmpeg-location argument.
                       (substitute* "youtube_dl/postprocessor/ffmpeg.py"
                         (("\\.get\\('ffmpeg_location'\\)" match)
-                         (format #f "~a or '~a'" match (which "ffmpeg"))))
-                      #t))
+                         (format #f "~a or '~a'" match (which "ffmpeg"))))))
                   (add-before 'build 'build-generated-files
                     (lambda _
                       ;; Avoid the make targets that require pandoc.
@@ -2293,8 +2416,7 @@ To load this plugin, specify the following option when starting mpv:
                           (("'etc/")
                            (string-append "'" prefix "/etc/"))
                           (("'share/")
-                           (string-append "'" prefix "/share/")))
-                        #t)))
+                           (string-append "'" prefix "/share/"))))))
                   (add-after 'install 'install-completion
                     (lambda* (#:key outputs #:allow-other-keys)
                       (let* ((out (assoc-ref outputs "out"))
@@ -2302,19 +2424,88 @@ To load this plugin, specify the following option when starting mpv:
                                                  "/share/zsh/site-functions")))
                         (mkdir-p zsh)
                         (copy-file "youtube-dl.zsh"
-                                   (string-append zsh "/_youtube-dl"))
-                        #t))))))
+                                   (string-append zsh "/_youtube-dl"))))))))
     (native-inputs
-     `(("zip" ,zip)))
+     (list zip))
     (inputs
-     `(("ffmpeg" ,ffmpeg)))
+     (list ffmpeg))
     (synopsis "Download videos from YouTube.com and other sites")
     (description
      "Youtube-dl is a small command-line program to download videos from
 YouTube.com and many more sites.")
     (home-page "https://yt-dl.org")
+    (properties '((release-monitoring-url . "https://yt-dl.org/downloads/")))
     (license license:public-domain)))
 
+(define-public yt-dlp
+  (package/inherit youtube-dl
+    (name "yt-dlp")
+    (version "2021.10.22")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/yt-dlp/yt-dlp/"
+                                  "releases/download/"
+                                  version "/yt-dlp.tar.gz"))
+              (sha256
+               (base32
+                "0xh4cwmvx49pxn8x07wj2dy8ynj6xg8977l5493vv0l8zc27wp87"))
+              (snippet
+               '(begin
+                  ;; Delete the pre-generated files, except for the man page
+                  ;; which requires 'pandoc' to build.
+                  (for-each delete-file '("yt-dlp"
+                                          ;;pandoc is needed to generate
+                                          ;;"yt-dlp.1"
+                                          "completions/bash/yt-dlp"
+                                          "completions/fish/yt-dlp.fish"
+                                          "completions/zsh/_yt-dlp"))
+                  #t))))
+    (arguments
+     (substitute-keyword-arguments (package-arguments youtube-dl)
+       ((#:tests? _) #t)
+       ((#:phases phases)
+        `(modify-phases ,phases
+           ;; See the comment for the corresponding phase in youtube-dl.
+           (replace 'default-to-the-ffmpeg-input
+             (lambda _
+               (substitute* "yt_dlp/postprocessor/ffmpeg.py"
+                 (("\\.get_param\\('ffmpeg_location'\\)" match)
+                  (format #f "~a or '~a'" match (which "ffmpeg"))))
+               #t))
+           (replace 'build-generated-files
+             (lambda _
+               ;; Avoid the yt-dlp.1 target, which requires pandoc.
+               (invoke "make" "PYTHON=python" "yt-dlp" "completions")))
+           (replace 'fix-the-data-directories
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let ((prefix (assoc-ref outputs "out")))
+                 (substitute* "setup.py"
+                   (("'etc/")
+                    (string-append "'" prefix "/etc/"))
+                   (("'share/")
+                    (string-append "'" prefix "/share/"))))
+               #t))
+           (delete 'install-completion)
+           (replace 'check
+             (lambda* (#:key tests? #:allow-other-keys)
+               (when tests?
+                 (invoke "pytest" "-k" "not download"))))))))
+    (inputs
+     `(("python-mutagen" ,python-mutagen)
+       ("python-pycryptodomex" ,python-pycryptodomex)
+       ("python-websockets" ,python-websockets)
+       ,@(package-inputs youtube-dl)))
+    (native-inputs
+     `(("python-pytest" ,python-pytest)
+       ,@(package-native-inputs youtube-dl)))
+    (description
+     "yt-dlp is a small command-line program to download videos from
+YouTube.com and many more sites.  It is a fork of youtube-dl with a
+focus on adding new features while keeping up-to-date with the
+original project.")
+    (properties '((release-monitoring-url . "https://pypi.org/project/yt-dlp/")))
+    (home-page "https://github.com/yt-dlp/yt-dlp")))
+
 (define-public youtube-dl-gui
   (package
     (name "youtube-dl-gui")
@@ -2400,11 +2591,9 @@ YouTube.com and many more sites.")
                      Categories=AudioVideo;Audio;Video;Network~%")))
                #t))))))
     (native-inputs
-     `(("gettext-minimal" ,gettext-minimal)))
+     (list gettext-minimal))
     (inputs
-     `(("python2-twodict" ,python2-twodict)
-       ("python2-wxpython" ,python2-wxpython)
-       ("youtube-dl" ,youtube-dl)))
+     (list python2-twodict python2-wxpython youtube-dl))
     (home-page "https://github.com/MrS0m30n3/youtube-dl-gui")
     (synopsis
      "GUI (Graphical User Interface) for @command{youtube-dl}")
@@ -2417,7 +2606,7 @@ other site that youtube-dl supports.")
 (define-public you-get
   (package
     (name "you-get")
-    (version "0.4.1500")
+    (version "0.4.1555")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -2426,10 +2615,10 @@ other site that youtube-dl supports.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "02wkmq6bjg9iz0kccsgs192aiky99l2jnw1xs6zjhvjvq7jyvf7s"))))
+                "0gn86i6nfsw395r9a3i88nv2g08s5bgjps7w4qawb9gvk4h7zqap"))))
     (build-system python-build-system)
     (inputs
-     `(("ffmpeg" ,ffmpeg)))             ; for multi-part and >=1080p videos
+     (list ffmpeg))             ; for multi-part and >=1080p videos
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -2437,14 +2626,12 @@ other site that youtube-dl supports.")
            ;; Explicitly invoke the input ffmpeg, instead of whichever one
            ;; happens to be in the user's $PATH at run time.
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((ffmpeg (string-append (assoc-ref inputs "ffmpeg")
-                                          "/bin/ffmpeg")))
+             (let ((ffmpeg (search-input-file inputs "/bin/ffmpeg")))
                (substitute* "src/you_get/processor/ffmpeg.py"
                  ;; Don't blindly replace all occurrences of ‘'ffmpeg'’: the
                  ;; same string is also used when sniffing ffmpeg's output.
                  (("(FFMPEG == |\\()'ffmpeg'" _ prefix)
-                  (string-append prefix "'" ffmpeg "'")))
-               #t))))
+                  (string-append prefix "'" ffmpeg "'")))))))
        #:tests? #f))                    ; XXX some tests need Internet access
     (synopsis "Download videos, audio, or images from Web sites")
     (description
@@ -2468,24 +2655,23 @@ audio, images) from the Web.  It can use either mpv or vlc for playback.")
                 "0xdybiihd66b79rbsawjhxs9snm78gld5ziz3gnp8vdcw0bshwz7"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (inputs
-     `(("perl-data-dump" ,perl-data-dump)
-       ("perl-file-sharedir" ,perl-file-sharedir)
-       ("perl-gtk2" ,perl-gtk2)
-       ("perl-json" ,perl-json)
-       ("perl-json-xs" ,perl-json-xs)
-       ("perl-libwww" ,perl-libwww)
-       ("perl-lwp-protocol-https" ,perl-lwp-protocol-https)
-       ("perl-lwp-useragent-cached" ,perl-lwp-useragent-cached)
-       ("perl-memoize" ,perl-memoize)
-       ("perl-mozilla-ca" ,perl-mozilla-ca)
-       ("perl-term-readline-gnu" ,perl-term-readline-gnu)
-       ("perl-unicode-linebreak" ,perl-unicode-linebreak)
-       ("xdg-utils" ,xdg-utils)
-
-       ;; Some videos play without youtube-dl, but others silently fail to.
-       ("youtube-dl" ,youtube-dl)))
+     (list perl-data-dump
+           perl-file-sharedir
+           perl-gtk2
+           perl-json
+           perl-json-xs
+           perl-libwww
+           perl-lwp-protocol-https
+           perl-lwp-useragent-cached
+           perl-memoize
+           perl-mozilla-ca
+           perl-term-readline-gnu
+           perl-unicode-linebreak
+           xdg-utils
+           ;; Some videos play without youtube-dl, but others silently fail to.
+           youtube-dl))
     (arguments
      `(#:modules ((guix build perl-build-system)
                   (guix build utils)
@@ -2577,7 +2763,7 @@ Both command-line and GTK2 interface are available.")
                  (("\"libbdplus\"")
                   (string-append "\"" libbdplus "/lib/libbdplus\"")))
                #t))))))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (inputs
      `(("fontconfig" ,fontconfig)
        ("freetype" ,freetype)
@@ -2607,9 +2793,9 @@ players, like VLC or MPlayer.")
     (arguments
      `(#:configure-flags '("--with-libdvdcss=yes")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (propagated-inputs
-     `(("libdvdcss" ,libdvdcss)))
+     (list libdvdcss))
     (home-page "http://dvdnav.mplayerhq.hu/")
     (synopsis "Library for reading video DVDs")
     (description
@@ -2634,13 +2820,9 @@ installed).")
          "1drfc47hikfzc9d7hjk34rw10iqw01d2vwmn91pv73ppx4nsj81h"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libdvdread" ,libdvdread)
-       ("libpng" ,libpng)
-       ("imagemagick" ,imagemagick)
-       ("libxml2" ,libxml2)
-       ("freetype" ,freetype)))
+     (list libdvdread libpng imagemagick libxml2 freetype))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "Generates a DVD-Video movie from a MPEG-2 stream")
     (description "@command{dvdauthor} will generate a DVD-Video movie from a
 MPEG-2 stream containing VOB packets.")
@@ -2661,9 +2843,9 @@ MPEG-2 stream containing VOB packets.")
                 "0cv7j8irsv1n2dadlnhr6i1b8pann2ah6xpxic41f04my6ba6rp5"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libdvdread" ,libdvdread)))
+     (list libdvdread))
     (home-page "http://dvdnav.mplayerhq.hu/")
     (synopsis "Library for video DVD navigation features")
     (description
@@ -2730,9 +2912,9 @@ device without having to bother about the decryption.")
                  `("GUILE_LOAD_PATH" ":" prefix (,site))
                  `("GUILE_LOAD_COMPILED_PATH" ":" prefix (,compiled)))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (synopsis "SubRip to WebVTT subtitle converter")
     (description "srt2vtt converts SubRip formatted subtitles to WebVTT format
 for use with HTML5 video.")
@@ -2893,11 +3075,7 @@ capabilities.")
        ("pkg-config" ,pkg-config)
        ("yasm" ,yasm)))
     (inputs
-     `(("ffmpeg" ,ffmpeg)
-       ("libass" ,libass)
-       ("python" ,python)
-       ("tesseract-ocr" ,tesseract-ocr)
-       ("zimg" ,zimg)))
+     (list ffmpeg libass python tesseract-ocr zimg))
     (home-page "http://www.vapoursynth.com/")
     (synopsis "Video processing framework")
     (description "VapourSynth is a C++ library and Python module for video
@@ -2923,7 +3101,7 @@ format changes.")
                (base32
                 "1xyg3amgg27zf7188kss7y248s0xhh1vv8rrk0j9bcsd5nasxsmf"))))
     (build-system gnu-build-system)
-    (native-inputs `(("yasm" ,yasm)))
+    (native-inputs (list yasm))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -2956,19 +3134,17 @@ and custom quantization matrices.")
     (build-system python-build-system)
     (home-page "https://github.com/streamlink/streamlink")
     (native-inputs
-     `(("python-freezegun" ,python-freezegun)
-       ("python-pytest" ,python-pytest)
-       ("python-mock" ,python-mock)
-       ("python-requests-mock" ,python-requests-mock)))
+     (list python-freezegun python-pytest python-mock
+           python-requests-mock))
     (propagated-inputs
-     `(("python-pysocks" ,python-pysocks)
-       ("python-websocket-client" ,python-websocket-client)
-       ("python-iso3166" ,python-iso3166)
-       ("python-iso639" ,python-iso639)
-       ("python-isodate" ,python-isodate)
-       ("python-pycryptodome" ,python-pycryptodome)
-       ("python-requests" ,python-requests)
-       ("python-urllib3" ,python-urllib3)))
+     (list python-pysocks
+           python-websocket-client
+           python-iso3166
+           python-iso639
+           python-isodate
+           python-pycryptodome
+           python-requests
+           python-urllib3))
     (synopsis "Extract streams from various services")
     (description "Streamlink is command-line utility that extracts streams
 from sites like Twitch.tv and pipes them into a video player of choice.")
@@ -3011,8 +3187,7 @@ from sites like Twitch.tv and pipes them into a video player of choice.")
                                             "/bin"))
                #t)))))
       (inputs
-       `(("python-requests" ,python-requests)
-         ("streamlink" ,streamlink)))
+       (list python-requests streamlink))
       (home-page "https://github.com/BasioMeusPuga/twitchy")
       (synopsis "Command-line interface for Twitch.tv")
       (description
@@ -3022,7 +3197,7 @@ from sites like Twitch.tv and pipes them into a video player of choice.")
 (define-public mlt
   (package
     (name "mlt")
-    (version "7.0.1")
+    (version "7.2.0")
     (source
      (origin
        (method git-fetch)
@@ -3031,7 +3206,7 @@ from sites like Twitch.tv and pipes them into a video player of choice.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "13c5miph9jjbz69dhy0zvbkk5zbb05dr3vraaci0d5fdbrlhyscf"))))
+        (base32 "17d4gs46ca3n0qg6z69hl6mmllnqj2id8ccrv8fyz8c5zm55ghqm"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f ;requires "Kwalify"
@@ -3044,31 +3219,31 @@ from sites like Twitch.tv and pipes them into a video player of choice.")
                       "-Wl,-rpath="
                       (assoc-ref outputs "out") "/lib")))))))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("alsa-plugins" ,alsa-plugins "pulseaudio")
-       ("ffmpeg" ,ffmpeg)
-       ("fftw" ,fftw)
-       ("frei0r-plugins" ,frei0r-plugins)
-       ("gdk-pixbuf" ,gdk-pixbuf)
-       ("gtk+" ,gtk+)
-       ("libxml2" ,libxml2)
-       ("jack" ,jack-1)
-       ("ladspa" ,ladspa)
-       ("libebur128" ,libebur128)
-       ("libexif" ,libexif)
-       ("libvorbis" ,libvorbis)
-       ("rubberband" ,rubberband)
-       ("libsamplerate" ,libsamplerate)
-       ("pulseaudio" ,pulseaudio)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("rtaudio" ,rtaudio)
-       ("sdl2" ,sdl2)
-       ("sdl2-image" ,sdl2-image)
-       ("sox" ,sox)
-       ("vidstab" ,vidstab)))
+     (list alsa-lib
+           `(,alsa-plugins "pulseaudio")
+           ffmpeg
+           fftw
+           frei0r-plugins
+           gdk-pixbuf
+           gtk+
+           libxml2
+           jack-1
+           ladspa
+           libebur128
+           libexif
+           libvorbis
+           rubberband
+           libsamplerate
+           pulseaudio
+           qtbase-5
+           qtsvg
+           rtaudio
+           sdl2
+           sdl2-image
+           sox
+           vidstab))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.mltframework.org/")
     (synopsis "Author, manage, and run multitrack audio/video compositions")
     (description
@@ -3103,8 +3278,8 @@ tools, XML authoring components, and an extensible plug-in based API.")
                             "/lib/glib-2.0/include"))
        ,@(package-arguments mlt)))
     (inputs
-     `(("gtk+", gtk+-2)
-       ,@(alist-delete "gtk+" (package-inputs mlt))))))
+     (modify-inputs (package-inputs mlt)
+       (replace "gtk+" gtk+-2)))))
 
 (define-public v4l-utils
   (package
@@ -3153,8 +3328,7 @@ tools, XML authoring components, and an extensible plug-in based API.")
                (rmdir (string-append out "/share/applications"))
                #t))))))
     (native-inputs
-     `(("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list perl pkg-config))
     (inputs
      `(("alsa-lib" ,alsa-lib)
        ("glu" ,glu)
@@ -3212,8 +3386,7 @@ be used for realtime video capture via Linux-specific APIs.")
             (separator #f)                         ;single entry
             (files '("share/obs/obs-plugins")))))
     (native-inputs
-     `(("cmocka" ,cmocka)
-       ("pkg-config" ,pkg-config)))
+     (list cmocka pkg-config))
     (inputs
      `(("alsa-lib" ,alsa-lib)
        ("curl" ,curl)
@@ -3233,6 +3406,7 @@ be used for realtime video capture via Linux-specific APIs.")
        ("qtbase" ,qtbase-5)
        ("qtsvg" ,qtsvg)
        ("qtx11extras" ,qtx11extras)
+       ("qtwayland" ,qtwayland)
        ("speexdsp" ,speexdsp)
        ("v4l-utils" ,v4l-utils)
        ("wayland" ,wayland)
@@ -3270,8 +3444,7 @@ and JACK.")
      `(#:tests? #f
        #:configure-flags
        (list "-DGLOBAL_INSTALLATION=ON" "-DUSE_CMAKE_LIBDIR=ON")))
-    (inputs `(("obs" ,obs)
-              ("fftw" ,fftw)))
+    (inputs (list obs fftw))
     (home-page "https://github.com/univrsal/spectralizer")
     (synopsis "OBS plugin for audio visualization")
     (description "This OBS plugins allows you to vizualize MPD and internal
@@ -3306,8 +3479,7 @@ OBS audio sources.")
                (("PERMISSIONS") ")"))
              #t)))))
     (inputs
-     `(("obs" ,obs)
-       ("qtbase" ,qtbase-5)))
+     (list obs qtbase-5))
     (home-page "https://github.com/Palakis/obs-websocket")
     (synopsis "OBS plugin for remote control via WebSockets")
     (description "This OBS plugin allows you to establish a WebSocket channel
@@ -3331,12 +3503,10 @@ programs on your current machine or on other machines.")
           "1faiq2gdb7qis3m1hilm4pz8lkmkab75vzm608dbiazahhybf96p"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (propagated-inputs `() )
-    (inputs `(("obs" ,obs)
-              ("libx11" ,libx11 "out")
-              ("wayland" ,wayland)
-              ("wayland-protocols" ,wayland-protocols)))
+    (inputs (list obs
+                  `(,libx11 "out") wayland wayland-protocols))
     (home-page "https://hg.sr.ht/~scoopta/wlrobs")
     (synopsis "OBS plugin for Wayland (wlroots) screen capture")
     (description
@@ -3360,11 +3530,9 @@ Wayland compositors.")
           "1hc4mcrbr1yhfiy4zfd8wc2iiqbp90z6jswap0jia20vmyk5lqld"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libx11" ,libx11 "out")
-       ("libxext" ,libxext)
-       ("xorgproto" ,xorgproto)))
+     (list `(,libx11 "out") libxext xorgproto))
     (home-page "https://wiki.freedesktop.org/www/Software/VDPAU/")
     (synopsis "Video Decode and Presentation API")
     (description "VDPAU is the Video Decode and Presentation API for UNIX.  It
@@ -3394,12 +3562,9 @@ present in modern GPUs.")
            (lambda _
              (invoke "autoreconf" "-fiv"))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libx11" ,libx11)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libx11 pkg-config))
     (propagated-inputs
-     `(("libvdpau" ,libvdpau)))
+     (list libvdpau))
     (home-page "https://wiki.freedesktop.org/www/Software/VDPAU/")
     (synopsis "Tool to query the capabilities of a VDPAU implementation")
     (description "Vdpauinfo is a tool to query the capabilities of a VDPAU
@@ -3427,11 +3592,9 @@ implementation.")
     (arguments
      '(#:tests? #f)) ; Tests require a running X11 server, with VA-API support.
     (native-inputs
-     `(("libvdpau" ,libvdpau)
-       ("pkg-config" ,pkg-config)))
+     (list libvdpau pkg-config))
     (inputs
-     `(("libva" ,libva)
-       ("mesa" ,mesa)))
+     (list libva mesa))
     (home-page "https://github.com/i-rinat/libvdpau-va-gl")
     (synopsis "VDPAU driver with VA-API/OpenGL backend")
     (description
@@ -3445,27 +3608,28 @@ scaling and VA-API (if available) to accelerate video decoding.")
 (define-public recordmydesktop
   (package
     (name "recordmydesktop")
-    (version "0.3.8.1")
+    (version "0.4.0")
     (source (origin
               (method url-fetch)
-              (uri (string-append "mirror://sourceforge/" name "/" name "/"
-                                  version "/recordmydesktop-" version ".tar.gz"))
+              (uri (string-append "https://github.com/Enselic/"
+                                  name "/releases/download/v" version
+                                  "/recordmydesktop-" version ".tar.gz"))
               (sha256
                (base32
-                "133kkl5j0r877d41bzj7kj0vf3xm8x80yyx2n8nqxrva304f58ik"))))
+                "17kjgmkl45zma64a5dg1hyvnjkzk4vl8milgi6ic7hlsbmywpig7"))))
     (build-system gnu-build-system)
-    (inputs `(("popt" ,popt)
-              ("zlib" ,zlib)
-              ("libx11" ,libx11)
-              ("libice" ,libice)
-              ("libsm" ,libsm)
-              ("libxfixes" ,libxfixes)
-              ("libxdamage" ,libxdamage)
-              ("libxext" ,libxext)
-              ("alsa-lib" ,alsa-lib)
-              ("libvorbis" ,libvorbis)
-              ("libtheora" ,libtheora)))
-    (home-page "http://recordmydesktop.sourceforge.net/")
+    (inputs (list popt
+                  zlib
+                  libx11
+                  libice
+                  libsm
+                  libxfixes
+                  libxdamage
+                  libxext
+                  alsa-lib
+                  libvorbis
+                  libtheora))
+    (home-page "https://enselic.github.io/recordmydesktop/")
     (synopsis "Desktop session video recorder")
     (description
      "recordMyDesktop is a command-line tool that captures the activity in
@@ -3492,16 +3656,16 @@ making @dfn{screencasts}.")
     ;; README.md, the program builds and functions properly without them.
     ;; As a result, they are omitted. Please add them back if problems appear.
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("ffmpeg" ,ffmpeg)
-       ("glu" ,glu)
-       ("jack" ,jack-1)
-       ("libxi" ,libxi)
-       ("libxinerama" ,libxinerama)
-       ("pulseaudio" ,pulseaudio)
-       ("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+     (list alsa-lib
+           ffmpeg
+           glu
+           jack-1
+           libxi
+           libxinerama
+           pulseaudio
+           qtbase-5
+           qtx11extras))
+    (native-inputs (list pkg-config))
     (arguments
      `(#:configure-flags
        (list "-DWITH_QT5=TRUE")
@@ -3537,8 +3701,7 @@ Other features include a live preview and live streaming.")
      ;; GCC 7.  Also, 'configure' does CXXFLAGS=$CFLAGS, hence this hack.
      '(#:configure-flags '("CFLAGS=-O2 -g -std=c++03")))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (inputs
      `(("sdl" ,sdl2)))
     (home-page "https://icculus.org/smpeg/")
@@ -3569,7 +3732,7 @@ and MPEG system streams.")
                (base32
                 "0jfi085rf3fa5xsn0vd3nqf32my8ph9c6a9445y7a8lrlz4dms64"))))
     (inputs
-     `(("sdl" ,sdl)))))
+     (list sdl))))
 
 (define-public libbdplus
   (package
@@ -3583,7 +3746,7 @@ and MPEG system streams.")
        (sha256
         (base32 "02n87lysqn4kg2qk7d1ffrp96c44zkdlxdj0n16hbgrlrpiwlcd6"))))
     (inputs
-     `(("libgcrypt" ,libgcrypt)))
+     (list libgcrypt))
     (build-system gnu-build-system)
     (home-page "https://www.videolan.org/developers/libbdplus.html")
     (synopsis "Library for decrypting certain Blu-Ray discs")
@@ -3603,10 +3766,9 @@ specifications.")
        (sha256
         (base32 "11skjqjlldmbjkyxdcz4fmcn6y4p95r1xagbcnjy4ndnzf0l723d"))))
     (inputs
-     `(("libgcrypt" ,libgcrypt)))
+     (list libgcrypt))
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)))
+     (list bison flex))
     (build-system gnu-build-system)
     (home-page "https://www.videolan.org/developers/libaacs.html")
     (synopsis "Library for decrypting certain Blu-Ray discs")
@@ -3634,10 +3796,13 @@ Content System specification.")
      ;; test suite results differ depending on the country and also introduce
      ;; non-determinism in the tests.
      ;; https://github.com/mps-youtube/mps-youtube/issues/556
-     `(#:tests? #f))
+     '(#:tests? #f
+       #:phases (modify-phases %standard-phases
+                  ;; Loading this as a library will create cache directories,
+                  ;; etc; which fails in the build container.
+                  (delete 'sanity-check))))
     (propagated-inputs
-     `(("python-pafy" ,python-pafy)
-       ("python-pygobject" ,python-pygobject))) ; For mpris2 support
+     (list python-pafy python-pygobject)) ; For mpris2 support
     (home-page "https://github.com/mps-youtube/mps-youtube")
     (synopsis "Terminal based YouTube player and downloader")
     (description
@@ -3652,7 +3817,7 @@ supported players in addition to this package.")
 (define-public handbrake
   (package
     (name "handbrake")
-    (version "1.4.1")
+    (version "1.5.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/HandBrake/HandBrake/"
@@ -3660,7 +3825,7 @@ supported players in addition to this package.")
                                   "HandBrake-" version "-source.tar.bz2"))
               (sha256
                (base32
-                "1xhq9jjmf854jf7sg4m754hgajnavwwhmjnaikcf2vgjr35ax81r"))
+                "1w1hjj6gvdydypw4mdn281w0x163is59cfm7k6bq371hsl3gx69r"))
               (modules '((guix build utils)))
               (snippet
                ;; Remove "contrib" and source not necessary for
@@ -3673,8 +3838,7 @@ supported players in addition to this package.")
                     ;; (ffmpeg, libvpx, libdvdread, libdvdnav, and libbluray),
                     ;; which would lead to fetching and building of these
                     ;; libraries.  Use our own instead.
-                    (("MODULES \\+= contrib") "# MODULES += contrib"))
-                  #t))))
+                    (("MODULES \\+= contrib") "# MODULES += contrib"))))))
     (build-system  glib-or-gtk-build-system)
     (native-inputs
      `(("automake" ,automake)           ; GUI subpackage must be bootstrapped
@@ -3740,8 +3904,7 @@ supported players in addition to this package.")
          (add-before 'configure 'patch-SHELL
            (lambda _
              (substitute* "gtk/po/Makefile.in.in"
-               (("SHELL = /bin/sh") "SHELL = @SHELL@"))
-             #t))
+               (("SHELL = /bin/sh") "SHELL = @SHELL@"))))
          (add-before 'configure 'relax-reqs
            (lambda _
              (substitute* "make/configure.py"
@@ -3751,8 +3914,7 @@ supported players in addition to this package.")
                ;; and ninja are only needed for contrib/libdav1d, and nasm
                ;; only for libvpx
                (("((cmake|meson|ninja|nasm) *=.*abort=)True" _ &)
-                (string-append & "False")))
-             #t))
+                (string-append & "False")))))
          (replace 'configure
            (lambda* (#:key outputs configure-flags #:allow-other-keys)
              ;; 'configure' is not an autoconf-generated script, and
@@ -3763,7 +3925,7 @@ supported players in addition to this package.")
                       (string-append "--prefix=" out)
                       (or configure-flags '())))))
          (add-after 'configure 'chdir-build
-           (lambda _ (chdir "./build") #t)))))
+           (lambda _ (chdir "./build"))))))
     (home-page "https://handbrake.fr")
     (synopsis "Video transcoder")
     (description
@@ -3788,14 +3950,9 @@ of modern, widely supported codecs.")
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
-     `(("libdrm" ,libdrm)
-       ("libva" ,libva)
-       ("libx11" ,libx11)))
+     (list libdrm libva libx11))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -3837,8 +3994,7 @@ post-processing of video formats like MPEG2, H.264/AVC, and VC-1.")
                 "0ffav46pz3sbj92nipd62z03fibyqgclfq9w8lgr80s6za6zdk5s"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("nasm" ,nasm)
-       ("python" ,python)))
+     (list nasm python))
     (arguments
      '(#:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
                           "CC=gcc")
@@ -3877,7 +4033,10 @@ post-processing of video formats like MPEG2, H.264/AVC, and VC-1.")
     (outputs '("out"
                "static")) ; 3.7MiB .a file
     (arguments
-     `(#:phases
+     `(;; Build as C++2003 to avoid C++11 "narrowing conversion" errors.
+       #:configure-flags '("CXXFLAGS=-O2 -g -std=c++03")
+
+       #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'remove-dates
            (lambda _
@@ -3900,8 +4059,7 @@ post-processing of video formats like MPEG2, H.264/AVC, and VC-1.")
                          (find-files lib "\\.a$"))
                #t))))))
     (native-inputs
-     `(("help2man" ,help2man)
-       ("dejagnu" ,dejagnu)))
+     (list help2man dejagnu))
     (home-page "https://code.google.com/archive/p/mp4v2/")
     (synopsis "API to create and modify mp4 files")
     (description
@@ -3926,15 +4084,10 @@ practically any type of media.")
                 "1jm4mk539wf3crgpcddgwdixshwdzm37mkb5441lifhcz2mykdsn"))))
     ;; TODO add a Big Buck Bunny webm for tests.
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (propagated-inputs
-     `(("zlib" ,zlib)
-       ("tinyxml2" ,tinyxml2)
-       ("curl" ,curl) ; In Requires.private of libmediainfo.pc.
-       ("libzen" ,libzen)))
+     (list zlib tinyxml2 curl ; In Requires.private of libmediainfo.pc.
+           libzen))
     (build-system gnu-build-system)
     (arguments
      '(#:tests? #f ; see above TODO
@@ -3989,12 +4142,9 @@ MPEG-2, MPEG-4, DVD (VOB)...
                (base32
                 "07h2a1lbw5ak6c9bcn8qydchl0wpgk945rf9sfcqjyv05h5wll6y"))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
-     `(("libmediainfo" ,libmediainfo)))
+     (list libmediainfo))
     (build-system gnu-build-system)
     (arguments
      '(#:tests? #f ; lacks tests
@@ -4045,7 +4195,7 @@ many codecs and formats supported by libmediainfo.")
                (install-file "AtomicParsley" bin))
              #t)))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (synopsis "Metadata editor for MPEG-4 files")
     (description "AtomicParsley is a lightweight command line program for
 reading, parsing and setting metadata into MPEG-4 files, in particular,
@@ -4085,7 +4235,7 @@ iTunes-style metadata.")
                       (invoke "./genMakefiles"
                               "linux-with-shared-libraries"))))))
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (home-page "http://www.live555.com/liveMedia/")
     (synopsis "Set of C++ libraries for multimedia streaming")
     (description "This code forms a set of C++ libraries for multimedia
@@ -4136,11 +4286,11 @@ and ITU-T H.222.0.")
      '(#:configure-flags
        (list "--enable-avresample")))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (propagated-inputs
-     `(("ffmpeg" ,ffmpeg)))
+     (list ffmpeg))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "Cross-platform wrapper around ffmpeg/libav")
     (description
       "FFMpegSource is a wrapper library around ffmpeg/libav that allows
@@ -4191,21 +4341,19 @@ programmers to access a standard API to open and decompress media files.")
                     "#include <boost/gil.hpp>"))
                  #t)))))
     (inputs
-     `(("boost" ,boost)
-       ("ffms2" ,ffms2)
-       ("fftw" ,fftw)
-       ("hunspell" ,hunspell)
-       ("mesa" ,mesa)
-       ("libass" ,libass)
-       ("alsa-lib" ,alsa-lib)
-       ("pulseaudio" ,pulseaudio)
-       ("libx11" ,libx11)
-       ("freetype" ,freetype)
-       ("wxwidgets-gtk2" ,wxwidgets-gtk2)))
+     (list boost
+           ffms2
+           fftw
+           hunspell
+           mesa
+           libass
+           alsa-lib
+           pulseaudio
+           libx11
+           freetype
+           wxwidgets-gtk2))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("desktop-file-utils" ,desktop-file-utils)
-       ("pkg-config" ,pkg-config)))
+     (list intltool desktop-file-utils pkg-config))
     (home-page "http://www.aegisub.org/")
     (synopsis "Subtitle engine")
     (description
@@ -4233,31 +4381,33 @@ tools for styling them, including a built-in real-time video preview.")
               (url "https://gitlab.gnome.org/GNOME/pitivi.git")
               (commit %version)))
         (file-name (git-file-name name version))
+        (patches (search-patches "pitivi-fix-build-with-meson-0.60.patch"))
         (sha256
          (base32 "08x2fs2bak1fbmkvjijgx1dsawispv91bpv5j5gkqbv5dfgf7wah"))))
      (build-system meson-build-system)
      (inputs
-      `(("glib" ,glib)
-        ("gst-editing-services" ,gst-editing-services)
-        ("gstreamer" ,gstreamer)
-        ("gst-plugins-base" ,gst-plugins-base)
-        ("gst-plugins-good" ,gst-plugins-good)
-        ("gst-plugins-bad"
-         ,(gst-plugins/selection gst-plugins-bad
-                                 #:plugins '("debugutils" "transcoder")
-                                 #:configure-flags '("-Dintrospection=enabled")))
-        ("gst-libav" ,gst-libav)
-        ("gsound" ,gsound)
-        ("gtk+" ,gtk+)
-        ("gdk-pixbuf+svg" ,gdk-pixbuf+svg)
-        ("libpeas" ,libpeas)
-        ("libnotify" ,libnotify)
-        ("pango" ,pango)
-        ("python-gst" ,python-gst)
-        ("python-numpy" ,python-numpy)
-        ("python-matplotlib" ,python-matplotlib)
-        ("python-pycairo" ,python-pycairo)
-        ("python-pygobject" ,python-pygobject)))
+      (list glib
+            gst-editing-services
+            gstreamer
+            gst-plugins-base
+            gst-plugins-good
+            (gst-plugins/selection gst-plugins-bad #:plugins
+                                   '("debugutils" "transcode")
+                                   #:configure-flags
+                                   '("-Dintrospection=enabled"))
+            gst-libav
+            gsound
+            gtk+
+            librsvg
+            libpeas
+            libnotify
+            pango
+            python
+            python-gst
+            python-numpy
+            python-matplotlib
+            python-pycairo
+            python-pygobject))
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("glib:bin" ,glib "bin")
@@ -4272,7 +4422,7 @@ tools for styling them, including a built-in real-time video preview.")
               (let ((prog (string-append (assoc-ref outputs "out")
                                          "/bin/pitivi")))
                 (wrap-program prog
-                  `("PYTHONPATH" = (,(getenv "PYTHONPATH")))
+                  `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH")))
                   `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH")))
                   ;; We've only added inputs for what Pitivi deems either
                   ;; necessary or optional.  Let the user's packages take
@@ -4304,8 +4454,7 @@ to newbies and professionals alike.")
     (arguments
      '(#:configure-flags '("LIBS=-lm")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("doxygen" ,doxygen)))
+     (list pkg-config doxygen))
     (home-page "http://gmerlin.sourceforge.net")
     (synopsis "Low level library for multimedia API building")
     (description
@@ -4347,10 +4496,9 @@ alpha blending etc).")
              #t)))))
     ;; TODO: opencv for additional face detection filters.
     (inputs
-     `(("gavl" ,gavl)
-       ("cairo" ,cairo)))
+     (list gavl cairo))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.dyne.org/software/frei0r/")
     (synopsis "Minimalistic plugin API for video effects")
     (description
@@ -4445,7 +4593,7 @@ changed.  Or in other words, it can detect motion.")
                        (install-file (string-append source "/subdl") bin)
                        (patch-shebang (string-append bin "/subdl")
                                       (list (string-append python "/bin")))))))
-      (inputs `(("python" ,python)))
+      (inputs (list python))
       (synopsis "Command-line tool for downloading subtitles from opensubtitles.org")
       (description "Subdl is a command-line tool for downloading subtitles from
 opensubtitles.org.  By default, it will search for English subtitles, display
@@ -4482,7 +4630,7 @@ save it to the appropriate filename.")
                (invoke "./configure" (string-append "--prefix=" out)
                        "--disable-static")))))))
     (native-inputs
-     `(("which" ,which)))
+     (list which))
     (home-page "https://l-smash.github.io/l-smash/")
     (synopsis "MP4 multiplexer and demultiplexer library")
     (description
@@ -4547,7 +4695,7 @@ create smoother and stable videos.")
 (define-public libopenshot
   (package
     (name "libopenshot")
-    (version "0.2.5")
+    (version "0.2.7")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -4556,11 +4704,11 @@ create smoother and stable videos.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1mxjkgjmjzgf628y3rscc6rqf55hxgjpmvwxlncfk1216i5xskwp"))
+                "0i9bsn8gklm1mvj60l3d3xrxdgy8svpxjfqcwsr308j5zjn30pv8"))
               (modules '((guix build utils)))
               (snippet '(begin
                           ;; Allow overriding of the python installation dir
-                          (substitute* "src/bindings/python/CMakeLists.txt"
+                          (substitute* "bindings/python/CMakeLists.txt"
                             (("(SET\\(PYTHON_MODULE_PATH.*)\\)" _ set)
                              (string-append set " CACHE PATH "
                                             "\"Python bindings directory\")")))
@@ -4572,17 +4720,17 @@ create smoother and stable videos.")
        ("python" ,python)
        ("swig" ,swig)
        ("unittest++" ,unittest-cpp)))
+    (inputs
+     (list alsa-lib zlib))
     (propagated-inputs                  ;all referenced in installed headers
-     `(("cppzmq" ,cppzmq)
-       ;; libopenshot doesn't yet build with ffmpeg 4.4 (see:
-       ;; https://github.com/OpenShot/libopenshot/issues/676).
-       ("ffmpeg" ,ffmpeg-4.3)
-       ("imagemagick" ,imagemagick)
-       ("jsoncpp" ,jsoncpp)
-       ("libopenshot-audio" ,libopenshot-audio)
-       ("qtbase" ,qtbase-5)
-       ("qtmultimedia" ,qtmultimedia)
-       ("zeromq" ,zeromq)))
+     (list cppzmq
+           ffmpeg
+           imagemagick
+           jsoncpp
+           libopenshot-audio
+           qtbase-5
+           qtmultimedia
+           zeromq))
     (arguments
      `(#:configure-flags
        (list (string-append "-DPYTHON_MODULE_PATH:PATH=" %output "/lib/python"
@@ -4598,9 +4746,8 @@ create smoother and stable videos.")
              (setenv "ZMQDIR"
                      (assoc-ref inputs "zeromq"))
              (setenv "UNITTEST_DIR"
-                     (string-append (assoc-ref inputs "unittest++")
-                                    "/include/UnitTest++"))
-             #t)))))
+                     (search-input-directory inputs
+                                             "include/UnitTest++")))))))
     (home-page "https://openshot.org")
     (synopsis "Video-editing, animation, and playback library")
     (description "OpenShot Library (libopenshot) is a powerful C++ video
@@ -4611,7 +4758,7 @@ API.  It includes bindings for Python, Ruby, and other languages.")
 (define-public openshot
   (package
     (name "openshot")
-    (version "2.5.1")
+    (version "2.6.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -4620,7 +4767,7 @@ API.  It includes bindings for Python, Ruby, and other languages.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0qc5i0ay6j2wab1whl41sjb71cj02pg6y79drf7asrprq8b2rmfq"))
+                "0pa8iwl217503bjlqg2zlrw5lxyq5hvxrf5apxrh3843hj1w1myv"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -4628,14 +4775,14 @@ API.  It includes bindings for Python, Ruby, and other languages.")
            (delete-file-recursively "src/images/fonts") #t))))
     (build-system python-build-system)
     (inputs
-     `(("ffmpeg" ,ffmpeg)
-       ("font-dejavu" ,font-dejavu)
-       ("libopenshot" ,libopenshot)
-       ("python" ,python)
-       ("python-pyqt" ,python-pyqt)
-       ("python-pyzmq" ,python-pyzmq)
-       ("python-requests" ,python-requests)
-       ("qtsvg" ,qtsvg)))
+     (list ffmpeg
+           font-dejavu
+           libopenshot
+           python
+           python-pyqt
+           python-pyzmq
+           python-requests
+           qtsvg))
     (arguments
      `(#:modules ((guix build python-build-system)
                   (guix build qt-utils)
@@ -4645,9 +4792,10 @@ API.  It includes bindings for Python, Ruby, and other languages.")
        #:phases (modify-phases %standard-phases
                   (delete 'build)       ;install phase does all the work
                   (replace 'check
-                    (lambda _
-                      (setenv "QT_QPA_PLATFORM" "offscreen")
-                      (invoke "python" "src/tests/query_tests.py")))
+                    (lambda* (#:key tests? #:allow-other-keys)
+                      (when tests?
+                        (setenv "QT_QPA_PLATFORM" "offscreen")
+                        (invoke "python" "src/tests/query_tests.py"))))
                   (add-after 'unpack 'patch-font-location
                     (lambda* (#:key inputs #:allow-other-keys)
                       (let ((font (assoc-ref inputs "font-dejavu")))
@@ -4656,6 +4804,12 @@ API.  It includes bindings for Python, Ruby, and other languages.")
                           (("fonts") "share/fonts/truetype")
                           (("[A-Za-z_-]+.ttf") "DejaVuSans.ttf")))
                       #t))
+                  ;; https://github.com/OpenShot/openshot-qt/issues/4502
+                  (add-before 'ensure-no-mtimes-pre-1980 'fix-symbolic-link
+                    (lambda _
+                      (delete-file "images/Humanity/actions/custom/razor_line_with_razor.png")
+                      (symlink "../../../../src/timeline/media/images/razor_line_with_razor.png"
+                               "images/Humanity/actions/custom/razor_line_with_razor.png")))
                   (add-before 'install 'set-tmp-home
                     (lambda _
                       ;; src/classes/info.py "needs" to create several
@@ -4678,7 +4832,7 @@ transitions, and effects and then export your film to many common formats.")
 (define-public shotcut
   (package
     (name "shotcut")
-    (version "21.09.13")
+    (version "21.12.24")
     (source
      (origin
        (method git-fetch)
@@ -4687,12 +4841,23 @@ transitions, and effects and then export your film to many common formats.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0dwf9kbx52zdjm3m8sp7dxmlnz3v1lhyaw1kaw8imnjpdbyx30p1"))))
+        (base32 "1l27dqiyi3af0v155w62ib9xcmqyjj2yzs83aqhcrz5pb3i3j18r"))))
     (build-system qt-build-system)
     (arguments
-     `(#:tests? #f ;there are no tests
+     `(#:tests? #f                      ;there are no tests
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'patch-executable-paths
+           (lambda* (#:key inputs #:allow-other-keys)
+             ;; Shotcut expects ffmpeg and melt executables in the shotcut
+             ;; directory.  Use full store paths.
+             (let* ((ffmpeg (assoc-ref inputs "ffmpeg"))
+                    (mlt (assoc-ref inputs "mlt")))
+               (substitute* "src/jobs/ffmpegjob.cpp"
+                 (("\"ffmpeg\"") (string-append "\"" ffmpeg "/bin/ffmpeg\"")))
+               (substitute* "src/jobs/meltjob.cpp"
+                 (("\"melt\"") (string-append "\"" mlt "/bin/melt\""))
+                 (("\"melt-7\"") (string-append "\"" mlt "/bin/melt-7\""))))))
          (replace 'configure
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out")))
@@ -4705,43 +4870,45 @@ transitions, and effects and then export your film to many common formats.")
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
                     (frei0r (assoc-ref inputs "frei0r-plugins"))
-                    (ffmpeg (assoc-ref inputs "ffmpeg"))
                     (jack (assoc-ref inputs "jack"))
+                    (ladspa (assoc-ref inputs "ladspa"))
+                    (mlt (assoc-ref inputs "mlt"))
                     (sdl2 (assoc-ref inputs "sdl2")))
                (wrap-program (string-append out "/bin/shotcut")
-                 `("PATH" ":" prefix
-                   ,(list (string-append ffmpeg "/bin")))
+                 `("FREI0R_PATH" ":" =
+                   (,(string-append frei0r "/lib/frei0r-1")))
+                 `("LADSPA_PATH" ":" =
+                   (,(string-append ladspa "/lib/ladspa")))
                  `("LD_LIBRARY_PATH" ":" prefix
                    ,(list (string-append jack "/lib" ":" sdl2 "/lib")))
-                 `("FREI0R_PATH" ":" =
-                   (,(string-append frei0r "/lib/frei0r-1/")))
-                 `("MLT_PREFIX" ":" =
-                   (,(assoc-ref inputs "mlt"))))))))))
+                 `("PATH" ":" prefix
+                   ,(list (string-append mlt "/bin"))))))))))
     (native-inputs
      `(("pkg-config" ,pkg-config)
-       ("python" ,python-wrapper)
+       ("python-wrapper" ,python-wrapper)
        ("qttools" ,qttools)))
     (inputs
-     `(("ffmpeg" ,ffmpeg)
-       ("frei0r-plugins" ,frei0r-plugins)
-       ("jack" ,jack-1)
-       ("ladspa" ,ladspa)
-       ("lame" ,lame)
-       ("libvpx" ,libvpx)
-       ("libx264" ,libx264)
-       ("mlt" ,mlt)
-       ("pulseaudio" ,pulseaudio)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtgraphicaleffects" ,qtgraphicaleffects)
-       ("qtmultimedia" ,qtmultimedia)
-       ("qtquickcontrols" ,qtquickcontrols)
-       ("qtquickcontrols2" ,qtquickcontrols2)
-       ("qtsvg" ,qtsvg)
-       ("qtwebkit" ,qtwebkit)
-       ("qtwebsockets" ,qtwebsockets)
-       ("qtx11extras" ,qtx11extras)
-       ("sdl2" ,sdl2)))
+     (list bash-minimal
+           ffmpeg
+           frei0r-plugins
+           jack-1
+           ladspa
+           lame
+           libvpx
+           libx264
+           mlt
+           pulseaudio
+           qtbase-5
+           qtdeclarative
+           qtgraphicaleffects
+           qtmultimedia
+           qtquickcontrols
+           qtquickcontrols2
+           qtsvg
+           qtwebkit
+           qtwebsockets
+           qtx11extras
+           sdl2))
     (home-page "https://www.shotcut.org/")
     (synopsis "Video editor built on the MLT framework")
     (description
@@ -4764,7 +4931,7 @@ and audio capture, network stream playback, and many more.")
         (sha256
          (base32 "0bkps488h9s15ylvkm4fmfywgrpbw570glawpnv6khpq9n223dzl"))))
     (build-system meson-build-system)
-    (native-inputs `(("nasm" ,nasm)))
+    (native-inputs (list nasm))
     (home-page "https://code.videolan.org/videolan/dav1d")
     (synopsis "AV1 decoder")
     (description "dav1d is a new AV1 cross-platform decoder, and focused on
@@ -4788,12 +4955,8 @@ speed and correctness.")
           (base32
            "01qbcgfl3g9kfwn1jf1z9pdj3bvf5lmg71d1vwkcllc2az24bjqp"))))
       (build-system meson-build-system)
-      (native-inputs `(("libdrm" ,libdrm)
-                       ("pkg-config" ,pkg-config)))
-      (inputs `(("ffmpeg" ,ffmpeg)
-                ("pulseaudio" ,pulseaudio)
-                ("wayland" ,wayland)
-                ("wayland-protocols" ,wayland-protocols)))
+      (native-inputs (list libdrm pkg-config))
+      (inputs (list ffmpeg pulseaudio wayland wayland-protocols))
       (home-page "https://github.com/atomnuker/wlstream")
       (synopsis "Screen capture tool for Wayland sessions")
       (description "Wlstream is a screen capture tool for recording audio and
@@ -4818,22 +4981,29 @@ video from a Wayland session.")
      `(("gettext" ,gettext-minimal)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("python-pygobject" ,python-pygobject)
-       ("gtk+" ,gtk+)
-       ("python-pycairo" ,python-pycairo) ; Required or else clicking on a subtitle line fails.
-       ("python-chardet" ,python-chardet) ; Optional: Character encoding detection.
-       ("gtkspell3" ,gtkspell3)           ; Optional: Inline spell-checking.
-       ("iso-codes" ,iso-codes)           ; Optional: Translations.
-       ("gstreamer" ,gstreamer)
-       ("gst-libav" ,gst-libav)
-       ("gst-plugins-base" ,gst-plugins-base)
-       ("gst-plugins-good" ,gst-plugins-good)
-       ("gst-plugins-bad" ,gst-plugins-bad)
-       ("gst-plugins-ugly" ,gst-plugins-ugly)))
+     (list python-pygobject
+           gtk+
+           python-pycairo ; Required or else clicking on a subtitle line fails.
+           python-chardet ; Optional: Character encoding detection.
+           gtkspell3 ; Optional: Inline spell-checking.
+           iso-codes ; Optional: Translations.
+           gstreamer
+           gst-libav
+           gst-plugins-base
+           gst-plugins-good
+           gst-plugins-bad
+           gst-plugins-ugly))
     (arguments
      `(#:tests? #f                      ; Tests seem to require networking.
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'disable-builtin-byte-compilation
+           (lambda _
+             ;; The setup.py script attempts to compile bytecode and fails.
+             ;; We compile bytecode in a separate phase, so just disable it.
+             (substitute* "setup.py"
+               (("distutils\\.util\\.byte_compile\\(.*")
+                ""))))
          ;; gaupol's setup.py script does not support one of the Python build
          ;; system's default flags, "--single-version-externally-managed".
          (replace 'install
@@ -4848,8 +5018,7 @@ video from a Wayland session.")
                    (gi-typelib-path (getenv "GI_TYPELIB_PATH")))
                (wrap-program (string-append out "/bin/gaupol")
                  `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path))
-                 `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))))
-             #t))
+                 `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))))))
          (add-after 'unpack 'patch-data-dir
            ;; Fix some path variables that setup.py seems to garble.
            (lambda* (#:key outputs #:allow-other-keys)
@@ -4858,8 +5027,7 @@ video from a Wayland session.")
                  (("DATA_DIR = \\{!r\\}\"\\.format\\(data_dir\\)")
                   (string-append "DATA_DIR = '" out "/share/gaupol'\""))
                  (("LOCALE_DIR = \\{!r\\}\"\\.format\\(locale_dir\\)")
-                  (string-append "LOCALE_DIR = '" out "/share/locale'\"")))
-               #t))))))
+                  (string-append "LOCALE_DIR = '" out "/share/locale'\"")))))))))
     (synopsis "Editor for text-based subtitles")
     (description
      "Gaupol supports multiple subtitle file formats and provides means of
@@ -4901,7 +5069,7 @@ to convenience of translating and batch processing of multiple documents.")
                #t)))))
       (native-inputs
        ;; For tests.
-       `(("sdl2" ,sdl2)))
+       (list sdl2))
       (home-page "https://github.com/FNA-XNA/Theorafile")
       (synopsis "Ogg Theora Video Decoder Library")
       (description "Theorafile is a library for quickly and easily decoding Ogg
@@ -4922,8 +5090,7 @@ Theora videos.  Theorafile was written to be used for FNA's VideoPlayer.")
         (base32 "1rl3h7waqja8blmbpmwy01q9fgr5r0c32b8dy3pbf59bp3xmd37g"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libdvdcss" ,libdvdcss)
-       ("libdvdread" ,libdvdread)))
+     (list libdvdcss libdvdread))
     (home-page "http://dvdbackup.sourceforge.net")
     (synopsis "DVD video ripper")
     (description
@@ -4935,7 +5102,7 @@ transcode or reformat the videos in any way, producing perfect backups.")
 (define-public svt-av1
   (package
     (name "svt-av1")
-    (version "0.8.7")
+    (version "0.9.0")
     (source
      (origin
        (method git-fetch)
@@ -4944,7 +5111,7 @@ transcode or reformat the videos in any way, producing perfect backups.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1xlxb6kn6hqz9dxz0nd905m4i2mwjwq1330rbabwzmg4b66cdslg"))))
+        (base32 "1mavggl6f7pk7xs22859vm19qp9csjvdcys3b6n2f4pljqkp4qcj"))))
     (build-system cmake-build-system)
     ;; SVT-AV1 only supports 64-bit Intel-compatible CPUs.
     (supported-systems '("x86_64-linux"))
@@ -4961,7 +5128,7 @@ transcode or reformat the videos in any way, producing perfect backups.")
                (copy-recursively "../source/Docs" doc)
                #t))))))
     (native-inputs
-     `(("yasm" ,yasm)))
+     (list yasm))
     (synopsis "AV1 video codec")
     (description "SVT-AV1 is an AV1 codec implementation.  The encoder is a
 work-in-progress, aiming to support video-on-demand and live streaming
@@ -4996,7 +5163,7 @@ applications.  It only supports Intel-compatible CPUs (x86).")
                (copy-recursively "../source/Docs" doc)
                #t))))))
     (native-inputs
-     `(("yasm" ,yasm)))
+     (list yasm))
     (home-page "https://github.com/OpenVisualCloud/SVT-VP9")
     (synopsis "VP9 video encoder")
     (description "SVT-VP9 is a VP9 video encoder implementation.  It is focused
@@ -5015,6 +5182,8 @@ on supporting video-on-demand and live encoding on Intel Xeon processors.")
        (sha256
         (base32 "1zkgnj2sfvckix360wwk1v5s43g69snm45m0drnzyv7hgf5g7q1q"))))
     (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags '("CFLAGS=-O2 -g -fcommon")))
     (synopsis "Scan ATSC/DVB-C/DVB-S/DVB-T channels")
     (description
      "This is a small command line utility used to perform frequency scans for
@@ -5031,10 +5200,38 @@ result in several formats:
     (home-page "https://www.gen2vdr.de/wirbel/w_scan/index2.html")
     (license license:gpl2+)))
 
+;;; XXX: This crate is used only for rav1e and can be removed once the latter
+;;; is updated.  See <https://issues.guix.gnu.org/52837>.
+(define rust-dav1d-sys-0.3.2
+  (package
+    (name "rust-dav1d-sys")
+    (version "0.3.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "dav1d-sys" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1jdxhnlxcml6jd67lx78ifzkn1xm18zfk4li7vjdh3fa61i073kx"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-bindgen" ,rust-bindgen-0.54)
+        ("rust-metadeps" ,rust-metadeps-1))))
+    (native-inputs
+     (list pkg-config))
+    (inputs
+     (list dav1d clang llvm))
+    (home-page "https://github.com/rust-av/dav1d-rs")
+    (synopsis "FFI bindings to dav1d")
+    (description "This package provides FFI bindings to dav1d.")
+    (license license:expat)))
+
 (define-public rav1e
   (package
     (name "rav1e")
-    (version "0.4.1")
+    (version "0.5.1")
     (source
      (origin
        (method url-fetch)
@@ -5043,15 +5240,18 @@ result in several formats:
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "00rjil6qbrwfxhhlq9yvidxm0gp9qdbywhf5zvkj85lykbhyff09"))))
+         "006bfcmjwg0phg8gc25b1sl2ngjrb2bh1b3fd0s5gbf9nlkr8qsn"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:cargo-inputs
-       (("rust-aom-sys" ,rust-aom-sys-0.2)
+     `(;; Strip the '--release' flag to work around the doctest failures with
+       ;; Rust 1.57 (see: https://github.com/xiph/rav1e/issues/2851).
+       #:cargo-test-flags '()
+       #:cargo-inputs
+       (("rust-aom-sys" ,rust-aom-sys-0.3)
         ("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-av-metrics" ,rust-av-metrics-0.6)
+        ("rust-arrayvec" ,rust-arrayvec-0.7)
+        ("rust-av-metrics" ,rust-av-metrics-0.7)
         ("rust-backtrace" ,rust-backtrace-0.3)
         ("rust-bitstream-io" ,rust-bitstream-io-1)
         ("rust-byteorder" ,rust-byteorder-1)
@@ -5078,7 +5278,7 @@ result in several formats:
         ("rust-rayon" ,rust-rayon-1)
         ("rust-regex" ,rust-regex-1)
         ("rust-rust-hawktracer" ,rust-rust-hawktracer-0.7)
-        ("rust-rustc-version" ,rust-rustc-version-0.3)
+        ("rust-rustc-version" ,rust-rustc-version-0.4)
         ("rust-scan-fmt" ,rust-scan-fmt-0.2)
         ("rust-serde" ,rust-serde-1)
         ("rust-signal-hook" ,rust-signal-hook-0.3)
@@ -5090,16 +5290,21 @@ result in several formats:
         ("rust-wasm-bindgen" ,rust-wasm-bindgen-0.2)
         ("rust-y4m" ,rust-y4m-0.7))
        #:cargo-development-inputs
-       (("rust-assert-cmd" ,rust-assert-cmd-1)
+       (("rust-assert-cmd" ,rust-assert-cmd-2)
         ("rust-cc" ,rust-cc-1)
         ("rust-criterion" ,rust-criterion-0.3)
         ("rust-interpolate-name" ,rust-interpolate-name-0.2)
-        ("rust-pretty-assertions" ,rust-pretty-assertions-0.6)
+        ("rust-pretty-assertions" ,rust-pretty-assertions-0.7)
         ("rust-rand" ,rust-rand-0.8)
         ("rust-rand-chacha" ,rust-rand-chacha-0.3)
-        ("rust-semver" ,rust-semver-0.11))
+        ("rust-semver" ,rust-semver-1))
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'relax-versions
+           (lambda _
+             (substitute* "Cargo.toml"
+               ;; Allow using more recent versions of
+               (("~3.1.2") "~3"))))
          (replace 'build
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
@@ -5131,7 +5336,8 @@ for cases where libaom (the reference encoder) is too slow.")
     (build-system meson-build-system)
     (arguments '(#:glib-or-gtk? #t))
     (inputs
-     `(("gtk+" ,gtk+)))
+     `(("gtk+" ,gtk+)
+       ("python" ,python-wrapper)))
     (native-inputs
      `(("desktop-file-utils" ,desktop-file-utils) ; for update-desktop-database
        ("gettext" ,gettext-minimal)
@@ -5165,13 +5371,9 @@ can also directly record to WebM or MP4 if you prefer.")
                 "1cw6kpcbl33wh95pvy32xrsrm6kkk1awccr3phyh885xjs3b3iim"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("ffmpeg" ,ffmpeg)
-       ("pulseaudio" ,pulseaudio)
-       ("wayland" ,wayland)
-       ("wayland-protocols" ,wayland-protocols)
-       ("libx264" ,libx264)))
+     (list ffmpeg pulseaudio wayland wayland-protocols libx264))
     (home-page "https://github.com/ammen99/wf-recorder")
     (synopsis "Screen recorder for wlroots-based compositors")
     (description
@@ -5196,18 +5398,17 @@ wlroots-based compositors.  More specifically, those that support
      ;; There are no tests and "make check" would fail on an intltool error.
      '(#:tests? #f))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("eudev" ,eudev)
-       ("libusb" ,libusb)
-       ("v4l-utils" ,v4l-utils)                   ;libv4l2
-       ("ffmpeg" ,ffmpeg)                         ;libavcodec, libavutil
-       ("sdl2" ,sdl2)
-       ("gsl" ,gsl)
-       ("portaudio" ,portaudio)
-       ("alsa-lib" ,alsa-lib)))
+     (list gtk+
+           eudev
+           libusb
+           v4l-utils ;libv4l2
+           ffmpeg ;libavcodec, libavutil
+           sdl2
+           gsl
+           portaudio
+           alsa-lib))
     (home-page "http://guvcview.sourceforge.net/")
     (synopsis "Control your webcam and capture videos and images")
     (description
@@ -5261,9 +5462,7 @@ brightness, contrast, and frame rate.")
                    prefix (,(string-append perllib ":" (getenv "PERL5LIB")))))
                #t))))))
     (inputs
-     `(("perl-mojolicious" ,perl-mojolicious)
-       ("perl-lwp-protocol-https" ,perl-lwp-protocol-https)
-       ("perl-xml-libxml" ,perl-xml-libxml)))
+     (list perl-mojolicious perl-lwp-protocol-https perl-xml-libxml))
     (home-page "https://github.com/get-iplayer/get_iplayer")
     (synopsis "Download or stream available BBC iPlayer TV and radio programmes")
     (description "@code{get_iplayer} lists, searches and records BBC iPlayer
@@ -5289,8 +5488,7 @@ BBC iPlayer output.")
                 "1spx81p5wf59ksl3r3gvf78d77sh7gj8a6lw773iv67bphfivmn8"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libvorbis" ,libvorbis)
-       ("libdvdread" ,libdvdread)))
+     (list libvorbis libdvdread))
     (synopsis "Information, extraction or creation for OGG media streams")
     (description
      "These tools allow information about (@code{ogminfo}) or extraction from
@@ -5317,7 +5515,7 @@ includes @code{dvdxchap} tool for extracting chapter information from DVD.")
      `(#:tests? #f ; Cannot figure out how to run the unit tests
        #:configure-flags '("-DENABLE_RE2C=ON")))
     (native-inputs
-     `(("re2c" ,re2c)))
+     (list re2c))
     (synopsis "CEA608 / CEA708 closed-caption codec")
     (description "Libcaption creates and parses closed-caption data,
 providing an encoder / decoder for the EIA608 and CEA708 closed-caption
@@ -5335,3 +5533,43 @@ information) NALUs (Network Abstraction Layer Unit) for inclusion into an h.264
 elementary stream are provided.")
     (home-page "https://github.com/szatmary/libcaption")
     (license license:expat)))
+
+(define-public video-contact-sheet
+  (package
+   (name "video-contact-sheet")
+   (version "1.13.4")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append "http://p.outlyer.net/vcs/files/vcs-" version
+				".tar.gz"))
+            (sha256
+             (base32
+              "0jsl93r0rnybjcipqbww5hwsr9ln6kz1qnf32qfxdvhfw52n27fw"))))
+   (build-system gnu-build-system)
+   (arguments
+     (list
+       #:make-flags
+       #~(list (string-append "prefix=" #$output))
+       #:phases
+       #~(modify-phases %standard-phases
+          (delete 'configure)
+          (delete 'build)
+          (delete 'check)
+          (add-after 'install 'wrap-program
+            (lambda _
+              (wrap-program (string-append #$output "/bin/vcs")
+                `("PATH" ":" prefix
+                  ,(map (lambda (dir)
+                          (string-append dir "/bin"))
+                        (list #$(this-package-input "ffmpeg")
+                              #$(this-package-input "imagemagick"))))))))))
+   (inputs
+     (list bash-minimal ffmpeg imagemagick))
+   (synopsis "Create contact sheets (preview images) from videos")
+   (description "@acronym{VCS, Video Contact Sheet} is a Bash script meant to
+create video contact sheets (previews) of videos.  Any video supported by
+MPlayer and FFmpeg can be used.  A note of warning: Unlike most similar tools
+VCS, by default, makes screenshots the same size as the video, see the manual
+for details on how to change this.")
+   (home-page "http://p.outlyer.net/vcs/")
+   (license license:lgpl2.1+)))
diff --git a/gnu/packages/vim.scm b/gnu/packages/vim.scm
index ee836d2789..d5667851a8 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, 2021 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021, 2022 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>
@@ -11,6 +11,7 @@
 ;;; Copyright © 2020, 2021 Jack Hill <jackhill@jackhill.us>
 ;;; Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
 ;;; Copyright © 2021 Tissevert <tissevert+guix@marvid.fr>
+;;; Copyright © 2021 Foo Chuan Wei <chuanwei.foo@hotmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -30,6 +31,7 @@
 (define-module (gnu packages vim)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
+  #:use-module (guix gexp)
   #:use-module (guix utils)
   #:use-module (guix download)
   #:use-module (guix git-download)
@@ -43,6 +45,7 @@
   #:use-module (gnu packages attr)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages code)
   #:use-module (gnu packages enlightenment)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages gawk)
@@ -73,7 +76,7 @@
 (define-public vim
   (package
     (name "vim")
-    (version "8.2.2689")
+    (version "8.2.3995")
     (source (origin
              (method git-fetch)
              (uri (git-reference
@@ -82,13 +85,11 @@
              (file-name (git-file-name name version))
              (sha256
               (base32
-               "0l0hkr8cw7fdsfc5zzcxx3q1wmv9k3hrgalvffq0l69lviqdgh0p"))))
+               "1aqrywyry4vxf1x7mk5g1k5k6md38bnjb6f778hmk8ahx26mpqpb"))))
     (build-system gnu-build-system)
     (arguments
      `(#:test-target "test"
        #:parallel-tests? #f
-       ;; Fix test_signals.vim. https://github.com/vim/vim/issues/7402
-       #:make-flags (list "CFLAGS=-D_REENTRANT")
        #:phases
        (modify-phases %standard-phases
          (add-after 'configure 'patch-absolute-paths
@@ -98,23 +99,21 @@
              (substitute* '("src/testdir/Makefile"
                             "src/testdir/test_normal.vim"
                             "src/testdir/test_popupwin.vim"
+                            "src/testdir/test_shell.vim"
                             "src/testdir/test_system.vim"
                             "src/testdir/test_terminal.vim"
                             "src/testdir/test_terminal2.vim")
                (("/bin/sh") (which "sh")))
              (substitute* "src/testdir/test_autocmd.vim"
-               (("/bin/kill") (which "kill")))
-             #t))
+               (("/bin/kill") (which "kill")))))
          (add-before 'check 'set-environment-variables
            (lambda* (#:key inputs #:allow-other-keys)
              ;; One of the tests tests timezone-dependent functions.
              (setenv "TZDIR"
-                     (string-append (assoc-ref inputs "tzdata")
-                                    "/share/zoneinfo"))
+                     (search-input-directory inputs "share/zoneinfo"))
 
              ;; Make sure the TERM environment variable is set for the tests
-             (setenv "TERM" "xterm")
-             #t))
+             (setenv "TERM" "xterm")))
          (add-before 'check 'skip-or-fix-failing-tests
            (lambda _
              ;; This test assumes that PID 1 is run as root and that the user
@@ -139,8 +138,7 @@
                 (string-append line "return\n")))
              (substitute* "src/testdir/test_popupwin.vim"
                ((".*Test_popup_drag_termwin.*" line)
-                (string-append line "return\n")))
-             #t))
+                (string-append line "return\n")))))
          (add-before 'install 'fix-installman.sh
            (lambda _
              (substitute* "src/installman.sh"
@@ -151,13 +149,9 @@
              (let ((vimdir (string-append (assoc-ref outputs "out") "/share/vim")))
                (mkdir-p vimdir)
                (copy-file (assoc-ref inputs "guix.vim")
-                          (string-append vimdir "/vimrc"))
-               #t))))))
+                          (string-append vimdir "/vimrc"))))))))
     (inputs
-     `(("gawk" ,gawk)
-       ("ncurses" ,ncurses)
-       ("perl" ,perl)
-       ("tcsh" ,tcsh)))                 ; For runtime/tools/vim32
+     (list gawk ncurses perl tcsh))                 ; For runtime/tools/vim32
     (native-inputs
      `(("libtool" ,libtool)
        ("guix.vim" ,(search-auxiliary-file "guix.vim"))
@@ -183,20 +177,19 @@ configuration files.")
   (package (inherit vim)
     (name "xxd")
     (arguments
-     `(#:make-flags (list ,(string-append "CC=" (cc-for-target)))
+     (list
+       #:make-flags #~(list (string-append "CC=" #$(cc-for-target)))
        #:tests? #f ; there are none
        #:phases
-       (modify-phases %standard-phases
-         (delete 'configure)
-         (add-after 'unpack 'chdir
-           (lambda _
-             (chdir "src/xxd")
-             #t))
-         (replace 'install
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((bin (string-append (assoc-ref outputs "out") "/bin")))
-               (install-file "xxd" bin)
-               #t))))))
+       #~(modify-phases %standard-phases
+           (delete 'configure)
+           (add-after 'unpack 'chdir
+             (lambda _
+               (chdir "src/xxd")))
+           (replace 'install
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let ((bin (string-append (assoc-ref outputs "out") "/bin")))
+                 (install-file "xxd" bin)))))))
     (inputs `())
     (native-inputs `())
     (synopsis "Hexdump utility from vim")
@@ -205,9 +198,6 @@ with the editor vim.")))
 
 (define-public vim-full
   (package
-    ;; This package should share its source with Vim, but it doesn't
-    ;; build reliably, and we want to keep Vim up to date due to the
-    ;; frequency of important bug fixes.
     (inherit vim)
     (name "vim-full")
     (arguments
@@ -233,7 +223,7 @@ with the editor vim.")))
            ((#:make-flags flags)
             `(append
               (list "LDFLAGS=-lexpat")
-              (delete "CFLAGS=-D_REENTRANT" ,flags)))
+              ,flags))
            ((#:phases phases)
             `(modify-phases ,phases
                (add-before 'check 'start-xserver
@@ -245,9 +235,8 @@ with the editor vim.")))
                      (zero? (system (string-append xorg-server "/bin/Xvfb "
                                                     display " &")))))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("xorg-server" ,xorg-server-for-tests)
-       ,@(package-native-inputs vim)))
+     (modify-inputs (package-native-inputs vim)
+       (prepend pkg-config xorg-server-for-tests)))
     (inputs
      `(("acl" ,acl)
        ("atk" ,atk)
@@ -390,32 +379,32 @@ trouble using them, because you do not have to remember each snippet name.")
     (license license:expat))))
 
 (define-public vim-scheme
-  (let ((commit "93827987c10f2d5dc519166a761f219204926d5f")
-        (revision "1"))
+  (let ((commit "e22fc8e199ef52f2efacd08e71c3add90d83b375")
+        (revision "3"))
     (package
       (name "vim-scheme")
-      (version (string-append "0.0.0-" revision "." (string-take commit 7)))
+      (version (git-version "0.0.0" revision commit))
       (source
        (origin
          (method git-fetch)
          (uri (git-reference
-               (url "http://git.foldling.org/vim-scheme.git")
+               (url "https://git.foldling.org/vim-scheme.git")
                (commit commit)))
-         (file-name (string-append name "-" version "-checkout"))
+         (file-name (git-file-name name version))
          (sha256
           (base32
-           "1ynjr1109dxgj0lz261gmzz3wf5ap1m6j6hnvl3lcyv66a4y8pjv"))))
+           "04h946vr4f8wxap3wzqs69y2v8n50g2zbk22jsg2kxr4c01z5cbw"))))
       (build-system copy-build-system)
       (arguments
        '(#:install-plan
-         '(("after" "share/vim/vimfiles/")
-           ("ftplugin" "share/vim/vimfiles/")
+         '(("ftplugin" "share/vim/vimfiles/")
+           ("indent" "share/vim/vimfiles/")
            ("syntax" "share/vim/vimfiles/"))))
       (synopsis "Scheme syntax for Vim")
       (description
        "@code{vim-scheme} provides Scheme support for Vim (R7RS and CHICKEN).")
       (home-page "https://foldling.org/git/vim-scheme.git/")
-      (license license:public-domain))))
+      (license license:unlicense))))
 
 (define-public vim-luna
   (let ((commit "633619953dcf8577168e255230f96b05f28d6371")
@@ -474,7 +463,7 @@ trouble using them, because you do not have to remember each snippet name.")
 (define-public vim-fugitive
   (package
     (name "vim-fugitive")
-    (version "3.3")
+    (version "3.6")
     (source
       (origin
         (method git-fetch)
@@ -483,14 +472,14 @@ trouble using them, because you do not have to remember each snippet name.")
                (commit (string-append "v" version))))
         (file-name (git-file-name name version))
         (sha256
-         (base32
-          "1ybmy2dk9zsmd3kyyj40qn20gzgd16n5p77sjxp8bspx3zb7km5y"))))
+         (base32 "17c3wzqkbzbf0nmlxpgk90yyv3d09209fqxqysand8bzb1cbfwzn"))))
     (build-system copy-build-system)
     (arguments
      '(#:install-plan
        '(("autoload" "share/vim/vimfiles/")
          ("doc" "share/vim/vimfiles/")
          ("ftdetect" "share/vim/vimfiles/")
+         ("ftplugin" "share/vim/vimfiles/")
          ("plugin" "share/vim/vimfiles/")
          ("syntax" "share/vim/vimfiles/"))))
     (home-page "https://github.com/tpope/vim-fugitive")
@@ -772,8 +761,7 @@ refactor Vim in order to:
        (modify-phases %standard-phases
          (add-after 'configure 'reference-nvim
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((nvim (string-append (assoc-ref inputs "neovim")
-                                        "/bin/nvim")))
+             (let ((nvim (search-input-file inputs "/bin/nvim")))
                ;; This substitution should change one line, and replaces the default
                ;; value in the struct of options with an absolute store reference.
                (substitute* "../source/src/main.c"
@@ -782,11 +770,9 @@ refactor Vim in order to:
          (add-before 'build 'set-home
            (lambda _ (setenv "HOME" "/tmp"))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("efl" ,efl)
-       ("msgpack" ,msgpack)
-       ("neovim" ,neovim)))
+     (list efl msgpack neovim))
     (home-page "https://github.com/jeanguyomarch/eovim/")
     (synopsis "EFL GUI for Neovim")
     (description "Graphical Neovim interface based on the @acronym{EFL, Enlightenment
@@ -838,11 +824,9 @@ and support for fonts with ligatures.")
                 (delete-file-recursively (string-append vifm "/vim")))
               #t)))))
     (native-inputs
-     `(("groff" ,groff))) ; for the documentation
+     (list groff)) ; for the documentation
     (inputs
-     `(("libx11" ,libx11)
-       ("ncurses" ,ncurses)
-       ("perl" ,perl)))
+     (list libx11 ncurses perl))
     (home-page "https://vifm.info/")
     (synopsis "Flexible vi-like file manager using ncurses")
     (description "Vifm is a file manager providing a @command{vi}-like usage
@@ -887,8 +871,7 @@ With the package comes a plugin to use vifm as a vim file selector.")
                 "13qgwkqbx012j5spis1aw8rb120rw0zphgjy1j58irax8r6j1ikb"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-greenlet" ,python-greenlet)
-       ("python-msgpack" ,python-msgpack)))
+     (list python-greenlet python-msgpack))
     (arguments
      `(#:tests? #f))
     (home-page "https://github.com/neovim/pynvim")
@@ -901,16 +884,16 @@ through its msgpack-rpc API.")
 (define-public vim-guix-vim
   (package
     (name "vim-guix-vim")
-    (version "0.3.0")
+    (version "0.3.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
-                     (url "https://gitlab.com/Efraim/guix.vim.git/")
+                     (url "https://gitlab.com/Efraim/guix.vim")
                      (commit version)))
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0bk2mnvbv1rfr0zzx4m8jjdw98wbbmdffx1h9svrjpg25lcvqv1b"))))
+                "080ni4z23qdr8rkrswjqfqfrrcnpn7qdgrg14glwji46wzvwxqyx"))))
     (build-system copy-build-system)
     (arguments
      '(#:install-plan
@@ -1067,3 +1050,317 @@ your code every time you make a change.  @code{Vim-slime} is an attempt at
 getting some of these features into Vim.  It works with any REPL and isn't tied
 to Lisp.")
       (license license:expat))))
+
+(define-public vim-paredit
+  ;; The last tagged version is from August 2013.
+  (let ((commit "97d51d099523b37bb35cbcf3564cbfb46e66e4ec")
+        (revision "1"))
+    (package
+      (name "vim-paredit")
+      (version (git-version "0.9.11" revision commit))
+      (source
+        (origin
+          (method git-fetch)
+          (uri (git-reference
+                 (url "https://github.com/kovisoft/paredit")
+                 (commit commit)))
+          (file-name (git-file-name name version))
+          (sha256
+           (base32 "07d5s20r0ssd7rir45vy0fqlci44gha1a81rcilgar227f3nw328"))))
+      (build-system copy-build-system)
+      (arguments
+       '(#:install-plan
+         '(("doc" "share/vim/vimfiles/")
+           ("plugin" "share/vim/vimfiles/"))))
+      (home-page "https://github.com/kovisoft/paredit")
+      (synopsis "Vim plugin for structured editing of Lisp S-expressions")
+      (description
+       "Paredit performs structured editing of Lisp S-expressions in Vim.
+@code{Paredit.vim} is similar to @code{paredit.el} for Emacs.")
+      ;; License listed in plugin/paredit.vim.
+      (license license:public-domain))))
+
+(define-public vim-surround
+  (package
+    (name "vim-surround")
+    (version "2.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+              (url "https://github.com/tpope/vim-surround")
+              (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1b0bd5m5lv1p4d299mrwjfs2gk0zqwyaqdaid9hs9yqlxnr8s5nf"))))
+    (build-system copy-build-system)
+    (arguments
+     '(#:install-plan
+       '(("doc" "share/vim/vimfiles/")
+         ("plugin" "share/vim/vimfiles/"))))
+    (home-page "https://github.com/tpope/vim-surround")
+    (synopsis "Vim plugin for easy quoting and parenthesizing")
+    (description
+     "Surround.vim is all about \"surroundings\": parentheses, brackets,
+quotes, XML tags, and more.  The plugin provides mappings to easily delete,
+change and add such surroundings in pairs.")
+    (license license:vim)))
+
+(define-public vim-gnupg
+  (package
+    (name "vim-gnupg")
+    (version "2.7.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/jamessan/vim-gnupg/releases/"
+                           "download/v" version
+                           "/vim-gnupg-v" version ".tar.gz"))
+       (sha256
+        (base32 "02w8lgyyh7wgxysvmmcf9ja5c06vrbyh3alzvv97x8cfhrp0skn7"))))
+    (build-system copy-build-system)
+    (arguments
+     '(#:install-plan
+       '(("autoload" "share/vim/vimfiles/")
+         ("doc" "share/vim/vimfiles/")
+         ("plugin" "share/vim/vimfiles/"))))
+    (home-page "https://www.vim.org/scripts/script.php?script_id=3645")
+    (synopsis "Vim plugin for transparent editing of gpg encrypted files")
+    (description
+     "This script implements transparent editing of gpg encrypted files.  The
+filename must have a @code{.gpg}, @code{.pgp} or @code{.asc} suffix.  When
+opening such a file the content is decrypted, and the content will be encrypted
+to all recipients before it is written.  This script turns off viminfo,
+swapfile, and undofile when editing encrypted files to increase security.")
+    (properties
+     '((release-monitoring-url . "https://github.com/jamessan/vim-gnupg/releases")))
+    (license license:gpl2+)))
+
+(define-public vim-ctrlp
+  (package
+    (name "vim-ctrlp")
+    (version "1.81")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+              (url "https://github.com/ctrlpvim/ctrlp.vim")
+              (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0n68hg59h4rjn0ziqbsh5pr03l3kr98zk54659ny6vq107af1w96"))))
+    (build-system copy-build-system)
+    (arguments
+     '(#:install-plan
+       '(("autoload" "share/vim/vimfiles/")
+         ("doc" "share/vim/vimfiles/")
+         ("plugin" "share/vim/vimfiles/"))))
+    (home-page "https://ctrlpvim.github.io/ctrlp.vim/")
+    (synopsis "Fuzzy file, buffer, mru, tag, etc. finder for Vim")
+    (description
+     "CtrlP features:
+@itemize
+@item Written in pure Vimscript for MacVim, gVim and Vim 7.0+.
+@item Full support for Vim's regexp as search patterns.
+@item Built-in @acronym{Most Recently Used, MRU} files monitoring and search.
+@item Built-in project's root finder.
+@item Open multiple files at once.
+@item Create new files and directories.
+@item Execute Ex commands on an opening file (jump to a line, to a string or do
+anything).
+@item Optional cross-session caching and history allow for fast initialization.
+@item Mappings and usage conform to Vim's conventions.
+@end itemize")
+    (license license:vim)))
+
+(define-public vim-mucomplete
+  (package
+    (name "vim-mucomplete")
+    (version "1.5.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+              (url "https://github.com/lifepillar/vim-mucomplete")
+              (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "054g80n09mmxxlh8xaic29bn8bgn3clvv732rymljdyvbj1mlhwd"))))
+    (build-system copy-build-system)
+    (arguments
+     '(#:install-plan
+       '(("autoload" "share/vim/vimfiles/")
+         ("doc" "share/vim/vimfiles/")
+         ("plugin" "share/vim/vimfiles/"))))
+    (home-page "https://github.com/lifepillar/vim-mucomplete")
+    (synopsis "MUcomplete is a minimalist autocompletion plugin for Vim")
+    (description
+     "MUcomplete is an implementation of chained (fallback) completion,
+whereby several completion methods are attempted one after another until a
+result is returned.")
+    (license license:expat)))
+
+(define-public vim-gitgutter
+  (let ((commit "256702dd1432894b3607d3de6cd660863b331818")
+        (revision "1"))
+    (package
+      (name "vim-gitgutter")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+                (url "https://github.com/airblade/vim-gitgutter")
+                (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0zpa7cs59a8sq0k3frlf9flpf30jcn239yrpmv40r7nqvxzglbpl"))))
+      (build-system copy-build-system)
+      (arguments
+       '(#:install-plan
+         '(("autoload" "share/vim/vimfiles/")
+           ("doc" "share/vim/vimfiles/")
+           ("plugin" "share/vim/vimfiles/"))))
+      (synopsis "Vim plugin which shows a git diff in the sign column")
+      (description
+       "A Vim plugin which shows a git diff in the sign column.  It shows which
+lines have been added, modified, or removed.  You can also preview, stage, and
+undo individual hunks; and stage partial hunks.  The plugin also provides a hunk
+text object.  The signs are always up to date and the plugin never saves your
+buffer.")
+      (home-page "https://github.com/airblade/vim-gitgutter")
+      (license license:expat))))
+
+(define-public vim-characterize
+  (package
+    (name "vim-characterize")
+    (version "1.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+              (url "https://github.com/tpope/vim-characterize")
+              (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0ppsbsd696ih40d9f76mdl9sd9y7p2pvm65qmvq4b2zhkv4xbpxz"))))
+    (build-system copy-build-system)
+    (arguments
+     '(#:install-plan
+       '(("autoload" "share/vim/vimfiles/")
+         ("doc" "share/vim/vimfiles/")
+         ("plugin" "share/vim/vimfiles/"))))
+    (home-page "https://github.com/tpope/vim-characterize")
+    (synopsis "Vim plugin for showing Unicode character metadata")
+    (description
+     "In Vim, pressing @code{ga} on a character reveals its representation in
+decimal, octal, and hex.  Characterize.vim modernizes this with the following
+additions:
+@itemize
+@item Unicode character names: @code{U+00A9 COPYRIGHT SYMBOL}
+@item Vim digraphs (type after @code{<C-K>} to insert the character):
+@code{Co}, @code{cO}
+@item Emoji codes: @code{:copyright:}
+@item HTML entities: @code{&copy;}
+@end itemize")
+    (license license:vim)))
+
+(define-public vim-tagbar
+  (package
+    (name "vim-tagbar")
+    (version "3.0.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+              (url "https://github.com/preservim/tagbar")
+              (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1fqfs8msmr6d4kpvxqp14sdjvp5fj52q5w5kz71myzcd4kqzmirp"))))
+    (build-system copy-build-system)
+    (arguments
+     '(#:install-plan
+       '(("autoload" "share/vim/vimfiles/")
+         ("doc" "share/vim/vimfiles/")
+         ("plugin" "share/vim/vimfiles/")
+         ("syntax" "share/vim/vimfiles/"))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'link-univerisal-ctags
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((ctags (assoc-ref inputs "universal-ctags")))
+               (substitute* "autoload/tagbar.vim"
+                 (("(.*)universal-ctags']" all leader)
+                  (string-append all "\n"
+                                 leader ctags "/bin/ctags']")))))))))
+    (inputs
+     (list universal-ctags))
+    (home-page "https://github.com/preservim/tagbar")
+    (synopsis "Vim plugin that displays tags in a window, ordered by scope")
+    (description
+     "Tagbar is a Vim plugin that provides an easy way to browse the tags of
+the current file and get an overview of its structure.  It does this by creating
+a sidebar that displays the ctags-generated tags of the current file, ordered
+by their scope.  This means that for example methods in C++ are displayed under
+the class they are defined in.")
+    (license license:vim)))
+
+(define-public vim-nerdtree
+  (package
+    (name "vim-nerdtree")
+    (version "6.10.16")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/preservim/nerdtree")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1si8qla86ng8cffbmfrk9gss0i3912yw0f1ph4bsiq0kk837lccp"))))
+    (build-system copy-build-system)
+    (arguments
+     '(#:install-plan
+       '(("autoload" "share/vim/vimfiles/")
+         ("doc" "share/vim/vimfiles/")
+         ("lib" "share/vim/vimfiles/")
+         ("nerdtree_plugin" "share/vim/vimfiles/")
+         ("plugin" "share/vim/vimfiles/")
+         ("syntax" "share/vim/vimfiles/"))))
+    (home-page "https://github.com/preservim/nerdtree")
+    (synopsis "Tree explorer plugin for Vim")
+    (description
+     "The NERDTree is a file system explorer for the Vim editor.  Using this
+plugin, users can visually browse complex directory hierarchies, quickly open
+files for reading or editing, and perform basic file system operations.")
+    (license license:wtfpl2)))
+
+(define-public vim-nerdcommenter
+  (let ((commit "a65465d321f2f8a74b2ffa540b9b87563f7e12e8")
+        (revision "1"))
+    (package
+      (name "vim-nerdcommenter")
+      (version (git-version "2.5.2" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+                (url "https://github.com/preservim/nerdcommenter")
+                (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "00ir65iv8jfbgzjmj7332fmydh0qhabbhx8zbvd3j6pgfxqpaafw"))))
+      (build-system copy-build-system)
+      (arguments
+       '(#:install-plan
+         '(("autoload" "share/vim/vimfiles/")
+           ("doc" "share/vim/vimfiles/")
+           ("plugin" "share/vim/vimfiles/"))))
+      (home-page "https://github.com/preservim/nerdcommenter")
+      (synopsis "Vim plugin for easy commenting of code")
+      (description
+       "NERD commenter is a Vim plugin that provides many different commenting
+operations and styles which are invoked via key mappings and a menu.  These
+operations are available for most filetypes.")
+      (license license:cc0))))
diff --git a/gnu/packages/virtualization.scm b/gnu/packages/virtualization.scm
index f3b91cd83a..2269901d46 100644
--- a/gnu/packages/virtualization.scm
+++ b/gnu/packages/virtualization.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015, 2016, 2017, 2018 Mark H Weaver <mhw@netris.org>
-;;; 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 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017 Alex Vong <alexvong1995@gmail.com>
 ;;; Copyright © 2017 Andy Patterson <ajpatter@uwaterloo.ca>
@@ -14,13 +14,17 @@
 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
 ;;; 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 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>
 ;;; Copyright © 2021 Dion Mendel <guix@dm9.info>
 ;;; Copyright © 2021 Andrew Whatson <whatson@gmail.com>
+;;; Copyright © 2021 Vincent Legoll <vincent.legoll@gmail.com>
+;;; Copyright © 2021 Petr Hodina <phodina@protonmail.com>
+;;; Copyright © 2021 Raghav Gururajan <rg@raghavgururajan.name>
+;;; Copyright © 2022 Oleg Pykhalov <go.wigust@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -67,6 +71,7 @@
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages gettext)
+  #:use-module (gnu packages gcc)
   #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
@@ -85,6 +90,7 @@
   #:use-module (gnu packages libusb)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages m4)
+  #:use-module (gnu packages multiprecision)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages nettle)
   #:use-module (gnu packages networking)
@@ -126,6 +132,7 @@
   #:use-module (guix build-system trivial)
   #:use-module (guix download)
   #:use-module (guix git-download)
+  #:use-module (guix gexp)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix utils)
@@ -146,7 +153,7 @@
 (define-public qemu
   (package
     (name "qemu")
-    (version "6.0.0")
+    (version "6.2.0")
     (source
      (origin
        (method url-fetch)
@@ -154,11 +161,9 @@
                            version ".tar.xz"))
        (sha256
         (base32
-         "1f9hz8rf12jm8baa7kda34yl4hyl0xh0c4ap03krfjx23i3img47"))
-       (patches (search-patches "qemu-CVE-2021-20203.patch"
-                                "qemu-meson-compat.patch"
-                                "qemu-sphinx-compat.patch"
-                                "qemu-build-info-manual.patch"))
+         "0iavlsy9hin8k38230j8lfmyipx3965zljls1dp34mmc8n75vqb8"))
+       (patches (search-patches "qemu-build-info-manual.patch"
+                                "qemu-fix-agent-paths.patch"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -172,7 +177,7 @@
      `(#:tests? ,(or (%current-target-system)
                      (not (string=? "i686-linux" (%current-system))))
        #:configure-flags
-       (let ((gcc (string-append (assoc-ref %build-inputs "gcc") "/bin/gcc"))
+       (let ((gcc (search-input-file %build-inputs "/bin/gcc"))
              (out (assoc-ref %outputs "out")))
          (list (string-append "--cc=" gcc)
                ;; Some architectures insist on using HOST_CC.
@@ -211,18 +216,17 @@
                ((".*'test-char':.*" all)
                 (string-append "# " all)))))
          (add-after 'patch-source-shebangs 'patch-embedded-shebangs
-           (lambda _
+           (lambda* (#:key native-inputs inputs #:allow-other-keys)
              ;; Ensure the executables created by these source files reference
              ;; /bin/sh from the store so they work inside the build container.
              (substitute* '("block/cloop.c" "migration/exec.c"
-                            "net/tap.c" "tests/qtest/libqtest.c")
-               (("/bin/sh") (which "sh")))
-             (substitute* "Makefile"
-               (("SHELL = /usr/bin/env bash -o pipefail")
-                "SHELL = bash -o pipefail"))
-             (substitute* "tests/qemu-iotests/check"
+                            "net/tap.c" "tests/qtest/libqtest.c"
+                            "tests/qtest/vhost-user-blk-test.c")
+               (("/bin/sh") (search-input-file inputs "/bin/sh")))
+             (substitute* "tests/qemu-iotests/testenv.py"
                (("#!/usr/bin/env python3")
-                (string-append "#!" (which "python3"))))))
+                (string-append "#!" (search-input-file (or native-inputs inputs)
+                                                       "/bin/python3"))))))
          (add-before 'configure 'fix-optionrom-makefile
            (lambda _
              ;; Work around the inability of the rules defined in this
@@ -250,7 +254,7 @@
          ;; Configure, build and install QEMU user-emulation static binaries.
          (add-after 'configure 'configure-user-static
            (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let* ((gcc (string-append (assoc-ref inputs "gcc") "/bin/gcc"))
+             (let* ((gcc (search-input-file inputs "/bin/gcc"))
                     (static (assoc-ref outputs "static"))
                     ;; This is the common set of configure flags; it is
                     ;; duplicated here to isolate this phase from manipulations
@@ -304,50 +308,50 @@ exec smbd $@")))
                (mkdir-p qemu-doc)
                (rename-file (string-append out "/share/doc/qemu")
                             (string-append qemu-doc "/html"))))))))
-    (inputs                             ; TODO: Add optional inputs.
-     `(("alsa-lib" ,alsa-lib)
-       ("attr" ,attr)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("libaio" ,libaio)
-       ("libattr" ,attr)
-       ("libcacard" ,libcacard)  ; smartcard support
-       ("libcap-ng" ,libcap-ng)  ; virtfs support requires libcap-ng & libattr
-       ("libdrm" ,libdrm)
-       ("libepoxy" ,libepoxy)
-       ("libjpeg" ,libjpeg-turbo)
-       ("libpng" ,libpng)
-       ("libseccomp" ,libseccomp)
-       ("libusb" ,libusb)               ;USB pass-through support
-       ("mesa" ,mesa)
-       ("ncurses" ,ncurses)
-       ;; ("pciutils" ,pciutils)
-       ("pixman" ,pixman)
-       ("pulseaudio" ,pulseaudio)
-       ("sdl2" ,sdl2)
-       ("spice" ,spice)
-       ("usbredir" ,usbredir)
-       ("util-linux" ,util-linux)
-       ("vde2" ,vde2)
-       ("virglrenderer" ,virglrenderer)
-       ("zlib" ,zlib)))
-    (native-inputs `(("gettext" ,gettext-minimal)
-                     ("glib:bin" ,glib "bin") ; gtester, etc.
-                     ("perl" ,perl)
-                     ("flex" ,flex)
-                     ("bison" ,bison)
-                     ;; Using meson 0.57.1 enables reproducible QEMU builds.
-                     ("meson" ,meson-next)
-                     ("ninja" ,ninja)
-                     ("pkg-config" ,pkg-config)
-                     ("python-wrapper" ,python-wrapper)
-                     ("python-sphinx" ,python-sphinx)
-                     ("texinfo" ,texinfo)
-                     ;; The following static libraries are required to build
-                     ;; the static output of QEMU.
-                     ("glib-static" ,glib-static)
-                     ("pcre:static" ,pcre "static")
-                     ("zlib:static" ,zlib "static")))
+    (inputs
+     (list alsa-lib
+           bash-minimal
+           glib
+           gtk+
+           libaio
+           libcacard                    ;smartcard support
+           attr libcap-ng               ;VirtFS support
+           libdrm
+           libepoxy
+           libjpeg-turbo
+           libpng
+           libseccomp
+           libusb                       ;USB pass-through support
+           mesa
+           ncurses
+           ;; ("pciutils" ,pciutils)
+           pixman
+           pulseaudio
+           sdl2
+           spice
+           usbredir
+           util-linux
+           vde2
+           virglrenderer
+           zlib))
+    (native-inputs
+     (list gettext-minimal
+           `(,glib "bin")               ;gtester, etc.
+           perl
+           flex
+           bison
+           meson
+           ninja
+           pkg-config
+           python-wrapper
+           python-sphinx
+           python-sphinx-rtd-theme
+           texinfo
+           ;; The following static libraries are required to build
+           ;; the static output of QEMU.
+           `(,glib "static")
+           `(,pcre "static")
+           `(,zlib "static")))
     (home-page "https://www.qemu.org")
     (synopsis "Machine emulator and virtualizer")
     (description
@@ -419,12 +423,29 @@ server and embedded PowerPC, and S390 guests.")
            (delete 'install-user-static)))))
 
     ;; Remove dependencies on optional libraries, notably GUI libraries.
-    (native-inputs (fold alist-delete (package-native-inputs qemu)
-                         '("gettext" "glib:static" "pcre:static" "zlib:static")))
-    (inputs (fold alist-delete (package-inputs qemu)
-                  '("libusb" "mesa" "sdl2" "spice" "virglrenderer" "gtk+"
-                    "usbredir" "libdrm" "libepoxy" "pulseaudio" "vde2"
-                    "libcacard")))))
+    (native-inputs (filter (lambda (input)
+                             (match input
+                               ;; Work around the fact that modify-inputs can not
+                               ;; delete specific outputs; i.e. here we should keep
+                               ;; `(,glib "bin"), but not `(,glib "static").
+                               ((label package output)
+                                (not (string=? "static" output)))
+                               (_ input)))
+                           (modify-inputs (package-native-inputs qemu)
+                             (delete "gettext-minimal"))))
+    (inputs (modify-inputs (package-inputs qemu)
+              (delete "libusb"
+                      "mesa"
+                      "sdl2"
+                      "spice"
+                      "virglrenderer"
+                      "gtk+"
+                      "usbredir"
+                      "libdrm"
+                      "libepoxy"
+                      "pulseaudio"
+                      "vde2"
+                      "libcacard")))))
 
 (define (system->qemu-target system)
   (cond
@@ -437,28 +458,90 @@ server and embedded PowerPC, and S390 guests.")
                                     ((arch kernel) arch)
                                     (_ system))))))
 
+(define-public libx86emu
+  (package
+    (name "libx86emu")
+    (version "3.5")
+    (home-page "https://github.com/wfeldt/libx86emu")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url home-page)
+         (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "11nj3y7maz9ch15b1c2b69gd8d7mpaha377zpdbvfsmg5w9zz93l"))
+       (modules
+        '((guix build utils)))
+       (snippet
+        `(begin
+           ;; Remove git2log program file.
+           (delete-file "git2log")
+           ;; Remove variables that depends on git2log.
+           (substitute* "Makefile"
+             (("GIT2LOG.*=.*$") "")
+             (("GITDEPS.*=.*$") "")
+             (("BRANCH.*=.*$") ""))))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:test-target "test"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (include (string-append out "/include"))
+                    (lib (string-append out "/lib")))
+               ;; Correct the values of version and install directories.
+               (substitute* "Makefile"
+                 (("VERSION.*=.*$")
+                  (string-append "VERSION := "
+                                 ,version "\n"))
+                 (("PREFIX.*=.*$")
+                  (string-append "PREFIX := " out "\n"))
+                 (("MAJOR_VERSION.*=.*$")
+                  (string-append "MAJOR_VERSION := "
+                                 ,(version-major version) "\n"))
+                 (("LIBDIR.*=.*$")
+                  (string-append "LIBDIR = " lib "\n"))
+                 (("/usr/include") include)))))
+         (delete 'configure))))         ; no configure script
+    (native-inputs
+     (list nasm perl))
+    (synopsis "Library for x86 emulation")
+    (description "Libx86emu is a small library to emulate x86 instructions.  The
+focus here is not a complete emulation but to cover enough for typical
+firmware blobs.  You can
+@enumerate
+@item intercept any memory access or directly map real memory ranges
+@item intercept any i/o access, map real i/o ports, or block any real i/o
+@item intercept any interrupt
+@item add a hook to run after each instruction
+@item recognize a special x86 instruction that can trigger logging
+@item use integrated logging
+@end enumerate")
+    (license (license:x11-style "file://LICENSE"))))
+
 (define-public ganeti
   (package
     (name "ganeti")
-    ;; Note: we use a pre-release for Python 3 compatibility as well as many
-    ;; other fixes.
-    (version "3.0.0beta1-24-g024cc9fa2")
+    (version "3.0.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
                     (url "https://github.com/ganeti/ganeti")
                     (commit (string-append "v" version))))
               (sha256
-               (base32 "1ll34qd2mifni3bhg7cnir3xfnkafig8ch33qndqwrsby0y5ssia"))
+               (base32 "1i7gx0sdx9316fnldbv738s0ihym1370nhc1chk0biandkl8vvq0"))
               (file-name (git-file-name name version))
               (patches (search-patches "ganeti-shepherd-support.patch"
                                        "ganeti-shepherd-master-failover.patch"
-                                       "ganeti-deterministic-manual.patch"
-                                       "ganeti-drbd-compat.patch"
-                                       "ganeti-os-disk-size.patch"
+                                       "ganeti-sphinx-compat.patch"
+                                       "ganeti-haskell-compat.patch"
                                        "ganeti-haskell-pythondir.patch"
-                                       "ganeti-disable-version-symlinks.patch"
-                                       "ganeti-preserve-PYTHONPATH.patch"))))
+                                       "ganeti-disable-version-symlinks.patch"))))
     (build-system gnu-build-system)
     (arguments
      `(#:imported-modules (,@%gnu-build-system-modules
@@ -466,7 +549,10 @@ server and embedded PowerPC, and S390 guests.")
                            (guix build python-build-system))
        #:modules (,@%gnu-build-system-modules
                   ((guix build haskell-build-system) #:prefix haskell:)
-                  ((guix build python-build-system) #:select (python-version))
+                  ((guix build python-build-system) #:select (site-packages))
+                  (srfi srfi-1)
+                  (srfi srfi-26)
+                  (ice-9 match)
                   (ice-9 rdelim))
 
        ;; The default test target includes a lot of checks that are only really
@@ -505,6 +591,20 @@ server and embedded PowerPC, and S390 guests.")
                             ,(system->qemu-target (%current-system))))
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'patch-version-constraints
+           (lambda _
+             ;; Loosen version constraints for compatibility with Stackage 18.10.
+             (substitute* "cabal/ganeti.template.cabal"
+               (("(.*base64-bytestring.*) < 1\\.1" _ match)
+                (string-append match " < 1.2"))
+               (("(.*QuickCheck.*) < 2\\.14" _ match)
+                (string-append match " < 2.15")))))
+         (add-after 'unpack 'pyparsing-compat
+           (lambda _
+             ;; Adjust for Pyparsing 3.0.  Remove for Ganeti 3.0.2+.
+             (substitute* "lib/qlang.py"
+               (("operatorPrecedence")
+                "infixNotation"))))
          (add-after 'unpack 'create-vcs-version
            (lambda _
              ;; If we are building from a git checkout, we need to create a
@@ -513,10 +613,9 @@ server and embedded PowerPC, and S390 guests.")
              (unless (file-exists? "vcs-version")
                (call-with-output-file "vcs-version"
                  (lambda (port)
-                   (format port "v~a~%" ,version))))
-             #t))
+                   (format port "v~a~%" ,version))))))
          (add-after 'unpack 'patch-absolute-file-names
-           (lambda _
+           (lambda* (#:key inputs #:allow-other-keys)
              (substitute* '("lib/utils/process.py"
                             "lib/utils/text.py"
                             "src/Ganeti/Constants.hs"
@@ -526,22 +625,22 @@ server and embedded PowerPC, and S390 guests.")
                             "test/py/ganeti.utils.process_unittest.py"
                             "test/py/ganeti.utils.text_unittest.py"
                             "test/py/ganeti.utils.wrapper_unittest.py")
-               (("/bin/sh") (which "sh"))
-               (("/bin/bash") (which "bash"))
-               (("/usr/bin/env") (which "env"))
-               (("/bin/true") (which "true")))
+               (("/bin/sh") (search-input-file inputs "/bin/sh"))
+               (("/bin/bash") (search-input-file inputs "/bin/bash"))
+               (("/usr/bin/env") (search-input-file inputs "/bin/env"))
+               (("/bin/true") (search-input-file inputs "/bin/true")))
 
              ;; This script is called by the node daemon at startup to perform
              ;; sanity checks on the cluster IP addresses, and it is also used
              ;; in a master-failover scenario.  Add absolute references to
              ;; avoid propagating these executables.
              (substitute* "tools/master-ip-setup"
-               (("arping") (which "arping"))
-               (("ndisc6") (which "ndisc6"))
-               (("fping") (which "fping"))
-               (("grep") (which "grep"))
-               (("ip addr") (string-append (which "ip") " addr")))
-             #t))
+               (("arping") (search-input-file inputs "/bin/arping"))
+               (("ndisc6") (search-input-file inputs "/bin/ndisc6"))
+               (("fping") (search-input-file inputs "/sbin/fping"))
+               (("grep") (search-input-file inputs "/bin/grep"))
+               (("ip addr") (string-append (search-input-file inputs "/sbin/ip")
+                                           " addr")))))
          (add-after 'unpack 'override-builtin-PATH
            (lambda _
              ;; Ganeti runs OS install scripts and similar with a built-in
@@ -549,8 +648,7 @@ server and embedded PowerPC, and S390 guests.")
              (substitute* "src/Ganeti/Constants.hs"
                (("/sbin:/bin:/usr/sbin:/usr/bin")
                 "/run/setuid-programs:/run/current-system/profile/sbin:\
-/run/current-system/profile/bin"))
-             #t))
+/run/current-system/profile/bin"))))
          (add-after 'bootstrap 'patch-sphinx-version-detection
            (lambda _
              ;; The build system runs 'sphinx-build --version' to verify that
@@ -558,8 +656,8 @@ server and embedded PowerPC, and S390 guests.")
              ;; .sphinx-build-real executable name created by the Sphinx wrapper.
              (substitute* "configure"
                (("\\$SPHINX --version 2>&1")
-                "$SPHINX --version 2>&1 | sed 's/.sphinx-build-real/sphinx-build/g'"))
-             #t))
+                "$SPHINX --version 2>&1 \
+| sed 's/.sphinx-build-real/sphinx-build/g'"))))
 
          ;; The build system invokes Cabal and GHC, which do not work with
          ;; GHC_PACKAGE_PATH: <https://github.com/haskell/cabal/issues/3728>.
@@ -573,13 +671,11 @@ server and embedded PowerPC, and S390 guests.")
                (("\\$\\(CABAL\\)")
                 "$(CABAL) --package-db=../package.conf.d")
                (("\\$\\(GHC\\)")
-                "$(GHC) -package-db=../package.conf.d"))
-             #t))
+                "$(GHC) -package-db=../package.conf.d"))))
          (add-after 'configure 'make-ghc-use-shared-libraries
            (lambda _
              (substitute* "Makefile"
-               (("HFLAGS =") "HFLAGS = -dynamic -fPIC"))
-             #t))
+               (("HFLAGS =") "HFLAGS = -dynamic -fPIC"))))
          (add-after 'configure 'fix-installation-directories
            (lambda _
              (substitute* "Makefile"
@@ -589,8 +685,7 @@ server and embedded PowerPC, and S390 guests.")
                ;; Similarly, do not attempt to install the sample ifup scripts
                ;; to /etc/ganeti.
                (("\\$\\(DESTDIR\\)\\$\\(ifupdir\\)")
-                "$(DESTDIR)${prefix}$(ifupdir)"))
-             #t))
+                "$(DESTDIR)${prefix}$(ifupdir)"))))
          (add-before 'build 'adjust-tests
            (lambda _
              ;; Disable tests that can not run.  Do it early to prevent
@@ -609,36 +704,16 @@ server and embedded PowerPC, and S390 guests.")
                 "")
                ;; This test requires networking.
                (("test/py/import-export_unittest\\.bash")
-                ""))
-
-             ;; Many of the Makefile targets reset PYTHONPATH before running
-             ;; the Python interpreter, which does not work very well for us.
-             (substitute* "Makefile"
-               (("PYTHONPATH=")
-                (string-append "PYTHONPATH=" (getenv "PYTHONPATH") ":")))
-             #t))
+                ""))))
          (add-after 'build 'build-bash-completions
            (lambda _
-             (let ((orig-pythonpath (getenv "PYTHONPATH")))
-               (setenv "PYTHONPATH" (string-append ".:" orig-pythonpath))
-               (invoke "./autotools/build-bash-completion")
-               (setenv "PYTHONPATH" orig-pythonpath)
-               #t)))
+             (setenv "PYTHONPATH" ".")
+             (invoke "./autotools/build-bash-completion")
+             (unsetenv "PYTHONPATH")))
          (add-before 'check 'pre-check
            (lambda* (#:key inputs #:allow-other-keys)
              ;; Set TZDIR so that time zones are found.
-             (setenv "TZDIR" (string-append (assoc-ref inputs "tzdata")
-                                            "/share/zoneinfo"))
-
-             ;; This test checks whether PYTHONPATH is untouched, and extends
-             ;; it to include test directories if so.  Add an else branch for
-             ;; our modified PYTHONPATH, in order to prevent a confusing test
-             ;; failure where expired certificates are not cleaned because
-             ;; check-cert-expired is silently crashing.
-             (substitute* "test/py/ganeti-cleaner_unittest.bash"
-               (("then export PYTHONPATH=(.*)" all testpath)
-                (string-append all "else export PYTHONPATH="
-                               (getenv "PYTHONPATH") ":" testpath "\n")))
+             (setenv "TZDIR" (search-input-directory inputs "share/zoneinfo"))
 
              (substitute* "test/py/ganeti.utils.process_unittest.py"
                ;; This test attempts to run an executable with
@@ -661,15 +736,14 @@ server and embedded PowerPC, and S390 guests.")
                (for-each (lambda (file)
                            (symlink "../../src/htools" file))
                          '("hspace" "hscan" "hinfo" "hbal" "hroller"
-                           "hcheck" "hail" "hsqueeze")))
-             #t))
+                           "hcheck" "hail" "hsqueeze")))))
          (add-after 'install 'install-bash-completions
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
                     (compdir (string-append out "/etc/bash_completion.d")))
                (mkdir-p compdir)
                (copy-file "doc/examples/bash_completion"
-                             (string-append compdir "/ganeti"))
+                          (string-append compdir "/ganeti"))
                ;; The one file contains completions for many different
                ;; executables.  Create symlinks for found completions.
                (with-directory-excursion compdir
@@ -688,24 +762,20 @@ server and embedded PowerPC, and S390 guests.")
                                       ;; Note that 'burnin' is listed with the
                                       ;; absolute file name, which is why we
                                       ;; run everything through 'basename'.
-                                      (cons (basename (car (reverse (string-split
-                                                                     line #\ ))))
-                                            progs))
-                                (loop (read-line port) progs))))))))
-               #t)))
-         ;; Wrap all executables with PYTHONPATH.  We can't borrow the phase
-         ;; from python-build-system because we also need to wrap the scripts
-         ;; in $out/lib/ganeti such as "node-daemon-setup".
+                                      (match (string-split line #\ )
+                                        ((commands ... prog)
+                                         (cons (basename prog) progs))))
+                                (loop (read-line port) progs)))))))))))
+         ;; Wrap all executables with GUIX_PYTHONPATH.  We can't borrow
+         ;; the phase from python-build-system because we also need to wrap
+         ;; the scripts in $out/lib/ganeti such as "node-daemon-setup".
          (add-after 'install 'wrap
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
                     (sbin (string-append out "/sbin"))
                     (lib (string-append out "/lib"))
-                    (python (assoc-ref inputs "python"))
-                    (major+minor (python-version python))
-                    (PYTHONPATH (string-append lib "/python" major+minor
-                                               "/site-packages:"
-                                               (getenv "PYTHONPATH"))))
+                    (PYTHONPATH (string-append (site-packages inputs outputs)
+                                               ":" (getenv "GUIX_PYTHONPATH"))))
                (define (shell-script? file)
                  (call-with-ascii-input-file file
                    (lambda (port)
@@ -715,7 +785,7 @@ server and embedded PowerPC, and S390 guests.")
                             (or (string-contains shebang "/bin/bash")
                                 (string-contains shebang "/bin/sh")))))))
 
-               (define (wrap? file)
+               (define* (wrap? file #:rest _)
                  ;; Do not wrap shell scripts because some are meant to be
                  ;; sourced, which breaks if they are wrapped.  We do wrap
                  ;; the Haskell executables because some call out to Python
@@ -726,11 +796,11 @@ server and embedded PowerPC, and S390 guests.")
 
                (for-each (lambda (file)
                            (wrap-program file
-                             `("PYTHONPATH" ":" prefix (,PYTHONPATH))))
-                         (filter wrap?
-                                 (append (find-files (string-append lib "/ganeti"))
-                                         (find-files sbin))))
-               #t))))))
+                             `("GUIX_PYTHONPATH" ":" prefix
+                               (,PYTHONPATH))))
+                         (append-map (cut find-files <> wrap?)
+                                     (list (string-append lib "/ganeti")
+                                           sbin)))))))))
     (native-inputs
      `(("haskell" ,ghc)
        ("cabal" ,cabal-install)
@@ -760,42 +830,40 @@ server and embedded PowerPC, and S390 guests.")
        ("shelltestrunner" ,shelltestrunner)
        ("tzdata" ,tzdata-for-tests)))
     (inputs
-     `(("arping" ,iputils)              ;must be the iputils version
-       ("curl" ,curl)
-       ("fping" ,fping)
-       ("iproute2" ,iproute)
-       ("ndisc6" ,ndisc6)
-       ("socat" ,socat)
-       ("qemu" ,qemu-minimal)           ;for qemu-img
-       ("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-base64-bytestring" ,ghc-base64-bytestring)
-       ("ghc-cryptonite" ,ghc-cryptonite)
-       ("ghc-curl" ,ghc-curl)
-       ("ghc-hinotify" ,ghc-hinotify)
-       ("ghc-hslogger" ,ghc-hslogger)
-       ("ghc-json" ,ghc-json)
-       ("ghc-lens" ,ghc-lens)
-       ("ghc-lifted-base" ,ghc-lifted-base)
-       ("ghc-network" ,ghc-network)
-       ("ghc-old-time" ,ghc-old-time)
-       ("ghc-psqueue" ,ghc-psqueue)
-       ("ghc-regex-pcre" ,ghc-regex-pcre)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("ghc-zlib" ,ghc-zlib)
-
-       ;; For the optional metadata daemon.
-       ("ghc-snap-core" ,ghc-snap-core)
-       ("ghc-snap-server" ,ghc-snap-server)
-
-       ("python" ,python)
-       ("python-pyopenssl" ,python-pyopenssl)
-       ("python-simplejson" ,python-simplejson)
-       ("python-pyparsing" ,python-pyparsing)
-       ("python-pyinotify" ,python-pyinotify)
-       ("python-pycurl" ,python-pycurl)
-       ("python-bitarray" ,python-bitarray)
-       ("python-paramiko" ,python-paramiko)
-       ("python-psutil" ,python-psutil)))
+     (list iputils                      ;for 'arping'
+           curl
+           fping
+           iproute
+           ndisc6
+           socat
+           qemu-minimal                 ;for qemu-img
+           ghc-attoparsec
+           ghc-base64-bytestring
+           ghc-cryptonite
+           ghc-curl
+           ghc-hinotify
+           ghc-hslogger
+           ghc-json
+           ghc-lens
+           ghc-lifted-base
+           ghc-network
+           ghc-old-time
+           ghc-psqueue
+           ghc-regex-pcre
+           ghc-utf8-string
+           ghc-zlib
+           ;; For the optional metadata daemon.
+           ghc-snap-core
+           ghc-snap-server
+           python
+           python-pyopenssl
+           python-simplejson
+           python-pyparsing
+           python-pyinotify
+           python-pycurl
+           python-bitarray
+           python-paramiko
+           python-psutil))
     (home-page "https://www.ganeti.org/")
     (synopsis "Cluster-based virtual machine management system")
     (description
@@ -830,8 +898,7 @@ commodity hardware.")
     (arguments
      '(#:configure-flags '("--sysconfdir=/etc" "--localstatedir=/var")))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (inputs
      `(("util-linux" ,util-linux)
        ("qemu-img" ,qemu-minimal)))
@@ -922,8 +989,7 @@ Guix to build virtual machines.")
                                  "variants.list"))
                       #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (inputs
      `(("debianutils" ,debianutils)
        ("debootstrap" ,debootstrap)
@@ -939,7 +1005,7 @@ Debian or a derivative using @command{debootstrap}.")
 (define-public libosinfo
   (package
     (name "libosinfo")
-    (version "1.7.1")
+    (version "1.9.0")
     (source
      (origin
        (method url-fetch)
@@ -947,7 +1013,7 @@ Debian or a derivative using @command{debootstrap}.")
                            version ".tar.xz"))
        (sha256
         (base32
-         "1s97sv24bybggjx6hgqba2qdqz3ivfpd4cmkh4zm5y59sim109mv"))))
+         "0nd360c9ampw8hb6xh5g45q858df2r4jj9q88bcl6gzgaj0l3wxl"))))
     (build-system meson-build-system)
     (arguments
      `(#:configure-flags
@@ -962,10 +1028,9 @@ Debian or a derivative using @command{debootstrap}.")
              (substitute* "osinfo/osinfo_loader.c"
                (("path = DATA_DIR.*")
                 (string-append "path = \"" (assoc-ref inputs "osinfo-db")
-                               "/share/osinfo\";")))
-             #t)))))
+                               "/share/osinfo\";"))))))))
     (inputs
-     `(("libsoup" ,libsoup)
+     `(("libsoup" ,libsoup-minimal-2)
        ("libxml2" ,libxml2)
        ("libxslt" ,libxslt)
        ("osinfo-db" ,osinfo-db)))
@@ -1006,7 +1071,7 @@ all common programming languages.  Vala bindings are also provided.")
 (define-public lxc
   (package
     (name "lxc")
-    (version "4.0.10")
+    (version "4.0.11")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1014,35 +1079,30 @@ all common programming languages.  Vala bindings are also provided.")
                     version ".tar.gz"))
               (sha256
                (base32
-                "1sgsic9dzj3wv2k5bx2vhcgappivhp1glkqfc2yrgr6jas052351"))))
+                "0b7hv4n8b3lndhr0jf9j1gkbzxm8897a1myjsfgwzad9gkhq395g"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("docbook2x" ,docbook2x)))
+     (list pkg-config docbook2x))
     (inputs
-     `(("gnutls" ,gnutls)
-       ("libcap" ,libcap)
-       ("libseccomp" ,libseccomp)
-       ("libselinux" ,libselinux)))
+     (list gnutls libcap libseccomp libselinux))
     (arguments
-     `(#:configure-flags
-       (list (string-append "--docdir=" (assoc-ref %outputs "out")
-                            "/share/doc/" ,name "-" ,version)
-             "--sysconfdir=/etc"
-             "--localstatedir=/var")
-       #:phases
-       (modify-phases %standard-phases
-         (replace 'install
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out         (assoc-ref outputs "out"))
-                    (bashcompdir (string-append out "/etc/bash_completion.d")))
-               (invoke "make" "install"
-                       (string-append "bashcompdir=" bashcompdir)
-                       ;; Don't install files into /var and /etc.
-                       "LXCPATH=/tmp/var/lib/lxc"
-                       "localstatedir=/tmp/var"
-                       "sysconfdir=/tmp/etc"
-                       "sysconfigdir=/tmp/etc/default")))))))
+     (list #:configure-flags
+           #~(list (string-append "--docdir=" #$output "/share/doc/"
+                                  #$name "-" #$version)
+                   "--sysconfdir=/etc"
+                   "--localstatedir=/var")
+           #:phases
+           #~(modify-phases %standard-phases
+               (replace 'install
+                 (lambda _
+                   (invoke "make" "install"
+                           (string-append "bashcompdir=" #$output
+                                          "/etc/bash_completion.d")
+                           ;; Don't install files into /var and /etc.
+                           "LXCPATH=/tmp/var/lib/lxc"
+                           "localstatedir=/tmp/var"
+                           "sysconfdir=/tmp/etc"
+                           "sysconfigdir=/tmp/etc/default"))))))
     (synopsis "Linux container tools")
     (home-page "https://linuxcontainers.org/")
     (description
@@ -1054,7 +1114,7 @@ manage system or application containers.")
 (define-public lxcfs
   (package
     (name "lxcfs")
-    (version "4.0.9")
+    (version "4.0.11")
     (home-page "https://github.com/lxc/lxcfs")
     (source (origin
               (method git-fetch)
@@ -1063,16 +1123,13 @@ manage system or application containers.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0zx58lair8hwi4bxm5h7i8n1j5fcdgw5cr6f4wk9qhks0sr5dip5"))))
+                "02cgzh97cgxh9iyf7gkn5ikdc0sfzqfjj6al0hikdf9rbwcscqwd"))))
     (arguments
      '(#:configure-flags '("--localstatedir=/var")))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
-     `(("fuse" ,fuse)))
+     (list fuse))
     (build-system gnu-build-system)
     (synopsis "FUSE-based file system for LXC")
     (description "LXCFS is a small FUSE file system written with the intention
@@ -1083,7 +1140,7 @@ It started as a side project of LXC but can be used by any run-time.")
 (define-public lxd
   (package
     (name "lxd")
-    (version "4.17")
+    (version "4.22")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1091,7 +1148,7 @@ It started as a side project of LXC but can be used by any run-time.")
                     "lxd-" version "/lxd-" version ".tar.gz"))
               (sha256
                (base32
-                "1kzmgyg5kw3zw9qa6jabld6rmb53b6yy69h7y9znsdlf74jllljl"))))
+                "119345936fcm1vv06k82k9hvj5yjf9jdrwqm9ccphhl5mswf8xq9"))))
     (build-system go-build-system)
     (arguments
      `(#:import-path "github.com/lxc/lxd"
@@ -1105,22 +1162,17 @@ It started as a side project of LXC but can be used by any run-time.")
          (add-after 'unpack 'unpack-dist
            (lambda* (#:key import-path #:allow-other-keys)
              (with-directory-excursion (string-append "src/" import-path)
-               ;; remove the link back to the top level
-               (delete-file (string-append "_dist/src/" import-path))
-               ;; move all the deps into the src directory
-               (copy-recursively "_dist/src" "../../.."))
-             #t))
+               ;; Move all the dependencies into the src directory.
+               (copy-recursively "_dist/src" "../../.."))))
          (replace 'build
            (lambda* (#:key import-path #:allow-other-keys)
              (with-directory-excursion (string-append "src/" import-path)
-               (invoke "make" "build" "CC=gcc" "TAG_SQLITE3=libsqlite3")
-               #t)))
+               (invoke "make" "build" "CC=gcc" "TAG_SQLITE3=libsqlite3"))))
          (replace 'check
            (lambda* (#:key tests? import-path #:allow-other-keys)
              (when tests?
                (with-directory-excursion (string-append "src/" import-path)
-                 (invoke "make" "check" "CC=gcc" "TAG_SQLITE3=libsqlite3")))
-             #t))
+                 (invoke "make" "check" "CC=gcc" "TAG_SQLITE3=libsqlite3")))))
          (replace 'install
            (lambda* (#:key inputs outputs import-path #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -1131,7 +1183,7 @@ It started as a side project of LXC but can be used by any run-time.")
                     (completions-dir
                      (string-append out "/share/bash-completion/completions")))
                (with-directory-excursion (string-append "src/" import-path)
-                 ;; wrap lxd with runtime dependencies
+                 ;; Wrap lxd with run-time dependencies.
                  (wrap-program (string-append bin-dir "lxd")
                    `("PATH" ":" prefix
                      ,(fold (lambda (input paths)
@@ -1144,24 +1196,23 @@ It started as a side project of LXC but can be used by any run-time.")
                             '("bash" "acl" "rsync" "tar" "xz" "btrfs-progs"
                               "gzip" "dnsmasq" "squashfs-tools" "iproute2"
                               "criu" "iptables"))))
-                 ;; remove unwanted binaries
+                 ;; Remove unwanted binaries.
                  (for-each (lambda (prog)
                              (delete-file (string-append bin-dir prog)))
                            '("deps" "macaroon-identity" "generate"))
-                 ;; install documentation
+                 ;; Install documentation.
                  (for-each (lambda (file)
                              (install-file file doc-dir))
                            (find-files "doc"))
-                 ;; install bash completion
+                 ;; Install bash completion.
                  (rename-file "scripts/bash/lxd-client" "scripts/bash/lxd")
-                 (install-file "scripts/bash/lxd" completions-dir)))
-             #t)))))
+                 (install-file "scripts/bash/lxd" completions-dir))))))))
     (native-inputs
-     `(;; test dependencies:
-       ;; ("go-github-com-rogpeppe-godeps" ,go-github-com-rogpeppe-godeps)
-       ;; ("go-github-com-tsenart-deadcode" ,go-github-com-tsenart-deadcode)
-       ;; ("go-golang-org-x-lint" ,go-golang-org-x-lint)
-       ("pkg-config" ,pkg-config)))
+     (list ;; Test dependencies:
+           ;; ("go-github-com-rogpeppe-godeps" ,go-github-com-rogpeppe-godeps)
+           ;; ("go-github-com-tsenart-deadcode" ,go-github-com-tsenart-deadcode)
+           ;; ("go-golang-org-x-lint" ,go-golang-org-x-lint)
+           pkg-config))
     (inputs
      `(("acl" ,acl)
        ("eudev" ,eudev)
@@ -1169,7 +1220,7 @@ It started as a side project of LXC but can be used by any run-time.")
        ("libraft" ,libraft)
        ("libcap" ,libcap)
        ("lxc" ,lxc)
-       ;; runtime dependencies:
+       ;; Run-time dependencies.
        ("bash" ,bash-minimal)
        ("rsync" ,rsync)
        ("tar" ,tar)
@@ -1193,14 +1244,14 @@ pretty simple, REST API.")
 (define-public libvirt
   (package
     (name "libvirt")
-    (version "7.5.0")
+    (version "7.9.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://libvirt.org/sources/libvirt-"
                            version ".tar.xz"))
        (sha256
-        (base32 "15987ihnsjvcgi11dzcf1k3zp1si2d4wcxj0r0i30brc0d4pn44h"))
+        (base32 "131fyxb05rrcr9ih4mhhjyw3cgsxh5l12vj4y109q9vlynsz5742"))
        (patches (search-patches "libvirt-add-install-prefix.patch"))))
     (build-system meson-build-system)
     (arguments
@@ -1221,7 +1272,6 @@ pretty simple, REST API.")
              (string-append "-Dinstall_prefix=" (assoc-ref %outputs "out"))
              "--sysconfdir=/etc"
              "--localstatedir=/var")
-       #:meson ,meson-0.55
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'skip-directory-confusion
@@ -1296,21 +1346,14 @@ to integrate other virtualization mechanisms if needed.")
                 "1gdcvqz88qkp402zra9csc6391f2xki1270x683n6ixakl3gf8w4"))))
     (build-system meson-build-system)
     (inputs
-     `(("openssl" ,openssl)
-       ("cyrus-sasl" ,cyrus-sasl)
-       ("lvm2" ,lvm2)                   ; for libdevmapper
-       ("libyajl" ,libyajl)))
+     (list openssl cyrus-sasl lvm2 ; for libdevmapper
+           libyajl))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-       ("glib" ,glib "bin")
-       ("vala" ,vala)))
+     (list pkg-config intltool
+           `(,glib "bin") vala))
     (propagated-inputs
      ;; ‘Required:’ by the installed .pc files.
-     `(("glib" ,glib)
-       ("libvirt" ,libvirt)
-       ("libxml2" ,libxml2)
-       ("gobject-introspection" ,gobject-introspection)))
+     (list glib libvirt libxml2 gobject-introspection))
     (home-page "https://libvirt.org")
     (synopsis "GLib wrapper around libvirt")
     (description "libvirt-glib wraps the libvirt library to provide a
@@ -1328,14 +1371,14 @@ three libraries:
 (define-public python-libvirt
   (package
     (name "python-libvirt")
-    (version "7.3.0")
+    (version "7.9.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://libvirt.org/sources/python/libvirt-python-"
                            version ".tar.gz"))
        (sha256
-        (base32 "15pn8610ybf03xff3vbz3apz2ph42k2kh6k19r020l9nvc6jcv37"))))
+        (base32 "0nakisj2ady5a41k4zc95k0kp749f4ppmxgr91b1h1dzbzxcydc5"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -1350,12 +1393,11 @@ three libraries:
                (setenv "LIBVIRT_API_COVERAGE" "whynot")
                (invoke "python" "setup.py" "test")))))))
     (inputs
-     `(("libvirt" ,libvirt)))
+     (list libvirt))
     (propagated-inputs
-     `(("python-lxml" ,python-lxml)))
+     (list python-lxml))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python-pytest" ,python-pytest)))
+     (list pkg-config python-pytest))
     (home-page "https://libvirt.org")
     (synopsis "Python bindings to libvirt")
     (description "This package provides Python bindings to the libvirt
@@ -1398,8 +1440,8 @@ virtualization library.")
            (lambda* (#:key inputs #:allow-other-keys)
              ;; Xen is not available for now - so only patch qemu.
              (substitute* "virtManager/createconn.py"
-               (("/usr(/bin/qemu-system)" _ suffix)
-                (string-append (assoc-ref inputs "qemu") suffix)))
+               (("/usr(/bin/qemu-system-[a-zA-Z0-9_-]+)" _ suffix)
+                (search-input-file inputs suffix)))
              #t))
          (add-before 'wrap 'wrap-with-GI_TYPELIB_PATH
            (lambda* (#:key inputs outputs #:allow-other-keys)
@@ -1433,26 +1475,26 @@ virtualization library.")
              #t))
          (add-after 'install 'glib-or-gtk-compile-schemas
            (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-compile-schemas))
-         (add-after 'install 'glib-or-gtk-wrap
+         (add-after 'wrap 'glib-or-gtk-wrap
            (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap)))))
     (inputs
-     `(("dconf" ,dconf)
-       ("gtk+" ,gtk+)
-       ("gtk-vnc" ,gtk-vnc)
-       ("gtksourceview" ,gtksourceview)
-       ("libvirt" ,libvirt)
-       ("libvirt-glib" ,libvirt-glib)
-       ("libosinfo" ,libosinfo)
-       ("vte" ,vte)
-       ("python-libvirt" ,python-libvirt)
-       ("python-requests" ,python-requests)
-       ("python-pycairo" ,python-pycairo)
-       ("python-pygobject" ,python-pygobject)
-       ("python-libxml2" ,python-libxml2)
-       ("spice-gtk" ,spice-gtk)))
+     (list dconf
+           gtk+
+           gtk-vnc
+           gtksourceview
+           libvirt
+           libvirt-glib
+           libosinfo
+           vte
+           python-libvirt
+           python-requests
+           python-pycairo
+           python-pygobject
+           python-libxml2
+           spice-gtk))
     ;; virt-manager searches for qemu-img or kvm-img in the PATH.
     (propagated-inputs
-     `(("qemu" ,qemu)))
+     (list qemu))
     (native-inputs
      `(("glib" ,glib "bin")             ; glib-compile-schemas
        ("gobject-introspection" ,gobject-introspection)
@@ -1480,14 +1522,16 @@ domains, their live performance and resource utilization statistics.")
 (define-public criu
   (package
     (name "criu")
-    (version "3.15")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://download.openvz.org/criu/criu-"
-                                  version ".tar.bz2"))
-              (sha256
-               (base32
-                "09d0j24x0cyc7wkgi7cnxqgfjk7kbdlm79zxpj8d356sa3rw2z24"))))
+    (version "3.16.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/checkpoint-restore/criu")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1riw15197fnrs254jl7wks9x8bdml76kf1vnqkkgyypr13dnq55g"))))
     (build-system gnu-build-system)
     (arguments
      `(#:test-target "test"
@@ -1496,21 +1540,17 @@ domains, their live performance and resource utilization statistics.")
        (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
              (string-append "LIBDIR=" (assoc-ref %outputs "out")
                             "/lib")
-             (string-append "ASCIIDOC=" (assoc-ref %build-inputs "asciidoc")
-                            "/bin/asciidoc")
-             (string-append "XMLTO=" (assoc-ref %build-inputs "xmlto")
-                            "/bin/xmlto"))
+             (string-append "ASCIIDOC="
+                            (search-input-file %build-inputs
+                                               "/bin/asciidoc"))
+             (string-append "PYTHON=python3")
+             (string-append "XMLTO="
+                            (search-input-file %build-inputs
+                                               "/bin/xmlto")))
        #:phases
        (modify-phases %standard-phases
-         (replace 'configure
-           (lambda* (#:key inputs #:allow-other-keys)
-             ;; The includes for libnl are located in a sub-directory.
-             (setenv "C_INCLUDE_PATH"
-                     (string-append (assoc-ref inputs "libnl")
-                                    "/include/libnl3:"
-                                    (or (getenv "C_INCLUDE_PATH") "")))
-             #t))
-         (add-after 'configure 'fix-documentation
+         (delete 'configure)            ; no configure script
+         (add-after 'unpack 'fix-documentation
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (substitute* "Documentation/Makefile"
                (("-m custom.xsl")
@@ -1519,50 +1559,43 @@ domains, their live performance and resource utilization statistics.")
                  (assoc-ref inputs "docbook-xsl") "/xml/xsl/"
                  ,(package-name docbook-xsl) "-"
                  ,(package-version docbook-xsl)
-                 "/manpages/docbook.xsl")))
-             #t))
+                 "/manpages/docbook.xsl")))))
          (add-after 'unpack 'hardcode-variables
            (lambda* (#:key inputs #:allow-other-keys)
              ;; Hardcode arm version detection
              (substitute* "Makefile"
-               (("ARMV.*:=.*") "ARMV := 7\n"))
-             ;; We are currently using python-2
-             (substitute* "crit/Makefile"
-               (("\\$\\(PYTHON\\)") "python2"))
-             (substitute* "lib/Makefile"
-               (("\\$\\(PYTHON\\)")
-                (string-append (assoc-ref inputs "python")
-                               "/bin/python")))
-             #t))
+               (("ARMV.*:=.*") "ARMV := 7\n"))))
          (add-before 'build 'fix-symlink
            (lambda* (#:key inputs #:allow-other-keys)
              ;; The file 'images/google/protobuf/descriptor.proto' points to
              ;; /usr/include/..., which obviously does not exist.
              (let* ((file "google/protobuf/descriptor.proto")
                     (target (string-append "images/" file))
-                    (source (string-append (assoc-ref inputs "protobuf")
-                                           "/include/" file)))
+                    (source (search-input-file
+                             inputs
+                             (string-append "include/" file))))
                (delete-file target)
-               (symlink source target)
-               #t)))
+               (symlink source target))))
          (add-after 'install 'wrap
            (lambda* (#:key inputs outputs #:allow-other-keys)
              ;; Make sure 'crit' runs with the correct PYTHONPATH.
-             (let* ((out (assoc-ref outputs "out"))
-                    (path (string-append out
-                                         "/lib/python"
-                                         (string-take (string-take-right
-                                                       (assoc-ref inputs "python") 5) 3)
-                                         "/site-packages:"
-                                         (getenv "PYTHONPATH"))))
+             (let* ((out  (assoc-ref outputs "out"))
+                    (site (string-append out "/lib/python"
+                                         ,(version-major+minor
+                                           (package-version python))
+                                         "/site-packages"))
+                    (path (getenv "GUIX_PYTHONPATH")))
                (wrap-program (string-append out "/bin/crit")
-                 `("PYTHONPATH" ":" prefix (,path))))
-             #t)))))
+                 `("GUIX_PYTHONPATH" ":" prefix (,site ,path))))))
+         (add-after 'install 'delete-static-libraries
+           ;; Not building/installing these at all doesn't seem to be supported.
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (for-each delete-file (find-files out "\\.a$"))))))))
     (inputs
      `(("protobuf" ,protobuf)
-       ("python" ,python-2)
-       ("python2-protobuf" ,python2-protobuf)
-       ("python2-ipaddr" ,python2-ipaddr)
+       ("python" ,python)
+       ("python-protobuf" ,python-protobuf)
        ("iproute" ,iproute)
        ("libaio" ,libaio)
        ("libcap" ,libcap)
@@ -1571,13 +1604,13 @@ domains, their live performance and resource utilization statistics.")
        ("libbsd" ,libbsd)
        ("nftables" ,nftables)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("perl" ,perl)
-       ("protobuf-c" ,protobuf-c)
-       ("asciidoc" ,asciidoc)
-       ("xmlto" ,xmlto)
-       ("docbook-xml" ,docbook-xml)
-       ("docbook-xsl" ,docbook-xsl)))
+     (list pkg-config
+           perl
+           protobuf-c
+           asciidoc
+           xmlto
+           docbook-xml
+           docbook-xsl))
     (home-page "https://criu.org")
     (synopsis "Checkpoint and restore in user space")
     (description "Using this tool, you can freeze a running application (or
@@ -1613,72 +1646,91 @@ Machine Protocol.")
     (license license:gpl3+)))
 
 (define-public looking-glass-client
-  (let ((commit "182c4752d57690da7f99d5e788de9b8baea33895"))
-    (package
-     (name "looking-glass-client")
-     (version (string-append "a12-" (string-take commit 7)))
-     (source
-      (origin
+  (package
+    (name "looking-glass-client")
+    (version "B5")
+    (source
+     (origin
        (method git-fetch)
-       (uri (git-reference (url "https://github.com/gnif/LookingGlass")
-                           (commit commit)))
+       (uri (git-reference
+             (url "https://github.com/gnif/LookingGlass")
+             (commit version)
+             (recursive? #t)))
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "02bq46ndmzq9cihazzn7xq1x7q5nzm7iw4l9lqzihxcxp9famkhw"))
-       (modules '((guix build utils)))
-       (snippet
-        '(begin
-           ;; Do not create binaries optimized for the CPU of the build machine,
-           ;; for reproducibility and compatibility.  TODO: in the next version
-           ;; of looking glass, this is exposed as a CMake configure option.
-           (substitute* "client/CMakeLists.txt"
-             (("-march=native")
-              ""))
-           #t))))
-     (build-system cmake-build-system)
-     (inputs `(("fontconfig" ,fontconfig)
-               ("glu" ,glu)
-               ("mesa" ,mesa)
-               ("openssl" ,openssl)
-               ("sdl2" ,sdl2)
-               ("sdl2-ttf" ,sdl2-ttf)
-               ("spice-protocol" ,spice-protocol)
-               ("wayland" ,wayland)))
-     (native-inputs `(("libconfig" ,libconfig)
-                      ("nettle" ,nettle)
-                      ("pkg-config" ,pkg-config)))
-     (arguments
-      `(#:tests? #f ;; No tests are available.
-        #:make-flags '("CC=gcc")
-        #:phases (modify-phases %standard-phases
-                   (add-before 'configure 'chdir-to-client
-                     (lambda* (#:key outputs #:allow-other-keys)
-                       (chdir "client")
-                       #t))
-                   (add-after 'chdir-to-client 'add-missing-include
-                     (lambda _
-                       ;; Mimic upstream commit b9797529893, required since the
-                       ;; update to Mesa 19.2.
-                       (substitute* "renderers/egl/shader.h"
-                         (("#include <stdbool\\.h>")
-                          "#include <stdbool.h>\n#include <stddef.h>"))
-                       #t))
-                   (replace 'install
-                     (lambda* (#:key outputs #:allow-other-keys)
-                       (install-file "looking-glass-client"
-                                     (string-append (assoc-ref outputs "out")
-                                                    "/bin"))
-                       #t)))))
-     (home-page "https://looking-glass.hostfission.com")
-     (synopsis "KVM Frame Relay (KVMFR) implementation")
-     (description "Looking Glass allows the use of a KVM (Kernel-based Virtual
+         "09mn544x5hg1z31l92ksk7fi7yj9r8xdk0dcl9fk56ivcr452ylm"))))
+    (build-system cmake-build-system)
+    (inputs
+     (list bash-minimal
+           fontconfig
+           freetype
+           glu
+           gmp
+           libglvnd
+           libiberty
+           libx11
+           libxcursor
+           libxfixes
+           libxi
+           libxinerama
+           libxkbcommon
+           libxpresent
+           libxrandr
+           libxscrnsaver
+           mesa
+           openssl
+           sdl2
+           sdl2-ttf
+           spice-protocol
+           wayland
+           wayland-protocols
+           `(,zlib "static")))
+    (native-inputs (list libconfig nettle pkg-config))
+    (arguments
+     `(#:tests? #f ;; No tests are available.
+       #:make-flags '("CC=gcc")
+       #:phases (modify-phases %standard-phases
+                  (add-before 'configure 'chdir-to-client
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      (chdir "client")
+                      #t))
+                  (replace 'install
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      (install-file "looking-glass-client"
+                                    (string-append (assoc-ref outputs "out")
+                                                   "/bin"))
+                      #t))
+                  (add-after 'install 'wrapper
+                    (lambda* (#:key inputs outputs #:allow-other-keys)
+                      (wrap-program
+                          (string-append (assoc-ref outputs "out")
+                                         "/bin/looking-glass-client")
+                        `("LD_LIBRARY_PATH" ":" prefix
+                          ,(map (lambda (name)
+                                  (let ((input (assoc-ref inputs name)))
+                                    (string-append input "/lib")))
+                                '("gmp"
+                                  "libxi"
+                                  "nettle"
+                                  "mesa"
+                                  "wayland"
+                                  "fontconfig-minimal"
+                                  "freetype"
+                                  "libx11"
+                                  "libxfixes"
+                                  "libxscrnsaver"
+                                  "libxinerama"))))
+                      #t)))))
+    (home-page "https://looking-glass.io/")
+    (synopsis "KVM Frame Relay (KVMFR) implementation")
+    (description "Looking Glass allows the use of a KVM (Kernel-based Virtual
 Machine) configured for VGA PCI Pass-through without an attached physical
-monitor, keyboard or mouse.  It displays the VM's rendered contents on your main
-monitor/GPU.")
-     ;; This package requires SSE instructions.
-     (supported-systems '("i686-linux" "x86_64-linux"))
-     (license license:gpl2+))))
+monitor, keyboard or mouse.  It displays the VM's rendered contents on your
+main monitor/GPU.")
+    ;; This package requires SSE instructions.
+    (supported-systems '("i686-linux" "x86_64-linux"))
+    (license license:gpl2+)))
 
 (define-public runc
   (package
@@ -1720,7 +1772,7 @@ monitor/GPU.")
      `(("go-md2man" ,go-github-com-go-md2man)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("libseccomp" ,libseccomp)))
+     (list libseccomp))
     (synopsis "Open container initiative runtime")
     (home-page "https://opencontainers.org/")
     (description
@@ -1792,17 +1844,16 @@ Open Container Initiative (OCI) image layout and its tagged images.")
                 "0n22sdif437ddg5ch0ipwim3fg0n6ihc9bfi52qkhy3r1grz04hs"))))
     (build-system go-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("go-github-com-go-md2man" ,go-github-com-go-md2man)))
+     (list pkg-config go-github-com-go-md2man))
     (inputs
-     `(("btrfs-progs" ,btrfs-progs)
-       ("eudev" ,eudev)
-       ("libassuan" ,libassuan)
-       ("libselinux" ,libselinux)
-       ("libostree" ,libostree)
-       ("lvm2" ,lvm2)
-       ("glib" ,glib)
-       ("gpgme" ,gpgme)))
+     (list btrfs-progs
+           eudev
+           libassuan
+           libselinux
+           libostree
+           lvm2
+           glib
+           gpgme))
     (arguments
      '(#:import-path "github.com/containers/skopeo"
        #:install-source? #f
@@ -1872,7 +1923,7 @@ virtual machines.")
 (define-public bubblewrap
   (package
     (name "bubblewrap")
-    (version "0.4.1")
+    (version "0.5.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/containers/bubblewrap/"
@@ -1880,7 +1931,8 @@ virtual machines.")
                                   version ".tar.xz"))
               (sha256
                (base32
-                "00ycgi6q2yngh06bnz50wkvar6r2jnjf3j158grhi9k13jdrpimr"))))
+                "0608l2sjwhnb1c0mslah1h6yjvqr17wk60by6i710qwxg4rszz8n"))
+               (patches (search-patches "bubblewrap-fix-locale-in-tests.patch"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -1896,7 +1948,9 @@ virtual machines.")
                (substitute* "tests/test-run.sh"
                  (("/var/tmp") tmp-dir)
                  ;; Tests create a temporary python script, so fix its shebang.
-                 (("/usr/bin/env python") (which "python"))
+                 (("/usr/bin/env python3") (which "python3"))
+                 ;; Tests call /usr/bin/env, so fix its path.
+                 (("/usr/bin/env") (which "env"))
                  ;; Some tests try to access /usr, but that doesn't exist.
                  ;; Give them /gnu instead.
                  (("/usr") "/gnu")
@@ -1905,18 +1959,21 @@ virtual machines.")
                  (("--ro-bind /lib /lib") "--ro-bind /gnu /lib")
                  (("  */bin/bash") (which "bash"))
                  (("/bin/sh") (which "sh"))
-                 (("findmnt") (which "findmnt"))))
+                 (("findmnt") (which "findmnt")))
+               (substitute* "tests/libtest.sh"
+                 (("/var/tmp") tmp-dir)
+                 (("/usr") "/gnu")
+                 (("--ro-bind /bin /bin") "--ro-bind /gnu /bin")
+                 (("--ro-bind /sbin /sbin") "--ro-bind /gnu /sbin")
+                 (("--ro-bind /lib /lib") "--ro-bind /gnu /lib")))
              #t))
          ;; Remove the directory we gave to tests to have a clean package.
          (add-after 'check 'remove-tmp-dir
            (lambda* (#:key outputs #:allow-other-keys)
              (delete-file-recursively (string-append (assoc-ref outputs "out") "/tmp"))
              #t)))))
-    (inputs
-     `(("libcap" ,libcap)))
-    (native-inputs
-     `(("python" ,python-wrapper)
-       ("util-linux" ,util-linux)))
+    (inputs (list libcap))
+    (native-inputs (list python-wrapper util-linux))
     (home-page "https://github.com/containers/bubblewrap")
     (synopsis "Unprivileged sandboxing tool")
     (description "Bubblewrap is aimed at running applications in a sandbox,
@@ -1942,7 +1999,7 @@ by default and can be made read-only.")
     (arguments
      `(#:tests? #f))                    ; no tests exist
     (inputs
-     `(("libxrandr" ,libxrandr)))
+     (list libxrandr))
     (home-page "http://bochs.sourceforge.net/")
     (synopsis "Emulator for x86 PC")
     (description
@@ -1956,11 +2013,11 @@ DOS or Microsoft Windows.")
 (define-public xen
   (package
     (name "xen")
-    (version "4.14.1")
+    (version "4.14.1")               ; please update the mini-os input as well
     (source (origin
               (method git-fetch)
               (uri (git-reference
-                    (url "git://xenbits.xenproject.org/xen.git")
+                    (url "https://xenbits.xen.org/git-http/xen.git")
                     (commit (string-append "RELEASE-" version))))
               (file-name (git-file-name name version))
               (sha256
@@ -2132,11 +2189,13 @@ override CC = " (assoc-ref inputs "cross-gcc") "/bin/i686-linux-gnu-gcc"))
        ,(origin
          (method git-fetch)
          (uri (git-reference
-               (url "http://xenbits.xen.org/git-http/mini-os.git")
-               (commit (string-append "xen-RELEASE-" version))))
+               (url "https://xenbits.xen.org/git-http/mini-os.git")
+               ;; This corresponds to (string-append "xen-RELEASE-" version))
+               ;; at time of packaging, but upstream has unfortunately modified
+               ;; existing tags in the past.
+               (commit "0b4b7897e08b967a09bed2028a79fabff82342dd")))
          (sha256
-          (base32
-           "1i8pcl19n60i2m9vlg79q3nknpj209c9ic5x10wxaicx45kc107f"))
+          (base32 "1i8pcl19n60i2m9vlg79q3nknpj209c9ic5x10wxaicx45kc107f"))
          (file-name "mini-os-git-checkout")))
        ("perl" ,perl)
        ; TODO: markdown
@@ -2159,7 +2218,7 @@ which is a hypervisor.")
 (define-public osinfo-db-tools
   (package
     (name "osinfo-db-tools")
-    (version "1.8.0")
+    (version "1.9.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://releases.pagure.org/libosinfo/osinfo-db-tools-"
@@ -2167,23 +2226,19 @@ which is a hypervisor.")
 
               (sha256
                (base32
-                "038q3gzdbkfkhpicj0755mw1q4gbvn57pslpw8n2dp3lds9im0g9"))))
+                "1h23a8nzdxjyvw44dwh903563n3b1z5skx8g0b1p1v5cif3iqpr5"))))
     (build-system meson-build-system)
     (inputs
-     `(("libsoup" ,libsoup)
-       ("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)
-       ("json-glib" ,json-glib)
-       ("libarchive" ,libarchive)))
+     (list libsoup-minimal-2 libxml2 libxslt json-glib libarchive))
     (native-inputs
-     `(("perl" ,perl)
-       ("gobject-introspection" ,gobject-introspection)
-       ("gettext" ,gettext-minimal)
-       ("pkg-config" ,pkg-config)
-       ;; Tests
-       ("python" ,python)
-       ("pytest" ,python-pytest)
-       ("requests" ,python-requests)))
+     (list perl
+           gobject-introspection
+           gettext-minimal
+           pkg-config
+           ;; Tests
+           python
+           python-pytest
+           python-requests))
     (home-page "https://gitlab.com/libosinfo/osinfo-db-tools")
     (synopsis "Tools for managing the osinfo database")
     (description "This package contains a set of tools to assist
@@ -2193,14 +2248,14 @@ administrators and developers in managing the database.")
 (define-public osinfo-db
   (package
     (name "osinfo-db")
-    (version "20210809")
+    (version "20211216")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://releases.pagure.org/libosinfo/osinfo-db-"
                                   version ".tar.xz"))
               (sha256
                (base32
-                "16gas6ahxwim1vdjlc4p1gm6q5gfy25h82ngykcm94x69sl6qsan"))))
+                "10hhpciqk4lzsj66zkdvghd1i5zh6hg1fn9as4qhwcr1wnqfgv09"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -2214,11 +2269,9 @@ administrators and developers in managing the database.")
                  (string-append (assoc-ref %build-inputs "osinfo-db-tools")
                                 "/bin/osinfo-db-import")))
            (mkdir-p osinfo-dir)
-           (invoke osinfo-db-import "--dir" osinfo-dir source)
-           #t))))
+           (invoke osinfo-db-import "--dir" osinfo-dir source)))))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("osinfo-db-tools" ,osinfo-db-tools)))
+     (list intltool osinfo-db-tools))
     (home-page "https://gitlab.com/libosinfo/osinfo-db")
     (synopsis "Database of information about operating systems")
     (description "Osinfo-db provides the database files for use with the
@@ -2248,20 +2301,16 @@ use with virtualization provisioning tools")
                          ">="))
                       #t)))))
     (propagated-inputs
-     `(("python-beautifultable" ,python-beautifultable)
-       ("python-click" ,python-click)
-       ("python-importlib-resources"
-        ,python-importlib-resources)
-       ("python-lark-parser" ,python-lark-parser)
-       ("python-marshmallow" ,python-marshmallow)
-       ("python-progressbar2" ,python-progressbar2)
-       ("python-requests" ,python-requests)
-       ("python-toml" ,python-toml)))
+     (list python-beautifultable
+           python-click
+           python-importlib-resources
+           python-lark-parser
+           python-marshmallow
+           python-progressbar2
+           python-requests
+           python-toml))
     (native-inputs
-     `(("python-black" ,python-black)
-       ("python-mypy" ,python-mypy)
-       ("python-pyhamcrest" ,python-pyhamcrest)
-       ("python-twine" ,python-twine)))
+     (list python-black python-mypy python-pyhamcrest python-twine))
     (home-page
      "https://github.com/ALSchwalm/transient")
     (synopsis
diff --git a/gnu/packages/visidata.scm b/gnu/packages/visidata.scm
deleted file mode 100644
index a1b16e5ca6..0000000000
--- a/gnu/packages/visidata.scm
+++ /dev/null
@@ -1,64 +0,0 @@
-;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2020 Ryan Prior <rprior@protonmail.com>
-;;;
-;;; This file is part of GNU Guix.
-;;;
-;;; GNU Guix is free software; you can redistribute it and/or modify it
-;;; under the terms of the GNU General Public License as published by
-;;; the Free Software Foundation; either version 3 of the License, or (at
-;;; your option) any later version.
-;;;
-;;; GNU Guix is distributed in the hope that it will be useful, but
-;;; WITHOUT ANY WARRANTY; without even the implied warranty of
-;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;;; GNU General Public License for more details.
-;;;
-;;; You should have received a copy of the GNU General Public License
-;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
-
-(define-module (gnu packages visidata)
-  #:use-module (gnu packages check)
-  #:use-module (gnu packages time)
-  #:use-module (gnu packages python-web)
-  #:use-module (gnu packages python-xyz)
-  #:use-module (gnu packages xml)
-  #:use-module (guix build-system python)
-  #:use-module (guix build utils)
-  #:use-module (guix download)
-  #:use-module ((guix licenses) #:prefix license:)
-  #:use-module (guix packages))
-
-(define-public visidata
-  (package
-    (name "visidata")
-    (version "2.5")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "visidata" version))
-       (sha256
-        (base32
-         "19fbjr9j91pcazcz0bqx3qrasmr8xdsb13haf5lfbpyxj23f7f1j"))))
-    (build-system python-build-system)
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (replace 'check
-           (lambda* (#:key tests? #:allow-other-keys)
-             (when tests? (invoke "pytest"))
-             #t)))))
-    (inputs
-     `(("dateutil" ,python-dateutil)
-       ("requests" ,python-requests)
-       ("lxml" ,python-lxml)
-       ("openpyxl" ,python-openpyxl)
-       ("xlrd" ,python-xlrd)))
-    (native-inputs
-     `(("pytest" ,python-pytest)))
-    (synopsis "Terminal spreadsheet multitool for discovering and arranging data")
-    (description
-     "VisiData is an interactive multitool for tabular data.  It combines the
-clarity of a spreadsheet, the efficiency of the terminal, and the power of
-Python, into a lightweight utility which can handle millions of rows.")
-    (home-page "https://www.visidata.org/")
-    (license license:gpl3)))
diff --git a/gnu/packages/vlang.scm b/gnu/packages/vlang.scm
index e0b2e7bcfc..4741483f12 100644
--- a/gnu/packages/vlang.scm
+++ b/gnu/packages/vlang.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2020 Ryan Prior <rprior@protonmail.com>
 ;;; Copyright © 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2021 (unmatched parenthesis <paren@disroot.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -23,6 +24,7 @@
   #:use-module (gnu packages node)
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages tls)
+  #:use-module (gnu packages version-control)
   #:use-module (gnu packages xorg)
   #:use-module (guix build-system gnu)
   #:use-module (guix git-download)
@@ -33,7 +35,7 @@
 (define-public vlang
   (package
    (name "vlang")
-   (version "0.1.29")
+   (version "0.2.4")
    (source
     (origin
      (method git-fetch)
@@ -42,7 +44,7 @@
            (commit version)))
      (file-name (git-file-name name version))
      (sha256
-      (base32 "1rqi7cah5nq8aggrib9xvdpfjxq20li91svv0w9yny6nn1ag7snx"))))
+      (base32 "17wmjxssmg6kd4j8i6pgib452zzwvkyi3n1znd1jj3xkf2l92fw8"))))
    (build-system gnu-build-system)
    (arguments
     `(#:make-flags
@@ -53,26 +55,30 @@
             "GITFASTCLONE=mkdir -p"
             "TCCREPO="
             "VCREPO="
+            (string-append "VFLAGS=-cc " ,(cc-for-target))
             "VERBOSE=1")
       #:phases
       (modify-phases %standard-phases
         (delete 'configure)
+        (add-before 'build 'change-home
+          (lambda _
+            (setenv "HOME" "/tmp")
+            #t))
         (add-before 'build 'patch-makefile
           (lambda _
             (substitute* "Makefile"
-              (("rm -rf") "true")
-              (("v self") (string-append "v -cc " ,(cc-for-target) " cmd/v")))
+              (("--branch thirdparty-unknown-unknown") "")
+              (("rm -rf") "true"))
             #t))
         (add-before 'check 'delete-failing-tests
           ;; XXX As always, these should eventually be fixed and run.
           (lambda _
             (for-each delete-file
-                      '("vlib/v/gen/x64/tests/x64_test.v"
+                      '("vlib/os/notify/notify_test.v"
+                        "vlib/v/doc/doc_private_fn_test.v"
+                        "vlib/v/live/live_test.v"
                         "vlib/v/tests/repl/repl_test.v"
-                        "vlib/v/tests/valgrind/valgrind_test.v"
-                        "vlib/v/tests/valgrind/strings_and_arrays.vv"
-                        "vlib/v/tests/live_test.v"
-                        "vlib/net/websocket/ws_test.v"))
+                        "vlib/v/tests/valgrind/valgrind_test.v"))
             #t))
         (replace 'check
           (lambda* (#:key tests? #:allow-other-keys)
@@ -82,32 +88,34 @@
                 (mkdir-p bin)
                 (symlink gcc (string-append bin "/cc"))
                 (setenv "PATH" (string-append bin ":" (getenv "PATH")))
-                (invoke "./v" "test-fixed")))
+                (invoke "./v" "test-self")))
             #t))
         (replace 'install
           (lambda* (#:key outputs #:allow-other-keys)
             (let* ((bin (string-append (assoc-ref outputs "out") "/bin"))
+                   (docs (string-append bin "/cmd/v/help"))
                    (tools (string-append bin "/cmd/tools"))
                    (thirdparty (string-append bin "/thirdparty"))
                    (vlib (string-append bin "/vlib"))
                    (vmod (string-append bin "/v.mod")))
               (mkdir-p bin)
               (copy-file "./v" (string-append bin "/v"))
-              ;; v requires as of 0.1.27 that these other components are in the
+              ;; v requires as of 0.2.4 that these other components are in the
               ;; same directory. In a future release we may be able to move
               ;; these into other output folders.
               (copy-recursively "cmd/tools" tools)
+              (copy-recursively "cmd/v/help" docs)
               (copy-recursively "thirdparty" thirdparty)
               (copy-recursively "vlib" vlib)
               (copy-file "v.mod" vmod))
             #t)))))
    (inputs
-    `(("glib" ,glib)))
+    (list glib))
    (native-inputs
     `(("vc"
        ;; Versions are not consistently tagged, but the matching commit will
        ;; probably have ‘v0.x.y’ in the commit message.
-       ,(let ((vc-version "b01d0fcda4b55861baa4be82e307cca4834b1641"))
+       ,(let ((vc-version "5e876c1491db50b136499d3397b57b7c062040e5"))
           ;; v bootstraps from generated c source code from a dedicated
           ;; repository. It's readable, as generated source goes, and not at all
           ;; obfuscated, and it's about 15kb. The original source written in
@@ -121,8 +129,8 @@
                   (commit vc-version)))
             (file-name (git-file-name "vc" vc-version))
             (sha256
-             (base32 "052gp5q2k31r3lci3rx4k0vy0vjdjva64xvrbbihn8lgmw63lc9f")))))
-
+             (base32 "1gxdkgc7aqw5f0fhch1n6nhzgzvgb49p77idx1zj7wcp53lpx5ng")))))
+      ("git" ,git-minimal)
       ;; For the tests.
       ("libx11" ,libx11)
       ("node" ,node)
@@ -134,7 +142,3 @@
     "V is a systems programming language.  It provides memory safety and thread
 safety guarantees with minimal abstraction.")
    (license license:expat)))
-
-(define-public v
-  ;; We used to provide 'vlang' under the name 'v'.
-  (deprecated-package "v" vlang))
diff --git a/gnu/packages/vnc.scm b/gnu/packages/vnc.scm
index 4c2b13c93c..c0fabe848b 100644
--- a/gnu/packages/vnc.scm
+++ b/gnu/packages/vnc.scm
@@ -4,7 +4,7 @@
 ;;; Copyright © 2020 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;; Copyright © 2020 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
-;;; Copyright © 2021 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2021, 2022 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -61,7 +61,7 @@
 (define-public remmina
   (package
     (name "remmina")
-    (version "1.4.20")
+    (version "1.4.23")
     (source
      (origin
        (method git-fetch)
@@ -71,7 +71,7 @@
          (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0apm4lqcmqskdp2fjxl8dbg3686cm4w0b5806fqj7w43hdmd8w4v"))))
+        (base32 "1j0fiz76z4y08w136vs8igqxxg42hx61r5hf6sylcr0c424sc9rk"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f                      ; No target
@@ -102,51 +102,50 @@
                         (gi-typelib-path (getenv "GI_TYPELIB_PATH")))
                     (wrap-program file
                       `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path)))))
-                '("remmina" "remmina-file-wrapper")))
-             #t)))))
+                '("remmina" "remmina-file-wrapper"))))))))
     (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("glib:bin" ,glib "bin")
-       ("gobject-introspection" ,gobject-introspection)
-       ("gtk+:bin" ,gtk+ "bin")
-       ("intl" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list gettext-minimal
+           `(,glib "bin")
+           gobject-introspection
+           `(,gtk+ "bin")
+           intltool
+           pkg-config))
     (inputs
-     `(("app-indicator" ,libappindicator)
-       ("atk" ,atk)
-       ("avahi" ,avahi)
-       ("cairo" ,cairo)
-       ("cups" ,cups)
-       ("ffmpeg" ,ffmpeg)
-       ("freerdp" ,freerdp)             ; for rdp plugin
-       ("gcrypt" ,libgcrypt)
-       ("gdk-pixbuf" ,gdk-pixbuf+svg)
-       ("glib" ,glib)
-       ("gnome-keyring" ,gnome-keyring)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gtk+" ,gtk+)
-       ("harfbuzz" ,harfbuzz)
-       ("json-glib" ,json-glib)
-       ("libsecret" ,libsecret)         ; for secret plugin
-       ("libsoup" ,libsoup)
-       ("libssh" ,libssh)               ; for ssh plugin
-       ("libvnc" ,libvnc)               ; for vnc plugin
-       ("openssl" ,openssl)
-       ("pango" ,pango)
-       ("pcre2" ,pcre2)                 ; for exec plugin
-       ("shared-mime-info" ,shared-mime-info)
-       ("sodium" ,libsodium)
-       ("spice-client-gtk" ,spice-gtk)  ; for spice plugin
-       ("telepathy" ,telepathy-glib)
-       ("vte" ,vte)                     ; for st plugin
-       ("wayland" ,wayland)
-       ("webkitgtk" ,webkitgtk)         ; for www plugin
-       ("x11" ,libx11)
-       ("xext" ,libxext)                ; for xdmcp plugin
-       ("xdg-utils" ,xdg-utils)
-       ("xkbfile" ,libxkbfile)))        ; for nx plugin
+     (list libappindicator
+           atk
+           avahi
+           cairo
+           cups
+           ffmpeg
+           freerdp                      ; for rdp plugin
+           libgcrypt
+           librsvg
+           glib
+           gnome-keyring
+           gsettings-desktop-schemas
+           gtk+
+           harfbuzz
+           json-glib
+           libsecret                    ; for secret plugin
+           libsoup-minimal-2
+           libssh                       ; for ssh plugin
+           libvnc                       ; for vnc plugin
+           openssl
+           pango
+           pcre2                        ; for exec plugin
+           shared-mime-info
+           libsodium
+           spice-gtk                    ; for spice plugin
+           telepathy-glib
+           vte                          ; for st plugin
+           wayland
+           webkitgtk                    ; for www plugin
+           libx11
+           libxext                      ; for xdmcp plugin
+           xdg-utils
+           libxkbfile))                 ; for nx plugin
     (propagated-inputs
-     `(("dconf" ,dconf)))
+     (list dconf))
     (home-page "https://remmina.org/")
     (synopsis "Remote Desktop Client")
     (description "Remmina is a client to use other desktops remotely.
@@ -154,52 +153,52 @@ RDP, VNC, SPICE, NX, XDMCP, SSH and EXEC network protocols are supported.")
     (license license:gpl2+)))
 
 (define-public tigervnc-client
-  (package
-    (name "tigervnc-client")
-    (version "1.11.0")
-    (source (origin
-              (method git-fetch)
-              (uri
-               (git-reference
-                (url "https://github.com/TigerVNC/tigervnc")
-                (commit (string-append "v" version))))
-              (sha256
-               (base32
-                "1bg79ahr4mzy48ak0caxy3ckdsxmhpchypggaz6lxjjk92hgsz91"))
-              (file-name (git-file-name name version))))
-    (build-system cmake-build-system)
-    (arguments
-     '(#:tests? #f ; Tests that do exists are not automated.
-       #:phases (modify-phases %standard-phases
-                  (replace 'install
-                    (lambda* (#:key outputs #:allow-other-keys)
-                      (with-directory-excursion "vncviewer"
-                        (invoke "make" "install")))))))
-    (native-inputs
-     `(("autoconf" ,autoconf)
-       ("gettext-minimal" ,gettext-minimal)
-       ("automake" ,automake)))
-    (inputs
-     `(("zlib" ,zlib)
-       ("gnutls" ,gnutls)
-       ("libjpeg-turbo" ,libjpeg-turbo)
-       ("fltk" ,fltk)
-       ("linux-pam" ,linux-pam)
-       ("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxtst" ,libxtst)
-       ("libxrandr" ,libxrandr)
-       ("libxdamage" ,libxdamage)
-       ("pixman" ,pixman)))
-    (home-page "https://tigervnc.org/")
-    (synopsis "High-performance, platform-neutral
+  ;; xorg-server 21 support was merged 2 weeks after the last (1.12.0) release.
+  (let ((revision "0")
+        (commit "b484c229853a08c7f254a4c6efbaf3c9e85b5074"))
+    (package
+      (name "tigervnc-client")
+      (version (git-version "1.12.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/TigerVNC/tigervnc")
+               (commit commit)))
+         (sha256
+          (base32 "125dnn05ps7vfsxlxmzm05w99lhm8hk8j4hpxl1mlzb5j0hp1061"))
+         (file-name (git-file-name name version))))
+      (build-system cmake-build-system)
+      (arguments
+       '(#:tests? #f                 ; Tests that do exists are not automated.
+                  #:phases (modify-phases %standard-phases
+                             (replace 'install
+                               (lambda* (#:key outputs #:allow-other-keys)
+                                 (with-directory-excursion "vncviewer"
+                                   (invoke "make" "install")))))))
+      (native-inputs
+       (list autoconf gettext-minimal automake))
+      (inputs
+       (list zlib
+             gnutls
+             libjpeg-turbo
+             fltk
+             linux-pam
+             libx11
+             libxext
+             libxtst
+             libxrandr
+             libxdamage
+             pixman))
+      (home-page "https://tigervnc.org/")
+      (synopsis "High-performance, platform-neutral
 implementation of VNC (client)")
-    (description "TigerVNC is a client/server implementation of VNC (Virtual
+      (description "TigerVNC is a client/server implementation of VNC (Virtual
 Network Computing).  It provides enough performance to run even 3D and video
 applications.  It also provides extensions for advanced authentication methods
 and TLS encryption.  This package installs only the VNC client, the
 application which is needed to connect to VNC servers.")
-    (license license:gpl2)))
+      (license license:gpl2))))
 
 ;; A VNC server is, in fact, an X server so it seems like a good idea
 ;; to build on the work already done for xorg-server package.  This is
@@ -228,13 +227,11 @@ application which is needed to connect to VNC servers.")
        ,@(package-inputs tigervnc-client)
        ,@(package-native-inputs xorg-server)))
     (inputs
-     `(("perl" ,perl)
-       ("coreutils" ,coreutils)
-       ("xauth" ,xauth)
-       ,@(package-inputs xorg-server)))
+     (modify-inputs (package-inputs xorg-server)
+       (prepend perl coreutils xauth)))
     (propagated-inputs
-     `(("xauth" ,xauth)
-       ,@(package-propagated-inputs xorg-server)))
+     (modify-inputs (package-propagated-inputs xorg-server)
+       (prepend xauth)))
     (arguments
      (substitute-keyword-arguments
          (package-arguments xorg-server)
@@ -272,32 +269,13 @@ application which is needed to connect to VNC servers.")
                (let*
                    ((tvnc-src (assoc-ref %build-inputs "tigervnc-src"))
                     (tvnc-xserver (string-append tvnc-src "/unix/xserver")))
-                 (copy-recursively tvnc-xserver ".")
-                 #t)))
+                 (copy-recursively tvnc-xserver "."))))
            (add-after 'copy-tvnc-xserver 'patch-xserver
              (lambda _
-               (let*
-                   ((tvnc-src (assoc-ref %build-inputs "tigervnc-src"))
-                    (xorg-server-version ,(package-version xorg-server))
-                    (which-patch (lambda ()
-                                   (let*
-                                       ((patch-num (apply string-append
-                                                          (list-head (string-split xorg-server-version
-                                                                                   #\.)
-                                                                     2)))
-                                        (fn (format #f "~a/unix/xserver~a.patch" tvnc-src patch-num)))
-                                     (when (not (file-exists? fn))
-                                       (error (format #f "Patch file, ~a,
-corresponding to the input xorg-server version, does not exist.  Installation
-will fail.  " fn)))
-
-                                     fn))) ; VNC patches for xserver have the
-                                           ; form xserverXY[Y].patch, where
-                                           ; X.Y[Y].Z is the Xorg server
-					; version.
-                    (xserver-patch (which-patch)))
-                 (invoke "patch" "-p1" "-i" xserver-patch)
-                 (invoke "autoreconf" "-fiv"))))
+               (invoke "patch" "-p1" "-i"
+                       (string-append (assoc-ref %build-inputs "tigervnc-src")
+                                      "/unix/xserver21.1.1.patch"))
+               (invoke "autoreconf" "-fiv")))
            (add-before 'build 'build-tigervnc
              (lambda _
                (let* ((out (assoc-ref %outputs "out"))
@@ -363,7 +341,7 @@ where the server is installed.")))
                          "gcc -I"))
                       #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("gnutls" ,gnutls)
        ("libgcrypt" ,libgcrypt)
diff --git a/gnu/packages/vpn.scm b/gnu/packages/vpn.scm
index 330a3271b4..4ad555ef1b 100644
--- a/gnu/packages/vpn.scm
+++ b/gnu/packages/vpn.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
-;;; Copyright © 2013, 2016, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2016, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2015 Jeff Mickey <j@codemac.net>
 ;;; Copyright © 2016, 2017, 2019, 2021 Efraim Flashner <efraim@flashner.co.il>
@@ -240,7 +240,7 @@
          (add-after 'python-wrap 'qt-wrap
            (assoc-ref qt:%standard-phases 'qt-wrap)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("iproute" ,iproute)
        ("iptables" ,iptables)
@@ -254,19 +254,13 @@
        ("qtquickcontrols" ,qtquickcontrols)
        ("qtquickcontrols2" ,qtquickcontrols2)))
     (propagated-inputs
-     `(("go-0xacab-org-leap-shapeshifter"
-        ,go-0xacab-org-leap-shapeshifter)
-       ("go-github-com-apparentlymart-go-openvpn-mgmt"
-        ,go-github-com-apparentlymart-go-openvpn-mgmt)
-       ("go-github-com-emersion-go-autostart"
-        ,go-github-com-emersion-go-autostart)
-       ("go-github-com-keybase-go-ps"
-        ,go-github-com-keybase-go-ps)
-       ("go-github-com-rakyll-statik"
-        ,go-github-com-rakyll-statik)
-       ("go-github-com-sevlyar-go-daemon"
-        ,go-github-com-sevlyar-go-daemon)
-       ("go-golang-org-x-sys" ,go-golang-org-x-sys)))
+     (list go-0xacab-org-leap-shapeshifter
+           go-github-com-apparentlymart-go-openvpn-mgmt
+           go-github-com-emersion-go-autostart
+           go-github-com-keybase-go-ps
+           go-github-com-rakyll-statik
+           go-github-com-sevlyar-go-daemon
+           go-golang-org-x-sys))
     (synopsis "Generic VPN client by LEAP")
     (description "Bitmask, by @acronym{LEAP, LEAP Encryption Access Project},
 is an application to provide easy and secure encrypted communication with a
@@ -289,9 +283,8 @@ Networks and The Calyx Institute, where the former is default.")
                 "1cz8n75ksl0l908zc5l3rnfm1hv7130s2w8710799fr5sxrdbszi"))))
     (build-system gnu-build-system)
     (home-page "http://software.schmorp.de/pkg/gvpe.html")
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("openssl" ,openssl)
-              ("zlib" ,zlib)))
+    (native-inputs (list pkg-config))
+    (inputs (list openssl zlib))
     (synopsis "Secure VPN among multiple nodes over an untrusted network")
     (description
      "The GNU Virtual Private Ethernet creates a virtual network
@@ -303,14 +296,14 @@ endpoints.")
 (define-public strongswan
   (package
     (name "strongswan")
-    (version "5.9.3")
+    (version "5.9.4")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://download.strongswan.org/strongswan-"
                            version ".tar.bz2"))
        (sha256
-        (base32 "1xy6c9c7bq5a5jmm04r9f9iqn39yrr1dkq81jhvpxsd4l1ban9ck"))))
+        (base32 "063mi0kdlpd7r7s3py35yf80hvrv3nrdfvxpyn7ns25gqajg3za5"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -323,18 +316,16 @@ endpoints.")
                                "/bin/" command)))
              (substitute* "src/libstrongswan/utils/process.c"
                (("/bin/sh")
-                (string-append (assoc-ref inputs "bash") "/bin/sh")))
+                (search-input-file inputs "/bin/sh")))
 
              (substitute* "src/libstrongswan/tests/suites/test_process.c"
                (("/bin/sh") (which "sh"))
                (("/bin/echo") (which "echo"))
-               (("cat") (which "cat")))
-             #t))
+               (("cat") (which "cat")))))
          (add-before 'check 'set-up-test-environment
            (lambda* (#:key inputs #:allow-other-keys)
-             (setenv "TZDIR" (string-append (assoc-ref inputs "tzdata")
-                                            "/share/zoneinfo"))
-             #t)))
+             (setenv "TZDIR"
+                     (search-input-directory inputs "share/zoneinfo")))))
        #:configure-flags
        (list
         "--disable-ldap"
@@ -386,18 +377,16 @@ endpoints.")
         ;; Use libcap by default.
         "--with-capabilities=libcap")))
     (inputs
-     `(("coreutils" ,coreutils)
-       ("curl" ,curl)
-       ("gmp" ,gmp)
-       ("libcap" ,libcap)
-       ("libgcrypt" ,libgcrypt)
-       ("libsoup" ,libsoup)
-       ("linux-pam" ,linux-pam)
-       ("openssl" ,openssl)))
+     (list coreutils
+           curl
+           gmp
+           libcap
+           libgcrypt
+           libsoup
+           linux-pam
+           openssl))
     (native-inputs
-     `(("coreutils" ,coreutils)
-       ("pkg-config" ,pkg-config)
-       ("tzdata" ,tzdata-for-tests)))
+     (list coreutils pkg-config tzdata-for-tests))
     (synopsis "IKEv1/v2 keying daemon")
     (description "StrongSwan is an IPsec implementation originally based upon
 the FreeS/WAN project.  It contains support for IKEv1, IKEv2, MOBIKE, IPv6,
@@ -418,7 +407,7 @@ NAT-T and more.")
            ;; src/libstrongswan/plugins/pkcs11/pkcs11.h
            (license:non-copyleft
             "file://src/libstrongswan/plugins/pkcs11/pkcs11.h"
-            "pkcs11 contains a unknown permissive license. View the specific
+            "pkcs11 contains an unknown permissive license. View the specific
 file for more details.")
            ;; These files are not included in the
            ;; build, they are disabled through
@@ -443,9 +432,7 @@ file for more details.")
             (sha256 (base32
                      "1128860lis89g1s21hqxvap2nq426c9j4bvgghncc1zj0ays7kj6"))))
    (build-system gnu-build-system)
-   (inputs `(("libgcrypt" ,libgcrypt)
-             ("perl" ,perl)
-             ("vpnc-scripts" ,vpnc-scripts)))
+   (inputs (list libgcrypt perl vpnc-scripts))
    (arguments
     `(#:tests? #f ; there is no check target
       #:phases
@@ -490,13 +477,13 @@ Only \"Universal TUN/TAP device driver support\" is needed in the kernel.")
                  (base32
                   "1pmi4n58q81pmn9arvfixhvv6vkkf3rpwac3hwnwyl882q5q0ccx"))))
       (build-system gnu-build-system)
-      (inputs `(("guile" ,guile-3.0) ; for the wrapper scripts
-                ("coreutils" ,coreutils)
-                ("grep" ,grep)
-                ("iproute2" ,iproute)    ; for ‘ip’
-                ("net-tools" ,net-tools) ; for ‘ifconfig’, ‘route’
-                ("sed" ,sed)
-                ("which" ,which)))
+      (inputs (list guile-3.0 ; for the wrapper scripts
+                    coreutils
+                    grep
+                    iproute ; for ‘ip’
+                    net-tools ; for ‘ifconfig’, ‘route’
+                    sed
+                    which))
       (arguments
        `(#:phases
          (modify-phases %standard-phases
@@ -531,10 +518,12 @@ Only \"Universal TUN/TAP device driver support\" is needed in the kernel.")
              ;; Wrap scripts with paths to their common hard dependencies.
              ;; Optional dependencies will need to be installed by the user.
              (lambda* (#:key inputs outputs #:allow-other-keys)
-               (let ((out (assoc-ref outputs "out")))
+               (let ((out (assoc-ref outputs "out"))
+                     (guile (search-input-file inputs "bin/guile")))
                  (for-each
                   (lambda (script)
                     (wrap-script (string-append out "/etc/vpnc/" script)
+                      #:guile guile
                       `("PATH" ":" prefix
                         ,(map (lambda (name)
                                 (let ((input (assoc-ref inputs name)))
@@ -581,10 +570,9 @@ the entire VPN in a network namespace accessible only through SSH.")
                 "03323nnhb4y9nzwva04mq7xg03dvdrgp689g89f69jqc261skcqx"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (inputs
-     `(("libevent" ,libevent)))
+     (list libevent))
     (home-page "https://github.com/cernekee/ocproxy")
     (synopsis "OpenConnect proxy")
     (description
@@ -606,12 +594,9 @@ the user specifically asks to proxy, so the @dfn{VPN} interface no longer
              (base32 "1cdsx4nsrwawbsisfkldfc9i4qn60g03vxb13nzppr2br9p4rrih"))))
    (build-system gnu-build-system)
    (propagated-inputs
-    `(("libxml2" ,libxml2)
-      ("gnutls" ,gnutls)
-      ("zlib" ,zlib)))
+    (list libxml2 gnutls zlib))
    (inputs
-    `(("lz4" ,lz4)
-      ("vpnc-scripts" ,vpnc-scripts)))
+    (list lz4 vpnc-scripts))
    (native-inputs
     `(("gettext" ,gettext-minimal)
       ("pkg-config" ,pkg-config)))
@@ -663,26 +648,26 @@ and probably others.")
                                        (assoc-ref inputs "qtwebengine")
                                        "/lib/qt5/libexec/QtWebEngineProcess")))
                (wrap-program bin
+                 #:sh (search-input-file inputs "bin/bash")
                  `("QTWEBENGINEPROCESS_PATH" = (,qt-process-path)))
                #t))))))
     (inputs
-     `(("openconnect" ,openconnect)
-       ("python-attrs" ,python-attrs)
-       ("python-colorama" ,python-colorama)
-       ("python-keyring" ,python-keyring)
-       ("python-lxml" ,python-lxml)
-       ("python-prompt-toolkit" ,python-prompt-toolkit)
-       ("python-requests" ,python-requests)
-       ("python-pyqt" ,python-pyqt)
-       ("python-pyqtwebengine" ,python-pyqtwebengine)
-       ("python-pysocks" ,python-pysocks)
-       ("python-pyxdg" ,python-pyxdg)
-       ("python-structlog" ,python-structlog)
-       ("python-toml" ,python-toml)
-       ("qtwebengine" ,qtwebengine)))
+     (list openconnect
+           python-attrs
+           python-colorama
+           python-keyring
+           python-lxml
+           python-prompt-toolkit
+           python-requests
+           python-pyqt
+           python-pyqtwebengine
+           python-pysocks
+           python-pyxdg
+           python-structlog
+           python-toml
+           qtwebengine))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-pytest python-setuptools-scm))
     (home-page "https://github.com/vlaci/openconnect-sso")
     (synopsis "OpenConnect wrapper script supporting Azure AD (SAMLv2)")
     (description
@@ -705,12 +690,9 @@ and probably others.")
                 "1qsfgpxg553s8rc9cyrc4k96z0pislxsdxb9wyhp8fdprkak2mw2"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("autotools" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config))
     (inputs
-     `(("openssl" ,openssl)
-       ("ppp" ,ppp)))
+     (list openssl ppp))
     (home-page "https://github.com/adrienverge/openfortivpn")
     (synopsis "Client for PPP+SSL VPN tunnel services")
     (description "Openfortivpn is a client for PPP+SSL VPN tunnel services.  It
@@ -721,7 +703,7 @@ this process.  It is compatible with Fortinet VPNs.")
 (define-public openvpn
   (package
     (name "openvpn")
-    (version "2.5.3")
+    (version "2.5.5")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -729,17 +711,14 @@ this process.  It is compatible with Fortinet VPNs.")
                     version ".tar.xz"))
               (sha256
                (base32
-                "0zlski66mw10klmwvg445z051mld7xjng4iyl4f9b883qr1rjspv"))))
+                "0fq0nvgpbyvdxc8vwka51whgm3kkvjb3c9xarpv3h211l2gxd6qi"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--enable-iproute2=yes")))
     (native-inputs
-     `(("iproute2" ,iproute)))
+     (list iproute))
     (inputs
-     `(("lz4" ,lz4)
-       ("lzo" ,lzo)
-       ("openssl" ,openssl)
-       ("linux-pam" ,linux-pam)))
+     (list lz4 lzo openssl linux-pam))
     (home-page "https://openvpn.net/")
     (synopsis "Virtual private network daemon")
     (description
@@ -776,6 +755,7 @@ traversing network address translators (@dfn{NAT}s) and firewalls.")
              (let ((entrypoint (string-append (assoc-ref outputs "out")
                                               "/bin/.protonvpn-real")))
                (wrap-program entrypoint
+                            #:sh (search-input-file inputs "bin/bash")
                             `("PATH" ":" prefix
                               ,(map (lambda (name)
                                       (let ((input (assoc-ref inputs name)))
@@ -790,18 +770,18 @@ traversing network address translators (@dfn{NAT}s) and firewalls.")
                                           "which")))))
              #t)))))
     (native-inputs
-     `(("python-docopt" ,python-docopt)))
+     (list python-docopt))
     (inputs
-     `(("dialog" ,dialog)
-       ("iproute2" ,iproute)
-       ("iptables" ,iptables)
-       ("ncurses" ,ncurses)
-       ("openvpn" ,openvpn)
-       ("procps" ,procps)
-       ("python-jinja2" ,python-jinja2)
-       ("python-pythondialog" ,python-pythondialog)
-       ("python-requests" ,python-requests)
-       ("which" ,which)))
+     (list dialog
+           iproute
+           iptables
+           ncurses
+           openvpn
+           procps
+           python-jinja2
+           python-pythondialog
+           python-requests
+           which))
     (synopsis "Command-line client for ProtonVPN")
     (description
      "This is the official command-line interface for ProtonVPN, a secure
@@ -827,9 +807,7 @@ VPN.  The gratis tier offers unlimited bandwidth for up to 10 devices.")
      '(#:configure-flags
        '("--sysconfdir=/etc"
          "--localstatedir=/var")))
-    (inputs `(("zlib" ,zlib)
-              ("lzo" ,lzo)
-              ("openssl" ,openssl)))
+    (inputs (list zlib lzo openssl))
     (home-page "https://tinc-vpn.org")
     (synopsis "Virtual Private Network (VPN) daemon")
     (description
@@ -860,12 +838,12 @@ private network between hosts on the internet.")
                (("/bin/sh") "sh"))
              #t)))))
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)
-       ;; For tests only.
-       ("python-flake8" ,python-flake8)
-       ("python-mock" ,python-mock)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-setuptools-scm
+           ;; For tests only.
+           python-flake8
+           python-mock
+           python-pytest-cov
+           python-pytest-runner))
     (home-page "https://github.com/sshuttle/sshuttle")
     (synopsis "VPN that transparently forwards connections over SSH")
     (description "sshuttle creates an encrypted virtual private network (VPN)
@@ -899,14 +877,10 @@ DNS domain name queries.")
                (("/bin/sh") (which "sh")))
              #t)))))
     (inputs
-     `(("python-argcomplete" ,python-argcomplete)
-       ("python-prettytable" ,python-prettytable)
-       ("python-pyyaml" ,python-pyyaml)))
+     (list python-argcomplete python-prettytable python-pyyaml))
     ;; For tests only.
     (native-inputs
-     `(("python-fixtures" ,python-fixtures)
-       ("python-pbr" ,python-pbr)
-       ("python-testtools" ,python-testtools)))
+     (list python-fixtures python-pbr python-testtools))
     (home-page "https://github.com/albertodonato/sshoot")
     (synopsis "sshuttle VPN session manager")
     (description "sshoot provides a command-line interface to manage multiple
@@ -931,11 +905,9 @@ with configuration options for most of @command{sshuttle}’s features.")
     (arguments
      '(#:tests? #f))                    ; no tests
     (inputs
-     `(("nspr" ,nspr)
-       ("nss" ,nss)
-       ("openssl" ,openssl)))
+     (list nspr nss openssl))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/ambrop72/badvpn")
     (synopsis "Peer-to-peer virtual private network (VPN)")
     (description "@code{BadVPN} is a collection of virtual private
@@ -1016,7 +988,7 @@ WireGuard was added to Linux 5.6.")
 (define-public wireguard-tools
   (package
     (name "wireguard-tools")
-    (version "1.0.20210424")
+    (version "1.0.20210914")
     (source
      (origin
        (method git-fetch)
@@ -1025,7 +997,7 @@ WireGuard was added to Linux 5.6.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "12v0ykaz7phv1gqin35wf6ndgb9819vai17ynjxssq00xwcbsq43"))))
+        (base32 "1nafrb2naif0z7z3vijnlyp81z89ywzlagc64k4sqa3ayzn95sm0"))))
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags
@@ -1043,27 +1015,28 @@ WireGuard was added to Linux 5.6.")
        #:tests? #f
        #:phases
        (modify-phases %standard-phases
-         ;; No configure script
-         (delete 'configure)
+         (delete 'configure)            ; no configure script
          (add-after 'install 'install-contrib-docs
            (lambda* (#:key outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out")))
-               (copy-recursively "contrib/"
-                                 (string-append out "/share/doc/wireguard-tools"))
-               #t)))
+             (let* ((out (assoc-ref outputs "out"))
+                    (doc (string-append out "/share/doc/wireguard-tools")))
+               (copy-recursively "contrib/" doc))))
          (add-after 'install 'wrap-wg-quick
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
                     (inputs-sbin (map (lambda (input)
-                                        (string-append (assoc-ref inputs input) "/sbin"))
-                                      (list "resolvconf" "iproute" "procps"
-                                            "iptables")))
-                   (coreutils (string-append (assoc-ref inputs "coreutils")
-                                             "/bin")))
+                                        (string-append (assoc-ref inputs input)
+                                                       "/sbin"))
+                                      (list "iproute"
+                                            "iptables"
+                                            "procps"
+                                            "resolvconf")))
+                    (coreutils (string-append (assoc-ref inputs "coreutils")
+                                              "/bin")))
                (wrap-program (string-append out "/bin/wg-quick")
+                 #:sh (search-input-file inputs "bin/bash")
                  `("PATH" ":" prefix ,(append inputs-sbin
-                                              (list coreutils))))
-               #t))))))
+                                              (list coreutils))))))))))
     (inputs
      `(("resolvconf" ,openresolv)
        ("coreutils" ,coreutils)
@@ -1085,9 +1058,6 @@ public keys and can roam across IP addresses.")
      (list license:lgpl2.1+    ; src/netlink.h & contrib/embeddable-wg-library
            license:gpl2))))    ; everything else
 
-(define-public wireguard
-  (deprecated-package "wireguard" wireguard-tools))
-
 (define-public xl2tpd
   (package
     (name "xl2tpd")
@@ -1111,15 +1081,12 @@ public keys and can roam across IP addresses.")
                     (lambda* (#:key inputs #:allow-other-keys)
                       (substitute* "l2tp.h"
                         (("/usr/sbin/pppd")
-                         (string-append (assoc-ref inputs "ppp")
-                                        "/sbin/pppd")))
+                         (search-input-file inputs "/sbin/pppd")))
                       (setenv "KERNELSRC"
-                              (assoc-ref inputs "linux-libre-headers"))
+                              (assoc-ref inputs "kernel-headers"))
                       #t)))
        #:tests? #f))                    ; no tests provided
-    (inputs `(("libpcap" ,libpcap)
-              ("linux-libre-headers" ,linux-libre-headers)
-              ("ppp" ,ppp)))
+    (inputs (list libpcap ppp))
     (home-page "https://www.xelerance.com/software/xl2tpd/")
     (synopsis "Layer 2 Tunnelling Protocol Daemon (RFC 2661)")
     (description
diff --git a/gnu/packages/vulkan.scm b/gnu/packages/vulkan.scm
index ac91f8451c..f5c619a2b2 100644
--- a/gnu/packages/vulkan.scm
+++ b/gnu/packages/vulkan.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2021 Mathieu Othacehe <othacehe@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -24,6 +25,7 @@
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
+  #:use-module (guix gexp)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system meson)
@@ -91,9 +93,8 @@ and for the GLSL.std.450 extended instruction set.
                                (string-append
                                 "-DSPIRV-Headers_SOURCE_DIR="
                                 (assoc-ref %build-inputs "spirv-headers")))))
-    (inputs `(("spirv-headers" ,spirv-headers)))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("python" ,python)))
+    (inputs (list spirv-headers))
+    (native-inputs (list pkg-config python))
     (home-page "https://github.com/KhronosGroup/SPIRV-Tools")
     (synopsis "API and commands for processing SPIR-V modules")
     (description
@@ -136,10 +137,8 @@ parser,disassembler, validator, and optimizer for SPIR-V.")
                 (string-append (assoc-ref inputs "spirv-tools") "/bin")))
              #t)))))
     (inputs
-     `(("glslang" ,glslang)
-       ("spirv-headers" ,spirv-headers)
-       ("spirv-tools" ,spirv-tools)))
-    (native-inputs `(("python" ,python)))
+     (list glslang spirv-headers spirv-tools))
+    (native-inputs (list python))
     (home-page "https://github.com/KhronosGroup/SPIRV-Cross")
     (synopsis "Parser for and converter of SPIR-V to other shader languages")
     (description
@@ -168,8 +167,7 @@ SPIR-V, aiming to emit GLSL or MSL that looks like human-written code.")
      '(#:tests? #f                      ;FIXME: requires bundled SPIRV-Tools
        #:configure-flags '("-DBUILD_SHARED_LIBS=ON")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python" ,python)))
+     (list pkg-config python))
     (home-page "https://github.com/KhronosGroup/glslang")
     (synopsis "OpenGL and OpenGL ES shader front end and validator")
     (description
@@ -222,7 +220,14 @@ interpretation of the specifications for these languages.")
          "15gx9ab6w1sjq9hkpbas7z2f8f47j6mlln6p3w26qmydjj8gfjjv"))))
     (build-system cmake-build-system)
     (arguments
-     `(#:phases (modify-phases %standard-phases
+     `(#:configure-flags
+       ,#~(list
+           (string-append "-DVULKAN_HEADERS_INSTALL_DIR="
+                          #$(this-package-input "vulkan-headers"))
+           (string-append "-DCMAKE_INSTALL_INCLUDEDIR="
+                          #$(this-package-input "vulkan-headers")
+                          "/include"))
+       #:phases (modify-phases %standard-phases
                   (add-after 'unpack 'unpack-googletest
                     (lambda* (#:key inputs #:allow-other-keys)
                       (let ((gtest (assoc-ref inputs "googletest:source")))
@@ -243,8 +248,9 @@ interpretation of the specifications for these languages.")
        ("libxrandr" ,libxrandr)
        ("pkg-config" ,pkg-config)
        ("python" ,python)
-       ("vulkan-headers" ,vulkan-headers)
        ("wayland" ,wayland)))
+    (inputs
+     (list vulkan-headers))
     (home-page
      "https://github.com/KhronosGroup/Vulkan-Loader")
     (synopsis "Khronos official ICD loader and validation layers for Vulkan")
@@ -276,14 +282,9 @@ and the ICD.")
          "129wzk7xj3vn3c8b4p7fzkd0npl58118s2i1d88gsfnlix54nagq"))))
     (build-system cmake-build-system)
     (inputs
-     `(("glslang" ,glslang)
-       ("libxrandr" ,libxrandr)
-       ("vulkan-loader" ,vulkan-loader)
-       ("wayland" ,wayland)))
+     (list glslang libxrandr vulkan-loader wayland))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python" ,python)
-       ("vulkan-headers" ,vulkan-headers)))
+     (list pkg-config python vulkan-headers))
     (arguments
      `(#:tests? #f                      ;no tests
        #:configure-flags (list (string-append "-DGLSLANG_INSTALL_DIR="
@@ -344,12 +345,9 @@ API.")
                          ,(package-version glslang))))
              #t)))))
     (inputs
-     `(("glslang" ,glslang)
-       ("python" ,python)
-       ("spirv-headers" ,spirv-headers)
-       ("spirv-tools" ,spirv-tools)))
+     (list glslang python spirv-headers spirv-tools))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/google/shaderc")
     (synopsis "Tools for shader compilation")
     (description "Shaderc is a collection of tools, libraries, and tests for
@@ -390,16 +388,16 @@ shader compilation.")
         ("libtool" ,libtool)
         ("pkg-config" ,pkg-config)))
      (inputs
-      `(("libx11" ,libx11)
-        ("libxcb" ,libxcb)
-        ("spirv-headers" ,spirv-headers)
-        ("spirv-tools" ,spirv-tools)
-        ("vulkan-headers" ,vulkan-headers)
-        ("vulkan-loader" ,vulkan-loader)
-        ("wine-minimal" ,wine-minimal) ; Needed for 'widl'.
-        ("xcb-util" ,xcb-util)
-        ("xcb-util-keysyms" ,xcb-util-keysyms)
-        ("xcb-util-wm" ,xcb-util-wm)))
+      (list libx11
+            libxcb
+            spirv-headers
+            spirv-tools
+            vulkan-headers
+            vulkan-loader
+            wine-minimal ; Needed for 'widl'.
+            xcb-util
+            xcb-util-keysyms
+            xcb-util-wm))
      (home-page "https://source.winehq.org/git/vkd3d.git/")
      (synopsis "Direct3D 12 to Vulkan translation library")
      (description "vkd3d is a library for translating Direct3D 12 to Vulkan.")
diff --git a/gnu/packages/w3m.scm b/gnu/packages/w3m.scm
index a14ca02e84..5239cd43a0 100644
--- a/gnu/packages/w3m.scm
+++ b/gnu/packages/w3m.scm
@@ -66,13 +66,13 @@
                                     "scripts/dirlist.cgi.in")
                        (("@PERL@") (which "perl"))))))))
     (inputs
-     `(("gdk-pixbuf" ,gdk-pixbuf)
-       ("imlib2" ,imlib2)
-       ("libgc" ,libgc)
-       ("libx11" ,libx11)
-       ("ncurses" ,ncurses)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list gdk-pixbuf
+           imlib2
+           libgc
+           libx11
+           ncurses
+           openssl
+           zlib))
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("perl" ,perl)
diff --git a/gnu/packages/wdiff.scm b/gnu/packages/wdiff.scm
index 20fc0bc06f..ec0769447f 100644
--- a/gnu/packages/wdiff.scm
+++ b/gnu/packages/wdiff.scm
@@ -47,9 +47,9 @@
                         (("#! /bin/sh")
                          (string-append "#!" (which "sh")))))))))
     (native-inputs
-     `(("which" ,which)
-       ;; For some reason wdiff.info gets rebuilt.
-       ("texinfo" ,texinfo)))
+     (list which
+           ;; For some reason wdiff.info gets rebuilt.
+           texinfo))
     (home-page "https://www.gnu.org/software/wdiff/")
     (synopsis "Word difference finder")
     (description
diff --git a/gnu/packages/web-browsers.scm b/gnu/packages/web-browsers.scm
index 3f78be7114..0639bf7a92 100644
--- a/gnu/packages/web-browsers.scm
+++ b/gnu/packages/web-browsers.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014 John Darrington <jmd@gnu.org>
 ;;; Copyright © 2014, 2019 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2015, 2016, 2019, 2021 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2015, 2016, 2019, 2021, 2022 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Kei Kebreau <kkebreau@posteo.net>
 ;;; Copyright © 2017 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
@@ -45,6 +45,7 @@
   #:use-module (guix build-system go)
   #:use-module (guix build-system python)
   #:use-module (guix download)
+  #:use-module (guix gexp)
   #:use-module (guix git-download)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
@@ -52,6 +53,8 @@
   #:use-module (gnu packages)
   #: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 compression)
   #:use-module (gnu packages curl)
@@ -60,6 +63,7 @@
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages fonts)
   #:use-module (gnu packages freedesktop)
+  #:use-module (gnu packages fribidi)
   #:use-module (gnu packages gcc)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages glib)
@@ -73,6 +77,7 @@
   #:use-module (gnu packages libunistring)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages lisp)
+  #:use-module (gnu packages lisp-check)
   #:use-module (gnu packages lisp-xyz)
   #:use-module (gnu packages lua)
   #:use-module (gnu packages man)
@@ -124,10 +129,12 @@
            (assoc-ref glib-or-gtk:%standard-phases
                       'glib-or-gtk-wrap)))))
     (native-inputs
-     `(("glib:bin" ,glib "bin")
+     `(("desktop-file-utils" ,desktop-file-utils) ;for tests
+       ("glib:bin" ,glib "bin")
        ("gtk+:bin" ,gtk+ "bin")
        ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+       ("pkg-config" ,pkg-config)
+       ("which" ,which))) ;for tests
     (inputs
      `(("adwaita-icon-theme" ,adwaita-icon-theme)
        ("gcr" ,gcr)
@@ -138,10 +145,9 @@
        ("json-glib" ,json-glib)
        ("libarchive" ,libarchive)
        ("libpeas" ,libpeas)
-       ("libsoup" ,libsoup)
        ("sqlite" ,sqlite)
        ("vala" ,vala)
-       ("webkitgtk" ,webkitgtk)))
+       ("webkitgtk" ,webkitgtk-with-libsoup2)))
     (synopsis "Lightweight graphical web browser")
     (description "@code{Midori} is a lightweight, Webkit-based web browser.
 It features integration with GTK+3, configurable web search engine, bookmark
@@ -152,21 +158,21 @@ management, extensions such as advertisement blocker and colorful tabs.")
 (define-public links
   (package
     (name "links")
-    (version "2.23")
+    (version "2.25")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://links.twibright.com/download/"
                                   "links-" version ".tar.bz2"))
               (sha256
                (base32
-                "0idcwryfbf6ds5x2fx1k21m459qz5mrz3hw4a6ziiz91yl1d4q36"))))
+                "0b6x97xi8i4pag2scba02c0h95cm3sia58q99zppk0lfd448bmrd"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (replace 'configure
            (lambda* (#:key outputs #:allow-other-keys)
-             ;; The tarball uses a very old version of autconf. It doesn't
+             ;; The tarball uses a very old version of autoconf. It doesn't
              ;; understand extra flags like `--enable-fast-install', so
              ;; we need to invoke it with just what it understands.
              (let ((out (assoc-ref outputs "out")))
@@ -177,10 +183,8 @@ management, extensions such as advertisement blocker and colorful tabs.")
                (setenv "CONFIG_SHELL" (which "bash"))
                (invoke "./configure"
                        (string-append "--prefix=" out)
-                       "--enable-graphics")
-               #t))))))
-    (native-inputs `(("linux-libre-headers" ,linux-libre-headers)
-                     ("pkg-config" ,pkg-config)))
+                       "--enable-graphics")))))))
+    (native-inputs (list pkg-config))
     (inputs `(("gpm" ,gpm)
               ("libevent" ,libevent)
               ("libjpeg" ,libjpeg-turbo)
@@ -222,10 +226,10 @@ features including, tables, builtin image display, bookmarks, SSL and more.")
        ("glib-networking" ,glib-networking)
        ("lua5.1-filesystem" ,lua5.1-filesystem)
        ("luajit" ,luajit)
-       ("webkitgtk" ,webkitgtk)
+       ("webkitgtk" ,webkitgtk-with-libsoup2)
        ("sqlite" ,sqlite)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (build-system glib-or-gtk-build-system)
     (arguments
      `(#:make-flags
@@ -284,16 +288,15 @@ and the GTK+ toolkit.")
                (base32
                 "06jhv8ibfw1xkf8d8zrnkc2aw4d462s77hlp6f6xa6k8awzxvmkg"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("perl" ,perl)))
-    (inputs `(("ncurses" ,ncurses)
-              ("libidn" ,libidn)
-              ("openssl" ,openssl)
-              ("libgcrypt" ,libgcrypt)
-              ("unzip" ,unzip)
-              ("zlib" ,zlib)
-              ("gzip" ,gzip)
-              ("bzip2" ,bzip2)))
+    (native-inputs (list pkg-config perl))
+    (inputs (list ncurses
+                  libidn
+                  openssl
+                  libgcrypt
+                  unzip
+                  zlib
+                  gzip
+                  bzip2))
     (arguments
      `(#:configure-flags
        (let ((openssl (assoc-ref %build-inputs "openssl")))
@@ -441,13 +444,13 @@ access.")
                 (base32
                  "1kvkxkisi3czldnb43ig60l55pi4a3m2a4ixp7krhpf9fc5wp294")))))))
       (inputs
-       `(("cmark" ,cmark)
-         ("font-google-noto" ,font-google-noto)
-         ("font-openmoji" ,font-openmoji)
-         ("openssl" ,openssl)
-         ("qtbase" ,qtbase-5)
-         ("qtmultimedia" ,qtmultimedia)
-         ("qtsvg" ,qtsvg)))
+       (list cmark
+             font-google-noto
+             font-openmoji
+             openssl
+             qtbase-5
+             qtmultimedia
+             qtsvg))
       (home-page "https://kristall.random-projects.net")
       (synopsis "Small-internet graphical client")
       (description "Graphical small-internet client with with many features
@@ -461,7 +464,7 @@ interface.")
 (define-public qutebrowser
   (package
     (name "qutebrowser")
-    (version "2.3.1")
+    (version "2.4.0")
     (source
      (origin
        (method url-fetch)
@@ -469,26 +472,26 @@ interface.")
                            "qutebrowser/releases/download/v" version "/"
                            "qutebrowser-" version ".tar.gz"))
        (sha256
-        (base32 "05n64mw9lzzxpxr7lhakbkm9ir3x8p0rwk6vbbg01aqg5iaanyj0"))))
+        (base32 "1v4jhlmgfm8v9sbf7i3xg1vjh6dy8y2gpckk0mizkazb2jxrmkgj"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-attrs" ,python-attrs))) ; for tests
+     (list python-attrs)) ; for tests
     (inputs
-     `(("python-colorama" ,python-colorama)
-       ("python-cssutils" ,python-cssutils)
-       ("python-importlib-resources" ,python-importlib-resources)
-       ("python-jinja2" ,python-jinja2)
-       ("python-markupsafe" ,python-markupsafe)
-       ("python-pygments" ,python-pygments)
-       ("python-pypeg2" ,python-pypeg2)
-       ("python-pyyaml" ,python-pyyaml)
-       ;; FIXME: python-pyqtwebengine needs to come before python-pyqt so
-       ;; that it's __init__.py is used first.
-       ("python-pyqtwebengine" ,python-pyqtwebengine)
-       ("python-pyqt" ,python-pyqt)
-       ;; While qtwebengine is provided by python-pyqtwebengine, it's
-       ;; included here so we can wrap QTWEBENGINEPROCESS_PATH.
-       ("qtwebengine" ,qtwebengine)))
+     (list bash-minimal
+           python-colorama
+           python-cssutils
+           python-jinja2
+           python-markupsafe
+           python-pygments
+           python-pypeg2
+           python-pyyaml
+           ;; FIXME: python-pyqtwebengine needs to come before python-pyqt so
+           ;; that it's __init__.py is used first.
+           python-pyqtwebengine
+           python-pyqt
+           ;; While qtwebengine is provided by python-pyqtwebengine, it's
+           ;; included here so we can wrap QTWEBENGINEPROCESS_PATH.
+           qtwebengine))
     (arguments
      `(;; FIXME: With the existance of qtwebengine, tests can now run.  But
        ;; they are still disabled because test phase hangs.  It's not readily
@@ -498,8 +501,7 @@ interface.")
        (modify-phases %standard-phases
          (add-before 'check 'set-env-offscreen
            (lambda _
-             (setenv "QT_QPA_PLATFORM" "offscreen")
-             #t))
+             (setenv "QT_QPA_PLATFORM" "offscreen")))
          (add-after 'install 'install-more
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -520,8 +522,7 @@ interface.")
                (substitute* "misc/org.qutebrowser.qutebrowser.desktop"
                  (("Exec=qutebrowser")
                   (string-append "Exec=" out "/bin/qutebrowser")))
-               (install-file "misc/org.qutebrowser.qutebrowser.desktop" app)
-               #t)))
+               (install-file "misc/org.qutebrowser.qutebrowser.desktop" app))))
          (add-after 'wrap 'wrap-qt-process-path
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -530,8 +531,7 @@ interface.")
                                       (assoc-ref inputs "qtwebengine")
                                       "/lib/qt5/libexec/QtWebEngineProcess")))
                (wrap-program bin
-                 `("QTWEBENGINEPROCESS_PATH" = (,qt-process-path)))
-               #t))))))
+                 `("QTWEBENGINEPROCESS_PATH" = (,qt-process-path)))))))))
     (home-page "https://qutebrowser.org/")
     (synopsis "Minimal, keyboard-focused, vim-like web browser")
     (description "qutebrowser is a keyboard-focused browser with a minimal
@@ -563,9 +563,9 @@ GUI.  It is based on PyQt5 and QtWebEngine.")
     (inputs
      `(("glib-networking" ,glib-networking)
        ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("webkitgtk" ,webkitgtk)))
+       ("webkitgtk" ,webkitgtk-with-libsoup2)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://fanglingsu.github.io/vimb/")
     (synopsis "Fast and lightweight Vim-like web browser")
     (description "Vimb is a fast and lightweight vim like web browser based on
@@ -577,7 +577,7 @@ driven and does not detract you from your daily work.")
 (define-public nyxt
   (package
     (name "nyxt")
-    (version "2.2.0")
+    (version "2.2.4")
     (source
      (origin
        (method git-fetch)
@@ -586,11 +586,11 @@ driven and does not detract you from your daily work.")
              (commit version)))
        (sha256
         (base32
-         "0l8x32fsvk2gbymcda1yc0ggnsymjazqd58vmi05ifiiv7jwxyjw"))
+         "12l7ir3q29v06jx0zng5cvlbmap7p709ka3ik6x29lw334qshm9b"))
        (file-name (git-file-name "nyxt" version))))
     (build-system gnu-build-system)
     (arguments
-     `(#:make-flags (list "nyxt" "NYXT_INTERNAL_QUICKLISP=false"
+     `(#:make-flags (list "nyxt" "NYXT_SUBMODULES=false"
                           (string-append "DESTDIR=" (assoc-ref %outputs "out"))
                           "PREFIX=")
        #:strip-binaries? #f             ; Stripping breaks SBCL binaries.
@@ -685,21 +685,15 @@ driven and does not detract you from your daily work.")
        ("gobject-introspection" ,gobject-introspection)))
     (synopsis "Extensible web-browser in Common Lisp")
     (home-page "https://nyxt.atlas.engineer")
-    (description "Nyxt is a keyboard-oriented, extensible web browser designed
-for power users.  Conceptually inspired by Emacs and Vim, it has familiar
-key-bindings (Emacs, vi, CUA), and is fully configurable in Common Lisp.")
+    (description "Nyxt is a keyboard-oriented, extensible web-browser designed
+for power users.  The application has familiar Emacs and VI key-bindings and
+is fully configurable and extensible in Common Lisp.")
     (license license:bsd-3)))
 
-(define-public next
-  (deprecated-package "next" nyxt))
-
-(define-public sbcl-next
-  (deprecated-package "sbcl-next" nyxt))
-
 (define-public lagrange
   (package
     (name "lagrange")
-    (version "1.5.2")
+    (version "1.10.2")
     (source
      (origin
        (method url-fetch)
@@ -707,20 +701,29 @@ key-bindings (Emacs, vi, CUA), and is fully configurable in Common Lisp.")
         (string-append "https://git.skyjake.fi/skyjake/lagrange/releases/"
                        "download/v" version "/lagrange-" version ".tar.gz"))
        (sha256
-        (base32 "0gqaipgs16kw711ijhshmbhhvlyjvh37wxdz059p4vvjhfrxbr1v"))))
+        (base32 "1zxvfl0fmkixralzj9jcshbbl2p3918js8qb4nra8pjkrrkaidbn"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           ;; TODO: unbundle fonts.
+           (delete-file-recursively "lib/fribidi")
+           (delete-file-recursively "lib/harfbuzz")))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #false                  ;no tests
        #:configure-flags (list "-DTFDN_ENABLE_SSE41=OFF")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config zip))
     (inputs
-     `(("libunistring" ,libunistring)
-       ("mpg123" ,mpg123)
-       ("openssl" ,openssl)
-       ("pcre" ,pcre)
-       ("sdl2" ,sdl2)
-       ("zlib" ,zlib)))
+     (list fribidi
+           harfbuzz
+           libunistring
+           libwebp
+           mpg123
+           openssl
+           pcre
+           sdl2
+           zlib))
     (home-page "https://gmi.skyjake.fi/lagrange/")
     (synopsis "Graphical Gemini client")
     (description
@@ -728,44 +731,44 @@ key-bindings (Emacs, vi, CUA), and is fully configurable in Common Lisp.")
 modern conveniences familiar from web browsers, such as smooth scrolling,
 inline image viewing, multiple tabs, visual themes, Unicode fonts, bookmarks,
 history, and page outlines.")
+    (properties
+     '((release-monitoring-url . "https://git.skyjake.fi/gemini/lagrange/releases")))
     (license license:bsd-2)))
 
 (define-public gmni
-  (let ((commit "d8f0870446c471a42612d6a8e853ad9b723a6d39")
-        (revision "0"))
-    (package
-      (name "gmni")
-      (version (git-version "0" revision commit))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://git.sr.ht/~sircmpwn/gmni")
-                      (commit commit)))
-                (sha256
-                 (base32
-                  "1h0iqm7l0i06glf5b2872w656s1mjdiqva14zh6sl4f5yp7zmvwr"))
-                (file-name (git-file-name name version))))
-      (build-system gnu-build-system)
-      (arguments
-       `(#:tests? #f ; no check target
-         #:make-flags (list (string-append "CC=" ,(cc-for-target)))))
-      (inputs
-       `(("openssl" ,openssl)))
-      (native-inputs
-       `(("pkg-config" ,pkg-config)
-         ("scdoc" ,scdoc)))
-      (home-page "https://sr.ht/~sircmpwn/gmni")
-      (synopsis "Minimalist command line Gemini client")
-      (description "The gmni package includes:
+  (package
+    (name "gmni")
+    (version "1.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://git.sr.ht/~sircmpwn/gmni")
+                    (commit version)))
+              (sha256
+               (base32
+                "0bky9fd8iyr13r6gj4aynb7j9nd36xdprbgq6nh5hz6jiw04vhfw"))
+              (file-name (git-file-name name version))))
+    (build-system gnu-build-system)
+    (arguments
+     (list
+      #:tests? #f                       ;no check target
+      #:make-flags #~(list #$(string-append "CC=" (cc-for-target)))))
+    (inputs
+     (list bearssl))
+    (native-inputs
+     (list pkg-config scdoc))
+    (home-page "https://sr.ht/~sircmpwn/gmni")
+    (synopsis "Minimalist command line Gemini client")
+    (description "The gmni package includes:
 
 @itemize
 @item A CLI utility (like curl): gmni
 @item A line-mode browser: gmnlm
 @end itemize")
-      (license (list license:gpl3+
-                     (license:non-copyleft
-                      "https://curl.se/docs/copyright.html"
-                      "Used only for files taken from curl."))))))
+    (license (list license:gpl3+
+                   (license:non-copyleft
+                    "https://curl.se/docs/copyright.html"
+                    "Used only for files taken from curl.")))))
 
 (define-public bombadillo
   (package
@@ -812,7 +815,7 @@ http, and https via third-party applications.")
 (define-public tinmop
   (package
     (name "tinmop")
-    (version "0.8.3")
+    (version "0.9.2")
     (source
      (origin
        (method git-fetch)
@@ -821,13 +824,17 @@ http, and https via third-party applications.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "117p1wxi5swmqw429qrswxz2zvp1dcaw2145gk6zxlgwln48qxl8"))))
+        (base32 "1cgx2g2kryfmcwqzzjzcpbdc6zzj10xc52gz0cj2dx5ylc0yg7k3"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("curl" ,curl)
+     `(("automake" ,automake)
+       ("autoreconf" ,autoconf)
        ("gettext" ,gnu-gettext)
-       ("gnupg" ,gnupg)
-       ("sbcl" ,sbcl)))
+       ("mandoc" , mandoc)
+       ("nano" ,nano)
+       ("openssl" ,openssl)
+       ("sbcl" ,sbcl)
+       ("xdg-utils" ,xdg-utils)))
     (inputs
      `(("access" ,sbcl-access)
        ("alexandria" ,sbcl-alexandria)
@@ -850,8 +857,6 @@ http, and https via third-party applications.")
        ("local-time" ,sbcl-local-time)
        ("log4cl" ,sbcl-log4cl)
        ("marshal" ,sbcl-marshal)
-       ("nano" ,nano)
-       ("openssl" ,openssl)
        ("osicat" ,sbcl-osicat)
        ("parse-number" ,sbcl-parse-number)
        ("percent-encoding" ,sbcl-percent-encoding)
@@ -859,8 +864,7 @@ http, and https via third-party applications.")
        ("sxql-composer" ,sbcl-sxql-composer)
        ("tooter" ,sbcl-tooter)
        ("unix-opts" ,sbcl-unix-opts)
-       ("usocket" ,sbcl-usocket)
-       ("xdg-utils" ,xdg-utils)))
+       ("usocket" ,sbcl-usocket)))
     (arguments
      `(#:tests? #f
        #:strip-binaries? #f
@@ -870,11 +874,24 @@ http, and https via third-party applications.")
            (lambda _
              (setenv "HOME" "/tmp")
              #t))
+         (add-after 'unpack 'fix-configure.ac
+           (lambda _
+              (delete-file "configure")
+              (substitute* "configure.ac"
+                (("AC_PATH_PROG.+CURL")
+                 "dnl")
+                (("AC_PATH_PROGS.+GIT")
+                 "dnl")
+                (("AC_PATH_PROG.+GPG")
+                 "dnl"))
+               #t))
          (add-after 'configure 'fix-asdf
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "Makefile.in"
                (("LISP_COMPILER) ")
-                "LISP_COMPILER) --eval \"(require 'asdf)\" --eval \"(push \\\"$$(pwd)/\\\" asdf:*central-registry*)\"  "))
+                (string-concatenate
+                 '("LISP_COMPILER) --eval \"(require 'asdf)\" "
+                   "--eval \"(push \\\"$$(pwd)/\\\" asdf:*central-registry*)\"  "))))
              #t)))))
     (synopsis "Gemini and pleroma client with a terminal interface")
     (description
@@ -886,29 +903,52 @@ interface.")
 (define-public telescope
   (package
     (name "telescope")
-    (version "0.5.2")
+    (version "0.7.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://github.com/omar-polo/telescope/releases/download/"
                            version "/telescope-" version ".tar.gz"))
        (sha256
-        (base32 "0phvwhxvm63y68cyvzw5dk60yjzfv6bpxf5c4bl08daj3ia48fbk"))))
+        (base32 "055iqld99l4jshs10mhl2ml0p74wcyyv5kxjy8izzysw9lnkjjb5"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f))                    ;no tests
     (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("pkg-config" ,pkg-config)))
+     (list gettext-minimal pkg-config))
     (inputs
-     `(("libevent"  ,libevent)
-       ("libressl"  ,libressl)
-       ("ncurses"   ,ncurses)))
+     (list libevent libressl ncurses))
     (home-page "https://git.omarpolo.com/telescope/about/")
     (synopsis "Gemini client with a terminal interface")
     (description "Telescope is a w3m-like browser for Gemini.")
     (license license:x11)))
 
+(define-public leo
+  ;; PyPi only provides a wheel.
+  (let ((commit "88cc10a87afe2ec86be06e6ea2bcd099f5360b74")
+        (version "1.0.4")
+        (revision "1"))
+    (package
+      (name "leo")
+      (version (git-version version revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/xyzshantaram/leo")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0jp4v4jw82qqynqqs7x35g5yvm1sd48cvbqh7j2r1ixw1z6ldhc4"))))
+      (build-system python-build-system)
+      (home-page "https://github.com/xyzshantaram/leo")
+      (synopsis "Gemini client written in Python")
+      (description
+       "@command{leo} is a gemini client written in Python with no external
+dependencies that fully implements the Gemini spec.  A list of URLs can be
+saved to a file for further viewing in another window.")
+      (license license:expat))))
+
 (define-public av-98
   (package
     (name "av-98")
diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm
index 4beeaf8d7d..03aff6e8f2 100644
--- a/gnu/packages/web.scm
+++ b/gnu/packages/web.scm
@@ -19,7 +19,7 @@
 ;;; Copyright © 2016–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2016 Bake Timmons <b3timmons@speedymail.org>
 ;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be>
-;;; Copyright © 2017, 2018, 2020, 2021 Marius Bakke <marius@gnu.org>
+;;; Copyright © 2017, 2018, 2020, 2021, 2022 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2017 Kei Kebreau <kkebreau@posteo.net>
 ;;; Copyright © 2017 Petter <petter@mykolab.ch>
 ;;; Copyright © 2017, 2021 Pierre Langlois <pierre.langlois@gmx.com>
@@ -40,17 +40,21 @@
 ;;; Copyright © 2019, 2020 Florian Pelz <pelzflorian@pelzflorian.de>
 ;;; Copyright © 2020 Timotej Lazar <timotej.lazar@araneo.si>
 ;;; Copyright © 2020 Pierre Neidhardt <mail@ambrevar.xyz>
-;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2020, 2021 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2018, 2019, 2020 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
 ;;; Copyright © 2020, 2021 Paul Garlick <pgarlick@tourbillion-technology.com>
 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
 ;;; Copyright © 2020, 2021 Ryan Prior <rprior@protonmail.com>
 ;;; Copyright © 2020 Alexandru-Sergiu Marton <brown121407@posteo.ro>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Stefan Reichör <stefan@xsteve.at>
 ;;; Copyright © 2021 la snesne <lasnesne@lagunposprasihopre.org>
 ;;; Copyright © 2021 Matthew James Kraai <kraai@ftbfs.org>
 ;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
 ;;; Copyright © 2021 Jack Hill <jackhill@jackhill.us>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2021 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
+;;; Copyright © 2021 Vinicius Monego <monego@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -240,8 +244,7 @@
                           "postcollector")))
              #t)))))
     (inputs
-     `(("http-parser" ,http-parser)
-       ("qtbase" ,qtbase-5)))
+     (list http-parser qtbase-5))
     (home-page "https://github.com/azadkuh/qhttp/")
     (synopsis "Qt-based HTTP Library")
     (description
@@ -252,20 +255,17 @@
 (define-public httpd
   (package
     (name "httpd")
-    (version "2.4.48")
+    (version "2.4.52")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://apache/httpd/httpd-"
                                  version ".tar.bz2"))
              (sha256
               (base32
-               "0v4npxnvih5mlxx6dywwhhfs8xvgcckc0hxzwk3hi0g8nbkjdj0v"))))
+               "1jgmfbazc2n9dnl7axhahwppyq25bvbvwx0lqplq76by97fgf9q1"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pcre" ,pcre "bin")))       ;for 'pcre-config'
-    (inputs `(("apr" ,apr)
-              ("apr-util" ,apr-util)
-              ("openssl" ,openssl)
-              ("perl" ,perl))) ; needed to run bin/apxs
+    (native-inputs (list `(,pcre "bin")))       ;for 'pcre-config'
+    (inputs (list apr apr-util openssl perl)) ; needed to run bin/apxs
     (arguments
      `(#:test-target "test"
        #:configure-flags (list "--enable-rewrite"
@@ -348,9 +348,9 @@ Interface} specification.")
        #:cargo-development-inputs
        (("rust-assert-cmd" ,rust-assert-cmd-1))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (home-page "https://github.com/Y2Z/monolith")
     (synopsis "Command line tool for saving web pages as a single HTML file")
     (description
@@ -368,24 +368,20 @@ the same, being completely separated from the Internet.")
 (define-public nginx
   (package
     (name "nginx")
+    ;; Please update the nginx-documentation package together with this one!
     ;; Track the ‘mainline’ branch.  Upstream considers it more reliable than
     ;; ’stable’ and recommends that “in general you deploy the NGINX mainline
     ;; branch at all times” (https://www.nginx.com/blog/nginx-1-6-1-7-released/)
-    ;; Please update the nginx-documentation package together with this one!
-    (version "1.21.2")
+    (version "1.21.5")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://nginx.org/download/nginx-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "11ail85iw6mg8fxd2qnxhcghi0frjk5r70cfar83dms61rb1qxri"))))
+                "1fygvl19cch100d15k74666jcbc7xpz7v5m7ygqac6556gskn3xj"))))
     (build-system gnu-build-system)
-    (inputs `(("libxml2" ,libxml2)
-              ("libxslt" ,libxslt)
-              ("openssl" ,openssl)
-              ("pcre" ,pcre)
-              ("zlib" ,zlib)))
+    (inputs (list libxml2 libxslt openssl pcre zlib))
     (arguments
      `(#:tests? #f                      ; no test target
        #:phases
@@ -474,9 +470,9 @@ and as a proxy to reduce the load on back-end HTTP or mail servers.")
 
 (define-public nginx-documentation
   ;; This documentation should be relevant for the current nginx package.
-  (let ((version "1.21.2")
-        (revision 2764)
-        (changeset "bc9c5d11b67c"))
+  (let ((version "1.21.5")
+        (revision 2816)
+        (changeset "ae1d713a06e2"))
     (package
       (name "nginx-documentation")
       (version (simple-format #f "~A-~A-~A" version revision changeset))
@@ -488,7 +484,7 @@ and as a proxy to reduce the load on back-end HTTP or mail servers.")
                (file-name (string-append name "-" version))
                (sha256
                 (base32
-                 "05n72q9vqxx37dyw3yl7jssmpqkw3rwxa2y3m6s0c0ih0z2bx58n"))))
+                 "03j85wj6qb32q5xhq9nvcjzarq98802gaq6n3f7k85aqj731bml0"))))
       (build-system gnu-build-system)
       (arguments
        '(#:tests? #f                    ; no test suite
@@ -516,9 +512,7 @@ and as a proxy to reduce the load on back-end HTTP or mail servers.")
                  (copy-recursively "libxslt" output)
                  #t))))))
       (native-inputs
-       `(("libxml2" ,libxml2)
-         ("libxslt" ,libxslt)
-         ("nginx-xslscript" ,nginx-xslscript)))
+       (list libxml2 libxslt nginx-xslscript))
       (home-page "https://nginx.org")
       (synopsis "Documentation for the nginx web server")
       (description
@@ -807,7 +801,7 @@ programming language.")))
                  ;; The nginx source code is part of the module’s source.
                  (format #t "decompressing nginx source code~%")
                  (invoke "tar" "xvf" (assoc-ref inputs "nginx-sources")
-                         ;; This packages's LICENSE file would be
+                         ;; This package's LICENSE file would be
                          ;; overwritten with the one from nginx when
                          ;; unpacking the nginx source, so rename the nginx
                          ;; one when unpacking.
@@ -881,9 +875,8 @@ stream.  Remote control of the module is possible over HTTP.")
        ("pcre:bin" ,pcre "bin")
        ("zlib" ,zlib)))
     (native-inputs
-     `(("perl" ,perl) ; for tests
-       ("pkg-config" ,pkg-config)
-       ("which" ,which)))
+     (list perl ; for tests
+           pkg-config which))
     (home-page "https://www.lighttpd.net/")
     (synopsis "Lightweight HTTP and reverse proxy server")
     (description
@@ -911,9 +904,7 @@ CGI, authentication, output compression, URL rewriting and many more.")
     ;; Parallel building is not supported.
     (arguments `(#:parallel-build? #f))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     ;; This is an archived fork of the original home page, www.fastcgi.com.
     (home-page "https://fastcgi-archives.github.io/")
     (synopsis "Language-independent, high-performant extension to CGI")
@@ -950,11 +941,9 @@ APIs.")
                ((" -Werror") ""))
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config))
     (inputs
-     `(("fcgi" ,fcgi)))
+     (list fcgi))
     (home-page "https://nginx.localdomain.pl/wiki/FcgiWrap")
     (synopsis "Simple server for running CGI applications over FastCGI")
     (description "Fcgiwrap is a simple server for running CGI applications
@@ -975,17 +964,15 @@ servers that may need it).")
         (base32 "1y1kn4929k299fbf6sw9lxcsdlq9fvq777p6yrzk591rr9xhkx8h"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-libwww" ,perl-libwww)
-       ("perl-module-build-tiny" ,perl-module-build-tiny)
-       ("perl-test-requires" ,perl-test-requires)))
+     (list perl-libwww perl-module-build-tiny perl-test-requires))
     (propagated-inputs
-     `(("perl-data-dump" ,perl-data-dump)
-       ("perl-http-date" ,perl-http-date)
-       ("perl-http-message" ,perl-http-message)
-       ("perl-http-parser-xs" ,perl-http-parser-xs)
-       ("perl-net-server" ,perl-net-server)
-       ("perl-plack" ,perl-plack)
-       ("perl-test-tcp" ,perl-test-tcp)))
+     (list perl-data-dump
+           perl-http-date
+           perl-http-message
+           perl-http-parser-xs
+           perl-net-server
+           perl-plack
+           perl-test-tcp))
     (home-page "https://metacpan.org/release/Starman")
     (synopsis "PSGI/Plack web server")
     (description "Starman is a PSGI perl web server that has unique features
@@ -1009,13 +996,12 @@ and UNIX socket support.")
     (arguments
      `(#:configure-flags
        (list  "--disable-plugin"         ;NPAPI plugins are obsolete nowadays.
-             (string-append "BIN_BASH=" (assoc-ref %build-inputs "bash")
-                            "/bin/bash")
+              (string-append "BIN_BASH="
+                             (search-input-file %build-inputs "/bin/bash"))
              (string-append "--with-jdk-home=" (assoc-ref %build-inputs "jdk")))))
     (outputs '("out" "doc"))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("zip" ,zip)))
+     (list pkg-config zip))
     (inputs
      `(("gtk+" ,gtk+)
        ("jdk" ,icedtea "jdk")))
@@ -1032,7 +1018,7 @@ libraries for working with JNLP applets.")
 (define-public jansson
   (package
     (name "jansson")
-    (version "2.12")
+    (version "2.13.1")
     (source (origin
              (method url-fetch)
              (uri
@@ -1040,7 +1026,7 @@ libraries for working with JNLP applets.")
                              version ".tar.bz2"))
              (sha256
               (base32
-               "1lp1mv8pjp5yziws66cy0dhpcam4bbjqhffk13v4vgdybp674pb4"))))
+               "1g8h18vh8gyxlwfmvdivdp1siad26ywj5zr4j4avgdyjg7wa147f"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags '("--disable-static")))
@@ -1185,7 +1171,7 @@ project)
          (add-before 'check 'render-offscreen
            (lambda _ (setenv "QT_QPA_PLATFORM" "offscreen") #t)))))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (home-page "http://qjson.sourceforge.net")
     (synopsis "Library that maps JSON data to QVariant objects")
     (description "QJson is a Qt-based library that maps JSON data to
@@ -1209,8 +1195,7 @@ instances, while JSON's objects will be mapped to @code{QVariantMap}.")
                 "1b2jdqs526ac635yb2whm049spcsk7almnnr6r5b4yqhq922anw3"))))
     (build-system gnu-build-system)
     (inputs
-     `(("qca" ,qca)
-       ("qtbase" ,qtbase-5)))
+     (list qca qtbase-5))
     (arguments
      '(#:tests? #f                      ;FIXME: some tests are failing
        #:phases
@@ -1348,9 +1333,7 @@ efficiently.  It gives the application developer no more than 4 methods.")
                (invoke (string-append (assoc-ref outputs "out") "/bin/ktImportText")
                        "ec.tsv")))))))
    (inputs
-    `(("curl" ,curl)
-      ("make" ,gnu-make)
-      ("perl" ,perl)))
+    (list curl gnu-make perl))
    (home-page "https://github.com/marbl/Krona/wiki")
    (synopsis "Hierarchical data exploration with zoomable HTML5 pie charts")
    (description
@@ -1450,9 +1433,8 @@ parser written in ANSI C and a small validating JSON generator.")
      ;; doesn't use 'add_test', and it's unclear how to run the test suite.
      '(#:tests? #f))
 
-    (native-inputs `(("perl" ,perl)))             ; to build the HTML doc
-    (inputs `(("zlib" ,zlib)
-              ("openssl" ,openssl)))
+    (native-inputs (list perl))             ; to build the HTML doc
+    (inputs (list zlib openssl))
     (synopsis "WebSockets library written in C")
     (description
      "Libwebsockets is a library that allows C programs to establish client
@@ -1522,8 +1504,7 @@ other systems that want to manipulate WebAssembly files.")
         (base32 "1ww4fhl8qf12hkv6jaild8zzsygdspxm1gqpk2f63gv1xfi31wpm"))
        (patches (search-patches "websocketpp-fix-for-cmake-3.15.patch"))))
     (build-system cmake-build-system)
-    (inputs `(("boost" ,boost)
-              ("openssl" ,openssl)))
+    (inputs (list boost openssl))
     (arguments '(#:configure-flags '("-DBUILD_TESTS=ON")
                  #:phases
                  (modify-phases %standard-phases
@@ -1557,14 +1538,22 @@ high performance.")
     (build-system gnu-build-system)
     (arguments
      ;; Parallel builds don't reliably succeed.
-     `(#:parallel-build? #f))
+     `(#:parallel-build? #f
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-sphinx-error
+           ;; XXX: Remove in next version: fix applied upstream.  See
+           ;; <https://github.com/tatsuhiro-t/wslay/commit/43fda1207ea5977043630500e0c8e77b98b35320>.
+           (lambda _
+             (substitute* "doc/sphinx/conf.py.in"
+               (("add_stylesheet") "add_css_file")))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("cunit" ,cunit)                 ; for tests
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)
-       ("python-sphinx" ,python-sphinx)))
+     (list autoconf
+           automake
+           cunit ; for tests
+           libtool
+           pkg-config
+           python-sphinx))
     (home-page "https://tatsuhiro-t.github.io/wslay/")
     (synopsis "C WebSocket library")
     (description "@code{Wslay} is an event-based C library for the WebSocket
@@ -1593,8 +1582,7 @@ perform the opening handshake in HTTP.")
        ;; For tests.
        ("python" ,python-wrapper)))
     (inputs
-     `(("libidn2" ,libidn2)
-       ("libunistring" ,libunistring)))
+     (list libidn2 libunistring))
     (home-page "https://github.com/rockdaboot/libpsl")
     (synopsis "C library for the Publix Suffix List")
     (description
@@ -1641,9 +1629,7 @@ UTS#46.")
                       (setenv "AUTOMAKE" "automake --foreign")
                       (invoke "autoreconf" "-vfi"))))))
     (native-inputs
-     `(("automake" ,automake)
-       ("autoconf" ,autoconf)
-       ("libtool" ,libtool)))
+     (list automake autoconf libtool))
     (synopsis "HTML validator and tidier")
     (description "HTML Tidy is a command-line tool and C library that can be
 used to validate and fix HTML data.")
@@ -1725,7 +1711,7 @@ and other data, for distribution on the web.")
              ;; (setenv "XML_DEBUG_CATALOG" "1")
              #t)))))
     (native-inputs
-     `(("perl" ,perl)))                 ; for tests
+     (list perl))                 ; for tests
     (home-page "https://tinyproxy.github.io/")
     (synopsis "Light-weight HTTP/HTTPS proxy daemon")
     (description "Tinyproxy is a light-weight HTTP/HTTPS proxy
@@ -1748,7 +1734,7 @@ unavailable.")
        (sha256
         (base32
          "05g09sg9qkkhnc2mxldm1w1xkxzs2ylybkjzs28w8ydbjc3pand2"))))
-    (native-inputs `(("texinfo" ,texinfo)))
+    (native-inputs (list texinfo))
     (build-system gnu-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
@@ -1786,10 +1772,9 @@ of people.")
      `(#:tests? #f)) ; FIXME: 2 out of 6 tests fail with "ImportError: No module
      ; named 'stubout'". The tests can be run by replacing the check phase with
      ; the command "python setup.py nosetests --verbosity=3".
-    (native-inputs `(; Required for tests:
-                     ("python-mox3" ,python-mox3)
-                     ("python-nose" ,python-nose)))
-    (propagated-inputs `(("python-numpy" ,python-numpy)))
+    (native-inputs (list ; Required for tests:
+                         python-mox3 python-nose))
+    (propagated-inputs (list python-numpy))
     (home-page "https://github.com/novnc/websockify")
     (synopsis "WebSockets support for any application/server")
     (description "Websockify translates WebSockets traffic to normal socket
@@ -1814,7 +1799,7 @@ directions.")
     (arguments
      `(#:configure-flags '("--with-gnutls")
        #:tests? #f))                         ; no test target
-    (native-inputs `(("flex" ,flex)))
+    (native-inputs (list flex))
     (inputs `(("gnutls" ,gnutls)
               ("libcrypt" ,libgcrypt)))
     (home-page "https://www.gedanken.org.uk/software/wwwoffle/")
@@ -1839,10 +1824,9 @@ changes, and much more.")
                 "07w1aq8y8wld43wmbk2q8134p3bfkp2vma78mmsfgw2jn1bh3xhd"))))
     (build-system gnu-build-system)
     (arguments '(#:configure-flags '("--enable-nss")))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (propagated-inputs
-     `(("curl" ,curl)
-       ("nss" ,nss)))
+     (list curl nss))
     (home-page "https://sourceforge.net/projects/liboauth")
     (synopsis "C library implementing the OAuth API")
     (description
@@ -1886,14 +1870,14 @@ parse media stream properties.")
        (sha256
         (base32 "00x9gbmzc5cns0gnfag0hsphcr3cb33vbbb9s7ppvvd6bxz2z1mm"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (inputs
-     `(("curl" ,curl)
-       ("cyrus-sasl" ,cyrus-sasl)
-       ("libquvi-scripts" ,libquvi-scripts)
-       ("lua" ,lua-5.1)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list curl
+           cyrus-sasl
+           libquvi-scripts
+           lua-5.1
+           openssl
+           zlib))
     (arguments
      ;; Lua provides no .pc file, so add CFLAGS/LIBS manually.
      '(#:configure-flags
@@ -1920,10 +1904,9 @@ URLs and extracting their actual media files.")
        (sha256
         (base32 "09lhl6dv5zpryasx7yjslfrcdcqlsbwapvd5lg7w6sm5x5n3k8ci"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (inputs
-     `(("curl" ,curl)
-       ("libquvi" ,libquvi)))
+     (list curl libquvi))
     (home-page "http://quvi.sourceforge.net/")
     (synopsis "Media stream URL parser")
     (description "quvi is a command-line-tool suite to extract media files
@@ -1944,13 +1927,11 @@ from streaming URLs.  It is a command-line wrapper for the libquvi library.")
         (base32 "1k47gbgpp52049andr28y28nbwh9m36bbb0g8p0aka3pqlhjv72l"))))
     (build-system scons-build-system)
     (propagated-inputs
-     `(("apr" ,apr)
-       ("apr-util" ,apr-util)
-       ("openssl" ,openssl)))
+     (list apr apr-util openssl))
     (inputs
-     `(;; TODO: Fix build with gss.
-       ;;("gss" ,gss)
-       ("zlib" ,zlib)))
+     (list ;; TODO: Fix build with gss.
+           ;;("gss" ,gss)
+           zlib))
     (arguments
      `(#:scons-flags (list (string-append "APR=" (assoc-ref %build-inputs "apr"))
                            (string-append "APU=" (assoc-ref %build-inputs "apr-util"))
@@ -2031,9 +2012,7 @@ minimum to provide high performance operation.")
              (setenv "LIBSASS_VERSION" ,version)
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (home-page "https://sass-lang.com/libsass")
     (synopsis "SASS Compiler, implemented as a C/C++ library")
     (description
@@ -2084,7 +2063,7 @@ stylesheets, you'll need to use another program that uses this library,
              (setenv "SASSC_VERSION" ,version)
              #t)))))
     (inputs
-     `(("libsass" ,libsass)))
+     (list libsass))
     (synopsis "CSS pre-processor")
     (description "SassC is a compiler written in C for the CSS pre-processor
 language known as SASS.")
@@ -2098,21 +2077,16 @@ language known as SASS.")
     (inherit sassc)
     (name "sassc")
     (inputs
-     `(("libsass" ,
-        (package
-          (inherit libsass)
-          (name "libsass")
-          (version "3.5.5")
-          (source
-           (origin
-             (method git-fetch)
-             (uri (git-reference
-                   (url "https://github.com/sass/libsass")
-                   (commit version)))
-             (file-name (git-file-name name version))
-             (sha256
-              (base32
-               "0830pjcvhzxh6yixj82x5k5r1xnadjqzi16kp53213icbly0r9ma"))))))))
+     (list (package (inherit libsass)
+                    (name "libsass")
+                    (version "3.5.5")
+                    (source (origin (method git-fetch)
+                                    (uri (git-reference (url
+                                                             "https://github.com/sass/libsass")
+                                                        (commit version)))
+                                    (file-name (git-file-name name version))
+                                    (sha256 (base32
+                                                    "0830pjcvhzxh6yixj82x5k5r1xnadjqzi16kp53213icbly0r9ma")))))))
     (properties '((hidden? . #t)))))
 
 
@@ -2129,13 +2103,10 @@ language known as SASS.")
         (base32 "05xcl7j65vakx7x79jqjikyw0nzf60bc2w6hhc0q5sklxq1ral4l"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-http-message" ,perl-http-message)
-       ("perl-module-build-tiny" ,perl-module-build-tiny)
-       ("perl-test-mocktime" ,perl-test-mocktime)
-       ("perl-try-tiny" ,perl-try-tiny)
-       ("perl-uri" ,perl-uri)))
+     (list perl-http-message perl-module-build-tiny perl-test-mocktime
+           perl-try-tiny perl-uri))
     (propagated-inputs
-     `(("perl-posix-strftime-compiler" ,perl-posix-strftime-compiler)))
+     (list perl-posix-strftime-compiler))
     (arguments `(#:tests? #f))          ; TODO: Timezone test failures
     (home-page "https://metacpan.org/release/Apache-LogFormat-Compiler")
     (synopsis "Compile a log format string to perl-code")
@@ -2164,8 +2135,7 @@ to perl-code, for faster generation of access_log lines.")
            ;; versions of perl-authen-sasl.
            (lambda _ (setenv "PERL_USE_UNSAFE_INC" "1") #t)))))
     (propagated-inputs
-     `(("perl-digest-hmac" ,perl-digest-hmac)
-       ("perl-gssapi" ,perl-gssapi)))
+     (list perl-digest-hmac perl-gssapi))
     (home-page "https://metacpan.org/release/Authen-SASL")
     (synopsis "SASL authentication framework")
     (description "Authen::SASL provides an SASL authentication framework.")
@@ -2186,12 +2156,9 @@ to perl-code, for faster generation of access_log lines.")
          "0j1rrld13cjk7ks92b5hv3xw4rfm2lvmksb4rlzd8mx0a0wj0rc5"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-http-request-ascgi" ,perl-http-request-ascgi)
-       ("perl-module-install" ,perl-module-install)))
+     (list perl-http-request-ascgi perl-module-install))
     (propagated-inputs
-     `(("perl-catalyst-runtime" ,perl-catalyst-runtime)
-       ("perl-data-visitor" ,perl-data-visitor)
-       ("perl-mro-compat" ,perl-mro-compat)))
+     (list perl-catalyst-runtime perl-data-visitor perl-mro-compat))
     (home-page "https://metacpan.org/release/Catalyst-Action-RenderView")
     (synopsis "Sensible default Catalyst action")
     (description "This Catalyst action implements a sensible default end
@@ -2211,20 +2178,19 @@ action, which will forward to the first available view.")
                 "086bykggzalbjfk0islac4b48g9s2ypj7y81d6ns1lq0aax1py6c"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-requires" ,perl-test-requires)
-       ("perl-module-install" ,perl-module-install)))
+     (list perl-test-requires perl-module-install))
     (propagated-inputs
-     `(("perl-catalyst-runtime" ,perl-catalyst-runtime)
-       ("perl-class-inspector" ,perl-class-inspector)
-       ("perl-config-general" ,perl-config-general)
-       ("perl-cpanel-json-xs" ,perl-cpanel-json-xs)
-       ("perl-libwww" ,perl-libwww)
-       ("perl-moose" ,perl-moose)
-       ("perl-mro-compat" ,perl-mro-compat)
-       ("perl-namespace-autoclean" ,perl-namespace-autoclean)
-       ("perl-params-validate" ,perl-params-validate)
-       ("perl-uri-find" ,perl-uri-find)
-       ("perl-xml-simple" ,perl-xml-simple)))
+     (list perl-catalyst-runtime
+           perl-class-inspector
+           perl-config-general
+           perl-cpanel-json-xs
+           perl-libwww
+           perl-moose
+           perl-mro-compat
+           perl-namespace-autoclean
+           perl-params-validate
+           perl-uri-find
+           perl-xml-simple))
     (home-page "https://metacpan.org/release/Catalyst-Action-REST")
     (synopsis "Automated REST Method Dispatching")
     (description "This Action handles doing automatic method dispatching for
@@ -2249,19 +2215,12 @@ regular method.")
          "0i5ja7690fs9nhxcij6lw51j804sm8s06m5mvk1n8pi8jljrymvw"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-catalyst-plugin-authorization-roles"
-        ,perl-catalyst-plugin-authorization-roles)
-       ("perl-catalyst-plugin-session-state-cookie"
-        ,perl-catalyst-plugin-session-state-cookie)
-       ("perl-dbd-sqlite" ,perl-dbd-sqlite)
-       ("perl-module-install" ,perl-module-install)
-       ("perl-test-www-mechanize-catalyst" ,perl-test-www-mechanize-catalyst)))
+     (list perl-catalyst-plugin-authorization-roles
+           perl-catalyst-plugin-session-state-cookie perl-dbd-sqlite
+           perl-module-install perl-test-www-mechanize-catalyst))
     (propagated-inputs
-     `(("perl-catalyst-runtime" ,perl-catalyst-runtime)
-       ("perl-catalyst-plugin-authentication"
-        ,perl-catalyst-plugin-authentication)
-       ("perl-dbix-class" ,perl-dbix-class)
-       ("perl-catalyst-model-dbic-schema" ,perl-catalyst-model-dbic-schema)))
+     (list perl-catalyst-runtime perl-catalyst-plugin-authentication
+           perl-dbix-class perl-catalyst-model-dbic-schema))
     (home-page
      "https://metacpan.org/release/Catalyst-Authentication-Store-DBIx-Class")
     (synopsis "Storage class for Catalyst authentication using DBIx::Class")
@@ -2285,10 +2244,9 @@ DBIx::Class.")
          "0wfj4vnn2cvk6jh62amwlg050p37fcwdgrn9amcz24z6w4qgjqvz"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)))
+     (list perl-module-install))
     (propagated-inputs
-     `(("perl-catalyst-runtime" ,perl-catalyst-runtime)
-       ("perl-moose" ,perl-moose)))
+     (list perl-catalyst-runtime perl-moose))
     (home-page
      "https://metacpan.org/release/Catalyst-Component-InstancePerContext")
     (synopsis "Create only one instance of Moose component per context")
@@ -2309,24 +2267,23 @@ instance of a component on each request.")
         (base32 "1r8arq7sw37d0mjyfzkc3pg1a9plgydqbscryc8qpvba4swpljls"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-fatal" ,perl-test-fatal)))
+     (list perl-test-fatal))
     (propagated-inputs
-     `(("perl-catalyst-action-renderview" ,perl-catalyst-action-renderview)
-       ("perl-catalyst-plugin-configloader" ,perl-catalyst-plugin-configloader)
-       ("perl-catalyst-plugin-static-simple" ,perl-catalyst-plugin-static-simple)
-       ("perl-catalyst-runtime" ,perl-catalyst-runtime)
-       ("perl-config-general" ,perl-config-general)
-       ("perl-file-changenotify" ,perl-file-changenotify)
-       ("perl-file-copy-recursive" ,perl-file-copy-recursive)
-       ("perl-file-sharedir" ,perl-file-sharedir)
-       ("perl-module-install" ,perl-module-install)
-       ("perl-moose" ,perl-moose)
-       ("perl-moosex-emulate-class-accessor-fast"
-        ,perl-moosex-emulate-class-accessor-fast)
-       ("perl-namespace-autoclean" ,perl-namespace-autoclean)
-       ("perl-namespace-clean" ,perl-namespace-clean)
-       ("perl-path-class" ,perl-path-class)
-       ("perl-template-toolkit" ,perl-template-toolkit)))
+     (list perl-catalyst-action-renderview
+           perl-catalyst-plugin-configloader
+           perl-catalyst-plugin-static-simple
+           perl-catalyst-runtime
+           perl-config-general
+           perl-file-changenotify
+           perl-file-copy-recursive
+           perl-file-sharedir
+           perl-module-install
+           perl-moose
+           perl-moosex-emulate-class-accessor-fast
+           perl-namespace-autoclean
+           perl-namespace-clean
+           perl-path-class
+           perl-template-toolkit))
     (home-page "https://metacpan.org/release/Catalyst-Devel")
     (synopsis "Catalyst Development Tools")
     (description "The Catalyst-Devel distribution includes a variety of
@@ -2351,12 +2308,10 @@ modules.")
          "06jq1lmpq88rmp9zik5gqczg234xac0hiyc3l698iif7zsgcyb80"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build) ;needs Module::Build >= 0.4004
-       ("perl-namespace-autoclean" ,perl-namespace-autoclean)
-       ("perl-catalyst-runtime" ,perl-catalyst-runtime)))
+     (list perl-module-build ;needs Module::Build >= 0.4004
+           perl-namespace-autoclean perl-catalyst-runtime))
     (propagated-inputs
-     `(("perl-moose" ,perl-moose)
-       ("perl-text-simpletable" ,perl-text-simpletable)))
+     (list perl-moose perl-text-simpletable))
     (home-page "https://metacpan.org/release/Catalyst-DispatchType-Regex")
     (synopsis "Regex DispatchType for Catalyst")
     (description "Dispatch type managing path-matching behaviour using
@@ -2382,31 +2337,28 @@ when the dispatch type is first seen in your application.")
           "1spfjcjc0b9dv3k2gbanqj1m1cqzyxb32p76dhdwizzpbvpi3a96"))))
   (build-system perl-build-system)
   (native-inputs
-   `(("perl-dbd-sqlite" ,perl-dbd-sqlite)
-     ("perl-module-install" ,perl-module-install)
-     ("perl-test-exception" ,perl-test-exception)
-     ("perl-test-requires" ,perl-test-requires)))
+   (list perl-dbd-sqlite perl-module-install perl-test-exception
+         perl-test-requires))
   (propagated-inputs
-   `(("perl-carp-clan" ,perl-carp-clan)
-     ("perl-catalyst-component-instancepercontext"
-      ,perl-catalyst-component-instancepercontext)
-     ("perl-catalyst-runtime" ,perl-catalyst-runtime)
-     ("perl-catalystx-component-traits" ,perl-catalystx-component-traits)
-     ("perl-dbix-class" ,perl-dbix-class)
-     ("perl-dbix-class-cursor-cached" ,perl-dbix-class-cursor-cached)
-     ("perl-dbix-class-schema-loader" ,perl-dbix-class-schema-loader)
-     ("perl-hash-merge" ,perl-hash-merge)
-     ("perl-list-moreutils" ,perl-list-moreutils)
-     ("perl-module-runtime" ,perl-module-runtime)
-     ("perl-moose" ,perl-moose)
-     ("perl-moosex-markasmethods" ,perl-moosex-markasmethods)
-     ("perl-moosex-nonmoose" ,perl-moosex-nonmoose)
-     ("perl-moosex-types" ,perl-moosex-types)
-     ("perl-moosex-types-loadableclass" ,perl-moosex-types-loadableclass)
-     ("perl-namespace-autoclean" ,perl-namespace-autoclean)
-     ("perl-namespace-clean" ,perl-namespace-clean)
-     ("perl-tie-ixhash" ,perl-tie-ixhash)
-     ("perl-try-tiny" ,perl-try-tiny)))
+   (list perl-carp-clan
+         perl-catalyst-component-instancepercontext
+         perl-catalyst-runtime
+         perl-catalystx-component-traits
+         perl-dbix-class
+         perl-dbix-class-cursor-cached
+         perl-dbix-class-schema-loader
+         perl-hash-merge
+         perl-list-moreutils
+         perl-module-runtime
+         perl-moose
+         perl-moosex-markasmethods
+         perl-moosex-nonmoose
+         perl-moosex-types
+         perl-moosex-types-loadableclass
+         perl-namespace-autoclean
+         perl-namespace-clean
+         perl-tie-ixhash
+         perl-try-tiny))
   (home-page "https://metacpan.org/release/Catalyst-Model-DBIC-Schema")
   (synopsis "DBIx::Class::Schema Model Class")
   (description "This is a Catalyst Model for DBIx::Class::Schema-based
@@ -2427,10 +2379,8 @@ Models.")
          "0811rj45q4v2y8wka3wb9d5m4vbyhcmkvddf2wz4x69awzjbhgc7"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-catalyst-runtime" ,perl-catalyst-runtime)
-       ("perl-datetime" ,perl-datetime)
-       ("perl-moose" ,perl-moose)
-       ("perl-namespace-autoclean" ,perl-namespace-autoclean)))
+     (list perl-catalyst-runtime perl-datetime perl-moose
+           perl-namespace-autoclean))
     (home-page "https://metacpan.org/release/Catalyst-Plugin-AccessLog")
     (synopsis "Request logging from within Catalyst")
     (description "This Catalyst plugin enables you to create \"access logs\"
@@ -2453,19 +2403,18 @@ for you.  It will work even with Catalyst debug logging turned off.")
          "0v6hb4r1wv3djrnqvnjcn3xx1scgqzx8nyjdg9lfc1ybvamrl0rn"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)))
+     (list perl-module-install))
     (propagated-inputs
-     `(("perl-catalyst-plugin-session" ,perl-catalyst-plugin-session)
-       ("perl-catalyst-runtime" ,perl-catalyst-runtime)
-       ("perl-class-inspector" ,perl-class-inspector)
-       ("perl-moose" ,perl-moose)
-       ("perl-moosex-emulate-class-accessor-fast"
-        ,perl-moosex-emulate-class-accessor-fast)
-       ("perl-mro-compat" ,perl-mro-compat)
-       ("perl-namespace-autoclean" ,perl-namespace-autoclean)
-       ("perl-string-rewriteprefix" ,perl-string-rewriteprefix)
-       ("perl-test-exception" ,perl-test-exception)
-       ("perl-try-tiny" ,perl-try-tiny)))
+     (list perl-catalyst-plugin-session
+           perl-catalyst-runtime
+           perl-class-inspector
+           perl-moose
+           perl-moosex-emulate-class-accessor-fast
+           perl-mro-compat
+           perl-namespace-autoclean
+           perl-string-rewriteprefix
+           perl-test-exception
+           perl-try-tiny))
     (home-page "https://metacpan.org/release/Catalyst-Plugin-Authentication")
     (synopsis "Infrastructure plugin for the Catalyst authentication framework")
     (description "The authentication plugin provides generic user support for
@@ -2489,14 +2438,10 @@ system authorises them to do).")
          "0l83lkwmq0lngwh8b1rv3r719pn8w1gdbyhjqm74rnd0wbjl8h7f"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)
-       ("perl-test-exception" ,perl-test-exception)))
+     (list perl-module-install perl-test-exception))
     (propagated-inputs
-     `(("perl-catalyst-plugin-authentication"
-        ,perl-catalyst-plugin-authentication)
-       ("perl-catalyst-runtime" ,perl-catalyst-runtime)
-       ("perl-set-object" ,perl-set-object)
-       ("perl-universal-isa" ,perl-universal-isa)))
+     (list perl-catalyst-plugin-authentication perl-catalyst-runtime
+           perl-set-object perl-universal-isa))
     (home-page
      "https://metacpan.org/release/Catalyst-Plugin-Authorization-Roles")
     (synopsis "Role-based authorization for Catalyst")
@@ -2518,10 +2463,8 @@ authorization for Catalyst based on Catalyst::Plugin::Authentication.")
          "0llyj3v5nx9cx46jdbbvxf1lc9s9cxq5ml22xmx3wkb201r5qgaa"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-catalyst-plugin-session" ,perl-catalyst-plugin-session)
-       ("perl-catalyst-runtime" ,perl-catalyst-runtime)
-       ("perl-gd-securityimage" ,perl-gd-securityimage)
-       ("perl-http-date" ,perl-http-date)))
+     (list perl-catalyst-plugin-session perl-catalyst-runtime
+           perl-gd-securityimage perl-http-date))
     (home-page "https://metacpan.org/release/Catalyst-Plugin-Captcha")
     (synopsis "Captchas for Catalyst")
     (description "This plugin creates and validates Captcha images for
@@ -2542,13 +2485,10 @@ Catalyst.")
         (base32 "0w8r3bbxqnlykvra6sx3sh3wh8ylkj914xg5ql6nw11ddy56jaly"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-path-class" ,perl-path-class)
-       ("perl-module-install" ,perl-module-install)))
+     (list perl-path-class perl-module-install))
     (propagated-inputs
-     `(("perl-catalyst-runtime" ,perl-catalyst-runtime)
-       ("perl-config-any" ,perl-config-any)
-       ("perl-data-visitor" ,perl-data-visitor)
-       ("perl-mro-compat" ,perl-mro-compat)))
+     (list perl-catalyst-runtime perl-config-any perl-data-visitor
+           perl-mro-compat))
     (home-page "https://metacpan.org/release/Catalyst-Plugin-ConfigLoader")
     (synopsis "Load config files of various types")
     (description "This module will attempt to load find and load configuration
@@ -2569,18 +2509,15 @@ formats.")
         (base32 "0a451997zc2vjx7rvndgx1ldbrpic8sfbddyvncynh0zr8bhlqc5"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)
-       ("perl-test-deep" ,perl-test-deep)
-       ("perl-test-exception" ,perl-test-exception)))
+     (list perl-module-install perl-test-deep perl-test-exception))
     (propagated-inputs
-     `(("perl-catalyst-runtime" ,perl-catalyst-runtime)
-       ("perl-moose" ,perl-moose)
-       ("perl-moosex-emulate-class-accessor-fast"
-        ,perl-moosex-emulate-class-accessor-fast)
-       ("perl-mro-compat" ,perl-mro-compat)
-       ("perl-namespace-clean" ,perl-namespace-clean)
-       ("perl-object-signature" ,perl-object-signature)
-       ("perl-test-www-mechanize-psgi" ,perl-test-www-mechanize-psgi)))
+     (list perl-catalyst-runtime
+           perl-moose
+           perl-moosex-emulate-class-accessor-fast
+           perl-mro-compat
+           perl-namespace-clean
+           perl-object-signature
+           perl-test-www-mechanize-psgi))
     (home-page "https://metacpan.org/release/Catalyst-Plugin-Session")
     (synopsis "Catalyst generic session plugin")
     (description "This plugin links the two pieces required for session
@@ -2602,13 +2539,10 @@ management in web applications together: the state, and the store.")
          "1rvxbfnpf9x2pc2zgpazlcgdlr2dijmxgmcs0m5nazs0w6xikssb"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)))
+     (list perl-module-install))
     (propagated-inputs
-     `(("perl-catalyst-plugin-session" ,perl-catalyst-plugin-session)
-       ("perl-catalyst-runtime" ,perl-catalyst-runtime)
-       ("perl-moose" ,perl-moose)
-       ("perl-mro-compat" ,perl-mro-compat)
-       ("perl-namespace-autoclean" ,perl-namespace-autoclean)))
+     (list perl-catalyst-plugin-session perl-catalyst-runtime perl-moose
+           perl-mro-compat perl-namespace-autoclean))
     (home-page
      "https://metacpan.org/release/Catalyst-Plugin-Session-State-Cookie")
     (synopsis "Maintain session IDs using cookies")
@@ -2633,13 +2567,12 @@ cookie mechanism.")
          "0x3j6zv3wr41jlwr6yb2jpmcx019ibyn11y8653ffnwhpzbpzsxs"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-cache-fastmmap" ,perl-cache-fastmmap)
-       ("perl-catalyst-plugin-session" ,perl-catalyst-plugin-session)
-       ("perl-catalyst-runtime" ,perl-catalyst-runtime)
-       ("perl-moosex-emulate-class-accessor-fast"
-        ,perl-moosex-emulate-class-accessor-fast)
-       ("perl-mro-compat" ,perl-mro-compat)
-       ("perl-path-class" ,perl-path-class)))
+     (list perl-cache-fastmmap
+           perl-catalyst-plugin-session
+           perl-catalyst-runtime
+           perl-moosex-emulate-class-accessor-fast
+           perl-mro-compat
+           perl-path-class))
     (home-page
      "https://metacpan.org/release/Catalyst-Plugin-Session-Store-FastMmap")
     (synopsis "FastMmap session storage backend")
@@ -2662,11 +2595,9 @@ memory interprocess cache.  It is based on Cache::FastMmap.")
          "1b2ksz74cpigxqzf63rddar3vfmnbpwpdcbs11v0ml89pb8ar79j"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)))
+     (list perl-module-install))
     (propagated-inputs
-     `(("perl-catalyst-runtime" ,perl-catalyst-runtime)
-       ("perl-devel-stacktrace" ,perl-devel-stacktrace)
-       ("perl-mro-compat" ,perl-mro-compat)))
+     (list perl-catalyst-runtime perl-devel-stacktrace perl-mro-compat))
     (home-page "https://metacpan.org/release/Catalyst-Plugin-StackTrace")
     (synopsis "Stack trace on the Catalyst debug screen")
     (description "This plugin enhances the standard Catalyst debug screen by
@@ -2689,13 +2620,10 @@ number, file name, and code context surrounding the line number.")
          "0m4l627p2fvzr4i6sgdxhdvsx4wpa6qmaibsbxlg5x5yjs7k7drn"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)))
+     (list perl-module-install))
     (propagated-inputs
-     `(("perl-catalyst-runtime" ,perl-catalyst-runtime)
-       ("perl-mime-types" ,perl-mime-types)
-       ("perl-moose" ,perl-moose)
-       ("perl-moosex-types" ,perl-moosex-types)
-       ("perl-namespace-autoclean" ,perl-namespace-autoclean)))
+     (list perl-catalyst-runtime perl-mime-types perl-moose
+           perl-moosex-types perl-namespace-autoclean))
     (home-page "https://metacpan.org/release/Catalyst-Plugin-Static-Simple")
     (synopsis "Simple serving of static pages")
     (description "The Static::Simple plugin is designed to make serving static
@@ -2721,45 +2649,40 @@ MIME type directly to the browser, without being processed through Catalyst.")
          "001yk1i0xwn4v308qx15nvnp6v9qfdigdlvz1rgw5zpnq7kwnq1a"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-fatal" ,perl-test-fatal)))
+     (list perl-test-fatal))
     (propagated-inputs
-     `(("perl-cgi-simple" ,perl-cgi-simple)
-       ("perl-cgi-struct" ,perl-cgi-struct)
-       ("perl-class-c3-adopt-next" ,perl-class-c3-adopt-next)
-       ("perl-class-date" ,perl-class-date)
-       ("perl-class-load" ,perl-class-load)
-       ("perl-data-dump" ,perl-data-dump)
-       ("perl-http-body" ,perl-http-body)
-       ("perl-http-message" ,perl-http-message)
-       ("perl-json-maybexs" ,perl-json-maybexs)
-       ("perl-libwww" ,perl-libwww)
-       ("perl-module-pluggable" ,perl-module-pluggable)
-       ("perl-moose" ,perl-moose)
-       ("perl-moosex-emulate-class-accessor-fast"
-        ,perl-moosex-emulate-class-accessor-fast)
-       ("perl-moosex-getopt" ,perl-moosex-getopt)
-       ("perl-moosex-methodattributes" ,perl-moosex-methodattributes)
-       ("perl-namespace-clean" ,perl-namespace-clean)
-       ("perl-path-class" ,perl-path-class)
-       ("perl-perlio-utf8-strict" ,perl-perlio-utf8_strict)
-       ("perl-plack" ,perl-plack)
-       ("perl-plack-middleware-fixmissingbodyinredirect"
-        ,perl-plack-middleware-fixmissingbodyinredirect)
-       ("perl-plack-middleware-methodoverride"
-        ,perl-plack-middleware-methodoverride)
-       ("perl-plack-middleware-removeredundantbody"
-        ,perl-plack-middleware-removeredundantbody)
-       ("perl-plack-middleware-reverseproxy"
-        ,perl-plack-middleware-reverseproxy)
-       ("perl-plack-test-externalserver" ,perl-plack-test-externalserver)
-       ("perl-safe-isa" ,perl-safe-isa)
-       ("perl-string-rewriteprefix" ,perl-string-rewriteprefix)
-       ("perl-text-simpletable" ,perl-text-simpletable)
-       ("perl-tree-simple" ,perl-tree-simple)
-       ("perl-tree-simple-visitorfactory" ,perl-tree-simple-visitorfactory)
-       ("perl-try-tiny" ,perl-try-tiny)
-       ("perl-uri" ,perl-uri)
-       ("perl-uri-ws" ,perl-uri-ws)))
+     (list perl-cgi-simple
+           perl-cgi-struct
+           perl-class-c3-adopt-next
+           perl-class-date
+           perl-class-load
+           perl-data-dump
+           perl-http-body
+           perl-http-message
+           perl-json-maybexs
+           perl-libwww
+           perl-module-pluggable
+           perl-moose
+           perl-moosex-emulate-class-accessor-fast
+           perl-moosex-getopt
+           perl-moosex-methodattributes
+           perl-namespace-clean
+           perl-path-class
+           perl-perlio-utf8_strict
+           perl-plack
+           perl-plack-middleware-fixmissingbodyinredirect
+           perl-plack-middleware-methodoverride
+           perl-plack-middleware-removeredundantbody
+           perl-plack-middleware-reverseproxy
+           perl-plack-test-externalserver
+           perl-safe-isa
+           perl-string-rewriteprefix
+           perl-text-simpletable
+           perl-tree-simple
+           perl-tree-simple-visitorfactory
+           perl-try-tiny
+           perl-uri
+           perl-uri-ws))
     (home-page "https://metacpan.org/release/Catalyst-Runtime")
     (synopsis "The Catalyst Framework Runtime")
     (description "Catalyst is a modern framework for making web applications.
@@ -2783,14 +2706,10 @@ run an application on the web, either by doing them itself, or by letting you
          "02kir63d5cs2ipj3fn1qlmmx3gqi1xqzrxfr4pv5vjhjgsm0zgx7"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-catalyst-runtime" ,perl-catalyst-runtime)
-       ("perl-catalystx-roleapplicator" ,perl-catalystx-roleapplicator)
-       ("perl-http-message" ,perl-http-message)
-       ("perl-module-install" ,perl-module-install)))
+     (list perl-catalyst-runtime perl-catalystx-roleapplicator
+           perl-http-message perl-module-install))
     (propagated-inputs
-     `(("perl-moose" ,perl-moose)
-       ("perl-namespace-autoclean" ,perl-namespace-autoclean)
-       ("perl-uri" ,perl-uri)))
+     (list perl-moose perl-namespace-autoclean perl-uri))
     (home-page
      "https://metacpan.org/release/Catalyst-TraitFor-Request-ProxyBase")
     (synopsis "Replace request base with value passed by HTTP proxy")
@@ -2814,12 +2733,12 @@ replaced with the contents of the X-Request-Base header.")
          "1qgq6y9iwfbhbkbgpw9czang2ami6z8jk1zlagrzdisy4igqzkvs"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-catalyst-runtime" ,perl-catalyst-runtime)
-       ("perl-module-install" ,perl-module-install)
-       ("perl-test-simple" ,perl-test-simple)
-       ("perl-test-www-mechanize-catalyst" ,perl-test-www-mechanize-catalyst)
-       ("perl-text-csv" ,perl-text-csv)
-       ("perl-xml-simple" ,perl-xml-simple)))
+     (list perl-catalyst-runtime
+           perl-module-install
+           perl-test-simple
+           perl-test-www-mechanize-catalyst
+           perl-text-csv
+           perl-xml-simple))
     (home-page "https://metacpan.org/release/Catalyst-View-Download")
     (synopsis "Download data in many formats")
     (description "The purpose of this module is to provide a method for
@@ -2841,12 +2760,9 @@ table based report in a variety of formats (CSV, HTML, etc.).")
          "1v4xkzazs743sc7cd1kxkbi99cf00a4dadyyancckcbpi9p3znn5"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)
-       ("perl-yaml" ,perl-yaml)))
+     (list perl-module-install perl-yaml))
     (inputs
-     `(("perl-catalyst-runtime" ,perl-catalyst-runtime)
-       ("perl-json-maybexs" ,perl-json-maybexs)
-       ("perl-mro-compat" ,perl-mro-compat)))
+     (list perl-catalyst-runtime perl-json-maybexs perl-mro-compat))
     (home-page "https://metacpan.org/release/Catalyst-View-JSON")
     (synopsis "Catalyst JSON view")
     (description "Catalyst::View::JSON is a Catalyst View handler that returns
@@ -2866,13 +2782,13 @@ stash data in JSON format.")
       (base32 "0jzgpkgq5pwq82zlb0nykdyk40dfpsyn9ilz91d0wpixgi9i5pr8"))))
   (build-system perl-build-system)
   (propagated-inputs
-   `(("perl-catalyst-runtime" ,perl-catalyst-runtime)
-     ("perl-class-accessor" ,perl-class-accessor)
-     ("perl-data-dump" ,perl-data-dump)
-     ("perl-mro-compat" ,perl-mro-compat)
-     ("perl-path-class" ,perl-path-class)
-     ("perl-template-timer" ,perl-template-timer)
-     ("perl-template-toolkit" ,perl-template-toolkit)))
+   (list perl-catalyst-runtime
+         perl-class-accessor
+         perl-data-dump
+         perl-mro-compat
+         perl-path-class
+         perl-template-timer
+         perl-template-toolkit))
   (home-page "https://metacpan.org/release/Catalyst-View-TT")
   (synopsis "Template View Class")
   (description "This module is a Catalyst view class for the Template
@@ -2893,16 +2809,14 @@ Toolkit.")
          "0iq4ci8m6g2c4g01fvdl568y7pjz28f3widk986v3pyhr7ll8j88"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-moose" ,perl-moose)
-       ("perl-catalyst-runtime" ,perl-catalyst-runtime)
-       ("perl-moosex-methodattributes" ,perl-moosex-methodattributes)))
+     (list perl-moose perl-catalyst-runtime perl-moosex-methodattributes))
     (propagated-inputs
-     `(("perl-catalyst-runtime" ,perl-catalyst-runtime)
-       ("perl-class-load" ,perl-class-load)
-       ("perl-moose" ,perl-moose)
-       ("perl-moosex-traits-pluggable" ,perl-moosex-traits-pluggable)
-       ("perl-namespace-autoclean" ,perl-namespace-autoclean)
-       ("perl-list-moreutils" ,perl-list-moreutils)))
+     (list perl-catalyst-runtime
+           perl-class-load
+           perl-moose
+           perl-moosex-traits-pluggable
+           perl-namespace-autoclean
+           perl-list-moreutils))
     (home-page "https://metacpan.org/release/CatalystX-Component-Traits")
     (synopsis "Trait Loading and Resolution for Catalyst Components")
     (description "Adds a \"COMPONENT\" in Catalyst::Component method to your
@@ -2926,9 +2840,7 @@ MooseX::Traits::Pluggable.")
          "0vwaapxn8g5hs2xp63c4dwv9jmapmji4272fakssvgc9frklg3p2"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-catalyst-runtime" ,perl-catalyst-runtime)
-       ("perl-moose" ,perl-moose)
-       ("perl-moosex-relatedclassroles" ,perl-moosex-relatedclassroles)))
+     (list perl-catalyst-runtime perl-moose perl-moosex-relatedclassroles))
     (home-page "https://metacpan.org/release/CatalystX-RoleApplicator")
     (synopsis "Apply roles to Catalyst classes")
     (description "CatalystX::RoleApplicator applies roles to Catalyst
@@ -2950,13 +2862,10 @@ application classes.")
          "08jvibq4v8xjj0c3cr93h0w8w0c88ajwjn37xjy7ygxl9krlffp6"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)
-       ("perl-test-www-mechanize-catalyst" ,perl-test-www-mechanize-catalyst)))
+     (list perl-module-install perl-test-www-mechanize-catalyst))
     (propagated-inputs
-     `(("perl-catalyst-runtime" ,perl-catalyst-runtime)
-       ("perl-moose" ,perl-moose)
-       ("perl-namespace-autoclean" ,perl-namespace-autoclean)
-       ("starman" ,starman)))
+     (list perl-catalyst-runtime perl-moose perl-namespace-autoclean
+           starman))
     (home-page "https://metacpan.org/release/CatalystX-Script-Server-Starman")
     (synopsis "Catalyst development server with Starman")
     (description "This module provides a Catalyst extension to replace the
@@ -2976,11 +2885,9 @@ development server with Starman.")
         (base32 "1bxrpxv95js8yinicminxdg41xvd85haj2gvlywg3zqdb66smqy8"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-deep" ,perl-test-deep)
-       ("perl-test-nowarnings" ,perl-test-nowarnings)
-       ("perl-test-warn" ,perl-test-warn)))
+     (list perl-test-deep perl-test-nowarnings perl-test-warn))
     (propagated-inputs
-     `(("perl-html-parser" ,perl-html-parser)))
+     (list perl-html-parser))
     (home-page "https://metacpan.org/release/CGI")
     (synopsis "Handle Common Gateway Interface requests and responses")
     (description "CGI.pm is a stable, complete and mature solution for
@@ -3004,7 +2911,7 @@ headers.")
         (base32
          "163ixq9kninqq094z2rnkg9pv3bcmvjphlww4vksfrzhq3h9pjdf"))))
     (build-system perl-build-system)
-    (inputs `(("perl-cgi" ,perl-cgi)))
+    (inputs (list perl-cgi))
     (home-page
      "https://metacpan.org/release/CGI-FormBuilder")
     (synopsis
@@ -3030,8 +2937,8 @@ form-based applications.")
          "1xsl2pz1jrh127pq0b01yffnj4mnp9nvkp88h5mndrscq9hn8xa6"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
-    (inputs `(("perl-cgi" ,perl-cgi)))
+     (list perl-module-build))
+    (inputs (list perl-cgi))
     (home-page
      "https://metacpan.org/release/CGI-Session")
     (synopsis
@@ -3054,10 +2961,8 @@ HTTP requests.")
         (base32 "13c7iwnnavky10ab87pi8jc1kqph03s0rhvj7myn7szhbfisc4gn"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-io-stringy" ,perl-io-stringy) ; for IO::Scalar
-       ("perl-module-build" ,perl-module-build)
-       ("perl-test-exception" ,perl-test-exception)
-       ("perl-test-nowarnings" ,perl-test-nowarnings)))
+     (list perl-io-stringy ; for IO::Scalar
+           perl-module-build perl-test-exception perl-test-nowarnings))
     (home-page "https://metacpan.org/release/CGI-Simple")
     (synopsis "CGI interface that is CGI.pm compliant")
     (description "CGI::Simple provides a relatively lightweight drop in
@@ -3079,7 +2984,7 @@ parameter parsing, file upload, cookie handling and header generation.")
          "0v4xq2qpryr7i6jngw1wpn8yr2kiib10yxp4aih90vfdznkqsgfi"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-deep" ,perl-test-deep)))
+     (list perl-test-deep))
     (home-page "https://metacpan.org/release/CGI-Struct")
     (synopsis "Build structures from CGI data")
     (description "This is a module for building structured data from CGI
@@ -3100,10 +3005,9 @@ inputs, in a manner reminiscent of how PHP does.")
          "0h6qqdg1yzqkdxp7hqlp0qa7d1y64nilgimxs79dys2ryjfpcknh"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (propagated-inputs
-     `(("perl-datetime" ,perl-datetime)
-       ("perl-http-date" ,perl-http-date)))
+     (list perl-datetime perl-http-date))
     (home-page "https://metacpan.org/release/DateTime-Format-HTTP")
     (synopsis "Date conversion routines")
     (description "This module provides functions that deal with the date
@@ -3124,7 +3028,7 @@ formats used by the HTTP protocol.")
          "060jzf45dlwysw5wsm7av1wvpl06xgk415kwwpvv89r6wda3md5d"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-libwww" ,perl-libwww)))
+     (list perl-libwww))
     (home-page "https://metacpan.org/release/Digest-MD5-File")
     (synopsis "MD5 sums for files and urls")
     (description "Digest::MD5::File is a Perl extension for getting MD5 sums
@@ -3177,10 +3081,7 @@ with Encode::decode(locale => $string).")
          (add-after 'unpack 'set-env
            (lambda _ (setenv "PERL_USE_UNSAFE_INC" "1"))))))
     (inputs
-     `(("perl-class-errorhandler" ,perl-class-errorhandler)
-       ("perl-html-parser" ,perl-html-parser)
-       ("perl-libwww" ,perl-libwww)
-       ("perl-uri" ,perl-uri)))
+     (list perl-class-errorhandler perl-html-parser perl-libwww perl-uri))
     (home-page "https://metacpan.org/release/Feed-Find")
     (synopsis "Syndication feed auto-discovery")
     (description "@code{Feed::Find} implements feed auto-discovery for finding
@@ -3202,7 +3103,7 @@ RSS 0.91, RSS 1.0, RSS 2.0, Atom.")
                "0vmzw1mhv580flzkla80gvwfpficnhlbqr1dnlf9x50bw7n18k62"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-http-date" ,perl-http-date)))
+     (list perl-http-date))
     (license license:perl-license)
     (synopsis "Perl directory listing parser")
     (description
@@ -3225,17 +3126,17 @@ which can be used to parse directory listings.")
                 "perl-finance-quote-unuse-mozilla-ca.patch"))))
    (build-system perl-build-system)
    (propagated-inputs
-    `(("perl-cgi" ,perl-cgi)
-      ("perl-datetime" ,perl-datetime)
-      ("perl-html-parser" ,perl-html-parser)
-      ("perl-html-tableextract" ,perl-html-tableextract)
-      ("perl-html-tree" ,perl-html-tree)
-      ("perl-http-cookies" ,perl-http-cookies)
-      ("perl-http-message" ,perl-http-message)
-      ("perl-json" ,perl-json)
-      ("perl-libwww" ,perl-libwww)
-      ("perl-lwp-protocol-https" ,perl-lwp-protocol-https)
-      ("perl-uri" ,perl-uri)))
+    (list perl-cgi
+          perl-datetime
+          perl-html-parser
+          perl-html-tableextract
+          perl-html-tree
+          perl-http-cookies
+          perl-http-message
+          perl-json
+          perl-libwww
+          perl-lwp-protocol-https
+          perl-uri))
    (home-page "https://metacpan.org/release/Finance-Quote")
    (synopsis "Stock and mutual fund quotes")
    (description
@@ -3280,7 +3181,7 @@ described in RFC 2744.")
          "0axknss8c368r5i082yhkfj8mq0w4nglfrpcxcayyzzj13qimvzk"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-html-tree" ,perl-html-tree)))
+     (list perl-html-tree))
     (home-page "https://metacpan.org/release/HTML-Element-Extended")
     (synopsis "Manipulate tables of HTML::Element")
     (description
@@ -3301,11 +3202,8 @@ composed of HTML::Element style components.")
         (base32 "14i4ldyvdvhdhvfhh9kiq6z853q2f84biq8vcpv1k5w2r80wdiin"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-html-parser" ,perl-html-parser)
-       ("perl-html-tagset" ,perl-html-tagset)
-       ("perl-http-message" ,perl-http-message)
-       ("perl-lwp-mediatypes" ,perl-lwp-mediatypes)
-       ("perl-uri" ,perl-uri)))
+     (list perl-html-parser perl-html-tagset perl-http-message
+           perl-lwp-mediatypes perl-uri))
     (home-page "https://metacpan.org/release/HTML-Form")
     (synopsis "Perl class representing an HTML form element")
     (description "Objects of the HTML::Form class represents a single HTML
@@ -3328,14 +3226,14 @@ composed of HTML::Element style components.")
          "06p7w4zd42b2yh541mlzyqj40lwmvvn3fyqi8big4mf34la7m2jm"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-cpan-meta" ,perl-test-cpan-meta)
-       ("perl-test-differences" ,perl-test-differences)
-       ("perl-test-eol" ,perl-test-eol)
-       ("perl-test-memory-cycle" ,perl-test-memory-cycle)
-       ("perl-test-notabs" ,perl-test-notabs)))
+     (list perl-module-build
+           perl-test-cpan-meta
+           perl-test-differences
+           perl-test-eol
+           perl-test-memory-cycle
+           perl-test-notabs))
     (inputs
-     `(("perl-html-parser" ,perl-html-parser)))
+     (list perl-html-parser))
     (home-page
      "https://metacpan.org/release/HTML-Scrubber")
     (synopsis
@@ -3357,9 +3255,7 @@ composed of HTML::Element style components.")
         (base32 "0lk02xpfxcg7ij4dvpsa4wjlzhmiizj0jfr3rwmdpbj69nvc93br"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-html-parser" ,perl-html-parser)
-       ("perl-html-tagset" ,perl-html-tagset)
-       ("perl-libwww" ,perl-libwww)))
+     (list perl-html-parser perl-html-tagset perl-libwww))
     (home-page "https://metacpan.org/release/HTML-Lint")
     (synopsis "Check for HTML errors in a string or file")
     (description "HTML::Lint is a pure-Perl HTML parser and checker for
@@ -3380,8 +3276,7 @@ syntactic legitmacy.")
          "01jimmss3q68a89696wmclvqwb2ybz6xgabpnbp6mm6jcni82z8a"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-html-element-extended" ,perl-html-element-extended)
-       ("perl-html-parser" ,perl-html-parser)))
+     (list perl-html-element-extended perl-html-parser))
     (home-page "https://metacpan.org/release/HTML-TableExtract")
     (synopsis "Extract contents from HTML tables")
     (description
@@ -3403,12 +3298,9 @@ in tables within an HTML document, either as text or encoded element trees.")
          "1gyvm4qlwm9y6hczkpnrdfl303ggbybr0nqxdjw09hii8yw4sdzh"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-fatal" ,perl-test-fatal)))
+     (list perl-module-build perl-test-fatal))
     (propagated-inputs
-     `(("perl-html-parser" ,perl-html-parser)
-       ("perl-html-tagset" ,perl-html-tagset)
-       ("perl-libwww" ,perl-libwww)))
+     (list perl-html-parser perl-html-tagset perl-libwww))
     (home-page "https://metacpan.org/release/HTML-Tree")
     (synopsis "Work with HTML in a DOM-like tree structure")
     (description "This distribution contains a suite of modules for
@@ -3429,8 +3321,7 @@ representing, creating, and extracting information from HTML syntax trees.")
                "12v05ywlnsi9lc17z32k9jxx3sj1viy7y1wpl7n4az76v7hwfa7c"))))
     (build-system perl-build-system)
     (inputs
-     `(("perl-html-tagset" ,perl-html-tagset)
-       ("perl-http-message" ,perl-http-message)))
+     (list perl-html-tagset perl-http-message))
     (license license:perl-license)
     (synopsis "Perl HTML parser class")
     (description
@@ -3473,7 +3364,7 @@ kinds of HTML parsing operations.")
                 "17qjw8swj2q4b1ic285pndgrkmvpsqw0j68nhqzpk1daydhsyiv5"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-cgi" ,perl-cgi)))
+     (list perl-cgi))
     (home-page "https://metacpan.org/release/HTML-Template")
     (synopsis "HTML-like templates")
     (description
@@ -3500,10 +3391,9 @@ you to separate design from the data.")
          "15vj488i62mdp4ps9k77h39prj70i7anb6b0j8nm7l9vbdc2q3gw"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-deep" ,perl-test-deep)))
+     (list perl-test-deep))
     (propagated-inputs
-     `(("perl-file-temp" ,perl-file-temp)
-       ("perl-http-message" ,perl-http-message))) ;For HTTP::Headers
+     (list perl-file-temp perl-http-message)) ;For HTTP::Headers
     (home-page "https://metacpan.org/release/HTTP-Body")
     (synopsis "HTTP Body Parser")
     (description "HTTP::Body parses chunks of HTTP POST data and supports
@@ -3524,13 +3414,9 @@ and multipart/form-data.")
         (base32 "0jk0ps4i67dhhhwaxwwa9nkv3n6n5w44xlnwyzvk59735pwvyjh0"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-deep" ,perl-test-deep)
-       ("perl-test-requires" ,perl-test-requires)
-       ("perl-time-mock" ,perl-time-mock)
-       ("perl-uri" ,perl-uri)))
+     (list perl-test-deep perl-test-requires perl-time-mock perl-uri))
     (inputs
-     `(("perl-time-local" ,perl-time-local)
-       ("perl-http-date" ,perl-http-date)))
+     (list perl-time-local perl-http-date))
     (home-page "https://metacpan.org/release/HTTP-CookieJar")
     (synopsis "Minimalist HTTP user agent cookie jar")
     (description "This module implements a minimalist HTTP user agent cookie
@@ -3551,7 +3437,7 @@ jar in conformance with RFC 6265 <http://tools.ietf.org/html/rfc6265>.")
                "13rnz3233vbsfariya4njiyfaj6k94j6bvlyh3dmfmh24hpqgx77"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-http-message" ,perl-http-message)))
+     (list perl-http-message))
     (license license:perl-license)
     (synopsis "Perl HTTP cookie jars")
     (description
@@ -3574,8 +3460,7 @@ object knows about.")
                "1hmd2isrkilf0q0nkxms1q64kikjmcw9imbvrjgky6kh89vqdza3"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-http-message" ,perl-http-message)
-       ("perl-lwp-mediatypes" ,perl-lwp-mediatypes)))
+     (list perl-http-message perl-lwp-mediatypes))
     (license license:perl-license)
     (synopsis "Perl simple http server class")
     (description
@@ -3618,7 +3503,7 @@ used by the HTTP protocol (and then some more).")
        (base32
         "0z77nflj8zdcfg70kc93glq5kmd6qxn2nf7h70x4xhfg25wkvr1q"))))
     (build-system perl-build-system)
-    (native-inputs `(("perl-cgi" ,perl-cgi)))
+    (native-inputs (list perl-cgi))
     (home-page "https://metacpan.org/release/HTTP-Lite")
     (synopsis "Lightweight HTTP implementation")
     (description "@code{HTTP::Lite} is a stand-alone lightweight
@@ -3647,13 +3532,10 @@ processing of request data as it arrives.")
                "04lih0fn89jpyk74c4aq1rzq18h8v4zd3x0lik2r9dl8sdqd2q6h"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-try-tiny" ,perl-try-tiny)))
+     (list perl-try-tiny))
     (propagated-inputs
-     `(("perl-encode-locale" ,perl-encode-locale)
-       ("perl-http-date" ,perl-http-date)
-       ("perl-io-html" ,perl-io-html)
-       ("perl-lwp-mediatypes" ,perl-lwp-mediatypes)
-       ("perl-uri" ,perl-uri)))
+     (list perl-encode-locale perl-http-date perl-io-html
+           perl-lwp-mediatypes perl-uri))
     (license license:perl-license)
     (synopsis "Perl HTTP style message")
     (description
@@ -3674,7 +3556,7 @@ processing of request data as it arrives.")
                "05p053vjs5g91v5cmjnny7a3xzddz5k7vnjw81wfh01ilqg9qwhw"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-http-message" ,perl-http-message)))
+     (list perl-http-message))
     (license license:perl-license)
     (synopsis "Perl http content negotiation")
     (description
@@ -3700,8 +3582,7 @@ fields in the request.")
          "0idwq3jk595xil65lmxz128ha7s3r2n5zknisddpgwnqrghs3igq"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-http-message" ,perl-http-message)
-       ("perl-uri" ,perl-uri)))
+     (list perl-http-message perl-uri))
     (home-page "https://metacpan.org/release/HTTP-Parser")
     (synopsis "Parse HTTP/1.1 requests")
     (description "This is an HTTP request parser.  It takes chunks of text as
@@ -3724,7 +3605,7 @@ supported.")
          "02d84xq1mm53c7jl33qyb7v5w4372vydp74z6qj0vc96wcrnhkkr"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)))
+     (list perl-module-install))
     (home-page "https://metacpan.org/release/HTTP-Parser-XS")
     (synopsis "Fast HTTP request parser")
     (description "HTTP::Parser::XS is a fast, primitive HTTP request/response
@@ -3745,8 +3626,7 @@ parser.")
          "1smwmiarwcgq7vjdblnb6ldi2x1s5sk5p15p7xvm5byiqq3znnwl"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-class-accessor" ,perl-class-accessor)
-       ("perl-http-message" ,perl-http-message)))
+     (list perl-class-accessor perl-http-message))
     (home-page "https://metacpan.org/release/HTTP-Request-AsCGI")
     (synopsis "Set up a CGI environment from an HTTP::Request")
     (description "This module provides a convenient way to set up a CGI
@@ -3767,7 +3647,7 @@ environment from an HTTP::Request.")
          "0k6bg7k6mjixfzxdkkdrhqvaqmdhjszx0zsk8g0bimiby6j9z4yq"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-cgi" ,perl-cgi)))
+     (list perl-cgi))
     (arguments
      ;; See the discussion of a related tests issue at
      ;; https://lists.gnu.org/archive/html/guix-devel/2015-01/msg00346.html
@@ -3802,11 +3682,8 @@ http-based UI to your existing tools.")
          "11wkxxqj3ff84rgj9q2gzkdgscwp3fzj205846k9ycqinlpsmgfx"))))
     (build-system perl-build-system)
     (inputs
-     `(("perl-http-cookiejar" ,perl-http-cookiejar)
-       ("perl-io-socket-ip" ,perl-io-socket-ip)
-       ("perl-io-socket-ssl" ,perl-io-socket-ssl)
-       ("perl-mozilla-ca" ,perl-mozilla-ca)
-       ("perl-net-ssleay" ,perl-net-ssleay)))
+     (list perl-http-cookiejar perl-io-socket-ip perl-io-socket-ssl
+           perl-mozilla-ca perl-net-ssleay))
     (home-page "https://metacpan.org/release/HTTP-Tiny")
     (synopsis "HTTP/1.1 client")
     (description "This is a very simple HTTP/1.1 client, designed for doing
@@ -3830,8 +3707,7 @@ It supports proxies and redirection.  It also correctly resumes after EINTR.")
          "199sa722amvwhq0czjfb7psj3hbqmvni5vxkrm579r5943pg0rax"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-file-which" ,perl-file-which)
-       ("perl-ipc-run3" ,perl-ipc-run3)))
+     (list perl-file-which perl-ipc-run3))
     (home-page "https://metacpan.org/release/HTTP-Tinyish")
     (synopsis "@code{HTTP::Tiny} compatible HTTP client wrappers")
     (description
@@ -3874,7 +3750,7 @@ algorithm specified in section 8.2.2.1 of the draft standard.")
        (sha256
         (base32 "0ihlpxrkq1xrvhnq52nhghanskic718ch8kpp642afgq72i4b6l4"))))
     (build-system perl-build-system)
-    (native-inputs `(("perl-module-build" ,perl-module-build)))
+    (native-inputs (list perl-module-build))
     (home-page "https://metacpan.org/release/IO-Socket-IP")
     (synopsis "Family-neutral IP socket supporting both IPv4 and IPv6")
     (description "This module provides a protocol-independent way to use IPv4
@@ -3884,21 +3760,19 @@ and IPv6 sockets, intended as a replacement for IO::Socket::INET.")
 (define-public perl-io-socket-ssl
   (package
     (name "perl-io-socket-ssl")
-    (version "2.066")
+    (version "2.068")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://cpan/authors/id/S/SU/SULLR/"
                                   "IO-Socket-SSL-" version ".tar.gz"))
               (sha256
                (base32
-                "1kgbws7dwp2hh16qid7169dfkhmcwg7dz9ffbm6k0id5h53hciqd"))
-              (patches (search-patches
-                        "perl-io-socket-ssl-openssl-1.0.2f-fix.patch"))))
+                "1ycgzg1l7p07y5wc0vzgnj122vm51p5aqpi4s56pp0piaq0gq824"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-net-ssleay" ,perl-net-ssleay)
-       ;; for IDN support
-       ("perl-uri" ,perl-uri)))
+     (list perl-net-ssleay
+           ;; for IDN support
+           perl-uri))
     (synopsis "Nearly transparent SSL encapsulation for IO::Socket::INET")
     (description
      "IO::Socket::SSL makes using SSL/TLS much easier by wrapping the
@@ -3923,22 +3797,20 @@ select or poll.")
                "0869hn711d6fd6yil8p88wij6p1zdrbnycy7p9p176q39ajd7l61"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-needs" ,perl-test-needs)
-       ("perl-test-requiresinternet" ,perl-test-requiresinternet)))
+     (list perl-test-fatal perl-test-needs perl-test-requiresinternet))
     (propagated-inputs
-     `(("perl-encode-locale" ,perl-encode-locale)
-       ("perl-file-listing" ,perl-file-listing)
-       ("perl-html-parser" ,perl-html-parser)
-       ("perl-http-cookies" ,perl-http-cookies)
-       ("perl-http-daemon" ,perl-http-daemon)
-       ("perl-http-date" ,perl-http-date)
-       ("perl-http-message" ,perl-http-message)
-       ("perl-http-negotiate" ,perl-http-negotiate)
-       ("perl-net-http" ,perl-net-http)
-       ("perl-try-tiny" ,perl-try-tiny)
-       ("perl-uri" ,perl-uri)
-       ("perl-www-robotrules" ,perl-www-robotrules)))
+     (list perl-encode-locale
+           perl-file-listing
+           perl-html-parser
+           perl-http-cookies
+           perl-http-daemon
+           perl-http-date
+           perl-http-message
+           perl-http-negotiate
+           perl-net-http
+           perl-try-tiny
+           perl-uri
+           perl-www-robotrules))
     (license license:perl-license)
     (synopsis "Perl modules for the WWW")
     (description
@@ -3965,10 +3837,9 @@ help you implement simple HTTP servers.")
          "176f6vbk1018i0y7xj9d406ndbjgwzan2j9nihxnsahzg2vr2vz2"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-libwww" ,perl-libwww)
-       ("perl-uri" ,perl-uri)))
+     (list perl-libwww perl-uri))
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)))
+     (list perl-module-install))
     (home-page "https://metacpan.org/release/LWP-Online")
     (synopsis "Checks whether your process has access to the web")
     (description "This module attempts to answer, as accurately as it can, one
@@ -3993,7 +3864,7 @@ not have DNS.  We might not have a network card at all!")
                "1n8rg6csv3dsvymg06cmxipimr6cb1g9r903ghm1qsmiv89cl6wg"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-fatal" ,perl-test-fatal)))
+     (list perl-test-fatal))
     (license license:perl-license)
     (synopsis "Perl module to guess the media type for a file or a URL")
     (description
@@ -4017,12 +3888,9 @@ exists it is used instead.")
     (build-system perl-build-system)
     (native-inputs
      ;; For tests.
-     `(("perl-test-requiresinternet" ,perl-test-requiresinternet)))
+     (list perl-test-requiresinternet))
     (propagated-inputs
-     `(("perl-io-socket-ssl" ,perl-io-socket-ssl)
-       ("perl-libwww" ,perl-libwww)
-       ("perl-mozilla-ca" ,perl-mozilla-ca)
-       ("perl-net-http" ,perl-net-http)))
+     (list perl-io-socket-ssl perl-libwww perl-mozilla-ca perl-net-http))
     (home-page "https://metacpan.org/release/LWP-Protocol-https")
     (synopsis "HTTPS support for LWP::UserAgent")
     (description "The LWP::Protocol::https module provides support for using
@@ -4043,7 +3911,7 @@ https schemed URLs with LWP.")
          "1hw7wy7f82kl61xjwkgmhv1ixgg56dhgfr45wxn6ahc0qys5mkix"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-libwww" ,perl-libwww)))
+     (list perl-libwww))
     (home-page "https://metacpan.org/release/LWP-UserAgent-Cached")
     (synopsis "Simple caching for LWP::UserAgent")
     (description "LWP::UserAgent::Cached is an LWP::UserAgent subclass with
@@ -4065,7 +3933,7 @@ instead of making an HTTP request.")
          "0lyvbpjng7yfvyha9rp2y2c6liz5hhplmd2grc8jlsfkih7dbn06"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-libwww" ,perl-libwww)))
+     (list perl-libwww))
     (home-page "https://metacpan.org/release/LWP-UserAgent-Determined")
     (synopsis "Virtual browser that retries errors")
     (description "LWP::UserAgent::Determined works just like LWP::UserAgent,
@@ -4089,10 +3957,10 @@ and retry a few times.")
         "0gfhw3jbs25yya2dryv8xvyn9myngcfcmsybj7gkq62fnznil16c"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-libwww" ,perl-libwww)
-       ;; Users should instead make sure SSL_ca_path is set properly.
-       ;; ("perl-mozilla-ca" ,perl-mozilla-ca)
-       ("perl-net-dns" ,perl-net-dns)))
+     (list perl-libwww
+           ;; Users should instead make sure SSL_ca_path is set properly.
+           ;; ("perl-mozilla-ca" ,perl-mozilla-ca)
+           perl-net-dns))
     (home-page "https://metacpan.org/release/LWPx-ParanoidAgent")
     (synopsis "Security enhanced subclass of LWP::UserAgent")
     (description "@code{LWPx::ParanoidAgent} is a class subclassing
@@ -4119,28 +3987,26 @@ is limited to http and https.")
                  "perl-net-amazon-s3-moose-warning.patch"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-libwww" ,perl-libwww)
-       ("perl-test-exception" ,perl-test-exception)))
+     (list perl-libwww perl-test-exception))
     (propagated-inputs
-     `(("perl-data-stream-bulk" ,perl-data-stream-bulk)
-       ("perl-datetime-format-http" ,perl-datetime-format-http)
-       ("perl-digest-hmac" ,perl-digest-hmac)
-       ("perl-digest-md5-file" ,perl-digest-md5-file)
-       ("perl-file-find-rule" ,perl-file-find-rule)
-       ("perl-http-date" ,perl-http-date)
-       ("perl-http-message" ,perl-http-message)
-       ("perl-lwp-useragent-determined" ,perl-lwp-useragent-determined)
-       ("perl-mime-types" ,perl-mime-types)
-       ("perl-moose" ,perl-moose)
-       ("perl-moosex-strictconstructor" ,perl-moosex-strictconstructor)
-       ("perl-moosex-types-datetime-morecoercions"
-        ,perl-moosex-types-datetime-morecoercions)
-       ("perl-path-class" ,perl-path-class)
-       ("perl-regexp-common" ,perl-regexp-common)
-       ("perl-term-encoding" ,perl-term-encoding)
-       ("perl-term-progressbar-simple" ,perl-term-progressbar-simple)
-       ("perl-uri" ,perl-uri)
-       ("perl-xml-libxml" ,perl-xml-libxml)))
+     (list perl-data-stream-bulk
+           perl-datetime-format-http
+           perl-digest-hmac
+           perl-digest-md5-file
+           perl-file-find-rule
+           perl-http-date
+           perl-http-message
+           perl-lwp-useragent-determined
+           perl-mime-types
+           perl-moose
+           perl-moosex-strictconstructor
+           perl-moosex-types-datetime-morecoercions
+           perl-path-class
+           perl-regexp-common
+           perl-term-encoding
+           perl-term-progressbar-simple
+           perl-uri
+           perl-xml-libxml))
     (home-page "https://metacpan.org/release/Net-Amazon-S3")
     (synopsis "Perl interface to Amazon S3")
     (description "This module provides a Perlish interface to Amazon S3.")
@@ -4160,8 +4026,7 @@ is limited to http and https.")
                "1i7fk6q1iaxzgf82mjd5hg77hvy7dbb79488cijg16dyfrds6nip"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-io-socket-ssl" ,perl-io-socket-ssl)
-       ("perl-uri" ,perl-uri)))
+     (list perl-io-socket-ssl perl-uri))
     (license license:perl-license)
     (synopsis "Perl low-level HTTP connection (client)")
     (description
@@ -4212,7 +4077,7 @@ or to multiple server ports.")
          "001a6dcfahf7kkyirqkc8jd4fh4fkal7n7vm9c4dblqrvmdc8abv"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-io-socket-ssl" ,perl-io-socket-ssl)))
+     (list perl-io-socket-ssl))
     (home-page "https://metacpan.org/release/Net-SMTP-SSL")
     (synopsis "SSL support for Net::SMTP")
     (description "SSL support for Net::SMTP.")
@@ -4232,22 +4097,21 @@ or to multiple server ports.")
          "081jg0xddzpg2anmqi9i6d7vs6c8z7k557bf8xl6vgb3h95pin5w"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-requires" ,perl-test-requires)
-       ("perl-file-sharedir-install" ,perl-file-sharedir-install)))
+     (list perl-test-requires perl-file-sharedir-install))
     (propagated-inputs
-     `(("perl-apache-logformat-compiler" ,perl-apache-logformat-compiler)
-       ("perl-devel-stacktrace" ,perl-devel-stacktrace)
-       ("perl-devel-stacktrace-ashtml" ,perl-devel-stacktrace-ashtml)
-       ("perl-file-sharedir" ,perl-file-sharedir)
-       ("perl-hash-multivalue" ,perl-hash-multivalue)
-       ("perl-http-body" ,perl-http-body)
-       ("perl-http-message" ,perl-http-message)
-       ("perl-http-tiny" ,perl-http-tiny)
-       ("perl-libwww" ,perl-libwww)
-       ("perl-stream-buffered" ,perl-stream-buffered)
-       ("perl-test-tcp" ,perl-test-tcp)
-       ("perl-try-tiny" ,perl-try-tiny)
-       ("perl-uri" ,perl-uri)))
+     (list perl-apache-logformat-compiler
+           perl-devel-stacktrace
+           perl-devel-stacktrace-ashtml
+           perl-file-sharedir
+           perl-hash-multivalue
+           perl-http-body
+           perl-http-message
+           perl-http-tiny
+           perl-libwww
+           perl-stream-buffered
+           perl-test-tcp
+           perl-try-tiny
+           perl-uri))
     (home-page "https://metacpan.org/release/Plack")
     (synopsis "Perl Superglue for Web frameworks and servers (PSGI toolkit)")
     (description "Plack is a set of tools for using the PSGI stack.  It
@@ -4271,10 +4135,9 @@ WSGI.")
          "0xf2visi16hgwgyp9q0cjr10ikbn474hjia5mj8mb2scvbkrbni8"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)
-       ("perl-test-requires" ,perl-test-requires)))
+     (list perl-module-install perl-test-requires))
     (propagated-inputs
-     `(("perl-plack" ,perl-plack)))
+     (list perl-plack))
     (home-page "https://metacpan.org/release/Plack-Middleware-Deflater")
     (synopsis "Compress response body with Gzip or Deflate")
     (description
@@ -4300,9 +4163,8 @@ servers.")
          "14dkrmccq7a5vpymx5dv8032gfcvhsw2i6v5sh3c4ym5ymlx08kc"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-html-parser" ,perl-html-parser) ;for HTML::Entities
-       ("perl-http-message" ,perl-http-message)
-       ("perl-plack" ,perl-plack)))     ;for Plack::Test
+     (list perl-html-parser ;for HTML::Entities
+           perl-http-message perl-plack))     ;for Plack::Test
     (home-page
      "https://metacpan.org/release/Plack-Middleware-FixMissingBodyInRedirect")
     (synopsis "Plack::Middleware which sets body for redirect response")
@@ -4324,9 +4186,9 @@ already set.")
         (base32 "1wdmmav3rbhv49zpw311zrxxqmg1fz3f3q9src0ypgs8zcp5myyv"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (propagated-inputs
-     `(("perl-plack" ,perl-plack)))
+     (list perl-plack))
     (home-page "https://metacpan.org/release/Plack-Middleware-MethodOverride")
     (synopsis "Override REST methods to Plack apps via POST")
     (description "This middleware allows for POST requests that pretend to be
@@ -4349,7 +4211,7 @@ can say what method it actually meant.")
         (base32 "0zh83001rn5aqwpc1pn3di2h3ibzlf2dvkmkv05hnadpss9mzm40"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-plack" ,perl-plack)))
+     (list perl-plack))
     (home-page
      "https://metacpan.org/release/Plack-Middleware-RemoveRedundantBody")
     (synopsis "Plack::Middleware which removes body for HTTP response")
@@ -4371,9 +4233,9 @@ required.")
         (base32 "0a512n62pnk5ayj3zdzyj50iy1qi8nwh6ygks2h7nrh7gp9k2jc7"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)))
+     (list perl-module-install))
     (propagated-inputs
-     `(("perl-plack" ,perl-plack)))
+     (list perl-plack))
     (home-page "https://metacpan.org/release/Plack-Middleware-ReverseProxy")
     (synopsis "Supports app to run as a reverse proxy backend")
     (description "Plack::Middleware::ReverseProxy resets some HTTP headers,
@@ -4394,7 +4256,7 @@ and stop fake requests using @code{enable_if} directive in your app.psgi.")
         (base32 "1l1yj1l25679x7cbpd27ii7s1f1ajpkspif9xqnl21hczrbmrbsv"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-plack" ,perl-plack)))
+     (list perl-plack))
     (home-page "https://metacpan.org/release/Plack-Test-ExternalServer")
     (synopsis "Run HTTP tests on external live servers")
     (description "This module allows your to run your Plack::Test tests
@@ -4415,7 +4277,7 @@ either mocked HTTP or a locally spawned server.")
         (base32 "0mvv9rqwrwlcfh8qrs0s47p85rhlnw15d4gbpyi802bddp0c6lry"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-test-sharedfork" ,perl-test-sharedfork)))
+     (list perl-test-sharedfork))
     (arguments `(#:tests? #f))          ;related to signaling in t/05_sigint.t
     (home-page "https://metacpan.org/release/Test-TCP")
     (synopsis "Testing TCP programs")
@@ -4435,13 +4297,13 @@ either mocked HTTP or a locally spawned server.")
         (base32 "1jsywlbxhqw39ij7s8vmgff5vys58vlfaq27072awacnxc65aal4"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-carp-assert-more" ,perl-carp-assert-more)
-       ("perl-html-form" ,perl-html-form)
-       ("perl-html-lint" ,perl-html-lint)
-       ("perl-http-server-simple" ,perl-http-server-simple)
-       ("perl-libwww" ,perl-libwww)
-       ("perl-test-longstring" ,perl-test-longstring)
-       ("perl-www-mechanize" ,perl-www-mechanize)))
+     (list perl-carp-assert-more
+           perl-html-form
+           perl-html-lint
+           perl-http-server-simple
+           perl-libwww
+           perl-test-longstring
+           perl-www-mechanize))
     (home-page "https://metacpan.org/release/Test-WWW-Mechanize")
     (synopsis "Testing-specific WWW::Mechanize subclass")
     (description "Test::WWW::Mechanize is a subclass of the Perl module
@@ -4461,21 +4323,20 @@ WWW::Mechanize that incorporates features for web application testing.")
         (base32 "1cdc2q16vs6fb335pzaislz2rx1ph9acaxyp7v5hv9xbwwddwfqq"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-catalyst-plugin-session" ,perl-catalyst-plugin-session)
-       ("perl-catalyst-plugin-session-state-cookie"
-        ,perl-catalyst-plugin-session-state-cookie)
-       ("perl-module-install" ,perl-module-install)
-       ("perl-test-exception" ,perl-test-exception)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-utf8" ,perl-test-utf8)))
+     (list perl-catalyst-plugin-session
+           perl-catalyst-plugin-session-state-cookie
+           perl-module-install
+           perl-test-exception
+           perl-test-pod
+           perl-test-utf8))
     (propagated-inputs
-     `(("perl-catalyst-runtime" ,perl-catalyst-runtime)
-       ("perl-class-load" ,perl-class-load)
-       ("perl-libwww" ,perl-libwww)
-       ("perl-moose" ,perl-moose)
-       ("perl-namespace-clean" ,perl-namespace-clean)
-       ("perl-test-www-mechanize" ,perl-test-www-mechanize)
-       ("perl-www-mechanize" ,perl-www-mechanize)))
+     (list perl-catalyst-runtime
+           perl-class-load
+           perl-libwww
+           perl-moose
+           perl-namespace-clean
+           perl-test-www-mechanize
+           perl-www-mechanize))
     (home-page "https://metacpan.org/release/Test-WWW-Mechanize-Catalyst")
     (synopsis "Test::WWW::Mechanize for Catalyst")
     (description "The Test::WWW::Mechanize::Catalyst module meshes the
@@ -4497,10 +4358,9 @@ testing of Catalyst applications without needing to start up a web server.")
          "0fsh2i05kf1kfavv2r9kmnjl7qlyqrd11ikc0qcqzzxsqzzjkg9r"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-pod" ,perl-test-pod)))
+     (list perl-test-pod))
     (propagated-inputs
-     `(("perl-plack" ,perl-plack)
-       ("perl-test-www-mechanize" ,perl-test-www-mechanize)))
+     (list perl-plack perl-test-www-mechanize))
     (home-page "https://metacpan.org/release/Test-WWW-Mechanize-PSGI")
     (synopsis "Test PSGI programs using WWW::Mechanize")
     (description "PSGI is a specification to decouple web server environments
@@ -4513,18 +4373,18 @@ applications.")
 (define-public perl-uri
   (package
     (name "perl-uri")
-    (version "1.76")
+    (version "5.05")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://cpan/authors/id/O/OA/OALDERS/"
                                  "URI-" version ".tar.gz"))
              (sha256
               (base32
-               "0gj1aj18k43kmzc3y1zhj5giinf8rksacf757r475xfna0fqxjdj"))))
+               "1v3r3ck67w272kzfgm1nd3wb41av1hlnza56vkxxj1i7s3917hd5"))))
     (build-system perl-build-system)
     (native-inputs
      ;; For tests.
-     `(("perl-test-needs" ,perl-test-needs)))
+     (list perl-test-needs))
     (license license:perl-license)
     (synopsis "Perl Uniform Resource Identifiers (absolute and relative)")
     (description
@@ -4536,21 +4396,19 @@ and updated by RFC 2732.")
 (define-public perl-uri-fetch
   (package
     (name "perl-uri-fetch")
-    (version "0.13")
+    (version "0.15")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://cpan/authors/id/N/NE/NEILB/"
                                   "URI-Fetch-" version ".tar.gz"))
               (sha256
                (base32
-                "0rw6xiqm70s218aii9id3hf8j3pz6n22xnwd8v9m1ff2bnh63c0d"))))
+                "0355rnw3xbgfwy9fgs6zrjmrsychzmwpkc9jcd9mrbkd9kr3k7rp"))))
     (build-system perl-build-system)
     (arguments
      `(#:tests? #f)) ; Tests require internet connection to succeed
     (inputs
-     `(("perl-class-errorhandler" ,perl-class-errorhandler)
-       ("perl-libwww" ,perl-libwww)
-       ("perl-uri" ,perl-uri)))
+     (list perl-class-errorhandler perl-libwww perl-uri))
     (home-page "https://metacpan.org/release/URI-Fetch")
     (synopsis "Smart URI fetching/caching")
     (description "@code{URI::Fetch} is a smart client for fetching HTTP pages,
@@ -4572,9 +4430,9 @@ and time-saving way.")
          "1mk3jv8x0mcq3ajrn9garnxd0jc7sw4pkwqi88r5apqvlljs84z2"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (propagated-inputs
-     `(("perl-uri" ,perl-uri)))
+     (list perl-uri))
     (home-page "https://metacpan.org/release/URI-Find")
     (synopsis "Find URIs in arbitrary text")
     (description "This module finds URIs and URLs (according to what URI.pm
@@ -4597,7 +4455,7 @@ URI::Find::Schemeless.  For a command-line interface, urifind is provided.")
          "1vs1wm80sq685944g1l4a0fxcbccc00c0f9648yabdmcf90hwsvf"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-uri" ,perl-uri)))
+     (list perl-uri))
     (home-page "https://metacpan.org/release/URI-ws")
     (synopsis "WebSocket support for URI package")
     (description "With this module, the URI package provides the same set of
@@ -4617,12 +4475,10 @@ methods for WebSocket URIs as it does for HTTP URIs.")
                 "1phibcmam2hklrddzj79l43va1gcqpyszbw21ynxq53ynmhjvbk8"))))
     (build-system perl-build-system)
     (inputs
-     `(("perl-uri" ,perl-uri)))
+     (list perl-uri))
     (native-inputs
-     `(("perl-test-pod-coverage" ,perl-test-pod-coverage)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-module-install" ,perl-module-install)
-       ("perl-json" ,perl-json)))
+     (list perl-test-pod-coverage perl-test-pod perl-module-install
+           perl-json))
     (home-page "https://metacpan.org/release/URI-Template")
     (synopsis "Object for handling URI templates")
     (description "This perl module provides a wrapper around URI templates as described in
@@ -4655,8 +4511,8 @@ RFC 6570.")
                                               (getenv "PERL5LIB")))
                        #t)))))
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)))
-    (inputs `(("curl" ,curl)))
+     (list perl-module-install))
+    (inputs (list curl))
     (synopsis "Perl extension interface for libcurl")
     (description
      "This is a Perl extension interface for the libcurl file downloading
@@ -4677,20 +4533,17 @@ library.")
         (base32 "0cb14m1vhaf0mgn2fqwi5hm72xhfi77hpq2g57swgy0w83x7m27b"))))
     (build-system perl-build-system)
     (native-inputs                      ;only for tests
-     `(("perl-cgi" ,perl-cgi)
-       ("perl-test-deep" ,perl-test-deep)
-       ("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-output" ,perl-test-output)
-       ("perl-test-warnings" ,perl-test-warnings)))
+     (list perl-cgi perl-test-deep perl-test-fatal perl-test-output
+           perl-test-warnings))
     (propagated-inputs
-     `(("perl-html-form" ,perl-html-form)
-       ("perl-html-parser" ,perl-html-parser)
-       ("perl-html-tree" ,perl-html-tree)
-       ("perl-http-message" ,perl-http-message)
-       ("perl-http-server-simple" ,perl-http-server-simple)
-       ("perl-libwww" ,perl-libwww)
-       ("perl-test-warn" ,perl-test-warn)
-       ("perl-uri" ,perl-uri)))
+     (list perl-html-form
+           perl-html-parser
+           perl-html-tree
+           perl-http-message
+           perl-http-server-simple
+           perl-libwww
+           perl-test-warn
+           perl-uri))
     (home-page "https://metacpan.org/release/WWW-Mechanize")
     (synopsis "Web browsing in a Perl object")
     (description "WWW::Mechanize is a Perl module for stateful programmatic
@@ -4710,24 +4563,24 @@ web browsing, used for automating interaction with websites.")
                 "1yxplx1q1qk2fvnzqrbk01lz26fy1lyhay51a3ky7q3jgh9p01rb"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-class-errorhandler" ,perl-class-errorhandler)
-       ("perl-datetime" ,perl-datetime)
-       ("perl-datetime-format-mail" ,perl-datetime-format-mail)
-       ("perl-datetime-format-w3cdtf" ,perl-datetime-format-w3cdtf)
-       ("perl-feed-find" ,perl-feed-find)
-       ("perl-module-install" ,perl-module-install)
-       ("perl-module-pluggable" ,perl-module-pluggable)
-       ("perl-uri-fetch" ,perl-uri-fetch)
-       ("perl-test-simple" ,perl-test-simple)
-       ("perl-xml-atom" ,perl-xml-atom)
-       ("perl-xml-rss" ,perl-xml-rss)))
+     (list perl-class-errorhandler
+           perl-datetime
+           perl-datetime-format-mail
+           perl-datetime-format-w3cdtf
+           perl-feed-find
+           perl-module-install
+           perl-module-pluggable
+           perl-uri-fetch
+           perl-test-simple
+           perl-xml-atom
+           perl-xml-rss))
     (inputs
-     `(("perl-data-page" ,perl-data-page)
-       ("perl-libwww" ,perl-libwww)
-       ("perl-uri" ,perl-uri)
-       ("perl-uri-template" ,perl-uri-template)
-       ("perl-xml-feed" ,perl-xml-feed)
-       ("perl-xml-libxml" ,perl-xml-libxml)))
+     (list perl-data-page
+           perl-libwww
+           perl-uri
+           perl-uri-template
+           perl-xml-feed
+           perl-xml-libxml))
     (home-page "https://metacpan.org/release/WWW-OpenSearch")
     (synopsis "Search A9 OpenSearch compatible engines")
     (description
@@ -4749,7 +4602,7 @@ http://opensearch.a9.com} compatible search engines.")
                "07m50dp5n5jxv3m93i55qvnd67a6g7cvbvlik115kmc8lbkh5da6"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-uri" ,perl-uri)))
+     (list perl-uri))
     (license license:perl-license)
     (synopsis "Perl database of robots.txt-derived permissions")
     (description
@@ -4763,24 +4616,30 @@ their web site.")
 (define-public python-feedparser
   (package
     (name "python-feedparser")
-    (version "6.0.2")
+    (version "6.0.8")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "feedparser" version ".tar.gz"))
        (sha256
-        (base32
-         "0x0hm9brh3j71645pydvlkrwxaaca9dnwd7xahwjyjaz882s200v"))))
+        (base32 "0qcnkyjjfj5gg5rhd1j4zzlqx5h34bma18zwgj68q95b0l543q2w"))))
     (build-system python-build-system)
+    (propagated-inputs
+     (list python-sgmllib3k))
     (arguments
-     '(#:tests? #f))
-    (home-page
-     "https://github.com/kurtmckee/feedparser")
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "python" "tests/runtests.py")))))))
+    (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 (list license:bsd-2           ; source code
                    license:freebsd-doc)))) ; documentation
 
 (define-public python2-feedparser
@@ -4808,8 +4667,8 @@ CDF, Atom 0.3, and Atom 1.0 feeds.")
                    license:freebsd-doc)))) ; documentation
 
 (define-public guix-data-service
-  (let ((commit "df2a0a73f1f35ea53ba6c07a6ad4c5347ba12b8f")
-        (revision "27"))
+  (let ((commit "f1d8d76c4d685bc5e938f495c762984fe2564371")
+        (revision "28"))
     (package
       (name "guix-data-service")
       (version (string-append "0.0.1-" revision "." (string-take commit 7)))
@@ -4821,7 +4680,7 @@ CDF, Atom 0.3, and Atom 1.0 feeds.")
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "1ss1prr98zdjkm97w24rd04lfnnvcw6xs0gwxqgd40briqisaa5g"))))
+                  "16ys402pvrzxm8kvhss4fhgfzbcxh70jndi50cpgz80qb510x3iq"))))
       (build-system gnu-build-system)
       (arguments
        '(#:modules ((guix build utils)
@@ -4880,23 +4739,23 @@ CDF, Atom 0.3, and Atom 1.0 feeds.")
                  #t)))
            (delete 'strip))))           ; As the .go files aren't compatible
       (inputs
-       `(("guix" ,guix)
-         ("guile-fibers" ,guile-fibers)
-         ("guile-json" ,guile-json-4)
-         ("guile-email" ,guile-email)
-         ("guile-prometheus" ,guile-prometheus)
-         ("guile-squee" ,guile-squee)
-         ("ephemeralpg" ,ephemeralpg)
-         ("util-linux" ,util-linux)
-         ("postgresql" ,postgresql-13)
-         ("sqitch" ,sqitch)))
+       (list guix
+             guile-fibers
+             guile-json-4
+             guile-email
+             guile-prometheus
+             guile-squee
+             ephemeralpg
+             util-linux
+             postgresql-13
+             sqitch))
       (native-inputs
-       `(("guile" ,@(assoc-ref (package-native-inputs guix) "guile"))
-         ("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("emacs-minimal" ,emacs-minimal)
-         ("emacs-htmlize" ,emacs-htmlize)
-         ("pkg-config" ,pkg-config)))
+       (list (car (assoc-ref (package-native-inputs guix) "guile"))
+             autoconf
+             automake
+             emacs-minimal
+             emacs-htmlize
+             pkg-config))
       (synopsis "Store and provide data about GNU Guix")
       (description
        "The Guix Data Service stores data about GNU Guix, and provides this
@@ -4924,9 +4783,7 @@ PostgreSQL database.")
      `(#:tests? #f))         ;tests require bundling googletest sources
     ;; The release tarball lacks the generated files.
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (home-page "https://github.com/google/gumbo-parser")
     (synopsis "HTML5 parsing library")
     (description
@@ -4992,14 +4849,14 @@ embedded_plugins =
      `(("pkg-config" ,pkg-config)
        ("python" ,python-wrapper)))
     (inputs
-     `(("jansson" ,jansson)
-       ("libxml2" ,libxml2)
-       ("libyaml" ,libyaml)
-       ("openssl" ,openssl)
-       ("pcre" ,pcre)
-       ("zlib" ,zlib)
-       ;; For plugins.
-       ("python" ,python)))
+     (list jansson
+           libxml2
+           libyaml
+           openssl
+           pcre
+           zlib
+           ;; For plugins.
+           python))
     (home-page "https://uwsgi-docs.readthedocs.org/")
     (synopsis "Application container server")
     (description
@@ -5027,12 +4884,12 @@ It uses the uwsgi protocol for all the networking/interprocess communications.")
            (delete-file-recursively "modules")
            #t))))
     (inputs
-     `(("oniguruma" ,oniguruma)))
+     (list oniguruma))
     (native-inputs
-     `(;; TODO fix gems to generate documentation
-       ;;("ruby" ,ruby)
-       ;;("bundler" ,bundler)
-       ("valgrind" ,valgrind)))
+     (list ;; TODO fix gems to generate documentation
+           ;;("ruby" ,ruby)
+           ;;("bundler" ,bundler)
+           valgrind))
     (build-system gnu-build-system)
     (home-page "https://stedolan.github.io/jq/")
     (synopsis "Command-line JSON processor")
@@ -5084,13 +4941,17 @@ fast and flexible way of exploring HTML from the terminal.")
         (base32 "0bqizz69hxk8rn4z57asz1d45vizl1rj6i5k3rzxn2x3qcik514h"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("gobject-introspection" ,gobject-introspection)
-       ;; For check phase.
-       ("glib-networking" ,glib-networking)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("pkg-config" ,pkg-config)))
+     (list gobject-introspection
+           ;; For check phase.
+           glib-networking gsettings-desktop-schemas pkg-config))
     (inputs
-     `(("libsoup" ,libsoup)))
+     `(("libsoup" ,libsoup-minimal-2)))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'set-home-for-tests
+           (lambda _
+             (setenv "HOME" "/tmp"))))))
     (home-page "https://gitlab.com/groups/uhttpmock")
     (synopsis "Library for mocking web service APIs which use HTTP or HTTPS")
     (description
@@ -5188,9 +5049,7 @@ libraries.")
          "1n2794y2l0c8nv8z2pxwfnbn882987ifmxjv60zdxkhcndhswarj"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("netsurf-buildsystem" ,netsurf-buildsystem)
-       ("pkg-config" ,pkg-config)
-       ("perl" ,perl)))                 ;for test harness
+     (list netsurf-buildsystem pkg-config perl))                 ;for test harness
     (arguments netsurf-buildsystem-arguments)
     (home-page "https://www.netsurf-browser.org/projects/libparserutils/")
     (synopsis "Parser building library")
@@ -5214,13 +5073,13 @@ C.  It is developed as part of the NetSurf project.")
        (patches (search-patches "hubbub-sort-entities.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("netsurf-buildsystem" ,netsurf-buildsystem)
-       ("pkg-config" ,pkg-config)
-       ("doxygen" ,doxygen)
-       ("json-c" ,json-c-0.12)      ; check whether json-c-0.12 can be removed
-       ("perl" ,perl)))
+     (list netsurf-buildsystem
+           pkg-config
+           doxygen
+           json-c-0.12 ; check whether json-c-0.12 can be removed
+           perl))
     (propagated-inputs
-     `(("libparserutils" ,libparserutils))) ;for libhubbub.pc
+     (list libparserutils)) ;for libhubbub.pc
     (arguments netsurf-buildsystem-arguments)
     (home-page "https://www.netsurf-browser.org/projects/hubbub/")
     (synopsis "HTML5 compliant parsing library")
@@ -5331,18 +5190,18 @@ NetSurf project.")
        ("perl-yaml-tiny" ,perl-yaml-tiny)
        ("po4a" ,po4a)))
     (propagated-inputs
-     `(("perl-cgi-formbuilder" ,perl-cgi-formbuilder)
-       ("perl-cgi-session" ,perl-cgi-session)
-       ("perl-html-parser" ,perl-html-parser)
-       ("perl-html-scrubber" ,perl-html-scrubber)
-       ("perl-html-template" ,perl-html-template)
-       ("perl-json" ,perl-json)
-       ("perl-mail-sendmail" ,perl-mail-sendmail)
-       ("perl-text-markdown-discount" ,perl-text-markdown-discount)
-       ("perl-timedate" ,perl-timedate)
-       ("perl-uri" ,perl-uri)
-       ("perl-xml-simple" ,perl-xml-simple)
-       ("perl-yaml-libyaml" ,perl-yaml-libyaml)))
+     (list perl-cgi-formbuilder
+           perl-cgi-session
+           perl-html-parser
+           perl-html-scrubber
+           perl-html-template
+           perl-json
+           perl-mail-sendmail
+           perl-text-markdown-discount
+           perl-timedate
+           perl-uri
+           perl-xml-simple
+           perl-yaml-libyaml))
     (home-page "https://ikiwiki.info/")
     (synopsis "Wiki compiler, capable of generating HTML")
     (description
@@ -5365,9 +5224,7 @@ commenting.")
          "0p0c2q9lsj4vs97aa7vjllfhw33zv3dpysdkjblzhib6dpfs2alv"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("netsurf-buildsystem" ,netsurf-buildsystem)
-       ("pkg-config" ,pkg-config)
-       ("check" ,check-0.14)))          ;for tests
+     (list netsurf-buildsystem pkg-config check-0.14))          ;for tests
     (arguments netsurf-buildsystem-arguments)
     (home-page "https://www.netsurf-browser.org/projects/libwapcaplet/")
     (synopsis "String internment library")
@@ -5388,15 +5245,18 @@ developed as part of the Netsurf project.")
                            "libcss-" version "-src.tar.gz"))
        (sha256
         (base32
-         "1p66sdiiqm7w4jkq23hsf08khsnmq93hshh9f9m8sbirjdpf3p6j"))))
+         "1p66sdiiqm7w4jkq23hsf08khsnmq93hshh9f9m8sbirjdpf3p6j"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           ;; This can be removed with the next release.
+           (substitute* "src/select/computed.c"
+             (("css_unit unit;") "css_unit unit = CSS_UNIT_PX;"))))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("netsurf-buildsystem" ,netsurf-buildsystem)
-       ("pkg-config" ,pkg-config)
-       ("perl" ,perl)))
+     (list netsurf-buildsystem pkg-config perl))
     (propagated-inputs                  ;needed for libcss.pc
-     `(("libparserutils" ,libparserutils)
-       ("libwapcaplet" ,libwapcaplet)))
+     (list libparserutils libwapcaplet))
     (arguments netsurf-buildsystem-arguments)
     (home-page "https://www.netsurf-browser.org/projects/libcss/")
     (synopsis "CSS parser and selection library")
@@ -5419,18 +5279,17 @@ written in C.  It is developed as part of the NetSurf project.")
          "0jpg5hx3y0mdxk5szd47dyijqimd2321brbqk2620pp5f4j0gvlq"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("netsurf-buildsystem" ,netsurf-buildsystem)
-       ("pkg-config" ,pkg-config)
-       ("perl" ,perl)                   ;for test harness
-       ("perl-libxml" ,perl-libxml)
-       ("perl-switch" ,perl-switch)
-       ("perl-xml-xpath" ,perl-xml-xpath)))
+     (list netsurf-buildsystem
+           pkg-config
+           perl ;for test harness
+           perl-libxml
+           perl-switch
+           perl-xml-xpath))
     (inputs
-     `(("libparserutils" ,libparserutils)
-       ("libwapcaplet" ,libwapcaplet)))
+     (list libparserutils libwapcaplet))
     (propagated-inputs
-     `(("expat" ,expat)                 ;needed for headers and linking
-       ("hubbub" ,hubbub)))             ;for libdom.pc
+     (list expat ;needed for headers and linking
+           hubbub))             ;for libdom.pc
     (arguments
      `(#:tests? #f                 ;TODO: re-enable. tests take a looong time.
        ,@netsurf-buildsystem-arguments))
@@ -5455,13 +5314,11 @@ developed as part of the NetSurf project.")
          "10bpkmvfpydj74im3r6kqm9vnvgib6afy0alx71q5n0w5yawy39c"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("netsurf-buildsystem" ,netsurf-buildsystem)
-       ("pkg-config" ,pkg-config)
-       ("gperf" ,gperf-3.0)))
+     (list netsurf-buildsystem pkg-config gperf-3.0))
     (inputs
-     `(("libwapcaplet" ,libwapcaplet)))
+     (list libwapcaplet))
     (propagated-inputs
-     `(("libdom" ,libdom)))             ;for libsvgtiny.pc
+     (list libdom))             ;for libsvgtiny.pc
     (arguments netsurf-buildsystem-arguments)
     (home-page "https://www.netsurf-browser.org/projects/libsvgtiny/")
     (synopsis "Library for parsing SVG files")
@@ -5486,7 +5343,7 @@ project.")
          "0krjg69a2amxjsahdgm3wmy9ngnyr3gfs2a1zhdlbvb0z1jr7i3r"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("netsurf-buildsystem" ,netsurf-buildsystem)))
+     (list netsurf-buildsystem))
     (arguments netsurf-buildsystem-arguments)
     (home-page "https://www.netsurf-browser.org/projects/libnsbmp/")
     (synopsis "Decoding library for BMP and ICO files")
@@ -5509,7 +5366,7 @@ written in C.  It is developed as part of the NetSurf project.")
          "0jwshypgmx16xlsbx3d8njk8a5khazlplca5mxd3rdbhrlsabbly"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("netsurf-buildsystem" ,netsurf-buildsystem)))
+     (list netsurf-buildsystem))
     (arguments netsurf-buildsystem-arguments)
     (home-page "https://www.netsurf-browser.org/projects/libnsgif/")
     (synopsis "Decoding library for GIF files")
@@ -5532,11 +5389,11 @@ C.  It is developed as part of the NetSurf project.")
          "1l2k0kdv9iv18svhv360vszjavhl4g09cp8a8yb719pgsylxr67w"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("netsurf-buildsystem" ,netsurf-buildsystem)
-       ("pkg-config" ,pkg-config)
-       ("check" ,check)                 ; For tests
-       ("bison" ,bison)
-       ("flex" ,flex)))
+     (list netsurf-buildsystem
+           pkg-config
+           check ; For tests
+           bison
+           flex))
     (arguments netsurf-buildsystem-arguments)
     (home-page "https://www.netsurf-browser.org/")
     (synopsis "Logging library")
@@ -5560,7 +5417,7 @@ client applications.  It is developed as part of the NetSurf project.")
          "1w5fyy2i60a3v3if3iqcn9sy9sycx6966rcx53v85gja6hb6a33r"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("netsurf-buildsystem" ,netsurf-buildsystem)))
+     (list netsurf-buildsystem))
     (arguments netsurf-buildsystem-arguments)
     (home-page "https://www.netsurf-browser.org/")
     (synopsis "Utility library for NetSurf")
@@ -5583,7 +5440,7 @@ developed as part of the NetSurf project.")
          "02q28n5i6fwqcz1nn167rb71k1q95mx38mfah6zi1lvqrc2q5ifk"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("netsurf-buildsystem" ,netsurf-buildsystem)))
+     (list netsurf-buildsystem))
     (arguments netsurf-buildsystem-arguments)
     (home-page "https://www.netsurf-browser.org/")
     (synopsis "Library to generate a static Public Suffix List")
@@ -5606,9 +5463,7 @@ Public Suffix List.  It is developed as part of the NetSurf project.")
          "1cqwgwca49jvmijwiyaab2bwxicgxdrnlpinf8kp3nha02nm73ad"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("netsurf-buildsystem" ,netsurf-buildsystem)
-       ("bison" ,bison)
-       ("flex" ,flex)))
+     (list netsurf-buildsystem bison flex))
     (arguments
      (substitute-keyword-arguments netsurf-buildsystem-arguments
        ((#:make-flags flags)
@@ -5638,14 +5493,14 @@ w3c webidl files and a binding configuration file.")
                                 "netsurf-message-timestamp.patch"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("netsurf-buildsystem" ,netsurf-buildsystem)
-       ("nsgenbind" ,nsgenbind)
-       ("libidn" ,libidn)               ;only for tests
-       ("check" ,check)
-       ("perl" ,perl)
-       ("perl-html-parser" ,perl-html-parser)
-       ("pkg-config" ,pkg-config)
-       ("xxd" ,xxd)))
+     (list netsurf-buildsystem
+           nsgenbind
+           libidn ;only for tests
+           check
+           perl
+           perl-html-parser
+           pkg-config
+           xxd))
     (inputs
      `(("curl" ,curl)
        ("gtk+" ,gtk+)
@@ -5719,7 +5574,7 @@ w3c webidl files and a binding configuration file.")
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* '("test/bloom.c" "test/hashtable.c")
                (("/usr/share/dict/words")
-                (string-append (assoc-ref inputs "miscfiles") "/share/web2")))
+                (search-input-file inputs "/share/web2")))
              #t))
          (add-after 'install 'install-more
            (lambda* (#:key outputs #:allow-other-keys)
@@ -5776,10 +5631,7 @@ handling many of the web standards in use today.")
                (with-directory-excursion man
                  (invoke "gzip" "elvi.1sr"))))))))
     (inputs
-     `(("perl" ,perl)
-       ("perl-www-opensearch" ,perl-www-opensearch)
-       ("perl-html-parser" ,perl-html-parser)
-       ("perl-libwww" ,perl-libwww)))
+     (list perl perl-www-opensearch perl-html-parser perl-libwww))
     (synopsis "Unix command line interface to the www")
     (description "Surfraw (Shell Users' Revolutionary Front Rage Against the Web)
 provides a unix command line interface to a variety of popular www search engines
@@ -5790,28 +5642,29 @@ and similar services.")
 (define-public darkhttpd
   (package
     (name "darkhttpd")
-    (version "1.12")
+    (version "1.13")
     (source
      (origin
-       (method url-fetch)
-       (uri (string-append "https://unix4lyfe.org/darkhttpd/darkhttpd-"
-                           version ".tar.bz2"))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/emikulic/darkhttpd")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
        (sha256
-        (base32
-         "0185wlyx4iqiwfigp1zvql14zw7gxfacncii3d15yaxk4av1f155"))))
+        (base32 "0w11xq160q9yyffv4mw9ncp1n0dl50d9plmwxb0yijaaxls9i4sk"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:make-flags '("CC=gcc")
+     `(#:make-flags
+       (list (string-append "CC=" ,(cc-for-target)))
        #:tests? #f ; No test suite
        #:phases
        (modify-phases %standard-phases
-         (delete 'configure)
+         (delete 'configure)            ; no configure script
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (install-file "darkhttpd"
                            (string-append (assoc-ref outputs "out")
-                                          "/bin"))
-             #t)))))
+                                          "/bin")))))))
     (synopsis "Simple static web server")
     (description "darkhttpd is a simple static web server.  It is
 standalone and does not need inetd or ucspi-tcp.  It does not need any
@@ -5822,27 +5675,25 @@ config files---you only have to specify the www root.")
 (define-public goaccess
   (package
     (name "goaccess")
-    (version "1.5.1")
+    (version "1.5.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://tar.goaccess.io/goaccess-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "03wp75n1krv8g643q00gcv1ikmzwwh8jjqmph0wxww1bwrw7whc8"))
+                "12hwmd9cn7yy7vj92110skjaslpxkn05msb9wj228qmjjf9jzkm0"))
               (modules '((guix build utils)))
               (snippet '(begin
                           (substitute* "src/error.h"
                             (("__DATE__") "\"1970-01-01\"")
-                            (("__TIME__") "\"00:00:00\""))
-                          #t))))
+                            (("__TIME__") "\"00:00:00\""))))))
     (build-system gnu-build-system)
     (inputs
      ;; TODO: Add dependency on geoip-tools.
-     `(("glib" ,glib)
-       ("ncurses" ,ncurses)))
+     (list glib ncurses))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://goaccess.io")
     (synopsis "Analyze Web server logs in real time")
     (description
@@ -5855,14 +5706,14 @@ on the fly.")
 (define-public hitch
   (package
     (name "hitch")
-    (version "1.7.0")
+    (version "1.7.2")
     (home-page "https://hitch-tls.org/")
     (source (origin
               (method url-fetch)
               (uri (string-append home-page "source/hitch-" version ".tar.gz"))
               (sha256
                (base32
-                "1i75giwyr66ip8xsvk3gg5xdbxnmcabgxz8dqi06c58mw7qzhzn9"))))
+                "118p3a8wjvr0yhldpd1zm7d2cmgaw4vmyz9ib8m64z18qsz5rmnw"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
@@ -5894,10 +5745,10 @@ on the fly.")
        ("curl" ,curl)
        ("egrep" ,grep)
        ("lsof" ,lsof)
+       ("procps" ,procps)
        ("python" ,python)))
     (inputs
-     `(("libev" ,libev)
-       ("openssl" ,openssl)))
+     (list libev openssl))
     (synopsis "Scalable TLS proxy")
     (description
      "Hitch is a performant TLS proxy based on @code{libev}.  It terminates
@@ -5947,43 +5798,41 @@ tools like SSH (Secure Shell) to reach the outside world.")
 (define-public stunnel
   (package
   (name "stunnel")
-  (version "5.59")
+  (version "5.61")
   (source
     (origin
       (method url-fetch)
       (uri (string-append "https://www.stunnel.org/downloads/stunnel-"
                           version ".tar.gz"))
       (sha256
-       (base32 "17yf2n47j5hw2y9527mrkx3j7q9jk5vvg46m3hgp1wg8dggpcxqk"))))
+       (base32 "0yjx07r5wc987s4z0wm37381fa3az2s4mrhyjxypx3rd92k0rsli"))))
   (build-system gnu-build-system)
+  (arguments
+   (list #:configure-flags
+         #~(list (string-append "--with-ssl="
+                                #$(this-package-input "openssl")))
+         #:phases
+         #~(modify-phases %standard-phases
+             (add-after 'unpack 'patch-output-directories
+               (lambda _
+                 ;; Some (not all) Makefiles have a hard-coded incorrect docdir.
+                 (substitute* (list "Makefile.in"
+                                    "doc/Makefile.in"
+                                    "tools/Makefile.in")
+                   (("/doc/stunnel")
+                    (string-append "/doc/" #$name "-" #$version)))))
+             (add-after 'install 'prune-documentation
+               (lambda _
+                 (let* ((doc (string-append #$output "/share/doc/"
+                                            #$name "-" #$version)))
+                   (for-each delete-file (find-files doc "^INSTALL"))))))))
   (native-inputs
    ;; For tests.
-   `(("iproute" ,iproute)
-     ("netcat" ,netcat)
-     ("procps" ,procps)))
-  (inputs `(("openssl" ,openssl)))
-  (arguments
-   `(#:configure-flags
-     (list (string-append "--with-ssl=" (assoc-ref %build-inputs "openssl")))
-     #:phases
-     (modify-phases %standard-phases
-       (add-after 'unpack 'patch-output-directories
-         (lambda _
-           ;; Some (not all) Makefiles have a hard-coded incorrect docdir.
-           (substitute* (list "Makefile.in"
-                              "doc/Makefile.in"
-                              "tools/Makefile.in")
-             (("/doc/stunnel")
-              (string-append "/doc/" ,name "-" ,version)))
-           #t))
-       (add-before 'check 'patch-tests
-         (lambda _
-           (substitute* "tests/make_test"
-             (("/bin/sh ")
-              (string-append (which "sh") " ")))
-           ;; test requires networking
-           (delete-file "tests/recipes/055_socket_closed")
-           #t)))))
+   (list iproute
+         netcat
+         procps
+         python))
+  (inputs (list openssl))
   (home-page "https://www.stunnel.org")
   (synopsis "TLS proxy for clients or servers")
   (description "Stunnel is a proxy designed to add TLS encryption
@@ -5997,30 +5846,29 @@ deployments.")
   (package
     (name "varnish")
     (home-page "https://varnish-cache.org/")
-    (version "7.0.0")
+    (version "7.0.1")
     (source (origin
               (method url-fetch)
               (uri (string-append home-page "_downloads/varnish-" version ".tgz"))
               (sha256
                (base32
-                "11z0pa618lh925ih67wmp1gqk7i46l486j4spjy71g1n3w5mqylc"))))
+                "0q265fzarz5530g8lasvfpgks8z1kq1yh7rn88bn2qfly3pmpry4"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags (list (string-append "LDFLAGS=-Wl,-rpath=" %output "/lib")
                                (string-append "CC=" ,(cc-for-target))
                                ;; Use absolute path of GCC so it's found at runtime.
                                (string-append "PTHREAD_CC="
-                                              (assoc-ref %build-inputs "gcc")
-                                              "/bin/gcc")
+                                              (search-input-file %build-inputs
+                                                                 "/bin/gcc"))
                                "--localstatedir=/var")
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'use-absolute-file-names
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let* ((bash (assoc-ref inputs "bash-minimal"))
-                    (sh (string-append bash "/bin/sh"))
-                    (coreutils (assoc-ref inputs "coreutils"))
-                    (rm (string-append coreutils "/bin/rm")))
+           (lambda* (#:key native-inputs inputs #:allow-other-keys)
+             (let* ((inpts (or native-inputs inputs))
+                    (sh (search-input-file inpts "/bin/sh"))
+                    (rm (search-input-file inpts "/bin/rm")))
                (substitute* '("bin/varnishtest/vtc_varnish.c"
                               "bin/varnishtest/vtc_process.c"
                               "bin/varnishtest/vtc_haproxy.c"
@@ -6050,17 +5898,15 @@ deployments.")
                  ;; Make sure 'crti.o' et.al is found.
                  `("LIBRARY_PATH" ":" prefix (,LIBRARY_PATH)))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python-sphinx" ,python-sphinx)
-       ("rst2man" ,python-docutils)))
+     (list pkg-config python-sphinx python-docutils))
     (inputs
-     `(("bash-minimal" ,bash-minimal)
-       ("coreutils" ,coreutils)
-       ("jemalloc" ,jemalloc)
-       ("ncurses" ,ncurses)
-       ("pcre2" ,pcre2)
-       ("python" ,python)
-       ("readline" ,readline)))
+     (list bash-minimal
+           coreutils
+           jemalloc
+           ncurses
+           pcre2
+           python
+           readline))
     (synopsis "Web application accelerator")
     (description
      "Varnish is a high-performance HTTP accelerator.  It acts as a caching
@@ -6086,18 +5932,15 @@ configuration language.")
                 "0qq5g6bbd1a1ml1wk8jj9z39a899jzqbf7aizr3pvyz0f4kz8mis"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-
-       ;; For bootstrapping.
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-
-       ;; For generating manuals.
-       ("rst2man" ,python-docutils)))
+     (list pkg-config
+           ;; For bootstrapping.
+           autoconf
+           automake
+           libtool
+           ;; For generating manuals.
+           python-docutils))
     (inputs
-     `(("python" ,python)
-       ("varnish" ,varnish)))
+     (list python varnish))
     (synopsis "Collection of Varnish modules")
     (description
      "This package provides a collection of modules (@dfn{vmods}) for the Varnish
@@ -6124,10 +5967,7 @@ additional capabilities.")
      `(#:configure-flags '("--with-loadavg")
        #:tests? #f))                    ; no tests
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (home-page "https://github.com/openSUSE/xinetd")
     (synopsis "Internet services daemon")
     (description "@code{xinetd}, a more secure replacement for @code{inetd},
@@ -6140,7 +5980,7 @@ used to start services with both privileged and non-privileged port numbers.")
 (define-public tidy-html
   (package
     (name "tidy-html")
-    (version "5.7.28")
+    (version "5.8.0")
     (source
      (origin
        (method git-fetch)
@@ -6150,7 +5990,7 @@ used to start services with both privileged and non-privileged port numbers.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "01k5sqwgcsr26i8031v1yr2r8qcy9a5w7sj800660haszgfbjz2f"))))
+         "1vd50q6xqxvidaclinsm89p6r0494wj72j1gpk32vkkhhx15cddz"))))
     (build-system cmake-build-system)
     (outputs '("out"
                "static"))               ; 1.3MiB of .a files
@@ -6173,7 +6013,7 @@ used to start services with both privileged and non-privileged port numbers.")
                          (find-files lib "\\.a$"))
                #t))))))
     (native-inputs
-     `(("libxslt" ,libxslt)))
+     (list libxslt))
     (home-page "http://www.html-tidy.org/")
     (synopsis "HTML Tidy with HTML5 support")
     (description
@@ -6234,11 +6074,8 @@ functions of Tidy.")
                  `("PATH" ":" prefix (,mbed)))))))))
     (inputs
      ;; TODO: package "hiawatha-monitor", an optional dependency of "hiawatha".
-     `(("libxslt" ,libxslt)
-       ("libxml2" ,libxml2)
-       ("mbedtls-apache" ,mbedtls-for-hiawatha)
-       ("nghttp2" ,nghttp2 "lib")
-       ("zlib" ,zlib)))
+     (list libxslt libxml2 mbedtls-for-hiawatha
+           `(,nghttp2 "lib") zlib))
     (home-page "https://www.hiawatha-webserver.org")
     (synopsis "Webserver with focus on security")
     (description
@@ -6260,11 +6097,8 @@ exploit attempts.")
          "1dc92lnk846hpilslrqnr63x55cxll4qx88gif8fm521gv9cbyvr"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-decorator" ,python-decorator)
-       ("python-flask" ,python-flask)
-       ("python-itsdangerous" ,python-itsdangerous)
-       ("python-markupsafe" ,python-markupsafe)
-       ("python-six" ,python-six)))
+     (list python-decorator python-flask python-itsdangerous
+           python-markupsafe python-six))
     (home-page "https://github.com/Runscope/httpbin")
     (synopsis "HTTP request and response service")
     (description "Testing an HTTP Library can become difficult sometimes.
@@ -6286,9 +6120,7 @@ JSON-encoded.")
          "1y0v2v7xpzpyd4djwp7ad8ifnlxp8r1y6dfbxg5ckzvllkgridn5"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-httpbin" ,python-httpbin)
-       ("python-pytest" ,python-pytest)))
+     (list python-six python-httpbin python-pytest))
     (home-page
      "https://github.com/kevin1024/pytest-httpbin")
     (synopsis
@@ -6372,13 +6204,13 @@ message stream (in a web server that is per connection).")
 (define-public python-httpretty
   (package
     (name "python-httpretty")
-    (version "1.0.5")
+    (version "1.1.4")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "httpretty" version))
        (sha256
-        (base32 "1dg0nfl7i9kjnq98ww98x2afzav4mpgiwzvjc43ily1x9my94g75"))))
+        (base32 "0s1vjdaf3pk2xd0hvi5f7p3jm2rgwpbc734jdp9r50m1smfhxpi0"))))
     (build-system python-build-system)
     (arguments
      `(#:tests? #f  ; Tests require network access.
@@ -6387,16 +6219,15 @@ message stream (in a web server that is per connection).")
          (replace 'check
            (lambda* (#:key tests? #:allow-other-keys)
              (when tests?
-               (invoke "nosetests"))
-             #t)))))
+               (invoke "nosetests")))))))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-eventlet" ,python-eventlet)
-       ("python-nose" ,python-nose)
-       ("python-rednose" ,python-rednose)
-       ("python-requests" ,python-requests)
-       ("python-sure" ,python-sure)
-       ("python-tornado" ,python-tornado)))
+     (list python-coverage
+           python-eventlet
+           python-nose
+           python-rednose
+           python-requests
+           python-sure
+           python-tornado))
     (home-page "https://httpretty.readthedocs.io")
     (synopsis "HTTP client mock for Python")
     (description "@code{httpretty} is a helper for faking web requests,
@@ -6465,17 +6296,15 @@ command-line arguments or read from stdin.")
                       "not test_get_item_with_kwargs"
                       " and not test_ia")))))))
     (propagated-inputs
-     `(("python-requests" ,python-requests)
-       ("python-jsonpatch" ,python-jsonpatch-0.4)
-       ("python-docopt" ,python-docopt)
-       ("python-clint" ,python-clint)
-       ("python-six" ,python-six)
-       ("python-schema" ,python-schema-0.5)
-       ("python-backports-csv" ,python-backports-csv)))
+     (list python-requests
+           python-jsonpatch-0.4
+           python-docopt
+           python-clint
+           python-six
+           python-schema-0.5
+           python-backports-csv))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-capturelog" ,python-pytest-capturelog)
-       ("python-responses" ,python-responses)))
+     (list python-pytest python-pytest-capturelog python-responses))
     (home-page "https://github.com/jjjake/internetarchive")
     (synopsis "Command-line interface to archive.org")
     (description "@code{ia} is a command-line tool for using
@@ -6497,12 +6326,12 @@ internetarchive python module for programmatic access to archive.org.")
            "0zlkzqnpz7a4iavsq5vaz0nf5nr7qm5znpg1vlpz6rwnx6hikjdb"))))
       (build-system python-build-system)
       (propagated-inputs
-       `(("python-docopt" ,python-docopt)
-         ("python-pygments" ,python-pygments)
-         ("python-requests" ,python-requests)
-         ("python-nose" ,python-nose)
-         ("python-lxml" ,python-lxml)
-         ("python-pyaml" ,python-pyaml)))
+       (list python-docopt
+             python-pygments
+             python-requests
+             python-nose
+             python-lxml
+             python-pyaml))
       (inputs
        `(("test-clf"
           ,(origin
@@ -6589,10 +6418,8 @@ Instagram and YouTube.")
          "1j97dc9a4yhpscwadhv5dxp7036pnrxiaky18l8ddr3pvxdjvkxs"))))
     (build-system python-build-system)
     (inputs
-     `(("python-beautifulsoup4" ,python-beautifulsoup4)
-       ("python-dnspython" ,python-dnspython)
-       ("python-pyxdg" ,python-pyxdg)
-       ("python-requests" ,python-requests)))
+     (list python-beautifulsoup4 python-dnspython python-pyxdg
+           python-requests))
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("python-pytest" ,python-pytest)
@@ -6602,9 +6429,8 @@ Instagram and YouTube.")
      `(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+           (lambda* (#:key tests? #:allow-other-keys)
              (when tests?
-               (add-installed-pythonpath inputs outputs)
                (invoke "py.test" "tests")))))))
     (home-page "https://linkchecker.github.io/linkchecker/")
     (synopsis "Check websites for broken links")
@@ -6645,14 +6471,14 @@ file links.")
         ("rust-percent-encoding" ,rust-percent-encoding-2)
         ("rust-url" ,rust-url-2))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("atk" ,atk)
-       ("cairo" ,cairo)
-       ("gdk-pixbuf" ,gdk-pixbuf)
-       ("gtk+" ,gtk+)
-       ("libressl" ,libressl)
-       ("pango" ,pango)))
+     (list atk
+           cairo
+           gdk-pixbuf
+           gtk+
+           libressl
+           pango))
     (home-page "https://git.sr.ht/~julienxx/castor")
     (synopsis "Graphical client for plain-text protocols")
     (description
@@ -6661,6 +6487,92 @@ Rust with GTK.  It currently supports the Gemini, Gopher and Finger
 protocols.")
     (license license:expat)))
 
+(define-public clearsilver
+  (package
+    (name "clearsilver")
+    (version "0.11.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/blong42/clearsilver/")
+             (commit "fbe4926ba9a756163fd1539ff6eee3522cf1f5d8")))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "02ad43gmqwy7wmh71mh5pk6gl1lax76sjnf42sknj0ijdga170kl"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list
+      #:tests? #false ;there is not test target and tests are run during build
+      #:configure-flags
+      '(list "--disable-java" "--disable-python")
+      #:phases
+      '(modify-phases %standard-phases
+         (add-after 'unpack 'prepare-streamhtmlparser
+           (lambda* (#:key inputs #:allow-other-keys)
+             (copy-recursively (assoc-ref inputs "streamhtmlparser")
+                               (string-append (getcwd) "/streamhtmlparser"))
+             (for-each make-file-writable
+                       (find-files "streamhtmlparser" "."
+                                   #:directories? #t))))
+         (add-after 'unpack 'pre-bootstrap
+           (lambda _
+             ;; We don't need the Java stuff
+             (substitute* "configure.in"
+               (("AC_JNI_INCLUDE_DIR") ""))
+
+             ;; This script will call /bin/sh, so it's easier to just
+             ;; bootstrap manually.
+             (delete-file "autogen.sh")
+             (substitute* "rules.mk.in"
+               (("@PTHREAD_LIBS@") "-lpthread")
+               (("@PTHREAD_CFLAGS@") "")
+               (("@PTHREAD_CC@") "gcc"))
+
+             ;; The GNU variadic macros actually work, whereas the C99
+             ;; implementation fails to build.
+             (substitute* "util/neo_misc.h"
+               (("#define USE_C99_VARARG_MACROS") "#define USE_GNUC_VARARG_MACROS"))
+
+             (setenv "CFLAGS" "-fPIC")
+
+             ;; This directory is created some time during the build, but the
+             ;; early libtool processes assume the directory exists.  When
+             ;; they are run first they copy the libraries themselves to the
+             ;; file "libs" instead of moving them into the directory.
+             (mkdir-p "libs")))
+         (add-after 'build 'build-documentation
+           (lambda _ (invoke "make" "man")))
+         (add-after 'install 'install-streamhtmlparser
+           (lambda* (#:key make-flags parallel-build? #:allow-other-keys)
+             (with-directory-excursion "streamhtmlparser"
+               (apply invoke "make" "-j" (if parallel-build?
+                                             (number->string (parallel-job-count))
+                                             "1")
+                      "install" make-flags)))))))
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("libtool" ,libtool)
+       ("python" ,python-2)
+       ("streamhtmlparser"
+        ,(let ((commit "551109ac02a31957a0e776416774c7b515b4b7c7"))
+           (origin
+             (method git-fetch)
+             (uri (git-reference
+                   (url "https://github.com/google/streamhtmlparser/")
+                   (commit commit)))
+             (file-name (git-file-name "streamhtmlparser" commit))
+             (sha256
+              (base32
+               "0bmrdakk930q3m8fmq0xcy7n7cdvlk1xma4z9204919hvb1gk9md")))))))
+    (home-page "https://github.com/blong42/clearsilver")
+    (synopsis "CGI kit and HTML templating system")
+    (description
+     "This package includes Clearsilver, the CGI kit and HTML templating
+system.")
+    (license license:bsd-3)))
+
 (define-public python-py-ubjson
   (package
     (name "python-py-ubjson")
@@ -6700,8 +6612,7 @@ encoder/decoder based on the draft-12 specification for UBJSON.")
                   #t))))
     (build-system ant-build-system)
     (inputs
-     `(("java-commons-daemon" ,java-commons-daemon)
-       ("java-ecj" ,java-ecj)))
+     (list java-commons-daemon java-ecj))
     (arguments
      `(#:build-target "deploy"
        #:tests? #f; requires downloading some files.
@@ -7199,8 +7110,7 @@ infrastructure")))
        #: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)))))
+     (list java-eclipse-jetty-util java-javaee-servletapi))))
 
 (define-public java-eclipse-jetty-servlet
   (package
@@ -7275,10 +7185,10 @@ container.")))
              (chdir "jetty-xml")
              #t)))))
     (inputs
-     `(("java-eclipse-jetty-util" ,java-eclipse-jetty-util)))
+     (list java-eclipse-jetty-util))
     (native-inputs
-     `(("java-eclipse-jetty-io" ,java-eclipse-jetty-io)
-       ,@(package-native-inputs java-eclipse-jetty-util)))))
+     (modify-inputs (package-native-inputs java-eclipse-jetty-util)
+       (prepend java-eclipse-jetty-io)))))
 
 (define-public java-eclipse-jetty-xml-9.2
   (package
@@ -7321,14 +7231,14 @@ container.")))
              (chdir "jetty-webapp")
              #t)))))
     (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)))))
+     (list java-eclipse-jetty-util
+           java-eclipse-jetty-http
+           java-eclipse-jetty-io
+           java-eclipse-jetty-server
+           java-eclipse-jetty-servlet
+           java-eclipse-jetty-security
+           java-eclipse-jetty-xml
+           java-javaee-servletapi))))
 
 (define-public java-eclipse-jetty-webapp-9.2
   (package
@@ -7389,9 +7299,7 @@ container.")))
                    (find-files "." ".*.properties"))))
              #t)))))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)
-       ("java-gson" ,java-gson)))
+     (list java-junit java-hamcrest-core java-gson))
     (home-page "https://jsoup.org")
     (synopsis "HTML parser")
     (description "Jsoup is a Java library for working with real-world HTML.  It
@@ -7420,7 +7328,7 @@ best of DOM, CSS, and jQuery-like methods.")
        ;; Tests all fail with InstantiationException from mockito
        #:tests? #f))
     (propagated-inputs
-     `(("java-commons-codec" ,java-commons-codec)))
+     (list java-commons-codec))
     (home-page "https://github.com/mttkay/signpost")
     (synopsis "Lightweight client-side OAuth library for Java")
     (description "Signpost is the easy and intuitive solution for signing
@@ -7482,10 +7390,9 @@ based on this library, allowing Perl programmers to easily validate HTML.")
                  "-L" (assoc-ref inputs "tidyp") "/lib")))
              #t)))))
     (inputs
-     `(("perl-libwww" ,perl-libwww)
-       ("tidyp" ,tidyp)))
+     (list perl-libwww tidyp))
     (native-inputs
-     `(("perl-test-exception" ,perl-test-exception)))
+     (list perl-test-exception))
     (home-page "https://metacpan.org/release/HTML-Tidy")
     (synopsis "(X)HTML validation in a Perl object")
     (description "@code{HTML::Tidy} is an HTML checker in a handy dandy
@@ -7575,7 +7482,7 @@ derivation by David Revoy from the original MonsterID by Andreas Gohr.")
 (define-public nghttp2
   (package
     (name "nghttp2")
-    (version "1.41.0")
+    (version "1.44.0")
     (source
      (origin
        (method url-fetch)
@@ -7584,16 +7491,14 @@ derivation by David Revoy from the original MonsterID by Andreas Gohr.")
                            "nghttp2-" version ".tar.xz"))
        (sha256
         (base32
-         "1hk77vngjmvvzb5y1gi1aqwf6qywrc7yak08zvzb7x81qs6mphmb"))))
+         "0p9wvva4g8hwj55x19rbyvnq2dbsnf65rphhxnpqs7ll54xlg6an"))))
     (build-system gnu-build-system)
     (outputs (list "out"
                    "lib"))              ; only libnghttp2
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-
-       ;; Required by tests.
-       ("cunit" ,cunit)
-       ("tzdata" ,tzdata-for-tests)))
+     (list pkg-config
+           ;; Required by tests.
+           cunit python tzdata-for-tests))
     (inputs
      ;; Required to build the tools (i.e. without ‘--enable-lib-only’).
      `(("c-ares" ,c-ares)
@@ -7612,7 +7517,10 @@ derivation by David Revoy from the original MonsterID by Andreas Gohr.")
              "--enable-app"             ; build all the tools
              "--enable-hpack-tools"     ; ...all the tools
              "--disable-examples"
-             "--disable-static")        ; don't bother building .a files
+             "--disable-static"         ; don't bother building .a files
+             ,@(if (%current-target-system)
+                   '("--disable-python-bindings")
+                   '()))
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'break-circular-reference
@@ -7661,7 +7569,7 @@ compressed JSON header blocks.
 (define-public hpcguix-web
   (package
     (name "hpcguix-web")
-    (version "0.1.0")
+    (version "0.2.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -7670,7 +7578,7 @@ compressed JSON header blocks.
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "02lz5k1hhkwfz3nr3lsd69icsz6n0q82z047d3svi09qpxw6y0cj"))))
+                "1l856d1vr63ns1sp9fm6v97p71mx00769k6lwzqzppsb9clksnwp"))))
     (build-system gnu-build-system)
     (arguments
      `(#:modules ((guix build gnu-build-system)
@@ -7694,9 +7602,10 @@ compressed JSON header blocks.
                     (git      (assoc-ref inputs "guile-git"))
                     (bs       (assoc-ref inputs "guile-bytestructures"))
                     (json     (assoc-ref inputs "guile-json"))
+                    (zlib     (assoc-ref inputs "guile-zlib"))
                     (guile-cm (assoc-ref inputs
                                          "guile-commonmark"))
-                    (deps (list guile gcrypt git bs guile-cm guix json))
+                    (deps (list guile gcrypt git bs zlib guile-cm guix json))
                     (effective
                      (read-line
                       (open-pipe* OPEN_READ
@@ -7721,15 +7630,15 @@ compressed JSON header blocks.
      `(("autoconf" ,autoconf)
        ("automake" ,automake)
        ("uglify-js" ,uglify-js)
-       ("pkg-config" ,pkg-config)))
+       ("pkg-config" ,pkg-config)
+       ("guile" ,@(assoc-ref (package-native-inputs guix) "guile"))))
     (inputs
      `(("guile" ,@(assoc-ref (package-native-inputs guix) "guile"))
        ("guix" ,guix)
-       ("bash-minimal" ,bash-minimal)))           ;for 'wrap-program'
-    (propagated-inputs
-     `(("guile" ,@(assoc-ref (package-native-inputs guix) "guile"))
+       ("guile-zlib" ,guile-zlib)
        ("guile-commonmark" ,guile-commonmark)
-       ("guile-json" ,guile-json-4)))
+       ("guile-json" ,guile-json-4)
+       ("bash-minimal" ,bash-minimal)))
     (home-page "https://github.com/UMCUGenetics/hpcguix-web")
     (synopsis "Web interface for cluster deployments of Guix")
     (description "Hpcguix-web provides a web interface to the list of packages
@@ -7750,8 +7659,7 @@ instructions on how to use Guix in a shared HPC environment.")
                 "09a0gm67nml86qby1k1gh7rdxamnrnzwr6l9r5iiq94favjs0xrl"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libressl" ,libressl)
-       ("zlib" ,zlib)))
+     (list libressl zlib))
     (home-page "https://www.httrack.com/")
     (synopsis "Easy-to-use offline browser utility")
     (description "HTTrack allows you to download a World Wide Web site from
@@ -7769,23 +7677,23 @@ HTTrack is fully configurable, and has an integrated help system.")
 (define-public buku
   (package
     (name "buku")
-    (version "4.5")
+    (version "4.6")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "buku" version))
-       (file-name (git-file-name name version))
        (sha256
-        (base32 "1bk3h2ya34a5livyf6p7kawh50ikbix5szsq2rkb8cp5bwrzsj5i"))))
+        (base32 "1n4d1mkjyvzdxbyq067p1p9skb3iwx0msd86nzr224dlqrfh9675"))))
     (build-system python-build-system)
     (arguments
-     `(#:tests? #f))                    ;FIXME: many tests need network access
+     `(#:tests? #f                     ; FIXME: many tests need network access
+       #:phases
+       (modify-phases %standard-phases
+         ;; XXX: missing inputs, e.g. python-flask-admin
+         (delete 'sanity-check))))
     (inputs
-     `(("python-beautifulsoup4" ,python-beautifulsoup4)
-       ("python-certifi" ,python-certifi)
-       ("python-cryptography" ,python-cryptography)
-       ("python-html5lib" ,python-html5lib)
-       ("python-urllib3" ,python-urllib3)))
+     (list python-beautifulsoup4 python-certifi python-cryptography
+           python-flask python-html5lib python-urllib3))
     (home-page "https://github.com/jarun/buku")
     (synopsis "Bookmark manager")
     (description
@@ -7839,8 +7747,7 @@ Anonip can also be uses as a Python module in your own Python application.")
          "0kckcwvqklavd855np9aq5js6mg84isrlwchr504yigwma0sm7hm"))))
     (build-system go-build-system)
     (propagated-inputs
-     `(("go-github-com-robfig-cron" ,go-github-com-robfig-cron)
-       ("go-golang-org-x-time" ,go-golang-org-x-time)))
+     (list go-github-com-robfig-cron go-golang-org-x-time))
     (arguments
      `(#:import-path "github.com/tsileo/poussetaches"))
     (home-page "https://github.com/tsileo/poussetaches")
@@ -7911,7 +7818,7 @@ of the DOM tree
            (lambda _
              (chdir "Build"))))))
     (inputs
-     `(("freetype" ,freetype)))
+     (list freetype))
     (home-page "https://github.com/libRocket/libRocket") ; http://librocket.com/ is down.
     (synopsis "HTML/CSS user interface library")
     (description "libRocket is a C++ user interface package based on the HTML
@@ -7930,39 +7837,35 @@ solution for any project's interface needs:
     (license license:expat)))
 
 (define-public gmnisrv
-  (let ((commit "32854b79c73b278bf33eb5123abf1c36abdc7c01")
-        (revision "2"))
-    (package
-      (name "gmnisrv")
-      (version (git-version "0" revision commit))
-      (home-page "https://git.sr.ht/~sircmpwn/gmnisrv")
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url home-page)
-                      (commit commit)))
-                (sha256
-                 (base32
-                  "0lbb3ablwkdcgm1cjr1hikr55y8gpl420nh8b8g9wn4abhm2xgr9"))
-                (file-name (git-file-name name version))))
-      (build-system gnu-build-system)
-      (arguments
-       `(#:tests? #f ; no check target
-         #:configure-flags (list "--sysconfdir=/etc"
-                                 (string-append "--with-mimedb="
-                                                (assoc-ref %build-inputs "mailcap")
-                                                "/etc/mime.types"))
-         #:make-flags (list (string-append "CC=" ,(cc-for-target)))))
-      (inputs
-       `(("mailcap" ,mailcap)
-         ("openssl" ,openssl)))
-      (native-inputs
-       `(("pkg-config" ,pkg-config)
-         ("scdoc" ,scdoc)))
-      (synopsis "Simple Gemini protocol server")
-      (description "gmnisrv is a simple Gemini protocol server written in C.")
-      (license (list license:gpl3+
-                     license:bsd-3))))) ;; for ini.c and ini.h
+  (package
+    (name "gmnisrv")
+    (version "1.0")
+    (home-page "https://git.sr.ht/~sircmpwn/gmnisrv")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url home-page)
+             (commit version)))
+       (sha256
+        (base32 "115r1dw9k08r2nvygy8ll21qvsc5kmzi5jcqm7g7r8q8hifxglap"))
+       (file-name (git-file-name name version))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f                      ;no check target
+       #:configure-flags (list "--sysconfdir=/etc"
+                               (string-append "--with-mimedb="
+                                              (assoc-ref %build-inputs "mailcap")
+                                              "/etc/mime.types"))
+       #:make-flags (list (string-append "CC=" ,(cc-for-target)))))
+    (inputs
+     (list mailcap openssl))
+    (native-inputs
+     (list pkg-config scdoc))
+    (synopsis "Simple Gemini protocol server")
+    (description "gmnisrv is a simple Gemini protocol server written in C.")
+    (license (list license:gpl3+
+                   license:bsd-3)))) ;; for ini.c and ini.h
 
 (define-public libzim
   (package
@@ -7988,8 +7891,7 @@ solution for any project's interface needs:
        ("xapian" ,xapian)
        ("zstd" ,zstd "lib")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("googletest" ,googletest)))
+     (list pkg-config googletest))
     (home-page "https://wiki.openzim.org/wiki/Main_Page")
     (synopsis "Reference implementation of the ZIM specification")
     (description "The openZIM project proposes offline storage solutions for
@@ -8026,15 +7928,15 @@ for ZIM files.")
                                "/bin/aria2c\"")))
              #t)))))
     (inputs
-     `(("aria2" ,aria2)
-       ("curl" ,curl)
-       ("icu4c" ,icu4c)
-       ("libmicrohttpd" ,libmicrohttpd)
-       ("libzim" ,libzim)
-       ("pugixml" ,pugixml)
-       ("xapian" ,xapian)
-       ("zlib" ,zlib)
-       ("zstd" ,zstd "lib")))
+     (list aria2
+           curl
+           icu4c
+           libmicrohttpd
+           libzim
+           pugixml
+           xapian
+           zlib
+           `(,zstd "lib")))
     (native-inputs
      `(("mustache" ,(origin
                       (method git-fetch)
@@ -8097,19 +7999,19 @@ It contains the code shared by all Kiwix ports.")
                  `("QTWEBENGINEPROCESS_PATH" = (,qt-process-path)))
                #t))))))
     (inputs
-     `(("curl" ,curl)
-       ("icu4c" ,icu4c)
-       ("kiwix-lib" ,kiwix-lib)
-       ("libmicrohttpd" ,libmicrohttpd)
-       ("libzim" ,libzim)
-       ("pugixml" ,pugixml)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtwebchannel" ,qtwebchannel)
-       ("qtwebengine" ,qtwebengine)
-       ("xapian" ,xapian)
-       ("zlib" ,zlib)
-       ("zstd" ,zstd "lib")))
+     (list curl
+           icu4c
+           kiwix-lib
+           libmicrohttpd
+           libzim
+           pugixml
+           qtbase-5
+           qtdeclarative
+           qtwebchannel
+           qtwebengine
+           xapian
+           zlib
+           `(,zstd "lib")))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("qmake" ,qtbase-5)))
@@ -8119,6 +8021,42 @@ It contains the code shared by all Kiwix ports.")
 offline (such as Wikipedia), without any access to Internet.")
     (license license:gpl3)))
 
+(define-public kiwix-tools
+  (package
+    (name "kiwix-tools")
+    (version "3.1.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://download.kiwix.org/release/"
+                                  "kiwix-tools/kiwix-tools-" version ".tar.xz"))
+              (sha256
+               (base32
+                "1npf9ddhpkmx97gxmvmwmi8a69md8kh2szimd9rpg6ggd4big03a"))))
+    (build-system meson-build-system)
+    (inputs
+     (list curl
+           icu4c
+           kiwix-lib
+           libmicrohttpd
+           libzim
+           pugixml
+           xapian
+           zlib
+           `(,zstd "lib")))
+    (native-inputs
+     (list pkg-config))
+    (home-page "https://wiki.kiwix.org/wiki/Software")
+    (synopsis "Kiwix command line tools")
+    (description "The Kiwix tools are a collection of Kiwix-related command line
+tools:
+@itemize
+@item kiwix-manage: Manage XML based library of ZIM files
+@item kiwix-read: Read ZIM file content
+@item kiwix-search: Fulltext search in ZIM files
+@item kiwix-serve: HTTP daemon serving ZIM files
+@end itemize\n")
+    (license license:gpl3+)))
+
 (define-public uriparser
   (let ((commit "25dddb16cf044a7df27884e7ad3911baaaca3d7c")
         (revision "1"))
@@ -8135,9 +8073,7 @@ offline (such as Wikipedia), without any access to Internet.")
                  (base32
                   "1ffzia679axcsccx2fxjpxhb0i5xc42zxn446x6c1170w6v69qf6"))))
       (build-system cmake-build-system)
-      (native-inputs `(("gtest" ,googletest)
-                       ("doxygen" ,doxygen)
-                       ("graphviz" ,graphviz)))
+      (native-inputs (list googletest doxygen graphviz))
       (synopsis "Strictly RFC 3986 compliant URI parsing and handling library")
       (description "uriparser is a strictly RFC 3986 compliant URI parsing and
 handling library written in C89 (\"ANSI C\").  uriparser is fast and supports
diff --git a/gnu/packages/webkit.scm b/gnu/packages/webkit.scm
index dab8af2ab8..6a101331bd 100644
--- a/gnu/packages/webkit.scm
+++ b/gnu/packages/webkit.scm
@@ -2,10 +2,11 @@
 ;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
 ;;; Copyright © 2015 David Hashe <david.hashe@dhashe.com>
 ;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
-;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2015–2021 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Pierre Neidhardt <mail@ambrevar.xyz>
 ;;; Copyright © 2019 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -27,6 +28,7 @@
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix utils)
+  #:use-module (guix build utils)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
   #:use-module (gnu packages)
@@ -40,6 +42,7 @@
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages gcc)
   #:use-module (gnu packages gettext)
+  #:use-module (gnu packages ghostscript)
   #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
@@ -51,6 +54,7 @@
   #:use-module (gnu packages image)
   #:use-module (gnu packages libreoffice)
   #:use-module (gnu packages linux)
+  #:use-module (gnu packages llvm)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
@@ -82,9 +86,9 @@
      `(("pkg-config" ,pkg-config)
        ("python" ,python-wrapper)))
     (inputs
-     `(("mesa" ,mesa)))
+     (list mesa))
     (propagated-inputs
-     `(("libxkbcommon" ,libxkbcommon)))
+     (list libxkbcommon))
     (synopsis "General-purpose library for WPE")
     (description "LibWPE is general-purpose library specifically developed for
 the WPE-flavored port of WebKit.")
@@ -106,12 +110,9 @@ the WPE-flavored port of WebKit.")
     (arguments
      `(#:tests? #f))                    ;no tests
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("glib" ,glib)
-       ("libwpe" ,libwpe)
-       ("mesa" ,mesa)
-       ("wayland" ,wayland)))
+     (list glib libwpe mesa wayland))
     (home-page "https://wpewebkit.org/")
     (synopsis "Wayland WPE backend")
     (description
@@ -226,20 +227,20 @@ acceleration in mind, leveraging common 3D graphics APIs for best performance.")
 (define-public webkitgtk
   (package
     (name "webkitgtk")
-    (version "2.32.4")
+    (version "2.34.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://www.webkitgtk.org/releases/"
                                   "webkitgtk-" version ".tar.xz"))
               (sha256
                (base32
-                "1zfkfyhm4i7901pp32wcwcfxax69qgq5k44x0glwaywdg4zjvkh0"))
+                "01m4mfqxqkcx72kps46hpkir92x105ggfp43j68nk9wv34cm0pwp"))
               (patches (search-patches "webkitgtk-share-store.patch"
                                        "webkitgtk-bind-all-fonts.patch"))))
     (build-system cmake-build-system)
-    (outputs '("out" "doc"))
+    (outputs '("out" "doc" "debug"))
     (arguments
-     '(#:tests? #f ; no tests
+     `(#:tests? #f ; no tests
        #:build-type "Release" ; turn off debugging symbols to save space
        #:configure-flags (list
                           "-DPORT=GTK"
@@ -250,16 +251,7 @@ acceleration in mind, leveraging common 3D graphics APIs for best performance.")
                           "-DUSE_SYSTEMD=OFF"
                           (string-append ; uses lib64 by default
                            "-DLIB_INSTALL_DIR="
-                           (assoc-ref %outputs "out") "/lib")
-
-                          ;; XXX Adding GStreamer GL support would apparently
-                          ;; require adding gst-plugins-bad to the inputs,
-                          ;; which might entail a security risk as a result of
-                          ;; the plugins of dubious code quality that are
-                          ;; included.  More investigation is needed.  For
-                          ;; now, we explicitly disable it to prevent an error
-                          ;; at configuration time.
-                          "-DUSE_GSTREAMER_GL=OFF")
+                           (assoc-ref %outputs "out") "/lib"))
        #:make-flags
        ;; Never build with unsupported -j1: https://issues.guix.gnu.org/47964#5
        (list "-j" (number->string (max 2 (parallel-job-count))))
@@ -272,8 +264,7 @@ acceleration in mind, leveraging common 3D graphics APIs for best performance.")
              (let ((store-directory (%store-directory)))
                (substitute*
                    "Source/WebKit/UIProcess/Launcher/glib/BubblewrapLauncher.cpp"
-                 (("@storedir@") store-directory))
-               #t)))
+                 (("@storedir@") store-directory)))))
          (add-after 'unpack 'patch-gtk-doc-scan
            (lambda* (#:key inputs #:allow-other-keys)
              (for-each (lambda (file)
@@ -281,23 +272,27 @@ acceleration in mind, leveraging common 3D graphics APIs for best performance.")
                            (("http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd")
                             (string-append (assoc-ref inputs "docbook-xml")
                                            "/xml/dtd/docbook/docbookx.dtd"))))
-                       (find-files "Source" "\\.sgml$"))
-             #t))
+                       (find-files "Source" "\\.sgml$"))))
          (add-after 'unpack 'embed-absolute-wpebackend-reference
            (lambda* (#:key inputs #:allow-other-keys)
              (let ((wpebackend-fdo (assoc-ref inputs "wpebackend-fdo")))
                (substitute* "Source/WebKit/UIProcess/glib/WebProcessPoolGLib.cpp"
                  (("libWPEBackend-fdo-([\\.0-9]+)\\.so" all version)
-                  (string-append wpebackend-fdo "/lib/" all)))
-               #t)))
+                  (string-append wpebackend-fdo "/lib/" all))))))
+         ,@(if (target-x86-64?)
+               '()
+               '((add-after 'unpack 'disable-sse2
+                   (lambda _
+                     (substitute* "Source/cmake/WebKitCompilerFlags.cmake"
+                       (("WTF_CPU_X86 AND NOT CMAKE_CROSSCOMPILING")
+                        "FALSE"))))))
          (add-after 'install 'move-doc-files
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out"))
                    (doc (assoc-ref outputs "doc")))
                (mkdir-p (string-append doc "/share"))
                (rename-file (string-append out "/share/gtk-doc")
-                            (string-append doc "/share/gtk-doc"))
-               #t))))))
+                            (string-append doc "/share/gtk-doc"))))))))
     (native-inputs
      `(("bison" ,bison)
        ("gettext" ,gettext-minimal)
@@ -311,8 +306,7 @@ acceleration in mind, leveraging common 3D graphics APIs for best performance.")
        ("docbook-xml" ,docbook-xml) ; For documentation generation
        ("ruby" ,ruby)))
     (propagated-inputs
-     `(("gtk+" ,gtk+)
-       ("libsoup" ,libsoup)))
+     (list gtk+ libsoup))
     (inputs
      `(("at-spi2-core" ,at-spi2-core)
        ("bubblewrap" ,bubblewrap)
@@ -323,6 +317,7 @@ acceleration in mind, leveraging common 3D graphics APIs for best performance.")
        ("harfbuzz" ,harfbuzz)
        ("hyphen" ,hyphen)
        ("icu4c" ,icu4c)
+       ("lcms" ,lcms)
        ("libgcrypt" ,libgcrypt)
        ("libjpeg" ,libjpeg-turbo)
        ("libnotify" ,libnotify)
@@ -347,10 +342,28 @@ acceleration in mind, leveraging common 3D graphics APIs for best performance.")
     (description
      "WebKitGTK+ is a full-featured port of the WebKit rendering engine,
 suitable for projects requiring any kind of web integration, from hybrid
-HTML/CSS applications to full-fledged web browsers.")
+HTML/CSS applications to full-fledged web browsers.  WebKitGTK+ video playing
+capabilities can be extended through the use of GStreamer plugins (not
+propagated by default) such as @code{gst-plugins-good} and
+@code{gst-plugins-bad}.")
     ;; WebKit's JavaScriptCore and WebCore components are available under
     ;; the GNU LGPL, while the rest is available under a BSD-style license.
     (license (list license:lgpl2.0
                    license:lgpl2.1+
                    license:bsd-2
                    license:bsd-3))))
+
+;;; Required by gnome-online-accounts; as webkitgtk 2.34 propagates libsoup 3,
+;;; which causes the build to fail.
+;;; Also required by e.g. emacs-next-pgtk,  emacs-xwidgets, and some other
+;;; Gnome packages for webkit2gtk-4.0. See also the upstream tracker for
+;;; libsoup 3: https://gitlab.gnome.org/GNOME/libsoup/-/issues/218
+(define-public webkitgtk-with-libsoup2
+  (package/inherit webkitgtk
+    (name "webkitgtk-with-libsoup2")
+    (arguments (substitute-keyword-arguments (package-arguments webkitgtk)
+                 ((#:configure-flags flags)
+                  `(cons "-DUSE_SOUP2=ON" ,flags))))
+    (propagated-inputs
+     (alist-replace "libsoup" (list libsoup-minimal-2)
+                    (package-propagated-inputs webkitgtk)))))
diff --git a/gnu/packages/wget.scm b/gnu/packages/wget.scm
index 4fc4a1d281..472b67a416 100644
--- a/gnu/packages/wget.scm
+++ b/gnu/packages/wget.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org>
 ;;; Copyright © 2014, 2015, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2016, 2017, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
@@ -57,16 +57,14 @@
         "1bchzkacjsc5c0x01ngaana9fs5j12wfw1c8qxps1yp68x9vx6yv"))))
     (build-system gnu-build-system)
     (inputs
-     `(("gnutls" ,gnutls)
-       ("libidn2" ,libidn2)
-       ("libpsl" ,libpsl)))
+     (list gnutls libidn2 libpsl))
     (native-inputs
-     `(("lzip" ,lzip)
-       ("pkg-config" ,pkg-config)
-       ("perl" ,perl)
-       ("python" ,python)               ;for testenv suite
-       ("perl-http-daemon" ,perl-http-daemon)
-       ("perl-io-socket-ssl" ,perl-io-socket-ssl)))
+     (list lzip
+           pkg-config
+           perl
+           python ;for testenv suite
+           perl-http-daemon
+           perl-io-socket-ssl))
     (home-page "https://www.gnu.org/software/wget/")
     (synopsis "Non-interactive command-line utility for downloading files")
     (description
@@ -128,8 +126,7 @@ in downloaded documents to relative links.")
                #t))))
        #:tests? #f))                    ; no test target
     (inputs
-     `(("wget" ,wget)
-       ("xclip" ,xclip)))
+     (list wget xclip))
     (home-page "https://wgetpaste.zlin.dk/")
     (synopsis "Script that automates pasting to a number of pastebin services")
     (description
@@ -140,14 +137,14 @@ online pastebin services.")
 (define-public wget2
   (package
    (name "wget2")
-   (version "1.99.2")
+   (version "2.0.0")
    (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://gnu/wget/wget2-" version ".tar.gz"))
        (sha256
         (base32
-         "0qv55f4bablrlhc8bnic8g3mkk1kq44c4cphrk5jmv92z9aqzi6b"))))
+         "0i0m4k6w9smsr2m5mj05zvl1fb110izyl2qqrk0yqlxnmfhgpqjg"))))
    (build-system gnu-build-system)
    (arguments
     `(#:phases
@@ -172,7 +169,7 @@ online pastebin services.")
       ("zlib" ,zlib)))
    ;; TODO: Add libbrotlidec, libnghttp2.
    (native-inputs
-    `(("pkg-config" ,pkg-config)))
+    (list pkg-config))
    (home-page "https://gitlab.com/gnuwget/wget2")
    (synopsis "Successor of GNU Wget")
    (description "GNU Wget2 is the successor of GNU Wget, a file and recursive
diff --git a/gnu/packages/wicd.scm b/gnu/packages/wicd.scm
index fec39ad530..073d440479 100644
--- a/gnu/packages/wicd.scm
+++ b/gnu/packages/wicd.scm
@@ -123,7 +123,10 @@
                        "--no-install-kde"
                        "--no-install-gnome-shell-extensions"
 
-                       "--distro=guixsd"
+                       ;; Don't pass --distro= despite setup.py's complaints.
+                       ;; Guix isn't recognised, and if it ever would be we'd
+                       ;; rather ask upstream to follow standards instead.
+
                        "--wicdgroup=netdev"
                        "--loggroup=root"
                        "--logperms=0640"
diff --git a/gnu/packages/wine.scm b/gnu/packages/wine.scm
index 4361cccd8d..7ca2b9d0c7 100644
--- a/gnu/packages/wine.scm
+++ b/gnu/packages/wine.scm
@@ -4,7 +4,7 @@
 ;;; Copyright © 2016, 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017, 2018, 2019 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2017, 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr>
-;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -43,7 +43,6 @@
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages flex)
   #:use-module (gnu packages image)
-  #:use-module (gnu packages gcc)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages ghostscript)
   #:use-module (gnu packages gl)
@@ -75,7 +74,7 @@
 (define-public wine
   (package
     (name "wine")
-    (version "6.16")
+    (version "7.0")
     (source
      (origin
        (method url-fetch)
@@ -87,7 +86,7 @@
               (string-append "https://dl.winehq.org/wine/source/" dir
                              "wine-" version ".tar.xz")))
        (sha256
-        (base32 "1s7sz1rimax4kxij1ngkwnx4hcljwjq3q5gksz22k8cq1l2r4l39"))))
+        (base32 "0sq8vsr8jf1a8fanh76rq7vyxm8h0cc4ckirjy7v2p08biyy4hsv"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("bison" ,bison)
@@ -96,28 +95,25 @@
        ("perl" ,perl)
        ("pkg-config" ,pkg-config)))
     (inputs
+     ;; Some libraries like libjpeg are now compiled into native PE objects.
+     ;; The ELF objects provided by Guix packages are of no use.  Whilst this
+     ;; is technically bundling, it's quite defensible.  It might be possible
+     ;; to build some of these from Guix PACKAGE-SOURCE but attempts were not
+     ;; fruitful so far.  See <https://www.winehq.org/announce/7.0>.
      `(("alsa-lib" ,alsa-lib)
        ("dbus" ,dbus)
        ("cups" ,cups)
        ("eudev" ,eudev)
-       ("faudio" ,faudio)
        ("fontconfig" ,fontconfig)
        ("freetype" ,freetype)
        ("gnutls" ,gnutls)
        ("gst-plugins-base" ,gst-plugins-base)
-       ("lcms" ,lcms)
-       ("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)
        ("libgphoto2" ,libgphoto2)
-       ("libmpg123" ,mpg123)
        ("libldap" ,openldap)
        ("libnetapi" ,samba)
        ("libsane" ,sane-backends)
        ("libpcap" ,libpcap)
-       ("libpng" ,libpng)
-       ("libjpeg" ,libjpeg-turbo)
        ("libusb" ,libusb)
-       ("libtiff" ,libtiff)
        ("libICE" ,libice)
        ("libX11" ,libx11)
        ("libXi" ,libxi)
@@ -180,10 +176,15 @@
                         `("VK_ICD_FILENAMES" ":" =
                           (,(string-append icd
                                            "/radeon_icd.i686.json" ":"
-                                           icd "/intel_icd.i686.json"))))
-                      #t)))))
+                                           icd "/intel_icd.i686.json")))))))))
              (_
               `()))
+         (add-after 'unpack 'patch-SHELL
+           (lambda _
+             (substitute* "configure"
+               ;; configure first respects CONFIG_SHELL, clobbers SHELL later.
+               (("/bin/sh")
+                (which "bash")))))
          (add-after 'configure 'patch-dlopen-paths
            ;; Hardcode dlopened sonames to absolute paths.
            (lambda _
@@ -193,17 +194,13 @@
                                (search-path library-path soname))))
                (substitute* "include/config.h"
                  (("(#define SONAME_.* )\"(.*)\"" _ defso soname)
-                  (format #f "~a\"~a\"" defso (find-so soname))))
-               #t)))
-         (add-after 'patch-generated-file-shebangs 'patch-makefile
+                  (format #f "~a\"~a\"" defso (find-so soname)))))))
+         (add-after 'patch-generated-file-shebangs 'patch-makedep
            (lambda* (#:key outputs #:allow-other-keys)
-             (invoke "make" "Makefile") ; Makefile is first regenerated
-             (substitute* "Makefile"
-               (("-lntdll" id)
-                (string-append id
-                               " -Wl,-rpath=" (assoc-ref outputs "out")
-                               "/lib/wine32/wine/$(ARCH)-unix")))
-             #t)))))
+             (substitute* "tools/makedep.c"
+               (("output_filenames\\( unix_libs \\);" all)
+                (string-append all
+                               "output ( \" -Wl,-rpath=%s \", so_dir );"))))))))
     (home-page "https://www.winehq.org/")
     (synopsis "Implementation of the Windows API (32-bit only)")
     (description
@@ -222,8 +219,8 @@ integrate Windows applications into your desktop.")
   (package
     (inherit wine)
     (name "wine64")
-    (inputs `(("wine" ,wine)
-              ,@(package-inputs wine)))
+    (inputs (modify-inputs (package-inputs wine)
+              (prepend wine)))
     (arguments
      `(#:make-flags
        (list "SHELL=bash"
@@ -263,15 +260,18 @@ integrate Windows applications into your desktop.")
                       #t)))))
              (_
               `()))
-         (add-after 'patch-generated-file-shebangs 'patch-makefile
+         (add-after 'unpack 'patch-SHELL
+           (lambda _
+             (substitute* "configure"
+               ;; configure first respects CONFIG_SHELL, clobbers SHELL later.
+               (("/bin/sh")
+                (which "bash")))))
+         (add-after 'patch-generated-file-shebangs 'patch-makedep
            (lambda* (#:key outputs #:allow-other-keys)
-             (invoke "make" "Makefile") ; Makefile is first regenerated
-             (substitute* "Makefile"
-               (("-lntdll" id)
-                (string-append id
-                               " -Wl,-rpath=" (assoc-ref outputs "out")
-                               "/lib/wine64/wine/$(ARCH)-unix")))
-             #t))
+             (substitute* "tools/makedep.c"
+               (("output_filenames\\( unix_libs \\);" all)
+                (string-append all
+                               "output ( \" -Wl,-rpath=%s \", so_dir );")))))
          (add-after 'install 'copy-wine32-binaries
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((wine32 (assoc-ref %build-inputs "wine"))
@@ -282,23 +282,20 @@ integrate Windows applications into your desktop.")
                ;; Copy the real 32-bit wine-preloader instead of the wrapped
                ;; version.
                (copy-file (string-append wine32 "/bin/.wine-preloader-real")
-                          (string-append out "/bin/wine-preloader"))
-               #t)))
+                          (string-append out "/bin/wine-preloader")))))
          (add-after 'install 'copy-wine32-libraries
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((wine32 (assoc-ref %build-inputs "wine"))
                     (out (assoc-ref %outputs "out")))
                (copy-recursively (string-append wine32 "/lib/wine32")
-                                 (string-append out "/lib/wine32"))
-               #t)))
+                                 (string-append out "/lib/wine32")))))
          (add-after 'compress-documentation 'copy-wine32-manpage
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((wine32 (assoc-ref %build-inputs "wine"))
                     (out (assoc-ref %outputs "out")))
                ;; Copy the missing man file for the wine binary from wine.
                (copy-file (string-append wine32 "/share/man/man1/wine.1.gz")
-                          (string-append out "/share/man/man1/wine.1.gz"))
-               #t)))
+                          (string-append out "/share/man/man1/wine.1.gz")))))
          (add-after 'configure 'patch-dlopen-paths
            ;; Hardcode dlopened sonames to absolute paths.
            (lambda _
@@ -308,8 +305,7 @@ integrate Windows applications into your desktop.")
                                (search-path library-path soname))))
                (substitute* "include/config.h"
                  (("(#define SONAME_.* )\"(.*)\"" _ defso soname)
-                  (format #f "~a\"~a\"" defso (find-so soname))))
-               #t))))
+                  (format #f "~a\"~a\"" defso (find-so soname))))))))
        #:configure-flags
        (list "--enable-win64"
              (string-append "LDFLAGS=-Wl,-rpath=" %output "/lib/wine64"))
@@ -325,13 +321,19 @@ integrate Windows applications into your desktop.")
   (package
     (inherit wine)
     (name "wine-minimal")
-    (native-inputs (fold alist-delete (package-native-inputs wine)
-               '("gettext" "perl" "pkg-config")))
+    (native-inputs (modify-inputs (package-native-inputs wine)
+                     (delete "gettext" "perl" "pkg-config")))
     (inputs `())
     (arguments
      `(#:validate-runpath? #f
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'patch-SHELL
+           (lambda _
+             (substitute* "configure"
+               ;; configure first respects CONFIG_SHELL, clobbers SHELL later.
+               (("/bin/sh")
+                (which "bash")))))
          (add-after 'configure 'patch-dlopen-paths
            ;; Hardcode dlopened sonames to absolute paths.
            (lambda _
@@ -341,8 +343,7 @@ integrate Windows applications into your desktop.")
                                (search-path library-path soname))))
                (substitute* "include/config.h"
                  (("(#define SONAME_.* )\"(.*)\"" _ defso soname)
-                  (format #f "~a\"~a\"" defso (find-so soname))))
-               #t))))
+                  (format #f "~a\"~a\"" defso (find-so soname))))))))
        #:configure-flags
        (list "--without-freetype"
              "--without-x")
@@ -364,8 +365,7 @@ integrate Windows applications into your desktop.")
         (base32 "0d5m9pvafr0iw99ny7rgzfmw7zw45q5wfcw68zj88mvzs47xkgms"))))
     (build-system trivial-build-system)
     (native-inputs
-     `(("bash" ,bash)
-       ("coreutils" ,coreutils)))
+     (list bash coreutils))
     (arguments
      `(#:modules ((guix build utils))
        #:builder
@@ -413,15 +413,15 @@ integrate Windows applications into your desktop.")
          (file-name (string-append name "-" wine-version ".tar.xz"))
          (sha256
           (base32 "1bc4zmqpdqs1ncz3qisp8a313pqzi5a31gq1s99ivb60vk325rcr")))))
-    (inputs `(("autoconf" ,autoconf)    ; for autoreconf
-              ("ffmpeg" ,ffmpeg)
-              ("gtk+" ,gtk+)
-              ("libva" ,libva)
-              ("mesa" ,mesa)
-              ("python" ,python)
-              ("util-linux" ,util-linux) ; for hexdump
-              ("wine-staging-patchset-data" ,wine-staging-patchset-data)
-              ,@(package-inputs wine)))
+    (inputs (modify-inputs (package-inputs wine)
+              (prepend autoconf ; for autoreconf
+                       ffmpeg
+                       gtk+
+                       libva
+                       mesa
+                       python
+                       util-linux ; for hexdump
+                       wine-staging-patchset-data)))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -435,10 +435,10 @@ integrate Windows applications into your desktop.")
                     (let* ((out (assoc-ref outputs "out"))
                            (icd (string-append out "/share/vulkan/icd.d")))
                       (mkdir-p icd)
-                      (copy-file (string-append (assoc-ref inputs "mesa")
+                      (copy-file (search-input-file inputs
                                  "/share/vulkan/icd.d/radeon_icd.i686.json")
                                  (string-append icd "/radeon_icd.i686.json"))
-                      (copy-file (string-append (assoc-ref inputs "mesa")
+                      (copy-file (search-input-file inputs
                                  "/share/vulkan/icd.d/intel_icd.i686.json")
                                  (string-append icd "/intel_icd.i686.json"))
                       (wrap-program (string-append out "/bin/wine-preloader")
@@ -490,8 +490,8 @@ integrated into the main branch.")
   (package
     (inherit wine-staging)
     (name "wine64-staging")
-    (inputs `(("wine-staging" ,wine-staging)
-              ,@(package-inputs wine-staging)))
+    (inputs (modify-inputs (package-inputs wine-staging)
+              (prepend wine-staging)))
     (arguments
      `(#:make-flags
        (list "SHELL=bash"
@@ -609,10 +609,7 @@ version)")
                                (string-append (assoc-ref %build-inputs "source")
                                               "/build-wine32.txt"))))
     (native-inputs
-     ;; Since 1.5 dxvk needs gcc-8.1.  See
-     ;; https://github.com/doitsujin/dxvk/issues/1292#issuecomment-567067373.
-     `(("gcc" ,gcc-9)
-       ("glslang" ,glslang)))
+     `(("glslang" ,glslang)))
     (inputs
      `(("wine" ,wine-staging)))
     (synopsis "Vulkan-based D3D9, D3D10 and D3D11 implementation for Wine")
diff --git a/gnu/packages/wireservice.scm b/gnu/packages/wireservice.scm
index b704111db0..d315bc2d74 100644
--- a/gnu/packages/wireservice.scm
+++ b/gnu/packages/wireservice.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2019 Pierre Langlois <pierre.langlois@gmx.com>
 ;;; Copyright © 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020 Tanguy Le Carrour <tanguy@bioneland.org>
+;;; Copyright © 2022 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -174,7 +175,7 @@ for dbf files support to all @code{agate.Table} instances.")))
 (define-public python-agate-excel
   (wireservice-package
    (name "python-agate-excel")
-   (version "0.2.3")
+   (version "0.2.5")
    (source (origin
              (method git-fetch)
              (uri (git-reference
@@ -183,15 +184,16 @@ for dbf files support to all @code{agate.Table} instances.")))
              (file-name (git-file-name name version))
              (sha256
               (base32
-               "1k5lv21k19s7kgbj5srd1xgrkqvxqqs49qwj33zncs9l7851afy7"))))
+               "1y3cw57000inwczx50n16kxkr3xi2l241iml1qcqp29a0ba5c519"))))
    (native-inputs
-    `(("python-nose" ,python-nose)
-      ("python-sphinx" ,python-sphinx)
-      ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)))
+    (list python-nose
+          python-sphinx
+          python-sphinx-rtd-theme))
    (propagated-inputs
-    `(("python-agate" ,python-agate)
-      ("python-openpyxl" ,python-openpyxl)
-      ("python-xlrd" ,python-xlrd)))
+    (list python-agate
+          python-olefile
+          python-openpyxl
+          python-xlrd))
    (home-page "https://agate-excel.rtfd.org")
    (synopsis "Add read support for Excel files (xls and xlsx) to agate")
    (description "@code{agateexcel} uses a monkey patching pattern to add read
@@ -209,15 +211,11 @@ for xls and xlsx files support to all @code{agate.Table} instances.")))
                 "1ffmbzk4rxnl1yhqfl58v7kvl5m9cbvjm8v7xp4mvr00sgs91lvv"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-psycopg2" ,python-psycopg2) ; to test PostgreSQL support
-       ("python-sphinx" ,python-sphinx)
-       ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)))
+     (list python-psycopg2 ; to test PostgreSQL support
+           python-sphinx python-sphinx-rtd-theme))
     (inputs
-     `(("python-agate-dbf" ,python-agate-dbf)
-       ("python-agate-excel" ,python-agate-excel)
-       ("python-agate-sql" ,python-agate-sql)
-       ("python-six" ,python-six)
-       ("python-text-unidecode" ,python-text-unidecode)))
+     (list python-agate-dbf python-agate-excel python-agate-sql
+           python-six python-text-unidecode))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
diff --git a/gnu/packages/wm.scm b/gnu/packages/wm.scm
index 44139990b2..9549b073cf 100644
--- a/gnu/packages/wm.scm
+++ b/gnu/packages/wm.scm
@@ -8,7 +8,7 @@
 ;;; Copyright © 2016, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Al McElrath <hello@yrns.org>
 ;;; Copyright © 2016 Carlo Zancanaro <carlo@zancanaro.id.au>
-;;; Copyright © 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2016, 2017, 2018, 2019, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016, 2017, 2018, 2020 Nikita <nikita@n0.is>
 ;;; Copyright © 2016 doncatnip <gnopap@gmail.com>
 ;;; Copyright © 2016 Ivan Vilata i Balaguer <ivan@selidor.net>
@@ -46,6 +46,9 @@
 ;;; Copyright © 2021 qblade <qblade@protonmail.com>
 ;;; Copyright © 2021 lasnesne <lasnesne@lagunposprasihopre.org>
 ;;; Copyright © 2021 Petr Hodina <phodina@protonmail.com>
+;;; Copyright © 2021 jgart <jgart@dismail.de>
+;;; Copyright © 2021 Disseminate Dissent <disseminatedissent@protonmail.com>
+;;; Copyright © 2022 John Kehayias <john.kehayias@protonmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -81,8 +84,9 @@
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
   #:use-module (gnu packages bison)
-  #:use-module (gnu packages build-tools) ;for meson-0.55
+  #:use-module (gnu packages build-tools)
   #:use-module (gnu packages calendar)
+  #:use-module (gnu packages check)
   #:use-module (gnu packages datastructures)
   #:use-module (gnu packages docbook)
   #:use-module (gnu packages documentation)
@@ -90,7 +94,6 @@
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages fribidi)
   #:use-module (gnu packages gawk)
-  #:use-module (gnu packages gcc)
   #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gperf)
@@ -101,7 +104,9 @@
   #:use-module (gnu packages image)
   #:use-module (gnu packages imagemagick)
   #:use-module (gnu packages libevent)
+  #:use-module (gnu packages libffi)
   #:use-module (gnu packages linux)
+  #:use-module (gnu packages lisp-check)
   #:use-module (gnu packages lisp-xyz)
   #:use-module (gnu packages logging)
   #:use-module (gnu packages lua)
@@ -115,12 +120,15 @@
   #:use-module (gnu packages pretty-print)
   #:use-module (gnu packages pulseaudio)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-crypto)
+  #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages serialization)
   #:use-module (gnu packages sphinx)
   #:use-module (gnu packages suckless)
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages textutils)
+  #:use-module (gnu packages time)
   #:use-module (gnu packages video)
   #:use-module (gnu packages web)
   #:use-module (gnu packages xdisorg)
@@ -142,12 +150,12 @@
         (base32 "0qlv7b4c2mmjfd65y100d11x8iqyg5f6lfiws3cgmpjidhdygnxc"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libxcb" ,libxcb)
-       ("libxinerama" ,libxinerama)
-       ("sxhkd" ,sxhkd)
-       ("xcb-util" ,xcb-util)
-       ("xcb-util-keysyms" ,xcb-util-keysyms)
-       ("xcb-util-wm" ,xcb-util-wm)))
+     (list libxcb
+           libxinerama
+           sxhkd
+           xcb-util
+           xcb-util-keysyms
+           xcb-util-wm))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -176,21 +184,19 @@ the leaves of a full binary tree.")
        (file-name (string-append "herbstluftwm-" version ".tar.gz"))))
     (build-system cmake-build-system)
     (inputs
-     `(("dzen"        ,dzen)
-       ("dmenu"       ,dmenu)
-       ("glib"        ,glib)
-       ("glibmm"      ,glibmm)
-       ("xterm"       ,xterm)
-       ("xsetroot"    ,xsetroot)
-       ("libx11"      ,libx11)
-       ("libxext"     ,libxext)
-       ("libxinerama" ,libxinerama)
-       ("libxrandr"   ,libxrandr)
-       ("libxft"      ,libxft)))
+     (list dzen
+           dmenu
+           glib
+           glibmm
+           xterm
+           xsetroot
+           libx11
+           libxext
+           libxinerama
+           libxrandr
+           libxft))
     (native-inputs
-     `(("asciidoc"   ,asciidoc)
-       ("pkg-config" ,pkg-config)
-       ("python"     ,python)))
+     (list asciidoc pkg-config python))
     (arguments
      '(#:tests? #f
        #:configure-flags
@@ -259,19 +265,17 @@ or musca).
        #:out-of-source? #t
        #:tests? #f)) ; no test suite
     (inputs
-     `(("openlibm" ,openlibm)
-       ("libconfuse" ,libconfuse)
-       ("libyajl" ,libyajl)
-       ("alsa-lib" ,alsa-lib)
-       ("pulseaudio" ,pulseaudio)
-       ("libnl" ,libnl)
-       ("libcap" ,libcap)
-       ("asciidoc" ,asciidoc)))
+     (list openlibm
+           libconfuse
+           libyajl
+           alsa-lib
+           pulseaudio
+           libnl
+           libcap
+           asciidoc))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("docbook-xsl" ,docbook-xsl)
-       ("libxml2" ,libxml2)             ;for XML_CATALOG_FILES
-       ("xmlto" ,xmlto)))
+     (list pkg-config docbook-xsl libxml2 ;for XML_CATALOG_FILES
+           xmlto))
     (home-page "https://i3wm.org/i3status/")
     (synopsis "Status bar for i3bar, dzen2, xmobar or similar programs")
     (description "i3status is a small program for generating a status bar for
@@ -316,30 +320,30 @@ commands would.")
                  (("Exec=i3-with-shmlog") (string-append "Exec=" i3-with-shmlog)))
                #t))))))
     (inputs
-     `(("libxcb" ,libxcb)
-       ("xcb-util" ,xcb-util)
-       ("xcb-util-cursor" ,xcb-util-cursor)
-       ("xcb-util-keysyms" ,xcb-util-keysyms)
-       ("xcb-util-wm" ,xcb-util-wm)
-       ("xcb-util-xrm" ,xcb-util-xrm)
-       ("libxkbcommon" ,libxkbcommon)
-       ("libev" ,libev)
-       ("libyajl" ,libyajl)
-       ("xmlto" ,xmlto)
-       ("perl-pod-simple" ,perl-pod-simple)
-       ("libx11" ,libx11)
-       ("pcre" ,pcre)
-       ("startup-notification" ,startup-notification)
-       ("pango" ,pango)
-       ("cairo" ,cairo)))
+     (list libxcb
+           xcb-util
+           xcb-util-cursor
+           xcb-util-keysyms
+           xcb-util-wm
+           xcb-util-xrm
+           libxkbcommon
+           libev
+           libyajl
+           xmlto
+           perl-pod-simple
+           libx11
+           pcre
+           startup-notification
+           pango
+           cairo))
     (native-inputs
-     `(("which" ,which)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)
-       ("asciidoc" ,asciidoc)
-       ;; For building the documentation.
-       ("libxml2" ,libxml2)
-       ("docbook-xsl" ,docbook-xsl)))
+     (list which
+           perl
+           pkg-config
+           asciidoc
+           ;; For building the documentation.
+           libxml2
+           docbook-xsl))
     (home-page "https://i3wm.org/")
     (synopsis "Tiling window manager")
     (description "i3 is a tiling X11 window manager that dynamically manages
@@ -395,16 +399,16 @@ from many programming languages.")
                 "02szjsaz7rqrdkd0r2nwgwa85c4hwfrcskxw7ryk695kmjcfhzv3"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("cairo" ,cairo)
-       ("libev" ,libev)
-       ("linux-pam" ,linux-pam)
-       ("libxcb" ,libxcb)
-       ("libxkbcommon" ,libxkbcommon)
-       ("xcb-util" ,xcb-util)
-       ("xcb-util-image" ,xcb-util-image)
-       ("xcb-util-xrm" ,xcb-util-xrm)))
+     (list cairo
+           libev
+           linux-pam
+           libxcb
+           libxkbcommon
+           xcb-util
+           xcb-util-image
+           xcb-util-xrm))
     (home-page "https://i3wm.org/i3lock/")
     (synopsis "Lightweight screen locker")
     (description
@@ -428,19 +432,17 @@ Despite the name it should work with any X11 window manager.")
                 "1bd5nrlga5g1sz1f64gnc3dqy8yfrr4q1ss59krymbpxa1hhf55c"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("automake" ,automake)
-       ("autoconf" ,autoconf)))
+     (list pkg-config automake autoconf))
     (inputs
-     `(("cairo" ,cairo)
-       ("mesa" ,mesa)
-       ("libev" ,libev)
-       ("linux-pam" ,linux-pam)
-       ("libxcb" ,libxcb)
-       ("libxkbcommon" ,libxkbcommon)
-       ("xcb-util" ,xcb-util)
-       ("xcb-util-image" ,xcb-util-image)
-       ("xcb-util-xrm" ,xcb-util-xrm)))
+     (list cairo
+           mesa
+           libev
+           linux-pam
+           libxcb
+           libxkbcommon
+           xcb-util
+           xcb-util-image
+           xcb-util-xrm))
     (home-page "https://github.com/karulont/i3lock-blur")
     (synopsis "Lightweight screen locker with transparent blurring background")
     (description
@@ -464,9 +466,7 @@ manager.")
               (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config))
     (home-page "https://github.com/vivien/i3blocks")
     (synopsis "Minimalist scheduler for status bar scripts")
     (description "i3blocks executes your command lines and generates a
@@ -488,8 +488,7 @@ i3status.")
                 "0qvd9bq16jyy7v3ma82qcnvz9j503bw0mh7h55gkjf7ir62ck0jk"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-anyevent" ,perl-anyevent)
-       ("perl-json-xs" ,perl-json-xs)))
+     (list perl-anyevent perl-json-xs))
     (home-page "https://metacpan.org/release/AnyEvent-I3")
     (synopsis
      "Communicate with the i3 window manager through perl")
@@ -530,7 +529,7 @@ You can then subscribe to events or send messages and receive their replies.")
                         ;; Avoid unspecified return value.
                         #t))))))
     (propagated-inputs
-     `(("i3-wm" ,i3-wm)))
+     (list i3-wm))
     (home-page "https://github.com/ziberna/i3-py")
     (synopsis "Python interface to the i3 window manager")
     (description "This package allows you to interact from a Python program
@@ -542,6 +541,58 @@ subscribe to events.")
 (define-public python2-i3-py
   (package-with-python2 python-i3-py))
 
+(define-public qtile
+  (package
+    (name "qtile")
+    (version "0.18.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "qtile" version))
+        (sha256
+          (base32 "14hb26xkza7brvkd4276j60mxd3zsas72ih6y0cq3j060izm1865"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:tests? #f ; Tests require Xvfb and writable temp/cache space
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-paths
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "libqtile/pangocffi.py"
+               (("^gobject = ffi.dlopen.*")
+                 (string-append "gobject = ffi.dlopen(\""
+                  (assoc-ref inputs "glib") "/lib/libgobject-2.0.so.0\")\n"))
+                (("^pango = ffi.dlopen.*")
+                 (string-append "pango = ffi.dlopen(\""
+                  (assoc-ref inputs "pango") "/lib/libpango-1.0.so.0\")\n"))
+                (("^pangocairo = ffi.dlopen.*")
+                 (string-append "pangocairo = ffi.dlopen(\""
+                  (assoc-ref inputs "pango") "/lib/libpangocairo-1.0.so.0\")\n"))))))))
+    (inputs
+      (list glib pango pulseaudio))
+    (propagated-inputs
+      (list python-cairocffi
+            python-cffi
+            python-dateutil
+            python-dbus-next
+            python-iwlib
+            python-keyring
+            python-mpd2
+            python-pyxdg
+            python-xcffib))
+    (native-inputs
+      (list pkg-config
+            python-flake8
+            python-pep8-naming
+            python-psutil
+            python-pytest-cov
+            python-setuptools-scm))
+    (home-page "http://qtile.org")
+    (synopsis "Hackable tiling window manager written and configured in Python")
+    (description "Qtile is simple, small, and extensible.  It's easy to write
+your own layouts, widgets, and built-in commands.")
+    (license license:expat)))
+
 (define-public quickswitch-i3
   (let ((commit "ed692b1e8f43b95bd907ced26238ce8ccb2ed28f")
         (revision "1")) ; Guix package revision
@@ -576,8 +627,7 @@ subscribe to events.")
                           ;; Avoid unspecified return value.
                           #t))))))
       (inputs
-       `(("python-i3-py" ,python-i3-py)
-         ("dmenu" ,dmenu)))
+       (list python-i3-py dmenu))
       (home-page "https://github.com/proxypoke/quickswitch-for-i3")
       (synopsis "Quickly change to and locate windows in the i3 window manager")
       (description
@@ -589,34 +639,32 @@ prompt.")
 (define-public i3lock-color
   (package
     (name "i3lock-color")
-    (version "2.12.c")
+    (version "2.13.c.4")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://github.com/PandorasFox/i3lock-color")
+             (url "https://github.com/Raymo111/i3lock-color")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "08fhnchf187b73h52xgzb86g6byzxz085zs9galsvl687g5zxk34"))))
+        (base32 "1lnyh8spbf1ar4xan5v7q8i2i51aq1i60kzbfkn9w3wa0jzf9f3d"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f))                    ; no tests included
     (inputs
-     `(("cairo" ,cairo)
-       ("libev" ,libev)
-       ("libjpeg" ,libjpeg-turbo)
-       ("libxcb" ,libxcb)
-       ("libxkbcommon" ,libxkbcommon)
-       ("linux-pam" ,linux-pam)
-       ("xcb-util" ,xcb-util)
-       ("xcb-util-image" ,xcb-util-image)
-       ("xcb-util-xrm" ,xcb-util-xrm)))
+     (list cairo
+           libev
+           libjpeg-turbo
+           libxcb
+           libxkbcommon
+           linux-pam
+           xcb-util
+           xcb-util-image
+           xcb-util-xrm))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
-    (home-page "https://github.com/PandorasFox/i3lock-color")
+     (list autoconf automake pkg-config))
+    (home-page "https://github.com/Raymo111/i3lock-color")
     (synopsis "Screen locker with color configuration support")
     (description
      "i3lock-color is a simpler X11 screen locker derived from i3lock.
@@ -651,14 +699,10 @@ Features include:
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
                     (icons (string-append out "/share/i3lock-fancy/icons/"))
-                    (wmctrl (string-append (assoc-ref inputs "wmctrl")
-                                           "/bin/wmctrl"))
-                    (mconvert (string-append (assoc-ref inputs "imagemagick")
-                                             "/bin/convert"))
-                    (mimport (string-append (assoc-ref inputs "imagemagick")
-                                            "/bin/import"))
-                    (awk (string-append (assoc-ref inputs "gawk")
-                                        "/bin/gawk")))
+                    (wmctrl (search-input-file inputs "/bin/wmctrl"))
+                    (mconvert (search-input-file inputs "/bin/convert"))
+                    (mimport (search-input-file inputs "/bin/import"))
+                    (awk (search-input-file inputs "/bin/gawk")))
 
                (substitute* "lock"
                  (("\\$\\(command -V wmctrl\\)") wmctrl)
@@ -681,10 +725,7 @@ Features include:
                (copy-recursively "icons" icons)
                #t))))))
     (inputs
-     `(("imagemagick" ,imagemagick)
-       ("wmctrl" ,wmctrl)
-       ("i3lock" ,i3lock)
-       ("gawk" ,gawk)))
+     (list imagemagick wmctrl i3lock gawk))
     (home-page "https://github.com/meskarune/i3lock-fancy")
     (synopsis "Screen locker with screenshot function")
     (description
@@ -696,10 +737,10 @@ This screen locker can be used with any window manager or
 desktop environment.")
     (license license:expat)))
 
-(define-public xmonad
+(define-public xmonad-next
   (package
-    (name "xmonad")
-    (version "0.15")
+    (name "xmonad-next")
+    (version "0.17.0")
     (synopsis "Tiling window manager")
     (source (origin
               (method url-fetch)
@@ -707,16 +748,11 @@ desktop environment.")
                                   "xmonad-" version ".tar.gz"))
               (sha256
                (base32
-                "0a7rh21k9y6g8fwkggxdxjns2grvvsd5hi2ls4klmqz5xvk4hyaa"))
-              (patches (search-patches "xmonad-dynamic-linking.patch"))))
+                "04qspdz9w6xpw1npcmx2zx0595wc68q985pv4i0hvp32zillvdqy"))
+              (patches (search-patches "xmonad-next-dynamic-linking.patch"))))
     (build-system haskell-build-system)
-    (inputs
-     `(("ghc-extensible-exceptions" ,ghc-extensible-exceptions)
-       ("ghc-quickcheck"            ,ghc-quickcheck)
-       ("ghc-semigroups"            ,ghc-semigroups)
-       ("ghc-setlocale"             ,ghc-setlocale)
-       ("ghc-utf8-string"           ,ghc-utf8-string)
-       ("ghc-x11"                   ,ghc-x11)))
+    (inputs (list ghc-data-default-class ghc-setlocale ghc-x11))
+    (native-inputs (list ghc-quickcheck ghc-quickcheck-classes))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -746,39 +782,66 @@ used on each workspace.  Xinerama is fully supported, allowing windows to be
 tiled on several screens.")
     (license license:bsd-3)))
 
+(define-public xmonad
+  (package
+    (inherit xmonad-next)
+    (name "xmonad")
+    (version "0.15")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://hackage/package/xmonad/"
+                                  "xmonad-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0a7rh21k9y6g8fwkggxdxjns2grvvsd5hi2ls4klmqz5xvk4hyaa"))
+              (patches (search-patches "xmonad-dynamic-linking.patch"))))
+    (inputs
+     (list ghc-extensible-exceptions
+           ghc-data-default
+           ghc-quickcheck
+           ghc-semigroups
+           ghc-setlocale
+           ghc-utf8-string
+           ghc-x11))
+    (native-inputs '())
+    (arguments
+     `(#:cabal-revision
+       ("1" "0yqh96qqphllr0zyz5j93cij5w2qvf39xxnrb52pz0qz3pywz9wd")
+       ,@(package-arguments xmonad-next)))))
+
 (define-public xmobar
   (package
     (name "xmobar")
-    (version "0.34")
+    (version "0.40")
     (source (origin
               (method url-fetch)
-              (uri (string-append "mirror://hackage/package/xmobar/"
+              (uri (string-append "https://hackage.haskell.org/package/xmobar/"
                                   "xmobar-" version ".tar.gz"))
               (sha256
                (base32
-                "0x09xbz7y9ay0046j1xpr9jjk5jqivqi06vm3q6mhcrgc4y922rx"))))
+                "1mrdiblm8vilkm1w23pz6xbi16zh1b1lvql26czjzw5k79vd67sf"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-hspec hspec-discover))
     (inputs
-     `(("ghc-alsa-core" ,ghc-alsa-core)
-       ("ghc-alsa-mixer" ,ghc-alsa-mixer)
-       ("ghc-dbus" ,ghc-dbus)
-       ("ghc-hinotify" ,ghc-hinotify)
-       ("ghc-http" ,ghc-http)
-       ("ghc-http-conduit" ,ghc-http-conduit)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-iwlib" ,ghc-iwlib)
-       ("ghc-libmpd" ,ghc-libmpd)
-       ("ghc-old-locale" ,ghc-old-locale)
-       ("ghc-parsec-numbers" ,ghc-parsec-numbers)
-       ("ghc-regex-compat" ,ghc-regex-compat)
-       ("ghc-temporary" ,ghc-temporary)
-       ("ghc-timezone-olson" ,ghc-timezone-olson)
-       ("ghc-x11" ,ghc-x11)
-       ("ghc-x11-xft" ,ghc-x11-xft)
-       ("libxpm" ,libxpm)))
+     (list ghc-alsa-core
+           ghc-alsa-mixer
+           ghc-dbus
+           ghc-hinotify
+           ghc-http
+           ghc-http-conduit
+           ghc-http-types
+           ghc-iwlib
+           ghc-libmpd
+           ghc-netlink
+           ghc-old-locale
+           ghc-parsec-numbers
+           ghc-regex-compat
+           ghc-temporary
+           ghc-timezone-olson
+           ghc-x11
+           ghc-x11-xft
+           libxpm))
     (arguments
      `(#:configure-flags (list "--flags=all_extensions")
        #:phases
@@ -810,8 +873,7 @@ Haskell, no knowledge of the language is required to install and use it.")
         (base32 "04djfyjab3c5y9z9x8zd0xcx0jyy35zq7cl9ddr4ppf6k5ky6iky"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-strict" ,ghc-strict)
-       ("ghc-xdg-basedir" ,ghc-xdg-basedir)))
+     (list ghc-strict ghc-xdg-basedir))
     (home-page "http://dmwit.com/yeganesh/")
     (synopsis "Small wrapper around dmenu")
     (description "@code{yeganesh} is a small wrapper around demnu.  Like
@@ -820,27 +882,20 @@ Unlike dmenu, it mangles the input before it presents its choices.  In
 particular, it displays commonly-chosen options before uncommon ones.")
     (license license:bsd-3)))
 
-(define-public ghc-xmonad-contrib
+(define-public ghc-xmonad-contrib-next
   (package
-    (name "ghc-xmonad-contrib")
-    (version "0.16")
+    (name "ghc-xmonad-contrib-next")
+    (version "0.17.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://hackage/package/xmonad-contrib/"
                            "xmonad-contrib-" version ".tar.gz"))
        (sha256
-        (base32 "1pddgkvnbww28wykncc7j0yb0lv15bk7xnnhdcbrwkxzw66w6wmd"))))
+        (base32 "11g1cyfgfvcmz35qhgi9wzxrk3br8m8b7qy3jvph4nnf6aj13wvy"))))
     (build-system haskell-build-system)
-    (propagated-inputs
-     `(("ghc-old-time" ,ghc-old-time)
-       ("ghc-random" ,ghc-random)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("ghc-extensible-exceptions" ,ghc-extensible-exceptions)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-x11" ,ghc-x11)
-       ("ghc-x11-xft" ,ghc-x11-xft)
-       ("xmonad" ,xmonad)))
+    (propagated-inputs (list ghc-random ghc-x11 ghc-utf8-string ghc-x11-xft xmonad-next))
+    (native-inputs (list ghc-quickcheck ghc-hspec))
     (home-page "https://xmonad.org")
     (synopsis "Third party extensions for xmonad")
     (description
@@ -848,6 +903,33 @@ particular, it displays commonly-chosen options before uncommon ones.")
 tiling window manager for X.")
     (license license:bsd-3)))
 
+(define-public ghc-xmonad-contrib
+  (package
+    (inherit ghc-xmonad-contrib-next)
+    (name "ghc-xmonad-contrib")
+    (version "0.16")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://hackage/package/xmonad-contrib/"
+                           "xmonad-contrib-" version ".tar.gz"))
+       (sha256
+        (base32 "1pddgkvnbww28wykncc7j0yb0lv15bk7xnnhdcbrwkxzw66w6wmd"))))
+    (arguments
+     `(#:cabal-revision
+       ("1" "0vimkby2gq6sgzxzbvz67caba609xqlv2ii2gi8a1cjrnn6ib011")
+       ,@(package-arguments ghc-xmonad-contrib-next)))
+    (native-inputs '())
+    (propagated-inputs
+     (list ghc-old-time
+           ghc-random
+           ghc-utf8-string
+           ghc-extensible-exceptions
+           ghc-semigroups
+           ghc-x11
+           ghc-x11-xft
+           xmonad))))
+
 (define-public evilwm
   (package
     (name "evilwm")
@@ -863,9 +945,7 @@ tiling window manager for X.")
        (patches (search-patches "evilwm-lost-focus-bug.patch"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxrandr" ,libxrandr)))
+     (list libx11 libxext libxrandr))
     (arguments
      `(#:modules ((srfi srfi-26)
                   (guix build utils)
@@ -930,18 +1010,18 @@ drags, snap-to-border support, and virtual desktops.")
                      Type=Application~%" ,name ,synopsis out)))
                #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("freetype" ,freetype)
-       ("fribidi" ,fribidi)
-       ("imlib2" ,imlib2)
-       ("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxft" ,libxft)
-       ("libxinerama" ,libxinerama)
-       ("libxpm"  ,libxpm)
-       ("libxrandr" ,libxrandr)
-       ("libxrender" ,libxrender)))
+     (list freetype
+           fribidi
+           imlib2
+           libx11
+           libxext
+           libxft
+           libxinerama
+           libxpm
+           libxrandr
+           libxrender))
     (description "Fluxbox is a window manager.  It is light on resources
 and easy to handle yet full of features to make an easy and fast desktop
 experience.")
@@ -951,7 +1031,7 @@ experience.")
 (define-public fnott
   (package
     (name "fnott")
-    (version "1.1.0")
+    (version "1.1.2")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -960,23 +1040,16 @@ experience.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1xaz13iry3fdjhqk9xzg29kbv7hqj8dzzqxr5mhrj8f2m013jdc3"))))
+                "0vkwyci4z4jj2aczxkrmj0861j5jczjr8isasa7gml93nlvyw7gv"))))
     (build-system meson-build-system)
-    (arguments
-     `( #:meson ,meson-0.55
-        #:build-type "release"))
+    (arguments `(#:build-type "release"))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("wayland-protocols" ,wayland-protocols)
-       ("tllist" ,tllist)
-       ("gcc" ,gcc-10)     ;TODO: Remove when the default compiler is > GCC 7.
-       ("scdoc" ,scdoc)))
+     (list pkg-config
+           wayland-protocols
+           tllist
+           scdoc))
     (inputs
-     `(("wlroots" ,wlroots)
-       ("wayland" ,wayland)
-       ("fcft" ,fcft)
-       ("dbus" ,dbus)
-       ("libpng" ,libpng)))
+     (list wlroots wayland fcft dbus libpng))
     (home-page "https://codeberg.org/dnkl/fnott")
     (synopsis "Keyboard driven and lightweight Wayland notification daemon")
     (description "Fnott is a keyboard driven and lightweight notification daemon
@@ -1009,41 +1082,42 @@ for wlroots-based Wayland compositors.")
                "\"~c\"")))
            #t))
        (patches
-        (search-patches "awesome-reproducible-png.patch"))))
+        (search-patches "awesome-reproducible-png.patch"
+                        "awesome-4.3-fno-common.patch"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("asciidoc" ,asciidoc)
-       ("docbook-xsl" ,docbook-xsl)
-       ("doxygen" ,doxygen)
-       ("gperf" ,gperf)
-       ("imagemagick" ,imagemagick)
-       ("libxml2" ,libxml2)             ;for XML_CATALOG_FILES
-       ("lua-ldoc" ,lua-ldoc)
-       ("pkg-config" ,pkg-config)
-       ("xmlto" ,xmlto)))
+     (list asciidoc
+           docbook-xsl
+           doxygen
+           gperf
+           imagemagick
+           libxml2 ;for XML_CATALOG_FILES
+           lua-ldoc
+           pkg-config
+           xmlto))
     (inputs
-     `(("cairo" ,cairo)
-       ("dbus" ,dbus)
-       ("gdk-pixbuf" ,gdk-pixbuf)
-       ("glib" ,glib)
-       ("gobject-introspection" ,gobject-introspection)
-       ("imlib2" ,imlib2)
-       ("libev" ,libev)
-       ("libxcb" ,libxcb)
-       ("libxcursor" ,libxcursor)
-       ("libxdg-basedir" ,libxdg-basedir)
-       ("libxkbcommon" ,libxkbcommon)
-       ("lua" ,lua)
-       ("lua-lgi" ,lua-lgi)
-       ("pango" ,pango)
-       ("startup-notification" ,startup-notification)
-       ("xcb-util" ,xcb-util)
-       ("xcb-util-cursor" ,xcb-util-cursor)
-       ("xcb-util-image" ,xcb-util-image)
-       ("xcb-util-keysyms" ,xcb-util-keysyms)
-       ("xcb-util-renderutil" ,xcb-util-renderutil)
-       ("xcb-util-xrm" ,xcb-util-xrm)
-       ("xcb-util-wm" ,xcb-util-wm)))
+     (list cairo
+           dbus
+           gdk-pixbuf
+           glib
+           gobject-introspection
+           imlib2
+           libev
+           libxcb
+           libxcursor
+           libxdg-basedir
+           libxkbcommon
+           lua
+           lua-lgi
+           pango
+           startup-notification
+           xcb-util
+           xcb-util-cursor
+           xcb-util-image
+           xcb-util-keysyms
+           xcb-util-renderutil
+           xcb-util-xrm
+           xcb-util-wm))
     (arguments
      `(#:modules ((guix build cmake-build-system)
                   (guix build utils)
@@ -1091,7 +1165,8 @@ for wlroots-based Wayland compositors.")
                (setenv "LD_LIBRARY_PATH" cairo)
                (setenv "LUA_PATH" (string-append "?.lua;" lua-path))
                (setenv "LUA_CPATH" lua-cpath)
-               #t)))
+               (setenv "HOME" (getcwd))
+               (setenv "XDG_CACHE_HOME" (getcwd)))))
          (replace 'check
            (lambda _
              ;; There aren't any tests, so just make sure the binary
@@ -1128,17 +1203,17 @@ dynamic and extensible using the Lua programming language.")
 (define-public menumaker
   (package
     (name "menumaker")
-    (version "0.99.12")
+    (version "0.99.14")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://sourceforge/menumaker/"
                            "menumaker-" version ".tar.gz"))
        (sha256
-        (base32 "034v5204bsgkzzk6zfa5ia63q95gln47f7hwf96yvad5hrhmd8z3"))))
+        (base32 "0nnnc1awvhq5pplvclap3ha61g9209bca6zqgpsm1f53fq75vs8i"))))
     (build-system gnu-build-system)
     (inputs
-     `(("python" ,python)))
+     (list python))
     (synopsis "Heuristics-driven menu generator")
     (description
      "MenuMaker is a menu generation utility for a number of X window
@@ -1176,12 +1251,9 @@ all of them.  Currently supported window managers include:
          "0h52hj3ay8mfhwvmfxbxlfyq74hifdk8wxgxp7fr4iy6189hg7w7"))))
     (build-system gnu-build-system)
     (inputs
-     `(("python-2" ,python-2)
-       ("gtk+-2" ,gtk+-2)))
+     (list python-2 gtk+-2))
     (native-inputs
-     `(("python2-pygtk" ,python2-pygtk)
-       ("gtk-doc" ,gtk-doc)
-       ("pkg-config" ,pkg-config)))
+     (list python2-pygtk gtk-doc pkg-config))
     (synopsis "Library for registering global keyboard shortcuts")
     (description
      "Keybinder is a library for registering global keyboard shortcuts.
@@ -1205,11 +1277,9 @@ Keybinder works with GTK-based applications using the X Window System.")
          "0830ihwnalw59pp1xzrp37dn58n8vwb8zasnm4a1h81v3x7dxqz6"))))
     (build-system gnu-build-system)
     (inputs
-     `(("gtk+" ,gtk+)
-       ("gobject-introspection" ,gobject-introspection)))
+     (list gtk+ gobject-introspection))
     (native-inputs
-     `(("gtk-doc" ,gtk-doc)
-       ("pkg-config" ,pkg-config)))
+     (list gtk-doc pkg-config))
     (synopsis "Library for registering global keyboard shortcuts, Gtk3 version")
     (description
      "Keybinder is a library for registering global keyboard shortcuts.
@@ -1266,8 +1336,7 @@ Keybinder works with GTK-based applications using the X Window System.")
        ("xcb-util-wm" ,xcb-util-wm)
        ("xcb-util-keysyms" ,xcb-util-keysyms)))
     (native-inputs
-     `(("libxt" ,libxt)
-       ("pkg-config" ,pkg-config)))
+     (list libxt pkg-config))
     (synopsis "Minimalistic automatic tiling window manager")
     (description
      "Spectrwm is a small dynamic tiling and reparenting window manager for X11.
@@ -1327,12 +1396,9 @@ It is inspired by Xmonad and dwm.  Its major features include:
                            output)))
                #t))))))
     (inputs
-     `(("libxft" ,libxft)
-       ("libxrandr" ,libxrandr)
-       ("libxinerama" ,libxinerama)))
+     (list libxft libxrandr libxinerama))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("bison" ,bison)))
+     (list pkg-config bison))
     (home-page "https://github.com/leahneukirchen/cwm")
     (synopsis "OpenBSD fork of the calmwm window manager")
     (description "Cwm is a stacking window manager for X11.  It is an OpenBSD
@@ -1342,7 +1408,7 @@ project derived from the original Calm Window Manager.")
 (define-public dwl
   (package
     (name "dwl")
-    (version "0.2")
+    (version "0.2.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1351,7 +1417,7 @@ project derived from the original Calm Window Manager.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0r5hsxpckkrq1y7bjfq58rlc5xy45z499rg628q3nh289978ail1"))))
+                "0js8xjc2rx1ml6s58s90jrak5n7vh3kj5na2j4yy3qy0cb501xcm"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ; no tests
@@ -1363,9 +1429,9 @@ project derived from the original Calm Window Manager.")
        (modify-phases %standard-phases
          (delete 'configure))))         ; no configure
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("wlroots" ,wlroots)))
+     (list wlroots))
     (home-page "https://github.com/djpohly/dwl")
     (synopsis "Dynamic window manager for Wayland")
     (description
@@ -1392,12 +1458,9 @@ limited size and a few external dependencies.  It is configurable via
                 "0zc3fl1mbhq0iyndy4ysmy8vv5c7xwf54rbgamzfhfvsgdq160pl"))))
     (build-system gnu-build-system)
     (inputs
-     `(("gtk+" ,gtk+-2)
-       ("gtkmm" ,gtkmm-2)
-       ("glib" ,glib)
-       ("glibmm" ,glibmm)))
+     (list gtk+-2 gtkmm-2 glib glibmm))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://projects.l3ib.org/nitrogen/")
     (synopsis "Background browser and setter for X windows")
     (description
@@ -1421,34 +1484,34 @@ its size
 (define-public polybar
   (package
     (name "polybar")
-    (version "3.5.5")
+    (version "3.5.7")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://github.com/polybar/polybar/releases/"
                            "download/" version "/polybar-" version ".tar.gz"))
        (sha256
-        (base32 "1c8br9972x1qw7l2shj9aqzv0gsx58fdh3r0f1z5i1bqdwxmsqky"))))
+        (base32 "1nr386jdlm8qkbdf23w7lyvbfhr362s90f957fawnyi1finhw8bk"))))
     (build-system cmake-build-system)
     (arguments
      ;; Test is disabled because it requires downloading googletest from the
      ;; Internet.
      '(#:tests? #f))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("cairo" ,cairo)
-       ("i3-wm" ,i3-wm)
-       ("jsoncpp" ,jsoncpp)
-       ("libmpdclient" ,libmpdclient)
-       ("libnl" ,libnl)
-       ("libxcb" ,libxcb)
-       ("pulseaudio" ,pulseaudio)
-       ("xcb-proto" ,xcb-proto)
-       ("xcb-util" ,xcb-util)
-       ("xcb-util-cursor" ,xcb-util-cursor)
-       ("xcb-util-image" ,xcb-util-image)
-       ("xcb-util-wm" ,xcb-util-wm)
-       ("xcb-util-xrm" ,xcb-util-xrm)))
+     (list alsa-lib
+           cairo
+           i3-wm
+           jsoncpp
+           libmpdclient
+           libnl
+           libxcb
+           pulseaudio
+           xcb-proto
+           xcb-util
+           xcb-util-cursor
+           xcb-util-image
+           xcb-util-wm
+           xcb-util-xrm))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("python-sphinx" ,python-sphinx) ; for the manual
@@ -1466,7 +1529,7 @@ functionality to display information about the most commonly used services.")
 (define-public wlroots
   (package
     (name "wlroots")
-    (version "0.12.0")
+    (version "0.14.1")
     (source
      (origin
        (method git-fetch)
@@ -1475,12 +1538,10 @@ functionality to display information about the most commonly used services.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "01j38lmgs2c6fq68v8b75pkilia2wsgzgp46ivfbi9hhx47kgcfn"))))
+        (base32 "1sshp3lvlkl1i670kxhwsb4xzxl8raz6769kqvgmxzcb63ns9ay1"))))
     (build-system meson-build-system)
     (arguments
-     `(#:configure-flags '("-Dlogind-provider=elogind")
-       #:meson ,meson-0.55
-       #:phases
+     `(#:phases
        (modify-phases %standard-phases
          (add-before 'configure 'hardcode-paths
            (lambda* (#:key inputs #:allow-other-keys)
@@ -1490,20 +1551,20 @@ functionality to display information about the most commonly used services.")
                                             "/bin/Xwayland")))
              #t)))))
     (propagated-inputs
-     `(;; As required by wlroots.pc.
-       ("elogind" ,elogind)
-       ("eudev" ,eudev)
-       ("libinput" ,libinput)
-       ("libxkbcommon" ,libxkbcommon)
-       ("mesa" ,mesa)
-       ("pixman" ,pixman)
-       ("wayland" ,wayland)
-       ("wayland-protocols" ,wayland-protocols)
-       ("xcb-util-errors" ,xcb-util-errors)
-       ("xcb-util-wm" ,xcb-util-wm)
-       ("xorg-server-xwayland" ,xorg-server-xwayland)))
+     (list ;; As required by wlroots.pc.
+           eudev
+           libinput
+           libxkbcommon
+           mesa
+           pixman
+           seatd
+           wayland
+           wayland-protocols
+           xcb-util-errors
+           xcb-util-wm
+           xorg-server-xwayland))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/swaywm/wlroots")
     (synopsis "Pluggable, composable, unopinionated modules for building a
 Wayland compositor")
@@ -1514,7 +1575,7 @@ modules for building a Wayland compositor.")
 (define-public sway
   (package
     (name "sway")
-    (version "1.5.1")
+    (version "1.6.1")
     (source
      (origin
        (method git-fetch)
@@ -1523,7 +1584,7 @@ modules for building a Wayland compositor.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1xsa3h8zhf29p0mi90baxpr76jkd9pd1gr97ky8cnjbcs4isj9j0"))))
+        (base32 "0j4sdbsrlvky1agacc0pcz9bwmaxjmrapjnzscbd2i0cria2fc5j"))))
     (build-system meson-build-system)
     (arguments
      `(#:phases
@@ -1541,23 +1602,19 @@ modules for building a Wayland compositor.")
                 (string-append "'" (assoc-ref inputs "scdoc")
                                "/bin/scdoc'")))
              #t)))))
-    (inputs `(("cairo" ,cairo)
-              ("elogind" ,elogind)
-              ("gdk-pixbuf" ,gdk-pixbuf)
-              ("json-c" ,json-c)
-              ("libevdev" ,libevdev)
-              ("libinput" ,libinput)
-              ("libxkbcommon" ,libxkbcommon)
-              ("pango" ,pango)
-              ("swaybg" ,swaybg)
-              ("wayland" ,wayland)
-              ("wlroots" ,wlroots)))
+    (inputs (list cairo
+                  elogind
+                  gdk-pixbuf
+                  json-c
+                  libevdev
+                  libinput
+                  libxkbcommon
+                  pango
+                  swaybg
+                  wayland
+                  wlroots))
     (native-inputs
-     `(("linux-pam" ,linux-pam)
-       ("mesa" ,mesa)
-       ("pkg-config" ,pkg-config)
-       ("scdoc" ,scdoc)
-       ("wayland-protocols" ,wayland-protocols)))
+     (list linux-pam mesa pkg-config scdoc wayland-protocols))
     (home-page "https://github.com/swaywm/sway")
     (synopsis "Wayland compositor compatible with i3")
     (description "Sway is a i3-compatible Wayland compositor.")
@@ -1566,7 +1623,7 @@ modules for building a Wayland compositor.")
 (define-public swayidle
   (package
     (name "swayidle")
-    (version "1.6")
+    (version "1.7")
     (source
      (origin
        (method git-fetch)
@@ -1575,15 +1632,12 @@ modules for building a Wayland compositor.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1nd3v8r9549lykdwh4krldfl59lzaspmmai5k1icy7dvi6kkr18r"))))
+        (base32 "0ziya8d5pvvxg16jhy4i04pvq11bdvj68gz5q654ar4dldil17nn"))))
     (build-system meson-build-system)
     (arguments
      `(#:configure-flags '("-Dlogind-provider=elogind")))
-    (inputs `(("elogind" ,elogind)
-              ("wayland" ,wayland)))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("scdoc" ,scdoc)
-                     ("wayland-protocols" ,wayland-protocols)))
+    (inputs (list elogind wayland))
+    (native-inputs (list pkg-config scdoc wayland-protocols))
     (home-page "https://github.com/swaywm/swayidle")
     (synopsis "Idle management daemon for Wayland compositors")
     (description "Swayidle is a idle management daemon for Wayland compositors.")
@@ -1603,15 +1657,10 @@ modules for building a Wayland compositor.")
        (sha256
         (base32 "0r95p4w11dwm5ra614vddz83r8j7z6gd120z2vcchy7m9b0f15kf"))))
     (build-system meson-build-system)
-    (inputs `(("cairo" ,cairo)
-              ("gdk-pixbuf" ,gdk-pixbuf)
-              ("libxkbcommon" ,libxkbcommon)
-              ;("linux-pam" ,linux-pam) ; FIXME: Doesn't work.
-              ("wayland" ,wayland)))
-    (native-inputs `(("pango" ,pango)
-                     ("pkg-config" ,pkg-config)
-                     ("scdoc" ,scdoc)
-                     ("wayland-protocols" ,wayland-protocols)))
+    (inputs (list cairo gdk-pixbuf libxkbcommon
+                  ;("linux-pam" ,linux-pam) ; FIXME: Doesn't work.
+                  wayland))
+    (native-inputs (list pango pkg-config scdoc wayland-protocols))
     (home-page "https://github.com/swaywm/sway")
     (synopsis "Screen locking utility for Wayland compositors")
     (description "Swaylock is a screen locking utility for Wayland compositors.")
@@ -1663,12 +1712,8 @@ display a clock or apply image manipulation techniques to the background image."
        (sha256
         (base32 "1lmqz5bmig90gq2m7lwf02d2g7z4hzf8fhqz78c8vk92c6p4xwbc"))))
     (build-system meson-build-system)
-    (inputs `(("cairo" ,cairo)
-              ("gdk-pixbuf" ,gdk-pixbuf)
-              ("wayland" ,wayland)))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("scdoc" ,scdoc)
-                     ("wayland-protocols" ,wayland-protocols)))
+    (inputs (list cairo gdk-pixbuf wayland))
+    (native-inputs (list pkg-config scdoc wayland-protocols))
     (home-page "https://github.com/swaywm/sway")
     (synopsis "Screen wallpaper utility for Wayland compositors")
     (description "Swaybg is a wallpaper utility for Wayland compositors.")
@@ -1677,7 +1722,7 @@ display a clock or apply image manipulation techniques to the background image."
 (define-public waybar
   (package
     (name "waybar")
-    (version "0.9.7")
+    (version "0.9.8")
     (source
      (origin
        (method git-fetch)
@@ -1686,26 +1731,23 @@ display a clock or apply image manipulation techniques to the background image."
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "17cn4d3dx92v40jd9vl41smp8hh3gf5chd1j2f7l1lrpfpnllg5x"))))
+        (base32 "109a49f064ma5js2d7maribmfalswbmmhq2fraa7hfz5pf2jxs2w"))))
     (build-system meson-build-system)
-    (inputs `(("date" ,date)
-              ("fmt" ,fmt)
-              ("gtk-layer-shell" ,gtk-layer-shell)
-              ("gtkmm" ,gtkmm)
-              ("jsoncpp" ,jsoncpp)
-              ("libdbusmenu" ,libdbusmenu)
-              ("libinput" ,libinput)
-              ("libmpdclent" ,libmpdclient)
-              ("libnl" ,libnl)
-              ("pulseaudio" ,pulseaudio)
-              ("spdlog" ,spdlog)
-              ("wayland" ,wayland)))
+    (inputs (list date
+                  fmt
+                  gtk-layer-shell
+                  gtkmm-3
+                  jsoncpp
+                  libdbusmenu
+                  libinput
+                  libmpdclient
+                  libnl
+                  libxml2
+                  pulseaudio
+                  spdlog
+                  wayland))
     (native-inputs
-     `(("gcc" ,gcc-8)                   ; for #include <filesystem>
-       ("glib:bin" ,glib "bin")
-       ("pkg-config" ,pkg-config)
-       ("scdoc" ,scdoc)
-       ("wayland-protocols" ,wayland-protocols)))
+     (list `(,glib "bin") pkg-config scdoc wayland-protocols))
     (home-page "https://github.com/Alexays/Waybar")
     (synopsis "Wayland bar for Sway and Wlroots based compositors")
     (description "Waybar is a highly customisable Wayland bar for Sway and
@@ -1715,20 +1757,20 @@ Wlroots based compositors.")
 (define-public wlr-randr
   (package
     (name "wlr-randr")
-    (version "0.1.0")
+    (version "0.2.0")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://github.com/emersion/wlr-randr")
+             (url "https://git.sr.ht/~emersion/wlr-randr")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "10c8zzp78s5bw34vvjhilipa28bsdx3jbyhnxgp8f8kawh3cvgsc"))))
+        (base32 "0d44r4schknfc3g09y0kjbhl62zkynv6hi1z4zqc9ic5fhav3r15"))))
     (build-system meson-build-system)
-    (inputs `(("wayland" ,wayland)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (home-page "https://github.com/emersion/wlr-randr")
+    (inputs (list wayland))
+    (native-inputs (list pkg-config))
+    (home-page "https://sr.ht/~emersion/wlr-randr")
     (synopsis "Utility to manage Wayland compositor outputs")
     (description "wlr-randr is a utility to manage outputs of a Wayland compositor.")
     (license license:expat))) ; MIT license
@@ -1736,7 +1778,7 @@ Wlroots based compositors.")
 (define-public mako
   (package
     (name "mako")
-    (version "1.4.1")
+    (version "1.6")
     (source
      (origin
        (method git-fetch)
@@ -1745,16 +1787,10 @@ Wlroots based compositors.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0hwvibpnrximb628w9dsfjpi30b5jy7nfkm4d94z5vhp78p43vxh"))))
+        (base32 "0vbx2r01rq3r9zc6kflah44ms1fzf4z857zmq3qxnfsyjdkz1hs5"))))
     (build-system meson-build-system)
-    (inputs `(("cairo" ,cairo)
-              ("elogind" ,elogind)
-              ("gdk-pixbuf" ,gdk-pixbuf)
-              ("pango" ,pango)
-              ("wayland" ,wayland)))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("scdoc" ,scdoc)
-                     ("wayland-protocols" ,wayland-protocols)))
+    (inputs (list cairo elogind gdk-pixbuf pango wayland))
+    (native-inputs (list pkg-config scdoc wayland-protocols))
     (home-page "https://wayland.emersion.fr/mako")
     (synopsis "Lightweight Wayland notification daemon")
     (description "Mako is a lightweight notification daemon for Wayland
@@ -1775,9 +1811,8 @@ compositors that support the layer-shell protocol.")
        (sha256
         (base32 "0nbpgm8qnn7ljsg9vgs35kl8l4rrk542vdcbx8wrn9r909ld3x92"))))
     (build-system meson-build-system)
-    (inputs `(("wayland" ,wayland)))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("scdoc" ,scdoc)))
+    (inputs (list wayland))
+    (native-inputs (list pkg-config scdoc))
     (home-page "https://wayland.emersion.fr/kanshi")
     (synopsis "Hotswappable output profiles for Wayland")
     (description "Kanshi allows you to define output profiles that are
@@ -1920,9 +1955,7 @@ productive, customizable lisp based systems.")
     (inherit stumpwm-contrib)
     (name "stumpish")
     (inputs
-     `(("bash" ,bash)
-       ("rlwrap" ,rlwrap)
-       ("xprop" ,xprop)))
+     (list bash rlwrap xprop))
     (build-system trivial-build-system)
     (arguments
      '(#:modules ((guix build utils))
@@ -1932,12 +1965,9 @@ productive, customizable lisp based systems.")
          (copy-recursively (assoc-ref %build-inputs "source") ".")
          (chdir "util/stumpish")
          (substitute* "stumpish"
-           (("rlwrap") (string-append (assoc-ref %build-inputs "rlwrap")
-                                      "/bin/rlwrap"))
-           (("xprop") (string-append (assoc-ref %build-inputs "xprop")
-                                      "/bin/xprop"))
-           (("/bin/sh") (string-append (assoc-ref %build-inputs "bash")
-                                       "/bin/bash")))
+           (("rlwrap") (search-input-file %build-inputs "/bin/rlwrap"))
+           (("xprop") (search-input-file %build-inputs "/bin/xprop"))
+           (("/bin/sh") (search-input-file %build-inputs "/bin/bash")))
          (install-file "stumpish" (string-append %output "/bin")))))
     (home-page "https://github.com/stumpwm/stumpwm-contrib")
     (synopsis "StumpWM interactive shell")
@@ -2238,9 +2268,9 @@ PNG files.")
          (modify-phases %standard-phases
            (delete 'configure))))
       (inputs
-       `(("libxcb" ,libxcb)))
+       (list libxcb))
       (native-inputs
-       `(("perl" ,perl)))
+       (list perl))
       (home-page "https://github.com/LemonBoy/bar")
       (synopsis "Featherweight status bar")
       (description
@@ -2267,10 +2297,8 @@ wasting your precious memory.")
                  (base32
                   "0588g37h18lv50h7w8vfbwhvc3iajh7sdr53848spaif99nh3mh4"))))
       (inputs
-       `(("freetype" ,freetype)
-         ("libxft" ,libxft)
-         ("libx11" ,libx11)
-         ,@(package-inputs lemonbar)))
+       (modify-inputs (package-inputs lemonbar)
+         (prepend freetype libxft libx11)))
       (arguments
        (substitute-keyword-arguments (package-arguments lemonbar)
          ((#:make-flags make-flags)
@@ -2311,7 +2339,7 @@ support, for easier unicode usage.")))))
                 "0wnsfxvh4v02r2jjyh2n6jfkbj2dna2hlm6anl4b36lwji749k2k"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libx11" ,libx11)))
+     (list libx11))
     (arguments
      `(#:tests? #f ;no test suite
        #:make-flags
@@ -2341,11 +2369,7 @@ button is pressed on the root window.")
                 "0qgxkrv9jnnnf3px7zh0paf8xsr4bcpf0f2nq9zy012m214223hs"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libx11" ,libx11)
-       ("libxinerama" ,libxinerama)
-       ("libxft" ,libxft)
-       ("freetype" ,freetype)
-       ("imlib2" ,imlib2)))
+     (list libx11 libxinerama libxft freetype imlib2))
     (arguments
      `(#:tests? #f ;no test suite
        #:make-flags
@@ -2397,15 +2421,15 @@ selected to stdout.  It can be controlled both via mouse and via keyboard.")
                #t))))))
     (build-system gnu-build-system)
     (inputs
-     `(("libx11" ,libx11)
-       ("libxft" ,libxft)
-       ("libxpm" ,libxpm)
-       ("libpng" ,libpng)
-       ("freetype" ,freetype)
-       ("imlib2" ,imlib2)
-       ("sed" ,sed)))
+     (list libx11
+           libxft
+           libxpm
+           libpng
+           freetype
+           imlib2
+           sed))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
      `(#:tests? #f)) ;no test suite
     (home-page "https://sourceforge.net/projects/idesk/")
@@ -2431,10 +2455,7 @@ start-up.")
                 "1jxms4md2mwfjgm2pgg3vakpp33800jbn9hnl0j4jyfc9f1ckbsv"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libx11" ,libx11)
-       ("libxft" ,libxft)
-       ("libxinerama" ,libxinerama)
-       ("imlib2" ,imlib2)))
+     (list libx11 libxft libxinerama imlib2))
     (arguments
      `(#:make-flags
        (list (string-append "CC=" ,(cc-for-target))
@@ -2455,7 +2476,7 @@ shows a notification for the user on the screen.")
 (define-public cagebreak
   (package
     (name "cagebreak")
-    (version "1.6.0")
+    (version "1.8.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -2464,15 +2485,13 @@ shows a notification for the user on the screen.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "02gxmypfj75amdd8lwdkkk7imw7lwmghpyk8h9asljy9aq6ymdqp"))))
+                "0296mnzk7qd0zvnhw716jvpp7madjsar373ixx4qcff0m0jwfrxm"))))
     (build-system meson-build-system)
     (arguments '(#:configure-flags '("-Dxwayland=true")))
     (native-inputs
-     `(("pandoc" ,pandoc)
-       ("pkg-config" ,pkg-config)))
+     (list pandoc pkg-config))
     (inputs
-     `(("pango" ,pango)
-       ("wlroots" ,wlroots)))
+     (list libevdev pango wlroots))
     (home-page "https://github.com/project-repo/cagebreak")
     (synopsis "Tiling wayland compositor inspired by ratpoison")
     (description
@@ -2496,10 +2515,7 @@ for wayland conceptually based on the X11 window manager
         (base32
          "1h52ldxankyhbbm1qbqz1f2q0j03c1b4mig7343bs3mc6fpm18gf"))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ("libtool" ,libtool)))
+     (list autoconf automake pkg-config libtool))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f)) ;; no tests
@@ -2512,19 +2528,17 @@ read and write, and compatible with JSON.")
 (define-public hikari
   (package
     (name "hikari")
-    (version "2.2.3")
+    (version "2.3.2")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://hikari.acmelabs.space/releases/"
                            "hikari-" version ".tar.gz"))
        (sha256
-        (base32 "1d023cphzi15k434n60l1rp5awxmdijvsxfrm59fmsvd5rjxh9q7"))))
+        (base32 "1jvy21irh6s7czff2hk63spswqibjcjhrpsgmrki5bii9ddi73wy"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("bmake" ,bmake)
-       ("pkg-config" ,pkg-config)
-       ("wayland-protocols" ,wayland-protocols)))
+     (list bmake pkg-config wayland-protocols))
     (inputs
      `(("cairo" ,cairo)
        ("libinput" ,libinput)
@@ -2560,6 +2574,75 @@ read and write, and compatible with JSON.")
 capabilities.  It is heavily inspired by the Calm Window manager(cwm).")
     (license license:bsd-2)))
 
+(define-public devour
+  (package
+    (name "devour")
+    (version "12")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/salman-abedin/devour")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1qq5l6d0fn8azg7sj7a4m2jsmhlpswl5793clcxs1p34vy4wb2lp"))))
+    (build-system gnu-build-system)
+    (inputs
+     (list libx11))
+    (arguments
+     `(#:tests? #f                      ;no tests
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure))           ;no configure script
+       #:make-flags
+       (list (string-append "CC=" ,(cc-for-target))
+             (string-append "BIN_DIR=" %output "/bin"))))
+    (home-page "https://github.com/salman-abedin/devour")
+    (synopsis "X11 window swallower")
+    (description
+     "@command{devour} hides your current window before launching an external
+program and unhides it after quitting.")
+    (license license:gpl2)))
+
+(define-public trayer-srg
+  (package
+    (name "trayer-srg")
+    (version "1.1.8")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/sargon/trayer-srg")
+             (commit (string-append "trayer-" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1mvhwaqa9bng9wh3jg3b7y8gl7nprbydmhg963xg0r076jyzv0cg"))))
+    (native-inputs
+     (list libxmu pkg-config))
+    (inputs
+     (list libx11 gdk-pixbuf gtk+-2))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f ; There are no tests.
+       #:make-flags
+       (let ((out (assoc-ref %outputs "out")))
+         (list (string-append "CC=" ,(cc-for-target))
+               (string-append "PREFIX=" %output)))
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'configure
+           (lambda* (#:key configure-flags #:allow-other-keys)
+             (apply invoke "./configure" configure-flags))))))
+    (home-page "https://github.com/sargon/trayer-srg")
+    (synopsis "Minimal GTK based system tray")
+    (description
+     "@command{trayer} is small program designed to provide systray
+functionality present in GNOME/KDE desktop environments for window managers
+which do not support it.")
+    (license license:expat)))
+
 (define-public wlogout
   (package
     (name "wlogout")
@@ -2575,11 +2658,9 @@ capabilities.  It is heavily inspired by the Calm Window manager(cwm).")
                 "1swhzkqkzli59c89pvrakfvicd00x7ga860c3x2pbb4y3xziqfvi"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("scdoc" ,scdoc)))
+     (list pkg-config scdoc))
     (inputs
-     `(("gtk-layer-shell" ,gtk-layer-shell)
-       ("gtk+" ,gtk+)))
+     (list gtk-layer-shell gtk+))
     (arguments
      '(#:tests? #f
        #:phases
diff --git a/gnu/packages/wordnet.scm b/gnu/packages/wordnet.scm
index 03dadd431e..f46cc27b76 100644
--- a/gnu/packages/wordnet.scm
+++ b/gnu/packages/wordnet.scm
@@ -86,8 +86,7 @@
     (outputs '("out"
                "tk"))                             ; for the Tcl/Tk GUI
 
-    (inputs `(("tk" ,tk)
-              ("tcl" ,tcl)))
+    (inputs (list tk tcl))
     (home-page "https://wordnet.princeton.edu/")
     (synopsis "Lexical database for the English language")
     (description
diff --git a/gnu/packages/wv.scm b/gnu/packages/wv.scm
index a8c0d3cbaf..1fdcf0ac2b 100644
--- a/gnu/packages/wv.scm
+++ b/gnu/packages/wv.scm
@@ -43,14 +43,9 @@
         (base32 "17f16lkdv1c3amaz2hagiicih59ynpp4786k1m2qa1sw68xhswsc"))))
     (build-system gnu-build-system)
     (inputs
-      `(("glib" ,glib)
-        ("libgsf" ,libgsf)
-        ("libjpeg" ,libjpeg-turbo)
-        ("libpng" ,libpng)
-        ("zlib" ,zlib)))
+      (list glib libgsf libjpeg-turbo libpng zlib))
     (native-inputs
-      `(("glib" ,glib "bin")
-        ("pkg-config" ,pkg-config)))
+      (list `(,glib "bin") pkg-config))
     (synopsis "Microsoft Word conversion library and utilities")
     (description
      "wv converts files written by Word 2000, 97, 95, and 6 (known internally as
diff --git a/gnu/packages/wxwidgets.scm b/gnu/packages/wxwidgets.scm
index 54d385fd53..41ea99feed 100644
--- a/gnu/packages/wxwidgets.scm
+++ b/gnu/packages/wxwidgets.scm
@@ -26,6 +26,7 @@
 
 (define-module (gnu packages wxwidgets)
   #:use-module (guix packages)
+  #:use-module (guix gexp)
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module ((guix licenses) #:prefix l:)
@@ -33,6 +34,7 @@
   #:use-module (guix build-system python)
   #:use-module (guix utils)
   #:use-module (gnu packages)
+  #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages databases)
   #:use-module (gnu packages freedesktop)
@@ -79,7 +81,7 @@
        ("shared-mime-info" ,shared-mime-info)
        ("xdg-utils" ,xdg-utils)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
      `(#:configure-flags
        '("--with-regex" "--with-libmspack"
@@ -100,8 +102,7 @@
        (modify-phases %standard-phases
          (add-after 'unpack 'refer-to-inputs
            (lambda* (#:key inputs #:allow-other-keys)
-             (let* ((mime (string-append (assoc-ref inputs "shared-mime-info")
-                                         "/share/mime")))
+             (let* ((mime (search-input-directory inputs "/share/mime")))
                (substitute* "src/unix/utilsx11.cpp"
                  (("wxExecute\\(xdg_open \\+")
                   (string-append "wxExecute(\"" (which "xdg-open") "\"")))
@@ -163,7 +164,7 @@ and many other languages.")
 ;; This can be removed when wxWidgets is updated to the next stable version.
 (define-public wxwidgets-3.1
   (package (inherit wxwidgets)
-           (version "3.1.0")
+           (version "3.1.5")
            (source
             (origin
               (method git-fetch)
@@ -173,14 +174,32 @@ and many other languages.")
               (file-name (git-file-name "wxwidgets" version))
               (sha256
                (base32
-                "14kl1rsngm70v3mbyv1mal15iz2b18k97avjx8jn7s81znha1c7f"))))
-           (inputs `(("gstreamer" ,gstreamer)
-                     ("gst-plugins-base" ,gst-plugins-base)
-                     ,@(package-inputs wxwidgets)))
+                "0j998nzqmycafignclxmahgqm5kgs1fiqbsiyvzm7bnpnafi333y"))))
+           (inputs (modify-inputs (package-inputs wxwidgets)
+                     (prepend catch-framework gstreamer gst-plugins-base)))
            (arguments
             (substitute-keyword-arguments (package-arguments wxwidgets)
               ((#:configure-flags flags)
-               `(cons "--enable-mediactrl" ,flags))))))
+               '(list "--with-regex" "--with-libmspack" "--with-sdl"
+                      "--enable-mediactrl" "--enable-webviewwebkit"))
+              ((#:phases phases)
+               `(modify-phases ,phases
+                  (add-after 'unpack 'add-catch
+                    (lambda* (#:key inputs #:allow-other-keys)
+                      (install-file
+                       (search-input-file inputs "include/catch.hpp")
+                       "3rdparty/catch/include/")))
+                  (replace 'configure
+                    (lambda* (#:key configure-flags inputs native-inputs outputs
+                         #:allow-other-keys)
+                      (let ((sh (search-input-file (or native-inputs inputs)
+                                                   "bin/sh")))
+                        (apply invoke "./configure"
+                               (string-append "SHELL=" sh)
+                               (string-append "CONFIG_SHELL=" sh)
+                               (string-append "--prefix="
+                                              (assoc-ref outputs "out"))
+                               configure-flags))))))))))
 
 (define-public wxwidgets-gtk2-3.1
   (package/inherit wxwidgets-3.1
@@ -216,7 +235,7 @@ and many other languages.")
              (setenv "WXWIN" (assoc-ref inputs "wxwidgets"))
              ;; Copy the waf executable to the source directory since it needs
              ;; to be in a writable directory.
-             (copy-file (string-append (assoc-ref inputs "python-waf") "/bin/waf")
+             (copy-file (search-input-file inputs "/bin/waf")
                         "bin/waf")
              (setenv "WAF" "bin/waf")
              ;; The build script tries to copy license files from the
@@ -232,15 +251,11 @@ and many other languages.")
                (("'build']") "'build_py', '--use_syswx']"))
              #t)))))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("wxwidgets" ,wxwidgets)))
+     (list gtk+ wxwidgets))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python-waf" ,python-waf)))
+     (list pkg-config python-waf))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-pillow" ,python-pillow)
-       ("python-six" ,python-six)))
+     (list python-numpy python-pillow python-six))
     (home-page "https://wxpython.org/")
     (synopsis "Cross platform GUI toolkit for Python")
     (description "wxPython is a cross-platform GUI toolkit for the Python
@@ -306,14 +321,15 @@ provide a 100% native look and feel for the application.")
              (setenv "WXWIN" (assoc-ref inputs "wxwidgets"))
              (use-modules (ice-9 popen) (ice-9 rdelim))
              (let ((port (open-pipe* OPEN_READ
-                                     (string-append (assoc-ref inputs "wxwidgets")
-                                                    "/bin/wx-config") "--cppflags")))
+                                     (search-input-file inputs
+                                                        "/bin/wx-config")
+                                     "--cppflags")))
                (setenv "CPPFLAGS" (read-string port))
                (close-pipe port))
              #t)))))
     (native-inputs
-     `(("mesa" ,mesa) ; for glcanvas
-       ("pkg-config" ,pkg-config)))
+     (list mesa ; for glcanvas
+           pkg-config))
     (inputs
      `(("gtk+" ,gtk+-2) ; for wxPython/src/helpers.cpp
        ("wxwidgets" ,wxwidgets-gtk2)))
@@ -335,15 +351,12 @@ provide a 100% native look and feel for the application.")
         (base32 "0agmmwg0zlsw1idygvqjpj1nk41akzlbdha0hsdk1k8ckz6niq8d"))))
     (build-system glib-or-gtk-build-system)
     (inputs
-     `(("wxwidgets" ,wxwidgets-3.1)
-       ("cairo" ,cairo)
-       ("ffmpeg" ,ffmpeg)))
+     (list wxwidgets-3.1 cairo ffmpeg))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (propagated-inputs
      ;; In Requires.private of libwxsvg.pc.
-     `(("libexif" ,libexif)
-       ("pango" ,pango)))
+     (list libexif pango))
     (synopsis "C++ library to create, manipulate and render SVG files")
     (description "wxSVG is a C++ library to create, manipulate and render
 @dfn{Scalable Vector Graphics} (SVG) files with the wxWidgets toolkit.")
diff --git a/gnu/packages/xdisorg.scm b/gnu/packages/xdisorg.scm
index 2e4eb30a9c..ec995c3496 100644
--- a/gnu/packages/xdisorg.scm
+++ b/gnu/packages/xdisorg.scm
@@ -3,7 +3,7 @@
 ;;; Copyright © 2014, 2015, 2016 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2014, 2015, 2016 Alex Kost <alezost@gmail.com>
-;;; Copyright © 2013, 2015, 2017, 2018, 2019, 2021y Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2015, 2017, 2018, 2019, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015, 2016 Mathieu Lirzin <mthl@gnu.org>
 ;;; Copyright © 2015 Alexander I.Grafov <grafov@gmail.com>
 ;;; Copyright © 2015 Andy Wingo <wingo@igalia.com>
@@ -11,7 +11,7 @@
 ;;; Copyright © 2015 Florian Paul Schmidt <mista.tapas@gmx.net>
 ;;; Copyright © 2016 Christine Lemmer-Webber <cwebber@dustycloud.org>
 ;;; Copyright © 2016, 2018 Ricardo Wurmus <rekado@elephly.net>
-;;; 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 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2016, 2017, 2019, 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2016 Petter <petter@mykolab.ch>
@@ -27,7 +27,7 @@
 ;;; Copyright © 2019 Wiktor Żelazny <wzelazny@vurv.cz>
 ;;; Copyright © 2019 Kyle Andrews <kyle.c.andrews@gmail.com>
 ;;; Copyright © 2019, 2020 Josh Holland <josh@inv.alid.pw>
-;;; Copyright © 2019 Tanguy Le Carrour <tanguy@bioneland.org>
+;;; Copyright © 2019, 2021 Tanguy Le Carrour <tanguy@bioneland.org>
 ;;; Copyright © 2020, 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;; Copyright © 2020 David Wilson <david@daviwil.com>
 ;;; Copyright © 2020 Ivan Vilata i Balaguer <ivan@selidor.net>
@@ -42,6 +42,7 @@
 ;;; Copyright © 2020 James Smith <jsubuntuxp@disroot.org>
 ;;; Copyright © 2020 B. Wilson <elaexuotee@wilsonb.com>
 ;;; Copyright © 2020, 2021 Zheng Junjie <873216071@qq.com>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
 ;;; Copyright © 2021 Renzo Poddighe <renzo@poddighe.nl>
@@ -49,6 +50,9 @@
 ;;; Copyright © 2021 Niklas Eklund <niklas.eklund@posteo.net>
 ;;; Copyright © 2021 Nikita Domnitskii <nikita@domnitskii.me>
 ;;; Copyright © 2021 ikasero <ahmed@ikasero.com>
+;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
+;;; Copyright © 2021 jgart <jgart@dismail.de>
+;;; Copyright © 2022 John Kehayias <john.kehayias@protonmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -67,12 +71,14 @@
 
 (define-module (gnu packages xdisorg)
   #:use-module (guix build-system cmake)
+  #:use-module (guix build-system copy)
   #:use-module (guix build-system glib-or-gtk)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system meson)
   #:use-module (guix build-system python)
   #:use-module (guix build-system scons)
   #:use-module (guix download)
+  #:use-module (guix gexp)
   #:use-module (guix git-download)
   #:use-module (guix hg-download)
   #:use-module ((guix licenses) #:prefix license:)
@@ -82,6 +88,7 @@
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages bash)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
@@ -100,6 +107,7 @@
   #:use-module (gnu packages haskell-xyz)
   #:use-module (gnu packages icu4c)
   #:use-module (gnu packages image)
+  #:use-module (gnu packages libbsd)
   #:use-module (gnu packages libevent)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages m4)
@@ -113,6 +121,7 @@
   #:use-module (gnu packages qt)
   #:use-module (gnu packages sphinx)
   #:use-module (gnu packages tcl)
+  #:use-module (gnu packages terminals)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
   #:use-module (gnu packages)
@@ -135,9 +144,7 @@
         (base32 "0f5070k2bwarghl1vq886pl52xck1x5p7x3qhlfchsc2y3dcqms9"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libxcb" ,libxcb)
-       ("xcb-util" ,xcb-util)
-       ("xcb-util-wm" ,xcb-util-wm)))
+     (list libxcb xcb-util xcb-util-wm))
     (arguments
      `(#:tests? #f                      ;no test suite
        #:make-flags (list (string-append "CC=" ,(cc-for-target))
@@ -222,17 +229,15 @@ program.")
         (base32 "0msw9b1hdy3gbq9w5d04mfizhyirz1c648x84mlcbzl8salm7vpg"))))
     (build-system python-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("xrandr" ,xrandr)
-       ("libxcb" ,libxcb)))
+     (list xrandr libxcb))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (add-before 'build 'configure
            (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let ((xrandr (string-append (assoc-ref inputs "xrandr")
-                                          "/bin/xrandr")))
+             (let ((xrandr (search-input-file inputs "/bin/xrandr")))
                (substitute* "contrib/etc/xdg/autostart/autorandr.desktop"
                  (("/usr") (assoc-ref outputs "out")))
                (substitute* "autorandr.py"
@@ -262,7 +267,7 @@ used to further tweak the behaviour of the different profiles.")
 (define-public bemenu
   (package
     (name "bemenu")
-    (version "0.6.2")
+    (version "0.6.4")
     (source
      (origin
        (method git-fetch)
@@ -271,7 +276,7 @@ used to further tweak the behaviour of the different profiles.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "13y4y3i03vdx3zkh4lm67xmigzycf8fxg4fdr5s4x2brr3ya46fv"))))
+        (base32 "18vplvnymgc6576sdh84lm5rlwyb9d038plqpjs638hzskf4q577"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f
@@ -282,7 +287,7 @@ used to further tweak the behaviour of the different profiles.")
                           (string-append "PREFIX=" (assoc-ref %outputs "out")))
        #:phases
        (modify-phases %standard-phases
-         (delete 'configure))))
+         (delete 'configure))))         ; no configure script
     (inputs
      `(("cairo" ,cairo)
        ("libx11" ,libx11)
@@ -293,8 +298,7 @@ used to further tweak the behaviour of the different profiles.")
        ("wayland" ,wayland)
        ("wayland-protocols" ,wayland-protocols)))
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("pkg-config" ,pkg-config)))
+     (list doxygen pkg-config))
     (home-page "https://github.com/Cloudef/bemenu")
     (synopsis "Dynamic menu library and client program inspired by dmenu")
     (description
@@ -322,10 +326,7 @@ with X11 or Wayland, or in a text terminal with ncurses.")
    `(#:configure-flags '("-DCMAKE_BUILD_TYPE=Release")
      #:tests? #f)) ; Test suite is a rather manual process.
   (inputs
-   `(("qtbase" ,qtbase-5)
-     ("qtscript" ,qtscript)
-     ("qtsvg" ,qtsvg)
-     ("qtx11extras" ,qtx11extras)))
+   (list qtbase-5 qtscript qtsvg qtx11extras))
   (synopsis "Clipboard manager with advanced features")
   (description "CopyQ is clipboard manager with editing and scripting
 features.  CopyQ monitors system clipboard and saves its content in customized
@@ -349,11 +350,8 @@ application.")
     (arguments
      `(#:tests? #f))                    ;tests need /dev/uinput
     (inputs
-     `(("python-appdirs" ,python-appdirs)
-       ("python-evdev" ,python-evdev)
-       ("python-inotify-simple" ,python-inotify-simple)
-       ("python-xlib" ,python-xlib)
-       ("python-six" ,python-six)))
+     (list python-appdirs python-evdev python-inotify-simple python-xlib
+           python-six))
     (home-page "https://github.com/mooz/xkeysnail")
     (synopsis "Keyboard remapping tool for the X11 environment")
     (description
@@ -380,8 +378,7 @@ layers (evdev and uinput), making remapping work in almost all the places.")
     (arguments
      `(#:tests? #f))                    ;no test target
     (inputs
-     `(("libx11" ,libx11)
-       ("libxkbfile" ,libxkbfile)))
+     (list libx11 libxkbfile))
     (home-page "https://github.com/grwlf/xkb-switch")
     (synopsis "Switch your X keyboard layouts from the command line")
     (description
@@ -407,10 +404,8 @@ state.")
     (arguments
      '(#:tests? #f))                              ;there is no test suite
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
-    (inputs `(("libxmu" ,libxmu)
-              ("libxt" ,libxt)))
+     (list autoconf automake))
+    (inputs (list libxmu libxt))
     (home-page "https://github.com/astrand/xclip")
     (synopsis "Command line interface to X11 clipboard")
     (description "Xclip is a command line interface to the X11 clipboard.  It
@@ -421,26 +416,24 @@ avoiding password prompts when X11 forwarding has already been setup.")
 (define-public libxkbcommon
   (package
     (name "libxkbcommon")
-    (version "1.0.3")
+    (version "1.3.0")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://xkbcommon.org/download/libxkbcommon-"
                                  version ".tar.xz"))
              (sha256
               (base32
-               "0lmwglj16anhpaq0h830xsl1ivknv75i4lir9bk88aq73s2jy852"))))
+               "0ysynzzgzd9jdrh1321r4bgw8wd5zljrlyn5y1a31g39xacf02bv"))))
     (build-system meson-build-system)
     (inputs
-     `(("libx11" ,libx11)
-       ("libxcb" ,libxcb)
-       ("libxml2" ,libxml2)
-       ("wayland" ,wayland)
-       ("wayland-protocols" ,wayland-protocols)
-       ("xkeyboard-config" ,xkeyboard-config)))
+     (list libx11
+           libxcb
+           libxml2
+           wayland
+           wayland-protocols
+           xkeyboard-config))
     (native-inputs
-     `(("bison" ,bison)
-       ("doxygen" ,doxygen)
-       ("pkg-config" ,pkg-config)))
+     (list bison doxygen pkg-config python))
     (arguments
      `(#:configure-flags
        (list (string-append "-Dxkb-config-root="
@@ -484,15 +477,11 @@ X11 (yet).")
            (lambda _
              (invoke "autoreconf" "-vfi"))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-
-       ;; For bootstrapping from git.
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list pkg-config
+           ;; For bootstrapping from git.
+           autoconf automake libtool))
     (inputs
-     `(("libxtst" ,libxtst)
-       ("libx11" ,libx11)))
+     (list libxtst libx11))
     (home-page "https://www.yoctoproject.org/tools-resources/projects/matchbox")
     (synopsis "X virtual keyboard library")
     (description
@@ -525,13 +514,13 @@ X11 (yet).")
                (setenv "LDFLAGS" (string-append "-Wl,-rpath=" out "/lib"))
                (setenv "CC" "gcc")
                #t))))))
-    (native-inputs `(("perl" ,perl))) ; for pod2man
-    (inputs `(("libx11" ,libx11)
-              ("libxext" ,libxext)
-              ("libxi" ,libxi)
-              ("libxinerama" ,libxinerama)
-              ("libxtst" ,libxtst)
-              ("libxkbcommon" ,libxkbcommon)))
+    (native-inputs (list perl)) ; for pod2man
+    (inputs (list libx11
+                  libxext
+                  libxi
+                  libxinerama
+                  libxtst
+                  libxkbcommon))
     (home-page "https://www.semicomplete.com/projects/xdotool/")
     (synopsis "Fake keyboard/mouse input, window management, and more")
     (description "Xdotool lets you simulate keyboard input and mouse activity,
@@ -565,9 +554,7 @@ between desktops, and change the number of desktops.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (inputs
-     `(("libxcb" ,libxcb)
-       ("xcb-util-wm" ,xcb-util-wm)
-       ("xcb-util" ,xcb-util)))
+     (list libxcb xcb-util-wm xcb-util))
     (home-page "https://github.com/baskerville/xdo")
     (synopsis "Small X utility to perform elementary actions on windows")
     (description
@@ -588,12 +575,9 @@ options are given, the action applies to the focused window.")
         (base32 "0lq5j7fryx1wn998jq6h3icz1h6pqrsbs3adskjzjyhn5l6yrg2p"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libxext" ,libxext)
-        ("libxmu" ,libxmu)
-        ("libxrender" ,libxrender)
-        ("libxt" ,libxt)))
+      (list libxext libxmu libxrender libxt))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.x.org/")    ; no dedicated Xeyes page exists
     (synopsis "Follow-the-mouse X demo")
     (description "Xeyes is a demo program for x.org.  It shows eyes
@@ -604,7 +588,7 @@ following the mouse.")
 (define-public pixman
   (package
     (name "pixman")
-    (version "0.38.4")
+    (version "0.40.0")
     (source
      (origin
        (method url-fetch)
@@ -613,29 +597,32 @@ following the mouse.")
          "https://www.cairographics.org/releases/pixman-"
          version ".tar.gz"))
        (sha256
-        (base32 "1ryxzdf048x7wsx4dlvrr1p00gzwfs7lybnhgc7ygbj0dvyxcrns"))
+        (base32 "1z13n96m7x91j25qq9wlkxsbq04wfwjhw66ir17frna06zn0s83d"))
        (patches
         (search-patches
          "pixman-CVE-2016-5296.patch"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:configure-flags '("--disable-static")))
+     `(#:configure-flags
+       (list
+        "--disable-static"
+        "--enable-timers"
+        "--enable-gnuplot")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libpng" ,libpng)
-       ("zlib" ,zlib)))
+     (list libpng zlib))
     (synopsis "Low-level pixel manipulation library")
     (description "Pixman is a low-level software library for pixel
 manipulation, providing features such as image compositing and trapezoid
 rasterisation.")
     (home-page "http://www.pixman.org/")
-    (license license:x11)))
+    (license license:expat)))
 
 (define-public libdrm
   (package
     (name "libdrm")
-    (version "2.4.103")
+    (version "2.4.107")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -643,7 +630,7 @@ rasterisation.")
                     version ".tar.xz"))
               (sha256
                (base32
-                "08h2nnf4w96b4ql7485mvjgbbsb8rwc0qa93fdm1cq34pbyszq1z"))))
+                "127qf1rzhaf13vdd75a58v5q34617hvangjlfnlkcdh37gqcwm65"))))
     (build-system meson-build-system)
     (arguments
      `(#:configure-flags
@@ -658,12 +645,13 @@ rasterisation.")
 
        #:phases (modify-phases %standard-phases
                   (replace 'check
-                    (lambda _
-                      (invoke "meson" "test" "--timeout-multiplier" "5"))))))
-    (inputs
-     `(("libpciaccess" ,libpciaccess)))
+                    (lambda* (#:key tests? #:allow-other-keys)
+                      (when tests?
+                        (invoke "meson" "test" "--timeout-multiplier" "5")))))))
+    (propagated-inputs
+     (list libpciaccess))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://dri.freedesktop.org/wiki/")
     (synopsis "Direct rendering userspace library")
     (description "The Direct Rendering Infrastructure, also known as the DRI,
@@ -715,10 +703,9 @@ tracking.")
         (base32
          "0jmyryrpqb35y9hd5sgxqy2z0r1snw7d3ljw0jak0n0cjdz1yf9w"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (inputs
-     `(("libx11" ,libx11)
-       ("xcb-util" ,xcb-util)))
+     (list libx11 xcb-util))
     (home-page "https://www.freedesktop.org/wiki/Software/startup-notification/")
     (synopsis "Application startup notification and feedback library")
     (description
@@ -748,11 +735,9 @@ System style license, and has no special dependencies.")
                             (assoc-ref %outputs "out")
                             "/share/man"))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libx11" ,libx11)
-       ("libxmu" ,libxmu)
-       ("glib" ,glib)))
+     (list libx11 libxmu glib))
     (home-page "http://tomas.styblo.name/wmctrl/")
     (synopsis "Command-line tool to control X window managers")
     (description
@@ -765,7 +750,7 @@ move windows, switch between desktops, etc.).")
 (define-public scrot
   (package
     (name "scrot")
-    (version "1.6")
+    (version "1.7")
     (source
      (origin
        (method git-fetch)
@@ -775,20 +760,18 @@ move windows, switch between desktops, etc.).")
          (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1qanx2xx9m5l995csqzfcm1ks2nhk90zga1wzbkjjl75ga4iik2h"))))
+        (base32 "0rls08mpalx4xp5ysmg7m5lgx9q8g8m8q40m47f11mqa84z88nd1"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("autoconf-archive" ,autoconf-archive)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf autoconf-archive automake pkg-config))
     (inputs
-     `(("giblib" ,giblib)
-       ("imlib2" ,imlib2)
-       ("libx11" ,libx11)
-       ("libxcomposite" ,libxcomposite)
-       ("libxext" ,libxext)
-       ("libXfixes" ,libxfixes)))
+     (list giblib
+           imlib2
+           libbsd
+           libx11
+           libxcomposite
+           libxext
+           libxfixes))
     (home-page "https://github.com/resurrecting-open-source-projects/scrot")
     (synopsis "Command-line screen capture utility for X Window System")
     (description
@@ -802,7 +785,7 @@ of the screen selected by mouse.")
 (define-public slop
   (package
     (name "slop")
-    (version "7.5")
+    (version "7.6")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -811,17 +794,17 @@ of the screen selected by mouse.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1k8xxb4rj2fylr4vj16yvsf73cyywliz9cy78pl4ibmi03jhg837"))))
+                "1xaka98vka5kh3wmby68ifwi6rp0985dj13fgs96bw8a1z3m1l1d"))))
     (build-system cmake-build-system)
     (arguments
      '(#:tests? #f)) ; no "check" target
     (inputs
-     `(("glew" ,glew)
-       ("glm" ,glm)
-       ("icu4c" ,icu4c)
-       ("libxext" ,libxext)
-       ("libxrender" ,libxrender)
-       ("mesa" ,mesa)))
+     (list glew
+           glm
+           icu4c
+           libxext
+           libxrender
+           mesa))
     (home-page "https://github.com/naelstrof/slop")
     (synopsis "Select a region and print its bounds to stdout")
     (description
@@ -895,7 +878,7 @@ include cursor in the resulting image.")
                (invoke "make" "install" "install.man"
                        (string-append "BINDIR=" bin)
                        (string-append "MANDIR=" man1))))))))
-    (inputs `(("libx11" ,libx11)))
+    (inputs (list libx11))
     (home-page "http://ftp.x.org/contrib/utilities/")
     (synopsis "Hide idle mouse cursor")
     (description
@@ -933,13 +916,9 @@ things less distracting.")
                  (modify-phases %standard-phases
                    (delete 'configure))))
     (inputs
-     `(("libx11" ,libx11)
-       ("libev" ,libev)
-       ("libxfixes" ,libxfixes)
-       ("libxi" ,libxi)))
+     (list libx11 libev libxfixes libxi))
     (native-inputs
-     `(("asciidoc" ,asciidoc)
-       ("pkg-config" ,pkg-config)))
+     (list asciidoc pkg-config))
     (home-page "https://github.com/Airblader/unclutter-xfixes")
     (synopsis "Hide idle mouse cursor")
     (description
@@ -974,12 +953,9 @@ things less distracting.")
          "03azv5wpg65h40ip2kk1kdh58vix4vy1r9bihgsq59jx2rhjr3zf"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libpng" ,libpng)
-       ("libx11" ,libx11)
-       ("libxi" ,libxi)
-       ("libxtst" ,libxtst)))
+     (list libpng libx11 libxi libxtst))
     (native-inputs
-     `(("xorgproto" ,xorgproto)))
+     (list xorgproto))
     (synopsis "Tools to automate tasks in X such as detecting on screen images")
     (description
      "Xautomation can control X from the command line for scripts, and
@@ -1013,10 +989,7 @@ to find buttons, etc, on the screen to click on.")
        #:phases (modify-phases %standard-phases
                   (delete 'configure)))) ; no configure script
     (inputs
-     `(("libx11" ,libx11)
-       ("libxfixes" ,libxfixes)
-       ("libxi" ,libxi)
-       ("libxt" ,libxt)))
+     (list libx11 libxfixes libxi libxt))
     (synopsis "Banish the mouse cursor")
     (description
      "@command{xbanish} hides the mouse cursor when you start typing, and
@@ -1074,10 +1047,7 @@ X Window System.")
      '(#:configure-flags
        (list (string-append "--mandir=" %output "/share/man"))))
     (inputs
-     `(("libx11" ,libx11)
-       ("libxt" ,libxt)
-       ("libxext" ,libxext)
-       ("libxinerama" ,libxinerama)))
+     (list libx11 libxt libxext libxinerama))
     (home-page "https://sourceforge.net/projects/libxosd/")
     (synopsis "X On Screen Display")
     (description
@@ -1098,12 +1068,9 @@ transparent text on your screen.")
         (base32 "080pwz8pvqqq068lavzz48dl350iszpdswjd86bjk6zra5h5d10q"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("scdoc" ,scdoc)))
+     (list pkg-config scdoc))
     (inputs
-     `(("libseccomp" ,libseccomp)
-       ("wayland" ,wayland)
-       ("wayland-protocols" ,wayland-protocols)))
+     (list libseccomp wayland wayland-protocols))
     (home-page "https://github.com/francma/wob")
     (synopsis "Lightweight overlay bar for Wayland")
     (description
@@ -1145,11 +1112,9 @@ backlight, progress, or anything bar for Wayland.")
                   (format #f "\"~a/bin/~a\"" out command)))
                #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("guile" ,guile-2.2)
-       ("libx11" ,libx11)
-       ("tk" ,tk)))
+     (list guile-2.2 libx11 tk))
     (home-page "https://www.nongnu.org/xbindkeys/")
     (synopsis "Associate a combination of keys with a shell command")
     (description
@@ -1178,11 +1143,7 @@ Guile will work for XBindKeys.")
         (base32 "1winwzdy9yxvxnrv8gqpigl9y0c2px27mnms62bdilp4x6llrs9r"))))
     (build-system gnu-build-system)
     (inputs
-     `(("asciidoc" ,asciidoc)
-       ("libxcb" ,libxcb)
-       ("xcb-util" ,xcb-util)
-       ("xcb-util-keysyms" ,xcb-util-keysyms)
-       ("xcb-util-wm" ,xcb-util-wm)))
+     (list asciidoc libxcb xcb-util xcb-util-keysyms xcb-util-wm))
     (arguments
      `(#:phases (modify-phases %standard-phases (delete 'configure))
        #:tests? #f  ; no check target
@@ -1201,14 +1162,14 @@ compact configuration syntax.")
 (define-public rxvt-unicode
   (package
     (name "rxvt-unicode")
-    (version "9.26")
+    (version "9.30")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://dist.schmorp.de/rxvt-unicode/Attic/"
                                   name "-" version ".tar.bz2"))
               (sha256
                (base32
-                "12y9p32q0v7n7rhjla0j2g9d5rj2dmwk20c9yhlssaaxlawiccb4"))))
+                "0badnkjsn3zps24r5iggj8k5v4f00npc77wqg92pcn1q5z8r677y"))))
     (build-system gnu-build-system)
     (arguments
      ;; This sets the destination when installing the necessary terminal
@@ -1236,8 +1197,7 @@ compact configuration syntax.")
                            TryExec=~@*~a/bin/urxvt~@
                            Icon=~@
                            Type=Application~%"
-                           output)))
-               #t)))
+                           output))))))
          (add-after 'install 'install-desktop-urxvtc
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((output (assoc-ref outputs "out"))
@@ -1254,16 +1214,15 @@ compact configuration syntax.")
                            TryExec=~@*~a/bin/urxvtc~@
                            Icon=~@
                            Type=Application~%"
-                           output)))
-               #t))))))
+                           output)))))))))
     (inputs
-     `(("libXft" ,libxft)
+     `(("libptytty" ,libptytty)
+       ("libXft" ,libxft)
        ("libX11" ,libx11)
        ("libXt" ,libxt)))
     (native-inputs
-     `(("ncurses" ,ncurses)         ;trigger the installation of terminfo data
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list ncurses ;trigger the installation of terminfo data
+           perl pkg-config))
     ;; FIXME: This should only be located in 'ncurses'.  Nonetheless it is
     ;; provided for usability reasons.  See <https://bugs.gnu.org/22138>.
     (native-search-paths
@@ -1302,10 +1261,9 @@ within a single process.")
                           "MANDIR=/share/man/man1"
                           ,(string-append "CC=" (cc-for-target)))))
     (inputs
-     `(("libxtst" ,libxtst)
-       ("libx11" ,libx11)))
+     (list libxtst libx11))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/alols/xcape")
     (synopsis "Use a modifier key in X.org as another key")
     (description
@@ -1330,18 +1288,15 @@ Escape key when Left Control is pressed and released on its own.")
     (arguments
      `(#:configure-flags '("--disable-static")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ;; For tests.
-       ("python" ,python)))
+     (list pkg-config
+           ;; For tests.
+           python))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("libgudev" ,libgudev)
-       ("eudev" ,eudev)
-       ("libxml2" ,libxml2)))
+     (list gtk+ libgudev eudev libxml2))
     (propagated-inputs
      ;; libwacom includes header files that include GLib, and libinput uses
      ;; those header files.
-     `(("glib" ,glib)))
+     (list glib))
     (home-page "https://linuxwacom.github.io/")
     (synopsis "Helper library for Wacom tablet settings")
     (description
@@ -1374,13 +1329,9 @@ Wacom tablet applet.")
                             "/share/X11/xorg.conf.d"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("xorg-server" ,xorg-server)
-       ("libxrandr" ,libxrandr)
-       ("libxinerama" ,libxinerama)
-       ("libxi" ,libxi)
-       ("eudev" ,eudev)))
+     (list xorg-server libxrandr libxinerama libxi eudev))
     (home-page "https://linuxwacom.github.io/")
     (synopsis "Wacom input driver for X")
     (description
@@ -1435,33 +1386,28 @@ the X.Org X Server version 1.7 and later (X11R7.5 or later).")
          (add-after 'split-outputs 'wrap
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((gtk (assoc-ref outputs "gtk"))
-                    (python-version
-                     (@ (guix build python-build-system) python-version))
-                    (python (assoc-ref inputs "python"))
-                    (sitedir (string-append gtk "/lib/python"
-                                            (python-version python)
-                                            "/site-packages")))
+                    (site-packages (@ (guix build python-build-system)
+                                      site-packages))
+                    (site (site-packages inputs outputs)))
                (wrap-program (string-append gtk "/bin/redshift-gtk")
-                 `("PYTHONPATH" ":" prefix
-                   (,(string-append sitedir ":" (getenv "PYTHONPATH"))))
+                 `("GUIX_PYTHONPATH" ":" prefix
+                   (,(string-append site ":" (getenv "GUIX_PYTHONPATH"))))
                  `("GI_TYPELIB_PATH" ":" prefix (,(getenv "GI_TYPELIB_PATH"))))
                #t))))))
     (outputs '("out" "gtk"))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (inputs
-     `(("libdrm" ,libdrm)
-       ("libx11" ,libx11)
-       ("libxcb" ,libxcb)
-       ("libxxf86vm" ,libxxf86vm)
-       ("glib" ,glib)                   ;for Geoclue2 support
-
-       ;; To build the GTK3 GUI, we need these.
-       ("gtk+" ,gtk+)
-       ("python" ,python)
-       ("python-pygobject" ,python-pygobject)
-       ("python-pyxdg" ,python-pyxdg)))
+     (list libdrm
+           libx11
+           libxcb
+           libxxf86vm
+           glib ;for Geoclue2 support
+           ;; To build the GTK3 GUI, we need these.
+           gtk+
+           python
+           python-pygobject
+           python-pyxdg))
     (home-page "https://github.com/jonls/redshift")
     (synopsis "Adjust the color temperature of your screen")
     (description
@@ -1508,18 +1454,14 @@ color temperature should be set to match the lamps in your room.")
                             (("^_") ""))
                           #t))))))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("libtool" ,libtool)
-         ("pkg-config" ,pkg-config)
-         ("intltool" ,intltool)))
+       (list autoconf automake libtool pkg-config intltool))
       (inputs
-       `(("libdrm" ,libdrm)
-         ("libx11" ,libx11)
-         ("libxcb" ,libxcb)
-         ("libxxf86vm" ,libxxf86vm)
-         ("glib" ,glib)                 ; for Geoclue2 support
-         ("wayland" ,wayland)))
+       (list libdrm
+             libx11
+             libxcb
+             libxxf86vm
+             glib ; for Geoclue2 support
+             wayland))
       (home-page "https://github.com/minus7/redshift")
       (synopsis "Adjust the color temperature of your screen (with Wayland support)")
       (description
@@ -1536,7 +1478,7 @@ protocol.")
 (define-public gammastep
   (package
     (name "gammastep")
-    (version "2.0.7")
+    (version "2.0.8")
     (source
      (origin
        (method git-fetch)
@@ -1545,7 +1487,7 @@ protocol.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "11j54rdd3cgngdhjwyapwjbrdm8cii4i7g4zdvfykvmb1w4zdk7g"))))
+        (base32 "071f3iqdbblb3awnx48j19kspk6l2g3658za80i2mf4gacgq9fm1"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -1556,28 +1498,28 @@ protocol.")
              ;; to Python libraries.
              (wrap-program (string-append (assoc-ref outputs "out")
                                           "/bin/gammastep-indicator")
-               `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH")))
+               `("PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH")))
                `("GI_TYPELIB_PATH" ":" prefix
                  (,(getenv "GI_TYPELIB_PATH")))))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("gettext" ,gettext-minimal)
-       ("intltool" ,intltool)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf
+           automake
+           gettext-minimal
+           intltool
+           libtool
+           pkg-config))
     (inputs
-     `(("glib" ,glib)
-       ("gtk" ,gtk+)
-       ("libappindicator" ,libappindicator)
-       ("libdrm" ,libdrm)
-       ("libX11" ,libx11)
-       ("libxxf86vm" ,libxxf86vm)
-       ("libxcb" ,libxcb)
-       ("python" ,python)
-       ("python-pygobject" ,python-pygobject)
-       ("python-pyxdg" ,python-pyxdg)
-       ("wayland" ,wayland)))
+     (list glib
+           gtk+
+           libappindicator
+           libdrm
+           libx11
+           libxxf86vm
+           libxcb
+           python
+           python-pygobject
+           python-pyxdg
+           wayland))
     (home-page "https://gitlab.com/chinstrap/gammastep")
     (synopsis "Adjust the color temperature of your screen")
     (description
@@ -1615,8 +1557,7 @@ less if you are working in front of the screen at night.")
                                          (assoc-ref %outputs "out")
                                          "/lib/X11/app-defaults"))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (inputs
      `(("libx11" ,libx11)
        ("libxext" ,libxext)
@@ -1674,13 +1615,9 @@ demos.  It also acts as a nice screen locker.")
                             (delete 'configure)
                             (delete 'check))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("glib" ,glib)
-       ("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxscrnsaver" ,libxscrnsaver)
-       ("dbus" ,dbus)))
+     (list glib libx11 libxext libxscrnsaver dbus))
     (synopsis "Forward freedesktop.org Idle Inhibition Service calls to Xss")
     (description "xssproxy implements the @code{org.freedesktop.ScreenSaver}
 D-Bus interface described in the Idle Inhibition Service Draft by the
@@ -1691,30 +1628,43 @@ Saver extension) library.")
     (license license:gpl3+)))
 
 (define-public xsel
-  (package
-    (name "xsel")
-    (version "1.2.0")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "http://www.vergenet.net/~conrad/software"
-                                  "/xsel/download/xsel-" version ".tar.gz"))
-              (sha256
-               (base32
-                "070lbcpw77j143jrbkh0y1v10ppn1jwmjf92800w7x42vh4cw9xr"))))
-    (build-system gnu-build-system)
-    (inputs
-     `(("libxt" ,libxt)))
-    (home-page "http://www.vergenet.net/~conrad/software/xsel/")
-    (synopsis "Manipulate X selection")
-    (description
-     "XSel is a command-line program for getting and setting the contents of
+  ;; The 1.2.0 release no longer compiles with GCC 8 and upper, see:
+  ;; https://github.com/kfish/xsel/commit/d88aa9a8dba9228e6780d6bb5a5720a36f854918.
+  (let ((commit "062e6d373537c60829fa9b5dcddbcd942986b3c3")
+        (revision "1"))
+    (package
+      (name "xsel")
+      (version (git-version "1.2.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/kfish/xsel")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0fbf80zsc22vcqp59r9fdx4icxhrkv7l3lphw83326jrmkzy6kri"))))
+      (build-system gnu-build-system)
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (replace 'bootstrap
+             (lambda _
+               (invoke "autoreconf" "-vfi"))))))
+      (native-inputs (list autoconf automake libtool))
+      (inputs
+       (list libxt))
+      (home-page "http://www.vergenet.net/~conrad/software/xsel/")
+      (synopsis "Manipulate X selection")
+      (description
+       "XSel is a command-line program for getting and setting the contents of
 the X selection.  Normally this is only accessible by manually highlighting
 information and pasting it with the middle mouse button.
 
 XSel reads from standard input and writes to standard output by default,
 but can also follow a growing file, display contents, delete entries and more.")
-    (license (license:x11-style "file://COPYING"
-                                "See COPYING in the distribution."))))
+      (license (license:x11-style "file://COPYING"
+                                  "See COPYING in the distribution.")))))
 
 (define-public xdpyprobe
   (package
@@ -1730,7 +1680,7 @@ but can also follow a growing file, display contents, delete entries and more.")
                 "1h09wd2qcg08rj5hcakvdh9q01hkrj8vxly94ax3ch2x06lm0zq8"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libx11" ,libx11)))
+     (list libx11))
     (home-page "https://github.com/alezost/xdpyprobe")
     (synopsis "Probe X server for connectivity")
     (description
@@ -1741,7 +1691,7 @@ connectivity of the X server running on a particular @code{DISPLAY}.")
 (define-public rofi
   (package
     (name "rofi")
-    (version "1.7.0")
+    (version "1.7.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/davatorium/rofi/"
@@ -1749,27 +1699,32 @@ connectivity of the X server running on a particular @code{DISPLAY}.")
                                   version "/rofi-" version ".tar.xz"))
               (sha256
                (base32
-                "1929q3dks8fqd3pfkzs0ba06gwzhlgcrfar9fpga43f3byrrbfxa"))))
+                "1kfp9ylynz8xgw11aa5k7b4iyq9z8zkqas1mpvs8wpzvnfr09ymd"))))
     (build-system gnu-build-system)
-    (inputs
-     `(("pango" ,pango)
-       ("cairo" ,cairo)
-       ("glib" ,glib)
-       ("startup-notification" ,startup-notification)
-       ("libjpeg" ,libjpeg-turbo)
-       ("librsvg" ,librsvg)
-       ("libxkbcommon" ,libxkbcommon)
-       ("libxcb" ,libxcb)
-       ("xcb-util" ,xcb-util)
-       ("xcb-util-cursor" ,xcb-util-cursor)
-       ("xcb-util-xrm" ,xcb-util-xrm)
-       ("xcb-util-wm" ,xcb-util-wm)))
     (native-inputs
-     `(("bison" ,bison)
-       ("check" ,check)
-       ("flex" ,flex)
-       ("glib:bin" ,glib "bin")
-       ("pkg-config" ,pkg-config)))
+     (list bison
+           check
+           flex
+           `(,glib "bin")
+           pkg-config))
+    (inputs
+     (list cairo
+           glib
+           libjpeg-turbo
+           librsvg
+           libxcb
+           libxkbcommon
+           pango
+           startup-notification
+           xcb-util
+           xcb-util-cursor
+           xcb-util-wm
+           xcb-util-xrm))
+    (native-search-paths
+     ;; This is where rofi will search for plugins by default.
+     (list (search-path-specification
+            (variable "ROFI_PLUGIN_PATH")
+            (files '("lib/rofi")))))
     (arguments
      `(#:parallel-tests? #f             ; fails in some circumstances
        #:phases
@@ -1779,8 +1734,7 @@ connectivity of the X server running on a particular @code{DISPLAY}.")
              (substitute* '("test/helper-expand.c")
                (("~root") "/root")
                (("~") "")
-               (("g_get_home_dir \\(\\)") "\"/\""))
-             #t)))))
+               (("g_get_home_dir \\(\\)") "\"/\"")))))))
     (home-page "https://github.com/davatorium/rofi")
     (synopsis "Application launcher")
     (description "Rofi is a minimalist application launcher.  It memorizes which
@@ -1788,6 +1742,51 @@ applications you regularly use and also allows you to search for an application
 by name.")
     (license license:expat)))
 
+(define-public rofi-calc
+  (package
+    (name "rofi-calc")
+    (version "2.0.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/svenstaro/rofi-calc")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1j23xwa6s27wyx6r0yb85cby6dggrcb103nqcfxr5li1mcqrgd9m"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          ;; Don't try to install directly to rofi, instead install
+          ;; to lib/rofi to match rofi's search-path ROFI_PLUGIN_PATH.
+          (add-after 'unpack 'patch-plugindir
+            (lambda _
+              (substitute* "Makefile.am"
+                (("plugindir=\\$\\{rofi_PLUGIN_INSTALL_DIR\\}\\/")
+                 "plugindir=${libdir}/rofi/"))))
+          (add-after 'unpack 'patch-qalc-path
+            (lambda* (#:key inputs #:allow-other-keys)
+              (substitute* "src/calc.c"
+                (("\"qalc\"")
+                 (string-append "\""
+                                (search-input-file inputs "bin/qalc")
+                                "\""))))))))
+    (inputs
+     (list cairo libqalculate rofi))
+    (native-inputs
+     (list autoconf automake libtool pkg-config))
+    (home-page
+     "https://github.com/svenstaro/rofi-calc")
+    (synopsis "Do live calculations in rofi with qalc")
+    (description
+     "@code{rofi-calc} is a rofi plugin that uses qalculate's @code{qalc} to parse
+natural language input and provide results.")
+    (license license:expat)))
+
 (define-public tint2
   (package
     (name "tint2")
@@ -1811,15 +1810,15 @@ by name.")
                (("/etc") "${CMAKE_INSTALL_PREFIX}/etc"))
              #t)))))
     (inputs
-     `(("gtk+" ,gtk+-2)
-       ("imlib2" ,imlib2)
-       ("librsvg" ,librsvg)
-       ("libxcomposite" ,libxcomposite)
-       ("libxdamage" ,libxdamage)
-       ("libxft" ,libxft)
-       ("libxinerama" ,libxinerama)
-       ("libxrandr" ,libxrandr)
-       ("startup-notification" ,startup-notification)))
+     (list gtk+-2
+           imlib2
+           librsvg
+           libxcomposite
+           libxdamage
+           libxft
+           libxinerama
+           libxrandr
+           startup-notification))
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("pkg-config" ,pkg-config)))
@@ -1875,11 +1874,8 @@ actions, a built-in clock, a battery monitor and a system tray.")
               (substitute* "Makefile" (("include config.mk") ""))
               #t)))))
      (inputs
-      `(("libx11"      ,libx11)
-        ("libxft"      ,libxft)
-        ("libxpm"      ,libxpm)
-        ("libxinerama" ,libxinerama)))
-     (native-inputs `(("pkg-config" ,pkg-config)))
+      (list libx11 libxft libxpm libxinerama))
+     (native-inputs (list pkg-config))
      (synopsis "General purpose messaging, notification and menuing program for X11")
      (description "Dzen is a general purpose messaging, notification and menuing
 program for X11.  It was designed to be fast, tiny and scriptable in any language.")
@@ -1906,7 +1902,7 @@ program for X11.  It was designed to be fast, tiny and scriptable in any languag
               ("fontconfig" ,fontconfig)
               ("libxft" ,libxft)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -1946,12 +1942,9 @@ minimalistic tiling window managers such as herbstluftwm and bspwm.")
                   #t))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("m4" ,m4)
-       ("libx11" ,libx11))) ; for tests
+     (list pkg-config m4 libx11)) ; for tests
     (inputs
-     `(("libxcb" ,libxcb)
-       ("xcb-util" ,xcb-util)))
+     (list libxcb xcb-util))
     (home-page "https://github.com/Airblader/xcb-util-xrm")
     (synopsis "XCB utility functions for the X resource manager")
     (description
@@ -1997,10 +1990,7 @@ XCB util-xrm module provides the following libraries:
     (build-system cmake-build-system)
     (arguments
      '(#:tests? #f))                    ; no test suite
-    (inputs `(("libx11" ,libx11)
-              ("libxext" ,libxext)
-              ("libxrandr" ,libxrandr)
-              ("libxxf86vm" ,libxxf86vm)))
+    (inputs (list libx11 libxext libxrandr libxxf86vm))
     (synopsis "Tiny monitor calibration loader for XFree86 (or X.org)")
     (description "xcalib is a tiny tool to load the content of vcgt-Tags in ICC
 profiles to the video card's gamma ramp.  It does work with most video card
@@ -2025,12 +2015,8 @@ invert colors on a specific display/screen.")
     (arguments '(#:configure-flags `("--enable-sound"
                                      "--enable-wave"
                                      "--enable-alsa")))
-    (native-inputs `(("autoconf" ,autoconf)
-                     ("automake" ,automake)
-                     ("pkg-config" ,pkg-config)
-                     ("perl" ,perl)))
-    (inputs `(("libx11" ,libx11)
-              ("alsa-lib" ,alsa-lib)))
+    (native-inputs (list autoconf automake pkg-config perl))
+    (inputs (list libx11 alsa-lib))
     (synopsis "Daemon that performs an action every time the X11 bell is rung")
     (description "nxbelld is a tiny utility to aid people who either don't
 like the default PC speaker beep, or use a sound driver that doesn't have
@@ -2054,11 +2040,9 @@ or playing a PCM encoded WAVE file.")
                 "18jd3k3pvlm5x1adyqw63z2b3f4ixh9mfvz9asvnskk3fm8jgw0i"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("imake" ,imake)))
+     (list imake))
     (inputs
-     `(("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxscrnsaver" ,libxscrnsaver)))
+     (list libx11 libxext libxscrnsaver))
     (arguments
      `(#:tests? #f
        #:phases
@@ -2107,7 +2091,7 @@ a user-configurable period of time.")
     (inputs `(("gtk3" ,gtk+)
               ("gdk" ,gdk-pixbuf)
               ("pango" ,pango)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (arguments
      ;; The default configure puts the 'sm' binary in games/ instead of bin/ -
      ;; this fixes it:
@@ -2139,11 +2123,9 @@ commandline).")
                  (base32
                   "10hx7k7ga8g08akwz8qrsvj8iqr5nd4siiva6sjx789jvf0sak7r"))))
       (build-system cmake-build-system)
-      (inputs `(("glib" ,glib)
-                ("xcb-util" ,xcb-util)))
+      (inputs (list glib xcb-util))
       (native-inputs
-       `(("python-docutils" ,python-docutils)
-         ("pkg-config" ,pkg-config)))
+       (list python-docutils pkg-config))
       (arguments
        `(#:tests? #f))
       (synopsis "Use external screen locker on events")
@@ -2159,20 +2141,19 @@ before the system goes to sleep.")
 (define-public python-pyperclip
   (package
     (name "python-pyperclip")
-    (version "1.6.4")
+    (version "1.8.2")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "pyperclip" version))
         (sha256
          (base32
-          "1p505c23ji06r28k1y67siihsbdzdf1brhlqpyv9ams4gk9863pp"))))
+          "0mxzm43z2anr55gyz7awagvam4d5c2rlxhp9hjyg0d29n2l58lhh"))))
     (build-system python-build-system)
     (arguments
      '(#:tests? #f)) ; Not clear how to make tests pass.
     (inputs
-     `(("xclip" ,xclip)
-       ("xsel" ,xsel)))
+     (list xclip xsel))
     (home-page "https://github.com/asweigart/pyperclip")
     (synopsis "Python clipboard module")
     (description
@@ -2196,7 +2177,7 @@ the X11 clipboard")
                 "1w49fayhwzn5rx0z1q2lrvm7z8jrd34lgb89p853a024bixc3cf2"))))
     (build-system gnu-build-system)
     (inputs
-     `(("xorg-server" ,xorg-server)))
+     (list xorg-server))
     (home-page "https://github.com/rg3/numlockx")
     (synopsis "Turns on the numlock key in X11")
     (description "@command{numlockx} is a tiny program that lets you turn on
@@ -2234,7 +2215,7 @@ to automatically turn it on on login.")
                (copy-file "xrandr-invert-colors.bin"
                           (string-append bin "/xrandr-invert-colors"))))))))
     (inputs
-     `(("libxrandr" ,libxrandr)))
+     (list libxrandr))
     (home-page "https://github.com/zoltanp/xrandr-invert-colors")
     (synopsis "Invert display colors")
     (description "This package provides a small utility for inverting the
@@ -2285,10 +2266,10 @@ colors on all monitors attached to an XRandR-capable X11 display server.")
                             (string-append out "/bin/sctd"))
                #t))))))
     (inputs
-     `(("coreutils" ,coreutils) ; sctd uses "date", "printf" and "sleep"
-       ("inetutils" ,inetutils) ; sctd uses "logger"
-       ("libxrandr" ,libxrandr)
-       ("sed" ,sed))) ; sctd uses "sed"
+     (list coreutils ; sctd uses "date", "printf" and "sleep"
+           inetutils ; sctd uses "logger"
+           libxrandr
+           sed)) ; sctd uses "sed"
     (home-page "https://www.umaxx.net")
     (synopsis "Set the color temperature of the screen")
     (description "@code{sct} is a lightweight utility to set the color
@@ -2298,14 +2279,14 @@ temperature of the screen.")
 (define-public xsecurelock
   (package
     (name "xsecurelock")
-    (version "1.6.0")
+    (version "1.7.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
                     "https://github.com/google/xsecurelock/releases"
                     "/download/v" version "/xsecurelock-" version ".tar.gz"))
               (sha256
-               (base32 "070gknyv0s5hz9hkc6v73m2v7ssyjwgl93b5hd4glayfqxqjbmdp"))))
+               (base32 "0s2q69g1xhvs18q2jhcval5vpa9j0kkrdv02r176vvxvdms7hhc7"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags
@@ -2313,8 +2294,7 @@ temperature of the screen.")
          "--with-xkb"
          "--with-default-authproto-module=/run/setuid-programs/authproto_pam")))
     (native-inputs
-     `(("pandoc" ,pandoc)
-       ("pkg-config" ,pkg-config)))
+     (list pandoc pkg-config))
     (inputs
      `(("fontconfig" ,fontconfig)
        ("libX11" ,libx11)
@@ -2368,18 +2348,58 @@ binary to setuid-binaries:
                 (string-append "\"" (assoc-ref inputs "xdg-utils")
                                "/bin/xdg-mime\""))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("coreutils" ,coreutils)
-       ("wayland" ,wayland)
-       ("wayland-protocols" ,wayland-protocols)
-       ("xdg-utils" ,xdg-utils)))
+     (list coreutils wayland wayland-protocols xdg-utils))
     (home-page "https://github.com/bugaevc/wl-clipboard")
     (synopsis "Command-line copy/paste utilities for Wayland")
     (description "Wl-clipboard is a set of command-line copy/paste utilities for
 Wayland.")
     (license license:gpl3+)))
 
+(define-public wl-clipboard-x11
+  (package
+    (name "wl-clipboard-x11")
+    (version "5")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/brunelli/wl-clipboard-x11")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1y7jv7rps0sdzmm859wn2l8q4pg2x35smcrm7mbfxn5vrga0bslb"))))
+    (build-system copy-build-system)
+    (arguments
+     `(#:install-plan
+       '(("src/" "bin/")
+         ("man/" "man/man1"))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'wrap-binary
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((out          (assoc-ref outputs "out"))
+                   (wl-clipboard (assoc-ref inputs "wl-clipboard")))
+               (wrap-program (string-append out "/bin/wl-clipboard-x11")
+                `("PATH" prefix (,(string-append wl-clipboard "/bin")))))
+             #t))
+         (add-after 'wrap-binary 'symlink-utilities
+           ;; As seen in the Makefile.
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((bin (string-append (assoc-ref outputs "out") "/bin/")))
+               (symlink "wl-clipboard-x11" (string-append bin "xclip"))
+               (symlink "wl-clipboard-x11" (string-append bin "xsel")))
+             #t)))))
+    (inputs
+     (list bash-minimal wl-clipboard))
+    (home-page "https://github.com/brunelli/wl-clipboard-x11")
+    (synopsis "Use wl-clipboard as a drop-in replacement to X11 clipboard tools")
+    (description "This package provides a wrapper script around
+@code{x11-clipboard} to use it as a clipboard on X11 also.  It also contains
+helper scripts for @code{xclip} and @code{xsel} to assist with the transition.")
+    (license license:gpl3+)))
+
 (define-public autocutsel
   (package
     (name "autocutsel")
@@ -2395,8 +2415,7 @@ Wayland.")
     (build-system gnu-build-system)
     (arguments
      '(#:tests? #f)) ; no "check" target
-    (native-inputs `(("libx11" ,libx11)
-                     ("libxaw" ,libxaw)))
+    (native-inputs (list libx11 libxaw))
     (home-page "https://www.nongnu.org/autocutsel/")
     (synopsis "Automated X11 clipboard and cutbuffer synchronization")
     (description "@code{autocutsel} tracks changes in the server's cutbuffer
@@ -2408,7 +2427,7 @@ The cutbuffer and clipboard selection are always synchronized.")
 (define-public jgmenu
   (package
     (name "jgmenu")
-    (version "4.3.0")
+    (version "4.4.0")
     (source
      (origin
        (method git-fetch)
@@ -2417,20 +2436,18 @@ The cutbuffer and clipboard selection are always synchronized.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "13y4ra2hjfqbn2vxyyn4ar5iqklbabyfwksbryc2gzxspw1vz4zq"))))
+        (base32 "08dyygclayyipa0p2qsxqa3fsfyflkrkhpi25dkc3ybkicvynk24"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("cppcheck" ,cppcheck)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list cppcheck perl pkg-config))
     (inputs
-     `(("cairo" ,cairo)
-       ("glib" ,glib)
-       ("librsvg" ,librsvg)
-       ("libx11" ,libx11)
-       ("libxml2" ,libxml2)
-       ("libxrandr" ,libxrandr)
-       ("pango" ,pango)))
+     (list cairo
+           glib
+           librsvg
+           libx11
+           libxml2
+           libxrandr
+           pango))
     (arguments
      `(#:test-target "test"
        #:phases
@@ -2463,16 +2480,14 @@ can optionally use some appearance settings from XSettings, tint2 and GTK.")
         (base32 "1rsv42cl0s149sbpdxz9yqqjip3si95jv3dglwzrcm7pjfg7519v"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config))
     (inputs
-     `(("libjpeg-turbo" ,libjpeg-turbo)
-       ("libpng" ,libpng)
-       ("libxpm" ,libxpm)
-       ("pixman" ,pixman)
-       ("xcb-util" ,xcb-util)
-       ("xcb-util-image" ,xcb-util-image)))
+     (list libjpeg-turbo
+           libpng
+           libxpm
+           pixman
+           xcb-util
+           xcb-util-image))
     (home-page "https://github.com/stoeckmann/xwallpaper")
     (synopsis "Wallpaper setting utility for X")
     (description
@@ -2506,8 +2521,7 @@ backgrounds.")
                (install-file "README" doc)
                #t))))))
     (inputs
-     `(("libx11" ,libx11)
-       ("libxinerama" ,libxinerama)))
+     (list libx11 libxinerama))
     (home-page "https://www.lcdf.org/~eddietwo/xwrits/")
     (synopsis "Reminds you to take wrist breaks")
     (description "Xwrits reminds you to take wrist breaks for prevention or
@@ -2533,7 +2547,7 @@ Xwrits hides itself until you should take another break.")
         (base32 "14gnkz18dipsa2v24f4nm9syxaa7g21iqjm7y65jn849ka2jr1h8"))))
     (build-system scons-build-system)
     (inputs
-     `(("libx11" ,libx11)))
+     (list libx11))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("googletest" ,googletest)
@@ -2676,10 +2690,12 @@ tools to complement clipnotify.")
                       (gawk              (assoc-ref inputs "gawk"))
                       (util-linux        (assoc-ref inputs "util-linux"))
                       (xdotool           (assoc-ref inputs "xdotool"))
-                      (xsel              (assoc-ref inputs "xsel")))
+                      (xsel              (assoc-ref inputs "xsel"))
+                      (guile             (search-input-file inputs "bin/guile")))
                  (for-each
                   (lambda (prog)
                     (wrap-script (string-append out "/bin/" prog)
+                      #:guile guile
                       `("PATH" ":" prefix
                         ,(map (lambda (dir)
                                 (string-append dir "/bin"))
@@ -2697,13 +2713,13 @@ tools to complement clipnotify.")
                (invoke "tests/test-clipmenu")
                #t)))))
       (inputs
-       `(("clipnotify" ,clipnotify)
-         ("coreutils-minimal" ,coreutils-minimal)
-         ("gawk" ,gawk)
-         ("guile" ,guile-3.0) ; for wrap-script
-         ("util-linux" ,util-linux)
-         ("xdotool" ,xdotool)
-         ("xsel" ,xsel)))
+       (list clipnotify
+             coreutils-minimal
+             gawk
+             guile-3.0 ; for wrap-script
+             util-linux
+             xdotool
+             xsel))
       (home-page "https://github.com/cdown/clipmenu")
       (synopsis "Simple clipboard manager using dmenu or rofi and xsel")
       (description "Start @command{clipmenud}, then run @command{clipmenu} to
@@ -2732,14 +2748,10 @@ After selection, the clip is put onto the PRIMARY and CLIPBOARD X selections.")
          "0qkq75grbd4wkx4nlvswgavpijk9ad0pzqyj89a0ayjsbsn36pqy"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("glib" ,glib "bin")
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake
+           `(,glib "bin") pkg-config))
     (inputs
-     `(("dbus-glib" ,dbus-glib)
-       ("glib" ,glib)
-       ("libx11" ,libx11)))
+     (list dbus-glib glib libx11))
     (home-page "https://github.com/qnikst/kbdd")
     (synopsis "Per-window keyboard layout switching daemon for X")
     (description "@command{kbdd} is a simple keyboard layout switching
@@ -2768,7 +2780,7 @@ create layout indicator widgets.")
                 "1gxpgifzy0hnpd0ymw3r32amzr32z3bgb90ldjzl438p6h1q0i26"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("catch2" ,catch-framework2)))
+     (list catch-framework2))
     (arguments
      `(#:configure-flags '("-DWITH_GIT_CATCH=off")
        #:phases
@@ -2806,7 +2818,7 @@ using @command{dmenu}.")
     (arguments
      `(#:glib-or-gtk? #t))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("gtk3" ,gtk+)
        ("wayland" ,wayland)))
@@ -2838,9 +2850,9 @@ such as sway, similar to @command{rofi}.")
          (delete 'configure))
        #:tests? #f))
     (inputs
-     `(("python" ,python)))
+     (list python))
     (native-inputs
-     `(("python-sphinx" ,python-sphinx)))
+     (list python-sphinx))
     (home-page "https://github.com/jceb/dex")
     (synopsis "Execute DesktopEntry files")
     (description
@@ -2851,7 +2863,7 @@ and execute @file{.desktop} files of the Application type.")
 (define-public sx
   (package
     (name "sx")
-    (version "2.1.6")
+    (version "2.1.7")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -2860,7 +2872,7 @@ and execute @file{.desktop} files of the Application type.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0p24ghp1ygvyc2hv81byhxax7491yhcc5priq5ldv07nzl7akagc"))))
+                "0xv15m30nhcknasqiybj5wwf7l91q4a4jf6xind8x5x00c6br6nl"))))
     (build-system gnu-build-system)
     (arguments
      '(#:tests? #f                      ; no tests
@@ -2869,10 +2881,14 @@ and execute @file{.desktop} files of the Application type.")
          (list (string-append "PREFIX=" out)))
        #:phases
        (modify-phases %standard-phases
-         ;; no configure script
-         (delete 'configure))))
-    (propagated-inputs
-     `(("xauth" ,xauth)))
+         (add-after 'unpack 'refer-to-xauth
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "sx"
+               (("\\bxauth\\b" command)
+                (string-append (assoc-ref inputs "xauth") "/bin/" command)))))
+         (delete 'configure))))         ; no configure script
+    (inputs
+     (list xauth))
     (home-page "https://github.com/Earnestly/sx")
     (synopsis "Start an xorg server")
     (description
@@ -2909,11 +2925,9 @@ and execute @file{.desktop} files of the Application type.")
              (let ((out (assoc-ref outputs "out")))
                (mkdir-p (string-append out "/bin"))))))))
     (inputs
-     `(("libx11" ,libx11)
-       ("imlib2" ,imlib2)
-       ("libxinerama" ,libxinerama)))
+     (list libx11 imlib2 libxinerama))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "Imlib2-based wallpaper changer")
     (description
      "The @command{hsetroot} command composes wallpapers for X.
@@ -2946,12 +2960,9 @@ This package is the fork of hsetroot by Hyriand.")
                             (string-append "PREFIX = " out "\n")))
                          #true))))))
     (propagated-inputs
-     `(("wmctrl" ,wmctrl)
-       ("xdotool" ,xdotool)
-       ("xprop" ,xprop)))
+     (list wmctrl xdotool xprop))
     (native-inputs
-     `(("pandoc" ,pandoc)
-       ("perl" ,perl)))
+     (list pandoc perl))
     (synopsis "Run-or-raise application switcher for any X11 desktop")
     (description
      "Bind a key for any given application that will launch the application,
@@ -2974,9 +2985,7 @@ if there's more than one.")
         (base32 "199mlm127zk1lr8nrq22n68l2l8cjwc4cgwd67rg1i6497n2y0xc"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libx11" ,libx11)
-       ("perl" ,perl)
-       ("perl-tk" ,perl-tk)))
+     (list libx11 perl perl-tk))
     (arguments
      `(#:tests? #f                      ; There are none.
        #:make-flags
@@ -3031,10 +3040,9 @@ MouseKeys-acceleration management.")
          "0hhsddh3rs066rbsjksr8kcwg8lvglbvs67dq0r5wx5c1xcwb51w"))))
     (build-system meson-build-system)
     (inputs
-     `(("wayland" ,wayland)
-       ("wayland-protocols" ,wayland-protocols)))
+     (list wayland wayland-protocols))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "Day/night gamma adjustments for Wayland compositors")
     (home-page "https://sr.ht/~kennylevinsen/wlsunset/")
     (description
diff --git a/gnu/packages/xfce.scm b/gnu/packages/xfce.scm
index a33c1998c3..38a0a25524 100644
--- a/gnu/packages/xfce.scm
+++ b/gnu/packages/xfce.scm
@@ -13,7 +13,7 @@
 ;;; Copyright © 2019 Ingo Ruhnke <grumbel@gmail.com>
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
 ;;; Copyright © 2020 Jonathan Brielmaier <jonathan.brielmaier@web.de>
-;;; Copyright © 2020, 2021 Michael Rohleder <mike@rohleder.de>
+;;; Copyright © 2020, 2021, 2022 Michael Rohleder <mike@rohleder.de>
 ;;; Copyright © 2021 Brendan Tildesley <mail@brendan.scot>
 ;;; Copyright © 2021 André A. Gomes <andremegafone@gmail.com>
 ;;;
@@ -93,9 +93,8 @@
                 "0g86ywkx0ghzhhn96k88p67bbzlm1aqckly85izp07w80l1934ja"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
-    (inputs `(("gtk+" ,gtk+-2)))
+     (list pkg-config intltool))
+    (inputs (list gtk+-2))
     (home-page "https://www.xfce.org/")
     (synopsis "GTK+ theme engine for Xfce")
     (description
@@ -116,11 +115,8 @@
                 "10svnpc8ggasym1pfgh24bfr0ndqs6lc7v1wmpsizj0zbms8snb0"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("gobject-introspection" ,gobject-introspection)
-       ("intltool" ,intltool)
-       ("vala" ,vala)))
-    (propagated-inputs `(("glib" ,glib))) ; required by libxfce4util-1.0.pc
+     (list pkg-config gobject-introspection intltool vala))
+    (propagated-inputs (list glib)) ; required by libxfce4util-1.0.pc
     (home-page "https://www.xfce.org/")
     (synopsis "Basic utility library for Xfce")
     (description
@@ -176,9 +172,9 @@ Xfce Desktop Environment.")
        ("dbus" ,dbus)))
     (propagated-inputs
      ;; libxfconf-0.pc refers to all these.
-     `(("glib" ,glib)))
+     (list glib))
     (inputs
-     `(("libxfce4util" ,libxfce4util)))
+     (list libxfce4util))
     (home-page "https://www.xfce.org/")
     (synopsis "Configuration storage and query system for Xfce")
     (description
@@ -203,17 +199,13 @@ storage system.")
      `(#:configure-flags
        (list "--with-vendor-info=GNU Guix")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-       ("gobject-introspection" ,gobject-introspection)))
+     (list pkg-config intltool gobject-introspection))
     (propagated-inputs
      `(("gtk+-3" ,gtk+)    ; required by libxfce4ui-2.pc
        ;; libxfce4kbd-private-3.pc refers to all these.
        ("libxfce4util" ,libxfce4util)
        ("xfconf" ,xfconf)))
-    (inputs `(("libsm" ,libsm)
-              ("libice" ,libice)
-              ("startup-notification" ,startup-notification)))
+    (inputs (list libsm libice startup-notification))
     (home-page "https://www.xfce.org/")
     (synopsis "Widgets library for Xfce")
     (description
@@ -224,7 +216,7 @@ to share commonly used Xfce widgets among the Xfce applications.")
 (define-public catfish
   (package
     (name "catfish")
-    (version "4.16.1")
+    (version "4.16.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://archive.xfce.org/src/apps/"
@@ -232,7 +224,7 @@ to share commonly used Xfce widgets among the Xfce applications.")
                                   "/catfish-" version ".tar.bz2"))
               (sha256
                (base32
-                "0md6ypirr97ch7x8qliwzixzwj6zzd68ivb2dzj90hm2lcn7wc8h"))))
+                "1nng7mklrfihgppyxldpssdscl1dzb5z6hyx10akk089s5i9mag9"))))
     (build-system python-build-system)
     (arguments
      '(#:phases
@@ -255,23 +247,16 @@ to share commonly used Xfce widgets among the Xfce applications.")
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
                (wrap-program (string-append out "/bin/catfish")
-                 `("PYTHONPATH" = (,(getenv "PYTHONPATH")))
+                 `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH")))
                  `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH"))))))))
        #:tests? #f))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python-distutils-extra" ,python-distutils-extra)
-       ("intltool" ,intltool)))
+     (list pkg-config python-distutils-extra intltool))
     (inputs
-     `(("which" ,which)
-       ("xfconf" ,xfconf)
-       ("xdg-utils" ,xdg-utils)))
+     (list which xfconf xdg-utils))
     (propagated-inputs
-     `(("gtk+" ,gtk+)
-       ("python-dbus" ,python-dbus)
-       ("python-pexpect" ,python-pexpect)
-       ("python-pycairo" ,python-pycairo)
-       ("python-pygobject" ,python-pygobject)))
+     (list gtk+ python-dbus python-pexpect python-pycairo
+           python-pygobject))
     (home-page "https://docs.xfce.org/apps/catfish/start")
     (synopsis "File searching tool for Xfce")
     (description
@@ -305,9 +290,7 @@ it to your needs by using several command line options.")
              (for-each make-file-writable (find-files "."))
              #t)))))
     (native-inputs
-     `(("gtk+" ,gtk+)
-       ("optipng" ,optipng)
-       ("pkg-config" ,pkg-config)))
+     (list gtk+ optipng pkg-config))
     (home-page "https://shimmerproject.org/")
     (synopsis "Elementary icons extended and maintained for Xfce")
     (description "This is a fork of the upstream elementary project.  This icon
@@ -318,7 +301,7 @@ upstream occasionally.")
 (define-public exo
   (package
     (name "exo")
-    (version "4.16.2")
+    (version "4.16.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://archive.xfce.org/src/xfce/"
@@ -326,17 +309,15 @@ upstream occasionally.")
                                   "exo-" version ".tar.bz2"))
               (sha256
                (base32
-                "17cybaml221jnw99aig3zajg2kbnn87p5sycj68wpwgvd99zb2af"))))
+                "1rpsp37n5l3qxinv37rz5l4rvja7yaf8hqsy81jhlgz27wygybbj"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (propagated-inputs
      ;; exo-2.pc refers to all these.
-     `(("gtk+-3" ,gtk+)
-       ("libxfce4util" ,libxfce4util)))
+     (list gtk+ libxfce4util))
     (inputs
-     `(("libxfce4ui" ,libxfce4ui)))
+     (list libxfce4ui))
     (home-page "https://www.xfce.org/")
     (synopsis "Extension library for Xfce")
     (description
@@ -360,13 +341,10 @@ development.")
                 "07fjsgdjqxbcm84ga3cl495782k381k6mwksyrks3zf1l8klk4c4"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("glib:bin" ,glib "bin")
-       ("gobject-introspection" ,gobject-introspection)
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list `(,glib "bin") gobject-introspection intltool pkg-config))
     (propagated-inputs
-     `(("gtk+-3" ,gtk+)                 ; required by garcon-gtk3-1.pc
-       ("libxfce4ui" ,libxfce4ui)))     ; required by garcon-gtk3-1.pc
+     (list gtk+ ; required by garcon-gtk3-1.pc
+           libxfce4ui))     ; required by garcon-gtk3-1.pc
     (home-page "https://www.xfce.org/")
     (synopsis "Implementation of the freedesktop.org menu specification")
     (description
@@ -390,23 +368,22 @@ merging features essential for loading menus modified with menu editors.")
                 "0rmga1l7da0pjrs6jlyq1nfn513r543v7cchshrif1341knpy2wv"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-       ("glib:bin" ,glib "bin")         ; need glib-genmarshal
-       ("dbus-glib" ,dbus-glib)))       ; need dbus-binding-tool
+     (list pkg-config intltool
+           `(,glib "bin") ; need glib-genmarshal
+           dbus-glib))       ; need dbus-binding-tool
     (propagated-inputs
-     `(("glib" ,glib)))                 ; required by tumbler-1.pc
+     (list glib))                 ; required by tumbler-1.pc
     (inputs
-     `(("dbus" ,dbus)
-       ("gdk-pixbuf" ,gdk-pixbuf)
-       ("cairo" ,cairo) ;; Needed for pdf thumbnails (poppler-glibc.pc)
-       ("freetype" ,freetype)
-       ("libjpeg" ,libjpeg-turbo)
-       ("libgsf" ,libgsf)
-       ("poppler" ,poppler)
-       ;; FIXME Provide gstreamer and gstreamer-tag to get video thumbnails
-       ;; ("gstreamer" ,gstreamer)
-       ))
+     (list dbus
+           gdk-pixbuf
+           cairo ;; Needed for pdf thumbnails (poppler-glibc.pc)
+           freetype
+           libjpeg-turbo
+           libgsf
+           poppler
+           ;; FIXME Provide gstreamer and gstreamer-tag to get video thumbnails
+           ;; ("gstreamer" ,gstreamer)
+           ))
     (home-page "https://www.xfce.org/")
     (synopsis "D-Bus service for applications to request thumbnails")
     (description
@@ -436,8 +413,7 @@ management D-Bus specification.")
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* (string-append "plugins/clock/clock.c")
                (("/usr/share/zoneinfo")
-                (string-append (assoc-ref inputs "tzdata") "/share/zoneinfo")))
-             #t)))))
+                (search-input-directory inputs "share/zoneinfo"))))))))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("intltool" ,intltool)
@@ -478,13 +454,8 @@ applications menu, workspace switcher and more.")
                (base32
                 "08n2cig9r2lccwvmk6v9vjiz0xqcp6x30m5b3q702v0m6ylg4z8h"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("intltool" ,intltool)))
-    (inputs `(("glib" ,glib)
-              ("gtk+" ,gtk+)
-              ("libxfce4util" ,libxfce4util)
-              ("libxfce4ui" ,libxfce4ui)
-              ("xfce4-panel" ,xfce4-panel)))
+    (native-inputs (list pkg-config intltool))
+    (inputs (list glib gtk+ libxfce4util libxfce4ui xfce4-panel))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-battery-plugin")
     (synopsis "Battery monitor panel plugin for Xfce4")
@@ -508,13 +479,9 @@ applications menu, workspace switcher and more.")
                 "1f4rjdvyplfkrdqg9179chzxx18k3lx29674j28piccgyvk5z2mb"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("exo" ,exo)
-       ("libxfce4ui" ,libxfce4ui)
-       ("libxtst" ,libxtst)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list exo libxfce4ui libxtst xfce4-panel))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-clipman-plugin")
     (synopsis "Clipboard manager for Xfce")
@@ -553,16 +520,9 @@ matching them against regular expressions.")
                                     (or (getenv "C_INCLUDE_PATH") "")))
              #t)))))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)
-       ("dbus-glib" ,dbus-glib)
-       ("dbus" ,dbus)))
+     (list intltool pkg-config dbus-glib dbus))
     (inputs
-     `(("exo" ,exo)
-       ("libnotify" ,libnotify)
-       ("libxfce4ui" ,libxfce4ui)
-       ("pulseaudio" ,pulseaudio)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list exo libnotify libxfce4ui pulseaudio xfce4-panel))
     (home-page "https://git.xfce.org/panel-plugins/xfce4-pulseaudio-plugin/")
     (synopsis "PulseAudio panel plugin for Xfce")
     (description
@@ -575,7 +535,7 @@ keys for controlling the audio volume.")
 (define-public xfce4-whiskermenu-plugin
   (package
     (name "xfce4-whiskermenu-plugin")
-    (version "2.6.0")
+    (version "2.6.1")
     (source
      (origin
        (method url-fetch)
@@ -583,11 +543,10 @@ keys for controlling the audio volume.")
                            "xfce4-whiskermenu-plugin/" (version-major+minor version) "/"
                            "xfce4-whiskermenu-plugin-" version ".tar.bz2"))
        (sha256
-        (base32 "0rnlhcfsbjj0n8m84jgqihp783hrkjdjfapqr7ia53mr0fjgcw9j"))))
+        (base32 "0wpcc9i505mh6vphg27ph43dw4n3z59mwy39416yzmw325q04kl5"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (inputs
      `(("xfce4-panel" ,xfce4-panel)
        ("garcon" ,garcon)
@@ -630,16 +589,15 @@ applications, and includes a search bar to search for applications.")
                 "0rvrz464y7ji989zvi2v85kg47444nqsdq9rv6k8dkbkdwzy2jxv"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("garcon" ,garcon)
-       ("librsvg" ,librsvg)
-       ("libwnck" ,libwnck)
-       ("libx11" ,libx11)
-       ("libxfce4ui" ,libxfce4ui)
-       ("libxklavier" ,libxklavier)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list garcon
+           (librsvg-for-system)
+           libwnck
+           libx11
+           libxfce4ui
+           libxklavier
+           xfce4-panel))
     (home-page "https://git.xfce.org/panel-plugins/xfce4-xkb-plugin/")
     (synopsis "XKB layout switching panel plug-in for Xfce")
     (description
@@ -669,12 +627,9 @@ per window.")
                 "1v77h5634n49idci2jiw0k7jjk0vzpsvgyx2fkp18l39jayykqxz"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (inputs
-     `(("garcon" ,garcon)
-       ("gtk+" ,gtk+)
-       ("libxfce4ui" ,libxfce4ui)))
+     (list garcon gtk+ libxfce4ui))
     (home-page "https://www.xfce.org/")
     (synopsis "Xfce application finder")
     (description
@@ -718,16 +673,15 @@ your system in categories, so you can quickly find and launch them.")
                (substitute* "scripts/xflock4"
                  (("xset") (string-append xset "/bin/xset")))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (inputs
-     `(("iceauth" ,iceauth)
-       ("upower" ,upower)
-       ("polkit" ,polkit)
-       ("libsm" ,libsm)
-       ("libwnck" ,libwnck)
-       ("libxfce4ui" ,libxfce4ui)
-       ("xset" ,xset)))
+     (list iceauth
+           upower
+           polkit
+           libsm
+           libwnck
+           libxfce4ui
+           xset))
     (home-page "https://www.xfce.org/")
     (synopsis "Xfce session manager")
     (description
@@ -754,24 +708,23 @@ allows you to shut down the computer from Xfce.")
                            "--enable-sound-settings"
                            "--enable-xrandr")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (inputs
-     `(("exo" ,exo)
-       ("garcon" ,garcon)
-       ("libnotify" ,libnotify)
-       ("libxcursor" ,libxcursor)
-       ("libxi" ,libxi)
-       ("libxklavier" ,libxklavier)
-       ("libxrandr" ,libxrandr)
-       ("libxfce4ui" ,libxfce4ui)
-       ("upower" ,upower) ;; TODO needs upower-glib
-       ("python" ,python) ;; for xfce4-compose-mail
-       ("xf86-input-libinput" ,xf86-input-libinput)))
+     (list exo
+           garcon
+           libnotify
+           libxcursor
+           libxi
+           libxklavier
+           libxrandr
+           libxfce4ui
+           upower ;; TODO needs upower-glib
+           python ;; for xfce4-compose-mail
+           xf86-input-libinput))
     (propagated-inputs
      ;; Some operations, such as changing icon themes, require these schemas
      ;; to be in the search path.
-     `(("gsettings-desktop-schemas" ,gsettings-desktop-schemas)))
+     (list gsettings-desktop-schemas))
     (home-page "https://www.xfce.org/")
     (synopsis "Xfce settings manager")
     (description
@@ -793,19 +746,18 @@ like appearance, display, keyboard and mouse settings.")
                 "14lwi4ax0wj77980kkfhdf18b97339b17y8qc8gl2365mgswh1gi"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (inputs
-     `(("exo" ,exo)
-       ("gobject-introspection" ,gobject-introspection)
-       ("gvfs" ,gvfs)
-       ("libexif" ,libexif)
-       ("libgudev" ,libgudev)
-       ("libnotify" ,libnotify)
-       ("libxfce4ui" ,libxfce4ui)
-       ("pcre" ,pcre)
-       ("xfce4-panel" ,xfce4-panel)
-       ("startup-notification" ,startup-notification)))
+     (list exo
+           gobject-introspection
+           gvfs
+           libexif
+           libgudev
+           libnotify
+           libxfce4ui
+           pcre
+           xfce4-panel
+           startup-notification))
     (home-page "https://www.xfce.org/")
     (synopsis "Xfce file manager")
     (description
@@ -827,13 +779,9 @@ fast.")
         (base32 "0zaliahfz9ci2md7g6w9mb7z5azi5n56gihbnwyzvds2n8cygh6j"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (inputs
-     `(("exo" ,exo)
-       ("libgudev" ,libgudev)
-       ("libnotify" ,libnotify)
-       ("libxfce4ui" ,libxfce4ui)))
+     (list exo libgudev libnotify libxfce4ui))
     (home-page "https://www.xfce.org/")
     (synopsis "Removable media manager for Thunar")
     (description
@@ -858,15 +806,14 @@ and import the new pictures from your camera.")
                 "133ip28v6j3x4l413d81ixsisf32sa0xzd54n0nn8g6p9fh4rcmm"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (inputs
-     `(("libdrm" ,libdrm)
-       ("libwnck" ,libwnck)
-       ("libxcomposite" ,libxcomposite)
-       ("libxdamage" ,libxdamage)
-       ("libxfce4ui" ,libxfce4ui)
-       ("libxrandr" ,libxrandr)))
+     (list libdrm
+           libwnck
+           libxcomposite
+           libxdamage
+           libxfce4ui
+           libxrandr))
     (home-page "https://www.xfce.org/")
     (synopsis "Xfce window manager")
     (description
@@ -916,19 +863,16 @@ on the screen.")
 
        #:disallowed-references (,inkscape ,imagemagick)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-
-       ;; For our own ‘prepare-background-image’ phase.
-       ("inkscape" ,inkscape)
-       ("imagemagick" ,imagemagick)))
+     (list pkg-config intltool
+           ;; For our own ‘prepare-background-image’ phase.
+           inkscape imagemagick))
     (inputs
-     `(("exo" ,exo)
-       ("garcon" ,garcon)
-       ("libnotify" ,libnotify)
-       ("libwnck" ,libwnck)
-       ("libxfce4ui" ,libxfce4ui)
-       ("thunar" ,thunar)))
+     (list exo
+           garcon
+           libnotify
+           libwnck
+           libxfce4ui
+           thunar))
     (home-page "https://www.xfce.org/")
     (synopsis "Xfce desktop manager")
     (description
@@ -951,11 +895,9 @@ devices and folders.")
                 "1irxyg5vp6vyd9vxdqav6jhchfkmhlqq511386h644p0k30kfcvs"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (inputs
-     `(("libxfce4ui" ,libxfce4ui)
-       ("vte" ,vte)))
+     (list libxfce4ui vte))
     (home-page "https://www.xfce.org/")
     (synopsis "Xfce terminal emulator")
     (description
@@ -1029,7 +971,7 @@ on your desktop.")
        ("xfce4-xkb-plugin"        ,xfce4-xkb-plugin)))
     (propagated-inputs
      ;; Default font that applications such as IceCat require.
-     `(("font-dejavu"             ,font-dejavu)))
+     (list font-dejavu))
     (native-search-paths
      ;; For finding panel plugins.
      (package-native-search-paths xfce4-panel))
@@ -1054,14 +996,9 @@ system resources, while still being visually appealing and user friendly.")
                 "1wrvqiifaxsgcn1kh4vm2hwxi9lgm6mw4zrfld2zl0mm05y5i77b"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (inputs
-     `(("libxrandr" ,libxrandr)
-       ("gtk+" ,gtk+)
-       ("upower" ,upower)
-       ("libnotify" ,libnotify)
-       ("libxfce4ui" ,libxfce4ui)))
+     (list libxrandr gtk+ upower libnotify libxfce4ui))
     (home-page "https://www.xfce.org/")
     (synopsis "Xfce Power Manager")
     (description
@@ -1077,7 +1014,7 @@ inhibit interface which allows applications to prevent automatic sleep.")
 (define-public ristretto
   (package
     (name "ristretto")
-    (version "0.11.0")
+    (version "0.12.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://archive.xfce.org/src/apps/ristretto/"
@@ -1085,18 +1022,14 @@ inhibit interface which allows applications to prevent automatic sleep.")
                                   "ristretto-" version ".tar.bz2"))
               (sha256
                (base32
-                "08w8nw6cl8kpvjnp7dxgpqlmi3s73amhrb7l0sbzmjy82ba30zl7"))))
+                "0sfrvb19xkiphcp2ddqxgvh9hbramlm6qi7sv99s407c4acqdvhf"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("desktop-file-utils" ,desktop-file-utils)
-       ("pkg-config" ,pkg-config)))
+     (list intltool desktop-file-utils
+           `(,glib "bin") ; for gdbus-codegen
+           pkg-config))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("libexif" ,libexif)
-       ("libxfce4ui" ,libxfce4ui)
-       ("librsvg" ,librsvg)
-       ("tumbler" ,tumbler)))
+     (list gtk+ libexif libxfce4ui tumbler))
     (home-page "https://docs.xfce.org/apps/ristretto/start")
     (synopsis "Fast and lightweight picture-viewer")
     (description
@@ -1120,15 +1053,14 @@ the desktop wallpaper.")
                 "1ya81si7xhqqbbc9lfcjg2i1pi1qdfw1pnjry7kf95f1w50244nd"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("libwnck" ,libwnck)
-       ("libxmu" ,libxmu)
-       ("gtk+" ,gtk+)
-       ;; FIXME: Remove libxext and libxt when libxmu propagates them.
-       ("libxext" ,libxext)
-       ("libxt" ,libxt)))
+     (list libwnck
+           libxmu
+           gtk+
+           ;; FIXME: Remove libxext and libxt when libxmu propagates them.
+           libxext
+           libxt))
     (home-page "https://goodies.xfce.org/projects/applications/xfce4-taskmanager")
     (synopsis "Easy to use task manager")
     (description
@@ -1158,14 +1090,9 @@ memory usage graphically, and it can display processes as a tree.")
              #t)))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("gtk+" ,gtk+-2)
-       ("libical" ,libical)
-       ("libnotify" ,libnotify)
-       ("popt" ,popt)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list gtk+-2 libical libnotify popt xfce4-panel))
     (home-page "https://www.xfce.org/projects/")
     (synopsis "Simple calendar application with reminders")
     (description
@@ -1190,12 +1117,9 @@ several different time zones.")
                 "0ib5s7kjbr9sy8nh89nfcc4w6qplacnk4s92iycijy2wcv389aqr"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("libxfce4ui" ,libxfce4ui)
-       ("libnotify" ,libnotify)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list libxfce4ui libnotify xfce4-panel))
     (home-page "https://goodies.xfce.org/projects/applications/xfce4-notifyd")
     (synopsis "Show notification bubbles on Xfce")
     (description
@@ -1221,19 +1145,18 @@ sending standard messages over D-Bus using the
                 "09q3s2rkpf0ljzq6bv4hl9byvaggjq7lchfw5zaircwv5q9nwhc3"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("exo" ,exo)
-       ("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base)
-       ("gst-plugins-good" ,gst-plugins-good)
-       ("gst-plugins-ugly" ,gst-plugins-ugly)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("libburn" ,libburn)
-       ("libisofs" ,libisofs)
-       ("libxfce4ui" ,libxfce4ui)))
+     (list exo
+           gstreamer
+           gst-plugins-base
+           gst-plugins-good
+           gst-plugins-ugly
+           glib
+           gtk+
+           libburn
+           libisofs
+           libxfce4ui))
     (home-page "https://goodies.xfce.org/projects/applications/xfburn")
     (synopsis "GTK+ based CD, DVD and Blu-ray burning application")
     (description
@@ -1246,7 +1169,7 @@ of data to either CD/DVD/BD.")
 (define-public mousepad
   (package
     (name "mousepad")
-    (version "0.5.6")
+    (version "0.5.8")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://archive.xfce.org/src/apps/mousepad/"
@@ -1254,7 +1177,7 @@ of data to either CD/DVD/BD.")
                                   version ".tar.bz2"))
               (sha256
                (base32
-                "03rmjraxb6a3w7gknmf6mdzkfc0m8shs1vkb2chvv28xn1irhma2"))))
+                "08d7qfisdq59phbm0nbjr667av7l4qnpl5x565pybqnmvz7vn7lj"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '(;; Use the GSettings keyfile backend rather than
@@ -1269,16 +1192,13 @@ of data to either CD/DVD/BD.")
               (wrap-program (string-append out "/bin/mousepad")
                 ;; For language-specs.
                 `("XDG_DATA_DIRS" ":" prefix (,(string-append gtksourceview
-                                                              "/share")))))
-             #t)))))
+                                                              "/share"))))))))))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("glib" ,glib "bin") ; for glib-compile-schemas.
-       ("pkg-config" ,pkg-config)))
+     (list intltool
+           `(,glib "bin") ; for glib-compile-schemas.
+           pkg-config))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("gtksourceview" ,gtksourceview-3)
-       ("xfconf" ,xfconf)))
+     (list gtk+ gtksourceview xfconf))
     (home-page "https://git.xfce.org/apps/mousepad/")
     (synopsis "Simple text editor for Xfce")
     (description
@@ -1301,14 +1221,10 @@ of data to either CD/DVD/BD.")
               "196swmc4amab8xcwv4q9p8b43fzzi9xagg20gnyjvf5x7yssxj1k"))))
    (build-system gnu-build-system)
    (native-inputs
-    `(("pkg-config" ,pkg-config)
-      ("intltool" ,intltool)
-      ("glib:bin" ,glib "bin")))        ; glib-genmarshal
+    (list pkg-config intltool
+          `(,glib "bin")))        ; glib-genmarshal
    (inputs
-    `(("exo" ,exo)
-      ("libsoup" ,libsoup)
-      ("libxfce4ui" ,libxfce4ui)
-      ("xfce4-panel" ,xfce4-panel)))
+    (list exo libsoup-minimal-2 libxfce4ui xfce4-panel))
    (home-page "https://goodies.xfce.org/projects/applications/xfce4-screenshooter")
    (synopsis "Xfce's application to take screenshots")
    (description
@@ -1362,7 +1278,7 @@ A plugin for the Xfce panel is also available.")
     (synopsis "Screensaver for the Xfce desktop")
     (description
      "Xfce Screensaver is a screen saver and locker that aims to have simple,
- sane, secure defaults and be well integrated with the Xfce desktop. ")
+ sane, secure defaults and be well integrated with the Xfce desktop.")
     (license gpl2+)))
 
 (define-public xfce4-volumed-pulse
@@ -1379,14 +1295,9 @@ A plugin for the Xfce panel is also available.")
                 "1q639iwwj7q2plgz0wdgdbi5wkgaq177ca9rnnlrnbdmid5z5fqk"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("xfconf" ,xfconf)
-       ("libnotify" ,libnotify)
-       ("pulseaudio" ,pulseaudio)
-       ("keybinder-3.0" ,keybinder-3.0)
-       ("gtk+" ,gtk+)))
+     (list xfconf libnotify pulseaudio keybinder-3.0 gtk+))
     (home-page "https://goodies.xfce.org/projects/applications/xfce4-volumed")
     (synopsis "XFCE volume keys daemon")
     (description
@@ -1397,7 +1308,7 @@ A plugin for the Xfce panel is also available.")
 (define-public xfce4-cpugraph-plugin
   (package
    (name "xfce4-cpugraph-plugin")
-   (version "1.2.3")
+   (version "1.2.5")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://archive.xfce.org/src/panel-plugins/"
@@ -1406,14 +1317,12 @@ A plugin for the Xfce panel is also available.")
                                   "/xfce4-cpugraph-plugin-" version ".tar.bz2"))
               (sha256
                (base32
-                "13302psv0fzg2dsgadr8j6mb06k1bsa4zw6hxmb644vqlvcwq37v"))))
+                "1c51qf93lr6kr2g4nil21rj1h3h5kp3k50n9hcxvcy9wz3bxpxn2"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("libxfce4ui" ,libxfce4ui)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list libxfce4ui xfce4-panel))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-cpugraph-plugin")
     (synopsis "Display CPU load as a graph in the Xfce panel")
@@ -1442,11 +1351,9 @@ core or CPU.")
                 "1iaszzkagl1mb0cdafrvlfjnjklhhs9y90517par34sjiqbq1dsd"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("libxfce4ui" ,libxfce4ui)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list libxfce4ui xfce4-panel))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-eyes-plugin")
     (synopsis "Display a pair of eyes for the Xfce panel")
@@ -1469,12 +1376,9 @@ watch your every step.")
                 "09b9k0n5xm115k44x74w4ad0xqklilyfh0hglsps7zj97pd7a5a3"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("gtk+-2" ,gtk+-2)
-       ("libxfce4ui" ,libxfce4ui)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list gtk+-2 libxfce4ui xfce4-panel))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-equake-plugin")
     (synopsis "Earthquake monitor for the Xfce panel")
@@ -1498,11 +1402,9 @@ each time a new earthquake occurs.")
                 "0h15mxq5lawlxyr6h1vxc60rkf0rpmnv81l0f52mrswww9dz3xp9"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("libxfce4ui" ,libxfce4ui)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list libxfce4ui xfce4-panel))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-datetime-plugin")
     (synopsis "Display date and time inside the Xfce panel")
@@ -1525,11 +1427,9 @@ and a calendar appears when you left-click on it.")
                 "10fsb9pyr2cr9dj1k3n96dq6g02g61g5y4z4jzfvskpgqc1nl0g4"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("libxfce4ui" ,libxfce4ui)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list libxfce4ui xfce4-panel))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-calculator-plugin")
     (synopsis "Calculator for the Xfce panel")
@@ -1553,11 +1453,9 @@ precedence rules, and the following functions and common constants.")
                 "17kzy156xqnbk4apskg005p7r09q7zb8crifad5mbawc7ysihll1"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("libxfce4ui" ,libxfce4ui)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list libxfce4ui xfce4-panel))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-cpufreq-plugin")
     (synopsis "Xfce panel plugin for displaying CPU frequency")
@@ -1580,11 +1478,9 @@ governor and frequencies supported and used by your system.")
                 "0n8wsnjvzw98z8r0f0zr8n2gicjz6hhislp86xrjh0r4xcnymcbk"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("libxfce4ui" ,libxfce4ui)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list libxfce4ui xfce4-panel))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-diskperf-plugin")
     (synopsis "Display disk performance in the Xfce panel")
@@ -1607,12 +1503,9 @@ performance (bytes transferred per second).")
                 "0a72kqsjjh45swimqlpyrahdnplp0383v0i4phr4n6g8c1ixyry7"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("libxfce4ui" ,libxfce4ui)
-       ("xfce4-panel" ,xfce4-panel)
-       ("gtk+-2" ,gtk+-2)))
+     (list libxfce4ui xfce4-panel gtk+-2))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-embed-plugin")
     (synopsis "Embed arbitrary applications inside the Xfce panel")
@@ -1642,11 +1535,9 @@ this very convenient.")
                 "01a1an5z4kpgi68lk98q7wga7sx676fcbnrsd5cpq4d736ifdn37"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("libxfce4ui" ,libxfce4ui)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list libxfce4ui xfce4-panel))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-fsguard-plugin")
     (synopsis "Xfce panel plugin to monitor free disk space")
@@ -1672,11 +1563,9 @@ be clicked to open the chosen mount point.")
                 "0d81npcqnmkw2qaqa8c6igh9j5r4ivgb15zcjwxjkyhrzz89y4dj"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("libxfce4ui" ,libxfce4ui)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list libxfce4ui xfce4-panel))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-genmon-plugin")
     (synopsis "Generic program output monitor for the Xfce panel")
@@ -1703,13 +1592,9 @@ button and a personalized tooltip.")
                 "0bmykjhd3gs1737fl3zn5gg6f3vlncak2xqz89zv5018znz1xy90"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("gtk+-2" ,gtk+-2)
-       ("libxfce4ui" ,libxfce4ui)
-       ("exo" ,exo)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list gtk+-2 libxfce4ui exo xfce4-panel))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-mailwatch-plugin")
     (synopsis "Mail watch plugin for the Xfce panel")
@@ -1741,11 +1626,9 @@ multi-mailbox mail watcher.  Currently, the protocols supported are:
                 "0q3pysdp85b3c7g3b59y3c69g4nw6bvbf518lnri4lxrnsvpizpf"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("libxfce4ui" ,libxfce4ui)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list libxfce4ui xfce4-panel))
     (home-page "https://goodies.xfce.org/projects/panel-plugins/xfce4-mpc-plugin")
     (synopsis "Music Player Daemon plugin for the Xfce panel")
     (description "This is a simple client plugin for Music Player Daemon.
@@ -1784,11 +1667,9 @@ right-click menu
                 "1hlfnlxwwx0hkm82mcz777f3i22x6bh6k3gzl0yjnm4yj9adjk2q"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("libxfce4ui" ,libxfce4ui)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list libxfce4ui xfce4-panel))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-mount-plugin")
     (synopsis "Mount/unmount plugin for the Xfce panel")
@@ -1813,11 +1694,9 @@ mounted or when unmounting fails.")
                 "036pvhfv1iynvj75va0xl8hpvnfckabyqm9jv56pb40p2072cxkc"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("libxfce4ui" ,libxfce4ui)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list libxfce4ui xfce4-panel))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-netload-plugin")
     (synopsis "Netload plugin for the Xfce Panel")
@@ -1840,14 +1719,9 @@ interfaces of your choice in the panel.")
                 "1chac4ki70axgvkmhw94m0srsv0pwiwqrqbh8di0y9n90fgj24gj"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("desktop-file-utils" ,desktop-file-utils)
-       ("pkg-config" ,pkg-config)))
+     (list intltool desktop-file-utils pkg-config))
     (inputs
-     `(("gtk+-2" ,gtk+-2)
-       ("exo" ,exo)
-       ("libxfce4ui" ,libxfce4ui)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list gtk+-2 exo libxfce4ui xfce4-panel))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-places-plugin")
     (synopsis "Gnome-like Places menu for the Xfce panel")
@@ -1882,11 +1756,9 @@ opens up a menu with the following:
                 "1lyd64qc9w6qnpqjb5xk0mjq4l7riv6z7l9aws28clalb8prw9ra"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("libxfce4ui" ,libxfce4ui)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list libxfce4ui xfce4-panel))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-smartbookmark-plugin")
     (synopsis "Perform custom searches in your browser from the Xfce panel")
@@ -1910,13 +1782,10 @@ favorite search engine or bug tracker right from the Xfce panel.")
                 "1d2n56g12dhnjznrq7xvr6d3brpp0lmm080xmgjb7ybc1yygpxrc"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)
-       ("glib:bin" ,glib "bin")))
+     (list intltool pkg-config
+           `(,glib "bin")))
     (inputs
-     `(("libxfce4ui" ,libxfce4ui)
-       ("libdbusmenu" ,libdbusmenu)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list libxfce4ui libdbusmenu xfce4-panel))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-statusnotifier-plugin")
     (synopsis "Xfce panel plugin for status notifier items")
@@ -1942,11 +1811,9 @@ freedesktop.org specification.")
                 "1q840298jzdqlhc9lw49q32xzdhnbzcgvv69qq5slkc704s5w6vw"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("libxfce4ui" ,libxfce4ui)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list libxfce4ui xfce4-panel))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-stopwatch-plugin")
     (synopsis "Stopwatch plugin for the Xfce panel")
@@ -1968,12 +1835,9 @@ freedesktop.org specification.")
                 "0lknh5l30qs5c69wwjcblbyhczvdbxs59fqkb8mpqbfm05w01lan"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("libgtop" ,libgtop)
-       ("libxfce4ui" ,libxfce4ui)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list libgtop libxfce4ui xfce4-panel))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-systemload-plugin")
     (synopsis "System load display plugin for the Xfce panel")
@@ -1997,12 +1861,9 @@ swap space and the system uptime in the Xfce4 panel.")
                 "1m42kmi0x3xb0lzj2nd7q2r5y5r2viqcvxfpbg1aafzzjjkfpn1x"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("libxfce4ui" ,libxfce4ui)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list gtk+ libxfce4ui xfce4-panel))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-time-out-plugin")
     (synopsis "Xfce panel plugin that encourages periodical breaks")
@@ -2027,11 +1888,9 @@ time.")
                 "1qr4m3n2l3rvsizsr3h7fyfajszfalqm7rhvjx2yjj8r3f8x4ljb"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("libxfce4ui" ,libxfce4ui)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list libxfce4ui xfce4-panel))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-timer-plugin")
     (synopsis "Simple countdown and alarm plugin for the Xfce panel")
@@ -2055,11 +1914,9 @@ period.")
                 "09gqp0jb5ccjh7ny798n5cy9skdx3hpis4kgvjpl4vidnrg5xnpb"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("libxfce4ui" ,libxfce4ui)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list libxfce4ui xfce4-panel))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-verve-plugin")
     (synopsis "Command line for the Xfce panel")
@@ -2089,11 +1946,9 @@ for the Xfce panel.  It supports several features, such as:
                 "07a8nmc60in48licjj0gmwm77vb8divh1lb7jnib35n5a1ka6ypa"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("libxfce4ui" ,libxfce4ui)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list libxfce4ui xfce4-panel))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-wavelan-plugin")
     (synopsis "Show stats from WLAN interface in Xfce panel")
@@ -2116,14 +1971,9 @@ lan interface (signal state, signal quality, network name (SSID)).")
                 "1z2k24d599mxf5gqa35i3xmc3gk2yvqs80hxxpyw06yma6ljw973"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("libsoup" ,libsoup)
-       ("libxfce4ui" ,libxfce4ui)
-       ("libxml2" ,libxml2)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list gtk+ libsoup-minimal-2 libxfce4ui libxml2 xfce4-panel))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-weather-plugin")
     (synopsis "Show information about local weather in the Xfce panel")
@@ -2131,3 +1981,28 @@ lan interface (signal state, signal quality, network name (SSID)).")
 local weather in the panel, using forecast data provided by the
 @uref{https://met.no, Norwegian Meteorological Institute}.")
     (license gpl2+)))
+
+(define-public xfce4-dev-tools
+  (package
+    (name "xfce4-dev-tools")
+    (version "4.17.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://archive.xfce.org/src/xfce/"
+                                  "xfce4-dev-tools/" (version-major+minor version) "/"
+                                  "xfce4-dev-tools-" version ".tar.bz2"))
+              (sha256
+               (base32
+                "1iwkqj96x2s7fk4srg1pymvsiwb2rn6vvhy6hrmnc3hl1vqw2d6k"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     (list pkg-config))
+    (inputs
+     (list glib))
+    (home-page "https://docs.xfce.org/xfce/xfce4-dev-tools/")
+    (synopsis "Xfce developer tools")
+    (description
+     "The Xfce development tools are a collection of tools and macros for Xfce
+developers and people that want to build Xfce from Git In addition it contains
+the Xfce developer's handbook.")
+    (license gpl2+)))
diff --git a/gnu/packages/xfig.scm b/gnu/packages/xfig.scm
index c3d02619b4..9004c79e22 100644
--- a/gnu/packages/xfig.scm
+++ b/gnu/packages/xfig.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2014 Federico Beffa <beffa@fbengineering.ch>
 ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -25,6 +26,7 @@
   #:use-module (guix build-system gnu)
   #:use-module (gnu packages)
   #:use-module (gnu packages freedesktop)
+  #:use-module (gnu packages ghostscript)
   #:use-module (gnu packages xorg)
   #:use-module (gnu packages image)
   #:use-module (gnu packages compression))
@@ -32,7 +34,7 @@
 (define-public xfig
   (package
     (name "xfig")
-    (version "3.2.7a")
+    (version "3.2.8b")
     (source
      (origin
        (method url-fetch)
@@ -40,11 +42,11 @@
                            name "-" version ".tar.xz"))
        (sha256
         (base32
-         "096zgp0bqnxhgxbrv2jjylrjz3pr4da0xxznlk2z7ffxr5pri2fa"))))
+         "0fndgbm1mkqb1sn2v2kj3nx9mxj70jbp31y2bjvzcmmkry0q3k5j"))))
     (build-system gnu-build-system)
     (native-inputs
      ;; For tests.
-     `(("desktop-file-utils" ,desktop-file-utils)))
+     (list desktop-file-utils ghostscript))
     (inputs
      `(("libxaw3d" ,libxaw3d)
        ("libjpeg" ,libjpeg-turbo)
@@ -86,8 +88,7 @@ selected in various ways.  For text, 35 fonts are available.")
          "0i3p7qmg2w8qrad3pn42b0miwarql7yy0gpd49b1bpal6bqsiicf"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("imake" ,imake)
-       ("makedepend" ,makedepend)))
+     (list imake makedepend))
     (inputs
      `(("xfig"    ,xfig)
        ("libjpeg" ,libjpeg-turbo)
diff --git a/gnu/packages/xiph.scm b/gnu/packages/xiph.scm
index fbbcbd6e61..a240ce7c4a 100644
--- a/gnu/packages/xiph.scm
+++ b/gnu/packages/xiph.scm
@@ -11,6 +11,8 @@
 ;;; Copyright © 2018 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
 ;;; Copyright © 2021 Brendan Tildesley <mail@brendan.scot>
+;;; Copyright © 2021 Matthew James Kraai <kraai@ftbfs.org>
+;;; Copyright © 2021 Vinicius Monego <monego@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -50,14 +52,14 @@
 (define-public libogg
   (package
    (name "libogg")
-   (version "1.3.4")
+   (version "1.3.5")
    (source (origin
             (method url-fetch)
             (uri (string-append "https://downloads.xiph.org/releases/ogg/libogg-"
                                 version ".tar.xz"))
             (sha256
              (base32
-              "1zlk33vxvxr0l9lhkbhkdwvylw96d2n0fnd3d8dl031hph9bqqy1"))))
+              "01b7050bghdvbxvw0gzv588fn4a27zh42ljpwzm4vrf8dziipnf4"))))
    (build-system gnu-build-system)
    (arguments
     '(#:configure-flags '("--disable-static")))
@@ -84,7 +86,7 @@ periodic timestamps for seeking.")
              (base32
               "0jwmf87x5sdis64rbv0l87mdpah1rbilkkxszipbzg128f9w8g5k"))))
    (build-system gnu-build-system)
-   (propagated-inputs `(("libogg" ,libogg)))
+   (propagated-inputs (list libogg))
    (arguments `(#:configure-flags '("LDFLAGS=-lm"
                                     "--disable-static")
                 #:parallel-tests? #f))
@@ -114,9 +116,9 @@ polyphonic) audio and music at fixed and variable bitrates from 16 to
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--disable-static")))
-    (inputs `(("libvorbis" ,libvorbis)))
+    (inputs (list libvorbis))
     ;; The .pc files refer to libogg.
-    (propagated-inputs `(("libogg" ,libogg)))
+    (propagated-inputs (list libogg))
     (synopsis "Library implementing the Theora video format")
     (description
      "The libtheora library implements the ogg theora video format,
@@ -141,10 +143,9 @@ compressed video format.")
     (arguments
      '(#:configure-flags '("--disable-static")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libogg" ,libogg)
-       ("speexdsp" ,speexdsp)))
+     (list libogg speexdsp))
     (home-page "https://gnu.org/software/speex")
     (synopsis "Library for patent-free audio compression format")
     (description
@@ -202,13 +203,9 @@ work from the @code{speex} codec.")
     ;; "out" would include only the ALSA back-end, while "pulse" would
     ;; contain 'lib/ao/plugins-4/libpulse.*'.
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("pulseaudio" ,pulseaudio)))
+     (list alsa-lib pulseaudio))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list pkg-config autoconf automake libtool))
     (synopsis "Cross platform audio library")
     (description
      "Libao is a cross-platform audio library that allows programs to
@@ -253,7 +250,7 @@ It currently supports:
    (arguments
     `(#:parallel-tests? #f))
    ;; FIXME: configure also looks for xmms, input could be added once it exists
-   (propagated-inputs `(("libogg" ,libogg))) ; required by flac.pc
+   (propagated-inputs (list libogg)) ; required by flac.pc
    (synopsis "Free lossless audio codec")
    (description
 "FLAC stands for Free Lossless Audio Codec, an audio format that is lossless,
@@ -274,14 +271,9 @@ meaning that audio is compressed in FLAC without any loss in quality.")
              (base32
               "0s3vr2nxfxlf1k75iqpp4l78yf4gil3f0v778kvlngbchvaq23n4"))))
    (build-system gnu-build-system)
-   (native-inputs `(("doxygen" ,doxygen)
-                    ("bison" ,bison)
-                    ("pkg-config" ,pkg-config)))
+   (native-inputs (list doxygen bison pkg-config))
    ;; FIXME: Add optional input liboggz
-   (inputs `(("libogg" ,libogg)
-             ("libpng" ,libpng)
-             ("python" ,python-wrapper)
-             ("zlib" ,zlib)))
+   (inputs (list libogg libpng python-wrapper zlib))
    (synopsis "Karaoke and text codec for embedding in ogg")
    (description
     "Kate is an overlay codec, originally designed for karaoke and text,
@@ -310,14 +302,14 @@ Kate stream.")
              (base32
               "1c7h4ivgfdyygz2hyh6nfibxlkz8kdk868a576qkkjgj5gn78xyv"))))
    (build-system gnu-build-system)
-   (inputs `(("ao" ,ao)
-             ("curl" ,curl)
-             ("flac" ,flac)
-             ("libkate" ,libkate)
-             ("libogg" ,libogg)
-             ("libvorbis" ,libvorbis)
-             ("speex" ,speex)))
-   (native-inputs `(("pkg-config" ,pkg-config)))
+   (inputs (list ao
+                 curl
+                 flac
+                 libkate
+                 libogg
+                 libvorbis
+                 speex))
+   (native-inputs (list pkg-config))
    (synopsis "Ogg vorbis tools")
    (description
     "Ogg vorbis is a non-proprietary, patent-and-royalty-free,
@@ -379,11 +371,9 @@ incorporated technology from Skype's SILK codec and Xiph.Org's CELT codec.")
                                               (assoc-ref %build-inputs "opus")
                                               "/include/opus"))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libopusenc" ,libopusenc)
-       ("opusfile" ,opusfile)
-       ("flac" ,flac)))
+     (list libopusenc opusfile flac))
     (synopsis
      "Command line utilities to encode, inspect, and decode .opus files")
     (description "Opus is a royalty-free, highly versatile audio codec.
@@ -406,14 +396,21 @@ decoding .opus files.")
                 "02smwc5ah8nb3a67mnkjzqmrzk43j356hgj2a97s9midq40qd38i"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:configure-flags '("--disable-static")))
+     '(#:configure-flags '("--disable-static")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-multistream
+           ;; Opus include directory should be passed explicitly:
+           ;; https://github.com/xiph/opusfile/issues/10 however,
+           ;; opus_multistream.h still can't be found by the compiler.
+           (lambda _
+             (substitute* "include/opusfile.h"
+               (("opus_multistream\\.h") "opus/opus_multistream.h")))))))
     ;; Required by opusfile.pc and opusurl.pc.
     (propagated-inputs
-     `(("libogg" ,libogg)
-       ("openssl" ,openssl)
-       ("opus" ,opus)))
+     (list libogg openssl opus))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "Versatile audio codec")
     (description
      "The opusfile library provides seeking, decode, and playback of Opus
@@ -435,10 +432,10 @@ windows systems.")
                 "1ffb0vhlymlsq70pxsjj0ksz77yfm2x0a1x8q50kxmnkm1hxp642"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (propagated-inputs
-     `(("opus" ,opus)))
-    (synopsis "Library for encoding Opus audio files and streams ")
+     (list opus))
+    (synopsis "Library for encoding Opus audio files and streams")
     (description "The libopusenc libraries provide a high-level API for
 encoding Opus files and streams.")
     (home-page "https://www.opus-codec.org/")
@@ -458,16 +455,16 @@ encoding Opus files and streams.")
                 "0i2d9rhav0x6js2qhjf5iy6j2a7f0d11ail0lfv40hb1kygrgda9"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libxslt" ,libxslt)
-       ("libxml2" ,libxml2)
-       ("openssl" ,openssl)
-       ("curl" ,curl)
-       ("libogg" ,libogg)
-       ("libvorbis" ,libvorbis)
-       ("libtheora" ,libtheora)
-       ("speex" ,speex)))
+     (list libxslt
+           libxml2
+           openssl
+           curl
+           libogg
+           libvorbis
+           libtheora
+           speex))
     (synopsis "Streaming media server")
     (description "Icecast is a streaming media server which currently supports
 Ogg (Vorbis and Theora), Opus, WebM and MP3 audio streams.  It can be used to
@@ -490,12 +487,10 @@ things in between.")
                 "1438da40y73y9068saxrbmm27qq6xqmmzsziwgmr8fb7i9k6irfr"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (propagated-inputs
      ;; shout.pc refers to all these.
-     `(("libtheora" ,libtheora)
-       ("libvorbis" ,libvorbis)
-       ("speex"     ,speex)))
+     (list libtheora libvorbis speex))
     (home-page "https://icecast.org/")
     (synopsis "Audio streaming library for icecast encoders")
     (description
@@ -503,3 +498,36 @@ things in between.")
 icecast server.  It handles the socket connection, the timing of the data,
 and prevents bad data from getting to the icecast server.")
     (license license:gpl2+)))
+
+(define-public xiph-rnnoise
+  ;; No upstream release
+  (let ((commit "7f449bf8bd3b933891d12c30112268c4090e4d59")
+        (revision "0"))
+   (package
+     (name "rnnoise")
+     (version (git-version "0" revision commit))
+     (source (origin
+               (method git-fetch)
+               (uri (git-reference
+                     (url "https://gitlab.xiph.org/xiph/rnnoise")
+                     (commit commit)))
+               (file-name (git-file-name name version))
+               (sha256
+                (base32
+                 "0y8jdvxd9namw4f9hcmcmm2q0f32mnhfyjap8906hl308cws3rkj"))))
+     (build-system gnu-build-system)
+     (native-inputs
+      `(("autoconf" ,autoconf)
+        ("automake" ,automake)
+        ("libtool" ,libtool)))
+     (home-page "https://gitlab.xiph.org/xiph/rnnoise")
+     (synopsis "Real-time noise suppression")
+     (description "RNNoise is a noise suppression library based on a recurrent
+neural network.  The algorithm is described in Jean-Marc Valin's paper
+@cite{A Hybrid DSP/Deep Learning Approach to Real-Time Full-Band Speech
+Enhancement}.")
+     (license license:bsd-3)
+     (properties
+      ;; There's no public release and a conflicting package, so hide it for
+      ;; now.
+      `((hidden? . #t))))))
diff --git a/gnu/packages/xml.scm b/gnu/packages/xml.scm
index 8c87760323..771c577618 100644
--- a/gnu/packages/xml.scm
+++ b/gnu/packages/xml.scm
@@ -5,7 +5,7 @@
 ;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
 ;;; Copyright © 2015, 2016, 2017, 2018, 2020 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015, 2016, 2017 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2015, 2016, 2017, 2018, 2021 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2015, 2016, 2017, 2018, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2015 Raimon Grau <raimonster@gmail.com>
 ;;; Copyright © 2016 Mathieu Lirzin <mthl@gnu.org>
 ;;; Copyright © 2016, 2017 Leo Famulari <leo@famulari.name>
@@ -103,12 +103,9 @@
     (arguments
      `(#:glib-or-gtk? #t))
     (native-inputs
-     `(("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc/stable)
-       ("pkg-config" ,pkg-config)))
+     (list gobject-introspection gtk-doc/stable pkg-config))
     (inputs
-     `(("appstream-glib" ,appstream-glib)
-       ("glib" ,glib)))
+     (list appstream-glib glib))
     (synopsis "Library to help create and query binary XML blobs")
     (description "Libxmlb library takes XML source, and converts it to a
 structured binary representation with a deduplicated string table; where the
@@ -121,8 +118,8 @@ the entire document.")
 (define-public expat
   (package
     (name "expat")
-    (version "2.2.9")
-    (replacement expat-2.4.1)
+    (version "2.4.1")
+    (replacement expat/fixed)
     (source (let ((dot->underscore (lambda (c) (if (char=? #\. c) #\_ c))))
               (origin
                 (method url-fetch)
@@ -134,10 +131,22 @@ the entire document.")
                             "/expat-" version ".tar.xz")))
                 (sha256
                  (base32
-                  "1960mmgbb4cm64n1p0nz3hrs1pw03hkrfcw8prmnn4622mdrd9hy")))))
+                  "0spvyb9d3hijs4ys3x64cfmilsynl8kv6clfahv8d4lvp86js0yg")))))
     (build-system gnu-build-system)
     (arguments
-     '(#:configure-flags '("--disable-static")))
+     '(#:phases (modify-phases %standard-phases
+                  (add-after 'install 'move-static-library
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      (let ((out    (assoc-ref outputs "out"))
+                            (static (assoc-ref outputs "static")))
+                        (mkdir-p (string-append static "/lib"))
+                        (link (string-append out "/lib/libexpat.a")
+                              (string-append static "/lib/libexpat.a"))
+                        (delete-file (string-append out "/lib/libexpat.a"))
+                        (substitute* (string-append out "/lib/libexpat.la")
+                          (("old_library=.*")
+                           "old_library=''"))))))))
+    (outputs '("out" "static"))
     (home-page "https://libexpat.github.io/")
     (synopsis "Stream-oriented XML parser library written in C")
     (description
@@ -146,11 +155,10 @@ stream-oriented parser in which an application registers handlers for
 things the parser might find in the XML document (like start tags).")
     (license license:expat)))
 
-;; Replacement package to fix CVE-2013-0340.
-(define expat-2.4.1
+(define expat/fixed
   (package
     (inherit expat)
-    (version "2.4.1")
+    (version "2.4.3")
     (source (let ((dot->underscore (lambda (c) (if (char=? #\. c) #\_ c))))
               (origin
                 (method url-fetch)
@@ -162,7 +170,7 @@ things the parser might find in the XML document (like start tags).")
                             "/expat-" version ".tar.xz")))
                 (sha256
                  (base32
-                  "0spvyb9d3hijs4ys3x64cfmilsynl8kv6clfahv8d4lvp86js0yg")))))))
+                  "12kp4h40cpyqqpjqaldag0xq4ig1ljzpkzy9i2marc7blnqz3ydi")))))))
 
 (define-public libebml
   (package
@@ -191,40 +199,48 @@ hierarchical form with variable field lengths.")
 (define-public libxml2
   (package
     (name "libxml2")
-    (version "2.9.10")
+    (version "2.9.12")
     (source (origin
              (method url-fetch)
              (uri (string-append "ftp://xmlsoft.org/libxml2/libxml2-"
                                  version ".tar.gz"))
              (sha256
               (base32
-               "07xynh8hcxb2yb1fs051xrgszjvj37wnxvxgsj10rzmqzy9y3zma"))))
+               "14hxwzmf5xqppx77z7i0ni9lpzg1a84dqpf8j8l1fvy570g6imn8"))
+             (patches (search-patches "libxml2-parent-pointers.patch"
+                                      "libxml2-terminating-newline.patch"
+                                      "libxml2-xpath-recursion-limit.patch"))))
     (build-system gnu-build-system)
-    (outputs '("out" "static"))
+    (outputs '("out" "static" "doc"))
     (arguments
      `(#:phases (modify-phases %standard-phases
-                  (add-after 'install 'move-static-libs
+                  (add-after 'install 'use-other-outputs
                     (lambda* (#:key outputs #:allow-other-keys)
-                      (let ((src (string-append (assoc-ref outputs "out") "/lib"))
+                      (let ((src (assoc-ref outputs "out"))
+                            (doc (string-append (assoc-ref outputs "doc") "/share"))
                             (dst (string-append (assoc-ref outputs "static")
                                                 "/lib")))
+                        (mkdir-p doc)
                         (mkdir-p dst)
+                        (for-each (lambda (dir)
+                                    (rename-file (string-append src "/share/" dir)
+                                                 (string-append doc "/" dir)))
+                                  '("doc" "gtk-doc"))
                         (for-each (lambda (ar)
                                     (rename-file ar (string-append dst "/"
                                                                    (basename ar))))
-                                  (find-files src "\\.a$"))
+                                  (find-files (string-append src "/lib") "\\.a$"))
 
                         ;; Remove reference to the static library from the .la
                         ;; file such that Libtool does the right thing when both
                         ;; the shared and static variants are available.
-                        (substitute* (string-append src "/libxml2.la")
-                          (("^old_library='libxml2.a'") "old_library=''"))
-                        #t))))))
+                        (substitute* (string-append src "/lib/libxml2.la")
+                          (("^old_library='libxml2.a'") "old_library=''"))))))))
     (home-page "http://www.xmlsoft.org/")
     (synopsis "C parser for XML")
-    (inputs `(("xz" ,xz)))
-    (propagated-inputs `(("zlib" ,zlib))) ; libxml2.la says '-lz'.
-    (native-inputs `(("perl" ,perl)))
+    (inputs (list xz))
+    (propagated-inputs (list zlib)) ; libxml2.la says '-lz'.
+    (native-inputs (list perl))
     ;; $XML_CATALOG_FILES lists 'catalog.xml' files found in under the 'xml'
     ;; sub-directory of any given package.
     (native-search-paths (list (search-path-specification
@@ -283,9 +299,9 @@ to output XPath results with a null delimiter.")))
        (modify-phases %standard-phases
          (delete 'configure))))         ; no configure script
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (inputs
-     `(("minizip" ,minizip)))
+     (list minizip))
     (home-page "https://github.com/jmcnamara/libxlsxwriter")
     (synopsis "C library for creating Excel XLSX files")
     (description
@@ -299,8 +315,9 @@ formulas and hyperlinks to multiple worksheets in an Excel 2007+ XLSX file.")
     (name "python-libxml2")
     (source (origin
               (inherit (package-source libxml2))
-              (patches (cons (search-patch "python-libxml2-utf8.patch")
-                             (origin-patches (package-source libxml2))))))
+              (patches
+                (append (search-patches "python-libxml2-utf8.patch")
+                        (origin-patches (package-source libxml2))))))
     (build-system python-build-system)
     (outputs '("out"))
     (arguments
@@ -321,8 +338,7 @@ formulas and hyperlinks to multiple worksheets in an Excel 2007+ XLSX file.")
                  (format #f "ROOT = r'~a'" libxml2))
                 ;; For 'iconv.h'.
                 (("/opt/include")
-                 (string-append glibc "/include"))))
-            #t)))))
+                 (string-append glibc "/include")))))))))
     (inputs `(("libxml2" ,libxml2)))
     (synopsis "Python bindings for the libxml2 library")))
 
@@ -360,7 +376,7 @@ formulas and hyperlinks to multiple worksheets in an Excel 2007+ XLSX file.")
               ("zlib" ,zlib)
               ("xz" ,xz)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (description
      "Libxslt is an XSLT C library developed for the GNOME project.  It is
 based on libxml for XML parsing, tree manipulation and XPath support.")
@@ -434,9 +450,9 @@ based on libxml for XML parsing, tree manipulation and XPath support.")
                  (format #t "test suite not run~%"))
              #t)))))
     (inputs
-     `(("opensp" ,opensp)))
+     (list opensp))
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (home-page "http://openjade.sourceforge.net/")
     (synopsis "ISO/IEC 10179:1996 standard DSSSL language implementation")
     (description "OpenJade is an implementation of Document Style Semantics
@@ -462,10 +478,7 @@ MIF, SGML2SGML, and FOT.")
          "0jlsg64pmy6ka5q5gy851nnyfgjzvhyxc576bhns3vi2x5ng07mh"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-graph" ,perl-graph)
-       ("perl-parse-yapp" ,perl-parse-yapp)
-       ("perl-xml-parser" ,perl-xml-parser)
-       ("perl-xml-writer" ,perl-xml-writer)))
+     (list perl-graph perl-parse-yapp perl-xml-parser perl-xml-writer))
     (home-page "https://metacpan.org/release/Graph-ReadWrite")
     (synopsis "Modules for reading and writing directed graphs")
     (description "This is a collection of perl classes for reading and writing
@@ -501,18 +514,16 @@ the @code{Graph} class and write it out in a specific file format.")
              #t)))))
     (native-inputs
      ;; TODO package: perl-datetime-format-atom
-     `(("perl-html-tagset" ,perl-html-tagset)
-       ("perl-module-build-tiny" ,perl-module-build-tiny)
-       ("perl-module-install" ,perl-module-install)))
+     (list perl-html-tagset perl-module-build-tiny perl-module-install))
     (propagated-inputs
-     `(("perl-class-data-inheritable" ,perl-class-data-inheritable)
-       ("perl-datetime" ,perl-datetime)
-       ("perl-datetime-timezone" ,perl-datetime-timezone)
-       ("perl-digest-sha1" ,perl-digest-sha1)
-       ("perl-libwww" ,perl-libwww)
-       ("perl-uri" ,perl-uri)
-       ("perl-xml-libxml" ,perl-xml-libxml)
-       ("perl-xml-xpath" ,perl-xml-xpath)))
+     (list perl-class-data-inheritable
+           perl-datetime
+           perl-datetime-timezone
+           perl-digest-sha1
+           perl-libwww
+           perl-uri
+           perl-xml-libxml
+           perl-xml-xpath))
     (home-page "https://metacpan.org/release/XML-Atom")
     (synopsis "Atom feed and API implementation")
     (description
@@ -533,10 +544,9 @@ the @code{Graph} class and write it out in a specific file format.")
                 "0l5xmw2hd95ypppz3lyvp4sn02ccsikzjwacli3ydxfdz1bbh4d7"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (propagated-inputs
-     `(("perl-test-differences" ,perl-test-differences)
-       ("perl-xml-tokeparser" ,perl-xml-tokeparser)))
+     (list perl-test-differences perl-xml-tokeparser))
     (home-page "https://metacpan.org/release/XML-Descent")
     (synopsis "Recursive descent XML parsing")
     (description
@@ -565,7 +575,7 @@ parsers for it.  @code{XML::Descent} allows such parsers to be created.")
                  (let ((expat (assoc-ref %build-inputs "expat")))
                    (list (string-append "EXPATLIBPATH=" expat "/lib")
                          (string-append "EXPATINCPATH=" expat "/include")))))
-    (inputs `(("expat" ,expat)))
+    (inputs (list expat))
     (license license:perl-license)
     (synopsis "Perl bindings to the Expat XML parsing library")
     (description
@@ -591,7 +601,7 @@ given at XML::Parser creation time.")
                (base32
                 "1hnpwb3lh6cbgwvjjgqzcp6jm4mp612qn6ili38adc9nhkwv8fc5"))))
     (build-system perl-build-system)
-    (propagated-inputs `(("perl-xml-parser" ,perl-xml-parser)))
+    (propagated-inputs (list perl-xml-parser))
     (home-page "https://metacpan.org/release/XML-TokeParser")
     (synopsis "Simplified interface to XML::Parser")
     (description
@@ -616,7 +626,7 @@ corresponding to an @code{XML::Parser} event.")
                "1jy9af0ljyzj7wakqli0437zb2vrbplqj4xhab7bfj2xgfdhawa5"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-xml-parser" ,perl-xml-parser)))
+     (list perl-xml-parser))
     (license license:perl-license)
     (synopsis "Perl modules for working with XML")
     (description
@@ -640,10 +650,9 @@ combination with @code{XML::Parser}, PerlSAX, @code{XML::DOM},
          "1ks69xymv6zkj7hvaymjvb78ch81abri7kg4zrwxhdfsqb8a9g7h"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-xml-namespacesupport" ,perl-xml-namespacesupport)
-       ("perl-xml-sax" ,perl-xml-sax)))
+     (list perl-xml-namespacesupport perl-xml-sax))
     (inputs
-     `(("libxml2" ,libxml2)))
+     (list libxml2))
     (home-page "https://metacpan.org/release/XML-LibXML")
     (synopsis "Perl interface to libxml2")
     (description "This module implements a Perl interface to the libxml2
@@ -665,8 +674,7 @@ XML parser and the high performance DOM implementation.")
                 "19k50d80i9dipsl6ln0f4awv9wmdg0xm3d16z8mngmvh9c8ci66d"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-file-slurp-tiny" ,perl-file-slurp-tiny)
-       ("perl-xml-libxml" ,perl-xml-libxml)))
+     (list perl-file-slurp-tiny perl-xml-libxml))
     (home-page "https://metacpan.org/release/XML-LibXML-Simple")
     (synopsis "XML::LibXML based XML::Simple clone")
     (description
@@ -688,9 +696,9 @@ XML parser and the high performance DOM implementation.")
          "0wyl8klgr65j8y8fzgwz9jlvfjwvxazna8j3dg9gksd2v973fpia"))))
     (build-system perl-build-system)
     (inputs
-     `(("libxslt" ,libxslt)))
+     (list libxslt))
     (propagated-inputs
-     `(("perl-xml-libxml" ,perl-xml-libxml)))
+     (list perl-xml-libxml))
     (home-page "https://metacpan.org/release/XML-LibXSLT")
     (synopsis "Perl bindings to GNOME libxslt library")
     (description "This Perl module is an interface to the GNOME project's
@@ -731,19 +739,13 @@ checks.")
                 "0klb8ghd405pdkmn25lp3i4j2lfydz8w581sk51p3zy788s0c9yk"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-manifest" ,perl-test-manifest)
-       ("perl-test-differences" ,perl-test-differences)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+     (list perl-module-build perl-test-manifest perl-test-differences
+           perl-test-pod perl-test-pod-coverage))
     ;; XXX: The test which uses this modules does not run, even when it is included
     ;; it is ignored. ("perl-test-trailingspace" ,perl-test-trailingspace)
     (inputs
-     `(("perl-datetime" ,perl-datetime)
-       ("perl-datetime-format-mail" ,perl-datetime-format-mail)
-       ("perl-datetime-format-w3cdtf" ,perl-datetime-format-w3cdtf)
-       ("perl-html-parser" ,perl-html-parser)
-       ("perl-xml-parser" ,perl-xml-parser)))
+     (list perl-datetime perl-datetime-format-mail
+           perl-datetime-format-w3cdtf perl-html-parser perl-xml-parser))
     (home-page "https://metacpan.org/release/XML-RSS")
     (synopsis "Creates and updates RSS files")
     (description
@@ -766,8 +768,7 @@ that allow you to generate HTML from an RSS, convert between 0.9, 0.91, and
         (base32 "0am13vnv8qsjafr5ljakwnkhlwpk15sga02z8mxsg9is0j3w61j5"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-xml-namespacesupport" ,perl-xml-namespacesupport)
-       ("perl-xml-sax-base" ,perl-xml-sax-base)))
+     (list perl-xml-namespacesupport perl-xml-sax-base))
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (add-before
@@ -823,8 +824,7 @@ callback.")
                "1y6vh328zrh085d40852v4ij2l4g0amxykswxd1nfhd2pspds7sk"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-xml-parser" ,perl-xml-parser)
-       ("perl-xml-sax" ,perl-xml-sax)))
+     (list perl-xml-parser perl-xml-sax))
     (license license:perl-license)
     (synopsis "Perl module for easy reading/writing of XML files")
     (description
@@ -847,7 +847,7 @@ parser modules).")
                "0m7wj00a2kik7wj0azhs1zagwazqh3hlz4255n75q21nc04r06fz"))))
     (build-system perl-build-system)
     (inputs
-     `(("perl-xml-parser" ,perl-xml-parser)))
+     (list perl-xml-parser))
     (license license:perl-license)
     (synopsis "Perl regular expressions for XML tokens")
     (description
@@ -870,10 +870,7 @@ EntityRef, CharRef, Reference, Name, NmToken, and AttValue.")
                "0phpkc4li43m2g44hdcvyxzy9pymqwlqhh5hwp2xc0cv8l5lp8lb"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-libwww" ,perl-libwww)
-       ("perl-libxml" ,perl-libxml)
-       ("perl-xml-parser" ,perl-xml-parser)
-       ("perl-xml-regexp" ,perl-xml-regexp)))
+     (list perl-libwww perl-libxml perl-xml-parser perl-xml-regexp))
     (license license:perl-license)
     (synopsis
      "Perl module for building DOM Level 1 compliant document structures")
@@ -898,8 +895,7 @@ that conforms to the API of the Document Object Model.")
                 "1drzwziwi96rfkh48qpw4l225mcbk8ppl2157nj92cslcpwwdk75"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-log-report" ,perl-log-report)
-       ("perl-test-deep" ,perl-test-deep)))
+     (list perl-log-report perl-test-deep))
     (home-page "https://metacpan.org/release/XML-Compile-Tester")
     (synopsis "XML::Compile related regression testing")
     (description
@@ -921,12 +917,12 @@ This module provide functions which simplify writing tests for
                 "0psr5pwsk2biz2bfkigmx04v2rfhs6ybwcfmcrrg7gvh9bpp222b"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-log-report" ,perl-log-report)
-       ("perl-xml-compile-tester" ,perl-xml-compile-tester)
-       ("perl-xml-libxml" ,perl-xml-libxml)
-       ("perl-scalar-list-utils" ,perl-scalar-list-utils)
-       ("perl-test-deep" ,perl-test-deep)
-       ("perl-types-serialiser" ,perl-types-serialiser)))
+     (list perl-log-report
+           perl-xml-compile-tester
+           perl-xml-libxml
+           perl-scalar-list-utils
+           perl-test-deep
+           perl-types-serialiser))
     (home-page "https://metacpan.org/release/XML-Compile")
     (synopsis "Compilation-based XML processing")
     (description
@@ -948,10 +944,8 @@ a schema.")
                 "181qf1s7ymgi7saph3cf9p6dbxkxyh1ja23na4dchhi8v5mi66sr"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-log-report" ,perl-log-report)
-       ("perl-xml-compile" ,perl-xml-compile)
-       ("perl-xml-compile-tester" ,perl-xml-compile-tester)
-       ("perl-xml-libxml-simple" ,perl-xml-libxml-simple)))
+     (list perl-log-report perl-xml-compile perl-xml-compile-tester
+           perl-xml-libxml-simple))
     (home-page "https://metacpan.org/release/XML-Compile-Cache")
     (synopsis "Cache compiled XML translators")
     (description
@@ -971,12 +965,12 @@ a schema.")
                 "0pkcph562l2ij7rlwlvm58v6y062qsbydfpaz2qnph2ixqy0xfd1"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-file-slurp-tiny" ,perl-file-slurp-tiny)
-       ("perl-libwww" ,perl-libwww)
-       ("perl-log-report" ,perl-log-report)
-       ("perl-xml-compile" ,perl-xml-compile)
-       ("perl-xml-compile-cache" ,perl-xml-compile-cache)
-       ("perl-xml-compile-tester" ,perl-xml-compile-tester)))
+     (list perl-file-slurp-tiny
+           perl-libwww
+           perl-log-report
+           perl-xml-compile
+           perl-xml-compile-cache
+           perl-xml-compile-tester))
     (home-page "https://metacpan.org/release/XML-Compile-SOAP")
     (synopsis "Base-class for SOAP implementations")
     (description
@@ -999,10 +993,8 @@ used.")
                 "09ayl442hzvn97q4ghn5rz4r82dm9w3l69hixhb29h9xq9ysi7ba"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-log-report" ,perl-log-report)
-       ("perl-xml-compile" ,perl-xml-compile)
-       ("perl-xml-compile-cache" ,perl-xml-compile-cache)
-       ("perl-xml-compile-soap" ,perl-xml-compile-soap)))
+     (list perl-log-report perl-xml-compile perl-xml-compile-cache
+           perl-xml-compile-soap))
     (home-page "https://metacpan.org/release/XML-Compile-WSDL11")
     (synopsis "Create SOAP messages defined by WSDL 1.1")
     (description
@@ -1025,25 +1017,23 @@ server, collect the answer, and finally decoding the XML to Perl.")
                 "04frqhikmyq0i9ldraisbvppyjhqg6gz83l2rqpmp4f2h9n9k2lw"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-uri" ,perl-uri)
-       ("perl-class-data-inheritable" ,perl-class-data-inheritable)))
+     (list perl-module-build perl-uri perl-class-data-inheritable))
     (propagated-inputs
-     `(("perl-class-errorhandler" ,perl-class-errorhandler)
-       ("perl-datetime" ,perl-datetime)
-       ("perl-datetime-format-flexible" ,perl-datetime-format-flexible)
-       ("perl-datetime-format-iso8601" ,perl-datetime-format-iso8601)
-       ("perl-datetime-format-mail" ,perl-datetime-format-mail)
-       ("perl-datetime-format-natural" ,perl-datetime-format-natural)
-       ("perl-datetime-format-w3cdtf" ,perl-datetime-format-w3cdtf)
-       ("perl-feed-find" ,perl-feed-find)
-       ("perl-html-parser" ,perl-html-parser)
-       ("perl-libwww-perl" ,perl-libwww)
-       ("perl-module-pluggable" ,perl-module-pluggable)
-       ("perl-uri-fetch" ,perl-uri-fetch)
-       ("perl-xml-atom" ,perl-xml-atom)
-       ("perl-xml-libxml" ,perl-xml-libxml)
-       ("perl-xml-rss" ,perl-xml-rss)))
+     (list perl-class-errorhandler
+           perl-datetime
+           perl-datetime-format-flexible
+           perl-datetime-format-iso8601
+           perl-datetime-format-mail
+           perl-datetime-format-natural
+           perl-datetime-format-w3cdtf
+           perl-feed-find
+           perl-html-parser
+           perl-libwww
+           perl-module-pluggable
+           perl-uri-fetch
+           perl-xml-atom
+           perl-xml-libxml
+           perl-xml-rss))
     (home-page "https://metacpan.org/release/XML-Feed")
     (synopsis "XML Syndication Feed Support")
     (description "@code{XML::Feed} is a syndication feed parser for both RSS and
@@ -1065,9 +1055,9 @@ RSS 0.91, RSS 1.0, RSS 2.0, Atom")
                 "03yxj7w5a43ibbpiqsvb3lswj2b71dydsx4rs2fw0p8n0l3i3j8w"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-path-tiny" ,perl-path-tiny)))
+     (list perl-path-tiny))
     (propagated-inputs
-     `(("perl-xml-parser" ,perl-xml-parser)))
+     (list perl-xml-parser))
     (home-page "https://metacpan.org/release/XML-XPath")
     (synopsis "Parse and evaluate XPath statements")
     (description
@@ -1092,7 +1082,7 @@ the form of functions.")
      `(#:configure-flags '("-DBUILD_SHARED_LIBS=ON")
        #:tests? #f))                    ; no tests
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://pugixml.org")
     (synopsis "Light-weight, simple and fast XML parser for C++ with XPath support")
     (description
@@ -1152,11 +1142,11 @@ code for classes that correspond to data structures defined by XMLSchema.")
                                                          "util-linux")
                                               "/bin/getopt"))))
     (native-inputs
-     `(("util-linux" ,util-linux)))
+     (list util-linux))
     (inputs
-     `(("util-linux" ,util-linux)                 ; for 'getopt'
-       ("libxml2" ,libxml2)                       ; for 'xmllint'
-       ("libxslt" ,libxslt)))                     ; for 'xsltproc'
+     (list util-linux ; for 'getopt'
+           libxml2 ; for 'xmllint'
+           libxslt))                     ; for 'xsltproc'
     (home-page "http://cyberelk.net/tim/software/xmlto/")
     (synopsis "Front-end to an XSL toolchain")
     (description
@@ -1178,14 +1168,11 @@ XSL-T processor.  It also performs any necessary post-processing.")
                 "0hy0nwz57n9r5wwab9xa66gzwlwvzs54nhlfn3jh8q13acl710z3"))))
     (build-system gnu-build-system)
     (propagated-inputs                  ; according to xmlsec1.pc
-     `(("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)))
+     (list libxml2 libxslt))
     (inputs
-     `(("gnutls" ,gnutls)
-       ("libgcrypt" ,libgcrypt)
-       ("libltdl" ,libltdl)))
+     (list gnutls libgcrypt libltdl))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.aleksey.com/xmlsec/")
     (synopsis "XML Security Library")
     (description
@@ -1222,7 +1209,7 @@ Libxml2).")
 (define-public minixml
   (package
     (name "minixml")
-    (version "3.2")
+    (version "3.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/michaelrsweet/mxml/"
@@ -1230,7 +1217,7 @@ Libxml2).")
                                   "/mxml-" version ".tar.gz"))
               (sha256
                (base32
-                "0x698ayv00vrjg0yfm20lakpgl7m02x1fk2n09wygwk4973gd55q"))))
+                "1n1xzvhnsjsgsqaq1rg9zilwf0b2rydsadbxzy64z3lydwv7dybw"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
@@ -1368,8 +1355,7 @@ C++ programming language.")
              (symlink "xml" (string-append bin "/xmlstarlet"))
              #t))))))
    (inputs
-    `(("libxslt" ,libxslt)
-      ("libxml2" ,libxml2)))
+    (list libxslt libxml2))
    (home-page "http://xmlstar.sourceforge.net/")
    (synopsis "Command line XML toolkit")
    (description "XMLStarlet is a set of command line utilities which can be
@@ -1526,7 +1512,7 @@ spreadsheet.")
            '()
            '(#:configure-flags '("--disable-sse2")))))
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (home-page "https://xerces.apache.org/xerces-c/")
     (synopsis "Validating XML parser library for C++")
     (description "Xerces-C++ is a validating XML parser written in a portable
@@ -1550,10 +1536,7 @@ SAX2 APIs.")
        (sha256
         (base32 "0jr6ggzhd8aakdvppcl8scy9j9jafg82zbzr4ih996sz8lrj90fn"))))
     (native-inputs
-     `(("expat" ,expat)
-       ("make" ,gnu-make)
-       ("minizip" ,minizip)
-       ("which" ,which)))
+     (list expat gnu-make minizip which))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -1590,9 +1573,14 @@ Excel(TM) since version 2007.")
        #:test-target "test"
        #:phases
        (modify-phases %standard-phases
-         (replace 'install (install-jars "jar")))))
+         (replace 'install (install-jars "jar"))
+         (add-before 'check 'disable-failing-test
+           (lambda _
+             ;; This test sometimes fails with an out of memory exception
+             (delete-file
+              "test/src/org/simpleframework/xml/core/NoAnnotationsRequiredTest.java"))))))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "http://simple.sourceforge.net/")
     (synopsis "XML serialization framework for Java")
     (description "Simple is a high performance XML serialization and
@@ -1663,7 +1651,7 @@ by @code{Tree::XPathEngine}.")
          "0p5785c1dsk6kdp505vapb5h54k8krrz8699hpgm9igf7dni5llg"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-xml-sax-base" ,perl-xml-sax-base)))
+     (list perl-xml-sax-base))
     (home-page "https://metacpan.org/release/XML-Filter-BufferText")
     (synopsis "Filter to put all characters() in one event")
     (description "This is a very simple filter.  One common cause of
@@ -1687,10 +1675,8 @@ characters into a single event.")
                 "1w1cd1ybxdvhmnxdlkywi3x5ka3g4md42kyynksjc09vyizd0q9x"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-libxml" ,perl-libxml)
-       ("perl-xml-filter-buffertext" ,perl-xml-filter-buffertext)
-       ("perl-xml-namespacesupport" ,perl-xml-namespacesupport)
-       ("perl-xml-sax-base" ,perl-xml-sax-base)))
+     (list perl-libxml perl-xml-filter-buffertext
+           perl-xml-namespacesupport perl-xml-sax-base))
     (home-page "https://metacpan.org/release/XML-SAX-Writer")
     (synopsis "SAX2 XML Writer")
     (description
@@ -1712,7 +1698,7 @@ characters into a single event.")
          "11d45a1sz862va9rry3p2m77pwvq3kpsvgwhc5ramh9mbszbnk77"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-libxml" ,perl-libxml)))
+     (list perl-libxml))
     (home-page "https://metacpan.org/release/XML-Handler-YAWriter")
     (synopsis "Yet another Perl SAX XML Writer")
     (description "YAWriter implements Yet Another @code{XML::Handler::Writer}.
@@ -1732,22 +1718,22 @@ It provides a flexible escaping technique and pretty printing.")
                 "1bc0hrz4jp6199hi29sdxmb9gyy45whla9hd19yqfasgq8k5ixzy"))))
     (build-system perl-build-system)
     (inputs
-     `(("expat" ,expat)))
+     (list expat))
     (propagated-inputs
-     `(("perl-html-tidy" ,perl-html-tidy)
-       ("perl-html-tree" ,perl-html-tree)
-       ("perl-io-captureoutput" ,perl-io-captureoutput)
-       ("perl-io-string" ,perl-io-string)
-       ("perl-io-stringy" ,perl-io-stringy)
-       ("perl-libxml" ,perl-libxml)
-       ("perl-xml-filter-buffertext" ,perl-xml-filter-buffertext)
-       ("perl-xml-handler-yawriter" ,perl-xml-handler-yawriter)
-       ("perl-xml-parser" ,perl-xml-parser)
-       ("perl-xml-sax-writer" ,perl-xml-sax-writer)
-       ("perl-xml-simple" ,perl-xml-simple)
-       ("perl-xml-xpathengine" ,perl-xml-xpathengine)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-tree-xpathengine" ,perl-tree-xpathengine)))
+     (list perl-html-tidy
+           perl-html-tree
+           perl-io-captureoutput
+           perl-io-string
+           perl-io-stringy
+           perl-libxml
+           perl-xml-filter-buffertext
+           perl-xml-handler-yawriter
+           perl-xml-parser
+           perl-xml-sax-writer
+           perl-xml-simple
+           perl-xml-xpathengine
+           perl-test-pod
+           perl-tree-xpathengine))
     (home-page "https://metacpan.org/release/XML-Twig")
     (synopsis "Perl module for processing huge XML documents in tree mode")
     (description "@code{XML::Twig} is an XML transformation module.  Its
@@ -1817,7 +1803,7 @@ the Xerces-J XML parser and Xalan-J XSLT processor and specifies these APIs:
      `(#:jar-name (string-append "xml-resolver.jar")
        #:tests? #f)); no tests
     (inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "http://xerces.apache.org/xml-commons/")
     (synopsis "Catalog-based entity and URI resolution")
     (description "The resolver class implements the full semantics of OASIS Technical
@@ -1877,9 +1863,7 @@ with XPath too.")
     (inherit java-jaxen-bootstrap)
     (name "java-jaxen")
     (inputs
-     `(("java-jdom" ,java-jdom)
-       ("java-xom" ,java-xom)
-       ("java-dom4j" ,java-dom4j)))))
+     (list java-jdom java-xom java-dom4j))))
 
 (define-public java-xom
   (package
@@ -1917,11 +1901,8 @@ with XPath too.")
              (delete-file "src/nu/xom/tools/XHTMLJavaDoc.java")
              #t)))))
     (inputs
-     `(("java-jdom" ,java-jdom)
-       ("java-junit" ,java-junit)
-       ("java-classpathx-servletapi" ,java-classpathx-servletapi)
-       ("java-jaxen-bootstrap" ,java-jaxen-bootstrap)
-       ("java-xerces" ,java-xerces)))
+     (list java-jdom java-junit java-classpathx-servletapi
+           java-jaxen-bootstrap java-xerces))
     (home-page "https://xom.nu/")
     (synopsis "XML Object Model")
     (description "XOM is a new XML Object Model for processing XML with Java 
@@ -1947,7 +1928,7 @@ that strives for correctness and simplicity.")
        #:jar-name "xsdlib.jar"
        #:jdk ,icedtea-8))
     (inputs
-     `(("java-xerces" ,java-xerces)))
+     (list java-xerces))
     (home-page (string-append "https://web.archive.org/web/20161127144537/"
                               "https://msv.java.net//"))
     (synopsis "Sun Multi-Schema Validator")
@@ -2139,8 +2120,7 @@ public boolean removeAttributeByName(String name, String name2) {\n
        ("java-xpp3" ,java-xpp3)
        ("java-xsdlib" ,java-xsdlib)))
     (native-inputs
-     `(("java-testng" ,java-testng)
-       ("java-xerces" ,java-xerces)))
+     (list java-testng java-xerces))
     (home-page "https://dom4j.github.io/")
     (synopsis "Flexible XML framework for Java")
     (description "Dom4j is a flexible XML framework for Java.  DOM4J works
@@ -2181,9 +2161,9 @@ low memory footprint.")
              (copy-recursively "src/main/resources" "build/classes")
              #t)))))
     (inputs
-     `(("java-xpp3" ,java-xpp3)))
+     (list java-xpp3))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "http://kxml.org")
     (synopsis "XML pull parser")
     (description "kXML is a small XML pull parser, specially designed for
@@ -2246,7 +2226,7 @@ and from a Java application.  It provides a standard pull parser interface.")
                             "**/BadgerFishDOMTest.java"
                             "**/MappedDOMTest.java")))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://github.com/codehaus/jettison")
     (synopsis "StAX implementation for JSON")
     (description "Jettison is a Java library for converting XML to JSON and
@@ -2350,9 +2330,9 @@ and back again.")
              (copy-recursively "src/main/resources" "build/classes")
              #t)))))
     (propagated-inputs
-     `(("java-xmlpull-api-v1" ,java-xmlpull-api-v1)))
+     (list java-xmlpull-api-v1))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://github.com/x-stream/mxparser")
     (synopsis "Streaming pull XML parser forked from @code{java-xpp3}")
     (description "Xml Pull Parser (in short XPP) is a streaming pull XML
@@ -2380,10 +2360,10 @@ changes of the Plexus fork. It is an implementation of the XMLPULL V1 API
                "18zwbj6i2hpcn5riiyp8i6rml0sfv60dd7phw1x8g4r4lj2bbxf9"))))
     (build-system gnu-build-system)
     (inputs
-     `(("curl" ,curl)))
+     (list curl))
     (native-inputs
-     `(;; For tools, if ever needed.
-       ("perl" ,perl)))
+     (list ;; For tools, if ever needed.
+           perl))
     (arguments
      `(#:make-flags ; Add $libdir to the RUNPATH of all the executables.
        (list (string-append "LDFLAGS_PERSONAL=-Wl,-rpath=" %output "/lib"))
@@ -2495,15 +2475,18 @@ The central program included in this package is @code{onsgmls}, which replaces
 (define-public python-elementpath
   (package
     (name "python-elementpath")
-    (version "1.4.0")
+    (version "2.0.3")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "elementpath" version))
        (sha256
         (base32
-         "15h7d41v48q31hzjay7qzixdv531hnga3h35hksk7x52pgqcrkz7"))))
+         "1kxx573ywqfh6j6aih2i6hhsya6kz79qq4bgz6yskwk6b18jyr8z"))))
     (build-system python-build-system)
+    ;; The test suite is not run, to avoid a dependency cycle with
+    ;; python-xmlschema.
+    (arguments `(#:tests? #f))
     (home-page
      "https://github.com/sissaschool/elementpath")
     (synopsis
@@ -2520,13 +2503,20 @@ because lxml.etree already has its own implementation of XPath 1.0.")
 (define-public python-lxml
   (package
     (name "python-lxml")
-    (version "4.4.2")
+    (version "4.6.3")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "lxml" version))
        (sha256
-        (base32 "01nvb5j8vs9nk4z5s3250b1m22b4d08kffa36if3g1mdygdrvxpg"))))
+        (base32 "0s14r1w2x9sdlcsw8mxiqgw4rz5zs5lpqpxrfyn4a1mkndqqbdrr"))
+       ;; Adapt a test to libxml2 2.9.12, taken from this commit:
+       ;; https://github.com/lxml/lxml/commit/852ed1092bd80b6b9a51db24371047e
+       (modules '((guix build utils)))
+       (snippet
+        '(substitute* "src/lxml/tests/test_etree.py"
+             (("self\\.assertEqual\\(\\{'hha': None\\}, el\\.nsmap\\)")
+              "self.assertEqual({}, el.nsmap)")))))
     (build-system python-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
@@ -2534,8 +2524,7 @@ because lxml.etree already has its own implementation of XPath 1.0.")
                     (lambda _
                       (invoke "make" "test"))))))
     (inputs
-     `(("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)))
+     (list libxml2 libxslt))
     (home-page "https://lxml.de/")
     (synopsis "Python XML processing library")
     (description
@@ -2549,7 +2538,7 @@ libxml2 and libxslt.")
 (define-public python-xmlschema
   (package
     (name "python-xmlschema")
-    (version "1.1.2")
+    (version "1.2.5")
     (source (origin
               ;; Unit tests are not distributed with the PyPI archive.
               (method git-fetch)
@@ -2559,25 +2548,24 @@ libxml2 and libxslt.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "03bz5mp45y4shmlc1gxq1h69vjx60z1acg9cy4kq7fczgx8qg9jw"))))
+                "0rsa75x86gdjalvy4riq7613szb616hff80crx006chyppzdkxmq"))))
     (build-system python-build-system)
     (arguments
      '(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda* (#:key (tests? #t) #:allow-other-keys)
+           (lambda* (#:key tests? #:allow-other-keys)
              (if tests?
-                 (begin
-                   (setenv "PYTHONPATH"
-                           (string-append "./build/lib:"
-                                          (getenv "PYTHONPATH")))
-                   (invoke "python" "-m" "unittest" "-v"))
-                 (format #t "test suite not run~%"))
-             #t)))))
+                 ;; Disable test_export_remote__issue_187, which is known to
+                 ;; fail (see:
+                 ;; https://github.com/sissaschool/xmlschema/issues/206).
+                 (invoke "python" "-m" "unittest" "-v"
+                         "-k" "not test_export_remote__issue_187")
+                 (format #t "test suite not run~%")))))))
     (native-inputs
-     `(("python-lxml" ,python-lxml)))   ;for tests
+     (list python-lxml))   ;for tests
     (propagated-inputs
-     `(("python-elementpath" ,python-elementpath)))
+     (list python-elementpath))
     (home-page "https://github.com/sissaschool/xmlschema")
     (synopsis "XML Schema validator and data conversion library")
     (description
@@ -2601,8 +2589,7 @@ XML data to JSON and other formats.")
          "08cadlb9vsb4pmzc99lz3a2lx6qcfazyvgk10pcqijvyxlwcdn2h"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-nose" ,python-nose)))
+     (list python-coverage python-nose))
     (home-page "https://github.com/martinblech/xmltodict")
     (synopsis "Work with XML like you are working with JSON")
     (description "This package provides a Python library to convert XML to
diff --git a/gnu/packages/xnee.scm b/gnu/packages/xnee.scm
index 5cd20cbef1..26c33c754f 100644
--- a/gnu/packages/xnee.scm
+++ b/gnu/packages/xnee.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -38,15 +38,17 @@
               (base32
                "04n2lac0vgpv8zsn7nmb50hf3qb56pmj90dmwnivg09gyrf1x92j"))))
     (build-system gnu-build-system)
+    (arguments
+     '(#:configure-flags '("CFLAGS=-O2 -g -fcommon")))
     (inputs
-     `(("gtk+" ,gtk+-2)
-       ("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxi" ,libxi)
-       ("libxtst" ,libxtst)
-       ("xorgproto" ,xorgproto)))
+     (list gtk+-2
+           libx11
+           libxext
+           libxi
+           libxtst
+           xorgproto))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.gnu.org/software/xnee/")
     (synopsis "Record, replay and distribute user actions under X11")
     (description
diff --git a/gnu/packages/xorg.scm b/gnu/packages/xorg.scm
index 46cece7073..02b5f58e72 100644
--- a/gnu/packages/xorg.scm
+++ b/gnu/packages/xorg.scm
@@ -2,11 +2,11 @@
 ;;; Copyright © 2013, 2014 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2014, 2015, 2017, 2018, 2020 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2014, 2015 Eric Bavier <bavier@member.fsf.org>
-;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Eric Dvorsak <eric@dvorsak.fr>
 ;;; Copyright © 2016 Mathieu Lirzin <mthl@gnu.org>
 ;;; Copyright © 2015 Cyrill Schenkel <cyrill.schenkel@gmail.com>
-;;; Copyright © 2016, 2017, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Nikita <nikita@n0.is>
 ;;; Copyright © 2016 Alex Kost <alezost@gmail.com>
 ;;; Copyright © 2016 David Craven <david@craven.ch>
@@ -16,7 +16,7 @@
 ;;; Copyright © 2017, 2020 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Kei Kebreau <kkebreau@posteo.net>
-;;; Copyright © 2018, 2020 Oleg Pykhalov <go.wigust@gmail.com>
+;;; Copyright © 2018, 2020, 2022 Oleg Pykhalov <go.wigust@gmail.com>
 ;;; Copyright © 2018 Benjamin Slade <slade@jnanam.net>
 ;;; Copyright © 2019 nee <nee@cock.li>
 ;;; Copyright © 2019 Yoshinori Arai <kumagusu08@gmail.com>
@@ -24,14 +24,16 @@
 ;;; Copyright © 2020 Liliana Marie Prikler <liliana.prikler@gmail.com>
 ;;; Copyright © 2020 Florian Pelz <pelzflorian@pelzflorian.de>
 ;;; Copyright © 2020, 2021 Michael Rohleder <mike@rohleder.de>
-;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2020 Jean-Baptiste Note <jean-baptiste.note@m4x.org>
 ;;; Copyright © 2021 Matthew James Kraai <kraai@ftbfs.org>
 ;;; Copyright © 2021 Nicolò Balzarotti <nicolo@nixo.xyz>
 ;;; Copyright © 2021 Matthew James Kraai <kraai@ftbfs.org>
 ;;; Copyright © 2021 Brice Waegeneire <brice@waegenei.re>
+;;; Copyright © 2021 Matthew James Kraai <kraai@ftbfs.org>
 ;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;; Copyright © 2021 qblade <qblade@protonmail.com>
+;;; Copyright © 2021 Lu Hui <luhux76@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -49,11 +51,14 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages xorg)
+  #:use-module (guix gexp)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
+  #:use-module (guix build-system copy)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build-system meson)
   #:use-module (guix build-system perl)
   #:use-module (guix build-system python)
   #:use-module (guix utils)
@@ -67,6 +72,7 @@
   #:use-module (gnu packages compression)
   #:use-module (gnu packages emacs)
   #:use-module (gnu packages flex)
+  #:use-module (gnu packages fonts)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages gettext)
@@ -85,6 +91,7 @@
   #:use-module (gnu packages llvm)
   #:use-module (gnu packages m4)
   #:use-module (gnu packages ncurses)
+  #:use-module (gnu packages onc-rpc)
   #:use-module (gnu packages pciutils)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages perl-check)
@@ -102,6 +109,16 @@
 
 
 
+;; When cross-compiling certain packages, "--disable-malloc0returnsnull"
+;; needs to be passed.  Otherwise, the configure script will try to run a
+;; binary for the host on the build machine.
+(define (malloc0-flags)
+  (if (%current-target-system)
+      ;; At least on glibc-based systems, malloc(0) evaluates to a non-NULL
+      ;; pointer (except in out-of-memory situations).  On other systems,
+      ;; --enable-malloc0returnsnull might be required instead.
+      '("--disable-malloc0returnsnull")
+      '()))
 
 ;; packages without propagated input
 ;; (rationale for this separation: The packages in PROPAGATED_INPUTS need to
@@ -138,31 +155,29 @@
        (base32 "00m7l90ws72k1qm101sd2rx92ckd50cszyng5d4dd77jncbf9lmq"))))
     (build-system gnu-build-system)
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-      `(("xorg-cf-files" ,xorg-cf-files)
-        ("xorgproto" ,xorgproto)))
+     (list xorg-cf-files xorgproto))
     (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'install 'install-data
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let ((cf-files (assoc-ref inputs "xorg-cf-files"))
-                   (out (assoc-ref outputs "out"))
-                   (unpack (assoc-ref %standard-phases 'unpack))
-                   (patch-source-shebangs
-                    (assoc-ref %standard-phases 'patch-source-shebangs)))
-               (mkdir "xorg-cf-files")
-               (with-directory-excursion "xorg-cf-files"
-                 (apply unpack (list #:source cf-files))
-                 (apply patch-source-shebangs (list #:source cf-files))
-                 (substitute* '("mingw.cf" "Imake.tmpl" "nto.cf" "os2.cf"
-                                "linux.cf" "Amoeba.cf" "cygwin.cf")
-                   (("/bin/sh") (which "bash")))
-                 (invoke "./configure"
-                         (string-append "SHELL=" (which "bash"))
-                         (string-append "--prefix=" out))
-                 (invoke "make" "install"))))))))
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'install 'install-data
+                 (lambda* (#:key inputs outputs #:allow-other-keys)
+                   (let ((out (assoc-ref outputs "out"))
+                         (unpack (assoc-ref %standard-phases 'unpack))
+                         (patch-source-shebangs
+                          (assoc-ref %standard-phases 'patch-source-shebangs)))
+                     (mkdir "xorg-cf-files")
+                     (with-directory-excursion "xorg-cf-files"
+                       (unpack #:source #$xorg-cf-files)
+                       (patch-source-shebangs #:source #$xorg-cf-files)
+                       (substitute* '("mingw.cf" "Imake.tmpl" "nto.cf" "os2.cf"
+                                      "linux.cf" "Amoeba.cf" "cygwin.cf")
+                         (("/bin/sh") (which "bash")))
+                       (invoke "./configure"
+                               (string-append "SHELL=" (which "bash"))
+                               (string-append "--prefix=" out))
+                       (invoke "make" "install"))))))))
     (home-page "https://www.x.org/")
     (synopsis "Source code configuration and build system")
     (description
@@ -189,9 +204,9 @@ autotools system.")
                 "0pdngiy8zdhsiqx2am75yfcl36l7kd7d7nl0rss8shcdvsqgmx29"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("xorgproto" ,xorgproto)))
+     (list xorgproto))
     (home-page "https://www.x.org/")
     (synopsis "Symlink directory into tree")
     (description "Create a shadow directory of symbolic links to another
@@ -214,9 +229,9 @@ directory tree.")
             "18hiscgljrz10zjcws25bis32nyrg3hzgmiq6scrh7izqmgz0kab"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libxfont" ,libxfont2)))
+      (list libxfont2))
     (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Convert X font from BDF to PCF")
     (description
@@ -228,18 +243,18 @@ which can be read by any architecture.")
 (define-public xorgproto
   (package
     (name "xorgproto")
-    (version "2019.2")
+    (version "2021.5")
     (source (origin
               (method url-fetch)
-              (uri (string-append "mirror://xorg/individual/proto/"
+              (uri (string-append "ftp://ftp.freedesktop.org/pub/xorg//individual/proto/"
                                   "xorgproto-" version ".tar.bz2"))
               (sha256
                (base32
-                "13kvir8dz9dvzhvyfndpff1z7k8h14s7kkl7mbl427andhax1v26"))))
+                "05d0kib351qmnlfimaznaw0220fr0ym7fx2gn9h2jqxxilxncbxa"))))
     (build-system gnu-build-system)
     (propagated-inputs
      ;; To get util-macros in (almost?) all package inputs.
-     `(("util-macros" ,util-macros)))
+     (list util-macros))
     (home-page "https://cgit.freedesktop.org/xorg/proto/xorgproto")
     (synopsis "Xorg protocol headers")
     (description
@@ -262,7 +277,7 @@ the core protocol and (many) extensions for the X Window System.")
           (base32
             "07hvfm84scz8zjw14riiln2v4w03jlhp756ypwhq27g48jmic8a6"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg BigReqsProto protocol headers")
     (description
@@ -287,9 +302,9 @@ requests that exceed 262140 bytes in length.")
             "1z0crmf669hirw4s7972mmp8xig80kfndja9h559haqbpvq5k4q4"))))
     (build-system gnu-build-system)
     (inputs
-      `(("xorgproto" ,xorgproto)))
+      (list xorgproto))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg CompositeProto protocol headers")
     (description
@@ -313,7 +328,7 @@ the damage protocol.")
           (base32
             "0nzwr5pv9hg7c21n995pdiv0zqhs91yz3r8rn3aska4ykcp12z2w"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg DamageProto protocol headers")
     (description
@@ -337,7 +352,7 @@ the damage protocol.")
           (base32
             "02b5x9dkgajizm8dqyx2w6hmqx3v25l67mgf35nj6sz0lgk52877"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg DMXProto protocol headers")
     (description
@@ -419,11 +434,9 @@ provided.")
        (list (string-append "--with-appdefaultdir="
                             %output ,%app-defaults-dir))))
     (inputs
-     `(("libxaw" ,libxaw)
-       ("libxmu" ,libxmu)
-       ("libxt" ,libxt)))
+     (list libxaw libxmu libxt))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Tool to browse and edit X Toolkit resource specifications")
     (description
@@ -452,9 +465,9 @@ Resources file.")
           (base32 "0caafx0yqqnqyvbalxhh3mb0r9v36xmcy5zjhygb2i508dhy35mx"))))
     (build-system gnu-build-system)
     (inputs
-      `(("mkfontscale" ,mkfontscale)))
+      (list mkfontscale))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg font encoding files")
     (description "Xorg font encoding files.")
@@ -489,11 +502,9 @@ Resources file.")
              "0m60f5bd0caambrk8ksknb5dks7wzsg7g7xaf0j21jxmx8rq9h5j"))
     (build-system gnu-build-system)
     (inputs
-      `(("bdftopcf" ,bdftopcf)
-        ("font-util" ,font-util)
-        ("mkfontdir" ,mkfontdir)))
+      (list bdftopcf font-util mkfontdir))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (arguments
       `(#:configure-flags (list
         ;; install fonts into subdirectory of package output instead of
@@ -514,11 +525,9 @@ Resources file.")
              "02advcv9lyxpvrjv8bjh1b797lzg6jvhipclz49z8r8y98g4l0n6"))
     (build-system gnu-build-system)
     (inputs
-      `(("bdftopcf" ,bdftopcf)
-        ("font-util" ,font-util)
-        ("mkfontdir" ,mkfontdir)))
+      (list bdftopcf font-util mkfontdir))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (arguments
       `(#:configure-flags (list
         (string-append "--with-fontrootdir=" %output "/share/fonts/X11"))))
@@ -542,7 +551,7 @@ Resources file.")
              name version
              "0xjjjindczv3g7m1597l0x19zz75xy70wh5garghz61fpzl1l4gk"))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (add-after
@@ -577,10 +586,9 @@ For example: @code{6x10}, @code{9x15bold}, etc.")
              "1x246dfnxnmflzf0qzy62k8jdpkb6jkgspcjgbk8jcq9lw99npah"))
     (build-system gnu-build-system)
     (inputs
-      `(("mkfontdir" ,mkfontdir)
-        ("bdftopcf" ,bdftopcf)))
+      (list mkfontdir bdftopcf))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg arabic-misc font")
     (description "Xorg arabic-misc font.")
@@ -607,10 +615,9 @@ For example: @code{6x10}, @code{9x15bold}, etc.")
              "0ai1v4n61k8j9x2a1knvfbl2xjxk3xxmqaq3p9vpqrspc69k31kf"))
     (build-system gnu-build-system)
     (inputs
-      `(("mkfontdir" ,mkfontdir)
-        ("bdftopcf" ,bdftopcf)))
+      (list mkfontdir bdftopcf))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg cronyx-cyrillic font")
     (description "Xorg cronyx-cyrillic font.")
@@ -633,10 +640,9 @@ For example: @code{6x10}, @code{9x15bold}, etc.")
              "0yzza0l4zwyy7accr1s8ab7fjqkpwggqydbm2vc19scdby5xz7g1"))
     (build-system gnu-build-system)
     (inputs
-      `(("mkfontdir" ,mkfontdir)
-        ("bdftopcf" ,bdftopcf)))
+      (list mkfontdir bdftopcf))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg dec-misc font")
     (description "Xorg dec-misc font.")
@@ -655,10 +661,9 @@ For example: @code{6x10}, @code{9x15bold}, etc.")
              "0rx8q02rkx673a7skkpnvfkg28i8gmqzgf25s9yi0lar915sn92q"))
     (build-system gnu-build-system)
     (inputs
-      `(("mkfontdir" ,mkfontdir)
-        ("bdftopcf" ,bdftopcf)))
+      (list mkfontdir bdftopcf))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg isas-misc font")
     (description "Xorg isas-misc font.")
@@ -678,10 +683,9 @@ For example: @code{6x10}, @code{9x15bold}, etc.")
              "1dldxlh54zq1yzfnrh83j5vm0k4ijprrs5yl18gm3n9j1z0q2cws"))
     (build-system gnu-build-system)
     (inputs
-      `(("mkfontdir" ,mkfontdir)
-        ("bdftopcf" ,bdftopcf)))
+      (list mkfontdir bdftopcf))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg micro-misc font")
     (description "Xorg micro-misc font.")
@@ -697,10 +701,9 @@ For example: @code{6x10}, @code{9x15bold}, etc.")
              "0q2ybxs8wvylvw95j6x9i800rismsmx4b587alwbfqiw6biy63z4"))
     (build-system gnu-build-system)
     (inputs
-      `(("mkfontdir" ,mkfontdir)
-        ("bdftopcf" ,bdftopcf)))
+      (list mkfontdir bdftopcf))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg misc-cyrillic fonts")
     (description "Xorg misc-cyrillic fonts.")
@@ -716,10 +719,9 @@ For example: @code{6x10}, @code{9x15bold}, etc.")
              "1q2azkdwc4x3kh53xclwpf9q654k70lhiyns1cjq594wvxnhz339"))
     (build-system gnu-build-system)
     (inputs
-      `(("mkfontdir" ,mkfontdir)
-        ("mkfontscale" ,mkfontscale)))
+      (list mkfontdir mkfontscale))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg misc-ethiopic fonts")
     (description "Xorg misc-ethiopic fonts.")
@@ -739,11 +741,9 @@ For example: @code{6x10}, @code{9x15bold}, etc.")
              "150pq6n8n984fah34n3k133kggn9v0c5k07igv29sxp1wi07krxq"))
     (build-system gnu-build-system)
     (inputs
-      `(("mkfontdir" ,mkfontdir)
-        ("font-util" ,font-util)
-        ("bdftopcf" ,bdftopcf)))
+      (list mkfontdir font-util bdftopcf))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
       `(#:configure-flags (list
         (string-append "--with-fontrootdir=" %output "/share/fonts/X11"))))
@@ -762,10 +762,9 @@ For example: @code{6x10}, @code{9x15bold}, etc.")
              "13qghgr1zzpv64m0p42195k1kc77pksiv059fdvijz1n6kdplpxx"))
     (build-system gnu-build-system)
     (inputs
-      `(("mkfontdir" ,mkfontdir)
-        ("bdftopcf" ,bdftopcf)))
+      (list mkfontdir bdftopcf))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg mutt-misc fonts")
     (description "Xorg mutt-misc fonts.")
@@ -781,11 +780,9 @@ For example: @code{6x10}, @code{9x15bold}, etc.")
              "0nkym3n48b4v36y4s927bbkjnsmicajarnf6vlp7wxp0as304i74"))
     (build-system gnu-build-system)
     (inputs
-      `(("mkfontdir" ,mkfontdir)
-        ("font-util" ,font-util)
-        ("bdftopcf" ,bdftopcf)))
+      (list mkfontdir font-util bdftopcf))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (arguments
       `(#:configure-flags (list
         (string-append "--with-fontrootdir=" %output "/share/fonts/X11"))))
@@ -804,10 +801,9 @@ For example: @code{6x10}, @code{9x15bold}, etc.")
              "0yayf1qlv7irf58nngddz2f1q04qkpr5jwp4aja2j5gyvzl32hl2"))
     (build-system gnu-build-system)
     (inputs
-      `(("mkfontdir" ,mkfontdir)
-        ("bdftopcf" ,bdftopcf)))
+      (list mkfontdir bdftopcf))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg screen-cyrillic fonts")
     (description "Xorg screen-cyrillic fonts.")
@@ -823,10 +819,9 @@ For example: @code{6x10}, @code{9x15bold}, etc.")
              "1xfgcx4gsgik5mkgkca31fj3w72jw9iw76qyrajrsz1lp8ka6hr0"))
     (build-system gnu-build-system)
     (inputs
-      `(("mkfontdir" ,mkfontdir)
-        ("bdftopcf" ,bdftopcf)))
+      (list mkfontdir bdftopcf))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg sony-misc fonts")
     (description "Xorg sony-misc fonts.")
@@ -842,10 +837,9 @@ For example: @code{6x10}, @code{9x15bold}, etc.")
              "1q6jcqrffg9q5f5raivzwx9ffvf7r11g6g0b125na1bhpz5ly7s8"))
     (build-system gnu-build-system)
     (inputs
-      `(("mkfontdir" ,mkfontdir)
-        ("bdftopcf" ,bdftopcf)))
+      (list mkfontdir bdftopcf))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg sun-misc fonts")
     (description "Xorg sun-misc fonts.")
@@ -866,7 +860,7 @@ For example: @code{6x10}, @code{9x15bold}, etc.")
         (sha256
           (base32 "10i2a8b3d1h3w7klsqf31iz7zbd6l8wglil54fkhdb1385281n1s"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg font utilities")
     (description
@@ -883,10 +877,9 @@ For example: @code{6x10}, @code{9x15bold}, etc.")
              "181n1bgq8vxfxqicmy1jpm1hnr6gwn1kdhl6hr4frjigs1ikpldb"))
     (build-system gnu-build-system)
     (inputs
-      `(("mkfontdir" ,mkfontdir)
-        ("bdftopcf" ,bdftopcf)))
+      (list mkfontdir bdftopcf))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg winitzki-cyrillic font")
     (description "Xorg winitzki-cyrillic font.")
@@ -902,10 +895,9 @@ For example: @code{6x10}, @code{9x15bold}, etc.")
              "0jp3zc0qfdaqfkgzrb44vi9vi0a8ygb35wp082yz7rvvxhmg9sya"))
     (build-system gnu-build-system)
     (inputs
-      `(("mkfontdir" ,mkfontdir)
-        ("mkfontscale" ,mkfontscale)))
+      (list mkfontdir mkfontscale))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg xfree86-type1 font")
     (description "Xorg xfree86-type1 font.")
@@ -927,7 +919,7 @@ For example: @code{6x10}, @code{9x15bold}, etc.")
           (base32
             "1f2sdsd74y34nnaf4m1zlcbhyv8xb6irnisc99f84c4ivnq4d415"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg FontsProto protocol headers")
     (description
@@ -951,7 +943,7 @@ the fonts protocol.")
           (base32
             "0h5ykmcddwid5qj6sbrszgkcypwn3mslvswxpgy2n2iixnyr9amd"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg GLProto protocol headers")
     (description
@@ -976,9 +968,9 @@ rendering commands to the X server.")
             "1ik0mdidmyvy48hn8p2hwvf3535rf3m96hhf0mvcqrbj44x23vp6"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libice" ,libice)))
+      (list libice))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "ICE authority file utility")
     (description
@@ -1004,7 +996,7 @@ authentication records.")
           (base32
             "07gk7v006zqn3dcfh16l06gnccy7xnqywf3vl9c209ikazsnlfl9"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg InputProto protocol headers")
     (description
@@ -1028,7 +1020,7 @@ devices management such as graphic tablets.")
           (base32
             "0mxqj1pzhjpz9495vrjnpi10kv2n1s4vs7di0sh3yvipfq5j30pq"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg KBProto protocol headers")
     (description
@@ -1059,11 +1051,9 @@ of new capabilities and controls for text keyboards.")
     (arguments
      '(#:configure-flags '("--disable-static")))
     (inputs
-      `(("xorgproto" ,xorgproto)
-        ("libxext" ,libxext)
-        ("libx11" ,libx11)))
+      (list xorgproto libxext libx11))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg DMX library")
     (description
@@ -1086,8 +1076,8 @@ of new capabilities and controls for text keyboards.")
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--disable-static")))
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("xorgproto" ,xorgproto)))
+    (native-inputs (list pkg-config))
+    (inputs (list xorgproto))
     (home-page "https://www.x.org/")
     (synopsis "Xorg shared memory fences library")
     (description
@@ -1116,10 +1106,9 @@ synchronization between the X server and direct-rendering clients.")
     (arguments
      '(#:configure-flags '("--disable-static")))
     (inputs
-      `(("zlib" ,zlib)
-        ("xorgproto" ,xorgproto)))
+      (list zlib xorgproto))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://gitlab.freedesktop.org/xorg/lib/libfontenc")
     (synopsis "Xorg font encoding library")
     (description "Xorg font encoding library.")
@@ -1141,10 +1130,9 @@ synchronization between the X server and direct-rendering clients.")
           (base32 "03xxyvpfa3rhqcld4p2chkil482jn9cp80hj17jdybcv2hkkgqf8"))))
     (build-system gnu-build-system)
     (inputs
-      `(("xtrans" ,xtrans)
-        ("xorgproto" ,xorgproto)))
+      (list xtrans xorgproto))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg Font Service client library")
     (description
@@ -1190,10 +1178,9 @@ themselves.")
                   (string-append "-L" zlib "/lib -lz")))
                #t))))))
     (inputs
-     `(("zlib" ,zlib)
-       ("pciutils" ,pciutils)))                   ;for 'pci.ids.gz'
+     (list zlib pciutils))                   ;for 'pci.ids.gz'
     (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg PCI access library")
     (description "Xorg Generic PCI access library.")
@@ -1215,7 +1202,7 @@ themselves.")
           (base32
             "0cz7s9w8lqgzinicd4g36rjg08zhsbyngh0w68c3np8nlc8mkl74"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Library with pthread stubs")
     (description
@@ -1245,12 +1232,12 @@ hit when running single-threaded.")
     (arguments
      '(#:configure-flags '("--disable-static")))
     (propagated-inputs
-      `(("libice" ,libice))) ; SMlib.h includes ICElib.h
+      (list libice)) ; SMlib.h includes ICElib.h
     (inputs
       `(("xtrans" ,xtrans)
         ("libuuid" ,util-linux "lib")))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg Session Management library")
     (description "Xorg Session Management library.")
@@ -1273,11 +1260,9 @@ hit when running single-threaded.")
             "1p0flwb67xawyv6yhri9w17m1i4lji5qnd0gq8v1vsfb8zw7rw15"))))
     (build-system gnu-build-system)
     (inputs
-      `(("xorgproto" ,xorgproto)
-        ("libxext" ,libxext)
-        ("libx11" ,libx11)))
+      (list xorgproto libxext libx11))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg WindowsWM library")
     (description
@@ -1307,11 +1292,9 @@ with the Cygwin XWin server when running X11 in a rootless mode.")
      '(#:configure-flags '("--disable-static")))
     (propagated-inputs
      ;; xcomposite.pc refers to all these.
-      `(("xorgproto" ,xorgproto)
-        ("libxfixes" ,libxfixes)
-        ("libx11" ,libx11)))
+      (list xorgproto libxfixes libx11))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg Composite library")
     (description
@@ -1337,10 +1320,9 @@ with the Cygwin XWin server when running X11 in a rootless mode.")
     (arguments
      '(#:configure-flags '("--disable-static")))
     (inputs
-      `(("libbsd" ,libbsd)
-        ("xorgproto" ,xorgproto)))
+      (list libbsd xorgproto))
     (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg Display Manager Control Protocol library")
     (description "Xorg Display Manager Control Protocol library.")
@@ -1370,10 +1352,9 @@ with the Cygwin XWin server when running X11 in a rootless mode.")
         ("freetype" ,freetype)
         ("fontconfig" ,fontconfig)))
     (inputs
-      `(("libx11" ,libx11)
-        ("xorgproto" ,xorgproto)))
+      (list libx11 xorgproto))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg FreeType library")
     (description
@@ -1388,22 +1369,23 @@ configuration files.")
     (name "libxkbfile")
     (version "1.1.0")
     (source
-      (origin
-        (method url-fetch)
-        (uri (string-append
-               "mirror://xorg/individual/lib/libxkbfile-"
-               version
-               ".tar.bz2"))
-        (sha256
-          (base32
-            "1irq9crvscd3yb8sr802dhvvfr35jdy1n2yz094xplmd42mbv3bm"))))
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://xorg/individual/lib/libxkbfile-"
+             version
+             ".tar.bz2"))
+       (sha256
+        (base32
+         "1irq9crvscd3yb8sr802dhvvfr35jdy1n2yz094xplmd42mbv3bm"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--disable-static")))
-    (inputs
-      `(("libx11" ,libx11)))
+    (propagated-inputs
+     ;; Required in xkbfile.pc.
+     (list libx11 kbproto))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg XKB file handling library")
     (description "Xorg XKB file handling library.")
@@ -1428,11 +1410,9 @@ configuration files.")
     (arguments
      '(#:configure-flags '("--disable-static")))
     (inputs
-      `(("libxt" ,libxt)
-        ("xorgproto" ,xorgproto)
-        ("libxext" ,libxext)))
+      (list libxt xorgproto libxext))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg Xmu library")
     (description
@@ -1462,9 +1442,7 @@ treat it as part of their software base when porting.")
     (arguments
      '(#:configure-flags '("--disable-static")))
     (inputs
-      `(("libxt" ,libxt)
-        ("xorgproto" ,xorgproto)
-        ("libxext" ,libxext)))
+      (list libxt xorgproto libxext))
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("pkg-config" ,pkg-config)))
@@ -1477,7 +1455,7 @@ treat it as part of their software base when porting.")
 (define-public libxres
   (package
     (name "libxres")
-    (version "1.2.0")
+    (version "1.2.1")
     (source
       (origin
         (method url-fetch)
@@ -1487,16 +1465,14 @@ treat it as part of their software base when porting.")
                ".tar.bz2"))
         (sha256
           (base32
-            "1m0jr0lbz9ixpp9ihk68349q0i7ry2379lnfzdy4mrl86ijc2xgz"))))
+            "049b7dk6hx47161hg47ryjrm6pwsp27r5pby05b0wqb1pcggprmn"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--disable-static")))
     (inputs
-      `(("xorgproto" ,xorgproto)
-        ("libxext" ,libxext)
-        ("libx11" ,libx11)))
+      (list xorgproto libxext libx11))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg Resource extension library")
     (description "X Resource extension library.")
@@ -1521,11 +1497,9 @@ treat it as part of their software base when porting.")
     (arguments
      '(#:configure-flags '("--disable-static")))
     (propagated-inputs
-      `(("libx11" ,libx11)
-        ("libxext" ,libxext)
-        ("xorgproto" ,xorgproto)))
+      (list libx11 libxext xorgproto))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg Screen Saver library")
     (description "X11 Screen Saver extension client library.")
@@ -1547,12 +1521,11 @@ treat it as part of their software base when porting.")
     (arguments
      '(#:configure-flags '("--disable-static")))
     (propagated-inputs
-     `(("xorgproto" ,xorgproto)))
+     (list xorgproto))
     (inputs
-     `(("libx11" ,libx11)
-       ("libxext" ,libxext)))
+     (list libx11 libxext))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg XFree86-DGA library")
     (description "Client library for the XFree86-DGA extension.")
@@ -1578,9 +1551,9 @@ treat it as part of their software base when porting.")
         (patches (search-patches "luit-posix.patch"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libfontenc" ,libfontenc)))
+      (list libfontenc))
     (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Convert terminal I/O from legacy encodings to UTF-8")
     (description
@@ -1607,8 +1580,8 @@ input from UTF-8 into the locale's encoding.")
             "072h9nzh8s5vqfz35dli4fba36fnr219asjrb7p89n8ph0paan6m"))))
     (build-system gnu-build-system)
     (inputs
-      `(("xorgproto" ,xorgproto)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+      (list xorgproto))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg makedepend utility")
     (description
@@ -1631,12 +1604,9 @@ input from UTF-8 into the locale's encoding.")
           (base32 "1ixsnsm2mn0zy9ksdid0lj6irnhvasfik9mz8bbrs5sajzmra16a"))))
     (build-system gnu-build-system)
     (inputs
-      `(("zlib" ,zlib)
-        ("xorgproto" ,xorgproto)
-        ("freetype" ,freetype)
-        ("libfontenc" ,libfontenc)))
+      (list zlib xorgproto freetype libfontenc))
     (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Create an index of scalable font files for X server")
     (description
@@ -1686,7 +1656,7 @@ mechanism than copying the contents of the source pixmap.")
           (base32
             "06liap8n4s25sgp27d371cc7yg9a08dxcr3pmdjp761vyin3360j"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg PrintProto protocol headers")
     (description
@@ -1710,7 +1680,7 @@ network-transparent printing system.")
           (base32
             "0s4496z61y5q45q20gldwpf788b9nsa8hb13gnck1mwwwwrmarsc"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg RandRProto protocol headers")
     (description
@@ -1736,7 +1706,7 @@ window of a screen.")
           (base32
             "0w3kgr1zabwf79bpc28dcnj0fpni6r53rpi82ngjbalj5s6m8xx7"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg RecordProto protocol headers")
     (description
@@ -1760,7 +1730,7 @@ of user actions in the X Window System.")
           (base32
             "0dr5xw6s0qmqg0q5pdkb4jkdhaja0vbfqla79qh5j1xjj9dmlwq6"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg RenderProto protocol headers")
     (description
@@ -1784,7 +1754,7 @@ as the foundation of a new rendering model within the X Window System.")
           (base32
             "0638iyfiiyjw1hg3139pai0j6m65gkskrvd9684zgc6ydcx00riw"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg ResourceProto protocol headers")
     (description
@@ -1808,7 +1778,7 @@ query the X server about its usage of various resources.")
           (base32
             "0rfdbfwd35d761xkfifcscx56q0n56043ixlmv70r4v4l66hmdwb"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg ScrnSaverProto protocol headers")
     (description
@@ -1830,9 +1800,9 @@ features and to query screensaver info on specific windows.")
         (base32 "0crczl25zynkrslmm8sjaxszhrh4i33m7h5fg4wfdb3k8aarxjyz"))))
     (build-system gnu-build-system)
     (inputs
-      `(("xorgproto" ,xorgproto)))
+      (list xorgproto))
     (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Register X sessions in system utmp/utmpx databases")
     (description
@@ -1858,11 +1828,9 @@ used with other display managers such as gdm or kdm.")
             "1xdrxs65v7d0rw1yaz0vsz55w4hxym99216p085ya9978j379wlg"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libxkbfile" ,libxkbfile)
-        ("xkeyboard-config" ,xkeyboard-config)
-        ("libx11" ,libx11)))
+      (list libxkbfile xkeyboard-config libx11))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (arguments
      `(#:configure-flags
        (list (string-append "--with-xkb-config-root="
@@ -1893,10 +1861,9 @@ listed on the command line.")
             "0rkjyzmsdqmlrkx8gy2j4q6iksk58hcc92xzdprkf8kml9ar3wbc"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libxt" ,libxt)
-        ("libxmu" ,libxmu)))
+      (list libxt libxmu))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Session Manager Proxy")
     (description
@@ -1908,7 +1875,7 @@ management to participate in an X11R6 session.")
 (define-public util-macros
   (package
     (name "util-macros")
-    (version "1.19.2")
+    (version "1.19.3")
     (source
       (origin
         (method url-fetch)
@@ -1918,9 +1885,9 @@ management to participate in an X11R6 session.")
                ".tar.bz2"))
         (sha256
           (base32
-            "04p7ydqxgq37jklnfj18b70zsifiz4h50wvrk94i2112mmv37r6p"))))
+            "0w8ryfqylprz37zj9grl4jzdsqq67ibfwq5raj7vm1i7kmp2x08g"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1962,7 +1929,7 @@ generate new versions of their configure scripts with autoconf.")
           (base32
             "00m7rh3pwmsld4d5fpii3xfk5ciqn17kkk38gfpzrrh8zn4ki067"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg VideoProto protocol headers")
     (description
@@ -1986,7 +1953,7 @@ mainly to rescale video playback in the video controller hardware.")
           (base32
             "0syjxgy4m8l94qrm03nvn5k6bkxc8knnlld1gbllym97nvnv0ny0"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg WindowsWMProto protocol headers")
     (description
@@ -2013,12 +1980,9 @@ server.")
             "0d3wh6z6znwhfdiv0zaggfj0xgish98xa10yy76b9517zj7hnzhw"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libx11" ,libx11)
-        ("libxft" ,libxft)
-        ("libxmu" ,libxmu)
-        ("libxrender" ,libxrender)))
+      (list libx11 libxft libxmu libxrender))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "X server performance benchmarker")
     (description
@@ -2039,13 +2003,9 @@ server.")
         (base32 "032klzzw8r09z36x1272ssd79bcisz8j5p8gbdy111fiknvx27bd"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libxmu" ,libxmu)
-       ("libxext" ,libxext)
-       ("libxau" ,libxau)
-       ("libx11" ,libx11)))
+     (list libxmu libxext libxau libx11))
     (native-inputs
-     `(("cmdtest" ,cmdtest)
-       ("pkg-config" ,pkg-config)))
+     (list cmdtest pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "X authority file utility")
     (description
@@ -2070,10 +2030,9 @@ information used in connecting to the X server.")
             "1plssg0s3pbslg6rfzxp9sx8ryvn8l32zyvc8zp9zsbsfwjg69rs"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libxcb" ,libxcb)
-       ("xcb-util" ,xcb-util)))
+     (list libxcb xcb-util))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Control display backlight")
     (description
@@ -2099,7 +2058,7 @@ the same way.")
           (base32
             "1vh73sc13s7w5r6gnc6irca56s7998bja7wgdivkfn8jccawgw5r"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "X bitmaps")
     (description
@@ -2130,9 +2089,9 @@ legacy X clients.")
                                        ,%app-defaults-dir "\n")))
                      #t)))))
     (inputs
-     `(("libxaw" ,libxaw)))
+     (list libxaw))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Hand calculator for the X Window system")
     (description "Xcalc is a scientific calculator desktop accessory that can
@@ -2151,8 +2110,15 @@ emulate a TI-30 or an HP-10C.")
                "https://xcb.freedesktop.org/dist/xcb-proto-"
                version ".tar.xz"))
         (sha256
-          (base32
-           "01d62r286yfc3rpz714nqdgkl0wk9j0wqkd4ylas1d7r4vmkqshq"))))
+         (base32
+          "01d62r286yfc3rpz714nqdgkl0wk9j0wqkd4ylas1d7r4vmkqshq"))
+        (modules '((guix build utils)))
+        (snippet
+         '(begin
+            ;; fractions.gcd has been deprecated since python-3.5.
+            (substitute* "xcbgen/align.py"
+              (("from fractions import gcd") "from math import gcd"))
+            #t))))
     (build-system gnu-build-system)
     (native-inputs
       `(("pkg-config" ,pkg-config) ("python" ,python-minimal-wrapper)))
@@ -2186,7 +2152,7 @@ generators in individual language bindings.")
           (base32
             "1pyjv45wivnwap2wvsbrzdvjc5ql8bakkbkrvcv6q9bjjf33ccmi"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg XCMiscProto protocol headers")
     (description
@@ -2211,9 +2177,9 @@ to query the server for available resource IDs.")
             "1ik7gzlp2igz183x70883000ygp99r20x3aah6xhaslbpdhm6n75"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libx11" ,libx11)))
+      (list libx11))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Device Color Characterization utility")
     (description
@@ -2240,10 +2206,9 @@ X11 Inter-Client Communication Conventions Manual (ICCCM).")
             "16a96li0s0ggg60v7f6ywxmsrmxdfizcw55ccv7sp4qjfisca7pf"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libxcursor" ,libxcursor)
-        ("xcursorgen" ,xcursorgen)))
+      (list libxcursor xcursorgen))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (arguments
      `(#:configure-flags
        (list (string-append "--with-cursordir="
@@ -2256,65 +2221,56 @@ X11 Inter-Client Communication Conventions Manual (ICCCM).")
 X server: @code{handhelds}, @code{redglass} and @code{whiteglass}.")
     (license license:x11)))
 
-
 (define-public hackneyed-x11-cursors
-  ;; The current release 0.8 suffers from non-deterministic build problems.
-  (let ((revision "1")
-        (commit "9423cef2e2e5ff6b1d65d61f7108c97bc7f5fdfb"))
-    (package
-      (name "hackneyed-x11-cursors")
-      (version (git-version "0.8.1" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://gitlab.com/Enthymeme/hackneyed-x11-cursors.git")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32
-           "0f637i76sdwz3nm1g1iynamq6j0i6k3c70fpl0fmd0dlynm8ga96"))))
-      (build-system gnu-build-system)
-      (arguments
-       `(#:tests? #f                    ;no test suite
-         #:make-flags (list (string-append "PREFIX=" %output))
-         #:phases
-         (modify-phases %standard-phases
-           (delete 'configure)
-           (add-before 'build 'set-inkscape-environment-variable
-             (lambda* (#:key inputs #:allow-other-keys)
-               (let ((inkscape (string-append (assoc-ref inputs "inkscape")
-                                              "/bin/inkscape")))
-                 (setenv "INKSCAPE" inkscape)
-                 #t)))
-           (add-before 'build 'placate-inkscape-warnings
-             (lambda _
-               (setenv "HOME" (getcwd))
-               #t))
-           (add-after 'build 'generate-black-cursors
-             (lambda* (#:key make-flags parallel-build #:allow-other-keys)
-               (let ((build (assoc-ref %standard-phases 'build))
-                     (make-flags/extended
-                      `(,@make-flags
-                        "THEME_NAME=Hackneyed-Dark"
-                        "COMMON_SOURCE=theme/common-dark.svg"
-                        "RSVG_SOURCE=theme/right-handed-dark.svg"
-                        "LSVG_SOURCE=theme/left-handed-dark.svg")))
-                 (build #:make-flags make-flags/extended
-                        #:parallel-build parallel-build))))
-           (add-after 'install 'install-black-cursors
-             (lambda* (#:key make-flags #:allow-other-keys)
-               (apply invoke `("make" "install" ,@make-flags
-                               "THEME_NAME=Hackneyed-Dark")))))))
-      (native-inputs `(("imagemagick" ,imagemagick)
-                       ("inkscape" ,inkscape)
-                       ("xcursorgen" ,xcursorgen)))
-      (home-page "https://gitlab.com/Enthymeme/hackneyed-x11-cursors")
-      (synopsis "Classic cursor theme for X11")
-      (description "Hackneyed is a scalable cursor theme mildly resembling old
+  (package
+    (name "hackneyed-x11-cursors")
+    (version "0.8.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://gitlab.com/Enthymeme/hackneyed-x11-cursors.git")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1mjwbny4rid9dzz6xfb8l5rkwki41sfhdp970cf3w2pi9kyg1njs"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f                      ;no test suite
+       #:make-flags (list (string-append "PREFIX=" %output))
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (add-before 'build 'set-inkscape-environment-variable
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((inkscape (search-input-file inputs "/bin/inkscape")))
+               (setenv "INKSCAPE" inkscape))))
+         (add-before 'build 'placate-inkscape-warnings
+           (lambda _
+             (setenv "HOME" (getcwd))))
+         (add-after 'build 'generate-black-cursors
+           (lambda* (#:key make-flags parallel-build #:allow-other-keys)
+             (let ((build (assoc-ref %standard-phases 'build))
+                   (make-flags/extended
+                    `(,@make-flags
+                      "THEME_NAME=Hackneyed-Dark"
+                      "COMMON_SOURCE=theme/common-dark.svg"
+                      "RSVG_SOURCE=theme/right-handed-dark.svg"
+                      "LSVG_SOURCE=theme/left-handed-dark.svg")))
+               (build #:make-flags make-flags/extended
+                      #:parallel-build parallel-build))))
+         (add-after 'install 'install-black-cursors
+           (lambda* (#:key make-flags #:allow-other-keys)
+             (apply invoke `("make" "install" ,@make-flags
+                             "THEME_NAME=Hackneyed-Dark")))))))
+    (native-inputs (list imagemagick inkscape xcursorgen))
+    (home-page "https://gitlab.com/Enthymeme/hackneyed-x11-cursors")
+    (synopsis "Classic cursor theme for X11")
+    (description "Hackneyed is a scalable cursor theme mildly resembling old
 Windows 3.x cursors.  The cursors are available in white and black colors.  A
 left-handed version of the cursors is also included.")
-      (license license:x11))))
+    (license license:x11)))
 
 (define-public xcursorgen
   (package
@@ -2332,10 +2288,9 @@ left-handed version of the cursors is also included.")
             "0ggbv084cavp52hjgcz3vdj0g018axs0m23c03lpc5sgn92gidim"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libxcursor" ,libxcursor)
-        ("libpng" ,libpng)))
+      (list libxcursor libpng))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Create an X cursor file from PNG images")
     (description
@@ -2359,18 +2314,18 @@ left-handed version of the cursors is also included.")
             "0ldgrj4w2fa8jng4b3f3biaj0wyn8zvya88pnk70d7k12pcqw8rh"))))
     (build-system gnu-build-system)
     (inputs
-      `(("xorgproto" ,xorgproto)
-        ("libx11" ,libx11)
-        ("libxxf86vm" ,libxxf86vm)
-        ("libxxf86dga" ,libxxf86dga)
-        ("libxtst" ,libxtst)
-        ("libxrender" ,libxrender)
-        ("libxinerama" ,libxinerama)
-        ("libxi" ,libxi)
-        ("libxcomposite" ,libxcomposite)
-        ("libdmx" ,libdmx)))
-    (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list xorgproto
+            libx11
+            libxxf86vm
+            libxxf86dga
+            libxtst
+            libxrender
+            libxinerama
+            libxi
+            libxcomposite
+            libdmx))
+    (native-inputs
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg display information utility")
     (description
@@ -2398,10 +2353,9 @@ available.")
             "0lcx8h3zd11m4w8wf7dyp89826d437iz78cyrix436bqx31x5k6r"))))
     (build-system gnu-build-system)
     (inputs
-      `(("mesa" ,mesa)
-        ("libx11" ,libx11)))
+      (list mesa libx11))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Query DRI configuration information")
     (description
@@ -2425,13 +2379,11 @@ DRI (Direct Rendering Infrastructure) drivers.")
           (base32
             "1ql592pdhddhkipkrsxn929y9l2nn02a5fh2z3dx47kmzs5y006p"))))
     (build-system gnu-build-system)
+    (arguments `(#:configure-flags ',(malloc0-flags)))
     (inputs
-      `(("libxrender" ,libxrender)
-        ("libxrandr" ,libxrandr)
-        ("xorgproto" ,xorgproto)
-        ("libx11" ,libx11)))
+      (list libxrender libxrandr xorgproto libx11))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://gitlab.freedesktop.org/xorg/app/xev")
     (synopsis "Print contents of X events")
     (description
@@ -2460,7 +2412,7 @@ usage.")
           (base32
             "1c2vma9gqgc2v06rfxdiqgwhxmzk2cbmknwf1ng3m76vr0xb5x7k"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg XExtProto protocol headers")
     (description
@@ -2486,7 +2438,7 @@ XC-APPGROUP, XTEST.")
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags '("--disable-static")))
-    (native-inputs `(("python" ,python)))
+    (native-inputs (list python))
     (home-page "https://www.freedesktop.org/wiki/Software/libevdev/")
     (synopsis "Wrapper library for evdev devices")
     (description
@@ -2519,7 +2471,7 @@ devices, thus making direct access unnecessary.")
         ("libevdev" ,libevdev)
         ("mtdev" ,mtdev)
         ("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (arguments
      `(#:configure-flags
        (list (string-append "--with-sdkdir="
@@ -2536,7 +2488,7 @@ including most mice, keyboards, tablets and touchscreens.")
 (define-public xf86-input-libinput
   (package
     (name "xf86-input-libinput")
-    (version "1.0.1")
+    (version "1.1.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -2544,14 +2496,14 @@ including most mice, keyboards, tablets and touchscreens.")
                     name "-" version ".tar.bz2"))
               (sha256
                (base32
-                "0nr4r9x8c7y1l0ipivjch5zps093mxmg2nqmfn2934am26fc9ppx"))))
+                "05ldqr10f2rrnshyk3lc773rz0gp3ccdzwa8n7lsc94i850jl7g1"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags
        (list (string-append "--with-sdkdir="
                             %output "/include/xorg"))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("libinput" ,libinput-minimal)
        ("xorg-server" ,xorg-server)))
@@ -2579,8 +2531,8 @@ provide all features that libinput supports it does little beyond.")
           (base32
             "1awfq496d082brgjbr60lhm6jvr9537rflwxqdfqwfzjy3n6jxly"))))
     (build-system gnu-build-system)
-    (inputs `(("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list xorg-server))
+    (native-inputs (list pkg-config))
     (arguments
      `(#:configure-flags
        (list (string-append "--with-sdkdir="
@@ -2609,8 +2561,8 @@ It is used to control the pointer with a joystick device.")
           (base32
             "12032yg412kyvnmc5fha1in7mpi651d8sa1bk4138s2j2zr01jgp"))))
     (build-system gnu-build-system)
-    (inputs `(("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list xorg-server))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Keyboard input driver for X server")
     (description
@@ -2633,8 +2585,8 @@ It is used to control the pointer with a joystick device.")
           (base32
             "1iawr1wyl2qch1mqszcs0s84i92mh4xxprflnycbw1adc18b7v4k"))))
     (build-system gnu-build-system)
-    (inputs `(("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list xorg-server))
+    (native-inputs (list pkg-config))
     (arguments
      `(#:configure-flags
        (list (string-append "--with-sdkdir="
@@ -2665,12 +2617,8 @@ as USB mice.")
           (base32
             "0xhm03qywwfgkpfl904d08lx00y28m1b6lqmks5nxizixwk3by3s"))))
     (build-system gnu-build-system)
-    (inputs `(("libx11" ,libx11)
-              ("libxi" ,libxi)
-              ("libevdev" ,libevdev)
-              ("mtdev" ,mtdev)
-              ("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list libx11 libxi libevdev mtdev xorg-server))
+    (native-inputs (list pkg-config))
     (arguments
      `(#:configure-flags
        (list (string-append "--with-sdkdir="
@@ -2701,8 +2649,8 @@ as USB mice.")
           (base32
             "171k8b8s42s3w73l7ln9jqwk88w4l7r1km2blx1vy898c854yvpr"))))
     (build-system gnu-build-system)
-    (inputs `(("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list xorg-server))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Void (null) input driver for X server")
     (description
@@ -2712,17 +2660,17 @@ as USB mice.")
 (define-public xf86-video-amdgpu
   (package
     (name "xf86-video-amdgpu")
-    (version "19.1.0")
+    (version "21.0.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://xorg/individual/driver/"
                            "xf86-video-amdgpu-" version ".tar.bz2"))
        (sha256
-        (base32 "0pgy4ihnja0vm8504qw7qxh3pdpa3p9k6967nz15m6b1mvha83jg"))))
+        (base32 "125dq85n46yqmnmr2hknxwcqicwlvz2b2phf0m963fpg9l1j6y30"))))
     (build-system gnu-build-system)
-    (inputs `(("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list xorg-server))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "AMD Radeon video driver for X server")
     (description
@@ -2746,8 +2694,8 @@ X server.")
            "07p5vdsj2ckxb6wh02s61akcv4qfg6s1d5ld3jn3lfaayd3f1466"))
         (patches (search-patches "xf86-video-ark-remove-mibstore.patch"))))
     (build-system gnu-build-system)
-    (inputs `(("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list xorg-server))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Ark Logic video driver for X server")
     (description
@@ -2768,8 +2716,8 @@ X server.")
                (base32
                 "1pm2cy81ma7ldsw0yfk28b33h9z2hcj5rccrxhfxfgvxsiavrnqy"))))
     (build-system gnu-build-system)
-    (inputs `(("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list xorg-server))
+    (native-inputs (list pkg-config))
     (synopsis "ASpeed Technologies video driver for X server")
     (description
      "xf86-video-ast is an ASpeed Technologies video driver for the Xorg
@@ -2777,27 +2725,31 @@ X server.")
     (license license:x11)))
 
 (define-public xf86-video-ati
-  (package
-    (name "xf86-video-ati")
-    (version "19.1.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "mirror://xorg/individual/driver/"
-                           "xf86-video-ati-" version ".tar.bz2"))
-       (sha256
-        (base32 "0j9w4axsqlycv4v14g53xyhkm9h7d27b2fcv9lrzb9gf54b5m7v5"))))
-    (build-system gnu-build-system)
-    (inputs `(("mesa" ,mesa)
-              ("xorgproto" ,xorgproto)
-              ("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (home-page "https://www.x.org/wiki/")
-    (synopsis "ATI Radeon video driver for X server")
-    (description
-     "xf86-video-ati is an ATI Radeon video driver for the Xorg
+  ;; The current release is too old to build with our inputs.
+  (let ((commit "5eba006e4129e8015b822f9e1d2f1e613e252cda")
+        (revision "1"))
+    (package
+      (name "xf86-video-ati")
+      (version (git-version "19.1.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://gitlab.freedesktop.org/xorg/driver/xf86-video-ati.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "1n49wx0v13jh8vv17sxgrmmpi1mk3n2wph07jfmxmzqahpcn4lkn"))))
+      (build-system gnu-build-system)
+      (inputs (list mesa xorgproto xorg-server))
+      (native-inputs
+       (list pkg-config autoconf automake libtool))
+      (home-page "https://www.x.org/wiki/")
+      (synopsis "ATI Radeon video driver for X server")
+      (description
+       "xf86-video-ati is an ATI Radeon video driver for the Xorg
 X server.")
-    (license license:x11)))
+      (license license:x11))))
 
 
 (define-public xf86-video-cirrus
@@ -2815,8 +2767,8 @@ X server.")
           (base32
             "1asifc6ld2g9kap15vfhvsvyl69lj7pw3d9ra9mi4najllh7pj7d"))))
     (build-system gnu-build-system)
-    (inputs `(("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list xorg-server))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Cirrus Logic video driver for X server")
     (description
@@ -2836,8 +2788,8 @@ X server.")
        (sha256
         (base32 "1fcm9vwgv8wnffbvkzddk4yxrh3kc0np6w65wj8k88q7jf3bn4ip"))))
     (build-system gnu-build-system)
-    (inputs `(("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list xorg-server))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Dummy video driver for X server")
     (description
@@ -2860,8 +2812,8 @@ X server.")
           (base32
             "16a66zr0l1lmssa07i3rzy07djxnb45c17ks8c71h8l06xgxihyw"))))
     (build-system gnu-build-system)
-    (inputs `(("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list xorg-server))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Framebuffer device video driver for X server")
     (description
@@ -2895,17 +2847,20 @@ framebuffer device.")
          ("xorg-server" ,xorg-server)
          ("zlib" ,zlib)))
       (native-inputs
-       `(("pkg-config" ,pkg-config)
-         ("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("libtool" ,libtool)))
+       (list pkg-config autoconf automake libtool))
        ;; This driver is only supported on ARM systems.
       (supported-systems '("armhf-linux" "aarch64-linux"))
       (arguments
        `(#:configure-flags
          (list (string-append "--with-xorg-conf-dir="
                               (assoc-ref %outputs "out")
-                              "/share/X11/xorg.conf.d"))))
+                              "/share/X11/xorg.conf.d"))
+         #:phases
+         (modify-phases %standard-phases
+           (replace 'bootstrap
+             (lambda _
+               ;; autogen.sh calls configure unconditionally.
+               (invoke "autoreconf" "-vfi"))))))
       (home-page "https://www.x.org/wiki/")
       (synopsis "Adreno video driver for X server")
       (description
@@ -2926,8 +2881,8 @@ It supports a variety of Adreno graphics chipsets.")
        (sha256
         (base32 "0r2dz0agg0k5wrqdbicji6mh6svzyl0xgqk76hpcfdlzn2zx15zl"))))
     (build-system gnu-build-system)
-    (inputs `(("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list xorg-server))
+    (native-inputs (list pkg-config))
     (supported-systems
      ;; This driver is only supported on i686 systems.
      (filter (lambda (system) (string-prefix? "i686-" system))
@@ -2984,9 +2939,8 @@ compositing.  Both support Xv overlay and dynamic rotation with XRandR.")
           (base32
            "1lkpspvrvrp9s539bhfdjfh4andaqyk63l6zjn8m3km95smk6a45"))))
     (build-system gnu-build-system)
-    (inputs `(("xorgproto" ,xorgproto)
-              ("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list xorgproto xorg-server))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "GLINT/Permedia video driver for X server")
     (description
@@ -3010,8 +2964,8 @@ X server.")
           (base32
            "1snhpv1igrhifcls3r498kjd14ml6x2xvih7zk9xlsd1ymmhlb4g"))))
     (build-system gnu-build-system)
-    (inputs `(("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list xorg-server))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "I128 video driver for X server")
     (description
@@ -3044,10 +2998,7 @@ X server.")
                 ("libxfont" ,libxfont2)
                 ("xorg-server" ,xorg-server)))
       (native-inputs
-       `(("pkg-config" ,pkg-config)
-         ("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("libtool" ,libtool)))
+       (list pkg-config autoconf automake libtool))
       (supported-systems
        ;; This driver is only supported on Intel systems.
        (filter (lambda (system) (or (string-prefix? "i686-" system)
@@ -3077,13 +3028,12 @@ It supports a variety of Intel graphics chipsets.")
         (sha256
           (base32
            "171wg8r6py1l138s58rlapin3rlpwsg9spmvhc7l68mm3g3hf1vs"))
-        (patches (search-patches "xf86-video-mach64-glibc-2.20.patch"))))
+        (patches (search-patches "xf86-video-mach64-glibc-2.20.patch"
+                                 "xf86-video-mach64-bool-to-boolean.patch"))))
     (build-system gnu-build-system)
-    (inputs `(("mesa" ,mesa)
-              ("xorgproto" ,xorgproto)
-              ("xorg-server" ,xorg-server)))
+    (inputs (list mesa xorgproto xorg-server))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Mach64 video driver for X server")
     (description
@@ -3110,10 +3060,8 @@ the same level of support for generic VGA or 8514/A adapters.")
           (base32
            "0yaxpgyyj9398nzzr5vnsfxcis76z46p9814yzj8179yl7hld296"))))
     (build-system gnu-build-system)
-    (inputs `(("mesa" ,mesa)
-              ("xorgproto" ,xorgproto)
-              ("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list mesa xorgproto xorg-server))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Matrox video driver for X server")
     (description
@@ -3135,9 +3083,8 @@ the same level of support for generic VGA or 8514/A adapters.")
           (base32
             "0r4h673kw8fl7afc30anwbjlbhp82mg15fvaxf470xg7z983k0wk"))))
     (build-system gnu-build-system)
-    (inputs `(("xorgproto" ,xorgproto)
-              ("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list xorgproto xorg-server))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "NeoMagic video driver for X server")
     (description
@@ -3187,8 +3134,8 @@ the same level of support for generic VGA or 8514/A adapters.")
           (base32
            "0bdk3pc5y0n7p53q4gc2ff7bw16hy5hwdjjxkm5j3s7hdyg6960z"))))
     (build-system gnu-build-system)
-    (inputs `(("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list xorg-server))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "NVIDIA video driver for X server")
     (description
@@ -3209,10 +3156,11 @@ supported, and the RENDER extension is not accelerated by this driver.")
        (uri (string-append "mirror://xorg/individual/driver/xf86-video-nouveau-"
                            version ".tar.bz2"))
        (sha256
-        (base32 "0sqm1jwjg15sp8v7039y2hsbhph8gpjd2bdzcqqiij2mgbi254s9"))))
+        (base32 "0sqm1jwjg15sp8v7039y2hsbhph8gpjd2bdzcqqiij2mgbi254s9"))
+       (patches (search-patches "xf86-video-nouveau-fixup-ABI.patch"))))
     (build-system gnu-build-system)
-    (inputs `(("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list xorg-server))
+    (native-inputs (list pkg-config))
     (home-page "https://nouveau.freedesktop.org")
     (synopsis "NVIDIA video driver for X server")
     (description
@@ -3235,14 +3183,14 @@ graphics cards.")
          (base32
           "0x9gq3hw6k661k82ikd1y2kkk4dmgv310xr5q59dwn4k6z37aafs"))))
     (build-system gnu-build-system)
-    (inputs `(("libx11" ,libx11)
-              ("libxext" ,libxext)
-              ("libxvmc" ,libxvmc)
-              ("mesa" ,mesa)
-              ("xorgproto" ,xorgproto)
-              ("xorg-server" ,xorg-server)))
+    (inputs (list libx11
+                  libxext
+                  libxvmc
+                  mesa
+                  xorgproto
+                  xorg-server))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Openchrome video driver for X server")
     (description
@@ -3263,15 +3211,14 @@ UniChrome Pro and Chrome9 integrated graphics processors.")
                 "xf86-video-qxl-" version ".tar.bz2"))
               (sha256
                (base32
-                "14jc24znnahhmz4kqalafmllsg8awlz0y6gpgdpk5ih38ph851mi"))))
+                "14jc24znnahhmz4kqalafmllsg8awlz0y6gpgdpk5ih38ph851mi"))
+              (patches (search-patches
+                        "xf86-video-qxl-fix-build.patch"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libxfont" ,libxfont2)
-        ("spice-protocol" ,spice-protocol)
-        ("xorg-server" ,xorg-server)
-        ("xorgproto" ,xorgproto)))
+      (list libxfont2 spice-protocol xorg-server xorgproto))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (synopsis "Qxl video driver for X server")
     (description "xf86-video-qxl is a video driver for the Xorg X server.
 This driver is intended for the spice qxl virtio device.")
@@ -3290,11 +3237,9 @@ This driver is intended for the spice qxl virtio device.")
                (base32
                 "0mz0v5mqmmbncr2drd5zvia1fb7frz2xqwflhhqbnaxx5j48c740"))))
     (build-system gnu-build-system)
-    (inputs `(("mesa" ,mesa)
-              ("xorgproto" ,xorgproto)
-              ("xorg-server" ,xorg-server)))
+    (inputs (list mesa xorgproto xorg-server))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "ATI Rage 128 video driver for X server")
     (description
@@ -3318,10 +3263,8 @@ This driver is intended for ATI Rage 128 based cards.")
           (base32
            "11pcrsdpdrwk0mrgv83s5nsx8a9i4lhmivnal3fjbrvi3zdw94rc"))))
     (build-system gnu-build-system)
-    (inputs `(("mesa" ,mesa)
-              ("xorgproto" ,xorgproto)
-              ("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list mesa xorgproto xorg-server))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Savage video driver for X server")
     (description
@@ -3345,8 +3288,8 @@ This driver is intended for ATI Rage 128 based cards.")
            "1g2r6gxqrmjdff95d42msxdw6vmkg2zn5sqv0rxd420iwy8wdwyh"))
         (patches (search-patches "xf86-video-siliconmotion-fix-ftbfs.patch"))))
     (build-system gnu-build-system)
-    (inputs `(("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list xorg-server))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Silicon Motion video driver for X server")
     (description
@@ -3370,11 +3313,9 @@ Xorg X server.")
          (base32
           "0nrs6cjldlhakx5987fiiggjrlzilsbdc7l9pz22x1iwslbkz78i"))))
     (build-system gnu-build-system)
-    (inputs `(("mesa" ,mesa)
-              ("xorgproto" ,xorgproto)
-              ("xorg-server" ,xorg-server)))
+    (inputs (list mesa xorgproto xorg-server))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Sis video driver for X server")
     (description
@@ -3398,8 +3339,8 @@ This driver supports SiS chipsets of 300/315/330/340 series.")
           (base32
             "04fgwgk02m4nimlv67rrg1wnyahgymrn6rb2cjj1l8bmzkii4glr"))))
     (build-system gnu-build-system)
-    (inputs `(("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list xorg-server))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "GX/TurboGX video driver for X server")
     (description
@@ -3422,8 +3363,8 @@ This driver supports SiS chipsets of 300/315/330/340 series.")
           (base32
             "07z3ngifwg2d4jgq8pms47n5lr2yn0ai72g86xxjnb3k20n5ym7s"))))
     (build-system gnu-build-system)
-    (inputs `(("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list xorg-server))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "SUNFFB video driver for X server")
     (description
@@ -3446,10 +3387,8 @@ This driver supports SiS chipsets of 300/315/330/340 series.")
           (base32
            "0qc5wzwf1n65si9rc37bh224pzahh7gp67vfimbxs0b9yvhq0i9g"))))
     (build-system gnu-build-system)
-    (inputs `(("mesa" ,mesa)
-              ("xorgproto" ,xorgproto)
-              ("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list mesa xorgproto xorg-server))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "3Dfx video driver for X server")
     (description
@@ -3473,9 +3412,8 @@ This driver supports SiS chipsets of 300/315/330/340 series.")
            "0cb161lvdgi6qnf1sfz722qn38q7kgakcvj7b45ba3i0020828r0"))
         (patches (search-patches "xf86-video-tga-remove-mibstore.patch"))))
     (build-system gnu-build-system)
-    (inputs `(("xorgproto" ,xorgproto)
-              ("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list xorgproto xorg-server))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "TGA video driver for X server")
     (description
@@ -3499,9 +3437,8 @@ X server.")
           (base32
            "0gxcar434kx813fxdpb93126lhmkl3ikabaljhcj5qn3fkcijlcy"))))
     (build-system gnu-build-system)
-    (inputs `(("xorgproto" ,xorgproto)
-              ("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list xorgproto xorg-server))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Trident video driver for X server")
     (description
@@ -3528,8 +3465,8 @@ X server.")
           (base32
             "0nf6ai74c60xk96kgr8q9mx6lrxm5id3765ws4d801irqzrj85hz"))))
     (build-system gnu-build-system)
-    (inputs `(("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list xorg-server))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "VESA video driver for X server")
     (description
@@ -3587,8 +3524,7 @@ X server.")
                (format #t "decompressing x86emu source code~%")
                (with-directory-excursion "libs"
                  (let ((srcs (assoc-ref inputs "xorg-server-sources"))
-                       (tar-binary (string-append (assoc-ref inputs "tar")
-                                                  "/bin/tar")))
+                       (tar-binary (search-input-file inputs "/bin/tar")))
                    (invoke tar-binary "xvf" srcs "--strip-components=3"
                            "--wildcards" "*/hw/xfree86/x86emu/")
                    ;; extract license:
@@ -3653,14 +3589,13 @@ server driver works.")
            "0v06qhm059klq40m2yx4wypzb7h53aaassbjfmm6clcyclj1k5s7"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("llvm" ,llvm)
-       ("mesa" ,mesa)                   ; for xatracker
-       ("xorg-server" ,xorg-server)))
+     (list libx11
+           libxext
+           llvm
+           mesa ; for xatracker
+           xorg-server))
     (native-inputs
-     `(("eudev" ,eudev)
-       ("pkg-config" ,pkg-config)))
+     (list eudev pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "VMware SVGA video driver for X server")
     (description
@@ -3685,9 +3620,8 @@ server driver works.")
         (patches
          (search-patches "xf86-video-voodoo-pcitag.patch"))))
     (build-system gnu-build-system)
-    (inputs `(("xorgproto" ,xorgproto)
-              ("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list xorgproto xorg-server))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Voodoo/Voodoo2 video driver for X server")
     (description
@@ -3808,10 +3742,9 @@ configuring modelines and gamma.")
             "1lr2nb1fhg5fk2fchqxdxyl739602ggwhmgl2wiv5c8qbidw7w8f"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libxxf86vm" ,libxxf86vm)
-        ("libx11" ,libx11)))
+      (list libxxf86vm libx11))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Alter a monitor's gamma correction")
     (description
@@ -3836,11 +3769,9 @@ monitor via the X video mode extension.")
             "15n3mnd4i5kh4z32qv11580qjgvnng0wry2y753ljrqkkrbkrp52"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libxmu" ,libxmu)
-        ("libxau" ,libxau)
-        ("libx11" ,libx11)))
+      (list libxmu libxau libx11))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://gitlab.freedesktop.org/xorg/app/xhost")
     (synopsis "Xorg server access control utility")
     (description
@@ -3864,7 +3795,7 @@ allowed to make connections to the X server.")
           (base32
             "0ns8abd27x7gbp4r44z3wc5k9zqxxj8zjnazqpcyr4n17nxp8xcp"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg XineramaProto protocol headers")
     (description
@@ -3895,15 +3826,15 @@ alternative implementations like XRandR or TwinView.")
             "1vb6xdd1xmk5f7pwc5zcbxfray5sf1vbnscqwf2yl8lv7gfq38im"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libxrender" ,libxrender)
-        ("libxrandr" ,libxrandr)
-        ("libxinerama" ,libxinerama)
-        ("libxext" ,libxext)
-        ("libxi" ,libxi)
-        ("libx11" ,libx11)
-        ("xorgproto" ,xorgproto)))
+      (list libxrender
+            libxrandr
+            libxinerama
+            libxext
+            libxi
+            libx11
+            xorgproto))
     (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Configure input devices for X server")
     (description
@@ -3911,10 +3842,10 @@ alternative implementations like XRandR or TwinView.")
     (license license:x11)))
 
 
-(define xkbcomp-intermediate            ;used as input for xkeyboard-config
+(define-public xkbcomp-intermediate        ;used as input for xkeyboard-config
   (package
     (name "xkbcomp-intermediate")
-    (version "1.4.4")
+    (version "1.4.5")
     (source
      (origin
        (method url-fetch)
@@ -3922,14 +3853,12 @@ alternative implementations like XRandR or TwinView.")
                            version ".tar.bz2"))
        (sha256
         (base32
-         "0zpjkbap9160pdd6jpgb5f0yg5281w0rkkx1l0i7g887lq1ydk2r"))))
+         "0pmhshqinwqh5rip670l3szjpywky67hv232ql6gvdj489n0hlb8"))))
     (build-system gnu-build-system)
     (inputs
-     `(("xorgproto" ,xorgproto)
-       ("libxkbfile" ,libxkbfile)
-       ("libx11" ,libx11)))
+     (list xorgproto libxkbfile libx11))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Compile XKB keyboard description")
     (description
@@ -3944,11 +3873,16 @@ explicitly specify most aspects of keyboard behaviour on per-key basis
 and to more closely track the logical and physical state of the
 keyboard.  It also includes a number of keyboard controls designed to
 make keyboards more accessible to people with physical impairments.")
-    (license license:x11)))
+    (license license:x11)
+
+    ;; The only reason this package is public is to make sure it's built and
+    ;; published by the continuous integration tool.
+    (properties '((hidden? . #t)))))
 
 (define-public xkbcomp ; using xkeyboard-config as input
   (package (inherit xkbcomp-intermediate)
     (name "xkbcomp")
+    (properties '())
     (inputs
       `(,@(package-inputs xkbcomp-intermediate)
         ("xkeyboard-config" ,xkeyboard-config)))
@@ -3975,10 +3909,9 @@ make keyboards more accessible to people with physical impairments.")
             "0sprjx8i86ljk0l7ldzbz2xlk8916z5zh78cafjv8k1a63js4c14"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libxkbfile" ,libxkbfile)
-        ("libx11" ,libx11)))
+      (list libxkbfile libx11))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "XKB event daemon demo")
     (description
@@ -3999,11 +3932,9 @@ requested commands if they occur.")
           (base32 "1yi3232g25hhp241irncd8znv3090k2gm0yjcdnz08h89y1zwn2v"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libx11" ,libx11)
-       ("libxkbfile" ,libxkbfile)
-        ("xorgproto" ,xorgproto)))
+     (list libx11 libxkbfile xorgproto))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Visualise an XKB keyboard layout description")
     (description
@@ -4029,11 +3960,9 @@ one from a running X server.")
             "0c412isxl65wplhl7nsk12vxlri29lk48g3p52hbrs3m0awqm8fj"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libxt" ,libxt)
-        ("libxaw" ,libxaw)
-        ("xorgproto" ,xorgproto)))
+      (list libxt libxaw xorgproto))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "XKB utilities")
     (description
@@ -4051,21 +3980,20 @@ extension to the X11 protocol.  It includes:
 (define-public xkeyboard-config
   (package
     (name "xkeyboard-config")
-    (version "2.31")
+    (version "2.34")
     (source
       (origin
         (method url-fetch)
         (uri (string-append
-              "mirror://xorg/individual/data/xkeyboard-config/xkeyboard-config-"
+              "ftp://ftp.freedesktop.org/pub/xorg//individual/data/xkeyboard-config/xkeyboard-config-"
               version
               ".tar.bz2"))
         (sha256
           (base32
-            "18xddaxh83zm698syh50w983jg6b7b8zgv0dfaf7ha485hgihi6s"))))
+            "1kmq2ykwmh10sd6155gml4jhdxmvsll6xdg7zw86czpfhrvd48dk"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libx11" ,libx11)
-        ("xkbcomp-intermediate" ,xkbcomp-intermediate)))
+      (list libx11 xkbcomp-intermediate))
     (native-inputs
       `(("gettext" ,gettext-minimal)
         ("perl" ,perl)
@@ -4097,10 +4025,9 @@ can be combined together using the @code{rules} component of this database.")
             "0szzd9nzn0ybkhnfyizb876irwnjsnb78rcaxx6prb71jmmbpw65"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libxmu" ,libxmu)
-        ("libx11" ,libx11)))
+      (list libxmu libx11))
     (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Kill a client by its X resource")
     (description
@@ -4126,9 +4053,9 @@ programs that have displayed undesired windows on a user's screen.")
             "10m3a046jvaw5ywx4y65kl84lsxqan70gww1g1r7cf96ijaqz1jp"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libxcb" ,libxcb)))
+      (list libxcb))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://gitlab.freedesktop.org/xorg/app/xlsatoms")
     (synopsis "List interned X server atoms")
     (description
@@ -4152,9 +4079,9 @@ programs that have displayed undesired windows on a user's screen.")
             "1h8931sn34mcip6vpi4v7hdmr1r58gkbw4s2p97w98kykks2lgvp"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libxcb" ,libxcb)))
+      (list libxcb))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "List client applications running on a display")
     (description
@@ -4179,10 +4106,9 @@ running on X server.")
          "0s6kxgv78chkwsqmhw929f4pf91gq63f4yvixxnan1h00cx0pf49"))))
     (build-system gnu-build-system)
     (inputs
-     `(("xorgproto" ,xorgproto)
-       ("libx11" ,libx11)))
+     (list xorgproto libx11))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "List fonts available from an X server")
     (description
@@ -4208,12 +4134,9 @@ protocol.")
        (list (string-append "--with-appdefaultdir="
                             %output ,%app-defaults-dir))))
     (inputs
-     `(("libx11" ,libx11)
-       ("libxaw" ,libxaw)
-       ("libxmu" ,libxmu)
-       ("libxt" ,libxt)))
+     (list libx11 libxaw libxmu libxt))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Browse and select X font names")
     (description
@@ -4275,10 +4198,9 @@ containing one glyph per cell.")
             "0z28331i2pm16x671fa9qwsfqdmr6a43bzwmp0dm17a3sx0hjgs7"))))
     (build-system gnu-build-system)
     (inputs
-      `(("xorgproto" ,xorgproto)
-        ("libx11" ,libx11)))
+      (list xorgproto libx11))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://gitlab.freedesktop.org/xorg/app/xmodmap")
     (synopsis "Modify keymaps and button mappings on X server")
     (description
@@ -4309,7 +4231,7 @@ tastes.")
           (base32
             "0k5pffyi5bx8dmfn033cyhgd3gf6viqj3x769fqixifwhbgy2777"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg SGML documentation tools")
     (description
@@ -4338,11 +4260,9 @@ refers to the included common xorg.css stylesheet.")
             "07qy9lwjvxighcmg6qvjkgagad3wwvidrfx0jz85lgynz3qy0dmr"))))
     (build-system gnu-build-system)
     (inputs
-      `(("xorgproto" ,xorgproto)
-        ("libxmu" ,libxmu)
-        ("libx11" ,libx11)))
+      (list xorgproto libxmu libx11))
     (native-inputs
-        `(("pkg-config" ,pkg-config)))
+        (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Print an X window dump from xwd")
     (description
@@ -4365,10 +4285,9 @@ it for output on various types of printers.")
          "18ckr8g1z50zkc01hprkpm1npwbq32yqib4b3l98c95z2q1yv4lv"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libx11" ,libx11)
-       ("xorgproto" ,xorgproto)))
+     (list libx11 xorgproto))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Display X server properties")
     (description
@@ -4392,12 +4311,9 @@ an X server.")
             "0ql75s1n3dm2m3g1ilb9l6hqh15r0v709bgghpwazy3jknpnvivv"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libxrender" ,libxrender)
-        ("libxrandr" ,libxrandr)
-        ("xorgproto" ,xorgproto)
-        ("libx11" ,libx11)))
+      (list libxrender libxrandr xorgproto libx11))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Command line interface to X RandR extension")
     (description
@@ -4419,10 +4335,9 @@ and Reflect (RandR) extension.")
           (base32 "1d78prd8sfszq2rwwlb32ksph4fymf988lp75aj8iysg44f06pag"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libxmu" ,libxmu)
-        ("libx11" ,libx11)))
+      (list libxmu libx11))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://gitlab.freedesktop.org/xorg/app/xrdb")
     (synopsis "X server resource database utility")
     (description
@@ -4450,9 +4365,9 @@ file.")
             "0lv3rlshh7s0z3aqx5ahnnf8cl082m934bk7gv881mz8nydznz98"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libx11" ,libx11)))
+      (list libx11))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Refresh all or part of an X screen")
     (description
@@ -4478,12 +4393,9 @@ up your screen.")
             "0my987wjvra7l92ry6q44ky383yg3phzxhdbn3lqhapm1ll9bzg4"))))
     (build-system gnu-build-system)
     (inputs
-      `(("xorgproto" ,xorgproto)
-        ("libxmu" ,libxmu)
-        ("libxext" ,libxext)
-        ("libx11" ,libx11)))
+      (list xorgproto libxmu libxext libx11))
     (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "User preference utility for X server")
     (description
@@ -4507,11 +4419,9 @@ up your screen.")
             "0z21mqvmdl6rl63q77479wgkfygnll57liza1i3va7sr4fx45i0h"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libxmu" ,libxmu)
-        ("libxcursor" ,libxcursor)
-        ("xbitmaps" ,xbitmaps)))
+      (list libxmu libxcursor xbitmaps))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Root window parameter setting utility for X server")
     (description
@@ -4535,7 +4445,7 @@ a display running X server.")
           (base32
             "0wyp0yc6gi72hwc3kjmvm3vkj9p6s407cb6dxx37jh9wb68l8z1p"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg Network Transport layer library")
     (description
@@ -4562,11 +4472,9 @@ libICE, the X font server, and related components.")
             "0gz7fvxavqlrqynpfbrm2nc9yx8h0ksnbnv34fj7n1q6cq6j4lq3"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libxext" ,libxext)
-        ("libxv" ,libxv)
-        ("libx11" ,libx11)))
+      (list libxext libxv libx11))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://gitlab.freedesktop.org/xorg/app/xvinfo")
     (synopsis "Print out X-Video extension adaptor information")
     (description
@@ -4589,11 +4497,9 @@ extension.")
           (base32 "06q36fh55r62ms0igfxsanrn6gv8lh794q1bw9xzw51p2qs2papv"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libxt" ,libxt)
-        ("libxkbfile" ,libxkbfile)
-        ("xorgproto" ,xorgproto)))
+      (list libxt libxkbfile xorgproto))
     (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Dump current contents of X window or screen to file")
     (description
@@ -4622,10 +4528,9 @@ dump and twice when the dump is completed.")
             "03h8clirhw5ki1xxp18xbf5vynm7r0dwspsgfin6cxn4vx0m8h3s"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libx11" ,libx11)
-        ("xorgproto" ,xorgproto)))
+      (list libx11 xorgproto))
     (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Window information utility for X server")
     (description
@@ -4650,10 +4555,9 @@ Various information is displayed depending on which options are selected.")
             "1a8hdgy40smvblnh3s9f0vkqckl68nmivx7d48zk34m8z18p16cr"))))
     (build-system gnu-build-system)
     (inputs
-      `(("xorgproto" ,xorgproto)
-        ("libx11" ,libx11)))
+      (list xorgproto libx11))
     (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Display an X window dump from xwd")
     (description
@@ -4677,9 +4581,9 @@ formatted dump file, such as produced by xwd.")
             "1c76zcjs39ljil6f6jpx1x17c8fnvwazz7zvl3vbjfcrlmm7rjmv"))))
     (build-system gnu-build-system)
     (inputs
-     `(("xorgproto" ,xorgproto)))
+     (list xorgproto))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "X color name database")
     (description
@@ -4704,9 +4608,9 @@ formatted dump file, such as produced by xwd.")
             "1ki4wiq2iivx5g4w5ckzbjbap759kfqd72yg18m3zpbb4hqkybxs"))))
     (build-system gnu-build-system)
     (propagated-inputs
-      `(("xorgproto" ,xorgproto)))
+      (list xorgproto))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg FixesProto protocol headers")
     (description
@@ -4733,11 +4637,9 @@ cannot be adequately worked around on the client side of the wire.")
     (build-system gnu-build-system)
     (propagated-inputs
       ;; These are all in the Requires or Requires.private field of xdamage.pc
-      `(("libxfixes" ,libxfixes)
-        ("xorgproto" ,xorgproto)
-        ("libx11" ,libx11)))
+      (list libxfixes xorgproto libx11))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg Damage Extension library")
     (description "Xorg library for the XDamage extension.")
@@ -4759,20 +4661,20 @@ cannot be adequately worked around on the client side of the wire.")
           (base32
             "0azqxllcsfxc3ilhz6kwc6x7m8wc477p59ir9p0yrsldx766zbar"))))
     (build-system gnu-build-system)
+    (outputs '("out" "doc"))             ;man pages represent 40% of the total
     (arguments
      `(#:configure-flags
        (list "--disable-static"
-             ;; Disable zero malloc check that fails when cross-compiling.
-             ,@(if (%current-target-system)
-                   '("--disable-malloc0returnsnull")
-                   '()))))
+             (string-append "--mandir="
+                            (assoc-ref %outputs "doc")
+                            "/share/man")
+             ,@(malloc0-flags))))
     (propagated-inputs
-      `(("xorgproto" ,xorgproto)))
+      (list xorgproto))
     (inputs
-      `(("libxau" ,libxau)
-        ("libx11" ,libx11)))
+      (list libxau libx11))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg Common extensions library")
     (description
@@ -4796,14 +4698,13 @@ cannot be adequately worked around on the client side of the wire.")
             "086p0axqj57nvkaqa6r00dnr9kyrn1m8blgf0zjy25zpxkbxn200"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:configure-flags '("--disable-static")))
+     `(#:configure-flags '("--disable-static" ,@(malloc0-flags))))
     (propagated-inputs
-      `(("xorgproto" ,xorgproto)))
+      (list xorgproto))
     (inputs
-      `(("libxext" ,libxext)
-        ("libx11" ,libx11)))
+      (list libxext libx11))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg Xinerama protocol library")
     (description "API for Xinerama extension to X11 protocol.")
@@ -4826,12 +4727,11 @@ cannot be adequately worked around on the client side of the wire.")
             "0mwc2jwmq03b1m9ihax5c6gw2ln8rc70zz4fsj3kb7440nchqdkz"))))
     (build-system gnu-build-system)
     (propagated-inputs
-      `(("printproto" ,printproto)))
+      (list printproto))
     (inputs
-      `(("libx11" ,libx11)
-        ("libxext" ,libxext)))
+      (list libx11 libxext))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg Print Client library")
     (description "Xorg Print Client library.")
@@ -4855,17 +4755,13 @@ cannot be adequately worked around on the client side of the wire.")
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
-       (list "--disable-static"
-             ;; Disable zero malloc check that fails when cross-compiling.
-             ,@(if (%current-target-system)
-                   '("--disable-malloc0returnsnull")
-                   '()))))
+       (list "--disable-static" ,@(malloc0-flags))))
     (propagated-inputs
-      `(("xorgproto" ,xorgproto)))
+      (list xorgproto))
     (inputs
-      `(("libx11" ,libx11)))
+      (list libx11))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg Render Extension library")
     (description "Library for the Render Extension to the X11 protocol.")
@@ -4889,12 +4785,11 @@ cannot be adequately worked around on the client side of the wire.")
     (arguments
      '(#:configure-flags '("--disable-static")))
     (propagated-inputs
-     `(("libxi" ,libxi)
-       ("xorgproto" ,xorgproto)))
+     (list libxi xorgproto))
     (inputs
-      `(("libx11" ,libx11)))
+      (list libx11))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg library for Xtest and Record extensions")
     (description
@@ -4926,14 +4821,13 @@ protocol and arbitrary X extension protocol.")
             "125hn06bd3d8y97hm2pbf5j55gg4r2hpd3ifad651i4sr7m16v6j"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:configure-flags '("--disable-static")))
+     `(#:configure-flags '(,@(malloc0-flags) "--disable-static")))
     (propagated-inputs
-     `(("xorgproto" ,xorgproto)))
+     (list xorgproto))
     (inputs
-      `(("libxext" ,libxext)
-        ("libx11" ,libx11)))
+      (list libxext libx11))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg XVideo Extension library")
     (description "Library for the X Video Extension to the X11 protocol.")
@@ -4975,14 +4869,12 @@ protocol and arbitrary X extension protocol.")
              (wrap-program (string-append (assoc-ref outputs "out")
                                           "/bin/mkfontdir")
                `("PATH" ":" prefix
-                 (,(string-append (assoc-ref inputs "mkfontscale")
-                                  "/bin"))))
-             #t)))))
+                 (,(dirname
+                    (search-input-file inputs "/bin/mkfontscale"))))))))))
     (inputs
-      `(("mkfontscale" ,mkfontscale)))
+      (list mkfontscale))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("automake" ,automake))) ;For up to date 'config.guess' and 'config.sub'.
+     (list pkg-config automake)) ;For up to date 'config.guess' and 'config.sub'.
     (home-page "https://www.x.org/wiki/")
     (synopsis "Create an index of X font files in a directory")
     (description
@@ -5007,9 +4899,9 @@ script around the mkfontscale program.")
             "0ivpxz0rx2a7nahkpkhfgymz7j0pwzaqvyqpdgw9afmxl1yp9yf6"))))
     (build-system gnu-build-system)
     (propagated-inputs
-      `(("util-macros" ,util-macros))) ; to get util-macros in (almost?) all package inputs
+      (list util-macros)) ; to get util-macros in (almost?) all package inputs
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg X11Proto protocol headers")
     (description
@@ -5042,12 +4934,11 @@ common definitions and porting layer.")
     (arguments
      '(#:configure-flags '("--disable-static")))
     (propagated-inputs
-      `(("xorgproto" ,xorgproto)))
+      (list xorgproto))
     (inputs
-      `(("libbsd" ,libbsd)
-        ("xtrans" ,xtrans)))
+      (list libbsd xtrans))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg Inter-Client Exchange library")
     (description "Xorg Inter-Client Exchange library.")
@@ -5072,9 +4963,9 @@ common definitions and porting layer.")
     (arguments
      '(#:configure-flags '("--disable-static")))
     (propagated-inputs
-      `(("xorgproto" ,xorgproto)))
+      (list xorgproto))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg Authorization library")
     (description
@@ -5085,7 +4976,7 @@ an X Window System display.")
 (define-public libxfixes
   (package
     (name "libxfixes")
-    (version "5.0.3")
+    (version "6.0.0")
     (source
       (origin
         (method url-fetch)
@@ -5095,16 +4986,16 @@ an X Window System display.")
                ".tar.bz2"))
         (sha256
           (base32
-            "1miana3y4hwdqdparsccmygqr3ic3hs5jrqfzp70hvi2zwxd676y"))))
+            "0k2v4i4r24y3kdr5ici1qqhp69djnja919xfqp54c2rylm6s5hd7"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--disable-static")))
     (propagated-inputs
-      `(("xorgproto" ,xorgproto)))
+      (list xorgproto))
     (inputs
-      `(("libx11" ,libx11)))
+      (list libx11))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg Fixes Extension library")
     (description "Library for the XFixes Extension to the X11 protocol.")
@@ -5128,14 +5019,11 @@ an X Window System display.")
     (arguments
      '(#:configure-flags '("--disable-static")))
     (propagated-inputs
-      `(("freetype" ,freetype)
-        ("libfontenc" ,libfontenc)
-        ("xorgproto" ,xorgproto)))
+      (list freetype libfontenc xorgproto))
     (inputs
-      `(("zlib" ,zlib)
-        ("xtrans" ,xtrans)))
+      (list zlib xtrans))
     (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg Font handling library")
     (description
@@ -5174,15 +5062,17 @@ new API's in libXft, or the legacy API's in libX11.")
           (base32
             "0q8hz3slga3w3ch8wp0k7ay9ilhz315qnab0w1y2x9w3cf7hv8rn"))))
     (build-system gnu-build-system)
+    (outputs '("out" "doc"))             ;man pages represent 28% of the total
     (arguments
-     '(#:configure-flags '("--disable-static")))
+     `(#:configure-flags (list "--disable-static"
+                               (string-append "--mandir="
+                                              (assoc-ref %outputs "doc")
+                                              "/share/man")
+                               ,@(malloc0-flags))))
     (propagated-inputs
-      `(("xorgproto" ,xorgproto)
-        ("libx11" ,libx11)
-        ("libxext" ,libxext)
-        ("libxfixes" ,libxfixes)))
+      (list xorgproto libx11 libxext libxfixes))
     (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg Input Extension library")
     (description "Library for the XInput Extension to the X11 protocol.")
@@ -5204,15 +5094,12 @@ new API's in libXft, or the legacy API's in libX11.")
             "08z0mqywrm7ij8bxlfrx0d2wy6kladdmkva1nw5k6qix82z0xsla"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:configure-flags '("--disable-static")))
+     `(#:configure-flags '("--disable-static" ,@(malloc0-flags))))
     (propagated-inputs
       ;; In accordance with xrandr.pc.
-      `(("libx11" ,libx11)
-        ("libxext" ,libxext)
-        ("libxrender" ,libxrender)
-        ("xorgproto" ,xorgproto)))
+      (list libx11 libxext libxrender xorgproto))
     (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg Resize and Rotate Extension library")
     (description
@@ -5235,15 +5122,13 @@ new API's in libXft, or the legacy API's in libX11.")
             "1kbdjsvkm5l7axv7g477qj18sab2wnqhliy6197syzizgfbsfgbb"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:configure-flags '("--disable-static")))
+     `(#:configure-flags '(,@(malloc0-flags) "--disable-static")))
     (propagated-inputs
-      `(("libxv" ,libxv)))
+      (list libxv))
     (inputs
-      `(("xorgproto" ,xorgproto)
-        ("libxext" ,libxext)
-        ("libx11" ,libx11)))
+      (list xorgproto libxext libx11))
     (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg XvMC library")
     (description "Xorg XvMC library.")
@@ -5265,14 +5150,13 @@ new API's in libXft, or the legacy API's in libX11.")
             "0mydhlyn72i7brjwypsqrpkls3nm6vxw0li8b2nw0caz7kwjgvmg"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:configure-flags '("--disable-static")))
+     `(#:configure-flags '("--disable-static" ,@(malloc0-flags))))
     (propagated-inputs
-      `(("libxext" ,libxext)
-        ("xorgproto" ,xorgproto)))
+      (list libxext xorgproto))
     (inputs
-      `(("libx11" ,libx11)))
+      (list libx11))
     (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg XF86 Video Mode Extension library")
     (description
@@ -5296,19 +5180,20 @@ protocol.")
           (base32
            "0d2chjgyn5lr9sfhacfvqgnj9l9faz11vn322a06jd6lk3dxcpm5"))))
     (build-system gnu-build-system)
+    (outputs '("out" "doc"))                      ;5.5 MiB of man pages
     (propagated-inputs
-      `(("libpthread-stubs" ,libpthread-stubs)
-        ("libxau" ,libxau)
-        ("libxdmcp" ,libxdmcp)))
+      (list libpthread-stubs libxau libxdmcp))
     (inputs
-      `(("xcb-proto" ,xcb-proto)
-        ("libxslt" ,libxslt)))
+      (list xcb-proto libxslt))
     (native-inputs
       `(("pkg-config" ,pkg-config)
         ("python" ,python-minimal-wrapper)))
     (arguments
-     `(#:configure-flags '("--enable-xkb"
-                           "--disable-static")))
+     `(#:configure-flags (list "--enable-xkb"
+                               "--disable-static"
+                               (string-append "--mandir="
+                                              (assoc-ref %outputs "doc")
+                                              "/share/man"))))
     (home-page "https://xcb.freedesktop.org/")
     (synopsis "The X C Binding (XCB) library")
     (description
@@ -5327,78 +5212,96 @@ over Xlib, including:
 - easy extension implementation: interfaces auto-generated from XML-XCB.")
     (license license:x11)))
 
+(define-public libxcvt
+  (package
+    (name "libxcvt")
+    (version "0.1.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://www.x.org/releases/individual"
+                                  "/lib/libxcvt-" version ".tar.xz"))
+              (sha256
+               (base32
+                "0acc7vrj5kfb19zvyl7f29rnsvx383dvwc19k70r8prm1lccxsr7"))))
+    (build-system meson-build-system)
+    (home-page "https://gitlab.freedesktop.org/xorg/lib/libxcvt")
+    (synopsis "VESA Coordinated Video Timings (CVT) library")
+    (description "@code{libxcvt} is a library providing a standalone version
+of the X server implementation of the VESA Coordinated Video Timings (CVT)
+standard timing modelines generator.  @code{libxcvt} also provides a
+standalone version of the command line tool @command{cvt} copied from the Xorg
+implementation and is meant to be a direct replacement to the version provided
+by the Xorg server.")
+    (license license:x11)))
 
 (define-public xorg-server
   (package
     (name "xorg-server")
-    (version "1.20.11")
+    (version "21.1.2")
     (source
-      (origin
-        (method url-fetch)
-        (uri (string-append "mirror://xorg/individual/xserver/"
-                            "xorg-server-" version ".tar.bz2"))
-        (sha256
-         (base32
-          "0jacqgin8kcyy8fyv0lhgb4if8g9hp60rm3ih3s1mgps7xp7jk4i"))
-        (patches
-         (list
-          ;; See:
-          ;;   https://lists.fedoraproject.org/archives/list/devel@lists.
-          ;;      fedoraproject.org/message/JU655YB7AM4OOEQ4MOMCRHJTYJ76VFOK/
-          (origin
-            (method url-fetch)
-            (uri (string-append
-                  "http://pkgs.fedoraproject.org/cgit/rpms/xorg-x11-server.git"
-                  "/plain/06_use-intel-only-on-pre-gen4.diff"))
-            (sha256
-             (base32
-              "0mm70y058r8s9y9jiv7q2myv0ycnaw3iqzm7d274410s0ik38w7q"))
-            (file-name "xorg-server-use-intel-only-on-pre-gen4.diff"))))))
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://xorg.freedesktop.org/archive/individual"
+                           "/xserver/xorg-server-" version ".tar.xz"))
+       (sha256
+        (base32
+         "1c4dgvpv3kib8rhw37b00vc056nlb1z66c2lwzs4prz8kxmg82y2"))
+       (patches
+        (list
+         ;; See:
+         ;;   https://lists.fedoraproject.org/archives/list/devel@lists.
+         ;;      fedoraproject.org/message/JU655YB7AM4OOEQ4MOMCRHJTYJ76VFOK/
+         (origin
+           (method url-fetch)
+           (uri (string-append
+                 "http://pkgs.fedoraproject.org/cgit/rpms/xorg-x11-server.git"
+                 "/plain/06_use-intel-only-on-pre-gen4.diff"))
+           (sha256
+            (base32
+             "0mm70y058r8s9y9jiv7q2myv0ycnaw3iqzm7d274410s0ik38w7q"))
+           (file-name "xorg-server-use-intel-only-on-pre-gen4.diff"))))))
     (build-system gnu-build-system)
     (propagated-inputs
-      `(("libpciaccess" ,libpciaccess)
-        ("mesa" ,mesa)
-        ("pixman" ,pixman)
-        ("xorgproto" ,xorgproto)))
+     ;; The following libraries are required by xorg-server.pc.
+     (list libpciaccess libxcvt mesa pixman xorgproto))
     (inputs
-      `(("udev" ,eudev)
-        ("dbus" ,dbus)
-        ("libdmx" ,libdmx)
-        ("libepoxy" ,libepoxy)
-        ("libgcrypt" ,libgcrypt)
-        ("libxau" ,libxau)
-        ("libxaw" ,libxaw)
-        ("libxdmcp" ,libxdmcp)
-        ("libxfixes" ,libxfixes)
-        ("libxfont2" ,libxfont2)
-        ("libxkbfile" ,libxkbfile)
-        ("libxrender" ,libxrender)
-        ("libxres" ,libxres)
-        ("libxshmfence" ,libxshmfence)
-        ("libxt" ,libxt)
-        ("libxv" ,libxv)
-        ("xkbcomp" ,xkbcomp)
-        ("xkeyboard-config" ,xkeyboard-config)
-        ("xtrans" ,xtrans)
-        ("zlib" ,zlib)
-        ;; Inputs for Xephyr
-        ("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)))
+     `(("udev" ,eudev)
+       ("dbus" ,dbus)
+       ("libdmx" ,libdmx)
+       ("libepoxy" ,libepoxy)
+       ("libgcrypt" ,libgcrypt)
+       ("libxau" ,libxau)
+       ("libxaw" ,libxaw)
+       ("libxdmcp" ,libxdmcp)
+       ("libxfixes" ,libxfixes)
+       ("libxfont2" ,libxfont2)
+       ("libxkbfile" ,libxkbfile)
+       ("libxrender" ,libxrender)
+       ("libxres" ,libxres)
+       ("libxshmfence" ,libxshmfence)
+       ("libxt" ,libxt)
+       ("libxv" ,libxv)
+       ("xkbcomp" ,xkbcomp)
+       ("xkeyboard-config" ,xkeyboard-config)
+       ("xtrans" ,xtrans)
+       ("zlib" ,zlib)
+       ;; Inputs for Xephyr
+       ("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)))
     (native-inputs
      `(("python" ,python-wrapper)
        ("pkg-config" ,pkg-config)))
     (arguments
-     `(#:parallel-tests? #f
-       #:configure-flags
+     `(#:configure-flags
        (list (string-append "--with-xkb-path="
                             (assoc-ref %build-inputs "xkeyboard-config")
                             "/share/X11/xkb")
              (string-append "--with-xkb-output="
                             "/tmp") ; FIXME: This is a bit doubtful; where should
-                                    ; the compiled keyboard maps go?
+                                        ; the compiled keyboard maps go?
              (string-append "--with-xkb-bin-directory="
                             (assoc-ref %build-inputs "xkbcomp")
                             "/bin")
@@ -5407,19 +5310,19 @@ over Xlib, including:
              ;; It's not used anyway, so set it to empty.
              "--with-default-font-path="
 
+             ;; Enable the X security extensions (ssh -X).
+             "--enable-xcsecurity"
+
              ;; The default is to use "uname -srm", which captures the kernel
              ;; version and makes builds non-reproducible.
              "--with-os-name=GNU"
-
-             "--with-os-vendor=GuixSD"    ;not strictly needed, but looks nice
-
+             "--with-os-vendor=Guix"    ; not strictly needed, but looks nice
 
              ;; For the log file, etc.
              "--localstatedir=/var"
-             ;; For sddm
+             ;; For sddm.
              "--enable-kdrive"
              "--enable-xephyr")
-
        #:phases
        (modify-phases %standard-phases
          (add-before 'configure 'pre-configure
@@ -5438,9 +5341,7 @@ over Xlib, including:
                (("^BUILD_DATE=.*$")
                 "BUILD_DATE=19700101\n")
                (("^BUILD_TIME=.*$")
-                "BUILD_TIME=000001\n"))
-
-             #t)))))
+                "BUILD_TIME=000001\n")))))))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg implementation of the X Window System")
     (description
@@ -5462,46 +5363,169 @@ draggable titlebars and borders.")
   (hidden-package
    (package
      (inherit xorg-server)
-     (version "1.20.10")
+     (version "21.1.1")
      (source
-       (origin
-         (method url-fetch)
-         (uri (string-append "mirror://xorg/individual/xserver/"
-                             "xorg-server-" version ".tar.bz2"))
-         (sha256
-          (base32
-           "16bwrf0ag41l7jbrllbix8z6avc5yimga7ihvq4ch3a5hb020x4p"))
-         (patches
-          (list
-           ;; See:
-           ;;   https://lists.fedoraproject.org/archives/list/devel@lists.
-           ;;      fedoraproject.org/message/JU655YB7AM4OOEQ4MOMCRHJTYJ76VFOK/
-           (origin
-             (method url-fetch)
-             (uri (string-append
-                   "http://pkgs.fedoraproject.org/cgit/rpms/xorg-x11-server.git"
-                   "/plain/06_use-intel-only-on-pre-gen4.diff"))
-             (sha256
-              (base32
-               "0mm70y058r8s9y9jiv7q2myv0ycnaw3iqzm7d274410s0ik38w7q"))
-             (file-name "xorg-server-use-intel-only-on-pre-gen4.diff")))))))))
+      (origin
+        (method url-fetch)
+        (uri (string-append "https://xorg.freedesktop.org/archive/individual"
+                            "/xserver/xorg-server-" version ".tar.xz"))
+        (sha256
+         (base32
+          "0md7dqsc5qb30gym06c4zc2cjsdc5ps8nywk1bkcpix05kppybkq"))
+        (patches
+         (list
+          ;; See:
+          ;;   https://lists.fedoraproject.org/archives/list/devel@lists.
+          ;;      fedoraproject.org/message/JU655YB7AM4OOEQ4MOMCRHJTYJ76VFOK/
+          (origin
+            (method url-fetch)
+            (uri (string-append
+                  "http://pkgs.fedoraproject.org/cgit/rpms/xorg-x11-server.git"
+                  "/plain/06_use-intel-only-on-pre-gen4.diff"))
+            (sha256
+             (base32
+              "0mm70y058r8s9y9jiv7q2myv0ycnaw3iqzm7d274410s0ik38w7q"))
+            (file-name "xorg-server-use-intel-only-on-pre-gen4.diff")))))))))
+
+(define-public eglexternalplatform
+  (package
+    (name "eglexternalplatform")
+    (version "1.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url "https://github.com/NVIDIA/eglexternalplatform")
+         (commit version)))
+       (file-name
+        (git-file-name name version))
+       (sha256
+        (base32 "0lr5s2xa1zn220ghmbsiwgmx77l156wk54c7hybia0xpr9yr2nhb"))))
+    (build-system copy-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-pkgconfig
+           (lambda* (#:key outputs #:allow-other-keys)
+             (substitute* "eglexternalplatform.pc"
+               (("/usr")
+                (assoc-ref outputs "out")))))
+         (add-after 'install 'revise
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out")))
+               (mkdir-p (string-append out "/include/EGL"))
+               (rename-file
+                (string-append out "/interface")
+                (string-append out "/include/EGL"))
+               (mkdir-p (string-append out "/share/pkgconfig"))
+               (rename-file
+                (string-append out "/eglexternalplatform.pc")
+                (string-append out "/share/pkgconfig/eglexternalplatform.pc"))
+               (for-each delete-file-recursively
+                         (list
+                          (string-append out "/samples")
+                          (string-append out "/COPYING")
+                          (string-append out "/README.md")))))))))
+    (synopsis "EGL External Platform interface")
+    (description "EGLExternalPlatform is an specification of the EGL External
+Platform interface for writing EGL platforms and their interactions with modern
+window systems on top of existing low-level EGL platform implementations.  This
+keeps window system implementation specifics out of EGL drivers by using
+application-facing EGL functions.")
+    (home-page "https://github.com/NVIDIA/eglexternalplatform")
+    (license license:expat)))
+
+(define-public egl-wayland
+  (package
+    (name "egl-wayland")
+    (version "1.1.9")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/NVIDIA/egl-wayland")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1iz86cpc4v7izckrcslllnw0vvvgsxg1sr65yb8s9d0f8xa8djdd"))))
+    (build-system meson-build-system)
+    (native-inputs
+     (list libglvnd ;needed for headers
+           mesa-headers pkg-config))
+    (inputs
+     (list mesa wayland wayland-protocols))
+    (propagated-inputs
+     (list eglexternalplatform))
+    (synopsis "EGLStream-based Wayland external platform")
+    (description "EGL-Wayland is an implementation of a EGL External Platform
+library to add client-side Wayland support to EGL on top of EGLDevice and
+EGLStream families of extensions.")
+    (home-page "https://github.com/NVIDIA/egl-wayland")
+    (license license:expat)))
 
 (define-public xorg-server-xwayland
-  (package/inherit xorg-server
+  (package
     (name "xorg-server-xwayland")
-    (inputs
-     `(("wayland" ,wayland)
-       ("wayland-protocols" ,wayland-protocols)
-       ,@(package-inputs xorg-server)))
+    (version "21.1.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://xorg.freedesktop.org/archive/individual"
+                           "/xserver/xwayland-" version ".tar.xz"))
+       (sha256
+        (base32
+         "18pqvg76grbsyxa3mm3j06i1l8cwb28nbn2gcnqpsk7x75zpbhpb"))))
+    (inputs (list font-dejavu
+                  dbus
+                  egl-wayland
+                  eudev
+                  libfontenc
+                  libdrm
+                  libepoxy
+                  libgcrypt
+                  libtirpc
+                  libxfont2
+                  libxkbfile
+                  pixman
+                  wayland
+                  wayland-protocols
+                  xkbcomp
+                  xkeyboard-config
+                  xorgproto
+                  xtrans))
+    (native-inputs (list pkg-config))
+    (build-system meson-build-system)
     (arguments
-     (substitute-keyword-arguments (package-arguments xorg-server)
-       ((#:configure-flags flags)
-        `(cons* "--enable-xwayland" "--disable-xorg"
-                "--disable-docs"    "--disable-devel-docs"
-                "--disable-xvfb"    "--disable-xnest"
-                "--disable-xquartz" "--disable-xwin"
-                ,flags))))
-    (synopsis "Xorg server with wayland backend")))
+     `(#:configure-flags
+       (list "-Dxwayland_eglstream=true"
+             (string-append "-Dxkb_dir="
+                            (assoc-ref %build-inputs "xkeyboard-config")
+                            "/share/X11/xkb")
+             (string-append "-Dxkb_bin_dir="
+                            (assoc-ref %build-inputs "xkbcomp") "/bin")
+             ;; The build system insist on providing a default font path; give
+             ;; that of dejavu, the same used for our fontconfig package.
+             (string-append "-Ddefault_font_path="
+                            (assoc-ref %build-inputs "font-dejavu")
+                            "/share/fonts")
+             "-Dxkb_output_dir=/tmp"
+             (format #f "-Dbuilder_string=\"Build ID: ~a ~a\"" ,name ,version)
+             "-Dxcsecurity=true"
+             "-Ddri3=true"
+             "-Dglamor=true"
+             ;; For the log file, etc.
+             "--localstatedir=/var")
+       #:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'patch-/bin/sh
+                    (lambda _
+                      (substitute* (find-files "." "\\.c$")
+                        (("/bin/sh") (which "sh"))))))))
+    (synopsis "Xorg server with Wayland backend")
+    (description "Xwayland is an X server for running X clients under
+Wayland.")
+    (home-page "https://www.x.org/wiki/")
+    (license license:x11)))
 
 
 ;; packages of height 4 in the propagated-inputs tree
@@ -5509,57 +5533,36 @@ draggable titlebars and borders.")
 (define-public libx11
   (package
     (name "libx11")
-    (version "1.6.10")
+    (version "1.7.3.1")
     (source
-      (origin
-        (method url-fetch)
-        (uri (string-append
-               "mirror://xorg/individual/lib/libX11-"
-               version
-               ".tar.bz2"))
-        (sha256
-          (base32
-            "09k2pqmqbn2m1bpgl7jfxyqxaaxsnzbnp2bp8ycmqldqi5ln4j5g"))))
-    (replacement libx11/fixed)
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://xorg.freedesktop.org/archive/"
+                           "/individual/lib/libX11-" version ".tar.xz"))
+       (sha256
+        (base32
+         "1289nvs52q9fnp7zl30bdpbvqggnjjb39vy0zll511zvcrr43z9g"))))
     (build-system gnu-build-system)
     (outputs '("out"
-               "doc"))                            ;8 MiB of man pages + XML
+               "doc"))                  ;8 MiB of man pages + XML
     (arguments
      `(#:configure-flags
        (list (string-append "--mandir="
                             (assoc-ref %outputs "doc")
                             "/share/man")
              "--disable-static"
-
-             ;; Disable zero malloc check that fails when cross-compiling.
-             ,@(if (%current-target-system)
-                   '("--disable-malloc0returnsnull")
-                   '()))))
+             ,@(malloc0-flags))))
     (propagated-inputs
-      `(("xorgproto" ,xorgproto)
-        ("libxcb" ,libxcb)))
+     (list xorgproto libxcb))
     (inputs
-      `(("xtrans" ,xtrans)))
+     (list xtrans))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("xorgproto" ,xorgproto)))
+     (list pkg-config xorgproto))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg Core X11 protocol client library")
     (description "Xorg Core X11 protocol client library.")
     (license license:x11)))
 
-(define-public libx11/fixed
-  (package
-    (inherit libx11)
-    (version "1.7.1A")
-    (source
-      (origin
-        (method url-fetch)
-        (uri "mirror://xorg/individual/lib/libX11-1.7.1.tar.bz2")
-        (sha256
-          (base32
-            "0isxad59hvdwggbxqqjjjg3zmih9xiq4d9mdsnqbyb2nmbg46kp6"))))))
-
 ;; packages of height 5 in the propagated-inputs tree
 
 (define-public libxcursor
@@ -5567,34 +5570,28 @@ draggable titlebars and borders.")
     (name "libxcursor")
     (version "1.2.0")
     (source
-      (origin
-        (method url-fetch)
-        (uri (string-append
-               "mirror://xorg/individual/lib/libXcursor-"
-               version
-               ".tar.bz2"))
-        (sha256
-          (base32
-            "10l7c9fm0jmpkm9ab9dz8r6m1pr87vvgqjnbx1psz50h4pwfklrs"))))
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://xorg/individual/lib/libXcursor-"
+             version
+             ".tar.bz2"))
+       (sha256
+        (base32
+         "10l7c9fm0jmpkm9ab9dz8r6m1pr87vvgqjnbx1psz50h4pwfklrs"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--disable-static")))
     (propagated-inputs
-      `(("libx11" ,libx11)
-        ("libxrender" ,libxrender)
-        ("libxfixes" ,libxfixes)
-        ("xorgproto" ,xorgproto)))
-    (native-inputs
-      `(("pkg-config" ,pkg-config)))
-;; TODO: add XCURSOR_PATH=.../share/icons to profile search paths, so
-;; libXcursor finds cursors installed into a profile.  If we solve bugs
-;; <http://bugs.gnu.org/20255> and <http://bugs.gnu.org/22138>, we can fix
-;; this with a search-path as follows:
-;;
-;;    (native-search-paths
-;;     (list (search-path-specification
-;;            (variable "XCURSOR_PATH")
-;;            (files '("share/icons")))))
+     (list libx11 libxrender libxfixes xorgproto))
+    (native-inputs
+     (list pkg-config))
+    ;; FIXME: The search path below won't be very effective until the bugs
+    ;; <http://bugs.gnu.org/20255> and <http://bugs.gnu.org/22138> are solved.
+    (native-search-paths
+     (list (search-path-specification
+            (variable "XCURSOR_PATH")
+            (files '("share/icons")))))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg Cursor management library")
     (description "Xorg Cursor management library.")
@@ -5603,7 +5600,7 @@ draggable titlebars and borders.")
 (define-public libxt
   (package
     (name "libxt")
-    (version "1.2.0")
+    (version "1.2.1")
     (source
       (origin
         (method url-fetch)
@@ -5613,7 +5610,7 @@ draggable titlebars and borders.")
                ".tar.bz2"))
         (sha256
           (base32
-           "0cbqlyssr8aia88c8i7z59z9d0kp3p2hp6683xhz9ndyv8qza7dk"))
+           "0q1x7842r8rcn2m0q4q9f69h4qa097fyizs8brzx5ns62s7w1737"))
         (patches (search-patches "libxt-guix-search-paths.patch"))))
     (build-system gnu-build-system)
     (outputs '("out"
@@ -5624,18 +5621,13 @@ draggable titlebars and borders.")
                             (assoc-ref %outputs "doc")
                             "/share/man")
              "--disable-static"
-             ;; Disable zero malloc check that fails when cross-compiling.
-             ,@(if (%current-target-system)
-                   '("--disable-malloc0returnsnull")
-                   '()))))
+             ,@(malloc0-flags))))
     (propagated-inputs
-      `(("libx11" ,libx11)
-        ("libice" ,libice)
-        ("libsm" ,libsm)))
+      (list libx11 libice libsm))
     (inputs
-      `(("libx11" ,libx11)))
+      (list libx11))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg XToolkit Intrinsics library")
     (description "Xorg XToolkit Intrinsics library.")
@@ -5645,7 +5637,7 @@ draggable titlebars and borders.")
 (define-public libxaw
   (package
     (name "libxaw")
-    (version "1.0.13")
+    (version "1.0.14")
     (source
       (origin
         (method url-fetch)
@@ -5655,19 +5647,16 @@ draggable titlebars and borders.")
                ".tar.bz2"))
         (sha256
           (base32
-            "1kdhxplwrn43d9jp3v54llp05kwx210lrsdvqb6944jp29rhdy4f"))))
+            "13kg59r3086383g1dyhnwxanhp2frssh9062mrgn34nzlf7gkbkn"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--disable-static")))
     (propagated-inputs
-      `(("libxext" ,libxext)
-        ("libxmu" ,libxmu)
-        ("libxpm" ,libxpm)
-        ("libxt" ,libxt)))
+      (list libxext libxmu libxpm libxt))
     (inputs
-      `(("xorgproto" ,xorgproto)))
+      (list xorgproto))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg Xaw library")
     (description
@@ -5689,13 +5678,9 @@ Intrinsics (Xt) Library.")
          "1iv8kdb18n9vk3is5fyh6l40ipq9mkgx8ppj86byf464vr1ais7l"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libxt" ,libxt)
-       ("libxmu" ,libxmu)
-       ("libxext" ,libxext)
-       ("xorgproto" ,xorgproto)))
+     (list libxt libxmu libxext xorgproto))
     (native-inputs
-     `(("bison" ,bison)
-       ("pkg-config" ,pkg-config)))
+     (list bison pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Tab Window Manager for the X Window System")
     (description "Twm is a window manager for the X Window System.
@@ -5719,9 +5704,9 @@ keyboard focus, and user-specified key and pointer button bindings.")
     (arguments
      '(#:configure-flags '("--disable-static")))
     (propagated-inputs
-     `(("libxcb" ,libxcb)))
+     (list libxcb))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://cgit.freedesktop.org/xcb/util/")
     (synopsis "Core XCB utility functions")
     (description
@@ -5757,13 +5742,11 @@ The XCB util module provides the following libraries:
     (arguments
      '(#:configure-flags '("--disable-static")))
     (native-inputs
-     `(("m4" ,m4)
-       ("pkg-config" ,pkg-config)))
+     (list m4 pkg-config))
     (inputs
-     `(("libxcb" ,libxcb)))
+     (list libxcb))
     (propagated-inputs
-     `(("xcb-util-renderutil" ,xcb-util-renderutil)
-       ("xcb-util-image" ,xcb-util-image)))
+     (list xcb-util-renderutil xcb-util-image))
     (home-page "https://cgit.freedesktop.org/xcb/util-cursor/")
     (synopsis "Port of libxcursor")
     (description "XCB-util-cursor is a port of libxcursor.")
@@ -5792,10 +5775,9 @@ The XCB util module provides the following libraries:
      (build-system gnu-build-system)
      (outputs '("out"))
      (inputs
-      `(("util-macros" ,util-macros)
-        ("xcb-proto" ,xcb-proto)))
+      (list util-macros xcb-proto))
      (propagated-inputs
-      `(("libxcb" ,libxcb)))
+      (list libxcb))
      (native-inputs
       `(("autoconf" ,autoconf)
         ("automake" ,automake)
@@ -5841,11 +5823,11 @@ numbers.")
     (arguments
      '(#:configure-flags '("--disable-static")))
     (propagated-inputs
-     `(("libxcb" ,libxcb)))
+     (list libxcb))
     (inputs
-     `(("xcb-util" ,xcb-util)))
+     (list xcb-util))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://cgit.freedesktop.org/xcb/util-image/")
     (synopsis "XCB port of Xlib's XImage and XShmImage")
     (description
@@ -5877,9 +5859,9 @@ The XCB util-image module provides the following library:
     (arguments
      '(#:configure-flags '("--disable-static")))
     (propagated-inputs
-     `(("libxcb" ,libxcb)))
+     (list libxcb))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://cgit.freedesktop.org/xcb/util-keysyms/")
     (synopsis "Standard X constants and conversion to/from keycodes")
     (description
@@ -5911,9 +5893,9 @@ The XCB util-keysyms module provides the following library:
     (arguments
      '(#:configure-flags '("--disable-static")))
     (propagated-inputs
-     `(("libxcb" ,libxcb)))
+     (list libxcb))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://cgit.freedesktop.org/xcb/util-renderutil/")
     (synopsis "Convenience functions for the Render extension")
     (description
@@ -5945,10 +5927,9 @@ The XCB util-renderutil module provides the following library:
     (arguments
      '(#:configure-flags '("--disable-static")))
     (propagated-inputs
-     `(("libxcb" ,libxcb)))
+     (list libxcb))
     (native-inputs
-     `(("m4" ,m4)
-       ("pkg-config" ,pkg-config)))
+     (list m4 pkg-config))
     (home-page "https://cgit.freedesktop.org/xcb/util-wm/")
     (synopsis "Client and window-manager helpers for ICCCM and EWMH")
     (description
@@ -5979,12 +5960,11 @@ The XCB util-wm module provides the following libraries:
                 "1fdbakx59vyh474skjydj1bbglpby3y03nl7mxn0z9v8gdhqz6yy"))))
     (build-system gnu-build-system)
     (inputs
-     `(("xorgproto" ,xorgproto)
-       ("libx11" ,libx11)))
+     (list xorgproto libx11))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (propagated-inputs
-     `(("xauth" ,xauth)))
+     (list xauth))
     (home-page "https://www.x.org/")
     (synopsis "Commands to start the X Window server")
     (description
@@ -6012,13 +5992,11 @@ user-friendly mechanism to start the X server.")
             "0i653s8g25cc0mimkwid9366bqkbyhdyjhckx7bw77j20hzrkfid"))))
     (build-system gnu-build-system)
     (propagated-inputs
-      `(("libxext" ,libxext)
-        ("libxmu" ,libxmu)
-        ("libxt" ,libxt)))
+      (list libxext libxmu libxt))
     (inputs
-     `(("libx11" ,libx11)))
+     (list libx11))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg Xaw3d library")
     (description
@@ -6026,6 +6004,27 @@ user-friendly mechanism to start the X server.")
 Intrinsics (Xt) Library.")
     (license license:x11)))
 
+(define-public libxpresent
+  (package
+    (name "libxpresent")
+    (version "1.0.0")
+    (source (origin
+              (method url-fetch)
+              (uri "mirror://xorg/individual/lib/libXpresent-1.0.0.tar.bz2")
+              (sha256
+               (base32
+                "12kvvar3ihf6sw49h6ywfdiwmb8i1gh8wasg1zhzp6hs2hay06n1"))))
+    (inputs
+     (list libx11 xorgproto libxext libxfixes libxrandr))
+    (native-inputs
+     (list pkg-config))
+    (build-system gnu-build-system)
+    (home-page "https://gitlab.freedesktop.org/xorg/lib/libxpresent")
+    (synopsis "Xlib-compatible API for the Present extension")
+    (description "This package provides a Xlib-based library for the X Present
+Extension.")
+    (license license:x11)))
+
 (define-public xclock
   (package
     (name "xclock")
@@ -6043,14 +6042,14 @@ Intrinsics (Xt) Library.")
        (list (string-append "--with-appdefaultdir="
                             %output ,%app-defaults-dir))))
     (inputs
-     `(("libxmu" ,libxmu)
-       ("libx11" ,libx11)
-       ("libxaw" ,libxaw)
-       ("libxrender" ,libxrender)
-       ("libxft" ,libxft)
-       ("libxkbfile" ,libxkbfile)))
-    (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list libxmu
+           libx11
+           libxaw
+           libxrender
+           libxft
+           libxkbfile))
+    (native-inputs
+     (list pkg-config))
     (home-page "https://gitlab.freedesktop.org/xorg/app/xclock")
     (synopsis "Analog / digital clock for X")
     (description "The xclock program displays the time in analog or digital
@@ -6077,9 +6076,9 @@ form.")
        (list (string-append "--with-appdefaultdir="
                             %output ,%app-defaults-dir))))
     (inputs
-     `(("libxaw" ,libxaw)))
+     (list libxaw))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Display or capture a magnified part of a X11 screen")
     (description "Xmag displays and captures a magnified snapshot of a portion
@@ -6106,9 +6105,9 @@ of an X11 screen.")
        (list (string-append "--with-appdefaultdir="
                             %output ,%app-defaults-dir))))
     (inputs
-     `(("libxaw" ,libxaw)))
+     (list libxaw))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Displays a message or query in a window")
     (description
@@ -6120,7 +6119,7 @@ to answer a question.  Xmessage can also exit after a specified time.")
 (define-public xterm
   (package
     (name "xterm")
-    (version "368")
+    (version "370")
     (source
      (origin
        (method url-fetch)
@@ -6130,7 +6129,7 @@ to answer a question.  Xmessage can also exit after a specified time.")
              (string-append "ftp://ftp.invisible-island.net/xterm/"
                             "xterm-" version ".tgz")))
        (sha256
-        (base32 "04p7db3j3n5dk1vvlas4231rh6jgr4qi6ppvpbq9xd5n62cidx9g"))))
+        (base32 "10lc72spa69n9d7zg9nwhgwz70qzidp5i17jgw3lq3qg1a25sg4n"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--enable-wide-chars" "--enable-load-vt-fonts"
@@ -6150,7 +6149,7 @@ to answer a question.  Xmessage can also exit after a specified time.")
                  (("=xterm")
                   (string-append "=" out "/bin/xterm")))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("luit" ,luit)
        ("libXft" ,libxft)
@@ -6176,7 +6175,7 @@ programs that cannot use the window system directly.")
 (define-public perl-x11-xcb
   (package
     (name "perl-x11-xcb")
-    (version "0.18")
+    (version "0.19")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -6184,7 +6183,7 @@ programs that cannot use the window system directly.")
                     "X11-XCB-" version ".tar.gz"))
               (sha256
                (base32
-                "1cjpghw7cnackw20lbd7yzm222kz5bnrwz52f8ay24d1f4pwrnxf"))))
+                "1rn8g0yy82v5zp12rhxic332dvqs63l7mykg028ngvccs7rllipp"))))
     (build-system perl-build-system)
     (arguments
      '(;; Disable parallel build to prevent a race condition.
@@ -6195,8 +6194,7 @@ programs that cannot use the window system directly.")
            (lambda _
              (setenv "PERL5LIB"
                      (string-append (getcwd) ":"
-                                    (getenv "PERL5LIB")))
-             #t))
+                                    (getenv "PERL5LIB")))))
          (add-before 'build 'patch-Makefile
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "Makefile"
@@ -6204,29 +6202,22 @@ programs that cannot use the window system directly.")
                ;; an error such as "XCB.so: undefined symbol: xcb_xinerama_id"
                (("^LDDLFLAGS = ")
                 (string-append "LDDLFLAGS = "
-                               "-lxcb -lxcb-util -lxcb-xinerama -lxcb-icccm ")))
-             #t)))
+                               "-lxcb -lxcb-util -lxcb-xinerama -lxcb-icccm "))))))
        ;; Tests require a running X11 server.
        #:tests? #f))
     (native-inputs
-     `(("perl-extutils-depends" ,perl-extutils-depends)
-       ("perl-extutils-pkgconfig" ,perl-extutils-pkgconfig)
-       ("perl-module-install" ,perl-module-install)
-       ("perl-test-deep" ,perl-test-deep)
-       ("perl-test-exception" ,perl-test-exception)))
+     (list perl-extutils-depends perl-extutils-pkgconfig
+           perl-module-install perl-test-deep perl-test-exception))
     (propagated-inputs
-     `(("perl-data-dump" ,perl-data-dump)
-       ("perl-mouse" ,perl-mouse)
-       ("perl-mousex-nativetraits" ,perl-mousex-nativetraits)
-       ("perl-try-tiny" ,perl-try-tiny)
-       ("perl-xml-descent" ,perl-xml-descent)
-       ("perl-xml-simple" ,perl-xml-simple)
-       ("perl-xs-object-magic" ,perl-xs-object-magic)))
+     (list perl-data-dump
+           perl-mouse
+           perl-mousex-nativetraits
+           perl-try-tiny
+           perl-xml-descent
+           perl-xml-simple
+           perl-xs-object-magic))
     (inputs
-     `(("libxcb" ,libxcb)
-       ("xcb-proto" ,xcb-proto)
-       ("xcb-util" ,xcb-util)
-       ("xcb-util-wm" ,xcb-util-wm)))
+     (list libxcb xcb-proto xcb-util xcb-util-wm))
     (home-page "https://metacpan.org/release/X11-XCB")
     (synopsis "Perl bindings for libxcb")
     (description
@@ -6276,10 +6267,9 @@ perl programs to display windows and graphics on X11 servers.")
         (base32 "1x3kvic52jgp2mvd5wzrqrprqi82cdk8l4075v8b33ksvj9mjqiw"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-encode-hanextra" ,perl-encode-hanextra)
-       ("perl-module-util" ,perl-module-util)))
+     (list perl-encode-hanextra perl-module-util))
     (propagated-inputs
-     `(("perl-x11-protocol" ,perl-x11-protocol)))
+     (list perl-x11-protocol))
     (home-page "https://metacpan.org/release/X11-Protocol-Other")
     (synopsis "Miscellaneous helpers for @code{X11::Protocol} connections")
     (description
@@ -6305,16 +6295,14 @@ Conventions Manual) and some of the @dfn{EWMH}
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list pkg-config autoconf automake))
     (inputs
-     `(("libX11" ,libx11)
-       ("libXext" ,libxext)
-       ("libXcomposite" ,libxcomposite)
-       ("libXfixes" ,libxfixes)
-       ("libXdamage" ,libxdamage)
-       ("libXrender" ,libxrender)))
+     (list libx11
+           libxext
+           libxcomposite
+           libxfixes
+           libxdamage
+           libxrender))
     (synopsis "X Compositing manager using RENDER")
     (description "xcompmgr is a sample compositing manager for X servers
 supporting the XFIXES, DAMAGE, RENDER, and COMPOSITE extensions.  It enables
@@ -6326,15 +6314,16 @@ basic eye-candy effects.")
 (define-public xpra
   (package
     (name "xpra")
-    (version "4.2.1")
+    (version "4.3.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://www.xpra.org/src/xpra-"
-                           version ".tar.gz"))
+                           version ".tar.xz"))
        (sha256
-        (base32 "0gqdcw5cfk919jk8g0g4xjxbsvr5j9gskn8q3cmrz388pvfvm8x7"))
-       (patches (search-patches "xpra-4.2-systemd-run.patch"))))
+        (base32 "1adp790v9lq3v9pnkyf4skv69n2pd7fjqikzw145swhq9aginh5z"))
+       (patches (search-patches "xpra-4.2-systemd-run.patch"
+                                "xpra-4.2-install_libs.patch"))))
     (build-system python-build-system)
     ;; see also http://xpra.org/trac/wiki/Dependencies
     (inputs `(("bash-minimal" ,bash-minimal)    ; for wrap-program
@@ -6350,6 +6339,7 @@ basic eye-candy effects.")
               ("libxcomposite" ,libxcomposite)
               ("libxdamage" ,libxdamage)
               ("libxext" ,libxext)
+              ("libxres" ,libxres)
               ("gtk+" ,gtk+)
               ("python-pycairo" ,python-pycairo)
               ("python-pygobject" ,python-pygobject)
@@ -6372,9 +6362,7 @@ basic eye-candy effects.")
               ("dbus" ,dbus)               ; For dbus-launch command.
               ("python-lz4" ,python-lz4) ; Faster compression than zlib.
               ("python-netifaces" ,python-netifaces)))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("pandoc" ,pandoc)
-                     ("python-cython" ,python-cython)))
+    (native-inputs (list pkg-config pandoc python-cython))
     (arguments
      `(#:configure-flags '("--without-Xdummy"
 						   "--without-Xdummy_wrapper"
@@ -6387,8 +6375,12 @@ basic eye-candy effects.")
                                         ; they seem to require python2.
        #:phases
        (modify-phases %standard-phases
-         ;; built by 'install phase
-         (delete 'build)
+         ;; Must pass the same flags as 'install, otherwise enabled modules may
+         ;; not be built.
+         (replace 'build
+           (lambda* (#:key configure-flags #:allow-other-keys)
+             (apply invoke (append (list "python" "setup.py" "build")
+                                   configure-flags))))
          (add-before 'install 'fix-paths
            (lambda* (#:key inputs outputs #:allow-other-keys)
              ;; Fix binary paths.
@@ -6423,7 +6415,8 @@ basic eye-candy effects.")
                ;; The trailing -- is intentional, so we only replace it inside
                ;; a command line.
                (("dbus-launch --")
-                (string-append (assoc-ref inputs "dbus") "/bin/dbus-launch --")))
+                (string-append (search-input-file inputs "/bin/dbus-launch")
+                               " --")))
              ;; /run/user does not exist on guix system
              (substitute* "./xpra/scripts/config.py"
                (("socket-dir.*: \"\",")
@@ -6465,11 +6458,7 @@ X11 servers, Windows, or macOS.")
          "1p7sl0js47ja4glmax93ci59h02ipqw3wxkh4f1qgaz5qjy9nn9l"))))
     (build-system gnu-build-system)
     (inputs
-     `(("anthy" ,anthy)
-       ("libedit" ,libedit)
-       ("libxft" ,libxft)
-       ("m17n-lib" ,m17n-lib)
-       ("ncurses" ,ncurses)))
+     (list anthy libedit libxft m17n-lib ncurses))
     (native-inputs
      `(("emacs" ,emacs-minimal)
        ("intltool" ,intltool)
@@ -6484,7 +6473,8 @@ X11 servers, Windows, or macOS.")
        (list "--with-anthy-utf8"
              (string-append "--with-lispdir=" %output "/share/emacs")
              ;; Set proper runpath
-             (string-append "LDFLAGS=-Wl,-rpath=" %output "/lib"))
+             (string-append "LDFLAGS=-Wl,-rpath=" %output "/lib")
+             "CFLAGS=-O2 -g -fcommon")
        #:phases
        (modify-phases %standard-phases
          ;; Set path of uim-el-agent and uim-el-helper-agent executables
@@ -6536,6 +6526,10 @@ and embedded platforms.")
      `(("gtk" ,gtk+)
        ("gtk" ,gtk+-2)
        ,@(package-inputs uim)))
+    (arguments
+     (substitute-keyword-arguments (package-arguments uim)
+       ((#:configure-flags configure-flags)
+        (append configure-flags (list "CFLAGS=-O2 -g -fcommon")))))
     (synopsis "Multilingual input method framework (GTK+ support)")))
 
 (define-public uim-qt
@@ -6549,7 +6543,8 @@ and embedded platforms.")
      (substitute-keyword-arguments (package-arguments uim)
        ((#:configure-flags configure-flags)
         (append configure-flags (list "--with-qt5-immodule"
-                                      "--with-qt5")))))
+                                      "--with-qt5"
+                                      "CPPFLAGS=-fcommon")))))
     (synopsis "Multilingual input method framework (Qt support)")))
 
 (define-public keynav
@@ -6568,15 +6563,15 @@ and embedded platforms.")
          "1gizjhji3yspxxxvb90js3z1bv18rbf5phxg8rciixpj3cccff8z"))))
     (build-system gnu-build-system)
     (inputs
-     `(("cairo" ,cairo)
-       ("glib" ,glib)
-       ("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxinerama" ,libxinerama)
-       ("libxtst" ,libxtst)
-       ("xdotool" ,xdotool)))
-    (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list cairo
+           glib
+           libx11
+           libxext
+           libxinerama
+           libxtst
+           xdotool))
+    (native-inputs
+     (list pkg-config))
     (arguments
      `(#:tests? #f ;No tests.
        #:phases
@@ -6629,10 +6624,8 @@ mouse click.  You can do everything mouse can do with a keyboard.")
                 "0rya202y87dwl35jnmq8hs3arzdrv5z4vf1xmi0py4rnmhdpszaw"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
-    (inputs `(("libxcomposite" ,libxcomposite)
-              ("libxdamage" ,libxdamage)
-              ("libxrender" ,libxrender)))
+     (list pkg-config))
+    (inputs (list libxcomposite libxdamage libxrender))
     (synopsis "Set the transparency of X11 windows")
     (description "@command{transset} is a simple program for X servers
 supporting the XFIXES, DAMAGE, and COMPOSITE extensions.  It lets the
@@ -6640,9 +6633,6 @@ user set the transparency on a window.")
     (home-page "https://gitlab.freedesktop.org/xorg/app/transset")
     (license license:x11)))
 
-(define-public transset-df
-  (deprecated-package "transset-df" transset))
-
 (define-public bdfresize
   (package
     (name "bdfresize")
@@ -6678,9 +6668,7 @@ user set the transparency on a window.")
               (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list pkg-config autoconf automake))
     (synopsis "Resize fonts in the BDF format")
     (description
      "This package provides @command{bdfresize}, a command to magnify or
@@ -6692,7 +6680,7 @@ output.")
 (define-public console-setup
   (package
     (name "console-setup")
-    (version "1.205")
+    (version "1.207")
     (source
      (origin
        (method git-fetch)
@@ -6700,7 +6688,7 @@ output.")
              (url "https://salsa.debian.org/installer-team/console-setup.git")
              (commit version)))
        (sha256
-        (base32 "0sf560s14firyvzpgww79ydzc6p3jvjkbvsi8zsr5m3hr833w0ba"))
+        (base32 "0fj93apsknx3lzbi2025pzr19q1gwnim8g4007aqqkhidc1msgx5"))
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (arguments
@@ -6719,8 +6707,7 @@ output.")
              (substitute* '("Keyboard/ckbcomp")
                (("\"cat ")
                 (string-append "\"" (which "cat")
-                               " ")))
-             #t))
+                               " ")))))
          (add-before 'build 'make-doubled-bdfs
            (lambda* (#:key native-inputs inputs #:allow-other-keys)
              (invoke "make" "-C" "Fonts"
@@ -6739,13 +6726,13 @@ output.")
                                                  "bash")
                                       "/bin/bash"))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("bdftopcf" ,bdftopcf)
-       ("bdfresize" ,bdfresize)
-       ("sharutils" ,sharutils)         ; for 'uuencode'
-       ("perl" ,perl)))
+     (list pkg-config
+           bdftopcf
+           bdfresize
+           sharutils ; for 'uuencode'
+           perl))
     (inputs
-     `(("perl" ,perl)))                 ; used by 'ckbcomp'
+     (list perl))                 ; used by 'ckbcomp'
     (synopsis "Set up the Linux console font and keyboard")
     (description
      "console-setup provides the console with the same keyboard
@@ -6782,10 +6769,9 @@ Thai).")
         (base32 "0858wn2p14bxpv9lvaz2bz1rk6zk0g8zgxf8iy595m8fqv4q2fya"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libpng" ,libpng)
-       ("libxcursor" ,libxcursor)))
+     (list libpng libxcursor))
     (synopsis "Decode X cursors")
     (description
      "xcur2png is a program decomposes an X cursor into a set of PNG images and
@@ -6826,7 +6812,7 @@ changed.")
                (base32
                 "16jqparb33lfq4cvd9l3jgd7fq86fk9gv2ixc8vgqibid6cnhi0x"))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("glib" ,glib)
        ("gettext" ,gettext-minimal)
@@ -6903,11 +6889,10 @@ box, and a calendar.  It uses GTK+, and will match your desktop theme.")
                (install-file "xvfb-run" bin)
                (install-file "xvfb-run.1" man)))))))
     (inputs
-     `(("util-linux" ,util-linux)       ; for getopt
-       ("xauth" ,xauth)
-       ("xorg-server" ,xorg-server)))
+     (list util-linux ; for getopt
+           xauth xorg-server))
     (native-inputs
-     `(("xterm" ,xterm)))               ; for the test
+     (list xterm))               ; for the test
     ;; This script is not part of the upstream xorg-server.  It is provided only
     ;; as a patch added to Debian's package.
     (home-page "https://packages.debian.org/sid/xorg-server-source")
@@ -6946,9 +6931,7 @@ the server and cleaning up before returning the exit status of the command.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (inputs
-     `(("imlib2" ,imlib2)
-       ("libx11" ,libx11)
-       ("libxinerama" ,libxinerama)))
+     (list imlib2 libx11 libxinerama))
     (home-page "https://github.com/ttzhou/setroot")
     (synopsis "Simple X background setter inspired by imlibsetroot and feh")
     (description "Setroot is a lightweight X background setter with feh's
diff --git a/gnu/packages/zig.scm b/gnu/packages/zig.scm
new file mode 100644
index 0000000000..b3de72226b
--- /dev/null
+++ b/gnu/packages/zig.scm
@@ -0,0 +1,105 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2021 Liliana Marie Prikler <liliana.prikler@gmail.com>
+;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
+;;; Copyright © 2021 Calum Irwin <calumirwin1@gmail.com>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages zig)
+  #:use-module (guix packages)
+  #:use-module (guix git-download)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix build-system cmake)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages llvm))
+
+(define-public zig
+  (package
+    (name "zig")
+    (version "0.9.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/ziglang/zig.git")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1zdz5s434c48z3y0c8l9wm2z1gxa7yyzd53zmr68lwj6mcl7by8x"))
+       (patches
+        (search-patches
+         "zig-disable-libc-note-test.patch"
+         "zig-use-system-paths.patch"))))
+    (build-system cmake-build-system)
+    (inputs
+     (list clang-13 ; Clang propagates llvm.
+           lld))
+    ;; Zig compiles fine with GCC, but also needs native LLVM libraries.
+    (native-inputs
+     (list llvm-13))
+    (arguments
+     `(#:configure-flags
+       (list ,@(if (%current-target-system)
+                   (string-append "-DZIG_TARGET_TRIPLE="
+                                  (%current-target-system))
+                   '()))
+       #:out-of-source? #f ; for tests
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'configure 'set-cache-dir
+           (lambda _
+             ;; Set cache dir, otherwise Zig looks for `$HOME/.cache'.
+             (setenv "ZIG_GLOBAL_CACHE_DIR"
+                     (string-append (getcwd) "/zig-cache"))))
+         (delete 'check)
+         (add-after 'install 'check
+           (lambda* (#:key outputs tests? #:allow-other-keys)
+             (when tests?
+               (invoke (string-append (assoc-ref outputs "out") "/bin/zig")
+                       ;; Testing the standard library takes >7.5GB RAM, and
+                       ;; will fail if it is OOM-killed.  The 'test-toolchain'
+                       ;; target skips standard library and doc tests.
+                       "build" "test-toolchain"
+                       ;; Stage 2 is experimental, not what we run with `zig',
+                       ;; and stage 2 tests require a lot of RAM.
+                       "-Dskip-stage2-tests"
+                       ;; Non-native tests try to link and execute non-native
+                       ;; binaries.
+                       "-Dskip-non-native")))))))
+    (native-search-paths
+     (list
+      (search-path-specification
+       (variable "C_INCLUDE_PATH")
+       (files '("include")))
+      (search-path-specification
+       (variable "CPLUS_INCLUDE_PATH")
+       (files '("include/c++" "include")))
+      (search-path-specification
+       (variable "LIBRARY_PATH")
+       (files '("lib" "lib64")))))
+    (synopsis "General purpose programming language and toolchain")
+    (description "Zig is a general-purpose programming language and
+toolchain.  Among other features it provides
+@itemize
+@item an Optional type instead of null pointers,
+@item manual memory management,
+@item generic data structures and functions,
+@item compile-time reflection and compile-time code execution,
+@item integration with C using zig as a C compiler, and
+@item concurrency via async functions.
+@end itemize")
+    (home-page "https://github.com/ziglang/zig")
+    (license license:expat)))
diff --git a/gnu/packages/zile.scm b/gnu/packages/zile.scm
index bb9270968c..4d4805c7be 100644
--- a/gnu/packages/zile.scm
+++ b/gnu/packages/zile.scm
@@ -121,8 +121,8 @@ default Emacs configuration, but it carries a much lighter feature set.")
                   "0wlli8hqal9ikmbl3a49kyhzyf164jk6mdbir3bclq2gxszs532d"))
                 (file-name (string-append name "-" version "-checkout"))))
       (inputs
-       `(("guile" ,guile-2.0)
-         ,@(package-inputs zile)))
+       (modify-inputs (package-inputs zile)
+         (prepend guile-2.0)))
       (native-inputs
        `(("m4" ,m4)                               ;for 'bootstrap'
          ("autoconf" ,autoconf)
diff --git a/gnu/packages/zwave.scm b/gnu/packages/zwave.scm
index 2019ec32df..3e99bd7687 100644
--- a/gnu/packages/zwave.scm
+++ b/gnu/packages/zwave.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2021 Philip McGrath <philip@philipmcgrath.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -21,11 +22,14 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix git-download)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build-system node)
   #:use-module (gnu packages)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages node-xyz)
   #:use-module (gnu packages libusb)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages perl)
+  #:use-module (gnu packages python)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages xml))
 
@@ -74,12 +78,9 @@
        ;; the device XML database and it's not entirely clear what to get from
        ;; them.
        #:tests? #f))
-    (native-inputs `(("which" ,which)
-                     ("pkg-config" ,pkg-config)
-                     ("perl" ,perl)               ;for tests
-                     ("perl-xml-simple" ,perl-xml-simple)))
-    (inputs `(("hidapi" ,hidapi)
-              ("eudev" ,eudev)))
+    (native-inputs (list which pkg-config perl ;for tests
+                         perl-xml-simple))
+    (inputs (list hidapi eudev))
     (home-page "http://www.openzwave.net/")
     (synopsis "Access Z-Wave devices from C++ programs")
     (description
@@ -88,3 +89,63 @@ PC controllers.  It allows developers to create applications that manipulate
 and respond to devices on a Z-Wave network, without requiring in-depth
 knowledge of the Z-Wave protocol.")
     (license license:lgpl3+)))
+
+(define-public node-openzwave-shared
+  (package
+    (name "node-openzwave-shared")
+    (version "1.7.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/OpenZWave/node-openzwave-shared")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1bqqy12dzqj05j9wsh50dmn84dddmhz0gjzvd3y20z4hpy1v8rsc"))))
+    (inputs
+     (list open-zwave node-nan))
+    (native-inputs
+     (list which python pkg-config))
+    (build-system node-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'build
+           ;; For some reason, `npm install` doesn't build
+           ;; the addon automatically, so we do it explicitly here.
+           ;; We go through `npx` so the npmrc file sets the
+           ;; configuration up properly.
+           (lambda* (#:key native-inputs inputs #:allow-other-keys)
+             (invoke (search-input-file (or native-inputs inputs) "/bin/npx")
+                     "--call"
+                     (string-append
+                      (search-input-file
+                       (or native-inputs inputs)
+                       "/lib/node_modules/npm/bin/node-gyp-bin/node-gyp")
+                      " rebuild")))))))
+    (home-page "https://github.com/OpenZWave/node-openzwave-shared")
+    (synopsis "Node.js bindings for OpenZWave")
+    (description
+     "With the @code{node-openzwave-shared} package, you can easily control
+and manage your Z-Wave devices (lights, dimmers, blinds, you name it) from
+within Node.js applications.  This library also supports secure
+devices (e.g. door locks) that require encryption.  All widely used Node.js
+versions are supported with the help of @code{node-nan}.
+
+This library is currently able to:
+@itemize @bullet
+@item
+scan a Z-Wave network and report on connected devices;
+@item
+write values to Z-Wave nodes;
+@item
+monitor the network for changes;
+@item
+heal nodes and/or the network; and
+@item
+perform management tasks: add or remove nodes, replace failed nodes,
+manage their group associations, etc.
+@end itemize")
+    (license license:isc)))
diff --git a/gnu/platform.scm b/gnu/platform.scm
new file mode 100644
index 0000000000..bb6519c71a
--- /dev/null
+++ b/gnu/platform.scm
@@ -0,0 +1,38 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2021 Mathieu Othacehe <othacehe@gnu.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu platform)
+  #:use-module (guix records)
+  #:export (platform
+            platform?
+            platform-target
+            platform-system
+            platform-linux-architecture))
+
+
+;;;
+;;; Platform record.
+;;;
+
+;; Description of a platform supported by the GNU system.
+(define-record-type* <platform> platform make-platform
+  platform?
+  (target             platform-target)               ;"x86_64-linux-gnu"
+  (system             platform-system)               ;"x86_64-linux"
+  (linux-architecture platform-linux-architecture    ;"amd64"
+                      (default #f)))
diff --git a/gnu/platforms/arm.scm b/gnu/platforms/arm.scm
new file mode 100644
index 0000000000..1e61741a35
--- /dev/null
+++ b/gnu/platforms/arm.scm
@@ -0,0 +1,36 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2021 Mathieu Othacehe <othacehe@gnu.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu platforms arm)
+  #:use-module (gnu platform)
+  #:use-module (gnu packages linux)
+  #:use-module (guix records)
+  #:export (armv7-linux
+            aarch64-linux))
+
+(define armv7-linux
+  (platform
+   (target "arm-linux-gnueabihf")
+   (system "armhf-linux")
+   (linux-architecture "arm")))
+
+(define aarch64-linux
+  (platform
+   (target "aarch64-linux-gnu")
+   (system "aarch64-linux")
+   (linux-architecture "arm64")))
diff --git a/gnu/platforms/hurd.scm b/gnu/platforms/hurd.scm
new file mode 100644
index 0000000000..0e5c58fd08
--- /dev/null
+++ b/gnu/platforms/hurd.scm
@@ -0,0 +1,28 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2021 Mathieu Othacehe <othacehe@gnu.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu platforms hurd)
+  #:use-module (gnu platform)
+  #:use-module (gnu packages linux)
+  #:use-module (guix records)
+  #:export (hurd))
+
+(define hurd
+  (platform
+   (target "i586-pc-gnu")
+   (system "i586-gnu")))
diff --git a/gnu/services.scm b/gnu/services.scm
index 1655218f2d..68fa4ebb63 100644
--- a/gnu/services.scm
+++ b/gnu/services.scm
@@ -319,7 +319,13 @@ the resulting list of services.  Each clause must have the form:
 
 where TYPE is a service type, such as 'guix-service-type', and VARIABLE is an
 identifier that is bound within BODY to the value of the service of that
-TYPE.  Consider this example:
+TYPE.
+
+Clauses can also remove services of a given type:
+
+  (delete TYPE)
+
+Consider this example:
 
   (modify-services %base-services
     (guix-service-type config =>
diff --git a/gnu/services/admin.scm b/gnu/services/admin.scm
index 763a4434e4..043517262f 100644
--- a/gnu/services/admin.scm
+++ b/gnu/services/admin.scm
@@ -149,7 +149,7 @@ for ROTATION."
 (define-record-type* <rottlog-configuration>
   rottlog-configuration make-rottlog-configuration
   rottlog-configuration?
-  (rottlog            rottlog-rottlog             ;package
+  (rottlog            rottlog-rottlog             ;file-like
                       (default rottlog))
   (rc-file            rottlog-rc-file             ;file-like
                       (default (file-append rottlog "/etc/rc")))
diff --git a/gnu/services/auditd.scm b/gnu/services/auditd.scm
index cffc226ec9..abde811f51 100644
--- a/gnu/services/auditd.scm
+++ b/gnu/services/auditd.scm
@@ -46,7 +46,7 @@ ignore\ndisk_error_action = syslog\n"))
 (define-record-type* <auditd-configuration>
   auditd-configuration make-auditd-configuration
   auditd-configuration?
-  (audit                   auditd-configuration-audit                          ; package
+  (audit                   auditd-configuration-audit                          ; file-like
                            (default audit))
   (configuration-directory auditd-configuration-configuration-directory))      ; file-like
 
diff --git a/gnu/services/authentication.scm b/gnu/services/authentication.scm
index d7efc48cd0..cb0ef6d85a 100644
--- a/gnu/services/authentication.scm
+++ b/gnu/services/authentication.scm
@@ -45,7 +45,7 @@
             nslcd-service-type))
 
 (define-configuration fprintd-configuration
-  (fprintd      (package fprintd)
+  (fprintd      (file-like fprintd)
                 "The fprintd package"))
 
 (define (fprintd-dbus-service config)
@@ -213,7 +213,7 @@
 
 (define-configuration nslcd-configuration
   (nss-pam-ldapd
-   (package nss-pam-ldapd)
+   (file-like nss-pam-ldapd)
    "The NSS-PAM-LDAPD package to use.")
 
   ;; Runtime options
diff --git a/gnu/services/avahi.scm b/gnu/services/avahi.scm
index 2dcf1d9c1b..3b8d0512c7 100644
--- a/gnu/services/avahi.scm
+++ b/gnu/services/avahi.scm
@@ -52,7 +52,7 @@
 (define-record-type* <avahi-configuration>
   avahi-configuration make-avahi-configuration
   avahi-configuration?
-  (avahi             avahi-configuration-avahi    ;<package>
+  (avahi             avahi-configuration-avahi    ;file-like
                      (default avahi))
   (debug?            avahi-configuration-debug?   ;Boolean
                      (default #f))
diff --git a/gnu/services/base.scm b/gnu/services/base.scm
index 50865055fe..fbd01e84d6 100644
--- a/gnu/services/base.scm
+++ b/gnu/services/base.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013-2022 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015, 2016 Alex Kost <alezost@gmail.com>
 ;;; Copyright © 2015, 2016, 2020 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
@@ -16,6 +16,7 @@
 ;;; Copyright © 2021 qblade <qblade@protonmail.com>
 ;;; Copyright © 2021 Hui Lu <luhuins@163.com>
 ;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2022 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -35,6 +36,9 @@
 (define-module (gnu services base)
   #:use-module (guix store)
   #:use-module (guix deprecation)
+  #:autoload   (guix diagnostics) (warning &fix-hint)
+  #:autoload   (guix i18n) (G_)
+  #:use-module (guix combinators)
   #:use-module (gnu services)
   #:use-module (gnu services admin)
   #:use-module (gnu services shepherd)
@@ -52,19 +56,27 @@
                 #:select (alsa-utils crda eudev e2fsprogs fuse gpm kbd lvm2 rng-tools))
   #:use-module (gnu packages bash)
   #:use-module ((gnu packages base)
-                #:select (coreutils glibc glibc-utf8-locales))
+                #:select (coreutils glibc glibc-utf8-locales tar))
+  #:use-module ((gnu packages compression) #:select (gzip))
+  #:autoload   (gnu packages guile-xyz) (guile-netlink)
+  #:autoload   (gnu packages hurd) (hurd)
   #:use-module (gnu packages package-management)
   #:use-module ((gnu packages gnupg) #:select (guile-gcrypt))
   #:use-module (gnu packages linux)
   #:use-module (gnu packages terminals)
   #:use-module ((gnu build file-systems)
-                #:select (mount-flags->bit-mask))
+                #:select (mount-flags->bit-mask
+                          swap-space->flags-bit-mask))
   #:use-module (guix gexp)
   #:use-module (guix records)
   #:use-module (guix modules)
   #:use-module ((guix self) #:select (make-config.scm))
+  #:use-module (guix diagnostics)
+  #:use-module (guix i18n)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-26)
+  #:use-module (srfi srfi-34)
+  #:use-module (srfi srfi-35)
   #:use-module (ice-9 match)
   #:use-module (ice-9 format)
   #:re-export (user-processes-service-type        ;backwards compatibility
@@ -80,17 +92,38 @@
             virtual-terminal-service-type
 
             static-networking
-
             static-networking?
-            static-networking-interface
-            static-networking-ip
-            static-networking-netmask
-            static-networking-gateway
+            static-networking-addresses
+            static-networking-links
+            static-networking-routes
             static-networking-requirement
 
+            network-address
+            network-address?
+            network-address-device
+            network-address-value
+            network-address-ipv6?
+
+            network-link
+            network-link?
+            network-link-name
+            network-link-type
+            network-link-arguments
+
+            network-route
+            network-route?
+            network-route-destination
+            network-route-source
+            network-route-device
+            network-route-ipv6?
+            network-route-gateway
+
             static-networking-service
             static-networking-service-type
 
+            %loopback-static-networking
+            %qemu-static-networking
+
             udev-configuration
             udev-configuration?
             udev-configuration-rules
@@ -164,6 +197,7 @@
             guix-publish-configuration-nar-path
             guix-publish-configuration-cache
             guix-publish-configuration-ttl
+            guix-publish-configuration-negative-ttl
             guix-publish-service-type
 
             gpm-configuration
@@ -557,7 +591,7 @@ down.")))
 (define-record-type* <rngd-configuration>
   rngd-configuration make-rngd-configuration
   rngd-configuration?
-  (rng-tools rngd-configuration-rng-tools)        ;package
+  (rng-tools rngd-configuration-rng-tools)        ;file-like
   (device    rngd-configuration-device))          ;string
 
 (define rngd-service-type
@@ -772,7 +806,7 @@ the message of the day, among other things."
 (define-record-type* <agetty-configuration>
   agetty-configuration make-agetty-configuration
   agetty-configuration?
-  (agetty           agetty-configuration-agetty   ;<package>
+  (agetty           agetty-configuration-agetty   ;file-like
                     (default util-linux))
   (tty              agetty-configuration-tty)     ;string | #f
   (term             agetty-term                   ;string | #f
@@ -1040,7 +1074,7 @@ the tty to run, among other things."
 (define-record-type* <mingetty-configuration>
   mingetty-configuration make-mingetty-configuration
   mingetty-configuration?
-  (mingetty         mingetty-configuration-mingetty ;<package>
+  (mingetty         mingetty-configuration-mingetty ;file-like
                     (default mingetty))
   (tty              mingetty-configuration-tty)     ;string
   (auto-login       mingetty-auto-login             ;string | #f
@@ -1112,9 +1146,9 @@ the tty to run, among other things."
   ;; TODO: See nscd.conf in glibc for other options to add.
   (caches     nscd-configuration-caches           ;list of <nscd-cache>
               (default %nscd-default-caches))
-  (name-services nscd-configuration-name-services ;list of <packages>
+  (name-services nscd-configuration-name-services ;list of file-like
                  (default '()))
-  (glibc      nscd-configuration-glibc            ;<package>
+  (glibc      nscd-configuration-glibc            ;file-like
               (default glibc)))
 
 (define-record-type* <nscd-cache> nscd-cache make-nscd-cache
@@ -1513,7 +1547,7 @@ archive' public keys, with GUIX."
 (define-record-type* <guix-configuration>
   guix-configuration make-guix-configuration
   guix-configuration?
-  (guix             guix-configuration-guix       ;<package>
+  (guix             guix-configuration-guix       ;file-like
                     (default guix))
   (build-group      guix-configuration-build-group ;string
                     (default "guixbuild"))
@@ -1534,7 +1568,7 @@ archive' public keys, with GUIX."
   (timeout          guix-configuration-timeout    ;integer
                     (default 0))
   (log-compression  guix-configuration-log-compression
-                    (default 'bzip2))
+                    (default 'gzip))
   (discover?        guix-configuration-discover?
                     (default #f))
   (extra-options    guix-configuration-extra-options ;list of strings
@@ -1678,7 +1712,14 @@ proxy of 'guix-daemon'...~%")
                                  (string-append "GUIX_LOCPATH="
                                                 #$glibc-utf8-locales
                                                 "/lib/locale")
-                                 "LC_ALL=en_US.utf8")
+                                 "LC_ALL=en_US.utf8"
+                                 ;; Make 'tar' and 'gzip' available so
+                                 ;; that 'guix perform-download' can use
+                                 ;; them when downloading from Software
+                                 ;; Heritage via '(guix swh)'.
+                                 (string-append "PATH="
+                                                #$(file-append tar "/bin") ":"
+                                                #$(file-append gzip "/bin")))
                            (if proxy
                                (list (string-append "http_proxy=" proxy)
                                      (string-append "https_proxy=" proxy))
@@ -1766,7 +1807,7 @@ proxy of 'guix-daemon'...~%")
 (define-record-type* <guix-publish-configuration>
   guix-publish-configuration make-guix-publish-configuration
   guix-publish-configuration?
-  (guix    guix-publish-configuration-guix        ;package
+  (guix    guix-publish-configuration-guix        ;file-like
            (default guix))
   (port    guix-publish-configuration-port        ;number
            (default 80))
@@ -1789,7 +1830,9 @@ proxy of 'guix-daemon'...~%")
   (workers     guix-publish-configuration-workers ;#f | integer
                (default #f))
   (ttl         guix-publish-configuration-ttl     ;#f | integer
-               (default #f)))
+               (default #f))
+  (negative-ttl guix-publish-configuration-negative-ttl ;#f | integer
+                (default #f)))
 
 (define-deprecated (guix-publish-configuration-compression-level config)
   "Return a compression level, the old way."
@@ -1824,8 +1867,8 @@ raise a deprecation warning if the 'compression-level' field was used."
                    lst))))
 
   (match-record config <guix-publish-configuration>
-    (guix port host nar-path cache workers ttl cache-bypass-threshold
-          advertise?)
+    (guix port host nar-path cache workers ttl negative-ttl
+          cache-bypass-threshold advertise?)
     (list (shepherd-service
            (provision '(guix-publish))
            (requirement `(user-processes
@@ -1851,6 +1894,11 @@ raise a deprecation warning if the 'compression-level' field was used."
                                                     #$(number->string ttl)
                                                     "s"))
                                   #~())
+                           #$@(if negative-ttl
+                                  #~((string-append "--negative-ttl="
+                                                    #$(number->string negative-ttl)
+                                                    "s"))
+                                  #~())
                            #$@(if cache
                                   #~((string-append "--cache=" #$cache)
                                      #$(string-append
@@ -1921,9 +1969,9 @@ command that allows you to share pre-built binaries with others over HTTP.")))
 (define-record-type* <udev-configuration>
   udev-configuration make-udev-configuration
   udev-configuration?
-  (udev   udev-configuration-udev                 ;<package>
+  (udev   udev-configuration-udev                 ;file-like
           (default eudev))
-  (rules  udev-configuration-rules                ;list of <package>
+  (rules  udev-configuration-rules                ;list of file-like
           (default '())))
 
 (define (udev-rules-union packages)
@@ -2146,62 +2194,98 @@ instance."
                               udev-service-type udev-extension))))))
     (service type #f)))
 
+(define (swap-space->shepherd-service-name space)
+  (let ((target (swap-space-target space)))
+    (symbol-append 'swap-
+                   (string->symbol
+                    (cond ((uuid? target)
+                           (uuid->string target))
+                          ((file-system-label? target)
+                           (file-system-label->string target))
+                          (else
+                           target))))))
+
+; TODO Remove after deprecation
+(define (swap-deprecated->shepherd-service-name sdep)
+  (symbol-append 'swap-
+                 (string->symbol
+                  (cond ((uuid? sdep)
+                         (string-take (uuid->string sdep) 6))
+                        ((file-system-label? sdep)
+                         (file-system-label->string sdep))
+                        (else
+                         sdep)))))
+
+(define swap->shepherd-service-name
+  (match-lambda ((? swap-space? space)
+                 (swap-space->shepherd-service-name space))
+                (sdep
+                 (swap-deprecated->shepherd-service-name sdep))))
+
 (define swap-service-type
   (shepherd-service-type
    'swap
-   (lambda (device)
-     (define requirement
-       (if (and (string? device)
-                (string-prefix? "/dev/mapper/" device))
-           (list (symbol-append 'device-mapping-
-                                (string->symbol (basename device))))
-           '()))
-
-     (define (device-lookup device)
+   (lambda (swap)
+     (define requirements
+       (cond ((swap-space? swap)
+              (map dependency->shepherd-service-name
+                   (swap-space-dependencies swap)))
+             ; TODO Remove after deprecation
+             ((and (string? swap) (string-prefix? "/dev/mapper/" swap))
+              (list (symbol-append 'device-mapping-
+                                   (string->symbol (basename swap)))))
+             (else
+              '())))
+
+     (define device-lookup
        ;; The generic 'find-partition' procedures could return a partition
        ;; that's not swap space, but that's unlikely.
-       (cond ((uuid? device)
-              #~(find-partition-by-uuid #$(uuid-bytevector device)))
-             ((file-system-label? device)
+       (cond ((swap-space? swap)
+              (let ((target (swap-space-target swap)))
+                (cond ((uuid? target)
+                       #~(find-partition-by-uuid #$(uuid-bytevector target)))
+                      ((file-system-label? target)
+                       #~(find-partition-by-label
+                          #$(file-system-label->string target)))
+                      (else
+                       target))))
+             ; TODO Remove after deprecation
+             ((uuid? swap)
+              #~(find-partition-by-uuid #$(uuid-bytevector swap)))
+             ((file-system-label? swap)
               #~(find-partition-by-label
-                 #$(file-system-label->string device)))
+                 #$(file-system-label->string swap)))
              (else
-              device)))
-
-     (define service-name
-       (symbol-append 'swap-
-                      (string->symbol
-                       (cond ((uuid? device)
-                              (string-take (uuid->string device) 6))
-                             ((file-system-label? device)
-                              (file-system-label->string device))
-                             (else
-                              device)))))
+              swap)))
 
      (with-imported-modules (source-module-closure '((gnu build file-systems)))
        (shepherd-service
-        (provision (list service-name))
-        (requirement `(udev ,@requirement))
-        (documentation "Enable the given swap device.")
+        (provision (list (swap->shepherd-service-name swap)))
+        (requirement `(udev ,@requirements))
+        (documentation "Enable the given swap space.")
         (modules `((gnu build file-systems)
                    ,@%default-modules))
         (start #~(lambda ()
-                   (let ((device #$(device-lookup device)))
+                   (let ((device #$device-lookup))
                      (and device
                           (begin
-                            (restart-on-EINTR (swapon device))
+                            (restart-on-EINTR (swapon device
+                                                      #$(if (swap-space? swap)
+                                                            (swap-space->flags-bit-mask
+                                                             swap)
+                                                            0)))
                             #t)))))
         (stop #~(lambda _
-                  (let ((device #$(device-lookup device)))
+                  (let ((device #$device-lookup))
                     (when device
                       (restart-on-EINTR (swapoff device)))
                     #f)))
         (respawn? #f))))
    (description "Turn on the virtual memory swap area.")))
 
-(define (swap-service device)
-  "Return a service that uses @var{device} as a swap device."
-  (service swap-service-type device))
+(define (swap-service swap)
+  "Return a service that uses @var{swap} as a swap space."
+  (service swap-service-type swap))
 
 (define %default-gpm-options
   ;; Default options for GPM.
@@ -2209,7 +2293,7 @@ instance."
 
 (define-record-type* <gpm-configuration>
   gpm-configuration make-gpm-configuration gpm-configuration?
-  (gpm      gpm-configuration-gpm                 ;package
+  (gpm      gpm-configuration-gpm                 ;file-like
             (default gpm))
   (options  gpm-configuration-options             ;list of strings
             (default %default-gpm-options)))
@@ -2315,72 +2399,285 @@ notably to select, copy, and paste text.  The default options use the
    (description "Start the @command{kmscon} virtual terminal emulator for the
 Linux @dfn{kernel mode setting} (KMS).")))
 
+
+;;;
+;;; Static networking.
+;;;
+
+(define (ipv6-address? str)
+  "Return true if STR denotes an IPv6 address."
+  (false-if-exception (->bool (inet-pton AF_INET6 str))))
+
+(define-compile-time-procedure (assert-valid-address (address string?))
+  "Ensure ADDRESS has a valid netmask."
+  (unless (cidr->netmask address)
+    (raise
+     (make-compound-condition
+      (formatted-message (G_ "address '~a' lacks a network mask")
+                         address)
+      (condition (&error-location
+                  (location
+                   (source-properties->location procedure-call-location))))
+      (condition (&fix-hint
+                  (hint (format #f (G_ "\
+Write, say, @samp{\"~a/24\"} for a 24-bit network mask.")
+                                address)))))))
+  address)
+
 (define-record-type* <static-networking>
   static-networking make-static-networking
   static-networking?
-  (interface static-networking-interface)
-  (ip static-networking-ip)
-  (netmask static-networking-netmask
-           (default #f))
-  (gateway static-networking-gateway              ;FIXME: doesn't belong here
-           (default #f))
+  (addresses static-networking-addresses)         ;list of <network-address>
+  (links     static-networking-links (default '())) ;list of <network-link>
+  (routes    static-networking-routes (default '())) ;list of <network-routes>
   (provision static-networking-provision
-             (default #f))
+             (default '(networking)))
   (requirement static-networking-requirement
-               (default '()))
+               (default '(udev)))
   (name-servers static-networking-name-servers    ;FIXME: doesn't belong here
                 (default '())))
 
-(define static-networking-shepherd-service
+(define-record-type* <network-address>
+  network-address make-network-address
+  network-address?
+  (device    network-address-device)              ;string--e.g., "en01"
+  (value     network-address-value                ;string--CIDR notation
+             (sanitize assert-valid-address))
+  (ipv6?     network-address-ipv6?                ;Boolean
+             (thunked)
+             (default
+               (ipv6-address? (cidr->ip (network-address-value this-record))))))
+
+(define-record-type* <network-link>
+  network-link make-network-link
+  network-link?
+  (name      network-link-name)                   ;string--e.g, "v0p0"
+  (type      network-link-type)                   ;symbol--e.g.,'veth
+  (arguments network-link-arguments))             ;list
+
+(define-record-type* <network-route>
+  network-route make-network-route
+  network-route?
+  (destination network-route-destination)
+  (source      network-route-source (default #f))
+  (device      network-route-device (default #f))
+  (ipv6?       network-route-ipv6? (thunked)
+               (default
+                 (or (ipv6-address? (network-route-destination this-record))
+                     (and=> (network-route-gateway this-record)
+                            ipv6-address?))))
+  (gateway     network-route-gateway (default #f)))
+
+(define* (cidr->netmask str #:optional (family AF_INET))
+  "Given @var{str}, a string in CIDR notation (e.g., \"1.2.3.4/24\"), return
+the netmask as a string like \"255.255.255.0\"."
+  (match (string-split str #\/)
+    ((ip (= string->number bits))
+     (let ((mask (ash (- (expt 2 bits) 1)
+                      (- (if (= family AF_INET6) 128 32)
+                         bits))))
+       (inet-ntop family mask)))
+    (_ #f)))
+
+(define (cidr->ip str)
+  "Strip the netmask bit of @var{str}, a CIDR-notation IP/netmask address."
+  (match (string-split str #\/)
+    ((or (ip _) (ip))
+     ip)))
+
+(define* (ip+netmask->cidr ip netmask #:optional (family AF_INET))
+  "Return the CIDR notation (a string) for @var{ip} and @var{netmask}, two
+@var{family} address strings, where @var{family} is @code{AF_INET} or
+@code{AF_INET6}."
+  (let* ((netmask (inet-pton family netmask))
+         (bits    (logcount netmask)))
+    (string-append ip "/" (number->string bits))))
+
+(define (static-networking->hurd-pfinet-options config)
+  "Return command-line options for the Hurd's pfinet translator corresponding
+to CONFIG."
+  (unless (null? (static-networking-links config))
+    ;; XXX: Presumably this is not supported, or perhaps could be approximated
+    ;; by running separate pfinet instances in some cases?
+    (warning (G_ "network links are currently ignored on GNU/Hurd~%")))
+
+  (match (static-networking-addresses config)
+    ((and addresses (first _ ...))
+     `("--ipv6" "/servers/socket/26"
+       "--interface" ,(network-address-device first)
+       ,@(append-map (lambda (address)
+                       `(,(if (network-address-ipv6? address)
+                              "--address6"
+                              "--address")
+                         ,(cidr->ip (network-address-value address))
+                         ,@(match (cidr->netmask (network-address-value address)
+                                                 (if (network-address-ipv6? address)
+                                                     AF_INET6
+                                                     AF_INET))
+                             (#f '())
+                             (mask (list "--netmask" mask)))))
+                     addresses)
+       ,@(append-map (lambda (route)
+                       (match route
+                         (($ <network-route> "default" #f device _ gateway)
+                          (if (network-route-ipv6? route)
+                              `("--gateway6" ,gateway)
+                              `("--gateway" ,gateway)))
+                         (($ <network-route> destination)
+                          (warning (G_ "ignoring network route for '~a'~%")
+                                   destination)
+                          '())))
+                     (static-networking-routes config))))))
+
+(define (network-set-up/hurd config)
+  "Set up networking for the Hurd."
+  ;; The Hurd implements SIOCGIFADDR and other old-style ioctls, but the only
+  ;; way to set up IPv6 is by starting pfinet with the right options.
+  (if (equal? (static-networking-provision config) '(loopback))
+      (scheme-file "set-up-pflocal" #~(begin 'nothing-to-do! #t))
+      (scheme-file "set-up-pfinet"
+                   (with-imported-modules '((guix build utils))
+                     #~(begin
+                         (use-modules (guix build utils)
+                                      (ice-9 format))
+
+                         ;; TODO: Do that without forking.
+                         (let ((options '#$(static-networking->hurd-pfinet-options
+                                            config)))
+                           (format #t "starting '~a~{ ~s~}'~%"
+                                   #$(file-append hurd "/hurd/pfinet")
+                                   options)
+                           (apply invoke #$(file-append hurd "/bin/settrans") "-fac"
+                                  "/servers/socket/2"
+                                  #$(file-append hurd "/hurd/pfinet")
+                                  options)))))))
+
+(define (network-tear-down/hurd config)
+  (scheme-file "tear-down-pfinet"
+               (with-imported-modules '((guix build utils))
+                 #~(begin
+                     (use-modules (guix build utils))
+
+                     ;; Forcefully terminate pfinet.  XXX: In theory this
+                     ;; should just undo the addresses and routes of CONFIG;
+                     ;; this could be done using ioctls like SIOCDELRT, but
+                     ;; these are IPv4-only; another option would be to use
+                     ;; fsysopts but that seems to crash pfinet.
+                     (invoke #$(file-append hurd "/bin/settrans") "-fg"
+                             "/servers/socket/2")
+                     #f))))
+
+(define network-set-up/linux
+  (match-lambda
+    (($ <static-networking> addresses links routes)
+     (scheme-file "set-up-network"
+                  (with-extensions (list guile-netlink)
+                    #~(begin
+                        (use-modules (ip addr) (ip link) (ip route))
+
+                        #$@(map (lambda (address)
+                                  #~(begin
+                                      (addr-add #$(network-address-device address)
+                                                #$(network-address-value address)
+                                                #:ipv6?
+                                                #$(network-address-ipv6? address))
+                                      ;; FIXME: loopback?
+                                      (link-set #$(network-address-device address)
+                                                #:multicast-on #t
+                                                #:up #t)))
+                                addresses)
+                        #$@(map (match-lambda
+                                  (($ <network-link> name type arguments)
+                                   #~(link-add #$name #$type
+                                               #:type-args '#$arguments)))
+                                links)
+                        #$@(map (lambda (route)
+                                  #~(route-add #$(network-route-destination route)
+                                               #:device
+                                               #$(network-route-device route)
+                                               #:ipv6?
+                                               #$(network-route-ipv6? route)
+                                               #:via
+                                               #$(network-route-gateway route)
+                                               #:src
+                                               #$(network-route-source route)))
+                                routes)
+                        #t))))))
+
+(define network-tear-down/linux
   (match-lambda
-    (($ <static-networking> interface ip netmask gateway provision
-                            requirement name-servers)
+    (($ <static-networking> addresses links routes)
+     (scheme-file "tear-down-network"
+                  (with-extensions (list guile-netlink)
+                    #~(begin
+                        (use-modules (ip addr) (ip link) (ip route)
+                                     (netlink error)
+                                     (srfi srfi-34))
+
+                        (define-syntax-rule (false-if-netlink-error exp)
+                          (guard (c ((netlink-error? c) #f))
+                            exp))
+
+                        ;; Wrap calls in 'false-if-netlink-error' so this
+                        ;; script goes as far as possible undoing the effects
+                        ;; of "set-up-network".
+
+                        #$@(map (lambda (route)
+                                  #~(false-if-netlink-error
+                                     (route-del #$(network-route-destination route)
+                                                #:device
+                                                #$(network-route-device route)
+                                                #:ipv6?
+                                                #$(network-route-ipv6? route)
+                                                #:via
+                                                #$(network-route-gateway route)
+                                                #:src
+                                                #$(network-route-source route))))
+                                routes)
+                        #$@(map (match-lambda
+                                  (($ <network-link> name type arguments)
+                                   #~(false-if-netlink-error
+                                      (link-del #$name))))
+                                links)
+                        #$@(map (lambda (address)
+                                  #~(false-if-netlink-error
+                                     (addr-del #$(network-address-device
+                                                  address)
+                                               #$(network-address-value address)
+                                               #:ipv6?
+                                               #$(network-address-ipv6? address))))
+                                addresses)
+                        #f))))))
+
+(define (static-networking-shepherd-service config)
+  (match config
+    (($ <static-networking> addresses links routes
+                            provision requirement name-servers)
      (let ((loopback? (and provision (memq 'loopback provision))))
        (shepherd-service
 
         (documentation
          "Bring up the networking interface using a static IP address.")
         (requirement requirement)
-        (provision (or provision
-                       (list (symbol-append 'networking-
-                                            (string->symbol interface)))))
+        (provision provision)
 
         (start #~(lambda _
                    ;; Return #t if successfully started.
-                   (let* ((addr     (inet-pton AF_INET #$ip))
-                          (sockaddr (make-socket-address AF_INET addr 0))
-                          (mask     (and #$netmask
-                                         (inet-pton AF_INET #$netmask)))
-                          (maskaddr (and mask
-                                         (make-socket-address AF_INET
-                                                              mask 0)))
-                          (gateway  (and #$gateway
-                                         (inet-pton AF_INET #$gateway)))
-                          (gatewayaddr (and gateway
-                                            (make-socket-address AF_INET
-                                                                 gateway 0))))
-                     (configure-network-interface #$interface sockaddr
-                                                  (logior IFF_UP
-                                                          #$(if loopback?
-                                                                #~IFF_LOOPBACK
-                                                                0))
-                                                  #:netmask maskaddr)
-                     (when gateway
-                       (let ((sock (socket AF_INET SOCK_DGRAM 0)))
-                         (add-network-route/gateway sock gatewayaddr)
-                         (close-port sock))))))
+                   (load #$(let-system (system target)
+                             (if (string-contains (or target system) "-linux")
+                                 (network-set-up/linux config)
+                                 (network-set-up/hurd config))))))
         (stop #~(lambda _
                   ;; Return #f is successfully stopped.
-                  (let ((sock (socket AF_INET SOCK_STREAM 0)))
-                    (when #$gateway
-                      (delete-network-route sock
-                                            (make-socket-address
-                                             AF_INET INADDR_ANY 0)))
-                    (set-network-interface-flags sock #$interface 0)
-                    (close-port sock)
-                    #f)))
+                  (load #$(let-system (system target)
+                            (if (string-contains (or target system) "-linux")
+                                (network-tear-down/linux config)
+                                (network-tear-down/hurd config))))))
         (respawn? #f))))))
 
+(define (static-networking-shepherd-services networks)
+  (map static-networking-shepherd-service networks))
+
 (define (static-networking-etc-files interfaces)
   "Return a /etc/resolv.conf entry for INTERFACES or the empty list."
   (match (delete-duplicates
@@ -2399,30 +2696,6 @@ Linux @dfn{kernel mode setting} (KMS).")))
 # Generated by 'static-networking-service'.\n"
                                       content))))))))
 
-(define (static-networking-shepherd-services interfaces)
-  "Return the list of Shepherd services to bring up INTERFACES, a list of
-<static-networking> objects."
-  (define (loopback? service)
-    (memq 'loopback (shepherd-service-provision service)))
-
-  (let ((services (map static-networking-shepherd-service interfaces)))
-    (match (remove loopback? services)
-      (()
-       ;; There's no interface other than 'loopback', so we assume that the
-       ;; 'networking' service will be provided by dhclient or similar.
-       services)
-      ((non-loopback ...)
-       ;; Assume we're providing all the interfaces, and thus, provide a
-       ;; 'networking' service.
-       (cons (shepherd-service
-              (provision '(networking))
-              (requirement (append-map shepherd-service-provision
-                                       services))
-              (start #~(const #t))
-              (stop #~(const #f))
-              (documentation "Bring up all the networking interfaces."))
-             services)))))
-
 (define static-networking-service-type
   ;; The service type for statically-defined network interfaces.
   (service-type (name 'static-networking)
@@ -2440,12 +2713,13 @@ with the given IP address, gateway, netmask, and so on.  The value for
 services of this type is a list of @code{static-networking} objects, one per
 network interface.")))
 
-(define* (static-networking-service interface ip
-                                    #:key
-                                    netmask gateway provision
-                                    ;; Most interfaces require udev to be usable.
-                                    (requirement '(udev))
-                                    (name-servers '()))
+(define-deprecated (static-networking-service interface ip
+                                              #:key
+                                              netmask gateway provision
+                                              ;; Most interfaces require udev to be usable.
+                                              (requirement '(udev))
+                                              (name-servers '()))
+  static-networking-service-type
   "Return a service that starts @var{interface} with address @var{ip}.  If
 @var{netmask} is true, use it as the network mask.  If @var{gateway} is true,
 it must be a string specifying the default network gateway.
@@ -2456,11 +2730,47 @@ interface of interest.  Behind the scenes what it does is extend
 to handle."
   (simple-service 'static-network-interface
                   static-networking-service-type
-                  (list (static-networking (interface interface) (ip ip)
-                                           (netmask netmask) (gateway gateway)
-                                           (provision provision)
-                                           (requirement requirement)
-                                           (name-servers name-servers)))))
+                  (list (static-networking
+                         (addresses
+                          (list (network-address
+                                 (device interface)
+                                 (value (if netmask
+                                            (ip+netmask->cidr ip netmask)
+                                            ip))
+                                 (ipv6? #f))))
+                         (routes
+                          (if gateway
+                              (list (network-route
+                                     (destination "default")
+                                     (gateway gateway)
+                                     (ipv6? #f)))
+                              '()))
+                         (requirement requirement)
+                         (provision (or provision '(networking)))
+                         (name-servers name-servers)))))
+
+(define %loopback-static-networking
+  ;; The loopback device.
+  (static-networking
+   (addresses (list (network-address
+                     (device "lo")
+                     (value "127.0.0.1/8"))))
+   (requirement '())
+   (provision '(loopback))))
+
+(define %qemu-static-networking
+  ;; Networking configuration for QEMU's user-mode network stack (info "(QEMU)
+  ;; Using the user mode network stack").
+  (static-networking
+   (addresses (list (network-address
+                     (device "eth0")
+                     (value "10.0.2.15/24"))))
+   (routes (list (network-route
+                  (destination "default")
+                  (gateway "10.0.2.2"))))
+   (requirement '())
+   (provision '(networking))
+   (name-servers '("10.0.2.3"))))
 
 
 (define %base-services
@@ -2492,10 +2802,7 @@ to handle."
                                          (tty "tty6")))
 
         (service static-networking-service-type
-                 (list (static-networking (interface "lo")
-                                          (ip "127.0.0.1")
-                                          (requirement '())
-                                          (provision '(loopback)))))
+                 (list %loopback-static-networking))
         (syslog-service)
         (service urandom-seed-service-type)
         (service guix-service-type)
diff --git a/gnu/services/cgit.scm b/gnu/services/cgit.scm
index 94ca9e281a..bfc89a40a4 100644
--- a/gnu/services/cgit.scm
+++ b/gnu/services/cgit.scm
@@ -319,7 +319,7 @@ after this option will inherit the current section name.")
 ;; <repository-cgit-configuration>, <nginx-server-configuration>, <package>.
 (define-configuration cgit-configuration
   (package
-   (package cgit)
+   (file-like cgit)
    "The CGIT package.")
   (nginx
    (nginx-server-configuration-list (list %cgit-configuration-nginx))
@@ -673,7 +673,7 @@ for cgit to allow access to that repository.")
 
 (define-configuration opaque-cgit-configuration
   (cgit
-   (package cgit)
+   (file-like cgit)
    "The cgit package.")
   (cgitrc
    (string (configuration-missing-field 'opaque-cgit-configuration 'cgitrc))
diff --git a/gnu/services/ci.scm b/gnu/services/ci.scm
index 0c3566bcaf..172f85fe8e 100644
--- a/gnu/services/ci.scm
+++ b/gnu/services/ci.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2018, 2019, 2020, 2021 Christopher Baines <mail@cbaines.net>
-;;; Copyright © 2021 Arun Isaac <arunisaac@systemreboot.net>
+;;; Copyright © 2021, 2022 Arun Isaac <arunisaac@systemreboot.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -84,6 +84,8 @@
                                         #$home-directory)
                         ,(string-append "LAMINAR_BIND_HTTP="
                                         #$bind-http)
+                        ,(string-append "LAMINAR_BIND_RPC="
+                                        #$bind-rpc)
                         ,(string-append "LAMINAR_TITLE="
                                         #$title)
                         ,(string-append "LAMINAR_KEEP_RUNDIRS="
diff --git a/gnu/services/configuration.scm b/gnu/services/configuration.scm
index df3d3b6f9b..0de350a4df 100644
--- a/gnu/services/configuration.scm
+++ b/gnu/services/configuration.scm
@@ -4,6 +4,7 @@
 ;;; Copyright © 2017, 2018 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
 ;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021 Andrew Tropin <andrew@trop.in>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -25,10 +26,12 @@
   #:use-module (guix records)
   #:use-module (guix gexp)
   #:use-module ((guix utils) #:select (source-properties->location))
-  #:use-module ((guix diagnostics) #:select (location-file))
+  #:use-module ((guix diagnostics) #:select (formatted-message location-file))
   #:use-module ((guix modules) #:select (file-name->module-name))
+  #:use-module (guix i18n)
   #:autoload   (texinfo) (texi-fragment->stexi)
   #:autoload   (texinfo serialize) (stexi->texi)
+  #:use-module (ice-9 curried-definitions)
   #:use-module (ice-9 match)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-34)
@@ -56,7 +59,20 @@
             generate-documentation
             configuration->documentation
             empty-serializer
-            serialize-package))
+            serialize-package
+
+            filter-configuration-fields
+
+            interpose
+            list-of
+
+            list-of-strings?
+            alist?
+            serialize-file-like
+            text-config?
+            serialize-text-config
+            generic-serialize-alist-entry
+            generic-serialize-alist))
 
 ;;; Commentary:
 ;;;
@@ -323,3 +339,79 @@ Texinfo documentation of its fields."
                                                   '-fields))))
     (display (generate-documentation `((,configuration-symbol ,fields-getter))
                                      configuration-symbol))))
+
+(define* (filter-configuration-fields configuration-fields fields
+                                      #:optional negate?)
+  "Retrieve the fields listed in FIELDS from CONFIGURATION-FIELDS.
+If NEGATE? is @code{#t}, retrieve all fields except FIELDS."
+  (filter (lambda (field)
+            (let ((member? (member (configuration-field-name field) fields)))
+              (if (not negate?) member? (not member?))))
+          configuration-fields))
+
+
+(define* (interpose ls  #:optional (delimiter "\n") (grammar 'infix))
+  "Same as @code{string-join}, but without join and string, returns an
+DELIMITER interposed LS.  Support 'infix and 'suffix GRAMMAR values."
+  (when (not (member grammar '(infix suffix)))
+    (raise
+     (formatted-message
+      (G_ "The GRAMMAR value must be 'infix or 'suffix, but ~a provided.")
+      grammar)))
+  (fold-right (lambda (e acc)
+                (cons e
+                      (if (and (null? acc) (eq? grammar 'infix))
+                          acc
+                          (cons delimiter acc))))
+              '() ls))
+
+(define (list-of pred?)
+  "Return a procedure that takes a list and check if all the elements of
+the list result in @code{#t} when applying PRED? on them."
+    (lambda (x)
+      (if (list? x)
+          (every pred? x)
+          #f)))
+
+
+(define list-of-strings?
+  (list-of string?))
+
+(define alist? list?)
+
+(define serialize-file-like empty-serializer)
+
+(define (text-config? config)
+  (list-of file-like?))
+(define (serialize-text-config field-name val)
+  #~(string-append
+     #$@(interpose
+         (map
+          (lambda (e)
+            #~(begin
+                (use-modules (ice-9 rdelim))
+                (with-fluids ((%default-port-encoding "UTF-8"))
+                  (with-input-from-file #$e read-string))))
+          val)
+         "\n" 'suffix)))
+
+(define ((generic-serialize-alist-entry serialize-field) entry)
+  "Apply the SERIALIZE-FIELD procedure on the field and value of ENTRY."
+  (match entry
+    ((field . val) (serialize-field field val))))
+
+(define (generic-serialize-alist combine serialize-field fields)
+  "Generate a configuration from an association list FIELDS.
+
+SERIALIZE-FIELD is a procedure that takes two arguments, it will be
+applied on the fields and values of FIELDS using the
+@code{generic-serialize-alist-entry} procedure.
+
+COMBINE is a procedure that takes one or more arguments and combines
+all the alist entries into one value, @code{string-append} or
+@code{append} are usually good candidates for this.
+
+See the @code{serialize-alist} procedure in `@code{(gnu home services
+version-control}' for an example usage.)}"
+  (apply combine
+         (map (generic-serialize-alist-entry serialize-field) fields)))
diff --git a/gnu/services/cuirass.scm b/gnu/services/cuirass.scm
index 83e63fe79c..96f28a9670 100644
--- a/gnu/services/cuirass.scm
+++ b/gnu/services/cuirass.scm
@@ -58,7 +58,7 @@
 ;;;; Code:
 
 (define %cuirass-default-database
-  "dbname=cuirass host=/tmp")
+  "dbname=cuirass")
 
 (define-record-type* <cuirass-remote-server-configuration>
   cuirass-remote-server-configuration make-cuirass-remote-server-configuration
@@ -85,7 +85,7 @@
 (define-record-type* <cuirass-configuration>
   cuirass-configuration make-cuirass-configuration
   cuirass-configuration?
-  (cuirass          cuirass-configuration-cuirass ;package
+  (cuirass          cuirass-configuration-cuirass ;file-like
                     (default cuirass))
   (log-file         cuirass-configuration-log-file ;string
                     (default "/var/log/cuirass.log"))
@@ -327,7 +327,7 @@
 (define-record-type* <cuirass-remote-worker-configuration>
   cuirass-remote-worker-configuration make-cuirass-remote-worker-configuration
   cuirass-remote-worker-configuration?
-  (cuirass          cuirass-remote-worker-configuration-cuirass ;package
+  (cuirass          cuirass-remote-worker-configuration-cuirass ;file-like
                     (default cuirass))
   (workers          cuirass-remote-worker-workers ;int
                     (default 1))
diff --git a/gnu/services/cups.scm b/gnu/services/cups.scm
index 8bcb450ddf..2e86845e51 100644
--- a/gnu/services/cups.scm
+++ b/gnu/services/cups.scm
@@ -419,6 +419,9 @@ queues.  The URI @url{file:///dev/null} is always allowed.")
    (string "lp")
    "Specifies the group name or ID that will be used when executing external
 programs.")
+  (log-file-group
+   (string "lpadmin")
+   "Specifies the group name or ID that will be used for log files.")
   (log-file-perm
    (string "0644")
    "Specifies the permissions for all log files that the scheduler writes.")
@@ -482,13 +485,13 @@ programs.")
     (serialize-space-separated-string-list field-name vars)))
 
 (define (package-list? val)
-  (and (list? val) (and-map package? val)))
+  (and (list? val) (and-map file-like? val)))
 (define (serialize-package-list field-name val)
   #f)
 
 (define-configuration cups-configuration
   (cups
-   (package cups)
+   (file-like cups)
    "The CUPS package.")
   (extensions
    (package-list (list brlaser cups-filters epson-inkjet-printer-escpr
@@ -702,7 +705,7 @@ in seconds.  Set to 0 to disable cancellation of \"stuck\" jobs.")
    "Specifies the maximum size of the log files before they are rotated, in
 bytes.  The value 0 disables log rotation.")
   (multiple-operation-timeout
-   (non-negative-integer 300)
+   (non-negative-integer 900)
    "Specifies the maximum amount of time to allow between files in a multiple
 file print job, in seconds.")
   (page-log-format
@@ -847,7 +850,7 @@ protocol version to TLS v1.1.")
    "Specifies whether the scheduler requires clients to strictly adhere to the
 IPP specifications.")
   (timeout
-   (non-negative-integer 300)
+   (non-negative-integer 900)
    "Specifies the HTTP request timeout, in seconds.")
   (web-interface?
    (boolean #f)
diff --git a/gnu/services/databases.scm b/gnu/services/databases.scm
index eba88cdb68..39225a4bd6 100644
--- a/gnu/services/databases.scm
+++ b/gnu/services/databases.scm
@@ -116,7 +116,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 #false))
+                     (default "/var/run/postgresql"))
   (extra-config      postgresql-config-file-extra-config
                      (default '())))
 
@@ -164,7 +164,7 @@ host	all	all	::1/128 	md5"))
 (define-record-type* <postgresql-configuration>
   postgresql-configuration make-postgresql-configuration
   postgresql-configuration?
-  (postgresql         postgresql-configuration-postgresql) ;<package>
+  (postgresql         postgresql-configuration-postgresql) ;file-like
   (port               postgresql-configuration-port
                       (default 5432))
   (locale             postgresql-configuration-locale
@@ -364,7 +364,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 "/tmp"))
+                    (default "/var/run/postgresql"))
   (log              postgresql-role-configuration-log ;string
                     (default "/var/log/postgresql_roles.log"))
   (roles            postgresql-role-configuration-roles
@@ -448,7 +448,7 @@ created after the PostgreSQL database is started.")))
 (define-record-type* <memcached-configuration>
   memcached-configuration make-memcached-configuration
   memcached-configuration?
-  (memcached          memcached-configuration-memcached ;<package>
+  (memcached          memcached-configuration-memcached ;file-like
                       (default memcached))
   (interfaces         memcached-configuration-interfaces
                       (default '("0.0.0.0")))
@@ -693,7 +693,7 @@ FLUSH PRIVILEGES;
 (define-record-type* <redis-configuration>
   redis-configuration make-redis-configuration
   redis-configuration?
-  (redis             redis-configuration-redis ;<package>
+  (redis             redis-configuration-redis ;file-like
                      (default redis))
   (bind              redis-configuration-bind
                      (default "127.0.0.1"))
diff --git a/gnu/services/dbus.scm b/gnu/services/dbus.scm
index e7b3dac166..d2daf60497 100644
--- a/gnu/services/dbus.scm
+++ b/gnu/services/dbus.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 © 2015 Sou Bunnbu <iyzsong@gmail.com>
 ;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;; Copyright © 2021 Brice Waegeneire <brice@waegenei.re>
@@ -50,7 +50,7 @@
 (define-record-type* <dbus-configuration>
   dbus-configuration make-dbus-configuration
   dbus-configuration?
-  (dbus      dbus-configuration-dbus              ;<package>
+  (dbus      dbus-configuration-dbus              ;file-like
              (default dbus))
   (services  dbus-configuration-services          ;list of <package>
              (default '())))
@@ -106,6 +106,10 @@ includes the @code{etc/dbus-1/system.d} directories of each package listed in
         (define (services->sxml services)
           ;; Return the SXML 'includedir' clauses for DIRS.
           `(busconfig
+             ;; Increase this timeout to 60 seconds to work around race-y
+             ;; failures such as <https://issues.guix.gnu.org/52051> on slow
+             ;; computers with slow I/O.
+            (limit (@ (name "auth_timeout")) "60000")
             (servicehelper "/run/setuid-programs/dbus-daemon-launch-helper")
 
             ;; First, the '.service' files of services subject to activation.
@@ -300,11 +304,20 @@ tuples, are all set as environment variables when the bus daemon launches it."
 (define-record-type* <polkit-configuration>
   polkit-configuration make-polkit-configuration
   polkit-configuration?
-  (polkit   polkit-configuration-polkit           ;<package>
-            (default polkit))
-  (actions  polkit-configuration-actions          ;list of <package>
+  (polkit   polkit-configuration-polkit           ;file-like
+            (default %default-polkit))
+  (actions  polkit-configuration-actions          ;list of file-like
             (default '())))
 
+(define %default-polkit
+  ;; The default polkit package.
+  (let-system (system target)
+    ;; Since mozjs depends on Rust, which is currently x86_64-only, use
+    ;; polkit-duktape on other systems.
+    (if (string-prefix? "x86_64-" (or target system))
+        polkit-mozjs
+        polkit-duktape)))
+
 (define %polkit-accounts
   (list (user-group (name "polkitd") (system? #t))
         (user-account
diff --git a/gnu/services/desktop.scm b/gnu/services/desktop.scm
index 64d0e85301..c2ee3a3d80 100644
--- a/gnu/services/desktop.scm
+++ b/gnu/services/desktop.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014-2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Andy Wingo <wingo@igalia.com>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016 Sou Bunnbu <iyzsong@gmail.com>
@@ -40,6 +40,7 @@
   #:use-module (gnu services sound)
   #:use-module ((gnu system file-systems)
                 #:select (%elogind-file-systems file-system))
+  #:autoload   (gnu services sddm) (sddm-service-type)
   #:use-module (gnu system)
   #:use-module (gnu system setuid)
   #:use-module (gnu system shadow)
@@ -867,22 +868,34 @@ rules.")
   gnome-desktop-configuration?
   (gnome gnome-package (default gnome)))
 
-(define (gnome-polkit-settings config)
-  "Return the list of GNOME dependencies that provide polkit actions and
-rules."
+(define (gnome-packages config packages)
+  "Return the list of GNOME dependencies from CONFIG which names are part of
+the given PACKAGES list."
   (let ((gnome (gnome-package config)))
     (map (lambda (name)
            ((package-direct-input-selector name) gnome))
-         '("gnome-settings-daemon"
-           "gnome-control-center"
-           "gnome-system-monitor"
-           "gvfs"))))
+         packages)))
+
+(define (gnome-udev-rules config)
+  "Return the list of GNOME dependencies that provide udev rules."
+  (gnome-packages config '("gnome-settings-daemon")))
+
+(define (gnome-polkit-settings config)
+  "Return the list of GNOME dependencies that provide polkit actions and
+rules."
+  (gnome-packages config
+                  '("gnome-settings-daemon"
+                    "gnome-control-center"
+                    "gnome-system-monitor"
+                    "gvfs")))
 
 (define gnome-desktop-service-type
   (service-type
    (name 'gnome-desktop)
    (extensions
-    (list (service-extension polkit-service-type
+    (list (service-extension udev-service-type
+                             gnome-udev-rules)
+          (service-extension polkit-service-type
                              gnome-polkit-settings)
           (service-extension profile-service-type
                              (compose list
@@ -1021,7 +1034,7 @@ rules."
                         (use-modules (guix build utils))
                         (let ((directory "/tmp/.X11-unix"))
                           (mkdir-p directory)
-                          (chmod directory #o777))))))
+                          (chmod directory #o1777))))))
 
 ;;;
 ;;; Enlightenment desktop service.
@@ -1187,9 +1200,17 @@ or setting its password with passwd.")))
 ;;; The default set of desktop services.
 ;;;
 
-(define %desktop-services
+(define* (desktop-services-for-system #:optional
+                                      (system (or (%current-target-system)
+                                                  (%current-system))))
   ;; List of services typically useful for a "desktop" use case.
-  (cons* (service gdm-service-type)
+
+  ;; Since GDM depends on Rust (gdm -> gnome-shell -> gjs -> mozjs -> rust)
+  ;; and Rust is currently unavailable on non-x86_64 platforms, default to
+  ;; SDDM there (FIXME).
+  (cons* (if (string-prefix? "x86_64" system)
+             (service gdm-service-type)
+             (service sddm-service-type))
 
          ;; Screen lockers are a pretty useful thing and these are small.
          (screen-locker-service slock)
@@ -1248,4 +1269,7 @@ or setting its password with passwd.")))
 
          %base-services))
 
+(define-syntax %desktop-services
+  (identifier-syntax (desktop-services-for-system)))
+
 ;;; desktop.scm ends here
diff --git a/gnu/services/dns.scm b/gnu/services/dns.scm
index aeb2bfdc86..9b8603cc95 100644
--- a/gnu/services/dns.scm
+++ b/gnu/services/dns.scm
@@ -185,8 +185,6 @@
                      (default '()))
   (semantic-checks?  knot-zone-configuration-semantic-checks?
                      (default #f))
-  (disable-any?      knot-zone-configuration-disable-any?
-                     (default #f))
   (zonefile-sync     knot-zone-configuration-zonefile-sync
                      (default 0))
   (zonefile-load     knot-zone-configuration-zonefile-load
@@ -310,8 +308,8 @@
       (error-out "remote id must be a non empty string."))))
 
 (define (verify-knot-configuration config)
-  (unless (package? (knot-configuration-knot config))
-    (error-out "knot configuration field must be a package."))
+  (unless (file-like? (knot-configuration-knot config))
+    (error-out "knot configuration field must be a file-like object."))
   (unless (string? (knot-configuration-run-directory config))
     (error-out "run-directory must be a string."))
   (unless (list? (knot-configuration-includes config))
@@ -509,7 +507,6 @@
                 (notify (list #$@(knot-zone-configuration-notify zone)))
                 (acl (list #$@(knot-zone-configuration-acl zone)))
                 (semantic-checks? #$(knot-zone-configuration-semantic-checks? zone))
-                (disable-any? #$(knot-zone-configuration-disable-any? zone))
                 (zonefile-sync #$(knot-zone-configuration-zonefile-sync zone))
                 (zonefile-load '#$(knot-zone-configuration-zonefile-load zone))
                 (journal-content #$(knot-zone-configuration-journal-content zone))
@@ -541,7 +538,6 @@
                       #$(format-string-list
                           (knot-zone-configuration-acl zone))))
             (format #t "      semantic-checks: ~a\n" (if semantic-checks? "on" "off"))
-            (format #t "      disable-any: ~a\n" (if disable-any? "on" "off"))
             (if zonefile-sync
               (format #t "      zonefile-sync: ~a\n" zonefile-sync))
             (if zonefile-load
@@ -736,7 +732,7 @@ cache.size = 100 * MB
   dnsmasq-configuration make-dnsmasq-configuration
   dnsmasq-configuration?
   (package          dnsmasq-configuration-package
-                    (default dnsmasq))  ;package
+                    (default dnsmasq))  ;file-like
   (no-hosts?        dnsmasq-configuration-no-hosts?
                     (default #f))       ;boolean
   (port             dnsmasq-configuration-port
@@ -909,7 +905,7 @@ cache.size = 100 * MB
 
 (define-configuration ddclient-configuration
   (ddclient
-   (package ddclient)
+   (file-like ddclient)
    "The ddclient package.")
   (daemon
    (integer 300)
diff --git a/gnu/services/docker.scm b/gnu/services/docker.scm
index ef551480aa..846ebe8334 100644
--- a/gnu/services/docker.scm
+++ b/gnu/services/docker.scm
@@ -41,16 +41,16 @@
 
 (define-configuration docker-configuration
   (docker
-   (package docker)
+   (file-like docker)
    "Docker daemon package.")
   (docker-cli
-   (package docker-cli)
+   (file-like docker-cli)
    "Docker client package.")
   (containerd
-   (package containerd)
+   (file-like containerd)
    "containerd package.")
   (proxy
-   (package docker-libnetwork-cmd-proxy)
+   (file-like docker-libnetwork-cmd-proxy)
    "The proxy package to support inter-container and outside-container
 loop-back communications.")
   (enable-proxy?
@@ -62,6 +62,9 @@ loop-back communications.")
   (enable-iptables?
    (boolean #t)
    "Enable addition of iptables rules (enabled by default).")
+  (environment-variables
+   (list '())
+   "Environment variables to set for dockerd")
   (no-serialization))
 
 (define %docker-accounts
@@ -102,6 +105,7 @@ loop-back communications.")
   (let* ((docker (docker-configuration-docker config))
          (enable-proxy? (docker-configuration-enable-proxy? config))
          (enable-iptables? (docker-configuration-enable-iptables? config))
+         (environment-variables (docker-configuration-environment-variables config))
          (proxy (docker-configuration-proxy config))
          (debug? (docker-configuration-debug? config)))
     (shepherd-service
@@ -132,6 +136,8 @@ loop-back communications.")
                            (if #$enable-iptables?
                                "--iptables"
                                "--iptables=false"))
+                     #:environment-variables
+                     (list #$@environment-variables)
                      #:pid-file "/var/run/docker.pid"
                      #:log-file "/var/log/docker.log"))
            (stop #~(make-kill-destructor)))))
diff --git a/gnu/services/file-sharing.scm b/gnu/services/file-sharing.scm
index 72cd6478d6..e3d681b08f 100644
--- a/gnu/services/file-sharing.scm
+++ b/gnu/services/file-sharing.scm
@@ -259,7 +259,7 @@ type generated and used by Transmission clients, suitable for passing to the
 (define-configuration transmission-daemon-configuration
   ;; Settings internal to this service definition.
   (transmission
-   (package transmission)
+   (file-like transmission)
    "The Transmission package to use.")
   (stop-wait-period
    (non-negative-integer 10)
diff --git a/gnu/services/ganeti.scm b/gnu/services/ganeti.scm
index 0a34ea6a5e..85adbd7362 100644
--- a/gnu/services/ganeti.scm
+++ b/gnu/services/ganeti.scm
@@ -190,7 +190,7 @@
 (define-record-type* <ganeti-noded-configuration>
   ganeti-noded-configuration make-ganeti-noded-configuration
   ganeti-noded-configuration?
-  (ganeti      ganeti-noded-configuration-ganeti        ;<package>
+  (ganeti      ganeti-noded-configuration-ganeti        ;file-like
                (default ganeti))
   (port        ganeti-noded-configuration-port          ;integer
                (default 1811))
@@ -256,7 +256,7 @@ for the node functions in the Ganeti system.")))
 (define-record-type* <ganeti-confd-configuration>
   ganeti-confd-configuration make-ganeti-confd-configuration
   ganeti-confd-configuration?
-  (ganeti      ganeti-confd-configuration-ganeti        ;<package>
+  (ganeti      ganeti-confd-configuration-ganeti        ;file-like
                (default ganeti))
   (port        ganeti-confd-configuration-port          ;integer
                (default 1814))
@@ -298,7 +298,7 @@ related to the configuration of a Ganeti cluster.")))
 (define-record-type* <ganeti-wconfd-configuration>
   ganeti-wconfd-configuration make-ganeti-wconfd-configuration
   ganeti-wconfd-configuration?
-  (ganeti      ganeti-wconfd-configuration-ganeti       ;<package>
+  (ganeti      ganeti-wconfd-configuration-ganeti       ;file-like
                (default ganeti))
   (no-voting?  ganeti-wconfd-configuration-no-voting?   ;Boolean
                (default #f))
@@ -389,7 +389,7 @@ appropriate requests to this daemon.")))
 (define-record-type* <ganeti-luxid-configuration>
   ganeti-luxid-configuration make-ganeti-luxid-configuration
   ganeti-luxid-configuration?
-  (ganeti      ganeti-luxid-configuration-ganeti        ;<package>
+  (ganeti      ganeti-luxid-configuration-ganeti        ;file-like
                (default ganeti))
   (no-voting?  ganeti-luxid-configuration-no-voting?    ;Boolean
                (default #f))
@@ -436,7 +436,7 @@ be submitted via this daemon and it schedules and starts them.")))
 (define-record-type* <ganeti-rapi-configuration>
   ganeti-rapi-configuration make-ganeti-rapi-configuration
   ganeti-rapi-configuration?
-  (ganeti      ganeti-rapi-configuration-ganeti         ;<package>
+  (ganeti      ganeti-rapi-configuration-ganeti         ;file-like
                (default ganeti))
   (require-authentication?
    ganeti-rapi-configuration-require-authentication?    ;Boolean
@@ -509,7 +509,7 @@ for Ganeti clusters.")))
 (define-record-type* <ganeti-kvmd-configuration>
   ganeti-kvmd-configuration make-ganeti-kvmd-configuration
   ganeti-kvmd-configuration?
-  (ganeti      ganeti-kvmd-configuration-ganeti         ;<package>
+  (ganeti      ganeti-kvmd-configuration-ganeti         ;file-like
                (default ganeti))
   (debug?      ganeti-kvmd-configuration-debug?         ;Boolean
                (default #f)))
@@ -555,7 +555,7 @@ communicated to Ganeti via a special file in the file system.")))
 (define-record-type* <ganeti-mond-configuration>
   ganeti-mond-configuration make-ganeti-mond-configuration
   ganeti-mond-configuration?
-  (ganeti      ganeti-mond-configuration-ganeti         ;<package>
+  (ganeti      ganeti-mond-configuration-ganeti         ;file-like
                (default ganeti))
   (port        ganeti-mond-configuration-port           ;integer
                (default 1815))
@@ -596,7 +596,7 @@ provide the collected information through a HTTP interface.")))
 (define-record-type* <ganeti-metad-configuration>
   ganeti-metad-configuration make-ganeti-metad-configuration
   ganeti-metad-configuration?
-  (ganeti      ganeti-metad-configuration-ganeti        ;<package>
+  (ganeti      ganeti-metad-configuration-ganeti        ;file-like
                (default ganeti))
   (port        ganeti-metad-configuration-port          ;integer
                (default 80))
@@ -612,7 +612,11 @@ provide the collected information through a HTTP interface.")))
             (documentation "Run the Ganeti metadata daemon.")
             (provision '(ganeti-metad))
             (requirement '(user-processes networking))
+
+            ;; This service is started on demand.
+            (auto-start? #f)
             (respawn? #f)
+
             (start #~(make-forkexec-constructor
                       (list #$(file-append ganeti "/sbin/ganeti-metad")
                             #$(string-append "--port=" (number->string port))
@@ -638,7 +642,7 @@ information to OS install scripts or instances.")))
 (define-record-type* <ganeti-watcher-configuration>
   ganeti-watcher-configuration make-ganeti-watcher-configuration
   ganeti-watcher-configuration?
-  (ganeti        ganeti-watcher-configuration-ganeti        ;<package>
+  (ganeti        ganeti-watcher-configuration-ganeti        ;file-like
                  (default ganeti))
   (schedule      ganeti-watcher-configuration-schedule      ;list | string
                  (default '(next-second-from
@@ -701,7 +705,7 @@ is declared offline by known master candidates.")))
 (define-record-type* <ganeti-cleaner-configuration>
   ganeti-cleaner-configuration make-ganeti-cleaner-configuration
   ganeti-cleaner-configuration?
-  (ganeti          ganeti-cleaner-configuration-ganeti          ;<package>
+  (ganeti          ganeti-cleaner-configuration-ganeti          ;file-like
                    (default ganeti))
   (master-schedule ganeti-cleaner-configuration-master-schedule ;list | string
                    ;; Run the master cleaner at 01:45 every day.
diff --git a/gnu/services/getmail.scm b/gnu/services/getmail.scm
index 933d820bc5..ce124f6b11 100644
--- a/gnu/services/getmail.scm
+++ b/gnu/services/getmail.scm
@@ -246,7 +246,7 @@ lines.")
    (symbol "unset")
    "A symbol to identify the getmail service.")
   (package
-   (package getmail)
+   (file-like getmail)
    "The getmail package to use.")
   (user
    (string "getmail")
diff --git a/gnu/services/guix.scm b/gnu/services/guix.scm
index a5ed28647f..df5fa13bea 100644
--- a/gnu/services/guix.scm
+++ b/gnu/services/guix.scm
@@ -146,7 +146,7 @@
   make-guix-build-coordinator-agent-configuration
   guix-build-coordinator-agent-configuration?
   (package             guix-build-coordinator-agent-configuration-package
-                       (default guix-build-coordinator))
+                       (default guix-build-coordinator/agent-only))
   (user                guix-build-coordinator-agent-configuration-user
                        (default "guix-build-coordinator-agent"))
   (coordinator         guix-build-coordinator-agent-configuration-coordinator
diff --git a/gnu/services/hurd.scm b/gnu/services/hurd.scm
index 61d92b4bda..5cf37adeaf 100644
--- a/gnu/services/hurd.scm
+++ b/gnu/services/hurd.scm
@@ -42,7 +42,7 @@
 (define-record-type* <hurd-console-configuration>
   hurd-console-configuration make-hurd-console-configuration
   hurd-console-configuration?
-  (hurd   hurd-console-configuration-hurd ;package
+  (hurd   hurd-console-configuration-hurd ;file-like
           (default hurd)))
 
 (define (hurd-console-shepherd-service config)
@@ -80,7 +80,7 @@
 (define-record-type* <hurd-getty-configuration>
   hurd-getty-configuration make-hurd-getty-configuration
   hurd-getty-configuration?
-  (hurd       hurd-getty-configuration-hurd  ;<package>
+  (hurd       hurd-getty-configuration-hurd  ;file-like
               (default hurd))
   (tty        hurd-getty-configuration-tty)  ;string
   (baud-rate  hurd-getty-configuration-baud-rate
diff --git a/gnu/services/lirc.scm b/gnu/services/lirc.scm
index e95f54280d..1f5adcdd5f 100644
--- a/gnu/services/lirc.scm
+++ b/gnu/services/lirc.scm
@@ -38,7 +38,7 @@
 (define-record-type* <lirc-configuration>
   lirc-configuration make-lirc-configuration
   lirc-configuation?
-  (lirc          lirc-configuration-lirc          ;<package>
+  (lirc          lirc-configuration-lirc          ;file-like
                  (default lirc))
   (device        lirc-configuration-device)       ;string
   (driver        lirc-configuration-driver)       ;string
diff --git a/gnu/services/mail.scm b/gnu/services/mail.scm
index 72dc123f41..4ad6ddb534 100644
--- a/gnu/services/mail.scm
+++ b/gnu/services/mail.scm
@@ -498,7 +498,7 @@ as @code{#t}.)")
 
 (define-configuration dovecot-configuration
   (dovecot
-   (package dovecot)
+   (file-like dovecot)
    "The dovecot package.")
 
   (listen
@@ -1472,7 +1472,7 @@ greyed out, instead of only later giving \"not selectable\" popup error.
 
 (define-configuration opaque-dovecot-configuration
   (dovecot
-   (package dovecot)
+   (file-like dovecot)
    "The dovecot package.")
 
   (string
@@ -1764,7 +1764,7 @@ match from local for any action outbound
 (define-record-type* <exim-configuration> exim-configuration
   make-exim-configuration
   exim-configuration?
-  (package       exim-configuration-package ;<package>
+  (package       exim-configuration-package ;file-like
                  (default exim))
   (config-file   exim-configuration-config-file ;file-like
                  (default #f)))
diff --git a/gnu/services/mcron.scm b/gnu/services/mcron.scm
index 0e675607f3..23760ebda4 100644
--- a/gnu/services/mcron.scm
+++ b/gnu/services/mcron.scm
@@ -51,7 +51,7 @@
 (define-record-type* <mcron-configuration> mcron-configuration
   make-mcron-configuration
   mcron-configuration?
-  (mcron             mcron-configuration-mcron    ;package
+  (mcron             mcron-configuration-mcron    ;file-like
                      (default mcron))
   (jobs              mcron-configuration-jobs     ;list of <mcron-job>
                      (default '())))
diff --git a/gnu/services/messaging.scm b/gnu/services/messaging.scm
index 0fcb7faf89..6ed55453db 100644
--- a/gnu/services/messaging.scm
+++ b/gnu/services/messaging.scm
@@ -333,7 +333,7 @@ can create such a file with:
 
   (define-all-configurations prosody-configuration
     (prosody
-     (package prosody)
+     (file-like prosody)
      "The Prosody package."
      global)
 
@@ -623,7 +623,7 @@ See also @url{https://prosody.im/doc/modules/mod_muc}."
 
 (define-configuration opaque-prosody-configuration
   (prosody
-   (package prosody)
+   (file-like prosody)
    "The prosody package.")
 
   (prosody.cfg.lua
diff --git a/gnu/services/monitoring.scm b/gnu/services/monitoring.scm
index 5123a8c441..f15450eed5 100644
--- a/gnu/services/monitoring.scm
+++ b/gnu/services/monitoring.scm
@@ -247,7 +247,7 @@ Prometheus.")
 
 (define-configuration zabbix-server-configuration
   (zabbix-server
-   (package zabbix-server)
+   (file-like zabbix-server)
    "The zabbix-server package.")
   (user
    (string "zabbix")
@@ -385,7 +385,7 @@ configuration file."))
 
 (define-configuration zabbix-agent-configuration
   (zabbix-agent
-   (package zabbix-agentd)
+   (file-like zabbix-agentd)
    "The zabbix-agent package.")
   (user
    (string "zabbix")
@@ -529,7 +529,7 @@ fastcgi_param PHP_VALUE \"post_max_size = 16M
 (define-configuration zabbix-front-end-configuration
   ;; TODO: Specify zabbix front-end package.
   ;; (zabbix-
-  ;;  (package zabbix-front-end)
+  ;;  (file-like zabbix-front-end)
   ;;  "The zabbix-front-end package.")
   (nginx
    (nginx-server-configuration-list
diff --git a/gnu/services/networking.scm b/gnu/services/networking.scm
index 7e310b70ec..5bb8638930 100644
--- a/gnu/services/networking.scm
+++ b/gnu/services/networking.scm
@@ -311,7 +311,7 @@ Protocol (DHCP) client, on all the non-loopback network interfaces.")))
 (define-record-type* <dhcpd-configuration>
   dhcpd-configuration make-dhcpd-configuration
   dhcpd-configuration?
-  (package   dhcpd-configuration-package ;<package>
+  (package   dhcpd-configuration-package ;file-like
              (default isc-dhcp))
   (config-file   dhcpd-configuration-config-file ;file-like
                  (default #f))
@@ -427,6 +427,8 @@ daemon is responsible for allocating IP addresses to its client.")))
   ;; Default set of NTP servers. These URLs are managed by the NTP Pool project.
   ;; Within Guix, Leo Famulari <leo@famulari.name> is the administrative contact
   ;; for this NTP pool "zone".
+  ;; The full list of available URLs are 0.guix.pool.ntp.org,
+  ;; 1.guix.pool.ntp.org, 2.guix.pool.ntp.org, and 3.guix.pool.ntp.org.
   (list
    (ntp-server
     (type 'pool)
@@ -743,7 +745,7 @@ demand.")))
 ;;; can evaluate: (configuration->documentation 'opendht-configuration)
 (define-configuration/no-serialization opendht-configuration
   (opendht
-   (package opendht)
+   (file-like opendht)
    "The @code{opendht} package to use.")
   (peer-discovery?
    (boolean #false)
@@ -1149,7 +1151,7 @@ and @command{wicd-curses} user interfaces."
                    (default network-manager))
   (dns network-manager-configuration-dns
        (default "default"))
-  (vpn-plugins network-manager-configuration-vpn-plugins ;list of <package>
+  (vpn-plugins network-manager-configuration-vpn-plugins ;list of file-like
                (default '())))
 
 (define network-manager-activation
@@ -1452,7 +1454,7 @@ whatever the thing is supposed to do).")))
 (define-record-type* <wpa-supplicant-configuration>
   wpa-supplicant-configuration make-wpa-supplicant-configuration
   wpa-supplicant-configuration?
-  (wpa-supplicant     wpa-supplicant-configuration-wpa-supplicant ;<package>
+  (wpa-supplicant     wpa-supplicant-configuration-wpa-supplicant ;file-like
                       (default wpa-supplicant))
   (requirement        wpa-supplicant-configuration-requirement    ;list of symbols
                       (default '(user-processes loopback syslogd)))
@@ -2124,7 +2126,7 @@ of the IPFS peer-to-peer storage network.")))
 (define-record-type* <keepalived-configuration>
   keepalived-configuration make-keepalived-configuration
   keepalived-configuration?
-  (keepalived  keepalived-configuration-keepalived  ;<package>
+  (keepalived  keepalived-configuration-keepalived  ;file-like
                (default keepalived))
   (config-file keepalived-configuration-config-file ;file-like
                (default #f)))
diff --git a/gnu/services/nfs.scm b/gnu/services/nfs.scm
index 277178c058..0d1617354e 100644
--- a/gnu/services/nfs.scm
+++ b/gnu/services/nfs.scm
@@ -304,7 +304,7 @@
                             '())
                      "--foreground"
                      #$@(if rpcstatd-port
-                            '("--port" (number->string rpcstatd-port))
+                            #~("--port" #$(number->string rpcstatd-port))
                             '()))
                #:pid-file "/var/run/rpc.statd.pid"))
            (stop #~(make-kill-destructor)))
@@ -320,7 +320,7 @@
                             '("--debug" "all")
                             '())
                      #$@(if rpcmountd-port
-                            '("--port" (number->string rpcmountd-port))
+                            #~("--port" #$(number->string rpcmountd-port))
                             '()))))
            (stop #~(make-kill-destructor)))
           (shepherd-service
diff --git a/gnu/services/nix.scm b/gnu/services/nix.scm
index 619e3cae54..df04a85c22 100644
--- a/gnu/services/nix.scm
+++ b/gnu/services/nix.scm
@@ -50,7 +50,7 @@
 (define-record-type* <nix-configuration>
   nix-configuration make-nix-configuration
   nix-configuration?
-  (package             nix-configuration-package ;package
+  (package             nix-configuration-package ;file-like
                        (default nix))
   (sandbox             nix-configuration-sandbox ;boolean
                        (default #t))
diff --git a/gnu/services/pam-mount.scm b/gnu/services/pam-mount.scm
index 98611462c2..33649b0f7c 100644
--- a/gnu/services/pam-mount.scm
+++ b/gnu/services/pam-mount.scm
@@ -90,7 +90,7 @@
      (module #~(string-append #$pam-mount "/lib/security/pam_mount.so"))))
   (list (lambda (pam)
           (if (member (pam-service-name pam)
-                      '("login" "su" "slim" "gdm-password"))
+                      '("login" "su" "slim" "gdm-password" "sddm"))
               (pam-service
                (inherit pam)
                (auth (append (pam-service-auth pam)
diff --git a/gnu/services/pm.scm b/gnu/services/pm.scm
index 256c6a7fa7..d91f2b69ce 100644
--- a/gnu/services/pm.scm
+++ b/gnu/services/pm.scm
@@ -84,7 +84,7 @@
 
 (define-configuration tlp-configuration
   (tlp
-   (package tlp)
+   (file-like tlp)
    "The TLP package.")
 
   (tlp-enable?
@@ -421,7 +421,7 @@ shutdown on system startup."))
   thermald-configuration?
   (ignore-cpuid-check? thermald-ignore-cpuid-check?    ;boolean
                        (default #f))
-  (thermald            thermald-thermald               ;package
+  (thermald            thermald-thermald               ;file-like
                        (default thermald)))
 
 (define (thermald-shepherd-service config)
diff --git a/gnu/services/rsync.scm b/gnu/services/rsync.scm
index 6c117bbda4..d456911563 100644
--- a/gnu/services/rsync.scm
+++ b/gnu/services/rsync.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017 Oleg Pykhalov <go.wigust@gmail.com>
+;;; Copyright © 2021 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -25,11 +26,23 @@
   #:use-module (gnu packages admin)
   #:use-module (guix records)
   #:use-module (guix gexp)
+  #:use-module (guix diagnostics)
+  #:use-module (guix i18n)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-26)
   #:use-module (ice-9 match)
   #:export (rsync-configuration
             rsync-configuration?
+            rsync-configuration-modules
+
+            rsync-module
+            rsync-module?
+            rsync-module-name
+            rsync-module-file-name
+            rsync-module-comment
+            rsync-module-read-only
+            rsync-module-timeout
+
             rsync-service-type))
 
 ;;;; Commentary:
@@ -39,12 +52,21 @@
 ;;;
 ;;;; Code:
 
+(define-with-syntax-properties (warn-share-field-deprecation (value properties))
+  (unless (unspecified? value)
+    (warning (source-properties->location properties)
+             (G_ "the 'share-path' and 'share-comment' fields is deprecated, \
+please use 'modules' instead~%")))
+  value)
+
 (define-record-type* <rsync-configuration>
   rsync-configuration
   make-rsync-configuration
   rsync-configuration?
-  (package       rsync-configuration-package              ; package
+  (package       rsync-configuration-package              ; file-like
                  (default rsync))
+  (address       rsync-configuration-address              ; string | #f
+                 (default #f))
   (port-number   rsync-configuration-port-number          ; integer
                  (default 873))
   (pid-file      rsync-configuration-pid-file             ; string
@@ -54,15 +76,22 @@
   (log-file      rsync-configuration-log-file             ; string
                  (default "/var/log/rsyncd.log"))
   (use-chroot?   rsync-configuration-use-chroot?          ; boolean
-                 (default #t))
+                 (sanitize warn-share-field-deprecation)
+                 (default *unspecified*))
+  (modules       rsync-configuration-actual-modules ;list of <rsync-module>
+                 (default %default-modules))  ;TODO: eventually remove default
   (share-path    rsync-configuration-share-path           ; string
-                 (default "/srv/rsyncd"))
+                 (sanitize warn-share-field-deprecation)
+                 (default *unspecified*))
   (share-comment rsync-configuration-share-comment        ; string
-                 (default "Rsync share"))
+                 (sanitize warn-share-field-deprecation)
+                 (default *unspecified*))
   (read-only?    rsync-configuration-read-only?           ; boolean
-                 (default #f))
+                 (sanitize warn-share-field-deprecation)
+                 (default *unspecified*))
   (timeout       rsync-configuration-timeout              ; integer
-                 (default 300))
+                 (sanitize warn-share-field-deprecation)
+                 (default *unspecified*))
   (user          rsync-configuration-user                 ; string
                  (default "root"))
   (group         rsync-configuration-group                ; string
@@ -72,6 +101,45 @@
   (gid           rsync-configuration-gid                  ; string
                  (default "rsyncd")))
 
+;; Rsync "module": a directory exported the rsync protocol.
+(define-record-type* <rsync-module>
+  rsync-module make-rsync-module
+  rsync-module?
+  (name          rsync-module-name)               ;string
+  (file-name     rsync-module-file-name)          ;string
+  (comment       rsync-module-comment             ;string
+                 (default ""))
+  (read-only?    rsync-module-read-only?          ;boolean
+                 (default #t))
+  (chroot?       rsync-module-chroot?             ;boolean
+                 (default #t))
+  (timeout       rsync-module-timeout             ;integer
+                 (default 300)))
+
+(define %default-modules
+  ;; Default modules, provided for backward compatibility.
+  (list (rsync-module (name "files")
+                      (file-name "/srv/rsyncd")
+                      (comment "Rsync share")
+                      (read-only? #f))))          ;yes, that was the default
+
+(define (rsync-configuration-modules config)
+  (match-record config <rsync-configuration>
+    (modules
+     share-path share-comment use-chroot? read-only? timeout) ;deprecated
+    (if (unspecified? share-path)
+        (rsync-configuration-actual-modules config)
+        (list (rsync-module                       ;backward compatibility
+               (name "files")
+               (file-name share-path)
+               (comment "Rsync share")
+               (chroot?
+                (if (unspecified? use-chroot?) #t use-chroot?))
+               (read-only?
+                (if (unspecified? read-only?) #f read-only?))
+               (timeout
+                (if (unspecified? timeout) 300 timeout)))))))
+
 (define (rsync-account config)
   "Return the user accounts and user groups for CONFIG."
   (let ((rsync-user (if (rsync-configuration-uid config)
@@ -94,54 +162,62 @@
   "Return the activation GEXP for CONFIG."
   (with-imported-modules '((guix build utils))
     #~(begin
-        (let ((share-directory  #$(rsync-configuration-share-path config))
-              (user  (getpw (if #$(rsync-configuration-uid config)
+        (let ((user  (getpw (if #$(rsync-configuration-uid config)
                                 #$(rsync-configuration-uid config)
                                 #$(rsync-configuration-user config))))
               (group (getpw (if #$(rsync-configuration-gid config)
                                 #$(rsync-configuration-gid config)
                                 #$(rsync-configuration-group config)))))
           (mkdir-p (dirname #$(rsync-configuration-pid-file config)))
-          (and=> share-directory mkdir-p)
-          (chown share-directory
-                 (passwd:uid user)
-                 (group:gid group))))))
+          (for-each (lambda (directory)
+                      (mkdir-p directory)
+                      (chown directory (passwd:uid user) (group:gid group)))
+                    '#$(map rsync-module-file-name
+                            (rsync-configuration-modules config)))))))
 
-(define rsync-config-file
+(define (rsync-config-file config)
   ;; Return the rsync configuration file corresponding to CONFIG.
-  (match-lambda
-    (($ <rsync-configuration> package port-number pid-file lock-file log-file
-                              use-chroot? share-path share-comment read-only?
-                              timeout user group uid gid)
-     (if (not (string=? user "root"))
-         (cond
-          ((<= port-number 1024)
-           (error (string-append "rsync-service: to run on port "
-                                 (number->string port-number)
-                                 ", user must be root.")))
-          (use-chroot?
-           (error (string-append "rsync-service: to run in a chroot"
-                                 ", user must be root.")))
-          (uid
-           (error "rsync-service: to use uid, user must be root."))
-          (gid
-           (error "rsync-service: to use gid, user must be root."))))
-     (mixed-text-file
-      "rsync.conf"
-      "# Generated by 'rsync-service'.\n\n"
-      "pid file = " pid-file "\n"
-      "lock file = " lock-file "\n"
-      "log file = " log-file "\n"
-      "port = " (number->string port-number) "\n"
-      "use chroot = " (if use-chroot? "true" "false") "\n"
-      (if uid (string-append "uid = " uid "\n") "")
-      "gid = " (if gid gid "nogroup") "\n" ; no group nobody
-      "\n"
-      "[files]\n"
-      "path = " share-path "\n"
-      "comment = " share-comment "\n"
-      "read only = " (if read-only? "true" "false") "\n"
-      "timeout = " (number->string timeout) "\n"))))
+  (define (module-config module)
+    (match-record module <rsync-module>
+      (name file-name comment chroot? read-only? timeout)
+      (list "[" name "]\n"
+            "  path = " file-name "\n"
+            "  use chroot = " (if chroot? "true" "false") "\n"
+            "  comment = " comment "\n"
+            "  read only = " (if read-only? "true" "false") "\n"
+            "  timeout = " (number->string timeout) "\n")))
+
+  (define modules
+    (rsync-configuration-modules config))
+
+  (match-record config <rsync-configuration>
+    (package address port-number pid-file lock-file log-file
+             user group uid gid)
+    (unless (string=? user "root")
+      (cond
+       ((<= port-number 1024)
+        (error (string-append "rsync-service: to run on port "
+                              (number->string port-number)
+                              ", user must be root.")))
+       ((find rsync-module-chroot? modules)
+        (error (string-append "rsync-service: to run in a chroot"
+                              ", user must be root.")))
+       (uid
+        (error "rsync-service: to use uid, user must be root."))
+       (gid
+        (error "rsync-service: to use gid, user must be root."))))
+
+    (apply mixed-text-file "rsync.conf"
+           "# Generated by 'rsync-service'.\n\n"
+           "pid file = " pid-file "\n"
+           "lock file = " lock-file "\n"
+           "log file = " log-file "\n"
+           (if address (string-append "address = " address "\n") "")
+           "port = " (number->string port-number) "\n"
+           (if uid (string-append "uid = " uid "\n") "")
+           "gid = " (if gid gid "nogroup") "\n"   ; no group nobody
+           "\n\n"
+           (append-map module-config modules))))
 
 (define (rsync-shepherd-service config)
   "Return a <shepherd-service> for rsync with CONFIG."
@@ -169,4 +245,7 @@
     (list (service-extension shepherd-root-service-type rsync-shepherd-service)
           (service-extension account-service-type rsync-account)
           (service-extension activation-service-type rsync-activation)))
-   (default-value (rsync-configuration))))
+   (default-value (rsync-configuration))
+   (description
+    "Run the rsync file copying tool in daemon mode.  This allows remote hosts
+to keep synchronized copies of the files exported by rsync.")))
diff --git a/gnu/services/science.scm b/gnu/services/science.scm
index 6f7ac91154..1414789de9 100644
--- a/gnu/services/science.scm
+++ b/gnu/services/science.scm
@@ -35,7 +35,7 @@
   rshiny-configuration
   make-rshiny-configuration
   rshiny-configuration?
-  (package          rshiny-configuration-package    ; package
+  (package          rshiny-configuration-package    ; file-like
                     (default r-shiny))
   (binary           rshiny-configuration-binary     ; string
                     (default "rshiny")))
diff --git a/gnu/services/shepherd.scm b/gnu/services/shepherd.scm
index 7277273686..b44dbf9d9f 100644
--- a/gnu/services/shepherd.scm
+++ b/gnu/services/shepherd.scm
@@ -88,7 +88,7 @@
   shepherd-configuration make-shepherd-configuration
   shepherd-configuration?
   (shepherd shepherd-configuration-shepherd
-            (default shepherd)) ; package
+            (default shepherd)) ; file-like
   (services shepherd-configuration-services
             (default '()))) ; list of <shepherd-service>
 
diff --git a/gnu/services/sound.scm b/gnu/services/sound.scm
index 55610f27e0..1217223a0c 100644
--- a/gnu/services/sound.scm
+++ b/gnu/services/sound.scm
@@ -55,7 +55,7 @@
 
 (define-record-type* <alsa-configuration>
   alsa-configuration make-alsa-configuration alsa-configuration?
-  (alsa-plugins alsa-configuration-alsa-plugins ;<package>
+  (alsa-plugins alsa-configuration-alsa-plugins ;file-like
                 (default alsa-plugins))
   (pulseaudio?   alsa-configuration-pulseaudio? ;boolean
                  (default #t))
diff --git a/gnu/services/ssh.scm b/gnu/services/ssh.scm
index a018052eeb..97f74a00f7 100644
--- a/gnu/services/ssh.scm
+++ b/gnu/services/ssh.scm
@@ -39,6 +39,7 @@
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-26)
   #:use-module (ice-9 match)
+  #:use-module (ice-9 vlist)
   #:export (lsh-configuration
             lsh-configuration?
             lsh-service
@@ -282,7 +283,7 @@ The other options should be self-descriptive."
 (define-record-type* <openssh-configuration>
   openssh-configuration make-openssh-configuration
   openssh-configuration?
-  ;; <package>
+  ;; file-like object
   (openssh               openssh-configuration-openssh
                          (default openssh))
   ;; string
@@ -535,7 +536,15 @@ of user-name/file-like tuples."
   (openssh-configuration
    (inherit config)
    (authorized-keys
-    (append (openssh-authorized-keys config) keys))))
+    (match (openssh-authorized-keys config)
+      (((users _ ...) ...)
+       ;; Build a user/key-list mapping.
+       (let ((user-keys (alist->vhash (openssh-authorized-keys config))))
+         ;; Coalesce the key lists associated with each user.
+         (map (lambda (user)
+                `(,user
+                  ,@(concatenate (vhash-fold* cons '() user user-keys))))
+              users)))))))
 
 (define openssh-service-type
   (service-type (name 'openssh)
@@ -754,7 +763,7 @@ object."
 (define-record-type* <webssh-configuration>
   webssh-configuration make-webssh-configuration
   webssh-configuration?
-  (package     webssh-configuration-package     ;package
+  (package     webssh-configuration-package     ;file-like
                (default webssh))
   (user-name   webssh-configuration-user-name   ;string
                (default "webssh"))
diff --git a/gnu/services/syncthing.scm b/gnu/services/syncthing.scm
index 12ebe7c107..7c3d5b027d 100644
--- a/gnu/services/syncthing.scm
+++ b/gnu/services/syncthing.scm
@@ -37,7 +37,7 @@
 (define-record-type* <syncthing-configuration>
   syncthing-configuration make-syncthing-configuration
   syncthing-configuration?
-  (syncthing syncthing-configuration-syncthing ;<package>
+  (syncthing syncthing-configuration-syncthing ;file-like
              (default syncthing))
   (arguments syncthing-configuration-arguments ;list of strings
              (default '()))
diff --git a/gnu/services/telephony.scm b/gnu/services/telephony.scm
index fd90840324..e678bae87c 100644
--- a/gnu/services/telephony.scm
+++ b/gnu/services/telephony.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017 nee  <nee-git@hidamari.blue>
-;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -227,13 +227,13 @@ SET-ACCOUNT-DETAILS."
 
 (define-configuration/no-serialization jami-configuration
   (jamid
-   (package libring)
+   (file-like libjami)
    "The Jami daemon package to use.")
   (dbus
-   (package dbus)
+   (file-like dbus)
    "The D-Bus package to use to start the required D-Bus session.")
   (nss-certs
-   (package nss-certs)
+   (file-like nss-certs)
    "The nss-certs package to use to provide TLS certificates.")
   (enable-logging?
    (boolean #t)
@@ -265,7 +265,7 @@ consistent state."))
 CONFIG, a <jami-configuration> object."
   (match-record config <jami-configuration>
     (jamid dbus enable-logging? debug? auto-answer?)
-    `(,(file-append jamid "/lib/ring/dring")
+    `(,(file-append jamid "/libexec/jamid")
       "--persistent"                    ;stay alive after client quits
       ,@(if enable-logging?
             '()                         ;logs go to syslog by default
@@ -739,7 +739,7 @@ argument, either a registered username or the fingerprint of the account.")
                              (const %jami-accounts))
           (service-extension activation-service-type
                              jami-dbus-session-activation)))
-   (description "Run the Jami daemon (@command{dring}).  This service is
+   (description "Run the Jami daemon (@command{jamid}).  This service is
 geared toward the use case of hosting Jami rendezvous points over a headless
 server.  If you use Jami on your local machine, you may prefer to setup a user
 Shepherd service for it instead; this way, the daemon will be shared via your
@@ -755,7 +755,7 @@ normal user D-Bus session bus.")))
 (define-record-type* <murmur-configuration> murmur-configuration
   make-murmur-configuration
   murmur-configuration?
-  (package               murmur-configuration-package ;<package>
+  (package               murmur-configuration-package ;file-like
                          (default mumble))
   (user                  murmur-configuration-user
                          (default "murmur"))
diff --git a/gnu/services/version-control.scm b/gnu/services/version-control.scm
index 3315e80c6f..defbd65c36 100644
--- a/gnu/services/version-control.scm
+++ b/gnu/services/version-control.scm
@@ -91,7 +91,7 @@
   git-daemon-configuration
   make-git-daemon-configuration
   git-daemon-configuration?
-  (package          git-daemon-configuration-package        ;package
+  (package          git-daemon-configuration-package        ;file-like
                     (default git))
   (export-all?      git-daemon-configuration-export-all     ;boolean
                     (default #f))
@@ -197,7 +197,7 @@ access to exported repositories under @file{/srv/git}."
   git-http-configuration
   make-git-http-configuration
   git-http-configuration?
-  (package          git-http-configuration-package        ;package
+  (package          git-http-configuration-package        ;file-like
                     (default git))
   (git-root         git-http-configuration-git-root       ;string
                     (default "/srv/git"))
diff --git a/gnu/services/virtualization.scm b/gnu/services/virtualization.scm
index bca5f56b87..66ae1a1565 100644
--- a/gnu/services/virtualization.scm
+++ b/gnu/services/virtualization.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2017 Ryan Moe <ryan.moe@gmail.com>
 ;;; Copyright © 2018, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2020,2021 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2021 Timotej Lazar <timotej.lazar@araneo.si>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -82,7 +83,11 @@
 
             qemu-binfmt-configuration
             qemu-binfmt-configuration?
-            qemu-binfmt-service-type))
+            qemu-binfmt-service-type
+
+            qemu-guest-agent-configuration
+            qemu-guest-agent-configuration?
+            qemu-guest-agent-service-type))
 
 (define (uglify-field-name field-name)
   (let ((str (symbol->string field-name)))
@@ -129,10 +134,10 @@
 
 (define-configuration libvirt-configuration
   (libvirt
-   (package libvirt)
+   (file-like libvirt)
    "Libvirt package.")
   (qemu
-   (package qemu)
+   (file-like qemu)
    "Qemu package.")
 
   (listen-tls?
@@ -849,26 +854,88 @@ functionality of the kernel Linux.")))
 
 
 ;;;
+;;; QEMU guest agent service.
+;;;
+
+(define-configuration qemu-guest-agent-configuration
+  (qemu
+   (file-like qemu-minimal)
+   "QEMU package.")
+  (device
+   (string "")
+   "Path to device or socket used to communicate with the host.  If not
+specified, the QEMU default path is used."))
+
+(define qemu-guest-agent-shepherd-service
+  (match-lambda
+    (($ <qemu-guest-agent-configuration> qemu device)
+     (list
+      (shepherd-service
+       (provision '(qemu-guest-agent))
+       (documentation "Run the QEMU guest agent.")
+       (start #~(make-forkexec-constructor
+                 `(,(string-append #$qemu "/bin/qemu-ga") "--daemon"
+                   "--pidfile=/var/run/qemu-ga.pid"
+                   "--statedir=/var/run"
+                   ,@(if #$device
+                         (list (string-append "--path=" #$device))
+                         '()))
+                 #:pid-file "/var/run/qemu-ga.pid"
+                 #:log-file "/var/log/qemu-ga.log"))
+       (stop #~(make-kill-destructor)))))))
+
+(define qemu-guest-agent-service-type
+  (service-type
+   (name 'qemu-guest-agent)
+   (extensions
+    (list (service-extension shepherd-root-service-type
+                             qemu-guest-agent-shepherd-service)))
+   (default-value (qemu-guest-agent-configuration))
+   (description "Run the QEMU guest agent.")))
+
+
+;;;
 ;;; Secrets for guest VMs.
 ;;;
 
-(define (secret-service-activation port)
-  "Return an activation snippet that fetches sensitive material at local PORT,
+(define (secret-service-shepherd-services port)
+  "Return a Shepherd service that fetches sensitive material at local PORT,
 over TCP.  Reboot upon failure."
-  (with-imported-modules '((gnu build secret-service)
-                           (guix build utils))
-    #~(begin
-        (use-modules (gnu build secret-service))
-        (let ((sent (secret-service-receive-secrets #$port)))
-          (unless sent
-            (sleep 3)
-            (reboot))))))
+  ;; This is a Shepherd service, rather than an activation snippet, to make
+  ;; sure it is started once 'networking' is up so it can accept incoming
+  ;; connections.
+  (list
+   (shepherd-service
+    (documentation "Fetch secrets from the host at startup time.")
+    (provision '(secret-service-client))
+    (requirement '(loopback networking))
+    (modules '((gnu build secret-service)
+               (guix build utils)))
+    (start (with-imported-modules '((gnu build secret-service)
+                                    (guix build utils))
+             #~(lambda ()
+                 ;; Since shepherd's output port goes to /dev/log, write this
+                 ;; message to stderr so it's visible on the Mach console.
+                 (format (current-error-port)
+                         "receiving secrets from the host...~%")
+                 (force-output (current-error-port))
+
+                 (let ((sent (secret-service-receive-secrets #$port)))
+                   (unless sent
+                     (sleep 3)
+                     (reboot))))))
+    (stop #~(const #f)))))
 
 (define secret-service-type
   (service-type
    (name 'secret-service)
-   (extensions (list (service-extension activation-service-type
-                                        secret-service-activation)))
+   (extensions (list (service-extension shepherd-root-service-type
+                                        secret-service-shepherd-services)
+
+                     ;; Make every Shepherd service depend on
+                     ;; 'secret-service-client'.
+                     (service-extension user-processes-service-type
+                                        (const '(secret-service-client)))))
    (description
     "This service fetches secret key and other sensitive material over TCP at
 boot time.  This service is meant to be used by virtual machines (VMs) that
@@ -928,7 +995,7 @@ that will be listening to receive secret keys on port 1004, TCP."
   hurd-vm-configuration?
   (os          hurd-vm-configuration-os                 ;<operating-system>
                (default %hurd-vm-operating-system))
-  (qemu        hurd-vm-configuration-qemu               ;<package>
+  (qemu        hurd-vm-configuration-qemu               ;file-like
                (default qemu-minimal))
   (image       hurd-vm-configuration-image              ;string
                (thunked)
diff --git a/gnu/services/vpn.scm b/gnu/services/vpn.scm
index df84905eb3..3e370ba4be 100644
--- a/gnu/services/vpn.scm
+++ b/gnu/services/vpn.scm
@@ -8,6 +8,7 @@
 ;;; Copyright © 2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2021 Raghav Gururajan <rg@raghavgururajan.name>
 ;;; Copyright © 2021 jgart <jgart@dismail.de>
+;;; Copyright © 2021 Nathan Dehnel <ncdehnel@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -67,6 +68,7 @@
             wireguard-configuration-interface
             wireguard-configuration-addresses
             wireguard-configuration-port
+            wireguard-configuration-dns
             wireguard-configuration-private-key
             wireguard-configuration-peers
 
@@ -302,7 +304,7 @@ client.  Each file is named after the name of the client."
 (define-split-configuration openvpn-client-configuration
   openvpn-server-configuration
   ((openvpn
-    (package openvpn)
+    (file-like openvpn)
     "The OpenVPN package.")
 
    (pid-file
@@ -561,7 +563,7 @@ is truncated and rewritten every minute.")
 (define-record-type* <strongswan-configuration>
   strongswan-configuration make-strongswan-configuration
   strongswan-configuration?
-  (strongswan      strongswan-configuration-strongswan ;<package>
+  (strongswan      strongswan-configuration-strongswan ;file-like
                    (default strongswan))
   (ipsec-conf      strongswan-configuration-ipsec-conf ;string|#f
                    (default #f))
@@ -704,7 +706,7 @@ strongSwan.")))
 (define-record-type* <wireguard-configuration>
   wireguard-configuration make-wireguard-configuration
   wireguard-configuration?
-  (wireguard          wireguard-configuration-wireguard ;<package>
+  (wireguard          wireguard-configuration-wireguard ;file-like
                       (default wireguard-tools))
   (interface          wireguard-configuration-interface ;string
                       (default "wg0"))
@@ -715,7 +717,9 @@ strongSwan.")))
   (private-key        wireguard-configuration-private-key ;string
                       (default "/etc/wireguard/private.key"))
   (peers              wireguard-configuration-peers ;list of <wiregard-peer>
-                      (default '())))
+                      (default '()))
+  (dns                wireguard-configuration-dns ;list of strings
+                      (default #f)))
 
 (define (wireguard-configuration-file config)
   (define (peer->config peer)
@@ -739,7 +743,7 @@ AllowedIPs = ~a
                   "\n"))))
 
   (match-record config <wireguard-configuration>
-    (wireguard interface addresses port private-key peers)
+    (wireguard interface addresses port private-key peers dns)
     (let* ((config-file (string-append interface ".conf"))
            (peers (map peer->config peers))
            (config
@@ -755,6 +759,7 @@ AllowedIPs = ~a
 Address = ~a
 PostUp = ~a set %i private-key ~a
 ~a
+~a
 ~{~a~^~%~}"
                                #$(string-join addresses ",")
                                #$(file-append wireguard "/bin/wg")
@@ -762,6 +767,10 @@ PostUp = ~a set %i private-key ~a
                                #$(if port
                                      (format #f "ListenPort = ~a" port)
                                      "")
+                               #$(if dns
+                                     (format #f "DNS = ~a"
+                                             (string-join dns ","))
+                                     "")
                                (list #$@peers)))))))))
       (file-append config "/" config-file))))
 
diff --git a/gnu/services/web.scm b/gnu/services/web.scm
index bb42eacf83..e5cc6343b5 100644
--- a/gnu/services/web.scm
+++ b/gnu/services/web.scm
@@ -535,7 +535,7 @@
 (define-record-type* <nginx-configuration>
   nginx-configuration make-nginx-configuration
   nginx-configuration?
-  (nginx         nginx-configuration-nginx          ;<package>
+  (nginx         nginx-configuration-nginx          ;file-like
                  (default nginx))
   (log-directory nginx-configuration-log-directory  ;string
                  (default "/var/log/nginx"))
@@ -552,9 +552,9 @@
   (modules nginx-configuration-modules (default '()))
   (global-directives nginx-configuration-global-directives
                      (default '((events . ()))))
-  (lua-package-path nginx-lua-package-path ;list of <package>
+  (lua-package-path nginx-lua-package-path ;list of file-like
                     (default #f))
-  (lua-package-cpath nginx-lua-package-cpath ;list of <package>
+  (lua-package-cpath nginx-lua-package-cpath ;list of file-like
                      (default #f))
   (extra-content nginx-configuration-extra-content
                  (default ""))
@@ -803,7 +803,7 @@ of index files."
 (define-record-type* <fcgiwrap-configuration> fcgiwrap-configuration
   make-fcgiwrap-configuration
   fcgiwrap-configuration?
-  (package       fcgiwrap-configuration-package ;<package>
+  (package       fcgiwrap-configuration-package ;file-like
                  (default fcgiwrap))
   (socket        fcgiwrap-configuration-socket
                  (default "tcp:127.0.0.1:9000"))
@@ -872,7 +872,7 @@ of index files."
 (define-record-type* <php-fpm-configuration> php-fpm-configuration
   make-php-fpm-configuration
   php-fpm-configuration?
-  (php              php-fpm-configuration-php ;<package>
+  (php              php-fpm-configuration-php ;file-like
                     (default php))
   (socket           php-fpm-configuration-socket
                     (default (string-append "/var/run/php"
@@ -1107,10 +1107,12 @@ a webserver.")
   hpcguix-web-configuration make-hpcguix-web-configuration
   hpcguix-web-configuration?
 
-  (package  hpcguix-web-package (default hpcguix-web)) ;<package>
+  (package  hpcguix-web-package (default hpcguix-web)) ;file-like
 
   ;; Specs is gexp of hpcguix-web configuration file
-  (specs    hpcguix-web-configuration-specs))
+  (specs    hpcguix-web-configuration-specs)
+  (address  hpcguix-web-configuration-address (default "127.0.0.1"))
+  (port     hpcguix-web-configuration-port (default 5000)))
 
 (define %hpcguix-web-accounts
   (list (user-group
@@ -1163,6 +1165,12 @@ a webserver.")
        (requirement   '(networking))
        (start #~(make-forkexec-constructor
                  (list #$(file-append hpcguix-web "/bin/hpcguix-web")
+                       (string-append "--listen="
+                                      #$(hpcguix-web-configuration-address
+                                         config))
+                       "-p"
+                       #$(number->string
+                          (hpcguix-web-configuration-port config))
                        (string-append "--config="
                                       #$(scheme-file "hpcguix-web.scm" specs)))
                  #:user "hpcguix-web"
@@ -1340,7 +1348,7 @@ files.")
 (define-record-type* <varnish-configuration>
   varnish-configuration make-varnish-configuration
   varnish-configuration?
-  (package             varnish-configuration-package          ;<package>
+  (package             varnish-configuration-package          ;file-like
                        (default varnish))
   (name                varnish-configuration-name             ;string
                        (default "default"))
diff --git a/gnu/services/xorg.scm b/gnu/services/xorg.scm
index d5c5316d3f..a5e1a1471d 100644
--- a/gnu/services/xorg.scm
+++ b/gnu/services/xorg.scm
@@ -10,6 +10,8 @@
 ;;; Copyright © 2020 Alex Griffin <a@ajgrf.com>
 ;;; Copyright © 2021 Brice Waegeneire <brice@waegenei.re>
 ;;; Copyright © 2021 Oleg Pykhalov <go.wigust@gmail.com>
+;;; Copyright © 2021 Josselin Poiret <josselin.poiret@protonmail.ch>
+;;; Copyright © 2022 Chris Marusich <cmmarusich@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -27,6 +29,7 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu services xorg)
+  #:autoload   (gnu services sddm) (sddm-service-type)
   #:use-module (gnu artwork)
   #:use-module (gnu services)
   #:use-module (gnu services shepherd)
@@ -48,6 +51,7 @@
   #:use-module (gnu packages admin)
   #:use-module (gnu packages bash)
   #:use-module (gnu system shadow)
+  #:use-module (guix build-system glib-or-gtk)
   #:use-module (guix build-system trivial)
   #:use-module (guix gexp)
   #:use-module (guix store)
@@ -55,6 +59,7 @@
   #:use-module (guix derivations)
   #:use-module (guix records)
   #:use-module (guix deprecation)
+  #:use-module (guix utils)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-9)
   #:use-module (srfi srfi-26)
@@ -161,7 +166,7 @@
 (define-record-type* <xorg-configuration>
   xorg-configuration make-xorg-configuration
   xorg-configuration?
-  (modules          xorg-configuration-modules    ;list of packages
+  (modules          xorg-configuration-modules    ;list of file-like
                     (thunked)
                     ; filter out modules not supported on current system
                     (default (filter
@@ -179,7 +184,7 @@
                     (default #f))
   (extra-config     xorg-configuration-extra-config ;list of strings
                     (default '()))
-  (server           xorg-configuration-server     ;package
+  (server           xorg-configuration-server     ;file-like
                     (default xorg-server))
   (server-arguments xorg-configuration-server-arguments ;list of strings
                     (default %default-xorg-server-arguments)))
@@ -869,6 +874,24 @@ the GNOME desktop environment.")
        (apply execl (string-append #$dbus "/bin/dbus-daemon")
               (program-arguments)))))
 
+;; Wrapper script for Wayland sessions, similar to Xsession.
+;;
+;; See `xinitrc`.  By default, it launches the specified session through a
+;; login shell.  With the default Guix configuration, this should source
+;; /etc/profile, setting up the Guix profile environment variables.  However,
+;; gdm launches its own graphical session through the same method, so we need
+;; to ignore this case, since `gdm` doesn't have a login shell.
+(define gdm-wayland-session-wrapper
+  (program-file
+   "gdm-wayland-session-wrapper"
+   #~((let* ((user (getpw (getuid)))
+	    (name (passwd:name user))
+	    (shell (passwd:shell user))
+	    (args (cdr (command-line))))
+        (if (string=? name "gdm")
+	    (apply execl (cons (car args) args))
+	    (execl shell shell "--login" "-c" (string-join args)))))))
+
 (define-record-type* <gdm-configuration>
   gdm-configuration make-gdm-configuration
   gdm-configuration?
@@ -879,11 +902,14 @@ the GNOME desktop environment.")
   (debug? gdm-configuration-debug? (default #f))
   (default-user gdm-configuration-default-user (default #f))
   (gnome-shell-assets gdm-configuration-gnome-shell-assets
-                      (default (list adwaita-icon-theme font-cantarell)))
+                      (default (list adwaita-icon-theme font-abattis-cantarell)))
   (xorg-configuration gdm-configuration-xorg
                       (default (xorg-configuration)))
   (x-session gdm-configuration-x-session
-             (default (xinitrc))))
+             (default (xinitrc)))
+  (wayland? gdm-configuration-wayland? (default #f))
+  (wayland-session gdm-configuration-wayland-session
+                   (default gdm-wayland-session-wrapper)))
 
 (define (gdm-configuration-file config)
   (mixed-text-file "gdm-custom.conf"
@@ -909,8 +935,9 @@ the GNOME desktop environment.")
                    ;; See also
                    ;; <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=39281>.
                    "InitialSetupEnable=false\n"
-                   ;; Enable me once X is working.
-                   "WaylandEnable=false\n"
+                   "WaylandEnable=" (if (gdm-configuration-wayland? config)
+                                        "true"
+                                        "false") "\n"
                    "\n"
                    "[debug]\n"
                    "Enable=" (if (gdm-configuration-debug? config)
@@ -976,7 +1003,17 @@ the GNOME desktop environment.")
                                   ;; can depend on GNOME Shell directly.
                                   (cons #$gnome-shell
                                         '#$(gdm-configuration-gnome-shell-assets
-                                            config)))))))))
+                                            config)))))
+                           ;; Add XCURSOR_PATH so that mutter can find its
+                           ;; cursors.  gdm doesn't login so doesn't source
+                           ;; the corresponding line in /etc/profile.
+                           "XCURSOR_PATH=/run/current-system/profile/share/icons"
+                           (string-append
+                            "GDK_PIXBUF_MODULE_FILE="
+                            #$gnome-shell "/" #$%gdk-pixbuf-loaders-cache-file)
+                           (string-append
+                            "GDM_WAYLAND_SESSION="
+                            #$(gdm-configuration-wayland-session config))))))
          (stop #~(make-kill-destructor))
          (respawn? #t))))
 
@@ -1006,10 +1043,15 @@ the GNOME desktop environment.")
                    "Run the GNOME Desktop Manager (GDM), a program that allows
 you to log in in a graphical session, whether or not you use GNOME."))))
 
+;; Since GDM depends on Rust (gdm -> gnome-shell -> gjs -> mozjs -> rust)
+;; and Rust is currently unavailable on non-x86_64 platforms, default to
+;; SDDM there (FIXME).
 (define* (set-xorg-configuration config
                                  #:optional
                                  (login-manager-service-type
-                                  gdm-service-type))
+                                  (if (target-x86-64?)
+                                      gdm-service-type
+                                      sddm-service-type)))
   "Tell the log-in manager (of type @var{login-manager-service-type}) to use
 @var{config}, an <xorg-configuration> record."
   (simple-service 'set-xorg-configuration
diff --git a/gnu/system.scm b/gnu/system.scm
index 17653682c5..cc925de16f 100644
--- a/gnu/system.scm
+++ b/gnu/system.scm
@@ -170,6 +170,7 @@
             %setuid-programs
             %sudoers-specification
             %base-packages
+            %base-packages-artwork
             %base-packages-interactive
             %base-packages-linux
             %base-packages-networking
@@ -233,8 +234,10 @@
   (mapped-devices operating-system-mapped-devices ; list of <mapped-device>
                   (default '()))
   (file-systems operating-system-file-systems)    ; list of fs
-  (swap-devices operating-system-swap-devices     ; list of strings
-                (default '()))
+  (swap-devices operating-system-swap-devices     ; list of string | <swap-space>
+                (default '())
+                (delayed)
+                (sanitize warn-swap-devices-change))
 
   (users operating-system-users                   ; list of user accounts
          (default %base-user-accounts))
@@ -264,6 +267,7 @@
                       (default (operating-system-default-essential-services
                                 this-operating-system)))
   (services operating-system-user-services        ; list of services
+            (thunked)                     ;allow for system-dependent services
             (default %base-services))
 
   (pam-services operating-system-pam-services     ; list of PAM services
@@ -583,9 +587,41 @@ mapped-device '~a' may not be mounted by the bootloader.~%")
   (map device-mapping-service
        (operating-system-user-mapped-devices os)))
 
+(define-syntax-rule (warn-swap-devices-change value)
+  (%warn-swap-devices-change value (current-source-location)))
+
+(define (%warn-swap-devices-change value location)
+  (map (lambda (x)
+         (unless (swap-space? x)
+           (warning
+            (source-properties->location
+             location)
+            (G_ "List elements of the field 'swap-devices' should \
+now use the <swap-space> record, as the old method is deprecated. \
+See \"(guix) operating-system Reference\" for more details.~%")))
+         x) value))
+
 (define (swap-services os)
   "Return the list of swap services for OS."
-  (map swap-service (operating-system-swap-devices os)))
+  (define early-userspace-file-systems
+    (filter file-system-needed-for-boot?
+            (operating-system-file-systems os)))
+
+  (define early-userspace-mapped-devices
+    (operating-system-boot-mapped-devices os))
+
+  (define (filter-deps swap)
+    (if (swap-space? swap)
+        (swap-space
+         (inherit swap)
+         (dependencies (remove (lambda (dep)
+                                 (or (member dep early-userspace-mapped-devices)
+                                     (member dep early-userspace-file-systems)))
+                               (swap-space-dependencies swap))))
+        swap))
+
+  (map (compose swap-service filter-deps)
+       (operating-system-swap-devices os)))
 
 (define* (system-linux-image-file-name #:optional
                                        (target (or (%current-target-system)
@@ -755,6 +791,10 @@ of PROVENANCE-SERVICE-TYPE to its services."
   (list ath9k-htc-firmware
         openfwwf-firmware))
 
+(define %base-packages-artwork
+  ;; Default set of artwork packages.
+  (list guix-icons))
+
 (define %base-packages-utils
   ;; Default set of  utilities packages.
  (cons* procps psmisc which
@@ -816,6 +856,7 @@ of PROVENANCE-SERVICE-TYPE to its services."
   ;; Default set of packages globally visible.  It should include anything
   ;; required for basic administrator tasks.
   (append (list e2fsprogs)
+          %base-packages-artwork
           %base-packages-interactive
           %base-packages-linux
           %base-packages-networking
@@ -847,6 +888,19 @@ syntactically correct."
                                "--check" "--file" #$file)
                        (copy-file #$file #$output)))))
 
+(define (os-release)
+  (plain-file "os-release"
+              "\
+NAME=\"Guix System\"
+ID=guix
+PRETTY_NAME=\"Guix System\"
+LOGO=guix-icon
+HOME_URL=\"https://guix.gnu.org\"
+DOCUMENTATION_URL=\"https://guix.gnu.org/en/manual\"
+SUPPORT_URL=\"https://guix.gnu.org/en/help\"
+BUG_REPORT_URL=\"https://lists.gnu.org/mailman/listinfo/bug-guix\"
+"))
+
 (define* (operating-system-etc-service os)
   "Return a <service> that builds a directory containing the static part of
 the /etc directory."
@@ -859,7 +913,12 @@ the /etc directory."
                         "/run/current-system/profile/sbin\n"
                         "ENV_SUPATH  /run/setuid-programs:"
                         "/run/current-system/profile/bin:"
-                        "/run/current-system/profile/sbin\n")))
+                        "/run/current-system/profile/sbin\n"
+
+                        "\n"
+                        "# Allow 'chfn' to change the full name,\n"
+                        "# room number, and so on.\n"
+                        "CHFN_RESTRICT   frwh\n")))
 
          (hurd       (operating-system-hurd os))
          (issue      (plain-file "issue" (operating-system-issue os)))
@@ -952,7 +1011,8 @@ then
   source /run/current-system/profile/etc/profile.d/bash_completion.sh
 fi\n")))
     (etc-service
-     `(("services" ,(file-append net-base "/etc/services"))
+     `(("os-release" ,#~#$(os-release))
+       ("services" ,(file-append net-base "/etc/services"))
        ("protocols" ,(file-append net-base "/etc/protocols"))
        ("rpc" ,(file-append net-base "/etc/rpc"))
        ("login.defs" ,#~#$login.defs)
@@ -1073,16 +1133,17 @@ use 'plain-file' instead~%")
     ;; TODO: Remove when glibc@2.23 is long gone.
     ("GUIX_LOCPATH" . "/run/current-system/locale")))
 
-(define-syntax-rule (ensure-setuid-program-list lst)
-  "Ensure LST is a list of <setuid-program> records and warn otherwise."
-  (%ensure-setuid-program-list lst (current-source-location)))
+;; Ensure LST is a list of <setuid-program> records and warn otherwise.
+(define-with-syntax-properties (ensure-setuid-program-list (lst properties))
+  (%ensure-setuid-program-list lst properties))
 
-(define (%ensure-setuid-program-list lst location)
+;; We want to be able to use defines, so define a procedure.
+(define (%ensure-setuid-program-list lst properties)
   (define warned? #f)
 
   (define (warn-once)
     (unless warned?
-      (warning (source-properties->location location)
+      (warning (source-properties->location properties)
                (G_ "representing setuid programs with file-like objects is \
 deprecated; use 'setuid-program' instead~%"))
       (set! warned? #t)))
@@ -1102,6 +1163,7 @@ deprecated; use 'setuid-program' instead~%"))
   (let ((shadow (@ (gnu packages admin) shadow)))
     (map file-like->setuid-program
          (list (file-append shadow "/bin/passwd")
+               (file-append shadow "/bin/chfn")
                (file-append shadow "/bin/sg")
                (file-append shadow "/bin/su")
                (file-append shadow "/bin/newgrp")
diff --git a/gnu/system/examples/desktop.tmpl b/gnu/system/examples/desktop.tmpl
index c928008c92..7055a8f92d 100644
--- a/gnu/system/examples/desktop.tmpl
+++ b/gnu/system/examples/desktop.tmpl
@@ -1,9 +1,9 @@
 ;; This is an operating system configuration template
 ;; for a "desktop" setup with GNOME and Xfce where the
-;; root partition is encrypted with LUKS.
+;; root partition is encrypted with LUKS, and a swap file.
 
-(use-modules (gnu) (gnu system nss))
-(use-service-modules desktop xorg)
+(use-modules (gnu) (gnu system nss) (guix utils))
+(use-service-modules desktop sddm xorg)
 (use-package-modules certs gnome)
 
 (operating-system
@@ -42,16 +42,26 @@
                          (type "vfat")))
                  %base-file-systems))
 
+  ;; Specify a swap file for the system, which resides on the
+  ;; root file system.
+  (swap-devices (list (swap-space
+                       (target "/swapfile"))))
+
   ;; Create user `bob' with `alice' as its initial password.
   (users (cons (user-account
                 (name "bob")
                 (comment "Alice's brother")
                 (password (crypt "alice" "$6$abc"))
-                (group "users")
+                (group "students")
                 (supplementary-groups '("wheel" "netdev"
                                         "audio" "video")))
                %base-user-accounts))
 
+  ;; Add the `students' group
+  (groups (cons* (user-group
+                  (name "students"))
+                 %base-groups))
+
   ;; This is where we specify system-wide packages.
   (packages (append (list
                      ;; for HTTPS access
@@ -64,12 +74,25 @@
   ;; by clicking the gear.  Use the "desktop" services, which
   ;; include the X11 log-in service, networking with
   ;; NetworkManager, and more.
-  (services (append (list (service gnome-desktop-service-type)
-                          (service xfce-desktop-service-type)
-                          (set-xorg-configuration
-                           (xorg-configuration
-                            (keyboard-layout keyboard-layout))))
-                    %desktop-services))
+  (services (if (target-x86-64?)
+                (append (list (service gnome-desktop-service-type)
+                              (service xfce-desktop-service-type)
+                              (set-xorg-configuration
+                               (xorg-configuration
+                                (keyboard-layout keyboard-layout))))
+                        %desktop-services)
+
+                ;; FIXME: Since GDM depends on Rust (gdm -> gnome-shell -> gjs
+                ;; -> mozjs -> rust) and Rust is currently unavailable on
+                ;; non-x86_64 platforms, we use SDDM and Mate here instead of
+                ;; GNOME and GDM.
+                (append (list (service mate-desktop-service-type)
+                              (service xfce-desktop-service-type)
+                              (set-xorg-configuration
+                               (xorg-configuration
+                                (keyboard-layout keyboard-layout))
+                               sddm-service-type))
+                        %desktop-services)))
 
   ;; Allow resolution of '.local' host names with mDNS.
   (name-service-switch %mdns-host-lookup-nss))
diff --git a/gnu/system/examples/vm-image.tmpl b/gnu/system/examples/vm-image.tmpl
index a59d91587b..ccb0b045db 100644
--- a/gnu/system/examples/vm-image.tmpl
+++ b/gnu/system/examples/vm-image.tmpl
@@ -5,7 +5,7 @@
 ;;
 
 (use-modules (gnu) (guix) (srfi srfi-1))
-(use-service-modules desktop mcron networking spice ssh xorg)
+(use-service-modules desktop mcron networking spice ssh xorg sddm)
 (use-package-modules bootloaders certs fonts nvi
                      package-management wget xorg)
 
@@ -107,12 +107,12 @@ root ALL=(ALL) ALL
                  ;; Use the DHCP client service rather than NetworkManager.
                  (service dhcp-client-service-type))
 
-           ;; Remove GDM, ModemManager, NetworkManager, and wpa-supplicant,
-           ;; which don't make sense in a VM.
+           ;; Remove some services that don't make sense in a VM.
            (remove (lambda (service)
                      (let ((type (service-kind service)))
                        (or (memq type
                                  (list gdm-service-type
+                                       sddm-service-type
                                        wpa-supplicant-service-type
                                        cups-pk-helper-service-type
                                        network-manager-service-type
diff --git a/gnu/system/file-systems.scm b/gnu/system/file-systems.scm
index e69cfd06e6..e1d1fb72cc 100644
--- a/gnu/system/file-systems.scm
+++ b/gnu/system/file-systems.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013-2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2020 Google LLC
 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
 ;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
@@ -30,7 +30,8 @@
   #:use-module (srfi srfi-35)
   #:use-module (srfi srfi-9 gnu)
   #:use-module (guix records)
-  #:use-module ((guix diagnostics) #:select (&fix-hint))
+  #:use-module ((guix diagnostics)
+                #:select (source-properties->location leave &fix-hint))
   #:use-module (guix i18n)
   #:use-module (gnu system uuid)
   #:re-export (uuid                               ;backward compatibility
@@ -96,7 +97,14 @@
 
             %store-mapping
             %network-configuration-files
-            %network-file-mappings))
+            %network-file-mappings
+
+            swap-space
+            swap-space?
+            swap-space-target
+            swap-space-dependencies
+            swap-space-priority
+            swap-space-discard?))
 
 ;;; Commentary:
 ;;;
@@ -107,6 +115,45 @@
 ;;;
 ;;; Code:
 
+(eval-when (expand load eval)
+  (define invalid-file-system-flags
+    ;; Note: Keep in sync with 'mount-flags->bit-mask'.
+    (let ((known-flags '(read-only
+                         bind-mount no-suid no-dev no-exec
+                         no-atime strict-atime lazy-time)))
+      (lambda (flags)
+        "Return the subset of FLAGS that is invalid."
+        (remove (cut memq <> known-flags) flags))))
+
+  (define (%validate-file-system-flags flags location)
+    "Raise an error if FLAGS contains invalid mount flags; otherwise return
+FLAGS."
+    (match (invalid-file-system-flags flags)
+      (() flags)
+      (invalid
+       (leave (source-properties->location location)
+              (N_ "invalid file system mount flag:~{ ~s~}~%"
+                  "invalid file system mount flags:~{ ~s~}~%"
+                  (length invalid))
+              invalid)))))
+
+(define-syntax validate-file-system-flags
+  (lambda (s)
+    "Validate the given file system mount flags, raising an error if invalid
+flags are found."
+    (syntax-case s (quote)
+      ((_ (quote (symbols ...)))                  ;validate at expansion time
+       (begin
+         (%validate-file-system-flags (syntax->datum #'(symbols ...))
+                                      (syntax-source s))
+         #'(quote (symbols ...))))
+      ((_ flags)
+       #`(%validate-file-system-flags flags
+                                      '#,(datum->syntax s (syntax-source s))))
+      (id
+       (identifier? #'id)
+       #'%validate-file-system-flags))))
+
 ;; File system declaration.
 (define-record-type* <file-system> %file-system
   make-file-system
@@ -115,7 +162,8 @@
   (mount-point      file-system-mount-point)      ; string
   (type             file-system-type)             ; string
   (flags            file-system-flags             ; list of symbols
-                    (default '()))
+                    (default '())
+                    (sanitize validate-file-system-flags))
   (options          file-system-options           ; string or #f
                     (default #f))
   (mount?           file-system-mount?            ; Boolean
@@ -671,4 +719,19 @@ subvolume name is unknown."))
                   (G_ "Use the @code{subvol} Btrfs file system option."))))))))
 
 
+;;;
+;;; Swap space
+;;;
+
+(define-record-type* <swap-space> swap-space make-swap-space
+  swap-space?
+  this-swap-space
+  (target swap-space-target)
+  (dependencies swap-space-dependencies
+                (default '()))
+  (priority swap-space-priority
+            (default #f))
+  (discard? swap-space-discard?
+           (default #f)))
+
 ;;; file-systems.scm ends here
diff --git a/gnu/system/hurd.scm b/gnu/system/hurd.scm
index e976494d74..2acc7b7e11 100644
--- a/gnu/system/hurd.scm
+++ b/gnu/system/hurd.scm
@@ -34,6 +34,7 @@
   #:use-module (gnu packages guile-xyz)
   #:use-module (gnu packages hurd)
   #:use-module (gnu packages less)
+  #:use-module (gnu packages texinfo)
   #:use-module (gnu services)
   #:use-module (gnu services base)
   #:use-module (gnu services hurd)
@@ -67,7 +68,8 @@
   (list hurd bash coreutils file findutils grep sed
         diffutils patch gawk tar gzip bzip2 xz lzip
         guile-3.0-latest guile-colorized guile-readline
-        net-base inetutils less shadow shepherd sudo which))
+        net-base inetutils less shadow shepherd sudo which
+        info-reader))
 
 (define %base-services/hurd
   (list (service hurd-console-service-type
@@ -77,11 +79,13 @@
         (service hurd-getty-service-type (hurd-getty-configuration
                                           (tty "tty2")))
         (service static-networking-service-type
-                 (list (static-networking (interface "lo")
-                                          (ip "127.0.0.1")
-                                          (requirement '())
-                                          (provision '(loopback networking))
-                                          (name-servers '("10.0.2.3")))))
+                 (list %loopback-static-networking
+
+                       ;; QEMU user-mode networking.  To get "eth0", you need
+                       ;; QEMU to emulate a device for which Mach has an
+                       ;; in-kernel driver, for instance with:
+                       ;; --device rtl8139,netdev=net0 --netdev user,id=net0
+                       %qemu-static-networking))
         (syslog-service)
         (service guix-service-type
                  (guix-configuration
diff --git a/gnu/system/image.scm b/gnu/system/image.scm
index 1012fa6158..42e215f614 100644
--- a/gnu/system/image.scm
+++ b/gnu/system/image.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2020 Mathieu Othacehe <m.othacehe@gmail.com>
+;;; Copyright © 2020, 2021 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -31,16 +31,19 @@
   #:use-module (gnu bootloader)
   #:use-module (gnu bootloader grub)
   #:use-module (gnu image)
+  #:use-module (gnu platform)
   #:use-module (gnu services)
   #:use-module (gnu services base)
   #:use-module (gnu system)
   #:use-module (gnu system file-systems)
+  #:use-module (gnu system linux-container)
   #:use-module (gnu system uuid)
   #:use-module (gnu system vm)
   #:use-module (guix packages)
   #:use-module (gnu packages base)
   #:use-module (gnu packages bootloaders)
   #:use-module (gnu packages cdrom)
+  #:use-module (gnu packages compression)
   #:use-module (gnu packages disk)
   #:use-module (gnu packages gawk)
   #:use-module (gnu packages genimage)
@@ -66,16 +69,16 @@
 
             efi-disk-image
             iso9660-image
-            arm32-disk-image
-            arm64-disk-image
+            docker-image
+            raw-with-offset-disk-image
 
             image-with-os
             efi-raw-image-type
             qcow2-image-type
             iso-image-type
             uncompressed-iso-image-type
-            arm32-image-type
-            arm64-image-type
+            docker-image-type
+            raw-with-offset-image-type
 
             image-with-label
             system-image
@@ -128,10 +131,13 @@
            (label "GUIX_IMAGE")
            (flags '(boot)))))))
 
-(define* (arm32-disk-image #:optional (offset root-offset))
+(define docker-image
+  (image
+   (format 'docker)))
+
+(define* (raw-with-offset-disk-image #:optional (offset root-offset))
   (image
    (format 'disk-image)
-   (target "arm-linux-gnueabihf")
    (partitions
     (list (partition
            (inherit root-partition)
@@ -140,11 +146,6 @@
    ;; fails.
    (volatile-root? #f)))
 
-(define* (arm64-disk-image #:optional (offset root-offset))
-  (image
-   (inherit (arm32-disk-image offset))
-   (target "aarch64-linux-gnu")))
-
 
 ;;;
 ;;; Images types.
@@ -186,15 +187,15 @@ set to the given OS."
                   (compression? #f))
                  <>))))
 
-(define arm32-image-type
+(define docker-image-type
   (image-type
-   (name 'arm32-raw)
-   (constructor (cut image-with-os (arm32-disk-image) <>))))
+   (name 'docker)
+   (constructor (cut image-with-os docker-image <>))))
 
-(define arm64-image-type
+(define raw-with-offset-image-type
   (image-type
-   (name 'arm64-raw)
-   (constructor (cut image-with-os (arm64-disk-image) <>))))
+   (name 'raw-with-offset)
+   (constructor (cut image-with-os (raw-with-offset-disk-image) <>))))
 
 
 ;;
@@ -232,8 +233,7 @@ set to the given OS."
 (define-syntax-rule (with-imported-modules* gexp* ...)
   (with-extensions gcrypt-sqlite3&co
     (with-imported-modules `(,@(source-module-closure
-                                '((gnu build vm)
-                                  (gnu build image)
+                                '((gnu build image)
                                   (gnu build bootloader)
                                   (gnu build hurd-boot)
                                   (gnu build linux-boot)
@@ -241,8 +241,7 @@ set to the given OS."
                                 #:select? not-config?)
                              ((guix config) => ,(make-config.scm)))
       #~(begin
-          (use-modules (gnu build vm)
-                       (gnu build image)
+          (use-modules (gnu build image)
                        (gnu build bootloader)
                        (gnu build hurd-boot)
                        (gnu build linux-boot)
@@ -310,6 +309,14 @@ used in the image."
          ((member 'esp flags) "0xEF")
          (else "0x83"))))
 
+    (define (partition->gpt-type partition)
+      ;; Return the genimage GPT partition type code corresponding to PARTITION.
+      ;; See https://github.com/pengutronix/genimage/blob/master/README.rst
+      (let ((flags (partition-flags partition)))
+        (cond
+          ((member 'esp flags) "U")
+          (else "L"))))
+
     (define (partition-image partition)
       ;; Return as a file-like object, an image of the given PARTITION.  A
       ;; directory, filled by calling the PARTITION initializer procedure, is
@@ -341,6 +348,8 @@ used in the image."
                  (initializer image-root
                               #:references-graphs '#$graph
                               #:deduplicate? #f
+                              #:copy-closures? (not
+                                                #$(image-shared-store? image))
                               #:system-directory #$os
                               #:grub-efi #+grub-efi
                               #:bootloader-package
@@ -359,26 +368,44 @@ used in the image."
                        #:local-build? #f
                        #:options `(#:references-graphs ,inputs))))
 
-    (define (partition->config partition)
+    (define (gpt-image? image)
+      (eq? 'gpt (image-partition-table-type image)))
+
+    (define (partition-type-values image partition)
+      (if (gpt-image? image)
+          (values "partition-type-uuid" (partition->gpt-type partition))
+          (values "partition-type" (partition->dos-type partition))))
+
+    (define (partition->config image partition)
       ;; Return the genimage partition configuration for PARTITION.
-      (let ((label (partition-label partition))
-            (dos-type (partition->dos-type partition))
-            (image (partition-image partition))
-            (offset (partition-offset partition)))
-        #~(format #f "~/partition ~a {
-~/~/partition-type = ~a
-~/~/image = \"~a\"
-~/~/offset = \"~a\"
-~/}"
-                  #$label
-                  #$dos-type
-                  #$image
-                  #$offset)))
+      (let-values (((partition-type-attribute partition-type-value)
+                    (partition-type-values image partition)))
+        (let ((label (partition-label partition))
+              (image (partition-image partition))
+              (offset (partition-offset partition)))
+          #~(format #f "~/partition ~a {
+  ~/~/~a = ~a
+  ~/~/image = \"~a\"
+  ~/~/offset = \"~a\"
+  ~/}"
+                    #$label
+                    #$partition-type-attribute
+                    #$partition-type-value
+                    #$image
+                    #$offset))))
+
+    (define (genimage-type-options image-type image)
+      (cond
+        ((equal? image-type "hdimage")
+         (format #f "~%~/~/gpt = ~a~%~/"
+                 (if (gpt-image? image) "true" "false")))
+        (else "")))
 
     (let* ((format (image-format image))
            (image-type (format->image-type format))
+           (image-type-options (genimage-type-options image-type image))
            (partitions (image-partitions image))
-           (partitions-config (map partition->config partitions))
+           (partitions-config (map (cut partition->config image <>) partitions))
            (builder
             #~(begin
                 (let ((format (@ (ice-9 format) format)))
@@ -387,9 +414,10 @@ used in the image."
                       (format port
                               "\
 image ~a {
-~/~a {}
+~/~a {~a}
 ~{~a~^~%~}
-}~%" #$genimage-name #$image-type (list #$@partitions-config))))))))
+}~%" #$genimage-name #$image-type #$image-type-options
+ (list #$@partitions-config))))))))
       (computed-file "genimage.cfg" builder)))
 
   (let* ((image-name (image-name image))
@@ -514,15 +542,107 @@ returns an image record where the first partition's label is set to <label>."
 
 
 ;;
+;; Docker image.
+;;
+
+(define* (system-docker-image image
+                              #:key
+                              (name "docker-image"))
+  "Build a docker image for IMAGE.  NAME is the base name to use for the
+output file."
+  (define boot-program
+    ;; Program that runs the boot script of OS, which in turn starts shepherd.
+    (program-file "boot-program"
+                  #~(let ((system (cadr (command-line))))
+                      (setenv "GUIX_NEW_SYSTEM" system)
+                      (execl #$(file-append guile-3.0 "/bin/guile")
+                             "guile" "--no-auto-compile"
+                             (string-append system "/boot")))))
+
+  (define shared-network?
+    (image-shared-network? image))
+
+  (let* ((os (operating-system-with-gc-roots
+              (containerized-operating-system
+               (image-operating-system image) '()
+               #:shared-network?
+               shared-network?)
+              (list boot-program)))
+         (substitutable? (image-substitutable? image))
+         (register-closures? (has-guix-service-type? os))
+         (schema (and register-closures?
+                      (local-file (search-path %load-path
+                                               "guix/store/schema.sql"))))
+         (name (string-append name ".tar.gz"))
+         (graph "system-graph"))
+    (define builder
+      (with-extensions (cons guile-json-3         ;for (guix docker)
+                             gcrypt-sqlite3&co)   ;for (guix store database)
+        (with-imported-modules `(,@(source-module-closure
+                                    '((guix docker)
+                                      (guix store database)
+                                      (guix build utils)
+                                      (guix build store-copy)
+                                      (gnu build image))
+                                    #:select? not-config?)
+                                 ((guix config) => ,(make-config.scm)))
+          #~(begin
+              (use-modules (guix docker)
+                           (guix build utils)
+                           (gnu build image)
+                           (srfi srfi-19)
+                           (guix build store-copy)
+                           (guix store database))
+
+              ;; Set the SQL schema location.
+              (sql-schema #$schema)
+
+              ;; Allow non-ASCII file names--e.g., 'nss-certs'--to be decoded.
+              (setenv "GUIX_LOCPATH"
+                      #+(file-append glibc-utf8-locales "/lib/locale"))
+              (setlocale LC_ALL "en_US.utf8")
+
+              (set-path-environment-variable "PATH" '("bin" "sbin") '(#+tar))
+
+              (let ((image-root (string-append (getcwd) "/tmp-root")))
+                (mkdir-p image-root)
+                (initialize-root-partition image-root
+                                           #:references-graphs '(#$graph)
+                                           #:copy-closures? #f
+                                           #:register-closures? #$register-closures?
+                                           #:deduplicate? #f
+                                           #:system-directory #$os)
+                (build-docker-image
+                 #$output
+                 (cons* image-root
+                        (map store-info-item
+                             (call-with-input-file #$graph
+                               read-reference-graph)))
+                 #$os
+                 #:entry-point '(#$boot-program #$os)
+                 #:compressor '(#+(file-append gzip "/bin/gzip") "-9n")
+                 #:creation-time (make-time time-utc 0 1)
+                 #:transformations `((,image-root -> ""))))))))
+
+    (computed-file name builder
+                   ;; Allow offloading so that this I/O-intensive process
+                   ;; doesn't run on the build farm's head node.
+                   #:local-build? #f
+                   #:options `(#:references-graphs ((,graph ,os))
+                               #:substitutable? ,substitutable?))))
+
+
+;;
 ;; Image creation.
 ;;
 
 (define (image->root-file-system image)
   "Return the IMAGE root partition file-system type."
-  (let ((format (image-format image)))
-    (if (eq? format 'iso9660)
-        "iso9660"
-        (partition-file-system (find-root-partition image)))))
+  (case (image-format image)
+    ((iso9660) "iso9660")
+    ((docker) "dummy")
+    (else
+     (partition-file-system (find-root-partition image)))))
 
 (define (root-size image)
   "Return the root partition size of IMAGE."
@@ -615,7 +735,30 @@ it can be used for bootloading."
   "Return the derivation of IMAGE.  It can be a raw disk-image or an ISO9660
 image, depending on IMAGE format."
   (define substitutable? (image-substitutable? image))
-  (define target (image-target image))
+  (define platform (image-platform image))
+
+  ;; The image platform definition may provide the appropriate "system"
+  ;; architecture for the image.  If we are already running on this system,
+  ;; the image can be built natively.  If we are running on a different
+  ;; system, then we need to cross-compile, using the "target" provided by the
+  ;; image definition.
+  (define system (and=> platform platform-system))
+  (define target (cond
+                  ;; No defined platform, let's use the user defined
+                  ;; system/target parameters.
+                  ((not platform)
+                   (%current-target-system))
+                  ;; The current system is the same as the platform system, no
+                  ;; need to cross-compile.
+                  ((and system
+                        (string=? system (%current-system)))
+                   #f)
+                  ;; If there is a user defined target let's override the
+                  ;; platform target. Otherwise, we can cross-compile to the
+                  ;; platform target.
+                  (else
+                   (or (%current-target-system)
+                       (and=> platform platform-target)))))
 
   (with-parameters ((%current-target-system target))
     (let* ((os (operating-system-for-image image))
@@ -633,6 +776,8 @@ image, depending on IMAGE format."
                             #:register-closures? register-closures?
                             #:inputs `(("system" ,os)
                                        ("bootcfg" ,bootcfg))))
+       ((memq image-format '(docker))
+        (system-docker-image image*))
        ((memq image-format '(iso9660))
          (system-iso9660-image
           image*
diff --git a/gnu/system/images/hurd.scm b/gnu/system/images/hurd.scm
index fc2dbe3209..4c38c46a89 100644
--- a/gnu/system/images/hurd.scm
+++ b/gnu/system/images/hurd.scm
@@ -23,6 +23,7 @@
   #:use-module (gnu bootloader grub)
   #:use-module (gnu image)
   #:use-module (gnu packages ssh)
+  #:use-module (gnu platforms hurd)
   #:use-module (gnu services)
   #:use-module (gnu services ssh)
   #:use-module (gnu system)
@@ -75,7 +76,7 @@
 (define hurd-disk-image
   (image
    (format 'disk-image)
-   (target "i586-pc-gnu")
+   (platform hurd)
    (partitions
     (list (partition
            (size 'guess)
@@ -103,13 +104,15 @@
 (define hurd-barebones-disk-image
   (image
    (inherit
-    (os->image hurd-barebones-os #:type hurd-image-type))
+    (os+platform->image hurd-barebones-os hurd
+                        #:type hurd-image-type))
    (name 'hurd-barebones-disk-image)))
 
 (define hurd-barebones-qcow2-image
   (image
    (inherit
-    (os->image hurd-barebones-os #:type hurd-qcow2-image-type))
+    (os+platform->image hurd-barebones-os hurd
+                        #:type hurd-qcow2-image-type))
    (name 'hurd-barebones.qcow2)))
 
 ;; Return the default image.
diff --git a/gnu/system/images/novena.scm b/gnu/system/images/novena.scm
index 63227af509..3ce62fbf3b 100644
--- a/gnu/system/images/novena.scm
+++ b/gnu/system/images/novena.scm
@@ -22,6 +22,7 @@
   #:use-module (gnu bootloader u-boot)
   #:use-module (gnu image)
   #:use-module (gnu packages linux)
+  #:use-module (gnu platforms arm)
   #:use-module (gnu services)
   #:use-module (gnu services base)
   #:use-module (gnu system)
@@ -52,12 +53,13 @@
 (define novena-image-type
   (image-type
    (name 'novena-raw)
-   (constructor (cut image-with-os (arm32-disk-image) <>))))
+   (constructor (cut image-with-os (raw-with-offset-disk-image) <>))))
 
 (define novena-barebones-raw-image
   (image
    (inherit
-    (os->image novena-barebones-os #:type novena-image-type))
+    (os+platform->image novena-barebones-os armv7-linux
+                        #:type novena-image-type))
    (name 'novena-barebones-raw-image)))
 
 ;; Return the default image.
diff --git a/gnu/system/images/pine64.scm b/gnu/system/images/pine64.scm
index 808c71295f..aaec458766 100644
--- a/gnu/system/images/pine64.scm
+++ b/gnu/system/images/pine64.scm
@@ -21,6 +21,7 @@
   #:use-module (gnu bootloader u-boot)
   #:use-module (gnu image)
   #:use-module (gnu packages linux)
+  #:use-module (gnu platforms arm)
   #:use-module (gnu services)
   #:use-module (gnu services base)
   #:use-module (gnu system)
@@ -57,12 +58,13 @@
 (define pine64-image-type
   (image-type
    (name 'pine64-raw)
-   (constructor (cut image-with-os (arm64-disk-image) <>))))
+   (constructor (cut image-with-os (raw-with-offset-disk-image) <>))))
 
 (define pine64-barebones-raw-image
   (image
    (inherit
-    (os->image pine64-barebones-os #:type pine64-image-type))
+    (os+platform->image pine64-barebones-os aarch64-linux
+                        #:type pine64-image-type))
    (name 'pine64-barebones-raw-image)))
 
 ;; Return the default image.
diff --git a/gnu/system/images/pinebook-pro.scm b/gnu/system/images/pinebook-pro.scm
index b6b844cef6..1bfac7a8bb 100644
--- a/gnu/system/images/pinebook-pro.scm
+++ b/gnu/system/images/pinebook-pro.scm
@@ -21,6 +21,7 @@
   #:use-module (gnu bootloader u-boot)
   #:use-module (gnu image)
   #:use-module (gnu packages linux)
+  #:use-module (gnu platforms arm)
   #:use-module (gnu services)
   #:use-module (gnu services base)
   #:use-module (gnu system)
@@ -58,13 +59,14 @@
   (image-type
    (name 'pinebook-pro-raw)
    (constructor (cut image-with-os
-                     (arm64-disk-image (* 9 (expt 2 20))) ;9MiB
+                     (raw-with-offset-disk-image (* 9 (expt 2 20))) ;9MiB
                      <>))))
 
 (define pinebook-pro-barebones-raw-image
   (image
    (inherit
-    (os->image pinebook-pro-barebones-os #:type pinebook-pro-image-type))
+    (os+platform->image pinebook-pro-barebones-os aarch64-linux
+                        #:type pinebook-pro-image-type))
    (name 'pinebook-pro-barebones-raw-image)))
 
 ;; Return the default image.
diff --git a/gnu/system/images/rock64.scm b/gnu/system/images/rock64.scm
index 68d3742adc..d25d55e528 100644
--- a/gnu/system/images/rock64.scm
+++ b/gnu/system/images/rock64.scm
@@ -21,6 +21,7 @@
   #:use-module (gnu bootloader u-boot)
   #:use-module (gnu image)
   #:use-module (gnu packages linux)
+  #:use-module (gnu platforms arm)
   #:use-module (gnu services)
   #:use-module (gnu services base)
   #:use-module (gnu services networking)
@@ -53,12 +54,15 @@
 (define rock64-image-type
   (image-type
    (name 'rock64-raw)
-   (constructor (cut image-with-os (arm64-disk-image (expt 2 24)) <>))))
+   (constructor (cut image-with-os
+                     (raw-with-offset-disk-image (expt 2 24))
+                     <>))))
 
 (define rock64-barebones-raw-image
   (image
    (inherit
-    (os->image rock64-barebones-os #:type rock64-image-type))
+    (os+platform->image rock64-barebones-os aarch64-linux
+                        #:type rock64-image-type))
    (name 'rock64-barebones-raw-image)))
 
 rock64-barebones-raw-image
diff --git a/gnu/system/install.scm b/gnu/system/install.scm
index 7b394184ad..073d7df1db 100644
--- a/gnu/system/install.scm
+++ b/gnu/system/install.scm
@@ -408,10 +408,7 @@ Access documentation at any time by pressing Alt-F2.\x1b[0m
 
           ;; Loopback device, needed by OpenSSH notably.
           (service static-networking-service-type
-                   (list (static-networking (interface "lo")
-                                            (ip "127.0.0.1")
-                                            (requirement '())
-                                            (provision '(loopback)))))
+                   (list %loopback-static-networking))
 
           (service wpa-supplicant-service-type)
           (dbus-service)
diff --git a/gnu/system/linux-initrd.scm b/gnu/system/linux-initrd.scm
index a083292fcf..c78dd09205 100644
--- a/gnu/system/linux-initrd.scm
+++ b/gnu/system/linux-initrd.scm
@@ -288,6 +288,9 @@ FILE-SYSTEMS."
     ,@(if (find (file-system-type-predicate "jfs") file-systems)
           (list jfs_fsck/static)
           '())
+    ,@(if (find (file-system-type-predicate "ntfs") file-systems)
+          (list ntfsfix/static)
+          '())
     ,@(if (find (file-system-type-predicate "f2fs") file-systems)
           (list f2fs-fsck/static)
           '())
@@ -349,7 +352,8 @@ FILE-SYSTEMS."
     "dm-crypt" "xts" "serpent_generic" "wp512" ;for encrypted root partitions
     "nls_iso8859-1"                            ;for `mkfs.fat`, et.al
     ,@(if (string-match "^(x86_64|i[3-6]86)-" system)
-          '("pata_acpi" "pata_atiixp"    ;for ATA controllers
+          '("framebuffer_coreboot"       ;for display during early (Core)boot
+            "pata_acpi" "pata_atiixp"    ;for ATA controllers
             "isci")                      ;for SAS controllers like Intel C602
           '())
 
diff --git a/gnu/system/locale.scm b/gnu/system/locale.scm
index 18bbe5ba32..b209b9b9cf 100644
--- a/gnu/system/locale.scm
+++ b/gnu/system/locale.scm
@@ -147,7 +147,6 @@ data format changes between libc versions."
 
 (define %default-locale-libcs
   ;; The libcs for which we build locales by default.
-  ;; List the previous and current libc to ease transition.
   (list glibc))
 
 (define %default-locale-definitions
diff --git a/gnu/system/mapped-devices.scm b/gnu/system/mapped-devices.scm
index 518dbc4fe8..96a381d5fe 100644
--- a/gnu/system/mapped-devices.scm
+++ b/gnu/system/mapped-devices.scm
@@ -192,7 +192,8 @@ option of @command{guix system}.\n")
   "Return a gexp that maps SOURCE to TARGET as a LUKS device, using
 'cryptsetup'."
   (with-imported-modules (source-module-closure
-                          '((gnu build file-systems)))
+                          '((gnu build file-systems)
+                            (guix build utils))) ;; For mkdir-p
     (match targets
       ((target)
        #~(let ((source #$(if (uuid? source)
@@ -201,7 +202,12 @@ option of @command{guix system}.\n")
            ;; XXX: 'use-modules' should be at the top level.
            (use-modules (rnrs bytevectors) ;bytevector?
                         ((gnu build file-systems)
-                         #:select (find-partition-by-luks-uuid)))
+                         #:select (find-partition-by-luks-uuid))
+                        ((guix build utils) #:select (mkdir-p)))
+
+           ;; Create '/run/cryptsetup/' if it does not exist, as device locking
+           ;; is mandatory for LUKS2.
+           (mkdir-p "/run/cryptsetup/")
 
            ;; Use 'cryptsetup-static', not 'cryptsetup', to avoid pulling the
            ;; whole world inside the initrd (for when we're in an initrd).
diff --git a/gnu/system/pam.scm b/gnu/system/pam.scm
index a31daada59..2574e019f1 100644
--- a/gnu/system/pam.scm
+++ b/gnu/system/pam.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-2017, 2019-2021 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -285,7 +285,7 @@ authenticate to run COMMAND."
           ;; These programs are setuid-root.
           (map (cut unix-pam-service <>
                     #:allow-empty-passwords? allow-empty-passwords?)
-               '("passwd" "sudo"))
+               '("passwd" "chfn" "sudo"))
           ;; This is setuid-root, as well.  Allow root to run "su" without
           ;; authenticating.
           (list (unix-pam-service "su"
diff --git a/gnu/system/shadow.scm b/gnu/system/shadow.scm
index 7c57222716..59f0a02c8b 100644
--- a/gnu/system/shadow.scm
+++ b/gnu/system/shadow.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2016 Alex Griffin <a@ajgrf.com>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -164,7 +165,12 @@ XTerm*utf8: always
 XTerm*metaSendsEscape: true\n"))
         (gdbinit   (plain-file "gdbinit" "\
 # Tell GDB where to look for separate debugging files.
-set debug-file-directory ~/.guix-profile/lib/debug
+guile
+(use-modules (gdb))
+(execute (string-append \"set debug-file-directory \"
+                        (or (getenv \"GDB_DEBUG_FILE_DIRECTORY\")
+                            \"~/.guix-profile/lib/debug\")))
+end
 
 # Authorize extensions found in the store, such as the
 # pretty-printers of libstdc++.
diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm
index 1e2d8b47c2..c2f7efa966 100644
--- a/gnu/system/vm.scm
+++ b/gnu/system/vm.scm
@@ -35,7 +35,7 @@
   #:use-module (guix base32)
   #:use-module ((guix self) #:select (make-config.scm))
 
-  #:use-module ((gnu build vm)
+  #:use-module ((gnu build marionette)
                 #:select (qemu-command))
   #:use-module (gnu packages base)
   #:use-module (gnu packages bootloaders)
@@ -51,6 +51,8 @@
 
   #:use-module (gnu bootloader)
   #:use-module (gnu bootloader grub)
+  #:use-module (gnu image)
+  #:use-module (gnu system image)
   #:use-module (gnu system linux-container)
   #:use-module (gnu system linux-initrd)
   #:use-module (gnu bootloader)
@@ -60,18 +62,13 @@
   #:use-module (gnu services base)
   #:use-module (gnu system uuid)
 
-  #:use-module (srfi srfi-1)
+  #:use-module ((srfi srfi-1) #:hide (partition))
   #:use-module (srfi srfi-26)
   #:use-module (rnrs bytevectors)
   #:use-module (ice-9 match)
 
-  #:export (expression->derivation-in-linux-vm
-            qemu-image
-            virtualized-operating-system
-
-            system-qemu-image/shared-store
+  #:export (virtualized-operating-system
             system-qemu-image/shared-store-script
-            system-docker-image
 
             virtual-machine
             virtual-machine?))
@@ -124,444 +121,6 @@
                            %default-msize-value))
           (check? #f))))
 
-(define not-config?
-  ;; Select (guix …) and (gnu …) modules, except (guix config).
-  (match-lambda
-    (('guix 'config) #f)
-    (('guix rest ...) #t)
-    (('gnu rest ...) #t)
-    (rest #f)))
-
-(define gcrypt-sqlite3&co
-  ;; Guile-Gcrypt, Guile-SQLite3, and their propagated inputs.
-  (append-map (lambda (package)
-                (cons package
-                      (match (package-transitive-propagated-inputs package)
-                        (((labels packages) ...)
-                         packages))))
-              (list guile-gcrypt guile-sqlite3)))
-
-(define* (expression->derivation-in-linux-vm name exp
-                                             #:key
-                                             (system (%current-system))
-                                             (linux linux-libre)
-                                             initrd
-                                             (qemu qemu-minimal)
-                                             (env-vars '())
-                                             (guile-for-build
-                                              (%guile-for-build))
-                                             (file-systems
-                                              %linux-vm-file-systems)
-
-                                             (single-file-output? #f)
-                                             (make-disk-image? #f)
-                                             (references-graphs #f)
-                                             (memory-size 256)
-                                             (disk-image-format "qcow2")
-                                             (disk-image-size 'guess)
-
-                                             (substitutable? #t))
-  "Evaluate EXP in a QEMU virtual machine running LINUX with INITRD (a
-derivation).  The virtual machine runs with MEMORY-SIZE MiB of memory.  In the
-virtual machine, EXP has access to FILE-SYSTEMS, which, by default, includes a
-9p share of the store, the '/xchg' where EXP should put its output file(s),
-and a 9p share of /tmp.
-
-If SINGLE-FILE-OUTPUT? is true, copy a single file from '/xchg' to OUTPUT.
-Otherwise, copy the contents of /xchg to a new directory OUTPUT.
-
-When MAKE-DISK-IMAGE? is true, then create a QEMU disk image of type
-DISK-IMAGE-FORMAT (e.g., 'qcow2' or 'raw'), of DISK-IMAGE-SIZE bytes and
-return it.  When DISK-IMAGE-SIZE is 'guess, estimate the image size based
-based on the size of the closure of REFERENCES-GRAPHS.
-
-When REFERENCES-GRAPHS is true, it must be a list of file name/store path
-pairs, as for `derivation'.  The files containing the reference graphs are
-made available under the /xchg CIFS share.
-
-SUBSTITUTABLE? determines whether the returned derivation should be marked as
-substitutable."
-  (define user-builder
-    (program-file "builder-in-linux-vm" exp))
-
-  (define loader
-    ;; Invoke USER-BUILDER instead using 'primitive-load'.  The reason for
-    ;; this is to allow USER-BUILDER to dlopen stuff by using a full-featured
-    ;; Guile, which it couldn't do using the statically-linked guile used in
-    ;; the initrd.  See example at
-    ;; <https://lists.gnu.org/archive/html/guix-devel/2017-10/msg00233.html>.
-    (program-file "linux-vm-loader"
-                  ;; Communicate USER-BUILDER's exit status via /xchg so that
-                  ;; the host can distinguish between success, failure, and
-                  ;; kernel panic.
-                  #~(let ((status (system* #$user-builder)))
-                      (call-with-output-file "/xchg/.exit-status"
-                        (lambda (port)
-                          (write status port)))
-                      (sync)
-                      (reboot))))
-
-  (define-syntax-rule (check predicate)
-    (let-system (system target)
-      (predicate (or target system))))
-
-  (let ((initrd (or initrd
-                    (base-initrd file-systems
-                                 #:on-error 'backtrace
-                                 #:linux linux
-                                 #:linux-modules %base-initrd-modules
-                                 #:qemu-networking? #t))))
-
-    (define builder
-      ;; Code that launches the VM that evaluates EXP.
-      (with-extensions gcrypt-sqlite3&co
-        (with-imported-modules `(,@(source-module-closure
-                                    '((guix build utils)
-                                      (gnu build vm))
-                                    #:select? not-config?)
-
-                                 ;; For consumption by (gnu store database).
-                                 ((guix config) => ,(make-config.scm)))
-          #~(begin
-              (use-modules (guix build utils)
-                           (gnu build vm))
-
-              ;; Allow non-ASCII file names--e.g., 'nss-certs'--to be decoded
-              ;; by 'estimated-partition-size' below.
-              (setenv "GUIX_LOCPATH"
-                      #+(file-append glibc-utf8-locales "/lib/locale"))
-              (setlocale LC_ALL "en_US.utf8")
-
-              (let* ((native-inputs
-                      '#+(list qemu (canonical-package coreutils)))
-                     (linux   (string-append
-                               #+linux "/"
-                               #+(system-linux-image-file-name system)))
-                     (initrd  #+initrd)
-                     (loader  #+loader)
-                     (graphs  '#$(match references-graphs
-                                   (((graph-files . _) ...) graph-files)
-                                   (_ #f)))
-                     (target  #$(let-system (system target)
-                                  (or target system)))
-                     (size    #$(if (eq? 'guess disk-image-size)
-                                    #~(+ (* 70 (expt 2 20)) ;ESP
-                                         (estimated-partition-size graphs))
-                                    disk-image-size)))
-
-                (set-path-environment-variable "PATH" '("bin") native-inputs)
-
-                (load-in-linux-vm loader
-                                  #:output #$output
-                                  #:linux linux #:initrd initrd
-                                  #:qemu (qemu-command target)
-                                  #:memory-size #$memory-size
-                                  #:make-disk-image? #$make-disk-image?
-                                  #:single-file-output? #$single-file-output?
-                                  #:disk-image-format #$disk-image-format
-                                  #:disk-image-size size
-                                  #:references-graphs graphs))))))
-
-    (gexp->derivation name builder
-                      ;; TODO: Require the "kvm" feature.
-                      #:system system
-                      #:target #f             ;EXP is always executed natively
-                      #:env-vars env-vars
-                      #:guile-for-build guile-for-build
-                      #:references-graphs references-graphs
-                      #:substitutable? substitutable?)))
-
-(define (has-guix-service-type? os)
-  "Return true if OS contains a service of the type GUIX-SERVICE-TYPE."
-  (not (not (find (lambda (service)
-                     (eq? (service-kind service) guix-service-type))
-                   (operating-system-services os)))))
-
-(define* (qemu-image #:key
-                     (name "qemu-image")
-                     (system (%current-system))
-                     (target (%current-target-system))
-                     (qemu qemu-minimal)
-                     (disk-image-size 'guess)
-                     (disk-image-format "qcow2")
-                     (file-system-type "ext4")
-                     (file-system-options '())
-                     (device-nodes 'linux)
-                     (extra-directives '())
-                     file-system-label
-                     file-system-uuid
-                     os
-                     bootcfg-drv
-                     bootloader
-                     (register-closures? (has-guix-service-type? os))
-                     (inputs '())
-                     copy-inputs?
-                     (substitutable? #t))
-  "Return a bootable, stand-alone QEMU image of type DISK-IMAGE-FORMAT (e.g.,
-'qcow2' or 'raw'), with a root partition of type FILE-SYSTEM-TYPE.
-Optionally, FILE-SYSTEM-LABEL can be specified as the volume name for the root
-partition; likewise FILE-SYSTEM-UUID, if true, specifies the UUID of the root
-partition (a UUID object).  FILE-SYSTEM-OPTIONS is an optional list of
-command-line options passed to 'mkfs.ext4' (or similar).
-
-The returned image is a full disk image that runs OS-DERIVATION,
-with a GRUB installation that uses GRUB-CONFIGURATION as its configuration
-file (GRUB-CONFIGURATION must be the name of a file in the VM.)
-
-INPUTS is a list of inputs (as for packages).  When COPY-INPUTS? is true, copy
-all of INPUTS into the image being built.  When REGISTER-CLOSURES? is true,
-register INPUTS in the store database of the image so that Guix can be used in
-the image.  By default, REGISTER-CLOSURES? is set to true only if a service of
-type GUIX-SERVICE-TYPE is present in the services definition of the operating
-system.
-
-When DEVICE-NODES is 'linux, create Linux-device block and character devices
-under /dev.  When it is 'hurd, do Hurdish things.
-
-EXTRA-DIRECTIVES is an optional list of directives to populate the root file
-system that is passed to 'populate-root-file-system'."
-  (define schema
-    (and register-closures?
-         (local-file (search-path %load-path
-                                  "guix/store/schema.sql"))))
-
-  (define preserve-target
-    (if target
-        (lambda (obj)
-          (with-parameters ((%current-target-system target))
-            obj))
-        identity))
-
-  (define inputs*
-    (map (match-lambda
-           ((name thing)
-            `(,name ,(preserve-target thing)))
-           ((name thing output)
-            `(,name ,(preserve-target thing) ,output)))
-         inputs))
-
-  (expression->derivation-in-linux-vm
-   name
-   (with-extensions gcrypt-sqlite3&co
-     (with-imported-modules `(,@(source-module-closure '((gnu build vm)
-                                                         (gnu build bootloader)
-                                                         (gnu build hurd-boot)
-                                                         (guix store database)
-                                                         (guix build utils))
-                                                       #:select? not-config?)
-                              ((guix config) => ,(make-config.scm)))
-       #~(begin
-           (use-modules (gnu build bootloader)
-                        (gnu build vm)
-                        ((gnu build hurd-boot)
-                         #:select (make-hurd-device-nodes))
-                        ((gnu build linux-boot)
-                         #:select (make-essential-device-nodes))
-                        (guix store database)
-                        (guix build utils)
-                        (srfi srfi-26)
-                        (ice-9 binary-ports))
-
-           (sql-schema #$schema)
-
-           ;; Allow non-ASCII file names--e.g., 'nss-certs'--to be decoded.
-           (setenv "GUIX_LOCPATH"
-                   #+(file-append glibc-utf8-locales "/lib/locale"))
-           (setlocale LC_ALL "en_US.utf8")
-
-           (let ((inputs
-                  '#+(append (list parted e2fsprogs dosfstools)
-                             (map canonical-package
-                                  (list sed grep coreutils findutils gawk))))
-
-                 ;; This variable is unused but allows us to add INPUTS-TO-COPY
-                 ;; as inputs.
-                 (to-register
-                  '#$(map (match-lambda
-                            ((name thing) thing)
-                            ((name thing output) `(,thing ,output)))
-                          inputs*)))
-
-             (set-path-environment-variable "PATH" '("bin" "sbin") inputs)
-
-             (let* ((graphs     '#$(match inputs
-                                     (((names . _) ...)
-                                      names)))
-                    (initialize (root-partition-initializer
-                                 #:extra-directives '#$extra-directives
-                                 #:closures graphs
-                                 #:copy-closures? #$copy-inputs?
-                                 #:register-closures? #$register-closures?
-                                 #:system-directory #$(preserve-target os)
-
-                                 #:make-device-nodes
-                                 #$(match device-nodes
-                                     ('linux #~make-essential-device-nodes)
-                                     ('hurd #~make-hurd-device-nodes))
-
-                                 ;; Disable deduplication to speed things up,
-                                 ;; and because it doesn't help much for a
-                                 ;; single system generation.
-                                 #:deduplicate? #f))
-                    (root-size  #$(if (eq? 'guess disk-image-size)
-                                      #~(max
-                                         ;; Minimum 20 MiB root size
-                                         (* 20 (expt 2 20))
-                                         (estimated-partition-size
-                                          (map (cut string-append "/xchg/" <>)
-                                               graphs)))
-                                      (- disk-image-size
-                                         (* 50 (expt 2 20)))))
-                    (partitions
-                     (append
-                      (list (partition
-                             (size root-size)
-                             (label #$file-system-label)
-                             (uuid #$(and=> file-system-uuid
-                                            uuid-bytevector))
-                             (file-system #$file-system-type)
-                             (file-system-options '#$file-system-options)
-                             (flags '(boot))
-                             (initializer initialize)))
-                      ;; Append a small EFI System Partition for use with UEFI
-                      ;; bootloaders if we are not targeting ARM because UEFI
-                      ;; support in U-Boot is experimental.
-                      ;;
-                      ;; FIXME: ‘target-arm?’ may be not operate on the right
-                      ;; system/target values.  Rewrite using ‘let-system’ when
-                      ;; available.
-                      (if #$(target-arm?)
-                          '()
-                          (list (partition
-                                 ;; The standalone grub image is about 10MiB, but
-                                 ;; leave some room for custom or multiple images.
-                                 (size (* 40 (expt 2 20)))
-                                 (label "GNU-ESP") ;cosmetic only
-                                 ;; Use "vfat" here since this property is used
-                                 ;; when mounting. The actual FAT-ness is based
-                                 ;; on file system size (16 in this case).
-                                 (file-system "vfat")
-                                 (flags '(esp)))))))
-                    (grub-efi #$(and (not (target-arm?)) grub-efi)))
-               (initialize-hard-disk "/dev/vda"
-                                     #:partitions partitions
-                                     #:grub-efi grub-efi
-                                     #:bootloader-package
-                                     #+(bootloader-package bootloader)
-                                     #:bootcfg #$(preserve-target bootcfg-drv)
-                                     #:bootcfg-location
-                                     #$(bootloader-configuration-file bootloader)
-                                     #:bootloader-installer
-                                     #+(bootloader-installer bootloader)))))))
-   #:system system
-   #:make-disk-image? #t
-   #:disk-image-size disk-image-size
-   #:disk-image-format disk-image-format
-   #:references-graphs inputs*
-   #:substitutable? substitutable?))
-
-(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
-base name to use for the output file.  When SHARED-NETWORK? is true, assume
-that the container will share network with the host and thus doesn't need a
-DHCP client, nscd, and so on.
-
-When REGISTER-CLOSURES? is true, register the closure of OS with Guix in the
-resulting Docker image.  By default, REGISTER-CLOSURES? is set to true only if
-a service of type GUIX-SERVICE-TYPE is present in the services definition of
-the operating system."
-  (define schema
-    (and register-closures?
-         (local-file (search-path %load-path
-                                  "guix/store/schema.sql"))))
-
-  (define boot-program
-    ;; Program that runs the boot script of OS, which in turn starts shepherd.
-    (program-file "boot-program"
-                  #~(let ((system (cadr (command-line))))
-                      (setenv "GUIX_NEW_SYSTEM" system)
-                      (execl #$(file-append guile-3.0 "/bin/guile")
-                             "guile" "--no-auto-compile"
-                             (string-append system "/boot")))))
-
-
-  (let ((os    (operating-system-with-gc-roots
-                (containerized-operating-system os '()
-                                                #:shared-network?
-                                                shared-network?)
-                (list boot-program)))
-        (name  (string-append name ".tar.gz"))
-        (graph "system-graph"))
-    (define build
-      (with-extensions (cons guile-json-3         ;for (guix docker)
-                             gcrypt-sqlite3&co)   ;for (guix store database)
-        (with-imported-modules `(,@(source-module-closure
-                                    '((guix docker)
-                                      (guix store database)
-                                      (guix build utils)
-                                      (guix build store-copy)
-                                      (gnu build vm))
-                                    #:select? not-config?)
-                                 ((guix config) => ,(make-config.scm)))
-          #~(begin
-              (use-modules (guix docker)
-                           (guix build utils)
-                           (gnu build vm)
-                           (srfi srfi-19)
-                           (guix build store-copy)
-                           (guix store database))
-
-              ;; Set the SQL schema location.
-              (sql-schema #$schema)
-
-              ;; Allow non-ASCII file names--e.g., 'nss-certs'--to be decoded.
-              (setenv "GUIX_LOCPATH"
-                      #+(file-append glibc-utf8-locales "/lib/locale"))
-              (setlocale LC_ALL "en_US.utf8")
-
-              (let* (;; This initializer requires elevated privileges that are
-                     ;; not normally available in the build environment (e.g.,
-                     ;; it needs to create device nodes).  In order to obtain
-                     ;; such privileges, we run it as root in a VM.
-                     (initialize (root-partition-initializer
-                                  #:closures '(#$graph)
-                                  #:register-closures? #$register-closures?
-                                  #:system-directory #$os
-                                  ;; De-duplication would fail due to
-                                  ;; cross-device link errors, so don't do it.
-                                  #:deduplicate? #f))
-                     ;; Even as root in a VM, the initializer would fail due to
-                     ;; lack of privileges if we use a root-directory that is on
-                     ;; a file system that is shared with the host (e.g., /tmp).
-                     (root-directory "/guixsd-system-root"))
-                (set-path-environment-variable "PATH" '("bin" "sbin") '(#+tar))
-                (mkdir root-directory)
-                (initialize root-directory)
-                (build-docker-image
-                 (string-append "/xchg/" #$name) ;; The output file.
-                 (cons* root-directory
-                        (map store-info-item
-                             (call-with-input-file
-                                 (string-append "/xchg/" #$graph)
-                               read-reference-graph)))
-                 #$os
-                 #:entry-point '(#$boot-program #$os)
-                 #:compressor '(#+(file-append gzip "/bin/gzip") "-9n")
-                 #:creation-time (make-time time-utc 0 1)
-                 #:transformations `((,root-directory -> ""))))))))
-
-    (expression->derivation-in-linux-vm
-     name build
-     #:memory-size memory-size
-     #:make-disk-image? #f
-     #:single-file-output? #t
-     #:references-graphs `((,graph ,os)))))
-
 
 ;;;
 ;;; VMs that share file systems with the host.
@@ -592,7 +151,8 @@ the operating system."
        (check? #f)
        (create-mount-point? #t)))))
 
-(define* (virtualized-operating-system os mappings #:optional (full-boot? #f))
+(define* (virtualized-operating-system os mappings
+                                       #:key (full-boot? #f) volatile?)
   "Return an operating system based on OS suitable for use in a virtualized
 environment with the store shared with the host.  MAPPINGS is a list of
 <file-system-mapping> to realize in the virtualized OS."
@@ -635,7 +195,7 @@ environment with the store shared with the host.  MAPPINGS is a list of
     (initrd (lambda (file-systems . rest)
               (apply (operating-system-initrd os)
                      file-systems
-                     #:volatile-root? #t
+                     #:volatile-root? volatile?
                      rest)))
 
     ;; Disable swap.
@@ -652,47 +212,8 @@ environment with the store shared with the host.  MAPPINGS is a list of
                          (needed-for-boot? #t))
                        virtual-file-systems)))))
 
-(define* (system-qemu-image/shared-store
-          os
-          #:key
-          (system (%current-system))
-          (target (%current-target-system))
-          full-boot?
-          (disk-image-size (* (if full-boot? 500 30) (expt 2 20))))
-  "Return a derivation that builds a QEMU image of OS that shares its store
-with the host.
-
-When FULL-BOOT? is true, return an image that does a complete boot sequence,
-bootloaded included; thus, make a disk image that contains everything the
-bootloader refers to: OS kernel, initrd, bootloader data, etc."
-  (define root-uuid
-    ;; Use a fixed UUID to improve determinism.
-    (operating-system-uuid os 'dce))
-
-  (define bootcfg
-    (operating-system-bootcfg os))
-
-  ;; XXX: When FULL-BOOT? is true, we end up creating an image that contains
-  ;; BOOTCFG and all its dependencies, including the output of OS.
-  ;; This is more than needed (we only need the kernel, initrd, GRUB for its
-  ;; font, and the background image), but it's hard to filter that.
-  (qemu-image #:os os
-              #:system system
-              #:target target
-              #:bootcfg-drv bootcfg
-              #:bootloader (bootloader-configuration-bootloader
-                            (operating-system-bootloader os))
-              #:disk-image-size disk-image-size
-              #:file-system-uuid root-uuid
-              #:inputs (if full-boot?
-                           `(("bootcfg" ,bootcfg))
-                           '())
-
-              ;; XXX: Passing #t here is too slow, so let it off by default.
-              #:register-closures? #f
-              #:copy-inputs? full-boot?))
-
-(define* (common-qemu-options image shared-fs)
+(define* (common-qemu-options image shared-fs
+                              #:key rw-image?)
   "Return the a string-value gexp with the common QEMU options to boot IMAGE,
 with '-virtfs' options for the host file systems listed in SHARED-FS."
 
@@ -708,13 +229,14 @@ with '-virtfs' options for the host file systems listed in SHARED-FS."
             '())
 
      "-no-reboot"
-     "-object" "rng-random,filename=/dev/urandom,id=guixsd-vm-rng"
-     "-device" "virtio-rng-pci,rng=guixsd-vm-rng"
+     "-object" "rng-random,filename=/dev/urandom,id=guix-vm-rng"
+     "-device" "virtio-rng-pci,rng=guix-vm-rng"
 
      #$@(map virtfs-option shared-fs)
-     "-vga std"
-     (format #f "-drive file=~a,if=virtio,cache=writeback,werror=report,readonly=on"
-             #$image)))
+     #$@(if rw-image?
+            #~((format #f "-drive file=~a,if=virtio" #$image))
+            #~((format #f "-drive file=~a,if=virtio,cache=writeback,werror=report,readonly=on"
+                       #$image)))))
 
 (define* (system-qemu-image/shared-store-script os
                                                 #:key
@@ -722,7 +244,8 @@ with '-virtfs' options for the host file systems listed in SHARED-FS."
                                                 (target (%current-target-system))
                                                 (qemu qemu)
                                                 (graphic? #t)
-                                                (memory-size 256)
+                                                (volatile? #t)
+                                                (memory-size 512)
                                                 (mappings '())
                                                 full-boot?
                                                 (disk-image-size
@@ -737,40 +260,61 @@ MAPPINGS is a list of <file-system-mapping> specifying mapping of host file
 systems into the guest.
 
 When FULL-BOOT? is true, the returned script runs everything starting from the
-bootloader; otherwise it directly starts the operating system kernel.  The
-DISK-IMAGE-SIZE parameter specifies the size in bytes of the root disk image;
-it is mostly useful when FULL-BOOT?  is true."
-  (mlet* %store-monad ((os ->  (virtualized-operating-system os mappings full-boot?))
-                       (image  (system-qemu-image/shared-store
-                                os
-                                #:system system
-                                #:target target
+bootloader; otherwise it directly starts the operating system kernel.  When
+VOLATILE? is true, an overlay is created on top of a read-only
+storage. Otherwise the storage is made persistent.  The DISK-IMAGE-SIZE
+parameter specifies the size in bytes of the root disk image; it is mostly
+useful when FULL-BOOT?  is true."
+  (mlet* %store-monad ((os ->  (virtualized-operating-system
+                                os mappings
                                 #:full-boot? full-boot?
-                                #:disk-image-size disk-image-size)))
+                                #:volatile? volatile?))
+                       (base-image -> (system-image
+                                       (image
+                                        (inherit
+                                         (raw-with-offset-disk-image))
+                                        (operating-system os)
+                                        (size disk-image-size)
+                                        (shared-store?
+                                         (and (not full-boot?) volatile?))
+                                        (volatile-root? volatile?)))))
     (define kernel-arguments
       #~(list #$@(if graphic? #~() #~("console=ttyS0"))
               #+@(operating-system-kernel-arguments os "/dev/vda1")))
 
+    (define rw-image
+      #~(format #f "/tmp/guix-image-~a" (basename #$base-image)))
+
     (define qemu-exec
       #~(list #+(file-append qemu "/bin/"
                              (qemu-command (or target system)))
+              ;; Tells qemu to use the terminal it was started in for IO.
+              #$@(if graphic? '() #~("-nographic"))
               #$@(if full-boot?
                      #~()
                      #~("-kernel" #$(operating-system-kernel-file os)
                         "-initrd" #$(file-append os "/initrd")
                         (format #f "-append ~s"
                                 (string-join #$kernel-arguments " "))))
-              #$@(common-qemu-options image
+              #$@(common-qemu-options (if volatile? base-image rw-image)
                                       (map file-system-mapping-source
-                                           (cons %store-mapping mappings)))
+                                           (cons %store-mapping mappings))
+                                      #:rw-image? (not volatile?))
               "-m " (number->string #$memory-size)
               #$@options))
 
     (define builder
       #~(call-with-output-file #$output
           (lambda (port)
-            (format port "#!~a~% exec ~a \"$@\"~%"
-                    #+(file-append bash "/bin/sh")
+            (format port "#!~a~%"
+                    #+(file-append bash "/bin/sh"))
+            (when (not #$volatile?)
+              (format port "~a~%"
+                      #$(program-file "copy-image"
+                                      #~(unless (file-exists? #$rw-image)
+                                          (copy-file #$base-image #$rw-image)
+                                          (chmod #$rw-image #o640)))))
+            (format port "exec ~a \"$@\"~%"
                     (string-join #$qemu-exec " "))
             (chmod port #o555))))
 
@@ -786,7 +330,9 @@ it is mostly useful when FULL-BOOT?  is true."
   virtual-machine?
   (operating-system virtual-machine-operating-system) ;<operating-system>
   (qemu             virtual-machine-qemu              ;<package>
-                    (default qemu))
+                    (default qemu-minimal))
+  (volatile?        virtual-machine-volatile?    ;Boolean
+                    (default #t))
   (graphic?         virtual-machine-graphic?      ;Boolean
                     (default #f))
   (memory-size      virtual-machine-memory-size   ;integer (MiB)
@@ -820,17 +366,19 @@ FORWARDINGS is a list of host-port/guest-port pairs."
 (define-gexp-compiler (virtual-machine-compiler (vm <virtual-machine>)
                                                 system target)
   (match vm
-    (($ <virtual-machine> os qemu graphic? memory-size disk-image-size ())
+    (($ <virtual-machine> os qemu volatile? graphic? memory-size
+                          disk-image-size ())
      (system-qemu-image/shared-store-script os
                                             #:system system
                                             #:target target
                                             #:qemu qemu
                                             #:graphic? graphic?
+                                            #:volatile? volatile?
                                             #:memory-size memory-size
                                             #:disk-image-size
                                             disk-image-size))
-    (($ <virtual-machine> os qemu graphic? memory-size disk-image-size
-                          forwardings)
+    (($ <virtual-machine> os qemu volatile? graphic? memory-size
+                          disk-image-size forwardings)
      (let ((options
             `("-nic" ,(string-append
                        "user,model=virtio-net-pci,"
@@ -840,6 +388,7 @@ FORWARDINGS is a list of host-port/guest-port pairs."
                                               #:target target
                                               #:qemu qemu
                                               #:graphic? graphic?
+                                              #:volatile? volatile?
                                               #:memory-size memory-size
                                               #:disk-image-size
                                               disk-image-size
diff --git a/gnu/tests/audio.scm b/gnu/tests/audio.scm
index 7bf7d4ef14..8aa6d1e818 100644
--- a/gnu/tests/audio.scm
+++ b/gnu/tests/audio.scm
@@ -48,9 +48,7 @@
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "mpd")
 
           (test-assert "service is running"
@@ -70,8 +68,7 @@
              '(system* #$(file-append mpd-mpc "/bin/mpc"))
              marionette))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
   (gexp->derivation "mpd-test" test))
 
 (define %test-mpd
diff --git a/gnu/tests/base.scm b/gnu/tests/base.scm
index 9429a10b75..38d4317e52 100644
--- a/gnu/tests/base.scm
+++ b/gnu/tests/base.scm
@@ -87,6 +87,7 @@ Otherwise assume that there is no password for root."
           (use-modules (gnu build marionette)
                        (guix build syscalls)
                        (srfi srfi-1)
+                       (srfi srfi-19)
                        (srfi srfi-26)
                        (srfi srfi-64)
                        (ice-9 match))
@@ -94,9 +95,7 @@ Otherwise assume that there is no password for root."
           (define marionette
             (make-marionette #$command))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "basic")
 
           #$(and initialization
@@ -198,6 +197,16 @@ info --version")
                      (pk 'services services)
                      '(root #$@(operating-system-shepherd-service-names os)))))
 
+          (test-equal "libc honors /etc/localtime"
+            -7200          ;CEST = GMT+2
+            ;; Assume OS is configured to have a CEST timezone.
+            (let* ((sept-2021 (time-second
+                               (date->time-utc
+                                (make-date 0 0 00 12 01 09 2021 7200)))))
+              (marionette-eval
+               `(tm:gmtoff (localtime ,sept-2021))
+               marionette)))
+
           (test-equal "/var/log/messages is not world-readable"
             #o640                                ;<https://bugs.gnu.org/40405>
             (begin
@@ -486,10 +495,11 @@ info --version")
 
           (test-assert "screendump"
             (begin
-              (marionette-control (string-append "screendump " #$output
-                                                 "/tty1.ppm")
-                                  marionette)
-              (file-exists? "tty1.ppm")))
+              (let ((capture
+                     (string-append #$output "/tty1.ppm")))
+                (marionette-control
+                 (string-append "screendump " capture) marionette)
+                (file-exists? capture))))
 
           (test-assert "screen text"
             (let ((text (marionette-screen-text marionette
@@ -505,8 +515,7 @@ info --version")
                                      "root@"
                                      #$(operating-system-host-name os))))))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation name test))
 
@@ -642,9 +651,7 @@ in a loop.  See <http://bugs.gnu.org/26931>.")
           (define marionette
             (make-marionette (list #$(virtual-machine os))))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "cleanup")
 
           (test-assert "dirty service worked"
@@ -657,8 +664,7 @@ in a loop.  See <http://bugs.gnu.org/26931>.")
                                 (scandir "/tmp"))
                              marionette))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "cleanup" test))
 
@@ -713,9 +719,7 @@ non-ASCII names from /tmp.")
           (define marionette
             (make-marionette (list #$(virtual-machine os))))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "mcron")
 
           (test-assert "service running"
@@ -752,8 +756,7 @@ non-ASCII names from /tmp.")
                                 result)
                              marionette))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation name test))
 
@@ -824,6 +827,7 @@ non-ASCII names from /tmp.")
           (mkdir #$output)
           (chdir #$output)
 
+          (test-runner-current (system-test-runner))
           (test-begin "avahi")
 
           (test-assert "nscd PID file is created"
@@ -902,8 +906,7 @@ non-ASCII names from /tmp.")
                     (= (hostent:addrtype result) AF_INET)))))
 
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "nss-mdns" test))
 
diff --git a/gnu/tests/ci.scm b/gnu/tests/ci.scm
index a8b39fcd01..5294514c66 100644
--- a/gnu/tests/ci.scm
+++ b/gnu/tests/ci.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2017, 2021 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>
@@ -70,9 +70,7 @@ HTTP-PORT."
             ;; port 8080 in the host.
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "laminar")
 
           (test-assert "service running"
@@ -116,8 +114,7 @@ HTTP-PORT."
              #:times 10
              #:delay 5))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "laminar-test" test))
 
diff --git a/gnu/tests/cups.scm b/gnu/tests/cups.scm
index 4e922e5023..4c7d78b7c8 100644
--- a/gnu/tests/cups.scm
+++ b/gnu/tests/cups.scm
@@ -54,9 +54,7 @@
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "cups")
 
           ;; Wait for the web interface to become ready.
@@ -80,8 +78,7 @@
                             #:decode-body? #t)))
               (response-code response)))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "cups-test" test))
 
diff --git a/gnu/tests/databases.scm b/gnu/tests/databases.scm
index c8d11e10c0..a20de1a8c7 100644
--- a/gnu/tests/databases.scm
+++ b/gnu/tests/databases.scm
@@ -61,9 +61,7 @@
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "memcached")
 
           ;; Wait for memcached to be up and running.
@@ -115,8 +113,7 @@
              '(file-exists? "/var/log/memcached")
              marionette))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "memcached-test" test))
 
@@ -179,9 +176,7 @@
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "postgresql")
 
           (test-assert "service running"
@@ -233,16 +228,14 @@
                 (let* ((port (open-pipe*
                               OPEN_READ
                               #$(file-append postgresql "/bin/psql")
-                              "-tAh" "/tmp"
-                              "-c" "SELECT 1 FROM pg_database WHERE
+                              "-tA" "-c" "SELECT 1 FROM pg_database WHERE
  datname='root'"))
                        (output (get-string-all port)))
                   (close-pipe port)
                   (string-contains output "1")))
              marionette))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "postgresql-test" test))
 
@@ -283,9 +276,7 @@
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "mysql")
 
           (test-assert "service running"
@@ -341,8 +332,7 @@
                   output))
              marionette))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "mysql-test" test))
 
diff --git a/gnu/tests/desktop.scm b/gnu/tests/desktop.scm
index 6aa22fd49b..57069c0ede 100644
--- a/gnu/tests/desktop.scm
+++ b/gnu/tests/desktop.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2017, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -43,9 +43,7 @@
           (define marionette
             (make-marionette '(#$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "elogind")
 
           ;; Log in as root on tty1, and check what 'loginctl' returns.
@@ -83,8 +81,7 @@
                       (guest-file "/root/seats")
                       (guest-file "/root/users")))))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "elogind" test))
 
diff --git a/gnu/tests/dict.scm b/gnu/tests/dict.scm
index c50e3cd6da..4d9702360c 100644
--- a/gnu/tests/dict.scm
+++ b/gnu/tests/dict.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2017, 2018 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2017, 2018, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -79,9 +79,7 @@
           (define %dico-socket
             (socket PF_INET SOCK_STREAM 0))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "dicod")
 
           ;; Wait for the service to be started.
@@ -117,8 +115,7 @@
                      (string-contains result "hello")
                      result))))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "dicod" test))
 
diff --git a/gnu/tests/docker.scm b/gnu/tests/docker.scm
index 92611b0a8d..6302bd0727 100644
--- a/gnu/tests/docker.scm
+++ b/gnu/tests/docker.scm
@@ -18,9 +18,11 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu tests docker)
+  #:use-module (gnu image)
   #:use-module (gnu tests)
   #:use-module (gnu system)
   #:use-module (gnu system file-systems)
+  #:use-module (gnu system image)
   #:use-module (gnu system vm)
   #:use-module (gnu services)
   #:use-module (gnu services dbus)
@@ -35,7 +37,7 @@
   #:use-module (guix monads)
   #:use-module (guix packages)
   #:use-module (guix profiles)
-  #:use-module (guix scripts pack)
+  #:use-module ((guix scripts pack) #:prefix pack:)
   #:use-module (guix store)
   #:use-module (guix tests)
   #:use-module (guix build-system trivial)
@@ -56,15 +58,18 @@
 inside %DOCKER-OS."
   (define os
     (marionette-operating-system
-     %docker-os
+     (operating-system-with-gc-roots
+      %docker-os
+      (list docker-tarball))
      #:imported-modules '((gnu services herd)
                           (guix combinators))))
 
   (define vm
     (virtual-machine
      (operating-system os)
-     (memory-size 700)
-     (disk-image-size (* 1500 (expt 2 20)))
+     (volatile? #f)
+     (memory-size 1024)
+     (disk-image-size (* 3000 (expt 2 20)))
      (port-forwardings '())))
 
   (define test
@@ -76,9 +81,7 @@ inside %DOCKER-OS."
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "docker")
 
           (test-assert "service running"
@@ -143,8 +146,7 @@ inside %DOCKER-OS."
                         (string->number response4))))
              marionette))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "docker-test" test))
 
@@ -176,11 +178,12 @@ standard output device and then enters a new line.")
                                            guest-script-package))
                                     #:hooks '()
                                     #:locales? #f))
-       (tarball (docker-image "docker-pack" profile
-                              #:symlinks '(("/bin/Guile" -> "bin/guile")
-                                           ("aa.scm" -> "a.scm"))
-                              #:entry-point "bin/guile"
-                              #:localstatedir? #t)))
+       (tarball (pack:docker-image
+                 "docker-pack" profile
+                 #:symlinks '(("/bin/Guile" -> "bin/guile")
+                              ("aa.scm" -> "a.scm"))
+                 #:entry-point "bin/guile"
+                 #:localstatedir? #t)))
     (run-docker-test tarball)))
 
 (define %test-docker
@@ -195,19 +198,18 @@ standard output device and then enters a new line.")
 inside %DOCKER-OS."
   (define os
     (marionette-operating-system
-     %docker-os
+     (operating-system-with-gc-roots
+      %docker-os
+      (list tarball))
      #:imported-modules '((gnu services herd)
                           (guix combinators))))
 
   (define vm
     (virtual-machine
      (operating-system os)
-     ;; FIXME: Because we're using the volatile-root setup where the root file
-     ;; system is a tmpfs overlaid over a small root file system, 'docker
-     ;; load' must be able to store the whole image into memory, hence the
-     ;; huge memory requirements.  We should avoid the volatile-root setup
-     ;; instead.
-     (memory-size 4500)
+     (volatile? #f)
+     (disk-image-size (* 5000 (expt 2 20)))
+     (memory-size 2048)
      (port-forwardings '())))
 
   (define test
@@ -221,9 +223,7 @@ inside %DOCKER-OS."
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "docker")
 
           (test-assert "service running"
@@ -288,8 +288,7 @@ inside %DOCKER-OS."
                          "status" "guix-daemon")))
              marionette))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "docker-system-test" test))
 
@@ -299,10 +298,12 @@ inside %DOCKER-OS."
    (description "Run a system image as produced by @command{guix system
 docker-image} inside Docker.")
    (value (with-monad %store-monad
-            (>>= (system-docker-image (operating-system
-                                        (inherit (simple-operating-system))
-                                        ;; Use locales for a single libc to
-                                        ;; reduce space requirements.
-                                        (locale-libcs (list glibc)))
-                                      #:memory-size 1024)
+            (>>= (lower-object
+                  (system-image (os->image
+                                 (operating-system
+                                   (inherit (simple-operating-system))
+                                   ;; Use locales for a single libc to
+                                   ;; reduce space requirements.
+                                   (locale-libcs (list glibc)))
+                                 #:type docker-image-type)))
                  run-docker-system-test)))))
diff --git a/gnu/tests/file-sharing.scm b/gnu/tests/file-sharing.scm
index 9a8ee6a593..d1343e2eba 100644
--- a/gnu/tests/file-sharing.scm
+++ b/gnu/tests/file-sharing.scm
@@ -91,9 +91,7 @@
                       (port-forwardings
                        `((9091 . ,%transmission-daemon-rpc-port)))))))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "transmission-daemon")
 
           ;; Make sure the "transmission" user and group have been created.
@@ -259,8 +257,7 @@
                                   "--auth" auth-string
                                   "--session-info"))))))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "transmission-daemon-test" test))
 
diff --git a/gnu/tests/ganeti.scm b/gnu/tests/ganeti.scm
index b64a332dde..f647e9554c 100644
--- a/gnu/tests/ganeti.scm
+++ b/gnu/tests/ganeti.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2020 Marius Bakke <marius@gnu.org>.
+;;; Copyright © 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -52,18 +52,15 @@
     (hosts-file (plain-file "hosts" (format #f "
 127.0.0.1       localhost
 ::1             localhost
-10.0.2.2        gnt1.example.com gnt1
+10.0.2.15       gnt1.example.com gnt1
 192.168.254.254 ganeti.example.com
 ")))
 
     (packages (append (list ganeti-instance-debootstrap ganeti-instance-guix)
                       %base-packages))
     (services
-     (append (list (static-networking-service "eth0" "10.0.2.2"
-                                              #:netmask "255.255.255.0"
-                                              #:gateway "10.0.2.1"
-                                              #:name-servers '("10.0.2.1"))
-
+     (append (list (service static-networking-service-type
+                            (list %qemu-static-networking))
                    (service openssh-service-type
                             (openssh-configuration
                              (permit-root-login 'prohibit-password)))
@@ -83,8 +80,7 @@
                           (master-netdev "eth0")
                           (hvparams '())
                           (extra-packages '())
-                          (rapi-port 5080)
-                          (noded-port 1811))
+                          (rapi-port 5080))
   "Run tests in %GANETI-OS."
   (define os
     (marionette-operating-system
@@ -96,7 +92,6 @@
                           (guix combinators))))
 
   (define %forwarded-rapi-port 5080)
-  (define %forwarded-noded-port 1811)
 
   (define vm
     (virtual-machine
@@ -104,22 +99,20 @@
      ;; Some of the daemons are fairly memory-hungry.
      (memory-size 512)
      ;; Forward HTTP ports so we can access them from the "outside".
-     (port-forwardings `((,%forwarded-rapi-port . ,rapi-port)
-                         (,%forwarded-noded-port . ,noded-port)))))
+     (port-forwardings `((,%forwarded-rapi-port . ,rapi-port)))))
 
   (define test
     (with-imported-modules '((gnu build marionette))
       #~(begin
           (use-modules (srfi srfi-11) (srfi srfi-64)
                        (web uri) (web client) (web response)
+                       (ice-9 iconv)
                        (gnu build marionette))
 
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "ganeti")
 
           ;; Ganeti uses the Shepherd to start/stop daemons, so make sure
@@ -213,18 +206,19 @@
                          "watcher" "continue"))
              marionette))
 
-          ;; Try accessing the RAPI.  This causes an expected failure:
-          ;;   https://github.com/ganeti/ganeti/issues/1502
-          ;; Run it anyway for easy testing of potential fixes.
+          ;; Try accessing the RAPI.
           (test-equal "http-get RAPI version"
-            '(200 "2")
+            '(200 "2\n")
             (let-values
                 (((response text)
                   (http-get #$(simple-format
                                #f "http://localhost:~A/version"
                                %forwarded-rapi-port)
-                            #:decode-body? #t)))
-              (list (response-code response) text)))
+                            #:decode-body? #f)))
+              (list (response-code response)
+                    ;; The API response lacks a content-type, so
+                    ;; (http-client) won't decode it for us.
+                    (bytevector->string text "UTF-8"))))
 
           (test-equal "gnt-os list"
             "debootstrap+default\nguix+default\n"
@@ -248,8 +242,7 @@
                          "destroy" "--yes-do-it"))
              marionette))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 1)))))
+          (test-end))))
 
   (gexp->derivation (string-append "ganeti-" hypervisor "-test") test))
 
diff --git a/gnu/tests/guix.scm b/gnu/tests/guix.scm
index af7d8f0b21..69cac7c1aa 100644
--- a/gnu/tests/guix.scm
+++ b/gnu/tests/guix.scm
@@ -74,9 +74,7 @@
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "guix-build-coordinator")
 
           (test-assert "service running"
@@ -99,8 +97,7 @@
                             #:decode-body? #t)))
               (response-code response)))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "guix-build-coordinator-test" test))
 
@@ -199,9 +196,7 @@ host	all	all	::1/128 	trust"))))))
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "guix-data-service")
 
           (test-assert "service running"
@@ -235,8 +230,7 @@ host	all	all	::1/128 	trust"))))))
                             #:decode-body? #t)))
               (response-code response)))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "guix-data-service-test" test))
 
diff --git a/gnu/tests/install.scm b/gnu/tests/install.scm
index 98de4c8359..ae8c6051f1 100644
--- a/gnu/tests/install.scm
+++ b/gnu/tests/install.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; 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 © 2017, 2019, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2020 Danny Milosavljevic <dannym@scratchpost.org>
@@ -31,7 +31,7 @@
   #:use-module (gnu system image)
   #:use-module (gnu system install)
   #:use-module (gnu system vm)
-  #:use-module ((gnu build vm) #:select (qemu-command))
+  #:use-module ((gnu build marionette) #:select (qemu-command))
   #:use-module (gnu packages admin)
   #:use-module (gnu packages bootloaders)
   #:use-module (gnu packages commencement)       ;for 'guile-final'
@@ -355,7 +355,7 @@ IMAGE, a disk image.  The QEMU VM has access to MEMORY-SIZE MiB of RAM."
                 (format #t "creating writable image from '~a'...~%" image)
                 (unless (zero? (system* #+(file-append qemu-minimal
                                                        "/bin/qemu-img")
-                                        "create" "-f" "qcow2"
+                                        "create" "-f" "qcow2" "-F" "qcow2"
                                         "-o"
                                         (string-append "backing_file=" image)
                                         "disk.img"))
@@ -925,7 +925,7 @@ reboot\n")
 
   (operating-system
     (host-name "bootroot")
-    (timezone "Europe/Madrid")
+    (timezone "Europe/Paris")
     (locale "en_US.UTF-8")
 
     (bootloader (bootloader-configuration
@@ -1168,7 +1168,7 @@ RAID-0 (stripe) root partition.")
 
   (operating-system
     (host-name "hurd")
-    (timezone "America/Montreal")
+    (timezone "Europe/Paris")
     (locale "en_US.UTF-8")
     (bootloader (bootloader-configuration
                  (bootloader grub-bootloader)
@@ -1679,11 +1679,15 @@ build (current-guix) and then store a couple of full system images.")
     ;; encryption support.  The installer produces a UUID for the partition;
     ;; this "UUID" is explicitly set in 'gui-test-program' to the value shown
     ;; below.
-    (swap-devices (if encrypted?
-                      '()
-                      (list (uuid "11111111-2222-3333-4444-123456789abc"))))
-    (services (cons (service dhcp-client-service-type)
-                    (operating-system-user-services %minimal-os-on-vda)))))
+    (swap-devices
+     (if encrypted?
+         '()
+         (list
+          (swap-space
+           (target (uuid "11111111-2222-3333-4444-123456789abc"))))))
+    (services (cons* (service dhcp-client-service-type)
+                     (service ntp-service-type)
+                     (operating-system-user-services %minimal-os-on-vda)))))
 
 (define* (installation-target-desktop-os-for-gui-tests
           #:key (encrypted? #f))
diff --git a/gnu/tests/ldap.scm b/gnu/tests/ldap.scm
index 197c1bfb28..d5403b3539 100644
--- a/gnu/tests/ldap.scm
+++ b/gnu/tests/ldap.scm
@@ -69,9 +69,7 @@
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "ldap")
 
           ;; Set up LDAP directory server
@@ -148,8 +146,7 @@ suffix = dc=example,dc=com")))
                               #$(file-append coreutils "/bin/true")))
              marionette))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "ldap-test" test))
 
diff --git a/gnu/tests/linux-modules.scm b/gnu/tests/linux-modules.scm
index fc8945b77f..69cb013267 100644
--- a/gnu/tests/linux-modules.scm
+++ b/gnu/tests/linux-modules.scm
@@ -76,23 +76,26 @@ that MODULES are actually loaded."
     (marionette-operating-system
      base-os
      #:imported-modules '((guix combinators))))
+
   (define vm (virtual-machine os))
+
   (define (test script)
     (with-imported-modules '((gnu build marionette))
       #~(begin
           (use-modules (gnu build marionette)
                        (srfi srfi-64))
+
           (define marionette
             (make-marionette (list #$vm)))
-          (mkdir #$output)
-          (chdir #$output)
+
+          (test-runner-current (system-test-runner #$output))
           (test-begin "loadable-kernel-modules")
           (test-assert "script successfully evaluated"
             (marionette-eval
              '(primitive-load #$script)
              marionette))
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
+
   (gexp->derivation "loadable-kernel-modules"
                     (test (modules-loaded?-program os module-names))))
 
diff --git a/gnu/tests/mail.scm b/gnu/tests/mail.scm
index eb8952b33a..f13751b72f 100644
--- a/gnu/tests/mail.scm
+++ b/gnu/tests/mail.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2016 Sou Bunnbu <iyzsong@member.fsf.org>
 ;;; Copyright © 2017 Carlo Zancanaro <carlo@zancanaro.id.au>
-;;; Copyright © 2017, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2017, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
 ;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2019 Christopher Baines <mail@cbaines.net>
@@ -85,9 +85,7 @@ match from any for local action inbound
                   code
                   (read-reply-code port))))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "opensmptd")
 
           (test-assert "service is running"
@@ -157,8 +155,7 @@ match from any for local action inbound
                          (sleep 1) (wait (- n 1))))))
              marionette))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "opensmtpd-test" test))
 
@@ -230,9 +227,7 @@ acl_check_data:
           (define smtp (socket AF_INET SOCK_STREAM 0))
           (define addr (make-socket-address AF_INET INADDR_LOOPBACK 1025))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "exim")
 
           (test-assert "service is running"
@@ -285,8 +280,7 @@ acl_check_data:
                                  (lambda (x) (not (string-prefix? "." x))))))
              marionette))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "exim-test" test))
 
@@ -338,9 +332,7 @@ acl_check_data:
           (define message "From: test@example.com\n\
 Subject: Hello Nice to meet you!")
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "dovecot")
 
           ;; Wait for dovecot to be up and running.
@@ -399,8 +391,7 @@ Subject: Hello Nice to meet you!")
                        get-string-all)))))
              marionette))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "dovecot-test" test))
 
@@ -489,9 +480,7 @@ Subject: Hello Nice to meet you!")
           (define message "From: test@example.com\n\
 Subject: Hello Nice to meet you!")
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "getmail")
 
           ;; Wait for dovecot to be up and running.
@@ -577,8 +566,7 @@ Subject: Hello Nice to meet you!")
               marionette)
              message))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "getmail-test" test))
 
diff --git a/gnu/tests/messaging.scm b/gnu/tests/messaging.scm
index 176e3d08cb..202a1c2f73 100644
--- a/gnu/tests/messaging.scm
+++ b/gnu/tests/messaging.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017, 2018 Clément Lassieur <clement@lassieur.org>
-;;; Copyright © 2017, 2018 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2017, 2018, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -98,9 +98,7 @@
                     (else
                      (error "file didn't show up" file)))))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "xmpp")
 
           ;; Wait for XMPP service to be up and running.
@@ -128,8 +126,7 @@
               (system* freetalk-bin "-s" #$script.ft)
               (host-wait-for-file #$witness)))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation name test))
 
@@ -191,9 +188,7 @@
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "bitlbee")
 
           (test-assert "service started"
@@ -231,8 +226,7 @@
               (->bool (string-contains (pk 'message (read-line sock))
                                        "BitlBee"))))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "bitlbee-test" test))
 
@@ -264,9 +258,7 @@
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "quassel")
 
           (test-assert "service started"
@@ -281,8 +273,7 @@
               '(file-exists? "/var/lib/quassel/quasselCert.pem")
               marionette))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "quassel-test" test))
 
diff --git a/gnu/tests/monitoring.scm b/gnu/tests/monitoring.scm
index 8630f5818c..ae0a8e0845 100644
--- a/gnu/tests/monitoring.scm
+++ b/gnu/tests/monitoring.scm
@@ -63,9 +63,7 @@
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin #$name)
 
           (test-assert "prometheus-node-exporter running"
@@ -87,8 +85,7 @@
                             (http-get "http://localhost:8080")))
                 (response-code response))))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation (string-append name "-test") test))
 
@@ -165,9 +162,7 @@ cat ~a | sudo -u zabbix psql zabbix;
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin #$name)
 
           ;; XXX: Shepherd reads the config file *before* binding its control
@@ -296,9 +291,7 @@ zabbix||{}
             (test-url "/")
             (test-url "/does-not-exist" 404))
 
-          (test-end)
-
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation (string-append name "-test") test))
 
diff --git a/gnu/tests/networking.scm b/gnu/tests/networking.scm
index 453e63f52d..3f3f653b8a 100644
--- a/gnu/tests/networking.scm
+++ b/gnu/tests/networking.scm
@@ -4,6 +4,7 @@
 ;;; Copyright © 2018 Chris Marusich <cmmarusich@gmail.com>
 ;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
+;;; Copyright © 2021 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -37,8 +38,96 @@
   #: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
-                        %test-ipfs))
+  #:export (%test-static-networking
+            %test-inetd
+            %test-openvswitch
+            %test-dhcpd
+            %test-tor
+            %test-iptables
+            %test-ipfs))
+
+
+;;;
+;;; Static networking.
+;;;
+
+(define (run-static-networking-test vm)
+  (define test
+    (with-imported-modules '((gnu build marionette)
+                             (guix build syscalls))
+      #~(begin
+          (use-modules (gnu build marionette)
+                       (guix build syscalls)
+                       (srfi srfi-64))
+
+          (define marionette
+            (make-marionette
+             '(#$vm "-nic" "user,model=virtio-net-pci")))
+
+          (test-runner-current (system-test-runner #$output))
+          (test-begin "static-networking")
+
+          (test-assert "service is up"
+            (marionette-eval
+             '(begin
+                (use-modules (gnu services herd))
+                (start-service 'networking))
+             marionette))
+
+          (test-assert "network interfaces"
+            (marionette-eval
+             '(begin
+                (use-modules (guix build syscalls))
+                (network-interface-names))
+             marionette))
+
+          (test-equal "address of eth0"
+            "10.0.2.15"
+            (marionette-eval
+             '(let* ((sock (socket AF_INET SOCK_STREAM 0))
+                     (addr (network-interface-address sock "eth0")))
+                (close-port sock)
+                (inet-ntop (sockaddr:fam addr) (sockaddr:addr addr)))
+             marionette))
+
+          (test-equal "netmask of eth0"
+            "255.255.255.0"
+            (marionette-eval
+             '(let* ((sock (socket AF_INET SOCK_STREAM 0))
+                     (mask (network-interface-netmask sock "eth0")))
+                (close-port sock)
+                (inet-ntop (sockaddr:fam mask) (sockaddr:addr mask)))
+             marionette))
+
+          (test-equal "eth0 is up"
+            IFF_UP
+            (marionette-eval
+             '(let* ((sock  (socket AF_INET SOCK_STREAM 0))
+                     (flags (network-interface-flags sock "eth0")))
+                (logand flags IFF_UP))
+             marionette))
+
+          (test-end))))
+
+  (gexp->derivation "static-networking" test))
+
+(define %test-static-networking
+  (system-test
+   (name "static-networking")
+   (description "Test the 'static-networking' service.")
+   (value
+    (let ((os (marionette-operating-system
+               (simple-operating-system
+                (service static-networking-service-type
+                         (list %qemu-static-networking)))
+               #:imported-modules '((gnu services herd)
+                                    (guix combinators)))))
+      (run-static-networking-test (virtual-machine os))))))
+
+
+;;;
+;;; Inetd.
+;;;
 
 (define %inetd-os
   ;; Operating system with 2 inetd services.
@@ -104,9 +193,7 @@ port 7, and a dict service on port 2628."
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "inetd")
 
           ;; Make sure the PID file is created.
@@ -137,8 +224,7 @@ port 7, and a dict service on port 2628."
                 (close dict)
                 response)))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "inetd-test" test))
 
@@ -180,9 +266,13 @@ port 7, and a dict service on port 2628."
 (define %openvswitch-os
   (operating-system
     (inherit (simple-operating-system
-              (static-networking-service "ovs0" "10.1.1.1"
-                                         #:netmask "255.255.255.252"
-                                         #:requirement '(openvswitch-configuration))
+              (simple-service 'openswitch-networking
+                              static-networking-service-type
+                              (list (static-networking
+                                     (addresses (list (network-address
+                                                       (value "10.1.1.1/24")
+                                                       (device "ovs0"))))
+                                     (requirement '(openvswitch-configuration)))))
               (service openvswitch-service-type)
               openvswitch-configuration-service))
     ;; Ensure the interface name does not change depending on the driver.
@@ -191,12 +281,15 @@ port 7, and a dict service on port 2628."
 (define (run-openvswitch-test)
   (define os
     (marionette-operating-system %openvswitch-os
-                                 #:imported-modules '((gnu services herd))))
+                                 #:imported-modules '((gnu services herd)
+                                                      (guix build syscalls))))
 
   (define test
-    (with-imported-modules '((gnu build marionette))
+    (with-imported-modules '((gnu build marionette)
+                             (guix build syscalls))
       #~(begin
           (use-modules (gnu build marionette)
+                       (guix build syscalls)
                        (ice-9 popen)
                        (ice-9 rdelim)
                        (srfi srfi-64))
@@ -204,9 +297,7 @@ port 7, and a dict service on port 2628."
           (define marionette
             (make-marionette (list #$(virtual-machine os))))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "openvswitch")
 
           ;; Make sure the bridge is created.
@@ -239,13 +330,24 @@ port 7, and a dict service on port 2628."
                              (srfi srfi-1))
                 (live-service-running
                  (find (lambda (live)
-                         (memq 'networking-ovs0
+                         (memq 'networking
                                (live-service-provision live)))
                        (current-services))))
              marionette))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-equal "ovs0 is up"
+            IFF_UP
+            (marionette-eval
+             '(begin
+                (use-modules (guix build syscalls))
+
+                (let* ((sock  (socket AF_INET SOCK_STREAM 0))
+                       (flags (network-interface-flags sock "ovs0")))
+                  (close-port sock)
+                  (logand flags IFF_UP)))
+             marionette))
+
+          (test-end))))
 
   (gexp->derivation "openvswitch-test" test))
 
@@ -282,10 +384,15 @@ subnet 192.168.1.0 netmask 255.255.255.0 {
 
 (define %dhcpd-os
   (simple-operating-system
-   (static-networking-service "ens3" "192.168.1.4"
-                              #:netmask "255.255.255.0"
-                              #:gateway "192.168.1.1"
-                              #:name-servers '("192.168.1.2" "192.168.1.3"))
+   (service static-networking-service-type
+            (list (static-networking
+                   (addresses (list (network-address
+                                     (value "192.168.1.4/24")
+                                     (device "ens3"))))
+                   (routes (list (network-route
+                                  (destination "default")
+                                  (gateway "192.168.1.1"))))
+                   (name-servers '("192.168.1.2" "192.168.1.3")))))
    (service dhcpd-service-type dhcpd-v4-configuration)))
 
 (define (run-dhcpd-test)
@@ -304,9 +411,7 @@ subnet 192.168.1.0 netmask 255.255.255.0 {
           (define marionette
             (make-marionette (list #$(virtual-machine os))))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "dhcpd")
 
           (test-assert "pid file exists"
@@ -339,8 +444,7 @@ subnet 192.168.1.0 netmask 255.255.255.0 {
                        (current-services))))
              marionette))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "dhcpd-test" test))
 
@@ -399,9 +503,7 @@ subnet 192.168.1.0 netmask 255.255.255.0 {
                        (current-services))))
              marionette))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "tor")
 
           ;; Test the usual Tor service.
@@ -433,8 +535,7 @@ subnet 192.168.1.0 netmask 255.255.255.0 {
               (wait-for-unix-socket "/var/run/tor/socks-sock"
                                     marionette/unix-socks-socket)))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "tor-test" test))
 
@@ -526,9 +627,7 @@ COMMIT
                            (loop (read-line in)))))))))
              marionette))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "iptables")
 
           (test-equal "iptables-save dumps the same rules that were loaded"
@@ -557,8 +656,7 @@ COMMIT
           ;;      marionette)
           ;;     (wait-for-tcp-port inetd-echo-port marionette #:timeout 5)))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "iptables" test))
 
@@ -622,9 +720,7 @@ COMMIT
              marionette))
 
           (marionette-eval '(use-modules (guix ipfs)) marionette)
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "ipfs")
 
           ;; Test the IPFS service.
@@ -644,8 +740,7 @@ COMMIT
             test-bv
             (read-contents (add-data test-bv)))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
   (gexp->derivation "ipfs-test" test))
 
 (define %test-ipfs
diff --git a/gnu/tests/nfs.scm b/gnu/tests/nfs.scm
index a0c091eadb..0d9972e0e9 100644
--- a/gnu/tests/nfs.scm
+++ b/gnu/tests/nfs.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2016, 2017, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2016, 2017, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016 John Darrington <jmd@gnu.org>
 ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
@@ -33,6 +33,7 @@
   #:use-module (gnu services base)
   #:use-module (gnu services nfs)
   #:use-module (gnu services networking)
+  #:use-module (gnu packages admin)
   #:use-module (gnu packages onc-rpc)
   #:use-module (gnu packages nfs)
   #:use-module (guix gexp)
@@ -40,7 +41,7 @@
   #:use-module (guix monads)
   #:export (%test-nfs
             %test-nfs-server
-            %test-nfs-root-fs))
+            %test-nfs-full))
 
 (define %base-os
   (operating-system
@@ -92,9 +93,7 @@
                        (error "Socket didn't show up: " ,file))))
              marionette))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "rpc-daemon")
 
           ;; Wait for the rpcbind daemon to be up and running.
@@ -130,8 +129,7 @@
              '(zero? (system* "rpcinfo" "-p"))
              marionette))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation name test))
 
@@ -198,9 +196,7 @@
           (define marionette
             (make-marionette (list #$(virtual-machine os))))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "nfs-daemon")
           (marionette-eval
            '(begin
@@ -252,8 +248,7 @@
                                      "nfs-server:/" "/remote" "-v"))
                      (file-exists? "/remote/hello")))
              marionette))
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "nfs-server-test" test))
 
@@ -265,41 +260,63 @@ directories can be mounted.")
    (value (run-nfs-server-test))))
 
 
-(define (run-nfs-root-fs-test)
+(define (run-nfs-full-test)
   "Run a test of an OS mounting its root file system via NFS."
   (define nfs-root-server-os
-    (marionette-operating-system
-     (operating-system
-       (inherit %nfs-os)
-       (services
-         (modify-services (operating-system-user-services %nfs-os)
-           (nfs-service-type config =>
-            (nfs-configuration
-             (debug '(nfs nfsd mountd))
-             ;;; Note: Adding the following line causes Guix to hang.
-             ;(rpcmountd-port 20001)
-             ;;; Note: Adding the following line causes Guix to hang.
-             ;(rpcstatd-port 20002) ; FIXME: Set broadcast port AND listening port.
-             (nfsd-port 2049)
-             (nfs-versions '("4.2"))
-             (exports '(("/export"
-                         "*(rw,insecure,no_subtree_check,crossmnt,fsid=root,no_root_squash,insecure,async)"))))))))
-     #:requirements '(nscd)
-     #:imported-modules '((gnu services herd)
-                          (guix combinators))))
+    (let ((os (simple-operating-system)))
+      (marionette-operating-system
+       (operating-system
+         (inherit os)
+         (services
+          (cons*
+           (service static-networking-service-type
+                    (list
+                     (static-networking
+                      (addresses (list (network-address
+                                        (device "ens5")
+                                        (value "10.0.2.15/24")))))))
+           (simple-service 'export activation-service-type
+                           #~(begin
+                               (mkdir-p "/export")
+                               (chmod "/export" #o777)))
+           (service nfs-service-type
+                    (nfs-configuration
+                     (nfsd-port 2049)
+                     (nfs-versions '("4.2"))
+                     (exports '(("/export"
+                                 "*(rw,insecure,no_subtree_check,\
+crossmnt,fsid=root,no_root_squash,insecure,async)")))))
+           (modify-services (operating-system-user-services os)
+             (syslog-service-type config
+                                  =>
+                                  (syslog-configuration
+                                   (inherit config)
+                                   (config-file
+                                    (plain-file
+                                     "syslog.conf"
+                                     "*.* /dev/console\n"))))))))
+       #:requirements '(nscd)
+       #:imported-modules '((gnu services herd)
+                            (guix combinators)))))
 
   (define nfs-root-client-os
     (marionette-operating-system
-     (operating-system
-       (inherit (simple-operating-system (service dhcp-client-service-type)))
-       (kernel-arguments '("ip=dhcp"))
-       (file-systems (cons
-                      (file-system
-                        (type "nfs")
-                        (mount-point "/")
-                        (device ":/export")
-                        (options "addr=127.0.0.1,vers=4.2"))
-                     %base-file-systems)))
+     (simple-operating-system
+      (service static-networking-service-type
+               (list
+                (static-networking
+                 (addresses
+                  (list (network-address
+                         (device "ens5")
+                         (value "10.0.2.16/24")))))))
+      (service nfs-service-type
+               (nfs-configuration
+                (nfsd-port 2049)
+                (nfs-versions '("4.2"))))
+      (simple-service 'export activation-service-type
+                      #~(begin
+                          (mkdir-p "/export")
+                          (chmod "/export" #o777))))
      #:requirements '(nscd)
      #:imported-modules '((gnu services herd)
                           (guix combinators))))
@@ -310,90 +327,60 @@ directories can be mounted.")
           (use-modules (gnu build marionette)
                        (srfi srfi-64))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "start-nfs-boot-test")
 
           ;;; Start up NFS server host.
-
           (mkdir "/tmp/server")
           (define server-marionette
-            (make-marionette (list #$(virtual-machine
-                                      nfs-root-server-os
-                                      ;(operating-system nfs-root-server-os)
-                                      ;(port-forwardings '( ; (111 . 111)
-                                      ;                    (2049 . 2049)
-                                      ;                    (20001 . 20001)
-                                      ;                    (20002 . 20002)))
-))
-                             #:socket-directory "/tmp/server"))
-
-          (marionette-eval
-           '(begin
-              (use-modules (gnu services herd))
-              (current-output-port
-               (open-file "/dev/console" "w0"))
-              ;; FIXME: Instead statfs "/" and "/export" and wait until they
-              ;; are different file systems.  But Guile doesn't seem to have
-              ;; statfs.
-              (sleep 5)
-              (chmod "/export" #o777)
-              (symlink "/gnu" "/export/gnu")
-              (start-service 'nscd)
-              (start-service 'networking)
-              (start-service 'nfs))
-           server-marionette)
+            (make-marionette
+             (cons* #$(virtual-machine
+                       (operating-system nfs-root-server-os)
+                       (volatile? #f))
+                    '("-device" "e1000,netdev=n1,mac=52:54:00:12:34:56"
+                      "-netdev" "socket,id=n1,listen=:1234"))
+             #:socket-directory "/tmp/server"))
 
           ;;; Wait for the NFS services to be up and running.
-
           (test-assert "nfs services are running"
-           (wait-for-file "/var/run/rpc.statd.pid" server-marionette))
+            (wait-for-file "/var/run/rpc.statd.pid" server-marionette))
 
           (test-assert "NFS port is ready"
             (wait-for-tcp-port 2049 server-marionette))
 
-          (test-assert "NFS statd port is ready"
-            (wait-for-tcp-port 20002 server-marionette))
-
-          (test-assert "NFS mountd port is ready"
-            (wait-for-tcp-port 20001 server-marionette))
-
-          ;;; FIXME: (test-assert "NFS portmapper port is ready"
-          ;;; FIXME:  (wait-for-tcp-port 111 server-marionette))
-
           ;;; Start up NFS client host.
-
+          (mkdir "/tmp/client")
           (define client-marionette
-            (make-marionette (list #$(virtual-machine
-                                      nfs-root-client-os
-                                      ;(port-forwardings '((111 . 111)
-                                      ;                    (2049 . 2049)
-                                      ;                    (20001 . 20001)
-                                      ;                    (20002 . 20002)))
-                                                          ))))
+            (make-marionette
+             (cons* #$(virtual-machine
+                       (operating-system nfs-root-client-os)
+                       (volatile? #f))
+                    '("-device" "e1000,netdev=n2,mac=52:54:00:12:34:57"
+                      "-netdev" "socket,id=n2,connect=127.0.0.1:1234"))
+             #:socket-directory "/tmp/client"))
+
+          (test-assert "NFS port is ready"
+            (wait-for-tcp-port 2049 client-marionette))
 
           (marionette-eval
            '(begin
-              (use-modules (gnu services herd))
               (use-modules (rnrs io ports))
-
               (current-output-port
                (open-file "/dev/console" "w0"))
-              (let ((content (call-with-input-file "/proc/mounts" get-string-all)))
-                (call-with-output-file "/mounts.new"
-                  (lambda (port)
-                    (display content port))))
-              (chmod "/mounts.new" #o777)
-              (rename-file "/mounts.new" "/mounts"))
+              (and
+               (system* (string-append #$nfs-utils "/sbin/mount.nfs")
+                        "10.0.2.15:/export" "/export" "-v")
+               (let ((content (call-with-input-file "/proc/mounts"
+                                get-string-all)))
+                 (call-with-output-file "/export/mounts"
+                   (lambda (port)
+                     (display content port))))))
            client-marionette)
 
-          (test-assert "nfs-root-client booted")
-
           ;;; Check whether NFS client host communicated with NFS server host.
-
           (test-assert "nfs client deposited file"
-           (wait-for-file "/export/mounts" server-marionette))
+            (wait-for-file "/export/mounts" server-marionette))
+
           (marionette-eval
            '(begin
               (current-output-port
@@ -401,14 +388,13 @@ directories can be mounted.")
               (call-with-input-file "/export/mounts" display))
            server-marionette)
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
-  (gexp->derivation "nfs-root-fs-test" test))
+  (gexp->derivation "nfs-full-test" test))
 
-(define %test-nfs-root-fs
+(define %test-nfs-full
   (system-test
-   (name "nfs-root-fs")
+   (name "nfs-full")
    (description "Test that an NFS server can be started and the exported
-directory can be used as root file system.")
-   (value (run-nfs-root-fs-test))))
+directory can be used by another machine.")
+   (value (run-nfs-full-test))))
diff --git a/gnu/tests/package-management.scm b/gnu/tests/package-management.scm
index 087eaf923e..fe897944d0 100644
--- a/gnu/tests/package-management.scm
+++ b/gnu/tests/package-management.scm
@@ -60,9 +60,7 @@
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin #$name)
 
           ;; XXX: Shepherd reads the config file *before* binding its control
@@ -105,9 +103,7 @@ derivation {
                                 "guix-test.nix")))
              marionette))
 
-	  (test-end)
-
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+	  (test-end))))
 
   (gexp->derivation (string-append name "-test") test))
 
diff --git a/gnu/tests/reconfigure.scm b/gnu/tests/reconfigure.scm
index 001b5d185a..ec845fe4b0 100644
--- a/gnu/tests/reconfigure.scm
+++ b/gnu/tests/reconfigure.scm
@@ -79,9 +79,7 @@ generation of the system profile."
                           entries)))
              marionette))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "switch-to-system")
 
           (let ((generations-prior (system-generations marionette)))
@@ -112,8 +110,7 @@ generation of the system profile."
                                  "jakob")
                marionette)))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "switch-to-system" (test (switch-system-program os))))
 
@@ -153,9 +150,7 @@ Shepherd (PID 1) by unloading obsolete services and loading new services."
                 (map live-service-canonical-name (current-services)))
              marionette))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "upgrade-services")
 
           (let ((services-prior (running-services marionette)))
@@ -176,8 +171,7 @@ Shepherd (PID 1) by unloading obsolete services and loading new services."
             (test-assert "script stopped obsolete service"
               (not (memq 'dummy (running-services marionette)))))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation
    "upgrade-services"
@@ -195,7 +189,9 @@ bootloader's configuration file."
      #:imported-modules '((gnu services herd)
                           (guix combinators))))
 
-  (define vm (virtual-machine os))
+  (define vm (virtual-machine
+              (operating-system os)
+              (volatile? #f)))
 
   (define (test script)
     (with-imported-modules '((gnu build marionette))
@@ -220,9 +216,7 @@ bootloader's configuration file."
                      (second (string-split (match:substring parameter) #\=)))
                    (list-matches "system=[^ ]*" grub-cfg))))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "install-bootloader")
 
           (test-assert "no prior menu entry for system generation"
@@ -236,8 +230,7 @@ bootloader's configuration file."
           (test-assert "menu entry created for system generation"
             (member #$os (generations-in-grub-cfg marionette)))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (let* ((bootloader ((compose bootloader-configuration-bootloader
                                operating-system-bootloader)
diff --git a/gnu/tests/rsync.scm b/gnu/tests/rsync.scm
index 24e60d9d9d..ea53a157bb 100644
--- a/gnu/tests/rsync.scm
+++ b/gnu/tests/rsync.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017 Christopher Baines <mail@cbaines.net>
 ;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org>
+;;; Copyright © 2021 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -54,9 +55,7 @@ PORT."
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "rsync")
 
           ;; Wait for rsync to be up and running.
@@ -106,8 +105,36 @@ PORT."
                     (read-line port))))
              marionette))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-equal "Test file not copied to read-only share"
+            1                                  ;see "EXIT VALUES" in rsync(1)
+            (marionette-eval
+             '(status:exit-val
+               (system* "rsync" "/tmp/input"
+                        (string-append "rsync://localhost:"
+                                       (number->string #$rsync-port)
+                                       "/read-only/input")))
+             marionette))
+
+          (test-equal "Test file correctly received from read-only share"
+            "\"Hi!\" from the read-only share."
+            (marionette-eval
+             '(begin
+                (use-modules (ice-9 rdelim))
+
+                (call-with-output-file "/srv/read-only/the-file"
+                  (lambda (port)
+                    (display "\"Hi!\" from the read-only share." port)))
+
+                (zero?
+                 (system* "rsync"
+                          (string-append "rsync://localhost:"
+                                         (number->string #$rsync-port)
+                                         "/read-only/the-file")
+                          "/tmp/output"))
+                (call-with-input-file "/tmp/output" read-line))
+             marionette))
+
+          (test-end))))
 
   (gexp->derivation "rsync-test" test))
 
@@ -116,7 +143,15 @@ PORT."
   (let ((base-os
          (simple-operating-system
           (service dhcp-client-service-type)
-          (service rsync-service-type))))
+          (service rsync-service-type
+                   (rsync-configuration
+                    (modules (list (rsync-module
+                                    (name "read-only")
+                                    (file-name "/srv/read-only"))
+                                   (rsync-module
+                                    (name "files")
+                                    (file-name "/srv/read-write")
+                                    (read-only? #f)))))))))
     (operating-system
       (inherit base-os)
       (packages (cons* rsync
diff --git a/gnu/tests/security-token.scm b/gnu/tests/security-token.scm
index 1169a4b9fd..07270c0bfd 100644
--- a/gnu/tests/security-token.scm
+++ b/gnu/tests/security-token.scm
@@ -44,9 +44,7 @@
           (define marionette
             (make-marionette (list #$(virtual-machine os))))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "pcscd")
 
           (test-assert "pcscd is alive"
@@ -59,8 +57,7 @@
                        (current-services))))
              marionette))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "pcscd" test))
 
diff --git a/gnu/tests/singularity.scm b/gnu/tests/singularity.scm
index 1fc2773a00..f4b9776b48 100644
--- a/gnu/tests/singularity.scm
+++ b/gnu/tests/singularity.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2019, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -72,9 +72,7 @@
           (define marionette
             (make-marionette (list #$(virtual-machine os))))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "singularity")
 
           (test-assert "singularity exec /bin/guile (as root)"
@@ -126,8 +124,7 @@
                         "--debug" "run" #$image "-c" "(use-modules (json))"))
              marionette))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "singularity-test" test))
 
diff --git a/gnu/tests/ssh.scm b/gnu/tests/ssh.scm
index 10438ad22a..791ff7b73f 100644
--- a/gnu/tests/ssh.scm
+++ b/gnu/tests/ssh.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; 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 © 2017, 2018 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
 ;;;
@@ -108,9 +108,7 @@ root with an empty password."
                         ('denied
                          (loop rest)))))))))
 
-            (mkdir #$output)
-            (chdir #$output)
-
+            (test-runner-current (system-test-runner #$output))
             (test-begin "ssh-daemon")
 
             ;; Wait for sshd to be up and running.
@@ -209,8 +207,7 @@ root with an empty password."
                    (channel-request-exec channel "path-witness")
                    (zero? (channel-get-exit-status channel))))))
 
-            (test-end)
-            (exit (= (test-runner-fail-count (test-runner-current)) 0))))))
+            (test-end)))))
 
   (gexp->derivation name test))
 
diff --git a/gnu/tests/telephony.scm b/gnu/tests/telephony.scm
index aeb6500c47..bc464a431a 100644
--- a/gnu/tests/telephony.scm
+++ b/gnu/tests/telephony.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gnu.org>.
+;;; Copyright © 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>.
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -138,9 +138,7 @@ accounts provisioning feature of the service."
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "jami")
 
           (test-assert "service is running"
@@ -176,7 +174,7 @@ accounts provisioning feature of the service."
                   ;; in the service; use retries.
                   (with-retries 20 1
                     (not (zero? (status:exit-val
-                                 (system* "pgrep" "dring")))))))
+                                 (system* "pgrep" "jamid")))))))
              marionette))
 
           (test-assert "service can be restarted"
@@ -341,8 +339,7 @@ accounts provisioning feature of the service."
                              account-details)))))
              marionette))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation (if provisioning?
                         "jami-provisioning-test"
diff --git a/gnu/tests/version-control.scm b/gnu/tests/version-control.scm
index a7cde1f163..fd3dba88ba 100644
--- a/gnu/tests/version-control.scm
+++ b/gnu/tests/version-control.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017, 2018 Oleg Pykhalov <go.wigust@gmail.com>
-;;; Copyright © 2017, 2018, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2017, 2018, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017, 2018 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2018 Christopher Baines <mail@cbaines.net>
 ;;;
@@ -132,9 +132,7 @@ HTTP-PORT."
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "cgit")
 
           ;; XXX: Shepherd reads the config file *before* binding its control
@@ -210,8 +208,7 @@ HTTP-PORT."
             (test-url "/test/tree/does-not-exist" 404)
             (test-url "/does-not-exist" 404))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "cgit-test" test))
 
@@ -270,9 +267,7 @@ HTTP-PORT."
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "git-http")
 
           ;; Wait for nginx to be up and running.
@@ -302,8 +297,7 @@ HTTP-PORT."
               (call-with-input-file "/tmp/clone/README"
                 get-string-all)))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "git-http" test))
 
@@ -367,9 +361,7 @@ HTTP-PORT."
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "gitolite")
 
           ;; Wait for sshd to be up and running.
@@ -410,8 +402,7 @@ HTTP-PORT."
             (test-assert "pushing, and the associated hooks"
               (invoke #$(file-append git "/bin/git") "push")))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "gitolite" test))
 
@@ -458,7 +449,8 @@ HTTP-PORT."
   (define vm
     (virtual-machine
      (operating-system os)
-     (port-forwardings `((8081 . ,http-port)))))
+     (port-forwardings `((8081 . ,http-port)))
+     (memory-size 1024)))
 
   (define test
     (with-imported-modules '((gnu build marionette))
@@ -472,9 +464,7 @@ HTTP-PORT."
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "gitile")
 
           ;; XXX: Shepherd reads the config file *before* binding its control
@@ -540,8 +530,7 @@ HTTP-PORT."
             (test-url "/test/tree/-/does-not-exist" 404)
             (test-url "/does-not-exist" 404))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "gitile-test" test))
 
diff --git a/gnu/tests/virtualization.scm b/gnu/tests/virtualization.scm
index 9f9d3a5e26..628cd0549b 100644
--- a/gnu/tests/virtualization.scm
+++ b/gnu/tests/virtualization.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017 Christopher Baines <mail@cbaines.net>
-;;; Copyright © 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2021 Pierre Langlois <pierre.langlois@gmx.com>
 ;;;
@@ -73,9 +73,7 @@
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "libvirt")
 
           (test-assert "service running"
@@ -107,8 +105,7 @@
                          "-c" "qemu:///system" "connect"))
              marionette))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "libvirt-test" test))
 
@@ -193,9 +190,7 @@
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "childhurd")
 
           (test-assert "service running"
@@ -250,8 +245,7 @@
                  (open-input-pipe #$run-uname-over-ssh)))
              marionette))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "childhurd-test" test))
 
diff --git a/gnu/tests/web.scm b/gnu/tests/web.scm
index 518c9c1ff3..4e8eceaa2b 100644
--- a/gnu/tests/web.scm
+++ b/gnu/tests/web.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2017, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2017, 2020-2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017, 2019 Christopher Baines <mail@cbaines.net>
 ;;; Copyright © 2017, 2018 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2018 Pierre-Antoine Rouby <pierre-antoine.rouby@inria.fr>
@@ -113,9 +113,7 @@ HTTP-PORT."
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin #$name)
 
           (test-assert #$(string-append name " service running")
@@ -150,8 +148,7 @@ HTTP-PORT."
                       marionette)))
                  '())
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation (string-append name "-test") test))
 
@@ -309,9 +306,7 @@ HTTP-PORT, along with php-fpm."
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "php-fpm")
 
           (test-assert "php-fpm running"
@@ -350,9 +345,7 @@ HTTP-PORT, along with php-fpm."
                   (and matches
                        (match:substring matches 0))))))
 
-          (test-end)
-
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "php-fpm-test" test))
 
@@ -394,9 +387,7 @@ HTTP-PORT, along with php-fpm."
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin #$name)
 
           (test-assert "hpcguix-web running"
@@ -422,8 +413,7 @@ HTTP-PORT, along with php-fpm."
                #:times 10
                #:delay 5)))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation (string-append name "-test") test))
 
@@ -438,7 +428,8 @@ HTTP-PORT, along with php-fpm."
    (service dhcp-client-service-type)
    (service hpcguix-web-service-type
             (hpcguix-web-configuration
-             (specs %hpcguix-web-specs)))))
+             (specs %hpcguix-web-specs)
+             (address "0.0.0.0")))))
 
 (define %test-hpcguix-web
   (system-test
@@ -486,9 +477,7 @@ HTTP-PORT."
             ;; port 8080 in the host.
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "tailon")
 
           (test-assert "service running"
@@ -512,8 +501,7 @@ HTTP-PORT."
              #:times 10
              #:delay 5))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "tailon-test" test))
 
@@ -576,7 +564,7 @@ HTTP-PORT."
                (listen '("8080"))))))
    (service postgresql-service-type
             (postgresql-configuration
-             (postgresql postgresql-10)))
+             (postgresql postgresql)))
    (service patchwork-service-type
             (patchwork-configuration
              (patchwork patchwork)
@@ -630,9 +618,7 @@ HTTP-PORT."
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "patchwork")
 
           (test-assert "patchwork-postgresql-user-and-service started"
@@ -667,8 +653,7 @@ HTTP-PORT."
              #:times 10
              #:delay 5))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "patchwork-test" test))